gnupg-1.4.20/0000755000175000017500000000000012635457223007730 500000000000000gnupg-1.4.20/gnupg.spec0000644000175000017500000002053212635457223011646 00000000000000# -*- coding: utf-8 -*- # gnupg -- gnu privacy guard # This is a template. The dist target uses it to create the real file. # %define version 1.4.20 %define name gnupg Summary: GNU Utility for data encryption and digital signatures Summary(it): Utility GNU per la sicurezza nelle comunicazioni e nell'archiviazione dei dati. Summary(cs): GNU nástroj pro ¹ifrovanou komunikaci a bezpeèné ukládání dat Summary(fr): Utilitaire GNU de chiffrement et d'authentification des communications et des données Summary(pl): Narzêdzie GNU do szyfrowania i podpisywania danych Vendor: GNU Privacy Guard Project Name: %{name} Version: %{version} Release: 1 Copyright: GPL Group: Applications/Cryptography Group(cs): Aplikace/©ifrování Group(fr): Applications/Cryptographie Group(it): Applicazioni/Crittografia Source: ftp://ftp.gnupg.org/gcrypt/gnupg/%{name}-%{version}.tar.gz URL: http://www.gnupg.org/ Provides: gpg openpgp Requires(post,preun): /sbin/install-info BuildRoot: %{_tmppath}/rpmbuild_%{name}-%{version} %changelog * Sun Aug 21 2005 David Shaw - Distribute gpg-zip. * Fri Apr 22 2005 David Shaw - No longer any need to override libexecdir. The makefiles now calculate this correctly internally. * Wed Feb 16 2005 David Shaw - Fix problem with storing the gpgkeys helpers in libexec, but calling them in libexec/gnupg. * Wed Jul 30 2003 David Shaw - Rework much of the spec to use %-macros throughout. - Fix to work properly with RPM 4.1 (all files in buildroot must be packaged) - Package and install info files. - Tweak the English description. - There is no need to install gpgv and gpgsplit setuid root. * Sat Nov 30 2002 David Shaw - Add convert-from-106 script * Sat Oct 26 2002 David Shaw - Use new path for keyserver helpers. - /usr/lib is no longer used for cipher/hash plugins. - Include gpgv, gpgsplit, and the new gnupg.7 man page. * Fri Apr 19 2002 David Shaw - Removed OPTIONS and pubring.asc - no longer used - Added doc/samplekeys.asc * Sun Mar 31 2002 David Shaw - Added the gpgkeys_xxx keyserver helpers. - Added a * to catch variations on the basic gpg man page (gpg, gpgv). - Mark options.skel as a config file. - Do not include the FAQ/faq.html twice (in /doc/ and /share/). * Wed Sep 06 2000 Fabio Coatti - Added Polish description and summary (Kindly provided by Lukasz Stelmach ) * Thu Jul 13 2000 Fabio Coatti - Added a * to catch all formats for man pages (plain, gz, bz2...) * Mon May 01 2000 Fabio Coatti - Some corrections in French description, thanks to Gaël Quéri ; Some corrections to Italian descriptions. * Tue Apr 25 2000 Fabio Coatti - Removed the no longer needed patch for man page by Keith Owens * Wed Mar 1 2000 Petr Kri¹tof - Czech descriptions added; some fixes and updates. * Sat Jan 15 2000 Keith Owens - Add missing man page as separate patch instead of updating the tar file. * Mon Dec 27 1999 Fabio Coatti - Upgraded for 1.0.1 (added missing gpg.1 man page) * Sat May 29 1999 Fabio Coatti - Some corrections in French description, thanks to Gaël Quéri * Mon May 17 1999 Fabio Coatti - Added French description, provided by Christophe Labouisse * Thu May 06 1999 Fabio Coatti - Upgraded for 0.9.6 (removed gpgm) * Tue Jan 12 1999 Fabio Coatti - LINGUAS variable is now unset in configure to ensure that all languages will be built. (Thanks to Luca Olivetti ) * Sat Jan 02 1999 Fabio Coatti - Added pl language file. - Included g10/pubring.asc in documentation files. * Sat Dec 19 1998 Fabio Coatti - Modified the spec file provided by Caskey L. Dickson - Now it can be built also by non-root. Installation has to be done as root, gpg is suid. - Added some changes by Ross Golder - Updates for version 0.4.5 of GnuPG (.mo files) %description GnuPG (GNU Privacy Guard) is a GNU utility for encrypting data and creating digital signatures. GnuPG has advanced key management capabilities and is compliant with the proposed OpenPGP Internet standard described in RFC-2440. Since GnuPG doesn't use any patented algorithms, it is not compatible with some versions of PGP 2 which use only the patented IDEA algorithm. See http://www.gnupg.org/why-not-idea.html for information on using IDEA if the patent does not apply to you and you need to be compatible with these versions of PGP 2. %description -l it GnuPG (GNU Privacy Guard) è una utility GNU per la cifratura di dati e la creazione di firme digitali. Possiede una gestione avanzata delle chiavi ed è conforme allo standard Internet OpenPGP, descritto nella RFC 2440. Non utilizzando algoritmi brevettati, non è compatibile con PGP2 (PGP2.x usa solo IDEA, coperto da brevetto mondiale, ed RSA, brevettato negli USA con scadenza 20/09/2000). Questi algoritmi sono utilizzabili da GnuPG tramite moduli esterni. %description -l fr GnuPG est un utilitaire GNU destiné à chiffrer des données et à créer des signatures électroniques. Il a des capacités avancées de gestion de clés et il est conforme à la norme proposée OpenPGP décrite dans la RFC2440. Comme GnuPG n'utilise pas d'algorithme breveté, il n'est compatible avec aucune version de PGP2 (PGP2.x ne sait utiliser que l'IDEA breveté dans le monde entier et RSA, breveté aux États-Unis jusqu'au 20 septembre 2000). %description -l cs GnuPG je GNU nástroj pro bezpeènou komunikaci a ukládání dat. Mù¾e být pou¾it na ¹ifrování dat a vytváøení digitálních podpisù. Obsahuje funkce pro pokroèilou správu klíèù a vyhovuje navrhovanému OpenPGP Internet standardu podle RFC2440. Byl vytvoøen jako kompletní náhrada za PGP. Proto¾e neobsahuje ¹ifrovací algoritmy IDEA nebo RSA, mù¾e být pou¾íván bez omezení. Proto¾e GnuPG nepou¾ívá ¾ádný patentovaný algoritmus, nemù¾e být úplnì kompatibilní s PGP verze 2. PGP 2.x pou¾ívá algoritmy IDEA (patentováno celosvìtovì) a RSA (patentováno ve Spojených státech do 20. záøí 2000). Tyto algoritmy lze zavést do GnuPG pomocí externích modulù. %description -l pl GnuPG (GNU Privacy Guard) jest narzędziem do szyfrowania danych i tworzenia cyfrowych podpisów. GnuPG posiada zaawansowane możliwości obsługi kluczy i jest zgodne z proponowanym standardem internetowym OpenPGP, opisanym w RFC2440. Ponieważ GnuPG nie używa żadnych opatentowanych algorytmów, nie jest zgodne z jakąkolwiek wersją PGP2 (PGP2.x korzysta jedynie z algorytmów: IDEA, opatentowanego na calym świecie oraz RSA, którego patent na terenie Stanów Zjednoczonych wygasa 20. września 2000). %prep rm -rf $RPM_BUILD_ROOT %setup %build if test -n "$LINGUAS"; then unset LINGUAS fi %configure --program-prefix=%{?_program_prefix:%{_program_prefix}} make %install %makeinstall %find_lang %{name} rm %{buildroot}%{_datadir}/%{name}/FAQ rm %{buildroot}%{_datadir}/%{name}/faq.html rm -f %{buildroot}%{_infodir}/dir %files -f %{name}.lang %defattr (-,root,root) %doc INSTALL AUTHORS COPYING NEWS README THANKS TODO PROJECTS doc/DETAILS %doc doc/FAQ doc/faq.html doc/HACKING doc/OpenPGP doc/samplekeys.asc %doc %attr (0755,root,root) tools/convert-from-106 %config %{_datadir}/%{name}/options.skel %{_mandir}/man1/* %{_mandir}/man7/* %{_infodir}/gnupg1.info* %attr (4755,root,root) %{_bindir}/gpg %attr (0755,root,root) %{_bindir}/gpgv %attr (0755,root,root) %{_bindir}/gpgsplit %attr (0755,root,root) %{_bindir}/gpg-zip %attr (0755,root,root) %{_libexecdir}/gnupg/* %post /sbin/install-info %{_infodir}/gpg.info %{_infodir}/dir 2>/dev/null || : /sbin/install-info %{_infodir}/gpgv.info %{_infodir}/dir 2>/dev/null || : %preun if [ $1 = 0 ]; then /sbin/install-info --delete %{_infodir}/gpg.info \ %{_infodir}/dir 2>/dev/null || : /sbin/install-info --delete %{_infodir}/gpgv.info \ %{_infodir}/dir 2>/dev/null || : fi %clean rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_DIR/%{name}-%{version} gnupg-1.4.20/include/0000755000175000017500000000000012635457223011353 500000000000000gnupg-1.4.20/include/cipher.h0000644000175000017500000001655212635262326012725 00000000000000/* cipher.h * Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, * 2008 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 3 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, see . */ #ifndef G10_CIPHER_H #define G10_CIPHER_H #define DBG_CIPHER g10c_debug_mode #include "mpi.h" #include "../cipher/random.h" #define CIPHER_ALGO_NONE 0 #define CIPHER_ALGO_IDEA 1 #define CIPHER_ALGO_3DES 2 #define CIPHER_ALGO_CAST5 3 #define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */ /* 5 & 6 are reserved */ #define CIPHER_ALGO_AES 7 #define CIPHER_ALGO_AES192 8 #define CIPHER_ALGO_AES256 9 #define CIPHER_ALGO_TWOFISH 10 /* twofish 256 bit */ #define CIPHER_ALGO_CAMELLIA128 11 #define CIPHER_ALGO_CAMELLIA192 12 #define CIPHER_ALGO_CAMELLIA256 13 #define CIPHER_ALGO_DUMMY 110 /* no encryption at all */ #define PUBKEY_ALGO_RSA 1 #define PUBKEY_ALGO_RSA_E 2 /* RSA encrypt only */ #define PUBKEY_ALGO_RSA_S 3 /* RSA sign only */ #define PUBKEY_ALGO_ELGAMAL_E 16 /* encrypt only ElGamal (but not for v3)*/ #define PUBKEY_ALGO_DSA 17 #define PUBKEY_ALGO_ECDH 18 #define PUBKEY_ALGO_ECDSA 19 #define PUBKEY_ALGO_ELGAMAL 20 /* sign and encrypt elgamal */ #define PUBKEY_ALGO_ECC 22 /* Generic ECC. */ #define PUBKEY_USAGE_SIG 1 /* key is good for signatures */ #define PUBKEY_USAGE_ENC 2 /* key is good for encryption */ #define PUBKEY_USAGE_CERT 4 /* key is also good to certify other keys*/ #define PUBKEY_USAGE_AUTH 8 /* key is good for authentication */ #define PUBKEY_USAGE_UNKNOWN 128 /* key has an unknown usage bit */ #define PUBKEY_USAGE_NONE 256 /* No usage given. */ #define DIGEST_ALGO_MD5 1 #define DIGEST_ALGO_SHA1 2 #define DIGEST_ALGO_RMD160 3 /* 4, 5, 6, and 7 are reserved */ #define DIGEST_ALGO_SHA256 8 #define DIGEST_ALGO_SHA384 9 #define DIGEST_ALGO_SHA512 10 #define DIGEST_ALGO_SHA224 11 #define COMPRESS_ALGO_NONE 0 #define COMPRESS_ALGO_ZIP 1 #define COMPRESS_ALGO_ZLIB 2 #define COMPRESS_ALGO_BZIP2 3 #define is_RSA(a) ((a)==PUBKEY_ALGO_RSA || (a)==PUBKEY_ALGO_RSA_E \ || (a)==PUBKEY_ALGO_RSA_S ) #define is_ELGAMAL(a) ((a)==PUBKEY_ALGO_ELGAMAL_E) #define is_DSA(a) ((a)==PUBKEY_ALGO_DSA) typedef struct { int algo; int keylen; int algo_info_printed; int use_mdc; int symmetric; byte key[32]; /* this is the largest used keylen (256 bit) */ } DEK; struct cipher_handle_s; typedef struct cipher_handle_s *CIPHER_HANDLE; #define CIPHER_MODE_ECB 1 #define CIPHER_MODE_CFB 2 #define CIPHER_MODE_PHILS_CFB 3 #define CIPHER_MODE_AUTO_CFB 4 #define CIPHER_MODE_DUMMY 5 /* used with algo DUMMY for no encryption */ #define CIPHER_MODE_CBC 6 struct md_digest_list_s; struct gcry_md_context { int secure; FILE *debug; int finalized; struct md_digest_list_s *list; int bufcount; int bufsize; byte buffer[1]; }; typedef struct gcry_md_context *MD_HANDLE; #ifndef EXTERN_UNLESS_MAIN_MODULE #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif EXTERN_UNLESS_MAIN_MODULE int g10c_debug_mode; EXTERN_UNLESS_MAIN_MODULE int g10_opt_verbose; EXTERN_UNLESS_MAIN_MODULE const char *g10_opt_homedir; /*-- dynload.c --*/ void register_cipher_extension( const char *mainpgm, const char *fname ); /*-- md.c --*/ int string_to_digest_algo( const char *string ); const char * digest_algo_to_string( int algo ); int check_digest_algo( int algo ); MD_HANDLE md_open( int algo, int secure ); void md_enable( MD_HANDLE hd, int algo ); MD_HANDLE md_copy( MD_HANDLE a ); void md_reset( MD_HANDLE a ); void md_close(MD_HANDLE a); void md_write( MD_HANDLE a, const byte *inbuf, size_t inlen); void md_final(MD_HANDLE a); byte *md_read( MD_HANDLE a, int algo ); int md_digest( MD_HANDLE a, int algo, byte *buffer, int buflen ); int md_get_algo( MD_HANDLE a ); int md_algo_present( MD_HANDLE a, int algo ); int md_digest_length( int algo ); const byte *md_asn_oid( int algo, size_t *asnlen, size_t *mdlen ); void md_start_debug( MD_HANDLE a, const char *suffix ); void md_stop_debug( MD_HANDLE a ); #define md_is_secure(a) ((a)->secure) #define md_putc(h,c) \ do { \ if( (h)->bufcount == (h)->bufsize ) \ md_write( (h), NULL, 0 ); \ (h)->buffer[(h)->bufcount++] = (c) & 0xff; \ } while(0) void rmd160_hash_buffer (char *outbuf, const char *buffer, size_t length); void sha1_hash_buffer (char *outbuf, const char *buffer, size_t length); /*-- cipher.c --*/ int string_to_cipher_algo( const char *string ); const char * cipher_algo_to_string( int algo ); void disable_cipher_algo( int algo ); int check_cipher_algo( int algo ); unsigned cipher_get_keylen( int algo ); unsigned cipher_get_blocksize( int algo ); CIPHER_HANDLE cipher_open( int algo, int mode, int secure ); void cipher_close( CIPHER_HANDLE c ); int cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen ); void cipher_setiv( CIPHER_HANDLE c, const byte *iv, unsigned ivlen ); void cipher_encrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes ); void cipher_decrypt( CIPHER_HANDLE c, byte *out, byte *in, unsigned nbytes ); void cipher_sync( CIPHER_HANDLE c ); /*-- pubkey.c --*/ #define PUBKEY_MAX_NPKEY 4 #define PUBKEY_MAX_NSKEY 6 #define PUBKEY_MAX_NSIG 2 #define PUBKEY_MAX_NENC 2 int string_to_pubkey_algo( const char *string ); const char * pubkey_algo_to_string( int algo ); void disable_pubkey_algo( int algo ); int check_pubkey_algo( int algo ); int check_pubkey_algo2( int algo, unsigned use ); int pubkey_get_npkey( int algo ); int pubkey_get_nskey( int algo ); int pubkey_get_nsig( int algo ); int pubkey_get_nenc( int algo ); unsigned pubkey_nbits( int algo, MPI *pkey ); int pubkey_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ); int dsa2_generate( int algo, unsigned nbits, unsigned qbits, MPI *skey, MPI **retfactors ); int pubkey_check_secret_key( int algo, MPI *skey ); int pubkey_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ); int pubkey_decrypt( int algo, MPI *result, MPI *data, MPI *skey ); int pubkey_sign( int algo, MPI *resarr, MPI hash, MPI *skey ); int pubkey_verify( int algo, MPI hash, MPI *data, MPI *pkey ); /*-- smallprime.c --*/ extern ushort small_prime_numbers[]; /*-- primegen.c --*/ void register_primegen_progress ( void (*cb)( void *, int), void *cb_data ); MPI generate_secret_prime( unsigned nbits ); MPI generate_public_prime( unsigned nbits ); MPI generate_elg_prime( int mode, unsigned pbits, unsigned qbits, MPI g, MPI **factors ); /*-- elsewhere --*/ void register_pk_dsa_progress ( void (*cb)( void *, int), void *cb_data ); void register_pk_elg_progress ( void (*cb)( void *, int), void *cb_data ); #endif /*G10_CIPHER_H*/ gnupg-1.4.20/include/dotlock.h0000644000175000017500000001102612635262326013101 00000000000000/* dotlock.h - dotfile locking declarations * Copyright (C) 2000, 2001, 2006, 2011 Free Software Foundation, Inc. * * This file is part of JNLIB, which is a subsystem of GnuPG. * * JNLIB is free software; you can redistribute it and/or modify it * under the terms of either * * - the GNU Lesser General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at * your option) any later version. * * or * * - 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. * * or both in parallel, as here. * * JNLIB 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 copies of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, see . * * ALTERNATIVELY, this file may be distributed under the terms of the * following license, in which case the provisions of this license are * required INSTEAD OF the GNU Lesser General License or the GNU * General Public License. If you wish to allow use of your version of * this file only under the terms of the GNU Lesser General License or * the GNU General Public License, and not to allow others to use your * version of this file under the terms of the following license, * indicate your decision by deleting this paragraph and the license * below. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, and the entire permission notice in its entirety, * including the disclaimer of warranties. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef LIBJNLIB_DOTLOCK_H #define LIBJNLIB_DOTLOCK_H /* See dotlock.c for a description. */ #ifdef DOTLOCK_EXT_SYM_PREFIX # ifndef _DOTLOCK_PREFIX # define _DOTLOCK_PREFIX1(x,y) x ## y # define _DOTLOCK_PREFIX2(x,y) _DOTLOCK_PREFIX1(x,y) # define _DOTLOCK_PREFIX(x) _DOTLOCK_PREFIX2(DOTLOCK_EXT_SYM_PREFIX,x) # endif /*_DOTLOCK_PREFIX*/ # define dotlock_disable _DOTLOCK_PREFIX(dotlock_disable) # define dotlock_create _DOTLOCK_PREFIX(dotlock_create) # define dotlock_set_fd _DOTLOCK_PREFIX(dotlock_set_fd) # define dotlock_get_fd _DOTLOCK_PREFIX(dotlock_get_fd) # define dotlock_destroy _DOTLOCK_PREFIX(dotlock_destroy) # define dotlock_take _DOTLOCK_PREFIX(dotlock_take) # define dotlock_release _DOTLOCK_PREFIX(dotlock_release) # define dotlock_remove_lockfiles _DOTLOCK_PREFIX(dotlock_remove_lockfiles) #endif /*DOTLOCK_EXT_SYM_PREFIX*/ #ifdef __cplusplus extern "C" { #if 0 } #endif #endif struct dotlock_handle; typedef struct dotlock_handle *dotlock_t; void dotlock_disable (void); dotlock_t dotlock_create (const char *file_to_lock, unsigned int flags); void dotlock_set_fd (dotlock_t h, int fd); int dotlock_get_fd (dotlock_t h); void dotlock_destroy (dotlock_t h, int reclaim); int dotlock_take (dotlock_t h, long timeout); int dotlock_release (dotlock_t h); void dotlock_remove_lockfiles (int reclaim); void dotlock_remove_lockfiles_reclaim (void); #ifdef __cplusplus } #endif #endif /*LIBJNLIB_DOTLOCK_H*/ gnupg-1.4.20/include/keyserver.h0000644000175000017500000000333212635262326013462 00000000000000/* keyserver.h * Copyright (C) 2001, 2002, 2004 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 3 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, see . */ #ifndef _KEYSERVER_H_ #define _KEYSERVER_H_ #define KEYSERVER_PROTO_VERSION 1 /* These are usable for return codes for the gpgkeys_ process, and also KEY FAILED codes. */ #define KEYSERVER_OK 0 /* not an error */ #define KEYSERVER_INTERNAL_ERROR 1 /* gpgkeys_ internal error */ #define KEYSERVER_NOT_SUPPORTED 2 /* operation not supported */ #define KEYSERVER_VERSION_ERROR 3 /* VERSION mismatch */ #define KEYSERVER_GENERAL_ERROR 4 /* keyserver internal error */ #define KEYSERVER_NO_MEMORY 5 /* out of memory */ #define KEYSERVER_KEY_NOT_FOUND 6 /* key not found */ #define KEYSERVER_KEY_EXISTS 7 /* key already exists */ #define KEYSERVER_KEY_INCOMPLETE 8 /* key incomplete (EOF) */ #define KEYSERVER_UNREACHABLE 9 /* unable to contact keyserver */ #define KEYSERVER_TIMEOUT 10 /* timeout while accessing keyserver */ /* Must be 127 due to shell internal magic. */ #define KEYSERVER_SCHEME_NOT_FOUND 127 #endif /* !_KEYSERVER_H_ */ gnupg-1.4.20/include/types.h0000644000175000017500000000754612635262326012622 00000000000000/* types.h - some common typedefs * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef G10_TYPES_H #define G10_TYPES_H #ifdef HAVE_INTTYPES_H # include /* For uint64_t */ #endif /* The AC_CHECK_SIZEOF() in configure fails for some machines. * we provide some fallback values here */ #if !SIZEOF_UNSIGNED_SHORT # undef SIZEOF_UNSIGNED_SHORT # define SIZEOF_UNSIGNED_SHORT 2 #endif #if !SIZEOF_UNSIGNED_INT # undef SIZEOF_UNSIGNED_INT # define SIZEOF_UNSIGNED_INT 4 #endif #if !SIZEOF_UNSIGNED_LONG # undef SIZEOF_UNSIGNED_LONG # define SIZEOF_UNSIGNED_LONG 4 #endif #include #ifndef HAVE_BYTE_TYPEDEF # undef byte /* maybe there is a macro with this name */ # ifndef __riscos__ typedef unsigned char byte; # else /* Norcroft treats char = unsigned char as legal assignment but char* = unsigned char* as illegal assignment and the same applies to the signed variants as well */ typedef char byte; # endif # define HAVE_BYTE_TYPEDEF #endif #ifndef HAVE_USHORT_TYPEDEF # undef ushort /* maybe there is a macro with this name */ typedef unsigned short ushort; # define HAVE_USHORT_TYPEDEF #endif #ifndef HAVE_ULONG_TYPEDEF # undef ulong /* maybe there is a macro with this name */ typedef unsigned long ulong; # define HAVE_ULONG_TYPEDEF #endif #ifndef HAVE_U16_TYPEDEF # undef u16 /* maybe there is a macro with this name */ # if SIZEOF_UNSIGNED_INT == 2 typedef unsigned int u16; # elif SIZEOF_UNSIGNED_SHORT == 2 typedef unsigned short u16; # else # error no typedef for u16 # endif # define HAVE_U16_TYPEDEF #endif #ifndef HAVE_U32_TYPEDEF # undef u32 /* maybe there is a macro with this name */ # if SIZEOF_UNSIGNED_INT == 4 typedef unsigned int u32; # elif SIZEOF_UNSIGNED_LONG == 4 typedef unsigned long u32; # else # error no typedef for u32 # endif # define HAVE_U32_TYPEDEF #endif /**************** * Warning: Some systems segfault when this u64 typedef and * the dummy code in cipher/md.c is not available. Examples are * Solaris and IRIX. */ #ifndef HAVE_U64_TYPEDEF # undef u64 /* maybe there is a macro with this name */ # if SIZEOF_UINT64_T == 8 typedef uint64_t u64; # ifdef UINT64_C # define U64_C(c) (UINT64_C(c)) # else /* make a best guess, could happen with UNIX98 */ # define U64_C(c) (c) # endif # define HAVE_U64_TYPEDEF #elif SIZEOF_UNSIGNED_INT == 8 typedef unsigned int u64; # define U64_C(c) (c ## U) # define HAVE_U64_TYPEDEF # elif SIZEOF_UNSIGNED_LONG == 8 typedef unsigned long u64; # define U64_C(c) (c ## UL) # define HAVE_U64_TYPEDEF #elif SIZEOF_UNSIGNED_LONG_LONG == 8 typedef unsigned long long u64; # define U64_C(c) (c ## ULL) # define HAVE_U64_TYPEDEF # endif #endif typedef union { int a; short b; char c[1]; long d; #ifdef HAVE_U64_TYPEDEF u64 e; #endif float f; double g; } PROPERLY_ALIGNED_TYPE; struct string_list { struct string_list *next; unsigned int flags; char d[1]; }; typedef struct string_list *STRLIST; typedef struct string_list *strlist_t; #if __GNUC__ > 2 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 5 ) # define GNUPG_GCC_ATTR_UNUSED __attribute__ ((unused)) #else # define GNUPG_GCC_ATTR_UNUSED #endif #endif /*G10_TYPES_H*/ gnupg-1.4.20/include/estream-printf.h0000644000175000017500000000741412635262326014410 00000000000000/* estream-printf.h - Versatile C-99 compliant printf formatting. * Copyright (C) 2007 g10 Code GmbH * * This file is part of Libestream. * * Libestream 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. * * Libestream 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 Libestream; if not, see . */ #ifndef ESTREAM_PRINTF_H #define ESTREAM_PRINTF_H #include #include /* To use this file with libraries the following macro is useful: #define _ESTREAM_EXT_SYM_PREFIX _foo_ This prefixes all external symbols with "_foo_". For the implementation of the code (estream-printf.c) the following macros may be used to tune the implementation for certain systems: #define _ESTREAM_PRINTF_MALLOC foo_malloc #define _ESTREAM_PRINTF_FREE foo_free Make estream_asprintf and estream_vasprintf use foo_malloc and foo_free instead of the standard malloc and free functions to allocate the memory returned to the caller. #define _ESTREAM_PRINTF_EXTRA_INCLUDE "foo.h" This includes the file "foo.h" which may provide prototypes for the custom memory allocation functions. */ #ifdef _ESTREAM_EXT_SYM_PREFIX #ifndef _ESTREAM_PREFIX #define _ESTREAM_PREFIX1(x,y) x ## y #define _ESTREAM_PREFIX2(x,y) _ESTREAM_PREFIX1(x,y) #define _ESTREAM_PREFIX(x) _ESTREAM_PREFIX2(_ESTREAM_EXT_SYM_PREFIX,x) #endif /*_ESTREAM_PREFIX*/ #define estream_printf_out_t _ESTREAM_PREFIX(estream_printf_out_t) #define estream_format _ESTREAM_PREFIX(estream_format) #define estream_printf _ESTREAM_PREFIX(estream_printf) #define estream_fprintf _ESTREAM_PREFIX(estream_fprintf) #define estream_vfprintf _ESTREAM_PREFIX(estream_vfprintf) #define estream_snprintf _ESTREAM_PREFIX(estream_snprintf) #define estream_vsnprintf _ESTREAM_PREFIX(estream_vsnprintf) #define estream_asprintf _ESTREAM_PREFIX(estream_asprintf) #define estream_vasprintf _ESTREAM_PREFIX(estream_vasprintf) #endif /*_ESTREAM_EXT_SYM_PREFIX*/ #ifndef _ESTREAM_GCC_A_PRINTF #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) # define _ESTREAM_GCC_A_PRINTF( f, a ) __attribute__ ((format (printf,f,a))) #else # define _ESTREAM_GCC_A_PRINTF( f, a ) #endif #endif /*_ESTREAM_GCC_A_PRINTF*/ #ifdef __cplusplus extern "C" { #if 0 } #endif #endif typedef int (*estream_printf_out_t) (void *outfncarg, const char *buf, size_t buflen); int estream_format (estream_printf_out_t outfnc, void *outfncarg, const char *format, va_list vaargs) _ESTREAM_GCC_A_PRINTF(3,0); int estream_printf (const char *format, ...) _ESTREAM_GCC_A_PRINTF(1,2); int estream_fprintf (FILE *fp, const char *format, ... ) _ESTREAM_GCC_A_PRINTF(2,3); int estream_vfprintf (FILE *fp, const char *format, va_list arg_ptr) _ESTREAM_GCC_A_PRINTF(2,0); int estream_snprintf (char *buf, size_t bufsize, const char *format, ...) _ESTREAM_GCC_A_PRINTF(3,4); int estream_vsnprintf (char *buf,size_t bufsize, const char *format, va_list arg_ptr) _ESTREAM_GCC_A_PRINTF(3,0); int estream_asprintf (char **bufp, const char *format, ...) _ESTREAM_GCC_A_PRINTF(2,3); int estream_vasprintf (char **bufp, const char *format, va_list arg_ptr) _ESTREAM_GCC_A_PRINTF(2,0); #ifdef __cplusplus } #endif #endif /*ESTREAM_PRINTF_H*/ gnupg-1.4.20/include/ChangeLog-20110000644000175000017500000004345312635262326013435 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2010-09-28 Werner Koch * ttyio.h (ttyfp_is, init_ttyfp) [__VMS]: New. 2009-09-03 Werner Koch * util.h (xtryvasprintf): New. 2009-08-25 Werner Koch * compat.h: Add xstrconcat. 2009-08-11 David Shaw * util.h: Add string_to_utf8() from GPA. 2009-07-21 Werner Koch * estream-printf.h: New. Taken from libestream.x 2009-07-20 Werner Koch * types.h (strlist_t): Add new alias for STRLIST. * memory.h (xtrymalloc,xtrystrdup): New. * util.h: Add prototypes for util/convert.c. 2009-05-26 David Shaw * http.h: Pass in a STRLIST for additional headers on http_open and http_open_document. 2009-04-05 David Shaw * srv.h: Move from util/srv.h. 2009-04-02 David Shaw * http.h: Allow passing srvtag to http_open and http_open_document. 2008-04-17 David Shaw * cipher.h: Add the 192-bit variant of Camellia. 2007-11-29 David Shaw * cipher.h: Add the 128-bit variant of Camellia. 2007-10-23 Werner Koch Switched entire package to GPLv3+. * assuan.h, _regex.h: Just change the address notice. 2007-08-24 Werner Koch * util.h (same_file_p): Add prototype. 2007-06-13 David Shaw * cipher.h (CIPHER_ALGO_CAMELLIA): Add Camellia define. 2007-04-16 David Shaw * util.h (ascii_toupper, ascii_tolower, ascii_strcasecmp, ascii_strncasecmp): Move functions to compat.h. 2006-12-11 Werner Koch * mpi.h (mpi_is_neg, mpi_get_nlimbs): Replaced macros by function prototypes. (struct gcry_mpi): Changed to a forward declaration. (mpi_limb_t): Moved to ../mpi/mpi-internal.h. (MPI_NULL): Removed. (mpi_is_opaque, mpi_is_secure): Implement in terms of mpi_get_flags. 2006-12-04 Werner Koch * iobuf.h (iobuf_t): New. That is the name we use in 2.0. 2006-09-28 David Shaw * compat.h: Move strsep prototype and ascii_isspace macro to from util.h. * compat.h: New, used for libcompat.a functions. * util.h: Includes compat.h. 2006-04-20 David Shaw * cipher.h: Add dsa2_generate(); 2006-04-19 David Shaw * cipher.h: Add SHA-224. 2006-03-16 David Shaw * util.h: Handle the fixed IPGP type with fingerprint. 2006-02-14 Werner Koch * errors.h (G10ERR_NO_DATA): New. 2005-12-23 David Shaw * util.h: Prototype get_cert(). 2005-07-27 Werner Koch * memory.h (m_free, m_alloc, m_realloc, m_strdup): Removed and replaced all over by xfoo functions. This is to ease porting to gnupg 1.9. (xmalloc_secure) [M_DEBUG]: Correctly map to m_debug_alloc_secure. 2005-06-23 David Shaw * http.h: Fix prototypes for http_open_document and http_open again, to handle the new different auth for regular files and proxies. 2005-06-21 David Shaw * http.h: Fix prototypes for http_open_document and http_open to pass in auth and proxyauth. 2005-05-19 Werner Koch * util.h: Add definitions for membuf functions. 2005-05-05 David Shaw * util.h: Remove add_days_to_timestamp as unused. 2005-04-22 David Shaw * distfiles: Add assuan.h. 2005-04-04 Werner Koch * memory.h (xcalloc, xcalloc_secure): Replaced macros by functions. 2005-03-31 Werner Koch * assuan.h: New. Taken from libassuan 0.6.9. 2005-03-18 David Shaw * ttyio.h: Prototype tty_enable_completion(), and tty_disable_completion(). 2005-02-09 David Shaw * cipher.h: Add a flag for a symmetric DEK. 2004-12-16 David Shaw * memory.h: Return a flag to indicate whether we got the lock. 2004-11-29 David Shaw * cipher.h: Add PUBKEY_USAGE_UNKNOWN. 2004-11-03 Timo Schulz * errors.h: Add w32_strerror prototype. * dynload.h: Use w32_strerror. 2004-10-27 Werner Koch * dynload.h: Always use it for _WIN32. 2004-10-21 Werner Koch * util.h [!HAVE_VASPRINTF]: Removed prototype. 2004-10-15 Werner Koch * util.h [!HAVE_VASPRINTF]: Add asprintf prototype. 2004-10-13 David Shaw * keyserver.h: Add KEYSERVER_TIMEOUT. 2004-09-30 David Shaw * util.h: Prototype destroy_dotlock(). From Werner on stable branch. 2004-09-10 David Shaw * http.h: Add auth field for a parsed_uri to allow for basic auth. 2004-09-09 Werner Koch * errors.h (G10ERR_NO_CARD, G10ERR_CANCELED): New error codes. 2004-04-27 Werner Koch * mpi.h: Renamed prototype parameter name to avoid gcc warnings. 2004-03-04 David Shaw * iobuf.h: Remove iobuf_set_block_mode() and iobuf_in_block_mode(). 2004-02-21 David Shaw * util.h: Prototype for hextobyte(). 2004-01-16 David Shaw * cipher.h: Remove the old CIPHER_ALGO_RINJDAEL values. is_ELGAMAL() now only matches type 16 and not type 20. 2004-01-15 David Shaw * util.h: Add prototype for print_string2(). 2003-12-28 David Shaw * http.h: Pass the http proxy from outside rather than pulling it from the evironment. 2003-12-28 Stefan Bellon * util.h [__riscos__]: Removal of unnecessary RISC OS stuff. 2003-12-17 David Shaw * mpi.h (gcry_mpi, mpi_get_opaque, mpi_set_opaque): Make nbits and the length of an opaque MPI unsigned. * cipher.h (pubkey_verify): Remove old unused code. 2003-12-03 David Shaw * cipher.h: Make cipher list match 2440bis-09. 2003-11-20 David Shaw * util.h: Add prototype for match_multistr(). 2003-10-31 David Shaw * cipher.h: Add COMPRESS_ALGO_BZIP2. 2003-10-04 Timo Schulz * dynload [WIN32] (dlclose): Do not use CloseHandle but FreeLibrary. 2003-09-29 Werner Koch * cipher.h (PUBKEY_USAGE_AUTH): New. 2003-09-28 Timo Schulz * util.h [WIN32]: Prototype for asprintf. * dynload.h [WIN32]: Define RTLD_LAZY. 2003-09-28 Werner Koch * util.h: Add the atoi_* and xtoi_* suite of macros from 1.9. * dynload.h: New. Taken from 1.9. 2003-09-27 Werner Koch * memory.h (xmalloc): Define xmalloc macros in terms of m_alloc. 2003-09-04 David Shaw * cipher.h: Drop TIGER/192 support. 2003-08-28 David Shaw * util.h: s/__MINGW32__/_WIN32/ to help building on native Windows compilers. Requested by Brian Gladman. From Werner on stable branch. 2003-07-10 David Shaw * types.h: Prefer using uint64_t when creating a 64-bit unsigned type. This avoids a warning on compilers that support but complain about unsigned long long. * util.h (ascii_isspace): New variation on isspace() that is immune from locale changes. * util.h: Make sure that only ascii is passed to isfoo functions. (From Werner on stable branch). 2003-05-24 David Shaw * cipher.h, i18n.h, iobuf.h, memory.h, mpi.h, types.h, util.h: Edit all preprocessor instructions to remove whitespace before the '#'. This is not required by C89, but there are some compilers out there that don't like it. 2003-05-14 David Shaw * types.h: Add initializer macros for 64-bit unsigned type. 2003-05-02 David Shaw * cipher.h: Add constants for compression algorithms. 2003-03-11 David Shaw * http.h: Add HTTP_FLAG_TRY_SRV. 2003-02-11 David Shaw * types.h: Try and use uint64_t for a 64-bit type. 2003-02-04 David Shaw * cipher.h: Add constants for new SHAs. 2002-11-13 David Shaw * util.h [__CYGWIN32__]: Don't need the registry prototypes. From Werner on stable branch. 2002-11-06 David Shaw * util.h: Add wipememory2() macro (same as wipememory, but can specify the byte to wipe with). 2002-10-31 Stefan Bellon * util.h [__riscos__]: Prefixed all RISC OS prototypes with riscos_* * zlib-riscos.h: New. This is macro magic in order to make the zlib library calls indeed call the RISC OS ZLib module. 2002-10-31 David Shaw * util.h: Add wipememory() macro. 2002-10-29 Stefan Bellon * util.h: Added parameter argument to make_basename() needed for filetype support. [__riscos__]: Added prototype. 2002-10-28 Stefan Bellon * util.h [__riscos__]: Added prototypes for new filetype support. 2002-10-19 David Shaw * distfiles, _regex.h: Add _regex.h from glibc 2.3.1. 2002-10-14 David Shaw * keyserver.h: Go to KEYSERVER_PROTO_VERSION 1. 2002-10-08 David Shaw * keyserver.h: Add new error code KEYSERVER_UNREACHABLE. 2002-10-03 David Shaw * util.h: Add new log_warning logger command which can be switched between log_info and log_error via log_set_strict. 2002-09-24 David Shaw * keyserver.h: Add some new error codes for better GPA support. 2002-09-10 Werner Koch * mpi.h (mpi_is_protected, mpi_set_protect_flag) (mpi_clear_protect_flag): Removed. (mpi_get_nbit_info, mpi_set_nbit_info): Removed. 2002-08-13 David Shaw * cipher.h: Add AES aliases for RIJNDAEL algo numbers. 2002-08-07 David Shaw * cipher.h: Add md_algo_present(). 2002-08-06 Stefan Bellon * util.h [__riscos__]: Added riscos_getchar(). 2002-06-21 Stefan Bellon * util.h [__riscos__]: Further moving away of RISC OS specific stuff from general code. 2002-06-20 Stefan Bellon * util.h [__riscos__]: Added riscos_set_filetype(). 2002-06-14 David Shaw * util.h: Add pop_strlist() from strgutil.c. 2002-06-07 Stefan Bellon * util.h [__riscos__]: RISC OS needs strings.h for strcasecmp() and strncasecmp(). 2002-05-22 Werner Koch * util.h: Add strncasecmp. Removed stricmp and memicmp. 2002-05-10 Stefan Bellon * mpi.h: New function mpi_debug_alloc_like for M_DEBUG. * util.h [__riscos__]: Make use of __func__ that later Norcroft compiler provides. * memory.h: Fixed wrong definition of m_alloc_secure_clear. 2002-04-23 David Shaw * util.h: New function answer_is_yes_no_default() to give a default answer. 2002-04-22 Stefan Bellon * util.h [__riscos__]: Removed riscos_open, riscos_fopen and riscos_fstat as those special versions aren't needed anymore. 2002-02-19 David Shaw * keyserver.h: Add KEYSERVER_NOT_SUPPORTED for unsupported actions (say, a keyserver that has no way to search, or a readonly keyserver that has no way to add). 2002-01-02 Stefan Bellon * util.h [__riscos__]: Updated prototype list. * types.h [__riscos__]: Changed comment wording. 2001-12-27 David Shaw * KEYSERVER_SCHEME_NOT_FOUND should be 127 to match the POSIX system() (via /bin/sh) way of signaling this. * Added G10ERR_KEYSERVER 2001-12-27 Werner Koch * util.h [MINGW32]: Fixed name of include file. 2001-12-22 Timo Schulz * util.h (is_file_compressed): New. 2001-12-19 Werner Koch * util.h [CYGWIN32]: Allow this as an alias for MINGW32. Include stdarg.h becuase we use the va_list type. By Disastry. 2001-09-28 Werner Koch * cipher.h (PUBKEY_USAGE_CERT): New. 2001-09-07 Werner Koch * util.h: Add strsep(). 2001-08-30 Werner Koch * cipher.h (DEK): Added use_mdc. 2001-08-24 Werner Koch * cipher.h (md_write): Made buf arg const. 2001-08-20 Werner Koch * cipher.h (DEK): Added algo_info_printed; * util.h [__riscos__]: Added prototypes and made sure that we never use __attribute__. * cipher.h, iobuf.h, memory.h, mpi.h [__riscos__]: extern hack. * i18n.h [__riscos__]: Use another include file 2001-05-30 Werner Koch * ttyio.h (tty_printf): Add missing parenthesis for non gcc. * http.h: Removed trailing comma to make old ccs happy. Both are by Albert Chin. 2001-05-25 Werner Koch * ttyio.h (tty_printf): Add printf attribute. 2001-04-23 Werner Koch * http.h: New flag HTTP_FLAG_NO_SHUTDOWN. 2001-04-13 Werner Koch * iobuf.h: Removed iobuf_fopen. 2001-03-01 Werner Koch * errors.h (G10ERR_UNU_SECKEY,G10ERR_UNU_PUBKEY): New 2000-11-30 Werner Koch * iobuf.h (iobuf_translate_file_handle): Add prototype. 2000-11-11 Paul Eggert * iobuf.h (iobuf_get_filelength): Now returns off_t, not u32. (struct iobuf_struct, iobuf_set_limit, iobuf_tell, iobuf_seek): Use off_t, not ulong, for file offsets. 2000-10-12 Werner Koch * mpi.h: Changed the way mpi_limb_t is defined. Wed Sep 6 17:55:47 CEST 2000 Werner Koch * iobuf.c (IOBUF_FILELENGTH_LIMIT): New. 2000-03-14 14:03:43 Werner Koch (wk@habibti.openit.de) * types.h (HAVE_U64_TYPEDEF): Defined depending on configure test. Thu Jan 13 19:31:58 CET 2000 Werner Koch * types.h (HAVE_U64_TYPEDEF): Add a test for _LONGLONG which fixes this long living SGI bug. Reported by Alec Habig. Sat Dec 4 12:30:28 CET 1999 Werner Koch * iobuf.h (IOBUFCTRL_CANCEL): Nww. Mon Oct 4 21:23:04 CEST 1999 Werner Koch * errors.h (G10ERR_NOT_PROCESSED): New. Wed Sep 15 16:22:17 CEST 1999 Werner Koch * i18n.h: Add support for simple-gettext. Tue Jun 29 21:44:25 CEST 1999 Werner Koch * util.h (stricmp): Use strcasecmp as replacement. Sat Jun 26 12:15:59 CEST 1999 Werner Koch * cipher.h (MD_HANDLE): Assigned a structure name. Fri Apr 9 12:26:25 CEST 1999 Werner Koch * cipher.h (BLOWFISH160): Removed. Tue Apr 6 19:58:12 CEST 1999 Werner Koch * cipher.h (DEK): increased max. key length to 32 bytes Sat Feb 20 21:40:49 CET 1999 Werner Koch * g10lib.h: Removed file and changed all files that includes this. Tue Feb 16 14:10:02 CET 1999 Werner Koch * types.h (STRLIST): Add field flags. Wed Feb 10 17:15:39 CET 1999 Werner Koch * cipher.h (CIPHER_ALGO_TWOFISH): Chnaged ID to 10 and renamed the old experimenatl algorithm to xx_OLD. Thu Jan 7 18:00:58 CET 1999 Werner Koch * cipher.h (MD_BUFFER_SIZE): Removed. Mon Dec 14 21:18:49 CET 1998 Werner Koch * types.h: fix for SUNPRO_C Tue Dec 8 13:15:16 CET 1998 Werner Koch * mpi.h (MPI): Changed the structure name to gcry_mpi and changed all users. Tue Oct 20 11:40:00 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.h (iobuf_get_temp_buffer): New. Tue Oct 13 12:40:48 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.h (iobuf_get): Now uses .nofast (iobuf_get2): Removed. Mon Sep 14 09:17:22 1998 Werner Koch (wk@(none)) * util.h (HAVE_ATEXIT): New. (HAVE_RAISE): New. Mon Jul 6 10:41:55 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.h (PUBKEY_USAGE_): New. Mon Jul 6 09:49:51 1998 Werner Koch (wk@isil.d.shuttle.de) * iobuf.h (iobuf_set_error): New. (iobuf_error): New. Sat Jun 13 17:31:32 1998 Werner Koch (wk@isil.d.shuttle.de) * g10lib.h: New as interface for the g10lib. Mon Jun 8 22:14:48 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.h (CIPHER_ALGO_CAST5): Changed name from .. CAST Thu May 21 13:25:51 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.h: removed ROT 5 and changed one id and add dummy Tue May 19 18:09:05 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.h (DIGEST_ALGO_TIGER): Chnaged id from 101 to 6. Mon May 4 16:37:17 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.h (PUBKEY_ALGO_ELGAMAL_E): New, with value of the old one. * (is_ELGAMAL, is_RSA): New macros Sun Apr 26 14:35:24 1998 Werner Koch (wk@isil.d.shuttle.de) * types.h: New type u64 Mon Mar 9 12:59:55 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.h: Included dsa.h. Tue Mar 3 15:11:21 1998 Werner Koch (wk@isil.d.shuttle.de) * cipher.h (random.h): Add new header and move all relevalt functions to this header. Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/include/_regex.h0000644000175000017500000005205112635262326012716 00000000000000/* Definitions for data structures and routines for the regular expression library. Copyright (C) 1985,1989-93,1995-98,2000,2001,2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #ifndef _REGEX_H #define _REGEX_H 1 /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* POSIX says that must be included (by the caller) before . */ #if !defined _POSIX_C_SOURCE && !defined _POSIX_SOURCE && defined VMS /* VMS doesn't have `size_t' in , even though POSIX says it should be there. */ # include #endif /* The following two types have to be signed and unsigned integer type wide enough to hold a value of a pointer. For most ANSI compilers ptrdiff_t and size_t should be likely OK. Still size of these two types is 2 for Microsoft C. Ugh... */ typedef long int s_reg_t; typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned long int reg_syntax_t; /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ #define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ #define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ #define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ #define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ #define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ #define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ #define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ #define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ #define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ #define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ #define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ #define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then `{...}' defines an interval, and \{ and \} are literals. If not set, then `\{...\}' defines an interval. */ #define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ #define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \ matches . If not set, then \ is a back-reference. */ #define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ #define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ #define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ #define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. */ #define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) /* If this bit is set, do not process the GNU regex operators. If not set, then the GNU regex operators are recognized. */ #define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) /* If this bit is set, turn on internal regex debugging. If not set, and debugging was on, turn it off. This only works if regex.c is compiled -DDEBUG. We define this bit always, so that all that's needed to turn on debugging is to recompile regex.c; the calling code can always have this bit set, and it won't affect anything in the normal case. */ #define RE_DEBUG (RE_NO_GNU_OPS << 1) /* If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the ERE 'a{1' is treated as 'a\{1'. */ #define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ #define RE_SYNTAX_EMACS 0 #define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) #define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DEBUG) \ & ~(RE_DOT_NOT_NULL | RE_INTERVALS | RE_CONTEXT_INDEP_OPS \ | RE_CONTEXT_INVALID_OPS )) #define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INTERVALS | RE_NO_GNU_OPS) #define RE_SYNTAX_GREP \ (RE_BK_PLUS_QM | RE_CHAR_CLASSES \ | RE_HAT_LISTS_NOT_NEWLINE | RE_INTERVALS \ | RE_NEWLINE_ALT) #define RE_SYNTAX_EGREP \ (RE_CHAR_CLASSES | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_HAT_LISTS_NOT_NEWLINE \ | RE_NEWLINE_ALT | RE_NO_BK_PARENS \ | RE_NO_BK_VBAR) #define RE_SYNTAX_POSIX_EGREP \ (RE_SYNTAX_EGREP | RE_INTERVALS | RE_NO_BK_BRACES \ | RE_INVALID_INTERVAL_ORD) /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ #define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC #define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ #define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) #define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ #define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) #define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is removed and RE_NO_BK_REFS is added. */ #define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. Some systems (erroneously) define this in other header files, but we want our value, so remove any previous define. */ #ifdef RE_DUP_MAX # undef RE_DUP_MAX #endif /* If sizeof(int) == 2, then ((1 << 15) - 1) overflows. */ #define RE_DUP_MAX (0x7fff) /* POSIX `cflags' bits (i.e., information for `regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (REG_EXTENDED << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (REG_ICASE << 1) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (REG_NEWLINE << 1) /* POSIX `eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* If any error codes are removed, changed, or added, update the `re_error_msg' table in regex.c. */ typedef enum { #ifdef _XOPEN_SOURCE REG_ENOSYS = -1, /* This will never happen for this implementation. */ #endif REG_NOERROR = 0, /* Success. */ REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ REG_BADPAT, /* Invalid pattern. */ REG_ECOLLATE, /* Not implemented. */ REG_ECTYPE, /* Invalid character class name. */ REG_EESCAPE, /* Trailing backslash. */ REG_ESUBREG, /* Invalid back reference. */ REG_EBRACK, /* Unmatched left bracket. */ REG_EPAREN, /* Parenthesis imbalance. */ REG_EBRACE, /* Unmatched \{. */ REG_BADBR, /* Invalid contents of \{\}. */ REG_ERANGE, /* Invalid range end. */ REG_ESPACE, /* Ran out of memory. */ REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ REG_EEND, /* Premature end. */ REG_ESIZE, /* Compiled pattern bigger than 2^16 bytes. */ REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields `buffer', `allocated', `fastmap', `translate', and `no_sub' can be set. After the pattern has been compiled, the `re_nsub' field is available. All other fields are private to the regex routines. */ #ifndef RE_TRANSLATE_TYPE # define RE_TRANSLATE_TYPE char * #endif struct re_pattern_buffer { /* [[[begin pattern_buffer]]] */ /* Space that holds the compiled pattern. It is declared as `unsigned char *' because its elements are sometimes used as array indexes. */ unsigned char *buffer; /* Number of bytes to which `buffer' points. */ unsigned long int allocated; /* Number of bytes actually used in `buffer'. */ unsigned long int used; /* Syntax setting with which the pattern was compiled. */ reg_syntax_t syntax; /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *fastmap; /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ RE_TRANSLATE_TYPE translate; /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in `re_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see `re_compile_fastmap' (the `duplicate' case). */ unsigned can_be_null : 1; /* If REGS_UNALLOCATED, allocate space in the `regs' structure for `max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #define REGS_UNALLOCATED 0 #define REGS_REALLOCATE 1 #define REGS_FIXED 2 unsigned regs_allocated : 2; /* Set to zero when `regex_compile' compiles a pattern; set to one by `re_compile_fastmap' if it updates the fastmap. */ unsigned fastmap_accurate : 1; /* If set, `re_match_2' does not return information about subexpressions. */ unsigned no_sub : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned not_bol : 1; /* Similarly for an end-of-line anchor. */ unsigned not_eol : 1; /* If true, an anchor at a newline matches. */ unsigned newline_anchor : 1; /* [[[end pattern_buffer]]] */ }; typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ typedef int regoff_t; /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { unsigned num_regs; regoff_t *start; regoff_t *end; }; /* If `regs_allocated' is REGS_UNALLOCATED in the pattern buffer, `re_match_2' returns information about at least this many registers the first time a `regs' structure is passed. */ #ifndef RE_NREGS # define RE_NREGS 30 #endif /* POSIX specification for registers. Aside from the different names than `re_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ /* To avoid duplicating every routine declaration -- once with a prototype (if we are ANSI), and once without (if we aren't) -- we use the following macro to declare argument types. This unfortunately clutters up the declarations a bit, but I think it's worth it. */ #if __STDC__ # define _RE_ARGS(args) args #else /* not __STDC__ */ # define _RE_ARGS(args) () #endif /* not __STDC__ */ /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the `re_syntax_options' variable. */ extern reg_syntax_t re_set_syntax _RE_ARGS ((reg_syntax_t syntax)); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global `re_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. */ extern const char *re_compile_pattern _RE_ARGS ((const char *pattern, size_t length, struct re_pattern_buffer *buffer)); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap _RE_ARGS ((struct re_pattern_buffer *buffer)); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern int re_search _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, int length, int start, int range, struct re_registers *regs)); /* Like `re_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern int re_search_2 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, int range, struct re_registers *regs, int stop)); /* Like `re_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern int re_match _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string, int length, int start, struct re_registers *regs)); /* Relates to `re_match' as `re_search_2' relates to `re_search'. */ extern int re_match_2 _RE_ARGS ((struct re_pattern_buffer *buffer, const char *string1, int length1, const char *string2, int length2, int start, struct re_registers *regs, int stop)); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least `NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers _RE_ARGS ((struct re_pattern_buffer *buffer, struct re_registers *regs, unsigned num_regs, regoff_t *starts, regoff_t *ends)); #if defined _REGEX_RE_COMP || defined _LIBC # ifndef _CRAY /* 4.2 bsd compatibility. */ extern char *re_comp _RE_ARGS ((const char *)); extern int re_exec _RE_ARGS ((const char *)); # endif #endif /* GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". */ #ifndef __restrict # if ! (2 < __GNUC__ || (2 == __GNUC__ && 95 <= __GNUC_MINOR__)) # if defined restrict || 199901L <= __STDC_VERSION__ # define __restrict restrict # else # define __restrict # endif # endif #endif /* gcc 3.1 and up support the [restrict] syntax. */ #ifndef __restrict_arr # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) # define __restrict_arr __restrict # else # define __restrict_arr # endif #endif /* POSIX compatibility. */ extern int regcomp _RE_ARGS ((regex_t *__restrict __preg, const char *__restrict __pattern, int __cflags)); extern int regexec _RE_ARGS ((const regex_t *__restrict __preg, const char *__restrict __string, size_t __nmatch, regmatch_t __pmatch[__restrict_arr], int __eflags)); extern size_t regerror _RE_ARGS ((int __errcode, const regex_t *__preg, char *__errbuf, size_t __errbuf_size)); extern void regfree _RE_ARGS ((regex_t *__preg)); #ifdef __cplusplus } #endif /* C++ */ #endif /* regex.h */ /* Local variables: make-backup-files: t version-control: t trim-versions-without-asking: nil End: */ gnupg-1.4.20/include/util.h0000644000175000017500000002761012635262326012425 00000000000000/* util.h * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006 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 3 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, see . */ #ifndef G10_UTIL_H #define G10_UTIL_H #include #include "types.h" #include "errors.h" #include "types.h" #include "mpi.h" #include "compat.h" /* GCC attributes. */ #if __GNUC__ >= 4 # define GNUPG_GCC_A_SENTINEL(a) __attribute__ ((sentinel(a))) #else # define GNUPG_GCC_A_SENTINEL(a) #endif 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; void *iio_list; } 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 log_inc_errorcount(void); int log_set_strict(int val); void g10_log_hexdump( const char *text, const char *buf, size_t len ); #if defined (__riscos__) \ || (__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_warning( const char *fmt, ... ) __attribute__ ((format (printf,1,2))); void g10_log_debug( const char *fmt, ... ) __attribute__ ((format (printf,1,2))); #ifndef __riscos__ #define BUG() g10_log_bug0( __FILE__ , __LINE__, __FUNCTION__ ) #else #define BUG() g10_log_bug0( __FILE__ , __LINE__, __func__ ) #endif #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_warning( const char *fmt, ... ); void g10_log_debug( const char *fmt, ... ); #define BUG() g10_log_bug0( __FILE__ , __LINE__ ) #endif #define log_hexdump g10_log_hexdump #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_warning g10_log_warning #define log_debug g10_log_debug /*-- 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 --*/ #include "../include/dotlock.h" /*-- fileutil.c --*/ char * make_basename(const char *filepath, const char *inputpath); char * make_dirname(const char *filepath); char *make_filename( const char *first_part, ... ); int compare_filenames( const char *a, const char *b ); int same_file_p (const char *name1, const char *name2); const char *print_fname_stdin( const char *s ); const char *print_fname_stdout( const char *s ); int is_file_compressed(const char *s, int *r_status); /*-- miscutil.c --*/ u32 make_timestamp(void); u32 scan_isodatestr( const char *string ); u32 isotime2seconds (const char *string); const char *strtimevalue( u32 stamp ); const char *strtimestamp( u32 stamp ); /* GMT */ const char *isotimestamp( u32 stamp ); /* GMT with hh:mm:ss */ const char *asctimestamp( u32 stamp ); /* localized */ void print_string( FILE *fp, const byte *p, size_t n, int delim ); void print_string2( FILE *fp, const byte *p, size_t n, int delim, int delim2 ); void print_utf8_string( FILE *fp, const byte *p, size_t n ); void print_utf8_string2( 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_no_default( const char *s, int def_answer ); int answer_is_yes( const char *s ); int answer_is_yes_no_quit( const char *s ); int answer_is_okay_cancel (const char *s, int def_answer); int match_multistr(const char *multistr,const char *match); /*-- 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 ); char *pop_strlist( STRLIST *list ); const char *memistr( const char *buf, size_t buflen, const char *sub ); const char *ascii_memistr( const char *buf, size_t buflen, const char *sub ); char *mem2str( char *, const void *, size_t); char *trim_spaces( char *string ); unsigned int trim_trailing_chars( byte *line, unsigned int len, const char *trimchars); unsigned int trim_trailing_ws( byte *line, unsigned len ); unsigned int check_trailing_chars( const byte *line, unsigned int len, const char *trimchars ); unsigned int check_trailing_ws( const byte *line, unsigned int len ); int string_count_chr( const char *string, int c ); int has_invalid_email_chars (const char *s); int is_valid_mailbox (const char *name); 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, size_t length, int delim); char *string_to_utf8 (const char *string); int ascii_isupper (int c); int ascii_islower (int c); int ascii_memcasecmp( const char *a, const char *b, size_t n); char *ascii_strlwr (char *s); #ifndef HAVE_STPCPY char *stpcpy(char *a,const char *b); #endif #ifndef HAVE_STRLWR char *strlwr(char *a); #endif #ifndef HAVE_STRCASECMP int strcasecmp( const char *, const char *b); #endif #ifndef HAVE_STRNCASECMP int strncasecmp (const char *, const char *b, size_t n); #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 /*-- membuf.c --*/ /* The definition of the structure is private, we only need it here, so it can be allocated on the stack. */ struct private_membuf_s { size_t len; size_t size; char *buf; int out_of_core; }; typedef struct private_membuf_s membuf_t; void init_membuf (membuf_t *mb, int initiallen); void put_membuf (membuf_t *mb, const void *buf, size_t len); void put_membuf_str (membuf_t *mb, const char *buf); void *get_membuf (membuf_t *mb, size_t *len); #if defined (_WIN32) /*-- w32reg.c --*/ char *read_w32_registry_string( const char *root, const char *dir, const char *name ); int write_w32_registry_string(const char *root, const char *dir, const char *name, const char *value); #endif /*_WIN32*/ /*-- strgutil.c --*/ char *xasprintf (const char *fmt, ...); char *xtryasprintf (const char *fmt, ...); char *xtryvasprintf (const char *fmt, va_list arg_ptr); char *strconcat (const char *s1, ...) GNUPG_GCC_A_SENTINEL(0); /*-- pka.c --*/ char *get_pka_info (const char *address, void *fprbuf, size_t fprbuflen); /*-- cert.c --*/ int get_cert (const char *name, int want_ipgp, size_t max_size, IOBUF *iobuf, unsigned char **fpr,size_t *fpr_len,char **url); /*-- convert.c --*/ int hex2bin (const char *string, void *buffer, size_t length); int hexcolon2bin (const char *string, void *buffer, size_t length); char *bin2hex (const void *buffer, size_t length, char *stringbuf); char *bin2hexcolon (const void *buffer, size_t length, char *stringbuf); const char *hex2str (const char *hexstring, char *buffer, size_t bufsize, size_t *buflen); char *hex2str_alloc (const char *hexstring, size_t *r_count); /**** 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 /*-- Replacement functions from funcname.c --*/ /******** 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) #define wipememory2(_ptr,_set,_len) do { volatile char *_vptr=(volatile char *)(_ptr); size_t _vlen=(_len); while(_vlen) { *_vptr=(_set); _vptr++; _vlen--; } } while(0) #define wipememory(_ptr,_len) wipememory2(_ptr,0,_len) /*-- macros to replace ctype ones and avoid locale problems --*/ #define spacep(p) (*(p) == ' ' || *(p) == '\t') #define digitp(p) (*(p) >= '0' && *(p) <= '9') #define hexdigitp(a) (digitp (a) \ || (*(a) >= 'A' && *(a) <= 'F') \ || (*(a) >= 'a' && *(a) <= 'f')) /* the atoi macros assume that the buffer has only valid digits */ #define atoi_1(p) (*(p) - '0' ) #define atoi_2(p) ((atoi_1(p) * 10) + atoi_1((p)+1)) #define atoi_4(p) ((atoi_2(p) * 100) + atoi_2((p)+2)) #define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \ *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10)) #define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1)) /******* RISC OS stuff ***********/ #ifdef __riscos__ int riscos_load_module(const char *name, const char * const path[], int fatal); int riscos_get_filetype_from_string(const char *string, int len); int riscos_get_filetype(const char *filename); void riscos_set_filetype_by_number(const char *filename, int type); void riscos_set_filetype_by_mimetype(const char *filename, const char *mimetype); pid_t riscos_getpid(void); int riscos_kill(pid_t pid, int sig); int riscos_access(const char *path, int amode); int riscos_getchar(void); char *riscos_make_basename(const char *filepath, const char *inputpath); int riscos_check_regexp(const char *exp, const char *string, int debug); int riscos_fdopenfile(const char *filename, const int allow_write); void riscos_close_fds(void); int riscos_renamefile(const char *old, const char *new); char *riscos_gstrans(const char *old); void riscos_not_implemented(const char *feature); #ifdef DEBUG void riscos_dump_fdlist(void); void riscos_list_openfiles(void); #endif #ifndef __RISCOS__C__ #define getpid riscos_getpid #define kill(a,b) riscos_kill((a),(b)) #define access(a,b) riscos_access((a),(b)) #endif /* !__RISCOS__C__ */ #endif /* __riscos__ */ #endif /*G10_UTIL_H*/ gnupg-1.4.20/include/i18n.h0000644000175000017500000000254712635262326012231 00000000000000/* i18n.h * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef G10_I18N_H #define G10_I18N_H #ifdef USE_SIMPLE_GETTEXT int set_gettext_file( const char *filename, const char *regkey ); const char *gettext( const char *msgid ); #define _(a) gettext (a) #define N_(a) (a) #else #ifdef HAVE_LOCALE_H #include /* suggested by Ernst Molitor */ #endif #ifdef ENABLE_NLS #ifndef __riscos__ #include #else #include "libgettext.h" #endif /* __riscos__ */ #define _(a) gettext (a) #ifdef gettext_noop #define N_(a) gettext_noop (a) #else #define N_(a) (a) #endif #else #define _(a) (a) #define N_(a) (a) #endif #endif /* !USE_SIMPLE_GETTEXT */ #endif /*G10_I18N_H*/ gnupg-1.4.20/include/http.h0000644000175000017500000000551512635262326012427 00000000000000/* http.h - HTTP protocol handler * Copyright (C) 1999, 2000, 2001, 2003, 2004, 2005, * 2009, 2012 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 3 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, see . */ #ifndef G10_HTTP_H #define G10_HTTP_H 1 #include "iobuf.h" struct uri_tuple { struct uri_tuple *next; const char *name; /* a pointer into name */ char *value; /* a pointer to value (a Nul is always appended) */ size_t valuelen; /* and the real length of the value */ /* because the value may contain embedded Nuls */ }; typedef struct uri_tuple *URI_TUPLE; struct parsed_uri { /* all these pointers point into buffer; most stuff is not escaped */ char *scheme; /* pointer to the scheme string (lowercase) */ char *auth; /* username/password for basic auth */ char *host; /* host (converted to lowercase) */ ushort port; /* port (always set if the host is set) */ char *path; /* the path */ URI_TUPLE params; /* ";xxxxx" */ URI_TUPLE query; /* "?xxx=yyy" */ char buffer[1]; /* buffer which holds a (modified) copy of the URI */ }; typedef struct parsed_uri *PARSED_URI; typedef enum { HTTP_REQ_GET = 1, HTTP_REQ_HEAD = 2, HTTP_REQ_POST = 3 } HTTP_REQ_TYPE; /* put flag values into an enum, so that gdb can display them */ enum { HTTP_FLAG_NO_SHUTDOWN = 1 }; struct http_context { int initialized; unsigned int status_code; int sock; int in_data; IOBUF fp_read; IOBUF fp_write; int is_http_0_9; PARSED_URI uri; HTTP_REQ_TYPE req_type; byte *buffer; /* line buffer */ unsigned buffer_size; unsigned int flags; }; typedef struct http_context *HTTP_HD; struct http_srv { const char *srvtag; char *used_server; unsigned short used_port; }; int http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url, char *auth, unsigned int flags, const char *proxy, struct http_srv *srv, STRLIST headers ); void http_start_data( HTTP_HD hd ); int http_wait_response( HTTP_HD hd, unsigned int *ret_status ); void http_close( HTTP_HD hd ); int http_open_document( HTTP_HD hd, const char *document, char *auth, unsigned int flags, const char *proxy, struct http_srv *srv, STRLIST headers ); #endif /*G10_HTTP_H*/ gnupg-1.4.20/include/dynload.h0000644000175000017500000000305612635262326013100 00000000000000/* dlfcn.h - W32 functions for run-time dynamic loading * Copyright (C) 2003 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 3 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, see . */ #ifndef GNUPG_DYNLOAD_H #define GNUPG_DYNLOAD_H #if defined (ENABLE_CARD_SUPPORT) || defined(_WIN32) #ifndef _WIN32 #include #else #include #define RTLD_LAZY 0 static __inline__ void * dlopen (const char * name, int flag) { void * hd = LoadLibrary (name); return hd; } static __inline__ void * dlsym (void * hd, const char * sym) { if (hd && sym) { void * fnc = GetProcAddress (hd, sym); if (!fnc) return NULL; return fnc; } return NULL; } static __inline__ const char * dlerror (void) { return w32_strerror (0); } static __inline__ int dlclose (void * hd) { if (hd) { FreeLibrary (hd); return 0; } return -1; } #endif /*_WIN32*/ #endif /*ENABLE_CARD_SUPPORT||_WIN32*/ #endif /*GNUPG_DYNLOAD_H*/ gnupg-1.4.20/include/host2net.h0000644000175000017500000000463312635262326013216 00000000000000/* host2net.h - Endian conversion macros * Copyright (C) 1998, 2014, 2015 Werner Koch * * 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 3 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, see . */ #ifndef GNUPG_COMMON_HOST2NET_H #define GNUPG_COMMON_HOST2NET_H #include "types.h" #define ulongtobuf( p, a ) do { \ ((byte*)p)[0] = a >> 24; \ ((byte*)p)[1] = a >> 16; \ ((byte*)p)[2] = a >> 8; \ ((byte*)p)[3] = a ; \ } while(0) #define ushorttobuf( p, a ) do { \ ((byte*)p)[0] = a >> 8; \ ((byte*)p)[1] = a ; \ } while(0) static inline unsigned long buf16_to_ulong (const void *buffer) { const unsigned char *p = buffer; return (((unsigned long)p[0] << 8) | p[1]); } static inline unsigned int buf16_to_uint (const void *buffer) { const unsigned char *p = buffer; return (((unsigned int)p[0] << 8) | p[1]); } static inline unsigned short buf16_to_ushort (const void *buffer) { const unsigned char *p = buffer; return (((unsigned short)p[0] << 8) | p[1]); } static inline u16 buf16_to_u16 (const void *buffer) { const unsigned char *p = buffer; return (((u16)p[0] << 8) | p[1]); } static inline size_t buf32_to_size_t (const void *buffer) { const unsigned char *p = buffer; return (((size_t)p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]); } static inline unsigned long buf32_to_ulong (const void *buffer) { const unsigned char *p = buffer; return (((unsigned long)p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]); } static inline unsigned int buf32_to_uint (const void *buffer) { const unsigned char *p = buffer; return (((unsigned int)p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]); } static inline u32 buf32_to_u32 (const void *buffer) { const unsigned char *p = buffer; return (((u32)p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]); } #endif /*GNUPG_COMMON_HOST2NET_H*/ gnupg-1.4.20/include/assuan.h0000644000175000017500000002412312635262326012736 00000000000000/* assuan.c - Definitions for the Assuan protocol * Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. * Copyright (C) 2005 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. For the standalone version of gnupg we only need the ability to connect to a server, so we dropped everything else and maintain this separate copy. */ #ifndef ASSUAN_H #define ASSUAN_H #include #include #include typedef enum { ASSUAN_No_Error = 0, ASSUAN_General_Error = 1, ASSUAN_Out_Of_Core = 2, ASSUAN_Invalid_Value = 3, ASSUAN_Timeout = 4, ASSUAN_Read_Error = 5, ASSUAN_Write_Error = 6, ASSUAN_Problem_Starting_Server = 7, ASSUAN_Not_A_Server = 8, ASSUAN_Not_A_Client = 9, ASSUAN_Nested_Commands = 10, ASSUAN_Invalid_Response = 11, ASSUAN_No_Data_Callback = 12, ASSUAN_No_Inquire_Callback = 13, ASSUAN_Connect_Failed = 14, ASSUAN_Accept_Failed = 15, /* Error codes above 99 are meant as status codes */ ASSUAN_Not_Implemented = 100, ASSUAN_Server_Fault = 101, ASSUAN_Invalid_Command = 102, ASSUAN_Unknown_Command = 103, ASSUAN_Syntax_Error = 104, ASSUAN_Parameter_Error = 105, ASSUAN_Parameter_Conflict = 106, ASSUAN_Line_Too_Long = 107, ASSUAN_Line_Not_Terminated = 108, ASSUAN_No_Input = 109, ASSUAN_No_Output = 110, ASSUAN_Canceled = 111, ASSUAN_Unsupported_Algorithm = 112, ASSUAN_Server_Resource_Problem = 113, ASSUAN_Server_IO_Error = 114, ASSUAN_Server_Bug = 115, ASSUAN_No_Data_Available = 116, ASSUAN_Invalid_Data = 117, ASSUAN_Unexpected_Command = 118, ASSUAN_Too_Much_Data = 119, ASSUAN_Inquire_Unknown = 120, ASSUAN_Inquire_Error = 121, ASSUAN_Invalid_Option = 122, ASSUAN_Invalid_Index = 123, ASSUAN_Unexpected_Status = 124, ASSUAN_Unexpected_Data = 125, ASSUAN_Invalid_Status = 126, ASSUAN_Locale_Problem = 127, ASSUAN_Not_Confirmed = 128, /* Error codes in the range 1000 to 9999 may be used by applications at their own discretion. */ ASSUAN_USER_ERROR_FIRST = 1000, ASSUAN_USER_ERROR_LAST = 9999 } assuan_error_t; #define ASSUAN_LINELENGTH 1002 /* 1000 + [CR,]LF */ struct assuan_context_s; typedef struct assuan_context_s *assuan_context_t; /*-- assuan-handler.c --*/ int assuan_register_command (assuan_context_t ctx, const char *cmd_string, int (*handler)(assuan_context_t, char *)); int assuan_register_bye_notify (assuan_context_t ctx, void (*fnc)(assuan_context_t)); int assuan_register_reset_notify (assuan_context_t ctx, void (*fnc)(assuan_context_t)); int assuan_register_cancel_notify (assuan_context_t ctx, void (*fnc)(assuan_context_t)); int assuan_register_input_notify (assuan_context_t ctx, void (*fnc)(assuan_context_t, const char *)); int assuan_register_output_notify (assuan_context_t ctx, void (*fnc)(assuan_context_t, const char *)); int assuan_register_option_handler (assuan_context_t ctx, int (*fnc)(assuan_context_t, const char*, const char*)); int assuan_process (assuan_context_t ctx); int assuan_process_next (assuan_context_t ctx); int assuan_get_active_fds (assuan_context_t ctx, int what, int *fdarray, int fdarraysize); FILE *assuan_get_data_fp (assuan_context_t ctx); assuan_error_t assuan_set_okay_line (assuan_context_t ctx, const char *line); assuan_error_t assuan_write_status (assuan_context_t ctx, const char *keyword, const char *text); /* Negotiate a file descriptor. If LINE contains "FD=N", returns N assuming a local file descriptor. If LINE contains "FD" reads a file descriptor via CTX and stores it in *RDF (the CTX must be capable of passing file descriptors). */ assuan_error_t assuan_command_parse_fd (assuan_context_t ctx, char *line, int *rfd); /*-- assuan-listen.c --*/ assuan_error_t assuan_set_hello_line (assuan_context_t ctx, const char *line); assuan_error_t assuan_accept (assuan_context_t ctx); int assuan_get_input_fd (assuan_context_t ctx); int assuan_get_output_fd (assuan_context_t ctx); assuan_error_t assuan_close_input_fd (assuan_context_t ctx); assuan_error_t assuan_close_output_fd (assuan_context_t ctx); /*-- assuan-pipe-server.c --*/ int assuan_init_pipe_server (assuan_context_t *r_ctx, int filedes[2]); void assuan_deinit_server (assuan_context_t ctx); /*-- assuan-socket-server.c --*/ int assuan_init_socket_server (assuan_context_t *r_ctx, int listen_fd); int assuan_init_connected_socket_server (assuan_context_t *r_ctx, int fd); /*-- assuan-pipe-connect.c --*/ assuan_error_t assuan_pipe_connect (assuan_context_t *ctx, const char *name, char *const argv[], int *fd_child_list); assuan_error_t assuan_pipe_connect2 (assuan_context_t *ctx, const char *name, char *const argv[], int *fd_child_list, void (*atfork) (void*, int), void *atforkvalue); /*-- assuan-socket-connect.c --*/ assuan_error_t assuan_socket_connect (assuan_context_t *ctx, const char *name, pid_t server_pid); /*-- assuan-domain-connect.c --*/ /* Connect to a Unix domain socket server. RENDEZVOUSFD is bidirectional file descriptor (normally returned via socketpair) which the client can use to rendezvous with the server. SERVER s the server's pid. */ assuan_error_t assuan_domain_connect (assuan_context_t *r_ctx, int rendezvousfd, pid_t server); /*-- assuan-domain-server.c --*/ /* RENDEZVOUSFD is a bidirectional file descriptor (normally returned via socketpair) that the domain server can use to rendezvous with the client. CLIENT is the client's pid. */ assuan_error_t assuan_init_domain_server (assuan_context_t *r_ctx, int rendezvousfd, pid_t client); /*-- assuan-connect.c --*/ void assuan_disconnect (assuan_context_t ctx); pid_t assuan_get_pid (assuan_context_t ctx); /*-- assuan-client.c --*/ assuan_error_t assuan_transact (assuan_context_t ctx, const char *command, assuan_error_t (*data_cb)(void *, const void *, size_t), void *data_cb_arg, assuan_error_t (*inquire_cb)(void*, const char *), void *inquire_cb_arg, assuan_error_t (*status_cb)(void*, const char *), void *status_cb_arg); assuan_error_t assuan_transact2 (assuan_context_t ctx, const char *command, assuan_error_t (*data_cb)(void *, const void *, size_t), void *data_cb_arg, assuan_error_t (*inquire_cb)(void*, const char *), void *inquire_cb_arg, assuan_error_t (*status_cb)(void*, const char *), void *status_cb_arg, assuan_error_t (*okay_cb)(void*, const char *), void *okay_cb_arg); /*-- assuan-inquire.c --*/ assuan_error_t assuan_inquire (assuan_context_t ctx, const char *keyword, unsigned char **r_buffer, size_t *r_length, size_t maxlen); /*-- assuan-buffer.c --*/ assuan_error_t assuan_read_line (assuan_context_t ctx, char **line, size_t *linelen); int assuan_pending_line (assuan_context_t ctx); assuan_error_t assuan_write_line (assuan_context_t ctx, const char *line ); assuan_error_t assuan_send_data (assuan_context_t ctx, const void *buffer, size_t length); /*-- assuan-util.c --*/ void assuan_set_malloc_hooks ( void *(*new_alloc_func)(size_t n), void *(*new_realloc_func)(void *p, size_t n), void (*new_free_func)(void*) ); void assuan_set_log_stream (assuan_context_t ctx, FILE *fp); int assuan_set_error (assuan_context_t ctx, int err, const char *text); void assuan_set_pointer (assuan_context_t ctx, void *pointer); void *assuan_get_pointer (assuan_context_t ctx); void assuan_begin_confidential (assuan_context_t ctx); void assuan_end_confidential (assuan_context_t ctx); /*-- assuan-errors.c (built) --*/ const char *assuan_strerror (assuan_error_t err); /*-- assuan-logging.c --*/ /* Set the stream to which assuan should log message not associated with a context. By default, this is stderr. The default value will be changed when the first log stream is associated with a context. Note, that this function is not thread-safe and should in general be used right at startup. */ extern void assuan_set_assuan_log_stream (FILE *fp); /* Return the stream which is currently being using for global logging. */ extern FILE *assuan_get_assuan_log_stream (void); /* Set the prefix to be used at the start of a line emitted by assuan on the log stream. The default is the empty string. Note, that this function is not thread-safe and should in general be used right at startup. */ void assuan_set_assuan_log_prefix (const char *text); /* Return a prefix to be used at the start of a line emitted by assuan on the log stream. The default implementation returns the empty string, i.e. "" */ const char *assuan_get_assuan_log_prefix (void); #endif /* ASSUAN_H */ gnupg-1.4.20/include/errors.h0000644000175000017500000000667312635262326012772 00000000000000/* errors.h - erro code * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef G10_ERRORS_H #define G10_ERRORS_H #define G10ERR_GENERAL 1 #define G10ERR_UNKNOWN_PACKET 2 #define G10ERR_UNKNOWN_VERSION 3 /* Unknown version (in packet) */ #define G10ERR_PUBKEY_ALGO 4 /* Unknown pubkey algorithm */ #define G10ERR_DIGEST_ALGO 5 /* Unknown digest algorithm */ #define G10ERR_BAD_PUBKEY 6 /* Bad public key */ #define G10ERR_BAD_SECKEY 7 /* Bad secret key */ #define G10ERR_BAD_SIGN 8 /* Bad signature */ #define G10ERR_NO_PUBKEY 9 /* public key not found */ #define G10ERR_CHECKSUM 10 /* checksum error */ #define G10ERR_BAD_PASS 11 /* Bad passphrase */ #define G10ERR_CIPHER_ALGO 12 /* Unknown cipher algorithm */ #define G10ERR_KEYRING_OPEN 13 #define G10ERR_INVALID_PACKET 14 #define G10ERR_INVALID_ARMOR 15 #define G10ERR_NO_USER_ID 16 #define G10ERR_NO_SECKEY 17 /* secret key not available */ #define G10ERR_WRONG_SECKEY 18 /* wrong seckey used */ #define G10ERR_UNSUPPORTED 19 #define G10ERR_BAD_KEY 20 /* bad (session) key */ #define G10ERR_READ_FILE 21 #define G10ERR_WRITE_FILE 22 #define G10ERR_COMPR_ALGO 23 /* Unknown compress algorithm */ #define G10ERR_OPEN_FILE 24 #define G10ERR_CREATE_FILE 25 #define G10ERR_PASSPHRASE 26 /* invalid passphrase */ #define G10ERR_NI_PUBKEY 27 #define G10ERR_NI_CIPHER 28 #define G10ERR_SIG_CLASS 29 #define G10ERR_BAD_MPI 30 #define G10ERR_RESOURCE_LIMIT 31 #define G10ERR_INV_KEYRING 32 #define G10ERR_TRUSTDB 33 /* a problem with the trustdb */ #define G10ERR_BAD_CERT 34 /* bad certicate */ #define G10ERR_INV_USER_ID 35 #define G10ERR_CLOSE_FILE 36 #define G10ERR_RENAME_FILE 37 #define G10ERR_DELETE_FILE 38 #define G10ERR_UNEXPECTED 39 #define G10ERR_TIME_CONFLICT 40 #define G10ERR_WR_PUBKEY_ALGO 41 /* unusabe pubkey algo */ #define G10ERR_FILE_EXISTS 42 #define G10ERR_WEAK_KEY 43 /* NOTE: hardcoded into the cipher modules */ #define G10ERR_WRONG_KEYLEN 44 /* NOTE: hardcoded into the cipher modules */ #define G10ERR_INV_ARG 45 #define G10ERR_BAD_URI 46 /* syntax error in URI */ #define G10ERR_INVALID_URI 47 /* e.g. unsupported scheme */ #define G10ERR_NETWORK 48 /* general network error */ #define G10ERR_UNKNOWN_HOST 49 #define G10ERR_SELFTEST_FAILED 50 #define G10ERR_NOT_ENCRYPTED 51 #define G10ERR_NOT_PROCESSED 52 #define G10ERR_UNU_PUBKEY 53 #define G10ERR_UNU_SECKEY 54 #define G10ERR_KEYSERVER 55 #define G10ERR_CANCELED 56 #define G10ERR_NO_CARD 57 #define G10ERR_NO_DATA 58 #ifndef HAVE_STRERROR char *strerror (int n); #endif #ifdef _WIN32 const char * w32_strerror (int w32_errno); #endif #endif /*G10_ERRORS_H*/ gnupg-1.4.20/include/ttyio.h0000644000175000017500000000421012635262326012607 00000000000000/* ttyio.h * Copyright (C) 1998, 1999, 2000, 2001, 2005 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 3 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, see . */ #ifndef G10_TTYIO_H #define G10_TTYIO_H #ifdef HAVE_LIBREADLINE #include #include #endif const char *tty_get_ttyname (void); int tty_batchmode( int onoff ); #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) void tty_printf (const char *fmt, ... ) __attribute__ ((format (printf,1,2))); void tty_fprintf (FILE *fp, const char *fmt, ... ) __attribute__ ((format (printf,2,3))); #else void tty_printf (const char *fmt, ... ); void tty_fprintf (FILE *fp, const char *fmt, ... ); #endif void tty_print_string( const byte *p, size_t n ); void tty_print_utf8_string( const byte *p, size_t n ); void tty_print_utf8_string2( const byte *p, size_t n, size_t max_n ); char *tty_get( const char *prompt ); char *tty_get_hidden( const char *prompt ); void tty_kill_prompt(void); int tty_get_answer_is_yes( const char *prompt ); int tty_no_terminal(int onoff); #ifdef __VMS FILE *ttyfp_is (void); void init_ttyfp (void); #endif /*__VMS*/ #ifdef HAVE_LIBREADLINE void tty_enable_completion(rl_completion_func_t *completer); void tty_disable_completion(void); #else /* Use a macro to stub out these functions since a macro has no need to typedef a "rl_completion_func_t" which would be undefined without readline. */ #define tty_enable_completion(x) #define tty_disable_completion() #endif void tty_cleanup_after_signal (void); #endif /*G10_TTYIO_H*/ gnupg-1.4.20/include/mpi.h0000644000175000017500000001365512635262326012241 00000000000000/* mpi.h - Multi Precision Integers * Copyright (C) 1994, 1996, 1998, 1999, * 2000, 2001 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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 #include "iobuf.h" #include "types.h" #include "memory.h" #ifndef EXTERN_UNLESS_MAIN_MODULE #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif #define DBG_MPI mpi_debug_mode EXTERN_UNLESS_MAIN_MODULE int mpi_debug_mode; struct gcry_mpi; typedef struct gcry_mpi *MPI; /*-- 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_alloc_like(n) mpi_debug_alloc_like((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 ); MPI mpi_debug_alloc_like( MPI a, 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 ); MPI mpi_alloc_like( MPI a ); void mpi_free( MPI a ); void mpi_resize( MPI a, unsigned nlimbs ); MPI mpi_copy( MPI a ); #endif #define mpi_is_opaque(a) ((a) && (mpi_get_flags (a)&4)) MPI mpi_set_opaque( MPI a, void *p, unsigned int len ); void *mpi_get_opaque( MPI a, unsigned int *len ); #define mpi_is_secure(a) ((a) && (mpi_get_flags (a)&1)) void mpi_set_secure( MPI a ); void mpi_clear( MPI a ); void mpi_set( MPI w, MPI u); void mpi_set_cond( MPI w, MPI u, unsigned long set); 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); int mpi_get_nlimbs (MPI a); int mpi_is_neg (MPI a); unsigned int mpi_nlimb_hint_from_nbytes (unsigned int nbytes); unsigned int mpi_nlimb_hint_from_nbits (unsigned int nbits); unsigned int mpi_get_flags (MPI a); /*-- 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 exponent, 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*/ gnupg-1.4.20/include/srv.h0000644000175000017500000000225712635262326012262 00000000000000/* srv.h * Copyright (C) 2003, 2004 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 3 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, see . */ #ifndef _SRV_H_ #define _SRV_H_ #ifdef USE_DNS_SRV #ifdef _WIN32 #include #else #include #include #include #endif /* !_WIN32 */ #endif /* USE_DNS_SRV */ #include "types.h" #ifndef MAXDNAME #define MAXDNAME 1025 #endif struct srventry { u16 priority; u16 weight; u16 port; int run_count; char target[MAXDNAME]; }; int getsrv(const char *name,struct srventry **list); #endif /* !_SRV_H_ */ gnupg-1.4.20/include/iobuf.h0000644000175000017500000001300312635262326012543 00000000000000/* iobuf.h - I/O buffer * Copyright (C) 1998, 1999, 2000, 2001, 2004 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 3 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, see . */ #ifndef G10_IOBUF_H #define G10_IOBUF_H #include "types.h" #define DBG_IOBUF iobuf_debug_mode #define IOBUFCTRL_INIT 1 #define IOBUFCTRL_FREE 2 #define IOBUFCTRL_UNDERFLOW 3 #define IOBUFCTRL_FLUSH 4 #define IOBUFCTRL_DESC 5 #define IOBUFCTRL_CANCEL 6 #define IOBUFCTRL_USER 16 typedef struct iobuf_struct *IOBUF; typedef struct iobuf_struct *iobuf_t; /* fixme: we should hide most of this stuff */ struct iobuf_struct { int use; /* 1 input , 2 output, 3 temp */ off_t nlimit; off_t nbytes; /* used together with nlimit */ off_t ntotal; /* total bytes read (position of stream) */ int nofast; /* used by the iobuf_get() */ void *directfp; struct { size_t size; /* allocated size */ size_t start; /* number of invalid bytes at the begin of the buffer */ size_t len; /* currently filled to this size */ byte *buf; } d; int filter_eof; int error; int (*filter)( void *opaque, int control, IOBUF chain, byte *buf, size_t *len); void *filter_ov; /* value for opaque */ int filter_ov_owner; char *real_fname; IOBUF chain; /* next iobuf used for i/o if any (passed to filter) */ int no, subno; const char *desc; void *opaque; /* can be used to hold any information */ /* this value is copied to all instances */ struct { size_t size; /* allocated size */ size_t start; /* number of invalid bytes at the begin of the buffer */ size_t len; /* currently filled to this size */ byte *buf; } unget; }; #ifndef EXTERN_UNLESS_MAIN_MODULE #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif EXTERN_UNLESS_MAIN_MODULE int iobuf_debug_mode; void iobuf_enable_special_filenames ( int yes ); int iobuf_is_pipe_filename (const char *fname); IOBUF iobuf_alloc(int use, size_t bufsize); IOBUF iobuf_temp(void); IOBUF iobuf_temp_with_content( const char *buffer, size_t length ); IOBUF iobuf_open( const char *fname ); IOBUF iobuf_fdopen( int fd, const char *mode ); IOBUF iobuf_sockopen( int fd, const char *mode ); IOBUF iobuf_create( const char *fname ); IOBUF iobuf_append( const char *fname ); IOBUF iobuf_openrw( const char *fname ); int iobuf_ioctl ( IOBUF a, int cmd, int intval, void *ptrval ); int iobuf_close( IOBUF iobuf ); int iobuf_cancel( IOBUF iobuf ); int iobuf_push_filter( IOBUF a, int (*f)(void *opaque, int control, IOBUF chain, byte *buf, size_t *len), void *ov ); int iobuf_push_filter2( IOBUF a, int (*f)(void *opaque, int control, IOBUF chain, byte *buf, size_t *len), void *ov, int rel_ov ); int iobuf_flush(IOBUF a); void iobuf_clear_eof(IOBUF a); #define iobuf_set_error(a) do { (a)->error = 1; } while(0) #define iobuf_error(a) ((a)->error) void iobuf_set_limit( IOBUF a, off_t nlimit ); off_t iobuf_tell( IOBUF a ); int iobuf_seek( IOBUF a, off_t newpos ); int iobuf_readbyte(IOBUF a); int iobuf_read(IOBUF a, byte *buf, unsigned buflen ); unsigned iobuf_read_line( IOBUF a, byte **addr_of_buffer, unsigned *length_of_buffer, unsigned *max_length ); int iobuf_peek(IOBUF a, byte *buf, unsigned buflen ); int iobuf_writebyte(IOBUF a, unsigned c); int iobuf_write(IOBUF a, byte *buf, unsigned buflen ); int iobuf_writestr(IOBUF a, const char *buf ); void iobuf_flush_temp( IOBUF temp ); int iobuf_write_temp( IOBUF a, IOBUF temp ); size_t iobuf_temp_to_buffer( IOBUF a, byte *buffer, size_t buflen ); void iobuf_unget_and_close_temp( IOBUF a, IOBUF temp ); int iobuf_get_fd (IOBUF a); off_t iobuf_get_filelength (IOBUF a, int *overflow); #define IOBUF_FILELENGTH_LIMIT 0xffffffff const char *iobuf_get_real_fname( IOBUF a ); const char *iobuf_get_fname( IOBUF a ); void iobuf_set_partial_block_mode( IOBUF a, size_t len ); int iobuf_translate_file_handle ( int fd, int for_write ); /* Get a byte form the iobuf; must check for eof prior to this function. * This function returns values in the range 0 .. 255 or -1 to indicate EOF * iobuf_get_noeof() does not return -1 to indicate EOF, but masks the * returned value to be in the range 0..255. */ #define iobuf_get(a) \ ( ((a)->nofast || (a)->d.start >= (a)->d.len )? \ iobuf_readbyte((a)) : ( (a)->nbytes++, (a)->d.buf[(a)->d.start++] ) ) #define iobuf_get_noeof(a) (iobuf_get((a))&0xff) /* write a byte to the iobuf and return true on write error * This macro does only write the low order byte */ #define iobuf_put(a,c) iobuf_writebyte(a,c) #define iobuf_where(a) "[don't know]" #define iobuf_id(a) ((a)->no) #define iobuf_get_temp_buffer(a) ( (a)->d.buf ) #define iobuf_get_temp_length(a) ( (a)->d.len ) #define iobuf_is_temp(a) ( (a)->use == 3 ) void iobuf_skip_rest (IOBUF a, unsigned long n, int partial); #endif /*G10_IOBUF_H*/ gnupg-1.4.20/include/compat.h0000644000175000017500000000125312635262326012726 00000000000000#ifndef _COMPAT_H_ #define _COMPAT_H_ /* Note this isn't identical to a C locale isspace() without \f and \v, but works for the purposes used here. */ #define ascii_isspace(a) ((a)==' ' || (a)=='\n' || (a)=='\r' || (a)=='\t') int hextobyte( const char *s ); int ascii_toupper (int c); int ascii_tolower (int c); int ascii_strcasecmp( const char *a, const char *b ); int ascii_strncasecmp( const char *a, const char *b, size_t n); #ifndef HAVE_STRSEP char *strsep (char **stringp, const char *delim); #endif #if __GNUC__ >= 4 char *xstrconcat (const char *s1, ...) __attribute__ ((sentinel(0))); #else char *xstrconcat (const char *s1, ...); #endif #endif /* !_COMPAT_H_ */ gnupg-1.4.20/include/distfiles0000644000175000017500000000025312635262326013202 00000000000000cipher.h errors.h iobuf.h memory.h mpi.h ttyio.h types.h util.h i18n.h host2net.h http.h keyserver.h _regex.h dynload.h assuan.h compat.h srv.h estream-printf.h dotlock.h gnupg-1.4.20/include/memory.h0000644000175000017500000000727612635262326012766 00000000000000/* memory.h - memory allocation * Copyright (C) 1998, 1999, 2000, 2001, 2005 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 3 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, see . */ #ifndef G10_MEMORY_H #define G10_MEMORY_H #ifdef M_DEBUG #ifndef STR #define STR(v) #v #endif #ifndef __riscos__ #define M_DBGINFO(a) __FUNCTION__ "["__FILE__ ":" STR(a) "]" #else /* __riscos__ */ #define M_DBGINFO(a) "["__FILE__ ":" STR(a) "]" #endif /* __riscos__ */ #define xmalloc(n) m_debug_alloc((n), M_DBGINFO( __LINE__ ) ) #define xtrymalloc(n) m_debug_trymalloc ((n), M_DBGINFO( __LINE__ )) #define xmalloc_clear(n) m_debug_alloc_clear((n), M_DBGINFO(__LINE__) ) #define xmalloc_secure(n) m_debug_alloc_secure(n), M_DBGINFO(__LINE__) ) #define xmalloc_secure_clear(n) m_debug_alloc_secure_clear((n), M_DBGINFO(__LINE__) ) #define xrealloc(n,m) m_debug_realloc((n),(m), M_DBGINFO(__LINE__) ) #define xfree(n) m_debug_free((n), M_DBGINFO(__LINE__) ) #define m_check(n) m_debug_check((n), M_DBGINFO(__LINE__) ) /*#define m_copy(a) m_debug_copy((a), M_DBGINFO(__LINE__) )*/ #define xstrdup(a) m_debug_strdup((a), M_DBGINFO(__LINE__) ) #define xtrystrdup(a) m_debug_trystrdup((a), M_DBGINFO(__LINE__) ) void *m_debug_alloc( size_t n, const char *info ); void *m_debug_trymalloc (size_t n, const char *info); void *m_debug_alloc_clear( size_t n, const char *info ); void *m_debug_alloc_secure( size_t n, const char *info ); void *m_debug_alloc_secure_clear( size_t n, const char *info ); void *m_debug_realloc( void *a, size_t n, const char *info ); void m_debug_free( void *p, const char *info ); void m_debug_check( const void *a, const char *info ); /*void *m_debug_copy( const void *a, const char *info );*/ char *m_debug_strdup( const char *a, const char *info ); char *m_debug_trystrdup (const char *a, const char *info); #else void *xmalloc( size_t n ); void *xtrymalloc (size_t n); void *xmalloc_clear( size_t n ); void *xmalloc_secure( size_t n ); void *xmalloc_secure_clear( size_t n ); void *xrealloc( void *a, size_t n ); void xfree( void *p ); void m_check( const void *a ); /*void *m_copy( const void *a );*/ char *xstrdup( const char * a); char *xtrystrdup (const char *a); #endif size_t m_size( const void *a ); void m_print_stats(const char *prefix); /* The follwing functions should be preferred over xmalloc_clear. */ void *xcalloc (size_t n, size_t m); void *xcalloc_secure (size_t n, size_t m); /*-- secmem.c --*/ int secmem_init( size_t npool ); void secmem_term( void ); void *secmem_malloc( size_t size ); void *secmexrealloc( void *a, size_t newsize ); void secmem_free( void *a ); int m_is_secure( const void *p ); void secmem_dump_stats(void); void secmem_set_flags( unsigned flags ); unsigned secmem_get_flags(void); #define DBG_MEMORY memory_debug_mode #define DBG_MEMSTAT memory_stat_debug_mode #ifndef EXTERN_UNLESS_MAIN_MODULE #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif EXTERN_UNLESS_MAIN_MODULE int memory_debug_mode; EXTERN_UNLESS_MAIN_MODULE int memory_stat_debug_mode; #endif /*G10_MEMORY_H*/ gnupg-1.4.20/g10/0000755000175000017500000000000012635457217010322 500000000000000gnupg-1.4.20/g10/progress.c0000644000175000017500000000574012635262326012253 00000000000000/* progress.c * Copyright (C) 2003 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, * USA. */ #include #include #include "iobuf.h" #include "filter.h" #include "status.h" #include "util.h" #include "options.h" /**************** * The filter is used to report progress to the user. */ int progress_filter (void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { int rc = 0; progress_filter_context_t *pfx = opaque; if (control == IOBUFCTRL_INIT) { char buffer[50]; pfx->last = 0; pfx->offset = 0; pfx->last_time = make_timestamp (); sprintf (buffer, "%.20s ? %lu %lu", pfx->what? pfx->what : "?", pfx->offset, pfx->total); write_status_text (STATUS_PROGRESS, buffer); } else if (control == IOBUFCTRL_UNDERFLOW) { u32 timestamp = make_timestamp (); int len = iobuf_read (a, buf, *ret_len); if (len >= 0) { pfx->offset += len; *ret_len = len; } else { *ret_len = 0; rc = -1; } if ((len == -1 && pfx->offset != pfx->last) || timestamp - pfx->last_time > 0) { char buffer[50]; sprintf (buffer, "%.20s ? %lu %lu", pfx->what? pfx->what : "?", pfx->offset, pfx->total); write_status_text (STATUS_PROGRESS, buffer); pfx->last = pfx->offset; pfx->last_time = timestamp; } } else if (control == IOBUFCTRL_FREE) { /* Note, that we must always dealloc resources of a filter within the filter handler and not anywhere else. (We set it to NULL and check all uses just in case.) */ xfree (pfx->what); pfx->what = NULL; } else if (control == IOBUFCTRL_DESC) *(char**)buf = "progress_filter"; return rc; } void handle_progress (progress_filter_context_t *pfx, IOBUF inp, const char *name) { off_t filesize = 0; if (!opt.enable_progress_filter) return; if (!is_status_enabled ()) return; if ( !iobuf_is_pipe_filename (name) && *name ) filesize = iobuf_get_filelength (inp, NULL); else if (opt.set_filesize) filesize = opt.set_filesize; /* register the progress filter */ pfx->what = xstrdup (name ? name : "stdin"); pfx->total = filesize; iobuf_push_filter (inp, progress_filter, pfx); } gnupg-1.4.20/g10/packet.h0000644000175000017500000005016612635262326011665 00000000000000/* packet.h - packet definitions * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007 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 3 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, see . */ #ifndef G10_PACKET_H #define G10_PACKET_H #include "types.h" #include "iobuf.h" #include "mpi.h" #include "cipher.h" #include "filter.h" #include "global.h" #define DEBUG_PARSE_PACKET 1 typedef enum { PKT_NONE =0, PKT_PUBKEY_ENC =1, /* public key encrypted packet */ PKT_SIGNATURE =2, /* secret key encrypted packet */ PKT_SYMKEY_ENC =3, /* session key packet (OpenPGP)*/ PKT_ONEPASS_SIG =4, /* one pass sig packet (OpenPGP)*/ PKT_SECRET_KEY =5, /* secret key */ PKT_PUBLIC_KEY =6, /* public key */ PKT_SECRET_SUBKEY =7, /* secret subkey (OpenPGP) */ PKT_COMPRESSED =8, /* compressed data packet */ PKT_ENCRYPTED =9, /* conventional encrypted data */ PKT_MARKER =10, /* marker packet (OpenPGP) */ PKT_PLAINTEXT =11, /* plaintext data with filename and mode */ PKT_RING_TRUST =12, /* keyring trust packet */ PKT_USER_ID =13, /* user id packet */ PKT_PUBLIC_SUBKEY =14, /* public subkey (OpenPGP) */ PKT_OLD_COMMENT =16, /* comment packet from an OpenPGP draft */ PKT_ATTRIBUTE =17, /* PGP's attribute packet */ PKT_ENCRYPTED_MDC =18, /* integrity protected encrypted data */ PKT_MDC =19, /* manipulation detection code packet */ PKT_COMMENT =61, /* new comment packet (private) */ PKT_GPG_CONTROL =63 /* internal control packet */ } pkttype_t; typedef struct packet_struct PACKET; /* PKT_GPG_CONTROL types */ typedef enum { CTRLPKT_CLEARSIGN_START = 1, CTRLPKT_PIPEMODE = 2, CTRLPKT_PLAINTEXT_MARK =3 } ctrlpkttype_t; typedef enum { PREFTYPE_NONE = 0, PREFTYPE_SYM = 1, PREFTYPE_HASH = 2, PREFTYPE_ZIP = 3 } preftype_t; typedef struct { byte type; byte value; } prefitem_t; typedef struct { int mode; byte hash_algo; byte salt[8]; u32 count; } STRING2KEY; typedef struct { byte version; byte cipher_algo; /* cipher algorithm used */ STRING2KEY s2k; byte seskeylen; /* keylength in byte or 0 for no seskey */ byte seskey[1]; } PKT_symkey_enc; typedef struct { u32 keyid[2]; /* 64 bit keyid */ byte version; byte pubkey_algo; /* algorithm used for public key scheme */ byte throw_keyid; MPI data[PUBKEY_MAX_NENC]; } PKT_pubkey_enc; typedef struct { u32 keyid[2]; /* 64 bit keyid */ byte sig_class; /* sig classification */ byte digest_algo; /* algorithm used for digest */ byte pubkey_algo; /* algorithm used for public key scheme */ byte last; /* a stupid flag */ } PKT_onepass_sig; typedef struct { size_t size; /* allocated */ size_t len; /* used */ byte data[1]; } subpktarea_t; struct revocation_key { byte class; byte algid; byte fpr[MAX_FINGERPRINT_LEN]; }; /* Object to keep information about a PKA DNS record. */ typedef struct { int valid; /* An actual PKA record exists for EMAIL. */ int checked; /* Set to true if the FPR has been checked against the actual key. */ char *uri; /* Malloced string with the URI. NULL if the URI is not available.*/ unsigned char fpr[20]; /* The fingerprint as stored in the PKA RR. */ char email[1];/* The email address from the notation data. */ } pka_info_t; /* Object to keep information pertaining to a signature. */ typedef struct { struct { unsigned checked:1; /* Signature has been checked. */ unsigned valid:1; /* Signature is good (if checked is set). */ unsigned chosen_selfsig:1; /* A selfsig that is the chosen one. */ unsigned unknown_critical:1; unsigned exportable:1; unsigned revocable:1; unsigned policy_url:1; /* At least one policy URL is present */ unsigned notation:1; /* At least one notation is present */ unsigned pref_ks:1; /* At least one preferred keyserver is present */ unsigned expired:1; unsigned pka_tried:1; /* Set if we tried to retrieve the PKA record. */ } flags; u32 keyid[2]; /* 64 bit keyid */ u32 timestamp; /* Signature made (seconds since Epoch). */ u32 expiredate; /* Expires at this date or 0 if not at all. */ byte version; byte sig_class; /* Sig classification, append for MD calculation. */ byte pubkey_algo; /* Algorithm used for public key scheme */ /* (PUBKEY_ALGO_xxx) */ byte digest_algo; /* Algorithm used for digest (DIGEST_ALGO_xxxx). */ byte trust_depth; byte trust_value; const byte *trust_regexp; struct revocation_key **revkey; int numrevkeys; pka_info_t *pka_info; /* Malloced PKA data or NULL if not available. See also flags.pka_tried. */ subpktarea_t *hashed; /* All subpackets with hashed data (v4 only). */ subpktarea_t *unhashed; /* Ditto for unhashed data. */ byte digest_start[2]; /* First 2 bytes of the digest. */ MPI data[PUBKEY_MAX_NSIG]; } PKT_signature; #define ATTRIB_IMAGE 1 /* This is the cooked form of attributes */ struct user_attribute { byte type; const byte *data; u32 len; }; typedef struct { int ref; /* reference counter */ int len; /* length of the name */ struct user_attribute *attribs; int numattribs; byte *attrib_data; /* if this is not NULL, the packet is an attribute */ unsigned long attrib_len; byte *namehash; int help_key_usage; u32 help_key_expire; int help_full_count; int help_marginal_count; int is_primary; /* 2 if set via the primary flag, 1 if calculated */ int is_revoked; int is_expired; u32 expiredate; /* expires at this date or 0 if not at all */ prefitem_t *prefs; /* list of preferences (may be NULL)*/ u32 created; /* according to the self-signature */ byte selfsigversion; struct { /* TODO: Move more flags here */ unsigned mdc:1; unsigned ks_modify:1; unsigned compacted:1; } flags; char name[1]; } PKT_user_id; struct revoke_info { /* revoked at this date */ u32 date; /* the keyid of the revoking key (selfsig or designated revoker) */ u32 keyid[2]; /* the algo of the revoking key */ byte algo; }; /**************** * Note about the pkey/skey elements: We assume that the secret keys * has the same elemts as the public key at the begin of the array, so * that npkey < nskey and it is possible to compare the secret and * public keys by comparing the first npkey elements of pkey againts skey. */ typedef struct { u32 timestamp; /* key made */ u32 expiredate; /* expires at this date or 0 if not at all */ u32 max_expiredate; /* must not expire past this date */ struct revoke_info revoked; byte hdrbytes; /* number of header bytes */ byte version; byte selfsigversion; /* highest version of all of the self-sigs */ byte pubkey_algo; /* algorithm used for public key scheme */ byte pubkey_usage; /* for now only used to pass it to getkey() */ byte req_usage; /* hack to pass a request to getkey() */ byte req_algo; /* Ditto */ u32 has_expired; /* set to the expiration date if expired */ int is_revoked; /* key has been revoked, 1 if by the owner, 2 if by a designated revoker */ int maybe_revoked; /* a designated revocation is present, but without the key to check it */ int is_valid; /* key (especially subkey) is valid */ int dont_cache; /* do not cache this */ byte backsig; /* 0=none, 1=bad, 2=good */ u32 main_keyid[2]; /* keyid of the primary key */ u32 keyid[2]; /* calculated by keyid_from_pk() */ byte is_primary; byte is_disabled; /* 0 for unset, 1 for enabled, 2 for disabled. */ prefitem_t *prefs; /* list of preferences (may be NULL) */ int mdc_feature; /* mdc feature set */ PKT_user_id *user_id; /* if != NULL: found by that uid */ struct revocation_key *revkey; int numrevkeys; u32 trust_timestamp; byte trust_depth; byte trust_value; const byte *trust_regexp; MPI pkey[PUBKEY_MAX_NPKEY]; } PKT_public_key; /* Evaluates as true if the pk is disabled, and false if it isn't. If there is no disable value cached, fill one in. */ #define pk_is_disabled(a) (((a)->is_disabled)?((a)->is_disabled==2):(cache_disabled_value((a)))) typedef struct { u32 timestamp; /* key made */ u32 expiredate; /* expires at this date or 0 if not at all */ u32 max_expiredate; /* must not expire past this date */ byte hdrbytes; /* number of header bytes */ byte version; byte pubkey_algo; /* algorithm used for public key scheme */ byte pubkey_usage; byte req_usage; byte req_algo; u32 has_expired; /* set to the expiration date if expired */ int is_revoked; /* key has been revoked */ int is_valid; /* key (especially subkey) is valid */ u32 main_keyid[2]; /* keyid of the primary key */ u32 keyid[2]; byte is_primary; byte is_protected; /* The secret info is protected and must */ /* be decrypted before use, the protected */ /* MPIs are simply (void*) pointers to memory */ /* and should never be passed to a mpi_xxx() */ struct { byte algo; /* cipher used to protect the secret information*/ byte sha1chk; /* SHA1 is used instead of a 16 bit checksum */ STRING2KEY s2k; byte ivlen; /* used length of the iv */ byte iv[16]; /* initialization vector for CFB mode */ } protect; MPI skey[PUBKEY_MAX_NSKEY]; u16 csum; /* checksum */ } PKT_secret_key; typedef struct { int len; /* length of data */ char data[1]; } PKT_comment; typedef struct { u32 len; /* reserved */ byte new_ctb; byte algorithm; IOBUF buf; /* IOBUF reference */ } PKT_compressed; typedef struct { u32 len; /* length of encrypted data */ int extralen; /* this is (blocksize+2) */ byte new_ctb; /* uses a new CTB */ byte is_partial; /* partial length encoded */ byte mdc_method; /* > 0: integrity protected encrypted data packet */ IOBUF buf; /* IOBUF reference */ } PKT_encrypted; typedef struct { byte hash[20]; } PKT_mdc; typedef struct { unsigned int trustval; unsigned int sigcache; } PKT_ring_trust; typedef struct { u32 len; /* length of encrypted data */ IOBUF buf; /* IOBUF reference */ byte new_ctb; byte is_partial; /* partial length encoded */ int mode; u32 timestamp; int namelen; char name[1]; } PKT_plaintext; typedef struct { int control; size_t datalen; char data[1]; } PKT_gpg_control; /* combine all packets into a union */ struct packet_struct { pkttype_t pkttype; union { void *generic; PKT_symkey_enc *symkey_enc; /* PKT_SYMKEY_ENC */ PKT_pubkey_enc *pubkey_enc; /* PKT_PUBKEY_ENC */ PKT_onepass_sig *onepass_sig; /* PKT_ONEPASS_SIG */ PKT_signature *signature; /* PKT_SIGNATURE */ PKT_public_key *public_key; /* PKT_PUBLIC_[SUB)KEY */ PKT_secret_key *secret_key; /* PKT_SECRET_[SUB]KEY */ PKT_comment *comment; /* PKT_COMMENT */ PKT_user_id *user_id; /* PKT_USER_ID */ PKT_compressed *compressed; /* PKT_COMPRESSED */ PKT_encrypted *encrypted; /* PKT_ENCRYPTED[_MDC] */ PKT_mdc *mdc; /* PKT_MDC */ PKT_ring_trust *ring_trust; /* PKT_RING_TRUST */ PKT_plaintext *plaintext; /* PKT_PLAINTEXT */ PKT_gpg_control *gpg_control; /* PKT_GPG_CONTROL */ } pkt; }; #define init_packet(a) do { (a)->pkttype = 0; \ (a)->pkt.generic = NULL; \ } while(0) typedef enum { SIGSUBPKT_TEST_CRITICAL=-3, SIGSUBPKT_LIST_UNHASHED=-2, SIGSUBPKT_LIST_HASHED =-1, SIGSUBPKT_NONE = 0, SIGSUBPKT_SIG_CREATED = 2, /* signature creation time */ SIGSUBPKT_SIG_EXPIRE = 3, /* signature expiration time */ SIGSUBPKT_EXPORTABLE = 4, /* exportable */ SIGSUBPKT_TRUST = 5, /* trust signature */ SIGSUBPKT_REGEXP = 6, /* regular expression */ SIGSUBPKT_REVOCABLE = 7, /* revocable */ SIGSUBPKT_KEY_EXPIRE = 9, /* key expiration time */ SIGSUBPKT_ARR =10, /* additional recipient request */ SIGSUBPKT_PREF_SYM =11, /* preferred symmetric algorithms */ SIGSUBPKT_REV_KEY =12, /* revocation key */ SIGSUBPKT_ISSUER =16, /* issuer key ID */ SIGSUBPKT_NOTATION =20, /* notation data */ SIGSUBPKT_PREF_HASH =21, /* preferred hash algorithms */ SIGSUBPKT_PREF_COMPR =22, /* preferred compression algorithms */ SIGSUBPKT_KS_FLAGS =23, /* key server preferences */ SIGSUBPKT_PREF_KS =24, /* preferred key server */ SIGSUBPKT_PRIMARY_UID =25, /* primary user id */ SIGSUBPKT_POLICY =26, /* policy URL */ SIGSUBPKT_KEY_FLAGS =27, /* key flags */ SIGSUBPKT_SIGNERS_UID =28, /* signer's user id */ SIGSUBPKT_REVOC_REASON =29, /* reason for revocation */ SIGSUBPKT_FEATURES =30, /* feature flags */ SIGSUBPKT_SIGNATURE =32, /* embedded signature */ SIGSUBPKT_FLAG_CRITICAL=128 } sigsubpkttype_t; struct notation { char *name; char *value; char *altvalue; unsigned char *bdat; size_t blen; struct { unsigned int critical:1; unsigned int ignore:1; } flags; struct notation *next; }; /*-- mainproc.c --*/ void reset_literals_seen(void); int proc_packets( void *ctx, IOBUF a ); int proc_signature_packets( void *ctx, IOBUF a, STRLIST signedfiles, const char *sigfile ); int proc_encryption_packets( void *ctx, IOBUF a ); int list_packets( IOBUF a ); /*-- parse-packet.c --*/ int set_packet_list_mode( int mode ); #if DEBUG_PARSE_PACKET int dbg_search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid, const char* file, int lineno ); int dbg_parse_packet( IOBUF inp, PACKET *ret_pkt, const char* file, int lineno ); int dbg_copy_all_packets( IOBUF inp, IOBUF out, const char* file, int lineno ); int dbg_copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff, const char* file, int lineno ); int dbg_skip_some_packets( IOBUF inp, unsigned n, const char* file, int lineno ); #define search_packet( a,b,c,d ) \ dbg_search_packet( (a), (b), (c), (d), __FILE__, __LINE__ ) #define parse_packet( a, b ) \ dbg_parse_packet( (a), (b), __FILE__, __LINE__ ) #define copy_all_packets( a,b ) \ dbg_copy_all_packets((a),(b), __FILE__, __LINE__ ) #define copy_some_packets( a,b,c ) \ dbg_copy_some_packets((a),(b),(c), __FILE__, __LINE__ ) #define skip_some_packets( a,b ) \ dbg_skip_some_packets((a),(b), __FILE__, __LINE__ ) #else int search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid ); int parse_packet( IOBUF inp, PACKET *ret_pkt); int copy_all_packets( IOBUF inp, IOBUF out ); int copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff ); int skip_some_packets( IOBUF inp, unsigned n ); #endif int parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, PKT_signature *sig ); const byte *enum_sig_subpkt ( const subpktarea_t *subpkts, sigsubpkttype_t reqtype, size_t *ret_n, int *start, int *critical ); const byte *parse_sig_subpkt ( const subpktarea_t *buffer, sigsubpkttype_t reqtype, size_t *ret_n ); const byte *parse_sig_subpkt2 ( PKT_signature *sig, sigsubpkttype_t reqtype, size_t *ret_n ); int parse_one_sig_subpkt( const byte *buffer, size_t n, int type ); void parse_revkeys(PKT_signature *sig); int parse_attribute_subpkts(PKT_user_id *uid); void make_attribute_uidname(PKT_user_id *uid, size_t max_namelen); PACKET *create_gpg_control ( ctrlpkttype_t type, const byte *data, size_t datalen ); /*-- build-packet.c --*/ int build_packet( IOBUF inp, PACKET *pkt ); u32 calc_packet_length( PACKET *pkt ); void build_sig_subpkt( PKT_signature *sig, sigsubpkttype_t type, const byte *buffer, size_t buflen ); void build_sig_subpkt_from_sig( PKT_signature *sig ); int delete_sig_subpkt(subpktarea_t *buffer, sigsubpkttype_t type ); void build_attribute_subpkt(PKT_user_id *uid,byte type, const void *buf,u32 buflen, const void *header,u32 headerlen); struct notation *string_to_notation(const char *string,int is_utf8); struct notation *sig_to_notation(PKT_signature *sig); void free_notation(struct notation *notation); /*-- free-packet.c --*/ void free_symkey_enc( PKT_symkey_enc *enc ); void free_pubkey_enc( PKT_pubkey_enc *enc ); void free_seckey_enc( PKT_signature *enc ); int digest_algo_from_sig( PKT_signature *sig ); void release_public_key_parts( PKT_public_key *pk ); void free_public_key( PKT_public_key *key ); void release_secret_key_parts( PKT_secret_key *sk ); void free_secret_key( PKT_secret_key *sk ); void free_attributes(PKT_user_id *uid); void free_user_id( PKT_user_id *uid ); void free_comment( PKT_comment *rem ); void free_packet( PACKET *pkt ); prefitem_t *copy_prefs (const prefitem_t *prefs); PKT_public_key *copy_public_key( PKT_public_key *d, PKT_public_key *s ); void copy_public_parts_to_secret_key( PKT_public_key *pk, PKT_secret_key *sk ); PKT_secret_key *copy_secret_key( PKT_secret_key *d, PKT_secret_key *s ); PKT_signature *copy_signature( PKT_signature *d, PKT_signature *s ); PKT_user_id *scopy_user_id (PKT_user_id *sd ); int cmp_public_keys( PKT_public_key *a, PKT_public_key *b ); int cmp_secret_keys( PKT_secret_key *a, PKT_secret_key *b ); int cmp_signatures( PKT_signature *a, PKT_signature *b ); int cmp_public_secret_key( PKT_public_key *pk, PKT_secret_key *sk ); int cmp_user_ids( PKT_user_id *a, PKT_user_id *b ); /*-- sig-check.c --*/ int signature_check( PKT_signature *sig, MD_HANDLE digest ); int signature_check2( PKT_signature *sig, MD_HANDLE digest, u32 *r_expiredate, int *r_expired, int *r_revoked, PKT_public_key *ret_pk ); /*-- seckey-cert.c --*/ int is_secret_key_protected( PKT_secret_key *sk ); int check_secret_key( PKT_secret_key *sk, int retries ); int protect_secret_key( PKT_secret_key *sk, DEK *dek ); /*-- pubkey-enc.c --*/ int get_session_key( PKT_pubkey_enc *k, DEK *dek ); int get_override_session_key( DEK *dek, const char *string ); /*-- compress.c --*/ int handle_compressed( void *ctx, PKT_compressed *cd, int (*callback)(IOBUF, void *), void *passthru ); /*-- encr-data.c --*/ int decrypt_data( void *ctx, PKT_encrypted *ed, DEK *dek ); /*-- plaintext.c --*/ int handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, int nooutput, int clearsig ); int ask_for_detached_datafile( MD_HANDLE md, MD_HANDLE md2, const char *inname, int textmode ); /*-- sign.c --*/ int make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk, PKT_user_id *uid, PKT_public_key *subpk, PKT_secret_key *sk, int sigclass, int digest_algo, int sigversion, u32 timestamp, u32 duration, int (*mksubpkt)(PKT_signature *, void *), void *opaque ); int update_keysig_packet( PKT_signature **ret_sig, PKT_signature *orig_sig, PKT_public_key *pk, PKT_user_id *uid, PKT_public_key *subpk, PKT_secret_key *sk, int (*mksubpkt)(PKT_signature *, void *), void *opaque ); /*-- keygen.c --*/ PKT_user_id *generate_user_id(void); #endif /*G10_PACKET_H*/ gnupg-1.4.20/g10/dearmor.c0000644000175000017500000000553012635262326012035 00000000000000/* dearmor.c - Armor utility * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include #include "errors.h" #include "iobuf.h" #include "memory.h" #include "util.h" #include "filter.h" #include "packet.h" #include "options.h" #include "main.h" #include "i18n.h" /**************** * Take an armor file and write it out without armor */ int dearmor_file( const char *fname ) { armor_filter_context_t afx; IOBUF inp = NULL, out = NULL; int rc = 0; int c; memset( &afx, 0, sizeof afx); /* prepare iobufs */ inp = iobuf_open(fname); if (inp && is_secured_file (iobuf_get_fd (inp))) { iobuf_close (inp); inp = NULL; errno = EPERM; } if (!inp) { log_error(_("can't open `%s': %s\n"), fname? fname: "[stdin]", strerror(errno) ); rc = G10ERR_OPEN_FILE; goto leave; } iobuf_push_filter( inp, armor_filter, &afx ); if( (rc = open_outfile( fname, 0, &out )) ) goto leave; while( (c = iobuf_get(inp)) != -1 ) iobuf_put( out, c ); leave: if( rc ) iobuf_cancel(out); else iobuf_close(out); iobuf_close(inp); return rc; } /**************** * Take file and write it out with armor */ int enarmor_file( const char *fname ) { armor_filter_context_t afx; IOBUF inp = NULL, out = NULL; int rc = 0; int c; memset( &afx, 0, sizeof afx); /* prepare iobufs */ inp = iobuf_open(fname); if (inp && is_secured_file (iobuf_get_fd (inp))) { iobuf_close (inp); inp = NULL; errno = EPERM; } if (!inp) { log_error(_("can't open `%s': %s\n"), fname? fname: "[stdin]", strerror(errno) ); rc = G10ERR_OPEN_FILE; goto leave; } if( (rc = open_outfile( fname, 1, &out )) ) goto leave; afx.what = 4; afx.hdrlines = "Comment: Use \"gpg --dearmor\" for unpacking\n"; iobuf_push_filter( out, armor_filter, &afx ); while( (c = iobuf_get(inp)) != -1 ) iobuf_put( out, c ); leave: if( rc ) iobuf_cancel(out); else iobuf_close(out); iobuf_close(inp); return rc; } gnupg-1.4.20/g10/mainproc.c0000644000175000017500000017374712635262326012234 00000000000000/* mainproc.c - handle packets * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 2008 Free Software Foundation, Inc. * Copyright (C) 2013 Werner Koch * * 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 3 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, see . */ #include #include #include #include #include #include #include "packet.h" #include "iobuf.h" #include "memory.h" #include "options.h" #include "util.h" #include "cipher.h" #include "keydb.h" #include "filter.h" #include "main.h" #include "status.h" #include "i18n.h" #include "trustdb.h" #include "keyserver-internal.h" #include "photoid.h" /* Put an upper limit on nested packets. The 32 is an arbitrary value, a much lower should actually be sufficient. */ #define MAX_NESTING_DEPTH 32 struct kidlist_item { struct kidlist_item *next; u32 kid[2]; int pubkey_algo; int reason; }; /**************** * Structure to hold the context */ typedef struct mainproc_context *CTX; struct mainproc_context { struct mainproc_context *anchor; /* May be useful in the future. */ PKT_public_key *last_pubkey; PKT_secret_key *last_seckey; PKT_user_id *last_user_id; md_filter_context_t mfx; int sigs_only; /* Process only signatures and reject all other stuff. */ int encrypt_only; /* Process only encryption messages. */ STRLIST signed_data; const char *sigfilename; DEK *dek; int last_was_session_key; KBNODE list; /* The current list of packets. */ int have_data; IOBUF iobuf; /* Used to get the filename etc. */ int trustletter; /* Temporary usage in list_node. */ ulong symkeys; struct kidlist_item *pkenc_list; /* List of encryption packets. */ struct { int op; int stop_now; } pipemode; int any_sig_seen; /* Set to true if a signature packet has been seen. */ }; static int do_proc_packets( CTX c, IOBUF a ); static void list_node( CTX c, KBNODE node ); static void proc_tree( CTX c, KBNODE node ); static int literals_seen; void reset_literals_seen(void) { literals_seen=0; } static void release_list( CTX c ) { if( !c->list ) return; proc_tree(c, c->list ); release_kbnode( c->list ); while( c->pkenc_list ) { struct kidlist_item *tmp = c->pkenc_list->next; xfree( c->pkenc_list ); c->pkenc_list = tmp; } c->pkenc_list = NULL; c->list = NULL; c->have_data = 0; c->last_was_session_key = 0; c->pipemode.op = 0; c->pipemode.stop_now = 0; xfree(c->dek); c->dek = NULL; } static int add_onepass_sig( CTX c, PACKET *pkt ) { KBNODE node; if ( c->list ) /* add another packet */ add_kbnode( c->list, new_kbnode( pkt )); else /* insert the first one */ c->list = node = new_kbnode( pkt ); return 1; } static int add_gpg_control( CTX c, PACKET *pkt ) { if ( pkt->pkt.gpg_control->control == CTRLPKT_CLEARSIGN_START ) { /* New clear text signature. * Process the last one and reset everything */ release_list(c); } else if ( pkt->pkt.gpg_control->control == CTRLPKT_PIPEMODE ) { /* Pipemode control packet */ if ( pkt->pkt.gpg_control->datalen < 2 ) log_fatal ("invalid pipemode control packet length\n"); if (pkt->pkt.gpg_control->data[0] == 1) { /* start the whole thing */ assert ( !c->list ); /* we should be in a pretty virgin state */ assert ( !c->pipemode.op ); c->pipemode.op = pkt->pkt.gpg_control->data[1]; } else if (pkt->pkt.gpg_control->data[0] == 2) { /* the signed material follows in a plaintext packet */ assert ( c->pipemode.op == 'B' ); } else if (pkt->pkt.gpg_control->data[0] == 3) { assert ( c->pipemode.op == 'B' ); release_list (c); /* and tell the outer loop to terminate */ c->pipemode.stop_now = 1; } else log_fatal ("invalid pipemode control packet code\n"); return 0; /* no need to store the packet */ } if( c->list ) /* add another packet */ add_kbnode( c->list, new_kbnode( pkt )); else /* insert the first one */ c->list = new_kbnode( pkt ); return 1; } static int add_user_id( CTX c, PACKET *pkt ) { if( !c->list ) { log_error("orphaned user ID\n" ); return 0; } add_kbnode( c->list, new_kbnode( pkt ) ); return 1; } static int add_subkey( CTX c, PACKET *pkt ) { if( !c->list ) { log_error("subkey w/o mainkey\n" ); return 0; } add_kbnode( c->list, new_kbnode( pkt ) ); return 1; } static int add_ring_trust( CTX c, PACKET *pkt ) { if( !c->list ) { log_error("ring trust w/o key\n" ); return 0; } add_kbnode( c->list, new_kbnode( pkt ) ); return 1; } static int add_signature( CTX c, PACKET *pkt ) { KBNODE node; c->any_sig_seen = 1; if( pkt->pkttype == PKT_SIGNATURE && !c->list ) { /* This is the first signature for the following datafile. * GPG does not write such packets; instead it always uses * onepass-sig packets. The drawback of PGP's method * of prepending the signature to the data is * that it is not possible to make a signature from data read * from stdin. (GPG is able to read PGP stuff anyway.) */ node = new_kbnode( pkt ); c->list = node; return 1; } else if( !c->list ) return 0; /* oops (invalid packet sequence)*/ else if( !c->list->pkt ) BUG(); /* so nicht */ /* add a new signature node id at the end */ node = new_kbnode( pkt ); add_kbnode( c->list, node ); return 1; } static int symkey_decrypt_seskey( DEK *dek, byte *seskey, size_t slen ) { CIPHER_HANDLE hd; if(slen < 17 || slen > 33) { log_error ( _("weird size for an encrypted session key (%d)\n"), (int)slen); return G10ERR_BAD_KEY; } hd = cipher_open( dek->algo, CIPHER_MODE_CFB, 1 ); cipher_setkey( hd, dek->key, dek->keylen ); cipher_setiv( hd, NULL, 0 ); cipher_decrypt( hd, seskey, seskey, slen ); cipher_close( hd ); /* now we replace the dek components with the real session key to decrypt the contents of the sequencing packet. */ dek->keylen=slen-1; dek->algo=seskey[0]; if(dek->keylen > DIM(dek->key)) BUG (); memcpy(dek->key, seskey + 1, dek->keylen); /*log_hexdump( "thekey", dek->key, dek->keylen );*/ return 0; } static void proc_symkey_enc( CTX c, PACKET *pkt ) { PKT_symkey_enc *enc; enc = pkt->pkt.symkey_enc; if (!enc) log_error ("invalid symkey encrypted packet\n"); else if(!c->dek) { int algo = enc->cipher_algo; const char *s = cipher_algo_to_string (algo); if(s) { if(!opt.quiet) { if(enc->seskeylen) log_info(_("%s encrypted session key\n"), s ); else log_info(_("%s encrypted data\n"), s ); } } else log_error(_("encrypted with unknown algorithm %d\n"), algo ); if(check_digest_algo(enc->s2k.hash_algo)) { log_error(_("passphrase generated with unknown digest" " algorithm %d\n"),enc->s2k.hash_algo); s=NULL; } c->last_was_session_key = 2; if(!s || opt.list_only) goto leave; if(opt.override_session_key) { c->dek = xmalloc_clear( sizeof *c->dek ); if(get_override_session_key(c->dek, opt.override_session_key)) { xfree(c->dek); c->dek = NULL; } } else { int canceled; c->dek = passphrase_to_dek (NULL, 0, algo, &enc->s2k, 0, NULL, &canceled); if (canceled) { /* For unknown reasons passphrase_to_dek does only return NULL if a new passphrase has been requested and has not been repeated correctly. Thus even with a cancel requested (by means of the gpg-agent) it won't return NULL but an empty passphrase. We take the most conservative approach for now and work around it right here. */ xfree (c->dek); c->dek = NULL; } if(c->dek) { c->dek->symmetric=1; /* FIXME: This doesn't work perfectly if a symmetric key comes before a public key in the message - if the user doesn't know the passphrase, then there is a chance that the "decrypted" algorithm will happen to be a valid one, which will make the returned dek appear valid, so we won't try any public keys that come later. */ if(enc->seskeylen) { if(symkey_decrypt_seskey(c->dek, enc->seskey, enc->seskeylen)) { xfree(c->dek); c->dek=NULL; } } else c->dek->algo_info_printed = 1; } } } leave: c->symkeys++; free_packet(pkt); } static void proc_pubkey_enc( CTX c, PACKET *pkt ) { PKT_pubkey_enc *enc; int result = 0; /* check whether the secret key is available and store in this case */ c->last_was_session_key = 1; enc = pkt->pkt.pubkey_enc; /*printf("enc: encrypted by a pubkey with keyid %08lX\n", enc->keyid[1] );*/ /* Hmmm: why do I have this algo check here - anyway there is * function to check it. */ if( opt.verbose ) log_info(_("public key is %s\n"), keystr(enc->keyid) ); if( is_status_enabled() ) { char buf[50]; sprintf(buf, "%08lX%08lX %d 0", (ulong)enc->keyid[0], (ulong)enc->keyid[1], enc->pubkey_algo ); write_status_text( STATUS_ENC_TO, buf ); } if( !opt.list_only && opt.override_session_key ) { /* It does not make much sense to store the session key in * secure memory because it has already been passed on the * command line and the GCHQ knows about it. */ c->dek = xmalloc_clear( sizeof *c->dek ); result = get_override_session_key ( c->dek, opt.override_session_key ); if ( result ) { xfree(c->dek); c->dek = NULL; } } else if( enc->pubkey_algo == PUBKEY_ALGO_ELGAMAL_E || enc->pubkey_algo == PUBKEY_ALGO_RSA || enc->pubkey_algo == PUBKEY_ALGO_RSA_E || (RFC2440 && enc->pubkey_algo == PUBKEY_ALGO_ELGAMAL)) { /* Note that we also allow type 20 Elgamal keys for decryption. There are still a couple of those keys in active use as a subkey. */ /* FIXME: Store this all in a list and process it later so that we can prioritize what key to use. This gives a better user experience if wildcard keyids are used. */ if ( !c->dek && ((!enc->keyid[0] && !enc->keyid[1]) || opt.try_all_secrets || !seckey_available( enc->keyid )) ) { if( opt.list_only ) result = -1; else { c->dek = xmalloc_secure_clear( sizeof *c->dek ); if( (result = get_session_key( enc, c->dek )) ) { /* error: delete the DEK */ xfree(c->dek); c->dek = NULL; } } } else result = G10ERR_NO_SECKEY; } else result = G10ERR_PUBKEY_ALGO; if( result == -1 ) ; else { /* store it for later display */ struct kidlist_item *x = xmalloc( sizeof *x ); x->kid[0] = enc->keyid[0]; x->kid[1] = enc->keyid[1]; x->pubkey_algo = enc->pubkey_algo; x->reason = result; x->next = c->pkenc_list; c->pkenc_list = x; if( !result && opt.verbose > 1 ) log_info( _("public key encrypted data: good DEK\n") ); } free_packet(pkt); } /**************** * Print the list of public key encrypted packets which we could * not decrypt. */ static void print_pkenc_list( struct kidlist_item *list, int failed ) { for( ; list; list = list->next ) { PKT_public_key *pk; const char *algstr; if ( failed && !list->reason ) continue; if ( !failed && list->reason ) continue; algstr = pubkey_algo_to_string( list->pubkey_algo ); pk = xmalloc_clear( sizeof *pk ); if( !algstr ) algstr = "[?]"; pk->pubkey_algo = list->pubkey_algo; if( !get_pubkey( pk, list->kid ) ) { char *p; log_info( _("encrypted with %u-bit %s key, ID %s, created %s\n"), nbits_from_pk( pk ), algstr, keystr_from_pk(pk), strtimestamp(pk->timestamp) ); p=get_user_id_native(list->kid); fprintf(log_stream(),_(" \"%s\"\n"),p); xfree(p); } else log_info(_("encrypted with %s key, ID %s\n"), algstr,keystr(list->kid)); free_public_key( pk ); if( list->reason == G10ERR_NO_SECKEY ) { if( is_status_enabled() ) { char buf[20]; sprintf(buf,"%08lX%08lX", (ulong)list->kid[0], (ulong)list->kid[1] ); write_status_text( STATUS_NO_SECKEY, buf ); } } else if (list->reason) { log_info(_("public key decryption failed: %s\n"), g10_errstr(list->reason)); if (is_status_enabled ()) { char buf[20+30]; snprintf (buf, sizeof buf, "pkdecrypt_failed %d", list->reason); write_status_text (STATUS_ERROR, buf); } } } } static void proc_encrypted( CTX c, PACKET *pkt ) { int result = 0; if (!opt.quiet) { if(c->symkeys>1) log_info(_("encrypted with %lu passphrases\n"),c->symkeys); else if(c->symkeys==1) log_info(_("encrypted with 1 passphrase\n")); print_pkenc_list ( c->pkenc_list, 1 ); print_pkenc_list ( c->pkenc_list, 0 ); } /* FIXME: Figure out the session key by looking at all pkenc packets. */ write_status( STATUS_BEGIN_DECRYPTION ); /*log_debug("dat: %sencrypted data\n", c->dek?"":"conventional ");*/ if( opt.list_only ) result = -1; else if( !c->dek && !c->last_was_session_key ) { int algo; STRING2KEY s2kbuf; STRING2KEY *s2k = NULL; int canceled; if(opt.override_session_key) { c->dek = xmalloc_clear( sizeof *c->dek ); result=get_override_session_key(c->dek, opt.override_session_key); if(result) { xfree(c->dek); c->dek = NULL; } } else { /* assume this is old style conventional encrypted data */ if ( (algo = opt.def_cipher_algo)) log_info (_("assuming %s encrypted data\n"), cipher_algo_to_string(algo)); else if ( check_cipher_algo(CIPHER_ALGO_IDEA) ) { algo = opt.def_cipher_algo; if (!algo) algo = opt.s2k_cipher_algo; log_info (_("IDEA cipher unavailable, " "optimistically attempting to use %s instead\n"), cipher_algo_to_string(algo)); } else { algo = CIPHER_ALGO_IDEA; if (!opt.s2k_digest_algo) { /* If no digest is given we assume MD5 */ s2kbuf.mode = 0; s2kbuf.hash_algo = DIGEST_ALGO_MD5; s2k = &s2kbuf; } log_info (_("assuming %s encrypted data\n"), "IDEA"); } c->dek = passphrase_to_dek ( NULL, 0, algo, s2k, 0, NULL,&canceled); if (c->dek) c->dek->algo_info_printed = 1; else if (canceled) result = G10ERR_CANCELED; else result = G10ERR_PASSPHRASE; } } else if( !c->dek ) result = G10ERR_NO_SECKEY; if( !result ) result = decrypt_data( c, pkt->pkt.encrypted, c->dek ); if( result == -1 ) ; else if( !result || (result==G10ERR_BAD_SIGN && opt.ignore_mdc_error)) { write_status( STATUS_DECRYPTION_OKAY ); if( opt.verbose > 1 ) log_info(_("decryption okay\n")); if( pkt->pkt.encrypted->mdc_method && !result ) write_status( STATUS_GOODMDC ); else if(!opt.no_mdc_warn) log_info (_("WARNING: message was not integrity protected\n")); } else if( result == G10ERR_BAD_SIGN ) { log_error(_("WARNING: encrypted message has been manipulated!\n")); write_status( STATUS_BADMDC ); write_status( STATUS_DECRYPTION_FAILED ); } else { write_status( STATUS_DECRYPTION_FAILED ); log_error(_("decryption failed: %s\n"), g10_errstr(result)); /* Hmmm: does this work when we have encrypted using multiple * ways to specify the session key (symmmetric and PK)*/ } xfree(c->dek); c->dek = NULL; free_packet(pkt); c->last_was_session_key = 0; write_status( STATUS_END_DECRYPTION ); } static void proc_plaintext( CTX c, PACKET *pkt ) { PKT_plaintext *pt = pkt->pkt.plaintext; int any, clearsig, only_md5, rc; KBNODE n; literals_seen++; if( pt->namelen == 8 && !memcmp( pt->name, "_CONSOLE", 8 ) ) log_info(_("NOTE: sender requested \"for-your-eyes-only\"\n")); else if( opt.verbose ) log_info(_("original file name='%.*s'\n"), pt->namelen, pt->name); free_md_filter_context( &c->mfx ); c->mfx.md = md_open( 0, 0); /* fixme: we may need to push the textfilter if we have sigclass 1 * and no armoring - Not yet tested * Hmmm, why don't we need it at all if we have sigclass 1 * Should we assume that plaintext in mode 't' has always sigclass 1?? * See: Russ Allbery's mail 1999-02-09 */ any = clearsig = only_md5 = 0; for(n=c->list; n; n = n->next ) { if( n->pkt->pkttype == PKT_ONEPASS_SIG ) { /* For the onepass signature case */ if( n->pkt->pkt.onepass_sig->digest_algo ) { md_enable( c->mfx.md, n->pkt->pkt.onepass_sig->digest_algo ); if( !any && n->pkt->pkt.onepass_sig->digest_algo == DIGEST_ALGO_MD5 ) only_md5 = 1; else only_md5 = 0; any = 1; } if( n->pkt->pkt.onepass_sig->sig_class != 0x01 ) only_md5 = 0; } else if( n->pkt->pkttype == PKT_GPG_CONTROL && n->pkt->pkt.gpg_control->control == CTRLPKT_CLEARSIGN_START ) { /* For the clearsigned message case */ size_t datalen = n->pkt->pkt.gpg_control->datalen; const byte *data = n->pkt->pkt.gpg_control->data; /* check that we have at least the sigclass and one hash */ if ( datalen < 2 ) log_fatal("invalid control packet CTRLPKT_CLEARSIGN_START\n"); /* Note that we don't set the clearsig flag for not-dash-escaped * documents */ clearsig = (*data == 0x01); for( data++, datalen--; datalen; datalen--, data++ ) md_enable( c->mfx.md, *data ); any = 1; break; /* Stop here as one-pass signature packets are not expected. */ } else if(n->pkt->pkttype==PKT_SIGNATURE) { /* For the SIG+LITERAL case that PGP used to use. */ md_enable( c->mfx.md, n->pkt->pkt.signature->digest_algo ); any=1; } } if( !any && !opt.skip_verify ) { /* This is for the old GPG LITERAL+SIG case. It's not legal according to 2440, so hopefully it won't come up that often. There is no good way to specify what algorithms to use in that case, so these three are the historical answer. */ md_enable( c->mfx.md, DIGEST_ALGO_RMD160 ); md_enable( c->mfx.md, DIGEST_ALGO_SHA1 ); md_enable( c->mfx.md, DIGEST_ALGO_MD5 ); } if( opt.pgp2_workarounds && only_md5 && !opt.skip_verify ) { /* This is a kludge to work around a bug in pgp2. It does only * catch those mails which are armored. To catch the non-armored * pgp mails we could see whether there is the signature packet * in front of the plaintext. If someone needs this, send me a patch. */ c->mfx.md2 = md_open( DIGEST_ALGO_MD5, 0); } if ( DBG_HASHING ) { md_start_debug( c->mfx.md, "verify" ); if ( c->mfx.md2 ) md_start_debug( c->mfx.md2, "verify2" ); } rc=0; if(literals_seen>1) { log_info(_("WARNING: multiple plaintexts seen\n")); if(!opt.flags.allow_multiple_messages) { write_status_text (STATUS_ERROR, "proc_pkt.plaintext 89_BAD_DATA"); log_inc_errorcount(); rc=G10ERR_UNEXPECTED; } } if(!rc) { if ( c->pipemode.op == 'B' ) rc = handle_plaintext( pt, &c->mfx, 1, 0 ); else { rc = handle_plaintext( pt, &c->mfx, c->sigs_only, clearsig ); if( rc == G10ERR_CREATE_FILE && !c->sigs_only) { /* can't write output but we hash it anyway to * check the signature */ rc = handle_plaintext( pt, &c->mfx, 1, clearsig ); } } } if( rc ) log_error( "handle plaintext failed: %s\n", g10_errstr(rc)); free_packet(pkt); c->last_was_session_key = 0; /* We add a marker control packet instead of the plaintext packet. * This is so that we can later detect invalid packet sequences. */ n = new_kbnode (create_gpg_control (CTRLPKT_PLAINTEXT_MARK, NULL, 0)); if (c->list) add_kbnode (c->list, n); else c->list = n; } static int proc_compressed_cb( IOBUF a, void *info ) { return proc_signature_packets( info, a, ((CTX)info)->signed_data, ((CTX)info)->sigfilename ); } static int proc_encrypt_cb( IOBUF a, void *info ) { return proc_encryption_packets( info, a ); } static int proc_compressed( CTX c, PACKET *pkt ) { PKT_compressed *zd = pkt->pkt.compressed; int rc; if (c->sigs_only) rc = handle_compressed( c, zd, proc_compressed_cb, c ); else if( c->encrypt_only ) rc = handle_compressed( c, zd, proc_encrypt_cb, c ); else rc = handle_compressed( c, zd, NULL, NULL ); if( rc ) log_error("uncompressing failed: %s\n", g10_errstr(rc)); free_packet(pkt); c->last_was_session_key = 0; return rc; } /**************** * check the signature * Returns: 0 = valid signature or an error code */ static int do_check_sig( CTX c, KBNODE node, int *is_selfsig, int *is_expkey, int *is_revkey ) { PKT_signature *sig; MD_HANDLE md = NULL, md2 = NULL; int algo, rc; assert( node->pkt->pkttype == PKT_SIGNATURE ); if( is_selfsig ) *is_selfsig = 0; sig = node->pkt->pkt.signature; algo = sig->digest_algo; if( (rc=check_digest_algo(algo)) ) return rc; if( sig->sig_class == 0x00 ) { if( c->mfx.md ) md = md_copy( c->mfx.md ); else /* detached signature */ md = md_open( 0, 0 ); /* signature_check() will enable the md*/ } else if( sig->sig_class == 0x01 ) { /* how do we know that we have to hash the (already hashed) text * in canonical mode ??? (calculating both modes???) */ if( c->mfx.md ) { md = md_copy( c->mfx.md ); if( c->mfx.md2 ) md2 = md_copy( c->mfx.md2 ); } else { /* detached signature */ log_debug("Do we really need this here?"); md = md_open( 0, 0 ); /* signature_check() will enable the md*/ md2 = md_open( 0, 0 ); } } else if( (sig->sig_class&~3) == 0x10 || sig->sig_class == 0x18 || sig->sig_class == 0x1f || sig->sig_class == 0x20 || sig->sig_class == 0x28 || sig->sig_class == 0x30 ) { if( c->list->pkt->pkttype == PKT_PUBLIC_KEY || c->list->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { return check_key_signature( c->list, node, is_selfsig ); } else if( sig->sig_class == 0x20 ) { log_error (_("standalone revocation - " "use \"gpg --import\" to apply\n")); return G10ERR_NOT_PROCESSED; } else { log_error("invalid root packet for sigclass %02x\n", sig->sig_class); return G10ERR_SIG_CLASS; } } else return G10ERR_SIG_CLASS; rc = signature_check2( sig, md, NULL, is_expkey, is_revkey, NULL ); if( rc == G10ERR_BAD_SIGN && md2 ) rc = signature_check2( sig, md2, NULL, is_expkey, is_revkey, NULL ); md_close(md); md_close(md2); return rc; } static void print_userid( PACKET *pkt ) { if( !pkt ) BUG(); if( pkt->pkttype != PKT_USER_ID ) { printf("ERROR: unexpected packet type %d", pkt->pkttype ); return; } if( opt.with_colons ) { if(pkt->pkt.user_id->attrib_data) printf("%u %lu", pkt->pkt.user_id->numattribs, pkt->pkt.user_id->attrib_len); else print_string( stdout, pkt->pkt.user_id->name, pkt->pkt.user_id->len, ':'); } else print_utf8_string( stdout, pkt->pkt.user_id->name, pkt->pkt.user_id->len ); } /**************** * List the certificate in a user friendly way */ static void list_node( CTX c, KBNODE node ) { int any=0; int mainkey; if( !node ) ; else if( (mainkey = (node->pkt->pkttype == PKT_PUBLIC_KEY) ) || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { PKT_public_key *pk = node->pkt->pkt.public_key; if( opt.with_colons ) { u32 keyid[2]; keyid_from_pk( pk, keyid ); if( mainkey ) c->trustletter = opt.fast_list_mode? 0 : get_validity_info( pk, NULL ); printf("%s:", mainkey? "pub":"sub" ); if( c->trustletter ) putchar( c->trustletter ); printf(":%u:%d:%08lX%08lX:%s:%s::", nbits_from_pk( pk ), pk->pubkey_algo, (ulong)keyid[0],(ulong)keyid[1], colon_datestr_from_pk( pk ), colon_strtime (pk->expiredate) ); if( mainkey && !opt.fast_list_mode ) putchar( get_ownertrust_info (pk) ); putchar(':'); if( node->next && node->next->pkt->pkttype == PKT_RING_TRUST) { putchar('\n'); any=1; if( opt.fingerprint ) print_fingerprint( pk, NULL, 0 ); printf("rtv:1:%u:\n", node->next->pkt->pkt.ring_trust->trustval ); } } else printf("%s %4u%c/%s %s%s", mainkey? "pub":"sub", nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), keystr_from_pk( pk ), datestr_from_pk( pk ), mainkey?" ":""); if( mainkey ) { /* and now list all userids with their signatures */ for( node = node->next; node; node = node->next ) { if( node->pkt->pkttype == PKT_SIGNATURE ) { if( !any ) { if( node->pkt->pkt.signature->sig_class == 0x20 ) puts("[revoked]"); else putchar('\n'); any = 1; } list_node(c, node ); } else if( node->pkt->pkttype == PKT_USER_ID ) { if( any ) { if( opt.with_colons ) printf("%s:::::::::", node->pkt->pkt.user_id->attrib_data?"uat":"uid"); else printf( "uid%*s", 28, "" ); } print_userid( node->pkt ); if( opt.with_colons ) putchar(':'); putchar('\n'); if( opt.fingerprint && !any ) print_fingerprint( pk, NULL, 0 ); if( opt.with_colons && node->next && node->next->pkt->pkttype == PKT_RING_TRUST ) { printf("rtv:2:%u:\n", node->next->pkt->pkt.ring_trust? node->next->pkt->pkt.ring_trust->trustval : 0); } any=1; } else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { if( !any ) { putchar('\n'); any = 1; } list_node(c, node ); } } } else { /* of subkey */ if( pk->is_revoked ) { printf(" ["); printf(_("revoked: %s"),revokestr_from_pk(pk)); printf("]"); } else if( pk->expiredate ) { printf(" ["); printf(_("expires: %s"),expirestr_from_pk(pk)); printf("]"); } } if( !any ) putchar('\n'); if( !mainkey && opt.fingerprint > 1 ) print_fingerprint( pk, NULL, 0 ); } else if( (mainkey = (node->pkt->pkttype == PKT_SECRET_KEY) ) || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *sk = node->pkt->pkt.secret_key; if( opt.with_colons ) { u32 keyid[2]; keyid_from_sk( sk, keyid ); printf("%s::%u:%d:%08lX%08lX:%s:%s:::", mainkey? "sec":"ssb", nbits_from_sk( sk ), sk->pubkey_algo, (ulong)keyid[0],(ulong)keyid[1], colon_datestr_from_sk( sk ), colon_strtime (sk->expiredate) /* fixme: add LID */ ); } else printf("%s %4u%c/%s %s ", mainkey? "sec":"ssb", nbits_from_sk( sk ), pubkey_letter( sk->pubkey_algo ), keystr_from_sk( sk ), datestr_from_sk( sk )); if( mainkey ) { /* and now list all userids with their signatures */ for( node = node->next; node; node = node->next ) { if( node->pkt->pkttype == PKT_SIGNATURE ) { if( !any ) { if( node->pkt->pkt.signature->sig_class == 0x20 ) puts("[revoked]"); else putchar('\n'); any = 1; } list_node(c, node ); } else if( node->pkt->pkttype == PKT_USER_ID ) { if( any ) { if( opt.with_colons ) printf("%s:::::::::", node->pkt->pkt.user_id->attrib_data?"uat":"uid"); else printf( "uid%*s", 28, "" ); } print_userid( node->pkt ); if( opt.with_colons ) putchar(':'); putchar('\n'); if( opt.fingerprint && !any ) print_fingerprint( NULL, sk, 0 ); any=1; } else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) { if( !any ) { putchar('\n'); any = 1; } list_node(c, node ); } } } if( !any ) putchar('\n'); if( !mainkey && opt.fingerprint > 1 ) print_fingerprint( NULL, sk, 0 ); } else if( node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; int is_selfsig = 0; int rc2=0; size_t n; char *p; int sigrc = ' '; if( !opt.verbose ) return; if( sig->sig_class == 0x20 || sig->sig_class == 0x30 ) fputs("rev", stdout); else fputs("sig", stdout); if( opt.check_sigs ) { fflush(stdout); switch( (rc2=do_check_sig( c, node, &is_selfsig, NULL, NULL )) ) { case 0: sigrc = '!'; break; case G10ERR_BAD_SIGN: sigrc = '-'; break; case G10ERR_NO_PUBKEY: case G10ERR_UNU_PUBKEY: sigrc = '?'; break; default: sigrc = '%'; break; } } else { /* check whether this is a self signature */ u32 keyid[2]; if( c->list->pkt->pkttype == PKT_PUBLIC_KEY || c->list->pkt->pkttype == PKT_SECRET_KEY ) { if( c->list->pkt->pkttype == PKT_PUBLIC_KEY ) keyid_from_pk( c->list->pkt->pkt.public_key, keyid ); else keyid_from_sk( c->list->pkt->pkt.secret_key, keyid ); if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) is_selfsig = 1; } } if( opt.with_colons ) { putchar(':'); if( sigrc != ' ' ) putchar(sigrc); printf("::%d:%08lX%08lX:%s:%s:", sig->pubkey_algo, (ulong)sig->keyid[0], (ulong)sig->keyid[1], colon_datestr_from_sig(sig), colon_expirestr_from_sig(sig)); if(sig->trust_depth || sig->trust_value) printf("%d %d",sig->trust_depth,sig->trust_value); printf(":"); if(sig->trust_regexp) print_string(stdout,sig->trust_regexp, strlen(sig->trust_regexp),':'); printf(":"); } else printf("%c %s %s ", sigrc, keystr(sig->keyid), datestr_from_sig(sig)); if( sigrc == '%' ) printf("[%s] ", g10_errstr(rc2) ); else if( sigrc == '?' ) ; else if( is_selfsig ) { if( opt.with_colons ) putchar(':'); fputs( sig->sig_class == 0x18? "[keybind]":"[selfsig]", stdout); if( opt.with_colons ) putchar(':'); } else if( !opt.fast_list_mode ) { p = get_user_id( sig->keyid, &n ); print_string( stdout, p, n, opt.with_colons ); xfree(p); } if( opt.with_colons ) printf(":%02x%c:", sig->sig_class, sig->flags.exportable?'x':'l'); putchar('\n'); } else log_error("invalid node with packet of type %d\n", node->pkt->pkttype); } int proc_packets( void *anchor, IOBUF a ) { int rc; CTX c = xmalloc_clear( sizeof *c ); c->anchor = anchor; rc = do_proc_packets( c, a ); xfree( c ); return rc; } int proc_signature_packets( void *anchor, IOBUF a, STRLIST signedfiles, const char *sigfilename ) { CTX c = xmalloc_clear( sizeof *c ); int rc; c->anchor = anchor; c->sigs_only = 1; c->signed_data = signedfiles; c->sigfilename = sigfilename; rc = do_proc_packets( c, a ); /* If we have not encountered any signature we print an error messages, send a NODATA status back and return an error code. Using log_error is required because verify_files does not check error codes for each file but we want to terminate the process with an error. */ if (!rc && !c->any_sig_seen) { write_status_text (STATUS_NODATA, "4"); log_error (_("no signature found\n")); rc = G10ERR_NO_DATA; } /* Propagate the signature seen flag upward. Do this only on success so that we won't issue the nodata status several times. */ if (!rc && c->anchor && c->any_sig_seen) c->anchor->any_sig_seen = 1; xfree( c ); return rc; } int proc_encryption_packets( void *anchor, IOBUF a ) { CTX c = xmalloc_clear( sizeof *c ); int rc; c->anchor = anchor; c->encrypt_only = 1; rc = do_proc_packets( c, a ); xfree( c ); return rc; } static int check_nesting (CTX c) { int level; for (level = 0; c; c = c->anchor) level++; if (level > MAX_NESTING_DEPTH) { log_error ("input data with too deeply nested packets\n"); write_status_text (STATUS_UNEXPECTED, "1"); return G10ERR_UNEXPECTED; } return 0; } static int do_proc_packets( CTX c, IOBUF a ) { PACKET *pkt; int rc = 0; int any_data = 0; int newpkt; rc = check_nesting (c); if (rc) return rc; pkt = xmalloc( sizeof *pkt ); c->iobuf = a; init_packet(pkt); while( (rc=parse_packet(a, pkt)) != -1 ) { any_data = 1; if( rc ) { free_packet(pkt); /* stop processing when an invalid packet has been encountered * but don't do so when we are doing a --list-packets. */ if( rc == G10ERR_INVALID_PACKET && opt.list_packets != 2 ) break; continue; } newpkt = -1; if( opt.list_packets ) { switch( pkt->pkttype ) { case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break; case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break; case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break; case PKT_COMPRESSED: rc = proc_compressed( c, pkt ); break; default: newpkt = 0; break; } } else if( c->sigs_only ) { switch( pkt->pkttype ) { case PKT_PUBLIC_KEY: case PKT_SECRET_KEY: case PKT_USER_ID: case PKT_SYMKEY_ENC: case PKT_PUBKEY_ENC: case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: write_status_text( STATUS_UNEXPECTED, "0" ); rc = G10ERR_UNEXPECTED; goto leave; case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break; case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break; case PKT_COMPRESSED: rc = proc_compressed( c, pkt ); break; case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break; case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break; default: newpkt = 0; break; } } else if( c->encrypt_only ) { switch( pkt->pkttype ) { case PKT_PUBLIC_KEY: case PKT_SECRET_KEY: case PKT_USER_ID: write_status_text( STATUS_UNEXPECTED, "0" ); rc = G10ERR_UNEXPECTED; goto leave; case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break; case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break; case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break; case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break; case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break; case PKT_COMPRESSED: rc = proc_compressed( c, pkt ); break; case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break; case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break; default: newpkt = 0; break; } } else { switch( pkt->pkttype ) { case PKT_PUBLIC_KEY: case PKT_SECRET_KEY: release_list( c ); c->list = new_kbnode( pkt ); newpkt = 1; break; case PKT_PUBLIC_SUBKEY: case PKT_SECRET_SUBKEY: newpkt = add_subkey( c, pkt ); break; case PKT_USER_ID: newpkt = add_user_id( c, pkt ); break; case PKT_SIGNATURE: newpkt = add_signature( c, pkt ); break; case PKT_PUBKEY_ENC: proc_pubkey_enc( c, pkt ); break; case PKT_SYMKEY_ENC: proc_symkey_enc( c, pkt ); break; case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: proc_encrypted( c, pkt ); break; case PKT_PLAINTEXT: proc_plaintext( c, pkt ); break; case PKT_COMPRESSED: rc = proc_compressed( c, pkt ); break; case PKT_ONEPASS_SIG: newpkt = add_onepass_sig( c, pkt ); break; case PKT_GPG_CONTROL: newpkt = add_gpg_control(c, pkt); break; case PKT_RING_TRUST: newpkt = add_ring_trust( c, pkt ); break; default: newpkt = 0; break; } } if (rc) goto leave; /* This is a very ugly construct and frankly, I don't remember why * I used it. Adding the MDC check here is a hack. * The right solution is to initiate another context for encrypted * packet and not to reuse the current one ... It works right * when there is a compression packet inbetween which adds just * an extra layer. * Hmmm: Rewrite this whole module here?? */ if( pkt->pkttype != PKT_SIGNATURE && pkt->pkttype != PKT_MDC ) c->have_data = pkt->pkttype == PKT_PLAINTEXT; if( newpkt == -1 ) ; else if( newpkt ) { pkt = xmalloc( sizeof *pkt ); init_packet(pkt); } else free_packet(pkt); if ( c->pipemode.stop_now ) { /* we won't get an EOF in pipemode, so we have to * break the loop here */ rc = -1; break; } } if( rc == G10ERR_INVALID_PACKET ) write_status_text( STATUS_NODATA, "3" ); if( any_data ) rc = 0; else if( rc == -1 ) write_status_text( STATUS_NODATA, "2" ); leave: release_list( c ); xfree(c->dek); free_packet( pkt ); xfree( pkt ); free_md_filter_context( &c->mfx ); return rc; } /* Helper for pka_uri_from_sig to parse the to-be-verified address out of the notation data. */ static pka_info_t * get_pka_address (PKT_signature *sig) { pka_info_t *pka = NULL; struct notation *nd,*notation; notation=sig_to_notation(sig); for(nd=notation;nd;nd=nd->next) { if(strcmp(nd->name,"pka-address@gnupg.org")!=0) continue; /* Not the notation we want. */ /* For now we only use the first valid PKA notation. In future we might want to keep additional PKA notations in a linked list. */ if (is_valid_mailbox (nd->value)) { pka = xmalloc (sizeof *pka + strlen(nd->value)); pka->valid = 0; pka->checked = 0; pka->uri = NULL; strcpy (pka->email, nd->value); break; } } free_notation(notation); return pka; } /* Return the URI from a DNS PKA record. If this record has already be retrieved for the signature we merely return it; if not we go out and try to get that DNS record. */ static const char * pka_uri_from_sig (PKT_signature *sig) { if (!sig->flags.pka_tried) { assert (!sig->pka_info); sig->flags.pka_tried = 1; sig->pka_info = get_pka_address (sig); if (sig->pka_info) { char *uri; uri = get_pka_info (sig->pka_info->email, sig->pka_info->fpr, sizeof sig->pka_info->fpr); if (uri) { sig->pka_info->valid = 1; if (!*uri) xfree (uri); else sig->pka_info->uri = uri; } } } return sig->pka_info? sig->pka_info->uri : NULL; } static int check_sig_and_print( CTX c, KBNODE node ) { PKT_signature *sig = node->pkt->pkt.signature; const char *astr; int rc, is_expkey=0, is_revkey=0; if (opt.skip_verify) { log_info(_("signature verification suppressed\n")); return 0; } /* Check that the message composition is valid. Per RFC-2440bis (-15) allowed: S{1,n} -- detached signature. S{1,n} P -- old style PGP2 signature O{1,n} P S{1,n} -- standard OpenPGP signature. C P S{1,n} -- cleartext signature. O = One-Pass Signature packet. S = Signature packet. P = OpenPGP Message packet (Encrypted | Compressed | Literal) (Note that the current rfc2440bis draft also allows for a signed message but that does not work as it introduces ambiguities.) We keep track of these packages using the marker packet CTRLPKT_PLAINTEXT_MARK. C = Marker packet for cleartext signatures. We reject all other messages. Actually we are calling this too often, i.e. for verification of each message but better have some duplicate work than to silently introduce a bug here. */ { KBNODE n; int n_onepass, n_sig; /* log_debug ("checking signature packet composition\n"); */ /* dump_kbnode (c->list); */ n = c->list; assert (n); if ( n->pkt->pkttype == PKT_SIGNATURE ) { /* This is either "S{1,n}" case (detached signature) or "S{1,n} P" (old style PGP2 signature). */ for (n = n->next; n; n = n->next) if (n->pkt->pkttype != PKT_SIGNATURE) break; if (!n) ; /* Okay, this is a detached signature. */ else if (n->pkt->pkttype == PKT_GPG_CONTROL && (n->pkt->pkt.gpg_control->control == CTRLPKT_PLAINTEXT_MARK) ) { if (n->next) goto ambiguous; /* We only allow one P packet. */ } else goto ambiguous; } else if (n->pkt->pkttype == PKT_ONEPASS_SIG) { /* This is the "O{1,n} P S{1,n}" case (standard signature). */ for (n_onepass=1, n = n->next; n && n->pkt->pkttype == PKT_ONEPASS_SIG; n = n->next) n_onepass++; if (!n || !(n->pkt->pkttype == PKT_GPG_CONTROL && (n->pkt->pkt.gpg_control->control == CTRLPKT_PLAINTEXT_MARK))) goto ambiguous; for (n_sig=0, n = n->next; n && n->pkt->pkttype == PKT_SIGNATURE; n = n->next) n_sig++; if (!n_sig) goto ambiguous; /* If we wanted to disallow multiple sig verification, we'd do something like this: if (n && !opt.allow_multisig_verification) goto ambiguous; However, now that we have --allow-multiple-messages, this can stay allowable as we can't get here unless multiple messages (i.e. multiple literals) are allowed. */ if (n_onepass != n_sig) { log_info ("number of one-pass packets does not match " "number of signature packets\n"); goto ambiguous; } } else if (n->pkt->pkttype == PKT_GPG_CONTROL && n->pkt->pkt.gpg_control->control == CTRLPKT_CLEARSIGN_START ) { /* This is the "C P S{1,n}" case (clear text signature). */ n = n->next; if (!n || !(n->pkt->pkttype == PKT_GPG_CONTROL && (n->pkt->pkt.gpg_control->control == CTRLPKT_PLAINTEXT_MARK))) goto ambiguous; for (n_sig=0, n = n->next; n && n->pkt->pkttype == PKT_SIGNATURE; n = n->next) n_sig++; if (n || !n_sig) goto ambiguous; } else { ambiguous: log_error(_("can't handle this ambiguous signature data\n")); return 0; } } /* (Indendation below not yet changed to GNU style.) */ astr = pubkey_algo_to_string( sig->pubkey_algo ); if(keystrlen()>8) { log_info(_("Signature made %s\n"),asctimestamp(sig->timestamp)); log_info(_(" using %s key %s\n"), astr? astr: "?",keystr(sig->keyid)); } else log_info(_("Signature made %s using %s key ID %s\n"), asctimestamp(sig->timestamp), astr? astr: "?", keystr(sig->keyid)); rc = do_check_sig(c, node, NULL, &is_expkey, &is_revkey ); /* If the key isn't found, check for a preferred keyserver */ if(rc==G10ERR_NO_PUBKEY && sig->flags.pref_ks) { const byte *p; int seq=0; size_t n; while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_PREF_KS,&n,&seq,NULL))) { /* According to my favorite copy editor, in English grammar, you say "at" if the key is located on a web page, but "from" if it is located on a keyserver. I'm not going to even try to make two strings here :) */ log_info(_("Key available at: ") ); print_utf8_string( log_stream(), p, n ); putc( '\n', log_stream() ); if(opt.keyserver_options.options&KEYSERVER_AUTO_KEY_RETRIEVE && opt.keyserver_options.options&KEYSERVER_HONOR_KEYSERVER_URL) { struct keyserver_spec *spec; spec=parse_preferred_keyserver(sig); if(spec) { int res; glo_ctrl.in_auto_key_retrieve++; res=keyserver_import_keyid(sig->keyid,spec); glo_ctrl.in_auto_key_retrieve--; if(!res) rc=do_check_sig(c, node, NULL, &is_expkey, &is_revkey ); free_keyserver_spec(spec); if(!rc) break; } } } } /* If the preferred keyserver thing above didn't work, our second try is to use the URI from a DNS PKA record. */ if ( rc == G10ERR_NO_PUBKEY && opt.keyserver_options.options&KEYSERVER_AUTO_KEY_RETRIEVE && opt.keyserver_options.options&KEYSERVER_HONOR_PKA_RECORD) { const char *uri = pka_uri_from_sig (sig); if (uri) { /* FIXME: We might want to locate the key using the fingerprint instead of the keyid. */ int res; struct keyserver_spec *spec; spec = parse_keyserver_uri (uri, 1, NULL, 0); if (spec) { glo_ctrl.in_auto_key_retrieve++; res = keyserver_import_keyid (sig->keyid, spec); glo_ctrl.in_auto_key_retrieve--; free_keyserver_spec (spec); if (!res) rc = do_check_sig(c, node, NULL, &is_expkey, &is_revkey ); } } } /* If the preferred keyserver thing above didn't work and we got no information from the DNS PKA, this is a third try. */ if( rc == G10ERR_NO_PUBKEY && opt.keyserver && opt.keyserver_options.options&KEYSERVER_AUTO_KEY_RETRIEVE) { int res; glo_ctrl.in_auto_key_retrieve++; res=keyserver_import_keyid ( sig->keyid, opt.keyserver ); glo_ctrl.in_auto_key_retrieve--; if(!res) rc = do_check_sig(c, node, NULL, &is_expkey, &is_revkey ); } if( !rc || rc == G10ERR_BAD_SIGN ) { KBNODE un, keyblock; int count=0, statno; char keyid_str[50]; PKT_public_key *pk=NULL; if(rc) statno=STATUS_BADSIG; else if(sig->flags.expired) statno=STATUS_EXPSIG; else if(is_expkey) statno=STATUS_EXPKEYSIG; else if(is_revkey) statno=STATUS_REVKEYSIG; else statno=STATUS_GOODSIG; keyblock = get_pubkeyblock( sig->keyid ); sprintf (keyid_str, "%08lX%08lX [uncertain] ", (ulong)sig->keyid[0], (ulong)sig->keyid[1]); /* find and print the primary user ID */ for( un=keyblock; un; un = un->next ) { char *p; int valid; if(un->pkt->pkttype==PKT_PUBLIC_KEY) { pk=un->pkt->pkt.public_key; continue; } if( un->pkt->pkttype != PKT_USER_ID ) continue; if ( !un->pkt->pkt.user_id->created ) continue; if ( un->pkt->pkt.user_id->is_revoked ) continue; if ( un->pkt->pkt.user_id->is_expired ) continue; if ( !un->pkt->pkt.user_id->is_primary ) continue; /* We want the textual primary user ID here */ if ( un->pkt->pkt.user_id->attrib_data ) continue; assert(pk); /* Get it before we print anything to avoid interrupting the output with the "please do a --check-trustdb" line. */ valid=get_validity(pk,un->pkt->pkt.user_id); keyid_str[17] = 0; /* cut off the "[uncertain]" part */ write_status_text_and_buffer (statno, keyid_str, un->pkt->pkt.user_id->name, un->pkt->pkt.user_id->len, -1 ); p=utf8_to_native(un->pkt->pkt.user_id->name, un->pkt->pkt.user_id->len,0); if(rc) log_info(_("BAD signature from \"%s\""),p); else if(sig->flags.expired) log_info(_("Expired signature from \"%s\""),p); else log_info(_("Good signature from \"%s\""),p); xfree(p); if(opt.verify_options&VERIFY_SHOW_UID_VALIDITY) fprintf(log_stream()," [%s]\n",trust_value_to_string(valid)); else fputs("\n", log_stream() ); count++; } if( !count ) { /* just in case that we have no valid textual userid */ char *p; /* Try for an invalid textual userid */ for( un=keyblock; un; un = un->next ) { if( un->pkt->pkttype == PKT_USER_ID && !un->pkt->pkt.user_id->attrib_data ) break; } /* Try for any userid at all */ if(!un) { for( un=keyblock; un; un = un->next ) { if( un->pkt->pkttype == PKT_USER_ID ) break; } } if (opt.trust_model==TM_ALWAYS || !un) keyid_str[17] = 0; /* cut off the "[uncertain]" part */ write_status_text_and_buffer (statno, keyid_str, un? un->pkt->pkt.user_id->name:"[?]", un? un->pkt->pkt.user_id->len:3, -1 ); if(un) p=utf8_to_native(un->pkt->pkt.user_id->name, un->pkt->pkt.user_id->len,0); else p=xstrdup("[?]"); if(rc) log_info(_("BAD signature from \"%s\""),p); else if(sig->flags.expired) log_info(_("Expired signature from \"%s\""),p); else log_info(_("Good signature from \"%s\""),p); if (opt.trust_model!=TM_ALWAYS && un) { putc(' ', log_stream() ); fputs(_("[uncertain]"), log_stream() ); } fputs("\n", log_stream() ); } /* If we have a good signature and already printed * the primary user ID, print all the other user IDs */ if ( count && !rc && !(opt.verify_options&VERIFY_SHOW_PRIMARY_UID_ONLY) ) { char *p; for( un=keyblock; un; un = un->next ) { if( un->pkt->pkttype != PKT_USER_ID ) continue; if((un->pkt->pkt.user_id->is_revoked || un->pkt->pkt.user_id->is_expired) && !(opt.verify_options&VERIFY_SHOW_UNUSABLE_UIDS)) continue; /* Only skip textual primaries */ if ( un->pkt->pkt.user_id->is_primary && !un->pkt->pkt.user_id->attrib_data ) continue; if(un->pkt->pkt.user_id->attrib_data) { dump_attribs(un->pkt->pkt.user_id,pk,NULL); if(opt.verify_options&VERIFY_SHOW_PHOTOS) show_photos(un->pkt->pkt.user_id->attribs, un->pkt->pkt.user_id->numattribs, pk,NULL,un->pkt->pkt.user_id); } p=utf8_to_native(un->pkt->pkt.user_id->name, un->pkt->pkt.user_id->len,0); log_info(_(" aka \"%s\""),p); xfree(p); if(opt.verify_options&VERIFY_SHOW_UID_VALIDITY) { const char *valid; if(un->pkt->pkt.user_id->is_revoked) valid=_("revoked"); else if(un->pkt->pkt.user_id->is_expired) valid=_("expired"); else valid=trust_value_to_string(get_validity(pk, un->pkt-> pkt.user_id)); fprintf(log_stream()," [%s]\n",valid); } else fputs("\n", log_stream() ); } } release_kbnode( keyblock ); if( !rc ) { if(opt.verify_options&VERIFY_SHOW_POLICY_URLS) show_policy_url(sig,0,1); else show_policy_url(sig,0,2); if(opt.verify_options&VERIFY_SHOW_KEYSERVER_URLS) show_keyserver_url(sig,0,1); else show_keyserver_url(sig,0,2); if(opt.verify_options&VERIFY_SHOW_NOTATIONS) show_notation(sig,0,1, ((opt.verify_options&VERIFY_SHOW_STD_NOTATIONS)?1:0)+ ((opt.verify_options&VERIFY_SHOW_USER_NOTATIONS)?2:0)); else show_notation(sig,0,2,0); } if( !rc && is_status_enabled() ) { /* print a status response with the fingerprint */ PKT_public_key *vpk = xmalloc_clear( sizeof *vpk ); if( !get_pubkey( vpk, sig->keyid ) ) { byte array[MAX_FINGERPRINT_LEN], *p; char buf[MAX_FINGERPRINT_LEN*4+90], *bufp; size_t i, n; bufp = buf; fingerprint_from_pk( vpk, array, &n ); p = array; for(i=0; i < n ; i++, p++, bufp += 2) sprintf(bufp, "%02X", *p ); /* TODO: Replace the reserved '0' in the field below with bits for status flags (policy url, notation, etc.). Remember to make the buffer larger to match! */ sprintf(bufp, " %s %lu %lu %d 0 %d %d %02X ", strtimestamp( sig->timestamp ), (ulong)sig->timestamp,(ulong)sig->expiredate, sig->version,sig->pubkey_algo,sig->digest_algo, sig->sig_class); bufp = bufp + strlen (bufp); if (!vpk->is_primary) { u32 akid[2]; akid[0] = vpk->main_keyid[0]; akid[1] = vpk->main_keyid[1]; free_public_key (vpk); vpk = xmalloc_clear( sizeof *vpk ); if (get_pubkey (vpk, akid)) { /* impossible error, we simply return a zeroed out fpr */ n = MAX_FINGERPRINT_LEN < 20? MAX_FINGERPRINT_LEN : 20; memset (array, 0, n); } else fingerprint_from_pk( vpk, array, &n ); } p = array; for(i=0; i < n ; i++, p++, bufp += 2) sprintf(bufp, "%02X", *p ); write_status_text( STATUS_VALIDSIG, buf ); } free_public_key( vpk ); } if (!rc) { if(opt.verify_options&VERIFY_PKA_LOOKUPS) pka_uri_from_sig (sig); /* Make sure PKA info is available. */ rc = check_signatures_trust( sig ); } if(sig->flags.expired) { log_info(_("Signature expired %s\n"), asctimestamp(sig->expiredate)); rc=G10ERR_GENERAL; /* need a better error here? */ } else if(sig->expiredate) log_info(_("Signature expires %s\n"),asctimestamp(sig->expiredate)); if(opt.verbose) log_info(_("%s signature, digest algorithm %s\n"), sig->sig_class==0x00?_("binary"): sig->sig_class==0x01?_("textmode"):_("unknown"), digest_algo_to_string(sig->digest_algo)); if (!rc && !c->signed_data) { /* Signature is basically good but we test whether the deprecated command gpg --verify FILE.sig was used instead of gpg --verify FILE.sig FILE to verify a detached signature. If we figure out that a data file with a matching name exists, we print a warning. The problem is that the first form would also verify a standard signature. This behavior could be used to create a made up .sig file for a tarball by creating a standard signature from a valid detached signature packet (for example from a signed git tag). Then replace the sig file on the FTP server along with a changed tarball. Using the first form the verify command would correctly verify the signature but don't even consider the tarball. */ kbnode_t n; char *dfile; dfile = get_matching_datafile (c->sigfilename); if (dfile) { for (n = c->list; n; n = n->next) if (n->pkt->pkttype != PKT_SIGNATURE) break; if (n) { /* Not only signature packets in the tree thus this is not a detached signature. */ log_info (_("WARNING: not a detached signature; " "file '%s' was NOT verified!\n"), dfile); } xfree (dfile); } } if( rc ) g10_errors_seen = 1; if( opt.batch && rc ) g10_exit(1); } else { char buf[50]; sprintf(buf, "%08lX%08lX %d %d %02x %lu %d", (ulong)sig->keyid[0], (ulong)sig->keyid[1], sig->pubkey_algo, sig->digest_algo, sig->sig_class, (ulong)sig->timestamp, rc ); write_status_text( STATUS_ERRSIG, buf ); if( rc == G10ERR_NO_PUBKEY ) { buf[16] = 0; write_status_text( STATUS_NO_PUBKEY, buf ); } if( rc != G10ERR_NOT_PROCESSED ) log_error(_("Can't check signature: %s\n"), g10_errstr(rc) ); } return rc; } /**************** * Process the tree which starts at node */ static void proc_tree( CTX c, KBNODE node ) { KBNODE n1; int rc; if( opt.list_packets || opt.list_only ) return; /* we must skip our special plaintext marker packets here becuase they may be the root packet. These packets are only used in addionla checks and skipping them here doesn't matter */ while ( node && node->pkt->pkttype == PKT_GPG_CONTROL && node->pkt->pkt.gpg_control->control == CTRLPKT_PLAINTEXT_MARK ) { node = node->next; } if (!node) return; c->trustletter = ' '; if( node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { merge_keys_and_selfsig( node ); list_node( c, node ); } else if( node->pkt->pkttype == PKT_SECRET_KEY ) { merge_keys_and_selfsig( node ); list_node( c, node ); } else if( node->pkt->pkttype == PKT_ONEPASS_SIG ) { /* check all signatures */ if( !c->have_data ) { free_md_filter_context( &c->mfx ); /* prepare to create all requested message digests */ c->mfx.md = md_open(0, 0); /* fixme: why looking for the signature packet and not the one-pass packet? */ for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); ) { md_enable( c->mfx.md, n1->pkt->pkt.signature->digest_algo); } /* ask for file and hash it */ if( c->sigs_only ) { rc = hash_datafiles( c->mfx.md, NULL, c->signed_data, c->sigfilename, n1? (n1->pkt->pkt.onepass_sig->sig_class == 0x01):0 ); } else { rc = ask_for_detached_datafile( c->mfx.md, c->mfx.md2, iobuf_get_real_fname(c->iobuf), n1? (n1->pkt->pkt.onepass_sig->sig_class == 0x01):0 ); } if( rc ) { log_error("can't hash datafile: %s\n", g10_errstr(rc)); return; } } else if ( c->signed_data ) { log_error (_("not a detached signature\n") ); return; } for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); ) check_sig_and_print( c, n1 ); } else if( node->pkt->pkttype == PKT_GPG_CONTROL && node->pkt->pkt.gpg_control->control == CTRLPKT_CLEARSIGN_START ) { /* clear text signed message */ if( !c->have_data ) { log_error("cleartext signature without data\n" ); return; } else if ( c->signed_data ) { log_error (_("not a detached signature\n") ); return; } for( n1 = node; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )); ) check_sig_and_print( c, n1 ); } else if( node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; int multiple_ok=1; n1=find_next_kbnode(node, PKT_SIGNATURE); if(n1) { byte class=sig->sig_class; byte hash=sig->digest_algo; for(; n1; (n1 = find_next_kbnode(n1, PKT_SIGNATURE))) { /* We can't currently handle multiple signatures of different classes or digests (we'd pretty much have to run a different hash context for each), but if they are all the same, make an exception. */ if(n1->pkt->pkt.signature->sig_class!=class || n1->pkt->pkt.signature->digest_algo!=hash) { multiple_ok=0; log_info(_("WARNING: multiple signatures detected. " "Only the first will be checked.\n")); break; } } } if( sig->sig_class != 0x00 && sig->sig_class != 0x01 ) log_info(_("standalone signature of class 0x%02x\n"), sig->sig_class); else if( !c->have_data ) { /* detached signature */ free_md_filter_context( &c->mfx ); c->mfx.md = md_open(sig->digest_algo, 0); if( !opt.pgp2_workarounds ) ; else if( sig->digest_algo == DIGEST_ALGO_MD5 && is_RSA( sig->pubkey_algo ) ) { /* enable a workaround for a pgp2 bug */ c->mfx.md2 = md_open( DIGEST_ALGO_MD5, 0 ); } else if( sig->digest_algo == DIGEST_ALGO_SHA1 && sig->pubkey_algo == PUBKEY_ALGO_DSA && sig->sig_class == 0x01 ) { /* enable the workaround also for pgp5 when the detached * signature has been created in textmode */ c->mfx.md2 = md_open( sig->digest_algo, 0 ); } #if 0 /* workaround disabled */ /* Here we have another hack to work around a pgp 2 bug * It works by not using the textmode for detached signatures; * this will let the first signature check (on md) fail * but the second one (on md2) which adds an extra CR should * then produce the "correct" hash. This is very, very ugly * hack but it may help in some cases (and break others) */ /* c->mfx.md2? 0 :(sig->sig_class == 0x01) */ #endif if ( DBG_HASHING ) { md_start_debug( c->mfx.md, "verify" ); if ( c->mfx.md2 ) md_start_debug( c->mfx.md2, "verify2" ); } if( c->sigs_only ) { rc = hash_datafiles( c->mfx.md, c->mfx.md2, c->signed_data, c->sigfilename, (sig->sig_class == 0x01) ); } else { rc = ask_for_detached_datafile( c->mfx.md, c->mfx.md2, iobuf_get_real_fname(c->iobuf), (sig->sig_class == 0x01) ); } if( rc ) { log_error("can't hash datafile: %s\n", g10_errstr(rc)); return; } } else if ( c->signed_data ) { log_error (_("not a detached signature\n") ); return; } else if ( c->pipemode.op == 'B' ) ; /* this is a detached signature trough the pipemode handler */ else if (!opt.quiet) log_info(_("old style (PGP 2.x) signature\n")); if(multiple_ok) for( n1 = node; n1; (n1 = find_next_kbnode(n1, PKT_SIGNATURE )) ) check_sig_and_print( c, n1 ); else check_sig_and_print( c, node ); } else { dump_kbnode (c->list); log_error(_("invalid root packet detected in proc_tree()\n")); dump_kbnode (node); } } gnupg-1.4.20/g10/status.h0000644000175000017500000001147712635262326011743 00000000000000/* status.h * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, * 2004 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 3 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, see . */ #ifndef G10_STATUS_H #define G10_STATUS_H #define STATUS_ENTER 1 #define STATUS_LEAVE 2 #define STATUS_ABORT 3 #define STATUS_GOODSIG 4 #define STATUS_BADSIG 5 #define STATUS_ERRSIG 6 #define STATUS_BADARMOR 7 /* Not anymore used: STATUS_RSA_OR_IDEA 8 */ #define STATUS_KEYEXPIRED 9 #define STATUS_KEYREVOKED 10 #define STATUS_TRUST_UNDEFINED 11 #define STATUS_TRUST_NEVER 12 #define STATUS_TRUST_MARGINAL 13 #define STATUS_TRUST_FULLY 14 #define STATUS_TRUST_ULTIMATE 15 #define STATUS_SHM_INFO 16 #define STATUS_SHM_GET 17 #define STATUS_SHM_GET_BOOL 18 #define STATUS_SHM_GET_HIDDEN 19 #define STATUS_NEED_PASSPHRASE 20 #define STATUS_VALIDSIG 21 #define STATUS_SIG_ID 22 #define STATUS_ENC_TO 23 #define STATUS_NODATA 24 #define STATUS_BAD_PASSPHRASE 25 #define STATUS_NO_PUBKEY 26 #define STATUS_NO_SECKEY 27 #define STATUS_NEED_PASSPHRASE_SYM 28 #define STATUS_DECRYPTION_FAILED 29 #define STATUS_DECRYPTION_OKAY 30 #define STATUS_MISSING_PASSPHRASE 31 #define STATUS_GOOD_PASSPHRASE 32 #define STATUS_GOODMDC 33 #define STATUS_BADMDC 34 #define STATUS_ERRMDC 35 #define STATUS_IMPORTED 36 #define STATUS_IMPORT_RES 37 #define STATUS_FILE_START 38 #define STATUS_FILE_DONE 39 #define STATUS_FILE_ERROR 40 #define STATUS_BEGIN_DECRYPTION 41 #define STATUS_END_DECRYPTION 42 #define STATUS_BEGIN_ENCRYPTION 43 #define STATUS_END_ENCRYPTION 44 #define STATUS_DELETE_PROBLEM 45 #define STATUS_GET_BOOL 46 #define STATUS_GET_LINE 47 #define STATUS_GET_HIDDEN 48 #define STATUS_GOT_IT 49 #define STATUS_PROGRESS 50 #define STATUS_SIG_CREATED 51 #define STATUS_SESSION_KEY 52 #define STATUS_NOTATION_NAME 53 #define STATUS_NOTATION_DATA 54 #define STATUS_POLICY_URL 55 #define STATUS_BEGIN_STREAM 56 #define STATUS_END_STREAM 57 #define STATUS_KEY_CREATED 58 #define STATUS_USERID_HINT 59 #define STATUS_UNEXPECTED 60 #define STATUS_INV_RECP 61 #define STATUS_NO_RECP 62 #define STATUS_ALREADY_SIGNED 63 #define STATUS_SIGEXPIRED 64 #define STATUS_EXPSIG 65 #define STATUS_EXPKEYSIG 66 #define STATUS_ATTRIBUTE 67 #define STATUS_IMPORT_OK 68 #define STATUS_IMPORT_CHECK 69 #define STATUS_REVKEYSIG 70 #define STATUS_CARDCTRL 71 #define STATUS_NEWSIG 72 #define STATUS_PLAINTEXT 73 #define STATUS_PLAINTEXT_LENGTH 74 #define STATUS_KEY_NOT_CREATED 75 #define STATUS_NEED_PASSPHRASE_PIN 76 #define STATUS_SIG_SUBPACKET 77 /* Extra status codes for certain smartcard operations. Primary useful to double check that change PIN worked as expected. */ #define STATUS_SC_OP_FAILURE 79 #define STATUS_SC_OP_SUCCESS 80 #define STATUS_BACKUP_KEY_CREATED 81 #define STATUS_PKA_TRUST_BAD 82 #define STATUS_PKA_TRUST_GOOD 83 #define STATUS_BEGIN_SIGNING 84 #define STATUS_ERROR 85 #define STATUS_DECRYPTION_INFO 86 /*-- status.c --*/ void set_status_fd ( int fd ); int is_status_enabled ( void ); void write_status ( int no ); void write_status_text ( int no, const char *text ); void write_status_buffer ( int no, const char *buffer, size_t len, int wrap ); void write_status_text_and_buffer ( int no, const char *text, const char *buffer, size_t len, int wrap ); #ifdef USE_SHM_COPROCESSING void init_shm_coprocessing ( ulong requested_shm_size, int lock_mem ); #endif /*USE_SHM_COPROCESSING*/ int cpr_enabled(void); char *cpr_get( const char *keyword, const char *prompt ); char *cpr_get_no_help( const char *keyword, const char *prompt ); char *cpr_get_utf8( const char *keyword, const char *prompt ); char *cpr_get_hidden( const char *keyword, const char *prompt ); void cpr_kill_prompt(void); int cpr_get_answer_is_yes( const char *keyword, const char *prompt ); int cpr_get_answer_yes_no_quit( const char *keyword, const char *prompt ); int cpr_get_answer_okay_cancel (const char *keyword, const char *prompt, int def_answer); #endif /*G10_STATUS_H*/ gnupg-1.4.20/g10/pipemode.c0000644000175000017500000002443012635262326012206 00000000000000/* pipemode.c - pipemode handler * Copyright (C) 1998, 1990, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #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 "status.h" #include "filter.h" #define CONTROL_PACKET_SPACE 30 #define FAKED_LITERAL_PACKET_SPACE (9+2+2) enum pipemode_state_e { STX_init = 0, STX_wait_operation, STX_begin, STX_text, STX_detached_signature, STX_detached_signature_wait_text, STX_signed_data, STX_wait_init }; struct pipemode_context_s { enum pipemode_state_e state; int operation; int stop; int block_mode; UnarmorPump unarmor_ctx; }; static size_t make_control ( byte *buf, int code, int operation ) { const byte *sesmark; size_t sesmarklen, n=0;; sesmark = get_session_marker( &sesmarklen ); if ( sesmarklen > 20 ) BUG(); buf[n++] = 0xff; /* new format, type 63, 1 length byte */ n++; /* length will fixed below */ memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen; buf[n++] = CTRLPKT_PIPEMODE; buf[n++] = code; buf[n++] = operation; buf[1] = n-2; return n; } static int pipemode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { size_t size = *ret_len; struct pipemode_context_s *stx = opaque; int rc=0; size_t n = 0; int esc = 0; if( control == IOBUFCTRL_UNDERFLOW ) { *ret_len = 0; /* reserve some space for one control packet */ if ( size <= CONTROL_PACKET_SPACE+FAKED_LITERAL_PACKET_SPACE ) BUG(); size -= CONTROL_PACKET_SPACE+FAKED_LITERAL_PACKET_SPACE; if ( stx->block_mode ) { /* reserve 2 bytes for the block length */ buf[n++] = 0; buf[n++] = 0; } while ( n < size ) { /* FIXME: we have to make sure that we have a large enough * buffer for a control packet even after we already read * something. The easest way to do this is probably by ungetting * the control sequence and returning the buffer we have * already assembled */ int c = iobuf_get (a); if (c == -1) { if ( stx->state != STX_init ) { log_error ("EOF encountered at wrong state\n"); stx->stop = 1; return -1; } break; } if ( esc ) { switch (c) { case '@': if ( stx->state == STX_text ) { buf[n++] = c; break; } else if ( stx->state == STX_detached_signature ) { esc = 0; goto do_unarmor; /* not a very elegant solution */ } else if ( stx->state == STX_detached_signature_wait_text) { esc = 0; break; /* just ignore it in this state */ } log_error ("@@ not allowed in current state\n"); return -1; case '<': /* begin of stream part */ if ( stx->state != STX_init ) { log_error ("nested begin of stream\n"); stx->stop = 1; return -1; } stx->state = STX_wait_operation; stx->block_mode = 0; unarmor_pump_release (stx->unarmor_ctx); stx->unarmor_ctx = NULL; break; case '>': /* end of stream part */ if ( stx->state != STX_wait_init ) { log_error ("invalid state for @>\n"); stx->stop = 1; return -1; } stx->state = STX_init; break; case 'V': /* operation = verify */ case 'E': /* operation = encrypt */ case 'S': /* operation = sign */ case 'B': /* operation = detach sign */ case 'C': /* operation = clearsign */ case 'D': /* operation = decrypt */ if ( stx->state != STX_wait_operation ) { log_error ("invalid state for operation code\n"); stx->stop = 1; return -1; } stx->operation = c; if ( stx->operation == 'B') { stx->state = STX_detached_signature; if ( !opt.no_armor ) stx->unarmor_ctx = unarmor_pump_new (); } else stx->state = STX_begin; n += make_control ( buf+n, 1, stx->operation ); /* must leave after a control packet */ goto leave; case 't': /* plaintext text follows */ if ( stx->state == STX_detached_signature_wait_text ) stx->state = STX_detached_signature; if ( stx->state == STX_detached_signature ) { if ( stx->operation != 'B' ) { log_error ("invalid operation for this state\n"); stx->stop = 1; return -1; } stx->state = STX_signed_data; n += make_control ( buf+n, 2, 'B' ); /* and now we fake a literal data packet much the same * as in armor.c */ buf[n++] = 0xaf; /* old packet format, type 11, var length */ buf[n++] = 0; /* set the length header */ buf[n++] = 6; buf[n++] = 'b'; /* we ignore it anyway */ buf[n++] = 0; /* namelength */ memset(buf+n, 0, 4); /* timestamp */ n += 4; /* and return now so that we are sure to have * more space in the bufer for the next control * packet */ stx->block_mode = 1; goto leave2; } else { log_error ("invalid state for @t\n"); stx->stop = 1; return -1; } break; case '.': /* ready */ if ( stx->state == STX_signed_data ) { if (stx->block_mode) { buf[0] = (n-2) >> 8; buf[1] = (n-2); if ( buf[0] || buf[1] ) { /* end of blocks marker */ buf[n++] = 0; buf[n++] = 0; } stx->block_mode = 0; } n += make_control ( buf+n, 3, 'B' ); } else { log_error ("invalid state for @.\n"); stx->stop = 1; return -1; } stx->state = STX_wait_init; goto leave; default: log_error ("invalid escape sequence 0x%02x in stream\n", c); stx->stop = 1; return -1; } esc = 0; } else if (c == '@') esc = 1; else if (stx->unarmor_ctx) { do_unarmor: /* used to handle a @@ */ c = unarmor_pump (stx->unarmor_ctx, c); if ( !(c & ~255) ) buf[n++] = c; else if ( c < 0 ) { /* end of armor or error - we don't care becuase the armor can be modified anyway. The unarmored stuff should stand for itself. */ unarmor_pump_release (stx->unarmor_ctx); stx->unarmor_ctx = NULL; stx->state = STX_detached_signature_wait_text; } } else if (stx->state == STX_detached_signature_wait_text) ; /* just wait */ else buf[n++] = c; } leave: if ( !n ) { stx->stop = 1; rc = -1; /* eof */ } if ( stx->block_mode ) { /* fixup the block length */ buf[0] = (n-2) >> 8; buf[1] = (n-2); } leave2: /*log_hexdump ("pipemode:", buf, n );*/ *ret_len = n; } else if( control == IOBUFCTRL_DESC ) *(char**)buf = "pipemode_filter"; return rc; } void run_in_pipemode(void) { IOBUF fp; armor_filter_context_t afx; struct pipemode_context_s stx; memset( &afx, 0, sizeof afx); memset( &stx, 0, sizeof stx); fp = iobuf_open("-"); iobuf_push_filter (fp, pipemode_filter, &stx ); do { write_status (STATUS_BEGIN_STREAM); proc_packets( NULL, fp ); write_status (STATUS_END_STREAM); } while ( !stx.stop ); } gnupg-1.4.20/g10/misc.c0000644000175000017500000007067512635263103011345 00000000000000/* misc.c - miscellaneous functions * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 2008 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 3 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, see . */ #include #include #include #include #include #include #if defined(__linux__) && defined(__alpha__) && __GLIBC__ < 2 #include #include #endif #ifdef HAVE_SETRLIMIT #include #include #include #endif #ifdef ENABLE_SELINUX_HACKS #include #endif #ifdef _WIN32 #include #include #include #include #ifndef CSIDL_APPDATA #define CSIDL_APPDATA 0x001a #endif #ifndef CSIDL_LOCAL_APPDATA #define CSIDL_LOCAL_APPDATA 0x001c #endif #ifndef CSIDL_FLAG_CREATE #define CSIDL_FLAG_CREATE 0x8000 #endif #include "errors.h" #include "dynload.h" #endif /*_WIN32*/ #ifdef __VMS # include #endif /* def __VMS */ #include "util.h" #include "main.h" #include "photoid.h" #include "options.h" #include "i18n.h" #include "cardglue.h" #ifdef ENABLE_SELINUX_HACKS /* A object and a global variable to keep track of files marked as secured. */ struct secured_file_item { struct secured_file_item *next; ino_t ino; dev_t dev; }; static struct secured_file_item *secured_files; #endif /*ENABLE_SELINUX_HACKS*/ #if defined(__linux__) && defined(__alpha__) && __GLIBC__ < 2 static int setsysinfo(unsigned long op, void *buffer, unsigned long size, int *start, void *arg, unsigned long flag) { return syscall(__NR_osf_setsysinfo, op, buffer, size, start, arg, flag); } void trap_unaligned(void) { unsigned int buf[2]; buf[0] = SSIN_UACPROC; buf[1] = UAC_SIGBUS | UAC_NOPRINT; setsysinfo(SSI_NVPAIRS, buf, 1, 0, 0, 0); } #else void trap_unaligned(void) { /* dummy */ } #endif int disable_core_dumps() { #if defined(HAVE_DOSISH_SYSTEM) || defined(__VMS) return 0; #else #ifdef HAVE_SETRLIMIT struct rlimit limit; limit.rlim_cur = 0; limit.rlim_max = 0; if( !setrlimit( RLIMIT_CORE, &limit ) ) return 0; if( errno != EINVAL && errno != ENOSYS ) log_fatal(_("can't disable core dumps: %s\n"), strerror(errno) ); #endif return 1; #endif } /* For the sake of SELinux we want to restrict access through gpg to certain files we keep under our own control. This function registers such a file and is_secured_file may then be used to check whether a file has ben registered as secured. */ void register_secured_file (const char *fname) { #ifdef ENABLE_SELINUX_HACKS struct stat buf; struct secured_file_item *sf; /* Note that we stop immediatley if something goes wrong here. */ if (stat (fname, &buf)) log_fatal (_("fstat of `%s' failed in %s: %s\n"), fname, "register_secured_file", strerror (errno)); /* log_debug ("registering `%s' i=%lu.%lu\n", fname, */ /* (unsigned long)buf.st_dev, (unsigned long)buf.st_ino); */ for (sf=secured_files; sf; sf = sf->next) { if (sf->ino == buf.st_ino && sf->dev == buf.st_dev) return; /* Already registered. */ } sf = xmalloc (sizeof *sf); sf->ino = buf.st_ino; sf->dev = buf.st_dev; sf->next = secured_files; secured_files = sf; #endif /*ENABLE_SELINUX_HACKS*/ } /* Remove a file registerd as secure. */ void unregister_secured_file (const char *fname) { #ifdef ENABLE_SELINUX_HACKS struct stat buf; struct secured_file_item *sf, *sfprev; if (stat (fname, &buf)) { log_error (_("fstat of `%s' failed in %s: %s\n"), fname, "unregister_secured_file", strerror (errno)); return; } /* log_debug ("unregistering `%s' i=%lu.%lu\n", fname, */ /* (unsigned long)buf.st_dev, (unsigned long)buf.st_ino); */ for (sfprev=NULL,sf=secured_files; sf; sfprev=sf, sf = sf->next) { if (sf->ino == buf.st_ino && sf->dev == buf.st_dev) { if (sfprev) sfprev->next = sf->next; else secured_files = sf->next; xfree (sf); return; } } #endif /*ENABLE_SELINUX_HACKS*/ } /* Return true if FD is corresponds to a secured file. Using -1 for FS is allowed and will return false. */ int is_secured_file (int fd) { #ifdef ENABLE_SELINUX_HACKS struct stat buf; struct secured_file_item *sf; if (fd == -1) return 0; /* No file descriptor so it can't be secured either. */ /* Note that we print out a error here and claim that a file is secure if something went wrong. */ if (fstat (fd, &buf)) { log_error (_("fstat(%d) failed in %s: %s\n"), fd, "is_secured_file", strerror (errno)); return 1; } /* log_debug ("is_secured_file (%d) i=%lu.%lu\n", fd, */ /* (unsigned long)buf.st_dev, (unsigned long)buf.st_ino); */ for (sf=secured_files; sf; sf = sf->next) { if (sf->ino == buf.st_ino && sf->dev == buf.st_dev) return 1; /* Yes. */ } #endif /*ENABLE_SELINUX_HACKS*/ return 0; /* No. */ } /* Return true if FNAME is corresponds to a secured file. Using NULL, "" or "-" for FS is allowed and will return false. This function is used before creating a file, thus it won't fail if the file does not exist. */ int is_secured_filename (const char *fname) { #ifdef ENABLE_SELINUX_HACKS struct stat buf; struct secured_file_item *sf; if (iobuf_is_pipe_filename (fname) || !*fname) return 0; /* Note that we print out a error here and claim that a file is secure if something went wrong. */ if (stat (fname, &buf)) { if (errno == ENOENT || errno == EPERM || errno == EACCES) return 0; log_error (_("fstat of `%s' failed in %s: %s\n"), fname, "is_secured_filename", strerror (errno)); return 1; } /* log_debug ("is_secured_filename (%s) i=%lu.%lu\n", fname, */ /* (unsigned long)buf.st_dev, (unsigned long)buf.st_ino); */ for (sf=secured_files; sf; sf = sf->next) { if (sf->ino == buf.st_ino && sf->dev == buf.st_dev) return 1; /* Yes. */ } #endif /*ENABLE_SELINUX_HACKS*/ return 0; /* No. */ } u16 checksum_u16( unsigned n ) { u16 a; a = (n >> 8) & 0xff; a += n & 0xff; return a; } u16 checksum( byte *p, unsigned n ) { u16 a; for(a=0; n; n-- ) a += *p++; return a; } u16 checksum_mpi( MPI a ) { u16 csum; byte *buffer; unsigned nbytes; unsigned nbits; buffer = mpi_get_buffer( a, &nbytes, NULL ); nbits = mpi_get_nbits(a); csum = checksum_u16( nbits ); csum += checksum( buffer, nbytes ); xfree( buffer ); return csum; } void print_pubkey_algo_note( int algo ) { if(algo >= 100 && algo <= 110) { static int warn=0; if(!warn) { warn=1; log_info(_("WARNING: using experimental public key algorithm %s\n"), pubkey_algo_to_string(algo)); } } else if (algo == 20) { log_info (_("WARNING: Elgamal sign+encrypt keys are deprecated\n")); } } void print_cipher_algo_note( int algo ) { if(algo >= 100 && algo <= 110) { static int warn=0; if(!warn) { warn=1; log_info(_("WARNING: using experimental cipher algorithm %s\n"), cipher_algo_to_string(algo)); } } } void print_digest_algo_note( int algo ) { const struct weakhash *weak; if(algo >= 100 && algo <= 110) { static int warn=0; if(!warn) { warn=1; log_info(_("WARNING: using experimental digest algorithm %s\n"), digest_algo_to_string(algo)); } } else for (weak = opt.weak_digests; weak; weak = weak->next) if (weak->algo == algo) log_info (_("WARNING: digest algorithm %s is deprecated\n"), digest_algo_to_string(algo)); } /* Return a string which is used as a kind of process ID */ const byte * get_session_marker( size_t *rlen ) { static byte marker[SIZEOF_UNSIGNED_LONG*2]; static int initialized; if ( !initialized ) { volatile ulong aa, bb; /* we really want the uninitialized value */ ulong a, b; initialized = 1; /* also this marker is guessable it is not easy to use this * for a faked control packet because an attacker does not * have enough control about the time the verification does * take place. Of course, we can add just more random but * than we need the random generator even for verification * tasks - which does not make sense. */ a = aa ^ (ulong)getpid(); b = bb ^ (ulong)time(NULL); memcpy( marker, &a, SIZEOF_UNSIGNED_LONG ); memcpy( marker+SIZEOF_UNSIGNED_LONG, &b, SIZEOF_UNSIGNED_LONG ); } *rlen = sizeof(marker); return marker; } /**************** * Wrapper around the libgcrypt function with addional checks on * openPGP contraints for the algo ID. */ int openpgp_cipher_test_algo( int algo ) { if( algo < 0 || algo > 110 ) return G10ERR_CIPHER_ALGO; return check_cipher_algo(algo); } int openpgp_pk_test_algo( int algo, unsigned int usage_flags ) { /* Dont't allow type 20 keys unless in rfc2440 mode. */ if (!RFC2440 && algo == 20) return G10ERR_PUBKEY_ALGO; if( algo < 0 || algo > 110 ) return G10ERR_PUBKEY_ALGO; return check_pubkey_algo2( algo, usage_flags ); } int openpgp_pk_algo_usage ( int algo ) { int use = 0; /* they are hardwired in gpg 1.0 */ switch ( algo ) { case PUBKEY_ALGO_RSA: use = PUBKEY_USAGE_CERT | PUBKEY_USAGE_SIG | PUBKEY_USAGE_ENC | PUBKEY_USAGE_AUTH; break; case PUBKEY_ALGO_RSA_E: use = PUBKEY_USAGE_ENC; break; case PUBKEY_ALGO_RSA_S: use = PUBKEY_USAGE_CERT | PUBKEY_USAGE_SIG; break; case PUBKEY_ALGO_ELGAMAL: /* Allow encryption with type 20 keys if RFC-2440 compliance has been selected. Signing is broken thus we won't allow this. */ if (RFC2440) use = PUBKEY_USAGE_ENC; break; case PUBKEY_ALGO_ELGAMAL_E: use = PUBKEY_USAGE_ENC; break; case PUBKEY_ALGO_DSA: use = PUBKEY_USAGE_CERT | PUBKEY_USAGE_SIG | PUBKEY_USAGE_AUTH; break; default: break; } return use; } int openpgp_md_test_algo( int algo ) { if( algo < 0 || algo > 110 ) return G10ERR_DIGEST_ALGO; return check_digest_algo(algo); } /* Print a warning if the md5 digest algorithm has been used. This warning is printed only once unless SHOW is used. */ void md5_digest_warn (int show) { static int warned = 0; if (!warned || show) { log_info (_("WARNING: digest algorithm %s is deprecated\n"), digest_algo_to_string (DIGEST_ALGO_MD5)); log_info (_("please see %s for more information\n"), "https://gnupg.org/faq/weak-digest-algos.html"); warned = 1; } } void not_in_gpg1_notice (void) { static int warned = 0; if (!warned) { log_info (_("NOTE: This feature is not available in %s\n"), "GnuPG 1.x"); log_info (_("please see %s for more information\n"), "https://gnupg.org/faq/features-not-in-gnupg-1.html"); warned = 1; } } static unsigned long get_signature_count(PKT_secret_key *sk) { #ifdef ENABLE_CARD_SUPPORT if(sk && sk->is_protected && sk->protect.s2k.mode==1002) { struct agent_card_info_s info; if(agent_scd_getattr("SIG-COUNTER",&info)==0) return info.sig_counter; } #endif /* How to do this without a card? */ return 0; } /* Expand %-strings. Returns a string which must be xfreed. Returns NULL if the string cannot be expanded (too large). */ char * pct_expando(const char *string,struct expando_args *args) { const char *ch=string; int idx=0,maxlen=0,done=0; u32 pk_keyid[2]={0,0},sk_keyid[2]={0,0}; char *ret=NULL; if(args->pk) keyid_from_pk(args->pk,pk_keyid); if(args->sk) keyid_from_sk(args->sk,sk_keyid); /* This is used so that %k works in photoid command strings in --list-secret-keys (which of course has a sk, but no pk). */ if(!args->pk && args->sk) keyid_from_sk(args->sk,pk_keyid); while(*ch!='\0') { if(!done) { /* 8192 is way bigger than we'll need here */ if(maxlen>=8192) goto fail; maxlen+=1024; ret=xrealloc(ret,maxlen); } done=0; if(*ch=='%') { switch(*(ch+1)) { case 's': /* short key id */ if(idx+8sk)); idx+=strlen(&ret[idx]); done=1; } break; case 'p': /* primary pk fingerprint of a sk */ case 'f': /* pk fingerprint */ case 'g': /* sk fingerprint */ { byte array[MAX_FINGERPRINT_LEN]; size_t len; int i; if((*(ch+1))=='p' && args->sk) { if(args->sk->is_primary) fingerprint_from_sk(args->sk,array,&len); else if(args->sk->main_keyid[0] || args->sk->main_keyid[1]) { PKT_public_key *pk= xmalloc_clear(sizeof(PKT_public_key)); if(get_pubkey_fast(pk,args->sk->main_keyid)==0) fingerprint_from_pk(pk,array,&len); else memset(array,0,(len=MAX_FINGERPRINT_LEN)); free_public_key(pk); } else memset(array,0,(len=MAX_FINGERPRINT_LEN)); } else if((*(ch+1))=='f' && args->pk) fingerprint_from_pk(args->pk,array,&len); else if((*(ch+1))=='g' && args->sk) fingerprint_from_sk(args->sk,array,&len); else memset(array,0,(len=MAX_FINGERPRINT_LEN)); if(idx+(len*2)validity_info && idx+1validity_info; ret[idx]='\0'; done=1; } break; /* The text string types */ case 't': case 'T': case 'V': { const char *str=NULL; switch(*(ch+1)) { case 't': /* e.g. "jpg" */ str=image_type_to_string(args->imagetype,0); break; case 'T': /* e.g. "image/jpeg" */ str=image_type_to_string(args->imagetype,2); break; case 'V': /* e.g. "full", "expired", etc. */ str=args->validity_string; break; } if(str && idx+strlen(str)=0 && algo<=3) return 0; #else if(algo>=0 && algo<=2) return 0; #endif return G10ERR_COMPR_ALGO; } int default_cipher_algo(void) { if(opt.def_cipher_algo) return opt.def_cipher_algo; else if(opt.personal_cipher_prefs) return opt.personal_cipher_prefs[0].value; else return opt.s2k_cipher_algo; } /* There is no default_digest_algo function, but see sign.c:hash_for() */ int default_compress_algo(void) { if(opt.compress_algo!=-1) return opt.compress_algo; else if(opt.personal_compress_prefs) return opt.personal_compress_prefs[0].value; else return DEFAULT_COMPRESS_ALGO; } const char * compliance_option_string(void) { char *ver="???"; switch(opt.compliance) { case CO_GNUPG: return "--gnupg"; case CO_RFC4880: return "--openpgp"; case CO_RFC2440: return "--rfc2440"; case CO_RFC1991: return "--rfc1991"; case CO_PGP2: return "--pgp2"; case CO_PGP6: return "--pgp6"; case CO_PGP7: return "--pgp7"; case CO_PGP8: return "--pgp8"; } return ver; } void compliance_failure(void) { char *ver="???"; switch(opt.compliance) { case CO_GNUPG: ver="GnuPG"; break; case CO_RFC4880: ver="OpenPGP"; break; case CO_RFC2440: ver="OpenPGP (older)"; break; case CO_RFC1991: ver="old PGP"; break; case CO_PGP2: ver="PGP 2.x"; break; case CO_PGP6: ver="PGP 6.x"; break; case CO_PGP7: ver="PGP 7.x"; break; case CO_PGP8: ver="PGP 8.x"; break; } log_info(_("this message may not be usable by %s\n"),ver); opt.compliance=CO_GNUPG; } /* Break a string into successive option pieces. Accepts single word options and key=value argument options. */ char * optsep(char **stringp) { char *tok,*end; tok=*stringp; if(tok) { end=strpbrk(tok," ,="); if(end) { int sawequals=0; char *ptr=end; /* what we need to do now is scan along starting with *end, If the next character we see (ignoring spaces) is an = sign, then there is an argument. */ while(*ptr) { if(*ptr=='=') sawequals=1; else if(*ptr!=' ') break; ptr++; } /* There is an argument, so grab that too. At this point, ptr points to the first character of the argument. */ if(sawequals) { /* Is it a quoted argument? */ if(*ptr=='"') { ptr++; end=strchr(ptr,'"'); if(end) end++; } else end=strpbrk(ptr," ,"); } if(end && *end) { *end='\0'; *stringp=end+1; } else *stringp=NULL; } else *stringp=NULL; } return tok; } /* Breaks an option value into key and value. Returns NULL if there is no value. Note that "string" is modified to remove the =value part. */ char * argsplit(char *string) { char *equals,*arg=NULL; equals=strchr(string,'='); if(equals) { char *quote,*space; *equals='\0'; arg=equals+1; /* Quoted arg? */ quote=strchr(arg,'"'); if(quote) { arg=quote+1; quote=strchr(arg,'"'); if(quote) *quote='\0'; } else { size_t spaces; /* Trim leading spaces off of the arg */ spaces=strspn(arg," "); arg+=spaces; } /* Trim tailing spaces off of the tag */ space=strchr(string,' '); if(space) *space='\0'; } return arg; } /* Return the length of the initial token, leaving off any argument. */ static size_t optlen(const char *s) { char *end=strpbrk(s," ="); if(end) return end-s; else return strlen(s); } int parse_options(char *str,unsigned int *options, struct parse_options *opts,int noisy) { char *tok; if (str && !strcmp (str, "help")) { int i,maxlen=0; /* Figure out the longest option name so we can line these up neatly. */ for(i=0;opts[i].name;i++) if(opts[i].help && maxlen= 0) { char *tmp = xmalloc (strlen (path) + 6 +1); strcpy (stpcpy (tmp, path), "\\gnupg"); dir = tmp; /* Try to create the directory if it does not yet exists. */ if (access (dir, F_OK)) CreateDirectory (dir, NULL); } } #endif /*HAVE_W32_SYSTEM*/ if (!dir || !*dir) dir = GNUPG_HOMEDIR; return dir; } /* Return the name of the libexec directory. The name is allocated in a static area on the first use. This function won't fail. */ const char * get_libexecdir (void) { #ifdef HAVE_W32_SYSTEM static int got_dir; static char dir[MAX_PATH+5]; if (!got_dir) { char *p; if ( !GetModuleFileName ( NULL, dir, MAX_PATH) ) { log_debug ("GetModuleFileName failed: %s\n", w32_strerror (0)); *dir = 0; } got_dir = 1; p = strrchr (dir, DIRSEP_C); if (p) *p = 0; else { log_debug ("bad filename `%s' returned for this process\n", dir); *dir = 0; } } if (*dir) return dir; /* Fallback to the hardwired value. */ #endif /*HAVE_W32_SYSTEM*/ return GNUPG_LIBEXECDIR; } /* Similar to access(2), but uses PATH to find the file. (2006-07-08 SMS: See "vmslib/vms.c" for a VMS-specific replacement function) */ #ifndef __VMS int path_access(const char *file,int mode) { char *envpath; int ret=-1; envpath=getenv("PATH"); if(!envpath #ifdef HAVE_DRIVE_LETTERS || (((file[0]>='A' && file[0]<='Z') || (file[0]>='a' && file[0]<='z')) && file[1]==':') #else || file[0]=='/' #endif ) return access(file,mode); else { /* At least as large as, but most often larger than we need. */ char *buffer=xmalloc(strlen(envpath)+1+strlen(file)+1); char *split,*item,*path=xstrdup(envpath); split=path; while((item=strsep(&split,PATHSEP_S))) { strcpy(buffer,item); strcat(buffer,"/"); strcat(buffer,file); ret=access(buffer,mode); if(ret==0) break; } xfree(path); xfree(buffer); } return ret; } #endif /*ndef __VMS*/ /* Ignore signatures and certifications made over certain digest * algorithms. This allows users to deprecate support for algorithms * they are not willing to rely on. */ void additional_weak_digest (const char* digestname) { struct weakhash *weak = NULL; const int algo = string_to_digest_algo(digestname); if (algo == 0) { log_error(_("Unknown weak digest '%s'\n"), digestname); return; } /* Check to ensure it's not already present. */ for (weak = opt.weak_digests; weak != NULL; weak = weak->next) if (algo == weak->algo) return; /* Add it to the head of the list. */ weak = xmalloc(sizeof(*weak)); weak->algo = algo; weak->rejection_shown = 0; weak->next = opt.weak_digests; opt.weak_digests = weak; } gnupg-1.4.20/g10/getkey.c0000644000175000017500000026002012635262326011671 00000000000000/* getkey.c - Get a key from the database * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006 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 3 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, see . */ #include #include #include #include #include #include #include "util.h" #include "packet.h" #include "memory.h" #include "iobuf.h" #include "keydb.h" #include "options.h" #include "main.h" #include "trustdb.h" #include "i18n.h" #include "keyserver-internal.h" #include "../include/host2net.h" #define MAX_PK_CACHE_ENTRIES PK_UID_CACHE_SIZE #define MAX_UID_CACHE_ENTRIES PK_UID_CACHE_SIZE #if MAX_PK_CACHE_ENTRIES < 2 #error We need the cache for key creation #endif struct getkey_ctx_s { int exact; KBNODE keyblock; KBPOS kbpos; KBNODE found_key; /* pointer into some keyblock */ int last_rc; int req_usage; int req_algo; KEYDB_HANDLE kr_handle; int not_allocated; int nitems; KEYDB_SEARCH_DESC items[1]; }; #if 0 static struct { int any; int okay_count; int nokey_count; int error_count; } lkup_stats[21]; #endif typedef struct keyid_list { struct keyid_list *next; u32 keyid[2]; } *keyid_list_t; #if MAX_PK_CACHE_ENTRIES typedef struct pk_cache_entry { struct pk_cache_entry *next; u32 keyid[2]; PKT_public_key *pk; } *pk_cache_entry_t; static pk_cache_entry_t pk_cache; static int pk_cache_entries; /* number of entries in pk cache */ static int pk_cache_disabled; #endif #if MAX_UID_CACHE_ENTRIES < 5 #error we really need the userid cache #endif typedef struct user_id_db { struct user_id_db *next; keyid_list_t keyids; int len; char name[1]; } *user_id_db_t; static user_id_db_t user_id_db; static int uid_cache_entries; /* number of entries in uid cache */ static void merge_selfsigs( KBNODE keyblock ); static int lookup( GETKEY_CTX ctx, KBNODE *ret_keyblock, int secmode ); #if 0 static void print_stats() { int i; for(i=0; i < DIM(lkup_stats); i++ ) { if( lkup_stats[i].any ) fprintf(stderr, "lookup stats: mode=%-2d ok=%-6d nokey=%-6d err=%-6d\n", i, lkup_stats[i].okay_count, lkup_stats[i].nokey_count, lkup_stats[i].error_count ); } } #endif void cache_public_key( PKT_public_key *pk ) { #if MAX_PK_CACHE_ENTRIES pk_cache_entry_t ce; u32 keyid[2]; if( pk_cache_disabled ) return; if( pk->dont_cache ) return; if( is_ELGAMAL(pk->pubkey_algo) || pk->pubkey_algo == PUBKEY_ALGO_DSA || is_RSA(pk->pubkey_algo) ) { keyid_from_pk( pk, keyid ); } else return; /* don't know how to get the keyid */ for( ce = pk_cache; ce; ce = ce->next ) if( ce->keyid[0] == keyid[0] && ce->keyid[1] == keyid[1] ) { if( DBG_CACHE ) log_debug("cache_public_key: already in cache\n"); return; } if( pk_cache_entries >= MAX_PK_CACHE_ENTRIES ) { /* fixme: use another algorithm to free some cache slots */ pk_cache_disabled=1; if( opt.verbose > 1 ) log_info(_("too many entries in pk cache - disabled\n")); return; } pk_cache_entries++; ce = xmalloc( sizeof *ce ); ce->next = pk_cache; pk_cache = ce; ce->pk = copy_public_key( NULL, pk ); ce->keyid[0] = keyid[0]; ce->keyid[1] = keyid[1]; #endif } /* Return a const utf-8 string with the text "[User ID not found]". This fucntion is required so that we don't need to switch gettext's encoding temporary. */ static const char * user_id_not_found_utf8 (void) { static char *text; if (!text) text = native_to_utf8 (_("[User ID not found]")); return text; } /* * Return the user ID from the given keyblock. * We use the primary uid flag which has been set by the merge_selfsigs * function. The returned value is only valid as long as then given * keyblock is not changed */ static const char * get_primary_uid ( KBNODE keyblock, size_t *uidlen ) { KBNODE k; const char *s; for (k=keyblock; k; k=k->next ) { if ( k->pkt->pkttype == PKT_USER_ID && !k->pkt->pkt.user_id->attrib_data && k->pkt->pkt.user_id->is_primary ) { *uidlen = k->pkt->pkt.user_id->len; return k->pkt->pkt.user_id->name; } } s = user_id_not_found_utf8 (); *uidlen = strlen (s); return s; } static void release_keyid_list ( keyid_list_t k ) { while ( k ) { keyid_list_t k2 = k->next; xfree (k); k = k2; } } /**************** * Store the association of keyid and userid * Feed only public keys to this function. */ static void cache_user_id( KBNODE keyblock ) { user_id_db_t r; const char *uid; size_t uidlen; keyid_list_t keyids = NULL; KBNODE k; for (k=keyblock; k; k = k->next ) { if ( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { keyid_list_t a = xmalloc_clear ( sizeof *a ); /* Hmmm: For a long list of keyids it might be an advantage * to append the keys */ keyid_from_pk( k->pkt->pkt.public_key, a->keyid ); /* first check for duplicates */ for(r=user_id_db; r; r = r->next ) { keyid_list_t b = r->keyids; for ( b = r->keyids; b; b = b->next ) { if( b->keyid[0] == a->keyid[0] && b->keyid[1] == a->keyid[1] ) { if( DBG_CACHE ) log_debug("cache_user_id: already in cache\n"); release_keyid_list ( keyids ); xfree ( a ); return; } } } /* now put it into the cache */ a->next = keyids; keyids = a; } } if ( !keyids ) BUG (); /* No key no fun */ uid = get_primary_uid ( keyblock, &uidlen ); if( uid_cache_entries >= MAX_UID_CACHE_ENTRIES ) { /* fixme: use another algorithm to free some cache slots */ r = user_id_db; user_id_db = r->next; release_keyid_list ( r->keyids ); xfree(r); uid_cache_entries--; } r = xmalloc( sizeof *r + uidlen-1 ); r->keyids = keyids; r->len = uidlen; memcpy(r->name, uid, r->len); r->next = user_id_db; user_id_db = r; uid_cache_entries++; } void getkey_disable_caches() { #if MAX_PK_CACHE_ENTRIES { pk_cache_entry_t ce, ce2; for( ce = pk_cache; ce; ce = ce2 ) { ce2 = ce->next; free_public_key( ce->pk ); xfree( ce ); } pk_cache_disabled=1; pk_cache_entries = 0; pk_cache = NULL; } #endif /* fixme: disable user id cache ? */ } static void pk_from_block ( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE keyblock ) { KBNODE a = ctx->found_key ? ctx->found_key : keyblock; assert ( a->pkt->pkttype == PKT_PUBLIC_KEY || a->pkt->pkttype == PKT_PUBLIC_SUBKEY ); copy_public_key ( pk, a->pkt->pkt.public_key ); } static void sk_from_block ( GETKEY_CTX ctx, PKT_secret_key *sk, KBNODE keyblock ) { KBNODE a = ctx->found_key ? ctx->found_key : keyblock; assert ( a->pkt->pkttype == PKT_SECRET_KEY || a->pkt->pkttype == PKT_SECRET_SUBKEY ); copy_secret_key( sk, a->pkt->pkt.secret_key); } /**************** * Get a public key and store it into the allocated pk * can be called with PK set to NULL to just read it into some * internal structures. */ int get_pubkey( PKT_public_key *pk, u32 *keyid ) { int internal = 0; int rc = 0; #if MAX_PK_CACHE_ENTRIES if(pk) { /* Try to get it from the cache. We don't do this when pk is NULL as it does not guarantee that the user IDs are cached. */ pk_cache_entry_t ce; for( ce = pk_cache; ce; ce = ce->next ) { if( ce->keyid[0] == keyid[0] && ce->keyid[1] == keyid[1] ) { copy_public_key( pk, ce->pk ); return 0; } } } #endif /* more init stuff */ if( !pk ) { pk = xmalloc_clear( sizeof *pk ); internal++; } /* do a lookup */ { struct getkey_ctx_s ctx; KBNODE kb = NULL; memset( &ctx, 0, sizeof ctx ); ctx.exact = 1; /* use the key ID exactly as given */ ctx.not_allocated = 1; ctx.kr_handle = keydb_new (0); ctx.nitems = 1; ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID; ctx.items[0].u.kid[0] = keyid[0]; ctx.items[0].u.kid[1] = keyid[1]; ctx.req_algo = pk->req_algo; ctx.req_usage = pk->req_usage; rc = lookup( &ctx, &kb, 0 ); if ( !rc ) { pk_from_block ( &ctx, pk, kb ); } get_pubkey_end( &ctx ); release_kbnode ( kb ); } if( !rc ) goto leave; rc = G10ERR_NO_PUBKEY; leave: if( !rc ) cache_public_key( pk ); if( internal ) free_public_key(pk); return rc; } /* Get a public key and store it into the allocated pk. This function differs from get_pubkey() in that it does not do a check of the key to avoid recursion. It should be used only in very certain cases. It will only retrieve primary keys. */ int get_pubkey_fast (PKT_public_key *pk, u32 *keyid) { int rc = 0; KEYDB_HANDLE hd; KBNODE keyblock; u32 pkid[2]; assert (pk); #if MAX_PK_CACHE_ENTRIES { /* Try to get it from the cache */ pk_cache_entry_t ce; for (ce = pk_cache; ce; ce = ce->next) { if (ce->keyid[0] == keyid[0] && ce->keyid[1] == keyid[1]) { if (pk) copy_public_key (pk, ce->pk); return 0; } } } #endif hd = keydb_new (0); rc = keydb_search_kid (hd, keyid); if (rc == -1) { keydb_release (hd); return G10ERR_NO_PUBKEY; } rc = keydb_get_keyblock (hd, &keyblock); keydb_release (hd); if (rc) { log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); return G10ERR_NO_PUBKEY; } assert ( keyblock->pkt->pkttype == PKT_PUBLIC_KEY || keyblock->pkt->pkttype == PKT_PUBLIC_SUBKEY ); keyid_from_pk(keyblock->pkt->pkt.public_key,pkid); if(keyid[0]==pkid[0] && keyid[1]==pkid[1]) copy_public_key (pk, keyblock->pkt->pkt.public_key ); else rc=G10ERR_NO_PUBKEY; release_kbnode (keyblock); /* Not caching key here since it won't have all of the fields properly set. */ return rc; } KBNODE get_pubkeyblock( u32 *keyid ) { struct getkey_ctx_s ctx; int rc = 0; KBNODE keyblock = NULL; memset( &ctx, 0, sizeof ctx ); /* no need to set exact here because we want the entire block */ ctx.not_allocated = 1; ctx.kr_handle = keydb_new (0); ctx.nitems = 1; ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID; ctx.items[0].u.kid[0] = keyid[0]; ctx.items[0].u.kid[1] = keyid[1]; rc = lookup( &ctx, &keyblock, 0 ); get_pubkey_end( &ctx ); return rc ? NULL : keyblock; } /**************** * Get a secret key and store it into sk */ int get_seckey( PKT_secret_key *sk, u32 *keyid ) { int rc; struct getkey_ctx_s ctx; KBNODE kb = NULL; memset( &ctx, 0, sizeof ctx ); ctx.exact = 1; /* use the key ID exactly as given */ ctx.not_allocated = 1; ctx.kr_handle = keydb_new (1); ctx.nitems = 1; ctx.items[0].mode = KEYDB_SEARCH_MODE_LONG_KID; ctx.items[0].u.kid[0] = keyid[0]; ctx.items[0].u.kid[1] = keyid[1]; ctx.req_algo = sk->req_algo; ctx.req_usage = sk->req_usage; rc = lookup( &ctx, &kb, 1 ); if ( !rc ) { u32 skid[2]; sk_from_block ( &ctx, sk, kb ); keyid_from_sk ( sk, skid ); /* * Make sure it's exact match of keyid. * If not, it's secret subkey with no public key. */ if (!(keyid[0] == skid[0] && keyid[1] == skid[1])) { log_error (_("key %s: secret key without public key" " - skipped\n"), keystr(keyid)); rc = G10ERR_NO_PUBKEY; } } get_seckey_end( &ctx ); release_kbnode ( kb ); if( !rc ) { /* check the secret key (this may prompt for a passprase to * unlock the secret key */ rc = check_secret_key( sk, 0 ); } return rc; } /**************** * Check whether the secret key is available. This is just a fast * check and does not tell us whether the secret key is valid. It * merely tells other whether there is some secret key. * Returns: 0 := key is available * G10ERR_NO_SECKEY := not availabe */ int seckey_available( u32 *keyid ) { int rc; KEYDB_HANDLE hd = keydb_new (1); rc = keydb_search_kid (hd, keyid); if ( rc == -1 ) rc = G10ERR_NO_SECKEY; keydb_release (hd); return rc; } /**************** * Return the type of the user id: * * Please use the constants KEYDB_SERCH_MODE_xxx * 0 = Invalid user ID * 1 = exact match * 2 = match a substring * 3 = match an email address * 4 = match a substring of an email address * 5 = match an email address, but compare from end * 6 = word match mode * 10 = it is a short KEYID (don't care about keyid[0]) * 11 = it is a long KEYID * 12 = it is a trustdb index (keyid is looked up) * 16 = it is a 16 byte fingerprint * 20 = it is a 20 byte fingerprint * 21 = Unified fingerprint :fpr:pk_algo: * (We don't use pk_algo yet) * * Rules used: * - If the username starts with 8,9,16 or 17 hex-digits (the first one * must be in the range 0..9), this is considered a keyid; depending * on the length a short or complete one. * - If the username starts with 32,33,40 or 41 hex-digits (the first one * must be in the range 0..9), this is considered a fingerprint. * - If the username starts with a left angle, we assume it is a complete * email address and look only at this part. * - If the username starts with a colon we assume it is a unified * key specfification. * - If the username starts with a '.', we assume it is the ending * part of an email address * - If the username starts with an '@', we assume it is a part of an * email address * - If the userid start with an '=' an exact compare is done. * - If the userid starts with a '*' a case insensitive substring search is * done (This is the default). * - If the userid starts with a '+' we will compare individual words * and a match requires that all the words are in the userid. * Words are delimited by white space or "()<>[]{}.@-+_,;/&!" * (note that you can't search for these characters). Compare * is not case sensitive. */ int classify_user_id( const char *name, KEYDB_SEARCH_DESC *desc ) { const char *s; int hexprefix = 0; int hexlength; int mode = 0; KEYDB_SEARCH_DESC dummy_desc; if (!desc) desc = &dummy_desc; /* clear the structure so that the mode field is set to zero unless * we set it to the correct value right at the end of this function */ memset (desc, 0, sizeof *desc); /* skip leading spaces. Fixme: what is with trailing spaces? */ for(s = name; *s && spacep (s); s++ ) ; switch (*s) { case 0: /* empty string is an error */ return 0; #if 0 case '.': /* an email address, compare from end */ mode = KEYDB_SEARCH_MODE_MAILEND; s++; desc->u.name = s; break; #endif case '<': /* an email address */ mode = KEYDB_SEARCH_MODE_MAIL; desc->u.name = s; break; case '@': /* part of an email address */ mode = KEYDB_SEARCH_MODE_MAILSUB; s++; desc->u.name = s; break; case '=': /* exact compare */ mode = KEYDB_SEARCH_MODE_EXACT; s++; desc->u.name = s; break; case '*': /* case insensitive substring search */ mode = KEYDB_SEARCH_MODE_SUBSTR; s++; desc->u.name = s; break; #if 0 case '+': /* compare individual words */ mode = KEYDB_SEARCH_MODE_WORDS; s++; desc->u.name = s; break; #endif case '#': /* local user id */ return 0; /* This is now obsolete and van't not be used anymore*/ case ':': /*Unified fingerprint */ { const char *se, *si; int i; se = strchr( ++s,':'); if ( !se ) return 0; for (i=0,si=s; si < se; si++, i++ ) { if ( !strchr("01234567890abcdefABCDEF", *si ) ) return 0; /* invalid digit */ } if (i != 32 && i != 40) return 0; /* invalid length of fpr*/ for (i=0,si=s; si < se; i++, si +=2) desc->u.fpr[i] = hextobyte(si); for ( ; i < 20; i++) desc->u.fpr[i]= 0; s = se + 1; mode = KEYDB_SEARCH_MODE_FPR; } break; default: if (s[0] == '0' && s[1] == 'x') { hexprefix = 1; s += 2; } hexlength = strspn(s, "0123456789abcdefABCDEF"); if (hexlength >= 8 && s[hexlength] =='!') { desc->exact = 1; hexlength++; /* just for the following check */ } /* check if a hexadecimal number is terminated by EOS or blank */ if (hexlength && s[hexlength] && !spacep(s+hexlength)) { if (hexprefix) /* a "0x" prefix without correct */ return 0; /* termination is an error */ else /* The first chars looked like */ hexlength = 0; /* a hex number, but really were not. */ } if (desc->exact) hexlength--; if (hexlength == 8 || (!hexprefix && hexlength == 9 && *s == '0')){ /* short keyid */ if (hexlength == 9) s++; desc->u.kid[0] = 0; desc->u.kid[1] = strtoul( s, NULL, 16 ); mode = KEYDB_SEARCH_MODE_SHORT_KID; } else if (hexlength == 16 || (!hexprefix && hexlength == 17 && *s == '0')) { /* complete keyid */ char buf[9]; if (hexlength == 17) s++; mem2str(buf, s, 9 ); desc->u.kid[0] = strtoul( buf, NULL, 16 ); desc->u.kid[1] = strtoul( s+8, NULL, 16 ); mode = KEYDB_SEARCH_MODE_LONG_KID; } else if (hexlength == 32 || (!hexprefix && hexlength == 33 && *s == '0')) { /* md5 fingerprint */ int i; if (hexlength == 33) s++; memset(desc->u.fpr+16, 0, 4); for (i=0; i < 16; i++, s+=2) { int c = hextobyte(s); if (c == -1) return 0; desc->u.fpr[i] = c; } mode = KEYDB_SEARCH_MODE_FPR16; } else if (hexlength == 40 || (!hexprefix && hexlength == 41 && *s == '0')) { /* sha1/rmd160 fingerprint */ int i; if (hexlength == 41) s++; for (i=0; i < 20; i++, s+=2) { int c = hextobyte(s); if (c == -1) return 0; desc->u.fpr[i] = c; } mode = KEYDB_SEARCH_MODE_FPR20; } else if (!hexprefix) { /* No hex indicator; check for a space separated OpenPGP v4 fingerprint like: 8061 5870 F5BA D690 3336 86D0 F2AD 85AC 1E42 B367 or 8061 5870 F5BA D690 3336 86D0 F2AD 85AC 1E42 B367 */ mode = 0; hexlength = strspn (s, " 0123456789abcdefABCDEF"); if (s[hexlength] && s[hexlength] != ' ') hexlength = 0; /* Followed by non-space. */ while (hexlength && s[hexlength-1] == ' ') hexlength--; /* Trim trailing spaces. */ if ((hexlength == 49 || hexlength == 50) && (!s[hexlength] || s[hexlength] == ' ')) { int i, c; for (i=0; i < 20; i++) { if (i && !(i % 2)) { if (*s != ' ') break; s++; /* Skip the double space in the middle but don't require it to help copying fingerprints from sources which fold multiple space to one. */ if (i == 10 && *s == ' ') s++; } c = hextobyte(s); if (c == -1) break; desc->u.fpr[i] = c; s += 2; } if (i == 20) mode = KEYDB_SEARCH_MODE_FPR20; } if (!mode) { desc->exact = 0; desc->u.name = s; mode = KEYDB_SEARCH_MODE_SUBSTR; /* default mode */ } } else /* This was a hex number with a prefix */ return 0; /* and a wrong length */ } desc->mode = mode; return mode; } static int skip_unusable(void *dummy, u32 *keyid,PKT_user_id *uid) { int unusable=0; KBNODE keyblock; (void)dummy; keyblock=get_pubkeyblock(keyid); if(!keyblock) { log_error("error checking usability status of %s\n",keystr(keyid)); goto leave; } /* Is the user ID in question revoked/expired? */ if(uid) { KBNODE node; for(node=keyblock;node;node=node->next) { if(node->pkt->pkttype==PKT_USER_ID) { if(cmp_user_ids(uid,node->pkt->pkt.user_id)==0 && (node->pkt->pkt.user_id->is_revoked || node->pkt->pkt.user_id->is_expired)) { unusable=1; break; } } } } if(!unusable) unusable=pk_is_disabled(keyblock->pkt->pkt.public_key); leave: release_kbnode(keyblock); return unusable; } /**************** * Try to get the pubkey by the userid. This function looks for the * first pubkey certificate which has the given name in a user_id. if * pk/sk has the pubkey algo set, the function will only return a * pubkey with that algo. If namelist is NULL, the first key is * returned. The caller should provide storage for either the pk or * the sk. If ret_kb is not NULL the function will return the * keyblock there. */ static int key_byname( GETKEY_CTX *retctx, STRLIST namelist, PKT_public_key *pk, PKT_secret_key *sk, int secmode, int include_unusable, KBNODE *ret_kb, KEYDB_HANDLE *ret_kdbhd ) { int rc = 0; int n; STRLIST r; GETKEY_CTX ctx; KBNODE help_kb = NULL; if( retctx ) {/* reset the returned context in case of error */ assert (!ret_kdbhd); /* not allowed because the handle is stored in the context */ *retctx = NULL; } if (ret_kdbhd) *ret_kdbhd = NULL; if(!namelist) { ctx = xmalloc_clear (sizeof *ctx); ctx->nitems = 1; ctx->items[0].mode=KEYDB_SEARCH_MODE_FIRST; if(!include_unusable) ctx->items[0].skipfnc=skip_unusable; } else { /* build the search context */ for(n=0, r=namelist; r; r = r->next ) n++; ctx = xmalloc_clear (sizeof *ctx + (n-1)*sizeof ctx->items ); ctx->nitems = n; for(n=0, r=namelist; r; r = r->next, n++ ) { classify_user_id (r->d, &ctx->items[n]); if (ctx->items[n].exact) ctx->exact = 1; if (!ctx->items[n].mode) { xfree (ctx); return G10ERR_INV_USER_ID; } if(!include_unusable && ctx->items[n].mode!=KEYDB_SEARCH_MODE_SHORT_KID && ctx->items[n].mode!=KEYDB_SEARCH_MODE_LONG_KID && ctx->items[n].mode!=KEYDB_SEARCH_MODE_FPR16 && ctx->items[n].mode!=KEYDB_SEARCH_MODE_FPR20 && ctx->items[n].mode!=KEYDB_SEARCH_MODE_FPR) ctx->items[n].skipfnc=skip_unusable; } } ctx->kr_handle = keydb_new (secmode); if ( !ret_kb ) ret_kb = &help_kb; if( secmode ) { if (sk) { ctx->req_algo = sk->req_algo; ctx->req_usage = sk->req_usage; } rc = lookup( ctx, ret_kb, 1 ); if ( !rc && sk ) { sk_from_block ( ctx, sk, *ret_kb ); } } else { if (pk) { ctx->req_algo = pk->req_algo; ctx->req_usage = pk->req_usage; } rc = lookup( ctx, ret_kb, 0 ); if ( !rc && pk ) { pk_from_block ( ctx, pk, *ret_kb ); } } release_kbnode ( help_kb ); if (retctx) /* caller wants the context */ *retctx = ctx; else { if (ret_kdbhd) { *ret_kdbhd = ctx->kr_handle; ctx->kr_handle = NULL; } get_pubkey_end (ctx); } return rc; } /* Find a public key from NAME and return the keyblock or the key. If ret_kdb is not NULL, the KEYDB handle used to locate this keyblock is returned and the caller is responsible for closing it. If a key was not found and NAME is a valid RFC822 mailbox and PKA retrieval has been enabled, we try to import the pkea via the PKA mechanism. */ int get_pubkey_byname (PKT_public_key *pk, const char *name, KBNODE *ret_keyblock, KEYDB_HANDLE *ret_kdbhd, int include_unusable ) { int rc; STRLIST namelist = NULL; add_to_strlist( &namelist, name ); rc = key_byname( NULL, namelist, pk, NULL, 0, include_unusable, ret_keyblock, ret_kdbhd); /* If the requested name resembles a valid mailbox and automatic retrieval has been enabled, we try to import the key. */ if (rc == G10ERR_NO_PUBKEY && is_valid_mailbox(name)) { struct akl *akl; for(akl=opt.auto_key_locate;akl;akl=akl->next) { unsigned char *fpr=NULL; size_t fpr_len; switch(akl->type) { case AKL_CERT: glo_ctrl.in_auto_key_retrieve++; rc=keyserver_import_cert(name,&fpr,&fpr_len); glo_ctrl.in_auto_key_retrieve--; if(rc==0) log_info(_("automatically retrieved `%s' via %s\n"), name,"DNS CERT"); break; case AKL_PKA: glo_ctrl.in_auto_key_retrieve++; rc=keyserver_import_pka(name,&fpr,&fpr_len); glo_ctrl.in_auto_key_retrieve--; if(rc==0) log_info(_("automatically retrieved `%s' via %s\n"), name,"PKA"); break; case AKL_LDAP: glo_ctrl.in_auto_key_retrieve++; rc=keyserver_import_ldap(name,&fpr,&fpr_len); glo_ctrl.in_auto_key_retrieve--; if(rc==0) log_info(_("automatically retrieved `%s' via %s\n"), name,"LDAP"); break; case AKL_KEYSERVER: /* Strictly speaking, we don't need to only use a valid mailbox for the getname search, but it helps cut down on the problem of searching for something like "john" and getting a whole lot of keys back. */ if(opt.keyserver) { glo_ctrl.in_auto_key_retrieve++; rc=keyserver_import_name(name,&fpr,&fpr_len,opt.keyserver); glo_ctrl.in_auto_key_retrieve--; if(rc==0) log_info(_("automatically retrieved `%s' via %s\n"), name,opt.keyserver->uri); } break; case AKL_SPEC: { struct keyserver_spec *keyserver; keyserver=keyserver_match(akl->spec); glo_ctrl.in_auto_key_retrieve++; rc=keyserver_import_name(name,&fpr,&fpr_len,keyserver); glo_ctrl.in_auto_key_retrieve--; if(rc==0) log_info(_("automatically retrieved `%s' via %s\n"), name,akl->spec->uri); } break; } /* Use the fingerprint of the key that we actually fetched. This helps prevent problems where the key that we fetched doesn't have the same name that we used to fetch it. In the case of CERT and PKA, this is an actual security requirement as the URL might point to a key put in by an attacker. By forcing the use of the fingerprint, we won't use the attacker's key here. */ if(rc==0 && fpr) { int i; char fpr_string[MAX_FINGERPRINT_LEN*2+1]; assert(fpr_len<=MAX_FINGERPRINT_LEN); free_strlist(namelist); namelist=NULL; for(i=0;ikbpos, 0, sizeof ctx->kbpos); keydb_release (ctx->kr_handle); if( !ctx->not_allocated ) xfree( ctx ); } } /**************** * Search for a key with the given fingerprint. * FIXME: * We should replace this with the _byname function. Thiscsan be done * by creating a userID conforming to the unified fingerprint style. */ int get_pubkey_byfprint( PKT_public_key *pk, const byte *fprint, size_t fprint_len) { int rc; if( fprint_len == 20 || fprint_len == 16 ) { struct getkey_ctx_s ctx; KBNODE kb = NULL; memset( &ctx, 0, sizeof ctx ); ctx.exact = 1 ; ctx.not_allocated = 1; ctx.kr_handle = keydb_new (0); ctx.nitems = 1; ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16 : KEYDB_SEARCH_MODE_FPR20; memcpy( ctx.items[0].u.fpr, fprint, fprint_len ); rc = lookup( &ctx, &kb, 0 ); if (!rc && pk ) pk_from_block ( &ctx, pk, kb ); release_kbnode ( kb ); get_pubkey_end( &ctx ); } else rc = G10ERR_GENERAL; /* Oops */ return rc; } /* Get a public key and store it into the allocated pk. This function differs from get_pubkey_byfprint() in that it does not do a check of the key to avoid recursion. It should be used only in very certain cases. PK may be NULL to check just for the existance of the key. */ int get_pubkey_byfprint_fast (PKT_public_key *pk, const byte *fprint, size_t fprint_len) { int rc = 0; KEYDB_HANDLE hd; KBNODE keyblock; byte fprbuf[MAX_FINGERPRINT_LEN]; int i; for (i=0; i < MAX_FINGERPRINT_LEN && i < fprint_len; i++) fprbuf[i] = fprint[i]; while (i < MAX_FINGERPRINT_LEN) fprbuf[i++] = 0; hd = keydb_new (0); rc = keydb_search_fpr (hd, fprbuf); if (rc == -1) { keydb_release (hd); return G10ERR_NO_PUBKEY; } rc = keydb_get_keyblock (hd, &keyblock); keydb_release (hd); if (rc) { log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); return G10ERR_NO_PUBKEY; } assert ( keyblock->pkt->pkttype == PKT_PUBLIC_KEY || keyblock->pkt->pkttype == PKT_PUBLIC_SUBKEY ); if (pk) copy_public_key (pk, keyblock->pkt->pkt.public_key ); release_kbnode (keyblock); /* Not caching key here since it won't have all of the fields properly set. */ return 0; } /**************** * Search for a key with the given fingerprint and return the * complete keyblock which may have more than only this key. */ int get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint, size_t fprint_len ) { int rc; if( fprint_len == 20 || fprint_len == 16 ) { struct getkey_ctx_s ctx; memset( &ctx, 0, sizeof ctx ); ctx.not_allocated = 1; ctx.kr_handle = keydb_new (0); ctx.nitems = 1; ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16 : KEYDB_SEARCH_MODE_FPR20; memcpy( ctx.items[0].u.fpr, fprint, fprint_len ); rc = lookup( &ctx, ret_keyblock, 0 ); get_pubkey_end( &ctx ); } else rc = G10ERR_GENERAL; /* Oops */ return rc; } /**************** * Get a secret key by name and store it into sk * If NAME is NULL use the default key */ static int get_seckey_byname2( GETKEY_CTX *retctx, PKT_secret_key *sk, const char *name, int unprotect, KBNODE *retblock ) { STRLIST namelist = NULL; int rc,include_unusable=1; /* If we have no name, try to use the default secret key. If we have no default, we'll use the first usable one. */ if( !name && opt.def_secret_key && *opt.def_secret_key ) add_to_strlist( &namelist, opt.def_secret_key ); else if(name) add_to_strlist( &namelist, name ); else include_unusable=0; rc = key_byname( retctx, namelist, NULL, sk, 1, include_unusable, retblock, NULL ); free_strlist( namelist ); if( !rc && unprotect ) rc = check_secret_key( sk, 0 ); return rc; } int get_seckey_byname( PKT_secret_key *sk, const char *name, int unlock ) { return get_seckey_byname2 ( NULL, sk, name, unlock, NULL ); } int get_seckey_bynames( GETKEY_CTX *retctx, PKT_secret_key *sk, STRLIST names, KBNODE *ret_keyblock ) { return key_byname( retctx, names, NULL, sk, 1, 1, ret_keyblock, NULL ); } int get_seckey_next( GETKEY_CTX ctx, PKT_secret_key *sk, KBNODE *ret_keyblock ) { int rc; rc = lookup( ctx, ret_keyblock, 1 ); if ( !rc && sk && ret_keyblock ) sk_from_block ( ctx, sk, *ret_keyblock ); return rc; } void get_seckey_end( GETKEY_CTX ctx ) { get_pubkey_end( ctx ); } /**************** * Search for a key with the given fingerprint. * FIXME: * We should replace this with the _byname function. Thiscsan be done * by creating a userID conforming to the unified fingerprint style. */ int get_seckey_byfprint( PKT_secret_key *sk, const byte *fprint, size_t fprint_len) { int rc; if( fprint_len == 20 || fprint_len == 16 ) { struct getkey_ctx_s ctx; KBNODE kb = NULL; memset( &ctx, 0, sizeof ctx ); ctx.exact = 1 ; ctx.not_allocated = 1; ctx.kr_handle = keydb_new (1); ctx.nitems = 1; ctx.items[0].mode = fprint_len==16? KEYDB_SEARCH_MODE_FPR16 : KEYDB_SEARCH_MODE_FPR20; memcpy( ctx.items[0].u.fpr, fprint, fprint_len ); rc = lookup( &ctx, &kb, 1 ); if (!rc && sk ) sk_from_block ( &ctx, sk, kb ); release_kbnode ( kb ); get_seckey_end( &ctx ); } else rc = G10ERR_GENERAL; /* Oops */ return rc; } /* Search for a secret key with the given fingerprint and return the complete keyblock which may have more than only this key. */ int get_seckeyblock_byfprint (KBNODE *ret_keyblock, const byte *fprint, size_t fprint_len ) { int rc; struct getkey_ctx_s ctx; if (fprint_len != 20 && fprint_len == 16) return G10ERR_GENERAL; /* Oops */ memset (&ctx, 0, sizeof ctx); ctx.not_allocated = 1; ctx.kr_handle = keydb_new (1); ctx.nitems = 1; ctx.items[0].mode = (fprint_len==16 ? KEYDB_SEARCH_MODE_FPR16 : KEYDB_SEARCH_MODE_FPR20); memcpy (ctx.items[0].u.fpr, fprint, fprint_len); rc = lookup (&ctx, ret_keyblock, 1); get_seckey_end (&ctx); return rc; } /************************************************ ************* Merging stuff ******************** ************************************************/ /**************** * merge all selfsignatures with the keys. * FIXME: replace this at least for the public key parts * by merge_selfsigs. * It is still used in keyedit.c and * at 2 or 3 other places - check whether it is really needed. * It might be needed by the key edit and import stuff because * the keylock is changed. */ void merge_keys_and_selfsig( KBNODE keyblock ) { PKT_public_key *pk = NULL; PKT_secret_key *sk = NULL; PKT_signature *sig; KBNODE k; u32 kid[2] = { 0, 0 }; u32 sigdate = 0; if (keyblock && keyblock->pkt->pkttype == PKT_PUBLIC_KEY ) { /* divert to our new function */ merge_selfsigs (keyblock); return; } /* still need the old one because the new one can't handle secret keys */ for(k=keyblock; k; k = k->next ) { if( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { pk = k->pkt->pkt.public_key; sk = NULL; if( pk->version < 4 ) pk = NULL; /* not needed for old keys */ else if( k->pkt->pkttype == PKT_PUBLIC_KEY ) keyid_from_pk( pk, kid ); else if( !pk->expiredate ) { /* and subkey */ /* insert the expiration date here */ /*FIXME!!! pk->expiredate = subkeys_expiretime( k, kid );*/ } sigdate = 0; } else if( k->pkt->pkttype == PKT_SECRET_KEY || k->pkt->pkttype == PKT_SECRET_SUBKEY ) { pk = NULL; sk = k->pkt->pkt.secret_key; if( sk->version < 4 ) sk = NULL; else if( k->pkt->pkttype == PKT_SECRET_KEY ) keyid_from_sk( sk, kid ); sigdate = 0; } else if( (pk || sk ) && k->pkt->pkttype == PKT_SIGNATURE && (sig=k->pkt->pkt.signature)->sig_class >= 0x10 && sig->sig_class <= 0x30 && sig->version > 3 && !(sig->sig_class == 0x18 || sig->sig_class == 0x28) && sig->keyid[0] == kid[0] && sig->keyid[1] == kid[1] ) { /* okay this is a self-signature which can be used. * This is not used for subkey binding signature, becuase this * is done above. * FIXME: We should only use this if the signature is valid * but this is time consuming - we must provide another * way to handle this */ const byte *p; u32 ed; p = parse_sig_subpkt( sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL ); if( pk ) { ed = p? pk->timestamp + buf32_to_u32(p):0; if( sig->timestamp > sigdate ) { pk->expiredate = ed; sigdate = sig->timestamp; } } else { ed = p? sk->timestamp + buf32_to_u32(p):0; if( sig->timestamp > sigdate ) { sk->expiredate = ed; sigdate = sig->timestamp; } } } if(pk && (pk->expiredate==0 || (pk->max_expiredate && pk->expiredate>pk->max_expiredate))) pk->expiredate=pk->max_expiredate; if(sk && (sk->expiredate==0 || (sk->max_expiredate && sk->expiredate>sk->max_expiredate))) sk->expiredate=sk->max_expiredate; } } static int parse_key_usage(PKT_signature *sig) { int key_usage=0; const byte *p; size_t n; byte flags; p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_KEY_FLAGS,&n); if(p && n) { /* first octet of the keyflags */ flags=*p; if(flags & 1) { key_usage |= PUBKEY_USAGE_CERT; flags&=~1; } if(flags & 2) { key_usage |= PUBKEY_USAGE_SIG; flags&=~2; } /* We do not distinguish between encrypting communications and encrypting storage. */ if(flags & (0x04|0x08)) { key_usage |= PUBKEY_USAGE_ENC; flags&=~(0x04|0x08); } if(flags & 0x20) { key_usage |= PUBKEY_USAGE_AUTH; flags&=~0x20; } if(flags) key_usage |= PUBKEY_USAGE_UNKNOWN; if (!key_usage) key_usage |= PUBKEY_USAGE_NONE; } else if (p) /* Key flags of length zero. */ key_usage |= PUBKEY_USAGE_NONE; /* We set PUBKEY_USAGE_UNKNOWN to indicate that this key has a capability that we do not handle. This serves to distinguish between a zero key usage which we handle as the default capabilities for that algorithm, and a usage that we do not handle. Likewise we use PUBKEY_USAGE_NONE to indicate that key_flags have been given but they do not specify any usage. */ return key_usage; } /* * Apply information from SIGNODE (which is the valid self-signature * associated with that UID) to the UIDNODE: * - wether the UID has been revoked * - assumed creation date of the UID * - temporary store the keyflags here * - temporary store the key expiration time here * - mark whether the primary user ID flag hat been set. * - store the preferences */ static void fixup_uidnode ( KBNODE uidnode, KBNODE signode, u32 keycreated ) { PKT_user_id *uid = uidnode->pkt->pkt.user_id; PKT_signature *sig = signode->pkt->pkt.signature; const byte *p, *sym, *hash, *zip; size_t n, nsym, nhash, nzip; sig->flags.chosen_selfsig = 1; /* we chose this one */ uid->created = 0; /* not created == invalid */ if ( IS_UID_REV ( sig ) ) { uid->is_revoked = 1; return; /* has been revoked */ } else uid->is_revoked=0; uid->expiredate = sig->expiredate; if(sig->flags.expired) { uid->is_expired = 1; return; /* has expired */ } else uid->is_expired=0; uid->created = sig->timestamp; /* this one is okay */ uid->selfsigversion = sig->version; /* If we got this far, it's not expired :) */ uid->is_expired = 0; /* store the key flags in the helper variable for later processing */ uid->help_key_usage=parse_key_usage(sig); /* ditto for the key expiration */ p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); if( p && buf32_to_u32 (p) ) uid->help_key_expire = keycreated + buf32_to_u32(p); else uid->help_key_expire = 0; /* Set the primary user ID flag - we will later wipe out some * of them to only have one in our keyblock */ uid->is_primary = 0; p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PRIMARY_UID, NULL ); if ( p && *p ) uid->is_primary = 2; /* We could also query this from the unhashed area if it is not in * the hased area and then later try to decide which is the better * there should be no security problem with this. * For now we only look at the hashed one. */ /* Now build the preferences list. These must come from the hashed section so nobody can modify the ciphers a key is willing to accept. */ p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_SYM, &n ); sym = p; nsym = p?n:0; p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_HASH, &n ); hash = p; nhash = p?n:0; p = parse_sig_subpkt ( sig->hashed, SIGSUBPKT_PREF_COMPR, &n ); zip = p; nzip = p?n:0; if (uid->prefs) xfree (uid->prefs); n = nsym + nhash + nzip; if (!n) uid->prefs = NULL; else { uid->prefs = xmalloc (sizeof (*uid->prefs) * (n+1)); n = 0; for (; nsym; nsym--, n++) { uid->prefs[n].type = PREFTYPE_SYM; uid->prefs[n].value = *sym++; } for (; nhash; nhash--, n++) { uid->prefs[n].type = PREFTYPE_HASH; uid->prefs[n].value = *hash++; } for (; nzip; nzip--, n++) { uid->prefs[n].type = PREFTYPE_ZIP; uid->prefs[n].value = *zip++; } uid->prefs[n].type = PREFTYPE_NONE; /* end of list marker */ uid->prefs[n].value = 0; } /* see whether we have the MDC feature */ uid->flags.mdc = 0; p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_FEATURES, &n); if (p && n && (p[0] & 0x01)) uid->flags.mdc = 1; /* and the keyserver modify flag */ uid->flags.ks_modify = 1; p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KS_FLAGS, &n); if (p && n && (p[0] & 0x80)) uid->flags.ks_modify = 0; } static void sig_to_revoke_info(PKT_signature *sig,struct revoke_info *rinfo) { rinfo->date = sig->timestamp; rinfo->algo = sig->pubkey_algo; rinfo->keyid[0] = sig->keyid[0]; rinfo->keyid[1] = sig->keyid[1]; } static void merge_selfsigs_main(KBNODE keyblock, int *r_revoked, struct revoke_info *rinfo) { PKT_public_key *pk = NULL; KBNODE k; u32 kid[2]; u32 sigdate, uiddate, uiddate2; KBNODE signode, uidnode, uidnode2; u32 curtime = make_timestamp (); unsigned int key_usage = 0; u32 keytimestamp = 0; u32 key_expire = 0; int key_expire_seen = 0; byte sigversion = 0; *r_revoked = 0; memset(rinfo,0,sizeof(*rinfo)); if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) BUG (); pk = keyblock->pkt->pkt.public_key; keytimestamp = pk->timestamp; keyid_from_pk( pk, kid ); pk->main_keyid[0] = kid[0]; pk->main_keyid[1] = kid[1]; if ( pk->version < 4 ) { /* before v4 the key packet itself contains the expiration * date and there was no way to change it, so we start with * the one from the key packet */ key_expire = pk->max_expiredate; key_expire_seen = 1; } /* first pass: find the latest direct key self-signature. * We assume that the newest one overrides all others */ /* In case this key was already merged */ xfree(pk->revkey); pk->revkey=NULL; pk->numrevkeys=0; signode = NULL; sigdate = 0; /* helper to find the latest signature */ for(k=keyblock; k && k->pkt->pkttype != PKT_USER_ID; k = k->next ) { if ( k->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = k->pkt->pkt.signature; if ( sig->keyid[0] == kid[0] && sig->keyid[1]==kid[1] ) { if ( check_key_signature( keyblock, k, NULL ) ) ; /* signature did not verify */ else if ( IS_KEY_REV (sig) ){ /* key has been revoked - there is no way to override * such a revocation, so we theoretically can stop now. * We should not cope with expiration times for revocations * here because we have to assume that an attacker can * generate all kinds of signatures. However due to the * fact that the key has been revoked it does not harm * either and by continuing we gather some more info on * that key. */ *r_revoked = 1; sig_to_revoke_info(sig,rinfo); } else if ( IS_KEY_SIG (sig) ) { /* Add any revocation keys onto the pk. This is particularly interesting since we normally only get data from the most recent 1F signature, but you need multiple 1F sigs to properly handle revocation keys (PGP does it this way, and a revocation key could be sensitive and hence in a different signature). */ if(sig->revkey) { int i; pk->revkey= xrealloc(pk->revkey,sizeof(struct revocation_key)* (pk->numrevkeys+sig->numrevkeys)); for(i=0;inumrevkeys;i++) memcpy(&pk->revkey[pk->numrevkeys++], sig->revkey[i], sizeof(struct revocation_key)); } if( sig->timestamp >= sigdate ) { if(sig->flags.expired) ; /* signature has expired - ignore it */ else { sigdate = sig->timestamp; signode = k; if( sig->version > sigversion ) sigversion = sig->version; } } } } } } /* Remove dupes from the revocation keys */ if(pk->revkey) { int i,j,x,changed=0; for(i=0;inumrevkeys;i++) { for(j=i+1;jnumrevkeys;j++) { if(memcmp(&pk->revkey[i],&pk->revkey[j], sizeof(struct revocation_key))==0) { /* remove j */ for(x=j;xnumrevkeys-1;x++) pk->revkey[x]=pk->revkey[x+1]; pk->numrevkeys--; j--; changed=1; } } } if(changed) pk->revkey=xrealloc(pk->revkey, pk->numrevkeys*sizeof(struct revocation_key)); } if ( signode ) { /* some information from a direct key signature take precedence * over the same information given in UID sigs. */ PKT_signature *sig = signode->pkt->pkt.signature; const byte *p; key_usage=parse_key_usage(sig); p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); if( p && buf32_to_u32 (p) ) { key_expire = keytimestamp + buf32_to_u32 (p); key_expire_seen = 1; } /* mark that key as valid: one direct key signature should * render a key as valid */ pk->is_valid = 1; } /* pass 1.5: look for key revocation signatures that were not made by the key (i.e. did a revocation key issue a revocation for us?). Only bother to do this if there is a revocation key in the first place and we're not revoked already. */ if(!*r_revoked && pk->revkey) for(k=keyblock; k && k->pkt->pkttype != PKT_USER_ID; k = k->next ) { if ( k->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = k->pkt->pkt.signature; if(IS_KEY_REV(sig) && (sig->keyid[0]!=kid[0] || sig->keyid[1]!=kid[1])) { int rc=check_revocation_keys(pk,sig); if(rc==0) { *r_revoked=2; sig_to_revoke_info(sig,rinfo); /* don't continue checking since we can't be any more revoked than this */ break; } else if(rc==G10ERR_NO_PUBKEY) pk->maybe_revoked=1; /* A failure here means the sig did not verify, was not issued by a revocation key, or a revocation key loop was broken. If a revocation key isn't findable, however, the key might be revoked and we don't know it. */ /* TODO: In the future handle subkey and cert revocations? PGP doesn't, but it's in 2440. */ } } } /* second pass: look at the self-signature of all user IDs */ signode = uidnode = NULL; sigdate = 0; /* helper to find the latest signature in one user ID */ for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { if ( k->pkt->pkttype == PKT_USER_ID ) { if ( uidnode && signode ) { fixup_uidnode ( uidnode, signode, keytimestamp ); pk->is_valid=1; } uidnode = k; signode = NULL; sigdate = 0; } else if ( k->pkt->pkttype == PKT_SIGNATURE && uidnode ) { PKT_signature *sig = k->pkt->pkt.signature; if ( sig->keyid[0] == kid[0] && sig->keyid[1]==kid[1] ) { if ( check_key_signature( keyblock, k, NULL ) ) ; /* signature did not verify */ else if ( (IS_UID_SIG (sig) || IS_UID_REV (sig)) && sig->timestamp >= sigdate ) { /* Note: we allow to invalidate cert revocations * by a newer signature. An attacker can't use this * because a key should be revoced with a key revocation. * The reason why we have to allow for that is that at * one time an email address may become invalid but later * the same email address may become valid again (hired, * fired, hired again). */ sigdate = sig->timestamp; signode = k; signode->pkt->pkt.signature->flags.chosen_selfsig=0; if( sig->version > sigversion ) sigversion = sig->version; } } } } if ( uidnode && signode ) { fixup_uidnode ( uidnode, signode, keytimestamp ); pk->is_valid = 1; } /* If the key isn't valid yet, and we have --allow-non-selfsigned-uid set, then force it valid. */ if(!pk->is_valid && opt.allow_non_selfsigned_uid) { if(opt.verbose) log_info(_("Invalid key %s made valid by" " --allow-non-selfsigned-uid\n"),keystr_from_pk(pk)); pk->is_valid = 1; } /* The key STILL isn't valid, so try and find an ultimately trusted signature. */ if(!pk->is_valid) { uidnode=NULL; for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k=k->next) { if ( k->pkt->pkttype == PKT_USER_ID ) uidnode = k; else if ( k->pkt->pkttype == PKT_SIGNATURE && uidnode ) { PKT_signature *sig = k->pkt->pkt.signature; if(sig->keyid[0] != kid[0] || sig->keyid[1]!=kid[1]) { PKT_public_key *ultimate_pk; ultimate_pk=xmalloc_clear(sizeof(*ultimate_pk)); /* We don't want to use the full get_pubkey to avoid infinite recursion in certain cases. There is no reason to check that an ultimately trusted key is still valid - if it has been revoked or the user should also renmove the ultimate trust flag. */ if(get_pubkey_fast(ultimate_pk,sig->keyid)==0 && check_key_signature2(keyblock,k,ultimate_pk, NULL,NULL,NULL,NULL)==0 && get_ownertrust(ultimate_pk)==TRUST_ULTIMATE) { free_public_key(ultimate_pk); pk->is_valid=1; break; } free_public_key(ultimate_pk); } } } } /* Record the highest selfsig version so we know if this is a v3 key through and through, or a v3 key with a v4 selfsig somewhere. This is useful in a few places to know if the key must be treated as PGP2-style or OpenPGP-style. Note that a selfsig revocation with a higher version number will also raise this value. This is okay since such a revocation must be issued by the user (i.e. it cannot be issued by someone else to modify the key behavior.) */ pk->selfsigversion=sigversion; /* Now that we had a look at all user IDs we can now get some information * from those user IDs. */ if ( !key_usage ) { /* find the latest user ID with key flags set */ uiddate = 0; /* helper to find the latest user ID */ for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { if ( k->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = k->pkt->pkt.user_id; if ( uid->help_key_usage && uid->created > uiddate ) { key_usage = uid->help_key_usage; uiddate = uid->created; } } } } if ( !key_usage ) { /* no key flags at all: get it from the algo */ key_usage = openpgp_pk_algo_usage ( pk->pubkey_algo ); } else { /* check that the usage matches the usage as given by the algo */ int x = openpgp_pk_algo_usage ( pk->pubkey_algo ); if ( x ) /* mask it down to the actual allowed usage */ key_usage &= x; } /* Whatever happens, it's a primary key, so it can certify. */ pk->pubkey_usage = key_usage|PUBKEY_USAGE_CERT; if ( !key_expire_seen ) { /* find the latest valid user ID with a key expiration set * Note, that this may be a different one from the above because * some user IDs may have no expiration date set */ uiddate = 0; for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { if ( k->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = k->pkt->pkt.user_id; if ( uid->help_key_expire && uid->created > uiddate ) { key_expire = uid->help_key_expire; uiddate = uid->created; } } } } /* Currently only v3 keys have a maximum expiration date, but I'll bet v5 keys get this feature again. */ if(key_expire==0 || (pk->max_expiredate && key_expire>pk->max_expiredate)) key_expire=pk->max_expiredate; pk->has_expired = key_expire >= curtime? 0 : key_expire; pk->expiredate = key_expire; /* Fixme: we should see how to get rid of the expiretime fields but * this needs changes at other places too. */ /* and now find the real primary user ID and delete all others */ uiddate = uiddate2 = 0; uidnode = uidnode2 = NULL; for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { if ( k->pkt->pkttype == PKT_USER_ID && !k->pkt->pkt.user_id->attrib_data) { PKT_user_id *uid = k->pkt->pkt.user_id; if (uid->is_primary) { if(uid->created > uiddate) { uiddate = uid->created; uidnode = k; } else if(uid->created==uiddate && uidnode) { /* The dates are equal, so we need to do a different (and arbitrary) comparison. This should rarely, if ever, happen. It's good to try and guarantee that two different GnuPG users with two different keyrings at least pick the same primary. */ if(cmp_user_ids(uid,uidnode->pkt->pkt.user_id)>0) uidnode=k; } } else { if(uid->created > uiddate2) { uiddate2 = uid->created; uidnode2 = k; } else if(uid->created==uiddate2 && uidnode2) { if(cmp_user_ids(uid,uidnode2->pkt->pkt.user_id)>0) uidnode2=k; } } } } if ( uidnode ) { for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { if ( k->pkt->pkttype == PKT_USER_ID && !k->pkt->pkt.user_id->attrib_data) { PKT_user_id *uid = k->pkt->pkt.user_id; if ( k != uidnode ) uid->is_primary = 0; } } } else if( uidnode2 ) { /* none is flagged primary - use the latest user ID we have, and disambiguate with the arbitrary packet comparison. */ uidnode2->pkt->pkt.user_id->is_primary = 1; } else { /* None of our uids were self-signed, so pick the one that sorts first to be the primary. This is the best we can do here since there are no self sigs to date the uids. */ uidnode = NULL; for(k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { if(k->pkt->pkttype==PKT_USER_ID && !k->pkt->pkt.user_id->attrib_data) { if(!uidnode) { uidnode=k; uidnode->pkt->pkt.user_id->is_primary=1; continue; } else { if(cmp_user_ids(k->pkt->pkt.user_id, uidnode->pkt->pkt.user_id)>0) { uidnode->pkt->pkt.user_id->is_primary=0; uidnode=k; uidnode->pkt->pkt.user_id->is_primary=1; } else k->pkt->pkt.user_id->is_primary=0; /* just to be safe */ } } } } } /* Convert a buffer to a signature. Useful for 0x19 embedded sigs. Caller must free the signature when they are done. */ static PKT_signature * buf_to_sig(const byte *buf,size_t len) { PKT_signature *sig=xmalloc_clear(sizeof(PKT_signature)); IOBUF iobuf=iobuf_temp_with_content(buf,len); int save_mode=set_packet_list_mode(0); if(parse_signature(iobuf,PKT_SIGNATURE,len,sig)!=0) { xfree(sig); sig=NULL; } set_packet_list_mode(save_mode); iobuf_close(iobuf); return sig; } static void merge_selfsigs_subkey( KBNODE keyblock, KBNODE subnode ) { PKT_public_key *mainpk = NULL, *subpk = NULL; PKT_signature *sig; KBNODE k; u32 mainkid[2]; u32 sigdate = 0; KBNODE signode; u32 curtime = make_timestamp (); unsigned int key_usage = 0; u32 keytimestamp = 0; u32 key_expire = 0; const byte *p; if ( subnode->pkt->pkttype != PKT_PUBLIC_SUBKEY ) BUG (); mainpk = keyblock->pkt->pkt.public_key; if ( mainpk->version < 4 ) return; /* (actually this should never happen) */ keyid_from_pk( mainpk, mainkid ); subpk = subnode->pkt->pkt.public_key; keytimestamp = subpk->timestamp; subpk->is_valid = 0; subpk->main_keyid[0] = mainpk->main_keyid[0]; subpk->main_keyid[1] = mainpk->main_keyid[1]; /* find the latest key binding self-signature. */ signode = NULL; sigdate = 0; /* helper to find the latest signature */ for(k=subnode->next; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next ) { if ( k->pkt->pkttype == PKT_SIGNATURE ) { sig = k->pkt->pkt.signature; if ( sig->keyid[0] == mainkid[0] && sig->keyid[1]==mainkid[1] ) { if ( check_key_signature( keyblock, k, NULL ) ) ; /* signature did not verify */ else if ( IS_SUBKEY_REV (sig) ) { /* Note that this means that the date on a revocation sig does not matter - even if the binding sig is dated after the revocation sig, the subkey is still marked as revoked. This seems ok, as it is just as easy to make new subkeys rather than re-sign old ones as the problem is in the distribution. Plus, PGP (7) does this the same way. */ subpk->is_revoked = 1; sig_to_revoke_info(sig,&subpk->revoked); /* although we could stop now, we continue to * figure out other information like the old expiration * time */ } else if ( IS_SUBKEY_SIG (sig) && sig->timestamp >= sigdate ) { if(sig->flags.expired) ; /* signature has expired - ignore it */ else { sigdate = sig->timestamp; signode = k; signode->pkt->pkt.signature->flags.chosen_selfsig=0; } } } } } /* no valid key binding */ if ( !signode ) return; sig = signode->pkt->pkt.signature; sig->flags.chosen_selfsig=1; /* so we know which selfsig we chose later */ key_usage=parse_key_usage(sig); if ( !key_usage ) { /* no key flags at all: get it from the algo */ key_usage = openpgp_pk_algo_usage ( subpk->pubkey_algo ); } else { /* check that the usage matches the usage as given by the algo */ int x = openpgp_pk_algo_usage ( subpk->pubkey_algo ); if ( x ) /* mask it down to the actual allowed usage */ key_usage &= x; } subpk->pubkey_usage = key_usage; p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE, NULL); if ( p && buf32_to_u32 (p) ) key_expire = keytimestamp + buf32_to_u32 (p); else key_expire = 0; subpk->has_expired = key_expire >= curtime? 0 : key_expire; subpk->expiredate = key_expire; /* Check that algo exists. Elgamal sign+encrypt are only allowed with option --rfc2440. */ if (RFC2440 && subpk->pubkey_algo == PUBKEY_ALGO_ELGAMAL) ; else if(check_pubkey_algo(subpk->pubkey_algo)) return; subpk->is_valid = 1; /* Find the most recent 0x19 embedded signature on our self-sig. */ if(subpk->backsig==0) { int seq=0; size_t n; PKT_signature *backsig=NULL; sigdate=0; /* We do this while() since there may be other embedded signatures in the future. We only want 0x19 here. */ while((p=enum_sig_subpkt(sig->hashed, SIGSUBPKT_SIGNATURE,&n,&seq,NULL))) if(n>3 && ((p[0]==3 && p[2]==0x19) || (p[0]==4 && p[1]==0x19))) { PKT_signature *tempsig=buf_to_sig(p,n); if(tempsig) { if(tempsig->timestamp>sigdate) { if(backsig) free_seckey_enc(backsig); backsig=tempsig; sigdate=backsig->timestamp; } else free_seckey_enc(tempsig); } } seq=0; /* It is safe to have this in the unhashed area since the 0x19 is located on the selfsig for convenience, not security. */ while((p=enum_sig_subpkt(sig->unhashed,SIGSUBPKT_SIGNATURE, &n,&seq,NULL))) if(n>3 && ((p[0]==3 && p[2]==0x19) || (p[0]==4 && p[1]==0x19))) { PKT_signature *tempsig=buf_to_sig(p,n); if(tempsig) { if(tempsig->timestamp>sigdate) { if(backsig) free_seckey_enc(backsig); backsig=tempsig; sigdate=backsig->timestamp; } else free_seckey_enc(tempsig); } } if(backsig) { /* At ths point, backsig contains the most recent 0x19 sig. Let's see if it is good. */ /* 2==valid, 1==invalid, 0==didn't check */ if(check_backsig(mainpk,subpk,backsig)==0) subpk->backsig=2; else subpk->backsig=1; free_seckey_enc(backsig); } } } /* * Merge information from the self-signatures with the key, so that * we can later use them more easy. * The function works by first applying the self signatures to the * primary key and the to each subkey. * Here are the rules we use to decide which inormation from which * self-signature is used: * We check all self signatures or validity and ignore all invalid signatures. * All signatures are then ordered by their creation date .... * For the primary key: * FIXME the docs */ static void merge_selfsigs( KBNODE keyblock ) { KBNODE k; int revoked; struct revoke_info rinfo; PKT_public_key *main_pk; prefitem_t *prefs; int mdc_feature; if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY ) { if (keyblock->pkt->pkttype == PKT_SECRET_KEY ) { log_error ("expected public key but found secret key " "- must stop\n"); /* we better exit here becuase a public key is expected at other places too. FIXME: Figure this out earlier and don't get to here at all */ g10_exit (1); } BUG (); } merge_selfsigs_main ( keyblock, &revoked, &rinfo ); /* now merge in the data from each of the subkeys */ for(k=keyblock; k; k = k->next ) { if ( k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { merge_selfsigs_subkey ( keyblock, k ); } } main_pk = keyblock->pkt->pkt.public_key; if ( revoked || main_pk->has_expired || !main_pk->is_valid ) { /* if the primary key is revoked, expired, or invalid we * better set the appropriate flags on that key and all * subkeys */ for(k=keyblock; k; k = k->next ) { if ( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { PKT_public_key *pk = k->pkt->pkt.public_key; if(!main_pk->is_valid) pk->is_valid = 0; if(revoked && !pk->is_revoked) { pk->is_revoked = revoked; memcpy(&pk->revoked,&rinfo,sizeof(rinfo)); } if(main_pk->has_expired) pk->has_expired = main_pk->has_expired; } } return; } /* set the preference list of all keys to those of the primary real * user ID. Note: we use these preferences when we don't know by * which user ID the key has been selected. * fixme: we should keep atoms of commonly used preferences or * use reference counting to optimize the preference lists storage. * FIXME: it might be better to use the intersection of * all preferences. * Do a similar thing for the MDC feature flag. */ prefs = NULL; mdc_feature = 0; for (k=keyblock; k && k->pkt->pkttype != PKT_PUBLIC_SUBKEY; k = k->next) { if (k->pkt->pkttype == PKT_USER_ID && !k->pkt->pkt.user_id->attrib_data && k->pkt->pkt.user_id->is_primary) { prefs = k->pkt->pkt.user_id->prefs; mdc_feature = k->pkt->pkt.user_id->flags.mdc; break; } } for(k=keyblock; k; k = k->next ) { if ( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { PKT_public_key *pk = k->pkt->pkt.public_key; if (pk->prefs) xfree (pk->prefs); pk->prefs = copy_prefs (prefs); pk->mdc_feature = mdc_feature; } } } /* * Merge the secret keys from secblock into the pubblock thereby * replacing the public (sub)keys with their secret counterparts Hmmm: * It might be better to get away from the concept of entire secret * keys at all and have a way to store just the real secret parts * from the key. */ static void merge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) { KBNODE pub; assert ( pubblock->pkt->pkttype == PKT_PUBLIC_KEY ); assert ( secblock->pkt->pkttype == PKT_SECRET_KEY ); for (pub=pubblock; pub; pub = pub->next ) { if ( pub->pkt->pkttype == PKT_PUBLIC_KEY ) { PKT_public_key *pk = pub->pkt->pkt.public_key; PKT_secret_key *sk = secblock->pkt->pkt.secret_key; assert ( pub == pubblock ); /* only in the first node */ /* there is nothing to compare in this case, so just replace * some information */ copy_public_parts_to_secret_key ( pk, sk ); free_public_key ( pk ); pub->pkt->pkttype = PKT_SECRET_KEY; pub->pkt->pkt.secret_key = copy_secret_key (NULL, sk); } else if ( pub->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { KBNODE sec; PKT_public_key *pk = pub->pkt->pkt.public_key; /* this is more complicated: it may happen that the sequence * of the subkeys dosn't match, so we have to find the * appropriate secret key */ for (sec=secblock->next; sec; sec = sec->next ) { if ( sec->pkt->pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *sk = sec->pkt->pkt.secret_key; if ( !cmp_public_secret_key ( pk, sk ) ) { copy_public_parts_to_secret_key ( pk, sk ); free_public_key ( pk ); pub->pkt->pkttype = PKT_SECRET_SUBKEY; pub->pkt->pkt.secret_key = copy_secret_key (NULL, sk); break; } } } if ( !sec ) BUG(); /* already checked in premerge */ } } } /* This function checks that for every public subkey a corresponding * secret subkey is available and deletes the public subkey otherwise. * We need this function because we can't delete it later when we * actually merge the secret parts into the pubring. * The function also plays some games with the node flags. */ static void premerge_public_with_secret ( KBNODE pubblock, KBNODE secblock ) { KBNODE last, pub; assert ( pubblock->pkt->pkttype == PKT_PUBLIC_KEY ); assert ( secblock->pkt->pkttype == PKT_SECRET_KEY ); for (pub=pubblock,last=NULL; pub; last = pub, pub = pub->next ) { pub->flag &= ~3; /* reset bits 0 and 1 */ if ( pub->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { KBNODE sec; PKT_public_key *pk = pub->pkt->pkt.public_key; for (sec=secblock->next; sec; sec = sec->next ) { if ( sec->pkt->pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *sk = sec->pkt->pkt.secret_key; if ( !cmp_public_secret_key ( pk, sk ) ) { if ( sk->protect.s2k.mode == 1001 ) { /* The secret parts are not available so we can't use that key for signing etc. Fix the pubkey usage */ pk->pubkey_usage &= ~(PUBKEY_USAGE_SIG |PUBKEY_USAGE_AUTH); } /* transfer flag bits 0 and 1 to the pubblock */ pub->flag |= (sec->flag &3); break; } } } if ( !sec ) { KBNODE next, ll; if (opt.verbose) log_info (_("no secret subkey" " for public subkey %s - ignoring\n"), keystr_from_pk (pk)); /* we have to remove the subkey in this case */ assert ( last ); /* find the next subkey */ for (next=pub->next,ll=pub; next && next->pkt->pkttype != PKT_PUBLIC_SUBKEY; ll = next, next = next->next ) ; /* make new link */ last->next = next; /* release this public subkey with all sigs */ ll->next = NULL; release_kbnode( pub ); /* let the loop continue */ pub = last; } } } /* We need to copy the found bits (0 and 1) from the secret key to the public key. This has already been done for the subkeys but got lost on the primary key - fix it here *. */ pubblock->flag |= (secblock->flag & 3); } /* See see whether the key fits * our requirements and in case we do not * request the primary key, we should select * a suitable subkey. * FIXME: Check against PGP 7 whether we still need a kludge * to favor type 16 keys over type 20 keys when type 20 * has not been explitely requested. * Returns: True when a suitable key has been found. * * We have to distinguish four cases: FIXME! * 1. No usage and no primary key requested * Examples for this case are that we have a keyID to be used * for decrytion or verification. * 2. No usage but primary key requested * This is the case for all functions which work on an * entire keyblock, e.g. for editing or listing * 3. Usage and primary key requested * FXME * 4. Usage but no primary key requested * FIXME * FIXME: Tell what is going to happen here and something about the rationale * Note: We don't use this function if no specific usage is requested; * This way the getkey functions can be used for plain key listings. * * CTX ist the keyblock we are investigating, if FOUNDK is not NULL this * is the key we actually found by looking at the keyid or a fingerprint and * may eitehr point to the primary or one of the subkeys. */ static int finish_lookup (GETKEY_CTX ctx) { KBNODE keyblock = ctx->keyblock; KBNODE k; KBNODE foundk = NULL; PKT_user_id *foundu = NULL; #define USAGE_MASK (PUBKEY_USAGE_SIG|PUBKEY_USAGE_ENC|PUBKEY_USAGE_CERT) unsigned int req_usage = ( ctx->req_usage & USAGE_MASK ); /* Request the primary if we're certifying another key, and also if signing data while --pgp6 or --pgp7 is on since pgp 6 and 7 do not understand signatures made by a signing subkey. PGP 8 does. */ int req_prim = (ctx->req_usage & PUBKEY_USAGE_CERT) || ((PGP6 || PGP7) && (ctx->req_usage & PUBKEY_USAGE_SIG)); u32 latest_date; KBNODE latest_key; u32 curtime = make_timestamp (); assert( keyblock->pkt->pkttype == PKT_PUBLIC_KEY ); ctx->found_key = NULL; if (ctx->exact) { for (k=keyblock; k; k = k->next) { if ( (k->flag & 1) ) { assert ( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ); foundk = k; break; } } } for (k=keyblock; k; k = k->next) { if ( (k->flag & 2) ) { assert (k->pkt->pkttype == PKT_USER_ID); foundu = k->pkt->pkt.user_id; break; } } if ( DBG_CACHE ) log_debug( "finish_lookup: checking key %08lX (%s)(req_usage=%x)\n", (ulong)keyid_from_pk( keyblock->pkt->pkt.public_key, NULL), foundk? "one":"all", req_usage); if (!req_usage) { latest_key = foundk? foundk:keyblock; goto found; } latest_date = 0; latest_key = NULL; /* do not look at subkeys if a certification key is requested */ if ((!foundk || foundk->pkt->pkttype == PKT_PUBLIC_SUBKEY) && !req_prim) { KBNODE nextk; /* either start a loop or check just this one subkey */ for (k=foundk?foundk:keyblock; k; k = nextk ) { PKT_public_key *pk; nextk = k->next; if ( k->pkt->pkttype != PKT_PUBLIC_SUBKEY ) continue; if ( foundk ) nextk = NULL; /* what a hack */ pk = k->pkt->pkt.public_key; if (DBG_CACHE) log_debug( "\tchecking subkey %08lX\n", (ulong)keyid_from_pk( pk, NULL)); if ( !pk->is_valid ) { if (DBG_CACHE) log_debug( "\tsubkey not valid\n"); continue; } if ( pk->is_revoked ) { if (DBG_CACHE) log_debug( "\tsubkey has been revoked\n"); continue; } if ( pk->has_expired ) { if (DBG_CACHE) log_debug( "\tsubkey has expired\n"); continue; } if ( pk->timestamp > curtime && !opt.ignore_valid_from ) { if (DBG_CACHE) log_debug( "\tsubkey not yet valid\n"); continue; } if ( !((pk->pubkey_usage&USAGE_MASK) & req_usage) ) { if (DBG_CACHE) log_debug( "\tusage does not match: want=%x have=%x\n", req_usage, pk->pubkey_usage ); continue; } if (DBG_CACHE) log_debug( "\tsubkey looks fine\n"); if ( pk->timestamp > latest_date ) { latest_date = pk->timestamp; latest_key = k; } } } /* Okay now try the primary key unless we want an exact * key ID match on a subkey */ if ((!latest_key && !(ctx->exact && foundk != keyblock)) || req_prim) { PKT_public_key *pk; if (DBG_CACHE && !foundk && !req_prim ) log_debug( "\tno suitable subkeys found - trying primary\n"); pk = keyblock->pkt->pkt.public_key; if ( !pk->is_valid ) { if (DBG_CACHE) log_debug( "\tprimary key not valid\n"); } else if ( pk->is_revoked ) { if (DBG_CACHE) log_debug( "\tprimary key has been revoked\n"); } else if ( pk->has_expired ) { if (DBG_CACHE) log_debug( "\tprimary key has expired\n"); } else if ( !((pk->pubkey_usage&USAGE_MASK) & req_usage) ) { if (DBG_CACHE) log_debug( "\tprimary key usage does not match: " "want=%x have=%x\n", req_usage, pk->pubkey_usage ); } else { /* okay */ if (DBG_CACHE) log_debug( "\tprimary key may be used\n"); latest_key = keyblock; latest_date = pk->timestamp; } } if ( !latest_key ) { if (DBG_CACHE) log_debug("\tno suitable key found - giving up\n"); return 0; } found: if (DBG_CACHE) log_debug( "\tusing key %08lX\n", (ulong)keyid_from_pk( latest_key->pkt->pkt.public_key, NULL) ); if (latest_key) { PKT_public_key *pk = latest_key->pkt->pkt.public_key; if (pk->user_id) free_user_id (pk->user_id); pk->user_id = scopy_user_id (foundu); } ctx->found_key = latest_key; if (latest_key != keyblock && opt.verbose) { char *tempkeystr= xstrdup(keystr_from_pk(latest_key->pkt->pkt.public_key)); log_info(_("using subkey %s instead of primary key %s\n"), tempkeystr, keystr_from_pk(keyblock->pkt->pkt.public_key)); xfree(tempkeystr); } cache_user_id( keyblock ); return 1; /* found */ } static int lookup( GETKEY_CTX ctx, KBNODE *ret_keyblock, int secmode ) { int rc; KBNODE secblock = NULL; /* helper */ int no_suitable_key = 0; rc = 0; while (!(rc = keydb_search (ctx->kr_handle, ctx->items, ctx->nitems))) { /* If we are searching for the first key we have to make sure that the next interation does not no an implicit reset. This can be triggered by an empty key ring. */ if (ctx->nitems && ctx->items->mode == KEYDB_SEARCH_MODE_FIRST) ctx->items->mode = KEYDB_SEARCH_MODE_NEXT; rc = keydb_get_keyblock (ctx->kr_handle, &ctx->keyblock); if (rc) { log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); rc = 0; goto skip; } if ( secmode ) { /* find the correspondig public key and use this * this one for the selection process */ u32 aki[2]; KBNODE k = ctx->keyblock; if (k->pkt->pkttype != PKT_SECRET_KEY) BUG(); keyid_from_sk (k->pkt->pkt.secret_key, aki); k = get_pubkeyblock (aki); if( !k ) { if (!opt.quiet) log_info(_("key %s: secret key without public key" " - skipped\n"), keystr(aki)); goto skip; } secblock = ctx->keyblock; ctx->keyblock = k; premerge_public_with_secret ( ctx->keyblock, secblock ); } /* warning: node flag bits 0 and 1 should be preserved by * merge_selfsigs. For secret keys, premerge did tranfer the * keys to the keyblock */ merge_selfsigs ( ctx->keyblock ); if ( finish_lookup (ctx) ) { no_suitable_key = 0; if ( secmode ) { merge_public_with_secret ( ctx->keyblock, secblock); release_kbnode (secblock); secblock = NULL; } goto found; } else no_suitable_key = 1; skip: /* release resources and continue search */ if ( secmode ) { release_kbnode( secblock ); secblock = NULL; } release_kbnode( ctx->keyblock ); ctx->keyblock = NULL; } found: if( rc && rc != -1 ) log_error("keydb_search failed: %s\n", g10_errstr(rc)); if( !rc ) { *ret_keyblock = ctx->keyblock; /* return the keyblock */ ctx->keyblock = NULL; } else if (rc == -1 && no_suitable_key) rc = secmode ? G10ERR_UNU_SECKEY : G10ERR_UNU_PUBKEY; else if( rc == -1 ) rc = secmode ? G10ERR_NO_SECKEY : G10ERR_NO_PUBKEY; if ( secmode ) { release_kbnode( secblock ); secblock = NULL; } release_kbnode( ctx->keyblock ); ctx->keyblock = NULL; ctx->last_rc = rc; return rc; } /**************** * FIXME: Replace by the generic function * It does not work as it is right now - it is used at * 2 places: a) to get the key for an anonyous recipient * b) to get the ultimately trusted keys. * The a) usage might have some problems. * * set with_subkeys true to include subkeys * set with_spm true to include secret-parts-missing keys * * Enumerate all primary secret keys. Caller must use these procedure: * 1) create a void pointer and initialize it to NULL * 2) pass this void pointer by reference to this function * and provide space for the secret key (pass a buffer for sk) * 3) call this function as long as it does not return -1 * to indicate EOF. * 4) Always call this function a last time with SK set to NULL, * so that can free it's context. */ int enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys, int with_spm ) { int rc=0; struct { int eof; int first; KEYDB_HANDLE hd; KBNODE keyblock; KBNODE node; } *c = *context; if( !c ) { /* make a new context */ c = xmalloc_clear( sizeof *c ); *context = c; c->hd = keydb_new (1); c->first = 1; c->keyblock = NULL; c->node = NULL; } if( !sk ) { /* free the context */ keydb_release (c->hd); release_kbnode (c->keyblock); xfree( c ); *context = NULL; return 0; } if( c->eof ) return -1; do { /* get the next secret key from the current keyblock */ for (; c->node; c->node = c->node->next) { if ((c->node->pkt->pkttype == PKT_SECRET_KEY || (with_subkeys && c->node->pkt->pkttype == PKT_SECRET_SUBKEY) ) && !(c->node->pkt->pkt.secret_key->protect.s2k.mode==1001 && !with_spm)) { copy_secret_key (sk, c->node->pkt->pkt.secret_key ); c->node = c->node->next; return 0; /* found */ } } release_kbnode (c->keyblock); c->keyblock = c->node = NULL; rc = c->first? keydb_search_first (c->hd) : keydb_search_next (c->hd); c->first = 0; if (rc) { keydb_release (c->hd); c->hd = NULL; c->eof = 1; return -1; /* eof */ } rc = keydb_get_keyblock (c->hd, &c->keyblock); c->node = c->keyblock; } while (!rc); return rc; /* error */ } /********************************************* *********** user ID printing helpers ******* *********************************************/ /**************** * Return a string with a printable representation of the user_id. * this string must be freed by xfree. */ char* get_user_id_string( u32 *keyid ) { user_id_db_t r; char *p; int pass=0; /* try it two times; second pass reads from key resources */ do { for(r=user_id_db; r; r = r->next ) { keyid_list_t a; for (a=r->keyids; a; a= a->next ) { if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) { p = xmalloc( keystrlen() + 1 + r->len + 1 ); sprintf(p, "%s %.*s", keystr(keyid), r->len, r->name ); return p; } } } } while( ++pass < 2 && !get_pubkey( NULL, keyid ) ); p = xmalloc( keystrlen() + 5 ); sprintf(p, "%s [?]", keystr(keyid)); return p; } char* get_user_id_string_native ( u32 *keyid ) { char *p = get_user_id_string( keyid ); char *p2 = utf8_to_native( p, strlen(p), 0 ); xfree(p); return p2; } char* get_long_user_id_string( u32 *keyid ) { user_id_db_t r; char *p; int pass=0; /* try it two times; second pass reads from key resources */ do { for(r=user_id_db; r; r = r->next ) { keyid_list_t a; for (a=r->keyids; a; a= a->next ) { if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) { p = xmalloc( r->len + 20 ); sprintf(p, "%08lX%08lX %.*s", (ulong)keyid[0], (ulong)keyid[1], r->len, r->name ); return p; } } } } while( ++pass < 2 && !get_pubkey( NULL, keyid ) ); p = xmalloc( 25 ); sprintf(p, "%08lX%08lX [?]", (ulong)keyid[0], (ulong)keyid[1] ); return p; } char* get_user_id( u32 *keyid, size_t *rn ) { user_id_db_t r; char *p; int pass=0; /* try it two times; second pass reads from key resources */ do { for(r=user_id_db; r; r = r->next ) { keyid_list_t a; for (a=r->keyids; a; a= a->next ) { if( a->keyid[0] == keyid[0] && a->keyid[1] == keyid[1] ) { p = xmalloc( r->len ); memcpy(p, r->name, r->len ); *rn = r->len; return p; } } } } while( ++pass < 2 && !get_pubkey( NULL, keyid ) ); p = xstrdup( user_id_not_found_utf8 () ); *rn = strlen(p); return p; } char* get_user_id_native( u32 *keyid ) { size_t rn; char *p = get_user_id( keyid, &rn ); char *p2 = utf8_to_native( p, rn, 0 ); xfree(p); return p2; } KEYDB_HANDLE get_ctx_handle(GETKEY_CTX ctx) { return ctx->kr_handle; } static void free_akl(struct akl *akl) { if(akl->spec) free_keyserver_spec(akl->spec); xfree(akl); } void release_akl(void) { while(opt.auto_key_locate) { struct akl *akl2=opt.auto_key_locate; opt.auto_key_locate=opt.auto_key_locate->next; free_akl(akl2); } } int parse_auto_key_locate(char *options) { char *tok; while((tok=optsep(&options))) { struct akl *akl,*check,*last=NULL; int dupe=0; if(tok[0]=='\0') continue; /* For now we silently ignore the new methods introduced with 2.0.10. */ if (!ascii_strcasecmp (tok,"nodefault") || !ascii_strcasecmp (tok,"local")) continue; akl=xmalloc_clear(sizeof(*akl)); if(ascii_strcasecmp(tok,"ldap")==0) akl->type=AKL_LDAP; else if(ascii_strcasecmp(tok,"keyserver")==0) akl->type=AKL_KEYSERVER; #ifdef USE_DNS_CERT else if(ascii_strcasecmp(tok,"cert")==0) akl->type=AKL_CERT; #endif else if(ascii_strcasecmp(tok,"pka")==0) akl->type=AKL_PKA; else if((akl->spec=parse_keyserver_uri(tok,1,NULL,0))) akl->type=AKL_SPEC; else { free_akl(akl); return 0; } /* We must maintain the order the user gave us */ for(check=opt.auto_key_locate;check;last=check,check=check->next) { /* Check for duplicates */ if(check->type==akl->type && (akl->type!=AKL_SPEC || (akl->type==AKL_SPEC && strcmp(check->spec->uri,akl->spec->uri)==0))) { dupe=1; free_akl(akl); break; } } if(!dupe) { if(last) last->next=akl; else opt.auto_key_locate=akl; } } return 1; } gnupg-1.4.20/g10/exec.h0000644000175000017500000000264612635262326011342 00000000000000/* exec.h * Copyright (C) 2001, 2002, 2005 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 3 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, see . */ #ifndef _EXEC_H_ #define _EXEC_H_ #include #include #include "iobuf.h" struct exec_info { int progreturn; struct { unsigned int binary:1; unsigned int writeonly:1; unsigned int madedir:1; unsigned int use_temp_files:1; unsigned int keep_temp_files:1; } flags; pid_t child; FILE *tochild; IOBUF fromchild; char *command,*name,*tempdir,*tempfile_in,*tempfile_out; }; int exec_write(struct exec_info **info,const char *program, const char *args_in,const char *name,int writeonly,int binary); int exec_read(struct exec_info *info); int exec_finish(struct exec_info *info); int set_exec_path(const char *path); #endif /* !_EXEC_H_ */ gnupg-1.4.20/g10/keydb.h0000644000175000017500000002610512635262326011510 00000000000000/* keydb.h - Key database * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006 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 3 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, see . */ #ifndef G10_KEYDB_H #define G10_KEYDB_H #include "types.h" #include "global.h" #include "packet.h" #include "cipher.h" #ifdef ENABLE_AGENT_SUPPORT #include "assuan.h" #endif /* What qualifies as a certification (rather than a signature?) */ #define IS_CERT(s) (IS_KEY_SIG(s) || IS_UID_SIG(s) || IS_SUBKEY_SIG(s) \ || IS_KEY_REV(s) || IS_UID_REV(s) || IS_SUBKEY_REV(s)) #define IS_SIG(s) (!IS_CERT(s)) #define IS_KEY_SIG(s) ((s)->sig_class == 0x1f) #define IS_UID_SIG(s) (((s)->sig_class & ~3) == 0x10) #define IS_SUBKEY_SIG(s) ((s)->sig_class == 0x18) #define IS_KEY_REV(s) ((s)->sig_class == 0x20) #define IS_UID_REV(s) ((s)->sig_class == 0x30) #define IS_SUBKEY_REV(s) ((s)->sig_class == 0x28) struct getkey_ctx_s; typedef struct getkey_ctx_s *GETKEY_CTX; /**************** * A Keyblock is all packets which form an entire certificate; * i.e. the public key, certificate, trust packets, user ids, * signatures, and subkey. * * This structure is also used to bind arbitrary packets together. */ struct kbnode_struct { KBNODE next; PACKET *pkt; int flag; int private_flag; ulong recno; /* used while updating the trustdb */ }; #define is_deleted_kbnode(a) ((a)->private_flag & 1) #define is_cloned_kbnode(a) ((a)->private_flag & 2) enum resource_type { rt_UNKNOWN = 0, rt_RING = 1 }; /**************** * A data structre to hold information about the external position * of a keyblock. */ struct keyblock_pos_struct { int resno; /* resource number */ enum resource_type rt; off_t offset; /* position information */ unsigned count; /* length of the keyblock in packets */ IOBUF fp; /* used by enum_keyblocks */ int secret; /* working on a secret keyring */ PACKET *pkt; /* ditto */ int valid; }; typedef struct keyblock_pos_struct KBPOS; /* structure to hold a couple of public key certificates */ typedef struct pk_list *PK_LIST; struct pk_list { PK_LIST next; PKT_public_key *pk; int flags; /* flag bit 1==throw_keyid */ }; /* structure to hold a couple of secret key certificates */ typedef struct sk_list *SK_LIST; struct sk_list { SK_LIST next; PKT_secret_key *sk; int mark; /* not used */ }; /* structure to collect all information which can be used to * identify a public key */ typedef struct pubkey_find_info *PUBKEY_FIND_INFO; struct pubkey_find_info { u32 keyid[2]; unsigned nbits; byte pubkey_algo; byte fingerprint[MAX_FINGERPRINT_LEN]; char userid[1]; }; typedef struct keydb_handle *KEYDB_HANDLE; typedef enum { KEYDB_SEARCH_MODE_NONE, KEYDB_SEARCH_MODE_EXACT, KEYDB_SEARCH_MODE_SUBSTR, KEYDB_SEARCH_MODE_MAIL, KEYDB_SEARCH_MODE_MAILSUB, KEYDB_SEARCH_MODE_MAILEND, KEYDB_SEARCH_MODE_WORDS, KEYDB_SEARCH_MODE_SHORT_KID, KEYDB_SEARCH_MODE_LONG_KID, KEYDB_SEARCH_MODE_FPR16, KEYDB_SEARCH_MODE_FPR20, KEYDB_SEARCH_MODE_FPR, KEYDB_SEARCH_MODE_FIRST, KEYDB_SEARCH_MODE_NEXT } KeydbSearchMode; struct keydb_search_desc { KeydbSearchMode mode; int (*skipfnc)(void *,u32*,PKT_user_id*); void *skipfncvalue; union { const char *name; byte fpr[MAX_FINGERPRINT_LEN]; u32 kid[2]; } u; int exact; }; /*-- keydb.c --*/ /* Flag 1 == force Flag 2 == default */ int keydb_add_resource (const char *url, int flags, int secret); KEYDB_HANDLE keydb_new (int secret); void keydb_release (KEYDB_HANDLE hd); const char *keydb_get_resource_name (KEYDB_HANDLE hd); int keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb); int keydb_update_keyblock (KEYDB_HANDLE hd, KBNODE kb); int keydb_insert_keyblock (KEYDB_HANDLE hd, KBNODE kb); int keydb_delete_keyblock (KEYDB_HANDLE hd); int keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved); void keydb_rebuild_caches (int noisy); int keydb_search_reset (KEYDB_HANDLE hd); #define keydb_search(a,b,c) keydb_search2((a),(b),(c),NULL) int keydb_search2 (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc, size_t *descindex); int keydb_search_first (KEYDB_HANDLE hd); int keydb_search_next (KEYDB_HANDLE hd); int keydb_search_kid (KEYDB_HANDLE hd, u32 *kid); int keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr); /*-- pkclist.c --*/ void show_revocation_reason( PKT_public_key *pk, int mode ); int check_signatures_trust( PKT_signature *sig ); void release_pk_list( PK_LIST pk_list ); int build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned use ); union pref_hint { int digest_length; }; int algo_available( preftype_t preftype, int algo, const union pref_hint *hint ); int select_algo_from_prefs( PK_LIST pk_list, int preftype, int request, const union pref_hint *hint ); int select_mdc_from_pklist (PK_LIST pk_list); /*-- skclist.c --*/ void release_sk_list( SK_LIST sk_list ); int build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, int unlock, unsigned use ); /*-- passphrase.h --*/ #ifdef ENABLE_AGENT_SUPPORT assuan_context_t agent_open (int try, const char *orig_codeset); void agent_close (assuan_context_t ctx); #else /* If we build w/o agent support, assuan.h won't get included and thus we need to define a replacement for some Assuan types. */ typedef int assuan_error_t; typedef void *assuan_context_t; #endif int have_static_passphrase(void); void set_passphrase_from_string(const char *pass); void read_passphrase_from_fd( int fd ); void passphrase_clear_cache ( u32 *keyid, const char *cacheid, int algo ); char *ask_passphrase (const char *description, const char *tryagain_text, const char *promptid, const char *prompt, const char *cacheid, int *canceled); DEK *passphrase_to_dek( u32 *keyid, int pubkey_algo, int cipher_algo, STRING2KEY *s2k, int mode, const char *tryagain_text, int *canceled); void set_next_passphrase( const char *s ); char *get_last_passphrase(void); void next_to_last_passphrase(void); /*-- getkey.c --*/ int classify_user_id( const char *name, KEYDB_SEARCH_DESC *desc); void cache_public_key( PKT_public_key *pk ); void getkey_disable_caches(void); int get_pubkey( PKT_public_key *pk, u32 *keyid ); int get_pubkey_fast ( PKT_public_key *pk, u32 *keyid ); KBNODE get_pubkeyblock( u32 *keyid ); int get_pubkey_byname( PKT_public_key *pk, const char *name, KBNODE *ret_keyblock, KEYDB_HANDLE *ret_kdbhd, int include_unusable ); int get_pubkey_bynames( GETKEY_CTX *rx, PKT_public_key *pk, STRLIST names, KBNODE *ret_keyblock ); int get_pubkey_next( GETKEY_CTX ctx, PKT_public_key *pk, KBNODE *ret_keyblock ); void get_pubkey_end( GETKEY_CTX ctx ); int get_seckey( PKT_secret_key *sk, u32 *keyid ); int get_primary_seckey( PKT_secret_key *sk, u32 *keyid ); int get_pubkey_byfprint( PKT_public_key *pk, const byte *fprint, size_t fprint_len ); int get_pubkey_byfprint_fast (PKT_public_key *pk, const byte *fprint, size_t fprint_len); int get_keyblock_byfprint( KBNODE *ret_keyblock, const byte *fprint, size_t fprint_len ); int get_keyblock_bylid( KBNODE *ret_keyblock, ulong lid ); int seckey_available( u32 *keyid ); int get_seckey_byname( PKT_secret_key *sk, const char *name, int unlock ); int get_seckey_bynames( GETKEY_CTX *rx, PKT_secret_key *sk, STRLIST names, KBNODE *ret_keyblock ); int get_seckey_next (GETKEY_CTX ctx, PKT_secret_key *sk, KBNODE *ret_keyblock); void get_seckey_end( GETKEY_CTX ctx ); int get_seckey_byfprint( PKT_secret_key *sk, const byte *fprint, size_t fprint_len); int get_seckeyblock_byfprint (KBNODE *ret_keyblock, const byte *fprint, size_t fprint_len ); int enum_secret_keys( void **context, PKT_secret_key *sk, int with_subkeys, int with_spm ); void merge_keys_and_selfsig( KBNODE keyblock ); char*get_user_id_string( u32 *keyid ); char*get_user_id_string_native( u32 *keyid ); char*get_long_user_id_string( u32 *keyid ); char*get_user_id( u32 *keyid, size_t *rn ); char*get_user_id_native( u32 *keyid ); KEYDB_HANDLE get_ctx_handle(GETKEY_CTX ctx); void release_akl(void); int parse_auto_key_locate(char *options); /*-- keyid.c --*/ int pubkey_letter( int algo ); void hash_public_key( MD_HANDLE md, PKT_public_key *pk ); size_t keystrlen(void); const char *keystr(u32 *keyid); const char *keystr_from_pk(PKT_public_key *pk); const char *keystr_from_sk(PKT_secret_key *sk); const char *keystr_from_desc(KEYDB_SEARCH_DESC *desc); u32 keyid_from_sk( PKT_secret_key *sk, u32 *keyid ); u32 keyid_from_pk( PKT_public_key *pk, u32 *keyid ); u32 keyid_from_sig( PKT_signature *sig, u32 *keyid ); u32 keyid_from_fingerprint(const byte *fprint, size_t fprint_len, u32 *keyid); byte *namehash_from_uid(PKT_user_id *uid); unsigned nbits_from_pk( PKT_public_key *pk ); unsigned nbits_from_sk( PKT_secret_key *sk ); const char *datestr_from_pk( PKT_public_key *pk ); const char *datestr_from_sk( PKT_secret_key *sk ); const char *datestr_from_sig( PKT_signature *sig ); const char *expirestr_from_pk( PKT_public_key *pk ); const char *expirestr_from_sk( PKT_secret_key *sk ); const char *expirestr_from_sig( PKT_signature *sig ); const char *revokestr_from_pk( PKT_public_key *pk ); const char *usagestr_from_pk( PKT_public_key *pk ); const char *colon_strtime (u32 t); const char *colon_datestr_from_pk (PKT_public_key *pk); const char *colon_datestr_from_sk (PKT_secret_key *sk); const char *colon_datestr_from_sig (PKT_signature *sig); const char *colon_expirestr_from_sig (PKT_signature *sig); byte *fingerprint_from_sk( PKT_secret_key *sk, byte *buf, size_t *ret_len ); byte *fingerprint_from_pk( PKT_public_key *pk, byte *buf, size_t *ret_len ); /*-- kbnode.c --*/ KBNODE new_kbnode( PACKET *pkt ); KBNODE clone_kbnode( KBNODE node ); void release_kbnode( KBNODE n ); void delete_kbnode( KBNODE node ); void add_kbnode( KBNODE root, KBNODE node ); void insert_kbnode( KBNODE root, KBNODE node, int pkttype ); void move_kbnode( KBNODE *root, KBNODE node, KBNODE where ); void remove_kbnode( KBNODE *root, KBNODE node ); KBNODE find_prev_kbnode( KBNODE root, KBNODE node, int pkttype ); KBNODE find_next_kbnode( KBNODE node, int pkttype ); KBNODE find_kbnode( KBNODE node, int pkttype ); KBNODE walk_kbnode( KBNODE root, KBNODE *context, int all ); void clear_kbnode_flags( KBNODE n ); int commit_kbnode( KBNODE *root ); void dump_kbnode( KBNODE node ); #endif /*G10_KEYDB_H*/ gnupg-1.4.20/g10/keyring.c0000644000175000017500000013075012635262326012057 00000000000000/* keyring.c - keyring file handling * Copyright (C) 2001, 2004, 2007, 2009 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 3 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, see . */ #include #include #include #include #include #include #include #include #include #include "util.h" #include "keyring.h" #include "packet.h" #include "keydb.h" #include "options.h" #include "main.h" /*for check_key_signature()*/ #include "i18n.h" /* off_item is a funny named for an object used to keep track of known * keys. The idea was to use the offset to seek to the known keyblock, but * this is not possible if more than one process is using the keyring. */ struct off_item { struct off_item *next; u32 kid[2]; /*off_t off;*/ }; typedef struct off_item **OffsetHashTable; typedef struct keyring_name *KR_NAME; struct keyring_name { struct keyring_name *next; int secret; dotlock_t lockhd; int is_locked; int did_full_scan; char fname[1]; }; typedef struct keyring_name const * CONST_KR_NAME; static KR_NAME kr_names; static int active_handles; static OffsetHashTable kr_offtbl; static int kr_offtbl_ready; struct keyring_handle { CONST_KR_NAME resource; int secret; /* this is for a secret keyring */ struct { CONST_KR_NAME kr; IOBUF iobuf; int eof; int error; } current; struct { CONST_KR_NAME kr; off_t offset; size_t pk_no; size_t uid_no; unsigned int n_packets; /*used for delete and update*/ } found; struct { char *name; char *pattern; } word_match; }; static int do_copy (int mode, const char *fname, KBNODE root, int secret, off_t start_offset, unsigned int n_packets ); static struct off_item * new_offset_item (void) { struct off_item *k; k = xmalloc_clear (sizeof *k); return k; } #if 0 static void release_offset_items (struct off_item *k) { struct off_item *k2; for (; k; k = k2) { k2 = k->next; xfree (k); } } #endif static OffsetHashTable new_offset_hash_table (void) { struct off_item **tbl; tbl = xmalloc_clear (2048 * sizeof *tbl); return tbl; } #if 0 static void release_offset_hash_table (OffsetHashTable tbl) { int i; if (!tbl) return; for (i=0; i < 2048; i++) release_offset_items (tbl[i]); xfree (tbl); } #endif static struct off_item * lookup_offset_hash_table (OffsetHashTable tbl, u32 *kid) { struct off_item *k; for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next) if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) return k; return NULL; } static void update_offset_hash_table (OffsetHashTable tbl, u32 *kid, off_t off) { struct off_item *k; for (k = tbl[(kid[1] & 0x07ff)]; k; k = k->next) { if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) { /*k->off = off;*/ return; } } k = new_offset_item (); k->kid[0] = kid[0]; k->kid[1] = kid[1]; /*k->off = off;*/ k->next = tbl[(kid[1] & 0x07ff)]; tbl[(kid[1] & 0x07ff)] = k; } static void update_offset_hash_table_from_kb (OffsetHashTable tbl, KBNODE node, off_t off) { for (; node; node = node->next) { if (node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY) { u32 aki[2]; keyid_from_pk (node->pkt->pkt.public_key, aki); update_offset_hash_table (tbl, aki, off); } } } /* * Register a filename for plain keyring files. ptr is set to a * pointer to be used to create a handles etc, or the already-issued * pointer if it has already been registered. The function returns 1 * if a new keyring was registered. */ int keyring_register_filename (const char *fname, int secret, void **ptr) { KR_NAME kr; if (active_handles) BUG (); /* We don't allow that */ for (kr=kr_names; kr; kr = kr->next) { if (same_file_p (kr->fname, fname) ) { *ptr=kr; return 0; /* already registered */ } } if (secret) register_secured_file (fname); kr = xmalloc (sizeof *kr + strlen (fname)); strcpy (kr->fname, fname); kr->secret = !!secret; kr->lockhd = NULL; kr->is_locked = 0; kr->did_full_scan = 0; /* keep a list of all issued pointers */ kr->next = kr_names; kr_names = kr; /* create the offset table the first time a function here is used */ if (!kr_offtbl) kr_offtbl = new_offset_hash_table (); *ptr=kr; return 1; } int keyring_is_writable (void *token) { KR_NAME r = token; return r? !access (r->fname, W_OK) : 0; } /* Create a new handle for the resource associated with TOKEN. SECRET is just just as a cross-check. The returned handle must be released using keyring_release (). */ KEYRING_HANDLE keyring_new (void *token, int secret) { KEYRING_HANDLE hd; KR_NAME resource = token; assert (resource && !resource->secret == !secret); hd = xmalloc_clear (sizeof *hd); hd->resource = resource; hd->secret = !!secret; active_handles++; return hd; } void keyring_release (KEYRING_HANDLE hd) { if (!hd) return; assert (active_handles > 0); active_handles--; xfree (hd->word_match.name); xfree (hd->word_match.pattern); iobuf_close (hd->current.iobuf); xfree (hd); } const char * keyring_get_resource_name (KEYRING_HANDLE hd) { if (!hd || !hd->resource) return NULL; return hd->resource->fname; } /* * Lock the keyring with the given handle, or unlok if yes is false. * We ignore the handle and lock all registered files. */ int keyring_lock (KEYRING_HANDLE hd, int yes) { KR_NAME kr; int rc = 0; if (yes) { /* first make sure the lock handles are created */ for (kr=kr_names; kr; kr = kr->next) { if (!keyring_is_writable(kr)) continue; if (!kr->lockhd) { kr->lockhd = dotlock_create (kr->fname, 0); if (!kr->lockhd) { log_info ("can't allocate lock for `%s'\n", kr->fname ); rc = G10ERR_GENERAL; } } } if (rc) return rc; /* and now set the locks */ for (kr=kr_names; kr; kr = kr->next) { if (!keyring_is_writable(kr)) continue; if (kr->is_locked) ; else if (dotlock_take (kr->lockhd, -1) ) { log_info ("can't lock `%s'\n", kr->fname ); rc = G10ERR_GENERAL; } else kr->is_locked = 1; } } if (rc || !yes) { for (kr=kr_names; kr; kr = kr->next) { if (!keyring_is_writable(kr)) continue; if (!kr->is_locked) ; else if (dotlock_release (kr->lockhd)) log_info ("can't unlock `%s'\n", kr->fname ); else kr->is_locked = 0; } } return rc; } /* * Return the last found keyring. Caller must free it. * The returned keyblock has the kbode flag bit 0 set for the node with * the public key used to locate the keyblock or flag bit 1 set for * the user ID node. */ int keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb) { PACKET *pkt; int rc; KBNODE keyblock = NULL, node, lastnode; IOBUF a; int in_cert = 0; int pk_no = 0; int uid_no = 0; int save_mode; if (ret_kb) *ret_kb = NULL; if (!hd->found.kr) return -1; /* no successful search */ a = iobuf_open (hd->found.kr->fname); if (!a) { log_error(_("can't open `%s'\n"), hd->found.kr->fname); return G10ERR_KEYRING_OPEN; } if (iobuf_seek (a, hd->found.offset) ) { log_error ("can't seek `%s'\n", hd->found.kr->fname); iobuf_close(a); return G10ERR_KEYRING_OPEN; } pkt = xmalloc (sizeof *pkt); init_packet (pkt); hd->found.n_packets = 0;; lastnode = NULL; save_mode = set_packet_list_mode(0); while ((rc=parse_packet (a, pkt)) != -1) { hd->found.n_packets++; if (rc == G10ERR_UNKNOWN_PACKET) { free_packet (pkt); init_packet (pkt); continue; } if (rc) { log_error ("keyring_get_keyblock: read error: %s\n", g10_errstr(rc) ); rc = G10ERR_INV_KEYRING; break; } /* Filter allowed packets. */ switch (pkt->pkttype){ case PKT_PUBLIC_KEY: case PKT_PUBLIC_SUBKEY: case PKT_SECRET_KEY: case PKT_SECRET_SUBKEY: case PKT_USER_ID: case PKT_ATTRIBUTE: case PKT_SIGNATURE: break; /* Allowed per RFC. */ case PKT_RING_TRUST: case PKT_OLD_COMMENT: case PKT_COMMENT: case PKT_GPG_CONTROL: break; /* Allowed by us. */ default: log_error ("skipped packet of type %d in keyring\n", (int)pkt->pkttype); free_packet(pkt); init_packet(pkt); continue; } if (in_cert && (pkt->pkttype == PKT_PUBLIC_KEY || pkt->pkttype == PKT_SECRET_KEY)) { hd->found.n_packets--; /* fix counter */ break; /* ready */ } in_cert = 1; if (pkt->pkttype == PKT_RING_TRUST) { /*(this code is duplicated after the loop)*/ if ( lastnode && lastnode->pkt->pkttype == PKT_SIGNATURE && (pkt->pkt.ring_trust->sigcache & 1) ) { /* This is a ring trust packet with a checked signature * status cache following directly a signature paket. * Set the cache status into that signature packet. */ PKT_signature *sig = lastnode->pkt->pkt.signature; sig->flags.checked = 1; sig->flags.valid = !!(pkt->pkt.ring_trust->sigcache & 2); } /* Reset LASTNODE, so that we set the cache status only * from the ring trust packets immediately following * signature packets. */ lastnode = NULL; free_packet(pkt); init_packet(pkt); continue; } node = lastnode = new_kbnode (pkt); if (!keyblock) keyblock = node; else add_kbnode (keyblock, node); if ( pkt->pkttype == PKT_PUBLIC_KEY || pkt->pkttype == PKT_PUBLIC_SUBKEY || pkt->pkttype == PKT_SECRET_KEY || pkt->pkttype == PKT_SECRET_SUBKEY) { if (++pk_no == hd->found.pk_no) node->flag |= 1; } else if ( pkt->pkttype == PKT_USER_ID) { if (++uid_no == hd->found.uid_no) node->flag |= 2; } pkt = xmalloc (sizeof *pkt); init_packet(pkt); } set_packet_list_mode(save_mode); if (rc == -1 && keyblock) rc = 0; /* got the entire keyblock */ if (rc || !ret_kb) release_kbnode (keyblock); else { /*(duplicated from the loop body)*/ if ( pkt && pkt->pkttype == PKT_RING_TRUST && lastnode && lastnode->pkt->pkttype == PKT_SIGNATURE && (pkt->pkt.ring_trust->sigcache & 1) ) { PKT_signature *sig = lastnode->pkt->pkt.signature; sig->flags.checked = 1; sig->flags.valid = !!(pkt->pkt.ring_trust->sigcache & 2); } *ret_kb = keyblock; } free_packet (pkt); xfree (pkt); iobuf_close(a); /* Make sure that future search operations fail immediately when * we know that we are working on a invalid keyring */ if (rc == G10ERR_INV_KEYRING) hd->current.error = rc; return rc; } int keyring_update_keyblock (KEYRING_HANDLE hd, KBNODE kb) { int rc; if (!hd->found.kr) return -1; /* no successful prior search */ if (!hd->found.n_packets) { /* need to know the number of packets - do a dummy get_keyblock*/ rc = keyring_get_keyblock (hd, NULL); if (rc) { log_error ("re-reading keyblock failed: %s\n", g10_errstr (rc)); return rc; } if (!hd->found.n_packets) BUG (); } /* The open iobuf isn't needed anymore and in fact is a problem when it comes to renaming the keyring files on some operating systems, so close it here */ iobuf_close(hd->current.iobuf); hd->current.iobuf = NULL; /* do the update */ rc = do_copy (3, hd->found.kr->fname, kb, hd->secret, hd->found.offset, hd->found.n_packets ); if (!rc) { if (!hd->secret && kr_offtbl) { update_offset_hash_table_from_kb (kr_offtbl, kb, 0); } /* better reset the found info */ hd->found.kr = NULL; hd->found.offset = 0; } return rc; } int keyring_insert_keyblock (KEYRING_HANDLE hd, KBNODE kb) { int rc; const char *fname; if (!hd) fname = NULL; else if (hd->found.kr) fname = hd->found.kr->fname; else if (hd->current.kr) fname = hd->current.kr->fname; else fname = hd->resource? hd->resource->fname:NULL; if (!fname) return G10ERR_GENERAL; /* close this one otherwise we will lose the position for * a next search. Fixme: it would be better to adjust the position * after the write opertions. */ iobuf_close (hd->current.iobuf); hd->current.iobuf = NULL; /* do the insert */ rc = do_copy (1, fname, kb, hd->secret, 0, 0 ); if (!rc && !hd->secret && kr_offtbl) { update_offset_hash_table_from_kb (kr_offtbl, kb, 0); } return rc; } int keyring_delete_keyblock (KEYRING_HANDLE hd) { int rc; if (!hd->found.kr) return -1; /* no successful prior search */ if (!hd->found.n_packets) { /* need to know the number of packets - do a dummy get_keyblock*/ rc = keyring_get_keyblock (hd, NULL); if (rc) { log_error ("re-reading keyblock failed: %s\n", g10_errstr (rc)); return rc; } if (!hd->found.n_packets) BUG (); } /* close this one otherwise we will lose the position for * a next search. Fixme: it would be better to adjust the position * after the write opertions. */ iobuf_close (hd->current.iobuf); hd->current.iobuf = NULL; /* do the delete */ rc = do_copy (2, hd->found.kr->fname, NULL, hd->secret, hd->found.offset, hd->found.n_packets ); if (!rc) { /* better reset the found info */ hd->found.kr = NULL; hd->found.offset = 0; /* Delete is a rare operations, so we don't remove the keys * from the offset table */ } return rc; } /* * Start the next search on this handle right at the beginning */ int keyring_search_reset (KEYRING_HANDLE hd) { assert (hd); hd->current.kr = NULL; iobuf_close (hd->current.iobuf); hd->current.iobuf = NULL; hd->current.eof = 0; hd->current.error = 0; hd->found.kr = NULL; hd->found.offset = 0; return 0; } static int prepare_search (KEYRING_HANDLE hd) { if (hd->current.error) return hd->current.error; /* still in error state */ if (hd->current.kr && !hd->current.eof) { if ( !hd->current.iobuf ) return G10ERR_GENERAL; /* position invalid after a modify */ return 0; /* okay */ } if (!hd->current.kr && hd->current.eof) return -1; /* still EOF */ if (!hd->current.kr) { /* start search with first keyring */ hd->current.kr = hd->resource; if (!hd->current.kr) { hd->current.eof = 1; return -1; /* keyring not available */ } assert (!hd->current.iobuf); } else { /* EOF */ iobuf_close (hd->current.iobuf); hd->current.iobuf = NULL; hd->current.kr = NULL; hd->current.eof = 1; return -1; } hd->current.eof = 0; hd->current.iobuf = iobuf_open (hd->current.kr->fname); if (!hd->current.iobuf) { log_error(_("can't open `%s'\n"), hd->current.kr->fname ); return (hd->current.error = G10ERR_OPEN_FILE); } return 0; } /* A map of the all characters valid used for word_match() * Valid characters are in in this table converted to uppercase. * because the upper 128 bytes have special meaning, we assume * that they are all valid. * Note: We must use numerical values here in case that this program * will be converted to those little blue HAL9000s with their strange * EBCDIC character set (user ids are UTF-8). * wk 2000-04-13: Hmmm, does this really make sense, given the fact that * we can run gpg now on a S/390 running GNU/Linux, where the code * translation is done by the device drivers? */ static const byte word_match_chars[256] = { /* 00 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 08 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 10 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 18 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 20 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 28 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 30 */ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, /* 38 */ 0x38, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 40 */ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 48 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 50 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 58 */ 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, /* 60 */ 0x00, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, /* 68 */ 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, /* 70 */ 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, /* 78 */ 0x58, 0x59, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, /* 80 */ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 88 */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 90 */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, /* 98 */ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* a0 */ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, /* a8 */ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, /* b0 */ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, /* b8 */ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, /* c0 */ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, /* c8 */ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, /* d0 */ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, /* d8 */ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, /* e0 */ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, /* e8 */ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, /* f0 */ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, /* f8 */ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }; /**************** * Do a word match (original user id starts with a '+'). * The pattern is already tokenized to a more suitable format: * There are only the real words in it delimited by one space * and all converted to uppercase. * * Returns: 0 if all words match. * * Note: This algorithm is a straightforward one and not very * fast. It works for UTF-8 strings. The uidlen should * be removed but due to the fact that old versions of * pgp don't use UTF-8 we still use the length; this should * be fixed in parse-packet (and replace \0 by some special * UTF-8 encoding) */ static int word_match( const byte *uid, size_t uidlen, const byte *pattern ) { size_t wlen, n; const byte *p; const byte *s; for( s=pattern; *s; ) { do { /* skip leading delimiters */ while( uidlen && !word_match_chars[*uid] ) uid++, uidlen--; /* get length of the word */ n = uidlen; p = uid; while( n && word_match_chars[*p] ) p++, n--; wlen = p - uid; /* and compare against the current word from pattern */ for(n=0, p=uid; n < wlen && s[n] != ' ' && s[n] ; n++, p++ ) { if( word_match_chars[*p] != s[n] ) break; } if( n == wlen && (s[n] == ' ' || !s[n]) ) break; /* found */ uid += wlen; uidlen -= wlen; } while( uidlen ); if( !uidlen ) return -1; /* not found */ /* advance to next word in pattern */ for(; *s != ' ' && *s ; s++ ) ; if( *s ) s++ ; } return 0; /* found */ } /**************** * prepare word word_match; that is parse the name and * build the pattern. * caller has to free the returned pattern */ static char* prepare_word_match (const byte *name) { byte *pattern, *p; int c; /* the original length is always enough for the pattern */ p = pattern = xmalloc(strlen(name)+1); do { /* skip leading delimiters */ while( *name && !word_match_chars[*name] ) name++; /* copy as long as we don't have a delimiter and convert * to uppercase. * fixme: how can we handle utf8 uppercasing */ for( ; *name && (c=word_match_chars[*name]); name++ ) *p++ = c; *p++ = ' '; /* append pattern delimiter */ } while( *name ); p[-1] = 0; /* replace last pattern delimiter by EOS */ return pattern; } static int compare_name (int mode, const char *name, const char *uid, size_t uidlen) { int i; const char *s, *se; if (mode == KEYDB_SEARCH_MODE_EXACT) { for (i=0; name[i] && uidlen; i++, uidlen--) if (uid[i] != name[i]) break; if (!uidlen && !name[i]) return 0; /* found */ } else if (mode == KEYDB_SEARCH_MODE_SUBSTR) { if (ascii_memistr( uid, uidlen, name )) return 0; } else if ( mode == KEYDB_SEARCH_MODE_MAIL || mode == KEYDB_SEARCH_MODE_MAILSUB || mode == KEYDB_SEARCH_MODE_MAILEND) { for (i=0, s= uid; i < uidlen && *s != '<'; s++, i++) ; if (i < uidlen) { /* skip opening delim and one char and look for the closing one*/ s++; i++; for (se=s+1, i++; i < uidlen && *se != '>'; se++, i++) ; if (i < uidlen) { i = se - s; if (mode == KEYDB_SEARCH_MODE_MAIL) { if( strlen(name)-2 == i && !ascii_memcasecmp( s, name+1, i) ) return 0; } else if (mode == KEYDB_SEARCH_MODE_MAILSUB) { if( ascii_memistr( s, i, name ) ) return 0; } else { /* email from end */ /* nyi */ } } } } else if (mode == KEYDB_SEARCH_MODE_WORDS) return word_match (uid, uidlen, name); else BUG(); return -1; /* not found */ } /* * Search through the keyring(s), starting at the current position, * for a keyblock which contains one of the keys described in the DESC array. */ int keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc, size_t *descindex) { int rc; PACKET pkt; int save_mode; off_t offset, main_offset; size_t n; int need_uid, need_words, need_keyid, need_fpr, any_skip; int pk_no, uid_no; int initial_skip; int use_offtbl; PKT_user_id *uid = NULL; PKT_public_key *pk = NULL; PKT_secret_key *sk = NULL; u32 aki[2]; /* figure out what information we need */ need_uid = need_words = need_keyid = need_fpr = any_skip = 0; for (n=0; n < ndesc; n++) { switch (desc[n].mode) { case KEYDB_SEARCH_MODE_EXACT: case KEYDB_SEARCH_MODE_SUBSTR: case KEYDB_SEARCH_MODE_MAIL: case KEYDB_SEARCH_MODE_MAILSUB: case KEYDB_SEARCH_MODE_MAILEND: need_uid = 1; break; case KEYDB_SEARCH_MODE_WORDS: need_uid = 1; need_words = 1; break; case KEYDB_SEARCH_MODE_SHORT_KID: case KEYDB_SEARCH_MODE_LONG_KID: need_keyid = 1; break; case KEYDB_SEARCH_MODE_FPR16: case KEYDB_SEARCH_MODE_FPR20: case KEYDB_SEARCH_MODE_FPR: need_fpr = 1; break; case KEYDB_SEARCH_MODE_FIRST: /* always restart the search in this mode */ keyring_search_reset (hd); break; default: break; } if (desc[n].skipfnc) { any_skip = 1; need_keyid = 1; } } rc = prepare_search (hd); if (rc) return rc; use_offtbl = !hd->secret && kr_offtbl; if (!use_offtbl) ; else if (!kr_offtbl_ready) need_keyid = 1; else if (ndesc == 1 && desc[0].mode == KEYDB_SEARCH_MODE_LONG_KID) { struct off_item *oi; oi = lookup_offset_hash_table (kr_offtbl, desc[0].u.kid); if (!oi) { /* We know that we don't have this key */ hd->found.kr = NULL; hd->current.eof = 1; return -1; } /* We could now create a positive search status and return. * However the problem is that another instance of gpg may * have changed the keyring so that the offsets are not valid * anymore - therefore we don't do it */ } if (need_words) { const char *name = NULL; log_debug ("word search mode does not yet work\n"); /* FIXME: here is a long standing bug in our function and in addition we just use the first search description */ for (n=0; n < ndesc && !name; n++) { if (desc[n].mode == KEYDB_SEARCH_MODE_WORDS) name = desc[n].u.name; } assert (name); if ( !hd->word_match.name || strcmp (hd->word_match.name, name) ) { /* name changed */ xfree (hd->word_match.name); xfree (hd->word_match.pattern); hd->word_match.name = xstrdup (name); hd->word_match.pattern = prepare_word_match (name); } name = hd->word_match.pattern; } init_packet(&pkt); save_mode = set_packet_list_mode(0); hd->found.kr = NULL; main_offset = 0; pk_no = uid_no = 0; initial_skip = 1; /* skip until we see the start of a keyblock */ while (!(rc=search_packet (hd->current.iobuf, &pkt, &offset, need_uid))) { byte afp[MAX_FINGERPRINT_LEN]; size_t an; if (pkt.pkttype == PKT_PUBLIC_KEY || pkt.pkttype == PKT_SECRET_KEY) { main_offset = offset; pk_no = uid_no = 0; initial_skip = 0; } if (initial_skip) { free_packet (&pkt); continue; } pk = NULL; sk = NULL; uid = NULL; if ( pkt.pkttype == PKT_PUBLIC_KEY || pkt.pkttype == PKT_PUBLIC_SUBKEY) { pk = pkt.pkt.public_key; ++pk_no; if (need_fpr) { fingerprint_from_pk (pk, afp, &an); while (an < 20) /* fill up to 20 bytes */ afp[an++] = 0; } if (need_keyid) keyid_from_pk (pk, aki); if (use_offtbl && !kr_offtbl_ready) update_offset_hash_table (kr_offtbl, aki, main_offset); } else if (pkt.pkttype == PKT_USER_ID) { uid = pkt.pkt.user_id; ++uid_no; } else if ( pkt.pkttype == PKT_SECRET_KEY || pkt.pkttype == PKT_SECRET_SUBKEY) { sk = pkt.pkt.secret_key; ++pk_no; if (need_fpr) { fingerprint_from_sk (sk, afp, &an); while (an < 20) /* fill up to 20 bytes */ afp[an++] = 0; } if (need_keyid) keyid_from_sk (sk, aki); } for (n=0; n < ndesc; n++) { switch (desc[n].mode) { case KEYDB_SEARCH_MODE_NONE: BUG (); break; case KEYDB_SEARCH_MODE_EXACT: case KEYDB_SEARCH_MODE_SUBSTR: case KEYDB_SEARCH_MODE_MAIL: case KEYDB_SEARCH_MODE_MAILSUB: case KEYDB_SEARCH_MODE_MAILEND: case KEYDB_SEARCH_MODE_WORDS: if ( uid && !compare_name (desc[n].mode, desc[n].u.name, uid->name, uid->len)) goto found; break; case KEYDB_SEARCH_MODE_SHORT_KID: if ((pk||sk) && desc[n].u.kid[1] == aki[1]) goto found; break; case KEYDB_SEARCH_MODE_LONG_KID: if ((pk||sk) && desc[n].u.kid[0] == aki[0] && desc[n].u.kid[1] == aki[1]) goto found; break; case KEYDB_SEARCH_MODE_FPR16: if ((pk||sk) && !memcmp (desc[n].u.fpr, afp, 16)) goto found; break; case KEYDB_SEARCH_MODE_FPR20: case KEYDB_SEARCH_MODE_FPR: if ((pk||sk) && !memcmp (desc[n].u.fpr, afp, 20)) goto found; break; case KEYDB_SEARCH_MODE_FIRST: if (pk||sk) goto found; break; case KEYDB_SEARCH_MODE_NEXT: if (pk||sk) goto found; break; default: rc = G10ERR_INV_ARG; goto found; } } free_packet (&pkt); continue; found: /* Record which desc we matched on. Note this value is only meaningful if this function returns with no errors. */ if(descindex) *descindex=n; for (n=any_skip?0:ndesc; n < ndesc; n++) { if (desc[n].skipfnc && desc[n].skipfnc (desc[n].skipfncvalue, aki, uid)) break; } if (n == ndesc) goto real_found; free_packet (&pkt); } real_found: if (!rc) { hd->found.offset = main_offset; hd->found.kr = hd->current.kr; hd->found.pk_no = (pk||sk)? pk_no : 0; hd->found.uid_no = uid? uid_no : 0; } else if (rc == -1) { hd->current.eof = 1; /* if we scanned all keyrings, we are sure that * all known key IDs are in our offtbl, mark that. */ if (use_offtbl && !kr_offtbl_ready) { KR_NAME kr; /* First set the did_full_scan flag for this keyring (ignore secret keyrings) */ for (kr=kr_names; kr; kr = kr->next) { if (!kr->secret && hd->resource == kr) { kr->did_full_scan = 1; break; } } /* Then check whether all flags are set and if so, mark the offtbl ready */ for (kr=kr_names; kr; kr = kr->next) { if (!kr->secret && !kr->did_full_scan) break; } if (!kr) kr_offtbl_ready = 1; } } else hd->current.error = rc; free_packet(&pkt); set_packet_list_mode(save_mode); return rc; } static int create_tmp_file (const char *template, char **r_bakfname, char **r_tmpfname, IOBUF *r_fp) { char *bakfname, *tmpfname; mode_t oldmask; *r_bakfname = NULL; *r_tmpfname = NULL; # ifdef USE_ONLY_8DOT3 /* Here is another Windoze bug?: * you cant rename("pubring.gpg.tmp", "pubring.gpg"); * but rename("pubring.gpg.tmp", "pubring.aaa"); * works. So we replace .gpg by .bak or .tmp */ if (strlen (template) > 4 && !strcmp (template+strlen(template)-4, EXTSEP_S "gpg") ) { bakfname = xmalloc (strlen (template) + 1); strcpy (bakfname, template); strcpy (bakfname+strlen(template)-4, EXTSEP_S "bak"); tmpfname = xmalloc (strlen( template ) + 1 ); strcpy (tmpfname,template); strcpy (tmpfname+strlen(template)-4, EXTSEP_S "tmp"); } else { /* file does not end with gpg; hmmm */ bakfname = xmalloc (strlen( template ) + 5); strcpy (stpcpy(bakfname, template), EXTSEP_S "bak"); tmpfname = xmalloc (strlen( template ) + 5); strcpy (stpcpy(tmpfname, template), EXTSEP_S "tmp"); } # else /* Posix file names */ bakfname = xmalloc (strlen (template) + sizeof (GNUPG_BAK_SFX) + 1); strcpy (stpcpy (bakfname, template), GNUPG_BAK_SFX); tmpfname = xmalloc (strlen (template) + sizeof (GNUPG_TMP_SFX) + 1 ); strcpy (stpcpy(tmpfname, template), GNUPG_TMP_SFX); # endif /* Posix filename */ /* Create the temp file with limited access */ oldmask=umask(077); if (is_secured_filename (tmpfname)) { *r_fp = NULL; errno = EPERM; } else *r_fp = iobuf_create (tmpfname); umask(oldmask); if (!*r_fp) { log_error(_("can't create `%s': %s\n"), tmpfname, strerror(errno) ); xfree (tmpfname); xfree (bakfname); return G10ERR_OPEN_FILE; } *r_bakfname = bakfname; *r_tmpfname = tmpfname; return 0; } static int rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname, int secret ) { int rc=G10ERR_GENERAL; /* It's a secret keyring, so let's force a fsync just to be safe on filesystems that may not sync data and metadata together (ext4). */ if(secret && iobuf_ioctl(NULL,4,0,(char*)tmpfname)!=0) goto fail; /* invalidate close caches*/ if(iobuf_ioctl (NULL, 2, 0, (char*)tmpfname )!=0) goto fail; iobuf_ioctl (NULL, 2, 0, (char*)bakfname ); iobuf_ioctl (NULL, 2, 0, (char*)fname ); /* first make a backup file except for secret keyrings */ if (!secret) { #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) remove (bakfname); #endif if (rename (fname, bakfname) ) { log_error ("renaming `%s' to `%s' failed: %s\n", fname, bakfname, strerror(errno) ); return G10ERR_RENAME_FILE; } } /* then rename the file */ #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) remove( fname ); #endif if (secret) unregister_secured_file (fname); if (rename (tmpfname, fname) ) { log_error (_("renaming `%s' to `%s' failed: %s\n"), tmpfname, fname, strerror(errno) ); register_secured_file (fname); rc = G10ERR_RENAME_FILE; goto fail; } /* Now make sure the file has the same permissions as the original */ #ifndef HAVE_DOSISH_SYSTEM { struct stat statbuf; statbuf.st_mode=S_IRUSR | S_IWUSR; if(((secret && !opt.preserve_permissions) || (stat(bakfname,&statbuf)==0)) && (chmod(fname,statbuf.st_mode)==0)) ; else log_error("WARNING: unable to restore permissions to `%s': %s", fname,strerror(errno)); } #endif return 0; fail: if(secret) { log_info(_("WARNING: 2 files with confidential information exists.\n")); log_info(_("%s is the unchanged one\n"), fname ); log_info(_("%s is the new one\n"), tmpfname ); log_info(_("Please fix this possible security flaw\n")); } return rc; } static int write_keyblock (IOBUF fp, KBNODE keyblock) { KBNODE kbctx = NULL, node; int rc; while ( (node = walk_kbnode (keyblock, &kbctx, 0)) ) { if (node->pkt->pkttype == PKT_RING_TRUST) continue; /* we write it later on our own */ if ( (rc = build_packet (fp, node->pkt) )) { log_error ("build_packet(%d) failed: %s\n", node->pkt->pkttype, g10_errstr(rc) ); return rc; } if (node->pkt->pkttype == PKT_SIGNATURE) { /* always write a signature cache packet */ PKT_signature *sig = node->pkt->pkt.signature; unsigned int cacheval = 0; if (sig->flags.checked) { cacheval |= 1; if (sig->flags.valid) cacheval |= 2; } iobuf_put (fp, 0xb0); /* old style packet 12, 1 byte len*/ iobuf_put (fp, 2); /* 2 bytes */ iobuf_put (fp, 0); /* unused */ if (iobuf_put (fp, cacheval)) { log_error ("writing sigcache packet failed\n"); return G10ERR_WRITE_FILE; } } } return 0; } /* * Walk over all public keyrings, check the signatures and replace the * keyring with a new one where the signature cache is then updated. * This is only done for the public keyrings. */ int keyring_rebuild_cache (void *token,int noisy) { KEYRING_HANDLE hd; KEYDB_SEARCH_DESC desc; KBNODE keyblock = NULL, node; const char *lastresname = NULL, *resname; IOBUF tmpfp = NULL; char *tmpfilename = NULL; char *bakfilename = NULL; int rc; ulong count = 0, sigcount = 0; hd = keyring_new (token, 0); memset (&desc, 0, sizeof desc); desc.mode = KEYDB_SEARCH_MODE_FIRST; rc=keyring_lock (hd, 1); if(rc) goto leave; while ( !(rc = keyring_search (hd, &desc, 1, NULL)) ) { desc.mode = KEYDB_SEARCH_MODE_NEXT; resname = keyring_get_resource_name (hd); if (lastresname != resname ) { /* we have switched to a new keyring - commit changes */ if (tmpfp) { if (iobuf_close (tmpfp)) { log_error ("error closing `%s': %s\n", tmpfilename, strerror (errno)); rc = G10ERR_CLOSE_FILE; goto leave; } /* because we have switched resources, we can be sure that * the original file is closed */ tmpfp = NULL; } rc = lastresname? rename_tmp_file (bakfilename, tmpfilename, lastresname, 0) : 0; xfree (tmpfilename); tmpfilename = NULL; xfree (bakfilename); bakfilename = NULL; if (rc) goto leave; lastresname = resname; if (noisy && !opt.quiet) log_info (_("caching keyring `%s'\n"), resname); rc = create_tmp_file (resname, &bakfilename, &tmpfilename, &tmpfp); if (rc) goto leave; } release_kbnode (keyblock); rc = keyring_get_keyblock (hd, &keyblock); if (rc) { log_error ("keyring_get_keyblock failed: %s\n", g10_errstr(rc)); goto leave; } if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY) { /* We had a few reports about corrupted keyrings; if we have been called directly from the command line we delete such a keyblock instead of bailing out. */ log_error ("unexpected keyblock found (pkttype=%d)%s\n", keyblock->pkt->pkttype, noisy? " - deleted":""); if (noisy) continue; log_info ("Hint: backup your keys and try running `%s'\n", "gpg --rebuild-keydb-caches"); rc = G10ERR_INV_KEYRING; goto leave; } /* check all signature to set the signature's cache flags */ for (node=keyblock; node; node=node->next) { /* Note that this doesn't cache the result of a revocation issued by a designated revoker. This is because the pk in question does not carry the revkeys as we haven't merged the key and selfsigs. It is questionable whether this matters very much since there are very very few designated revoker revocation packets out there. */ if (node->pkt->pkttype == PKT_SIGNATURE) { PKT_signature *sig=node->pkt->pkt.signature; if(!opt.no_sig_cache && sig->flags.checked && sig->flags.valid && (check_digest_algo(sig->digest_algo) || check_pubkey_algo(sig->pubkey_algo))) sig->flags.checked=sig->flags.valid=0; else check_key_signature (keyblock, node, NULL); sigcount++; } } /* write the keyblock to the temporary file */ rc = write_keyblock (tmpfp, keyblock); if (rc) goto leave; if ( !(++count % 50) && noisy && !opt.quiet) log_info(_("%lu keys cached so far (%lu signatures)\n"), count, sigcount ); } /* end main loop */ if (rc == -1) rc = 0; if (rc) { log_error ("keyring_search failed: %s\n", g10_errstr(rc)); goto leave; } if(noisy || opt.verbose) log_info(_("%lu keys cached (%lu signatures)\n"), count, sigcount ); if (tmpfp) { if (iobuf_close (tmpfp)) { log_error ("error closing `%s': %s\n", tmpfilename, strerror (errno)); rc = G10ERR_CLOSE_FILE; goto leave; } /* because we have switched resources, we can be sure that * the original file is closed */ tmpfp = NULL; } rc = lastresname? rename_tmp_file (bakfilename, tmpfilename, lastresname, 0) : 0; xfree (tmpfilename); tmpfilename = NULL; xfree (bakfilename); bakfilename = NULL; leave: if (tmpfp) iobuf_cancel (tmpfp); xfree (tmpfilename); xfree (bakfilename); release_kbnode (keyblock); keyring_lock (hd, 0); keyring_release (hd); return rc; } /**************** * Perform insert/delete/update operation. * mode 1 = insert * 2 = delete * 3 = update */ static int do_copy (int mode, const char *fname, KBNODE root, int secret, off_t start_offset, unsigned int n_packets ) { IOBUF fp, newfp; int rc=0; char *bakfname = NULL; char *tmpfname = NULL; /* Open the source file. Because we do a rename, we have to check the permissions of the file */ if (access (fname, W_OK)) return G10ERR_WRITE_FILE; fp = iobuf_open (fname); if (mode == 1 && !fp && errno == ENOENT) { /* insert mode but file does not exist: create a new file */ KBNODE kbctx, node; mode_t oldmask; oldmask=umask(077); if (!secret && is_secured_filename (fname)) { newfp = NULL; errno = EPERM; } else newfp = iobuf_create (fname); umask(oldmask); if( !newfp ) { log_error (_("can't create `%s': %s\n"), fname, strerror(errno)); return G10ERR_OPEN_FILE; } if( !opt.quiet ) log_info(_("%s: keyring created\n"), fname ); kbctx=NULL; while ( (node = walk_kbnode( root, &kbctx, 0 )) ) { if( (rc = build_packet( newfp, node->pkt )) ) { log_error("build_packet(%d) failed: %s\n", node->pkt->pkttype, g10_errstr(rc) ); iobuf_cancel(newfp); return G10ERR_WRITE_FILE; } } if( iobuf_close(newfp) ) { log_error ("%s: close failed: %s\n", fname, strerror(errno)); return G10ERR_CLOSE_FILE; } return 0; /* ready */ } if( !fp ) { log_error(_("can't open `%s': %s\n"), fname, strerror(errno) ); rc = G10ERR_OPEN_FILE; goto leave; } /* Create the new file. */ rc = create_tmp_file (fname, &bakfname, &tmpfname, &newfp); if (rc) { iobuf_close(fp); goto leave; } if (secret) register_secured_file (tmpfname); if( mode == 1 ) { /* insert */ /* copy everything to the new file */ rc = copy_all_packets (fp, newfp); if( rc != -1 ) { log_error("%s: copy to `%s' failed: %s\n", fname, tmpfname, g10_errstr(rc) ); iobuf_close(fp); if (secret) unregister_secured_file (tmpfname); iobuf_cancel(newfp); goto leave; } rc = 0; } if( mode == 2 || mode == 3 ) { /* delete or update */ /* copy first part to the new file */ rc = copy_some_packets( fp, newfp, start_offset ); if( rc ) { /* should never get EOF here */ log_error ("%s: copy to `%s' failed: %s\n", fname, tmpfname, g10_errstr(rc) ); iobuf_close(fp); if (secret) unregister_secured_file (tmpfname); iobuf_cancel(newfp); goto leave; } /* skip this keyblock */ assert( n_packets ); rc = skip_some_packets( fp, n_packets ); if( rc ) { log_error("%s: skipping %u packets failed: %s\n", fname, n_packets, g10_errstr(rc)); iobuf_close(fp); if (secret) unregister_secured_file (tmpfname); iobuf_cancel(newfp); goto leave; } } if( mode == 1 || mode == 3 ) { /* insert or update */ rc = write_keyblock (newfp, root); if (rc) { iobuf_close(fp); if (secret) unregister_secured_file (tmpfname); iobuf_cancel(newfp); goto leave; } } if( mode == 2 || mode == 3 ) { /* delete or update */ /* copy the rest */ rc = copy_all_packets( fp, newfp ); if( rc != -1 ) { log_error("%s: copy to `%s' failed: %s\n", fname, tmpfname, g10_errstr(rc) ); iobuf_close(fp); if (secret) unregister_secured_file (tmpfname); iobuf_cancel(newfp); goto leave; } rc = 0; } /* close both files */ if( iobuf_close(fp) ) { log_error("%s: close failed: %s\n", fname, strerror(errno) ); rc = G10ERR_CLOSE_FILE; goto leave; } if( iobuf_close(newfp) ) { log_error("%s: close failed: %s\n", tmpfname, strerror(errno) ); rc = G10ERR_CLOSE_FILE; goto leave; } rc = rename_tmp_file (bakfname, tmpfname, fname, secret); leave: xfree(bakfname); xfree(tmpfname); return rc; } gnupg-1.4.20/g10/encode.c0000644000175000017500000006071112635262326011643 00000000000000/* encode.c - encode data * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006 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 3 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, see . */ #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 "filter.h" #include "trustdb.h" #include "i18n.h" #include "status.h" static int encode_simple( const char *filename, int mode, int use_seskey ); static int write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out ); /**************** * Encode FILENAME with only the symmetric cipher. Take input from * stdin if FILENAME is NULL. */ int encode_symmetric( const char *filename ) { return encode_simple( filename, 1, 0 ); } /**************** * Encode FILENAME as a literal data packet only. Take input from * stdin if FILENAME is NULL. */ int encode_store( const char *filename ) { return encode_simple( filename, 0, 0 ); } static void encode_seskey( DEK *dek, DEK **seskey, byte *enckey ) { CIPHER_HANDLE hd; byte buf[33]; assert ( dek->keylen <= 32 ); if(!*seskey) { *seskey=xmalloc_clear(sizeof(DEK)); (*seskey)->keylen=dek->keylen; (*seskey)->algo=dek->algo; make_session_key(*seskey); /*log_hexdump( "thekey", c->key, c->keylen );*/ } buf[0] = (*seskey)->algo; memcpy( buf + 1, (*seskey)->key, (*seskey)->keylen ); hd = cipher_open( dek->algo, CIPHER_MODE_CFB, 1 ); cipher_setkey( hd, dek->key, dek->keylen ); cipher_setiv( hd, NULL, 0 ); cipher_encrypt( hd, buf, buf, (*seskey)->keylen + 1 ); cipher_close( hd ); memcpy( enckey, buf, (*seskey)->keylen + 1 ); wipememory( buf, sizeof buf ); /* burn key */ } /* We try very hard to use a MDC */ static int use_mdc(PK_LIST pk_list,int algo) { /* RFC-1991 and 2440 don't have MDC */ if(RFC1991 || RFC2440) return 0; /* --force-mdc overrides --disable-mdc */ if(opt.force_mdc) return 1; if(opt.disable_mdc) return 0; /* Do the keys really support MDC? */ if(select_mdc_from_pklist(pk_list)) return 1; /* The keys don't support MDC, so now we do a bit of a hack - if any of the AESes or TWOFISH are in the prefs, we assume that the user can handle a MDC. This is valid for PGP 7, which can handle MDCs though it will not generate them. 2440bis allows this, by the way. */ if(select_algo_from_prefs(pk_list,PREFTYPE_SYM, CIPHER_ALGO_AES,NULL)==CIPHER_ALGO_AES) return 1; if(select_algo_from_prefs(pk_list,PREFTYPE_SYM, CIPHER_ALGO_AES192,NULL)==CIPHER_ALGO_AES192) return 1; if(select_algo_from_prefs(pk_list,PREFTYPE_SYM, CIPHER_ALGO_AES256,NULL)==CIPHER_ALGO_AES256) return 1; if(select_algo_from_prefs(pk_list,PREFTYPE_SYM, CIPHER_ALGO_TWOFISH,NULL)==CIPHER_ALGO_TWOFISH) return 1; /* Last try. Use MDC for the modern ciphers. */ if(cipher_get_blocksize(algo)!=8) return 1; return 0; /* No MDC */ } /* We don't want to use use_seskey yet because older gnupg versions can't handle it, and there isn't really any point unless we're making a message that can be decrypted by a public key or passphrase. */ static int encode_simple( const char *filename, int mode, int use_seskey ) { IOBUF inp, out; PACKET pkt; PKT_plaintext *pt = NULL; STRING2KEY *s2k = NULL; byte enckey[33]; int rc = 0; int seskeylen = 0; u32 filesize; cipher_filter_context_t cfx; armor_filter_context_t afx; compress_filter_context_t zfx; text_filter_context_t tfx; progress_filter_context_t pfx; int do_compress = !RFC1991 && default_compress_algo(); memset( &cfx, 0, sizeof cfx); memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); memset( &tfx, 0, sizeof tfx); init_packet(&pkt); /* prepare iobufs */ inp = iobuf_open(filename); if (inp) iobuf_ioctl (inp,3,1,NULL); /* disable fd caching */ if (inp && is_secured_file (iobuf_get_fd (inp))) { iobuf_close (inp); inp = NULL; errno = EPERM; } if( !inp ) { log_error(_("can't open `%s': %s\n"), filename? filename: "[stdin]", strerror(errno) ); return G10ERR_OPEN_FILE; } handle_progress (&pfx, inp, filename); if( opt.textmode ) iobuf_push_filter( inp, text_filter, &tfx ); /* Due the the fact that we use don't use an IV to encrypt the session key we can't use the new mode with RFC1991 because it has no S2K salt. RFC1991 always uses simple S2K. */ if ( RFC1991 && use_seskey ) use_seskey = 0; cfx.dek = NULL; if( mode ) { s2k = xmalloc_clear( sizeof *s2k ); s2k->mode = RFC1991? 0:opt.s2k_mode; s2k->hash_algo=S2K_DIGEST_ALGO; cfx.dek = passphrase_to_dek( NULL, 0, default_cipher_algo(), s2k, 2, NULL, NULL); if( !cfx.dek || !cfx.dek->keylen ) { rc = G10ERR_PASSPHRASE; xfree(cfx.dek); xfree(s2k); iobuf_close(inp); log_error(_("error creating passphrase: %s\n"), g10_errstr(rc) ); return rc; } if (use_seskey && s2k->mode != 1 && s2k->mode != 3) { use_seskey = 0; log_info (_("can't use a symmetric ESK packet " "due to the S2K mode\n")); } if ( use_seskey ) { DEK *dek = NULL; seskeylen = cipher_get_keylen( default_cipher_algo() ) / 8; encode_seskey( cfx.dek, &dek, enckey ); xfree( cfx.dek ); cfx.dek = dek; } if(opt.verbose) log_info(_("using cipher %s\n"), cipher_algo_to_string(cfx.dek->algo)); cfx.dek->use_mdc=use_mdc(NULL,cfx.dek->algo); } if (do_compress && cfx.dek && cfx.dek->use_mdc && is_file_compressed(filename, &rc)) { if (opt.verbose) log_info(_("`%s' already compressed\n"), filename); do_compress = 0; } if( rc || (rc = open_outfile( filename, opt.armor? 1:0, &out )) ) { iobuf_cancel(inp); xfree(cfx.dek); xfree(s2k); return rc; } if( opt.armor ) iobuf_push_filter( out, armor_filter, &afx ); if( s2k && !RFC1991 ) { PKT_symkey_enc *enc = xmalloc_clear( sizeof *enc + seskeylen + 1 ); enc->version = 4; enc->cipher_algo = cfx.dek->algo; enc->s2k = *s2k; if ( use_seskey && seskeylen ) { enc->seskeylen = seskeylen + 1; /* algo id */ memcpy( enc->seskey, enckey, seskeylen + 1 ); } pkt.pkttype = PKT_SYMKEY_ENC; pkt.pkt.symkey_enc = enc; if( (rc = build_packet( out, &pkt )) ) log_error("build symkey packet failed: %s\n", g10_errstr(rc) ); xfree(enc); } if (!opt.no_literal) pt=setup_plaintext_name(filename,inp); /* Note that PGP 5 has problems decrypting symmetrically encrypted data if the file length is in the inner packet. It works when only partial length headers are use. In the past, we always used partial body length here, but since PGP 2, PGP 6, and PGP 7 need the file length, and nobody should be using PGP 5 nowadays anyway, this is now set to the file length. Note also that this only applies to the RFC-1991 style symmetric messages, and not the RFC-2440 style. PGP 6 and 7 work with either partial length or fixed length with the new style messages. */ if ( !iobuf_is_pipe_filename (filename) && *filename && !opt.textmode ) { off_t tmpsize; int overflow; if ( !(tmpsize = iobuf_get_filelength(inp, &overflow)) && !overflow && opt.verbose) log_info(_("WARNING: `%s' is an empty file\n"), filename ); /* We can't encode the length of very large files because OpenPGP uses only 32 bit for file sizes. So if the the size of a file is larger than 2^32 minus some bytes for packet headers, we switch to partial length encoding. */ if ( tmpsize < (IOBUF_FILELENGTH_LIMIT - 65536) ) filesize = tmpsize; else filesize = 0; } else filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */ if (!opt.no_literal) { pt->timestamp = make_timestamp(); pt->mode = opt.textmode? 't' : 'b'; pt->len = filesize; pt->new_ctb = !pt->len && !RFC1991; pt->buf = inp; pkt.pkttype = PKT_PLAINTEXT; pkt.pkt.plaintext = pt; cfx.datalen = filesize && !do_compress ? calc_packet_length( &pkt ) : 0; } else { cfx.datalen = filesize && !do_compress ? filesize : 0; pkt.pkttype = 0; pkt.pkt.generic = NULL; } /* register the cipher filter */ if( mode ) iobuf_push_filter( out, cipher_filter, &cfx ); /* register the compress filter */ if( do_compress ) { if (cfx.dek && cfx.dek->use_mdc) zfx.new_ctb = 1; push_compress_filter(out,&zfx,default_compress_algo()); } /* do the work */ if (!opt.no_literal) { if( (rc = build_packet( out, &pkt )) ) log_error("build_packet failed: %s\n", g10_errstr(rc) ); } else { /* user requested not to create a literal packet, * so we copy the plain data */ byte copy_buffer[4096]; int bytes_copied; while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1) if (iobuf_write(out, copy_buffer, bytes_copied) == -1) { rc = G10ERR_WRITE_FILE; log_error("copying input to output failed: %s\n", g10_errstr(rc) ); break; } wipememory(copy_buffer, 4096); /* burn buffer */ } /* finish the stuff */ iobuf_close(inp); if (rc) iobuf_cancel(out); else { iobuf_close(out); /* fixme: check returncode */ if (mode) write_status( STATUS_END_ENCRYPTION ); } if (pt) pt->buf = NULL; free_packet(&pkt); xfree(cfx.dek); xfree(s2k); return rc; } int setup_symkey(STRING2KEY **symkey_s2k,DEK **symkey_dek) { *symkey_s2k=xmalloc_clear(sizeof(STRING2KEY)); (*symkey_s2k)->mode = opt.s2k_mode; (*symkey_s2k)->hash_algo = S2K_DIGEST_ALGO; *symkey_dek=passphrase_to_dek(NULL,0,opt.s2k_cipher_algo, *symkey_s2k,2,NULL,NULL); if(!*symkey_dek || !(*symkey_dek)->keylen) { xfree(*symkey_dek); xfree(*symkey_s2k); return G10ERR_PASSPHRASE; } return 0; } static int write_symkey_enc(STRING2KEY *symkey_s2k,DEK *symkey_dek,DEK *dek,IOBUF out) { int rc,seskeylen=cipher_get_keylen(dek->algo)/8; PKT_symkey_enc *enc; byte enckey[33]; PACKET pkt; enc=xmalloc_clear(sizeof(PKT_symkey_enc)+seskeylen+1); encode_seskey(symkey_dek,&dek,enckey); enc->version = 4; enc->cipher_algo = opt.s2k_cipher_algo; enc->s2k = *symkey_s2k; enc->seskeylen = seskeylen + 1; /* algo id */ memcpy( enc->seskey, enckey, seskeylen + 1 ); pkt.pkttype = PKT_SYMKEY_ENC; pkt.pkt.symkey_enc = enc; if((rc=build_packet(out,&pkt))) log_error("build symkey_enc packet failed: %s\n",g10_errstr(rc)); xfree(enc); return rc; } /**************** * Encrypt the file with the given userids (or ask if none * is supplied). */ int encode_crypt( const char *filename, STRLIST remusr, int use_symkey ) { IOBUF inp = NULL, out = NULL; PACKET pkt; PKT_plaintext *pt = NULL; DEK *symkey_dek = NULL; STRING2KEY *symkey_s2k = NULL; int rc = 0, rc2 = 0; u32 filesize; cipher_filter_context_t cfx; armor_filter_context_t afx; compress_filter_context_t zfx; text_filter_context_t tfx; progress_filter_context_t pfx; PK_LIST pk_list,work_list; int do_compress = opt.compress_algo && !RFC1991; memset( &cfx, 0, sizeof cfx); memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); memset( &tfx, 0, sizeof tfx); init_packet(&pkt); if(use_symkey && (rc=setup_symkey(&symkey_s2k,&symkey_dek))) return rc; if( (rc=build_pk_list( remusr, &pk_list, PUBKEY_USAGE_ENC)) ) return rc; if(PGP2) { for(work_list=pk_list; work_list; work_list=work_list->next) if(!(is_RSA(work_list->pk->pubkey_algo) && nbits_from_pk(work_list->pk)<=2048)) { log_info(_("you can only encrypt to RSA keys of 2048 bits or " "less in --pgp2 mode\n")); compliance_failure(); break; } } /* prepare iobufs */ inp = iobuf_open(filename); if (inp) iobuf_ioctl (inp,3,1,NULL); /* disable fd caching */ if (inp && is_secured_file (iobuf_get_fd (inp))) { iobuf_close (inp); inp = NULL; errno = EPERM; } if( !inp ) { log_error(_("can't open `%s': %s\n"), filename? filename: "[stdin]", strerror(errno) ); rc = G10ERR_OPEN_FILE; goto leave; } else if( opt.verbose ) log_info(_("reading from `%s'\n"), filename? filename: "[stdin]"); handle_progress (&pfx, inp, filename); if( opt.textmode ) iobuf_push_filter( inp, text_filter, &tfx ); if( (rc = open_outfile( filename, opt.armor? 1:0, &out )) ) goto leave; if( opt.armor ) iobuf_push_filter( out, armor_filter, &afx ); /* create a session key */ cfx.dek = xmalloc_secure_clear (sizeof *cfx.dek); if( !opt.def_cipher_algo ) { /* try to get it from the prefs */ cfx.dek->algo = select_algo_from_prefs(pk_list,PREFTYPE_SYM,-1,NULL); /* The only way select_algo_from_prefs can fail here is when mixing v3 and v4 keys, as v4 keys have an implicit preference entry for 3DES, and the pk_list cannot be empty. In this case, use 3DES anyway as it's the safest choice - perhaps the v3 key is being used in an OpenPGP implementation and we know that the implementation behind any v4 key can handle 3DES. */ if( cfx.dek->algo == -1 ) { cfx.dek->algo = CIPHER_ALGO_3DES; if( PGP2 ) { log_info(_("unable to use the IDEA cipher for all of the keys " "you are encrypting to.\n")); compliance_failure(); } } } else { if(!opt.expert && select_algo_from_prefs(pk_list,PREFTYPE_SYM, opt.def_cipher_algo,NULL)!=opt.def_cipher_algo) log_info(_("WARNING: forcing symmetric cipher %s (%d)" " violates recipient preferences\n"), cipher_algo_to_string(opt.def_cipher_algo), opt.def_cipher_algo); cfx.dek->algo = opt.def_cipher_algo; } cfx.dek->use_mdc=use_mdc(pk_list,cfx.dek->algo); /* Only do the is-file-already-compressed check if we are using a MDC. This forces compressed files to be re-compressed if we do not have a MDC to give some protection against chosen ciphertext attacks. */ if (do_compress && cfx.dek->use_mdc && is_file_compressed(filename, &rc2) ) { if (opt.verbose) log_info(_("`%s' already compressed\n"), filename); do_compress = 0; } if (rc2) { rc = rc2; goto leave; } make_session_key( cfx.dek ); if( DBG_CIPHER ) log_hexdump("DEK is: ", cfx.dek->key, cfx.dek->keylen ); rc = write_pubkey_enc_from_list( pk_list, cfx.dek, out ); if( rc ) goto leave; /* We put the passphrase (if any) after any public keys as this seems to be the most useful on the recipient side - there is no point in prompting a user for a passphrase if they have the secret key needed to decrypt. */ if(use_symkey && (rc=write_symkey_enc(symkey_s2k,symkey_dek,cfx.dek,out))) goto leave; if (!opt.no_literal) pt=setup_plaintext_name(filename,inp); if (!iobuf_is_pipe_filename (filename) && *filename && !opt.textmode ) { off_t tmpsize; int overflow; if ( !(tmpsize = iobuf_get_filelength(inp, &overflow)) && !overflow && opt.verbose) log_info(_("WARNING: `%s' is an empty file\n"), filename ); /* We can't encode the length of very large files because OpenPGP uses only 32 bit for file sizes. So if the the size of a file is larger than 2^32 minus some bytes for packet headers, we switch to partial length encoding. */ if (tmpsize < (IOBUF_FILELENGTH_LIMIT - 65536) ) filesize = tmpsize; else filesize = 0; } else filesize = opt.set_filesize ? opt.set_filesize : 0; /* stdin */ if (!opt.no_literal) { pt->timestamp = make_timestamp(); pt->mode = opt.textmode ? 't' : 'b'; pt->len = filesize; pt->new_ctb = !pt->len && !RFC1991; pt->buf = inp; pkt.pkttype = PKT_PLAINTEXT; pkt.pkt.plaintext = pt; cfx.datalen = filesize && !do_compress? calc_packet_length( &pkt ) : 0; } else cfx.datalen = filesize && !do_compress ? filesize : 0; /* register the cipher filter */ iobuf_push_filter( out, cipher_filter, &cfx ); /* register the compress filter */ if( do_compress ) { int compr_algo = opt.compress_algo; if(compr_algo==-1) { if((compr_algo= select_algo_from_prefs(pk_list,PREFTYPE_ZIP,-1,NULL))==-1) compr_algo=DEFAULT_COMPRESS_ALGO; /* Theoretically impossible to get here since uncompressed is implicit. */ } else if(!opt.expert && select_algo_from_prefs(pk_list,PREFTYPE_ZIP, compr_algo,NULL)!=compr_algo) log_info(_("WARNING: forcing compression algorithm %s (%d)" " violates recipient preferences\n"), compress_algo_to_string(compr_algo),compr_algo); /* algo 0 means no compression */ if( compr_algo ) { if (cfx.dek && cfx.dek->use_mdc) zfx.new_ctb = 1; push_compress_filter(out,&zfx,compr_algo); } } /* do the work */ if (!opt.no_literal) { if( (rc = build_packet( out, &pkt )) ) log_error("build_packet failed: %s\n", g10_errstr(rc) ); } else { /* user requested not to create a literal packet, so we copy the plain data */ byte copy_buffer[4096]; int bytes_copied; while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1) if (iobuf_write(out, copy_buffer, bytes_copied) == -1) { rc = G10ERR_WRITE_FILE; log_error("copying input to output failed: %s\n", g10_errstr(rc) ); break; } wipememory(copy_buffer, 4096); /* burn buffer */ } /* finish the stuff */ leave: iobuf_close(inp); if( rc ) iobuf_cancel(out); else { iobuf_close(out); /* fixme: check returncode */ write_status( STATUS_END_ENCRYPTION ); } if( pt ) pt->buf = NULL; free_packet(&pkt); xfree(cfx.dek); xfree(symkey_dek); xfree(symkey_s2k); release_pk_list( pk_list ); return rc; } /**************** * Filter to do a complete public key encryption. */ int encrypt_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { size_t size = *ret_len; encrypt_filter_context_t *efx = opaque; int rc=0; if( control == IOBUFCTRL_UNDERFLOW ) { /* decrypt */ BUG(); /* not used */ } else if( control == IOBUFCTRL_FLUSH ) { /* encrypt */ if( !efx->header_okay ) { efx->cfx.dek = xmalloc_secure_clear( sizeof *efx->cfx.dek ); if( !opt.def_cipher_algo ) { /* try to get it from the prefs */ efx->cfx.dek->algo = select_algo_from_prefs(efx->pk_list,PREFTYPE_SYM,-1,NULL); if( efx->cfx.dek->algo == -1 ) { /* because 3DES is implicitly in the prefs, this can only * happen if we do not have any public keys in the list */ efx->cfx.dek->algo = DEFAULT_CIPHER_ALGO; } } else { if(!opt.expert && select_algo_from_prefs(efx->pk_list,PREFTYPE_SYM, opt.def_cipher_algo, NULL)!=opt.def_cipher_algo) log_info(_("forcing symmetric cipher %s (%d) " "violates recipient preferences\n"), cipher_algo_to_string(opt.def_cipher_algo), opt.def_cipher_algo); efx->cfx.dek->algo = opt.def_cipher_algo; } efx->cfx.dek->use_mdc = use_mdc(efx->pk_list,efx->cfx.dek->algo); make_session_key( efx->cfx.dek ); if( DBG_CIPHER ) log_hexdump("DEK is: ", efx->cfx.dek->key, efx->cfx.dek->keylen ); rc = write_pubkey_enc_from_list( efx->pk_list, efx->cfx.dek, a ); if( rc ) return rc; if(efx->symkey_s2k && efx->symkey_dek) { rc=write_symkey_enc(efx->symkey_s2k,efx->symkey_dek, efx->cfx.dek,a); if(rc) return rc; } iobuf_push_filter( a, cipher_filter, &efx->cfx ); efx->header_okay = 1; } rc = iobuf_write( a, buf, size ); } else if( control == IOBUFCTRL_FREE ) { xfree(efx->symkey_dek); xfree(efx->symkey_s2k); } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "encrypt_filter"; } return rc; } /**************** * Write pubkey-enc packets from the list of PKs to OUT. */ static int write_pubkey_enc_from_list( PK_LIST pk_list, DEK *dek, IOBUF out ) { PACKET pkt; PKT_public_key *pk; PKT_pubkey_enc *enc; int rc; for( ; pk_list; pk_list = pk_list->next ) { MPI frame; pk = pk_list->pk; print_pubkey_algo_note( pk->pubkey_algo ); enc = xmalloc_clear( sizeof *enc ); enc->pubkey_algo = pk->pubkey_algo; keyid_from_pk( pk, enc->keyid ); enc->throw_keyid = (opt.throw_keyid || (pk_list->flags&1)); if(opt.throw_keyid && (PGP2 || PGP6 || PGP7 || PGP8)) { log_info(_("you may not use %s while in %s mode\n"), "--throw-keyid",compliance_option_string()); compliance_failure(); } /* Okay, what's going on: We have the session key somewhere in * the structure DEK and want to encode this session key in * an integer value of n bits. pubkey_nbits gives us the * number of bits we have to use. We then encode the session * key in some way and we get it back in the big intger value * FRAME. Then we use FRAME, the public key PK->PKEY and the * algorithm number PK->PUBKEY_ALGO and pass it to pubkey_encrypt * which returns the encrypted value in the array ENC->DATA. * This array has a size which depends on the used algorithm * (e.g. 2 for Elgamal). We don't need frame anymore because we * have everything now in enc->data which is the passed to * build_packet() */ frame = encode_session_key( dek, pubkey_nbits( pk->pubkey_algo, pk->pkey ) ); rc = pubkey_encrypt( pk->pubkey_algo, enc->data, frame, pk->pkey ); mpi_free( frame ); if( rc ) log_error("pubkey_encrypt failed: %s\n", g10_errstr(rc) ); else { if( opt.verbose ) { char *ustr = get_user_id_string_native (enc->keyid); log_info(_("%s/%s encrypted for: \"%s\"\n"), pubkey_algo_to_string(enc->pubkey_algo), cipher_algo_to_string(dek->algo), ustr ); xfree(ustr); } /* and write it */ init_packet(&pkt); pkt.pkttype = PKT_PUBKEY_ENC; pkt.pkt.pubkey_enc = enc; rc = build_packet( out, &pkt ); if( rc ) log_error("build_packet(pubkey_enc) failed: %s\n", g10_errstr(rc)); } free_pubkey_enc(enc); if( rc ) return rc; } return 0; } void encode_crypt_files(int nfiles, char **files, STRLIST remusr) { int rc = 0; if (opt.outfile) { log_error(_("--output doesn't work for this command\n")); return; } if (!nfiles) { char line[2048]; unsigned int lno = 0; while ( fgets(line, DIM(line), stdin) ) { lno++; if (!*line || line[strlen(line)-1] != '\n') { log_error("input line %u too long or missing LF\n", lno); return; } line[strlen(line)-1] = '\0'; print_file_status(STATUS_FILE_START, line, 2); if ( (rc = encode_crypt(line, remusr, 0)) ) log_error("encryption of `%s' failed: %s\n", print_fname_stdin(line), g10_errstr(rc) ); write_status( STATUS_FILE_DONE ); iobuf_ioctl( NULL, 2, 0, NULL); /* Invalidate entire cache. */ } } else { while (nfiles--) { print_file_status(STATUS_FILE_START, *files, 2); if ( (rc = encode_crypt(*files, remusr, 0)) ) log_error("encryption of `%s' failed: %s\n", print_fname_stdin(*files), g10_errstr(rc) ); write_status( STATUS_FILE_DONE ); iobuf_ioctl( NULL, 2, 0, NULL); /* Invalidate entire cache. */ files++; } } } gnupg-1.4.20/g10/status.c0000644000175000017500000005243012635262326011730 00000000000000/* status.c * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, * 2004, 2005 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 3 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, see . */ #include #include #include #include #include #include #include #ifdef USE_SHM_COPROCESSING #ifdef USE_CAPABILITIES #include #endif #ifdef HAVE_SYS_IPC_H #include #include #endif #ifdef HAVE_SYS_SHM_H #include #endif #if defined(HAVE_MLOCK) #include #endif #endif #include "util.h" #include "status.h" #include "ttyio.h" #include "options.h" #include "main.h" #include "i18n.h" #include "cipher.h" /* for progress functions */ #define CONTROL_D ('D' - 'A' + 1) static FILE *statusfp; #ifdef USE_SHM_COPROCESSING static int shm_id = -1; static volatile char *shm_area; static size_t shm_size; static int shm_is_locked; #endif /*USE_SHM_COPROCESSING*/ static void progress_cb ( void *ctx, int c ) { char buf[50]; if ( c == '\n' ) sprintf ( buf, "%.20s X 100 100", (char*)ctx ); else sprintf ( buf, "%.20s %c 0 0", (char*)ctx, c ); write_status_text ( STATUS_PROGRESS, buf ); } static const char * get_status_string ( int no ) { const char *s; switch( no ) { case STATUS_ENTER : s = "ENTER"; break; case STATUS_LEAVE : s = "LEAVE"; break; case STATUS_ABORT : s = "ABORT"; break; case STATUS_NEWSIG : s = "NEWSIG"; break; case STATUS_GOODSIG: s = "GOODSIG"; break; case STATUS_KEYEXPIRED: s = "KEYEXPIRED"; break; case STATUS_KEYREVOKED: s = "KEYREVOKED"; break; case STATUS_BADSIG : s = "BADSIG"; break; case STATUS_ERRSIG : s = "ERRSIG"; break; case STATUS_BADARMOR : s = "BADARMOR"; break; case STATUS_TRUST_UNDEFINED: s = "TRUST_UNDEFINED"; break; case STATUS_TRUST_NEVER : s = "TRUST_NEVER"; break; case STATUS_TRUST_MARGINAL : s = "TRUST_MARGINAL"; break; case STATUS_TRUST_FULLY : s = "TRUST_FULLY"; break; case STATUS_TRUST_ULTIMATE : s = "TRUST_ULTIMATE"; break; case STATUS_GET_BOOL : s = "GET_BOOL"; break; case STATUS_GET_LINE : s = "GET_LINE"; break; case STATUS_GET_HIDDEN : s = "GET_HIDDEN"; break; case STATUS_GOT_IT : s = "GOT_IT"; break; case STATUS_SHM_INFO : s = "SHM_INFO"; break; case STATUS_SHM_GET : s = "SHM_GET"; break; case STATUS_SHM_GET_BOOL : s = "SHM_GET_BOOL"; break; case STATUS_SHM_GET_HIDDEN : s = "SHM_GET_HIDDEN"; break; case STATUS_NEED_PASSPHRASE: s = "NEED_PASSPHRASE"; break; case STATUS_VALIDSIG : s = "VALIDSIG"; break; case STATUS_SIG_ID : s = "SIG_ID"; break; case STATUS_ENC_TO : s = "ENC_TO"; break; case STATUS_NODATA : s = "NODATA"; break; case STATUS_BAD_PASSPHRASE : s = "BAD_PASSPHRASE"; break; case STATUS_NO_PUBKEY : s = "NO_PUBKEY"; break; case STATUS_NO_SECKEY : s = "NO_SECKEY"; break; case STATUS_NEED_PASSPHRASE_SYM: s = "NEED_PASSPHRASE_SYM"; break; case STATUS_NEED_PASSPHRASE_PIN: s = "NEED_PASSPHRASE_PIN"; break; case STATUS_DECRYPTION_FAILED: s = "DECRYPTION_FAILED"; break; case STATUS_DECRYPTION_OKAY: s = "DECRYPTION_OKAY"; break; case STATUS_MISSING_PASSPHRASE: s = "MISSING_PASSPHRASE"; break; case STATUS_GOOD_PASSPHRASE : s = "GOOD_PASSPHRASE"; break; case STATUS_GOODMDC : s = "GOODMDC"; break; case STATUS_BADMDC : s = "BADMDC"; break; case STATUS_ERRMDC : s = "ERRMDC"; break; case STATUS_IMPORTED : s = "IMPORTED"; break; case STATUS_IMPORT_OK : s = "IMPORT_OK"; break; case STATUS_IMPORT_CHECK : s = "IMPORT_CHECK"; break; case STATUS_IMPORT_RES : s = "IMPORT_RES"; break; case STATUS_FILE_START : s = "FILE_START"; break; case STATUS_FILE_DONE : s = "FILE_DONE"; break; case STATUS_FILE_ERROR : s = "FILE_ERROR"; break; case STATUS_BEGIN_DECRYPTION:s = "BEGIN_DECRYPTION"; break; case STATUS_END_DECRYPTION : s = "END_DECRYPTION"; break; case STATUS_BEGIN_ENCRYPTION:s = "BEGIN_ENCRYPTION"; break; case STATUS_END_ENCRYPTION : s = "END_ENCRYPTION"; break; case STATUS_DELETE_PROBLEM : s = "DELETE_PROBLEM"; break; case STATUS_PROGRESS : s = "PROGRESS"; break; case STATUS_SIG_CREATED : s = "SIG_CREATED"; break; case STATUS_SESSION_KEY : s = "SESSION_KEY"; break; case STATUS_NOTATION_NAME : s = "NOTATION_NAME" ; break; case STATUS_NOTATION_DATA : s = "NOTATION_DATA" ; break; case STATUS_POLICY_URL : s = "POLICY_URL" ; break; case STATUS_BEGIN_STREAM : s = "BEGIN_STREAM"; break; case STATUS_END_STREAM : s = "END_STREAM"; break; case STATUS_KEY_CREATED : s = "KEY_CREATED"; break; case STATUS_KEY_NOT_CREATED: s = "KEY_NOT_CREATED"; break; case STATUS_USERID_HINT : s = "USERID_HINT"; break; case STATUS_UNEXPECTED : s = "UNEXPECTED"; break; case STATUS_INV_RECP : s = "INV_RECP"; break; case STATUS_NO_RECP : s = "NO_RECP"; break; case STATUS_ALREADY_SIGNED : s = "ALREADY_SIGNED"; break; case STATUS_SIGEXPIRED : s = "SIGEXPIRED deprecated-use-keyexpired-instead"; break; case STATUS_EXPSIG : s = "EXPSIG"; break; case STATUS_EXPKEYSIG : s = "EXPKEYSIG"; break; case STATUS_REVKEYSIG : s = "REVKEYSIG"; break; case STATUS_ATTRIBUTE : s = "ATTRIBUTE"; break; case STATUS_CARDCTRL : s = "CARDCTRL"; break; case STATUS_PLAINTEXT : s = "PLAINTEXT"; break; case STATUS_PLAINTEXT_LENGTH:s = "PLAINTEXT_LENGTH"; break; case STATUS_SIG_SUBPACKET : s = "SIG_SUBPACKET"; break; case STATUS_SC_OP_SUCCESS : s = "SC_OP_SUCCESS"; break; case STATUS_SC_OP_FAILURE : s = "SC_OP_FAILURE"; break; case STATUS_BACKUP_KEY_CREATED:s="BACKUP_KEY_CREATED"; break; case STATUS_PKA_TRUST_BAD : s = "PKA_TRUST_BAD"; break; case STATUS_PKA_TRUST_GOOD : s = "PKA_TRUST_GOOD"; break; case STATUS_BEGIN_SIGNING : s = "BEGIN_SIGNING"; break; case STATUS_ERROR : s = "ERROR"; break; case STATUS_DECRYPTION_INFO: s = "DECRYPTION_INFO"; break; default: s = "?"; break; } return s; } /* Return true if the status message NO may currently be issued. We need this to avoid syncronisation problem while auto retrieving a key. There it may happen that a status NODATA is issued for a non available key and the user may falsely interpret this has a missing signature. */ static int status_currently_allowed (int no) { if (!glo_ctrl.in_auto_key_retrieve) return 1; /* Yes. */ /* We allow some statis anyway, so that import statistics are correct and to avoid problems if the retriebval subsystem will prompt the user. */ switch (no) { case STATUS_GET_BOOL: case STATUS_GET_LINE: case STATUS_GET_HIDDEN: case STATUS_GOT_IT: case STATUS_IMPORTED: case STATUS_IMPORT_OK: case STATUS_IMPORT_CHECK: case STATUS_IMPORT_RES: return 1; /* Yes. */ default: break; } return 0; /* No. */ } void set_status_fd ( int fd ) { static int last_fd = -1; if ( fd != -1 && last_fd == fd ) return; if ( statusfp && statusfp != stdout && statusfp != stderr ) fclose (statusfp); statusfp = NULL; if ( fd == -1 ) return; if( fd == 1 ) statusfp = stdout; else if( fd == 2 ) statusfp = stderr; else statusfp = fdopen( fd, "w" ); if( !statusfp ) { log_fatal("can't open fd %d for status output: %s\n", fd, strerror(errno)); } last_fd = fd; register_primegen_progress ( progress_cb, "primegen" ); register_pk_dsa_progress ( progress_cb, "pk_dsa" ); register_pk_elg_progress ( progress_cb, "pk_elg" ); } int is_status_enabled() { return !!statusfp; } void write_status ( int no ) { write_status_text( no, NULL ); } void write_status_text ( int no, const char *text) { if( !statusfp || !status_currently_allowed (no) ) return; /* Not enabled or allowed. */ fputs ( "[GNUPG:] ", statusfp ); fputs ( get_status_string (no), statusfp ); if( text ) { putc ( ' ', statusfp ); for (; *text; text++) { if (*text == '\n') fputs ( "\\n", statusfp ); else if (*text == '\r') fputs ( "\\r", statusfp ); else putc ( *(const byte *)text, statusfp ); } } putc ('\n',statusfp); if ( fflush (statusfp) && opt.exit_on_status_write_error ) g10_exit (0); } /* * Write a status line with a buffer using %XX escapes. If WRAP is > * 0 wrap the line after this length. If STRING is not NULL it will * be prepended to the buffer, no escaping is done for string. * A wrap of -1 forces spaces not to be encoded as %20. */ void write_status_text_and_buffer ( int no, const char *string, const char *buffer, size_t len, int wrap ) { const char *s, *text; int esc, first; int lower_limit = ' '; size_t n, count, dowrap; if( !statusfp || !status_currently_allowed (no) ) return; /* Not enabled or allowed. */ if (wrap == -1) { lower_limit--; wrap = 0; } text = get_status_string (no); count = dowrap = first = 1; do { if (dowrap) { fprintf (statusfp, "[GNUPG:] %s ", text ); count = dowrap = 0; if (first && string) { fputs (string, statusfp); count += strlen (string); } first = 0; } for (esc=0, s=buffer, n=len; n && !esc; s++, n-- ) { if ( *s == '%' || *(const byte*)s <= lower_limit || *(const byte*)s == 127 ) esc = 1; if ( wrap && ++count > wrap ) { dowrap=1; break; } } if (esc) { s--; n++; } if (s != buffer) fwrite (buffer, s-buffer, 1, statusfp ); if ( esc ) { fprintf (statusfp, "%%%02X", *(const byte*)s ); s++; n--; } buffer = s; len = n; if ( dowrap && len ) putc ( '\n', statusfp ); } while ( len ); putc ('\n',statusfp); if ( fflush (statusfp) && opt.exit_on_status_write_error ) g10_exit (0); } void write_status_buffer ( int no, const char *buffer, size_t len, int wrap ) { write_status_text_and_buffer (no, NULL, buffer, len, wrap); } #ifdef USE_SHM_COPROCESSING #ifndef IPC_RMID_DEFERRED_RELEASE static void remove_shmid( void ) { if( shm_id != -1 ) { shmctl ( shm_id, IPC_RMID, 0); shm_id = -1; } } #endif void init_shm_coprocessing ( ulong requested_shm_size, int lock_mem ) { char buf[100]; struct shmid_ds shmds; #ifndef IPC_RMID_DEFERRED_RELEASE atexit( remove_shmid ); #endif requested_shm_size = (requested_shm_size + 4095) & ~4095; if ( requested_shm_size > 2 * 4096 ) log_fatal("too much shared memory requested; only 8k are allowed\n"); shm_size = 4096 /* one page for us */ + requested_shm_size; shm_id = shmget( IPC_PRIVATE, shm_size, IPC_CREAT | 0700 ); if ( shm_id == -1 ) log_fatal("can't get %uk of shared memory: %s\n", (unsigned)shm_size/1024, strerror(errno)); #if !defined(IPC_HAVE_SHM_LOCK) \ && defined(HAVE_MLOCK) && !defined(HAVE_BROKEN_MLOCK) /* part of the old code which uses mlock */ shm_area = shmat( shm_id, 0, 0 ); if ( shm_area == (char*)-1 ) log_fatal("can't attach %uk shared memory: %s\n", (unsigned)shm_size/1024, strerror(errno)); log_debug("mapped %uk shared memory at %p, id=%d\n", (unsigned)shm_size/1024, shm_area, shm_id ); if( lock_mem ) { #ifdef USE_CAPABILITIES cap_set_proc( cap_from_text("cap_ipc_lock+ep") ); #endif /* (need the cast for Solaris with Sun's workshop compilers) */ if ( mlock ( (char*)shm_area, shm_size) ) log_info("locking shared memory %d failed: %s\n", shm_id, strerror(errno)); else shm_is_locked = 1; #ifdef USE_CAPABILITIES cap_set_proc( cap_from_text("cap_ipc_lock+p") ); #endif } #ifdef IPC_RMID_DEFERRED_RELEASE if( shmctl( shm_id, IPC_RMID, 0) ) log_fatal("shmctl IPC_RMDID of %d failed: %s\n", shm_id, strerror(errno)); #endif if( shmctl( shm_id, IPC_STAT, &shmds ) ) log_fatal("shmctl IPC_STAT of %d failed: %s\n", shm_id, strerror(errno)); if( shmds.shm_perm.uid != getuid() ) { shmds.shm_perm.uid = getuid(); if( shmctl( shm_id, IPC_SET, &shmds ) ) log_fatal("shmctl IPC_SET of %d failed: %s\n", shm_id, strerror(errno)); } #else /* this is the new code which handles the changes in the SHM * semantics introduced with Linux 2.4. The changes is that we * now change the permissions and then attach to the memory. */ if( lock_mem ) { #ifdef USE_CAPABILITIES cap_set_proc( cap_from_text("cap_ipc_lock+ep") ); #endif #ifdef IPC_HAVE_SHM_LOCK if ( shmctl (shm_id, SHM_LOCK, 0) ) log_info("locking shared memory %d failed: %s\n", shm_id, strerror(errno)); else shm_is_locked = 1; #else log_info("Locking shared memory %d failed: No way to do it\n", shm_id ); #endif #ifdef USE_CAPABILITIES cap_set_proc( cap_from_text("cap_ipc_lock+p") ); #endif } if( shmctl( shm_id, IPC_STAT, &shmds ) ) log_fatal("shmctl IPC_STAT of %d failed: %s\n", shm_id, strerror(errno)); if( shmds.shm_perm.uid != getuid() ) { shmds.shm_perm.uid = getuid(); if( shmctl( shm_id, IPC_SET, &shmds ) ) log_fatal("shmctl IPC_SET of %d failed: %s\n", shm_id, strerror(errno)); } shm_area = shmat( shm_id, 0, 0 ); if ( shm_area == (char*)-1 ) log_fatal("can't attach %uk shared memory: %s\n", (unsigned)shm_size/1024, strerror(errno)); log_debug("mapped %uk shared memory at %p, id=%d\n", (unsigned)shm_size/1024, shm_area, shm_id ); #ifdef IPC_RMID_DEFERRED_RELEASE if( shmctl( shm_id, IPC_RMID, 0) ) log_fatal("shmctl IPC_RMDID of %d failed: %s\n", shm_id, strerror(errno)); #endif #endif /* write info; Protocol version, id, size, locked size */ sprintf( buf, "pv=1 pid=%d shmid=%d sz=%u lz=%u", (int)getpid(), shm_id, (unsigned)shm_size, shm_is_locked? (unsigned)shm_size:0 ); write_status_text( STATUS_SHM_INFO, buf ); } /**************** * Request a string from client * If GETBOOL, returns static string on true (do not free) or NULL for false */ static char * do_shm_get( const char *keyword, int hidden, int getbool ) { size_t n; byte *p; char *string; if( !shm_area ) BUG(); shm_area[0] = 0; /* msb of length of control block */ shm_area[1] = 32; /* and lsb */ shm_area[2] = 1; /* indicate that we are waiting on a reply */ shm_area[3] = 0; /* clear data available flag */ write_status_text( getbool? STATUS_SHM_GET_BOOL : hidden? STATUS_SHM_GET_HIDDEN : STATUS_SHM_GET, keyword ); do { pause_on_sigusr(1); if( shm_area[0] || shm_area[1] != 32 || shm_area[2] != 1 ) log_fatal("client modified shm control block - abort\n"); } while( !shm_area[3] ); shm_area[2] = 0; /* reset request flag */ p = (byte*)shm_area+32; n = p[0] << 8 | p[1]; p += 2; if( n+32+2+1 > 4095 ) log_fatal("client returns too large data (%u bytes)\n", (unsigned)n ); if( getbool ) return p[0]? "" : NULL; string = hidden? xmalloc_secure( n+1 ) : xmalloc( n+1 ); memcpy(string, p, n ); string[n] = 0; /* make sure it is a string */ if( hidden ) /* invalidate the memory */ memset( p, 0, n ); return string; } #endif /* USE_SHM_COPROCESSING */ static int myread(int fd, void *buf, size_t count) { int rc; do { rc = read( fd, buf, count ); } while ( rc == -1 && errno == EINTR ); if ( !rc && count ) { static int eof_emmited=0; if ( eof_emmited < 3 ) { *(char*)buf = CONTROL_D; rc = 1; eof_emmited++; } else { /* Ctrl-D not caught - do something reasonable */ #ifdef HAVE_DOSISH_SYSTEM raise (SIGINT); /* nothing to hangup under DOS */ #else raise (SIGHUP); /* no more input data */ #endif } } return rc; } /**************** * Request a string from the client over the command-fd * If getbool, returns static string on true (do not free) or NULL for false */ static char * do_get_from_fd( const char *keyword, int hidden, int getbool ) { int i, len; char *string; if(statusfp!=stdout) fflush(stdout); write_status_text( getbool? STATUS_GET_BOOL : hidden? STATUS_GET_HIDDEN : STATUS_GET_LINE, keyword ); for( string = NULL, i = len = 200; ; i++ ) { if( i >= len-1 ) { char *save = string; len += 100; string = hidden? xmalloc_secure ( len ) : xmalloc ( len ); if( save ) memcpy(string, save, i ); else i=0; } /* Hmmm: why not use our read_line function here */ if( myread( opt.command_fd, string+i, 1) != 1 || string[i] == '\n' ) break; else if ( string[i] == CONTROL_D ) { /* found ETX - cancel the line and return a sole ETX */ string[0] = CONTROL_D; i=1; break; } } string[i] = 0; write_status( STATUS_GOT_IT ); if( getbool ) /* Fixme: is this correct??? */ return (string[0] == 'Y' || string[0] == 'y') ? "" : NULL; return string; } int cpr_enabled() { if( opt.command_fd != -1 ) return 1; #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) return 1; #endif return 0; } char * cpr_get_no_help( const char *keyword, const char *prompt ) { char *p; if( opt.command_fd != -1 ) return do_get_from_fd ( keyword, 0, 0 ); #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) return do_shm_get( keyword, 0, 0 ); #endif for(;;) { p = tty_get( prompt ); return p; } } char * cpr_get( const char *keyword, const char *prompt ) { char *p; if( opt.command_fd != -1 ) return do_get_from_fd ( keyword, 0, 0 ); #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) return do_shm_get( keyword, 0, 0 ); #endif for(;;) { p = tty_get( prompt ); if( *p=='?' && !p[1] && !(keyword && !*keyword)) { xfree(p); display_online_help( keyword ); } else return p; } } char * cpr_get_utf8( const char *keyword, const char *prompt ) { char *p; p = cpr_get( keyword, prompt ); if( p ) { char *utf8 = native_to_utf8( p ); xfree( p ); p = utf8; } return p; } char * cpr_get_hidden( const char *keyword, const char *prompt ) { char *p; if( opt.command_fd != -1 ) return do_get_from_fd ( keyword, 1, 0 ); #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) return do_shm_get( keyword, 1, 0 ); #endif for(;;) { p = tty_get_hidden( prompt ); if( *p == '?' && !p[1] ) { xfree(p); display_online_help( keyword ); } else return p; } } void cpr_kill_prompt(void) { if( opt.command_fd != -1 ) return; #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) return; #endif tty_kill_prompt(); return; } int cpr_get_answer_is_yes( const char *keyword, const char *prompt ) { int yes; char *p; if( opt.command_fd != -1 ) return !!do_get_from_fd ( keyword, 0, 1 ); #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) return !!do_shm_get( keyword, 0, 1 ); #endif for(;;) { p = tty_get( prompt ); trim_spaces(p); /* it is okay to do this here */ if( *p == '?' && !p[1] ) { xfree(p); display_online_help( keyword ); } else { tty_kill_prompt(); yes = answer_is_yes(p); xfree(p); return yes; } } } int cpr_get_answer_yes_no_quit( const char *keyword, const char *prompt ) { int yes; char *p; if( opt.command_fd != -1 ) return !!do_get_from_fd ( keyword, 0, 1 ); #ifdef USE_SHM_COPROCESSING if( opt.shm_coprocess ) return !!do_shm_get( keyword, 0, 1 ); #endif for(;;) { p = tty_get( prompt ); trim_spaces(p); /* it is okay to do this here */ if( *p == '?' && !p[1] ) { xfree(p); display_online_help( keyword ); } else { tty_kill_prompt(); yes = answer_is_yes_no_quit(p); xfree(p); return yes; } } } int cpr_get_answer_okay_cancel (const char *keyword, const char *prompt, int def_answer) { int yes; char *answer = NULL; char *p; if( opt.command_fd != -1 ) answer = do_get_from_fd ( keyword, 0, 0 ); #ifdef USE_SHM_COPROCESSING else if( opt.shm_coprocess ) answer = do_shm_get( keyword, 0, 0 ); #endif if (answer) { yes = answer_is_okay_cancel (answer, def_answer); xfree (answer); return yes; } for(;;) { p = tty_get( prompt ); trim_spaces(p); /* it is okay to do this here */ if (*p == '?' && !p[1]) { xfree(p); display_online_help (keyword); } else { tty_kill_prompt(); yes = answer_is_okay_cancel (p, def_answer); xfree(p); return yes; } } } gnupg-1.4.20/g10/armor.c0000644000175000017500000011672512635262326011535 00000000000000/* armor.c - Armor flter * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007 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 3 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, see . */ #include #include #include #include #include #include #include #include "errors.h" #include "iobuf.h" #include "memory.h" #include "util.h" #include "filter.h" #include "packet.h" #include "options.h" #include "main.h" #include "status.h" #include "i18n.h" #define MAX_LINELEN 20000 #define CRCINIT 0xB704CE #define CRCPOLY 0X864CFB #define CRCUPDATE(a,c) do { \ a = ((a) << 8) ^ crc_table[((a)&0xff >> 16) ^ (c)]; \ a &= 0x00ffffff; \ } while(0) static u32 crc_table[256]; static byte bintoasc[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"; static byte asctobin[256]; /* runtime initialized */ static int is_initialized; typedef enum { fhdrHASArmor = 0, fhdrNOArmor, fhdrINIT, fhdrINITCont, fhdrINITSkip, fhdrCHECKBegin, fhdrWAITHeader, fhdrWAITClearsig, fhdrSKIPHeader, fhdrCLEARSIG, fhdrREADClearsig, fhdrNullClearsig, fhdrEMPTYClearsig, fhdrCHECKClearsig, fhdrCHECKClearsig2, fhdrCHECKDashEscaped, fhdrCHECKDashEscaped2, fhdrCHECKDashEscaped3, fhdrREADClearsigNext, fhdrENDClearsig, fhdrENDClearsigHelp, fhdrTESTSpaces, fhdrCLEARSIGSimple, fhdrCLEARSIGSimpleNext, fhdrTEXT, fhdrTEXTSimple, fhdrERROR, fhdrERRORShow, fhdrEOF } fhdr_state_t; /* if we encounter this armor string with this index, go * into a mode which fakes packets and wait for the next armor */ #define BEGIN_SIGNATURE 2 #define BEGIN_SIGNED_MSG_IDX 3 static char *head_strings[] = { "BEGIN PGP MESSAGE", "BEGIN PGP PUBLIC KEY BLOCK", "BEGIN PGP SIGNATURE", "BEGIN PGP SIGNED MESSAGE", "BEGIN PGP ARMORED FILE", /* gnupg extension */ "BEGIN PGP PRIVATE KEY BLOCK", "BEGIN PGP SECRET KEY BLOCK", /* only used by pgp2 */ NULL }; static char *tail_strings[] = { "END PGP MESSAGE", "END PGP PUBLIC KEY BLOCK", "END PGP SIGNATURE", "END dummy", "END PGP ARMORED FILE", "END PGP PRIVATE KEY BLOCK", "END PGP SECRET KEY BLOCK", NULL }; /* Create a new context for armor filters. */ armor_filter_context_t * new_armor_context (void) { armor_filter_context_t *afx; afx = xcalloc (1, sizeof *afx); afx->refcount = 1; return afx; } /* Release an armor filter context. Passing NULL is explicitly allowed and a no-op. */ void release_armor_context (armor_filter_context_t *afx) { if (!afx) return; /* In contrast to 2.0, we use in 1.4 heap based contexts only in a very few places and in general keep the stack based contexts. A REFCOUNT of 0 indicates a stack based context and thus we don't do anything in this case. */ if (!afx->refcount) return; if ( --afx->refcount ) return; xfree (afx); } /* Push the armor filter onto the iobuf stream IOBUF. */ int push_armor_filter (armor_filter_context_t *afx, iobuf_t iobuf) { int rc; if (!afx->refcount) return iobuf_push_filter (iobuf, armor_filter, afx); afx->refcount++; rc = iobuf_push_filter (iobuf, armor_filter, afx); if (rc) afx->refcount--; return rc; } static void initialize(void) { int i, j; u32 t; byte *s; /* init the crc lookup table */ crc_table[0] = 0; for(i=j=0; j < 128; j++ ) { t = crc_table[j]; if( t & 0x00800000 ) { t <<= 1; crc_table[i++] = t ^ CRCPOLY; crc_table[i++] = t; } else { t <<= 1; crc_table[i++] = t; crc_table[i++] = t ^ CRCPOLY; } } /* build the helptable for radix64 to bin conversion */ for(i=0; i < 256; i++ ) asctobin[i] = 255; /* used to detect invalid characters */ for(s=bintoasc,i=0; *s; s++,i++ ) asctobin[*s] = i; is_initialized=1; } /**************** * Check whether this is an armored file or not See also * parse-packet.c for details on this code For unknown historic * reasons we use a string here but only the first byte will be used. * Returns: True if it seems to be armored */ static int is_armored( const byte *buf ) { int ctb, pkttype; ctb = *buf; if( !(ctb & 0x80) ) return 1; /* invalid packet: assume it is armored */ pkttype = ctb & 0x40 ? (ctb & 0x3f) : ((ctb>>2)&0xf); switch( pkttype ) { case PKT_MARKER: case PKT_SYMKEY_ENC: case PKT_ONEPASS_SIG: case PKT_PUBLIC_KEY: case PKT_SECRET_KEY: case PKT_PUBKEY_ENC: case PKT_SIGNATURE: case PKT_COMMENT: case PKT_OLD_COMMENT: case PKT_PLAINTEXT: case PKT_COMPRESSED: case PKT_ENCRYPTED: return 0; /* seems to be a regular packet: not armored */ } return 1; } /**************** * Try to check whether the iobuf is armored * Returns true if this may be the case; the caller should use the * filter to do further processing. */ int use_armor_filter( IOBUF a ) { byte buf[1]; int n; /* fixme: there might be a problem with iobuf_peek */ n = iobuf_peek(a, buf, 1 ); if( n == -1 ) return 0; /* EOF, doesn't matter whether armored or not */ if( !n ) return 1; /* can't check it: try armored */ return is_armored(buf); } static void invalid_armor(void) { write_status(STATUS_BADARMOR); g10_exit(1); /* stop here */ } /**************** * check whether the armor header is valid on a signed message. * this is for security reasons: the header lines are not included in the * hash and by using some creative formatting rules, Mallory could fake * any text at the beginning of a document; assuming it is read with * a simple viewer. We only allow the Hash Header. */ static int parse_hash_header( const char *line ) { const char *s, *s2; unsigned found = 0; if( strlen(line) < 6 || strlen(line) > 60 ) return 0; /* too short or too long */ if( memcmp( line, "Hash:", 5 ) ) return 0; /* invalid header */ s = line+5; for(s=line+5;;s=s2) { for(; *s && (*s==' ' || *s == '\t'); s++ ) ; if( !*s ) break; for(s2=s+1; *s2 && *s2!=' ' && *s2 != '\t' && *s2 != ','; s2++ ) ; if( !strncmp( s, "RIPEMD160", s2-s ) ) found |= 1; else if( !strncmp( s, "SHA1", s2-s ) ) found |= 2; else if( !strncmp( s, "MD5", s2-s ) ) found |= 4; else if( !strncmp( s, "SHA224", s2-s ) ) found |= 8; else if( !strncmp( s, "SHA256", s2-s ) ) found |= 16; else if( !strncmp( s, "SHA384", s2-s ) ) found |= 32; else if( !strncmp( s, "SHA512", s2-s ) ) found |= 64; else return 0; for(; *s2 && (*s2==' ' || *s2 == '\t'); s2++ ) ; if( *s2 && *s2 != ',' ) return 0; if( *s2 ) s2++; } return found; } /* Returns true if this is a valid armor tag as per RFC-2440bis-21. */ static int is_armor_tag(const char *line) { if(strncmp(line,"Version",7)==0 || strncmp(line,"Comment",7)==0 || strncmp(line,"MessageID",9)==0 || strncmp(line,"Hash",4)==0 || strncmp(line,"Charset",7)==0) return 1; return 0; } /**************** * Check whether this is a armor line. * returns: -1 if it is not a armor header or the index number of the * armor header. */ static int is_armor_header( byte *line, unsigned len ) { const char *s; byte *save_p, *p; int save_c; int i; if( len < 15 ) return -1; /* too short */ if( memcmp( line, "-----", 5 ) ) return -1; /* no */ p = strstr( line+5, "-----"); if( !p ) return -1; save_p = p; p += 5; /* Some Windows environments seem to add whitespace to the end of the line, so we strip it here. This becomes strict if --rfc2440 is set since 2440 reads "The header lines, therefore, MUST start at the beginning of a line, and MUST NOT have text following them on the same line." It is unclear whether "text" refers to all text or just non-whitespace text. 4880 clarified this was only non-whitespace text. */ if(RFC2440) { if( *p == '\r' ) p++; if( *p == '\n' ) p++; } else while(*p==' ' || *p=='\r' || *p=='\n' || *p=='\t') p++; if( *p ) return -1; /* garbage after dashes */ save_c = *save_p; *save_p = 0; p = line+5; for(i=0; (s=head_strings[i]); i++ ) if( !strcmp(s, p) ) break; *save_p = save_c; if( !s ) return -1; /* unknown armor line */ if( opt.verbose > 1 ) log_info(_("armor: %s\n"), head_strings[i]); return i; } /* Helper to parse a "KEY FAILED " line and return the error code. LINEPTR points right behind "KEY ". */ int parse_key_failed_line (const void *lineptr, unsigned int len) { const byte *line = lineptr; int code = 0; for (; len && !spacep (line); len--, line++) ; for (; len && spacep (line); len--, line++) ; if (len > 7 && !memcmp (line, "FAILED ", 7)) { line += 7; len -= 7; for (; len && digitp (line); len--, line++) { code *= 10; code += atoi_1 (line); } } return code; } /**************** * Parse a header lines * Return 0: Empty line (end of header lines) * -1: invalid header line * >0: Good header line */ static int parse_header_line( armor_filter_context_t *afx, byte *line, unsigned int len ) { byte *p; int hashes=0; unsigned int len2; len2 = check_trailing_ws( line, len ); if( !len2 ) { afx->buffer_pos = len2; /* (it is not the fine way to do it here) */ return 0; /* WS only: same as empty line */ } /* This is fussy. The spec says that a header line is delimited with a colon-space pair. This means that a line such as "Comment: " (with nothing else) is actually legal as an empty string comment. However, email and cut-and-paste being what it is, that trailing space may go away. Therefore, we accept empty headers delimited with only a colon. --rfc2440, as always, makes this strict and enforces the colon-space pair. -dms */ p = strchr( line, ':'); if( !p || (RFC2440 && p[1]!=' ') || (!RFC2440 && p[1]!=' ' && p[1]!='\n' && p[1]!='\r')) { log_error(_("invalid armor header: ")); print_string( stderr, line, len, 0 ); putc('\n', stderr); return -1; } /* Chop off the whitespace we detected before */ len=len2; line[len2]='\0'; if( opt.verbose ) { log_info(_("armor header: ")); print_string( stderr, line, len, 0 ); putc('\n', stderr); } if( afx->in_cleartext ) { if( (hashes=parse_hash_header( line )) ) afx->hashes |= hashes; else if( strlen(line) > 15 && !memcmp( line, "NotDashEscaped:", 15 ) ) afx->not_dash_escaped = 1; else { log_error(_("invalid clearsig header\n")); return -1; } } else if(!is_armor_tag(line)) { /* Section 6.2: "Unknown keys should be reported to the user, but OpenPGP should continue to process the message." Note that in a clearsigned message this applies to the signature part (i.e. "BEGIN PGP SIGNATURE") and not the signed data ("BEGIN PGP SIGNED MESSAGE"). The only key allowed in the signed data section is "Hash". */ log_info(_("unknown armor header: ")); print_string( stderr, line, len, 0 ); putc('\n', stderr); } return 1; } /* figure out whether the data is armored or not */ static int check_input( armor_filter_context_t *afx, IOBUF a ) { int rc = 0; int i; byte *line; unsigned len; unsigned maxlen; int hdr_line = -1; /* read the first line to see whether this is armored data */ maxlen = MAX_LINELEN; len = afx->buffer_len = iobuf_read_line( a, &afx->buffer, &afx->buffer_size, &maxlen ); line = afx->buffer; if( !maxlen ) { /* line has been truncated: assume not armored */ afx->inp_checked = 1; afx->inp_bypass = 1; return 0; } if( !len ) { return -1; /* eof */ } /* (the line is always a C string but maybe longer) */ if( *line == '\n' || ( len && (*line == '\r' && line[1]=='\n') ) ) ; else if( !is_armored( line ) ) { afx->inp_checked = 1; afx->inp_bypass = 1; return 0; } /* find the armor header */ while(len) { i = is_armor_header( line, len ); if (i == -1 && afx->only_keyblocks && !afx->key_failed_code && len > 4 && !memcmp (line, "KEY ", 4)) { /* This is probably input from a keyserver helper and we have not yet seen an error line. */ afx->key_failed_code = parse_key_failed_line (line+4, len-4); } if( i >= 0 && !(afx->only_keyblocks && i != 1 && i != 5 && i != 6 )) { hdr_line = i; if( hdr_line == BEGIN_SIGNED_MSG_IDX ) { if( afx->in_cleartext ) { log_error(_("nested clear text signatures\n")); rc = G10ERR_INVALID_ARMOR; } afx->in_cleartext = 1; } break; } /* read the next line (skip all truncated lines) */ do { maxlen = MAX_LINELEN; afx->buffer_len = iobuf_read_line( a, &afx->buffer, &afx->buffer_size, &maxlen ); line = afx->buffer; len = afx->buffer_len; } while( !maxlen ); } /* Parse the header lines. */ while(len) { /* Read the next line (skip all truncated lines). */ do { maxlen = MAX_LINELEN; afx->buffer_len = iobuf_read_line( a, &afx->buffer, &afx->buffer_size, &maxlen ); line = afx->buffer; len = afx->buffer_len; } while( !maxlen ); i = parse_header_line( afx, line, len ); if( i <= 0 ) { if (i && RFC2440) rc = G10ERR_INVALID_ARMOR; break; } } if( rc ) invalid_armor(); else if( afx->in_cleartext ) afx->faked = 1; else { afx->inp_checked = 1; afx->crc = CRCINIT; afx->idx = 0; afx->radbuf[0] = 0; } return rc; } #define PARTIAL_CHUNK 512 #define PARTIAL_POW 9 /**************** * Fake a literal data packet and wait for the next armor line * fixme: empty line handling and null length clear text signature are * not implemented/checked. */ static int fake_packet( armor_filter_context_t *afx, IOBUF a, size_t *retn, byte *buf, size_t size ) { int rc = 0; size_t len = 0; int lastline = 0; unsigned maxlen, n; byte *p; byte tempbuf[PARTIAL_CHUNK]; size_t tempbuf_len=0; while( !rc && size-len>=(PARTIAL_CHUNK+1)) { /* copy what we have in the line buffer */ if( afx->faked == 1 ) afx->faked++; /* skip the first (empty) line */ else { /* It's full, so write this partial chunk */ if(tempbuf_len==PARTIAL_CHUNK) { buf[len++]=0xE0+PARTIAL_POW; memcpy(&buf[len],tempbuf,PARTIAL_CHUNK); len+=PARTIAL_CHUNK; tempbuf_len=0; continue; } while( tempbuf_len < PARTIAL_CHUNK && afx->buffer_pos < afx->buffer_len ) tempbuf[tempbuf_len++] = afx->buffer[afx->buffer_pos++]; if( tempbuf_len==PARTIAL_CHUNK ) continue; } /* read the next line */ maxlen = MAX_LINELEN; afx->buffer_pos = 0; afx->buffer_len = iobuf_read_line( a, &afx->buffer, &afx->buffer_size, &maxlen ); if( !afx->buffer_len ) { rc = -1; /* eof (should not happen) */ continue; } if( !maxlen ) afx->truncated++; p = afx->buffer; n = afx->buffer_len; /* Armor header or dash-escaped line? */ if(p[0]=='-') { /* 2440bis-10: When reversing dash-escaping, an implementation MUST strip the string "- " if it occurs at the beginning of a line, and SHOULD warn on "-" and any character other than a space at the beginning of a line. */ if(p[1]==' ' && !afx->not_dash_escaped) { /* It's a dash-escaped line, so skip over the escape. */ afx->buffer_pos = 2; } else if(p[1]=='-' && p[2]=='-' && p[3]=='-' && p[4]=='-') { /* Five dashes in a row mean it's probably armor header. */ int type = is_armor_header( p, n ); if( afx->not_dash_escaped && type != BEGIN_SIGNATURE ) ; /* this is okay */ else { if( type != BEGIN_SIGNATURE ) { log_info(_("unexpected armor: ")); print_string( stderr, p, n, 0 ); putc('\n', stderr); } lastline = 1; rc = -1; } } else if(!afx->not_dash_escaped) { /* Bad dash-escaping. */ log_info(_("invalid dash escaped line: ")); print_string( stderr, p, n, 0 ); putc('\n', stderr); } } /* Now handle the end-of-line canonicalization */ if( !afx->not_dash_escaped ) { int crlf = n > 1 && p[n-2] == '\r' && p[n-1]=='\n'; /* PGP2 does not treat a tab as white space character */ afx->buffer_len= trim_trailing_chars( &p[afx->buffer_pos], n-afx->buffer_pos, afx->pgp2mode ? " \r\n" : " \t\r\n"); afx->buffer_len+=afx->buffer_pos; /* the buffer is always allocated with enough space to append * the removed [CR], LF and a Nul * The reason for this complicated procedure is to keep at least * the original type of lineending - handling of the removed * trailing spaces seems to be impossible in our method * of faking a packet; either we have to use a temporary file * or calculate the hash here in this module and somehow find * a way to send the hash down the processing line (well, a special * faked packet could do the job). */ if( crlf ) afx->buffer[afx->buffer_len++] = '\r'; afx->buffer[afx->buffer_len++] = '\n'; afx->buffer[afx->buffer_len] = '\0'; } } if( lastline ) { /* write last (ending) length header */ if(tempbuf_len<192) buf[len++]=tempbuf_len; else { buf[len++]=((tempbuf_len-192)/256) + 192; buf[len++]=(tempbuf_len-192) % 256; } memcpy(&buf[len],tempbuf,tempbuf_len); len+=tempbuf_len; rc = 0; afx->faked = 0; afx->in_cleartext = 0; /* and now read the header lines */ afx->buffer_pos = 0; for(;;) { int i; /* read the next line (skip all truncated lines) */ do { maxlen = MAX_LINELEN; afx->buffer_len = iobuf_read_line( a, &afx->buffer, &afx->buffer_size, &maxlen ); } while( !maxlen ); p = afx->buffer; n = afx->buffer_len; if( !n ) { rc = -1; break; /* eof */ } i = parse_header_line( afx, p , n ); if( i <= 0 ) { if( i ) invalid_armor(); break; } } afx->inp_checked = 1; afx->crc = CRCINIT; afx->idx = 0; afx->radbuf[0] = 0; } *retn = len; return rc; } static int invalid_crc(void) { if ( opt.ignore_crc_error ) return 0; log_inc_errorcount(); return G10ERR_INVALID_ARMOR; } static int radix64_read( armor_filter_context_t *afx, IOBUF a, size_t *retn, byte *buf, size_t size ) { byte val; int c=0, c2; /*init c because gcc is not clever enough for the continue*/ int checkcrc=0; int rc = 0; size_t n = 0; int idx, i, onlypad=0; u32 crc; crc = afx->crc; idx = afx->idx; val = afx->radbuf[0]; for( n=0; n < size; ) { if( afx->buffer_pos < afx->buffer_len ) c = afx->buffer[afx->buffer_pos++]; else { /* read the next line */ unsigned maxlen = MAX_LINELEN; afx->buffer_pos = 0; afx->buffer_len = iobuf_read_line( a, &afx->buffer, &afx->buffer_size, &maxlen ); if( !maxlen ) afx->truncated++; if( !afx->buffer_len ) break; /* eof */ continue; } again: if( c == '\n' || c == ' ' || c == '\r' || c == '\t' ) continue; else if( c == '=' ) { /* Pad character: stop or CRC sum starts. */ /* some mailers leave quoted-printable encoded characters * so we try to workaround this */ if( afx->buffer_pos+2 < afx->buffer_len ) { int cc1, cc2, cc3; cc1 = afx->buffer[afx->buffer_pos]; cc2 = afx->buffer[afx->buffer_pos+1]; cc3 = afx->buffer[afx->buffer_pos+2]; if( isxdigit(cc1) && isxdigit(cc2) && strchr( "=\n\r\t ", cc3 )) { /* well it seems to be the case - adjust */ c = isdigit(cc1)? (cc1 - '0'): (ascii_toupper(cc1)-'A'+10); c <<= 4; c |= isdigit(cc2)? (cc2 - '0'): (ascii_toupper(cc2)-'A'+10); afx->buffer_pos += 2; afx->qp_detected = 1; goto again; } } if (!n) onlypad = 1; if( idx == 1 ) buf[n++] = val; checkcrc++; break; } else if( (c = asctobin[(c2=c)]) == 255 ) { log_error(_("invalid radix64 character %02X skipped\n"), c2); continue; } switch(idx) { case 0: val = c << 2; break; case 1: val |= (c>>4)&3; buf[n++]=val;val=(c<<4)&0xf0;break; case 2: val |= (c>>2)&15; buf[n++]=val;val=(c<<6)&0xc0;break; case 3: val |= c&0x3f; buf[n++] = val; break; } idx = (idx+1) % 4; } for(i=0; i < n; i++ ) crc = (crc << 8) ^ crc_table[((crc >> 16)&0xff) ^ buf[i]]; crc &= 0x00ffffff; afx->crc = crc; afx->idx = idx; afx->radbuf[0] = val; if( checkcrc ) { afx->any_data = 1; afx->inp_checked=0; afx->faked = 0; for(;;) { /* skip lf and pad characters */ if( afx->buffer_pos < afx->buffer_len ) c = afx->buffer[afx->buffer_pos++]; else { /* read the next line */ unsigned maxlen = MAX_LINELEN; afx->buffer_pos = 0; afx->buffer_len = iobuf_read_line( a, &afx->buffer, &afx->buffer_size, &maxlen ); if( !maxlen ) afx->truncated++; if( !afx->buffer_len ) break; /* eof */ continue; } if( c == '\n' || c == ' ' || c == '\r' || c == '\t' || c == '=' ) continue; break; } if( c == -1 ) log_error(_("premature eof (no CRC)\n")); else { u32 mycrc = 0; idx = 0; do { if( (c = asctobin[c]) == 255 ) break; switch(idx) { case 0: val = c << 2; break; case 1: val |= (c>>4)&3; mycrc |= val << 16;val=(c<<4)&0xf0;break; case 2: val |= (c>>2)&15; mycrc |= val << 8;val=(c<<6)&0xc0;break; case 3: val |= c&0x3f; mycrc |= val; break; } for(;;) { if( afx->buffer_pos < afx->buffer_len ) c = afx->buffer[afx->buffer_pos++]; else { /* read the next line */ unsigned maxlen = MAX_LINELEN; afx->buffer_pos = 0; afx->buffer_len = iobuf_read_line( a, &afx->buffer, &afx->buffer_size, &maxlen ); if( !maxlen ) afx->truncated++; if( !afx->buffer_len ) break; /* eof */ continue; } break; } if( !afx->buffer_len ) break; /* eof */ } while( ++idx < 4 ); if( c == -1 ) { log_info(_("premature eof (in CRC)\n")); rc = invalid_crc(); } else if( idx == 0 ) { /* No CRC at all is legal ("MAY") */ rc=0; } else if( idx != 4 ) { log_info(_("malformed CRC\n")); rc = invalid_crc(); } else if( mycrc != afx->crc ) { log_info (_("CRC error; %06lX - %06lX\n"), (ulong)afx->crc, (ulong)mycrc); rc = invalid_crc(); } else { rc = 0; /* FIXME: Here we should emit another control packet, * so that we know in mainproc that we are processing * a clearsign message */ #if 0 for(rc=0;!rc;) { rc = 0 /*check_trailer( &fhdr, c )*/; if( !rc ) { if( (c=iobuf_get(a)) == -1 ) rc = 2; } } if( rc == -1 ) rc = 0; else if( rc == 2 ) { log_error(_("premature eof (in trailer)\n")); rc = G10ERR_INVALID_ARMOR; } else { log_error(_("error in trailer line\n")); rc = G10ERR_INVALID_ARMOR; } #endif } } } if( !n && !onlypad ) rc = -1; *retn = n; return rc; } /**************** * This filter is used to handle the armor stuff */ int armor_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { size_t size = *ret_len; armor_filter_context_t *afx = opaque; int rc=0, i, c; byte radbuf[3]; int idx, idx2; size_t n=0; u32 crc; #if 0 static FILE *fp ; if( !fp ) { fp = fopen("armor.out", "w"); assert(fp); } #endif if( DBG_FILTER ) log_debug("armor-filter: control: %d\n", control ); if( control == IOBUFCTRL_UNDERFLOW && afx->inp_bypass ) { n = 0; if( afx->buffer_len ) { for(; n < size && afx->buffer_pos < afx->buffer_len; n++ ) buf[n++] = afx->buffer[afx->buffer_pos++]; if( afx->buffer_pos >= afx->buffer_len ) afx->buffer_len = 0; } for(; n < size; n++ ) { if( (c=iobuf_get(a)) == -1 ) break; buf[n] = c & 0xff; } if( !n ) rc = -1; *ret_len = n; } else if( control == IOBUFCTRL_UNDERFLOW ) { /* We need some space for the faked packet. The minmum * required size is the PARTIAL_CHUNK size plus a byte for the * length itself */ if( size < PARTIAL_CHUNK+1 ) BUG(); /* supplied buffer too short */ if( afx->faked ) rc = fake_packet( afx, a, &n, buf, size ); else if( !afx->inp_checked ) { rc = check_input( afx, a ); if( afx->inp_bypass ) { for(n=0; n < size && afx->buffer_pos < afx->buffer_len; ) buf[n++] = afx->buffer[afx->buffer_pos++]; if( afx->buffer_pos >= afx->buffer_len ) afx->buffer_len = 0; if( !n ) rc = -1; } else if( afx->faked ) { unsigned int hashes = afx->hashes; const byte *sesmark; size_t sesmarklen; sesmark = get_session_marker( &sesmarklen ); if ( sesmarklen > 20 ) BUG(); /* the buffer is at least 15+n*15 bytes long, so it * is easy to construct the packets */ hashes &= 1|2|4|8|16|32|64; if( !hashes ) { hashes |= 4; /* default to MD 5 */ /* This is non-ideal since PGP 5-8 have the same end-of-line bugs as PGP 2. However, we only enable pgp2mode if there is no Hash: header. */ if( opt.pgp2_workarounds ) afx->pgp2mode = 1; } n=0; /* First a gpg control packet... */ buf[n++] = 0xff; /* new format, type 63, 1 length byte */ n++; /* see below */ memcpy(buf+n, sesmark, sesmarklen ); n+= sesmarklen; buf[n++] = CTRLPKT_CLEARSIGN_START; buf[n++] = afx->not_dash_escaped? 0:1; /* sigclass */ if( hashes & 1 ) buf[n++] = DIGEST_ALGO_RMD160; if( hashes & 2 ) buf[n++] = DIGEST_ALGO_SHA1; if( hashes & 4 ) buf[n++] = DIGEST_ALGO_MD5; if( hashes & 8 ) buf[n++] = DIGEST_ALGO_SHA224; if( hashes & 16 ) buf[n++] = DIGEST_ALGO_SHA256; if( hashes & 32 ) buf[n++] = DIGEST_ALGO_SHA384; if( hashes & 64 ) buf[n++] = DIGEST_ALGO_SHA512; buf[1] = n - 2; /* ...followed by an invented plaintext packet. Amusingly enough, this packet is not compliant with 2440 as the initial partial length is less than 512 bytes. Of course, we'll accept it anyway ;) */ buf[n++] = 0xCB; /* new packet format, type 11 */ buf[n++] = 0xE1; /* 2^1 == 2 bytes */ buf[n++] = 't'; /* canonical text mode */ buf[n++] = 0; /* namelength */ buf[n++] = 0xE2; /* 2^2 == 4 more bytes */ memset(buf+n, 0, 4); /* timestamp */ n += 4; } else if( !rc ) rc = radix64_read( afx, a, &n, buf, size ); } else rc = radix64_read( afx, a, &n, buf, size ); #if 0 if( n ) if( fwrite(buf, n, 1, fp ) != 1 ) BUG(); #endif *ret_len = n; } else if( control == IOBUFCTRL_FLUSH && !afx->cancel ) { if( !afx->status ) { /* write the header line */ const char *s; STRLIST comment=opt.comments; if( afx->what >= DIM(head_strings) ) log_bug("afx->what=%d", afx->what); iobuf_writestr(a, "-----"); iobuf_writestr(a, head_strings[afx->what] ); iobuf_writestr(a, "-----" ); iobuf_writestr(a,afx->eol); if (opt.emit_version) { iobuf_writestr (a, "Version: GnuPG v"); for (s=VERSION; *s && *s != '.'; s++) iobuf_writebyte (a, *s); if (opt.emit_version > 1 && *s) { iobuf_writebyte (a, *s++); for (; *s && *s != '.'; s++) iobuf_writebyte (a, *s); if (opt.emit_version > 2) { for (; *s && *s != '-' && !spacep (s); s++) iobuf_writebyte (a, *s); if (opt.emit_version > 3) iobuf_writestr (a, " (" PRINTABLE_OS_NAME ")"); } } iobuf_writestr(a,afx->eol); } /* write the comment strings */ for(s=comment->d;comment;comment=comment->next,s=comment->d) { iobuf_writestr(a, "Comment: " ); for( ; *s; s++ ) { if( *s == '\n' ) iobuf_writestr(a, "\\n" ); else if( *s == '\r' ) iobuf_writestr(a, "\\r" ); else if( *s == '\v' ) iobuf_writestr(a, "\\v" ); else iobuf_put(a, *s ); } iobuf_writestr(a,afx->eol); } if ( afx->hdrlines ) { for ( s = afx->hdrlines; *s; s++ ) { #ifdef HAVE_DOSISH_SYSTEM if ( *s == '\n' ) iobuf_put( a, '\r'); #endif iobuf_put(a, *s ); } } iobuf_writestr(a,afx->eol); afx->status++; afx->idx = 0; afx->idx2 = 0; afx->crc = CRCINIT; } crc = afx->crc; idx = afx->idx; idx2 = afx->idx2; for(i=0; i < idx; i++ ) radbuf[i] = afx->radbuf[i]; for(i=0; i < size; i++ ) crc = (crc << 8) ^ crc_table[((crc >> 16)&0xff) ^ buf[i]]; crc &= 0x00ffffff; for( ; size; buf++, size-- ) { radbuf[idx++] = *buf; if( idx > 2 ) { idx = 0; c = bintoasc[(*radbuf >> 2) & 077]; iobuf_put(a, c); c = bintoasc[(((*radbuf<<4)&060)|((radbuf[1] >> 4)&017))&077]; iobuf_put(a, c); c = bintoasc[(((radbuf[1]<<2)&074)|((radbuf[2]>>6)&03))&077]; iobuf_put(a, c); c = bintoasc[radbuf[2]&077]; iobuf_put(a, c); if( ++idx2 >= (64/4) ) { /* pgp doesn't like 72 here */ iobuf_writestr(a,afx->eol); idx2=0; } } } for(i=0; i < idx; i++ ) afx->radbuf[i] = radbuf[i]; afx->idx = idx; afx->idx2 = idx2; afx->crc = crc; } else if( control == IOBUFCTRL_INIT ) { if( !is_initialized ) initialize(); /* Figure out what we're using for line endings if the caller didn't specify. */ if(afx->eol[0]==0) { #ifdef HAVE_DOSISH_SYSTEM afx->eol[0]='\r'; afx->eol[1]='\n'; #else afx->eol[0]='\n'; #endif } } else if( control == IOBUFCTRL_CANCEL ) { afx->cancel = 1; } else if( control == IOBUFCTRL_FREE ) { if( afx->cancel ) ; else if( afx->status ) { /* pad, write cecksum, and bottom line */ crc = afx->crc; idx = afx->idx; idx2 = afx->idx2; for(i=0; i < idx; i++ ) radbuf[i] = afx->radbuf[i]; if( idx ) { c = bintoasc[(*radbuf>>2)&077]; iobuf_put(a, c); if( idx == 1 ) { c = bintoasc[((*radbuf << 4) & 060) & 077]; iobuf_put(a, c); iobuf_put(a, '='); iobuf_put(a, '='); } else { /* 2 */ c = bintoasc[(((*radbuf<<4)&060)|((radbuf[1]>>4)&017))&077]; iobuf_put(a, c); c = bintoasc[((radbuf[1] << 2) & 074) & 077]; iobuf_put(a, c); iobuf_put(a, '='); } if( ++idx2 >= (64/4) ) { /* pgp doesn't like 72 here */ iobuf_writestr(a,afx->eol); idx2=0; } } /* may need a linefeed */ if( idx2 ) iobuf_writestr(a,afx->eol); /* write the CRC */ iobuf_put(a, '='); radbuf[0] = crc >>16; radbuf[1] = crc >> 8; radbuf[2] = crc; c = bintoasc[(*radbuf >> 2) & 077]; iobuf_put(a, c); c = bintoasc[(((*radbuf<<4)&060)|((radbuf[1] >> 4)&017))&077]; iobuf_put(a, c); c = bintoasc[(((radbuf[1]<<2)&074)|((radbuf[2]>>6)&03))&077]; iobuf_put(a, c); c = bintoasc[radbuf[2]&077]; iobuf_put(a, c); iobuf_writestr(a,afx->eol); /* and the the trailer */ if( afx->what >= DIM(tail_strings) ) log_bug("afx->what=%d", afx->what); iobuf_writestr(a, "-----"); iobuf_writestr(a, tail_strings[afx->what] ); iobuf_writestr(a, "-----" ); iobuf_writestr(a,afx->eol); } else if( !afx->any_data && !afx->inp_bypass ) { log_error(_("no valid OpenPGP data found.\n")); afx->no_openpgp_data = 1; write_status_text( STATUS_NODATA, "1" ); } if( afx->truncated ) log_info(_("invalid armor: line longer than %d characters\n"), MAX_LINELEN ); /* issue an error to enforce dissemination of correct software */ if( afx->qp_detected ) log_error(_("quoted printable character in armor - " "probably a buggy MTA has been used\n") ); xfree( afx->buffer ); afx->buffer = NULL; release_armor_context (afx); } else if( control == IOBUFCTRL_DESC ) *(char**)buf = "armor_filter"; return rc; } /**************** * create a radix64 encoded string. */ char * make_radix64_string( const byte *data, size_t len ) { char *buffer, *p; buffer = p = xmalloc( (len+2)/3*4 + 1 ); for( ; len >= 3 ; len -= 3, data += 3 ) { *p++ = bintoasc[(data[0] >> 2) & 077]; *p++ = bintoasc[(((data[0] <<4)&060)|((data[1] >> 4)&017))&077]; *p++ = bintoasc[(((data[1]<<2)&074)|((data[2]>>6)&03))&077]; *p++ = bintoasc[data[2]&077]; } if( len == 2 ) { *p++ = bintoasc[(data[0] >> 2) & 077]; *p++ = bintoasc[(((data[0] <<4)&060)|((data[1] >> 4)&017))&077]; *p++ = bintoasc[((data[1]<<2)&074)]; } else if( len == 1 ) { *p++ = bintoasc[(data[0] >> 2) & 077]; *p++ = bintoasc[(data[0] <<4)&060]; } *p = 0; return buffer; } /*********************************************** * For the pipemode command we can't use the armor filter for various * reasons, so we use this new unarmor_pump stuff to remove the armor */ enum unarmor_state_e { STA_init = 0, STA_bypass, STA_wait_newline, STA_wait_dash, STA_first_dash, STA_compare_header, STA_found_header_wait_newline, STA_skip_header_lines, STA_skip_header_lines_non_ws, STA_read_data, STA_wait_crc, STA_read_crc, STA_ready }; struct unarmor_pump_s { enum unarmor_state_e state; byte val; int checkcrc; int pos; /* counts from 0..3 */ u32 crc; u32 mycrc; /* the one store in the data */ }; UnarmorPump unarmor_pump_new (void) { UnarmorPump x; if( !is_initialized ) initialize(); x = xmalloc_clear (sizeof *x); return x; } void unarmor_pump_release (UnarmorPump x) { xfree (x); } /* * Get the next character from the ascii armor taken from the IOBUF * created earlier by unarmor_pump_new(). * Return: c = Character * 256 = ignore this value * -1 = End of current armor * -2 = Premature EOF (not used) * -3 = Invalid armor */ int unarmor_pump (UnarmorPump x, int c) { int rval = 256; /* default is to ignore the return value */ switch (x->state) { case STA_init: { byte tmp[1]; tmp[0] = c; if ( is_armored (tmp) ) x->state = c == '-'? STA_first_dash : STA_wait_newline; else { x->state = STA_bypass; return c; } } break; case STA_bypass: return c; /* return here to avoid crc calculation */ case STA_wait_newline: if (c == '\n') x->state = STA_wait_dash; break; case STA_wait_dash: x->state = c == '-'? STA_first_dash : STA_wait_newline; break; case STA_first_dash: /* just need for initalization */ x->pos = 0; x->state = STA_compare_header; case STA_compare_header: if ( "-----BEGIN PGP SIGNATURE-----"[++x->pos] == c ) { if ( x->pos == 28 ) x->state = STA_found_header_wait_newline; } else x->state = c == '\n'? STA_wait_dash : STA_wait_newline; break; case STA_found_header_wait_newline: /* to make CR,LF issues easier we simply allow for white space behind the 5 dashes */ if ( c == '\n' ) x->state = STA_skip_header_lines; else if ( c != '\r' && c != ' ' && c != '\t' ) x->state = STA_wait_dash; /* garbage after the header line */ break; case STA_skip_header_lines: /* i.e. wait for one empty line */ if ( c == '\n' ) { x->state = STA_read_data; x->crc = CRCINIT; x->val = 0; x->pos = 0; } else if ( c != '\r' && c != ' ' && c != '\t' ) x->state = STA_skip_header_lines_non_ws; break; case STA_skip_header_lines_non_ws: /* like above but we already encountered non white space */ if ( c == '\n' ) x->state = STA_skip_header_lines; break; case STA_read_data: /* fixme: we don't check for the trailing dash lines but rely * on the armor stop characters */ if( c == '\n' || c == ' ' || c == '\r' || c == '\t' ) break; /* skip all kind of white space */ if( c == '=' ) { /* pad character: stop */ if( x->pos == 1 ) /* in this case val has some value */ rval = x->val; x->state = STA_wait_crc; break; } { int c2; if( (c = asctobin[(c2=c)]) == 255 ) { log_error(_("invalid radix64 character %02X skipped\n"), c2); break; } } switch(x->pos) { case 0: x->val = c << 2; break; case 1: x->val |= (c>>4)&3; rval = x->val; x->val = (c<<4)&0xf0; break; case 2: x->val |= (c>>2)&15; rval = x->val; x->val = (c<<6)&0xc0; break; case 3: x->val |= c&0x3f; rval = x->val; break; } x->pos = (x->pos+1) % 4; break; case STA_wait_crc: if( c == '\n' || c == ' ' || c == '\r' || c == '\t' || c == '=' ) break; /* skip ws and pad characters */ /* assume that we are at the next line */ x->state = STA_read_crc; x->pos = 0; x->mycrc = 0; case STA_read_crc: if( (c = asctobin[c]) == 255 ) { rval = -1; /* ready */ if( x->crc != x->mycrc ) { log_info (_("CRC error; %06lX - %06lX\n"), (ulong)x->crc, (ulong)x->mycrc); if ( invalid_crc() ) rval = -3; } x->state = STA_ready; /* not sure whether this is correct */ break; } switch(x->pos) { case 0: x->val = c << 2; break; case 1: x->val |= (c>>4)&3; x->mycrc |= x->val << 16; x->val = (c<<4)&0xf0; break; case 2: x->val |= (c>>2)&15; x->mycrc |= x->val << 8; x->val = (c<<6)&0xc0; break; case 3: x->val |= c&0x3f; x->mycrc |= x->val; break; } x->pos = (x->pos+1) % 4; break; case STA_ready: rval = -1; break; } if ( !(rval & ~255) ) { /* compute the CRC */ x->crc = (x->crc << 8) ^ crc_table[((x->crc >> 16)&0xff) ^ rval]; x->crc &= 0x00ffffff; } return rval; } gnupg-1.4.20/g10/gpgv.c0000644000175000017500000002700212635263103011337 00000000000000/* gpgv.c - The GnuPG signature verify utility * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2005, 2006, * 2009, 2012 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 3 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, see . */ #include #include #include #include #include #include #include #ifdef HAVE_DOSISH_SYSTEM #include /* for setmode() */ #endif #ifdef HAVE_LIBREADLINE #include #include #endif #define INCLUDED_BY_MAIN_MODULE 1 #include "packet.h" #include "iobuf.h" #include "memory.h" #include "util.h" #include "main.h" #include "options.h" #include "keydb.h" #include "trustdb.h" #include "mpi.h" #include "cipher.h" #include "filter.h" #include "ttyio.h" #include "i18n.h" #include "status.h" #include "cardglue.h" enum cmd_and_opt_values { aNull = 0, oQuiet = 'q', oVerbose = 'v', oBatch = 500, oKeyring, oIgnoreTimeConflict, oStatusFD, oLoggerFD, oHomedir, oWeakDigest, aTest }; static ARGPARSE_OPTS opts[] = { { 301, NULL, 0, N_("@\nOptions:\n ") }, { oVerbose, "verbose", 0, N_("verbose") }, { oQuiet, "quiet", 0, N_("be somewhat more quiet") }, { oKeyring, "keyring" ,2, N_("take the keys from this keyring")}, { oIgnoreTimeConflict, "ignore-time-conflict", 0, N_("make timestamp conflicts only a warning") }, { oStatusFD, "status-fd" ,1, N_("|FD|write status info to this FD") }, { oLoggerFD, "logger-fd",1, "@" }, { oHomedir, "homedir", 2, "@" }, /* defaults to "~/.gnupg" */ { oWeakDigest, "weak-digest", 2, "@" }, /* defaults to "~/.gnupg" */ {0} }; int g10_errors_seen = 0; const char * strusage( int level ) { const char *p; switch( level ) { case 11: p = "gpgv (GnuPG)"; break; case 13: p = VERSION; break; case 17: p = PRINTABLE_OS_NAME; break; case 19: p = _("Please report bugs to .\n"); break; case 1: case 40: p = _("Usage: gpgv [options] [files] (-h for help)"); break; case 41: p = _("Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n"); break; default: p = default_strusage(level); } return p; } static void i18n_init(void) { #ifdef USE_SIMPLE_GETTEXT set_gettext_file (PACKAGE, "Software\\GNU\\GnuPG"); #else #ifdef ENABLE_NLS setlocale( LC_ALL, "" ); bindtextdomain (PACKAGE, LOCALEDIR); textdomain( PACKAGE ); #endif #endif } int main( int argc, char **argv ) { ARGPARSE_ARGS pargs; int rc=0; STRLIST sl; STRLIST nrings=NULL; unsigned configlineno; log_set_name("gpgv"); init_signals(); i18n_init(); opt.command_fd = -1; /* no command fd */ opt.pgp2_workarounds = 1; opt.keyserver_options.options|=KEYSERVER_AUTO_KEY_RETRIEVE; opt.trust_model = TM_ALWAYS; opt.batch = 1; opt.weak_digests = NULL; opt.homedir = default_homedir (); tty_no_terminal(1); tty_batchmode(1); dotlock_disable (); set_native_charset (NULL); /* Try to auto set the character set */ additional_weak_digest("MD5"); pargs.argc = &argc; pargs.argv = &argv; pargs.flags= 1; /* do not remove the args */ while( optfile_parse( NULL, NULL, &configlineno, &pargs, opts) ) { switch( pargs.r_opt ) { case oQuiet: opt.quiet = 1; break; case oVerbose: g10_opt_verbose++; opt.verbose++; opt.list_sigs=1; break; case oKeyring: append_to_strlist( &nrings, pargs.r.ret_str); break; case oStatusFD: set_status_fd( pargs.r.ret_int ); break; case oLoggerFD: log_set_logfile( NULL, pargs.r.ret_int ); break; case oHomedir: opt.homedir = pargs.r.ret_str; break; case oWeakDigest: additional_weak_digest(pargs.r.ret_str); break; case oIgnoreTimeConflict: opt.ignore_time_conflict = 1; break; default : pargs.err = 2; break; } } if( log_get_errorcount(0) ) g10_exit(2); g10_opt_homedir = opt.homedir; if( opt.verbose > 1 ) set_packet_list_mode(1); if( !nrings ) /* no keyring given: use default one */ keydb_add_resource ("trustedkeys" EXTSEP_S "gpg", 8, 0); for(sl = nrings; sl; sl = sl->next ) keydb_add_resource (sl->d, 8, 0 ); FREE_STRLIST(nrings); if( (rc = verify_signatures( argc, argv ) )) log_error("verify signatures failed: %s\n", g10_errstr(rc) ); /* cleanup */ g10_exit(0); return 8; /*NEVER REACHED*/ } void g10_exit( int rc ) { rc = rc? rc : log_get_errorcount(0)? 2 : g10_errors_seen? 1 : 0; exit(rc ); } /* Stub: * We have to override the trustcheck from pkclist.c becuase * this utility assumes that all keys in the keyring are trustworthy */ int check_signatures_trust( PKT_signature *sig ) { return 0; } void read_trust_options(byte *trust_model,ulong *created,ulong *nextcheck, byte *marginals,byte *completes,byte *cert_depth, byte *min_cert_level) {} /* Stub: * We don't have the trustdb , so we have to provide some stub functions * instead */ int cache_disabled_value(PKT_public_key *pk) { return 0; } void check_trustdb_stale(void) {} int get_validity_info (PKT_public_key *pk, PKT_user_id *uid) { return '?'; } unsigned int get_validity (PKT_public_key *pk, PKT_user_id *uid) { return 0; } const char * trust_value_to_string (unsigned int value) { return "err"; } const char * uid_trust_string_fixed(PKT_public_key *key,PKT_user_id *uid) { return "err"; } int get_ownertrust_info (PKT_public_key *pk) { return '?'; } unsigned int get_ownertrust (PKT_public_key *pk) { return TRUST_UNKNOWN; } /* Stubs: * Because we only work with trusted keys, it does not make sense to * get them from a keyserver */ struct keyserver_spec * keyserver_match(struct keyserver_spec *spec) { return NULL; } int keyserver_import_keyid( u32 *keyid, void *dummy ) { return -1; } int keyserver_import_cert(const char *name) { return -1; } int keyserver_import_pka(const char *name,unsigned char *fpr) { return -1; } int keyserver_import_name(const char *name,struct keyserver_spec *spec) { return -1; } int keyserver_import_ldap(const char *name) { return -1; } /* Stub: * No encryption here but mainproc links to these functions. */ int get_session_key( PKT_pubkey_enc *k, DEK *dek ) { return G10ERR_GENERAL; } /* Stub: */ int get_override_session_key( DEK *dek, const char *string ) { return G10ERR_GENERAL; } /* Stub: */ int decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek ) { return G10ERR_GENERAL; } /* Stub: * No interactive commnds, so we don't need the helptexts */ void display_online_help( const char *keyword ) { } /* Stub: * We don't use secret keys, but getkey.c links to this */ int check_secret_key( PKT_secret_key *sk, int n ) { return G10ERR_GENERAL; } /* Stub: * No secret key, so no passphrase needed */ DEK * passphrase_to_dek( u32 *keyid, int pubkey_algo, int cipher_algo, STRING2KEY *s2k, int mode, const char *tmp, int *canceled) { if (canceled) *canceled = 0; return NULL; } struct keyserver_spec *parse_preferred_keyserver(PKT_signature *sig) {return NULL;} struct keyserver_spec *parse_keyserver_uri(const char *uri,int require_scheme, const char *configname, unsigned int configlineno) { return NULL; } void free_keyserver_spec(struct keyserver_spec *keyserver) {} /* Stubs to avoid linking to photoid.c */ void show_photos(const struct user_attribute *attrs,int count,PKT_public_key *pk) {} int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len) {return 0;} char *image_type_to_string(byte type,int string) {return NULL;} #ifdef ENABLE_CARD_SUPPORT int agent_scd_getattr (const char *name, struct agent_card_info_s *info) {return 0;} #endif /* ENABLE_CARD_SUPPORT */ /* Stubs to void linking to ../cipher/cipher.c */ int string_to_cipher_algo( const char *string ) { return 0; } const char *cipher_algo_to_string( int algo ) { return "?";} void disable_cipher_algo( int algo ) {} int check_cipher_algo( int algo ) { return -1;} unsigned int cipher_get_keylen( int algo ) { return 0; } unsigned int cipher_get_blocksize( int algo ) {return 0;} CIPHER_HANDLE cipher_open( int algo, int mode, int secure ) { return NULL;} void cipher_close( CIPHER_HANDLE c ) {} int cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen ) { return -1;} void cipher_setiv( CIPHER_HANDLE c, const byte *iv, unsigned ivlen ){} void cipher_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes ) {} void cipher_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes ) {} void cipher_sync( CIPHER_HANDLE c ) {} /* Stubs to avoid linking to ../cipher/random.c */ void random_dump_stats(void) {} int quick_random_gen( int onoff ) { return -1;} void randomize_buffer( byte *buffer, size_t length, int level ) {} void randomize_mpi (MPI mpi, size_t nbits, int level) {} int random_is_faked() { return -1;} byte *get_random_bits( size_t nbits, int level, int secure ) { return NULL;} void set_random_seed_file( const char *name ) {} void update_random_seed_file() {} void fast_random_poll() {} /* Stubs to avoid linking of ../cipher/primegen.c */ void register_primegen_progress ( void (*cb)( void *, int), void *cb_data ) {} MPI generate_secret_prime( unsigned nbits ) { return NULL;} MPI generate_public_prime( unsigned nbits ) { return NULL;} MPI generate_elg_prime( int mode, unsigned pbits, unsigned qbits, MPI g, MPI **ret_factors ) { return NULL;} /* Do not link to ../cipher/rndlinux.c */ void rndlinux_constructor(void) {} /* Stubs to avoid linking to ../util/ttyio.c */ int tty_batchmode( int onoff ) { return 0; } void tty_printf( const char *fmt, ... ) { } void tty_fprintf (FILE *fp, const char *fmt, ... ) { } void tty_print_string( const byte *p, size_t n ) { } void tty_print_utf8_string( const byte *p, size_t n ) {} void tty_print_utf8_string2( const byte *p, size_t n, size_t max_n ) {} char *tty_get( const char *prompt ) { return NULL;} char *tty_get_hidden( const char *prompt ) {return NULL; } void tty_kill_prompt(void) {} int tty_get_answer_is_yes( const char *prompt ) {return 0;} int tty_no_terminal(int onoff) {return 0;} void tty_cleanup_after_signal (void) {} #ifdef __VMS FILE *ttyfp_is (void) { return stderr; } void init_ttyfp (void) { } #endif /*__VMS*/ #ifdef HAVE_LIBREADLINE void tty_enable_completion(rl_completion_func_t *completer) {} void tty_disable_completion(void) {} void rl_cleanup_after_signal (void) {} void rl_free_line_state (void) {} #endif /* We do not do any locking, so use these stubs here */ void dotlock_disable(void) {} dotlock_t dotlock_create (const char *file_to_lock, unsigned int flags) { return NULL; } void dotlock_destroy (dotlock_t h, int reclaim) {} int dotlock_take (dotlock_t h, long timeout) { return 0;} int dotlock_release (dotlock_t h) {return 0;} void dotlock_remove_lockfiles (int reclaim) {} gnupg-1.4.20/g10/ChangeLog-20110000644000175000017500000166606012635262326012407 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-09-12 Werner Koch * gpg.c [__VMS]: Include vms.h. (main) [__VMS]: Init batch mode according to actual process mode. Suggested by Steven M. Schweda. 2011-08-09 Werner Koch * keyedit.c (show_key_with_all_names): Remove unused var. * apdu.c (open_pcsc_reader_direct): Remove unused var. * sig-check.c (do_check): Remove unused var. * keygen.c (ask_user_id): Fix loop break condition. See bug#1307. * import.c (import_keys_internal): Make breaking the loop more explicit. See bug#1307. 2011-07-22 Werner Koch * parse-packet.c (parse_key): Print the decoded iteration count. Fixes bug#1355. 2011-04-05 David Shaw * photoid.c (generate_photo_id): Check for the JPEG magic numbers instead of JFIF since some programs generate an EXIF header first. This is issue 1331. 2011-02-23 Werner Koch * Makefile.am (LDADD): Move LIBREADLINE to .. (gpg_LDADD): here. Fixes bug#1318. * gpgv.c (rl_cleanup_after_signal, rl_free_line_state): New stubs. 2010-10-29 David Shaw * gpg.c (main): Do not provide a default for --personal-digest-preferences. This allows the usual digest selection algorithm to pick a digest based on recipient keys. * pkclist.c (select_algo_from_prefs): Make sure the scores can't overflow when picking an algorithm (not a security issue since we can't pick something not present in all preference lists, but we might pick something that isn't scored first choice). * pkclist.c (select_algo_from_prefs): Slightly improve the handling of MD5 in preference lists. Instead of replacing MD5 with SHA-1, just remove MD5 from the list altogether, and let the next-highest ranked algorithm be chosen. 2010-10-27 Werner Koch * keygen.c (ask_expire_interval): Print 2038 warning only for 32 bit signed time_t. * keyid.c (mk_datestr): Do the y2038 test only for a signed time_t. (INVALID_TIME_CHECK): New. 2010-10-20 Werner Koch * encr-data.c (decode_filter): Cast -1 to size_t. Reported by Steven M. Schweda. * parse-packet.c (parse_key): Ditto. * trustdb.c (validate_keys): Likewise to unsigned int. 2010-10-18 Werner Koch * app-openpgp.c (parse_algorithm_attribute): Remove extra const in definition of DESC. 2010-10-10 Werner Koch * keyring.c (create_tmp_file): Use GNUPG_TMP_SFX anf GNUPG_BAK_SFX. 2010-09-28 David Shaw * options.skel: Make the example for force-v3-sigs match reality (it has defaulted to off since 2007-10-22). 2010-09-28 Steven M. Schweda (wk) Changes to help the VMS port. See http://antinode.info/dec/sw/gnupg.html . * gpgv.c (ttyfp_is, init_ttyfp) [__VMS]: Add stubs. * build-packet.c (do_plaintext) [__VMS]: Disable error message. * keyserver.c (keyserver_spawn) [__VMS]: Do not add the DIRSEP_S. * misc.c [__VMS]: Include . * signal.c [__VMS]: Include vms.h. (got_fatal_signal) [__VMS]: Restore terminal echo. * plaintext.c [__VMS]: Include vms.h. * openfile.c (make_outfile_name): __VMS] Do not use. (open_outfile) [__VMS]: Use vms_append_ext. (try_make_homedir) [__VMS]: chmod directory. * misc.c (disable_core_dumps) [__VMS]: Disable. (path_access) [__VMS]: Do not use. 2010-09-28 Werner Koch * passphrase.c [!ENABLE_AGENT_SUPPORT]: Do not include sys/socket.h to help the VMS port. 2010-08-31 Werner Koch * mainproc.c (print_pkenc_list): Print a STATUS_ERROR. Fixes bug#1255. 2010-07-24 Werner Koch * cardglue.c (agent_scd_pksign): Allow more hash algorithms when using with scdaemon. * cardglue.h (GCRY_MD_MD5): New. 2010-06-18 Werner Koch * parse-packet.c (skip_packet, parse_gpg_control): Take care of premature EOFs. Backport from trunk. 2010-06-01 Werner Koch * gpg.c (main): Add dummy option --debug-level and ignore --log-file if a socket prefix is given. 2010-05-12 Werner Koch * armor.c (radix64_read): Change fix 2006-04-08 to fix bug#1179. 2010-05-07 Werner Koch * import.c (chk_self_sigs): Check direct key signatures. Fixes bug#1223. (fix_bad_direct_key_sigs): New. (import_one): Call it. 2010-03-26 David Shaw * plaintext.c (handle_plaintext): Make sure that the stdout flush succeeded, so we can't lose data when using gpg in a pipeline. Fixes bug #1207. 2010-02-25 Werner Koch * sign.c (hash_for): Force SHA1 only for v1 OpenPGP cards. Fixes bug#1194. 2010-02-17 Werner Koch * keygen.c (ask_user_id): Avoid infinite loop in case of invalid data. Fixes bug#1186. 2010-02-02 Werner Koch * card-util.c (card_edit): Change prompt to "gpg/card". * keyedit.c (keyedit_menu): Change prompt to "gpg". 2009-12-17 Werner Koch * sig-check.c (do_check_messages): Evaluate the HAS_EXPIRED flag. Fixes bug#1059. 2009-12-15 Werner Koch * iso7816.c (do_generate_keypair): s/readonly/read_only/. * keydb.c (keydb_add_resource): Ditto. * tdbio.c (tdbio_set_dbname): Do not call log_fatal after creating the directory. Fixes bug#1169. Reported by Daniel Leidert. 2009-09-28 Werner Koch * trustdb.c (get_validity_info): Take care of a NULL PK. Fixes bug#1138. (get_validity_string): Ditto. 2009-09-02 Werner Koch * app-openpgp.c (do_decipher): Compute required Le. * iso7816.c (iso7816_decipher): Add new arg LE. * compress-bz2.c (do_uncompress): Detect unexpected EOF. Fixes bug#1011. 2009-08-26 Werner Koch * keyedit.c (menu_revsig): Check for signature right away. Fix Debian-bug#543530. 2009-08-13 Werner Koch * cardglue.h: Add new error code mappings. From GnuPG-2: * app-openpgp.c (change_keyattr_from_string): New. (do_setattr): Support KEY-ATTR. * ccid-driver.c (print_pr_data): Fix 64 bit compat problem. * ccid-driver.c (parse_ccid_descriptor): Enable hack for SCR 3320. * card-util.c (generate_card_keys): Remove special case for GnuPG-2. Ask for the keysize and change it. (card_generate_subkey): Ask for the keysize and change it. (get_info_for_key_operation): Read KEY-ATTR. (show_keysize_warning, ask_card_keysize): New. (do_change_keysize): New. 2009-08-11 David Shaw * keyserver.c (keyserver_spawn): Try and detect mis-coded Latin1 and convert it to UTF8. Whether the heuristics succeed or not, the resulting string must be valid UTF8 as LDAP requires that. This is bug 1055. 2009-08-03 Werner Koch * card-util.c (generate_card_keys): Ask for off-card keys only if the card supports it. (get_info_for_key_operation): Read EXTCAP. (card_store_subkey): Check for non matching sizes. * cardglue.c (agent_scd_writecert, agent_scd_readcert): New stubs. * misc.c (not_in_gpg1_notice): New. 2009-07-30 Werner Koch * misc.c (md5_digest_warn): New. (print_digest_algo_note): Divert to new function. * sig-check.c (do_check): Print MD5 warning. 2009-07-31 David Shaw * gpg.c (main): --pgp6 includes --disable-mdc. 2009-07-29 Werner Koch * keygen.c (keygen_set_std_prefs): Remove RMD-160 from the list. Change order to SHA-256, SHA-1, SHA-384, SHA-512, SHA-224. (gen_dsa): Use a 256 bit Q for 2048 bit P. Round to FIPS allowed values in non-expert mode. (ask_algo): Add arg R_SUBKEY_ALGO. Change return value semantics. Change presented order of algorithms. Make RSA+RSA the default. (generate_keypair, generate_subkeypair): Adjust for change. 2009-07-23 Werner Koch * keygen.c (generate_keypair): Allow Elgamal > 3072 in BOTH mode. Reported by Jeroen Schot. Fixes bug#1091. (ask_keysize): Add new arg PRIMARY_KEYSIZE. Set DSA default to 2048. Print a different prompt for a subkey. (gen_dsa): Remove check for dsa2 option. * trustdb.c (how_to_fix_the_trustdb): New. * tdbio.c (tdbio_invalid): Print hints on how to fix the trustdb. * gpg.c (main) : Print hints. 2009-07-23 David Shaw * keyserver.c (keyserver_import_ldap): Try a DNS-SD lookup to find a domain-specific LDAP server before resorting to keys.{domain}. 2009-07-22 Werner Koch * cardglue.h (struct agent_card_info_s): Add field EXTCAP. * cardglue.c (agent_learn): Read KEY-ATTR. (learn_status_cb): Parse EXTCAP. 2009-07-21 Werner Koch * app-common.h, app-openpgp.c, iso7816.c, iso7816.h, apdu.c, * apdu.h, ccid-driver.c, ccid-driver.h, card-util.c: Update from GnuPG 2.0 SVN revision 5084. * cardglue.h (GCRY_MD_SHA256): Add more GCRY_MD constants. (gcry_handler_progress_t): Add definition. (struct agent_card_info_s): Add fields apptype, is_v2, key_attr. * cardglue.c (learn_status_cb): Set them. (agent_release_card_info): Release APPTYPE. (unescape_status_string, send_status_direct): New. (gcry_mpi_release, gcry_mpi_set_opaque): New. (gcry_md_algo_name): New. (open_card): s/initialized/ref_count/. (agent_learn): Pass new new flag arg to learn_status. (agent_scd_genkey): Add new arg createtime. * keygen.c (gen_card_key, gen_card_key_with_backup): Add new arg TIMESTAMP. (write_direct_sig, write_selfsigs, write_keybinding) (make_backsig): Ditto. (do_generate_keypair): Pass timestamp to all signing functions. (generate_card_subkeypair): Ditto. * keyedit.c (menu_backsign): Pass a new timestamp to all backsisg. * gpg.c (main): Disable keypad support. * options.h (struct): Add field disable_keypad. 2009-07-17 Werner Koch * keyring.c (keyring_rebuild_cache): Replace the assert by a proper error message and allow to delete a bad keyblock. 2009-07-16 Werner Koch * misc.c (has_invalid_email_chars): Let non-ascii characters pass through. Fixes bug#1087. 2009-06-24 Werner Koch * passphrase.c (passphrase_to_dek): Do not deref a PW of NULL. * revoke.c (gen_revoke): Remove unused malloc of PK. 2009-06-17 Werner Koch * parse-packet.c (parse): Use a casted -1 instead of a 32 bit constant to check for a garbled package. Fixes bug#1040. 2009-06-05 David Shaw * gpg.c (main): Remove Camellia restriction. 2009-06-02 Werner Koch * gpgv.c (tty_cleanup_after_signal): Add new stub. 2009-05-22 Werner Koch * signal.c (got_fatal_signal): Call tty_cleanup_after_signal. 2009-05-20 Werner Koch * gpg.c (main): Fix --fingerprint/--with-fingerprint command detection. Fixes bug#1044. 2009-05-11 Werner Koch * apdu.c (send_le): Replace log_error by log_info. Fixes bug#1043. * skclist.c (build_sk_list): Use log_info for "duplicated entry". Fixes bug#1045. * encode.c (encode_simple, encode_crypt): Print empty file warning only in verbose mode. Closes bug#1039. * sign.c (write_plaintext_packet): 2009-05-06 Werner Koch * keyring.c (keyring_get_keyblock): Fix memory leak due to ring_trust packets. Fixes bug#1034. * getkey.c (finish_lookup): Remove dead code. 2009-05-05 Werner Koch * keygen.c (read_parameter_file): Add keyword "Creation-Date". (output_control_s): s/create/creation/. (enum para_name): Add pCREATIONDATE, pKEYCREATIONDATE. Remove pCREATETIME. (generate_keypair): Do not set old pCREATETIME. (parse_creation_string): New. (proc_parameter_file): Set pCREATIONDATE. (do_generate_keypair): Remove arg TIMESTAMP. Set it using pKEYCREATIONDATE. (get_parameter_u32): Set a default pKEYCREATIONDATE. * tdbio.c (lookup_hashtable): Add const to function args. (cmp_trec_fpr): Ditto. (tdbio_search_trust_byfpr): Remove cast. * parse-packet.c (parse): Remove special treatment for compressed new style packets. Fixes bug#931. 2009-04-03 Werner Koch * gpgv.c (main): Pass readonly flag to keydb_add_resource. * keydb.c (keydb_add_resource): Add arg READONLY. 2009-03-20 David Shaw * keyring.c (rename_tmp_file): Force a fsync (via iobuf_ioctl) on secret keyring files to be extra safe on filesystems that may not sync data and metadata together (ext4). Also check return code from the cache invalidation to make sure we're safe over NFS and similar. 2009-03-14 David Shaw * gpgv.c (strusage): Fix name of program in "Syntax" line. 2009-02-09 Werner Koch * keylist.c (print_capabilities): Take care of cert-only keys. Fixes bug#998. 2009-02-03 David Shaw * keyserver.c (keyserver_typemap): gpgkeys_hkp handles hkps as well. 2008-12-21 David Shaw * gpg.c (main): Properly handle UTF8 usernames with --sign-key and --lsign-key. 2008-12-11 Werner Koch * sig-check.c (check_revocation_keys): Close message digest. (signature_check2): Switch to SHA-1 for SIG_ID computation. This is to match 2.0.10. 2008-12-09 Werner Koch * keygen.c (proc_parameter_file): Check that key and subkey usages are allowed. 2008-11-18 David Shaw * trustdb.c (validate_one_keyblock): Fix the trust signature calculations so that we lower the trust depth of signatures to fit within the current chain, rather than discarding any signature that does not fit within the trust depth. 2008-10-03 David Shaw * main.h, mainproc.c (check_sig_and_print), keylist.c (list_keyblock_print), pkclist.c (do_edit_ownertrust), keyedit.c (menu_showphoto), photoid.c (generate_photo_id, show_photos), misc.c (pct_expando): Add %v and %V expandos so that displaying photo IDs can show the attribute validity tag (%v) and string (%V). Originally by Daniel Gillmor. 2008-09-24 David Shaw * keyedit.c (keyedit_menu): Fix bug where a modified keyring loses its modified status after a "clean" or "minimize" that doesn't need to do anything. 2008-09-23 David Shaw * pkclist.c (select_algo_from_prefs): Redo function to rank prefs and pick a consensus winner across all keys. 2008-09-04 David Shaw * keyserver.c (keyserver_import_cert): Allow keyserver URLs in addition to full URLs in CERT records. 2008-08-11 Werner Koch * keygen.c (ask_expire_interval): Check for time overflow of an u32. Fixes bug #947. Use SIZEOF_TIME_T for the 2039--2106 check. 2008-08-01 Werner Koch * tdbio.c (open_db) [!EROFS]: Move closing parens out of the ifdef. Reported by Ken Takusagawa. 2008-04-30 Werner Koch * getkey.c (parse_auto_key_locate): Ignore nodefault and local methods. 2008-04-17 David Shaw * parse-packet.c (parse_key): Add constant for Camellia-192. 2008-04-12 David Shaw * getkey.c (merge_selfsigs_subkey): If there are multiple 0x19 backsigs, take the most recent one. 2008-03-25 Werner Koch * keyserver.c (parse_keyrec): Take care of char defaulting to unsigned when using hextobyte. * options.skel: Make the default keyserver keys.gnupg.net. 2008-03-23 David Shaw * import.c (collapse_uids): Fix bug 894: possible memory corruption around deduplication of user IDs. 2008-03-17 David Shaw * parse-packet.c (parse_key): Parse a secret key encrypted with Camellia. 2008-02-09 Marcus Brinkmann * gpg.c (main): New variable default_configname. Use it if save_configname is NULL (can happen if default configfile does not exist). Move default configname determination to ... (get_default_configname): ... this new function. 2008-01-26 Werner Koch * card-util.c (get_manufacturer): Add vendor 004 and support for the unmanaged range. 2007-12-14 Werner Koch * gpg.c (main): Set opt.no_homedir_creation already on the first option parsing pass. This is required so that the gpg_dearmor tool won't create a ~/.gnupg. 2007-12-12 Werner Koch * misc.c (print_pubkey_algo_note): Print a warning for type 20 keys. (openpgp_pk_test_algo, openpgp_pk_algo_usage): Allow type 20 fro encryption only with option --rfc2440. * mainproc.c (proc_pubkey_enc): Ditto. 2007-12-12 David Shaw * trustdb.c (sanitize_regexp): New. Protect against dangerous regexps (malloc bombs) by force-commenting any characters aside from the ones we explicitly want. (check_regexp): Use it here before passing the regexp to regcomp(). 2007-12-11 Werner Koch * mainproc.c (proc_pubkey_enc): Allow type 20 Elgamal key for decryption. 2007-12-10 Werner Koch * cardglue.h (gpg_error_from_syserror): New. * app-openpgp.c (do_decipher): Take care of cryptograms shorter that 128 bytes. Fixes bug#851. * import.c (auto_create_card_key_stub): Do not clear the entire fingerprint. This finally makes the stub creation work. My past tests seemed to work because there was a key with a all zero fingerprint available (Elgamal signing keys). 2007-12-08 Werner Koch * misc.c (openpgp_pk_algo_usage): Allow Elgamal type 20 for encryption. 2007-12-03 Werner Koch * keygen.c (ask_key_flags): Add a translation remark and implement a workaround. 2007-11-28 David Shaw * sig-check.c (do_check): Code to try both the incorrect and correct SHA-224 DER prefixes when verifying a signature. See the change itself for more discussion. * main.h, seskey.c (do_encode_md): Rename to pkcs1_encode_md and make non-static. * gpg.c (print_algo_names): New. (list_config): Use it here for the "ciphername" and "digestname" config items so we can get a script-parseable list of the names. 2007-11-19 Werner Koch * keyedit.c (keyedit_menu): String grammar fix. 2007-11-12 Werner Koch * status.c (do_get_from_fd, do_shm_get): s/bool/getbool/ to overcome problems with Mac OS 10.5 which seems to include stdbool.h silently. 2007-10-27 David Shaw * parse-packet.c (parse_onepass_sig): Sigclass is hex, so include the 0x. * keyserver.c (keyserver_spawn): Cosmetic, but looks cleaner. 2007-10-23 Werner Koch Switched entire package to GPLv3+. 2007-10-22 David Shaw * gpg.c (main): Add --require-cross-certification to --openpgp/--rfc4880 mode. * gpg.c (main): Disable --rfc2440-text and --force-v3-sigs by default. Enable --require-cross-certification by default. --openpgp (--rfc4880) is the same as --rfc2440 except with "--enable-dsa2 --no-rfc2440-text --escape-from-lines". 2007-10-21 David Shaw * misc.c (compliance_option_string, compliance_failure): Minor cleanup. * armor.c (is_armor_header): Comment about 4880. 2007-10-17 David Shaw * options.h, gpg.c (main), misc.c (compliance_option_string): Add --rfc4880, and make --openpgp an alias to it. --rfc2440 now stands alone. For now, use the old 2440 defaults for 4880. * keyedit.c (keyedit_menu): Use compliance_option_string() instead of printing the compliance modes here. 2007-09-02 David Shaw * import.c (collapse_uids): Significant speedup for de-duping user IDs. 2007-08-24 Werner Koch * keyring.c (keyring_register_filename): Use same_file_p. Suggested by Kurt Fitzner. 2007-07-19 David Shaw * gpg.c (main): Fix typo. Noted by John Clizbe. * armor.c (parse_header_line): Improve test so that the header test only allows "Hash" in the signed data section. 2007-07-18 David Shaw * armor.c (is_armor_tag): New. Detect if an armor header matches 2440bis-21. (parse_header_line): Call it here, as bis-21 requires warning the user (but continuing to process the message) when seeing an unknown header. 2007-07-09 Werner Koch * gpg.c: Better print an extra warning if Camellia has been configured. 2007-07-06 David Shaw * encode.c (encode_crypt): Missed one call to setup_plaintext_name(). This is bug#809. 2007-06-12 David Shaw * sign.c (mk_notation_policy_etc): expect all sigs that this is called for are >=v4. (write_signature_packets, make_keysig_packet): Only call it for >=v4 sigs. This allows --force-v3-sigs and --force-v4-certs to enable or disable notations, policies, and keyserver URLs. This is bug#800. 2007-05-09 Werner Koch * openfile.c (overwrite_filep, open_outfile) [W32]: Need to use just "nul". Though, I am pretty sure that some MSDOS versions grok the extra /dev/. 2007-05-07 Werner Koch * openfile.c (open_outfile, overwrite_filep) [W32]: Use "/dev/nul". 2007-04-16 David Shaw * packet.h, mainproc.c (reset_literals_seen): New function to reset the literals count. * verify.c (verify_one_file), decrypt.c (decrypt_messages): Call it here so we allow multiple literals in --multifile mode (in different files - not concatenated together). * gpg.c, pkclist.c: #include for strcasecmp if it is present. Note that autoconf protects us against a strings.h that cannot be used together with string.h. 2007-04-03 David Shaw * parse-packet.c (parse_marker): New. Enforce that the marker contains 'P', 'G', 'P', and nothing but. (parse): Call it here. (skip_packet): No longer need to handle marker packets here. 2007-03-14 David Shaw * keyserver.c: Windows Vista doesn't grok X_OK and so fails access() tests. Previous versions interpreted X_OK as F_OK anyway, so we'll just use F_OK directly. 2007-03-08 Werner Koch * plaintext.c (handle_plaintext): Add two extra fflush for stdout. 2007-03-06 David Shaw * keyedit.c (keyedit_menu): If we modify the keyblock (via fix_keyblock() or collapse_uids()) make sure we reprocess the keyblock so the flags are correct. Noted by Robin H. Johnson. * getkey.c (fixup_uidnode): Properly clear flags that don't apply to us (revoked, expired) so that we can reprocess a uid. 2007-03-01 David Shaw * options.h, gpg.c (main), mainproc.c (check_sig_and_print): Allow multiple sig verification again as this is protected via the multiple-messages code. 2007-02-26 Werner Koch * gpg.c (main): Add verify option show-primary-uid-only. * options.h (VERIFY_SHOW_PRIMARY_UID_ONLY): New. * mainproc.c (check_sig_and_print): Implement it. * status.h (STATUS_ERROR): New status code. * status.c (get_status_string): Ditto. * mainproc.c (proc_plaintext): Emit it if multiple messages are detected. 2007-02-20 David Shaw * mainproc.c (literals_seen): New. (proc_plaintext): Error out if more than one plaintext packet is encountered * options.h, gpg.c: New option --allow-multiple-messages and --no variant. 2007-02-13 David Shaw * parse-packet.c (parse_signature): It's hex. * getkey.c (merge_selfsigs_subkey): Avoid listing the contents of a backsig when list mode is on. Noted by Timo Schulz. 2007-02-04 Werner Koch * parse-packet.c (parse_signature): Limit bytes read for an unknown alogorithm. Fixes Debian bug#402592. 2007-02-01 David Shaw * main.h, keygen.c (ask_expire_interval, parse_expire_string): Pass in the time to use to calculate the expiration offset, rather than querying it internally. Change all callers. 2007-01-31 David Shaw * keygen.c (do_generate_keypair, proc_parameter_file) (generate_keypair, generate_subkeypair): Pass a timestamp through to all the gen_xxx functions. * keyedit.c (sign_uids): Another multiple to single timestamp operation. * sign.c (write_plaintext_packet): Take timestamp from outside. Change all callers. (sign_file, clearsign_file, sign_symencrypt_file): Calculate one timestamp for the whole transaction. Different timestamps for each step can leak performance information. * main.h, keygen.c (ask_expiredate), keyedit.c (menu_expire): Remove the need for ask_expiredate(). 2007-01-30 David Shaw * keygen.c (make_backsig, write_direct_sig, write_selfsigs) (write_keybinding): Have the various selfsigs created during key generation use the timestamp of their parent key. This helps avoid leaking information about the performance of the machine where the keys were generated. Noted by Christian Danner. 2007-01-15 Werner Koch * parse-packet.c (read_protected_v3_mpi): Make sure to stop reading even for corrupted packets. * keygen.c (generate_user_id): Need to allocate one byte more. Reported by Felix von Leitner. 2006-12-14 David Shaw * options.skel: Tweak some examples to match reality and update the RFC for CERT now that it is out of draft. 2006-12-13 David Shaw * Makefile.am: Install options.skel via dist_pkgdata_DATA so that "make uninstall" works properly. 2006-12-13 Werner Koch * gpgv.c, gpg.c: Do not include the now removed g10defs.h file. 2006-12-11 Werner Koch * seskey.c (encode_session_key, do_encode_md): Use new mpi_nlimb_hint_from_nbytes function. * sign.c (do_sign): Ditto. * Makefile.am (AM_CPPFLAGS): Define GNUPG_LIBDIR. * gpgv.c (i18n_init): s/G10_LOCALEDIR/LOCALEDIR/. * gpg.c (i18n_init): Ditto. 2006-12-07 Werner Koch * Makefile.am (AM_CPPFLAGS): Define GNUPG_DATADIR. * openfile.c (copy_options_file): Use log_info and not log_error to avoid error returns in case of a missing skeleton file. 2006-12-04 Werner Koch * filter.h (armor_filter_context_t): New field REFCOUNT. * armor.c (new_armor_context, release_armor_context) (push_armor_filter): New. (armor_filter): Call releae_armor_context for IOBUFCTRL_FREE. * import.c (import): Use the new function here instead of the old hack using the iobuf_push_filter2. * keyserver.c (keyserver_spawn): Ditto. 2006-12-03 Werner Koch * keyedit.c (menu_clean): Made strings translatable. 2006-12-03 David Shaw * keyedit.c (menu_clean): Show "already minimized" rather than "already clean" when a minimized key is minimized again. From Dirk Traulsen. 2006-12-02 David Shaw * options.h, gpg.c (main), passphrase.c (passphrase_to_dek): Add --passphrase-repeat option to control how many times gpg will re-prompt for a passphrase to ensure the user has typed it correctly. Defaults to 1. 2006-12-02 Werner Koch * encr-data.c: Allocate DFX context on the heap and not on the stack. Changes at several places. Fixes CVE-2006-6235. 2006-11-27 Werner Koch * openfile.c (ask_outfile_name): Fixed buffer overflow occurring if make_printable_string returns a longer string. Fixes bug 728. 2006-10-23 Werner Koch * gpg.c (main): New command --gpgconf-list. 2006-10-12 David Shaw * parse-packet.c (parse_symkeyenc): Show the unpacked as well as the packed s2k iteration count. * main.h, options.h, gpg.c (encode_s2k_iterations, main), passphrase.c (hash_passphrase): Add --s2k-count option to specify the number of s2k hash iterations. 2006-10-06 David Shaw * keyserver.c (keyserver_spawn): Write the 16-digit keyid rather than whatever key selector the user used on the command line. 2006-10-02 Werner Koch * encr-data.c (decrypt_data, mdc_decode_filter): Check the MDC right here and don't let parse-packet handle the MDC. 2006-08-21 Werner Koch * skclist.c (is_insecure): Also test for uppercase version of the insecure string. 2006-07-31 Werner Koch * openfile.c (open_outfile) [USE_ONLY_8DOT3]: Search backwards for the dot. Fixes bug 654. * passphrase.c (agent_open): Use log_info instead of log_error to allow a fallback without having gpg return an error code. Fixes bug #655. * encode.c (encode_crypt_files): Invalidate the whole fd cache. This is a workaround for problems in iobuf's stupid fd cache. * decrypt.c (decrypt_messages): Ditto. * verify.c (verify_files): Ditto. 2006-07-26 Werner Koch * keygen.c (gen_card_key_with_backup): Initialize sk_{un}protected. * import.c (import): Initialize KEYBLOCK. * pkclist.c (edit_ownertrust): Intialize trust to avoid gcc warning. * parse-packet.c (parse_comment): Cap comments at 65k. (parse_gpg_control): Skip too large control packets. 2006-06-28 David Shaw * keydb.h, pkclist.c (select_algo_from_prefs, algo_available): Pass a union for preference hints rather than doing void * games. * sign.c (sign_file): Use it here. * sign.c (sign_file): When signing with multiple DSA keys, one being DSA1 and one being DSA2 and encrypting at the same time, if the recipient preferences give a hash that can work with the DSA2 key, then allow the DSA1 key to be promoted rather than giving up and using hash_for(). * pkclist.c (algo_available): Automatically enable DSA2 mode when handling a key that clearly isn't DSA1 (i.e. q!=160). 2006-06-28 Werner Koch * import.c (check_prefs_warning): Fix change for better translatability. * app-openpgp.c (do_writekey): Fixed computation of memmove length. This led to garbled keys if E was larger than one byte. Thanks to Achim Pietig for hinting at the garbled E. 2006-06-27 Werner Koch * gpg.c (reopen_std) [HAVE_W32_SYSTEM]: Do not use it. 2006-06-22 David Shaw * options.h, gpg.c (main), keygen.c (keygen_upd_std_prefs, keygen_add_std_prefs, proc_parameter_file): Add --default-keyserver-url to specify a keyserver URL at key generation time, and "Keyserver:" keyword for doing the same through a batch file. * sign.c (do_sign): Accept a truncated hash even for DSA1 keys (be liberal in what you accept, etc). 2006-06-12 David Shaw * import.c (import_one): Add a flag (from_sk) so we don't check prefs on an autoconverted public key. The check should only happen on the sk side. Noted by Dirk Traulsen. 2006-06-09 David Shaw * keygen.c (gen_card_key): Add optional argument to return a pointer (not a copy) of the stub secret key for the secret key we just generated on the card. (generate_card_subkeypair): Use it here so that the signing key on the card can use the card to generate the 0x19 backsig on the primary key. Noted by Janko Heilgeist and Jonas Oberg. * parse-packet.c (parse_user_id): Cap the user ID size at 2048 bytes. This prevents a memory allocation attack with a very large user ID. A very large packet length could even cause the allocation (a u32) to wrap around to a small number. Noted by Evgeny Legerov on full-disclosure. 2006-05-25 David Shaw * keygen.c (gen_dsa): Allow generating DSA2 keys (allow specifying sizes > 1024 when --enable-dsa2 is set). The size of q is set automatically based on the key size. (ask_keysize, generate_keypair): Ask for DSA size when --enable-dsa2 is set. 2006-05-24 David Shaw * exec.c (make_tempdir): Fix bug with a temporary directory on Win32 that is over 256 bytes long. Noted by Israel G. Lugo. 2006-05-23 David Shaw * gpg.c (reopen_std): New function to reopen fd 0, 1, or 2 if we are called with them closed. This is to protect our keyring/trustdb files from corruption if they get attached to one of the standard fds. Print a warning if possible that this has happened, and fail completely if we cannot reopen (should never happen). (main): Call it here. 2006-05-22 David Shaw * parse-packet.c (dump_sig_subpkt, parse_signature), build-packet.c (build_sig_subpkt_from_sig), getkey.c (fixup_uidnode, merge_selfsigs_main, merge_selfsigs_subkey), keygen.c (keygen_add_key_expire): Fix meaning of key expiration and sig expiration subpackets - zero means "never expire" according to 2440, not "expire instantly". * getkey.c (get_pubkey_byname), import.c (import_one): Fix key selection problem when auto-key-locate returns a list of keys, not all of which are usable (revoked, expired, etc). Noted by Simon Josefsson. 2006-04-26 David Shaw * keyserver.c (direct_uri_map): New. (keyserver_spawn): Used here to add "_uri" to certain gpgkeys_xxx helpers when the meaning is different if a path is provided (i.e. ldap). (keyserver_import_cert): Show warning if there is a CERT fingerprint, but no --keyserver set. 2006-04-22 David Shaw * keyserver.c: Fix build problem with platforms that stick libcurl in a place not in the regular include search path. 2006-04-20 David Shaw * options.h, gpg.c (main): Add --enable-dsa2 and --disable-dsa2. Defaults to disable. * pkclist.c (algo_available): If --enable-dsa2 is set, we're allowed to truncate hashes to fit DSA keys. * sign.c (match_dsa_hash): New. Return the best match hash for a given q size. (do_sign, hash_for, sign_file): When signing with a DSA key, if it has q==160, assume it is an old DSA key and don't allow truncation unless --enable-dsa2 is also set. q!=160 always allows truncation since they must be DSA2 keys. (make_keysig_packet): If the user doesn't specify a --cert-digest-algo, use match_dsa_hash to pick the best hash for key signatures. 2006-04-19 David Shaw * gpg.c (print_mds), armor.c (armor_filter, parse_hash_header): Add SHA-224. * sign.c (write_plaintext_packet), encode.c (encode_simple): Factor common literal packet setup code from here, to... * main.h, plaintext.c (setup_plaintext_name): Here. New. Make sure the literal packet filename field is UTF-8 encoded. * options.h, gpg.c (main): Make sure --set-filename is UTF-8 encoded and note when filenames are already UTF-8. 2006-04-18 David Shaw * keyedit.c (menu_backsign): Give some more verbose errors when we have no need to backsign. 2006-04-11 David Shaw * options.skel, photoid.c (get_default_photo_command): Find an image viewer at runtime. Seems FC5 doesn't have xloadimage. 2006-04-08 David Shaw * getkey.c (parse_auto_key_locate): Fix dupe-removal code. * keyedit.c (menu_backsign): Allow backsigning even if the secret subkey doesn't have a binding signature. * armor.c (radix64_read): Don't report EOF when reading only a pad (=) character. The EOF actually starts after the pad. * gpg.c (main): Make --export, --send-keys, --recv-keys, --refresh-keys, and --fetch-keys follow their arguments from left to right. Suggested by Peter Palfrader. 2006-04-08 Werner Koch * mainproc.c (list_node): Print ring trust value only if not empty and --with-colons has been given. 2006-04-05 Werner Koch * getkey.c (user_id_not_found_utf8): New. (get_primary_uid, get_user_id): Use it. Fixes Debian bug #205028 in the right way. 2006-04-03 Werner Koch * import.c (check_prefs_warning): Merged strings for better translation. * gpg.c (main) [__GLIBC__]: Default to libpcsclite.so.1. * status.h, status.c (STATUS_BEGIN_SIGNING): New. Suggested by Daiki Ueno. * textfilter.c (copy_clearsig_text): Issue new status code. * sign.c (sign_file, sign_symencrypt_file): Ditto. 2006-03-31 David Shaw * getkey.c (get_pubkey_byname): Fix missing auto_key_retrieve unlock. Fix strings to not start with a capital letter as per convention. 2006-03-30 David Shaw * main.h, seskey.c (encode_md_value): Modify to allow a q size greater than 160 bits as per DSA2. This will allow us to verify and issue DSA2 signatures for some backwards compatibility once we start generating DSA2 keys. * sign.c (do_sign), sig-check.c (do_check): Change all callers. * sign.c (do_sign): Enforce the 160-bit check for new signatures here since encode_md_value can handle non-160-bit digests now. This will need to come out once the standard for DSA2 is firmed up. 2006-03-28 Werner Koch * openfile.c (overwrite_filep): Fix small cpr issue. Noted by Daiki Ueno. 2006-03-22 David Shaw * getkey.c (parse_auto_key_locate): Silently strip out duplicates rather than causing an error. 2006-03-22 Werner Koch * sig-check.c (signature_check2): Changed warning URL to include faq. * misc.c (idea_cipher_warn): Ditto. 2006-03-22 David Shaw * mainproc.c (get_pka_address): Fix bug introduced as part of sig_to_notation conversion. Noted by Peter Palfradrer. 2006-03-21 Werner Koch * cardglue.c (agent_scd_pksign): Allow the use of ripemd-160 along with scdaemon. 2006-03-16 David Shaw * keyserver.c (keyserver_import_cert): Handle the IPGP CERT type for both the fingerprint alone, and fingerprint+URL cases. * getkey.c (get_pubkey_byname): Minor cleanup. 2006-03-13 David Shaw * keyserver-internal.h, keyserver.c (keyserver_import_pka): Use the same API as the other auto-key-locate fetchers. * getkey.c (get_pubkey_byname): Use the fingerprint of the key that we actually fetched. This helps prevent problems where the key that we fetched doesn't have the same name that we used to fetch it. In the case of CERT and PKA, this is an actual security requirement as the URL might point to a key put in by an attacker. By forcing the use of the fingerprint, we won't use the attacker's key here. * keyserver-internal.h, keyserver.c (keyserver_spawn, keyserver_work, keyserver_import_cert, keyserver_import_name, keyserver_import_ldap): Pass fingerprint info through. * main.h, import.c (import_one): Optionally return the fingerprint of the key being imported. (import_keys_internal, import_keys_stream, import): Change all callers. 2006-03-12 David Shaw * sig-check.c (signature_check2): Print the backsig warning when there is no backsig present. Give a URL for more information. * keyedit.c (menu_backsign): Small tweak to work properly with keys originally generated with older GnuPGs that included comments in the secret keys. 2006-03-10 Werner Koch * card-util.c (get_manufacturer): Added Vendor 3 2006-03-09 David Shaw * build-packet.c (string_to_notation): Add ability to indicate a notation to be deleted with a '-' prefix. * keyedit.c (menu_set_notation): Use it here to allow deleting a notation marked with '-'. This works with either "-notation" or "-notation=value". 2006-03-08 David Shaw * keyedit.c (menu_set_notation): New function to set notations on self-signatures. (keyedit_menu): Call it here. (tty_print_notations): Helper. (show_prefs): Show notations in "showpref". * mainproc.c (get_pka_address) * keylist.c (show_notation): Remove duplicate code by using notation functions. * packet.h, build-packet.c (sig_to_notation) * keygen.c (keygen_add_notations): Provide printable text for non-human-readable notation values. * packet.h, build-packet.c (sig_to_notation) * keygen.c (keygen_add_notations): Tweak to handle non-human-readable notation values. * options.h, sign.c (mk_notation_policy_etc) * gpg.c (add_notation_data): Use it here for the various notation commands. * packet.h, main.h, keygen.c (keygen_add_notations) * build-packet.c (string_to_notation, sig_to_notation) (free_notation): New "one stop shopping" functions to handle notations and start removing some code duplication. 2006-03-08 Werner Koch * mainproc.c (do_check_sig): Use log_error for standalone revocations. 2006-03-07 David Shaw * options.h, mainproc.c (check_sig_and_print), gpg.c (main): pka-lookups, not pka-lookup. * options.h, gpg.c (main), keyedit.c [cmds], sig-check.c (signature_check2): Rename "backsign" to "cross-certify" as a more accurate name. * options.h, gpg.c (main, parse_trust_model), pkclist.c (check_signatures_trust), mainproc.c (check_sig_and_print, pka_uri_from_sig), trustdb.c (init_trustdb): Some tweaks to PKA so that it is a verify-option now. 2006-03-07 Werner Koch * mainproc.c (proc_signature_packets): Return any_sig_seen to caller. (check_sig_and_print): Option to partly allow the old behaviour. * gpg.c: New option --allow-multisig-verification. 2006-03-06 David Shaw * sign.c (make_keysig_packet): Don't use MD5 for a RSA_S key as that is not a PGP 2.x algorithm. * mainproc.c (proc_compressed): "Uncompressed" is not a valid compression algorithm. 2006-03-06 Werner Koch * mainproc.c (check_sig_and_print): Made the composition test more tight. This is due to another bug report by Tavis Ormandy. (add_onepass_sig): Simplified. 2006-03-05 Werner Koch * plaintext.c (handle_plaintext): Replace assert by explict error conflict message. Reported by Tavis Ormandy. 2006-03-02 Werner Koch * cardglue.c (check_card_serialno): Don't ask in batch mode. 2006-03-01 David Shaw * getkey.c (parse_auto_key_locate): Error if the user selects "cert" or "pka" when those features are disabled. * misc.c (has_invalid_email_chars): Fix some C syntax that broke the compilers on SGI IRIX MIPS and Compaq/DEC OSF/1 Alpha. Noted by Nelson H. F. Beebe. 2006-02-27 David Shaw * options.skel: Document auto-key-locate and give a pointer to Simon Josefsson's page for CERT. 2006-02-24 David Shaw * keydb.h, getkey.c (release_akl), gpg.c (main): Add --no-auto-key-locate. * options.h, gpg.c (main): Keep track of each keyserver registered so we can match on them later. * keyserver-internal.h, keyserver.c (cmp_keyserver_spec, keyserver_match), gpgv.c: New. Find a keyserver that matches ours and return its spec. * getkey.c (get_pubkey_byname): Use it here to get the per-keyserver options from an earlier keyserver. 2006-02-23 David Shaw * keyserver.c (parse_keyserver_options): Only change max_cert if it is used. * options.c, gpg.c (main), keyserver.c (keyserver_spawn): No special treatment of include-revoked, include-subkeys, and try-dns-srv. These are keyserver features, and GPG shouldn't get involved here. * keyserver.c (parse_keyserver_uri, add_canonical_option): Always append options to the list, as ordering may be significant to the user. * gpg.c (add_notation_data): Fix reversed logic for isascii check when adding notations. Noted by Christian Biere. * options.h, keyserver.c (add_canonical_option): New. (parse_keyserver_options): Moved from here. (parse_keyserver_uri): Use it here so each keyserver can have some private options in addition to the main keyserver-options (e.g. per-keyserver auth). 2006-02-22 David Shaw * options.h, keyserver-internal.h, keyserver.c (keyserver_import_name), getkey.c (free_akl, parse_auto_key_locate, get_pubkey_byname): The obvious next step: allow arbitrary keyservers in the auto-key-locate list. * options.h, keyserver.c (parse_keyserver_options): Remove auto-cert-retrieve as it is no longer meaningful. Add max-cert-size to allow users to pick a max key size retrieved via CERT. * options.h, gpg.c (main), mainproc.c (check_sig_and_print), keyserver.c (keyserver_opts): Rename auto-pka-retrieve to honor-pka-record to be consistent with honor-keyserver-url. * options.h, keydb.h, g10.c (main), getkey.c (parse_auto_key_locate): Parse a list of key access methods. (get_pubkey_byname): Walk the list here to try and retrieve keys we don't have locally. 2006-02-21 David Shaw * getkey.c (get_pubkey_byname): Fix minor security problem with PKA when importing at -r time. The URL in the PKA record may point to a key put in by an attacker. Fix is to use the fingerprint from the PKA record as the recipient. This ensures that the PKA record is followed. * keyserver-internal.h, keyserver.c (keyserver_import_pka): Return the fingerprint we requested. * gpgv.c: Stub keyserver_import_ldap. * keyserver-internal.h, keyserver.c (keyserver_import_ldap): Import using the PGP Universal trick of asking ldap://keys.(maildomain) for the key. 2006-02-20 David Shaw * keyserver.c (parse_keyserver_uri): Include the scheme in the uri even when we've assumed "hkp" when there was no scheme. 2006-02-20 Werner Koch * apdu.c (open_pcsc_reader): As a precaution set LIST to NULL after free. 2006-02-14 Werner Koch * verify.c (verify_signatures): Print warning also for NO_DATA. * mainproc.c (struct mainproc_context): New field any_sig_seen. (add_signature): Set it. (proc_signature_packets): Test and return NO_DATA. 2006-02-09 Werner Koch * gpg.c (main) : Disable random locking. 2006-02-06 Werner Koch * ccid-driver.c, ccid-driver.h: Updated from GnuPG 1.9. Changes: * ccid-driver.h (CCID_DRIVER_ERR_NO_KEYPAD): New. * ccid-driver.c (send_escape_cmd): New args RESULT, RESULTLEN and RESULTMAX. Changed all callers. (ccid_transceive_escape): New. * ccid-driver.c (special_transport): New (ccid_open_reader, do_close_reader, ccid_shutdown_reader) (bulk_out, bulk_in): Add support for CardMan 4040 reader. * ccid-driver.c (scan_or_find_devices): Factored most code out to (scan_or_find_usb_device): .. new. (make_reader_id): Fixed vendor mask. 2006-01-24 David Shaw * keyserver.c (parse_keyserver_uri): If there is a path present, set the direct_uri flag so the right keyserver helper is run. 2006-01-22 David Shaw * keyserver.c (keyserver_spawn): Include the EXEEXT so we can find keyserver helpers on systems that use extensions. * misc.c (path_access) [HAVE_DRIVE_LETTERS]: Do the right thing with drive letter systems. 2006-01-17 David Shaw * keydb.h, passphrase.c (next_to_last_passphrase): New. "Touch" a passphrase as if it was used (move from next_pw to last_pw). * pubkey-enc.c (get_session_key): Use it here to handle the case where a passphrase happens to be correct for a secret key, but yet that key isn't the anonymous recipient (i.e. the secret key could be decrypted, but not the session key). This also handles the case where a secret key is located on a card and a secret key with no passphrase. Note this does not fix bug 594 (anonymous recipients on smartcard do not work) - it just prevents the anonymous search from stopping when the card is encountered. 2006-01-07 David Shaw * keyserver.c (keyserver_refresh): Fix problem when more than one key in a refresh batch has a preferred keyserver set. Noted by Nicolas Rachinsky. 2006-01-01 David Shaw * mainproc.c (check_sig_and_print), keyserver.c (keyserver_import_pka), card-util.c (fetch_url): Always require a scheme:// for keyserver URLs except when used as part of the --keyserver command for backwards compatibility. * sign.c (write_signature_packets): Lost a digest_algo line. * sign.c (hash_for): Add code to detect if the sk lives on a smart card. If it does, only allow 160-bit hashes, a la DSA. This involves passing the *sk in, so change all callers. This is correct for today, given the current 160-bit q in DSA, and the current SHA-1/RIPEMD160 support in the openpgp card. It will almost certainly need changing down the road. * app-openpgp.c (do_sign): Give user error if hash algorithm is not supported by the card. 2005-12-23 David Shaw * keyserver.c (keyserver_import_pka): New. Moved from getkey.c:get_pubkey_byname which was getting crowded. * keyserver.c (keyserver_import_cert): Import a key found in DNS via CERT records. Can handle both the PGP (actual key) and IPGP (URL) CERT types. * getkey.c (get_pubkey_byname): Call them both here. * options.h, keyserver.c (parse_keyserver_options): Add "auto-cert-retrieve" option with optional max size argument. * gpgv.c: Stubs. * keyserver-internal.h, keyserver.c (keyserver_spawn, keyserver_work, keygerver_getname): New keyserver_getname function to fetch keys by name. * getkey.c (get_pubkey_byname): Call it here to enable locating keys by full mailbox from a keyserver a la PKA. Try PKA first, though, as it is likely to be faster. 2005-12-20 Werner Koch * gpg.c: New option --allow-pka-lookup. (parse_trust_model): Add "+pka" variants. (main): Make KEYSERVER_AUTO_PKA_RETRIEVE teh default. * options.h (opt): New fields PKA_TRUST_INCREASE and ALLOW_PKA_LOOKUP. * status.h (STATUS_PKA_TRUST_BAD, STATUS_PKA_TRUST_GOOD): New. * pkclist.c (check_signatures_trust): Increase trust due to valid PKA only if that new option has been set. Issue new status lines. * trustdb.c (init_trustdb): Print info if this option is active. * getkey.c (get_pubkey_byname): Honor allow-pka-lookup. * mainproc.c (pka_uri_from_sig): Ditto. * trustdb.c (validate_keys): Print no "ultimately trusted keys found" only in non-quiet mode. 2005-12-19 David Shaw * getkey.c (merge_selfsigs_main): All primary keys can certify. 2005-12-18 David Shaw * gpg.c (main): Restore convert-sk-to-pk as programs rely on it. * keyid.c (usagestr_from_pk): Remove special PUBKEY_USAGE_CERT flag. It's no longer needed. 2005-12-14 David Shaw * gpg.c (main): Don't default to import-options convert-sk-to-pk. It causes confusing warning messages when importing a PGP-exported key that contains a secret key without selfsigs followed by the public key. 2005-12-08 David Shaw * keyserver.c (keyserver_fetch): Switch on fast-import before we --fetch-keys so we don't rebuild the trustdb after each fetch. 2005-12-08 Werner Koch * gpg.c (main): Check for DBCS lead byte when converting the homedir. By Kazuyoshi Kakihara. Fixes PR561. * keyserver.c (keyserver_fetch): Made strings translatable. 2005-12-08 David Shaw * options.h, keyserver.c (curl_cant_handle, keyserver_spawn) (keyserver_fetch): Set a flag to indicate that we're doing a direct URI fetch so we can differentiate between a keyserver operation and a URI fetch for protocols like LDAP that can do either. 2005-12-07 David Shaw * keyserver.c (keyserver_spawn): Don't print "searching for key 00000000" when fetching a URI. * keyserver-internal.h, keyserver.c (keyserver_fetch): New. Fetch an arbitrary URI using the keyserver helpers. * gpg.c (main): Call it from here for --fetch-keys. 2005-12-07 Werner Koch * pkclist.c (do_we_trust): Add NOTREACHED comment. 2005-11-20 David Shaw * main.h, keylist.c (print_revokers): New. Print the "rvk" designated revoker record. Moved from keyedit.c:show_key_with_all_names_colon. * keylist.c (list_keyblock_colon): Use it here ... * keyedit.c (show_key_with_all_names_colon): ... and here. 2005-11-19 David Shaw * free-packet.c (copy_secret_key): Copy secret key into secure memory since we may unprotect it. * main.h, g10.c (main), revoke.c (gen_desig_revoke): Add local user support so users can use -u with --desig-revoke. This bypasses the interactive walk over the revocation keys. 2005-11-17 David Shaw * keyedit.c (keyedit_menu, menu_clean): Simplify clean options to just "clean", and add "minimize". * import.c (parse_import_options): Make help text match the export versions of the options. * options.h, export.c (parse_export_options, do_export_stream): Reduce clean options to two: clean and minimize. * trustdb.h, trustdb.c (clean_one_uid): New function that joins uid and sig cleaning into one for a simple API outside trustdb. 2005-11-13 David Shaw * armor.c (parse_header_line): A fussy bit of 2440: header lines are delimited with a colon-space pair. Therefore a line such as "Comment: " (with a trailing space) is actually legal, albeit not particularly useful. 2005-11-11 David Shaw * trustdb.h, trustdb.c (clean_key): New function to handle key cleaning from one convenient place. * options.h, import.c (parse_import_options, clean_sigs_from_all_uids, import_one): Reduce clean options to two: clean and minimize. * parse-packet.c (setup_user_id): Remove. (parse_user_id, parse_attribute): Just use xmalloc_clear instead. * trustdb.c (clean_uid_from_key, clean_uids_from_key): Significantly simpler implementation. 2005-11-10 David Shaw * keyedit.c (keyedit_menu, menu_clean_sigs_from_uids): Add "minimize" command. * packet.h, keyedit.c (menu_clean_uids_from_key), trustdb.c (clean_uids_from_key): Fix display bug where sigs cleaned for other reasons caused a uid to appear as if it had been compacted. * packet.h: Move some flags to a bitfield. Change all callers. * options.h, import.c (parse_import_options, clean_sigs_from_all_uids, import_one): Add import-minimal option. Similar to export-minimal, except it works on the way in. * trustdb.h, trustdb.c (clean_sigs_from_uid): Add flag to remove all non-selfsigs from key during cleaning. Change all callers. * export.c (do_export_stream): Use it here for export-minimal so we don't need additional minimize code in the export path. 2005-11-06 David Shaw * options.skel: Add a section for --encrypt-to. This is Debian bug 336211 by Javier Fernández-Sanguino Peña. 2005-11-05 David Shaw * Makefile.am: Include @LIBUSB_CPPFLAGS@ in our CPPFLAGS. Strictly speaking this should be only in gpg_CPPFLAGS, but then we have to compile everything twice for gpg and gpgv. * apdu.c (open_pcsc_reader): Fix double free. * gpg.c (main) [__APPLE__]: Default the PCSC driver to the OS X location. Suggested by Patty A. Hardy. 2005-11-02 David Shaw * trustdb.c (clean_sigs_from_uid): Include sigs from unavailable keys in the sigs that are cleaned. Suggested by Dirk Traulsen and many others. 2005-11-01 David Shaw * import.c (import_one): Do collapse_uids() before we do any cleaning so keyserver mangled keys with doubled user IDs can be properly cleaned - possibly sigs on the different user IDs cancel each other out. * import.c (parse_import_options), export.c (parse_export_options): List "xxx-clean" before the longer options so we don't end up with a partial match on the longer options. * trustdb.c (clean_uids_from_key): Return proper number of cleaned user IDs. Don't count user IDs as cleaned unless we actually delete something. 2005-10-27 David Shaw * keyedit.c (menu_addrevoker), getkey.c (finish_lookup): Fix problem with adding a cert-only designated revoker. Code was looking for a key with sign ability, and not cert ability. Noted by Timo Schulz. 2005-10-27 Werner Koch * gpg.c [__CYGWIN__]: Set default driver to winscard.dll. * apdu.c, apdu.h: Updated from gnupg 1.9. Changes are: * apdu.c [__CYGWIN__]: Make cygwin environment similar to _WIN32. Suggested by John P. Clizbe. * apdu.h (SW_HOST_NO_KEYPAD): New. * apdu.c (host_sw_string): Support new code. (reader_table_s): New field CHECK_KEYPAD. (new_reader_slot, open_ct_reader, open_pcsc_reader) (open_ccid_reader, open_rapdu_reader): Initialize it. (check_ccid_keypad): New. (apdu_check_keypad): New. (apdu_send_le): Factored all code out to ... (send_le): .. new. Takes an additional arg; changed all callers of the orginal function to use this one with a NULL for the new arg. (apdu_send_simple_kp): New. (ct_send_apdu, pcsc_send_apdu, my_rapdu_send_apdu) (send_apdu_ccid): New arg PININFO. (send_apdu_ccid): Use the new arg. 2005-10-26 David Shaw * keygen.c (proc_parameter_file): Default key and subkey usage flags to algo capabilities if parameter file doesn't specify them. Noted by Timo Schulz. 2005-10-18 Werner Koch * cardglue.c (pin_cb): Fixed prompt for repeated PIN. Return G10ERR_CANCELED and not just -1. (status_sc_op_failure): New. Use it where we issue that status. (pin_cb): Append serial number to the need-pin status message. (agent_scd_change_pin): Add arg SERIALNO. Changed all callers. (agent_scd_writekey): Ditto. (agent_scd_setattr): Ditto. (agent_scd_genkey): Ditto. (agent_scd_checkpin): Pass serialno to the pin_cb. * keygen.c (parse_expire_string): Allow setting the expire interval using a "seconds=" syntax. This is useful for debugging. 2005-10-17 Werner Koch * export.c (do_export_stream): Factored some code out to ... (skip_subkey_p): .. new. (subkey_in_list_p, release_subkey_list): New. (new_subkey_list_item): New. (do_export_stream): Export exactly specified subkeys into one keyblock. 2005-10-13 David Shaw * keyedit.c (keyedit_menu, menu_backsign): New "backsign" command to add 0x19 backsigs to old keys that don't have them. * misc.c (parse_options): Fix build warning. * main.h, keygen.c (make_backsig): Make public. 2005-10-12 David Shaw * options.h, getkey.c (merge_selfsigs_subkey), gpg.c (main), sig-check.c (signature_check2): Add --require-backsigs and --no-require-backsigs. Currently defaults to --no-require-backsigs. 2005-10-11 David Shaw * getkey.c (merge_selfsigs_subkey), sig-check.c (signature_check2), keygen.c (make_backsig): Did some backsig interop testing with the PGP folks. All is well, so I'm turning generation of backsigs on for new keys. Checking for backsigs on verification is still off. 2005-10-05 Werner Koch * g10.c: Renamed to .. * gpg.c: ..this. * Makefile.am: Adjusted accordingly. 2005-09-22 Werner Koch * sign.c (write_plaintext_packet): Don't print an empty file warning if the file is actually too large. * encode.c (encode_simple,encode_crypt): Ditto. * progress.c (handle_progress): Adjusted for iobuf_get_filelength change. * photoid.c (generate_photo_id): Ditto. 2005-09-20 Werner Koch * mainproc.c (proc_symkey_enc): Take care of a canceled passphrase prompt. 2005-09-19 David Shaw * keylist.c (reorder_keyblock, do_reorder_keyblock): Reorder attribute IDs as well as regular text IDs. * plaintext.c (ask_for_detached_datafile): Use make_filename() on filename so tilde expansion works. 2005-09-14 David Shaw * main.h, misc.c (parse_options): Add the ability to have help strings in xxx-options commands. * keyserver.c (keyserver_opts), import.c (parse_import_options), export.c (parse_export_options), g10.c (parse_list_options, main): Add help strings to xxx-options. 2005-09-10 David Shaw * keyedit.c (show_names): Moved name display code out from show_key_with_all_names. (keyedit_menu): Call it here for pref and showpref so they can show only the selected user ID. Suggested by Timo Schulz. 2005-09-07 Werner Koch * cardglue.h (GPG_ERR_TOO_LARGE): New. * apdu.c, apdu.h, iso7816.c, iso7816.h * ccid-driver.c, ccid-driver.h: Updated from GnuPG 1.9 source. Changes are: * iso7816.c (iso7816_select_path): New. * iso7816.c (iso7816_read_binary): Use Le=0 when reading all data. Handle 6C00 error and take 6B00 as indication for EOF. * apdu.h (SW_EXACT_LENGTH_P): New. * apdu.c (new_reader_slot, reset_pcsc_reader, pcsc_get_status) (open_pcsc_reader): Set new reader state IS_T0. (apdu_send_le): When doing T=0 make sure not to send Lc and Le. Problem reported by Carl Meijer. (apdu_send_direct): Initialize RESULTLEN. * misc.c (parse_options): Allow meta option "help" to list all options and to exit the program. 2005-09-02 David Shaw * parse-packet.c (enum_sig_subpkt, parse_signature, parse_attribute_subpkts): Make a number of warnings verbose items. These fire on many slightly mangled keys in the field, so the warning is becoming burdensome. 2005-09-01 David Shaw * photoid.h, photoid.c (generate_photo_id): Allow passing in a suggested filename. * keyedit.c (keyedit_menu, menu_adduid): Call it here so "addphoto filename" works. 2005-08-31 David Shaw * photoid.c (generate_photo_id): Enable readline completion and tilde expansion for the JPEG prompt. 2005-08-30 Werner Koch * passphrase.c (agent_open): Print a warning and not an error in case of a missing agent. Should fix Debian bug #325578. 2005-08-26 David Shaw * misc.c (openpgp_pk_algo_usage): Default to allowing CERT for signing algorithms. * keyedit.c (sign_uids): Don't request a signing key to make a certification. * keygen.c (do_add_key_flags): Force the certify flag on for all primary keys, as the spec requires primary keys must be able to certify (if nothing else, which key is going to issue the user ID signature?) (print_key_flags): Show certify flag. (ask_key_flags, ask_algo): Don't allow setting the C flag for subkeys. * keyid.c (usagestr_from_pk), getkey.c (parse_key_usage): Distinguish between a sign/certify key and a certify-only key. * keyedit.c (ask_revoke_sig): Add a revsig --with-colons mode. Suggested by Michael Schierl. 2005-08-21 David Shaw * Makefile.am: No need to link with curl any longer. * main.h, misc.c (path_access): New. Same as access() but does a PATH search like execlp. * keyserver.c (curl_can_handle): Removed. Replaced by... (curl_cant_handle): We are now relying on curl as the handler of last resort. This is necessary because PGP LDAP and curl LDAP are apples and oranges. (keyserver_typemap): Only test for ldap and ldaps. (keyserver_spawn): If a given handler is unusable (as determined by path_access()) then try gpgkeys_curl. * exec.h, exec.c (make_tempdir, expand_args, exec_write, exec_read): Minor cleanup to use bitfield flags instead of a bunch of integers. 2005-08-20 David Shaw * g10.c (main): Add aliases sign-with->local-user and user->recipient to make switching from PGP command line to GPG easier. 2005-08-19 David Shaw * options.skel: Remove the surfnet LDAP keyserver from the list of samples since it is being shut down. * getkey.c (classify_user_id): Disable the '.' and '+' search modes since they aren't supported yet. 2005-08-05 David Shaw * g10.c (main), passphrase.c (set_passphrase_from_string): New --passphrase command line option. Only useful in very special circumstances. 2005-08-05 Werner Koch * gpgv.c (keyserver_import_fprint): New stub. * keygen.c (ask_user_id): Moved email checking code out to .. * misc.c (is_valid_mailbox): .. new. * mainproc.c (get_pka_address): Use it here. * getkey.c (get_pubkey_byname): Add falback to auto-retrieve a key via the PKA mechanism. * options.h (KEYSERVER_AUTO_PKA_RETRIEVE): New. * keyserver.c (keyserver_opts): Ditto. * mainproc.c (check_sig_and_print): Use it here to retrieve keys from a PKA DNS record. * pkclist.c (build_pk_list): Add comments to this function; re-indented it. 2005-08-04 David Shaw * keygen.c (proc_parameter_file): Sanity check items in keygen batch file. Noted by Michael Schierl. * pkclist.c (do_edit_ownertrust): Don't allow ownertrust level 0. Noted by Michael Schierl. * keygen.c (write_keyblock): Don't try and build deleted kbnodes since we start our tree with one. 2005-08-04 Werner Koch * export.c (do_export_stream): Skip on-card keys when only subkeys are to be exported. It does not make sense to replace the on-card key stub by a no-key stub. * revoke.c (gen_revoke): Check for non-online keys. * seckey-cert.c (is_secret_key_protected): Return -3 for non-online key stubs. The old code assumes that a protection algorithm is still set but in some cases this one is 0 and thus it won't be possible to decide whether it is unprotected or protected. 2005-07-28 Werner Koch * Makefile.am (other_libs): Add SRVLIBS. * parse-packet.c (can_handle_critical_notation): We know about pka-address@gnupg.org. * packet.h (PKT_signature): New fields PKA_INFO and PKA_TRIED. (pka_info_t): New. * free-packet.c (cp_pka_info): New. (free_seckey_enc, copy_signature): Support new fields. * mainproc.c (get_pka_address, pka_uri_from_sig): New. (check_sig_and_print): Try to get the keyserver from the PKA record. * pkclist.c (check_signatures_trust): Adjust the trust based on the PKA. * gpgv.c (parse_keyserver_uri): New stub. * keygen.c (has_invalid_email_chars): Moved to .. * misc.c (has_invalid_email_chars): .. here and made global. 2005-07-27 Werner Koch * export.c (do_export_stream): Make two strings translatable. 2005-07-26 David Shaw * keyserver.c (keyserver_typemap): Special-case LDAP since curl will report that it can handle it, and we don't want it to. 2005-07-26 Werner Koch * passphrase.c (agent_get_passphrase): Make sure to release the saved codeset. (agent_open): Add arg ORIG_CODESET and switch back to it in case of error. Changed all callers. 2005-07-22 David Shaw * keyedit.c (sign_uids): Don't prompt for setting signature expiry to match key expiry unless --ask-cert-expire is set. Suggested by Peter Palfrader. 2005-07-22 Werner Koch * g10.c, options.h: New option --exit-on-status-write-error. * status.c (write_status_text): Make use of this option. 2005-07-22 David Shaw * options.h, g10.c (main): Removed option --no-interactive-selection. * keyedit.c (keyedit_menu): Use --interactive to enable the uid walking when signing a key with no uids specified to sign. * keylist.c (list_keyblock_print): Fix silly typo. Noted by Greg Sabino Mullane. 2005-07-20 Werner Koch * openfile.c (open_outfile): Disable FD caching for created files. * encode.c (encode_simple, encode_crypt): Disable FD caching for input files. * verify.c (verify_one_file): Ditto. * decrypt.c (decrypt_messages): Ditto. This is bug #479. * misc.c (get_libexecdir) [W32]: Changed to return the value of program used to create the process. * keyserver.c (keyserver_spawn) [DISABLE_KEYSERVER_PATH]: Don't change the exec-path at all. 2005-07-20 David Shaw * keyserver.c (curl_can_handle): New. Do a runtime check against libcurl to see if it can handle a particular protocol. (keyserver_typemap): Call it here. * Makefile.am: Pull in libcurl for curl_version_info() if used. 2005-07-19 Werner Koch * g10.c, options.h: New option --limit-card-insert-tries. * cardglue.c (open_card): Use it. * export.c (parse_export_options): New option export-reset-subkey-passwd. (do_export_stream): Implement it. * misc.c (get_libexecdir): New. * keyserver.c (keyserver_spawn): Use it 2005-07-18 Werner Koch * tdbio.c (open_db): Check for EROFS. Suggested by Bryce Nichols. 2005-07-08 David Shaw * trustdb.c (clean_uids_from_key): Don't keep a valid selfsig around when compacting a uid. There is no reason to make an attacker's job easier - this way they only have a revocation which is useless in bringing the uid back. * keydb.h, kbnode.c (undelete_kbnode): Removed. No longer needed. * import.c (chk_self_sigs): Allow a uid revocation to be enough to allow importing a particular uid (no self sig needed). This allows importing compacted uids. 2005-06-20 David Shaw * keygen.c (save_unprotected_key_to_card): Better fix for gcc4 warning. 2005-06-20 Werner Koch * g10.c, options.h: New option --no-interactive-selection. * keyedit.c (keyedit_menu): Use it. 2005-06-18 Werner Koch * parse-packet.c (parse_signature): Use log_info for messages about missing timestamp or keyid. In case we don't use that key there won't be no further error and thus gpg does not need to return with an error. 2005-06-13 David Shaw * keygen.c (save_unprotected_key_to_card): Fix gcc4 warning. * options.h, import.c (parse_import_options, import_one): Add import-clean-uids option to automatically compact unusable uids when importing. Like import-clean-sigs, this may nodify the local keyring. * trustdb.c (clean_uids_from_key): Only allow selfsigs to be a candidate for re-inclusion. 2005-06-12 David Shaw * options.h, import.c (parse_import_options, clean_sigs_from_all_uids, import_one): Add import-clean-sigs option to automatically clean a key when importing. Note that when importing a key that is already on the local keyring, the clean applies to the merged key - i.e. existing superceded or invalid signatures are removed. * getkey.c (merge_selfsigs_main, merge_selfsigs_subkey): Make sure that even after keys may be merged together, we only have one chosen selfsig. 2005-06-09 David Shaw * options.h, import.c (parse_import_options, delete_inv_parts): import-unusable-sigs is now a noop. * options.h, export.c (do_export_stream), keyedit.c (keyedit_menu, menu_clean_subkeys_from_key), trustdb.h, trustdb.c (clean_subkeys_from_key): Remove subkey cleaning function. It is of very limited usefulness since it cannot be used on any subkey that can sign, and can only affect multiple selfsigs on encryption-only subkeys. * keydb.h, kbnode.c (undelete_kbnode): New function to undelete a kbnode. * trustdb.c (clean_uids_from_key): Further tweak the algorithm so that the last good selfsig is kept when the chosen selfsig is a revocation. 2005-06-08 David Shaw * trustdb.c (clean_uids_from_key), keyedit.c (menu_clean_uids_from_key): Tweak algorithm to preserve the last selfsig which helps prevent uid resurrections. * getkey.c (fixup_uidnode, merge_selfsigs_main): Handle both expired and revoked uids in fixup_uidnode(). No need to special case in merge_selfsigs_main(). This also means that an expired uid will have its selfsig tagged with chosen_selfsig. 2005-06-07 David Shaw * options.h, g10.c (main), export.c (parse_export_options, do_export_stream): Add export-options export-clean-sigs, export-clean-uids, export-clean-subkeys, and export-clean which is all of the above. Export-minimal is the same except it also removes all non-selfsigs. export-unusable-sigs is now a noop. 2005-06-06 Werner Koch * cardglue.c (open_card): Emit new CARDCTRL status 5 for no reader available. 2005-06-02 Werner Koch * app-openpgp.c (do_writekey): Typo fix. * status.c, status.h: Removed STATUS_BAD_PASSPHRASE_PIN. 2005-06-01 David Shaw * signal.c [HAVE_DOSISH_SYSTEM]: Fix unused function warnings on mingw32. Noted by Joe Vender. * passphrase.c [_WIN32]: Remove unused variables. 2005-05-31 David Shaw * keyedit.c (menu_clean_uids_from_key, menu_clean_subkeys_from_key), trustdb.c (clean_uids_from_key, clean_subkeys_from_key): Fix mingw32 build warnings. Noted by Joe Vender. 2005-05-31 Werner Koch * keydb.h [!ENABLE_AGENT_SUPPORT]: Define dummy types. * cardglue.c (assuan_strerror, assuan_transact): Dummy functions if not build with agent support. * armor.c (check_input): Don't bail out on invalid header lines unless in struict rfc2440 mode. Suggested by Richard Patterson. 2005-05-30 Werner Koch * tlv.c: Add hack to compile without gpg-error.h. 2005-05-30 David Shaw * trustdb.h, trustdb.c (clean_subkeys_from_key): New. Walk through the subkeys on a key, and mark any that aren't usable for deletion. Note that a signing subkey is never marked for deletion since these keys are still useful after expiration or revocation. * keyedit.c (menu_clean_subkeys_from_key): New function to call clean_subkeys_from_key() on a key. Note that the strings here are not marked for translation yet. The UI is still in flux, and there is no point in annoying the translators twice. (keyedit_menu): Call it here as part of the "clean" command. 2005-05-29 David Shaw * trustdb.h, trustdb.c (clean_uids_from_key): New. Walk through the user IDs on a key, and mark any that aren't valid for deletion. * keyedit.c (menu_clean_uids_from_key): New function to call clean_uids_from_key() on a key. (keyedit_menu): Call it from here as part of the "clean" command. 2005-05-26 David Shaw * g10.c (main): Default {export|import}-unusable-sigs to off until the "clean" UI can be finished. 2005-05-24 Werner Koch * passphrase.c (ask_passphrase): Unescape the description string. * cardglue.c (unescape_status_string): Removed. Changed all caller to use ... * misc.c (unescape_percent_string): New. * g10.c (add_notation_data): Check number of at-signs. 2005-05-23 Werner Koch * app-openpgp.c, app-common.h: Again updated from gnupg 1.9 CVS. * cardglue.c (open_card): Check USE_AGENT. (agent_scd_checkpin): Implemented Assuan part. (agent_scd_change_pin): Ditto. * g10.c (main): Option --debug-ccid-driver may now be given several times increase the debug level. * ccid-driver.c (parse_ccid_descriptor): Mark SCR335 FW version 5.14 as good. (do_close_reader): Never do a reset. The caller should instead make sure that the reader has been closed properly. The new retry code in ccid_slot_status will make sure that the readersatrts up fine even if the last process didn't closed the USB connection properly. (ccid_get_atr): For certain readers try switching to ISO mode. Thanks to Ludovic Rousseau for this hint and the magic numbers. (print_command_failed): New. (bulk_in): Use it here. Add new arg NO_DEBUG. (ccid_slot_status): Disabled debugging. 2005-05-21 Werner Koch * cardglue.c (send_status_info): Make CTRL optional. (agent_scd_writekey, inq_writekey_parms): New. (agent_openpgp_storekey): Removed. * cardglue.h: Add a few more error code mappings. * keygen.c (copy_mpi): Removed. (save_unprotected_key_to_card): Changed to use agent_scd_writekey. * app-common.h, app-openpgp.c, tlv.c, tlv.h: Updated from newer version in gnupg 1.9 CVS. 2005-05-20 Werner Koch * ccid-driver.c (ccid_transceive): Arghhh. The seqno is another bit in the R-block than in the I block, this was wrong at one place. Fixes bug #419 and hopefully several others. 2005-05-19 Werner Koch * app-common.h, app-openpgp.c, tlv.c, tlv.h: Updated from newer version in gnupg 1.9 CVS. 2005-05-18 Werner Koch * passphrase.c (agent_open): Made global and add arg TRY. (agent_close): Made global. * app-common.h (app_t): Add a field to store the Assuan context. 2005-05-13 David Shaw * build-packet.c (do_comment): Removed. (build_packet): Ignore comment packets. * export.c (do_export_stream): Don't export comment packets any longer. * options.h, g10.c (main): Remove --sk-comments and --no-sk-comments options, and replace with no-op. 2005-05-11 David Shaw * keygen.c (write_selfsigs): Rename from write_selfsig. Write the same selfsig into both the pk and sk, so that someone importing their sk (which will get an autoconvert to the pk) won't end up with two selfsigs. (do_generate_keypair): Call it from here. * parse-packet.c (can_handle_critical_notation): New. Check for particular notation tags that we will accept when critical. Currently, that's only preferred-email-encoding@pgp.com, since we know how to handle it (pass it through to a mail program). (can_handle_critical): Call it from here. (parse_one_sig_subpkt): Sanity check that notations are well-formed in that the internal lengths add up to the size of the subpacket. 2005-05-07 Werner Koch * ccid-driver.c (do_close_reader): Don't do a reset before close. Some folks reported that it makes the SCR335 hang less often. Look at the source on how to re-enable it. 2005-05-06 David Shaw * main.h, keygen.c (parse_expire_string, ask_expire_interval), sign.c (sign_file, clearsign_file, sign_symencrypt_file), g10.c (main), keyedit.c (sign_uids): Use seconds rather than days internally to calculate expiration. We no longer need the day-based code as we don't generate v3 keys. * sign.c (sign_file, clearsign_file, sign_symencrypt_file): Use the default sig expire value when signing in batchmode. 2005-05-05 David Shaw * Makefile.am, packet.h, main.h, comment.c: Remove comment.c. We don't use any of these functions any longer. * keygen.c (start_tree): New function to "prime" a KBNODE list. (do_generate_keypair): Use it here rather than creating and deleting a comment packet. * keygen.c (gen_elg, gen_dsa): Do not put public factors in secret key as a comment. * options.h, encode.c (encode_simple, encode_crypt), keygen.c (do_create): Remove disabled comment packet code. * keygen.c (keygen_set_std_prefs): Add SHA256 and BZip2 to default preferences. * options.h, g10.c (main): Add new --default-sig-expire and --default-cert-expire options. Suggested by Florian Weimer. * main.h, keygen.c (parse_expire_string, ask_expire_interval): Use defaults passed in, or "0" to control what default expiration is. * keyedit.c (sign_uids), sign.c (sign_file, clearsign_file, sign_symencrypt_file): Call them here, so that default expiration is used when --ask-xxxxx-expire is off. 2005-05-03 Werner Koch * passphrase.c (agent_get_passphrase): Add new arg CACHEID. Changed all callers. (ask_passphrase): Add new arg CACHEID and use it in agent mode. Changed all callers. (passphrase_clear_cache): New arg CACHEID. Changed all callers. * cardglue.c (format_cacheid): New. (pin_cb): Compute a cache ID. (agent_scd_pksign, agent_scd_pkdecrypt): Use it. (agent_clear_pin_cache): New. * card-util.c (change_pin): Clear the PIN cache. (check_pin_for_key_operation): Ditto. 2005-04-24 David Shaw * trustdb.h, trustdb.c (mark_usable_uid_certs): Add flags for the no-pubkey and chosen revocation cases. (clean_uid): New function to clean a user ID of unusable (as defined by mark_usable_uid_certs) certs. * keyedit.c (keyedit_menu, menu_clean_uids): Call it here for new "clean" command that removes unusable sigs from a key. * trustdb.h, keyedit.c (keyedit_menu, menu_select_uid_namehash): Allow specifying user ID via the namehash from --with-colons --fixed-list-mode --list-keys. Suggested by Peter Palfrader. 2005-04-21 David Shaw * keyedit.c (sign_uids, keyedit_menu): When the user requests to sign a key without specifying which user IDs to sign, and declines to sign all user IDs, walk through the set of user IDs and prompt for which to sign. * mainproc.c (symkey_decrypt_seskey): There is no need to have an extra check for a bad passphrase and/or unknown cipher algorithm here. We'll fail quite happily later, and usually with a better error message to boot. 2005-04-20 Werner Koch * sign.c (sign_file, sign_symencrypt_file): Allow for hash debugging. 2005-04-16 David Shaw * keyserver.c (keyserver_spawn): Free some memory. * sign.c (hash_for): Comments. 2005-04-11 Werner Koch * g10.c (main, add_notation_data, add_policy_url) (add_keyserver_url): Use isascii() to protect the isfoo macros and to replace direct tests. Possible problems noted by Christian Biere. * keyserver.c (parse_keyserver_uri): Ditto. 2005-04-07 Werner Koch * g10.c (main): Declare --pipemode deprecated. * misc.c (deprecated_command): New. * ccid-driver.c (ccid_slot_status): Fixed debug messages. * card-util.c (card_edit): Add command "verify". Enhanced admin command to allow optional arguments "on", "off" and "verify". (card_status): Print private DOs in colon mode. * app-openpgp.c (do_check_pin): Add hack to allow verification of CHV3. 2005-04-01 Werner Koch * keygen.c (keygen_set_std_prefs): Explain the chosen order of AES key sizes. 2005-04-01 David Shaw * mainproc.c (proc_plaintext): Properly handle SIG+LITERAL (old-style PGP) signatures that use hashes other than SHA-1, RIPEMD160, or MD5. 2005-03-31 David Shaw * exec.h, exec.c (set_exec_path): Remove some dead code and change all callers. We no longer need to append to $PATH. 2005-03-31 Werner Koch * passphrase.c (agent_open): Dropped support for W32 - is was never actually used. Removed support for the old non-assuan protocol; there has never been a matured implementation and gpg-agent is now arround for quite some time. Rewritten to make use of the Assuan code from ../util. (gpga_protocol_codes): Removed. (readn): Removed. (agent_close): Simplified for use with Assuan. (agent_get_passphrase, passphrase_clear_cache): Removed support for old protocol. Use only with ENABLE_CARD_SUPPORT defined. (agent_send_all_options): Take assuan context instead of a file descriptor. (agent_send_option): Likewise. Use assuan_transact. * passphrase.c (writen, readaline): Removed. * g10.c (main): Print a warning if --use-agent has been used but it has not been build with support for it. * keydb.c (keydb_add_resource): Clarify meaning of flags. Add new flag 4. Use log_info for errors registering the default secret key. * g10.c (main): Flag the default keyrings. 2005-03-30 David Shaw * keyserver.c (keyserver_spawn): Don't mess about with the $PATH. Rather, call keyserver helpers with the full path. This fixes some PATH-inspired DLL problems on W32. Noted by Carlo Luciano Bianco. 2005-03-30 Werner Koch * cardglue.c (pin_cb): Print a warning if the info string hack is not there. This may happen due to typos in the translation. 2005-03-22 Werner Koch * misc.c (w32_shgetfolderpath) [W32]: Changed declaration of function ptr. Noted by Tim Costello. * apdu.c [W32]: Changed declaration of dlopened function pointers. 2005-03-21 David Shaw * gpgv.c: Stubs for tty_enable_completion() & tty_disable_completion(). * openfile.c (ask_outfile_name): Enable readline completion when prompting for an output filename. * plaintext.c (ask_for_detached_datafile): Enable readline completion when prompting for a detached sig datafile. 2005-03-21 Werner Koch * keyedit.c (command_generator, keyedit_completion): Changed indentation. * card-util.c (command_generator, card_edit_completion): Ditto. 2005-03-19 David Shaw * card-util.c (command_generator, card_edit_completion) [GNUPG_MAJOR_VERSION==1 && HAVE_LIBREADLINE]: New functions to enable command completion in the --card-edit menu. (card_edit): Call them here. 2005-03-18 David Shaw * keyedit.c (command_generator, keyedit_completion) [HAVE_LIBREADLINE]: New functions to enable command completion in the --edit-key menu. (keyedit_menu): Call them here. 2005-03-17 David Shaw * getkey.c (get_seckey_byname2): If no explicit default key is set, don't pick a disabled default. Noted by David Crick. * Makefile.am: Calculate GNUPG_LIBEXECDIR directly. Do not redefine $libexecdir. * options.h, keyserver.c (parse_keyserver_options) (keyserver_spawn): Don't treat 'verbose' and 'include-disabled' as special. Just pass them through silently to the keyserver helper. 2005-03-16 Werner Koch * ccid-driver.c (parse_ccid_descriptor): Make SCM workaround reader type specific. (scan_or_find_devices): Do not check the interface subclass in the SPR532 kludge, as this depends on the firmware version. (ccid_get_atr): Get the Slot status first. This solves the problem with readers hanging on recent Linux 2.6.x. (bulk_in): Add argument TIMEOUT and changed all callers to pass an appropriate one. Change the standard timeout from 10 to 5 seconds. (ccid_slot_status): Add a retry code with an initial short timeout. (do_close_reader): Do an usb_reset before closing the reader. 2005-03-14 Werner Koch * card-util.c (card_status): Use isotimestamp and not the localized asctimestamp to match the timezone used in the key information. * cardglue.c (pin_cb): Disable debug output. 2005-03-11 Werner Koch * keygen.c (gen_card_key_with_backup): Write status line with the backup filename. * status.h, status.h (STATUS_BACKUP_KEY_CREATED): New. 2005-03-10 David Shaw * keyserver.c (parse_keyserver_options): Accept honor-http-proxy as an alias for http-proxy. * delkey.c (do_delete_key, delete_keys): Fix problem with --expert preventing --delete-secret-and-public-keys from deleting secret keys. 2005-03-10 Werner Koch * keyedit.c (keyedit_menu) [W32]: Run the trustdb stale check earlier. 2005-03-07 Werner Koch * cardglue.c (agent_scd_pkdecrypt, agent_scd_pksign) (agent_scd_genkey, agent_scd_setattr, agent_scd_change_pin) (agent_scd_checkpin, agent_openpgp_storekey): Make sure to send a SC_OP_FAILURE after card operations which might change data. * card-util.c (change_pin): Send a SC_OP_SUCCESS after a PIN has been changed. (change_name): Removed a debug output. * status.h, status.c: New codes BAD_PASSPHRASE_PIN, SC_OP_FAILURE and SC_OP_SUCCESS. 2005-02-24 David Shaw * keyedit.c (keyedit_menu): Only print the key signing hint when signing from a place where it is useful (i.e. --edit-key and not --sign-key). 2005-02-16 Werner Koch * card-util.c (fetch_url): Fetch the key from the default keyserver if no URL is available. 2005-02-15 Werner Koch * passphrase.c (agent_get_passphrase): Don't call free_public_key if PK is NULL. (passphrase_clear_cache): Ditto. Removed debug output. (passphrase_to_dek): Ditto. 2005-02-13 Werner Koch * keyedit.c (cmds): Limit code to 80 columns. Add command BKUPTOCARD. 2005-02-09 David Shaw * encr-data.c (decrypt_data): Use it here to turn off the "quick check" bytes for PK decryptions. This is in regards to the Mister and Zuccherato attack on OpenPGP CFB mode. * mainproc.c (proc_symkey_enc): Set a flag to indicate that a particular session key came from a passphrase and not a PK. 2005-02-08 Werner Koch * misc.c (w32_shgetfolderpath): New. (default_homedir): Use it to avoid problems under Windows95. 2005-02-06 David Shaw * trustdb.h, trustdb.c (trustdb_check_or_update): New. If the trustdb is dirty and --interactive is set, do an --update-trustdb. If not interactive, do a --check_trustdb unless --no-auto-check-trustdb is set. * import.c (import_keys_internal): Moved from here. * keyserver.c (keyserver_refresh): Call it here after all refreshing has happened so that we don't rebuild after each preferred keyserver set of imports, but do one big rebuild at the end. This is Debian bug #293816, noted by Kurt Roeckx. 2005-02-04 David Shaw * getkey.c (merge_selfsigs_subkey): Merged away definition from the backsigs code. 2005-01-31 David Shaw * keygen.c (do_generate_keypair): Write the auth key to the card before the encryption key. This is a partial workaround for a PGP bug (as of this writing, all versions including 8.1), that causes it to try and encrypt to the most recent subkey regardless of whether that subkey is actually an encryption type. In this case, the auth key is an RSA key so it succeeds. 2005-01-27 David Shaw * keyid.c (keyid_from_sk, keyid_from_pk): Use 0xFFFFFFFFFFFFFFFF instead of 0x0000000000000000 for the invalid key ID since all-zeroes is reserved for the anonymous recipient. * keyedit.c (change_passphrase), keygen.c (generate_subkeypair): Fix a string ;) 2005-01-27 Werner Koch * parse-packet.c (listfp): New. (set_packet_list_mode): Intialize it to stdout or stderr depending on a global option. Made all printing in list mode use LISTFP. * keygen.c (generate_subkeypair): Detect primary key on-card and ask for the passphrase. Return an error if the primary key is a plain stub. * keyedit.c (change_passphrase): Don't ever change any stub key. Print a note if a key consists of only stub keys. Reported by Dany Nativel. These are bugs #401 and #402. 2005-01-26 Werner Koch * ccid-driver.c (parse_ccid_descriptor): Need the CSM workaround also for newer firmware versions. Need to get a list of fixed firmware versions and use that. 2005-01-26 David Shaw * keyserver.c (parse_keyserver_uri): Allow RFC-2732 IPv6 [literal address] syntax in keyserver URLs. (keyserver_typemap): Map ftps if we are supporting it. 2005-01-25 Werner Koch * keygen.c (do_generate_keypair): Don't continue after an error; fixed at two places. Why at all didn't I used a goto to cleanup, tsss? * app-openpgp.c (get_cached_data): New arg GET_IMMEDIATE to bypass the cache. Changed all callers. (get_one_do): Bypass the cache if the value would have been read directly for v1.1 cards. It makes things a bit slower but only for 1.0 cards and there are not that many cards out in the wild. This is required to fix a caching bug when generating new keys; as a side effect of the retrieval of the the C4 DO from the 6E DO the chaced fingerprint will get updated to the old value and later when signing the generated key the checking of the fingerprint fails becuase it won't match the new one. Thanks to Moritz for analyzing this problem. (verify_chv3): Removed the CHV status reread logic because we won't cache the C4 DO anymore. 2005-01-21 David Shaw * keyserver.c (free_keyserver_spec): Fix small leak. (keyserver_typemap): Map https if we are supporting it. 2005-01-20 Werner Koch * cardglue.c (open_card): Issue new CARDCTRL(4) status. * gpgv.c (tty_fprintf): New stub. * card-util.c (card_status): Create a secret key stub on the fly and print more information about a card key. * import.c (pub_to_sec_keyblock, auto_create_card_key_stub): New. * getkey.c (get_seckeyblock_byfprint): New. * keylist.c (print_card_key_info): New. * g10.c (i18n_init) [W32]: Pass registry key to gettext initialization. * gpgv.c (i18n_init) [W32]: Ditto. 2005-01-18 Werner Koch * misc.c (default_homedir): New. Taken from gnupg 1.9.15. * g10.c (main): Use it. * gpgv.c (main): Ditto. * keylist.c (public_key_list): Do a trustdb staleness check before opening the keyring. (secret_key_list): Ditto. 2005-01-10 David Shaw * keyedit.c (keyedit_menu): Move command strings outside the function to get ready for the readline completion code. * passphrase.c (readline, agent_send_option, agent_open, agent_get_passphrase, passphrase_clear_cache): Rename readline() to readaline() to keep readline library namespace clear. 2005-01-06 David Shaw * filter.h, armor.c (armor_filter): Use the eol string from the armor filter context instead of hardcoding '\n' or '\r\n'. If no eol string is provided, default to '\n' or '\r\n' as appropriate. (is_armor_header): Trim tabs in armor header lines as well. * keyserver.c (keyserver_spawn): Use it here to force '\n' line endings since the keyserver output file gets a LF->CRLF expansion on win32. 2005-01-05 David Shaw * g10.c (main): Typo. * armor.c (is_armor_header): Allow CR and LF (not just actual spaces) in an armor header line (-----BEGIN etc). This is needed due to CRLF issues on win32. As before, --openpgp makes it strict. 2005-01-03 David Shaw * Makefile.am: Use @LIBUSB@ instead of @LIBUSB_LIBS@ * import.c (delete_inv_parts): Comments on import-unusable-sigs. 2005-01-01 David Shaw * options.h, import.c (parse_import_options, delete_inv_parts): Add import-unusable-sigs flag to enable importing unusable (currently: expired) sigs. * options.h, export.c (parse_export_options, do_export_stream): Add export-unusable-sigs flag to enable exporting unusable (currently: expired) sigs. 2004-12-29 David Shaw * packet.h, getkey.c (merge_selfsigs_main, sig_to_revoke_info), keyid.c (revokestr_from_pk), keyedit.c (show_key_with_all_names): Show who revoked a key (either the same key or a designated revoker) and when. 2004-12-28 Werner Koch * ccid-driver.c (find_endpoint): New. (scan_or_find_devices): Add new args to return endpoint info and interface number. (ccid_open_reader, ccid_shutdown_reader): Take care of these new args. (bulk_in, bulk_out): Use the correct endpoints. (ccid_transceive_apdu_level): New. (ccid_transceive): Divert to above. (parse_ccid_descriptor): Allow APDU level exchange mode. (do_close_reader): Pass the interface number to usb_release_interface. 2004-12-24 David Shaw * keyserver.c (keyserver_typemap): Only map HTTP and FTP if libcurl has specifically been selected to handle them. 2004-12-22 David Shaw * options.h, keyserver.c (parse_keyserver_uri): Properly parse auth data from URLs and pass to keyserver helpers. * keyserver.c (keyserver_typemap): New. Map certain keyserver types to a common type (e.g. ldaps -> ldap). If we are building with curl, map both http and ftp to curl. * build-packet.c (build_sig_subpkt): Only allow one preferred keyserver subpacket at a time. 2004-12-21 David Shaw * keyedit.c (menu_set_keyserver_url): Make sure we only operate on the chosen selfsig so we don't accidentally promote an older selfsig to chosen. Discovered by Simon Josefsson and 'Todd'. * keygen.c (ask_expire_interval): Fix typo. 2004-12-20 David Shaw * keylist.c (list_keyblock_print): Secret key listings should always show everything (expired UIDs, revoked subkeys, etc, etc). * keyedit.c (keyedit_menu): Add additional help for the "sign" flags. 2004-12-20 Werner Koch * keygen.c (ask_expire_interval): For better translations chnage 2 strings. * seckey-cert.c (do_check): Handle case when checksum was okay but passphrase still wrong. Roman Pavlik found such a case. 2004-12-20 David Shaw * keyedit.c (keyedit_menu): Invisible alias "passwd" as "password". * passphrase.c: Don't check for __CYGWIN__, so it is treated as a unix-like system. * options.h, g10.c (main), textfilter.c (standard): Use new option --rfc2440-text to determine whether to filter "\t\r\n" or just "\r\n" before canonicalizing text line endings. Default to "\t\r\n". 2004-12-19 David Shaw * keygen.c (keygen_get_std_prefs): Set reference count when creating the temporary user ID. * keyedit.c (keyedit_menu): Merge updpref and setpref. Keep updpref as an invisible alias. Add invisible alias for revphoto. Fix small memory leak when using "setpref" (not all of the uid was freed). (menu_revkey): Trigger a trust rebuild after revoking a key. Don't allow revoking an already-revoked whole key. (menu_revsubkey): Don't allow revoking an already-revoked subkey. 2004-12-18 David Shaw * keyedit.c (menu_revkey): Rename to menu_revsubkey. (menu_revkey): New. Revoke a whole key. (keyedit_menu): Call it here for when 'revkey' is used without any subkeys selected. This is to be consistent with the other functions which are "selected part if selected, whole key if not". * signal.c: Use only HAVE_LIBREADLINE to detect readline availability. * Makefile.am: Link with readline where necessary. 2004-12-17 Werner Koch * passphrase.c (agent_get_passphrase): Define NREAD locally as size_t or int. * keylist.c (list_keyblock_print): Make field width an int. * keyedit.c (show_key_with_all_names): Ditto. 2004-12-16 David Shaw * g10.c (main): Add --require-secmem/--no-require-secmem to cause gpg to exit if it cannot lock memory. Also remove --nrsign-key and --nrlsign-key since this can better be done via --edit-key. 2004-12-15 David Shaw * apdu.c (apdu_send_le, apdu_send_direct), keylist.c (status_one_subpacket, print_one_subpacket): Fix some compiler warnings. * g10.c (main): Fix --compression-algo to take a string argument like --compress-algo. * trustdb.c (uid_trust_string_fixed): For safety, check for a pk. 2004-12-14 David Shaw * keyedit.c (keyedit_menu): Re-remove the N_() markers. * trustdb.c (uid_trust_string_fixed): Show uids as revoked if the key is revoked. * keyedit.c (show_key_with_all_names): Don't show validity for secret key UIDs. * keyedit.c (parse_sign_type): New. Figure out the flags (local, nonrevoke, trust) for a signature. (keyedit_menu): Call it here so we can mix and match flags, and don't need "nrltsign", "ltsign", "tnrsign", etc, etc, etc. 2004-12-14 Werner Koch * passphrase.c (agent_get_passphrase): Removed debug output * keyserver.c (keyserver_work, keyserver_spawn): Map ldaps to ldap. * keyedit.c (keyedit_menu): Removed the N_() markers from the command names. * card-util.c (card_edit): Ditto. 2004-12-13 Werner Koch * passphrase.c (read_passphrase_from_fd): Fixed memory leak. Noted by Andrei Darashenka. 2004-12-11 David Shaw * keyserver.c (parse_preferred_keyserver): Force preferred keyserver subpackets to have a URI scheme specified. 2004-12-10 David Shaw * options.h, g10.c (main), textfilter.c (standard): Use --rfc2440 or --openpgp directly to determine the end of line hashing rule. * trustdb.c (uid_trust_string_fixed): Show uids as expired if the key is expired. 2004-12-10 Werner Koch * app-openpgp.c (send_fprtime_if_not_null): New. (do_getattr): Add KEY_TIME. (do_learn_status): Print KEY_TIME. * cardglue.c (learn_status_cb): Parse KEY-TIME. * card-util.c (card_status): Print creation time if available. 2004-12-09 David Shaw * options.h, g10.c (main), textfilter.c (len_without_trailing_ws): Removed (not used). (standard): 2440 says that textmode hashes should canonicalize line endings to CRLF and remove spaces and tabs. 2440bis-12 says to just canonicalize to CRLF. So, we default to the 2440bis-12 behavior, but revert to the strict 2440 behavior if the user specifies --rfc2440. In practical terms this makes no difference to any signatures in the real world except for a textmode detached signature. 2004-12-09 Werner Koch * passphrase.c (agent_get_passphrase): New args CUSTOM_PROMPT and CUSTOM_DESCRIPTION. Changed all callers. * app-openpgp.c (do_getattr, do_learn_status, do_setattr): Support the new private DOs. (do_change_pin): Add a "N" prefix to the strings so that the callback can act accordingly for a new PIN. Unfortunately this breaks existing translations but I see no wother way to overvome this. * cardglue.c (learn_status_cb): Ditto. (agent_release_card_info): Ditto. (struct pin_cb_info_s): Removed and changed all users. (pin_cb): Reworked. * card-util.c (card_status): Print them (card_edit): New command PRIVATEDO. (change_private_do): New. 2004-12-09 David Shaw * keygen.c (ask_algo): Add a choose-your-own-capabilities option for DSA. 2004-12-07 David Shaw * keygen.c (ask_keysize): Change strings to always use %u instead of hardcoding key sizes. Bump default to 2048. Bump minimum down to 512, where possible, but require --expert to get there. DSA is always 1024 unless --expert is given. 2004-11-29 David Shaw * getkey.c (parse_key_usage): New function to parse out key usage flags. Set PUBKEY_USAGE_UNKNOWN to handle flags that we don't understand. (fixup_uidnode, merge_selfsigs_main, merge_selfsigs_subkey): Call it from here to remove duplicate code. 2004-11-26 David Shaw * export.c (do_export_stream): Allow export-minimal to work with secret keys, even though a non-selfsig secret key signature is rare. * options.h, export.c (parse_export_options, do_export_stream), import.c (parse_import_options, import_keys_internal): Make the import-options and export-options distinct since they can be mixed together as part of keyserver-options. 2004-11-24 David Shaw * options.h, export.c (parse_export_options, do_export_stream): Add "export-minimal" option to disregard any sigs except selfsigs. * trustdb.c (uid_trust_string_fixed): Use a string that can be atoi-ed, but also has a comment for the translator. * trustdb.h, trustdb.c (uid_trust_string_fixed): New. Return a fixed-size translatable string similar to trust_value_to_string. This allows for easier lining up of displays. * keyedit.c (show_key_with_all_names), keylist.c (list_keyblock_print): Use it here to print validity strings. * gpgv.c: Stub. 2004-11-18 Werner Koch * g10.c (S_IRGRP) [HAVE_DOSISH_SYSTEM]: Define to 0. 2004-11-17 Werner Koch * g10.c (open_info_file): New. (main): Unconditionally implement --status-file, --logger-file, --attribute-file, --passphrase-file, --command-file. This is not generally useful but easy to support and might make scripting under Windows easier. 2004-11-11 Werner Koch * passphrase.c (readn): Fixed test against EINTR. 2004-11-05 Werner Koch * app-openpgp.c: Made more strings translatable. (verify_chv3, do_change_pin): Add a special prefix to the prompt of the Admin PIN prompts. * passphrase.c (ask_passphrase): Add arg TRYAGAIN_TEXT. Changed call callers. * cardglue.c (pin_cb): Make use of the OPAQUE arg to pass arguments to the PIN callback. Use this to implement a way to check for correct PIN repetition. Changed all callers to pass an opaque argument. Improved detection of Admin PIN prompts. 2004-11-04 David Shaw * plaintext.c (handle_plaintext): Don't try and create a zero-length filename when using --use-embedded-filename with input that has no filename (clearsigned or message generated from a pipe). * encode.c (encode_simple, encode_crypt), progress.c (handle_progress), sign.c (write_plaintext_packet): Fix a few inconsistent calls (NULL filename means a pipe here, so don't bother to check it twice). 2004-11-03 David Shaw * misc.c (print_digest_algo_note): The latest 2440bis drafts deprecates MD5, so give a warning. (print_pubkey_algo_note, print_cipher_algo_note, print_digest_algo_note): Give the algorithm name in the experimental algo warning. 2004-11-03 Timo Schulz * passphrase.c (readn, writen): Use w32_strerror instead of just showing the error number. * misc.c [_WIN32]: Fix warning about missing prototypes. 2004-10-28 David Shaw * skclist.c (build_sk_list): Don't need to warn about PGP-generated Elgamal signing keys since we no longer support any Elgamal signing keys. * sign.c (sign_file, clearsign_file): Use "writing to" instead of "writing to file" to match other strings. * pkclist.c (check_signatures_trust): Fix typo. Noted by Moray Allan. This is Debian bug #278708. * passphrase.c (ask_passphrase, passphrase_to_dek): "password" -> "passphrase". * keyedit.c (show_key_with_all_names): Show designated revoker as part of translatable string. 2004-10-28 Werner Koch * Makefile.am (other_libs): New. Also include LIBICONV. Noted by Tim Mooney. 2004-10-28 Werner Koch * apdu.c (open_pcsc_reader): Removed bad free in error handler. 2004-10-27 David Shaw * card-util.c, delkey.c, keygen.c, plaintext.c, keyedit.c, passphrase.c, revoke.c: Collapse the two different "can't do that in batch mode" strings into one. * keylist.c (status_one_subpacket): New. Send the subpacket data to the --status interface. * card-util.c (card_edit): Show when admin is enabled or not. * status.h, status.c: New STATUS_SIG_SUBPACKET type. * build-packet.c (build_sig_subpkt): Multiple keyserver URLs are allowed. * keyring.c: Make some strings translatable. * exec.c, sign.c: Change "can't open file" to "can't open" and "can't create file" to "can't create" to be consistent with other strings so we don't have to translate both. * delkey.c, export.c, keyedit.c, pkclist.c, revoke.c, skclist.c: Fix a few missed possible \"username\" quotes. 2004-10-26 Werner Koch * app-openpgp.c (verify_chv3): The minimum length for CHV3 is 8. Changed string to match the other ones. * passphrase.c (agent_send_all_options): Try to deduce the ttyname from stdin. 2004-10-22 Werner Koch * card-util.c (fetch_url): Disable for gnupg 1.9 (card_generate_subkey): Ditto. (card_store_subkey): Ditto. 2004-10-21 David Shaw * options.h, g10.c (main), mainproc.c (check_sig_and_print): Rename verify-option show-validity to show-uid-validity to match the similar list-option. * app-openpgp.c (verify_chv3): Fix typo. 2004-10-21 Werner Koch * app-common.h (app_openpgp_storekey): Add prototype. * app-openpgp.c (do_sign): Replace asprintf by direct allocation. This avoids problems with missing vasprintf implementations. * card-util.c (generate_card_keys): Add a #warning for gnupg 1.9 and use the same string there. 2004-10-20 David Shaw * g10.c (parse_list_options): Fix non-constant initializer so we can build with C89. 2004-10-17 David Shaw * keylist.c (print_one_subpacket): The flags field should be hex. 2004-10-17 Werner Koch * passphrase.c (agent_get_passphrase): Cast UIDLEN to int. Noted by Christian Cornelssen. 2004-10-16 David Shaw * parse-packet.c (parse_one_sig_subpkt, enum_sig_subpkt): Don't BUG() on unknown subpackets. Rather, just return them silently. 2004-10-15 Werner Koch * status.h (STATUS_NEED_PASSPHRASE_PIN): New. * status.c (get_status_string): Added. * passphrase.c (ask_passphrase): Moved status printing to .. * cardglue.c (pin_cb): .. here and issue new status message. * keyedit.c (sign_uids): Don't include the leading LF in the translatable string but print them separately. * apdu.c (apdu_open_remote_reader) [_WIN32]: We don't have ENOSYS. * app-openpgp.c (parse_login_data): New. (app_select_openpgp): Call it. (do_setattr): Reparse it after change. * pkclist.c (do_edit_ownertrust): Add a note to translators. * keygen.c (ask_user_id): Ditto. * helptext.c: Typo fix. 2004-10-14 David Shaw * keylist.c (list_keyblock_print): Show the fingerprint after the key, not after the first user ID. * keyedit.c (show_key_with_all_names): Don't show validity if we're just printing user IDs for signing. * armor.c (fake_packet): Properly handle the case where the line is dash-space (i.e. a blank line that was quoted). Give a warning for bad dash escaping. 2004-10-14 Werner Koch * export.c (do_export_stream) [ENABLE_SELINUX_HACKS]: Don't allow secret key export. * import.c (import_secret_one) [ENABLE_SELINUX_HACKS]: Likewise * misc.c (is_secured_filename): New. * keydb.c (maybe_create_keyring) * tdbio.c (tdbio_set_dbname) * plaintext.c (handle_plaintext) * openfile.c (copy_options_file, open_outfile) * exec.c (exec_write) * keygen.c (do_generate_keypair, gen_card_key_with_backup) * sign.c (sign_file, clearsign_file) * keyring.c (create_tmp_file, do_copy): Check for secured files before creating them. * keygen.c (print_status_key_created, read_parameter_file): s/unsigned char/byte/ due to a strange typedef for RISC OS. Noted by Stefan. 2004-10-13 David Shaw * armor.c (fake_packet): Allow arbitrary dash-escaped lines as per 2440bis-10. This is bug #158. * keyserver.c (keyserver_work): Handle keyserver timeouts. * pkclist.c (do_edit_ownertrust): Different prompt when we're using direct trust since the meaning is different. * keyedit.c (trustsig_prompt): Change the strings to match the ones in pkclist.c:do_edit_ownertrust to make translation easier. * trustdb.c (trust_model_string, get_validity): Add direct trust model which applies to the key as a whole and not per-uid. * options.h, g10.c (parse_trust_model): New. (main): Call it from here to do string-to-trust-model. 2004-10-13 Werner Koch * tdbdump.c (import_ownertrust): Removed all log_error_f and reworded the messages. * dermor.c: Include i18n.h. Made 2 strings translatable. * misc.c (register_secured_file, is_secured_file) (unregister_secured_file): New. * keyring.c (do_copy, rename_tmp_file): Implement the SELinux hacks. (keyring_register_filename): Ditto. * tdbio.c (open_db): Ditto. * openfile.c (copy_options_file, open_sigfile): Ditto. * verify.c (verify_signatures, verify_one_file): Ditto. * photoid.c (generate_photo_id): Ditto. * keygen.c (read_parameter_file): Ditto. * import.c (import_keys_internal): Ditto. * decrypt.c (decrypt_message, decrypt_messages): Ditto. * dearmor.c (dearmor_file, enarmor_file): Ditto. * g10.c (main, print_mds): Ditto. * exec.c (exec_write, exec_read): Ditto. * card-util.c (change_login): Ditto. * encode.c (encode_simple, encode_crypt): Ditto. * openfile.c (overwrite_filep, make_outfile_name, open_outfile) (open_sigfile): Use iobuf_is_pipe_filename to check for pipes so that special filesnames are taken into account. This is bug 327. * tdbdump.c (import_ownertrust): Ditto. * sign.c (write_plaintext_packet): Ditto. (sign_file, clearsign_file, sign_symencrypt_file): * progress.c (handle_progress): Ditto. * plaintext.c (handle_plaintext): Ditto. (ask_for_detached_datafile, hash_datafiles): * encode.c (encode_simple, encode_crypt): Ditto. 2004-10-12 Werner Koch * keygen.c (read_parameter_file): Changed to use iobuf based file reading to allow the special file name feature to work. * keygen.c (read_parameter_file): New keyword "Handle". This is bug 287. (print_status_key_not_created): New. (print_status_key_created): Add new arg HANDLE. (do_generate_keypair): Print not created status. * status.c, tatus.h (STATUS_KEY_NOT_CREATED): New. 2004-10-11 David Shaw * pkclist.c (do_edit_ownertrust): Use the same translated string for showing the user ID as mainproc.c:print_pkenc_list. * mainproc.c (print_pkenc_list): Allow translating the quotes around the user ID. * card-util.c, g10.c, photoid.c, trustdb.c: The last of the \"%s\" -> `%s' quoting for things that aren't user IDs. * keyserver.c (keyserver_spawn): If there is no keyserver host, print the whole URI since it is self-contained. 2004-10-11 Werner Koch * keyserver.c (keyserver_spawn): Print an empty string in log_info if the host is not set (e.g. finger). 2004-10-10 David Shaw * card-util.c, keyedit.c, openfile.c, pkclist.c, delkey.c, keygen.c, photoid.c, revoke.c: Some yes-or-no prompts end in "(y/n)". Some don't. Consistently use y/n everywhere. * keygen.c (ask_key_flags): New. (ask_algo): Call it here in --expert mode so we don't need to specify each possible variation of RSA capabilities. * keygen.c (do_add_key_flags): The spec says that all primary keys MUST be able to certify. Force the certify flag on for primaries (and off for subkeys). * keygen.c (generate_keypair): Fix generating keys with the auth flag. 2004-10-08 David Shaw * encr-data.c (decrypt_data): Give a warning with a weak key, but still allow to decrypt the message. 2004-10-07 David Shaw * pkclist.c (build_pk_list): Keystrify. * mainproc.c (check_sig_and_print), pkclist.c (do_edit_ownertrust): Improve translatability of user ID prompts. 2004-10-06 David Shaw * helptext.c, pkclist.c (do_we_trust): It is not possible to get here with a revoked or expired key, so BUG() that case. Remove question about overriding revoked/expired. Also --keyid-format-ify. (do_we_trust_pre): Use print_pubkey_info() instead of printing the info ourselves. * passphrase.c (passphrase_to_dek): Improve translatability of user ID prompts. * keylist.c (print_pubkey_info): Use the user ID the pk was selected by, if any. * keyedit.c (sign_uids, ask_revoke_sig): Improve translatability of user ID prompts. (ask_revoke_sig, menu_revsig): Try and use common strings for these two functions so they don't need to be translated twice. * keyedit.c, keylist.c, keyserver.c, mainproc.c: The revoked/expired/expires string change of 2004-09-29 was too simple. Use two styles for each tag. 2004-10-06 Werner Koch * ccid-driver.c (ccid_open_reader): Store the vendor ID. (ccid_transceive_secure): New. (parse_ccid_descriptor): Workaround for an SCM reader problem. (send_escape_cmd): New. 2004-10-05 David Shaw * passphrase.c (agent_get_passphrase): Use keystrs for agent strings, and fix sprintf warnings. * keyserver.c (keyserver_spawn): Fix BUG() with certain sets of mixed regular and preferred keyserver refreshes. Noted by Sebastian Wiesinger. * keyedit.c (show_key_with_all_names): Show uid validity in menu. 2004-10-03 Timo Schulz * apdu.c (apdu_open_remote_reader) [_WIN32]: Do not set ENOSYS. 2004-10-03 David Shaw * keyedit.c (print_and_check_one_sig_colon): Fix bad keyids in colon delsig output. Noted by Peter Palfrader. (show_prefs): Do not reference missing selfsig. Noted by Alex Moroz. 2004-10-01 Werner Koch * gpgv.c (i18n_init): Always use LC_ALL. 2004-09-30 Werner Koch * app-openpgp.c (verify_chv3) [GNUPG_MAJOR_VERSION!=1]: Typo fix. 2004-09-30 David Shaw * gpgv.c, keydb.c (keydb_add_resource): Factored keyring creation out to .. (maybe_create_keyring): .. new. Make sure that we do the checks in a locked state. Problem reported by Stefan Haller. Try to create the home directory before acquiring a lock for the keyring. From Werner on stable branch. * g10.c (main): Blow up if we didn't lose setuid. From Werner on stable branch. 2004-09-29 David Shaw * keyedit.c, keylist.c, keyserver.c, mainproc.c: Reduce the many variations of "revoked" ("revoked", "[revoked]", " [revoked]", "[revoked] ") "and" expired down to two to simplify translation. 2004-09-28 David Shaw * keyedit.c (print_and_check_one_sig): Account for the extra space that show-sig-expire takes up so we do not wrap lines. (show_key_with_all_names): No need to show subkey revocations as a seperate line since we now show revocation date in the main subkey line. * signal.c (got_fatal_signal): HAVE_DECL_SYS_SIGLIST is defined, but zero if not found. Noted by John Clizbe. * keyserver.c (parse_keyrec): Fix problem with non-expiring keys appearing expired in --search-keys results. 2004-09-27 Werner Koch * card-util.c (card_edit): Take admin only status from the table. * app-openpgp.c: Made all strings translatable. (verify_chv3) [GNUPG_MAJOR_VERSION]: Make opt.allow_admin available for use in gnupg 2. (verify_chv3): Reimplemented countdown showing to use only functions from this module. Flush the CVH status cache on a successful read. (get_one_do): Hack to bypass the cache for cards versions > 1.0. (store_fpr): Store the creation date for card version > 1.0. 2004-09-25 David Shaw * main.h, g10.c (main), card-util.c (change_pin): If "admin" has not been issued, skip right to the CHV1/CHV2 PIN change. No need to show the unblock or admin PIN change option. (card_edit): Add "admin" command to add admin commands to the menu. Do not allow admin commands until "admin" is given. * app-openpgp.c (verify_chv3): Show a countdown of how many wrong admin PINs can be entered before the card is locked. * options.h, g10.c (main), app-openpgp.c (verify_chv3): Remove --allow-admin. 2004-09-24 David Shaw * main.h: Create S2K_DIGEST_ALGO macro so we do not need to always set opt.s2k_digest_algo. This helps fix a problem with PGP 2.x encrypted symmetric messages. Change all callers (encode.c, g10.c, keyedit.c, keygen.c, passphrase.c, sign.c). * armor.c, cardglue.c, getkey.c, import.c, keygen.c: Be consistent in some more quoted strings. Always use 'user ID', not 'user id', "quotes" for user IDs, etc. * keyedit.c (keyedit_menu), gpgv.c (agent_scd_getattr (stub)), keygen.c (copy_mpi, generate_raw_key): Fix a compile problem and a few warnings when building without card support. 2004-09-23 Werner Koch * card_util.c (generate_card_keys): ask whether backup should be created. (card_store_subkey): Factored some code out to .. * keygen.c (save_unprotected_key_to_card): .. new function. (gen_card_key_with_backup): New. (generate_raw_key): New. (generate_keypair): New arg BACKUP_ENCRYPTION_DIR. Changed all callers. (do_generate_keypair): Divert to gen_card_key_with_backup when desired. * apdu.c (open_pcsc_reader): Do not print empty reader string. * keygen.c (ask_algo): Allow creation of AUTH keys. * keyid.c (usagestr_from_pk): New. * app-openpgp.c (app_openpgp_storekey): Call flush_cache. (get_cached_data): Move local data initialization to .. (app_select_openpgp): .. here. Read some flags for later use. (do_getattr): New read-only attribute EXTCAP. * keyedit.c (keyedit_menu): New command "keytocard" (keyedit_menu): Bad hack for the not_with_sk element. (show_key_with_all_names): Print the usage. (find_pk_from_sknode): New. * card-util.c (card_store_subkey): New. (copy_mpi): New. * cardglue.c (agent_openpgp_storekey): New. 2004-09-22 Werner Koch * card-util.c (card_generate_subkey, generate_card_keys): Factored common code out to ... (get_info_for_key_operation, check_pin_for_key_operation) (restore_forced_chv1, replace_existing_key_p) (show_card_key_info): ... new functions. 2004-09-21 David Shaw * mainproc.c (check_sig_and_print), keyedit.c (show_prefs, menu_set_keyserver_url): Make sure that keyserver URLs with control characters inside are printed properly. In fact, handle them as UTF8. * keyedit.c (keyedit_menu): Don't show "addcardkey" in the menu if we do not have card support. * keydb.h, keyserver.c (print_keyrec, keyserver_spawn): fpr is an array of unsigned bytes. 2004-09-20 Werner Koch * g10.c: Make -K an alias for --list-secret-keys. * keylist.c (print_card_serialno): New. Taken from gnupg 1.9.11. (list_keyblock_print): Make use of it. * keyedit.c (show_key_with_all_names): Print the card S/N. * keyedit.c (keyedit_menu): New command ADDCARDKEY. * card-util.c (card_generate_subkey): New. * keygen.c (generate_card_subkeypair): New. (gen_card_key): New arg IS_PRIMARY; changed all callers. * cardglue.c (open_card): Use shutdown code if possible. (check_card_serialno): Ditto. * ccid-driver.c (do_close_reader): Factored some code out from ... (ccid_close_reader): ..here. (ccid_shutdown_reader): New. * apdu.c (apdu_shutdown_reader): New. (shutdown_ccid_reader): New. 2004-09-17 Werner Koch * g10.c (list_config): New config option ccid-reader-id. (gpgconf_list): Add "reader-port". * apdu.c (open_ccid_reader): New arg PORTSTR. Pass it to ccid_open_reader. (apdu_open_reader): Pass portstr to open_ccid_reader. (apdu_open_reader): No fallback if a full CCID reader id has been given. * ccid-driver.c (ccid_get_reader_list): New. (ccid_open_reader): Changed API to take a string for the reader. Removed al the cruft for the libusb development vesion which seems not to be maintained anymore and there are no packages anyway. The stable library works just fine. (struct ccid_reader_id_s): Deleted and replaced everywhere by a simple string. (usb_get_string_simple): Removed. (bulk_in): Do valgrind hack here and not just everywhere. 2004-09-16 David Shaw * keyedit.c (show_key_with_all_names, show_prefs): Show preferred keyserver(s) in "showpref" output. * keygen.c (keygen_add_keyserver_url), keyedit.c (menu_set_keyserver_url): Allow setting a keyserver URL of "none" to remove an existing keyserver URL. * keyedit.c (menu_set_keyserver_url): Confirm replacement of a keyserver URL before overwriting the old one. 2004-09-15 David Shaw * gpgv.c (agent_scd_getattr): Stub. * misc.c (get_signature_count): New. Get the signature count from a smartcard. (pct_expando): Call it here so the %c expando becomes the number of signatures issued. This allows for notations or the like with an automatic signature count. * ccid-driver.c (usb_get_string_simple): Replacement function to work with older libusb. 2004-09-15 Werner Koch * g10.c [HAVE_LIBUSB]: New option --debug-ccid-driver. * ccid-driver.c (read_device_info): Removed. (make_reader_id, scan_or_find_devices): New. (ccid_open_reader): Simplified by make use of the new functions. (ccid_set_debug_level): New. Changed the macros to make use of it. It has turned out that it is often useful to enable debugging at runtime so I added this option. 2004-09-13 David Shaw * getkey.c (premerge_public_with_secret): Fix subkey<->binding sig mismatch when some secret subkeys are missing. Discovered by Michael Roth. * main.h, keylist.c (print_subpackets_colon): Make a public function. * keyedit.c (print_and_check_one_sig_colon): New. Print a with-colons version of the sig record. (menu_delsig): Call it here for a with-colons delsig. 2004-09-12 David Shaw * options.h, keylist.c (print_one_subpacket, print_subpackets_colon): Print a spk record for each request subpacket. (list_keyblock_colon): Call them here. * g10.c (parse_subpacket_list, parse_list_options): New. Make the list of subpackets we are going to print. (main): Call them here. 2004-09-11 David Shaw * card-util.c (fetch_url, card_edit): Use the pubkey URL stored on the card to fetch an updated copy. Works with either straight URLs or HKP or LDAP keyservers. * keyserver-internal.h, keyserver.c (keyserver_import_fprint), import.c (revocation_present): Use a keyserver_spec so the caller can pass in whatever keyserver they like. 2004-09-10 David Shaw * app-openpgp.c (get_cached_data): Avoid mallocing zero since it breaks us when using --enable-m-guard. * ccid-driver.c (read_device_info): Fix segfault when usb device is not accessible. (ccid_open_reader): Allow working with an even older version of libusb (usb_busses global instead of usb_get_busses()). 2004-09-09 Werner Koch * cardglue.h: Add members for CA fingerprints. * cardglue.c (agent_release_card_info): Invalid them. (learn_status_cb): Store them. * app-common.h, app-openpgp.c, iso7816.c, iso7816.h * apdu.c, apdu.h, ccid-driver.c, ccid-driver.h * card-util.c: Updated from current gnupg-1.9. Changes are: * ccid-driver.h (CCID_DRIVER_ERR_ABORTED): New. * ccid-driver.c (ccid_open_reader): Support the stable 0.1 version of libusb. (ccid_get_atr): Handle short messages. * apdu.c (my_rapdu_get_status): Implemented. * apdu.c: Include . * apdu.c (reader_table_s): Add function pointers for the backends. (apdu_close_reader, apdu_get_status, apdu_activate) (send_apdu): Make use of them. (new_reader_slot): Intialize them to NULL. (dump_ccid_reader_status, ct_dump_reader_status): New. (dump_pcsc_reader_status): New. (open_ct_reader, open_pcsc_reader, open_ccid_reader) (open_osc_reader, open_rapdu_reader): Intialize function pointers. (ct_activate_card, ct_send_apdu, pcsc_send_apdu, osc_send_apdu) (error_string): Removed. Replaced by apdu_strerror. (get_ccid_error_string): Removed. (ct_activate_card): Remove the unused loop. (reset_ct_reader): Implemented. (ct_send_apdu): Activate the card if not yet done. (pcsc_send_apdu): Ditto. * ccid-driver.h: Add error codes. * ccid-driver.c: Implement more or less proper error codes all over the place. * apdu.c (apdu_send_direct): New. (get_ccid_error_string): Add some error code mappings. (send_apdu): Pass error codes along for drivers already supporting them. (host_sw_string): New. (get_ccid_error_string): Use above. (send_apdu_ccid): Reset the reader if it has not yet been done. (open_ccid_reader): Don't care if the ATR can't be read. (apdu_activate_card): New. (apdu_strerror): New. (dump_reader_status): Only enable it with opt.VERBOSE. * iso7816.c (map_sw): Add mappings for the new error codes. * apdu.c (open_ct_reader, open_pcsc_reader, open_ccid_reader) (reset_ccid_reader, open_osc_reader): Call dump_reader_status only in verbose mode. * app-openpgp.c (do_getattr): Fix for sending CA-FPR. * app-openpgp.c (app_openpgp_readkey): Fixed check for valid exponent. * app-openpgp.c (do_setattr): Sync FORCE_CHV1. * card-util.c (change_login): Kludge to allow reading data from a file. (card_edit): Pass ARG_STRING to change_login. (card_status): Print CA fingerprints. (change_cafpr): New. (card_edit): New command CAFPR. 2004-04-30 Werner Koch * g10.c (main) : Use gpg.conf and not /dev/null as default filename. 2004-04-28 Werner Koch * card-util.c (card_edit): Remove PIN verification. (generate_card_keys): New arg SERIALNO. Do PIN verification here after resetting forced_chv1. 2004-09-09 Werner Koch * signal.c (got_fatal_signal): Do readline cleanup. Print signal number if we can't print the name. Use new autoconf macro HAVE_DECL_SYS_SIGLIST. (get_signal_name): Removed. * photoid.c: Include ttyio.h. * parse-packet.c (skip_rest): Removed. Changed all callers to use the new iobuf_skip_reset. Orginal patch by Florian Weimer. 2004-09-07 Werner Koch * photoid.c (generate_photo_id): Use tty_printf and not just printf. Put _() around one string. 2004-09-03 David Shaw * keyserver.c (parse_keyrec): Force the 'e'xpired flag on as soon as we know the key is definitely expired. Some translatable string cleanup. 2004-08-27 David Shaw * encode.c, exec.c, g10.c, sign.c: Some translatable string cleanup. Change some "this" to `this'. 2004-08-23 David Shaw * keyserver.c (keyserver_spawn): Show log line for what keyserver action we are taking. * keyid.c (keystr): If printing a keyid that lacks the high 4 bytes, print the low 4 alone. (keystr_from_desc): Handle short keyids and warn on v3 fingerprints. * keydb.h, getkey.c (get_user_id_printable, get_user_id_string_printable): Rename to get_user_id_native and get_user_id_string_native and remove the printable stuff since we're print-ifying valid utf8 characters. Change all callers in import.c, sign.c, keylist.c, and encode.c. * keyserver.c (keyserver_search_prompt): Make sure the search string is converted from UTF-8 before display. 2004-08-19 Werner Koch * seskey.c (encode_session_key): Changed the zero random byte substituting code to actually do clever things. Thanks to Matthias Urlichs for noting the implementation problem. 2004-08-18 Marcus Brinkmann * passphrase.c (agent_get_passphrase): Fix detection of gpg-agent cancellation. 2004-08-08 David Shaw * plaintext.c (handle_plaintext): Bigger buffer for extra safety. * g10.c (main): New alias --throw-keyid for --throw-keyids, so that it continues to work in old configuration files. Noted by Jens Adam. * pkclist.c (algo_available): --pgp8 now allows blowfish, zlib, and bzip2. * status.c (do_get_from_fd): Flush stdout if status isn't flushing it for us. This guarantees that any menus that were displayed before the prompt don't get stuck in a buffer. Noted by Peter Palfrader. This is Debian bug #254072. * sign.c (update_keysig_packet): Revert change of 2004-05-18. It is not appropriate to strip policy and notations when remaking a sig. That should only happen when specifically requested by the user. 2004-08-05 David Shaw * armor.c (radix64_read): No armor CRC is legal according to the spec (the CRC is a MAY). 2004-07-28 David Shaw * misc.c (argsplit): Properly split quoted args from the keyword and trim whitespace afterwards. 2004-07-27 David Shaw * misc.c (optsep): Add the ability to understand keyword="quoted arg with spaces" type options. 2004-07-16 David Shaw * keylist.c (list_keyblock_print): Always use the new listing format where uids are always on a line for themselves. Mark expired secret keys as expired. * options.h, g10.c (main): Rename list show-validity to show-uid-validity as it only shows for uids. * armor.c (armor_filter): Do not use padding to get us to 8 bytes of header. Rather, use 2+4 as two different chunks. This avoids a fake filename of "is". 2004-07-15 David Shaw * keyedit.c (sign_uids): Properly handle remaking a self-sig on revoked or expired user IDs. Also, once we've established that a given uid cannot or will not be signed, don't continue to ask about each sig. * mainproc.c (proc_symkey_enc), seckey-cert.c (do_check): Check the S2K hash algorithm before we try to generate a passphrase using it. This prevents hitting BUG() when generating a passphrase using a hash that we don't have. * sign.c (sign_symencrypt_file): Allow using --force-mdc in --sign --symmetric messages. * g10.c (main): Alias --charset as --display-charset to help avoid the continuing confusion and make room for possible changes in devel. * parse-packet.c (parse_plaintext): Show the hex value for the literal packet mode since it may not be printable. * keygen.c (make_backsig): Make sure that the backsig was built successfully before we try and use it. * status.h, status.c (get_status_string), plaintext.c (handle_plaintext): New status tags PLAINTEXT and PLAINTEXT_LENGTH. 2004-06-16 Werner Koch * free-packet.c (copy_secret_key): Get last fix right. 2004-06-16 Werner Koch * free-packet.c (copy_secret_key): Fixed memory leak when D is not NULL. * passphrase.c (passphrase_to_dek): Added a few comments to the code. 2004-05-26 David Shaw * keyserver.c (keyserver_refresh): Keep track of keys already fetched so we don't do a regular keyserver fetch if the preferred keyserver fetch has exhausted the list. 2004-05-23 David Shaw * verify.c (verify_signatures): Verify multiple files in the same order in which we hashed them when issuing the signature. Noted by Nicholas Cole. * pkclist.c (do_edit_ownertrust): Fix a kbnode leak and do another keyid-format conversion. 2004-05-22 Werner Koch * trustdb.c (check_regexp): s/EXP/EXPR/. * keyedit.c (trustsig_prompt): Remoev useless range check. * options.h: Renamed ctrl to glo_ctrl. Changed all users. * ccid-driver.c (ccid_open_reader): Print a warning when CCID can't be used. 2004-05-21 David Shaw * mainproc.c (check_sig_and_print): If we're honoring preferred keyservers, and auto-key-retrieve is set, try and get a missing key from the preferred keyserver subpacket when we verify the sig. * gpgv.c (parse_preferred_keyserver, free_keyserver_spec): Stubs. * keyserver.c (keyidlist): Use new parse_preferred_keyserver function. (keyserver_work): Use the passed-in keyserver spec rather than the options global one. * keyserver-internal.h, keyserver.c (parse_preferred_keyserver): New function to take a sig and return a split out keyserver_spec. (keyserver_import_keyid): Now takes a keyserver_spec. * keyserver.c (keyidlist): Go back to the old fast keyid lister. Only merge selfsigs if we have to for honor-keyserver-url. (keyserver_refresh): Keyserver URL handler moved here. (calculate_keyid_fpr): Removed. * keydb.h, keyid.c (keystr_from_desc): Calculate a key string from a KEYDB_SEARCH_DESC. * keyserver.c (keyserver_spawn): Fix keyserver options on tempfile only platforms. Noted by Roger Sondermann. 2004-05-20 David Shaw * keyserver.c (keyserver_work): Allow --refresh-keys with a preferred keyserver to happen even if there is no global keyserver set. * sig-check.c (do_check_messages): No need to check for Elgamal signatures any longer. (do_check_messages, do_check, check_key_signature2): --keyid-format conversion. * pkclist.c (show_paths, edit_ownertrust): Remove some unused code. * options.h (ctrl): New for member IN_AUTO_KEY_RETRIEVE. * mainproc.c (check_sig_and_print): track whether we are retrieving a key. * status.c (status_currently_allowed): New. (write_status_text, write_status_text_and_buffer): Use it here. * g10.c: New command --gpgconf-list. (gpgconf_list): New. From Werner on stable branch. 2004-05-19 David Shaw * pubkey-enc.c (get_session_key, get_it), keyedit.c (show_key_with_all_names, show_basic_key_info): --keyid-format conversion. 2004-05-18 David Shaw * sign.c (update_keysig_packet): Policies and notations should be stripped out when remaking a self-signature. Noted by Atom Smasher. * keyserver.c (parse_keyserver_uri): Fix compiler warnings. 2004-05-11 David Shaw * options.h, keyserver-internal.h, keyserver.c (parse_keyserver_uri): Improved URI parser that keeps track of the path information and doesn't modify the input string. (keyserver_spawn): Tell keyserver plugins about the path. 2004-05-11 Werner Koch * keylist.c (show_policy_url, show_keyserver_url, show_notation) (list_one): Use const char* for i18n string helpers. * keygen.c (do_generate_keypair, read_parameter_file): Really close the files. (do_generate_keypair): Create the secret key file using safe permissions. Noted by Atom Smasher. 2004-05-10 David Shaw * options.h, mainproc.c (symkey_decrypt_seskey), keyserver.c (struct keyrec, parse_keyrec, keyserver_search_prompt), keyedit.c (keyedit_menu), g10.c (add_keyserver_url, add_policy_url): Fix some compiler warnings. 2004-05-08 David Shaw * keyedit.c (keyedit_menu, menu_set_keyserver_url): Allow passing preferred keyserver on "keyserver" command line. Sanity check keyserver URL before accepting it. * keyserver-internal.h, g10.c (main), keyserver.c (parse_keyserver_uri): Add an option to require the scheme:// and change all callers. (free_keyserver_spec): Make public. 2004-05-07 Werner Koch * sign.c (write_plaintext_packet): Fixed the detection of too large files in the same way as in encode.c. 2004-05-04 David Shaw * keylist.c (show_notation): Use bits to select which sort of notation to show. Don't allow a not-shown notation to prevent us from issuing the proper --status-fd message. * options.h, g10.c (main): Add show-std/standard-notations and show-user-notations. show-notations is both. Default is to show standard notations only during verify. Change all callers. 2004-04-28 David Shaw * main.h, keylist.c (show_notation): Add argument to show only user notations, only standard notations, or both. Change all callers. * keyserver.c (keyserver_spawn): We still need EXEC_TEMPFILE_ONLY. 2004-04-28 Werner Koch * card-util.c (card_edit): Require PIN only for generate. * app-openpgp.c (do_setattr): Sync FORCE_CHV1. 2004-04-27 Werner Koch * keyserver.c (keyserver_spawn) [EXEC_TEMPFILE_ONLY]: Removed setting use_temp_file because this option has been removed. * g10.c: New commands --allow-admin and --deny-admin. * options.h (opt): Add member ALLOW_ADMIN. * tlv.h, tlv.c: New. Copied from gnupg-1.9. * cardglue.c (open_card): The serialno is now set internally by app_select_openpgp; changed invocation. * cardglue.h (app_t, ctrl_t): New. (GPG_ERR_EBUSY, GPG_ERR_ENOENT, GPG_ERR_NOT_FOUND, GPG_ERR_BUG) (GPG_ERR_NOT_IMPLEMENTED, GPG_ERR_EACCESS): New. (gpg_err_code_from_errno): New. * app-common.h, app-openpgp.c, iso7816.c, iso7816.h * apdu.c, apdu.h, ccid-driver.c, ccid-driver.h * card-util.c: Updated from current gnupg-1.9. Changes are: * app-common.h: New members FNC.DEINIT and APP_LOCAL. * app-openpgp.c (do_deinit): New. (get_cached_data, flush_cache_item, flush_cache_after_error) (flush_cache): New. (get_one_do): Replaced arg SLOT by APP. Make used of cached data. (verify_chv2, verify_chv3): Flush some cache item after error. (do_change_pin): Ditto. (do_sign): Ditto. (do_setattr): Flush cache item. (do_genkey): Flush the entire cache. (compare_fingerprint): Use cached data. * apdu.c (apdu_send_le): Reinitialize RESULTLEN. Handle SW_EOF_REACHED like SW_SUCCESS. * ccid-driver.c (parse_ccid_descriptor): Store some of the reader features away. New arg HANDLE (read_device_info): New arg HANDLE. Changed caller. (bulk_in): Handle time extension requests. (ccid_get_atr): Setup parameters and the IFSD. (compute_edc): New. Factored out code. (ccid_transceive): Use default NADs when required. * apdu.h: New pseudo stati SW_HOST_NOT_SUPPORTED, SW_HOST_LOCKING_FAILED and SW_HOST_BUSY. * iso7816.c (map_sw): Map it. * ccid-driver.c (ccid_slot_status): Add arg STATUSBITS. * apdu.c (apdu_get_status): New. (ct_get_status, pcsc_get_status, ocsc_get_status): New stubs. (get_status_ccid): New. (apdu_reset): New. (reset_ct_reader, reset_pcsc_reader, reset_osc_reader): New stubs. (reset_ccid_reader): New. (apdu_enum_reader): New. * apdu.c (lock_slot, trylock_slot, unlock_slot): New helpers. (new_reader_slot) [USE_GNU_PTH]: Init mutex. (apdu_reset, apdu_get_status, apdu_send_le): Run functions in locked mode. 2004-04-25 David Shaw * getkey.c (get_seckey_byname2): Significantly simplify this function by using key_byname to do the heavy lifting. Note that this also fixes an old problem when the first key on the secret keyring has an unusable stub primary, but is still chosen. * getkey.c (key_byname): If namelist is NULL, return the first key in the keyring. 2004-04-22 David Shaw * keygen.c (make_backsig): If DO_BACKSIGS is not defined, do not create backsigs. * getkey.c (merge_selfsigs_subkey): Find 0x19 backsigs on subkey selfsigs and verify they are valid. If DO_BACKSIGS is not defined, fake this as always valid. * packet.h, parse-packet.c (parse_signature): Make parse_signature non-static so we can parse 0x19s in self-sigs. * main.h, sig-check.c (check_backsig): Check a 0x19 signature. (signature_check2): Give a backsig warning if there is no or a bad 0x19 with signatures from a subkey. 2004-04-21 David Shaw * parse-packet.c (dump_sig_subpkt, parse_one_sig_subpkt, can_handle_critical): Parse and display 0x19 signatures. 2004-04-20 David Shaw * keyserver.c (parse_keyserver_uri): Do not accept "http" as an alias for "hkp". They are not the same thing. 2004-04-19 David Shaw * options.h, g10.c (main): Add keyserver-option honor-keyserver-url. parse_keyserver_options now returns a success code. * keyserver.c (parse_keyserver_options): Return error on failure to parse. Currently there is no way to fail as any unrecognized options get saved to be sent to the keyserver plugins later. Check length of keyserver option tokens since with =arguments we must only match the prefix. (free_keyserver_spec): Moved code from parse_keyserver_url. (keyserver_work, keyserver_spawn): Pass in a struct keyserver_spec rather than using the global keyserver option. (calculate_keyid_fpr): New. Fills in a KEYDB_SEARCH_DESC for a key. (keyidlist): New implementation using get_pubkey_bynames rather than searching the keydb directly. If honor-keyserver-url is set, make up a keyserver_spec and try and fetch that key directly. Do not include it in the returned keyidlist in that case. 2004-04-16 David Shaw * plaintext.c (handle_plaintext): Accept 'u' as a plaintext mode that requires end of line conversion. This is being considered for a UTF8 text packet. If this doesn't take place, no major harm done. If it does take place, we'll get a jump on starting the changeover. * g10.c (main): --no-use-embedded-filename. * build-packet.c (calc_plaintext, do_plaintext): Do not create illegal (packet header indicates a size larger than the actual packet) encrypted data packets when not compressing and using a filename longer than 255 characters. * keyedit.c (no_primary_warning): Cleanup. (menu_expire): Don't give primary warning for subkey expiration changes. These cannot reorder primaries. * keygen.c (gen_elg, gen_dsa, gen_rsa, do_create, do_generate_keypair, generate_subkeypair): New is_subkey argument to set whether a generated key is a subkey. Do not overload the ret_sk. This is some early cleanup to do backsigs for signing subkeys. * keygen.c (write_keybinding, do_generate_keypair, generate_subkeypair): Keep track of the unprotected subkey secret key so we can make a backsig with it. * keygen.c (make_backsig): New function to add a backsig to a binding sig of signing subkeys. Currently disabled. (write_keybinding): Call it here, for signing subkeys only. * sign.c (make_keysig_packet): Allow generating 0x19 signatures (same as 0x18 or 0x28, but used for backsigs). * packet.h, build-packet.c (build_sig_subpkt): Add new SIGSUBPKT_SIGNATURE type for embedded signatures. * main.h, misc.c (optsep, argsplit, optlen, parse_options): Simplify code and properly handle a partial match against an option with an argument. * keyserver-internal.h, keyserver.c (parse_keyserver_options): Use new optsep and argsplit functions. 2004-04-15 David Shaw * main.h, misc.c (argsplit): Refactor argsep into argsplit and argsep so they can be called separately. * options.h, keyserver.c (parse_keyserver_options): Remove duplicate code from parse_keyserver_options by calling the generic parse_options. * keyserver.c (keyserver_spawn, keyserver_refresh), g10.c (main), gpgv.c (main), mainproc.c (check_sig_and_print), import.c (revocation_present): Change all callers. 2004-04-14 David Shaw * packet.h, getkey.c (fixup_uidnode, merge_selfsigs_subkey): Keep track of which self-sig we actually chose. * keyedit.c (menu_expire, menu_set_primary_uid, menu_set_preferences): Use it here to avoid updating non-used self-sigs and possibly promoting an old self-sig into consideration again. * options.h, import.c, keyserver-internal.h, g10.c, mainproc.c, keyserver.c (parse_keyserver_uri): Parse keyserver URI into a structure. Cleanup for new "guess my keyserver" functionality, as well as refreshing via a preferred keyserver subpacket. * options.h: Encapsulate keyserver details. Change all callers. 2004-04-05 Werner Koch * status.h (STATUS_NEWSIG): New. * status.c (get_status_string): Add it. 2004-03-27 David Shaw * keyedit.c (keyedit_menu): Request a trustdb update when adding a new user ID so the new ID gets validity set. Reported by Owen Taylor. 2004-03-25 David Shaw * options.h, g10.c (main), compress-bz2.c (init_uncompress): Rename --bzip2-compress-lowmem to --bzip2-decompress-lowmem since it applies to decompression, not compression. 2004-03-24 David Shaw * keyedit.c (sign_uids, show_key_and_fingerprint, ask_revoke_sig, menu_revsig, menu_showphoto): --keyid-format conversion. (menu_addrevoker): Use print_pubkey_info() rather than duplicating code. 2004-03-19 David Shaw * trustdb.c (update_min_ownertrust, validate_keys): Do not use keystr functions in log_debug. * import.c (import_one): Try and collapse user IDs when importing a key for the first time. * keyedit.c (menu_addrevoker): Allow appointing a subkey as a designated revoker if the user forces it via keyid!, so long as the subkey can certify. Also use the proper date string when prompting for confirmation. * g10.c (main): Maintain ordering of multiple Comment lines. Requested by Peter Hyman. 2004-03-17 David Shaw * mainproc.c (proc_pubkey_enc, print_pkenc_list, list_node): --keyid-format conversion. 2004-03-16 David Shaw * getkey.c (skip_unusable, merge_selfsigs_main, premerge_public_with_secret, lookup, get_user_id_string): --keyid-format conversion. 2004-03-15 David Shaw * trustdb.c (add_utk, verify_own_keys, update_min_ownertrust, get_validity, ask_ownertrust, validate_keys): --keyid-format conversion. * import.c (check_prefs_warning, check_prefs): --keyid-format conversion and a little better text. (import_one, import_secret_one, import_revoke_cert, chk_self_sigs, delete_inv_parts, merge_blocks): Still more --keyid-format conversions. 2004-03-06 David Shaw * keylist.c (print_seckey_info, print_pubkey_info): --keyid-format conversion. (list_keyblock_print): 0xshort should not push us into the new list format since it is not much longer than regular 8-character short keyids. * keydb.h, keyid.c (keystr_from_pk, keystr_from_sk): New functions to pull a key string from a key in one step. This isn't faster than before, but makes for neater code. * keylist.c (list_keyblock_print): Use keystr_from_xx here. (print_key_data): No need to pass a keyid in. 2004-03-05 David Shaw * keyid.c (keyid_from_sk): Minor performance boost by caching secret key keyids so we don't have to calculate them each time. * getkey.c (merge_selfsigs_subkey): Do not mark subkeys valid if we do not support their pk algorithm. This allows for early (during get_*) rejection of a subkey, and selection of another. * passphrase.c (passphrase_to_dek): Give a little more information when we have room to do so. 2004-03-04 David Shaw * revoke.c (export_minimal_pk), export.c (do_export_stream), passphrase.c (passphrase_to_dek), keyserver.c (print_keyrec): A few more places to use --keyid-format. * options.h, g10.c (main), export.c (parse_export_options, do_export_stream): Remove --export-all and the "include-non-rfc" export-option as they are no longer meaningful with the removal of v3 Elgamal keys. * armor.c (fake_packet, armor_filter): Use the 2440 partial length encoding for the faked plaintext packet. 2004-03-03 David Shaw * options.h, g10.c (main), mainproc.c (check_sig_and_print): Remove verify-option show-long-keyids and replace with the more general keyid-format. * build-packet.c (write_header2): Remove call to start old gpg partial length mode and change all callers. (do_plaintext): Turn off partial length encoding now that we're done writing the packet. (do_comment, do_user_id): Try for a headerlen of 2 since that's the smallest and most likely encoding for these packets. * parse-packet.c (parse): Remove call to start old gpg partial length mode. 2004-03-02 David Shaw * options.h, g10.c (main): Add a more flexible --keyid-format option to replace the list-option (and eventually verify-option) show-long-keyids. The format can be short, long, 0xshort, and 0xlong. * keydb.h, keyid.c (keystr, keystrlen): New functions to generate a printable keyid. * keyedit.c (print_and_check_one_sig, show_key_with_all_names), keylist.c (list_keyblock_print): Use new keystr() function here to print keyids. * packet.h, free-packet.c (free_encrypted, free_plaintext), parse-packet.c (copy_packet, skip_packet, skip_rest, read_rest, parse_plaintext, parse_encrypted, parse_gpg_control): Use a flag to indicate partial or indeterminate encoding. This is the first step in some minor surgery to remove the old gpg partial length encoding. 2004-03-01 David Shaw * parse-packet.c (parse): Only data-type packets are allowed to use OpenPGP partial length encoding. 2004-02-25 David Shaw * delkey.c (do_delete_key): Allow deleting a public key with a secret present if --expert is set. * plaintext.c (handle_plaintext): Make bytecount static so it works with multiple literal packets inside a message. * encode.c, helptext.c (keygen.algo, keygen.algo.elg_se), keygen.c (ask_algo), sig-check.c (do_check_messages), skclist.c (build_sk_list): Rename "ElGamal" to "Elgamal" as that is the proper spelling nowadays. Suggested by Jon Callas. 2004-02-24 David Shaw * plaintext.c: Copyright. * encode.c (encode_simple): Show cipher with --verbose. * options.h, g10.c (main), keyedit.c (sign_keys): Add --ask-cert-level option to enable cert level prompts during sigs. Defaults to on. Simplify --default-cert-check-level to --default-cert-level. If ask-cert-level is off, or batch is on, use the default-cert-level as the cert level. * options.h, g10.c (main), trustdb.c (mark_usable_uid_certs): Simplify --min-cert-check-level to --min-cert-level. 2004-02-22 David Shaw * options.h, g10.c (main), trustdb.c (mark_usable_uid_certs): Add --min-cert-check-level option to specify minimum cert check level. Defaults to 2 (so 0x11 sigs are ignored). 0x10 sigs cannot be ignored. 2004-02-21 David Shaw * plaintext.c (handle_plaintext): Properly handle a --max-output of zero (do not limit output at all). * keyserver.c (keyserver_spawn): Use the full 64-bit keyid in the INFO header lines, and include "sig:" records for the benefit of people who store their keys in LDAP servers. It makes it easy to do queries for things like "all keys signed by Isabella". * main.h, misc.c (hextobyte): Removed. It's in libutil.a now. 2004-02-20 David Shaw * keyserver.c (keyserver_export): Disallow user strings that aren't key IDs. (keyserver_import): Clarify error message. (keyserver_spawn): Properly handle 8 bit characters in user IDs in the info lines during SEND. * mkdtemp.c: Removed. * Makefile.am: We get mkdtemp.c from libutil.a now, so don't link with @LIBOBJS@. * keyserver.c (keyserver_spawn): Pass the scheme to the keyserver helper. 2004-02-18 David Shaw * options.h, g10.c (main), plaintext.c (handle_plaintext): Add --max-output option to help people deal with decompression bombs. 2004-02-15 David Shaw * build-packet.c (do_user_id): Do not force a header for attribute packets as they require a new CTB, and we don't support forced headers for new CTBs yet. 2004-02-14 David Shaw * build-packet.c (write_header2): If a suggested header length is provided along with a zero length, interpret this as an actual zero length packet and not as an indeterminate length packet. (do_comment, do_user_id): Use it here as these packets might be naturally zero length. * parse-packet.c (parse): Show packet type when failing due to an indeterminate length packet. * misc.c (parse_options): Only provide args for the true (i.e. not "no-xxx") form of options. 2004-02-13 David Shaw * keyserver.c (argsep): Move to misc.c. * main.h, misc.c (parse_options), export.c (parse_export_options), import.c (parse_import_options), g10.c (main): Use it here to allow for options with optional arguments. Change all callers. * import.c (check_prefs): Some language fixes. (sec_to_pub_keyblock, import_secret_one): Without knowing the number of MPIs there are, we cannot try and sk-to-pk-ize a key. 2004-02-12 David Shaw * import.c (check_prefs): New function to check preferences on a public key to ensure that it does not advertise any that we cannot fulfill. Use the keyedit command list function to optionally rewrite the prefs. (import_one, import_secret_one): Use it here when importing a public key that we have the secret half of, or when importing a secret key that we have the public half of. * main.h, keyedit.c (keyedit_menu): Remove sign_mode and enhance the more general command list functionality to replace it. * g10.c (main): Use the general command functionality to implement --sign-key, --lsign-key, --nrsign-key, and --nrlsign-key. * import.c (import_one): Do the revocation check even in the case when a key, a revocation key set in a direct key signature, and a revocation from that revocation key, all arrive piecemeal. Needless to say, this is pretty obscure. 2004-02-11 David Shaw * options.h, g10.c (main), keylist.c (list_keyblock_print): Add "show-unusable-subkeys" list-option to show revoked and/or expired subkeys. 2004-02-10 David Shaw * keyedit.c (keyedit_menu): Prompt for subkey removal for both secret and public subkeys. * keylist.c (list_keyblock_print), keyedit.c (show_key_with_all_names): Show the revocation date of a key/subkey, and general formatting work. * packet.h, getkey.c (merge_selfsigs_main, merge_selfsigs_subkey, merge_selfsigs): Keep track of the revocation date of a key. * keydb.h, keyid.c (revokestr_from_pk): New function to print the revocation date of a key. * keygen.c (keygen_set_std_prefs): Build the default preferences list at runtime as it properly handles algorithms disabled at build or run time. * getkey.c (merge_selfsigs_main): Properly handle expired user IDs when the expired self-sig is not the only self-sig. * misc.c (compress_algo_to_string): Return NULL on failure like all of the other xxxx_algo_to_string() functions. * mainproc.c (list_node): Minor spacing tweak to match --list-keys output. * keylist.c (list_keyblock_print), mainproc.c (list_node): Mark revoked subkeys as revoked. Requested by Matthew Wilcox. Revoked overrides expiration when both apply. * keyedit.c (show_prefs): Use compress algo constants. (show_basic_key_info): Make revoked and expired tags translatable. * g10.c (rm_group): Properly ungroup from a list of groups. 2004-01-30 David Shaw * g10.c (main, rm_group): Add --ungroup command to remove a particular group. (add_group): When adding a group with the same name as an already existing group, merge the two groups. (list_config): Show an error message when listing a config item that doesn't exist. (main): Replace -z0 trick for no compression. * packet.h, keyedit.c (show_key_with_all_names_colon), keylist.c (list_keyblock_colon), mainproc.c (list_node, proc_tree): Minor cleanup to remove local_id, which is no longer used. 2004-01-27 David Shaw * getkey.c: Set MAX_PK_CACHE_ENTRIES and MAX_UID_CACHE_ENTRIES to PK_UID_CACHE_SIZE (set in ./configure). * getkey.c (get_pubkey): When reading key data into the cache, properly handle keys that are partially (pk, no UIDs) cached already. This is Debian bug #176425 and #229549. * compress.c (init_compress, push_compress_filter2): Do the right thing (i.e. nothing) with compress algo 0. * main.h, decrypt.c (decrypt_messages): Accept filenames to decrypt on stdin. This is bug #253. 2004-01-23 David Shaw * mainproc.c (list_node): Show sigs with --verbose. * options.h, g10.c (set_screen_dimensions): New function to look at COLUMNS and LINES. * keyserver.c (parse_keyrec, keyserver_search_prompt), keyedit.c (print_and_check_one_sig): Use new screen dimension variables. 2004-01-21 David Shaw * g10.c (list_config): New function to dump config options to stdout. Currently requires --with-colons. (collapse_args): New function to turn argc/argv into a single string. (main): Use it here to pass list_config() more than one argument as a single string. (print_algo_numbers): Helper to print algorithm number for --list-config "pubkey", "cipher", "hash"/"digest", and "compress" config options. * packet.h, getkey.c (merge_selfsigs, merge_selfsigs_main), pkclist.c (check_signatures_trust): Indicate who has revoked a key (the owner or a designated revoker). If a key was revoked by both, prefer the owner. If a subkey is already revoked by the owner, don't allow a designated revokation of the whole key to override this. We're still revoked either way, of course. * keyedit.c (print_and_check_one_sig, keyedit_menu): Use the COLUMNS environment variable (if any) to hint how wide the terminal is. Disabled on _WIN32. Suggested by Janusz A. Urbanowicz. 2004-01-20 David Shaw * keylist.c (set_attrib_fd): Open attribute fd in binary mode. This isn't meaningful on POSIX systems, but the Mingw builds aren't exactly POSIX. * trustdb.c (reset_trust_records): New, faster, implementation that doesn't involve a keyring scan. (clear_validity): Removed. * g10.c (main), keydb.h, keydb.c (keydb_rebuild_caches), keyring.h, keyring.c (keyring_rebuild_cache): Add "noisy" flag so cache rebuilds can remain noisy when called for itself, and quiet when called as part of the trustdb rebuild. * trustdb.c (validate_keys): Rebuild the sig caches before building the trustdb. Note that this is going to require some architectual re-thinking, as it is agonizingly slow. 2004-01-19 David Shaw * sig-check.c (check_key_signature2): Comments. * keyring.c (keyring_rebuild_cache): Clear sig cache for any signatures that we can no longer process (say, if the user removed support for a necessary pubkey or digest algorithm). 2004-01-16 David Shaw * misc.c (print_cipher_algo_note): May as well call Rijndael AES at this point. * keygen.c (do_create), misc.c (openpgp_pk_algo_usage): Remove the last bits of Elgamal type 20 support. 2004-01-03 Stefan Bellon * compress.c [__riscos__]: Only use RISC OS' own ZLib module if configured to use it. 2003-12-30 David Shaw * options.h, g10.c (main), import.c (parse_import_options, import_one, import_secret_one), keyserver.c (keyserver_refresh): Change --merge-only to --import-option merge-only. Deprecate --merge-only. 2003-12-29 David Shaw * misc.c (pull_in_libs): Dead code. Removed. * sig-check.c (check_revocation_keys): Comments. * getkey.c (merge_selfsigs_main): Don't bother to check designated revoker sigs if the key is already revoked. * packet.h, getkey.c (merge_selfsigs_main): New "maybe_revoked" flag on PKs. It is set when there is a revocation signature from a valid revocation key, but the revocation key is not present to verify the signature. * pkclist.c (check_signatures_trust): Use it here to give a warning when showing key trust. * compress-bz2.c: Include stdio.h. Solaris 9 has a very old bzip2 library and we can at least guarantee that it won't fail because of the lack of stdio.h. * tdbio.c: Fixed format string bugs related to the use of DB_NAME. Reported by Florian Weimer. 2003-12-28 David Shaw * options.h, g10.c (main), keyserver.c (keyserver_opts, parse_keyserver_uri): honor-http-proxy is no longer an option since we can do the same thing with http-proxy with no arguments. Also remove broken-http-proxy since it can be better handled in the HTTP helper. * keyserver.c (argsep): New variation on strsep that knows about optional arguments. (parse_keyserver_options): Use it here for optional arguments. 2003-12-28 Stefan Bellon * plaintext.c (handle_plaintext) [__riscos__]: Don't mangle filename if the user specified it. * g10.c, gpgv.c [__riscos__]: Removal of unnecessary #ifdef __riscos__ sections. 2003-12-27 David Shaw * keyserver.c (strip_leading_space, get_arg): New. (parse_keyserver_options): Use them here to allow arguments to keyserver-options. Since none of our options need arguments yet, just pass them through whole to the keyserver helper. * main.h, misc.c (parse_options): Add a "noisy" flag to enable and disable the messages about which option didn't match or matched ambiguously. Change all callers (g10.c, keyserver.c). * main.h, import.c (import_options), export.c (export_options): Pass the noisy flag through. 2003-12-17 David Shaw * build-packet.c (write_fake_data, do_secret_key), seckey-cert.c (do_check): Use an unsigned length for mpi_get_opaque. * options.h: It's impolite to assign -1 to an unsigned opt.force_ownertrust. * sig-check.c (cmp_help, do_check), sign.c (do_sign): Remove old unused code. * keyid.c (keyid_from_sk): Make sure lowbits is initialized. 2003-12-12 David Shaw * sig-check.c (do_check): Move the signing algo and hash checks from here... (signature_check2): ... to here. (check_key_signature2): ... and here. This is a minor optimization to avoid fetching a key (which can be expensive, especially if it is not self-signed, and there are many key signatures on it which need to be checked for ultimate trust) if the signature would have failed anyway because of algorithm or hash problems. 2003-12-10 David Shaw * packet.h, build-packet.c (hash_public_key): Remove function ... * keydb.h, keyid.c (hash_public_key, do_fingerprint_md): ... and make a new one here that shares code with the fingerprint calculations. This removes some duplicated functionality, and is also around 14% faster. (Every bit helps). * import.c (import_one): No longer need the Elgamal import warning. * getkey.c (get_pubkey_fast): This one is sort of obscure. get_pubkey_fast returns the primary key when requesting a subkey, so if a user has a key signed by a subkey (we don't do this, but used to), AND that key is not self-signed, AND the algorithm of the subkey in question is not present in GnuPG, AND the algorithm of the primary key that owns the subkey in question is present in GnuPG, then we will try and verify the subkey signature using the primary key algorithm and hit a BUG(). The fix is to not return a hit if the keyid is not the primary. All other users of get_pubkey_fast already expect a primary only. 2003-12-09 David Shaw * keyid.c (do_fingerprint_md): Remove the rules to hash the old v3 Elgamal keys. They are no longer needed. * keyid.c (keyid_from_sk, keyid_from_pk, fingerprint_from_pk, fingerprint_from_sk): Enforce the v3-is-only-RSA rule. Anything that isn't RSA gets a zero keyid and fingerprint. * keyid.c (do_fingerprint_md): Properly handle hashing of keys that we don't know the structure of by using the opaque MPI. (do_fingerprint_md_sk): We cannot calculate the fingerprint from a secret key unless we know the structure (since we can't leave off the secret key parts), so fail early..... (keyid_from_sk, fingerprint_from_sk): .... and return all zeroes. 2003-12-03 David Shaw * g10.c (strusage, main): Show development version warning in --version output. (main): Set --bzip2-compress-level to the default value at startup. Remove --emulate-checksum-bug noop. * options.h, g10.c (main), main.h, seskey.c (do_encode_md, encode_md_value), sig-check.c (do_check), sign.c (do_sign): Remove --emulate-md-encode-bug as it only applied to Elgamal signatures, which are going away. 2003-11-30 David Shaw * mainproc.c (proc_symkey_enc, proc_encrypted): Add ability to use --override-session-key on --symmetric messages (new-style or old-style). (proc_pubkey_enc): Move code to show session key from here to proc_encrypted() so it can work with any type of message. Suggested by Michael Young. 2003-11-29 David Shaw * trustdb.c (validate_keys): Reset the trustdb before checking if we have any ultimately trusted keys. This ensures that if we lose all our ultimately trusted keys, we don't leave behind the old validity calculations. Noted by Peter Palfrader. * revoke.c (gen_desig_revoke): Specify in the comment when a designated revocation is generated. * getkey.c (merge_selfsigs_main, merge_selfsigs_subkey, get_seckey_byname2): Remove Elgamal check since we are removing type 20 keys altogether. 2003-11-27 David Shaw * pkclist.c (build_pk_list): Do not allow an empty PK list in interactive mode. * keygen.c (ask_algo): Remove ability to generate Elgamal sign+encrypt keys. * getkey.c (merge_selfsigs_main, merge_selfsigs_subkey, get_seckey_byname2): Disallow use of sign+encrypt Elgamal keys. 2003-11-20 David Shaw * seskey.c (do_encode_md): Comment about earlier (pre-PGP 2.3) encodings. * misc.c (compress_algo_to_string): Translate "Uncompressed". Requested by Tommi Vainikainen. (string_to_compress_algo): Include multi-string for "uncompressed|none". 2003-11-17 David Shaw * options.h, g10.c (main), compress-bz2.c (init_uncompress): Add --bz2-compress-lowmem to set bzlib "small" flag for low memory (but slow) decompression. 2003-11-15 David Shaw * compress.c (init_compress): Remove compress level 10 trick, since it is no longer needed. * g10.c: Fix typoed option name. * compress-bz2.c (init_compress): Compression level 0 is not meaningful for bzip2. * options.h, g10.c (main), compress.c (init_compress), compress-bz2.c (init_compress): Add --compress-level and --bzip2-compress-level. -z sets them both. Change various callers. * encode.c (encode_simple), sign.c (sign_symencrypt_file): Properly use default_compress_algo (--compress-algo, followed by the highest --personal-compress-preference, followed by ZIP) to get the algorithm. 2003-11-14 David Shaw * options.h, trustdb.c (trust_model_string, init_trustdb): Add support for "external" trust model, where the user can provide a pregenerated trustdb. * keyedit.c (keyedit_menu): Do not allow editing ownertrust with an external trust model trustdb. 2003-11-13 David Shaw * options.h, g10.c, keyedit.c, keylist.c, mainproc.c: Clarify the plurarility (or not) of various list and verify options. 2003-11-12 David Shaw * g10.c (main): Add --symmetric --sign --encrypt. * main.h, encode.c (setup_symkey): New. Prompt for a passphrase and create a DEK for symmetric encryption. (write_symkey_enc): New. Write out symmetrically encrypted session keys. (encode_crypt, encrypt_filter): Use them here here when creating a message that can be decrypted with a passphrase or a pk. * sign.c (sign_file): Call setup_symkey if we are doing a --symmetric --sign --encrypt. 2003-11-09 David Shaw * mainproc.c (proc_symkey_enc): Don't show algorithm information when --quiet is set. Suggested by Duncan Harris. Also don't fail with BUG() when processing a --symmetric message with a cipher we don't have. * g10.c: Alias --personal-xxx-prefs to --personal-xxx-preferences. * pkclist.c (build_pk_list): When adding recipients interactively, allow the user to stop at any point. 2003-10-31 David Shaw * trustdb.h, trustdb.c (register_trusted_keyid): New. Adds a keyid to the list of ultimately trusted keys. * keygen.c (do_generate_keypair): Use it here so that the ultimate ownertrust happens before the trustdb (might be) rebuilt. Also fix an error where the newly generated pk is thought to be a subkey by the trustdb. * g10.c (main): Fix --export-all do actually do something different than --export. * pkclist.c (build_pk_list): Show all recipients rather than showing each recipient as they are added. * mainproc.c (proc_symkey_enc, proc_encrypted): Keep a count of the number of passphrases that can decrypt a symmetric or mixed symmetric/pk message and include it in the list of keys shown to the user. 2003-10-30 David Shaw * misc.c (compress_algo_to_string, string_to_compress_algo, check_compress_algo): Add bzip2. * compress.c (compress_filter): Make static to help force the use of push_compress_filter. Remove default algorithm setting since that is done in push_compress_filter now. * main.h: Use named algorithm. * filter.h, compress.c (push_compress_filter, push_compress_filter2): New. Figure out which is the appropriate compression filter to use, and push it into place. * compress.c (handle_compressed), encode.c (encode_simple, encode_crypt), sign.c (sign_file, sign_symencrypt_file), import.c (read_block), export.c (do_export): Use push_compress_filter instead of pushing the compression filter ourselves. * compress-bz2.c: New. Bzlib versions of the compression filter routines. * Makefile.am: Include compress-bz2.c if bz2lib is available. 2003-10-30 Werner Koch * apdu.c (close_ct_reader, close_pcsc_reader): Implemented. (get_ccid_error_string): New. Not very useful messages, though. 2003-10-29 Werner Koch * cardglue.c (open_card): Ask for card insertion. (check_card_serialno): New. (agent_scd_pksign, agent_scd_pkdecrypt): Use it here. * cardglue.c (open_card): Issue insertion status message. * status.h, status.c (STATUS_CARDCTRL): New. * status.c (cpr_get_answer_okay_cancel): New. 2003-10-28 Werner Koch * keylist.c (list_keyblock_print): Denote secrets keys stored on a card with an '>'. Print the '#' also for subkeys. (list_keyblock_colon): Introduce new field 15 for sec/ssb to print the serial number. 2003-10-26 David Shaw * g10.c (main): Enhance the version-specific config file code to try for more specific matches before giving up (e.g. 1.3.3-cvs, 1.3.3, 1.3, 1). 2003-10-25 David Shaw * g10.c (main): Add --symmetric --encrypt command. This generates a message that can be decrypted via a passphrase or public key system. * main.h, encode.c (encode_seskey): Allow passing in an already-created session key dek. (encode_simple): Use the actual symmetric cipher when encrypting a session key for a symmetric message. (encode_crypt): Add a flag to trigger a hybrid mode that can be decrypted via a passphrase or a pk. Change all callers. * mainproc.c (symkey_decrypt_sesskey): There is no way to tell the difference here between a bad passphrase and a cipher algorithm that we don't have, so use a error message that makes that clear. Use the actual list of ciphers when checking whether a cipher is invalid. Return error if the decrypted cipher algorithm is invalid. (proc_symkey_enc): In a mixed passphrase/pk message, if a valid dek already exists from decrypting via pk, do not try to process the passphrase. (proc_symkey_enc): Indicate when we're decrypting a session key as opposed to decrypting data. If a passphrase is invalid, discard the dek so we'll keep trying. 2003-10-25 Werner Koch * ccid-driver.c (ccid_open_reader): Return an error if no USB devices are found. * Makefile.am: Replaced INTLLIBS by LIBINTL. * g10.c (main) [ENABLE_CARD_SUPPORT]: Add a default for --pcsc-driver. * cardglue.c (learn_status_cb): Fixed faulty use of !space. 2003-10-24 Werner Koch * apdu.c (apdu_open_reader): Hacks for PC/SC under Windows. 2003-10-21 Werner Koch * passphrase.c (ask_passphrase): Add optional promptid arg. Changed all callers. * cardglue.c (pin_cb): Use it here, so the machine interface can tell whether the Admin PIN is requested. * cardglue.c (agent_scd_checkpin): New. * misc.c (openpgp_pk_algo_usage): Added AUTH usage. * app-openpgp.c (check_against_given_fingerprint): New. Factored out that code elsewhere. (do_check_pin): New. * card-util.c (card_edit): New command "passwd". Add logic to check the PIN in advance. (card_status): Add new args to return the serial number. Changed all callers. 2003-10-14 David Shaw * import.c (import_one): Show the keyid when giving the Elgamal slow import warning. * g10.c (main): Older versions used --comment "" to indicate no comment. Don't add an empty comment. 2003-10-13 David Shaw * keyedit.c (show_key_with_all_names): Ownertrust is only meaningful for the PGP or classic trust models. Both validity and ownertrust are not meaningful for the always trust model. 2003-10-11 Werner Koch * keygen.c: Always enable the gen_card_key prototype. 2003-10-10 Werner Koch * cardglue.c (card_close): New. (agent_scd_change_pin): Implemented. * ccid-driver.c (ccid_close_reader): New. * apdu.c (close_ccid_reader, close_ct_reader, close_csc_reader) (close_osc_reader, apdu_close_reader): New. Not all are properly implemented yet. * g10.c (g10_exit): Use close_card. 2003-10-09 David Shaw * g10.c (main): Give a deprecated option warning for --show-keyring, --show-photos, --show-policy-url, --show-notation, and their respective no- forms. * options.skel: Remove show-photos and replace with list/verify-options show-photos. Remove no-mangle-dos-filenames. * misc.c (parse_options): Allow for incomplete (but unambiguous) options. 2003-10-09 Werner Koch * ccid-driver.c (ccid_transceive): Add T=1 chaining for sending. * sign.c (do_sign) [!ENABLE_CARD_SUPPORT]: Return an error for card keys. * cardglue.c (agent_scd_pkdecrypt): Implemented. * pubkey-enc.c (get_it) [ENABLE_CARD_SUPPORT]: Divert decryption to card 2003-10-08 Werner Koch * cardglue.c (pin_cb): Detect whether an admin or regular PIN is requested. (genkey_status_cb): New. (agent_scd_genkey): Implemented. * keygen.c (generate_keypair): New arg CARD_SERIALNO and prepare parameters for on card key generation. Changed all callers. (do_generate_keypair): Add new arg card and merged casrd specific changes from 1.9. (proc_parameter_file): New arg card, apss it down to do_generate_keypair and changed all callers. (gen_card_key): New. * g10.c: Include cardclue.h. (main): s/app_set_default_reader_port/card_set_reader_port/. * cardglue.c (card_set_reader_port): New to address include file issues. 2003-10-02 Werner Koch * cardglue.c (learn_status_cb): Release values before assignment so that it can be used by getattr to update the structure. (agent_scd_getattr): New. * keylist.c (print_pubkey_info): Add FP arg for optional printing to a stream. Changed all callers. 2003-10-01 Werner Koch * app-common.h, app-openpgp.c, iso7816.c, iso7816.h, apdu.c * apdu.h, ccid-driver.c, ccid-driver.h, card-util.c: Updated from current GnuPG 1.9. Changes over there are: * card-util.c: Tweaked to use this source also under 1.3. (card_edit): New command "forcesig". * card-util.c (print_name, print_isoname): Use 0 and not LF fro the max_n arg of tty_print_utf8_string2. * card-util.c (change_pin): Simplified. We now have only a PIN and an Admin PIN. * ccid-driver.c: Detect GnuPG 1.3 and include appropriate files. * apdu.c: Ditto. * app-openpgp.c: Ditto. * iso7816.c: Ditto. (generate_keypair): Renamed to .. (do_generate_keypair): .. this. * app-common.h [GNUPG_MAJOR_VERSION]: New. * iso7816.h [GNUPG_MAJOR_VERSION]: Include cardglue.h * app-openpgp.c (do_change_pin): Make sure CVH1 and CHV2 are always synced. (verify_chv2, verify_chv3): New. Factored out common code. (do_setattr, do_sign, do_auth, do_decipher): Change the names of the prompts to match that we have only 2 different PINs. (app_select_openpgp): Check whether the card enforced CHV1. (convert_sig_counter_value): New. Factor out code from get_sig_counter. * Makefile.am (card_support_source): Depend on new AM conditional to get the ifdef ENABLE_CARD_SUPPORT off the way from source copied files. (update-source-from-gnupg-2): Maintainer helper. 2003-10-01 David Shaw * g10.c (main): Add --no-groups to zero --group list. * encode.c (encode_simple): Allow for 32 bytes (256 bits) of symmetrically encrypted session key. Use --s2k-cipher-algo to choose cipher, rather than the default cipher. * parse-packet.c (parse_subkeyenc): Give a warning if an symmetrically encrypted session key is seen without salt. Show in --list-packets if a symetrically encrypted session key is present. * pubkey-enc.c (get_it): Always show cipher-not-in-prefs warning unless --quiet is set. Use text name of cipher in warning. 2003-09-30 David Shaw * options.h, g10.c (main), mainproc.c (check_sig_and_print): Add --verify-option show-unusable-uids. * gpgv.c (check_trustdb_stale): Stub. * trustdb.c (get_validity): Move the up-to-date check to check_trustdb_stale (new), so that it can be called before validity is checked. * keylist.c (list_keyblock_print): Disable the overall key validity display until it can be thought about more. Use check_trustdb_stale here to avoid putting the check warning in the middle of a listed key. * trustdb.c (init_trustdb): Only verify_own_keys() for those trust models that it applies to (i.e. classic and OpenPGP). 2003-09-29 Werner Koch * keygen.c (do_add_key_flags, parse_parameter_usage): Add support the proposed AUTH key flag. * getkey.c (fixup_uidnode, merge_selfsigs_main) (merge_selfsigs_subkey, premerge_public_with_secret): Ditto. * keylist.c (print_capabilities): Ditto. * parse-packet.c (parse_key): Allow to parse the divert-to-card S2K mode. * build-packet.c (do_secret_key): Handle divert-to-card S2K * seckey-cert.c (is_secret_key_protected): Ditto. (check_secret_key): Ditto. * keygen.c (do_ask_passphrase): Renamed from ask_passphrase. * passphrase.c (ask_passphrase): New. 2003-09-28 Werner Koch * g10.c (main): New commands --card-edit, --card-status and --change-pin. New options --ctapi-driver, --pcsc-driver and --disable-ccid * options.h (DBG_CARD_IO): New. * cardglue.c, cardclue.h: Enhanced. * card-util.c: New. Taken from current the gnupg 1.9 branch. * app-common.h, app-openpgp.c, iso7816.c, iso7816.h, apdu.c * apdu.h, ccid-driver.c, ccid-driver.h: New. Takem from the current gnupg 1.9 branch withy minor changes to include directives. * Makefile.am: Added these files. 2003-09-27 Werner Koch * sign.c (do_sign) [ENABLE_CARD_SUPPORT]: Divert to card. * cardglue.c, cardglue.h: New. * Makefile.am (gpg_LDADD): Added. (card_support_sources): New. 2003-09-25 David Shaw * options.h, g10.c (main), keylist.c (list_keyblock_print): Add "show-unusable-uids" list-option to show revoked and/or expired user IDs. 2003-09-24 David Shaw * keyedit.c (show_key_with_all_names): Show names a little neater by putting the [revoked] or [expired] in the space used for the [validity]. There is also no point in showing "[unknown] [revoked]". 2003-09-23 David Shaw * sign.c (mk_notation_policy_etc): Capitalize "URL". * trustdb.c (validate_keys): Give a little more information while rebuilding trustdb. * pkclist.c (do_edit_ownertrust): Clarify "don't know". * g10.c (main): Default to --no-mangle-dos-filenames. * keydb.h, keyring.c (keyring_search), trustdb.c (search_skipfnc): Expand the skipfnc to include a pointer to the user ID that matched. * getkey.c (skip_disabled): Rename to skip_unusable, and add checks for expired or revoked user IDs. 2003-09-22 David Shaw * g10.c (main): Deprecate --default-comment in favor of --no-comments. * options.h, g10.c (main), armor.c (armor_filter): Allow using --comment multiple times to get multiple Comment: header lines. --no-comments resets list. 2003-09-11 David Shaw * g10.c (main): Trim --help to commonly used options. Remove -f. 2003-09-08 David Shaw * g10.c (main): Error out if --multifile is used with the commands that don't support it yet (--sign, --clearsign, --detach-sign, --symmetric, and --store). * g10.c (main): Add --multifile as an alias to turn --encrypt into --encrypt-files (plus --verify-files, --decrypt-files). * encode.c (use_mdc), g10.c (main): Use RFC1991 and RFC2440 directly to check for MDC usability. Do not set the force_mdc or disable_mdc flags since there is no point any longer. 2003-09-04 David Shaw * armor.c (parse_hash_header, armor_filter), g10.c (print_hex, print_mds), pkclist.c (algo_available): Drop TIGER/192 support. 2003-09-03 David Shaw * keyedit.c (show_key_with_all_names): Fix assertion failure when using toggle to see a secret key. Reported by Maxim Britov. 2003-08-31 David Shaw * g10.c (add_keyserver_url), keyedit.c (keyedit_menu), sign.c (mk_notation_policy_etc): Clarify a few strings. It's a "preferred keyserver URL". * g10.c (main): Use "keyserver-url" instead of "preferred-keyserver" for the sake of short and simple commands. 2003-08-30 David Shaw * main.h, keygen.c (keygen_add_keyserver_url): Signature callback for adding a keyserver URL. * keyedit.c (keyedit_menu, menu_set_keyserver_url): New command to set preferred keyserver to specified (or all) user IDs. * build-packet.c (build_sig_subpkt): Set preferred keyserver flag while building a preferred keyserver subpacket. * keylist.c (show_policy_url, show_keyserver_url): URLs might be UTF8. * keyedit.c (menu_addrevoker): Fix leaking a few bytes. 2003-08-29 David Shaw * keyedit.c (show_key_with_all_names): Use list-option show-long-keyid in main --edit-key display. * keyedit.c (print_and_check_one_sig): Use list-option show-long-keyid in --edit-key "check" function. 2003-08-28 David Shaw * passphrase.c (agent_send_all_options): Make use of $GPG_TTY. * g10.c (main): Disable use-agent if passphrase-fd is given later. Suggested by Kurt Garloff. * exec.c, g10.c, gpgv.c, passphrase.c, photoid.c: s/__MINGW32__/_WIN32/ to help building on native Windows compilers. Requested by Brian Gladman. From Werner on stable branch. 2003-08-25 David Shaw * options.h, g10.c (main): Add list-option list-preferred-keyserver. * keyedit.c (change_passphrase): When responding 'no' to the blank passphrase question, re-prompt for a new passphrase. This is bug #202. * mainproc.c (check_sig_and_print): Use two different preferred keyserver displays - one if the key is not present (to tell the user where to get the key), the other if it is present (to tell the user where the key can be refreshed). * packet.h, parse-packet.c (parse_signature): Set flag if a preferred keyserver is present. * keylist.c (list_keyblock_print): Show keyserver url in listings with list-option show-keyserver-url. 2003-08-24 David Shaw * Makefile.am: Use NETLIBS instead of EGDLIBS. * mainproc.c (check_sig_and_print): Get the uid validity before printing any sig results to avoid munging the output with trustdb warnings. * g10.c (main): Don't include --show-keyring in --help as it is deprecated. 2003-08-21 David Shaw * gpgv.c: Remove extra semicolon (typo). * options.skel: Note that keyserver.pgp.com isn't synchronized, and explain the roundrobin a bit better. * sig-check.c (check_key_signature2), import.c (import_one, import_revoke_cert, chk_self_sigs, delete_inv_parts, collapse_uids, merge_blocks): Make much quieter during import of slightly munged, but recoverable, keys. Use log_error for unrecoverable import failures. * keyring.c (keyring_rebuild_cache): Comment. * sign.c (mk_notation_and_policy): Making a v3 signature with notations or policy urls is an error, not an info (i.e. increment the errorcount). Don't print the notation or policy url to stdout since it can be mixed into the output stream when piping and munge the stream. 2003-08-12 David Shaw * packet.h, sig-check.c (signature_check2, do_check, do_check_messages): Provide a signing-key-is-revoked flag. Change all callers. * status.h, status.c (get_status_string): New REVKEYSIG status tag for a good signature from a revoked key. * mainproc.c (do_check_sig, check_sig_and_print): Use it here. * import.c (import_revoke_cert, merge_blocks, merge_sigs): Compare actual signatures on import rather than using keyid or class matching. This does not change actual behavior with a key, but does mean that all sigs are imported whether they will be used or not. * parse-packet.c (parse_signature): Don't give "signature packet without xxxx" warnings for experimental pk algorithms. An experimental algorithm may not have a notion of (for example) a keyid (i.e. PGP's x.509 stuff). 2003-08-02 David Shaw * options.h, g10.c (main), keylist.c (list_keyblock_print), keyedit.c (print_and_check_one_sig): New "show-sig-expire" list-option to show signature expiration dates (if any). 2003-07-24 David Shaw * options.h, g10.c (main, add_keyserver_url): Add --sig-preferred-keyserver to implant a "where to get my key" subpacket into a signature. * sign.c (mk_notation_and_policy): Rename to mk_notation_policy_etc and add preferred keyserver support for signatures. 2003-07-21 David Shaw * keygen.c (do_add_key_flags): Don't set the certify flag for subkeys. (ask_algo): Provide key flags for DSA, Elgamal_e, and Elgamal subkeys. (generate_keypair): Provide key flags for the default DSA/Elgamal keys. * sig-check.c (signature_check, signature_check2, check_key_signature, check_key_signature2): Allow passing NULLs for unused parameters in the x2 form of each function to avoid the need for dummy variables. getkey.c, mainproc.c: Change all callers. * trustdb.h, trustdb.c (read_trust_options): New. Returns items from the trustdb version record. * keylist.c (public_key_list): Use it here for the new "tru" record. * gpgv.c (read_trust_options): Stub. 2003-07-20 David Shaw * keyedit.c (show_key_with_all_names): Use list-option show-validity in --edit-key interface as well. 2003-07-19 David Shaw * options.h, g10.c (main), mainproc.c (check_sig_and_print): Add verify-options "show-validity" and "show-long-keyid" to show trustdb validity and long keyids during (file) signature verification. * packet.h, main.h, sig-check.c (signature_check2, check_key_signature2, do_check): If ret_pk is set, fill in the pk used to verify the signature. Change all callers in getkey.c, mainproc.c, and sig-check.c. * keylist.c (list_keyblock_colon): Use the ret_pk from above to put the fingerprint of the signing key in "sig" records during a --with-colons --check-sigs. This requires --no-sig-cache as well since we don't cache fingerprints. 2003-07-10 David Shaw * parse-packet.c (parse_signature): No need to reserve 8 bytes for the unhashed signature cache any longer. * misc.c (pct_expando): Add two new expandos - signer's fingerprint (%g), and signer's primary fingerprint (%p). * Makefile.am: Include W32LIBS where appropriate. * g10.c (main): Add --rfc2440 alias for --openpgp since in a few months, they won't be the same thing. * keyserver.c (parse_keyserver_uri): Accept "http" as an alias for "hkp", since it is occasionally written that way. (keyserver_spawn): Use ascii_isspace to avoid locale issues. * keygen.c (ask_user_id): Make --allow-freeform-uid apply to the email field as well as the name field, and allow mixing fields when it is set. * options.skel: Use subkeys.pgp.net as the default keyserver. * trustdb.c (validate_one_keyblock): Certifications on revoked or expired uids do not count in the web of trust. * signal.c (init_one_signal, pause_on_sigusr, do_block): Only use sigprocmask() if we have sigset_t, and only use sigaction() if we have struct sigaction. This is for Forte c89 on Solaris which seems to define only the function call half of the two pairs by default. (pause_on_sigusr): Typo. (do_block): If we can't use sigprocmask() and sigset_t, try to get the number of signals from NSIG as well as MAXSIG, and if we can't, fail with an explanation. * signal.c, tdbio.c: Comment out the transaction code. It was not used in this version, and was causing some build problems on quasi-posix platforms (Solaris and Forte c89). * keylist.c (list_keyblock_colon): Don't include validity values when listing secret keys since they can be incorrect and/or misleading. This is a temporary kludge, and will be handled properly in 1.9/2.0. * mainproc.c (check_sig_and_print): Only show the "key available from" preferred keyserver line if the key is not currently present. * keyedit.c (sign_uids): Do not sign expired uids without --expert (same behavior as revoked uids). Do not allow signing a user ID without a self-signature. --expert overrides. Add additional prompt to the signature level question. (menu_expire): When changing expiration dates, don't replace selfsigs on revoked uids since this would effectively unrevoke them. There is also no point in replacing expired selfsigs. This is bug #181 2003-07-10 David Shaw (from Werner on stable branch) * g10.c (add_notation_data): Make sure that only ascii is passed to iscntrl. Noted by Christian Biere. * getkey.c (classify_user_id2): Replaced isspace by spacep * keygen.c (ask_user_id): Ditto. (get_parameter_algo): Ditto. * keyedit.c (keyedit_menu): Ditto. * tdbdump.c (import_ownertrust): Ditto. s/isxdigit/hexdigitp/. * revoke.c (ask_revocation_reason): * keyserver.c (keyserver_spawn): Dito. 2003-06-10 Werner Koch * parse-packet.c (parse): Disallow old style partial length for all key material packets to avoid possible corruption of keyrings. 2003-06-08 Werner Koch * import.c (import_keys_internal): Invalidate the cache so that the file descriptor gets closed. Fixes bug reported by Juan F. Codagnone. 2003-06-04 David Shaw * options.skel: Use new hkp://subkeys.pgp.net as sample keyserver since they at least handle subkeys correctly. * options.h, g10.c (main), main.h, keylist.c (show_keyserver_url), mainproc.c (check_sig_and_print), parse-packet.c (dump_sig_subpkt, parse_one_sig_subpkt, can_handle_critical): Add read-only support for preferred keyserver subpackets. They're basically policy URLs with a different name. Add a verify-option "show-preferred-keyserver" to turn them on and off (on by default, as per stable branch). * g10.c (main): Add "--set-notation" as alias to "--notation-data" this is to make things consistent with --set-policy-url meaning both sigs and certs. 2003-06-03 David Shaw * options.h, g10.c (main), keylist.c (list_keyblock_print): Add "show-validity" and "show-long-keyid" list-options. * gpgv.c (get_validity, trust_value_to_string): Stubs. * g10.c (main): Use SAFE_VERSION instead of VERSION in the version-specific gpg.conf file so it can be overridden on RISCOS. 2003-06-01 David Shaw * g10.c (main), keylist.c (show_policy_url, show_notation), mainproc.c (check_sig_and_print): Emulate the old policy and notation behavior (display by default). Send to status-fd whether it is displayed on the screen or not. * g10.c (main): Since we now have some options in devel that won't work in a stable branch gpg.conf file, try for a version-specific gpg.conf-VERSION file before falling back to gpg.conf. * main.h, options.h: Move various option flags to options.h. 2003-05-31 David Shaw * mainproc.c (check_sig_and_print), main.h, keylist.c (show_policy, show_notation): Collapse the old print_notation_data into show_policy() and show_notation() so there is only one function to print notations and policy URLs. * options.h, main.h, g10.c (main), keyedit.c (print_and_check_one_sig), keylist.c (list_one, list_keyblock_print), pkclist.c (do_edit_ownertrust), sign.c (mk_notation_and_policy): New "list-options" and "verify-options" commands. These replace the existing --show-photos/--no-show-photos, --show-notation/--no-show-notation, --show-policy-url/--no-show-policy-url, and --show-keyring options. The new method is more flexible since a user can specify (for example) showing photos during sig verification, but not in key listings. The old options are emulated. * main.h, misc.c (parse_options): New general option line parser. Fix the bug in the old version that did not handle report syntax errors after a valid entry. * import.c (parse_import_options), export.c (parse_export_options): Call it here instead of duplicating the code. 2003-05-30 David Shaw * keylist.c (list_one): Don't show the keyring filename when in --with-colons mode. Actually translate "Keyring" string. * mainproc.c (proc_tree): We can't currently handle multiple signatures of different classes or digests (we'd pretty much have to run a different hash context for each), but if they are all the same, make an exception. This is Debian bug #194292. * sig-check.c (check_key_signature2): Make string translatable. * packet.h, getkey.c (fixup_uidnode): Mark real primary uids differently than assumed primaries. * keyedit.c (no_primary_warning): Use the differently marked primaries here in a new function to warn when an --edit-key command might rearrange the self-sig dates enough to change which uid is primary. (menu_expire, menu_set_preferences): Use no_primary_warning() here. * Makefile.am: Use @DLLIBS@ for -ldl. 2003-05-26 David Shaw * getkey.c (premerge_public_with_secret): Made "no secret subkey for" warning a verbose item and translatable. (From wk on stable branch) * sig-check.c (check_key_signature2): Made "no subkey for subkey binding packet" a verbose item instead of a !quiet one. There are too many garbled keys out in the wild. (From wk on stable branch) * filter.h: Remove const from WHAT. (From wk on stable branch) * progress.c (handle_progress): Store a copy of NAME. (progress_filter): Release WHAT, make sure not to print a NULL WHAT. (From wk on stable branch) * openfile.c (open_sigfile): Adjust free for new progress semantics. (From wk on stable branch) * plaintext.c (ask_for_detached_datafile): Don't dealloc pfx->WHAT. (From wk on stable branch) * seckey-cert.c (do_check): Issue the RSA_OR_IDEA status when the cipher algo is IDEA to make it easier to track down the problem. (From twoaday on stable branch) 2003-05-24 David Shaw * armor.c, g10.c, kbnode.c, misc.c, pkclist.c, sign.c, build-packet.c, getkey.c, keydb.c, openfile.c, plaintext.c, status.c, gpgv.c, keygen.c, options.h, sig-check.c, tdbio.h, encode.c, mainproc.c, parse-packet.c, signal.c, textfilter.c: Edit all preprocessor instructions to remove whitespace before the '#'. This is not required by C89, but there are some compilers out there that don't like it. 2003-05-21 David Shaw * trustdb.h, trustdb.c (is_disabled), gpgv.c (is_disabled): Rename is_disabled to cache_disabled_value, which now takes a pk and not just the keyid. This is for speed since there is no need to re-fetch a key when we already have that key handy. Cache the result of the check so we don't need to hit the trustdb more than once. * getkey.c (skip_disabled): New function to get a pk and call is_disabled on it. (key_byname): Use it here. * packet.h, getkey.c (skip_disabled), keylist.c (print_capabilities): New "pk_is_disabled" macro to retrieve the cached disabled value if available, and fill it in via cache_disabled_value if not available. * trustdb.c (get_validity): Cache the disabled value since we have it handy and it might be useful later. * parse-packet.c (parse_key): Clear disabled flag when parsing a new key. Just in case someone forgets to clear the whole key. * getkey.c (merge_selfsigs_main): Add an "if all else fails" path for setting a single user ID primary when there are multiple set primaries all at the same second, or no primaries set and the most recent user IDs are at the same second, or no signed user IDs at all. This is arbitrary, but deterministic. * exec.h, photoid.h: Add copyright message. * keylist.c (list_keyblock_print): Don't dump attribs for revoked/expired/etc uids for non-colon key listings. This is for consistency with --show-photos. * main.h, keylist.c (dump_attribs), mainproc.c (check_sig_and_print): Dump attribs if --attrib-fd is set when verifying signatures. * g10.c (main): New --gnupg option to disable the various --openpgp, --pgpX, etc. options. This is the same as --no-XXXX for those options. * revoke.c (ask_revocation_reason): Clear old reason if user elects to repeat question. This is bug 153. * keyedit.c (sign_uids): Show keyid of the key making the signature. 2003-05-21 Werner Koch * progress.c (handle_progress) * sign.c (write_plaintext_packet) * encode.c (encode_simple,encode_crypt): Make sure that a filename of "-" is considered to be stdin so that iobuf_get_filelength won't get called. This fixes bug 156 reported by Gregery Barton. 2003-05-02 David Shaw * packet.h, build-packet.c (build_sig_subpkt), export.c (do_export_stream), import.c (remove_bad_stuff, import), parse-packet.c (dump_sig_subpkt, parse_one_sig_subpkt): Remove vestigal code for the old sig cache subpacket. This wasn't completely harmless as it caused subpacket 101 to disappear on import and export. * options.h, armor.c, cipher.c, g10.c, keyedit.c, pkclist.c, sign.c, encode.c, getkey.c, revoke.c: The current flags for different levels of PGP-ness are massively complex. This is step one in simplifying them. No functional change yet, just use a macro to check for compliance level. * sign.c (sign_file): Fix bug that causes spurious compression preference warning. * sign.c (clearsign_file): Fix bug that prevents proper warning message from appearing when clearsigning in --pgp2 mode with a non-v3 RSA key. * main.h, misc.c (compliance_option_string, compliance_string, compliance_failure), pkclist.c (build_pk_list), sign.c (sign_file, clearsign_file), encode.c (encode_crypt, write_pubkey_enc_from_list): New functions to put the "this message may not be usable...." warning in one place. * options.h, g10.c (main): Part two of the simplification. Use a single enum to indicate what we are compliant to (1991, 2440, PGPx, etc.) * g10.c (main): Show errors for failure in export, send-keys, recv-keys, and refresh-keys. * options.h, g10.c (main): Give algorithm warnings for algorithms chosen against the --pgpX and --openpgp rules. * keydb.h, pkclist.c (algo_available): Make TIGER192 invalid in --openpgp mode. * sign.c (sign_file), pkclist.c (algo_available): Allow passing a hint of 0. 2003-05-01 David Shaw * tdbio.c (create_version_record): Only create new trustdbs with TM_CLASSIC or TM_PGP. * trustdb.h, trustdb.c (trust_string, get_ownertrust_string, get_validity_string, ask_ownertrust, validate_keys), pkclist.c (do_edit_ownertrust): Rename trust_string to trust_value_to_string for naming consistency. * trustdb.h, trustdb.c (string_to_trust_value): New function to translate a string to a trust value. * g10.c (main): Use string_to_trust_value here for --force-ownertrust. * options.h, g10.c (main), trustdb.c (trust_model_string, init_trustdb, check_trustdb, update_trustdb, get_validity, validate_one_keyblock): An "OpenPGP" trust model is misleading since there is no official OpenPGP trust model. Use "PGP" instead. 2003-04-30 David Shaw * build-packet.c (build_sig_subpkt): Comments. * exec.c (exec_write): Cast NULL to void* to properly terminate varargs list. * keyedit.c (show_key_with_all_names): Just for safety, catch an invalid pk algorithm. * sign.c (make_keysig_packet): Crucial that the call to mksubpkt comes LAST before the calls to finalize the sig as that makes it possible for the mksubpkt function to get a reliable pointer to the subpacket area. * pkclist.c (do_we_trust_pre): If an untrusted key was chosen by a particular user ID, use that ID as the one to ask about when prompting whether to use the key anyway. (build_pk_list): Similar change here when adding keys to the recipient list. * trustdb.c (update_validity): Fix bug that prevented more than one validity record per trust record. (get_validity): When retrieving validity for a (user) supplied user ID, return the validity for that user ID only, and do not fall back to the general key validity. (validate_one_keyblock): Some commentary on whether non-self-signed user IDs belong in the web of trust (arguably, they do). 2003-04-27 David Shaw * g10.c (main): Add --no-textmode. * export.c (do_export_stream), keyedit.c (show_key_with_all_names, menu_addrevoker), mainproc.c (check_sig_and_print), photoid.c (show_photos), sign.c (mk_notation_and_policy), trustdb.c (get_validity, reset_trust_records, validate_keys): Make some strings translatable. * mainproc.c (check_sig_and_print): Show digest algorithm and sig class when verifying a sig with --verbose on, and add version, pk and hash algorithms and sig class to VALIDSIG. * parse-packet.c (enum_sig_subpkt): Make a warning message a --verbose warning message since we don't need to warn every time we see an unknown critical (we only need to invalidate the signature). * trustdb.c (init_trustdb): Check the trustdb options even with TM_AUTO since the auto may become TM_CLASSIC or TM_OPENPGP. 2003-04-26 David Shaw * sign.c (do_sign): Show the hash used when making a signature in verbose mode. * tdbio.h, tdbio.c (tdbio_read_model): New function to return the trust model used in a given trustdb. * options.h, g10.c (main), trustdb.c (init_trustdb, check_trustdb, update_trustdb): Use tdbio_read_model to implement an "auto" trust model which is set via the trustdb. 2003-04-23 David Shaw * import.c (import_revoke_cert): Remove ultimate trust when revoking an ultimately trusted key. * keyedit.c (sign_uids): Allow replacing expired signatures. Allow duplicate signatures with --expert. * pkclist.c (check_signatures_trust): Don't display a null fingerprint when checking a signature with --always-trust enabled. * filter.h (progress_filter_context_t), progress.c (handle_progress), plaintext.c (ask_for_detached_datafile, hash_datafiles): Fix compiler warnings. Make "what" constant. * build-packet.c (do_plaintext): Do not create invalid literal packets with >255-byte names. 2003-04-15 Werner Koch * Makefile.am (AM_CFLAGS): Make use of AM_CFLAGS and AM_LDFLAGS. * g10.c, options.h: New option --enable-progress-filter. * progress.c (handle_progress): Make use of it. 2003-04-15 Marcus Brinkmann * progress.c: New file. * Makefile.am (common_source): Add progress.c. * filter.h (progress_filter_context_t): New type. (progress_filter, handle_progress): New prototypes. * main.h (open_sigfile): New argument for prototype. * openfile.c (open_sigfile): New argument to install progress filter. * encode.c (encode_simple): New variable PFX. Register progress filter. Install text_filter after that. (encode_crypt): Likewise. * sign.c (sign_file): Likewise. (clearsign_file): Likewise. * decrypt.c (decrypt_message): Likewise. (decrypt_messages): Likewise. * verify.c (verify_signatures): Likewise. (verify_one_file): Likewise. * plaintext.c (hash_datafiles): Likewise. (ask_for_detached_datafile): Likewise. 2003-04-10 Werner Koch * passphrase.c (read_passphrase_from_fd): Do a dummy read if the agent is to be used. Noted by Ingo Klöcker. (agent_get_passphrase): Inhibit caching when we have no fingerprint. This is required for key generation as well as for symmetric only encryption. * passphrase .c (agent_get_passphrase): New arg CANCELED. (passphrase_to_dek): Ditto. Passed to above. Changed all callers to pass NULL. * seckey-cert.c (do_check): New arg CANCELED. (check_secret_key): Terminate loop when canceled. * keyedit.c (change_passphrase): Pass ERRTEXT untranslated to passphrase_to_dek and translate where appropriate. * seckey-cert.c (check_secret_key): Ditto. * keygen.c (ask_passphrase): Ditto. * passphrase.c (agent_get_passphrase): Translate the TRYAGAIN_TEXT. Switch the codeset to utf-8. 2003-04-09 Werner Koch * decrypt.c (decrypt_messages): Fixed error handling; the function used to re-loop with same file after an error. Reported by Joseph Walton. 2003-04-08 David Shaw * main.h, g10.c (main), import.c (parse_import_options, fix_pks_corruption): It's really PKS corruption, not HKP corruption. Keep the old repair-hkp-subkey-bug command as an alias. * g10.c (main): Rename --no-version to --no-emit-version for consistency. Keep --no-version as an alias. 2003-04-04 David Shaw * pkclist.c (algo_available): PGP 8 can use the SHA-256 hash. * sign.c (sign_file, clearsign_file, sign_symencrypt_file): Remove unused code. 2003-04-01 Werner Koch * mainproc.c (check_sig_and_print): Add primary key fpr to VALIDSIG status. 2003-03-24 David Shaw * keydb.h: Err on the side of making an unknown signature a SIG rather than a CERT. * import.c (delete_inv_parts): Discard any key signatures that aren't key types (i.e. 0x00, 0x01, etc.) * g10.c (main): Add deprecated option warning for --list-ownertrust. Add --compression-algo alias for --compress-algo. Change --version output strings to match "showpref" strings, and make translatable. * status.c (do_get_from_fd): Accept 'y' as well as 'Y' for --command-fd boolean input. * trustdb.c: Fix typo (DISABLE_REGEXP -> DISABLE_REGEX) * keyedit.c (show_key_with_all_names_colon): Show no-ks-modify flag. 2003-03-11 David Shaw * options.h, g10.c (main), keyserver.c (kopts): Add "try-dns-srv" keyserver option. Defaults to on. * passphrase.c (agent_get_passphrase): Fix memory leak with symmetric messages. Fix segfault with symmetric messages. Fix incorrect prompt with symmetric messages. 2003-03-10 Werner Koch * compress.c (init_uncompress): Use a 15 bit window size so that the output of implementations which don't run for PGP 2 compatibility won't get garbled. 2003-03-04 David Shaw * trustdb.c (validate_keys): Mask the ownertrust when building the list of fully valid keys so that disabled keys are still counted in the web of trust. (get_ownertrust_with_min): Do the same for the minimum ownertrust calculation. * parse-packet.c (dump_sig_subpkt): Show the notation names for not-human-readable notations. Fix cosmetic off-by-one length counter. * options.skel: Add explantion and commented-out "no-mangle-dos-filenames". * mainproc.c (proc_encrypted): Make string translatable. * keyserver.c (keyserver_spawn): Quote ':', '%', and any 8-bit characters in the uid strings sent to the keyserver helper. * keyring.c (keyring_rebuild_cache): Lock the keyring while rebuilding the signature caches to prevent another gpg from tampering with the temporary copy. * keygen.c (keygen_set_std_prefs): Include AES192 and AES256 in default prefs. * keyedit.c (show_prefs): Make strings translatable. * keydb.c: Double the maximum number of keyrings to 40. * gpgv.c (main): Fix bug #113 - gpgv should accept the --ignore-time-conflict option. * g10.c (main): --openpgp disables --pgpX. Double the amount of secure memory to 32k (keys are getting bigger these days). * Makefile.am: Makefile.am: Use @CAPLIBS@ to link in -lcap if we are using capabilities. 2003-02-26 David Shaw * keyserver.c (keyserver_spawn): Include various pieces of information about the key in the data sent to the keyserver helper. This allows the helper to use it in instructing a remote server which may not have any actual OpenPGP smarts in parsing keys. * main.h, export.c (export_pubkeys_stream, do_export_stream): Add ability to return only the first match in an exported keyblock for keyserver usage. This should be replaced at some point with a more flexible solution where each key can be armored seperately. 2003-02-22 David Shaw * sign.c (sign_file): Do not push textmode filter onto an unopened IOBUF (segfault). Noted by Marcus Brinkmann. Push and reinitialize textmode filter for each file in a multiple file list. * packet.h, getkey.c (fixup_uidnode), keyedit.c (show_prefs): Set and show the keyserver no-modify flag. * keygen.c (add_keyserver_modify): New. (keygen_upd_std_prefs): Call it here. (keygen_set_std_prefs): Accept "ks-modify" and "no-ks-modify" as prefs to set and unset keyserver modify flag. * g10.c (main): Accept "s1" in addition to "idea" to match the other ciphers. * main.h, misc.c (idea_cipher_warn): We don't need this if IDEA has been disabled. 2003-02-21 David Shaw * keygen.c (keygen_set_std_prefs): Don't put AES or CAST5 in default prefs if they are disabled. * g10.c (main): Use 3DES instead of CAST5 if we don't have CAST5 support. Use 3DES for the s2k cipher in --openpgp mode. (print_mds): #ifdef all of the optional digest algorithms. 2003-02-12 David Shaw * keydb.h, getkey.c (classify_user_id, classify_user_id2): Make 'exact' a per-desc item. Merge into one function since 'force_exact' is no longer needed. (key_byname): Use new classify_user_id function, and new exact flag in KEYDB_SEARCH_DESC. * keyring.h, keyring.c (keyring_search): Return an optional index to show which KEYDB_SEARCH_DESC was the matching one. * keydb.h, keydb.c (keydb_search): Rename to keydb_search2, and pass the optional index to keyring_search. Add a macro version of keydb_search that calls this new function. * export.c (do_export_stream): If the keyid! syntax is used, export only that specified key. If the key in question is a subkey, export the primary plus that subkey only. 2003-02-11 David Shaw * exec.c (set_exec_path): Add debugging line. * g10.c (print_hex, print_mds): Print long hash strings a lot neater. This assumes at least an 80-character display, as there are a few other similar assumptions here and there. Users who need unformatted hashes can still use with-colons. Check that SHA384 and 512 are available before using them as they are no longer always available. * Makefile.am: Use a local copy of libexecdir along with @PACKAGE@ as GNUPG_LIBEXECDIR so it can be easily overridden at make time. 2003-02-04 David Shaw * armor.c (parse_hash_header, armor_filter): Accept the new SHAs in the armor Hash: header. * g10.c (print_hex): Print long hash strings a little neater. (print_mds): Add the new SHAs to the hash list. 2003-02-02 David Shaw * keyedit.c (menu_revuid): Properly handle a nonselfsigned uid on a v4 key (treat as a v4 revocation). * import.c (print_import_check): Do not re-utf8 convert user IDs. 2003-01-27 David Shaw * mainproc.c (list_node): Show signature expiration date in with-colons sig records. * keylist.c (list_keyblock_colon), mainproc.c (list_node): Show trust sig information in with-colons sig records. 2003-01-16 David Shaw * g10.c (add_group): Trim whitespace after a group name so it does not matter where the user puts the = sign. * options.skel: Comment out the first three lines in case someone manually copies the skel file to their homedir. * sign.c (clearsign_file): Only use pgp2mode with v3 keys and MD5. This matches what we do when decoding such messages and prevents creating a message (v3+RIPEMD/160) that we can't verify. * sig-check.c (signature_check2): Use G10ERR_GENERAL as the error for signature digest conflict. BAD_SIGN implies that a signature was checked and we may try and print out a user ID for a key that doesn't exist. 2003-01-15 David Shaw * trustdb.c (init_trustdb, get_validity): Don't use a changed trust model to indicate a dirty trustdb, and never auto-rebuild a dirty trustdb with the "always" trust model. * g10.c (add_group): Last commit missed the \t ;) 2003-01-14 David Shaw * packet.h, parse-packet.c (setup_user_id), free-packet.c (free_user_id), keydb.h, keyid.c (namehash_from_uid): New function to rmd160-hash the contents of a user ID packet and cache it in the uid object. * keylist.c (list_keyblock_colon): Use namehash in field 8 of uids. Show dates for creation (selfsig date), and expiration in fields 6 and 7. * trustdb.c (get_validity, get_validity_counts, update_validity): Use new namehash function rather than hashing it locally. 2003-01-14 Werner Koch * g10.c (add_group): Fixed group parsing to allow more than one delimiter in a row and also allow tab as delimiter. 2003-01-12 David Shaw * tdbio.c (tdbio_set_dbname): Fix assertion failure with non-fully-qualified trustdb names. 2003-01-11 David Shaw * trustdb.c (get_validity_info, get_ownertrust_info, trust_letter): Simplify by returning a ? for error directly. * keyedit.c (show_key_with_all_names): Use get_validity_string and get_ownertrust_string to show full word versions of trust (i.e. "full" instead of 'f'). * trustdb.h, trustdb.c (get_ownertrust_string, get_validity_string): Same as get_ownertrust_info, and get_validity_info, except returns a full string. * trustdb.c (get_ownertrust_with_min): New. Same as 'get_ownertrust' but takes the min_ownertrust value into account. 2003-01-10 David Shaw * armor.c (armor_filter): Comment about PGP's end of line tab problem. * trustdb.h, trustdb.c (trust_letter): Make static. (get_ownertrust_info, get_validity_info): Don't mask the trust level twice. * trustdb.h, gpgv.c, trustdb.c (get_validity, get_validity_info), keylist.c (list_keyblock_colon), keyedit.c (show_key_with_all_names_colon, menu_revuid): Pass a user ID in rather than a namehash, so we only have to do the hashing in one place. * packet.h, pkclist.c (build_pk_list), free-packet.c (release_public_key_parts): Remove unused namehash element for public keys. 2003-01-07 David Shaw * keygen.c (keygen_set_std_prefs): Warn when setting an IDEA preference when IDEA is not available. 2003-01-06 David Shaw * trustdb.c (get_validity_info): 'd' for disabled is not a validity value any more. * packet.h, tdbio.h, tdbio.c (tdbio_read_record, tdbio_write_record), trustdb.c (update_validity): Store temporary full & marginal counts in the trustdb. (clear_validity, get_validity_counts): Return and clear temp counts. (store_validation_status): Keep track of which keyids have been stored. (validate_one_keyblock, validate_key_list): Use per-uid copies of the full & marginal counts so they can be recalled for multiple levels. (validate_keys): Only use unused keys for each new round. (reset_unconnected_keys): Rename to reset_trust_records, and only skip specifically excluded records. * keylist.c (print_capabilities): Show 'D' for disabled keys in capabilities section. * trustdb.c (is_disabled): Remove incorrect comment. 2003-01-03 David Shaw * import.c (import_one): Only do the work to create the status display for interactive import if status is enabled. * keyring.c (keyring_search): skipfnc didn't work properly with non-keyid searches. Noted by Stefan Bellon. * getkey.c (merge_selfsigs_main): Remove some unused code and make sure that the pk selfsigversion member accounts for 1F direct sigs. 2003-01-02 Werner Koch * keydb.c (keydb_add_resource): Don't assume that try_make_homedir terminates but check again for the existence of the directory and continue then. * openfile.c (copy_options_file): Print a warning if the skeleton file has active options. 2002-12-29 David Shaw * getkey.c (merge_selfsigs_main), main.h, sig-check.c (check_key_signature2): Pass the ultimately trusted pk directly to check_key_signature2 to avoid going through the key selection mechanism. This prevents a deadly embrace when two keys without selfsigs each sign the other. 2002-12-27 David Shaw * keyserver.c (keyserver_refresh): Don't print the "refreshing..." line if there are no keys to refresh or if there is no keyserver set. * getkey.c (merge_selfsigs_main): Any valid user ID should make a key valid, not just the last one. This also fixes Debian bug #174276. 2002-12-27 Stefan Bellon * import.c (print_import_check): Changed int to size_t. 2002-12-27 David Shaw * keyedit.c (keyedit_menu, menu_revuid): Add "revuid" feature to revoke a user ID. This is the same as issuing a revocation for the self-signature, but a much simpler interface to do it. 2002-12-26 David Shaw * keydb.h, getkey.c (key_byname): Flag to enable or disable including disabled keys. Keys specified via keyid (i.e. 0x...) are always included. * getkey.c (get_pubkey_byname, get_seckey_byname2, get_seckey_bynames), keyedit.c (keyedit_menu, menu_addrevoker): Include disabled keys in these functions. * pkclist.c (build_pk_list): Do not include disabled keys for -r or the key prompt. Do include disabled keys for the default key and --encrypt-to. * trustdb.h, trustdb.c (is_disabled): New skipfnc for skipping disabled keys. * gpgv.c (is_disabled): Stub. * keygen.c (keygen_add_key_expire): Properly handle updating a key expiration to a no-expiration value. * keyedit.c (enable_disable_key): Comment. * import.c (import_one): When in interactive mode and --verbose, don't repeat some key information twice. 2002-12-22 Timo Schulz * import.c (print_import_check): New. (import_one): Use it here. Use merge_keys_and_selfsig in the interactive mode to avoid wrong key information. * status.h: Add new status code. * status.c: Ditto. 2002-12-13 David Shaw * pkclist.c (do_we_trust): Tweak language to refer to the "named user" rather than "owner". Noted by Stefan Bellon. * trustdb.h, trustdb.c (trustdb_pending_check): New function to check if the trustdb needs a check. * import.c (import_keys_internal): Used here so we don't rebuild the trustdb if it is still clean. (import_one, chk_self_sigs): Only mark trustdb dirty if the key that is being imported has any sigs other than self-sigs. Suggested by Adrian von Bidder. * options.skel: Include the required '=' sign in the sample 'group' option. Noted by Stefan Bellon. * import.c (chk_self_sigs): Don't try and check a subkey as if it was a signature. 2002-12-11 David Shaw * tdbio.c (tdbio_read_record, tdbio_write_record): Compact the RECTYPE_TRUST records a bit. * g10.c (main): Comment out --list-trust-path until it can be implemented. * import.c (import_one): Warn when importing an Elgamal primary that this may take some time (to verify self-sigs). (chk_self_sigs): Try and cache all self-sigs so the keyblock is written to the keyring with a good rich cache. * keygen.c (ask_algo): Make the Elgamal sign+encrypt warning stronger, and remove the RSA sign+encrypt warning. 2002-12-06 Stefan Bellon * options.h: Fixed typo (mangle_dos_names instead of mangle_dos_filenames). 2002-12-05 Werner Koch * g10.c: New options --[no-]mangle-dos-filenames. * options.h (opt): Added mangle-dos-filenames. * openfile.c (open_outfile) [USE_ONLY_8DOT3]: Truncate the filename only when this option is set; this is the default. 2002-12-04 David Shaw * main.h, keyedit.c, keygen.c: Back out previous (2002-12-01) change. Minimal isn't always best. * sign.c (update_keysig_packet): Use the current time rather then a modification of the original signature time. Make sure that this doesn't cause a time warp. * keygen.c (keygen_add_key_expire): Properly handle a key expiration date in the past (use a duration of 0). * keyedit.c (menu_expire): Use update_keysig_packet so any sig subpackets are maintained during the update. * build-packet.c (build_sig_subpkt): Mark sig expired or unexpired when the sig expiration subpacket is added. (build_sig_subpkt_from_sig): Handle making an expiration subpacket from a sig that has already expired (use a duration of 0). * packet.h, sign.c (update_keysig_packet), keyedit.c (menu_set_primary_uid, menu_set_preferences): Add ability to issue 0x18 subkey binding sigs to update_keysig_packet and change all callers. * trustdb.c (validate_keys): Show trust parameters when building the trustdb, and make sure that the version record update was successful. (init_trustdb): If the current parameters aren't what was used for building the trustdb, the trustdb is invalid. * tbio.c (tdbio_db_matches_options): Update to work with new trustdbs. 2002-12-03 David Shaw * tdbio.h, tdbio.c (tdbio_read_record, tdbio_write_record): Store trust model in the trustdb version record. (tdbio_update_version_record): New function to update version record values during a trustdb check or update. (tdbio_dump_record): Show trust model in dump. * trustdb.c (validate_keys): Call tdbio_update_version_record on success so that the correct options are stored in the trustdb. * options.h: rearrange trust models so that CLASSIC is 0 and OPENPGP is 1. * options.h, g10.c (main), encode.c (write_pubkey_enc_from_list), pkclist.c (algo_available), revoke.c (gen_revoke): Add --pgp8 mode. This is basically identical to --pgp7 in all ways except that signing subkeys, v4 data sigs (including expiration), and SK comments are allowed. * getkey.c (finish_lookup): Comment. * main.h, keylist.c (reorder_keyblock), keyedit.c (keyedit_menu): Reorder user ID display in the --edit-key menu to match that of the --list-keys display. * g10.c (add_notation_data): Fix initialization. 2002-12-01 David Shaw * keyedit.c (menu_expire): Don't lose key flags when changing the expiration date of a subkey. This is not the most optimal solution, but it is minimal change on the stable branch. * main.h, keygen.c (do_copy_key_flags): New function to copy key flags, if any, from one sig to another. (do_add_key_expire): New function to add key expiration to a sig. (keygen_copy_flags_add_expire): New version of keygen_add_key_expire that also copies key flags. (keygen_add_key_flags_and_expire): Use do_add_key_expire. * import.c (fix_hkp_corruption): Comment. 2002-11-25 Stefan Bellon * plaintext.c (handle_plaintext) [__riscos__]: If nooutput is set, no filetype is needed obviously. 2002-11-24 David Shaw * main.h, misc.c (default_cipher_algo, default_compress_algo): New. Return the default algorithm by trying --cipher-algo/--compress-algo, then the first item in the pref list, then s2k-cipher-algo or ZIP. * sign.c (sign_file, sign_symencrypt_file), encode.c (encode_simple, encode_crypt): Call default_cipher_algo and default_compress_algo to get algorithms. * g10.c (main): Allow pref selection for compress algo with --openpgp. * mainproc.c (proc_encrypted): Use --s2k-digest-algo for passphrase mangling rather than --digest-algo. * sign.c (hash_for): If --digest-algo is not set, but --personal-digest-preferences is, then use the first hash algorithm in the personal list. If the signing algorithm is DSA, then use the first 160-bit hash algorithm in the personal list. If --pgp2 is set and it's a v3 RSA key, use MD5. * g10.c (main), keydb.c (keydb_add_resource, keydb_locate_writable): Rename --default-keyring as --primary-keyring. Stefan wins the naming contest. 2002-11-23 David Shaw * g10.c (add_notation_data): Disallow notation names that do not contain a '@', unless --expert is set. This is to help prevent people from polluting the (as yet unused) IETF namespace. * main.h: Comments about default algorithms. * photoid.c (image_type_to_string): Comments about 3-letter file extensions. * encode.c (encode_simple), passphrase.c (passphrase_to_dek), sign.c (sign_symencrypt_file): Use --s2k-digest-algo for passphrase mangling rather than --digest-algo. 2002-11-21 David Shaw * keygen.c (keygen_set_std_prefs): Properly handle an empty preference string. * misc.c (string_to_compress_algo): "none" is a bad choice since it conflicts with the "none" in setpref. 2002-11-14 David Shaw * g10.c (main): Allow compression algorithm names as the argument to --compress-algo. The old algorithm names still work for backwards compatibility. * misc.c (string_to_compress_algo): Allow "none" as an alias for "uncompressed". 2002-11-13 Stefan Bellon * getkey.c (get_pubkey_byfprint_fast): Fixed type incompatibility, was unsigned char instead of byte. 2002-11-13 David Shaw * encode.c (encode_simple): Make sure that files larger than about 4G use partial length encoding. This is required because OpenPGP allows only for 32 bit length fields. From Werner on stable branch. * getkey.c (get_pubkey_direct): Renamed to... (get_pubkey_fast): this and made extern. (get_pubkey_byfprint_fast): New. From Werner on stable branch. * keydb.h, import.c (import_one): Use get_pubkey_fast instead of get_pubkey. We don't need a merged key and actually this might lead to recursions. (revocation_present): Likewise for search by fingerprint. From Werner on stable branch. * g10.c (main): Try to create the trustdb even for non-colon-mode list-key operations. This is required because getkey needs to know whether a a key is ultimately trusted. From Werner on stable branch. * exec.c [__CYGWIN32__]: Keep cygwin separate from Mingw32; we don't need it here as it behaves more like a Posix system. From Werner on stable branch. * passphrase.c (agent_get_passphrase): Ditto. From Werner on stable branch. * tdbio.c (MY_O_BINARY): Need binary mode with Cygwin. From Werner on stable branch. * g10.c, gpgv.c (main) [__CYGWIN32__]: Don't get the homedir from the registry. From Werner on stable branch. * keyedit.c (show_key_with_all_names_colon): Make --with-colons --edit display match the validity and trust of --with-colons --list-keys. * passphrase.c (agent_send_all_options): Fix compile warning. * keylist.c (list_keyblock_colon): Validity for subkeys should match that of the primary key, and not that of the last user ID. * getkey.c (merge_selfsigs): Revoked/expired/invalid primary keys carry these facts onto all their subkeys, but only after the subkey has a chance to be marked valid. This is to fix an incorrect "invalid public key" error verifying a signature made by a revoked signing subkey, with a valid unrevoked primary key. 2002-11-09 Werner Koch * passphrase.c (agent_send_all_options): Use tty_get_ttyname to get the default ttyname. 2002-11-07 David Shaw * keyring.h, keyring.c (keyring_register_filename): Return the pointer if a given keyring is registered twice. * keydb.h, keydb.c (keydb_add_resource): Use flags to indicate a default keyring. (keydb_locate_writable): Prefer the default keyring if possible. * g10.c (main): Add --default-keyring option. 2002-11-06 David Shaw * options.h, g10.c (main), trustdb.c (ask_ownertrust): Add --force-ownertrust option for debugging purposes. This allows setting a whole keyring to a given trust during an --update-trustdb. Not for normal use - it's just easier than hitting "4" all the time to test a large trustdb. * pubkey-enc.c (get_session_key): With hidden recipients or try a given passphrase against all secret keys rather than trying all secret keys in turn. Don't if --try-all-secrets or --status-fd is enabled. * passphrase.c (passphrase_to_dek): Mode 1 means do a regular passphrase query, but don't prompt with the key info. * seckey-cert.c (do_check, check_secret_key): A negative ask count means to enable passphrase mode 1. * keydb.h, getkey.c (enum_secret_keys): Add flag to include secret-parts-missing keys (or not) in the list. 2002-11-05 David Shaw * keyserver.c (keyserver_search_prompt): When --with-colons is enabled, don't try and fit the search output to the screen size - just dump the whole list. 2002-11-04 David Shaw * keyserver.c (keyserver_search_prompt): When --with-colons is enabled, just dump the raw keyserver protocol to stdout and don't print the menu. * keyserver.c (show_prompt): Don't show a prompt when command-fd is being used. * trustdb.c (trust_model_string, check_trustdb, update_trustdb, validate_one_keyblock): It's not clear what a trustdb rebuild or check means with a trust model other than "classic" or "openpgp", so disallow this. 2002-11-03 David Shaw * options.h, g10.c (main): Add --trust-model option. Current models are "openpgp" which is classic+trustsigs, "classic" which is classic only, and "always" which is the same as the current option --always-trust (which still works). Default is "openpgp". * trustdb.c (validate_one_keyblock): Use "openpgp" trust model to enable trust sigs. * gpgv.c (main), mainproc.c (check_sig_and_print), pkclist.c (do_we_trust, do_we_trust_pre, check_signatures_trust): Use new --trust-model option in place of --always-trust. * keyedit.c (sign_mk_attrib, trustsig_prompt, sign_uids, keyedit_menu): Prompt for and create a trust signature with "tsign". This is functional, but needs better UI text. * build-packet.c (build_sig_subpkt): Able to build trust and regexp subpackets. * pkclist.c (do_edit_ownertrust): Comment. 2002-11-02 David Shaw * keygen.c (set_one_pref, keygen_set_std_prefs): Allow using the full algorithm name (CAST5, SHA1) rather than the short form (S3, H2). * main.h, keygen.c (keygen_get_std_prefs), keyedit.c (keyedit_menu): Return and use a fake uid packet rather than a string since we already have a nice parser/printer in keyedit.c:show_prefs. * main.h, misc.c (string_to_compress_algo): New. 2002-11-01 David Shaw * g10.c (main): Add --no-throw-keyid. * keydb.h, encode.c (write_pubkey_enc_from_list), g10.c (main), pkclist.c (build_pk_list): Add --hidden-recipient (-R) and --hidden-encrypt-to, which do a single-user variation on --throw-keyid. The "hide this key" flag is carried in bit 0 of the pk_list flags field. * keyserver.c (parse_keyrec): Fix shadowing warning. 2002-10-31 Stefan Bellon * compress.c (init_compress) [__riscos__]: Use riscos_load_module() to load ZLib module. * g10.c (main) [__riscos__]: Renames due to changes in riscos.c (e.g. prefixes all RISC OS specific functions with riscos_*). * photoid.c (show_photos) [__riscos__]: Likewise. * signal.c (got_fatal_signal) [__riscos__]: Likewise. * trustdb.c (check_regexp) [__riscos__]: Branch to RISC OS RegEx handling. 2002-10-31 David Shaw * build-packet.c (do_plaintext), encode.c (encode_sesskey, encode_simple, encode_crypt), sign.c (write_plaintext_packet): Use wipememory() instead of memset() to wipe sensitive memory as the memset() might be optimized away. 2002-10-30 David Shaw * trustdb.c (check_regexp): Modern regexps require REG_EXTENDED. 2002-10-29 David Shaw * packet.h, trustdb.h, trustdb.c (trust_string): New. Return a string like "fully trusted", "marginally trusted", etc. (get_min_ownertrust): New. Return minimum ownertrust. (update_min_ownertrust): New. Set minimum ownertrust. (check_regexp): New. Check a regular epression against a user ID. (ask_ownertrust): Allow specifying a minimum value. (get_ownertrust_info): Follow the minimum ownertrust when returning a letter. (clear_validity): Remove minimum ownertrust when a key becomes invalid. (release_key_items): Release regexp along with the rest of the info. (validate_one_keyblock, validate_keys): Build a trust sig chain while validating. Call check_regexp for regexps. Use the minimum ownertrust if the user does not specify a genuine ownertrust. * pkclist.c (do_edit_ownertrust): Only allow user to select a trust level greater than the minimum value. * parse-packet.c (can_handle_critical): Can handle critical trust and regexp subpackets. * trustdb.h, trustdb.c (clear_ownertrusts), delkey.c (do_delete_key), import.c (import_one): Rename clear_ownertrust to clear_ownertrusts and have it clear the min_ownertrust value as well. * keylist.c (list_keyblock_print): Indent uid to match pub and sig. * keyedit.c (print_and_check_one_sig, show_key_and_fingerprint, menu_addrevoker), keylist.c (list_keyblock_print, print_fingerprint): Show "T" or the trust depth for trust signatures, and add spaces to some strings to make room for it. * packet.h, parse-packet.c (dump_sig_subpkt, parse_one_sig_subpkt, parse_signature): Parse trust signature values. * tdbio.h, tdbio.c (tdbio_read_record, tdbio_write_record): Reserve a byte for the minimum ownertrust value (for use with trust signatures). 2002-10-29 Stefan Bellon * build-packet.c (calc_plaintext, do_plaintext): Removed RISC OS specific filetype parts (it's now done in make_basename()). * plaintext.c (handle_plaintext): Tidied up RISC OS specific filetype parts. * encode.c (encode_simple, encode_crypt): Added argument to make_basename() call. * sign.c (write_plaintext_packet): Added argument to make_basename() call. 2002-10-28 Stefan Bellon * build-packet.c (calc_plaintext, do_plaintext): Added filetype handling for RISC OS' file types. * plaintext.c (handle_plaintext) [__riscos__]: Added filetype handling for RISC OS' file types. 2002-10-23 David Shaw * main.h, import.c (sec_to_pub_keyblock, import_secret_one, parse_import_options), g10.c (main): New import-option "convert-sk-to-pk" to convert a secret key into a public key during import. It is on by default. 2002-10-23 Werner Koch * pubkey-enc.c (get_it): Fix segv, test for revoked only when PK has been assigned. 2002-10-18 Timo Schulz * keylist.c: (print_pubkey_info): New. (print_seckey_info): New. * main.h: Prototypes for the new functions. * delkey.c (do_delete_key): Use it here. * revoke.c (gen_desig_revoke): Ditto. 2002-10-17 Werner Koch * pkclist.c (do_edit_ownertrust): Show all user IDs. This should be enhanced to also show the current trust level. Suggested by Florian Weimer. 2002-10-17 David Shaw * g10.c (main): Handle --strict and --no-strict from the command line before the options file is loaded. 2002-10-15 David Shaw * g10.c (main): Disable --textmode when encrypting (symmetric or pk) in --pgp2 mode as PGP 2 can't handle the unknown length literal packet. Reported by Michael Richardson. 2002-10-14 David Shaw * keyserver-internal.h, keyserver.c (print_keyrec, parse_keyrec, show_prompt, keyserver_search_prompt, keyserver_spawn): Go to version 1 of the keyserver protocol. This is a better design, similar to --with-colons, that allows for keys with multiple user IDs rather than using multiple keys. It also matches the machine readable pksd format. Also use a prettier --search-keys listing format that can fill different size windows (currently set at 24 lines). 2002-10-12 Werner Koch * keygen.c (print_status_key_created): New. (do_generate_keypair): Use it to print the fingerprint. (generate_subkeypair): Likewise. 2002-10-11 David Shaw * keyedit.c (menu_addrevoker): Properly back out if the signature fails. Also, do not allow appointing the same revoker twice, and report ALREADY_SIGNED if the user tries it. 2002-10-07 David Shaw * import.c (import_keys_internal): Missed one s/inp/inp2/. * keylist.c (print_capabilities): Properly indicate per-key capabilities of sign&encrypt primary keys that have secret-parts-missing (i.e. no capabilities at all) * mainproc.c (symkey_decrypt_sesskey): Fix compiler warning. 2002-10-04 David Shaw * getkey.c (get_pubkey_direct): Don't cache keys retrieved via this function as they may not have all their fields filled in. * sig-check.c (signature_check2): Use new is_primary flag to check rather than comparing main_keyid with keyid as this still works in the case of a not fully filled in pk. 2002-10-04 Werner Koch * import.c (import_keys_internal): s/inp/inp2/ to avoid shadowing warning. * passphrase.c (agent_get_passphrase): Fixed signed/unsigned char problem in %-escaping. Noted by Ingo Klöcker. 2002-10-03 David Shaw * options.h, g10.c (main): Add --strict and --no-strict to switch the log_warning severity level from info to error. * keylist.c (print_capabilities): Secret-parts-missing keys should show that fact in the capabilities, and only primary signing keys can certify other keys. * packet.h, parse_packet.c (parse_key): Add is_primary flag for public keys (it already exists for secret keys). 2002-10-02 David Shaw * import.c (import_secret_one): Check for an illegal (>110) protection cipher when importing a secret key. * keylist.c (list_keyblock_print): Show a '#' for a secret-parts-missing key. * parse_packet.c (parse_key): Some comments. * revoke.c (gen_revoke): Remove some debugging code. * trustdb.c (verify_own_keys): Make trusted-key a non-deprecated option again. * seckey-cert.c (do_check): Don't give the IDEA warning unless the cipher in question is in fact IDEA. 2002-10-01 David Shaw * import.c (import_one): Make sure that a newly imported key starts with a clean ownertrust. 2002-10-01 Werner Koch * getkey.c (get_pubkey_direct): New. (merge_selfsigs_main): Use it here to look for an ultimately trusted key. Using the full get_pubkey might lead to an infinitive recursion. 2002-09-29 David Shaw * keyserver.c (parse_keyserver_uri): Force the keyserver URI scheme to lowercase to be case-insensitive. 2002-09-28 David Shaw * export.c (do_export_stream): Comment. * sig-check.c (check_key_signature2): Properly handle a non-designated revocation import. 2002-09-26 Werner Koch * g10.c (set_homedir): New. Changed all direct assignments to use this. * gpgv.c (set_homedir): Ditto. 2002-09-25 David Shaw * Makefile.am: Link gpg with EGDLIBS (i.e. NETLIBS) as EGD uses sockets. Remove the old NETLIBS variable since the keyserver stuff is no longer internal. 2002-09-24 David Shaw * import.c (import_keys_stream): Fix compiler type warning. * keyring.c (keyring_rebuild_cache), sig-check.c (check_key_signature2), import.c (import, chk_self_sigs): Minor language cleanups. 2002-09-23 Stefan Bellon * main.h: Introduced fast-import as import option. Removed fast as separate option from prototypes. * import.c (parse_import_options): Added fast-import option. (import_*): Removed fast as separate option. * g10.c (main): Added option fast-import, removed old fast as separate argument. * keyserver.c (keyserver_spawn): Removed old fast as separate argument. 2002-09-22 Stefan Bellon * import.c (import_keys, import_keys_stream, import_keys_internal): Added trustdb update/check to key import if not fast-import and interactive set/no-auto-check-trustdb unset. Avoided function clone by introducing import_keys_internal. 2002-09-19 David Shaw * keyserver.c (keyserver_spawn): Properly handle line truncation. Don't leak memory (~10-20 bytes) on searches. (keyserver_search_prompt): Cleanup. * keylist.c (list_keyblock_colon): Show 1F direct key signatures in --with-colons listing. 2002-09-16 David Shaw * keyedit.c (menu_addrevoker): The direct key signature for revocation keys must be at least v4 to carry the revocation key subpacket. Add a PGP 2.x warning for revocation keys. 2002-09-14 David Shaw * g10.c (check_permissions): Rearrange strings to make translating easier (don't incorporate string parts). * keyedit.c (sign_uids): Make strings translatable. * sig-check.c (check_key_signature2): Make string translatable. 2002-09-13 David Shaw * getkey.c (check_revocation_keys): Move.... * main.h, sig-check.c (check_revocation_keys): to here. Also return the signature_check error code rather than 0/1 and cache the sig result. * sig-check.c (check_key_signature2): Divert to check_revocation_keys if a revocation sig is made by someone other than the pk owner. * getkey.c (merge_selfsigs_main): Tidy. 2002-09-13 Werner Koch * g10.c (main) [__MINGW32__]: Activate oLoadExtension. 2002-09-12 David Shaw * Makefile.am, hkp.c, hkp.h, keyserver.c (keyserver_work): Remove internal HKP support. * keyserver.c (keyserver_spawn): Remove whitespace after keyserver commands. 2002-09-10 David Shaw * exec.c (expand_args): Remove loop left over from earlier implementation. (exec_write): Missed one tick. 2002-09-10 Werner Koch * g10.c, options.h: Removed option --emulate-checksum-bug. * misc.c (checksum_u16_nobug): Removed. (checksum_u16): Removed the bug emulation. (checksum_mpi): Ditto. (checksum_mpi_counted_nbits): Removed and replaced all calls with checksum_mpi. * parse-packet.c (read_protected_v3_mpi): New. (parse_key): Use it here to store it as an opaque MPI. * seckey-cert.c (do_check): Changed the v3 unprotection to the new why to store these keys. (protect_secret_key): Likewise. * build-packet.c (do_secret_key): And changed the writing. * tdbio.c (tdbio_set_dbname, open_db): Use new macro MY_O_BINARY to avoid silly ifdefs. (open_db): Fallback to RDONLY so that gpg may be used from a RO-medium. * encode.c (encode_simple): Make sure we don't use an ESK packet when we don't have a salt in the S2K. * misc.c (pct_expando) : Make sure that LEN is initialized. * exec.c (exec_finish): Use ticks to denote filenames in messages. (make_tempdir, exec_write): Changed format of messages. * keyserver.c (print_keyinfo): Release USERID in on error. (keyserver_work) [!DISABLE_KEYSERVER_HELPERS]: Exclude the unused code. 2002-09-09 Werner Koch * parse-packet.c (make_attribute_uidname): Add new ar MAX_NAMELEN for sanity checks. Changed both callers. Limit the size of an %s. * options.skel: Comment lock-once out, so that this file does not change anything when copied to a new home directory. * openfile.c (try_make_homedir): Don't exit after copying the option skeleton. * options.h: Don't use a comma when declaring variables over more than one line. * mainproc.c (symkey_decrypt_sesskey): Check length of the session key. * hkp.c (dehtmlize): Use ascii_tolower to protect against weird locales. Cast the argument for isspace for the sake of broken HP/UXes. (parse_hkp_index): s/ascii_memcasecmp/ascii_strncasecmp/. * g10.c: Removed option --emulate-3des-s2k-bug. * passphrase.c (hash_passphrase): Was used here. * export.c (parse_export_options) * keyserver.c (parse_keyserver_options) * import.c (parse_import_options) * g10.c (check_permissions): s/ascii_memcasecmp/ascii_strncasecmp/. 2002-09-09 David Shaw * g10.c (add_group): Use '=' to separate group name from group members. Use a better error message for when no = is found. * hkp.c (hkp_export): Use CRLF in headers. 2002-09-03 David Shaw * mainproc.c (print_pkenc_list): Don't increment the error counter when printing the list of keys a message was encrypted to. This would make gpg give a non-zero exit code even for completely valid messages if the message was encrypted to more than one key that the user owned. 2002-09-02 Werner Koch * g10.c (main): Try to set a default character set. Print the used one in verbosity level 3. * gpgv.c (main): Try to set a default character set. * status.c, status.h (STATUS_IMPORT_OK): New. * import.c (import_one,import_secret_one): Print new status. 2002-08-30 David Shaw * pkclist.c (build_pk_list): Add new status code to indicate an untrusted user. This (or a disabled key) fail with "unavailable pubkey" (G10ERR_UNU_PUBKEY). * pkclist.c (build_pk_list): Fail if any recipient keys are unusable. * options.skel: The PGP LDAP keyserver is back. Use MIT keyserver as a sample rather than cryptnet as cryptnet does not support searching yet. * keyedit.c (show_key_with_all_names): Fix error message (preferences are userid/selfsig and not key specific). 2002-08-30 Werner Koch * pkclist.c (do_we_trust_pre): Changed the wording of a warning. * encode.c (encode_simple,encode_crypt): Use new style CTB for compressssed packets when using MDC. We need to do this so that concatenated messages are properly decrypted. Old style compression assumes that it is the last packet; given that we can't determine the length in advance, the uncompressor does not know where to start. Actually we should use the new CTB always but this would break PGP 2 compatibility. * parse-packet.c (parse): Special treatment for new style CTB compressed packets. * build-packet.c (do_mdc): Removed. Was not used. (do_encrypted_mdc): Count in the version number and the MDC packet. 2002-08-28 David Shaw * sig-check.c (do_check_messages, do_check): Show keyid in error messages. * keyserver.c (print_keyinfo): More readable key listings for --search-keys responses. 2002-08-26 David Shaw * hkp.c (parse_hkp_index, dehtmlize): Move HTML functionality into new "dehtmlize" function. Remove HTML before trying to parse each line from the keyserver. If the keyserver provides key type information in the listing, use it. 2002-08-23 David Shaw * sig-check.c (do_check, do_check_messages): Emit the usual sig warnings even for cached sigs. This also serves to protect against missing a sig expiring while cached. * getkey.c (merge_selfsigs_main): Don't check UID self-sigs twice. 2002-08-22 David Shaw * import.c (clean_subkeys, chk_self_sigs): Merge clean_subkeys into chk_self_sigs. This improves efficiency as the same signatures are not checked multiple times. Clarify when a subkey is revoked (any revocation signature, even if it is dated before the binding signature). * getkey.c (merge_selfsigs_subkey): Subkey revocation comments. * keylist.c (list_one): Stats are only for public key listings. * g10.c (main), options.skel: Default should be include-revoked for keyserver operations. 2002-08-21 Werner Koch * import.c (import_print_stats): Print new non_imported counter which is currently not used because we terminate on errors. 2002-08-20 David Shaw * options.skel: Document no-include-attributes for keyserver-options. * keylist.c, keyedit.c, keyserver.c, sign.c: Some TODOs and comments. * export.c (do_export_stream): Fix noop bug in exporting sensitive revocation keys. * pkclist.c (do_edit_ownertrust): Comment out the option for showing trust paths until it can be implemented. 2002-08-19 Werner Koch * getkey.c (get_user_id_native): Renamed to .. (get_user_id_printable): this. Filter out all dangerous characters. Checked all usages. (get_user_id_string_native): Renamed to.. (get_user_id_string_printable): this. Filter out all dangerous characters. Checked all usages. * keyedit.c (show_basic_key_info): New. * keylist.c (print_fingerprint): New mode 3. * import.c (import_one): Use new function to display the user ID. 2002-08-16 Timo Schulz * g10.c (main): Enable opt.interactive. * import.c (import_one): Ask the user if the key shall be imported when the interactive mode is used. Useful to extract selected keys from a file. 2002-08-16 Werner Koch * seckey-cert.c: Workaround to allow decryption of v3 keys created with a bug in the mpi_get_secure_buffer. 2002-08-14 David Shaw * hkp.c (parse_hkp_index): Properly handle really large keys (5 digit key length) in HKP searches. 2002-08-13 David Shaw * encode.c (encode_simple): Fix problem with using compression algo 2 and symmetric compressed files. * encode.c (encode_simple, encode_crypt): If we are not using a MDC, compress even if a file is already compressed. This is to help against the chosen ciphertext attack. * pkclist.c (select_algo_from_prefs): Fix requested algorithm bug so the request succeeds even if the requested algorithm is not the first found. * cipher.c (write_header), encode.c (use_mdc, encode_simple, encode_crypt, encrypt_filter), g10.c (main): Be more eager to use a MDC. We use a MDC if the keys directly support it, if the keys list AES (any) or TWOFISH anywhere in the prefs, or if the cipher chosen does not have a 64 bit blocksize. 2002-08-08 David Shaw * options.skel: Some language tweaks, and remove the load-extension section for random gatherers. * keyring.c (create_tmp_file, rename_tmp_file): Create tmp files with user-only permissions, but restore the original permissions if the user has something special set. * openfile.c (copy_options_file): Create new options file (gpg.conf) with user-only permissions. * keydb.c (keydb_add_resource): Create new keyrings with user-only permissions. * tdbio.c (tdbio_set_dbname): Create new trustdbs with user-only permissions. 2002-08-07 David Shaw * sig-check.c (signature_check2): Sanity check that the md has a context for the hash that the sig is expecting. This can happen if a onepass sig header does not match the actual sig, and also if the clearsign "Hash:" header is missing or does not match the actual sig. * keyedit.c (menu_revsig): Properly show a uid is revoked without restarting gpg. This is Debian bug 124219, though their supplied patch will not do the right thing. * main.h, tdbio.c (tdbio_set_dbname), misc.c (removed check_permissions), keydb.c (keydb_add_resource), g10.c (main, check_permissions): Significant reworking of the permission check mechanism. The new behavior is to check everything in the homedir by checking the homedir itself. If the user wants to put (possibly shared) keyrings outside the homedir, they are not checked. The options file and any extension files are checked wherever they are, as well as their enclosing directories. This is Debian bug 147760. 2002-08-06 Stefan Bellon * g10.c (main): Use of EXTSEP_S in new gpg.conf string. * openfile.c (copy_options_file): Ditto. 2002-08-06 David Shaw * options.h, g10.c (main), mainproc.c (proc_encrypted): --ignore-mdc-error option to turn a MDC check error into a warning. * encode.c (encode_crypt), g10.c (main), sign.c (sign_file, clearsign_file): Use the same --pgpX warning string everywhere to ease translations. * encode.c (write_pubkey_enc_from_list): Warn when using --throw-keyid with --pgpX. Noted by Vedaal Nistar. * revoke.c (export_minimal_pk, gen_desig_revoke, gen_revoke): Export a minimal pk along with the revocation cert when in --pgpX mode so that PGP can import it. 2002-08-06 Werner Koch * options.skel: Changed comments. * g10.c (main): Try to use "gpg.conf" as default option file. * openfile.c (copy_options_file): Changed name of created file. 2002-08-02 Werner Koch * Makefile.am (LDFLAGS): Removed DYNLINK_LDFLAGS. 2002-07-30 David Shaw * options.h, g10.c (main), mainproc.c (proc_encrypted): Return a decryption failed error if a MDC does not verify. Warn if a MDC is not present (can disable via --no-mdc-warning). * exec.c (exec_write), g10.c (main), keyserver.c (keyserver_spawn): Use new DISABLE_KEYSERVER_PATH rather than FIXED_EXEC_PATH. 2002-07-28 David Shaw * sig-check.c (do_check): Properly validate v4 sigs with no hashed section at all. 2002-07-25 Werner Koch * delkey.c (do_delete_key): Always allow to delete a key in batch mode when specified by fingerprint. Suggested by Enzo Michelangeli. 2002-07-25 David Shaw * keyedit.c (menu_revsig): Change "revsig" to honor selected uids so the user can revoke sigs from particular uids only. * keylist.c (list_keyblock_print): Don't display expired uids in --list-keys unless -v and not --list-sigs (just like revoked uids). * exec.c, export.c, import.c, keyedit.c, keyserver.c, misc.c: "Warning" -> "WARNING" 2002-07-24 David Shaw * main.h, import.c (parse_import_options, fix_hkp_corruption, import_one, delete_inv_parts), g10.c (main): New import-option "repair-hkp-subkey-bug", which repairs as much as possible the HKP mangling multiple subkeys bug. It is on by default for keyserver receives, and off by default for regular --import. * main.h, import.c (import, import_one, delete_inv_parts), hkp.c (hkp_ask_import), keyserver.c (keyserver_spawn): Use keyserver import options when doing keyserver receives. * options.h, exec.h, exec.c (set_exec_path, exec_write), g10.c (main), keyserver.c (keyserver_spawn): If the user does not use "exec-path", completely replace $PATH with GNUPG_LIBEXECDIR before calling the keyserver helper. If the user does use "exec-path", append GNUPG_LIBEXECDIR after the specified path. 2002-07-23 David Shaw * import.c (parse_import_options), export.c (parse_export_options): Fix offset problem with reversed ("no-") meanings. * import.c (delete_inv_parts): Discard subkey signatures (0x18 and 0x28) if found in the userid section of the key. * sig-check.c (signature_check2): Signatures made by invalid subkeys (bad/missing binding sig) are also invalid. * keylist.c (print_fingerprint): Show the primary as well as the secondary key fingerprint in modes 1 & 2. 2002-07-22 David Shaw * options.h, main.h, g10.c (main), import.c (parse_import_options, delete_inv_parts), keyserver.c (parse_keyserver_options): add new --import-options option. The only current flag is "allow-local-sigs". * g10.c (main): Don't disable MDC in pgp7 mode. * options.h, g10.c (main), keyserver.c (parse_keyserver_options): Remove old keyserver-option include-attributes now that there is an export-option for the same thing. * options.h, main.h, export.c (parse_export_options, do_export_stream), g10.c (main): add new --export-options option. Current flags are "include-non-rfc", "include-local-sigs", "include-attributes", and "include-sensitive-revkeys". * options.h, hkp.c (hkp_export), keyserver.c (parse_keyserver_options, keyserver_spawn): try passing unknown keyserver options to export options, and if successful, use them when doing a keyserver --send-key. * build-packet.c (build_sig_subpkt): We do not generate SIGSUBPKT_PRIV_VERIFY_CACHE anymore. * revoke.c (gen_desig_revoke): Lots more comments about including sensitive revkeys along with the revocation sig itself. * keyserver.c (parse_keyserver_options): Simpler implementation that can skip one pass over the options. 2002-07-18 David Shaw * keyedit.c (keyedit_menu, menu_addrevoker): Allow specifying "sensitive" as an argument to an addrevoker command. This sets the 0x40 sensitive revoker flag. * revoke.c (gen_desig_revoke): When generating a designated revocation, include the direct key sig that contains the designated revoker subpacket. This allows sensitive designated revocation subpackets to be exported. Also indicate which revokers are sensitive in the first place. 2002-07-17 David Shaw * keyedit.c (show_key_with_all_names_colon): The 0x40 class bit in a designated revoker means "sensitive", not "local". It's exportable under the right circumstances. * main.h, options.h, export.c (do_export_stream), g10.c (main), hkp.c (hkp_export), keyserver.c (keyserver_spawn: Add a flag to skip attribute packets and their signatures while exporting. This is to accomodate keyservers (pksd again) that choke on attributes. Use keyserver-option "include-attributes" to control it. This defaults to ON (i.e. don't skip). 2002-07-09 David Shaw * options.h, keyserver.c (parse_keyserver_uri, keyserver_spawn, keyserver_work), hkp.c (hkp_ask_import, hkp_export, hkp_search): Use a much more strict reading of RFC-2396 for the keyserver URIs. Specifically, don't try and be smart about checking the value of ":port" so long as it is all digits, and properly handle opaque data (those scheme specific parts that do not start with "//"). 2002-07-04 David Shaw * photoid.c (get_default_photo_command, show_photos): Honor FIXED_PHOTO_VIEWER and DISABLE_PHOTO_VIEWER. * mainproc.c (check_sig_and_print): Use --show-photos to show photos when verifying a sig made by a key with a photo. * keyserver.c (parse_keyserver_uri): Properly parse a URI with no :port section and an empty file path, but with a terminating '/'. (keyserver_work): Honor DISABLE_KEYSERVER_HELPERS. * hkp.c (hkp_ask_import): Display keyserver URI as a URI, but only if verbose. * exec.c, g10.c: USE_EXEC_PATH -> FIXED_EXEC_PATH 2002-07-03 David Shaw * exec.h, exec.c (set_exec_path, exec_write), g10.c (main): If USE_EXEC_PATH is defined at compile time, use it to lock the exec-path and not allow the user to change it. 2002-07-02 David Shaw * options.h, g10.c (main), keyserver.c (keyserver_refresh): Maintain and use the original keyserver URI for cosmetics rather than trying to recreate it when needed. * mainproc.c (check_sig_and_print): Properly disregard expired uids. Make sure that the first uid listed is a real uid and not an attribute (attributes should only be listed in the "aka" section). When there are no valid textual userids, try for an invalid textual userid before using any attribute uid. 2002-07-01 David Shaw * options.skel: Fix a few typos, clarify "group", and remove sample photo viewers for Win32 since they are the defaults now. * parse-packet.c (make_attribute_uidname), keylist.c (dump_attribs): Fix two typecast warnings. * packet.h, build-packet.c (build_attribute_subpkt), exec.c (expand_args), mkdtemp.c (mkdtemp), photoid.c (parse_image_header): Fix some signedness compiler warnings. 2002-07-01 Werner Koch * photoid.c (get_default_photo_command): Also use __MINGW32__ instead of HAVE_DOSISH_SYSTEM. * encode.c (encode_symmetric): Do not use the new encryption code. 2002-06-30 Werner Koch * photoid.c: Use __MINGW32__ to include windows because HAVE_DOSISH_SYSTEM is also set for OS/2 and plain DOS. Provide constant missing in older mingw installations. 2002-06-21 Stefan Bellon * g10.c [__riscos__]: Moved RISC OS specific stuff to util/riscos.c and include/util.h. * gpgv.c [__riscos__]: Likewise. 2002-06-20 David Shaw * keydb.h, pkclist.c (select_algo_from_prefs): Allow passing a suggested algorithm which will be used if available. * encode.c (encode_crypt, encrypt_filter), sign.c (sign_file): Use new select_algo_from_prefs feature to check if forcing an algorithm would violate the recipient preferences. * photoid.c (get_default_photo_command, show_photos): Use different default viewers on different platforms. Currently we have Win 9x, Win NT (2k, xp), Mac OSX, RISC OS, and "everybody else". These are #ifdefs as much as possible to avoid clutter. * g10.c (strusage, build_list), keyedit.c (show_prefs), main.h, misc.c (compress_algo_to_string, check_compress_algo), pkclist.c (algo_available), keygen.c (keygen_set_std_prefs): New algo_to_string and check functions for compress algorithms. 2002-06-20 Werner Koch * misc.c (setsysinfo): Removed a #warning for Alpha's uniligedn trap disabling - it is quite possible that this is a debug relict. 2002-06-20 Stefan Bellon * g10.c [__riscos__]: Added image file system feature. * gpgv.c [__riscos__]: Added image file system feature. * photoid.c (show_photos) [__riscos__]: Set RISC OS filetype of photo id according to MIME type. 2002-06-19 David Shaw * hkp.c (parse_hkp_index): Don't leak memory when failing out of a bad HKP keyserver. * g10.c (add_notation_data): Relax slightly the rules as to what can go into a notation name - 2440 allows "@", for example. 2002-06-17 David Shaw * import.c (clean_subkeys, import_one): Only allow at most 1 binding sig and at most 1 revocation sig on a subkey, as per 2440:11.1. * hkp.c (parse_hkp_index, hkp_search): Error if the keyserver returns an unparseable HKP response. 2002-06-15 David Shaw * keyedit.c (show_key_with_all_names), keylist.c (list_keyblock_print): Show "[expired]" before expired uids. * keyedit.c (show_key_with_all_names_colon), mainproc.c (list_node), keylist.c (list_keyblock_colon): Show flag 'e' for expired user ids. Use "uat" for user attribute packets instead of "uid". Also use ' ' rather than the fake user id string on attributes. * keygen.c (keygen_add_revkey): Remove unused code. * misc.c (check_permissions): Check directory permissions properly - they are not special files. * pkclist.c (expand_id, expand_group, build_pk_list): When expanding groups before building a pk list, inherit flags from the original pre-expanded string. * pubkey-enc.c (is_algo_in_prefs): Don't use prefs from expired uids. 2002-06-14 David Shaw * free-packet.c (copy_signature): Properly copy a signature that carries a revocation key on it. * pkclist.c (expand_id, expand_group, build_pk_list): Groups now work properly when used in the "Enter the user ID" prompt. 2002-06-14 David Shaw * keyedit.c (show_key_with_all_names): Display warning if a user tries to show prefs on a v3 key with a v3 selfsig. * kbnode.c (dump_kbnode): Show if a uid is expired. * import.c (merge_blocks, import_revoke_cert): Show user ID receiving a revocation certificate. * free-packet.c (cmp_user_ids): Properly compare attribute ids. * pkclist.c (expand_groups): Maintain the strlist flags while expanding. Members of an expansion inherit their flags from the expansion key. * options.h, cipher.c (write_header), g10.c (main), keygen.c (keygen_set_std_prefs): remove the personal_mdc flag. It no longer serves a purpose now that the personal preference lists are split into cipher/digest/zip. 2002-06-14 Timo Schulz * skclist.c (is_insecure): Implemented. 2002-06-12 David Shaw * keyserver.c (keyserver_spawn): Properly handle PROGRAM responses when they have a CRLF ending. Noted by Keith Ray. * keyserver.c (keyserver_spawn): Handle CRLF endings from keyserver helpers. Also don't leak the last line worth of memory from the keyserver response. * main.h, misc.c (deprecated_warning): New function to warn about deprecated options and commands. * g10.c (main), keyserver-internal.h, keyserver.c (parse_keyserver_uri): Use new deprecated function to warn about honor-http-proxy, auto-key-retrieve, and x-broken-hkp. 2002-06-11 David Shaw * Makefile.am: link gpg with NETLIBS for the built-in HKP access. 2002-06-10 David Shaw * options.h, keyserver.c (keyserver_opts), g10.c (main): New keyserver option "include-subkeys". This feature already existed, but now can be turned off. It defaults to on. * options.h, keyserver.c (parse_keyserver_options, keyserver_spawn): There are now enough options to justify making a structure for the keyserver options rather than a page of if-then-else-if-then-etc. * getkey.c (merge_keys_and_selfsig, merge_selfsigs_main): Fix bug in calculating key expiration dates. 2002-06-09 David Shaw * keydb.h, getkey.c (get_user_id_native), import.c (import_one): Display user ID while importing a key. Note this applies to both --import and keyserver --recv-keys. * exec.c (exec_finish): Log unnatural exit (core dump, killed manually, etc) for fork/exec/pipe child processes. 2002-06-08 Timo Schulz * encode.c (encode_symmetric): Disable the compat flag when the expert mode is enabled. 2002-06-07 David Shaw * options.skel, options.h, main.h, keydb.h, pkclist.c (build_pk_list, expand_groups), g10.c (main, add_group): Add new "group" command to allow one name to expand into multiple keys. For simplicity, and to avoid potential loops, we only expand once - you can't make an alias that points to an alias. * main.h, g10.c (main), keygen.c (build_personal_digest_list): Simplify the default digest list - there is really no need for the other hashes since they will never be used after SHA-1 in the list. * options.skel, options.h, g10.c (main), hkp.c (hkp_ask_import, hkp_export, hkp_search), keyserver.c (parse_keyserver_options, parse_keyserver_uri, keyserver_work, keyserver_refresh): Make the "x-broken-hkp" keyserver scheme into keyserver-option "broken-http-proxy". Move honor_http_proxy into keyserver_options. Canonicalize the three variations of "hkp", "x-hkp", and "x-broken-hkp" into "hkp". 2002-06-07 Stefan Bellon * g10.c [__riscos__]: Added --attribute-file to do the same as --attribute-fd, but with a filename not a fd as argument. Added magic symbol for RISC OS to use different memory management. * gpgv.c [__riscos__]: Added magic symbol for RISC OS to use different memory management. 2002-06-06 David Shaw * main.h, g10.c (main), keygen.c (build_personal_digest_list): Put in a default digest preference list consisting of SHA-1, followed by every other installed digest except MD5. Note this is the same as having no digest preference at all except for SHA-1 being favored. * options.h, g10.c (main), keygen.c (keygen_set_std_prefs), pkclist.c (select_algo_from_prefs): Split --personal-preference-list into three: --personal-{cipher|digest|compress}-preferences. This allows a user to set one without affecting another (i.e. setting only a digest pref doesn't imply an empty cipher pref). * exec.c (exec_read): This is a safer way of guessing the return value of system(). Noted by Stefan Bellon. 2002-06-05 David Shaw * hkp.c (parse_hkp_index): Be more robust with keyservers returning very unparseable responses. * exec.c (exec_read): Catch and display an error when the remote process exits unnaturally (i.e. segfault) so the user knows what happened. Also fix exec_write stub which has a different number of arguments now. 2002-06-05 Timo Schulz * encode.c (encode_simple): Ignore the new mode for RFC1991. * mainproc.c (symkey_decrypt_sesskey): Better check for weird keysizes. 2002-06-05 Timo Schulz * encode.c (encode_sesskey): New. (encode_simple): Use it here. But by default we use the compat mode which supress to generate encrypted session keys. 2002-06-05 Timo Schulz * mainproc.c (symkey_decrypt_sesskey): New. (proc_symkey_enc): Support for encrypted session keys. 2002-06-04 David Shaw * sign.c (hash_for, sign_file): When encrypting and signing at the same time, consult the various hash prefs to pick a hash algorithm to use. Pass in a 160-bit hint if any of the signing keys are DSA. * keydb.h, pkclist.c (select_algo_from_prefs, algo_available): Pass a "hints" opaque pointer in to let the caller give hints as to what algorithms would be acceptable. The only current hint is for PREFTYPE_HASH to require a 160-bit hash for DSA. Change all callers in encode.c (encode_crypt, encrypt_filter) and sign.c (sign_file). If we settle on MD5 as the best algorithm based solely on recepient keys and SHA1 is also a possibility, use SHA1 unless the user intentionally chose MD5. This is as per 2440:13. * exec.c (make_tempdir): Fix duplicated filename problem. 2002-06-03 David Shaw * packet.h, parse-packet.c (enum_sig_subpkt): Report back from enum_sig_subpkt when a subpacket is critical and change all callers in keylist.c (show_policy_url, show_notation), mainproc.c (print_notation_data), and pkclist.c (do_show_revocation_reason). * keylist.c (show_policy_url, show_notation): Display if the policy or notation is critical. 2002-06-03 David Shaw * main.h, g10.c (main), keylist.c (dump_attribs, set_attrib_fd, list_keyblock_print, list_keyblock_colon), status.h, status.c (get_status_string): New --attribute-fd feature to dump the contents of attribute subpackets for frontends. If --status-fd is also used, then a new status tag ATTRIBUTE is provided for each subpacket. * packet.h, getkey.c (fixup_uidnode, merge_selfsigs_main, merge_selfsigs_subkey), parse-packet.c (setup_user_id): Keep track of the expiration time of a user ID, and while we're at it, use the expired flag from the selfsig rather than reparsing the SIG_EXPIRE subpacket. * photoid.c (generate_photo_id): When adding a new photo ID, showing the photo for confirmation is not safe when noninteractive since the "user" may not be able to dismiss a viewer window. Noted by Timo Schulz. 2002-06-03 David Shaw * options.skel: Sample photo viewers for Win32. * misc.c (pct_expando): Use the seckey for %k/%K if the pubkey is not available. * photoid.h, photoid.c (show_photos): Include the seckey in case a user tries to view a photo on a secret key, and change all callers in keyedit.c (menu_showphoto), keylist.c (list_keyblock_print), and photoid.c (generate_photo_id). 2002-06-02 David Shaw * photoid.c (show_photos): Work properly when not called with a public key. 2002-05-31 David Shaw * sign.c (mk_notation_and_policy): Free unneeded buffer. * hkp.c (parse_hkp_index): Properly handle the '&' character (i.e. "&") in HKP responses. * getkey.c (merge_selfsigs_main): Fix reversed expiration time check with self-sigs. * keyedit.c (sign_uids): When making a new self-sig on a v3 key, make a v3 self-sig unless it is currently a v3 self-sig being promoted to v4. 2002-05-31 Timo Schulz * pkclist.c (do_show_revocation_reason): Don't use capital letters for non-interactive output. (show_revocation_reason): Now it is global. * pubkey-enc.c (get_it): Show if the key has been revoked. 2002-05-30 David Shaw * sign.c (write_signature_packets, sign_file, clearsign_file, sign_symencrypt_file): Make a v4 signature if a policy URL or notation is set, unless v3 sigs are forced via rfc1991 or force-v3-sigs. Also remove some doubled code and clarify an error message (we don't sign in PGP2 mode - just detach-sign). * parse-packet.c (parse_one_sig_subpkt): Add KS_FLAGS to the "any size" section. 2002-05-29 David Shaw * keygen.c (keygen_set_std_prefs, add_feature_mdc): Use "mdc" and "no-mdc" in the prefs string to allow switching on and off the MDC feature. This is needed to properly export a key from GnuPG for use on PGP which does not support MDC - without this, MDC-capable implementations will still try and generate MDCs which will break PGP. * keygen.c (keygen_get_std_prefs): Show "[mdc]" in prefs string if it is enabled. * options.h, g10.c (main), cipher.c (write_header), keygen.c (keygen_set_std_prefs): For consistency, allow the user to specify mdc/no-mdc in the --personal-preference-list. If disabled, it acts just like --disable-mdc. 2002-05-29 David Shaw * options.h, exec.c: Add some debugging info, using the 1024 debug flag. * exec.c (win_system): New system()-like function for win32 that does not return until the child process terminates. Of course, this doesn't help if the process itself exits before it is finished. 2002-05-29 Werner Koch * encode.c (encode_simple): Intialize PKT when --no-literal is used. * keyedit.c (show_key_with_all_names_colon): Renamed the record for revocation keys to "rvk". 2002-05-27 Werner Koch * keyedit.c (show_key_with_all_names_colon): New. (show_key_with_all_names): Divert to new function when required. Sanitize printing of revoker name. 2002-05-27 David Shaw * build-packet.c (build_sig_subpkt): Handle setting sig flags for certain subpacket types (notation, policy url, exportable, revocable). keyedit.c (sign_mk_attrib): Flags no longer need to be set here. * packet.h, parse-packet.c (parse_one_sig_subpkt), build-packet.c (build_sig_subpkt): Call parse_one_sig_subpkt to sanity check buffer lengths before building a sig subpacket. 2002-05-26 David Shaw * sign.c (mk_notation_and_policy): Include secret key to enable %s expandos, and pass notations through pct_expando as well. * main.h, misc.c (pct_expando): Add %s and %S expandos for signer's keyid. 2002-05-25 David Shaw * g10.c (strusage, build_list): Add compress algorithms to --version list. Show algorithm numbers when --verbose --version is done. 2002-05-22 David Shaw * options.h, main.h, keygen.c (keygen_set_set_prefs, keygen_get_std_prefs, keygen_upd_std_prefs), keyedit.c (keyedit_menu), g10.c (main), pkclist.c (select_algo_from_prefs): Add --personal-preference-list which allows the user to factor in their own preferred algorithms when the preference lists are consulted. Obviously, this does not let the user violate a recepient's preferences (and the RFC) - this only influences the ranking of the agreed-on (and available) algorithms from the recepients. Suggested by David Hollenberg. * options.h, keygen.c (keygen_set_std_prefs), g10.c (main): Rename --preference-list to --default-preference-list (as that is what it really is), and make it a true default in that if the user selects "default" they get this list and not the compiled-in list. 2002-05-22 Werner Koch * g10.c (main): Add missing LF in a info printout and made it translatable. Noted by Michael Tokarev. 2002-05-21 Werner Koch * g10.c (main): Removed the undef of USE_SHM_COPROCESSING which was erroneously introduced on 2002-01-09. * signal.c (got_fatal_signal): Don't write the Nul to stderr. Reported by David Hollenberg. 2002-05-18 David Shaw * main.h, g10.c (main), revoke.c (gen_desig_revoke): Generate a designated revocation via --desig-revoke * keyedit.c (keyedit_menu, menu_addrevoker): New "addrevoker" command to add a designated revoker to a key. 2002-05-17 David Shaw * gpgv.c: Add stub for get_ownertrust(). * g10.c (main): --allow-freeform-uid should be implied by OpenPGP. Add --no-allow-freeform-uid. * keyedit.c (sign_uids): Issue a warning when signing a non-selfsigned uid. * getkey.c (merge_selfsigs_main): If a key has no selfsigs, and allow-non-selfsigned-uid is not set, still try and make the key valid by checking all uids for a signature from an ultimately trusted key. 2002-05-16 David Shaw * main.h, keygen.c (keygen_add_revkey): Add revocation key subpackets to a signature (callable by make_keysig_packet). (write_direct_sig): Write a 1F direct key signature. (parse_revocation_key): Parse a string in algo:fpr:sensitive format into a revocation key. (get_parameter_revkey, do_generate_keypair): Call above functions when prompted from a batch key generation file. * build-packet.c (build_sig_subpkt): Allow multiple revocation key subpackets in a single sig. * keydb.h, getkey.c (get_seckey_byfprint): Same as get_pubkey_byfprint, except for secret keys. We only know the fingerprint of a revocation key, so this is needed to retrieve the secret key needed to issue a revokation. * packet.h, parse-packet.c (parse_signature, parse_revkeys): Split revkey parsing off into a new function that can be used to reparse after manipulating the revkey list. * sign.c (make_keysig_packet): Ability to make 1F direct key signatures. 2002-05-15 David Shaw * options.skel: keyserver.pgp.com is gone, so list pgp.surfnet.nl as a sample LDAP server instead. * getkey.c (merge_selfsigs_main): Properly handle multiple revocation keys in a single packet. Properly handle revocation keys that are in out-of-order packets. Remove duplicates in revocation key list. 2002-05-14 Timo Schulz * exec.c (make_tempdir) [MINGW32]: Added missing '\'. 2002-05-14 Stefan Bellon * exec.c (make_tempdir): Make use of EXTSEP_S instead of hardcoded dot as extension separator. 2002-05-13 David Shaw * photoid.c (show_photos): Use the long keyid as the filename for the photo. Use the short keyid as the filename on 8.3 systems. * exec.h, exec.c (make_tempdir, exec_write, exec_finish): Allow caller to specify filename. This should make things easier on windows and macs where the file extension is required, but a whole filename is even better. * keyedit.c (show_key_with_all_names, show_prefs): Show proper prefs for a v4 key uid with no selfsig at all. * misc.c (check_permissions): Don't check permissions on non-normal files (pipes, character devices, etc.) 2002-05-11 Werner Koch * mainproc.c (proc_symkey_enc): Avoid segv in case the parser encountered an invalid packet. * keyserver.c (keyserver_export): Get confirmation before sending all keys. 2002-05-10 Stefan Bellon * g10.c, hkp.c, keyedit.c, keyserver.c: Replaced all occurrances of strcasecmp with ascii_strcasecmp and all occurrances of strncasecmp with ascii_memcasecmp. 2002-05-10 David Shaw * packet.h, getkey.c (fixup_uidnode), keyedit.c (show_prefs): Show assumed prefs for hash and compression as well as the cipher pref. Show assumed prefs if there are no prefs at all on a v4 self-signed key. * options.h, g10.c (main), sign.c (make_keysig_packet): New --cert-digest-algo function to override the default key signing hash algorithm. 2002-05-09 David Shaw * getkey.c (merge_selfsigs_main): Make sure the revocation key list starts clean as this function may be called more than once (e.g. from functions in --edit). * g10.c, encode.c (encode_crypt), sign.c (sign_file, sign_symencrypt_file): Make --compress-algo work like the documentation says. It should be like --cipher-algo and --digest-algo in that it can override the preferences calculation and impose the setting the user wants. No --compress-algo setting allows the usual preferences calculation to take place. * main.h, compress.c (compress_filter): use new DEFAULT_COMPRESS_ALGO define, and add a sanity check for compress algo value. 2002-05-08 David Shaw * pkclist.c (select_algo_from_prefs): There is an assumed compression preference for uncompressed data. 2002-05-07 David Shaw * options.h, g10.c (main), getkey.c (finish_lookup), pkclist.c (algo_available): --pgp7, identical to --pgp6 except that it permits a few algorithms that PGP 7 added: AES128, AES192, AES256, and TWOFISH. Any more of these --pgpX flags, and it'll be time to start looking at a generic --emulate-pgp X option. * export.c (do_export_stream): Warn the user when exporting a secret key if it or any of its secret subkeys are protected with SHA1 while simple_sk_checksum is set. * parse-packet.c (parse_key): Show when the SHA1 protection is used in --list-packets. * options.h, build-packet.c (do_comment), g10.c (main): Rename --no-comment as --sk-comments/--no-sk-comments (--no-comment still works) and make the default be --no-sk-comments. 2002-05-07 Werner Koch * keygen.c (get_parameter_algo): Never allow generation of the deprecated RSA-E or RSA-S flavors of PGP RSA. (ask_algo): Allow generation of RSA sign and encrypt in expert mode. Don't allow ElGamal S+E unless in expert mode. * helptext.c: Added entry keygen.algo.rsa_se. 2002-05-07 David Shaw * keyedit.c (sign_uids): If --expert is set, allow re-signing a uid to promote a v3 self-sig to a v4 one. This essentially deletes the old v3 self-sig and replaces it with a v4 one. * packet.h, parse-packet.c (parse_key), getkey.c (merge_keys_and_selfsig, merge_selfsigs_main): a v3 key with a v4 self-sig must never let the v4 self-sig express a key expiration time that extends beyond the original v3 expiration time. 2002-05-06 David Shaw * keyedit.c (sign_uids): When making a self-signature via "sign" don't ask about sig level or expiration, and include the usual preferences and such for v4 self-sigs. (menu_set_preferences): Convert uids from UTF8 to native before printing. * keyedit.c (sign_uids): Convert uids from UTF8 to native before printing. (menu_set_primary_uid): Show error if the user tries to make a uid with a v3 self-sig primary. 2002-05-05 David Shaw * import.c (import_one): When merging with a key we already have, don't let a key conflict (same keyid but different key) stop the import: just skip the bad key and continue. * exec.c (make_tempdir): Under Win32, don't try environment variables for temp directories - GetTempDir tries environment variables internally, and it's better not to second-guess it in case MS adds some sort of temp dir handling to Windows at some point. 2002-05-05 Timo Schulz * mainproc.c (proc_symkey_enc): Don't ask for a passphrase in the list only mode. 2002-05-05 David Shaw * keyserver.c (keyserver_refresh): --refresh-keys implies --merge-only so as not to import keys with keyids that match the ones being refreshed. Noted by Florian Weimer. 2002-05-04 Stefan Bellon * free-packet.c (copy_public_key): Don't call m_alloc(0), therefore added consistency check for revkey and numrefkeys. * getkey.c (check_revocation_keys): Added consistency check for revkey and numrefkeys. * keyedit.c (show_key_with_all_names): Likewise. 2002-05-03 David Shaw * photoid.c: Provide default image viewer for Win32. * misc.c (pct_expando): %t means extension, not name ("jpg", not "jpeg"). * keyserver.c (keyserver_spawn), photoid.c (show_photos), exec.h, exec.c: Allow the caller to determine the temp file extension when starting an exec_write and change all callers. * keyedit.c (sign_uids): Nonrevocable key signatures cause an automatic promotion to v4. * exec.c: Provide stubs for exec_ functions when NO_EXEC is defined. 2002-05-02 David Shaw * photoid.h, photoid.c (parse_image_header, image_type_to_string): Useful functions to return data about an image. * packet.h, parse-packet.c (make_attribute_uidname, parse_attribute_subpkts, parse_attribute), photoid.h, photoid.c (show_photos): Handle multiple images in a single attribute packet. * main.h, misc.c (pct_expando), sign.c (mk_notation_and_policy), photoid.c (show_photos): Simpler expando code that does not require using compile-time string sizes. Call image_type_to_string to get image strings (i.e. "jpg", "image/jpeg"). Change all callers. * keyedit.c (menu_showphoto), keylist.c (list_keyblock_print): Allow viewing multiple images within a single attribute packet. * gpgv.c: Various stubs for link happiness. 2002-05-02 David Shaw * build-packet.c (build_sig_subpkt), keyedit.c (sign_uids), options.h, sign.c (mk_notation_and_policy), g10.c (main, add_notation_data, add_policy_url (new), check_policy_url (removed)): Allow multiple policy URLs on a given signature. Split "--notation-data" into "--cert-notation" and "--sig-notation" so the user can set different policies for key and data signing. For backwards compatibility, "--notation-data" sets both, as before. 2002-05-02 Werner Koch * options.skel: Removed the comment on trusted-keys because this option is now deprecated. 2002-05-01 David Shaw * keyedit.c (menu_adduid): 2440bis04 says that multiple attribute packets on a given key are legal. * keyserver.c (keyserver_refresh): the fake v3 keyid hack applies to "mailto" URLs as well since they are also served by pksd. 2002-04-29 Werner Koch Added a copyright year for files changed this year. 2002-04-25 Werner Koch * g10.c, options.h: New options --display, --ttyname, --ttytype, --lc-ctype, --lc-messages to be used with future versions of the gpg-agent. * passphrase.c (agent_send_option,agent_send_all_options): New. (agent_open): Send options to the agent. * trustdb.c (update_ownertrust, clear_ownertrust): Do an explicit do_sync because revalidation_mark does it only if when the timestamp actually changes. 2002-04-23 David Shaw * main.h, keygen.c (do_generate_keypair), keylist.c (print_signature_stats, list_all, list_one, list_keyblock, list_keyblock_print, list_keyblock_colon): After generating a new key, show the key information (name, keyid, fingerprint, etc.) Also do not print uncheckable signatures (missing key..) in --check-sigs. Print statistics (N missing keys, etc.) after --check-sigs. * keyedit.c (sign_uids): When signing a key with an expiration date on it, the "Do you want your signature to expire at the same time?" question should default to YES. 2002-04-22 David Shaw * parse-packet.c (parse_plaintext), packet.h, plaintext.c (handle_plaintext): Fix bug in handling literal packets with zero-length data (no data was being confused with partial body length). * misc.c (pct_expando), options.skel: %t means extension ("jpg"). %T means MIME type ("image/jpeg"). * import.c (import_one): Only trigger trust update if the keyring is actually changed. * export.c (do_export_stream): Missing a m_free. 2002-04-22 Stefan Bellon * keyid.c (expirestr_from_sk, expirestr_from_sig): Added _() to string constant. * exec.c (make_tempdir) [__riscos__]: Better placement of temporary file. 2002-04-20 David Shaw * keygen.c (generate_subkeypair): 2440bis04 adds that creating subkeys on v3 keys is a MUST NOT. * getkey.c (finish_lookup): The --pgp6 "use the primary key" behavior should only apply while data signing and not encryption. Noted by Roger Sondermann. 2002-04-19 Werner Koch * keygen.c (keygen_set_std_prefs): Put back 3DES because the RFC says it is good form to do so. 2002-04-19 David Shaw * keyedit.c (menu_deluid): Only cause a trust update if we delete a non-revoked user id. * hkp.c (hkp_ask_import), keyserver.c (parse_keyserver_options, keyserver_spawn), options.h: Remove fast-import keyserver option (no longer meaningful). * g10.c (main), keyedit.c (sign_uids), options.h: Change --default-check-level to --default-cert-check-level as it makes clear what it operates on. * g10.c (main): --pgp6 also implies --no-ask-sig-expire. * delkey.c (do_delete_key): Comment. * keyedit.c (sign_uids, keyedit_menu, menu_deluid, menu_delsig, menu_expire, menu_revsig, menu_revkey): Only force a trustdb check if we did something that changes it. * g10.c: add "--auto-check-trustdb" to override a "--no-auto-check-trustdb" 2002-04-19 Werner Koch * tdbio.c (tdbio_write_nextcheck): Return a status whether the stamp was actually changed. * trustdb.c (revalidation_mark): Sync the changes. Removed the sync operation done by its callers. (get_validity): Add logic for maintaining a pending_check flag. (clear_ownertrust): New. * keyedit.c (sign_uids): Don't call revalidation_mark depending on primary_pk. (keyedit_menu): Call revalidation_mark after "trust". (show_key_with_all_names): Print a warning on the wrong listed key validity. * delkey.c (do_delete_key): Clear the owenertrust information when deleting a public key. 2002-04-18 Werner Koch * seskey.c (encode_md_value): Print an error message if a wrong digest algorithm is used with DSA. Changed all callers to cope with a NULL return. Problem noted by Imad R. Faiad. 2002-04-18 David Shaw * trustdb.c (mark_usable_uid_certs): Properly handle nonrevocable signatures that can expire. In short, the only thing that can override an unexpired nonrevocable signature is another unexpired nonrevocable signature. * getkey.c (finish_lookup): Always use primary signing key for signatures when --pgp6 is on since pgp6 and 7 do not understand signatures made by signing subkeys. 2002-04-18 Werner Koch * trustdb.c (validate_keys): Never schedule a nextcheck into the past. (validate_key_list): New arg curtime use it to set next_expire. (validate_one_keyblock): Take the current time from the caller. (clear_validity, reset_unconnected_keys): New. (validate_keys): Reset all unconnected keys. * getkey.c (premerge_public_with_secret): Fixed 0x12345678! syntax for use with secret keys. (lookup): Advance the searchmode after a search FIRST. * seckey-cert.c (do_check): Always calculate the old checksum for use after unprotection. * g10.c, options.skel: New option --no-escape-from. Made --escape-from and --force-v3-sigs the default and removed them from the options skeleton. 2002-04-16 Werner Koch * parse-packet.c (parse_key): Support a SHA1 checksum as per draft-rfc2440-bis04. * packet.h (PKT_secret_key): Add field sha1chk. * seckey-cert.c (do_check): Check the SHA1 checksum (protect_secret_key): And create it. * build-packet.c (do_secret_key): Mark it as sha-1 protected. * g10.c, options.h: New option --simple-sk-checksum. 2002-04-13 David Shaw * parse-packet.c (parse_signature): Minor fix - signatures should expire at their expiration time and not one second later. * keygen.c (proc_parameter_file): Allow specifying preferences string (i.e. "s5 s2 z1 z2", etc) in a batchmode key generation file. * keyedit.c (keyedit_menu): Print standard error message when signing a revoked key (no new translation). * getkey.c (merge_selfsigs): Get the default set of key prefs from the real (not attribute) primary uid. 2002-04-12 David Shaw * pkclist.c (build_pk_list): Fix bug that allowed a key to be selected twice in batch mode if one instance was the default recipient and the other was an encrypt-to. Noted by Stefan Bellon. * parse-packet.c (dump_sig_subpkt): Show data in trust and regexp sig subpackets. * keyedit.c (keyedit_menu): Use new function real_uids_left to prevent deleting the last real (i.e. non-attribute) uid. Again, according to the attribute draft. (menu_showphoto): Make another string translatable. 2002-04-11 David Shaw * build-packet.c (build_sig_subpkt): Delete subpackets from both hashed and unhashed area on update. (find_subpkt): No longer needed. * keyedit.c (sign_uids): With --pgp2 on, refuse to sign a v3 key with a v4 signature. As usual, --expert overrides. Try to tweak some strings to a closer match so they can all be translated in one place. Use different helptext keys to allow different help text for different questions. * keygen.c (keygen_upd_std_prefs): Remove preferences from both hashed and unhashed areas if they are not going to be used. 2002-04-10 David Shaw * misc.c (pct_expando), options.skel: Use %t to indicate type of a photo ID (in this version, it's always "jpeg"). Also tweak string expansion loop to minimize reallocs. * mainproc.c (do_check_sig): Variable type fix. * keyedit.c (menu_set_primary_uid): Differentiate between true user IDs and attribute user IDs when making one of them primary. That is, if we are making a user ID primary, we alter user IDs. If we are making an attribute packet primary, we alter attribute packets. This matches the language in the latest attribute packet draft. * keyedit.c (sign_uids): No need for the empty string hack. * getkey.c (fixup_uidnode): Only accept preferences from the hashed segment of the self-sig. 2002-04-10 Werner Koch * tdbio.c (migrate_from_v2): Fixed the offset to read the old ownertrust value and only add entries to the table if we really have a value. 2002-04-08 David Shaw * status.h, status.c (get_status_string): Add KEYEXPIRED, EXPSIG, and EXPKEYSIG. Add "deprecated-use-keyexpired-instead" to SIGEXPIRED. * sig-check.c (do_check): Start transition from SIGEXPIRED to KEYEXPIRED, since the actual event is signature verification by an expired key and not an expired signature. (do_signature_check, packet.h): Rename as signature_check2, make public, and change all callers. * mainproc.c (check_sig_and_print, do_check_sig): Use status EXPSIG for an expired, but good, signature. Add the expiration time (or 0) to the VALIDSIG status line. Use status KEYEXPSIG for a good signature from an expired key. * g10.c (main): remove checks for no arguments now that argparse does it. 2002-04-06 Werner Koch * keyring.c (keyring_get_keyblock): Disable the keylist mode here. * encode.c (encode_simple, encode_crypt): Only test on compressed files if a compress level was not explicity set. * keygen.c (keygen_set_std_prefs): Removed Blowfish and Twofish from the list of default preferences, swapped the preferences of RMD160 and SHA1. Don't include a preference to 3DES unless the IDEA kludge gets used. * free-packet.c (free_packet): call free_encrypted also for PKT_ENCRYPTED_MDC. * compress.c (release_context): New. (handle_compressed): Allocate the context and setup a closure to release the context. This is required because there is no guarabntee that the filter gets popped from the chain at the end of the function. Problem noted by Timo and probably also the cause for a couple of other reports. (compress_filter): Use the release function if set. * tdbio.c [__CYGWIN32__]: Don't rename ftruncate. Noted by Disastry. * parse-packet.c (parse_signature): Put parens around a bit test. * exec.c (make_tempdir): Double backslash for TMP directory creation under Windows. Better strlen the DIRSEP_S constants for allocation measurements. * decrypt.c (decrypt_messages): Release the passphrase aquired by get_last_passphrase. 2002-04-02 Werner Koch * Makefile.am (EXTRA_DIST): Removed OPTIONS an pubring.asc - they are no longer of any use. 2002-04-03 David Shaw * keyserver.c (parse_keyserver_options): fix auto-key-retrieve to actually work as a keyserver-option (noted by Roger Sondermann). * keylist.c (reorder_keyblock): do not reorder the primary attribute packet - the first user ID must be a genuine one. 2002-03-31 David Shaw * keylist.c (list_keyblock_colon): Fix ownertrust display with --with-colons. * keygen.c (generate_user_id), photoid.c (generate_photo_id): Properly initialize the user ID refcount. A few more "y/n" -> "y/N" in photoid.c. * keyedit.c (ask_revoke_sig): Warn the user if they are about to revoke an expired sig (not a problem, but they should know). Also tweak a few prompts to change "y/n" to "y/N", which is how most other prompts are written. * keyserver.c (keyserver_search_prompt): Control-d escapes the keyserver search prompt. * pkclist.c (show_revocation_reason & callers): If a subkey is considered revoked solely because the parent key is revoked, print the revocation reason from the parent key. * trustdb.c (get_validity): Allow revocation/expiration to apply to a uid/key with no entry in the trustdb. 2002-03-29 David Shaw * keyserver.c (printunquoted): unquote backslashes from keyserver searches * hkp.c (write_quoted): quote backslashes from keyserver searches 2002-03-26 Werner Koch * keygen.c (ask_keysize): Removed the warning for key sizes > 1536. 2002-03-25 Werner Koch * keyedit.c (sign_uids): Use 2 strings and not a %s so that translations can be done the right way. * helptext.c: Fixed small typo. 2002-03-23 David Shaw * import.c (append_uid, merge_sigs): it is okay to import completely non-signed uids now (with --allow-non-selfsigned-uid). * getkey.c (get_primary_uid, merge_selfsigs_main): do not choose an attribute packet (i.e. photo) as primary uid. This prevents oddities like "Good signature from [image of size 2671]". This is still not perfect (one can still select an attribute packet as primary in --edit), but is closer to the way the draft is going. * g10.c (build_list): algorithms should include 110. * g10.c (main): --pgp2 implies --no-ask-sig-expire and --no-ask-cert-expire as those would cause a v4 sig/cert. * armor.c (is_armor_header): be more lenient in what constitutes a valid armor header (i.e. -----BEGIN blah blah-----) as some Windows programs seem to add spaces at the end. --openpgp makes it strict again. 2002-03-18 David Shaw * keyserver.c (keyserver_search_prompt): Properly handle a "no keys found" case from the internal HKP code (external HKP is ok). Also, make a COUNT -1 (i.e. streamed) keyserver response a little more efficient. * g10.c (main): Add --no-allow-non-selfsigned-uid 2002-03-17 David Shaw * g10.c (main): --openpgp implies --allow-non-selfsigned-uid. * getkey.c (merge_selfsigs_main): If none of the uids are primary (because none are valid) then pick the first to be primary (but still invalid). This is for cosmetics in case some display needs to print a user ID from a non-selfsigned key. Also use --allow-non-selfsigned-uid to make such a key valid and not --always-trust. The key is *not* automatically trusted via --allow-non-selfsigned-uid. * mainproc.c (check_sig_and_print): Make sure non-selfsigned uids print [uncertain] on verification even though one is primary now. * getkey.c (merge_selfsigs): If the main key is not valid, then neither are the subkeys. * import.c (import_one): Allow --allow-non-selfsigned-uid to work on completely unsigned keys. Print the uids in UTF8. Remove mark_non_selfsigned_uids_valid(). * keyedit.c (show_key_with_all_names): Show revocation key as UTF8. * sign.c (clearsign_file): Allow --not-dash-escaped to work with v3 keys. 2002-03-14 Werner Koch * main.h: Changed the default algorithms to CAST5 and SHA1. 2002-03-13 David Shaw * import.c (chk_self_sigs): Show which user ID a bad self-sig (invald sig or unsupported public key algorithm) resides on. * import.c (chk_self_sigs): any valid self-sig should mark a user ID or subkey as valid - otherwise, an attacker could DoS the user by inventing a bogus invalid self-signature. 2002-03-07 David Shaw * g10.c (main): make a few more strings translatable. * options.h, options.skel, g10.c (main), gpgv.c, mainproc.c (check_sig_and_print), keyserver.c (parse_keyserver_options): --auto-key-retrieve should really be a keyserver-option variable. * import.c (revocation_present): new function to print a warning if a key is imported that has been revoked by designated revoker, but the designated revoker is not present to verify the revocation. If keyserver-options auto-key-retrieve is set, try and fetch the designated revoker from the keyserver. * import.c (import_one): call revocation_present after importing a new key. Note that this applies to --import, --recv-keys, and --search-keys. * keyserver-internal.h, keyserver.c (keyserver_import_fprint): import via fingerprint (for revocation keys). * keyserver.c (keyserver_import_keyid): much simpler implementation now that we're using KEYDB_SEARCH_DESC internally. 2002-03-04 David Shaw * revoke.c (gen_revoke): do not prompt for revocation reason for v3 revocations (unless force-v4-certs is on) since they wouldn't be used anyway. * keyedit.c (menu_revsig): show the status of the sigs (exportable? revocable?) to the user before prompting for which sig to revoke. Also, make sure that local signatures get local revocations. * keyedit.c (ask_revoke_sig): remind the user which sigs are local. * g10.c (main): Add "exec-path" variable to override PATH for execing programs. * export.c (do_export_stream): properly check return code from classify_user_id to catch unclassifiable keys. 2002-03-03 David Shaw * parse-packet.c (parse_signature): variable type tweak for RISC OS (from Stefan) 2002-02-28 David Shaw * getkey.c (check_revocation_keys): New function to check a revocation against a list of potential revocation keys. Note the loop-breaking code here. This is to prevent blowing up if A is B's revocation key, while B is also A's. Note also that this is written so that a revoked revoker can still issue revocations: i.e. If A revokes B, but A is revoked, B is still revoked. I'm not completely convinced this is the proper behavior, but it matches how PGP does it. It does at least have the advantage of much simpler code - my first version of this had lots of loop maintaining code so you could chain revokers many levels deep and if D was revoked, C was not, which meant that B was, and so on. It was sort of scary, actually. * getkey.c (merge_selfsigs_main): Add any revocation keys onto the pk. This is particularly interesting since we normally only get data from the most recent 1F signature, but you need multiple 1F sigs to properly handle revocation keys (PGP does it this way, and a revocation key could be marked "sensitive" and hence in a different signature). Also, if a pk has a revocation key set, check for revocation sigs that were not made by us - if made by a valid revocation key, mark the pk revoked. * packet.h, getkey.c (cache_public_key): do not cache key if "dont_cache" is set. This allows the revocation key code to look up a key and return information that may be inaccurate to prevent loops without caching the fake data. * packet.h, sig-check.c (do_signature_check): Record if a signature was made by a revoked pk. * packet.h, parse-packet.c (parse_one_sig_subpkt, can_handle_critical, parse_signature): Get revocation key information out of direct sigs. * keylist.c (list_keyblock_print): don't assume that the presence of a 0x20 signature means the key is revoked. With revocation keys, this may not be true if the revocation key is not around to verify it or if verification failed. Also, 0x1F should get listed as "sig", and not "unexpected signature class". * keyedit.c (show_key_with_all_names): Add a flag for printing revoker information and change all callers. * import.c (merge_blocks): merge in any new direct key (0x1F) sigs. * import.c (import_revoke_cert): don't keep processing after a revocation is rejected. * import.c (delete_inv_parts): Allow importing a revocation signature even if it was not issued by the key. This allows a revocation key to issue it. Of course, the sig still needs to be checked before we trust it. * free-packet.c (copy_public_key): Include a new copy of the revocation keys when duping a pk. * free-packet.c (free_seckey_enc, release_public_key_parts): Free any revocation keys that are attached to a sig or pk. * export.c (do_export_stream): Do not export signatures with "sensitive" revocation keys in them. 2002-02-27 David Shaw * export.c (do_export_stream): Do not include v3 keys in a --export-secret-subkeys export. * getkey.c (merge_selfsigs_main): If a key isn't valid (say, because of no self-signature), allow --always-trust to force it valid so it can be trusted. 2002-02-25 David Shaw * hkp.c (hkp_ask_import), hkp.h, keyserver.c (all): treat key lists internally as fingerprints when possible. All this is via KEYDB_SEARCH_DESC - no point in reinventing the wheel. This allows the helper program to search the keyserver by fingerprint if desired (and the keyserver supports it). Note that automatic fingerprint promotion during refresh only applies to v4 keys as a v4 fingerprint can be easily changed into a long or short key id, and a v3 cannot. * pubkey-enc.c, getkey.c, misc.c, main.h: Take two copies of hextobyte() from pubkey-enc.c and getkey.c and make them into one copy in misc.c. 2002-02-22 David Shaw * keyserver.c (keyserver_search_prompt): Detect a "no keys found" case even if the helper program does not explicitly say how many keys were found. * hkp.c (parse_hkp_index): Bug fix - don't report non-revoked keys as revoked in HKP key searches. 2002-02-19 Werner Koch * parse-packet.c (parse_trust): Made parsing more robust. 2002-02-19 David Shaw * hkp.c (parse_hkp_index): Catch corruption in HKP index lines (can be caused by broken or malicious keyservers). * keyserver.c (keyserver_work): Add KEYSERVER_NOT_SUPPORTED for unsupported actions (say, a keyserver that has no way to search, or a readonly keyserver that has no way to add). Also add a USE_EXTERNAL_HKP define to disable the internal HKP keyserver code. 2002-02-14 Werner Koch * g10.c: New option --no-use-agent. * pkclist.c (check_signatures_trust): Always print the warning for unknown and undefined trust. Removed the did_add cruft. Reported by Janusz A. Urbanowicz. 2002-02-11 David Shaw * hkp.c (parse_hkp_index): Bug fix - properly handle user IDs with colons (":") in them while HKP searching. 2002-02-09 David Shaw * misc.c (pct_expando): More comments. * keydb.h, sign.c (mk_notation_and_policy): Clarify what is a sig and what is a cert. A sig has sigclass 0x00, 0x01, 0x02, or 0x40, and everything else is a cert. * g10.c (main), keyedit.c (keyedit_menu): Add a "nrlsign" for nonrevocable and local key signatures. * g10.c (main): Add a --no-force-mdc to undo --force-mdc. * options.h, g10.c (main), cipher.c (write_header): Add a knob to --disable-mdc/--no-disable-mdc. Off by default, of course, but is used in --pgp2 and --pgp6 modes. * pkclist.c (build_pk_list): Allow specifying multiple users in the "Enter the user ID" loop. Enter a blank line to stop. Show each key+id as it is added. * keylist.c (show_policy_url), mainproc.c (print_notation_data): It is not illegal (though possibly silly) to have multiple policy URLs in a given signature, so print all that are present. * hkp.c (hkp_search): More efficient implementation of URL-ifying code. 2002-02-04 David Shaw * main.h, misc.c (pct_expando): New function to generalize %-expando processing in any arbitrary string. * photoid.c (show_photo): Call the new pct_expando function rather than expand strings internally. * sign.c (mk_notation_and_policy): Show policy URLs and notations when making a signature if show-policy/show-notation is on. %-expand policy URLs during generation. This lets the user have policy URLs of the form "http://notary.jabberwocky.com/keysign/%K" which will generate a per-signature policy URL. * main.h, keylist.c (show_policy_url, show_notation): Add amount to indent so the same function can be used in key listings as well as during sig generation. Change all callers. 2002-02-04 David Shaw * keyserver.c, options.h (parse_keyserver_options, keyidlist): Workaround for the pksd and OKS keyserver bug that calculates v4 RSA keyids as if they were v3. The workaround/hack is to fetch both the v4 (e.g. 99242560) and v3 (e.g. 68FDDBC7) keyids. This only happens for key refresh while using the HKP scheme and the refresh-add-fake-v3-keyids keyserver option must be set. This should stay off by default. 2002-02-03 David Shaw * keyserver.c (keyserver_spawn): Bug fix - do not append keys to each other when --sending more than one. 2002-02-02 David Shaw * options.h, g10.c (main), keyedit.c (sign_uids), sign.c (mk_notation_and_policy): Split "--set-policy-url" into "--cert-policy-url" and "--sig-policy-url" so the user can set different policies for key and data signing. For backwards compatibility, "--set-policy-url" sets both, as before. 2002-01-30 Werner Koch * g10.c (main): --gen-random --armor does now output a base64 encoded string. 2002-01-28 David Shaw * g10.c (main), options.h, pkclist.c (algo_available): --pgp6 flag. This is not nearly as involved as --pgp2. In short, it turns off force_mdc, turns on no_comment, escape_from, and force_v3_sigs, and sets compression to 1. It also restricts the user to IDEA (if present), 3DES, CAST5, MD5, SHA1, and RIPEMD160. See the comments above algo_available() for lots of discussion on why you would want to do this. 2002-01-27 David Shaw * keygen.c (keygen_set_std_prefs): Comment * keyedit.c (sign_uids): Bug fix - when signing with multiple secret keys at the same time, make sure each key gets the sigclass prompt. * exec.c (exec_finish): Close the iobuf and FILE before trying to waitpid, so the remote process will get a SIGPIPE and exit. This is only a factor when using a pipe to communicate. * exec.c (exec_write): Disable cache-on-close of the fd iobuf (is this right? Why is a fd iobuf cached at all?) 2002-01-26 Werner Koch * g10.c, options.h: New option --gpg-agent-info * passphrase.c (agent_open): Let it override the environment info. * seckey-cert.c (check_secret_key): Always try 3 times when the agent is enabled. * options.skel: Describe --use-agent. 2002-01-24 David Shaw * pubkey-enc.c (is_algo_in_prefs, get_it): Only check preferences against keys with v4 self sigs - there is really little point in warning for every single non-IDEA message encrypted to an old key. * pkclist.c (select_algo_from_prefs): Only put in the fake IDEA preference if --pgp2 is on. * mainproc.c (check_sig_and_print): Print "Expired" for expired but good signatures (this still prints "BAD" for expired but bad signatures). 2002-01-23 David Shaw * keygen.c (ask_keysize): Cosmetic: don't present a RSA signing key as a "keypair" which can be 768 bits long (as RSA minimum is 1024). * pubkey-enc.c (is_algo_in_prefs): Allow IDEA as a fake preference for v3 keys with v3 selfsigs. 2002-01-22 David Shaw * packet.h, getkey.c (merge_selfsigs_main), pkclist.c (select_algo_from_prefs): Implement the fake IDEA preference as per RFC2440:12.1. This doesn't mean that IDEA will be used (the plugin may not be present), but it does mean that a v3 key with a v3 selfsig has an implicit IDEA preference instead of 3DES. v3 keys with v4 selfsigs use preferences as normal. * encode.c (encode_crypt): if select_algo_from_prefs fails, this means that we could not find a cipher that both keys like. Since all v4 keys have an implicit 3DES preference, this means there is a v3 key with a v3 selfsig in the list. Use 3DES in this case as it is the safest option (we know the v4 key can handle it, and we'll just hope the v3 key is being used in an implementation that can handle it). If --pgp2 is on, warn the user what we're doing since it'll probably break PGP2 compatibility. * g10.c (main): Do not force using IDEA for encrypted files in --pgp2 mode - let the fake IDEA preference choose this for us for better compatibility when encrypting to multiple keys, only some of which are v3. * keygen.c (keygen_set_std_prefs): Put 3DES on the end of the default cipher pref list (RFC2440: "...it is good form to place it there explicitly."). If the user has the IDEA plugin installed, put a preference for IDEA *after* 3DES to effectively disable its use for everything except encrypting along with v3 keys. * encode.c, g10.c, sign.c: Change the PGP2 warning line from "... will not be usable ..." to "... may not be usable ..." as the user could be using one of the enhanced PGP2 variations. * helptext.c: Revise the sign_uid.class help text as suggested by Stefan. 2002-01-20 Werner Koch * passphrase.c (passphrase_to_dek): Add tryagain_text arg to be used with the agent. Changed all callers. (agent_get_passphrase): Likewise and send it to the agent * seckey-cert.c (do_check): New arg tryagain_text. (check_secret_key): Pass the string to do_check. * keygen.c (ask_passphrase): Set the error text is required. * keyedit.c (change_passphrase): Ditto. * passphrase.c (agent_open): Disable opt.use_agent in case of a problem with the agent. (agent_get_passphrase): Ditto. (passphrase_clear_cache): Ditto. 2002-01-19 Werner Koch * passphrase.c (agent_open): Add support for the new Assuan based gpg-agent. New arg to return the used protocol version. (agent_get_passphrase): Implemented new protocol here. (passphrase_clear_cache): Ditto. (readline): New. 2002-01-15 Timo Schulz * encode.c (encode_crypt_files): Fail if --output is used. * g10.c: New command --decrypt-files. * decrypt.c (decrypt_messages): New. 2002-01-09 David Shaw * g10.c, misc.c, gpgv.c: move idea_cipher_warn to misc.c so gpgv.c doesn't need a stub for it any longer. * g10.c (get_temp_dir), main.h: no longer used (it's in exec.c now) * g10.c (main), delkey.c (delete_keys), main.h : Allow --delete-key (now --delete-keys, though --delete-key still works, of course) to delete multiple keys in one go. This applies to --delete-secret-key(s) and --delete-secret-and-public-key(s) as well. 2002-01-09 Timo Schulz * encode.c (encode_crypt_files): Now it behaves like verify_files. * g10.c (main): We don't need to check argc for encode_crypt_files any longer. 2002-01-09 Timo Schulz * exec.c: Include windows.h for dosish systems. 2002-01-08 Timo Schulz * g10.c (main): New description for --encrypt-files. 2002-01-08 Werner Koch * g10.c (main): Must register the secring for encryption because it is needed to figure out the default recipient. Reported by Roger Sondermann. 2002-01-05 David Shaw * keyedit.c (menu_adduid): Require --expert before adding a photo ID to a v3 key, and before adding a second photo ID to any key. * keyedit.c (keyedit_menu): Don't allow adding photo IDs in rfc1991 or pgp2 mode. * getkey.c (merge_selfsigs_subkey): Permit v3 subkeys. Believe it or not, this is allowed by rfc 2440, and both PGP 6 and PGP 7 work fine with them. * g10.c, options.h, keyedit.c, sign.c: Move the "ask for expiration" switch off of --expert, which was getting quite overloaded, and onto ask-sig-expire and ask-cert-expire. Both default to off. * g10.c (main): Change the default compression algo to 1, to be more OpenPGP compliant (PGP also uses this, so it'll help with interoperability problems as well). * encode.c (encode_crypt): Handle compression algo 2, since the default is now 1. * build-packet.c (build_attribute_subpkt): Fix off-by-one error. 2002-01-05 Werner Koch * g10.c (main): Do not register the secret keyrings for certain commands. * keydb.c (keydb_add_resource): Use access to test for keyring existence. This avoids cached opened files which are bad under RISC OS. 2002-01-04 David Shaw * sign.c (sign_file, sign_symencrypt_file): always use one-pass packets unless rfc1991 is enabled. This allows a signature made with a v3 key to work in PGP 6 and 7. Signatures made with v4 keys are unchanged. * g10.c (main): Disallow non-detached signatures in PGP2 mode. Move the "you must use files and not pipes" PGP2 warning up so all the PGP2 stuff is together. * encode.c (encode_simple): Use the actual filesize instead of partial length packets in the internal literal packet from a symmetric message. This breaks PGP5(?), but fixes PGP2, 6, and 7. It's a decent tradeoff. Note there was only an issue with old-style RFC1991 symmetric messages. 2440-style messages in 6 and 7 work with or without partial length packets. 2002-01-03 David Shaw * g10.c (main): Removed --no-default-check-level option, as it is not consistent with other "default" options. Plus, it is the same as saying --default-check-level 0. * exec.c (exec_read): Disallow caching tempfile from child process, as this keeps the file handle open and can cause unlink problems on some platforms. * keyserver.c (keyserver_search_prompt): Minor tweak - don't bother to transform keyids into textual form if they're just going to be transformed back to numbers. 2002-01-03 Timo Schulz * g10.c: New command --encrypt-files. * verify.c (print_file_status): Removed the static because encode_crypt_files also uses this function. * main.h (print_files_status): New. (encode_crypt_files): New. * encode.c (encode_crypt_files): New. 2002-01-02 Stefan Bellon * keyserver.c: Moved util.h include down in order to avoid redefinition problems on RISC OS. * keyring.c (keyring_lock): Only lock keyrings that are writable. * keyring.c (keyring_update_keyblock): Close unused iobuf. * hkp.c (parse_hkp_index, hkp_search) [__riscos__]: Changed unsigned char* to char* because of compiler issues. * exec.c (exec_finish) [__riscos__]: Invalidate close cache so that file can be unlinked. 2001-12-28 David Shaw * g10.c (main): Use a different strlist to check extensions since they need to be handled seperately now. * misc.c,main.h (check_permissions): Properly handle permission and ownership checks on files in the lib directory (e.g. /usr/local/lib/gnupg), which are owned by root and are world-readable, and change all callers to specify extension or per-user file. * photoid.c (show_photo), keyserver.c (keyserver_spawn): Bug fix - don't call exec_finish if exec_write fails. * keyserver.c (keyserver_spawn): Look for OPTIONS from the keyserver helper - specifically, a "OUTOFBAND" option for the email keyserver. * mainproc.c (list_node), keylist.c (list_keyblock_colon), import.c (delete_inv_parts), export.c (do_export_stream): Use signature flags for exportability check rather than re-parsing the subpacket. * keyid.c, keydb.h (get_lsign_letter): No longer needed. 2001-12-27 David Shaw * exec.c (exec_finish): Show errors when temp files cannot be deleted for whatever reason. * exec.c (exec_read): Don't rely on WEXITSTATUS being present. * exec.c (make_tempdir): Add temp file creator for win32. Don't create an incoming temp file if the exec is write-only. * keyserver.c (keyserver_spawn): Clean up error handling, for when the spawn fails. * photoid.c (show_photo): Clean up error handling. * misc.c (check_permissions): Neaten. 2001-12-25 David Shaw * mkdtemp.c (mkdtemp): Add copyleft info and tweak the 'X' counter to be a bit simpler. * keyserver.c, photoid.c: Remove unused headers left over from when the exec functions lived there. 2001-12-23 Timo Schulz * misc.c (check_permissions): Do not use it for W32 systems. * tdbio.c (migrate_from_v2): Define ftruncate as chsize() for W32. * mkdtemp.c: W32 support. * photoid.c: Ditto. * exec.c: Ditto. 2001-12-22 David Shaw * exec.c (make_tempdir): avoid compiler warning with const * mkdtemp.c (mkdtemp): catch the empty ("") string case in case someone repurposes mkdtemp at some point. * photoid.c (generate_photo_id, show_photo): some type changes from Stefan Bellon. * exec.c (make_tempdir): handle Win32 systems, suggested by Timo Schulz. 2001-12-22 Werner Koch * encode.c (encode_simple, encode_crypt): i18n 2 strings. 2001-12-22 Timo Schulz * encode.c (encode_simple, encode_crypt): Use is_file_compressed to avoid to compress compressed files. 2001-12-22 Werner Koch * keyserver.c (keyserver_spawn): Removed some variables declaration due to shadowing warnings. * build-packet.c (build_attribute_subpkt): s/index/idx/ to avoid compiler warnig due to index(3). * getkey.c (get_ctx_handle): Use KEYDB_HANDLE as return value. * keylist.c (list_one): Made resname const. * keyedit.c (keyedit_menu): Allow "addphoto" only when --openpgp is not used. * options.skel: Changed one example photo viewer to qiv. 2001-12-21 David Shaw * Makefile.am: add exec.c, exec.h, photoid.c, and photoid.h * build-packet.c (build_attribute_subpkt): new function to build the raw attribute subpacket. Note that attribute subpackets have the same format as signature subpackets. * exec.c: new file with generic exec-a-program functionality. Used by both photo IDs and keyserver helpers. This is pretty much the same code that used to be keyserver specific, with some changes to be usable generically. * free-packet.c (free_attributes (new)): function to free an attribute packet. * gpgv.c: added stub show_photo * keyedit.c (keyedit_menu, menu_adduid, menu_showphoto): can add a photo (calls generate_photo_id), or display a photo (calls show_photo) from the --edit menu. New commands are "addphoto", and "delphoto" (same as "deluid"). * keylist.c (list_keyblock_print): show photos during key list if --show-photos enabled. * keyserver.c (keyserver_spawn): use the generic exec_xxx functions to call keyserver helper. * g10.c, options.h: three new options - --{no-}show-photos, and --photo-viewer to give the command line to display a picture. * options.skel: instructions for the photo viewer * parse-packet.c (parse_user_id, setup_user_id (new)): common code for both user IDs and attribute IDs moved to setup_user_id. * parse-packet.c (make_attribute_uidname (new)): constructs a fake "name" for attribute packets (e.g. "[image of size ...]") * parse-packet.c (parse_attribute (replaces parse_photo_id), parse_attribute_subpkts): Builds an array of individual attributes. Currently only handles attribute image / type jpeg subpackets. * sign.c (hash_uid): Fix bug in signing attribute (formerly photo_id) packets. * packet.h, and callers: globally change "photo_id" to "attribute" and add structures for attributes. The packet format is generic attributes, even though the only attribute type thus far defined is jpeg. 2001-12-21 David Shaw * parse-packet.c (can_handle_critical): Can handle critical revocation subpackets now. * trustdb.c (mark_usable_uid_certs): Disregard revocations for nonrevocable sigs. Note that this allows a newer revocable signature to override an older nonrevocable signature. * sign.c (make_keysig_packet): add a duration field and change all callers. This makes make_keysig_packet closer to write_signature_packets and removes some duplicated expiration code. * keyedit.c (keyedit_menu, menu_revsig, sign_uids, sign_mk_attrib): Add nrsign command, don't allow revoking a nonrevocable signature, * g10.c (main): Add --nrsign option to nonrevocably sign a key from the command line. * build-packet.c (build_sig_subpkt_from_sig): Comment to explain the use of CRITICAL. 2001-12-21 Werner Koch * g10.c. options.h : New option --show-keyring * getkey.c (get_ctx_handle): New. * keylist.c (list_one): Implement option here. By David Champion. 2001-12-20 David Shaw * keyserver.c (keyserver_spawn): Use mkdtemp() to make temp directory. * mkdtemp.c: replacement function for those platforms that don't have mkdtemp (make a temp directory securely). 2001-12-19 David Shaw * misc.c (check_permissions): New function to stat() and ensure the permissions of GNUPGHOME and the files have safe permissions. * keydb.c (keydb_add_resource): Check keyring permissions. * tdbio.c (tdbio_set_dbname): Check permissions of trustdb.gpg * keyserver.c (keyserver_spawn): Disable keyserver schemes that involve running external programs if the options file has unsafe permissions or ownership. * g10.c, options.h: New option --no-permission-warning to disable the permission warning message(s). This also permits use of the keyserver if it had been disabled (see above). Also check the permissions/ownership of random_seed. * keyserver.c (keyserver_spawn): The new glibc prints a warning when using mktemp() (the code was already secure, but the warning was bound to cause confusion). Use a different implementation based on get_random_bits() instead. Also try a few times to get the temp dir before giving up. 2001-12-19 Werner Koch * g10.c, passphrase.c [CYGWIN32]: Allow this as an alias for MINGW32. 2001-12-18 David Shaw * g10.c (idea_cipher_warn): Add a flag to show the warning always or once per session and change all callers (show always except for the secret key protection and unknown cipher from an encrypted message errors). Also make the strings translatable. * pubkey-enc.c (get_it): Add the IDEA cipher warning if the user tries to decrypt an IDEA encrypted message without the IDEA plugin. * keyserver.c (parse_keyserver_uri): More strict checking of the keyserver URI. Specifically, fail if the ":port" section is anything except a number between 1 and 65535. 2001-12-17 David Shaw * keyserver.c (print_keyinfo): No need to check for control/illegal characters, as utf8_to_native does this for us. * mainproc.c (proc_encrypted): Use generic IDEA warning. * gpgv.c: add stub for idea_cipher_warn * g10.c, hkp.c, keyserver.c: Fix capitalization and plural issues. * encode.c (encode_crypt), sign.c (sign_file, clearsign_file): disable pgp2 mode after the message is no longer pgp2 compatible. * g10.c (main): Tweak the PGP2.x IDEA warning to use the generic warning, and not merely fail if the IDEA plugin isn't there. * g10.c (main, idea_cipher_warn), keygen.c (set_one_pref), seckey-cert.c (do_check): Add a generic IDEA warning for when the IDEA plugin is not present. This pops up when the user uses "--cipher-algo idea", when setpref is used to set a "S1" preference, and when a secret key protected with IDEA is used. 2001-12-15 Werner Koch * keyserver.c (keyserver_spawn): Assert that we have dropped privs. 2001-12-13 Werner Koch * pubkey-enc.c (get_session_key): Check that the public key algorithm is indeed usable for en/decryption. This avoid a strange error message from pubkey_decrypt if for some reasons a bad algorithm indentifier is passed. 2001-12-12 David Shaw * Fixed some types for portability. Noted by Stefan Bellon. 2001-12-11 Werner Koch * hkp.c (hkp_export): Do not print possible control characters from a keyserver response. (parse_hkp_index): Made uid an unsigned char* because it is passed to isspace(). (hkp_search): Ditto for the char* vars. * g10.c (main): Print the IDEA warning also for -c and -se. * g10.c (get_temp_dir): Assert that we have dropped privs * encode.c (encode_crypt): Include the first key into the --pgp2 check. 2001-12-07 David Shaw * g10.c, options.h: New option --pgp2. This is identical to "--rfc1991 --cipher-algo idea --compress-algo 1 --digest-algo md5 --force_v3_sigs" with the addition of an warning to advise the user not to use a pipe (which would break pgp2 compatibility). * encode.c (encode_crypt): warn if the user tries to encrypt to any key that is not RSA and <= 2048 bits when the --pgp2 option is used. * sign.c (sign_file, clearsign_file): When using --pgp2, make a v3 sig, and warn if the signature is made with a non-v3 key. 2001-12-05 David Shaw * sign.c (sign_file, clearsign_file, sign_symencrypt_file): Prompt for sig expiration if --expert is set and --force-v3-sigs is not set (v3 sigs cannot expire). * mainproc.c (check_sig_and_print): After checking a sig, print expiration status. This causes a error return if the sig is expired. * build-packet.c (build_sig_subpkt_from_sig): Include a critical sig expiration subpacket if the sig is to expire. * keyedit.c (sign_uids): Do not sign an expired key unless --expert is set, in which case prompt. Also, offer to expire a signature when the key the user is signing expires. * keygen.c (ask_expire_interval): Add a value to determine whether to prompt for a key or sig expiration and change all callers. * keyid.c: New functions: expirestr_from_sig and colon_expirestr_from_sig. * keylist.c (list_keyblock_colon): Show sig expiration date in the --with-colons listing. * sign.c (make_keysig_packet, write_signature_packets): Pass in an optional timestamp for the signature packet, and change all callers. * keyedit.c (sign_mk_attrib): Include a critical expiration subpacket in the signature if an expiration date is given. 2001-12-04 David Shaw * keyedit.c (sign_uids): If the user tries to sign a locally-signed key, allow the cert to be promoted to a full exportable signature. This essentially deletes the old non-exportable sig, and replaces it with a new exportable one. 2001-12-04 David Shaw * keyedit.c (keyedit_menu): Do not allow signing a revoked key unless --expert is set, and ask even then. * keyedit.c (sign_uids): Do not allow signing a revoked UID unless --expert is set, and ask even then. * g10.c, options.h : New option --expert 2001-11-16 David Shaw * Allow the user to select no compression via "--compress-algo 0" on the command line. * keyedit.c (show_prefs): Show compression preferences in the long-form "showpref" style. * keygen.c (set_one_pref): Permit setting a no-compression ("Z0") preference. * getkey.c (fixup_uidnode): Fix compression preference corruption bug. 2001-12-02 David Shaw * g10.c: Add advisory --for-your-eyes-only option as per section 5.9 of 2440. 2001-12-05 David Shaw * Force a V4 sig if the user has a notation or policy URL set. 2001-12-04 David Shaw * g10.c: Add options --keyserver-options, --temp-directory, and auto-key-retrieve (the opposite of no-auto-key-retrieve). * hkp.c (hkp_search): New function to handle searching a HKP keyserver for a key * hkp.c (hkp_ask_import, hkp_export): Pretty large changes to make them communicate via the generic functions in keyserver.c * keyserver.c: new file with generic keyserver routines for getting keys from a keyserver, sending keys to a keyserver, and searching for keys on a keyserver. Calls the internal HKP stuff in hkp.c for HKP keyserver functions. Other calls are handled by an external program which is spawned and written to and read from via pipes. Platforms that don't have pipes use temp files. 2001-11-20 David Shaw * options.h, g10.c: New options show-notation, no-show-notation, default-check-level, no-default-check-level, show-policy-url, no-show-policy-url. * packet.h, sign.c (make_keysig_packet), parse-packet.c (parse_signature), free-packet.c (free_seckey_enc): Fill in structures for notation, policy, sig class, exportability, etc. * keyedit.c, keylist.c (print_and_check_one_sig, list_keyblock_print): Show flags in signature display for cert details (class, local, notation, policy, revocable). If selected, show the notation and policy url. * keyedit.c (sign_uids): Prompt for and use different key sig classes. * helptext.c (helptexts): Add help text to explain different key signature classes 2001-11-26 David Shaw * trustdb.c (mark_usable_uid_certs): Fix segfault from bad initialization and fix reversed key signature expiration check. 2001-11-09 Werner Koch * export.c (do_export_stream): Put all given names into a search description and change the loop so that all matching names are returned. 2001-11-08 Werner Koch * pubkey-enc.c (get_it): To reduce the number of questions on the MLs print the the name of cipher algorithm 1 with the error message. * mainproc.c: Changed the way old rfc1991 encryption cipher is selected. Based on a patch by W Lewis. * pkclist.c (do_edit_ownertrust): Allow to skip over keys, the non working "show info" is now assigned to "i" * trustdb.c (ask_ownertrust, validate_keys): Implement a real quit here. Both are by David Shaw. * trustdb.c (validate_keys): Make sure next_exipire is initialized. * sign.c (make_keysig_packet): Use SHA-1 with v4 RSA keys. * g10.c, options.h : New option --[no-]froce-v4-certs. * sign.c (make_keysig_packet): Create v4 sigs on v4 keys even with a v3 key. Use that new option. By David Shaw * revoke.c (ask_revocation_reason): Allow to select "no reason". By David Shaw. * keyid.c (fingerprint_from_sk): Calculation of an v3 fpr was plain wrong - nearly the same code in fingerprint_from_pk is correct. * build-packet.c (do_secret_key): Added a few comments to the code. 2001-11-07 Werner Koch * g10.c (main): Print a warning when -r is used w/o encryption. Suggested by Pascal Scheffers. 2001-10-23 Werner Koch * keyedit.c (keyedit_menu): Changed helptext for showpref command. Suggested by Reinhard Wobst. * keyring.c (keyring_search): When marking the offtbl ready, take into account that we may have more than one keyring. 2001-10-22 Werner Koch * Makefile.am: Do not use OMIT_DEPENDENCIES * build-packet.c (build_sig_subpkt): Default is now to put all types of subpackets into the hashed area and only list those which should go into the unhashed area. 2001-10-18 Werner Koch * keydb.c (keydb_add_resource): Rearranged the way we keep track of the resource. There will now be an entry for each keyring here and not in keyring.c itself. Store a token to allow creation of a keyring handle. Changed all functions to utilize this new design. (keydb_locate_writable): Make a real implementation. * keyring.c (next_kr): Removed and changed all callers to set the resource directly from the one given with the handle. (keyring_is_writable): New. (keyring_rebuild_cache): Add an arg to pass the token from keydb. 2001-10-17 Werner Koch * keyring.c (keyring_search): Enabled word search mode but print a warning that it is buggy. 2001-10-11 Werner Koch * hkp.c (hkp_ask_import): No more need to set the port number for the x-hkp scheme. (hkp_export): Ditto. 2001-10-06 Stefan Bellon * passphrase.c [__riscos__]: Disabled agent specific stuff. * g10.c: New option --no-force-v3-sigs. 2001-10-04 Werner Koch * export.c (do_export_stream): Do not push the compress filter here because the context would run out of scope due to the iobuf_close done by the caller. (do_export): Do it here instead. 2001-09-28 Werner Koch * keyedit.c (sign_uids): Always use the primary key to sign keys. * getkey.c (finish_lookup): Hack to return only the primary key if a certification key has been requested. * trustdb.c (cmp_kid_for_make_key_array): Renamed to (validate_one_keyblock): this and changed arg for direct calling. (make_key_array): Renamed to (validate_one_keyblock): this and changed args for direct calling. (mark_usable_uid_certs, validate_one_keyblock) (validate_key_list): Add next_expire arg to keep track of expiration times. (validate_keys): Ditto for UTKs and write the stamp. * tdbio.c (migrate_from_v2): Check return code of tbdio_sync. * tdbdump.c (import_ownertrust): Do a tdbio_sync(). * keyring.c: Made the offtbl an global object. 2001-09-27 Werner Koch * pkclist.c (do_edit_ownertrust): Allow settin of ultimate trust. * trustdb.c (mark_keyblock_seen): New. (make_key_array): Use it to mark the subkeys too. (validate_keys): Store validity for ultimatly trusted keys. 2001-09-26 Werner Koch * pkclist.c (check_signatures_trust, do_we_trust): Removed the invocation of add_ownertrust. Minor changes to the wording. (add_ownertrust, add_ownertrust_cb): Removed. * trustdb.c (get_validity): Allow to lookup the validity using a subkey. * trustdb.c (new_key_hash_table): Increased the table size to 1024 and changed the masks accordingly. (validate): Changed stats printing. (mark_usable_uid_certs): New. (cmp_kid_for_make_key_array): Does now check the signatures and figures out a usable one. 2001-09-25 Werner Koch * keyring.c (new_offset_item,release_offset_items) (new_offset_hash_table, lookup_offset_hash_table) (update_offset_hash_table, update_offset_hash_table_from_kb): New. (keyring_search): Use a offset table to optimize search for unknown keys. (keyring_update_keyblock, keyring_insert_keyblock): Insert new offsets. * getkey.c (MAX_UNK_CACHE_ENTRIES): Removed the unknown keys caching code. * g10.c, options.h, import.c: Removed the entire allow-secret-key-import stuff because the validity is now controlled by other means. * g10.c: New command --rebuild-keydb-caches. * keydb.c (keydb_rebuild_caches): New. * keyring.c (do_copy): Moved some code to (create_tmp_file, rename_tmp_file, write_keyblock): new functions. (keyring_rebuild_cache): New. * packet.h (PKT_ring_trust): Add sigcache field. * parse-packet.c (parse_trust): Parse sigcache. * keyring.c (do_copy): Always insert a sigcache packet. (keyring_get_keyblock): Copy the sigcache packet to the signature. * sig-check.c (cache_sig_result): Renamed from cache_selfsig_result. Changed implementation to use the flag bits and changed all callers. (mdc_kludge_check): Removed this unused code. (do_check): Do not set the sig flags here. * import.c (read_block): Make sure that ring_trust packets are never imported. * export.c (do_export_stream): and never export them. * trustdb.c (make_key_array): Skip revoked and expired keys. 2001-09-24 Werner Koch * g10.c, options.h: New option --no-auto-check-trustdb. * keygen.c (do_generate_keypair): Set newly created keys to ultimately trusted. * tdbio.h, tdbio.c: Removed all support for records DIR, KEY, UID, PREF, SIG, SDIR and CACH. Changed migration function to work direct on the file. (tdbio_read_nextcheck): New. (tdbio_write_nextcheck): New. 2001-09-21 Werner Koch Revamped the entire key validation system. * trustdb.c: Complete rewrite. No more validation on demand, removed some functions, adjusted to all callers to use the new and much simpler interface. Does not use the LID anymore. * tdbio.c, tdbio.h: Add new record types trust and valid. Wrote a migration function to convert to the new trustdb layout. * getkey.c (classify_user_id2): Do not allow the use of the "#" prefix. * keydb.h: Removed the TDBIDX mode add a skipfnc to the descriptor. * keyring.c (keyring_search): Implemented skipfnc. * passphrase.c (agent_open): Add missing bracket. Include windows.h. 2001-09-19 Werner Koch * keylist.c (print_fingerprint): Renamed from fingerprint, made global available. Added new arg to control the print style. * mainproc.c (print_fingerprint): Removed. * pkclist.c (print_fpr, fpr_info): Removed and changed callers to use print_fingerprint. * keyedit.c (show_fingerprint): Ditto. * passphrase.c (writen, readn) (agent_open, agent_close) (agent_get_passphrase) (passphrase_clear_cache): Support for W32. Contributed by Timo. * import.c (import_one): Release keydb handles at 2 more places. * keyring.c (keyring_release): Close the iobuf. (keyring_get_keyblock): Init ret_kb to NULL and store error contidion. * import.c (import_new_stats_handle): New. (import_release_stats_handle): New. (import_print_stats): Renamed from static fnc print_stats. (import_keys, import_keys_stream): Add an optional status handle arg and changed all callers. * hkp.c (hkp_ask_import): Add an stats_handle arg and changed all callers. * mainproc.c (print_pkenc_list): Use print_utf8_string2(). 2001-09-18 Werner Koch * g10.c: New command --refresh-keys. * hkp.c (hkp_refresh_keys): New. Contributed by Timo Schulz. * parse-packet.c (parse): Stop on impossible packet lengths. 2001-09-17 Werner Koch * mainproc.c (print_notation_data): Wrap notation data status lines after 50 chars. * mainproc.c (proc_pubkey_enc): Make option try-all-secrets work. By disastry@saiknes.lv. 2001-09-14 Werner Koch * parse-packet.c (dump_sig_subpkt): List key server preferences and show the revocable flag correctly. Contributed by David Shaw. 2001-09-09 Werner Koch * keyedit.c (keyedit_menu): No need to define another p. * keylist.c (print_capabilities): s/used/use/ so that it does not shadow a global. * sign.c (sign_file): Renamed arg encrypt to encryptflag * keygen.c: Replaced all "usage" by "use". * misc.c (openpgp_pk_algo_usage): Ditto. * pubkey-enc.c (get_it): Renamed arg k to enc so that the later defined k does not shadow it. * parse-packet.c (parse_gpg_control): No need to define another i. * getkey.c (get_pubkey_byfprint): Must use the enum values and not the fprint_len. * keyring.c (keyring_search): Removed a non-sense break. Both bugs pointed out by Stefan. 2001-09-07 Werner Koch * status.c, status.h: Added NO_RECP and ALREADY_SIGNED. * pkclist.c (build_pk_list): Issue NO_RECP. * keyedit.c (sign_uids): Added experimental ALREADY_SIGNED * hkp.c (hkp_import): Use log_error. Bug reported by Neal H Walfield. * getkey.c (classify_user_id2): Change args to take the desc union direct. It was a stupid idea to pass the individual fields of an union to this function. Changed all callers. (classify_user_id): Ditto and allow to pass NULL as the description. 2001-09-06 Werner Koch * getkey.c (fixup_uidnode): Features flag is now a bit vector. * keygen.c (add_feature_mdc): Ditto. Revamped the entire key I/O code to be prepared for other ways of key storages and to get rid of the existing shit. GDBM support has gone. * keydb.c: New * keyring.c, keyring.h: New. * ringedit.c: Removed. Moved some stuff to keyring.c * getkey.c: Changed everything related to the key retrieving functions which are now using the keydb_ functions. (prepare_search, word_match_chars, word_match) (prepare_word_match, compare_name): Moved to keyring.c (get_pubkey_byname): Removed ctx arg and add ret_kdbhd arg. Changed all callers. (key_byname): Use get_pubkey_end to release the context and take new ret_kbdhd arg. Changed all callers. (classify_user_id2): Fill the 16 byte fingerprint up with 4 null bytes not with zero bytes of value 4, tsss. * import.c (import_one): Updated to use the new keydb interface. (import_secret_one): Ditto. (import_revoke_cert): Ditto. * delkey.c (do_delete_key): Ditto. * keyedit.c (keyedit_menu): Ditto. (get_keyblock_byname): Removed. * revoke.c (gen_revoke): Ditto. * export.c (do_export_stream): Ditto. * trustdb.c (update_trustdb): Ditto. * g10.c, gpgv.c (main): Renamed add_keyblock_resource to keydb_add_resource. * Makefile.am: Added and removed files. * keydb.h: Moved KBNODE typedef and MAX_FINGERPRINT_LEN to * global.h: this new header. 2001-09-03 Werner Koch * passphrase.c (agent_get_passphrase): Changed nread to size_t. (passphrase_clear_cache): Ditto. * keyid.c (mk_datestr): Avoid trigraphs. (fingerprint_from_pk): Cache the keyid in the pk. * options.h: Add opt.with_fingerprint so that we know whether the corresponding options was used. * g10.c (main): Set it here. * pkclist.c (check_signatures_trust): Always print fingerprint when this option is used. Mixed a minor memory leak. * status.c, status.h: New status INV_RECP. * pkclist.c (build_pk_list): Issue this status. 2001-08-31 Werner Koch * parse-packet.c (parse_key,parse_pubkeyenc) (parse_signature): Return error on reading bad MPIs. * mainproc.c (check_sig_and_print): Always print the user ID even if it is not bound by a signature. Use the primary UID in the status messages and encode them in UTF-8 * status.c (write_status_text_and_buffer): New. 2001-08-30 Werner Koch * packet.h (sigsubpkttype_t): Add SIGSUBPKT_FEATURES. (PKT_public_key, PKT_user_id): Add a flag for it. * parse-packet.c, build-packet.c: Add support for them. * getkey.c (fixup_uidnode, merge_selfsigs): Set the MDC flags. * keygen.c (add_feature_mdc): New. (keygen_upd_std_prefs): Always set the MDC feature. * keyedit.c (show_prefs): List the MDC flag * pkclist.c (select_mdc_from_pklist): New. * encode.c (encode_crypt, encrypt_filter): Test whether MDC should be used. * cipher.c (write_header): Set MDC use depending on the above test. Print more status info. * delkey.c (do_delete_key): Kludge to delete a secret key with no public key available. * ringedit.c (find_secret_keyblock_direct): New. * getkey.c (seckey_available): Simplified. * ringedit.c (cmp_seckey): Now compares the secret key against the public key while ignoring all secret parts. (keyring_search): Use a public key packet as arg. Allow to search for subnkeys (search): Likewise. Changed all callers. (find_secret_keyblock_bypk): New. (find_secret_keyblock_byname): First locate the pubkey and then find the correponding secret key. * parse-packet.c (parse): Renamed pkttype arg to onlykeypkts and changed code accordingly. Changed all callers. (search_packet): Removed pkttype arg. * keyedit.c (keyedit_menu): First locate the public key and then try to locate a secret key. * ringedit.c (locate_keyblock_by_fpr): Removed. (locate_keyblock_by_keyid): Removed. (find_keyblock_bysk): Removed. * sig-check.c (check_key_signature2): Print the keyid along with the wrong sig class errors. 2001-08-24 Werner Koch * sign.c (sign_file): Stripped the disabled comment packet code. (sign_file, sign_symencrypt_file): Moved common code to .. (write_onepass_sig_packets): .. this new function. (sign_file, clearsign_file, sign_symencrypt_file): Moved common code to (write_signature_packets): this new function. (write_signature_packets, make_keysig_packet) (update_keysig_packet): Moved common code to (hash_uid, hash_sigclass_to_magic): these new functions (sign_file, sign_symencrypt_file): Moved common code to (write_plaintext_packet): this new function. 2001-08-21 Stefan Bellon * trustdb.c (query_trust_info): Changed trustlevel to signed int. * g10.c [__riscos__]: Fixed handling of --use-agent --lock-multiple. 2001-08-20 Werner Koch * encr-data.c (decrypt_data): Keep track on whether we already printed information about the used algorithm. * mainproc.c (proc_encrypted): Removed the non-working IDEA hack and print a message about the assumed algorithm. * passphrase.c (passphrase_to_dek): Use the same algorithm as above. (proc_symkey_enc): Print the algorithm, so that the user knows it before entering the passphrase. (proc_pubkey_enc, proc_pubkey_enc): Zero the DEK out. * encode.c (encode_crypt, encrypt_filter): Ditto. * g10.c: Allow for --sign --symmetric. * sign.c (sign_and_symencrypt): New. Applied patches from Stefan Bellon to support RISC OS. Nearly all of these patches are identified by the __riscos__ macro. * compress.c: Added a couple of casts. * g10.c [__riscos__]: Some patches and new options foo-file similar to all foo-fd options. * gpgv.c, openfile.c, ringedit.c, tdbio.c: Minor fixes. Mainly replaced hardcoded path separators with EXTSEP_S like macros. * passprase.c [__riscos__]: Disabled agent stuff * trustdb.c (check_trust): Changed r_trustlevel to signed int to avoid mismatch problems in pkclist.c * pkclist.c (add_ownertrust): Ditto. * plaintext.c (handle_plaintext) [__riscos__]: Print a note when file can't be created. * options.h [__riscos__]: Use an extern unless included from the main module. * signal.c (got_fatal_signal) [__riscos__]: Close all files. 2001-08-14 Werner Koch * keygen.c (ask_algo): New arg r_usage. Allow for RSA keys. (gen_rsa): Enabled the code. (do_create): Enabled RSA branch. (parse_parameter_usage): New. (proc_parameter_file): Handle usage parameter. (read_parameter_file): Ditto. (generate_keypair): Ditto. (generate_subkeypair): Ditto. (do_generate_keypair): Ditto. (do_add_key_flags): New. (keygen_add_std_prefs): Use the new function. (keygen_add_key_flags_and_expire): New. (write_selfsig, write_keybinding): Handle new usage arg. * build-packet.c (build_sig_subpkt): Make sure that key flags go into the hashed area. * keygen.c (write_uid): Initialize the reference cunter. * keyedit.c (keyedit_menu): No more need to update the trustdb for preferences. Added calls to merge keblock. * kbnode.c (dump_kbnode): Print some more flags. 2001-08-10 Werner Koch Revamped the preference handling. * packet.h (prefitem_t, preftype_t): New. (PKT_public_key): Added a uid field. (PKT_user_id): Added field to store preferences and a reference counter. * parse-packet.c (parse_user_id,parse_photo_id): Initialize them * free-packet.c (free_user_id): Free them. (copy_user_id): Removed. (scopy_user_id): New. (cmp_user_ids): Optimized for identical pointers. (release_public_key_parts): Release the uid. (copy_public_key_with_new_namehash): Removed. (copy_prefs): New. * keyedit.c (menu_adduid): Use the new shallow copy user id. (show_prefs): Adjusted implementation. (keyedit_menu): No more need to update the trustdb after changing preferences. * getkey.c (fixup_uidnode): Store preferences. (find_by_name): Return a user id packet and remove namehash stuff. (lookup): Removed the unused namehash stuff. (finish_lookup): Added foundu arg. (pk_from_block): Removed the namehash arg and changed all callers. (merge_selfsigs): Copy prefs to all keys. * trustdb.c (get_pref_data): Removed. (is_algo_in_prefs): Removed. (make_pref_record): Deleted and removed all class. * pkclist.c (select_algo_from_prefs): Adjusted for the new preference implementation. * pubkey-enc.c (is_algo_in_prefs): New. (get_it): Use that new function. 2001-08-09 Werner Koch * build-packet.c (build_sig_subpkt): Fixed calculation of newarea->size. * g10.c (main): New option "--preference-list" * keyedit.c (keyedit_menu): New commands "setpref" and "updpref". (menu_set_preferences): New. * keygen.c (keygen_set_std_prefs): New. (set_one_pref): New. (check_zip_algo): New. (keygen_get_std_prefs): New. (keygen_upd_std_prefs): New (keygen_add_std_prefs): Move the pref setting code into the above fnc. * build-packet.c (build_sig_subpkt): Updated the list of allowed to update subpackets. 2001-08-08 Werner Koch * packet.h (subpktarea_t): New. (PKT_signature): Use that type for hashed_data and unhashed_data and removed the _data prefix from those fields. Changed all users. * parse-packet.c (parse_signature): Changed allocation for that. (parse_sig_subpkt): Changed declaration (enum_sig_subpkt): Ditto and changed implementation accordingly. * free-packet.c (cp_subpktarea): Renamed from cp_data_block and adjusted implementation. Changed caller. * sig-check.c (mdc_kludge_check): Adjusted the hashing. (do_check): Ditto. * sign.c (sign_file, clearsign_file, make_keysig_packet, update_keysig_packet): Ditto. * build-packet.c (build_sig_subpkt): Partial rewrite. (find_subpkt): Adjusted and made static. (delete_sig_subpkt): Adjusted. (do_signature): Ditto. * keygen.c (ask_keysize): Do not print the notes about suggested key sizes if just a DSA key is generated. * trustdb.c (add_ultimate_key): s/log_error/log_info/ for duplicated inserted trusted keys. 2001-08-07 Werner Koch * sign.c (sleep): Redefine for W32. * g10.c, options.h: Set new flag opt.no_homedir_creation when --no-options is given. * openfile.c (try_make_homedir): Don't create the homedir in that case. 2001-08-03 Werner Koch * armor.c (armor_filter): Removed the default comment string because it could get us in trouble due to translations using non ascii characters. 2001-08-01 Werner Koch * keylist.c (list_keyblock_print): Do not list revoked UIDs unless in verbose mode and we do no signature listing. * getkey.c (finish_lookup): Skip subkeys which are not yet valid. * g10.c, options.h: New option --ignore-valid-from. * sign.c (make_keysig_packet): Added new sigversion argument to allow the caller to force generation of required signature version. Changed all callers. Suggested by Thomas Roessler. * keyedit.c (sign_uids): Force v4 signature generation for local sigs. Removed the check for local signature and pre-v4 keys. 2001-07-27 Werner Koch * keyedit.c (sign_uids): Check that we are not trying to to a lsign with a pre-v4 key. Bug noticed by Thomas Roessler. 2001-07-26 Werner Koch * parse-packet.c (parse_photo_id): Reset all variables. * getkey.c (merge_selfsigs_main): Removed checks on PHOTO_ID because this is handled identically to a user ID. 2001-07-06 Werner Koch * cipher.c (write_header): Don't use MDC with --rfc1991. Suggested by disastry@saiknes.lv. 2001-07-05 Werner Koch * g10.c, options.h: New option --preserve-permissions. * ringedit.c (add_keyblock_resource): Use it here (keyring_copy): and here. * trustdb.c (verify_own_keys): Be more silent on --quiet. Suggested by Thomas Roessler. * sig-check.c (check_key_signature2): Ditto. * mainproc.c (proc_encrypted, proc_tree): Ditto * getkey.c (lookup): Ditto. 2001-07-04 Werner Koch * ringedit.c (add_keyblock_resource): Restore filename in case of error. 2001-06-25 Werner Koch * kbnode.c (dump_kbnode): Print the signature timestamp. * keyedit.c (keyedit_menu): New menu point "primary". (change_primary_uid_cb): New. (menu_set_primary_uid): New. * sign.c (update_keysig_packet): New. * build-packet.c (build_sig_subpkt): Put the primary UID flag into the hashed area. Allow update of some more packets. 2001-06-15 Werner Koch * getkey.c (merge_selfsigs): Exit gracefully when a secret key is encountered. May happen if a secret key is in public keyring. Reported by Francesco Potorti. 2001-06-12 Werner Koch * getkey.c (compare_name): Use ascii_memistr(), ascii_memcasecmp() * keyedit.c (keyedit_menu): Use ascii_strcasecmp(). * armor.c (radix64_read): Use ascii_toupper(). * ringedit.c (do_bm_search): Ditto. * keygen.c (read_parameter_file): Ditto. * openfile.c (CMP_FILENAME): Ditto. * g10.c (i18n_init): We can now use just LC_ALL. 2001-05-29 Werner Koch * keygen.c (generate_subkeypair): Print a warning if a subkey is created on a v3 key. Suggested by Brian M. Carlson. 2001-05-27 Werner Koch * keyid.c (get_lsign_letter): New. * keylist.c (list_keyblock_colon): Use it here. * mainproc.c (list_node): and here. * getkey.c, packet.h, free-packet.c: Removed that useless key created field; I dunno why I introducded this at all - the creation time is always bound to the key packet and subject to fingerprint calculation etc. * getkey.c (fixup_uidnode): Add keycreated arg and use this instead of the signature timestamp to calculate the help_key_expire. Bug reported by David R. Bergstein. (merge_selfsigs_main): Correct key expiration time calculation. (merge_selfsigs_subkey): Ditto. 2001-05-25 Werner Koch * revoke.c (gen_revoke): Add a cast to a tty_printf arg. * delkey.c (do_delete_key): Ditto. * keyedit.c (print_and_check_one_sig): Ditto. (ask_revoke_sig): Ditto. (menu_revsig): Ditto. (check_all_keysigs): Removed unused arg. 2001-05-23 Werner Koch * g10.c (opts): Typo fix by Robert C. Ames. 2001-05-06 Werner Koch * revoke.c: Small typo fix 2001-05-04 Werner Koch * passphrase.c (passphrase_clear_cache): Shortcut if agent usage is not enabled. 2001-05-01 Werner Koch * passphrase.c (writen): Replaced ssize_t by int. Thanks to to Robert Joop for reporting that SunOS 4.1.4 does not have it. 2001-04-28 Werner Koch * getkey.c (merge_public_with_secret): pkttype was not set to subkey. 2001-04-27 Werner Koch * skclist.c (build_sk_list): Changed one log_debug to log_info. 2001-04-25 Werner Koch * keyedit.c (show_prefs): Add a verbose mode. (show_key_with_all_names): Pass verbose flag for special value of with_pref. (keyedit_menu): New command "showpref" (show_key_with_all_names): Mark revoked uids and the primary key. 2001-04-24 Werner Koch * getkey.c (get_primary_uid): Return a different string in case of error and made it translatable. * build-packet.c (do_secret_key): Ugly, we wrote a zero instead of the computed ndays. Thanks to M Taylor for complaining about a secret key import problem. 2001-04-23 Werner Koch * hkp.c (hkp_ask_import): Allow to specify a port number for the keyserver. Add a kudge to set the no_shutdown flag. (hkp_export): Ditto. * options.skel: Document the changes 2001-04-20 Werner Koch * options.skel: Add some more comments. 2001-04-19 Werner Koch * keyid.c (mk_datestr): New. Handles negative times. We must do this because Windoze segvs on negative times passed to gmtime(). Changed all datestr_from function to use this one. * keyid.c, keyid.h (colon_strtime): New. To implement the fixed-list-mode. (colon_datestr_from_pk): New. (colon_datestr_from_sk): New. (colon_datestr_from_sig): New. * keylist.c (list_keyblock_colon): Use these functions here. * mainproc.c (list_node): Ditto. 2001-04-18 Werner Koch * openfile.c (open_sigfile): Fixed the handling of ".sign". * mainproc.c (proc_tree): Use iobuf_get_real_fname. Both are by Vincent Broman. 2001-04-14 Werner Koch * getkey.c (fixup_uidnode): Removed check for !sig which is pointless here. Thanks to Jan Niehusmann. 2001-04-10 Werner Koch * sig-check.c (check_key_signature2): Use log_info instead of log_error so that messed up keys do not let gpg return an error. Suggested by Christian Kurz. * getkey.c (merge_selfsigs_main): Do a fixup_uidnode only if we have both, uid and sig. Thanks to M Taylor. 2001-04-05 Werner Koch * armor.c (unarmor_pump_new,unarmor_pump_release): New. (unarmor_pump): New. * pipemode.c (pipemode_filter): Use the unarmor_pump to handle armored or non-armored detached signatures. We can't use the regular armor_filter becuase this does only chack for armored signatures the very first time. In pipemode we may have a mix of armored and binary detached signatures. * mainproc.c (proc_tree): Do not print the "old style" notice when this is a pipemode processes detached signature. (proc_plaintext): Special handling of pipemode detached sigs. * packet.h (CTRLPKT_PLAINTEXT_MARK): New. * parse-packet.c (create_gpg_control): New. * kbnode.c (dump_kbnode): Support it here. * mainproc.c (check_sig_and_print): Fixed the check for bad sequences of multiple signatures. (proc_plaintext): Add the marker packet. (proc_tree): We can now check multiple detached signatures. 2001-04-02 Werner Koch The length of encrypted packets for blocksizes != 8 was not correct encoded. I think this is a minor problem, because we usually use partial length packets. Kudos to Kahil D. Jallad for pointing this out. * packet.h: Add extralen to PKT_encrypted. * cipher.c (write_header): Set extralen. * build-packet.c (do_encrypted): Use extralen instead of const 10. (do_encrypted_mdc): Ditto. * parse-packet.c (parse_encrypted): Set extralen to 0 because we don't know it here. 2001-03-30 Werner Koch * getkey.c (premerge_public_with_secret): Changed wording an add the keyID to the info message. 2001-03-29 Werner Koch * getkey.c (premerge_public_with_secret): Use log_info instead of log_error when no secret key was found for a public one. Fix the usage if the secret parts of a key are not available. * openfile.c (ask_outfile_name): Trim spaces. (open_outfile): Allow to enter an alternate filename. Thanks to Stefan Bellon. * plaintext.c (handle_plaintext): Ditto. 2001-03-28 Werner Koch * mainproc.c (do_check_sig): Allow direct key and subkey revocation signature. * sig-check.c (check_key_signature2): Check direct key signatures. Print the signature class along with an error. 2001-03-27 Werner Koch * packet.h: Add a missing typedef to an enum. Thanks to Stefan Bellon. * g10.c: New option --no-sig-create-check. * sign.c (do_sign): Implement it here. * g10.c: New option --no-sig-cache. * sig-check.c (check_key_signature2): Implement it here. (cache_selfsig_result): and here. * keylist.c (list_keyblock): Removed debugging stuff. * getkey.c (cache_public_key): Made global. * keygen.c (write_selfsig, write_keybinding): Cache the new key. * getkey.c (key_byname): Add new arg secmode and changed all callers to request explicitly the mode. Deriving this information from the other supplied parameters does not work if neither pk nor sk are supplied. 2001-03-25 Werner Koch * packet.h (ctrlpkttype_t): New. * mainproc.c (add_gpg_control,proc_plaintext,proc_tree): Use the new enum values. * pipemode.c (make_control): Ditto. * armor.c (armor_filter): Ditto. 2001-03-24 Werner Koch * sign.c (do_sign): Verify the signature right after creation. 2001-03-23 Werner Koch * status.c, status.h (STATUS_UNEXPECTED): New. * mainproc.c (do_proc_packets): And emit it here. 2001-03-21 Werner Koch * status.c: Add sys/types.h so that it runs on Ultrix. Reported by Georg Schwarz.x * build-packet.c (build_sig_subpkt): Fixed generaton of packet length header in case where 2 bytes headers are needed. Thanks to Piotr Krukowiecki. 2001-03-19 Werner Koch * g10.c (main): the default keyring is no always used unless --no-default-keyring is given. * ringedit.c (add_keyblock_resource): invalidate cache after file creation. 2001-03-15 Werner Koch * keygen.c (ask_algo): Changed the warning of the ElGamal S+E Algo. * keylist.c (print_capabilities): New. (list_keyblock_colon): and use it here. 2001-03-13 Werner Koch * main.c, options.h: New option --fixed_list_mode. * keylist.c (list_keyblock_colon): use it here. * getkey.c (merge_keys_and_selfsig): Divert merging of public keys to the function used in key selection.. * keylist.c (is_uid_valid): Removed. (list_keyblock): Splitted into .. (list_keyblock_print, list_keyblock_colon): .. these. functions. Changed them to use the flags set in the key lookup code. (reorder_keyblock): New, so that primary user IDs are listed first. * ringedit.c (keyring_copy): flush the new iobuf chaces before rename or remove operations. This is mainly needed for W32. * hkp.c [HAVE_DOSISH_SYSTEM]: Removed the disabled code because we have now W32 socket support in ../util/http.c * skclist.c (key_present_in_sk_list): New. (is_duplicated_entry): New. (build_sk_list): Check for duplicates and do that before unlocking. 2001-03-12 Werner Koch * armor.c (parse_header_line): Removed double empty line check. (parse_header_line): Replaced trim_trailing_ws with a counting function so that we can adjust for the next read. * options.skel: Fixed 3 typos. By Thomas Klausner. Replaced the keyserver example by a better working server. * parse-packet.c (parse_symkeyenc): Return Invalid_Packet on error. (parse_pubkeyenc): Ditto. (parse_onepass_sig): Ditto. (parse_plaintext): Ditto. (parse_encrypted): Ditto. (parse_signature): Return error at other places too. (parse_key): Ditto. * g10.c (main): Set opt.list_packets to another value when invoked with the --list-packets command. * mainproc.c (do_proc_packets): Don's stop processing when running under --list-packets command. * signal.c (do_sigaction): Removed. (init_one_signal): New to replace the above. Needed to support systems without sigactions. Suggested by Dave Dykstra. (got_fatal_signal,init_signals): Use the above here. (do_block): Use sigset() if sigprocmask() is not available. * armor.c (parse_hash_header): Test on TIGER192, which is the correct value as per rfc2440. By Edwin Woudt. 2001-03-08 Werner Koch * misc.c: Include time.h. By James Troup. * getkey.c: Re-enabled the unknown user Id and PK caches and increased their sizes. * getkey.c (merge_selfsigs_main): Set expire date and continue processing even if we found a revoked key. (merge_selfsigs_subkeys): Ditto. * packet.h: Add an is_revoked flag to the user_id packet. * getkey.c (fixup_uidnode): Set that flag here. (merge_selfsigs_main): Fix so that the latest signature is used to find the self-signature for an UID. * parse-packet.c (parse_user_id): Zero out all fields. * mainproc.c (check_sig_and_print): Print the primary user ID according the the node flag and then all other non-revoked user IDs. (is_uid_revoked): Removed; it is now handled by the key selection code. Changed the year list of all copyright notices. 2001-03-07 Werner Koch * getkey.c (finish_lookup): Print an info message only in verbose mode. 2001-03-05 Werner Koch * packet.h: Replaced sigsubpkt_t value 101 by PRIV_VERIFY_CACHE. We have never used the old value, so we can do this without any harm. * parse-packet.c (dump_sig_subpkt): Ditto. (parse_one_sig_subpkt): Parse that new sub packet. * build-packet.c (build_sig_subpkt): Removed the old one from the hashed area. (delete_sig_subpkt): New. (build_sig_subpkt): Allow an update of that new subpkt. * sig-check.c (check_key_signature2): Add verification caching (cache_selfsig_result): New. * export.c (do_export_stream): Delete that sig subpkt before exporting. * import.c (remove_bad_stuff): New. (import): Apply that function to all imported data 2001-03-03 Werner Koch * getkey.c: Introduced a new lookup context flag "exact" and used it in all place where we once used primary. (classify_user_id2): Replaced the old function and add an extra argument to return whether an exact keyID has been requested. (key_byname): Removed the unused ctx.primary flag (get_seckey_byname2): Ditto. (finish_lookup): Changed debugging output. 2001-03-02 Werner Koch * keylist.c (list_one): Remove the merge key calls. 2001-03-01 Werner Koch * getkey.c (finish_lookup): Don't use it if we no specific usage has been requested. (merge_selfsigs_main): fix UID only if we have an signature. (lookup): Return UNU_PUBKEY etc. instead of NO_PUBKEY if we found a key but the requested usage does not allow this key. * import.c (import_one): Take UNU_PUBKEY into account. * mainproc.c (list_node): Ditto. * keylist.c (list_keyblock): Ditto. * keyedit.c (print_and_check_one_sig): Ditto. 2001-02-09 Werner Koch * delkey.c (delete_key): Removed that silly assert which rendered the whole new stuff meaningless. 2001-02-08 Werner Koch * getkey.c (key_byname): It can happen that we have both, sk and pk NULL, fix for that. * parse-packet.c (parse_one_sig_subpkt): Add support for primary_uid and key_flags. (can_handle_critical): Ditto * parse-packet.c (parse_encrypted): Fixed listing of pktlen for MDC packets. * getkey.c: Backported the version of this file from gpg 1.1. this involved some changes in other files too. * parse-packet.c (parse_key): Clear req_usage. * skclist.c (build_sk_list): Use req_usage to pass the usage information to the lookup function. * pkclist.c (build_pk_list): Ditto. * free-packet.c (copy_public_parts_to_secret_key): New. * keydb.h: Add IS_* macros to check the sig_class. * misc.c (openpgp_cipher_test_algo): New. (openpgp_pk_test_algo): New. (openpgp_pk_algo_usage): New. (openpgp_md_test_algo): New. * packet.h: Add a few fields to PKT_{public,secret}_key and PKT_user_id. * seckey-cert.c (do_check): Use the new main_keyid field. 2001-02-04 Werner Koch * encr-data.c (decrypt_data): Catch error when we had problems to parse the encrypted packet. By Timo. 2001-01-29 Werner Koch * g10.c (main): --batch does now set nogreeting. * delkey.c (do_delete_key): Fixed delete-both functionality. 2001-01-22 Werner Koch * g10.c: New command --delete-secret-and-public-key. * delkey.c (delete_key): Add new arg allow_both. (do_delete_key): Move most stuff from above to this new function. 2001-01-12 Werner Koch * passphrase.c (passphrase_to_dek): Use MD5 when IDEA is installed and we have no S2K. * mainproc.c (proc_encrypted): Likewise 2001-01-11 Werner Koch * sig-check.c (do_check): Print the signature key expire message only in verbose mode and added the keyID. 2001-01-09 Werner Koch * status.c, status.h: New status USERID_HINT. (write_status_text): Replace LF and CR int text by C-escape sequence. * passphrase.c (passphrase_to_dek): Fixed the NEED_PASSPHRASE output. It does now always print 2 keyIDs. Emit the new USERID_HINT. 2001-01-08 Werner Koch * g10.c, options.h: New option --no-expensive-trust-checks. * keylist.c (list_keyblock): Act on this option. 2001-01-04 Werner Koch * g10.c (main): Set homedir only in the pre-parsing phase and replace backslashes in the W32 version. 2001-01-03 Werner Koch * status.c, status.h : New status KEY_CREATED * keygen.c (do_generate_keypair,generate_subkeypair): Emit it. 2000-12-28 Werner Koch * signal.c (got_fatal_signal): Remove lockfiles here because the atexit stuff does not work due to the use of raise. Suggested by Peter Fales. * gpgv.c (remove_lockfiles): New stub. 2000-12-19 Werner Koch * status.c, status.h (cpr_get_no_help): New. * keyedit.c (keyedit_menu): Use it here because we have our own help list here. 2000-12-18 Werner Koch * mainproc.c (print_failed_pkenc): Don't print the sometimes confusing message about unavailabe secret key. Renamed ... (print_pkenc_list): ... to this and introduced failed arg. (proc_encrypted): Print the failed encryption keys and then the one to be used. (proc_pubkey_enc): Store also the key we are going to use. * mainproc.c (check_sig_and_print): Don't list revoked user IDs. (is_uid_revoked): New. 2000-12-08 Werner Koch * pipemode.c: Made the command work. Currently only for non-armored detached signatures. * mainproc.c (release_list): Reset the new pipemode vars. (add_gpg_control): Handle the control packets for pipemode * status.c, status.h: New stati {BEGIN,END}_STREAM. 2000-12-07 Werner Koch * g10.c: New option --allow-secret-key-import. * import.c (import_keys,import_keys_stream): Honor this option. (import): New arg allow_secret and pass that arg down to ... (import_secret_one): to this and print a warning if secret key importing is not allowed. 2000-12-05 Werner Koch * cipher.c (cipher_filter): Moved the end_encryption status ... * encode.c (encode_simple,encode_crypt): to here * sign.c (sign_file): and here. * status.c (mywrite): Removed. (get_status_string): Removed the LFs from the strings. (set_status_fd,is_status_enabed,write_status_text, write_status_buffer): Replaced all mywrite by stdio calls and use fdopen to create a strem. This is needed to make things smoother in the W32 version. 2000-12-04 Werner Koch * import.c (merge_blocks): Increment n_sigs for revocations. 2000-11-30 Werner Koch * g10.c (main): Use iobuf_translate_file_handle for all options with filehandles as arguments. This is function does some magic for the W32 API. * verify.c (verify_signatures): Add a comment rant about the detached signature problem. * mainproc.c (proc_tree): Issue an error if a detached signature is assumed but a standard one was found. * plaintext.c (hash_datafiles): Don't fall back to read signature from stdin. * openfile.c (open_sigfile): Print verbose message only if the file could be accessed. 2000-11-24 Werner Koch * passphrase.c [HAVE_DOSISH_SYSTEM]: Disabled all the agent stuff. 2000-11-16 Werner Koch * g10.c: New option --use-agent * passphrase.c (agent_open,agent_close): New. (agent_get_passphrase,agent_clear_passphrase): New. (passphrase_clear_cache): New. (passphrase_to_dek): Use the agent here. * seckey-cert.c (do_check): Clear cached passphrases. 2000-11-15 Werner Koch * status.c (write_status_text): Moved the big switch to ... (get_status_string): ... new function. (write_status_buffer): New. * status.c (mywrite): New and replaced all write() by this. * status.c, status.h: Add 3 status lcodes for notaions and policy. * mainproc.c (print_notation_data): Do status output of notations. 2000-11-13 Werner Koch * sign.c (clearsign_file): Use LF macro to print linefeed. 2000-11-11 Paul Eggert Clean up the places in the code that incorrectly use "long" or "unsigned long" for file offsets. The correct type to use is "off_t". The difference is important on large-file hosts, where "off_t" is longer than "long". * keydb.h (struct keyblock_pos_struct.offset): Use off_t, not ulong, for file offsets. * packet.h (dbg_search_packet, dbg_copy_some_packets, search_packet, copy_some_packets): Likewise. * parse-packet.c (parse, dbg_search_packet, search_packet, dbg_copy_some_packets, copy_some_packets): Likewise. * ringedit.c (keyring_search): Likewise. * parse-packet.c (parse): Do not use %lu to report file offsets in error diagnostics; it's not portable. * ringedit.c (keyring_search): Likewise. 2000-11-09 Werner Koch * g10.c (main): New option --enable-special-filenames. 2000-11-07 Werner Koch * g10.c (main): New command --pipemode. * pipemode.c: New. 2000-10-23 Werner Koch * armor.c (armor_filter): Changed output of hdrlines, so that a CR is emitted for DOS systems. * keygen.c (read_parameter_file): Add a cast for isspace(). * status.c (myread): Use SIGINT instead of SIGHUP for DOS. 2000-10-19 Werner Koch * g10.c: New option --ignore-crc-error * armor.c (invalid_crc): New. (radix64_read): Act on new option. * openfile.c (try_make_homedir): Klaus Singvogel fixed a stupid error introduced on Sep 6th. 2000-10-18 Werner Koch * misc.c (print_cipher_algo_note): Don't print the note for AES. Changed wording. 2000-10-16 Werner Koch * mainproc.c (do_proc_packets): Hack to fix the problem that signatures are not detected when there is a MDC packet but no compression packet. * g10.c (print_hashline): New. (print_mds): Use above func with --with-colons. * mainproc.c (check_sig_and_print): Detect multiple signatures and don't verify them. 2000-10-14 Werner Koch * mainproc.c (add_onepass_sig): There is an easier solution to the error fixed yesterday; just check that we only have onepass packets. However, the other solution provides an cleaner interface and opens the path to get access to other information from the armore headers. (release_list): Reset some more variables. 2000-10-13 Werner Koch * mainproc.c (add_gpg_control): New. (do_proc_packets): use it. (proc_plaintext): Changed logic to detect clearsigns. (proc_tree): Check the cleartext sig with some new code. * packet.h: New packet PKT_GPG_CONTROL. * parse-packet.c (parse_gpg_control): New. * misc.c (get_session_marker): New. * armor.c (armor_filter): Replaced the faked 1-pass packet by the new control packet. * keyedit.c (keyedit_menu): Allow batchmode with a command_fd. * status.c (my_read): New. (do_get_from_fd): use it. 2000-10-12 Werner Koch * keygen.c (keygen_add_std_prefs): Add Rijndael to the prefs. 2000-10-07 Werner Koch * gpgv.c: Add more stubs for ununsed code to make the binary smaller. Wed Oct 4 15:50:18 CEST 2000 Werner Koch * sign.c (hash_for): New arg to take packet version in account, changed call callers. * gpgv.c: New. * Makefile.am: Rearranged source files so that gpgv can be build with at least files as possible. Mon Sep 18 12:13:52 CEST 2000 Werner Koch * hkp.c (not_implemented): Print a notice for W32 Fri Sep 15 18:40:36 CEST 2000 Werner Koch * keygen.c (keygen_add_std_prefs): Changed order of preferences to twofish, cast5, blowfish. * pkclist.c (algo_available): Removed hack to disable Twofish. Thu Sep 14 17:45:11 CEST 2000 Werner Koch * parse-packet.c (dump_sig_subpkt): Dump key flags. Print special warning in case of faked ARRs. * getkey.c (finsih_lookup): Hack so that for v4 RSA keys the subkey is used for encryption. Thu Sep 14 14:20:38 CEST 2000 Werner Koch * g10.c (main): Default S2K algorithms are now SHA1 and CAST5 - this should solve a lot of compatibility problems with other OpenPGP apps because those algorithms are SHOULD and not optional. The old way to force it was by using the --openpgp option whith the drawback that this would disable a couple of workarounds for PGP. * g10.c (main): Don't set --quite along with --no-tty. By Frank Tobin. * misc.c (disable_core_dump): Don't display a warning here but a return a status value and ... * g10.c (main): ...print warnining here. Suggested by Sam Roberts. Wed Sep 13 18:12:34 CEST 2000 Werner Koch * keyedit.c (keyedit_menu): Allow to use "debug" on the secret key. * ringedit.c (cmp_seckey): Fix for v4 RSA keys. * seckey-cert.c (do_check): Workaround for PGP 7 bug. Wed Sep 6 17:55:47 CEST 2000 Werner Koch * misc.c (print_pubkey_algo_note): Do not print the RSA notice. * sig-check.c (do_signature_check): Do not emit the RSA status message. * pubkey-enc.c (get_session_key): Ditto. * encode.c (encode_simple, encode_crypt): Fix for large files. * sign.c (sign_file): Ditto. Wed Sep 6 14:59:09 CEST 2000 Werner Koch * passphrase.c (hash_passphrase): Removed funny assert. Reported by David Mathog. * openfile.c (try_make_homedir): Changes for non-Posix systems. * g10.c (main): Take the default homedir from macro. * g10.c: The --trusted-key option is back. * trustdb.c (verify_own_key): Handle this option. (add_ultimate_key): Moved stuff from verify_own_key to this new func. (register_trusted_key): New. Fri Aug 25 16:05:38 CEST 2000 Werner Koch * parse-packet.c (dump_sig_subpkt): Print info about the ARR. * openfile.c (overwrite_filep): Always return okay if the file is called /dev/null. (make_outfile_name): Add ".sign" to the list of know extensions. (open_sigfile): Ditto. Wed Aug 23 19:52:51 CEST 2000 Werner Koch * g10.c: New option --allow-freeform-uid. By Jeroen C. van Gelderen. * keygen.c (ask_user_id): Implemented here. Fri Aug 4 14:23:05 CEST 2000 Werner Koch * status.c (do_get_from_fd): Ooops, we used fd instead of opt.command_fd. Thanks to Michael Tokarev. Tue Aug 1 20:06:23 CEST 2000 Werner Koch * g10.c: New opttion --try-all-secrets on suggestion from Matthias Urlichs. * pubkey-enc.c (get_session_key): Quite easy to implement here. Thu Jul 27 17:33:04 CEST 2000 Werner Koch * g10.c: New option --merge-only. Suggested by Brendan O'Dea. * import.c (import_one): Implemented it here (import_secret_one): Ditto. (print_stats): and give some stats. Thu Jul 27 12:01:00 CEST 2000 Werner Koch * g10.c: New options --show-session-key and --override-session-key * pubkey-enc.c (hextobyte): New. (get_override_session_key): New. * mainproc.c (proc_pubkey_enc): Add session-key stuff. * status.h, status.c (STATUS_SESSION_KEY): New. Thu Jul 27 10:02:38 CEST 2000 Werner Koch * g10.c (main): Use setmode(O_BINARY) for MSDOS while generating random bytes (print_mds): Likewise for stdin. * plaintext.c (handle_plaintext): Likewise for stdout. Mon Jul 24 10:30:17 CEST 2000 Werner Koch * keyedit.c (menu_expire): expire date for primary key can be set again. Wed Jul 19 11:26:43 CEST 2000 Werner Koch * keylist.c (is_uid_valid): New. (list_keyblock): Print validity information for all user IDs. Note, this has to be done at other places too; for now we have only minimal support. Wed Jul 12 13:32:06 CEST 2000 Werner Koch * helptext.c, pkclist.c: s/superseeded/superseded/ Mon Jul 10 16:08:57 CEST 2000 Werner Koch * parse-packet.c (enum_sig_subpkt): Fixed testing on crtitical bit in case of a NULL buffer. Reported by Peter Marschall. Wed Jul 5 13:28:45 CEST 2000 Werner Koch * keyedit.c, keyid.c: Add some _() * argparse.c: Changed the flag to suppress --version handling to also suppress --help. Wed Jun 28 11:54:44 CEST 2000 Werner Koch * armor.c (armor_filter): Set sigclass to 0 in case of non-dash-escaped clearsig. This makes this mode work again. * mainproc.c (proc_tree): Fixed handling of one-pass-sig packets in textmode. Disabled the ugly workaround for PGP 5 - let's see whether thi breaks less cases. Found by Ted Cabeen. * options.h (DBG_HASHING): New. All commented md_start_debug are now controlled by this debug option. * sign.c (print_status_sig_created): New and called from 2 places. * keygen.c (gen_rsa): New, but commented. (ask_algo): Commented support for RSA. * seckey-cert.c (protect_secret_key): Started to fix the code for v4 RSA keys - it is not solved yet. However, we have time until, Sep 20th ;) Wed Jun 14 12:27:09 CEST 2000 Werner Koch * status.c (init_shm_coprocessing): Changed the sequence of the get,attach to cope with the changes in newer Linux kernels. This bug has been found by who also proposed this solution. Hopefully this does not break gpg on to many systems. * cipher.c (write_header): Protect the IV with the MDC too. * encr-data.c (decrypt_data): Likewise. Fri Jun 9 10:09:52 CEST 2000 Werner Koch * g10.c: New options --no-auto-key-retrieve * options.h (auto_key_retrieve): New. * mainproc.c (check_sig_and_print): Implemented that. Wed Jun 7 19:19:09 CEST 2000 Werner Koch * sig-check.c (do_check): Use EMULATE_MDENCODE also on v4 packets. Wed Jun 7 17:25:38 CEST 2000 Werner Koch * cipher.c (write_header): Use plain CFB mode for MDC encrypted packets. * encr-data.c (decrypt_data): Ditto. Mon Jun 5 23:41:54 CEST 2000 Werner Koch * seskey.c (do_encode_md, encode_md_value): Add new arg v3compathack to work around a bug in old versions. * sig-check.c (do_check): use the aboved workaround when enabled. * g10.c: New option --emulate-md-decode-bug Mon Jun 5 12:37:43 CEST 2000 Werner Koch * build-packet.c (do_mdc): New. (do_encrypted_mdc): Changed for the new proposal. * parse-packet.c (parse_mdc): New. (parse_encrypted): Fixed for the new proposal. * packet.h (PKT_MDC): New. * cipher.c (cipher_filter): Build the MDC packet here. * g10.c (main): Enable --force-mdc. * encr-data.c (mdc_decode_filter): Fixed for new MDC method * options.h(rfc2440): New. * g10.c (main): Changed the selected values for --openpgp to not include optional algorithms. Thu May 18 11:38:54 CEST 2000 Werner Koch * keyedit.c (keyedit_menu): Add a keyword arg to the prompt. * status.c, status.h: Added 3 new status tokens. * status.c (do_get_from_fd): New. (cpr_enabled,cpr_get,cpr_get_hidden,cpr_kill_prompt, cpr_get_answer_is_yes,cpr_get_answer_yes_no_quit): Modified to work with the new function. * g10.c: Add new option --command-fd. * status.c (progress_cb): New. (set_status_fd): Register progress functions Fri May 12 14:01:20 CEST 2000 Werner Koch * delkey.c (delete_key): Add 2 new status messages * status.c, status.h (STATUS_DELETE_PROBLEM): New. Fixed years of copyright in all source files. Mon May 1 17:08:14 CEST 2000 Werner Koch * trustdb.c (propagate_validity): Fixed the bug that only one uid gets fully trusted even when all are signed by an ultimate key. Mon May 1 15:38:04 CEST 2000 Werner Koch * getkey.c (key_byname): Always returned a defined context. Fixed a segv for invalid user id specifications. Reported by Walter Koch. * getkey.c (get_user_id): I18ned "no user id" string. By Walter. * pkclist.c (do_show_revocation_reason): Typo fixes. * helptext.c: Ditto. * armor.c (armor_filter): Fixed some CRLF issues. By Mike McEwan. Fri Apr 14 19:37:08 CEST 2000 Werner Koch * pkclist.c (do_show_revocation_reason): New. (show_revocation_reason): New and called at various places. * g10.c (main): Fixed small typo. * pkclist.c (do_we_trust): Act on always_trust but not for revoked keys. Suggested by Chip Salzenberg. * g10.c: New option --lock-never. * ringedit.c (get_writable_keyblock_file): New. * keygen.c (do_generate_keypair): Use this instead of the hardwired one. * keygen.c (ask_user_id): Check that the email address is in the correct field. Suggested by Christian Kurz. Mon Apr 10 13:34:19 CEST 2000 Werner Koch * keyedit.c (show_key_with_all_names): s/sbb/ssb/ Tue Mar 28 14:26:58 CEST 2000 Werner Koch * trustdb.c (verify_own_keys): Do not print warning about unprotected key when in quiet mode. Wed Mar 22 13:50:24 CET 2000 Werner Koch * mainproc.c (print_userid): Do UTF8 conversion before printing. * import.c (import_one): Ditto. (import_secret_one): Ditto. (delete_inv_parts): Ditto. Thu Mar 16 16:20:23 CET 2000 Werner Koch * keylist.c (print_key_data): Handle a NULL pk gracefully. * getkey.c (merge_one_pk_and_selfsig): Fixed silly code for getting the primary keys keyID but kept using the one from the subkey. * pubkey-enc.c (get_it): Print a note for expired subkeys. * getkey.c (has_expired): New. (subkeys_expiretime): New. (finish_lookup): Check for expired subkeys needed for encryption. (merge_keys_and_selfsig): Fixed expiration date merging for subkeys. * keylist.c (list_keyblock): Print expiration time for "sub". (list_one): Add missing merging for public keys. * mainproc.c (list_node): Ditto. 2000-03-14 13:49:38 Werner Koch (wk@habibti.openit.de) * keygen.c (keyedit_menu): Do not allow to use certain commands while the secret key is selected. 2000-03-09 12:53:09 Werner Koch (wk@habibti.openit.de) * keygen.c (ask_expire_interval): Movede parsig to ... (parse_expire_string): ... this new function. And some new control commands. (proc_parameter_file): Add expire date parsing. (do_generate_keypair): Allow the use of specified output files. 2000-03-08 10:38:38 Werner Koch (wk@habibti.openit.de) * keygen.c (ask_algo): Removed is_v4 return value and the commented code to create Elg keys in a v3 packet. Removed the rounding of key sizes here. (do_create): Likewise removed arg v4_packet. (gen_elg): Likewise removed arg version. Now rounding keysizes here. (gen_dsa): Rounding keysize now here. (release_parameter_list): New (get_parameter*): New. (proc_parameter_file): New. (read_parameter_file): New. (generate_keypair): Splitted. Now uses read_parameter_file when in batch mode. Additional argument to specify a parameter file. (do_generate_keypair): Main bulk of above fucntion and uses the parameter list. (do_create): Don't print long notice in batch mode. * g10.c (main): Allow batched key generation. Thu Mar 2 15:37:46 CET 2000 Werner Koch * pubkey-enc.c (get_it): Print a note about unknown cipher algos. * g10.c (opts): Add a note to the help listing about the man page and removed some options from the help listing. * keyedit.c (print_and_check_one_sig): Use a new function to truncate the output of the user ID. Suggested by Jan-Benedict Glaw. Wed Feb 23 10:07:57 CET 2000 Werner Koch * helptext.c: typo fix. Thu Feb 17 13:39:32 CET 2000 Werner Koch * revoke.c: Removed a bunch of commented code. * packet.h (SIGSUBPKT_REVOC_REASON): New. * build-packet.c (build_sig_subpkt): Support new sub packet. * parse-packet.c (parse_one_sig_subpkt): Ditto. (dump_sig_subpkt): Ditto. * revoke.c (ask_revocation_reason): New. (release_revocation_reason_info): New. (revocation_reason_build_cb): New. (gen_revoke): Ask for reason. * main.h (struct revocation_reason_info): Add declaration. * keyedit.c (menu_revsig): Add support for revocation reason. (menu_revkey): Ditto. (sign_uid_mk_attrib): Renamed to ... (sign_mk_attrib): ... this, made static and add support for reasons. Tue Feb 15 08:48:13 CET 2000 Werner Koch * build-packet.c (build_packet): Fixed fixing of old comment packets. * import.c (import_keys): Fixed importing from stdin when called with nnames set to zero as it normally happens. Mon Feb 14 14:30:20 CET 2000 Werner Koch * sig-check.c (check_key_signature2): Add new arg r_expired. (do_signature_check): New arg to pass it down to ... (do_check): New arg r-expire which is set when the signature has expired. * trustdb.c (check_sig_record): Set SIGF_EXPIRED flag and set the expiretime to zero so that thi signature will not be checked anymore. Fri Feb 11 17:44:40 CET 2000 Werner Koch * g10.c (g10_exit): Update the random seed_file. (main): Set the random seed file. New option --no-random-seed-file. Thu Feb 10 17:39:44 CET 2000 Werner Koch * keyedit.c (menu_expire): Fixed segv due to unitialized sub_pk. By Rémi. Thu Feb 10 11:39:41 CET 2000 Werner Koch * keylist.c (list_keyblock): Don't print warnings in the middle of regulat output lines. By Rémi. * sig-check.c: Include options.h Wed Feb 9 15:33:44 CET 2000 Werner Koch * gpg.c: New option --ignore-time-conflict * sig-check.c (do_check): Implemented this option. * trustdb.c (check_trust): Ditto. * sign.c (do_sign): Ditto. * keygen.c (generate_subkeypair): Ditto. * encode.c (encode_simple): use iobuf_cancel after open failure. Reported by Huy Le. Fri Jan 14 18:32:01 CET 2000 Werner Koch * packet.h (STRING2KEY): Changed mode from byte to int. * parse-packet.c (parse_key): Add the special GNU protection stuff * build-packet.c (so_secret_key): Ditto. * seckey-cert.c (do_check): Ditto. * keyedit.c (change_passphrase): Ditto. * export.c (export_secsubkeys): New. (do_export_stream): Hack to export the primary key using mode 1001. * g10.c: New command --export-secret-subkeys Thu Jan 13 19:31:58 CET 2000 Werner Koch * armor.c (is_armored): Check for 1-pass-sig packets. Reported by David Hallinan . (armor_filter): Replaced one LF by the LF macro. Reported by Wolfgang Redtenbacher. Wed Jan 5 11:51:17 CET 2000 Werner Koch * g10.c (main): Reset new global flag opt.pgp2_workarounds when --openpgp is used. * mainproc.c (proc_plaintext): Do the PGP2,5 workarounds only when the global flag is set. (proc_tree): Ditto. * textfilter.c (copy_clearsig_text): Ditto. * armor.c (armor_filter): Ditto. * g10.c: New option --list-only * mainproc.c (proc_tree): Don't do it if opt.list_only is active. (proc_pubkey_enc): Implement option. * status.h, status.c ({BEGIN,END}_{EN,DE}CRYPTION): New. * cipher.c (cipher_filter): New status outputs. * mainproc.c (proc_encrypted): New status outputs. Fri Dec 31 14:08:15 CET 1999 Werner Koch * armor.c (armor_filter): Made the "Comment:" header translatable. * hkp.c (hkp_import): Make sure that the program does not return success when there is a connection problem. Reported by Phillip Jones. Sun Dec 19 15:22:26 CET 1999 Werner Koch * armor.c (LF): Use this new macro at all places where a line LF is needed. This way DOSish textfiles should be created when the input data is also in dos mode. * sign.c (LF): Ditto. * textfilter.c (LF): Ditto. (copy_clearsig_text): Disabled the forcing of CR,LF sequences for DOS systems. * plaintext.c (handle_plaintext): Fixes for line endings on DOS. and react on a LF in cleartext. * armor.c (fake_packet): Restore the original line ending after removing trailing spaces. * signal.c (got_fatal_signal): DOS fix. Thu Dec 16 10:07:58 CET 1999 Werner Koch * mainproc.c (print_failed_pkenc): Fix for unknown algorithm. Found by fygrave@epr0.org. Thu Dec 9 10:31:05 CET 1999 Werner Koch * hkp.c: i18n the strings. Sat Dec 4 15:32:20 CET 1999 Werner Koch * trustdb.c (verify_key): Shortcut for ultimately trusted keys. Sat Dec 4 12:30:28 CET 1999 Werner Koch * pkclist.c (build_pk_list): Validate the trust using the namehash if this one has been set by the key lookup. * g10.c: Add --delete-secret-key to the help page. * openfile.c (copy_options_file): Made static. (try_make_homedir): New. * ringedit.c (add_keyblock_resource): Use the try_make_hoemdir logic. * tdbio.c (tdbio_set_dbname): Likewise. * keygen.c (generate_user_id): Use m_alloc_clear() here. We should better use an allocation function specific to the user_id packet. * keygen.c (keygen_add_std_prefs): Changed symmetric preferences to include Blowfish again. This is due to it's better speed compared to CAST5. * g10.c (strusage): Print the home directory. * armor.c (armor_filter): Take action on the cancel control msg. * filter.h (armor_filter_context_t): Add cancel flag. Mon Nov 29 21:52:11 CET 1999 Werner Koch * g10.c: New option --fast-list-mode .. * keylist.c (list_keyblock): .. and implemented. * mainproc.c (list_node): Ditto. * import.c (mark_non_selfsigned_uids_valid): Fixed the case that there is a uid without any packet following. Mon Nov 22 11:14:53 CET 1999 Werner Koch * mainproc.c (proc_plaintext): Never enable the hash processing when skip_verify is active. * armor.c (parse_header_line): Stop parsing on a WS line too. Suggested by Aric Cyr. * tdbdump.c (HEXTOBIN): Changed the name of the argument, so that traditional cpp don't mess up the macros. Suggested by Jos Backus. * mainproc.c (list_node): Print the PK algo in the --with-colon mode. * keylist.c (list_keyblock): Ditto. * signal.c (got_fatal_signal): Found the reason why exit(8) did not work - it is better to set the disposition back to default before raising the signal. Print the notice on stderr always. Fri Nov 12 20:33:19 CET 1999 Werner Koch * g10.c (make_username): Swapped the logic. * keylist.c (public_key_list): Now takes a STRLIST as arg and moved the creation ot this list to the caller, so that he can copy with UTF-conversion of user IDs. Changed all callers. (secret_key_list): Likewise. * getkey.c (get_user_id_string_native): New and ... * encode.c (write_pubkey_enc_from_list): ... use it here. * pubring.asc: Updated. * packet.h (PKT_PHOTO_ID): New. * parse-packet.c (parse_photo_id): New. * build-packet.c (do_user_id: Handle photo IDs. (build_packet): Change CTB for photo IDs * free-packet.c (free_user_id): Release memory used for photo IDs * sig-check.c (hash_uid_node): Handle photo IDs too. * trustdb.c (print_uid_from_keyblock): Hash photo ID. (make_uid_records): Ditto. * getkey.c (find_by_name): Ditto. * keyedit.c (show_prefs): Ditto. * keylist.c (list_keyblock): Ditto. Thu Oct 28 16:08:20 CEST 1999 Werner Koch * keygen.c (ask_expire_interval): Print a warning for systems with a signed 32 time_t if the exiration time is beyoind 2038. Fri Oct 8 20:40:50 CEST 1999 Werner Koch * ringedit.c (enum_keyblocks): The last fix way really stupid; reverted and set rt to Unknown. Fri Oct 8 20:32:01 CEST 1999 Werner Koch * ringedit.c (enum_keyblocks): Zero the entire kbpos out on open. * g10.c (oEntropyDLL): Removed option. (main): Made the warning on development versions more verbose. * g10.c (oHonorHttpProxy): New option. * hkp.c (hkp_ask_import,hkp_export): Implement this option. * options.skel: Enable this option for new installations Mon Oct 4 21:23:04 CEST 1999 Werner Koch * import.c (import_keys): Changed calling interface, adjusted caller. (import): Moved printing of stats out ... (print_stats): New. ... to here. (import_keys_stream): Call stats print here. (import_keys): Print stats as totals for all files. * tdbio.h (DIRF_NEWKEYS): New * tdbio.c (tdbio_dump_record): Print the new flag. * trustdb.c (check_trust_record): New arg sigs_only. Adapted all callers. (do_update_trust_record): Removed recheck arg and add a new sigs_only do we can later improve on the performance. Changed all callers too. (check_trustdb): Evalutate the new flag and add a status output. Do a check when the dir record has not been checked. (build_cert_tree): Evaluate the new flag. (check_trust): Ditto. Do a trust_record check, when the dir record is not marked as checked. (mark_fresh_keys): New. (clear_lid_table): New. (sync_trustdb): New. * import.c (import_keys): Call sync_trustdb() after processing. (import_keys_stream): Ditto. * tdbdump.c (import_ownertrust): Ditto. * import.c (import_revoke_cert): Notify the trust DB. (do_update_trust_record): Use |= to set the REVOKED bit and not &=; shame on me for this bad copy+paste introduced bug. (do_we_trust): Add trustmask to allow revoked key override to work. Chnaged are to allow return of a mofified trustlevel. Adapted the one caller. * g10.c: New options --emulate-3des-s2k-bug * passphrase.c (hash_passphrase): Implemented above. * mainproc.c (proc_tree): Check for standalone signatures. (do_check_sig): Print a notice for a standalone revocation (check_sig_and_print): Do not print an error for unchecked standalone revocations. Tue Sep 28 20:54:37 CEST 1999 Werner Koch * encode.c (encode_simple): Use new CTB when we don't have the length of the file. This is somewhat strange as the comment above indicates that this part is actually fixed for PGP 5 - maybe I simply lost the source line, tsss. * armor.c (armor_filter): Set a flag if no OpenPGP data has been found. * verify.c (verify_signatures): Add an error helptext. Thu Sep 23 19:24:30 CEST 1999 Werner Koch * openfile.c (open_outfile): Fixed the 8dot3 handling. * passphrase.c (passphrase_to_dek): Print uid using utf8 func. * delkey.c (delete_key): Ditto. * pkclist.c (show_paths,do_edit_ownertrust,do_we_trust): Ditto (do_we_trust_pre): Ditto. * trustdb.c (print_user_id,check_uidsigs): Ditto. * revoke.c (gen_revoke,ask_revoke_sig): Ditto. Thu Sep 23 09:52:58 CEST 1999 Werner Koch * verify.c (print_file_status): New. (verify_one_file): Moved status print to th new fnc. Add error status. * status.c, status.h (STATUS_FILE_ERROR): New Wed Sep 22 10:14:17 CEST 1999 Werner Koch * openfile.c (make_outfile_name): Use case-insenstive compare for DOS systems. Add ".pgp" to the list of know extensions. (open_outfile): For DOS systems try to replace the suffiy instead of appending it. * status.c, status.h: Add STATUS_FILE_{START,DONE}. * verify.c (verify_one_file): Emit these new stati. * sign.c (clearsign_file): Avoid duplicated Entries in the "Hash:" line. Those headers are now only _not_ printed when there are only old-style keys _and_ all hashs are MD5. Mon Sep 20 12:24:41 CEST 1999 Werner Koch * verify.c (verify_files, ferify_one_file): New. * g10.c: New command --verify-files Fri Sep 17 12:56:42 CEST 1999 Werner Koch * g10.c: Add UK spelling as alias for armor options ;-) * import.c (append_uid): Fixed a SEGV when there is no selfsig and no subkey. (merge_sigs): Ditto. Removed the assertion. Wed Sep 15 16:22:17 CEST 1999 Werner Koch * g10.c: New option --entropy-dll-name Mon Sep 13 10:51:29 CEST 1999 Werner Koch * signal.c (got_fatal_signal): Print message using write(2) and only for development versions. Mon Sep 6 19:59:08 CEST 1999 Werner Koch * tdbio.c (tdbio_set_dbname): Use mkdir macro * ringedit.c (add_keyblock_resource): Ditto. Fri Sep 3 10:04:45 CEST 1999 Werner Koch * pkclist.c (build_pk_list): Skip keys set with --encrypt-to also when asking for a key. * plaintext.c (handle_plaintext): Make sure that we don't read a second EOF in the read loop for partial length packets. * mainproc.c (check_sig_and_print): print user ID as utf-8. Thu Sep 2 16:40:55 CEST 1999 Werner Koch * import.c (merge_blocks): First add new subkeys, then merge subkey certificates. (merge_sigs): Don't merge subkey signatures here. Wed Sep 1 15:30:44 CEST 1999 Werner Koch * keygen.c (ask_expire_interval): Fixed bug related to cpr_xx (tnx Francis J. Lacoste). Tue Aug 31 17:20:44 CEST 1999 Werner Koch * plaintext.c (do_hash): Hash CR,LF for a single CR. (ask_for_detached_datafile): Changed arguments to be closer to those of hash_datafiles and cleanup the code a bit. * mainproc.c (proc_tree): Workaround for pgp5 textmode detached signatures. Changed behavior of asking for data file to be the same as with provided data files. * keylist.c (list_keyblock): Use UTF8 print functions. Mon Aug 30 20:38:33 CEST 1999 Werner Koch * import.c (chk_self_sigs): some s/log_error/log_info/ so that gpg does not return an error if a key has some invalid packets. * helptext.c: Fixed some typos and changed the way the translation works. The english text is now the keyword for gettext and not anymore the keyword supplied to the function. Done after some discussion with Walter who thinks this is much easier for the translators. * misc.c (disable_core_dumps): Don't do it for DOSish systems. * signal.c (signal_name): Bounds check on signum. Wed Aug 4 10:34:18 CEST 1999 Werner Koch * pubring.asc: Updated. * pkclist.c (do_we_trust_pre,check_signatures_trust): Do not print the warning about --always_trust when --quiet is used. * pkclist.c (fpr_info): New and called at several places. * parse-packet.c (dump_sig_subpkt): List revocation key contents. Mon Jul 26 09:34:46 CEST 1999 Werner Koch * pkclist.c (build_pk_list): Fixed typo in format string. * trustdb.c (create_shadow_dir): Don't translate the error string. * g10.c (main): Fixed spelling of user-id. * getkey.c (find_by_name_pk,find_by_name_sk, find_by_keyid,find_by_keyid_sk): Ditto and translate it. * import.c (mark_non_selfsigned_uids_valid,delete_inv_parts): Ditto. Mon Jul 26 01:01:39 CEST 1999 Michael Roth * g10.c, options.h: New options --no-literal and --set-filesize * encode.c (encode_simple, encode_crypt): Support for the options --no-literal and --set-filesize. * sign.c (sign_file): ditto. Fri Jul 23 13:53:03 CEST 1999 Werner Koch * ringedit.c (enum_keyblocks): Removed annoying error message in cases when we have no keyring at all to enum. * getkey.c (classify_user_id): Rewrote to relax the recognition of keyIDs and fingerprints (Michael). * mainproc.c (check_sig_and_print): Print status NO_PUBKEY. (print_failed_pkenc): Print status NO_SECKEY. * import.c (mark_non_selfsigned_uids_valid): New. * g10.c: New option --allow-non-selfsigned-uid. * pkclist.c (print_fpr): New. (do_we_trust_pre): Print the fpr before asking whether to use the key anyway. (do_edit_ownertrust): Likewise. Thu Jul 22 20:03:03 CEST 1999 Werner Koch * ringedit.c (enum_keyblocks): Removed annoying error message in cases when we have no keyring at all to enum. * getkey.c (classify_user_id): Rewrote to relax the recognition of keyIDs and fingerprints (Michael). * mainproc.c (check_sig_and_print): Print status NO_PUBKEY. (print_failed_pkenc): Print status NO_SECKEY. * import.c (mark_non_selfsigned_uids_valid): New. * g10.c: New option --allow-non-selfsigned-uid. Thu Jul 15 10:15:35 CEST 1999 Werner Koch * g10.c: New options --disable-{cipher,pubkey}-algo. Wed Jul 14 19:42:08 CEST 1999 Werner Koch * status.h (STATUS_IMPORTED): New. * import.c (import): Print some status information (Holger Schurig). * g10.c (main): Make --no-greeting work again. Add a warning when --force-mds is used. Tue Jul 13 17:39:25 CEST 1999 Werner Koch * pkclist.c (do_edit_ownertrust): Changed the way help works. (build_pk_list): Implemented default recipient stuff. * g10.c: New options --default-recipient[-self] (main): Suppress greeting in most cases, entering a passphrase or a missing value is not considered to be interactive use. Merged --print-md and --print-mds; the latter is now obsolete. Changed the way --gen-random works and documented it. Changed the way --gen-prime works and add a man entry. * g10.c (MAINTAINER_OPTIONS): Removed. Mon Jul 12 18:45:57 CEST 1999 Werner Koch * keyedit.c (keyedit_menu): Add arg sign_mode and changed callers * g10.c (main): New command --lsign-key. Mon Jul 12 14:55:34 CEST 1999 Werner Koch * mainproc.c (kidlist_item): New. (release_list): Release failed pk-enc-list. (print_failed_pkenc): New (proc_encrypted): Print info about failed PK enc. * openfile.c (make_outfile_name): s/error/info/ * passphrase.c (passphrase_to_dek): Return an empty passphrase when in batch mode and don't make the warning message fatal * seckey-cert.c (check_secret_key): Try only once when in batch mode. * g10.c (make_username): New. Thu Jul 8 16:21:27 CEST 1999 Werner Koch * packet.h (PKT_ring_trust): New * parse-packet.c (parse_trust): Store trust value * build-packet (build_packet): Ignore ring trust packets. * mainproc.c (add_ring_trust): New. (list_node): Print "rtv" records. * g10.c: New option --with-fingerprint. * trustdb.c (verify_own_keys): Don't insert if we are dry running (check_trust): Ditto. 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_algo 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 Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/g10/card-util.c0000644000175000017500000014745212635262326012302 00000000000000/* card-util.c - Utility functions for the OpenPGP card. * Copyright (C) 2003, 2004, 2005, 2009 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 3 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, see . */ #include #include #include #include #include #include #ifdef HAVE_LIBREADLINE # define GNUPG_LIBREADLINE_H_INCLUDED # include #endif /*HAVE_LIBREADLINE*/ #if GNUPG_MAJOR_VERSION != 1 # include "gpg.h" #endif /*GNUPG_MAJOR_VERSION != 1*/ #include "util.h" #include "i18n.h" #include "ttyio.h" #include "status.h" #include "options.h" #include "main.h" #include "keyserver-internal.h" #if GNUPG_MAJOR_VERSION == 1 # include "cardglue.h" #else /*GNUPG_MAJOR_VERSION!=1*/ # include "call-agent.h" #endif /*GNUPG_MAJOR_VERSION!=1*/ #define CONTROL_D ('D' - 'A' + 1) static void write_sc_op_status (gpg_error_t err) { switch (gpg_err_code (err)) { case 0: write_status (STATUS_SC_OP_SUCCESS); break; #if GNUPG_MAJOR_VERSION != 1 case GPG_ERR_CANCELED: write_status_text (STATUS_SC_OP_FAILURE, "1"); break; case GPG_ERR_BAD_PIN: write_status_text (STATUS_SC_OP_FAILURE, "2"); break; default: write_status (STATUS_SC_OP_FAILURE); break; #endif /* GNUPG_MAJOR_VERSION != 1 */ } } /* Change the PIN of a an OpenPGP card. This is an interactive function. */ void change_pin (int unblock_v2, int allow_admin) { struct agent_card_info_s info; int rc; rc = agent_learn (&info); if (rc) { log_error (_("OpenPGP card not available: %s\n"), gpg_strerror (rc)); return; } log_info (_("OpenPGP card no. %s detected\n"), info.serialno? info.serialno : "[none]"); agent_clear_pin_cache (info.serialno); if (opt.batch) { agent_release_card_info (&info); log_error (_("can't do this in batch mode\n")); return; } if (unblock_v2) { if (!info.is_v2) log_error (_("This command is only available for version 2 cards\n")); else if (!info.chvretry[1]) log_error (_("Reset Code not or not anymore available\n")); else { rc = agent_scd_change_pin (2, info.serialno); write_sc_op_status (rc); if (rc) tty_printf ("Error changing the PIN: %s\n", gpg_strerror (rc)); else tty_printf ("PIN changed.\n"); } } else if (!allow_admin) { rc = agent_scd_change_pin (1, info.serialno); write_sc_op_status (rc); if (rc) tty_printf ("Error changing the PIN: %s\n", gpg_strerror (rc)); else tty_printf ("PIN changed.\n"); } else for (;;) { char *answer; tty_printf ("\n"); tty_printf ("1 - change PIN\n" "2 - unblock PIN\n" "3 - change Admin PIN\n" "4 - set the Reset Code\n" "Q - quit\n"); tty_printf ("\n"); answer = cpr_get("cardutil.change_pin.menu",_("Your selection? ")); cpr_kill_prompt(); if (strlen (answer) != 1) continue; rc = 0; if (*answer == '1') { /* Change PIN. */ rc = agent_scd_change_pin (1, info.serialno); write_sc_op_status (rc); if (rc) tty_printf ("Error changing the PIN: %s\n", gpg_strerror (rc)); else tty_printf ("PIN changed.\n"); } else if (*answer == '2') { /* Unblock PIN. */ rc = agent_scd_change_pin (101, info.serialno); write_sc_op_status (rc); if (rc) tty_printf ("Error unblocking the PIN: %s\n", gpg_strerror (rc)); else tty_printf ("PIN unblocked and new PIN set.\n"); } else if (*answer == '3') { /* Change Admin PIN. */ rc = agent_scd_change_pin (3, info.serialno); write_sc_op_status (rc); if (rc) tty_printf ("Error changing the PIN: %s\n", gpg_strerror (rc)); else tty_printf ("PIN changed.\n"); } else if (*answer == '4') { /* Set a new Reset Code. */ rc = agent_scd_change_pin (102, info.serialno); write_sc_op_status (rc); if (rc) tty_printf ("Error setting the Reset Code: %s\n", gpg_strerror (rc)); else tty_printf ("Reset Code set.\n"); } else if (*answer == 'q' || *answer == 'Q') { break; } } agent_release_card_info (&info); } static const char * get_manufacturer (unsigned int no) { /* Note: Make sure that there is no colon or linefeed in the string. */ switch (no) { case 0x0001: return "PPC Card Systems"; case 0x0002: return "Prism"; case 0x0003: return "OpenFortress"; case 0x0004: return "Wewid AB"; case 0x0005: return "ZeitControl"; case 0x002A: return "Magrathea"; case 0xF517: return "FSIJ"; /* 0x00000 and 0xFFFF are defined as test cards per spec, 0xFFF00 to 0xFFFE are assigned for use with randomly created serial numbers. */ case 0x0000: case 0xffff: return "test card"; default: return (no & 0xff00) == 0xff00? "unmanaged S/N range":"unknown"; } } static void print_sha1_fpr (FILE *fp, const unsigned char *fpr) { int i; if (fpr) { for (i=0; i < 20 ; i+=2, fpr += 2 ) { if (i == 10 ) tty_fprintf (fp, " "); tty_fprintf (fp, " %02X%02X", *fpr, fpr[1]); } } else tty_fprintf (fp, " [none]"); tty_fprintf (fp, "\n"); } static void print_sha1_fpr_colon (FILE *fp, const unsigned char *fpr) { int i; if (fpr) { for (i=0; i < 20 ; i++, fpr++) fprintf (fp, "%02X", *fpr); } putc (':', fp); } static void print_name (FILE *fp, const char *text, const char *name) { tty_fprintf (fp, "%s", text); /* FIXME: tty_printf_utf8_string2 eats everything after and including an @ - e.g. when printing an url. */ if (name && *name) { if (fp) print_utf8_string2 (fp, name, strlen (name), '\n'); else tty_print_utf8_string2 (name, strlen (name), 0); } else tty_fprintf (fp, _("[not set]")); tty_fprintf (fp, "\n"); } static void print_isoname (FILE *fp, const char *text, const char *tag, const char *name) { if (opt.with_colons) fprintf (fp, "%s:", tag); else tty_fprintf (fp, "%s", text); if (name && *name) { char *p, *given, *buf = xstrdup (name); given = strstr (buf, "<<"); for (p=buf; *p; p++) if (*p == '<') *p = ' '; if (given && given[2]) { *given = 0; given += 2; if (opt.with_colons) print_string (fp, given, strlen (given), ':'); else if (fp) print_utf8_string2 (fp, given, strlen (given), '\n'); else tty_print_utf8_string2 (given, strlen (given), 0); if (opt.with_colons) putc (':', fp); else if (*buf) tty_fprintf (fp, " "); } if (opt.with_colons) print_string (fp, buf, strlen (buf), ':'); else if (fp) print_utf8_string2 (fp, buf, strlen (buf), '\n'); else tty_print_utf8_string2 (buf, strlen (buf), 0); xfree (buf); } else { if (opt.with_colons) putc (':', fp); else tty_fprintf (fp, _("[not set]")); } if (opt.with_colons) fputs (":\n", fp); else tty_fprintf (fp, "\n"); } /* Return true if the SHA1 fingerprint FPR consists only of zeroes. */ static int fpr_is_zero (const char *fpr) { int i; for (i=0; i < 20 && !fpr[i]; i++) ; return (i == 20); } /* Return true if the SHA1 fingerprint FPR consists only of 0xFF. */ static int fpr_is_ff (const char *fpr) { int i; for (i=0; i < 20 && fpr[i] == '\xff'; i++) ; return (i == 20); } /* Print all available information about the current card. */ void card_status (FILE *fp, char *serialno, size_t serialnobuflen) { struct agent_card_info_s info; PKT_public_key *pk = xcalloc (1, sizeof *pk); int rc; unsigned int uval; const unsigned char *thefpr; int i; if (serialno && serialnobuflen) *serialno = 0; rc = agent_learn (&info); if (rc) { if (opt.with_colons) fputs ("AID:::\n", fp); log_error (_("OpenPGP card not available: %s\n"), gpg_strerror (rc)); xfree (pk); return; } if (opt.with_colons) fprintf (fp, "AID:%s:", info.serialno? info.serialno : ""); else tty_fprintf (fp, "Application ID ...: %s\n", info.serialno? info.serialno : "[none]"); if (!info.serialno || strncmp (info.serialno, "D27600012401", 12) || strlen (info.serialno) != 32 ) { if (info.apptype && !strcmp (info.apptype, "NKS")) { if (opt.with_colons) fputs ("netkey-card:\n", fp); log_info ("this is a NetKey card\n"); } else if (info.apptype && !strcmp (info.apptype, "DINSIG")) { if (opt.with_colons) fputs ("dinsig-card:\n", fp); log_info ("this is a DINSIG compliant card\n"); } else if (info.apptype && !strcmp (info.apptype, "P15")) { if (opt.with_colons) fputs ("pkcs15-card:\n", fp); log_info ("this is a PKCS#15 compliant card\n"); } else if (info.apptype && !strcmp (info.apptype, "GELDKARTE")) { if (opt.with_colons) fputs ("geldkarte-card:\n", fp); log_info ("this is a Geldkarte compliant card\n"); } else { if (opt.with_colons) fputs ("unknown:\n", fp); } log_info ("not an OpenPGP card\n"); agent_release_card_info (&info); xfree (pk); return; } if (!serialno) ; else if (strlen (serialno)+1 > serialnobuflen) log_error ("serial number longer than expected\n"); else strcpy (serialno, info.serialno); if (opt.with_colons) fputs ("openpgp-card:\n", fp); if (opt.with_colons) { fprintf (fp, "version:%.4s:\n", info.serialno+12); uval = xtoi_2(info.serialno+16)*256 + xtoi_2 (info.serialno+18); fprintf (fp, "vendor:%04x:%s:\n", uval, get_manufacturer (uval)); fprintf (fp, "serial:%.8s:\n", info.serialno+20); print_isoname (fp, "Name of cardholder: ", "name", info.disp_name); fputs ("lang:", fp); if (info.disp_lang) print_string (fp, info.disp_lang, strlen (info.disp_lang), ':'); fputs (":\n", fp); fprintf (fp, "sex:%c:\n", (info.disp_sex == 1? 'm': info.disp_sex == 2? 'f' : 'u')); fputs ("url:", fp); if (info.pubkey_url) print_string (fp, info.pubkey_url, strlen (info.pubkey_url), ':'); fputs (":\n", fp); fputs ("login:", fp); if (info.login_data) print_string (fp, info.login_data, strlen (info.login_data), ':'); fputs (":\n", fp); fprintf (fp, "forcepin:%d:::\n", !info.chv1_cached); for (i=0; i < DIM (info.key_attr); i++) if (info.key_attr[0].algo) fprintf (fp, "keyattr:%d:%d:%u:\n", i+1, info.key_attr[i].algo, info.key_attr[i].nbits); fprintf (fp, "maxpinlen:%d:%d:%d:\n", info.chvmaxlen[0], info.chvmaxlen[1], info.chvmaxlen[2]); fprintf (fp, "pinretry:%d:%d:%d:\n", info.chvretry[0], info.chvretry[1], info.chvretry[2]); fprintf (fp, "sigcount:%lu:::\n", info.sig_counter); for (i=0; i < 4; i++) { if (info.private_do[i]) { fprintf (fp, "private_do:%d:", i+1); print_string (fp, info.private_do[i], strlen (info.private_do[i]), ':'); fputs (":\n", fp); } } fputs ("cafpr:", fp); print_sha1_fpr_colon (fp, info.cafpr1valid? info.cafpr1:NULL); print_sha1_fpr_colon (fp, info.cafpr2valid? info.cafpr2:NULL); print_sha1_fpr_colon (fp, info.cafpr3valid? info.cafpr3:NULL); putc ('\n', fp); fputs ("fpr:", fp); print_sha1_fpr_colon (fp, info.fpr1valid? info.fpr1:NULL); print_sha1_fpr_colon (fp, info.fpr2valid? info.fpr2:NULL); print_sha1_fpr_colon (fp, info.fpr3valid? info.fpr3:NULL); putc ('\n', fp); fprintf (fp, "fprtime:%lu:%lu:%lu:\n", (unsigned long)info.fpr1time, (unsigned long)info.fpr2time, (unsigned long)info.fpr3time); } else { tty_fprintf (fp, "Version ..........: %.1s%c.%.1s%c\n", info.serialno[12] == '0'?"":info.serialno+12, info.serialno[13], info.serialno[14] == '0'?"":info.serialno+14, info.serialno[15]); tty_fprintf (fp, "Manufacturer .....: %s\n", get_manufacturer (xtoi_2(info.serialno+16)*256 + xtoi_2 (info.serialno+18))); tty_fprintf (fp, "Serial number ....: %.8s\n", info.serialno+20); print_isoname (fp, "Name of cardholder: ", "name", info.disp_name); print_name (fp, "Language prefs ...: ", info.disp_lang); tty_fprintf (fp, "Sex ..............: %s\n", info.disp_sex == 1? _("male"): info.disp_sex == 2? _("female") : _("unspecified")); print_name (fp, "URL of public key : ", info.pubkey_url); print_name (fp, "Login data .......: ", info.login_data); if (info.private_do[0]) print_name (fp, "Private DO 1 .....: ", info.private_do[0]); if (info.private_do[1]) print_name (fp, "Private DO 2 .....: ", info.private_do[1]); if (info.private_do[2]) print_name (fp, "Private DO 3 .....: ", info.private_do[2]); if (info.private_do[3]) print_name (fp, "Private DO 4 .....: ", info.private_do[3]); if (info.cafpr1valid) { tty_fprintf (fp, "CA fingerprint %d .:", 1); print_sha1_fpr (fp, info.cafpr1); } if (info.cafpr2valid) { tty_fprintf (fp, "CA fingerprint %d .:", 2); print_sha1_fpr (fp, info.cafpr2); } if (info.cafpr3valid) { tty_fprintf (fp, "CA fingerprint %d .:", 3); print_sha1_fpr (fp, info.cafpr3); } tty_fprintf (fp, "Signature PIN ....: %s\n", info.chv1_cached? _("not forced"): _("forced")); if (info.key_attr[0].algo) { tty_fprintf (fp, "Key attributes ...:"); for (i=0; i < DIM (info.key_attr); i++) tty_fprintf (fp, " %u%c", info.key_attr[i].nbits, info.key_attr[i].algo == 1? 'R': info.key_attr[i].algo == 17? 'D': '?'); tty_fprintf (fp, "\n"); } tty_fprintf (fp, "Max. PIN lengths .: %d %d %d\n", info.chvmaxlen[0], info.chvmaxlen[1], info.chvmaxlen[2]); tty_fprintf (fp, "PIN retry counter : %d %d %d\n", info.chvretry[0], info.chvretry[1], info.chvretry[2]); tty_fprintf (fp, "Signature counter : %lu\n", info.sig_counter); tty_fprintf (fp, "Signature key ....:"); print_sha1_fpr (fp, info.fpr1valid? info.fpr1:NULL); if (info.fpr1valid && info.fpr1time) tty_fprintf (fp, " created ....: %s\n", isotimestamp (info.fpr1time)); tty_fprintf (fp, "Encryption key....:"); print_sha1_fpr (fp, info.fpr2valid? info.fpr2:NULL); if (info.fpr2valid && info.fpr2time) tty_fprintf (fp, " created ....: %s\n", isotimestamp (info.fpr2time)); tty_fprintf (fp, "Authentication key:"); print_sha1_fpr (fp, info.fpr3valid? info.fpr3:NULL); if (info.fpr3valid && info.fpr3time) tty_fprintf (fp, " created ....: %s\n", isotimestamp (info.fpr3time)); tty_fprintf (fp, "General key info..: "); thefpr = (info.fpr1valid? info.fpr1 : info.fpr2valid? info.fpr2 : info.fpr3valid? info.fpr3 : NULL); /* If the fingerprint is all 0xff, the key has no asssociated OpenPGP certificate. */ if ( thefpr && !fpr_is_ff (thefpr) && !get_pubkey_byfprint (pk, thefpr, 20)) { KBNODE keyblock = NULL; print_pubkey_info (fp, pk); if ( !get_seckeyblock_byfprint (&keyblock, thefpr, 20) ) print_card_key_info (fp, keyblock); else if ( !get_keyblock_byfprint (&keyblock, thefpr, 20) ) { release_kbnode (keyblock); keyblock = NULL; if (!auto_create_card_key_stub (info.serialno, info.fpr1valid? info.fpr1:NULL, info.fpr2valid? info.fpr2:NULL, info.fpr3valid? info.fpr3:NULL)) { if ( !get_seckeyblock_byfprint (&keyblock, thefpr, 20) ) print_card_key_info (fp, keyblock); } } release_kbnode (keyblock); } else tty_fprintf (fp, "[none]\n"); } free_public_key (pk); agent_release_card_info (&info); } static char * get_one_name (const char *prompt1, const char *prompt2) { char *name; int i; for (;;) { name = cpr_get (prompt1, prompt2); if (!name) return NULL; trim_spaces (name); cpr_kill_prompt (); for (i=0; name[i] && name[i] >= ' ' && name[i] <= 126; i++) ; /* The name must be in Latin-1 and not UTF-8 - lacking the code to ensure this we restrict it to ASCII. */ if (name[i]) tty_printf (_("Error: Only plain ASCII is currently allowed.\n")); else if (strchr (name, '<')) tty_printf (_("Error: The \"<\" character may not be used.\n")); else if (strstr (name, " ")) tty_printf (_("Error: Double spaces are not allowed.\n")); else return name; xfree (name); } } static int change_name (void) { char *surname = NULL, *givenname = NULL; char *isoname, *p; int rc; surname = get_one_name ("keygen.smartcard.surname", _("Cardholder's surname: ")); givenname = get_one_name ("keygen.smartcard.givenname", _("Cardholder's given name: ")); if (!surname || !givenname || (!*surname && !*givenname)) { xfree (surname); xfree (givenname); return -1; /*canceled*/ } isoname = xmalloc ( strlen (surname) + 2 + strlen (givenname) + 1); strcpy (stpcpy (stpcpy (isoname, surname), "<<"), givenname); xfree (surname); xfree (givenname); for (p=isoname; *p; p++) if (*p == ' ') *p = '<'; if (strlen (isoname) > 39 ) { tty_printf (_("Error: Combined name too long " "(limit is %d characters).\n"), 39); xfree (isoname); return -1; } rc = agent_scd_setattr ("DISP-NAME", isoname, strlen (isoname), NULL ); if (rc) log_error ("error setting Name: %s\n", gpg_strerror (rc)); xfree (isoname); return rc; } static int change_url (void) { char *url; int rc; url = cpr_get ("cardedit.change_url", _("URL to retrieve public key: ")); if (!url) return -1; trim_spaces (url); cpr_kill_prompt (); if (strlen (url) > 254 ) { tty_printf (_("Error: URL too long " "(limit is %d characters).\n"), 254); xfree (url); return -1; } rc = agent_scd_setattr ("PUBKEY-URL", url, strlen (url), NULL ); if (rc) log_error ("error setting URL: %s\n", gpg_strerror (rc)); xfree (url); write_sc_op_status (rc); return rc; } /* Fetch the key from the URL given on the card or try to get it from the default keyserver. */ static int fetch_url(void) { int rc; struct agent_card_info_s info; memset(&info,0,sizeof(info)); rc=agent_scd_getattr("PUBKEY-URL",&info); if(rc) log_error("error retrieving URL from card: %s\n",gpg_strerror(rc)); else { struct keyserver_spec *spec=NULL; rc=agent_scd_getattr("KEY-FPR",&info); if(rc) log_error("error retrieving key fingerprint from card: %s\n", gpg_strerror(rc)); else if (info.pubkey_url && *info.pubkey_url) { spec=parse_keyserver_uri(info.pubkey_url,1,NULL,0); if(spec && info.fpr1valid) { /* This is not perfectly right. Currently, all card fingerprints are 20 digits, but what about fingerprints for a future v5 key? We should get the length from somewhere lower in the code. In any event, the fpr/keyid is not meaningful for straight HTTP fetches, but using it allows the card to point to HKP and LDAP servers as well. */ rc=keyserver_import_fprint(info.fpr1,20,spec); free_keyserver_spec(spec); } } else if (info.fpr1valid) { rc = keyserver_import_fprint (info.fpr1, 20, opt.keyserver); } } return rc; } /* Read data from file FNAME up to MAXLEN characters. On error return -1 and store NULL at R_BUFFER; on success return the number of bytes read and store the address of a newly allocated buffer at R_BUFFER. */ static int get_data_from_file (const char *fname, size_t maxlen, char **r_buffer) { FILE *fp; char *data; int n; *r_buffer = NULL; fp = fopen (fname, "rb"); #if GNUPG_MAJOR_VERSION == 1 if (fp && is_secured_file (fileno (fp))) { fclose (fp); fp = NULL; errno = EPERM; } #endif if (!fp) { tty_printf (_("can't open `%s': %s\n"), fname, strerror (errno)); return -1; } data = xtrymalloc (maxlen? maxlen:1); if (!data) { tty_printf (_("error allocating enough memory: %s\n"), strerror (errno)); fclose (fp); return -1; } if (maxlen) n = fread (data, 1, maxlen, fp); else n = 0; fclose (fp); if (n < 0) { tty_printf (_("error reading `%s': %s\n"), fname, strerror (errno)); xfree (data); return -1; } *r_buffer = data; return n; } /* Write LENGTH bytes from BUFFER to file FNAME. Return 0 on success. */ static int put_data_to_file (const char *fname, const void *buffer, size_t length) { FILE *fp; fp = fopen (fname, "wb"); #if GNUPG_MAJOR_VERSION == 1 if (fp && is_secured_file (fileno (fp))) { fclose (fp); fp = NULL; errno = EPERM; } #endif if (!fp) { tty_printf (_("can't create `%s': %s\n"), fname, strerror (errno)); return -1; } if (length && fwrite (buffer, length, 1, fp) != 1) { tty_printf (_("error writing `%s': %s\n"), fname, strerror (errno)); fclose (fp); return -1; } fclose (fp); return 0; } static int change_login (const char *args) { char *data; int n; int rc; if (args && *args == '<') /* Read it from a file */ { for (args++; spacep (args); args++) ; n = get_data_from_file (args, 254, &data); if (n < 0) return -1; } else { data = cpr_get ("cardedit.change_login", _("Login data (account name): ")); if (!data) return -1; trim_spaces (data); cpr_kill_prompt (); n = strlen (data); } if (n > 254 ) { tty_printf (_("Error: Login data too long " "(limit is %d characters).\n"), 254); xfree (data); return -1; } rc = agent_scd_setattr ("LOGIN-DATA", data, n, NULL ); if (rc) log_error ("error setting login data: %s\n", gpg_strerror (rc)); xfree (data); write_sc_op_status (rc); return rc; } static int change_private_do (const char *args, int nr) { char do_name[] = "PRIVATE-DO-X"; char *data; int n; int rc; assert (nr >= 1 && nr <= 4); do_name[11] = '0' + nr; if (args && (args = strchr (args, '<'))) /* Read it from a file */ { for (args++; spacep (args); args++) ; n = get_data_from_file (args, 254, &data); if (n < 0) return -1; } else { data = cpr_get ("cardedit.change_private_do", _("Private DO data: ")); if (!data) return -1; trim_spaces (data); cpr_kill_prompt (); n = strlen (data); } if (n > 254 ) { tty_printf (_("Error: Private DO too long " "(limit is %d characters).\n"), 254); xfree (data); return -1; } rc = agent_scd_setattr (do_name, data, n, NULL ); if (rc) log_error ("error setting private DO: %s\n", gpg_strerror (rc)); xfree (data); write_sc_op_status (rc); return rc; } static int change_cert (const char *args) { char *data; int n; int rc; if (args && *args == '<') /* Read it from a file */ { for (args++; spacep (args); args++) ; n = get_data_from_file (args, 16384, &data); if (n < 0) return -1; } else { tty_printf ("usage error: redirection to file required\n"); return -1; } rc = agent_scd_writecert ("OPENPGP.3", data, n); if (rc) log_error ("error writing certificate to card: %s\n", gpg_strerror (rc)); xfree (data); write_sc_op_status (rc); return rc; } static int read_cert (const char *args) { const char *fname; void *buffer; size_t length; int rc; if (args && *args == '>') /* Write it to a file */ { for (args++; spacep (args); args++) ; fname = args; } else { tty_printf ("usage error: redirection to file required\n"); return -1; } rc = agent_scd_readcert ("OPENPGP.3", &buffer, &length); if (rc) log_error ("error reading certificate from card: %s\n", gpg_strerror (rc)); else rc = put_data_to_file (fname, buffer, length); xfree (buffer); write_sc_op_status (rc); return rc; } static int change_lang (void) { char *data, *p; int rc; data = cpr_get ("cardedit.change_lang", _("Language preferences: ")); if (!data) return -1; trim_spaces (data); cpr_kill_prompt (); if (strlen (data) > 8 || (strlen (data) & 1)) { tty_printf (_("Error: invalid length of preference string.\n")); xfree (data); return -1; } for (p=data; *p && *p >= 'a' && *p <= 'z'; p++) ; if (*p) { tty_printf (_("Error: invalid characters in preference string.\n")); xfree (data); return -1; } rc = agent_scd_setattr ("DISP-LANG", data, strlen (data), NULL ); if (rc) log_error ("error setting lang: %s\n", gpg_strerror (rc)); xfree (data); write_sc_op_status (rc); return rc; } static int change_sex (void) { char *data; const char *str; int rc; data = cpr_get ("cardedit.change_sex", _("Sex ((M)ale, (F)emale or space): ")); if (!data) return -1; trim_spaces (data); cpr_kill_prompt (); if (!*data) str = "9"; else if ((*data == 'M' || *data == 'm') && !data[1]) str = "1"; else if ((*data == 'F' || *data == 'f') && !data[1]) str = "2"; else { tty_printf (_("Error: invalid response.\n")); xfree (data); return -1; } rc = agent_scd_setattr ("DISP-SEX", str, 1, NULL ); if (rc) log_error ("error setting sex: %s\n", gpg_strerror (rc)); xfree (data); write_sc_op_status (rc); return rc; } static int change_cafpr (int fprno) { char *data; const char *s; int i, c, rc; unsigned char fpr[20]; data = cpr_get ("cardedit.change_cafpr", _("CA fingerprint: ")); if (!data) return -1; trim_spaces (data); cpr_kill_prompt (); for (i=0, s=data; i < 20 && *s; ) { while (spacep(s)) s++; if (*s == ':') s++; while (spacep(s)) s++; c = hextobyte (s); if (c == -1) break; fpr[i++] = c; s += 2; } xfree (data); if (i != 20 || *s) { tty_printf (_("Error: invalid formatted fingerprint.\n")); return -1; } rc = agent_scd_setattr (fprno==1?"CA-FPR-1": fprno==2?"CA-FPR-2": fprno==3?"CA-FPR-3":"x", fpr, 20, NULL ); if (rc) log_error ("error setting cafpr: %s\n", gpg_strerror (rc)); write_sc_op_status (rc); return rc; } static void toggle_forcesig (void) { struct agent_card_info_s info; int rc; int newstate; memset (&info, 0, sizeof info); rc = agent_scd_getattr ("CHV-STATUS", &info); if (rc) { log_error ("error getting current status: %s\n", gpg_strerror (rc)); return; } newstate = !info.chv1_cached; agent_release_card_info (&info); rc = agent_scd_setattr ("CHV-STATUS-1", newstate? "\x01":"", 1, NULL); if (rc) log_error ("error toggling signature PIN flag: %s\n", gpg_strerror (rc)); write_sc_op_status (rc); } /* Helper for the key generation/edit functions. */ static int get_info_for_key_operation (struct agent_card_info_s *info) { int rc; memset (info, 0, sizeof *info); rc = agent_scd_getattr ("SERIALNO", info); if (rc || !info->serialno || strncmp (info->serialno, "D27600012401", 12) || strlen (info->serialno) != 32 ) { log_error (_("key operation not possible: %s\n"), rc ? gpg_strerror (rc) : _("not an OpenPGP card")); return rc? rc: -1; } rc = agent_scd_getattr ("KEY-FPR", info); if (!rc) rc = agent_scd_getattr ("CHV-STATUS", info); if (!rc) rc = agent_scd_getattr ("DISP-NAME", info); if (!rc) rc = agent_scd_getattr ("EXTCAP", info); if (!rc) rc = agent_scd_getattr ("KEY-ATTR", info); if (rc) log_error (_("error getting current key info: %s\n"), gpg_strerror (rc)); return rc; } /* Helper for the key generation/edit functions. */ static int check_pin_for_key_operation (struct agent_card_info_s *info, int *forced_chv1) { int rc = 0; agent_clear_pin_cache (info->serialno); *forced_chv1 = !info->chv1_cached; if (*forced_chv1) { /* Switch off the forced mode so that during key generation we don't get bothered with PIN queries for each self-signature. */ rc = agent_scd_setattr ("CHV-STATUS-1", "\x01", 1, info->serialno); if (rc) { log_error ("error clearing forced signature PIN flag: %s\n", gpg_strerror (rc)); *forced_chv1 = 0; } } if (!rc) { /* Check the PIN now, so that we won't get asked later for each binding signature. */ rc = agent_scd_checkpin (info->serialno); if (rc) { log_error ("error checking the PIN: %s\n", gpg_strerror (rc)); write_sc_op_status (rc); } } return rc; } /* Helper for the key generation/edit functions. */ static void restore_forced_chv1 (int *forced_chv1) { int rc; if (*forced_chv1) { /* Switch back to forced state. */ rc = agent_scd_setattr ("CHV-STATUS-1", "", 1, NULL); if (rc) { log_error ("error setting forced signature PIN flag: %s\n", gpg_strerror (rc)); } } } /* Helper for the key generation/edit functions. */ static void show_card_key_info (struct agent_card_info_s *info) { tty_fprintf (NULL, "Signature key ....:"); print_sha1_fpr (NULL, info->fpr1valid? info->fpr1:NULL); tty_fprintf (NULL, "Encryption key....:"); print_sha1_fpr (NULL, info->fpr2valid? info->fpr2:NULL); tty_fprintf (NULL, "Authentication key:"); print_sha1_fpr (NULL, info->fpr3valid? info->fpr3:NULL); tty_printf ("\n"); } /* Helper for the key generation/edit functions. */ static int replace_existing_key_p (struct agent_card_info_s *info, int keyno) { assert (keyno >= 0 && keyno <= 3); if ((keyno == 1 && info->fpr1valid) || (keyno == 2 && info->fpr2valid) || (keyno == 3 && info->fpr3valid)) { tty_printf ("\n"); log_info ("WARNING: such a key has already been stored on the card!\n"); tty_printf ("\n"); if ( !cpr_get_answer_is_yes( "cardedit.genkeys.replace_key", _("Replace existing key? (y/N) "))) return -1; } return 0; } static void show_keysize_warning (void) { static int shown; if (shown) return; shown = 1; tty_printf (_("NOTE: There is no guarantee that the card " "supports the requested size.\n" " If the key generation does not succeed, " "please check the\n" " documentation of your card to see what " "sizes are allowed.\n")); } /* Ask for the size of a card key. NBITS is the current size configured for the card. KEYNO is the number of the key used to select the prompt. Returns 0 to use the default size (i.e. NBITS) or the selected size. */ static unsigned int ask_card_keysize (int keyno, unsigned int nbits) { unsigned int min_nbits = 1024; unsigned int max_nbits = 3072; /* GnuPG limit due to Assuan. */ char *prompt, *answer; unsigned int req_nbits; for (;;) { prompt = xasprintf (keyno == 0? _("What keysize do you want for the Signature key? (%u) "): keyno == 1? _("What keysize do you want for the Encryption key? (%u) "): _("What keysize do you want for the Authentication key? (%u) "), nbits); answer = cpr_get ("cardedit.genkeys.size", prompt); cpr_kill_prompt (); req_nbits = *answer? atoi (answer): nbits; xfree (prompt); xfree (answer); if (req_nbits != nbits && (req_nbits % 32) ) { req_nbits = ((req_nbits + 31) / 32) * 32; tty_printf (_("rounded up to %u bits\n"), req_nbits); } if (req_nbits == nbits) return 0; /* Use default. */ if (req_nbits < min_nbits || req_nbits > max_nbits) { tty_printf (_("%s keysizes must be in the range %u-%u\n"), "RSA", min_nbits, max_nbits); } else { tty_printf (_("The card will now be re-configured " "to generate a key of %u bits\n"), req_nbits); show_keysize_warning (); return req_nbits; } } } /* Change the size of key KEYNO (0..2) to NBITS and show an error message if that fails. */ static gpg_error_t do_change_keysize (int keyno, unsigned int nbits) { gpg_error_t err; char args[100]; snprintf (args, sizeof args, "--force %d 1 %u", keyno+1, nbits); err = agent_scd_setattr ("KEY-ATTR", args, strlen (args), NULL); if (err) log_error (_("error changing size of key %d to %u bits: %s\n"), keyno+1, nbits, gpg_strerror (err)); return err; } static void generate_card_keys (void) { struct agent_card_info_s info; int forced_chv1; int want_backup; int keyno; if (get_info_for_key_operation (&info)) return; if (info.extcap.ki) { char *answer; answer = cpr_get ("cardedit.genkeys.backup_enc", _("Make off-card backup of encryption key? (Y/n) ")); want_backup = answer_is_yes_no_default (answer, 1/*(default to Yes)*/); cpr_kill_prompt (); xfree (answer); } else want_backup = 0; if ( (info.fpr1valid && !fpr_is_zero (info.fpr1)) || (info.fpr2valid && !fpr_is_zero (info.fpr2)) || (info.fpr3valid && !fpr_is_zero (info.fpr3))) { tty_printf ("\n"); log_info (_("NOTE: keys are already stored on the card!\n")); tty_printf ("\n"); if ( !cpr_get_answer_is_yes ("cardedit.genkeys.replace_keys", _("Replace existing keys? (y/N) "))) { agent_release_card_info (&info); return; } } /* If no displayed name has been set, we assume that this is a fresh card and print a hint about the default PINs. */ if (!info.disp_name || !*info.disp_name) { tty_printf ("\n"); tty_printf (_("Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n"), "123456", "12345678"); tty_printf ("\n"); } if (check_pin_for_key_operation (&info, &forced_chv1)) goto leave; /* If the cards features changeable key attributes, we ask for the key size. */ if (info.is_v2 && info.extcap.aac) { unsigned int nbits; for (keyno = 0; keyno < DIM (info.key_attr); keyno++) { nbits = ask_card_keysize (keyno, info.key_attr[keyno].nbits); if (nbits && do_change_keysize (keyno, nbits)) { /* Error: Better read the default key size again. */ agent_release_card_info (&info); if (get_info_for_key_operation (&info)) goto leave; /* Ask again for this key size. */ keyno--; } } /* Note that INFO has not be synced. However we will only use the serialnumber and thus it won't harm. */ } generate_keypair (NULL, info.serialno, want_backup? opt.homedir:NULL); leave: agent_release_card_info (&info); restore_forced_chv1 (&forced_chv1); } /* This function is used by the key edit menu to generate an arbitrary subkey. */ int card_generate_subkey (KBNODE pub_keyblock, KBNODE sec_keyblock) { struct agent_card_info_s info; int okay = 0; int forced_chv1 = 0; int keyno; if (get_info_for_key_operation (&info)) return 0; show_card_key_info (&info); tty_printf (_("Please select the type of key to generate:\n")); tty_printf (_(" (1) Signature key\n")); tty_printf (_(" (2) Encryption key\n")); tty_printf (_(" (3) Authentication key\n")); for (;;) { char *answer = cpr_get ("cardedit.genkeys.subkeytype", _("Your selection? ")); cpr_kill_prompt(); if (*answer == CONTROL_D) { xfree (answer); goto leave; } keyno = *answer? atoi(answer): 0; xfree(answer); if (keyno >= 1 && keyno <= 3) break; /* Okay. */ tty_printf(_("Invalid selection.\n")); } if (replace_existing_key_p (&info, keyno)) goto leave; if (check_pin_for_key_operation (&info, &forced_chv1)) goto leave; /* If the cards features changeable key attributes, we ask for the key size. */ if (info.is_v2 && info.extcap.aac) { unsigned int nbits; ask_again: nbits = ask_card_keysize (keyno-1, info.key_attr[keyno-1].nbits); if (nbits && do_change_keysize (keyno-1, nbits)) { /* Error: Better read the default key size again. */ agent_release_card_info (&info); if (get_info_for_key_operation (&info)) goto leave; goto ask_again; } /* Note that INFO has not be synced. However we will only use the serialnumber and thus it won't harm. */ } okay = generate_card_subkeypair (pub_keyblock, sec_keyblock, keyno, info.serialno); leave: agent_release_card_info (&info); restore_forced_chv1 (&forced_chv1); return okay; } /* Store the key at NODE into the smartcard and modify NODE to carry the serialno stuff instead of the actual secret key parameters. USE is the usage for that key; 0 means any usage. */ int card_store_subkey (KBNODE node, int use) { struct agent_card_info_s info; int okay = 0; int rc; int keyno, i; PKT_secret_key *copied_sk = NULL; PKT_secret_key *sk; size_t n; const char *s; int allow_keyno[3]; unsigned int nbits; assert (node->pkt->pkttype == PKT_SECRET_KEY || node->pkt->pkttype == PKT_SECRET_SUBKEY); sk = node->pkt->pkt.secret_key; if (get_info_for_key_operation (&info)) return 0; if (!info.extcap.ki) { tty_printf ("The card does not support the import of keys\n"); tty_printf ("\n"); goto leave; } show_card_key_info (&info); nbits = nbits_from_sk (sk); if (!is_RSA (sk->pubkey_algo) || (!info.is_v2 && nbits != 1024) ) { tty_printf ("You may only store a 1024 bit RSA key on the card\n"); tty_printf ("\n"); goto leave; } allow_keyno[0] = (!use || (use & (PUBKEY_USAGE_SIG))); allow_keyno[1] = (!use || (use & (PUBKEY_USAGE_ENC))); allow_keyno[2] = (!use || (use & (PUBKEY_USAGE_SIG|PUBKEY_USAGE_AUTH))); tty_printf (_("Please select where to store the key:\n")); if (allow_keyno[0]) tty_printf (_(" (1) Signature key\n")); if (allow_keyno[1]) tty_printf (_(" (2) Encryption key\n")); if (allow_keyno[2]) tty_printf (_(" (3) Authentication key\n")); for (;;) { char *answer = cpr_get ("cardedit.genkeys.storekeytype", _("Your selection? ")); cpr_kill_prompt(); if (*answer == CONTROL_D || !*answer) { xfree (answer); goto leave; } keyno = *answer? atoi(answer): 0; xfree(answer); if (keyno >= 1 && keyno <= 3 && allow_keyno[keyno-1]) { if (info.is_v2 && !info.extcap.aac && info.key_attr[keyno-1].nbits != nbits) { tty_printf ("Key does not match the card's capability.\n"); } else break; /* Okay. */ } else tty_printf(_("Invalid selection.\n")); } if (replace_existing_key_p (&info, keyno)) goto leave; /* Unprotect key. */ switch (is_secret_key_protected (sk) ) { case 0: /* Not protected. */ break; case -1: log_error (_("unknown key protection algorithm\n")); goto leave; default: if (sk->protect.s2k.mode == 1001) { log_error (_("secret parts of key are not available\n")); goto leave; } if (sk->protect.s2k.mode == 1002) { log_error (_("secret key already stored on a card\n")); goto leave; } /* We better copy the key before we unprotect it. */ copied_sk = sk = copy_secret_key (NULL, sk); rc = check_secret_key (sk, 0); if (rc) goto leave; } rc = save_unprotected_key_to_card (sk, keyno); if (rc) { log_error (_("error writing key to card: %s\n"), gpg_strerror (rc)); goto leave; } /* Get back to the maybe protected original secret key. */ if (copied_sk) { free_secret_key (copied_sk); copied_sk = NULL; } sk = node->pkt->pkt.secret_key; /* Get rid of the secret key parameters and store the serial numer. */ n = pubkey_get_nskey (sk->pubkey_algo); for (i=pubkey_get_npkey (sk->pubkey_algo); i < n; i++) { gcry_mpi_release (sk->skey[i]); sk->skey[i] = NULL; } i = pubkey_get_npkey (sk->pubkey_algo); sk->skey[i] = gcry_mpi_set_opaque (NULL, xstrdup ("dummydata"), 10*8); sk->is_protected = 1; sk->protect.s2k.mode = 1002; s = info.serialno; for (sk->protect.ivlen=0; sk->protect.ivlen < 16 && *s && s[1]; sk->protect.ivlen++, s += 2) sk->protect.iv[sk->protect.ivlen] = xtoi_2 (s); okay = 1; leave: if (copied_sk) free_secret_key (copied_sk); agent_release_card_info (&info); return okay; } /* Data used by the command parser. This needs to be outside of the function scope to allow readline based command completion. */ enum cmdids { cmdNOP = 0, cmdQUIT, cmdADMIN, cmdHELP, cmdLIST, cmdDEBUG, cmdVERIFY, cmdNAME, cmdURL, cmdFETCH, cmdLOGIN, cmdLANG, cmdSEX, cmdCAFPR, cmdFORCESIG, cmdGENERATE, cmdPASSWD, cmdPRIVATEDO, cmdWRITECERT, cmdREADCERT, cmdUNBLOCK, cmdINVCMD }; static struct { const char *name; enum cmdids id; int admin_only; const char *desc; } cmds[] = { { "quit" , cmdQUIT , 0, N_("quit this menu")}, { "q" , cmdQUIT , 0, NULL }, { "admin" , cmdADMIN , 0, N_("show admin commands")}, { "help" , cmdHELP , 0, N_("show this help")}, { "?" , cmdHELP , 0, NULL }, { "list" , cmdLIST , 0, N_("list all available data")}, { "l" , cmdLIST , 0, NULL }, { "debug" , cmdDEBUG , 0, NULL }, { "name" , cmdNAME , 1, N_("change card holder's name")}, { "url" , cmdURL , 1, N_("change URL to retrieve key")}, { "fetch" , cmdFETCH , 0, N_("fetch the key specified in the card URL")}, { "login" , cmdLOGIN , 1, N_("change the login name")}, { "lang" , cmdLANG , 1, N_("change the language preferences")}, { "sex" , cmdSEX , 1, N_("change card holder's sex")}, { "cafpr" , cmdCAFPR , 1, N_("change a CA fingerprint")}, { "forcesig", cmdFORCESIG, 1, N_("toggle the signature force PIN flag")}, { "generate", cmdGENERATE, 1, N_("generate new keys")}, { "passwd" , cmdPASSWD, 0, N_("menu to change or unblock the PIN")}, { "verify" , cmdVERIFY, 0, N_("verify the PIN and list all data")}, { "unblock" , cmdUNBLOCK,0, N_("unblock the PIN using a Reset Code") }, /* Note, that we do not announce these command yet. */ { "privatedo", cmdPRIVATEDO, 0, NULL }, { "readcert", cmdREADCERT, 0, NULL }, { "writecert", cmdWRITECERT, 1, NULL }, { NULL, cmdINVCMD, 0, NULL } }; #ifdef HAVE_LIBREADLINE /* These two functions are used by readline for command completion. */ static char * command_generator(const char *text,int state) { static int list_index,len; const char *name; /* If this is a new word to complete, initialize now. This includes saving the length of TEXT for efficiency, and initializing the index variable to 0. */ if(!state) { list_index=0; len=strlen(text); } /* Return the next partial match */ while((name=cmds[list_index].name)) { /* Only complete commands that have help text */ if(cmds[list_index++].desc && strncmp(name,text,len)==0) return strdup(name); } return NULL; } static char ** card_edit_completion(const char *text, int start, int end) { (void)end; /* If we are at the start of a line, we try and command-complete. If not, just do nothing for now. */ if(start==0) return rl_completion_matches(text,command_generator); rl_attempted_completion_over=1; return NULL; } #endif /*HAVE_LIBREADLINE*/ /* Menu to edit all user changeable values on an OpenPGP card. Only Key creation is not handled here. */ void card_edit (strlist_t commands) { enum cmdids cmd = cmdNOP; int have_commands = !!commands; int redisplay = 1; char *answer = NULL; int allow_admin=0; char serialnobuf[50]; if (opt.command_fd != -1) ; else if (opt.batch && !have_commands) { log_error(_("can't do this in batch mode\n")); goto leave; } for (;;) { int arg_number; const char *arg_string = ""; const char *arg_rest = ""; char *p; int i; int cmd_admin_only; tty_printf("\n"); if (redisplay ) { if (opt.with_colons) { card_status (stdout, serialnobuf, DIM (serialnobuf)); fflush (stdout); } else { card_status (NULL, serialnobuf, DIM (serialnobuf)); tty_printf("\n"); } redisplay = 0; } do { xfree (answer); if (have_commands) { if (commands) { answer = xstrdup (commands->d); commands = commands->next; } else if (opt.batch) { answer = xstrdup ("quit"); } else have_commands = 0; } if (!have_commands) { tty_enable_completion (card_edit_completion); answer = cpr_get_no_help("cardedit.prompt", _("gpg/card> ")); cpr_kill_prompt(); tty_disable_completion (); } trim_spaces(answer); } while ( *answer == '#' ); arg_number = 0; /* Yes, here is the init which egcc complains about */ cmd_admin_only = 0; if (!*answer) cmd = cmdLIST; /* Default to the list command */ else if (*answer == CONTROL_D) cmd = cmdQUIT; else { if ((p=strchr (answer,' '))) { *p++ = 0; trim_spaces (answer); trim_spaces (p); arg_number = atoi(p); arg_string = p; arg_rest = p; while (digitp (arg_rest)) arg_rest++; while (spacep (arg_rest)) arg_rest++; } for (i=0; cmds[i].name; i++ ) if (!ascii_strcasecmp (answer, cmds[i].name )) break; cmd = cmds[i].id; cmd_admin_only = cmds[i].admin_only; } if (!allow_admin && cmd_admin_only) { tty_printf ("\n"); tty_printf (_("Admin-only command\n")); continue; } switch (cmd) { case cmdHELP: for (i=0; cmds[i].name; i++ ) if(cmds[i].desc && (!cmds[i].admin_only || (cmds[i].admin_only && allow_admin))) tty_printf("%-10s %s\n", cmds[i].name, _(cmds[i].desc) ); break; case cmdADMIN: if ( !strcmp (arg_string, "on") ) allow_admin = 1; else if ( !strcmp (arg_string, "off") ) allow_admin = 0; else if ( !strcmp (arg_string, "verify") ) { /* Force verification of the Admin Command. However, this is only done if the retry counter is at initial state. */ char *tmp = xmalloc (strlen (serialnobuf) + 6 + 1); strcpy (stpcpy (tmp, serialnobuf), "[CHV3]"); allow_admin = !agent_scd_checkpin (tmp); xfree (tmp); } else /* Toggle. */ allow_admin=!allow_admin; if(allow_admin) tty_printf(_("Admin commands are allowed\n")); else tty_printf(_("Admin commands are not allowed\n")); break; case cmdVERIFY: agent_scd_checkpin (serialnobuf); redisplay = 1; break; case cmdLIST: redisplay = 1; break; case cmdNAME: change_name (); break; case cmdURL: change_url (); break; case cmdFETCH: fetch_url(); break; case cmdLOGIN: change_login (arg_string); break; case cmdLANG: change_lang (); break; case cmdSEX: change_sex (); break; case cmdCAFPR: if ( arg_number < 1 || arg_number > 3 ) tty_printf ("usage: cafpr N\n" " 1 <= N <= 3\n"); else change_cafpr (arg_number); break; case cmdPRIVATEDO: if ( arg_number < 1 || arg_number > 4 ) tty_printf ("usage: privatedo N\n" " 1 <= N <= 4\n"); else change_private_do (arg_string, arg_number); break; case cmdWRITECERT: if ( arg_number != 3 ) tty_printf ("usage: writecert 3 < FILE\n"); else change_cert (arg_rest); break; case cmdREADCERT: if ( arg_number != 3 ) tty_printf ("usage: readcert 3 > FILE\n"); else read_cert (arg_rest); break; case cmdFORCESIG: toggle_forcesig (); break; case cmdGENERATE: generate_card_keys (); break; case cmdPASSWD: change_pin (0, allow_admin); break; case cmdUNBLOCK: change_pin (1, allow_admin); break; case cmdQUIT: goto leave; case cmdNOP: break; case cmdINVCMD: default: tty_printf ("\n"); tty_printf (_("Invalid command (try \"help\")\n")); break; } /* End command switch. */ } /* End of main menu loop. */ leave: xfree (answer); } gnupg-1.4.20/g10/cipher.c0000644000175000017500000001047012635262326011655 00000000000000/* cipher.c - En-/De-ciphering filter * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include #include "errors.h" #include "iobuf.h" #include "memory.h" #include "util.h" #include "filter.h" #include "packet.h" #include "options.h" #include "main.h" #include "status.h" #define MIN_PARTIAL_SIZE 512 static void write_header( cipher_filter_context_t *cfx, IOBUF a ) { PACKET pkt; PKT_encrypted ed; byte temp[18]; unsigned blocksize; unsigned nprefix; blocksize = cipher_get_blocksize( cfx->dek->algo ); if( blocksize < 8 || blocksize > 16 ) log_fatal("unsupported blocksize %u\n", blocksize ); memset( &ed, 0, sizeof ed ); ed.len = cfx->datalen; ed.extralen = blocksize+2; ed.new_ctb = !ed.len && !RFC1991; if( cfx->dek->use_mdc ) { ed.mdc_method = DIGEST_ALGO_SHA1; cfx->mdc_hash = md_open( DIGEST_ALGO_SHA1, 0 ); if ( DBG_HASHING ) md_start_debug( cfx->mdc_hash, "creatmdc" ); } { char buf[20]; sprintf (buf, "%d %d", ed.mdc_method, cfx->dek->algo); write_status_text (STATUS_BEGIN_ENCRYPTION, buf); } init_packet( &pkt ); pkt.pkttype = cfx->dek->use_mdc? PKT_ENCRYPTED_MDC : PKT_ENCRYPTED; pkt.pkt.encrypted = &ed; if( build_packet( a, &pkt )) log_bug("build_packet(ENCR_DATA) failed\n"); nprefix = blocksize; randomize_buffer( temp, nprefix, 1 ); temp[nprefix] = temp[nprefix-2]; temp[nprefix+1] = temp[nprefix-1]; print_cipher_algo_note( cfx->dek->algo ); cfx->cipher_hd = cipher_open( cfx->dek->algo, cfx->dek->use_mdc? CIPHER_MODE_CFB : CIPHER_MODE_AUTO_CFB, 1 ); /* log_hexdump( "thekey", cfx->dek->key, cfx->dek->keylen );*/ cipher_setkey( cfx->cipher_hd, cfx->dek->key, cfx->dek->keylen ); cipher_setiv( cfx->cipher_hd, NULL, 0 ); /* log_hexdump( "prefix", temp, nprefix+2 ); */ if( cfx->mdc_hash ) /* hash the "IV" */ md_write( cfx->mdc_hash, temp, nprefix+2 ); cipher_encrypt( cfx->cipher_hd, temp, temp, nprefix+2); cipher_sync( cfx->cipher_hd ); iobuf_write(a, temp, nprefix+2); cfx->header=1; } /**************** * This filter is used to en/de-cipher data with a conventional algorithm */ int cipher_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { size_t size = *ret_len; cipher_filter_context_t *cfx = opaque; int rc=0; if( control == IOBUFCTRL_UNDERFLOW ) { /* decrypt */ rc = -1; /* not yet used */ } else if( control == IOBUFCTRL_FLUSH ) { /* encrypt */ assert(a); if( !cfx->header ) { write_header( cfx, a ); } if( cfx->mdc_hash ) md_write( cfx->mdc_hash, buf, size ); cipher_encrypt( cfx->cipher_hd, buf, buf, size); if( iobuf_write( a, buf, size ) ) rc = G10ERR_WRITE_FILE; } else if( control == IOBUFCTRL_FREE ) { if( cfx->mdc_hash ) { byte *hash; int hashlen = md_digest_length( md_get_algo( cfx->mdc_hash ) ); byte temp[22]; assert( hashlen == 20 ); /* we must hash the prefix of the MDC packet here */ temp[0] = 0xd3; temp[1] = 0x14; md_putc( cfx->mdc_hash, temp[0] ); md_putc( cfx->mdc_hash, temp[1] ); md_final( cfx->mdc_hash ); hash = md_read( cfx->mdc_hash, 0 ); memcpy(temp+2, hash, 20); cipher_encrypt( cfx->cipher_hd, temp, temp, 22 ); md_close( cfx->mdc_hash ); cfx->mdc_hash = NULL; if( iobuf_write( a, temp, 22 ) ) log_error("writing MDC packet failed\n" ); } cipher_close(cfx->cipher_hd); } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "cipher_filter"; } return rc; } gnupg-1.4.20/g10/tdbdump.c0000644000175000017500000001343012635262326012041 00000000000000/* tdbdump.c * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #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" #define HEXTOBIN(x) ( (x) >= '0' && (x) <= '9' ? ((x)-'0') : \ (x) >= 'A' && (x) <= 'F' ? ((x)-'A'+10) : ((x)-'a'+10)) /**************** * 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(); } /**************** * Dump the entire trustdb or only the entries of one key. */ void list_trustdb( const char *username ) { TRUSTREC rec; init_trustdb(); /* for now we ignore the user ID */ if (1) { ulong recnum; int i; printf("TrustDB: %s\n", tdbio_get_dbname() ); for(i=9+strlen(tdbio_get_dbname()); i > 0; i-- ) putchar('-'); putchar('\n'); for(recnum=0; !tdbio_read_record( recnum, &rec, 0); recnum++ ) tdbio_dump_record( &rec, stdout ); } } /**************** * Print a list of all defined owner trust value. */ void export_ownertrust() { TRUSTREC rec; ulong recnum; int i; byte *p; init_trustdb(); printf(_("# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n"), asctimestamp( make_timestamp() ) ); for(recnum=0; !tdbio_read_record( recnum, &rec, 0); recnum++ ) { if( rec.rectype == RECTYPE_TRUST ) { if( !rec.r.trust.ownertrust ) continue; p = rec.r.trust.fingerprint; for(i=0; i < 20; i++, p++ ) printf("%02X", *p ); printf(":%u:\n", (unsigned int)rec.r.trust.ownertrust ); } } } void import_ownertrust( const char *fname ) { FILE *fp; int is_stdin=0; char line[256]; char *p; size_t n, fprlen; unsigned int otrust; byte fpr[20]; int any = 0; int rc; init_trustdb(); if( iobuf_is_pipe_filename (fname) ) { fp = stdin; fname = "[stdin]"; is_stdin = 1; } else if( !(fp = fopen( fname, "r" )) ) { log_error ( _("can't open `%s': %s\n"), fname, strerror(errno) ); return; } if (is_secured_file (fileno (fp))) { fclose (fp); errno = EPERM; log_error (_("can't open `%s': %s\n"), fname, strerror(errno) ); return; } while( fgets( line, DIM(line)-1, fp ) ) { TRUSTREC rec; if( !*line || *line == '#' ) continue; n = strlen(line); if( line[n-1] != '\n' ) { log_error (_("error in `%s': %s\n"), fname, _("line too long") ); /* ... or last line does not have a LF */ break; /* can't continue */ } for(p = line; *p && *p != ':' ; p++ ) if( !hexdigitp(p) ) break; if( *p != ':' ) { log_error (_("error in `%s': %s\n"), fname, _("colon missing") ); continue; } fprlen = p - line; if( fprlen != 32 && fprlen != 40 ) { log_error (_("error in `%s': %s\n"), fname, _("invalid fingerprint") ); continue; } if( sscanf(p, ":%u:", &otrust ) != 1 ) { log_error (_("error in `%s': %s\n"), fname, _("ownertrust value missing")); continue; } if( !otrust ) continue; /* no otrust defined - no need to update or insert */ /* convert the ascii fingerprint to binary */ for(p=line, fprlen=0; fprlen < 20 && *p != ':'; p += 2 ) fpr[fprlen++] = HEXTOBIN(p[0]) * 16 + HEXTOBIN(p[1]); while (fprlen < 20) fpr[fprlen++] = 0; rc = tdbio_search_trust_byfpr (fpr, &rec); if( !rc ) { /* found: update */ if (rec.r.trust.ownertrust != otrust) { if( rec.r.trust.ownertrust ) log_info("changing ownertrust from %u to %u\n", rec.r.trust.ownertrust, otrust ); else log_info("setting ownertrust to %u\n", otrust ); rec.r.trust.ownertrust = otrust; write_record (&rec ); any = 1; } } else if( rc == -1 ) { /* not found: insert */ log_info("inserting ownertrust of %u\n", otrust ); memset (&rec, 0, sizeof rec); rec.recnum = tdbio_new_recnum (); rec.rectype = RECTYPE_TRUST; memcpy (rec.r.trust.fingerprint, fpr, 20); rec.r.trust.ownertrust = otrust; write_record (&rec ); any = 1; } else /* error */ log_error (_("error finding trust record in `%s': %s\n"), fname, g10_errstr(rc)); } if( ferror(fp) ) log_error ( _("read error in `%s': %s\n"), fname, strerror(errno) ); if( !is_stdin ) fclose(fp); if (any) { revalidation_mark (); rc = tdbio_sync (); if (rc) log_error (_("trustdb: sync failed: %s\n"), g10_errstr(rc) ); } } gnupg-1.4.20/g10/plaintext.c0000644000175000017500000003727712635262326012431 00000000000000/* plaintext.c - process plaintext packets * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2010 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 3 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, see . */ #include #include #include #include #include #include #include #ifdef HAVE_DOSISH_SYSTEM #include /* for setmode() */ #endif #include "util.h" #include "memory.h" #include "options.h" #include "packet.h" #include "ttyio.h" #include "filter.h" #include "main.h" #include "status.h" #include "i18n.h" #ifdef __VMS # include "vms.h" /* Not part of the standard GnuPG tarball. See http://antinode.info/dec/sw/gnupg.html */ # define fopen fopen_vms #endif /* def __VMS */ /**************** * Handle a plaintext packet. If MFX is not NULL, update the MDs * Note: we should use the filter stuff here, but we have to add some * easy mimic to set a read limit, so we calculate only the * bytes from the plaintext. */ int handle_plaintext( PKT_plaintext *pt, md_filter_context_t *mfx, int nooutput, int clearsig ) { char *fname = NULL; FILE *fp = NULL; static off_t count=0; int rc = 0; int c; int convert = (pt->mode == 't' || pt->mode == 'u'); #ifdef __riscos__ int filetype = 0xfff; #endif /* Let people know what the plaintext info is. This allows the receiving program to try and do something different based on the format code (say, recode UTF-8 to local). */ if(!nooutput && is_status_enabled()) { char status[50]; /* Better make sure that stdout has been flushed in case the output will be written to it. This is to make sure that no not-yet-flushed stuff will be written after the plaintext status message. */ fflush (stdout); sprintf(status,"%X %lu ",(byte)pt->mode,(ulong)pt->timestamp); write_status_text_and_buffer(STATUS_PLAINTEXT, status,pt->name,pt->namelen,0); if(!pt->is_partial) { sprintf(status,"%lu",(ulong)pt->len); write_status_text(STATUS_PLAINTEXT_LENGTH,status); } } /* create the filename as C string */ if( nooutput ) ; else if( opt.outfile ) { fname = xmalloc( strlen( opt.outfile ) + 1); strcpy(fname, opt.outfile ); } else if( pt->namelen == 8 && !memcmp( pt->name, "_CONSOLE", 8 ) ) { log_info(_("data not saved; use option \"--output\" to save it\n")); nooutput = 1; } else if( !opt.flags.use_embedded_filename ) { fname = make_outfile_name( iobuf_get_real_fname(pt->buf) ); if( !fname ) fname = ask_outfile_name( pt->name, pt->namelen ); if( !fname ) { rc = G10ERR_CREATE_FILE; goto leave; } } else fname=utf8_to_native(pt->name,pt->namelen,0); if( nooutput ) ; else if ( iobuf_is_pipe_filename (fname) || !*fname) { /* No filename or "-" given; write to stdout. */ fp = stdout; #ifdef HAVE_DOSISH_SYSTEM setmode ( fileno(fp) , O_BINARY ); #endif } else { while( !overwrite_filep (fname) ) { char *tmp = ask_outfile_name (NULL, 0); if ( !tmp || !*tmp ) { xfree (tmp); rc = G10ERR_CREATE_FILE; goto leave; } xfree (fname); fname = tmp; } } #ifndef __riscos__ if( fp || nooutput ) ; else if (is_secured_filename (fname)) { errno = EPERM; log_error(_("error creating `%s': %s\n"), fname, strerror(errno) ); rc = G10ERR_CREATE_FILE; goto leave; } else if( !(fp = fopen(fname,"wb")) ) { log_error(_("error creating `%s': %s\n"), fname, strerror(errno) ); rc = G10ERR_CREATE_FILE; goto leave; } #else /* __riscos__ */ /* If no output filename was given, i.e. we constructed it, convert all '.' in fname to '/' but not vice versa as we don't create directories! */ if( !opt.outfile ) for( c=0; fname[c]; ++c ) if( fname[c] == '.' ) fname[c] = '/'; if( fp || nooutput ) ; else { fp = fopen(fname,"wb"); if( !fp ) { log_error(_("error creating `%s': %s\n"), fname, strerror(errno) ); rc = G10ERR_CREATE_FILE; if (errno == 106) log_info("Do output file and input file have the same name?\n"); goto leave; } /* If there's a ,xxx extension in the embedded filename, use that, else check whether the user input (in fname) has a ,xxx appended, then use that in preference */ if( (c = riscos_get_filetype_from_string( pt->name, pt->namelen )) != -1 ) filetype = c; if( (c = riscos_get_filetype_from_string( fname, strlen(fname) )) != -1 ) filetype = c; riscos_set_filetype_by_number(fname, filetype); } #endif /* __riscos__ */ if( !pt->is_partial ) { /* We have an actual length (which might be zero). */ if (clearsig) { log_error ("clearsig encountered while not expected\n"); rc = G10ERR_UNEXPECTED; goto leave; } if( convert ) { /* text mode */ for( ; pt->len; pt->len-- ) { if( (c = iobuf_get(pt->buf)) == -1 ) { log_error("Problem reading source (%u bytes remaining)\n", (unsigned)pt->len); rc = G10ERR_READ_FILE; goto leave; } if( mfx->md ) md_putc(mfx->md, c ); #ifndef HAVE_DOSISH_SYSTEM if( c == '\r' ) /* convert to native line ending */ continue; /* fixme: this hack might be too simple */ #endif if( fp ) { if(opt.max_output && (++count)>opt.max_output) { log_error("Error writing to `%s': %s\n", fname,"exceeded --max-output limit\n"); rc = G10ERR_WRITE_FILE; goto leave; } else if( putc( c, fp ) == EOF ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); rc = G10ERR_WRITE_FILE; goto leave; } } } } else { /* binary mode */ byte *buffer = xmalloc( 32768 ); while( pt->len ) { int len = pt->len > 32768 ? 32768 : pt->len; len = iobuf_read( pt->buf, buffer, len ); if( len == -1 ) { log_error("Problem reading source (%u bytes remaining)\n", (unsigned)pt->len); rc = G10ERR_READ_FILE; xfree( buffer ); goto leave; } if( mfx->md ) md_write( mfx->md, buffer, len ); if( fp ) { if(opt.max_output && (count+=len)>opt.max_output) { log_error("Error writing to `%s': %s\n", fname,"exceeded --max-output limit\n"); rc = G10ERR_WRITE_FILE; xfree( buffer ); goto leave; } else if( fwrite( buffer, 1, len, fp ) != len ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); rc = G10ERR_WRITE_FILE; xfree( buffer ); goto leave; } } pt->len -= len; } xfree( buffer ); } } else if( !clearsig ) { if( convert ) { /* text mode */ while( (c = iobuf_get(pt->buf)) != -1 ) { if( mfx->md ) md_putc(mfx->md, c ); #ifndef HAVE_DOSISH_SYSTEM if( convert && c == '\r' ) continue; /* fixme: this hack might be too simple */ #endif if( fp ) { if(opt.max_output && (++count)>opt.max_output) { log_error("Error writing to `%s': %s\n", fname,"exceeded --max-output limit\n"); rc = G10ERR_WRITE_FILE; goto leave; } else if( putc( c, fp ) == EOF ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); rc = G10ERR_WRITE_FILE; goto leave; } } } } else { /* binary mode */ byte *buffer = xmalloc( 32768 ); int eof; for( eof=0; !eof; ) { /* Why do we check for len < 32768: * If we won't, we would practically read 2 EOFs but * the first one has already popped the block_filter * off and therefore we don't catch the boundary. * So, always assume EOF if iobuf_read returns less bytes * then requested */ int len = iobuf_read( pt->buf, buffer, 32768 ); if( len == -1 ) break; if( len < 32768 ) eof = 1; if( mfx->md ) md_write( mfx->md, buffer, len ); if( fp ) { if(opt.max_output && (count+=len)>opt.max_output) { log_error("Error writing to `%s': %s\n", fname,"exceeded --max-output limit\n"); rc = G10ERR_WRITE_FILE; xfree( buffer ); goto leave; } else if( fwrite( buffer, 1, len, fp ) != len ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); rc = G10ERR_WRITE_FILE; xfree( buffer ); goto leave; } } } xfree( buffer ); } pt->buf = NULL; } else { /* clear text signature - don't hash the last cr,lf */ int state = 0; while( (c = iobuf_get(pt->buf)) != -1 ) { if( fp ) { if(opt.max_output && (++count)>opt.max_output) { log_error("Error writing to `%s': %s\n", fname,"exceeded --max-output limit\n"); rc = G10ERR_WRITE_FILE; goto leave; } else if( putc( c, fp ) == EOF ) { log_error("Error writing to `%s': %s\n", fname, strerror(errno) ); rc = G10ERR_WRITE_FILE; goto leave; } } if( !mfx->md ) continue; if( state == 2 ) { md_putc(mfx->md, '\r' ); md_putc(mfx->md, '\n' ); state = 0; } if( !state ) { if( c == '\r' ) state = 1; else if( c == '\n' ) state = 2; else md_putc(mfx->md, c ); } else if( state == 1 ) { if( c == '\n' ) state = 2; else { md_putc(mfx->md, '\r' ); if( c == '\r' ) state = 1; else { state = 0; md_putc(mfx->md, c ); } } } } pt->buf = NULL; } if( fp && fp != stdout && fclose(fp) ) { log_error("Error closing `%s': %s\n", fname, strerror(errno) ); fp = NULL; rc = G10ERR_WRITE_FILE; goto leave; } fp = NULL; leave: /* Make sure that stdout gets flushed after the plaintext has been handled. This is for extra security as we do a flush anyway before checking the signature. */ if(fflush(stdout)) { /* We check whether this fflush succeeded since fp might have been stdout piping to a file. The fflush could fail if the file cannot be written (disk full, etc). See bug 1207 for more. */ log_error("Error flushing plaintext: %s\n",strerror(errno)); rc=G10ERR_WRITE_FILE; } if( fp && fp != stdout ) fclose(fp); xfree(fname); return rc; } static void do_hash( MD_HANDLE md, MD_HANDLE md2, IOBUF fp, int textmode ) { text_filter_context_t tfx; int c; if( textmode ) { memset( &tfx, 0, sizeof tfx); iobuf_push_filter( fp, text_filter, &tfx ); } if( md2 ) { /* work around a strange behaviour in pgp2 */ /* It seems that at least PGP5 converts a single CR to a CR,LF too */ int lc = -1; while( (c = iobuf_get(fp)) != -1 ) { if( c == '\n' && lc == '\r' ) md_putc(md2, c); else if( c == '\n' ) { md_putc(md2, '\r'); md_putc(md2, c); } else if( c != '\n' && lc == '\r' ) { md_putc(md2, '\n'); md_putc(md2, c); } else md_putc(md2, c); if( md ) md_putc(md, c ); lc = c; } } else { while( (c = iobuf_get(fp)) != -1 ) { if( md ) md_putc(md, c ); } } } /**************** * Ask for the detached datafile and calculate the digest from it. * INFILE is the name of the input file. */ int ask_for_detached_datafile( MD_HANDLE md, MD_HANDLE md2, const char *inname, int textmode ) { progress_filter_context_t pfx; char *answer = NULL; IOBUF fp; int rc = 0; fp = open_sigfile( inname, &pfx ); /* open default file */ if( !fp && !opt.batch ) { int any=0; tty_printf(_("Detached signature.\n")); do { char *name; xfree(answer); tty_enable_completion(NULL); name = cpr_get("detached_signature.filename", _("Please enter name of data file: ")); tty_disable_completion(); cpr_kill_prompt(); answer=make_filename(name,(void *)NULL); xfree(name); if( any && !*answer ) { rc = G10ERR_READ_FILE; goto leave; } fp = iobuf_open(answer); if (fp && is_secured_file (iobuf_get_fd (fp))) { iobuf_close (fp); fp = NULL; errno = EPERM; } if( !fp && errno == ENOENT ) { tty_printf("No such file, try again or hit enter to quit.\n"); any++; } else if( !fp ) { log_error(_("can't open `%s': %s\n"), answer, strerror(errno)); rc = G10ERR_READ_FILE; goto leave; } } while( !fp ); } if( !fp ) { if( opt.verbose ) log_info(_("reading stdin ...\n")); fp = iobuf_open( NULL ); assert(fp); } do_hash( md, md2, fp, textmode ); iobuf_close(fp); leave: xfree(answer); return rc; } /**************** * Hash the given files and append the hash to hash context md. * If FILES is NULL, hash stdin. */ int hash_datafiles( MD_HANDLE md, MD_HANDLE md2, STRLIST files, const char *sigfilename, int textmode ) { progress_filter_context_t pfx; IOBUF fp; STRLIST sl; if( !files ) { /* Check whether we can open the signed material. We avoid trying to open a file if run in batch mode. This assumed data file for a sig file feature is just a convenience thing for the command line and the user needs to read possible warning messages. */ if (!opt.batch) { fp = open_sigfile( sigfilename, &pfx ); if( fp ) { do_hash( md, md2, fp, textmode ); iobuf_close(fp); return 0; } } log_error (_("no signed data\n")); return G10ERR_OPEN_FILE; } for (sl=files; sl; sl = sl->next ) { fp = iobuf_open( sl->d ); if (fp && is_secured_file (iobuf_get_fd (fp))) { iobuf_close (fp); fp = NULL; errno = EPERM; } if( !fp ) { log_error(_("can't open signed data `%s'\n"), print_fname_stdin(sl->d)); return G10ERR_OPEN_FILE; } handle_progress (&pfx, fp, sl->d); do_hash( md, md2, fp, textmode ); iobuf_close(fp); } return 0; } /* Set up a plaintext packet with the appropriate filename. If there is a --set-filename, use it (it's already UTF8). If there is a regular filename, UTF8-ize it if necessary. If there is no filenames at all, set the field empty. */ PKT_plaintext * setup_plaintext_name(const char *filename,IOBUF iobuf) { PKT_plaintext *pt; if(filename || opt.set_filename) { char *s; if(opt.set_filename) s=make_basename(opt.set_filename,iobuf_get_real_fname(iobuf)); else if(filename && !opt.flags.utf8_filename) { char *tmp=native_to_utf8(filename); s=make_basename(tmp,iobuf_get_real_fname(iobuf)); xfree(tmp); } else s=make_basename(filename,iobuf_get_real_fname(iobuf)); pt = xmalloc (sizeof *pt + strlen(s) - 1); pt->namelen = strlen (s); memcpy (pt->name, s, pt->namelen); xfree (s); } else { /* no filename */ pt = xmalloc (sizeof *pt - 1); pt->namelen = 0; } return pt; } gnupg-1.4.20/g10/sign.c0000644000175000017500000012546112635262326011352 00000000000000/* sign.c - sign data * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2010, 2012 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 3 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, see . */ #include #include #include #include #include #include #include /* need sleep() */ #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 "filter.h" #include "ttyio.h" #include "trustdb.h" #include "status.h" #include "i18n.h" #include "cardglue.h" #ifdef HAVE_DOSISH_SYSTEM #define LF "\r\n" void __stdcall Sleep(ulong); #define sleep(a) Sleep((a)*1000) #else #define LF "\n" #endif static int recipient_digest_algo=0; /**************** * Create notations and other stuff. It is assumed that the stings in * STRLIST are already checked to contain only printable data and have * a valid NAME=VALUE format. */ static void mk_notation_policy_etc( PKT_signature *sig, PKT_public_key *pk, PKT_secret_key *sk ) { const char *string; char *s=NULL; STRLIST pu=NULL; struct notation *nd=NULL; struct expando_args args; assert(sig->version>=4); memset(&args,0,sizeof(args)); args.pk=pk; args.sk=sk; /* notation data */ if(IS_SIG(sig) && opt.sig_notations) nd=opt.sig_notations; else if( IS_CERT(sig) && opt.cert_notations ) nd=opt.cert_notations; if(nd) { struct notation *i; for(i=nd;i;i=i->next) { i->altvalue=pct_expando(i->value,&args); if(!i->altvalue) log_error(_("WARNING: unable to %%-expand notation " "(too large). Using unexpanded.\n")); } keygen_add_notations(sig,nd); for(i=nd;i;i=i->next) { xfree(i->altvalue); i->altvalue=NULL; } } /* set policy URL */ if( IS_SIG(sig) && opt.sig_policy_url ) pu=opt.sig_policy_url; else if( IS_CERT(sig) && opt.cert_policy_url ) pu=opt.cert_policy_url; for(;pu;pu=pu->next) { string = pu->d; s=pct_expando(string,&args); if(!s) { log_error(_("WARNING: unable to %%-expand policy URL " "(too large). Using unexpanded.\n")); s=xstrdup(string); } build_sig_subpkt(sig,SIGSUBPKT_POLICY| ((pu->flags & 1)?SIGSUBPKT_FLAG_CRITICAL:0), s,strlen(s)); xfree(s); } /* preferred keyserver URL */ if( IS_SIG(sig) && opt.sig_keyserver_url ) pu=opt.sig_keyserver_url; for(;pu;pu=pu->next) { string = pu->d; s=pct_expando(string,&args); if(!s) { log_error(_("WARNING: unable to %%-expand preferred keyserver URL" " (too large). Using unexpanded.\n")); s=xstrdup(string); } build_sig_subpkt(sig,SIGSUBPKT_PREF_KS| ((pu->flags & 1)?SIGSUBPKT_FLAG_CRITICAL:0), s,strlen(s)); xfree(s); } } /* * Helper to hash a user ID packet. */ static void hash_uid (MD_HANDLE md, int sigversion, const PKT_user_id *uid) { if ( sigversion >= 4 ) { byte buf[5]; if(uid->attrib_data) { buf[0] = 0xd1; /* indicates an attribute packet */ buf[1] = uid->attrib_len >> 24; /* always use 4 length bytes */ buf[2] = uid->attrib_len >> 16; buf[3] = uid->attrib_len >> 8; buf[4] = uid->attrib_len; } else { buf[0] = 0xb4; /* indicates a userid packet */ buf[1] = uid->len >> 24; /* always use 4 length bytes */ buf[2] = uid->len >> 16; buf[3] = uid->len >> 8; buf[4] = uid->len; } md_write( md, buf, 5 ); } if(uid->attrib_data) md_write (md, uid->attrib_data, uid->attrib_len ); else md_write (md, uid->name, uid->len ); } /* * Helper to hash some parts from the signature */ static void hash_sigversion_to_magic (MD_HANDLE md, const PKT_signature *sig) { if (sig->version >= 4) md_putc (md, sig->version); md_putc (md, sig->sig_class); if (sig->version < 4) { u32 a = sig->timestamp; md_putc (md, (a >> 24) & 0xff ); md_putc (md, (a >> 16) & 0xff ); md_putc (md, (a >> 8) & 0xff ); md_putc (md, a & 0xff ); } else { byte buf[6]; size_t n; md_putc (md, sig->pubkey_algo); md_putc (md, sig->digest_algo); if (sig->hashed) { n = sig->hashed->len; md_putc (md, (n >> 8) ); md_putc (md, n ); md_write (md, sig->hashed->data, n ); n += 6; } else { md_putc (md, 0); /* always hash the length of the subpacket*/ md_putc (md, 0); n = 6; } /* add some magic */ buf[0] = sig->version; buf[1] = 0xff; buf[2] = n >> 24; /* hmmm, n is only 16 bit, so this is always 0 */ buf[3] = n >> 16; buf[4] = n >> 8; buf[5] = n; md_write (md, buf, 6); } } static int do_sign( PKT_secret_key *sk, PKT_signature *sig, MD_HANDLE md, int digest_algo ) { MPI frame; byte *dp; int rc; if( sk->timestamp > sig->timestamp ) { ulong d = sk->timestamp - sig->timestamp; 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 ); if( !opt.ignore_time_conflict ) return G10ERR_TIME_CONFLICT; } print_pubkey_algo_note(sk->pubkey_algo); if( !digest_algo ) digest_algo = md_get_algo(md); print_digest_algo_note( digest_algo ); dp = md_read( md, digest_algo ); sig->digest_algo = digest_algo; sig->digest_start[0] = dp[0]; sig->digest_start[1] = dp[1]; if (sk->is_protected && sk->protect.s2k.mode == 1002) { #ifdef ENABLE_CARD_SUPPORT unsigned char *rbuf; size_t rbuflen; char *snbuf; snbuf = serialno_and_fpr_from_sk (sk->protect.iv, sk->protect.ivlen, sk); rc = agent_scd_pksign (snbuf, digest_algo, md_read (md, digest_algo), md_digest_length (digest_algo), &rbuf, &rbuflen); xfree (snbuf); if (!rc) { sig->data[0] = mpi_alloc ( mpi_nlimb_hint_from_nbytes (rbuflen) ); mpi_set_buffer (sig->data[0], rbuf, rbuflen, 0); xfree (rbuf); } #else return G10ERR_UNSUPPORTED; #endif /* ENABLE_CARD_SUPPORT */ } else { frame = encode_md_value( NULL, sk, md, digest_algo ); if (!frame) return G10ERR_GENERAL; rc = pubkey_sign( sk->pubkey_algo, sig->data, frame, sk->skey ); mpi_free(frame); } if (!rc && is_DSA (sk->pubkey_algo)) { /* Check that the signature verification worked and nothing is * fooling us e.g. by a bug in the signature create code or by * deliberately introduced faults. We don't do this for RSA * because that is done at a lower layer. */ PKT_public_key *pk = xmalloc_clear (sizeof *pk); if( get_pubkey( pk, sig->keyid ) ) rc = G10ERR_NO_PUBKEY; else { frame = encode_md_value (pk, NULL, md, sig->digest_algo ); if (!frame) rc = G10ERR_GENERAL; else rc = pubkey_verify (pk->pubkey_algo, frame, sig->data, pk->pkey ); mpi_free (frame); } if (rc) log_error (_("checking created signature failed: %s\n"), g10_errstr (rc)); free_public_key (pk); } if( rc ) log_error(_("signing failed: %s\n"), g10_errstr(rc) ); else { if( opt.verbose ) { char *ustr = get_user_id_string_native (sig->keyid); log_info(_("%s/%s signature from: \"%s\"\n"), pubkey_algo_to_string(sk->pubkey_algo), digest_algo_to_string(sig->digest_algo), ustr ); xfree(ustr); } } return rc; } int complete_sig( PKT_signature *sig, PKT_secret_key *sk, MD_HANDLE md ) { int rc=0; if( !(rc=check_secret_key( sk, 0 )) ) rc = do_sign( sk, sig, md, 0 ); return rc; } static int match_dsa_hash(unsigned int qbytes) { if(qbytes<=20) return DIGEST_ALGO_SHA1; #ifdef USE_SHA256 if(qbytes<=28) return DIGEST_ALGO_SHA224; if(qbytes<=32) return DIGEST_ALGO_SHA256; #endif #ifdef USE_SHA512 if(qbytes<=48) return DIGEST_ALGO_SHA384; if(qbytes<=64) return DIGEST_ALGO_SHA512; #endif return DEFAULT_DIGEST_ALGO; /* DEFAULT_DIGEST_ALGO will certainly fail, but it's the best wrong answer we have if the larger SHAs aren't there. */ } /* First try --digest-algo. If that isn't set, see if the recipient has a preferred algorithm (which is also filtered through --preferred-digest-prefs). If we're making a signature without a particular recipient (i.e. signing, rather than signing+encrypting) then take the first algorithm in --preferred-digest-prefs that is usable for the pubkey algorithm. If --preferred-digest-prefs isn't set, then take the OpenPGP default (i.e. SHA-1). Possible improvement: Use the highest-ranked usable algorithm from the signing key prefs either before or after using the personal list? */ static int hash_for(PKT_secret_key *sk) { if( opt.def_digest_algo ) return opt.def_digest_algo; else if( recipient_digest_algo ) return recipient_digest_algo; else if(sk->pubkey_algo==PUBKEY_ALGO_DSA) { unsigned int qbytes=mpi_get_nbits(sk->skey[1])/8; /* It's a DSA key, so find a hash that is the same size as q or larger. If q is 160, assume it is an old DSA key and use a 160-bit hash unless --enable-dsa2 is set, in which case act like a new DSA key that just happens to have a 160-bit q (i.e. allow truncation). If q is not 160, by definition it must be a new DSA key. */ if(opt.personal_digest_prefs) { prefitem_t *prefs; if(qbytes!=20 || opt.flags.dsa2) { for(prefs=opt.personal_digest_prefs;prefs->type;prefs++) if(md_digest_length(prefs->value)>=qbytes) return prefs->value; } else { for(prefs=opt.personal_digest_prefs;prefs->type;prefs++) if(md_digest_length(prefs->value)==qbytes) return prefs->value; } } return match_dsa_hash(qbytes); } else if (sk->is_protected && sk->protect.s2k.mode == 1002 && sk->protect.ivlen == 16 && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01\x01", 7)) { /* The sk lives on a smartcard, and old smartcards only handle SHA-1 and RIPEMD/160. Newer smartcards (v2.0) don't have this restriction anymore. Fortunately the serial number encodes the version of the card and thus we know that this key is on a v1 card. */ if(opt.personal_digest_prefs) { prefitem_t *prefs; for(prefs=opt.personal_digest_prefs;prefs->type;prefs++) if(prefs->value==DIGEST_ALGO_SHA1 || prefs->value==DIGEST_ALGO_RMD160) return prefs->value; } return DIGEST_ALGO_SHA1; } else if(PGP2 && sk->pubkey_algo == PUBKEY_ALGO_RSA && sk->version < 4 ) { /* Old-style PGP only understands MD5 */ return DIGEST_ALGO_MD5; } else if( opt.personal_digest_prefs ) { /* It's not DSA, so we can use whatever the first hash algorithm is in the pref list */ return opt.personal_digest_prefs[0].value; } else return DEFAULT_DIGEST_ALGO; } static int only_old_style( SK_LIST sk_list ) { SK_LIST sk_rover = NULL; int old_style = 0; /* if there are only old style capable key we use the old sytle */ for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; if( sk->pubkey_algo == PUBKEY_ALGO_RSA && sk->version < 4 ) old_style = 1; else return 0; } return old_style; } static void print_status_sig_created ( PKT_secret_key *sk, PKT_signature *sig, int what ) { byte array[MAX_FINGERPRINT_LEN], *p; char buf[100+MAX_FINGERPRINT_LEN*2]; size_t i, n; sprintf(buf, "%c %d %d %02x %lu ", what, sig->pubkey_algo, sig->digest_algo, sig->sig_class, (ulong)sig->timestamp ); fingerprint_from_sk( sk, array, &n ); p = buf + strlen(buf); for(i=0; i < n ; i++ ) sprintf(p+2*i, "%02X", array[i] ); write_status_text( STATUS_SIG_CREATED, buf ); } /* * Loop over the secret certificates in SK_LIST and build the one pass * signature packets. OpenPGP says that the data should be bracket by * the onepass-sig and signature-packet; so we build these onepass * packet here in reverse order */ static int write_onepass_sig_packets (SK_LIST sk_list, IOBUF out, int sigclass ) { int skcount; SK_LIST sk_rover; for (skcount=0, sk_rover=sk_list; sk_rover; sk_rover = sk_rover->next) skcount++; for (; skcount; skcount--) { PKT_secret_key *sk; PKT_onepass_sig *ops; PACKET pkt; int i, rc; for (i=0, sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { if (++i == skcount) break; } sk = sk_rover->sk; ops = xmalloc_clear (sizeof *ops); ops->sig_class = sigclass; ops->digest_algo = hash_for (sk); ops->pubkey_algo = sk->pubkey_algo; keyid_from_sk (sk, ops->keyid); ops->last = (skcount == 1); init_packet(&pkt); pkt.pkttype = PKT_ONEPASS_SIG; pkt.pkt.onepass_sig = ops; rc = build_packet (out, &pkt); free_packet (&pkt); if (rc) { log_error ("build onepass_sig packet failed: %s\n", g10_errstr(rc)); return rc; } } return 0; } /* * Helper to write the plaintext (literal data) packet */ static int write_plaintext_packet (IOBUF out, IOBUF inp, const char *fname, int ptmode, u32 timestamp) { PKT_plaintext *pt = NULL; u32 filesize; int rc = 0; if (!opt.no_literal) pt=setup_plaintext_name(fname,inp); /* try to calculate the length of the data */ if ( !iobuf_is_pipe_filename (fname) && *fname ) { off_t tmpsize; int overflow; if( !(tmpsize = iobuf_get_filelength(inp, &overflow)) && !overflow && opt.verbose) log_info (_("WARNING: `%s' is an empty file\n"), fname); /* We can't encode the length of very large files because OpenPGP uses only 32 bit for file sizes. So if the size of a file is larger than 2^32 minus some bytes for packet headers, we switch to partial length encoding. */ if ( tmpsize < (IOBUF_FILELENGTH_LIMIT - 65536) ) filesize = tmpsize; else filesize = 0; /* Because the text_filter modifies the length of the * data, it is not possible to know the used length * without a double read of the file - to avoid that * we simple use partial length packets. */ if ( ptmode == 't' ) filesize = 0; } else filesize = opt.set_filesize? opt.set_filesize : 0; /* stdin */ if (!opt.no_literal) { PACKET pkt; pt->timestamp = timestamp; pt->mode = ptmode; pt->len = filesize; pt->new_ctb = !pt->len && !RFC1991; pt->buf = inp; init_packet(&pkt); pkt.pkttype = PKT_PLAINTEXT; pkt.pkt.plaintext = pt; /*cfx.datalen = filesize? calc_packet_length( &pkt ) : 0;*/ if( (rc = build_packet (out, &pkt)) ) log_error ("build_packet(PLAINTEXT) failed: %s\n", g10_errstr(rc) ); pt->buf = NULL; } else { byte copy_buffer[4096]; int bytes_copied; while ((bytes_copied = iobuf_read(inp, copy_buffer, 4096)) != -1) if (iobuf_write(out, copy_buffer, bytes_copied) == -1) { rc = G10ERR_WRITE_FILE; log_error ("copying input to output failed: %s\n", g10_errstr(rc)); break; } wipememory(copy_buffer,4096); /* burn buffer */ } /* fixme: it seems that we never freed pt/pkt */ return rc; } /* * Write the signatures from the SK_LIST to OUT. HASH must be a non-finalized * hash which will not be changes here. */ static int write_signature_packets (SK_LIST sk_list, IOBUF out, MD_HANDLE hash, int sigclass, u32 timestamp, u32 duration, int status_letter) { SK_LIST sk_rover; /* loop over the secret certificates */ for (sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next) { PKT_secret_key *sk; PKT_signature *sig; MD_HANDLE md; int rc; sk = sk_rover->sk; /* build the signature packet */ sig = xmalloc_clear (sizeof *sig); if(opt.force_v3_sigs || RFC1991) sig->version=3; else if(duration || opt.sig_policy_url || opt.sig_notations || opt.sig_keyserver_url) sig->version=4; else sig->version=sk->version; keyid_from_sk (sk, sig->keyid); sig->digest_algo = hash_for(sk); sig->pubkey_algo = sk->pubkey_algo; if(timestamp) sig->timestamp = timestamp; else sig->timestamp = make_timestamp(); if(duration) sig->expiredate = sig->timestamp+duration; sig->sig_class = sigclass; md = md_copy (hash); if (sig->version >= 4) { build_sig_subpkt_from_sig (sig); mk_notation_policy_etc (sig, NULL, sk); } hash_sigversion_to_magic (md, sig); md_final (md); rc = do_sign( sk, sig, md, hash_for (sk) ); md_close (md); if( !rc ) { /* and write it */ PACKET pkt; init_packet(&pkt); pkt.pkttype = PKT_SIGNATURE; pkt.pkt.signature = sig; rc = build_packet (out, &pkt); if (!rc && is_status_enabled()) { print_status_sig_created ( sk, sig, status_letter); } free_packet (&pkt); if (rc) log_error ("build signature packet failed: %s\n", g10_errstr(rc) ); } if( rc ) return rc;; } return 0; } /**************** * Sign the files whose names are in FILENAME. * If DETACHED has the value true, * make a detached signature. If FILENAMES->d is NULL read from stdin * and ignore the detached mode. Sign the file with all secret keys * which can be taken from LOCUSR, if this is NULL, use the default one * If ENCRYPTFLAG is true, use REMUSER (or ask if it is NULL) to encrypt the * signed data for these users. * If OUTFILE is not NULL; this file is used for output and the function * does not ask for overwrite permission; output is then always * uncompressed, non-armored and in binary mode. */ int sign_file( STRLIST filenames, int detached, STRLIST locusr, int encryptflag, STRLIST remusr, const char *outfile ) { const char *fname; armor_filter_context_t afx; compress_filter_context_t zfx; md_filter_context_t mfx; text_filter_context_t tfx; progress_filter_context_t pfx; encrypt_filter_context_t efx; IOBUF inp = NULL, out = NULL; PACKET pkt; int rc = 0; PK_LIST pk_list = NULL; SK_LIST sk_list = NULL; SK_LIST sk_rover = NULL; int multifile = 0; u32 create_time=make_timestamp(),duration=0; memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); memset( &mfx, 0, sizeof mfx); memset( &efx, 0, sizeof efx); init_packet( &pkt ); if( filenames ) { fname = filenames->d; multifile = !!filenames->next; } else fname = NULL; if( fname && filenames->next && (!detached || encryptflag) ) log_bug("multiple files can only be detached signed"); if(encryptflag==2 && (rc=setup_symkey(&efx.symkey_s2k,&efx.symkey_dek))) goto leave; if(!opt.force_v3_sigs && !RFC1991) { if(opt.ask_sig_expire && !opt.batch) duration=ask_expire_interval(create_time,1,opt.def_sig_expire); else duration=parse_expire_string(create_time,opt.def_sig_expire); } if( (rc=build_sk_list( locusr, &sk_list, 1, PUBKEY_USAGE_SIG )) ) goto leave; if(PGP2 && !only_old_style(sk_list)) { log_info(_("you can only detach-sign with PGP 2.x style keys " "while in --pgp2 mode\n")); compliance_failure(); } if(encryptflag && (rc=build_pk_list( remusr, &pk_list, PUBKEY_USAGE_ENC ))) goto leave; /* prepare iobufs */ if( multifile ) /* have list of filenames */ inp = NULL; /* we do it later */ else { inp = iobuf_open(fname); if (inp && is_secured_file (iobuf_get_fd (inp))) { iobuf_close (inp); inp = NULL; errno = EPERM; } if( !inp ) { log_error(_("can't open `%s': %s\n"), fname? fname: "[stdin]", strerror(errno) ); rc = G10ERR_OPEN_FILE; goto leave; } handle_progress (&pfx, inp, fname); } if( outfile ) { if (is_secured_filename ( outfile )) { out = NULL; errno = EPERM; } else out = iobuf_create( outfile ); if( !out ) { log_error(_("can't create `%s': %s\n"), outfile, strerror(errno) ); rc = G10ERR_CREATE_FILE; goto leave; } else if( opt.verbose ) log_info(_("writing to `%s'\n"), outfile ); } else if( (rc = open_outfile( fname, opt.armor? 1: detached? 2:0, &out ))) goto leave; /* prepare to calculate the MD over the input */ if( opt.textmode && !outfile && !multifile ) { memset( &tfx, 0, sizeof tfx); iobuf_push_filter( inp, text_filter, &tfx ); } mfx.md = md_open(0, 0); if (DBG_HASHING) md_start_debug (mfx.md, "sign"); /* If we're encrypting and signing, it is reasonable to pick the hash algorithm to use out of the recepient key prefs. This is best effort only, as in a DSA2 and smartcard world there are cases where we cannot please everyone with a single hash (DSA2 wants >160 and smartcards want =160). In the future this could be more complex with different hashes for each sk, but the current design requires a single hash for all SKs. */ if(pk_list) { if(opt.def_digest_algo) { if(!opt.expert && select_algo_from_prefs(pk_list,PREFTYPE_HASH, opt.def_digest_algo, NULL)!=opt.def_digest_algo) log_info(_("WARNING: forcing digest algorithm %s (%d)" " violates recipient preferences\n"), digest_algo_to_string(opt.def_digest_algo), opt.def_digest_algo); } else { union pref_hint hint; int algo,smartcard=0; hint.digest_length=0; /* Of course, if the recipient asks for something unreasonable (like the wrong hash for a DSA key) then don't do it. Check all sk's - if any are DSA or live on a smartcard, then the hash has restrictions and we may not be able to give the recipient what they want. For DSA, pass a hint for the largest q we have. Note that this means that a q>160 key will override a q=160 key and force the use of truncation for the q=160 key. The alternative would be to ignore the recipient prefs completely and get a different hash for each DSA key in hash_for(). The override behavior here is more or less reasonable as it is under the control of the user which keys they sign with for a given message and the fact that the message with multiple signatures won't be usable on an implementation that doesn't understand DSA2 anyway. */ for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { if(sk_rover->sk->pubkey_algo==PUBKEY_ALGO_DSA) { int temp_hashlen=mpi_get_nbits(sk_rover->sk->skey[1])/8; /* Pick a hash that is large enough for our largest q */ if(hint.digest_lengthsk->is_protected && sk_rover->sk->protect.s2k.mode==1002) smartcard=1; } /* Current smartcards only do 160-bit hashes. If we have to have a >160-bit hash, then we can't use the recipient prefs as we'd need both =160 and >160 at the same time and recipient prefs currently require a single hash for all signatures. All this may well have to change as the cards add algorithms. */ if(!smartcard || (smartcard && hint.digest_length==20)) if((algo= select_algo_from_prefs(pk_list,PREFTYPE_HASH,-1,&hint))>0) recipient_digest_algo=algo; } } for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; md_enable(mfx.md, hash_for(sk)); } if( !multifile ) iobuf_push_filter( inp, md_filter, &mfx ); if( detached && !encryptflag && !RFC1991 ) afx.what = 2; if( opt.armor && !outfile ) iobuf_push_filter( out, armor_filter, &afx ); if( encryptflag ) { efx.pk_list = pk_list; /* fixme: set efx.cfx.datalen if known */ iobuf_push_filter( out, encrypt_filter, &efx ); } if( opt.compress_algo && !outfile && ( !detached || opt.compress_sigs) ) { int compr_algo=opt.compress_algo; /* If not forced by user */ if(compr_algo==-1) { /* If we're not encrypting, then select_algo_from_prefs will fail and we'll end up with the default. If we are encrypting, select_algo_from_prefs cannot fail since there is an assumed preference for uncompressed data. Still, if it did fail, we'll also end up with the default. */ if((compr_algo= select_algo_from_prefs(pk_list,PREFTYPE_ZIP,-1,NULL))==-1) compr_algo=default_compress_algo(); } else if(!opt.expert && pk_list && select_algo_from_prefs(pk_list,PREFTYPE_ZIP, compr_algo,NULL)!=compr_algo) log_info(_("WARNING: forcing compression algorithm %s (%d)" " violates recipient preferences\n"), compress_algo_to_string(compr_algo),compr_algo); /* algo 0 means no compression */ if( compr_algo ) push_compress_filter(out,&zfx,compr_algo); } /* Write the one-pass signature packets if needed */ if (!detached && !RFC1991) { rc = write_onepass_sig_packets (sk_list, out, opt.textmode && !outfile ? 0x01:0x00); if (rc) goto leave; } write_status (STATUS_BEGIN_SIGNING); /* Setup the inner packet. */ if( detached ) { if( multifile ) { STRLIST sl; if( opt.verbose ) log_info(_("signing:") ); /* must walk reverse trough this list */ for( sl = strlist_last(filenames); sl; sl = strlist_prev( filenames, sl ) ) { inp = iobuf_open(sl->d); if (inp && is_secured_file (iobuf_get_fd (inp))) { iobuf_close (inp); inp = NULL; errno = EPERM; } if( !inp ) { log_error(_("can't open `%s': %s\n"), sl->d,strerror(errno)); rc = G10ERR_OPEN_FILE; goto leave; } handle_progress (&pfx, inp, sl->d); if( opt.verbose ) fprintf(stderr, " `%s'", sl->d ); if(opt.textmode) { memset( &tfx, 0, sizeof tfx); iobuf_push_filter( inp, text_filter, &tfx ); } iobuf_push_filter( inp, md_filter, &mfx ); while( iobuf_get(inp) != -1 ) ; iobuf_close(inp); inp = NULL; } if( opt.verbose ) putc( '\n', stderr ); } else { /* read, so that the filter can calculate the digest */ while( iobuf_get(inp) != -1 ) ; } } else { rc = write_plaintext_packet (out, inp, fname, opt.textmode && !outfile ? 't':'b', create_time); } /* catch errors from above */ if (rc) goto leave; /* write the signatures */ rc = write_signature_packets (sk_list, out, mfx.md, opt.textmode && !outfile? 0x01 : 0x00, create_time, duration, detached ? 'D':'S'); if( rc ) goto leave; leave: if( rc ) iobuf_cancel(out); else { iobuf_close(out); if (encryptflag) write_status( STATUS_END_ENCRYPTION ); } iobuf_close(inp); md_close( mfx.md ); release_sk_list( sk_list ); release_pk_list( pk_list ); recipient_digest_algo=0; return rc; } /**************** * make a clear signature. note that opt.armor is not needed */ int clearsign_file( const char *fname, STRLIST locusr, const char *outfile ) { armor_filter_context_t afx; progress_filter_context_t pfx; MD_HANDLE textmd = NULL; IOBUF inp = NULL, out = NULL; PACKET pkt; int rc = 0; SK_LIST sk_list = NULL; SK_LIST sk_rover = NULL; int old_style = RFC1991; int only_md5 = 0; u32 create_time=make_timestamp(),duration=0; memset( &afx, 0, sizeof afx); init_packet( &pkt ); if(!opt.force_v3_sigs && !RFC1991) { if(opt.ask_sig_expire && !opt.batch) duration=ask_expire_interval(create_time,1,opt.def_sig_expire); else duration=parse_expire_string(create_time,opt.def_sig_expire); } if( (rc=build_sk_list( locusr, &sk_list, 1, PUBKEY_USAGE_SIG )) ) goto leave; if( !old_style && !duration ) old_style = only_old_style( sk_list ); if(PGP2 && !only_old_style(sk_list)) { log_info(_("you can only clearsign with PGP 2.x style keys " "while in --pgp2 mode\n")); compliance_failure(); } /* prepare iobufs */ inp = iobuf_open(fname); if (inp && is_secured_file (iobuf_get_fd (inp))) { iobuf_close (inp); inp = NULL; errno = EPERM; } if( !inp ) { log_error(_("can't open `%s': %s\n"), fname? fname: "[stdin]", strerror(errno) ); rc = G10ERR_OPEN_FILE; goto leave; } handle_progress (&pfx, inp, fname); if( outfile ) { if (is_secured_filename (outfile) ) { outfile = NULL; errno = EPERM; } else out = iobuf_create( outfile ); if( !out ) { log_error(_("can't create `%s': %s\n"), outfile, strerror(errno) ); rc = G10ERR_CREATE_FILE; goto leave; } else if( opt.verbose ) log_info(_("writing to `%s'\n"), outfile ); } else if( (rc = open_outfile( fname, 1, &out )) ) goto leave; iobuf_writestr(out, "-----BEGIN PGP SIGNED MESSAGE-----" LF ); for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; if( hash_for(sk) == DIGEST_ALGO_MD5 ) only_md5 = 1; else { only_md5 = 0; break; } } if( !(old_style && only_md5) ) { const char *s; int any = 0; byte hashs_seen[256]; memset( hashs_seen, 0, sizeof hashs_seen ); iobuf_writestr(out, "Hash: " ); for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; int i = hash_for(sk); if( !hashs_seen[ i & 0xff ] ) { s = digest_algo_to_string( i ); if( s ) { hashs_seen[ i & 0xff ] = 1; if( any ) iobuf_put(out, ',' ); iobuf_writestr(out, s ); any = 1; } } } assert(any); iobuf_writestr(out, LF ); } if( opt.not_dash_escaped ) iobuf_writestr( out, "NotDashEscaped: You need GnuPG to verify this message" LF ); iobuf_writestr(out, LF ); textmd = md_open(0, 0); for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { PKT_secret_key *sk = sk_rover->sk; md_enable(textmd, hash_for(sk)); } if ( DBG_HASHING ) md_start_debug( textmd, "clearsign" ); copy_clearsig_text( out, inp, textmd, !opt.not_dash_escaped, opt.escape_from, (old_style && only_md5) ); /* fixme: check for read errors */ /* now write the armor */ afx.what = 2; iobuf_push_filter( out, armor_filter, &afx ); /* write the signatures */ rc=write_signature_packets (sk_list, out, textmd, 0x01, create_time, duration, 'C'); if( rc ) goto leave; leave: if( rc ) iobuf_cancel(out); else iobuf_close(out); iobuf_close(inp); md_close( textmd ); release_sk_list( sk_list ); return rc; } /* * Sign and conventionally encrypt the given file. * FIXME: Far too much code is duplicated - revamp the whole file. */ int sign_symencrypt_file (const char *fname, STRLIST locusr) { armor_filter_context_t afx; progress_filter_context_t pfx; compress_filter_context_t zfx; md_filter_context_t mfx; text_filter_context_t tfx; cipher_filter_context_t cfx; IOBUF inp = NULL, out = NULL; PACKET pkt; STRING2KEY *s2k = NULL; int rc = 0; SK_LIST sk_list = NULL; SK_LIST sk_rover = NULL; int algo; u32 create_time=make_timestamp(),duration=0; memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); memset( &mfx, 0, sizeof mfx); memset( &tfx, 0, sizeof tfx); memset( &cfx, 0, sizeof cfx); init_packet( &pkt ); if(!opt.force_v3_sigs && !RFC1991) { if(opt.ask_sig_expire && !opt.batch) duration=ask_expire_interval(create_time,1,opt.def_sig_expire); else duration=parse_expire_string(create_time,opt.def_sig_expire); } rc = build_sk_list (locusr, &sk_list, 1, PUBKEY_USAGE_SIG); if (rc) goto leave; /* prepare iobufs */ inp = iobuf_open(fname); if (inp && is_secured_file (iobuf_get_fd (inp))) { iobuf_close (inp); inp = NULL; errno = EPERM; } if( !inp ) { log_error(_("can't open `%s': %s\n"), fname? fname: "[stdin]", strerror(errno) ); rc = G10ERR_OPEN_FILE; goto leave; } handle_progress (&pfx, inp, fname); /* prepare key */ s2k = xmalloc_clear( sizeof *s2k ); s2k->mode = RFC1991? 0:opt.s2k_mode; s2k->hash_algo = S2K_DIGEST_ALGO; algo = default_cipher_algo(); if (!opt.quiet || !opt.batch) log_info (_("%s encryption will be used\n"), cipher_algo_to_string(algo) ); cfx.dek = passphrase_to_dek( NULL, 0, algo, s2k, 2, NULL, NULL); if (!cfx.dek || !cfx.dek->keylen) { rc = G10ERR_PASSPHRASE; log_error(_("error creating passphrase: %s\n"), g10_errstr(rc) ); goto leave; } /* We have no way to tell if the recipient can handle messages with an MDC, so this defaults to no. Perhaps in a few years, this can be defaulted to yes. Note that like regular encrypting, --force-mdc overrides --disable-mdc. */ if(opt.force_mdc) cfx.dek->use_mdc=1; /* now create the outfile */ rc = open_outfile (fname, opt.armor? 1:0, &out); if (rc) goto leave; /* prepare to calculate the MD over the input */ if (opt.textmode) iobuf_push_filter (inp, text_filter, &tfx); mfx.md = md_open(0, 0); if ( DBG_HASHING ) md_start_debug (mfx.md, "symc-sign"); for (sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next) { PKT_secret_key *sk = sk_rover->sk; md_enable (mfx.md, hash_for (sk)); } iobuf_push_filter (inp, md_filter, &mfx); /* Push armor output filter */ if (opt.armor) iobuf_push_filter (out, armor_filter, &afx); /* Write the symmetric key packet */ /*(current filters: armor)*/ if (!RFC1991) { PKT_symkey_enc *enc = xmalloc_clear( sizeof *enc ); enc->version = 4; enc->cipher_algo = cfx.dek->algo; enc->s2k = *s2k; pkt.pkttype = PKT_SYMKEY_ENC; pkt.pkt.symkey_enc = enc; if( (rc = build_packet( out, &pkt )) ) log_error("build symkey packet failed: %s\n", g10_errstr(rc) ); xfree(enc); } /* Push the encryption filter */ iobuf_push_filter( out, cipher_filter, &cfx ); /* Push the compress filter */ if (default_compress_algo()) push_compress_filter(out,&zfx,default_compress_algo()); /* Write the one-pass signature packets */ /*(current filters: zip - encrypt - armor)*/ if (!RFC1991) { rc = write_onepass_sig_packets (sk_list, out, opt.textmode? 0x01:0x00); if (rc) goto leave; } write_status (STATUS_BEGIN_SIGNING); /* Pipe data through all filters; i.e. write the signed stuff */ /*(current filters: zip - encrypt - armor)*/ rc = write_plaintext_packet (out, inp, fname, opt.textmode ? 't':'b', create_time); if (rc) goto leave; /* Write the signatures */ /*(current filters: zip - encrypt - armor)*/ rc = write_signature_packets (sk_list, out, mfx.md, opt.textmode? 0x01 : 0x00, create_time, duration, 'S'); if( rc ) goto leave; leave: if( rc ) iobuf_cancel(out); else { iobuf_close(out); write_status( STATUS_END_ENCRYPTION ); } iobuf_close(inp); release_sk_list( sk_list ); md_close( mfx.md ); xfree(cfx.dek); xfree(s2k); return rc; } /**************** * Create a signature packet for the given public key certificate and * the user id and return it in ret_sig. User signature class SIGCLASS * user-id is not used (and may be NULL if sigclass is 0x20) If * DIGEST_ALGO is 0 the function selects an appropriate one. * SIGVERSION gives the minimal required signature packet version; * this is needed so that special properties like local sign are not * applied (actually: dropped) when a v3 key is used. TIMESTAMP is * the timestamp to use for the signature. 0 means "now" */ int make_keysig_packet( PKT_signature **ret_sig, PKT_public_key *pk, PKT_user_id *uid, PKT_public_key *subpk, PKT_secret_key *sk, int sigclass, int digest_algo, int sigversion, u32 timestamp, u32 duration, int (*mksubpkt)(PKT_signature *, void *), void *opaque ) { PKT_signature *sig; int rc=0; MD_HANDLE md; assert( (sigclass >= 0x10 && sigclass <= 0x13) || sigclass == 0x1F || sigclass == 0x20 || sigclass == 0x18 || sigclass == 0x19 || sigclass == 0x30 || sigclass == 0x28 ); if (opt.force_v4_certs) sigversion = 4; if (sigversion < sk->version) sigversion = sk->version; /* If you are making a signature on a v4 key using your v3 key, it doesn't make sense to generate a v3 sig. After all, no v3-only PGP implementation could understand the v4 key in the first place. Note that this implies that a signature on an attribute uid is usually going to be v4 as well, since they are not generally found on v3 keys. */ if (sigversion < pk->version) sigversion = pk->version; if( !digest_algo ) { /* Basically, this means use SHA1 always unless it's a v3 RSA key making a v3 cert (use MD5), or the user specified something (use whatever they said), or it's DSA (use the best match). They still can't pick an inappropriate hash for DSA or the signature will fail. Note that this still allows the caller of make_keysig_packet to override the user setting if it must. */ if(opt.cert_digest_algo) digest_algo=opt.cert_digest_algo; else if(sk->pubkey_algo==PUBKEY_ALGO_RSA && pk->version<4 && sigversion<4) digest_algo = DIGEST_ALGO_MD5; else if(sk->pubkey_algo==PUBKEY_ALGO_DSA) digest_algo = match_dsa_hash(mpi_get_nbits(sk->skey[1])/8); else digest_algo = DIGEST_ALGO_SHA1; } md = md_open( digest_algo, 0 ); /* hash the public key certificate */ hash_public_key( md, pk ); if( sigclass == 0x18 || sigclass == 0x19 || sigclass == 0x28 ) { /* hash the subkey binding/backsig/revocation */ hash_public_key( md, subpk ); } else if( sigclass != 0x1F && sigclass != 0x20 ) { /* hash the user id */ hash_uid (md, sigversion, uid); } /* and make the signature packet */ sig = xmalloc_clear( sizeof *sig ); sig->version = sigversion; sig->flags.exportable=1; sig->flags.revocable=1; keyid_from_sk( sk, sig->keyid ); sig->pubkey_algo = sk->pubkey_algo; sig->digest_algo = digest_algo; if(timestamp) sig->timestamp=timestamp; else sig->timestamp=make_timestamp(); if(duration) sig->expiredate=sig->timestamp+duration; sig->sig_class = sigclass; if( sig->version >= 4 ) { build_sig_subpkt_from_sig( sig ); mk_notation_policy_etc( sig, pk, sk ); } /* Crucial that the call to mksubpkt comes LAST before the calls to finalize the sig as that makes it possible for the mksubpkt function to get a reliable pointer to the subpacket area. */ if( sig->version >= 4 && mksubpkt ) rc = (*mksubpkt)( sig, opaque ); if( !rc ) { hash_sigversion_to_magic (md, sig); md_final(md); rc = complete_sig( sig, sk, md ); } md_close( md ); if( rc ) free_seckey_enc( sig ); else *ret_sig = sig; return rc; } /**************** * Create a new signature packet based on an existing one. * Only user ID signatures are supported for now. * TODO: Merge this with make_keysig_packet. */ int update_keysig_packet( PKT_signature **ret_sig, PKT_signature *orig_sig, PKT_public_key *pk, PKT_user_id *uid, PKT_public_key *subpk, PKT_secret_key *sk, int (*mksubpkt)(PKT_signature *, void *), void *opaque ) { PKT_signature *sig; int rc=0, digest_algo; MD_HANDLE md; if ((!orig_sig || !pk || !sk) || (orig_sig->sig_class >= 0x10 && orig_sig->sig_class <= 0x13 && !uid) || (orig_sig->sig_class == 0x18 && !subpk)) return G10ERR_GENERAL; if ( opt.cert_digest_algo ) digest_algo = opt.cert_digest_algo; else digest_algo = orig_sig->digest_algo; md = md_open( digest_algo, 0 ); /* hash the public key certificate and the user id */ hash_public_key( md, pk ); if( orig_sig->sig_class == 0x18 ) hash_public_key( md, subpk ); else hash_uid (md, orig_sig->version, uid); /* create a new signature packet */ sig = copy_signature (NULL, orig_sig); sig->digest_algo = digest_algo; /* We need to create a new timestamp so that new sig expiration calculations are done correctly... */ sig->timestamp=make_timestamp(); /* ... but we won't make a timestamp earlier than the existing one. */ while(sig->timestamp<=orig_sig->timestamp) { sleep(1); sig->timestamp=make_timestamp(); } /* Note that already expired sigs will remain expired (with a duration of 1) since build-packet.c:build_sig_subpkt_from_sig detects this case. */ if( sig->version >= 4 ) { /* Put the updated timestamp into the sig. Note that this will automagically lower any sig expiration dates to correctly correspond to the differences in the timestamps (i.e. the duration will shrink). */ build_sig_subpkt_from_sig( sig ); if (mksubpkt) rc = (*mksubpkt)(sig, opaque); } if (!rc) { hash_sigversion_to_magic (md, sig); md_final(md); rc = complete_sig( sig, sk, md ); } md_close (md); if( rc ) free_seckey_enc (sig); else *ret_sig = sig; return rc; } gnupg-1.4.20/g10/keylist.c0000644000175000017500000012555512635262326012102 00000000000000/* keylist.c * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2008, 2012 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 3 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, see . */ #include #include #include #include #include #include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" #include "memory.h" #include "photoid.h" #include "util.h" #include "ttyio.h" #include "trustdb.h" #include "main.h" #include "i18n.h" #include "status.h" static void list_all(int); static void list_one( STRLIST names, int secret); static void print_card_serialno (PKT_secret_key *sk); struct sig_stats { int inv_sigs; int no_key; int oth_err; }; static FILE *attrib_fp=NULL; /**************** * List the keys * If list is NULL, all available keys are listed */ void public_key_list( STRLIST list ) { if(opt.with_colons) { byte trust_model,marginals,completes,cert_depth,min_cert_level; ulong created,nextcheck; read_trust_options(&trust_model,&created,&nextcheck, &marginals,&completes,&cert_depth,&min_cert_level); printf("tru:"); if(nextcheck && nextcheck <= make_timestamp()) printf("o"); if(trust_model!=opt.trust_model) printf("t"); if(opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC) { if(marginals!=opt.marginals_needed) printf("m"); if(completes!=opt.completes_needed) printf("c"); if(cert_depth!=opt.max_cert_depth) printf("d"); if(min_cert_level!=opt.min_cert_level) printf("l"); } printf(":%d:%lu:%lu",trust_model,created,nextcheck); /* Only show marginals, completes, and cert_depth in the classic or PGP trust models since they are not meaningful otherwise. */ if(trust_model==TM_PGP || trust_model==TM_CLASSIC) printf(":%d:%d:%d",marginals,completes,cert_depth); printf("\n"); } /* We need to do the stale check right here because it might need to update the keyring while we already have the keyring open. This is very bad for W32 because of a sharing violation. For real OSes it might lead to false results if we are later listing a keyring which is associated with the inode of a deleted file. */ check_trustdb_stale (); if( !list ) list_all(0); else list_one( list, 0 ); } void secret_key_list( STRLIST list ) { check_trustdb_stale (); if( !list ) list_all(1); else /* List by user id */ list_one( list, 1 ); } void print_seckey_info (PKT_secret_key *sk) { u32 keyid[2]; char *p; keyid_from_sk (sk, keyid); p=get_user_id_native(keyid); tty_printf ("\nsec %4u%c/%s %s %s\n", nbits_from_sk (sk), pubkey_letter (sk->pubkey_algo), keystr(keyid), datestr_from_sk (sk), p); xfree (p); } /* Print information about the public key. With FP passed as NULL, the tty output interface is used, otherwise output is directted to the given stream. */ void print_pubkey_info (FILE *fp, PKT_public_key *pk) { u32 keyid[2]; char *p; keyid_from_pk (pk, keyid); /* If the pk was chosen by a particular user ID, that is the one to print. */ if(pk->user_id) p=utf8_to_native(pk->user_id->name,pk->user_id->len,0); else p=get_user_id_native(keyid); if (fp) fprintf (fp, "pub %4u%c/%s %s %s\n", nbits_from_pk (pk), pubkey_letter (pk->pubkey_algo), keystr(keyid), datestr_from_pk (pk), p); else tty_printf ("\npub %4u%c/%s %s %s\n", nbits_from_pk (pk), pubkey_letter (pk->pubkey_algo), keystr(keyid), datestr_from_pk (pk), p); xfree (p); } /* Print basic information of a secret key including the card serial number information. */ void print_card_key_info (FILE *fp, KBNODE keyblock) { KBNODE node; int i; for (node = keyblock; node; node = node->next ) { if (node->pkt->pkttype == PKT_SECRET_KEY || (node->pkt->pkttype == PKT_SECRET_SUBKEY) ) { PKT_secret_key *sk = node->pkt->pkt.secret_key; tty_fprintf (fp, "%s%c %4u%c/%s ", node->pkt->pkttype == PKT_SECRET_KEY? "sec":"ssb", (sk->protect.s2k.mode==1001)?'#': (sk->protect.s2k.mode==1002)?'>':' ', nbits_from_sk (sk), pubkey_letter (sk->pubkey_algo), keystr_from_sk(sk)); tty_fprintf (fp, _("created: %s"), datestr_from_sk (sk)); tty_fprintf (fp, " "); tty_fprintf (fp, _("expires: %s"), expirestr_from_sk (sk)); if (sk->is_protected && sk->protect.s2k.mode == 1002) { tty_fprintf (fp, "\n "); tty_fprintf (fp, _("card-no: ")); if (sk->protect.ivlen == 16 && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01", 6)) { /* This is an OpenPGP card. */ for (i=8; i < 14; i++) { if (i == 10) tty_fprintf (fp, " "); tty_fprintf (fp, "%02X", sk->protect.iv[i]); } } else { /* Something is wrong: Print all. */ for (i=0; i < sk->protect.ivlen; i++) tty_fprintf (fp, "%02X", sk->protect.iv[i]); } } tty_fprintf (fp, "\n"); } } } /* Flags = 0x01 hashed 0x02 critical */ static void status_one_subpacket(sigsubpkttype_t type,size_t len,int flags,const byte *buf) { char status[40]; /* Don't print these. */ if(len>256) return; sprintf(status,"%d %u %u ",type,flags,(unsigned int)len); write_status_text_and_buffer(STATUS_SIG_SUBPACKET,status,buf,len,0); } /* mode=0 for stdout. mode=1 for log_info + status messages mode=2 for status messages only */ void show_policy_url(PKT_signature *sig,int indent,int mode) { const byte *p; size_t len; int seq=0,crit; FILE *fp=mode?log_stream():stdout; while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,&len,&seq,&crit))) { if(mode!=2) { int i; const char *str; for(i=0;ihashed,SIGSUBPKT_PREF_KS,&len,&seq,&crit))) { if(mode!=2) { int i; const char *str; for(i=0;inext) { if(mode!=2) { int has_at=!!strchr(nd->name,'@'); if((which&1 && !has_at) || (which&2 && has_at)) { int i; const char *str; for(i=0;iflags.critical) str=_("Critical signature notation: "); else str=_("Signature notation: "); if(mode) log_info("%s",str); else printf("%s",str); /* This is all UTF8 */ print_utf8_string(fp,nd->name,strlen(nd->name)); fprintf(fp,"="); print_utf8_string(fp,nd->value,strlen(nd->value)); fprintf(fp,"\n"); } } if(mode) { write_status_buffer(STATUS_NOTATION_NAME, nd->name,strlen(nd->name),0); write_status_buffer(STATUS_NOTATION_DATA, nd->value,strlen(nd->value),50); } } free_notation(notations); } static void print_signature_stats(struct sig_stats *s) { if( s->inv_sigs == 1 ) tty_printf(_("1 bad signature\n") ); else if( s->inv_sigs ) tty_printf(_("%d bad signatures\n"), s->inv_sigs ); if( s->no_key == 1 ) tty_printf(_("1 signature not checked due to a missing key\n") ); else if( s->no_key ) tty_printf(_("%d signatures not checked due to missing keys\n"),s->no_key); if( s->oth_err == 1 ) tty_printf(_("1 signature not checked due to an error\n") ); else if( s->oth_err ) tty_printf(_("%d signatures not checked due to errors\n"), s->oth_err ); } static void list_all( int secret ) { KEYDB_HANDLE hd; KBNODE keyblock = NULL; int rc=0; const char *lastresname, *resname; struct sig_stats stats; memset(&stats,0,sizeof(stats)); hd = keydb_new (secret); if (!hd) rc = G10ERR_GENERAL; else rc = keydb_search_first (hd); if( rc ) { if( rc != -1 ) log_error("keydb_search_first failed: %s\n", g10_errstr(rc) ); goto leave; } lastresname = NULL; do { rc = keydb_get_keyblock (hd, &keyblock); if (rc) { log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); goto leave; } if(!opt.with_colons) { resname = keydb_get_resource_name (hd); if (lastresname != resname ) { int i; printf("%s\n", resname ); for(i=strlen(resname); i; i-- ) putchar('-'); putchar('\n'); lastresname = resname; } } merge_keys_and_selfsig( keyblock ); list_keyblock( keyblock, secret, opt.fingerprint, opt.check_sigs?&stats:NULL); release_kbnode( keyblock ); keyblock = NULL; } while (!(rc = keydb_search_next (hd))); if( rc && rc != -1 ) log_error ("keydb_search_next failed: %s\n", g10_errstr(rc)); if(opt.check_sigs && !opt.with_colons) print_signature_stats(&stats); leave: release_kbnode (keyblock); keydb_release (hd); } static void list_one( STRLIST names, int secret ) { int rc = 0; KBNODE keyblock = NULL; GETKEY_CTX ctx; const char *resname; const char *keyring_str = _("Keyring"); int i; struct sig_stats stats; memset(&stats,0,sizeof(stats)); /* fixme: using the bynames function has the disadvantage that we * don't know wether one of the names given was not found. OTOH, * this function has the advantage to list the names in the * sequence as defined by the keyDB and does not duplicate * outputs. A solution could be do test whether all given have * been listed (this needs a way to use the keyDB search * functions) or to have the search function return indicators for * found names. Yet another way is to use the keydb search * facilities directly. */ if( secret ) { rc = get_seckey_bynames( &ctx, NULL, names, &keyblock ); if( rc ) { log_error("error reading key: %s\n", g10_errstr(rc) ); get_seckey_end( ctx ); return; } do { if ((opt.list_options&LIST_SHOW_KEYRING) && !opt.with_colons) { resname = keydb_get_resource_name (get_ctx_handle(ctx)); printf("%s: %s\n", keyring_str, resname); for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- ) putchar('-'); putchar('\n'); } list_keyblock( keyblock, 1, opt.fingerprint, NULL ); release_kbnode( keyblock ); } while( !get_seckey_next( ctx, NULL, &keyblock ) ); get_seckey_end( ctx ); } else { rc = get_pubkey_bynames( &ctx, NULL, names, &keyblock ); if( rc ) { log_error("error reading key: %s\n", g10_errstr(rc) ); get_pubkey_end( ctx ); return; } do { if ((opt.list_options&LIST_SHOW_KEYRING) && !opt.with_colons) { resname = keydb_get_resource_name (get_ctx_handle(ctx)); printf("%s: %s\n", keyring_str, resname); for(i = strlen(resname) + strlen(keyring_str) + 2; i; i-- ) putchar('-'); putchar('\n'); } list_keyblock( keyblock, 0, opt.fingerprint, opt.check_sigs?&stats:NULL ); release_kbnode( keyblock ); } while( !get_pubkey_next( ctx, NULL, &keyblock ) ); get_pubkey_end( ctx ); } if(opt.check_sigs && !opt.with_colons) print_signature_stats(&stats); } static void print_key_data( PKT_public_key *pk ) { int n = pk ? pubkey_get_npkey( pk->pubkey_algo ) : 0; int i; for(i=0; i < n; i++ ) { printf("pkd:%d:%u:", i, mpi_get_nbits( pk->pkey[i] ) ); mpi_print(stdout, pk->pkey[i], 1 ); putchar(':'); putchar('\n'); } } static void print_capabilities (PKT_public_key *pk, PKT_secret_key *sk, KBNODE keyblock) { if(pk || (sk && sk->protect.s2k.mode!=1001)) { unsigned int use = pk? pk->pubkey_usage : sk->pubkey_usage; int c_printed = 0; if ( use & PUBKEY_USAGE_ENC ) putchar ('e'); if ( use & PUBKEY_USAGE_SIG ) { putchar ('s'); if( pk? pk->is_primary : sk->is_primary ) { putchar ('c'); /* The PUBKEY_USAGE_CERT flag was introduced later and we used to always print 'c' for a primary key. To avoid any regression here we better track whether we printed 'c' already. */ c_printed = 1; } } if ( (use & PUBKEY_USAGE_CERT) && !c_printed ) putchar ('c'); if ( (use & PUBKEY_USAGE_AUTH) ) putchar ('a'); } if ( keyblock ) { /* figure out the usable capabilities */ KBNODE k; int enc=0, sign=0, cert=0, auth=0, disabled=0; for (k=keyblock; k; k = k->next ) { if ( k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { pk = k->pkt->pkt.public_key; if(pk->is_primary) disabled=pk_is_disabled(pk); if ( pk->is_valid && !pk->is_revoked && !pk->has_expired ) { if ( pk->pubkey_usage & PUBKEY_USAGE_ENC ) enc = 1; if ( pk->pubkey_usage & PUBKEY_USAGE_SIG ) { sign = 1; if(pk->is_primary) cert = 1; } if ( pk->pubkey_usage & PUBKEY_USAGE_CERT ) cert = 1; if ( (pk->pubkey_usage & PUBKEY_USAGE_AUTH) ) auth = 1; } } else if ( k->pkt->pkttype == PKT_SECRET_KEY || k->pkt->pkttype == PKT_SECRET_SUBKEY ) { sk = k->pkt->pkt.secret_key; if ( sk->is_valid && !sk->is_revoked && !sk->has_expired && sk->protect.s2k.mode!=1001 ) { if ( sk->pubkey_usage & PUBKEY_USAGE_ENC ) enc = 1; if ( sk->pubkey_usage & PUBKEY_USAGE_SIG ) { sign = 1; if(sk->is_primary) cert = 1; } if ( (sk->pubkey_usage & PUBKEY_USAGE_CERT) ) cert = 1; if ( (sk->pubkey_usage & PUBKEY_USAGE_AUTH) ) auth = 1; } } } if (enc) putchar ('E'); if (sign) putchar ('S'); if (cert) putchar ('C'); if (auth) putchar ('A'); if (disabled) putchar ('D'); } putchar(':'); } /* Flags = 0x01 hashed 0x02 critical */ static void print_one_subpacket(sigsubpkttype_t type,size_t len,int flags,const byte *buf) { size_t i; printf("spk:%d:%u:%u:",type,flags,(unsigned int)len); for(i=0;i=32 && buf[i]<=126 && buf[i]!=':' && buf[i]!='%') printf("%c",buf[i]); else printf("%%%02X",buf[i]); } printf("\n"); } void print_subpackets_colon(PKT_signature *sig) { byte *i; assert(opt.show_subpackets); for(i=opt.show_subpackets;*i;i++) { const byte *p; size_t len; int seq,crit; seq=0; while((p=enum_sig_subpkt(sig->hashed,*i,&len,&seq,&crit))) print_one_subpacket(*i,len,0x01|(crit?0x02:0),p); seq=0; while((p=enum_sig_subpkt(sig->unhashed,*i,&len,&seq,&crit))) print_one_subpacket(*i,len,0x00|(crit?0x02:0),p); } } void dump_attribs(const PKT_user_id *uid,PKT_public_key *pk,PKT_secret_key *sk) { int i; if(!attrib_fp) return; for(i=0;inumattribs;i++) { if(is_status_enabled()) { byte array[MAX_FINGERPRINT_LEN], *p; char buf[(MAX_FINGERPRINT_LEN*2)+90]; size_t j,n; if(pk) fingerprint_from_pk( pk, array, &n ); else if(sk) fingerprint_from_sk( sk, array, &n ); else BUG(); p = array; for(j=0; j < n ; j++, p++ ) sprintf(buf+2*j, "%02X", *p ); sprintf(buf+strlen(buf)," %lu %u %u %u %lu %lu %u", (ulong)uid->attribs[i].len,uid->attribs[i].type,i+1, uid->numattribs,(ulong)uid->created,(ulong)uid->expiredate, ((uid->is_primary?0x01:0)| (uid->is_revoked?0x02:0)| (uid->is_expired?0x04:0))); write_status_text(STATUS_ATTRIBUTE,buf); } fwrite(uid->attribs[i].data,uid->attribs[i].len,1,attrib_fp); } } static void list_keyblock_print ( KBNODE keyblock, int secret, int fpr, void *opaque ) { int rc = 0; KBNODE kbctx; KBNODE node; PKT_public_key *pk; PKT_secret_key *sk; struct sig_stats *stats=opaque; int skip_sigs=0; /* get the keyid from the keyblock */ node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY ); if( !node ) { log_error("Oops; key lost!\n"); dump_kbnode( keyblock ); return; } if( secret ) { pk = NULL; sk = node->pkt->pkt.secret_key; printf("sec%c %4u%c/%s %s",(sk->protect.s2k.mode==1001)?'#': (sk->protect.s2k.mode==1002)?'>':' ', nbits_from_sk( sk ),pubkey_letter( sk->pubkey_algo ), keystr_from_sk(sk),datestr_from_sk( sk )); if(sk->has_expired) { printf(" ["); printf(_("expired: %s"),expirestr_from_sk(sk)); printf("]"); } else if(sk->expiredate ) { printf(" ["); printf(_("expires: %s"),expirestr_from_sk(sk)); printf("]"); } printf("\n"); } else { pk = node->pkt->pkt.public_key; sk = NULL; check_trustdb_stale(); printf("pub %4u%c/%s %s", nbits_from_pk(pk),pubkey_letter(pk->pubkey_algo), keystr_from_pk(pk),datestr_from_pk( pk )); /* We didn't include this before in the key listing, but there is room in the new format, so why not? */ if(pk->is_revoked) { printf(" ["); printf(_("revoked: %s"),revokestr_from_pk(pk)); printf("]"); } else if(pk->has_expired) { printf(" ["); printf(_("expired: %s"),expirestr_from_pk(pk)); printf("]"); } else if(pk->expiredate) { printf(" ["); printf(_("expires: %s"),expirestr_from_pk(pk)); printf("]"); } #if 0 /* I need to think about this some more. It's easy enough to include, but it looks sort of confusing in the listing... */ if(opt.list_options&LIST_SHOW_VALIDITY) { int validity=get_validity(pk,NULL); printf(" [%s]",trust_value_to_string(validity)); } #endif printf("\n"); } if( fpr ) print_fingerprint( pk, sk, 0 ); print_card_serialno (sk); if( opt.with_key_data ) print_key_data( pk ); for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) { if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) { PKT_user_id *uid=node->pkt->pkt.user_id; if(pk && (uid->is_expired || uid->is_revoked) && !(opt.list_options&LIST_SHOW_UNUSABLE_UIDS)) { skip_sigs=1; continue; } else skip_sigs=0; if(attrib_fp && uid->attrib_data!=NULL) dump_attribs(uid,pk,sk); if((uid->is_revoked || uid->is_expired) || ((opt.list_options&LIST_SHOW_UID_VALIDITY) && pk)) { const char *validity; int indent; validity=uid_trust_string_fixed(pk,uid); indent=(keystrlen()+9)-atoi(uid_trust_string_fixed(NULL,NULL)); if(indent<0 || indent>40) indent=0; printf("uid%*s%s ",indent,"",validity); } else printf("uid%*s", (int)keystrlen()+10,""); print_utf8_string( stdout, uid->name, uid->len ); putchar('\n'); if((opt.list_options&LIST_SHOW_PHOTOS) && uid->attribs!=NULL) show_photos(uid->attribs,uid->numattribs,pk,sk,uid); } else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { PKT_public_key *pk2 = node->pkt->pkt.public_key; if((pk2->is_revoked || pk2->has_expired) && !(opt.list_options&LIST_SHOW_UNUSABLE_SUBKEYS)) { skip_sigs=1; continue; } else skip_sigs=0; printf("sub %4u%c/%s %s", nbits_from_pk( pk2 ),pubkey_letter( pk2->pubkey_algo ), keystr_from_pk(pk2),datestr_from_pk(pk2)); if( pk2->is_revoked ) { printf(" ["); printf(_("revoked: %s"),revokestr_from_pk(pk2)); printf("]"); } else if( pk2->has_expired ) { printf(" ["); printf(_("expired: %s"),expirestr_from_pk(pk2)); printf("]"); } else if( pk2->expiredate ) { printf(" ["); printf(_("expires: %s"),expirestr_from_pk(pk2)); printf("]"); } putchar('\n'); if( fpr > 1 ) print_fingerprint( pk2, NULL, 0 ); if( opt.with_key_data ) print_key_data( pk2 ); } else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *sk2 = node->pkt->pkt.secret_key; printf("ssb%c %4u%c/%s %s", (sk2->protect.s2k.mode==1001)?'#': (sk2->protect.s2k.mode==1002)?'>':' ', nbits_from_sk( sk2 ),pubkey_letter( sk2->pubkey_algo ), keystr_from_sk(sk2),datestr_from_sk( sk2 ) ); if( sk2->expiredate ) { printf(" ["); printf(_("expires: %s"),expirestr_from_sk(sk2)); printf("]"); } putchar('\n'); if( fpr > 1 ) { print_fingerprint( NULL, sk2, 0 ); print_card_serialno (sk2); } } else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE && !skip_sigs ) { PKT_signature *sig = node->pkt->pkt.signature; int sigrc; char *sigstr; if( stats ) { /*fflush(stdout);*/ rc = check_key_signature( keyblock, node, NULL ); switch( rc ) { case 0: sigrc = '!'; break; case G10ERR_BAD_SIGN: stats->inv_sigs++; sigrc = '-'; break; case G10ERR_NO_PUBKEY: case G10ERR_UNU_PUBKEY: stats->no_key++; continue; default: stats->oth_err++; sigrc = '%'; break; } /* TODO: Make sure a cached sig record here still has the pk that issued it. See also keyedit.c:print_and_check_one_sig */ } else { rc = 0; sigrc = ' '; } if( sig->sig_class == 0x20 || sig->sig_class == 0x28 || sig->sig_class == 0x30 ) sigstr = "rev"; else if( (sig->sig_class&~3) == 0x10 ) sigstr = "sig"; else if( sig->sig_class == 0x18 ) sigstr = "sig"; else if( sig->sig_class == 0x1F ) sigstr = "sig"; else { printf("sig " "[unexpected signature class 0x%02x]\n",sig->sig_class ); continue; } fputs( sigstr, stdout ); printf("%c%c %c%c%c%c%c%c %s %s", sigrc,(sig->sig_class-0x10>0 && sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ', sig->flags.exportable?' ':'L', sig->flags.revocable?' ':'R', sig->flags.policy_url?'P':' ', sig->flags.notation?'N':' ', sig->flags.expired?'X':' ', (sig->trust_depth>9)?'T': (sig->trust_depth>0)?'0'+sig->trust_depth:' ', keystr(sig->keyid),datestr_from_sig(sig)); if(opt.list_options&LIST_SHOW_SIG_EXPIRE) printf(" %s", expirestr_from_sig(sig)); printf(" "); if( sigrc == '%' ) printf("[%s] ", g10_errstr(rc) ); else if( sigrc == '?' ) ; else if ( !opt.fast_list_mode ) { size_t n; char *p = get_user_id( sig->keyid, &n ); print_utf8_string( stdout, p, n ); xfree(p); } putchar('\n'); if(sig->flags.policy_url && (opt.list_options&LIST_SHOW_POLICY_URLS)) show_policy_url(sig,3,0); if(sig->flags.notation && (opt.list_options&LIST_SHOW_NOTATIONS)) show_notation(sig,3,0, ((opt.list_options&LIST_SHOW_STD_NOTATIONS)?1:0)+ ((opt.list_options&LIST_SHOW_USER_NOTATIONS)?2:0)); if(sig->flags.pref_ks && (opt.list_options&LIST_SHOW_KEYSERVER_URLS)) show_keyserver_url(sig,3,0); /* fixme: check or list other sigs here */ } } putchar('\n'); } void print_revokers(PKT_public_key *pk) { /* print the revoker record */ if( !pk->revkey && pk->numrevkeys ) BUG(); else { int i,j; for (i=0; i < pk->numrevkeys; i++) { byte *p; printf ("rvk:::%d::::::", pk->revkey[i].algid); p = pk->revkey[i].fpr; for (j=0; j < 20; j++, p++ ) printf ("%02X", *p); printf (":%02x%s:\n", pk->revkey[i].class, (pk->revkey[i].class&0x40)?"s":""); } } } static void list_keyblock_colon( KBNODE keyblock, int secret, int fpr ) { int rc = 0; KBNODE kbctx; KBNODE node; PKT_public_key *pk; PKT_secret_key *sk; u32 keyid[2]; int any=0; int trustletter = 0; int ulti_hack = 0; int i; /* get the keyid from the keyblock */ node = find_kbnode( keyblock, secret? PKT_SECRET_KEY : PKT_PUBLIC_KEY ); if( !node ) { log_error("Oops; key lost!\n"); dump_kbnode( keyblock ); return; } if( secret ) { pk = NULL; sk = node->pkt->pkt.secret_key; keyid_from_sk( sk, keyid ); printf("sec::%u:%d:%08lX%08lX:%s:%s:::", nbits_from_sk( sk ), sk->pubkey_algo, (ulong)keyid[0],(ulong)keyid[1], colon_datestr_from_sk( sk ), colon_strtime (sk->expiredate) /* fixme: add LID here */ ); } else { pk = node->pkt->pkt.public_key; sk = NULL; keyid_from_pk( pk, keyid ); fputs( "pub:", stdout ); if ( !pk->is_valid ) putchar ('i'); else if ( pk->is_revoked ) putchar ('r'); else if ( pk->has_expired ) putchar ('e'); else if ( opt.fast_list_mode || opt.no_expensive_trust_checks ) ; else { trustletter = get_validity_info ( pk, NULL ); if( trustletter == 'u' ) ulti_hack = 1; putchar(trustletter); } printf(":%u:%d:%08lX%08lX:%s:%s::", nbits_from_pk( pk ), pk->pubkey_algo, (ulong)keyid[0],(ulong)keyid[1], colon_datestr_from_pk( pk ), colon_strtime (pk->expiredate) ); if( !opt.fast_list_mode && !opt.no_expensive_trust_checks ) putchar( get_ownertrust_info(pk) ); putchar(':'); } if (opt.fixed_list_mode) { /* do not merge the first uid with the primary key */ putchar(':'); putchar(':'); print_capabilities (pk, sk, keyblock); if (secret) { putchar(':'); /* End of field 13. */ putchar(':'); /* End of field 14. */ if (sk->protect.s2k.mode == 1001) putchar('#'); /* Key is just a stub. */ else if (sk->protect.s2k.mode == 1002) { /* Key is stored on an external token (card) or handled by the gpg-agent. Print the serial number of that token here. */ for (i=0; i < sk->protect.ivlen; i++) printf ("%02X", sk->protect.iv[i]); } putchar(':'); /* End of field 15. */ } putchar('\n'); if(pk) print_revokers(pk); if( fpr ) print_fingerprint( pk, sk, 0 ); if( opt.with_key_data ) print_key_data( pk ); any = 1; } for( kbctx=NULL; (node=walk_kbnode( keyblock, &kbctx, 0)) ; ) { if( node->pkt->pkttype == PKT_USER_ID && !opt.fast_list_mode ) { PKT_user_id *uid=node->pkt->pkt.user_id; if(attrib_fp && node->pkt->pkt.user_id->attrib_data!=NULL) dump_attribs(node->pkt->pkt.user_id,pk,sk); /* * Fixme: We need a is_valid flag here too */ if( any ) { char *str=uid->attrib_data?"uat":"uid"; /* If we're listing a secret key, leave out the validity values for now. This is handled better in 1.9. */ if ( sk ) printf("%s:::::",str); else if ( uid->is_revoked ) printf("%s:r::::",str); else if ( uid->is_expired ) printf("%s:e::::",str); else if ( opt.no_expensive_trust_checks ) printf("%s:::::",str); else { int uid_validity; if( pk && !ulti_hack ) uid_validity=get_validity_info (pk, uid); else uid_validity = 'u'; printf("%s:%c::::",str,uid_validity); } printf("%s:",colon_strtime(uid->created)); printf("%s:",colon_strtime(uid->expiredate)); namehash_from_uid(uid); for(i=0; i < 20; i++ ) printf("%02X",uid->namehash[i]); printf("::"); } if(uid->attrib_data) printf("%u %lu",uid->numattribs,uid->attrib_len); else print_string(stdout,uid->name,uid->len, ':' ); putchar(':'); if (any) putchar('\n'); else { putchar(':'); print_capabilities (pk, sk, keyblock); putchar('\n'); if( fpr ) print_fingerprint( pk, sk, 0 ); if( opt.with_key_data ) print_key_data( pk ); any = 1; } } else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { u32 keyid2[2]; PKT_public_key *pk2 = node->pkt->pkt.public_key; if( !any ) { putchar(':'); putchar(':'); print_capabilities (pk, sk, keyblock); putchar('\n'); if( fpr ) print_fingerprint( pk, sk, 0 ); /* of the main key */ any = 1; } keyid_from_pk( pk2, keyid2 ); fputs ("sub:", stdout ); if ( !pk2->is_valid ) putchar ('i'); else if ( pk2->is_revoked ) putchar ('r'); else if ( pk2->has_expired ) putchar ('e'); else if ( opt.fast_list_mode || opt.no_expensive_trust_checks ) ; else { /* trustletter should always be defined here */ if(trustletter) printf("%c", trustletter ); } printf(":%u:%d:%08lX%08lX:%s:%s:::::", nbits_from_pk( pk2 ), pk2->pubkey_algo, (ulong)keyid2[0],(ulong)keyid2[1], colon_datestr_from_pk( pk2 ), colon_strtime (pk2->expiredate) /* fixme: add LID and ownertrust here */ ); print_capabilities (pk2, NULL, NULL); putchar('\n'); if( fpr > 1 ) print_fingerprint( pk2, NULL, 0 ); if( opt.with_key_data ) print_key_data( pk2 ); } else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) { u32 keyid2[2]; PKT_secret_key *sk2 = node->pkt->pkt.secret_key; if( !any ) { putchar(':'); putchar(':'); print_capabilities (pk, sk, keyblock); putchar('\n'); if( fpr ) print_fingerprint( pk, sk, 0 ); /* of the main key */ any = 1; } keyid_from_sk( sk2, keyid2 ); printf("ssb::%u:%d:%08lX%08lX:%s:%s:::::", nbits_from_sk( sk2 ), sk2->pubkey_algo, (ulong)keyid2[0],(ulong)keyid2[1], colon_datestr_from_sk( sk2 ), colon_strtime (sk2->expiredate) /* fixme: add LID */ ); print_capabilities (NULL, sk2, NULL); if (opt.fixed_list_mode) { /* We print the serial number only in fixed list mode for the primary key so, so avoid questions we print it for subkeys also only in this mode. There is no technical reason, though. */ putchar(':'); /* End of field 13. */ putchar(':'); /* End of field 14. */ if (sk2->protect.s2k.mode == 1001) putchar('#'); /* Key is just a stub. */ else if (sk2->protect.s2k.mode == 1002) { /* Key is stored on an external token (card) or handled by the gpg-agent. Print the serial number of that token here. */ for (i=0; i < sk2->protect.ivlen; i++) printf ("%02X", sk2->protect.iv[i]); } putchar(':'); /* End of field 15. */ } putchar ('\n'); if( fpr > 1 ) print_fingerprint( NULL, sk2, 0 ); } else if( opt.list_sigs && node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; int sigrc,fprokay=0; char *sigstr; size_t fplen; byte fparray[MAX_FINGERPRINT_LEN]; if( !any ) { /* no user id, (maybe a revocation follows)*/ if( sig->sig_class == 0x20 ) fputs("[revoked]:", stdout); else if( sig->sig_class == 0x18 ) fputs("[key binding]:", stdout); else if( sig->sig_class == 0x28 ) fputs("[subkey revoked]:", stdout); else putchar (':'); putchar(':'); print_capabilities (pk, sk, keyblock); putchar('\n'); if( fpr ) print_fingerprint( pk, sk, 0 ); any=1; } if( sig->sig_class == 0x20 || sig->sig_class == 0x28 || sig->sig_class == 0x30 ) sigstr = "rev"; else if( (sig->sig_class&~3) == 0x10 ) sigstr = "sig"; else if( sig->sig_class == 0x18 ) sigstr = "sig"; else if( sig->sig_class == 0x1F ) sigstr = "sig"; else { printf ("sig::::::::::%02x%c:\n", sig->sig_class, sig->flags.exportable?'x':'l'); continue; } if( opt.check_sigs ) { PKT_public_key *signer_pk=NULL; fflush(stdout); if(opt.no_sig_cache) signer_pk=xmalloc_clear(sizeof(PKT_public_key)); rc = check_key_signature2( keyblock, node, NULL, signer_pk, NULL, NULL, NULL ); switch( rc ) { case 0: sigrc = '!'; break; case G10ERR_BAD_SIGN: sigrc = '-'; break; case G10ERR_NO_PUBKEY: case G10ERR_UNU_PUBKEY: sigrc = '?'; break; default: sigrc = '%'; break; } if(opt.no_sig_cache) { if(rc==0) { fingerprint_from_pk (signer_pk, fparray, &fplen); fprokay=1; } free_public_key(signer_pk); } } else { rc = 0; sigrc = ' '; } fputs( sigstr, stdout ); putchar(':'); if( sigrc != ' ' ) putchar(sigrc); printf("::%d:%08lX%08lX:%s:%s:", sig->pubkey_algo, (ulong)sig->keyid[0], (ulong)sig->keyid[1], colon_datestr_from_sig(sig), colon_expirestr_from_sig(sig)); if(sig->trust_depth || sig->trust_value) printf("%d %d",sig->trust_depth,sig->trust_value); printf(":"); if(sig->trust_regexp) print_string(stdout,sig->trust_regexp, strlen(sig->trust_regexp),':'); printf(":"); if( sigrc == '%' ) printf("[%s] ", g10_errstr(rc) ); else if( sigrc == '?' ) ; else if ( !opt.fast_list_mode ) { size_t n; char *p = get_user_id( sig->keyid, &n ); print_string( stdout, p, n, ':' ); xfree(p); } printf(":%02x%c::", sig->sig_class,sig->flags.exportable?'x':'l'); if(opt.no_sig_cache && opt.check_sigs && fprokay) { for (i=0; i < fplen ; i++ ) printf ("%02X", fparray[i] ); } printf(":::%d:\n", sig->digest_algo); if(opt.show_subpackets) print_subpackets_colon(sig); /* fixme: check or list other sigs here */ } } if( !any ) {/* oops, no user id */ putchar(':'); putchar(':'); print_capabilities (pk, sk, keyblock); putchar('\n'); } } /* * Reorder the keyblock so that the primary user ID (and not attribute * packet) comes first. Fixme: Replace this by a generic sort * function. */ static void do_reorder_keyblock (KBNODE keyblock,int attr) { KBNODE primary = NULL, primary0 = NULL, primary2 = NULL; KBNODE last, node; for (node=keyblock; node; primary0=node, node = node->next) { if( node->pkt->pkttype == PKT_USER_ID && ((attr && node->pkt->pkt.user_id->attrib_data) || (!attr && !node->pkt->pkt.user_id->attrib_data)) && node->pkt->pkt.user_id->is_primary ) { primary = primary2 = node; for (node=node->next; node; primary2=node, node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID || node->pkt->pkttype == PKT_PUBLIC_SUBKEY || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { break; } } break; } } if ( !primary ) return; /* no primary key flag found (should not happen) */ for (last=NULL, node=keyblock; node; last = node, node = node->next) { if( node->pkt->pkttype == PKT_USER_ID ) break; } assert (node); assert (last); /* the user ID is never the first packet */ assert (primary0); /* ditto (this is the node before primary) */ if ( node == primary ) return; /* already the first one */ last->next = primary; primary0->next = primary2->next; primary2->next = node; } void reorder_keyblock (KBNODE keyblock) { do_reorder_keyblock(keyblock,1); do_reorder_keyblock(keyblock,0); } void list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque ) { reorder_keyblock (keyblock); if (opt.with_colons) list_keyblock_colon (keyblock, secret, fpr ); else list_keyblock_print (keyblock, secret, fpr, opaque ); } /* * standard function to print the finperprint. * mode 0: as used in key listings, opt.with_colons is honored * 1: print using log_info () * 2: direct use of tty * 3: direct use of tty but only primary key. * modes 1 and 2 will try and print both subkey and primary key fingerprints */ void print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode ) { byte array[MAX_FINGERPRINT_LEN], *p; size_t i, n; FILE *fp; const char *text; int primary=0; if(sk) { if(sk->main_keyid[0]==sk->keyid[0] && sk->main_keyid[1]==sk->keyid[1]) primary=1; } else { if(pk->main_keyid[0]==pk->keyid[0] && pk->main_keyid[1]==pk->keyid[1]) primary=1; } /* Just to be safe */ if(mode&0x80 && !primary) { log_error("primary key is not really primary!\n"); return; } mode&=~0x80; if(!primary && (mode==1 || mode==2)) { if(sk) { PKT_secret_key *primary_sk=xmalloc_clear(sizeof(*primary_sk)); get_seckey(primary_sk,sk->main_keyid); print_fingerprint(NULL,primary_sk,mode|0x80); free_secret_key(primary_sk); } else { PKT_public_key *primary_pk=xmalloc_clear(sizeof(*primary_pk)); get_pubkey(primary_pk,pk->main_keyid); print_fingerprint(primary_pk,NULL,mode|0x80); free_public_key(primary_pk); } } if (mode == 1) { fp = log_stream (); if(primary) text = _("Primary key fingerprint:"); else text = _(" Subkey fingerprint:"); } else if (mode == 2) { fp = NULL; /* use tty */ if(primary) /* TRANSLATORS: this should fit into 24 bytes to that the * fingerprint data is properly aligned with the user ID */ text = _(" Primary key fingerprint:"); else text = _(" Subkey fingerprint:"); } else if (mode == 3) { fp = NULL; /* use tty */ text = _(" Key fingerprint ="); } else { fp = stdout; text = _(" Key fingerprint ="); } if (sk) fingerprint_from_sk (sk, array, &n); else fingerprint_from_pk (pk, array, &n); p = array; if (opt.with_colons && !mode) { fprintf (fp, "fpr:::::::::"); for (i=0; i < n ; i++, p++ ) fprintf (fp, "%02X", *p ); putc(':', fp); } else { if (fp) fputs (text, fp); else tty_printf ("%s", text); if (n == 20) { for (i=0; i < n ; i++, i++, p += 2 ) { if (fp) { if (i == 10 ) putc(' ', fp); fprintf (fp, " %02X%02X", *p, p[1] ); } else { if (i == 10 ) tty_printf (" "); tty_printf (" %02X%02X", *p, p[1]); } } } else { for (i=0; i < n ; i++, p++ ) { if (fp) { if (i && !(i%8) ) putc (' ', fp); fprintf (fp, " %02X", *p ); } else { if (i && !(i%8) ) tty_printf (" "); tty_printf (" %02X", *p ); } } } } if (fp) putc ('\n', fp); else tty_printf ("\n"); } /* Print the serial number of an OpenPGP card if available. */ static void print_card_serialno (PKT_secret_key *sk) { int i; if (!sk) return; if (!sk->is_protected || sk->protect.s2k.mode != 1002) return; /* Not a card. */ if (opt.with_colons) return; /* Handled elsewhere. */ fputs (_(" Card serial no. ="), stdout); putchar (' '); if (sk->protect.ivlen == 16 && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01", 6) ) { /* This is an OpenPGP card. Just print the relevant part. */ for (i=8; i < 14; i++) { if (i == 10) putchar (' '); printf ("%02X", sk->protect.iv[i]); } } else { /* Something is wrong: Print all. */ for (i=0; i < sk->protect.ivlen; i++) printf ("%02X", sk->protect.iv[i]); } putchar ('\n'); } void set_attrib_fd(int fd) { static int last_fd=-1; if ( fd != -1 && last_fd == fd ) return; if ( attrib_fp && attrib_fp != stdout && attrib_fp != stderr ) fclose (attrib_fp); attrib_fp = NULL; if ( fd == -1 ) return; if( fd == 1 ) attrib_fp = stdout; else if( fd == 2 ) attrib_fp = stderr; else attrib_fp = fdopen( fd, "wb" ); if( !attrib_fp ) { log_fatal("can't open fd %d for attribute output: %s\n", fd, strerror(errno)); } last_fd = fd; } gnupg-1.4.20/g10/photoid.c0000644000175000017500000002134612635262326012055 00000000000000/* photoid.c - photo ID handling code * Copyright (C) 2001, 2002, 2005, 2006, 2008, 2011 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 3 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, see . */ #include #include #include #include #ifdef _WIN32 # include # ifndef VER_PLATFORM_WIN32_WINDOWS # define VER_PLATFORM_WIN32_WINDOWS 1 # endif #endif #include "packet.h" #include "status.h" #include "exec.h" #include "keydb.h" #include "util.h" #include "i18n.h" #include "iobuf.h" #include "memory.h" #include "options.h" #include "main.h" #include "photoid.h" #include "ttyio.h" #include "trustdb.h" /* Generate a new photo id packet, or return NULL if canceled */ PKT_user_id * generate_photo_id(PKT_public_key *pk,const char *photo_name) { PKT_user_id *uid; int error=1,i; unsigned int len; char *filename; byte *photo=NULL; byte header[16]; IOBUF file; int overflow; header[0]=0x10; /* little side of photo header length */ header[1]=0; /* big side of photo header length */ header[2]=1; /* 1 == version of photo header */ header[3]=1; /* 1 == JPEG */ for(i=4;i<16;i++) /* The reserved bytes */ header[i]=0; #define EXTRA_UID_NAME_SPACE 71 uid=xmalloc_clear(sizeof(*uid)+71); if(photo_name && *photo_name) filename=make_filename(photo_name,(void *)NULL); else { tty_printf(_("\nPick an image to use for your photo ID." " The image must be a JPEG file.\n" "Remember that the image is stored within your public key." " If you use a\n" "very large picture, your key will become very large" " as well!\n" "Keeping the image close to 240x288 is a good size" " to use.\n")); filename=NULL; } while(photo==NULL) { if(filename==NULL) { char *tempname; tty_printf("\n"); tty_enable_completion(NULL); tempname=cpr_get("photoid.jpeg.add", _("Enter JPEG filename for photo ID: ")); tty_disable_completion(); filename=make_filename(tempname,(void *)NULL); xfree(tempname); if(strlen(filename)==0) goto scram; } file=iobuf_open(filename); if (file && is_secured_file (iobuf_get_fd (file))) { iobuf_close (file); file = NULL; errno = EPERM; } if(!file) { log_error(_("unable to open JPEG file `%s': %s\n"), filename,strerror(errno)); xfree(filename); filename=NULL; continue; } len=iobuf_get_filelength(file, &overflow); if(len>6144 || overflow) { tty_printf( _("This JPEG is really large (%d bytes) !\n"),len); if(!cpr_get_answer_is_yes("photoid.jpeg.size", _("Are you sure you want to use it? (y/N) "))) { iobuf_close(file); xfree(filename); filename=NULL; continue; } } photo=xmalloc(len); iobuf_read(file,photo,len); iobuf_close(file); /* Is it a JPEG? */ if(photo[0]!=0xFF || photo[1]!=0xD8) { log_error(_("`%s' is not a JPEG file\n"),filename); xfree(photo); photo=NULL; xfree(filename); filename=NULL; continue; } /* Build the packet */ build_attribute_subpkt(uid,1,photo,len,header,16); parse_attribute_subpkts(uid); make_attribute_uidname(uid, EXTRA_UID_NAME_SPACE); /* Showing the photo is not safe when noninteractive since the "user" may not be able to dismiss a viewer window! */ if(opt.command_fd==-1) { show_photos(uid->attribs,uid->numattribs,pk,NULL,uid); switch(cpr_get_answer_yes_no_quit("photoid.jpeg.okay", _("Is this photo correct (y/N/q)? "))) { case -1: goto scram; case 0: free_attributes(uid); xfree(photo); photo=NULL; xfree(filename); filename=NULL; continue; } } } error=0; uid->ref=1; scram: xfree(filename); xfree(photo); if(error) { free_attributes(uid); xfree(uid); return NULL; } return uid; } /* Returns 0 for error, 1 for valid */ int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len) { u16 headerlen; if(attr->len<3) return 0; /* For historical reasons (i.e. "oops!"), the header length is little endian. */ headerlen=(attr->data[1]<<8) | attr->data[0]; if(headerlen>attr->len) return 0; if(type && attr->len>=4) { if(attr->data[2]==1) /* header version 1 */ *type=attr->data[3]; else *type=0; } *len=attr->len-headerlen; if(*len==0) return 0; return 1; } /* style==0 for extension, 1 for name, 2 for MIME type. Remember that the "name" style string could be used in a user ID name field, so make sure it is not too big (see parse-packet.c:parse_attribute). Extensions should be 3 characters long for the best cross-platform compatibility. */ char * image_type_to_string(byte type,int style) { char *string; switch(type) { case 1: /* jpeg */ if(style==0) string="jpg"; else if(style==1) string="jpeg"; else string="image/jpeg"; break; default: if(style==0) string="bin"; else if(style==1) string="unknown"; else string="image/x-unknown"; break; } return string; } #if !defined(FIXED_PHOTO_VIEWER) && !defined(DISABLE_PHOTO_VIEWER) static const char * get_default_photo_command(void) { #if defined(_WIN32) OSVERSIONINFO osvi; memset(&osvi,0,sizeof(osvi)); osvi.dwOSVersionInfoSize=sizeof(osvi); GetVersionEx(&osvi); if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS) return "start /w %i"; else return "cmd /c start /w %i"; #elif defined(__APPLE__) /* OS X. This really needs more than just __APPLE__. */ return "open %I"; #elif defined(__riscos__) return "Filer_Run %I"; #else if(path_access("xloadimage",X_OK)==0) return "xloadimage -fork -quiet -title 'KeyID 0x%k' stdin"; else if(path_access("eog",X_OK)==0) return "eog %i"; else if(path_access("display",X_OK)==0) return "display -title 'KeyID 0x%k' %i"; else return ""; #endif } #endif void show_photos(const struct user_attribute *attrs, int count,PKT_public_key *pk,PKT_secret_key *sk, PKT_user_id *uid) { #ifndef DISABLE_PHOTO_VIEWER int i; struct expando_args args; u32 len; u32 kid[2]={0,0}; memset(&args,0,sizeof(args)); args.pk=pk; args.sk=sk; args.validity_info=get_validity_info(pk,uid); args.validity_string=get_validity_string(pk,uid); if(pk) keyid_from_pk(pk,kid); else if(sk) keyid_from_sk(sk,kid); for(i=0;itempfile_in, image_type_to_string(args.imagetype,2)); #endif xfree(name); fwrite(&attrs[i].data[offset],attrs[i].len-offset,1,spawn->tochild); if(exec_read(spawn)!=0) { exec_finish(spawn); goto fail; } if(exec_finish(spawn)!=0) goto fail; } return; fail: log_error(_("unable to display photo ID!\n")); #endif } gnupg-1.4.20/g10/keyring.h0000644000175000017500000000324412635262326012061 00000000000000/* keyring.h - Keyring operations * Copyright (C) 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef GPG_KEYRING_H #define GPG_KEYRING_H 1 #include "global.h" typedef struct keyring_handle *KEYRING_HANDLE; int keyring_register_filename (const char *fname, int secret, void **ptr); int keyring_is_writable (void *token); KEYRING_HANDLE keyring_new (void *token, int secret); void keyring_release (KEYRING_HANDLE hd); const char *keyring_get_resource_name (KEYRING_HANDLE hd); int keyring_lock (KEYRING_HANDLE hd, int yes); int keyring_get_keyblock (KEYRING_HANDLE hd, KBNODE *ret_kb); int keyring_update_keyblock (KEYRING_HANDLE hd, KBNODE kb); int keyring_insert_keyblock (KEYRING_HANDLE hd, KBNODE kb); int keyring_locate_writable (KEYRING_HANDLE hd); int keyring_delete_keyblock (KEYRING_HANDLE hd); int keyring_search_reset (KEYRING_HANDLE hd); int keyring_search (KEYRING_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc, size_t *descindex); int keyring_rebuild_cache (void *token,int noisy); #endif /*GPG_KEYRING_H*/ gnupg-1.4.20/g10/helptext.c0000644000175000017500000002165612635262326012250 00000000000000/* helptext.c - English help texts * Copyright (C) 1998, 1999, 2000, 2001, 2002, * 2004 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 3 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, see . */ #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. * * Mini glossary: * * "user ID", "trustdb", "NOTE" and "WARNING". */ static struct helptexts { const char *key; const char *help; } helptexts[] = { /* begin of list */ { "edit_ownertrust.value", 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." )}, { "edit_ownertrust.set_ultimate.okay", N_( "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" )}, { "untrusted_key.override", N_( "If you want to use this untrusted key anyway, answer \"yes\"." )}, { "pklist.user_id.enter", N_( "Enter the user ID of the addressee to whom you want to send the message." )}, { "keygen.algo", N_( "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." )}, { "keygen.algo.rsa_se", N_( "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." )}, { "keygen.size", N_( "Enter the size of the key" )}, { "keygen.size.huge.okay", N_( "Answer \"yes\" or \"no\"" )}, { "keygen.size.large.okay", N_( "Answer \"yes\" or \"no\"" )}, { "keygen.valid", N_( "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." )}, { "keygen.valid.okay", N_( "Answer \"yes\" or \"no\"" )}, { "keygen.name", N_( "Enter the name of the key holder" )}, { "keygen.email", N_( "please enter an optional but highly suggested email address" )}, { "keygen.comment", N_( "Please enter an optional comment" )}, { "keygen.userid.cmd", N_( "" "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 quit the key generation." )}, { "keygen.sub.okay", N_( "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." )}, { "sign_uid.okay", N_( "Answer \"yes\" or \"no\"" )}, { "sign_uid.class", N_( "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n\n" "\"0\" means you make no particular claim as to how carefully you verified the\n" " key.\n\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful for\n" " a \"persona\" verification, where you sign the key of a pseudonymous user.\n\n" "\"2\" means you did casual verification of the key. For example, this could\n" " mean that you verified the key fingerprint and checked the user ID on the\n" " key against a photo ID.\n\n" "\"3\" means you did extensive verification of the key. For example, this could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with a\n" " photo ID (such as a passport) that the name of the key owner matches the\n" " name in the user ID on the key, and finally that you verified (by exchange\n" " of email) that the email address on the key belongs to the key owner.\n\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive\"\n" "mean to you when you sign other keys.\n\n" "If you don't know what the right answer is, answer \"0\"." )}, { "change_passwd.empty.okay", N_( "Answer \"yes\" or \"no\"" )}, { "keyedit.save.okay", N_( "Answer \"yes\" or \"no\"" )}, { "keyedit.cancel.okay", N_( "Answer \"yes\" or \"no\"" )}, { "keyedit.sign_all.okay", N_( "Answer \"yes\" if you want to sign ALL the user IDs" )}, { "keyedit.remove.uid.okay", N_( "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" )}, { "keyedit.remove.subkey.okay", N_( "Answer \"yes\" if it is okay to delete the subkey" )}, { "keyedit.delsig.valid", N_( "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." )}, { "keyedit.delsig.unknown", N_( "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." )}, { "keyedit.delsig.invalid", N_( "The signature is not valid. It does make sense to remove it from\n" "your keyring." )}, { "keyedit.delsig.selfsig", N_( "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." )}, { "keyedit.updpref.okay", N_( "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" )}, { "passphrase.enter", N_( "" "Please enter the passphrase; this is a secret sentence \n" )}, { "passphrase.repeat", N_( "Please repeat the last passphrase, so you are sure what you typed in." )}, { "detached_signature.filename", N_( "Give the name of the file to which the signature applies" )}, /* openfile.c (overwrite_filep) */ { "openfile.overwrite.okay", N_( "Answer \"yes\" if it is okay to overwrite the file" )}, /* openfile.c (ask_outfile_name) */ { "openfile.askoutname", N_( "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." )}, /* revoke.c (ask_revocation_reason) */ { "ask_revocation_reason.code", N_( "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" )}, /* revoke.c (ask_revocation_reason) */ { "ask_revocation_reason.text", N_( "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" )}, /* 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; 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"); } gnupg-1.4.20/g10/keydb.c0000644000175000017500000004546512635262326011515 00000000000000/* keydb.c - key database dispatcher * Copyright (C) 2001, 2002, 2003, 2004, 2005 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 3 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, see . */ #include #include #include #include #include #include #include #include #include #include "util.h" #include "options.h" #include "main.h" /*try_make_homedir ()*/ #include "packet.h" #include "keyring.h" #include "keydb.h" #include "i18n.h" static int active_handles; typedef enum { KEYDB_RESOURCE_TYPE_NONE = 0, KEYDB_RESOURCE_TYPE_KEYRING } KeydbResourceType; #define MAX_KEYDB_RESOURCES 40 struct resource_item { KeydbResourceType type; union { KEYRING_HANDLE kr; } u; void *token; int secret; }; static struct resource_item all_resources[MAX_KEYDB_RESOURCES]; static int used_resources; static void *primary_keyring=NULL; struct keydb_handle { int locked; int found; int current; int used; /* items in active */ struct resource_item active[MAX_KEYDB_RESOURCES]; }; static int lock_all (KEYDB_HANDLE hd); static void unlock_all (KEYDB_HANDLE hd); /* Handle the creation of a keyring if it does not yet exist. Take into acount that other processes might have the keyring already locked. This lock check does not work if the directory itself is not yet available. */ static int maybe_create_keyring (char *filename, int force) { dotlock_t lockhd = NULL; IOBUF iobuf; int rc; mode_t oldmask; char *last_slash_in_filename; /* A quick test whether the filename already exists. */ if (!access (filename, F_OK)) return 0; /* If we don't want to create a new file at all, there is no need to go any further - bail out right here. */ if (!force) return G10ERR_OPEN_FILE; /* First of all we try to create the home directory. Note, that we don't do any locking here because any sane application of gpg would create the home directory by itself and not rely on gpg's tricky auto-creation which is anyway only done for some home directory name patterns. */ last_slash_in_filename = strrchr (filename, DIRSEP_C); *last_slash_in_filename = 0; if (access(filename, F_OK)) { static int tried; if (!tried) { tried = 1; try_make_homedir (filename); } if (access (filename, F_OK)) { rc = G10ERR_OPEN_FILE; *last_slash_in_filename = DIRSEP_C; goto leave; } } *last_slash_in_filename = DIRSEP_C; /* To avoid races with other instances of gpg trying to create or update the keyring (it is removed during an update for a short time), we do the next stuff in a locked state. */ lockhd = dotlock_create (filename, 0); if (!lockhd) { /* A reason for this to fail is that the directory is not writable. However, this whole locking stuff does not make sense if this is the case. An empty non-writable directory with no keyring is not really useful at all. */ if (opt.verbose) log_info ("can't allocate lock for `%s'\n", filename ); if (!force) return G10ERR_OPEN_FILE; else return G10ERR_GENERAL; } if ( dotlock_take (lockhd, -1) ) { /* This is something bad. Probably a stale lockfile. */ log_info ("can't lock `%s'\n", filename ); rc = G10ERR_GENERAL; goto leave; } /* Now the real test while we are locked. */ if (!access(filename, F_OK)) { rc = 0; /* Okay, we may access the file now. */ goto leave; } /* The file does not yet exist, create it now. */ oldmask = umask (077); if (is_secured_filename (filename)) { iobuf = NULL; errno = EPERM; } else iobuf = iobuf_create (filename); umask (oldmask); if (!iobuf) { log_error ( _("error creating keyring `%s': %s\n"), filename, strerror(errno)); rc = G10ERR_OPEN_FILE; goto leave; } if (!opt.quiet) log_info (_("keyring `%s' created\n"), filename); iobuf_close (iobuf); /* Must invalidate that ugly cache */ iobuf_ioctl (NULL, 2, 0, filename); rc = 0; leave: if (lockhd) { dotlock_release (lockhd); dotlock_destroy (lockhd, 1); } return rc; } /* * Register a resource (which currently may only be a keyring file). * The first keyring which is added by this function is * created if it does not exist. * Note: this function may be called before secure memory is * available. * Flag 1 == force * Flag 2 == mark resource as primary * Flag 4 == This is a default resources * Flag 8 == Readonly */ int keydb_add_resource (const char *url, int flags, int secret) { static int any_secret, any_public; const char *resname = url; char *filename = NULL; int force=(flags&1); int read_only=!!(flags&8); int rc = 0; KeydbResourceType rt = KEYDB_RESOURCE_TYPE_NONE; void *token; if (read_only) force = 0; /* Do we have an URL? * gnupg-ring:filename := this is a plain keyring * filename := See what is is, but create as plain keyring. */ if (strlen (resname) > 11) { if (!strncmp( resname, "gnupg-ring:", 11) ) { rt = KEYDB_RESOURCE_TYPE_KEYRING; resname += 11; } #if !defined(HAVE_DRIVE_LETTERS) && !defined(__riscos__) else if (strchr (resname, ':')) { log_error ("invalid key resource URL `%s'\n", url ); rc = G10ERR_GENERAL; goto leave; } #endif /* !HAVE_DRIVE_LETTERS && !__riscos__ */ } if (*resname != DIRSEP_C ) { /* do tilde expansion etc */ if (strchr(resname, DIRSEP_C) ) filename = make_filename (resname, NULL); else filename = make_filename (opt.homedir, resname, NULL); } else filename = xstrdup (resname); if (!force && !read_only) force = secret? !any_secret : !any_public; /* see whether we can determine the filetype */ if (rt == KEYDB_RESOURCE_TYPE_NONE) { FILE *fp = fopen( filename, "rb" ); if (fp) { u32 magic; if (fread( &magic, 4, 1, fp) == 1 ) { if (magic == 0x13579ace || magic == 0xce9a5713) ; /* GDBM magic - no more support */ else rt = KEYDB_RESOURCE_TYPE_KEYRING; } else /* maybe empty: assume ring */ rt = KEYDB_RESOURCE_TYPE_KEYRING; fclose( fp ); } else /* no file yet: create ring */ rt = KEYDB_RESOURCE_TYPE_KEYRING; } switch (rt) { case KEYDB_RESOURCE_TYPE_NONE: log_error ("unknown type of key resource `%s'\n", url ); rc = G10ERR_GENERAL; goto leave; case KEYDB_RESOURCE_TYPE_KEYRING: rc = maybe_create_keyring (filename, force); if (rc) goto leave; if(keyring_register_filename (filename, secret, &token)) { if (used_resources >= MAX_KEYDB_RESOURCES) rc = G10ERR_RESOURCE_LIMIT; else { if(flags&2) primary_keyring=token; all_resources[used_resources].type = rt; all_resources[used_resources].u.kr = NULL; /* Not used here */ all_resources[used_resources].token = token; all_resources[used_resources].secret = secret; used_resources++; } } else { /* This keyring was already registered, so ignore it. However, we can still mark it as primary even if it was already registered. */ if(flags&2) primary_keyring=token; } break; default: log_error ("resource type of `%s' not supported\n", url); rc = G10ERR_GENERAL; goto leave; } /* fixme: check directory permissions and print a warning */ leave: if (rc) { /* Secret keyrings are not required in all cases. To avoid having gpg return failure we use log_info here if the rewsource is a secret one and marked as default resource. */ if ((flags&4) && secret) log_info (_("keyblock resource `%s': %s\n"), filename, g10_errstr(rc)); else log_error (_("keyblock resource `%s': %s\n"), filename, g10_errstr(rc)); } else if (secret) any_secret = 1; else any_public = 1; xfree (filename); return rc; } KEYDB_HANDLE keydb_new (int secret) { KEYDB_HANDLE hd; int i, j; hd = xmalloc_clear (sizeof *hd); hd->found = -1; assert (used_resources <= MAX_KEYDB_RESOURCES); for (i=j=0; i < used_resources; i++) { if (!all_resources[i].secret != !secret) continue; switch (all_resources[i].type) { case KEYDB_RESOURCE_TYPE_NONE: /* ignore */ break; case KEYDB_RESOURCE_TYPE_KEYRING: hd->active[j].type = all_resources[i].type; hd->active[j].token = all_resources[i].token; hd->active[j].secret = all_resources[i].secret; hd->active[j].u.kr = keyring_new (all_resources[i].token, secret); if (!hd->active[j].u.kr) { xfree (hd); return NULL; /* fixme: release all previously allocated handles*/ } j++; break; } } hd->used = j; active_handles++; return hd; } void keydb_release (KEYDB_HANDLE hd) { int i; if (!hd) return; assert (active_handles > 0); active_handles--; unlock_all (hd); for (i=0; i < hd->used; i++) { switch (hd->active[i].type) { case KEYDB_RESOURCE_TYPE_NONE: break; case KEYDB_RESOURCE_TYPE_KEYRING: keyring_release (hd->active[i].u.kr); break; } } xfree (hd); } /* * Return the name of the current resource. This is function first * looks for the last found found, then for the current search * position, and last returns the first available resource. The * returned string is only valid as long as the handle exists. This * function does only return NULL if no handle is specified, in all * other error cases an empty string is returned. */ const char * keydb_get_resource_name (KEYDB_HANDLE hd) { int idx; const char *s = NULL; if (!hd) return NULL; if ( hd->found >= 0 && hd->found < hd->used) idx = hd->found; else if ( hd->current >= 0 && hd->current < hd->used) idx = hd->current; else idx = 0; switch (hd->active[idx].type) { case KEYDB_RESOURCE_TYPE_NONE: s = NULL; break; case KEYDB_RESOURCE_TYPE_KEYRING: s = keyring_get_resource_name (hd->active[idx].u.kr); break; } return s? s: ""; } static int lock_all (KEYDB_HANDLE hd) { int i, rc = 0; for (i=0; !rc && i < hd->used; i++) { switch (hd->active[i].type) { case KEYDB_RESOURCE_TYPE_NONE: break; case KEYDB_RESOURCE_TYPE_KEYRING: rc = keyring_lock (hd->active[i].u.kr, 1); break; } } if (rc) { /* revert the already set locks */ for (i--; i >= 0; i--) { switch (hd->active[i].type) { case KEYDB_RESOURCE_TYPE_NONE: break; case KEYDB_RESOURCE_TYPE_KEYRING: keyring_lock (hd->active[i].u.kr, 0); break; } } } else hd->locked = 1; return rc; } static void unlock_all (KEYDB_HANDLE hd) { int i; if (!hd->locked) return; for (i=hd->used-1; i >= 0; i--) { switch (hd->active[i].type) { case KEYDB_RESOURCE_TYPE_NONE: break; case KEYDB_RESOURCE_TYPE_KEYRING: keyring_lock (hd->active[i].u.kr, 0); break; } } hd->locked = 0; } /* * Return the last found keyring. Caller must free it. * The returned keyblock has the kbode flag bit 0 set for the node with * the public key used to locate the keyblock or flag bit 1 set for * the user ID node. */ int keydb_get_keyblock (KEYDB_HANDLE hd, KBNODE *ret_kb) { int rc = 0; if (!hd) return G10ERR_INV_ARG; if ( hd->found < 0 || hd->found >= hd->used) return -1; /* nothing found */ switch (hd->active[hd->found].type) { case KEYDB_RESOURCE_TYPE_NONE: rc = G10ERR_GENERAL; /* oops */ break; case KEYDB_RESOURCE_TYPE_KEYRING: rc = keyring_get_keyblock (hd->active[hd->found].u.kr, ret_kb); break; } return rc; } /* * update the current keyblock with KB */ int keydb_update_keyblock (KEYDB_HANDLE hd, KBNODE kb) { int rc = 0; if (!hd) return G10ERR_INV_ARG; if ( hd->found < 0 || hd->found >= hd->used) return -1; /* nothing found */ if( opt.dry_run ) return 0; rc = lock_all (hd); if (rc) return rc; switch (hd->active[hd->found].type) { case KEYDB_RESOURCE_TYPE_NONE: rc = G10ERR_GENERAL; /* oops */ break; case KEYDB_RESOURCE_TYPE_KEYRING: rc = keyring_update_keyblock (hd->active[hd->found].u.kr, kb); break; } unlock_all (hd); return rc; } /* * Insert a new KB into one of the resources. */ int keydb_insert_keyblock (KEYDB_HANDLE hd, KBNODE kb) { int rc = -1; int idx; if (!hd) return G10ERR_INV_ARG; if( opt.dry_run ) return 0; if ( hd->found >= 0 && hd->found < hd->used) idx = hd->found; else if ( hd->current >= 0 && hd->current < hd->used) idx = hd->current; else return G10ERR_GENERAL; rc = lock_all (hd); if (rc) return rc; switch (hd->active[idx].type) { case KEYDB_RESOURCE_TYPE_NONE: rc = G10ERR_GENERAL; /* oops */ break; case KEYDB_RESOURCE_TYPE_KEYRING: rc = keyring_insert_keyblock (hd->active[idx].u.kr, kb); break; } unlock_all (hd); return rc; } /* * The current keyblock will be deleted. */ int keydb_delete_keyblock (KEYDB_HANDLE hd) { int rc = -1; if (!hd) return G10ERR_INV_ARG; if ( hd->found < 0 || hd->found >= hd->used) return -1; /* nothing found */ if( opt.dry_run ) return 0; rc = lock_all (hd); if (rc) return rc; switch (hd->active[hd->found].type) { case KEYDB_RESOURCE_TYPE_NONE: rc = G10ERR_GENERAL; /* oops */ break; case KEYDB_RESOURCE_TYPE_KEYRING: rc = keyring_delete_keyblock (hd->active[hd->found].u.kr); break; } unlock_all (hd); return rc; } /* * Locate the default writable key resource, so that the next * operation (which is only relevant for inserts) will be done on this * resource. */ int keydb_locate_writable (KEYDB_HANDLE hd, const char *reserved) { int rc; (void)reserved; if (!hd) return G10ERR_INV_ARG; rc = keydb_search_reset (hd); /* this does reset hd->current */ if (rc) return rc; /* If we have a primary set, try that one first */ if(primary_keyring) { for ( ; hd->current >= 0 && hd->current < hd->used; hd->current++) { if(hd->active[hd->current].token==primary_keyring) { if(keyring_is_writable (hd->active[hd->current].token)) return 0; else break; } } rc = keydb_search_reset (hd); /* this does reset hd->current */ if (rc) return rc; } for ( ; hd->current >= 0 && hd->current < hd->used; hd->current++) { switch (hd->active[hd->current].type) { case KEYDB_RESOURCE_TYPE_NONE: BUG(); break; case KEYDB_RESOURCE_TYPE_KEYRING: if (keyring_is_writable (hd->active[hd->current].token)) return 0; /* found (hd->current is set to it) */ break; } } return -1; } /* * Rebuild the caches of all key resources. */ void keydb_rebuild_caches (int noisy) { int i, rc; for (i=0; i < used_resources; i++) { if (all_resources[i].secret) continue; switch (all_resources[i].type) { case KEYDB_RESOURCE_TYPE_NONE: /* ignore */ break; case KEYDB_RESOURCE_TYPE_KEYRING: rc = keyring_rebuild_cache (all_resources[i].token,noisy); if (rc) log_error (_("failed to rebuild keyring cache: %s\n"), g10_errstr (rc)); break; } } } /* * Start the next search on this handle right at the beginning */ int keydb_search_reset (KEYDB_HANDLE hd) { int i, rc = 0; if (!hd) return G10ERR_INV_ARG; hd->current = 0; hd->found = -1; /* and reset all resources */ for (i=0; !rc && i < hd->used; i++) { switch (hd->active[i].type) { case KEYDB_RESOURCE_TYPE_NONE: break; case KEYDB_RESOURCE_TYPE_KEYRING: rc = keyring_search_reset (hd->active[i].u.kr); break; } } return rc; } /* * Search through all keydb resources, starting at the current position, * for a keyblock which contains one of the keys described in the DESC array. */ int keydb_search2 (KEYDB_HANDLE hd, KEYDB_SEARCH_DESC *desc, size_t ndesc, size_t *descindex) { int rc = -1; if (!hd) return G10ERR_INV_ARG; while (rc == -1 && hd->current >= 0 && hd->current < hd->used) { switch (hd->active[hd->current].type) { case KEYDB_RESOURCE_TYPE_NONE: BUG(); /* we should never see it here */ break; case KEYDB_RESOURCE_TYPE_KEYRING: rc = keyring_search (hd->active[hd->current].u.kr, desc, ndesc, descindex); break; } if (rc == -1) /* EOF -> switch to next resource */ hd->current++; else if (!rc) hd->found = hd->current; } return rc; } int keydb_search_first (KEYDB_HANDLE hd) { KEYDB_SEARCH_DESC desc; memset (&desc, 0, sizeof desc); desc.mode = KEYDB_SEARCH_MODE_FIRST; return keydb_search (hd, &desc, 1); } int keydb_search_next (KEYDB_HANDLE hd) { KEYDB_SEARCH_DESC desc; memset (&desc, 0, sizeof desc); desc.mode = KEYDB_SEARCH_MODE_NEXT; return keydb_search (hd, &desc, 1); } int keydb_search_kid (KEYDB_HANDLE hd, u32 *kid) { KEYDB_SEARCH_DESC desc; memset (&desc, 0, sizeof desc); desc.mode = KEYDB_SEARCH_MODE_LONG_KID; desc.u.kid[0] = kid[0]; desc.u.kid[1] = kid[1]; return keydb_search (hd, &desc, 1); } int keydb_search_fpr (KEYDB_HANDLE hd, const byte *fpr) { KEYDB_SEARCH_DESC desc; memset (&desc, 0, sizeof desc); desc.mode = KEYDB_SEARCH_MODE_FPR; memcpy (desc.u.fpr, fpr, MAX_FINGERPRINT_LEN); return keydb_search (hd, &desc, 1); } gnupg-1.4.20/g10/compress-bz2.c0000644000175000017500000001545312635262326012737 00000000000000/* compress.c - bzip2 compress filter * Copyright (C) 2003, 2004 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 3 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, see . */ #include #include #include /* Early versions of bzlib (1.0) require stdio.h */ #include #include "util.h" #include "memory.h" #include "packet.h" #include "filter.h" #include "main.h" #include "options.h" /* Note that the code in compress.c is nearly identical to the code here, so if you fix a bug here, look there to see if a matching bug needs to be fixed. I tried to have one set of functions that could do ZIP, ZLIB, and BZIP2, but it became dangerously unreadable with #ifdefs and if(algo) -dshaw */ static void init_compress( compress_filter_context_t *zfx, bz_stream *bzs ) { int rc; int level; if( opt.bz2_compress_level >= 1 && opt.bz2_compress_level <= 9 ) level = opt.bz2_compress_level; else if( opt.bz2_compress_level == -1 ) level = 6; /* no particular reason, but it seems reasonable */ else { log_error("invalid compression level; using default level\n"); level = 6; } if((rc=BZ2_bzCompressInit(bzs,level,0,0))!=BZ_OK) log_fatal("bz2lib problem: %d\n",rc); zfx->outbufsize = 8192; zfx->outbuf = xmalloc( zfx->outbufsize ); } static int do_compress(compress_filter_context_t *zfx, bz_stream *bzs, int flush, IOBUF a) { int zrc; unsigned n; do { bzs->next_out = zfx->outbuf; bzs->avail_out = zfx->outbufsize; if( DBG_FILTER ) log_debug("enter bzCompress: avail_in=%u, avail_out=%u, flush=%d\n", (unsigned)bzs->avail_in, (unsigned)bzs->avail_out, flush ); zrc = BZ2_bzCompress( bzs, flush ); if( zrc == BZ_STREAM_END && flush == BZ_FINISH ) ; else if( zrc != BZ_RUN_OK && zrc != BZ_FINISH_OK ) log_fatal("bz2lib deflate problem: rc=%d\n", zrc ); n = zfx->outbufsize - bzs->avail_out; if( DBG_FILTER ) log_debug("leave bzCompress:" " avail_in=%u, avail_out=%u, n=%u, zrc=%d\n", (unsigned)bzs->avail_in, (unsigned)bzs->avail_out, (unsigned)n, zrc ); if( iobuf_write( a, zfx->outbuf, n ) ) { log_debug("bzCompress: iobuf_write failed\n"); return G10ERR_WRITE_FILE; } } while( bzs->avail_in || (flush == BZ_FINISH && zrc != BZ_STREAM_END) ); return 0; } static void init_uncompress( compress_filter_context_t *zfx, bz_stream *bzs ) { int rc; if((rc=BZ2_bzDecompressInit(bzs,0,opt.bz2_decompress_lowmem))!=BZ_OK) log_fatal("bz2lib problem: %d\n",rc); zfx->inbufsize = 2048; zfx->inbuf = xmalloc( zfx->inbufsize ); bzs->avail_in = 0; } static int do_uncompress( compress_filter_context_t *zfx, bz_stream *bzs, IOBUF a, size_t *ret_len ) { int zrc; int rc=0; size_t n; int nread, count; int refill = !bzs->avail_in; int eofseen = 0; if( DBG_FILTER ) log_debug("begin bzDecompress: avail_in=%u, avail_out=%u, inbuf=%u\n", (unsigned)bzs->avail_in, (unsigned)bzs->avail_out, (unsigned)zfx->inbufsize ); do { if( bzs->avail_in < zfx->inbufsize && refill ) { n = bzs->avail_in; if( !n ) bzs->next_in = zfx->inbuf; count = zfx->inbufsize - n; nread = iobuf_read( a, zfx->inbuf + n, count ); if( nread == -1 ) { eofseen = 1; nread = 0; } n += nread; bzs->avail_in = n; } if (!eofseen) refill = 1; if( DBG_FILTER ) log_debug("enter bzDecompress: avail_in=%u, avail_out=%u\n", (unsigned)bzs->avail_in, (unsigned)bzs->avail_out); zrc=BZ2_bzDecompress(bzs); if( DBG_FILTER ) log_debug("leave bzDecompress: avail_in=%u, avail_out=%u, zrc=%d\n", (unsigned)bzs->avail_in, (unsigned)bzs->avail_out, zrc); if( zrc == BZ_STREAM_END ) rc = -1; /* eof */ else if( zrc != BZ_OK && zrc != BZ_PARAM_ERROR ) log_fatal("bz2lib inflate problem: rc=%d\n", zrc ); else if (zrc == BZ_OK && eofseen && !bzs->avail_in && bzs->avail_out > 0) { log_error ("unexpected EOF in bz2lib\n"); rc = G10ERR_READ_FILE; break; } } while( bzs->avail_out && zrc != BZ_STREAM_END && zrc != BZ_PARAM_ERROR ); /* I'm not completely happy with the two uses of BZ_PARAM_ERROR here. The corresponding zlib function is Z_BUF_ERROR, which covers a narrower scope than BZ_PARAM_ERROR. -dshaw */ *ret_len = zfx->outbufsize - bzs->avail_out; if( DBG_FILTER ) log_debug("do_uncompress: returning %u bytes\n", (unsigned)*ret_len ); return rc; } int compress_filter_bz2( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { size_t size = *ret_len; compress_filter_context_t *zfx = opaque; bz_stream *bzs = zfx->opaque; int rc=0; if( control == IOBUFCTRL_UNDERFLOW ) { if( !zfx->status ) { bzs = zfx->opaque = xmalloc_clear( sizeof *bzs ); init_uncompress( zfx, bzs ); zfx->status = 1; } bzs->next_out = buf; bzs->avail_out = size; zfx->outbufsize = size; /* needed only for calculation */ rc = do_uncompress( zfx, bzs, a, ret_len ); } else if( control == IOBUFCTRL_FLUSH ) { if( !zfx->status ) { PACKET pkt; PKT_compressed cd; if( zfx->algo != COMPRESS_ALGO_BZIP2 ) BUG(); memset( &cd, 0, sizeof cd ); cd.len = 0; cd.algorithm = zfx->algo; init_packet( &pkt ); pkt.pkttype = PKT_COMPRESSED; pkt.pkt.compressed = &cd; if( build_packet( a, &pkt )) log_bug("build_packet(PKT_COMPRESSED) failed\n"); bzs = zfx->opaque = xmalloc_clear( sizeof *bzs ); init_compress( zfx, bzs ); zfx->status = 2; } bzs->next_in = buf; bzs->avail_in = size; rc = do_compress( zfx, bzs, BZ_RUN, a ); } else if( control == IOBUFCTRL_FREE ) { if( zfx->status == 1 ) { BZ2_bzDecompressEnd(bzs); xfree(bzs); zfx->opaque = NULL; xfree(zfx->outbuf); zfx->outbuf = NULL; } else if( zfx->status == 2 ) { bzs->next_in = buf; bzs->avail_in = 0; do_compress( zfx, bzs, BZ_FINISH, a ); BZ2_bzCompressEnd(bzs); xfree(bzs); zfx->opaque = NULL; xfree(zfx->outbuf); zfx->outbuf = NULL; } if (zfx->release) zfx->release (zfx); } else if( control == IOBUFCTRL_DESC ) *(char**)buf = "compress_filter"; return rc; } gnupg-1.4.20/g10/trustdb.c0000644000175000017500000020647212635262326012103 00000000000000/* trustdb.c * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 2008, 2012 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 3 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, see . */ #include #include #include #include #include #ifndef DISABLE_REGEX #include #ifdef USE_INTERNAL_REGEX #include "_regex.h" #else #include #endif #endif /* !DISABLE_REGEX */ #include "errors.h" #include "iobuf.h" #include "keydb.h" #include "memory.h" #include "util.h" #include "options.h" #include "packet.h" #include "main.h" #include "i18n.h" #include "tdbio.h" #include "trustdb.h" /* * A structure to store key identification as well as some stuff needed * for validation */ struct key_item { struct key_item *next; unsigned int ownertrust,min_ownertrust; byte trust_depth; byte trust_value; char *trust_regexp; u32 kid[2]; }; typedef struct key_item **KeyHashTable; /* see new_key_hash_table() */ /* * Structure to keep track of keys, this is used as an array wherre * the item right after the last one has a keyblock set to NULL. * Maybe we can drop this thing and replace it by key_item */ struct key_array { KBNODE keyblock; }; /* control information for the trust DB */ static struct { int init; int level; char *dbname; int no_trustdb; /* Set if a trustdb file is not available. */ } trustdb_args; /* some globals */ static struct key_item *user_utk_list; /* temp. used to store --trusted-keys */ static struct key_item *utk_list; /* all ultimately trusted keys */ static int pending_check_trustdb; static int validate_keys (int interactive); /********************************************** ************* some helpers ******************* **********************************************/ static struct key_item * new_key_item (void) { struct key_item *k; k = xmalloc_clear (sizeof *k); return k; } static void release_key_items (struct key_item *k) { struct key_item *k2; for (; k; k = k2) { k2 = k->next; xfree (k->trust_regexp); xfree (k); } } /* * For fast keylook up we need a hash table. Each byte of a KeyIDs * should be distributed equally over the 256 possible values (except * for v3 keyIDs but we consider them as not important here). So we * can just use 10 bits to index a table of 1024 key items. * Possible optimization: Don not use key_items but other hash_table when the * duplicates lists gets too large. */ static KeyHashTable new_key_hash_table (void) { struct key_item **tbl; tbl = xmalloc_clear (1024 * sizeof *tbl); return tbl; } static void release_key_hash_table (KeyHashTable tbl) { int i; if (!tbl) return; for (i=0; i < 1024; i++) release_key_items (tbl[i]); xfree (tbl); } /* * Returns: True if the keyID is in the given hash table */ static int test_key_hash_table (KeyHashTable tbl, u32 *kid) { struct key_item *k; for (k = tbl[(kid[1] & 0x03ff)]; k; k = k->next) if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) return 1; return 0; } /* * Add a new key to the hash table. The key is identified by its key ID. */ static void add_key_hash_table (KeyHashTable tbl, u32 *kid) { struct key_item *k, *kk; for (k = tbl[(kid[1] & 0x03ff)]; k; k = k->next) if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) return; /* already in table */ kk = new_key_item (); kk->kid[0] = kid[0]; kk->kid[1] = kid[1]; kk->next = tbl[(kid[1] & 0x03ff)]; tbl[(kid[1] & 0x03ff)] = kk; } /* * Release a key_array */ static void release_key_array ( struct key_array *keys ) { struct key_array *k; if (keys) { for (k=keys; k->keyblock; k++) release_kbnode (k->keyblock); xfree (keys); } } /********************************************* ********** Initialization ***************** *********************************************/ /* * Used to register extra ultimately trusted keys - this has to be done * before initializing the validation module. * FIXME: Should be replaced by a function to add those keys to the trustdb. */ void register_trusted_keyid(u32 *keyid) { struct key_item *k; k = new_key_item (); k->kid[0] = keyid[0]; k->kid[1] = keyid[1]; k->next = user_utk_list; user_utk_list = k; } void register_trusted_key( const char *string ) { KEYDB_SEARCH_DESC desc; if (classify_user_id (string, &desc) != KEYDB_SEARCH_MODE_LONG_KID ) { log_error(_("`%s' is not a valid long keyID\n"), string ); return; } register_trusted_keyid(desc.u.kid); } /* * Helper to add a key to the global list of ultimately trusted keys. * Retruns: true = inserted, false = already in in list. */ static int add_utk (u32 *kid) { struct key_item *k; for (k = utk_list; k; k = k->next) { if (k->kid[0] == kid[0] && k->kid[1] == kid[1]) { return 0; } } k = new_key_item (); k->kid[0] = kid[0]; k->kid[1] = kid[1]; k->ownertrust = TRUST_ULTIMATE; k->next = utk_list; utk_list = k; if( opt.verbose > 1 ) log_info(_("key %s: accepted as trusted key\n"), keystr(kid)); return 1; } /**************** * Verify that all our secret keys are usable and put them into the utk_list. */ static void verify_own_keys(void) { TRUSTREC rec; ulong recnum; int rc; struct key_item *k; if (utk_list) return; /* scan the trustdb to find all ultimately trusted keys */ for (recnum=1; !tdbio_read_record (recnum, &rec, 0); recnum++ ) { if ( rec.rectype == RECTYPE_TRUST && (rec.r.trust.ownertrust & TRUST_MASK) == TRUST_ULTIMATE) { byte *fpr = rec.r.trust.fingerprint; int fprlen; u32 kid[2]; /* Problem: We do only use fingerprints in the trustdb but * we need the keyID here to indetify the key; we can only * use that ugly hack to distinguish between 16 and 20 * butes fpr - it does not work always so we better change * the whole validation code to only work with * fingerprints */ fprlen = (!fpr[16] && !fpr[17] && !fpr[18] && !fpr[19])? 16:20; keyid_from_fingerprint (fpr, fprlen, kid); if (!add_utk (kid)) log_info(_("key %s occurs more than once in the trustdb\n"), keystr(kid)); } } /* Put any --trusted-key keys into the trustdb */ for (k = user_utk_list; k; k = k->next) { if ( add_utk (k->kid) ) { /* not yet in trustDB as ultimately trusted */ PKT_public_key pk; memset (&pk, 0, sizeof pk); rc = get_pubkey (&pk, k->kid); if (rc) log_info(_("key %s: no public key for trusted key - skipped\n"), keystr(k->kid)); else { update_ownertrust (&pk, ((get_ownertrust (&pk) & ~TRUST_MASK) | TRUST_ULTIMATE )); release_public_key_parts (&pk); } log_info (_("key %s marked as ultimately trusted\n"),keystr(k->kid)); } } /* release the helper table table */ release_key_items (user_utk_list); user_utk_list = NULL; return; } /********************************************* *********** TrustDB stuff ******************* *********************************************/ /* * 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) { log_error(_("trust record %lu, req type %d: read failed: %s\n"), recno, rec->rectype, g10_errstr(rc) ); tdbio_invalid(); } if (rectype != rec->rectype) { log_error(_("trust record %lu is not of requested type %d\n"), rec->recnum, rectype); tdbio_invalid(); } } /* * Write a record and die on error */ static void write_record (TRUSTREC *rec) { int rc = tdbio_write_record (rec); if (rc) { log_error(_("trust record %lu, type %d: write failed: %s\n"), rec->recnum, rec->rectype, g10_errstr(rc) ); tdbio_invalid(); } } /* * sync the TrustDb and die on error */ static void do_sync(void) { int rc = tdbio_sync (); if(rc) { log_error (_("trustdb: sync failed: %s\n"), g10_errstr(rc) ); g10_exit(2); } } static const char * trust_model_string(void) { switch(opt.trust_model) { case TM_CLASSIC: return "classic"; case TM_PGP: return "PGP"; case TM_EXTERNAL: return "external"; case TM_ALWAYS: return "always"; case TM_DIRECT: return "direct"; default: return "unknown"; } } /**************** * 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? xstrdup(dbname): NULL; return 0; } void how_to_fix_the_trustdb () { const char *name = trustdb_args.dbname; if (!name) name = "trustdb.gpg"; log_info (_("You may try to re-create the trustdb using the commands:\n")); log_info (" cd %s\n", default_homedir ()); log_info (" gpg2 --export-ownertrust > otrust.tmp\n"); #ifdef HAVE_W32_SYSTEM log_info (" del %s\n", name); #else log_info (" rm %s\n", name); #endif log_info (" gpg2 --import-ownertrust < otrust.tmp\n"); log_info (_("If that does not work, please consult the manual\n")); } void init_trustdb() { int level = trustdb_args.level; const char* dbname = trustdb_args.dbname; if( trustdb_args.init ) return; trustdb_args.init = 1; if(level==0 || level==1) { int rc = tdbio_set_dbname (dbname, !!level, &trustdb_args.no_trustdb); if( rc ) log_fatal("can't init trustdb: %s\n", g10_errstr(rc) ); } else BUG(); if(opt.trust_model==TM_AUTO) { /* Try and set the trust model off of whatever the trustdb says it is. */ opt.trust_model=tdbio_read_model(); /* Sanity check this ;) */ if(opt.trust_model!=TM_CLASSIC && opt.trust_model!=TM_PGP && opt.trust_model!=TM_EXTERNAL) { log_info(_("unable to use unknown trust model (%d) - " "assuming %s trust model\n"),opt.trust_model,"PGP"); opt.trust_model=TM_PGP; } if(opt.verbose) log_info(_("using %s trust model\n"),trust_model_string()); } if(opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC) { /* Verify the list of ultimately trusted keys and move the --trusted-keys list there as well. */ if(level==1) verify_own_keys(); if(!tdbio_db_matches_options()) pending_check_trustdb=1; } } /*********************************************** ************* Print helpers **************** ***********************************************/ /**************** * This function returns a letter for a trustvalue Trust flags * are ignore. */ static int trust_letter (unsigned int 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 '?'; } } const char * uid_trust_string_fixed(PKT_public_key *key,PKT_user_id *uid) { if(!key && !uid) /* TRANSLATORS: these strings are similar to those in trust_value_to_string(), but are a fixed length. This is needed to make attractive information listings where columns line up properly. The value "10" should be the length of the strings you choose to translate to. This is the length in printable columns. It gets passed to atoi() so everything after the number is essentially a comment and need not be translated. Either key and uid are both NULL, or neither are NULL. */ return _("10 translator see trustdb.c:uid_trust_string_fixed"); else if(uid->is_revoked || (key && key->is_revoked)) return _("[ revoked]"); else if(uid->is_expired) return _("[ expired]"); else if(key) switch(get_validity(key,uid)&TRUST_MASK) { case TRUST_UNKNOWN: return _("[ unknown]"); case TRUST_EXPIRED: return _("[ expired]"); case TRUST_UNDEFINED: return _("[ undef ]"); case TRUST_MARGINAL: return _("[marginal]"); case TRUST_FULLY: return _("[ full ]"); case TRUST_ULTIMATE: return _("[ultimate]"); } return "err"; } /* The strings here are similar to those in pkclist.c:do_edit_ownertrust() */ const char * trust_value_to_string (unsigned int value) { switch( (value & TRUST_MASK) ) { case TRUST_UNKNOWN: return _("unknown"); case TRUST_EXPIRED: return _("expired"); case TRUST_UNDEFINED: return _("undefined"); case TRUST_NEVER: return _("never"); case TRUST_MARGINAL: return _("marginal"); case TRUST_FULLY: return _("full"); case TRUST_ULTIMATE: return _("ultimate"); default: return "err"; } } int string_to_trust_value (const char *str) { if(ascii_strcasecmp(str,"undefined")==0) return TRUST_UNDEFINED; else if(ascii_strcasecmp(str,"never")==0) return TRUST_NEVER; else if(ascii_strcasecmp(str,"marginal")==0) return TRUST_MARGINAL; else if(ascii_strcasecmp(str,"full")==0) return TRUST_FULLY; else if(ascii_strcasecmp(str,"ultimate")==0) return TRUST_ULTIMATE; else return -1; } /**************** * Recreate the WoT but do not ask for new ownertrusts. Special * feature: In batch mode and without a forced yes, this is only done * when a check is due. This can be used to run the check from a crontab */ void check_trustdb () { init_trustdb(); if(opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC) { if (opt.batch && !opt.answer_yes) { ulong scheduled; scheduled = tdbio_read_nextcheck (); if (!scheduled) { log_info (_("no need for a trustdb check\n")); return; } if (scheduled > make_timestamp ()) { log_info (_("next trustdb check due at %s\n"), strtimestamp (scheduled)); return; } } validate_keys (0); } else log_info (_("no need for a trustdb check with `%s' trust model\n"), trust_model_string()); } /* * Recreate the WoT. */ void update_trustdb() { init_trustdb(); if(opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC) validate_keys (1); else log_info (_("no need for a trustdb update with `%s' trust model\n"), trust_model_string()); } void revalidation_mark (void) { init_trustdb(); if (trustdb_args.no_trustdb && opt.trust_model == TM_ALWAYS) return; /* we simply set the time for the next check to 1 (far back in 1970) * so that a --update-trustdb will be scheduled */ if (tdbio_write_nextcheck (1)) do_sync (); pending_check_trustdb = 1; } int trustdb_pending_check(void) { return pending_check_trustdb; } /* If the trustdb is dirty, and we're interactive, update it. Otherwise, check it unless no-auto-check-trustdb is set. */ void trustdb_check_or_update(void) { if(trustdb_pending_check()) { if(opt.interactive) update_trustdb(); else if(!opt.no_auto_check_trustdb) check_trustdb(); } } void read_trust_options(byte *trust_model,ulong *created,ulong *nextcheck, byte *marginals,byte *completes,byte *cert_depth, byte *min_cert_level) { TRUSTREC opts; init_trustdb(); if (trustdb_args.no_trustdb && opt.trust_model == TM_ALWAYS) memset (&opts, 0, sizeof opts); else read_record(0,&opts,RECTYPE_VER); if(trust_model) *trust_model=opts.r.ver.trust_model; if(created) *created=opts.r.ver.created; if(nextcheck) *nextcheck=opts.r.ver.nextcheck; if(marginals) *marginals=opts.r.ver.marginals; if(completes) *completes=opts.r.ver.completes; if(cert_depth) *cert_depth=opts.r.ver.cert_depth; if(min_cert_level) *min_cert_level=opts.r.ver.min_cert_level; } /*********************************************** *********** Ownertrust et al. **************** ***********************************************/ static int read_trust_record (PKT_public_key *pk, TRUSTREC *rec) { int rc; init_trustdb(); rc = tdbio_search_trust_bypk (pk, rec); if (rc == -1) return -1; /* no record yet */ if (rc) { log_error ("trustdb: searching trust record failed: %s\n", g10_errstr (rc)); return rc; } if (rec->rectype != RECTYPE_TRUST) { log_error ("trustdb: record %lu is not a trust record\n", rec->recnum); return G10ERR_TRUSTDB; } return 0; } /**************** * Return the assigned ownertrust value for the given public key. * The key should be the primary key. */ unsigned int get_ownertrust ( PKT_public_key *pk) { TRUSTREC rec; int rc; if (trustdb_args.no_trustdb && opt.trust_model == TM_ALWAYS) return TRUST_UNKNOWN; rc = read_trust_record (pk, &rec); if (rc == -1) return TRUST_UNKNOWN; /* no record yet */ if (rc) { tdbio_invalid (); return rc; /* actually never reached */ } return rec.r.trust.ownertrust; } unsigned int get_min_ownertrust (PKT_public_key *pk) { TRUSTREC rec; int rc; if (trustdb_args.no_trustdb && opt.trust_model == TM_ALWAYS) return TRUST_UNKNOWN; rc = read_trust_record (pk, &rec); if (rc == -1) return TRUST_UNKNOWN; /* no record yet */ if (rc) { tdbio_invalid (); return rc; /* actually never reached */ } return rec.r.trust.min_ownertrust; } /* * Same as get_ownertrust but this takes the minimum ownertrust value * into into account, and will bump up the value as needed. */ static int get_ownertrust_with_min (PKT_public_key *pk) { unsigned int otrust,otrust_min; otrust = (get_ownertrust (pk) & TRUST_MASK); otrust_min = get_min_ownertrust (pk); if(otrustnamehash, 20) ) break; recno = vrec.r.valid.next; } if (!recno) /* insert a new validity record */ { memset (&vrec, 0, sizeof vrec); vrec.recnum = tdbio_new_recnum (); vrec.rectype = RECTYPE_VALID; memcpy (vrec.r.valid.namehash, uid->namehash, 20); vrec.r.valid.next = trec.r.trust.validlist; trec.r.trust.validlist = vrec.recnum; } vrec.r.valid.validity = validity; vrec.r.valid.full_count = uid->help_full_count; vrec.r.valid.marginal_count = uid->help_marginal_count; write_record (&vrec); trec.r.trust.depth = depth; write_record (&trec); } /*********************************************** ********* Query trustdb values ************** ***********************************************/ /* Return true if key is disabled */ int cache_disabled_value(PKT_public_key *pk) { int rc; TRUSTREC trec; int disabled=0; if(pk->is_disabled) return (pk->is_disabled==2); init_trustdb(); if (trustdb_args.no_trustdb) return 0; /* No trustdb => not disabled. */ rc = read_trust_record (pk, &trec); if (rc && rc != -1) { tdbio_invalid (); goto leave; } if (rc == -1) /* no record found, so assume not disabled */ goto leave; if(trec.r.trust.ownertrust & TRUST_FLAG_DISABLED) disabled=1; /* Cache it for later so we don't need to look at the trustdb every time */ if(disabled) pk->is_disabled=2; else pk->is_disabled=1; leave: return disabled; } void check_trustdb_stale(void) { static int did_nextcheck=0; init_trustdb (); if (trustdb_args.no_trustdb) return; /* No trustdb => can't be stale. */ if (!did_nextcheck && (opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC)) { ulong scheduled; did_nextcheck = 1; scheduled = tdbio_read_nextcheck (); if ((scheduled && scheduled <= make_timestamp ()) || pending_check_trustdb) { if (opt.no_auto_check_trustdb) { pending_check_trustdb = 1; log_info (_("please do a --check-trustdb\n")); } else { log_info (_("checking the trustdb\n")); validate_keys (0); } } } } /* * Return the validity information for PK. If the namehash is not * NULL, the validity of the corresponsing user ID is returned, * otherwise, a reasonable value for the entire key is returned. */ unsigned int get_validity (PKT_public_key *pk, PKT_user_id *uid) { TRUSTREC trec, vrec; int rc; ulong recno; unsigned int validity; u32 kid[2]; PKT_public_key *main_pk; if(uid) namehash_from_uid(uid); init_trustdb (); /* If we have no trustdb (which also means it has not been created) and the trust-model is always, we don't know the validity - return immediately. If we won't do that the tdbio code would try to open the trustdb and run into a fatal error. */ if (trustdb_args.no_trustdb && opt.trust_model == TM_ALWAYS) return TRUST_UNKNOWN; check_trustdb_stale(); keyid_from_pk (pk, kid); if (pk->main_keyid[0] != kid[0] || pk->main_keyid[1] != kid[1]) { /* this is a subkey - get the mainkey */ main_pk = xmalloc_clear (sizeof *main_pk); rc = get_pubkey (main_pk, pk->main_keyid); if (rc) { char *tempkeystr=xstrdup(keystr(pk->main_keyid)); log_error ("error getting main key %s of subkey %s: %s\n", tempkeystr, keystr(kid), g10_errstr(rc)); xfree(tempkeystr); validity = TRUST_UNKNOWN; goto leave; } } else main_pk = pk; if(opt.trust_model==TM_DIRECT) { /* Note that this happens BEFORE any user ID stuff is checked. The direct trust model applies to keys as a whole. */ validity=get_ownertrust(main_pk); goto leave; } rc = read_trust_record (main_pk, &trec); if (rc && rc != -1) { tdbio_invalid (); return 0; } if (rc == -1) /* no record found */ { validity = TRUST_UNKNOWN; goto leave; } /* loop over all user IDs */ recno = trec.r.trust.validlist; validity = 0; while (recno) { read_record (recno, &vrec, RECTYPE_VALID); if(uid) { /* If a user ID is given we return the validity for that user ID ONLY. If the namehash is not found, then there is no validity at all (i.e. the user ID wasn't signed). */ if(memcmp(vrec.r.valid.namehash,uid->namehash,20)==0) { validity=(vrec.r.valid.validity & TRUST_MASK); break; } } else { /* If no namehash is given, we take the maximum validity over all user IDs */ if ( validity < (vrec.r.valid.validity & TRUST_MASK) ) validity = (vrec.r.valid.validity & TRUST_MASK); } recno = vrec.r.valid.next; } if ( (trec.r.trust.ownertrust & TRUST_FLAG_DISABLED) ) { validity |= TRUST_FLAG_DISABLED; pk->is_disabled=2; } else pk->is_disabled=1; leave: /* set some flags direct from the key */ if (main_pk->is_revoked) validity |= TRUST_FLAG_REVOKED; if (main_pk != pk && pk->is_revoked) validity |= TRUST_FLAG_SUB_REVOKED; /* Note: expiration is a trust value and not a flag - don't know why * I initially designed it that way */ if (main_pk->has_expired || pk->has_expired) validity = (validity & ~TRUST_MASK) | TRUST_EXPIRED; if (pending_check_trustdb) validity |= TRUST_FLAG_PENDING_CHECK; if (main_pk != pk) free_public_key (main_pk); return validity; } int get_validity_info (PKT_public_key *pk, PKT_user_id *uid) { int trustlevel; if (!pk) return '?'; /* Just in case a NULL PK is passed. */ trustlevel = get_validity (pk, uid); if( trustlevel & TRUST_FLAG_REVOKED ) return 'r'; return trust_letter ( trustlevel ); } const char * get_validity_string (PKT_public_key *pk, PKT_user_id *uid) { int trustlevel; if (!pk) return "err"; /* Just in case a NULL PK is passed. */ trustlevel = get_validity (pk, uid); if( trustlevel & TRUST_FLAG_REVOKED ) return _("revoked"); return trust_value_to_string(trustlevel); } static void get_validity_counts (PKT_public_key *pk, PKT_user_id *uid) { TRUSTREC trec, vrec; ulong recno; if(pk==NULL || uid==NULL) BUG(); namehash_from_uid(uid); uid->help_marginal_count=uid->help_full_count=0; init_trustdb (); if(read_trust_record (pk, &trec)!=0) return; /* loop over all user IDs */ recno = trec.r.trust.validlist; while (recno) { read_record (recno, &vrec, RECTYPE_VALID); if(memcmp(vrec.r.valid.namehash,uid->namehash,20)==0) { uid->help_marginal_count=vrec.r.valid.marginal_count; uid->help_full_count=vrec.r.valid.full_count; /* printf("Fetched marginal %d, full %d\n",uid->help_marginal_count,uid->help_full_count); */ break; } recno = vrec.r.valid.next; } } void list_trust_path( const char *username ) { } /**************** * 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; } /**************** * Print the current path */ void enum_cert_paths_print( void **context, FILE *fp, int refresh, ulong selected_lid ) { return; } /**************************************** *********** NEW NEW NEW **************** ****************************************/ static int ask_ownertrust (u32 *kid,int minimum) { PKT_public_key *pk; int rc; int ot; pk = xmalloc_clear (sizeof *pk); rc = get_pubkey (pk, kid); if (rc) { log_error (_("public key %s not found: %s\n"), keystr(kid), g10_errstr(rc) ); return TRUST_UNKNOWN; } if(opt.force_ownertrust) { log_info("force trust for key %s to %s\n", keystr(kid),trust_value_to_string(opt.force_ownertrust)); update_ownertrust(pk,opt.force_ownertrust); ot=opt.force_ownertrust; } else { ot=edit_ownertrust(pk,0); if(ot>0) ot = get_ownertrust (pk); else if(ot==0) ot = minimum?minimum:TRUST_UNDEFINED; else ot = -1; /* quit */ } free_public_key( pk ); return ot; } static void mark_keyblock_seen (KeyHashTable tbl, KBNODE node) { for ( ;node; node = node->next ) if (node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY) { u32 aki[2]; keyid_from_pk (node->pkt->pkt.public_key, aki); add_key_hash_table (tbl, aki); } } static void dump_key_array (int depth, struct key_array *keys) { struct key_array *kar; for (kar=keys; kar->keyblock; kar++) { KBNODE node = kar->keyblock; u32 kid[2]; keyid_from_pk(node->pkt->pkt.public_key, kid); printf ("%d:%08lX%08lX:K::%c::::\n", depth, (ulong)kid[0], (ulong)kid[1], '?'); for (; node; node = node->next) { if (node->pkt->pkttype == PKT_USER_ID) { int len = node->pkt->pkt.user_id->len; if (len > 30) len = 30; printf ("%d:%08lX%08lX:U:::%c:::", depth, (ulong)kid[0], (ulong)kid[1], (node->flag & 4)? 'f': (node->flag & 2)? 'm': (node->flag & 1)? 'q':'-'); print_string (stdout, node->pkt->pkt.user_id->name, len, ':'); putchar (':'); putchar ('\n'); } } } } static void store_validation_status (int depth, KBNODE keyblock, KeyHashTable stored) { KBNODE node; int status; int any = 0; for (node=keyblock; node; node = node->next) { if (node->pkt->pkttype == PKT_USER_ID) { PKT_user_id *uid = node->pkt->pkt.user_id; if (node->flag & 4) status = TRUST_FULLY; else if (node->flag & 2) status = TRUST_MARGINAL; else if (node->flag & 1) status = TRUST_UNDEFINED; else status = 0; if (status) { update_validity (keyblock->pkt->pkt.public_key, uid, depth, status); mark_keyblock_seen(stored,keyblock); any = 1; } } } if (any) do_sync (); } /* * check whether the signature sig is in the klist k */ static struct key_item * is_in_klist (struct key_item *k, PKT_signature *sig) { for (; k; k = k->next) { if (k->kid[0] == sig->keyid[0] && k->kid[1] == sig->keyid[1]) return k; } return NULL; } /* * Mark the signature of the given UID which are used to certify it. * To do this, we first revmove all signatures which are not valid and * from the remain ones we look for the latest one. If this is not a * certification revocation signature we mark the signature by setting * node flag bit 8. Revocations are marked with flag 11, and sigs * from unavailable keys are marked with flag 12. Note that flag bits * 9 and 10 are used for internal purposes. */ static void mark_usable_uid_certs (KBNODE keyblock, KBNODE uidnode, u32 *main_kid, struct key_item *klist, u32 curtime, u32 *next_expire) { KBNODE node; PKT_signature *sig; /* first check all signatures */ for (node=uidnode->next; node; node = node->next) { int rc; node->flag &= ~(1<<8 | 1<<9 | 1<<10 | 1<<11 | 1<<12); if (node->pkt->pkttype == PKT_USER_ID || node->pkt->pkttype == PKT_PUBLIC_SUBKEY) break; /* ready */ if (node->pkt->pkttype != PKT_SIGNATURE) continue; sig = node->pkt->pkt.signature; if (main_kid && sig->keyid[0] == main_kid[0] && sig->keyid[1] == main_kid[1]) continue; /* ignore self-signatures if we pass in a main_kid */ if (!IS_UID_SIG(sig) && !IS_UID_REV(sig)) continue; /* we only look at these signature classes */ if(sig->sig_class>=0x11 && sig->sig_class<=0x13 && sig->sig_class-0x10flag |= 1<<12; continue; } node->flag |= 1<<9; } /* reset the remaining flags */ for (; node; node = node->next) node->flag &= ~(1<<8 | 1<<9 | 1<<10 | 1<<11 | 1<<12); /* kbnode flag usage: bit 9 is here set for signatures to consider, * bit 10 will be set by the loop to keep track of keyIDs already * processed, bit 8 will be set for the usable signatures, and bit * 11 will be set for usable revocations. */ /* for each cert figure out the latest valid one */ for (node=uidnode->next; node; node = node->next) { KBNODE n, signode; u32 kid[2]; u32 sigdate; if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) break; if ( !(node->flag & (1<<9)) ) continue; /* not a node to look at */ if ( (node->flag & (1<<10)) ) continue; /* signature with a keyID already processed */ node->flag |= (1<<10); /* mark this node as processed */ sig = node->pkt->pkt.signature; signode = node; sigdate = sig->timestamp; kid[0] = sig->keyid[0]; kid[1] = sig->keyid[1]; /* Now find the latest and greatest signature */ for (n=uidnode->next; n; n = n->next) { if (n->pkt->pkttype == PKT_PUBLIC_SUBKEY) break; if ( !(n->flag & (1<<9)) ) continue; if ( (n->flag & (1<<10)) ) continue; /* shortcut already processed signatures */ sig = n->pkt->pkt.signature; if (kid[0] != sig->keyid[0] || kid[1] != sig->keyid[1]) continue; n->flag |= (1<<10); /* mark this node as processed */ /* If signode is nonrevocable and unexpired and n isn't, then take signode (skip). It doesn't matter which is older: if signode was older then we don't want to take n as signode is nonrevocable. If n was older then we're automatically fine. */ if(((IS_UID_SIG(signode->pkt->pkt.signature) && !signode->pkt->pkt.signature->flags.revocable && (signode->pkt->pkt.signature->expiredate==0 || signode->pkt->pkt.signature->expiredate>curtime))) && (!(IS_UID_SIG(n->pkt->pkt.signature) && !n->pkt->pkt.signature->flags.revocable && (n->pkt->pkt.signature->expiredate==0 || n->pkt->pkt.signature->expiredate>curtime)))) continue; /* If n is nonrevocable and unexpired and signode isn't, then take n. Again, it doesn't matter which is older: if n was older then we don't want to take signode as n is nonrevocable. If signode was older then we're automatically fine. */ if((!(IS_UID_SIG(signode->pkt->pkt.signature) && !signode->pkt->pkt.signature->flags.revocable && (signode->pkt->pkt.signature->expiredate==0 || signode->pkt->pkt.signature->expiredate>curtime))) && ((IS_UID_SIG(n->pkt->pkt.signature) && !n->pkt->pkt.signature->flags.revocable && (n->pkt->pkt.signature->expiredate==0 || n->pkt->pkt.signature->expiredate>curtime)))) { signode = n; sigdate = sig->timestamp; continue; } /* At this point, if it's newer, it goes in as the only remaining possibilities are signode and n are both either revocable or expired or both nonrevocable and unexpired. If the timestamps are equal take the later ordered packet, presuming that the key packets are hopefully in their original order. */ if (sig->timestamp >= sigdate) { signode = n; sigdate = sig->timestamp; } } sig = signode->pkt->pkt.signature; if (IS_UID_SIG (sig)) { /* this seems to be a usable one which is not revoked. * Just need to check whether there is an expiration time, * We do the expired certification after finding a suitable * certification, the assumption is that a signator does not * want that after the expiration of his certificate the * system falls back to an older certification which has a * different expiration time */ const byte *p; u32 expire; p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_SIG_EXPIRE, NULL ); expire = p? sig->timestamp + buf32_to_u32 (p) : 0; if (expire==0 || expire > curtime ) { signode->flag |= (1<<8); /* yeah, found a good cert */ if (next_expire && expire && expire < *next_expire) *next_expire = expire; } } else signode->flag |= (1<<11); } } static int clean_sigs_from_uid(KBNODE keyblock,KBNODE uidnode,int noisy,int self_only) { int deleted=0; KBNODE node; u32 keyid[2]; assert(keyblock->pkt->pkttype==PKT_PUBLIC_KEY); keyid_from_pk(keyblock->pkt->pkt.public_key,keyid); /* Passing in a 0 for current time here means that we'll never weed out an expired sig. This is correct behavior since we want to keep the most recent expired sig in a series. */ mark_usable_uid_certs(keyblock,uidnode,NULL,NULL,0,NULL); /* What we want to do here is remove signatures that are not considered as part of the trust calculations. Thus, all invalid signatures are out, as are any signatures that aren't the last of a series of uid sigs or revocations It breaks down like this: coming out of mark_usable_uid_certs, if a sig is unflagged, it is not even a candidate. If a sig has flag 9 or 10, that means it was selected as a candidate and vetted. If a sig has flag 8 it is a usable signature. If a sig has flag 11 it is a usable revocation. If a sig has flag 12 it was issued by an unavailable key. "Usable" here means the most recent valid signature/revocation in a series from a particular signer. Delete everything that isn't a usable uid sig (which might be expired), a usable revocation, or a sig from an unavailable key. */ for(node=uidnode->next; node && node->pkt->pkttype==PKT_SIGNATURE; node=node->next) { int keep=self_only?(node->pkt->pkt.signature->keyid[0]==keyid[0] && node->pkt->pkt.signature->keyid[1]==keyid[1]):1; /* Keep usable uid sigs ... */ if((node->flag & (1<<8)) && keep) continue; /* ... and usable revocations... */ if((node->flag & (1<<11)) && keep) continue; /* ... and sigs from unavailable keys. */ /* disabled for now since more people seem to want sigs from unavailable keys removed altogether. */ /* if(node->flag & (1<<12)) continue; */ /* Everything else we delete */ /* At this point, if 12 is set, the signing key was unavailable. If 9 or 10 is set, it's superseded. Otherwise, it's invalid. */ if(noisy) log_info("removing signature from key %s on user ID \"%s\": %s\n", keystr(node->pkt->pkt.signature->keyid), uidnode->pkt->pkt.user_id->name, node->flag&(1<<12)?"key unavailable": node->flag&(1<<9)?"signature superseded":"invalid signature"); delete_kbnode(node); deleted++; } return deleted; } /* This is substantially easier than clean_sigs_from_uid since we just have to establish if the uid has a valid self-sig, is not revoked, and is not expired. Note that this does not take into account whether the uid has a trust path to it - just whether the keyholder themselves has certified the uid. Returns true if the uid was compacted. To "compact" a user ID, we simply remove ALL signatures except the self-sig that caused the user ID to be remove-worthy. We don't actually remove the user ID packet itself since it might be ressurected in a later merge. Note that this function requires that the caller has already done a merge_keys_and_selfsig(). TODO: change the import code to allow importing a uid with only a revocation if the uid already exists on the keyring. */ static int clean_uid_from_key(KBNODE keyblock,KBNODE uidnode,int noisy) { KBNODE node; PKT_user_id *uid=uidnode->pkt->pkt.user_id; int deleted=0; assert(keyblock->pkt->pkttype==PKT_PUBLIC_KEY); assert(uidnode->pkt->pkttype==PKT_USER_ID); /* Skip valid user IDs, compacted user IDs, and non-self-signed user IDs if --allow-non-selfsigned-uid is set. */ if(uid->created || uid->flags.compacted || (!uid->is_expired && !uid->is_revoked && opt.allow_non_selfsigned_uid)) return 0; for(node=uidnode->next; node && node->pkt->pkttype==PKT_SIGNATURE; node=node->next) if(!node->pkt->pkt.signature->flags.chosen_selfsig) { delete_kbnode(node); deleted=1; uidnode->pkt->pkt.user_id->flags.compacted=1; } if(noisy) { const char *reason; char *user=utf8_to_native(uid->name,uid->len,0); if(uid->is_revoked) reason=_("revoked"); else if(uid->is_expired) reason=_("expired"); else reason=_("invalid"); log_info("compacting user ID \"%s\" on key %s: %s\n", user,keystr_from_pk(keyblock->pkt->pkt.public_key), reason); xfree(user); } return deleted; } /* Needs to be called after a merge_keys_and_selfsig() */ void clean_one_uid(KBNODE keyblock,KBNODE uidnode,int noisy,int self_only, int *uids_cleaned,int *sigs_cleaned) { int dummy; assert(keyblock->pkt->pkttype==PKT_PUBLIC_KEY); assert(uidnode->pkt->pkttype==PKT_USER_ID); if(!uids_cleaned) uids_cleaned=&dummy; if(!sigs_cleaned) sigs_cleaned=&dummy; /* Do clean_uid_from_key first since if it fires off, we don't have to bother with the other */ *uids_cleaned+=clean_uid_from_key(keyblock,uidnode,noisy); if(!uidnode->pkt->pkt.user_id->flags.compacted) *sigs_cleaned+=clean_sigs_from_uid(keyblock,uidnode,noisy,self_only); } void clean_key(KBNODE keyblock,int noisy,int self_only, int *uids_cleaned,int *sigs_cleaned) { KBNODE uidnode; merge_keys_and_selfsig(keyblock); for(uidnode=keyblock->next; uidnode && uidnode->pkt->pkttype!=PKT_PUBLIC_SUBKEY; uidnode=uidnode->next) if(uidnode->pkt->pkttype==PKT_USER_ID) clean_one_uid(keyblock,uidnode,noisy,self_only, uids_cleaned,sigs_cleaned); } /* Returns a sanitized copy of the regexp (which might be "", but not NULL). */ static char * sanitize_regexp(const char *old) { size_t start=0,len=strlen(old),idx=0; int escaped=0,standard_bracket=0; char *new=xmalloc((len*2)+1); /* enough to \-escape everything if we have to */ /* There are basically two commonly-used regexps here. GPG and most versions of PGP use "<[^>]+[@.]example\.com>$" and PGP (9) command line uses "example.com" (i.e. whatever the user specfies, and we can't expect users know to use "\." instead of "."). So here are the rules: we're allowed to start with "<[^>]+[@.]" and end with ">$" or start and end with nothing. In between, the only legal regex character is ".", and everything else gets escaped. Part of the gotcha here is that some regex packages allow more than RFC-4880 requires. For example, 4880 has no "{}" operator, but GNU regex does. Commenting removes these operators from consideration. A possible future enhancement is to use commenting to effectively back off a given regex to the Henry Spencer syntax in 4880. -dshaw */ /* Are we bracketed between "<[^>]+[@.]" and ">$" ? */ if(len>=12 && strncmp(old,"<[^>]+[@.]",10)==0 && old[len-2]=='>' && old[len-1]=='$') { strcpy(new,"<[^>]+[@.]"); idx=strlen(new); standard_bracket=1; start+=10; len-=2; } /* Walk the remaining characters and ensure that everything that is left is not an operational regex character. */ for(;start$", then it was escaping the ">" and is fine. If the regexp actually ended with the bare "\", then it's an illegal regexp and regcomp should kick it out. */ if(standard_bracket) strcat(new,">$"); return new; } /* Used by validate_one_keyblock to confirm a regexp within a trust signature. Returns 1 for match, and 0 for no match or regex error. */ static int check_regexp(const char *expr,const char *string) { #ifdef DISABLE_REGEX /* When DISABLE_REGEX is defined, assume all regexps do not match. */ return 0; #else int ret; char *regexp; regexp=sanitize_regexp(expr); #ifdef __riscos__ ret=riscos_check_regexp(expr, string, DBG_TRUST); #else { regex_t pat; ret=regcomp(&pat,regexp,REG_ICASE|REG_NOSUB|REG_EXTENDED); if(ret==0) { ret=regexec(&pat,string,0,NULL,0); regfree(&pat); ret=(ret==0); } } #endif if(DBG_TRUST) log_debug("regexp `%s' (`%s') on `%s': %s\n", regexp,expr,string,ret==0?"YES":"NO"); xfree(regexp); return ret; #endif } /* * Return true if the key is signed by one of the keys in the given * key ID list. User IDs with a valid signature are marked by node * flags as follows: * flag bit 0: There is at least one signature * 1: There is marginal confidence that this is a legitimate uid * 2: There is full confidence that this is a legitimate uid. * 8: Used for internal purposes. * 9: Ditto (in mark_usable_uid_certs()) * 10: Ditto (ditto) * This function assumes that all kbnode flags are cleared on entry. */ static int validate_one_keyblock (KBNODE kb, struct key_item *klist, u32 curtime, u32 *next_expire) { struct key_item *kr; KBNODE node, uidnode=NULL; PKT_user_id *uid=NULL; PKT_public_key *pk = kb->pkt->pkt.public_key; u32 main_kid[2]; int issigned=0, any_signed = 0; keyid_from_pk(pk, main_kid); for (node=kb; node; node = node->next) { /* A bit of discussion here: is it better for the web of trust to be built among only self-signed uids? On the one hand, a self-signed uid is a statement that the key owner definitely intended that uid to be there, but on the other hand, a signed (but not self-signed) uid does carry trust, of a sort, even if it is a statement being made by people other than the key owner "through" the uids on the key owner's key. I'm going with the latter. However, if the user ID was explicitly revoked, or passively allowed to expire, that should stop validity through the user ID until it is resigned. -dshaw */ if (node->pkt->pkttype == PKT_USER_ID && !node->pkt->pkt.user_id->is_revoked && !node->pkt->pkt.user_id->is_expired) { if (uidnode && issigned) { if (uid->help_full_count >= opt.completes_needed || uid->help_marginal_count >= opt.marginals_needed ) uidnode->flag |= 4; else if (uid->help_full_count || uid->help_marginal_count) uidnode->flag |= 2; uidnode->flag |= 1; any_signed = 1; } uidnode = node; uid=uidnode->pkt->pkt.user_id; /* If the selfsig is going to expire... */ if(uid->expiredate && uid->expiredate<*next_expire) *next_expire = uid->expiredate; issigned = 0; get_validity_counts(pk,uid); mark_usable_uid_certs (kb, uidnode, main_kid, klist, curtime, next_expire); } else if (node->pkt->pkttype == PKT_SIGNATURE && (node->flag & (1<<8)) && uid) { /* Note that we are only seeing unrevoked sigs here */ PKT_signature *sig = node->pkt->pkt.signature; kr = is_in_klist (klist, sig); /* If the trust_regexp does not match, it's as if the sig did not exist. This is safe for non-trust sigs as well since we don't accept a regexp on the sig unless it's a trust sig. */ if (kr && (kr->trust_regexp==NULL || opt.trust_model!=TM_PGP || (uidnode && check_regexp(kr->trust_regexp, uidnode->pkt->pkt.user_id->name)))) { /* Are we part of a trust sig chain? We always favor the latest trust sig, rather than the greater or lesser trust sig or value. I could make a decent argument for any of these cases, but this seems to be what PGP does, and I'd like to be compatible. -dms */ if(opt.trust_model==TM_PGP && sig->trust_depth && pk->trust_timestamp<=sig->timestamp) { byte depth; /* If the depth on the signature is less than the chain currently has, then use the signature depth so we don't increase the depth beyond what the signer wanted. If the depth on the signature is more than the chain currently has, then use the chain depth so we use as much of the signature depth as the chain will permit. An ultimately trusted signature can restart the depth to whatever level it likes. */ if(sig->trust_depthtrust_depth || kr->ownertrust==TRUST_ULTIMATE) depth=sig->trust_depth; else depth=kr->trust_depth; if(depth) { if(DBG_TRUST) log_debug("trust sig on %s, sig depth is %d," " kr depth is %d\n", uidnode->pkt->pkt.user_id->name, sig->trust_depth, kr->trust_depth); /* If we got here, we know that: this is a trust sig. it's a newer trust sig than any previous trust sig on this key (not uid). it is legal in that it was either generated by an ultimate key, or a key that was part of a trust chain, and the depth does not violate the original trust sig. if there is a regexp attached, it matched successfully. */ if(DBG_TRUST) log_debug("replacing trust value %d with %d and " "depth %d with %d\n", pk->trust_value,sig->trust_value, pk->trust_depth,depth); pk->trust_value=sig->trust_value; pk->trust_depth=depth-1; /* If the trust sig contains a regexp, record it on the pk for the next round. */ if(sig->trust_regexp) pk->trust_regexp=sig->trust_regexp; } } if (kr->ownertrust == TRUST_ULTIMATE) uid->help_full_count = opt.completes_needed; else if (kr->ownertrust == TRUST_FULLY) uid->help_full_count++; else if (kr->ownertrust == TRUST_MARGINAL) uid->help_marginal_count++; issigned = 1; } } } if (uidnode && issigned) { if (uid->help_full_count >= opt.completes_needed || uid->help_marginal_count >= opt.marginals_needed ) uidnode->flag |= 4; else if (uid->help_full_count || uid->help_marginal_count) uidnode->flag |= 2; uidnode->flag |= 1; any_signed = 1; } return any_signed; } static int search_skipfnc (void *opaque, u32 *kid, PKT_user_id *dummy) { return test_key_hash_table ((KeyHashTable)opaque, kid); } /* * Scan all keys and return a key_array of all suitable keys from * kllist. The caller has to pass keydb handle so that we don't use * to create our own. Returns either a key_array or NULL in case of * an error. No results found are indicated by an empty array. * Caller hast to release the returned array. */ static struct key_array * validate_key_list (KEYDB_HANDLE hd, KeyHashTable full_trust, struct key_item *klist, u32 curtime, u32 *next_expire) { KBNODE keyblock = NULL; struct key_array *keys = NULL; size_t nkeys, maxkeys; int rc; KEYDB_SEARCH_DESC desc; maxkeys = 1000; keys = xmalloc ((maxkeys+1) * sizeof *keys); nkeys = 0; rc = keydb_search_reset (hd); if (rc) { log_error ("keydb_search_reset failed: %s\n", g10_errstr(rc)); xfree (keys); return NULL; } memset (&desc, 0, sizeof desc); desc.mode = KEYDB_SEARCH_MODE_FIRST; desc.skipfnc = search_skipfnc; desc.skipfncvalue = full_trust; rc = keydb_search (hd, &desc, 1); if (rc == -1) { keys[nkeys].keyblock = NULL; return keys; } if (rc) { log_error ("keydb_search_first failed: %s\n", g10_errstr(rc)); xfree (keys); return NULL; } desc.mode = KEYDB_SEARCH_MODE_NEXT; /* change mode */ do { PKT_public_key *pk; rc = keydb_get_keyblock (hd, &keyblock); if (rc) { log_error ("keydb_get_keyblock failed: %s\n", g10_errstr(rc)); xfree (keys); return NULL; } if ( keyblock->pkt->pkttype != PKT_PUBLIC_KEY) { log_debug ("ooops: invalid pkttype %d encountered\n", keyblock->pkt->pkttype); dump_kbnode (keyblock); release_kbnode(keyblock); continue; } /* prepare the keyblock for further processing */ merge_keys_and_selfsig (keyblock); clear_kbnode_flags (keyblock); pk = keyblock->pkt->pkt.public_key; if (pk->has_expired || pk->is_revoked) { /* it does not make sense to look further at those keys */ mark_keyblock_seen (full_trust, keyblock); } else if (validate_one_keyblock (keyblock, klist, curtime, next_expire)) { KBNODE node; if (pk->expiredate && pk->expiredate >= curtime && pk->expiredate < *next_expire) *next_expire = pk->expiredate; if (nkeys == maxkeys) { maxkeys += 1000; keys = xrealloc (keys, (maxkeys+1) * sizeof *keys); } keys[nkeys++].keyblock = keyblock; /* Optimization - if all uids are fully trusted, then we never need to consider this key as a candidate again. */ for (node=keyblock; node; node = node->next) if (node->pkt->pkttype == PKT_USER_ID && !(node->flag & 4)) break; if(node==NULL) mark_keyblock_seen (full_trust, keyblock); keyblock = NULL; } release_kbnode (keyblock); keyblock = NULL; } while ( !(rc = keydb_search (hd, &desc, 1)) ); if (rc && rc != -1) { log_error ("keydb_search_next failed: %s\n", g10_errstr(rc)); xfree (keys); return NULL; } keys[nkeys].keyblock = NULL; return keys; } /* Caller must sync */ static void reset_trust_records(void) { TRUSTREC rec; ulong recnum; int count = 0, nreset = 0; for (recnum=1; !tdbio_read_record (recnum, &rec, 0); recnum++ ) { if(rec.rectype==RECTYPE_TRUST) { count++; if(rec.r.trust.min_ownertrust) { rec.r.trust.min_ownertrust=0; write_record(&rec); } } else if(rec.rectype==RECTYPE_VALID && ((rec.r.valid.validity&TRUST_MASK) || rec.r.valid.marginal_count || rec.r.valid.full_count)) { rec.r.valid.validity &= ~TRUST_MASK; rec.r.valid.marginal_count=rec.r.valid.full_count=0; nreset++; write_record(&rec); } } if (opt.verbose) log_info (_("%d keys processed (%d validity counts cleared)\n"), count, nreset); } /* * Run the key validation procedure. * * This works this way: * Step 1: Find all ultimately trusted keys (UTK). * mark them all as seen and put them into klist. * Step 2: loop max_cert_times * Step 3: if OWNERTRUST of any key in klist is undefined * ask user to assign ownertrust * Step 4: Loop over all keys in the keyDB which are not marked seen * Step 5: if key is revoked or expired * mark key as seen * continue loop at Step 4 * Step 6: For each user ID of that key signed by a key in klist * Calculate validity by counting trusted signatures. * Set validity of user ID * Step 7: If any signed user ID was found * mark key as seen * End Loop * Step 8: Build a new klist from all fully trusted keys from step 6 * End Loop * Ready * */ static int validate_keys (int interactive) { int rc = 0; int quit=0; struct key_item *klist = NULL; struct key_item *k; struct key_array *keys = NULL; struct key_array *kar; KEYDB_HANDLE kdb = NULL; KBNODE node; int depth; int ot_unknown, ot_undefined, ot_never, ot_marginal, ot_full, ot_ultimate; KeyHashTable stored,used,full_trust; u32 start_time, next_expire; /* Make sure we have all sigs cached. TODO: This is going to require some architectual re-thinking, as it is agonizingly slow. Perhaps combine this with reset_trust_records(), or only check the caches on keys that are actually involved in the web of trust. */ keydb_rebuild_caches(0); start_time = make_timestamp (); next_expire = 0xffffffff; /* set next expire to the year 2106 */ stored = new_key_hash_table (); used = new_key_hash_table (); full_trust = new_key_hash_table (); kdb = keydb_new (0); reset_trust_records(); /* Fixme: Instead of always building a UTK list, we could just build it * here when needed */ if (!utk_list) { if (!opt.quiet) log_info (_("no ultimately trusted keys found\n")); goto leave; } /* mark all UTKs as used and fully_trusted and set validity to ultimate */ for (k=utk_list; k; k = k->next) { KBNODE keyblock; PKT_public_key *pk; keyblock = get_pubkeyblock (k->kid); if (!keyblock) { log_error (_("public key of ultimately" " trusted key %s not found\n"), keystr(k->kid)); continue; } mark_keyblock_seen (used, keyblock); mark_keyblock_seen (stored, keyblock); mark_keyblock_seen (full_trust, keyblock); pk = keyblock->pkt->pkt.public_key; for (node=keyblock; node; node = node->next) { if (node->pkt->pkttype == PKT_USER_ID) update_validity (pk, node->pkt->pkt.user_id, 0, TRUST_ULTIMATE); } if ( pk->expiredate && pk->expiredate >= start_time && pk->expiredate < next_expire) next_expire = pk->expiredate; release_kbnode (keyblock); do_sync (); } klist = utk_list; log_info(_("%d marginal(s) needed, %d complete(s) needed, %s trust model\n"), opt.marginals_needed,opt.completes_needed,trust_model_string()); for (depth=0; depth < opt.max_cert_depth; depth++) { int valids=0,key_count; /* See whether we should assign ownertrust values to the keys in klist. */ ot_unknown = ot_undefined = ot_never = 0; ot_marginal = ot_full = ot_ultimate = 0; for (k=klist; k; k = k->next) { int min=0; /* 120 and 60 are as per RFC2440 */ if(k->trust_value>=120) min=TRUST_FULLY; else if(k->trust_value>=60) min=TRUST_MARGINAL; if(min!=k->min_ownertrust) update_min_ownertrust(k->kid,min); if (interactive && k->ownertrust == TRUST_UNKNOWN) { k->ownertrust = ask_ownertrust (k->kid,min); if (k->ownertrust == (unsigned int)(-1)) { quit=1; goto leave; } } /* This can happen during transition from an old trustdb before trust sigs. It can also happen if a user uses two different versions of GnuPG or changes the --trust-model setting. */ if(k->ownertrustkid[0],(ulong)k->kid[1], trust_value_to_string(k->ownertrust), trust_value_to_string(min)); k->ownertrust=min; } if (k->ownertrust == TRUST_UNKNOWN) ot_unknown++; else if (k->ownertrust == TRUST_UNDEFINED) ot_undefined++; else if (k->ownertrust == TRUST_NEVER) ot_never++; else if (k->ownertrust == TRUST_MARGINAL) ot_marginal++; else if (k->ownertrust == TRUST_FULLY) ot_full++; else if (k->ownertrust == TRUST_ULTIMATE) ot_ultimate++; valids++; } /* Find all keys which are signed by a key in kdlist */ keys = validate_key_list (kdb, full_trust, klist, start_time, &next_expire); if (!keys) { log_error ("validate_key_list failed\n"); rc = G10ERR_GENERAL; goto leave; } for (key_count=0, kar=keys; kar->keyblock; kar++, key_count++) ; /* Store the calculated valididation status somewhere */ if (opt.verbose > 1 && DBG_TRUST) dump_key_array (depth, keys); for (kar=keys; kar->keyblock; kar++) store_validation_status (depth, kar->keyblock, stored); log_info (_("depth: %d valid: %3d signed: %3d" " trust: %d-, %dq, %dn, %dm, %df, %du\n"), depth, valids, key_count, ot_unknown, ot_undefined, ot_never, ot_marginal, ot_full, ot_ultimate ); /* Build a new kdlist from all fully valid keys in KEYS */ if (klist != utk_list) release_key_items (klist); klist = NULL; for (kar=keys; kar->keyblock; kar++) { for (node=kar->keyblock; node; node = node->next) { if (node->pkt->pkttype == PKT_USER_ID && (node->flag & 4)) { u32 kid[2]; /* have we used this key already? */ keyid_from_pk (kar->keyblock->pkt->pkt.public_key, kid); if(test_key_hash_table(used,kid)==0) { /* Normally we add both the primary and subkey ids to the hash via mark_keyblock_seen, but since we aren't using this hash as a skipfnc, that doesn't matter here. */ add_key_hash_table (used,kid); k = new_key_item (); k->kid[0]=kid[0]; k->kid[1]=kid[1]; k->ownertrust = (get_ownertrust (kar->keyblock->pkt->pkt.public_key) & TRUST_MASK); k->min_ownertrust = get_min_ownertrust(kar->keyblock->pkt->pkt.public_key); k->trust_depth= kar->keyblock->pkt->pkt.public_key->trust_depth; k->trust_value= kar->keyblock->pkt->pkt.public_key->trust_value; if(kar->keyblock->pkt->pkt.public_key->trust_regexp) k->trust_regexp= xstrdup(kar->keyblock->pkt-> pkt.public_key->trust_regexp); k->next = klist; klist = k; break; } } } } release_key_array (keys); keys = NULL; if (!klist) break; /* no need to dive in deeper */ } leave: keydb_release (kdb); release_key_array (keys); release_key_items (klist); release_key_hash_table (full_trust); release_key_hash_table (used); release_key_hash_table (stored); if (!rc && !quit) /* mark trustDB as checked */ { if (next_expire == 0xffffffff || next_expire < start_time ) tdbio_write_nextcheck (0); else { tdbio_write_nextcheck (next_expire); log_info (_("next trustdb check due at %s\n"), strtimestamp (next_expire)); } if(tdbio_update_version_record()!=0) { log_error(_("unable to update trustdb version record: " "write failed: %s\n"), g10_errstr(rc)); tdbio_invalid(); } do_sync (); pending_check_trustdb = 0; } return rc; } gnupg-1.4.20/g10/main.h0000644000175000017500000002604612635263103011334 00000000000000/* main.h * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 2008 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 3 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, see . */ #ifndef G10_MAIN_H #define G10_MAIN_H #include "types.h" #include "iobuf.h" #include "mpi.h" #include "cipher.h" #include "keydb.h" /* It could be argued that the default cipher should be 3DES rather than AES128, and the default compression should be 0 (i.e. uncompressed) rather than 1 (zip). However, the real world issues of speed and size come into play here. */ #if USE_AES # define DEFAULT_CIPHER_ALGO CIPHER_ALGO_AES #elif USE_CAST5 # define DEFAULT_CIPHER_ALGO CIPHER_ALGO_CAST5 #else # define DEFAULT_CIPHER_ALGO CIPHER_ALGO_3DES #endif #define DEFAULT_DIGEST_ALGO DIGEST_ALGO_SHA1 #define DEFAULT_COMPRESS_ALGO COMPRESS_ALGO_ZIP #define DEFAULT_S2K_DIGEST_ALGO DIGEST_ALGO_SHA1 #define S2K_DIGEST_ALGO (opt.s2k_digest_algo?opt.s2k_digest_algo:DEFAULT_S2K_DIGEST_ALGO) typedef struct { int header_okay; PK_LIST pk_list; DEK *symkey_dek; STRING2KEY *symkey_s2k; cipher_filter_context_t cfx; } encrypt_filter_context_t; struct groupitem { char *name; STRLIST values; struct groupitem *next; }; struct weakhash { int algo; int rejection_shown; struct weakhash *next; }; /*-- gpg.c --*/ extern int g10_errors_seen; #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) void g10_exit(int rc) __attribute__ ((noreturn)); #else void g10_exit(int rc); #endif void print_pubkey_algo_note( int algo ); void print_cipher_algo_note( int algo ); void print_digest_algo_note( int algo ); void additional_weak_digest (const char* digestname); /*-- armor.c --*/ char *make_radix64_string( const byte *data, size_t len ); int parse_key_failed_line (const void *lineptr, unsigned int len); /*-- misc.c --*/ void trap_unaligned(void); int disable_core_dumps(void); void register_secured_file (const char *fname); void unregister_secured_file (const char *fname); int is_secured_file (int fd); int is_secured_filename (const char *fname); u16 checksum_u16( unsigned n ); u16 checksum( byte *p, unsigned n ); u16 checksum_mpi( MPI a ); u32 buffer_to_u32( const byte *buffer ); const byte *get_session_marker( size_t *rlen ); int openpgp_cipher_test_algo( int algo ); int openpgp_pk_test_algo( int algo, unsigned int usage_flags ); int openpgp_pk_algo_usage ( int algo ); int openpgp_md_test_algo( int algo ); void md5_digest_warn (int show); void not_in_gpg1_notice (void); struct expando_args { PKT_public_key *pk; PKT_secret_key *sk; byte imagetype; int validity_info; const char *validity_string; }; char *pct_expando(const char *string,struct expando_args *args); void deprecated_warning(const char *configname,unsigned int configlineno, const char *option,const char *repl1,const char *repl2); void deprecated_command (const char *name); const char *compress_algo_to_string(int algo); int string_to_compress_algo(const char *string); int check_compress_algo(int algo); int default_cipher_algo(void); int default_compress_algo(void); const char *compliance_option_string(void); void compliance_failure(void); struct parse_options { char *name; unsigned int bit; char **value; char *help; }; char *optsep(char **stringp); char *argsplit(char *string); int parse_options(char *str,unsigned int *options, struct parse_options *opts,int noisy); char *unescape_percent_string (const unsigned char *s); char *default_homedir (void); const char *get_libexecdir (void); int path_access(const char *file,int mode); /*-- helptext.c --*/ void display_online_help( const char *keyword ); /*-- encode.c --*/ int setup_symkey(STRING2KEY **symkey_s2k,DEK **symkey_dek); int encode_symmetric( const char *filename ); int encode_store( const char *filename ); int encode_crypt( const char *filename, STRLIST remusr, int use_symkey ); void encode_crypt_files(int nfiles, char **files, STRLIST remusr); int encrypt_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); /*-- sign.c --*/ int complete_sig( PKT_signature *sig, PKT_secret_key *sk, MD_HANDLE md ); int sign_file( STRLIST filenames, int detached, STRLIST locusr, int do_encrypt, STRLIST remusr, const char *outfile ); int clearsign_file( const char *fname, STRLIST locusr, const char *outfile ); int sign_symencrypt_file (const char *fname, STRLIST locusr); /*-- sig-check.c --*/ int check_revocation_keys (PKT_public_key *pk, PKT_signature *sig); int check_backsig(PKT_public_key *main_pk,PKT_public_key *sub_pk, PKT_signature *backsig); int check_key_signature( KBNODE root, KBNODE node, int *is_selfsig ); int check_key_signature2( KBNODE root, KBNODE node, PKT_public_key *check_pk, PKT_public_key *ret_pk, int *is_selfsig, u32 *r_expiredate, int *r_expired ); /*-- delkey.c --*/ int delete_keys( STRLIST names, int secret, int allow_both ); /*-- keyedit.c --*/ void keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, int quiet, int seckey_check ); void show_basic_key_info (KBNODE keyblock); /*-- keygen.c --*/ u32 parse_expire_string(u32 timestamp,const char *string); u32 ask_expire_interval(u32 timestamp,int object,const char *def_expire); void generate_keypair( const char *fname, const char *card_serialno, const char *backup_encryption_dir ); int keygen_set_std_prefs (const char *string,int personal); PKT_user_id *keygen_get_std_prefs (void); int keygen_add_key_expire( PKT_signature *sig, void *opaque ); int keygen_add_std_prefs( PKT_signature *sig, void *opaque ); int keygen_upd_std_prefs( PKT_signature *sig, void *opaque ); int keygen_add_keyserver_url(PKT_signature *sig, void *opaque); int keygen_add_notations(PKT_signature *sig,void *opaque); int keygen_add_revkey(PKT_signature *sig, void *opaque); int make_backsig(PKT_signature *sig,PKT_public_key *pk, PKT_public_key *sub_pk,PKT_secret_key *sub_sk, u32 timestamp); int generate_subkeypair( KBNODE pub_keyblock, KBNODE sec_keyblock ); #ifdef ENABLE_CARD_SUPPORT int generate_card_subkeypair (KBNODE pub_keyblock, KBNODE sec_keyblock, int keyno, const char *serialno); int save_unprotected_key_to_card (PKT_secret_key *sk, int keyno); #endif /*-- openfile.c --*/ int overwrite_filep( const char *fname ); char *make_outfile_name( const char *iname ); char *ask_outfile_name( const char *name, size_t namelen ); int open_outfile( const char *iname, int mode, IOBUF *a ); char *get_matching_datafile (const char *sigfilename); IOBUF open_sigfile( const char *iname, progress_filter_context_t *pfx ); void try_make_homedir( const char *fname ); /*-- seskey.c --*/ void make_session_key( DEK *dek ); MPI encode_session_key( DEK *dek, unsigned nbits ); MPI pkcs1_encode_md( MD_HANDLE md, int algo, size_t len, unsigned nbits, const byte *asn, size_t asnlen ); MPI encode_md_value( PKT_public_key *pk, PKT_secret_key *sk, MD_HANDLE md, int hash_algo ); /*-- import.c --*/ typedef int (*import_filter_t)(kbnode_t keyblock, void *arg); int parse_import_options(char *str,unsigned int *options,int noisy); void import_keys( char **fnames, int nnames, void *stats_hd, unsigned int options ); int import_keys_stream (IOBUF inp,void *stats_hd,unsigned char **fpr, size_t *fpr_len,unsigned int options, import_filter_t filter, void *filter_arg, int *r_gpgkeys_err); void *import_new_stats_handle (void); void import_release_stats_handle (void *p); void import_print_stats (void *hd); int collapse_uids( KBNODE *keyblock ); int auto_create_card_key_stub ( const char *serialnostr, const unsigned char *fpr1, const unsigned char *fpr2, const unsigned char *fpr3); /*-- export.c --*/ int parse_export_options(char *str,unsigned int *options,int noisy); int export_pubkeys( STRLIST users, unsigned int options ); int export_pubkeys_stream( IOBUF out, STRLIST users, KBNODE *keyblock_out, unsigned int options ); int export_seckeys( STRLIST users ); int export_secsubkeys( STRLIST users ); /* dearmor.c --*/ int dearmor_file( const char *fname ); int enarmor_file( const char *fname ); /*-- revoke.c --*/ struct revocation_reason_info; int gen_revoke( const char *uname ); int gen_desig_revoke( const char *uname, STRLIST locusr); int revocation_reason_build_cb( PKT_signature *sig, void *opaque ); struct revocation_reason_info * ask_revocation_reason( int key_rev, int cert_rev, int hint ); void release_revocation_reason_info( struct revocation_reason_info *reason ); /*-- keylist.c --*/ void public_key_list( STRLIST list ); void secret_key_list( STRLIST list ); void print_subpackets_colon(PKT_signature *sig); void reorder_keyblock (KBNODE keyblock); void list_keyblock( KBNODE keyblock, int secret, int fpr, void *opaque ); void print_fingerprint (PKT_public_key *pk, PKT_secret_key *sk, int mode); void print_revokers(PKT_public_key *pk); void show_policy_url(PKT_signature *sig,int indent,int mode); void show_keyserver_url(PKT_signature *sig,int indent,int mode); void show_notation(PKT_signature *sig,int indent,int mode,int which); void dump_attribs(const PKT_user_id *uid, PKT_public_key *pk,PKT_secret_key *sk); void set_attrib_fd(int fd); void print_seckey_info (PKT_secret_key *sk); void print_pubkey_info (FILE *fp, PKT_public_key *pk); void print_card_key_info (FILE *fp, KBNODE keyblock); /*-- verify.c --*/ void print_file_status( int status, const char *name, int what ); int verify_signatures( int nfiles, char **files ); int verify_files( int nfiles, char **files ); /*-- decrypt.c --*/ int decrypt_message( const char *filename ); void decrypt_messages(int nfiles, char *files[]); /*-- plaintext.c --*/ int hash_datafiles( MD_HANDLE md, MD_HANDLE md2, STRLIST files, const char *sigfilename, int textmode ); PKT_plaintext *setup_plaintext_name(const char *filename,IOBUF iobuf); /*-- pipemode.c --*/ void run_in_pipemode (void); /*-- signal.c --*/ void init_signals(void); void pause_on_sigusr( int which ); void block_all_signals(void); void unblock_all_signals(void); #ifdef ENABLE_CARD_SUPPORT /*-- card-util.c --*/ void change_pin (int no, int allow_admin); void card_status (FILE *fp, char *serialno, size_t serialnobuflen); void card_edit (STRLIST commands); int card_generate_subkey (KBNODE pub_keyblock, KBNODE sec_keyblock); int card_store_subkey (KBNODE node, int use); #endif #define S2K_DECODE_COUNT(_val) ((16ul + ((_val) & 15)) << (((_val) >> 4) + 6)) #endif /*G10_MAIN_H*/ gnupg-1.4.20/g10/keyid.c0000644000175000017500000003710312635262326011512 00000000000000/* keyid.c - key ID and fingerprint handling * Copyright (C) 1998, 1999, 2000, 2001, 2003, * 2004 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 3 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, see . */ #include #include #include #include #include #include #include #include "util.h" #include "main.h" #include "packet.h" #include "options.h" #include "mpi.h" #include "keydb.h" #include "i18n.h" #include "host2net.h" #ifdef HAVE_UNSIGNED_TIME_T # define INVALID_TIME_CHECK(a) ((a) == (time_t)(-1)) #else /* Error or 32 bit time_t and value after 2038-01-19. */ # define INVALID_TIME_CHECK(a) ((a) < 0) #endif int pubkey_letter( int algo ) { switch( algo ) { case PUBKEY_ALGO_RSA: return 'R' ; case PUBKEY_ALGO_RSA_E: return 'r' ; case PUBKEY_ALGO_RSA_S: return 's' ; case PUBKEY_ALGO_ELGAMAL_E: return 'g'; case PUBKEY_ALGO_ELGAMAL: return 'G' ; case PUBKEY_ALGO_DSA: return 'D' ; case PUBKEY_ALGO_ECDSA: return 'E' ; /* ECC DSA (sign only) */ case PUBKEY_ALGO_ECDH: return 'e' ; /* ECC DH (encrypt only) */ case PUBKEY_ALGO_ECC: return 'C' ; /* ECC generic */ default: return '?'; } } /* This function is useful for v4 fingerprints and v3 or v4 key signing. */ void hash_public_key( MD_HANDLE md, PKT_public_key *pk ) { unsigned n=6; unsigned nb[PUBKEY_MAX_NPKEY]; unsigned nn[PUBKEY_MAX_NPKEY]; byte *pp[PUBKEY_MAX_NPKEY]; int i; int npkey = pubkey_get_npkey( pk->pubkey_algo ); /* Two extra bytes for the expiration date in v3 */ if(pk->version<4) n+=2; if(npkey==0 && pk->pkey[0] && mpi_is_opaque(pk->pkey[0])) { pp[0]=mpi_get_opaque(pk->pkey[0],&nn[0]); n+=nn[0]; } else for(i=0; i < npkey; i++ ) { nb[i] = mpi_get_nbits(pk->pkey[i]); pp[i] = mpi_get_buffer( pk->pkey[i], nn+i, NULL ); n += 2 + nn[i]; } md_putc( md, 0x99 ); /* ctb */ /* What does it mean if n is greater than than 0xFFFF ? */ md_putc( md, n >> 8 ); /* 2 byte length header */ md_putc( md, n ); md_putc( md, pk->version ); md_putc( md, pk->timestamp >> 24 ); md_putc( md, pk->timestamp >> 16 ); md_putc( md, pk->timestamp >> 8 ); md_putc( md, pk->timestamp ); if(pk->version<4) { u16 days=0; if(pk->expiredate) days=(u16)((pk->expiredate - pk->timestamp) / 86400L); md_putc( md, days >> 8 ); md_putc( md, days ); } md_putc( md, pk->pubkey_algo ); if(npkey==0 && pk->pkey[0] && mpi_is_opaque(pk->pkey[0])) { if (pp[0]) md_write(md,pp[0],nn[0]); } else for(i=0; i < npkey; i++ ) { md_putc( md, nb[i]>>8); md_putc( md, nb[i] ); if (pp[i]) md_write( md, pp[i], nn[i] ); xfree(pp[i]); } } static MD_HANDLE do_fingerprint_md( PKT_public_key *pk ) { MD_HANDLE md; md = md_open( DIGEST_ALGO_SHA1, 0); hash_public_key(md,pk); md_final( md ); return md; } static MD_HANDLE do_fingerprint_md_sk( PKT_secret_key *sk ) { PKT_public_key pk; int npkey = pubkey_get_npkey( sk->pubkey_algo ); /* npkey is correct! */ int i; if(npkey==0) return NULL; pk.pubkey_algo = sk->pubkey_algo; pk.version = sk->version; pk.timestamp = sk->timestamp; pk.expiredate = sk->expiredate; pk.pubkey_algo = sk->pubkey_algo; for( i=0; i < npkey; i++ ) pk.pkey[i] = sk->skey[i]; return do_fingerprint_md( &pk ); } size_t keystrlen(void) { switch(opt.keyid_format) { case KF_SHORT: return 8; case KF_LONG: return 16; case KF_0xSHORT: return 10; case KF_0xLONG: return 18; default: BUG(); } } const char * keystr(u32 *keyid) { static char keyid_str[19]; switch(opt.keyid_format) { case KF_SHORT: sprintf(keyid_str,"%08lX",(ulong)keyid[1]); break; case KF_LONG: if(keyid[0]) sprintf(keyid_str,"%08lX%08lX",(ulong)keyid[0],(ulong)keyid[1]); else sprintf(keyid_str,"%08lX",(ulong)keyid[1]); break; case KF_0xSHORT: sprintf(keyid_str,"0x%08lX",(ulong)keyid[1]); break; case KF_0xLONG: if(keyid[0]) sprintf(keyid_str,"0x%08lX%08lX",(ulong)keyid[0],(ulong)keyid[1]); else sprintf(keyid_str,"0x%08lX",(ulong)keyid[1]); break; default: BUG(); } return keyid_str; } const char * keystr_from_pk(PKT_public_key *pk) { keyid_from_pk(pk,NULL); return keystr(pk->keyid); } const char * keystr_from_sk(PKT_secret_key *sk) { keyid_from_sk(sk,NULL); return keystr(sk->keyid); } const char * keystr_from_desc(KEYDB_SEARCH_DESC *desc) { switch(desc->mode) { case KEYDB_SEARCH_MODE_LONG_KID: case KEYDB_SEARCH_MODE_SHORT_KID: return keystr(desc->u.kid); case KEYDB_SEARCH_MODE_FPR20: { u32 keyid[2]; keyid[0] = buf32_to_u32 (desc->u.fpr+12); keyid[1] = buf32_to_u32 (desc->u.fpr+16); return keystr(keyid); } case KEYDB_SEARCH_MODE_FPR16: return "?v3 fpr?"; default: BUG(); } } /**************** * Get the keyid from the secret key and put it into keyid * if this is not NULL. Return the 32 low bits of the keyid. */ u32 keyid_from_sk( PKT_secret_key *sk, u32 *keyid ) { u32 lowbits; u32 dummy_keyid[2]; if( !keyid ) keyid = dummy_keyid; if( sk->keyid[0] || sk->keyid[1] ) { keyid[0] = sk->keyid[0]; keyid[1] = sk->keyid[1]; lowbits = keyid[1]; } else if( sk->version < 4 ) { if( is_RSA(sk->pubkey_algo) ) { lowbits = pubkey_get_npkey(sk->pubkey_algo) ? mpi_get_keyid( sk->skey[0], keyid ) : 0; /* take n */ sk->keyid[0]=keyid[0]; sk->keyid[1]=keyid[1]; } else sk->keyid[0]=sk->keyid[1]=keyid[0]=keyid[1]=lowbits=0xFFFFFFFF; } else { const byte *dp; MD_HANDLE md; md = do_fingerprint_md_sk(sk); if(md) { dp = md_read( md, 0 ); keyid[0] = buf32_to_u32 (dp+12); keyid[1] = buf32_to_u32 (dp+16); lowbits = keyid[1]; md_close(md); sk->keyid[0] = keyid[0]; sk->keyid[1] = keyid[1]; } else sk->keyid[0]=sk->keyid[1]=keyid[0]=keyid[1]=lowbits=0xFFFFFFFF; } return lowbits; } /**************** * Get the keyid from the public key and put it into keyid * if this is not NULL. Return the 32 low bits of the keyid. */ u32 keyid_from_pk( PKT_public_key *pk, u32 *keyid ) { u32 lowbits; u32 dummy_keyid[2]; if( !keyid ) keyid = dummy_keyid; if( pk->keyid[0] || pk->keyid[1] ) { keyid[0] = pk->keyid[0]; keyid[1] = pk->keyid[1]; lowbits = keyid[1]; } else if( pk->version < 4 ) { if( is_RSA(pk->pubkey_algo) ) { lowbits = pubkey_get_npkey(pk->pubkey_algo) ? mpi_get_keyid( pk->pkey[0], keyid ) : 0 ; /* from n */ pk->keyid[0] = keyid[0]; pk->keyid[1] = keyid[1]; } else pk->keyid[0]=pk->keyid[1]=keyid[0]=keyid[1]=lowbits=0xFFFFFFFF; } else { const byte *dp; MD_HANDLE md; md = do_fingerprint_md(pk); if(md) { dp = md_read( md, 0 ); keyid[0] = buf32_to_u32 (dp+12); keyid[1] = buf32_to_u32 (dp+16); lowbits = keyid[1]; md_close(md); pk->keyid[0] = keyid[0]; pk->keyid[1] = keyid[1]; } else pk->keyid[0]=pk->keyid[1]=keyid[0]=keyid[1]=lowbits=0xFFFFFFFF; } return lowbits; } /**************** * Get the keyid from the fingerprint. This function is simple for most * keys, but has to do a keylookup for old stayle keys. */ u32 keyid_from_fingerprint( const byte *fprint, size_t fprint_len, u32 *keyid ) { u32 dummy_keyid[2]; if( !keyid ) keyid = dummy_keyid; if( fprint_len != 20 ) { /* This is special as we have to lookup the key first */ PKT_public_key pk; int rc; memset( &pk, 0, sizeof pk ); rc = get_pubkey_byfprint( &pk, fprint, fprint_len ); if( rc ) { log_error("Oops: keyid_from_fingerprint: no pubkey\n"); keyid[0] = 0; keyid[1] = 0; } else keyid_from_pk( &pk, keyid ); } else { const byte *dp = fprint; keyid[0] = buf32_to_u32 (dp+12); keyid[1] = buf32_to_u32 (dp+16); } return keyid[1]; } u32 keyid_from_sig( PKT_signature *sig, u32 *keyid ) { if( keyid ) { keyid[0] = sig->keyid[0]; keyid[1] = sig->keyid[1]; } return sig->keyid[1]; } byte * namehash_from_uid(PKT_user_id *uid) { if(uid->namehash==NULL) { uid->namehash=xmalloc(20); if(uid->attrib_data) rmd160_hash_buffer(uid->namehash,uid->attrib_data,uid->attrib_len); else rmd160_hash_buffer(uid->namehash,uid->name,uid->len); } return uid->namehash; } /**************** * return the number of bits used in the pk */ unsigned nbits_from_pk( PKT_public_key *pk ) { return pubkey_nbits( pk->pubkey_algo, pk->pkey ); } /**************** * return the number of bits used in the sk */ unsigned nbits_from_sk( PKT_secret_key *sk ) { return pubkey_nbits( sk->pubkey_algo, sk->skey ); } static const char * mk_datestr (char *buffer, time_t atime) { struct tm *tp; if (INVALID_TIME_CHECK (atime)) strcpy (buffer, "????" "-??" "-??"); /* Mark this as invalid. */ else { tp = gmtime (&atime); sprintf (buffer,"%04d-%02d-%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); } return buffer; } /**************** * return a string with the creation date of the pk * Note: this is alloced in a static buffer. * Format is: yyyy-mm-dd */ const char * datestr_from_pk( PKT_public_key *pk ) { static char buffer[11+5]; time_t atime = pk->timestamp; return mk_datestr (buffer, atime); } const char * datestr_from_sk( PKT_secret_key *sk ) { static char buffer[11+5]; time_t atime = sk->timestamp; return mk_datestr (buffer, atime); } const char * datestr_from_sig( PKT_signature *sig ) { static char buffer[11+5]; time_t atime = sig->timestamp; return mk_datestr (buffer, atime); } const char * expirestr_from_pk( PKT_public_key *pk ) { static char buffer[11+5]; time_t atime; if( !pk->expiredate ) return _("never "); atime = pk->expiredate; return mk_datestr (buffer, atime); } const char * expirestr_from_sk( PKT_secret_key *sk ) { static char buffer[11+5]; time_t atime; if( !sk->expiredate ) return _("never "); atime = sk->expiredate; return mk_datestr (buffer, atime); } const char * expirestr_from_sig( PKT_signature *sig ) { static char buffer[11+5]; time_t atime; if(!sig->expiredate) return _("never "); atime=sig->expiredate; return mk_datestr (buffer, atime); } const char * revokestr_from_pk( PKT_public_key *pk ) { static char buffer[11+5]; time_t atime; if(!pk->revoked.date) return _("never "); atime=pk->revoked.date; return mk_datestr (buffer, atime); } const char * usagestr_from_pk( PKT_public_key *pk ) { static char buffer[10]; int i = 0; unsigned int use = pk->pubkey_usage; if ( use & PUBKEY_USAGE_SIG ) buffer[i++] = 'S'; if ( use & PUBKEY_USAGE_CERT ) buffer[i++] = 'C'; if ( use & PUBKEY_USAGE_ENC ) buffer[i++] = 'E'; if ( (use & PUBKEY_USAGE_AUTH) ) buffer[i++] = 'A'; while (i < 4) buffer[i++] = ' '; buffer[i] = 0; return buffer; } const char * colon_strtime (u32 t) { if (!t) return ""; if (opt.fixed_list_mode) { static char buf[15]; sprintf (buf, "%lu", (ulong)t); return buf; } return strtimestamp(t); } const char * colon_datestr_from_pk (PKT_public_key *pk) { if (opt.fixed_list_mode) { static char buf[15]; sprintf (buf, "%lu", (ulong)pk->timestamp); return buf; } return datestr_from_pk (pk); } const char * colon_datestr_from_sk (PKT_secret_key *sk) { if (opt.fixed_list_mode) { static char buf[15]; sprintf (buf, "%lu", (ulong)sk->timestamp); return buf; } return datestr_from_sk (sk); } const char * colon_datestr_from_sig (PKT_signature *sig) { if (opt.fixed_list_mode) { static char buf[15]; sprintf (buf, "%lu", (ulong)sig->timestamp); return buf; } return datestr_from_sig (sig); } const char * colon_expirestr_from_sig (PKT_signature *sig) { if(!sig->expiredate) return ""; if (opt.fixed_list_mode) { static char buf[15]; sprintf (buf, "%lu", (ulong)sig->expiredate); return buf; } return expirestr_from_sig (sig); } /**************** . * Return a byte array with the fingerprint for the given PK/SK * The length of the array is returned in ret_len. Caller must free * the array or provide an array of length MAX_FINGERPRINT_LEN. */ byte * fingerprint_from_pk( PKT_public_key *pk, byte *array, size_t *ret_len ) { byte *p, *buf; const byte *dp; size_t len; unsigned int n; if( pk->version < 4 ) { if( is_RSA(pk->pubkey_algo) ) { /* RSA in version 3 packets is special */ MD_HANDLE md; md = md_open( DIGEST_ALGO_MD5, 0); if( pubkey_get_npkey( pk->pubkey_algo ) > 1 ) { p = buf = mpi_get_buffer( pk->pkey[0], &n, NULL ); md_write( md, p, n ); xfree(buf); p = buf = mpi_get_buffer( pk->pkey[1], &n, NULL ); md_write( md, p, n ); xfree(buf); } md_final(md); if( !array ) array = xmalloc( 16 ); len = 16; memcpy(array, md_read(md, DIGEST_ALGO_MD5), 16 ); md_close(md); } else { if(!array) array=xmalloc(16); len=16; memset(array,0,16); } } else { MD_HANDLE md; md = do_fingerprint_md(pk); dp = md_read( md, 0 ); len = md_digest_length( md_get_algo( md ) ); assert( len <= MAX_FINGERPRINT_LEN ); if( !array ) array = xmalloc( len ); memcpy(array, dp, len ); pk->keyid[0] = buf32_to_u32 (dp+12); pk->keyid[1] = buf32_to_u32 (dp+16); md_close(md); } *ret_len = len; return array; } byte * fingerprint_from_sk( PKT_secret_key *sk, byte *array, size_t *ret_len ) { byte *p, *buf; const char *dp; size_t len; unsigned n; if( sk->version < 4 ) { if( is_RSA(sk->pubkey_algo) ) { /* RSA in version 3 packets is special */ MD_HANDLE md; md = md_open( DIGEST_ALGO_MD5, 0); if( pubkey_get_npkey( sk->pubkey_algo ) > 1 ) { p = buf = mpi_get_buffer( sk->skey[0], &n, NULL ); md_write( md, p, n ); xfree(buf); p = buf = mpi_get_buffer( sk->skey[1], &n, NULL ); md_write( md, p, n ); xfree(buf); } md_final(md); if( !array ) array = xmalloc( 16 ); len = 16; memcpy(array, md_read(md, DIGEST_ALGO_MD5), 16 ); md_close(md); } else { if(!array) array=xmalloc(16); len=16; memset(array,0,16); } } else { MD_HANDLE md; md = do_fingerprint_md_sk(sk); if(md) { dp = md_read( md, 0 ); len = md_digest_length( md_get_algo( md ) ); assert( len <= MAX_FINGERPRINT_LEN ); if( !array ) array = xmalloc( len ); memcpy(array, dp, len ); md_close(md); } else { len=MAX_FINGERPRINT_LEN; if(!array) array=xmalloc(len); memset(array,0,len); } } *ret_len = len; return array; } gnupg-1.4.20/g10/skclist.c0000644000175000017500000001315512635262326012062 00000000000000/* skclist.c * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" #include "memory.h" #include "util.h" #include "i18n.h" #include "cipher.h" void release_sk_list( SK_LIST sk_list ) { SK_LIST sk_rover; for( ; sk_list; sk_list = sk_rover ) { sk_rover = sk_list->next; free_secret_key( sk_list->sk ); xfree( sk_list ); } } /* Check that we are only using keys which don't have * the string "(insecure!)" or "not secure" or "do not use" * in one of the user ids */ static int is_insecure( PKT_secret_key *sk ) { u32 keyid[2]; KBNODE node = NULL, u; int insecure = 0; keyid_from_sk( sk, keyid ); node = get_pubkeyblock( keyid ); for ( u = node; u; u = u->next ) { if ( u->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *id = u->pkt->pkt.user_id; if ( id->attrib_data ) continue; /* skip attribute packets */ if ( strstr( id->name, "(insecure!)" ) || strstr( id->name, "not secure" ) || strstr( id->name, "do not use" ) || strstr( id->name, "(INSECURE!)" ) ) { insecure = 1; break; } } } release_kbnode( node ); return insecure; } static int key_present_in_sk_list(SK_LIST sk_list, PKT_secret_key *sk) { for (; sk_list; sk_list = sk_list->next) { if ( !cmp_secret_keys(sk_list->sk, sk) ) return 0; } return -1; } static int is_duplicated_entry (STRLIST list, STRLIST item) { for(; list && list != item; list = list->next) { if ( !strcmp (list->d, item->d) ) return 1; } return 0; } int build_sk_list( STRLIST locusr, SK_LIST *ret_sk_list, int unlock, unsigned int use ) { SK_LIST sk_list = NULL; int rc; if( !locusr ) { /* use the default one */ PKT_secret_key *sk; sk = xmalloc_clear( sizeof *sk ); sk->req_usage = use; if( (rc = get_seckey_byname( sk, NULL, unlock )) ) { free_secret_key( sk ); sk = NULL; log_error("no default secret key: %s\n", g10_errstr(rc) ); } else if( !(rc=check_pubkey_algo2(sk->pubkey_algo, use)) ) { SK_LIST r; if( random_is_faked() && !is_insecure( sk ) ) { log_info(_("key is not flagged as insecure - " "can't use it with the faked RNG!\n")); free_secret_key( sk ); sk = NULL; } else { r = xmalloc( sizeof *r ); r->sk = sk; sk = NULL; r->next = sk_list; r->mark = 0; sk_list = r; } } else { free_secret_key( sk ); sk = NULL; log_error("invalid default secret key: %s\n", g10_errstr(rc) ); } } else { STRLIST locusr_orig = locusr; for(; locusr; locusr = locusr->next ) { PKT_secret_key *sk; rc = 0; /* Do an early check agains duplicated entries. However this * won't catch all duplicates because the user IDs may be * specified in different ways. */ if ( is_duplicated_entry ( locusr_orig, locusr ) ) { log_info (_("skipped \"%s\": duplicated\n"), locusr->d ); continue; } sk = xmalloc_clear( sizeof *sk ); sk->req_usage = use; if( (rc = get_seckey_byname( sk, locusr->d, 0 )) ) { free_secret_key( sk ); sk = NULL; log_error(_("skipped \"%s\": %s\n"), locusr->d, g10_errstr(rc) ); } else if ( key_present_in_sk_list(sk_list, sk) == 0) { free_secret_key(sk); sk = NULL; log_info(_("skipped: secret key already present\n")); } else if ( unlock && (rc = check_secret_key( sk, 0 )) ) { free_secret_key( sk ); sk = NULL; log_error(_("skipped \"%s\": %s\n"), locusr->d, g10_errstr(rc) ); } else if( !(rc=check_pubkey_algo2(sk->pubkey_algo, use)) ) { SK_LIST r; if( sk->version == 4 && (use & PUBKEY_USAGE_SIG) && sk->pubkey_algo == PUBKEY_ALGO_ELGAMAL_E ) { log_info(_("skipped \"%s\": %s\n"),locusr->d, _("this is a PGP generated Elgamal key which" " is not secure for signatures!")); free_secret_key( sk ); sk = NULL; } else if( random_is_faked() && !is_insecure( sk ) ) { log_info(_("key is not flagged as insecure - " "can't use it with the faked RNG!\n")); free_secret_key( sk ); sk = NULL; } else { r = xmalloc( sizeof *r ); r->sk = sk; sk = NULL; r->next = sk_list; r->mark = 0; sk_list = r; } } else { free_secret_key( sk ); sk = NULL; log_error("skipped \"%s\": %s\n", locusr->d, g10_errstr(rc) ); } } } if( !rc && !sk_list ) { log_error("no valid signators\n"); rc = G10ERR_NO_USER_ID; } if( rc ) release_sk_list( sk_list ); else *ret_sk_list = sk_list; return rc; } gnupg-1.4.20/g10/keyedit.c0000644000175000017500000043006512635262326012047 00000000000000/* keyedit.c - keyedit stuff * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 2008 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 3 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, see . */ #include #include #include #include #include #include #include #ifdef HAVE_LIBREADLINE #include #include #endif #include "options.h" #include "packet.h" #include "errors.h" #include "iobuf.h" #include "keydb.h" #include "memory.h" #include "photoid.h" #include "util.h" #include "main.h" #include "trustdb.h" #include "filter.h" #include "ttyio.h" #include "status.h" #include "i18n.h" #include "keyserver-internal.h" static void show_prefs( PKT_user_id *uid, PKT_signature *selfsig, int verbose); static void show_names(KBNODE keyblock,PKT_public_key *pk, unsigned int flag,int with_prefs); static void show_key_with_all_names( KBNODE keyblock, int only_marked, int with_revoker, int with_fpr, int with_subkeys, int with_prefs ); static void show_key_and_fingerprint( KBNODE keyblock ); static void subkey_expire_warning (kbnode_t keyblock); static int menu_adduid( KBNODE keyblock, KBNODE sec_keyblock, int photo, const char *photo_name ); static void menu_deluid( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_delsig( KBNODE pub_keyblock ); static int menu_clean(KBNODE keyblock,int self_only); static void menu_delkey( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_addrevoker( KBNODE pub_keyblock, KBNODE sec_keyblock, int sensitive ); static int menu_expire( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_backsign(KBNODE pub_keyblock,KBNODE sec_keyblock); static int menu_set_primary_uid( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_set_preferences( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_set_keyserver_url (const char *url, KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_set_notation(const char *string, KBNODE pub_keyblock,KBNODE sec_keyblock); static int menu_select_uid( KBNODE keyblock, int idx ); static int menu_select_uid_namehash( KBNODE keyblock, const char *namehash ); 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 real_uids_left( KBNODE keyblock ); static int count_selected_keys( KBNODE keyblock ); static int menu_revsig( KBNODE keyblock ); static int menu_revuid( KBNODE keyblock, KBNODE sec_keyblock ); static int menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int menu_revsubkey( KBNODE pub_keyblock, KBNODE sec_keyblock ); static int enable_disable_key( KBNODE keyblock, int disable ); static void menu_showphoto( KBNODE keyblock ); static int update_trust=0; #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_DELSIG (1<<5) /* to be deleted */ #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_attrib { int non_exportable,non_revocable; struct revocation_reason_info *reason; byte trust_depth,trust_value; char *trust_regexp; }; #ifdef ENABLE_CARD_SUPPORT /* Given a node SEC_NODE with a secret key or subkey, locate the corresponding public key from pub_keyblock. */ static PKT_public_key * find_pk_from_sknode (KBNODE pub_keyblock, KBNODE sec_node) { KBNODE node = pub_keyblock; PKT_secret_key *sk; PKT_public_key *pk; if (sec_node->pkt->pkttype == PKT_SECRET_KEY && node->pkt->pkttype == PKT_PUBLIC_KEY) return node->pkt->pkt.public_key; if (sec_node->pkt->pkttype != PKT_SECRET_SUBKEY) return NULL; sk = sec_node->pkt->pkt.secret_key; for (; node; node = node->next) if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) { pk = node->pkt->pkt.public_key; if (pk->keyid[0] == sk->keyid[0] && pk->keyid[1] == sk->keyid[1]) return pk; } return NULL; } #endif /* ENABLE_CARD_SUPPORT */ /* TODO: Fix duplicated code between here and the check-sigs/list-sigs code in keylist.c. */ static int print_and_check_one_sig_colon( 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; /* TODO: Make sure a cached sig record here still has the pk that issued it. See also keylist.c:list_keyblock_print */ 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: case G10ERR_UNU_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 ) { printf("sig:%c::%d:%08lX%08lX:%lu:%lu:", sigrc,sig->pubkey_algo,(ulong)sig->keyid[0],(ulong)sig->keyid[1], (ulong)sig->timestamp,(ulong)sig->expiredate); if(sig->trust_depth || sig->trust_value) printf("%d %d",sig->trust_depth,sig->trust_value); printf(":"); if(sig->trust_regexp) print_string(stdout,sig->trust_regexp,strlen(sig->trust_regexp),':'); printf("::%02x%c\n",sig->sig_class,sig->flags.exportable?'x':'l'); if(opt.show_subpackets) print_subpackets_colon(sig); } return (sigrc == '!'); } /**************** * Print information about a signature, check 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; /* TODO: Make sure a cached sig record here still has the pk that issued it. See also keylist.c:list_keyblock_print */ 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: case G10ERR_UNU_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%c %c%c%c%c%c%c %s %s", is_rev? "rev":"sig",sigrc, (sig->sig_class-0x10>0 && sig->sig_class-0x10<4)?'0'+sig->sig_class-0x10:' ', sig->flags.exportable?' ':'L', sig->flags.revocable?' ':'R', sig->flags.policy_url?'P':' ', sig->flags.notation?'N':' ', sig->flags.expired?'X':' ', (sig->trust_depth>9)?'T': (sig->trust_depth>0)?'0'+sig->trust_depth:' ', keystr(sig->keyid),datestr_from_sig(sig)); if(opt.list_options&LIST_SHOW_SIG_EXPIRE) tty_printf(" %s",expirestr_from_sig(sig)); tty_printf(" "); 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_utf8_string2(p, n, opt.screen_columns-keystrlen()-26- ((opt.list_options&LIST_SHOW_SIG_EXPIRE)?11:0)); xfree(p); } tty_printf("\n"); if(sig->flags.policy_url && (opt.list_options&LIST_SHOW_POLICY_URLS)) show_policy_url(sig,3,0); if(sig->flags.notation && (opt.list_options&LIST_SHOW_NOTATIONS)) show_notation(sig,3,0, ((opt.list_options&LIST_SHOW_STD_NOTATIONS)?1:0)+ ((opt.list_options&LIST_SHOW_USER_NOTATIONS)?2:0)); if(sig->flags.pref_ks && (opt.list_options&LIST_SHOW_KEYSERVER_URLS)) show_keyserver_url(sig,3,0); } 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_utf8_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") ); 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; } static int sign_mk_attrib( PKT_signature *sig, void *opaque ) { struct sign_attrib *attrib = opaque; byte buf[8]; if( attrib->non_exportable ) { buf[0] = 0; /* not exportable */ build_sig_subpkt( sig, SIGSUBPKT_EXPORTABLE, buf, 1 ); } if( attrib->non_revocable ) { buf[0] = 0; /* not revocable */ build_sig_subpkt( sig, SIGSUBPKT_REVOCABLE, buf, 1 ); } if( attrib->reason ) revocation_reason_build_cb( sig, attrib->reason ); if(attrib->trust_depth) { /* Not critical. If someone doesn't understand trust sigs, this can still be a valid regular signature. */ buf[0] = attrib->trust_depth; buf[1] = attrib->trust_value; build_sig_subpkt(sig,SIGSUBPKT_TRUST,buf,2); /* Critical. If someone doesn't understands regexps, this whole sig should be invalid. Note the +1 for the length - regexps are null terminated. */ if(attrib->trust_regexp) build_sig_subpkt(sig,SIGSUBPKT_FLAG_CRITICAL|SIGSUBPKT_REGEXP, attrib->trust_regexp, strlen(attrib->trust_regexp)+1); } return 0; } static void trustsig_prompt(byte *trust_value,byte *trust_depth,char **regexp) { char *p; *trust_value=0; *trust_depth=0; *regexp=NULL; /* Same string as pkclist.c:do_edit_ownertrust */ tty_printf(_("Please decide how far you trust this user to correctly verify" " other users' keys\n(by looking at passports, checking" " fingerprints from different sources, etc.)\n")); tty_printf("\n"); tty_printf (_(" %d = I trust marginally\n"), 1); tty_printf (_(" %d = I trust fully\n"), 2); tty_printf("\n"); while(*trust_value==0) { p = cpr_get("trustsig_prompt.trust_value",_("Your selection? ")); trim_spaces(p); cpr_kill_prompt(); /* 60 and 120 are as per RFC2440 */ if(p[0]=='1' && !p[1]) *trust_value=60; else if(p[0]=='2' && !p[1]) *trust_value=120; xfree(p); } tty_printf("\n"); tty_printf(_( "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n")); tty_printf("\n"); while(*trust_depth==0) { p = cpr_get("trustsig_prompt.trust_depth",_("Your selection? ")); trim_spaces(p); cpr_kill_prompt(); *trust_depth=atoi(p); xfree(p); } tty_printf("\n"); tty_printf(_("Please enter a domain to restrict this signature, " "or enter for none.\n")); tty_printf("\n"); p=cpr_get("trustsig_prompt.trust_regexp",_("Your selection? ")); trim_spaces(p); cpr_kill_prompt(); if(strlen(p)>0) { char *q=p; int regexplen=100,ind; *regexp=xmalloc(regexplen); /* Now mangle the domain the user entered into a regexp. To do this, \-escape everything that isn't alphanumeric, and attach "<[^>]+[@.]" to the front, and ">$" to the end. */ strcpy(*regexp,"<[^>]+[@.]"); ind=strlen(*regexp); while(*q) { if(!((*q>='A' && *q<='Z') || (*q>='a' && *q<='z') || (*q>='0' && *q<='9'))) (*regexp)[ind++]='\\'; (*regexp)[ind++]=*q; if((regexplen-ind)<3) { regexplen+=100; *regexp=xrealloc(*regexp,regexplen); } q++; } (*regexp)[ind]='\0'; strcat(*regexp,">$"); } xfree(p); tty_printf("\n"); } /**************** * 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 nonrevocable, int trust, int interactive ) { 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) || interactive; int all_v3=1; u32 timestamp=make_timestamp(); /* Are there any non-v3 sigs on this key already? */ if(PGP2) for(node=keyblock;node;node=node->next) if(node->pkt->pkttype==PKT_SIGNATURE && node->pkt->pkt.signature->version>3) { all_v3=0; break; } /* build a list of all signators. * * We use the CERT flag to request the primary which must always * be one which is capable of signing keys. I can't see a reason * why to sign keys using a subkey. Implementation of USAGE_CERT * is just a hack in getkey.c and does not mean that a subkey * marked as certification capable will be used. */ rc=build_sk_list( locusr, &sk_list, 0, PUBKEY_USAGE_CERT); if( rc ) goto leave; /* loop over all signators */ for( sk_rover = sk_list; sk_rover; sk_rover = sk_rover->next ) { u32 sk_keyid[2],pk_keyid[2]; char *p,*trust_regexp=NULL; int force_v4=0,class=0,selfsig=0; u32 duration=0; byte trust_depth=0,trust_value=0; if(local || nonrevocable || trust || opt.cert_policy_url || opt.cert_notations) force_v4=1; /* 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_PUBLIC_KEY ) { primary_pk=node->pkt->pkt.public_key; keyid_from_pk( primary_pk, pk_keyid ); /* Is this a self-sig? */ if(pk_keyid[0]==sk_keyid[0] && pk_keyid[1]==sk_keyid[1]) { selfsig=1; /* Do not force a v4 sig here, otherwise it would be difficult to remake a v3 selfsig. If this is a v3->v4 promotion case, then we set force_v4 later anyway. */ force_v4=0; } } else if( node->pkt->pkttype == PKT_USER_ID ) { uidnode = (node->flag & NODFLG_MARK_A)? node : NULL; if(uidnode) { int yesreally=0; char *user=utf8_to_native(uidnode->pkt->pkt.user_id->name, uidnode->pkt->pkt.user_id->len, 0); if(uidnode->pkt->pkt.user_id->is_revoked) { tty_printf(_("User ID \"%s\" is revoked."),user); if(selfsig) tty_printf("\n"); else if(opt.expert) { tty_printf("\n"); /* No, so remove the mark and continue */ if(!cpr_get_answer_is_yes("sign_uid.revoke_okay", _("Are you sure you " "still want to sign " "it? (y/N) "))) { uidnode->flag &= ~NODFLG_MARK_A; uidnode=NULL; } else if(interactive) yesreally=1; } else { uidnode->flag &= ~NODFLG_MARK_A; uidnode=NULL; tty_printf(_(" Unable to sign.\n")); } } else if(uidnode->pkt->pkt.user_id->is_expired) { tty_printf(_("User ID \"%s\" is expired."),user); if(selfsig) tty_printf("\n"); else if(opt.expert) { tty_printf("\n"); /* No, so remove the mark and continue */ if(!cpr_get_answer_is_yes("sign_uid.expire_okay", _("Are you sure you " "still want to sign " "it? (y/N) "))) { uidnode->flag &= ~NODFLG_MARK_A; uidnode=NULL; } else if(interactive) yesreally=1; } else { uidnode->flag &= ~NODFLG_MARK_A; uidnode=NULL; tty_printf(_(" Unable to sign.\n")); } } else if(!uidnode->pkt->pkt.user_id->created && !selfsig) { tty_printf(_("User ID \"%s\" is not self-signed."), user); if(opt.expert) { tty_printf("\n"); /* No, so remove the mark and continue */ if(!cpr_get_answer_is_yes("sign_uid.nosig_okay", _("Are you sure you " "still want to sign " "it? (y/N) "))) { uidnode->flag &= ~NODFLG_MARK_A; uidnode=NULL; } else if(interactive) yesreally=1; } else { uidnode->flag &= ~NODFLG_MARK_A; uidnode=NULL; tty_printf(_(" Unable to sign.\n")); } } if(uidnode && interactive && !yesreally) { tty_printf(_("User ID \"%s\" is signable. "),user); if(!cpr_get_answer_is_yes("sign_uid.sign_okay", _("Sign it? (y/N) "))) { uidnode->flag &= ~NODFLG_MARK_A; uidnode=NULL; } } xfree(user); } } 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] ) { char buf[50]; char *user=utf8_to_native(uidnode->pkt->pkt.user_id->name, uidnode->pkt->pkt.user_id->len, 0); /* It's a v3 self-sig. Make it into a v4 self-sig? */ if(node->pkt->pkt.signature->version<4 && selfsig) { tty_printf(_("The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n"),user); /* Note that the regular PGP2 warning below still applies if there are no v4 sigs on this key at all. */ if(opt.expert) if(cpr_get_answer_is_yes("sign_uid.v4_promote_okay", _("Do you want to promote " "it to an OpenPGP self-" "signature? (y/N) "))) { force_v4=1; node->flag|=NODFLG_DELSIG; xfree(user); continue; } } /* Is the current signature expired? */ if(node->pkt->pkt.signature->flags.expired) { tty_printf(_("Your current signature on \"%s\"\n" "has expired.\n"),user); if(cpr_get_answer_is_yes("sign_uid.replace_expired_okay", _("Do you want to issue a " "new signature to replace " "the expired one? (y/N) "))) { /* Mark these for later deletion. We don't want to delete them here, just in case the replacement signature doesn't happen for some reason. We only delete these after the replacement is already in place. */ node->flag|=NODFLG_DELSIG; xfree(user); continue; } } if(!node->pkt->pkt.signature->flags.exportable && !local) { /* It's a local sig, and we want to make a exportable sig. */ tty_printf(_("Your current signature on \"%s\"\n" "is a local signature.\n"),user); if(cpr_get_answer_is_yes("sign_uid.local_promote_okay", _("Do you want to promote " "it to a full exportable " "signature? (y/N) "))) { /* Mark these for later deletion. We don't want to delete them here, just in case the replacement signature doesn't happen for some reason. We only delete these after the replacement is already in place. */ node->flag|=NODFLG_DELSIG; xfree(user); continue; } } /* Fixme: see whether there is a revocation in which * case we should allow to sign it again. */ if (!node->pkt->pkt.signature->flags.exportable && local) tty_printf(_( "\"%s\" was already locally signed by key %s\n"), user,keystr_from_sk(sk)); else tty_printf(_("\"%s\" was already signed by key %s\n"), user,keystr_from_sk(sk)); if(opt.expert && cpr_get_answer_is_yes("sign_uid.dupe_okay", _("Do you want to sign it " "again anyway? (y/N) "))) { /* Don't delete the old sig here since this is an --expert thing. */ xfree(user); continue; } sprintf (buf, "%08lX%08lX", (ulong)sk->keyid[0], (ulong)sk->keyid[1] ); write_status_text (STATUS_ALREADY_SIGNED, buf); uidnode->flag &= ~NODFLG_MARK_A; /* remove mark */ xfree(user); } } } /* check whether any uids are left for signing */ if( !count_uids_with_flag(keyblock, NODFLG_MARK_A) ) { tty_printf(_("Nothing to sign with key %s\n"),keystr_from_sk(sk)); continue; } /* Ask whether we really should sign these user id(s) */ tty_printf("\n"); show_key_with_all_names( keyblock, 1, 0, 1, 0, 0 ); tty_printf("\n"); if(primary_pk->expiredate && !selfsig) { if(primary_pk->expiredate<=timestamp) { tty_printf(_("This key has expired!")); if(opt.expert) { tty_printf(" "); if(!cpr_get_answer_is_yes("sign_uid.expired_okay", _("Are you sure you still " "want to sign it? (y/N) "))) continue; } else { tty_printf(_(" Unable to sign.\n")); continue; } } else { tty_printf(_("This key is due to expire on %s.\n"), expirestr_from_pk(primary_pk)); if(opt.ask_cert_expire) { char *answer=cpr_get("sign_uid.expire", _("Do you want your signature to " "expire at the same time? (Y/n) ")); if(answer_is_yes_no_default(answer,1)) { /* Set our signature expiration date to match when the key is going to expire. */ duration=primary_pk->expiredate-timestamp; force_v4=1; } cpr_kill_prompt(); xfree(answer); } } } /* Only ask for duration if we haven't already set it to match the expiration of the pk */ if(!duration && !selfsig) { if(opt.ask_cert_expire) duration=ask_expire_interval(timestamp,1,opt.def_cert_expire); else duration=parse_expire_string(timestamp,opt.def_cert_expire); } if(duration) force_v4=1; /* Is --pgp2 on, it's a v3 key, all the sigs on the key are currently v3 and we're about to sign it with a v4 sig? If so, danger! */ if(PGP2 && all_v3 && (sk->version>3 || force_v4) && primary_pk->version<=3) { tty_printf(_("You may not make an OpenPGP signature on a " "PGP 2.x key while in --pgp2 mode.\n")); tty_printf(_("This would make the key unusable in PGP 2.x.\n")); if(opt.expert) { if(!cpr_get_answer_is_yes("sign_uid.v4_on_v3_okay", _("Are you sure you still " "want to sign it? (y/N) "))) continue; all_v3=0; } else continue; } if(selfsig) ; else { if(opt.batch || !opt.ask_cert_level) class=0x10+opt.def_cert_level; else { char *answer; tty_printf(_("How carefully have you verified the key you are " "about to sign actually belongs\nto the person " "named above? If you don't know what to " "answer, enter \"0\".\n")); tty_printf("\n"); tty_printf(_(" (0) I will not answer.%s\n"), opt.def_cert_level==0?" (default)":""); tty_printf(_(" (1) I have not checked at all.%s\n"), opt.def_cert_level==1?" (default)":""); tty_printf(_(" (2) I have done casual checking.%s\n"), opt.def_cert_level==2?" (default)":""); tty_printf(_(" (3) I have done very careful checking.%s\n"), opt.def_cert_level==3?" (default)":""); tty_printf("\n"); while(class==0) { answer = cpr_get("sign_uid.class",_("Your selection? " "(enter `?' for more information): ")); if(answer[0]=='\0') class=0x10+opt.def_cert_level; /* Default */ else if(ascii_strcasecmp(answer,"0")==0) class=0x10; /* Generic */ else if(ascii_strcasecmp(answer,"1")==0) class=0x11; /* Persona */ else if(ascii_strcasecmp(answer,"2")==0) class=0x12; /* Casual */ else if(ascii_strcasecmp(answer,"3")==0) class=0x13; /* Positive */ else tty_printf(_("Invalid selection.\n")); xfree(answer); } } if(trust) trustsig_prompt(&trust_value,&trust_depth,&trust_regexp); } p=get_user_id_native(sk_keyid); tty_printf(_("Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n"),p,keystr_from_sk(sk)); xfree(p); if(selfsig) { tty_printf("\n"); tty_printf(_("This will be a self-signature.\n")); if( local ) { tty_printf("\n"); tty_printf( _("WARNING: the signature will not be marked " "as non-exportable.\n")); } if( nonrevocable ) { tty_printf("\n"); tty_printf( _("WARNING: the signature will not be marked " "as non-revocable.\n")); } } else { if( local ) { tty_printf("\n"); tty_printf( _("The signature will be marked as non-exportable.\n")); } if( nonrevocable ) { tty_printf("\n"); tty_printf( _("The signature will be marked as non-revocable.\n")); } switch(class) { case 0x11: tty_printf("\n"); tty_printf(_("I have not checked this key at all.\n")); break; case 0x12: tty_printf("\n"); tty_printf(_("I have checked this key casually.\n")); break; case 0x13: tty_printf("\n"); tty_printf(_("I have checked this key very carefully.\n")); break; } } tty_printf("\n"); if( opt.batch && opt.answer_yes ) ; else if( !cpr_get_answer_is_yes("sign_uid.okay", _("Really sign? (y/N) ")) ) 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_attrib attrib; assert( primary_pk ); memset( &attrib, 0, sizeof attrib ); attrib.non_exportable = local; attrib.non_revocable = nonrevocable; attrib.trust_depth = trust_depth; attrib.trust_value = trust_value; attrib.trust_regexp = trust_regexp; node->flag &= ~NODFLG_MARK_A; /* we force creation of a v4 signature for local * signatures, otherwise we would not generate the * subpacket with v3 keys and the signature becomes * exportable */ if(selfsig) rc = make_keysig_packet( &sig, primary_pk, node->pkt->pkt.user_id, NULL, sk, 0x13, 0, force_v4?4:0, 0, 0, keygen_add_std_prefs, primary_pk); else rc = make_keysig_packet( &sig, primary_pk, node->pkt->pkt.user_id, NULL, sk, class, 0, force_v4?4:0, timestamp, duration, sign_mk_attrib, &attrib ); if( rc ) { log_error(_("signing failed: %s\n"), g10_errstr(rc)); goto leave; } *ret_modified = 1; /* we changed the keyblock */ update_trust = 1; pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( node, new_kbnode(pkt), PKT_SIGNATURE ); goto reloop; } } /* Delete any sigs that got promoted */ for( node=keyblock; node; node = node->next ) if( node->flag & NODFLG_DELSIG) delete_kbnode(node); } /* end loop over signators */ 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; int no_primary_secrets = 0; int any; 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; for (any = 0, node=keyblock; node; node = node->next) { if (node->pkt->pkttype == PKT_SECRET_KEY || node->pkt->pkttype == PKT_SECRET_SUBKEY) { PKT_secret_key *tmpsk = node->pkt->pkt.secret_key; if (!(tmpsk->is_protected && (tmpsk->protect.s2k.mode == 1001 || tmpsk->protect.s2k.mode == 1002))) { any = 1; break; } } } if (!any) { tty_printf (_("Key has only stub or on-card key items - " "no passphrase to change.\n")); goto leave; } /* See how to handle this 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: if( sk->protect.s2k.mode == 1001 ) { tty_printf(_("Secret parts of primary key are not available.\n")); no_primary_secrets = 1; } else if( sk->protect.s2k.mode == 1002 ) { tty_printf(_("Secret parts of primary key are stored on-card.\n")); no_primary_secrets = 1; } else { 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; if ( !(subsk->is_protected && (subsk->protect.s2k.mode == 1001 || subsk->protect.s2k.mode == 1002))) { set_next_passphrase( passphrase ); rc = check_secret_key( subsk, 0 ); if( !rc && !passphrase ) passphrase = get_last_passphrase(); } } } if( rc ) tty_printf(_("Can't edit this key: %s\n"), g10_errstr(rc)); else { DEK *dek = NULL; STRING2KEY *s2k = xmalloc_secure( sizeof *s2k ); const char *errtext = NULL; 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 = S2K_DIGEST_ALGO; dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2, errtext, NULL); if( !dek ) { errtext = N_("passphrase not correctly repeated; try again"); tty_printf ("%s.\n", _(errtext)); } 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? (y/N) "))) { changed++; break; } } else { /* okay */ rc = 0; if( !no_primary_secrets ) { 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; if ( !(subsk->is_protected && (subsk->protect.s2k.mode == 1001 || subsk->protect.s2k.mode == 1002))) { 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; } } xfree(s2k); xfree(dek); } leave: xfree( 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; } static int parse_sign_type(const char *str,int *localsig,int *nonrevokesig,int *trustsig) { const char *p=str; while(*p) { if(ascii_strncasecmp(p,"l",1)==0) { *localsig=1; p++; } else if(ascii_strncasecmp(p,"nr",2)==0) { *nonrevokesig=1; p+=2; } else if(ascii_strncasecmp(p,"t",1)==0) { *trustsig=1; p++; } else return 0; } return 1; } /**************** * Menu driven key editor. If seckey_check is true, then a secret key * that matches username will be looked for. If it is false, not all * commands will be available. * * Note: to keep track of some selection we use node->mark MARKBIT_xxxx. */ /* Need an SK for this command */ #define KEYEDIT_NEED_SK 1 /* Cannot be viewing the SK for this command */ #define KEYEDIT_NOT_SK 2 /* Must be viewing the SK for this command */ #define KEYEDIT_ONLY_SK 4 /* Match the tail of the string */ #define KEYEDIT_TAIL_MATCH 8 enum cmdids { cmdNONE = 0, cmdQUIT, cmdHELP, cmdFPR, cmdLIST, cmdSELUID, cmdCHECK, cmdSIGN, cmdREVSIG, cmdREVKEY, cmdREVUID, cmdDELSIG, cmdPRIMARY, cmdDEBUG, cmdSAVE, cmdADDUID, cmdADDPHOTO, cmdDELUID, cmdADDKEY, cmdDELKEY, cmdADDREVOKER, cmdTOGGLE, cmdSELKEY, cmdPASSWD, cmdTRUST, cmdPREF, cmdEXPIRE, cmdBACKSIGN, cmdENABLEKEY, cmdDISABLEKEY, cmdSHOWPREF, cmdSETPREF, cmdPREFKS, cmdNOTATION, cmdINVCMD, cmdSHOWPHOTO, cmdUPDTRUST, cmdCHKTRUST, cmdADDCARDKEY, cmdKEYTOCARD, cmdBKUPTOCARD, cmdCLEAN, cmdMINIMIZE, cmdNOP }; static struct { const char *name; enum cmdids id; int flags; const char *desc; } cmds[] = { { "quit" , cmdQUIT , 0, N_("quit this menu") }, { "q" , cmdQUIT , 0, NULL }, { "save" , cmdSAVE , 0, N_("save and quit") }, { "help" , cmdHELP , 0, N_("show this help") }, { "?" , cmdHELP , 0, NULL }, { "fpr" , cmdFPR , 0, N_("show key fingerprint") }, { "list" , cmdLIST , 0, N_("list key and user IDs") }, { "l" , cmdLIST , 0, NULL }, { "uid" , cmdSELUID , 0, N_("select user ID N") }, { "key" , cmdSELKEY , 0, N_("select subkey N") }, { "check" , cmdCHECK , 0, N_("check signatures") }, { "c" , cmdCHECK , 0, NULL }, { "cross-certify", cmdBACKSIGN , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, NULL }, { "backsign", cmdBACKSIGN , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, NULL }, { "sign" , cmdSIGN , KEYEDIT_NOT_SK|KEYEDIT_TAIL_MATCH, N_("sign selected user IDs [* see below for related commands]") }, { "s" , cmdSIGN , KEYEDIT_NOT_SK, NULL }, /* "lsign" and friends will never match since "sign" comes first and it is a tail match. They are just here so they show up in the help menu. */ { "lsign" , cmdNOP , 0, N_("sign selected user IDs locally") }, { "tsign" , cmdNOP , 0, N_("sign selected user IDs with a trust signature") }, { "nrsign" , cmdNOP , 0, N_("sign selected user IDs with a non-revocable signature") }, { "debug" , cmdDEBUG , 0, NULL }, { "adduid" , cmdADDUID , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("add a user ID") }, { "addphoto", cmdADDPHOTO , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("add a photo ID") }, { "deluid" , cmdDELUID , KEYEDIT_NOT_SK, N_("delete selected user IDs") }, /* delphoto is really deluid in disguise */ { "delphoto", cmdDELUID , KEYEDIT_NOT_SK, NULL }, { "addkey" , cmdADDKEY , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("add a subkey") }, #ifdef ENABLE_CARD_SUPPORT { "addcardkey", cmdADDCARDKEY , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("add a key to a smartcard") }, { "keytocard", cmdKEYTOCARD , KEYEDIT_NEED_SK|KEYEDIT_ONLY_SK, N_("move a key to a smartcard")}, { "bkuptocard", cmdBKUPTOCARD , KEYEDIT_NEED_SK|KEYEDIT_ONLY_SK, N_("move a backup key to a smartcard")}, #endif /*ENABLE_CARD_SUPPORT*/ { "delkey" , cmdDELKEY , KEYEDIT_NOT_SK, N_("delete selected subkeys") }, { "addrevoker",cmdADDREVOKER,KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("add a revocation key") }, { "delsig" , cmdDELSIG , KEYEDIT_NOT_SK, N_("delete signatures from the selected user IDs") }, { "expire" , cmdEXPIRE , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("change the expiration date for the key or selected subkeys") }, { "primary" , cmdPRIMARY , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("flag the selected user ID as primary")}, { "toggle" , cmdTOGGLE , KEYEDIT_NEED_SK, N_("toggle between the secret and public key listings") }, { "t" , cmdTOGGLE , KEYEDIT_NEED_SK, NULL }, { "pref" , cmdPREF , KEYEDIT_NOT_SK, N_("list preferences (expert)")}, { "showpref", cmdSHOWPREF , KEYEDIT_NOT_SK, N_("list preferences (verbose)") }, { "setpref" , cmdSETPREF , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("set preference list for the selected user IDs") }, /* Alias */ { "updpref" , cmdSETPREF , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, NULL }, { "keyserver",cmdPREFKS , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("set the preferred keyserver URL for the selected user IDs")}, { "notation", cmdNOTATION , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("set a notation for the selected user IDs")}, { "passwd" , cmdPASSWD , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("change the passphrase") }, /* Alias */ { "password", cmdPASSWD , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, NULL }, { "trust" , cmdTRUST , KEYEDIT_NOT_SK, N_("change the ownertrust") }, { "revsig" , cmdREVSIG , KEYEDIT_NOT_SK, N_("revoke signatures on the selected user IDs") }, { "revuid" , cmdREVUID , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("revoke selected user IDs") }, /* Alias */ { "revphoto", cmdREVUID , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, NULL }, { "revkey" , cmdREVKEY , KEYEDIT_NOT_SK|KEYEDIT_NEED_SK, N_("revoke key or selected subkeys") }, { "enable" , cmdENABLEKEY , KEYEDIT_NOT_SK, N_("enable key") }, { "disable" , cmdDISABLEKEY, KEYEDIT_NOT_SK, N_("disable key") }, { "showphoto",cmdSHOWPHOTO , 0, N_("show selected photo IDs") }, { "clean", cmdCLEAN , KEYEDIT_NOT_SK, N_("compact unusable user IDs and remove unusable signatures from key")}, { "minimize", cmdMINIMIZE , KEYEDIT_NOT_SK, N_("compact unusable user IDs and remove all signatures from key") }, { NULL, cmdNONE, 0, NULL } }; #ifdef HAVE_LIBREADLINE /* These two functions are used by readline for command completion. */ static char * command_generator(const char *text,int state) { static int list_index,len; const char *name; /* If this is a new word to complete, initialize now. This includes saving the length of TEXT for efficiency, and initializing the index variable to 0. */ if(!state) { list_index=0; len=strlen(text); } /* Return the next partial match */ while((name=cmds[list_index].name)) { /* Only complete commands that have help text */ if(cmds[list_index++].desc && strncmp(name,text,len)==0) return strdup(name); } return NULL; } static char ** keyedit_completion(const char *text, int start, int end) { /* If we are at the start of a line, we try and command-complete. If not, just do nothing for now. */ if(start==0) return rl_completion_matches(text,command_generator); rl_attempted_completion_over=1; return NULL; } #endif /* HAVE_LIBREADLINE */ void keyedit_menu( const char *username, STRLIST locusr, STRLIST commands, int quiet, int seckey_check ) { enum cmdids cmd = 0; int rc = 0; KBNODE keyblock = NULL; KEYDB_HANDLE kdbhd = NULL; KBNODE sec_keyblock = NULL; KEYDB_HANDLE sec_kdbhd = NULL; KBNODE cur_keyblock; char *answer = NULL; int redisplay = 1; int modified = 0; int sec_modified = 0; int run_subkey_warnings = 0; int toggle; int have_commands = !!commands; if ( opt.command_fd != -1 ) ; else if( opt.batch && !have_commands ) { log_error(_("can't do this in batch mode\n")); goto leave; } #ifdef HAVE_W32_SYSTEM /* Due to Windows peculiarities we need to make sure that the trustdb stale check is done before we open another file (i.e. by searching for a key). In theory we could make sure that the files are closed after use but the open/close caches inhibits that and flushing the cache right before the stale check is not easy to implement. Thus we take the easy way out and run the stale check as early as possible. Note, that for non- W32 platforms it is run indirectly trough a call to get_validity (). */ check_trustdb_stale (); #endif /* Get the public key */ rc = get_pubkey_byname (NULL, username, &keyblock, &kdbhd, 1); if( rc ) { log_error (_("key \"%s\" not found: %s\n"), username, g10_errstr (rc)); goto leave; } if( fix_keyblock( keyblock ) ) modified++; if( collapse_uids( &keyblock ) ) modified++; reorder_keyblock(keyblock); /* We modified the keyblock, so let's make sure the flags are right. */ if(modified) merge_keys_and_selfsig( keyblock ); if(seckey_check) {/* see whether we have a matching secret key */ PKT_public_key *pk = keyblock->pkt->pkt.public_key; sec_kdbhd = keydb_new (1); { byte afp[MAX_FINGERPRINT_LEN]; size_t an; fingerprint_from_pk (pk, afp, &an); while (an < MAX_FINGERPRINT_LEN) afp[an++] = 0; rc = keydb_search_fpr (sec_kdbhd, afp); } if (!rc) { rc = keydb_get_keyblock (sec_kdbhd, &sec_keyblock); if (rc) { log_error (_("error reading secret keyblock \"%s\": %s\n"), username, g10_errstr(rc)); } else { merge_keys_and_selfsig( sec_keyblock ); if( fix_keyblock( sec_keyblock ) ) sec_modified++; } } if (rc) { sec_keyblock = NULL; keydb_release (sec_kdbhd); sec_kdbhd = NULL; rc = 0; } if( sec_keyblock && !quiet ) tty_printf(_("Secret key is available.\n")); } toggle = 0; cur_keyblock = keyblock; for(;;) { /* main loop */ int i, arg_number, photo; const char *arg_string = ""; char *p; PKT_public_key *pk=keyblock->pkt->pkt.public_key; tty_printf("\n"); if( redisplay && !quiet ) { show_key_with_all_names( cur_keyblock, 0, 1, 0, 1, 0 ); tty_printf("\n"); redisplay = 0; } if (run_subkey_warnings) { run_subkey_warnings = 0; if (!count_selected_keys (keyblock)) subkey_expire_warning (keyblock); } do { xfree(answer); if( have_commands ) { if( commands ) { answer = xstrdup( commands->d ); commands = commands->next; } else if( opt.batch ) { answer = xstrdup("quit"); } else have_commands = 0; } if( !have_commands ) { tty_enable_completion(keyedit_completion); answer = cpr_get_no_help("keyedit.prompt", "gpg> "); cpr_kill_prompt(); tty_disable_completion(); } trim_spaces(answer); } while( *answer == '#' ); arg_number = 0; /* Yes, here is the init which egcc complains about */ photo = 0; /* This too */ if( !*answer ) cmd = cmdLIST; else if( *answer == CONTROL_D ) cmd = cmdQUIT; else if( digitp(answer ) ) { cmd = cmdSELUID; arg_number = atoi(answer); } else { if( (p=strchr(answer,' ')) ) { *p++ = 0; trim_spaces(answer); trim_spaces(p); arg_number = atoi(p); arg_string = p; } for(i=0; cmds[i].name; i++ ) { if(cmds[i].flags & KEYEDIT_TAIL_MATCH) { size_t l=strlen(cmds[i].name); size_t a=strlen(answer); if(a>=l) { if(ascii_strcasecmp(&answer[a-l],cmds[i].name)==0) { answer[a-l]='\0'; break; } } } else if( !ascii_strcasecmp( answer, cmds[i].name ) ) break; } if((cmds[i].flags & KEYEDIT_NEED_SK) && !sec_keyblock ) { tty_printf(_("Need the secret key to do this.\n")); cmd = cmdNOP; } else if(((cmds[i].flags & KEYEDIT_NOT_SK) && sec_keyblock && toggle) ||((cmds[i].flags & KEYEDIT_ONLY_SK) && sec_keyblock && !toggle)) { tty_printf(_("Please use the command \"toggle\" first.\n")); cmd = cmdNOP; } else cmd = cmds[i].id; } switch( cmd ) { case cmdHELP: for(i=0; cmds[i].name; i++ ) { if((cmds[i].flags & KEYEDIT_NEED_SK) && !sec_keyblock ) ; /* skip if we do not have the secret key */ else if( cmds[i].desc ) tty_printf("%-11s %s\n", cmds[i].name, _(cmds[i].desc) ); } tty_printf("\n"); tty_printf(_( "* The `sign' command may be prefixed with an `l' for local " "signatures (lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n")); break; case cmdLIST: redisplay = 1; break; case cmdFPR: show_key_and_fingerprint( keyblock ); break; case cmdSELUID: if(strlen(arg_string)==NAMEHASH_LEN*2) redisplay=menu_select_uid_namehash(cur_keyblock,arg_string); else redisplay=menu_select_uid(cur_keyblock,arg_number); 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) */ { int localsig=0,nonrevokesig=0,trustsig=0,interactive=0; if( pk->is_revoked ) { tty_printf(_("Key is revoked.")); if(opt.expert) { tty_printf(" "); if(!cpr_get_answer_is_yes("keyedit.sign_revoked.okay", _("Are you sure you still want" " to sign it? (y/N) "))) break; } else { tty_printf(_(" Unable to sign.\n")); break; } } if(count_uids(keyblock) > 1 && !count_selected_uids(keyblock) && !cpr_get_answer_is_yes("keyedit.sign_all.okay", _("Really sign all user IDs?" " (y/N) "))) { if(opt.interactive) interactive=1; else { tty_printf(_("Hint: Select the user IDs to sign\n")); have_commands = 0; break; } } /* What sort of signing are we doing? */ if(!parse_sign_type(answer,&localsig,&nonrevokesig,&trustsig)) { tty_printf(_("Unknown signature type `%s'\n"),answer); break; } sign_uids(keyblock, locusr, &modified, localsig, nonrevokesig, trustsig, interactive); } break; case cmdDEBUG: dump_kbnode( cur_keyblock ); break; case cmdTOGGLE: toggle = !toggle; cur_keyblock = toggle? sec_keyblock : keyblock; redisplay = 1; break; case cmdADDPHOTO: if (RFC2440 || RFC1991 || PGP2) { tty_printf( _("This command is not allowed while in %s mode.\n"), compliance_option_string()); break; } photo=1; /* fall through */ case cmdADDUID: if( menu_adduid( keyblock, sec_keyblock, photo, arg_string ) ) { update_trust = 1; redisplay = 1; sec_modified = modified = 1; merge_keys_and_selfsig( sec_keyblock ); merge_keys_and_selfsig( keyblock ); } break; case cmdDELUID: { int n1; if( !(n1=count_selected_uids(keyblock)) ) tty_printf(_("You must select at least one user ID.\n")); else if( real_uids_left(keyblock) < 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? (y/N) ") : _("Really remove this user ID? (y/N) ") ) ) { 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; merge_keys_and_selfsig( sec_keyblock ); merge_keys_and_selfsig( keyblock ); } break; #ifdef ENABLE_CARD_SUPPORT case cmdADDCARDKEY: if (card_generate_subkey (keyblock, sec_keyblock)) { redisplay = 1; sec_modified = modified = 1; merge_keys_and_selfsig( sec_keyblock ); merge_keys_and_selfsig( keyblock ); } break; case cmdKEYTOCARD: { KBNODE node=NULL; switch ( count_selected_keys (sec_keyblock) ) { case 0: if (cpr_get_answer_is_yes("keyedit.keytocard.use_primary", _("Really move the primary key? (y/N) "))) node = sec_keyblock; break; case 1: for (node = sec_keyblock; node; node = node->next ) { if (node->pkt->pkttype == PKT_SECRET_SUBKEY && node->flag & NODFLG_SELKEY) break; } break; default: tty_printf(_("You must select exactly one key.\n")); break; } if (node) { PKT_public_key *xxpk = find_pk_from_sknode (keyblock, node); if (card_store_subkey (node, xxpk?xxpk->pubkey_usage:0)) { redisplay = 1; sec_modified = 1; } } } break; case cmdBKUPTOCARD: { /* Ask for a filename, check whether this is really a backup key as generated by the card generation, parse that key and store it on card. */ KBNODE node; const char *fname; PACKET *pkt; IOBUF a; fname = arg_string; if (!*fname) { tty_printf (_("Command expects a filename argument\n")); break; } /* Open that file. */ a = iobuf_open (fname); if (a && is_secured_file (iobuf_get_fd (a))) { iobuf_close (a); a = NULL; errno = EPERM; } if (!a) { tty_printf (_("Can't open `%s': %s\n"), fname, strerror(errno)); break; } /* Parse and check that file. */ pkt = xmalloc (sizeof *pkt); init_packet (pkt); rc = parse_packet (a, pkt); iobuf_close (a); iobuf_ioctl (NULL, 2, 0, (char*)fname); /* (invalidate cache). */ if (!rc && pkt->pkttype != PKT_SECRET_KEY && pkt->pkttype != PKT_SECRET_SUBKEY) rc = G10ERR_NO_SECKEY; if (rc) { tty_printf(_("Error reading backup key from `%s': %s\n"), fname, g10_errstr (rc)); free_packet (pkt); xfree (pkt); break; } node = new_kbnode (pkt); /* Store it. */ if (card_store_subkey (node, 0)) { redisplay = 1; sec_modified = 1; } release_kbnode (node); } break; #endif /* ENABLE_CARD_SUPPORT */ case cmdDELKEY: { int n1; if( !(n1=count_selected_keys( keyblock )) ) tty_printf(_("You must select at least one key.\n")); else if( !cpr_get_answer_is_yes( "keyedit.remove.subkey.okay", n1 > 1? _("Do you really want to delete the selected keys? (y/N) "): _("Do you really want to delete this key? (y/N) ") )) ; else { menu_delkey( keyblock, sec_keyblock ); redisplay = 1; modified = 1; if( sec_keyblock ) sec_modified = 1; } } break; case cmdADDREVOKER: { int sensitive=0; if(ascii_strcasecmp(arg_string,"sensitive")==0) sensitive=1; if( menu_addrevoker( keyblock, sec_keyblock, sensitive ) ) { redisplay = 1; sec_modified = modified = 1; merge_keys_and_selfsig( sec_keyblock ); merge_keys_and_selfsig( keyblock ); } } break; case cmdREVUID: { int n1; if( !(n1=count_selected_uids(keyblock)) ) tty_printf(_("You must select at least one user ID.\n")); else if( cpr_get_answer_is_yes( "keyedit.revoke.uid.okay", n1 > 1? _("Really revoke all selected user IDs? (y/N) ") : _("Really revoke this user ID? (y/N) ") ) ) { if(menu_revuid(keyblock,sec_keyblock)) { modified=1; redisplay=1; } } } break; case cmdREVKEY: { int n1; if( !(n1=count_selected_keys( keyblock )) ) { if(cpr_get_answer_is_yes("keyedit.revoke.subkey.okay", _("Do you really want to revoke" " the entire key? (y/N) "))) { if(menu_revkey(keyblock,sec_keyblock)) modified=1; redisplay=1; } } else if(cpr_get_answer_is_yes("keyedit.revoke.subkey.okay", n1 > 1? _("Do you really want to revoke" " the selected subkeys? (y/N) "): _("Do you really want to revoke" " this subkey? (y/N) "))) { if( menu_revsubkey( keyblock, sec_keyblock ) ) modified = 1; redisplay = 1; } if(modified) merge_keys_and_selfsig( keyblock ); } break; case cmdEXPIRE: if( menu_expire( keyblock, sec_keyblock ) ) { merge_keys_and_selfsig( sec_keyblock ); merge_keys_and_selfsig( keyblock ); run_subkey_warnings = 1; sec_modified = 1; modified = 1; redisplay = 1; } break; case cmdBACKSIGN: if(menu_backsign(keyblock,sec_keyblock)) { sec_modified = 1; modified = 1; redisplay = 1; } break; case cmdPRIMARY: if( menu_set_primary_uid ( keyblock, sec_keyblock ) ) { merge_keys_and_selfsig( keyblock ); modified = 1; redisplay = 1; } break; case cmdPASSWD: if( change_passphrase( sec_keyblock ) ) sec_modified = 1; break; case cmdTRUST: if(opt.trust_model==TM_EXTERNAL) { tty_printf(_("Owner trust may not be set while " "using a user provided trust database\n")); break; } show_key_with_all_names( keyblock, 0, 0, 0, 1, 0 ); tty_printf("\n"); if( edit_ownertrust( find_kbnode( keyblock, PKT_PUBLIC_KEY )->pkt->pkt.public_key, 1 ) ) { redisplay = 1; /* No real need to set update_trust here as edit_ownertrust() calls revalidation_mark() anyway. */ update_trust=1; } break; case cmdPREF: { int count=count_selected_uids(keyblock); assert(keyblock->pkt->pkttype==PKT_PUBLIC_KEY); show_names(keyblock,keyblock->pkt->pkt.public_key, count?NODFLG_SELUID:0,1); } break; case cmdSHOWPREF: { int count=count_selected_uids(keyblock); assert(keyblock->pkt->pkttype==PKT_PUBLIC_KEY); show_names(keyblock,keyblock->pkt->pkt.public_key, count?NODFLG_SELUID:0,2); } break; case cmdSETPREF: { PKT_user_id *tempuid; keygen_set_std_prefs(!*arg_string?"default" : arg_string, 0); tempuid=keygen_get_std_prefs(); tty_printf(_("Set preference list to:\n")); show_prefs(tempuid,NULL,1); free_user_id(tempuid); if(cpr_get_answer_is_yes("keyedit.setpref.okay", count_selected_uids (keyblock)? _("Really update the preferences" " for the selected user IDs? (y/N) "): _("Really update the preferences? (y/N) "))) { if ( menu_set_preferences (keyblock, sec_keyblock) ) { merge_keys_and_selfsig (keyblock); modified = 1; redisplay = 1; } } } break; case cmdPREFKS: if( menu_set_keyserver_url ( *arg_string?arg_string:NULL, keyblock, sec_keyblock ) ) { merge_keys_and_selfsig( keyblock ); modified = 1; redisplay = 1; } break; case cmdNOTATION: if( menu_set_notation ( *arg_string?arg_string:NULL, keyblock, sec_keyblock ) ) { merge_keys_and_selfsig( keyblock ); modified = 1; redisplay = 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; case cmdSHOWPHOTO: menu_showphoto(keyblock); break; case cmdCLEAN: if(menu_clean(keyblock,0)) redisplay=modified=1; break; case cmdMINIMIZE: if(menu_clean(keyblock,1)) redisplay=modified=1; 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? (y/N) ")) ) { if( cpr_enabled() || cpr_get_answer_is_yes("keyedit.cancel.okay", _("Quit without saving? (y/N) "))) goto leave; break; } /* fall thru */ case cmdSAVE: if( modified || sec_modified ) { if( modified ) { rc = keydb_update_keyblock (kdbhd, keyblock); if( rc ) { log_error(_("update failed: %s\n"), g10_errstr(rc) ); break; } } if( sec_modified ) { rc = keydb_update_keyblock (sec_kdbhd, 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")); if( update_trust ) { revalidation_mark (); update_trust=0; } goto leave; case cmdINVCMD: default: tty_printf("\n"); tty_printf(_("Invalid command (try \"help\")\n")); break; } } /* end main loop */ leave: release_kbnode( keyblock ); release_kbnode( sec_keyblock ); keydb_release (kdbhd); xfree(answer); } static void tty_print_notations(int indent,PKT_signature *sig) { int first=1; struct notation *notation,*nd; if(indent<0) { first=0; indent=-indent; } notation=sig_to_notation(sig); for(nd=notation;nd;nd=nd->next) { if(!first) tty_printf("%*s",indent,""); else first=0; tty_print_utf8_string(nd->name,strlen(nd->name)); tty_printf("="); tty_print_utf8_string(nd->value,strlen(nd->value)); tty_printf("\n"); } free_notation(notation); } /**************** * show preferences of a public keyblock. */ static void show_prefs (PKT_user_id *uid, PKT_signature *selfsig, int verbose) { const prefitem_t fake={0,0}; const prefitem_t *prefs; int i; if( !uid ) return; if( uid->prefs ) prefs=uid->prefs; else if(verbose) prefs=&fake; else return; if (verbose) { int any, des_seen=0, sha1_seen=0, uncomp_seen=0; tty_printf (" "); tty_printf (_("Cipher: ")); for(i=any=0; prefs[i].type; i++ ) { if( prefs[i].type == PREFTYPE_SYM ) { const char *s = cipher_algo_to_string (prefs[i].value); if (any) tty_printf (", "); any = 1; /* We don't want to display strings for experimental algos */ if (s && prefs[i].value < 100 ) tty_printf ("%s", s ); else tty_printf ("[%d]", prefs[i].value); if (prefs[i].value == CIPHER_ALGO_3DES ) des_seen = 1; } } if (!des_seen) { if (any) tty_printf (", "); tty_printf ("%s",cipher_algo_to_string(CIPHER_ALGO_3DES)); } tty_printf ("\n "); tty_printf (_("Digest: ")); for(i=any=0; prefs[i].type; i++ ) { if( prefs[i].type == PREFTYPE_HASH ) { const char *s = digest_algo_to_string (prefs[i].value); if (any) tty_printf (", "); any = 1; /* We don't want to display strings for experimental algos */ if (s && prefs[i].value < 100 ) tty_printf ("%s", s ); else tty_printf ("[%d]", prefs[i].value); if (prefs[i].value == DIGEST_ALGO_SHA1 ) sha1_seen = 1; } } if (!sha1_seen) { if (any) tty_printf (", "); tty_printf ("%s",digest_algo_to_string(DIGEST_ALGO_SHA1)); } tty_printf ("\n "); tty_printf (_("Compression: ")); for(i=any=0; prefs[i].type; i++ ) { if( prefs[i].type == PREFTYPE_ZIP ) { const char *s=compress_algo_to_string(prefs[i].value); if (any) tty_printf (", "); any = 1; /* We don't want to display strings for experimental algos */ if (s && prefs[i].value < 100 ) tty_printf ("%s", s ); else tty_printf ("[%d]", prefs[i].value); if (prefs[i].value == COMPRESS_ALGO_NONE ) uncomp_seen = 1; } } if (!uncomp_seen) { if (any) tty_printf (", "); else { tty_printf ("%s",compress_algo_to_string(COMPRESS_ALGO_ZIP)); tty_printf (", "); } tty_printf ("%s",compress_algo_to_string(COMPRESS_ALGO_NONE)); } if(uid->flags.mdc || !uid->flags.ks_modify) { tty_printf ("\n "); tty_printf (_("Features: ")); any=0; if(uid->flags.mdc) { tty_printf ("MDC"); any=1; } if(!uid->flags.ks_modify) { if(any) tty_printf (", "); tty_printf (_("Keyserver no-modify")); } } tty_printf("\n"); if(selfsig) { const byte *pref_ks; size_t pref_ks_len; pref_ks=parse_sig_subpkt(selfsig->hashed, SIGSUBPKT_PREF_KS,&pref_ks_len); if(pref_ks && pref_ks_len) { tty_printf (" "); tty_printf(_("Preferred keyserver: ")); tty_print_utf8_string(pref_ks,pref_ks_len); tty_printf("\n"); } if(selfsig->flags.notation) { tty_printf (" "); tty_printf(_("Notations: ")); tty_print_notations(5+strlen(_("Notations: ")),selfsig); } } } else { tty_printf(" "); for(i=0; prefs[i].type; i++ ) { tty_printf( " %c%d", prefs[i].type == PREFTYPE_SYM ? 'S' : prefs[i].type == PREFTYPE_HASH ? 'H' : prefs[i].type == PREFTYPE_ZIP ? 'Z':'?', prefs[i].value); } if (uid->flags.mdc) tty_printf (" [mdc]"); if (!uid->flags.ks_modify) tty_printf (" [no-ks-modify]"); tty_printf("\n"); } } /* This is the version of show_key_with_all_names used when opt.with_colons is used. It prints all available data in a easy to parse format and does not translate utf8 */ static void show_key_with_all_names_colon (KBNODE keyblock) { KBNODE node; int i, j, ulti_hack=0; byte pk_version=0; PKT_public_key *primary=NULL; /* the keys */ for ( node = keyblock; node; node = node->next ) { if (node->pkt->pkttype == PKT_PUBLIC_KEY || (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) ) { PKT_public_key *pk = node->pkt->pkt.public_key; u32 keyid[2]; if (node->pkt->pkttype == PKT_PUBLIC_KEY) { pk_version = pk->version; primary=pk; } keyid_from_pk (pk, keyid); fputs (node->pkt->pkttype == PKT_PUBLIC_KEY?"pub:":"sub:", stdout); if (!pk->is_valid) putchar ('i'); else if (pk->is_revoked) putchar ('r'); else if (pk->has_expired) putchar ('e'); else if (!(opt.fast_list_mode || opt.no_expensive_trust_checks )) { int trust = get_validity_info (pk, NULL); if(trust=='u') ulti_hack=1; putchar (trust); } printf (":%u:%d:%08lX%08lX:%lu:%lu::", nbits_from_pk (pk), pk->pubkey_algo, (ulong)keyid[0], (ulong)keyid[1], (ulong)pk->timestamp, (ulong)pk->expiredate ); if (node->pkt->pkttype==PKT_PUBLIC_KEY && !(opt.fast_list_mode || opt.no_expensive_trust_checks )) putchar(get_ownertrust_info (pk)); putchar(':'); putchar('\n'); print_fingerprint (pk, NULL, 0); print_revokers(pk); } } /* 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(uid->attrib_data) printf("uat:"); else printf("uid:"); if ( uid->is_revoked ) printf("r::::::::"); else if ( uid->is_expired ) printf("e::::::::"); else if ( opt.fast_list_mode || opt.no_expensive_trust_checks ) printf("::::::::"); else { int uid_validity; if( primary && !ulti_hack ) uid_validity = get_validity_info( primary, uid ); else uid_validity = 'u'; printf("%c::::::::",uid_validity); } if(uid->attrib_data) printf ("%u %lu",uid->numattribs,uid->attrib_len); else print_string (stdout, uid->name, uid->len, ':'); putchar (':'); /* signature class */ putchar (':'); /* capabilities */ putchar (':'); /* preferences */ if (pk_version>3 || uid->selfsigversion>3) { const prefitem_t *prefs = uid->prefs; for (j=0; prefs && prefs[j].type; j++) { if (j) putchar (' '); printf ("%c%d", prefs[j].type == PREFTYPE_SYM ? 'S' : prefs[j].type == PREFTYPE_HASH ? 'H' : prefs[j].type == PREFTYPE_ZIP ? 'Z':'?', prefs[j].value); } if (uid->flags.mdc) printf (",mdc"); if (!uid->flags.ks_modify) printf (",no-ks-modify"); } putchar (':'); /* flags */ printf ("%d,", i); if (uid->is_primary) putchar ('p'); if (uid->is_revoked) putchar ('r'); if (uid->is_expired) putchar ('e'); if ((node->flag & NODFLG_SELUID)) putchar ('s'); if ((node->flag & NODFLG_MARK_A)) putchar ('m'); putchar (':'); putchar('\n'); } } } static void show_names(KBNODE keyblock,PKT_public_key *pk,unsigned int flag,int with_prefs) { KBNODE node; int i=0; for( node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID && !is_deleted_kbnode(node)) { PKT_user_id *uid = node->pkt->pkt.user_id; ++i; if(!flag || (flag && (node->flag & flag))) { if(!(flag&NODFLG_MARK_A) && pk) tty_printf("%s ",uid_trust_string_fixed(pk,uid)); if( flag & NODFLG_MARK_A ) tty_printf(" "); else if( node->flag & NODFLG_SELUID ) tty_printf("(%d)* ", i); else if( uid->is_primary ) tty_printf("(%d). ", i); else tty_printf("(%d) ", i); tty_print_utf8_string( uid->name, uid->len ); tty_printf("\n"); if(with_prefs && pk) { if(pk->version>3 || uid->selfsigversion>3) { PKT_signature *selfsig=NULL; KBNODE signode; for(signode=node->next; signode && signode->pkt->pkttype==PKT_SIGNATURE; signode=signode->next) { if(signode->pkt->pkt.signature-> flags.chosen_selfsig) { selfsig=signode->pkt->pkt.signature; break; } } show_prefs (uid, selfsig, with_prefs == 2); } else tty_printf(_("There are no preferences on a" " PGP 2.x-style user ID.\n")); } } } } } /**************** * 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_revoker, int with_fpr, int with_subkeys, int with_prefs ) { KBNODE node; int i; int do_warn = 0; PKT_public_key *primary=NULL; if (opt.with_colons) { show_key_with_all_names_colon (keyblock); return; } /* the keys */ for( node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY || (with_subkeys && node->pkt->pkttype == PKT_PUBLIC_SUBKEY && !is_deleted_kbnode(node)) ) { PKT_public_key *pk = node->pkt->pkt.public_key; const char *otrust="err",*trust="err"; if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { /* do it here, so that debug messages don't clutter the * output */ static int did_warn = 0; trust = get_validity_string (pk, NULL); otrust = get_ownertrust_string (pk); /* Show a warning once */ if (!did_warn && (get_validity (pk, NULL) & TRUST_FLAG_PENDING_CHECK)) { did_warn = 1; do_warn = 1; } primary=pk; } if(pk->is_revoked) { char *user=get_user_id_string_native(pk->revoked.keyid); const char *algo=pubkey_algo_to_string(pk->revoked.algo); tty_printf(_("This key was revoked on %s by %s key %s\n"), revokestr_from_pk(pk),algo?algo:"?",user); xfree(user); } if(with_revoker) { if( !pk->revkey && pk->numrevkeys ) BUG(); else for(i=0;inumrevkeys;i++) { u32 r_keyid[2]; char *user; const char *algo= pubkey_algo_to_string(pk->revkey[i].algid); keyid_from_fingerprint(pk->revkey[i].fpr, MAX_FINGERPRINT_LEN,r_keyid); user=get_user_id_string_native(r_keyid); tty_printf(_("This key may be revoked by %s key %s"), algo?algo:"?",user); if(pk->revkey[i].class&0x40) { tty_printf(" "); tty_printf(_("(sensitive)")); } tty_printf ("\n"); xfree(user); } } keyid_from_pk(pk,NULL); tty_printf("%s%c %4u%c/%s ", node->pkt->pkttype == PKT_PUBLIC_KEY? "pub":"sub", (node->flag & NODFLG_SELKEY)? '*':' ', nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), keystr(pk->keyid)); tty_printf(_("created: %s"),datestr_from_pk(pk)); tty_printf(" "); if(pk->is_revoked) tty_printf(_("revoked: %s"),revokestr_from_pk(pk)); else if(pk->has_expired) tty_printf(_("expired: %s"),expirestr_from_pk(pk)); else tty_printf(_("expires: %s"),expirestr_from_pk(pk)); tty_printf(" "); tty_printf(_("usage: %s"),usagestr_from_pk(pk)); tty_printf("\n"); if( node->pkt->pkttype == PKT_PUBLIC_KEY ) { if(opt.trust_model!=TM_ALWAYS) { tty_printf("%*s", (int)keystrlen()+13,""); /* Ownertrust is only meaningful for the PGP or classic trust models */ if(opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC) { int width=14-strlen(otrust); if(width<=0) width=1; tty_printf(_("trust: %s"), otrust); tty_printf("%*s",width,""); } tty_printf(_("validity: %s"), trust ); tty_printf("\n"); } if( node->pkt->pkttype == PKT_PUBLIC_KEY && (get_ownertrust (pk)&TRUST_FLAG_DISABLED)) { tty_printf("*** "); tty_printf(_("This key has been disabled")); tty_printf("\n"); } } if( node->pkt->pkttype == PKT_PUBLIC_KEY && with_fpr ) { print_fingerprint ( pk, NULL, 2 ); 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/%s ", node->pkt->pkttype == PKT_SECRET_KEY? "sec":"ssb", (node->flag & NODFLG_SELKEY)? '*':' ', nbits_from_sk( sk ), pubkey_letter( sk->pubkey_algo ), keystr_from_sk(sk)); tty_printf(_("created: %s"),datestr_from_sk(sk)); tty_printf(" "); tty_printf(_("expires: %s"),expirestr_from_sk(sk)); tty_printf("\n"); if (sk->is_protected && sk->protect.s2k.mode == 1002) { tty_printf(" "); tty_printf(_("card-no: ")); if (sk->protect.ivlen == 16 && !memcmp (sk->protect.iv, "\xD2\x76\x00\x01\x24\x01", 6)) { /* This is an OpenPGP card. */ for (i=8; i < 14; i++) { if (i == 10) tty_printf (" "); tty_printf ("%02X", sk->protect.iv[i]); } } else { /* Something is wrong: Print all. */ for (i=0; i < sk->protect.ivlen; i++) tty_printf ("%02X", sk->protect.iv[i]); } tty_printf ("\n"); } } } show_names(keyblock,primary,only_marked?NODFLG_MARK_A:0,with_prefs); if (do_warn) tty_printf (_("Please note that the shown key validity" " is not necessarily correct\n" "unless you restart the program.\n")); } /* Display basic key information. This function is suitable to show information on the key without any dependencies on the trustdb or any other internal GnuPG stuff. KEYBLOCK may either be a public or a secret key.*/ void show_basic_key_info ( KBNODE keyblock ) { KBNODE node; int i; /* The primary key */ for (node = keyblock; node; node = node->next) { if (node->pkt->pkttype == PKT_PUBLIC_KEY) { PKT_public_key *pk = node->pkt->pkt.public_key; /* Note, we use the same format string as in other show functions to make the translation job easier. */ tty_printf ("%s %4u%c/%s ", node->pkt->pkttype == PKT_PUBLIC_KEY? "pub":"sub", nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), keystr_from_pk(pk)); tty_printf(_("created: %s"),datestr_from_pk(pk)); tty_printf(" "); tty_printf(_("expires: %s"),expirestr_from_pk(pk)); tty_printf("\n"); print_fingerprint ( pk, NULL, 3 ); tty_printf("\n"); } else if (node->pkt->pkttype == PKT_SECRET_KEY) { PKT_secret_key *sk = node->pkt->pkt.secret_key; tty_printf("%s %4u%c/%s", node->pkt->pkttype == PKT_SECRET_KEY? "sec":"ssb", nbits_from_sk( sk ), pubkey_letter( sk->pubkey_algo ), keystr_from_sk(sk)); tty_printf(_("created: %s"),datestr_from_sk(sk)); tty_printf(" "); tty_printf(_("expires: %s"),expirestr_from_sk(sk)); tty_printf("\n"); print_fingerprint (NULL, sk, 3 ); tty_printf("\n"); } } /* The user IDs. */ for (i=0, node = keyblock; node; node = node->next) { if (node->pkt->pkttype == PKT_USER_ID) { PKT_user_id *uid = node->pkt->pkt.user_id; ++i; tty_printf (" "); if (uid->is_revoked) tty_printf("[%s] ",_("revoked")); else if ( uid->is_expired ) tty_printf("[%s] ",_("expired")); tty_print_utf8_string (uid->name, uid->len); tty_printf ("\n"); } } } 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/%s %s ", nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), keystr_from_pk(pk), datestr_from_pk(pk) ); } else if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = node->pkt->pkt.user_id; tty_print_utf8_string( uid->name, uid->len ); break; } } tty_printf("\n"); if( pk ) print_fingerprint( pk, NULL, 2 ); } /* Show a warning if no uids on the key have the primary uid flag set. */ static void no_primary_warning(KBNODE keyblock) { KBNODE node; int have_primary=0,uid_count=0; /* TODO: if we ever start behaving differently with a primary or non-primary attribute ID, we will need to check for attributes here as well. */ for(node=keyblock; node; node = node->next) { if(node->pkt->pkttype==PKT_USER_ID && node->pkt->pkt.user_id->attrib_data==NULL) { uid_count++; if(node->pkt->pkt.user_id->is_primary==2) { have_primary=1; break; } } } if(uid_count>1 && !have_primary) log_info(_("WARNING: no user ID has been marked as primary. This command" " may\n cause a different user ID to become" " the assumed primary.\n")); } /* Print a warning if the latest encryption subkey expires soon. This function is called after the expire data of the primary key has been changed. */ static void subkey_expire_warning (kbnode_t keyblock) { u32 curtime = make_timestamp (); kbnode_t node; PKT_public_key *pk; /* u32 mainexpire = 0; */ u32 subexpire = 0; u32 latest_date = 0; for (node = keyblock; node; node = node->next) { if (node->pkt->pkttype != PKT_PUBLIC_SUBKEY) continue; pk = node->pkt->pkt.public_key; if (!pk->is_valid) continue; if (pk->is_revoked) continue; if (pk->timestamp > curtime) continue; /* Ignore future keys. */ if (!(pk->pubkey_usage & PUBKEY_USAGE_ENC)) continue; /* Not an encryption key. */ if (pk->timestamp > latest_date || (!pk->timestamp && !latest_date)) { latest_date = pk->timestamp; subexpire = pk->expiredate; } } if (!subexpire) return; /* No valid subkey with an expiration time. */ if (curtime + (10*86400) > subexpire) { log_info (_("WARNING: Your encryption subkey expires soon.\n")); log_info (_("You may want to change its expiration date too.\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, int photo, const char *photo_name) { 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; 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); if(photo) { int hasattrib=0; for( node = pub_keyblock; node; node = node->next ) if( node->pkt->pkttype == PKT_USER_ID && node->pkt->pkt.user_id->attrib_data!=NULL) { hasattrib=1; break; } /* It is legal but bad for compatibility to add a photo ID to a v3 key as it means that PGP2 will not be able to use that key anymore. Also, PGP may not expect a photo on a v3 key. Don't bother to ask this if the key already has a photo - any damage has already been done at that point. -dms */ if(pk->version==3 && !hasattrib) { if(opt.expert) { tty_printf(_("WARNING: This is a PGP2-style key. " "Adding a photo ID may cause some versions\n" " of PGP to reject this key.\n")); if(!cpr_get_answer_is_yes("keyedit.v3_photo.okay", _("Are you sure you still want " "to add it? (y/N) "))) return 0; } else { tty_printf(_("You may not add a photo ID to " "a PGP2-style key.\n")); return 0; } } uid = generate_photo_id(pk,photo_name); } else uid = generate_user_id(); if( !uid ) return 0; rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x13, 0, 0, 0, 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 = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_USER_ID; pkt->pkt.user_id = scopy_user_id(uid); node = new_kbnode(pkt); if( sec_where ) insert_kbnode( sec_where, node, 0 ); else add_kbnode( sec_keyblock, node ); pkt = xmalloc_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 = xmalloc_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 = xmalloc_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 selected 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 ) { /* Only cause a trust update if we delete a non-revoked user id */ if(!node->pkt->pkt.user_id->is_revoked) update_trust=1; 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_utf8_string( uid->name, uid->len ); tty_printf("\n"); okay = inv_sig = no_key = other_err = 0; if(opt.with_colons) valid = print_and_check_one_sig_colon( pub_keyblock, node, &inv_sig, &no_key, &other_err, &selfsig, 1 ); else 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)")); /* Only update trust if we delete a good signature. The other two cases do not affect trust. */ if(okay) update_trust=1; } 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; } static int menu_clean(KBNODE keyblock,int self_only) { KBNODE uidnode; int modified=0,select_all=!count_selected_uids(keyblock); for(uidnode=keyblock->next; uidnode && uidnode->pkt->pkttype!=PKT_PUBLIC_SUBKEY; uidnode=uidnode->next) { if(uidnode->pkt->pkttype==PKT_USER_ID && (uidnode->flag&NODFLG_SELUID || select_all)) { int uids=0,sigs=0; char *user=utf8_to_native(uidnode->pkt->pkt.user_id->name, uidnode->pkt->pkt.user_id->len, 0); clean_one_uid(keyblock,uidnode,opt.verbose,self_only,&uids,&sigs); if(uids) { const char *reason; if(uidnode->pkt->pkt.user_id->is_revoked) reason=_("revoked"); else if(uidnode->pkt->pkt.user_id->is_expired) reason=_("expired"); else reason=_("invalid"); tty_printf (_("User ID \"%s\" compacted: %s\n"), user, reason); modified=1; } else if(sigs) { tty_printf (sigs==1? _("User ID \"%s\": %d signature removed\n"): _("User ID \"%s\": %d signatures removed\n"), user,sigs); modified=1; } else { tty_printf (self_only==1? _("User ID \"%s\": already minimized\n"): _("User ID \"%s\": already clean\n"), user); } xfree(user); } } return modified; } /**************** * 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 ); /* No need to set update_trust here since signing keys are no longer used to certify other keys, so there is no change in trust when revoking/removing them */ } /**************** * Ask for a new revoker, do the selfsignature and put it into * both keyblocks. * Return true if there is a new revoker */ static int menu_addrevoker( KBNODE pub_keyblock, KBNODE sec_keyblock, int sensitive ) { PKT_public_key *pk=NULL,*revoker_pk=NULL; PKT_secret_key *sk=NULL; PKT_signature *sig=NULL; PACKET *pkt; struct revocation_key revkey; size_t fprlen; int rc; assert(pub_keyblock->pkt->pkttype==PKT_PUBLIC_KEY); assert(sec_keyblock->pkt->pkttype==PKT_SECRET_KEY); pk=pub_keyblock->pkt->pkt.public_key; if(pk->numrevkeys==0 && pk->version==3) { /* It is legal but bad for compatibility to add a revoker to a v3 key as it means that PGP2 will not be able to use that key anymore. Also, PGP may not expect a revoker on a v3 key. Don't bother to ask this if the key already has a revoker - any damage has already been done at that point. -dms */ if(opt.expert) { tty_printf(_("WARNING: This is a PGP 2.x-style key. " "Adding a designated revoker may cause\n" " some versions of PGP to reject this key.\n")); if(!cpr_get_answer_is_yes("keyedit.v3_revoker.okay", _("Are you sure you still want " "to add it? (y/N) "))) return 0; } else { tty_printf(_("You may not add a designated revoker to " "a PGP 2.x-style key.\n")); return 0; } } sk=copy_secret_key(NULL,sec_keyblock->pkt->pkt.secret_key); for(;;) { char *answer; if(revoker_pk) free_public_key(revoker_pk); revoker_pk=xmalloc_clear(sizeof(*revoker_pk)); tty_printf("\n"); answer=cpr_get_utf8("keyedit.add_revoker", _("Enter the user ID of the designated revoker: ")); if(answer[0]=='\0' || answer[0]=='\004') { xfree(answer); goto fail; } /* Note that I'm requesting CERT here, which usually implies primary keys only, but some casual testing shows that PGP and GnuPG both can handle a designated revokation from a subkey. */ revoker_pk->req_usage=PUBKEY_USAGE_CERT; rc=get_pubkey_byname(revoker_pk,answer,NULL,NULL,1); if(rc) { log_error (_("key \"%s\" not found: %s\n"),answer,g10_errstr(rc)); xfree(answer); continue; } xfree(answer); fingerprint_from_pk(revoker_pk,revkey.fpr,&fprlen); if(fprlen!=20) { log_error(_("cannot appoint a PGP 2.x style key as a " "designated revoker\n")); continue; } revkey.class=0x80; if(sensitive) revkey.class|=0x40; revkey.algid=revoker_pk->pubkey_algo; if(cmp_public_keys(revoker_pk,pk)==0) { /* This actually causes no harm (after all, a key that designates itself as a revoker is the same as a regular key), but it's easy enough to check. */ log_error(_("you cannot appoint a key as its own " "designated revoker\n")); continue; } keyid_from_pk(pk,NULL); /* Does this revkey already exist? */ if(!pk->revkey && pk->numrevkeys) BUG(); else { int i; for(i=0;inumrevkeys;i++) { if(memcmp(&pk->revkey[i],&revkey, sizeof(struct revocation_key))==0) { char buf[50]; log_error(_("this key has already been designated " "as a revoker\n")); sprintf(buf,"%08lX%08lX", (ulong)pk->keyid[0],(ulong)pk->keyid[1]); write_status_text(STATUS_ALREADY_SIGNED,buf); break; } } if(inumrevkeys) continue; } print_pubkey_info(NULL,revoker_pk); print_fingerprint(revoker_pk,NULL,2); tty_printf("\n"); tty_printf(_("WARNING: appointing a key as a designated revoker " "cannot be undone!\n")); tty_printf("\n"); if(!cpr_get_answer_is_yes("keyedit.add_revoker.okay", _("Are you sure you want to appoint this " "key as a designated revoker? (y/N) "))) continue; free_public_key(revoker_pk); revoker_pk=NULL; break; } /* The 1F signature must be at least v4 to carry the revocation key subpacket. */ rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x1F, 0, 4, 0, 0, keygen_add_revkey,&revkey ); if( rc ) { log_error("signing failed: %s\n", g10_errstr(rc) ); goto fail; } free_secret_key(sk); sk=NULL; /* insert into secret keyblock */ pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = copy_signature(NULL, sig); insert_kbnode( sec_keyblock, new_kbnode(pkt), PKT_SIGNATURE ); /* insert into public keyblock */ pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( pub_keyblock, new_kbnode(pkt), PKT_SIGNATURE ); return 1; fail: if(sk) free_secret_key(sk); if(sig) free_seckey_enc(sig); if(revoker_pk) free_public_key(revoker_pk); return 0; } 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]; u32 timestamp=make_timestamp(); 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 subkey.\n")); return 0; } else if( n1 ) tty_printf(_("Changing expiration time for a subkey.\n")); else { tty_printf(_("Changing expiration time for the primary key.\n")); mainkey=1; no_primary_warning(pub_keyblock); } expiredate=ask_expire_interval(timestamp,0,NULL); if(expiredate) expiredate+=timestamp; 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 && ( mainkey || sub_pk ) ) { PKT_signature *sig = node->pkt->pkt.signature; if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] && ( (mainkey && uid && uid->created && (sig->sig_class&~3) == 0x10) || (!mainkey && sig->sig_class == 0x18) ) && sig->flags.chosen_selfsig ) { /* 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")); /* Note the potential oddity that the expiration date is calculated from the time when this function started ("timestamp"), but the signature is calculated from the time within update_keysig_packet(). On a slow or loaded machine, these two values may not match, making the expiration date off by a second or two. */ if( mainkey ) rc = update_keysig_packet(&newsig, sig, main_pk, uid, NULL, sk, keygen_add_key_expire, main_pk); else rc = update_keysig_packet(&newsig, sig, main_pk, NULL, sub_pk, sk, 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 = xmalloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = newsig; free_packet( node->pkt ); xfree( node->pkt ); node->pkt = newpkt; if( sn ) { newpkt = xmalloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = copy_signature( NULL, newsig ); free_packet( sn->pkt ); xfree( sn->pkt ); sn->pkt = newpkt; } sub_pk = NULL; } } } free_secret_key( sk ); update_trust=1; return 1; } static int menu_backsign(KBNODE pub_keyblock,KBNODE sec_keyblock) { int rc,modified=0; PKT_public_key *main_pk; PKT_secret_key *main_sk,*sub_sk=NULL; KBNODE node; u32 timestamp; assert(pub_keyblock->pkt->pkttype==PKT_PUBLIC_KEY); assert(sec_keyblock->pkt->pkttype==PKT_SECRET_KEY); merge_keys_and_selfsig(pub_keyblock); main_pk=pub_keyblock->pkt->pkt.public_key; main_sk=copy_secret_key(NULL,sec_keyblock->pkt->pkt.secret_key); keyid_from_pk(main_pk,NULL); /* We use the same timestamp for all backsigs so that we don't reveal information about the used machine. */ timestamp = make_timestamp (); for(node=pub_keyblock;node;node=node->next) { PKT_public_key *sub_pk=NULL; KBNODE node2,sig_pk=NULL,sig_sk=NULL; char *passphrase; if(sub_sk) { free_secret_key(sub_sk); sub_sk=NULL; } /* Find a signing subkey with no backsig */ if(node->pkt->pkttype==PKT_PUBLIC_SUBKEY) { if(node->pkt->pkt.public_key->pubkey_usage&PUBKEY_USAGE_SIG) { if(node->pkt->pkt.public_key->backsig) tty_printf(_("signing subkey %s is already cross-certified\n"), keystr_from_pk(node->pkt->pkt.public_key)); else sub_pk=node->pkt->pkt.public_key; } else tty_printf(_("subkey %s does not sign and so does" " not need to be cross-certified\n"), keystr_from_pk(node->pkt->pkt.public_key)); } if(!sub_pk) continue; /* Find the selected selfsig on this subkey */ for(node2=node->next; node2 && node2->pkt->pkttype==PKT_SIGNATURE; node2=node2->next) if(node2->pkt->pkt.signature->version>=4 && node2->pkt->pkt.signature->flags.chosen_selfsig) { sig_pk=node2; break; } if(!sig_pk) continue; /* Find the secret subkey that matches the public subkey */ for(node2=sec_keyblock;node2;node2=node2->next) if(node2->pkt->pkttype==PKT_SECRET_SUBKEY && !cmp_public_secret_key(sub_pk,node2->pkt->pkt.secret_key)) { sub_sk=copy_secret_key(NULL,node2->pkt->pkt.secret_key); break; } if(!sub_sk) { tty_printf(_("no secret subkey for public subkey %s - ignoring\n"), keystr_from_pk(sub_pk)); continue; } /* Now finally find the matching selfsig on the secret subkey. We can't use chosen_selfsig here (it's not set for secret keys), so we just pick the selfsig with the right class. This is what menu_expire does as well. */ for(node2=node2->next; node2 && node2->pkt->pkttype!=PKT_SECRET_SUBKEY; node2=node2->next) if(node2->pkt->pkttype==PKT_SIGNATURE && node2->pkt->pkt.signature->version>=4 && node2->pkt->pkt.signature->keyid[0]==sig_pk->pkt->pkt.signature->keyid[0] && node2->pkt->pkt.signature->keyid[1]==sig_pk->pkt->pkt.signature->keyid[1] && node2->pkt->pkt.signature->sig_class==sig_pk->pkt->pkt.signature->sig_class) { sig_sk=node2; break; } /* Now we can get to work. We have a main key and secret part, a signing subkey with signature and secret part possibly with signature. */ passphrase=get_last_passphrase(); set_next_passphrase(passphrase); xfree(passphrase); rc = make_backsig (sig_pk->pkt->pkt.signature, main_pk, sub_pk, sub_sk, timestamp); if(rc==0) { PKT_signature *newsig; PACKET *newpkt; passphrase=get_last_passphrase(); set_next_passphrase(passphrase); xfree(passphrase); rc=update_keysig_packet(&newsig,sig_pk->pkt->pkt.signature,main_pk, NULL,sub_pk,main_sk,NULL,NULL); if(rc==0) { /* Put the new sig into place on the pubkey */ newpkt=xmalloc_clear(sizeof(*newpkt)); newpkt->pkttype=PKT_SIGNATURE; newpkt->pkt.signature=newsig; free_packet(sig_pk->pkt); xfree(sig_pk->pkt); sig_pk->pkt=newpkt; if(sig_sk) { /* Put the new sig into place on the seckey */ newpkt=xmalloc_clear(sizeof(*newpkt)); newpkt->pkttype=PKT_SIGNATURE; newpkt->pkt.signature=copy_signature(NULL,newsig); free_packet(sig_sk->pkt); xfree(sig_sk->pkt); sig_sk->pkt=newpkt; } modified=1; } else { log_error("update_keysig_packet failed: %s\n",g10_errstr(rc)); break; } } else { log_error("make_backsig failed: %s\n",g10_errstr(rc)); break; } } set_next_passphrase(NULL); free_secret_key(main_sk); if(sub_sk) free_secret_key(sub_sk); return modified; } static int change_primary_uid_cb ( PKT_signature *sig, void *opaque ) { byte buf[1]; /* first clear all primary uid flags so that we are sure none are * lingering around */ delete_sig_subpkt (sig->hashed, SIGSUBPKT_PRIMARY_UID); delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PRIMARY_UID); /* if opaque is set,we want to set the primary id */ if (opaque) { buf[0] = 1; build_sig_subpkt (sig, SIGSUBPKT_PRIMARY_UID, buf, 1 ); } return 0; } /* * Set the primary uid flag for the selected UID. We will also reset * all other primary uid flags. For this to work with have to update * all the signature timestamps. If we would do this with the current * time, we lose quite a lot of information, so we use a a kludge to * do this: Just increment the timestamp by one second which is * sufficient to updated a signature during import. */ static int menu_set_primary_uid ( KBNODE pub_keyblock, KBNODE sec_keyblock ) { PKT_secret_key *sk; /* copy of the main sk */ PKT_public_key *main_pk; PKT_user_id *uid; KBNODE node; u32 keyid[2]; int selected; int attribute = 0; int modified = 0; if ( count_selected_uids (pub_keyblock) != 1 ) { tty_printf(_("Please select exactly one user ID.\n")); return 0; } 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 = NULL; uid = NULL; selected = 0; /* Is our selected uid an attribute packet? */ for ( node=pub_keyblock; node; node = node->next ) if (node->pkt->pkttype == PKT_USER_ID && node->flag & NODFLG_SELUID) attribute = (node->pkt->pkt.user_id->attrib_data!=NULL); for ( node=pub_keyblock; node; node = node->next ) { if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; /* ready */ if ( node->pkt->pkttype == PKT_PUBLIC_KEY ) { main_pk = node->pkt->pkt.public_key; keyid_from_pk( main_pk, keyid ); } else if ( node->pkt->pkttype == PKT_USER_ID ) { uid = node->pkt->pkt.user_id; selected = node->flag & NODFLG_SELUID; } else if ( main_pk && uid && node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; if ( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] && (uid && (sig->sig_class&~3) == 0x10) && attribute == (uid->attrib_data!=NULL) && sig->flags.chosen_selfsig ) { if(sig->version < 4) { char *user=utf8_to_native(uid->name,strlen(uid->name),0); log_info(_("skipping v3 self-signature on user ID \"%s\"\n"), user); xfree(user); } else { /* This is a selfsignature which is to be replaced. We can just ignore v3 signatures because they are not able to carry the primary ID flag. We also ignore self-sigs on user IDs that are not of the same type that we are making primary. That is, if we are making a user ID primary, we alter user IDs. If we are making an attribute packet primary, we alter attribute packets. */ /* FIXME: We must make sure that we only have one self-signature per user ID here (not counting revocations) */ PKT_signature *newsig; PACKET *newpkt; const byte *p; int action; /* see whether this signature has the primary UID flag */ p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_PRIMARY_UID, NULL ); if ( !p ) p = parse_sig_subpkt (sig->unhashed, SIGSUBPKT_PRIMARY_UID, NULL ); if ( p && *p ) /* yes */ action = selected? 0 : -1; else /* no */ action = selected? 1 : 0; if (action) { int rc = update_keysig_packet (&newsig, sig, main_pk, uid, NULL, sk, change_primary_uid_cb, action > 0? "x":NULL ); if( rc ) { log_error ("update_keysig_packet failed: %s\n", g10_errstr(rc)); free_secret_key( sk ); return 0; } /* replace the packet */ newpkt = xmalloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = newsig; free_packet( node->pkt ); xfree( node->pkt ); node->pkt = newpkt; modified = 1; } } } } } free_secret_key( sk ); return modified; } /* * Set preferences to new values for the selected user IDs */ static int menu_set_preferences (KBNODE pub_keyblock, KBNODE sec_keyblock ) { PKT_secret_key *sk; /* copy of the main sk */ PKT_public_key *main_pk; PKT_user_id *uid; KBNODE node; u32 keyid[2]; int selected, select_all; int modified = 0; no_primary_warning(pub_keyblock); select_all = !count_selected_uids (pub_keyblock); 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 = NULL; uid = NULL; selected = 0; for ( node=pub_keyblock; node; node = node->next ) { if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; /* ready */ if ( node->pkt->pkttype == PKT_PUBLIC_KEY ) { main_pk = node->pkt->pkt.public_key; keyid_from_pk( main_pk, keyid ); } else if ( node->pkt->pkttype == PKT_USER_ID ) { uid = node->pkt->pkt.user_id; selected = select_all || (node->flag & NODFLG_SELUID); } else if ( main_pk && uid && selected && node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; if ( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] && (uid && (sig->sig_class&~3) == 0x10) && sig->flags.chosen_selfsig ) { if( sig->version < 4 ) { char *user=utf8_to_native(uid->name,strlen(uid->name),0); log_info(_("skipping v3 self-signature on user ID \"%s\"\n"), user); xfree(user); } else { /* This is a selfsignature which is to be replaced * We have to ignore v3 signatures because they are * not able to carry the preferences */ PKT_signature *newsig; PACKET *newpkt; int rc; rc = update_keysig_packet (&newsig, sig, main_pk, uid, NULL, sk, keygen_upd_std_prefs, NULL ); if( rc ) { log_error ("update_keysig_packet failed: %s\n", g10_errstr(rc)); free_secret_key( sk ); return 0; } /* replace the packet */ newpkt = xmalloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = newsig; free_packet( node->pkt ); xfree( node->pkt ); node->pkt = newpkt; modified = 1; } } } } free_secret_key( sk ); return modified; } static int menu_set_keyserver_url (const char *url, KBNODE pub_keyblock, KBNODE sec_keyblock ) { PKT_secret_key *sk; /* copy of the main sk */ PKT_public_key *main_pk; PKT_user_id *uid; KBNODE node; u32 keyid[2]; int selected, select_all; int modified = 0; char *answer,*uri; no_primary_warning(pub_keyblock); if(url) answer=xstrdup(url); else { answer=cpr_get_utf8("keyedit.add_keyserver", _("Enter your preferred keyserver URL: ")); if(answer[0]=='\0' || answer[0]=='\004') { xfree(answer); return 0; } } if(ascii_strcasecmp(answer,"none")==0) uri=NULL; else { struct keyserver_spec *keyserver=NULL; /* Sanity check the format */ keyserver=parse_keyserver_uri(answer,1,NULL,0); xfree(answer); if(!keyserver) { log_info(_("could not parse keyserver URL\n")); return 0; } uri=xstrdup(keyserver->uri); free_keyserver_spec(keyserver); } select_all = !count_selected_uids (pub_keyblock); 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 = NULL; uid = NULL; selected = 0; for ( node=pub_keyblock; node; node = node->next ) { if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; /* ready */ if ( node->pkt->pkttype == PKT_PUBLIC_KEY ) { main_pk = node->pkt->pkt.public_key; keyid_from_pk( main_pk, keyid ); } else if ( node->pkt->pkttype == PKT_USER_ID ) { uid = node->pkt->pkt.user_id; selected = select_all || (node->flag & NODFLG_SELUID); } else if ( main_pk && uid && selected && node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; if ( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] && (uid && (sig->sig_class&~3) == 0x10) && sig->flags.chosen_selfsig) { char *user=utf8_to_native(uid->name,strlen(uid->name),0); if( sig->version < 4 ) log_info(_("skipping v3 self-signature on user ID \"%s\"\n"), user); else { /* This is a selfsignature which is to be replaced * We have to ignore v3 signatures because they are * not able to carry the subpacket. */ PKT_signature *newsig; PACKET *newpkt; int rc; const byte *p; size_t plen; p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_PREF_KS,&plen); if(p && plen) { tty_printf("Current preferred keyserver for user" " ID \"%s\": ",user); tty_print_utf8_string(p,plen); tty_printf("\n"); if(!cpr_get_answer_is_yes("keyedit.confirm_keyserver", uri?_("Are you sure you want to replace it? (y/N) "): _("Are you sure you want to delete it? (y/N) "))) continue; } else if(uri==NULL) { /* There is no current keyserver URL, so there is no point in trying to un-set it. */ continue; } rc = update_keysig_packet (&newsig, sig, main_pk, uid, NULL, sk, keygen_add_keyserver_url, uri ); if( rc ) { log_error ("update_keysig_packet failed: %s\n", g10_errstr(rc)); free_secret_key( sk ); xfree(uri); return 0; } /* replace the packet */ newpkt = xmalloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = newsig; free_packet( node->pkt ); xfree( node->pkt ); node->pkt = newpkt; modified = 1; } xfree(user); } } } xfree(uri); free_secret_key( sk ); return modified; } static int menu_set_notation(const char *string,KBNODE pub_keyblock,KBNODE sec_keyblock) { PKT_secret_key *sk; /* copy of the main sk */ PKT_public_key *main_pk; PKT_user_id *uid; KBNODE node; u32 keyid[2]; int selected, select_all; int modified = 0; char *answer; struct notation *notation; no_primary_warning(pub_keyblock); if(string) answer=xstrdup(string); else { answer=cpr_get_utf8("keyedit.add_notation", _("Enter the notation: ")); if(answer[0]=='\0' || answer[0]=='\004') { xfree(answer); return 0; } } if(ascii_strcasecmp(answer,"none")==0 || ascii_strcasecmp(answer,"-")==0) notation=NULL; /* delete them all */ else { notation=string_to_notation(answer,0); if(!notation) { xfree(answer); return 0; } } xfree(answer); select_all = !count_selected_uids (pub_keyblock); 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 = NULL; uid = NULL; selected = 0; for ( node=pub_keyblock; node; node = node->next ) { if ( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; /* ready */ if ( node->pkt->pkttype == PKT_PUBLIC_KEY ) { main_pk = node->pkt->pkt.public_key; keyid_from_pk( main_pk, keyid ); } else if ( node->pkt->pkttype == PKT_USER_ID ) { uid = node->pkt->pkt.user_id; selected = select_all || (node->flag & NODFLG_SELUID); } else if ( main_pk && uid && selected && node->pkt->pkttype == PKT_SIGNATURE ) { PKT_signature *sig = node->pkt->pkt.signature; if ( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] && (uid && (sig->sig_class&~3) == 0x10) && sig->flags.chosen_selfsig) { char *user=utf8_to_native(uid->name,strlen(uid->name),0); if( sig->version < 4 ) log_info(_("skipping v3 self-signature on user ID \"%s\"\n"), user); else { PKT_signature *newsig; PACKET *newpkt; int rc,skip=0,addonly=1; if(sig->flags.notation) { tty_printf("Current notations for user ID \"%s\":\n", user); tty_print_notations(-9,sig); } else { tty_printf("No notations on user ID \"%s\"\n",user); if(notation==NULL) { /* There are no current notations, so there is no point in trying to un-set them. */ continue; } } if(notation) { struct notation *n; int deleting=0; notation->next=sig_to_notation(sig); for(n=notation->next;n;n=n->next) if(strcmp(n->name,notation->name)==0) { if(notation->value) { if(strcmp(n->value,notation->value)==0) { if(notation->flags.ignore) { /* Value match with a delete flag. */ n->flags.ignore=1; deleting=1; } else { /* Adding the same notation twice, so don't add it at all. */ skip=1; tty_printf("Skipping notation:" " %s=%s\n", notation->name, notation->value); break; } } } else { /* No value, so it means delete. */ n->flags.ignore=1; deleting=1; } if(n->flags.ignore) { tty_printf("Removing notation: %s=%s\n", n->name,n->value); addonly=0; } } if(!notation->flags.ignore && !skip) tty_printf("Adding notation: %s=%s\n", notation->name,notation->value); /* We tried to delete, but had no matches */ if(notation->flags.ignore && !deleting) continue; } else { tty_printf("Removing all notations\n"); addonly=0; } if(skip || (!addonly && !cpr_get_answer_is_yes("keyedit.confirm_notation", _("Proceed? (y/N) ")))) continue; rc = update_keysig_packet (&newsig, sig, main_pk, uid, NULL, sk, keygen_add_notations, notation ); if( rc ) { log_error ("update_keysig_packet failed: %s\n", g10_errstr(rc)); free_secret_key( sk ); free_notation(notation); xfree(user); return 0; } /* replace the packet */ newpkt = xmalloc_clear( sizeof *newpkt ); newpkt->pkttype = PKT_SIGNATURE; newpkt->pkt.signature = newsig; free_packet( node->pkt ); xfree( node->pkt ); node->pkt = newpkt; modified = 1; if(notation) { /* Snip off the notation list from the sig */ free_notation(notation->next); notation->next=NULL; } xfree(user); } } } } free_notation(notation); free_secret_key( sk ); return modified; } /**************** * 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; } /* Search in the keyblock for a uid that matches namehash */ static int menu_select_uid_namehash( KBNODE keyblock, const char *namehash ) { byte hash[NAMEHASH_LEN]; KBNODE node; int i; assert(strlen(namehash)==NAMEHASH_LEN*2); for(i=0;inext;node;node=node->next) { if(node->pkt->pkttype==PKT_USER_ID) { namehash_from_uid(node->pkt->pkt.user_id); if(memcmp(node->pkt->pkt.user_id->namehash,hash,NAMEHASH_LEN)==0) { if(node->flag&NODFLG_SELUID) node->flag &= ~NODFLG_SELUID; else node->flag |= NODFLG_SELUID; break; } } } if(!node) { tty_printf(_("No user ID with hash %s\n"),namehash); return 0; } 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 subkey 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); } /* returns how many real (i.e. not attribute) uids are unmarked */ static int real_uids_left( KBNODE keyblock ) { KBNODE node; int real=0; for(node=keyblock;node;node=node->next) if(node->pkt->pkttype==PKT_USER_ID && !(node->flag&NODFLG_SELUID) && !node->pkt->pkt.user_id->attrib_data) real++; return real; } /* * 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 ) { int doit=0; PKT_user_id *uid; 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; } uid=unode->pkt->pkt.user_id; if(opt.with_colons) { if(uid->attrib_data) printf("uat:::::::::%u %lu",uid->numattribs,uid->attrib_len); else { printf("uid:::::::::"); print_string (stdout, uid->name, uid->len, ':'); } printf("\n"); print_and_check_one_sig_colon(keyblock,node,NULL,NULL,NULL,NULL,1); } else { char *p=utf8_to_native(unode->pkt->pkt.user_id->name, unode->pkt->pkt.user_id->len,0); tty_printf(_("user ID: \"%s\"\n"),p); xfree(p); tty_printf(_("signed by your key %s on %s%s%s\n"), keystr(sig->keyid),datestr_from_sig(sig), sig->flags.exportable?"":_(" (non-exportable)"),""); } if(sig->flags.expired) { tty_printf(_("This signature expired on %s.\n"), expirestr_from_sig(sig)); /* Use a different question so we can have different help text */ doit=cpr_get_answer_is_yes("ask_revoke_sig.expired", _("Are you sure you still want to revoke it? (y/N) ")); } else doit=cpr_get_answer_is_yes("ask_revoke_sig.one", _("Create a revocation certificate for this signature? (y/N) ")); if(doit) { 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 rc, any, skip=1, all=!count_selected_uids(keyblock); struct revocation_reason_info *reason = NULL; assert(keyblock->pkt->pkttype==PKT_PUBLIC_KEY); /* First check whether we have any signatures at all. */ any = 0; for (node = keyblock; node; node = node->next ) { node->flag &= ~(NODFLG_SELSIG | NODFLG_MARK_A); if (node->pkt->pkttype == PKT_USER_ID) { if (node->flag&NODFLG_SELUID || all) skip = 0; else skip = 1; } else if (!skip && node->pkt->pkttype == PKT_SIGNATURE && ((sig = node->pkt->pkt.signature), !seckey_available(sig->keyid) )) { if ((sig->sig_class&~3) == 0x10) { any = 1; break; } } } if (!any) { tty_printf (_("Not signed by you.\n")); return 0; } /* FIXME: detect duplicates here */ tty_printf(_("You have signed these user IDs on key %s:\n"), keystr_from_pk(keyblock->pkt->pkt.public_key)); for( node = keyblock; node; node = node->next ) { node->flag &= ~(NODFLG_SELSIG | NODFLG_MARK_A); if( node->pkt->pkttype == PKT_USER_ID ) { if( node->flag&NODFLG_SELUID || all ) { PKT_user_id *uid = node->pkt->pkt.user_id; /* Hmmm: Should we show only UIDs with a signature? */ tty_printf(" "); tty_print_utf8_string( uid->name, uid->len ); tty_printf("\n"); skip=0; } else skip=1; } else if( !skip && node->pkt->pkttype == PKT_SIGNATURE && ((sig = node->pkt->pkt.signature), !seckey_available(sig->keyid) ) ) { if( (sig->sig_class&~3) == 0x10 ) { tty_printf(" "); tty_printf(_("signed by your key %s on %s%s%s\n"), keystr(sig->keyid), datestr_from_sig(sig), sig->flags.exportable?"":_(" (non-exportable)"), sig->flags.revocable?"":_(" (non-revocable)")); if(sig->flags.revocable) node->flag |= NODFLG_SELSIG; } else if( sig->sig_class == 0x30 ) { tty_printf(" "); tty_printf(_("revoked by your key %s on %s\n"), keystr(sig->keyid),datestr_from_sig(sig)); } } } tty_printf("\n"); /* 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_utf8_string( uid->name, uid->len ); tty_printf("\n"); } else if( node->pkt->pkttype == PKT_SIGNATURE ) { sig = node->pkt->pkt.signature; tty_printf(" "); tty_printf(_("signed by your key %s on %s%s%s\n"), keystr(sig->keyid), datestr_from_sig(sig),"", sig->flags.exportable?"":_(" (non-exportable)") ); } } 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 */ reason = ask_revocation_reason( 0, 1, 0 ); if( !reason ) { /* user decided to cancel */ return 0; } /* 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_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 ); attrib.reason = reason; attrib.non_exportable=!node->pkt->pkt.signature->flags.exportable; node->flag &= ~NODFLG_MARK_A; sk = xmalloc_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, 0, 0, 0, sign_mk_attrib, &attrib ); free_secret_key(sk); if( rc ) { log_error(_("signing failed: %s\n"), g10_errstr(rc)); release_revocation_reason_info( reason ); return changed; } changed = 1; /* we changed the keyblock */ update_trust = 1; /* Are we revoking our own uid? */ if(primary_pk->keyid[0]==sig->keyid[0] && primary_pk->keyid[1]==sig->keyid[1]) unode->pkt->pkt.user_id->is_revoked=1; pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( unode, new_kbnode(pkt), 0 ); goto reloop; } release_revocation_reason_info( reason ); return changed; } /* Revoke a user ID (i.e. revoke a user ID selfsig). Return true if keyblock changed. */ static int menu_revuid( KBNODE pub_keyblock, KBNODE sec_keyblock ) { PKT_public_key *pk = pub_keyblock->pkt->pkt.public_key; PKT_secret_key *sk = copy_secret_key( NULL, sec_keyblock->pkt->pkt.secret_key ); KBNODE node; int changed = 0; int rc; struct revocation_reason_info *reason = NULL; /* Note that this is correct as per the RFCs, but nevertheless somewhat meaningless in the real world. 1991 did define the 0x30 sig class, but PGP 2.x did not actually implement it, so it would probably be safe to use v4 revocations everywhere. -ds */ for( node = pub_keyblock; node; node = node->next ) if(pk->version>3 || (node->pkt->pkttype==PKT_USER_ID && node->pkt->pkt.user_id->selfsigversion>3)) { if((reason = ask_revocation_reason( 0, 1, 4 ))) break; else goto leave; } reloop: /* (better this way because we are modifing the keyring) */ for( node = pub_keyblock; node; node = node->next ) if(node->pkt->pkttype == PKT_USER_ID && (node->flag & NODFLG_SELUID)) { PKT_user_id *uid=node->pkt->pkt.user_id; if(uid->is_revoked) { char *user=utf8_to_native(uid->name,uid->len,0); log_info(_("user ID \"%s\" is already revoked\n"),user); xfree(user); } else { PACKET *pkt; PKT_signature *sig; struct sign_attrib attrib; u32 timestamp=make_timestamp(); if(uid->created>=timestamp) { /* Okay, this is a problem. The user ID selfsig was created in the future, so we need to warn the user and set our revocation timestamp one second after that so everything comes out clean. */ log_info(_("WARNING: a user ID signature is dated %d" " seconds in the future\n"),uid->created-timestamp); timestamp=uid->created+1; } memset( &attrib, 0, sizeof attrib ); attrib.reason = reason; node->flag &= ~NODFLG_SELUID; rc = make_keysig_packet( &sig, pk, uid, NULL, sk, 0x30, 0, (reason==NULL)?3:0, timestamp, 0, sign_mk_attrib, &attrib ); if( rc ) { log_error(_("signing failed: %s\n"), g10_errstr(rc)); goto leave; } else { pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( node, new_kbnode(pkt), 0 ); /* If the trustdb has an entry for this key+uid then the trustdb needs an update. */ if(!update_trust && (get_validity(pk,uid)&TRUST_MASK)>=TRUST_UNDEFINED) update_trust=1; changed = 1; node->pkt->pkt.user_id->is_revoked=1; goto reloop; } } } if(changed) commit_kbnode( &pub_keyblock ); leave: free_secret_key(sk); release_revocation_reason_info( reason ); return changed; } /**************** * Revoke the whole key. */ static int menu_revkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) { PKT_public_key *pk=pub_keyblock->pkt->pkt.public_key; PKT_secret_key *sk; int rc,changed = 0; struct revocation_reason_info *reason; PACKET *pkt; PKT_signature *sig; if(pk->is_revoked) { tty_printf(_("Key %s is already revoked.\n"),keystr_from_pk(pk)); return 0; } reason = ask_revocation_reason( 1, 0, 0 ); /* user decided to cancel */ if( !reason ) return 0; sk = copy_secret_key( NULL, sec_keyblock->pkt->pkt.secret_key ); rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0, opt.force_v4_certs?4:0, 0, 0, revocation_reason_build_cb, reason ); free_secret_key(sk); if( rc ) { log_error(_("signing failed: %s\n"), g10_errstr(rc)); goto scram; } changed = 1; /* we changed the keyblock */ pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; insert_kbnode( pub_keyblock, new_kbnode(pkt), 0 ); commit_kbnode( &pub_keyblock ); update_trust=1; scram: release_revocation_reason_info( reason ); return changed; } static int menu_revsubkey( KBNODE pub_keyblock, KBNODE sec_keyblock ) { PKT_public_key *mainpk; KBNODE node; int changed = 0; int rc; struct revocation_reason_info *reason = NULL; reason = ask_revocation_reason( 1, 0, 0 ); if( !reason ) { /* user decided to cancel */ return 0; } 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; struct sign_attrib attrib; if(subpk->is_revoked) { tty_printf(_("Subkey %s is already revoked.\n"), keystr_from_pk(subpk)); continue; } memset( &attrib, 0, sizeof attrib ); attrib.reason = reason; 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, 0, 0, 0, sign_mk_attrib, &attrib ); free_secret_key(sk); if( rc ) { log_error(_("signing failed: %s\n"), g10_errstr(rc)); release_revocation_reason_info( reason ); return changed; } changed = 1; /* we changed the keyblock */ pkt = xmalloc_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 );*/ /* No need to set update_trust here since signing keys no longer are used to certify other keys, so there is no change in trust when revoking/removing them */ release_revocation_reason_info( reason ); return changed; } /* Note that update_ownertrust is going to mark the trustdb dirty when enabling or disabling a key. This is arguably sub-optimal as disabled keys are still counted in the web of trust, but perhaps not worth adding extra complexity to change. -ds */ static int enable_disable_key( KBNODE keyblock, int disable ) { PKT_public_key *pk = find_kbnode( keyblock, PKT_PUBLIC_KEY ) ->pkt->pkt.public_key; unsigned int trust, newtrust; trust = newtrust = get_ownertrust (pk); newtrust &= ~TRUST_FLAG_DISABLED; if( disable ) newtrust |= TRUST_FLAG_DISABLED; if( trust == newtrust ) return 0; /* already in that state */ update_ownertrust(pk, newtrust ); return 0; } static void menu_showphoto( KBNODE keyblock ) { KBNODE node; int select_all = !count_selected_uids(keyblock); int count=0; PKT_public_key *pk=NULL; /* Look for the public key first. We have to be really, really, explicit as to which photo this is, and what key it is a UID on since people may want to sign it. */ for( node = keyblock; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_KEY ) pk = node->pkt->pkt.public_key; else if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = node->pkt->pkt.user_id; count++; if((select_all || (node->flag & NODFLG_SELUID)) && uid->attribs!=NULL) { int i; for(i=0;inumattribs;i++) { byte type; u32 size; if(uid->attribs[i].type==ATTRIB_IMAGE && parse_image_header(&uid->attribs[i],&type,&size)) { tty_printf(_("Displaying %s photo ID of size %ld for " "key %s (uid %d)\n"), image_type_to_string(type,1), (ulong)size,keystr_from_pk(pk),count); show_photos(&uid->attribs[i],1,pk,NULL,uid); } } } } } } gnupg-1.4.20/g10/keyserver.c0000644000175000017500000016201312635262326012423 00000000000000/* keyserver.c - generic keyserver code * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, * 2009, 2012 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 3 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, see . */ #include #include #include #include #include #include #include "filter.h" #include "keydb.h" #include "status.h" #include "exec.h" #include "main.h" #include "i18n.h" #include "iobuf.h" #include "memory.h" #include "ttyio.h" #include "options.h" #include "packet.h" #include "trustdb.h" #include "keyserver-internal.h" #include "util.h" #ifdef USE_DNS_SRV #include "srv.h" #endif #ifdef HAVE_W32_SYSTEM /* It seems Vista doesn't grok X_OK and so fails access() tests. Previous versions interpreted X_OK as F_OK anyway, so we'll just use F_OK directly. */ #undef X_OK #define X_OK F_OK #endif /* HAVE_W32_SYSTEM */ struct keyrec { KEYDB_SEARCH_DESC desc; u32 createtime,expiretime; int size,flags; byte type; IOBUF uidbuf; unsigned int lines; }; enum ks_action {KS_UNKNOWN=0,KS_GET,KS_GETNAME,KS_SEND,KS_SEARCH}; static struct parse_options keyserver_opts[]= { /* some of these options are not real - just for the help message */ {"max-cert-size",0,NULL,NULL}, {"include-revoked",0,NULL,N_("include revoked keys in search results")}, {"include-subkeys",0,NULL,N_("include subkeys when searching by key ID")}, {"use-temp-files",0,NULL, N_("use temporary files to pass data to keyserver helpers")}, {"keep-temp-files",KEYSERVER_KEEP_TEMP_FILES,NULL, N_("do not delete temporary files after using them")}, {"refresh-add-fake-v3-keyids",KEYSERVER_ADD_FAKE_V3,NULL, NULL}, {"auto-key-retrieve",KEYSERVER_AUTO_KEY_RETRIEVE,NULL, N_("automatically retrieve keys when verifying signatures")}, {"honor-keyserver-url",KEYSERVER_HONOR_KEYSERVER_URL,NULL, N_("honor the preferred keyserver URL set on the key")}, {"honor-pka-record",KEYSERVER_HONOR_PKA_RECORD,NULL, N_("honor the PKA record set on a key when retrieving keys")}, {NULL,0,NULL,NULL} }; static int keyserver_work(enum ks_action action,STRLIST list, KEYDB_SEARCH_DESC *desc,int count, unsigned char **fpr,size_t *fpr_len, struct keyserver_spec *keyserver); /* Reasonable guess */ #define DEFAULT_MAX_CERT_SIZE 16384 static size_t max_cert_size=DEFAULT_MAX_CERT_SIZE; static void add_canonical_option(char *option,STRLIST *list) { char *arg=argsplit(option); if(arg) { char *joined; joined=xmalloc(strlen(option)+1+strlen(arg)+1); /* Make a canonical name=value form with no spaces */ strcpy(joined,option); strcat(joined,"="); strcat(joined,arg); append_to_strlist(list,joined); xfree(joined); } else append_to_strlist(list,option); } int parse_keyserver_options(char *options) { int ret=1; char *tok; char *max_cert=NULL; keyserver_opts[0].value=&max_cert; while((tok=optsep(&options))) { if(tok[0]=='\0') continue; /* For backwards compatibility. 1.2.x used honor-http-proxy and there are a good number of documents published that recommend it. */ if(ascii_strcasecmp(tok,"honor-http-proxy")==0) tok="http-proxy"; else if(ascii_strcasecmp(tok,"no-honor-http-proxy")==0) tok="no-http-proxy"; /* We accept quite a few possible options here - some options to handle specially, the keyserver_options list, and import and export options that pertain to keyserver operations. Note that you must use strncasecmp here as there might be an =argument attached which will foil the use of strcasecmp. */ #ifdef EXEC_TEMPFILE_ONLY if(ascii_strncasecmp(tok,"use-temp-files",14)==0 || ascii_strncasecmp(tok,"no-use-temp-files",17)==0) log_info(_("WARNING: keyserver option `%s' is not used" " on this platform\n"),tok); #else if(ascii_strncasecmp(tok,"use-temp-files",14)==0) opt.keyserver_options.options|=KEYSERVER_USE_TEMP_FILES; else if(ascii_strncasecmp(tok,"no-use-temp-files",17)==0) opt.keyserver_options.options&=~KEYSERVER_USE_TEMP_FILES; #endif else if(!parse_options(tok,&opt.keyserver_options.options, keyserver_opts,0) && !parse_import_options(tok, &opt.keyserver_options.import_options,0) && !parse_export_options(tok, &opt.keyserver_options.export_options,0)) { /* All of the standard options have failed, so the option is destined for a keyserver plugin. */ add_canonical_option(tok,&opt.keyserver_options.other); } } if(max_cert) { max_cert_size=strtoul(max_cert,(char **)NULL,10); if(max_cert_size==0) max_cert_size=DEFAULT_MAX_CERT_SIZE; } return ret; } void free_keyserver_spec(struct keyserver_spec *keyserver) { xfree(keyserver->uri); xfree(keyserver->scheme); xfree(keyserver->auth); xfree(keyserver->host); xfree(keyserver->port); xfree(keyserver->path); xfree(keyserver->opaque); free_strlist(keyserver->options); xfree(keyserver); } /* Return 0 for match */ static int cmp_keyserver_spec(struct keyserver_spec *one,struct keyserver_spec *two) { if(ascii_strcasecmp(one->scheme,two->scheme)==0) { if(one->host && two->host && ascii_strcasecmp(one->host,two->host)==0) { if((one->port && two->port && ascii_strcasecmp(one->port,two->port)==0) || (!one->port && !two->port)) return 0; } else if(one->opaque && two->opaque && ascii_strcasecmp(one->opaque,two->opaque)==0) return 0; } return 1; } /* Try and match one of our keyservers. If we can, return that. If we can't, return our input. */ struct keyserver_spec * keyserver_match(struct keyserver_spec *spec) { struct keyserver_spec *ks; for(ks=opt.keyserver;ks;ks=ks->next) if(cmp_keyserver_spec(spec,ks)==0) return ks; return spec; } /* TODO: once we cut over to an all-curl world, we don't need this parser any longer so it can be removed, or at least moved to keyserver/ksutil.c for limited use in gpgkeys_ldap or the like. */ struct keyserver_spec * parse_keyserver_uri(const char *string,int require_scheme, const char *configname,unsigned int configlineno) { int assume_hkp=0; struct keyserver_spec *keyserver; const char *idx; int count; char *uri,*options; assert(string!=NULL); keyserver=xmalloc_clear(sizeof(struct keyserver_spec)); uri=xstrdup(string); options=strchr(uri,' '); if(options) { char *tok; *options='\0'; options++; while((tok=optsep(&options))) add_canonical_option(tok,&keyserver->options); } /* Get the scheme */ for(idx=uri,count=0;*idx && *idx!=':';idx++) { count++; /* Do we see the start of an RFC-2732 ipv6 address here? If so, there clearly isn't a scheme so get out early. */ if(*idx=='[') { /* Was the '[' the first thing in the string? If not, we have a mangled scheme with a [ in it so fail. */ if(count==1) break; else goto fail; } } if(count==0) goto fail; if(*idx=='\0' || *idx=='[') { if(require_scheme) return NULL; /* Assume HKP if there is no scheme */ assume_hkp=1; keyserver->scheme=xstrdup("hkp"); keyserver->uri=xmalloc(strlen(keyserver->scheme)+3+strlen(uri)+1); strcpy(keyserver->uri,keyserver->scheme); strcat(keyserver->uri,"://"); strcat(keyserver->uri,uri); } else { int i; keyserver->uri=xstrdup(uri); keyserver->scheme=xmalloc(count+1); /* Force to lowercase */ for(i=0;ischeme[i]=ascii_tolower(uri[i]); keyserver->scheme[i]='\0'; /* Skip past the scheme and colon */ uri+=count+1; } if(ascii_strcasecmp(keyserver->scheme,"x-broken-hkp")==0) { deprecated_warning(configname,configlineno,"x-broken-hkp", "--keyserver-options ","broken-http-proxy"); xfree(keyserver->scheme); keyserver->scheme=xstrdup("hkp"); append_to_strlist(&opt.keyserver_options.other,"broken-http-proxy"); } else if(ascii_strcasecmp(keyserver->scheme,"x-hkp")==0) { /* Canonicalize this to "hkp" so it works with both the internal and external keyserver interface. */ xfree(keyserver->scheme); keyserver->scheme=xstrdup("hkp"); } if(assume_hkp || (uri[0]=='/' && uri[1]=='/')) { /* Two slashes means network path. */ /* Skip over the "//", if any */ if(!assume_hkp) uri+=2; /* Do we have userinfo auth data present? */ for(idx=uri,count=0;*idx && *idx!='@' && *idx!='/';idx++) count++; /* We found a @ before the slash, so that means everything before the @ is auth data. */ if(*idx=='@') { if(count==0) goto fail; keyserver->auth=xmalloc(count+1); strncpy(keyserver->auth,uri,count); keyserver->auth[count]='\0'; uri+=count+1; } /* Is it an RFC-2732 ipv6 [literal address] ? */ if(*uri=='[') { for(idx=uri+1,count=1;*idx && ((isascii (*idx) && isxdigit(*idx)) || *idx==':' || *idx=='.');idx++) count++; /* Is the ipv6 literal address terminated? */ if(*idx==']') count++; else goto fail; } else for(idx=uri,count=0;*idx && *idx!=':' && *idx!='/';idx++) count++; if(count==0) goto fail; keyserver->host=xmalloc(count+1); strncpy(keyserver->host,uri,count); keyserver->host[count]='\0'; /* Skip past the host */ uri+=count; if(*uri==':') { /* It would seem to be reasonable to limit the range of the ports to values between 1-65535, but RFC 1738 and 1808 imply there is no limit. Of course, the real world has limits. */ for(idx=uri+1,count=0;*idx && *idx!='/';idx++) { count++; /* Ports are digits only */ if(!digitp(idx)) goto fail; } keyserver->port=xmalloc(count+1); strncpy(keyserver->port,uri+1,count); keyserver->port[count]='\0'; /* Skip past the colon and port number */ uri+=1+count; } /* Everything else is the path */ if(*uri) keyserver->path=xstrdup(uri); else keyserver->path=xstrdup("/"); if(keyserver->path[1]) keyserver->flags.direct_uri=1; } else if(uri[0]!='/') { /* No slash means opaque. Just record the opaque blob and get out. */ keyserver->opaque=xstrdup(uri); } else { /* One slash means absolute path. We don't need to support that yet. */ goto fail; } return keyserver; fail: free_keyserver_spec(keyserver); return NULL; } struct keyserver_spec * parse_preferred_keyserver(PKT_signature *sig) { struct keyserver_spec *spec=NULL; const byte *p; size_t plen; p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_PREF_KS,&plen); if(p && plen) { byte *dupe=xmalloc(plen+1); memcpy(dupe,p,plen); dupe[plen]='\0'; spec=parse_keyserver_uri(dupe,1,NULL,0); xfree(dupe); } return spec; } static void print_keyrec(int number,struct keyrec *keyrec) { int i; iobuf_writebyte(keyrec->uidbuf,0); iobuf_flush_temp(keyrec->uidbuf); printf("(%d)\t%s ",number,iobuf_get_temp_buffer(keyrec->uidbuf)); if(keyrec->size>0) printf("%d bit ",keyrec->size); if(keyrec->type) { const char *str=pubkey_algo_to_string(keyrec->type); if(str) printf("%s ",str); else printf("unknown "); } switch(keyrec->desc.mode) { /* If the keyserver helper gave us a short keyid, we have no choice but to use it. Do check --keyid-format to add a 0x if needed. */ case KEYDB_SEARCH_MODE_SHORT_KID: printf("key %s%08lX", (opt.keyid_format==KF_0xSHORT || opt.keyid_format==KF_0xLONG)?"0x":"", (ulong)keyrec->desc.u.kid[1]); break; /* However, if it gave us a long keyid, we can honor --keyid-format via keystr(). */ case KEYDB_SEARCH_MODE_LONG_KID: printf("key %s",keystr(keyrec->desc.u.kid)); break; /* If it gave us a PGP 2.x fingerprint, not much we can do beyond displaying it. */ case KEYDB_SEARCH_MODE_FPR16: printf("key "); for(i=0;i<16;i++) printf("%02X",keyrec->desc.u.fpr[i]); break; /* If we get a modern fingerprint, we have the most flexibility. */ case KEYDB_SEARCH_MODE_FPR20: { u32 kid[2]; keyid_from_fingerprint(keyrec->desc.u.fpr,20,kid); printf("key %s",keystr(kid)); } break; default: BUG(); break; } if(keyrec->createtime>0) { printf(", "); printf(_("created: %s"),strtimestamp(keyrec->createtime)); } if(keyrec->expiretime>0) { printf(", "); printf(_("expires: %s"),strtimestamp(keyrec->expiretime)); } if(keyrec->flags&1) printf(" (%s)",_("revoked")); if(keyrec->flags&2) printf(" (%s)",_("disabled")); if(keyrec->flags&4) printf(" (%s)",_("expired")); printf("\n"); } /* Returns a keyrec (which must be freed) once a key is complete, and NULL otherwise. Call with a NULL keystring once key parsing is complete to return any unfinished keys. */ static struct keyrec * parse_keyrec(char *keystring) { static struct keyrec *work=NULL; struct keyrec *ret=NULL; char *record; int i; if(keystring==NULL) { if(work==NULL) return NULL; else if(work->desc.mode==KEYDB_SEARCH_MODE_NONE) { xfree(work); return NULL; } else { ret=work; work=NULL; return ret; } } if(work==NULL) { work=xmalloc_clear(sizeof(struct keyrec)); work->uidbuf=iobuf_temp(); } /* Remove trailing whitespace */ for(i=strlen(keystring);i>0;i--) if(ascii_isspace(keystring[i-1])) keystring[i-1]='\0'; else break; if((record=strsep(&keystring,":"))==NULL) return ret; if(ascii_strcasecmp("pub",record)==0) { char *tok; if(work->desc.mode) { ret=work; work=xmalloc_clear(sizeof(struct keyrec)); work->uidbuf=iobuf_temp(); } if((tok=strsep(&keystring,":"))==NULL) return ret; classify_user_id(tok,&work->desc); if(work->desc.mode!=KEYDB_SEARCH_MODE_SHORT_KID && work->desc.mode!=KEYDB_SEARCH_MODE_LONG_KID && work->desc.mode!=KEYDB_SEARCH_MODE_FPR16 && work->desc.mode!=KEYDB_SEARCH_MODE_FPR20) { work->desc.mode=KEYDB_SEARCH_MODE_NONE; return ret; } /* Note all items after this are optional. This allows us to have a pub line as simple as pub:keyid and nothing else. */ work->lines++; if((tok=strsep(&keystring,":"))==NULL) return ret; work->type=atoi(tok); if((tok=strsep(&keystring,":"))==NULL) return ret; work->size=atoi(tok); if((tok=strsep(&keystring,":"))==NULL) return ret; if(atoi(tok)<=0) work->createtime=0; else work->createtime=atoi(tok); if((tok=strsep(&keystring,":"))==NULL) return ret; if(atoi(tok)<=0) work->expiretime=0; else { work->expiretime=atoi(tok); /* Force the 'e' flag on if this key is expired. */ if(work->expiretime<=make_timestamp()) work->flags|=4; } if((tok=strsep(&keystring,":"))==NULL) return ret; while(*tok) switch(*tok++) { case 'r': case 'R': work->flags|=1; break; case 'd': case 'D': work->flags|=2; break; case 'e': case 'E': work->flags|=4; break; } } else if(ascii_strcasecmp("uid",record)==0 && work->desc.mode) { char *userid,*tok,*decoded; if((tok=strsep(&keystring,":"))==NULL) return ret; if(strlen(tok)==0) return ret; userid=tok; /* By definition, de-%-encoding is always smaller than the original string so we can decode in place. */ i=0; while(*tok) if(tok[0]=='%' && tok[1] && tok[2]) { int c; userid[i] = (c=hextobyte(&tok[1])) == -1 ? '?' : c; i++; tok+=3; } else userid[i++]=*tok++; /* We don't care about the other info provided in the uid: line since no keyserver supports marking userids with timestamps or revoked/expired/disabled yet. */ /* No need to check for control characters, as utf8_to_native does this for us. */ decoded=utf8_to_native(userid,i,0); if(strlen(decoded)>opt.screen_columns-10) decoded[opt.screen_columns-10]='\0'; iobuf_writestr(work->uidbuf,decoded); xfree(decoded); iobuf_writestr(work->uidbuf,"\n\t"); work->lines++; } /* Ignore any records other than "pri" and "uid" for easy future growth. */ return ret; } /* TODO: do this as a list sent to keyserver_work rather than calling it once for each key to get the correct counts after the import (cosmetics, really) and to better take advantage of the keyservers that can do multiple fetches in one go (LDAP). */ static int show_prompt(KEYDB_SEARCH_DESC *desc,int numdesc,int count,const char *search) { char *answer; if(count && opt.command_fd==-1) { static int from=1; tty_printf("Keys %d-%d of %d for \"%s\". ",from,numdesc,count,search); from=numdesc+1; } answer=cpr_get_no_help("keysearch.prompt", _("Enter number(s), N)ext, or Q)uit > ")); /* control-d */ if(answer[0]=='\x04') { printf("Q\n"); answer[0]='q'; } if(answer[0]=='q' || answer[0]=='Q') { xfree(answer); return 1; } else if(atoi(answer)>=1 && atoi(answer)<=numdesc) { char *split=answer,*num; while((num=strsep(&split," ,"))!=NULL) if(atoi(num)>=1 && atoi(num)<=numdesc) keyserver_work(KS_GET,NULL,&desc[atoi(num)-1],1, NULL,NULL,opt.keyserver); xfree(answer); return 1; } return 0; } /* Count and searchstr are just for cosmetics. If the count is too small, it will grow safely. If negative it disables the "Key x-y of z" messages. searchstr should be UTF-8 (rather than native). */ static void keyserver_search_prompt(IOBUF buffer,const char *searchstr) { int i=0,validcount=0,started=0,header=0,count=1; unsigned int maxlen,buflen,numlines=0; KEYDB_SEARCH_DESC *desc; byte *line=NULL; char *localstr=NULL; if(searchstr) localstr=utf8_to_native(searchstr,strlen(searchstr),0); desc=xmalloc(count*sizeof(KEYDB_SEARCH_DESC)); for(;;) { struct keyrec *keyrec; int rl; maxlen=1024; rl=iobuf_read_line(buffer,&line,&buflen,&maxlen); if(opt.with_colons) { if(!header && ascii_strncasecmp("SEARCH ",line,7)==0 && ascii_strncasecmp(" BEGIN",&line[strlen(line)-7],6)==0) { header=1; continue; } else if(ascii_strncasecmp("SEARCH ",line,7)==0 && ascii_strncasecmp(" END",&line[strlen(line)-5],4)==0) continue; printf("%s",line); } /* Look for an info: line. The only current info: values defined are the version and key count. */ if(!started && rl>0 && ascii_strncasecmp("info:",line,5)==0) { char *tok,*str=&line[5]; if((tok=strsep(&str,":"))!=NULL) { int version; if(sscanf(tok,"%d",&version)!=1) version=1; if(version!=1) { log_error(_("invalid keyserver protocol " "(us %d!=handler %d)\n"),1,version); break; } } if((tok=strsep(&str,":"))!=NULL && sscanf(tok,"%d",&count)==1) { if(count==0) goto notfound; else if(count<0) count=10; else validcount=1; desc=xrealloc(desc,count*sizeof(KEYDB_SEARCH_DESC)); } started=1; continue; } if(rl==0) { keyrec=parse_keyrec(NULL); if(keyrec==NULL) { if(i==0) { count=0; break; } if(i!=count) validcount=0; for(;;) { if(show_prompt(desc,i,validcount?count:0,localstr)) break; validcount=0; } break; } } else keyrec=parse_keyrec(line); if(i==count) { /* keyserver helper sent more keys than they claimed in the info: line. */ count+=10; desc=xrealloc(desc,count*sizeof(KEYDB_SEARCH_DESC)); validcount=0; } if(keyrec) { desc[i]=keyrec->desc; if(!opt.with_colons) { /* screen_lines - 1 for the prompt. */ if(numlines+keyrec->lines>opt.screen_lines-1) { if(show_prompt(desc,i,validcount?count:0,localstr)) break; else numlines=0; } print_keyrec(i+1,keyrec); } numlines+=keyrec->lines; iobuf_close(keyrec->uidbuf); xfree(keyrec); started=1; i++; } } notfound: /* Leave this commented out or now, and perhaps for a very long time. All HKPish servers return HTML error messages for no-key-found. */ /* if(!started) log_info(_("keyserver does not support searching\n")); else */ if(count==0) { if(localstr) log_info(_("key \"%s\" not found on keyserver\n"),localstr); else log_info(_("key not found on keyserver\n")); } xfree(localstr); xfree(desc); xfree(line); } /* We sometimes want to use a different gpgkeys_xxx for a given protocol (for example, ldaps is handled by gpgkeys_ldap). Map these here. */ static const char * keyserver_typemap(const char *type) { if(strcmp(type,"ldaps")==0) return "ldap"; else if(strcmp(type,"hkps")==0) return "hkp"; else return type; } /* The PGP LDAP and the curl fetch-a-LDAP-object methodologies are sufficiently different that we can't use curl to do LDAP. */ static int direct_uri_map(const char *scheme,unsigned int is_direct) { if(is_direct && strcmp(scheme,"ldap")==0) return 1; return 0; } #define GPGKEYS_PREFIX "gpgkeys_" #define GPGKEYS_CURL GPGKEYS_PREFIX "curl" EXEEXT #define GPGKEYS_PREFIX_LEN (strlen(GPGKEYS_CURL)) #define KEYSERVER_ARGS_KEEP " -o \"%O\" \"%I\"" #define KEYSERVER_ARGS_NOKEEP " -o \"%o\" \"%i\"" /* Structure to convey the arg to keyserver_retrieval_filter. */ struct ks_retrieval_filter_arg_s { KEYDB_SEARCH_DESC *desc; int ndesc; }; /* Check whether a key matches the search description. The filter returns 0 if the key shall be imported. Note that this kind of filter is not related to the iobuf filters. */ static int keyserver_retrieval_filter (kbnode_t keyblock, void *opaque) { struct ks_retrieval_filter_arg_s *arg = opaque; KEYDB_SEARCH_DESC *desc = arg->desc; int ndesc = arg->ndesc; kbnode_t node; PKT_public_key *pk; int n; u32 keyid[2]; byte fpr[MAX_FINGERPRINT_LEN]; size_t fpr_len = 0; /* Secret keys are not expected from a keyserver. We do not care about secret subkeys because the import code takes care of skipping them. Not allowing an import of a public key with a secret subkey would make it too easy to inhibit the downloading of a public key. Recall that keyservers do only limited checks. */ node = find_kbnode (keyblock, PKT_SECRET_KEY); if (node) return G10ERR_GENERAL; /* Do not import. */ if (!ndesc) return 0; /* Okay if no description given. */ /* Loop over all key packets. */ 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, &fpr_len); keyid_from_pk (pk, keyid); /* Compare requested and returned fingerprints if available. */ for (n = 0; n < ndesc; n++) { if (desc[n].mode == KEYDB_SEARCH_MODE_FPR20) { if (fpr_len == 20 && !memcmp (fpr, desc[n].u.fpr, 20)) return 0; } else if (desc[n].mode == KEYDB_SEARCH_MODE_FPR16) { if (fpr_len == 16 && !memcmp (fpr, desc[n].u.fpr, 16)) return 0; } else if (desc[n].mode == KEYDB_SEARCH_MODE_LONG_KID) { if (keyid[0] == desc[n].u.kid[0] && keyid[1] == desc[n].u.kid[1]) return 0; } else if (desc[n].mode == KEYDB_SEARCH_MODE_SHORT_KID) { if (keyid[1] == desc[n].u.kid[1]) return 0; } else /* No keyid or fingerprint - can't check. */ return 0; /* allow import. */ } } return G10ERR_GENERAL; } static const char * keyserver_errstr (int code) { const char *s; switch (code) { case KEYSERVER_OK: s = "success"; break; case KEYSERVER_INTERNAL_ERROR:s = "keyserver helper internal error"; break; case KEYSERVER_NOT_SUPPORTED: s = "keyserver not supported"; break; case KEYSERVER_VERSION_ERROR: s = "keyserver helper version mismatch";break; case KEYSERVER_GENERAL_ERROR: s = "keyserver helper general error"; break; case KEYSERVER_NO_MEMORY: s = "keyserver helper is out of core"; break; case KEYSERVER_KEY_NOT_FOUND: s = "key not found"; break; case KEYSERVER_KEY_EXISTS: s = "key exists"; break; case KEYSERVER_KEY_INCOMPLETE:s = "key incomplete (EOF)"; break; case KEYSERVER_UNREACHABLE: s = "keyserver unreachable"; break; case KEYSERVER_TIMEOUT: s = "keyserver timeout"; break; default: s = "?"; break; } return s; } static int keyserver_spawn(enum ks_action action,STRLIST list,KEYDB_SEARCH_DESC *desc, int count,int *prog,unsigned char **fpr,size_t *fpr_len, struct keyserver_spec *keyserver) { int ret=0,i,gotversion=0,outofband=0; STRLIST temp; unsigned int maxlen,buflen; char *command,*end,*searchstr=NULL; byte *line=NULL; struct exec_info *spawn; const char *scheme; const char *libexecdir = get_libexecdir (); assert(keyserver); #ifdef EXEC_TEMPFILE_ONLY opt.keyserver_options.options|=KEYSERVER_USE_TEMP_FILES; #endif /* Build the filename for the helper to execute */ scheme=keyserver_typemap(keyserver->scheme); #ifdef DISABLE_KEYSERVER_PATH /* Destroy any path we might have. This is a little tricky, portability-wise. It's not correct to delete the PATH environment variable, as that may fall back to a system built-in PATH. Similarly, it is not correct to set PATH to the null string (PATH="") since this actually deletes the PATH environment variable under MinGW. The safest thing to do here is to force PATH to be GNUPG_LIBEXECDIR. All this is not that meaningful on Unix-like systems (since we're going to give a full path to gpgkeys_foo), but on W32 it prevents loading any DLLs from directories in %PATH%. After some more thinking about this we came to the conclusion that it is better to load the helpers from the directory where the program of this process lives. Fortunately Windows provides a way to retrieve this and our get_libexecdir function has been modified to return just this. Setting the exec-path is not anymore required. set_exec_path(libexecdir); */ #else if(opt.exec_path_set) { /* If exec-path was set, and DISABLE_KEYSERVER_PATH is undefined, then don't specify a full path to gpgkeys_foo, so that the PATH can work. */ command=xmalloc(GPGKEYS_PREFIX_LEN+strlen(scheme)+3+strlen(EXEEXT)+1); command[0]='\0'; } else #endif { /* Specify a full path to gpgkeys_foo. */ command=xmalloc(strlen(libexecdir)+strlen(DIRSEP_S)+ GPGKEYS_PREFIX_LEN+strlen(scheme)+3+strlen(EXEEXT)+1); strcpy(command,libexecdir); #ifndef __VMS strcat (command, DIRSEP_S); #endif } end=command+strlen(command); /* Build a path for the keyserver helper. If it is direct_uri (i.e. an object fetch and not a keyserver), then add "_uri" to the end to distinguish the keyserver helper from an object fetcher that can speak that protocol (this is a problem for LDAP). */ strcat(command,GPGKEYS_PREFIX); strcat(command,scheme); /* This "_uri" thing is in case we need to call a direct handler instead of the keyserver handler. This lets us use gpgkeys_curl or gpgkeys_ldap_uri (we don't provide it, but a user might) instead of gpgkeys_ldap to fetch things like ldap://keyserver.pgp.com/o=PGP%20keys?pgpkey?sub?pgpkeyid=99242560 */ if(direct_uri_map(scheme,keyserver->flags.direct_uri)) strcat(command,"_uri"); strcat(command,EXEEXT); /* Can we execute it? If not, try curl as our catchall. */ if(path_access(command,X_OK)!=0) strcpy(end,GPGKEYS_CURL); if(opt.keyserver_options.options&KEYSERVER_USE_TEMP_FILES) { if(opt.keyserver_options.options&KEYSERVER_KEEP_TEMP_FILES) { command=xrealloc(command,strlen(command)+ strlen(KEYSERVER_ARGS_KEEP)+1); strcat(command,KEYSERVER_ARGS_KEEP); } else { command=xrealloc(command,strlen(command)+ strlen(KEYSERVER_ARGS_NOKEEP)+1); strcat(command,KEYSERVER_ARGS_NOKEEP); } ret=exec_write(&spawn,NULL,command,NULL,0,0); } else ret=exec_write(&spawn,command,NULL,NULL,0,0); xfree(command); if(ret) return ret; fprintf(spawn->tochild, "# This is a GnuPG %s keyserver communications file\n",VERSION); fprintf(spawn->tochild,"VERSION %d\n",KEYSERVER_PROTO_VERSION); fprintf(spawn->tochild,"PROGRAM %s\n",VERSION); fprintf(spawn->tochild,"SCHEME %s\n",keyserver->scheme); if(keyserver->opaque) fprintf(spawn->tochild,"OPAQUE %s\n",keyserver->opaque); else { if(keyserver->auth) fprintf(spawn->tochild,"AUTH %s\n",keyserver->auth); if(keyserver->host) fprintf(spawn->tochild,"HOST %s\n",keyserver->host); if(keyserver->port) fprintf(spawn->tochild,"PORT %s\n",keyserver->port); if(keyserver->path) fprintf(spawn->tochild,"PATH %s\n",keyserver->path); } /* Write global options */ for(temp=opt.keyserver_options.other;temp;temp=temp->next) fprintf(spawn->tochild,"OPTION %s\n",temp->d); /* Write per-keyserver options */ for(temp=keyserver->options;temp;temp=temp->next) fprintf(spawn->tochild,"OPTION %s\n",temp->d); switch(action) { case KS_GET: { fprintf(spawn->tochild,"COMMAND GET\n\n"); /* Which keys do we want? */ for(i=0;itochild,"0x"); for(f=0;ftochild,"%02X",desc[i].u.fpr[f]); fprintf(spawn->tochild,"\n"); } else if(desc[i].mode==KEYDB_SEARCH_MODE_FPR16) { int f; fprintf(spawn->tochild,"0x"); for(f=0;f<16;f++) fprintf(spawn->tochild,"%02X",desc[i].u.fpr[f]); fprintf(spawn->tochild,"\n"); } else if(desc[i].mode==KEYDB_SEARCH_MODE_LONG_KID) fprintf(spawn->tochild,"0x%08lX%08lX\n", (ulong)desc[i].u.kid[0], (ulong)desc[i].u.kid[1]); else if(desc[i].mode==KEYDB_SEARCH_MODE_SHORT_KID) fprintf(spawn->tochild,"0x%08lX\n", (ulong)desc[i].u.kid[1]); else if(desc[i].mode==KEYDB_SEARCH_MODE_EXACT) { fprintf(spawn->tochild,"0x0000000000000000\n"); quiet=1; } else if(desc[i].mode==KEYDB_SEARCH_MODE_NONE) continue; else BUG(); if(!quiet) { if(keyserver->host) log_info(_("requesting key %s from %s server %s\n"), keystr_from_desc(&desc[i]), keyserver->scheme,keyserver->host); else log_info(_("requesting key %s from %s\n"), keystr_from_desc(&desc[i]),keyserver->uri); } } fprintf(spawn->tochild,"\n"); break; } case KS_GETNAME: { STRLIST key; fprintf(spawn->tochild,"COMMAND GETNAME\n\n"); /* Which names do we want? */ for(key=list;key!=NULL;key=key->next) fprintf(spawn->tochild,"%s\n",key->d); fprintf(spawn->tochild,"\n"); if(keyserver->host) log_info(_("searching for names from %s server %s\n"), keyserver->scheme,keyserver->host); else log_info(_("searching for names from %s\n"),keyserver->uri); break; } case KS_SEND: { STRLIST key; /* Note the extra \n here to send an empty keylist block */ fprintf(spawn->tochild,"COMMAND SEND\n\n\n"); for(key=list;key!=NULL;key=key->next) { armor_filter_context_t *afx; IOBUF buffer=iobuf_temp(); KBNODE block; temp=NULL; add_to_strlist(&temp,key->d); afx = new_armor_context (); afx->what = 1; /* Tell the armor filter to use Unix-style \n line endings, since we're going to fprintf this to a file that (on Win32) is open in text mode. The win32 stdio will transform the \n to \r\n and we'll end up with the proper line endings on win32. This is a no-op on Unix. */ afx->eol[0]='\n'; push_armor_filter (afx, buffer); release_armor_context (afx); /* TODO: Remove Comment: lines from keys exported this way? */ if(export_pubkeys_stream(buffer,temp,&block, opt.keyserver_options.export_options)==-1) iobuf_close(buffer); else { KBNODE node; iobuf_flush_temp(buffer); merge_keys_and_selfsig(block); fprintf(spawn->tochild,"INFO %08lX%08lX BEGIN\n", (ulong)block->pkt->pkt.public_key->keyid[0], (ulong)block->pkt->pkt.public_key->keyid[1]); for(node=block;node;node=node->next) { switch(node->pkt->pkttype) { default: continue; case PKT_PUBLIC_KEY: case PKT_PUBLIC_SUBKEY: { PKT_public_key *pk=node->pkt->pkt.public_key; keyid_from_pk(pk,NULL); fprintf(spawn->tochild,"%sb:%08lX%08lX:%u:%u:%u:%u:", node->pkt->pkttype==PKT_PUBLIC_KEY?"pu":"su", (ulong)pk->keyid[0],(ulong)pk->keyid[1], pk->pubkey_algo, nbits_from_pk(pk), pk->timestamp, pk->expiredate); if(pk->is_revoked) fprintf(spawn->tochild,"r"); if(pk->has_expired) fprintf(spawn->tochild,"e"); fprintf(spawn->tochild,"\n"); } break; case PKT_USER_ID: { PKT_user_id *uid=node->pkt->pkt.user_id; int r; char *uidstr1,*uidstr2,*uidstr3; size_t uidstrlen; if(uid->attrib_data) continue; fprintf(spawn->tochild,"uid:"); /* Make sure it's real UTF8. What happens here is that first we heuristically try and convert the string (which may be mis-coded) into UTF8. We then bring it to native and then back to UTF8. For true UTF8, this whole process should be lossless. For the common Latin-1 mis-encoding, it will become UTF8. For other encodings, it will become UTF8 but with unknown characters quoted. This preserves the notion that anything in the stream to the keyserver handler program is UTF8. */ uidstr1=string_to_utf8(uid->name); uidstr2=utf8_to_native(uidstr1,strlen(uidstr1),-1); uidstr3=native_to_utf8(uidstr2); uidstrlen=strlen(uidstr3); /* Quote ':', '%', and anything not printable ASCII */ for(r=0;r'~') fprintf(spawn->tochild,"%%%02X", (byte)uidstr3[r]); else fprintf(spawn->tochild,"%c",uidstr3[r]); } xfree(uidstr1); xfree(uidstr2); xfree(uidstr3); fprintf(spawn->tochild,":%u:%u:", uid->created,uid->expiredate); if(uid->is_revoked) fprintf(spawn->tochild,"r"); if(uid->is_expired) fprintf(spawn->tochild,"e"); fprintf(spawn->tochild,"\n"); } break; /* This bit is really for the benefit of people who store their keys in LDAP servers. It makes it easy to do queries for things like "all keys signed by Isabella". */ case PKT_SIGNATURE: { PKT_signature *sig=node->pkt->pkt.signature; if(!IS_UID_SIG(sig)) continue; fprintf(spawn->tochild,"sig:%08lX%08lX:%X:%u:%u\n", (ulong)sig->keyid[0],(ulong)sig->keyid[1], sig->sig_class,sig->timestamp, sig->expiredate); } break; } } fprintf(spawn->tochild,"INFO %08lX%08lX END\n", (ulong)block->pkt->pkt.public_key->keyid[0], (ulong)block->pkt->pkt.public_key->keyid[1]); fprintf(spawn->tochild,"KEY %08lX%08lX BEGIN\n", (ulong)block->pkt->pkt.public_key->keyid[0], (ulong)block->pkt->pkt.public_key->keyid[1]); fwrite(iobuf_get_temp_buffer(buffer), iobuf_get_temp_length(buffer),1,spawn->tochild); fprintf(spawn->tochild,"KEY %08lX%08lX END\n", (ulong)block->pkt->pkt.public_key->keyid[0], (ulong)block->pkt->pkt.public_key->keyid[1]); iobuf_close(buffer); if(keyserver->host) log_info(_("sending key %s to %s server %s\n"), keystr(block->pkt->pkt.public_key->keyid), keyserver->scheme,keyserver->host); else log_info(_("sending key %s to %s\n"), keystr(block->pkt->pkt.public_key->keyid), keyserver->uri); release_kbnode(block); } free_strlist(temp); } break; } case KS_SEARCH: { STRLIST key; fprintf(spawn->tochild,"COMMAND SEARCH\n\n"); /* Which keys do we want? Remember that the gpgkeys_ program is going to lump these together into a search string. */ for(key=list;key!=NULL;key=key->next) { fprintf(spawn->tochild,"%s\n",key->d); if(key!=list) { searchstr=xrealloc(searchstr, strlen(searchstr)+strlen(key->d)+2); strcat(searchstr," "); } else { searchstr=xmalloc(strlen(key->d)+1); searchstr[0]='\0'; } strcat(searchstr,key->d); } fprintf(spawn->tochild,"\n"); if(keyserver->host) log_info(_("searching for \"%s\" from %s server %s\n"), searchstr,keyserver->scheme,keyserver->host); else log_info(_("searching for \"%s\" from %s\n"), searchstr,keyserver->uri); break; } default: log_fatal(_("no keyserver action!\n")); break; } /* Done sending, so start reading. */ ret=exec_read(spawn); if(ret) goto fail; /* Now handle the response */ for(;;) { int plen; char *ptr; maxlen=1024; if(iobuf_read_line(spawn->fromchild,&line,&buflen,&maxlen)==0) { ret=G10ERR_READ_FILE; goto fail; /* i.e. EOF */ } ptr=line; /* remove trailing whitespace */ plen=strlen(ptr); while(plen>0 && ascii_isspace(ptr[plen-1])) plen--; ptr[plen]='\0'; /* Stop at the first empty line but not if we are sending keys. In the latter case we won't continue reading later and thus we need to watch out for errors right in this loop. */ if(*ptr=='\0' && action != KS_SEND) break; if(ascii_strncasecmp(ptr,"VERSION ",8)==0) { gotversion=1; if(atoi(&ptr[8])!=KEYSERVER_PROTO_VERSION) { log_error(_("invalid keyserver protocol (us %d!=handler %d)\n"), KEYSERVER_PROTO_VERSION,atoi(&ptr[8])); goto fail; } } else if(ascii_strncasecmp(ptr,"PROGRAM ",8)==0) { if(ascii_strncasecmp(&ptr[8],VERSION,strlen(VERSION))!=0) log_info(_("WARNING: keyserver handler from a different" " version of GnuPG (%s)\n"),&ptr[8]); } else if(ascii_strncasecmp(ptr,"OPTION OUTOFBAND",16)==0) outofband=1; /* Currently the only OPTION */ else if (action == KS_SEND && ascii_strncasecmp(ptr,"KEY ",4)==0) { ret = parse_key_failed_line (ptr+4, strlen (ptr+4)); break; /* We stop at the first KEY line so that we won't run into an EOF which would return an unspecified error message (due to iobuf_read_line). */ } } if(!gotversion) { log_error(_("keyserver did not send VERSION\n")); goto fail; } if(!outofband) switch(action) { case KS_GET: case KS_GETNAME: { void *stats_handle; struct ks_retrieval_filter_arg_s filterarg; int gpgkeys_err; stats_handle=import_new_stats_handle(); /* Slurp up all the key data. In the future, it might be nice to look for KEY foo OUTOFBAND and FAILED indicators. It's harmless to ignore them, but ignoring them does make gpg complain about "no valid OpenPGP data found". One way to do this could be to continue parsing this line-by-line and make a temp iobuf for each key. Note that we don't allow the import of secret keys from a keyserver. Keyservers should never accept or send them but we better protect against rogue keyservers. */ filterarg.desc = desc; filterarg.ndesc = count; gpgkeys_err = 0; import_keys_stream (spawn->fromchild, stats_handle, fpr, fpr_len, (opt.keyserver_options.import_options | IMPORT_NO_SECKEY), keyserver_retrieval_filter, &filterarg, &gpgkeys_err); import_print_stats(stats_handle); import_release_stats_handle(stats_handle); if (gpgkeys_err) { log_error (_("keyserver communications error: %s\n"), keyserver_errstr (gpgkeys_err)); ret = gpgkeys_err; } break; } /* Nothing to do here */ case KS_SEND: break; case KS_SEARCH: keyserver_search_prompt(spawn->fromchild,searchstr); break; default: log_fatal(_("no keyserver action!\n")); break; } fail: xfree(line); xfree(searchstr); *prog=exec_finish(spawn); return ret; } static int keyserver_work(enum ks_action action,STRLIST list,KEYDB_SEARCH_DESC *desc, int count,unsigned char **fpr,size_t *fpr_len, struct keyserver_spec *keyserver) { int rc=0,ret=0; if(!keyserver) { log_error(_("no keyserver known (use option --keyserver)\n")); return G10ERR_BAD_URI; } #ifdef DISABLE_KEYSERVER_HELPERS log_error(_("external keyserver calls are not supported in this build\n")); return G10ERR_KEYSERVER; #else /* Spawn a handler. The use of RC and RET is a mess. We use a kludge to return a suitable error message. */ rc=keyserver_spawn(action,list,desc,count,&ret,fpr,fpr_len,keyserver); if (ret == KEYSERVER_INTERNAL_ERROR && rc) ret = rc; if(ret) { switch(ret) { case KEYSERVER_SCHEME_NOT_FOUND: log_error(_("no handler for keyserver scheme `%s'\n"), keyserver->scheme); break; case KEYSERVER_NOT_SUPPORTED: log_error(_("action `%s' not supported with keyserver " "scheme `%s'\n"), action==KS_GET?"get":action==KS_SEND?"send": action==KS_SEARCH?"search":"unknown", keyserver->scheme); break; case KEYSERVER_VERSION_ERROR: log_error(_(GPGKEYS_PREFIX "%s does not support" " handler version %d\n"), keyserver_typemap(keyserver->scheme), KEYSERVER_PROTO_VERSION); break; case KEYSERVER_TIMEOUT: log_error(_("keyserver timed out\n")); break; case KEYSERVER_UNREACHABLE: return G10ERR_UNKNOWN_HOST; case KEYSERVER_INTERNAL_ERROR: default: log_error(_("keyserver internal error\n")); break; } return G10ERR_KEYSERVER; } if(rc) { log_error(_("keyserver communications error: %s\n"),g10_errstr(rc)); return rc; } return 0; #endif /* ! DISABLE_KEYSERVER_HELPERS*/ } int keyserver_export(STRLIST users) { STRLIST sl=NULL; KEYDB_SEARCH_DESC desc; int rc=0; /* Weed out descriptors that we don't support sending */ for(;users;users=users->next) { classify_user_id (users->d, &desc); if(desc.mode!=KEYDB_SEARCH_MODE_SHORT_KID && desc.mode!=KEYDB_SEARCH_MODE_LONG_KID && desc.mode!=KEYDB_SEARCH_MODE_FPR16 && desc.mode!=KEYDB_SEARCH_MODE_FPR20) { log_error(_("\"%s\" not a key ID: skipping\n"),users->d); continue; } else append_to_strlist(&sl,users->d); } if(sl) { rc=keyserver_work(KS_SEND,sl,NULL,0,NULL,NULL,opt.keyserver); free_strlist(sl); } return rc; } int keyserver_import(STRLIST users) { KEYDB_SEARCH_DESC *desc; int num=100,count=0; int rc=0; /* Build a list of key ids */ desc=xmalloc(sizeof(KEYDB_SEARCH_DESC)*num); for(;users;users=users->next) { classify_user_id (users->d, &desc[count]); if(desc[count].mode!=KEYDB_SEARCH_MODE_SHORT_KID && desc[count].mode!=KEYDB_SEARCH_MODE_LONG_KID && desc[count].mode!=KEYDB_SEARCH_MODE_FPR16 && desc[count].mode!=KEYDB_SEARCH_MODE_FPR20) { log_error(_("\"%s\" not a key ID: skipping\n"),users->d); continue; } count++; if(count==num) { num+=100; desc=xrealloc(desc,sizeof(KEYDB_SEARCH_DESC)*num); } } if(count>0) rc=keyserver_work(KS_GET,NULL,desc,count,NULL,NULL,opt.keyserver); xfree(desc); return rc; } int keyserver_import_fprint(const byte *fprint,size_t fprint_len, struct keyserver_spec *keyserver) { KEYDB_SEARCH_DESC desc; memset(&desc,0,sizeof(desc)); if(fprint_len==16) desc.mode=KEYDB_SEARCH_MODE_FPR16; else if(fprint_len==20) desc.mode=KEYDB_SEARCH_MODE_FPR20; else return -1; memcpy(desc.u.fpr,fprint,fprint_len); /* TODO: Warn here if the fingerprint we got doesn't match the one we asked for? */ return keyserver_work(KS_GET,NULL,&desc,1,NULL,NULL,keyserver); } int keyserver_import_keyid(u32 *keyid,struct keyserver_spec *keyserver) { KEYDB_SEARCH_DESC desc; memset(&desc,0,sizeof(desc)); desc.mode=KEYDB_SEARCH_MODE_LONG_KID; desc.u.kid[0]=keyid[0]; desc.u.kid[1]=keyid[1]; return keyserver_work(KS_GET,NULL,&desc,1,NULL,NULL,keyserver); } /* code mostly stolen from do_export_stream */ static int keyidlist(STRLIST users,KEYDB_SEARCH_DESC **klist,int *count,int fakev3) { int rc=0,ndesc,num=100; KBNODE keyblock=NULL,node; KEYDB_HANDLE kdbhd; KEYDB_SEARCH_DESC *desc; STRLIST sl; *count=0; *klist=xmalloc(sizeof(KEYDB_SEARCH_DESC)*num); kdbhd=keydb_new(0); if(!users) { ndesc = 1; desc = xmalloc_clear ( ndesc * sizeof *desc); desc[0].mode = KEYDB_SEARCH_MODE_FIRST; } else { for (ndesc=0, sl=users; sl; sl = sl->next, ndesc++) ; desc = xmalloc ( ndesc * sizeof *desc); for (ndesc=0, sl=users; sl; sl = sl->next) { if(classify_user_id (sl->d, desc+ndesc)) ndesc++; else log_error (_("key \"%s\" not found: %s\n"), sl->d, g10_errstr (G10ERR_INV_USER_ID)); } } while (!(rc = keydb_search (kdbhd, desc, ndesc))) { if (!users) desc[0].mode = KEYDB_SEARCH_MODE_NEXT; /* read the keyblock */ rc = keydb_get_keyblock (kdbhd, &keyblock ); if( rc ) { log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); goto leave; } if((node=find_kbnode(keyblock,PKT_PUBLIC_KEY))) { /* This is to work around a bug in some keyservers (pksd and OKS) that calculate v4 RSA keyids as if they were v3 RSA. The answer is to refresh both the correct v4 keyid (e.g. 99242560) and the fake v3 keyid (e.g. 68FDDBC7). This only happens for key refresh using the HKP scheme and if the refresh-add-fake-v3-keyids keyserver option is set. */ if(fakev3 && is_RSA(node->pkt->pkt.public_key->pubkey_algo) && node->pkt->pkt.public_key->version>=4) { (*klist)[*count].mode=KEYDB_SEARCH_MODE_LONG_KID; mpi_get_keyid(node->pkt->pkt.public_key->pkey[0], (*klist)[*count].u.kid); (*count)++; if(*count==num) { num+=100; *klist=xrealloc(*klist,sizeof(KEYDB_SEARCH_DESC)*num); } } /* v4 keys get full fingerprints. v3 keys get long keyids. This is because it's easy to calculate any sort of keyid from a v4 fingerprint, but not a v3 fingerprint. */ if(node->pkt->pkt.public_key->version<4) { (*klist)[*count].mode=KEYDB_SEARCH_MODE_LONG_KID; keyid_from_pk(node->pkt->pkt.public_key, (*klist)[*count].u.kid); } else { size_t dummy; (*klist)[*count].mode=KEYDB_SEARCH_MODE_FPR20; fingerprint_from_pk(node->pkt->pkt.public_key, (*klist)[*count].u.fpr,&dummy); } /* This is a little hackish, using the skipfncvalue as a void* pointer to the keyserver spec, but we don't need the skipfnc here, and it saves having an additional field for this (which would be wasted space most of the time). */ (*klist)[*count].skipfncvalue=NULL; /* Are we honoring preferred keyservers? */ if(opt.keyserver_options.options&KEYSERVER_HONOR_KEYSERVER_URL) { PKT_user_id *uid=NULL; PKT_signature *sig=NULL; merge_keys_and_selfsig(keyblock); for(node=node->next;node;node=node->next) { if(node->pkt->pkttype==PKT_USER_ID && node->pkt->pkt.user_id->is_primary) uid=node->pkt->pkt.user_id; else if(node->pkt->pkttype==PKT_SIGNATURE && node->pkt->pkt.signature-> flags.chosen_selfsig && uid) { sig=node->pkt->pkt.signature; break; } } /* Try and parse the keyserver URL. If it doesn't work, then we end up writing NULL which indicates we are the same as any other key. */ if(sig) (*klist)[*count].skipfncvalue=parse_preferred_keyserver(sig); } (*count)++; if(*count==num) { num+=100; *klist=xrealloc(*klist,sizeof(KEYDB_SEARCH_DESC)*num); } } } if(rc==-1) rc=0; leave: if(rc) xfree(*klist); xfree(desc); keydb_release(kdbhd); release_kbnode(keyblock); return rc; } /* Note this is different than the original HKP refresh. It allows usernames to refresh only part of the keyring. */ int keyserver_refresh(STRLIST users) { int rc,count,numdesc,fakev3=0; KEYDB_SEARCH_DESC *desc; unsigned int options=opt.keyserver_options.import_options; /* We switch merge-only on during a refresh, as 'refresh' should never import new keys, even if their keyids match. */ opt.keyserver_options.import_options|=IMPORT_MERGE_ONLY; /* Similarly, we switch on fast-import, since refresh may make multiple import sets (due to preferred keyserver URLs). We don't want each set to rebuild the trustdb. Instead we do it once at the end here. */ opt.keyserver_options.import_options|=IMPORT_FAST; /* If refresh_add_fake_v3_keyids is on and it's a HKP or MAILTO scheme, then enable fake v3 keyid generation. */ if((opt.keyserver_options.options&KEYSERVER_ADD_FAKE_V3) && opt.keyserver && (ascii_strcasecmp(opt.keyserver->scheme,"hkp")==0 || ascii_strcasecmp(opt.keyserver->scheme,"mailto")==0)) fakev3=1; rc=keyidlist(users,&desc,&numdesc,fakev3); if(rc) return rc; count=numdesc; if(count>0) { int i; /* Try to handle preferred keyserver keys first */ for(i=0;iuri,g10_errstr(rc)); else { /* We got it, so mark it as NONE so we don't try and get it again from the regular keyserver. */ desc[i].mode=KEYDB_SEARCH_MODE_NONE; count--; } free_keyserver_spec(keyserver); } } } if(count>0) { if(opt.keyserver) { if(count==1) log_info(_("refreshing 1 key from %s\n"),opt.keyserver->uri); else log_info(_("refreshing %d keys from %s\n"), count,opt.keyserver->uri); } rc=keyserver_work(KS_GET,NULL,desc,numdesc,NULL,NULL,opt.keyserver); } xfree(desc); opt.keyserver_options.import_options=options; /* If the original options didn't have fast import, and the trustdb is dirty, rebuild. */ if(!(opt.keyserver_options.import_options&IMPORT_FAST)) trustdb_check_or_update(); return rc; } int keyserver_search(STRLIST tokens) { if(tokens) return keyserver_work(KS_SEARCH,tokens,NULL,0,NULL,NULL,opt.keyserver); else return 0; } int keyserver_fetch(STRLIST urilist) { KEYDB_SEARCH_DESC desc; STRLIST sl; unsigned int options=opt.keyserver_options.import_options; /* Switch on fast-import, since fetch can handle more than one import and we don't want each set to rebuild the trustdb. Instead we do it once at the end. */ opt.keyserver_options.import_options|=IMPORT_FAST; /* A dummy desc since we're not actually fetching a particular key ID */ memset(&desc,0,sizeof(desc)); desc.mode=KEYDB_SEARCH_MODE_EXACT; for(sl=urilist;sl;sl=sl->next) { struct keyserver_spec *spec; spec=parse_keyserver_uri(sl->d,1,NULL,0); if(spec) { int rc; rc=keyserver_work(KS_GET,NULL,&desc,1,NULL,NULL,spec); if(rc) log_info (_("WARNING: unable to fetch URI %s: %s\n"), sl->d,g10_errstr(rc)); free_keyserver_spec(spec); } else log_info (_("WARNING: unable to parse URI %s\n"),sl->d); } opt.keyserver_options.import_options=options; /* If the original options didn't have fast import, and the trustdb is dirty, rebuild. */ if(!(opt.keyserver_options.import_options&IMPORT_FAST)) trustdb_check_or_update(); return 0; } /* Import key in a CERT or pointed to by a CERT */ int keyserver_import_cert(const char *name,unsigned char **fpr,size_t *fpr_len) { char *domain,*look,*url; IOBUF key; int type,rc=G10ERR_GENERAL; look=xstrdup(name); domain=strrchr(look,'@'); if(domain) *domain='.'; type = get_cert (look, 0, max_cert_size, &key, fpr, fpr_len, &url); if(type==1) { int armor_status=opt.no_armor; /* CERTs are always in binary format */ opt.no_armor=1; rc=import_keys_stream (key, NULL, fpr, fpr_len, (opt.keyserver_options.import_options | IMPORT_NO_SECKEY), NULL, NULL, NULL); opt.no_armor=armor_status; iobuf_close(key); } else if(type==2 && *fpr) { /* We only consider the IPGP type if a fingerprint was provided. This lets us select the right key regardless of what a URL points to, or get the key from a keyserver. */ if(url) { struct keyserver_spec *spec; spec=parse_keyserver_uri(url,1,NULL,0); if(spec) { rc=keyserver_import_fprint(*fpr,*fpr_len,spec); free_keyserver_spec(spec); } } else if(opt.keyserver) { /* If only a fingerprint is provided, try and fetch it from our --keyserver */ rc=keyserver_import_fprint(*fpr,*fpr_len,opt.keyserver); } else log_info(_("no keyserver known (use option --keyserver)\n")); /* Give a better string here? "CERT fingerprint for \"%s\" found, but no keyserver" " known (use option --keyserver)\n" ? */ xfree(url); } xfree(look); return rc; } /* Import key pointed to by a PKA record. Return the requested fingerprint in fpr. */ int keyserver_import_pka(const char *name,unsigned char **fpr,size_t *fpr_len) { char *uri; int rc=-1; *fpr=xmalloc(20); *fpr_len=20; uri = get_pka_info (name, *fpr, 20); if (uri && *uri) { struct keyserver_spec *spec; spec = parse_keyserver_uri (uri, 1, NULL, 0); if (spec) { rc=keyserver_import_fprint (*fpr, 20, spec); free_keyserver_spec (spec); } } xfree (uri); if (rc) { xfree(*fpr); *fpr = NULL; } return rc; } /* Import all keys that match name */ int keyserver_import_name(const char *name,unsigned char **fpr,size_t *fpr_len, struct keyserver_spec *keyserver) { STRLIST list=NULL; int rc; append_to_strlist(&list,name); rc=keyserver_work(KS_GETNAME,list,NULL,0,fpr,fpr_len,keyserver); free_strlist(list); return rc; } /* Import a key by name using LDAP */ int keyserver_import_ldap(const char *name,unsigned char **fpr,size_t *fpr_len) { char *domain; struct keyserver_spec *keyserver; STRLIST list=NULL; int rc,hostlen=1; #ifdef USE_DNS_SRV struct srventry *srvlist=NULL; int srvcount,i; char srvname[MAXDNAME]; #endif /* Parse out the domain */ domain=strrchr(name,'@'); if(!domain) return G10ERR_GENERAL; domain++; keyserver=xmalloc_clear(sizeof(struct keyserver_spec)); keyserver->scheme=xstrdup("ldap"); keyserver->host=xmalloc(1); keyserver->host[0]='\0'; #ifdef USE_DNS_SRV snprintf(srvname,MAXDNAME,"_pgpkey-ldap._tcp.%s",domain); srvcount=getsrv(srvname,&srvlist); for(i=0;ihost=xrealloc(keyserver->host,hostlen); strcat(keyserver->host,srvlist[i].target); if(srvlist[i].port!=389) { char port[7]; hostlen+=6; /* a colon, plus 5 digits (unsigned 16-bit value) */ keyserver->host=xrealloc(keyserver->host,hostlen); snprintf(port,7,":%u",srvlist[i].port); strcat(keyserver->host,port); } strcat(keyserver->host," "); } free(srvlist); #endif /* If all else fails, do the PGP Universal trick of ldap://keys.(domain) */ hostlen+=5+strlen(domain); keyserver->host=xrealloc(keyserver->host,hostlen); strcat(keyserver->host,"keys."); strcat(keyserver->host,domain); append_to_strlist(&list,name); rc=keyserver_work(KS_GETNAME,list,NULL,0,fpr,fpr_len,keyserver); free_strlist(list); free_keyserver_spec(keyserver); return rc; } gnupg-1.4.20/g10/ccid-driver.c0000644000175000017500000031245712635262326012610 00000000000000/* ccid-driver.c - USB ChipCardInterfaceDevices driver * Copyright (C) 2003, 2004, 2005, 2006, 2007 * 2008, 2009 Free Software Foundation, Inc. * Written by Werner Koch. * * 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 3 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, see . * * ALTERNATIVELY, this file may be distributed under the terms of the * following license, in which case the provisions of this license are * required INSTEAD OF the GNU General Public License. If you wish to * allow use of your version of this file only under the terms of the * GNU General Public License, and not to allow others to use your * version of this file under the terms of the following license, * indicate your decision by deleting this paragraph and the license * below. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, and the entire permission notice in its entirety, * including the disclaimer of warranties. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * * $Date$ */ /* CCID (ChipCardInterfaceDevices) is a specification for accessing smartcard via a reader connected to the USB. This is a limited driver allowing to use some CCID drivers directly without any other specila drivers. This is a fallback driver to be used when nothing else works or the system should be kept minimal for security reasons. It makes use of the libusb library to gain portable access to USB. This driver has been tested with the SCM SCR335 and SPR532 smartcard readers and requires that a reader implements APDU or TPDU level exchange and does fully automatic initialization. */ #ifdef HAVE_CONFIG_H # include #endif #if defined(HAVE_LIBUSB) || defined(TEST) #include #include #include #include #include #include #include #include #include #ifdef HAVE_PTH # include #endif /*HAVE_PTH*/ #include #include "ccid-driver.h" #include "../include/host2net.h" #define DRVNAME "ccid-driver: " /* Depending on how this source is used we either define our error output to go to stderr or to the jnlib based logging functions. We use the latter when GNUPG_MAJOR_VERSION is defines or when both, GNUPG_SCD_MAIN_HEADER and HAVE_JNLIB_LOGGING are defined. */ #if defined(GNUPG_MAJOR_VERSION) \ || (defined(GNUPG_SCD_MAIN_HEADER) && defined(HAVE_JNLIB_LOGGING)) #if defined(GNUPG_SCD_MAIN_HEADER) # include GNUPG_SCD_MAIN_HEADER #elif GNUPG_MAJOR_VERSION == 1 /* GnuPG Version is < 1.9. */ # include "options.h" # include "util.h" # include "memory.h" # include "cardglue.h" # else /* This is the modularized GnuPG 1.9 or later. */ # include "scdaemon.h" #endif # define DEBUGOUT(t) do { if (debug_level) \ log_debug (DRVNAME t); } while (0) # define DEBUGOUT_1(t,a) do { if (debug_level) \ log_debug (DRVNAME t,(a)); } while (0) # define DEBUGOUT_2(t,a,b) do { if (debug_level) \ log_debug (DRVNAME t,(a),(b)); } while (0) # define DEBUGOUT_3(t,a,b,c) do { if (debug_level) \ log_debug (DRVNAME t,(a),(b),(c));} while (0) # define DEBUGOUT_4(t,a,b,c,d) do { if (debug_level) \ log_debug (DRVNAME t,(a),(b),(c),(d));} while (0) # define DEBUGOUT_CONT(t) do { if (debug_level) \ log_printf (t); } while (0) # define DEBUGOUT_CONT_1(t,a) do { if (debug_level) \ log_printf (t,(a)); } while (0) # define DEBUGOUT_CONT_2(t,a,b) do { if (debug_level) \ log_printf (t,(a),(b)); } while (0) # define DEBUGOUT_CONT_3(t,a,b,c) do { if (debug_level) \ log_printf (t,(a),(b),(c)); } while (0) # define DEBUGOUT_LF() do { if (debug_level) \ log_printf ("\n"); } while (0) #else /* Other usage of this source - don't use gnupg specifics. */ # define DEBUGOUT(t) do { if (debug_level) \ fprintf (stderr, DRVNAME t); } while (0) # define DEBUGOUT_1(t,a) do { if (debug_level) \ fprintf (stderr, DRVNAME t, (a)); } while (0) # define DEBUGOUT_2(t,a,b) do { if (debug_level) \ fprintf (stderr, DRVNAME t, (a), (b)); } while (0) # define DEBUGOUT_3(t,a,b,c) do { if (debug_level) \ fprintf (stderr, DRVNAME t, (a), (b), (c)); } while (0) # define DEBUGOUT_4(t,a,b,c,d) do { if (debug_level) \ fprintf (stderr, DRVNAME t, (a), (b), (c), (d));} while(0) # define DEBUGOUT_CONT(t) do { if (debug_level) \ fprintf (stderr, t); } while (0) # define DEBUGOUT_CONT_1(t,a) do { if (debug_level) \ fprintf (stderr, t, (a)); } while (0) # define DEBUGOUT_CONT_2(t,a,b) do { if (debug_level) \ fprintf (stderr, t, (a), (b)); } while (0) # define DEBUGOUT_CONT_3(t,a,b,c) do { if (debug_level) \ fprintf (stderr, t, (a), (b), (c)); } while (0) # define DEBUGOUT_LF() do { if (debug_level) \ putc ('\n', stderr); } while (0) #endif /* This source not used by scdaemon. */ #ifndef EAGAIN #define EAGAIN EWOULDBLOCK #endif enum { RDR_to_PC_NotifySlotChange= 0x50, RDR_to_PC_HardwareError = 0x51, PC_to_RDR_SetParameters = 0x61, PC_to_RDR_IccPowerOn = 0x62, PC_to_RDR_IccPowerOff = 0x63, PC_to_RDR_GetSlotStatus = 0x65, PC_to_RDR_Secure = 0x69, PC_to_RDR_T0APDU = 0x6a, PC_to_RDR_Escape = 0x6b, PC_to_RDR_GetParameters = 0x6c, PC_to_RDR_ResetParameters = 0x6d, PC_to_RDR_IccClock = 0x6e, PC_to_RDR_XfrBlock = 0x6f, PC_to_RDR_Mechanical = 0x71, PC_to_RDR_Abort = 0x72, PC_to_RDR_SetDataRate = 0x73, RDR_to_PC_DataBlock = 0x80, RDR_to_PC_SlotStatus = 0x81, RDR_to_PC_Parameters = 0x82, RDR_to_PC_Escape = 0x83, RDR_to_PC_DataRate = 0x84 }; /* Two macro to detect whether a CCID command has failed and to get the error code. These macros assume that we can access the mandatory first 10 bytes of a CCID message in BUF. */ #define CCID_COMMAND_FAILED(buf) ((buf)[7] & 0x40) #define CCID_ERROR_CODE(buf) (((unsigned char *)(buf))[8]) /* We need to know the vendor to do some hacks. */ enum { VENDOR_CHERRY = 0x046a, VENDOR_SCM = 0x04e6, VENDOR_OMNIKEY= 0x076b, VENDOR_GEMPC = 0x08e6, VENDOR_KAAN = 0x0d46 }; /* A list and a table with special transport descriptions. */ enum { TRANSPORT_USB = 0, /* Standard USB transport. */ TRANSPORT_CM4040 = 1 /* As used by the Cardman 4040. */ }; static struct { char *name; /* Device name. */ int type; } transports[] = { { "/dev/cmx0", TRANSPORT_CM4040 }, { "/dev/cmx1", TRANSPORT_CM4040 }, { NULL }, }; /* Store information on the driver's state. A pointer to such a structure is used as handle for most functions. */ struct ccid_driver_s { usb_dev_handle *idev; char *rid; int dev_fd; /* -1 for USB transport or file descriptor of the transport device. */ unsigned short id_vendor; unsigned short id_product; unsigned short bcd_device; int ifc_no; int ep_bulk_out; int ep_bulk_in; int ep_intr; int seqno; unsigned char t1_ns; unsigned char t1_nr; unsigned char nonnull_nad; int max_ifsd; int ifsd; int ifsc; unsigned char apdu_level:2; /* Reader supports short APDU level exchange. With a value of 2 short and extended level is supported.*/ unsigned int auto_ifsd:1; unsigned int powered_off:1; unsigned int has_pinpad:2; unsigned int enodev_seen:1; time_t last_progress; /* Last time we sent progress line. */ /* The progress callback and its first arg as supplied to ccid_set_progress_cb. */ void (*progress_cb)(void *, const char *, int, int, int); void *progress_cb_arg; }; static int initialized_usb; /* Tracks whether USB has been initialized. */ static int debug_level; /* Flag to control the debug output. 0 = No debugging 1 = USB I/O info 2 = Level 1 + T=1 protocol tracing 3 = Level 2 + USB/I/O tracing of SlotStatus. */ static unsigned int compute_edc (const unsigned char *data, size_t datalen, int use_crc); static int bulk_out (ccid_driver_t handle, unsigned char *msg, size_t msglen, int no_debug); static int bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length, size_t *nread, int expected_type, int seqno, int timeout, int no_debug); static int abort_cmd (ccid_driver_t handle, int seqno); /* Convert a little endian stored 4 byte value into an unsigned integer. */ static unsigned int convert_le_u32 (const unsigned char *buf) { return buf[0] | (buf[1] << 8) | (buf[2] << 16) | ((unsigned int)buf[3] << 24); } /* Convert a little endian stored 2 byte value into an unsigned integer. */ static unsigned int convert_le_u16 (const unsigned char *buf) { return buf[0] | (buf[1] << 8); } static void set_msg_len (unsigned char *msg, unsigned int length) { msg[1] = length; msg[2] = length >> 8; msg[3] = length >> 16; msg[4] = length >> 24; } static void my_sleep (int seconds) { #ifdef HAVE_PTH /* With Pth we also call the standard sleep(0) so that the process may give up its timeslot. */ if (!seconds) { # ifdef HAVE_W32_SYSTEM Sleep (0); # else sleep (0); # endif } pth_sleep (seconds); #else # ifdef HAVE_W32_SYSTEM Sleep (seconds*1000); # else sleep (seconds); # endif #endif } static void print_progress (ccid_driver_t handle) { time_t ct = time (NULL); /* We don't want to print progress lines too often. */ if (ct == handle->last_progress) return; if (handle->progress_cb) handle->progress_cb (handle->progress_cb_arg, "card_busy", 'w', 0, 0); handle->last_progress = ct; } /* Pint an error message for a failed CCID command including a textual error code. MSG shall be the CCID message at a minimum of 10 bytes. */ static void print_command_failed (const unsigned char *msg) { const char *t; char buffer[100]; int ec; if (!debug_level) return; ec = CCID_ERROR_CODE (msg); switch (ec) { case 0x00: t = "Command not supported"; break; case 0xE0: t = "Slot busy"; break; case 0xEF: t = "PIN cancelled"; break; case 0xF0: t = "PIN timeout"; break; case 0xF2: t = "Automatic sequence ongoing"; break; case 0xF3: t = "Deactivated Protocol"; break; case 0xF4: t = "Procedure byte conflict"; break; case 0xF5: t = "ICC class not supported"; break; case 0xF6: t = "ICC protocol not supported"; break; case 0xF7: t = "Bad checksum in ATR"; break; case 0xF8: t = "Bad TS in ATR"; break; case 0xFB: t = "An all inclusive hardware error occurred"; break; case 0xFC: t = "Overrun error while talking to the ICC"; break; case 0xFD: t = "Parity error while talking to the ICC"; break; case 0xFE: t = "CCID timed out while talking to the ICC"; break; case 0xFF: t = "Host aborted the current activity"; break; default: if (ec > 0 && ec < 128) sprintf (buffer, "Parameter error at offset %d", ec); else sprintf (buffer, "Error code %02X", ec); t = buffer; break; } DEBUGOUT_1 ("CCID command failed: %s\n", t); } static void print_pr_data (const unsigned char *data, size_t datalen, size_t off) { int any = 0; for (; off < datalen; off++) { if (!any || !(off % 16)) { if (any) DEBUGOUT_LF (); DEBUGOUT_1 (" [%04lu] ", (unsigned long) off); } DEBUGOUT_CONT_1 (" %02X", data[off]); any = 1; } if (any && (off % 16)) DEBUGOUT_LF (); } static void print_p2r_header (const char *name, const unsigned char *msg, size_t msglen) { DEBUGOUT_1 ("%s:\n", name); if (msglen < 7) return; DEBUGOUT_1 (" dwLength ..........: %u\n", convert_le_u32 (msg+1)); DEBUGOUT_1 (" bSlot .............: %u\n", msg[5]); DEBUGOUT_1 (" bSeq ..............: %u\n", msg[6]); } static void print_p2r_iccpoweron (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_IccPowerOn", msg, msglen); if (msglen < 10) return; DEBUGOUT_2 (" bPowerSelect ......: 0x%02x (%s)\n", msg[7], msg[7] == 0? "auto": msg[7] == 1? "5.0 V": msg[7] == 2? "3.0 V": msg[7] == 3? "1.8 V":""); print_pr_data (msg, msglen, 8); } static void print_p2r_iccpoweroff (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_IccPowerOff", msg, msglen); print_pr_data (msg, msglen, 7); } static void print_p2r_getslotstatus (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_GetSlotStatus", msg, msglen); print_pr_data (msg, msglen, 7); } static void print_p2r_xfrblock (const unsigned char *msg, size_t msglen) { unsigned int val; print_p2r_header ("PC_to_RDR_XfrBlock", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" bBWI ..............: 0x%02x\n", msg[7]); val = convert_le_u16 (msg+8); DEBUGOUT_2 (" wLevelParameter ...: 0x%04x%s\n", val, val == 1? " (continued)": val == 2? " (continues+ends)": val == 3? " (continues+continued)": val == 16? " (DataBlock-expected)":""); print_pr_data (msg, msglen, 10); } static void print_p2r_getparameters (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_GetParameters", msg, msglen); print_pr_data (msg, msglen, 7); } static void print_p2r_resetparameters (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_ResetParameters", msg, msglen); print_pr_data (msg, msglen, 7); } static void print_p2r_setparameters (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_SetParameters", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" bProtocolNum ......: 0x%02x\n", msg[7]); print_pr_data (msg, msglen, 8); } static void print_p2r_escape (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_Escape", msg, msglen); print_pr_data (msg, msglen, 7); } static void print_p2r_iccclock (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_IccClock", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" bClockCommand .....: 0x%02x\n", msg[7]); print_pr_data (msg, msglen, 8); } static void print_p2r_to0apdu (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_T0APDU", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" bmChanges .........: 0x%02x\n", msg[7]); DEBUGOUT_1 (" bClassGetResponse .: 0x%02x\n", msg[8]); DEBUGOUT_1 (" bClassEnvelope ....: 0x%02x\n", msg[9]); print_pr_data (msg, msglen, 10); } static void print_p2r_secure (const unsigned char *msg, size_t msglen) { unsigned int val; print_p2r_header ("PC_to_RDR_Secure", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" bBMI ..............: 0x%02x\n", msg[7]); val = convert_le_u16 (msg+8); DEBUGOUT_2 (" wLevelParameter ...: 0x%04x%s\n", val, val == 1? " (continued)": val == 2? " (continues+ends)": val == 3? " (continues+continued)": val == 16? " (DataBlock-expected)":""); print_pr_data (msg, msglen, 10); } static void print_p2r_mechanical (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_Mechanical", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" bFunction .........: 0x%02x\n", msg[7]); print_pr_data (msg, msglen, 8); } static void print_p2r_abort (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_Abort", msg, msglen); print_pr_data (msg, msglen, 7); } static void print_p2r_setdatarate (const unsigned char *msg, size_t msglen) { print_p2r_header ("PC_to_RDR_SetDataRate", msg, msglen); if (msglen < 10) return; print_pr_data (msg, msglen, 7); } static void print_p2r_unknown (const unsigned char *msg, size_t msglen) { print_p2r_header ("Unknown PC_to_RDR command", msg, msglen); if (msglen < 10) return; print_pr_data (msg, msglen, 0); } static void print_r2p_header (const char *name, const unsigned char *msg, size_t msglen) { DEBUGOUT_1 ("%s:\n", name); if (msglen < 9) return; DEBUGOUT_1 (" dwLength ..........: %u\n", convert_le_u32 (msg+1)); DEBUGOUT_1 (" bSlot .............: %u\n", msg[5]); DEBUGOUT_1 (" bSeq ..............: %u\n", msg[6]); DEBUGOUT_1 (" bStatus ...........: %u\n", msg[7]); if (msg[8]) DEBUGOUT_1 (" bError ............: %u\n", msg[8]); } static void print_r2p_datablock (const unsigned char *msg, size_t msglen) { print_r2p_header ("RDR_to_PC_DataBlock", msg, msglen); if (msglen < 10) return; if (msg[9]) DEBUGOUT_2 (" bChainParameter ...: 0x%02x%s\n", msg[9], msg[9] == 1? " (continued)": msg[9] == 2? " (continues+ends)": msg[9] == 3? " (continues+continued)": msg[9] == 16? " (XferBlock-expected)":""); print_pr_data (msg, msglen, 10); } static void print_r2p_slotstatus (const unsigned char *msg, size_t msglen) { print_r2p_header ("RDR_to_PC_SlotStatus", msg, msglen); if (msglen < 10) return; DEBUGOUT_2 (" bClockStatus ......: 0x%02x%s\n", msg[9], msg[9] == 0? " (running)": msg[9] == 1? " (stopped-L)": msg[9] == 2? " (stopped-H)": msg[9] == 3? " (stopped)":""); print_pr_data (msg, msglen, 10); } static void print_r2p_parameters (const unsigned char *msg, size_t msglen) { print_r2p_header ("RDR_to_PC_Parameters", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" protocol ..........: T=%d\n", msg[9]); if (msglen == 17 && msg[9] == 1) { /* Protocol T=1. */ DEBUGOUT_1 (" bmFindexDindex ....: %02X\n", msg[10]); DEBUGOUT_1 (" bmTCCKST1 .........: %02X\n", msg[11]); DEBUGOUT_1 (" bGuardTimeT1 ......: %02X\n", msg[12]); DEBUGOUT_1 (" bmWaitingIntegersT1: %02X\n", msg[13]); DEBUGOUT_1 (" bClockStop ........: %02X\n", msg[14]); DEBUGOUT_1 (" bIFSC .............: %d\n", msg[15]); DEBUGOUT_1 (" bNadValue .........: %d\n", msg[16]); } else print_pr_data (msg, msglen, 10); } static void print_r2p_escape (const unsigned char *msg, size_t msglen) { print_r2p_header ("RDR_to_PC_Escape", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" buffer[9] .........: %02X\n", msg[9]); print_pr_data (msg, msglen, 10); } static void print_r2p_datarate (const unsigned char *msg, size_t msglen) { print_r2p_header ("RDR_to_PC_DataRate", msg, msglen); if (msglen < 10) return; if (msglen >= 18) { DEBUGOUT_1 (" dwClockFrequency ..: %u\n", convert_le_u32 (msg+10)); DEBUGOUT_1 (" dwDataRate ..... ..: %u\n", convert_le_u32 (msg+14)); print_pr_data (msg, msglen, 18); } else print_pr_data (msg, msglen, 10); } static void print_r2p_unknown (const unsigned char *msg, size_t msglen) { print_r2p_header ("Unknown RDR_to_PC command", msg, msglen); if (msglen < 10) return; DEBUGOUT_1 (" bMessageType ......: %02X\n", msg[0]); DEBUGOUT_1 (" buffer[9] .........: %02X\n", msg[9]); print_pr_data (msg, msglen, 10); } /* Given a handle used for special transport prepare it for use. In particular setup all information in way that resembles what parse_cccid_descriptor does. */ static void prepare_special_transport (ccid_driver_t handle) { assert (!handle->id_vendor); handle->nonnull_nad = 0; handle->auto_ifsd = 0; handle->max_ifsd = 32; handle->ifsd = 0; handle->has_pinpad = 0; handle->apdu_level = 0; switch (handle->id_product) { case TRANSPORT_CM4040: DEBUGOUT ("setting up transport for CardMan 4040\n"); handle->apdu_level = 1; break; default: assert (!"transport not defined"); } } /* Parse a CCID descriptor, optionally print all available features and test whether this reader is usable by this driver. Returns 0 if it is usable. Note, that this code is based on the one in lsusb.c of the usb-utils package, I wrote on 2003-09-01. -wk. */ static int parse_ccid_descriptor (ccid_driver_t handle, const unsigned char *buf, size_t buflen) { unsigned int i; unsigned int us; int have_t1 = 0, have_tpdu=0, have_auto_conf = 0; handle->nonnull_nad = 0; handle->auto_ifsd = 0; handle->max_ifsd = 32; handle->ifsd = 0; handle->has_pinpad = 0; handle->apdu_level = 0; DEBUGOUT_3 ("idVendor: %04X idProduct: %04X bcdDevice: %04X\n", handle->id_vendor, handle->id_product, handle->bcd_device); if (buflen < 54 || buf[0] < 54) { DEBUGOUT ("CCID device descriptor is too short\n"); return -1; } DEBUGOUT ("ChipCard Interface Descriptor:\n"); DEBUGOUT_1 (" bLength %5u\n", buf[0]); DEBUGOUT_1 (" bDescriptorType %5u\n", buf[1]); DEBUGOUT_2 (" bcdCCID %2x.%02x", buf[3], buf[2]); if (buf[3] != 1 || buf[2] != 0) DEBUGOUT_CONT(" (Warning: Only accurate for version 1.0)"); DEBUGOUT_LF (); DEBUGOUT_1 (" nMaxSlotIndex %5u\n", buf[4]); DEBUGOUT_2 (" bVoltageSupport %5u %s\n", buf[5], (buf[5] == 1? "5.0V" : buf[5] == 2? "3.0V" : buf[5] == 3? "1.8V":"?")); us = convert_le_u32 (buf+6); DEBUGOUT_1 (" dwProtocols %5u ", us); if ((us & 1)) DEBUGOUT_CONT (" T=0"); if ((us & 2)) { DEBUGOUT_CONT (" T=1"); have_t1 = 1; } if ((us & ~3)) DEBUGOUT_CONT (" (Invalid values detected)"); DEBUGOUT_LF (); us = convert_le_u32(buf+10); DEBUGOUT_1 (" dwDefaultClock %5u\n", us); us = convert_le_u32(buf+14); DEBUGOUT_1 (" dwMaxiumumClock %5u\n", us); DEBUGOUT_1 (" bNumClockSupported %5u\n", buf[18]); us = convert_le_u32(buf+19); DEBUGOUT_1 (" dwDataRate %7u bps\n", us); us = convert_le_u32(buf+23); DEBUGOUT_1 (" dwMaxDataRate %7u bps\n", us); DEBUGOUT_1 (" bNumDataRatesSupp. %5u\n", buf[27]); us = convert_le_u32(buf+28); DEBUGOUT_1 (" dwMaxIFSD %5u\n", us); handle->max_ifsd = us; us = convert_le_u32(buf+32); DEBUGOUT_1 (" dwSyncProtocols %08X ", us); if ((us&1)) DEBUGOUT_CONT ( " 2-wire"); if ((us&2)) DEBUGOUT_CONT ( " 3-wire"); if ((us&4)) DEBUGOUT_CONT ( " I2C"); DEBUGOUT_LF (); us = convert_le_u32(buf+36); DEBUGOUT_1 (" dwMechanical %08X ", us); if ((us & 1)) DEBUGOUT_CONT (" accept"); if ((us & 2)) DEBUGOUT_CONT (" eject"); if ((us & 4)) DEBUGOUT_CONT (" capture"); if ((us & 8)) DEBUGOUT_CONT (" lock"); DEBUGOUT_LF (); us = convert_le_u32(buf+40); DEBUGOUT_1 (" dwFeatures %08X\n", us); if ((us & 0x0002)) { DEBUGOUT (" Auto configuration based on ATR\n"); have_auto_conf = 1; } if ((us & 0x0004)) DEBUGOUT (" Auto activation on insert\n"); if ((us & 0x0008)) DEBUGOUT (" Auto voltage selection\n"); if ((us & 0x0010)) DEBUGOUT (" Auto clock change\n"); if ((us & 0x0020)) DEBUGOUT (" Auto baud rate change\n"); if ((us & 0x0040)) DEBUGOUT (" Auto parameter negotiation made by CCID\n"); else if ((us & 0x0080)) DEBUGOUT (" Auto PPS made by CCID\n"); else if ((us & (0x0040 | 0x0080))) DEBUGOUT (" WARNING: conflicting negotiation features\n"); if ((us & 0x0100)) DEBUGOUT (" CCID can set ICC in clock stop mode\n"); if ((us & 0x0200)) { DEBUGOUT (" NAD value other than 0x00 accepted\n"); handle->nonnull_nad = 1; } if ((us & 0x0400)) { DEBUGOUT (" Auto IFSD exchange\n"); handle->auto_ifsd = 1; } if ((us & 0x00010000)) { DEBUGOUT (" TPDU level exchange\n"); have_tpdu = 1; } else if ((us & 0x00020000)) { DEBUGOUT (" Short APDU level exchange\n"); handle->apdu_level = 1; } else if ((us & 0x00040000)) { DEBUGOUT (" Short and extended APDU level exchange\n"); handle->apdu_level = 2; } else if ((us & 0x00070000)) DEBUGOUT (" WARNING: conflicting exchange levels\n"); us = convert_le_u32(buf+44); DEBUGOUT_1 (" dwMaxCCIDMsgLen %5u\n", us); DEBUGOUT ( " bClassGetResponse "); if (buf[48] == 0xff) DEBUGOUT_CONT ("echo\n"); else DEBUGOUT_CONT_1 (" %02X\n", buf[48]); DEBUGOUT ( " bClassEnvelope "); if (buf[49] == 0xff) DEBUGOUT_CONT ("echo\n"); else DEBUGOUT_CONT_1 (" %02X\n", buf[48]); DEBUGOUT ( " wlcdLayout "); if (!buf[50] && !buf[51]) DEBUGOUT_CONT ("none\n"); else DEBUGOUT_CONT_2 ("%u cols %u lines\n", buf[50], buf[51]); DEBUGOUT_1 (" bPINSupport %5u ", buf[52]); if ((buf[52] & 1)) { DEBUGOUT_CONT ( " verification"); handle->has_pinpad |= 1; } if ((buf[52] & 2)) { DEBUGOUT_CONT ( " modification"); handle->has_pinpad |= 2; } DEBUGOUT_LF (); DEBUGOUT_1 (" bMaxCCIDBusySlots %5u\n", buf[53]); if (buf[0] > 54) { DEBUGOUT (" junk "); for (i=54; i < buf[0]-54; i++) DEBUGOUT_CONT_1 (" %02X", buf[i]); DEBUGOUT_LF (); } if (!have_t1 || !(have_tpdu || handle->apdu_level) || !have_auto_conf) { DEBUGOUT ("this drivers requires that the reader supports T=1, " "TPDU or APDU level exchange and auto configuration - " "this is not available\n"); return -1; } /* SCM drivers get stuck in their internal USB stack if they try to send a frame of n*wMaxPacketSize back to us. Given that wMaxPacketSize is 64 for these readers we set the IFSD to a value lower than that: 64 - 10 CCID header - 4 T1frame - 2 reserved = 48 Product Ids: 0xe001 - SCR 331 0x5111 - SCR 331-DI 0x5115 - SCR 335 0xe003 - SPR 532 The 0x5117 - SCR 3320 USB ID-000 reader seems to be very slow but enabling this workaround boosts the performance to a a more or less acceptable level (tested by David). */ if (handle->id_vendor == VENDOR_SCM && handle->max_ifsd > 48 && ( (handle->id_product == 0xe001 && handle->bcd_device < 0x0516) ||(handle->id_product == 0x5111 && handle->bcd_device < 0x0620) ||(handle->id_product == 0x5115 && handle->bcd_device < 0x0514) ||(handle->id_product == 0xe003 && handle->bcd_device < 0x0504) ||(handle->id_product == 0x5117 && handle->bcd_device < 0x0522) )) { DEBUGOUT ("enabling workaround for buggy SCM readers\n"); handle->max_ifsd = 48; } return 0; } static char * get_escaped_usb_string (usb_dev_handle *idev, int idx, const char *prefix, const char *suffix) { int rc; unsigned char buf[280]; unsigned char *s; unsigned int langid; size_t i, n, len; char *result; if (!idx) return NULL; /* Fixme: The next line is for the current Valgrid without support for USB IOCTLs. */ memset (buf, 0, sizeof buf); /* First get the list of supported languages and use the first one. If we do don't find it we try to use English. Note that this is all in a 2 bute Unicode encoding using little endian. */ rc = usb_control_msg (idev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8), 0, (char*)buf, sizeof buf, 1000 /* ms timeout */); if (rc < 4) langid = 0x0409; /* English. */ else langid = (buf[3] << 8) | buf[2]; rc = usb_control_msg (idev, USB_ENDPOINT_IN, USB_REQ_GET_DESCRIPTOR, (USB_DT_STRING << 8) + idx, langid, (char*)buf, sizeof buf, 1000 /* ms timeout */); if (rc < 2 || buf[1] != USB_DT_STRING) return NULL; /* Error or not a string. */ len = buf[0]; if (len > rc) return NULL; /* Larger than our buffer. */ for (s=buf+2, i=2, n=0; i+1 < len; i += 2, s += 2) { if (s[1]) n++; /* High byte set. */ else if (*s <= 0x20 || *s >= 0x7f || *s == '%' || *s == ':') n += 3 ; else n++; } result = malloc (strlen (prefix) + n + strlen (suffix) + 1); if (!result) return NULL; strcpy (result, prefix); n = strlen (prefix); for (s=buf+2, i=2; i+1 < len; i += 2, s += 2) { if (s[1]) result[n++] = '\xff'; /* High byte set. */ else if (*s <= 0x20 || *s >= 0x7f || *s == '%' || *s == ':') { sprintf (result+n, "%%%02X", *s); n += 3; } else result[n++] = *s; } strcpy (result+n, suffix); return result; } /* This function creates an reader id to be used to find the same physical reader after a reset. It returns an allocated and possibly percent escaped string or NULL if not enough memory is available. */ static char * make_reader_id (usb_dev_handle *idev, unsigned int vendor, unsigned int product, unsigned char serialno_index) { char *rid; char prefix[20]; sprintf (prefix, "%04X:%04X:", (vendor & 0xffff), (product & 0xffff)); rid = get_escaped_usb_string (idev, serialno_index, prefix, ":0"); if (!rid) { rid = malloc (strlen (prefix) + 3 + 1); if (!rid) return NULL; strcpy (rid, prefix); strcat (rid, "X:0"); } return rid; } /* Helper to find the endpoint from an interface descriptor. */ static int find_endpoint (struct usb_interface_descriptor *ifcdesc, int mode) { int no; int want_bulk_in = 0; if (mode == 1) want_bulk_in = 0x80; for (no=0; no < ifcdesc->bNumEndpoints; no++) { struct usb_endpoint_descriptor *ep = ifcdesc->endpoint + no; if (ep->bDescriptorType != USB_DT_ENDPOINT) ; else if (mode == 2 && ((ep->bmAttributes & USB_ENDPOINT_TYPE_MASK) == USB_ENDPOINT_TYPE_INTERRUPT) && (ep->bEndpointAddress & 0x80)) return (ep->bEndpointAddress & 0x0f); else if (((ep->bmAttributes & USB_ENDPOINT_TYPE_MASK) == USB_ENDPOINT_TYPE_BULK) && (ep->bEndpointAddress & 0x80) == want_bulk_in) return (ep->bEndpointAddress & 0x0f); } /* Should never happen. */ return mode == 2? 0x83 : mode == 1? 0x82 :1; } /* Helper for scan_or_find_devices. This function returns true if a requested device has been found or the caller should stop scanning for other reasons. */ static int scan_or_find_usb_device (int scan_mode, int *readerno, int *count, char **rid_list, const char *readerid, struct usb_device *dev, char **r_rid, struct usb_device **r_dev, usb_dev_handle **r_idev, unsigned char **ifcdesc_extra, size_t *ifcdesc_extra_len, int *interface_number, int *ep_bulk_out, int *ep_bulk_in, int *ep_intr) { int cfg_no; int ifc_no; int set_no; struct usb_config_descriptor *config; struct usb_interface *interface; struct usb_interface_descriptor *ifcdesc; char *rid; usb_dev_handle *idev; *r_idev = NULL; for (cfg_no=0; cfg_no < dev->descriptor.bNumConfigurations; cfg_no++) { config = dev->config + cfg_no; if(!config) continue; for (ifc_no=0; ifc_no < config->bNumInterfaces; ifc_no++) { interface = config->interface + ifc_no; if (!interface) continue; for (set_no=0; set_no < interface->num_altsetting; set_no++) { ifcdesc = (interface->altsetting + set_no); /* The second condition is for older SCM SPR 532 who did not know about the assigned CCID class. Instead of trying to interpret the strings we simply check the product ID. */ if (ifcdesc && ifcdesc->extra && ((ifcdesc->bInterfaceClass == 11 && ifcdesc->bInterfaceSubClass == 0 && ifcdesc->bInterfaceProtocol == 0) || (ifcdesc->bInterfaceClass == 255 && dev->descriptor.idVendor == VENDOR_SCM && dev->descriptor.idProduct == 0xe003))) { idev = usb_open (dev); if (!idev) { DEBUGOUT_1 ("usb_open failed: %s\n", strerror (errno)); continue; /* with next setting. */ } rid = make_reader_id (idev, dev->descriptor.idVendor, dev->descriptor.idProduct, dev->descriptor.iSerialNumber); if (rid) { if (scan_mode) { char *p; /* We are collecting infos about all available CCID readers. Store them and continue. */ DEBUGOUT_2 ("found CCID reader %d (ID=%s)\n", *count, rid ); p = malloc ((*rid_list? strlen (*rid_list):0) + 1 + strlen (rid) + 1); if (p) { *p = 0; if (*rid_list) { strcat (p, *rid_list); free (*rid_list); } strcat (p, rid); strcat (p, "\n"); *rid_list = p; } else /* Out of memory. */ free (rid); rid = NULL; ++*count; } else if (!*readerno || (*readerno < 0 && readerid && !strcmp (readerid, rid))) { /* We found the requested reader. */ if (ifcdesc_extra && ifcdesc_extra_len) { *ifcdesc_extra = malloc (ifcdesc ->extralen); if (!*ifcdesc_extra) { usb_close (idev); free (rid); return 1; /* Out of core. */ } memcpy (*ifcdesc_extra, ifcdesc->extra, ifcdesc->extralen); *ifcdesc_extra_len = ifcdesc->extralen; } if (interface_number) *interface_number = (ifcdesc->bInterfaceNumber); if (ep_bulk_out) *ep_bulk_out = find_endpoint (ifcdesc, 0); if (ep_bulk_in) *ep_bulk_in = find_endpoint (ifcdesc, 1); if (ep_intr) *ep_intr = find_endpoint (ifcdesc, 2); if (r_dev) *r_dev = dev; if (r_rid) { *r_rid = rid; rid = NULL; } else free (rid); *r_idev = idev; return 1; /* Found requested device. */ } else { /* This is not yet the reader we want. fixme: We should avoid the extra usb_open in this case. */ if (*readerno >= 0) --*readerno; } free (rid); } usb_close (idev); idev = NULL; return 0; } } } } return 0; } /* Combination function to either scan all CCID devices or to find and open one specific device. The function returns 0 if a reader has been found or when a scan returned without error. With READERNO = -1 and READERID is NULL, scan mode is used and R_RID should be the address where to store the list of reader_ids we found. If on return this list is empty, no CCID device has been found; otherwise it points to an allocated linked list of reader IDs. Note that in this mode the function always returns NULL. With READERNO >= 0 or READERID is not NULL find mode is used. This uses the same algorithm as the scan mode but stops and returns at the entry number READERNO and return the handle for the the opened USB device. If R_RID is not NULL it will receive the reader ID of that device. If R_DEV is not NULL it will the device pointer of that device. If IFCDESC_EXTRA is NOT NULL it will receive a malloced copy of the interfaces "extra: data filed; IFCDESC_EXTRA_LEN receive the length of this field. If there is no reader with number READERNO or that reader is not usable by our implementation NULL will be returned. The caller must close a returned USB device handle and free (if not passed as NULL) the returned reader ID info as well as the IFCDESC_EXTRA. On error NULL will get stored at R_RID, R_DEV, IFCDESC_EXTRA and IFCDESC_EXTRA_LEN. With READERID being -1 the function stops if the READERID was found. If R_FD is not -1 on return the device is not using USB for transport but the device associated with that file descriptor. In this case INTERFACE will receive the transport type and the other USB specific return values are not used; the return value is (void*)(1). Note that the first entry of the returned reader ID list in scan mode corresponds with a READERNO of 0 in find mode. */ static int scan_or_find_devices (int readerno, const char *readerid, char **r_rid, struct usb_device **r_dev, unsigned char **ifcdesc_extra, size_t *ifcdesc_extra_len, int *interface_number, int *ep_bulk_out, int *ep_bulk_in, int *ep_intr, usb_dev_handle **r_idev, int *r_fd) { char *rid_list = NULL; int count = 0; struct usb_bus *busses, *bus; struct usb_device *dev = NULL; usb_dev_handle *idev = NULL; int scan_mode = (readerno == -1 && !readerid); int i; /* Set return values to a default. */ if (r_rid) *r_rid = NULL; if (r_dev) *r_dev = NULL; if (ifcdesc_extra) *ifcdesc_extra = NULL; if (ifcdesc_extra_len) *ifcdesc_extra_len = 0; if (interface_number) *interface_number = 0; if (r_idev) *r_idev = NULL; if (r_fd) *r_fd = -1; /* See whether we want scan or find mode. */ if (scan_mode) { assert (r_rid); } usb_find_busses(); usb_find_devices(); #ifdef HAVE_USB_GET_BUSSES busses = usb_get_busses(); #else busses = usb_busses; #endif for (bus = busses; bus; bus = bus->next) { for (dev = bus->devices; dev; dev = dev->next) { if (scan_or_find_usb_device (scan_mode, &readerno, &count, &rid_list, readerid, dev, r_rid, r_dev, &idev, ifcdesc_extra, ifcdesc_extra_len, interface_number, ep_bulk_out, ep_bulk_in, ep_intr)) { /* Found requested device or out of core. */ if (!idev) { free (rid_list); return -1; /* error */ } *r_idev = idev; return 0; } } } /* Now check whether there are any devices with special transport types. */ for (i=0; transports[i].name; i++) { int fd; char *rid, *p; fd = open (transports[i].name, O_RDWR); if (fd == -1 && scan_mode && errno == EBUSY) { /* Ignore this error in scan mode because it indicates that the device exists but is already open (most likely by us) and thus in general suitable as a reader. */ } else if (fd == -1) { DEBUGOUT_2 ("failed to open `%s': %s\n", transports[i].name, strerror (errno)); continue; } rid = malloc (strlen (transports[i].name) + 30 + 10); if (!rid) { if (fd != -1) close (fd); free (rid_list); return -1; /* Error. */ } sprintf (rid, "0000:%04X:%s:0", transports[i].type, transports[i].name); if (scan_mode) { DEBUGOUT_2 ("found CCID reader %d (ID=%s)\n", count, rid); p = malloc ((rid_list? strlen (rid_list):0) + 1 + strlen (rid) + 1); if (!p) { if (fd != -1) close (fd); free (rid_list); free (rid); return -1; /* Error. */ } *p = 0; if (rid_list) { strcat (p, rid_list); free (rid_list); } strcat (p, rid); strcat (p, "\n"); rid_list = p; ++count; } else if (!readerno || (readerno < 0 && readerid && !strcmp (readerid, rid))) { /* Found requested device. */ if (interface_number) *interface_number = transports[i].type; if (r_rid) *r_rid = rid; else free (rid); if (r_fd) *r_fd = fd; return 0; /* Okay, found device */ } else /* This is not yet the reader we want. */ { if (readerno >= 0) --readerno; } free (rid); if (fd != -1) close (fd); } if (scan_mode) { *r_rid = rid_list; return 0; } else return -1; } /* Set the level of debugging to LEVEL and return the old level. -1 just returns the old level. A level of 0 disables debugging, 1 enables debugging, 2 enables additional tracing of the T=1 protocol, 3 additionally enables debugging for GetSlotStatus, other values are not yet defined. Note that libusb may provide its own debugging feature which is enabled by setting the envvar USB_DEBUG. */ int ccid_set_debug_level (int level) { int old = debug_level; if (level != -1) debug_level = level; return old; } char * ccid_get_reader_list (void) { char *reader_list; if (!initialized_usb) { usb_init (); initialized_usb = 1; } if (scan_or_find_devices (-1, NULL, &reader_list, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)) return NULL; /* Error. */ return reader_list; } /* Open the reader with the internal number READERNO and return a pointer to be used as handle in HANDLE. Returns 0 on success. */ int ccid_open_reader (ccid_driver_t *handle, const char *readerid) { int rc = 0; struct usb_device *dev = NULL; usb_dev_handle *idev = NULL; int dev_fd = -1; char *rid = NULL; unsigned char *ifcdesc_extra = NULL; size_t ifcdesc_extra_len; int readerno; int ifc_no, ep_bulk_out, ep_bulk_in, ep_intr; *handle = NULL; if (!initialized_usb) { usb_init (); initialized_usb = 1; } /* See whether we want to use the reader ID string or a reader number. A readerno of -1 indicates that the reader ID string is to be used. */ if (readerid && strchr (readerid, ':')) readerno = -1; /* We want to use the readerid. */ else if (readerid) { readerno = atoi (readerid); if (readerno < 0) { DEBUGOUT ("no CCID readers found\n"); rc = CCID_DRIVER_ERR_NO_READER; goto leave; } } else readerno = 0; /* Default. */ if (scan_or_find_devices (readerno, readerid, &rid, &dev, &ifcdesc_extra, &ifcdesc_extra_len, &ifc_no, &ep_bulk_out, &ep_bulk_in, &ep_intr, &idev, &dev_fd) ) { if (readerno == -1) DEBUGOUT_1 ("no CCID reader with ID %s\n", readerid ); else DEBUGOUT_1 ("no CCID reader with number %d\n", readerno ); rc = CCID_DRIVER_ERR_NO_READER; goto leave; } /* Okay, this is a CCID reader. */ *handle = calloc (1, sizeof **handle); if (!*handle) { DEBUGOUT ("out of memory\n"); rc = CCID_DRIVER_ERR_OUT_OF_CORE; goto leave; } (*handle)->rid = rid; if (idev) /* Regular USB transport. */ { (*handle)->idev = idev; (*handle)->dev_fd = -1; (*handle)->id_vendor = dev->descriptor.idVendor; (*handle)->id_product = dev->descriptor.idProduct; (*handle)->bcd_device = dev->descriptor.bcdDevice; (*handle)->ifc_no = ifc_no; (*handle)->ep_bulk_out = ep_bulk_out; (*handle)->ep_bulk_in = ep_bulk_in; (*handle)->ep_intr = ep_intr; } else if (dev_fd != -1) /* Device transport. */ { (*handle)->idev = NULL; (*handle)->dev_fd = dev_fd; (*handle)->id_vendor = 0; /* Magic vendor for special transport. */ (*handle)->id_product = ifc_no; /* Transport type */ prepare_special_transport (*handle); } else { assert (!"no transport"); /* Bug. */ } DEBUGOUT_2 ("using CCID reader %d (ID=%s)\n", readerno, rid ); if (idev) { if (parse_ccid_descriptor (*handle, ifcdesc_extra, ifcdesc_extra_len)) { DEBUGOUT ("device not supported\n"); rc = CCID_DRIVER_ERR_NO_READER; goto leave; } rc = usb_claim_interface (idev, ifc_no); if (rc) { DEBUGOUT_1 ("usb_claim_interface failed: %d\n", rc); rc = CCID_DRIVER_ERR_CARD_IO_ERROR; goto leave; } } leave: free (ifcdesc_extra); if (rc) { free (rid); if (idev) usb_close (idev); if (dev_fd != -1) close (dev_fd); free (*handle); *handle = NULL; } return rc; } static void do_close_reader (ccid_driver_t handle) { int rc; unsigned char msg[100]; size_t msglen; unsigned char seqno; if (!handle->powered_off) { msg[0] = PC_to_RDR_IccPowerOff; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 0; /* RFU */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ set_msg_len (msg, 0); msglen = 10; rc = bulk_out (handle, msg, msglen, 0); if (!rc) bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_SlotStatus, seqno, 2000, 0); handle->powered_off = 1; } if (handle->idev) { usb_release_interface (handle->idev, handle->ifc_no); usb_close (handle->idev); handle->idev = NULL; } if (handle->dev_fd != -1) { close (handle->dev_fd); handle->dev_fd = -1; } } /* Reset a reader on HANDLE. This is useful in case a reader has been plugged of and inserted at a different port. By resetting the handle, the same reader will be get used. Note, that on error the handle won't get released. This does not return an ATR, so ccid_get_atr should be called right after this one. */ int ccid_shutdown_reader (ccid_driver_t handle) { int rc = 0; struct usb_device *dev = NULL; usb_dev_handle *idev = NULL; unsigned char *ifcdesc_extra = NULL; size_t ifcdesc_extra_len; int ifc_no, ep_bulk_out, ep_bulk_in, ep_intr; if (!handle || !handle->rid) return CCID_DRIVER_ERR_INV_VALUE; do_close_reader (handle); if (scan_or_find_devices (-1, handle->rid, NULL, &dev, &ifcdesc_extra, &ifcdesc_extra_len, &ifc_no, &ep_bulk_out, &ep_bulk_in, &ep_intr, &idev, NULL) || !idev) { DEBUGOUT_1 ("no CCID reader with ID %s\n", handle->rid); return CCID_DRIVER_ERR_NO_READER; } if (idev) { handle->idev = idev; handle->ifc_no = ifc_no; handle->ep_bulk_out = ep_bulk_out; handle->ep_bulk_in = ep_bulk_in; handle->ep_intr = ep_intr; if (parse_ccid_descriptor (handle, ifcdesc_extra, ifcdesc_extra_len)) { DEBUGOUT ("device not supported\n"); rc = CCID_DRIVER_ERR_NO_READER; goto leave; } rc = usb_claim_interface (idev, ifc_no); if (rc) { DEBUGOUT_1 ("usb_claim_interface failed: %d\n", rc); rc = CCID_DRIVER_ERR_CARD_IO_ERROR; goto leave; } } leave: free (ifcdesc_extra); if (rc) { if (handle->idev) usb_close (handle->idev); handle->idev = NULL; if (handle->dev_fd != -1) close (handle->dev_fd); handle->dev_fd = -1; } return rc; } int ccid_set_progress_cb (ccid_driver_t handle, void (*cb)(void *, const char *, int, int, int), void *cb_arg) { if (!handle || !handle->rid) return CCID_DRIVER_ERR_INV_VALUE; handle->progress_cb = cb; handle->progress_cb_arg = cb_arg; return 0; } /* Close the reader HANDLE. */ int ccid_close_reader (ccid_driver_t handle) { if (!handle || (!handle->idev && handle->dev_fd == -1)) return 0; do_close_reader (handle); free (handle->rid); free (handle); return 0; } /* Return False if a card is present and powered. */ int ccid_check_card_presence (ccid_driver_t handle) { (void)handle; /* Not yet implemented. */ return -1; } /* Write NBYTES of BUF to file descriptor FD. */ static int writen (int fd, const void *buf, size_t nbytes) { size_t nleft = nbytes; int nwritten; while (nleft > 0) { nwritten = write (fd, buf, nleft); if (nwritten < 0) { if (errno == EINTR) nwritten = 0; else return -1; } nleft -= nwritten; buf = (const char*)buf + nwritten; } return 0; } /* Write a MSG of length MSGLEN to the designated bulk out endpoint. Returns 0 on success. */ static int bulk_out (ccid_driver_t handle, unsigned char *msg, size_t msglen, int no_debug) { int rc; /* No need to continue and clutter the log with USB write error messages after we got the first ENODEV. */ if (handle->enodev_seen) return CCID_DRIVER_ERR_NO_READER; if (debug_level && (!no_debug || debug_level >= 3)) { switch (msglen? msg[0]:0) { case PC_to_RDR_IccPowerOn: print_p2r_iccpoweron (msg, msglen); break; case PC_to_RDR_IccPowerOff: print_p2r_iccpoweroff (msg, msglen); break; case PC_to_RDR_GetSlotStatus: print_p2r_getslotstatus (msg, msglen); break; case PC_to_RDR_XfrBlock: print_p2r_xfrblock (msg, msglen); break; case PC_to_RDR_GetParameters: print_p2r_getparameters (msg, msglen); break; case PC_to_RDR_ResetParameters: print_p2r_resetparameters (msg, msglen); break; case PC_to_RDR_SetParameters: print_p2r_setparameters (msg, msglen); break; case PC_to_RDR_Escape: print_p2r_escape (msg, msglen); break; case PC_to_RDR_IccClock: print_p2r_iccclock (msg, msglen); break; case PC_to_RDR_T0APDU: print_p2r_to0apdu (msg, msglen); break; case PC_to_RDR_Secure: print_p2r_secure (msg, msglen); break; case PC_to_RDR_Mechanical: print_p2r_mechanical (msg, msglen); break; case PC_to_RDR_Abort: print_p2r_abort (msg, msglen); break; case PC_to_RDR_SetDataRate: print_p2r_setdatarate (msg, msglen); break; default: print_p2r_unknown (msg, msglen); break; } } if (handle->idev) { rc = usb_bulk_write (handle->idev, handle->ep_bulk_out, (char*)msg, msglen, 5000 /* ms timeout */); if (rc == msglen) return 0; #ifdef ENODEV if (rc == -(ENODEV)) { /* The Linux libusb returns a negative error value. Catch the most important one. */ errno = ENODEV; rc = -1; } #endif /*ENODEV*/ if (rc == -1) { DEBUGOUT_1 ("usb_bulk_write error: %s\n", strerror (errno)); #ifdef ENODEV if (errno == ENODEV) { handle->enodev_seen = 1; return CCID_DRIVER_ERR_NO_READER; } #endif /*ENODEV*/ } else DEBUGOUT_1 ("usb_bulk_write failed: %d\n", rc); } else { rc = writen (handle->dev_fd, msg, msglen); if (!rc) return 0; DEBUGOUT_2 ("writen to %d failed: %s\n", handle->dev_fd, strerror (errno)); } return CCID_DRIVER_ERR_CARD_IO_ERROR; } /* Read a maximum of LENGTH bytes from the bulk in endpoint into BUFFER and return the actual read number if bytes in NREAD. SEQNO is the sequence number used to send the request and EXPECTED_TYPE the type of message we expect. Does checks on the ccid header. TIMEOUT is the timeout value in ms. NO_DEBUG may be set to avoid debug messages in case of no error; this can be overriden with a glibal debug level of at least 3. Returns 0 on success. */ static int bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length, size_t *nread, int expected_type, int seqno, int timeout, int no_debug) { int rc; size_t msglen; int eagain_retries = 0; /* Fixme: The next line for the current Valgrind without support for USB IOCTLs. */ memset (buffer, 0, length); retry: if (handle->idev) { rc = usb_bulk_read (handle->idev, handle->ep_bulk_in, (char*)buffer, length, timeout); if (rc < 0) { rc = errno; DEBUGOUT_1 ("usb_bulk_read error: %s\n", strerror (rc)); if (rc == EAGAIN && eagain_retries++ < 3) { my_sleep (1); goto retry; } return CCID_DRIVER_ERR_CARD_IO_ERROR; } *nread = msglen = rc; } else { rc = read (handle->dev_fd, buffer, length); if (rc < 0) { rc = errno; DEBUGOUT_2 ("read from %d failed: %s\n", handle->dev_fd, strerror (rc)); if (rc == EAGAIN && eagain_retries++ < 5) { my_sleep (1); goto retry; } return CCID_DRIVER_ERR_CARD_IO_ERROR; } *nread = msglen = rc; } eagain_retries = 0; if (msglen < 10) { DEBUGOUT_1 ("bulk-in msg too short (%u)\n", (unsigned int)msglen); abort_cmd (handle, seqno); return CCID_DRIVER_ERR_INV_VALUE; } if (buffer[5] != 0) { DEBUGOUT_1 ("unexpected bulk-in slot (%d)\n", buffer[5]); return CCID_DRIVER_ERR_INV_VALUE; } if (buffer[6] != seqno) { DEBUGOUT_2 ("bulk-in seqno does not match (%d/%d)\n", seqno, buffer[6]); /* Retry until we are synced again. */ goto retry; } /* We need to handle the time extension request before we check that we got the expected message type. This is in particular required for the Cherry keyboard which sends a time extension request for each key hit. */ if ( !(buffer[7] & 0x03) && (buffer[7] & 0xC0) == 0x80) { /* Card present and active, time extension requested. */ DEBUGOUT_2 ("time extension requested (%02X,%02X)\n", buffer[7], buffer[8]); goto retry; } if (buffer[0] != expected_type) { DEBUGOUT_1 ("unexpected bulk-in msg type (%02x)\n", buffer[0]); abort_cmd (handle, seqno); return CCID_DRIVER_ERR_INV_VALUE; } if (debug_level && (!no_debug || debug_level >= 3)) { switch (buffer[0]) { case RDR_to_PC_DataBlock: print_r2p_datablock (buffer, msglen); break; case RDR_to_PC_SlotStatus: print_r2p_slotstatus (buffer, msglen); break; case RDR_to_PC_Parameters: print_r2p_parameters (buffer, msglen); break; case RDR_to_PC_Escape: print_r2p_escape (buffer, msglen); break; case RDR_to_PC_DataRate: print_r2p_datarate (buffer, msglen); break; default: print_r2p_unknown (buffer, msglen); break; } } if (CCID_COMMAND_FAILED (buffer)) print_command_failed (buffer); /* Check whether a card is at all available. Note: If you add new error codes here, check whether they need to be ignored in send_escape_cmd. */ switch ((buffer[7] & 0x03)) { case 0: /* no error */ break; case 1: return CCID_DRIVER_ERR_CARD_INACTIVE; case 2: return CCID_DRIVER_ERR_NO_CARD; case 3: /* RFU */ break; } return 0; } /* Send an abort sequence and wait until everything settled. */ static int abort_cmd (ccid_driver_t handle, int seqno) { int rc; char dummybuf[8]; unsigned char msg[100]; size_t msglen; if (!handle->idev) { /* I don't know how to send an abort to non-USB devices. */ rc = CCID_DRIVER_ERR_NOT_SUPPORTED; } seqno &= 0xff; DEBUGOUT_1 ("sending abort sequence for seqno %d\n", seqno); /* Send the abort command to the control pipe. Note that we don't need to keep track of sent abort commands because there should never be another thread using the same slot concurrently. */ rc = usb_control_msg (handle->idev, 0x21,/* bmRequestType: host-to-device, class specific, to interface. */ 1, /* ABORT */ (seqno << 8 | 0 /* slot */), handle->ifc_no, dummybuf, 0, 1000 /* ms timeout */); if (rc < 0) { DEBUGOUT_1 ("usb_control_msg error: %s\n", strerror (errno)); return CCID_DRIVER_ERR_CARD_IO_ERROR; } /* Now send the abort command to the bulk out pipe using the same SEQNO and SLOT. Do this in a loop to so that all seqno are tried. */ seqno--; /* Adjust for next increment. */ do { seqno++; msg[0] = PC_to_RDR_Abort; msg[5] = 0; /* slot */ msg[6] = seqno; msg[7] = 0; /* RFU */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ msglen = 10; set_msg_len (msg, 0); rc = usb_bulk_write (handle->idev, handle->ep_bulk_out, (char*)msg, msglen, 5000 /* ms timeout */); if (rc == msglen) rc = 0; else if (rc == -1) DEBUGOUT_1 ("usb_bulk_write error in abort_cmd: %s\n", strerror (errno)); else DEBUGOUT_1 ("usb_bulk_write failed in abort_cmd: %d\n", rc); if (rc) return rc; rc = usb_bulk_read (handle->idev, handle->ep_bulk_in, (char*)msg, sizeof msg, 5000 /*ms timeout*/); if (rc < 0) { DEBUGOUT_1 ("usb_bulk_read error in abort_cmd: %s\n", strerror (errno)); return CCID_DRIVER_ERR_CARD_IO_ERROR; } msglen = rc; if (msglen < 10) { DEBUGOUT_1 ("bulk-in msg in abort_cmd too short (%u)\n", (unsigned int)msglen); return CCID_DRIVER_ERR_INV_VALUE; } if (msg[5] != 0) { DEBUGOUT_1 ("unexpected bulk-in slot (%d) in abort_cmd\n", msg[5]); return CCID_DRIVER_ERR_INV_VALUE; } DEBUGOUT_3 ("status: %02X error: %02X octet[9]: %02X\n", msg[7], msg[8], msg[9]); if (CCID_COMMAND_FAILED (msg)) print_command_failed (msg); } while (msg[0] != RDR_to_PC_SlotStatus && msg[5] != 0 && msg[6] != seqno); handle->seqno = ((seqno + 1) & 0xff); DEBUGOUT ("sending abort sequence succeeded\n"); return 0; } /* Note that this function won't return the error codes NO_CARD or CARD_INACTIVE. IF RESULT is not NULL, the result from the operation will get returned in RESULT and its length in RESULTLEN. If the response is larger than RESULTMAX, an error is returned and the required buffer length returned in RESULTLEN. */ static int send_escape_cmd (ccid_driver_t handle, const unsigned char *data, size_t datalen, unsigned char *result, size_t resultmax, size_t *resultlen) { int rc; unsigned char msg[100]; size_t msglen; unsigned char seqno; if (resultlen) *resultlen = 0; if (datalen > sizeof msg - 10) return CCID_DRIVER_ERR_INV_VALUE; /* Escape data too large. */ msg[0] = PC_to_RDR_Escape; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 0; /* RFU */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ memcpy (msg+10, data, datalen); msglen = 10 + datalen; set_msg_len (msg, datalen); rc = bulk_out (handle, msg, msglen, 0); if (rc) return rc; rc = bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_Escape, seqno, 5000, 0); if (result) switch (rc) { /* We need to ignore certain errorcode here. */ case 0: case CCID_DRIVER_ERR_CARD_INACTIVE: case CCID_DRIVER_ERR_NO_CARD: { if (msglen > resultmax) rc = CCID_DRIVER_ERR_INV_VALUE; /* Response too large. */ else { memcpy (result, msg, msglen); *resultlen = msglen; } rc = 0; } break; default: break; } return rc; } int ccid_transceive_escape (ccid_driver_t handle, const unsigned char *data, size_t datalen, unsigned char *resp, size_t maxresplen, size_t *nresp) { return send_escape_cmd (handle, data, datalen, resp, maxresplen, nresp); } /* experimental */ int ccid_poll (ccid_driver_t handle) { int rc; unsigned char msg[10]; size_t msglen; int i, j; if (handle->idev) { rc = usb_bulk_read (handle->idev, handle->ep_intr, (char*)msg, sizeof msg, 0 /* ms timeout */ ); if (rc < 0 && errno == ETIMEDOUT) return 0; } else return 0; if (rc < 0) { DEBUGOUT_1 ("usb_intr_read error: %s\n", strerror (errno)); return CCID_DRIVER_ERR_CARD_IO_ERROR; } msglen = rc; rc = 0; if (msglen < 1) { DEBUGOUT ("intr-in msg too short\n"); return CCID_DRIVER_ERR_INV_VALUE; } if (msg[0] == RDR_to_PC_NotifySlotChange) { DEBUGOUT ("notify slot change:"); for (i=1; i < msglen; i++) for (j=0; j < 4; j++) DEBUGOUT_CONT_3 (" %d:%c%c", (i-1)*4+j, (msg[i] & (1<<(j*2)))? 'p':'-', (msg[i] & (2<<(j*2)))? '*':' '); DEBUGOUT_LF (); } else if (msg[0] == RDR_to_PC_HardwareError) { DEBUGOUT ("hardware error occured\n"); } else { DEBUGOUT_1 ("unknown intr-in msg of type %02X\n", msg[0]); } return 0; } /* Note that this function won't return the error codes NO_CARD or CARD_INACTIVE */ int ccid_slot_status (ccid_driver_t handle, int *statusbits) { int rc; unsigned char msg[100]; size_t msglen; unsigned char seqno; int retries = 0; retry: msg[0] = PC_to_RDR_GetSlotStatus; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 0; /* RFU */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ set_msg_len (msg, 0); rc = bulk_out (handle, msg, 10, 1); if (rc) return rc; /* Note that we set the NO_DEBUG flag here, so that the logs won't get cluttered up by a ticker function checking for the slot status and debugging enabled. */ rc = bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_SlotStatus, seqno, retries? 1000 : 200, 1); if (rc == CCID_DRIVER_ERR_CARD_IO_ERROR && retries < 3) { if (!retries) { DEBUGOUT ("USB: CALLING USB_CLEAR_HALT\n"); usb_clear_halt (handle->idev, handle->ep_bulk_in); usb_clear_halt (handle->idev, handle->ep_bulk_out); } else DEBUGOUT ("USB: RETRYING bulk_in AGAIN\n"); retries++; goto retry; } if (rc && rc != CCID_DRIVER_ERR_NO_CARD && rc != CCID_DRIVER_ERR_CARD_INACTIVE) return rc; *statusbits = (msg[7] & 3); return 0; } /* Return the ATR of the card. This is not a cached value and thus an actual reset is done. */ int ccid_get_atr (ccid_driver_t handle, unsigned char *atr, size_t maxatrlen, size_t *atrlen) { int rc; int statusbits; unsigned char msg[100]; unsigned char *tpdu; size_t msglen, tpdulen; unsigned char seqno; int use_crc = 0; unsigned int edc; int tried_iso = 0; int got_param; /* First check whether a card is available. */ rc = ccid_slot_status (handle, &statusbits); if (rc) return rc; if (statusbits == 2) return CCID_DRIVER_ERR_NO_CARD; /* For an inactive and also for an active card, issue the PowerOn command to get the ATR. */ again: msg[0] = PC_to_RDR_IccPowerOn; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 0; /* power select (0=auto, 1=5V, 2=3V, 3=1.8V) */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ set_msg_len (msg, 0); msglen = 10; rc = bulk_out (handle, msg, msglen, 0); if (rc) return rc; rc = bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_DataBlock, seqno, 5000, 0); if (rc) return rc; if (!tried_iso && CCID_COMMAND_FAILED (msg) && CCID_ERROR_CODE (msg) == 0xbb && ((handle->id_vendor == VENDOR_CHERRY && handle->id_product == 0x0005) || (handle->id_vendor == VENDOR_GEMPC && handle->id_product == 0x4433) )) { tried_iso = 1; /* Try switching to ISO mode. */ if (!send_escape_cmd (handle, (const unsigned char*)"\xF1\x01", 2, NULL, 0, NULL)) goto again; } else if (CCID_COMMAND_FAILED (msg)) return CCID_DRIVER_ERR_CARD_IO_ERROR; handle->powered_off = 0; if (atr) { size_t n = msglen - 10; if (n > maxatrlen) n = maxatrlen; memcpy (atr, msg+10, n); *atrlen = n; } got_param = 0; msg[0] = PC_to_RDR_GetParameters; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 0; /* RFU */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ set_msg_len (msg, 0); msglen = 10; rc = bulk_out (handle, msg, msglen, 0); if (!rc) rc = bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_Parameters, seqno, 2000, 0); if (rc) DEBUGOUT ("GetParameters failed\n"); else if (msglen == 17 && msg[9] == 1) got_param = 1; /* Setup parameters to select T=1. */ msg[0] = PC_to_RDR_SetParameters; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 1; /* Select T=1. */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ if (!got_param) { /* FIXME: Get those values from the ATR. */ msg[10]= 0x01; /* Fi/Di */ msg[11]= 0x10; /* LRC, direct convention. */ msg[12]= 0; /* Extra guardtime. */ msg[13]= 0x41; /* BWI/CWI */ msg[14]= 0; /* No clock stoppping. */ msg[15]= 254; /* IFSC */ msg[16]= 0; /* Does not support non default NAD values. */ } set_msg_len (msg, 7); msglen = 10 + 7; rc = bulk_out (handle, msg, msglen, 0); if (rc) return rc; rc = bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_Parameters, seqno, 5000, 0); if (rc) DEBUGOUT ("SetParameters failed (ignored)\n"); if (!rc && msglen > 15 && msg[15] >= 16 && msg[15] <= 254 ) handle->ifsc = msg[15]; else handle->ifsc = 128; /* Something went wrong, assume 128 bytes. */ handle->t1_ns = 0; handle->t1_nr = 0; /* Send an S-Block with our maximum IFSD to the CCID. */ if (!handle->apdu_level && !handle->auto_ifsd) { tpdu = msg+10; /* NAD: DAD=1, SAD=0 */ tpdu[0] = handle->nonnull_nad? ((1 << 4) | 0): 0; tpdu[1] = (0xc0 | 0 | 1); /* S-block request: change IFSD */ tpdu[2] = 1; tpdu[3] = handle->max_ifsd? handle->max_ifsd : 32; tpdulen = 4; edc = compute_edc (tpdu, tpdulen, use_crc); if (use_crc) tpdu[tpdulen++] = (edc >> 8); tpdu[tpdulen++] = edc; msg[0] = PC_to_RDR_XfrBlock; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 0; msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ set_msg_len (msg, tpdulen); msglen = 10 + tpdulen; if (debug_level > 1) DEBUGOUT_3 ("T=1: put %c-block seq=%d%s\n", ((msg[11] & 0xc0) == 0x80)? 'R' : (msg[11] & 0x80)? 'S' : 'I', ((msg[11] & 0x80)? !!(msg[11]& 0x10) : !!(msg[11] & 0x40)), (!(msg[11] & 0x80) && (msg[11] & 0x20)? " [more]":"")); rc = bulk_out (handle, msg, msglen, 0); if (rc) return rc; rc = bulk_in (handle, msg, sizeof msg, &msglen, RDR_to_PC_DataBlock, seqno, 5000, 0); if (rc) return rc; tpdu = msg + 10; tpdulen = msglen - 10; if (tpdulen < 4) return CCID_DRIVER_ERR_ABORTED; if (debug_level > 1) DEBUGOUT_4 ("T=1: got %c-block seq=%d err=%d%s\n", ((msg[11] & 0xc0) == 0x80)? 'R' : (msg[11] & 0x80)? 'S' : 'I', ((msg[11] & 0x80)? !!(msg[11]& 0x10) : !!(msg[11] & 0x40)), ((msg[11] & 0xc0) == 0x80)? (msg[11] & 0x0f) : 0, (!(msg[11] & 0x80) && (msg[11] & 0x20)? " [more]":"")); if ((tpdu[1] & 0xe0) != 0xe0 || tpdu[2] != 1) { DEBUGOUT ("invalid response for S-block (Change-IFSD)\n"); return -1; } DEBUGOUT_1 ("IFSD has been set to %d\n", tpdu[3]); } return 0; } static unsigned int compute_edc (const unsigned char *data, size_t datalen, int use_crc) { if (use_crc) { return 0x42; /* Not yet implemented. */ } else { unsigned char crc = 0; for (; datalen; datalen--) crc ^= *data++; return crc; } } /* Return true if APDU is an extended length one. */ static int is_exlen_apdu (const unsigned char *apdu, size_t apdulen) { if (apdulen < 7 || apdu[4]) return 0; /* Too short or no Z byte. */ return 1; } /* Helper for ccid_transceive used for APDU level exchanges. */ static int ccid_transceive_apdu_level (ccid_driver_t handle, const unsigned char *apdu_buf, size_t apdu_buflen, unsigned char *resp, size_t maxresplen, size_t *nresp) { int rc; unsigned char send_buffer[10+261+300], recv_buffer[10+261+300]; const unsigned char *apdu; size_t apdulen; unsigned char *msg; size_t msglen; unsigned char seqno; int bwi = 4; msg = send_buffer; apdu = apdu_buf; apdulen = apdu_buflen; assert (apdulen); /* The maximum length for a short APDU T=1 block is 261. For an extended APDU T=1 block the maximum length 65544; however extended APDU exchange level is not yet supported. */ if (apdulen > 261) return CCID_DRIVER_ERR_INV_VALUE; /* Invalid length. */ msg[0] = PC_to_RDR_XfrBlock; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = bwi; /* bBWI */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ memcpy (msg+10, apdu, apdulen); set_msg_len (msg, apdulen); msglen = 10 + apdulen; rc = bulk_out (handle, msg, msglen, 0); if (rc) return rc; msg = recv_buffer; rc = bulk_in (handle, msg, sizeof recv_buffer, &msglen, RDR_to_PC_DataBlock, seqno, 5000, 0); if (rc) return rc; apdu = msg + 10; apdulen = msglen - 10; if (resp) { if (apdulen > maxresplen) { DEBUGOUT_2 ("provided buffer too short for received data " "(%u/%u)\n", (unsigned int)apdulen, (unsigned int)maxresplen); return CCID_DRIVER_ERR_INV_VALUE; } memcpy (resp, apdu, apdulen); *nresp = apdulen; } return 0; } /* Protocol T=1 overview Block Structure: Prologue Field: 1 byte Node Address (NAD) 1 byte Protocol Control Byte (PCB) 1 byte Length (LEN) Information Field: 0-254 byte APDU or Control Information (INF) Epilogue Field: 1 byte Error Detection Code (EDC) NAD: bit 7 unused bit 4..6 Destination Node Address (DAD) bit 3 unused bit 2..0 Source Node Address (SAD) If node adresses are not used, SAD and DAD should be set to 0 on the first block sent to the card. If they are used they should have different values (0 for one is okay); that first block sets up the addresses of the nodes. PCB: Information Block (I-Block): bit 7 0 bit 6 Sequence number (yep, that is modulo 2) bit 5 Chaining flag bit 4..0 reserved Received-Ready Block (R-Block): bit 7 1 bit 6 0 bit 5 0 bit 4 Sequence number bit 3..0 0 = no error 1 = EDC or parity error 2 = other error other values are reserved Supervisory Block (S-Block): bit 7 1 bit 6 1 bit 5 clear=request,set=response bit 4..0 0 = resyncronisation request 1 = information field size request 2 = abort request 3 = extension of BWT request 4 = VPP error other values are reserved */ int ccid_transceive (ccid_driver_t handle, const unsigned char *apdu_buf, size_t apdu_buflen, unsigned char *resp, size_t maxresplen, size_t *nresp) { int rc; /* The size of the buffer used to be 10+259. For the via_escape hack we need one extra byte, thus 11+259. */ unsigned char send_buffer[11+259], recv_buffer[11+259]; const unsigned char *apdu; size_t apdulen; unsigned char *msg, *tpdu, *p; size_t msglen, tpdulen, last_tpdulen, n; unsigned char seqno; unsigned int edc; int use_crc = 0; int hdrlen, pcboff; size_t dummy_nresp; int via_escape = 0; int next_chunk = 1; int sending = 1; int retries = 0; int resyncing = 0; int nad_byte; if (!nresp) nresp = &dummy_nresp; *nresp = 0; /* Smarter readers allow to send APDUs directly; divert here. */ if (handle->apdu_level) { /* We employ a hack for Omnikey readers which are able to send TPDUs using an escape sequence. There is no documentation but the Windows driver does it this way. Tested using a CM6121. This method works also for the Cherry XX44 keyboards; however there are problems with the ccid_tranceive_secure which leads to a loss of sync on the CCID level. If Cherry wants to make their keyboard work again, they should hand over some docs. */ if ((handle->id_vendor == VENDOR_OMNIKEY || (!handle->idev && handle->id_product == TRANSPORT_CM4040)) && handle->apdu_level < 2 && is_exlen_apdu (apdu_buf, apdu_buflen)) via_escape = 1; else return ccid_transceive_apdu_level (handle, apdu_buf, apdu_buflen, resp, maxresplen, nresp); } /* The other readers we support require sending TPDUs. */ tpdulen = 0; /* Avoid compiler warning about no initialization. */ msg = send_buffer; hdrlen = via_escape? 11 : 10; /* NAD: DAD=1, SAD=0 */ nad_byte = handle->nonnull_nad? ((1 << 4) | 0): 0; if (via_escape) nad_byte = 0; last_tpdulen = 0; /* Avoid gcc warning (controlled by RESYNCING). */ for (;;) { if (next_chunk) { next_chunk = 0; apdu = apdu_buf; apdulen = apdu_buflen; assert (apdulen); /* Construct an I-Block. */ tpdu = msg + hdrlen; tpdu[0] = nad_byte; tpdu[1] = ((handle->t1_ns & 1) << 6); /* I-block */ if (apdulen > handle->ifsc ) { apdulen = handle->ifsc; apdu_buf += handle->ifsc; apdu_buflen -= handle->ifsc; tpdu[1] |= (1 << 5); /* Set more bit. */ } tpdu[2] = apdulen; memcpy (tpdu+3, apdu, apdulen); tpdulen = 3 + apdulen; edc = compute_edc (tpdu, tpdulen, use_crc); if (use_crc) tpdu[tpdulen++] = (edc >> 8); tpdu[tpdulen++] = edc; } if (via_escape) { msg[0] = PC_to_RDR_Escape; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 0; /* RFU */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ msg[10] = 0x1a; /* Omnikey command to send a TPDU. */ set_msg_len (msg, 1 + tpdulen); } else { msg[0] = PC_to_RDR_XfrBlock; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 4; /* bBWI */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ set_msg_len (msg, tpdulen); } msglen = hdrlen + tpdulen; if (!resyncing) last_tpdulen = tpdulen; pcboff = hdrlen+1; if (debug_level > 1) DEBUGOUT_3 ("T=1: put %c-block seq=%d%s\n", ((msg[pcboff] & 0xc0) == 0x80)? 'R' : (msg[pcboff] & 0x80)? 'S' : 'I', ((msg[pcboff] & 0x80)? !!(msg[pcboff]& 0x10) : !!(msg[pcboff] & 0x40)), (!(msg[pcboff] & 0x80) && (msg[pcboff] & 0x20)? " [more]":"")); rc = bulk_out (handle, msg, msglen, 0); if (rc) return rc; msg = recv_buffer; rc = bulk_in (handle, msg, sizeof recv_buffer, &msglen, via_escape? RDR_to_PC_Escape : RDR_to_PC_DataBlock, seqno, 5000, 0); if (rc) return rc; tpdu = msg + hdrlen; tpdulen = msglen - hdrlen; resyncing = 0; if (tpdulen < 4) { usb_clear_halt (handle->idev, handle->ep_bulk_in); return CCID_DRIVER_ERR_ABORTED; } if (debug_level > 1) DEBUGOUT_4 ("T=1: got %c-block seq=%d err=%d%s\n", ((msg[pcboff] & 0xc0) == 0x80)? 'R' : (msg[pcboff] & 0x80)? 'S' : 'I', ((msg[pcboff] & 0x80)? !!(msg[pcboff]& 0x10) : !!(msg[pcboff] & 0x40)), ((msg[pcboff] & 0xc0) == 0x80)? (msg[pcboff] & 0x0f) : 0, (!(msg[pcboff] & 0x80) && (msg[pcboff] & 0x20)? " [more]":"")); if (!(tpdu[1] & 0x80)) { /* This is an I-block. */ retries = 0; if (sending) { /* last block sent was successful. */ handle->t1_ns ^= 1; sending = 0; } if (!!(tpdu[1] & 0x40) != handle->t1_nr) { /* Reponse does not match our sequence number. */ msg = send_buffer; tpdu = msg + hdrlen; tpdu[0] = nad_byte; tpdu[1] = (0x80 | (handle->t1_nr & 1) << 4 | 2); /* R-block */ tpdu[2] = 0; tpdulen = 3; edc = compute_edc (tpdu, tpdulen, use_crc); if (use_crc) tpdu[tpdulen++] = (edc >> 8); tpdu[tpdulen++] = edc; continue; } handle->t1_nr ^= 1; p = tpdu + 3; /* Skip the prologue field. */ n = tpdulen - 3 - 1; /* Strip the epilogue field. */ /* fixme: verify the checksum. */ if (resp) { if (n > maxresplen) { DEBUGOUT_2 ("provided buffer too short for received data " "(%u/%u)\n", (unsigned int)n, (unsigned int)maxresplen); return CCID_DRIVER_ERR_INV_VALUE; } memcpy (resp, p, n); resp += n; *nresp += n; maxresplen -= n; } if (!(tpdu[1] & 0x20)) return 0; /* No chaining requested - ready. */ msg = send_buffer; tpdu = msg + hdrlen; tpdu[0] = nad_byte; tpdu[1] = (0x80 | (handle->t1_nr & 1) << 4); /* R-block */ tpdu[2] = 0; tpdulen = 3; edc = compute_edc (tpdu, tpdulen, use_crc); if (use_crc) tpdu[tpdulen++] = (edc >> 8); tpdu[tpdulen++] = edc; } else if ((tpdu[1] & 0xc0) == 0x80) { /* This is a R-block. */ if ( (tpdu[1] & 0x0f)) { retries++; if (via_escape && retries == 1 && (msg[pcboff] & 0x0f)) { /* Error probably due to switching to TPDU. Send a resync request. We use the recv_buffer so that we don't corrupt the send_buffer. */ msg = recv_buffer; tpdu = msg + hdrlen; tpdu[0] = nad_byte; tpdu[1] = 0xc0; /* S-block resync request. */ tpdu[2] = 0; tpdulen = 3; edc = compute_edc (tpdu, tpdulen, use_crc); if (use_crc) tpdu[tpdulen++] = (edc >> 8); tpdu[tpdulen++] = edc; resyncing = 1; DEBUGOUT ("T=1: requesting resync\n"); } else if (retries > 3) { DEBUGOUT ("T=1: 3 failed retries\n"); return CCID_DRIVER_ERR_CARD_IO_ERROR; } else { /* Error: repeat last block */ msg = send_buffer; tpdulen = last_tpdulen; } } else if (sending && !!(tpdu[1] & 0x10) == handle->t1_ns) { /* Response does not match our sequence number. */ DEBUGOUT ("R-block with wrong seqno received on more bit\n"); return CCID_DRIVER_ERR_CARD_IO_ERROR; } else if (sending) { /* Send next chunk. */ retries = 0; msg = send_buffer; next_chunk = 1; handle->t1_ns ^= 1; } else { DEBUGOUT ("unexpected ACK R-block received\n"); return CCID_DRIVER_ERR_CARD_IO_ERROR; } } else { /* This is a S-block. */ retries = 0; DEBUGOUT_2 ("T=1: S-block %s received cmd=%d\n", (tpdu[1] & 0x20)? "response": "request", (tpdu[1] & 0x1f)); if ( !(tpdu[1] & 0x20) && (tpdu[1] & 0x1f) == 1 && tpdu[2] == 1) { /* Information field size request. */ unsigned char ifsc = tpdu[3]; if (ifsc < 16 || ifsc > 254) return CCID_DRIVER_ERR_CARD_IO_ERROR; msg = send_buffer; tpdu = msg + hdrlen; tpdu[0] = nad_byte; tpdu[1] = (0xc0 | 0x20 | 1); /* S-block response */ tpdu[2] = 1; tpdu[3] = ifsc; tpdulen = 4; edc = compute_edc (tpdu, tpdulen, use_crc); if (use_crc) tpdu[tpdulen++] = (edc >> 8); tpdu[tpdulen++] = edc; DEBUGOUT_1 ("T=1: requesting an ifsc=%d\n", ifsc); } else if ( !(tpdu[1] & 0x20) && (tpdu[1] & 0x1f) == 3 && tpdu[2]) { /* Wait time extension request. */ unsigned char bwi = tpdu[3]; msg = send_buffer; tpdu = msg + hdrlen; tpdu[0] = nad_byte; tpdu[1] = (0xc0 | 0x20 | 3); /* S-block response */ tpdu[2] = 1; tpdu[3] = bwi; tpdulen = 4; edc = compute_edc (tpdu, tpdulen, use_crc); if (use_crc) tpdu[tpdulen++] = (edc >> 8); tpdu[tpdulen++] = edc; DEBUGOUT_1 ("T=1: waittime extension of bwi=%d\n", bwi); print_progress (handle); } else if ( (tpdu[1] & 0x20) && (tpdu[1] & 0x1f) == 0 && !tpdu[2]) { DEBUGOUT ("T=1: resync ack from reader\n"); /* Repeat previous block. */ msg = send_buffer; tpdulen = last_tpdulen; } else return CCID_DRIVER_ERR_CARD_IO_ERROR; } } /* end T=1 protocol loop. */ return 0; } /* Send the CCID Secure command to the reader. APDU_BUF should contain the APDU template. PIN_MODE defines how the pin gets formatted: 1 := The PIN is ASCII encoded and of variable length. The length of the PIN entered will be put into Lc by the reader. The APDU should me made up of 4 bytes without Lc. PINLEN_MIN and PINLEN_MAX define the limits for the pin length. 0 may be used t enable reasonable defaults. PIN_PADLEN should be 0. When called with RESP and NRESP set to NULL, the function will merely check whether the reader supports the secure command for the given APDU and PIN_MODE. */ int ccid_transceive_secure (ccid_driver_t handle, const unsigned char *apdu_buf, size_t apdu_buflen, int pin_mode, int pinlen_min, int pinlen_max, int pin_padlen, unsigned char *resp, size_t maxresplen, size_t *nresp) { int rc; unsigned char send_buffer[10+259], recv_buffer[10+259]; unsigned char *msg, *tpdu, *p; size_t msglen, tpdulen, n; unsigned char seqno; size_t dummy_nresp; int testmode; int cherry_mode = 0; testmode = !resp && !nresp; if (!nresp) nresp = &dummy_nresp; *nresp = 0; if (apdu_buflen >= 4 && apdu_buf[1] == 0x20 && (handle->has_pinpad & 1)) ; else if (apdu_buflen >= 4 && apdu_buf[1] == 0x24 && (handle->has_pinpad & 2)) return CCID_DRIVER_ERR_NOT_SUPPORTED; /* Not yet by our code. */ else return CCID_DRIVER_ERR_NO_KEYPAD; if (pin_mode != 1) return CCID_DRIVER_ERR_NOT_SUPPORTED; if (pin_padlen != 0) return CCID_DRIVER_ERR_NOT_SUPPORTED; if (!pinlen_min) pinlen_min = 1; if (!pinlen_max) pinlen_max = 25; /* Note that the 25 is the maximum value the SPR532 allows. */ if (pinlen_min < 1 || pinlen_min > 25 || pinlen_max < 1 || pinlen_max > 25 || pinlen_min > pinlen_max) return CCID_DRIVER_ERR_INV_VALUE; /* We have only tested a few readers so better don't risk anything and do not allow the use with other readers. */ switch (handle->id_vendor) { case VENDOR_SCM: /* Tested with SPR 532. */ case VENDOR_KAAN: /* Tested with KAAN Advanced (1.02). */ break; case VENDOR_CHERRY: /* The CHERRY XX44 keyboard echos an asterisk for each entered character on the keyboard channel. We use a special variant of PC_to_RDR_Secure which directs these characters to the smart card's bulk-in channel. We also need to append a zero Lc byte to the APDU. It seems that it will be replaced with the actual length instead of being appended before the APDU is send to the card. */ cherry_mode = 1; break; default: return CCID_DRIVER_ERR_NOT_SUPPORTED; } if (testmode) return 0; /* Success */ msg = send_buffer; if (handle->id_vendor == VENDOR_SCM) { DEBUGOUT ("sending escape sequence to switch to a case 1 APDU\n"); rc = send_escape_cmd (handle, (const unsigned char*)"\x80\x02\x00", 3, NULL, 0, NULL); if (rc) return rc; } msg[0] = cherry_mode? 0x89 : PC_to_RDR_Secure; msg[5] = 0; /* slot */ msg[6] = seqno = handle->seqno++; msg[7] = 0; /* bBWI */ msg[8] = 0; /* RFU */ msg[9] = 0; /* RFU */ msg[10] = 0; /* Perform PIN verification. */ msg[11] = 0; /* Timeout in seconds. */ msg[12] = 0x82; /* bmFormatString: Byte, pos=0, left, ASCII. */ if (handle->id_vendor == VENDOR_SCM) { /* For the SPR532 the next 2 bytes need to be zero. We do this for all SCM products. Kudos to Martin Paljak for this hint. */ msg[13] = msg[14] = 0; } else { msg[13] = 0x00; /* bmPINBlockString: 0 bits of pin length to insert. 0 bytes of PIN block size. */ msg[14] = 0x00; /* bmPINLengthFormat: Units are bytes, position is 0. */ } /* The following is a little endian word. */ msg[15] = pinlen_max; /* wPINMaxExtraDigit-Maximum. */ msg[16] = pinlen_min; /* wPINMaxExtraDigit-Minimum. */ msg[17] = 0x02; /* bEntryValidationCondition: Validation key pressed */ if (pinlen_min && pinlen_max && pinlen_min == pinlen_max) msg[17] |= 0x01; /* Max size reached. */ msg[18] = 0xff; /* bNumberMessage: Default. */ msg[19] = 0x04; /* wLangId-High. */ msg[20] = 0x09; /* wLangId-Low: English FIXME: use the first entry. */ msg[21] = 0; /* bMsgIndex. */ /* bTeoProlog follows: */ msg[22] = handle->nonnull_nad? ((1 << 4) | 0): 0; msg[23] = ((handle->t1_ns & 1) << 6); /* I-block */ msg[24] = 0; /* The apdulen will be filled in by the reader. */ /* APDU follows: */ msg[25] = apdu_buf[0]; /* CLA */ msg[26] = apdu_buf[1]; /* INS */ msg[27] = apdu_buf[2]; /* P1 */ msg[28] = apdu_buf[3]; /* P2 */ msglen = 29; if (cherry_mode) msg[msglen++] = 0; /* An EDC is not required. */ set_msg_len (msg, msglen - 10); rc = bulk_out (handle, msg, msglen, 0); if (rc) return rc; msg = recv_buffer; rc = bulk_in (handle, msg, sizeof recv_buffer, &msglen, RDR_to_PC_DataBlock, seqno, 30000, 0); if (rc) return rc; tpdu = msg + 10; tpdulen = msglen - 10; if (handle->apdu_level) { if (resp) { if (tpdulen > maxresplen) { DEBUGOUT_2 ("provided buffer too short for received data " "(%u/%u)\n", (unsigned int)tpdulen, (unsigned int)maxresplen); return CCID_DRIVER_ERR_INV_VALUE; } memcpy (resp, tpdu, tpdulen); *nresp = tpdulen; } return 0; } if (tpdulen < 4) { usb_clear_halt (handle->idev, handle->ep_bulk_in); return CCID_DRIVER_ERR_ABORTED; } if (debug_level > 1) DEBUGOUT_4 ("T=1: got %c-block seq=%d err=%d%s\n", ((msg[11] & 0xc0) == 0x80)? 'R' : (msg[11] & 0x80)? 'S' : 'I', ((msg[11] & 0x80)? !!(msg[11]& 0x10) : !!(msg[11] & 0x40)), ((msg[11] & 0xc0) == 0x80)? (msg[11] & 0x0f) : 0, (!(msg[11] & 0x80) && (msg[11] & 0x20)? " [more]":"")); if (!(tpdu[1] & 0x80)) { /* This is an I-block. */ /* Last block sent was successful. */ handle->t1_ns ^= 1; if (!!(tpdu[1] & 0x40) != handle->t1_nr) { /* Reponse does not match our sequence number. */ DEBUGOUT ("I-block with wrong seqno received\n"); return CCID_DRIVER_ERR_CARD_IO_ERROR; } handle->t1_nr ^= 1; p = tpdu + 3; /* Skip the prologue field. */ n = tpdulen - 3 - 1; /* Strip the epilogue field. */ /* fixme: verify the checksum. */ if (resp) { if (n > maxresplen) { DEBUGOUT_2 ("provided buffer too short for received data " "(%u/%u)\n", (unsigned int)n, (unsigned int)maxresplen); return CCID_DRIVER_ERR_INV_VALUE; } memcpy (resp, p, n); resp += n; *nresp += n; maxresplen -= n; } if (!(tpdu[1] & 0x20)) return 0; /* No chaining requested - ready. */ DEBUGOUT ("chaining requested but not supported for Secure operation\n"); return CCID_DRIVER_ERR_CARD_IO_ERROR; } else if ((tpdu[1] & 0xc0) == 0x80) { /* This is a R-block. */ if ( (tpdu[1] & 0x0f)) { /* Error: repeat last block */ DEBUGOUT ("No retries supported for Secure operation\n"); return CCID_DRIVER_ERR_CARD_IO_ERROR; } else if (!!(tpdu[1] & 0x10) == handle->t1_ns) { /* Reponse does not match our sequence number. */ DEBUGOUT ("R-block with wrong seqno received on more bit\n"); return CCID_DRIVER_ERR_CARD_IO_ERROR; } else { /* Send next chunk. */ DEBUGOUT ("chaining not supported on Secure operation\n"); return CCID_DRIVER_ERR_CARD_IO_ERROR; } } else { /* This is a S-block. */ DEBUGOUT_2 ("T=1: S-block %s received cmd=%d for Secure operation\n", (tpdu[1] & 0x20)? "response": "request", (tpdu[1] & 0x1f)); return CCID_DRIVER_ERR_CARD_IO_ERROR; } return 0; } #ifdef TEST static void print_error (int err) { const char *p; char buf[50]; switch (err) { case 0: p = "success"; case CCID_DRIVER_ERR_OUT_OF_CORE: p = "out of core"; break; case CCID_DRIVER_ERR_INV_VALUE: p = "invalid value"; break; case CCID_DRIVER_ERR_NO_DRIVER: p = "no driver"; break; case CCID_DRIVER_ERR_NOT_SUPPORTED: p = "not supported"; break; case CCID_DRIVER_ERR_LOCKING_FAILED: p = "locking failed"; break; case CCID_DRIVER_ERR_BUSY: p = "busy"; break; case CCID_DRIVER_ERR_NO_CARD: p = "no card"; break; case CCID_DRIVER_ERR_CARD_INACTIVE: p = "card inactive"; break; case CCID_DRIVER_ERR_CARD_IO_ERROR: p = "card I/O error"; break; case CCID_DRIVER_ERR_GENERAL_ERROR: p = "general error"; break; case CCID_DRIVER_ERR_NO_READER: p = "no reader"; break; case CCID_DRIVER_ERR_ABORTED: p = "aborted"; break; default: sprintf (buf, "0x%05x", err); p = buf; break; } fprintf (stderr, "operation failed: %s\n", p); } static void print_data (const unsigned char *data, size_t length) { if (length >= 2) { fprintf (stderr, "operation status: %02X%02X\n", data[length-2], data[length-1]); length -= 2; } if (length) { fputs (" returned data:", stderr); for (; length; length--, data++) fprintf (stderr, " %02X", *data); putc ('\n', stderr); } } static void print_result (int rc, const unsigned char *data, size_t length) { if (rc) print_error (rc); else if (data) print_data (data, length); } int main (int argc, char **argv) { int rc; ccid_driver_t ccid; int slotstat; unsigned char result[512]; size_t resultlen; int no_pinpad = 0; int verify_123456 = 0; int did_verify = 0; int no_poll = 0; if (argc) { argc--; argv++; } while (argc) { if ( !strcmp (*argv, "--list")) { char *p; p = ccid_get_reader_list (); if (!p) return 1; fputs (p, stderr); free (p); return 0; } else if ( !strcmp (*argv, "--debug")) { ccid_set_debug_level (ccid_set_debug_level (-1)+1); argc--; argv++; } else if ( !strcmp (*argv, "--no-poll")) { no_poll = 1; argc--; argv++; } else if ( !strcmp (*argv, "--no-pinpad")) { no_pinpad = 1; argc--; argv++; } else if ( !strcmp (*argv, "--verify-123456")) { verify_123456 = 1; argc--; argv++; } else break; } rc = ccid_open_reader (&ccid, argc? *argv:NULL); if (rc) return 1; if (!no_poll) ccid_poll (ccid); fputs ("getting ATR ...\n", stderr); rc = ccid_get_atr (ccid, NULL, 0, NULL); if (rc) { print_error (rc); return 1; } if (!no_poll) ccid_poll (ccid); fputs ("getting slot status ...\n", stderr); rc = ccid_slot_status (ccid, &slotstat); if (rc) { print_error (rc); return 1; } if (!no_poll) ccid_poll (ccid); fputs ("selecting application OpenPGP ....\n", stderr); { static unsigned char apdu[] = { 0, 0xA4, 4, 0, 6, 0xD2, 0x76, 0x00, 0x01, 0x24, 0x01}; rc = ccid_transceive (ccid, apdu, sizeof apdu, result, sizeof result, &resultlen); print_result (rc, result, resultlen); } if (!no_poll) ccid_poll (ccid); fputs ("getting OpenPGP DO 0x65 ....\n", stderr); { static unsigned char apdu[] = { 0, 0xCA, 0, 0x65, 254 }; rc = ccid_transceive (ccid, apdu, sizeof apdu, result, sizeof result, &resultlen); print_result (rc, result, resultlen); } if (!no_pinpad) { } if (!no_pinpad) { static unsigned char apdu[] = { 0, 0x20, 0, 0x81 }; if (ccid_transceive_secure (ccid, apdu, sizeof apdu, 1, 0, 0, 0, NULL, 0, NULL)) fputs ("can't verify using a PIN-Pad reader\n", stderr); else { fputs ("verifying CHV1 using the PINPad ....\n", stderr); rc = ccid_transceive_secure (ccid, apdu, sizeof apdu, 1, 0, 0, 0, result, sizeof result, &resultlen); print_result (rc, result, resultlen); did_verify = 1; } } if (verify_123456 && !did_verify) { fputs ("verifying that CHV1 is 123456....\n", stderr); { static unsigned char apdu[] = {0, 0x20, 0, 0x81, 6, '1','2','3','4','5','6'}; rc = ccid_transceive (ccid, apdu, sizeof apdu, result, sizeof result, &resultlen); print_result (rc, result, resultlen); } } if (!rc) { fputs ("getting OpenPGP DO 0x5E ....\n", stderr); { static unsigned char apdu[] = { 0, 0xCA, 0, 0x5E, 254 }; rc = ccid_transceive (ccid, apdu, sizeof apdu, result, sizeof result, &resultlen); print_result (rc, result, resultlen); } } ccid_close_reader (ccid); return 0; } /* * Local Variables: * compile-command: "gcc -DTEST -Wall -I/usr/local/include -lusb -g ccid-driver.c" * End: */ #endif /*TEST*/ #endif /*HAVE_LIBUSB*/ gnupg-1.4.20/g10/delkey.c0000644000175000017500000001330512635262326011660 00000000000000/* delkey.c - delete keys * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, * 2005 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 3 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, see . */ #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" /**************** * Delete a public or secret key from a keyring. * r_sec_avail will be set if a secret key is available and the public * key can't be deleted for that reason. */ static int do_delete_key( const char *username, int secret, int force, int *r_sec_avail ) { int rc = 0; KBNODE keyblock = NULL; KBNODE node; KEYDB_HANDLE hd = keydb_new (secret); PKT_public_key *pk = NULL; PKT_secret_key *sk = NULL; u32 keyid[2]; int okay=0; int yes; KEYDB_SEARCH_DESC desc; int exactmatch; *r_sec_avail = 0; /* search the userid */ classify_user_id (username, &desc); exactmatch = (desc.mode == KEYDB_SEARCH_MODE_FPR || desc.mode == KEYDB_SEARCH_MODE_FPR16 || desc.mode == KEYDB_SEARCH_MODE_FPR20); rc = desc.mode? keydb_search (hd, &desc, 1):G10ERR_INV_USER_ID; if (rc) { log_error (_("key \"%s\" not found: %s\n"), username, g10_errstr (rc)); write_status_text( STATUS_DELETE_PROBLEM, "1" ); goto leave; } /* read the keyblock */ rc = keydb_get_keyblock (hd, &keyblock ); if (rc) { log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); goto leave; } /* get the keyid from the keyblock */ node = find_kbnode( keyblock, secret? PKT_SECRET_KEY:PKT_PUBLIC_KEY ); if( !node ) { log_error("Oops; key not found anymore!\n"); rc = G10ERR_GENERAL; goto leave; } if( secret ) { sk = node->pkt->pkt.secret_key; keyid_from_sk( sk, keyid ); } else { /* public */ pk = node->pkt->pkt.public_key; keyid_from_pk( pk, keyid ); if(!force) { rc = seckey_available( keyid ); if( !rc ) { *r_sec_avail = 1; rc = -1; goto leave; } else if( rc != G10ERR_NO_SECKEY ) log_error("%s: get secret key: %s\n", username, g10_errstr(rc) ); else rc = 0; } } if( rc ) rc = 0; else if (opt.batch && exactmatch) okay++; else if( opt.batch && secret ) { log_error(_("can't do this in batch mode\n")); log_info (_("(unless you specify the key by fingerprint)\n")); } else if( opt.batch && opt.answer_yes ) okay++; else if( opt.batch ) { log_error(_("can't do this in batch mode without \"--yes\"\n")); log_info (_("(unless you specify the key by fingerprint)\n")); } else { if( secret ) print_seckey_info( sk ); else print_pubkey_info(NULL, pk ); tty_printf( "\n" ); yes = cpr_get_answer_is_yes( secret? "delete_key.secret.okay" : "delete_key.okay", _("Delete this key from the keyring? (y/N) ")); if( !cpr_enabled() && secret && yes ) { /* I think it is not required to check a passphrase; if * the user is so stupid as to let others access his secret keyring * (and has no backup) - it is up him to read some very * basic texts about security. */ yes = cpr_get_answer_is_yes("delete_key.secret.okay", _("This is a secret key! - really delete? (y/N) ")); } if( yes ) okay++; } if( okay ) { rc = keydb_delete_keyblock (hd); if (rc) { log_error (_("deleting keyblock failed: %s\n"), g10_errstr(rc) ); goto leave; } /* Note that the ownertrust being cleared will trigger a revalidation_mark(). This makes sense - only deleting keys that have ownertrust set should trigger this. */ if (!secret && pk && clear_ownertrusts (pk)) { if (opt.verbose) log_info (_("ownertrust information cleared\n")); } } leave: keydb_release (hd); release_kbnode (keyblock); return rc; } /**************** * Delete a public or secret key from a keyring. */ int delete_keys( STRLIST names, int secret, int allow_both ) { int rc, avail, force=(!allow_both && !secret && opt.expert); /* Force allows us to delete a public key even if a secret key exists. */ for(;names;names=names->next) { rc = do_delete_key (names->d, secret, force, &avail ); if ( rc && avail ) { if ( allow_both ) { rc = do_delete_key (names->d, 1, 0, &avail ); if ( !rc ) rc = do_delete_key (names->d, 0, 0, &avail ); } else { log_error(_( "there is a secret key for public key \"%s\"!\n"),names->d); log_info(_( "use option \"--delete-secret-keys\" to delete it first.\n")); write_status_text( STATUS_DELETE_PROBLEM, "2" ); return rc; } } if(rc) { log_error("%s: delete key failed: %s\n", names->d, g10_errstr(rc) ); return rc; } } return 0; } gnupg-1.4.20/g10/sig-check.c0000644000175000017500000005105212635263103012233 00000000000000/* sig-check.c - Check a signature * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007 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 3 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, see . */ #include #include #include #include #include #include "util.h" #include "packet.h" #include "memory.h" #include "mpi.h" #include "keydb.h" #include "cipher.h" #include "main.h" #include "status.h" #include "i18n.h" #include "options.h" struct cmp_help_context_s { PKT_signature *sig; MD_HANDLE md; }; static int do_check( PKT_public_key *pk, PKT_signature *sig, MD_HANDLE digest, int *r_expired, int *r_revoked, PKT_public_key *ret_pk); /**************** * Check the signature which is contained in SIG. * The MD_HANDLE should be currently open, so that this function * is able to append some data, before finalizing the digest. */ int signature_check( PKT_signature *sig, MD_HANDLE digest ) { return signature_check2( sig, digest, NULL, NULL, NULL, NULL ); } int signature_check2( PKT_signature *sig, MD_HANDLE digest, u32 *r_expiredate, int *r_expired, int *r_revoked, PKT_public_key *ret_pk ) { PKT_public_key *pk = xmalloc_clear( sizeof *pk ); int rc=0; if( (rc=check_digest_algo(sig->digest_algo)) ) ; /* we don't have this digest */ else if((rc=check_pubkey_algo(sig->pubkey_algo))) ; /* we don't have this pubkey algo */ else if(!md_algo_present(digest,sig->digest_algo)) { /* Sanity check that the md has a context for the hash that the sig is expecting. This can happen if a onepass sig header does not match the actual sig, and also if the clearsign "Hash:" header is missing or does not match the actual sig. */ log_info(_("WARNING: signature digest conflict in message\n")); rc=G10ERR_GENERAL; } else if( get_pubkey( pk, sig->keyid ) ) rc = G10ERR_NO_PUBKEY; else if(!pk->is_valid && !pk->is_primary) rc=G10ERR_BAD_PUBKEY; /* you cannot have a good sig from an invalid subkey */ else { if(r_expiredate) *r_expiredate = pk->expiredate; rc = do_check( pk, sig, digest, r_expired, r_revoked, ret_pk ); /* Check the backsig. This is a 0x19 signature from the subkey on the primary key. The idea here is that it should not be possible for someone to "steal" subkeys and claim them as their own. The attacker couldn't actually use the subkey, but they could try and claim ownership of any signaures issued by it. */ if(rc==0 && !pk->is_primary && pk->backsig<2) { if(pk->backsig==0) { log_info(_("WARNING: signing subkey %s is not" " cross-certified\n"),keystr_from_pk(pk)); log_info(_("please see %s for more information\n"), "https://gnupg.org/faq/subkey-cross-certify.html"); /* --require-cross-certification makes this warning an error. TODO: change the default to require this after more keys have backsigs. */ if(opt.flags.require_cross_cert) rc=G10ERR_GENERAL; } else if(pk->backsig==1) { log_info(_("WARNING: signing subkey %s has an invalid" " cross-certification\n"),keystr_from_pk(pk)); rc=G10ERR_GENERAL; } } } free_public_key( pk ); if( !rc && sig->sig_class < 2 && is_status_enabled() ) { /* This signature id works best with DLP algorithms because * they use a random parameter for every signature. Instead of * this sig-id we could have also used the hash of the document * and the timestamp, but the drawback of this is, that it is * not possible to sign more than one identical document within * one second. Some remote batch processing applications might * like this feature here. * * Note that before 1.4.10, we used RIPE-MD160 for the hash * and accidently didn't include the timestamp and algorithm * information in the hash. Given that this feature is not * commonly used and that a replay attacks detection should * not solely be based on this feature (because it does not * work with RSA), we take the freedom and switch to SHA-1 * with 1.4.10 to take advantage of hardware supported SHA-1 * implementations and to match the 2.0.10 behaviour. We also * include the missing information in the hash. Note also the * SIG_ID as computed by gpg 1.x and gpg 2.x didn't matched * either because 2.x used to print MPIs not in PGP format. */ MD_HANDLE md; u32 a = sig->timestamp; int i, nsig = pubkey_get_nsig( sig->pubkey_algo ); byte *p, *buffer; md = md_open (DIGEST_ALGO_SHA1, 0); md_putc (md, sig->pubkey_algo); md_putc (md, sig->digest_algo); md_putc (md, (a >> 24) & 0xff); md_putc (md, (a >> 16) & 0xff); md_putc (md, (a >> 8) & 0xff); md_putc (md, a & 0xff); for(i=0; i < nsig; i++ ) { unsigned n = mpi_get_nbits( sig->data[i]); md_putc( md, n>>8); md_putc( md, n ); p = mpi_get_buffer( sig->data[i], &n, NULL ); md_write( md, p, n ); xfree(p); } md_final( md ); p = make_radix64_string( md_read( md, 0 ), 20 ); buffer = xmalloc( strlen(p) + 60 ); sprintf( buffer, "%s %s %lu", p, strtimestamp( sig->timestamp ), (ulong)sig->timestamp ); write_status_text( STATUS_SIG_ID, buffer ); xfree(buffer); xfree(p); md_close(md); } return rc; } static int do_check_messages( PKT_public_key *pk, PKT_signature *sig, int *r_expired, int *r_revoked ) { u32 cur_time; if(r_expired) *r_expired = 0; if(r_revoked) *r_revoked = 0; if( pk->timestamp > sig->timestamp ) { ulong d = pk->timestamp - sig->timestamp; log_info(d==1 ?_("public key %s is %lu second newer than the signature\n") :_("public key %s is %lu seconds newer than the signature\n"), keystr_from_pk(pk),d ); if( !opt.ignore_time_conflict ) return G10ERR_TIME_CONFLICT; /* pubkey newer than signature */ } cur_time = make_timestamp(); if( pk->timestamp > cur_time ) { ulong d = pk->timestamp - cur_time; log_info( d==1 ? _("key %s was created %lu second" " in the future (time warp or clock problem)\n") : _("key %s was created %lu seconds" " in the future (time warp or clock problem)\n"), keystr_from_pk(pk),d ); if( !opt.ignore_time_conflict ) return G10ERR_TIME_CONFLICT; } /* Check whether the key has expired. We check the has_expired flag which is set after a full evaluation of the key (getkey.c) as well as a simple compare to the current time in case the merge has for whatever reasons not been done. */ if (pk->has_expired || (pk->expiredate && pk->expiredate < cur_time)) { char buf[11]; if (opt.verbose) log_info(_("NOTE: signature key %s expired %s\n"), keystr_from_pk(pk), asctimestamp( pk->expiredate ) ); /* SIGEXPIRED is deprecated. Use KEYEXPIRED. */ sprintf(buf,"%lu",(ulong)pk->expiredate); write_status_text(STATUS_KEYEXPIRED,buf); write_status(STATUS_SIGEXPIRED); if(r_expired) *r_expired = 1; } if(pk->is_revoked && r_revoked) *r_revoked=1; return 0; } static int do_check( PKT_public_key *pk, PKT_signature *sig, MD_HANDLE digest, int *r_expired, int *r_revoked, PKT_public_key *ret_pk ) { MPI result = NULL; int rc=0; struct weakhash *weak; if( (rc=do_check_messages(pk,sig,r_expired,r_revoked)) ) return rc; if (!opt.flags.allow_weak_digest_algos) for (weak = opt.weak_digests; weak; weak = weak->next) if (sig->digest_algo == weak->algo) { if (!weak->rejection_shown) { log_info (_("Note: signatures using the %s algorithm are rejected\n"), digest_algo_to_string(sig->digest_algo)); weak->rejection_shown = 1; } return G10ERR_DIGEST_ALGO; } /* make sure the digest algo is enabled (in case of a detached signature)*/ md_enable( digest, sig->digest_algo ); /* complete the digest */ if( sig->version >= 4 ) md_putc( digest, sig->version ); md_putc( digest, sig->sig_class ); if( sig->version < 4 ) { u32 a = sig->timestamp; md_putc( digest, (a >> 24) & 0xff ); md_putc( digest, (a >> 16) & 0xff ); md_putc( digest, (a >> 8) & 0xff ); md_putc( digest, a & 0xff ); } else { byte buf[6]; size_t n; md_putc( digest, sig->pubkey_algo ); md_putc( digest, sig->digest_algo ); if( sig->hashed ) { n = sig->hashed->len; md_putc (digest, (n >> 8) ); md_putc (digest, n ); md_write (digest, sig->hashed->data, n); n += 6; } else { /* Two octets for the (empty) length of the hashed section. */ md_putc (digest, 0); md_putc (digest, 0); n = 6; } /* add some magic */ buf[0] = sig->version; buf[1] = 0xff; buf[2] = n >> 24; buf[3] = n >> 16; buf[4] = n >> 8; buf[5] = n; md_write( digest, buf, 6 ); } md_final( digest ); result = encode_md_value( pk, NULL, digest, sig->digest_algo ); if (!result) return G10ERR_GENERAL; rc = pubkey_verify( pk->pubkey_algo, result, sig->data, pk->pkey ); mpi_free( result ); if(rc==G10ERR_BAD_SIGN && is_RSA(pk->pubkey_algo) && sig->digest_algo==DIGEST_ALGO_SHA224) { /* This code is to work around a SHA-224 problem. RFC-4880 and the drafts leading up to it were published with the wrong DER prefix for SHA-224. Unfortunately, GPG pre-1.4.8 used this wrong prefix. What this code does is take all bad RSA signatures that use SHA-224, and re-checks them using the old, incorrect, DER prefix. Someday we should remove this code, and when we do remove it, pkcs1_encode_md can be made into a static function again. Note that GPG2 does not have this issue as it uses libgcrypt, which is being fixed while it is still a development version. */ /* The incorrect SHA-224 DER prefix used in pre-1.4.8 */ static byte asn[]={0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, 0x05, 0x00, 0x04, 0x20}; result=pkcs1_encode_md(digest,DIGEST_ALGO_SHA224,28, mpi_get_nbits(pk->pkey[0]),asn,DIM(asn)); rc=pubkey_verify(pk->pubkey_algo,result,sig->data,pk->pkey); mpi_free(result); } /* Print the MD5 warning if not yet done. Thus at most we get one warning during signature checking. Note that while validating a key we might have already checked MD5 key signatures. */ if (sig->digest_algo == DIGEST_ALGO_MD5) md5_digest_warn (0); if( !rc && sig->flags.unknown_critical ) { log_info(_("assuming bad signature from key %s" " due to an unknown critical bit\n"),keystr_from_pk(pk)); rc = G10ERR_BAD_SIGN; } if(!rc && ret_pk) copy_public_key(ret_pk,pk); return rc; } static void hash_uid_node( KBNODE unode, MD_HANDLE md, PKT_signature *sig ) { PKT_user_id *uid = unode->pkt->pkt.user_id; assert( unode->pkt->pkttype == PKT_USER_ID ); if( uid->attrib_data ) { if( sig->version >=4 ) { byte buf[5]; buf[0] = 0xd1; /* packet of type 17 */ buf[1] = uid->attrib_len >> 24; /* always use 4 length bytes */ buf[2] = uid->attrib_len >> 16; buf[3] = uid->attrib_len >> 8; buf[4] = uid->attrib_len; md_write( md, buf, 5 ); } md_write( md, uid->attrib_data, uid->attrib_len ); } else { if( sig->version >=4 ) { byte buf[5]; buf[0] = 0xb4; /* indicates a userid packet */ buf[1] = uid->len >> 24; /* always use 4 length bytes */ buf[2] = uid->len >> 16; buf[3] = uid->len >> 8; buf[4] = uid->len; md_write( md, buf, 5 ); } md_write( md, uid->name, uid->len ); } } static void cache_sig_result ( PKT_signature *sig, int result ) { if ( !result ) { sig->flags.checked = 1; sig->flags.valid = 1; } else if ( result == G10ERR_BAD_SIGN ) { sig->flags.checked = 1; sig->flags.valid = 0; } else { sig->flags.checked = 0; sig->flags.valid = 0; } } /* Check the revocation keys to see if any of them have revoked our pk. sig is the revocation sig. pk is the key it is on. This code will need to be modified if gpg ever becomes multi-threaded. Note that this guarantees that a designated revocation sig will never be considered valid unless it is actually valid, as well as being issued by a revocation key in a valid direct signature. Note also that this is written so that a revoked revoker can still issue revocations: i.e. If A revokes B, but A is revoked, B is still revoked. I'm not completely convinced this is the proper behavior, but it matches how PGP does it. -dms */ /* Returns 0 if sig is valid (i.e. pk is revoked), non-0 if not revoked. It is important that G10ERR_NO_PUBKEY is only returned when a revocation signature is from a valid revocation key designated in a revkey subpacket, but the revocation key itself isn't present. */ int check_revocation_keys(PKT_public_key *pk,PKT_signature *sig) { static int busy=0; int i,rc=G10ERR_GENERAL; assert(IS_KEY_REV(sig)); assert((sig->keyid[0]!=pk->keyid[0]) || (sig->keyid[0]!=pk->keyid[1])); if(busy) { /* return an error (i.e. not revoked), but mark the pk as uncacheable as we don't really know its revocation status until it is checked directly. */ pk->dont_cache=1; return rc; } busy=1; /* printf("looking at %08lX with a sig from %08lX\n",(ulong)pk->keyid[1], (ulong)sig->keyid[1]); */ /* is the issuer of the sig one of our revokers? */ if( !pk->revkey && pk->numrevkeys ) BUG(); else for(i=0;inumrevkeys;i++) { u32 keyid[2]; keyid_from_fingerprint(pk->revkey[i].fpr,MAX_FINGERPRINT_LEN,keyid); if(keyid[0]==sig->keyid[0] && keyid[1]==sig->keyid[1]) { MD_HANDLE md; md=md_open(sig->digest_algo,0); hash_public_key(md,pk); rc=signature_check(sig,md); cache_sig_result(sig,rc); md_close (md); break; } } busy=0; return rc; } /* Backsigs (0x19) have the same format as binding sigs (0x18), but this function is simpler than check_key_signature in a few ways. For example, there is no support for expiring backsigs since it is questionable what such a thing actually means. Note also that the sig cache check here, unlike other sig caches in GnuPG, is not persistent. */ int check_backsig(PKT_public_key *main_pk,PKT_public_key *sub_pk, PKT_signature *backsig) { MD_HANDLE md; int rc; if(!opt.no_sig_cache && backsig->flags.checked) { if((rc=check_digest_algo(backsig->digest_algo))) return rc; return backsig->flags.valid? 0 : G10ERR_BAD_SIGN; } md=md_open(backsig->digest_algo,0); hash_public_key(md,main_pk); hash_public_key(md,sub_pk); rc=do_check(sub_pk,backsig,md,NULL,NULL,NULL); cache_sig_result(backsig,rc); md_close(md); return rc; } /**************** * check the signature pointed to by NODE. This is a key signature. * If the function detects a self-signature, it uses the PK from * ROOT and does not read any public key. */ int check_key_signature( KBNODE root, KBNODE node, int *is_selfsig ) { return check_key_signature2(root, node, NULL, NULL, is_selfsig, NULL, NULL ); } /* If check_pk is set, then use it to check the signature in node rather than getting it from root or the keydb. If ret_pk is set, fill in the public key that was used to verify the signature. ret_pk is only meaningful when the verification was successful. */ /* TODO: add r_revoked here as well. It has the same problems as r_expiredate and r_expired and the cache. */ int check_key_signature2( KBNODE root, KBNODE node, PKT_public_key *check_pk, PKT_public_key *ret_pk, int *is_selfsig, u32 *r_expiredate, int *r_expired ) { MD_HANDLE md; PKT_public_key *pk; PKT_signature *sig; int algo; int rc; if( is_selfsig ) *is_selfsig = 0; if( r_expiredate ) *r_expiredate = 0; if( r_expired ) *r_expired = 0; assert( node->pkt->pkttype == PKT_SIGNATURE ); assert( root->pkt->pkttype == PKT_PUBLIC_KEY ); pk = root->pkt->pkt.public_key; sig = node->pkt->pkt.signature; algo = sig->digest_algo; /* Check whether we have cached the result of a previous signature check. Note that we may no longer have the pubkey or hash needed to verify a sig, but can still use the cached value. A cache refresh detects and clears these cases. */ if ( !opt.no_sig_cache ) { if (sig->flags.checked) { /*cached status available*/ if( is_selfsig ) { u32 keyid[2]; keyid_from_pk( pk, keyid ); if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) *is_selfsig = 1; } /* BUG: This is wrong for non-self-sigs.. needs to be the actual pk */ if((rc=do_check_messages(pk,sig,r_expired,NULL))) return rc; return sig->flags.valid? 0 : G10ERR_BAD_SIGN; } } if( (rc=check_pubkey_algo(sig->pubkey_algo)) ) return rc; if( (rc=check_digest_algo(algo)) ) return rc; if( sig->sig_class == 0x20 ) { /* key revocation */ u32 keyid[2]; keyid_from_pk( pk, keyid ); /* is it a designated revoker? */ if(keyid[0]!=sig->keyid[0] || keyid[1]!=sig->keyid[1]) rc=check_revocation_keys(pk,sig); else { md = md_open( algo, 0 ); hash_public_key( md, pk ); rc = do_check( pk, sig, md, r_expired, NULL, ret_pk ); cache_sig_result ( sig, rc ); md_close(md); } } else if( sig->sig_class == 0x28 ) { /* subkey revocation */ KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY ); if( snode ) { md = md_open( algo, 0 ); hash_public_key( md, pk ); hash_public_key( md, snode->pkt->pkt.public_key ); rc = do_check( pk, sig, md, r_expired, NULL, ret_pk ); cache_sig_result ( sig, rc ); md_close(md); } else { if (opt.verbose) log_info (_("key %s: no subkey for subkey" " revocation signature\n"),keystr_from_pk(pk)); rc = G10ERR_SIG_CLASS; } } else if( sig->sig_class == 0x18 ) { /* key binding */ KBNODE snode = find_prev_kbnode( root, node, PKT_PUBLIC_SUBKEY ); if( snode ) { if( is_selfsig ) { /* does this make sense????? */ u32 keyid[2]; /* it should always be a selfsig */ keyid_from_pk( pk, keyid ); if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) *is_selfsig = 1; } md = md_open( algo, 0 ); hash_public_key( md, pk ); hash_public_key( md, snode->pkt->pkt.public_key ); rc = do_check( pk, sig, md, r_expired, NULL, ret_pk ); cache_sig_result ( sig, rc ); md_close(md); } else { if (opt.verbose) log_info(_("key %s: no subkey for subkey" " binding signature\n"),keystr_from_pk(pk)); rc = G10ERR_SIG_CLASS; } } else if( sig->sig_class == 0x1f ) { /* direct key signature */ md = md_open( algo, 0 ); hash_public_key( md, pk ); rc = do_check( pk, sig, md, r_expired, NULL, ret_pk ); cache_sig_result ( sig, rc ); md_close(md); } else { /* all other classes */ KBNODE unode = find_prev_kbnode( root, node, PKT_USER_ID ); if( unode ) { u32 keyid[2]; keyid_from_pk( pk, keyid ); md = md_open( algo, 0 ); hash_public_key( md, pk ); hash_uid_node( unode, md, sig ); if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) { if( is_selfsig ) *is_selfsig = 1; rc = do_check( pk, sig, md, r_expired, NULL, ret_pk ); } else if (check_pk) rc=do_check(check_pk,sig,md,r_expired,NULL,ret_pk); else rc=signature_check2(sig,md,r_expiredate,r_expired,NULL,ret_pk); cache_sig_result ( sig, rc ); md_close(md); } else { if (!opt.quiet) log_info ("key %s: no user ID for key signature packet" " of class %02x\n",keystr_from_pk(pk),sig->sig_class); rc = G10ERR_SIG_CLASS; } } return rc; } gnupg-1.4.20/g10/global.h0000644000175000017500000000174712635262326011657 00000000000000/* global.h - Local typedefs and constants * Copyright (C) 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef GPG_GLOBAL_H #define GPG_GLOBAL_H #define MAX_FINGERPRINT_LEN 20 typedef struct kbnode_struct *KBNODE; typedef struct kbnode_struct *kbnode_t; typedef struct keydb_search_desc KEYDB_SEARCH_DESC; #endif /*GPG_GLOBAL_H*/ gnupg-1.4.20/g10/filter.h0000644000175000017500000001303312635262326011673 00000000000000/* filter.h * Copyright (C) 1998, 1999, 2000, 2001, 2003, * 2005 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 3 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, see . */ #ifndef G10_FILTER_H #define G10_FILTER_H #include "types.h" #include "cipher.h" typedef struct { MD_HANDLE md; /* catch all */ MD_HANDLE md2; /* if we want to calculate an alternate hash */ size_t maxbuf_size; } md_filter_context_t; typedef struct { int refcount; /* Reference counter. If 0 this structure is not allocated on the heap. */ /* these fields may be initialized */ int what; /* what kind of armor headers to write */ int only_keyblocks; /* skip all headers but ".... key block" */ const char *hdrlines; /* write these headerlines */ /* these fileds must be initialized to zero */ int no_openpgp_data; /* output flag: "No valid OpenPGP data found" */ int key_failed_code; /* Error code from the first gpgkkeys_* "KEY FAILED " line. */ /* the following fields must be initialized to zero */ int inp_checked; /* set if the input has been checked */ int inp_bypass; /* set if the input is not armored */ int in_cleartext; /* clear text message */ int not_dash_escaped; /* clear text is not dash escaped */ int hashes; /* detected hash algorithms */ int faked; /* we are faking a literal data packet */ int truncated; /* number of truncated lines */ int qp_detected; int pgp2mode; byte eol[3]; /* The end of line characters as a zero-terminated string. Defaults (eol[0]=='\0') to whatever the local platform uses. */ byte *buffer; /* malloced buffer */ unsigned buffer_size; /* and size of this buffer */ unsigned buffer_len; /* used length of the buffer */ unsigned buffer_pos; /* read position */ byte radbuf[4]; int idx, idx2; u32 crc; int status; /* an internal state flag */ int cancel; int any_data; /* any valid armored data seen */ int pending_lf; /* used together with faked */ } armor_filter_context_t; struct unarmor_pump_s; typedef struct unarmor_pump_s *UnarmorPump; struct compress_filter_context_s { int status; void *opaque; /* (used for z_stream) */ byte *inbuf; unsigned inbufsize; byte *outbuf; unsigned outbufsize; int algo; /* compress algo */ int algo1hack; int new_ctb; void (*release)(struct compress_filter_context_s*); }; typedef struct compress_filter_context_s compress_filter_context_t; typedef struct { DEK *dek; u32 datalen; CIPHER_HANDLE cipher_hd; int header; MD_HANDLE mdc_hash; byte enchash[20]; int create_mdc; /* flag will be set by the cipher filter */ } cipher_filter_context_t; typedef struct { byte *buffer; /* malloced buffer */ unsigned buffer_size; /* and size of this buffer */ unsigned buffer_len; /* used length of the buffer */ unsigned buffer_pos; /* read position */ int truncated; /* number of truncated lines */ int not_dash_escaped; int escape_from; MD_HANDLE md; int pending_lf; int pending_esc; } text_filter_context_t; typedef struct { char *what; /* description */ u32 last_time; /* last time reported */ unsigned long last; /* last amount reported */ unsigned long offset; /* current amount */ unsigned long total; /* total amount */ } progress_filter_context_t; /* encrypt_filter_context_t defined in main.h */ /*-- mdfilter.c --*/ int md_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); void free_md_filter_context( md_filter_context_t *mfx ); /*-- armor.c --*/ armor_filter_context_t *new_armor_context (void); void release_armor_context (armor_filter_context_t *afx); int push_armor_filter (armor_filter_context_t *afx, IOBUF iobuf); int use_armor_filter( IOBUF a ); int armor_filter( void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len); UnarmorPump unarmor_pump_new (void); void unarmor_pump_release (UnarmorPump x); int unarmor_pump (UnarmorPump x, int c); /*-- compress.c --*/ void push_compress_filter(IOBUF out,compress_filter_context_t *zfx,int algo); void push_compress_filter2(IOBUF out,compress_filter_context_t *zfx, int algo,int rel); /*-- cipher.c --*/ int cipher_filter( void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len); /*-- textfilter.c --*/ int text_filter( void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len); int copy_clearsig_text( IOBUF out, IOBUF inp, MD_HANDLE md, int escape_dash, int escape_from, int pgp2mode ); /*-- progress.c --*/ int progress_filter (void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); void handle_progress (progress_filter_context_t *pfx, IOBUF inp, const char *name); #endif /*G10_FILTER_H*/ gnupg-1.4.20/g10/encr-data.c0000644000175000017500000002213312635262326012240 00000000000000/* encr-data.c - process an encrypted data packet * Copyright (C) 1998, 1999, 2000, 2001, 2005, * 2006 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 3 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, see . */ #include #include #include #include #include #include "util.h" #include "memory.h" #include "packet.h" #include "mpi.h" #include "cipher.h" #include "options.h" #include "i18n.h" #include "status.h" static int mdc_decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); static int decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); typedef struct { CIPHER_HANDLE cipher_hd; MD_HANDLE mdc_hash; char defer[22]; int defer_filled; int eof_seen; int refcount; } *decode_filter_ctx_t; /* Helper to release the decode context. */ static void release_dfx_context (decode_filter_ctx_t dfx) { if (!dfx) return; assert (dfx->refcount); if ( !--dfx->refcount ) { cipher_close (dfx->cipher_hd); dfx->cipher_hd = NULL; md_close (dfx->mdc_hash); dfx->mdc_hash = NULL; xfree (dfx); } } /**************** * Decrypt the data, specified by ED with the key DEK. */ int decrypt_data( void *procctx, PKT_encrypted *ed, DEK *dek ) { decode_filter_ctx_t dfx; byte *p; int rc=0, c, i; byte temp[32]; unsigned blocksize; unsigned nprefix; dfx = xcalloc (1, sizeof *dfx); dfx->refcount = 1; if( opt.verbose && !dek->algo_info_printed ) { const char *s = cipher_algo_to_string( dek->algo ); if( s ) log_info(_("%s encrypted data\n"), s ); else log_info(_("encrypted with unknown algorithm %d\n"), dek->algo ); dek->algo_info_printed = 1; } { char buf[20]; snprintf (buf, sizeof buf, "%d %d", ed->mdc_method, dek->algo); write_status_text (STATUS_DECRYPTION_INFO, buf); } if (opt.show_session_key) { char *buf = xmalloc (dek->keylen*2 + 20); sprintf (buf, "%d:", dek->algo); for (i=0; i < dek->keylen; i++ ) sprintf(buf+strlen(buf), "%02X", dek->key[i] ); log_info ("session key: `%s'\n", buf); write_status_text (STATUS_SESSION_KEY, buf); } if( (rc=check_cipher_algo(dek->algo)) ) goto leave; blocksize = cipher_get_blocksize(dek->algo); if( !blocksize || blocksize > 16 ) log_fatal("unsupported blocksize %u\n", blocksize ); nprefix = blocksize; if( ed->len && ed->len < (nprefix+2) ) BUG(); if( ed->mdc_method ) { dfx->mdc_hash = md_open ( ed->mdc_method, 0 ); if ( DBG_HASHING ) md_start_debug (dfx->mdc_hash, "checkmdc"); } dfx->cipher_hd = cipher_open ( dek->algo, ed->mdc_method? CIPHER_MODE_CFB : CIPHER_MODE_AUTO_CFB, 1 ); /* log_hexdump( "thekey", dek->key, dek->keylen );*/ rc = cipher_setkey ( dfx->cipher_hd, dek->key, dek->keylen ); if( rc == G10ERR_WEAK_KEY ) { log_info(_("WARNING: message was encrypted with" " a weak key in the symmetric cipher.\n")); rc=0; } else if( rc ) { log_error("key setup failed: %s\n", g10_errstr(rc) ); goto leave; } if (!ed->buf) { log_error(_("problem handling encrypted packet\n")); goto leave; } cipher_setiv ( dfx->cipher_hd, NULL, 0 ); if( ed->len ) { for(i=0; i < (nprefix+2) && ed->len; i++, ed->len-- ) { if( (c=iobuf_get(ed->buf)) == -1 ) break; else temp[i] = c; } } else { for(i=0; i < (nprefix+2); i++ ) if( (c=iobuf_get(ed->buf)) == -1 ) break; else temp[i] = c; } cipher_decrypt ( dfx->cipher_hd, temp, temp, nprefix+2); cipher_sync ( dfx->cipher_hd ); p = temp; /* log_hexdump( "prefix", temp, nprefix+2 ); */ if(dek->symmetric && (p[nprefix-2] != p[nprefix] || p[nprefix-1] != p[nprefix+1]) ) { rc = G10ERR_BAD_KEY; goto leave; } if ( dfx->mdc_hash ) md_write ( dfx->mdc_hash, temp, nprefix+2 ); dfx->refcount++; if ( ed->mdc_method ) iobuf_push_filter( ed->buf, mdc_decode_filter, dfx ); else iobuf_push_filter( ed->buf, decode_filter, dfx ); proc_packets( procctx, ed->buf ); ed->buf = NULL; if( ed->mdc_method && dfx->eof_seen == 2 ) rc = G10ERR_INVALID_PACKET; else if( ed->mdc_method ) { /* check the mdc */ /* We used to let parse-packet.c handle the MDC packet but this turned out to be a problem with compressed packets: With old style packets there is no length information available and the decompressor uses an implicit end. However we can't know this implicit end beforehand (:-) and thus may feed the decompressor with more bytes than actually needed. It would be possible to unread the extra bytes but due to our weird iobuf system any unread is non reliable due to filters already popped off. The easy and sane solution is to care about the MDC packet only here and never pass it to the packet parser. Fortunatley the OpenPGP spec requires a strict format for the MDC packet so that we know that 22 bytes are appended. */ int datalen = md_digest_length( ed->mdc_method ); assert (dfx->cipher_hd); assert (dfx->mdc_hash); cipher_decrypt ( dfx->cipher_hd, dfx->defer, dfx->defer, 22); md_write ( dfx->mdc_hash, dfx->defer, 2); md_final ( dfx->mdc_hash ); if ( dfx->defer[0] != '\xd3' || dfx->defer[1] != '\x14' || datalen != 20 || memcmp (md_read (dfx->mdc_hash, 0 ), dfx->defer+2, datalen)) rc = G10ERR_BAD_SIGN; /*log_hexdump("MDC calculated:",md_read( dfx->mdc_hash, 0), datalen);*/ /*log_hexdump("MDC message :", dfx->defer, 20);*/ } leave: release_dfx_context (dfx); return rc; } /* I think we should merge this with cipher_filter */ static int mdc_decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { decode_filter_ctx_t dfx = opaque; size_t n, size = *ret_len; int rc = 0; int c; if( control == IOBUFCTRL_UNDERFLOW && dfx->eof_seen ) { *ret_len = 0; rc = -1; } else if( control == IOBUFCTRL_UNDERFLOW ) { assert(a); assert( size > 44 ); /* get at least 20 bytes and put it somewhere ahead in the buffer */ for(n=22; n < 44 ; n++ ) { if( (c = iobuf_get(a)) == -1 ) break; buf[n] = c; } if( n == 44 ) { /* we have enough stuff - flush the deferred stuff */ /* (we have asserted that the buffer is large enough) */ if( !dfx->defer_filled ) { /* the first time */ memcpy(buf, buf+22, 22 ); n = 22; } else { memcpy(buf, dfx->defer, 22 ); } /* now fill up */ for(; n < size; n++ ) { if( (c = iobuf_get(a)) == -1 ) break; buf[n] = c; } /* Move the last 22 bytes back to the defer buffer. */ /* (okay, we are wasting 22 bytes of supplied buffer) */ n -= 22; memcpy( dfx->defer, buf+n, 22 ); dfx->defer_filled = 1; } else if( !dfx->defer_filled ) { /* eof seen buf empty defer */ /* this is bad because there is an incomplete hash */ n -= 22; memcpy(buf, buf+22, n ); dfx->eof_seen = 2; /* eof with incomplete hash */ } else { /* eof seen */ memcpy (buf, dfx->defer, 22 ); n -= 22; memcpy( dfx->defer, buf+n, 22 ); dfx->eof_seen = 1; /* normal eof */ } if( n ) { if (dfx->cipher_hd) cipher_decrypt( dfx->cipher_hd, buf, buf, n); if (dfx->mdc_hash) md_write( dfx->mdc_hash, buf, n ); } else { assert( dfx->eof_seen ); rc = -1; /* eof */ } *ret_len = n; } else if ( control == IOBUFCTRL_FREE ) { release_dfx_context (dfx); } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "mdc_decode_filter"; } return rc; } static int decode_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { decode_filter_ctx_t fc = opaque; size_t n, size = *ret_len; int rc = 0; if( control == IOBUFCTRL_UNDERFLOW ) { assert(a); n = iobuf_read( a, buf, size ); if (n == (size_t)(-1)) n = 0; if( n ) { if (fc->cipher_hd) cipher_decrypt( fc->cipher_hd, buf, buf, n); } else rc = -1; /* eof */ *ret_len = n; } else if ( control == IOBUFCTRL_FREE ) { release_dfx_context (fc); } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "decode_filter"; } return rc; } gnupg-1.4.20/g10/exec.c0000644000175000017500000003321012635262326011324 00000000000000/* exec.c - generic call-a-program code * Copyright (C) 2001, 2002, 2003, 2004, 2005 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 3 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, see . */ #include #include #include #include #include #include #ifndef EXEC_TEMPFILE_ONLY #include #endif #ifdef HAVE_DOSISH_SYSTEM #include #endif #include #include #include #include #include "options.h" #include "memory.h" #include "i18n.h" #include "iobuf.h" #include "util.h" #include "exec.h" #ifdef NO_EXEC int exec_write(struct exec_info **info,const char *program, const char *args_in,const char *name,int writeonly,int binary) { log_error(_("no remote program execution supported\n")); return G10ERR_GENERAL; } int exec_read(struct exec_info *info) { return G10ERR_GENERAL; } int exec_finish(struct exec_info *info) { return G10ERR_GENERAL; } int set_exec_path(const char *path) { return G10ERR_GENERAL; } #else /* ! NO_EXEC */ #ifndef HAVE_MKDTEMP char *mkdtemp(char *template); #endif #if defined (_WIN32) /* This is a nicer system() for windows that waits for programs to return before returning control to the caller. I hate helpful computers. */ static int win_system(const char *command) { PROCESS_INFORMATION pi; STARTUPINFO si; char *string; /* We must use a copy of the command as CreateProcess modifies this argument. */ string=xstrdup(command); memset(&pi,0,sizeof(pi)); memset(&si,0,sizeof(si)); si.cb=sizeof(si); if(!CreateProcess(NULL,string,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) return -1; /* Wait for the child to exit */ WaitForSingleObject(pi.hProcess,INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); xfree(string); return 0; } #endif /* Replaces current $PATH */ int set_exec_path(const char *path) { char *p; p=xmalloc(5+strlen(path)+1); strcpy(p,"PATH="); strcat(p,path); if(DBG_EXTPROG) log_debug("set_exec_path: %s\n",p); /* Notice that path is never freed. That is intentional due to the way putenv() works. This leaks a few bytes if we call set_exec_path multiple times. */ if(putenv(p)!=0) return G10ERR_GENERAL; else return 0; } /* Makes a temp directory and filenames */ static int make_tempdir(struct exec_info *info) { char *tmp=opt.temp_dir,*namein=info->name,*nameout; if(!namein) namein=info->flags.binary?"tempin" EXTSEP_S "bin":"tempin" EXTSEP_S "txt"; nameout=info->flags.binary?"tempout" EXTSEP_S "bin":"tempout" EXTSEP_S "txt"; /* Make up the temp dir and files in case we need them */ if(tmp==NULL) { #if defined (_WIN32) int err; tmp=xmalloc(MAX_PATH); err=GetTempPath(MAX_PATH,tmp); if(err==0 || err>MAX_PATH) strcpy(tmp,"c:\\windows\\temp"); else { int len=strlen(tmp); /* GetTempPath may return with \ on the end */ while(len>0 && tmp[len-1]=='\\') { tmp[len-1]='\0'; len--; } } #else /* More unixish systems */ tmp=getenv("TMPDIR"); if(tmp==NULL) { tmp=getenv("TMP"); if(tmp==NULL) { #ifdef __riscos__ tmp=".GnuPG"; mkdir(tmp,0700); /* Error checks occur later on */ #else tmp="/tmp"; #endif } } #endif } info->tempdir=xmalloc(strlen(tmp)+strlen(DIRSEP_S)+10+1); sprintf(info->tempdir,"%s" DIRSEP_S "gpg-XXXXXX",tmp); #if defined (_WIN32) xfree(tmp); #endif if(mkdtemp(info->tempdir)==NULL) log_error(_("can't create directory `%s': %s\n"), info->tempdir,strerror(errno)); else { info->flags.madedir=1; info->tempfile_in=xmalloc(strlen(info->tempdir)+ strlen(DIRSEP_S)+strlen(namein)+1); sprintf(info->tempfile_in,"%s" DIRSEP_S "%s",info->tempdir,namein); if(!info->flags.writeonly) { info->tempfile_out=xmalloc(strlen(info->tempdir)+ strlen(DIRSEP_S)+strlen(nameout)+1); sprintf(info->tempfile_out,"%s" DIRSEP_S "%s",info->tempdir,nameout); } } return info->flags.madedir?0:G10ERR_GENERAL; } /* Expands %i and %o in the args to the full temp files within the temp directory. */ static int expand_args(struct exec_info *info,const char *args_in) { const char *ch=args_in; unsigned int size,len; info->flags.use_temp_files=0; info->flags.keep_temp_files=0; if(DBG_EXTPROG) log_debug("expanding string \"%s\"\n",args_in); size=100; info->command=xmalloc(size); len=0; info->command[0]='\0'; while(*ch!='\0') { if(*ch=='%') { char *append=NULL; ch++; switch(*ch) { case 'O': info->flags.keep_temp_files=1; /* fall through */ case 'o': /* out */ if(!info->flags.madedir) { if(make_tempdir(info)) goto fail; } append=info->tempfile_out; info->flags.use_temp_files=1; break; case 'I': info->flags.keep_temp_files=1; /* fall through */ case 'i': /* in */ if(!info->flags.madedir) { if(make_tempdir(info)) goto fail; } append=info->tempfile_in; info->flags.use_temp_files=1; break; case '%': append="%"; break; } if(append) { size_t applen=strlen(append); if(applen+len>size-1) { if(applen<100) applen=100; size+=applen; info->command=xrealloc(info->command,size); } strcat(info->command,append); len+=strlen(append); } } else { if(len==size-1) /* leave room for the \0 */ { size+=100; info->command=xrealloc(info->command,size); } info->command[len++]=*ch; info->command[len]='\0'; } ch++; } if(DBG_EXTPROG) log_debug("args expanded to \"%s\", use %u, keep %u\n",info->command, info->flags.use_temp_files,info->flags.keep_temp_files); return 0; fail: xfree(info->command); info->command=NULL; return G10ERR_GENERAL; } /* Either handles the tempfile creation, or the fork/exec. If it returns ok, then info->tochild is a FILE * that can be written to. The rules are: if there are no args, then it's a fork/exec/pipe. If there are args, but no tempfiles, then it's a fork/exec/pipe via shell -c. If there are tempfiles, then it's a system. */ int exec_write(struct exec_info **info,const char *program, const char *args_in,const char *name,int writeonly,int binary) { int ret=G10ERR_GENERAL; if(opt.exec_disable && !opt.no_perm_warn) { log_info(_("external program calls are disabled due to unsafe " "options file permissions\n")); return ret; } #if defined(HAVE_GETUID) && defined(HAVE_GETEUID) /* There should be no way to get to this spot while still carrying setuid privs. Just in case, bomb out if we are. */ if ( getuid () != geteuid () ) BUG(); #endif if(program==NULL && args_in==NULL) BUG(); *info=xmalloc_clear(sizeof(struct exec_info)); if(name) (*info)->name=xstrdup(name); (*info)->flags.binary=binary; (*info)->flags.writeonly=writeonly; /* Expand the args, if any */ if(args_in && expand_args(*info,args_in)) goto fail; #ifdef EXEC_TEMPFILE_ONLY if(!(*info)->flags.use_temp_files) { log_error(_("this platform requires temporary files when calling" " external programs\n")); goto fail; } #else /* !EXEC_TEMPFILE_ONLY */ /* If there are no args, or there are args, but no temp files, we can use fork/exec/pipe */ if(args_in==NULL || (*info)->flags.use_temp_files==0) { int to[2],from[2]; if(pipe(to)==-1) goto fail; if(pipe(from)==-1) { close(to[0]); close(to[1]); goto fail; } if(((*info)->child=fork())==-1) { close(to[0]); close(to[1]); close(from[0]); close(from[1]); goto fail; } if((*info)->child==0) { char *shell=getenv("SHELL"); if(shell==NULL) shell="/bin/sh"; /* I'm the child */ /* If the program isn't going to respond back, they get to keep their stdout/stderr */ if(!(*info)->flags.writeonly) { /* implied close of STDERR */ if(dup2(STDOUT_FILENO,STDERR_FILENO)==-1) _exit(1); /* implied close of STDOUT */ close(from[0]); if(dup2(from[1],STDOUT_FILENO)==-1) _exit(1); } /* implied close of STDIN */ close(to[1]); if(dup2(to[0],STDIN_FILENO)==-1) _exit(1); if(args_in==NULL) { if(DBG_EXTPROG) log_debug("execlp: %s\n",program); execlp(program,program,(void *)NULL); } else { if(DBG_EXTPROG) log_debug("execlp: %s -c %s\n",shell,(*info)->command); execlp(shell,shell,"-c",(*info)->command,(void *)NULL); } /* If we get this far the exec failed. Clean up and return. */ if(args_in==NULL) log_error(_("unable to execute program `%s': %s\n"), program,strerror(errno)); else log_error(_("unable to execute shell `%s': %s\n"), shell,strerror(errno)); /* This mimics the POSIX sh behavior - 127 means "not found" from the shell. */ if(errno==ENOENT) _exit(127); _exit(1); } /* I'm the parent */ close(to[0]); (*info)->tochild=fdopen(to[1],binary?"wb":"w"); if((*info)->tochild==NULL) { close(to[1]); ret=G10ERR_WRITE_FILE; goto fail; } close(from[1]); (*info)->fromchild=iobuf_fdopen(from[0],"r"); if((*info)->fromchild==NULL) { close(from[0]); ret=G10ERR_READ_FILE; goto fail; } /* fd iobufs are cached?! */ iobuf_ioctl((*info)->fromchild,3,1,NULL); return 0; } #endif /* !EXEC_TEMPFILE_ONLY */ if(DBG_EXTPROG) log_debug("using temp file `%s'\n",(*info)->tempfile_in); /* It's not fork/exec/pipe, so create a temp file */ if( is_secured_filename ((*info)->tempfile_in) ) { (*info)->tochild = NULL; errno = EPERM; } else (*info)->tochild=fopen((*info)->tempfile_in,binary?"wb":"w"); if((*info)->tochild==NULL) { log_error(_("can't create `%s': %s\n"), (*info)->tempfile_in,strerror(errno)); ret=G10ERR_WRITE_FILE; goto fail; } ret=0; fail: return ret; } int exec_read(struct exec_info *info) { int ret=G10ERR_GENERAL; fclose(info->tochild); info->tochild=NULL; if(info->flags.use_temp_files) { if(DBG_EXTPROG) log_debug("system() command is %s\n",info->command); #if defined (_WIN32) info->progreturn=win_system(info->command); #else info->progreturn=system(info->command); #endif if(info->progreturn==-1) { log_error(_("system error while calling external program: %s\n"), strerror(errno)); info->progreturn=127; goto fail; } #if defined(WIFEXITED) && defined(WEXITSTATUS) if(WIFEXITED(info->progreturn)) info->progreturn=WEXITSTATUS(info->progreturn); else { log_error(_("unnatural exit of external program\n")); info->progreturn=127; goto fail; } #else /* If we don't have the macros, do the best we can. */ info->progreturn = (info->progreturn & 0xff00) >> 8; #endif /* 127 is the magic value returned from system() to indicate that the shell could not be executed, or from /bin/sh to indicate that the program could not be executed. */ if(info->progreturn==127) { log_error(_("unable to execute external program\n")); goto fail; } if(!info->flags.writeonly) { info->fromchild=iobuf_open(info->tempfile_out); if (info->fromchild && is_secured_file (iobuf_get_fd (info->fromchild))) { iobuf_close (info->fromchild); info->fromchild = NULL; errno = EPERM; } if(info->fromchild==NULL) { log_error(_("unable to read external program response: %s\n"), strerror(errno)); ret=G10ERR_READ_FILE; goto fail; } /* Do not cache this iobuf on close */ iobuf_ioctl(info->fromchild,3,1,NULL); } } ret=0; fail: return ret; } int exec_finish(struct exec_info *info) { int ret=info->progreturn; if(info->fromchild) iobuf_close(info->fromchild); if(info->tochild) fclose(info->tochild); #ifndef EXEC_TEMPFILE_ONLY if(info->child>0) { if(waitpid(info->child,&info->progreturn,0)!=0 && WIFEXITED(info->progreturn)) ret=WEXITSTATUS(info->progreturn); else { log_error(_("unnatural exit of external program\n")); ret=127; } } #endif if(info->flags.madedir && !info->flags.keep_temp_files) { if(info->tempfile_in) { if(unlink(info->tempfile_in)==-1) log_info(_("WARNING: unable to remove tempfile (%s) `%s': %s\n"), "in",info->tempfile_in,strerror(errno)); } if(info->tempfile_out) { if(unlink(info->tempfile_out)==-1) log_info(_("WARNING: unable to remove tempfile (%s) `%s': %s\n"), "out",info->tempfile_out,strerror(errno)); } if(rmdir(info->tempdir)==-1) log_info(_("WARNING: unable to remove temp directory `%s': %s\n"), info->tempdir,strerror(errno)); } xfree(info->command); xfree(info->name); xfree(info->tempdir); xfree(info->tempfile_in); xfree(info->tempfile_out); xfree(info); return ret; } #endif /* ! NO_EXEC */ gnupg-1.4.20/g10/seckey-cert.c0000644000175000017500000003304212635262326012621 00000000000000/* seckey-cert.c - secret key certificate packet handling * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include "util.h" #include "memory.h" #include "packet.h" #include "mpi.h" #include "keydb.h" #include "cipher.h" #include "main.h" #include "options.h" #include "i18n.h" #include "status.h" static int do_check( PKT_secret_key *sk, const char *tryagain_text, int mode, int *canceled ) { byte *buffer; u16 csum=0; int i, res; unsigned nbytes; if( sk->is_protected ) { /* remove the protection */ DEK *dek = NULL; u32 keyid[4]; /* 4! because we need two of them */ CIPHER_HANDLE cipher_hd=NULL; PKT_secret_key *save_sk; if( sk->protect.s2k.mode == 1001 ) { log_info(_("secret key parts are not available\n")); return G10ERR_GENERAL; } if( sk->protect.algo == CIPHER_ALGO_NONE ) BUG(); if( check_cipher_algo( sk->protect.algo ) ) { log_info(_("protection algorithm %d%s is not supported\n"), sk->protect.algo,sk->protect.algo==1?" (IDEA)":"" ); return G10ERR_CIPHER_ALGO; } if(check_digest_algo(sk->protect.s2k.hash_algo)) { log_info(_("protection digest %d is not supported\n"), sk->protect.s2k.hash_algo); return G10ERR_DIGEST_ALGO; } keyid_from_sk( sk, keyid ); keyid[2] = keyid[3] = 0; if( !sk->is_primary ) { keyid[2] = sk->main_keyid[0]; keyid[3] = sk->main_keyid[1]; } dek = passphrase_to_dek( keyid, sk->pubkey_algo, sk->protect.algo, &sk->protect.s2k, mode, tryagain_text, canceled ); if (!dek && canceled && *canceled) return G10ERR_GENERAL; cipher_hd = cipher_open( sk->protect.algo, CIPHER_MODE_AUTO_CFB, 1); cipher_setkey( cipher_hd, dek->key, dek->keylen ); xfree(dek); save_sk = copy_secret_key( NULL, sk ); cipher_setiv( cipher_hd, sk->protect.iv, sk->protect.ivlen ); csum = 0; if( sk->version >= 4 ) { unsigned int ndata; byte *p, *data; u16 csumc = 0; i = pubkey_get_npkey(sk->pubkey_algo); if (!mpi_is_opaque (sk->skey[i])) p = NULL; else p = mpi_get_opaque (sk->skey[i], &ndata); if (!p) BUG (); if ( ndata > 1 ) csumc = p[ndata-2] << 8 | p[ndata-1]; data = xmalloc_secure( ndata ); cipher_decrypt( cipher_hd, data, p, ndata ); mpi_free( sk->skey[i] ); sk->skey[i] = NULL ; p = data; if (sk->protect.sha1chk) { /* This is the new SHA1 checksum method to detect tampering with the key as used by the Klima/Rosa attack */ sk->csum = 0; csum = 1; if( ndata < 20 ) log_error("not enough bytes for SHA-1 checksum\n"); else { MD_HANDLE h = md_open (DIGEST_ALGO_SHA1, 1); if (!h) BUG(); /* algo not available */ md_write (h, data, ndata - 20); md_final (h); if (!memcmp (md_read (h, DIGEST_ALGO_SHA1), data + ndata - 20, 20) ) { /* digest does match. We have to keep the old style checksum in sk->csum, so that the test used for unprotected keys does work. This test gets used when we are adding new keys. */ sk->csum = csum = checksum (data, ndata-20); } md_close (h); } } else { if( ndata < 2 ) { log_error("not enough bytes for checksum\n"); sk->csum = 0; csum = 1; } else { csum = checksum( data, ndata-2); sk->csum = data[ndata-2] << 8 | data[ndata-1]; if ( sk->csum != csum ) { /* This is a PGP 7.0.0 workaround */ sk->csum = csumc; /* take the encrypted one */ } } } /* Must check it here otherwise the mpi_read_xx would fail because the length may have an arbitrary value */ if( sk->csum == csum ) { for( ; i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { nbytes = ndata; sk->skey[i] = mpi_read_from_buffer(p, &nbytes, 1 ); if (!sk->skey[i]) { /* Checksum was okay, but not correctly decrypted. */ sk->csum = 0; csum = 1; break; } ndata -= nbytes; p += nbytes; } /* Note: at this point ndata should be 2 for a simple checksum or 20 for the sha1 digest */ } xfree(data); } else { for(i=pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { byte *p; unsigned int ndata; if (!mpi_is_opaque (sk->skey[i])) p = NULL; else p = mpi_get_opaque (sk->skey[i], &ndata); if (!p || !(ndata >= 2)) BUG (); assert (ndata == ((p[0] << 8 | p[1]) + 7)/8 + 2); buffer = xmalloc_secure (ndata); cipher_sync (cipher_hd); buffer[0] = p[0]; buffer[1] = p[1]; cipher_decrypt (cipher_hd, buffer+2, p+2, ndata-2); csum += checksum (buffer, ndata); mpi_free (sk->skey[i]); sk->skey[i] = mpi_read_from_buffer (buffer, &ndata, 1); xfree (buffer); if (!sk->skey[i]) { /* Checksum was okay, but not correctly decrypted. */ sk->csum = 0; csum = 1; break; } /* csum += checksum_mpi (sk->skey[i]); */ } } cipher_close( cipher_hd ); /* now let's see whether we have used the right passphrase */ if( csum != sk->csum ) { copy_secret_key( sk, save_sk ); passphrase_clear_cache ( keyid, NULL, sk->pubkey_algo ); free_secret_key( save_sk ); return G10ERR_BAD_PASS; } /* the checksum may fail, so we also check the key itself */ res = pubkey_check_secret_key( sk->pubkey_algo, sk->skey ); if( res ) { copy_secret_key( sk, save_sk ); passphrase_clear_cache ( keyid, NULL, sk->pubkey_algo ); free_secret_key( save_sk ); return G10ERR_BAD_PASS; } free_secret_key( save_sk ); sk->is_protected = 0; } else { /* not protected, assume it is okay if the checksum is okay */ csum = 0; for(i=pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { csum += checksum_mpi( sk->skey[i] ); } if( csum != sk->csum ) return G10ERR_CHECKSUM; } return 0; } /**************** * Check the secret key * Ask up to 3 (or n) times for a correct passphrase * If n is negative, disable the key info prompt and make n=abs(n) */ int check_secret_key( PKT_secret_key *sk, int n ) { int rc = G10ERR_BAD_PASS; int i,mode; if (sk && sk->is_protected && sk->protect.s2k.mode == 1002) return 0; /* Let the card support stuff handle this. */ if(n<0) { n=abs(n); mode=1; } else mode=0; if( n < 1 ) n = (opt.batch && !opt.use_agent)? 1 : 3; /* use the default value */ for(i=0; i < n && rc == G10ERR_BAD_PASS; i++ ) { int canceled = 0; const char *tryagain = NULL; if (i) { tryagain = N_("Invalid passphrase; please try again"); log_info (_("%s ...\n"), _(tryagain)); } rc = do_check( sk, tryagain, mode, &canceled ); if( rc == G10ERR_BAD_PASS && is_status_enabled() ) { u32 kid[2]; char buf[50]; keyid_from_sk( sk, kid ); sprintf(buf, "%08lX%08lX", (ulong)kid[0], (ulong)kid[1]); write_status_text( STATUS_BAD_PASSPHRASE, buf ); } if( have_static_passphrase() || canceled) break; } if( !rc ) write_status( STATUS_GOOD_PASSPHRASE ); return rc; } /**************** * check whether the secret key is protected. * Returns: 0 not protected, -1 on error or the protection algorithm * -2 indicates a card stub. * -3 indicates a not-online stub. */ int is_secret_key_protected( PKT_secret_key *sk ) { return sk->is_protected? sk->protect.s2k.mode == 1002? -2 : sk->protect.s2k.mode == 1001? -3 : sk->protect.algo : 0; } /**************** * Protect the secret key with the passphrase from DEK */ int protect_secret_key( PKT_secret_key *sk, DEK *dek ) { int i,j, rc = 0; byte *buffer; unsigned nbytes; u16 csum; if( !dek ) return 0; if( !sk->is_protected ) { /* okay, apply the protection */ CIPHER_HANDLE cipher_hd=NULL; if( check_cipher_algo( sk->protect.algo ) ) rc = G10ERR_CIPHER_ALGO; /* unsupport protection algorithm */ else { print_cipher_algo_note( sk->protect.algo ); cipher_hd = cipher_open( sk->protect.algo, CIPHER_MODE_AUTO_CFB, 1 ); if( cipher_setkey( cipher_hd, dek->key, dek->keylen ) ) log_info(_("WARNING: Weak key detected" " - please change passphrase again.\n")); sk->protect.ivlen = cipher_get_blocksize( sk->protect.algo ); assert( sk->protect.ivlen <= DIM(sk->protect.iv) ); if( sk->protect.ivlen != 8 && sk->protect.ivlen != 16 ) BUG(); /* yes, we are very careful */ randomize_buffer(sk->protect.iv, sk->protect.ivlen, 1); cipher_setiv( cipher_hd, sk->protect.iv, sk->protect.ivlen ); if( sk->version >= 4 ) { byte *bufarr[PUBKEY_MAX_NSKEY]; unsigned narr[PUBKEY_MAX_NSKEY]; unsigned nbits[PUBKEY_MAX_NSKEY]; int ndata=0; byte *p, *data; for(j=0, i = pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++, j++ ) { assert( !mpi_is_opaque( sk->skey[i] ) ); bufarr[j] = mpi_get_buffer( sk->skey[i], &narr[j], NULL ); nbits[j] = mpi_get_nbits( sk->skey[i] ); ndata += narr[j] + 2; } for( ; j < PUBKEY_MAX_NSKEY; j++ ) bufarr[j] = NULL; ndata += opt.simple_sk_checksum? 2 : 20; /* for checksum */ data = xmalloc_secure( ndata ); p = data; for(j=0; j < PUBKEY_MAX_NSKEY && bufarr[j]; j++ ) { p[0] = nbits[j] >> 8 ; p[1] = nbits[j]; p += 2; memcpy(p, bufarr[j], narr[j] ); p += narr[j]; xfree(bufarr[j]); } if (opt.simple_sk_checksum) { log_info (_("generating the deprecated 16-bit checksum" " for secret key protection\n")); csum = checksum( data, ndata-2); sk->csum = csum; *p++ = csum >> 8; *p++ = csum; sk->protect.sha1chk = 0; } else { MD_HANDLE h = md_open (DIGEST_ALGO_SHA1, 1); if (!h) BUG(); /* algo not available */ md_write (h, data, ndata - 20); md_final (h); memcpy (p, md_read (h, DIGEST_ALGO_SHA1), 20); p += 20; md_close (h); sk->csum = csum = 0; sk->protect.sha1chk = 1; } assert( p == data+ndata ); cipher_encrypt( cipher_hd, data, data, ndata ); for(i = pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { mpi_free( sk->skey[i] ); sk->skey[i] = NULL; } i = pubkey_get_npkey(sk->pubkey_algo); sk->skey[i] = mpi_set_opaque(NULL, data, ndata ); } else { csum = 0; for(i=pubkey_get_npkey(sk->pubkey_algo); i < pubkey_get_nskey(sk->pubkey_algo); i++ ) { byte *data; unsigned int nbits; csum += checksum_mpi (sk->skey[i]); buffer = mpi_get_buffer( sk->skey[i], &nbytes, NULL ); cipher_sync (cipher_hd); assert ( !mpi_is_opaque (sk->skey[i]) ); data = xmalloc (nbytes+2); nbits = mpi_get_nbits (sk->skey[i]); assert (nbytes == (nbits + 7)/8); data[0] = nbits >> 8; data[1] = nbits; cipher_encrypt (cipher_hd, data+2, buffer, nbytes); xfree( buffer ); mpi_free (sk->skey[i]); sk->skey[i] = mpi_set_opaque (NULL, data, nbytes+2); } sk->csum = csum; } sk->is_protected = 1; cipher_close( cipher_hd ); } } return rc; } gnupg-1.4.20/g10/iso7816.c0000644000175000017500000006466212635262326011537 00000000000000/* iso7816.c - ISO 7816 commands * Copyright (C) 2003, 2004, 2008, 2009 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 3 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, see . * * $Id$ */ #include #include #include #include #include #if defined(GNUPG_SCD_MAIN_HEADER) #include GNUPG_SCD_MAIN_HEADER #elif GNUPG_MAJOR_VERSION == 1 /* This is used with GnuPG version < 1.9. The code has been source copied from the current GnuPG >= 1.9 and is maintained over there. */ #include "options.h" #include "errors.h" #include "memory.h" #include "util.h" #include "i18n.h" #else /* GNUPG_MAJOR_VERSION != 1 */ #include "scdaemon.h" #endif /* GNUPG_MAJOR_VERSION != 1 */ #include "iso7816.h" #include "apdu.h" #define CMD_SELECT_FILE 0xA4 #define CMD_VERIFY ISO7816_VERIFY #define CMD_CHANGE_REFERENCE_DATA ISO7816_CHANGE_REFERENCE_DATA #define CMD_RESET_RETRY_COUNTER ISO7816_RESET_RETRY_COUNTER #define CMD_GET_DATA 0xCA #define CMD_PUT_DATA 0xDA #define CMD_MSE 0x22 #define CMD_PSO 0x2A #define CMD_INTERNAL_AUTHENTICATE 0x88 #define CMD_GENERATE_KEYPAIR 0x47 #define CMD_GET_CHALLENGE 0x84 #define CMD_READ_BINARY 0xB0 #define CMD_READ_RECORD 0xB2 static gpg_error_t map_sw (int sw) { gpg_err_code_t ec; switch (sw) { case SW_EEPROM_FAILURE: ec = GPG_ERR_HARDWARE; break; case SW_TERM_STATE: ec = GPG_ERR_CARD; break; case SW_WRONG_LENGTH: ec = GPG_ERR_INV_VALUE; break; case SW_SM_NOT_SUP: ec = GPG_ERR_NOT_SUPPORTED; break; case SW_CC_NOT_SUP: ec = GPG_ERR_NOT_SUPPORTED; break; case SW_CHV_WRONG: ec = GPG_ERR_BAD_PIN; break; case SW_CHV_BLOCKED: ec = GPG_ERR_PIN_BLOCKED; break; case SW_USE_CONDITIONS: ec = GPG_ERR_USE_CONDITIONS; break; case SW_NOT_SUPPORTED: ec = GPG_ERR_NOT_SUPPORTED; break; case SW_BAD_PARAMETER: ec = GPG_ERR_INV_VALUE; break; case SW_FILE_NOT_FOUND: ec = GPG_ERR_ENOENT; break; case SW_RECORD_NOT_FOUND:ec= GPG_ERR_NOT_FOUND; break; case SW_REF_NOT_FOUND: ec = GPG_ERR_NO_OBJ; break; case SW_BAD_P0_P1: ec = GPG_ERR_INV_VALUE; break; case SW_EXACT_LENGTH: ec = GPG_ERR_INV_VALUE; break; case SW_INS_NOT_SUP: ec = GPG_ERR_CARD; break; case SW_CLA_NOT_SUP: ec = GPG_ERR_CARD; break; case SW_SUCCESS: ec = 0; break; case SW_HOST_OUT_OF_CORE: ec = GPG_ERR_ENOMEM; break; case SW_HOST_INV_VALUE: ec = GPG_ERR_INV_VALUE; break; case SW_HOST_INCOMPLETE_CARD_RESPONSE: ec = GPG_ERR_CARD; break; case SW_HOST_NOT_SUPPORTED: ec = GPG_ERR_NOT_SUPPORTED; break; case SW_HOST_LOCKING_FAILED: ec = GPG_ERR_BUG; break; case SW_HOST_BUSY: ec = GPG_ERR_EBUSY; break; case SW_HOST_NO_CARD: ec = GPG_ERR_CARD_NOT_PRESENT; break; case SW_HOST_CARD_INACTIVE: ec = GPG_ERR_CARD_RESET; break; case SW_HOST_CARD_IO_ERROR: ec = GPG_ERR_EIO; break; case SW_HOST_GENERAL_ERROR: ec = GPG_ERR_GENERAL; break; case SW_HOST_NO_READER: ec = GPG_ERR_ENODEV; break; case SW_HOST_ABORTED: ec = GPG_ERR_CANCELED; break; case SW_HOST_NO_KEYPAD: ec = GPG_ERR_NOT_SUPPORTED; break; default: if ((sw & 0x010000)) ec = GPG_ERR_GENERAL; /* Should not happen. */ else if ((sw & 0xff00) == SW_MORE_DATA) ec = 0; /* This should actually never been seen here. */ else ec = GPG_ERR_CARD; } return gpg_error (ec); } /* Map a status word from the APDU layer to a gpg-error code. */ gpg_error_t iso7816_map_sw (int sw) { /* All APDU functions should return 0x9000 on success but for historical reasons of the implementation some return 0 to indicate success. We allow for that here. */ return sw? map_sw (sw) : 0; } /* This function is specialized version of the SELECT FILE command. SLOT is the card and reader as created for example by apdu_open_reader (), AID is a buffer of size AIDLEN holding the requested application ID. The function can't be used to enumerate AIDs and won't return the AID on success. The return value is 0 for okay or a GPG error code. Note that ISO error codes are internally mapped. Bit 0 of FLAGS should be set if the card does not understand P2=0xC0. */ gpg_error_t iso7816_select_application (int slot, const char *aid, size_t aidlen, unsigned int flags) { int sw; sw = apdu_send_simple (slot, 0, 0x00, CMD_SELECT_FILE, 4, (flags&1)? 0 :0x0c, aidlen, aid); return map_sw (sw); } gpg_error_t iso7816_select_file (int slot, int tag, int is_dir, unsigned char **result, size_t *resultlen) { int sw, p0, p1; unsigned char tagbuf[2]; tagbuf[0] = (tag >> 8) & 0xff; tagbuf[1] = tag & 0xff; if (result || resultlen) { *result = NULL; *resultlen = 0; return gpg_error (GPG_ERR_NOT_IMPLEMENTED); } else { p0 = (tag == 0x3F00)? 0: is_dir? 1:2; p1 = 0x0c; /* No FC return. */ sw = apdu_send_simple (slot, 0, 0x00, CMD_SELECT_FILE, p0, p1, 2, (char*)tagbuf ); return map_sw (sw); } return 0; } /* Do a select file command with a direct path. */ gpg_error_t iso7816_select_path (int slot, const unsigned short *path, size_t pathlen, unsigned char **result, size_t *resultlen) { int sw, p0, p1; unsigned char buffer[100]; int buflen; if (result || resultlen) { *result = NULL; *resultlen = 0; return gpg_error (GPG_ERR_NOT_IMPLEMENTED); } if (pathlen/2 >= sizeof buffer) return gpg_error (GPG_ERR_TOO_LARGE); for (buflen = 0; pathlen; pathlen--, path++) { buffer[buflen++] = (*path >> 8); buffer[buflen++] = *path; } p0 = 0x08; p1 = 0x0c; /* No FC return. */ sw = apdu_send_simple (slot, 0, 0x00, CMD_SELECT_FILE, p0, p1, buflen, (char*)buffer ); return map_sw (sw); } /* This is a private command currently only working for TCOS cards. */ gpg_error_t iso7816_list_directory (int slot, int list_dirs, unsigned char **result, size_t *resultlen) { int sw; if (!result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; sw = apdu_send (slot, 0, 0x80, 0xAA, list_dirs? 1:2, 0, -1, NULL, result, resultlen); if (sw != SW_SUCCESS) { /* Make sure that pending buffers are released. */ xfree (*result); *result = NULL; *resultlen = 0; } return map_sw (sw); } /* This funcion sends an already formatted APDU to the card. With HANDLE_MORE set to true a MORE DATA status will be handled internally. The return value is a gpg error code (i.e. a mapped status word). This is basically the same as apdu_send_direct but it maps the status word and does not return it in the result buffer. */ gpg_error_t iso7816_apdu_direct (int slot, const void *apdudata, size_t apdudatalen, int handle_more, unsigned char **result, size_t *resultlen) { int sw; if (!result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; sw = apdu_send_direct (slot, 0, apdudata, apdudatalen, handle_more, result, resultlen); if (!sw) { if (*resultlen < 2) sw = SW_HOST_GENERAL_ERROR; else { sw = ((*result)[*resultlen-2] << 8) | (*result)[*resultlen-1]; (*resultlen)--; (*resultlen)--; } } if (sw != SW_SUCCESS) { /* Make sure that pending buffers are released. */ xfree (*result); *result = NULL; *resultlen = 0; } return map_sw (sw); } /* Check whether the reader supports the ISO command code COMMAND on the keypad. Returns 0 on success. */ gpg_error_t iso7816_check_keypad (int slot, int command, iso7816_pininfo_t *pininfo) { int sw; sw = apdu_check_keypad (slot, command, pininfo->mode, pininfo->minlen, pininfo->maxlen, pininfo->padlen); return iso7816_map_sw (sw); } /* Perform a VERIFY command on SLOT using the card holder verification vector CHVNO with a CHV of lenght CHVLEN. With PININFO non-NULL the keypad of the reader will be used. Returns 0 on success. */ gpg_error_t iso7816_verify_kp (int slot, int chvno, const char *chv, size_t chvlen, iso7816_pininfo_t *pininfo) { int sw; if (pininfo && pininfo->mode) sw = apdu_send_simple_kp (slot, 0x00, CMD_VERIFY, 0, chvno, chvlen, chv, pininfo->mode, pininfo->minlen, pininfo->maxlen, pininfo->padlen); else sw = apdu_send_simple (slot, 0, 0x00, CMD_VERIFY, 0, chvno, chvlen, chv); return map_sw (sw); } /* Perform a VERIFY command on SLOT using the card holder verification vector CHVNO with a CHV of lenght CHVLEN. Returns 0 on success. */ gpg_error_t iso7816_verify (int slot, int chvno, const char *chv, size_t chvlen) { return iso7816_verify_kp (slot, chvno, chv, chvlen, NULL); } /* Perform a CHANGE_REFERENCE_DATA command on SLOT for the card holder verification vector CHVNO. If the OLDCHV is NULL (and OLDCHVLEN 0), a "change reference data" is done, otherwise an "exchange reference data". The new reference data is expected in NEWCHV of length NEWCHVLEN. With PININFO non-NULL the keypad of the reader will be used. */ gpg_error_t iso7816_change_reference_data_kp (int slot, int chvno, const char *oldchv, size_t oldchvlen, const char *newchv, size_t newchvlen, iso7816_pininfo_t *pininfo) { int sw; char *buf; if ((!oldchv && oldchvlen) || (oldchv && !oldchvlen) || !newchv || !newchvlen ) return gpg_error (GPG_ERR_INV_VALUE); buf = xtrymalloc (oldchvlen + newchvlen); if (!buf) return gpg_error (gpg_err_code_from_errno (errno)); if (oldchvlen) memcpy (buf, oldchv, oldchvlen); memcpy (buf+oldchvlen, newchv, newchvlen); if (pininfo && pininfo->mode) sw = apdu_send_simple_kp (slot, 0x00, CMD_CHANGE_REFERENCE_DATA, oldchvlen? 0 : 1, chvno, oldchvlen+newchvlen, buf, pininfo->mode, pininfo->minlen, pininfo->maxlen, pininfo->padlen); else sw = apdu_send_simple (slot, 0, 0x00, CMD_CHANGE_REFERENCE_DATA, oldchvlen? 0 : 1, chvno, oldchvlen+newchvlen, buf); xfree (buf); return map_sw (sw); } /* Perform a CHANGE_REFERENCE_DATA command on SLOT for the card holder verification vector CHVNO. If the OLDCHV is NULL (and OLDCHVLEN 0), a "change reference data" is done, otherwise an "exchange reference data". The new reference data is expected in NEWCHV of length NEWCHVLEN. */ gpg_error_t iso7816_change_reference_data (int slot, int chvno, const char *oldchv, size_t oldchvlen, const char *newchv, size_t newchvlen) { return iso7816_change_reference_data_kp (slot, chvno, oldchv, oldchvlen, newchv, newchvlen, NULL); } gpg_error_t iso7816_reset_retry_counter_kp (int slot, int chvno, const char *newchv, size_t newchvlen, iso7816_pininfo_t *pininfo) { int sw; if (!newchv || !newchvlen ) return gpg_error (GPG_ERR_INV_VALUE); /* FIXME: The keypad mode has not yet been tested. */ if (pininfo && pininfo->mode) sw = apdu_send_simple_kp (slot, 0x00, CMD_RESET_RETRY_COUNTER, 2, chvno, newchvlen, newchv, pininfo->mode, pininfo->minlen, pininfo->maxlen, pininfo->padlen); else sw = apdu_send_simple (slot, 0, 0x00, CMD_RESET_RETRY_COUNTER, 2, chvno, newchvlen, newchv); return map_sw (sw); } gpg_error_t iso7816_reset_retry_counter_with_rc (int slot, int chvno, const char *data, size_t datalen) { int sw; if (!data || !datalen ) return gpg_error (GPG_ERR_INV_VALUE); sw = apdu_send_simple (slot, 0, 0x00, CMD_RESET_RETRY_COUNTER, 0, chvno, datalen, data); return map_sw (sw); } gpg_error_t iso7816_reset_retry_counter (int slot, int chvno, const char *newchv, size_t newchvlen) { return iso7816_reset_retry_counter_kp (slot, chvno, newchv, newchvlen, NULL); } /* Perform a GET DATA command requesting TAG and storing the result in a newly allocated buffer at the address passed by RESULT. Return the length of this data at the address of RESULTLEN. */ gpg_error_t iso7816_get_data (int slot, int extended_mode, int tag, unsigned char **result, size_t *resultlen) { int sw; int le; if (!result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; if (extended_mode > 0 && extended_mode < 256) le = 65534; /* Not 65535 in case it is used as some special flag. */ else if (extended_mode > 0) le = extended_mode; else le = 256; sw = apdu_send_le (slot, extended_mode, 0x00, CMD_GET_DATA, ((tag >> 8) & 0xff), (tag & 0xff), -1, NULL, le, result, resultlen); if (sw != SW_SUCCESS) { /* Make sure that pending buffers are released. */ xfree (*result); *result = NULL; *resultlen = 0; return map_sw (sw); } return 0; } /* Perform a PUT DATA command on card in SLOT. Write DATA of length DATALEN to TAG. EXTENDED_MODE controls whether extended length headers or command chaining is used instead of single length bytes. */ gpg_error_t iso7816_put_data (int slot, int extended_mode, int tag, const unsigned char *data, size_t datalen) { int sw; sw = apdu_send_simple (slot, extended_mode, 0x00, CMD_PUT_DATA, ((tag >> 8) & 0xff), (tag & 0xff), datalen, (const char*)data); return map_sw (sw); } /* Same as iso7816_put_data but uses an odd instruction byte. */ gpg_error_t iso7816_put_data_odd (int slot, int extended_mode, int tag, const unsigned char *data, size_t datalen) { int sw; sw = apdu_send_simple (slot, extended_mode, 0x00, CMD_PUT_DATA+1, ((tag >> 8) & 0xff), (tag & 0xff), datalen, (const char*)data); return map_sw (sw); } /* Manage Security Environment. This is a weird operation and there is no easy abstraction for it. Furthermore, some card seem to have a different interpreation of 7816-8 and thus we resort to let the caller decide what to do. */ gpg_error_t iso7816_manage_security_env (int slot, int p1, int p2, const unsigned char *data, size_t datalen) { int sw; if (p1 < 0 || p1 > 255 || p2 < 0 || p2 > 255 ) return gpg_error (GPG_ERR_INV_VALUE); sw = apdu_send_simple (slot, 0, 0x00, CMD_MSE, p1, p2, data? datalen : -1, (const char*)data); return map_sw (sw); } /* Perform the security operation COMPUTE DIGITAL SIGANTURE. On success 0 is returned and the data is availavle in a newly allocated buffer stored at RESULT with its length stored at RESULTLEN. For LE see do_generate_keypair. */ gpg_error_t iso7816_compute_ds (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen) { int sw; if (!data || !datalen || !result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; if (!extended_mode) le = 256; /* Ignore provided Le and use what apdu_send uses. */ else if (le >= 0 && le < 256) le = 256; sw = apdu_send_le (slot, extended_mode, 0x00, CMD_PSO, 0x9E, 0x9A, datalen, (const char*)data, le, result, resultlen); if (sw != SW_SUCCESS) { /* Make sure that pending buffers are released. */ xfree (*result); *result = NULL; *resultlen = 0; return map_sw (sw); } return 0; } /* Perform the security operation DECIPHER. PADIND is the padding indicator to be used. It should be 0 if no padding is required, a value of -1 suppresses the padding byte. On success 0 is returned and the plaintext is available in a newly allocated buffer stored at RESULT with its length stored at RESULTLEN. For LE see do_generate_keypair. */ gpg_error_t iso7816_decipher (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, int padind, unsigned char **result, size_t *resultlen) { int sw; unsigned char *buf; if (!data || !datalen || !result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; if (!extended_mode) le = 256; /* Ignore provided Le and use what apdu_send uses. */ else if (le >= 0 && le < 256) le = 256; if (padind >= 0) { /* We need to prepend the padding indicator. */ buf = xtrymalloc (datalen + 1); if (!buf) return gpg_error (gpg_err_code_from_errno (errno)); *buf = padind; /* Padding indicator. */ memcpy (buf+1, data, datalen); sw = apdu_send_le (slot, extended_mode, 0x00, CMD_PSO, 0x80, 0x86, datalen+1, (char*)buf, le, result, resultlen); xfree (buf); } else { sw = apdu_send_le (slot, extended_mode, 0x00, CMD_PSO, 0x80, 0x86, datalen, (const char *)data, le, result, resultlen); } if (sw != SW_SUCCESS) { /* Make sure that pending buffers are released. */ xfree (*result); *result = NULL; *resultlen = 0; return map_sw (sw); } return 0; } /* For LE see do_generate_keypair. */ gpg_error_t iso7816_internal_authenticate (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen) { int sw; if (!data || !datalen || !result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; if (!extended_mode) le = 256; /* Ignore provided Le and use what apdu_send uses. */ else if (le >= 0 && le < 256) le = 256; sw = apdu_send_le (slot, extended_mode, 0x00, CMD_INTERNAL_AUTHENTICATE, 0, 0, datalen, (const char*)data, le, result, resultlen); if (sw != SW_SUCCESS) { /* Make sure that pending buffers are released. */ xfree (*result); *result = NULL; *resultlen = 0; return map_sw (sw); } return 0; } /* LE is the expected return length. This is usually 0 except if extended length mode is used and more than 256 byte will be returned. In that case a value of -1 uses a large default (e.g. 4096 bytes), a value larger 256 used that value. */ static gpg_error_t do_generate_keypair (int slot, int extended_mode, int read_only, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen) { int sw; if (!data || !datalen || !result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; sw = apdu_send_le (slot, extended_mode, 0x00, CMD_GENERATE_KEYPAIR, read_only? 0x81:0x80, 0, datalen, (const char*)data, le >= 0 && le < 256? 256:le, result, resultlen); if (sw != SW_SUCCESS) { /* Make sure that pending buffers are released. */ xfree (*result); *result = NULL; *resultlen = 0; return map_sw (sw); } return 0; } gpg_error_t iso7816_generate_keypair (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen) { return do_generate_keypair (slot, extended_mode, 0, data, datalen, le, result, resultlen); } gpg_error_t iso7816_read_public_key (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen) { return do_generate_keypair (slot, extended_mode, 1, data, datalen, le, result, resultlen); } gpg_error_t iso7816_get_challenge (int slot, int length, unsigned char *buffer) { int sw; unsigned char *result; size_t resultlen, n; if (!buffer || length < 1) return gpg_error (GPG_ERR_INV_VALUE); do { result = NULL; n = length > 254? 254 : length; sw = apdu_send_le (slot, 0, 0x00, CMD_GET_CHALLENGE, 0, 0, -1, NULL, n, &result, &resultlen); if (sw != SW_SUCCESS) { /* Make sure that pending buffers are released. */ xfree (result); return map_sw (sw); } if (resultlen > n) resultlen = n; memcpy (buffer, result, resultlen); buffer += resultlen; length -= resultlen; xfree (result); } while (length > 0); return 0; } /* Perform a READ BINARY command requesting a maximum of NMAX bytes from OFFSET. With NMAX = 0 the entire file is read. The result is stored in a newly allocated buffer at the address passed by RESULT. Returns the length of this data at the address of RESULTLEN. */ gpg_error_t iso7816_read_binary (int slot, size_t offset, size_t nmax, unsigned char **result, size_t *resultlen) { int sw; unsigned char *buffer; size_t bufferlen; int read_all = !nmax; size_t n; if (!result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; /* We can only encode 15 bits in p0,p1 to indicate an offset. Thus we check for this limit. */ if (offset > 32767) return gpg_error (GPG_ERR_INV_VALUE); do { buffer = NULL; bufferlen = 0; n = read_all? 0 : nmax; sw = apdu_send_le (slot, 0, 0x00, CMD_READ_BINARY, ((offset>>8) & 0xff), (offset & 0xff) , -1, NULL, n, &buffer, &bufferlen); if ( SW_EXACT_LENGTH_P(sw) ) { n = (sw & 0x00ff); sw = apdu_send_le (slot, 0, 0x00, CMD_READ_BINARY, ((offset>>8) & 0xff), (offset & 0xff) , -1, NULL, n, &buffer, &bufferlen); } if (*result && sw == SW_BAD_P0_P1) { /* Bad Parameter means that the offset is outside of the EF. When reading all data we take this as an indication for EOF. */ break; } if (sw != SW_SUCCESS && sw != SW_EOF_REACHED) { /* Make sure that pending buffers are released. */ xfree (buffer); xfree (*result); *result = NULL; *resultlen = 0; return map_sw (sw); } if (*result) /* Need to extend the buffer. */ { unsigned char *p = xtryrealloc (*result, *resultlen + bufferlen); if (!p) { gpg_error_t err = gpg_error_from_syserror (); xfree (buffer); xfree (*result); *result = NULL; *resultlen = 0; return err; } *result = p; memcpy (*result + *resultlen, buffer, bufferlen); *resultlen += bufferlen; xfree (buffer); buffer = NULL; } else /* Transfer the buffer into our result. */ { *result = buffer; *resultlen = bufferlen; } offset += bufferlen; if (offset > 32767) break; /* We simply truncate the result for too large files. */ if (nmax > bufferlen) nmax -= bufferlen; else nmax = 0; } while ((read_all && sw != SW_EOF_REACHED) || (!read_all && nmax)); return 0; } /* Perform a READ RECORD command. RECNO gives the record number to read with 0 indicating the current record. RECCOUNT must be 1 (not all cards support reading of more than one record). SHORT_EF should be 0 to read the current EF or contain a short EF. The result is stored in a newly allocated buffer at the address passed by RESULT. Returns the length of this data at the address of RESULTLEN. */ gpg_error_t iso7816_read_record (int slot, int recno, int reccount, int short_ef, unsigned char **result, size_t *resultlen) { int sw; unsigned char *buffer; size_t bufferlen; if (!result || !resultlen) return gpg_error (GPG_ERR_INV_VALUE); *result = NULL; *resultlen = 0; /* We can only encode 15 bits in p0,p1 to indicate an offset. Thus we check for this limit. */ if (recno < 0 || recno > 255 || reccount != 1 || short_ef < 0 || short_ef > 254 ) return gpg_error (GPG_ERR_INV_VALUE); buffer = NULL; bufferlen = 0; sw = apdu_send_le (slot, 0, 0x00, CMD_READ_RECORD, recno, short_ef? short_ef : 0x04, -1, NULL, 0, &buffer, &bufferlen); if (sw != SW_SUCCESS && sw != SW_EOF_REACHED) { /* Make sure that pending buffers are released. */ xfree (buffer); xfree (*result); *result = NULL; *resultlen = 0; return map_sw (sw); } *result = buffer; *resultlen = bufferlen; return 0; } gnupg-1.4.20/g10/photoid.h0000644000175000017500000000225412635216116012053 00000000000000/* photoid.h * Copyright (C) 2001, 2002, 2005, 2008 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 3 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, see . */ /* Photo ID functions */ #ifndef _PHOTOID_H_ #define _PHOTOID_H_ #include "packet.h" PKT_user_id *generate_photo_id(PKT_public_key *pk,const char *filename); int parse_image_header(const struct user_attribute *attr,byte *type,u32 *len); char *image_type_to_string(byte type,int style); void show_photos(const struct user_attribute *attrs,int count, PKT_public_key *pk,PKT_secret_key *sk,PKT_user_id *uid); #endif /* !_PHOTOID_H_ */ gnupg-1.4.20/g10/export.c0000644000175000017500000004303712635262326011731 00000000000000/* export.c * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, * 2005 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 3 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, see . */ #include #include #include #include #include #include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" #include "memory.h" #include "util.h" #include "main.h" #include "i18n.h" #include "trustdb.h" /* An object to keep track of subkeys. */ struct subkey_list_s { struct subkey_list_s *next; u32 kid[2]; }; typedef struct subkey_list_s *subkey_list_t; static int do_export( STRLIST users, int secret, unsigned int options ); static int do_export_stream( IOBUF out, STRLIST users, int secret, KBNODE *keyblock_out, unsigned int options, int *any ); int parse_export_options(char *str,unsigned int *options,int noisy) { struct parse_options export_opts[]= { {"export-local-sigs",EXPORT_LOCAL_SIGS,NULL, N_("export signatures that are marked as local-only")}, {"export-attributes",EXPORT_ATTRIBUTES,NULL, N_("export attribute user IDs (generally photo IDs)")}, {"export-sensitive-revkeys",EXPORT_SENSITIVE_REVKEYS,NULL, N_("export revocation keys marked as \"sensitive\"")}, {"export-reset-subkey-passwd",EXPORT_RESET_SUBKEY_PASSWD,NULL, N_("remove the passphrase from exported subkeys")}, {"export-clean",EXPORT_CLEAN,NULL, N_("remove unusable parts from key during export")}, {"export-minimal",EXPORT_MINIMAL|EXPORT_CLEAN,NULL, N_("remove as much as possible from key during export")}, /* Aliases for backward compatibility */ {"include-local-sigs",EXPORT_LOCAL_SIGS,NULL,NULL}, {"include-attributes",EXPORT_ATTRIBUTES,NULL,NULL}, {"include-sensitive-revkeys",EXPORT_SENSITIVE_REVKEYS,NULL,NULL}, /* dummy */ {"export-unusable-sigs",0,NULL,NULL}, {"export-clean-sigs",0,NULL,NULL}, {"export-clean-uids",0,NULL,NULL}, {NULL,0,NULL,NULL} /* add tags for include revoked and disabled? */ }; return parse_options(str,options,export_opts,noisy); } /**************** * Export the public keys (to standard out or --output). * Depending on opt.armor the output is armored. * options are defined in main.h. * If USERS is NULL, the complete ring will be exported. */ int export_pubkeys( STRLIST users, unsigned int options ) { return do_export( users, 0, options ); } /**************** * Export to an already opened stream; return -1 if no keys have * been exported */ int export_pubkeys_stream( IOBUF out, STRLIST users, KBNODE *keyblock_out, unsigned int options ) { int any, rc; rc = do_export_stream( out, users, 0, keyblock_out, options, &any ); if( !rc && !any ) rc = -1; return rc; } int export_seckeys( STRLIST users ) { return do_export( users, 1, 0 ); } int export_secsubkeys( STRLIST users ) { return do_export( users, 2, 0 ); } static int do_export( STRLIST users, int secret, unsigned int options ) { IOBUF out = NULL; int any, rc; armor_filter_context_t afx; compress_filter_context_t zfx; memset( &afx, 0, sizeof afx); memset( &zfx, 0, sizeof zfx); rc = open_outfile( NULL, 0, &out ); if( rc ) return rc; if( opt.armor ) { afx.what = secret?5:1; iobuf_push_filter( out, armor_filter, &afx ); } if( opt.compress_keys ) push_compress_filter(out,&zfx,default_compress_algo()); rc = do_export_stream( out, users, secret, NULL, options, &any ); if( rc || !any ) iobuf_cancel(out); else iobuf_close(out); return rc; } /* Release an entire subkey list. */ static void release_subkey_list (subkey_list_t list) { while (list) { subkey_list_t tmp = list->next;; xfree (list); list = tmp; } } /* Returns true if NODE is a subkey and contained in LIST. */ static int subkey_in_list_p (subkey_list_t list, KBNODE node) { if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { u32 kid[2]; if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) keyid_from_pk (node->pkt->pkt.public_key, kid); else keyid_from_sk (node->pkt->pkt.secret_key, kid); for (; list; list = list->next) if (list->kid[0] == kid[0] && list->kid[1] == kid[1]) return 1; } return 0; } /* Allocate a new subkey list item from NODE. */ static subkey_list_t new_subkey_list_item (KBNODE node) { subkey_list_t list = xcalloc (1, sizeof *list); if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) keyid_from_pk (node->pkt->pkt.public_key, list->kid); else if (node->pkt->pkttype == PKT_SECRET_SUBKEY) keyid_from_sk (node->pkt->pkt.secret_key, list->kid); return list; } /* Helper function to check whether the subkey at NODE actually matches the description at DESC. The function returns true if the key under question has been specified by an exact specification (keyID or fingerprint) and does match the one at NODE. It is assumed that the packet at NODE is either a public or secret subkey. */ static int exact_subkey_match_p (KEYDB_SEARCH_DESC *desc, KBNODE node) { u32 kid[2]; byte fpr[MAX_FINGERPRINT_LEN]; size_t fprlen; int result = 0; switch(desc->mode) { case KEYDB_SEARCH_MODE_SHORT_KID: case KEYDB_SEARCH_MODE_LONG_KID: if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) keyid_from_pk (node->pkt->pkt.public_key, kid); else keyid_from_sk (node->pkt->pkt.secret_key, kid); break; case KEYDB_SEARCH_MODE_FPR16: case KEYDB_SEARCH_MODE_FPR20: case KEYDB_SEARCH_MODE_FPR: if (node->pkt->pkttype == PKT_PUBLIC_SUBKEY) fingerprint_from_pk (node->pkt->pkt.public_key, fpr,&fprlen); else fingerprint_from_sk (node->pkt->pkt.secret_key, fpr,&fprlen); break; default: break; } switch(desc->mode) { case KEYDB_SEARCH_MODE_SHORT_KID: if (desc->u.kid[1] == kid[1]) result = 1; break; case KEYDB_SEARCH_MODE_LONG_KID: if (desc->u.kid[0] == kid[0] && desc->u.kid[1] == kid[1]) result = 1; break; case KEYDB_SEARCH_MODE_FPR16: if (!memcmp (desc->u.fpr, fpr, 16)) result = 1; break; case KEYDB_SEARCH_MODE_FPR20: case KEYDB_SEARCH_MODE_FPR: if (!memcmp (desc->u.fpr, fpr, 20)) result = 1; break; default: break; } return result; } /* If keyblock_out is non-NULL, AND the exit code is zero, then it contains a pointer to the first keyblock found and exported. No other keyblocks are exported. The caller must free it. */ static int do_export_stream( IOBUF out, STRLIST users, int secret, KBNODE *keyblock_out, unsigned int options, int *any ) { int rc = 0; PACKET pkt; KBNODE keyblock = NULL; KBNODE kbctx, node; size_t ndesc, descindex; KEYDB_SEARCH_DESC *desc = NULL; subkey_list_t subkey_list = NULL; /* Track alreay processed subkeys. */ KEYDB_HANDLE kdbhd; STRLIST sl; *any = 0; init_packet( &pkt ); kdbhd = keydb_new (secret); if (!users) { ndesc = 1; desc = xcalloc ( ndesc, sizeof *desc ); desc[0].mode = KEYDB_SEARCH_MODE_FIRST; } else { for (ndesc=0, sl=users; sl; sl = sl->next, ndesc++) ; desc = xmalloc ( ndesc * sizeof *desc); for (ndesc=0, sl=users; sl; sl = sl->next) { if (classify_user_id (sl->d, desc+ndesc)) ndesc++; else log_error (_("key \"%s\" not found: %s\n"), sl->d, g10_errstr (G10ERR_INV_USER_ID)); } /* It would be nice to see which of the given users did actually match one in the keyring. To implement this we need to have a found flag for each entry in desc and to set this we must check all those entries after a match to mark all matched one - currently we stop at the first match. To do this we need an extra flag to enable this feature so */ } #ifdef ENABLE_SELINUX_HACKS if (secret) { log_error (_("exporting secret keys not allowed\n")); rc = G10ERR_GENERAL; goto leave; } #endif while (!(rc = keydb_search2 (kdbhd, desc, ndesc, &descindex))) { int sha1_warned=0,skip_until_subkey=0; u32 sk_keyid[2]; if (!users) desc[0].mode = KEYDB_SEARCH_MODE_NEXT; /* Read the keyblock. */ rc = keydb_get_keyblock (kdbhd, &keyblock ); if( rc ) { log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); goto leave; } if((node=find_kbnode(keyblock,PKT_SECRET_KEY))) { PKT_secret_key *sk=node->pkt->pkt.secret_key; keyid_from_sk(sk,sk_keyid); /* We can't apply GNU mode 1001 on an unprotected key. */ if( secret == 2 && !sk->is_protected ) { log_info(_("key %s: not protected - skipped\n"), keystr(sk_keyid)); continue; } /* No v3 keys with GNU mode 1001. */ if( secret == 2 && sk->version == 3 ) { log_info(_("key %s: PGP 2.x style key - skipped\n"), keystr(sk_keyid)); continue; } /* It does not make sense to export a key with a primary key on card using a non-key stub. We simply skip those keys when used with --export-secret-subkeys. */ if (secret == 2 && sk->is_protected && sk->protect.s2k.mode == 1002 ) { log_info(_("key %s: key material on-card - skipped\n"), keystr(sk_keyid)); continue; } } else { /* It's a public key export, so do the cleaning if requested. Note that both export-clean and export-minimal only apply to UID sigs (0x10, 0x11, 0x12, and 0x13). A designated revocation is never stripped, even with export-minimal set. */ if(options&EXPORT_CLEAN) clean_key(keyblock,opt.verbose,options&EXPORT_MINIMAL,NULL,NULL); } /* And write it. */ for( kbctx=NULL; (node = walk_kbnode( keyblock, &kbctx, 0 )); ) { if( skip_until_subkey ) { if(node->pkt->pkttype==PKT_PUBLIC_SUBKEY || node->pkt->pkttype==PKT_SECRET_SUBKEY) skip_until_subkey=0; else continue; } /* We used to use comment packets, but not any longer. In case we still have comments on a key, strip them here before we call build_packet(). */ if( node->pkt->pkttype == PKT_COMMENT ) continue; /* Make sure that ring_trust packets never get exported. */ if (node->pkt->pkttype == PKT_RING_TRUST) continue; /* If exact is set, then we only export what was requested (plus the primary key, if the user didn't specifically request it). */ if(desc[descindex].exact && (node->pkt->pkttype==PKT_PUBLIC_SUBKEY || node->pkt->pkttype==PKT_SECRET_SUBKEY)) { if (!exact_subkey_match_p (desc+descindex, node)) { /* Before skipping this subkey, check whether any other description wants an exact match on a subkey and include that subkey into the output too. Need to add this subkey to a list so that it won't get processed a second time. So the first step here is to check that list and skip in any case if the key is in that list. We need this whole mess because the import function is not able to merge secret keys and thus it is useless to output them as two separate keys and have import merge them. */ if (subkey_in_list_p (subkey_list, node)) skip_until_subkey = 1; /* Already processed this one. */ else { size_t j; for (j=0; j < ndesc; j++) if (j != descindex && desc[j].exact && exact_subkey_match_p (desc+j, node)) break; if (!(j < ndesc)) skip_until_subkey = 1; /* No other one matching. */ } } if(skip_until_subkey) continue; /* Mark this one as processed. */ { subkey_list_t tmp = new_subkey_list_item (node); tmp->next = subkey_list; subkey_list = tmp; } } if(node->pkt->pkttype==PKT_SIGNATURE) { /* do not export packets which are marked as not exportable */ if(!(options&EXPORT_LOCAL_SIGS) && !node->pkt->pkt.signature->flags.exportable) continue; /* not exportable */ /* Do not export packets with a "sensitive" revocation key unless the user wants us to. Note that we do export these when issuing the actual revocation (see revoke.c). */ if(!(options&EXPORT_SENSITIVE_REVKEYS) && node->pkt->pkt.signature->revkey) { int i; for(i=0;ipkt->pkt.signature->numrevkeys;i++) if(node->pkt->pkt.signature->revkey[i]->class & 0x40) break; if(ipkt->pkt.signature->numrevkeys) continue; } } /* Don't export attribs? */ if( !(options&EXPORT_ATTRIBUTES) && node->pkt->pkttype == PKT_USER_ID && node->pkt->pkt.user_id->attrib_data ) { /* Skip until we get to something that is not an attrib or a signature on an attrib */ while(kbctx->next && kbctx->next->pkt->pkttype==PKT_SIGNATURE) { kbctx=kbctx->next; } continue; } if( secret == 2 && node->pkt->pkttype == PKT_SECRET_KEY ) { /* We don't want to export the secret parts of the * primary key, this is done by using GNU protection mode 1001 */ int save_mode = node->pkt->pkt.secret_key->protect.s2k.mode; node->pkt->pkt.secret_key->protect.s2k.mode = 1001; rc = build_packet( out, node->pkt ); node->pkt->pkt.secret_key->protect.s2k.mode = save_mode; } else if (secret == 2 && node->pkt->pkttype == PKT_SECRET_SUBKEY && (opt.export_options&EXPORT_RESET_SUBKEY_PASSWD)) { /* If the subkey is protected reset the passphrase to export an unprotected subkey. This feature is useful in cases of a subkey copied to an unattended machine where a passphrase is not required. */ PKT_secret_key *sk_save, *sk; sk_save = node->pkt->pkt.secret_key; sk = copy_secret_key (NULL, sk_save); node->pkt->pkt.secret_key = sk; log_info (_("about to export an unprotected subkey\n")); switch (is_secret_key_protected (sk)) { case -1: rc = G10ERR_PUBKEY_ALGO; break; case 0: break; default: if (sk->protect.s2k.mode == 1001) ; /* No secret parts. */ else if( sk->protect.s2k.mode == 1002 ) ; /* Card key stub. */ else { rc = check_secret_key( sk, 0 ); } break; } if (rc) { node->pkt->pkt.secret_key = sk_save; free_secret_key (sk); log_error (_("failed to unprotect the subkey: %s\n"), g10_errstr (rc)); goto leave; } rc = build_packet (out, node->pkt); node->pkt->pkt.secret_key = sk_save; free_secret_key (sk); } else { /* Warn the user if the secret key or any of the secret subkeys are protected with SHA1 and we have simple_sk_checksum set. */ if(!sha1_warned && opt.simple_sk_checksum && (node->pkt->pkttype==PKT_SECRET_KEY || node->pkt->pkttype==PKT_SECRET_SUBKEY) && node->pkt->pkt.secret_key->protect.sha1chk) { /* I hope this warning doesn't confuse people. */ log_info(_("WARNING: secret key %s does not have a " "simple SK checksum\n"),keystr(sk_keyid)); sha1_warned=1; } rc = build_packet( out, node->pkt ); } if( rc ) { log_error("build_packet(%d) failed: %s\n", node->pkt->pkttype, g10_errstr(rc) ); rc = G10ERR_WRITE_FILE; goto leave; } } ++*any; if(keyblock_out) { *keyblock_out=keyblock; break; } } if( rc == -1 ) rc = 0; leave: release_subkey_list (subkey_list); xfree(desc); keydb_release (kdbhd); if(rc || keyblock_out==NULL) release_kbnode( keyblock ); if( !*any ) log_info(_("WARNING: nothing exported\n")); return rc; } gnupg-1.4.20/g10/options.skel0000644000175000017500000002211012635262326012604 00000000000000# These first three lines are not copied to the gpg.conf file in # the users home directory. # $Id$ # Options for GnuPG # Copyright 1998, 1999, 2000, 2001, 2002, 2003, # 2010 Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This file is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # # Unless you specify which option file to use (with the command line # option "--options filename"), GnuPG uses the file ~/.gnupg/gpg.conf # by default. # # An options file can contain any long options which are available in # GnuPG. If the first non white space character of a line is a '#', # this line is ignored. Empty lines are also ignored. # # See the man page for a list of options. # Uncomment the following option to get rid of the copyright notice #no-greeting # If you have more than 1 secret key in your keyring, you may want to # uncomment the following option and set your preferred keyid. #default-key 621CC013 # If you do not pass a recipient to gpg, it will ask for one. Using # this option you can encrypt to a default key. Key validation will # not be done in this case. The second form uses the default key as # default recipient. #default-recipient some-user-id #default-recipient-self # Use --encrypt-to to add the specified key as a recipient to all # messages. This is useful, for example, when sending mail through a # mail client that does not automatically encrypt mail to your key. # In the example, this option allows you to read your local copy of # encrypted mail that you've sent to others. #encrypt-to some-key-id # By default GnuPG creates version 4 signatures for data files as # specified by OpenPGP. Some earlier (PGP 6, PGP 7) versions of PGP # require the older version 3 signatures. Setting this option forces # GnuPG to create version 3 signatures. #force-v3-sigs # Because some mailers change lines starting with "From " to ">From " # it is good to handle such lines in a special way when creating # cleartext signatures; all other PGP versions do it this way too. #no-escape-from-lines # If you do not use the Latin-1 (ISO-8859-1) charset, you should tell # GnuPG which is the native character set. Please check the man page # for supported character sets. This character set is only used for # metadata and not for the actual message which does not undergo any # translation. Note that future version of GnuPG will change to UTF-8 # as default character set. In most cases this option is not required # as GnuPG is able to figure out the correct charset at runtime. #charset utf-8 # Group names may be defined like this: # group mynames = paige 0x12345678 joe patti # # Any time "mynames" is a recipient (-r or --recipient), it will be # expanded to the names "paige", "joe", and "patti", and the key ID # "0x12345678". Note there is only one level of expansion - you # cannot make an group that points to another group. Note also that # if there are spaces in the recipient name, this will appear as two # recipients. In these cases it is better to use the key ID. #group mynames = paige 0x12345678 joe patti # Lock the file only once for the lifetime of a process. If you do # not define this, the lock will be obtained and released every time # it is needed, which is usually preferable. #lock-once # GnuPG can send and receive keys to and from a keyserver. These # servers can be HKP, email, or LDAP (if GnuPG is built with LDAP # support). # # Example HKP keyserver: # hkp://keys.gnupg.net # hkp://subkeys.pgp.net # # Example email keyserver: # mailto:pgp-public-keys@keys.pgp.net # # Example LDAP keyservers: # ldap://keyserver.pgp.com # # Regular URL syntax applies, and you can set an alternate port # through the usual method: # hkp://keyserver.example.net:22742 # # Most users just set the name and type of their preferred keyserver. # Note that most servers (with the notable exception of # ldap://keyserver.pgp.com) synchronize changes with each other. Note # also that a single server name may actually point to multiple # servers via DNS round-robin. hkp://keys.gnupg.net is an example of # such a "server", which spreads the load over a number of physical # servers. To see the IP address of the server actually used, you may use # the "--keyserver-options debug". keyserver hkp://keys.gnupg.net #keyserver mailto:pgp-public-keys@keys.nl.pgp.net #keyserver ldap://keyserver.pgp.com # Common options for keyserver functions: # # include-disabled : when searching, include keys marked as "disabled" # on the keyserver (not all keyservers support this). # # no-include-revoked : when searching, do not include keys marked as # "revoked" on the keyserver. # # verbose : show more information as the keys are fetched. # Can be used more than once to increase the amount # of information shown. # # use-temp-files : use temporary files instead of a pipe to talk to the # keyserver. Some platforms (Win32 for one) always # have this on. # # keep-temp-files : do not delete temporary files after using them # (really only useful for debugging) # # http-proxy="proxy" : set the proxy to use for HTTP and HKP keyservers. # This overrides the "http_proxy" environment variable, # if any. # # auto-key-retrieve : automatically fetch keys as needed from the keyserver # when verifying signatures or when importing keys that # have been revoked by a revocation key that is not # present on the keyring. # # no-include-attributes : do not include attribute IDs (aka "photo IDs") # when sending keys to the keyserver. #keyserver-options auto-key-retrieve # Display photo user IDs in key listings # list-options show-photos # Display photo user IDs when a signature from a key with a photo is # verified # verify-options show-photos # Use this program to display photo user IDs # # %i is expanded to a temporary file that contains the photo. # %I is the same as %i, but the file isn't deleted afterwards by GnuPG. # %k is expanded to the key ID of the key. # %K is expanded to the long OpenPGP key ID of the key. # %t is expanded to the extension of the image (e.g. "jpg"). # %T is expanded to the MIME type of the image (e.g. "image/jpeg"). # %f is expanded to the fingerprint of the key. # %% is %, of course. # # If %i or %I are not present, then the photo is supplied to the # viewer on standard input. If your platform supports it, standard # input is the best way to do this as it avoids the time and effort in # generating and then cleaning up a secure temp file. # # If no photo-viewer is provided, GnuPG will look for xloadimage, eog, # or display (ImageMagick). On Mac OS X and Windows, the default is # to use your regular JPEG image viewer. # # Some other viewers: # photo-viewer "qiv %i" # photo-viewer "ee %i" # # This one saves a copy of the photo ID in your home directory: # photo-viewer "cat > ~/photoid-for-key-%k.%t" # # Use your MIME handler to view photos: # photo-viewer "metamail -q -d -b -c %T -s 'KeyID 0x%k' -f GnuPG" # Passphrase agent # # We support the old experimental passphrase agent protocol as well as # the new Assuan based one (currently available in the "newpg" package # at ftp.gnupg.org/gcrypt/alpha/aegypten/). To make use of the agent, # you have to run an agent as daemon and use the option # # use-agent # # which tries to use the agent but will fallback to the regular mode # if there is a problem connecting to the agent. The normal way to # locate the agent is by looking at the environment variable # GPG_AGENT_INFO which should have been set during gpg-agent startup. # In certain situations the use of this variable is not possible, thus # the option # # --gpg-agent-info=::1 # # may be used to override it. # Automatic key location # # GnuPG can automatically locate and retrieve keys as needed using the # auto-key-locate option. This happens when encrypting to an email # address (in the "user@example.com" form), and there are no # user@example.com keys on the local keyring. This option takes the # following arguments, in the order they are to be tried: # # cert = locate a key using DNS CERT, as specified in RFC-4398. # GnuPG can handle both the PGP (key) and IPGP (URL + fingerprint) # CERT methods. # # pka = locate a key using DNS PKA. # # ldap = locate a key using the PGP Universal method of checking # "ldap://keys.(thedomain)". For example, encrypting to # user@example.com will check ldap://keys.example.com. # # keyserver = locate a key using whatever keyserver is defined using # the keyserver option. # # You may also list arbitrary keyservers here by URL. # # Try CERT, then PKA, then LDAP, then hkp://subkeys.net: #auto-key-locate cert pka ldap hkp://subkeys.pgp.net gnupg-1.4.20/g10/tlv.c0000644000175000017500000001777312635262326011225 00000000000000/* tlv.c - Tag-Length-Value Utilities * Copyright (C) 2003, 2004, 2005 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 3 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, see . */ #include #include #include #include #include #if GNUPG_MAJOR_VERSION == 1 #define GPG_ERR_EOF (-1) #define GPG_ERR_BAD_BER (1) /*G10ERR_GENERAL*/ #define GPG_ERR_INV_SEXP (45) /*G10ERR_INV_ARG*/ typedef int gpg_error_t; #define gpg_error(n) (n) #else #include #endif #include "tlv.h" static const unsigned char * do_find_tlv (const unsigned char *buffer, size_t length, int tag, size_t *nbytes, int nestlevel) { const unsigned char *s = buffer; size_t n = length; size_t len; int this_tag; int composite; for (;;) { buffer = s; if (n < 2) return NULL; /* Buffer definitely too short for tag and length. */ if (!*s || *s == 0xff) { /* Skip optional filler between TLV objects. */ s++; n--; continue; } composite = !!(*s & 0x20); if ((*s & 0x1f) == 0x1f) { /* more tag bytes to follow */ s++; n--; if (n < 2) return NULL; /* buffer definitely too short for tag and length. */ if ((*s & 0x1f) == 0x1f) return NULL; /* We support only up to 2 bytes. */ this_tag = (s[-1] << 8) | (s[0] & 0x7f); } else this_tag = s[0]; len = s[1]; s += 2; n -= 2; if (len < 0x80) ; else if (len == 0x81) { /* One byte length follows. */ if (!n) return NULL; /* we expected 1 more bytes with the length. */ len = s[0]; s++; n--; } else if (len == 0x82) { /* Two byte length follows. */ if (n < 2) return NULL; /* We expected 2 more bytes with the length. */ len = (s[0] << 8) | s[1]; s += 2; n -= 2; } else return NULL; /* APDU limit is 65535, thus it does not make sense to assume longer length fields. */ if (composite && nestlevel < 100) { /* Dive into this composite DO after checking for a too deep nesting. */ const unsigned char *tmp_s; size_t tmp_len; tmp_s = do_find_tlv (s, len, tag, &tmp_len, nestlevel+1); if (tmp_s) { *nbytes = tmp_len; return tmp_s; } } if (this_tag == tag) { *nbytes = len; return s; } if (len > n) return NULL; /* Buffer too short to skip to the next tag. */ s += len; n -= len; } } /* Locate a TLV encoded data object in BUFFER of LENGTH and return a pointer to value as well as its length in NBYTES. Return NULL if it was not found or if the object does not fit into the buffer. */ const unsigned char * find_tlv (const unsigned char *buffer, size_t length, int tag, size_t *nbytes) { const unsigned char *p; p = do_find_tlv (buffer, length, tag, nbytes, 0); if (p && *nbytes > (length - (p-buffer))) p = NULL; /* Object longer than buffer. */ return p; } /* Locate a TLV encoded data object in BUFFER of LENGTH and return a pointer to value as well as its length in NBYTES. Return NULL if it was not found. Note, that the function does not check whether the value fits into the provided buffer. */ const unsigned char * find_tlv_unchecked (const unsigned char *buffer, size_t length, int tag, size_t *nbytes) { return do_find_tlv (buffer, length, tag, nbytes, 0); } /* ASN.1 BER parser: Parse BUFFER of length SIZE and return the tag and the length part from the TLV triplet. Update BUFFER and SIZE on success. */ gpg_error_t parse_ber_header (unsigned char const **buffer, size_t *size, int *r_class, int *r_tag, int *r_constructed, int *r_ndef, size_t *r_length, size_t *r_nhdr) { int c; unsigned long tag; const unsigned char *buf = *buffer; size_t length = *size; *r_ndef = 0; *r_length = 0; *r_nhdr = 0; /* Get the tag. */ if (!length) return gpg_error (GPG_ERR_EOF); c = *buf++; length--; ++*r_nhdr; *r_class = (c & 0xc0) >> 6; *r_constructed = !!(c & 0x20); tag = c & 0x1f; if (tag == 0x1f) { tag = 0; do { tag <<= 7; if (!length) return gpg_error (GPG_ERR_EOF); c = *buf++; length--; ++*r_nhdr; tag |= c & 0x7f; } while (c & 0x80); } *r_tag = tag; /* Get the length. */ if (!length) return gpg_error (GPG_ERR_EOF); c = *buf++; length--; ++*r_nhdr; if ( !(c & 0x80) ) *r_length = c; else if (c == 0x80) *r_ndef = 1; else if (c == 0xff) return gpg_error (GPG_ERR_BAD_BER); else { unsigned long len = 0; int count = c & 0x7f; if (count > sizeof (len) || count > sizeof (size_t)) return gpg_error (GPG_ERR_BAD_BER); for (; count; count--) { len <<= 8; if (!length) return gpg_error (GPG_ERR_EOF); c = *buf++; length--; ++*r_nhdr; len |= c & 0xff; } *r_length = len; } /* Without this kludge some example certs can't be parsed. */ if (*r_class == CLASS_UNIVERSAL && !*r_tag) *r_length = 0; *buffer = buf; *size = length; return 0; } /* FIXME: The following function should not go into this file but for now it is easier to keep it here. */ /* Return the next token of an canconical encoded S-expression. BUF is the pointer to the S-expression and BUFLEN is a pointer to the length of this S-expression (used to validate the syntax). Both are updated to reflect the new position. The token itself is returned as a pointer into the orginal buffer at TOK and TOKLEN. If a parentheses is the next token, TOK will be set to NULL. TOKLEN is checked to be within the bounds. On error a error code is returned and all pointers should are not guaranteed to point to a meanigful value. DEPTH should be initialized to 0 and will reflect on return the actual depth of the tree. To detect the end of the S-expression it is advisable to check DEPTH after a successful return: depth = 0; while (!(err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen)) && depth) process_token (tok, toklen); if (err) handle_error (); */ gpg_error_t parse_sexp (unsigned char const **buf, size_t *buflen, int *depth, unsigned char const **tok, size_t *toklen) { const unsigned char *s; size_t n, vlen; s = *buf; n = *buflen; *tok = NULL; *toklen = 0; if (!n) return *depth ? gpg_error (GPG_ERR_INV_SEXP) : 0; if (*s == '(') { s++; n--; (*depth)++; *buf = s; *buflen = n; return 0; } if (*s == ')') { if (!*depth) return gpg_error (GPG_ERR_INV_SEXP); *toklen = 1; s++; n--; (*depth)--; *buf = s; *buflen = n; return 0; } for (vlen=0; n && *s && *s != ':' && (*s >= '0' && *s <= '9'); s++, n--) vlen = vlen*10 + (*s - '0'); if (!n || *s != ':') return gpg_error (GPG_ERR_INV_SEXP); s++; n--; if (vlen > n) return gpg_error (GPG_ERR_INV_SEXP); *tok = s; *toklen = vlen; s += vlen; n -= vlen; *buf = s; *buflen = n; return 0; } gnupg-1.4.20/g10/compress.c0000644000175000017500000002353512635262326012244 00000000000000/* compress.c - compress filter * Copyright (C) 1998, 1999, 2000, 2001, 2002, * 2003 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 3 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, see . */ /* Note that the code in compress-bz2.c is nearly identical to the code here, so if you fix a bug here, look there to see if a matching bug needs to be fixed. I tried to have one set of functions that could do ZIP, ZLIB, and BZIP2, but it became dangerously unreadable with #ifdefs and if(algo) -dshaw */ #include #include #include #include #include #include #include #include #if defined(__riscos__) && defined(USE_ZLIBRISCOS) # include "zlib-riscos.h" #endif #include "util.h" #include "memory.h" #include "packet.h" #include "filter.h" #include "main.h" #include "options.h" int compress_filter_bz2( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len); static void init_compress( compress_filter_context_t *zfx, z_stream *zs ) { int rc; int level; #if defined(__riscos__) && defined(USE_ZLIBRISCOS) static int zlib_initialized = 0; if (!zlib_initialized) zlib_initialized = riscos_load_module("ZLib", zlib_path, 1); #endif if( opt.compress_level >= 1 && opt.compress_level <= 9 ) level = opt.compress_level; else if( opt.compress_level == -1 ) level = Z_DEFAULT_COMPRESSION; else { log_error("invalid compression level; using default level\n"); level = Z_DEFAULT_COMPRESSION; } if( (rc = zfx->algo == 1? deflateInit2( zs, level, Z_DEFLATED, -13, 8, Z_DEFAULT_STRATEGY) : deflateInit( zs, level ) ) != Z_OK ) { log_fatal("zlib problem: %s\n", zs->msg? zs->msg : rc == Z_MEM_ERROR ? "out of core" : rc == Z_VERSION_ERROR ? "invalid lib version" : "unknown error" ); } zfx->outbufsize = 8192; zfx->outbuf = xmalloc( zfx->outbufsize ); } static int do_compress( compress_filter_context_t *zfx, z_stream *zs, int flush, IOBUF a ) { int zrc; unsigned n; do { #ifndef __riscos__ zs->next_out = zfx->outbuf; #else /* __riscos__ */ zs->next_out = (Bytef *) zfx->outbuf; #endif /* __riscos__ */ zs->avail_out = zfx->outbufsize; if( DBG_FILTER ) log_debug("enter deflate: avail_in=%u, avail_out=%u, flush=%d\n", (unsigned)zs->avail_in, (unsigned)zs->avail_out, flush ); zrc = deflate( zs, flush ); if( zrc == Z_STREAM_END && flush == Z_FINISH ) ; else if( zrc != Z_OK ) { if( zs->msg ) log_fatal("zlib deflate problem: %s\n", zs->msg ); else log_fatal("zlib deflate problem: rc=%d\n", zrc ); } n = zfx->outbufsize - zs->avail_out; if( DBG_FILTER ) log_debug("leave deflate: " "avail_in=%u, avail_out=%u, n=%u, zrc=%d\n", (unsigned)zs->avail_in, (unsigned)zs->avail_out, (unsigned)n, zrc ); if( iobuf_write( a, zfx->outbuf, n ) ) { log_debug("deflate: iobuf_write failed\n"); return G10ERR_WRITE_FILE; } } while( zs->avail_in || (flush == Z_FINISH && zrc != Z_STREAM_END) ); return 0; } static void init_uncompress( compress_filter_context_t *zfx, z_stream *zs ) { int rc; /**************** * PGP uses a windowsize of 13 bits. Using a negative value for * it forces zlib not to expect a zlib header. This is a * undocumented feature Peter Gutmann told me about. * * We must use 15 bits for the inflator because CryptoEx uses 15 * bits thus the output would get scrambled w/o error indication * if we would use 13 bits. For the uncompressing this does not * matter at all. */ if( (rc = zfx->algo == 1? inflateInit2( zs, -15) : inflateInit( zs )) != Z_OK ) { log_fatal("zlib problem: %s\n", zs->msg? zs->msg : rc == Z_MEM_ERROR ? "out of core" : rc == Z_VERSION_ERROR ? "invalid lib version" : "unknown error" ); } zfx->inbufsize = 2048; zfx->inbuf = xmalloc( zfx->inbufsize ); zs->avail_in = 0; } static int do_uncompress( compress_filter_context_t *zfx, z_stream *zs, IOBUF a, size_t *ret_len ) { int zrc; int rc = 0; int leave = 0; size_t n; int nread, count; int refill = !zs->avail_in; if( DBG_FILTER ) log_debug("begin inflate: avail_in=%u, avail_out=%u, inbuf=%u\n", (unsigned)zs->avail_in, (unsigned)zs->avail_out, (unsigned)zfx->inbufsize ); do { if( zs->avail_in < zfx->inbufsize && refill ) { n = zs->avail_in; if( !n ) #ifndef __riscos__ zs->next_in = zfx->inbuf; #else /* __riscos__ */ zs->next_in = (Bytef *) zfx->inbuf; #endif /* __riscos__ */ count = zfx->inbufsize - n; nread = iobuf_read( a, zfx->inbuf + n, count ); if( nread == -1 ) nread = 0; n += nread; /* Algo 1 has no zlib header which requires us to to give * inflate an extra dummy byte to read. To be on the safe * side we allow for up to 4 ff bytes. */ if( nread < count && zfx->algo == 1 && zfx->algo1hack < 4) { *(zfx->inbuf + n) = 0xFF; zfx->algo1hack++; n++; leave = 1; } zs->avail_in = n; } refill = 1; if( DBG_FILTER ) log_debug("enter inflate: avail_in=%u, avail_out=%u\n", (unsigned)zs->avail_in, (unsigned)zs->avail_out); #ifdef Z_SYNC_FLUSH zrc = inflate( zs, Z_SYNC_FLUSH ); #else zrc = inflate( zs, Z_PARTIAL_FLUSH ); #endif if( DBG_FILTER ) log_debug("leave inflate: avail_in=%u, avail_out=%u, zrc=%d\n", (unsigned)zs->avail_in, (unsigned)zs->avail_out, zrc); if( zrc == Z_STREAM_END ) rc = -1; /* eof */ else if( zrc != Z_OK && zrc != Z_BUF_ERROR ) { if( zs->msg ) log_fatal("zlib inflate problem: %s\n", zs->msg ); else log_fatal("zlib inflate problem: rc=%d\n", zrc ); } } while (zs->avail_out && zrc != Z_STREAM_END && zrc != Z_BUF_ERROR && !leave); *ret_len = zfx->outbufsize - zs->avail_out; if( DBG_FILTER ) log_debug("do_uncompress: returning %u bytes\n", (unsigned)*ret_len ); return rc; } static int compress_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { size_t size = *ret_len; compress_filter_context_t *zfx = opaque; z_stream *zs = zfx->opaque; int rc=0; if( control == IOBUFCTRL_UNDERFLOW ) { if( !zfx->status ) { zs = zfx->opaque = xmalloc_clear( sizeof *zs ); init_uncompress( zfx, zs ); zfx->status = 1; } #ifndef __riscos__ zs->next_out = buf; #else /* __riscos__ */ zs->next_out = (Bytef *) buf; #endif /* __riscos__ */ zs->avail_out = size; zfx->outbufsize = size; /* needed only for calculation */ rc = do_uncompress( zfx, zs, a, ret_len ); } else if( control == IOBUFCTRL_FLUSH ) { if( !zfx->status ) { PACKET pkt; PKT_compressed cd; if(zfx->algo != COMPRESS_ALGO_ZIP && zfx->algo != COMPRESS_ALGO_ZLIB) BUG(); memset( &cd, 0, sizeof cd ); cd.len = 0; cd.algorithm = zfx->algo; init_packet( &pkt ); pkt.pkttype = PKT_COMPRESSED; pkt.pkt.compressed = &cd; if( build_packet( a, &pkt )) log_bug("build_packet(PKT_COMPRESSED) failed\n"); zs = zfx->opaque = xmalloc_clear( sizeof *zs ); init_compress( zfx, zs ); zfx->status = 2; } #ifndef __riscos__ zs->next_in = buf; #else /* __riscos__ */ zs->next_in = (Bytef *) buf; #endif /* __riscos__ */ zs->avail_in = size; rc = do_compress( zfx, zs, Z_NO_FLUSH, a ); } else if( control == IOBUFCTRL_FREE ) { if( zfx->status == 1 ) { inflateEnd(zs); xfree(zs); zfx->opaque = NULL; xfree(zfx->outbuf); zfx->outbuf = NULL; } else if( zfx->status == 2 ) { #ifndef __riscos__ zs->next_in = buf; #else /* __riscos__ */ zs->next_in = (Bytef *) buf; #endif /* __riscos__ */ zs->avail_in = 0; do_compress( zfx, zs, Z_FINISH, a ); deflateEnd(zs); xfree(zs); zfx->opaque = NULL; xfree(zfx->outbuf); zfx->outbuf = NULL; } if (zfx->release) zfx->release (zfx); } else if( control == IOBUFCTRL_DESC ) *(char**)buf = "compress_filter"; return rc; } static void release_context (compress_filter_context_t *ctx) { xfree (ctx); } /**************** * Handle a compressed packet */ int handle_compressed( void *procctx, PKT_compressed *cd, int (*callback)(IOBUF, void *), void *passthru ) { compress_filter_context_t *cfx; int rc; if(check_compress_algo(cd->algorithm)) return G10ERR_COMPR_ALGO; cfx = xmalloc_clear (sizeof *cfx); cfx->release = release_context; cfx->algo = cd->algorithm; push_compress_filter(cd->buf,cfx,cd->algorithm); if( callback ) rc = callback(cd->buf, passthru ); else rc = proc_packets(procctx, cd->buf); cd->buf = NULL; return rc; } void push_compress_filter(IOBUF out,compress_filter_context_t *zfx,int algo) { push_compress_filter2(out,zfx,algo,0); } void push_compress_filter2(IOBUF out,compress_filter_context_t *zfx, int algo,int rel) { if(algo>=0) zfx->algo=algo; else zfx->algo=DEFAULT_COMPRESS_ALGO; switch(zfx->algo) { case COMPRESS_ALGO_NONE: break; case COMPRESS_ALGO_ZIP: case COMPRESS_ALGO_ZLIB: iobuf_push_filter2(out,compress_filter,zfx,rel); break; #ifdef HAVE_BZIP2 case COMPRESS_ALGO_BZIP2: iobuf_push_filter2(out,compress_filter_bz2,zfx,rel); break; #endif default: BUG(); } } gnupg-1.4.20/g10/textfilter.c0000644000175000017500000001520412635262326012575 00000000000000/* textfilter.c * Copyright (C) 1998, 1999, 2000, 2001, 2004 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 3 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, see . */ #include #include #include #include #include #include #include "errors.h" #include "iobuf.h" #include "memory.h" #include "util.h" #include "filter.h" #include "i18n.h" #include "options.h" #include "status.h" #ifdef HAVE_DOSISH_SYSTEM #define LF "\r\n" #else #define LF "\n" #endif #define MAX_LINELEN 19995 /* a little bit smaller than in armor.c */ /* to make sure that a warning is displayed while */ /* creating a message */ static unsigned len_without_trailing_chars( byte *line, unsigned len, const char *trimchars ) { byte *p, *mark; unsigned n; for(mark=NULL, p=line, n=0; n < len; n++, p++ ) { if( strchr( trimchars, *p ) ) { if( !mark ) mark = p; } else mark = NULL; } return mark? (mark - line) : len; } static int standard( text_filter_context_t *tfx, IOBUF a, byte *buf, size_t size, size_t *ret_len) { int rc=0; size_t len = 0; unsigned maxlen; assert( size > 10 ); size -= 2; /* reserve 2 bytes to append CR,LF */ while( !rc && len < size ) { int lf_seen; while( len < size && tfx->buffer_pos < tfx->buffer_len ) buf[len++] = tfx->buffer[tfx->buffer_pos++]; if( len >= size ) continue; /* read the next line */ maxlen = MAX_LINELEN; tfx->buffer_pos = 0; tfx->buffer_len = iobuf_read_line( a, &tfx->buffer, &tfx->buffer_size, &maxlen ); if( !maxlen ) tfx->truncated++; if( !tfx->buffer_len ) { if( !len ) rc = -1; /* eof */ break; } lf_seen = tfx->buffer[tfx->buffer_len-1] == '\n'; /* The story behind this is that 2440 says that textmode hashes should canonicalize line endings to CRLF and remove spaces and tabs. 2440bis-12 says to just canonicalize to CRLF. 1.4.0 was released using the bis-12 behavior, but it was discovered that many mail clients do not canonicalize PGP/MIME signature text appropriately (and were relying on GnuPG to handle trailing spaces). So, we default to the 2440 behavior, but use the 2440bis-12 behavior if the user specifies --no-rfc2440-text. The default will be changed at some point in the future when the mail clients have been upgraded. Aside from PGP/MIME and broken mail clients, this makes no difference to any signatures in the real world except for a textmode detached signature. PGP always used the 2440bis-12 behavior (ignoring 2440 itself), so this actually makes us compatible with PGP textmode detached signatures for the first time. */ if(opt.rfc2440_text) tfx->buffer_len=trim_trailing_chars(tfx->buffer,tfx->buffer_len, " \t\r\n"); else tfx->buffer_len=trim_trailing_chars(tfx->buffer,tfx->buffer_len, "\r\n"); if( lf_seen ) { tfx->buffer[tfx->buffer_len++] = '\r'; tfx->buffer[tfx->buffer_len++] = '\n'; } } *ret_len = len; return rc; } /**************** * The filter is used to make canonical text: Lines are terminated by * CR, LF, trailing white spaces are removed. */ int text_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { size_t size = *ret_len; text_filter_context_t *tfx = opaque; int rc=0; if( control == IOBUFCTRL_UNDERFLOW ) { rc = standard( tfx, a, buf, size, ret_len ); } else if( control == IOBUFCTRL_FREE ) { if( tfx->truncated ) log_error(_("can't handle text lines longer than %d characters\n"), MAX_LINELEN ); xfree( tfx->buffer ); tfx->buffer = NULL; } else if( control == IOBUFCTRL_DESC ) *(char**)buf = "text_filter"; return rc; } /**************** * Copy data from INP to OUT and do some escaping if requested. * md is updated as required by rfc2440 */ int copy_clearsig_text( IOBUF out, IOBUF inp, MD_HANDLE md, int escape_dash, int escape_from, int pgp2mode ) { unsigned maxlen; byte *buffer = NULL; /* malloced buffer */ unsigned bufsize; /* and size of this buffer */ unsigned n; int truncated = 0; int pending_lf = 0; if( !opt.pgp2_workarounds ) pgp2mode = 0; if( !escape_dash ) escape_from = 0; write_status (STATUS_BEGIN_SIGNING); for(;;) { maxlen = MAX_LINELEN; n = iobuf_read_line( inp, &buffer, &bufsize, &maxlen ); if( !maxlen ) truncated++; if( !n ) break; /* read_line has returned eof */ /* update the message digest */ if( escape_dash ) { if( pending_lf ) { md_putc( md, '\r' ); md_putc( md, '\n' ); } md_write( md, buffer, len_without_trailing_chars( buffer, n, pgp2mode? " \r\n":" \t\r\n")); } else md_write( md, buffer, n ); pending_lf = buffer[n-1] == '\n'; /* write the output */ if( ( escape_dash && *buffer == '-') || ( escape_from && n > 4 && !memcmp(buffer, "From ", 5 ) ) ) { iobuf_put( out, '-' ); iobuf_put( out, ' ' ); } #if 0 /*defined(HAVE_DOSISH_SYSTEM)*/ /* We don't use this anymore because my interpretation of rfc2440 7.1 * is that there is no conversion needed. If one decides to * clearsign a unix file on a DOS box he will get a mixed line endings. * If at some point it turns out, that a conversion is a nice feature * we can make an option out of it. */ /* make sure the lines do end in CR,LF */ if( n > 1 && ( (buffer[n-2] == '\r' && buffer[n-1] == '\n' ) || (buffer[n-2] == '\n' && buffer[n-1] == '\r'))) { iobuf_write( out, buffer, n-2 ); iobuf_put( out, '\r'); iobuf_put( out, '\n'); } else if( n && buffer[n-1] == '\n' ) { iobuf_write( out, buffer, n-1 ); iobuf_put( out, '\r'); iobuf_put( out, '\n'); } else iobuf_write( out, buffer, n ); #else iobuf_write( out, buffer, n ); #endif } /* at eof */ if( !pending_lf ) { /* make sure that the file ends with a LF */ iobuf_writestr( out, LF ); if( !escape_dash ) md_putc( md, '\n' ); } if( truncated ) log_info(_("input line longer than %d characters\n"), MAX_LINELEN ); return 0; /* okay */ } gnupg-1.4.20/g10/Makefile.am0000644000175000017500000001011112635262326012263 00000000000000# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005 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 3 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, see . ## Process this file with automake to produce Makefile.in AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/intl @LIBUSB_CPPFLAGS@ # it seems that we can't use this with automake 1.5 #OMIT_DEPENDENCIES = zlib.h zconf.h if ! HAVE_DOSISH_SYSTEM AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\"" AM_CPPFLAGS += -DGNUPG_LIBEXECDIR="\"$(libexecdir)/@PACKAGE@\"" AM_CPPFLAGS += -DGNUPG_DATADIR="\"$(pkgdatadir)\"" AM_CPPFLAGS += -DGNUPG_LIBDIR="\"$(libdir)/@PACKAGE@\"" endif needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a other_libs = $(LIBICONV) $(DNSLIBS) $(LIBINTL) $(CAPLIBS) bin_PROGRAMS = gpg gpgv dist_pkgdata_DATA = options.skel if ENABLE_BZIP2_SUPPORT bzip2_source = compress-bz2.c else bzip2_source = endif common_source = \ global.h \ build-packet.c \ compress.c \ $(bzip2_source) \ filter.h \ free-packet.c \ getkey.c \ keydb.c keydb.h \ keyring.c keyring.h \ seskey.c \ kbnode.c \ main.h \ mainproc.c \ armor.c \ mdfilter.c \ textfilter.c \ progress.c \ misc.c \ options.h \ openfile.c \ keyid.c \ packet.h \ parse-packet.c \ status.c \ status.h \ plaintext.c \ sig-check.c \ keylist.c \ signal.c if ENABLE_CARD_SUPPORT card_support_source_gpg = card-util.c card_support_source_scd = \ app-common.h \ app-openpgp.c \ iso7816.c iso7816.h \ apdu.c apdu.h \ ccid-driver.c ccid-driver.h card_support_source_local = cardglue.c cardglue.h tlv.c tlv.h else card_support_source_gpg = card_support_source_scd = card_support_source_local = endif card_support_source = $(card_support_source_local) $(card_support_source_gpg) $(card_support_source_scd) gpg_SOURCES = gpg.c \ $(common_source) \ $(card_support_source) \ pkclist.c \ skclist.c \ pubkey-enc.c \ passphrase.c \ seckey-cert.c \ encr-data.c \ cipher.c \ encode.c \ sign.c \ verify.c \ revoke.c \ decrypt.c \ keyedit.c \ dearmor.c \ import.c \ export.c \ trustdb.c \ trustdb.h \ tdbdump.c \ tdbio.c \ tdbio.h \ delkey.c \ keygen.c \ pipemode.c \ helptext.c \ keyserver.c \ keyserver-internal.h \ photoid.c photoid.h \ exec.c exec.h gpgv_SOURCES = gpgv.c \ $(common_source) \ verify.c LDADD = $(needed_libs) $(other_libs) @ZLIBS@ @W32LIBS@ gpg_LDADD = $(LDADD) @LIBREADLINE@ @DLLIBS@ @NETLIBS@ @LIBUSB@ $(PROGRAMS): $(needed_libs) install-exec-hook: @set -e;\ if test -f $(DESTDIR)$(bindir)/gpgm ; then \ echo "removing obsolete gpgm binary" ; \ rm $(DESTDIR)$(bindir)/gpgm ; \ fi # Helper to update some source files. update-source-from-gnupg-2: @set -e; \ if test -d ../../gnupg-1.9/scd; then dir="../../gnupg-1.9"; \ elif test -d ../../gnupg/scd; then dir="../../gnupg"; \ else exit 1; \ fi; \ for i in $(card_support_source_scd); do \ cp $$dir/scd/$$i $$i; echo $$i; \ done ;\ for i in $(card_support_source_gpg); do \ cp $$dir/g10/$$i $$i; echo $$i; \ done ; \ echo "Please remember to update the ChangeLog accordingly!" gnupg-1.4.20/g10/kbnode.c0000644000175000017500000002154212635262326011647 00000000000000/* kbnode.c - keyblock node utility functions * Copyright (C) 1998, 1999, 2000, 2001, 2002, * 2005 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 3 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, see . */ #include #include #include #include #include #include "util.h" #include "memory.h" #include "packet.h" #include "keydb.h" #define USE_UNUSED_NODES 1 static KBNODE unused_nodes; static KBNODE alloc_node(void) { KBNODE n; n = unused_nodes; if( n ) unused_nodes = n->next; else n = xmalloc( sizeof *n ); n->next = NULL; n->pkt = NULL; n->flag = 0; n->private_flag=0; n->recno = 0; return n; } static void free_node( KBNODE n ) { if( n ) { #if USE_UNUSED_NODES n->next = unused_nodes; unused_nodes = n; #else xfree( n ); #endif } } KBNODE new_kbnode( PACKET *pkt ) { KBNODE n = alloc_node(); n->pkt = pkt; return n; } KBNODE clone_kbnode( KBNODE node ) { KBNODE n = alloc_node(); n->pkt = node->pkt; n->private_flag = node->private_flag | 2; /* mark cloned */ return n; } void release_kbnode( KBNODE n ) { KBNODE n2; while( n ) { n2 = n->next; if( !is_cloned_kbnode(n) ) { free_packet( n->pkt ); xfree( n->pkt ); } free_node( n ); n = n2; } } /**************** * Delete NODE. * Note: This only works with walk_kbnode!! */ void delete_kbnode( KBNODE node ) { node->private_flag |= 1; } /**************** * Append NODE to ROOT. ROOT must exist! */ void add_kbnode( KBNODE root, KBNODE node ) { KBNODE n1; for(n1=root; n1->next; n1 = n1->next) ; n1->next = node; } /**************** * Insert NODE into the list after root but before a packet which is not of * type PKTTYPE * (only if PKTTYPE != 0) */ void insert_kbnode( KBNODE root, KBNODE node, int pkttype ) { if( !pkttype ) { node->next = root->next; root->next = node; } else { KBNODE n1; for(n1=root; n1->next; n1 = n1->next) if( pkttype != n1->next->pkt->pkttype ) { node->next = n1->next; n1->next = node; return; } /* no such packet, append */ node->next = NULL; n1->next = node; } } /**************** * Find the previous node (if PKTTYPE = 0) or the previous node * with pkttype PKTTYPE in the list starting with ROOT of NODE. */ KBNODE find_prev_kbnode( KBNODE root, KBNODE node, int pkttype ) { KBNODE n1; for (n1=NULL; root && root != node; root = root->next ) { if (!pkttype ||root->pkt->pkttype == pkttype) n1 = root; } return n1; } /**************** * Ditto, but find the next packet. The behaviour is trivial if * PKTTYPE is 0 but if it is specified, the next node with a packet * of this type is returned. The function has some knowledge about * the valid ordering of packets: e.g. if the next signature packet * is requested, the function will not return one if it encounters * a user-id. */ KBNODE find_next_kbnode( KBNODE node, int pkttype ) { for( node=node->next ; node; node = node->next ) { if( !pkttype ) return node; else if( pkttype == PKT_USER_ID && ( node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_SECRET_KEY ) ) return NULL; else if( pkttype == PKT_SIGNATURE && ( node->pkt->pkttype == PKT_USER_ID || node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_SECRET_KEY ) ) return NULL; else if( node->pkt->pkttype == pkttype ) return node; } return NULL; } KBNODE find_kbnode( KBNODE node, int pkttype ) { for( ; node; node = node->next ) { if( node->pkt->pkttype == pkttype ) return node; } return NULL; } /**************** * Walk through a list of kbnodes. This function returns * the next kbnode for each call; before using the function the first * time, the caller must set CONTEXT to NULL (This has simply the effect * to start with ROOT). */ KBNODE walk_kbnode( KBNODE root, KBNODE *context, int all ) { KBNODE n; do { if( !*context ) { *context = root; n = root; } else { n = (*context)->next; *context = n; } } while( !all && n && is_deleted_kbnode(n) ); return n; } void clear_kbnode_flags( KBNODE n ) { for( ; n; n = n->next ) { n->flag = 0; } } /**************** * Commit changes made to the kblist at ROOT. Note that ROOT my change, * and it is therefore passed by reference. * The function has the effect of removing all nodes marked as deleted. * returns true if any node has been changed */ int commit_kbnode( KBNODE *root ) { KBNODE n, nl; int changed = 0; for( n = *root, nl=NULL; n; n = nl->next ) { if( is_deleted_kbnode(n) ) { if( n == *root ) *root = nl = n->next; else nl->next = n->next; if( !is_cloned_kbnode(n) ) { free_packet( n->pkt ); xfree( n->pkt ); } free_node( n ); changed = 1; } else nl = n; } return changed; } void remove_kbnode( KBNODE *root, KBNODE node ) { KBNODE n, nl; for( n = *root, nl=NULL; n; n = nl->next ) { if( n == node ) { if( n == *root ) *root = nl = n->next; else nl->next = n->next; if( !is_cloned_kbnode(n) ) { free_packet( n->pkt ); xfree( n->pkt ); } free_node( n ); } else nl = n; } } /**************** * Move NODE behind right after WHERE or to the beginning if WHERE is NULL. */ void move_kbnode( KBNODE *root, KBNODE node, KBNODE where ) { KBNODE tmp, prev; if( !root || !*root || !node ) return; /* sanity check */ for( prev = *root; prev && prev->next != node; prev = prev->next ) ; if( !prev ) return; /* node is not in the list */ if( !where ) { /* move node before root */ if( node == *root ) /* move to itself */ return; prev->next = node->next; node->next = *root; *root = node; return; } /* move it after where */ if( node == where ) return; tmp = node->next; node->next = where->next; where->next = node; prev->next = tmp; } void dump_kbnode( KBNODE node ) { for(; node; node = node->next ) { const char *s; switch( node->pkt->pkttype ) { case 0: s="empty"; break; case PKT_PUBLIC_KEY: s="public-key"; break; case PKT_SECRET_KEY: s="secret-key"; break; case PKT_SECRET_SUBKEY: s= "secret-subkey"; break; case PKT_PUBKEY_ENC: s="public-enc"; break; case PKT_SIGNATURE: s="signature"; break; case PKT_ONEPASS_SIG: s="onepass-sig"; break; case PKT_USER_ID: s="user-id"; break; case PKT_PUBLIC_SUBKEY: s="public-subkey"; break; case PKT_COMMENT: s="comment"; break; case PKT_RING_TRUST: s="trust"; break; case PKT_PLAINTEXT: s="plaintext"; break; case PKT_COMPRESSED: s="compressed"; break; case PKT_ENCRYPTED: s="encrypted"; break; case PKT_GPG_CONTROL: s="gpg-control"; break; default: s="unknown"; break; } fprintf(stderr, "node %p %02x/%02x type=%s", node, node->flag, node->private_flag, s); if( node->pkt->pkttype == PKT_USER_ID ) { PKT_user_id *uid = node->pkt->pkt.user_id; fputs(" \"", stderr); print_string( stderr, uid->name, uid->len, 0 ); fprintf (stderr, "\" %c%c%c%c\n", uid->is_expired? 'e':'.', uid->is_revoked? 'r':'.', uid->created? 'v':'.', uid->is_primary? 'p':'.' ); } else if( node->pkt->pkttype == PKT_SIGNATURE ) { fprintf(stderr, " class=%02x keyid=%08lX ts=%lu\n", node->pkt->pkt.signature->sig_class, (ulong)node->pkt->pkt.signature->keyid[1], (ulong)node->pkt->pkt.signature->timestamp); } else if( node->pkt->pkttype == PKT_GPG_CONTROL ) { fprintf(stderr, " ctrl=%d len=%u\n", node->pkt->pkt.gpg_control->control, (unsigned int)node->pkt->pkt.gpg_control->datalen); } else if( node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { PKT_public_key *pk = node->pkt->pkt.public_key; fprintf(stderr, " keyid=%08lX a=%d u=%d %c%c%c%c\n", (ulong)keyid_from_pk( pk, NULL ), pk->pubkey_algo, pk->pubkey_usage, pk->has_expired? 'e':'.', pk->is_revoked? 'r':'.', pk->is_valid? 'v':'.', pk->mdc_feature? 'm':'.'); } else fputs("\n", stderr); } } gnupg-1.4.20/g10/passphrase.c0000644000175000017500000006572512635262326012571 00000000000000/* passphrase.c - Get a passphrase * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006 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 3 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, see . */ #include #include #include #include #include #include #include #ifdef ENABLE_AGENT_SUPPORT # if !defined(HAVE_DOSISH_SYSTEM) && !defined(__riscos__) # include # include # endif #endif #if defined (_WIN32) #include #endif #include #ifdef HAVE_LOCALE_H #include #endif #ifdef HAVE_LANGINFO_CODESET #include #endif #include "util.h" #include "memory.h" #include "options.h" #include "ttyio.h" #include "cipher.h" #include "keydb.h" #include "main.h" #include "i18n.h" #include "status.h" #ifdef ENABLE_AGENT_SUPPORT #include "assuan.h" #endif /*ENABLE_AGENT_SUPPORT*/ static char *fd_passwd = NULL; static char *next_pw = NULL; static char *last_pw = NULL; static void hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create ); int have_static_passphrase() { if ( opt.use_agent ) return 0; return !!fd_passwd; } /**************** * Set the passphrase to be used for the next query and only for the next * one. */ void set_next_passphrase( const char *s ) { xfree(next_pw); next_pw = NULL; if( s ) { next_pw = xmalloc_secure( strlen(s)+1 ); strcpy(next_pw, s ); } } /**************** * Get the last passphrase used in passphrase_to_dek. * Note: This removes the passphrase from this modules and * the caller must free the result. May return NULL: */ char * get_last_passphrase() { char *p = last_pw; last_pw = NULL; return p; } /* As if we had used the passphrase - make it the last_pw. */ void next_to_last_passphrase(void) { if(next_pw) { last_pw=next_pw; next_pw=NULL; } } /* Here's an interesting question: since this passphrase was passed in on the command line, is there really any point in using secure memory for it? I'm going with 'yes', since it doesn't hurt, and might help in some small way (swapping). */ void set_passphrase_from_string(const char *pass) { xfree( fd_passwd ); fd_passwd = xmalloc_secure(strlen(pass)+1); strcpy(fd_passwd,pass); } void read_passphrase_from_fd( int fd ) { int i, len; char *pw; if ( opt.use_agent ) { /* Not used but we have to do a dummy read, so that it won't end up at the begin of the message if the quite usual trick to prepend the passphtrase to the message is used. */ char buf[1]; while (!(read (fd, buf, 1) != 1 || *buf == '\n' )) ; *buf = 0; return; } if (!opt.batch && !opt.quiet) tty_printf("Reading passphrase from file descriptor %d ...", fd ); for (pw = NULL, i = len = 100; ; i++ ) { if (i >= len-1 ) { char *pw2 = pw; len += 100; pw = xmalloc_secure( len ); if( pw2 ) { memcpy(pw, pw2, i ); xfree (pw2); } else i=0; } if (read( fd, pw+i, 1) != 1 || pw[i] == '\n' ) break; } pw[i] = 0; if (!opt.batch) tty_printf("\b\b\b \n" ); xfree( fd_passwd ); fd_passwd = pw; } #ifdef ENABLE_AGENT_SUPPORT /* Send one option to the gpg-agent. */ static int agent_send_option (assuan_context_t ctx, const char *name, const char *value) { char *line; int rc; if (!value || !*value) return 0; /* Avoid sending empty option values. */ line = xmalloc (7 + strlen (name) + 1 + strlen (value) + 1); strcpy (stpcpy (stpcpy (stpcpy (line, "OPTION "), name), "="), value); rc = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); xfree (line); return rc? -1 : 0; } /* Send all required options to the gpg-agent. */ static int agent_send_all_options (assuan_context_t ctx) { char *dft_display = NULL; const char *dft_ttyname = NULL; char *dft_ttytype = NULL; char *dbus_session_address = NULL; char *old_lc = NULL; char *dft_lc = NULL; int rc = 0; dft_display = getenv ("DISPLAY"); if (opt.display || dft_display) { if (agent_send_option (ctx, "display", opt.display ? opt.display : dft_display)) return -1; } dbus_session_address = getenv ("DBUS_SESSION_BUS_ADDRESS"); if (dbus_session_address) { if (agent_send_option (ctx, "putenv=DBUS_SESSION_BUS_ADDRESS", dbus_session_address)) return -1; } if (!opt.ttyname) { const char *tmp; dft_ttyname = getenv ("GPG_TTY"); if ((!dft_ttyname || !*dft_ttyname) && (tmp=ttyname (0))) dft_ttyname = tmp; if ((!dft_ttyname || !*dft_ttyname) && (tmp=tty_get_ttyname ())) dft_ttyname = tmp; } if (opt.ttyname || dft_ttyname) { if (agent_send_option (ctx, "ttyname", opt.ttyname ? opt.ttyname : dft_ttyname)) return -1; } dft_ttytype = getenv ("TERM"); if (opt.ttytype || (dft_ttyname && dft_ttytype)) { if (agent_send_option (ctx, "ttytype", opt.ttyname ? opt.ttytype : dft_ttytype)) return -1; } #if defined(HAVE_SETLOCALE) && defined(LC_CTYPE) old_lc = setlocale (LC_CTYPE, NULL); if (old_lc) old_lc = xstrdup (old_lc); dft_lc = setlocale (LC_CTYPE, ""); #endif if (opt.lc_ctype || (dft_ttyname && dft_lc)) { rc = agent_send_option (ctx, "lc-ctype", opt.lc_ctype ? opt.lc_ctype : dft_lc); } #if defined(HAVE_SETLOCALE) && defined(LC_CTYPE) if (old_lc) { setlocale (LC_CTYPE, old_lc); xfree (old_lc); } #endif if (rc) return rc; #if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES) old_lc = setlocale (LC_MESSAGES, NULL); if (old_lc) old_lc = xstrdup (old_lc); dft_lc = setlocale (LC_MESSAGES, ""); #endif if (opt.lc_messages || (dft_ttyname && dft_lc)) { rc = agent_send_option (ctx, "lc-messages", opt.lc_messages ? opt.lc_messages : dft_lc); } #if defined(HAVE_SETLOCALE) && defined(LC_MESSAGES) if (old_lc) { setlocale (LC_MESSAGES, old_lc); xfree (old_lc); } #endif return rc; } #endif /*ENABLE_AGENT_SUPPORT*/ /* * Open a connection to the agent and initializes the connection. * Returns: -1 on error; on success an Assuan context for that * connection is returned. With TRY set to true, no error messages * are printed and the use of the agent won't get disabled on failure. * If ORIG_CODESET is not NULL, the function will swithc the codeset * back to that one before printing error messages. */ #ifdef ENABLE_AGENT_SUPPORT assuan_context_t agent_open (int try, const char *orig_codeset) { int rc; assuan_context_t ctx; char *infostr, *p; int prot; int pid; if (opt.gpg_agent_info) infostr = xstrdup (opt.gpg_agent_info); else { infostr = getenv ( "GPG_AGENT_INFO" ); if (!infostr || !*infostr) { if (!try) { #ifdef ENABLE_NLS if (orig_codeset) bind_textdomain_codeset (PACKAGE, orig_codeset); #endif /*ENABLE_NLS*/ log_info (_("gpg-agent is not available in this session\n")); opt.use_agent = 0; } return NULL; } infostr = xstrdup ( infostr ); } if ( !(p = strchr (infostr, PATHSEP_C)) || p == infostr) { if (!try) { #ifdef ENABLE_NLS if (orig_codeset) bind_textdomain_codeset (PACKAGE, orig_codeset); #endif /*ENABLE_NLS*/ log_error ( _("malformed GPG_AGENT_INFO environment variable\n")); opt.use_agent = 0; } xfree (infostr); return NULL; } *p++ = 0; pid = atoi (p); while (*p && *p != PATHSEP_C) p++; prot = *p? atoi (p+1) : 0; if (prot != 1) { if (!try) { #ifdef ENABLE_NLS if (orig_codeset) bind_textdomain_codeset (PACKAGE, orig_codeset); #endif /*ENABLE_NLS*/ log_error (_("gpg-agent protocol version %d is not supported\n"), prot); opt.use_agent = 0; } xfree (infostr); return NULL; } rc = assuan_socket_connect (&ctx, infostr, pid); if (rc) { if (!try) { #ifdef ENABLE_NLS if (orig_codeset) bind_textdomain_codeset (PACKAGE, orig_codeset); #endif /*ENABLE_NLS*/ log_info ( _("can't connect to `%s': %s\n"), infostr, assuan_strerror (rc)); opt.use_agent = 0; } xfree (infostr ); return NULL; } xfree (infostr); if (agent_send_all_options (ctx)) { if (!try) { #ifdef ENABLE_NLS if (orig_codeset) bind_textdomain_codeset (PACKAGE, orig_codeset); #endif /*ENABLE_NLS*/ log_error (_("problem with the agent - disabling agent use\n")); opt.use_agent = 0; } assuan_disconnect (ctx); return NULL; } return ctx; } #endif/*ENABLE_AGENT_SUPPORT*/ #ifdef ENABLE_AGENT_SUPPORT void agent_close (assuan_context_t ctx) { assuan_disconnect (ctx); } #endif /*ENABLE_AGENT_SUPPORT*/ /* Copy the text ATEXT into the buffer P and do plus '+' and percent escaping. Note that the provided buffer needs to be 3 times the size of ATEXT plus 1. Returns a pointer to the leading Nul in P. */ #ifdef ENABLE_AGENT_SUPPORT static char * percent_plus_escape (char *p, const char *atext) { const unsigned char *s; for (s=atext; *s; s++) { if (*s < ' ' || *s == '+') { sprintf (p, "%%%02X", *s); p += 3; } else if (*s == ' ') *p++ = '+'; else *p++ = *s; } *p = 0; return p; } #endif /*ENABLE_AGENT_SUPPORT*/ #ifdef ENABLE_AGENT_SUPPORT /* Object for the agent_okay_cb function. */ struct agent_okay_cb_s { char *pw; }; /* A callback used to get the passphrase from the okay line. See agent-get_passphrase for details. LINE is the rest of the OK status line without leading white spaces. */ static assuan_error_t agent_okay_cb (void *opaque, const char *line) { struct agent_okay_cb_s *parm = opaque; int i; /* Note: If the malloc below fails we won't be able to wipe the memory at LINE given the current implementation of the Assuan code. There is no easy ay around this w/o adding a lot of more memory function code to allow wiping arbitrary stuff on memory failure. */ parm->pw = xmalloc_secure (strlen (line)/2+2); for (i=0; hexdigitp (line) && hexdigitp (line+1); line += 2) parm->pw[i++] = xtoi_2 (line); parm->pw[i] = 0; return 0; } #endif /*ENABLE_AGENT_SUPPORT*/ /* * Ask the GPG Agent for the passphrase. * Mode 0: Allow cached passphrase * 1: No cached passphrase FIXME: Not really implemented * 2: Ditto, but change the text to "repeat entry" * * Note that TRYAGAIN_TEXT must not be translated. If canceled is not * NULL, the function does set it to 1 if the user canceled the * operation. If CACHEID is not NULL, it will be used as the cacheID * for the gpg-agent; if is NULL and a key fingerprint can be * computed, this will be used as the cacheid. */ static char * agent_get_passphrase ( u32 *keyid, int mode, const char *cacheid, const char *tryagain_text, const char *custom_description, const char *custom_prompt, int *canceled) { #ifdef ENABLE_AGENT_SUPPORT char *atext = NULL; assuan_context_t ctx = NULL; char *pw = NULL; PKT_public_key *pk = xmalloc_clear( sizeof *pk ); byte fpr[MAX_FINGERPRINT_LEN]; int have_fpr = 0; char *orig_codeset = NULL; if (canceled) *canceled = 0; #if MAX_FINGERPRINT_LEN < 20 #error agent needs a 20 byte fingerprint #endif memset (fpr, 0, MAX_FINGERPRINT_LEN ); if( keyid && get_pubkey( pk, keyid ) ) { if (pk) free_public_key( pk ); pk = NULL; /* oops: no key for some reason */ } #ifdef ENABLE_NLS /* The Assuan agent protocol requires us to transmit utf-8 strings */ orig_codeset = bind_textdomain_codeset (PACKAGE, NULL); #ifdef HAVE_LANGINFO_CODESET if (!orig_codeset) orig_codeset = nl_langinfo (CODESET); #endif if (orig_codeset) { /* We only switch when we are able to restore the codeset later. */ orig_codeset = xstrdup (orig_codeset); if (!bind_textdomain_codeset (PACKAGE, "utf-8")) orig_codeset = NULL; } #endif if ( !(ctx = agent_open (0, orig_codeset)) ) goto failure; if (custom_description) atext = native_to_utf8 (custom_description); else if ( !mode && pk && keyid ) { char *uid; size_t uidlen; const char *algo_name = pubkey_algo_to_string ( pk->pubkey_algo ); const char *timestr; char *maink; if ( !algo_name ) algo_name = "?"; #define KEYIDSTRING _(" (main key ID %s)") maink = xmalloc ( strlen (KEYIDSTRING) + keystrlen() + 20 ); if( keyid[2] && keyid[3] && keyid[0] != keyid[2] && keyid[1] != keyid[3] ) sprintf( maink, KEYIDSTRING, keystr(&keyid[2]) ); else *maink = 0; uid = get_user_id ( keyid, &uidlen ); timestr = strtimestamp (pk->timestamp); #undef KEYIDSTRING #define PROMPTSTRING _("You need a passphrase to unlock the secret" \ " key for user:\n" \ "\"%.*s\"\n" \ "%u-bit %s key, ID %s, created %s%s\n" ) atext = xmalloc ( 100 + strlen (PROMPTSTRING) + uidlen + 15 + strlen(algo_name) + keystrlen() + strlen (timestr) + strlen (maink) ); sprintf (atext, PROMPTSTRING, (int)uidlen, uid, nbits_from_pk (pk), algo_name, keystr(&keyid[0]), timestr, maink ); xfree (uid); xfree (maink); #undef PROMPTSTRING { size_t dummy; fingerprint_from_pk( pk, fpr, &dummy ); have_fpr = 1; } } else if (mode == 2 ) atext = xstrdup ( _("Repeat passphrase\n") ); else atext = xstrdup ( _("Enter passphrase\n") ); { char *line, *p; int i, rc; struct agent_okay_cb_s okay_cb_parm; if (!tryagain_text) tryagain_text = "X"; else tryagain_text = _(tryagain_text); /* We allocate 23 times the needed space for thye texts so that there is enough space for escaping. */ line = xmalloc (15 + 46 + 3*strlen (atext) + 3*strlen (custom_prompt? custom_prompt:"") + (cacheid? (3*strlen (cacheid)): 0) + 3*strlen (tryagain_text) + 1); strcpy (line, "GET_PASSPHRASE "); p = line+15; if (!mode && cacheid) { p = percent_plus_escape (p, cacheid); } else if (!mode && have_fpr) { for (i=0; i < 20; i++, p +=2 ) sprintf (p, "%02X", fpr[i]); } else *p++ = 'X'; /* No caching. */ *p++ = ' '; p = percent_plus_escape (p, tryagain_text); *p++ = ' '; /* The prompt. */ if (custom_prompt) { char *tmp = native_to_utf8 (custom_prompt); p = percent_plus_escape (p, tmp); xfree (tmp); } else *p++ = 'X'; /* Use the standard prompt. */ *p++ = ' '; /* Copy description. */ percent_plus_escape (p, atext); /* Call gpg-agent. */ memset (&okay_cb_parm, 0, sizeof okay_cb_parm); rc = assuan_transact2 (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL, agent_okay_cb, &okay_cb_parm); xfree (line); xfree (atext); atext = NULL; if (!rc) { assert (okay_cb_parm.pw); pw = okay_cb_parm.pw; agent_close (ctx); if (pk) free_public_key( pk ); #ifdef ENABLE_NLS if (orig_codeset) bind_textdomain_codeset (PACKAGE, orig_codeset); #endif xfree (orig_codeset); return pw; } else if (rc && (rc & 0xffff) == 99) { /* 99 is GPG_ERR_CANCELED. */ log_info (_("cancelled by user\n") ); if (canceled) *canceled = 1; } else { log_error (_("problem with the agent - disabling agent use\n")); opt.use_agent = 0; } } failure: #ifdef ENABLE_NLS if (orig_codeset) { bind_textdomain_codeset (PACKAGE, orig_codeset); xfree (orig_codeset); } #endif xfree (atext); agent_close (ctx); xfree (pw ); if (pk) free_public_key( pk ); #endif /*ENABLE_AGENT_SUPPORT*/ return NULL; } /* * Clear the cached passphrase. If CACHEID is not NULL, it will be * used instead of a cache ID derived from KEYID. */ void passphrase_clear_cache ( u32 *keyid, const char *cacheid, int algo ) { #ifdef ENABLE_AGENT_SUPPORT assuan_context_t ctx = NULL; PKT_public_key *pk; byte fpr[MAX_FINGERPRINT_LEN]; #if MAX_FINGERPRINT_LEN < 20 #error agent needs a 20 byte fingerprint #endif if (!opt.use_agent) return; if (!cacheid) { pk = xcalloc (1, sizeof *pk); memset (fpr, 0, MAX_FINGERPRINT_LEN ); if( !keyid || get_pubkey( pk, keyid ) ) { goto failure; /* oops: no key for some reason */ } { size_t dummy; fingerprint_from_pk( pk, fpr, &dummy ); } } else pk = NULL; if ( !(ctx = agent_open (0, NULL)) ) goto failure; { char *line, *p; int i, rc; if (cacheid) { line = xmalloc (17 + 3*strlen (cacheid) + 2); strcpy (line, "CLEAR_PASSPHRASE "); p = line+17; p = percent_plus_escape (p, cacheid); } else { line = xmalloc (17 + 40 + 2); strcpy (line, "CLEAR_PASSPHRASE "); p = line+17; for (i=0; i < 20; i++, p +=2 ) sprintf (p, "%02X", fpr[i]); } *p = 0; rc = assuan_transact (ctx, line, NULL, NULL, NULL, NULL, NULL, NULL); xfree (line); if (rc) { log_error (_("problem with the agent - disabling agent use\n")); opt.use_agent = 0; } } failure: agent_close (ctx); if (pk) free_public_key( pk ); #endif /*ENABLE_AGENT_SUPPORT*/ } /**************** * Ask for a passphrase and return that string. */ char * ask_passphrase (const char *description, const char *tryagain_text, const char *promptid, const char *prompt, const char *cacheid, int *canceled) { char *pw = NULL; if (canceled) *canceled = 0; if (!opt.batch && description) { if (strchr (description, '%')) { char *tmp = unescape_percent_string (description); tty_printf ("\n%s\n", tmp); xfree (tmp); } else tty_printf ("\n%s\n",description); } agent_died: if ( opt.use_agent ) { pw = agent_get_passphrase (NULL, 0, cacheid, tryagain_text, description, prompt, canceled ); if (!pw) { if (!opt.use_agent) goto agent_died; pw = NULL; } } else if (fd_passwd) { pw = xmalloc_secure (strlen(fd_passwd)+1); strcpy (pw, fd_passwd); } else if (opt.batch) { log_error(_("can't query passphrase in batch mode\n")); pw = NULL; } else { if (tryagain_text) tty_printf(_("%s.\n"), tryagain_text); pw = cpr_get_hidden(promptid? promptid : "passphrase.ask", prompt?prompt : _("Enter passphrase: ") ); tty_kill_prompt(); } if (!pw || !*pw) write_status( STATUS_MISSING_PASSPHRASE ); return pw; } /* Return a new DEK object Using the string-to-key sepcifier S2K. Use * KEYID and PUBKEY_ALGO to prompt the user. MODE 0: Allow cached passphrase 1: Ignore cached passphrase 2: Ditto, but change the text to "repeat entry" */ DEK * passphrase_to_dek( u32 *keyid, int pubkey_algo, int cipher_algo, STRING2KEY *s2k, int mode, const char *tryagain_text, int *canceled) { char *pw = NULL; DEK *dek; STRING2KEY help_s2k; if (canceled) *canceled = 0; if( !s2k ) { /* This is used for the old rfc1991 mode * Note: This must match the code in encode.c with opt.rfc1991 set */ s2k = &help_s2k; s2k->mode = 0; s2k->hash_algo = S2K_DIGEST_ALGO; } /* If we do not have a passphrase available in NEXT_PW and status information are request, we print them now. */ if( !next_pw && is_status_enabled() ) { char buf[50]; if( keyid ) { u32 used_kid[2]; char *us; if( keyid[2] && keyid[3] ) { used_kid[0] = keyid[2]; used_kid[1] = keyid[3]; } else { used_kid[0] = keyid[0]; used_kid[1] = keyid[1]; } us = get_long_user_id_string( keyid ); write_status_text( STATUS_USERID_HINT, us ); xfree(us); sprintf( buf, "%08lX%08lX %08lX%08lX %d 0", (ulong)keyid[0], (ulong)keyid[1], (ulong)used_kid[0], (ulong)used_kid[1], pubkey_algo ); write_status_text( STATUS_NEED_PASSPHRASE, buf ); } else { sprintf( buf, "%d %d %d", cipher_algo, s2k->mode, s2k->hash_algo ); write_status_text( STATUS_NEED_PASSPHRASE_SYM, buf ); } } /* If we do have a keyID, we do not have a passphrase available in NEXT_PW, we are not running in batch mode and we do not want to ignore the passphrase cache (mode!=1), print a prompt with information on that key. */ if( keyid && !opt.batch && !next_pw && mode!=1 ) { PKT_public_key *pk = xmalloc_clear( sizeof *pk ); char *p; p=get_user_id_native(keyid); tty_printf("\n"); tty_printf(_("You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n"),p); xfree(p); if( !get_pubkey( pk, keyid ) ) { const char *s = pubkey_algo_to_string( pk->pubkey_algo ); tty_printf( _("%u-bit %s key, ID %s, created %s"), nbits_from_pk( pk ), s?s:"?", keystr(keyid), strtimestamp(pk->timestamp) ); if( keyid[2] && keyid[3] && keyid[0] != keyid[2] && keyid[1] != keyid[3] ) { if(keystrlen()>10) { tty_printf("\n"); tty_printf(_(" (subkey on main key ID %s)"), keystr(&keyid[2]) ); } else tty_printf( _(" (main key ID %s)"), keystr(&keyid[2]) ); } tty_printf("\n"); } tty_printf("\n"); if (pk) free_public_key( pk ); } agent_died: if( next_pw ) { /* Simply return the passphrase we already have in NEXT_PW. */ pw = next_pw; next_pw = NULL; } else if ( opt.use_agent ) { /* Divert to the gpg-agent. */ pw = agent_get_passphrase ( keyid, mode == 2? 1: 0, NULL, tryagain_text, NULL, NULL, canceled ); if (!pw) { if (!opt.use_agent) goto agent_died; pw = xstrdup (""); } if( *pw && mode == 2 ) { int i; for(i=0;ialgo = cipher_algo; if( (!pw || !*pw) && mode == 2 ) dek->keylen = 0; else hash_passphrase( dek, pw, s2k, mode==2 ); xfree(last_pw); last_pw = pw; return dek; } /**************** * Hash a passphrase using the supplied s2k. If create is true, create * a new salt or what else must be filled into the s2k for a new key. * always needs: dek->algo, s2k->mode, s2k->hash_algo. */ static void hash_passphrase( DEK *dek, char *pw, STRING2KEY *s2k, int create ) { MD_HANDLE md; int pass, i; int used = 0; int pwlen = strlen(pw); assert( s2k->hash_algo ); dek->keylen = cipher_get_keylen( dek->algo ) / 8; if( !(dek->keylen > 0 && dek->keylen <= DIM(dek->key)) ) BUG(); md = md_open( s2k->hash_algo, 1); for(pass=0; used < dek->keylen ; pass++ ) { if( pass ) { md_reset(md); for(i=0; i < pass; i++ ) /* preset the hash context */ md_putc(md, 0 ); } if( s2k->mode == 1 || s2k->mode == 3 ) { int len2 = pwlen + 8; ulong count = len2; if( create && !pass ) { randomize_buffer(s2k->salt, 8, 1); if( s2k->mode == 3 ) s2k->count = opt.s2k_count; } if( s2k->mode == 3 ) { count = S2K_DECODE_COUNT(s2k->count); if( count < len2 ) count = len2; } /* a little bit complicated because we need a ulong for count */ while( count > len2 ) { /* maybe iterated+salted */ md_write( md, s2k->salt, 8 ); md_write( md, pw, pwlen ); count -= len2; } if( count < 8 ) md_write( md, s2k->salt, count ); else { md_write( md, s2k->salt, 8 ); count -= 8; md_write( md, pw, count ); } } else md_write( md, pw, pwlen ); md_final( md ); i = md_digest_length( s2k->hash_algo ); if( i > dek->keylen - used ) i = dek->keylen - used; memcpy( dek->key+used, md_read(md, s2k->hash_algo), i ); used += i; } md_close(md); } gnupg-1.4.20/g10/Makefile.in0000644000175000017500000010526512635457153012317 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005 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 3 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, see . VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ # it seems that we can't use this with automake 1.5 #OMIT_DEPENDENCIES = zlib.h zconf.h @HAVE_DOSISH_SYSTEM_FALSE@am__append_1 = \ @HAVE_DOSISH_SYSTEM_FALSE@ -DLOCALEDIR="\"$(localedir)\"" \ @HAVE_DOSISH_SYSTEM_FALSE@ -DGNUPG_LIBEXECDIR="\"$(libexecdir)/@PACKAGE@\"" \ @HAVE_DOSISH_SYSTEM_FALSE@ -DGNUPG_DATADIR="\"$(pkgdatadir)\"" \ @HAVE_DOSISH_SYSTEM_FALSE@ -DGNUPG_LIBDIR="\"$(libdir)/@PACKAGE@\"" bin_PROGRAMS = gpg$(EXEEXT) gpgv$(EXEEXT) subdir = g10 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs \ $(top_srcdir)/scripts/depcomp $(dist_pkgdata_DATA) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)" PROGRAMS = $(bin_PROGRAMS) am__gpg_SOURCES_DIST = gpg.c global.h build-packet.c compress.c \ compress-bz2.c filter.h free-packet.c getkey.c keydb.c keydb.h \ keyring.c keyring.h seskey.c kbnode.c main.h mainproc.c \ armor.c mdfilter.c textfilter.c progress.c misc.c options.h \ openfile.c keyid.c packet.h parse-packet.c status.c status.h \ plaintext.c sig-check.c keylist.c signal.c cardglue.c \ cardglue.h tlv.c tlv.h card-util.c app-common.h app-openpgp.c \ iso7816.c iso7816.h apdu.c apdu.h ccid-driver.c ccid-driver.h \ pkclist.c skclist.c pubkey-enc.c passphrase.c seckey-cert.c \ encr-data.c cipher.c encode.c sign.c verify.c revoke.c \ decrypt.c keyedit.c dearmor.c import.c export.c trustdb.c \ trustdb.h tdbdump.c tdbio.c tdbio.h delkey.c keygen.c \ pipemode.c helptext.c keyserver.c keyserver-internal.h \ photoid.c photoid.h exec.c exec.h @ENABLE_BZIP2_SUPPORT_TRUE@am__objects_1 = compress-bz2.$(OBJEXT) am__objects_2 = build-packet.$(OBJEXT) compress.$(OBJEXT) \ $(am__objects_1) free-packet.$(OBJEXT) getkey.$(OBJEXT) \ keydb.$(OBJEXT) keyring.$(OBJEXT) seskey.$(OBJEXT) \ kbnode.$(OBJEXT) mainproc.$(OBJEXT) armor.$(OBJEXT) \ mdfilter.$(OBJEXT) textfilter.$(OBJEXT) progress.$(OBJEXT) \ misc.$(OBJEXT) openfile.$(OBJEXT) keyid.$(OBJEXT) \ parse-packet.$(OBJEXT) status.$(OBJEXT) plaintext.$(OBJEXT) \ sig-check.$(OBJEXT) keylist.$(OBJEXT) signal.$(OBJEXT) @ENABLE_CARD_SUPPORT_TRUE@am__objects_3 = cardglue.$(OBJEXT) \ @ENABLE_CARD_SUPPORT_TRUE@ tlv.$(OBJEXT) @ENABLE_CARD_SUPPORT_TRUE@am__objects_4 = card-util.$(OBJEXT) @ENABLE_CARD_SUPPORT_TRUE@am__objects_5 = app-openpgp.$(OBJEXT) \ @ENABLE_CARD_SUPPORT_TRUE@ iso7816.$(OBJEXT) apdu.$(OBJEXT) \ @ENABLE_CARD_SUPPORT_TRUE@ ccid-driver.$(OBJEXT) am__objects_6 = $(am__objects_3) $(am__objects_4) $(am__objects_5) am_gpg_OBJECTS = gpg.$(OBJEXT) $(am__objects_2) $(am__objects_6) \ pkclist.$(OBJEXT) skclist.$(OBJEXT) pubkey-enc.$(OBJEXT) \ passphrase.$(OBJEXT) seckey-cert.$(OBJEXT) encr-data.$(OBJEXT) \ cipher.$(OBJEXT) encode.$(OBJEXT) sign.$(OBJEXT) \ verify.$(OBJEXT) revoke.$(OBJEXT) decrypt.$(OBJEXT) \ keyedit.$(OBJEXT) dearmor.$(OBJEXT) import.$(OBJEXT) \ export.$(OBJEXT) trustdb.$(OBJEXT) tdbdump.$(OBJEXT) \ tdbio.$(OBJEXT) delkey.$(OBJEXT) keygen.$(OBJEXT) \ pipemode.$(OBJEXT) helptext.$(OBJEXT) keyserver.$(OBJEXT) \ photoid.$(OBJEXT) exec.$(OBJEXT) gpg_OBJECTS = $(am_gpg_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am__DEPENDENCIES_3 = $(needed_libs) $(am__DEPENDENCIES_2) gpg_DEPENDENCIES = $(am__DEPENDENCIES_3) am__gpgv_SOURCES_DIST = gpgv.c global.h build-packet.c compress.c \ compress-bz2.c filter.h free-packet.c getkey.c keydb.c keydb.h \ keyring.c keyring.h seskey.c kbnode.c main.h mainproc.c \ armor.c mdfilter.c textfilter.c progress.c misc.c options.h \ openfile.c keyid.c packet.h parse-packet.c status.c status.h \ plaintext.c sig-check.c keylist.c signal.c verify.c am_gpgv_OBJECTS = gpgv.$(OBJEXT) $(am__objects_2) verify.$(OBJEXT) gpgv_OBJECTS = $(am_gpgv_OBJECTS) gpgv_LDADD = $(LDADD) gpgv_DEPENDENCIES = $(needed_libs) $(am__DEPENDENCIES_2) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(gpg_SOURCES) $(gpgv_SOURCES) DIST_SOURCES = $(am__gpg_SOURCES_DIST) $(am__gpgv_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } DATA = $(dist_pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/intl \ @LIBUSB_CPPFLAGS@ $(am__append_1) needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a other_libs = $(LIBICONV) $(DNSLIBS) $(LIBINTL) $(CAPLIBS) dist_pkgdata_DATA = options.skel @ENABLE_BZIP2_SUPPORT_FALSE@bzip2_source = @ENABLE_BZIP2_SUPPORT_TRUE@bzip2_source = compress-bz2.c common_source = \ global.h \ build-packet.c \ compress.c \ $(bzip2_source) \ filter.h \ free-packet.c \ getkey.c \ keydb.c keydb.h \ keyring.c keyring.h \ seskey.c \ kbnode.c \ main.h \ mainproc.c \ armor.c \ mdfilter.c \ textfilter.c \ progress.c \ misc.c \ options.h \ openfile.c \ keyid.c \ packet.h \ parse-packet.c \ status.c \ status.h \ plaintext.c \ sig-check.c \ keylist.c \ signal.c @ENABLE_CARD_SUPPORT_FALSE@card_support_source_gpg = @ENABLE_CARD_SUPPORT_TRUE@card_support_source_gpg = card-util.c @ENABLE_CARD_SUPPORT_FALSE@card_support_source_scd = @ENABLE_CARD_SUPPORT_TRUE@card_support_source_scd = \ @ENABLE_CARD_SUPPORT_TRUE@ app-common.h \ @ENABLE_CARD_SUPPORT_TRUE@ app-openpgp.c \ @ENABLE_CARD_SUPPORT_TRUE@ iso7816.c iso7816.h \ @ENABLE_CARD_SUPPORT_TRUE@ apdu.c apdu.h \ @ENABLE_CARD_SUPPORT_TRUE@ ccid-driver.c ccid-driver.h @ENABLE_CARD_SUPPORT_FALSE@card_support_source_local = @ENABLE_CARD_SUPPORT_TRUE@card_support_source_local = cardglue.c cardglue.h tlv.c tlv.h card_support_source = $(card_support_source_local) $(card_support_source_gpg) $(card_support_source_scd) gpg_SOURCES = gpg.c \ $(common_source) \ $(card_support_source) \ pkclist.c \ skclist.c \ pubkey-enc.c \ passphrase.c \ seckey-cert.c \ encr-data.c \ cipher.c \ encode.c \ sign.c \ verify.c \ revoke.c \ decrypt.c \ keyedit.c \ dearmor.c \ import.c \ export.c \ trustdb.c \ trustdb.h \ tdbdump.c \ tdbio.c \ tdbio.h \ delkey.c \ keygen.c \ pipemode.c \ helptext.c \ keyserver.c \ keyserver-internal.h \ photoid.c photoid.h \ exec.c exec.h gpgv_SOURCES = gpgv.c \ $(common_source) \ verify.c LDADD = $(needed_libs) $(other_libs) @ZLIBS@ @W32LIBS@ gpg_LDADD = $(LDADD) @LIBREADLINE@ @DLLIBS@ @NETLIBS@ @LIBUSB@ all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu g10/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu g10/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) installcheck-binPROGRAMS: $(bin_PROGRAMS) bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | \ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad gpg$(EXEEXT): $(gpg_OBJECTS) $(gpg_DEPENDENCIES) $(EXTRA_gpg_DEPENDENCIES) @rm -f gpg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gpg_OBJECTS) $(gpg_LDADD) $(LIBS) gpgv$(EXEEXT): $(gpgv_OBJECTS) $(gpgv_DEPENDENCIES) $(EXTRA_gpgv_DEPENDENCIES) @rm -f gpgv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gpgv_OBJECTS) $(gpgv_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/apdu.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/app-openpgp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/armor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/build-packet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/card-util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cardglue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ccid-driver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress-bz2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dearmor.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decrypt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/delkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/encr-data.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/exec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/export.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/free-packet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/helptext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/import.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso7816.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kbnode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keydb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyedit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keygen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keylist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyring.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyserver.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mainproc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdfilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/openfile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parse-packet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/passphrase.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/photoid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pipemode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pkclist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plaintext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progress.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pubkey-enc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/revoke.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seckey-cert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/seskey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sig-check.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sign.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/skclist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/status.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdbdump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdbio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/textfilter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tlv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trustdb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/verify.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-dist_pkgdataDATA: $(dist_pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-dist_pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(dist_pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS @$(NORMAL_INSTALL) $(MAKE) $(AM_MAKEFLAGS) install-exec-hook install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: installcheck-binPROGRAMS maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-dist_pkgdataDATA .MAKE: install-am install-exec-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dist_pkgdataDATA install-dvi install-dvi-am \ install-exec install-exec-am install-exec-hook install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am \ installcheck-binPROGRAMS installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-dist_pkgdataDATA $(PROGRAMS): $(needed_libs) install-exec-hook: @set -e;\ if test -f $(DESTDIR)$(bindir)/gpgm ; then \ echo "removing obsolete gpgm binary" ; \ rm $(DESTDIR)$(bindir)/gpgm ; \ fi # Helper to update some source files. update-source-from-gnupg-2: @set -e; \ if test -d ../../gnupg-1.9/scd; then dir="../../gnupg-1.9"; \ elif test -d ../../gnupg/scd; then dir="../../gnupg"; \ else exit 1; \ fi; \ for i in $(card_support_source_scd); do \ cp $$dir/scd/$$i $$i; echo $$i; \ done ;\ for i in $(card_support_source_gpg); do \ cp $$dir/g10/$$i $$i; echo $$i; \ done ; \ echo "Please remember to update the ChangeLog accordingly!" # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/g10/ccid-driver.h0000644000175000017500000001157212635262326012607 00000000000000/* ccid-driver.c - USB ChipCardInterfaceDevices driver * Copyright (C) 2003 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 3 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, see . * * ALTERNATIVELY, this file may be distributed under the terms of the * following license, in which case the provisions of this license are * required INSTEAD OF the GNU General Public License. If you wish to * allow use of your version of this file only under the terms of the * GNU General Public License, and not to allow others to use your * version of this file under the terms of the following license, * indicate your decision by deleting this paragraph and the license * below. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, and the entire permission notice in its entirety, * including the disclaimer of warranties. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * * $Id$ */ #ifndef CCID_DRIVER_H #define CCID_DRIVER_H /* The CID driver returns the same error codes as the status words used by GnuPG's apdu.h. For ease of maintenance they should always match. */ #define CCID_DRIVER_ERR_OUT_OF_CORE 0x10001 #define CCID_DRIVER_ERR_INV_VALUE 0x10002 #define CCID_DRIVER_ERR_INCOMPLETE_CARD_RESPONSE = 0x10003 #define CCID_DRIVER_ERR_NO_DRIVER 0x10004 #define CCID_DRIVER_ERR_NOT_SUPPORTED 0x10005 #define CCID_DRIVER_ERR_LOCKING_FAILED 0x10006 #define CCID_DRIVER_ERR_BUSY 0x10007 #define CCID_DRIVER_ERR_NO_CARD 0x10008 #define CCID_DRIVER_ERR_CARD_INACTIVE 0x10009 #define CCID_DRIVER_ERR_CARD_IO_ERROR 0x1000a #define CCID_DRIVER_ERR_GENERAL_ERROR 0x1000b #define CCID_DRIVER_ERR_NO_READER 0x1000c #define CCID_DRIVER_ERR_ABORTED 0x1000d #define CCID_DRIVER_ERR_NO_KEYPAD 0x1000e struct ccid_driver_s; typedef struct ccid_driver_s *ccid_driver_t; int ccid_set_debug_level (int level); char *ccid_get_reader_list (void); int ccid_open_reader (ccid_driver_t *handle, const char *readerid); int ccid_set_progress_cb (ccid_driver_t handle, void (*cb)(void *, const char *, int, int, int), void *cb_arg); int ccid_shutdown_reader (ccid_driver_t handle); int ccid_close_reader (ccid_driver_t handle); int ccid_get_atr (ccid_driver_t handle, unsigned char *atr, size_t maxatrlen, size_t *atrlen); int ccid_slot_status (ccid_driver_t handle, int *statusbits); int ccid_transceive (ccid_driver_t handle, const unsigned char *apdu, size_t apdulen, unsigned char *resp, size_t maxresplen, size_t *nresp); int ccid_transceive_secure (ccid_driver_t handle, const unsigned char *apdu, size_t apdulen, int pin_mode, int pinlen_min, int pinlen_max, int pin_padlen, unsigned char *resp, size_t maxresplen, size_t *nresp); int ccid_transceive_escape (ccid_driver_t handle, const unsigned char *data, size_t datalen, unsigned char *resp, size_t maxresplen, size_t *nresp); #endif /*CCID_DRIVER_H*/ gnupg-1.4.20/g10/tdbio.c0000644000175000017500000011671112635277056011517 00000000000000/* tdbio.c * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2012 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 3 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, see . */ #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" #if defined(HAVE_DOSISH_SYSTEM) && !defined(ftruncate) #define ftruncate chsize #endif #if defined(HAVE_DOSISH_SYSTEM) || defined(__CYGWIN__) #define MY_O_BINARY O_BINARY #else #define MY_O_BINARY 0 #endif /**************** * 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 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_t lockhandle; static int is_locked; static int db_fd = -1; static int in_transaction; static void open_db(void); static void migrate_from_v2 (void); static int take_write_lock (void) { if (!lockhandle) lockhandle = dotlock_create (db_name, 0); if (!lockhandle) log_fatal ( _("can't create lock for `%s'\n"), db_name ); if (!is_locked) { if (dotlock_take (lockhandle, -1) ) log_fatal ( _("can't lock `%s'\n"), db_name ); else is_locked = 1; return 0; } else return 1; } static void release_write_lock (void) { if (!opt.lock_once) if (!dotlock_release (lockhandle)) is_locked = 0; } /************************************* ************* 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 = xmalloc( 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 = xmalloc( 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; take_write_lock (); 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; } } release_write_lock (); 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 (!take_write_lock ()) 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) release_write_lock (); return 0; } #if 0 /* The transaction code is disabled in the 1.2.x branch, as it is not yet used. It will be enabled in 1.3.x. */ /**************** * 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"); take_write_lock (); block_all_signals(); in_transaction = 0; rc = tdbio_sync(); unblock_all_signals(); release_write_lock (); 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; } #endif /******************************************************** **************** cached I/O functions ****************** ********************************************************/ static void cleanup(void) { if( is_locked ) { if (!dotlock_release (lockhandle)) is_locked = 0; } } /* Caller must sync */ int tdbio_update_version_record (void) { TRUSTREC rec; int rc; memset( &rec, 0, sizeof rec ); rc=tdbio_read_record( 0, &rec, RECTYPE_VER); if(rc==0) { 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.r.ver.trust_model = opt.trust_model; rec.r.ver.min_cert_level = opt.min_cert_level; rc=tdbio_write_record(&rec); } return rc; } static int create_version_record (void) { TRUSTREC rec; int rc; memset( &rec, 0, sizeof rec ); rec.r.ver.version = 3; 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; if(opt.trust_model==TM_PGP || opt.trust_model==TM_CLASSIC) rec.r.ver.trust_model = opt.trust_model; else rec.r.ver.trust_model = TM_PGP; rec.r.ver.min_cert_level = opt.min_cert_level; rec.rectype = RECTYPE_VER; rec.recnum = 0; rc = tdbio_write_record( &rec ); if( !rc ) tdbio_sync(); return rc; } int tdbio_set_dbname( const char *new_dbname, int create, int *r_nofile) { char *fname; struct stat statbuf; static int initialized = 0; if( !initialized ) { atexit( cleanup ); initialized = 1; } *r_nofile = 0; if(new_dbname==NULL) fname=make_filename(opt.homedir,"trustdb" EXTSEP_S "gpg", NULL); else if (*new_dbname != DIRSEP_C ) { if (strchr(new_dbname, DIRSEP_C) ) fname = make_filename (new_dbname, NULL); else fname = make_filename (opt.homedir, new_dbname, NULL); } else fname = xstrdup (new_dbname); xfree (db_name); db_name = fname; /* * Quick check for (likely) case where there is trustdb.gpg * already. This check is not required in theory, but it helps in * practice, avoiding costly operations of preparing and taking * the lock. */ if (stat (fname, &statbuf) == 0 && statbuf.st_size > 0) /* OK, we have the valid trustdb.gpg already. */ return 0; take_write_lock (); if( access( fname, R_OK ) ) { if( errno != ENOENT ) log_fatal( _("can't access `%s': %s\n"), fname, strerror(errno) ); if (!create) *r_nofile = 1; else { FILE *fp; TRUSTREC rec; int rc; char *p = strrchr( fname, DIRSEP_C ); mode_t oldmask; assert(p); *p = 0; if( access( fname, F_OK ) ) { try_make_homedir( fname ); if (access (fname, F_OK )) log_fatal (_("%s: directory does not exist!\n"), fname); } *p = DIRSEP_C; oldmask=umask(077); if (is_secured_filename (fname)) { fp = NULL; errno = EPERM; } else fp =fopen( fname, "wb" ); umask(oldmask); if( !fp ) log_fatal( _("can't create `%s': %s\n"), fname, strerror(errno) ); fclose(fp); db_fd = open( db_name, O_RDWR | MY_O_BINARY ); if( db_fd == -1 ) log_fatal( _("can't open `%s': %s\n"), db_name, strerror(errno) ); rc = create_version_record (); 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); } } release_write_lock (); return 0; } const char * tdbio_get_dbname() { return db_name; } static void open_db() { byte buf[10]; int n; TRUSTREC rec; assert( db_fd == -1 ); db_fd = open (db_name, O_RDWR | MY_O_BINARY ); if (db_fd == -1 && (errno == EACCES #ifdef EROFS || errno == EROFS #endif ) ) { db_fd = open (db_name, O_RDONLY | MY_O_BINARY ); if (db_fd != -1) log_info (_("NOTE: trustdb not writable\n")); } if ( db_fd == -1 ) log_fatal( _("can't open `%s': %s\n"), db_name, strerror(errno) ); register_secured_file (db_name); /* check whether we need to do a version migration */ do n = read (db_fd, buf, 5); while (n==-1 && errno == EINTR); if (n == 5 && !memcmp (buf, "\x01gpg\x02", 5)) { migrate_from_v2 (); } /* read the version record */ if (tdbio_read_record (0, &rec, RECTYPE_VER ) ) log_fatal( _("%s: invalid trustdb\n"), db_name ); } /**************** * Make a hashtable: type 0 = trust 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.trusthashtbl = 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) ); 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 && vr.r.ver.trust_model == opt.trust_model && vr.r.ver.min_cert_level == opt.min_cert_level; } return yes_no; } byte tdbio_read_model(void) { 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) ); return vr.r.ver.trust_model; } /**************** * Return the nextstamp value. */ ulong tdbio_read_nextcheck () { 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) ); return vr.r.ver.nextcheck; } /* Return true when the stamp was actually changed. */ int tdbio_write_nextcheck (ulong stamp) { 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.nextcheck == stamp) return 0; vr.r.ver.nextcheck = stamp; rc = tdbio_write_record( &vr ); if( rc ) log_fatal( _("%s: error writing version record: %s\n"), db_name, g10_errstr(rc) ); return 1; } /**************** * Return the record number of the trusthash tbl or create a new one. */ static ulong get_trusthashrec(void) { static ulong trusthashtbl; /* record number of the trust hashtable */ if( !trusthashtbl ) { 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.trusthashtbl ) create_hashtable( &vr, 0 ); trusthashtbl = vr.r.ver.trusthashtbl; } return trusthashtbl; } /**************** * 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("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("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( "upd_hashtable: 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_TRUST ) { /* 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("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("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("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( "drop_from_hashtable: 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)(const void*, const TRUSTREC *), const 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("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( "hashtable read 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 ) { 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 trust hashtbl or create the table if it does not exist */ static int update_trusthashtbl( TRUSTREC *tr ) { return upd_hashtable( get_trusthashrec(), tr->r.trust.fingerprint, 20, tr->recnum ); } void tdbio_dump_record( TRUSTREC *rec, FILE *fp ) { int i; ulong rnum = rec->recnum; fprintf(fp, "rec %5lu, ", rnum ); switch( rec->rectype ) { case 0: fprintf(fp, "blank\n"); break; case RECTYPE_VER: fprintf(fp, "version, td=%lu, f=%lu, m/c/d=%d/%d/%d tm=%d mcl=%d nc=%lu (%s)\n", rec->r.ver.trusthashtbl, rec->r.ver.firstfree, rec->r.ver.marginals, rec->r.ver.completes, rec->r.ver.cert_depth, rec->r.ver.trust_model, rec->r.ver.min_cert_level, rec->r.ver.nextcheck, strtimestamp(rec->r.ver.nextcheck) ); break; case RECTYPE_FREE: fprintf(fp, "free, next=%lu\n", rec->r.free.next ); 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; case RECTYPE_TRUST: fprintf(fp, "trust "); for(i=0; i < 20; i++ ) fprintf(fp, "%02X", rec->r.trust.fingerprint[i] ); fprintf (fp, ", ot=%d, d=%d, vl=%lu\n", rec->r.trust.ownertrust, rec->r.trust.depth, rec->r.trust.validlist); break; case RECTYPE_VALID: fprintf(fp, "valid "); for(i=0; i < 20; i++ ) fprintf(fp, "%02X", rec->r.valid.namehash[i] ); fprintf (fp, ", v=%d, next=%lu\n", rec->r.valid.validity, rec->r.valid.next); 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 "gpg" */ rec->r.ver.version = *p++; rec->r.ver.marginals = *p++; rec->r.ver.completes = *p++; rec->r.ver.cert_depth = *p++; rec->r.ver.trust_model = *p++; rec->r.ver.min_cert_level = *p++; p += 2; rec->r.ver.created = buf32_to_ulong (p); p += 4; rec->r.ver.nextcheck = buf32_to_ulong (p); p += 4; p += 4; p += 4; rec->r.ver.firstfree =buf32_to_ulong (p); p += 4; p += 4; rec->r.ver.trusthashtbl =buf32_to_ulong (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 != 3 ) { 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 = buf32_to_ulong (p); p += 4; break; case RECTYPE_HTBL: for(i=0; i < ITEMS_PER_HTBL_RECORD; i++ ) { rec->r.htbl.item[i] = buf32_to_ulong (p); p += 4; } break; case RECTYPE_HLST: rec->r.hlst.next = buf32_to_ulong (p); p += 4; for(i=0; i < ITEMS_PER_HLST_RECORD; i++ ) { rec->r.hlst.rnum[i] = buf32_to_ulong (p); p += 4; } break; case RECTYPE_TRUST: memcpy( rec->r.trust.fingerprint, p, 20); p+=20; rec->r.trust.ownertrust = *p++; rec->r.trust.depth = *p++; rec->r.trust.min_ownertrust = *p++; p++; rec->r.trust.validlist = buf32_to_ulong (p); p += 4; break; case RECTYPE_VALID: memcpy( rec->r.valid.namehash, p, 20); p+=20; rec->r.valid.validity = *p++; rec->r.valid.next = buf32_to_ulong (p); p += 4; rec->r.valid.full_count = *p++; rec->r.valid.marginal_count = *p++; 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++ = rec->r.ver.trust_model; *p++ = rec->r.ver.min_cert_level; p += 2; ulongtobuf(p, rec->r.ver.created); p += 4; ulongtobuf(p, rec->r.ver.nextcheck); p += 4; p += 4; p += 4; ulongtobuf(p, rec->r.ver.firstfree ); p += 4; p += 4; ulongtobuf(p, rec->r.ver.trusthashtbl ); p += 4; break; case RECTYPE_FREE: ulongtobuf(p, rec->r.free.next); p += 4; 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; case RECTYPE_TRUST: memcpy( p, rec->r.trust.fingerprint, 20); p += 20; *p++ = rec->r.trust.ownertrust; *p++ = rec->r.trust.depth; *p++ = rec->r.trust.min_ownertrust; p++; ulongtobuf( p, rec->r.trust.validlist); p += 4; break; case RECTYPE_VALID: memcpy( p, rec->r.valid.namehash, 20); p += 20; *p++ = rec->r.valid.validity; ulongtobuf( p, rec->r.valid.next); p += 4; *p++ = rec->r.valid.full_count; *p++ = rec->r.valid.marginal_count; break; default: BUG(); } rc = put_record_into_cache( recnum, buf ); if( rc ) ; else if( rec->rectype == RECTYPE_TRUST ) rc = update_trusthashtbl( 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_TRUST ) { rc = drop_from_hashtable( get_trusthashrec(), rec.r.trust.fingerprint, 20, rec.recnum ); } 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 ; } static int cmp_trec_fpr (const void *fpr, const TRUSTREC *rec ) { return (rec->rectype == RECTYPE_TRUST && !memcmp( rec->r.trust.fingerprint, fpr, 20)); } int tdbio_search_trust_byfpr( const byte *fingerprint, TRUSTREC *rec ) { int rc; /* Locate the trust record using the hash table. */ rc = lookup_hashtable (get_trusthashrec(), fingerprint, 20, cmp_trec_fpr, fingerprint, rec); return rc; } int tdbio_search_trust_bypk (PKT_public_key *pk, TRUSTREC *rec) { byte fingerprint[MAX_FINGERPRINT_LEN]; size_t fingerlen; fingerprint_from_pk( pk, fingerprint, &fingerlen ); for (; fingerlen < 20; fingerlen++ ) fingerprint[fingerlen] = 0; return tdbio_search_trust_byfpr (fingerprint, rec); } void tdbio_invalid(void) { log_error (_("Error: The trustdb is corrupted.\n")); how_to_fix_the_trustdb (); g10_exit (2); } /* * Migrate the trustdb as just up to gpg 1.0.6 (trustdb version 2) * to the 2.1 version as used with 1.0.6b - This is pretty trivial as needs * only to scan the tdb and insert new the new trust records. The old ones are * obsolte from now on */ static void migrate_from_v2 () { TRUSTREC rec; int i, n; struct { ulong keyrecno; byte ot; byte okay; byte fpr[20]; } *ottable; int ottable_size, ottable_used; byte oldbuf[40]; ulong recno; int rc, count; ottable_size = 5; ottable = xmalloc (ottable_size * sizeof *ottable); ottable_used = 0; /* We have some restrictions here. We can't use the version record * and we can't use any of the old hashtables because we dropped the * code. So we first collect all ownertrusts and then use a second * pass fo find the associated keys. We have to do this all without using * the regular record read functions. */ /* get all the ownertrusts */ if (lseek (db_fd, 0, SEEK_SET ) == -1 ) log_fatal ("migrate_from_v2: lseek failed: %s\n", strerror (errno)); for (recno=0;;recno++) { do n = read (db_fd, oldbuf, 40); while (n==-1 && errno == EINTR); if (!n) break; /* eof */ if (n != 40) log_fatal ("migrate_vfrom_v2: read error or short read\n"); if (*oldbuf != 2) continue; /* v2 dir record */ if (ottable_used == ottable_size) { ottable_size += 1000; ottable = xrealloc (ottable, ottable_size * sizeof *ottable); } ottable[ottable_used].keyrecno = buf32_to_ulong (oldbuf+6); ottable[ottable_used].ot = oldbuf[18]; ottable[ottable_used].okay = 0; memset (ottable[ottable_used].fpr,0, 20); if (ottable[ottable_used].keyrecno && ottable[ottable_used].ot) ottable_used++; } log_info ("found %d ownertrust records\n", ottable_used); /* Read again and find the fingerprints */ if (lseek (db_fd, 0, SEEK_SET ) == -1 ) log_fatal ("migrate_from_v2: lseek failed: %s\n", strerror (errno)); for (recno=0;;recno++) { do n = read (db_fd, oldbuf, 40); while (n==-1 && errno == EINTR); if (!n) break; /* eof */ if (n != 40) log_fatal ("migrate_from_v2: read error or short read\n"); if (*oldbuf != 3) continue; /* v2 key record */ for (i=0; i < ottable_used; i++) { if (ottable[i].keyrecno == recno) { memcpy (ottable[i].fpr, oldbuf+20, 20); ottable[i].okay = 1; break; } } } /* got everything - create the v3 trustdb */ if (ftruncate (db_fd, 0)) log_fatal ("can't truncate `%s': %s\n", db_name, strerror (errno) ); if (create_version_record ()) log_fatal ("failed to recreate version record of `%s'\n", db_name); /* access the hash table, so it is store just after the version record, * this is not needed put a dump is more pretty */ get_trusthashrec (); /* And insert the old ownertrust values */ count = 0; for (i=0; i < ottable_used; i++) { if (!ottable[i].okay) continue; memset (&rec, 0, sizeof rec); rec.recnum = tdbio_new_recnum (); rec.rectype = RECTYPE_TRUST; memcpy(rec.r.trust.fingerprint, ottable[i].fpr, 20); rec.r.trust.ownertrust = ottable[i].ot; if (tdbio_write_record (&rec)) log_fatal ("failed to write trust record of `%s'\n", db_name); count++; } revalidation_mark (); rc = tdbio_sync (); if (rc) log_fatal ("failed to sync `%s'\n", db_name); log_info ("migrated %d version 2 ownertrusts\n", count); xfree (ottable); } gnupg-1.4.20/g10/seskey.c0000644000175000017500000001637712635262326011722 00000000000000/* seskey.c - make sesssion keys etc. * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2006, * 2007 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 3 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, see . */ #include #include #include #include #include #include "util.h" #include "cipher.h" #include "mpi.h" #include "main.h" #include "i18n.h" /**************** * Make a session key and put it into DEK */ void make_session_key( DEK *dek ) { CIPHER_HANDLE chd; int i, rc; dek->keylen = cipher_get_keylen( dek->algo ) / 8; chd = cipher_open( dek->algo, CIPHER_MODE_AUTO_CFB, 1 ); randomize_buffer( dek->key, dek->keylen, 1 ); for(i=0; i < 16; i++ ) { rc = cipher_setkey( chd, dek->key, dek->keylen ); if( !rc ) { cipher_close( chd ); return; } log_info(_("weak key created - retrying\n") ); /* Renew the session key until we get a non-weak key. */ randomize_buffer( dek->key, dek->keylen, 1 ); } log_fatal(_( "cannot avoid weak key for symmetric cipher; tried %d times!\n"), i); } /**************** * Encode the session key. NBITS is the number of bits which should be used * for packing the session key. * returns: A mpi with the session key (caller must free) */ MPI encode_session_key( DEK *dek, unsigned nbits ) { int nframe = (nbits+7) / 8; byte *p; byte *frame; int i,n; u16 csum; MPI a; /* the current limitation is that we can only use a session key * whose length is a multiple of BITS_PER_MPI_LIMB * I think we can live with that. */ if( dek->keylen + 7 > nframe || !nframe ) log_bug("can't encode a %d bit key in a %d bits frame\n", dek->keylen*8, nbits ); /* We encode the session key in this way: * * 0 2 RND(n bytes) 0 A DEK(k bytes) CSUM(2 bytes) * * (But how can we store the leading 0 - the external representaion * of MPIs doesn't allow leading zeroes =:-) * * RND are non-zero random bytes. * A is the cipher algorithm * DEK is the encryption key (session key) length k depends on the * cipher algorithm (20 is used with blowfish160). * CSUM is the 16 bit checksum over the DEK */ csum = 0; for( p = dek->key, i=0; i < dek->keylen; i++ ) csum += *p++; frame = xmalloc_secure( nframe ); n = 0; frame[n++] = 0; frame[n++] = 2; i = nframe - 6 - dek->keylen; assert( i > 0 ); p = get_random_bits( i*8, 1, 1 ); /* replace zero bytes by new values */ for(;;) { int j, k; byte *pp; /* count the zero bytes */ for(j=k=0; j < i; j++ ) if( !p[j] ) k++; if( !k ) break; /* okay: no zero bytes */ k += k/128 + 3; /* better get some more */ pp = get_random_bits( k*8, 1, 1); for(j=0; j < i && k ;) { if( !p[j] ) p[j] = pp[--k]; if (p[j]) j++; } xfree(pp); } memcpy( frame+n, p, i ); xfree(p); n += i; frame[n++] = 0; frame[n++] = dek->algo; memcpy( frame+n, dek->key, dek->keylen ); n += dek->keylen; frame[n++] = csum >>8; frame[n++] = csum; assert( n == nframe ); a = mpi_alloc_secure ( mpi_nlimb_hint_from_nbytes (nframe) ); mpi_set_buffer( a, frame, nframe, 0 ); xfree(frame); return a; } MPI pkcs1_encode_md( MD_HANDLE md, int algo, size_t len, unsigned nbits, const byte *asn, size_t asnlen ) { int nframe = (nbits+7) / 8; byte *frame; int i,n; MPI a; if( len + asnlen + 4 > nframe ) log_bug("can't encode a %d bit MD into a %d bits frame\n", (int)(len*8), (int)nbits); /* We encode the MD in this way: * * 0 1 PAD(n bytes) 0 ASN(asnlen bytes) MD(len bytes) * * PAD consists of FF bytes. */ frame = md_is_secure(md)? xmalloc_secure( nframe ) : xmalloc( nframe ); n = 0; frame[n++] = 0; frame[n++] = 1; /* block type */ i = nframe - len - asnlen -3 ; assert( i > 1 ); memset( frame+n, 0xff, i ); n += i; frame[n++] = 0; memcpy( frame+n, asn, asnlen ); n += asnlen; memcpy( frame+n, md_read(md, algo), len ); n += len; assert( n == nframe ); a = (md_is_secure(md) ? mpi_alloc_secure ( mpi_nlimb_hint_from_nbytes (nframe) ) : mpi_alloc ( mpi_nlimb_hint_from_nbytes (nframe ))); mpi_set_buffer( a, frame, nframe, 0 ); xfree(frame); /* Note that PGP before version 2.3 encoded the MD as: * * 0 1 MD(16 bytes) 0 PAD(n bytes) 1 * * The MD is always 16 bytes here because it's always MD5. We do * not support pre-v2.3 signatures, but I'm including this comment * so the information is easily found in the future. */ return a; } /**************** * Encode a message digest into an MPI. * If it's for a DSA signature, make sure that the hash is large * enough to fill up q. If the hash is too big, take the leftmost * bits. */ MPI encode_md_value( PKT_public_key *pk, PKT_secret_key *sk, MD_HANDLE md, int hash_algo ) { MPI frame; assert(hash_algo); assert(pk || sk); if((pk?pk->pubkey_algo:sk->pubkey_algo) == PUBKEY_ALGO_DSA) { /* It's a DSA signature, so find out the size of q. */ unsigned int qbytes=mpi_get_nbits(pk?pk->pkey[1]:sk->skey[1]); /* Make sure it is a multiple of 8 bits. */ if(qbytes%8) { log_error(_("DSA requires the hash length to be a" " multiple of 8 bits\n")); return NULL; } /* Don't allow any q smaller than 160 bits. This might need a revisit as the DSA2 design firms up, but for now, we don't want someone to issue signatures from a key with a 16-bit q or something like that, which would look correct but allow trivial forgeries. Yes, I know this rules out using MD5 with DSA. ;) */ if(qbytes<160) { log_error(_("DSA key %s uses an unsafe (%u bit) hash\n"), pk?keystr_from_pk(pk):keystr_from_sk(sk),qbytes); return NULL; } qbytes/=8; /* Check if we're too short. Too long is safe as we'll automatically left-truncate. */ if(md_digest_length(hash_algo) < qbytes) { log_error(_("DSA key %s requires a %u bit or larger hash\n"), pk?keystr_from_pk(pk):keystr_from_sk(sk),qbytes*8); return NULL; } frame = (md_is_secure(md) ? mpi_alloc_secure (mpi_nlimb_hint_from_nbytes (qbytes) ) : mpi_alloc ( mpi_nlimb_hint_from_nbytes (qbytes) )); mpi_set_buffer( frame, md_read(md, hash_algo), qbytes, 0 ); } else { const byte *asn; size_t asnlen,mdlen; asn = md_asn_oid( hash_algo, &asnlen, &mdlen ); frame = pkcs1_encode_md( md, hash_algo, mdlen, mpi_get_nbits(pk?pk->pkey[0]:sk->skey[0]), asn, asnlen ); } return frame; } gnupg-1.4.20/g10/openfile.c0000644000175000017500000003060512635262326012206 00000000000000/* openfile.c * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, * 2005 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 3 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, see . */ #include #include #include #include #include #include #include #include #include #include #include "util.h" #include "memory.h" #include "ttyio.h" #include "options.h" #include "main.h" #include "status.h" #include "i18n.h" #ifdef USE_ONLY_8DOT3 #define SKELEXT ".skl" #else #define SKELEXT EXTSEP_S "skel" #endif #if defined (HAVE_DRIVE_LETTERS) || defined (__riscos__) #define CMP_FILENAME(a,b) ascii_strcasecmp( (a), (b) ) #else #define CMP_FILENAME(a,b) strcmp( (a), (b) ) #endif #ifdef MKDIR_TAKES_ONE_ARG #undef mkdir #define mkdir(a,b) mkdir(a) #endif /* FIXME: Implement opt.interactive. */ /**************** * Check whether FNAME exists and ask if it's okay to overwrite an * existing one. * Returns: True: it's okay to overwrite or the file does not exist * False: Do not overwrite */ int overwrite_filep( const char *fname ) { if( iobuf_is_pipe_filename (fname) ) return 1; /* Writing to stdout is always okay */ if( access( fname, F_OK ) ) return 1; /* does not exist */ #ifndef HAVE_DOSISH_SYSTEM if ( !strcmp ( fname, "/dev/null" ) ) return 1; /* does not do any harm */ #endif #ifdef HAVE_W32_SYSTEM if ( !strcmp ( fname, "nul" ) ) return 1; #endif /* fixme: add some backup stuff in case of overwrite */ if( opt.answer_yes ) return 1; if( opt.answer_no || opt.batch ) return 0; /* do not overwrite */ tty_printf(_("File `%s' exists. "), fname); if( cpr_enabled () ) tty_printf ("\n"); if( cpr_get_answer_is_yes("openfile.overwrite.okay", _("Overwrite? (y/N) ")) ) return 1; return 0; } /**************** * Strip know extensions from iname and return a newly allocated * filename. Return NULL if we can't do that. * * (See vmslib/vms.c for the VMS-specific replacement function, * vms_make_outfile_name()) */ #ifndef __VMS char * make_outfile_name( const char *iname ) { size_t n; if ( iobuf_is_pipe_filename (iname) ) return xstrdup("-"); n = strlen(iname); if( n > 4 && ( !CMP_FILENAME(iname+n-4, EXTSEP_S "gpg") || !CMP_FILENAME(iname+n-4, EXTSEP_S "pgp") || !CMP_FILENAME(iname+n-4, EXTSEP_S "sig") || !CMP_FILENAME(iname+n-4, EXTSEP_S "asc") ) ) { char *buf = xstrdup( iname ); buf[n-4] = 0; return buf; } else if( n > 5 && !CMP_FILENAME(iname+n-5, EXTSEP_S "sign") ) { char *buf = xstrdup( iname ); buf[n-5] = 0; return buf; } log_info(_("%s: unknown suffix\n"), iname ); return NULL; } #endif /* ndef __VMS */ /**************** * Ask for a outputfilename and use the given one as default. * Return NULL if no file has been given or it is not possible to * ask the user. */ char * ask_outfile_name( const char *name, size_t namelen ) { size_t n; const char *s; char *prompt; char *fname; char *defname; if( opt.batch ) return NULL; s = _("Enter new filename"); defname = name && namelen? make_printable_string( name, namelen, 0): NULL; n = strlen(s) + (defname?strlen (defname):0) + 10; prompt = xmalloc(n); if( defname ) sprintf(prompt, "%s [%s]: ", s, defname ); else sprintf(prompt, "%s: ", s ); tty_enable_completion(NULL); fname = cpr_get("openfile.askoutname", prompt ); cpr_kill_prompt(); tty_disable_completion(); xfree(prompt); if( !*fname ) { xfree( fname ); fname = NULL; fname = defname; defname = NULL; } xfree(defname); if (fname) trim_spaces (fname); return fname; } /**************** * Make an output filename for the inputfile INAME. * Returns an IOBUF and an errorcode * Mode 0 = use ".gpg" * 1 = use ".asc" * 2 = use ".sig" */ int open_outfile( const char *iname, int mode, IOBUF *a ) { int rc = 0; *a = NULL; if( iobuf_is_pipe_filename (iname) && !opt.outfile ) { *a = iobuf_create(NULL); if( !*a ) { log_error(_("can't open `%s': %s\n"), "[stdout]", strerror(errno) ); rc = G10ERR_CREATE_FILE; } else if( opt.verbose ) log_info(_("writing to stdout\n")); } else { char *buf = NULL; const char *name; if ( opt.dry_run ) { #ifdef HAVE_W32_SYSTEM name = "nul"; #else name = "/dev/null"; #endif } else if( opt.outfile ) name = opt.outfile; else { #ifdef USE_ONLY_8DOT3 if (opt.mangle_dos_filenames) { /* It is quite common for DOS system to have only one dot in a * a filename So if we have something like this, we simple * replace the suffix except in cases where the suffix is * larger than 3 characters and not identlically to the new one. * We should really map the filenames to 8.3 but this tends to * be more complicated and is probaly a duty of the filesystem */ char *dot; const char *newsfx = mode==1 ? ".asc" : mode==2 ? ".sig" : ".gpg"; buf = xmalloc(strlen(iname)+4+1); strcpy(buf,iname); dot = strrchr(buf, '.' ); if ( dot && dot > buf && dot[1] && strlen(dot) <= 4 && CMP_FILENAME(newsfx, dot) && !(strchr (dot, '/') || strchr (dot, '\\'))) { /* There is a dot, the dot is not the first character, the suffix is not longer than 3, the suffix is not equal to the new suffix and tehre is no path delimter after the dot (e.g. foo.1/bar): Replace the suffix. */ strcpy (dot, newsfx ); } else if ( dot && !dot[1] ) /* Don't duplicate a trailing dot. */ strcpy ( dot, newsfx+1 ); else strcat ( buf, newsfx ); /* Just append the new suffix. */ } if (!buf) #endif /* USE_ONLY_8DOT3 */ { buf = xmalloc(strlen(iname)+4+1); #ifdef __VMS vms_append_ext (buf, iname, mode==1 ? "asc" : mode==2 ? "sig" : "gpg"); #else /*!def __VMS*/ strcpy(stpcpy(buf,iname), mode==1 ? EXTSEP_S "asc" : mode==2 ? EXTSEP_S "sig" : EXTSEP_S "gpg"); #endif /*!def __VMS*/ } name = buf; } rc = 0; while( !overwrite_filep (name) ) { char *tmp = ask_outfile_name (NULL, 0); if ( !tmp || !*tmp ) { xfree (tmp); rc = G10ERR_FILE_EXISTS; break; } xfree (buf); name = buf = tmp; } if( !rc ) { if (is_secured_filename (name) ) { *a = NULL; errno = EPERM; } else *a = iobuf_create( name ); if( !*a ) { log_error(_("can't create `%s': %s\n"), name, strerror(errno) ); rc = G10ERR_CREATE_FILE; } else if( opt.verbose ) log_info(_("writing to `%s'\n"), name ); } xfree(buf); } if (*a) iobuf_ioctl (*a,3,1,NULL); /* disable fd caching */ return rc; } /* Find a matching data file for the signature file SIGFILENAME and return it as a malloced string. If no matching data file is found, return NULL. */ char * get_matching_datafile (const char *sigfilename) { char *fname = NULL; size_t len; if (iobuf_is_pipe_filename (sigfilename)) return NULL; len = strlen (sigfilename); if (len > 4 && (!strcmp (sigfilename + len - 4, EXTSEP_S "sig") || (len > 5 && !strcmp(sigfilename + len - 5, EXTSEP_S "sign")) || !strcmp(sigfilename + len - 4, EXTSEP_S "asc"))) { fname = xstrdup (sigfilename); fname[len-(fname[len-1]=='n'?5:4)] = 0 ; if (access (fname, R_OK )) { /* Not found or other error. */ xfree (fname); fname = NULL; } } return fname; } /**************** * Try to open a file without the extension ".sig" or ".asc" * Return NULL if such a file is not available. */ IOBUF open_sigfile (const char *sigfilename, progress_filter_context_t *pfx) { iobuf_t a = NULL; char *buf; buf = get_matching_datafile (sigfilename); if (buf) { a = iobuf_open (buf); if (a && is_secured_file (iobuf_get_fd (a))) { iobuf_close (a); a = NULL; errno = EPERM; } if (a) log_info (_("assuming signed data in `%s'\n"), buf); if (a && pfx) handle_progress (pfx, a, buf); xfree (buf); } return a; } /**************** * Copy the option file skeleton to the given directory. */ static void copy_options_file( const char *destdir ) { const char *datadir = GNUPG_DATADIR; char *fname; FILE *src, *dst; int linefeeds=0; int c; mode_t oldmask; int esc = 0; int any_option = 0; if( opt.dry_run ) return; fname = xmalloc( strlen(datadir) + strlen(destdir) + 15 ); strcpy(stpcpy(fname, datadir), DIRSEP_S "options" SKELEXT ); src = fopen( fname, "r" ); if (src && is_secured_file (fileno (src))) { fclose (src); src = NULL; errno = EPERM; } if( !src ) { log_info (_("can't open `%s': %s\n"), fname, strerror(errno) ); xfree(fname); return; } strcpy(stpcpy(fname, destdir), DIRSEP_S "gpg" EXTSEP_S "conf" ); oldmask=umask(077); if ( is_secured_filename (fname) ) { dst = NULL; errno = EPERM; } else dst = fopen( fname, "w" ); umask(oldmask); if( !dst ) { log_info (_("can't create `%s': %s\n"), fname, strerror(errno) ); fclose( src ); xfree(fname); return; } while( (c=getc(src)) != EOF ) { if( linefeeds < 3 ) { if( c == '\n' ) linefeeds++; } else { putc( c, dst ); if (c== '\n') esc = 1; else if (esc == 1) { if (c == ' ' || c == '\t') ; else if (c == '#') esc = 2; else any_option = 1; } } } fclose( dst ); fclose( src ); log_info(_("new configuration file `%s' created\n"), fname ); if (any_option) log_info (_("WARNING: options in `%s'" " are not yet active during this run\n"), fname); xfree(fname); } void try_make_homedir( const char *fname ) { const char *defhome = GNUPG_HOMEDIR; /* Create the directory only if the supplied directory name * is the same as the default one. This way we avoid to create * arbitrary directories when a non-default homedirectory is used. * To cope with HOME, we do compare only the suffix if we see that * the default homedir does start with a tilde. */ if( opt.dry_run || opt.no_homedir_creation ) return; if ( ( *defhome == '~' && ( strlen(fname) >= strlen (defhome+1) && !strcmp(fname+strlen(fname)-strlen(defhome+1), defhome+1 ) )) || ( *defhome != '~' && !compare_filenames( fname, defhome ) ) ) { if( mkdir( fname, S_IRUSR|S_IWUSR|S_IXUSR ) ) log_fatal( _("can't create directory `%s': %s\n"), fname, strerror(errno) ); else if( !opt.quiet ) log_info( _("directory `%s' created\n"), fname ); #ifdef __VMS /* Explicitly remove group and world (other) access, which may be allowed by default. */ if (chmod (fname, S_IRWXU )) log_fatal ("can't set protection on directory `%s': %s\n", fname, strerror (errno)); #endif /*def __VMS*/ copy_options_file( fname ); /* log_info(_("you have to start GnuPG again, " */ /* "so it can read the new configuration file\n") ); */ /* g10_exit(1); */ } } gnupg-1.4.20/g10/parse-packet.c0000644000175000017500000021251412635262326012765 00000000000000/* parse-packet.c - read packets * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 2008 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 3 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, see . */ #include #include #include #include #include #include "packet.h" #include "iobuf.h" #include "mpi.h" #include "util.h" #include "cipher.h" #include "memory.h" #include "filter.h" #include "photoid.h" #include "options.h" #include "main.h" #include "i18n.h" #include "host2net.h" #ifndef MAX_EXTERN_MPI_BITS #define MAX_EXTERN_MPI_BITS 16384 #endif /* Maximum length of packets to avoid excessive memory allocation. */ #define MAX_KEY_PACKET_LENGTH (256 * 1024) #define MAX_UID_PACKET_LENGTH ( 2 * 1024) #define MAX_COMMENT_PACKET_LENGTH ( 64 * 1024) #define MAX_ATTR_PACKET_LENGTH ( 16 * 1024*1024) static int mpi_print_mode; static int list_mode; static FILE *listfp; static int parse( IOBUF inp, PACKET *pkt, int onlykeypkts, off_t *retpos, int *skip, IOBUF out, int do_skip #ifdef DEBUG_PARSE_PACKET ,const char *dbg_w, const char *dbg_f, int dbg_l #endif ); static int copy_packet( IOBUF inp, IOBUF out, int pkttype, unsigned long pktlen, int partial ); static void skip_packet( IOBUF inp, int pkttype, unsigned long pktlen, int partial ); static void *read_rest( IOBUF inp, size_t pktlen, int partial ); static int parse_marker( IOBUF inp, int pkttype, unsigned long pktlen ); static int parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); static int parse_pubkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); static int parse_onepass_sig( IOBUF inp, int pkttype, unsigned long pktlen, PKT_onepass_sig *ops ); static int parse_key( IOBUF inp, int pkttype, unsigned long pktlen, byte *hdr, int hdrlen, PACKET *packet ); static int parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); static int parse_attribute( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); static int parse_comment( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); static void parse_trust( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ); static int parse_plaintext( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet, int new_ctb, int partial); static int parse_compressed( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet, int new_ctb ); static int parse_encrypted( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet, int new_ctb, int partial); static int parse_mdc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet, int new_ctb); static int parse_gpg_control( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet, int partial ); static unsigned short read_16(IOBUF inp) { unsigned short a; a = (unsigned short)iobuf_get_noeof(inp) << 8; a |= iobuf_get_noeof(inp); return a; } static unsigned long read_32(IOBUF inp) { unsigned long a; a = (unsigned long)iobuf_get_noeof(inp) << 24; a |= iobuf_get_noeof(inp) << 16; a |= iobuf_get_noeof(inp) << 8; a |= iobuf_get_noeof(inp); return a; } int set_packet_list_mode( int mode ) { int old = list_mode; list_mode = mode; mpi_print_mode = DBG_MPI; /* We use stdout print only if invoked by the --list-packets command but switch to stderr in all otehr cases. This breaks the previous behaviour but that seems to be more of a bug than intentional. I don't believe that any application makes use of this long standing annoying way of printing to stdout except when doing a --list-packets. If this assumption fails, it will be easy to add an option for the listing stream. Note that we initialize it only once; mainly because some code may switch the option value later back to 1 and we want to have all output to the same stream. Using stderr is not actually very clean because it bypasses the logging code but it is a special thing anyay. I am not sure whether using log_stream() would be better. Perhaps we should enable the list mdoe only with a special option. */ if (!listfp) listfp = opt.list_packets == 2 ? stdout : stderr; return old; } static void unknown_pubkey_warning( int algo ) { static byte unknown_pubkey_algos[256]; algo &= 0xff; if( !unknown_pubkey_algos[algo] ) { if( opt.verbose ) log_info(_("can't handle public key algorithm %d\n"), algo ); unknown_pubkey_algos[algo] = 1; } } /**************** * Parse a Packet and return it in packet * Returns: 0 := valid packet in pkt * -1 := no more packets * >0 := error * Note: The function may return an error and a partly valid packet; * caller must free this packet. */ #ifdef DEBUG_PARSE_PACKET int dbg_parse_packet( IOBUF inp, PACKET *pkt, const char *dbg_f, int dbg_l ) { int skip, rc; do { rc = parse( inp, pkt, 0, NULL, &skip, NULL, 0, "parse", dbg_f, dbg_l ); } while( skip ); return rc; } #else int parse_packet( IOBUF inp, PACKET *pkt ) { int skip, rc; do { rc = parse( inp, pkt, 0, NULL, &skip, NULL, 0 ); } while( skip ); return rc; } #endif /**************** * Like parse packet, but only return secret or public (sub)key packets. */ #ifdef DEBUG_PARSE_PACKET int dbg_search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid, const char *dbg_f, int dbg_l ) { int skip, rc; do { rc = parse( inp, pkt, with_uid?2:1, retpos, &skip, NULL, 0, "search", dbg_f, dbg_l ); } while( skip ); return rc; } #else int search_packet( IOBUF inp, PACKET *pkt, off_t *retpos, int with_uid ) { int skip, rc; do { rc = parse( inp, pkt, with_uid?2:1, retpos, &skip, NULL, 0 ); } while( skip ); return rc; } #endif /**************** * Copy all packets from INP to OUT, thereby removing unused spaces. */ #ifdef DEBUG_PARSE_PACKET int dbg_copy_all_packets( IOBUF inp, IOBUF out, const char *dbg_f, int dbg_l ) { PACKET pkt; int skip, rc=0; do { init_packet(&pkt); } while( !(rc = parse( inp, &pkt, 0, NULL, &skip, out, 0, "copy", dbg_f, dbg_l ))); return rc; } #else int copy_all_packets( IOBUF inp, IOBUF out ) { PACKET pkt; int skip, rc=0; do { init_packet(&pkt); } while( !(rc = parse( inp, &pkt, 0, NULL, &skip, out, 0 ))); return rc; } #endif /**************** * Copy some packets from INP to OUT, thereby removing unused spaces. * Stop at offset STOPoff (i.e. don't copy packets at this or later offsets) */ #ifdef DEBUG_PARSE_PACKET int dbg_copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff, const char *dbg_f, int dbg_l ) { PACKET pkt; int skip, rc=0; do { if( iobuf_tell(inp) >= stopoff ) return 0; init_packet(&pkt); } while( !(rc = parse( inp, &pkt, 0, NULL, &skip, out, 0, "some", dbg_f, dbg_l )) ); return rc; } #else int copy_some_packets( IOBUF inp, IOBUF out, off_t stopoff ) { PACKET pkt; int skip, rc=0; do { if( iobuf_tell(inp) >= stopoff ) return 0; init_packet(&pkt); } while( !(rc = parse( inp, &pkt, 0, NULL, &skip, out, 0 )) ); return rc; } #endif /**************** * Skip over N packets */ #ifdef DEBUG_PARSE_PACKET int dbg_skip_some_packets( IOBUF inp, unsigned n, const char *dbg_f, int dbg_l ) { int skip, rc=0; PACKET pkt; for( ;n && !rc; n--) { init_packet(&pkt); rc = parse( inp, &pkt, 0, NULL, &skip, NULL, 1, "skip", dbg_f, dbg_l ); } return rc; } #else int skip_some_packets( IOBUF inp, unsigned n ) { int skip, rc=0; PACKET pkt; for( ;n && !rc; n--) { init_packet(&pkt); rc = parse( inp, &pkt, 0, NULL, &skip, NULL, 1 ); } return rc; } #endif /**************** * Parse packet. Set the variable skip points to 1 if the packet * should be skipped; this is the case if either ONLYKEYPKTS is set * and the parsed packet isn't one or the * packet-type is 0, indicating deleted stuff. * if OUT is not NULL, a special copymode is used. */ static int parse( IOBUF inp, PACKET *pkt, int onlykeypkts, off_t *retpos, int *skip, IOBUF out, int do_skip #ifdef DEBUG_PARSE_PACKET ,const char *dbg_w, const char *dbg_f, int dbg_l #endif ) { int rc=0, c, ctb, pkttype, lenbytes; unsigned long pktlen; byte hdr[8]; int hdrlen; int new_ctb = 0, partial=0; int with_uid = (onlykeypkts == 2); *skip = 0; assert( !pkt->pkt.generic ); if( retpos ) *retpos = iobuf_tell(inp); if( (ctb = iobuf_get(inp)) == -1 ) { rc = -1; goto leave; } hdrlen=0; hdr[hdrlen++] = ctb; if( !(ctb & 0x80) ) { log_error("%s: invalid packet (ctb=%02x)\n", iobuf_where(inp), ctb ); rc = G10ERR_INVALID_PACKET; goto leave; } pktlen = 0; new_ctb = !!(ctb & 0x40); if( new_ctb ) { pkttype = ctb & 0x3f; if( (c = iobuf_get(inp)) == -1 ) { log_error("%s: 1st length byte missing\n", iobuf_where(inp) ); rc = G10ERR_INVALID_PACKET; goto leave; } /* The follwing code has been here for ages (2002-08-30) but it is clearly wrong: For example passing a 0 as second argument to iobuf_set_partial_block_mode stops the partial block mode which we definitely do not want. Also all values < 224 or 255 are not valid. Let's disable it and put PKT_COMPRESSED into the list of allowed packets with partial header until someone complains. */ /* if (pkttype == PKT_COMPRESSED) { */ /* iobuf_set_partial_block_mode(inp, c & 0xff); */ /* pktlen = 0;/\* to indicate partial length *\/ */ /* partial=1; */ /* } */ /* else { */ { hdr[hdrlen++] = c; if( c < 192 ) pktlen = c; else if( c < 224 ) { pktlen = (c - 192) * 256; if( (c = iobuf_get(inp)) == -1 ) { log_error("%s: 2nd length byte missing\n", iobuf_where(inp) ); rc = G10ERR_INVALID_PACKET; goto leave; } hdr[hdrlen++] = c; pktlen += c + 192; } else if( c == 255 ) { pktlen = (unsigned long)(hdr[hdrlen++] = iobuf_get_noeof(inp)) << 24; pktlen |= (hdr[hdrlen++] = iobuf_get_noeof(inp)) << 16; pktlen |= (hdr[hdrlen++] = iobuf_get_noeof(inp)) << 8; if( (c = iobuf_get(inp)) == -1 ) { log_error("%s: 4 byte length invalid\n", iobuf_where(inp) ); rc = G10ERR_INVALID_PACKET; goto leave; } pktlen |= (hdr[hdrlen++] = c ); } else { /* Partial body length. */ switch (pkttype) { case PKT_PLAINTEXT: case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: case PKT_COMPRESSED: iobuf_set_partial_block_mode (inp, (c & 0xff)); pktlen = 0; /* Indicate partial length. */ partial= 1; break; default: log_error ("%s: partial length for invalid" " packet type %d\n", iobuf_where(inp),pkttype); rc = G10ERR_INVALID_PACKET; goto leave; } } } } else { pkttype = (ctb>>2)&0xf; lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3)); if( !lenbytes ) { pktlen = 0; /* don't know the value */ /* This isn't really partial, but we can treat it the same in a "read until the end" sort of way. */ partial=1; if(pkttype!=PKT_ENCRYPTED && pkttype!=PKT_PLAINTEXT && pkttype!=PKT_COMPRESSED) { log_error ("%s: indeterminate length for invalid" " packet type %d\n", iobuf_where(inp), pkttype ); rc = G10ERR_INVALID_PACKET; goto leave; } } else { for( ; lenbytes; lenbytes-- ) { pktlen <<= 8; pktlen |= hdr[hdrlen++] = iobuf_get_noeof(inp); } } } if (pktlen == (unsigned long)(-1)) { /* With some probability this is caused by a problem in the * the uncompressing layer - in some error cases it just loops * and spits out 0xff bytes. */ log_error ("%s: garbled packet detected\n", iobuf_where(inp) ); g10_exit (2); } if( out && pkttype ) { if( iobuf_write( out, hdr, hdrlen ) == -1 ) rc = G10ERR_WRITE_FILE; else rc = copy_packet(inp, out, pkttype, pktlen, partial ); goto leave; } if (with_uid && pkttype == PKT_USER_ID) ; else if( do_skip || !pkttype || (onlykeypkts && pkttype != PKT_PUBLIC_SUBKEY && pkttype != PKT_PUBLIC_KEY && pkttype != PKT_SECRET_SUBKEY && pkttype != PKT_SECRET_KEY ) ) { iobuf_skip_rest(inp, pktlen, partial); *skip = 1; rc = 0; goto leave; } if( DBG_PACKET ) { #ifdef DEBUG_PARSE_PACKET log_debug("parse_packet(iob=%d): type=%d length=%lu%s (%s.%s.%d)\n", iobuf_id(inp), pkttype, pktlen, new_ctb?" (new_ctb)":"", dbg_w, dbg_f, dbg_l ); #else log_debug("parse_packet(iob=%d): type=%d length=%lu%s\n", iobuf_id(inp), pkttype, pktlen, new_ctb?" (new_ctb)":"" ); #endif } pkt->pkttype = pkttype; rc = G10ERR_UNKNOWN_PACKET; /* default error */ switch( pkttype ) { case PKT_PUBLIC_KEY: case PKT_PUBLIC_SUBKEY: pkt->pkt.public_key = xmalloc_clear(sizeof *pkt->pkt.public_key ); rc = parse_key(inp, pkttype, pktlen, hdr, hdrlen, pkt ); break; case PKT_SECRET_KEY: case PKT_SECRET_SUBKEY: pkt->pkt.secret_key = xmalloc_clear(sizeof *pkt->pkt.secret_key ); rc = parse_key(inp, pkttype, pktlen, hdr, hdrlen, pkt ); break; case PKT_SYMKEY_ENC: rc = parse_symkeyenc( inp, pkttype, pktlen, pkt ); break; case PKT_PUBKEY_ENC: rc = parse_pubkeyenc(inp, pkttype, pktlen, pkt ); break; case PKT_SIGNATURE: pkt->pkt.signature = xmalloc_clear(sizeof *pkt->pkt.signature ); rc = parse_signature(inp, pkttype, pktlen, pkt->pkt.signature ); break; case PKT_ONEPASS_SIG: pkt->pkt.onepass_sig = xmalloc_clear(sizeof *pkt->pkt.onepass_sig ); rc = parse_onepass_sig(inp, pkttype, pktlen, pkt->pkt.onepass_sig ); break; case PKT_USER_ID: rc = parse_user_id(inp, pkttype, pktlen, pkt ); break; case PKT_ATTRIBUTE: pkt->pkttype = pkttype = PKT_USER_ID; /* we store it in the userID */ rc = parse_attribute(inp, pkttype, pktlen, pkt); break; case PKT_OLD_COMMENT: case PKT_COMMENT: rc = parse_comment(inp, pkttype, pktlen, pkt); break; case PKT_RING_TRUST: parse_trust(inp, pkttype, pktlen, pkt); rc = 0; break; case PKT_PLAINTEXT: rc = parse_plaintext(inp, pkttype, pktlen, pkt, new_ctb, partial ); break; case PKT_COMPRESSED: rc = parse_compressed(inp, pkttype, pktlen, pkt, new_ctb ); break; case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: rc = parse_encrypted(inp, pkttype, pktlen, pkt, new_ctb, partial ); break; case PKT_MDC: rc = parse_mdc(inp, pkttype, pktlen, pkt, new_ctb ); break; case PKT_GPG_CONTROL: rc = parse_gpg_control(inp, pkttype, pktlen, pkt, partial ); break; case PKT_MARKER: rc = parse_marker(inp,pkttype,pktlen); break; default: skip_packet(inp, pkttype, pktlen, partial); break; } leave: if( !rc && iobuf_error(inp) ) rc = G10ERR_INV_KEYRING; return rc; } static void dump_hex_line( int c, int *i ) { if( *i && !(*i%8) ) { if( *i && !(*i%24) ) fprintf (listfp, "\n%4d:", *i ); else putc (' ', listfp); } if( c == -1 ) fprintf (listfp, " EOF" ); else fprintf (listfp, " %02x", c ); ++*i; } static int copy_packet( IOBUF inp, IOBUF out, int pkttype, unsigned long pktlen, int partial ) { int n; char buf[100]; if( partial ) { while( (n = iobuf_read( inp, buf, 100 )) != -1 ) if( iobuf_write(out, buf, n ) ) return G10ERR_WRITE_FILE; /* write error */ } else if( !pktlen && pkttype == PKT_COMPRESSED ) { log_debug("copy_packet: compressed!\n"); /* compressed packet, copy till EOF */ while( (n = iobuf_read( inp, buf, 100 )) != -1 ) if( iobuf_write(out, buf, n ) ) return G10ERR_WRITE_FILE; /* write error */ } else { for( ; pktlen; pktlen -= n ) { n = pktlen > 100 ? 100 : pktlen; n = iobuf_read( inp, buf, n ); if( n == -1 ) return G10ERR_READ_FILE; if( iobuf_write(out, buf, n ) ) return G10ERR_WRITE_FILE; /* write error */ } } return 0; } static void skip_packet( IOBUF inp, int pkttype, unsigned long pktlen, int partial ) { if( list_mode ) { fprintf (listfp, ":unknown packet: type %2d, length %lu\n", pkttype, pktlen); if( pkttype ) { int c, i=0 ; fputs("dump:", listfp ); if( partial ) { while( (c=iobuf_get(inp)) != -1 ) dump_hex_line(c, &i); } else { for( ; pktlen; pktlen-- ) { dump_hex_line ((c=iobuf_get(inp)), &i); if (c==-1) break; } } putc ('\n', listfp); return; } } iobuf_skip_rest(inp,pktlen,partial); } static void * read_rest( IOBUF inp, size_t pktlen, int partial ) { byte *p; int i; if( partial ) { log_error("read_rest: can't store stream data\n"); p = NULL; } else { p = xmalloc( pktlen ); for(i=0; pktlen; pktlen--, i++ ) p[i] = iobuf_get(inp); } return p; } static int parse_marker( IOBUF inp, int pkttype, unsigned long pktlen ) { if(pktlen!=3) goto fail; if(iobuf_get(inp)!='P') { pktlen--; goto fail; } if(iobuf_get(inp)!='G') { pktlen--; goto fail; } if(iobuf_get(inp)!='P') { pktlen--; goto fail; } if(list_mode) fputs(":marker packet: PGP\n", listfp ); return 0; fail: log_error("invalid marker packet\n"); iobuf_skip_rest(inp,pktlen,0); return G10ERR_INVALID_PACKET; } static int parse_symkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { PKT_symkey_enc *k; int rc = 0; int i, version, s2kmode, cipher_algo, hash_algo, seskeylen, minlen; if( pktlen < 4 ) { log_error("packet(%d) too short\n", pkttype); rc = G10ERR_INVALID_PACKET; goto leave; } version = iobuf_get_noeof(inp); pktlen--; if( version != 4 ) { log_error("packet(%d) with unknown version %d\n", pkttype, version); rc = G10ERR_INVALID_PACKET; goto leave; } if( pktlen > 200 ) { /* (we encode the seskeylen in a byte) */ log_error("packet(%d) too large\n", pkttype); rc = G10ERR_INVALID_PACKET; goto leave; } cipher_algo = iobuf_get_noeof(inp); pktlen--; s2kmode = iobuf_get_noeof(inp); pktlen--; hash_algo = iobuf_get_noeof(inp); pktlen--; switch( s2kmode ) { case 0: /* simple s2k */ minlen = 0; break; case 1: /* salted s2k */ minlen = 8; break; case 3: /* iterated+salted s2k */ minlen = 9; break; default: log_error("unknown S2K %d\n", s2kmode ); goto leave; } if( minlen > pktlen ) { log_error("packet with S2K %d too short\n", s2kmode ); rc = G10ERR_INVALID_PACKET; goto leave; } seskeylen = pktlen - minlen; k = packet->pkt.symkey_enc = xmalloc_clear( sizeof *packet->pkt.symkey_enc + seskeylen - 1 ); k->version = version; k->cipher_algo = cipher_algo; k->s2k.mode = s2kmode; k->s2k.hash_algo = hash_algo; if( s2kmode == 1 || s2kmode == 3 ) { for(i=0; i < 8 && pktlen; i++, pktlen-- ) k->s2k.salt[i] = iobuf_get_noeof(inp); } if( s2kmode == 3 ) { k->s2k.count = iobuf_get(inp); pktlen--; } k->seskeylen = seskeylen; if(k->seskeylen) { for(i=0; i < seskeylen && pktlen; i++, pktlen-- ) k->seskey[i] = iobuf_get_noeof(inp); /* What we're watching out for here is a session key decryptor with no salt. The RFC says that using salt for this is a MUST. */ if(s2kmode!=1 && s2kmode!=3) log_info(_("WARNING: potentially insecure symmetrically" " encrypted session key\n")); } assert( !pktlen ); if( list_mode ) { fprintf (listfp, ":symkey enc packet: version %d, cipher %d, s2k %d, hash %d", version, cipher_algo, s2kmode, hash_algo); if(seskeylen) fprintf (listfp, ", seskey %d bits",(seskeylen-1)*8); fprintf (listfp, "\n"); if( s2kmode == 1 || s2kmode == 3 ) { fprintf (listfp, "\tsalt "); for(i=0; i < 8; i++ ) fprintf (listfp, "%02x", k->s2k.salt[i]); if( s2kmode == 3 ) fprintf (listfp, ", count %lu (%lu)", S2K_DECODE_COUNT((ulong)k->s2k.count), (ulong)k->s2k.count ); fprintf (listfp, "\n"); } } leave: iobuf_skip_rest(inp, pktlen, 0); return rc; } static int parse_pubkeyenc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { unsigned int n; int rc = 0; int i, ndata; PKT_pubkey_enc *k; k = packet->pkt.pubkey_enc = xmalloc_clear(sizeof *packet->pkt.pubkey_enc); if( pktlen < 12 ) { log_error("packet(%d) too short\n", pkttype); rc = G10ERR_INVALID_PACKET; goto leave; } k->version = iobuf_get_noeof(inp); pktlen--; if( k->version != 2 && k->version != 3 ) { log_error("packet(%d) with unknown version %d\n", pkttype, k->version); rc = G10ERR_INVALID_PACKET; goto leave; } k->keyid[0] = read_32(inp); pktlen -= 4; k->keyid[1] = read_32(inp); pktlen -= 4; k->pubkey_algo = iobuf_get_noeof(inp); pktlen--; k->throw_keyid = 0; /* only used as flag for build_packet */ if( list_mode ) fprintf (listfp, ":pubkey enc packet: version %d, algo %d, keyid %08lX%08lX\n", k->version, k->pubkey_algo, (ulong)k->keyid[0], (ulong)k->keyid[1]); ndata = pubkey_get_nenc(k->pubkey_algo); if( !ndata ) { if( list_mode ) fprintf (listfp, "\tunsupported algorithm %d\n", k->pubkey_algo ); unknown_pubkey_warning( k->pubkey_algo ); k->data[0] = NULL; /* no need to store the encrypted data */ } else { for( i=0; i < ndata; i++ ) { n = pktlen; k->data[i] = mpi_read(inp, &n, 0); pktlen -=n; if( list_mode ) { fprintf (listfp, "\tdata: "); mpi_print(listfp, k->data[i], mpi_print_mode ); putc ('\n', listfp); } if (!k->data[i]) rc = G10ERR_INVALID_PACKET; } } leave: iobuf_skip_rest(inp, pktlen, 0); return rc; } static void dump_sig_subpkt( int hashed, int type, int critical, const byte *buffer, size_t buflen, size_t length ) { const char *p=NULL; int i; /* The CERT has warning out with explains how to use GNUPG to * detect the ARRs - we print our old message here when it is a faked * ARR and add an additional notice */ if ( type == SIGSUBPKT_ARR && !hashed ) { fprintf (listfp, "\tsubpkt %d len %u (additional recipient request)\n" "WARNING: PGP versions > 5.0 and < 6.5.8 will automagically " "encrypt to this key and thereby reveal the plaintext to " "the owner of this ARR key. Detailed info follows:\n", type, (unsigned)length ); } buffer++; length--; fprintf (listfp, "\t%s%ssubpkt %d len %u (", /*)*/ critical ? "critical ":"", hashed ? "hashed ":"", type, (unsigned)length ); if( length > buflen ) { fprintf (listfp, "too short: buffer is only %u)\n", (unsigned)buflen ); return; } switch( type ) { case SIGSUBPKT_SIG_CREATED: if( length >= 4 ) fprintf (listfp, "sig created %s", strtimestamp (buf32_to_u32(buffer)) ); break; case SIGSUBPKT_SIG_EXPIRE: if( length >= 4 ) { if(buf32_to_u32(buffer)) fprintf (listfp, "sig expires after %s", strtimevalue( buf32_to_u32(buffer) ) ); else fprintf (listfp, "sig does not expire"); } break; case SIGSUBPKT_EXPORTABLE: if( length ) fprintf (listfp, "%sexportable", *buffer? "":"not "); break; case SIGSUBPKT_TRUST: if(length!=2) p="[invalid trust subpacket]"; else fprintf (listfp, "trust signature of depth %d, value %d", buffer[0],buffer[1]); break; case SIGSUBPKT_REGEXP: if(!length) p="[invalid regexp subpacket]"; else { fprintf (listfp, "regular expression: \""); print_string (listfp, buffer, length, '\"'); p = "\""; } break; case SIGSUBPKT_REVOCABLE: if( length ) fprintf (listfp, "%srevocable", *buffer? "":"not "); break; case SIGSUBPKT_KEY_EXPIRE: if( length >= 4 ) { if(buf32_to_u32(buffer)) fprintf (listfp, "key expires after %s", strtimevalue( buf32_to_u32(buffer) ) ); else fprintf (listfp, "key does not expire"); } break; case SIGSUBPKT_PREF_SYM: fputs("pref-sym-algos:", listfp ); for( i=0; i < length; i++ ) fprintf (listfp, " %d", buffer[i] ); break; case SIGSUBPKT_REV_KEY: fputs("revocation key: ", listfp ); if( length < 22 ) p = "[too short]"; else { fprintf (listfp, "c=%02x a=%d f=", buffer[0], buffer[1] ); for( i=2; i < length; i++ ) fprintf (listfp, "%02X", buffer[i] ); } break; case SIGSUBPKT_ISSUER: if( length >= 8 ) fprintf (listfp, "issuer key ID %08lX%08lX", buf32_to_ulong (buffer), buf32_to_ulong (buffer+4)); break; case SIGSUBPKT_NOTATION: { fputs("notation: ", listfp ); if( length < 8 ) p = "[too short]"; else { const byte *s = buffer; size_t n1, n2; n1 = (s[4] << 8) | s[5]; n2 = (s[6] << 8) | s[7]; s += 8; if( 8+n1+n2 != length ) p = "[error]"; else { print_string( listfp, s, n1, ')' ); putc( '=', listfp ); if( *buffer & 0x80 ) print_string( listfp, s+n1, n2, ')' ); else p = "[not human readable]"; } } } break; case SIGSUBPKT_PREF_HASH: fputs("pref-hash-algos:", listfp ); for( i=0; i < length; i++ ) fprintf (listfp, " %d", buffer[i] ); break; case SIGSUBPKT_PREF_COMPR: fputs("pref-zip-algos:", listfp ); for( i=0; i < length; i++ ) fprintf (listfp, " %d", buffer[i] ); break; case SIGSUBPKT_KS_FLAGS: fputs("key server preferences:",listfp); for(i=0;i=100 && type<=110) p="experimental / private subpacket"; else p = "?"; break; } fprintf (listfp, "%s)\n", p? p: ""); } /**************** * Returns: >= 0 use this offset into buffer * -1 explicitly reject returning this type * -2 subpacket too short */ int parse_one_sig_subpkt( const byte *buffer, size_t n, int type ) { switch( type ) { case SIGSUBPKT_REV_KEY: if(n < 22) break; return 0; case SIGSUBPKT_SIG_CREATED: case SIGSUBPKT_SIG_EXPIRE: case SIGSUBPKT_KEY_EXPIRE: if( n < 4 ) break; return 0; case SIGSUBPKT_KEY_FLAGS: case SIGSUBPKT_KS_FLAGS: case SIGSUBPKT_PREF_SYM: case SIGSUBPKT_PREF_HASH: case SIGSUBPKT_PREF_COMPR: case SIGSUBPKT_POLICY: case SIGSUBPKT_PREF_KS: case SIGSUBPKT_FEATURES: case SIGSUBPKT_REGEXP: return 0; case SIGSUBPKT_SIGNATURE: case SIGSUBPKT_EXPORTABLE: case SIGSUBPKT_REVOCABLE: case SIGSUBPKT_REVOC_REASON: if( !n ) break; return 0; case SIGSUBPKT_ISSUER: /* issuer key ID */ if( n < 8 ) break; return 0; case SIGSUBPKT_NOTATION: /* minimum length needed, and the subpacket must be well-formed where the name length and value length all fit inside the packet. */ if(n<8 || 8+((buffer[4]<<8)|buffer[5])+((buffer[6]<<8)|buffer[7]) != n) break; return 0; case SIGSUBPKT_PRIMARY_UID: if ( n != 1 ) break; return 0; case SIGSUBPKT_TRUST: if ( n != 2 ) break; return 0; default: return 0; } return -2; } /* Not many critical notations we understand yet... */ static int can_handle_critical_notation(const byte *name,size_t len) { if(len==32 && memcmp(name,"preferred-email-encoding@pgp.com",32)==0) return 1; if(len==21 && memcmp(name,"pka-address@gnupg.org",21)==0) return 1; return 0; } static int can_handle_critical( const byte *buffer, size_t n, int type ) { switch( type ) { case SIGSUBPKT_NOTATION: if (n >= 8) { size_t notation_len = ((buffer[4] << 8) | buffer[5]); if (n - 8 >= notation_len) return can_handle_critical_notation (buffer + 8, notation_len); } return 0; case SIGSUBPKT_SIGNATURE: case SIGSUBPKT_SIG_CREATED: case SIGSUBPKT_SIG_EXPIRE: case SIGSUBPKT_KEY_EXPIRE: case SIGSUBPKT_EXPORTABLE: case SIGSUBPKT_REVOCABLE: case SIGSUBPKT_REV_KEY: case SIGSUBPKT_ISSUER:/* issuer key ID */ case SIGSUBPKT_PREF_SYM: case SIGSUBPKT_PREF_HASH: case SIGSUBPKT_PREF_COMPR: case SIGSUBPKT_KEY_FLAGS: case SIGSUBPKT_PRIMARY_UID: case SIGSUBPKT_FEATURES: case SIGSUBPKT_TRUST: case SIGSUBPKT_REGEXP: /* Is it enough to show the policy or keyserver? */ case SIGSUBPKT_POLICY: case SIGSUBPKT_PREF_KS: return 1; default: return 0; } } const byte * enum_sig_subpkt( const subpktarea_t *pktbuf, sigsubpkttype_t reqtype, size_t *ret_n, int *start, int *critical ) { const byte *buffer; int buflen; int type; int critical_dummy; int offset; size_t n; int seq = 0; int reqseq = start? *start: 0; if(!critical) critical=&critical_dummy; if( !pktbuf || reqseq == -1 ) { static char dummy[] = "x"; /* Return a value different from NULL to indicate that * there is no critical bit we do not understand. */ return reqtype == SIGSUBPKT_TEST_CRITICAL ? dummy : NULL; } buffer = pktbuf->data; buflen = pktbuf->len; while( buflen ) { n = *buffer++; buflen--; if( n == 255 ) { /* 4 byte length header */ if( buflen < 4 ) goto too_short; n = buf32_to_size_t (buffer); buffer += 4; buflen -= 4; } else if( n >= 192 ) { /* 2 byte special encoded length header */ if( buflen < 2 ) goto too_short; n = (( n - 192 ) << 8) + *buffer + 192; buffer++; buflen--; } if( buflen < n ) goto too_short; type = *buffer; if( type & 0x80 ) { type &= 0x7f; *critical = 1; } else *critical = 0; if( !(++seq > reqseq) ) ; else if( reqtype == SIGSUBPKT_TEST_CRITICAL ) { if( *critical ) { if( n-1 > buflen+1 ) goto too_short; if( !can_handle_critical(buffer+1, n-1, type ) ) { if(opt.verbose) log_info(_("subpacket of type %d has " "critical bit set\n"),type); if( start ) *start = seq; return NULL; /* this is an error */ } } } else if( reqtype < 0 ) /* list packets */ dump_sig_subpkt( reqtype == SIGSUBPKT_LIST_HASHED, type, *critical, buffer, buflen, n ); else if( type == reqtype ) { /* found */ buffer++; n--; if( n > buflen ) goto too_short; if( ret_n ) *ret_n = n; offset = parse_one_sig_subpkt(buffer, n, type ); switch( offset ) { case -2: log_error("subpacket of type %d too short\n", type); return NULL; case -1: return NULL; default: break; } if( start ) *start = seq; return buffer+offset; } buffer += n; buflen -=n; } if( reqtype == SIGSUBPKT_TEST_CRITICAL ) return buffer; /* as value true to indicate that there is no */ /* critical bit we don't understand */ if( start ) *start = -1; return NULL; /* end of packets; not found */ too_short: if(opt.verbose) log_info("buffer shorter than subpacket\n"); if( start ) *start = -1; return NULL; } const byte * parse_sig_subpkt (const subpktarea_t *buffer, sigsubpkttype_t reqtype, size_t *ret_n) { return enum_sig_subpkt( buffer, reqtype, ret_n, NULL, NULL ); } const byte * parse_sig_subpkt2 (PKT_signature *sig, sigsubpkttype_t reqtype, size_t *ret_n ) { const byte *p; p = parse_sig_subpkt (sig->hashed, reqtype, ret_n ); if( !p ) p = parse_sig_subpkt (sig->unhashed, reqtype, ret_n ); return p; } /* Find all revocation keys. Look in hashed area only. */ void parse_revkeys(PKT_signature *sig) { struct revocation_key *revkey; int seq=0; size_t len; if(sig->sig_class!=0x1F) return; while((revkey= (struct revocation_key *)enum_sig_subpkt(sig->hashed, SIGSUBPKT_REV_KEY, &len,&seq,NULL))) { if(len==sizeof(struct revocation_key) && (revkey->class&0x80)) /* 0x80 bit must be set */ { sig->revkey=xrealloc(sig->revkey, sizeof(struct revocation_key *)*(sig->numrevkeys+1)); sig->revkey[sig->numrevkeys]=revkey; sig->numrevkeys++; } } } int parse_signature( IOBUF inp, int pkttype, unsigned long pktlen, PKT_signature *sig ) { int md5_len=0; unsigned n; int is_v4=0; int rc=0; int i, ndata; if( pktlen < 16 ) { log_error("packet(%d) too short\n", pkttype); goto leave; } sig->version = iobuf_get_noeof(inp); pktlen--; if( sig->version == 4 ) is_v4=1; else if( sig->version != 2 && sig->version != 3 ) { log_error("packet(%d) with unknown version %d\n", pkttype, sig->version); rc = G10ERR_INVALID_PACKET; goto leave; } if( !is_v4 ) { md5_len = iobuf_get_noeof(inp); pktlen--; } sig->sig_class = iobuf_get_noeof(inp); pktlen--; if( !is_v4 ) { sig->timestamp = read_32(inp); pktlen -= 4; sig->keyid[0] = read_32(inp); pktlen -= 4; sig->keyid[1] = read_32(inp); pktlen -= 4; } sig->pubkey_algo = iobuf_get_noeof(inp); pktlen--; sig->digest_algo = iobuf_get_noeof(inp); pktlen--; sig->flags.exportable=1; sig->flags.revocable=1; if( is_v4 ) { /* read subpackets */ n = read_16(inp); pktlen -= 2; /* length of hashed data */ if( n > 10000 ) { log_error("signature packet: hashed data too long\n"); rc = G10ERR_INVALID_PACKET; goto leave; } if( n ) { sig->hashed = xmalloc (sizeof (*sig->hashed) + n - 1 ); sig->hashed->size = n; sig->hashed->len = n; if( iobuf_read (inp, sig->hashed->data, n ) != n ) { log_error ("premature eof while reading " "hashed signature data\n"); rc = -1; goto leave; } pktlen -= n; } n = read_16(inp); pktlen -= 2; /* length of unhashed data */ if( n > 10000 ) { log_error("signature packet: unhashed data too long\n"); rc = G10ERR_INVALID_PACKET; goto leave; } if( n ) { sig->unhashed = xmalloc (sizeof(*sig->unhashed) + n - 1 ); sig->unhashed->size = n; sig->unhashed->len = n; if( iobuf_read(inp, sig->unhashed->data, n ) != n ) { log_error("premature eof while reading " "unhashed signature data\n"); rc = -1; goto leave; } pktlen -= n; } } if( pktlen < 5 ) { /* sanity check */ log_error("packet(%d) too short\n", pkttype); rc = G10ERR_INVALID_PACKET; goto leave; } sig->digest_start[0] = iobuf_get_noeof(inp); pktlen--; sig->digest_start[1] = iobuf_get_noeof(inp); pktlen--; if( is_v4 && sig->pubkey_algo ) { /*extract required information */ const byte *p; size_t len; /* set sig->flags.unknown_critical if there is a * critical bit set for packets which we do not understand */ if( !parse_sig_subpkt (sig->hashed, SIGSUBPKT_TEST_CRITICAL, NULL) || !parse_sig_subpkt (sig->unhashed, SIGSUBPKT_TEST_CRITICAL, NULL) ) sig->flags.unknown_critical = 1; p = parse_sig_subpkt (sig->hashed, SIGSUBPKT_SIG_CREATED, NULL ); if(p) sig->timestamp = buf32_to_u32 (p); else if(!(sig->pubkey_algo>=100 && sig->pubkey_algo<=110) && opt.verbose) log_info ("signature packet without timestamp\n"); p = parse_sig_subpkt2( sig, SIGSUBPKT_ISSUER, NULL ); if(p) { sig->keyid[0] = buf32_to_u32 (p); sig->keyid[1] = buf32_to_u32 (p+4); } else if(!(sig->pubkey_algo>=100 && sig->pubkey_algo<=110) && opt.verbose) log_info ("signature packet without keyid\n"); p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_SIG_EXPIRE,NULL); if(p && buf32_to_u32 (p)) sig->expiredate = sig->timestamp + buf32_to_u32 (p); if(sig->expiredate && sig->expiredate<=make_timestamp()) sig->flags.expired=1; p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_POLICY,NULL); if(p) sig->flags.policy_url=1; p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_PREF_KS,NULL); if(p) sig->flags.pref_ks=1; p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,NULL); if(p) sig->flags.notation=1; p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_REVOCABLE,NULL); if(p && *p==0) sig->flags.revocable=0; p=parse_sig_subpkt(sig->hashed,SIGSUBPKT_TRUST,&len); if(p && len==2) { sig->trust_depth=p[0]; sig->trust_value=p[1]; /* Only look for a regexp if there is also a trust subpacket. */ sig->trust_regexp= parse_sig_subpkt(sig->hashed,SIGSUBPKT_REGEXP,&len); /* If the regular expression is of 0 length, there is no regular expression. */ if(len==0) sig->trust_regexp=NULL; } /* We accept the exportable subpacket from either the hashed or unhashed areas as older versions of gpg put it in the unhashed area. In theory, anyway, we should never see this packet off of a local keyring. */ p=parse_sig_subpkt2(sig,SIGSUBPKT_EXPORTABLE,NULL); if(p && *p==0) sig->flags.exportable=0; /* Find all revocation keys. */ if(sig->sig_class==0x1F) parse_revkeys(sig); } if( list_mode ) { fprintf (listfp, ":signature packet: algo %d, keyid %08lX%08lX\n" "\tversion %d, created %lu, md5len %d, sigclass 0x%02x\n" "\tdigest algo %d, begin of digest %02x %02x\n", sig->pubkey_algo, (ulong)sig->keyid[0], (ulong)sig->keyid[1], sig->version, (ulong)sig->timestamp, md5_len, sig->sig_class, sig->digest_algo, sig->digest_start[0], sig->digest_start[1] ); if( is_v4 ) { parse_sig_subpkt (sig->hashed, SIGSUBPKT_LIST_HASHED, NULL ); parse_sig_subpkt (sig->unhashed, SIGSUBPKT_LIST_UNHASHED, NULL); } } ndata = pubkey_get_nsig(sig->pubkey_algo); if( !ndata ) { if( list_mode ) fprintf (listfp, "\tunknown algorithm %d\n", sig->pubkey_algo ); unknown_pubkey_warning( sig->pubkey_algo ); /* We store the plain material in data[0], so that we are able * to write it back with build_packet() */ if (pktlen > (5 * MAX_EXTERN_MPI_BITS/8)) { /* However we include a limit to avoid too trivial DoS attacks by having gpg allocate too much memory. */ log_error ("signature packet: too much data\n"); rc = G10ERR_INVALID_PACKET; } else { sig->data[0]= mpi_set_opaque (NULL, read_rest(inp, pktlen, 0), pktlen ); pktlen = 0; } } else { for( i=0; i < ndata; i++ ) { n = pktlen; sig->data[i] = mpi_read(inp, &n, 0 ); pktlen -=n; if( list_mode ) { fprintf (listfp, "\tdata: "); mpi_print(listfp, sig->data[i], mpi_print_mode ); putc ('\n', listfp); } if (!sig->data[i]) rc = G10ERR_INVALID_PACKET; } } leave: iobuf_skip_rest(inp, pktlen, 0); return rc; } static int parse_onepass_sig( IOBUF inp, int pkttype, unsigned long pktlen, PKT_onepass_sig *ops ) { int version; int rc = 0; if( pktlen < 13 ) { log_error("packet(%d) too short\n", pkttype); rc = G10ERR_INVALID_PACKET; goto leave; } version = iobuf_get_noeof(inp); pktlen--; if( version != 3 ) { log_error("onepass_sig with unknown version %d\n", version); rc = G10ERR_INVALID_PACKET; goto leave; } ops->sig_class = iobuf_get_noeof(inp); pktlen--; ops->digest_algo = iobuf_get_noeof(inp); pktlen--; ops->pubkey_algo = iobuf_get_noeof(inp); pktlen--; ops->keyid[0] = read_32(inp); pktlen -= 4; ops->keyid[1] = read_32(inp); pktlen -= 4; ops->last = iobuf_get_noeof(inp); pktlen--; if( list_mode ) fprintf (listfp, ":onepass_sig packet: keyid %08lX%08lX\n" "\tversion %d, sigclass 0x%02x, digest %d, pubkey %d, last=%d\n", (ulong)ops->keyid[0], (ulong)ops->keyid[1], version, ops->sig_class, ops->digest_algo, ops->pubkey_algo, ops->last ); leave: iobuf_skip_rest(inp, pktlen, 0); return rc; } static MPI read_protected_v3_mpi (IOBUF inp, unsigned long *length) { int c; unsigned int nbits, nbytes; unsigned char *buf, *p; MPI val; if (*length < 2) { log_error ("mpi too small\n"); return NULL; } if ((c=iobuf_get (inp)) == -1) return NULL; --*length; nbits = c << 8; if ((c=iobuf_get(inp)) == -1) return NULL; --*length; nbits |= c; if (nbits > 16384) { log_error ("mpi too large (%u bits)\n", nbits); return NULL; } nbytes = (nbits+7) / 8; buf = p = xmalloc (2 + nbytes); *p++ = nbits >> 8; *p++ = nbits; for (; nbytes && *length; nbytes--, --*length) *p++ = iobuf_get (inp); if (nbytes) { log_error ("packet shorter tham mpi\n"); xfree (buf); return NULL; } /* convert buffer into an opaque MPI */ val = mpi_set_opaque (NULL, buf, p-buf); return val; } static int parse_key( IOBUF inp, int pkttype, unsigned long pktlen, byte *hdr, int hdrlen, PACKET *pkt ) { int i, version, algorithm; unsigned n; unsigned long timestamp, expiredate, max_expiredate; int npkey, nskey; int is_v4=0; int rc=0; u32 keyid[2]; version = iobuf_get_noeof(inp); pktlen--; if( pkttype == PKT_PUBLIC_SUBKEY && version == '#' ) { /* early versions of G10 use old PGP comments packets; * luckily all those comments are started by a hash */ if( list_mode ) { fprintf (listfp, ":rfc1991 comment packet: \"" ); for( ; pktlen; pktlen-- ) { int c; c = iobuf_get_noeof(inp); if( c >= ' ' && c <= 'z' ) putc (c, listfp); else fprintf (listfp, "\\x%02x", c ); } fprintf (listfp, "\"\n"); } iobuf_skip_rest(inp, pktlen, 0); return 0; } else if( version == 4 ) is_v4=1; else if( version != 2 && version != 3 ) { log_error("packet(%d) with unknown version %d\n", pkttype, version); rc = G10ERR_INVALID_PACKET; goto leave; } if( pktlen < 11 ) { log_error("packet(%d) too short\n", pkttype); rc = G10ERR_INVALID_PACKET; goto leave; } else if (pktlen > MAX_KEY_PACKET_LENGTH) { log_error ("packet(%d) too large\n", pkttype); if (list_mode) fputs (":key packet: [too large]\n", listfp); rc = G10ERR_INVALID_PACKET; goto leave; } timestamp = read_32(inp); pktlen -= 4; if( is_v4 ) { expiredate = 0; /* have to get it from the selfsignature */ max_expiredate = 0; } else { unsigned short ndays; ndays = read_16(inp); pktlen -= 2; if( ndays ) expiredate = timestamp + ndays * 86400L; else expiredate = 0; max_expiredate=expiredate; } algorithm = iobuf_get_noeof(inp); pktlen--; if( list_mode ) fprintf (listfp, ":%s key packet:\n" "\tversion %d, algo %d, created %lu, expires %lu\n", pkttype == PKT_PUBLIC_KEY? "public" : pkttype == PKT_SECRET_KEY? "secret" : pkttype == PKT_PUBLIC_SUBKEY? "public sub" : pkttype == PKT_SECRET_SUBKEY? "secret sub" : "??", version, algorithm, timestamp, expiredate ); if( pkttype == PKT_SECRET_KEY || pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *sk = pkt->pkt.secret_key; sk->timestamp = timestamp; sk->expiredate = expiredate; sk->max_expiredate = max_expiredate; sk->hdrbytes = hdrlen; sk->version = version; sk->is_primary = pkttype == PKT_SECRET_KEY; sk->pubkey_algo = algorithm; sk->req_usage = 0; sk->pubkey_usage = 0; /* not yet used */ } else { PKT_public_key *pk = pkt->pkt.public_key; pk->timestamp = timestamp; pk->expiredate = expiredate; pk->max_expiredate = max_expiredate; pk->hdrbytes = hdrlen; pk->version = version; pk->is_primary = pkttype == PKT_PUBLIC_KEY; pk->pubkey_algo = algorithm; pk->req_usage = 0; pk->pubkey_usage = 0; /* not yet used */ pk->is_revoked = 0; pk->is_disabled = 0; pk->keyid[0] = 0; pk->keyid[1] = 0; } nskey = pubkey_get_nskey( algorithm ); npkey = pubkey_get_npkey( algorithm ); if( !npkey ) { if( list_mode ) fprintf (listfp, "\tunknown algorithm %d\n", algorithm ); unknown_pubkey_warning( algorithm ); } if( pkttype == PKT_SECRET_KEY || pkttype == PKT_SECRET_SUBKEY ) { PKT_secret_key *sk = pkt->pkt.secret_key; byte temp[16]; size_t snlen = 0; if (pktlen < 1) { rc = G10ERR_INVALID_PACKET; goto leave; } if( !npkey ) { sk->skey[0] = mpi_set_opaque( NULL, read_rest(inp, pktlen, 0), pktlen ); pktlen = 0; goto leave; } for(i=0; i < npkey; i++ ) { n = pktlen; sk->skey[i] = mpi_read(inp, &n, 0 ); pktlen -=n; if( list_mode ) { fprintf (listfp, "\tskey[%d]: ", i); mpi_print(listfp, sk->skey[i], mpi_print_mode ); putc ('\n', listfp); } if (!sk->skey[i]) rc = G10ERR_INVALID_PACKET; } if (rc) /* one of the MPIs were bad */ goto leave; if (list_mode && npkey) keyid_from_sk (sk, keyid); sk->protect.algo = iobuf_get_noeof(inp); pktlen--; sk->protect.sha1chk = 0; if( sk->protect.algo ) { sk->is_protected = 1; sk->protect.s2k.count = 0; if( sk->protect.algo == 254 || sk->protect.algo == 255 ) { if( pktlen < 3 ) { rc = G10ERR_INVALID_PACKET; goto leave; } sk->protect.sha1chk = (sk->protect.algo == 254); sk->protect.algo = iobuf_get_noeof(inp); pktlen--; /* Note that a sk->protect.algo > 110 is illegal, but I'm not erroring on it here as otherwise there would be no way to delete such a key. */ sk->protect.s2k.mode = iobuf_get_noeof(inp); pktlen--; sk->protect.s2k.hash_algo = iobuf_get_noeof(inp); pktlen--; /* check for the special GNU extension */ if( is_v4 && sk->protect.s2k.mode == 101 ) { for(i=0; i < 4 && pktlen; i++, pktlen-- ) temp[i] = iobuf_get_noeof(inp); if( i < 4 || memcmp( temp, "GNU", 3 ) ) { if( list_mode ) fprintf (listfp, "\tunknown S2K %d\n", sk->protect.s2k.mode ); rc = G10ERR_INVALID_PACKET; goto leave; } /* here we know that it is a gnu extension * What follows is the GNU protection mode: * All values have special meanings * and they are mapped in the mode with a base of 1000. */ sk->protect.s2k.mode = 1000 + temp[3]; } switch( sk->protect.s2k.mode ) { case 1: case 3: for(i=0; i < 8 && pktlen; i++, pktlen-- ) temp[i] = iobuf_get_noeof(inp); memcpy(sk->protect.s2k.salt, temp, 8 ); break; } switch( sk->protect.s2k.mode ) { case 0: if( list_mode ) fprintf (listfp, "\tsimple S2K" ); break; case 1: if( list_mode ) fprintf (listfp, "\tsalted S2K" ); break; case 3: if( list_mode ) fprintf (listfp, "\titer+salt S2K" ); break; case 1001: if( list_mode ) fprintf (listfp, "\tgnu-dummy S2K" ); break; case 1002: if (list_mode) fprintf (listfp, "\tgnu-divert-to-card S2K"); break; default: if( list_mode ) fprintf (listfp, "\tunknown %sS2K %d\n", sk->protect.s2k.mode < 1000? "":"GNU ", sk->protect.s2k.mode ); rc = G10ERR_INVALID_PACKET; goto leave; } if( list_mode ) { fprintf (listfp, ", algo: %d,%s hash: %d", sk->protect.algo, sk->protect.sha1chk?" SHA1 protection," :" simple checksum,", sk->protect.s2k.hash_algo ); if( sk->protect.s2k.mode == 1 || sk->protect.s2k.mode == 3 ) { fprintf (listfp, ", salt: "); for(i=0; i < 8; i++ ) fprintf (listfp, "%02x", sk->protect.s2k.salt[i]); } putc ('\n', listfp); } if( sk->protect.s2k.mode == 3 ) { if( pktlen < 1 ) { rc = G10ERR_INVALID_PACKET; goto leave; } sk->protect.s2k.count = iobuf_get(inp); pktlen--; if( list_mode ) fprintf (listfp, "\tprotect count: %lu (%lu)\n", (ulong)S2K_DECODE_COUNT ((ulong)sk->protect.s2k.count), (ulong)sk->protect.s2k.count); } else if( sk->protect.s2k.mode == 1002 ) { /* Read the serial number. */ if (pktlen < 1) { rc = G10ERR_INVALID_PACKET; goto leave; } snlen = iobuf_get (inp); pktlen--; if (pktlen < snlen || snlen == (size_t)(-1)) { rc = G10ERR_INVALID_PACKET; goto leave; } } } /* Note that a sk->protect.algo > 110 is illegal, but I'm not erroring on it here as otherwise there would be no way to delete such a key. */ else { /* old version; no S2K, so we set mode to 0, hash MD5 */ sk->protect.s2k.mode = 0; sk->protect.s2k.hash_algo = DIGEST_ALGO_MD5; if( list_mode ) fprintf (listfp, "\tprotect algo: %d (hash algo: %d)\n", sk->protect.algo, sk->protect.s2k.hash_algo ); } /* It is really ugly that we don't know the size * of the IV here in cases we are not aware of the algorithm. * so a * sk->protect.ivlen = cipher_get_blocksize(sk->protect.algo); * won't work. The only solution I see is to hardwire it here. * NOTE: if you change the ivlen above 16, don't forget to * enlarge temp. */ switch( sk->protect.algo ) { case 7: case 8: case 9: /* AES */ case 10: /* Twofish */ case 11: case 12: case 13: /* Camellia */ sk->protect.ivlen = 16; break; default: sk->protect.ivlen = 8; } if( sk->protect.s2k.mode == 1001 ) sk->protect.ivlen = 0; else if( sk->protect.s2k.mode == 1002 ) sk->protect.ivlen = snlen < 16? snlen : 16; if( pktlen < sk->protect.ivlen ) { rc = G10ERR_INVALID_PACKET; goto leave; } for(i=0; i < sk->protect.ivlen && pktlen; i++, pktlen-- ) temp[i] = iobuf_get_noeof(inp); if( list_mode ) { fprintf (listfp, sk->protect.s2k.mode == 1002? "\tserial-number: " : "\tprotect IV: "); for(i=0; i < sk->protect.ivlen; i++ ) fprintf (listfp, " %02x", temp[i] ); putc ('\n', listfp); } memcpy(sk->protect.iv, temp, sk->protect.ivlen ); } else sk->is_protected = 0; /* It does not make sense to read it into secure memory. * If the user is so careless, not to protect his secret key, * we can assume, that he operates an open system :=(. * So we put the key into secure memory when we unprotect it. */ if( sk->protect.s2k.mode == 1001 || sk->protect.s2k.mode == 1002 ) { /* better set some dummy stuff here */ sk->skey[npkey] = mpi_set_opaque(NULL, xstrdup("dummydata"), 10); pktlen = 0; } else if( is_v4 && sk->is_protected ) { /* ugly; the length is encrypted too, so we read all * stuff up to the end of the packet into the first * skey element */ if (pktlen < 2) /* At least two bytes for the length. */ { rc = G10ERR_INVALID_PACKET; goto leave; } sk->skey[npkey] = mpi_set_opaque(NULL, read_rest(inp, pktlen, 0),pktlen); pktlen = 0; if( list_mode ) { fprintf (listfp, "\tencrypted stuff follows\n"); } } else { /* v3 method: the mpi length is not encrypted */ for(i=npkey; i < nskey; i++ ) { if ( sk->is_protected ) { sk->skey[i] = read_protected_v3_mpi (inp, &pktlen); if( list_mode ) fprintf (listfp, "\tskey[%d]: [encrypted]\n", i); } else { if (pktlen < 2) /* At least two bytes for the length. */ { rc = G10ERR_INVALID_PACKET; goto leave; } n = pktlen; sk->skey[i] = mpi_read(inp, &n, 0 ); pktlen -=n; if( list_mode ) { fprintf (listfp, "\tskey[%d]: ", i); mpi_print(listfp, sk->skey[i], mpi_print_mode ); putc ('\n', listfp); } } if (!sk->skey[i]) rc = G10ERR_INVALID_PACKET; } if (rc) goto leave; if (pktlen < 2) { rc = G10ERR_INVALID_PACKET; goto leave; } sk->csum = read_16(inp); pktlen -= 2; if( list_mode ) { fprintf (listfp, "\tchecksum: %04hx\n", sk->csum); } } } else { PKT_public_key *pk = pkt->pkt.public_key; if (pktlen < 1) { rc = G10ERR_INVALID_PACKET; goto leave; } if( !npkey ) { pk->pkey[0] = mpi_set_opaque( NULL, read_rest(inp, pktlen, 0), pktlen ); pktlen = 0; goto leave; } for(i=0; i < npkey; i++ ) { n = pktlen; pk->pkey[i] = mpi_read(inp, &n, 0 ); pktlen -=n; if( list_mode ) { fprintf (listfp, "\tpkey[%d]: ", i); mpi_print(listfp, pk->pkey[i], mpi_print_mode ); putc ('\n', listfp); } if (!pk->pkey[i]) rc = G10ERR_INVALID_PACKET; } if (rc) goto leave; if (list_mode) keyid_from_pk (pk, keyid); } if (list_mode && npkey) fprintf (listfp, "\tkeyid: %08lX%08lX\n", (ulong) keyid[0], (ulong) keyid[1]); leave: iobuf_skip_rest(inp, pktlen, 0); return rc; } /* Attribute subpackets have the same format as v4 signature subpackets. This is not part of OpenPGP, but is done in several versions of PGP nevertheless. */ int parse_attribute_subpkts(PKT_user_id *uid) { size_t n; int count=0; struct user_attribute *attribs=NULL; const byte *buffer=uid->attrib_data; int buflen=uid->attrib_len; byte type; xfree(uid->attribs); while(buflen) { n = *buffer++; buflen--; if( n == 255 ) { /* 4 byte length header */ if( buflen < 4 ) goto too_short; n = buf32_to_size_t (buffer); buffer += 4; buflen -= 4; } else if( n >= 192 ) { /* 2 byte special encoded length header */ if( buflen < 2 ) goto too_short; n = (( n - 192 ) << 8) + *buffer + 192; buffer++; buflen--; } if( buflen < n ) goto too_short; if (!n) { /* Too short to encode the subpacket type. */ if (opt.verbose) log_info ("attribute subpacket too short\n"); break; } attribs=xrealloc(attribs,(count+1)*sizeof(struct user_attribute)); memset(&attribs[count],0,sizeof(struct user_attribute)); type=*buffer; buffer++; buflen--; n--; attribs[count].type=type; attribs[count].data=buffer; attribs[count].len=n; buffer+=n; buflen-=n; count++; } uid->attribs=attribs; uid->numattribs=count; return count; too_short: if(opt.verbose) log_info("buffer shorter than attribute subpacket\n"); uid->attribs=attribs; uid->numattribs=count; return count; } static int parse_user_id( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { byte *p; /* Cap the size of a user ID at 2k: a value absurdly large enough that there is no sane user ID string (which is printable text as of RFC2440bis) that won't fit in it, but yet small enough to avoid allocation problems. A large pktlen may not be allocatable, and a very large pktlen could actually cause our allocation to wrap around in xmalloc to a small number. */ if (pktlen > MAX_UID_PACKET_LENGTH) { log_error("packet(%d) too large\n", pkttype); iobuf_skip_rest(inp, pktlen, 0); return G10ERR_INVALID_PACKET; } packet->pkt.user_id = xmalloc_clear(sizeof *packet->pkt.user_id + pktlen); packet->pkt.user_id->len = pktlen; packet->pkt.user_id->ref=1; p = packet->pkt.user_id->name; for( ; pktlen; pktlen--, p++ ) *p = iobuf_get_noeof(inp); *p = 0; if( list_mode ) { int n = packet->pkt.user_id->len; fprintf (listfp, ":user ID packet: \""); /* fixme: Hey why don't we replace this with print_string?? */ for(p=packet->pkt.user_id->name; n; p++, n-- ) { if( *p >= ' ' && *p <= 'z' ) putc (*p, listfp); else fprintf (listfp, "\\x%02x", *p ); } fprintf (listfp, "\"\n"); } return 0; } void make_attribute_uidname(PKT_user_id *uid, size_t max_namelen) { assert ( max_namelen > 70 ); if(uid->numattribs<=0) sprintf(uid->name,"[bad attribute packet of size %lu]",uid->attrib_len); else if(uid->numattribs>1) sprintf(uid->name,"[%d attributes of size %lu]", uid->numattribs,uid->attrib_len); else { /* Only one attribute, so list it as the "user id" */ if(uid->attribs->type==ATTRIB_IMAGE) { u32 len; byte type; if(parse_image_header(uid->attribs,&type,&len)) sprintf(uid->name,"[%.20s image of size %lu]", image_type_to_string(type,1),(ulong)len); else sprintf(uid->name,"[invalid image]"); } else sprintf(uid->name,"[unknown attribute of size %lu]", (ulong)uid->attribs->len); } uid->len = strlen(uid->name); } static int parse_attribute( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { byte *p; (void)pkttype; /* We better cap the size of an attribute packet to make DoS not too easy. 16MB should be more then enough for one attribute packet (ie. a photo). */ if (pktlen > MAX_ATTR_PACKET_LENGTH) { log_error ("packet(%d) too large\n", pkttype); if (list_mode) fprintf (listfp, ":attribute packet: [too large]\n"); iobuf_skip_rest (inp, pktlen, 0); return G10ERR_INVALID_PACKET; } #define EXTRA_UID_NAME_SPACE 71 packet->pkt.user_id = xmalloc_clear(sizeof *packet->pkt.user_id + EXTRA_UID_NAME_SPACE); packet->pkt.user_id->ref=1; packet->pkt.user_id->attrib_data = xmalloc(pktlen); packet->pkt.user_id->attrib_len = pktlen; p = packet->pkt.user_id->attrib_data; for( ; pktlen; pktlen--, p++ ) *p = iobuf_get_noeof(inp); /* Now parse out the individual attribute subpackets. This is somewhat pointless since there is only one currently defined attribute type (jpeg), but it is correct by the spec. */ parse_attribute_subpkts(packet->pkt.user_id); make_attribute_uidname(packet->pkt.user_id, EXTRA_UID_NAME_SPACE); if( list_mode ) { fprintf (listfp, ":attribute packet: %s\n", packet->pkt.user_id->name ); } return 0; } static int parse_comment( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet ) { byte *p; /* Cap comment packet at a reasonable value to avoid an integer overflow in the malloc below. Comment packets are actually not anymore define my OpenPGP and we even stopped to use our private comment packet. */ if (pktlen > MAX_COMMENT_PACKET_LENGTH) { log_error ("packet(%d) too large\n", pkttype); iobuf_skip_rest (inp, pktlen, 0); return G10ERR_INVALID_PACKET; } packet->pkt.comment = xmalloc(sizeof *packet->pkt.comment + pktlen - 1); packet->pkt.comment->len = pktlen; p = packet->pkt.comment->data; for( ; pktlen; pktlen--, p++ ) *p = iobuf_get_noeof(inp); if( list_mode ) { int n = packet->pkt.comment->len; fprintf (listfp, ":%scomment packet: \"", pkttype == PKT_OLD_COMMENT? "OpenPGP draft " : "GnuPG " ); for(p=packet->pkt.comment->data; n; p++, n-- ) { if( *p >= ' ' && *p <= 'z' ) putc (*p, listfp); else fprintf (listfp, "\\x%02x", *p ); } fprintf (listfp, "\"\n"); } return 0; } static void parse_trust( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt ) { int c; (void)pkttype; pkt->pkt.ring_trust = xmalloc( sizeof *pkt->pkt.ring_trust ); if (pktlen) { c = iobuf_get_noeof(inp); pktlen--; pkt->pkt.ring_trust->trustval = c; pkt->pkt.ring_trust->sigcache = 0; if (!c && pktlen==1) { c = iobuf_get_noeof (inp); pktlen--; /* we require that bit 7 of the sigcache is 0 (easier eof handling)*/ if ( !(c & 0x80) ) pkt->pkt.ring_trust->sigcache = c; } if( list_mode ) fprintf (listfp, ":trust packet: flag=%02x sigcache=%02x\n", pkt->pkt.ring_trust->trustval, pkt->pkt.ring_trust->sigcache); } else { pkt->pkt.ring_trust->trustval = 0; pkt->pkt.ring_trust->sigcache = 0; if (list_mode) fprintf (listfp, ":trust packet: empty\n"); } iobuf_skip_rest (inp, pktlen, 0); } static int parse_plaintext( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt, int new_ctb, int partial ) { int rc = 0; int mode, namelen; PKT_plaintext *pt; byte *p; int c, i; if( !partial && pktlen < 6 ) { log_error("packet(%d) too short (%lu)\n", pkttype, (ulong)pktlen); rc = G10ERR_INVALID_PACKET; goto leave; } mode = iobuf_get_noeof(inp); if( pktlen ) pktlen--; namelen = iobuf_get_noeof(inp); if( pktlen ) pktlen--; /* Note that namelen will never exceeds 255 byte. */ pt = pkt->pkt.plaintext = xmalloc(sizeof *pkt->pkt.plaintext + namelen -1); pt->new_ctb = new_ctb; pt->mode = mode; pt->namelen = namelen; pt->is_partial = partial; if( pktlen ) { for( i=0; pktlen > 4 && i < namelen; pktlen--, i++ ) pt->name[i] = iobuf_get_noeof(inp); } else { for( i=0; i < namelen; i++ ) if( (c=iobuf_get(inp)) == -1 ) break; else pt->name[i] = c; } pt->timestamp = read_32(inp); if( pktlen) pktlen -= 4; pt->len = pktlen; pt->buf = inp; pktlen = 0; if( list_mode ) { fprintf (listfp, ":literal data packet:\n" "\tmode %c (%X), created %lu, name=\"", mode >= ' ' && mode <'z'? mode : '?', mode, (ulong)pt->timestamp ); for(p=pt->name,i=0; i < namelen; p++, i++ ) { if( *p >= ' ' && *p <= 'z' ) putc (*p, listfp); else fprintf (listfp, "\\x%02x", *p ); } fprintf (listfp, "\",\n\traw data: "); if(partial) fprintf (listfp, "unknown length\n"); else fprintf (listfp, "%lu bytes\n", (ulong)pt->len ); } leave: return rc; } static int parse_compressed( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt, int new_ctb ) { PKT_compressed *zd; /* pktlen is here 0, but data follows * (this should be the last object in a file or * the compress algorithm should know the length) */ zd = pkt->pkt.compressed = xmalloc(sizeof *pkt->pkt.compressed ); zd->algorithm = iobuf_get_noeof(inp); zd->len = 0; /* not used */ zd->new_ctb = new_ctb; zd->buf = inp; if( list_mode ) fprintf (listfp, ":compressed packet: algo=%d\n", zd->algorithm); return 0; } static int parse_encrypted( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt, int new_ctb, int partial ) { int rc = 0; PKT_encrypted *ed; unsigned long orig_pktlen = pktlen; ed = pkt->pkt.encrypted = xmalloc(sizeof *pkt->pkt.encrypted ); ed->len = pktlen; /* we don't know the extralen which is (cipher_blocksize+2) because the algorithm ist not specified in this packet. However, it is only important to know this for some sanity checks on the packet length - it doesn't matter that we can't do it */ ed->extralen = 0; ed->buf = NULL; ed->new_ctb = new_ctb; ed->is_partial = partial; ed->mdc_method = 0; if( pkttype == PKT_ENCRYPTED_MDC ) { /* fixme: add some pktlen sanity checks */ int version; version = iobuf_get_noeof(inp); if (orig_pktlen) pktlen--; if( version != 1 ) { log_error("encrypted_mdc packet with unknown version %d\n", version); /*skip_rest(inp, pktlen); should we really do this? */ rc = G10ERR_INVALID_PACKET; goto leave; } ed->mdc_method = DIGEST_ALGO_SHA1; } if( orig_pktlen && pktlen < 10 ) { /* actually this is blocksize+2 */ log_error("packet(%d) too short\n", pkttype); rc = G10ERR_INVALID_PACKET; iobuf_skip_rest(inp, pktlen, partial); goto leave; } if( list_mode ) { if( orig_pktlen ) fprintf (listfp, ":encrypted data packet:\n\tlength: %lu\n", orig_pktlen); else fprintf (listfp, ":encrypted data packet:\n\tlength: unknown\n"); if( ed->mdc_method ) fprintf (listfp, "\tmdc_method: %d\n", ed->mdc_method ); } ed->buf = inp; leave: return rc; } static int parse_mdc( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *pkt, int new_ctb ) { int rc = 0; PKT_mdc *mdc; byte *p; mdc = pkt->pkt.mdc= xmalloc(sizeof *pkt->pkt.mdc ); if( list_mode ) fprintf (listfp, ":mdc packet: length=%lu\n", pktlen); if( !new_ctb || pktlen != 20 ) { log_error("mdc_packet with invalid encoding\n"); rc = G10ERR_INVALID_PACKET; goto leave; } p = mdc->hash; for( ; pktlen; pktlen--, p++ ) *p = iobuf_get_noeof(inp); leave: return rc; } /* * This packet is internally generated by GPG (by armor.c) to * transfer some information to the lower layer. To make sure that * this packet is really a GPG faked one and not one comming from outside, * we first check that there is a unique tag in it. * The format of such a control packet is: * n byte session marker * 1 byte control type CTRLPKT_xxxxx * m byte control data */ static int parse_gpg_control( IOBUF inp, int pkttype, unsigned long pktlen, PACKET *packet, int partial ) { byte *p; const byte *sesmark; size_t sesmarklen; int i; if ( list_mode ) fprintf (listfp, ":packet 63: length %lu ", pktlen); sesmark = get_session_marker ( &sesmarklen ); if ( pktlen < sesmarklen+1 ) /* 1 is for the control bytes */ goto skipit; for( i=0; i < sesmarklen; i++, pktlen-- ) { if ( sesmark[i] != iobuf_get_noeof(inp) ) goto skipit; } if (pktlen > 4096) goto skipit; /* Definitely too large. We skip it to avoid an overflow in the malloc. */ if ( list_mode ) puts ("- gpg control packet"); packet->pkt.gpg_control = xmalloc(sizeof *packet->pkt.gpg_control + pktlen - 1); packet->pkt.gpg_control->control = iobuf_get_noeof(inp); pktlen--; packet->pkt.gpg_control->datalen = pktlen; p = packet->pkt.gpg_control->data; for( ; pktlen; pktlen--, p++ ) *p = iobuf_get_noeof(inp); return 0; skipit: if ( list_mode ) { int c; i=0; fprintf (listfp, "- private (rest length %lu)\n", pktlen); if( partial ) { while( (c=iobuf_get(inp)) != -1 ) dump_hex_line(c, &i); } else { for( ; pktlen; pktlen-- ) { dump_hex_line ((c=iobuf_get (inp)), &i); if (c == -1) break; } } putc ('\n', listfp); } iobuf_skip_rest(inp,pktlen, 0); return G10ERR_INVALID_PACKET; } /* create a gpg control packet to be used internally as a placeholder */ PACKET * create_gpg_control( ctrlpkttype_t type, const byte *data, size_t datalen ) { PACKET *packet; byte *p; packet = xmalloc( sizeof *packet ); init_packet(packet); packet->pkttype = PKT_GPG_CONTROL; packet->pkt.gpg_control = xmalloc(sizeof *packet->pkt.gpg_control + datalen - 1); packet->pkt.gpg_control->control = type; packet->pkt.gpg_control->datalen = datalen; p = packet->pkt.gpg_control->data; for( ; datalen; datalen--, p++ ) *p = *data++; return packet; } gnupg-1.4.20/g10/keyserver-internal.h0000644000175000017500000000411212635262326014235 00000000000000/* keyserver-internal.h - Keyserver internals * Copyright (C) 2001, 2002, 2004, 2005, 2006 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 3 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, see . */ #ifndef _KEYSERVER_INTERNAL_H_ #define _KEYSERVER_INTERNAL_H_ #include #include "keyserver.h" #include "iobuf.h" #include "types.h" int parse_keyserver_options(char *options); void free_keyserver_spec(struct keyserver_spec *keyserver); struct keyserver_spec *keyserver_match(struct keyserver_spec *spec); struct keyserver_spec *parse_keyserver_uri(const char *string, int require_scheme, const char *configname, unsigned int configlineno); struct keyserver_spec *parse_preferred_keyserver(PKT_signature *sig); int keyserver_export(STRLIST users); int keyserver_import(STRLIST users); int keyserver_import_fprint(const byte *fprint,size_t fprint_len, struct keyserver_spec *keyserver); int keyserver_import_keyid(u32 *keyid,struct keyserver_spec *keyserver); int keyserver_refresh(STRLIST users); int keyserver_search(STRLIST tokens); int keyserver_fetch(STRLIST urilist); int keyserver_import_cert(const char *name, unsigned char **fpr,size_t *fpr_len); int keyserver_import_pka(const char *name,unsigned char **fpr,size_t *fpr_len); int keyserver_import_name(const char *name,unsigned char **fpr,size_t *fpr_len, struct keyserver_spec *keyserver); int keyserver_import_ldap(const char *name, unsigned char **fpr,size_t *fpr_len); #endif /* !_KEYSERVER_INTERNAL_H_ */ gnupg-1.4.20/g10/decrypt.c0000644000175000017500000001061612635262326012057 00000000000000/* decrypt.c - verify signed data * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007 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 3 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, see . */ #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 "status.h" #include "i18n.h" /**************** * Assume that the input is an encrypted message and decrypt * (and if signed, verify the signature on) it. * This command differs from the default operation, as it never * writes to the filename which is included in the file and it * rejects files which don't begin with an encrypted message. */ int decrypt_message( const char *filename ) { IOBUF fp; armor_filter_context_t afx; progress_filter_context_t pfx; int rc; int no_out=0; /* open the message file */ fp = iobuf_open(filename); if (fp && is_secured_file (iobuf_get_fd (fp))) { iobuf_close (fp); fp = NULL; errno = EPERM; } if( !fp ) { log_error(_("can't open `%s'\n"), print_fname_stdin(filename)); return G10ERR_OPEN_FILE; } handle_progress (&pfx, fp, filename); if( !opt.no_armor ) { if( use_armor_filter( fp ) ) { memset( &afx, 0, sizeof afx); iobuf_push_filter( fp, armor_filter, &afx ); } } if( !opt.outfile ) { no_out = 1; opt.outfile = "-"; } rc = proc_encryption_packets( NULL, fp ); if( no_out ) opt.outfile = NULL; iobuf_close(fp); return rc; } void decrypt_messages(int nfiles, char *files[]) { IOBUF fp; armor_filter_context_t afx; progress_filter_context_t pfx; char *p, *output = NULL; int rc=0,use_stdin=0; unsigned int lno=0; if (opt.outfile) { log_error(_("--output doesn't work for this command\n")); return; } if(!nfiles) use_stdin=1; for(;;) { char line[2048]; char *filename=NULL; if(use_stdin) { if(fgets(line, DIM(line), stdin)) { lno++; if (!*line || line[strlen(line)-1] != '\n') log_error("input line %u too long or missing LF\n", lno); else { line[strlen(line)-1] = '\0'; filename=line; } } } else { if(nfiles) { filename=*files; nfiles--; files++; } } if(filename==NULL) break; print_file_status(STATUS_FILE_START, filename, 3); output = make_outfile_name(filename); if (!output) goto next_file; fp = iobuf_open(filename); if (fp) iobuf_ioctl (fp,3,1,NULL); /* disable fd caching */ if (fp && is_secured_file (iobuf_get_fd (fp))) { iobuf_close (fp); fp = NULL; errno = EPERM; } if (!fp) { log_error(_("can't open `%s'\n"), print_fname_stdin(filename)); goto next_file; } handle_progress (&pfx, fp, filename); if (!opt.no_armor) { if (use_armor_filter(fp)) { memset(&afx, 0, sizeof afx); iobuf_push_filter(fp, armor_filter, &afx); } } rc = proc_packets(NULL, fp); iobuf_close(fp); if (rc) log_error("%s: decryption failed: %s\n", print_fname_stdin(filename), g10_errstr(rc)); p = get_last_passphrase(); set_next_passphrase(p); xfree (p); next_file: /* Note that we emit file_done even after an error. */ write_status( STATUS_FILE_DONE ); iobuf_ioctl( NULL, 2, 0, NULL); /* Invalidate entire cache. */ xfree(output); reset_literals_seen(); } set_next_passphrase(NULL); } gnupg-1.4.20/g10/apdu.c0000644000175000017500000031224112635262326011335 00000000000000/* apdu.c - ISO 7816 APDU functions and low level I/O * Copyright (C) 2003, 2004, 2008, 2009 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 3 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, see . * * $Id$ */ /* NOTE: This module is also used by other software, thus the use of the macro USE_GNU_PTH is mandatory. For GnuPG this macro is guaranteed to be defined true. */ #include #include #include #include #include #include #include #ifdef USE_GNU_PTH # include # include # include #endif /* If requested include the definitions for the remote APDU protocol code. */ #ifdef USE_G10CODE_RAPDU #include "rapdu.h" #endif /*USE_G10CODE_RAPDU*/ #if defined(GNUPG_SCD_MAIN_HEADER) #include GNUPG_SCD_MAIN_HEADER #elif GNUPG_MAJOR_VERSION == 1 /* This is used with GnuPG version < 1.9. The code has been source copied from the current GnuPG >= 1.9 and is maintained over there. */ #include "options.h" #include "errors.h" #include "memory.h" #include "util.h" #include "i18n.h" #include "dynload.h" #include "cardglue.h" #else /* GNUPG_MAJOR_VERSION != 1 */ #include "scdaemon.h" #include "exechelp.h" #endif /* GNUPG_MAJOR_VERSION != 1 */ #include "../include/host2net.h" #include "apdu.h" #include "ccid-driver.h" /* Due to conflicting use of threading libraries we usually can't link against libpcsclite. Instead we use a wrapper program. */ #ifdef USE_GNU_PTH #if !defined(HAVE_W32_SYSTEM) && !defined(__CYGWIN__) #define NEED_PCSC_WRAPPER 1 #endif #endif #define MAX_READER 4 /* Number of readers we support concurrently. */ #if defined(_WIN32) || defined(__CYGWIN__) #define DLSTDCALL __stdcall #else #define DLSTDCALL #endif #if defined(__APPLE__) || defined(_WIN32) || defined(__CYGWIN__) typedef unsigned int pcsc_dword_t; #else typedef unsigned long pcsc_dword_t; #endif /* Helper to pass parameters related to keypad based operations. */ struct pininfo_s { int mode; int minlen; int maxlen; int padlen; }; /* A structure to collect information pertaining to one reader slot. */ struct reader_table_s { int used; /* True if slot is used. */ unsigned short port; /* Port number: 0 = unused, 1 - dev/tty */ /* Function pointers intialized to the various backends. */ int (*connect_card)(int); int (*disconnect_card)(int); int (*close_reader)(int); int (*shutdown_reader)(int); int (*reset_reader)(int); int (*get_status_reader)(int, unsigned int *); int (*send_apdu_reader)(int,unsigned char *,size_t, unsigned char *, size_t *, struct pininfo_s *); int (*check_keypad)(int, int, int, int, int, int); void (*dump_status_reader)(int); int (*set_progress_cb)(int, gcry_handler_progress_t, void*); struct { ccid_driver_t handle; } ccid; struct { long context; long card; pcsc_dword_t protocol; #ifdef NEED_PCSC_WRAPPER int req_fd; int rsp_fd; pid_t pid; #endif /*NEED_PCSC_WRAPPER*/ } pcsc; #ifdef USE_G10CODE_RAPDU struct { rapdu_t handle; } rapdu; #endif /*USE_G10CODE_RAPDU*/ char *rdrname; /* Name of the connected reader or NULL if unknown. */ int any_status; /* True if we have seen any status. */ int last_status; int status; int is_t0; /* True if we know that we are running T=0. */ unsigned char atr[33]; size_t atrlen; /* A zero length indicates that the ATR has not yet been read; i.e. the card is not ready for use. */ unsigned int change_counter; #ifdef USE_GNU_PTH int lock_initialized; pth_mutex_t lock; #endif }; typedef struct reader_table_s *reader_table_t; /* A global table to keep track of active readers. */ static struct reader_table_s reader_table[MAX_READER]; /* ct API function pointer. */ static char (* DLSTDCALL CT_init) (unsigned short ctn, unsigned short Pn); static char (* DLSTDCALL CT_data) (unsigned short ctn, unsigned char *dad, unsigned char *sad, unsigned short lc, unsigned char *cmd, unsigned short *lr, unsigned char *rsp); static char (* DLSTDCALL CT_close) (unsigned short ctn); /* PC/SC constants and function pointer. */ #define PCSC_SCOPE_USER 0 #define PCSC_SCOPE_TERMINAL 1 #define PCSC_SCOPE_SYSTEM 2 #define PCSC_SCOPE_GLOBAL 3 #define PCSC_PROTOCOL_T0 1 #define PCSC_PROTOCOL_T1 2 #define PCSC_PROTOCOL_RAW 4 #define PCSC_SHARE_EXCLUSIVE 1 #define PCSC_SHARE_SHARED 2 #define PCSC_SHARE_DIRECT 3 #define PCSC_LEAVE_CARD 0 #define PCSC_RESET_CARD 1 #define PCSC_UNPOWER_CARD 2 #define PCSC_EJECT_CARD 3 #define PCSC_UNKNOWN 0x0001 #define PCSC_ABSENT 0x0002 /* Card is absent. */ #define PCSC_PRESENT 0x0004 /* Card is present. */ #define PCSC_SWALLOWED 0x0008 /* Card is present and electrical connected. */ #define PCSC_POWERED 0x0010 /* Card is powered. */ #define PCSC_NEGOTIABLE 0x0020 /* Card is awaiting PTS. */ #define PCSC_SPECIFIC 0x0040 /* Card is ready for use. */ #define PCSC_STATE_UNAWARE 0x0000 /* Want status. */ #define PCSC_STATE_IGNORE 0x0001 /* Ignore this reader. */ #define PCSC_STATE_CHANGED 0x0002 /* State has changed. */ #define PCSC_STATE_UNKNOWN 0x0004 /* Reader unknown. */ #define PCSC_STATE_UNAVAILABLE 0x0008 /* Status unavailable. */ #define PCSC_STATE_EMPTY 0x0010 /* Card removed. */ #define PCSC_STATE_PRESENT 0x0020 /* Card inserted. */ #define PCSC_STATE_ATRMATCH 0x0040 /* ATR matches card. */ #define PCSC_STATE_EXCLUSIVE 0x0080 /* Exclusive Mode. */ #define PCSC_STATE_INUSE 0x0100 /* Shared mode. */ #define PCSC_STATE_MUTE 0x0200 /* Unresponsive card. */ /* Some PC/SC error codes. */ #define PCSC_E_CANCELLED 0x80100002 #define PCSC_E_CANT_DISPOSE 0x8010000E #define PCSC_E_INSUFFICIENT_BUFFER 0x80100008 #define PCSC_E_INVALID_ATR 0x80100015 #define PCSC_E_INVALID_HANDLE 0x80100003 #define PCSC_E_INVALID_PARAMETER 0x80100004 #define PCSC_E_INVALID_TARGET 0x80100005 #define PCSC_E_INVALID_VALUE 0x80100011 #define PCSC_E_NO_MEMORY 0x80100006 #define PCSC_E_UNKNOWN_READER 0x80100009 #define PCSC_E_TIMEOUT 0x8010000A #define PCSC_E_SHARING_VIOLATION 0x8010000B #define PCSC_E_NO_SMARTCARD 0x8010000C #define PCSC_E_UNKNOWN_CARD 0x8010000D #define PCSC_E_PROTO_MISMATCH 0x8010000F #define PCSC_E_NOT_READY 0x80100010 #define PCSC_E_SYSTEM_CANCELLED 0x80100012 #define PCSC_E_NOT_TRANSACTED 0x80100016 #define PCSC_E_READER_UNAVAILABLE 0x80100017 #define PCSC_W_REMOVED_CARD 0x80100069 /* The PC/SC error is defined as a long as per specs. Due to left shifts bit 31 will get sign extended. We use this mask to fix it. */ #define PCSC_ERR_MASK(a) ((a) & 0xffffffff) struct pcsc_io_request_s { unsigned long protocol; unsigned long pci_len; }; typedef struct pcsc_io_request_s *pcsc_io_request_t; #ifdef __APPLE__ # pragma pack(1) #endif struct pcsc_readerstate_s { const char *reader; void *user_data; pcsc_dword_t current_state; pcsc_dword_t event_state; pcsc_dword_t atrlen; unsigned char atr[33]; }; #ifdef __APPLE__ # pragma pack() #endif typedef struct pcsc_readerstate_s *pcsc_readerstate_t; long (* DLSTDCALL pcsc_establish_context) (pcsc_dword_t scope, const void *reserved1, const void *reserved2, long *r_context); long (* DLSTDCALL pcsc_release_context) (long context); long (* DLSTDCALL pcsc_list_readers) (long context, const char *groups, char *readers, pcsc_dword_t *readerslen); long (* DLSTDCALL pcsc_get_status_change) (long context, pcsc_dword_t timeout, pcsc_readerstate_t readerstates, pcsc_dword_t nreaderstates); long (* DLSTDCALL pcsc_connect) (long context, const char *reader, pcsc_dword_t share_mode, pcsc_dword_t preferred_protocols, long *r_card, pcsc_dword_t *r_active_protocol); long (* DLSTDCALL pcsc_reconnect) (long card, pcsc_dword_t share_mode, pcsc_dword_t preferred_protocols, pcsc_dword_t initialization, pcsc_dword_t *r_active_protocol); long (* DLSTDCALL pcsc_disconnect) (long card, pcsc_dword_t disposition); long (* DLSTDCALL pcsc_status) (long card, char *reader, pcsc_dword_t *readerlen, pcsc_dword_t *r_state, pcsc_dword_t *r_protocol, unsigned char *atr, pcsc_dword_t *atrlen); long (* DLSTDCALL pcsc_begin_transaction) (long card); long (* DLSTDCALL pcsc_end_transaction) (long card, pcsc_dword_t disposition); long (* DLSTDCALL pcsc_transmit) (long card, const pcsc_io_request_t send_pci, const unsigned char *send_buffer, pcsc_dword_t send_len, pcsc_io_request_t recv_pci, unsigned char *recv_buffer, pcsc_dword_t *recv_len); long (* DLSTDCALL pcsc_set_timeout) (long context, pcsc_dword_t timeout); /* Prototypes. */ static int pcsc_get_status (int slot, unsigned int *status); static int reset_pcsc_reader (int slot); static int apdu_get_status_internal (int slot, int hang, int no_atr_reset, unsigned int *status, unsigned int *changed); /* Helper */ /* Find an unused reader slot for PORTSTR and put it into the reader table. Return -1 on error or the index into the reader table. */ static int new_reader_slot (void) { int i, reader = -1; for (i=0; i < MAX_READER; i++) { if (!reader_table[i].used && reader == -1) reader = i; } if (reader == -1) { log_error ("new_reader_slot: out of slots\n"); return -1; } #ifdef USE_GNU_PTH if (!reader_table[reader].lock_initialized) { if (!pth_mutex_init (&reader_table[reader].lock)) { log_error ("error initializing mutex: %s\n", strerror (errno)); return -1; } reader_table[reader].lock_initialized = 1; } #endif /*USE_GNU_PTH*/ reader_table[reader].connect_card = NULL; reader_table[reader].disconnect_card = NULL; reader_table[reader].close_reader = NULL; reader_table[reader].shutdown_reader = NULL; reader_table[reader].reset_reader = NULL; reader_table[reader].get_status_reader = NULL; reader_table[reader].send_apdu_reader = NULL; reader_table[reader].check_keypad = NULL; reader_table[reader].dump_status_reader = NULL; reader_table[reader].set_progress_cb = NULL; reader_table[reader].used = 1; reader_table[reader].any_status = 0; reader_table[reader].last_status = 0; reader_table[reader].is_t0 = 1; #ifdef NEED_PCSC_WRAPPER reader_table[reader].pcsc.req_fd = -1; reader_table[reader].pcsc.rsp_fd = -1; reader_table[reader].pcsc.pid = (pid_t)(-1); #endif return reader; } static void dump_reader_status (int slot) { if (!opt.verbose) return; if (reader_table[slot].dump_status_reader) reader_table[slot].dump_status_reader (slot); if (reader_table[slot].status != -1 && reader_table[slot].atrlen) { log_info ("slot %d: ATR=", slot); log_printhex ("", reader_table[slot].atr, reader_table[slot].atrlen); } } static const char * host_sw_string (long err) { switch (err) { case 0: return "okay"; case SW_HOST_OUT_OF_CORE: return "out of core"; case SW_HOST_INV_VALUE: return "invalid value"; case SW_HOST_NO_DRIVER: return "no driver"; case SW_HOST_NOT_SUPPORTED: return "not supported"; case SW_HOST_LOCKING_FAILED: return "locking failed"; case SW_HOST_BUSY: return "busy"; case SW_HOST_NO_CARD: return "no card"; case SW_HOST_CARD_INACTIVE: return "card inactive"; case SW_HOST_CARD_IO_ERROR: return "card I/O error"; case SW_HOST_GENERAL_ERROR: return "general error"; case SW_HOST_NO_READER: return "no reader"; case SW_HOST_ABORTED: return "aborted"; case SW_HOST_NO_KEYPAD: return "no keypad"; case SW_HOST_ALREADY_CONNECTED: return "already connected"; default: return "unknown host status error"; } } const char * apdu_strerror (int rc) { switch (rc) { case SW_EOF_REACHED : return "eof reached"; case SW_EEPROM_FAILURE : return "eeprom failure"; case SW_WRONG_LENGTH : return "wrong length"; case SW_CHV_WRONG : return "CHV wrong"; case SW_CHV_BLOCKED : return "CHV blocked"; case SW_USE_CONDITIONS : return "use conditions not satisfied"; case SW_BAD_PARAMETER : return "bad parameter"; case SW_NOT_SUPPORTED : return "not supported"; case SW_FILE_NOT_FOUND : return "file not found"; case SW_RECORD_NOT_FOUND:return "record not found"; case SW_REF_NOT_FOUND : return "reference not found"; case SW_BAD_LC : return "bad Lc"; case SW_BAD_P0_P1 : return "bad P0 or P1"; case SW_INS_NOT_SUP : return "instruction not supported"; case SW_CLA_NOT_SUP : return "class not supported"; case SW_SUCCESS : return "success"; default: if ((rc & ~0x00ff) == SW_MORE_DATA) return "more data available"; if ( (rc & 0x10000) ) return host_sw_string (rc); return "unknown status error"; } } /* ct API Interface */ static const char * ct_error_string (long err) { switch (err) { case 0: return "okay"; case -1: return "invalid data"; case -8: return "ct error"; case -10: return "transmission error"; case -11: return "memory allocation error"; case -128: return "HTSI error"; default: return "unknown CT-API error"; } } static void ct_dump_reader_status (int slot) { log_info ("reader slot %d: %s\n", slot, reader_table[slot].status == 1? "Processor ICC present" : reader_table[slot].status == 0? "Memory ICC present" : "ICC not present" ); } /* Wait for the card in SLOT and activate it. Return a status word error or 0 on success. */ static int ct_activate_card (int slot) { int rc; unsigned char dad[1], sad[1], cmd[11], buf[256]; unsigned short buflen; /* Check whether card has been inserted. */ dad[0] = 1; /* Destination address: CT. */ sad[0] = 2; /* Source address: Host. */ cmd[0] = 0x20; /* Class byte. */ cmd[1] = 0x13; /* Request status. */ cmd[2] = 0x00; /* From kernel. */ cmd[3] = 0x80; /* Return card's DO. */ cmd[4] = 0x00; buflen = DIM(buf); rc = CT_data (slot, dad, sad, 5, cmd, &buflen, buf); if (rc || buflen < 2 || buf[buflen-2] != 0x90) { log_error ("ct_activate_card: can't get status of reader %d: %s\n", slot, ct_error_string (rc)); return SW_HOST_CARD_IO_ERROR; } /* Connected, now activate the card. */ dad[0] = 1; /* Destination address: CT. */ sad[0] = 2; /* Source address: Host. */ cmd[0] = 0x20; /* Class byte. */ cmd[1] = 0x12; /* Request ICC. */ cmd[2] = 0x01; /* From first interface. */ cmd[3] = 0x01; /* Return card's ATR. */ cmd[4] = 0x00; buflen = DIM(buf); rc = CT_data (slot, dad, sad, 5, cmd, &buflen, buf); if (rc || buflen < 2 || buf[buflen-2] != 0x90) { log_error ("ct_activate_card(%d): activation failed: %s\n", slot, ct_error_string (rc)); if (!rc) log_printhex (" received data:", buf, buflen); return SW_HOST_CARD_IO_ERROR; } /* Store the type and the ATR. */ if (buflen - 2 > DIM (reader_table[0].atr)) { log_error ("ct_activate_card(%d): ATR too long\n", slot); return SW_HOST_CARD_IO_ERROR; } reader_table[slot].status = buf[buflen - 1]; memcpy (reader_table[slot].atr, buf, buflen - 2); reader_table[slot].atrlen = buflen - 2; return 0; } static int close_ct_reader (int slot) { CT_close (slot); reader_table[slot].used = 0; return 0; } static int reset_ct_reader (int slot) { /* FIXME: Check is this is sufficient do do a reset. */ return ct_activate_card (slot); } static int ct_get_status (int slot, unsigned int *status) { (void)slot; /* The status we returned is wrong but we don't care becuase ctAPI is not anymore required. */ *status = APDU_CARD_USABLE|APDU_CARD_PRESENT|APDU_CARD_ACTIVE; return 0; } /* Actually send the APDU of length APDULEN to SLOT and return a maximum of *BUFLEN data in BUFFER, the actual retruned size will be set to BUFLEN. Returns: CT API error code. */ static int ct_send_apdu (int slot, unsigned char *apdu, size_t apdulen, unsigned char *buffer, size_t *buflen, struct pininfo_s *pininfo) { int rc; unsigned char dad[1], sad[1]; unsigned short ctbuflen; (void)pininfo; /* If we don't have an ATR, we need to reset the reader first. */ if (!reader_table[slot].atrlen && (rc = reset_ct_reader (slot))) return rc; dad[0] = 0; /* Destination address: Card. */ sad[0] = 2; /* Source address: Host. */ ctbuflen = *buflen; if (DBG_CARD_IO) log_printhex (" CT_data:", apdu, apdulen); rc = CT_data (slot, dad, sad, apdulen, apdu, &ctbuflen, buffer); *buflen = ctbuflen; return rc? SW_HOST_CARD_IO_ERROR: 0; } /* Open a reader and return an internal handle for it. PORT is a non-negative value with the port number of the reader. USB readers do have port numbers starting at 32769. */ static int open_ct_reader (int port) { int rc, reader; if (port < 0 || port > 0xffff) { log_error ("open_ct_reader: invalid port %d requested\n", port); return -1; } reader = new_reader_slot (); if (reader == -1) return reader; reader_table[reader].port = port; rc = CT_init (reader, (unsigned short)port); if (rc) { log_error ("apdu_open_ct_reader failed on port %d: %s\n", port, ct_error_string (rc)); reader_table[reader].used = 0; return -1; } /* Only try to activate the card. */ rc = ct_activate_card (reader); if (rc) { reader_table[reader].atrlen = 0; rc = 0; } reader_table[reader].close_reader = close_ct_reader; reader_table[reader].reset_reader = reset_ct_reader; reader_table[reader].get_status_reader = ct_get_status; reader_table[reader].send_apdu_reader = ct_send_apdu; reader_table[reader].check_keypad = NULL; reader_table[reader].dump_status_reader = ct_dump_reader_status; dump_reader_status (reader); return reader; } /* PC/SC Interface */ #ifdef NEED_PCSC_WRAPPER static int writen (int fd, const void *buf, size_t nbytes) { size_t nleft = nbytes; int nwritten; /* log_printhex (" writen:", buf, nbytes); */ while (nleft > 0) { #ifdef USE_GNU_PTH nwritten = pth_write (fd, buf, nleft); #else nwritten = write (fd, buf, nleft); #endif if (nwritten < 0 && errno == EINTR) continue; if (nwritten < 0) return -1; nleft -= nwritten; buf = (const char*)buf + nwritten; } return 0; } /* Read up to BUFLEN bytes from FD and return the number of bytes actually read in NREAD. Returns -1 on error or 0 on success. */ static int readn (int fd, void *buf, size_t buflen, size_t *nread) { size_t nleft = buflen; int n; /* void *orig_buf = buf; */ while (nleft > 0) { #ifdef USE_GNU_PTH # ifdef HAVE_W32_SYSTEM # error Cannot use pth_read here because it expects a system HANDLE. # endif n = pth_read (fd, buf, nleft); #else n = read (fd, buf, nleft); #endif if (n < 0 && errno == EINTR) continue; if (n < 0) return -1; /* read error. */ if (!n) break; /* EOF */ nleft -= n; buf = (char*)buf + n; } if (nread) *nread = buflen - nleft; /* log_printhex (" readn:", orig_buf, *nread); */ return 0; } #endif /*NEED_PCSC_WRAPPER*/ static const char * pcsc_error_string (long err) { const char *s; if (!err) return "okay"; if ((err & 0x80100000) != 0x80100000) return "invalid PC/SC error code"; err &= 0xffff; switch (err) { case 0x0002: s = "cancelled"; break; case 0x000e: s = "can't dispose"; break; case 0x0008: s = "insufficient buffer"; break; case 0x0015: s = "invalid ATR"; break; case 0x0003: s = "invalid handle"; break; case 0x0004: s = "invalid parameter"; break; case 0x0005: s = "invalid target"; break; case 0x0011: s = "invalid value"; break; case 0x0006: s = "no memory"; break; case 0x0013: s = "comm error"; break; case 0x0001: s = "internal error"; break; case 0x0014: s = "unknown error"; break; case 0x0007: s = "waited too long"; break; case 0x0009: s = "unknown reader"; break; case 0x000a: s = "timeout"; break; case 0x000b: s = "sharing violation"; break; case 0x000c: s = "no smartcard"; break; case 0x000d: s = "unknown card"; break; case 0x000f: s = "proto mismatch"; break; case 0x0010: s = "not ready"; break; case 0x0012: s = "system cancelled"; break; case 0x0016: s = "not transacted"; break; case 0x0017: s = "reader unavailable"; break; case 0x0065: s = "unsupported card"; break; case 0x0066: s = "unresponsive card"; break; case 0x0067: s = "unpowered card"; break; case 0x0068: s = "reset card"; break; case 0x0069: s = "removed card"; break; case 0x006a: s = "inserted card"; break; case 0x001f: s = "unsupported feature"; break; case 0x0019: s = "PCI too small"; break; case 0x001a: s = "reader unsupported"; break; case 0x001b: s = "duplicate reader"; break; case 0x001c: s = "card unsupported"; break; case 0x001d: s = "no service"; break; case 0x001e: s = "service stopped"; break; default: s = "unknown PC/SC error code"; break; } return s; } /* Map PC/SC error codes to our special host status words. */ static int pcsc_error_to_sw (long ec) { int rc; switch ( PCSC_ERR_MASK (ec) ) { case 0: rc = 0; break; case PCSC_E_CANCELLED: rc = SW_HOST_ABORTED; break; case PCSC_E_NO_MEMORY: rc = SW_HOST_OUT_OF_CORE; break; case PCSC_E_TIMEOUT: rc = SW_HOST_CARD_IO_ERROR; break; case PCSC_E_SHARING_VIOLATION: rc = SW_HOST_LOCKING_FAILED; break; case PCSC_E_NO_SMARTCARD: rc = SW_HOST_NO_CARD; break; case PCSC_W_REMOVED_CARD: rc = SW_HOST_NO_CARD; break; case PCSC_E_INVALID_TARGET: case PCSC_E_INVALID_VALUE: case PCSC_E_INVALID_HANDLE: case PCSC_E_INVALID_PARAMETER: case PCSC_E_INSUFFICIENT_BUFFER: rc = SW_HOST_INV_VALUE; break; default: rc = SW_HOST_GENERAL_ERROR; break; } return rc; } static void dump_pcsc_reader_status (int slot) { if (reader_table[slot].pcsc.card) { log_info ("reader slot %d: active protocol:", slot); if ((reader_table[slot].pcsc.protocol & PCSC_PROTOCOL_T0)) log_printf (" T0"); else if ((reader_table[slot].pcsc.protocol & PCSC_PROTOCOL_T1)) log_printf (" T1"); else if ((reader_table[slot].pcsc.protocol & PCSC_PROTOCOL_RAW)) log_printf (" raw"); log_printf ("\n"); } else log_info ("reader slot %d: not connected\n", slot); } #ifndef NEED_PCSC_WRAPPER static int pcsc_get_status_direct (int slot, unsigned int *status) { long err; struct pcsc_readerstate_s rdrstates[1]; memset (rdrstates, 0, sizeof *rdrstates); rdrstates[0].reader = reader_table[slot].rdrname; rdrstates[0].current_state = PCSC_STATE_UNAWARE; err = pcsc_get_status_change (reader_table[slot].pcsc.context, 0, rdrstates, 1); if (err == PCSC_E_TIMEOUT) err = 0; /* Timeout is no error error here. */ if (err) { log_error ("pcsc_get_status_change failed: %s (0x%lx)\n", pcsc_error_string (err), err); return pcsc_error_to_sw (err); } /* log_debug */ /* ("pcsc_get_status_change: %s%s%s%s%s%s%s%s%s%s\n", */ /* (rdrstates[0].event_state & PCSC_STATE_IGNORE)? " ignore":"", */ /* (rdrstates[0].event_state & PCSC_STATE_CHANGED)? " changed":"", */ /* (rdrstates[0].event_state & PCSC_STATE_UNKNOWN)? " unknown":"", */ /* (rdrstates[0].event_state & PCSC_STATE_UNAVAILABLE)?" unavail":"", */ /* (rdrstates[0].event_state & PCSC_STATE_EMPTY)? " empty":"", */ /* (rdrstates[0].event_state & PCSC_STATE_PRESENT)? " present":"", */ /* (rdrstates[0].event_state & PCSC_STATE_ATRMATCH)? " atr":"", */ /* (rdrstates[0].event_state & PCSC_STATE_EXCLUSIVE)? " excl":"", */ /* (rdrstates[0].event_state & PCSC_STATE_INUSE)? " unuse":"", */ /* (rdrstates[0].event_state & PCSC_STATE_MUTE)? " mute":"" ); */ *status = 0; if ( (rdrstates[0].event_state & PCSC_STATE_PRESENT) ) *status |= APDU_CARD_PRESENT; if ( !(rdrstates[0].event_state & PCSC_STATE_MUTE) ) *status |= APDU_CARD_ACTIVE; #ifndef HAVE_W32_SYSTEM /* We indicate a useful card if it is not in use by another application. This is because we only use exclusive access mode. */ if ( (*status & (APDU_CARD_PRESENT|APDU_CARD_ACTIVE)) == (APDU_CARD_PRESENT|APDU_CARD_ACTIVE) && !(rdrstates[0].event_state & PCSC_STATE_INUSE) ) *status |= APDU_CARD_USABLE; #else /* Some winscard drivers may set EXCLUSIVE and INUSE at the same time when we are the only user (SCM SCR335) under Windows. */ if ((*status & (APDU_CARD_PRESENT|APDU_CARD_ACTIVE)) == (APDU_CARD_PRESENT|APDU_CARD_ACTIVE)) *status |= APDU_CARD_USABLE; #endif return 0; } #endif /*!NEED_PCSC_WRAPPER*/ #ifdef NEED_PCSC_WRAPPER static int pcsc_get_status_wrapped (int slot, unsigned int *status) { long err; reader_table_t slotp; size_t len, full_len; int i, n; unsigned char msgbuf[9]; unsigned char buffer[16]; int sw = SW_HOST_CARD_IO_ERROR; slotp = reader_table + slot; if (slotp->pcsc.req_fd == -1 || slotp->pcsc.rsp_fd == -1 || slotp->pcsc.pid == (pid_t)(-1) ) { log_error ("pcsc_get_status: pcsc-wrapper not running\n"); return sw; } msgbuf[0] = 0x04; /* STATUS command. */ len = 0; msgbuf[1] = (len >> 24); msgbuf[2] = (len >> 16); msgbuf[3] = (len >> 8); msgbuf[4] = (len ); if ( writen (slotp->pcsc.req_fd, msgbuf, 5) ) { log_error ("error sending PC/SC STATUS request: %s\n", strerror (errno)); goto command_failed; } /* Read the response. */ if ((i=readn (slotp->pcsc.rsp_fd, msgbuf, 9, &len)) || len != 9) { log_error ("error receiving PC/SC STATUS response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } len = buf32_to_size_t (msgbuf+1); if (msgbuf[0] != 0x81 || len < 4) { log_error ("invalid response header from PC/SC received\n"); goto command_failed; } len -= 4; /* Already read the error code. */ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5)); if (err) { log_error ("pcsc_status failed: %s (0x%lx)\n", pcsc_error_string (err), err); /* This is a proper error code, so return immediately. */ return pcsc_error_to_sw (err); } full_len = len; /* The current version returns 3 words but we allow also for old versions returning only 2 words. */ n = 12 < len ? 12 : len; if ((i=readn (slotp->pcsc.rsp_fd, buffer, n, &len)) || (len != 8 && len != 12)) { log_error ("error receiving PC/SC STATUS response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } slotp->is_t0 = (len == 12 && !!(buffer[11] & PCSC_PROTOCOL_T0)); full_len -= len; /* Newer versions of the wrapper might send more status bytes. Read them. */ while (full_len) { unsigned char dummybuf[128]; n = full_len < DIM (dummybuf) ? full_len : DIM (dummybuf); if ((i=readn (slotp->pcsc.rsp_fd, dummybuf, n, &len)) || len != n) { log_error ("error receiving PC/SC TRANSMIT response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } full_len -= n; } /* We are lucky: The wrapper already returns the data in the required format. */ *status = buffer[3]; return 0; command_failed: close (slotp->pcsc.req_fd); close (slotp->pcsc.rsp_fd); slotp->pcsc.req_fd = -1; slotp->pcsc.rsp_fd = -1; kill (slotp->pcsc.pid, SIGTERM); slotp->pcsc.pid = (pid_t)(-1); slotp->used = 0; return sw; } #endif /*NEED_PCSC_WRAPPER*/ static int pcsc_get_status (int slot, unsigned int *status) { #ifdef NEED_PCSC_WRAPPER return pcsc_get_status_wrapped (slot, status); #else return pcsc_get_status_direct (slot, status); #endif } #ifndef NEED_PCSC_WRAPPER static int pcsc_send_apdu_direct (int slot, unsigned char *apdu, size_t apdulen, unsigned char *buffer, size_t *buflen, struct pininfo_s *pininfo) { long err; struct pcsc_io_request_s send_pci; pcsc_dword_t recv_len; if (!reader_table[slot].atrlen && (err = reset_pcsc_reader (slot))) return err; if (DBG_CARD_IO) log_printhex (" PCSC_data:", apdu, apdulen); if ((reader_table[slot].pcsc.protocol & PCSC_PROTOCOL_T1)) send_pci.protocol = PCSC_PROTOCOL_T1; else send_pci.protocol = PCSC_PROTOCOL_T0; send_pci.pci_len = sizeof send_pci; recv_len = *buflen; err = pcsc_transmit (reader_table[slot].pcsc.card, &send_pci, apdu, apdulen, NULL, buffer, &recv_len); *buflen = recv_len; if (err) log_error ("pcsc_transmit failed: %s (0x%lx)\n", pcsc_error_string (err), err); return pcsc_error_to_sw (err); } #endif /*!NEED_PCSC_WRAPPER*/ #ifdef NEED_PCSC_WRAPPER static int pcsc_send_apdu_wrapped (int slot, unsigned char *apdu, size_t apdulen, unsigned char *buffer, size_t *buflen, struct pininfo_s *pininfo) { long err; reader_table_t slotp; size_t len, full_len; int i, n; unsigned char msgbuf[9]; int sw = SW_HOST_CARD_IO_ERROR; (void)pininfo; if (!reader_table[slot].atrlen && (err = reset_pcsc_reader (slot))) return err; if (DBG_CARD_IO) log_printhex (" PCSC_data:", apdu, apdulen); slotp = reader_table + slot; if (slotp->pcsc.req_fd == -1 || slotp->pcsc.rsp_fd == -1 || slotp->pcsc.pid == (pid_t)(-1) ) { log_error ("pcsc_send_apdu: pcsc-wrapper not running\n"); return sw; } msgbuf[0] = 0x03; /* TRANSMIT command. */ len = apdulen; msgbuf[1] = (len >> 24); msgbuf[2] = (len >> 16); msgbuf[3] = (len >> 8); msgbuf[4] = (len ); if ( writen (slotp->pcsc.req_fd, msgbuf, 5) || writen (slotp->pcsc.req_fd, apdu, len)) { log_error ("error sending PC/SC TRANSMIT request: %s\n", strerror (errno)); goto command_failed; } /* Read the response. */ if ((i=readn (slotp->pcsc.rsp_fd, msgbuf, 9, &len)) || len != 9) { log_error ("error receiving PC/SC TRANSMIT response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } len = buf32_to_size_t (msgbuf+1); if (msgbuf[0] != 0x81 || len < 4) { log_error ("invalid response header from PC/SC received\n"); goto command_failed; } len -= 4; /* Already read the error code. */ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5)); if (err) { log_error ("pcsc_transmit failed: %s (0x%lx)\n", pcsc_error_string (err), err); return pcsc_error_to_sw (err); } full_len = len; n = *buflen < len ? *buflen : len; if ((i=readn (slotp->pcsc.rsp_fd, buffer, n, &len)) || len != n) { log_error ("error receiving PC/SC TRANSMIT response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } *buflen = n; full_len -= len; if (full_len) { log_error ("pcsc_send_apdu: provided buffer too short - truncated\n"); err = SW_HOST_INV_VALUE; } /* We need to read any rest of the response, to keep the protocol running. */ while (full_len) { unsigned char dummybuf[128]; n = full_len < DIM (dummybuf) ? full_len : DIM (dummybuf); if ((i=readn (slotp->pcsc.rsp_fd, dummybuf, n, &len)) || len != n) { log_error ("error receiving PC/SC TRANSMIT response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } full_len -= n; } return err; command_failed: close (slotp->pcsc.req_fd); close (slotp->pcsc.rsp_fd); slotp->pcsc.req_fd = -1; slotp->pcsc.rsp_fd = -1; kill (slotp->pcsc.pid, SIGTERM); slotp->pcsc.pid = (pid_t)(-1); slotp->used = 0; return sw; } #endif /*NEED_PCSC_WRAPPER*/ /* Send the APDU of length APDULEN to SLOT and return a maximum of *BUFLEN data in BUFFER, the actual returned size will be stored at BUFLEN. Returns: A status word. */ static int pcsc_send_apdu (int slot, unsigned char *apdu, size_t apdulen, unsigned char *buffer, size_t *buflen, struct pininfo_s *pininfo) { #ifdef NEED_PCSC_WRAPPER return pcsc_send_apdu_wrapped (slot, apdu, apdulen, buffer, buflen, pininfo); #else return pcsc_send_apdu_direct (slot, apdu, apdulen, buffer, buflen, pininfo); #endif } #ifndef NEED_PCSC_WRAPPER static int close_pcsc_reader_direct (int slot) { pcsc_release_context (reader_table[slot].pcsc.context); xfree (reader_table[slot].rdrname); reader_table[slot].rdrname = NULL; reader_table[slot].used = 0; return 0; } #endif /*!NEED_PCSC_WRAPPER*/ #ifdef NEED_PCSC_WRAPPER static int close_pcsc_reader_wrapped (int slot) { long err; reader_table_t slotp; size_t len; int i; unsigned char msgbuf[9]; slotp = reader_table + slot; if (slotp->pcsc.req_fd == -1 || slotp->pcsc.rsp_fd == -1 || slotp->pcsc.pid == (pid_t)(-1) ) { log_error ("close_pcsc_reader: pcsc-wrapper not running\n"); return 0; } msgbuf[0] = 0x02; /* CLOSE command. */ len = 0; msgbuf[1] = (len >> 24); msgbuf[2] = (len >> 16); msgbuf[3] = (len >> 8); msgbuf[4] = (len ); if ( writen (slotp->pcsc.req_fd, msgbuf, 5) ) { log_error ("error sending PC/SC CLOSE request: %s\n", strerror (errno)); goto command_failed; } /* Read the response. */ if ((i=readn (slotp->pcsc.rsp_fd, msgbuf, 9, &len)) || len != 9) { log_error ("error receiving PC/SC CLOSE response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } len = buf32_to_size_t (msgbuf+1); if (msgbuf[0] != 0x81 || len < 4) { log_error ("invalid response header from PC/SC received\n"); goto command_failed; } len -= 4; /* Already read the error code. */ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5)); if (err) log_error ("pcsc_close failed: %s (0x%lx)\n", pcsc_error_string (err), err); /* We will close the wrapper in any case - errors are merely informational. */ command_failed: close (slotp->pcsc.req_fd); close (slotp->pcsc.rsp_fd); slotp->pcsc.req_fd = -1; slotp->pcsc.rsp_fd = -1; kill (slotp->pcsc.pid, SIGTERM); slotp->pcsc.pid = (pid_t)(-1); slotp->used = 0; return 0; } #endif /*NEED_PCSC_WRAPPER*/ static int close_pcsc_reader (int slot) { #ifdef NEED_PCSC_WRAPPER return close_pcsc_reader_wrapped (slot); #else return close_pcsc_reader_direct (slot); #endif } /* Connect a PC/SC card. */ #ifndef NEED_PCSC_WRAPPER static int connect_pcsc_card (int slot) { long err; assert (slot >= 0 && slot < MAX_READER); if (reader_table[slot].pcsc.card) return SW_HOST_ALREADY_CONNECTED; reader_table[slot].atrlen = 0; reader_table[slot].last_status = 0; reader_table[slot].is_t0 = 0; err = pcsc_connect (reader_table[slot].pcsc.context, reader_table[slot].rdrname, PCSC_SHARE_EXCLUSIVE, PCSC_PROTOCOL_T0|PCSC_PROTOCOL_T1, &reader_table[slot].pcsc.card, &reader_table[slot].pcsc.protocol); if (err) { reader_table[slot].pcsc.card = 0; if (err != PCSC_E_NO_SMARTCARD) log_error ("pcsc_connect failed: %s (0x%lx)\n", pcsc_error_string (err), err); } else { char reader[250]; pcsc_dword_t readerlen, atrlen; pcsc_dword_t card_state, card_protocol; atrlen = DIM (reader_table[0].atr); readerlen = sizeof reader -1 ; err = pcsc_status (reader_table[slot].pcsc.card, reader, &readerlen, &card_state, &card_protocol, reader_table[slot].atr, &atrlen); if (err) log_error ("pcsc_status failed: %s (0x%lx) %lu\n", pcsc_error_string (err), (unsigned long)err, (unsigned long)readerlen); else { if (atrlen > DIM (reader_table[0].atr)) log_bug ("ATR returned by pcsc_status is too large\n"); reader_table[slot].atrlen = atrlen; /* If we got to here we know that a card is present and usable. Remember this. */ reader_table[slot].last_status = ( APDU_CARD_USABLE | APDU_CARD_PRESENT | APDU_CARD_ACTIVE); reader_table[slot].is_t0 = !!(card_protocol & PCSC_PROTOCOL_T0); } } dump_reader_status (slot); return pcsc_error_to_sw (err); } #endif /*!NEED_PCSC_WRAPPER*/ /* Disconnect a PC/SC card. Note that this succeeds even if the card is not connected. */ #ifndef NEED_PCSC_WRAPPER static int disconnect_pcsc_card (int slot) { long err; assert (slot >= 0 && slot < MAX_READER); if (!reader_table[slot].pcsc.card) return 0; err = pcsc_disconnect (reader_table[slot].pcsc.card, PCSC_LEAVE_CARD); if (err) { log_error ("pcsc_disconnect failed: %s (0x%lx)\n", pcsc_error_string (err), err); return SW_HOST_CARD_IO_ERROR; } reader_table[slot].pcsc.card = 0; return 0; } #endif /*!NEED_PCSC_WRAPPER*/ #ifndef NEED_PCSC_WRAPPER static int reset_pcsc_reader_direct (int slot) { int sw; sw = disconnect_pcsc_card (slot); if (!sw) sw = connect_pcsc_card (slot); return sw; } #endif /*NEED_PCSC_WRAPPER*/ #ifdef NEED_PCSC_WRAPPER static int reset_pcsc_reader_wrapped (int slot) { long err; reader_table_t slotp; size_t len; int i, n; unsigned char msgbuf[9]; unsigned int dummy_status; int sw = SW_HOST_CARD_IO_ERROR; slotp = reader_table + slot; if (slotp->pcsc.req_fd == -1 || slotp->pcsc.rsp_fd == -1 || slotp->pcsc.pid == (pid_t)(-1) ) { log_error ("pcsc_get_status: pcsc-wrapper not running\n"); return sw; } msgbuf[0] = 0x05; /* RESET command. */ len = 0; msgbuf[1] = (len >> 24); msgbuf[2] = (len >> 16); msgbuf[3] = (len >> 8); msgbuf[4] = (len ); if ( writen (slotp->pcsc.req_fd, msgbuf, 5) ) { log_error ("error sending PC/SC RESET request: %s\n", strerror (errno)); goto command_failed; } /* Read the response. */ if ((i=readn (slotp->pcsc.rsp_fd, msgbuf, 9, &len)) || len != 9) { log_error ("error receiving PC/SC RESET response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } len = buf32_to_size_t (msgbuf+1); if (msgbuf[0] != 0x81 || len < 4) { log_error ("invalid response header from PC/SC received\n"); goto command_failed; } len -= 4; /* Already read the error code. */ if (len > DIM (slotp->atr)) { log_error ("PC/SC returned a too large ATR (len=%lx)\n", (unsigned long)len); sw = SW_HOST_GENERAL_ERROR; goto command_failed; } err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5)); if (err) { log_error ("PC/SC RESET failed: %s (0x%lx)\n", pcsc_error_string (err), err); /* If the error code is no smart card, we should not considere this a major error and close the wrapper. */ sw = pcsc_error_to_sw (err); if (err == PCSC_E_NO_SMARTCARD) return sw; goto command_failed; } /* The open function may return a zero for the ATR length to indicate that no card is present. */ n = len; if (n) { if ((i=readn (slotp->pcsc.rsp_fd, slotp->atr, n, &len)) || len != n) { log_error ("error receiving PC/SC RESET response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } } slotp->atrlen = len; /* Read the status so that IS_T0 will be set. */ pcsc_get_status (slot, &dummy_status); return 0; command_failed: close (slotp->pcsc.req_fd); close (slotp->pcsc.rsp_fd); slotp->pcsc.req_fd = -1; slotp->pcsc.rsp_fd = -1; kill (slotp->pcsc.pid, SIGTERM); slotp->pcsc.pid = (pid_t)(-1); slotp->used = 0; return sw; } #endif /* !NEED_PCSC_WRAPPER */ /* Send an PC/SC reset command and return a status word on error or 0 on success. */ static int reset_pcsc_reader (int slot) { #ifdef NEED_PCSC_WRAPPER return reset_pcsc_reader_wrapped (slot); #else return reset_pcsc_reader_direct (slot); #endif } /* Open the PC/SC reader without using the wrapper. Returns -1 on error or a slot number for the reader. */ #ifndef NEED_PCSC_WRAPPER static int open_pcsc_reader_direct (const char *portstr) { long err; int slot; char *list = NULL; pcsc_dword_t nreader; char *p; slot = new_reader_slot (); if (slot == -1) return -1; /* Fixme: Allocating a context for each slot is not required. One global context should be sufficient. */ err = pcsc_establish_context (PCSC_SCOPE_SYSTEM, NULL, NULL, &reader_table[slot].pcsc.context); if (err) { log_error ("pcsc_establish_context failed: %s (0x%lx)\n", pcsc_error_string (err), err); reader_table[slot].used = 0; return -1; } err = pcsc_list_readers (reader_table[slot].pcsc.context, NULL, NULL, &nreader); if (!err) { list = xtrymalloc (nreader+1); /* Better add 1 for safety reasons. */ if (!list) { log_error ("error allocating memory for reader list\n"); pcsc_release_context (reader_table[slot].pcsc.context); reader_table[slot].used = 0; return -1 /*SW_HOST_OUT_OF_CORE*/; } err = pcsc_list_readers (reader_table[slot].pcsc.context, NULL, list, &nreader); } if (err) { log_error ("pcsc_list_readers failed: %s (0x%lx)\n", pcsc_error_string (err), err); pcsc_release_context (reader_table[slot].pcsc.context); reader_table[slot].used = 0; xfree (list); return -1; } p = list; while (nreader) { if (!*p && !p[1]) break; if (*p) log_info ("detected reader `%s'\n", p); if (nreader < (strlen (p)+1)) { log_error ("invalid response from pcsc_list_readers\n"); break; } nreader -= strlen (p)+1; p += strlen (p) + 1; } reader_table[slot].rdrname = xtrymalloc (strlen (portstr? portstr : list)+1); if (!reader_table[slot].rdrname) { log_error ("error allocating memory for reader name\n"); pcsc_release_context (reader_table[slot].pcsc.context); reader_table[slot].used = 0; return -1; } strcpy (reader_table[slot].rdrname, portstr? portstr : list); xfree (list); list = NULL; reader_table[slot].pcsc.card = 0; reader_table[slot].atrlen = 0; reader_table[slot].last_status = 0; reader_table[slot].connect_card = connect_pcsc_card; reader_table[slot].disconnect_card = disconnect_pcsc_card; reader_table[slot].close_reader = close_pcsc_reader; reader_table[slot].reset_reader = reset_pcsc_reader; reader_table[slot].get_status_reader = pcsc_get_status; reader_table[slot].send_apdu_reader = pcsc_send_apdu; reader_table[slot].dump_status_reader = dump_pcsc_reader_status; dump_reader_status (slot); return slot; } #endif /*!NEED_PCSC_WRAPPER */ /* Open the PC/SC reader using the pcsc_wrapper program. This is needed to cope with different thread models and other peculiarities of libpcsclite. */ #ifdef NEED_PCSC_WRAPPER static int open_pcsc_reader_wrapped (const char *portstr) { int slot; reader_table_t slotp; int fd, rp[2], wp[2]; int n, i; pid_t pid; size_t len; unsigned char msgbuf[9]; int err; unsigned int dummy_status; int sw = SW_HOST_CARD_IO_ERROR; /* Note that we use the constant and not the fucntion because this code won't be be used under Windows. */ const char *wrapperpgm = GNUPG_LIBEXECDIR "/gnupg-pcsc-wrapper"; if (access (wrapperpgm, X_OK)) { log_error ("can't run PC/SC access module `%s': %s\n", wrapperpgm, strerror (errno)); return -1; } slot = new_reader_slot (); if (slot == -1) return -1; slotp = reader_table + slot; /* Fire up the PC/SCc wrapper. We don't use any fork/exec code from the common directy but implement it directly so that this file may still be source copied. */ if (pipe (rp) == -1) { log_error ("error creating a pipe: %s\n", strerror (errno)); slotp->used = 0; return -1; } if (pipe (wp) == -1) { log_error ("error creating a pipe: %s\n", strerror (errno)); close (rp[0]); close (rp[1]); slotp->used = 0; return -1; } pid = fork (); if (pid == -1) { log_error ("error forking process: %s\n", strerror (errno)); close (rp[0]); close (rp[1]); close (wp[0]); close (wp[1]); slotp->used = 0; return -1; } slotp->pcsc.pid = pid; if (!pid) { /* === Child === */ /* Double fork. */ pid = fork (); if (pid == -1) _exit (31); if (pid) _exit (0); /* Immediate exit this parent, so that the child gets cleaned up by the init process. */ /* Connect our pipes. */ if (wp[0] != 0 && dup2 (wp[0], 0) == -1) log_fatal ("dup2 stdin failed: %s\n", strerror (errno)); if (rp[1] != 1 && dup2 (rp[1], 1) == -1) log_fatal ("dup2 stdout failed: %s\n", strerror (errno)); /* Send stderr to the bit bucket. */ fd = open ("/dev/null", O_WRONLY); if (fd == -1) log_fatal ("can't open `/dev/null': %s", strerror (errno)); if (fd != 2 && dup2 (fd, 2) == -1) log_fatal ("dup2 stderr failed: %s\n", strerror (errno)); /* Close all other files. */ close_all_fds (3, NULL); execl (wrapperpgm, "pcsc-wrapper", "--", "1", /* API version */ opt.pcsc_driver, /* Name of the PC/SC library. */ NULL); _exit (31); } /* === Parent === */ close (wp[0]); close (rp[1]); slotp->pcsc.req_fd = wp[1]; slotp->pcsc.rsp_fd = rp[0]; /* Wait for the intermediate child to terminate. */ #ifdef USE_GNU_PTH #define WAIT pth_waitpid #else #define WAIT waitpid #endif while ( (i=WAIT (pid, NULL, 0)) == -1 && errno == EINTR) ; #undef WAIT /* Now send the open request. */ msgbuf[0] = 0x01; /* OPEN command. */ len = portstr? strlen (portstr):0; msgbuf[1] = (len >> 24); msgbuf[2] = (len >> 16); msgbuf[3] = (len >> 8); msgbuf[4] = (len ); if ( writen (slotp->pcsc.req_fd, msgbuf, 5) || (portstr && writen (slotp->pcsc.req_fd, portstr, len))) { log_error ("error sending PC/SC OPEN request: %s\n", strerror (errno)); goto command_failed; } /* Read the response. */ if ((i=readn (slotp->pcsc.rsp_fd, msgbuf, 9, &len)) || len != 9) { log_error ("error receiving PC/SC OPEN response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } len = buf32_to_size_t (msgbuf+1); if (msgbuf[0] != 0x81 || len < 4) { log_error ("invalid response header from PC/SC received\n"); goto command_failed; } len -= 4; /* Already read the error code. */ if (len > DIM (slotp->atr)) { log_error ("PC/SC returned a too large ATR (len=%lx)\n", (unsigned long)len); goto command_failed; } err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5)); if (err) { log_error ("PC/SC OPEN failed: %s\n", pcsc_error_string (err)); sw = pcsc_error_to_sw (err); goto command_failed; } slotp->last_status = 0; /* The open request may return a zero for the ATR length to indicate that no card is present. */ n = len; if (n) { if ((i=readn (slotp->pcsc.rsp_fd, slotp->atr, n, &len)) || len != n) { log_error ("error receiving PC/SC OPEN response: %s\n", i? strerror (errno) : "premature EOF"); goto command_failed; } /* If we got to here we know that a card is present and usable. Thus remember this. */ slotp->last_status = ( APDU_CARD_USABLE | APDU_CARD_PRESENT | APDU_CARD_ACTIVE); } slotp->atrlen = len; reader_table[slot].close_reader = close_pcsc_reader; reader_table[slot].reset_reader = reset_pcsc_reader; reader_table[slot].get_status_reader = pcsc_get_status; reader_table[slot].send_apdu_reader = pcsc_send_apdu; reader_table[slot].dump_status_reader = dump_pcsc_reader_status; /* Read the status so that IS_T0 will be set. */ pcsc_get_status (slot, &dummy_status); dump_reader_status (slot); return slot; command_failed: close (slotp->pcsc.req_fd); close (slotp->pcsc.rsp_fd); slotp->pcsc.req_fd = -1; slotp->pcsc.rsp_fd = -1; kill (slotp->pcsc.pid, SIGTERM); slotp->pcsc.pid = (pid_t)(-1); slotp->used = 0; /* There is no way to return SW. */ return -1; } #endif /*NEED_PCSC_WRAPPER*/ static int open_pcsc_reader (const char *portstr) { #ifdef NEED_PCSC_WRAPPER return open_pcsc_reader_wrapped (portstr); #else return open_pcsc_reader_direct (portstr); #endif } #ifdef HAVE_LIBUSB /* Internal CCID driver interface. */ static void dump_ccid_reader_status (int slot) { log_info ("reader slot %d: using ccid driver\n", slot); } static int close_ccid_reader (int slot) { ccid_close_reader (reader_table[slot].ccid.handle); reader_table[slot].used = 0; return 0; } static int shutdown_ccid_reader (int slot) { ccid_shutdown_reader (reader_table[slot].ccid.handle); return 0; } static int reset_ccid_reader (int slot) { int err; reader_table_t slotp = reader_table + slot; unsigned char atr[33]; size_t atrlen; err = ccid_get_atr (slotp->ccid.handle, atr, sizeof atr, &atrlen); if (err) return err; /* If the reset was successful, update the ATR. */ assert (sizeof slotp->atr >= sizeof atr); slotp->atrlen = atrlen; memcpy (slotp->atr, atr, atrlen); dump_reader_status (slot); return 0; } static int set_progress_cb_ccid_reader (int slot, gcry_handler_progress_t cb, void *cb_arg) { reader_table_t slotp = reader_table + slot; return ccid_set_progress_cb (slotp->ccid.handle, cb, cb_arg); } static int get_status_ccid (int slot, unsigned int *status) { int rc; int bits; rc = ccid_slot_status (reader_table[slot].ccid.handle, &bits); if (rc) return rc; if (bits == 0) *status = (APDU_CARD_USABLE|APDU_CARD_PRESENT|APDU_CARD_ACTIVE); else if (bits == 1) *status = APDU_CARD_PRESENT; else *status = 0; return 0; } /* Actually send the APDU of length APDULEN to SLOT and return a maximum of *BUFLEN data in BUFFER, the actual returned size will be set to BUFLEN. Returns: Internal CCID driver error code. */ static int send_apdu_ccid (int slot, unsigned char *apdu, size_t apdulen, unsigned char *buffer, size_t *buflen, struct pininfo_s *pininfo) { long err; size_t maxbuflen; /* If we don't have an ATR, we need to reset the reader first. */ if (!reader_table[slot].atrlen && (err = reset_ccid_reader (slot))) return err; if (DBG_CARD_IO) log_printhex (" raw apdu:", apdu, apdulen); maxbuflen = *buflen; if (pininfo) err = ccid_transceive_secure (reader_table[slot].ccid.handle, apdu, apdulen, pininfo->mode, pininfo->minlen, pininfo->maxlen, pininfo->padlen, buffer, maxbuflen, buflen); else err = ccid_transceive (reader_table[slot].ccid.handle, apdu, apdulen, buffer, maxbuflen, buflen); if (err) log_error ("ccid_transceive failed: (0x%lx)\n", err); return err; } /* Check whether the CCID reader supports the ISO command code COMMAND on the keypad. Return 0 on success. For a description of the pin parameters, see ccid-driver.c */ static int check_ccid_keypad (int slot, int command, int pin_mode, int pinlen_min, int pinlen_max, int pin_padlen) { unsigned char apdu[] = { 0, 0, 0, 0x81 }; apdu[1] = command; return ccid_transceive_secure (reader_table[slot].ccid.handle, apdu, sizeof apdu, pin_mode, pinlen_min, pinlen_max, pin_padlen, NULL, 0, NULL); } /* Open the reader and try to read an ATR. */ static int open_ccid_reader (const char *portstr) { int err; int slot; reader_table_t slotp; slot = new_reader_slot (); if (slot == -1) return -1; slotp = reader_table + slot; err = ccid_open_reader (&slotp->ccid.handle, portstr); if (err) { slotp->used = 0; return -1; } err = ccid_get_atr (slotp->ccid.handle, slotp->atr, sizeof slotp->atr, &slotp->atrlen); if (err) { slotp->atrlen = 0; err = 0; } else { /* If we got to here we know that a card is present and usable. Thus remember this. */ reader_table[slot].last_status = (APDU_CARD_USABLE | APDU_CARD_PRESENT | APDU_CARD_ACTIVE); } reader_table[slot].close_reader = close_ccid_reader; reader_table[slot].shutdown_reader = shutdown_ccid_reader; reader_table[slot].reset_reader = reset_ccid_reader; reader_table[slot].get_status_reader = get_status_ccid; reader_table[slot].send_apdu_reader = send_apdu_ccid; reader_table[slot].check_keypad = check_ccid_keypad; reader_table[slot].dump_status_reader = dump_ccid_reader_status; reader_table[slot].set_progress_cb = set_progress_cb_ccid_reader; /* Our CCID reader code does not support T=0 at all, thus reset the flag. */ reader_table[slot].is_t0 = 0; dump_reader_status (slot); return slot; } #endif /* HAVE_LIBUSB */ #ifdef USE_G10CODE_RAPDU /* The Remote APDU Interface. This uses the Remote APDU protocol to contact a reader. The port number is actually an index into the list of ports as returned via the protocol. */ static int rapdu_status_to_sw (int status) { int rc; switch (status) { case RAPDU_STATUS_SUCCESS: rc = 0; break; case RAPDU_STATUS_INVCMD: case RAPDU_STATUS_INVPROT: case RAPDU_STATUS_INVSEQ: case RAPDU_STATUS_INVCOOKIE: case RAPDU_STATUS_INVREADER: rc = SW_HOST_INV_VALUE; break; case RAPDU_STATUS_TIMEOUT: rc = SW_HOST_CARD_IO_ERROR; break; case RAPDU_STATUS_CARDIO: rc = SW_HOST_CARD_IO_ERROR; break; case RAPDU_STATUS_NOCARD: rc = SW_HOST_NO_CARD; break; case RAPDU_STATUS_CARDCHG: rc = SW_HOST_NO_CARD; break; case RAPDU_STATUS_BUSY: rc = SW_HOST_BUSY; break; case RAPDU_STATUS_NEEDRESET: rc = SW_HOST_CARD_INACTIVE; break; default: rc = SW_HOST_GENERAL_ERROR; break; } return rc; } static int close_rapdu_reader (int slot) { rapdu_release (reader_table[slot].rapdu.handle); reader_table[slot].used = 0; return 0; } static int reset_rapdu_reader (int slot) { int err; reader_table_t slotp; rapdu_msg_t msg = NULL; slotp = reader_table + slot; err = rapdu_send_cmd (slotp->rapdu.handle, RAPDU_CMD_RESET); if (err) { log_error ("sending rapdu command RESET failed: %s\n", err < 0 ? strerror (errno): rapdu_strerror (err)); rapdu_msg_release (msg); return rapdu_status_to_sw (err); } err = rapdu_read_msg (slotp->rapdu.handle, &msg); if (err) { log_error ("receiving rapdu message failed: %s\n", err < 0 ? strerror (errno): rapdu_strerror (err)); rapdu_msg_release (msg); return rapdu_status_to_sw (err); } if (msg->cmd != RAPDU_STATUS_SUCCESS || !msg->datalen) { int sw = rapdu_status_to_sw (msg->cmd); log_error ("rapdu command RESET failed: %s\n", rapdu_strerror (msg->cmd)); rapdu_msg_release (msg); return sw; } if (msg->datalen > DIM (slotp->atr)) { log_error ("ATR returned by the RAPDU layer is too large\n"); rapdu_msg_release (msg); return SW_HOST_INV_VALUE; } slotp->atrlen = msg->datalen; memcpy (slotp->atr, msg->data, msg->datalen); rapdu_msg_release (msg); return 0; } static int my_rapdu_get_status (int slot, unsigned int *status) { int err; reader_table_t slotp; rapdu_msg_t msg = NULL; int oldslot; slotp = reader_table + slot; oldslot = rapdu_set_reader (slotp->rapdu.handle, slot); err = rapdu_send_cmd (slotp->rapdu.handle, RAPDU_CMD_GET_STATUS); rapdu_set_reader (slotp->rapdu.handle, oldslot); if (err) { log_error ("sending rapdu command GET_STATUS failed: %s\n", err < 0 ? strerror (errno): rapdu_strerror (err)); return rapdu_status_to_sw (err); } err = rapdu_read_msg (slotp->rapdu.handle, &msg); if (err) { log_error ("receiving rapdu message failed: %s\n", err < 0 ? strerror (errno): rapdu_strerror (err)); rapdu_msg_release (msg); return rapdu_status_to_sw (err); } if (msg->cmd != RAPDU_STATUS_SUCCESS || !msg->datalen) { int sw = rapdu_status_to_sw (msg->cmd); log_error ("rapdu command GET_STATUS failed: %s\n", rapdu_strerror (msg->cmd)); rapdu_msg_release (msg); return sw; } *status = msg->data[0]; rapdu_msg_release (msg); return 0; } /* Actually send the APDU of length APDULEN to SLOT and return a maximum of *BUFLEN data in BUFFER, the actual returned size will be set to BUFLEN. Returns: APDU error code. */ static int my_rapdu_send_apdu (int slot, unsigned char *apdu, size_t apdulen, unsigned char *buffer, size_t *buflen, struct pininfo_s *pininfo) { int err; reader_table_t slotp; rapdu_msg_t msg = NULL; size_t maxlen = *buflen; slotp = reader_table + slot; *buflen = 0; if (DBG_CARD_IO) log_printhex (" APDU_data:", apdu, apdulen); if (apdulen < 4) { log_error ("rapdu_send_apdu: APDU is too short\n"); return SW_HOST_INV_VALUE; } err = rapdu_send_apdu (slotp->rapdu.handle, apdu, apdulen); if (err) { log_error ("sending rapdu command APDU failed: %s\n", err < 0 ? strerror (errno): rapdu_strerror (err)); rapdu_msg_release (msg); return rapdu_status_to_sw (err); } err = rapdu_read_msg (slotp->rapdu.handle, &msg); if (err) { log_error ("receiving rapdu message failed: %s\n", err < 0 ? strerror (errno): rapdu_strerror (err)); rapdu_msg_release (msg); return rapdu_status_to_sw (err); } if (msg->cmd != RAPDU_STATUS_SUCCESS || !msg->datalen) { int sw = rapdu_status_to_sw (msg->cmd); log_error ("rapdu command APDU failed: %s\n", rapdu_strerror (msg->cmd)); rapdu_msg_release (msg); return sw; } if (msg->datalen > maxlen) { log_error ("rapdu response apdu too large\n"); rapdu_msg_release (msg); return SW_HOST_INV_VALUE; } *buflen = msg->datalen; memcpy (buffer, msg->data, msg->datalen); rapdu_msg_release (msg); return 0; } static int open_rapdu_reader (int portno, const unsigned char *cookie, size_t length, int (*readfnc) (void *opaque, void *buffer, size_t size), void *readfnc_value, int (*writefnc) (void *opaque, const void *buffer, size_t size), void *writefnc_value, void (*closefnc) (void *opaque), void *closefnc_value) { int err; int slot; reader_table_t slotp; rapdu_msg_t msg = NULL; slot = new_reader_slot (); if (slot == -1) return -1; slotp = reader_table + slot; slotp->rapdu.handle = rapdu_new (); if (!slotp->rapdu.handle) { slotp->used = 0; return -1; } rapdu_set_reader (slotp->rapdu.handle, portno); rapdu_set_iofunc (slotp->rapdu.handle, readfnc, readfnc_value, writefnc, writefnc_value, closefnc, closefnc_value); rapdu_set_cookie (slotp->rapdu.handle, cookie, length); /* First try to get the current ATR, but if the card is inactive issue a reset instead. */ err = rapdu_send_cmd (slotp->rapdu.handle, RAPDU_CMD_GET_ATR); if (err == RAPDU_STATUS_NEEDRESET) err = rapdu_send_cmd (slotp->rapdu.handle, RAPDU_CMD_RESET); if (err) { log_info ("sending rapdu command GET_ATR/RESET failed: %s\n", err < 0 ? strerror (errno): rapdu_strerror (err)); goto failure; } err = rapdu_read_msg (slotp->rapdu.handle, &msg); if (err) { log_info ("receiving rapdu message failed: %s\n", err < 0 ? strerror (errno): rapdu_strerror (err)); goto failure; } if (msg->cmd != RAPDU_STATUS_SUCCESS || !msg->datalen) { log_info ("rapdu command GET ATR failed: %s\n", rapdu_strerror (msg->cmd)); goto failure; } if (msg->datalen > DIM (slotp->atr)) { log_error ("ATR returned by the RAPDU layer is too large\n"); goto failure; } slotp->atrlen = msg->datalen; memcpy (slotp->atr, msg->data, msg->datalen); reader_table[slot].close_reader = close_rapdu_reader; reader_table[slot].reset_reader = reset_rapdu_reader; reader_table[slot].get_status_reader = my_rapdu_get_status; reader_table[slot].send_apdu_reader = my_rapdu_send_apdu; reader_table[slot].check_keypad = NULL; reader_table[slot].dump_status_reader = NULL; dump_reader_status (slot); rapdu_msg_release (msg); return slot; failure: rapdu_msg_release (msg); rapdu_release (slotp->rapdu.handle); slotp->used = 0; return -1; } #endif /*USE_G10CODE_RAPDU*/ /* Driver Access */ static int lock_slot (int slot) { #ifdef USE_GNU_PTH if (!pth_mutex_acquire (&reader_table[slot].lock, 0, NULL)) { log_error ("failed to acquire apdu lock: %s\n", strerror (errno)); return SW_HOST_LOCKING_FAILED; } #endif /*USE_GNU_PTH*/ return 0; } static int trylock_slot (int slot) { #ifdef USE_GNU_PTH if (!pth_mutex_acquire (&reader_table[slot].lock, TRUE, NULL)) { if (errno == EBUSY) return SW_HOST_BUSY; log_error ("failed to acquire apdu lock: %s\n", strerror (errno)); return SW_HOST_LOCKING_FAILED; } #endif /*USE_GNU_PTH*/ return 0; } static void unlock_slot (int slot) { #ifdef USE_GNU_PTH if (!pth_mutex_release (&reader_table[slot].lock)) log_error ("failed to release apdu lock: %s\n", strerror (errno)); #endif /*USE_GNU_PTH*/ } /* Open the reader and return an internal slot number or -1 on error. If PORTSTR is NULL we default to a suitable port (for ctAPI: the first USB reader. For PC/SC the first listed reader). */ int apdu_open_reader (const char *portstr) { static int pcsc_api_loaded, ct_api_loaded; #ifdef HAVE_LIBUSB if (!opt.disable_ccid) { int slot, i; const char *s; slot = open_ccid_reader (portstr); if (slot != -1) return slot; /* got one */ /* If a CCID reader specification has been given, the user does not want a fallback to other drivers. */ if (portstr) for (s=portstr, i=0; *s; s++) if (*s == ':' && (++i == 3)) return -1; } #endif /* HAVE_LIBUSB */ if (opt.ctapi_driver && *opt.ctapi_driver) { int port = portstr? atoi (portstr) : 32768; if (!ct_api_loaded) { void *handle; handle = dlopen (opt.ctapi_driver, RTLD_LAZY); if (!handle) { log_error ("apdu_open_reader: failed to open driver: %s\n", dlerror ()); return -1; } CT_init = dlsym (handle, "CT_init"); CT_data = dlsym (handle, "CT_data"); CT_close = dlsym (handle, "CT_close"); if (!CT_init || !CT_data || !CT_close) { log_error ("apdu_open_reader: invalid CT-API driver\n"); dlclose (handle); return -1; } ct_api_loaded = 1; } return open_ct_reader (port); } /* No ctAPI configured, so lets try the PC/SC API */ if (!pcsc_api_loaded) { #ifndef NEED_PCSC_WRAPPER void *handle; handle = dlopen (opt.pcsc_driver, RTLD_LAZY); if (!handle) { log_error ("apdu_open_reader: failed to open driver `%s': %s\n", opt.pcsc_driver, dlerror ()); return -1; } pcsc_establish_context = dlsym (handle, "SCardEstablishContext"); pcsc_release_context = dlsym (handle, "SCardReleaseContext"); pcsc_list_readers = dlsym (handle, "SCardListReaders"); #if defined(_WIN32) || defined(__CYGWIN__) if (!pcsc_list_readers) pcsc_list_readers = dlsym (handle, "SCardListReadersA"); #endif pcsc_get_status_change = dlsym (handle, "SCardGetStatusChange"); #if defined(_WIN32) || defined(__CYGWIN__) if (!pcsc_get_status_change) pcsc_get_status_change = dlsym (handle, "SCardGetStatusChangeA"); #endif pcsc_connect = dlsym (handle, "SCardConnect"); #if defined(_WIN32) || defined(__CYGWIN__) if (!pcsc_connect) pcsc_connect = dlsym (handle, "SCardConnectA"); #endif pcsc_reconnect = dlsym (handle, "SCardReconnect"); #if defined(_WIN32) || defined(__CYGWIN__) if (!pcsc_reconnect) pcsc_reconnect = dlsym (handle, "SCardReconnectA"); #endif pcsc_disconnect = dlsym (handle, "SCardDisconnect"); pcsc_status = dlsym (handle, "SCardStatus"); #if defined(_WIN32) || defined(__CYGWIN__) if (!pcsc_status) pcsc_status = dlsym (handle, "SCardStatusA"); #endif pcsc_begin_transaction = dlsym (handle, "SCardBeginTransaction"); pcsc_end_transaction = dlsym (handle, "SCardEndTransaction"); pcsc_transmit = dlsym (handle, "SCardTransmit"); pcsc_set_timeout = dlsym (handle, "SCardSetTimeout"); if (!pcsc_establish_context || !pcsc_release_context || !pcsc_list_readers || !pcsc_get_status_change || !pcsc_connect || !pcsc_reconnect || !pcsc_disconnect || !pcsc_status || !pcsc_begin_transaction || !pcsc_end_transaction || !pcsc_transmit /* || !pcsc_set_timeout */) { /* Note that set_timeout is currently not used and also not available under Windows. */ log_error ("apdu_open_reader: invalid PC/SC driver " "(%d%d%d%d%d%d%d%d%d%d%d%d)\n", !!pcsc_establish_context, !!pcsc_release_context, !!pcsc_list_readers, !!pcsc_get_status_change, !!pcsc_connect, !!pcsc_reconnect, !!pcsc_disconnect, !!pcsc_status, !!pcsc_begin_transaction, !!pcsc_end_transaction, !!pcsc_transmit, !!pcsc_set_timeout ); dlclose (handle); return -1; } #endif /*!NEED_PCSC_WRAPPER*/ pcsc_api_loaded = 1; } return open_pcsc_reader (portstr); } /* Open an remote reader and return an internal slot number or -1 on error. This function is an alternative to apdu_open_reader and used with remote readers only. Note that the supplied CLOSEFNC will only be called once and the slot will not be valid afther this. If PORTSTR is NULL we default to the first availabe port. */ int apdu_open_remote_reader (const char *portstr, const unsigned char *cookie, size_t length, int (*readfnc) (void *opaque, void *buffer, size_t size), void *readfnc_value, int (*writefnc) (void *opaque, const void *buffer, size_t size), void *writefnc_value, void (*closefnc) (void *opaque), void *closefnc_value) { #ifdef USE_G10CODE_RAPDU return open_rapdu_reader (portstr? atoi (portstr) : 0, cookie, length, readfnc, readfnc_value, writefnc, writefnc_value, closefnc, closefnc_value); #else (void)portstr; (void)cookie; (void)length; (void)readfnc; (void)readfnc_value; (void)writefnc; (void)writefnc_value; (void)closefnc; (void)closefnc_value; #ifdef _WIN32 errno = ENOENT; #else errno = ENOSYS; #endif return -1; #endif } int apdu_close_reader (int slot) { int sw; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; sw = apdu_disconnect (slot); if (sw) return sw; if (reader_table[slot].close_reader) return reader_table[slot].close_reader (slot); return SW_HOST_NOT_SUPPORTED; } /* Function suitable for a cleanup function to close all reader. It should not be used if the reader will be opened again. The reason for implementing this to properly close USB devices so that they will startup the next time without error. */ void apdu_prepare_exit (void) { static int sentinel; int slot; if (!sentinel) { sentinel = 1; for (slot = 0; slot < MAX_READER; slot++) if (reader_table[slot].used) { apdu_disconnect (slot); if (reader_table[slot].close_reader) reader_table[slot].close_reader (slot); reader_table[slot].used = 0; } sentinel = 0; } } /* Shutdown a reader; that is basically the same as a close but keeps the handle ready for later use. A apdu_reset_reader or apdu_connect should be used to get it active again. */ int apdu_shutdown_reader (int slot) { int sw; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; sw = apdu_disconnect (slot); if (sw) return sw; if (reader_table[slot].shutdown_reader) return reader_table[slot].shutdown_reader (slot); return SW_HOST_NOT_SUPPORTED; } /* Enumerate all readers and return information on whether this reader is in use. The caller should start with SLOT set to 0 and increment it with each call until an error is returned. */ int apdu_enum_reader (int slot, int *used) { if (slot < 0 || slot >= MAX_READER) return SW_HOST_NO_DRIVER; *used = reader_table[slot].used; return 0; } /* Connect a card. This is used to power up the card and make sure that an ATR is available. */ int apdu_connect (int slot) { int sw; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; /* Only if the access method provides a connect function we use it. If not, we expect that the card has been implicitly connected by apdu_open_reader. */ if (reader_table[slot].connect_card) { sw = lock_slot (slot); if (!sw) { sw = reader_table[slot].connect_card (slot); unlock_slot (slot); } } else sw = 0; /* We need to call apdu_get_status_internal, so that the last-status machinery gets setup properly even if a card is inserted while scdaemon is fired up and apdu_get_status has not yet been called. Without that we would force a reset of the card with the next call to apdu_get_status. */ apdu_get_status_internal (slot, 1, 1, NULL, NULL); return sw; } int apdu_disconnect (int slot) { int sw; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if (reader_table[slot].disconnect_card) { sw = lock_slot (slot); if (!sw) { sw = reader_table[slot].disconnect_card (slot); unlock_slot (slot); } } else sw = 0; return sw; } /* Set the progress callback of SLOT to CB and its args to CB_ARG. If CB is NULL the progress callback is removed. */ int apdu_set_progress_cb (int slot, gcry_handler_progress_t cb, void *cb_arg) { int sw; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if (reader_table[slot].set_progress_cb) { sw = lock_slot (slot); if (!sw) { sw = reader_table[slot].set_progress_cb (slot, cb, cb_arg); unlock_slot (slot); } } else sw = 0; return sw; } /* Do a reset for the card in reader at SLOT. */ int apdu_reset (int slot) { int sw; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if ((sw = lock_slot (slot))) return sw; reader_table[slot].last_status = 0; if (reader_table[slot].reset_reader) sw = reader_table[slot].reset_reader (slot); if (!sw) { /* If we got to here we know that a card is present and usable. Thus remember this. */ reader_table[slot].last_status = (APDU_CARD_USABLE | APDU_CARD_PRESENT | APDU_CARD_ACTIVE); } unlock_slot (slot); return sw; } /* Activate a card if it has not yet been done. This is a kind of reset-if-required. It is useful to test for presence of a card before issuing a bunch of apdu commands. It does not wait on a locked card. */ int apdu_activate (int slot) { int sw; unsigned int s; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if ((sw = trylock_slot (slot))) return sw; if (reader_table[slot].get_status_reader) sw = reader_table[slot].get_status_reader (slot, &s); if (!sw) { if (!(s & 2)) /* Card not present. */ sw = SW_HOST_NO_CARD; else if ( ((s & 2) && !(s & 4)) || !reader_table[slot].atrlen ) { /* We don't have an ATR or a card is present though inactive: do a reset now. */ if (reader_table[slot].reset_reader) { reader_table[slot].last_status = 0; sw = reader_table[slot].reset_reader (slot); if (!sw) { /* If we got to here we know that a card is present and usable. Thus remember this. */ reader_table[slot].last_status = (APDU_CARD_USABLE | APDU_CARD_PRESENT | APDU_CARD_ACTIVE); } } } } unlock_slot (slot); return sw; } unsigned char * apdu_get_atr (int slot, size_t *atrlen) { unsigned char *buf; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return NULL; if (!reader_table[slot].atrlen) return NULL; buf = xtrymalloc (reader_table[slot].atrlen); if (!buf) return NULL; memcpy (buf, reader_table[slot].atr, reader_table[slot].atrlen); *atrlen = reader_table[slot].atrlen; return buf; } /* Retrieve the status for SLOT. The function does only wait for the card to become available if HANG is set to true. On success the bits in STATUS will be set to APDU_CARD_USABLE (bit 0) = card present and usable APDU_CARD_PRESENT (bit 1) = card present APDU_CARD_ACTIVE (bit 2) = card active (bit 3) = card access locked [not yet implemented] For must applications, testing bit 0 is sufficient. CHANGED will receive the value of the counter tracking the number of card insertions. This value may be used to detect a card change. */ static int apdu_get_status_internal (int slot, int hang, int no_atr_reset, unsigned int *status, unsigned int *changed) { int sw; unsigned int s; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if ((sw = hang? lock_slot (slot) : trylock_slot (slot))) return sw; if (reader_table[slot].get_status_reader) sw = reader_table[slot].get_status_reader (slot, &s); unlock_slot (slot); if (sw) { reader_table[slot].last_status = 0; return sw; } /* Keep track of changes. */ if (s != reader_table[slot].last_status || !reader_table[slot].any_status ) { reader_table[slot].change_counter++; /* Make sure that the ATR is invalid so that a reset will be triggered by apdu_activate. */ if (!no_atr_reset) reader_table[slot].atrlen = 0; } reader_table[slot].any_status = 1; reader_table[slot].last_status = s; if (status) *status = s; if (changed) *changed = reader_table[slot].change_counter; return 0; } /* See above for a description. */ int apdu_get_status (int slot, int hang, unsigned int *status, unsigned int *changed) { return apdu_get_status_internal (slot, hang, 0, status, changed); } /* Check whether the reader supports the ISO command code COMMAND on the keypad. Return 0 on success. For a description of the pin parameters, see ccid-driver.c */ int apdu_check_keypad (int slot, int command, int pin_mode, int pinlen_min, int pinlen_max, int pin_padlen) { if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if (reader_table[slot].check_keypad) return reader_table[slot].check_keypad (slot, command, pin_mode, pinlen_min, pinlen_max, pin_padlen); else return SW_HOST_NOT_SUPPORTED; } /* Dispatcher for the actual send_apdu function. Note, that this function should be called in locked state. */ static int send_apdu (int slot, unsigned char *apdu, size_t apdulen, unsigned char *buffer, size_t *buflen, struct pininfo_s *pininfo) { if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if (reader_table[slot].send_apdu_reader) return reader_table[slot].send_apdu_reader (slot, apdu, apdulen, buffer, buflen, pininfo); else return SW_HOST_NOT_SUPPORTED; } /* Core APDU tranceiver function. Parameters are described at apdu_send_le with the exception of PININFO which indicates keypad related operations if not NULL. If EXTENDED_MODE is not 0 command chaining or extended length will be used according to these values: n < 0 := Use command chaining with the data part limited to -n in each chunk. If -1 is used a default value is used. n == 0 := No extended mode or command chaining. n == 1 := Use extended length for input and output without a length limit. n > 1 := Use extended length with up to N bytes. */ static int send_le (int slot, int class, int ins, int p0, int p1, int lc, const char *data, int le, unsigned char **retbuf, size_t *retbuflen, struct pininfo_s *pininfo, int extended_mode) { #define SHORT_RESULT_BUFFER_SIZE 258 /* We allocate 8 extra bytes as a safety margin towards a driver bug. */ unsigned char short_result_buffer[SHORT_RESULT_BUFFER_SIZE+10]; unsigned char *result_buffer = NULL; size_t result_buffer_size; unsigned char *result; size_t resultlen; unsigned char short_apdu_buffer[5+256+1]; unsigned char *apdu_buffer = NULL; size_t apdu_buffer_size; unsigned char *apdu; size_t apdulen; int sw; long rc; /* We need a long here due to PC/SC. */ int did_exact_length_hack = 0; int use_chaining = 0; int use_extended_length = 0; int lc_chunk; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if (DBG_CARD_IO) log_debug ("send apdu: c=%02X i=%02X p1=%02X p2=%02X lc=%d le=%d em=%d\n", class, ins, p0, p1, lc, le, extended_mode); if (lc != -1 && (lc > 255 || lc < 0)) { /* Data does not fit into an APDU. What we do now depends on the EXTENDED_MODE parameter. */ if (!extended_mode) return SW_WRONG_LENGTH; /* No way to send such an APDU. */ else if (extended_mode > 0) use_extended_length = 1; else if (extended_mode < 0) { /* Send APDU using chaining mode. */ if (lc > 16384) return SW_WRONG_LENGTH; /* Sanity check. */ if ((class&0xf0) != 0) return SW_HOST_INV_VALUE; /* Upper 4 bits need to be 0. */ use_chaining = extended_mode == -1? 255 : -extended_mode; use_chaining &= 0xff; } else return SW_HOST_INV_VALUE; } else if (lc == -1 && extended_mode > 0) use_extended_length = 1; if (le != -1 && (le > (extended_mode > 0? 255:256) || le < 0)) { /* Expected Data does not fit into an APDU. What we do now depends on the EXTENDED_MODE parameter. Note that a check for command chaining does not make sense because we are looking at Le. */ if (!extended_mode) return SW_WRONG_LENGTH; /* No way to send such an APDU. */ else if (use_extended_length) ; /* We are already using extended length. */ else if (extended_mode > 0) use_extended_length = 1; else return SW_HOST_INV_VALUE; } if ((!data && lc != -1) || (data && lc == -1)) return SW_HOST_INV_VALUE; if (use_extended_length) { if (reader_table[slot].is_t0) return SW_HOST_NOT_SUPPORTED; /* Space for: cls/ins/p1/p2+Z+2_byte_Lc+Lc+2_byte_Le. */ apdu_buffer_size = 4 + 1 + (lc >= 0? (2+lc):0) + 2; apdu_buffer = xtrymalloc (apdu_buffer_size + 10); if (!apdu_buffer) return SW_HOST_OUT_OF_CORE; apdu = apdu_buffer; } else { apdu_buffer_size = sizeof short_apdu_buffer; apdu = short_apdu_buffer; } if (use_extended_length && (le > 256 || le < 0)) { result_buffer_size = le < 0? 4096 : le; result_buffer = xtrymalloc (result_buffer_size + 10); if (!result_buffer) { xfree (apdu_buffer); return SW_HOST_OUT_OF_CORE; } result = result_buffer; } else { result_buffer_size = SHORT_RESULT_BUFFER_SIZE; result = short_result_buffer; } #undef SHORT_RESULT_BUFFER_SIZE if ((sw = lock_slot (slot))) { xfree (apdu_buffer); xfree (result_buffer); return sw; } do { if (use_extended_length) { use_chaining = 0; apdulen = 0; apdu[apdulen++] = class; apdu[apdulen++] = ins; apdu[apdulen++] = p0; apdu[apdulen++] = p1; apdu[apdulen++] = 0; /* Z byte: Extended length marker. */ if (lc >= 0) { apdu[apdulen++] = ((lc >> 8) & 0xff); apdu[apdulen++] = (lc & 0xff); memcpy (apdu+apdulen, data, lc); data += lc; apdulen += lc; } if (le != -1) { apdu[apdulen++] = ((le >> 8) & 0xff); apdu[apdulen++] = (le & 0xff); } } else { apdulen = 0; apdu[apdulen] = class; if (use_chaining && lc > 255) { apdu[apdulen] |= 0x10; assert (use_chaining < 256); lc_chunk = use_chaining; lc -= use_chaining; } else { use_chaining = 0; lc_chunk = lc; } apdulen++; apdu[apdulen++] = ins; apdu[apdulen++] = p0; apdu[apdulen++] = p1; if (lc_chunk != -1) { apdu[apdulen++] = lc_chunk; memcpy (apdu+apdulen, data, lc_chunk); data += lc_chunk; apdulen += lc_chunk; /* T=0 does not allow the use of Lc together with Le; thus disable Le in this case. */ if (reader_table[slot].is_t0) le = -1; } if (le != -1 && !use_chaining) apdu[apdulen++] = le; /* Truncation is okay (0 means 256). */ } exact_length_hack: /* As a safeguard don't pass any garbage to the driver. */ assert (apdulen <= apdu_buffer_size); memset (apdu+apdulen, 0, apdu_buffer_size - apdulen); resultlen = result_buffer_size; rc = send_apdu (slot, apdu, apdulen, result, &resultlen, pininfo); if (rc || resultlen < 2) { log_info ("apdu_send_simple(%d) failed: %s\n", slot, apdu_strerror (rc)); unlock_slot (slot); xfree (apdu_buffer); xfree (result_buffer); return rc? rc : SW_HOST_INCOMPLETE_CARD_RESPONSE; } sw = (result[resultlen-2] << 8) | result[resultlen-1]; if (!use_extended_length && !did_exact_length_hack && SW_EXACT_LENGTH_P (sw)) { apdu[apdulen-1] = (sw & 0x00ff); did_exact_length_hack = 1; goto exact_length_hack; } } while (use_chaining && sw == SW_SUCCESS); if (apdu_buffer) { xfree (apdu_buffer); apdu_buffer = NULL; apdu_buffer_size = 0; } /* Store away the returned data but strip the statusword. */ resultlen -= 2; if (DBG_CARD_IO) { log_debug (" response: sw=%04X datalen=%d\n", sw, (unsigned int)resultlen); if ( !retbuf && (sw == SW_SUCCESS || (sw & 0xff00) == SW_MORE_DATA)) log_printhex (" dump: ", result, resultlen); } if (sw == SW_SUCCESS || sw == SW_EOF_REACHED) { if (retbuf) { *retbuf = xtrymalloc (resultlen? resultlen : 1); if (!*retbuf) { unlock_slot (slot); xfree (result_buffer); return SW_HOST_OUT_OF_CORE; } *retbuflen = resultlen; memcpy (*retbuf, result, resultlen); } } else if ((sw & 0xff00) == SW_MORE_DATA) { unsigned char *p = NULL, *tmp; size_t bufsize = 4096; /* It is likely that we need to return much more data, so we start off with a large buffer. */ if (retbuf) { *retbuf = p = xtrymalloc (bufsize); if (!*retbuf) { unlock_slot (slot); xfree (result_buffer); return SW_HOST_OUT_OF_CORE; } assert (resultlen < bufsize); memcpy (p, result, resultlen); p += resultlen; } do { int len = (sw & 0x00ff); if (DBG_CARD_IO) log_debug ("apdu_send_simple(%d): %d more bytes available\n", slot, len); apdu_buffer_size = sizeof short_apdu_buffer; apdu = short_apdu_buffer; apdulen = 0; apdu[apdulen++] = class; apdu[apdulen++] = 0xC0; apdu[apdulen++] = 0; apdu[apdulen++] = 0; apdu[apdulen++] = len; assert (apdulen <= apdu_buffer_size); memset (apdu+apdulen, 0, apdu_buffer_size - apdulen); resultlen = result_buffer_size; rc = send_apdu (slot, apdu, apdulen, result, &resultlen, NULL); if (rc || resultlen < 2) { log_error ("apdu_send_simple(%d) for get response failed: %s\n", slot, apdu_strerror (rc)); unlock_slot (slot); xfree (result_buffer); return rc? rc : SW_HOST_INCOMPLETE_CARD_RESPONSE; } sw = (result[resultlen-2] << 8) | result[resultlen-1]; resultlen -= 2; if (DBG_CARD_IO) { log_debug (" more: sw=%04X datalen=%d\n", sw, (unsigned int)resultlen); if (!retbuf && (sw==SW_SUCCESS || (sw&0xff00)==SW_MORE_DATA)) log_printhex (" dump: ", result, resultlen); } if ((sw & 0xff00) == SW_MORE_DATA || sw == SW_SUCCESS || sw == SW_EOF_REACHED ) { if (retbuf && resultlen) { if (p - *retbuf + resultlen > bufsize) { bufsize += resultlen > 4096? resultlen: 4096; tmp = xtryrealloc (*retbuf, bufsize); if (!tmp) { unlock_slot (slot); xfree (result_buffer); return SW_HOST_OUT_OF_CORE; } p = tmp + (p - *retbuf); *retbuf = tmp; } memcpy (p, result, resultlen); p += resultlen; } } else log_info ("apdu_send_simple(%d) " "got unexpected status %04X from get response\n", slot, sw); } while ((sw & 0xff00) == SW_MORE_DATA); if (retbuf) { *retbuflen = p - *retbuf; tmp = xtryrealloc (*retbuf, *retbuflen); if (tmp) *retbuf = tmp; } } unlock_slot (slot); xfree (result_buffer); if (DBG_CARD_IO && retbuf && sw == SW_SUCCESS) log_printhex (" dump: ", *retbuf, *retbuflen); return sw; } /* Send an APDU to the card in SLOT. The APDU is created from all given parameters: CLASS, INS, P0, P1, LC, DATA, LE. A value of -1 for LC won't sent this field and the data field; in this case DATA must also be passed as NULL. If EXTENDED_MODE is not 0 command chaining or extended length will be used; see send_le for details. The return value is the status word or -1 for an invalid SLOT or other non card related error. If RETBUF is not NULL, it will receive an allocated buffer with the returned data. The length of that data will be put into *RETBUFLEN. The caller is reponsible for releasing the buffer even in case of errors. */ int apdu_send_le(int slot, int extended_mode, int class, int ins, int p0, int p1, int lc, const char *data, int le, unsigned char **retbuf, size_t *retbuflen) { return send_le (slot, class, ins, p0, p1, lc, data, le, retbuf, retbuflen, NULL, extended_mode); } /* Send an APDU to the card in SLOT. The APDU is created from all given parameters: CLASS, INS, P0, P1, LC, DATA. A value of -1 for LC won't sent this field and the data field; in this case DATA must also be passed as NULL. If EXTENDED_MODE is not 0 command chaining or extended length will be used; see send_le for details. The return value is the status word or -1 for an invalid SLOT or other non card related error. If RETBUF is not NULL, it will receive an allocated buffer with the returned data. The length of that data will be put into *RETBUFLEN. The caller is reponsible for releasing the buffer even in case of errors. */ int apdu_send (int slot, int extended_mode, int class, int ins, int p0, int p1, int lc, const char *data, unsigned char **retbuf, size_t *retbuflen) { return send_le (slot, class, ins, p0, p1, lc, data, 256, retbuf, retbuflen, NULL, extended_mode); } /* Send an APDU to the card in SLOT. The APDU is created from all given parameters: CLASS, INS, P0, P1, LC, DATA. A value of -1 for LC won't sent this field and the data field; in this case DATA must also be passed as NULL. If EXTENDED_MODE is not 0 command chaining or extended length will be used; see send_le for details. The return value is the status word or -1 for an invalid SLOT or other non card related error. No data will be returned. */ int apdu_send_simple (int slot, int extended_mode, int class, int ins, int p0, int p1, int lc, const char *data) { return send_le (slot, class, ins, p0, p1, lc, data, -1, NULL, NULL, NULL, extended_mode); } /* Same as apdu_send_simple but uses the keypad of the reader. */ int apdu_send_simple_kp (int slot, int class, int ins, int p0, int p1, int lc, const char *data, int pin_mode, int pinlen_min, int pinlen_max, int pin_padlen) { struct pininfo_s pininfo; pininfo.mode = pin_mode; pininfo.minlen = pinlen_min; pininfo.maxlen = pinlen_max; pininfo.padlen = pin_padlen; return send_le (slot, class, ins, p0, p1, lc, data, -1, NULL, NULL, &pininfo, 0); } /* This is a more generic version of the apdu sending routine. It takes an already formatted APDU in APDUDATA or length APDUDATALEN and returns with an APDU including the status word. With HANDLE_MORE set to true this function will handle the MORE DATA status and return all APDUs concatenated with one status word at the end. If EXTENDED_LENGTH is != 0 extended lengths are allowed with a max. result data length of EXTENDED_LENGTH bytes. The function does not return a regular status word but 0 on success. If the slot is locked, the function returns immediately with an error. */ int apdu_send_direct (int slot, size_t extended_length, const unsigned char *apdudata, size_t apdudatalen, int handle_more, unsigned char **retbuf, size_t *retbuflen) { #define SHORT_RESULT_BUFFER_SIZE 258 unsigned char short_result_buffer[SHORT_RESULT_BUFFER_SIZE+10]; unsigned char *result_buffer = NULL; size_t result_buffer_size; unsigned char *result; size_t resultlen; unsigned char short_apdu_buffer[5+256+10]; unsigned char *apdu_buffer = NULL; unsigned char *apdu; size_t apdulen; int sw; long rc; /* we need a long here due to PC/SC. */ int class; if (slot < 0 || slot >= MAX_READER || !reader_table[slot].used ) return SW_HOST_NO_DRIVER; if (apdudatalen > 65535) return SW_HOST_INV_VALUE; if (apdudatalen > sizeof short_apdu_buffer - 5) { apdu_buffer = xtrymalloc (apdudatalen + 5); if (!apdu_buffer) return SW_HOST_OUT_OF_CORE; apdu = apdu_buffer; } else { apdu = short_apdu_buffer; } apdulen = apdudatalen; memcpy (apdu, apdudata, apdudatalen); class = apdulen? *apdu : 0; if (extended_length >= 256 && extended_length <= 65536) { result_buffer_size = extended_length; result_buffer = xtrymalloc (result_buffer_size + 10); if (!result_buffer) { xfree (apdu_buffer); return SW_HOST_OUT_OF_CORE; } result = result_buffer; } else { result_buffer_size = SHORT_RESULT_BUFFER_SIZE; result = short_result_buffer; } #undef SHORT_RESULT_BUFFER_SIZE if ((sw = trylock_slot (slot))) { xfree (apdu_buffer); xfree (result_buffer); return sw; } resultlen = result_buffer_size; rc = send_apdu (slot, apdu, apdulen, result, &resultlen, NULL); xfree (apdu_buffer); apdu_buffer = NULL; if (rc || resultlen < 2) { log_error ("apdu_send_direct(%d) failed: %s\n", slot, apdu_strerror (rc)); unlock_slot (slot); xfree (result_buffer); return rc? rc : SW_HOST_INCOMPLETE_CARD_RESPONSE; } sw = (result[resultlen-2] << 8) | result[resultlen-1]; /* Store away the returned data but strip the statusword. */ resultlen -= 2; if (DBG_CARD_IO) { log_debug (" response: sw=%04X datalen=%d\n", sw, (unsigned int)resultlen); if ( !retbuf && (sw == SW_SUCCESS || (sw & 0xff00) == SW_MORE_DATA)) log_printhex (" dump: ", result, resultlen); } if (handle_more && (sw & 0xff00) == SW_MORE_DATA) { unsigned char *p = NULL, *tmp; size_t bufsize = 4096; /* It is likely that we need to return much more data, so we start off with a large buffer. */ if (retbuf) { *retbuf = p = xtrymalloc (bufsize + 2); if (!*retbuf) { unlock_slot (slot); xfree (result_buffer); return SW_HOST_OUT_OF_CORE; } assert (resultlen < bufsize); memcpy (p, result, resultlen); p += resultlen; } do { int len = (sw & 0x00ff); if (DBG_CARD_IO) log_debug ("apdu_send_direct(%d): %d more bytes available\n", slot, len); apdu = short_apdu_buffer; apdulen = 0; apdu[apdulen++] = class; apdu[apdulen++] = 0xC0; apdu[apdulen++] = 0; apdu[apdulen++] = 0; apdu[apdulen++] = len; memset (apdu+apdulen, 0, sizeof (short_apdu_buffer) - apdulen); resultlen = result_buffer_size; rc = send_apdu (slot, apdu, apdulen, result, &resultlen, NULL); if (rc || resultlen < 2) { log_error ("apdu_send_direct(%d) for get response failed: %s\n", slot, apdu_strerror (rc)); unlock_slot (slot); xfree (result_buffer); return rc ? rc : SW_HOST_INCOMPLETE_CARD_RESPONSE; } sw = (result[resultlen-2] << 8) | result[resultlen-1]; resultlen -= 2; if (DBG_CARD_IO) { log_debug (" more: sw=%04X datalen=%d\n", sw, (unsigned int)resultlen); if (!retbuf && (sw==SW_SUCCESS || (sw&0xff00)==SW_MORE_DATA)) log_printhex (" dump: ", result, resultlen); } if ((sw & 0xff00) == SW_MORE_DATA || sw == SW_SUCCESS || sw == SW_EOF_REACHED ) { if (retbuf && resultlen) { if (p - *retbuf + resultlen > bufsize) { bufsize += resultlen > 4096? resultlen: 4096; tmp = xtryrealloc (*retbuf, bufsize + 2); if (!tmp) { unlock_slot (slot); xfree (result_buffer); return SW_HOST_OUT_OF_CORE; } p = tmp + (p - *retbuf); *retbuf = tmp; } memcpy (p, result, resultlen); p += resultlen; } } else log_info ("apdu_send_direct(%d) " "got unexpected status %04X from get response\n", slot, sw); } while ((sw & 0xff00) == SW_MORE_DATA); if (retbuf) { *retbuflen = p - *retbuf; tmp = xtryrealloc (*retbuf, *retbuflen + 2); if (tmp) *retbuf = tmp; } } else { if (retbuf) { *retbuf = xtrymalloc ((resultlen? resultlen : 1)+2); if (!*retbuf) { unlock_slot (slot); xfree (result_buffer); return SW_HOST_OUT_OF_CORE; } *retbuflen = resultlen; memcpy (*retbuf, result, resultlen); } } unlock_slot (slot); xfree (result_buffer); /* Append the status word. Note that we reserved the two extra bytes while allocating the buffer. */ if (retbuf) { (*retbuf)[(*retbuflen)++] = (sw >> 8); (*retbuf)[(*retbuflen)++] = sw; } if (DBG_CARD_IO && retbuf) log_printhex (" dump: ", *retbuf, *retbuflen); return 0; } gnupg-1.4.20/g10/iso7816.h0000644000175000017500000001406612635262326011535 00000000000000/* iso7816.h - ISO 7816 commands * Copyright (C) 2003 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 3 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, see . * * $Id$ */ #ifndef ISO7816_H #define ISO7816_H #if GNUPG_MAJOR_VERSION == 1 #include "cardglue.h" #endif /* Command codes used by iso7816_check_keypad. */ #define ISO7816_VERIFY 0x20 #define ISO7816_CHANGE_REFERENCE_DATA 0x24 #define ISO7816_RESET_RETRY_COUNTER 0x2C /* Information to be passed to keypad equipped readers. See ccid-driver.c for details. */ struct iso7816_pininfo_s { int mode; /* A mode of 0 means: Do not use the keypad. */ int minlen; int maxlen; int padlen; int padchar; }; typedef struct iso7816_pininfo_s iso7816_pininfo_t; gpg_error_t iso7816_map_sw (int sw); gpg_error_t iso7816_select_application (int slot, const char *aid, size_t aidlen, unsigned int flags); gpg_error_t iso7816_select_file (int slot, int tag, int is_dir, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_select_path (int slot, const unsigned short *path, size_t pathlen, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_list_directory (int slot, int list_dirs, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_apdu_direct (int slot, const void *apdudata, size_t apdudatalen, int handle_more, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_check_keypad (int slot, int command, iso7816_pininfo_t *pininfo); gpg_error_t iso7816_verify (int slot, int chvno, const char *chv, size_t chvlen); gpg_error_t iso7816_verify_kp (int slot, int chvno, const char *chv, size_t chvlen, iso7816_pininfo_t *pininfo); gpg_error_t iso7816_change_reference_data (int slot, int chvno, const char *oldchv, size_t oldchvlen, const char *newchv, size_t newchvlen); gpg_error_t iso7816_change_reference_data_kp (int slot, int chvno, const char *oldchv, size_t oldchvlen, const char *newchv, size_t newchvlen, iso7816_pininfo_t *pininfo); gpg_error_t iso7816_reset_retry_counter (int slot, int chvno, const char *newchv, size_t newchvlen); gpg_error_t iso7816_reset_retry_counter_kp (int slot, int chvno, const char *newchv, size_t newchvlen, iso7816_pininfo_t *pininfo); gpg_error_t iso7816_reset_retry_counter_with_rc (int slot, int chvno, const char *data, size_t datalen); gpg_error_t iso7816_get_data (int slot, int extended_mode, int tag, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_put_data (int slot, int extended_mode, int tag, const unsigned char *data, size_t datalen); gpg_error_t iso7816_put_data_odd (int slot, int extended_mode, int tag, const unsigned char *data, size_t datalen); gpg_error_t iso7816_manage_security_env (int slot, int p1, int p2, const unsigned char *data, size_t datalen); gpg_error_t iso7816_compute_ds (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_decipher (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, int padind, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_internal_authenticate (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_generate_keypair (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_read_public_key (int slot, int extended_mode, const unsigned char *data, size_t datalen, int le, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_get_challenge (int slot, int length, unsigned char *buffer); gpg_error_t iso7816_read_binary (int slot, size_t offset, size_t nmax, unsigned char **result, size_t *resultlen); gpg_error_t iso7816_read_record (int slot, int recno, int reccount, int short_ef, unsigned char **result, size_t *resultlen); #endif /*ISO7816_H*/ gnupg-1.4.20/g10/keygen.c0000644000175000017500000031473212635262326011675 00000000000000/* keygen.c - generate a key pair * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007, 2009 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 3 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, see . */ #include #include #include #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 "trustdb.h" #include "status.h" #include "i18n.h" #include "cardglue.h" #include "keyserver-internal.h" #include "host2net.h" #define MAX_PREFS 30 enum para_name { pKEYTYPE, pKEYLENGTH, pKEYUSAGE, pSUBKEYTYPE, pSUBKEYLENGTH, pSUBKEYUSAGE, pAUTHKEYTYPE, pNAMEREAL, pNAMEEMAIL, pNAMECOMMENT, pPREFERENCES, pREVOKER, pUSERID, pCREATIONDATE, pKEYCREATIONDATE, /* Same in seconds since epoch. */ pEXPIREDATE, pKEYEXPIRE, /* in n seconds */ pSUBKEYEXPIRE, /* in n seconds */ pPASSPHRASE, pPASSPHRASE_DEK, pPASSPHRASE_S2K, pSERIALNO, pBACKUPENCDIR, pHANDLE, pKEYSERVER }; struct para_data_s { struct para_data_s *next; int lnr; enum para_name key; union { DEK *dek; STRING2KEY *s2k; u32 expire; u32 creation; unsigned int usage; struct revocation_key revkey; char value[1]; } u; }; struct output_control_s { int lnr; int dryrun; int use_files; struct { char *fname; char *newfname; IOBUF stream; armor_filter_context_t afx; } pub; struct { char *fname; char *newfname; IOBUF stream; armor_filter_context_t afx; } sec; }; struct opaque_data_usage_and_pk { unsigned int usage; PKT_public_key *pk; }; static int prefs_initialized = 0; static byte sym_prefs[MAX_PREFS]; static int nsym_prefs; static byte hash_prefs[MAX_PREFS]; static int nhash_prefs; static byte zip_prefs[MAX_PREFS]; static int nzip_prefs; static int mdc_available,ks_modify; static void do_generate_keypair (struct para_data_s *para, struct output_control_s *outctrl, int card); static int write_keyblock( IOBUF out, KBNODE node ); static int gen_card_key (int algo, int keyno, int is_primary, KBNODE pub_root, KBNODE sec_root, PKT_secret_key **ret_sk, u32 *timestamp, u32 expireval, struct para_data_s *para); static int gen_card_key_with_backup (int algo, int keyno, int is_primary, KBNODE pub_root, KBNODE sec_root, u32 timestamp, u32 expireval, struct para_data_s *para, const char *backup_dir); static void print_status_key_created (int letter, PKT_public_key *pk, const char *handle) { byte array[MAX_FINGERPRINT_LEN], *s; char *buf, *p; size_t i, n; if (!handle) handle = ""; buf = xmalloc (MAX_FINGERPRINT_LEN*2+31 + strlen (handle) + 1); p = buf; if (letter || pk) { *p++ = letter; *p++ = ' '; fingerprint_from_pk (pk, array, &n); s = array; for (i=0; i < n ; i++, s++, p += 2) sprintf (p, "%02X", *s); } if (*handle) { *p++ = ' '; for (i=0; handle[i] && i < 100; i++) *p++ = isspace ((unsigned int)handle[i])? '_':handle[i]; } *p = 0; write_status_text ((letter || pk)?STATUS_KEY_CREATED:STATUS_KEY_NOT_CREATED, buf); xfree (buf); } static void print_status_key_not_created (const char *handle) { print_status_key_created (0, NULL, handle); } static void write_uid( KBNODE root, const char *s ) { PACKET *pkt = xmalloc_clear(sizeof *pkt ); size_t n = strlen(s); pkt->pkttype = PKT_USER_ID; pkt->pkt.user_id = xmalloc_clear( sizeof *pkt->pkt.user_id + n - 1 ); pkt->pkt.user_id->len = n; pkt->pkt.user_id->ref = 1; strcpy(pkt->pkt.user_id->name, s); add_kbnode( root, new_kbnode( pkt ) ); } static void do_add_key_flags (PKT_signature *sig, unsigned int use) { byte buf[1]; buf[0] = 0; /* The spec says that all primary keys MUST be able to certify. */ if(sig->sig_class!=0x18) buf[0] |= 0x01; if (use & PUBKEY_USAGE_SIG) buf[0] |= 0x02; if (use & PUBKEY_USAGE_ENC) buf[0] |= 0x04 | 0x08; if (use & PUBKEY_USAGE_AUTH) buf[0] |= 0x20; build_sig_subpkt (sig, SIGSUBPKT_KEY_FLAGS, buf, 1); } int keygen_add_key_expire( PKT_signature *sig, void *opaque ) { PKT_public_key *pk = opaque; byte buf[8]; u32 u; if( pk->expiredate ) { if(pk->expiredate > pk->timestamp) u= pk->expiredate - pk->timestamp; else u= 1; 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 ); } else { /* Make sure we don't leave a key expiration subpacket lying around */ delete_sig_subpkt (sig->hashed, SIGSUBPKT_KEY_EXPIRE); } return 0; } static int keygen_add_key_flags_and_expire (PKT_signature *sig, void *opaque) { struct opaque_data_usage_and_pk *oduap = opaque; do_add_key_flags (sig, oduap->usage); return keygen_add_key_expire (sig, oduap->pk); } static int set_one_pref (int val, int type, const char *item, byte *buf, int *nbuf) { int i; for (i=0; i < *nbuf; i++ ) if (buf[i] == val) { log_info (_("preference `%s' duplicated\n"), item); return -1; } if (*nbuf >= MAX_PREFS) { if(type==1) log_info(_("too many cipher preferences\n")); else if(type==2) log_info(_("too many digest preferences\n")); else if(type==3) log_info(_("too many compression preferences\n")); else BUG(); return -1; } buf[(*nbuf)++] = val; return 0; } /* * Parse the supplied string and use it to set the standard * preferences. The string may be in a form like the one printed by * "pref" (something like: "S10 S3 H3 H2 Z2 Z1") or the actual * cipher/hash/compress names. Use NULL to set the default * preferences. Returns: 0 = okay */ int keygen_set_std_prefs (const char *string,int personal) { byte sym[MAX_PREFS], hash[MAX_PREFS], zip[MAX_PREFS]; int nsym=0, nhash=0, nzip=0, val, rc=0; int mdc=1, modify=0; /* mdc defaults on, modify defaults off. */ char dummy_string[20*4+1]; /* Enough for 20 items. */ if (!string || !ascii_strcasecmp (string, "default")) { if (opt.def_preference_list) string=opt.def_preference_list; else { dummy_string[0]='\0'; /* The rationale why we use the order AES256,192,128 is for compatibility reasons with PGP. If gpg would define AES128 first, we would get the somewhat confusing situation: gpg -r pgpkey -r gpgkey ---gives--> AES256 gpg -r gpgkey -r pgpkey ---gives--> AES Note that by using --personal-cipher-preferences it is possible to prefer AES128. */ /* Make sure we do not add more than 15 items here, as we could overflow the size of dummy_string. We currently have at most 12. */ if(!check_cipher_algo(CIPHER_ALGO_AES256)) strcat(dummy_string,"S9 "); if(!check_cipher_algo(CIPHER_ALGO_AES192)) strcat(dummy_string,"S8 "); if(!check_cipher_algo(CIPHER_ALGO_AES)) strcat(dummy_string,"S7 "); if(!check_cipher_algo(CIPHER_ALGO_CAST5)) strcat(dummy_string,"S3 "); strcat(dummy_string,"S2 "); /* 3DES */ /* If we have it and we are in PGP2 mode, IDEA goes *after* 3DES so it won't be used unless we're encrypting along with a V3 key. Ideally, we would only put the S1 preference in if the key was RSA and <=2048 bits, as that is what won't break PGP2, but that is difficult with the current code, and not really worth checking as a non-RSA <=2048 bit key wouldn't be usable by PGP2 anyway. -dms */ if(PGP2 && !check_cipher_algo(CIPHER_ALGO_IDEA)) strcat(dummy_string,"S1 "); /* The default hash algo order is: SHA-256, SHA-1, SHA-384, SHA-512, SHA-224. Ordering SHA-1 before SHA-384 might be viewed as a bit strange; it is done because we expect that soon enough SHA-3 will be available and at that point there should be no more need for SHA-384 etc. Anyway this order is just a default and can easily be changed by a config option. */ if (!check_digest_algo (DIGEST_ALGO_SHA256)) strcat (dummy_string, "H8 "); strcat (dummy_string,"H2 ");/* SHA-1 */ if (!check_digest_algo (DIGEST_ALGO_SHA384)) strcat (dummy_string, "H9 "); if (!check_digest_algo (DIGEST_ALGO_SHA512)) strcat (dummy_string, "H10 "); if (!check_digest_algo (DIGEST_ALGO_SHA224)) strcat (dummy_string, "H11 "); /* ZLIB */ strcat(dummy_string,"Z2 "); if(!check_compress_algo(COMPRESS_ALGO_BZIP2)) strcat(dummy_string,"Z3 "); /* ZIP */ strcat(dummy_string,"Z1"); string=dummy_string; } } else if (!ascii_strcasecmp (string, "none")) string = ""; if(strlen(string)) { char *tok,*prefstring; prefstring=xstrdup(string); /* need a writable string! */ while((tok=strsep(&prefstring," ,"))) { if((val=string_to_cipher_algo(tok))) { if(set_one_pref(val,1,tok,sym,&nsym)) rc=-1; } else if((val=string_to_digest_algo(tok))) { if(set_one_pref(val,2,tok,hash,&nhash)) rc=-1; } else if((val=string_to_compress_algo(tok))>-1) { if(set_one_pref(val,3,tok,zip,&nzip)) rc=-1; } else if (ascii_strcasecmp(tok,"mdc")==0) mdc=1; else if (ascii_strcasecmp(tok,"no-mdc")==0) mdc=0; else if (ascii_strcasecmp(tok,"ks-modify")==0) modify=1; else if (ascii_strcasecmp(tok,"no-ks-modify")==0) modify=0; else { log_info (_("invalid item `%s' in preference string\n"),tok); rc=-1; } } xfree(prefstring); } if(!rc) { if(personal) { if(personal==PREFTYPE_SYM) { xfree(opt.personal_cipher_prefs); if(nsym==0) opt.personal_cipher_prefs=NULL; else { int i; opt.personal_cipher_prefs= xmalloc(sizeof(prefitem_t *)*(nsym+1)); for (i=0; iref=1; uid->prefs=xmalloc((sizeof(prefitem_t *)* (nsym_prefs+nhash_prefs+nzip_prefs+1))); for(i=0;iprefs[j].type=PREFTYPE_SYM; uid->prefs[j].value=sym_prefs[i]; } for(i=0;iprefs[j].type=PREFTYPE_HASH; uid->prefs[j].value=hash_prefs[i]; } for(i=0;iprefs[j].type=PREFTYPE_ZIP; uid->prefs[j].value=zip_prefs[i]; } uid->prefs[j].type=PREFTYPE_NONE; uid->prefs[j].value=0; uid->flags.mdc=mdc_available; uid->flags.ks_modify=ks_modify; return uid; } static void add_feature_mdc (PKT_signature *sig,int enabled) { const byte *s; size_t n; int i; char *buf; s = parse_sig_subpkt (sig->hashed, SIGSUBPKT_FEATURES, &n ); /* Already set or cleared */ if (s && n && ((enabled && (s[0] & 0x01)) || (!enabled && !(s[0] & 0x01)))) return; if (!s || !n) { /* create a new one */ n = 1; buf = xmalloc_clear (n); } else { buf = xmalloc (n); memcpy (buf, s, n); } if(enabled) buf[0] |= 0x01; /* MDC feature */ else buf[0] &= ~0x01; /* Are there any bits set? */ for(i=0;ihashed, SIGSUBPKT_FEATURES); else build_sig_subpkt (sig, SIGSUBPKT_FEATURES, buf, n); xfree (buf); } static void add_keyserver_modify (PKT_signature *sig,int enabled) { const byte *s; size_t n; int i; char *buf; /* The keyserver modify flag is a negative flag (i.e. no-modify) */ enabled=!enabled; s = parse_sig_subpkt (sig->hashed, SIGSUBPKT_KS_FLAGS, &n ); /* Already set or cleared */ if (s && n && ((enabled && (s[0] & 0x80)) || (!enabled && !(s[0] & 0x80)))) return; if (!s || !n) { /* create a new one */ n = 1; buf = xmalloc_clear (n); } else { buf = xmalloc (n); memcpy (buf, s, n); } if(enabled) buf[0] |= 0x80; /* no-modify flag */ else buf[0] &= ~0x80; /* Are there any bits set? */ for(i=0;ihashed, SIGSUBPKT_KS_FLAGS); else build_sig_subpkt (sig, SIGSUBPKT_KS_FLAGS, buf, n); xfree (buf); } int keygen_upd_std_prefs( PKT_signature *sig, void *opaque ) { (void)opaque; if (!prefs_initialized) keygen_set_std_prefs (NULL, 0); if (nsym_prefs) build_sig_subpkt (sig, SIGSUBPKT_PREF_SYM, sym_prefs, nsym_prefs); else { delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_SYM); delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_SYM); } if (nhash_prefs) build_sig_subpkt (sig, SIGSUBPKT_PREF_HASH, hash_prefs, nhash_prefs); else { delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_HASH); delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_HASH); } if (nzip_prefs) build_sig_subpkt (sig, SIGSUBPKT_PREF_COMPR, zip_prefs, nzip_prefs); else { delete_sig_subpkt (sig->hashed, SIGSUBPKT_PREF_COMPR); delete_sig_subpkt (sig->unhashed, SIGSUBPKT_PREF_COMPR); } /* Make sure that the MDC feature flag is set if needed */ add_feature_mdc (sig,mdc_available); add_keyserver_modify (sig,ks_modify); keygen_add_keyserver_url(sig,NULL); 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 ) { PKT_public_key *pk = opaque; do_add_key_flags (sig, pk->pubkey_usage); keygen_add_key_expire( sig, opaque ); keygen_upd_std_prefs (sig, opaque); keygen_add_keyserver_url(sig,NULL); return 0; } int keygen_add_keyserver_url(PKT_signature *sig, void *opaque) { const char *url=opaque; if(!url) url=opt.def_keyserver_url; if(url) build_sig_subpkt(sig,SIGSUBPKT_PREF_KS,url,strlen(url)); else delete_sig_subpkt (sig->hashed,SIGSUBPKT_PREF_KS); return 0; } int keygen_add_notations(PKT_signature *sig,void *opaque) { struct notation *notation; /* We always start clean */ delete_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION); delete_sig_subpkt(sig->unhashed,SIGSUBPKT_NOTATION); sig->flags.notation=0; for(notation=opaque;notation;notation=notation->next) if(!notation->flags.ignore) { unsigned char *buf; unsigned int n1,n2; n1=strlen(notation->name); if(notation->altvalue) n2=strlen(notation->altvalue); else if(notation->bdat) n2=notation->blen; else n2=strlen(notation->value); buf = xmalloc( 8 + n1 + n2 ); /* human readable or not */ buf[0] = notation->bdat?0:0x80; buf[1] = buf[2] = buf[3] = 0; buf[4] = n1 >> 8; buf[5] = n1; buf[6] = n2 >> 8; buf[7] = n2; memcpy(buf+8, notation->name, n1 ); if(notation->altvalue) memcpy(buf+8+n1, notation->altvalue, n2 ); else if(notation->bdat) memcpy(buf+8+n1, notation->bdat, n2 ); else memcpy(buf+8+n1, notation->value, n2 ); build_sig_subpkt( sig, SIGSUBPKT_NOTATION | (notation->flags.critical?SIGSUBPKT_FLAG_CRITICAL:0), buf, 8+n1+n2 ); xfree(buf); } return 0; } int keygen_add_revkey(PKT_signature *sig, void *opaque) { struct revocation_key *revkey=opaque; byte buf[2+MAX_FINGERPRINT_LEN]; buf[0]=revkey->class; buf[1]=revkey->algid; memcpy(&buf[2],revkey->fpr,MAX_FINGERPRINT_LEN); build_sig_subpkt(sig,SIGSUBPKT_REV_KEY,buf,2+MAX_FINGERPRINT_LEN); /* All sigs with revocation keys set are nonrevocable */ sig->flags.revocable=0; buf[0] = 0; build_sig_subpkt( sig, SIGSUBPKT_REVOCABLE, buf, 1 ); parse_revkeys(sig); return 0; } /* Create a back-signature. If TIMESTAMP is not NULL, use it for the signature creation time. */ int make_backsig (PKT_signature *sig, PKT_public_key *pk, PKT_public_key *sub_pk, PKT_secret_key *sub_sk, u32 timestamp) { PKT_signature *backsig; int rc; cache_public_key(sub_pk); rc= make_keysig_packet (&backsig, pk, NULL, sub_pk, sub_sk, 0x19, 0, 0, timestamp, 0, NULL, NULL); if(rc) log_error("make_keysig_packet failed for backsig: %s\n",g10_errstr(rc)); else { /* get it into a binary packed form. */ IOBUF backsig_out=iobuf_temp(); PACKET backsig_pkt; init_packet(&backsig_pkt); backsig_pkt.pkttype=PKT_SIGNATURE; backsig_pkt.pkt.signature=backsig; rc=build_packet(backsig_out,&backsig_pkt); free_packet(&backsig_pkt); if(rc) log_error("build_packet failed for backsig: %s\n",g10_errstr(rc)); else { size_t pktlen=0; byte *buf=iobuf_get_temp_buffer(backsig_out); /* Remove the packet header */ if(buf[0]&0x40) { if(buf[1]<192) { pktlen=buf[1]; buf+=2; } else if(buf[1]<224) { pktlen=(buf[1]-192)*256; pktlen+=buf[2]+192; buf+=3; } else if(buf[1]==255) { pktlen = buf32_to_size_t (buf+2); buf+=6; } else BUG(); } else { int mark=1; switch(buf[0]&3) { case 3: BUG(); break; case 2: pktlen = (size_t)buf[mark++] << 24; pktlen |= buf[mark++] << 16; case 1: pktlen |= buf[mark++] << 8; case 0: pktlen |= buf[mark++]; } buf+=mark; } /* now make the binary blob into a subpacket */ build_sig_subpkt(sig,SIGSUBPKT_SIGNATURE,buf,pktlen); iobuf_close(backsig_out); } } return rc; } static int write_direct_sig( KBNODE root, KBNODE pub_root, PKT_secret_key *sk, struct revocation_key *revkey, u32 timestamp) { PACKET *pkt; PKT_signature *sig; int rc=0; KBNODE node; PKT_public_key *pk; if( opt.verbose ) log_info(_("writing direct 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; /* we have to cache the key, so that the verification of the signature * creation is able to retrieve the public key */ cache_public_key (pk); /* and make the signature */ rc = make_keysig_packet (&sig, pk, NULL, NULL, sk, 0x1F, 0, 0, timestamp, 0, keygen_add_revkey, revkey); if( rc ) { log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); return rc; } pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; add_kbnode( root, new_kbnode( pkt ) ); return rc; } static int write_selfsigs (KBNODE sec_root, KBNODE pub_root, PKT_secret_key *sk, unsigned int use, u32 timestamp) { 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( pub_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; pk->pubkey_usage = use; /* we have to cache the key, so that the verification of the signature * creation is able to retrieve the public key */ cache_public_key (pk); /* and make the signature */ rc = make_keysig_packet (&sig, pk, uid, NULL, sk, 0x13, 0, 0, timestamp, 0, keygen_add_std_prefs, pk); if( rc ) { log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); return rc; } pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = sig; add_kbnode( sec_root, new_kbnode( pkt ) ); pkt = xmalloc_clear( sizeof *pkt ); pkt->pkttype = PKT_SIGNATURE; pkt->pkt.signature = copy_signature(NULL,sig); add_kbnode( pub_root, new_kbnode( pkt ) ); return rc; } static int write_keybinding (KBNODE root, KBNODE pub_root, PKT_secret_key *pri_sk, PKT_secret_key *sub_sk, unsigned int use, u32 timestamp) { PACKET *pkt; PKT_signature *sig; int rc=0; KBNODE node; PKT_public_key *pri_pk, *sub_pk; struct opaque_data_usage_and_pk oduap; 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(); pri_pk = node->pkt->pkt.public_key; /* we have to cache the key, so that the verification of the signature * creation is able to retrieve the public key */ cache_public_key (pri_pk); /* find the last subkey */ sub_pk = NULL; for(node=pub_root; node; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) sub_pk = node->pkt->pkt.public_key; } if( !sub_pk ) BUG(); /* and make the signature */ oduap.usage = use; oduap.pk = sub_pk; rc=make_keysig_packet(&sig, pri_pk, NULL, sub_pk, pri_sk, 0x18, 0, 0, timestamp, 0, keygen_add_key_flags_and_expire, &oduap ); if( rc ) { log_error("make_keysig_packet failed: %s\n", g10_errstr(rc) ); return rc; } /* make a backsig */ if(use&PUBKEY_USAGE_SIG) { rc = make_backsig (sig, pri_pk, sub_pk, sub_sk, timestamp); if(rc) return rc; } pkt = xmalloc_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 timestamp, u32 expireval, int is_subkey) { int rc; PACKET *pkt; PKT_secret_key *sk; PKT_public_key *pk; MPI skey[4]; MPI *factors; assert( is_ELGAMAL(algo) ); if (nbits < 1024) { nbits = 2048; log_info(_("keysize invalid; using %u bits\n"), nbits ); } else if (nbits > 4096) { nbits = 4096; log_info(_("keysize invalid; using %u bits\n"), nbits ); } if( (nbits % 32) ) { nbits = ((nbits + 31) / 32) * 32; log_info(_("keysize rounded up to %u bits\n"), nbits ); } rc = pubkey_generate( algo, nbits, skey, &factors ); if( rc ) { log_error("pubkey_generate failed: %s\n", g10_errstr(rc) ); return rc; } sk = xmalloc_clear( sizeof *sk ); pk = xmalloc_clear( sizeof *pk ); sk->timestamp = pk->timestamp = timestamp; sk->version = pk->version = 4; 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( sk->skey[3] ); if( ret_sk ) /* 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 = xmalloc_clear(sizeof *pkt); pkt->pkttype = is_subkey ? PKT_PUBLIC_SUBKEY : PKT_PUBLIC_KEY; 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 = xmalloc_clear(sizeof *pkt); pkt->pkttype = is_subkey ? PKT_SECRET_SUBKEY : PKT_SECRET_KEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); return 0; } /**************** * Generate a DSA key */ static int gen_dsa(unsigned int nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 timestamp, u32 expireval, int is_subkey) { int rc; PACKET *pkt; PKT_secret_key *sk; PKT_public_key *pk; MPI skey[5]; MPI *factors; unsigned int qbits; if( nbits < 768) { nbits = 2048; log_info(_("keysize invalid; using %u bits\n"), nbits ); } else if(nbits>3072) { nbits = 3072; log_info(_("keysize invalid; using %u bits\n"), nbits ); } if(nbits % 64) { nbits = ((nbits + 63) / 64) * 64; log_info(_("keysize rounded up to %u bits\n"), nbits ); } /* To comply with FIPS rules we round up to the next value unless in expert mode. */ if (!opt.expert && nbits > 1024 && (nbits % 1024)) { nbits = ((nbits + 1023) / 1024) * 1024; log_info (_("keysize rounded up to %u bits\n"), nbits ); } /* Figure out a q size based on the key size. FIPS 180-3 says: L = 1024, N = 160 L = 2048, N = 224 L = 2048, N = 256 L = 3072, N = 256 2048/256 is an odd pair since there is also a 2048/224 and 3072/256. Matching sizes is not a very exact science. We'll do 256 qbits for nbits over 2047, 224 for nbits over 1024 but less than 2048, and 160 for 1024 (DSA1). */ if(nbits>2047) qbits=256; else if(nbits>1024) qbits=224; else qbits=160; if(qbits!=160) log_info("WARNING: some OpenPGP programs can't" " handle a DSA key with this digest size\n"); rc = dsa2_generate( PUBKEY_ALGO_DSA, nbits, qbits, skey, &factors ); if( rc ) { log_error("dsa2_generate failed: %s\n", g10_errstr(rc) ); return rc; } sk = xmalloc_clear( sizeof *sk ); pk = xmalloc_clear( sizeof *pk ); sk->timestamp = pk->timestamp = 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 ( sk->skey[4] ); if( ret_sk ) /* 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 = xmalloc_clear(sizeof *pkt); pkt->pkttype = is_subkey ? PKT_PUBLIC_SUBKEY : PKT_PUBLIC_KEY; 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 = xmalloc_clear(sizeof *pkt); pkt->pkttype = is_subkey ? PKT_SECRET_SUBKEY : PKT_SECRET_KEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); return 0; } /* * Generate an RSA key. */ static int gen_rsa(int algo, unsigned nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **ret_sk, u32 timestamp, u32 expireval, int is_subkey) { int rc; PACKET *pkt; PKT_secret_key *sk; PKT_public_key *pk; MPI skey[6]; MPI *factors; const unsigned maxsize = (opt.flags.large_rsa ? 8192 : 4096); assert( is_RSA(algo) ); if( nbits < 1024 ) { nbits = 2048; log_info(_("keysize invalid; using %u bits\n"), nbits ); } else if (nbits > maxsize) { nbits = maxsize; log_info(_("keysize invalid; using %u bits\n"), nbits ); } if( (nbits % 32) ) { nbits = ((nbits + 31) / 32) * 32; log_info(_("keysize rounded up to %u bits\n"), nbits ); } rc = pubkey_generate( algo, nbits, skey, &factors ); if( rc ) { log_error("pubkey_generate failed: %s\n", g10_errstr(rc) ); return rc; } sk = xmalloc_clear( sizeof *sk ); pk = xmalloc_clear( sizeof *pk ); sk->timestamp = pk->timestamp = timestamp; sk->version = pk->version = 4; 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] ); 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->skey[5] = skey[5]; sk->is_protected = 0; sk->protect.algo = 0; sk->csum = checksum_mpi (sk->skey[2] ); sk->csum += checksum_mpi (sk->skey[3] ); sk->csum += checksum_mpi (sk->skey[4] ); sk->csum += checksum_mpi (sk->skey[5] ); if( ret_sk ) /* 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 = xmalloc_clear(sizeof *pkt); pkt->pkttype = is_subkey ? PKT_PUBLIC_SUBKEY : PKT_PUBLIC_KEY; pkt->pkt.public_key = pk; add_kbnode(pub_root, new_kbnode( pkt )); pkt = xmalloc_clear(sizeof *pkt); pkt->pkttype = is_subkey ? PKT_SECRET_SUBKEY : PKT_SECRET_KEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); return 0; } /**************** * check valid days: * return 0 on error or the multiplier */ static int check_valid_days( const char *s ) { if( !digitp(s) ) return 0; for( s++; *s; s++) if( !digitp(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; } static void print_key_flags(int flags) { if(flags&PUBKEY_USAGE_SIG) tty_printf("%s ",_("Sign")); if(flags&PUBKEY_USAGE_CERT) tty_printf("%s ",_("Certify")); if(flags&PUBKEY_USAGE_ENC) tty_printf("%s ",_("Encrypt")); if(flags&PUBKEY_USAGE_AUTH) tty_printf("%s ",_("Authenticate")); } /* Returns the key flags */ static unsigned int ask_key_flags(int algo,int subkey) { /* TRANSLATORS: Please use only plain ASCII characters for the translation. If this is not possible use single digits. Here is a description of the fucntions: s = Toggle signing capability e = Toggle encryption capability a = Toggle authentication capability q = Finish */ const char *togglers=_("SsEeAaQq"); char *answer=NULL; unsigned int current=0; unsigned int possible=openpgp_pk_algo_usage(algo); if ( strlen(togglers) != 8 ) { tty_printf ("NOTE: Bad translation at %s:%d. " "Please report.\n", __FILE__, __LINE__); togglers = "11223300"; } /* Only primary keys may certify. */ if(subkey) possible&=~PUBKEY_USAGE_CERT; /* Preload the current set with the possible set, minus authentication, since nobody really uses auth yet. */ current=possible&~PUBKEY_USAGE_AUTH; for(;;) { tty_printf("\n"); tty_printf(_("Possible actions for a %s key: "), pubkey_algo_to_string(algo)); print_key_flags(possible); tty_printf("\n"); tty_printf(_("Current allowed actions: ")); print_key_flags(current); tty_printf("\n\n"); if(possible&PUBKEY_USAGE_SIG) tty_printf(_(" (%c) Toggle the sign capability\n"), togglers[0]); if(possible&PUBKEY_USAGE_ENC) tty_printf(_(" (%c) Toggle the encrypt capability\n"), togglers[2]); if(possible&PUBKEY_USAGE_AUTH) tty_printf(_(" (%c) Toggle the authenticate capability\n"), togglers[4]); tty_printf(_(" (%c) Finished\n"),togglers[6]); tty_printf("\n"); xfree(answer); answer = cpr_get("keygen.flags",_("Your selection? ")); cpr_kill_prompt(); if(strlen(answer)>1) tty_printf(_("Invalid selection.\n")); else if(*answer=='\0' || *answer==togglers[6] || *answer==togglers[7]) break; else if((*answer==togglers[0] || *answer==togglers[1]) && possible&PUBKEY_USAGE_SIG) { if(current&PUBKEY_USAGE_SIG) current&=~PUBKEY_USAGE_SIG; else current|=PUBKEY_USAGE_SIG; } else if((*answer==togglers[2] || *answer==togglers[3]) && possible&PUBKEY_USAGE_ENC) { if(current&PUBKEY_USAGE_ENC) current&=~PUBKEY_USAGE_ENC; else current|=PUBKEY_USAGE_ENC; } else if((*answer==togglers[4] || *answer==togglers[5]) && possible&PUBKEY_USAGE_AUTH) { if(current&PUBKEY_USAGE_AUTH) current&=~PUBKEY_USAGE_AUTH; else current|=PUBKEY_USAGE_AUTH; } else tty_printf(_("Invalid selection.\n")); } xfree(answer); return current; } /* Ask for an algorithm. The function returns the algorithm id to create. If ADDMODE is false the function won't show an option to create the primary and subkey combined and won't set R_USAGE either. If a combined algorithm has been selected, the subkey algorithm is stored at R_SUBKEY_ALGO. */ static int ask_algo (int addmode, int *r_subkey_algo, unsigned int *r_usage) { char *answer = NULL; int algo; int dummy_algo; if (!r_subkey_algo) r_subkey_algo = &dummy_algo; tty_printf(_("Please select what kind of key you want:\n")); if (!addmode) tty_printf (_(" (%d) RSA and RSA (default)\n"), 1 ); if ( !addmode ) tty_printf (_(" (%d) DSA and Elgamal\n"), 2 ); tty_printf( _(" (%d) DSA (sign only)\n"), 3 ); tty_printf( _(" (%d) RSA (sign only)\n"), 4 ); if (addmode) { tty_printf (_(" (%d) Elgamal (encrypt only)\n"), 5 ); tty_printf (_(" (%d) RSA (encrypt only)\n"), 6 ); } if (opt.expert) { tty_printf (_(" (%d) DSA (set your own capabilities)\n"), 7 ); tty_printf (_(" (%d) RSA (set your own capabilities)\n"), 8 ); } for (;;) { *r_usage = 0; *r_subkey_algo = 0; xfree (answer); answer = cpr_get ("keygen.algo", _("Your selection? ")); cpr_kill_prompt (); algo = *answer? atoi (answer) : 1; if ((algo == 1 || !strcmp (answer, "rsa+rsa")) && !addmode) { algo = PUBKEY_ALGO_RSA; *r_subkey_algo = PUBKEY_ALGO_RSA; break; } else if ((algo == 2 || !strcmp (answer, "dsa+elg")) && !addmode) { algo = PUBKEY_ALGO_DSA; *r_subkey_algo = PUBKEY_ALGO_ELGAMAL_E; break; } else if (algo == 3 || !strcmp (answer, "dsa")) { algo = PUBKEY_ALGO_DSA; *r_usage = PUBKEY_USAGE_SIG; break; } else if (algo == 4 || !strcmp (answer, "rsa/s")) { algo = PUBKEY_ALGO_RSA; *r_usage = PUBKEY_USAGE_SIG; break; } else if ((algo == 5 || !strcmp (answer, "elg")) && addmode) { algo = PUBKEY_ALGO_ELGAMAL_E; *r_usage = PUBKEY_USAGE_ENC; break; } else if ((algo == 6 || !strcmp (answer, "rsa/e")) && addmode) { algo = PUBKEY_ALGO_RSA; *r_usage = PUBKEY_USAGE_ENC; break; } else if ((algo == 7 || !strcmp (answer, "dsa/*")) && opt.expert) { algo = PUBKEY_ALGO_DSA; *r_usage = ask_key_flags (algo, addmode); break; } else if ((algo == 8 || !strcmp (answer, "rsa/*")) && opt.expert) { algo = PUBKEY_ALGO_RSA; *r_usage = ask_key_flags (algo, addmode); break; } else tty_printf (_("Invalid selection.\n")); } xfree(answer); return algo; } /* Ask for the key size. ALGO is the algorithm. If PRIMARY_KEYSIZE is not 0, the function asks for the size of the encryption subkey. */ static unsigned int ask_keysize (int algo, unsigned int primary_keysize) { unsigned nbits, min, def=2048, max=4096; int for_subkey = !!primary_keysize; int autocomp = 0; if(opt.expert) min=512; else min=1024; if (primary_keysize && !opt.expert) { /* Deduce the subkey size from the primary key size. */ if (algo == PUBKEY_ALGO_DSA && primary_keysize > 3072) nbits = 3072; /* For performance reasons we don't support more than 3072 bit DSA. However we won't see this case anyway because DSA can't be used as an encryption subkey ;-). */ else nbits = primary_keysize; autocomp = 1; goto leave; } switch(algo) { case PUBKEY_ALGO_DSA: def=2048; max=3072; break; case PUBKEY_ALGO_RSA: min=1024; break; } tty_printf(_("%s keys may be between %u and %u bits long.\n"), pubkey_algo_to_string(algo),min,max); for(;;) { char *prompt,*answer; if (for_subkey) prompt = xasprintf (_("What keysize do you want " "for the subkey? (%u) "), def); else prompt = xasprintf (_("What keysize do you want? (%u) "), def); answer = cpr_get("keygen.size",prompt); cpr_kill_prompt(); nbits = *answer? atoi(answer): def; xfree(prompt); xfree(answer); if(nbitsmax) tty_printf(_("%s keysizes must be in the range %u-%u\n"), pubkey_algo_to_string(algo),min,max); else break; } tty_printf(_("Requested keysize is %u bits\n"), nbits ); leave: if( algo == PUBKEY_ALGO_DSA && (nbits % 64) ) { nbits = ((nbits + 63) / 64) * 64; if (!autocomp) tty_printf (_("rounded up to %u bits\n"), nbits); } else if( (nbits % 32) ) { nbits = ((nbits + 31) / 32) * 32; if (!autocomp) tty_printf (_("rounded up to %u bits\n"), nbits); } return nbits; } /**************** * Parse an expire string and return its value in seconds. * Returns (u32)-1 on error. * This isn't perfect since scan_isodatestr returns unix time, and * OpenPGP actually allows a 32-bit time *plus* a 32-bit offset. * Because of this, we only permit setting expirations up to 2106, but * OpenPGP could theoretically allow up to 2242. I think we'll all * just cope for the next few years until we get a 64-bit time_t or * similar. */ u32 parse_expire_string (u32 timestamp, const char *string) { int mult; u32 seconds; u32 abs_date = 0; if ( !*string ) seconds = 0; else if ( !strncmp (string, "seconds=", 8) ) seconds = atoi (string+8); else if( (abs_date = scan_isodatestr(string)) && abs_date > timestamp ) seconds = abs_date - timestamp; else if( (mult=check_valid_days(string)) ) seconds = atoi(string) * 86400L * mult; else seconds=(u32)-1; return seconds; } /* Parse an Creation-Date string which is either "1986-04-26" or "19860426T042640". Returns 0 on error. */ static u32 parse_creation_string (const char *string) { u32 seconds; if (!*string) seconds = 0; else if ( !strncmp (string, "seconds=", 8) ) seconds = atoi (string+8); else if ( !(seconds = scan_isodatestr (string))) seconds = isotime2seconds (string); return seconds; } /* object == 0 for a key, and 1 for a sig */ u32 ask_expire_interval(u32 timestamp,int object,const char *def_expire) { u32 interval; char *answer; switch(object) { case 0: if(def_expire) BUG(); 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")); break; case 1: if(!def_expire) BUG(); tty_printf(_("Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n")); break; default: BUG(); } /* 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(;;) { xfree(answer); if(object==0) answer = cpr_get("keygen.valid",_("Key is valid for? (0) ")); else { char *prompt; #define PROMPTSTRING _("Signature is valid for? (%s) ") /* This will actually end up larger than necessary because of the 2 bytes for '%s' */ prompt=xmalloc(strlen(PROMPTSTRING)+strlen(def_expire)+1); sprintf(prompt,PROMPTSTRING,def_expire); #undef PROMPTSTRING answer = cpr_get("siggen.valid",prompt); xfree(prompt); if(*answer=='\0') answer=xstrdup(def_expire); } cpr_kill_prompt(); trim_spaces(answer); interval = parse_expire_string (timestamp, answer); if( interval == (u32)-1 ) { tty_printf(_("invalid value\n")); continue; } if( !interval ) { tty_printf((object==0) ? _("Key does not expire at all\n") : _("Signature does not expire at all\n")); } else { tty_printf(object==0 ? _("Key expires at %s\n") : _("Signature expires at %s\n"), asctimestamp((ulong)(timestamp + interval) ) ); #if SIZEOF_TIME_T <= 4 && !defined(HAVE_UNSIGNED_TIME_T) if ((time_t)((ulong)(timestamp+interval)) < 0 ) tty_printf (_("Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to" " 2106.\n")); else #endif /*SIZEOF_TIME_T*/ if ( (time_t)((unsigned long)(timestamp+interval)) < timestamp ) { tty_printf (_("invalid value\n")); continue; } } if( cpr_enabled() || cpr_get_answer_is_yes("keygen.valid.okay", _("Is this correct? (y/N) ")) ) break; } xfree(answer); return interval; } 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 the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n\n") ); uid = aname = acomment = amail = NULL; for(;;) { char *p; int fail=0; if( !aname ) { for(;;) { xfree(aname); aname = cpr_get("keygen.name",_("Real name: ")); trim_spaces(aname); cpr_kill_prompt(); if( opt.allow_freeform_uid ) break; if( strpbrk( aname, "<>" ) ) tty_printf(_("Invalid character in name\n")); else if( digitp(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(;;) { xfree(amail); amail = cpr_get("keygen.email",_("Email address: ")); trim_spaces(amail); cpr_kill_prompt(); if( !*amail || opt.allow_freeform_uid ) break; /* no email address is okay */ else if ( !is_valid_mailbox (amail) ) tty_printf(_("Not a valid email address\n")); else break; } } if( !acomment ) { for(;;) { xfree(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; } } xfree(uid); uid = p = xmalloc(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 */ if( !*amail && !opt.allow_freeform_uid && (strchr( aname, '@' ) || strchr( acomment, '@'))) { fail = 1; tty_printf(_("Please don't put the email address " "into the real name or the comment\n") ); } for(;;) { /* TRANSLATORS: These are the allowed answers in lower and uppercase. Below you will find the matching string which should be translated accordingly and the letter changed to match the one in the answer string. n = Change name c = Change comment e = Change email o = Okay (ready, continue) q = Quit */ const char *ansstr = _("NnCcEeOoQq"); if( strlen(ansstr) != 10 ) BUG(); if( cpr_enabled() ) { answer = xstrdup (ansstr + (fail?8:6)); answer[1] = 0; } else { answer = cpr_get("keygen.userid.cmd", fail? _("Change (N)ame, (C)omment, (E)mail or (Q)uit? ") : _("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] ) { xfree(aname); aname = NULL; break; } else if( *answer == ansstr[2] || *answer == ansstr[3] ) { xfree(acomment); acomment = NULL; break; } else if( *answer == ansstr[4] || *answer == ansstr[5] ) { xfree(amail); amail = NULL; break; } else if( *answer == ansstr[6] || *answer == ansstr[7] ) { if( fail ) { tty_printf(_("Please correct the error first\n")); } else { xfree(aname); aname = NULL; xfree(acomment); acomment = NULL; xfree(amail); amail = NULL; break; } } else if( *answer == ansstr[8] || *answer == ansstr[9] ) { xfree(aname); aname = NULL; xfree(acomment); acomment = NULL; xfree(amail); amail = NULL; xfree(uid); uid = NULL; break; } xfree(answer); } xfree(answer); if( !aname && !acomment && !amail ) break; xfree(uid); uid = NULL; } if( uid ) { char *p = native_to_utf8( uid ); xfree( uid ); uid = p; } return uid; } /* FIXME: We need a way to cancel this prompt. */ static DEK * do_ask_passphrase( STRING2KEY **ret_s2k ) { DEK *dek = NULL; STRING2KEY *s2k; const char *errtext = NULL; tty_printf(_("You need a Passphrase to protect your secret key.\n\n") ); s2k = xmalloc_secure( sizeof *s2k ); for(;;) { s2k->mode = opt.s2k_mode; s2k->hash_algo = S2K_DIGEST_ALGO; dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k,2, errtext, NULL); if( !dek ) { errtext = N_("passphrase not correctly repeated; try again"); tty_printf(_("%s.\n"), _(errtext)); } else if( !dek->keylen ) { xfree(dek); dek = NULL; xfree(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 int nbits, KBNODE pub_root, KBNODE sec_root, DEK *dek, STRING2KEY *s2k, PKT_secret_key **sk, u32 timestamp, u32 expiredate, int is_subkey ) { int rc=0; if( !opt.batch ) 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_E ) rc = gen_elg(algo, nbits, pub_root, sec_root, dek, s2k, sk, timestamp, expiredate, is_subkey); else if( algo == PUBKEY_ALGO_DSA ) rc = gen_dsa(nbits, pub_root, sec_root, dek, s2k, sk, timestamp, expiredate, is_subkey); else if( algo == PUBKEY_ALGO_RSA ) rc = gen_rsa(algo, nbits, pub_root, sec_root, dek, s2k, sk, timestamp, expiredate, is_subkey); else BUG(); 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 = xmalloc_clear( sizeof *uid + n ); uid->len = n; strcpy(uid->name, p); uid->ref = 1; return uid; } static void release_parameter_list( struct para_data_s *r ) { struct para_data_s *r2; for( ; r ; r = r2 ) { r2 = r->next; if( r->key == pPASSPHRASE_DEK ) xfree( r->u.dek ); else if( r->key == pPASSPHRASE_S2K ) xfree( r->u.s2k ); xfree(r); } } static struct para_data_s * get_parameter( struct para_data_s *para, enum para_name key ) { struct para_data_s *r; for( r = para; r && r->key != key; r = r->next ) ; return r; } static const char * get_parameter_value( struct para_data_s *para, enum para_name key ) { struct para_data_s *r = get_parameter( para, key ); return (r && *r->u.value)? r->u.value : NULL; } static int get_parameter_algo( struct para_data_s *para, enum para_name key ) { int i; struct para_data_s *r = get_parameter( para, key ); if( !r ) return -1; if( digitp( r->u.value ) ) i = atoi( r->u.value ); else i = string_to_pubkey_algo( r->u.value ); if (i == PUBKEY_ALGO_RSA_E || i == PUBKEY_ALGO_RSA_S) i = 0; /* we don't want to allow generation of these algorithms */ return i; } /* * parse the usage parameter and set the keyflags. Return true on error. */ static int parse_parameter_usage (const char *fname, struct para_data_s *para, enum para_name key) { struct para_data_s *r = get_parameter( para, key ); char *p, *pn; unsigned int use; if( !r ) return 0; /* none (this is an optional parameter)*/ use = 0; pn = r->u.value; while ( (p = strsep (&pn, " \t,")) ) { if ( !*p) ; else if ( !ascii_strcasecmp (p, "sign") ) use |= PUBKEY_USAGE_SIG; else if ( !ascii_strcasecmp (p, "encrypt") ) use |= PUBKEY_USAGE_ENC; else if ( !ascii_strcasecmp (p, "auth") ) use |= PUBKEY_USAGE_AUTH; else { log_error("%s:%d: invalid usage list\n", fname, r->lnr ); return -1; /* error */ } } r->u.usage = use; return 1; } static int parse_revocation_key (const char *fname, struct para_data_s *para, enum para_name key) { struct para_data_s *r = get_parameter( para, key ); struct revocation_key revkey; char *pn; int i; if( !r ) return 0; /* none (this is an optional parameter) */ pn = r->u.value; revkey.class=0x80; revkey.algid=atoi(pn); if(!revkey.algid) goto fail; /* Skip to the fpr */ while(*pn && *pn!=':') pn++; if(*pn!=':') goto fail; pn++; for(i=0;iu.revkey,&revkey,sizeof(struct revocation_key)); return 0; fail: log_error("%s:%d: invalid revocation key\n", fname, r->lnr ); return -1; /* error */ } static u32 get_parameter_u32( struct para_data_s *para, enum para_name key ) { struct para_data_s *r; r = get_parameter (para, key); if (!r && key == pKEYCREATIONDATE) { /* Return a default for the creation date if it has not yet been set. We need to set this into the parameter list so that a second call for pKEYCREATIONDATE returns the same value. The default is the current time unless an explicit creation date has been specified. Checking the creation date here is only for the case that it has not yet been parsed. */ r = get_parameter (para, pCREATIONDATE); if (r && *r->u.value) { u32 seconds; seconds = parse_creation_string (r->u.value); if (!seconds) log_error ("invalid creation date in line %d\n", r->lnr ); else /* Okay: Change this parameter. */ { r->u.creation = seconds; r->key = pKEYCREATIONDATE; } } r = get_parameter (para, key); if (!r) { /* Create a new parameter. */ r = xmalloc_clear (sizeof *r); r->key = key; r->u.creation = make_timestamp (); r->next = para; para = r; } r = get_parameter (para, key); assert (r); } if (!r) return 0; if( r->key == pKEYCREATIONDATE ) return r->u.creation; if( r->key == pKEYEXPIRE || r->key == pSUBKEYEXPIRE ) return r->u.expire; if( r->key == pKEYUSAGE || r->key == pSUBKEYUSAGE ) return r->u.usage; return (unsigned int)strtoul( r->u.value, NULL, 10 ); } static unsigned int get_parameter_uint( struct para_data_s *para, enum para_name key ) { return get_parameter_u32( para, key ); } static DEK * get_parameter_dek( struct para_data_s *para, enum para_name key ) { struct para_data_s *r = get_parameter( para, key ); return r? r->u.dek : NULL; } static STRING2KEY * get_parameter_s2k( struct para_data_s *para, enum para_name key ) { struct para_data_s *r = get_parameter( para, key ); return r? r->u.s2k : NULL; } static struct revocation_key * get_parameter_revkey( struct para_data_s *para, enum para_name key ) { struct para_data_s *r = get_parameter( para, key ); return r? &r->u.revkey : NULL; } static int proc_parameter_file( struct para_data_s *para, const char *fname, struct output_control_s *outctrl, int card ) { struct para_data_s *r; const char *s1, *s2, *s3; size_t n; char *p; int have_user_id=0,err,algo; /* Check that we have all required parameters. */ r = get_parameter( para, pKEYTYPE ); if(r) { algo=get_parameter_algo(para,pKEYTYPE); if(check_pubkey_algo2(algo,PUBKEY_USAGE_SIG)) { log_error("%s:%d: invalid algorithm\n", fname, r->lnr ); return -1; } } else { log_error("%s: no Key-Type specified\n",fname); return -1; } err = parse_parameter_usage (fname, para, pKEYUSAGE); if (!err) { /* Default to algo capabilities if key-usage is not provided */ r = xmalloc_clear(sizeof(*r)); r->key = pKEYUSAGE; r->u.usage = openpgp_pk_algo_usage(algo); r->next = para; para = r; } else if (err == -1) return -1; else { r = get_parameter (para, pKEYUSAGE); if (r && (r->u.usage & ~openpgp_pk_algo_usage (algo))) { log_error ("%s:%d: specified Key-Usage not allowed for algo %d\n", fname, r->lnr, algo); return -1; } } r = get_parameter( para, pSUBKEYTYPE ); if(r) { algo = get_parameter_algo (para, pSUBKEYTYPE); if (check_pubkey_algo (algo)) { log_error ("%s:%d: invalid algorithm\n", fname, r->lnr ); return -1; } err = parse_parameter_usage (fname, para, pSUBKEYUSAGE); if (!err) { /* Default to algo capabilities if subkey-usage is not provided */ r = xmalloc_clear (sizeof(*r)); r->key = pSUBKEYUSAGE; r->u.usage = openpgp_pk_algo_usage (algo); r->next = para; para = r; } else if (err == -1) return -1; else { r = get_parameter (para, pSUBKEYUSAGE); if (r && (r->u.usage & ~openpgp_pk_algo_usage (algo))) { log_error ("%s:%d: specified Subkey-Usage not allowed" " for algo %d\n", fname, r->lnr, algo); return -1; } } } if( get_parameter_value( para, pUSERID ) ) have_user_id=1; else { /* create the formatted user ID */ s1 = get_parameter_value( para, pNAMEREAL ); s2 = get_parameter_value( para, pNAMECOMMENT ); s3 = get_parameter_value( para, pNAMEEMAIL ); if( s1 || s2 || s3 ) { n = (s1?strlen(s1):0) + (s2?strlen(s2):0) + (s3?strlen(s3):0); r = xmalloc_clear( sizeof *r + n + 20 ); r->key = pUSERID; p = r->u.value; if( s1 ) p = stpcpy(p, s1 ); if( s2 ) p = stpcpy(stpcpy(stpcpy(p," ("), s2 ),")"); if( s3 ) p = stpcpy(stpcpy(stpcpy(p," <"), s3 ),">"); r->next = para; para = r; have_user_id=1; } } if(!have_user_id) { log_error("%s: no User-ID specified\n",fname); return -1; } /* Set preferences, if any. */ keygen_set_std_prefs(get_parameter_value( para, pPREFERENCES ), 0); /* Set keyserver, if any. */ s1=get_parameter_value( para, pKEYSERVER ); if(s1) { struct keyserver_spec *spec; spec=parse_keyserver_uri(s1,1,NULL,0); if(spec) { free_keyserver_spec(spec); opt.def_keyserver_url=s1; } else { log_error("%s:%d: invalid keyserver url\n", fname, r->lnr ); return -1; } } /* Set revoker, if any. */ if (parse_revocation_key (fname, para, pREVOKER)) return -1; /* make DEK and S2K from the Passphrase */ r = get_parameter( para, pPASSPHRASE ); if( r && *r->u.value ) { /* We have a plain text passphrase - create a DEK from it. * It is a little bit ridiculous to keep it in secure memory * but because we do this alwasy, why not here. */ STRING2KEY *s2k; DEK *dek; s2k = xmalloc_secure( sizeof *s2k ); s2k->mode = opt.s2k_mode; s2k->hash_algo = S2K_DIGEST_ALGO; set_next_passphrase( r->u.value ); dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2, NULL, NULL); set_next_passphrase( NULL ); assert( dek ); memset( r->u.value, 0, strlen(r->u.value) ); r = xmalloc_clear( sizeof *r ); r->key = pPASSPHRASE_S2K; r->u.s2k = s2k; r->next = para; para = r; r = xmalloc_clear( sizeof *r ); r->key = pPASSPHRASE_DEK; r->u.dek = dek; r->next = para; para = r; } /* Make KEYCREATIONDATE from Creation-Date. */ r = get_parameter (para, pCREATIONDATE); if (r && *r->u.value) { u32 seconds; seconds = parse_creation_string (r->u.value); if (!seconds) { log_error ("%s:%d: invalid creation date\n", fname, r->lnr ); return -1; } r->u.creation = seconds; r->key = pKEYCREATIONDATE; /* Change that entry. */ } /* Make KEYEXPIRE from Expire-Date. */ r = get_parameter( para, pEXPIREDATE ); if( r && *r->u.value ) { u32 seconds; seconds = parse_expire_string (get_parameter_u32 (para, pKEYCREATIONDATE), r->u.value); if (seconds == (u32)(-1)) { log_error("%s:%d: invalid expire date\n", fname, r->lnr ); return -1; } r->u.expire = seconds; r->key = pKEYEXPIRE; /* change hat entry */ /* also set it for the subkey */ r = xmalloc_clear( sizeof *r + 20 ); r->key = pSUBKEYEXPIRE; r->u.expire = seconds; r->next = para; para = r; } if( !!outctrl->pub.newfname ^ !!outctrl->sec.newfname ) { log_error("%s:%d: only one ring name is set\n", fname, outctrl->lnr ); return -1; } do_generate_keypair (para, outctrl, card); return 0; } /**************** * Kludge to allow non interactive key generation controlled * by a parameter file. * Note, that string parameters are expected to be in UTF-8 */ static void read_parameter_file( const char *fname ) { static struct { const char *name; enum para_name key; } keywords[] = { { "Key-Type", pKEYTYPE}, { "Key-Length", pKEYLENGTH }, { "Key-Usage", pKEYUSAGE }, { "Subkey-Type", pSUBKEYTYPE }, { "Subkey-Length", pSUBKEYLENGTH }, { "Subkey-Usage", pSUBKEYUSAGE }, { "Name-Real", pNAMEREAL }, { "Name-Email", pNAMEEMAIL }, { "Name-Comment", pNAMECOMMENT }, { "Expire-Date", pEXPIREDATE }, { "Creation-Date", pCREATIONDATE }, { "Passphrase", pPASSPHRASE }, { "Preferences", pPREFERENCES }, { "Revoker", pREVOKER }, { "Handle", pHANDLE }, { "Keyserver", pKEYSERVER }, { NULL, 0 } }; IOBUF fp; byte *line; unsigned int maxlen, nline; char *p; int lnr; const char *err = NULL; struct para_data_s *para, *r; int i; struct output_control_s outctrl; memset( &outctrl, 0, sizeof( outctrl ) ); if( !fname || !*fname) fname = "-"; fp = iobuf_open (fname); if (fp && is_secured_file (iobuf_get_fd (fp))) { iobuf_close (fp); fp = NULL; errno = EPERM; } if (!fp) { log_error (_("can't open `%s': %s\n"), fname, strerror(errno) ); return; } iobuf_ioctl (fp, 3, 1, NULL); /* No file caching. */ lnr = 0; err = NULL; para = NULL; maxlen = 1024; line = NULL; while ( iobuf_read_line (fp, &line, &nline, &maxlen) ) { char *keyword, *value; lnr++; if( !maxlen ) { err = "line too long"; break; } for( p = line; isspace(*(byte*)p); p++ ) ; if( !*p || *p == '#' ) continue; keyword = p; if( *keyword == '%' ) { for( ; !isspace(*(byte*)p); p++ ) ; if( *p ) *p++ = 0; for( ; isspace(*(byte*)p); p++ ) ; value = p; trim_trailing_ws( value, strlen(value) ); if( !ascii_strcasecmp( keyword, "%echo" ) ) log_info("%s\n", value ); else if( !ascii_strcasecmp( keyword, "%dry-run" ) ) outctrl.dryrun = 1; else if( !ascii_strcasecmp( keyword, "%commit" ) ) { outctrl.lnr = lnr; if (proc_parameter_file( para, fname, &outctrl, 0 )) print_status_key_not_created (get_parameter_value (para, pHANDLE)); release_parameter_list( para ); para = NULL; } else if( !ascii_strcasecmp( keyword, "%pubring" ) ) { if( outctrl.pub.fname && !strcmp( outctrl.pub.fname, value ) ) ; /* still the same file - ignore it */ else { xfree( outctrl.pub.newfname ); outctrl.pub.newfname = xstrdup( value ); outctrl.use_files = 1; } } else if( !ascii_strcasecmp( keyword, "%secring" ) ) { if( outctrl.sec.fname && !strcmp( outctrl.sec.fname, value ) ) ; /* still the same file - ignore it */ else { xfree( outctrl.sec.newfname ); outctrl.sec.newfname = xstrdup( value ); outctrl.use_files = 1; } } else log_info("skipping control `%s' (%s)\n", keyword, value ); continue; } if( !(p = strchr( p, ':' )) || p == keyword ) { err = "missing colon"; break; } if( *p ) *p++ = 0; for( ; isspace(*(byte*)p); p++ ) ; if( !*p ) { err = "missing argument"; break; } value = p; trim_trailing_ws( value, strlen(value) ); for(i=0; keywords[i].name; i++ ) { if( !ascii_strcasecmp( keywords[i].name, keyword ) ) break; } if( !keywords[i].name ) { err = "unknown keyword"; break; } if( keywords[i].key != pKEYTYPE && !para ) { err = "parameter block does not start with \"Key-Type\""; break; } if( keywords[i].key == pKEYTYPE && para ) { outctrl.lnr = lnr; if (proc_parameter_file( para, fname, &outctrl, 0 )) print_status_key_not_created (get_parameter_value (para, pHANDLE)); release_parameter_list( para ); para = NULL; } else { for( r = para; r; r = r->next ) { if( r->key == keywords[i].key ) break; } if( r ) { err = "duplicate keyword"; break; } } r = xmalloc_clear( sizeof *r + strlen( value ) ); r->lnr = lnr; r->key = keywords[i].key; strcpy( r->u.value, value ); r->next = para; para = r; } if( err ) log_error("%s:%d: %s\n", fname, lnr, err ); else if( iobuf_error (fp) ) { log_error("%s:%d: read error\n", fname, lnr); } else if( para ) { outctrl.lnr = lnr; if (proc_parameter_file( para, fname, &outctrl, 0 )) print_status_key_not_created (get_parameter_value (para, pHANDLE)); } if( outctrl.use_files ) { /* close open streams */ iobuf_close( outctrl.pub.stream ); iobuf_close( outctrl.sec.stream ); /* Must invalidate that ugly cache to actually close it. */ if (outctrl.pub.fname) iobuf_ioctl (NULL, 2, 0, (char*)outctrl.pub.fname); if (outctrl.sec.fname) iobuf_ioctl (NULL, 2, 0, (char*)outctrl.sec.fname); xfree( outctrl.pub.fname ); xfree( outctrl.pub.newfname ); xfree( outctrl.sec.fname ); xfree( outctrl.sec.newfname ); } release_parameter_list( para ); iobuf_close (fp); } /* * Generate a keypair (fname is only used in batch mode) If * CARD_SERIALNO is not NULL the fucntion will create the keys on an * OpenPGP Card. If BACKUP_ENCRYPTION_DIR has been set and * CARD_SERIALNO is NOT NULL, the encryption key for the card gets * generate in software, imported to the card and a backup file * written to directory given by this argument . */ void generate_keypair (const char *fname, const char *card_serialno, const char *backup_encryption_dir) { unsigned int nbits; char *uid = NULL; DEK *dek; STRING2KEY *s2k; int algo; unsigned int use; int both = 0; u32 expire; struct para_data_s *para = NULL; struct para_data_s *r; struct output_control_s outctrl; memset( &outctrl, 0, sizeof( outctrl ) ); if (opt.batch && card_serialno) { /* We don't yet support unattended key generation. */ log_error (_("can't do this in batch mode\n")); return; } if (opt.batch) { read_parameter_file( fname ); return; } if (card_serialno) { #ifdef ENABLE_CARD_SUPPORT r = xcalloc (1, sizeof *r + strlen (card_serialno) ); r->key = pSERIALNO; strcpy( r->u.value, card_serialno); r->next = para; para = r; algo = PUBKEY_ALGO_RSA; r = xcalloc (1, sizeof *r + 20 ); r->key = pKEYTYPE; sprintf( r->u.value, "%d", algo ); r->next = para; para = r; r = xcalloc (1, sizeof *r + 20 ); r->key = pKEYUSAGE; strcpy (r->u.value, "sign"); r->next = para; para = r; r = xcalloc (1, sizeof *r + 20 ); r->key = pSUBKEYTYPE; sprintf( r->u.value, "%d", algo ); r->next = para; para = r; r = xcalloc (1, sizeof *r + 20 ); r->key = pSUBKEYUSAGE; strcpy (r->u.value, "encrypt"); r->next = para; para = r; r = xcalloc (1, sizeof *r + 20 ); r->key = pAUTHKEYTYPE; sprintf( r->u.value, "%d", algo ); r->next = para; para = r; if (backup_encryption_dir) { r = xcalloc (1, sizeof *r + strlen (backup_encryption_dir) ); r->key = pBACKUPENCDIR; strcpy (r->u.value, backup_encryption_dir); r->next = para; para = r; } #endif /*ENABLE_CARD_SUPPORT*/ } else { int subkey_algo; algo = ask_algo (0, &subkey_algo, &use ); if (subkey_algo) { /* Create primary and subkey at once. */ both = 1; r = xmalloc_clear( sizeof *r + 20 ); r->key = pKEYTYPE; sprintf (r->u.value, "%d", algo); r->next = para; para = r; nbits = ask_keysize (algo, 0); r = xmalloc_clear( sizeof *r + 20 ); r->key = pKEYLENGTH; sprintf( r->u.value, "%u", nbits); r->next = para; para = r; r = xmalloc_clear( sizeof *r + 20 ); r->key = pKEYUSAGE; strcpy( r->u.value, "sign" ); r->next = para; para = r; r = xmalloc_clear( sizeof *r + 20 ); r->key = pSUBKEYTYPE; sprintf( r->u.value, "%d", subkey_algo ); r->next = para; para = r; r = xmalloc_clear( sizeof *r + 20 ); r->key = pSUBKEYUSAGE; strcpy( r->u.value, "encrypt" ); r->next = para; para = r; } else { r = xmalloc_clear( sizeof *r + 20 ); r->key = pKEYTYPE; sprintf( r->u.value, "%d", algo ); r->next = para; para = r; if (use) { r = xmalloc_clear( sizeof *r + 25 ); r->key = pKEYUSAGE; sprintf( r->u.value, "%s%s%s", (use & PUBKEY_USAGE_SIG)? "sign ":"", (use & PUBKEY_USAGE_ENC)? "encrypt ":"", (use & PUBKEY_USAGE_AUTH)? "auth":"" ); r->next = para; para = r; } nbits = 0; } nbits = ask_keysize (both? subkey_algo : algo, nbits); r = xmalloc_clear( sizeof *r + 20 ); r->key = both? pSUBKEYLENGTH : pKEYLENGTH; sprintf( r->u.value, "%u", nbits); r->next = para; para = r; } expire = ask_expire_interval (get_parameter_u32 (para, pKEYCREATIONDATE), 0, NULL); r = xmalloc_clear( sizeof *r + 20 ); r->key = pKEYEXPIRE; r->u.expire = expire; r->next = para; para = r; r = xmalloc_clear( sizeof *r + 20 ); r->key = pSUBKEYEXPIRE; r->u.expire = expire; r->next = para; para = r; uid = ask_user_id(0); if( !uid ) { log_error(_("Key generation canceled.\n")); release_parameter_list( para ); return; } r = xmalloc_clear( sizeof *r + strlen(uid) ); r->key = pUSERID; strcpy( r->u.value, uid ); r->next = para; para = r; dek = card_serialno? NULL : do_ask_passphrase( &s2k ); if( dek ) { r = xmalloc_clear( sizeof *r ); r->key = pPASSPHRASE_DEK; r->u.dek = dek; r->next = para; para = r; r = xmalloc_clear( sizeof *r ); r->key = pPASSPHRASE_S2K; r->u.s2k = s2k; r->next = para; para = r; } proc_parameter_file( para, "[internal]", &outctrl, !!card_serialno); release_parameter_list( para ); } #ifdef ENABLE_CARD_SUPPORT /* Generate a raw key and return it as a secret key packet. The function will ask for the passphrase and return a protected as well as an unprotected copy of a new secret key packet. 0 is returned on success and the caller must then free the returned values. */ static int generate_raw_key (int algo, unsigned int nbits, u32 created_at, PKT_secret_key **r_sk_unprotected, PKT_secret_key **r_sk_protected) { int rc; DEK *dek = NULL; STRING2KEY *s2k = NULL; PKT_secret_key *sk = NULL; int i; size_t nskey, npkey; npkey = pubkey_get_npkey (algo); nskey = pubkey_get_nskey (algo); assert (nskey <= PUBKEY_MAX_NSKEY && npkey < nskey); if (nbits < 512) { nbits = 512; log_info (_("keysize invalid; using %u bits\n"), nbits ); } if ((nbits % 32)) { nbits = ((nbits + 31) / 32) * 32; log_info(_("keysize rounded up to %u bits\n"), nbits ); } dek = do_ask_passphrase (&s2k); sk = xmalloc_clear (sizeof *sk); sk->timestamp = created_at; sk->version = 4; sk->pubkey_algo = algo; rc = pubkey_generate (algo, nbits, sk->skey, NULL); if (rc) { log_error("pubkey_generate failed: %s\n", g10_errstr(rc) ); goto leave; } for (i=npkey; i < nskey; i++) sk->csum += checksum_mpi (sk->skey[i]); if (r_sk_unprotected) *r_sk_unprotected = 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)); goto leave; } } if (r_sk_protected) { *r_sk_protected = sk; sk = NULL; } leave: if (sk) free_secret_key (sk); xfree (dek); xfree (s2k); return rc; } #endif /* ENABLE_CARD_SUPPORT */ /* Create and delete a dummy packet to start off a list of kbnodes. */ static void start_tree(KBNODE *tree) { PACKET *pkt; pkt=xmalloc_clear(sizeof(*pkt)); pkt->pkttype=PKT_NONE; *tree=new_kbnode(pkt); delete_kbnode(*tree); } static void do_generate_keypair (struct para_data_s *para,struct output_control_s *outctrl, int card) { KBNODE pub_root = NULL; KBNODE sec_root = NULL; PKT_secret_key *pri_sk = NULL, *sub_sk = NULL; const char *s; struct revocation_key *revkey; int rc; int did_sub = 0; u32 timestamp; if( outctrl->dryrun ) { log_info("dry-run mode - key generation skipped\n"); return; } if( outctrl->use_files ) { if( outctrl->pub.newfname ) { iobuf_close(outctrl->pub.stream); outctrl->pub.stream = NULL; if (outctrl->pub.fname) iobuf_ioctl (NULL, 2, 0, (char*)outctrl->pub.fname); xfree( outctrl->pub.fname ); outctrl->pub.fname = outctrl->pub.newfname; outctrl->pub.newfname = NULL; if (is_secured_filename (outctrl->pub.fname) ) { outctrl->pub.stream = NULL; errno = EPERM; } else outctrl->pub.stream = iobuf_create( outctrl->pub.fname ); if( !outctrl->pub.stream ) { log_error(_("can't create `%s': %s\n"), outctrl->pub.newfname, strerror(errno) ); return; } if( opt.armor ) { outctrl->pub.afx.what = 1; iobuf_push_filter( outctrl->pub.stream, armor_filter, &outctrl->pub.afx ); } } if( outctrl->sec.newfname ) { mode_t oldmask; iobuf_close(outctrl->sec.stream); outctrl->sec.stream = NULL; if (outctrl->sec.fname) iobuf_ioctl (NULL, 2, 0, (char*)outctrl->sec.fname); xfree( outctrl->sec.fname ); outctrl->sec.fname = outctrl->sec.newfname; outctrl->sec.newfname = NULL; oldmask = umask (077); if (is_secured_filename (outctrl->sec.fname) ) { outctrl->sec.stream = NULL; errno = EPERM; } else outctrl->sec.stream = iobuf_create( outctrl->sec.fname ); umask (oldmask); if( !outctrl->sec.stream ) { log_error(_("can't create `%s': %s\n"), outctrl->sec.newfname, strerror(errno) ); return; } if( opt.armor ) { outctrl->sec.afx.what = 5; iobuf_push_filter( outctrl->sec.stream, armor_filter, &outctrl->sec.afx ); } } assert( outctrl->pub.stream ); assert( outctrl->sec.stream ); if( opt.verbose ) { log_info(_("writing public key to `%s'\n"), outctrl->pub.fname ); if (card) log_info (_("writing secret key stub to `%s'\n"), outctrl->sec.fname); else log_info(_("writing secret key to `%s'\n"), outctrl->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 packet which we flag * as deleted. The very first packet must always be a KEY packet. */ start_tree(&pub_root); start_tree(&sec_root); timestamp = get_parameter_u32 (para, pKEYCREATIONDATE); /* Note that, depending on the backend (i.e. the used scdaemon version or the internal code), the card key generation may update TIMESTAMP for each key. Thus we need to pass TIMESTAMP to all signing function to make sure that the binding signature is done using the timestamp of the corresponding (sub)key and not that of the primary key. An alternative implementation could tell the signing function the node of the subkey but that is more work than just to pass the current timestamp. */ if (!card) { rc = do_create( get_parameter_algo( para, pKEYTYPE ), get_parameter_uint( para, pKEYLENGTH ), pub_root, sec_root, get_parameter_dek( para, pPASSPHRASE_DEK ), get_parameter_s2k( para, pPASSPHRASE_S2K ), &pri_sk, timestamp, get_parameter_u32( para, pKEYEXPIRE ), 0 ); } else { rc = gen_card_key (PUBKEY_ALGO_RSA, 1, 1, pub_root, sec_root, NULL, ×tamp, get_parameter_u32 (para, pKEYEXPIRE), para); if (!rc) { pri_sk = sec_root->next->pkt->pkt.secret_key; assert (pri_sk); } } if(!rc && (revkey=get_parameter_revkey(para,pREVOKER))) { rc = write_direct_sig (pub_root, pub_root, pri_sk, revkey, timestamp); if (!rc) write_direct_sig (sec_root, pub_root, pri_sk, revkey, timestamp); } if( !rc && (s=get_parameter_value(para, pUSERID)) ) { write_uid(pub_root, s ); if( !rc ) write_uid(sec_root, s ); if (!rc) rc = write_selfsigs (sec_root, pub_root, pri_sk, get_parameter_uint (para, pKEYUSAGE), timestamp); } /* Write the auth key to the card before the encryption key. This is a partial workaround for a PGP bug (as of this writing, all versions including 8.1), that causes it to try and encrypt to the most recent subkey regardless of whether that subkey is actually an encryption type. In this case, the auth key is an RSA key so it succeeds. */ if (!rc && card && get_parameter (para, pAUTHKEYTYPE)) { rc = gen_card_key (PUBKEY_ALGO_RSA, 3, 0, pub_root, sec_root, NULL, ×tamp, get_parameter_u32 (para, pKEYEXPIRE), para); if (!rc) rc = write_keybinding (pub_root, pub_root, pri_sk, sub_sk, PUBKEY_USAGE_AUTH, timestamp); if (!rc) rc = write_keybinding (sec_root, pub_root, pri_sk, sub_sk, PUBKEY_USAGE_AUTH, timestamp); } if( !rc && get_parameter( para, pSUBKEYTYPE ) ) { if (!card) { rc = do_create( get_parameter_algo( para, pSUBKEYTYPE ), get_parameter_uint( para, pSUBKEYLENGTH ), pub_root, sec_root, get_parameter_dek( para, pPASSPHRASE_DEK ), get_parameter_s2k( para, pPASSPHRASE_S2K ), &sub_sk, timestamp, get_parameter_u32( para, pSUBKEYEXPIRE ), 1 ); } else { if ((s = get_parameter_value (para, pBACKUPENCDIR))) { /* A backup of the encryption key has been requested. Generate the key i software and import it then to the card. Write a backup file. */ rc = gen_card_key_with_backup (PUBKEY_ALGO_RSA, 2, 0, pub_root, sec_root, timestamp, get_parameter_u32 (para, pKEYEXPIRE), para, s); } else rc = gen_card_key (PUBKEY_ALGO_RSA, 2, 0, pub_root, sec_root, NULL, ×tamp, get_parameter_u32 (para, pKEYEXPIRE), para); } if( !rc ) rc = write_keybinding (pub_root, pub_root, pri_sk, sub_sk, get_parameter_uint (para, pSUBKEYUSAGE), timestamp ); if( !rc ) rc = write_keybinding (sec_root, pub_root, pri_sk, sub_sk, get_parameter_uint (para, pSUBKEYUSAGE), timestamp); did_sub = 1; } if( !rc && outctrl->use_files ) { /* direct write to specified files */ rc = write_keyblock( outctrl->pub.stream, pub_root ); if( rc ) log_error("can't write public key: %s\n", g10_errstr(rc) ); if( !rc ) { rc = write_keyblock( outctrl->sec.stream, sec_root ); if( rc ) log_error("can't write secret key: %s\n", g10_errstr(rc) ); } } else if( !rc ) { /* write to the standard keyrings */ KEYDB_HANDLE pub_hd = keydb_new (0); KEYDB_HANDLE sec_hd = keydb_new (1); /* FIXME: we may have to create the keyring first */ rc = keydb_locate_writable (pub_hd, NULL); if (rc) log_error (_("no writable public keyring found: %s\n"), g10_errstr (rc)); if (!rc) { rc = keydb_locate_writable (sec_hd, NULL); if (rc) log_error (_("no writable secret keyring found: %s\n"), g10_errstr (rc)); } if (!rc && opt.verbose) { log_info(_("writing public key to `%s'\n"), keydb_get_resource_name (pub_hd)); if (card) log_info (_("writing secret key stub to `%s'\n"), keydb_get_resource_name (sec_hd)); else log_info(_("writing secret key to `%s'\n"), keydb_get_resource_name (sec_hd)); } if (!rc) { rc = keydb_insert_keyblock (pub_hd, pub_root); if (rc) log_error (_("error writing public keyring `%s': %s\n"), keydb_get_resource_name (pub_hd), g10_errstr(rc)); } if (!rc) { rc = keydb_insert_keyblock (sec_hd, sec_root); if (rc) log_error (_("error writing secret keyring `%s': %s\n"), keydb_get_resource_name (pub_hd), g10_errstr(rc)); } keydb_release (pub_hd); keydb_release (sec_hd); if (!rc) { int no_enc_rsa = get_parameter_algo(para, pKEYTYPE) == PUBKEY_ALGO_RSA && get_parameter_uint( para, pKEYUSAGE ) && !(get_parameter_uint( para,pKEYUSAGE) & PUBKEY_USAGE_ENC); PKT_public_key *pk = find_kbnode (pub_root, PKT_PUBLIC_KEY)->pkt->pkt.public_key; keyid_from_pk(pk,pk->main_keyid); register_trusted_keyid(pk->main_keyid); update_ownertrust (pk, ((get_ownertrust (pk) & ~TRUST_MASK) | TRUST_ULTIMATE )); if (!opt.batch) { tty_printf(_("public and secret key created and signed.\n") ); tty_printf("\n"); list_keyblock(pub_root,0,1,NULL); } if( !opt.batch && ( get_parameter_algo( para, pKEYTYPE ) == PUBKEY_ALGO_DSA || no_enc_rsa ) && !get_parameter( para, pSUBKEYTYPE ) ) { tty_printf(_("Note that this key cannot be used for " "encryption. You may want to use\n" "the command \"--edit-key\" to generate a " "subkey for this purpose.\n") ); } } } if( rc ) { if( opt.batch ) log_error("key generation failed: %s\n", g10_errstr(rc) ); else tty_printf(_("Key generation failed: %s\n"), g10_errstr(rc) ); print_status_key_not_created ( get_parameter_value (para, pHANDLE) ); } else { PKT_public_key *pk = find_kbnode (pub_root, PKT_PUBLIC_KEY)->pkt->pkt.public_key; print_status_key_created (did_sub? 'B':'P', pk, get_parameter_value (para, pHANDLE)); } release_kbnode( pub_root ); release_kbnode( sec_root ); if( pri_sk && !card) /* the unprotected secret key unless we have a */ free_secret_key(pri_sk); /* shallow copy in card mode. */ if( sub_sk ) free_secret_key(sub_sk); } /**************** * 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 *pri_sk = NULL, *sub_sk = NULL; int algo; unsigned int use; u32 expire; unsigned nbits; char *passphrase = NULL; DEK *dek = NULL; STRING2KEY *s2k = NULL; u32 timestamp; int ask_pass = 0; /* 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 */ pri_sk = copy_secret_key( NULL, node->pkt->pkt.secret_key ); timestamp = make_timestamp(); if( pri_sk->timestamp > timestamp ) { ulong d = pri_sk->timestamp - timestamp; 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 ); if( !opt.ignore_time_conflict ) { rc = G10ERR_TIME_CONFLICT; goto leave; } } if (pri_sk->version < 4) { log_info (_("NOTE: creating subkeys for v3 keys " "is not OpenPGP compliant\n")); goto leave; } if (pri_sk->is_protected && pri_sk->protect.s2k.mode == 1001) { tty_printf(_("Secret parts of primary key are not available.\n")); rc = G10ERR_NO_SECKEY; goto leave; } /* Unprotect to get the passphrase. */ switch( is_secret_key_protected( pri_sk ) ) { case -1: rc = G10ERR_PUBKEY_ALGO; break; case 0: tty_printf(_("This key is not protected.\n")); break; case -2: tty_printf(_("Secret parts of primary key are stored on-card.\n")); ask_pass = 1; break; default: tty_printf(_("Key is protected.\n")); rc = check_secret_key( pri_sk, 0 ); if( !rc ) passphrase = get_last_passphrase(); break; } if( rc ) goto leave; algo = ask_algo (1, NULL, &use); assert(algo); nbits = ask_keysize (algo, 0); expire = ask_expire_interval(timestamp,0,NULL); if( !cpr_enabled() && !cpr_get_answer_is_yes("keygen.sub.okay", _("Really create? (y/N) "))) goto leave; if (ask_pass) dek = do_ask_passphrase (&s2k); else if (passphrase) { s2k = xmalloc_secure( sizeof *s2k ); s2k->mode = opt.s2k_mode; s2k->hash_algo = S2K_DIGEST_ALGO; set_next_passphrase( passphrase ); dek = passphrase_to_dek( NULL, 0, opt.s2k_cipher_algo, s2k, 2, NULL, NULL ); } rc = do_create (algo, nbits, pub_keyblock, sec_keyblock, dek, s2k, &sub_sk, timestamp, expire, 1 ); xfree( dek ); if (!rc) rc = write_keybinding (pub_keyblock, pub_keyblock, pri_sk, sub_sk, use, timestamp); if (!rc) rc = write_keybinding (sec_keyblock, pub_keyblock, pri_sk, sub_sk, use, timestamp); if (!rc) { okay = 1; write_status_text (STATUS_KEY_CREATED, "S"); } leave: if( rc ) log_error(_("Key generation failed: %s\n"), g10_errstr(rc) ); xfree( passphrase ); xfree( s2k ); /* release the copy of the (now unprotected) secret keys */ if( pri_sk ) free_secret_key(pri_sk); if( sub_sk ) free_secret_key(sub_sk); set_next_passphrase( NULL ); return okay; } #ifdef ENABLE_CARD_SUPPORT /* Generate a subkey on a card. */ int generate_card_subkeypair (KBNODE pub_keyblock, KBNODE sec_keyblock, int keyno, const char *serialno) { int okay=0, rc=0; KBNODE node; PKT_secret_key *pri_sk = NULL, *sub_sk; int algo; unsigned int use; u32 timestamp,expire; char *passphrase = NULL; struct para_data_s *para = NULL; assert (keyno >= 1 && keyno <= 3); para = xcalloc (1, sizeof *para + strlen (serialno) ); para->key = pSERIALNO; strcpy (para->u.value, serialno); /* 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 */ pri_sk = copy_secret_key (NULL, node->pkt->pkt.secret_key); timestamp = make_timestamp(); if (pri_sk->timestamp > timestamp) { ulong d = pri_sk->timestamp - timestamp; 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 ); if (!opt.ignore_time_conflict) { rc = G10ERR_TIME_CONFLICT; goto leave; } } if (pri_sk->version < 4) { log_info (_("NOTE: creating subkeys for v3 keys " "is not OpenPGP compliant\n")); goto leave; } /* Unprotect to get the passphrase. */ switch( is_secret_key_protected (pri_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( pri_sk, 0 ); if (!rc) passphrase = get_last_passphrase(); break; } if (rc) goto leave; algo = PUBKEY_ALGO_RSA; expire = ask_expire_interval (timestamp,0,NULL); if (keyno == 1) use = PUBKEY_USAGE_SIG; else if (keyno == 2) use = PUBKEY_USAGE_ENC; else use = PUBKEY_USAGE_AUTH; if (!cpr_enabled() && !cpr_get_answer_is_yes("keygen.cardsub.okay", _("Really create? (y/N) "))) goto leave; if (passphrase) set_next_passphrase (passphrase); rc = gen_card_key (algo, keyno, 0, pub_keyblock, sec_keyblock, &sub_sk, ×tamp, expire, para); if (!rc) rc = write_keybinding (pub_keyblock, pub_keyblock, pri_sk, sub_sk, use, timestamp); if (!rc) rc = write_keybinding (sec_keyblock, pub_keyblock, pri_sk, sub_sk, use, timestamp); if (!rc) { okay = 1; write_status_text (STATUS_KEY_CREATED, "S"); } leave: if (rc) log_error (_("Key generation failed: %s\n"), g10_errstr(rc) ); xfree (passphrase); /* Release the copy of the (now unprotected) secret keys. */ if (pri_sk) free_secret_key (pri_sk); set_next_passphrase( NULL ); release_parameter_list (para); return okay; } #endif /* !ENABLE_CARD_SUPPORT */ /**************** * Write a keyblock to an output stream */ static int write_keyblock( IOBUF out, KBNODE node ) { for( ; node ; node = node->next ) { if(!is_deleted_kbnode(node)) { int rc = build_packet( out, node->pkt ); if( rc ) { log_error("build_packet(%d) failed: %s\n", node->pkt->pkttype, g10_errstr(rc) ); return G10ERR_WRITE_FILE; } } } return 0; } /* Note that TIMESTAMP is an in/out arg. */ static int gen_card_key (int algo, int keyno, int is_primary, KBNODE pub_root, KBNODE sec_root, PKT_secret_key **ret_sk, u32 *timestamp, u32 expireval, struct para_data_s *para) { #ifdef ENABLE_CARD_SUPPORT int rc; const char *s; struct agent_card_genkey_s info; PACKET *pkt; PKT_secret_key *sk; PKT_public_key *pk; assert (algo == PUBKEY_ALGO_RSA); /* Fixme: We don't have the serialnumber available, thus passing NULL. */ rc = agent_scd_genkey (&info, keyno, 1, NULL, timestamp); /* if (gpg_err_code (rc) == GPG_ERR_EEXIST) */ /* { */ /* tty_printf ("\n"); */ /* log_error ("WARNING: key does already exists!\n"); */ /* tty_printf ("\n"); */ /* if ( cpr_get_answer_is_yes( "keygen.card.replace_key", */ /* _("Replace existing key? "))) */ /* rc = agent_scd_genkey (&info, keyno, 1); */ /* } */ if (rc) { log_error ("key generation failed: %s\n", gpg_strerror (rc)); return rc; } if ( !info.n || !info.e ) { log_error ("communication error with SCD\n"); mpi_free (info.n); mpi_free (info.e); return gpg_error (GPG_ERR_GENERAL); } if (*timestamp != info.created_at) log_info ("Note that the key does not use the suggested creation date\n"); *timestamp = info.created_at; pk = xcalloc (1, sizeof *pk ); sk = xcalloc (1, sizeof *sk ); sk->timestamp = pk->timestamp = info.created_at; sk->version = pk->version = 4; if (expireval) sk->expiredate = pk->expiredate = pk->timestamp + expireval; sk->pubkey_algo = pk->pubkey_algo = algo; pk->pkey[0] = info.n; pk->pkey[1] = info.e; sk->skey[0] = mpi_copy (pk->pkey[0]); sk->skey[1] = mpi_copy (pk->pkey[1]); sk->skey[2] = mpi_set_opaque (NULL, xstrdup ("dummydata"), 10); sk->is_protected = 1; sk->protect.s2k.mode = 1002; s = get_parameter_value (para, pSERIALNO); if (s) { for (sk->protect.ivlen=0; sk->protect.ivlen < 16 && *s && s[1]; sk->protect.ivlen++, s += 2) sk->protect.iv[sk->protect.ivlen] = xtoi_2 (s); } if( ret_sk ) *ret_sk = sk; pkt = xcalloc (1,sizeof *pkt); pkt->pkttype = is_primary ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY; pkt->pkt.public_key = pk; add_kbnode(pub_root, new_kbnode( pkt )); pkt = xcalloc (1,sizeof *pkt); pkt->pkttype = is_primary ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); return 0; #else return -1; #endif /*!ENABLE_CARD_SUPPORT*/ } static int gen_card_key_with_backup (int algo, int keyno, int is_primary, KBNODE pub_root, KBNODE sec_root, u32 timestamp, u32 expireval, struct para_data_s *para, const char *backup_dir) { #ifdef ENABLE_CARD_SUPPORT int rc; const char *s; PACKET *pkt; PKT_secret_key *sk, *sk_unprotected, *sk_protected; PKT_public_key *pk; size_t n; int i; unsigned int nbits; sk_unprotected = NULL; sk_protected = NULL; /* Get the size of the key directly from the card. */ { struct agent_card_info_s info; memset (&info, 0, sizeof info); if (!agent_scd_getattr ("KEY-ATTR", &info) && info.key_attr[1].algo) nbits = info.key_attr[1].nbits; else nbits = 1024; /* All pre-v2.0 cards. */ agent_release_card_info (&info); } rc = generate_raw_key (algo, nbits, timestamp, &sk_unprotected, &sk_protected); if (rc) return rc; /* First, store the key to the card. */ rc = save_unprotected_key_to_card (sk_unprotected, keyno); if (rc) { log_error (_("storing key onto card failed: %s\n"), g10_errstr (rc)); free_secret_key (sk_unprotected); free_secret_key (sk_protected); return rc; } /* Get rid of the secret key parameters and store the serial numer. */ sk = sk_unprotected; n = pubkey_get_nskey (sk->pubkey_algo); for (i=pubkey_get_npkey (sk->pubkey_algo); i < n; i++) { mpi_free (sk->skey[i]); sk->skey[i] = NULL; } i = pubkey_get_npkey (sk->pubkey_algo); sk->skey[i] = mpi_set_opaque (NULL, xstrdup ("dummydata"), 10); sk->is_protected = 1; sk->protect.s2k.mode = 1002; s = get_parameter_value (para, pSERIALNO); assert (s); for (sk->protect.ivlen=0; sk->protect.ivlen < 16 && *s && s[1]; sk->protect.ivlen++, s += 2) sk->protect.iv[sk->protect.ivlen] = xtoi_2 (s); /* Now write the *protected* secret key to the file. */ { char name_buffer[50]; char *fname; IOBUF fp; mode_t oldmask; keyid_from_sk (sk, NULL); sprintf (name_buffer,"sk_%08lX%08lX.gpg", (ulong)sk->keyid[0], (ulong)sk->keyid[1]); fname = make_filename (backup_dir, name_buffer, NULL); oldmask = umask (077); if (is_secured_filename (fname)) { fp = NULL; errno = EPERM; } else fp = iobuf_create (fname); umask (oldmask); if (!fp) { log_error (_("can't create backup file `%s': %s\n"), fname, strerror(errno) ); xfree (fname); free_secret_key (sk_unprotected); free_secret_key (sk_protected); return G10ERR_OPEN_FILE; } pkt = xcalloc (1, sizeof *pkt); pkt->pkttype = PKT_SECRET_KEY; pkt->pkt.secret_key = sk_protected; sk_protected = NULL; rc = build_packet (fp, pkt); if (rc) { log_error("build packet failed: %s\n", g10_errstr(rc) ); iobuf_cancel (fp); } else { byte array[MAX_FINGERPRINT_LEN]; char *fprbuf, *p; iobuf_close (fp); iobuf_ioctl (NULL, 2, 0, (char*)fname); log_info (_("NOTE: backup of card key saved to `%s'\n"), fname); fingerprint_from_sk (sk, array, &n); p = fprbuf = xmalloc (MAX_FINGERPRINT_LEN*2 + 1 + 1); for (i=0; i < n ; i++, p += 2) sprintf (p, "%02X", array[i]); *p++ = ' '; *p = 0; write_status_text_and_buffer (STATUS_BACKUP_KEY_CREATED, fprbuf, fname, strlen (fname), 0); xfree (fprbuf); } free_packet (pkt); xfree (pkt); xfree (fname); if (rc) { free_secret_key (sk_unprotected); return rc; } } /* Create the public key from the secret key. */ pk = xcalloc (1, sizeof *pk ); pk->timestamp = sk->timestamp; pk->version = sk->version; if (expireval) pk->expiredate = sk->expiredate = sk->timestamp + expireval; pk->pubkey_algo = sk->pubkey_algo; n = pubkey_get_npkey (sk->pubkey_algo); for (i=0; i < n; i++) pk->pkey[i] = mpi_copy (sk->skey[i]); /* Build packets and add them to the node lists. */ pkt = xcalloc (1,sizeof *pkt); pkt->pkttype = is_primary ? PKT_PUBLIC_KEY : PKT_PUBLIC_SUBKEY; pkt->pkt.public_key = pk; add_kbnode(pub_root, new_kbnode( pkt )); pkt = xcalloc (1,sizeof *pkt); pkt->pkttype = is_primary ? PKT_SECRET_KEY : PKT_SECRET_SUBKEY; pkt->pkt.secret_key = sk; add_kbnode(sec_root, new_kbnode( pkt )); return 0; #else return -1; #endif /*!ENABLE_CARD_SUPPORT*/ } #ifdef ENABLE_CARD_SUPPORT int save_unprotected_key_to_card (PKT_secret_key *sk, int keyno) { int rc; unsigned char *rsa_n = NULL; unsigned char *rsa_e = NULL; unsigned char *rsa_p = NULL; unsigned char *rsa_q = NULL; unsigned int rsa_n_len, rsa_e_len, rsa_p_len, rsa_q_len; unsigned char *sexp = NULL; unsigned char *p; char numbuf[55], numbuf2[50]; assert (is_RSA (sk->pubkey_algo)); assert (!sk->is_protected); /* Copy the parameters into straight buffers. */ rsa_n = mpi_get_secure_buffer (sk->skey[0], &rsa_n_len, NULL); rsa_e = mpi_get_secure_buffer (sk->skey[1], &rsa_e_len, NULL); rsa_p = mpi_get_secure_buffer (sk->skey[3], &rsa_p_len, NULL); rsa_q = mpi_get_secure_buffer (sk->skey[4], &rsa_q_len, NULL); if (!rsa_n || !rsa_e || !rsa_p || !rsa_q) { rc = G10ERR_INV_ARG; goto leave; } /* Put the key into an S-expression. */ sexp = p = xmalloc_secure (30 + rsa_n_len + rsa_e_len + rsa_p_len + rsa_q_len + 4*sizeof (numbuf) + 25 + sizeof(numbuf) + 20); p = stpcpy (p,"(11:private-key(3:rsa(1:n"); sprintf (numbuf, "%u:", rsa_n_len); p = stpcpy (p, numbuf); memcpy (p, rsa_n, rsa_n_len); p += rsa_n_len; sprintf (numbuf, ")(1:e%u:", rsa_e_len); p = stpcpy (p, numbuf); memcpy (p, rsa_e, rsa_e_len); p += rsa_e_len; sprintf (numbuf, ")(1:p%u:", rsa_p_len); p = stpcpy (p, numbuf); memcpy (p, rsa_p, rsa_p_len); p += rsa_p_len; sprintf (numbuf, ")(1:q%u:", rsa_q_len); p = stpcpy (p, numbuf); memcpy (p, rsa_q, rsa_q_len); p += rsa_q_len; p = stpcpy (p,"))(10:created-at"); sprintf (numbuf2, "%lu", (unsigned long)sk->timestamp); sprintf (numbuf, "%lu:", (unsigned long)strlen (numbuf2)); p = stpcpy (stpcpy (stpcpy (p, numbuf), numbuf2), "))"); /* Fixme: Unfortunately we don't have the serialnumber available - thus we can't pass it down to the agent. */ rc = agent_scd_writekey (keyno, NULL, sexp, p - sexp); leave: xfree (sexp); xfree (rsa_n); xfree (rsa_e); xfree (rsa_p); xfree (rsa_q); return rc; } #endif /*ENABLE_CARD_SUPPORT*/ gnupg-1.4.20/g10/verify.c0000644000175000017500000001444212635262326011712 00000000000000/* verify.c - verify signed data * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, * 2007 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 3 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, see . */ #include #include #include #include #include #include #include /* for isatty() */ #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 "status.h" #include "filter.h" #include "ttyio.h" #include "i18n.h" /**************** * Assume that the input is a signature and verify it without * generating any output. With no arguments, the signature packet * is read from stdin (it may be a detached signature when not * used in batch mode). If only a sigfile is given, it may be a complete * signature or a detached signature in which case the signed stuff * is expected from stdin. With more than 1 argument, the first should * be a detached signature and the remaining files are the signed stuff. */ int verify_signatures( int nfiles, char **files ) { IOBUF fp; armor_filter_context_t afx; progress_filter_context_t pfx; const char *sigfile; int i, rc; STRLIST sl; memset( &afx, 0, sizeof afx); /* decide whether we should handle a detached or a normal signature, * which is needed so that the code later can hash the correct data and * not have a normal signature act as detached signature and ignoring the * indended signed material from the 2nd file or stdin. * 1. gpg 0 ; i-- ) add_to_strlist( &sl, files[i] ); rc = proc_signature_packets( NULL, fp, sl, sigfile ); free_strlist(sl); iobuf_close(fp); if( (afx.no_openpgp_data && rc == -1) || rc == G10ERR_NO_DATA ) { log_error(_("the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n") ); rc = 0; } return rc; } void print_file_status( int status, const char *name, int what ) { char *p = xmalloc(strlen(name)+10); sprintf(p, "%d %s", what, name ); write_status_text( status, p ); xfree(p); } static int verify_one_file( const char *name ) { IOBUF fp; armor_filter_context_t afx; progress_filter_context_t pfx; int rc; print_file_status( STATUS_FILE_START, name, 1 ); fp = iobuf_open(name); if (fp) iobuf_ioctl (fp,3,1,NULL); /* disable fd caching */ if (fp && is_secured_file (iobuf_get_fd (fp))) { iobuf_close (fp); fp = NULL; errno = EPERM; } if( !fp ) { print_file_status( STATUS_FILE_ERROR, name, 1 ); log_error(_("can't open `%s'\n"), print_fname_stdin(name)); return G10ERR_OPEN_FILE; } handle_progress (&pfx, fp, name); if( !opt.no_armor ) { if( use_armor_filter( fp ) ) { memset( &afx, 0, sizeof afx); iobuf_push_filter( fp, armor_filter, &afx ); } } rc = proc_signature_packets( NULL, fp, NULL, name ); iobuf_close(fp); write_status( STATUS_FILE_DONE ); reset_literals_seen(); return rc; } /**************** * Verify each file given in the files array or read the names of the * files from stdin. * Note: This function can not handle detached signatures. */ int verify_files( int nfiles, char **files ) { int i; if( !nfiles ) { /* read the filenames from stdin */ char line[2048]; unsigned int lno = 0; while( fgets(line, DIM(line), stdin) ) { lno++; if( !*line || line[strlen(line)-1] != '\n' ) { log_error(_("input line %u too long or missing LF\n"), lno ); return G10ERR_GENERAL; } /* This code does not work on MSDOS but how cares there are * also no script languages available. We don't strip any * spaces, so that we can process nearly all filenames */ line[strlen(line)-1] = 0; verify_one_file( line ); iobuf_ioctl( NULL, 2, 0, NULL); /* Invalidate entire cache. */ } } else { /* take filenames from the array */ for(i=0; i < nfiles; i++ ) { verify_one_file( files[i] ); iobuf_ioctl( NULL, 2, 0, NULL); /* Invalidate entire cache. */ } } return 0; } gnupg-1.4.20/g10/signal.c0000644000175000017500000001332412635262326011661 00000000000000/* signal.c - signal handling * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, * 2005 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 3 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, see . */ #include #include #include #include #include #include #include #include #ifdef HAVE_LIBREADLINE #include #include #endif #include "options.h" #include "errors.h" #include "memory.h" #include "util.h" #include "main.h" #include "ttyio.h" #ifdef __VMS # include "vms.h" #endif /* __VMS */ #ifdef HAVE_DOSISH_SYSTEM void init_signals(void) {} void pause_on_sigusr(int which) {} #else static volatile int caught_fatal_sig = 0; static volatile int caught_sigusr1 = 0; static void init_one_signal (int sig, RETSIGTYPE (*handler)(int), int check_ign ) { #if defined(HAVE_SIGACTION) && defined(HAVE_STRUCT_SIGACTION) struct sigaction oact, nact; if (check_ign) { /* we don't want to change an IGN handler */ sigaction (sig, NULL, &oact ); if (oact.sa_handler == SIG_IGN ) return; } nact.sa_handler = handler; sigemptyset (&nact.sa_mask); nact.sa_flags = 0; sigaction ( sig, &nact, NULL); #else RETSIGTYPE (*ohandler)(int); ohandler = signal (sig, handler); if (check_ign && ohandler == SIG_IGN) { /* Change it back if it was already set to IGN */ signal (sig, SIG_IGN); } #endif } static RETSIGTYPE got_fatal_signal( int sig ) { const char *s; if( caught_fatal_sig ) raise( sig ); caught_fatal_sig = 1; secmem_term(); #ifdef HAVE_LIBREADLINE rl_free_line_state (); rl_cleanup_after_signal (); #endif tty_cleanup_after_signal (); /* Better don't translate these messages. */ write(2, "\n", 1 ); s = log_get_name(); if( s ) write(2, s, strlen(s) ); write(2, ": ", 2 ); #if HAVE_DECL_SYS_SIGLIST && defined(NSIG) s = (sig >= 0 && sig < NSIG) ? sys_siglist[sig] : "?"; write (2, s, strlen(s) ); #else write (2, "signal ", 7 ); if (sig < 0 || sig >=100) write (2, "?", 1); else { if (sig >= 10) write (2, "0123456789"+(sig/10), 1 ); write (2, "0123456789"+(sig%10), 1 ); } #endif write(2, " caught ... exiting\n", 20 ); #ifdef __VMS /* 2006-08-10 SMS. Restore terminal echo, if needed, before exiting. */ vms_set_term_echo (-1); #endif /* def __VMS */ /* Reset action to default action and raise signal again. */ init_one_signal (sig, SIG_DFL, 0); dotlock_remove_lockfiles (0); #ifdef __riscos__ riscos_close_fds (); #endif /* __riscos__ */ raise( sig ); } static RETSIGTYPE got_usr_signal( int sig ) { caught_sigusr1 = 1; } void init_signals() { init_one_signal (SIGINT, got_fatal_signal, 1 ); init_one_signal (SIGHUP, got_fatal_signal, 1 ); init_one_signal (SIGTERM, got_fatal_signal, 1 ); init_one_signal (SIGQUIT, got_fatal_signal, 1 ); init_one_signal (SIGSEGV, got_fatal_signal, 1 ); init_one_signal (SIGUSR1, got_usr_signal, 0 ); init_one_signal (SIGPIPE, SIG_IGN, 0 ); } void pause_on_sigusr( int which ) { #if defined(HAVE_SIGPROCMASK) && defined(HAVE_SIGSET_T) sigset_t mask, oldmask; assert( which == 1 ); sigemptyset( &mask ); sigaddset( &mask, SIGUSR1 ); sigprocmask( SIG_BLOCK, &mask, &oldmask ); while( !caught_sigusr1 ) sigsuspend( &oldmask ); caught_sigusr1 = 0; sigprocmask( SIG_UNBLOCK, &mask, NULL ); #else assert (which == 1); sighold (SIGUSR1); while (!caught_sigusr1) sigpause(SIGUSR1); caught_sigusr1 = 0; sigrelse(SIGUSR1); #endif /*! HAVE_SIGPROCMASK && HAVE_SIGSET_T */ } /* Disabled - see comment in tdbio.c:tdbio_begin_transaction() */ #if 0 static void do_block( int block ) { static int is_blocked; #if defined(HAVE_SIGPROCMASK) && defined(HAVE_SIGSET_T) static sigset_t oldmask; if( block ) { sigset_t newmask; if( is_blocked ) log_bug("signals are already blocked\n"); sigfillset( &newmask ); sigprocmask( SIG_BLOCK, &newmask, &oldmask ); is_blocked = 1; } else { if( !is_blocked ) log_bug("signals are not blocked\n"); sigprocmask( SIG_SETMASK, &oldmask, NULL ); is_blocked = 0; } #else /*! HAVE_SIGPROCMASK && HAVE_SIGSET_T */ #if defined(NSIG) #define SIGSMAX (NSIG) #elif defined(MAXSIG) #define SIGSMAX (MAXSIG+1) #else #error "define SIGSMAX to the number of signals on your platform plus one" #endif static void (*disposition[SIGSMAX])(int); int sig; if( block ) { if( is_blocked ) log_bug("signals are already blocked\n"); for (sig=1; sig < SIGSMAX; sig++) { disposition[sig] = sigset (sig, SIG_HOLD); } is_blocked = 1; } else { if( !is_blocked ) log_bug("signals are not blocked\n"); for (sig=1; sig < SIGSMAX; sig++) { sigset (sig, disposition[sig]); } is_blocked = 0; } #endif /*! HAVE_SIGPROCMASK && HAVE_SIGSET_T */ } void block_all_signals() { do_block(1); } void unblock_all_signals() { do_block(0); } #endif #endif /* !HAVE_DOSISH_SYSTEM */ gnupg-1.4.20/g10/revoke.c0000644000175000017500000004310512635262326011677 00000000000000/* revoke.c * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, * 2004 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 3 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, see . */ #include #include #include #include #include #include #include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" #include "memory.h" #include "util.h" #include "main.h" #include "ttyio.h" #include "status.h" #include "i18n.h" struct revocation_reason_info { int code; char *desc; }; int revocation_reason_build_cb( PKT_signature *sig, void *opaque ) { struct revocation_reason_info *reason = opaque; char *ud = NULL; byte *buffer; size_t buflen = 1; if(!reason) return 0; if( reason->desc ) { ud = native_to_utf8( reason->desc ); buflen += strlen(ud); } buffer = xmalloc( buflen ); *buffer = reason->code; if( ud ) { memcpy(buffer+1, ud, strlen(ud) ); xfree( ud ); } build_sig_subpkt( sig, SIGSUBPKT_REVOC_REASON, buffer, buflen ); xfree( buffer ); return 0; } /* Outputs a minimal pk (as defined by 2440) from a keyblock. A minimal pk consists of the public key packet and a user ID. We try and pick a user ID that has a uid signature, and include it if possible. */ static int export_minimal_pk(IOBUF out,KBNODE keyblock, PKT_signature *revsig,PKT_signature *revkey) { KBNODE node; PACKET pkt; PKT_user_id *uid=NULL; PKT_signature *selfsig=NULL; u32 keyid[2]; int rc; node=find_kbnode(keyblock,PKT_PUBLIC_KEY); if(!node) { log_error("key incomplete\n"); return G10ERR_GENERAL; } keyid_from_pk(node->pkt->pkt.public_key,keyid); pkt=*node->pkt; rc=build_packet(out,&pkt); if(rc) { log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); return rc; } init_packet(&pkt); pkt.pkttype=PKT_SIGNATURE; /* the revocation itself, if any. 2440 likes this to come first. */ if(revsig) { pkt.pkt.signature=revsig; rc=build_packet(out,&pkt); if(rc) { log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); return rc; } } /* If a revkey in a 1F sig is present, include it too */ if(revkey) { pkt.pkt.signature=revkey; rc=build_packet(out,&pkt); if(rc) { log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); return rc; } } while(!selfsig) { KBNODE signode; node=find_next_kbnode(node,PKT_USER_ID); if(!node) { /* We're out of user IDs - none were self-signed. */ if(uid) break; else { log_error(_("key %s has no user IDs\n"),keystr(keyid)); return G10ERR_GENERAL; } } if(node->pkt->pkt.user_id->attrib_data) continue; uid=node->pkt->pkt.user_id; signode=node; while((signode=find_next_kbnode(signode,PKT_SIGNATURE))) { if(keyid[0]==signode->pkt->pkt.signature->keyid[0] && keyid[1]==signode->pkt->pkt.signature->keyid[1] && IS_UID_SIG(signode->pkt->pkt.signature)) { selfsig=signode->pkt->pkt.signature; break; } } } pkt.pkttype=PKT_USER_ID; pkt.pkt.user_id=uid; rc=build_packet(out,&pkt); if(rc) { log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); return rc; } if(selfsig) { pkt.pkttype=PKT_SIGNATURE; pkt.pkt.signature=selfsig; rc=build_packet(out,&pkt); if(rc) { log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); return rc; } } return 0; } /**************** * Generate a revocation certificate for UNAME via a designated revoker */ int gen_desig_revoke( const char *uname, STRLIST locusr ) { int rc = 0; armor_filter_context_t afx; PKT_public_key *pk = NULL; PKT_secret_key *sk = NULL; PKT_signature *sig = NULL; IOBUF out = NULL; struct revocation_reason_info *reason = NULL; KEYDB_HANDLE kdbhd; KEYDB_SEARCH_DESC desc; KBNODE keyblock=NULL,node; u32 keyid[2]; int i,any=0; SK_LIST sk_list=NULL; if( opt.batch ) { log_error(_("can't do this in batch mode\n")); return G10ERR_GENERAL; } memset( &afx, 0, sizeof afx); kdbhd = keydb_new (0); classify_user_id (uname, &desc); rc = desc.mode? keydb_search (kdbhd, &desc, 1) : G10ERR_INV_USER_ID; if (rc) { log_error (_("key \"%s\" not found: %s\n"),uname, g10_errstr (rc)); goto leave; } rc = keydb_get_keyblock (kdbhd, &keyblock ); if( rc ) { log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); goto leave; } /* To parse the revkeys */ merge_keys_and_selfsig(keyblock); /* get the key from the keyblock */ node = find_kbnode( keyblock, PKT_PUBLIC_KEY ); if( !node ) BUG (); pk=node->pkt->pkt.public_key; keyid_from_pk(pk,keyid); if(locusr) { rc=build_sk_list(locusr,&sk_list,0,PUBKEY_USAGE_CERT); if(rc) goto leave; } /* Are we a designated revoker for this key? */ if(!pk->revkey && pk->numrevkeys) BUG(); for(i=0;inumrevkeys;i++) { SK_LIST list; if(sk) free_secret_key(sk); if(sk_list) { for(list=sk_list;list;list=list->next) { byte fpr[MAX_FINGERPRINT_LEN]; size_t fprlen; fingerprint_from_sk(list->sk,fpr,&fprlen); /* Don't get involved with keys that don't have 160 bit fingerprints */ if(fprlen!=20) continue; if(memcmp(fpr,pk->revkey[i].fpr,20)==0) break; } if(list) sk=copy_secret_key(NULL,list->sk); else continue; } else { sk=xmalloc_secure_clear(sizeof(*sk)); rc=get_seckey_byfprint(sk,pk->revkey[i].fpr,MAX_FINGERPRINT_LEN); } /* We have the revocation key */ if(!rc) { PKT_signature *revkey = NULL; any = 1; print_pubkey_info (NULL, pk); tty_printf ("\n"); tty_printf (_("To be revoked by:\n")); print_seckey_info (sk); if(pk->revkey[i].class&0x40) tty_printf(_("(This is a sensitive revocation key)\n")); tty_printf("\n"); if( !cpr_get_answer_is_yes("gen_desig_revoke.okay", _("Create a designated revocation certificate for this key? (y/N) "))) continue; /* get the reason for the revocation (this is always v4) */ reason = ask_revocation_reason( 1, 0, 1 ); if( !reason ) continue; rc = check_secret_key( sk, 0 ); if( rc ) continue; if( !opt.armor ) tty_printf(_("ASCII armored output forced.\n")); if( (rc = open_outfile( NULL, 0, &out )) ) goto leave; afx.what = 1; afx.hdrlines = "Comment: A designated revocation certificate" " should follow\n"; iobuf_push_filter( out, armor_filter, &afx ); /* create it */ rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0, 0, 0, 0, revocation_reason_build_cb, reason ); if( rc ) { log_error(_("make_keysig_packet failed: %s\n"), g10_errstr(rc)); goto leave; } /* Spit out a minimal pk as well, since otherwise there is no way to know which key to attach this revocation to. Also include the direct key signature that contains this revocation key. We're allowed to include sensitive revocation keys along with a revocation, as this may be the only time the recipient has seen it. Note that this means that if we have multiple different sensitive revocation keys in a given direct key signature, we're going to include them all here. This is annoying, but the good outweighs the bad, since without including this a sensitive revoker can't really do their job. People should not include multiple sensitive revocation keys in one signature: 2440 says "Note that it may be appropriate to isolate this subpacket within a separate signature so that it is not combined with other subpackets that need to be exported." -dms */ while(!revkey) { KBNODE signode; signode=find_next_kbnode(node,PKT_SIGNATURE); if(!signode) break; node=signode; if(keyid[0]==signode->pkt->pkt.signature->keyid[0] && keyid[1]==signode->pkt->pkt.signature->keyid[1] && IS_KEY_SIG(signode->pkt->pkt.signature)) { int j; for(j=0;jpkt->pkt.signature->numrevkeys;j++) { if(pk->revkey[i].class== signode->pkt->pkt.signature->revkey[j]->class && pk->revkey[i].algid== signode->pkt->pkt.signature->revkey[j]->algid && memcmp(pk->revkey[i].fpr, signode->pkt->pkt.signature->revkey[j]->fpr, MAX_FINGERPRINT_LEN)==0) { revkey=signode->pkt->pkt.signature; break; } } } } if(!revkey) BUG(); rc=export_minimal_pk(out,keyblock,sig,revkey); if(rc) goto leave; /* and issue a usage notice */ tty_printf(_("Revocation certificate created.\n")); break; } } if(!any) log_error(_("no revocation keys found for \"%s\"\n"),uname); leave: if( pk ) free_public_key( pk ); if( sk ) free_secret_key( sk ); if( sig ) free_seckey_enc( sig ); release_sk_list(sk_list); if( rc ) iobuf_cancel(out); else iobuf_close(out); release_revocation_reason_info( reason ); return rc; } /**************** * Generate a revocation certificate for UNAME */ int gen_revoke( const char *uname ) { int rc = 0; armor_filter_context_t afx; PACKET pkt; PKT_secret_key *sk; /* used as pointer into a kbnode */ PKT_public_key *pk = NULL; PKT_signature *sig = NULL; u32 sk_keyid[2]; IOBUF out = NULL; KBNODE keyblock = NULL, pub_keyblock = NULL; KBNODE node; KEYDB_HANDLE kdbhd; struct revocation_reason_info *reason = NULL; KEYDB_SEARCH_DESC desc; if( opt.batch ) { log_error(_("can't do this in batch mode\n")); return G10ERR_GENERAL; } memset( &afx, 0, sizeof afx); init_packet( &pkt ); /* search the userid: * We don't want the whole getkey stuff here but the entire keyblock */ kdbhd = keydb_new (1); classify_user_id (uname, &desc); rc = desc.mode? keydb_search (kdbhd, &desc, 1) : G10ERR_INV_USER_ID; if (rc) { log_error (_("secret key \"%s\" not found: %s\n"), uname, g10_errstr (rc)); goto leave; } rc = keydb_get_keyblock (kdbhd, &keyblock ); if( rc ) { log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); goto leave; } /* get the keyid from the keyblock */ node = find_kbnode( keyblock, PKT_SECRET_KEY ); if( !node ) BUG (); /* fixme: should make a function out of this stuff, * it's used all over the source */ sk = node->pkt->pkt.secret_key; keyid_from_sk( sk, sk_keyid ); print_seckey_info (sk); /* FIXME: We should get the public key direct from the secret one */ pub_keyblock=get_pubkeyblock(sk_keyid); if(!pub_keyblock) { log_error(_("no corresponding public key: %s\n"), g10_errstr(rc) ); goto leave; } node=find_kbnode(pub_keyblock,PKT_PUBLIC_KEY); if(!node) BUG(); pk=node->pkt->pkt.public_key; if( cmp_public_secret_key( pk, sk ) ) { log_error(_("public key does not match secret key!\n") ); rc = G10ERR_GENERAL; goto leave; } tty_printf("\n"); if( !cpr_get_answer_is_yes("gen_revoke.okay", _("Create a revocation certificate for this key? (y/N) ")) ) { rc = 0; goto leave; } if(sk->version>=4 || opt.force_v4_certs) { /* get the reason for the revocation */ reason = ask_revocation_reason( 1, 0, 1 ); if( !reason ) { /* user decided to cancel */ rc = 0; goto leave; } } switch( is_secret_key_protected( sk ) ) { case -1: log_error(_("unknown protection algorithm\n")); rc = G10ERR_PUBKEY_ALGO; break; case -3: tty_printf (_("Secret parts of primary key are not available.\n")); rc = G10ERR_NO_SECKEY; break; case 0: tty_printf(_("NOTE: This key is not protected!\n")); break; default: rc = check_secret_key( sk, 0 ); break; } if( rc ) goto leave; if( !opt.armor ) tty_printf(_("ASCII armored output forced.\n")); if( (rc = open_outfile( NULL, 0, &out )) ) goto leave; afx.what = 1; afx.hdrlines = "Comment: A revocation certificate should follow\n"; iobuf_push_filter( out, armor_filter, &afx ); /* create it */ rc = make_keysig_packet( &sig, pk, NULL, NULL, sk, 0x20, 0, opt.force_v4_certs?4:0, 0, 0, revocation_reason_build_cb, reason ); if( rc ) { log_error(_("make_keysig_packet failed: %s\n"), g10_errstr(rc)); goto leave; } if(PGP2 || PGP6 || PGP7 || PGP8) { /* Use a minimal pk for PGPx mode, since PGP can't import bare revocation certificates. */ rc=export_minimal_pk(out,pub_keyblock,sig,NULL); if(rc) goto leave; } else { init_packet( &pkt ); pkt.pkttype = PKT_SIGNATURE; pkt.pkt.signature = sig; rc = build_packet( out, &pkt ); if( rc ) { log_error(_("build_packet failed: %s\n"), g10_errstr(rc) ); goto leave; } } /* and issue a usage notice */ tty_printf(_("Revocation certificate created.\n\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n")); leave: if( sig ) free_seckey_enc( sig ); release_kbnode( keyblock ); release_kbnode( pub_keyblock ); keydb_release (kdbhd); if( rc ) iobuf_cancel(out); else iobuf_close(out); release_revocation_reason_info( reason ); return rc; } struct revocation_reason_info * ask_revocation_reason( int key_rev, int cert_rev, int hint ) { int code=-1; char *description = NULL; struct revocation_reason_info *reason; const char *text_0 = _("No reason specified"); const char *text_1 = _("Key has been compromised"); const char *text_2 = _("Key is superseded"); const char *text_3 = _("Key is no longer used"); const char *text_4 = _("User ID is no longer valid"); const char *code_text = NULL; do { code=-1; xfree(description); description = NULL; tty_printf(_("Please select the reason for the revocation:\n")); tty_printf( " 0 = %s\n", text_0 ); if( key_rev ) tty_printf(" 1 = %s\n", text_1 ); if( key_rev ) tty_printf(" 2 = %s\n", text_2 ); if( key_rev ) tty_printf(" 3 = %s\n", text_3 ); if( cert_rev ) tty_printf(" 4 = %s\n", text_4 ); tty_printf( " Q = %s\n", _("Cancel") ); if( hint ) tty_printf(_("(Probably you want to select %d here)\n"), hint ); while(code==-1) { int n; char *answer = cpr_get("ask_revocation_reason.code", _("Your decision? ")); trim_spaces( answer ); cpr_kill_prompt(); if( *answer == 'q' || *answer == 'Q') return NULL; /* cancel */ if( hint && !*answer ) n = hint; else if(!digitp( answer ) ) n = -1; else n = atoi(answer); xfree(answer); if( n == 0 ) { code = 0x00; /* no particular reason */ code_text = text_0; } else if( key_rev && n == 1 ) { code = 0x02; /* key has been compromised */ code_text = text_1; } else if( key_rev && n == 2 ) { code = 0x01; /* key is superseded */ code_text = text_2; } else if( key_rev && n == 3 ) { code = 0x03; /* key is no longer used */ code_text = text_3; } else if( cert_rev && n == 4 ) { code = 0x20; /* uid is no longer valid */ code_text = text_4; } else tty_printf(_("Invalid selection.\n")); } tty_printf(_("Enter an optional description; " "end it with an empty line:\n") ); for(;;) { char *answer = cpr_get("ask_revocation_reason.text", "> " ); trim_trailing_ws( answer, strlen(answer) ); cpr_kill_prompt(); if( !*answer ) { xfree(answer); break; } { char *p = make_printable_string( answer, strlen(answer), 0 ); xfree(answer); answer = p; } if( !description ) description = xstrdup(answer); else { char *p = xmalloc( strlen(description) + strlen(answer) + 2 ); strcpy(stpcpy(stpcpy( p, description),"\n"),answer); xfree(description); description = p; } xfree(answer); } tty_printf(_("Reason for revocation: %s\n"), code_text ); if( !description ) tty_printf(_("(No description given)\n") ); else tty_printf("%s\n", description ); } while( !cpr_get_answer_is_yes("ask_revocation_reason.okay", _("Is this okay? (y/N) ")) ); reason = xmalloc( sizeof *reason ); reason->code = code; reason->desc = description; return reason; } void release_revocation_reason_info( struct revocation_reason_info *reason ) { if( reason ) { xfree( reason->desc ); xfree( reason ); } } gnupg-1.4.20/g10/gpg.c0000644000175000017500000036503212635263103011161 00000000000000/* gpg.c - The GnuPG utility (main for gpg) * Copyright (C) 1998-2015 Free Software Foundation, Inc. * Copyright (C) 1997-2015 Werner Koch * * 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 3 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, see . */ #include #include #include #include #include #ifdef HAVE_STRINGS_H #include #endif #include #include #include #ifdef HAVE_DOSISH_SYSTEM #include /* for setmode() */ #endif #ifdef HAVE_STAT #include /* for stat() */ #endif #include #ifdef HAVE_W32_SYSTEM #include #endif #ifdef __VMS # include "vms.h" #endif #define INCLUDED_BY_MAIN_MODULE 1 #include "packet.h" #include "iobuf.h" #include "memory.h" #include "util.h" #include "main.h" #include "options.h" #include "keydb.h" #include "trustdb.h" #include "mpi.h" #include "cipher.h" #include "filter.h" #include "ttyio.h" #include "i18n.h" #include "status.h" #include "keyserver-internal.h" #include "exec.h" #include "cardglue.h" #ifdef ENABLE_CARD_SUPPORT #include "ccid-driver.h" #endif #if defined(HAVE_DOSISH_SYSTEM) || defined(__CYGWIN__) #define MY_O_BINARY O_BINARY #ifndef S_IRGRP # define S_IRGRP 0 # define S_IWGRP 0 #endif #else #define MY_O_BINARY 0 #endif enum cmd_and_opt_values { aNull = 0, oArmor = 'a', aDetachedSign = 'b', aSym = 'c', aDecrypt = 'd', aEncr = 'e', oInteractive = 'i', oKOption = 'k', oDryRun = 'n', oOutput = 'o', oQuiet = 'q', oRecipient = 'r', oHiddenRecipient = 'R', aSign = 's', oTextmodeShort= 't', oLocalUser = 'u', oVerbose = 'v', oCompress = 'z', oSetNotation = 'N', aListSecretKeys = 'K', oBatch = 500, oMaxOutput, oSigNotation, oCertNotation, oShowNotation, oNoShowNotation, aEncrFiles, aEncrSym, aDecryptFiles, aClearsign, aStore, aKeygen, aSignEncr, aSignEncrSym, aSignSym, aSignKey, aLSignKey, aListConfig, aGPGConfList, aGPGConfTest, aListPackets, aEditKey, aDeleteKeys, aDeleteSecretKeys, aDeleteSecretAndPublicKeys, aKMode, aKModeC, aImport, aFastImport, aVerify, aVerifyFiles, aListKeys, aListSigs, aSendKeys, aRecvKeys, aSearchKeys, aRefreshKeys, aFetchKeys, aExport, aExportSecret, aExportSecretSub, aCheckKeys, aGenRevoke, aDesigRevoke, aPrimegen, aPrintMD, aPrintMDs, aCheckTrustDB, aUpdateTrustDB, aFixTrustDB, aListTrustDB, aListTrustPath, aExportOwnerTrust, aListOwnerTrust, aImportOwnerTrust, aDeArmor, aEnArmor, aGenRandom, aPipeMode, aRebuildKeydbCaches, aCardStatus, aCardEdit, aChangePIN, oTextmode, oNoTextmode, oExpert, oNoExpert, oDefSigExpire, oAskSigExpire, oNoAskSigExpire, oDefCertExpire, oAskCertExpire, oNoAskCertExpire, oDefCertLevel, oMinCertLevel, oAskCertLevel, oNoAskCertLevel, oFingerprint, oWithFingerprint, oAnswerYes, oAnswerNo, oKeyring, oPrimaryKeyring, oSecretKeyring, oShowKeyring, oDefaultKey, oDefRecipient, oDefRecipientSelf, oNoDefRecipient, oOptions, oDebug, oDebugAll, oDebugLevel, oDebugCCIDDriver, oStatusFD, oStatusFile, oAttributeFD, oAttributeFile, oEmitVersion, oNoEmitVersion, oCompletesNeeded, oMarginalsNeeded, oMaxCertDepth, oLoadExtension, oGnuPG, oRFC1991, oRFC2440, oRFC4880, oOpenPGP, oPGP2, oPGP6, oPGP7, oPGP8, oRFC2440Text, oNoRFC2440Text, oCipherAlgo, oDigestAlgo, oCertDigestAlgo, oCompressAlgo, oCompressLevel, oBZ2CompressLevel, oBZ2DecompressLowmem, oPasswd, oPasswdFD, oPasswdFile, oPasswdRepeat, oCommandFD, oCommandFile, oQuickRandom, oNoVerbose, oTrustDBName, oNoSecmemWarn, oRequireSecmem, oNoRequireSecmem, oNoPermissionWarn, oNoMDCWarn, oNoArmor, oNoDefKeyring, oNoGreeting, oNoTTY, oNoOptions, oNoBatch, oHomedir, oWithColons, oWithKeyData, oSkipVerify, oCompressKeys, oCompressSigs, oAlwaysTrust, oTrustModel, oForceOwnertrust, oRunAsShmCP, oSetFilename, oForYourEyesOnly, oNoForYourEyesOnly, oSetPolicyURL, oSigPolicyURL, oCertPolicyURL, oShowPolicyURL, oNoShowPolicyURL, oSigKeyserverURL, oUseEmbeddedFilename, oNoUseEmbeddedFilename, oComment, oDefaultComment, oNoComments, oThrowKeyids, oNoThrowKeyids, oShowPhotos, oNoShowPhotos, oPhotoViewer, oForceV3Sigs, oNoForceV3Sigs, oForceV4Certs, oNoForceV4Certs, oForceMDC, oNoForceMDC, oDisableMDC, oNoDisableMDC, oS2KMode, oS2KDigest, oS2KCipher, oS2KCount, oSimpleSKChecksum, oDisplayCharset, oNotDashEscaped, oEscapeFrom, oNoEscapeFrom, oLockOnce, oLockMultiple, oLockNever, oKeyServer, oKeyServerOptions, oImportOptions, oExportOptions, oListOptions, oVerifyOptions, oTempDir, oExecPath, oEncryptTo, oHiddenEncryptTo, oNoEncryptTo, oLoggerFD, oLoggerFile, oUtf8Strings, oNoUtf8Strings, oDisableCipherAlgo, oDisablePubkeyAlgo, oAllowNonSelfsignedUID, oNoAllowNonSelfsignedUID, oAllowFreeformUID, oNoAllowFreeformUID, oAllowSecretKeyImport, oEnableSpecialFilenames, oNoLiteral, oSetFilesize, oHonorHttpProxy, oFastListMode, oListOnly, oIgnoreTimeConflict, oIgnoreValidFrom, oIgnoreCrcError, oIgnoreMDCError, oShowSessionKey, oOverrideSessionKey, oNoRandomSeedFile, oAutoKeyRetrieve, oNoAutoKeyRetrieve, oUseAgent, oNoUseAgent, oGpgAgentInfo, oMergeOnly, oTryAllSecrets, oTrustedKey, oNoExpensiveTrustChecks, oFixedListMode, oNoSigCache, oAutoCheckTrustDB, oNoAutoCheckTrustDB, oPreservePermissions, oDefaultPreferenceList, oDefaultKeyserverURL, oPersonalCipherPreferences, oPersonalDigestPreferences, oPersonalCompressPreferences, oDisplay, oTTYname, oTTYtype, oLCctype, oLCmessages, oGroup, oUnGroup, oNoGroups, oStrict, oNoStrict, oMangleDosFilenames, oNoMangleDosFilenames, oEnableProgressFilter, oMultifile, oKeyidFormat, oExitOnStatusWriteError, oLimitCardInsertTries, oReaderPort, octapiDriver, opcscDriver, oDisableCCID, oRequireCrossCert, oNoRequireCrossCert, oAutoKeyLocate, oNoAutoKeyLocate, oAllowMultisigVerification, oEnableLargeRSA, oDisableLargeRSA, oEnableDSA2, oDisableDSA2, oAllowMultipleMessages, oNoAllowMultipleMessages, oAllowWeakDigestAlgos, oWeakDigest, oNoop }; static ARGPARSE_OPTS opts[] = { { 300, NULL, 0, N_("@Commands:\n ") }, { aSign, "sign", 256, N_("|[file]|make a signature")}, { aClearsign, "clearsign", 256, N_("|[file]|make a clear text signature")}, { aDetachedSign, "detach-sign", 256, N_("make a detached signature")}, { aEncr, "encrypt", 256, N_("encrypt data")}, { aEncrFiles, "encrypt-files", 256, "@"}, { aSym, "symmetric", 256, N_("encryption only with symmetric cipher")}, { aStore, "store", 256, "@"}, { aDecrypt, "decrypt", 256, N_("decrypt data (default)")}, { aDecryptFiles, "decrypt-files", 256, "@"}, { aVerify, "verify" , 256, N_("verify a signature")}, { aVerifyFiles, "verify-files" , 256, "@" }, { aListKeys, "list-keys", 256, N_("list keys")}, { aListKeys, "list-public-keys", 256, "@" }, { aListSigs, "list-sigs", 256, N_("list keys and signatures")}, { aCheckKeys, "check-sigs",256, N_("list and check key signatures")}, { oFingerprint, "fingerprint", 256, N_("list keys and fingerprints")}, { aListSecretKeys, "list-secret-keys", 256, N_("list secret keys")}, { aKeygen, "gen-key", 256, N_("generate a new key pair")}, { aDeleteKeys,"delete-keys",256,N_("remove keys from the public keyring")}, { aDeleteSecretKeys, "delete-secret-keys",256, N_("remove keys from the secret keyring")}, { aSignKey, "sign-key" ,256, N_("sign a key")}, { aLSignKey, "lsign-key" ,256, N_("sign a key locally")}, { aEditKey, "edit-key" ,256, N_("sign or edit a key")}, { aGenRevoke, "gen-revoke",256, N_("generate a revocation certificate")}, { aDesigRevoke, "desig-revoke",256, "@" }, { aExport, "export" , 256, N_("export keys") }, { aSendKeys, "send-keys" , 256, N_("export keys to a key server") }, { aRecvKeys, "recv-keys" , 256, N_("import keys from a key server") }, { aSearchKeys, "search-keys" , 256, N_("search for keys on a key server") }, { aRefreshKeys, "refresh-keys", 256, N_("update all keys from a keyserver")}, { aFetchKeys, "fetch-keys" , 256, "@" }, { aExportSecret, "export-secret-keys" , 256, "@" }, { aExportSecretSub, "export-secret-subkeys" , 256, "@" }, { aImport, "import", 256 , N_("import/merge keys")}, { aFastImport, "fast-import", 256 , "@"}, #ifdef ENABLE_CARD_SUPPORT { aCardStatus, "card-status", 256, N_("print the card status")}, { aCardEdit, "card-edit", 256, N_("change data on a card")}, { aChangePIN, "change-pin", 256, N_("change a card's PIN")}, #endif { aListConfig, "list-config", 256, "@"}, { aGPGConfList, "gpgconf-list", 256, "@" }, { aGPGConfTest, "gpgconf-test", 256, "@" }, { aListPackets, "list-packets",256, "@"}, { aExportOwnerTrust, "export-ownertrust", 256, "@"}, { aImportOwnerTrust, "import-ownertrust", 256, "@"}, { aUpdateTrustDB, "update-trustdb",0 , N_("update the trust database")}, { aCheckTrustDB, "check-trustdb", 0, "@"}, { aFixTrustDB, "fix-trustdb", 0, "@"}, { aDeArmor, "dearmor", 256, "@"}, { aDeArmor, "dearmour", 256, "@"}, { aEnArmor, "enarmor", 256, "@"}, { aEnArmor, "enarmour", 256, "@"}, { aPrintMD, "print-md" , 256, N_("|algo [files]|print message digests")}, { aPrimegen, "gen-prime" , 256, "@" }, { aGenRandom, "gen-random" , 256, "@" }, { 301, NULL, 0, N_("@\nOptions:\n ") }, { oArmor, "armor", 0, N_("create ascii armored output")}, { oArmor, "armour", 0, "@" }, { oRecipient, "recipient", 2, N_("|NAME|encrypt for NAME")}, { oHiddenRecipient, "hidden-recipient", 2, "@" }, { oRecipient, "remote-user", 2, "@"}, /* old option name */ { oDefRecipient, "default-recipient", 2, "@"}, { oDefRecipientSelf, "default-recipient-self", 0, "@"}, { oNoDefRecipient, "no-default-recipient", 0, "@" }, { oTempDir, "temp-directory", 2, "@" }, { oExecPath, "exec-path", 2, "@" }, { oEncryptTo, "encrypt-to", 2, "@" }, { oHiddenEncryptTo, "hidden-encrypt-to", 2, "@" }, { oNoEncryptTo, "no-encrypt-to", 0, "@" }, { oLocalUser, "local-user",2, N_("use this user-id to sign or decrypt")}, { oCompress, NULL, 1, N_("|N|set compress level N (0 disables)") }, { oCompressLevel, "compress-level", 1, "@" }, { oBZ2CompressLevel, "bzip2-compress-level", 1, "@" }, { oBZ2DecompressLowmem, "bzip2-decompress-lowmem", 0, "@" }, { oTextmodeShort, NULL, 0, "@"}, { oTextmode, "textmode", 0, N_("use canonical text mode")}, { oNoTextmode, "no-textmode", 0, "@"}, { oExpert, "expert", 0, "@"}, { oNoExpert, "no-expert", 0, "@"}, { oDefSigExpire, "default-sig-expire", 2, "@"}, { oAskSigExpire, "ask-sig-expire", 0, "@"}, { oNoAskSigExpire, "no-ask-sig-expire", 0, "@"}, { oDefCertExpire, "default-cert-expire", 2, "@"}, { oAskCertExpire, "ask-cert-expire", 0, "@"}, { oNoAskCertExpire, "no-ask-cert-expire", 0, "@"}, { oDefCertLevel, "default-cert-level", 1, "@"}, { oMinCertLevel, "min-cert-level", 1, "@"}, { oAskCertLevel, "ask-cert-level", 0, "@"}, { oNoAskCertLevel, "no-ask-cert-level", 0, "@"}, { oOutput, "output", 2, N_("use as output file")}, { oMaxOutput, "max-output", 16|4, "@" }, { oVerbose, "verbose", 0, N_("verbose") }, { oQuiet, "quiet", 0, "@"}, { oNoTTY, "no-tty", 0, "@"}, { oForceV3Sigs, "force-v3-sigs", 0, "@"}, { oNoForceV3Sigs, "no-force-v3-sigs", 0, "@"}, { oForceV4Certs, "force-v4-certs", 0, "@"}, { oNoForceV4Certs, "no-force-v4-certs", 0, "@"}, { oForceMDC, "force-mdc", 0, "@"}, { oNoForceMDC, "no-force-mdc", 0, "@" }, { oDisableMDC, "disable-mdc", 0, "@"}, { oNoDisableMDC, "no-disable-mdc", 0, "@" }, { oDryRun, "dry-run", 0, N_("do not make any changes") }, { oInteractive, "interactive", 0, N_("prompt before overwriting") }, { oUseAgent, "use-agent",0, "@"}, { oNoUseAgent, "no-use-agent",0, "@"}, { oGpgAgentInfo, "gpg-agent-info",2, "@"}, { oBatch, "batch", 0, "@"}, { oAnswerYes, "yes", 0, "@"}, { oAnswerNo, "no", 0, "@"}, { oKeyring, "keyring", 2, "@"}, { oPrimaryKeyring, "primary-keyring",2, "@" }, { oSecretKeyring, "secret-keyring", 2, "@"}, { oShowKeyring, "show-keyring", 0, "@"}, { oDefaultKey, "default-key", 2, "@"}, { oKeyServer, "keyserver", 2, "@"}, { oKeyServerOptions, "keyserver-options",2,"@"}, { oImportOptions, "import-options",2,"@"}, { oExportOptions, "export-options",2,"@"}, { oListOptions, "list-options",2,"@"}, { oVerifyOptions, "verify-options",2,"@"}, { oDisplayCharset, "display-charset", 2, "@"}, { oDisplayCharset, "charset", 2, "@"}, { oOptions, "options", 2, "@"}, { oDebug, "debug" ,4|16, "@"}, { oDebugAll, "debug-all" ,0, "@"}, { oDebugLevel, "debug-level" ,2, "@"}, { oStatusFD, "status-fd" ,1, "@"}, { oStatusFile, "status-file" ,2, "@"}, { oAttributeFD, "attribute-fd" ,1, "@" }, { oAttributeFile, "attribute-file" ,2, "@" }, { oNoop, "sk-comments", 0, "@"}, { oNoop, "no-sk-comments", 0, "@"}, { oCompletesNeeded, "completes-needed", 1, "@"}, { oMarginalsNeeded, "marginals-needed", 1, "@"}, { oMaxCertDepth, "max-cert-depth", 1, "@" }, { oTrustedKey, "trusted-key", 2, "@"}, { oLoadExtension, "load-extension", 2, "@"}, { oGnuPG, "gnupg", 0, "@"}, { oGnuPG, "no-pgp2", 0, "@"}, { oGnuPG, "no-pgp6", 0, "@"}, { oGnuPG, "no-pgp7", 0, "@"}, { oGnuPG, "no-pgp8", 0, "@"}, { oRFC1991, "rfc1991", 0, "@"}, { oRFC2440, "rfc2440", 0, "@" }, { oRFC4880, "rfc4880", 0, "@" }, { oOpenPGP, "openpgp", 0, N_("use strict OpenPGP behavior")}, { oPGP2, "pgp2", 0, N_("generate PGP 2.x compatible messages")}, { oPGP6, "pgp6", 0, "@"}, { oPGP7, "pgp7", 0, "@"}, { oPGP8, "pgp8", 0, "@"}, { oRFC2440Text, "rfc2440-text", 0, "@"}, { oNoRFC2440Text, "no-rfc2440-text", 0, "@"}, { oS2KMode, "s2k-mode", 1, "@"}, { oS2KDigest, "s2k-digest-algo", 2, "@"}, { oS2KCipher, "s2k-cipher-algo", 2, "@"}, { oS2KCount, "s2k-count", 1, "@"}, { oSimpleSKChecksum, "simple-sk-checksum", 0, "@"}, { oCipherAlgo, "cipher-algo", 2, "@"}, { oDigestAlgo, "digest-algo", 2, "@"}, { oCertDigestAlgo, "cert-digest-algo", 2 , "@" }, { oCompressAlgo,"compress-algo", 2, "@"}, { oCompressAlgo, "compression-algo", 2, "@"}, /* Alias */ { oThrowKeyids, "throw-keyid", 0, "@"}, { oThrowKeyids, "throw-keyids", 0, "@"}, { oNoThrowKeyids, "no-throw-keyid", 0, "@" }, { oNoThrowKeyids, "no-throw-keyids", 0, "@" }, { oShowPhotos, "show-photos", 0, "@" }, { oNoShowPhotos, "no-show-photos", 0, "@" }, { oPhotoViewer, "photo-viewer", 2, "@" }, { oSetNotation, "set-notation", 2, "@" }, { oSetNotation, "notation-data", 2, "@" }, /* Alias */ { oSigNotation, "sig-notation", 2, "@" }, { oCertNotation, "cert-notation", 2, "@" }, { 302, NULL, 0, N_( "@\n(See the man page for a complete listing of all commands and options)\n" )}, { 303, NULL, 0, N_("@\nExamples:\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" ) }, /* hidden options */ { aListOwnerTrust, "list-ownertrust", 256, "@"}, /* deprecated */ { aPrintMDs, "print-mds" , 256, "@"}, /* old */ { aListTrustDB, "list-trustdb",0 , "@"}, /* Not yet used */ /* { aListTrustPath, "list-trust-path",0, "@"}, */ { aPipeMode, "pipemode", 0, "@" }, { oKOption, NULL, 0, "@"}, { oPasswd, "passphrase",2, "@" }, { oPasswdFD, "passphrase-fd",1, "@" }, { oPasswdFile, "passphrase-file",2, "@" }, { oPasswdRepeat, "passphrase-repeat", 1, "@"}, { oCommandFD, "command-fd",1, "@" }, { oCommandFile, "command-file",2, "@" }, { oQuickRandom, "quick-random", 0, "@"}, { oNoVerbose, "no-verbose", 0, "@"}, { oTrustDBName, "trustdb-name", 2, "@" }, { oNoSecmemWarn, "no-secmem-warning", 0, "@" }, { oRequireSecmem,"require-secmem", 0, "@" }, { oNoRequireSecmem,"no-require-secmem", 0, "@" }, { oNoPermissionWarn, "no-permission-warning", 0, "@" }, { oNoMDCWarn, "no-mdc-warning", 0, "@" }, { oNoArmor, "no-armor", 0, "@"}, { oNoArmor, "no-armour", 0, "@"}, { oNoDefKeyring, "no-default-keyring", 0, "@" }, { oNoGreeting, "no-greeting", 0, "@" }, { oNoOptions, "no-options", 0, "@" }, /* shortcut for --options /dev/null */ { oHomedir, "homedir", 2, "@" }, /* defaults to "~/.gnupg" */ { oNoBatch, "no-batch", 0, "@" }, { oWithColons, "with-colons", 0, "@"}, { oWithKeyData,"with-key-data", 0, "@"}, { aListKeys, "list-key", 0, "@" }, /* alias */ { aListSigs, "list-sig", 0, "@" }, /* alias */ { aCheckKeys, "check-sig",0, "@" }, /* alias */ { oSkipVerify, "skip-verify",0, "@" }, { oCompressKeys, "compress-keys",0, "@"}, { oCompressSigs, "compress-sigs",0, "@"}, { oDefCertLevel, "default-cert-check-level", 1, "@"}, /* Old option */ { oAlwaysTrust, "always-trust", 0, "@"}, { oTrustModel, "trust-model", 2, "@"}, { oForceOwnertrust, "force-ownertrust", 2, "@"}, { oRunAsShmCP, "run-as-shm-coprocess", 4, "@" }, { oSetFilename, "set-filename", 2, "@" }, { oForYourEyesOnly, "for-your-eyes-only", 0, "@" }, { oNoForYourEyesOnly, "no-for-your-eyes-only", 0, "@" }, { oSetPolicyURL, "set-policy-url", 2, "@" }, { oSigPolicyURL, "sig-policy-url", 2, "@" }, { oCertPolicyURL, "cert-policy-url", 2, "@" }, { oShowPolicyURL, "show-policy-url", 0, "@" }, { oNoShowPolicyURL, "no-show-policy-url", 0, "@" }, { oSigKeyserverURL, "sig-keyserver-url", 2, "@" }, { oShowNotation, "show-notation", 0, "@" }, { oNoShowNotation, "no-show-notation", 0, "@" }, { oComment, "comment", 2, "@" }, { oDefaultComment, "default-comment", 0, "@" }, { oNoComments, "no-comments", 0, "@" }, { oEmitVersion, "emit-version", 0, "@"}, { oNoEmitVersion, "no-emit-version", 0, "@"}, { oNoEmitVersion, "no-version", 0, "@"}, /* alias */ { oNotDashEscaped, "not-dash-escaped", 0, "@" }, { oEscapeFrom, "escape-from-lines", 0, "@" }, { oNoEscapeFrom, "no-escape-from-lines", 0, "@" }, { oLockOnce, "lock-once", 0, "@" }, { oLockMultiple, "lock-multiple", 0, "@" }, { oLockNever, "lock-never", 0, "@" }, { oLoggerFD, "logger-fd",1, "@" }, { oLoggerFile, "logger-file",2, "@" }, { oUseEmbeddedFilename, "use-embedded-filename", 0, "@" }, { oNoUseEmbeddedFilename, "no-use-embedded-filename", 0, "@" }, { oUtf8Strings, "utf8-strings", 0, "@" }, { oNoUtf8Strings, "no-utf8-strings", 0, "@" }, { oWithFingerprint, "with-fingerprint", 0, "@" }, { oDisableCipherAlgo, "disable-cipher-algo", 2, "@" }, { oDisablePubkeyAlgo, "disable-pubkey-algo", 2, "@" }, { oAllowNonSelfsignedUID, "allow-non-selfsigned-uid", 0, "@" }, { oNoAllowNonSelfsignedUID, "no-allow-non-selfsigned-uid", 0, "@" }, { oAllowFreeformUID, "allow-freeform-uid", 0, "@" }, { oNoAllowFreeformUID, "no-allow-freeform-uid", 0, "@" }, { oNoLiteral, "no-literal", 0, "@" }, { oSetFilesize, "set-filesize", 20, "@" }, { oHonorHttpProxy,"honor-http-proxy", 0, "@" }, { oFastListMode,"fast-list-mode", 0, "@" }, { oFixedListMode,"fixed-list-mode", 0, "@" }, { oListOnly, "list-only", 0, "@"}, { oIgnoreTimeConflict, "ignore-time-conflict", 0, "@" }, { oIgnoreValidFrom, "ignore-valid-from", 0, "@" }, { oIgnoreCrcError, "ignore-crc-error", 0,"@" }, { oIgnoreMDCError, "ignore-mdc-error", 0,"@" }, { oShowSessionKey, "show-session-key", 0, "@" }, { oOverrideSessionKey, "override-session-key", 2, "@" }, { oNoRandomSeedFile, "no-random-seed-file", 0, "@" }, { oAutoKeyRetrieve, "auto-key-retrieve", 0, "@" }, { oNoAutoKeyRetrieve, "no-auto-key-retrieve", 0, "@" }, { oNoSigCache, "no-sig-cache", 0, "@" }, { oNoop, "no-sig-create-check", 0, "@" }, { oAutoCheckTrustDB, "auto-check-trustdb", 0, "@"}, { oNoAutoCheckTrustDB, "no-auto-check-trustdb", 0, "@"}, { oMergeOnly, "merge-only", 0, "@" }, { oAllowSecretKeyImport, "allow-secret-key-import", 0, "@" }, { oTryAllSecrets, "try-all-secrets", 0, "@" }, { oEnableSpecialFilenames, "enable-special-filenames", 0, "@" }, { oNoExpensiveTrustChecks, "no-expensive-trust-checks", 0, "@" }, { aDeleteSecretAndPublicKeys, "delete-secret-and-public-keys",256, "@" }, { aRebuildKeydbCaches, "rebuild-keydb-caches", 256, "@"}, { oPreservePermissions, "preserve-permissions", 0, "@"}, { oDefaultPreferenceList, "default-preference-list", 2, "@"}, { oDefaultKeyserverURL, "default-keyserver-url", 2, "@"}, { oPersonalCipherPreferences, "personal-cipher-preferences", 2, "@"}, { oPersonalDigestPreferences, "personal-digest-preferences", 2, "@"}, { oPersonalCompressPreferences, "personal-compress-preferences", 2, "@"}, { oWeakDigest, "weak-digest", 2, "@"}, /* Aliases. I constantly mistype these, and assume other people do as well. */ { oPersonalCipherPreferences, "personal-cipher-prefs", 2, "@"}, { oPersonalDigestPreferences, "personal-digest-prefs", 2, "@"}, { oPersonalCompressPreferences, "personal-compress-prefs", 2, "@"}, { oDisplay, "display", 2, "@" }, { oTTYname, "ttyname", 2, "@" }, { oTTYtype, "ttytype", 2, "@" }, { oLCctype, "lc-ctype", 2, "@" }, { oLCmessages, "lc-messages", 2, "@" }, { oGroup, "group", 2, "@" }, { oUnGroup, "ungroup", 2, "@" }, { oNoGroups, "no-groups", 0, "@" }, { oStrict, "strict", 0, "@" }, { oNoStrict, "no-strict", 0, "@" }, { oMangleDosFilenames, "mangle-dos-filenames", 0, "@" }, { oNoMangleDosFilenames, "no-mangle-dos-filenames", 0, "@" }, { oEnableProgressFilter, "enable-progress-filter", 0, "@" }, { oMultifile, "multifile", 0, "@" }, { oKeyidFormat, "keyid-format", 2, "@" }, { oExitOnStatusWriteError, "exit-on-status-write-error", 0, "@" }, { oLimitCardInsertTries, "limit-card-insert-tries", 1, "@"}, { oReaderPort, "reader-port", 2, "@"}, { octapiDriver, "ctapi-driver", 2, "@"}, { opcscDriver, "pcsc-driver", 2, "@"}, { oDisableCCID, "disable-ccid", 0, "@"}, #if defined(ENABLE_CARD_SUPPORT) && defined(HAVE_LIBUSB) { oDebugCCIDDriver, "debug-ccid-driver", 0, "@"}, #endif { oAllowMultisigVerification, "allow-multisig-verification", 0, "@"}, { oEnableLargeRSA, "enable-large-rsa", 0, "@"}, { oDisableLargeRSA, "disable-large-rsa", 0, "@"}, { oEnableDSA2, "enable-dsa2", 0, "@"}, { oDisableDSA2, "disable-dsa2", 0, "@"}, { oAllowMultipleMessages, "allow-multiple-messages", 0, "@"}, { oNoAllowMultipleMessages, "no-allow-multiple-messages", 0, "@"}, { oAllowWeakDigestAlgos, "allow-weak-digest-algos", 0, "@"}, /* These two are aliases to help users of the PGP command line product use gpg with minimal pain. Many commands are common already as they seem to have borrowed commands from us. Now I'm returning the favor. */ { oLocalUser, "sign-with", 2, "@" }, { oRecipient, "user", 2, "@" }, { oRequireCrossCert, "require-backsigs", 0, "@"}, { oRequireCrossCert, "require-cross-certification", 0, "@"}, { oNoRequireCrossCert, "no-require-backsigs", 0, "@"}, { oNoRequireCrossCert, "no-require-cross-certification", 0, "@"}, { oAutoKeyLocate, "auto-key-locate", 2, "@"}, { oNoAutoKeyLocate, "no-auto-key-locate", 0, "@"}, {0,NULL,0,NULL} }; #ifdef ENABLE_SELINUX_HACKS #define ALWAYS_ADD_KEYRINGS 1 #else #define ALWAYS_ADD_KEYRINGS 0 #endif int g10_errors_seen = 0; static int utf8_strings = 0; static int maybe_setuid = 1; static char *build_list( const char *text, char letter, const char *(*mapf)(int), int (*chkf)(int) ); static void set_cmd( enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd ); static void print_mds( const char *fname, int algo ); static void add_notation_data( const char *string, int which ); static void add_policy_url( const char *string, int which ); static void add_keyserver_url( const char *string, int which ); const char * strusage( int level ) { static char *digests, *pubkeys, *ciphers, *zips; const char *p; switch( level ) { case 11: p = "gpg (GnuPG)"; break; case 13: p = VERSION; break; case 17: p = PRINTABLE_OS_NAME; break; case 19: p = _("Please report bugs to .\n"); break; #ifdef IS_DEVELOPMENT_VERSION case 20: p="NOTE: THIS IS A DEVELOPMENT VERSION!"; break; case 21: p="It is only intended for test purposes and should NOT be"; break; case 22: p="used in a production environment or with production keys!"; break; #endif case 1: case 40: p = _("Usage: gpg [options] [files] (-h for help)"); break; case 41: p = _("Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n"); break; case 31: p = "\nHome: "; break; #ifndef __riscos__ case 32: p = opt.homedir; break; #else /* __riscos__ */ case 32: p = make_filename(opt.homedir, NULL); break; #endif /* __riscos__ */ case 33: p = _("\nSupported algorithms:\n"); break; case 34: if( !pubkeys ) pubkeys = build_list(_("Pubkey: "), 0, pubkey_algo_to_string, check_pubkey_algo ); p = pubkeys; break; case 35: if( !ciphers ) ciphers = build_list(_("Cipher: "), 'S', cipher_algo_to_string, check_cipher_algo ); p = ciphers; break; case 36: if( !digests ) digests = build_list(_("Hash: "), 'H', digest_algo_to_string, check_digest_algo ); p = digests; break; case 37: if( !zips ) zips = build_list(_("Compression: "),'Z',compress_algo_to_string, check_compress_algo); p = zips; break; default: p = default_strusage(level); } return p; } static char * build_list (const char *text, char letter, const char * (*mapf)(int), int (*chkf)(int)) { membuf_t mb; int indent; int i, j, len; const char *s; char *string; if (maybe_setuid) secmem_init (0); /* Drop setuid */ indent = strlen (text); len = 0; init_membuf (&mb, 512); for (i=0; i <= 110; i++ ) { if (!chkf (i) && (s = mapf (i))) { if (mb.len - len > 60) { put_membuf_str (&mb, ",\n"); len = mb.len; for (j=0; j < indent; j++) put_membuf_str (&mb, " "); } else if (mb.len) put_membuf_str (&mb, ", "); else put_membuf_str (&mb, text); put_membuf_str (&mb, s); if (opt.verbose && letter) { char num[20]; snprintf (num, sizeof num, " (%c%d)", letter, i); put_membuf_str (&mb, num); } } } if (mb.len) put_membuf_str (&mb, "\n"); put_membuf (&mb, "", 1); string = get_membuf (&mb, NULL); return xrealloc (string, strlen (string)+1); } static void i18n_init(void) { #ifdef USE_SIMPLE_GETTEXT set_gettext_file (PACKAGE, "Software\\GNU\\GnuPG"); #else #ifdef ENABLE_NLS setlocale( LC_ALL, "" ); bindtextdomain (PACKAGE, LOCALEDIR); textdomain( PACKAGE ); #endif #endif } static void wrong_args( const char *text) { fputs(_("usage: gpg [options] "),stderr); fputs(text,stderr); putc('\n',stderr); g10_exit(2); } static char * make_username( const char *string ) { char *p; if( utf8_strings ) p = xstrdup(string); else p = native_to_utf8( string ); return p; } static void set_debug(void) { if( opt.debug & DBG_MEMORY_VALUE ) memory_debug_mode = 1; if( opt.debug & DBG_MEMSTAT_VALUE ) memory_stat_debug_mode = 1; if( opt.debug & DBG_MPI_VALUE ) mpi_debug_mode = 1; if( opt.debug & DBG_CIPHER_VALUE ) g10c_debug_mode = 1; if( opt.debug & DBG_IOBUF_VALUE ) iobuf_debug_mode = 1; } /* We need the home directory also in some other directories, so make sure that both variables are always in sync. */ static void set_homedir (char *dir) { if (!dir) dir = ""; g10_opt_homedir = opt.homedir = dir; } /* We set the screen dimensions for UI purposes. Do not allow screens smaller than 80x24 for the sake of simplicity. */ static void set_screen_dimensions(void) { #ifndef _WIN32 char *str; str=getenv("COLUMNS"); if(str) opt.screen_columns=atoi(str); str=getenv("LINES"); if(str) opt.screen_lines=atoi(str); #endif if(opt.screen_columns<80 || opt.screen_columns>255) opt.screen_columns=80; if(opt.screen_lines<24 || opt.screen_lines>255) opt.screen_lines=24; } /* Helper to open a file FNAME either for reading or writing to be used with --status-file etc functions. Not generally useful but it avoids the riscos specific functions and well some Windows people might like it too. Prints an error message and returns -1 on error. On success the file descriptor is returned. */ static int open_info_file (const char *fname, int for_write) { #ifdef __riscos__ return riscos_fdopenfile (fname, for_write); #elif defined (ENABLE_SELINUX_HACKS) /* We can't allow these even when testing for a secured filename because files to be secured might not yet been secured. This is similar to the option file but in that case it is unlikely that sensitive information may be retrieved by means of error messages. */ return -1; #else int fd; /* if (is_secured_filename (fname)) */ /* { */ /* fd = -1; */ /* errno = EPERM; */ /* } */ /* else */ /* { */ do { if (for_write) fd = open (fname, O_CREAT | O_TRUNC | O_WRONLY, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); else fd = open (fname, O_RDONLY | MY_O_BINARY); } while (fd == -1 && errno == EINTR); /* } */ if ( fd == -1) log_error ( for_write? _("can't create `%s': %s\n") : _("can't open `%s': %s\n"), fname, strerror(errno)); return fd; #endif } static void set_cmd( enum cmd_and_opt_values *ret_cmd, enum cmd_and_opt_values new_cmd ) { enum cmd_and_opt_values cmd = *ret_cmd; if( !cmd || cmd == new_cmd ) cmd = new_cmd; else if( cmd == aSign && new_cmd == aEncr ) cmd = aSignEncr; else if( cmd == aEncr && new_cmd == aSign ) cmd = aSignEncr; else if( cmd == aSign && new_cmd == aSym ) cmd = aSignSym; else if( cmd == aSym && new_cmd == aSign ) cmd = aSignSym; else if( cmd == aSym && new_cmd == aEncr ) cmd = aEncrSym; else if( cmd == aEncr && new_cmd == aSym ) cmd = aEncrSym; else if( cmd == aKMode && new_cmd == aSym ) cmd = aKModeC; else if (cmd == aSignEncr && new_cmd == aSym) cmd = aSignEncrSym; else if (cmd == aSignSym && new_cmd == aEncr) cmd = aSignEncrSym; else if (cmd == aEncrSym && new_cmd == aSign) cmd = aSignEncrSym; else if( ( cmd == aSign && new_cmd == aClearsign ) || ( cmd == aClearsign && new_cmd == aSign ) ) cmd = aClearsign; else { log_error(_("conflicting commands\n")); g10_exit(2); } *ret_cmd = cmd; } static void add_group(char *string) { char *name,*value; struct groupitem *item; /* Break off the group name */ name=strsep(&string,"="); if(string==NULL) { log_error(_("no = sign found in group definition `%s'\n"),name); return; } trim_trailing_ws(name,strlen(name)); /* Does this group already exist? */ for(item=opt.grouplist;item;item=item->next) if(strcasecmp(item->name,name)==0) break; if(!item) { item=xmalloc(sizeof(struct groupitem)); item->name=name; item->next=opt.grouplist; item->values=NULL; opt.grouplist=item; } /* Break apart the values */ while ((value= strsep(&string," \t"))) { if (*value) add_to_strlist2(&item->values,value,utf8_strings); } } static void rm_group(char *name) { struct groupitem *item,*last=NULL; trim_trailing_ws(name,strlen(name)); for(item=opt.grouplist;item;last=item,item=item->next) { if(strcasecmp(item->name,name)==0) { if(last) last->next=item->next; else opt.grouplist=item->next; free_strlist(item->values); xfree(item); break; } } } /* We need to check three things. 0) The homedir. It must be x00, a directory, and owned by the user. 1) The options/gpg.conf file. Okay unless it or its containing directory is group or other writable or not owned by us. Disable exec in this case. Returns true if the item is unsafe. */ static int check_permissions(const char *path,int item) { #if defined(HAVE_STAT) && !defined(HAVE_DOSISH_SYSTEM) static int homedir_cache=-1; char *tmppath,*dir; struct stat statbuf,dirbuf; int homedir=0,ret=0,checkonly=0; int perm=0,own=0,enc_dir_perm=0,enc_dir_own=0; if(opt.no_perm_warn) return 0; assert(item==0 || item==1 || item==2); tmppath=xstrdup(path); /* If the item is located in the homedir, but isn't the homedir, don't continue if we already checked the homedir itself. This is to avoid user confusion with an extra options file warning which could be rectified if the homedir itself had proper permissions. */ if(item!=0 && homedir_cache>-1 && ascii_strncasecmp(opt.homedir,tmppath,strlen(opt.homedir))==0) { ret=homedir_cache; goto end; } /* It's okay if the file or directory doesn't exist */ if(stat(tmppath,&statbuf)!=0) { ret=0; goto end; } /* Now check the enclosing directory. Theoretically, we could walk this test up to the root directory /, but for the sake of sanity, I'm stopping at one level down. */ dir=make_dirname(tmppath); if(stat(dir,&dirbuf)!=0 || !S_ISDIR(dirbuf.st_mode)) { /* Weird error */ ret=1; goto end; } xfree(dir); /* Assume failure */ ret=1; if(item==0) { /* The homedir must be x00, a directory, and owned by the user. */ if(S_ISDIR(statbuf.st_mode)) { if(statbuf.st_uid==getuid()) { if((statbuf.st_mode & (S_IRWXG|S_IRWXO))==0) ret=0; else perm=1; } else own=1; homedir_cache=ret; } } else if(item==1) { /* The options file. Okay unless it or its containing directory is group or other writable or not owned by us or root. */ if(S_ISREG(statbuf.st_mode)) { if(statbuf.st_uid==getuid() || statbuf.st_uid==0) { if((statbuf.st_mode & (S_IWGRP|S_IWOTH))==0) { /* it's not writable, so make sure the enclosing directory is also not writable */ if(dirbuf.st_uid==getuid() || dirbuf.st_uid==0) { if((dirbuf.st_mode & (S_IWGRP|S_IWOTH))==0) ret=0; else enc_dir_perm=1; } else enc_dir_own=1; } else { /* it's writable, so the enclosing directory had better not let people get to it. */ if(dirbuf.st_uid==getuid() || dirbuf.st_uid==0) { if((dirbuf.st_mode & (S_IRWXG|S_IRWXO))==0) ret=0; else perm=enc_dir_perm=1; /* unclear which one to fix! */ } else enc_dir_own=1; } } else own=1; } } else BUG(); if(!checkonly) { if(own) { if(item==0) log_info(_("WARNING: unsafe ownership on" " homedir `%s'\n"),tmppath); else log_info(_("WARNING: unsafe ownership on" " configuration file `%s'\n"),tmppath); } if(perm) { if(item==0) log_info(_("WARNING: unsafe permissions on" " homedir `%s'\n"),tmppath); else log_info(_("WARNING: unsafe permissions on" " configuration file `%s'\n"),tmppath); } if(enc_dir_own) { if(item==0) log_info(_("WARNING: unsafe enclosing directory ownership on" " homedir `%s'\n"),tmppath); else log_info(_("WARNING: unsafe enclosing directory ownership on" " configuration file `%s'\n"),tmppath); } if(enc_dir_perm) { if(item==0) log_info(_("WARNING: unsafe enclosing directory permissions on" " homedir `%s'\n"),tmppath); else log_info(_("WARNING: unsafe enclosing directory permissions on" " configuration file `%s'\n"),tmppath); } } end: xfree(tmppath); if(homedir) homedir_cache=ret; return ret; #endif /* HAVE_STAT && !HAVE_DOSISH_SYSTEM */ return 0; } static void print_algo_numbers(int (*checker)(int)) { int i,first=1; for(i=0;i<=110;i++) { if(!checker(i)) { if(first) first=0; else printf(";"); printf("%d",i); } } } static void print_algo_names(int (*checker)(int),const char *(*mapper)(int)) { int i,first=1; for(i=0;i<=110;i++) { if(!checker(i)) { if(first) first=0; else printf(";"); printf("%s",mapper(i)); } } } /* In the future, we can do all sorts of interesting configuration output here. For now, just give "group" as the Enigmail folks need it, and pubkey, cipher, hash, and compress as they may be useful for frontends. */ static void list_config(char *items) { int show_all=(items==NULL); char *name=NULL; if(!opt.with_colons) return; while(show_all || (name=strsep(&items," "))) { int any=0; if(show_all || ascii_strcasecmp(name,"group")==0) { struct groupitem *iter; for(iter=opt.grouplist;iter;iter=iter->next) { STRLIST sl; printf("cfg:group:"); print_string(stdout,iter->name,strlen(iter->name),':'); printf(":"); for(sl=iter->values;sl;sl=sl->next) { print_string2(stdout,sl->d,strlen(sl->d),':',';'); if(sl->next) printf(";"); } printf("\n"); } any=1; } if(show_all || ascii_strcasecmp(name,"version")==0) { printf("cfg:version:"); print_string(stdout,VERSION,strlen(VERSION),':'); printf("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"pubkey")==0) { printf("cfg:pubkey:"); print_algo_numbers(check_pubkey_algo); printf("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"cipher")==0) { printf("cfg:cipher:"); print_algo_numbers(check_cipher_algo); printf("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"ciphername")==0) { printf("cfg:ciphername:"); print_algo_names(check_cipher_algo,cipher_algo_to_string); printf("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"digest")==0 || ascii_strcasecmp(name,"hash")==0) { printf("cfg:digest:"); print_algo_numbers(check_digest_algo); printf("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"digestname")==0 || ascii_strcasecmp(name,"hashname")==0) { printf("cfg:digestname:"); print_algo_names(check_digest_algo,digest_algo_to_string); printf("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"compress")==0) { printf("cfg:compress:"); print_algo_numbers(check_compress_algo); printf("\n"); any=1; } if(show_all || ascii_strcasecmp(name,"ccid-reader-id")==0) { #if defined(ENABLE_CARD_SUPPORT) && defined(HAVE_LIBUSB) char *p, *p2, *list = ccid_get_reader_list (); for (p=list; p && (p2 = strchr (p, '\n')); p = p2+1) { *p2 = 0; printf("cfg:ccid-reader-id:%s\n", p); } free (list); #endif any=1; } if(show_all) break; if(!any) log_error(_("unknown configuration item `%s'\n"),name); } } /* List options and default values in the GPG Conf format. This is a new tool distributed with gnupg 1.9.x but we also want some limited support in older gpg versions. The output is the name of the configuration file and a list of options available for editing by gpgconf. */ static void gpgconf_list (const char *configfile) { /* The following definitions are taken from gnupg/tools/gpgconf-comp.c. */ #define GC_OPT_FLAG_NONE 0UL #define GC_OPT_FLAG_DEFAULT (1UL << 4) printf ("gpgconf-gpg.conf:%lu:\"%s\n", GC_OPT_FLAG_DEFAULT,configfile?configfile:"/dev/null"); printf ("verbose:%lu:\n", GC_OPT_FLAG_NONE); printf ("quiet:%lu:\n", GC_OPT_FLAG_NONE); printf ("keyserver:%lu:\n", GC_OPT_FLAG_NONE); printf ("reader-port:%lu:\n", GC_OPT_FLAG_NONE); } static int parse_subpacket_list(char *list) { char *tok; byte subpackets[128],i; int count=0; if(!list) { /* No arguments means all subpackets */ memset(subpackets+1,1,sizeof(subpackets)-1); count=127; } else { memset(subpackets,0,sizeof(subpackets)); /* Merge with earlier copy */ if(opt.show_subpackets) { byte *in; for(in=opt.show_subpackets;*in;in++) { if(*in>127 || *in<1) BUG(); if(!subpackets[*in]) count++; subpackets[*in]=1; } } while((tok=strsep(&list," ,"))) { if(!*tok) continue; i=atoi(tok); if(i>127 || i<1) return 0; if(!subpackets[i]) count++; subpackets[i]=1; } } xfree(opt.show_subpackets); opt.show_subpackets=xmalloc(count+1); opt.show_subpackets[count--]=0; for(i=1;i<128 && count>=0;i++) if(subpackets[i]) opt.show_subpackets[count--]=i; return 1; } static int parse_list_options(char *str) { char *subpackets=""; /* something that isn't NULL */ struct parse_options lopts[]= { {"show-photos",LIST_SHOW_PHOTOS,NULL, N_("display photo IDs during key listings")}, {"show-policy-urls",LIST_SHOW_POLICY_URLS,NULL, N_("show policy URLs during signature listings")}, {"show-notations",LIST_SHOW_NOTATIONS,NULL, N_("show all notations during signature listings")}, {"show-std-notations",LIST_SHOW_STD_NOTATIONS,NULL, N_("show IETF standard notations during signature listings")}, {"show-standard-notations",LIST_SHOW_STD_NOTATIONS,NULL, NULL}, {"show-user-notations",LIST_SHOW_USER_NOTATIONS,NULL, N_("show user-supplied notations during signature listings")}, {"show-keyserver-urls",LIST_SHOW_KEYSERVER_URLS,NULL, N_("show preferred keyserver URLs during signature listings")}, {"show-uid-validity",LIST_SHOW_UID_VALIDITY,NULL, N_("show user ID validity during key listings")}, {"show-unusable-uids",LIST_SHOW_UNUSABLE_UIDS,NULL, N_("show revoked and expired user IDs in key listings")}, {"show-unusable-subkeys",LIST_SHOW_UNUSABLE_SUBKEYS,NULL, N_("show revoked and expired subkeys in key listings")}, {"show-keyring",LIST_SHOW_KEYRING,NULL, N_("show the keyring name in key listings")}, {"show-sig-expire",LIST_SHOW_SIG_EXPIRE,NULL, N_("show expiration dates during signature listings")}, {"show-sig-subpackets",LIST_SHOW_SIG_SUBPACKETS,NULL, NULL}, {NULL,0,NULL,NULL} }; /* C99 allows for non-constant initializers, but we'd like to compile everywhere, so fill in the show-sig-subpackets argument here. Note that if the parse_options array changes, we'll have to change the subscript here. */ lopts[12].value=&subpackets; if(parse_options(str,&opt.list_options,lopts,1)) { if(opt.list_options&LIST_SHOW_SIG_SUBPACKETS) { /* Unset so users can pass multiple lists in. */ opt.list_options&=~LIST_SHOW_SIG_SUBPACKETS; if(!parse_subpacket_list(subpackets)) return 0; } else if(subpackets==NULL && opt.show_subpackets) { /* User did 'no-show-subpackets' */ xfree(opt.show_subpackets); opt.show_subpackets=NULL; } return 1; } else return 0; } /* Collapses argc/argv into a single string that must be freed */ static char * collapse_args(int argc,char *argv[]) { char *str=NULL; int i,first=1,len=0; for(i=0;i=65011712) return 255; /* Need count to be in the range 16-31 */ for(count=iterations>>6;count>=32;count>>=1) c++; result=(c<<4)|(count-16); if(S2K_DECODE_COUNT(result)flags=2; break; case oShowKeyring: deprecated_warning(configname,configlineno,"--show-keyring", "--list-options ","show-keyring"); opt.list_options|=LIST_SHOW_KEYRING; break; case oDebug: opt.debug |= pargs.r.ret_ulong; break; case oDebugAll: opt.debug = ~0; break; case oDebugLevel: break; /* Not supported. */ case oDebugCCIDDriver: #if defined(ENABLE_CARD_SUPPORT) && defined(HAVE_LIBUSB) ccid_set_debug_level (ccid_set_debug_level (1)+1); #endif break; case oStatusFD: set_status_fd( iobuf_translate_file_handle (pargs.r.ret_int, 1) ); break; case oStatusFile: set_status_fd ( open_info_file (pargs.r.ret_str, 1) ); break; case oAttributeFD: set_attrib_fd(iobuf_translate_file_handle (pargs.r.ret_int, 1)); break; case oAttributeFile: set_attrib_fd ( open_info_file (pargs.r.ret_str, 1) ); break; case oLoggerFD: log_set_logfile( NULL, iobuf_translate_file_handle (pargs.r.ret_int, 1)); break; case oLoggerFile: /* Our log code does not support the socket feature. Thus we ignore such log files to avoid problems with gpg.conf files which are also used by gpg2. */ if (strncmp (pargs.r.ret_str, "socket://", 9)) log_set_logfile( NULL, open_info_file (pargs.r.ret_str, 1) ); break; case oWithFingerprint: opt.with_fingerprint = 1; opt.fingerprint++; break; case oFingerprint: opt.fingerprint++; fpr_maybe_cmd = 1; break; case oSecretKeyring: append_to_strlist( &sec_nrings, pargs.r.ret_str); break; case oOptions: /* config files may not be nested (silently ignore them) */ if( !configfp ) { xfree(configname); configname = xstrdup(pargs.r.ret_str); goto next_pass; } break; case oNoArmor: opt.no_armor=1; opt.armor=0; break; case oNoDefKeyring: default_keyring = 0; break; case oNoGreeting: nogreeting = 1; break; case oNoVerbose: g10_opt_verbose = 0; opt.verbose = 0; opt.list_sigs=0; break; case oQuickRandom: quick_random_gen(1); break; case oEmitVersion: opt.emit_version++; break; case oNoEmitVersion: opt.emit_version=0; break; case oCompletesNeeded: opt.completes_needed = pargs.r.ret_int; break; case oMarginalsNeeded: opt.marginals_needed = pargs.r.ret_int; break; case oMaxCertDepth: opt.max_cert_depth = pargs.r.ret_int; break; case oTrustDBName: trustdb_name = pargs.r.ret_str; break; case oDefaultKey: opt.def_secret_key = pargs.r.ret_str; break; case oDefRecipient: if( *pargs.r.ret_str ) opt.def_recipient = make_username(pargs.r.ret_str); break; case oDefRecipientSelf: xfree(opt.def_recipient); opt.def_recipient = NULL; opt.def_recipient_self = 1; break; case oNoDefRecipient: xfree(opt.def_recipient); opt.def_recipient = NULL; opt.def_recipient_self = 0; break; case oNoOptions: opt.no_homedir_creation = 1; break; /* no-options */ case oHomedir: break; case oNoBatch: opt.batch = 0; break; case oWithKeyData: opt.with_key_data=1; /* fall thru */ case oWithColons: opt.with_colons=':'; break; case oSkipVerify: opt.skip_verify=1; break; case oCompressKeys: opt.compress_keys = 1; break; case aListSecretKeys: set_cmd( &cmd, aListSecretKeys); break; /* There are many programs (like mutt) that call gpg with --always-trust so keep this option around for a long time. */ case oAlwaysTrust: opt.trust_model=TM_ALWAYS; break; case oTrustModel: parse_trust_model(pargs.r.ret_str); break; case oForceOwnertrust: log_info(_("NOTE: %s is not for normal use!\n"), "--force-ownertrust"); opt.force_ownertrust=string_to_trust_value(pargs.r.ret_str); if(opt.force_ownertrust==-1) { log_error("invalid ownertrust `%s'\n",pargs.r.ret_str); opt.force_ownertrust=0; } break; case oLoadExtension: break; /* This is a dummy option since 1.4.13. */ case oRFC1991: opt.compliance = CO_RFC1991; opt.force_v4_certs = 0; opt.escape_from = 1; break; case oOpenPGP: case oRFC4880: /* This is effectively the same as RFC2440, but with "--enable-dsa2 --no-rfc2440-text --escape-from-lines --require-cross-certification". */ opt.compliance = CO_RFC4880; opt.flags.dsa2 = 1; opt.flags.require_cross_cert = 1; opt.rfc2440_text = 0; opt.allow_non_selfsigned_uid = 1; opt.allow_freeform_uid = 1; opt.pgp2_workarounds = 0; opt.escape_from = 1; opt.force_v3_sigs = 0; opt.compress_keys = 0; /* not mandated, but we do it */ opt.compress_sigs = 0; /* ditto. */ opt.not_dash_escaped = 0; opt.def_cipher_algo = 0; opt.def_digest_algo = 0; opt.cert_digest_algo = 0; opt.compress_algo = -1; opt.s2k_mode = 3; /* iterated+salted */ opt.s2k_digest_algo = DIGEST_ALGO_SHA1; opt.s2k_cipher_algo = CIPHER_ALGO_3DES; break; case oRFC2440: opt.compliance = CO_RFC2440; opt.flags.dsa2 = 0; opt.rfc2440_text = 1; opt.allow_non_selfsigned_uid = 1; opt.allow_freeform_uid = 1; opt.pgp2_workarounds = 0; opt.escape_from = 0; opt.force_v3_sigs = 0; opt.compress_keys = 0; /* not mandated, but we do it */ opt.compress_sigs = 0; /* ditto. */ opt.not_dash_escaped = 0; opt.def_cipher_algo = 0; opt.def_digest_algo = 0; opt.cert_digest_algo = 0; opt.compress_algo = -1; opt.s2k_mode = 3; /* iterated+salted */ opt.s2k_digest_algo = DIGEST_ALGO_SHA1; opt.s2k_cipher_algo = CIPHER_ALGO_3DES; break; case oPGP2: opt.compliance = CO_PGP2; break; case oPGP6: opt.compliance = CO_PGP6; break; case oPGP7: opt.compliance = CO_PGP7; break; case oPGP8: opt.compliance = CO_PGP8; break; case oGnuPG: opt.compliance = CO_GNUPG; break; case oCompressSigs: opt.compress_sigs = 1; break; case oRFC2440Text: opt.rfc2440_text=1; break; case oNoRFC2440Text: opt.rfc2440_text=0; break; case oRunAsShmCP: #ifndef __riscos__ # ifndef USE_SHM_COPROCESSING /* not possible in the option file, * but we print the warning here anyway */ log_error("shared memory coprocessing is not available\n"); # endif #else /* __riscos__ */ riscos_not_implemented("run-as-shm-coprocess"); #endif /* __riscos__ */ break; case oSetFilename: if(utf8_strings) opt.set_filename = pargs.r.ret_str; else opt.set_filename = native_to_utf8(pargs.r.ret_str); break; case oForYourEyesOnly: eyes_only = 1; break; case oNoForYourEyesOnly: eyes_only = 0; break; case oSetPolicyURL: add_policy_url(pargs.r.ret_str,0); add_policy_url(pargs.r.ret_str,1); break; case oSigPolicyURL: add_policy_url(pargs.r.ret_str,0); break; case oCertPolicyURL: add_policy_url(pargs.r.ret_str,1); break; case oShowPolicyURL: deprecated_warning(configname,configlineno,"--show-policy-url", "--list-options ","show-policy-urls"); deprecated_warning(configname,configlineno,"--show-policy-url", "--verify-options ","show-policy-urls"); opt.list_options|=LIST_SHOW_POLICY_URLS; opt.verify_options|=VERIFY_SHOW_POLICY_URLS; break; case oNoShowPolicyURL: deprecated_warning(configname,configlineno,"--no-show-policy-url", "--list-options ","no-show-policy-urls"); deprecated_warning(configname,configlineno,"--no-show-policy-url", "--verify-options ","no-show-policy-urls"); opt.list_options&=~LIST_SHOW_POLICY_URLS; opt.verify_options&=~VERIFY_SHOW_POLICY_URLS; break; case oSigKeyserverURL: add_keyserver_url(pargs.r.ret_str,0); break; case oUseEmbeddedFilename: opt.flags.use_embedded_filename=1; break; case oNoUseEmbeddedFilename: opt.flags.use_embedded_filename=0; break; case oComment: if(pargs.r.ret_str[0]) append_to_strlist(&opt.comments,pargs.r.ret_str); break; case oDefaultComment: deprecated_warning(configname,configlineno, "--default-comment","--no-comments",""); /* fall through */ case oNoComments: free_strlist(opt.comments); opt.comments=NULL; break; case oThrowKeyids: opt.throw_keyid = 1; break; case oNoThrowKeyids: opt.throw_keyid = 0; break; case oShowPhotos: deprecated_warning(configname,configlineno,"--show-photos", "--list-options ","show-photos"); deprecated_warning(configname,configlineno,"--show-photos", "--verify-options ","show-photos"); opt.list_options|=LIST_SHOW_PHOTOS; opt.verify_options|=VERIFY_SHOW_PHOTOS; break; case oNoShowPhotos: deprecated_warning(configname,configlineno,"--no-show-photos", "--list-options ","no-show-photos"); deprecated_warning(configname,configlineno,"--no-show-photos", "--verify-options ","no-show-photos"); opt.list_options&=~LIST_SHOW_PHOTOS; opt.verify_options&=~VERIFY_SHOW_PHOTOS; break; case oPhotoViewer: opt.photo_viewer = pargs.r.ret_str; break; case oForceV3Sigs: opt.force_v3_sigs = 1; break; case oNoForceV3Sigs: opt.force_v3_sigs = 0; break; case oForceV4Certs: opt.force_v4_certs = 1; break; case oNoForceV4Certs: opt.force_v4_certs = 0; break; case oForceMDC: opt.force_mdc = 1; break; case oNoForceMDC: opt.force_mdc = 0; break; case oDisableMDC: opt.disable_mdc = 1; break; case oNoDisableMDC: opt.disable_mdc = 0; break; case oS2KMode: opt.s2k_mode = pargs.r.ret_int; break; case oS2KDigest: s2k_digest_string = xstrdup(pargs.r.ret_str); break; case oS2KCipher: s2k_cipher_string = xstrdup(pargs.r.ret_str); break; case oS2KCount: opt.s2k_count=encode_s2k_iterations(pargs.r.ret_int); break; case oSimpleSKChecksum: opt.simple_sk_checksum = 1; break; case oNoEncryptTo: opt.no_encrypt_to = 1; break; case oEncryptTo: /* store the recipient in the second list */ sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings ); sl->flags = 1; break; case oHiddenEncryptTo: /* store the recipient in the second list */ sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings ); sl->flags = 1|2; break; case oRecipient: /* store the recipient */ add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings ); any_explicit_recipient = 1; break; case oHiddenRecipient: /* store the recipient with a flag */ sl = add_to_strlist2( &remusr, pargs.r.ret_str, utf8_strings ); sl->flags = 2; any_explicit_recipient = 1; break; case oTextmodeShort: opt.textmode = 2; break; case oTextmode: opt.textmode=1; break; case oNoTextmode: opt.textmode=0; break; case oExpert: opt.expert = 1; break; case oNoExpert: opt.expert = 0; break; case oDefSigExpire: if(*pargs.r.ret_str!='\0') { if(parse_expire_string(0,pargs.r.ret_str)==(u32)-1) log_error(_("`%s' is not a valid signature expiration\n"), pargs.r.ret_str); else opt.def_sig_expire=pargs.r.ret_str; } break; case oAskSigExpire: opt.ask_sig_expire = 1; break; case oNoAskSigExpire: opt.ask_sig_expire = 0; break; case oDefCertExpire: if(*pargs.r.ret_str!='\0') { if(parse_expire_string(0,pargs.r.ret_str)==(u32)-1) log_error(_("`%s' is not a valid signature expiration\n"), pargs.r.ret_str); else opt.def_cert_expire=pargs.r.ret_str; } break; case oAskCertExpire: opt.ask_cert_expire = 1; break; case oNoAskCertExpire: opt.ask_cert_expire = 0; break; case oDefCertLevel: opt.def_cert_level=pargs.r.ret_int; break; case oMinCertLevel: opt.min_cert_level=pargs.r.ret_int; break; case oAskCertLevel: opt.ask_cert_level = 1; break; case oNoAskCertLevel: opt.ask_cert_level = 0; break; case oLocalUser: /* store the local users */ add_to_strlist2( &locusr, pargs.r.ret_str, utf8_strings ); break; case oCompress: /* this is the -z command line option */ opt.compress_level = opt.bz2_compress_level = pargs.r.ret_int; break; case oCompressLevel: opt.compress_level = pargs.r.ret_int; break; case oBZ2CompressLevel: opt.bz2_compress_level = pargs.r.ret_int; break; case oBZ2DecompressLowmem: opt.bz2_decompress_lowmem=1; break; case oPasswd: set_passphrase_from_string(pargs.r.ret_str); break; case oPasswdFD: pwfd = iobuf_translate_file_handle (pargs.r.ret_int, 0); opt.use_agent = 0; break; case oPasswdFile: pwfd = open_info_file (pargs.r.ret_str, 0); break; case oPasswdRepeat: opt.passwd_repeat=pargs.r.ret_int; break; case oCommandFD: opt.command_fd = iobuf_translate_file_handle (pargs.r.ret_int, 0); break; case oCommandFile: opt.command_fd = open_info_file (pargs.r.ret_str, 0); break; case oCipherAlgo: def_cipher_string = xstrdup(pargs.r.ret_str); break; case oDigestAlgo: def_digest_string = xstrdup(pargs.r.ret_str); break; case oCompressAlgo: /* If it is all digits, stick a Z in front of it for later. This is for backwards compatibility with versions that took the compress algorithm number. */ { char *pt=pargs.r.ret_str; while(*pt) { if (!isascii (*pt) || !isdigit (*pt)) break; pt++; } if(*pt=='\0') { compress_algo_string=xmalloc(strlen(pargs.r.ret_str)+2); strcpy(compress_algo_string,"Z"); strcat(compress_algo_string,pargs.r.ret_str); } else compress_algo_string = xstrdup(pargs.r.ret_str); } break; case oCertDigestAlgo: cert_digest_string = xstrdup(pargs.r.ret_str); break; case oNoSecmemWarn: secmem_set_flags( secmem_get_flags() | 1 ); break; case oRequireSecmem: require_secmem=1; break; case oNoRequireSecmem: require_secmem=0; break; case oNoPermissionWarn: opt.no_perm_warn=1; break; case oNoMDCWarn: opt.no_mdc_warn=1; break; case oDisplayCharset: if( set_native_charset( pargs.r.ret_str ) ) log_error(_("`%s' is not a valid character set\n"), pargs.r.ret_str); break; case oNotDashEscaped: opt.not_dash_escaped = 1; break; case oEscapeFrom: opt.escape_from = 1; break; case oNoEscapeFrom: opt.escape_from = 0; break; case oLockOnce: opt.lock_once = 1; break; case oLockNever: dotlock_disable (); random_disable_locking (); break; case oLockMultiple: #ifndef __riscos__ opt.lock_once = 0; #else /* __riscos__ */ riscos_not_implemented("lock-multiple"); #endif /* __riscos__ */ break; case oKeyServer: { struct keyserver_spec *keyserver; keyserver=parse_keyserver_uri(pargs.r.ret_str,0, configname,configlineno); if(!keyserver) log_error(_("could not parse keyserver URL\n")); else { keyserver->next=opt.keyserver; opt.keyserver=keyserver; } } break; case oKeyServerOptions: if(!parse_keyserver_options(pargs.r.ret_str)) { if(configname) log_error(_("%s:%d: invalid keyserver options\n"), configname,configlineno); else log_error(_("invalid keyserver options\n")); } break; case oImportOptions: if(!parse_import_options(pargs.r.ret_str,&opt.import_options,1)) { if(configname) log_error(_("%s:%d: invalid import options\n"), configname,configlineno); else log_error(_("invalid import options\n")); } break; case oExportOptions: if(!parse_export_options(pargs.r.ret_str,&opt.export_options,1)) { if(configname) log_error(_("%s:%d: invalid export options\n"), configname,configlineno); else log_error(_("invalid export options\n")); } break; case oListOptions: if(!parse_list_options(pargs.r.ret_str)) { if(configname) log_error(_("%s:%d: invalid list options\n"), configname,configlineno); else log_error(_("invalid list options\n")); } break; case oVerifyOptions: { struct parse_options vopts[]= { {"show-photos",VERIFY_SHOW_PHOTOS,NULL, N_("display photo IDs during signature verification")}, {"show-policy-urls",VERIFY_SHOW_POLICY_URLS,NULL, N_("show policy URLs during signature verification")}, {"show-notations",VERIFY_SHOW_NOTATIONS,NULL, N_("show all notations during signature verification")}, {"show-std-notations",VERIFY_SHOW_STD_NOTATIONS,NULL, N_("show IETF standard notations during signature verification")}, {"show-standard-notations",VERIFY_SHOW_STD_NOTATIONS,NULL, NULL}, {"show-user-notations",VERIFY_SHOW_USER_NOTATIONS,NULL, N_("show user-supplied notations during signature verification")}, {"show-keyserver-urls",VERIFY_SHOW_KEYSERVER_URLS,NULL, N_("show preferred keyserver URLs during signature verification")}, {"show-uid-validity",VERIFY_SHOW_UID_VALIDITY,NULL, N_("show user ID validity during signature verification")}, {"show-unusable-uids",VERIFY_SHOW_UNUSABLE_UIDS,NULL, N_("show revoked and expired user IDs in signature verification")}, {"show-primary-uid-only",VERIFY_SHOW_PRIMARY_UID_ONLY,NULL, N_("show only the primary user ID in signature verification")}, {"pka-lookups",VERIFY_PKA_LOOKUPS,NULL, N_("validate signatures with PKA data")}, {"pka-trust-increase",VERIFY_PKA_TRUST_INCREASE,NULL, N_("elevate the trust of signatures with valid PKA data")}, {NULL,0,NULL,NULL} }; if(!parse_options(pargs.r.ret_str,&opt.verify_options,vopts,1)) { if(configname) log_error(_("%s:%d: invalid verify options\n"), configname,configlineno); else log_error(_("invalid verify options\n")); } } break; case oTempDir: opt.temp_dir=pargs.r.ret_str; break; case oExecPath: if(set_exec_path(pargs.r.ret_str)) log_error(_("unable to set exec-path to %s\n"),pargs.r.ret_str); else opt.exec_path_set=1; break; case oSetNotation: add_notation_data( pargs.r.ret_str, 0 ); add_notation_data( pargs.r.ret_str, 1 ); break; case oSigNotation: add_notation_data( pargs.r.ret_str, 0 ); break; case oCertNotation: add_notation_data( pargs.r.ret_str, 1 ); break; case oShowNotation: deprecated_warning(configname,configlineno,"--show-notation", "--list-options ","show-notations"); deprecated_warning(configname,configlineno,"--show-notation", "--verify-options ","show-notations"); opt.list_options|=LIST_SHOW_NOTATIONS; opt.verify_options|=VERIFY_SHOW_NOTATIONS; break; case oNoShowNotation: deprecated_warning(configname,configlineno,"--no-show-notation", "--list-options ","no-show-notations"); deprecated_warning(configname,configlineno,"--no-show-notation", "--verify-options ","no-show-notations"); opt.list_options&=~LIST_SHOW_NOTATIONS; opt.verify_options&=~VERIFY_SHOW_NOTATIONS; break; case oUtf8Strings: utf8_strings = 1; break; case oNoUtf8Strings: utf8_strings = 0; break; case oDisableCipherAlgo: disable_cipher_algo( string_to_cipher_algo(pargs.r.ret_str) ); break; case oDisablePubkeyAlgo: disable_pubkey_algo( string_to_pubkey_algo(pargs.r.ret_str) ); break; case oNoSigCache: opt.no_sig_cache = 1; break; case oAllowNonSelfsignedUID: opt.allow_non_selfsigned_uid = 1; break; case oNoAllowNonSelfsignedUID: opt.allow_non_selfsigned_uid=0; break; case oAllowFreeformUID: opt.allow_freeform_uid = 1; break; case oNoAllowFreeformUID: opt.allow_freeform_uid = 0; break; case oNoLiteral: opt.no_literal = 1; break; case oSetFilesize: opt.set_filesize = pargs.r.ret_ulong; break; case oHonorHttpProxy: add_to_strlist(&opt.keyserver_options.other,"http-proxy"); deprecated_warning(configname,configlineno, "--honor-http-proxy", "--keyserver-options ","http-proxy"); break; case oFastListMode: opt.fast_list_mode = 1; break; case oFixedListMode: opt.fixed_list_mode = 1; break; case oListOnly: opt.list_only=1; break; case oIgnoreTimeConflict: opt.ignore_time_conflict = 1; break; case oIgnoreValidFrom: opt.ignore_valid_from = 1; break; case oIgnoreCrcError: opt.ignore_crc_error = 1; break; case oIgnoreMDCError: opt.ignore_mdc_error = 1; break; case oNoRandomSeedFile: use_random_seed = 0; break; case oAutoKeyRetrieve: case oNoAutoKeyRetrieve: if(pargs.r_opt==oAutoKeyRetrieve) opt.keyserver_options.options|=KEYSERVER_AUTO_KEY_RETRIEVE; else opt.keyserver_options.options&=~KEYSERVER_AUTO_KEY_RETRIEVE; deprecated_warning(configname,configlineno, pargs.r_opt==oAutoKeyRetrieve?"--auto-key-retrieve": "--no-auto-key-retrieve","--keyserver-options ", pargs.r_opt==oAutoKeyRetrieve?"auto-key-retrieve": "no-auto-key-retrieve"); break; case oShowSessionKey: opt.show_session_key = 1; break; case oOverrideSessionKey: opt.override_session_key = pargs.r.ret_str; break; case oMergeOnly: deprecated_warning(configname,configlineno,"--merge-only", "--import-options ","merge-only"); opt.import_options|=IMPORT_MERGE_ONLY; break; case oAllowSecretKeyImport: /* obsolete */ break; case oTryAllSecrets: opt.try_all_secrets = 1; break; case oTrustedKey: register_trusted_key( pargs.r.ret_str ); break; case oEnableSpecialFilenames: iobuf_enable_special_filenames (1); break; case oNoExpensiveTrustChecks: opt.no_expensive_trust_checks=1; break; case oAutoCheckTrustDB: opt.no_auto_check_trustdb=0; break; case oNoAutoCheckTrustDB: opt.no_auto_check_trustdb=1; break; case oPreservePermissions: opt.preserve_permissions=1; break; case oDefaultPreferenceList: opt.def_preference_list = pargs.r.ret_str; break; case oDefaultKeyserverURL: { struct keyserver_spec *keyserver; keyserver=parse_keyserver_uri(pargs.r.ret_str,1, configname,configlineno); if(!keyserver) log_error(_("could not parse keyserver URL\n")); else free_keyserver_spec(keyserver); opt.def_keyserver_url = pargs.r.ret_str; } break; case oPersonalCipherPreferences: pers_cipher_list=pargs.r.ret_str; break; case oPersonalDigestPreferences: pers_digest_list=pargs.r.ret_str; break; case oPersonalCompressPreferences: pers_compress_list=pargs.r.ret_str; break; case oDisplay: opt.display = pargs.r.ret_str; break; case oTTYname: opt.ttyname = pargs.r.ret_str; break; case oTTYtype: opt.ttytype = pargs.r.ret_str; break; case oWeakDigest: additional_weak_digest(pargs.r.ret_str); break; case oLCctype: opt.lc_ctype = pargs.r.ret_str; break; case oLCmessages: opt.lc_messages = pargs.r.ret_str; break; case oGroup: add_group(pargs.r.ret_str); break; case oUnGroup: rm_group(pargs.r.ret_str); break; case oNoGroups: while(opt.grouplist) { struct groupitem *iter=opt.grouplist; free_strlist(iter->values); opt.grouplist=opt.grouplist->next; xfree(iter); } break; case oStrict: opt.strict=1; log_set_strict(1); break; case oNoStrict: opt.strict=0; log_set_strict(0); break; case oMangleDosFilenames: opt.mangle_dos_filenames = 1; break; case oNoMangleDosFilenames: opt.mangle_dos_filenames = 0; break; case oEnableProgressFilter: opt.enable_progress_filter = 1; break; case oMultifile: multifile=1; break; case oKeyidFormat: if(ascii_strcasecmp(pargs.r.ret_str,"short")==0) opt.keyid_format=KF_SHORT; else if(ascii_strcasecmp(pargs.r.ret_str,"long")==0) opt.keyid_format=KF_LONG; else if(ascii_strcasecmp(pargs.r.ret_str,"0xshort")==0) opt.keyid_format=KF_0xSHORT; else if(ascii_strcasecmp(pargs.r.ret_str,"0xlong")==0) opt.keyid_format=KF_0xLONG; else log_error("unknown keyid-format `%s'\n",pargs.r.ret_str); break; case oExitOnStatusWriteError: opt.exit_on_status_write_error = 1; break; case oLimitCardInsertTries: opt.limit_card_insert_tries = pargs.r.ret_int; break; case oRequireCrossCert: opt.flags.require_cross_cert=1; break; case oNoRequireCrossCert: opt.flags.require_cross_cert=0; break; case oAutoKeyLocate: if(!parse_auto_key_locate(pargs.r.ret_str)) { if(configname) log_error(_("%s:%d: invalid auto-key-locate list\n"), configname,configlineno); else log_error(_("invalid auto-key-locate list\n")); } break; case oNoAutoKeyLocate: release_akl(); break; case oEnableLargeRSA: #if SECMEM_BUFFER_SIZE >= 65536 opt.flags.large_rsa=1; #else if (configname) log_info("%s:%d: WARNING: gpg not built with large secure " "memory buffer. Ignoring enable-large-rsa\n", configname,configlineno); else log_info("WARNING: gpg not built with large secure " "memory buffer. Ignoring --enable-large-rsa\n"); #endif /* SECMEM_BUFFER_SIZE >= 65536 */ break; case oDisableLargeRSA: opt.flags.large_rsa=0; break; case oEnableDSA2: opt.flags.dsa2=1; break; case oDisableDSA2: opt.flags.dsa2=0; break; case oAllowMultisigVerification: case oAllowMultipleMessages: opt.flags.allow_multiple_messages=1; break; case oNoAllowMultipleMessages: opt.flags.allow_multiple_messages=0; break; case oAllowWeakDigestAlgos: opt.flags.allow_weak_digest_algos = 1; break; case oNoop: break; default : pargs.err = configfp? 1:2; break; } } if( configfp ) { fclose( configfp ); configfp = NULL; /* Remember the first config file name. */ if (!save_configname) save_configname = configname; else xfree(configname); configname = NULL; goto next_pass; } xfree( configname ); configname = NULL; if( log_get_errorcount(0) ) g10_exit(2); /* The command --gpgconf-list is pretty simple and may be called directly after the option parsing. */ if (cmd == aGPGConfList) { gpgconf_list (save_configname ? save_configname : default_configname); g10_exit (0); } xfree (save_configname); xfree (default_configname); if( nogreeting ) greeting = 0; if( greeting ) { fprintf(stderr, "%s %s; %s\n", strusage(11), strusage(13), strusage(14) ); fprintf(stderr, "%s\n", strusage(15) ); } #ifdef IS_DEVELOPMENT_VERSION if( !opt.batch ) { const char *s; if((s=strusage(20))) log_info("%s\n",s); if((s=strusage(21))) log_info("%s\n",s); if((s=strusage(22))) log_info("%s\n",s); } #endif if (opt.verbose > 2) log_info ("using character set `%s'\n", get_native_charset ()); if( may_coredump && !opt.quiet ) log_info(_("WARNING: program may create a core file!\n")); if (eyes_only) { if (opt.set_filename) log_info(_("WARNING: %s overrides %s\n"), "--for-your-eyes-only","--set-filename"); opt.set_filename="_CONSOLE"; } if (opt.no_literal) { log_info(_("NOTE: %s is not for normal use!\n"), "--no-literal"); if (opt.textmode) log_error(_("%s not allowed with %s!\n"), "--textmode", "--no-literal" ); if (opt.set_filename) log_error(_("%s makes no sense with %s!\n"), eyes_only?"--for-your-eyes-only":"--set-filename", "--no-literal" ); } #ifndef ENABLE_AGENT_SUPPORT if (opt.use_agent) { log_info(_("NOTE: %s is not available in this version\n"), "--use-agent"); opt.use_agent = 0; } #endif /*!ENABLE_AGENT_SUPPORT*/ if (opt.set_filesize) log_info(_("NOTE: %s is not for normal use!\n"), "--set-filesize"); if( opt.batch ) tty_batchmode( 1 ); secmem_set_flags( secmem_get_flags() & ~2 ); /* resume warnings */ if(require_secmem && !got_secmem) { log_info(_("will not run with insecure memory due to %s\n"), "--require-secmem"); g10_exit(2); } set_debug(); /* Do these after the switch(), so they can override settings. */ if(PGP2) { int unusable=0; if(cmd==aSign && !detached_sig) { log_info(_("you can only make detached or clear signatures " "while in --pgp2 mode\n")); unusable=1; } else if(cmd==aSignEncr || cmd==aSignSym) { log_info(_("you can't sign and encrypt at the " "same time while in --pgp2 mode\n")); unusable=1; } else if(argc==0 && (cmd==aSign || cmd==aEncr || cmd==aSym)) { log_info(_("you must use files (and not a pipe) when " "working with --pgp2 enabled.\n")); unusable=1; } else if(cmd==aEncr || cmd==aSym) { /* Everything else should work without IDEA (except using a secret key encrypted with IDEA and setting an IDEA preference, but those have their own error messages). */ if(check_cipher_algo(CIPHER_ALGO_IDEA)) { log_info(_("encrypting a message in --pgp2 mode requires " "the IDEA cipher\n")); unusable=1; } else if(cmd==aSym) { /* This only sets IDEA for symmetric encryption since it is set via select_algo_from_prefs for pk encryption. */ xfree(def_cipher_string); def_cipher_string = xstrdup("idea"); } /* PGP2 can't handle the output from the textmode filter, so we disable it for anything that could create a literal packet (only encryption and symmetric encryption, since we disable signing above). */ if(!unusable) opt.textmode=0; } if(unusable) compliance_failure(); else { opt.force_v4_certs = 0; opt.escape_from = 1; opt.force_v3_sigs = 1; opt.pgp2_workarounds = 1; opt.ask_sig_expire = 0; opt.ask_cert_expire = 0; opt.flags.allow_weak_digest_algos = 1; xfree(def_digest_string); def_digest_string = xstrdup("md5"); xfree(s2k_digest_string); s2k_digest_string = xstrdup("md5"); opt.compress_algo = COMPRESS_ALGO_ZIP; } } else if(PGP6) { opt.disable_mdc=1; opt.escape_from=1; opt.force_v3_sigs=1; opt.ask_sig_expire=0; } else if(PGP7) { opt.escape_from=1; opt.force_v3_sigs=1; opt.ask_sig_expire=0; } else if(PGP8) { opt.escape_from=1; } /* must do this after dropping setuid, because string_to... * may try to load an module */ if( def_cipher_string ) { opt.def_cipher_algo = string_to_cipher_algo(def_cipher_string); xfree(def_cipher_string); def_cipher_string = NULL; if( check_cipher_algo(opt.def_cipher_algo) ) log_error(_("selected cipher algorithm is invalid\n")); } if( def_digest_string ) { opt.def_digest_algo = string_to_digest_algo(def_digest_string); xfree(def_digest_string); def_digest_string = NULL; if( check_digest_algo(opt.def_digest_algo) ) log_error(_("selected digest algorithm is invalid\n")); } if( compress_algo_string ) { opt.compress_algo = string_to_compress_algo(compress_algo_string); xfree(compress_algo_string); compress_algo_string = NULL; if( check_compress_algo(opt.compress_algo) ) log_error(_("selected compression algorithm is invalid\n")); } if( cert_digest_string ) { opt.cert_digest_algo = string_to_digest_algo(cert_digest_string); xfree(cert_digest_string); cert_digest_string = NULL; if( check_digest_algo(opt.cert_digest_algo) ) log_error(_("selected certification digest algorithm is invalid\n")); } if( s2k_cipher_string ) { opt.s2k_cipher_algo = string_to_cipher_algo(s2k_cipher_string); xfree(s2k_cipher_string); s2k_cipher_string = NULL; if( check_cipher_algo(opt.s2k_cipher_algo) ) log_error(_("selected cipher algorithm is invalid\n")); } if( s2k_digest_string ) { opt.s2k_digest_algo = string_to_digest_algo(s2k_digest_string); xfree(s2k_digest_string); s2k_digest_string = NULL; if( check_digest_algo(opt.s2k_digest_algo) ) log_error(_("selected digest algorithm is invalid\n")); } if( opt.completes_needed < 1 ) log_error(_("completes-needed must be greater than 0\n")); if( opt.marginals_needed < 2 ) log_error(_("marginals-needed must be greater than 1\n")); if( opt.max_cert_depth < 1 || opt.max_cert_depth > 255 ) log_error(_("max-cert-depth must be in the range from 1 to 255\n")); if(opt.def_cert_level<0 || opt.def_cert_level>3) log_error(_("invalid default-cert-level; must be 0, 1, 2, or 3\n")); if( opt.min_cert_level < 1 || opt.min_cert_level > 3 ) log_error(_("invalid min-cert-level; must be 1, 2, or 3\n")); switch( opt.s2k_mode ) { case 0: log_info(_("NOTE: simple S2K mode (0) is strongly discouraged\n")); break; case 1: case 3: break; default: log_error(_("invalid S2K mode; must be 0, 1 or 3\n")); } /* This isn't actually needed, but does serve to error out if the string is invalid. */ if(opt.def_preference_list && keygen_set_std_prefs(opt.def_preference_list,0)) log_error(_("invalid default preferences\n")); if(pers_cipher_list && keygen_set_std_prefs(pers_cipher_list,PREFTYPE_SYM)) log_error(_("invalid personal cipher preferences\n")); if(pers_digest_list && keygen_set_std_prefs(pers_digest_list,PREFTYPE_HASH)) log_error(_("invalid personal digest preferences\n")); if(pers_compress_list && keygen_set_std_prefs(pers_compress_list,PREFTYPE_ZIP)) log_error(_("invalid personal compress preferences\n")); /* We don't support all possible commands with multifile yet */ if(multifile) { char *cmdname; switch(cmd) { case aSign: cmdname="--sign"; break; case aClearsign: cmdname="--clearsign"; break; case aDetachedSign: cmdname="--detach-sign"; break; case aSym: cmdname="--symmetric"; break; case aEncrSym: cmdname="--symmetric --encrypt"; break; case aStore: cmdname="--store"; break; default: cmdname=NULL; break; } if(cmdname) log_error(_("%s does not yet work with %s\n"),cmdname,"--multifile"); } if( log_get_errorcount(0) ) g10_exit(2); if(opt.compress_level==0) opt.compress_algo=COMPRESS_ALGO_NONE; /* Check our chosen algorithms against the list of legal algorithms. */ if(!GNUPG) { const char *badalg=NULL; preftype_t badtype=PREFTYPE_NONE; if(opt.def_cipher_algo && !algo_available(PREFTYPE_SYM,opt.def_cipher_algo,NULL)) { badalg=cipher_algo_to_string(opt.def_cipher_algo); badtype=PREFTYPE_SYM; } else if(opt.def_digest_algo && !algo_available(PREFTYPE_HASH,opt.def_digest_algo,NULL)) { badalg=digest_algo_to_string(opt.def_digest_algo); badtype=PREFTYPE_HASH; } else if(opt.cert_digest_algo && !algo_available(PREFTYPE_HASH,opt.cert_digest_algo,NULL)) { badalg=digest_algo_to_string(opt.cert_digest_algo); badtype=PREFTYPE_HASH; } else if(opt.compress_algo!=-1 && !algo_available(PREFTYPE_ZIP,opt.compress_algo,NULL)) { badalg=compress_algo_to_string(opt.compress_algo); badtype=PREFTYPE_ZIP; } if(badalg) { switch(badtype) { case PREFTYPE_SYM: log_info(_("you may not use cipher algorithm `%s'" " while in %s mode\n"), badalg,compliance_option_string()); break; case PREFTYPE_HASH: log_info(_("you may not use digest algorithm `%s'" " while in %s mode\n"), badalg,compliance_option_string()); break; case PREFTYPE_ZIP: log_info(_("you may not use compression algorithm `%s'" " while in %s mode\n"), badalg,compliance_option_string()); break; default: BUG(); } compliance_failure(); } } /* set the random seed file */ if( use_random_seed ) { char *p = make_filename(opt.homedir, "random_seed", NULL ); set_random_seed_file(p); if (!access (p, F_OK)) register_secured_file (p); xfree(p); } /* If there is no command but the --fingerprint is given, default to the --list-keys command. */ if (!cmd && fpr_maybe_cmd) { set_cmd (&cmd, aListKeys); } if( cmd == aKMode || cmd == aKModeC ) { /* kludge to be compatible to pgp */ if( cmd == aKModeC ) { opt.fingerprint = 1; cmd = aKMode; } opt.list_sigs = 0; if( opt.verbose > 2 ) opt.check_sigs++; if( opt.verbose > 1 ) opt.list_sigs++; opt.verbose = opt.verbose > 1; g10_opt_verbose = opt.verbose; } /* kludge to let -sat generate a clear text signature */ if( opt.textmode == 2 && !detached_sig && opt.armor && cmd == aSign ) cmd = aClearsign; if( opt.verbose > 1 ) set_packet_list_mode(1); if (cmd == aGPGConfTest) g10_exit(0); /* Add the keyrings, but not for some special commands and not in case of "-kvv userid keyring". Also avoid adding the secret keyring for a couple of commands to avoid unneeded access in case the secrings are stored on a floppy. We always need to add the keyrings if we are running under SELinux, this is so that the rings are added to the list of secured files. */ if( ALWAYS_ADD_KEYRINGS || (cmd != aDeArmor && cmd != aEnArmor && !(cmd == aKMode && argc == 2 )) ) { if (ALWAYS_ADD_KEYRINGS || (cmd != aCheckKeys && cmd != aListSigs && cmd != aListKeys && cmd != aVerify && cmd != aSym)) { if (!sec_nrings || default_keyring) /* add default secret rings */ keydb_add_resource ("secring" EXTSEP_S "gpg", 4, 1); for (sl = sec_nrings; sl; sl = sl->next) keydb_add_resource ( sl->d, 0, 1 ); } if( !nrings || default_keyring ) /* add default ring */ keydb_add_resource ("pubring" EXTSEP_S "gpg", 4, 0); for(sl = nrings; sl; sl = sl->next ) keydb_add_resource ( sl->d, sl->flags, 0 ); } FREE_STRLIST(nrings); FREE_STRLIST(sec_nrings); if( pwfd != -1 ) /* read the passphrase now. */ read_passphrase_from_fd( pwfd ); fname = argc? *argv : NULL; if(fname && utf8_strings) opt.flags.utf8_filename=1; switch( cmd ) { case aPrimegen: case aPrintMD: case aPrintMDs: case aGenRandom: case aDeArmor: case aEnArmor: break; case aFixTrustDB: case aExportOwnerTrust: rc = setup_trustdb( 0, trustdb_name ); break; case aListTrustDB: rc = setup_trustdb( argc? 1:0, trustdb_name ); break; default: /* No need to create the trust model if we are using the * always trust model. */ rc = setup_trustdb (opt.trust_model != TM_ALWAYS, trustdb_name); break; } if( rc ) log_error(_("failed to initialize the TrustDB: %s\n"), g10_errstr(rc)); switch (cmd) { case aStore: case aSym: case aSign: case aSignSym: case aClearsign: if (!opt.quiet && any_explicit_recipient) log_info (_("WARNING: recipients (-r) given " "without using public key encryption\n")); break; default: break; } switch( cmd ) { case aStore: /* only store the file */ if( argc > 1 ) wrong_args(_("--store [filename]")); if( (rc = encode_store(fname)) ) log_error ("storing `%s' failed: %s\n", print_fname_stdin(fname),g10_errstr(rc) ); break; case aSym: /* encrypt the given file only with the symmetric cipher */ if( argc > 1 ) wrong_args(_("--symmetric [filename]")); if( (rc = encode_symmetric(fname)) ) log_error (_("symmetric encryption of `%s' failed: %s\n"), print_fname_stdin(fname),g10_errstr(rc) ); break; case aEncr: /* encrypt the given file */ if(multifile) encode_crypt_files(argc, argv, remusr); else { if( argc > 1 ) wrong_args(_("--encrypt [filename]")); if( (rc = encode_crypt(fname,remusr,0)) ) log_error("%s: encryption failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); } break; case aEncrSym: /* This works with PGP 8 in the sense that it acts just like a symmetric message. It doesn't work at all with 2 or 6. It might work with 7, but alas, I don't have a copy to test with right now. */ if( argc > 1 ) wrong_args(_("--symmetric --encrypt [filename]")); else if(opt.s2k_mode==0) log_error(_("you cannot use --symmetric --encrypt" " with --s2k-mode 0\n")); else if(PGP2 || PGP6 || PGP7 || RFC1991) log_error(_("you cannot use --symmetric --encrypt" " while in %s mode\n"),compliance_option_string()); else { if( (rc = encode_crypt(fname,remusr,1)) ) log_error("%s: encryption failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); } break; case aSign: /* sign the given file */ sl = NULL; if( detached_sig ) { /* sign all files */ for( ; argc; argc--, argv++ ) add_to_strlist( &sl, *argv ); } else { if( argc > 1 ) wrong_args(_("--sign [filename]")); if( argc ) { sl = xmalloc_clear( sizeof *sl + strlen(fname)); strcpy(sl->d, fname); } } if( (rc = sign_file( sl, detached_sig, locusr, 0, NULL, NULL)) ) log_error("signing failed: %s\n", g10_errstr(rc) ); free_strlist(sl); break; case aSignEncr: /* sign and encrypt the given file */ if( argc > 1 ) wrong_args(_("--sign --encrypt [filename]")); if( argc ) { sl = xmalloc_clear( sizeof *sl + strlen(fname)); strcpy(sl->d, fname); } else sl = NULL; if( (rc = sign_file(sl, detached_sig, locusr, 1, remusr, NULL)) ) log_error("%s: sign+encrypt failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); free_strlist(sl); break; case aSignEncrSym: /* sign and encrypt the given file */ if( argc > 1 ) wrong_args(_("--symmetric --sign --encrypt [filename]")); else if(opt.s2k_mode==0) log_error(_("you cannot use --symmetric --sign --encrypt" " with --s2k-mode 0\n")); else if(PGP2 || PGP6 || PGP7 || RFC1991) log_error(_("you cannot use --symmetric --sign --encrypt" " while in %s mode\n"),compliance_option_string()); else { if( argc ) { sl = xmalloc_clear( sizeof *sl + strlen(fname)); strcpy(sl->d, fname); } else sl = NULL; if( (rc = sign_file(sl, detached_sig, locusr, 2, remusr, NULL)) ) log_error("%s: symmetric+sign+encrypt failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); free_strlist(sl); } break; case aSignSym: /* sign and conventionally encrypt the given file */ if (argc > 1) wrong_args(_("--sign --symmetric [filename]")); rc = sign_symencrypt_file (fname, locusr); if (rc) log_error("%s: sign+symmetric failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); break; case aClearsign: /* make a clearsig */ if( argc > 1 ) wrong_args(_("--clearsign [filename]")); if( (rc = clearsign_file(fname, locusr, NULL)) ) log_error("%s: clearsign failed: %s\n", print_fname_stdin(fname), g10_errstr(rc) ); break; case aVerify: if(multifile) { if( (rc = verify_files( argc, argv ) )) log_error("verify files failed: %s\n", g10_errstr(rc) ); } else { if( (rc = verify_signatures( argc, argv ) )) log_error("verify signatures failed: %s\n", g10_errstr(rc) ); } break; case aDecrypt: if(multifile) decrypt_messages(argc, argv); else { if( argc > 1 ) wrong_args(_("--decrypt [filename]")); if( (rc = decrypt_message( fname ) )) log_error("decrypt_message failed: %s\n", g10_errstr(rc) ); } break; case aSignKey: if( argc != 1 ) wrong_args(_("--sign-key user-id")); /* fall through */ case aLSignKey: if( argc != 1 ) wrong_args(_("--lsign-key user-id")); /* fall through */ sl=NULL; if(cmd==aSignKey) append_to_strlist(&sl,"sign"); else if(cmd==aLSignKey) append_to_strlist(&sl,"lsign"); else BUG(); append_to_strlist( &sl, "save" ); username = make_username( fname ); keyedit_menu(username, locusr, sl, 0, 0 ); xfree(username); free_strlist(sl); break; case aEditKey: /* Edit a key signature */ if( !argc ) wrong_args(_("--edit-key user-id [commands]")); username = make_username( fname ); if( argc > 1 ) { sl = NULL; for( argc--, argv++ ; argc; argc--, argv++ ) append_to_strlist( &sl, *argv ); keyedit_menu( username, locusr, sl, 0, 1 ); free_strlist(sl); } else keyedit_menu(username, locusr, NULL, 0, 1 ); xfree(username); break; case aDeleteKeys: case aDeleteSecretKeys: case aDeleteSecretAndPublicKeys: sl = NULL; /* I'm adding these in reverse order as add_to_strlist2 reverses them again, and it's easier to understand in the proper order :) */ for( ; argc; argc-- ) add_to_strlist2( &sl, argv[argc-1], utf8_strings ); delete_keys(sl,cmd==aDeleteSecretKeys,cmd==aDeleteSecretAndPublicKeys); free_strlist(sl); break; case aCheckKeys: opt.check_sigs = 1; case aListSigs: opt.list_sigs = 1; case aListKeys: sl = NULL; for( ; argc; argc--, argv++ ) add_to_strlist2( &sl, *argv, utf8_strings ); public_key_list( sl ); free_strlist(sl); break; case aListSecretKeys: sl = NULL; for( ; argc; argc--, argv++ ) add_to_strlist2( &sl, *argv, utf8_strings ); secret_key_list( sl ); free_strlist(sl); break; case aKMode: /* list keyring -- NOTE: This will be removed soon */ if( argc < 2 ) { /* -kv [userid] */ sl = NULL; if (argc && **argv) add_to_strlist2( &sl, *argv, utf8_strings ); public_key_list( sl ); free_strlist(sl); } else if( argc == 2 ) { /* -kv userid keyring */ if( access( argv[1], R_OK ) ) { log_error(_("can't open `%s': %s\n"), print_fname_stdin(argv[1]), strerror(errno)); } else { /* add keyring (default keyrings are not registered in this * special case */ keydb_add_resource( argv[1], 0, 0 ); sl = NULL; if (**argv) add_to_strlist2( &sl, *argv, utf8_strings ); public_key_list( sl ); free_strlist(sl); } } else wrong_args(_("-k[v][v][v][c] [user-id] [keyring]") ); break; case aKeygen: /* generate a key */ if( opt.batch ) { if( argc > 1 ) wrong_args("--gen-key [parameterfile]"); generate_keypair( argc? *argv : NULL, NULL, NULL ); } else { if( argc ) wrong_args("--gen-key"); generate_keypair(NULL, NULL, NULL); } break; case aFastImport: opt.import_options |= IMPORT_FAST; case aImport: import_keys( argc? argv:NULL, argc, NULL, opt.import_options ); break; /* TODO: There are a number of command that use this same "make strlist, call function, report error, free strlist" pattern. Join them together here and avoid all that duplicated code. */ case aExport: case aSendKeys: case aRecvKeys: sl = NULL; for( ; argc; argc--, argv++ ) append_to_strlist2( &sl, *argv, utf8_strings ); if( cmd == aSendKeys ) rc=keyserver_export( sl ); else if( cmd == aRecvKeys ) rc=keyserver_import( sl ); else rc=export_pubkeys( sl, opt.export_options ); if(rc) { if(cmd==aSendKeys) log_error(_("keyserver send failed: %s\n"),g10_errstr(rc)); else if(cmd==aRecvKeys) log_error(_("keyserver receive failed: %s\n"),g10_errstr(rc)); else log_error(_("key export failed: %s\n"),g10_errstr(rc)); } free_strlist(sl); break; case aSearchKeys: sl = NULL; for( ; argc; argc--, argv++ ) append_to_strlist2( &sl, *argv, utf8_strings ); rc=keyserver_search( sl ); if(rc) log_error(_("keyserver search failed: %s\n"),g10_errstr(rc)); free_strlist(sl); break; case aRefreshKeys: sl = NULL; for( ; argc; argc--, argv++ ) append_to_strlist2( &sl, *argv, utf8_strings ); rc=keyserver_refresh(sl); if(rc) log_error(_("keyserver refresh failed: %s\n"),g10_errstr(rc)); free_strlist(sl); break; case aFetchKeys: sl = NULL; for( ; argc; argc--, argv++ ) append_to_strlist2( &sl, *argv, utf8_strings ); rc=keyserver_fetch(sl); if(rc) log_error("key fetch failed: %s\n",g10_errstr(rc)); free_strlist(sl); break; case aExportSecret: sl = NULL; for( ; argc; argc--, argv++ ) add_to_strlist2( &sl, *argv, utf8_strings ); export_seckeys( sl ); free_strlist(sl); break; case aExportSecretSub: sl = NULL; for( ; argc; argc--, argv++ ) add_to_strlist2( &sl, *argv, utf8_strings ); export_secsubkeys( sl ); free_strlist(sl); break; case aGenRevoke: if( argc != 1 ) wrong_args("--gen-revoke user-id"); username = make_username(*argv); gen_revoke( username ); xfree( username ); break; case aDesigRevoke: if( argc != 1 ) wrong_args("--desig-revoke user-id"); username = make_username(*argv); gen_desig_revoke( username, locusr ); xfree( username ); break; case aDeArmor: if( argc > 1 ) wrong_args("--dearmor [file]"); rc = dearmor_file( argc? *argv: NULL ); if( rc ) log_error(_("dearmoring failed: %s\n"), g10_errstr(rc)); break; case aEnArmor: if( argc > 1 ) wrong_args("--enarmor [file]"); rc = enarmor_file( argc? *argv: NULL ); if( rc ) log_error(_("enarmoring failed: %s\n"), g10_errstr(rc)); break; case aPrimegen: { int mode = argc < 2 ? 0 : atoi(*argv); if( mode == 1 && argc == 2 ) { mpi_print( stdout, generate_public_prime( atoi(argv[1]) ), 1); } else if( mode == 2 && argc == 3 ) { mpi_print( stdout, generate_elg_prime( 0, atoi(argv[1]), atoi(argv[2]), NULL,NULL ), 1); } else if( mode == 3 && argc == 3 ) { MPI *factors; mpi_print( stdout, generate_elg_prime( 1, atoi(argv[1]), atoi(argv[2]), NULL,&factors ), 1); putchar('\n'); mpi_print( stdout, factors[0], 1 ); /* print q */ } else if( mode == 4 && argc == 3 ) { MPI g = mpi_alloc(1); mpi_print( stdout, generate_elg_prime( 0, atoi(argv[1]), atoi(argv[2]), g, NULL ), 1); putchar('\n'); mpi_print( stdout, g, 1 ); mpi_free(g); } else wrong_args("--gen-prime mode bits [qbits] "); putchar('\n'); } break; case aGenRandom: { int level = argc ? atoi(*argv):0; int count = argc > 1 ? atoi(argv[1]): 0; int endless = !count; if( argc < 1 || argc > 2 || level < 0 || level > 2 || count < 0 ) wrong_args("--gen-random 0|1|2 [count]"); while( endless || count ) { byte *p; /* Wee need a multiple of 3, so that in case of armored output we get a correct string. No linefolding is done, as it is best to levae this to other tools */ size_t n = !endless && count < 99? count : 99; p = get_random_bits( n*8, level, 0); #ifdef HAVE_DOSISH_SYSTEM setmode ( fileno(stdout), O_BINARY ); #endif if (opt.armor) { char *tmp = make_radix64_string (p, n); fputs (tmp, stdout); xfree (tmp); if (n%3 == 1) putchar ('='); if (n%3) putchar ('='); } else { fwrite( p, n, 1, stdout ); } xfree(p); if( !endless ) count -= n; } if (opt.armor) putchar ('\n'); } break; case aPrintMD: if( argc < 1) wrong_args("--print-md algo [files]"); { int all_algos = (**argv=='*' && !(*argv)[1]); int algo = all_algos? 0 : string_to_digest_algo(*argv); if( !algo && !all_algos ) log_error(_("invalid hash algorithm `%s'\n"), *argv ); else { argc--; argv++; if( !argc ) print_mds(NULL, algo); else { for(; argc; argc--, argv++ ) print_mds(*argv, algo); } } } break; case aPrintMDs: /* old option */ if( !argc ) print_mds(NULL,0); else { for(; argc; argc--, argv++ ) print_mds(*argv,0); } break; case aListTrustDB: if( !argc ) list_trustdb(NULL); else { for( ; argc; argc--, argv++ ) list_trustdb( *argv ); } break; case aUpdateTrustDB: if( argc ) wrong_args("--update-trustdb"); update_trustdb(); break; case aCheckTrustDB: /* Old versions allowed for arguments - ignore them */ check_trustdb(); break; case aFixTrustDB: how_to_fix_the_trustdb (); break; case aListTrustPath: if( !argc ) wrong_args("--list-trust-path "); for( ; argc; argc--, argv++ ) { username = make_username( *argv ); list_trust_path( username ); xfree(username); } break; case aExportOwnerTrust: if( argc ) wrong_args("--export-ownertrust"); export_ownertrust(); break; case aImportOwnerTrust: if( argc > 1 ) wrong_args("--import-ownertrust [file]"); import_ownertrust( argc? *argv:NULL ); break; case aPipeMode: if ( argc ) wrong_args ("--pipemode"); run_in_pipemode (); break; case aRebuildKeydbCaches: if (argc) wrong_args ("--rebuild-keydb-caches"); keydb_rebuild_caches (1); break; #ifdef ENABLE_CARD_SUPPORT case aCardStatus: if (argc) wrong_args ("--card-status"); card_status (stdout, NULL, 0); break; case aCardEdit: if (argc) { sl = NULL; for (argc--, argv++ ; argc; argc--, argv++) append_to_strlist (&sl, *argv); card_edit (sl); free_strlist (sl); } else card_edit (NULL); break; case aChangePIN: if (!argc) change_pin (0,1); else if (argc == 1) change_pin (atoi (*argv),1); else wrong_args ("--change-pin [no]"); break; #endif /* ENABLE_CARD_SUPPORT*/ case aListConfig: { char *str=collapse_args(argc,argv); list_config(str); xfree(str); } break; case aListPackets: opt.list_packets=2; default: if( argc > 1 ) wrong_args(_("[filename]")); /* Issue some output for the unix newbie */ if( !fname && !opt.outfile && isatty( fileno(stdin) ) && isatty( fileno(stdout) ) && isatty( fileno(stderr) ) ) log_info(_("Go ahead and type your message ...\n")); a = iobuf_open(fname); if (a && is_secured_file (iobuf_get_fd (a))) { iobuf_close (a); a = NULL; errno = EPERM; } if( !a ) log_error(_("can't open `%s'\n"), print_fname_stdin(fname)); else { if( !opt.no_armor ) { if( use_armor_filter( a ) ) { memset( &afx, 0, sizeof afx); iobuf_push_filter( a, armor_filter, &afx ); } } if( cmd == aListPackets ) { set_packet_list_mode(1); opt.list_packets=1; } rc = proc_packets(NULL, a ); if( rc ) log_error("processing message failed: %s\n", g10_errstr(rc) ); iobuf_close(a); } break; } /* cleanup */ FREE_STRLIST(remusr); FREE_STRLIST(locusr); g10_exit(0); return 8; /*NEVER REACHED*/ } void g10_exit( int rc ) { #ifdef ENABLE_CARD_SUPPORT card_close (); #endif update_random_seed_file(); if( opt.debug & DBG_MEMSTAT_VALUE ) { m_print_stats("on exit"); random_dump_stats(); } if( opt.debug ) secmem_dump_stats(); secmem_term(); rc = rc? rc : log_get_errorcount(0)? 2 : g10_errors_seen? 1 : 0; exit(rc ); } /* Pretty-print hex hashes. This assumes at least an 80-character display, but there are a few other similar assumptions in the display code. */ static void print_hex( MD_HANDLE md, int algo, const char *fname ) { int i,n,count,indent=0; const byte *p; if(fname) indent=printf("%s: ",fname); if(indent>40) { printf("\n"); indent=0; } if(algo==DIGEST_ALGO_RMD160) indent+=printf("RMD160 = "); else if(algo>0) indent+=printf("%6s = ",digest_algo_to_string(algo)); else algo=abs(algo); count=indent; p = md_read( md, algo ); n = md_digest_length(algo); count+=printf("%02X",*p++); for(i=1;i79) { printf("\n%*s",indent," "); count=indent; } else count+=printf(" "); if(!(i%8)) count+=printf(" "); } else if (n==20) { if(!(i%2)) { if(count+4>79) { printf("\n%*s",indent," "); count=indent; } else count+=printf(" "); } if(!(i%10)) count+=printf(" "); } else { if(!(i%4)) { if(count+8>79) { printf("\n%*s",indent," "); count=indent; } else count+=printf(" "); } } count+=printf("%02X",*p); } printf("\n"); } static void print_hashline( MD_HANDLE md, int algo, const char *fname ) { int i, n; const byte *p; if ( fname ) { for (p = fname; *p; p++ ) { if ( *p <= 32 || *p > 127 || *p == ':' || *p == '%' ) printf("%%%02X", *p ); else putchar( *p ); } } putchar(':'); printf("%d:", algo ); p = md_read( md, algo ); n = md_digest_length(algo); for(i=0; i < n ; i++, p++ ) printf("%02X", *p ); putchar(':'); putchar('\n'); } static void print_mds( const char *fname, int algo ) { FILE *fp; char buf[1024]; size_t n; MD_HANDLE md; if( !fname ) { fp = stdin; #ifdef HAVE_DOSISH_SYSTEM setmode ( fileno(fp) , O_BINARY ); #endif } else { fp = fopen( fname, "rb" ); if (fp && is_secured_file (fileno (fp))) { fclose (fp); fp = NULL; errno = EPERM; } } if( !fp ) { log_error("%s: %s\n", fname?fname:"[stdin]", strerror(errno) ); return; } md = md_open( 0, 0 ); if( algo ) md_enable( md, algo ); else { md_enable( md, DIGEST_ALGO_MD5 ); md_enable( md, DIGEST_ALGO_SHA1 ); md_enable( md, DIGEST_ALGO_RMD160 ); #ifdef USE_SHA256 md_enable( md, DIGEST_ALGO_SHA224 ); md_enable( md, DIGEST_ALGO_SHA256 ); #endif #ifdef USE_SHA512 md_enable( md, DIGEST_ALGO_SHA384 ); md_enable( md, DIGEST_ALGO_SHA512 ); #endif } while( (n=fread( buf, 1, DIM(buf), fp )) ) md_write( md, buf, n ); if( ferror(fp) ) log_error("%s: %s\n", fname?fname:"[stdin]", strerror(errno) ); else { md_final(md); if ( opt.with_colons ) { if ( algo ) print_hashline( md, algo, fname ); else { print_hashline( md, DIGEST_ALGO_MD5, fname ); print_hashline( md, DIGEST_ALGO_SHA1, fname ); print_hashline( md, DIGEST_ALGO_RMD160, fname ); #ifdef USE_SHA256 print_hashline( md, DIGEST_ALGO_SHA224, fname ); print_hashline( md, DIGEST_ALGO_SHA256, fname ); #endif #ifdef USE_SHA512 print_hashline( md, DIGEST_ALGO_SHA384, fname ); print_hashline( md, DIGEST_ALGO_SHA512, fname ); #endif } } else { if( algo ) print_hex(md,-algo,fname); else { print_hex( md, DIGEST_ALGO_MD5, fname ); print_hex( md, DIGEST_ALGO_SHA1, fname ); print_hex( md, DIGEST_ALGO_RMD160, fname ); #ifdef USE_SHA256 print_hex( md, DIGEST_ALGO_SHA224, fname ); print_hex( md, DIGEST_ALGO_SHA256, fname ); #endif #ifdef USE_SHA512 print_hex( md, DIGEST_ALGO_SHA384, fname ); print_hex( md, DIGEST_ALGO_SHA512, fname ); #endif } } } md_close(md); if( fp != stdin ) fclose(fp); } /**************** * Check the supplied name,value string and add it to the notation * data to be used for signatures. which==0 for sig notations, and 1 * for cert notations. */ static void add_notation_data( const char *string, int which ) { struct notation *notation; notation=string_to_notation(string,utf8_strings); if(notation) { if(which) { notation->next=opt.cert_notations; opt.cert_notations=notation; } else { notation->next=opt.sig_notations; opt.sig_notations=notation; } } } static void add_policy_url( const char *string, int which ) { unsigned int i,critical=0; STRLIST sl; if(*string=='!') { string++; critical=1; } for(i=0;iflags |= 1; } static void add_keyserver_url( const char *string, int which ) { unsigned int i,critical=0; STRLIST sl; if(*string=='!') { string++; critical=1; } for(i=0;iflags |= 1; } gnupg-1.4.20/g10/pubkey-enc.c0000644000175000017500000002254512635262326012453 00000000000000/* pubkey-enc.c - public key encoded packet handling * Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include "util.h" #include "memory.h" #include "packet.h" #include "mpi.h" #include "keydb.h" #include "trustdb.h" #include "cipher.h" #include "status.h" #include "options.h" #include "main.h" #include "i18n.h" #include "cardglue.h" static int get_it( PKT_pubkey_enc *k, DEK *dek, PKT_secret_key *sk, u32 *keyid ); /* check that the given algo is mentioned in one of the valid user IDs */ static int is_algo_in_prefs ( KBNODE keyblock, preftype_t type, int algo ) { KBNODE k; for (k=keyblock; k; k=k->next) { if (k->pkt->pkttype == PKT_USER_ID) { PKT_user_id *uid = k->pkt->pkt.user_id; prefitem_t *prefs = uid->prefs; if (uid->created && prefs && !uid->is_revoked && !uid->is_expired ) { for (; prefs->type; prefs++ ) if (prefs->type == type && prefs->value == algo) return 1; } } } return 0; } /**************** * Get the session key from a pubkey enc packet and return * it in DEK, which should have been allocated in secure memory. */ int get_session_key( PKT_pubkey_enc *k, DEK *dek ) { PKT_secret_key *sk = NULL; int rc; rc = check_pubkey_algo2 (k->pubkey_algo, PUBKEY_USAGE_ENC); if( rc ) goto leave; if( (k->keyid[0] || k->keyid[1]) && !opt.try_all_secrets ) { sk = xmalloc_clear( sizeof *sk ); sk->pubkey_algo = k->pubkey_algo; /* we want a pubkey with this algo*/ if( !(rc = get_seckey( sk, k->keyid )) ) rc = get_it( k, dek, sk, k->keyid ); } else { /* anonymous receiver: Try all available secret keys */ void *enum_context = NULL; u32 keyid[2]; char *p; for(;;) { if( sk ) free_secret_key( sk ); sk = xmalloc_clear( sizeof *sk ); rc=enum_secret_keys( &enum_context, sk, 1, 0); if( rc ) { rc = G10ERR_NO_SECKEY; break; } if( sk->pubkey_algo != k->pubkey_algo ) continue; keyid_from_sk( sk, keyid ); log_info(_("anonymous recipient; trying secret key %s ...\n"), keystr(keyid)); if(!opt.try_all_secrets && !is_status_enabled()) { p=get_last_passphrase(); set_next_passphrase(p); xfree(p); } rc = check_secret_key( sk, opt.try_all_secrets?1:-1 ); /* ask only once */ if( !rc ) { rc = get_it( k, dek, sk, keyid ); /* Successfully checked the secret key (either it was a card, had no passphrase, or had the right passphrase) but couldn't decrypt the session key, so thus that key is not the anonymous recipient. Move the next passphrase into last for the next round. We only do this if the secret key was successfully checked as in the normal case, check_secret_key handles this for us via passphrase_to_dek */ if(rc) next_to_last_passphrase(); } if( !rc ) { log_info(_("okay, we are the anonymous recipient.\n") ); break; } } enum_secret_keys( &enum_context, NULL, 0, 0 ); /* free context */ } leave: if( sk ) free_secret_key( sk ); return rc; } static int get_it( PKT_pubkey_enc *enc, DEK *dek, PKT_secret_key *sk, u32 *keyid ) { int rc; MPI plain_dek = NULL; byte *frame = NULL; unsigned n, nframe; u16 csum, csum2; int card = 0; if (sk->is_protected && sk->protect.s2k.mode == 1002) { /* Note, that we only support RSA for now. */ #ifdef ENABLE_CARD_SUPPORT unsigned char *rbuf; size_t rbuflen; char *snbuf; unsigned char *indata = NULL; unsigned int indatalen; snbuf = serialno_and_fpr_from_sk (sk->protect.iv, sk->protect.ivlen, sk); indata = mpi_get_buffer (enc->data[0], &indatalen, NULL); if (!indata) BUG (); rc = agent_scd_pkdecrypt (snbuf, indata, indatalen, &rbuf, &rbuflen); xfree (snbuf); xfree (indata); if (rc) goto leave; frame = rbuf; nframe = rbuflen; card = 1; #else rc = G10ERR_UNSUPPORTED; goto leave; #endif /*!ENABLE_CARD_SUPPORT*/ } else { rc = pubkey_decrypt(sk->pubkey_algo, &plain_dek, enc->data, sk->skey ); if( rc ) goto leave; frame = mpi_get_buffer( plain_dek, &nframe, NULL ); mpi_free( plain_dek ); plain_dek = NULL; } /* Now get the DEK (data encryption key) from the frame * * Old versions encode the DEK in in this format (msb is left): * * 0 1 DEK(16 bytes) CSUM(2 bytes) 0 RND(n bytes) 2 * * Later versions encode the DEK like this: * * 0 2 RND(n bytes) 0 A DEK(k bytes) CSUM(2 bytes) * * (mpi_get_buffer already removed the leading zero). * * RND are non-zero randow bytes. * A is the cipher algorithm * DEK is the encryption key (session key) with length k * CSUM */ if( DBG_CIPHER ) log_hexdump("DEK frame:", frame, nframe ); n=0; if (!card) { if( n + 7 > nframe ) { rc = G10ERR_WRONG_SECKEY; goto leave; } if( frame[n] == 1 && frame[nframe-1] == 2 ) { log_info(_("old encoding of the DEK is not supported\n")); rc = G10ERR_CIPHER_ALGO; goto leave; } if( frame[n] != 2 ) /* somethink is wrong */ { rc = G10ERR_WRONG_SECKEY; goto leave; } for(n++; n < nframe && frame[n]; n++ ) /* skip the random bytes */ ; n++; /* and the zero byte */ } if( n + 4 > nframe ) { rc = G10ERR_WRONG_SECKEY; goto leave; } dek->keylen = nframe - (n+1) - 2; dek->algo = frame[n++]; rc = check_cipher_algo( dek->algo ); if( rc ) { if( !opt.quiet && rc == G10ERR_CIPHER_ALGO ) { log_info(_("cipher algorithm %d%s is unknown or disabled\n"), dek->algo, dek->algo == CIPHER_ALGO_IDEA? " (IDEA)":""); } dek->algo = 0; goto leave; } if( (dek->keylen*8) != cipher_get_keylen( dek->algo ) ) { rc = G10ERR_WRONG_SECKEY; goto leave; } /* copy the key to DEK and compare the checksum */ csum = frame[nframe-2] << 8; csum |= frame[nframe-1]; memcpy( dek->key, frame+n, dek->keylen ); for( csum2=0, n=0; n < dek->keylen; n++ ) csum2 += dek->key[n]; if( csum != csum2 ) { rc = G10ERR_WRONG_SECKEY; goto leave; } if( DBG_CIPHER ) log_hexdump("DEK is:", dek->key, dek->keylen ); /* check that the algo is in the preferences and whether it has expired */ { PKT_public_key *pk = NULL; KBNODE pkb = get_pubkeyblock (keyid); if( !pkb ) { rc = -1; log_error("oops: public key not found for preference check\n"); } else if(pkb->pkt->pkt.public_key->selfsigversion > 3 && dek->algo != CIPHER_ALGO_3DES && !opt.quiet && !is_algo_in_prefs( pkb, PREFTYPE_SYM, dek->algo )) log_info(_("WARNING: cipher algorithm %s not found in recipient" " preferences\n"),cipher_algo_to_string(dek->algo)); if (!rc) { KBNODE k; for (k=pkb; k; k = k->next) { if (k->pkt->pkttype == PKT_PUBLIC_KEY || k->pkt->pkttype == PKT_PUBLIC_SUBKEY){ u32 aki[2]; keyid_from_pk(k->pkt->pkt.public_key, aki); if (aki[0]==keyid[0] && aki[1]==keyid[1]) { pk = k->pkt->pkt.public_key; break; } } } if (!pk) BUG (); if ( pk->expiredate && pk->expiredate <= make_timestamp() ) { log_info(_("NOTE: secret key %s expired at %s\n"), keystr(keyid), asctimestamp( pk->expiredate) ); } } if ( pk && pk->is_revoked ) { log_info( _("NOTE: key has been revoked") ); putc( '\n', log_stream() ); show_revocation_reason( pk, 1 ); } release_kbnode (pkb); rc = 0; } leave: mpi_free(plain_dek); xfree(frame); return rc; } /**************** * Get the session key from the given string. * String is supposed to be formatted as this: * : */ int get_override_session_key( DEK *dek, const char *string ) { const char *s; int i; if ( !string ) return G10ERR_BAD_KEY; dek->algo = atoi(string); if ( dek->algo < 1 ) return G10ERR_BAD_KEY; if ( !(s = strchr ( string, ':' )) ) return G10ERR_BAD_KEY; s++; for(i=0; i < DIM(dek->key) && *s; i++, s +=2 ) { int c = hextobyte ( s ); if (c == -1) return G10ERR_BAD_KEY; dek->key[i] = c; } if ( *s ) return G10ERR_BAD_KEY; dek->keylen = i; return 0; } gnupg-1.4.20/g10/mdfilter.c0000644000175000017500000000350512635262326012212 00000000000000/* mdfilter.c - filter data and calculate a message digest * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include #include "errors.h" #include "iobuf.h" #include "memory.h" #include "util.h" #include "filter.h" /**************** * This filter is used to collect a message digest */ int md_filter( void *opaque, int control, IOBUF a, byte *buf, size_t *ret_len) { size_t size = *ret_len; md_filter_context_t *mfx = opaque; int i, rc=0; if( control == IOBUFCTRL_UNDERFLOW ) { if( mfx->maxbuf_size && size > mfx->maxbuf_size ) size = mfx->maxbuf_size; i = iobuf_read( a, buf, size ); if( i == -1 ) i = 0; if( i ) { md_write(mfx->md, buf, i ); if( mfx->md2 ) md_write(mfx->md2, buf, i ); } else rc = -1; /* eof */ *ret_len = i; } else if( control == IOBUFCTRL_DESC ) *(char**)buf = "md_filter"; return rc; } void free_md_filter_context( md_filter_context_t *mfx ) { md_close(mfx->md); md_close(mfx->md2); mfx->md = NULL; mfx->md2 = NULL; mfx->maxbuf_size = 0; } gnupg-1.4.20/g10/tlv.h0000644000175000017500000000726512635262326011225 00000000000000/* tlv.h - Tag-Length-Value Utilities * Copyright (C) 2004 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 3 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, see . */ #ifndef SCD_TLV_H #define SCD_TLV_H 1 enum tlv_tag_class { CLASS_UNIVERSAL = 0, CLASS_APPLICATION = 1, CLASS_CONTEXT = 2, CLASS_PRIVATE =3 }; enum tlv_tag_type { TAG_NONE = 0, TAG_BOOLEAN = 1, TAG_INTEGER = 2, TAG_BIT_STRING = 3, TAG_OCTET_STRING = 4, TAG_NULL = 5, TAG_OBJECT_ID = 6, TAG_OBJECT_DESCRIPTOR = 7, TAG_EXTERNAL = 8, TAG_REAL = 9, TAG_ENUMERATED = 10, TAG_EMBEDDED_PDV = 11, TAG_UTF8_STRING = 12, TAG_REALTIVE_OID = 13, TAG_SEQUENCE = 16, TAG_SET = 17, TAG_NUMERIC_STRING = 18, TAG_PRINTABLE_STRING = 19, TAG_TELETEX_STRING = 20, TAG_VIDEOTEX_STRING = 21, TAG_IA5_STRING = 22, TAG_UTC_TIME = 23, TAG_GENERALIZED_TIME = 24, TAG_GRAPHIC_STRING = 25, TAG_VISIBLE_STRING = 26, TAG_GENERAL_STRING = 27, TAG_UNIVERSAL_STRING = 28, TAG_CHARACTER_STRING = 29, TAG_BMP_STRING = 30 }; /* Locate a TLV encoded data object in BUFFER of LENGTH and return a pointer to value as well as its length in NBYTES. Return NULL if it was not found or if the object does not fit into the buffer. */ const unsigned char *find_tlv (const unsigned char *buffer, size_t length, int tag, size_t *nbytes); /* Locate a TLV encoded data object in BUFFER of LENGTH and return a pointer to value as well as its length in NBYTES. Return NULL if it was not found. Note, that the function does not check whether the value fits into the provided buffer.*/ const unsigned char *find_tlv_unchecked (const unsigned char *buffer, size_t length, int tag, size_t *nbytes); /* ASN.1 BER parser: Parse BUFFER of length SIZE and return the tag and the length part from the TLV triplet. Update BUFFER and SIZE on success. */ gpg_error_t parse_ber_header (unsigned char const **buffer, size_t *size, int *r_class, int *r_tag, int *r_constructed, int *r_ndef, size_t *r_length, size_t *r_nhdr); /* Return the next token of an canconical encoded S-expression. BUF is the pointer to the S-expression and BUFLEN is a pointer to the length of this S-expression (used to validate the syntax). Both are updated to reflect the new position. The token itself is returned as a pointer into the orginal buffer at TOK and TOKLEN. If a parentheses is the next token, TOK will be set to NULL. TOKLEN is checked to be within the bounds. On error a error code is returned and all pointers should are not guaranteed to point to a meanigful value. DEPTH should be initialized to 0 and will reflect on return the actual depth of the tree. To detect the end of the S-expression it is advisable to check DEPTH after a successful return. */ gpg_error_t parse_sexp (unsigned char const **buf, size_t *buflen, int *depth, unsigned char const **tok, size_t *toklen); #endif /* SCD_TLV_H */ gnupg-1.4.20/g10/app-common.h0000644000175000017500000002313212635262326012455 00000000000000/* app-common.h - Common declarations for all card applications * Copyright (C) 2003, 2005, 2008 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 3 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, see . * * $Id$ */ #ifndef GNUPG_SCD_APP_COMMON_H #define GNUPG_SCD_APP_COMMON_H #if GNUPG_MAJOR_VERSION == 1 # ifdef ENABLE_AGENT_SUPPORT # include "assuan.h" # endif #else # include #endif #define APP_CHANGE_FLAG_RESET 1 #define APP_CHANGE_FLAG_NULLPIN 2 struct app_local_s; /* Defined by all app-*.c. */ struct app_ctx_s { /* Number of connections currently using this application context. If this is not 0 the application has been initialized and the function pointers may be used. Note that for unsupported operations the particular function pointer is set to NULL */ unsigned int ref_count; /* Flag indicating that a reset has been done for that application and that this context is merely lingering and just should not be reused. */ int no_reuse; /* Used reader slot. */ int slot; /* If this is used by GnuPG 1.4 we need to know the assuan context in case we need to divert the operation to an already running agent. This if ASSUAN_CTX is not NULL we take this as indication that all operations are diverted to gpg-agent. */ #if GNUPG_MAJOR_VERSION == 1 assuan_context_t assuan_ctx; #endif /*GNUPG_MAJOR_VERSION == 1*/ unsigned char *serialno; /* Serialnumber in raw form, allocated. */ size_t serialnolen; /* Length in octets of serialnumber. */ const char *apptype; unsigned int card_version; int did_chv1; int force_chv1; /* True if the card does not cache CHV1. */ int did_chv2; int did_chv3; struct app_local_s *app_local; /* Local to the application. */ struct { void (*deinit) (app_t app); gpg_error_t (*learn_status) (app_t app, ctrl_t ctrl, unsigned int flags); gpg_error_t (*readcert) (app_t app, const char *certid, unsigned char **cert, size_t *certlen); gpg_error_t (*readkey) (app_t app, const char *certid, unsigned char **pk, size_t *pklen); gpg_error_t (*getattr) (app_t app, ctrl_t ctrl, const char *name); gpg_error_t (*setattr) (app_t app, const char *name, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const unsigned char *value, size_t valuelen); gpg_error_t (*sign) (app_t app, const char *keyidstr, int hashalgo, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen ); gpg_error_t (*auth) (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen); gpg_error_t (*decipher) (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen); gpg_error_t (*writecert) (app_t app, ctrl_t ctrl, const char *certid, gpg_error_t (*pincb)(void*,const char *,char **), void *pincb_arg, const unsigned char *data, size_t datalen); gpg_error_t (*writekey) (app_t app, ctrl_t ctrl, const char *keyid, unsigned int flags, gpg_error_t (*pincb)(void*,const char *,char **), void *pincb_arg, const unsigned char *pk, size_t pklen); gpg_error_t (*genkey) (app_t app, ctrl_t ctrl, const char *keynostr, unsigned int flags, time_t createtime, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg); gpg_error_t (*change_pin) (app_t app, ctrl_t ctrl, const char *chvnostr, unsigned int flags, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg); gpg_error_t (*check_pin) (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg); } fnc; }; #if GNUPG_MAJOR_VERSION == 1 gpg_error_t app_select_openpgp (app_t app); gpg_error_t app_get_serial_and_stamp (app_t app, char **serial, time_t *stamp); gpg_error_t app_openpgp_storekey (app_t app, int keyno, unsigned char *template, size_t template_len, time_t created_at, const unsigned char *m, size_t mlen, const unsigned char *e, size_t elen, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg); #else /*-- app-help.c --*/ unsigned int app_help_count_bits (const unsigned char *a, size_t len); gpg_error_t app_help_get_keygrip_string (ksba_cert_t cert, char *hexkeygrip); size_t app_help_read_length_of_cert (int slot, int fid, size_t *r_certoff); /*-- app.c --*/ void app_dump_state (void); void application_notify_card_reset (int slot); gpg_error_t check_application_conflict (ctrl_t ctrl, const char *name); gpg_error_t select_application (ctrl_t ctrl, int slot, const char *name, app_t *r_app); char *get_supported_applications (void); void release_application (app_t app); gpg_error_t app_munge_serialno (app_t app); gpg_error_t app_get_serial_and_stamp (app_t app, char **serial, time_t *stamp); gpg_error_t app_write_learn_status (app_t app, ctrl_t ctrl, unsigned int flags); gpg_error_t app_readcert (app_t app, const char *certid, unsigned char **cert, size_t *certlen); gpg_error_t app_readkey (app_t app, const char *keyid, unsigned char **pk, size_t *pklen); gpg_error_t app_getattr (app_t app, ctrl_t ctrl, const char *name); gpg_error_t app_setattr (app_t app, const char *name, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const unsigned char *value, size_t valuelen); gpg_error_t app_sign (app_t app, const char *keyidstr, int hashalgo, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen ); gpg_error_t app_auth (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen); gpg_error_t app_decipher (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen ); gpg_error_t app_writecert (app_t app, ctrl_t ctrl, const char *certidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const unsigned char *keydata, size_t keydatalen); gpg_error_t app_writekey (app_t app, ctrl_t ctrl, const char *keyidstr, unsigned int flags, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const unsigned char *keydata, size_t keydatalen); gpg_error_t app_genkey (app_t app, ctrl_t ctrl, const char *keynostr, unsigned int flags, time_t createtime, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg); gpg_error_t app_get_challenge (app_t app, size_t nbytes, unsigned char *buffer); gpg_error_t app_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, int reset_mode, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg); gpg_error_t app_check_pin (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg); /*-- app-openpgp.c --*/ gpg_error_t app_select_openpgp (app_t app); /*-- app-nks.c --*/ gpg_error_t app_select_nks (app_t app); /*-- app-dinsig.c --*/ gpg_error_t app_select_dinsig (app_t app); /*-- app-p15.c --*/ gpg_error_t app_select_p15 (app_t app); /*-- app-geldkarte.c --*/ gpg_error_t app_select_geldkarte (app_t app); #endif #endif /*GNUPG_SCD_APP_COMMON_H*/ gnupg-1.4.20/g10/app-openpgp.c0000644000175000017500000034007112635262326012634 00000000000000/* app-openpgp.c - The OpenPGP card application. * Copyright (C) 2003, 2004, 2005, 2007, 2008, * 2009 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 3 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, see . * * $Id$ */ /* Some notes: CHV means Card Holder Verification and is nothing else than a PIN or password. That term seems to have been used originally with GSM cards. Version v2 of the specs changes the term to the clearer term PW for password. We use the terms here interchangeable because we do not want to change existing strings i18n wise. Version 2 of the specs also drops the separate PW2 which was required in v1 due to ISO requirements. It is now possible to have one physical PW but two reference to it so that they can be individually be verified (e.g. to implement a forced verification for one key). Thus you will noticed the use of PW2 with the verify command but not with change_reference_data because the latter operates directly on the physical PW. The Reset Code (RC) as implemented by v2 cards uses the same error counter as the PW2 of v1 cards. By default no RC is set and thus that error counter is set to 0. After setting the RC the error counter will be initialized to 3. */ #include #include #include #include #include #include #include #if GNUPG_MAJOR_VERSION == 1 /* This is used with GnuPG version < 1.9. The code has been source copied from the current GnuPG >= 1.9 and is maintained over there. */ #include "options.h" #include "errors.h" #include "memory.h" #include "util.h" #include "cardglue.h" #else /* GNUPG_MAJOR_VERSION != 1 */ #include "scdaemon.h" #endif /* GNUPG_MAJOR_VERSION != 1 */ #include "i18n.h" #include "iso7816.h" #include "app-common.h" #include "tlv.h" #include "../include/host2net.h" /* A table describing the DOs of the card. */ static struct { int tag; int constructed; int get_from; /* Constructed DO with this DO or 0 for direct access. */ int binary:1; int dont_cache:1; int flush_on_error:1; int get_immediate_in_v11:1; /* Enable a hack to bypass the cache of this data object if it is used in 1.1 and later versions of the card. This does not work with composite DO and is currently only useful for the CHV status bytes. */ int try_extlen:1; /* Large object; try to use an extended length APDU. */ char *desc; } data_objects[] = { { 0x005E, 0, 0, 1, 0, 0, 0, 0, "Login Data" }, { 0x5F50, 0, 0, 0, 0, 0, 0, 0, "URL" }, { 0x5F52, 0, 0, 1, 0, 0, 0, 0, "Historical Bytes" }, { 0x0065, 1, 0, 1, 0, 0, 0, 0, "Cardholder Related Data"}, { 0x005B, 0, 0x65, 0, 0, 0, 0, 0, "Name" }, { 0x5F2D, 0, 0x65, 0, 0, 0, 0, 0, "Language preferences" }, { 0x5F35, 0, 0x65, 0, 0, 0, 0, 0, "Sex" }, { 0x006E, 1, 0, 1, 0, 0, 0, 0, "Application Related Data" }, { 0x004F, 0, 0x6E, 1, 0, 0, 0, 0, "AID" }, { 0x0073, 1, 0, 1, 0, 0, 0, 0, "Discretionary Data Objects" }, { 0x0047, 0, 0x6E, 1, 1, 0, 0, 0, "Card Capabilities" }, { 0x00C0, 0, 0x6E, 1, 1, 0, 0, 0, "Extended Card Capabilities" }, { 0x00C1, 0, 0x6E, 1, 1, 0, 0, 0, "Algorithm Attributes Signature" }, { 0x00C2, 0, 0x6E, 1, 1, 0, 0, 0, "Algorithm Attributes Decryption" }, { 0x00C3, 0, 0x6E, 1, 1, 0, 0, 0, "Algorithm Attributes Authentication" }, { 0x00C4, 0, 0x6E, 1, 0, 1, 1, 0, "CHV Status Bytes" }, { 0x00C5, 0, 0x6E, 1, 0, 0, 0, 0, "Fingerprints" }, { 0x00C6, 0, 0x6E, 1, 0, 0, 0, 0, "CA Fingerprints" }, { 0x00CD, 0, 0x6E, 1, 0, 0, 0, 0, "Generation time" }, { 0x007A, 1, 0, 1, 0, 0, 0, 0, "Security Support Template" }, { 0x0093, 0, 0x7A, 1, 1, 0, 0, 0, "Digital Signature Counter" }, { 0x0101, 0, 0, 0, 0, 0, 0, 0, "Private DO 1"}, { 0x0102, 0, 0, 0, 0, 0, 0, 0, "Private DO 2"}, { 0x0103, 0, 0, 0, 0, 0, 0, 0, "Private DO 3"}, { 0x0104, 0, 0, 0, 0, 0, 0, 0, "Private DO 4"}, { 0x7F21, 1, 0, 1, 0, 0, 0, 1, "Cardholder certificate"}, { 0 } }; /* The format of RSA private keys. */ typedef enum { RSA_UNKNOWN_FMT, RSA_STD, RSA_STD_N, RSA_CRT, RSA_CRT_N } rsa_key_format_t; /* One cache item for DOs. */ struct cache_s { struct cache_s *next; int tag; size_t length; unsigned char data[1]; }; /* Object with application (i.e. OpenPGP card) specific data. */ struct app_local_s { /* A linked list with cached DOs. */ struct cache_s *cache; /* Keep track of the public keys. */ struct { int read_done; /* True if we have at least tried to read them. */ unsigned char *key; /* This is a malloced buffer with a canonical encoded S-expression encoding a public key. Might be NULL if key is not available. */ size_t keylen; /* The length of the above S-expression. This is usually only required for cross checks because the length of an S-expression is implicitly available. */ } pk[3]; unsigned char status_indicator; /* The card status indicator. */ /* Keep track of the ISO card capabilities. */ struct { unsigned int cmd_chaining:1; /* Command chaining is supported. */ unsigned int ext_lc_le:1; /* Extended Lc and Le are supported. */ } cardcap; /* Keep track of extended card capabilities. */ struct { unsigned int is_v2:1; /* This is a v2.0 compatible card. */ unsigned int get_challenge:1; unsigned int key_import:1; unsigned int change_force_chv:1; unsigned int private_dos:1; unsigned int algo_attr_change:1; /* Algorithm attributes changeable. */ unsigned int sm_supported:1; /* Secure Messaging is supported. */ unsigned int sm_aes128:1; /* Use AES-128 for SM. */ unsigned int max_certlen_3:16; unsigned int max_get_challenge:16; /* Maximum size for get_challenge. */ unsigned int max_cmd_data:16; /* Maximum data size for a command. */ unsigned int max_rsp_data:16; /* Maximum size of a response. */ } extcap; /* Flags used to control the application. */ struct { unsigned int no_sync:1; /* Do not sync CHV1 and CHV2 */ unsigned int def_chv2:1; /* Use 123456 for CHV2. */ } flags; struct { unsigned int n_bits; /* Size of the modulus in bits. The rest of this strucuire is only valid if this is not 0. */ unsigned int e_bits; /* Size of the public exponent in bits. */ rsa_key_format_t format; } keyattr[3]; }; /***** Local prototypes *****/ static unsigned long convert_sig_counter_value (const unsigned char *value, size_t valuelen); static unsigned long get_sig_counter (app_t app); static gpg_error_t do_auth (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen); static void parse_algorithm_attribute (app_t app, int keyno); static gpg_error_t change_keyattr_from_string (app_t app, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *value, size_t valuelen); /* Deconstructor. */ static void do_deinit (app_t app) { if (app && app->app_local) { struct cache_s *c, *c2; int i; for (c = app->app_local->cache; c; c = c2) { c2 = c->next; xfree (c); } for (i=0; i < DIM (app->app_local->pk); i++) { xfree (app->app_local->pk[i].key); app->app_local->pk[i].read_done = 0; } xfree (app->app_local); app->app_local = NULL; } } /* Wrapper around iso7816_get_data which first tries to get the data from the cache. With GET_IMMEDIATE passed as true, the cache is bypassed. With TRY_EXTLEN extended lengths APDUs are use if supported by the card. */ static gpg_error_t get_cached_data (app_t app, int tag, unsigned char **result, size_t *resultlen, int get_immediate, int try_extlen) { gpg_error_t err; int i; unsigned char *p; size_t len; struct cache_s *c; int exmode; *result = NULL; *resultlen = 0; if (!get_immediate) { for (c=app->app_local->cache; c; c = c->next) if (c->tag == tag) { if(c->length) { p = xtrymalloc (c->length); if (!p) return gpg_error (gpg_err_code_from_errno (errno)); memcpy (p, c->data, c->length); *result = p; } *resultlen = c->length; return 0; } } if (try_extlen && app->app_local->cardcap.ext_lc_le) exmode = app->app_local->extcap.max_rsp_data; else exmode = 0; err = iso7816_get_data (app->slot, exmode, tag, &p, &len); if (err) return err; *result = p; *resultlen = len; /* Check whether we should cache this object. */ if (get_immediate) return 0; for (i=0; data_objects[i].tag; i++) if (data_objects[i].tag == tag) { if (data_objects[i].dont_cache) return 0; break; } /* Okay, cache it. */ for (c=app->app_local->cache; c; c = c->next) assert (c->tag != tag); c = xtrymalloc (sizeof *c + len); if (c) { memcpy (c->data, p, len); c->length = len; c->tag = tag; c->next = app->app_local->cache; app->app_local->cache = c; } return 0; } /* Remove DO at TAG from the cache. */ static void flush_cache_item (app_t app, int tag) { struct cache_s *c, *cprev; int i; if (!app->app_local) return; for (c=app->app_local->cache, cprev=NULL; c ; cprev=c, c = c->next) if (c->tag == tag) { if (cprev) cprev->next = c->next; else app->app_local->cache = c->next; xfree (c); for (c=app->app_local->cache; c ; c = c->next) { assert (c->tag != tag); /* Oops: duplicated entry. */ } return; } /* Try again if we have an outer tag. */ for (i=0; data_objects[i].tag; i++) if (data_objects[i].tag == tag && data_objects[i].get_from && data_objects[i].get_from != tag) flush_cache_item (app, data_objects[i].get_from); } /* Flush all entries from the cache which might be out of sync after an error. */ static void flush_cache_after_error (app_t app) { int i; for (i=0; data_objects[i].tag; i++) if (data_objects[i].flush_on_error) flush_cache_item (app, data_objects[i].tag); } /* Flush the entire cache. */ static void flush_cache (app_t app) { if (app && app->app_local) { struct cache_s *c, *c2; for (c = app->app_local->cache; c; c = c2) { c2 = c->next; xfree (c); } app->app_local->cache = NULL; } } /* Get the DO identified by TAG from the card in SLOT and return a buffer with its content in RESULT and NBYTES. The return value is NULL if not found or a pointer which must be used to release the buffer holding value. */ static void * get_one_do (app_t app, int tag, unsigned char **result, size_t *nbytes, int *r_rc) { int rc, i; unsigned char *buffer; size_t buflen; unsigned char *value; size_t valuelen; int dummyrc; int exmode; if (!r_rc) r_rc = &dummyrc; *result = NULL; *nbytes = 0; *r_rc = 0; for (i=0; data_objects[i].tag && data_objects[i].tag != tag; i++) ; if (app->card_version > 0x0100 && data_objects[i].get_immediate_in_v11) { if (data_objects[i].try_extlen && app->app_local->cardcap.ext_lc_le) exmode = app->app_local->extcap.max_rsp_data; else exmode = 0; rc = iso7816_get_data (app->slot, exmode, tag, &buffer, &buflen); if (rc) { *r_rc = rc; return NULL; } *result = buffer; *nbytes = buflen; return buffer; } value = NULL; rc = -1; if (data_objects[i].tag && data_objects[i].get_from) { rc = get_cached_data (app, data_objects[i].get_from, &buffer, &buflen, (data_objects[i].dont_cache || data_objects[i].get_immediate_in_v11), data_objects[i].try_extlen); if (!rc) { const unsigned char *s; s = find_tlv_unchecked (buffer, buflen, tag, &valuelen); if (!s) value = NULL; /* not found */ else if (valuelen > buflen - (s - buffer)) { log_error ("warning: constructed DO too short\n"); value = NULL; xfree (buffer); buffer = NULL; } else value = buffer + (s - buffer); } } if (!value) /* Not in a constructed DO, try simple. */ { rc = get_cached_data (app, tag, &buffer, &buflen, (data_objects[i].dont_cache || data_objects[i].get_immediate_in_v11), data_objects[i].try_extlen); if (!rc) { value = buffer; valuelen = buflen; } } if (!rc) { *nbytes = valuelen; *result = value; return buffer; } *r_rc = rc; return NULL; } static void dump_all_do (int slot) { int rc, i, j; unsigned char *buffer; size_t buflen; for (i=0; data_objects[i].tag; i++) { if (data_objects[i].get_from) continue; /* We don't try extended length APDU because such large DO would be pretty useless in a log file. */ rc = iso7816_get_data (slot, 0, data_objects[i].tag, &buffer, &buflen); if (gpg_err_code (rc) == GPG_ERR_NO_OBJ) ; else if (rc) log_info ("DO `%s' not available: %s\n", data_objects[i].desc, gpg_strerror (rc)); else { if (data_objects[i].binary) { log_info ("DO `%s': ", data_objects[i].desc); log_printhex ("", buffer, buflen); } else log_info ("DO `%s': `%.*s'\n", data_objects[i].desc, (int)buflen, buffer); /* FIXME: sanitize */ if (data_objects[i].constructed) { for (j=0; data_objects[j].tag; j++) { const unsigned char *value; size_t valuelen; if (j==i || data_objects[i].tag != data_objects[j].get_from) continue; value = find_tlv_unchecked (buffer, buflen, data_objects[j].tag, &valuelen); if (!value) ; /* not found */ else if (valuelen > buflen - (value - buffer)) log_error ("warning: constructed DO too short\n"); else { if (data_objects[j].binary) { log_info ("DO `%s': ", data_objects[j].desc); if (valuelen > 200) log_info ("[%u]\n", (unsigned int)valuelen); else log_printhex ("", value, valuelen); } else log_info ("DO `%s': `%.*s'\n", data_objects[j].desc, (int)valuelen, value); /* FIXME: sanitize */ } } } } xfree (buffer); buffer = NULL; } } /* Count the number of bits, assuming the A represents an unsigned big integer of length LEN bytes. */ static unsigned int count_bits (const unsigned char *a, size_t len) { unsigned int n = len * 8; int i; for (; len && !*a; len--, a++, n -=8) ; if (len) { for (i=7; i && !(*a & (1< Were FLAGS is a plain hexadecimal number representing flag values. The lsb is here the rightmost bit. Defined flags bits are: Bit 0 = CHV1 and CHV2 are not syncronized Bit 1 = CHV2 has been been set to the default PIN of "123456" (this implies that bit 0 is also set). */ static void parse_login_data (app_t app) { unsigned char *buffer, *p; size_t buflen, len; void *relptr; /* Set defaults. */ app->app_local->flags.no_sync = 0; app->app_local->flags.def_chv2 = 0; /* Read the DO. */ relptr = get_one_do (app, 0x005E, &buffer, &buflen, NULL); if (!relptr) return; /* Ooops. */ for (; buflen; buflen--, buffer++) if (*buffer == '\n') break; if (buflen < 2 || buffer[1] != '\x14') return; /* No control sequences. */ buflen--; buffer++; do { buflen--; buffer++; if (buflen > 1 && *buffer == 'F' && buffer[1] == '=') { /* Flags control sequence found. */ int lastdig = 0; /* For now we are only interested in the last digit, so skip any leading digits but bail out on invalid characters. */ for (p=buffer+2, len = buflen-2; len && hexdigitp (p); p++, len--) lastdig = xtoi_1 (p); if (len && !(*p == '\n' || *p == '\x18')) goto next; /* Invalid characters in field. */ app->app_local->flags.no_sync = !!(lastdig & 1); app->app_local->flags.def_chv2 = (lastdig & 3) == 3; } next: for (; buflen && *buffer != '\x18'; buflen--, buffer++) if (*buffer == '\n') buflen = 1; } while (buflen); xfree (relptr); } /* Note, that FPR must be at least 20 bytes. */ static gpg_error_t store_fpr (app_t app, int keynumber, u32 timestamp, const unsigned char *m, size_t mlen, const unsigned char *e, size_t elen, unsigned char *fpr, unsigned int card_version) { unsigned int n, nbits; unsigned char *buffer, *p; int tag, tag2; int rc; for (; mlen && !*m; mlen--, m++) /* strip leading zeroes */ ; for (; elen && !*e; elen--, e++) /* strip leading zeroes */ ; n = 6 + 2 + mlen + 2 + elen; p = buffer = xtrymalloc (3 + n); if (!buffer) return gpg_error_from_syserror (); *p++ = 0x99; /* ctb */ *p++ = n >> 8; /* 2 byte length header */ *p++ = n; *p++ = 4; /* key packet version */ *p++ = timestamp >> 24; *p++ = timestamp >> 16; *p++ = timestamp >> 8; *p++ = timestamp; *p++ = 1; /* RSA */ nbits = count_bits (m, mlen); *p++ = nbits >> 8; *p++ = nbits; memcpy (p, m, mlen); p += mlen; nbits = count_bits (e, elen); *p++ = nbits >> 8; *p++ = nbits; memcpy (p, e, elen); p += elen; gcry_md_hash_buffer (GCRY_MD_SHA1, fpr, buffer, n+3); xfree (buffer); tag = (card_version > 0x0007? 0xC7 : 0xC6) + keynumber; flush_cache_item (app, 0xC5); tag2 = 0xCE + keynumber; flush_cache_item (app, 0xCD); rc = iso7816_put_data (app->slot, 0, tag, fpr, 20); if (rc) log_error (_("failed to store the fingerprint: %s\n"),gpg_strerror (rc)); if (!rc && card_version > 0x0100) { unsigned char buf[4]; buf[0] = timestamp >> 24; buf[1] = timestamp >> 16; buf[2] = timestamp >> 8; buf[3] = timestamp; rc = iso7816_put_data (app->slot, 0, tag2, buf, 4); if (rc) log_error (_("failed to store the creation date: %s\n"), gpg_strerror (rc)); } return rc; } static void send_fpr_if_not_null (ctrl_t ctrl, const char *keyword, int number, const unsigned char *fpr) { int i; char buf[41]; char numbuf[25]; for (i=0; i < 20 && !fpr[i]; i++) ; if (i==20) return; /* All zero. */ bin2hex (fpr, 20, buf); if (number == -1) *numbuf = 0; /* Don't print the key number */ else sprintf (numbuf, "%d", number); send_status_info (ctrl, keyword, numbuf, (size_t)strlen(numbuf), buf, (size_t)strlen (buf), NULL, 0); } static void send_fprtime_if_not_null (ctrl_t ctrl, const char *keyword, int number, const unsigned char *stamp) { char numbuf1[50], numbuf2[50]; unsigned long value; value = buf32_to_ulong (stamp); if (!value) return; sprintf (numbuf1, "%d", number); sprintf (numbuf2, "%lu", value); send_status_info (ctrl, keyword, numbuf1, (size_t)strlen(numbuf1), numbuf2, (size_t)strlen(numbuf2), NULL, 0); } static void send_key_data (ctrl_t ctrl, const char *name, const unsigned char *a, size_t alen) { char *buf; buf = bin2hex (a, alen, NULL); if (!buf) { log_error ("memory allocation error in send_key_data\n"); return; } send_status_info (ctrl, "KEY-DATA", name, (size_t)strlen(name), buf, (size_t)strlen (buf), NULL, 0); xfree (buf); } static void send_key_attr (ctrl_t ctrl, app_t app, const char *keyword, int number) { char buffer[200]; assert (number >=0 && number < DIM(app->app_local->keyattr)); /* We only support RSA thus the algo identifier is fixed to 1. */ snprintf (buffer, sizeof buffer, "%d 1 %u %u %d", number+1, app->app_local->keyattr[number].n_bits, app->app_local->keyattr[number].e_bits, app->app_local->keyattr[number].format); send_status_direct (ctrl, keyword, buffer); } /* Implement the GETATTR command. This is similar to the LEARN command but returns just one value via the status interface. */ static gpg_error_t do_getattr (app_t app, ctrl_t ctrl, const char *name) { static struct { const char *name; int tag; int special; } table[] = { { "DISP-NAME", 0x005B }, { "LOGIN-DATA", 0x005E }, { "DISP-LANG", 0x5F2D }, { "DISP-SEX", 0x5F35 }, { "PUBKEY-URL", 0x5F50 }, { "KEY-FPR", 0x00C5, 3 }, { "KEY-TIME", 0x00CD, 4 }, { "KEY-ATTR", 0x0000, -5 }, { "CA-FPR", 0x00C6, 3 }, { "CHV-STATUS", 0x00C4, 1 }, { "SIG-COUNTER", 0x0093, 2 }, { "SERIALNO", 0x004F, -1 }, { "AID", 0x004F }, { "EXTCAP", 0x0000, -2 }, { "PRIVATE-DO-1", 0x0101 }, { "PRIVATE-DO-2", 0x0102 }, { "PRIVATE-DO-3", 0x0103 }, { "PRIVATE-DO-4", 0x0104 }, { "$AUTHKEYID", 0x0000, -3 }, { "$DISPSERIALNO",0x0000, -4 }, { NULL, 0 } }; int idx, i, rc; void *relptr; unsigned char *value; size_t valuelen; for (idx=0; table[idx].name && strcmp (table[idx].name, name); idx++) ; if (!table[idx].name) return gpg_error (GPG_ERR_INV_NAME); if (table[idx].special == -1) { /* The serial number is very special. We could have used the AID DO to retrieve it, but we have it already in the app context and the stamp argument is required anyway which we can't by other means. The AID DO is available anyway but not hex formatted. */ char *serial; time_t stamp; char tmp[50]; if (!app_get_serial_and_stamp (app, &serial, &stamp)) { sprintf (tmp, "%lu", (unsigned long)stamp); send_status_info (ctrl, "SERIALNO", serial, strlen (serial), tmp, strlen (tmp), NULL, 0); xfree (serial); } return 0; } if (table[idx].special == -2) { char tmp[100]; snprintf (tmp, sizeof tmp, "gc=%d ki=%d fc=%d pd=%d mcl3=%u aac=%d sm=%d", app->app_local->extcap.get_challenge, app->app_local->extcap.key_import, app->app_local->extcap.change_force_chv, app->app_local->extcap.private_dos, app->app_local->extcap.max_certlen_3, app->app_local->extcap.algo_attr_change, (app->app_local->extcap.sm_supported ? (app->app_local->extcap.sm_aes128? 7 : 2) : 0)); send_status_info (ctrl, table[idx].name, tmp, strlen (tmp), NULL, 0); return 0; } if (table[idx].special == -3) { char const tmp[] = "OPENPGP.3"; send_status_info (ctrl, table[idx].name, tmp, strlen (tmp), NULL, 0); return 0; } if (table[idx].special == -4) { char *serial; time_t stamp; if (!app_get_serial_and_stamp (app, &serial, &stamp)) { if (strlen (serial) > 16+12) { send_status_info (ctrl, table[idx].name, serial+16, 12, NULL, 0); xfree (serial); return 0; } xfree (serial); } return gpg_error (GPG_ERR_INV_NAME); } if (table[idx].special == -5) { for (i=0; i < 3; i++) send_key_attr (ctrl, app, table[idx].name, i); return 0; } relptr = get_one_do (app, table[idx].tag, &value, &valuelen, &rc); if (relptr) { if (table[idx].special == 1) { char numbuf[7*23]; for (i=0,*numbuf=0; i < valuelen && i < 7; i++) sprintf (numbuf+strlen (numbuf), " %d", value[i]); send_status_info (ctrl, table[idx].name, numbuf, strlen (numbuf), NULL, 0); } else if (table[idx].special == 2) { char numbuf[50]; sprintf (numbuf, "%lu", convert_sig_counter_value (value, valuelen)); send_status_info (ctrl, table[idx].name, numbuf, strlen (numbuf), NULL, 0); } else if (table[idx].special == 3) { if (valuelen >= 60) for (i=0; i < 3; i++) send_fpr_if_not_null (ctrl, table[idx].name, i+1, value+i*20); } else if (table[idx].special == 4) { if (valuelen >= 12) for (i=0; i < 3; i++) send_fprtime_if_not_null (ctrl, table[idx].name, i+1, value+i*4); } else send_status_info (ctrl, table[idx].name, value, valuelen, NULL, 0); xfree (relptr); } return rc; } /* Retrieve the fingerprint from the card inserted in SLOT and write the according hex representation to FPR. Caller must have provide a buffer at FPR of least 41 bytes. Returns 0 on success or an error code. */ #if GNUPG_MAJOR_VERSION > 1 static gpg_error_t retrieve_fpr_from_card (app_t app, int keyno, char *fpr) { gpg_error_t err = 0; void *relptr; unsigned char *value; size_t valuelen; assert (keyno >=0 && keyno <= 2); relptr = get_one_do (app, 0x00C5, &value, &valuelen, NULL); if (relptr && valuelen >= 60) bin2hex (value+keyno*20, 20, fpr); else err = gpg_error (GPG_ERR_NOT_FOUND); xfree (relptr); return err; } #endif /*GNUPG_MAJOR_VERSION > 1*/ /* Retrieve the public key material for the RSA key, whose fingerprint is FPR, from gpg output, which can be read through the stream FP. The RSA modulus will be stored at the address of M and MLEN, the public exponent at E and ELEN. Returns zero on success, an error code on failure. Caller must release the allocated buffers at M and E if the function returns success. */ #if GNUPG_MAJOR_VERSION > 1 static gpg_error_t retrieve_key_material (FILE *fp, const char *hexkeyid, const unsigned char **m, size_t *mlen, const unsigned char **e, size_t *elen) { gcry_error_t err = 0; char *line = NULL; /* read_line() buffer. */ size_t line_size = 0; /* Helper for for read_line. */ int found_key = 0; /* Helper to find a matching key. */ unsigned char *m_new = NULL; unsigned char *e_new = NULL; size_t m_new_n = 0; size_t e_new_n = 0; /* Loop over all records until we have found the subkey corresponding to the fingerprint. Inm general the first record should be the pub record, but we don't rely on that. Given that we only need to look at one key, it is sufficient to compare the keyid so that we don't need to look at "fpr" records. */ for (;;) { char *p; char *fields[6]; int nfields; size_t max_length; gcry_mpi_t mpi; int i; max_length = 4096; i = read_line (fp, &line, &line_size, &max_length); if (!i) break; /* EOF. */ if (i < 0) { err = gpg_error_from_syserror (); goto leave; /* Error. */ } if (!max_length) { err = gpg_error (GPG_ERR_TRUNCATED); goto leave; /* Line truncated - we better stop processing. */ } /* Parse the line into fields. */ for (nfields=0, p=line; p && nfields < DIM (fields); nfields++) { fields[nfields] = p; p = strchr (p, ':'); if (p) *(p++) = 0; } if (!nfields) continue; /* No fields at all - skip line. */ if (!found_key) { if ( (!strcmp (fields[0], "sub") || !strcmp (fields[0], "pub") ) && nfields > 4 && !strcmp (fields[4], hexkeyid)) found_key = 1; continue; } if ( !strcmp (fields[0], "sub") || !strcmp (fields[0], "pub") ) break; /* Next key - stop. */ if ( strcmp (fields[0], "pkd") ) continue; /* Not a key data record. */ i = 0; /* Avoid erroneous compiler warning. */ if ( nfields < 4 || (i = atoi (fields[1])) < 0 || i > 1 || (!i && m_new) || (i && e_new)) { err = gpg_error (GPG_ERR_GENERAL); goto leave; /* Error: Invalid key data record or not an RSA key. */ } err = gcry_mpi_scan (&mpi, GCRYMPI_FMT_HEX, fields[3], 0, NULL); if (err) mpi = NULL; else if (!i) err = gcry_mpi_aprint (GCRYMPI_FMT_STD, &m_new, &m_new_n, mpi); else err = gcry_mpi_aprint (GCRYMPI_FMT_STD, &e_new, &e_new_n, mpi); gcry_mpi_release (mpi); if (err) goto leave; } if (m_new && e_new) { *m = m_new; *mlen = m_new_n; m_new = NULL; *e = e_new; *elen = e_new_n; e_new = NULL; } else err = gpg_error (GPG_ERR_GENERAL); leave: xfree (m_new); xfree (e_new); xfree (line); return err; } #endif /*GNUPG_MAJOR_VERSION > 1*/ /* Get the public key for KEYNO and store it as an S-expresion with the APP handle. On error that field gets cleared. If we already know about the public key we will just return. Note that this does not mean a key is available; this is soley indicated by the presence of the app->app_local->pk[KEYNO-1].key field. Note that GnuPG 1.x does not need this and it would be too time consuming to send it just for the fun of it. However, given that we use the same code in gpg 1.4, we can't use the gcry S-expresion here but need to open encode it. */ #if GNUPG_MAJOR_VERSION > 1 static gpg_error_t get_public_key (app_t app, int keyno) { gpg_error_t err = 0; unsigned char *buffer; const unsigned char *keydata, *m, *e; size_t buflen, keydatalen, mlen, elen; unsigned char *mbuf = NULL; unsigned char *ebuf = NULL; char *keybuf = NULL; char *keybuf_p; if (keyno < 1 || keyno > 3) return gpg_error (GPG_ERR_INV_ID); keyno--; /* Already cached? */ if (app->app_local->pk[keyno].read_done) return 0; xfree (app->app_local->pk[keyno].key); app->app_local->pk[keyno].key = NULL; app->app_local->pk[keyno].keylen = 0; m = e = NULL; /* (avoid cc warning) */ if (app->card_version > 0x0100) { int exmode, le_value; /* We may simply read the public key out of these cards. */ if (app->app_local->cardcap.ext_lc_le) { exmode = 1; /* Use extended length. */ le_value = app->app_local->extcap.max_rsp_data; } else { exmode = 0; le_value = 256; /* Use legacy value. */ } err = iso7816_read_public_key (app->slot, exmode, (const unsigned char*)(keyno == 0? "\xB6" : keyno == 1? "\xB8" : "\xA4"), 2, le_value, &buffer, &buflen); if (err) { log_error (_("reading public key failed: %s\n"), gpg_strerror (err)); goto leave; } keydata = find_tlv (buffer, buflen, 0x7F49, &keydatalen); if (!keydata) { err = gpg_error (GPG_ERR_CARD); log_error (_("response does not contain the public key data\n")); goto leave; } m = find_tlv (keydata, keydatalen, 0x0081, &mlen); if (!m) { err = gpg_error (GPG_ERR_CARD); log_error (_("response does not contain the RSA modulus\n")); goto leave; } e = find_tlv (keydata, keydatalen, 0x0082, &elen); if (!e) { err = gpg_error (GPG_ERR_CARD); log_error (_("response does not contain the RSA public exponent\n")); goto leave; } /* Prepend numbers with a 0 if needed. */ if (mlen && (*m & 0x80)) { mbuf = xtrymalloc ( mlen + 1); if (!mbuf) { err = gpg_error_from_syserror (); goto leave; } *mbuf = 0; memcpy (mbuf+1, m, mlen); mlen++; m = mbuf; } if (elen && (*e & 0x80)) { ebuf = xtrymalloc ( elen + 1); if (!ebuf) { err = gpg_error_from_syserror (); goto leave; } *ebuf = 0; memcpy (ebuf+1, e, elen); elen++; e = ebuf; } } else { /* Due to a design problem in v1.0 cards we can't get the public key out of these cards without doing a verify on CHV3. Clearly that is not an option and thus we try to locate the key using an external helper. The helper we use here is gpg itself, which should know about the key in any case. */ char fpr[41]; char *hexkeyid; char *command = NULL; FILE *fp; int ret; buffer = NULL; /* We don't need buffer. */ err = retrieve_fpr_from_card (app, keyno, fpr); if (err) { log_error ("error while retrieving fpr from card: %s\n", gpg_strerror (err)); goto leave; } hexkeyid = fpr + 24; ret = estream_asprintf (&command, "gpg --list-keys --with-colons --with-key-data '%s'", fpr); if (ret < 0) { err = gpg_error_from_syserror (); goto leave; } fp = popen (command, "r"); xfree (command); if (!fp) { err = gpg_error_from_syserror (); log_error ("running gpg failed: %s\n", gpg_strerror (err)); goto leave; } err = retrieve_key_material (fp, hexkeyid, &m, &mlen, &e, &elen); pclose (fp); if (err) { log_error ("error while retrieving key material through pipe: %s\n", gpg_strerror (err)); goto leave; } } /* Allocate a buffer to construct the S-expression. */ /* FIXME: We should provide a generalized S-expression creation mechanism. */ keybuf = xtrymalloc (50 + 2*35 + mlen + elen + 1); if (!keybuf) { err = gpg_error_from_syserror (); goto leave; } sprintf (keybuf, "(10:public-key(3:rsa(1:n%u:", (unsigned int) mlen); keybuf_p = keybuf + strlen (keybuf); memcpy (keybuf_p, m, mlen); keybuf_p += mlen; sprintf (keybuf_p, ")(1:e%u:", (unsigned int)elen); keybuf_p += strlen (keybuf_p); memcpy (keybuf_p, e, elen); keybuf_p += elen; strcpy (keybuf_p, ")))"); keybuf_p += strlen (keybuf_p); app->app_local->pk[keyno].key = (unsigned char*)keybuf; app->app_local->pk[keyno].keylen = (keybuf_p - keybuf); leave: /* Set a flag to indicate that we tried to read the key. */ app->app_local->pk[keyno].read_done = 1; xfree (buffer); xfree (mbuf); xfree (ebuf); return 0; } #endif /* GNUPG_MAJOR_VERSION > 1 */ /* Send the KEYPAIRINFO back. KEYNO needs to be in the range [1,3]. This is used by the LEARN command. */ static gpg_error_t send_keypair_info (app_t app, ctrl_t ctrl, int keyno) { gpg_error_t err = 0; /* Note that GnuPG 1.x does not need this and it would be too time consuming to send it just for the fun of it. */ #if GNUPG_MAJOR_VERSION > 1 unsigned char grip[20]; char gripstr[41]; char idbuf[50]; err = get_public_key (app, keyno); if (err) goto leave; assert (keyno >= 1 && keyno <= 3); if (!app->app_local->pk[keyno-1].key) goto leave; /* No such key - ignore. */ err = keygrip_from_canon_sexp (app->app_local->pk[keyno-1].key, app->app_local->pk[keyno-1].keylen, grip); if (err) goto leave; bin2hex (grip, 20, gripstr); sprintf (idbuf, "OPENPGP.%d", keyno); send_status_info (ctrl, "KEYPAIRINFO", gripstr, 40, idbuf, strlen (idbuf), NULL, (size_t)0); leave: #endif /* GNUPG_MAJOR_VERSION > 1 */ return err; } /* Handle the LEARN command for OpenPGP. */ static gpg_error_t do_learn_status (app_t app, ctrl_t ctrl, unsigned int flags) { (void)flags; do_getattr (app, ctrl, "EXTCAP"); do_getattr (app, ctrl, "DISP-NAME"); do_getattr (app, ctrl, "DISP-LANG"); do_getattr (app, ctrl, "DISP-SEX"); do_getattr (app, ctrl, "PUBKEY-URL"); do_getattr (app, ctrl, "LOGIN-DATA"); do_getattr (app, ctrl, "KEY-FPR"); if (app->card_version > 0x0100) do_getattr (app, ctrl, "KEY-TIME"); do_getattr (app, ctrl, "CA-FPR"); do_getattr (app, ctrl, "CHV-STATUS"); do_getattr (app, ctrl, "SIG-COUNTER"); if (app->app_local->extcap.private_dos) { do_getattr (app, ctrl, "PRIVATE-DO-1"); do_getattr (app, ctrl, "PRIVATE-DO-2"); if (app->did_chv2) do_getattr (app, ctrl, "PRIVATE-DO-3"); if (app->did_chv3) do_getattr (app, ctrl, "PRIVATE-DO-4"); } send_keypair_info (app, ctrl, 1); send_keypair_info (app, ctrl, 2); send_keypair_info (app, ctrl, 3); /* Note: We do not send the Cardholder Certificate, because that is relativly long and for OpenPGP applications not really needed. */ return 0; } /* Handle the READKEY command for OpenPGP. On success a canonical encoded S-expression with the public key will get stored at PK and its length (for assertions) at PKLEN; the caller must release that buffer. On error PK and PKLEN are not changed and an error code is returned. */ static gpg_error_t do_readkey (app_t app, const char *keyid, unsigned char **pk, size_t *pklen) { #if GNUPG_MAJOR_VERSION > 1 gpg_error_t err; int keyno; unsigned char *buf; if (!strcmp (keyid, "OPENPGP.1")) keyno = 1; else if (!strcmp (keyid, "OPENPGP.2")) keyno = 2; else if (!strcmp (keyid, "OPENPGP.3")) keyno = 3; else return gpg_error (GPG_ERR_INV_ID); err = get_public_key (app, keyno); if (err) return err; buf = app->app_local->pk[keyno-1].key; if (!buf) return gpg_error (GPG_ERR_NO_PUBKEY); *pklen = app->app_local->pk[keyno-1].keylen;; *pk = xtrymalloc (*pklen); if (!*pk) { err = gpg_error_from_syserror (); *pklen = 0; return err; } memcpy (*pk, buf, *pklen); return 0; #else return gpg_error (GPG_ERR_NOT_IMPLEMENTED); #endif } /* Read the standard certificate of an OpenPGP v2 card. It is returned in a freshly allocated buffer with that address stored at CERT and the length of the certificate stored at CERTLEN. CERTID needs to be set to "OPENPGP.3". */ static gpg_error_t do_readcert (app_t app, const char *certid, unsigned char **cert, size_t *certlen) { #if GNUPG_MAJOR_VERSION > 1 gpg_error_t err; unsigned char *buffer; size_t buflen; void *relptr; *cert = NULL; *certlen = 0; if (strcmp (certid, "OPENPGP.3")) return gpg_error (GPG_ERR_INV_ID); if (!app->app_local->extcap.is_v2) return gpg_error (GPG_ERR_NOT_FOUND); relptr = get_one_do (app, 0x7F21, &buffer, &buflen, NULL); if (!relptr) return gpg_error (GPG_ERR_NOT_FOUND); if (!buflen) err = gpg_error (GPG_ERR_NOT_FOUND); else if (!(*cert = xtrymalloc (buflen))) err = gpg_error_from_syserror (); else { memcpy (*cert, buffer, buflen); *certlen = buflen; err = 0; } xfree (relptr); return err; #else return gpg_error (GPG_ERR_NOT_IMPLEMENTED); #endif } /* Verify a CHV either using using the pinentry or if possibile by using a keypad. PINCB and PINCB_ARG describe the usual callback for the pinentry. CHVNO must be either 1 or 2. SIGCOUNT is only used with CHV1. PINVALUE is the address of a pointer which will receive a newly allocated block with the actual PIN (this is useful in case that PIN shall be used for another verify operation). The caller needs to free this value. If the function returns with success and NULL is stored at PINVALUE, the caller should take this as an indication that the keypad has been used. */ static gpg_error_t verify_a_chv (app_t app, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, int chvno, unsigned long sigcount, char **pinvalue) { int rc = 0; char *prompt_buffer = NULL; const char *prompt; iso7816_pininfo_t pininfo; int minlen = 6; assert (chvno == 1 || chvno == 2); *pinvalue = NULL; if (chvno == 2 && app->app_local->flags.def_chv2) { /* Special case for def_chv2 mechanism. */ if (opt.verbose) log_info (_("using default PIN as %s\n"), "CHV2"); rc = iso7816_verify (app->slot, 0x82, "123456", 6); if (rc) { /* Verification of CHV2 with the default PIN failed, although the card pretends to have the default PIN set as CHV2. We better disable the def_chv2 flag now. */ log_info (_("failed to use default PIN as %s: %s" " - disabling further default use\n"), "CHV2", gpg_strerror (rc)); app->app_local->flags.def_chv2 = 0; } return rc; } memset (&pininfo, 0, sizeof pininfo); pininfo.mode = 1; pininfo.minlen = minlen; if (chvno == 1) { #define PROMPTSTRING _("||Please enter the PIN%%0A[sigs done: %lu]") size_t promptsize = strlen (PROMPTSTRING) + 50; prompt_buffer = xtrymalloc (promptsize); if (!prompt_buffer) return gpg_error_from_syserror (); snprintf (prompt_buffer, promptsize-1, PROMPTSTRING, sigcount); prompt = prompt_buffer; #undef PROMPTSTRING } else prompt = _("||Please enter the PIN"); if (!opt.disable_keypad && !iso7816_check_keypad (app->slot, ISO7816_VERIFY, &pininfo) ) { /* The reader supports the verify command through the keypad. Note that the pincb appends a text to the prompt telling the user to use the keypad. */ rc = pincb (pincb_arg, prompt, NULL); prompt = NULL; xfree (prompt_buffer); prompt_buffer = NULL; if (rc) { log_info (_("PIN callback returned error: %s\n"), gpg_strerror (rc)); return rc; } rc = iso7816_verify_kp (app->slot, 0x80+chvno, "", 0, &pininfo); /* Dismiss the prompt. */ pincb (pincb_arg, NULL, NULL); assert (!*pinvalue); } else { /* The reader has no keypad or we don't want to use it. */ rc = pincb (pincb_arg, prompt, pinvalue); prompt = NULL; xfree (prompt_buffer); prompt_buffer = NULL; if (rc) { log_info (_("PIN callback returned error: %s\n"), gpg_strerror (rc)); return rc; } if (strlen (*pinvalue) < minlen) { log_error (_("PIN for CHV%d is too short;" " minimum length is %d\n"), chvno, minlen); xfree (*pinvalue); *pinvalue = NULL; return gpg_error (GPG_ERR_BAD_PIN); } rc = iso7816_verify (app->slot, 0x80+chvno, *pinvalue, strlen (*pinvalue)); } if (rc) { log_error (_("verify CHV%d failed: %s\n"), chvno, gpg_strerror (rc)); xfree (*pinvalue); *pinvalue = NULL; flush_cache_after_error (app); } return rc; } /* Verify CHV2 if required. Depending on the configuration of the card CHV1 will also be verified. */ static gpg_error_t verify_chv2 (app_t app, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg) { int rc; char *pinvalue; if (app->did_chv2) return 0; /* We already verified CHV2. */ rc = verify_a_chv (app, pincb, pincb_arg, 2, 0, &pinvalue); if (rc) return rc; app->did_chv2 = 1; if (!app->did_chv1 && !app->force_chv1 && pinvalue) { /* For convenience we verify CHV1 here too. We do this only if the card is not configured to require a verification before each CHV1 controlled operation (force_chv1) and if we are not using the keypad (PINVALUE == NULL). */ rc = iso7816_verify (app->slot, 0x81, pinvalue, strlen (pinvalue)); if (gpg_err_code (rc) == GPG_ERR_BAD_PIN) rc = gpg_error (GPG_ERR_PIN_NOT_SYNCED); if (rc) { log_error (_("verify CHV%d failed: %s\n"), 1, gpg_strerror (rc)); flush_cache_after_error (app); } else app->did_chv1 = 1; } xfree (pinvalue); return rc; } /* Build the prompt to enter the Admin PIN. The prompt depends on the current sdtate of the card. */ static gpg_error_t build_enter_admin_pin_prompt (app_t app, char **r_prompt) { void *relptr; unsigned char *value; size_t valuelen; int remaining; char *prompt; *r_prompt = NULL; relptr = get_one_do (app, 0x00C4, &value, &valuelen, NULL); if (!relptr || valuelen < 7) { log_error (_("error retrieving CHV status from card\n")); xfree (relptr); return gpg_error (GPG_ERR_CARD); } if (value[6] == 0) { log_info (_("card is permanently locked!\n")); xfree (relptr); return gpg_error (GPG_ERR_BAD_PIN); } remaining = value[6]; xfree (relptr); log_info(_("%d Admin PIN attempts remaining before card" " is permanently locked\n"), remaining); if (remaining < 3) { /* TRANSLATORS: Do not translate the "|A|" prefix but keep it at the start of the string. Use %%0A to force a linefeed. */ prompt = xtryasprintf (_("|A|Please enter the Admin PIN%%0A" "[remaining attempts: %d]"), remaining); } else prompt = xtrystrdup (_("|A|Please enter the Admin PIN")); if (!prompt) return gpg_error_from_syserror (); *r_prompt = prompt; return 0; } /* Verify CHV3 if required. */ static gpg_error_t verify_chv3 (app_t app, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg) { int rc = 0; #if GNUPG_MAJOR_VERSION != 1 if (!opt.allow_admin) { log_info (_("access to admin commands is not configured\n")); return gpg_error (GPG_ERR_EACCES); } #endif if (!app->did_chv3) { iso7816_pininfo_t pininfo; int minlen = 8; char *prompt; memset (&pininfo, 0, sizeof pininfo); pininfo.mode = 1; pininfo.minlen = minlen; rc = build_enter_admin_pin_prompt (app, &prompt); if (rc) return rc; if (!opt.disable_keypad && !iso7816_check_keypad (app->slot, ISO7816_VERIFY, &pininfo) ) { /* The reader supports the verify command through the keypad. */ rc = pincb (pincb_arg, prompt, NULL); xfree (prompt); prompt = NULL; if (rc) { log_info (_("PIN callback returned error: %s\n"), gpg_strerror (rc)); return rc; } rc = iso7816_verify_kp (app->slot, 0x83, "", 0, &pininfo); /* Dismiss the prompt. */ pincb (pincb_arg, NULL, NULL); } else { char *pinvalue; rc = pincb (pincb_arg, prompt, &pinvalue); xfree (prompt); prompt = NULL; if (rc) { log_info (_("PIN callback returned error: %s\n"), gpg_strerror (rc)); return rc; } if (strlen (pinvalue) < minlen) { log_error (_("PIN for CHV%d is too short;" " minimum length is %d\n"), 3, minlen); xfree (pinvalue); return gpg_error (GPG_ERR_BAD_PIN); } rc = iso7816_verify (app->slot, 0x83, pinvalue, strlen (pinvalue)); xfree (pinvalue); } if (rc) { log_error (_("verify CHV%d failed: %s\n"), 3, gpg_strerror (rc)); flush_cache_after_error (app); return rc; } app->did_chv3 = 1; } return rc; } /* Handle the SETATTR operation. All arguments are already basically checked. */ static gpg_error_t do_setattr (app_t app, const char *name, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const unsigned char *value, size_t valuelen) { gpg_error_t rc; int idx; static struct { const char *name; int tag; int need_chv; int special; unsigned int need_v2:1; } table[] = { { "DISP-NAME", 0x005B, 3 }, { "LOGIN-DATA", 0x005E, 3, 2 }, { "DISP-LANG", 0x5F2D, 3 }, { "DISP-SEX", 0x5F35, 3 }, { "PUBKEY-URL", 0x5F50, 3 }, { "CHV-STATUS-1", 0x00C4, 3, 1 }, { "CA-FPR-1", 0x00CA, 3 }, { "CA-FPR-2", 0x00CB, 3 }, { "CA-FPR-3", 0x00CC, 3 }, { "PRIVATE-DO-1", 0x0101, 2 }, { "PRIVATE-DO-2", 0x0102, 3 }, { "PRIVATE-DO-3", 0x0103, 2 }, { "PRIVATE-DO-4", 0x0104, 3 }, { "CERT-3", 0x7F21, 3, 0, 1 }, { "SM-KEY-ENC", 0x00D1, 3, 0, 1 }, { "SM-KEY-MAC", 0x00D2, 3, 0, 1 }, { "KEY-ATTR", 0, 0, 3, 1 }, { NULL, 0 } }; int exmode; for (idx=0; table[idx].name && strcmp (table[idx].name, name); idx++) ; if (!table[idx].name) return gpg_error (GPG_ERR_INV_NAME); if (table[idx].need_v2 && !app->app_local->extcap.is_v2) return gpg_error (GPG_ERR_NOT_SUPPORTED); /* Not yet supported. */ if (table[idx].special == 3) return change_keyattr_from_string (app, pincb, pincb_arg, value, valuelen); switch (table[idx].need_chv) { case 2: rc = verify_chv2 (app, pincb, pincb_arg); break; case 3: rc = verify_chv3 (app, pincb, pincb_arg); break; default: rc = 0; } if (rc) return rc; /* Flush the cache before writing it, so that the next get operation will reread the data from the card and thus get synced in case of errors (e.g. data truncated by the card). */ flush_cache_item (app, table[idx].tag); if (app->app_local->cardcap.ext_lc_le && valuelen > 254) exmode = 1; /* Use extended length w/o a limit. */ else if (app->app_local->cardcap.cmd_chaining && valuelen > 254) exmode = -254; /* Command chaining with max. 254 bytes. */ else exmode = 0; rc = iso7816_put_data (app->slot, exmode, table[idx].tag, value, valuelen); if (rc) log_error ("failed to set `%s': %s\n", table[idx].name, gpg_strerror (rc)); if (table[idx].special == 1) app->force_chv1 = (valuelen && *value == 0); else if (table[idx].special == 2) parse_login_data (app); return rc; } /* Handle the WRITECERT command for OpenPGP. This rites the standard certifciate to the card; CERTID needs to be set to "OPENPGP.3". PINCB and PINCB_ARG are the usual arguments for the pinentry callback. */ static gpg_error_t do_writecert (app_t app, ctrl_t ctrl, const char *certidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const unsigned char *certdata, size_t certdatalen) { (void)ctrl; #if GNUPG_MAJOR_VERSION > 1 if (strcmp (certidstr, "OPENPGP.3")) return gpg_error (GPG_ERR_INV_ID); if (!certdata || !certdatalen) return gpg_error (GPG_ERR_INV_ARG); if (!app->app_local->extcap.is_v2) return gpg_error (GPG_ERR_NOT_SUPPORTED); if (certdatalen > app->app_local->extcap.max_certlen_3) return gpg_error (GPG_ERR_TOO_LARGE); return do_setattr (app, "CERT-3", pincb, pincb_arg, certdata, certdatalen); #else return gpg_error (GPG_ERR_NOT_IMPLEMENTED); #endif } /* Handle the PASSWD command. The following combinations are possible: Flags CHVNO Vers. Description RESET 1 1 Verify CHV3 and set a new CHV1 and CHV2 RESET 1 2 Verify PW3 and set a new PW1. RESET 2 1 Verify CHV3 and set a new CHV1 and CHV2. RESET 2 2 Verify PW3 and set a new Reset Code. RESET 3 any Returns GPG_ERR_INV_ID. - 1 1 Verify CHV2 and set a new CHV1 and CHV2. - 1 2 Verify PW1 and set a new PW1. - 2 1 Verify CHV2 and set a new CHV1 and CHV2. - 2 2 Verify Reset Code and set a new PW1. - 3 any Verify CHV3/PW3 and set a new CHV3/PW3. */ static gpg_error_t do_change_pin (app_t app, ctrl_t ctrl, const char *chvnostr, unsigned int flags, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg) { int rc = 0; int chvno = atoi (chvnostr); char *resetcode = NULL; char *oldpinvalue = NULL; char *pinvalue; int reset_mode = !!(flags & APP_CHANGE_FLAG_RESET); int set_resetcode = 0; (void)ctrl; if (reset_mode && chvno == 3) { rc = gpg_error (GPG_ERR_INV_ID); goto leave; } if (!app->app_local->extcap.is_v2) { /* Version 1 cards. */ if (reset_mode || chvno == 3) { /* We always require that the PIN is entered. */ app->did_chv3 = 0; rc = verify_chv3 (app, pincb, pincb_arg); if (rc) goto leave; } else if (chvno == 1 || chvno == 2) { /* On a v1.x card CHV1 and CVH2 should always have the same value, thus we enforce it here. */ int save_force = app->force_chv1; app->force_chv1 = 0; app->did_chv1 = 0; app->did_chv2 = 0; rc = verify_chv2 (app, pincb, pincb_arg); app->force_chv1 = save_force; if (rc) goto leave; } else { rc = gpg_error (GPG_ERR_INV_ID); goto leave; } } else { /* Version 2 cards. */ if (reset_mode) { /* To reset a PIN the Admin PIN is required. */ app->did_chv3 = 0; rc = verify_chv3 (app, pincb, pincb_arg); if (rc) goto leave; if (chvno == 2) set_resetcode = 1; } else if (chvno == 1 || chvno == 3) { int minlen = (chvno ==3)? 8 : 6; char *promptbuf = NULL; const char *prompt; if (chvno == 3) { rc = build_enter_admin_pin_prompt (app, &promptbuf); if (rc) goto leave; prompt = promptbuf; } else prompt = _("||Please enter the PIN"); rc = pincb (pincb_arg, prompt, &oldpinvalue); xfree (promptbuf); promptbuf = NULL; if (rc) { log_info (_("PIN callback returned error: %s\n"), gpg_strerror (rc)); goto leave; } if (strlen (oldpinvalue) < minlen) { log_info (_("PIN for CHV%d is too short;" " minimum length is %d\n"), chvno, minlen); rc = gpg_error (GPG_ERR_BAD_PIN); goto leave; } } else if (chvno == 2) { /* There is no PW2 for v2 cards. We use this condition to allow a PW reset using the Reset Code. */ void *relptr; unsigned char *value; size_t valuelen; int remaining; int minlen = 8; relptr = get_one_do (app, 0x00C4, &value, &valuelen, NULL); if (!relptr || valuelen < 7) { log_error (_("error retrieving CHV status from card\n")); xfree (relptr); rc = gpg_error (GPG_ERR_CARD); goto leave; } remaining = value[5]; xfree (relptr); if (!remaining) { log_error (_("Reset Code not or not anymore available\n")); rc = gpg_error (GPG_ERR_BAD_PIN); goto leave; } rc = pincb (pincb_arg, _("||Please enter the Reset Code for the card"), &resetcode); if (rc) { log_info (_("PIN callback returned error: %s\n"), gpg_strerror (rc)); goto leave; } if (strlen (resetcode) < minlen) { log_info (_("Reset Code is too short; minimum length is %d\n"), minlen); rc = gpg_error (GPG_ERR_BAD_PIN); goto leave; } } else { rc = gpg_error (GPG_ERR_INV_ID); goto leave; } } if (chvno == 3) app->did_chv3 = 0; else app->did_chv1 = app->did_chv2 = 0; /* TRANSLATORS: Do not translate the "|*|" prefixes but keep it at the start of the string. We need this elsewhere to get some infos on the string. */ rc = pincb (pincb_arg, set_resetcode? _("|RN|New Reset Code") : chvno == 3? _("|AN|New Admin PIN") : _("|N|New PIN"), &pinvalue); if (rc) { log_error (_("error getting new PIN: %s\n"), gpg_strerror (rc)); goto leave; } if (resetcode) { char *buffer; buffer = xtrymalloc (strlen (resetcode) + strlen (pinvalue) + 1); if (!buffer) rc = gpg_error_from_syserror (); else { strcpy (stpcpy (buffer, resetcode), pinvalue); rc = iso7816_reset_retry_counter_with_rc (app->slot, 0x81, buffer, strlen (buffer)); wipememory (buffer, strlen (buffer)); xfree (buffer); } } else if (set_resetcode) { if (strlen (pinvalue) < 8) { log_error (_("Reset Code is too short; minimum length is %d\n"), 8); rc = gpg_error (GPG_ERR_BAD_PIN); } else rc = iso7816_put_data (app->slot, 0, 0xD3, pinvalue, strlen (pinvalue)); } else if (reset_mode) { rc = iso7816_reset_retry_counter (app->slot, 0x81, pinvalue, strlen (pinvalue)); if (!rc && !app->app_local->extcap.is_v2) rc = iso7816_reset_retry_counter (app->slot, 0x82, pinvalue, strlen (pinvalue)); } else if (!app->app_local->extcap.is_v2) { /* Version 1 cards. */ if (chvno == 1 || chvno == 2) { rc = iso7816_change_reference_data (app->slot, 0x81, NULL, 0, pinvalue, strlen (pinvalue)); if (!rc) rc = iso7816_change_reference_data (app->slot, 0x82, NULL, 0, pinvalue, strlen (pinvalue)); } else /* CHVNO == 3 */ { rc = iso7816_change_reference_data (app->slot, 0x80 + chvno, NULL, 0, pinvalue, strlen (pinvalue)); } } else { /* Version 2 cards. */ assert (chvno == 1 || chvno == 3); rc = iso7816_change_reference_data (app->slot, 0x80 + chvno, oldpinvalue, strlen (oldpinvalue), pinvalue, strlen (pinvalue)); } if (pinvalue) { wipememory (pinvalue, strlen (pinvalue)); xfree (pinvalue); } if (rc) flush_cache_after_error (app); leave: if (resetcode) { wipememory (resetcode, strlen (resetcode)); xfree (resetcode); } if (oldpinvalue) { wipememory (oldpinvalue, strlen (oldpinvalue)); xfree (oldpinvalue); } return rc; } /* Check whether a key already exists. KEYIDX is the index of the key (0..2). If FORCE is TRUE a diagnositic will be printed but no error returned if the key already exists. The flag GENERATING is only used to print correct messages. */ static gpg_error_t does_key_exist (app_t app, int keyidx, int generating, int force) { const unsigned char *fpr; unsigned char *buffer; size_t buflen, n; int i; assert (keyidx >=0 && keyidx <= 2); if (iso7816_get_data (app->slot, 0, 0x006E, &buffer, &buflen)) { log_error (_("error reading application data\n")); return gpg_error (GPG_ERR_GENERAL); } fpr = find_tlv (buffer, buflen, 0x00C5, &n); if (!fpr || n < 60) { log_error (_("error reading fingerprint DO\n")); xfree (buffer); return gpg_error (GPG_ERR_GENERAL); } fpr += 20*keyidx; for (i=0; i < 20 && !fpr[i]; i++) ; xfree (buffer); if (i!=20 && !force) { log_error (_("key already exists\n")); return gpg_error (GPG_ERR_EEXIST); } else if (i!=20) log_info (_("existing key will be replaced\n")); else if (generating) log_info (_("generating new key\n")); else log_info (_("writing new key\n")); return 0; } /* Create a TLV tag and value and store it at BUFFER. Return the length of tag and length. A LENGTH greater than 65535 is truncated. */ static size_t add_tlv (unsigned char *buffer, unsigned int tag, size_t length) { unsigned char *p = buffer; assert (tag <= 0xffff); if ( tag > 0xff ) *p++ = tag >> 8; *p++ = tag; if (length < 128) *p++ = length; else if (length < 256) { *p++ = 0x81; *p++ = length; } else { if (length > 0xffff) length = 0xffff; *p++ = 0x82; *p++ = length >> 8; *p++ = length; } return p - buffer; } /* Build the private key template as specified in the OpenPGP specs v2.0 section 4.3.3.7. */ static gpg_error_t build_privkey_template (app_t app, int keyno, const unsigned char *rsa_n, size_t rsa_n_len, const unsigned char *rsa_e, size_t rsa_e_len, const unsigned char *rsa_p, size_t rsa_p_len, const unsigned char *rsa_q, size_t rsa_q_len, unsigned char **result, size_t *resultlen) { size_t rsa_e_reqlen; unsigned char privkey[7*(1+3)]; size_t privkey_len; unsigned char exthdr[2+2+3]; size_t exthdr_len; unsigned char suffix[2+3]; size_t suffix_len; unsigned char *tp; size_t datalen; unsigned char *template; size_t template_size; *result = NULL; *resultlen = 0; switch (app->app_local->keyattr[keyno].format) { case RSA_STD: case RSA_STD_N: break; case RSA_CRT: case RSA_CRT_N: return gpg_error (GPG_ERR_NOT_SUPPORTED); default: return gpg_error (GPG_ERR_INV_VALUE); } /* Get the required length for E. */ rsa_e_reqlen = app->app_local->keyattr[keyno].e_bits/8; assert (rsa_e_len <= rsa_e_reqlen); /* Build the 7f48 cardholder private key template. */ datalen = 0; tp = privkey; tp += add_tlv (tp, 0x91, rsa_e_reqlen); datalen += rsa_e_reqlen; tp += add_tlv (tp, 0x92, rsa_p_len); datalen += rsa_p_len; tp += add_tlv (tp, 0x93, rsa_q_len); datalen += rsa_q_len; if (app->app_local->keyattr[keyno].format == RSA_STD_N || app->app_local->keyattr[keyno].format == RSA_CRT_N) { tp += add_tlv (tp, 0x97, rsa_n_len); datalen += rsa_n_len; } privkey_len = tp - privkey; /* Build the extended header list without the private key template. */ tp = exthdr; *tp++ = keyno ==0 ? 0xb6 : keyno == 1? 0xb8 : 0xa4; *tp++ = 0; tp += add_tlv (tp, 0x7f48, privkey_len); exthdr_len = tp - exthdr; /* Build the 5f48 suffix of the data. */ tp = suffix; tp += add_tlv (tp, 0x5f48, datalen); suffix_len = tp - suffix; /* Now concatenate everything. */ template_size = (1 + 3 /* 0x4d and len. */ + exthdr_len + privkey_len + suffix_len + datalen); tp = template = xtrymalloc_secure (template_size); if (!template) return gpg_error_from_syserror (); tp += add_tlv (tp, 0x4d, exthdr_len + privkey_len + suffix_len + datalen); memcpy (tp, exthdr, exthdr_len); tp += exthdr_len; memcpy (tp, privkey, privkey_len); tp += privkey_len; memcpy (tp, suffix, suffix_len); tp += suffix_len; memcpy (tp, rsa_e, rsa_e_len); if (rsa_e_len < rsa_e_reqlen) { /* Right justify E. */ memmove (tp + rsa_e_reqlen - rsa_e_len, tp, rsa_e_len); memset (tp, 0, rsa_e_reqlen - rsa_e_len); } tp += rsa_e_reqlen; memcpy (tp, rsa_p, rsa_p_len); tp += rsa_p_len; memcpy (tp, rsa_q, rsa_q_len); tp += rsa_q_len; if (app->app_local->keyattr[keyno].format == RSA_STD_N || app->app_local->keyattr[keyno].format == RSA_CRT_N) { memcpy (tp, rsa_n, rsa_n_len); tp += rsa_n_len; } /* Sanity check. We don't know the exact length because we allocated 3 bytes for the first length header. */ assert (tp - template <= template_size); *result = template; *resultlen = tp - template; return 0; } /* Helper for do_writekley to change the size of a key. Not ethat this deletes the entire key without asking. */ static gpg_error_t change_keyattr (app_t app, int keyno, unsigned int nbits, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg) { gpg_error_t err; unsigned char *buffer; size_t buflen; void *relptr; assert (keyno >=0 && keyno <= 2); if (nbits > 3072) return gpg_error (GPG_ERR_TOO_LARGE); /* Read the current attributes into a buffer. */ relptr = get_one_do (app, 0xC1+keyno, &buffer, &buflen, NULL); if (!relptr) return gpg_error (GPG_ERR_CARD); if (buflen < 6 || buffer[0] != 1) { /* Attriutes too short or not an RSA key. */ xfree (relptr); return gpg_error (GPG_ERR_CARD); } /* We only change n_bits and don't touch anything else. Before we do so, we round up NBITS to a sensible way in the same way as gpg's key generation does it. This may help to sort out problems with a few bits too short keys. */ nbits = ((nbits + 31) / 32) * 32; buffer[1] = (nbits >> 8); buffer[2] = nbits; /* Prepare for storing the key. */ err = verify_chv3 (app, pincb, pincb_arg); if (err) { xfree (relptr); return err; } /* Change the attribute. */ err = iso7816_put_data (app->slot, 0, 0xC1+keyno, buffer, buflen); xfree (relptr); if (err) log_error ("error changing size of key %d to %u bits\n", keyno+1, nbits); else log_info ("size of key %d changed to %u bits\n", keyno+1, nbits); flush_cache (app); parse_algorithm_attribute (app, keyno); app->did_chv1 = 0; app->did_chv2 = 0; app->did_chv3 = 0; return err; } /* Helper to process an setattr command for name KEY-ATTR. It expects a string "--force " in (VALUE,VALUELEN). */ static gpg_error_t change_keyattr_from_string (app_t app, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *value, size_t valuelen) { gpg_error_t err; char *string; int keyno, algo; unsigned int nbits; /* VALUE is expected to be a string but not guaranteed to be terminated. Thus copy it to an allocated buffer first. */ string = xtrymalloc (valuelen+1); if (!string) return gpg_error_from_syserror (); memcpy (string, value, valuelen); string[valuelen] = 0; /* Because this function deletes the key we require the string "--force" in the data to make clear that something serious might happen. */ if (sscanf (string, " --force %d %d %u", &keyno, &algo, &nbits) != 3) err = gpg_error (GPG_ERR_INV_DATA); else if (keyno < 1 || keyno > 3) err = gpg_error (GPG_ERR_INV_ID); else if (algo != 1) err = gpg_error (GPG_ERR_PUBKEY_ALGO); /* Not RSA. */ else if (nbits < 1024) err = gpg_error (GPG_ERR_TOO_SHORT); else err = change_keyattr (app, keyno-1, nbits, pincb, pincb_arg); xfree (string); return err; } /* Handle the WRITEKEY command for OpenPGP. This function expects a canonical encoded S-expression with the secret key in KEYDATA and its length (for assertions) in KEYDATALEN. KEYID needs to be the usual keyid which for OpenPGP is the string "OPENPGP.n" with n=1,2,3. Bit 0 of FLAGS indicates whether an existing key shall get overwritten. PINCB and PINCB_ARG are the usual arguments for the pinentry callback. */ static gpg_error_t do_writekey (app_t app, ctrl_t ctrl, const char *keyid, unsigned int flags, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const unsigned char *keydata, size_t keydatalen) { gpg_error_t err; int force = (flags & 1); int keyno; const unsigned char *buf, *tok; size_t buflen, toklen; int depth, last_depth1, last_depth2; const unsigned char *rsa_n = NULL; const unsigned char *rsa_e = NULL; const unsigned char *rsa_p = NULL; const unsigned char *rsa_q = NULL; size_t rsa_n_len, rsa_e_len, rsa_p_len, rsa_q_len; unsigned int nbits; unsigned int maxbits; unsigned char *template = NULL; unsigned char *tp; size_t template_len; unsigned char fprbuf[20]; u32 created_at = 0; (void)ctrl; if (!strcmp (keyid, "OPENPGP.1")) keyno = 0; else if (!strcmp (keyid, "OPENPGP.2")) keyno = 1; else if (!strcmp (keyid, "OPENPGP.3")) keyno = 2; else return gpg_error (GPG_ERR_INV_ID); err = does_key_exist (app, keyno, 0, force); if (err) return err; /* Parse the S-expression */ buf = keydata; buflen = keydatalen; depth = 0; if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) goto leave; if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) goto leave; if (!tok || toklen != 11 || memcmp ("private-key", tok, toklen)) { if (!tok) ; else if (toklen == 21 && !memcmp ("protected-private-key", tok, toklen)) log_info ("protected-private-key passed to writekey\n"); else if (toklen == 20 && !memcmp ("shadowed-private-key", tok, toklen)) log_info ("shadowed-private-key passed to writekey\n"); err = gpg_error (GPG_ERR_BAD_SECKEY); goto leave; } if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) goto leave; if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) goto leave; if (!tok || toklen != 3 || memcmp ("rsa", tok, toklen)) { err = gpg_error (GPG_ERR_WRONG_PUBKEY_ALGO); goto leave; } last_depth1 = depth; while (!(err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen)) && depth && depth >= last_depth1) { if (tok) { err = gpg_error (GPG_ERR_UNKNOWN_SEXP); goto leave; } if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) goto leave; if (tok && toklen == 1) { const unsigned char **mpi; size_t *mpi_len; switch (*tok) { case 'n': mpi = &rsa_n; mpi_len = &rsa_n_len; break; case 'e': mpi = &rsa_e; mpi_len = &rsa_e_len; break; case 'p': mpi = &rsa_p; mpi_len = &rsa_p_len; break; case 'q': mpi = &rsa_q; mpi_len = &rsa_q_len;break; default: mpi = NULL; mpi_len = NULL; break; } if (mpi && *mpi) { err = gpg_error (GPG_ERR_DUP_VALUE); goto leave; } if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) goto leave; if (tok && mpi) { /* Strip off leading zero bytes and save. */ for (;toklen && !*tok; toklen--, tok++) ; *mpi = tok; *mpi_len = toklen; } } /* Skip until end of list. */ last_depth2 = depth; while (!(err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen)) && depth && depth >= last_depth2) ; if (err) goto leave; } /* Parse other attributes. */ last_depth1 = depth; while (!(err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen)) && depth && depth >= last_depth1) { if (tok) { err = gpg_error (GPG_ERR_UNKNOWN_SEXP); goto leave; } if ((err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen))) goto leave; if (tok && toklen == 10 && !memcmp ("created-at", tok, toklen)) { if ((err = parse_sexp (&buf,&buflen,&depth,&tok,&toklen))) goto leave; if (tok) { for (created_at=0; toklen && *tok && *tok >= '0' && *tok <= '9'; tok++, toklen--) created_at = created_at*10 + (*tok - '0'); } } /* Skip until end of list. */ last_depth2 = depth; while (!(err = parse_sexp (&buf, &buflen, &depth, &tok, &toklen)) && depth && depth >= last_depth2) ; if (err) goto leave; } /* Check that we have all parameters and that they match the card description. */ if (!created_at) { log_error (_("creation timestamp missing\n")); err = gpg_error (GPG_ERR_INV_VALUE); goto leave; } maxbits = app->app_local->keyattr[keyno].n_bits; nbits = rsa_n? count_bits (rsa_n, rsa_n_len) : 0; if (opt.verbose) log_info ("RSA modulus size is %u bits (%u bytes)\n", nbits, (unsigned int)rsa_n_len); if (nbits && nbits != maxbits && app->app_local->extcap.algo_attr_change) { /* Try to switch the key to a new length. */ err = change_keyattr (app, keyno, nbits, pincb, pincb_arg); if (!err) maxbits = app->app_local->keyattr[keyno].n_bits; } if (nbits != maxbits) { log_error (_("RSA modulus missing or not of size %d bits\n"), (int)maxbits); err = gpg_error (GPG_ERR_BAD_SECKEY); goto leave; } maxbits = app->app_local->keyattr[keyno].e_bits; if (maxbits > 32 && !app->app_local->extcap.is_v2) maxbits = 32; /* Our code for v1 does only support 32 bits. */ nbits = rsa_e? count_bits (rsa_e, rsa_e_len) : 0; if (nbits < 2 || nbits > maxbits) { log_error (_("RSA public exponent missing or larger than %d bits\n"), (int)maxbits); err = gpg_error (GPG_ERR_BAD_SECKEY); goto leave; } maxbits = app->app_local->keyattr[keyno].n_bits/2; nbits = rsa_p? count_bits (rsa_p, rsa_p_len) : 0; if (nbits != maxbits) { log_error (_("RSA prime %s missing or not of size %d bits\n"), "P", (int)maxbits); err = gpg_error (GPG_ERR_BAD_SECKEY); goto leave; } nbits = rsa_q? count_bits (rsa_q, rsa_q_len) : 0; if (nbits != maxbits) { log_error (_("RSA prime %s missing or not of size %d bits\n"), "Q", (int)maxbits); err = gpg_error (GPG_ERR_BAD_SECKEY); goto leave; } /* We need to remove the cached public key. */ xfree (app->app_local->pk[keyno].key); app->app_local->pk[keyno].key = NULL; app->app_local->pk[keyno].keylen = 0; app->app_local->pk[keyno].read_done = 0; if (app->app_local->extcap.is_v2) { /* Build the private key template as described in section 4.3.3.7 of the OpenPGP card specs version 2.0. */ int exmode; err = build_privkey_template (app, keyno, rsa_n, rsa_n_len, rsa_e, rsa_e_len, rsa_p, rsa_p_len, rsa_q, rsa_q_len, &template, &template_len); if (err) goto leave; /* Prepare for storing the key. */ err = verify_chv3 (app, pincb, pincb_arg); if (err) goto leave; /* Store the key. */ if (app->app_local->cardcap.ext_lc_le && template_len > 254) exmode = 1; /* Use extended length w/o a limit. */ else if (app->app_local->cardcap.cmd_chaining && template_len > 254) exmode = -254; else exmode = 0; err = iso7816_put_data_odd (app->slot, exmode, 0x3fff, template, template_len); } else { /* Build the private key template as described in section 4.3.3.6 of the OpenPGP card specs version 1.1: 0xC0 public exponent 0xC1 prime p 0xC2 prime q */ assert (rsa_e_len <= 4); template_len = (1 + 1 + 4 + 1 + 1 + rsa_p_len + 1 + 1 + rsa_q_len); template = tp = xtrymalloc_secure (template_len); if (!template) { err = gpg_error_from_syserror (); goto leave; } *tp++ = 0xC0; *tp++ = 4; memcpy (tp, rsa_e, rsa_e_len); if (rsa_e_len < 4) { /* Right justify E. */ memmove (tp+4-rsa_e_len, tp, rsa_e_len); memset (tp, 0, 4-rsa_e_len); } tp += 4; *tp++ = 0xC1; *tp++ = rsa_p_len; memcpy (tp, rsa_p, rsa_p_len); tp += rsa_p_len; *tp++ = 0xC2; *tp++ = rsa_q_len; memcpy (tp, rsa_q, rsa_q_len); tp += rsa_q_len; assert (tp - template == template_len); /* Prepare for storing the key. */ err = verify_chv3 (app, pincb, pincb_arg); if (err) goto leave; /* Store the key. */ err = iso7816_put_data (app->slot, 0, (app->card_version > 0x0007? 0xE0:0xE9)+keyno, template, template_len); } if (err) { log_error (_("failed to store the key: %s\n"), gpg_strerror (err)); goto leave; } err = store_fpr (app, keyno, created_at, rsa_n, rsa_n_len, rsa_e, rsa_e_len, fprbuf, app->card_version); if (err) goto leave; leave: xfree (template); return err; } /* Handle the GENKEY command. */ static gpg_error_t do_genkey (app_t app, ctrl_t ctrl, const char *keynostr, unsigned int flags, time_t createtime, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg) { int rc; char numbuf[30]; unsigned char fprbuf[20]; const unsigned char *keydata, *m, *e; unsigned char *buffer = NULL; size_t buflen, keydatalen, mlen, elen; time_t created_at; int keyno = atoi (keynostr); int force = (flags & 1); time_t start_at; int exmode; int le_value; unsigned int keybits; if (keyno < 1 || keyno > 3) return gpg_error (GPG_ERR_INV_ID); keyno--; /* We flush the cache to increase the traffic before a key generation. This _might_ help a card to gather more entropy. */ flush_cache (app); /* Obviously we need to remove the cached public key. */ xfree (app->app_local->pk[keyno].key); app->app_local->pk[keyno].key = NULL; app->app_local->pk[keyno].keylen = 0; app->app_local->pk[keyno].read_done = 0; /* Check whether a key already exists. */ rc = does_key_exist (app, keyno, 1, force); if (rc) return rc; /* Because we send the key parameter back via status lines we need to put a limit on the max. allowed keysize. 2048 bit will already lead to a 527 byte long status line and thus a 4096 bit key would exceed the Assuan line length limit. */ keybits = app->app_local->keyattr[keyno].n_bits; if (keybits > 3072) return gpg_error (GPG_ERR_TOO_LARGE); /* Prepare for key generation by verifying the Admin PIN. */ rc = verify_chv3 (app, pincb, pincb_arg); if (rc) goto leave; /* Test whether we will need extended length mode. (1900 is an arbitrary length which for sure fits into a short apdu.) */ if (app->app_local->cardcap.ext_lc_le && keybits > 1900) { exmode = 1; /* Use extended length w/o a limit. */ le_value = app->app_local->extcap.max_rsp_data; /* No need to check le_value because it comes from a 16 bit value and thus can't create an overflow on a 32 bit system. */ } else { exmode = 0; le_value = 256; /* Use legacy value. */ } log_info (_("please wait while key is being generated ...\n")); start_at = time (NULL); rc = iso7816_generate_keypair /* # warning key generation temporary replaced by reading an existing key. */ /* rc = iso7816_read_public_key */ (app->slot, exmode, (const unsigned char*)(keyno == 0? "\xB6" : keyno == 1? "\xB8" : "\xA4"), 2, le_value, &buffer, &buflen); if (rc) { rc = gpg_error (GPG_ERR_CARD); log_error (_("generating key failed\n")); goto leave; } log_info (_("key generation completed (%d seconds)\n"), (int)(time (NULL) - start_at)); keydata = find_tlv (buffer, buflen, 0x7F49, &keydatalen); if (!keydata) { rc = gpg_error (GPG_ERR_CARD); log_error (_("response does not contain the public key data\n")); goto leave; } m = find_tlv (keydata, keydatalen, 0x0081, &mlen); if (!m) { rc = gpg_error (GPG_ERR_CARD); log_error (_("response does not contain the RSA modulus\n")); goto leave; } /* log_printhex ("RSA n:", m, mlen); */ send_key_data (ctrl, "n", m, mlen); e = find_tlv (keydata, keydatalen, 0x0082, &elen); if (!e) { rc = gpg_error (GPG_ERR_CARD); log_error (_("response does not contain the RSA public exponent\n")); goto leave; } /* log_printhex ("RSA e:", e, elen); */ send_key_data (ctrl, "e", e, elen); created_at = createtime? createtime : gnupg_get_time (); sprintf (numbuf, "%lu", (unsigned long)created_at); send_status_info (ctrl, "KEY-CREATED-AT", numbuf, (size_t)strlen(numbuf), NULL, 0); rc = store_fpr (app, keyno, (u32)created_at, m, mlen, e, elen, fprbuf, app->card_version); if (rc) goto leave; send_fpr_if_not_null (ctrl, "KEY-FPR", -1, fprbuf); leave: xfree (buffer); return rc; } static unsigned long convert_sig_counter_value (const unsigned char *value, size_t valuelen) { unsigned long ul; if (valuelen == 3 ) ul = (value[0] << 16) | (value[1] << 8) | value[2]; else { log_error (_("invalid structure of OpenPGP card (DO 0x93)\n")); ul = 0; } return ul; } static unsigned long get_sig_counter (app_t app) { void *relptr; unsigned char *value; size_t valuelen; unsigned long ul; relptr = get_one_do (app, 0x0093, &value, &valuelen, NULL); if (!relptr) return 0; ul = convert_sig_counter_value (value, valuelen); xfree (relptr); return ul; } static gpg_error_t compare_fingerprint (app_t app, int keyno, unsigned char *sha1fpr) { const unsigned char *fpr; unsigned char *buffer; size_t buflen, n; int rc, i; assert (keyno >= 1 && keyno <= 3); rc = get_cached_data (app, 0x006E, &buffer, &buflen, 0, 0); if (rc) { log_error (_("error reading application data\n")); return gpg_error (GPG_ERR_GENERAL); } fpr = find_tlv (buffer, buflen, 0x00C5, &n); if (!fpr || n != 60) { xfree (buffer); log_error (_("error reading fingerprint DO\n")); return gpg_error (GPG_ERR_GENERAL); } fpr += (keyno-1)*20; for (i=0; i < 20; i++) if (sha1fpr[i] != fpr[i]) { xfree (buffer); log_info (_("fingerprint on card does not match requested one\n")); return gpg_error (GPG_ERR_WRONG_SECKEY); } xfree (buffer); return 0; } /* If a fingerprint has been specified check it against the one on the card. This allows for a meaningful error message in case the key on the card has been replaced but the shadow information known to gpg has not been updated. If there is no fingerprint we assume that this is okay. */ static gpg_error_t check_against_given_fingerprint (app_t app, const char *fpr, int keyno) { unsigned char tmp[20]; const char *s; int n; for (s=fpr, n=0; hexdigitp (s); s++, n++) ; if (n != 40) return gpg_error (GPG_ERR_INV_ID); else if (!*s) ; /* okay */ else return gpg_error (GPG_ERR_INV_ID); for (s=fpr, n=0; n < 20; s += 2, n++) tmp[n] = xtoi_2 (s); return compare_fingerprint (app, keyno, tmp); } /* Compute a digital signature on INDATA which is expected to be the raw message digest. For this application the KEYIDSTR consists of the serialnumber and the fingerprint delimited by a slash. Note that this function may return the error code GPG_ERR_WRONG_CARD to indicate that the card currently present does not match the one required for the requested action (e.g. the serial number does not match). As a special feature a KEYIDSTR of "OPENPGP.3" redirects the operation to the auth command. */ static gpg_error_t do_sign (app_t app, const char *keyidstr, int hashalgo, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen ) { static unsigned char rmd160_prefix[15] = /* Object ID is 1.3.36.3.2.1 */ { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x24, 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14 }; static unsigned char sha1_prefix[15] = /* (1.3.14.3.2.26) */ { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14 }; static unsigned char sha224_prefix[19] = /* (2.16.840.1.101.3.4.2.4) */ { 0x30, 0x2D, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, 0x05, 0x00, 0x04, 0x1C }; static unsigned char sha256_prefix[19] = /* (2.16.840.1.101.3.4.2.1) */ { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20 }; static unsigned char sha384_prefix[19] = /* (2.16.840.1.101.3.4.2.2) */ { 0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30 }; static unsigned char sha512_prefix[19] = /* (2.16.840.1.101.3.4.2.3) */ { 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40 }; int rc; unsigned char data[19+64]; size_t datalen; unsigned char tmp_sn[20]; /* Actually 16 bytes but also for the fpr. */ const char *s; int n; const char *fpr = NULL; unsigned long sigcount; int use_auth = 0; int exmode, le_value; if (!keyidstr || !*keyidstr) return gpg_error (GPG_ERR_INV_VALUE); /* Strip off known prefixes. */ #define X(a,b,c,d) \ if (hashalgo == GCRY_MD_ ## a \ && (d) \ && indatalen == sizeof b ## _prefix + (c) \ && !memcmp (indata, b ## _prefix, sizeof b ## _prefix)) \ { \ indata = (const char*)indata + sizeof b ## _prefix; \ indatalen -= sizeof b ## _prefix; \ } if (indatalen == 20) ; /* Assume a plain SHA-1 or RMD160 digest has been given. */ else X(SHA1, sha1, 20, 1) else X(RMD160, rmd160, 20, 1) else X(SHA224, sha224, 28, app->app_local->extcap.is_v2) else X(SHA256, sha256, 32, app->app_local->extcap.is_v2) else X(SHA384, sha384, 48, app->app_local->extcap.is_v2) else X(SHA512, sha512, 64, app->app_local->extcap.is_v2) else if ((indatalen == 28 || indatalen == 32 || indatalen == 48 || indatalen ==64) && app->app_local->extcap.is_v2) ; /* Assume a plain SHA-3 digest has been given. */ else { log_error (_("card does not support digest algorithm %s\n"), gcry_md_algo_name (hashalgo)); /* Or the supplied digest length does not match an algorithm. */ return gpg_error (GPG_ERR_INV_VALUE); } #undef X /* Check whether an OpenPGP card of any version has been requested. */ if (!strcmp (keyidstr, "OPENPGP.1")) ; else if (!strcmp (keyidstr, "OPENPGP.3")) use_auth = 1; else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12)) return gpg_error (GPG_ERR_INV_ID); else { for (s=keyidstr, n=0; hexdigitp (s); s++, n++) ; if (n != 32) return gpg_error (GPG_ERR_INV_ID); else if (!*s) ; /* no fingerprint given: we allow this for now. */ else if (*s == '/') fpr = s + 1; else return gpg_error (GPG_ERR_INV_ID); for (s=keyidstr, n=0; n < 16; s += 2, n++) tmp_sn[n] = xtoi_2 (s); if (app->serialnolen != 16) return gpg_error (GPG_ERR_INV_CARD); if (memcmp (app->serialno, tmp_sn, 16)) return gpg_error (GPG_ERR_WRONG_CARD); } /* If a fingerprint has been specified check it against the one on the card. This is allows for a meaningful error message in case the key on the card has been replaced but the shadow information known to gpg was not updated. If there is no fingerprint, gpg will detect a bogus signature anyway due to the verify-after-signing feature. */ rc = fpr? check_against_given_fingerprint (app, fpr, 1) : 0; if (rc) return rc; /* Concatenate prefix and digest. */ #define X(a,b,d) \ if (hashalgo == GCRY_MD_ ## a && (d) ) \ { \ datalen = sizeof b ## _prefix + indatalen; \ assert (datalen <= sizeof data); \ memcpy (data, b ## _prefix, sizeof b ## _prefix); \ memcpy (data + sizeof b ## _prefix, indata, indatalen); \ } X(SHA1, sha1, 1) else X(RMD160, rmd160, 1) else X(SHA224, sha224, app->app_local->extcap.is_v2) else X(SHA256, sha256, app->app_local->extcap.is_v2) else X(SHA384, sha384, app->app_local->extcap.is_v2) else X(SHA512, sha512, app->app_local->extcap.is_v2) else return gpg_error (GPG_ERR_UNSUPPORTED_ALGORITHM); #undef X /* Redirect to the AUTH command if asked to. */ if (use_auth) { return do_auth (app, "OPENPGP.3", pincb, pincb_arg, data, datalen, outdata, outdatalen); } /* Show the number of signature done using this key. */ sigcount = get_sig_counter (app); log_info (_("signatures created so far: %lu\n"), sigcount); /* Check CHV if needed. */ if (!app->did_chv1 || app->force_chv1 ) { char *pinvalue; rc = verify_a_chv (app, pincb, pincb_arg, 1, sigcount, &pinvalue); if (rc) return rc; app->did_chv1 = 1; /* For cards with versions < 2 we want to keep CHV1 and CHV2 in sync, thus we verify CHV2 here using the given PIN. Cards with version2 to not have the need for a separate CHV2 and internally use just one. Obviously we can't do that if the keypad has been used. */ if (!app->did_chv2 && pinvalue && !app->app_local->extcap.is_v2) { rc = iso7816_verify (app->slot, 0x82, pinvalue, strlen (pinvalue)); if (gpg_err_code (rc) == GPG_ERR_BAD_PIN) rc = gpg_error (GPG_ERR_PIN_NOT_SYNCED); if (rc) { log_error (_("verify CHV%d failed: %s\n"), 2, gpg_strerror (rc)); xfree (pinvalue); flush_cache_after_error (app); return rc; } app->did_chv2 = 1; } xfree (pinvalue); } if (app->app_local->cardcap.ext_lc_le) { exmode = 1; /* Use extended length. */ le_value = app->app_local->extcap.max_rsp_data; } else { exmode = 0; le_value = 0; } rc = iso7816_compute_ds (app->slot, exmode, data, datalen, le_value, outdata, outdatalen); return rc; } /* Compute a digital signature using the INTERNAL AUTHENTICATE command on INDATA which is expected to be the raw message digest. For this application the KEYIDSTR consists of the serialnumber and the fingerprint delimited by a slash. Optionally the id OPENPGP.3 may be given. Note that this function may return the error code GPG_ERR_WRONG_CARD to indicate that the card currently present does not match the one required for the requested action (e.g. the serial number does not match). */ static gpg_error_t do_auth (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen ) { int rc; unsigned char tmp_sn[20]; /* Actually 16 but we use it also for the fpr. */ const char *s; int n; const char *fpr = NULL; if (!keyidstr || !*keyidstr) return gpg_error (GPG_ERR_INV_VALUE); if (indatalen > 101) /* For a 2048 bit key. */ return gpg_error (GPG_ERR_INV_VALUE); /* Check whether an OpenPGP card of any version has been requested. */ if (!strcmp (keyidstr, "OPENPGP.3")) ; else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12)) return gpg_error (GPG_ERR_INV_ID); else { for (s=keyidstr, n=0; hexdigitp (s); s++, n++) ; if (n != 32) return gpg_error (GPG_ERR_INV_ID); else if (!*s) ; /* no fingerprint given: we allow this for now. */ else if (*s == '/') fpr = s + 1; else return gpg_error (GPG_ERR_INV_ID); for (s=keyidstr, n=0; n < 16; s += 2, n++) tmp_sn[n] = xtoi_2 (s); if (app->serialnolen != 16) return gpg_error (GPG_ERR_INV_CARD); if (memcmp (app->serialno, tmp_sn, 16)) return gpg_error (GPG_ERR_WRONG_CARD); } /* If a fingerprint has been specified check it against the one on the card. This is allows for a meaningful error message in case the key on the card has been replaced but the shadow information known to gpg was not updated. If there is no fingerprint, gpg will detect a bogus signature anyway due to the verify-after-signing feature. */ rc = fpr? check_against_given_fingerprint (app, fpr, 3) : 0; if (rc) return rc; rc = verify_chv2 (app, pincb, pincb_arg); if (!rc) { int exmode, le_value; if (app->app_local->cardcap.ext_lc_le) { exmode = 1; /* Use extended length. */ le_value = app->app_local->extcap.max_rsp_data; } else { exmode = 0; le_value = 0; } rc = iso7816_internal_authenticate (app->slot, exmode, indata, indatalen, le_value, outdata, outdatalen); } return rc; } static gpg_error_t do_decipher (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg, const void *indata, size_t indatalen, unsigned char **outdata, size_t *outdatalen ) { int rc; unsigned char tmp_sn[20]; /* actually 16 but we use it also for the fpr. */ const char *s; int n; const char *fpr = NULL; int exmode, le_value; if (!keyidstr || !*keyidstr || !indatalen) return gpg_error (GPG_ERR_INV_VALUE); /* Check whether an OpenPGP card of any version has been requested. */ if (!strcmp (keyidstr, "OPENPGP.2")) ; else if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12)) return gpg_error (GPG_ERR_INV_ID); else { for (s=keyidstr, n=0; hexdigitp (s); s++, n++) ; if (n != 32) return gpg_error (GPG_ERR_INV_ID); else if (!*s) ; /* no fingerprint given: we allow this for now. */ else if (*s == '/') fpr = s + 1; else return gpg_error (GPG_ERR_INV_ID); for (s=keyidstr, n=0; n < 16; s += 2, n++) tmp_sn[n] = xtoi_2 (s); if (app->serialnolen != 16) return gpg_error (GPG_ERR_INV_CARD); if (memcmp (app->serialno, tmp_sn, 16)) return gpg_error (GPG_ERR_WRONG_CARD); } /* If a fingerprint has been specified check it against the one on the card. This is allows for a meaningful error message in case the key on the card has been replaced but the shadow information known to gpg was not updated. If there is no fingerprint, the decryption won't produce the right plaintext anyway. */ rc = fpr? check_against_given_fingerprint (app, fpr, 2) : 0; if (rc) return rc; rc = verify_chv2 (app, pincb, pincb_arg); if (!rc) { size_t fixuplen; unsigned char *fixbuf = NULL; int padind = 0; /* We might encounter a couple of leading zeroes in the cryptogram. Due to internal use of MPIs thease leading zeroes are stripped. However the OpenPGP card expects exactly 128 bytes for the cryptogram (for a 1k key). Thus we need to fix it up. We do this for up to 16 leading zero bytes; a cryptogram with more than this is with a very high probability anyway broken. */ if (indatalen >= (128-16) && indatalen < 128) /* 1024 bit key. */ fixuplen = 128 - indatalen; else if (indatalen >= (192-16) && indatalen < 192) /* 1536 bit key. */ fixuplen = 192 - indatalen; else if (indatalen >= (256-16) && indatalen < 256) /* 2048 bit key. */ fixuplen = 256 - indatalen; else if (indatalen >= (384-16) && indatalen < 384) /* 3072 bit key. */ fixuplen = 384 - indatalen; else fixuplen = 0; if (fixuplen) { /* While we have to prepend stuff anyway, we can also include the padding byte here so that iso1816_decipher does not need to do another data mangling. */ fixuplen++; fixbuf = xtrymalloc (fixuplen + indatalen); if (!fixbuf) return gpg_error_from_syserror (); memset (fixbuf, 0, fixuplen); memcpy (fixbuf+fixuplen, indata, indatalen); indata = fixbuf; indatalen = fixuplen + indatalen; padind = -1; /* Already padded. */ } if (app->app_local->cardcap.ext_lc_le && indatalen > 254 ) { exmode = 1; /* Extended length w/o a limit. */ le_value = app->app_local->extcap.max_rsp_data; } else if (app->app_local->cardcap.cmd_chaining && indatalen > 254) { exmode = -254; /* Command chaining with max. 254 bytes. */ le_value = 0; } else exmode = le_value = 0; rc = iso7816_decipher (app->slot, exmode, indata, indatalen, le_value, padind, outdata, outdatalen); xfree (fixbuf); } return rc; } /* Perform a simple verify operation for CHV1 and CHV2, so that further operations won't ask for CHV2 and it is possible to do a cheap check on the PIN: If there is something wrong with the PIN entry system, only the regular CHV will get blocked and not the dangerous CHV3. KEYIDSTR is the usual card's serial number; an optional fingerprint part will be ignored. There is a special mode if the keyidstr is "[CHV3]" with the "[CHV3]" being a literal string: The Admin Pin is checked if and only if the retry counter is still at 3. */ static gpg_error_t do_check_pin (app_t app, const char *keyidstr, gpg_error_t (*pincb)(void*, const char *, char **), void *pincb_arg) { unsigned char tmp_sn[20]; const char *s; int n; int admin_pin = 0; if (!keyidstr || !*keyidstr) return gpg_error (GPG_ERR_INV_VALUE); /* Check whether an OpenPGP card of any version has been requested. */ if (strlen (keyidstr) < 32 || strncmp (keyidstr, "D27600012401", 12)) return gpg_error (GPG_ERR_INV_ID); for (s=keyidstr, n=0; hexdigitp (s); s++, n++) ; if (n != 32) return gpg_error (GPG_ERR_INV_ID); else if (!*s) ; /* No fingerprint given: we allow this for now. */ else if (*s == '/') ; /* We ignore a fingerprint. */ else if (!strcmp (s, "[CHV3]") ) admin_pin = 1; else return gpg_error (GPG_ERR_INV_ID); for (s=keyidstr, n=0; n < 16; s += 2, n++) tmp_sn[n] = xtoi_2 (s); if (app->serialnolen != 16) return gpg_error (GPG_ERR_INV_CARD); if (memcmp (app->serialno, tmp_sn, 16)) return gpg_error (GPG_ERR_WRONG_CARD); /* Yes, there is a race conditions: The user might pull the card right here and we won't notice that. However this is not a problem and the check above is merely for a graceful failure between operations. */ if (admin_pin) { void *relptr; unsigned char *value; size_t valuelen; int count; relptr = get_one_do (app, 0x00C4, &value, &valuelen, NULL); if (!relptr || valuelen < 7) { log_error (_("error retrieving CHV status from card\n")); xfree (relptr); return gpg_error (GPG_ERR_CARD); } count = value[6]; xfree (relptr); if (!count) { log_info (_("card is permanently locked!\n")); return gpg_error (GPG_ERR_BAD_PIN); } else if (count < 3) { log_info (_("verification of Admin PIN is currently prohibited " "through this command\n")); return gpg_error (GPG_ERR_GENERAL); } app->did_chv3 = 0; /* Force verification. */ return verify_chv3 (app, pincb, pincb_arg); } else return verify_chv2 (app, pincb, pincb_arg); } /* Show information about card capabilities. */ static void show_caps (struct app_local_s *s) { log_info ("Version-2 ......: %s\n", s->extcap.is_v2? "yes":"no"); log_info ("Get-Challenge ..: %s", s->extcap.get_challenge? "yes":"no"); if (s->extcap.get_challenge) log_printf (" (%u bytes max)", s->extcap.max_get_challenge); log_info ("Key-Import .....: %s\n", s->extcap.key_import? "yes":"no"); log_info ("Change-Force-PW1: %s\n", s->extcap.change_force_chv? "yes":"no"); log_info ("Private-DOs ....: %s\n", s->extcap.private_dos? "yes":"no"); log_info ("Algo-Attr-Change: %s\n", s->extcap.algo_attr_change? "yes":"no"); log_info ("SM-Support .....: %s", s->extcap.sm_supported? "yes":"no"); if (s->extcap.sm_supported) log_printf (" (%s)", s->extcap.sm_aes128? "AES-128":"3DES"); log_info ("Max-Cert3-Len ..: %u\n", s->extcap.max_certlen_3); log_info ("Max-Cmd-Data ...: %u\n", s->extcap.max_cmd_data); log_info ("Max-Rsp-Data ...: %u\n", s->extcap.max_rsp_data); log_info ("Cmd-Chaining ...: %s\n", s->cardcap.cmd_chaining?"yes":"no"); log_info ("Ext-Lc-Le ......: %s\n", s->cardcap.ext_lc_le?"yes":"no"); log_info ("Status Indicator: %02X\n", s->status_indicator); log_info ("GnuPG-No-Sync ..: %s\n", s->flags.no_sync? "yes":"no"); log_info ("GnuPG-Def-PW2 ..: %s\n", s->flags.def_chv2? "yes":"no"); } /* Parse the historical bytes in BUFFER of BUFLEN and store them in APPLOC. */ static void parse_historical (struct app_local_s *apploc, const unsigned char * buffer, size_t buflen) { /* Example buffer: 00 31 C5 73 C0 01 80 00 90 00 */ if (buflen < 4) { log_error ("warning: historical bytes are too short\n"); return; /* Too short. */ } if (*buffer) { log_error ("warning: bad category indicator in historical bytes\n"); return; } /* Skip category indicator. */ buffer++; buflen--; /* Get the status indicator. */ apploc->status_indicator = buffer[buflen-3]; buflen -= 3; /* Parse the compact TLV. */ while (buflen) { unsigned int tag = (*buffer & 0xf0) >> 4; unsigned int len = (*buffer & 0x0f); if (len+1 > buflen) { log_error ("warning: bad Compact-TLV in historical bytes\n"); return; /* Error. */ } buffer++; buflen--; if (tag == 7 && len == 3) { /* Card capabilities. */ apploc->cardcap.cmd_chaining = !!(buffer[2] & 0x80); apploc->cardcap.ext_lc_le = !!(buffer[2] & 0x40); } buffer += len; buflen -= len; } } /* Parse and optionally show the algorithm attributes for KEYNO. KEYNO must be in the range 0..2. */ static void parse_algorithm_attribute (app_t app, int keyno) { unsigned char *buffer; size_t buflen; void *relptr; const char desc[3][5] = {"sign", "encr", "auth"}; assert (keyno >=0 && keyno <= 2); app->app_local->keyattr[keyno].n_bits = 0; relptr = get_one_do (app, 0xC1+keyno, &buffer, &buflen, NULL); if (!relptr) { log_error ("error reading DO 0x%02X\n", 0xc1+keyno); return; } if (buflen < 1) { log_error ("error reading DO 0x%02X\n", 0xc1+keyno); xfree (relptr); return; } if (opt.verbose) log_info ("Key-Attr-%s ..: ", desc[keyno]); if (*buffer == 1 && (buflen == 5 || buflen == 6)) { app->app_local->keyattr[keyno].n_bits = (buffer[1]<<8 | buffer[2]); app->app_local->keyattr[keyno].e_bits = (buffer[3]<<8 | buffer[4]); app->app_local->keyattr[keyno].format = 0; if (buflen < 6) app->app_local->keyattr[keyno].format = RSA_STD; else app->app_local->keyattr[keyno].format = (buffer[5] == 0? RSA_STD : buffer[5] == 1? RSA_STD_N : buffer[5] == 2? RSA_CRT : buffer[5] == 3? RSA_CRT_N : RSA_UNKNOWN_FMT); if (opt.verbose) log_printf ("RSA, n=%u, e=%u, fmt=%s\n", app->app_local->keyattr[keyno].n_bits, app->app_local->keyattr[keyno].e_bits, app->app_local->keyattr[keyno].format == RSA_STD? "std" : app->app_local->keyattr[keyno].format == RSA_STD_N?"std+n": app->app_local->keyattr[keyno].format == RSA_CRT? "crt" : app->app_local->keyattr[keyno].format == RSA_CRT_N?"crt+n":"?"); } else if (opt.verbose) log_printhex ("", buffer, buflen); xfree (relptr); } /* Select the OpenPGP application on the card in SLOT. This function must be used before any other OpenPGP application functions. */ gpg_error_t app_select_openpgp (app_t app) { static char const aid[] = { 0xD2, 0x76, 0x00, 0x01, 0x24, 0x01 }; int slot = app->slot; int rc; unsigned char *buffer; size_t buflen; void *relptr; /* Note that the card can't cope with P2=0xCO, thus we need to pass a special flag value. */ rc = iso7816_select_application (slot, aid, sizeof aid, 0x0001); if (!rc) { unsigned int manufacturer; app->apptype = "OPENPGP"; app->did_chv1 = 0; app->did_chv2 = 0; app->did_chv3 = 0; app->app_local = NULL; /* The OpenPGP card returns the serial number as part of the AID; because we prefer to use OpenPGP serial numbers, we replace a possibly already set one from a EF.GDO with this one. Note, that for current OpenPGP cards, no EF.GDO exists and thus it won't matter at all. */ rc = iso7816_get_data (slot, 0, 0x004F, &buffer, &buflen); if (rc) goto leave; if (opt.verbose) { log_info ("AID: "); log_printhex ("", buffer, buflen); } app->card_version = buffer[6] << 8; app->card_version |= buffer[7]; manufacturer = (buffer[8]<<8 | buffer[9]); xfree (app->serialno); app->serialno = buffer; app->serialnolen = buflen; buffer = NULL; app->app_local = xtrycalloc (1, sizeof *app->app_local); if (!app->app_local) { rc = gpg_error (gpg_err_code_from_errno (errno)); goto leave; } if (app->card_version >= 0x0200) app->app_local->extcap.is_v2 = 1; /* Read the historical bytes. */ relptr = get_one_do (app, 0x5f52, &buffer, &buflen, NULL); if (relptr) { if (opt.verbose) { log_info ("Historical Bytes: "); log_printhex ("", buffer, buflen); } parse_historical (app->app_local, buffer, buflen); xfree (relptr); } /* Read the force-chv1 flag. */ relptr = get_one_do (app, 0x00C4, &buffer, &buflen, NULL); if (!relptr) { log_error (_("can't access %s - invalid OpenPGP card?\n"), "CHV Status Bytes"); goto leave; } app->force_chv1 = (buflen && *buffer == 0); xfree (relptr); /* Read the extended capabilities. */ relptr = get_one_do (app, 0x00C0, &buffer, &buflen, NULL); if (!relptr) { log_error (_("can't access %s - invalid OpenPGP card?\n"), "Extended Capability Flags" ); goto leave; } if (buflen) { app->app_local->extcap.sm_supported = !!(*buffer & 0x80); app->app_local->extcap.get_challenge = !!(*buffer & 0x40); app->app_local->extcap.key_import = !!(*buffer & 0x20); app->app_local->extcap.change_force_chv = !!(*buffer & 0x10); app->app_local->extcap.private_dos = !!(*buffer & 0x08); app->app_local->extcap.algo_attr_change = !!(*buffer & 0x04); } if (buflen >= 10) { /* Available with v2 cards. */ app->app_local->extcap.sm_aes128 = (buffer[1] == 1); app->app_local->extcap.max_get_challenge = (buffer[2] << 8 | buffer[3]); app->app_local->extcap.max_certlen_3 = (buffer[4] << 8 | buffer[5]); app->app_local->extcap.max_cmd_data = (buffer[6] << 8 | buffer[7]); app->app_local->extcap.max_rsp_data = (buffer[8] << 8 | buffer[9]); } xfree (relptr); /* Some of the first cards accidently don't set the CHANGE_FORCE_CHV bit but allow it anyway. */ if (app->card_version <= 0x0100 && manufacturer == 1) app->app_local->extcap.change_force_chv = 1; parse_login_data (app); if (opt.verbose) show_caps (app->app_local); parse_algorithm_attribute (app, 0); parse_algorithm_attribute (app, 1); parse_algorithm_attribute (app, 2); if (opt.verbose > 1) dump_all_do (slot); app->fnc.deinit = do_deinit; app->fnc.learn_status = do_learn_status; app->fnc.readcert = do_readcert; app->fnc.readkey = do_readkey; app->fnc.getattr = do_getattr; app->fnc.setattr = do_setattr; app->fnc.writecert = do_writecert; app->fnc.writekey = do_writekey; app->fnc.genkey = do_genkey; app->fnc.sign = do_sign; app->fnc.auth = do_auth; app->fnc.decipher = do_decipher; app->fnc.change_pin = do_change_pin; app->fnc.check_pin = do_check_pin; } leave: if (rc) do_deinit (app); return rc; } gnupg-1.4.20/g10/build-packet.c0000644000175000017500000007644712635262326012767 00000000000000/* build-packet.c - assemble packets and write them * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006 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 3 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, see . */ #include #include #include #include #include #include #include "packet.h" #include "errors.h" #include "iobuf.h" #include "mpi.h" #include "util.h" #include "cipher.h" #include "memory.h" #include "i18n.h" #include "options.h" #include "../include/host2net.h" static int do_user_id( IOBUF out, int ctb, PKT_user_id *uid ); static int do_public_key( IOBUF out, int ctb, PKT_public_key *pk ); static int do_secret_key( IOBUF out, int ctb, PKT_secret_key *pk ); static int do_symkey_enc( IOBUF out, int ctb, PKT_symkey_enc *enc ); static int do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc ); static u32 calc_plaintext( PKT_plaintext *pt ); static int do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt ); static int do_encrypted( IOBUF out, int ctb, PKT_encrypted *ed ); static int do_encrypted_mdc( IOBUF out, int ctb, PKT_encrypted *ed ); static int do_compressed( IOBUF out, int ctb, PKT_compressed *cd ); static int do_signature( IOBUF out, int ctb, PKT_signature *sig ); static int do_onepass_sig( IOBUF out, int ctb, PKT_onepass_sig *ops ); static int calc_header_length( u32 len, int new_ctb ); static int write_16(IOBUF inp, u16 a); static int write_32(IOBUF inp, u32 a); static int write_header( IOBUF out, int ctb, u32 len ); static int write_sign_packet_header( IOBUF out, int ctb, u32 len ); static int write_header2( IOBUF out, int ctb, u32 len, int hdrlen ); static int write_new_header( IOBUF out, int ctb, u32 len, int hdrlen ); static int write_version( IOBUF out, int ctb ); /**************** * Build a packet and write it to INP * Returns: 0 := okay * >0 := error * Note: Caller must free the packet */ int build_packet( IOBUF out, PACKET *pkt ) { int new_ctb=0, rc=0, ctb; int pkttype; if( DBG_PACKET ) log_debug("build_packet() type=%d\n", pkt->pkttype ); assert( pkt->pkt.generic ); switch( (pkttype = pkt->pkttype) ) { case PKT_PLAINTEXT: new_ctb = pkt->pkt.plaintext->new_ctb; break; case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: new_ctb = pkt->pkt.encrypted->new_ctb; break; case PKT_COMPRESSED:new_ctb = pkt->pkt.compressed->new_ctb; break; case PKT_USER_ID: if( pkt->pkt.user_id->attrib_data ) pkttype = PKT_ATTRIBUTE; break; default: break; } if( new_ctb || pkttype > 15 ) /* new format */ ctb = 0xc0 | (pkttype & 0x3f); else ctb = 0x80 | ((pkttype & 15)<<2); switch( pkttype ) { case PKT_ATTRIBUTE: case PKT_USER_ID: rc = do_user_id( out, ctb, pkt->pkt.user_id ); break; case PKT_OLD_COMMENT: case PKT_COMMENT: /* Ignore these. Theoretically, this will never be called as we have no way to output comment packets any longer, but just in case there is some code path that would end up outputting a comment that was written before comments were dropped (in the public key?) this is a no-op. */ break; case PKT_PUBLIC_SUBKEY: case PKT_PUBLIC_KEY: rc = do_public_key( out, ctb, pkt->pkt.public_key ); break; case PKT_SECRET_SUBKEY: case PKT_SECRET_KEY: rc = do_secret_key( out, ctb, pkt->pkt.secret_key ); break; case PKT_SYMKEY_ENC: rc = do_symkey_enc( out, ctb, pkt->pkt.symkey_enc ); break; case PKT_PUBKEY_ENC: rc = do_pubkey_enc( out, ctb, pkt->pkt.pubkey_enc ); break; case PKT_PLAINTEXT: rc = do_plaintext( out, ctb, pkt->pkt.plaintext ); break; case PKT_ENCRYPTED: rc = do_encrypted( out, ctb, pkt->pkt.encrypted ); break; case PKT_ENCRYPTED_MDC: rc = do_encrypted_mdc( out, ctb, pkt->pkt.encrypted ); break; case PKT_COMPRESSED: rc = do_compressed( out, ctb, pkt->pkt.compressed ); break; case PKT_SIGNATURE: rc = do_signature( out, ctb, pkt->pkt.signature ); break; case PKT_ONEPASS_SIG: rc = do_onepass_sig( out, ctb, pkt->pkt.onepass_sig ); break; case PKT_RING_TRUST: break; /* ignore it (keyring.c does write it directly)*/ case PKT_MDC: /* we write it directly, so we should never see it here. */ default: log_bug("invalid packet type in build_packet()\n"); break; } return rc; } /**************** * calculate the length of a packet described by PKT */ u32 calc_packet_length( PACKET *pkt ) { u32 n=0; int new_ctb = 0; assert( pkt->pkt.generic ); switch( pkt->pkttype ) { case PKT_PLAINTEXT: n = calc_plaintext( pkt->pkt.plaintext ); new_ctb = pkt->pkt.plaintext->new_ctb; break; case PKT_ATTRIBUTE: case PKT_USER_ID: case PKT_COMMENT: case PKT_PUBLIC_KEY: case PKT_SECRET_KEY: case PKT_SYMKEY_ENC: case PKT_PUBKEY_ENC: case PKT_ENCRYPTED: case PKT_SIGNATURE: case PKT_ONEPASS_SIG: case PKT_RING_TRUST: case PKT_COMPRESSED: default: log_bug("invalid packet type in calc_packet_length()"); break; } n += calc_header_length(n, new_ctb); return n; } static void write_fake_data( IOBUF out, MPI a ) { if( a ) { unsigned int i; void *p; p = mpi_get_opaque( a, &i ); if (p) iobuf_write( out, p, i ); } } static int do_user_id( IOBUF out, int ctb, PKT_user_id *uid ) { if( uid->attrib_data ) { write_header(out, ctb, uid->attrib_len); if( iobuf_write( out, uid->attrib_data, uid->attrib_len ) ) return G10ERR_WRITE_FILE; } else { write_header2( out, ctb, uid->len, 2 ); if( iobuf_write( out, uid->name, uid->len ) ) return G10ERR_WRITE_FILE; } return 0; } static int do_public_key( IOBUF out, int ctb, PKT_public_key *pk ) { int rc = 0; int n, i; IOBUF a = iobuf_temp(); if( !pk->version ) iobuf_put( a, 3 ); else iobuf_put( a, pk->version ); write_32(a, pk->timestamp ); if( pk->version < 4 ) { u16 ndays; if( pk->expiredate ) ndays = (u16)((pk->expiredate - pk->timestamp) / 86400L); else ndays = 0; write_16(a, ndays ); } iobuf_put(a, pk->pubkey_algo ); n = pubkey_get_npkey( pk->pubkey_algo ); if( !n ) write_fake_data( a, pk->pkey[0] ); for(i=0; i < n; i++ ) mpi_write(a, pk->pkey[i] ); write_header2(out, ctb, iobuf_get_temp_length(a), pk->hdrbytes); if( iobuf_write_temp( out, a ) ) rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; } static int do_secret_key( IOBUF out, int ctb, PKT_secret_key *sk ) { int rc = 0; int i, nskey, npkey; IOBUF a = iobuf_temp(); /* build in a self-enlarging buffer */ /* Write the version number - if none is specified, use 3 */ if( !sk->version ) iobuf_put( a, 3 ); else iobuf_put( a, sk->version ); write_32(a, sk->timestamp ); /* v3 needs the expiration time */ if( sk->version < 4 ) { u16 ndays; if( sk->expiredate ) ndays = (u16)((sk->expiredate - sk->timestamp) / 86400L); else ndays = 0; write_16(a, ndays); } iobuf_put(a, sk->pubkey_algo ); /* get number of secret and public parameters. They are held in one array first the public ones, then the secret ones */ nskey = pubkey_get_nskey( sk->pubkey_algo ); npkey = pubkey_get_npkey( sk->pubkey_algo ); /* If we don't have any public parameters - which is the case if we don't know the algorithm used - the parameters are stored as one blob in a faked (opaque) MPI */ if( !npkey ) { write_fake_data( a, sk->skey[0] ); goto leave; } assert( npkey < nskey ); /* Writing the public parameters is easy */ for(i=0; i < npkey; i++ ) mpi_write(a, sk->skey[i] ); /* build the header for protected (encrypted) secret parameters */ if( sk->is_protected ) { if( is_RSA(sk->pubkey_algo) && sk->version < 4 && !sk->protect.s2k.mode ) { /* the simple rfc1991 (v3) way */ iobuf_put(a, sk->protect.algo ); iobuf_write(a, sk->protect.iv, sk->protect.ivlen ); } else { /* OpenPGP protection according to rfc2440 */ iobuf_put(a, sk->protect.sha1chk? 0xfe : 0xff ); iobuf_put(a, sk->protect.algo ); if( sk->protect.s2k.mode >= 1000 ) { /* These modes are not possible in OpenPGP, we use them to implement our extensions, 101 can be seen as a private/experimental extension (this is not specified in rfc2440 but the same scheme is used for all other algorithm identifiers) */ iobuf_put(a, 101 ); iobuf_put(a, sk->protect.s2k.hash_algo ); iobuf_write(a, "GNU", 3 ); iobuf_put(a, sk->protect.s2k.mode - 1000 ); } else { iobuf_put(a, sk->protect.s2k.mode ); iobuf_put(a, sk->protect.s2k.hash_algo ); } if( sk->protect.s2k.mode == 1 || sk->protect.s2k.mode == 3 ) iobuf_write(a, sk->protect.s2k.salt, 8 ); if( sk->protect.s2k.mode == 3 ) iobuf_put(a, sk->protect.s2k.count ); /* For out special modes 1001, 1002 we do not need an IV */ if( sk->protect.s2k.mode != 1001 && sk->protect.s2k.mode != 1002 ) iobuf_write(a, sk->protect.iv, sk->protect.ivlen ); } } else iobuf_put(a, 0 ); if( sk->protect.s2k.mode == 1001 ) ; /* GnuPG extension - don't write a secret key at all */ else if( sk->protect.s2k.mode == 1002 ) { /* GnuPG extension - divert to OpenPGP smartcard. */ iobuf_put(a, sk->protect.ivlen ); /* length of the serial number or 0 for no serial number. */ /* The serial number gets stored in the IV field. */ iobuf_write(a, sk->protect.iv, sk->protect.ivlen); } else if( sk->is_protected && sk->version >= 4 ) { /* The secret key is protected - write it out as it is */ byte *p; unsigned int ndata; assert( mpi_is_opaque( sk->skey[npkey] ) ); p = mpi_get_opaque( sk->skey[npkey], &ndata ); if (p) iobuf_write(a, p, ndata ); } else if( sk->is_protected ) { /* The secret key is protected te old v4 way. */ for( ; i < nskey; i++ ) { byte *p; unsigned int ndata; assert (mpi_is_opaque (sk->skey[i])); p = mpi_get_opaque (sk->skey[i], &ndata); if (p) iobuf_write (a, p, ndata); } write_16(a, sk->csum ); } else { /* non-protected key */ for( ; i < nskey; i++ ) mpi_write(a, sk->skey[i] ); write_16(a, sk->csum ); } leave: /* Build the header of the packet - which we must do after writing all the other stuff, so that we know the length of the packet */ write_header2(out, ctb, iobuf_get_temp_length(a), sk->hdrbytes); /* And finally write it out the real stream */ if( iobuf_write_temp( out, a ) ) rc = G10ERR_WRITE_FILE; iobuf_close(a); /* close the remporary buffer */ return rc; } static int do_symkey_enc( IOBUF out, int ctb, PKT_symkey_enc *enc ) { int rc = 0; IOBUF a = iobuf_temp(); assert( enc->version == 4 ); switch( enc->s2k.mode ) { case 0: case 1: case 3: break; default: log_bug("do_symkey_enc: s2k=%d\n", enc->s2k.mode ); } iobuf_put( a, enc->version ); iobuf_put( a, enc->cipher_algo ); iobuf_put( a, enc->s2k.mode ); iobuf_put( a, enc->s2k.hash_algo ); if( enc->s2k.mode == 1 || enc->s2k.mode == 3 ) { iobuf_write(a, enc->s2k.salt, 8 ); if( enc->s2k.mode == 3 ) iobuf_put(a, enc->s2k.count); } if( enc->seskeylen ) iobuf_write(a, enc->seskey, enc->seskeylen ); write_header(out, ctb, iobuf_get_temp_length(a) ); if( iobuf_write_temp( out, a ) ) rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; } static int do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc ) { int rc = 0; int n, i; IOBUF a = iobuf_temp(); write_version( a, ctb ); if( enc->throw_keyid ) { write_32(a, 0 ); /* don't tell Eve who can decrypt the message */ write_32(a, 0 ); } else { write_32(a, enc->keyid[0] ); write_32(a, enc->keyid[1] ); } iobuf_put(a,enc->pubkey_algo ); n = pubkey_get_nenc( enc->pubkey_algo ); if( !n ) write_fake_data( a, enc->data[0] ); for(i=0; i < n; i++ ) mpi_write(a, enc->data[i] ); write_header(out, ctb, iobuf_get_temp_length(a) ); if( iobuf_write_temp( out, a ) ) rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; } static u32 calc_plaintext( PKT_plaintext *pt ) { /* Truncate namelen to the maximum 255 characters. Note this means that a function that calls build_packet with an illegal literal packet will get it back legalized. */ if(pt->namelen>255) pt->namelen=255; return pt->len? (1 + 1 + pt->namelen + 4 + pt->len) : 0; } static int do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt ) { int i, rc = 0; u32 n; byte buf[1000]; /* this buffer has the plaintext! */ int nbytes; write_header(out, ctb, calc_plaintext( pt ) ); iobuf_put(out, pt->mode ); iobuf_put(out, pt->namelen ); for(i=0; i < pt->namelen; i++ ) iobuf_put(out, pt->name[i] ); if( write_32(out, pt->timestamp ) ) rc = G10ERR_WRITE_FILE; n = 0; while( (nbytes=iobuf_read(pt->buf, buf, 1000)) != -1 ) { if( iobuf_write(out, buf, nbytes) == -1 ) { rc = G10ERR_WRITE_FILE; break; } n += nbytes; } wipememory(buf,1000); /* burn the buffer */ if( (ctb&0x40) && !pt->len ) iobuf_set_partial_block_mode(out, 0 ); /* turn off partial */ /* On VMS, byte counts will not match for some file record * formats, so it's best to disable the following error. */ #ifndef __VMS if( pt->len && n != pt->len ) log_error("do_plaintext(): wrote %lu bytes but expected %lu bytes\n", (ulong)n, (ulong)pt->len ); #endif return rc; } static int do_encrypted( IOBUF out, int ctb, PKT_encrypted *ed ) { int rc = 0; u32 n; n = ed->len ? (ed->len + ed->extralen) : 0; write_header(out, ctb, n ); /* This is all. The caller has to write the real data */ return rc; } static int do_encrypted_mdc( IOBUF out, int ctb, PKT_encrypted *ed ) { int rc = 0; u32 n; assert( ed->mdc_method ); /* Take version number and the following MDC packet in account. */ n = ed->len ? (ed->len + ed->extralen + 1 + 22) : 0; write_header(out, ctb, n ); iobuf_put(out, 1 ); /* version */ /* This is all. The caller has to write the real data */ return rc; } static int do_compressed( IOBUF out, int ctb, PKT_compressed *cd ) { int rc = 0; /* We must use the old convention and don't use blockmode for tyhe sake of PGP 2 compatibility. However if the new_ctb flag was set, CTB is already formatted as new style and write_header2 does create a partial length encoding using new the new style. */ write_header2(out, ctb, 0, 0); iobuf_put(out, cd->algorithm ); /* This is all. The caller has to write the real data */ return rc; } /**************** * Delete all subpackets of type REQTYPE and return a bool whether a packet * was deleted. */ int delete_sig_subpkt (subpktarea_t *area, sigsubpkttype_t reqtype ) { int buflen; sigsubpkttype_t type; byte *buffer, *bufstart; size_t n; size_t unused = 0; int okay = 0; if( !area ) return 0; buflen = area->len; buffer = area->data; for(;;) { if( !buflen ) { okay = 1; break; } bufstart = buffer; n = *buffer++; buflen--; if( n == 255 ) { if( buflen < 4 ) break; n = buf32_to_size_t (buffer); buffer += 4; buflen -= 4; } else if( n >= 192 ) { if( buflen < 2 ) break; n = (( n - 192 ) << 8) + *buffer + 192; buffer++; buflen--; } if( buflen < n ) break; type = *buffer & 0x7f; if( type == reqtype ) { buffer++; buflen--; n--; if( n > buflen ) break; buffer += n; /* point to next subpkt */ buflen -= n; memmove (bufstart, buffer, buflen); /* shift */ unused += buffer - bufstart; buffer = bufstart; } else { buffer += n; buflen -=n; } } if (!okay) log_error ("delete_subpkt: buffer shorter than subpacket\n"); assert (unused <= area->len); area->len -= unused; return !!unused; } /**************** * Create or update a signature subpacket for SIG of TYPE. This * functions knows where to put the data (hashed or unhashed). The * function may move data from the unhashed part to the hashed one. * Note: All pointers into sig->[un]hashed (e.g. returned by * parse_sig_subpkt) are not valid after a call to this function. The * data to put into the subpaket should be in a buffer with a length * of buflen. */ void build_sig_subpkt (PKT_signature *sig, sigsubpkttype_t type, const byte *buffer, size_t buflen ) { byte *p; int critical, hashed; subpktarea_t *oldarea, *newarea; size_t nlen, n, n0; critical = (type & SIGSUBPKT_FLAG_CRITICAL); type &= ~SIGSUBPKT_FLAG_CRITICAL; /* Sanity check buffer sizes */ if(parse_one_sig_subpkt(buffer,buflen,type)<0) BUG(); switch(type) { case SIGSUBPKT_NOTATION: case SIGSUBPKT_POLICY: case SIGSUBPKT_REV_KEY: case SIGSUBPKT_SIGNATURE: /* we do allow multiple subpackets */ break; default: /* we don't allow multiple subpackets */ delete_sig_subpkt(sig->hashed,type); delete_sig_subpkt(sig->unhashed,type); break; } /* Any special magic that needs to be done for this type so the packet doesn't need to be reparsed? */ switch(type) { case SIGSUBPKT_NOTATION: sig->flags.notation=1; break; case SIGSUBPKT_POLICY: sig->flags.policy_url=1; break; case SIGSUBPKT_PREF_KS: sig->flags.pref_ks=1; break; case SIGSUBPKT_EXPORTABLE: if(buffer[0]) sig->flags.exportable=1; else sig->flags.exportable=0; break; case SIGSUBPKT_REVOCABLE: if(buffer[0]) sig->flags.revocable=1; else sig->flags.revocable=0; break; case SIGSUBPKT_TRUST: sig->trust_depth=buffer[0]; sig->trust_value=buffer[1]; break; case SIGSUBPKT_REGEXP: sig->trust_regexp=buffer; break; /* This should never happen since we don't currently allow creating such a subpacket, but just in case... */ case SIGSUBPKT_SIG_EXPIRE: if (buf32_to_u32 (buffer) + sig->timestamp <= make_timestamp()) sig->flags.expired=1; else sig->flags.expired=0; break; default: break; } if( (buflen+1) >= 8384 ) nlen = 5; /* write 5 byte length header */ else if( (buflen+1) >= 192 ) nlen = 2; /* write 2 byte length header */ else nlen = 1; /* just a 1 byte length header */ switch( type ) { /* The issuer being unhashed is a historical oddity. It should work equally as well hashed. Of course, if even an unhashed issuer is tampered with, it makes it awfully hard to verify the sig... */ case SIGSUBPKT_ISSUER: case SIGSUBPKT_SIGNATURE: hashed = 0; break; default: hashed = 1; break; } if( critical ) type |= SIGSUBPKT_FLAG_CRITICAL; oldarea = hashed? sig->hashed : sig->unhashed; /* Calculate new size of the area and allocate */ n0 = oldarea? oldarea->len : 0; n = n0 + nlen + 1 + buflen; /* length, type, buffer */ if (oldarea && n <= oldarea->size) { /* fits into the unused space */ newarea = oldarea; /*log_debug ("updating area for type %d\n", type );*/ } else if (oldarea) { newarea = xrealloc (oldarea, sizeof (*newarea) + n - 1); newarea->size = n; /*log_debug ("reallocating area for type %d\n", type );*/ } else { newarea = xmalloc (sizeof (*newarea) + n - 1); newarea->size = n; /*log_debug ("allocating area for type %d\n", type );*/ } newarea->len = n; p = newarea->data + n0; if (nlen == 5) { *p++ = 255; *p++ = (buflen+1) >> 24; *p++ = (buflen+1) >> 16; *p++ = (buflen+1) >> 8; *p++ = (buflen+1); *p++ = type; memcpy (p, buffer, buflen); } else if (nlen == 2) { *p++ = (buflen+1-192) / 256 + 192; *p++ = (buflen+1-192) % 256; *p++ = type; memcpy (p, buffer, buflen); } else { *p++ = buflen+1; *p++ = type; memcpy (p, buffer, buflen); } if (hashed) sig->hashed = newarea; else sig->unhashed = newarea; } /**************** * Put all the required stuff from SIG into subpackets of sig. * Hmmm, should we delete those subpackets which are in a wrong area? */ void build_sig_subpkt_from_sig( PKT_signature *sig ) { u32 u; byte buf[8]; u = sig->keyid[0]; buf[0] = (u >> 24) & 0xff; buf[1] = (u >> 16) & 0xff; buf[2] = (u >> 8) & 0xff; buf[3] = u & 0xff; u = sig->keyid[1]; buf[4] = (u >> 24) & 0xff; buf[5] = (u >> 16) & 0xff; buf[6] = (u >> 8) & 0xff; buf[7] = u & 0xff; build_sig_subpkt( sig, SIGSUBPKT_ISSUER, buf, 8 ); u = sig->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_SIG_CREATED, buf, 4 ); if(sig->expiredate) { if(sig->expiredate>sig->timestamp) u=sig->expiredate-sig->timestamp; else u=1; /* A 1-second expiration time is the shortest one OpenPGP has */ buf[0] = (u >> 24) & 0xff; buf[1] = (u >> 16) & 0xff; buf[2] = (u >> 8) & 0xff; buf[3] = u & 0xff; /* Mark this CRITICAL, so if any implementation doesn't understand sigs that can expire, it'll just disregard this sig altogether. */ build_sig_subpkt( sig, SIGSUBPKT_SIG_EXPIRE | SIGSUBPKT_FLAG_CRITICAL, buf, 4 ); } } void build_attribute_subpkt(PKT_user_id *uid,byte type, const void *buf,u32 buflen, const void *header,u32 headerlen) { byte *attrib; int idx; if(1+headerlen+buflen>8383) idx=5; else if(1+headerlen+buflen>191) idx=2; else idx=1; /* realloc uid->attrib_data to the right size */ uid->attrib_data=xrealloc(uid->attrib_data, uid->attrib_len+idx+1+headerlen+buflen); attrib=&uid->attrib_data[uid->attrib_len]; if(idx==5) { attrib[0]=255; attrib[1]=(1+headerlen+buflen) >> 24; attrib[2]=(1+headerlen+buflen) >> 16; attrib[3]=(1+headerlen+buflen) >> 8; attrib[4]=1+headerlen+buflen; } else if(idx==2) { attrib[0]=(1+headerlen+buflen-192) / 256 + 192; attrib[1]=(1+headerlen+buflen-192) % 256; } else attrib[0]=1+headerlen+buflen; /* Good luck finding a JPEG this small! */ attrib[idx++]=type; /* Tack on our data at the end */ if(headerlen>0) memcpy(&attrib[idx],header,headerlen); memcpy(&attrib[idx+headerlen],buf,buflen); uid->attrib_len+=idx+headerlen+buflen; } struct notation * string_to_notation(const char *string,int is_utf8) { const char *s; int saw_at=0; struct notation *notation; notation=xmalloc_clear(sizeof(*notation)); if(*string=='-') { notation->flags.ignore=1; string++; } if(*string=='!') { notation->flags.critical=1; string++; } /* If and when the IETF assigns some official name tags, we'll have to add them here. */ for( s=string ; *s != '='; s++ ) { if( *s=='@') saw_at++; /* -notationname is legal without an = sign */ if(!*s && notation->flags.ignore) break; if( !*s || !isascii (*s) || (!isgraph(*s) && !isspace(*s)) ) { log_error(_("a notation name must have only printable characters" " or spaces, and end with an '='\n") ); goto fail; } } notation->name=xmalloc((s-string)+1); strncpy(notation->name,string,s-string); notation->name[s-string]='\0'; if(!saw_at && !opt.expert) { log_error(_("a user notation name must contain the '@' character\n")); goto fail; } if (saw_at > 1) { log_error(_("a notation name must not contain more than" " one '@' character\n")); goto fail; } if(*s) { const char *i=s+1; int highbit=0; /* we only support printable text - therefore we enforce the use of only printable characters (an empty value is valid) */ for(s++; *s ; s++ ) { if ( !isascii (*s) ) highbit=1; else if (iscntrl(*s)) { log_error(_("a notation value must not use any" " control characters\n")); goto fail; } } if(!highbit || is_utf8) notation->value=xstrdup(i); else notation->value=native_to_utf8(i); } return notation; fail: free_notation(notation); return NULL; } struct notation * sig_to_notation(PKT_signature *sig) { const byte *p; size_t len; int seq=0,crit; struct notation *list=NULL; while((p=enum_sig_subpkt(sig->hashed,SIGSUBPKT_NOTATION,&len,&seq,&crit))) { int n1,n2; struct notation *n=NULL; if(len<8) { log_info(_("WARNING: invalid notation data found\n")); continue; } n1=(p[4]<<8)|p[5]; n2=(p[6]<<8)|p[7]; if(8+n1+n2!=len) { log_info(_("WARNING: invalid notation data found\n")); continue; } n=xmalloc_clear(sizeof(*n)); n->name=xmalloc(n1+1); memcpy(n->name,&p[8],n1); n->name[n1]='\0'; if(p[0]&0x80) { n->value=xmalloc(n2+1); memcpy(n->value,&p[8+n1],n2); n->value[n2]='\0'; } else { n->bdat=xmalloc(n2); n->blen=n2; memcpy(n->bdat,&p[8+n1],n2); n->value=xmalloc(2+strlen(_("not human readable"))+2+1); strcpy(n->value,"[ "); strcat(n->value,_("not human readable")); strcat(n->value," ]"); } n->flags.critical=crit; n->next=list; list=n; } return list; } void free_notation(struct notation *notation) { while(notation) { struct notation *n=notation; xfree(n->name); xfree(n->value); xfree(n->altvalue); xfree(n->bdat); notation=n->next; xfree(n); } } static int do_signature( IOBUF out, int ctb, PKT_signature *sig ) { int rc = 0; int n, i; IOBUF a = iobuf_temp(); if( !sig->version ) iobuf_put( a, 3 ); else iobuf_put( a, sig->version ); if( sig->version < 4 ) iobuf_put(a, 5 ); /* constant */ iobuf_put(a, sig->sig_class ); if( sig->version < 4 ) { write_32(a, sig->timestamp ); write_32(a, sig->keyid[0] ); write_32(a, sig->keyid[1] ); } iobuf_put(a, sig->pubkey_algo ); iobuf_put(a, sig->digest_algo ); if( sig->version >= 4 ) { size_t nn; /* timestamp and keyid must have been packed into the * subpackets prior to the call of this function, because * these subpackets are hashed */ nn = sig->hashed? sig->hashed->len : 0; write_16(a, nn); if( nn ) iobuf_write( a, sig->hashed->data, nn ); nn = sig->unhashed? sig->unhashed->len : 0; write_16(a, nn); if( nn ) iobuf_write( a, sig->unhashed->data, nn ); } iobuf_put(a, sig->digest_start[0] ); iobuf_put(a, sig->digest_start[1] ); n = pubkey_get_nsig( sig->pubkey_algo ); if( !n ) write_fake_data( a, sig->data[0] ); for(i=0; i < n; i++ ) mpi_write(a, sig->data[i] ); if( is_RSA(sig->pubkey_algo) && sig->version < 4 ) write_sign_packet_header(out, ctb, iobuf_get_temp_length(a) ); else write_header(out, ctb, iobuf_get_temp_length(a) ); if( iobuf_write_temp( out, a ) ) rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; } static int do_onepass_sig( IOBUF out, int ctb, PKT_onepass_sig *ops ) { int rc = 0; IOBUF a = iobuf_temp(); write_version( a, ctb ); iobuf_put(a, ops->sig_class ); iobuf_put(a, ops->digest_algo ); iobuf_put(a, ops->pubkey_algo ); write_32(a, ops->keyid[0] ); write_32(a, ops->keyid[1] ); iobuf_put(a, ops->last ); write_header(out, ctb, iobuf_get_temp_length(a) ); if( iobuf_write_temp( out, a ) ) rc = G10ERR_WRITE_FILE; iobuf_close(a); return rc; } static int write_16(IOBUF out, u16 a) { iobuf_put(out, a>>8); if( iobuf_put(out,a) ) return -1; return 0; } static int write_32(IOBUF out, u32 a) { iobuf_put(out, a>> 24); iobuf_put(out, a>> 16); iobuf_put(out, a>> 8); if( iobuf_put(out, a) ) return -1; return 0; } /**************** * calculate the length of a header */ static int calc_header_length( u32 len, int new_ctb ) { if( !len ) return 1; /* only the ctb */ if( new_ctb ) { if( len < 192 ) return 2; if( len < 8384 ) return 3; else return 6; } if( len < 256 ) return 2; if( len < 65536 ) return 3; return 5; } /**************** * Write the CTB and the packet length */ static int write_header( IOBUF out, int ctb, u32 len ) { return write_header2( out, ctb, len, 0 ); } static int write_sign_packet_header( IOBUF out, int ctb, u32 len ) { (void)ctb; /* work around a bug in the pgp read function for signature packets, * which are not correctly coded and silently assume at some * point 2 byte length headers.*/ iobuf_put(out, 0x89 ); iobuf_put(out, len >> 8 ); return iobuf_put(out, len ) == -1 ? -1:0; } /**************** * If HDRLEN is > 0, try to build a header of this length. We need * this so that we can hash packets without reading them again. If * len is 0, write a partial or indeterminate length header, unless * hdrlen is specified in which case write an actual zero length * (using the specified hdrlen). */ static int write_header2( IOBUF out, int ctb, u32 len, int hdrlen ) { if( ctb & 0x40 ) return write_new_header( out, ctb, len, hdrlen ); if( hdrlen ) { if( hdrlen == 2 && len < 256 ) ; else if( hdrlen == 3 && len < 65536 ) ctb |= 1; else ctb |= 2; } else { if( !len ) ctb |= 3; else if( len < 256 ) ; else if( len < 65536 ) ctb |= 1; else ctb |= 2; } if( iobuf_put(out, ctb ) ) return -1; if( len || hdrlen ) { if( ctb & 2 ) { if(iobuf_put(out, len >> 24 )) return -1; if(iobuf_put(out, len >> 16 )) return -1; } if( ctb & 3 ) if(iobuf_put(out, len >> 8 )) return -1; if( iobuf_put(out, len ) ) return -1; } return 0; } static int write_new_header( IOBUF out, int ctb, u32 len, int hdrlen ) { if( hdrlen ) log_bug("can't cope with hdrlen yet\n"); if( iobuf_put(out, ctb ) ) return -1; if( !len ) { iobuf_set_partial_block_mode(out, 512 ); } else { if( len < 192 ) { if( iobuf_put(out, len ) ) return -1; } else if( len < 8384 ) { len -= 192; if( iobuf_put( out, (len / 256) + 192) ) return -1; if( iobuf_put( out, (len % 256) ) ) return -1; } else { if( iobuf_put( out, 0xff ) ) return -1; if( iobuf_put( out, (len >> 24)&0xff ) ) return -1; if( iobuf_put( out, (len >> 16)&0xff ) ) return -1; if( iobuf_put( out, (len >> 8)&0xff ) ) return -1; if( iobuf_put( out, len & 0xff ) ) return -1; } } return 0; } static int write_version( IOBUF out, int ctb ) { (void)ctb; if( iobuf_put( out, 3 ) ) return -1; return 0; } gnupg-1.4.20/g10/cardglue.h0000644000175000017500000002154112635262326012177 00000000000000/* cardglue.h - Divert operations to the agent * Copyright (C) 2003, 2004 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 3 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, see . */ #ifndef GNUPG_G10_CARDGLUE_H #define GNUPG_G10_CARDGLUE_H #ifdef ENABLE_CARD_SUPPORT /* Note, that most card related code has been taken from 2.x branch and is maintained over there if at all possible. Thus, if you make changes here, please check that a similar change has been commited to the 2.x branch. */ /* We don't use libgcrypt but the shared codes uses a function type from libgcrypt. Thus we have to provide this type here. */ typedef void (*gcry_handler_progress_t) (void *, const char *, int, int, int); /* Object to hold all info about the card. */ struct agent_card_info_s { int error; /* private. */ char *apptype; /* Malloced application type string. */ char *serialno; /* malloced hex string. */ char *disp_name; /* malloced. */ char *disp_lang; /* malloced. */ int disp_sex; /* 0 = unspecified, 1 = male, 2 = female */ char *pubkey_url; /* malloced. */ char *login_data; /* malloced. */ char *private_do[4]; /* malloced. */ char cafpr1valid; char cafpr2valid; char cafpr3valid; char cafpr1[20]; char cafpr2[20]; char cafpr3[20]; char fpr1valid; char fpr2valid; char fpr3valid; char fpr1[20]; char fpr2[20]; char fpr3[20]; u32 fpr1time; u32 fpr2time; u32 fpr3time; unsigned long sig_counter; int chv1_cached; /* True if a PIN is not required for each signing. Note that the gpg-agent might cache it anyway. */ int is_v2; /* True if this is a v2 card. */ int chvmaxlen[3]; /* Maximum allowed length of a CHV. */ int chvretry[3]; /* Allowed retries for the CHV; 0 = blocked. */ struct { /* Array with key attributes. */ int algo; /* Algorithm identifier. */ unsigned int nbits; /* Supported keysize. */ } key_attr[3]; struct { unsigned int ki:1; /* Key import available. */ unsigned int aac:1; /* Algorithm attributes are changeable. */ } extcap; }; struct agent_card_genkey_s { char fprvalid; char fpr[20]; u32 created_at; MPI n; MPI e; }; struct app_ctx_s; struct ctrl_ctx_s; typedef struct app_ctx_s *APP; /* deprecated. */ typedef struct app_ctx_s *app_t; typedef struct ctrl_ctx_s *CTRL; /* deprecated. */ typedef struct ctrl_ctx_s *ctrl_t; #define GPG_ERR_GENERAL G10ERR_GENERAL #define GPG_ERR_BAD_PIN G10ERR_BAD_PASS #define GPG_ERR_BAD_KEY G10ERR_BAD_KEY #define GPG_ERR_CARD G10ERR_GENERAL #define GPG_ERR_EEXIST G10ERR_FILE_EXISTS #define GPG_ERR_ENOMEM G10ERR_RESOURCE_LIMIT #define GPG_ERR_GENERAL G10ERR_GENERAL #define GPG_ERR_HARDWARE G10ERR_GENERAL #define GPG_ERR_INV_CARD G10ERR_GENERAL #define GPG_ERR_INV_ID G10ERR_GENERAL #define GPG_ERR_INV_NAME G10ERR_GENERAL #define GPG_ERR_INV_VALUE G10ERR_INV_ARG #define GPG_ERR_INV_SEXP G10ERR_INV_ARG #define GPG_ERR_NOT_SUPPORTED G10ERR_UNSUPPORTED #define GPG_ERR_NO_OBJ G10ERR_GENERAL #define GPG_ERR_PIN_BLOCKED G10ERR_PASSPHRASE #define GPG_ERR_UNSUPPORTED_ALGORITHM G10ERR_PUBKEY_ALGO #define GPG_ERR_USE_CONDITIONS G10ERR_GENERAL #define GPG_ERR_WRONG_CARD G10ERR_GENERAL #define GPG_ERR_WRONG_SECKEY G10ERR_WRONG_SECKEY #define GPG_ERR_PIN_NOT_SYNCED G10ERR_GENERAL #define GPG_ERR_NOT_FOUND G10ERR_GENERAL #define GPG_ERR_BUG G10ERR_GENERAL #define GPG_ERR_NOT_IMPLEMENTED G10ERR_GENERAL #define GPG_ERR_BAD_BER G10ERR_GENERAL #define GPG_ERR_EOF (-1) #define GPG_ERR_CARD_NOT_PRESENT G10ERR_NO_CARD #define GPG_ERR_CARD_RESET G10ERR_GENERAL #define GPG_ERR_WRONG_PUBKEY_ALGO G10ERR_PUBKEY_ALGO #define GPG_ERR_UNKNOWN_SEXP G10ERR_INV_ARG #define GPG_ERR_DUP_VALUE G10ERR_INV_ARG #define GPG_ERR_BAD_SECKEY G10ERR_BAD_SECKEY #define GPG_ERR_TOO_LARGE G10ERR_GENERAL #define GPG_ERR_EBUSY G10ERR_GENERAL #define GPG_ERR_ENOENT G10ERR_OPEN_FILE #define GPG_ERR_EACCES G10ERR_UNSUPPORTED #define GPG_ERR_EIO G10ERR_GENERAL #define GPG_ERR_ENODEV G10ERR_GENERAL #define GPG_ERR_CANCELED G10ERR_CANCELED #define GPG_ERR_INV_DATA G10ERR_GENERAL #define GPG_ERR_PUBKEY_ALGO G10ERR_PUBKEY_ALGO #define GPG_ERR_TOO_SHORT G10ERR_INV_ARG typedef int gpg_error_t; typedef int gpg_err_code_t; #define gpg_error(n) (n) #define gpg_err_code(n) (n) #define gpg_strerror(n) g10_errstr ((n)) #define gpg_error_from_errno(n) (G10ERR_GENERAL) /*FIXME*/ #define gpg_err_code_from_errno(n) (G10ERR_GENERAL) #define gpg_error_from_syserror() (G10ERR_GENERAL) /*FIXME*/ /* We are not using it in a library, so we even let xtrymalloc abort. Because we won't never return from these malloc functions, we also don't need the out_of_core function, we simply define it to return -1 */ #define xtrymalloc(n) xmalloc((n)) #define xtrycalloc(n,m) xcalloc((n),(m)) #define xtryrealloc(n,m) xrealloc((n),(m)) #define xtrymalloc_secure(n) xmalloc_secure((n)) #define out_of_core() (-1) #define gnupg_get_time() make_timestamp () void card_set_reader_port (const char *portstr); char *serialno_and_fpr_from_sk (const unsigned char *sn, size_t snlen, PKT_secret_key *sk); void send_status_info (ctrl_t ctrl, const char *keyword, ...); void send_status_direct (ctrl_t ctrl, const char *keyword, const char *args); void gcry_md_hash_buffer (int algo, void *digest, const void *buffer, size_t length); const char *gcry_md_algo_name (int algorithm); void log_printf (const char *fmt, ...); void log_printhex (const char *text, const void *buffer, size_t length); #define GCRY_MD_SHA1 DIGEST_ALGO_SHA1 #define GCRY_MD_RMD160 DIGEST_ALGO_RMD160 #define GCRY_MD_SHA256 DIGEST_ALGO_SHA256 #define GCRY_MD_SHA384 DIGEST_ALGO_SHA384 #define GCRY_MD_SHA512 DIGEST_ALGO_SHA512 #define GCRY_MD_SHA224 DIGEST_ALGO_SHA224 #define GCRY_MD_MD5 DIGEST_ALGO_MD5 void gcry_mpi_release (MPI a); MPI gcry_mpi_set_opaque (MPI a, void *p, unsigned int len); void card_close (void); /* Release the card info structure. */ void agent_release_card_info (struct agent_card_info_s *info); /* Return card info. */ int agent_learn (struct agent_card_info_s *info); /* Check whether the secret key for the key identified by HEXKEYGRIP is available. Return 0 for yes or an error code. */ int agent_havekey (const char *hexkeygrip); /* Return card info. */ int agent_scd_getattr (const char *name, struct agent_card_info_s *info); /* Send a SETATTR command to the SCdaemon. */ int agent_scd_setattr (const char *name, const unsigned char *value, size_t valuelen, const char *serialno); /* Send a WRITEKEY command to the SCdaemon. */ int agent_scd_writekey (int keyno, const char *serialno, const unsigned char *keydata, size_t keydatalen); /* Send a GENKEY command to the SCdaemon. */ int agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force, const char *serialno, u32 *createtime); /* Send a PKSIGN command to the SCdaemon. */ int agent_scd_pksign (const char *keyid, int hashalgo, const unsigned char *indata, size_t indatalen, unsigned char **r_buf, size_t *r_buflen); /* Send a PKDECRYPT command to the SCdaemon. */ int agent_scd_pkdecrypt (const char *serialno, const unsigned char *indata, size_t indatalen, unsigned char **r_buf, size_t *r_buflen); /* Change the PIN of an OpenPGP card or reset the retry counter. */ int agent_scd_change_pin (int chvno, const char *serialno); /* Send a CHECKPIN command. */ int agent_scd_checkpin (const char *serialnobuf); /* Clear a cached PIN. */ void agent_clear_pin_cache (const char *sn); /* Dummy functions. */ int agent_scd_writecert (const char *certidstr, const unsigned char *certdata, size_t certdatalen); int agent_scd_readcert (const char *certidstr, void **r_buf, size_t *r_buflen); #endif /*ENABLE_CARD_SUPPORT*/ #endif /*GNUPG_G10_CARDGLUE_H*/ gnupg-1.4.20/g10/trustdb.h0000644000175000017500000000726312635262326012105 00000000000000/* trustdb.h - Trust database * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, * 2005, 2012 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 3 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, see . */ #ifndef G10_TRUSTDB_H #define G10_TRUSTDB_H /* Trust values must be sorted in ascending order */ #define TRUST_MASK 15 #define TRUST_UNKNOWN 0 /* o: not yet calculated/assigned */ #define TRUST_EXPIRED 1 /* e: calculation may be invalid */ #define TRUST_UNDEFINED 2 /* q: not enough information for calculation */ #define TRUST_NEVER 3 /* n: never trust this pubkey */ #define TRUST_MARGINAL 4 /* m: marginally trusted */ #define TRUST_FULLY 5 /* f: fully trusted */ #define TRUST_ULTIMATE 6 /* u: ultimately trusted */ /* trust values not covered by the mask */ #define TRUST_FLAG_REVOKED 32 /* r: revoked */ #define TRUST_FLAG_SUB_REVOKED 64 /* r: revoked but for subkeys */ #define TRUST_FLAG_DISABLED 128 /* d: key/uid disabled */ #define TRUST_FLAG_PENDING_CHECK 256 /* a check-trustdb is pending */ #define NAMEHASH_HASH DIGEST_ALGO_RMD160 #define NAMEHASH_LEN 20 /*-- trustdb.c --*/ void register_trusted_keyid(u32 *keyid); void register_trusted_key( const char *string ); void check_trustdb (void); void update_trustdb (void); int setup_trustdb( int level, const char *dbname ); void how_to_fix_the_trustdb (void); void init_trustdb( void ); void check_trustdb_stale(void); void sync_trustdb( void ); const char *uid_trust_string_fixed(PKT_public_key *key,PKT_user_id *uid); const char *trust_value_to_string (unsigned int value); int string_to_trust_value (const char *str); void revalidation_mark (void); int trustdb_pending_check(void); void trustdb_check_or_update(void); int cache_disabled_value(PKT_public_key *pk); unsigned int get_validity (PKT_public_key *pk, PKT_user_id *uid); int get_validity_info (PKT_public_key *pk, PKT_user_id *uid); const char *get_validity_string (PKT_public_key *pk, PKT_user_id *uid); void list_trust_path( const char *username ); int enum_cert_paths( void **context, ulong *lid, unsigned *ownertrust, unsigned *validity ); void enum_cert_paths_print( void **context, FILE *fp, int refresh, ulong selected_lid ); void read_trust_options(byte *trust_model,ulong *created,ulong *nextcheck, byte *marginals,byte *completes,byte *cert_depth, byte *min_cert_level); unsigned int get_ownertrust (PKT_public_key *pk); unsigned int get_min_ownertrust (PKT_public_key *pk); int get_ownertrust_info (PKT_public_key *pk); const char *get_ownertrust_string (PKT_public_key *pk); void update_ownertrust (PKT_public_key *pk, unsigned int new_trust ); int clear_ownertrusts (PKT_public_key *pk); void clean_one_uid(KBNODE keyblock,KBNODE uidnode,int noisy,int self_only, int *uids_cleaned,int *sigs_cleaned); void clean_key(KBNODE keyblock,int noisy,int self_only, int *uids_cleaned,int *sigs_cleaned); /*-- tdbdump.c --*/ void list_trustdb(const char *username); void export_ownertrust(void); void import_ownertrust(const char *fname); /*-- pkclist.c --*/ int edit_ownertrust (PKT_public_key *pk, int mode ); #endif /*G10_TRUSTDB_H*/ gnupg-1.4.20/g10/free-packet.c0000644000175000017500000002660512635262326012600 00000000000000/* free-packet.c - cleanup stuff for packets * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, * 2005 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 3 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, see . */ #include #include #include #include #include #include "packet.h" #include "iobuf.h" #include "mpi.h" #include "util.h" #include "cipher.h" #include "memory.h" #include "options.h" void free_symkey_enc( PKT_symkey_enc *enc ) { xfree(enc); } void free_pubkey_enc( PKT_pubkey_enc *enc ) { int n, i; n = pubkey_get_nenc( enc->pubkey_algo ); if( !n ) mpi_free(enc->data[0]); for(i=0; i < n; i++ ) mpi_free( enc->data[i] ); xfree(enc); } void free_seckey_enc( PKT_signature *sig ) { int n, i; n = pubkey_get_nsig( sig->pubkey_algo ); if( !n ) mpi_free(sig->data[0]); for(i=0; i < n; i++ ) mpi_free( sig->data[i] ); xfree(sig->revkey); xfree(sig->hashed); xfree(sig->unhashed); if (sig->pka_info) { xfree (sig->pka_info->uri); xfree (sig->pka_info); } xfree(sig); } void release_public_key_parts( PKT_public_key *pk ) { int n, i; n = pubkey_get_npkey( pk->pubkey_algo ); if( !n ) mpi_free(pk->pkey[0]); for(i=0; i < n; i++ ) { mpi_free( pk->pkey[i] ); pk->pkey[i] = NULL; } if (pk->prefs) { xfree (pk->prefs); pk->prefs = NULL; } if (pk->user_id) { free_user_id (pk->user_id); pk->user_id = NULL; } if (pk->revkey) { xfree(pk->revkey); pk->revkey=NULL; pk->numrevkeys=0; } } void free_public_key( PKT_public_key *pk ) { release_public_key_parts( pk ); xfree(pk); } static subpktarea_t * cp_subpktarea (subpktarea_t *s ) { subpktarea_t *d; if( !s ) return NULL; d = xmalloc (sizeof (*d) + s->size - 1 ); d->size = s->size; d->len = s->len; memcpy (d->data, s->data, s->len); return d; } /* * Return a copy of the preferences */ prefitem_t * copy_prefs (const prefitem_t *prefs) { size_t n; prefitem_t *new; if (!prefs) return NULL; for (n=0; prefs[n].type; n++) ; new = xmalloc ( sizeof (*new) * (n+1)); for (n=0; prefs[n].type; n++) { new[n].type = prefs[n].type; new[n].value = prefs[n].value; } new[n].type = PREFTYPE_NONE; new[n].value = 0; return new; } PKT_public_key * copy_public_key ( PKT_public_key *d, PKT_public_key *s) { int n, i; if( !d ) d = xmalloc(sizeof *d); memcpy( d, s, sizeof *d ); d->user_id = scopy_user_id (s->user_id); d->prefs = copy_prefs (s->prefs); n = pubkey_get_npkey( s->pubkey_algo ); if( !n ) d->pkey[0] = mpi_copy(s->pkey[0]); else { for(i=0; i < n; i++ ) d->pkey[i] = mpi_copy( s->pkey[i] ); } if( !s->revkey && s->numrevkeys ) BUG(); if( s->numrevkeys ) { d->revkey = xmalloc(sizeof(struct revocation_key)*s->numrevkeys); memcpy(d->revkey,s->revkey,sizeof(struct revocation_key)*s->numrevkeys); } else d->revkey = NULL; return d; } /**************** * Replace all common parts of a sk by the one from the public key. * This is a hack and a better solution will be to just store the real secret * parts somewhere and don't duplicate all the other stuff. */ void copy_public_parts_to_secret_key( PKT_public_key *pk, PKT_secret_key *sk ) { sk->expiredate = pk->expiredate; sk->pubkey_algo = pk->pubkey_algo; sk->pubkey_usage= pk->pubkey_usage; sk->req_usage = pk->req_usage; sk->req_algo = pk->req_algo; sk->has_expired = pk->has_expired; sk->is_revoked = pk->is_revoked; sk->is_valid = pk->is_valid; sk->main_keyid[0]= pk->main_keyid[0]; sk->main_keyid[1]= pk->main_keyid[1]; sk->keyid[0] = pk->keyid[0]; sk->keyid[1] = pk->keyid[1]; } static pka_info_t * cp_pka_info (const pka_info_t *s) { pka_info_t *d = xmalloc (sizeof *s + strlen (s->email)); d->valid = s->valid; d->checked = s->checked; d->uri = s->uri? xstrdup (s->uri):NULL; memcpy (d->fpr, s->fpr, sizeof s->fpr); strcpy (d->email, s->email); return d; } PKT_signature * copy_signature( PKT_signature *d, PKT_signature *s ) { int n, i; if( !d ) d = xmalloc(sizeof *d); memcpy( d, s, sizeof *d ); n = pubkey_get_nsig( s->pubkey_algo ); if( !n ) d->data[0] = mpi_copy(s->data[0]); else { for(i=0; i < n; i++ ) d->data[i] = mpi_copy( s->data[i] ); } d->pka_info = s->pka_info? cp_pka_info (s->pka_info) : NULL; d->hashed = cp_subpktarea (s->hashed); d->unhashed = cp_subpktarea (s->unhashed); if(s->numrevkeys) { d->revkey=NULL; d->numrevkeys=0; parse_revkeys(d); } return d; } /* * shallow copy of the user ID */ PKT_user_id * scopy_user_id (PKT_user_id *s) { if (s) s->ref++; return s; } void release_secret_key_parts( PKT_secret_key *sk ) { int n, i; n = pubkey_get_nskey( sk->pubkey_algo ); if( !n ) mpi_free(sk->skey[0]); for(i=0; i < n; i++ ) { mpi_free( sk->skey[i] ); sk->skey[i] = NULL; } } void free_secret_key( PKT_secret_key *sk ) { release_secret_key_parts( sk ); xfree(sk); } PKT_secret_key * copy_secret_key( PKT_secret_key *d, PKT_secret_key *s ) { int n, i; if( !d ) d = xmalloc_secure(sizeof *d); else release_secret_key_parts (d); memcpy( d, s, sizeof *d ); n = pubkey_get_nskey( s->pubkey_algo ); if( !n ) d->skey[0] = mpi_copy(s->skey[0]); else { for(i=0; i < n; i++ ) d->skey[i] = mpi_copy( s->skey[i] ); } return d; } void free_comment( PKT_comment *rem ) { xfree(rem); } void free_attributes(PKT_user_id *uid) { xfree(uid->attribs); xfree(uid->attrib_data); uid->attribs=NULL; uid->attrib_data=NULL; uid->attrib_len=0; } void free_user_id (PKT_user_id *uid) { assert (uid->ref > 0); if (--uid->ref) return; free_attributes(uid); xfree (uid->prefs); xfree (uid->namehash); xfree (uid); } void free_compressed( PKT_compressed *zd ) { if( zd->buf ) { /* have to skip some bytes */ /* don't have any information about the length, so * we assume this is the last packet */ while( iobuf_read( zd->buf, NULL, 1<<30 ) != -1 ) ; } xfree(zd); } void free_encrypted( PKT_encrypted *ed ) { if( ed->buf ) { /* have to skip some bytes */ if( ed->is_partial ) { while( iobuf_read( ed->buf, NULL, 1<<30 ) != -1 ) ; } else { while( ed->len ) { /* skip the packet */ int n = iobuf_read( ed->buf, NULL, ed->len ); if( n == -1 ) ed->len = 0; else ed->len -= n; } } } xfree(ed); } void free_plaintext( PKT_plaintext *pt ) { if( pt->buf ) { /* have to skip some bytes */ if( pt->is_partial ) { while( iobuf_read( pt->buf, NULL, 1<<30 ) != -1 ) ; } else { while( pt->len ) { /* skip the packet */ int n = iobuf_read( pt->buf, NULL, pt->len ); if( n == -1 ) pt->len = 0; else pt->len -= n; } } } xfree(pt); } /**************** * Free the packet in pkt. */ void free_packet( PACKET *pkt ) { if( !pkt || !pkt->pkt.generic ) return; if( DBG_MEMORY ) log_debug("free_packet() type=%d\n", pkt->pkttype ); switch( pkt->pkttype ) { case PKT_SIGNATURE: free_seckey_enc( pkt->pkt.signature ); break; case PKT_PUBKEY_ENC: free_pubkey_enc( pkt->pkt.pubkey_enc ); break; case PKT_SYMKEY_ENC: free_symkey_enc( pkt->pkt.symkey_enc ); break; case PKT_PUBLIC_KEY: case PKT_PUBLIC_SUBKEY: free_public_key( pkt->pkt.public_key ); break; case PKT_SECRET_KEY: case PKT_SECRET_SUBKEY: free_secret_key( pkt->pkt.secret_key ); break; case PKT_COMMENT: free_comment( pkt->pkt.comment ); break; case PKT_USER_ID: free_user_id( pkt->pkt.user_id ); break; case PKT_COMPRESSED: free_compressed( pkt->pkt.compressed); break; case PKT_ENCRYPTED: case PKT_ENCRYPTED_MDC: free_encrypted( pkt->pkt.encrypted ); break; case PKT_PLAINTEXT: free_plaintext( pkt->pkt.plaintext ); break; default: xfree( pkt->pkt.generic ); break; } pkt->pkt.generic = NULL; } /**************** * returns 0 if they match. */ int cmp_public_keys( PKT_public_key *a, PKT_public_key *b ) { int n, i; if( a->timestamp != b->timestamp ) return -1; if( a->version < 4 && a->expiredate != b->expiredate ) return -1; if( a->pubkey_algo != b->pubkey_algo ) return -1; n = pubkey_get_npkey( b->pubkey_algo ); if( !n ) { /* unknown algorithm, rest is in opaque MPI */ if( mpi_cmp( a->pkey[0], b->pkey[0] ) ) return -1; } else { for(i=0; i < n; i++ ) { if( mpi_cmp( a->pkey[i], b->pkey[i] ) ) return -1; } } return 0; } /**************** * Returns 0 if they match. * We only compare the public parts. */ int cmp_secret_keys( PKT_secret_key *a, PKT_secret_key *b ) { int n, i; if( a->timestamp != b->timestamp ) return -1; if( a->version < 4 && a->expiredate != b->expiredate ) return -1; if( a->pubkey_algo != b->pubkey_algo ) return -1; n = pubkey_get_npkey( b->pubkey_algo ); if( !n ) { /* unknown algorithm, rest is in opaque MPI */ if( mpi_cmp( a->skey[0], b->skey[0] ) ) return -1; } else { for(i=0; i < n; i++ ) { if( mpi_cmp( a->skey[i], b->skey[i] ) ) return -1; } } return 0; } /**************** * Returns 0 if they match. */ int cmp_public_secret_key( PKT_public_key *pk, PKT_secret_key *sk ) { int n, i; if( pk->timestamp != sk->timestamp ) return -1; if( pk->version < 4 && pk->expiredate != sk->expiredate ) return -1; if( pk->pubkey_algo != sk->pubkey_algo ) return -1; n = pubkey_get_npkey( pk->pubkey_algo ); if( !n ) return -1; /* can't compare due to unknown algorithm */ for(i=0; i < n; i++ ) { if( mpi_cmp( pk->pkey[i] , sk->skey[i] ) ) return -1; } return 0; } int cmp_signatures( PKT_signature *a, PKT_signature *b ) { int n, i; if( a->keyid[0] != b->keyid[0] ) return -1; if( a->keyid[1] != b->keyid[1] ) return -1; if( a->pubkey_algo != b->pubkey_algo ) return -1; n = pubkey_get_nsig( a->pubkey_algo ); if( !n ) return -1; /* can't compare due to unknown algorithm */ for(i=0; i < n; i++ ) { if( mpi_cmp( a->data[i] , b->data[i] ) ) return -1; } return 0; } /**************** * Returns: true if the user ids do not match */ int cmp_user_ids( PKT_user_id *a, PKT_user_id *b ) { int res=1; if( a == b ) return 0; if( a->attrib_data && b->attrib_data ) { res = a->attrib_len - b->attrib_len; if( !res ) res = memcmp( a->attrib_data, b->attrib_data, a->attrib_len ); } else if( !a->attrib_data && !b->attrib_data ) { res = a->len - b->len; if( !res ) res = memcmp( a->name, b->name, a->len ); } return res; } gnupg-1.4.20/g10/pkclist.c0000644000175000017500000013027712635262326012064 00000000000000/* pkclist.c * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 2008, 2010 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 3 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, see . */ #include #include #include #include #ifdef HAVE_STRINGS_H #include #endif #include #include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" #include "memory.h" #include "util.h" #include "main.h" #include "trustdb.h" #include "ttyio.h" #include "status.h" #include "photoid.h" #include "i18n.h" #define CONTROL_D ('D' - 'A' + 1) /**************** * Show the revocation reason as it is stored with the given signature */ static void do_show_revocation_reason( PKT_signature *sig ) { size_t n, nn; const byte *p, *pp; int seq = 0; const char *text; while( (p = enum_sig_subpkt (sig->hashed, SIGSUBPKT_REVOC_REASON, &n, &seq, NULL )) ) { if( !n ) continue; /* invalid - just skip it */ if( *p == 0 ) text = _("No reason specified"); else if( *p == 0x01 ) text = _("Key is superseded"); else if( *p == 0x02 ) text = _("Key has been compromised"); else if( *p == 0x03 ) text = _("Key is no longer used"); else if( *p == 0x20 ) text = _("User ID is no longer valid"); else text = NULL; log_info( _("reason for revocation: ") ); if( text ) fputs( text, log_stream() ); else fprintf( log_stream(), "code=%02x", *p ); putc( '\n', log_stream() ); n--; p++; pp = NULL; do { /* We don't want any empty lines, so skip them */ while( n && *p == '\n' ) { p++; n--; } if( n ) { pp = memchr( p, '\n', n ); nn = pp? pp - p : n; log_info( _("revocation comment: ") ); print_string( log_stream(), p, nn, 0 ); putc( '\n', log_stream() ); p += nn; n -= nn; } } while( pp ); } } /* Mode 0: try and find the revocation based on the pk (i.e. check subkeys, etc.) Mode 1: use only the revocation on the main pk */ void show_revocation_reason( PKT_public_key *pk, int mode ) { /* Hmmm, this is not so easy becuase we have to duplicate the code * used in the trustbd to calculate the keyflags. We need to find * a clean way to check revocation certificates on keys and * signatures. And there should be no duplicate code. Because we * enter this function only when the trustdb told us that we have * a revoked key, we could simply look for a revocation cert and * display this one, when there is only one. Let's try to do this * until we have a better solution. */ KBNODE node, 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( "failed to get the keyblock\n"); return; } for( node=keyblock; node; node = node->next ) { if( (mode && node->pkt->pkttype == PKT_PUBLIC_KEY) || ( ( node->pkt->pkttype == PKT_PUBLIC_KEY || node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) && !cmp_public_keys( node->pkt->pkt.public_key, pk ) ) ) break; } if( !node ) { log_debug("Oops, PK not in keyblock\n"); release_kbnode( keyblock ); return; } /* now find the revocation certificate */ for( node = node->next; node ; node = node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) break; if( node->pkt->pkttype == PKT_SIGNATURE && (node->pkt->pkt.signature->sig_class == 0x20 || node->pkt->pkt.signature->sig_class == 0x28 ) ) { /* FIXME: we should check the signature here */ do_show_revocation_reason ( node->pkt->pkt.signature ); break; } } /* We didn't find it, so check if the whole key is revoked */ if(!node && !mode) show_revocation_reason(pk,1); release_kbnode( keyblock ); } /**************** * mode: 0 = standard * 1 = Without key info and additional menu option 'm' * this does also add an option to set the key to ultimately trusted. * Returns: * -2 = nothing changed - caller should show some additional info * -1 = quit operation * 0 = nothing changed * 1 = new ownertrust now in new_trust */ static int do_edit_ownertrust (PKT_public_key *pk, int mode, unsigned *new_trust, int defer_help ) { char *p; u32 keyid[2]; int changed=0; int quit=0; int show=0; int min_num; int did_help=defer_help; unsigned int minimum=get_min_ownertrust(pk); switch(minimum) { default: case TRUST_UNDEFINED: min_num=1; break; case TRUST_NEVER: min_num=2; break; case TRUST_MARGINAL: min_num=3; break; case TRUST_FULLY: min_num=4; break; } keyid_from_pk (pk, keyid); for(;;) { /* A string with valid answers. TRANSLATORS: These are the allowed answers in lower and uppercase. Below you will find the matching strings which should be translated accordingly and the letter changed to match the one in the answer string. i = please show me more information m = back to the main menu s = skip this key q = quit */ const char *ans = _("iImMqQsS"); if( !did_help ) { if( !mode ) { KBNODE keyblock, un; tty_printf(_("No trust value assigned to:\n")); tty_printf("%4u%c/%s %s\n",nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), keystr(keyid), datestr_from_pk( pk ) ); p=get_user_id_native(keyid); tty_printf(_(" \"%s\"\n"),p); xfree(p); keyblock = get_pubkeyblock (keyid); if (!keyblock) BUG (); for (un=keyblock; un; un = un->next) { if (un->pkt->pkttype != PKT_USER_ID ) continue; if (un->pkt->pkt.user_id->is_revoked ) continue; if (un->pkt->pkt.user_id->is_expired ) continue; /* Only skip textual primaries */ if (un->pkt->pkt.user_id->is_primary && !un->pkt->pkt.user_id->attrib_data ) continue; if((opt.verify_options&VERIFY_SHOW_PHOTOS) && un->pkt->pkt.user_id->attrib_data) show_photos(un->pkt->pkt.user_id->attribs, un->pkt->pkt.user_id->numattribs,pk,NULL, un->pkt->pkt.user_id); p=utf8_to_native(un->pkt->pkt.user_id->name, un->pkt->pkt.user_id->len,0); tty_printf(_(" aka \"%s\"\n"),p); } print_fingerprint (pk, NULL, 2); tty_printf("\n"); release_kbnode (keyblock); } if(opt.trust_model==TM_DIRECT) { tty_printf(_("How much do you trust that this key actually " "belongs to the named user?\n")); tty_printf("\n"); } else { /* This string also used in keyedit.c:trustsig_prompt */ tty_printf(_("Please decide how far you trust this user to" " correctly verify other users' keys\n" "(by looking at passports, checking fingerprints from" " different sources, etc.)\n")); tty_printf("\n"); } if(min_num<=1) tty_printf (_(" %d = I don't know or won't say\n"), 1); if(min_num<=2) tty_printf (_(" %d = I do NOT trust\n"), 2); if(min_num<=3) tty_printf (_(" %d = I trust marginally\n"), 3); if(min_num<=4) tty_printf (_(" %d = I trust fully\n"), 4); if (mode) tty_printf (_(" %d = I trust ultimately\n"), 5); #if 0 /* not yet implemented */ tty_printf (" i = please show me more information\n"); #endif if( mode ) tty_printf(_(" m = back to the main menu\n")); else { tty_printf(_(" s = skip this key\n")); tty_printf(_(" q = quit\n")); } tty_printf("\n"); if(minimum) tty_printf(_("The minimum trust level for this key is: %s\n\n"), trust_value_to_string(minimum)); did_help = 1; } if( strlen(ans) != 8 ) BUG(); p = cpr_get("edit_ownertrust.value",_("Your decision? ")); trim_spaces(p); cpr_kill_prompt(); if( !*p ) did_help = 0; else if( *p && p[1] ) ; else if( !p[1] && ((*p >= '0'+min_num) && *p <= (mode?'5':'4')) ) { unsigned int trust; switch( *p ) { case '1': trust = TRUST_UNDEFINED; break; case '2': trust = TRUST_NEVER ; break; case '3': trust = TRUST_MARGINAL ; break; case '4': trust = TRUST_FULLY ; break; case '5': trust = TRUST_ULTIMATE ; break; default: BUG(); } if (trust == TRUST_ULTIMATE && !cpr_get_answer_is_yes ("edit_ownertrust.set_ultimate.okay", _("Do you really want to set this key" " to ultimate trust? (y/N) "))) ; /* no */ else { *new_trust = trust; changed = 1; break; } } #if 0 /* not yet implemented */ else if( *p == ans[0] || *p == ans[1] ) { tty_printf(_("Certificates leading to an ultimately trusted key:\n")); show = 1; break; } #endif else if( mode && (*p == ans[2] || *p == ans[3] || *p == CONTROL_D ) ) { break ; /* back to the menu */ } else if( !mode && (*p == ans[6] || *p == ans[7] ) ) { break; /* skip */ } else if( !mode && (*p == ans[4] || *p == ans[5] ) ) { quit = 1; break ; /* back to the menu */ } xfree(p); p = NULL; } xfree(p); return show? -2: quit? -1 : changed; } /* * Display a menu to change the ownertrust of the key PK (which should * be a primary key). * For mode values see do_edit_ownertrust () */ int edit_ownertrust (PKT_public_key *pk, int mode ) { unsigned int trust = 0; /* Needs to be initialized to avoid gcc warning. */ int no_help = 0; for(;;) { switch ( do_edit_ownertrust (pk, mode, &trust, no_help ) ) { case -1: /* quit */ return -1; case -2: /* show info */ no_help = 1; break; case 1: /* trust value set */ trust &= ~TRUST_FLAG_DISABLED; trust |= get_ownertrust (pk) & TRUST_FLAG_DISABLED; update_ownertrust (pk, trust ); return 1; default: return 0; } } } /**************** * Check whether we can trust this pk which has a trustlevel of TRUSTLEVEL * Returns: true if we trust. */ static int do_we_trust( PKT_public_key *pk, unsigned int trustlevel ) { /* We should not be able to get here with a revoked or expired key */ if(trustlevel & TRUST_FLAG_REVOKED || trustlevel & TRUST_FLAG_SUB_REVOKED || (trustlevel & TRUST_MASK) == TRUST_EXPIRED) BUG(); if( opt.trust_model==TM_ALWAYS ) { if( opt.verbose ) log_info("No trust check due to `--trust-model always' option\n"); return 1; } switch(trustlevel & TRUST_MASK) { default: log_error ("invalid trustlevel %u returned from validation layer\n", trustlevel); /* fall thru */ case TRUST_UNKNOWN: case TRUST_UNDEFINED: log_info(_("%s: There is no assurance this key belongs" " to the named user\n"),keystr_from_pk(pk)); return 0; /* no */ case TRUST_MARGINAL: log_info(_("%s: There is limited assurance this key belongs" " to the named user\n"),keystr_from_pk(pk)); return 1; /* yes */ case TRUST_FULLY: if( opt.verbose ) log_info(_("This key probably belongs to the named user\n")); return 1; /* yes */ case TRUST_ULTIMATE: if( opt.verbose ) log_info(_("This key belongs to us\n")); return 1; /* yes */ } return 1; /*NOTREACHED*/ } /**************** * wrapper around do_we_trust, so we can ask whether to use the * key anyway. */ static int do_we_trust_pre( PKT_public_key *pk, unsigned int trustlevel ) { int rc; rc = do_we_trust( pk, trustlevel ); if( !opt.batch && !rc ) { print_pubkey_info(NULL,pk); print_fingerprint (pk, NULL, 2); tty_printf("\n"); tty_printf( _("It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n")); tty_printf("\n"); if( cpr_get_answer_is_yes("untrusted_key.override", _("Use this key anyway? (y/N) ")) ) rc = 1; /* Hmmm: Should we set a flag to tell the user about * his decision the next time he encrypts for this recipient? */ } return rc; } /**************** * Check whether we can trust this signature. * Returns: Error if we shall not trust this signatures. */ int check_signatures_trust( PKT_signature *sig ) { PKT_public_key *pk = xmalloc_clear( sizeof *pk ); unsigned int trustlevel; int rc=0; rc = get_pubkey( pk, sig->keyid ); if (rc) { /* this should not happen */ log_error("Ooops; the key vanished - can't check the trust\n"); rc = G10ERR_NO_PUBKEY; goto leave; } if ( opt.trust_model==TM_ALWAYS ) { if( !opt.quiet ) log_info(_("WARNING: Using untrusted key!\n")); if (opt.with_fingerprint) print_fingerprint (pk, NULL, 1); goto leave; } if(pk->maybe_revoked && !pk->is_revoked) log_info(_("WARNING: this key might be revoked (revocation key" " not present)\n")); trustlevel = get_validity (pk, NULL); if ( (trustlevel & TRUST_FLAG_REVOKED) ) { write_status( STATUS_KEYREVOKED ); if(pk->is_revoked==2) log_info(_("WARNING: This key has been revoked by its" " designated revoker!\n")); else log_info(_("WARNING: This key has been revoked by its owner!\n")); log_info(_(" This could mean that the signature is forged.\n")); show_revocation_reason( pk, 0 ); } else if ((trustlevel & TRUST_FLAG_SUB_REVOKED) ) { write_status( STATUS_KEYREVOKED ); log_info(_("WARNING: This subkey has been revoked by its owner!\n")); show_revocation_reason( pk, 0 ); } if ((trustlevel & TRUST_FLAG_DISABLED)) log_info (_("Note: This key has been disabled.\n")); /* If we have PKA information adjust the trustlevel. */ if (sig->pka_info && sig->pka_info->valid) { unsigned char fpr[MAX_FINGERPRINT_LEN]; PKT_public_key *primary_pk; size_t fprlen; int okay; primary_pk = xmalloc_clear (sizeof *primary_pk); get_pubkey (primary_pk, pk->main_keyid); fingerprint_from_pk (primary_pk, fpr, &fprlen); free_public_key (primary_pk); if ( fprlen == 20 && !memcmp (sig->pka_info->fpr, fpr, 20) ) { okay = 1; write_status_text (STATUS_PKA_TRUST_GOOD, sig->pka_info->email); log_info (_("Note: Verified signer's address is `%s'\n"), sig->pka_info->email); } else { okay = 0; write_status_text (STATUS_PKA_TRUST_BAD, sig->pka_info->email); log_info (_("Note: Signer's address `%s' " "does not match DNS entry\n"), sig->pka_info->email); } switch ( (trustlevel & TRUST_MASK) ) { case TRUST_UNKNOWN: case TRUST_UNDEFINED: case TRUST_MARGINAL: if (okay && opt.verify_options&VERIFY_PKA_TRUST_INCREASE) { trustlevel = ((trustlevel & ~TRUST_MASK) | TRUST_FULLY); log_info (_("trustlevel adjusted to FULL" " due to valid PKA info\n")); } /* (fall through) */ case TRUST_FULLY: if (!okay) { trustlevel = ((trustlevel & ~TRUST_MASK) | TRUST_NEVER); log_info (_("trustlevel adjusted to NEVER" " due to bad PKA info\n")); } break; } } /* Now let the user know what up with the trustlevel. */ switch ( (trustlevel & TRUST_MASK) ) { case TRUST_EXPIRED: log_info(_("Note: This key has expired!\n")); print_fingerprint (pk, NULL, 1); break; default: log_error ("invalid trustlevel %u returned from validation layer\n", trustlevel); /* fall thru */ case TRUST_UNKNOWN: case TRUST_UNDEFINED: write_status( STATUS_TRUST_UNDEFINED ); log_info(_("WARNING: This key is not certified with" " a trusted signature!\n")); log_info(_(" There is no indication that the " "signature belongs to the owner.\n" )); print_fingerprint (pk, NULL, 1); break; case TRUST_NEVER: /* currently we won't get that status */ write_status( STATUS_TRUST_NEVER ); log_info(_("WARNING: We do NOT trust this key!\n")); log_info(_(" The signature is probably a FORGERY.\n")); if (opt.with_fingerprint) print_fingerprint (pk, NULL, 1); rc = G10ERR_BAD_SIGN; break; case TRUST_MARGINAL: write_status( STATUS_TRUST_MARGINAL ); log_info(_("WARNING: This key is not certified with" " sufficiently trusted signatures!\n")); log_info(_(" It is not certain that the" " signature belongs to the owner.\n" )); print_fingerprint (pk, NULL, 1); break; case TRUST_FULLY: write_status( STATUS_TRUST_FULLY ); if (opt.with_fingerprint) print_fingerprint (pk, NULL, 1); break; case TRUST_ULTIMATE: write_status( STATUS_TRUST_ULTIMATE ); if (opt.with_fingerprint) print_fingerprint (pk, NULL, 1); break; } leave: free_public_key( pk ); return rc; } void release_pk_list( PK_LIST pk_list ) { PK_LIST pk_rover; for( ; pk_list; pk_list = pk_rover ) { pk_rover = pk_list->next; free_public_key( pk_list->pk ); xfree( pk_list ); } } static int key_present_in_pk_list(PK_LIST pk_list, PKT_public_key *pk) { for( ; pk_list; pk_list = pk_list->next) if (cmp_public_keys(pk_list->pk, pk) == 0) return 0; return -1; } /**************** * Return a malloced string with a default reciepient if there is any */ static char * default_recipient(void) { PKT_secret_key *sk; byte fpr[MAX_FINGERPRINT_LEN+1]; size_t n; char *p; int i; if( opt.def_recipient ) return xstrdup( opt.def_recipient ); if( !opt.def_recipient_self ) return NULL; sk = xmalloc_clear( sizeof *sk ); i = get_seckey_byname( sk, NULL, 0 ); if( i ) { free_secret_key( sk ); return NULL; } n = MAX_FINGERPRINT_LEN; fingerprint_from_sk( sk, fpr, &n ); free_secret_key( sk ); p = xmalloc( 2*n+3 ); *p++ = '0'; *p++ = 'x'; for(i=0; i < n; i++ ) sprintf( p+2*i, "%02X", fpr[i] ); p -= 2; return p; } static int expand_id(const char *id,STRLIST *into,unsigned int flags) { struct groupitem *groups; int count=0; for(groups=opt.grouplist;groups;groups=groups->next) { /* need strcasecmp() here, as this should be localized */ if(strcasecmp(groups->name,id)==0) { STRLIST each,sl; /* this maintains the current utf8-ness */ for(each=groups->values;each;each=each->next) { sl=add_to_strlist(into,each->d); sl->flags=flags; count++; } break; } } return count; } /* For simplicity, and to avoid potential loops, we only expand once - you can't make an alias that points to an alias. */ static STRLIST expand_group(STRLIST input) { STRLIST sl,output=NULL,rover; for(rover=input;rover;rover=rover->next) if(expand_id(rover->d,&output,rover->flags)==0) { /* Didn't find any groups, so use the existing string */ sl=add_to_strlist(&output,rover->d); sl->flags=rover->flags; } return output; } /* This is the central function to collect the keys for recipients. It is thus used to prepare a public key encryption. encrypt-to keys, default keys and the keys for the actual recipients are all collected here. When not in batch mode and no recipient has been passed on the commandline, the function will also ask for recipients. RCPTS is a string list with the recipients; NULL is an allowed value but not very useful. Group expansion is done on these names; they may be in any of the user Id formats we can handle. The flags bits for each string in the string list are used for: Bit 0: This is an encrypt-to recipient. Bit 1: This is a hidden recipient. USE is the desired use for the key - usually PUBKEY_USAGE_ENC. RET_PK_LIST. On success a list of keys is stored at the address RET_PK_LIST; the caller must free this list. On error the value at this address is not changed. */ int build_pk_list( STRLIST rcpts, PK_LIST *ret_pk_list, unsigned int use ) { PK_LIST pk_list = NULL; PKT_public_key *pk=NULL; int rc=0; int any_recipients=0; STRLIST rov,remusr; char *def_rec = NULL; /* Try to expand groups if any have been defined. */ if (opt.grouplist) remusr = expand_group (rcpts); else remusr = rcpts; /* Check whether there are any recipients in the list and build the * list of the encrypt-to ones (we always trust them). */ for ( rov = remusr; rov; rov = rov->next ) { if ( !(rov->flags & 1) ) { /* This is a regular recipient; i.e. not an encrypt-to one. */ any_recipients = 1; /* Hidden recipients are not allowed while in PGP mode, issue a warning and switch into GnuPG mode. */ if ((rov->flags&2) && (PGP2 || PGP6 || PGP7 || PGP8)) { log_info(_("you may not use %s while in %s mode\n"), "--hidden-recipient", compliance_option_string()); compliance_failure(); } } else if ( (use & PUBKEY_USAGE_ENC) && !opt.no_encrypt_to ) { /* Encryption has been requested and --encrypt-to has not been disabled. Check this encrypt-to key. */ pk = xmalloc_clear( sizeof *pk ); pk->req_usage = use; /* We explicitly allow encrypt-to to an disabled key; thus we pass 1 as last argument. */ if ( (rc = get_pubkey_byname ( pk, rov->d, NULL, NULL, 1 )) ) { free_public_key ( pk ); pk = NULL; log_error (_("%s: skipped: %s\n"), rov->d, g10_errstr(rc) ); write_status_text_and_buffer (STATUS_INV_RECP, (rc == G10ERR_NO_PUBKEY || rc == G10ERR_NO_SECKEY)? "1 ": (rc == G10ERR_INV_USER_ID)? "14 ": "0 ", rov->d, strlen (rov->d), -1); goto fail; } else if ( !(rc=check_pubkey_algo2 (pk->pubkey_algo, use )) ) { /* Skip the actual key if the key is already present * in the list. Add it to our list if not. */ if (key_present_in_pk_list(pk_list, pk) == 0) { free_public_key (pk); pk = NULL; if (!opt.quiet) log_info (_("%s: skipped: public key already present\n"), rov->d); } else { PK_LIST r; r = xmalloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->flags = (rov->flags&2)?1:0; pk_list = r; /* Hidden encrypt-to recipients are not allowed while in PGP mode, issue a warning and switch into GnuPG mode. */ if ((r->flags&1) && (PGP2 || PGP6 || PGP7 || PGP8)) { log_info(_("you may not use %s while in %s mode\n"), "--hidden-encrypt-to", compliance_option_string()); compliance_failure(); } } } else { /* The public key is not usable for encryption or not available. */ free_public_key( pk ); pk = NULL; log_error(_("%s: skipped: %s\n"), rov->d, g10_errstr(rc) ); write_status_text_and_buffer (STATUS_INV_RECP, "3 ", rov->d, strlen (rov->d), -1); goto fail; } } } /* If we don't have any recipients yet and we are not in batch mode drop into interactive selection mode. */ if ( !any_recipients && !opt.batch ) { int have_def_rec; char *answer = NULL; STRLIST backlog = NULL; if (pk_list) any_recipients = 1; def_rec = default_recipient(); have_def_rec = !!def_rec; if ( !have_def_rec ) tty_printf(_("You did not specify a user ID. (you may use \"-r\")\n")); for (;;) { rc = 0; xfree(answer); if ( have_def_rec ) { /* A default recipient is taken as the first entry. */ answer = def_rec; def_rec = NULL; } else if (backlog) { /* This is part of our trick to expand and display groups. */ answer = pop_strlist (&backlog); } else { /* Show the list of already collected recipients and ask for more. */ PK_LIST iter; tty_printf("\n"); tty_printf(_("Current recipients:\n")); for (iter=pk_list;iter;iter=iter->next) { u32 keyid[2]; keyid_from_pk(iter->pk,keyid); tty_printf("%4u%c/%s %s \"", nbits_from_pk(iter->pk), pubkey_letter(iter->pk->pubkey_algo), keystr(keyid), datestr_from_pk(iter->pk)); if (iter->pk->user_id) tty_print_utf8_string(iter->pk->user_id->name, iter->pk->user_id->len); else { size_t n; char *p = get_user_id( keyid, &n ); tty_print_utf8_string( p, n ); xfree(p); } tty_printf("\"\n"); } answer = cpr_get_utf8("pklist.user_id.enter", _("\nEnter the user ID. " "End with an empty line: ")); trim_spaces(answer); cpr_kill_prompt(); } if ( !answer || !*answer ) { xfree(answer); break; /* No more recipients entered - get out of loop. */ } /* Do group expand here too. The trick here is to continue the loop if any expansion occured. The code above will then list all expanded keys. */ if (expand_id(answer,&backlog,0)) continue; /* Get and check key for the current name. */ if (pk) free_public_key (pk); pk = xmalloc_clear( sizeof *pk ); pk->req_usage = use; rc = get_pubkey_byname( pk, answer, NULL, NULL, 0 ); if (rc) tty_printf(_("No such user ID.\n")); else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) ) { if ( have_def_rec ) { /* No validation for a default recipient. */ if (!key_present_in_pk_list(pk_list, pk)) { free_public_key (pk); pk = NULL; log_info (_("skipped: public key " "already set as default recipient\n") ); } else { PK_LIST r = xmalloc (sizeof *r); r->pk = pk; pk = NULL; r->next = pk_list; r->flags = 0; /* No throwing default ids. */ pk_list = r; } any_recipients = 1; continue; } else { /* Check validity of this key. */ int trustlevel; trustlevel = get_validity (pk, pk->user_id); if ( (trustlevel & TRUST_FLAG_DISABLED) ) { tty_printf (_("Public key is disabled.\n") ); } else if ( do_we_trust_pre (pk, trustlevel) ) { /* Skip the actual key if the key is already * present in the list */ if (!key_present_in_pk_list(pk_list, pk)) { free_public_key(pk); pk = NULL; log_info(_("skipped: public key already set\n") ); } else { PK_LIST r; r = xmalloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->flags = 0; /* No throwing interactive ids. */ pk_list = r; } any_recipients = 1; continue; } } } xfree(def_rec); def_rec = NULL; have_def_rec = 0; } if ( pk ) { free_public_key( pk ); pk = NULL; } } else if ( !any_recipients && (def_rec = default_recipient()) ) { /* We are in batch mode and have only a default recipient. */ pk = xmalloc_clear( sizeof *pk ); pk->req_usage = use; /* The default recipient is allowed to be disabled; thus pass 1 as last argument. */ rc = get_pubkey_byname (pk, def_rec, NULL, NULL, 1); if (rc) log_error(_("unknown default recipient \"%s\"\n"), def_rec ); else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use)) ) { /* Mark any_recipients here since the default recipient would have been used if it wasn't already there. It doesn't really matter if we got this key from the default recipient or an encrypt-to. */ any_recipients = 1; if (!key_present_in_pk_list(pk_list, pk)) log_info (_("skipped: public key already set " "as default recipient\n")); else { PK_LIST r = xmalloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->flags = 0; /* No throwing default ids. */ pk_list = r; } } if ( pk ) { free_public_key( pk ); pk = NULL; } xfree(def_rec); def_rec = NULL; } else { /* General case: Check all keys. */ any_recipients = 0; for (; remusr; remusr = remusr->next ) { if ( (remusr->flags & 1) ) continue; /* encrypt-to keys are already handled. */ pk = xmalloc_clear( sizeof *pk ); pk->req_usage = use; if ( (rc = get_pubkey_byname( pk, remusr->d, NULL, NULL, 0 )) ) { /* Key not found or other error. */ free_public_key( pk ); pk = NULL; log_error(_("%s: skipped: %s\n"), remusr->d, g10_errstr(rc) ); write_status_text_and_buffer (STATUS_INV_RECP, (rc == G10ERR_NO_PUBKEY || rc == G10ERR_NO_SECKEY)? "1 ": (rc == G10ERR_INV_USER_ID)? "14 ": "0 ", remusr->d, strlen (remusr->d), -1); goto fail; } else if ( !(rc=check_pubkey_algo2(pk->pubkey_algo, use )) ) { /* Key found and usable. Check validity. */ int trustlevel; trustlevel = get_validity (pk, pk->user_id); if ( (trustlevel & TRUST_FLAG_DISABLED) ) { /*Key has been disabled. */ free_public_key(pk); pk = NULL; log_info(_("%s: skipped: public key is disabled\n"), remusr->d); write_status_text_and_buffer (STATUS_INV_RECP, "13 ", remusr->d, strlen (remusr->d), -1); rc=G10ERR_UNU_PUBKEY; goto fail; } else if ( do_we_trust_pre( pk, trustlevel ) ) { /* Note: do_we_trust may have changed the trustlevel */ /* We have at least one valid recipient. It doesn't * matters if this recipient is already present. */ any_recipients = 1; /* Skip the actual key if the key is already present * in the list */ if (!key_present_in_pk_list(pk_list, pk)) { free_public_key(pk); pk = NULL; if (!opt.quiet) log_info(_("%s: skipped: public key already present\n"), remusr->d); } else { PK_LIST r; r = xmalloc( sizeof *r ); r->pk = pk; pk = NULL; r->next = pk_list; r->flags = (remusr->flags&2)?1:0; pk_list = r; } } else { /* We don't trust this key. */ free_public_key( pk ); pk = NULL; write_status_text_and_buffer (STATUS_INV_RECP, "10 ", remusr->d, strlen (remusr->d), -1); rc=G10ERR_UNU_PUBKEY; goto fail; } } else { /* Key found but not usable for us (e.g. sign-only key). */ free_public_key( pk ); pk = NULL; write_status_text_and_buffer (STATUS_INV_RECP, "3 ", remusr->d, strlen (remusr->d), -1); log_error(_("%s: skipped: %s\n"), remusr->d, g10_errstr(rc) ); goto fail; } } } if ( !rc && !any_recipients ) { log_error(_("no valid addressees\n")); write_status_text (STATUS_NO_RECP, "0"); rc = G10ERR_NO_USER_ID; } fail: if ( rc ) release_pk_list( pk_list ); else *ret_pk_list = pk_list; if (opt.grouplist) free_strlist(remusr); return rc; } /* In pgp6 mode, disallow all ciphers except IDEA (1), 3DES (2), and CAST5 (3), all hashes except MD5 (1), SHA1 (2), and RIPEMD160 (3), and all compressions except none (0) and ZIP (1). pgp7 and pgp8 mode expands the cipher list to include AES128 (7), AES192 (8), AES256 (9), and TWOFISH (10). pgp8 adds the SHA-256 hash (8). For a true PGP key all of this is unneeded as they are the only items present in the preferences subpacket, but checking here covers the weird case of encrypting to a key that had preferences from a different implementation which was then used with PGP. I am not completely comfortable with this as the right thing to do, as it slightly alters the list of what the user is supposedly requesting. It is not against the RFC however, as the preference chosen will never be one that the user didn't specify somewhere ("The implementation may use any mechanism to pick an algorithm in the intersection"), and PGP has no mechanism to fix such a broken preference list, so I'm including it. -dms */ int algo_available( preftype_t preftype, int algo, const union pref_hint *hint ) { if( preftype == PREFTYPE_SYM ) { if(PGP6 && (algo != CIPHER_ALGO_IDEA && algo != CIPHER_ALGO_3DES && algo != CIPHER_ALGO_CAST5)) return 0; if(PGP7 && (algo != CIPHER_ALGO_IDEA && algo != CIPHER_ALGO_3DES && algo != CIPHER_ALGO_CAST5 && algo != CIPHER_ALGO_AES && algo != CIPHER_ALGO_AES192 && algo != CIPHER_ALGO_AES256 && algo != CIPHER_ALGO_TWOFISH)) return 0; /* PGP8 supports all the ciphers we do.. */ return algo && !check_cipher_algo( algo ); } else if( preftype == PREFTYPE_HASH ) { if(hint && hint->digest_length) { if(hint->digest_length!=20 || opt.flags.dsa2) { /* If --enable-dsa2 is set or the hash isn't 160 bits (which implies DSA2), then we'll accept a hash that is larger than we need. Otherwise we won't accept any hash that isn't exactly the right size. */ if(hint->digest_length > md_digest_length(algo)) return 0; } else if(hint->digest_length != md_digest_length(algo)) return 0; } if((PGP6 || PGP7) && (algo != DIGEST_ALGO_MD5 && algo != DIGEST_ALGO_SHA1 && algo != DIGEST_ALGO_RMD160)) return 0; if(PGP8 && (algo != DIGEST_ALGO_MD5 && algo != DIGEST_ALGO_SHA1 && algo != DIGEST_ALGO_RMD160 && algo != DIGEST_ALGO_SHA256)) return 0; return algo && !check_digest_algo( algo ); } else if( preftype == PREFTYPE_ZIP ) { if((PGP6 || PGP7) && (algo != COMPRESS_ALGO_NONE && algo != COMPRESS_ALGO_ZIP)) return 0; /* PGP8 supports all the compression algos we do */ return !check_compress_algo( algo ); } else return 0; } /**************** * Return -1 if we could not find an algorithm. */ int select_algo_from_prefs(PK_LIST pk_list, int preftype, int request, const union pref_hint *hint) { PK_LIST pkr; u32 bits[8]; const prefitem_t *prefs; int result=-1,i; u16 scores[256]; if( !pk_list ) return -1; memset(bits,0xFF,sizeof(bits)); memset(scores,0,sizeof(scores)); for( pkr = pk_list; pkr; pkr = pkr->next ) { u32 mask[8]; int rank=1,implicit=-1; memset(mask,0,sizeof(mask)); switch(preftype) { case PREFTYPE_SYM: /* IDEA is implicitly there for v3 keys with v3 selfsigs if --pgp2 mode is on. This was a 2440 thing that was dropped from 4880 but is still relevant to GPG's 1991 support. */ if(PGP2 && pkr->pk->version<4 && pkr->pk->selfsigversion<4) implicit=CIPHER_ALGO_IDEA; else implicit=CIPHER_ALGO_3DES; break; case PREFTYPE_HASH: /* While I am including this code for completeness, note that currently --pgp2 mode locks the hash at MD5, so this code will never even be called. Even if the hash wasn't locked at MD5, we don't support sign+encrypt in --pgp2 mode, and that's the only time PREFTYPE_HASH is used anyway. -dms */ /* MD5 is there for v3 keys with v3 selfsigs when --pgp2 is on. */ if(PGP2 && pkr->pk->version<4 && pkr->pk->selfsigversion<4) implicit=DIGEST_ALGO_MD5; else implicit=DIGEST_ALGO_SHA1; break; case PREFTYPE_ZIP: /* Uncompressed is always an option. */ implicit=COMPRESS_ALGO_NONE; } if (pkr->pk->user_id) /* selected by user ID */ prefs = pkr->pk->user_id->prefs; else prefs = pkr->pk->prefs; if( prefs ) { for (i=0; prefs[i].type; i++ ) { if( prefs[i].type == preftype ) { /* Make sure all scores don't add up past 0xFFFF (and roll around) */ if(rank+scores[prefs[i].value]<=0xFFFF) scores[prefs[i].value]+=rank; else scores[prefs[i].value]=0xFFFF; mask[prefs[i].value/32] |= 1<<(prefs[i].value%32); rank++; /* We saw the implicit algorithm, so we don't need tack it on the end ourselves. */ if(implicit==prefs[i].value) implicit=-1; } } } if(rank==1 && preftype==PREFTYPE_ZIP) { /* If the compression preferences are not present, they are assumed to be ZIP, Uncompressed (RFC4880:13.3.1) */ scores[1]=1; /* ZIP is first choice */ scores[0]=2; /* Uncompressed is second choice */ mask[0]|=3; } /* If the key didn't have the implicit algorithm listed explicitly, add it here at the tail of the list. */ if(implicit>-1) { scores[implicit]+=rank; mask[implicit/32] |= 1<<(implicit%32); } for(i=0;i<8;i++) bits[i]&=mask[i]; } /* We've now scored all of the algorithms, and the usable ones have bits set. Let's pick the winner. */ /* The caller passed us a request. Can we use it? */ if(request>-1 && (bits[request/32] & (1<<(request%32))) && algo_available(preftype,request,hint)) result=request; if(result==-1) { /* If we have personal prefs set, use them. */ prefs=NULL; if(preftype==PREFTYPE_SYM && opt.personal_cipher_prefs) prefs=opt.personal_cipher_prefs; else if(preftype==PREFTYPE_HASH && opt.personal_digest_prefs) prefs=opt.personal_digest_prefs; else if(preftype==PREFTYPE_ZIP && opt.personal_compress_prefs) prefs=opt.personal_compress_prefs; if( prefs ) for(i=0; prefs[i].type; i++ ) { if(bits[prefs[i].value/32] & (1<<(prefs[i].value%32)) && algo_available( preftype, prefs[i].value, hint)) { result = prefs[i].value; break; } } } if(result==-1) { unsigned int best=-1; /* At this point, we have not selected an algorithm due to a special request or via personal prefs. Pick the highest ranked algorithm (i.e. the one with the lowest score). */ if(preftype==PREFTYPE_HASH && scores[DIGEST_ALGO_MD5]) { /* "If you are building an authentication system, the recipient may specify a preferred signing algorithm. However, the signer would be foolish to use a weak algorithm simply because the recipient requests it." (RFC4880:14). If any other hash algorithm is available, pretend that MD5 isn't. Note that if the user intentionally chose MD5 by putting it in their personal prefs, then we do what the user said (as we never reach this code). */ for(i=DIGEST_ALGO_MD5+1;i<256;i++) if(scores[i]) { scores[DIGEST_ALGO_MD5]=0; break; } } for(i=0;i<256;i++) { /* Note the '<' here. This means in case of a tie, we will favor the lower algorithm number. We have a choice between the lower number (probably an older algorithm with more time in use), or the higher number (probably a newer algorithm with less time in use). Older is probably safer here, even though the newer algorithms tend to be "stronger". */ if(scores[i] && scores[i]next) { int mdc; if (pkr->pk->user_id) /* selected by user ID */ mdc = pkr->pk->user_id->flags.mdc; else mdc = pkr->pk->mdc_feature; if (!mdc) return 0; /* at least one recipient does not support it */ } return 1; /* can be used */ } gnupg-1.4.20/g10/tdbio.h0000644000175000017500000000651412635262326011515 00000000000000/* tdbio.h - Trust database I/O functions * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2012 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 3 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, see . */ #ifndef G10_TDBIO_H #define G10_TDBIO_H #include "host2net.h" #define TRUST_RECORD_LEN 40 #define SIGS_PER_RECORD ((TRUST_RECORD_LEN-10)/5) #define ITEMS_PER_HTBL_RECORD ((TRUST_RECORD_LEN-2)/4) #define ITEMS_PER_HLST_RECORD ((TRUST_RECORD_LEN-6)/5) #define ITEMS_PER_PREF_RECORD (TRUST_RECORD_LEN-10) #if ITEMS_PER_PREF_RECORD % 2 #error ITEMS_PER_PREF_RECORD must be even #endif #define MAX_LIST_SIGS_DEPTH 20 #define RECTYPE_VER 1 #define RECTYPE_HTBL 10 #define RECTYPE_HLST 11 #define RECTYPE_TRUST 12 #define RECTYPE_VALID 13 #define RECTYPE_FREE 254 struct trust_record { int rectype; int mark; int dirty; /* for now only used internal by functions */ struct trust_record *next; /* help pointer to build lists in memory */ ulong recnum; union { struct { /* version record: */ byte version; /* should be 3 */ byte marginals; byte completes; byte cert_depth; byte trust_model; byte min_cert_level; ulong created; /* timestamp of trustdb creation */ ulong nextcheck; /* timestamp of next scheduled check */ ulong firstfree; ulong trusthashtbl; } ver; struct { /* free record */ ulong next; } free; struct { ulong item[ITEMS_PER_HTBL_RECORD]; } htbl; struct { ulong next; ulong rnum[ITEMS_PER_HLST_RECORD]; /* of another record */ } hlst; struct { byte fingerprint[20]; byte ownertrust; byte depth; ulong validlist; byte min_ownertrust; } trust; struct { byte namehash[20]; ulong next; byte validity; byte full_count; byte marginal_count; } valid; } r; }; typedef struct trust_record TRUSTREC; /*-- tdbio.c --*/ int tdbio_update_version_record(void); int tdbio_set_dbname( const char *new_dbname, int create, int *r_nofile); const char *tdbio_get_dbname(void); void tdbio_dump_record( TRUSTREC *rec, FILE *fp ); int tdbio_read_record( ulong recnum, TRUSTREC *rec, int expected ); int tdbio_write_record( TRUSTREC *rec ); int tdbio_db_matches_options(void); byte tdbio_read_model(void); ulong tdbio_read_nextcheck (void); int tdbio_write_nextcheck (ulong stamp); int tdbio_is_dirty(void); int tdbio_sync(void); int tdbio_begin_transaction(void); int tdbio_end_transaction(void); int tdbio_cancel_transaction(void); int tdbio_delete_record( ulong recnum ); ulong tdbio_new_recnum(void); int tdbio_search_trust_byfpr(const byte *fingerprint, TRUSTREC *rec ); int tdbio_search_trust_bypk(PKT_public_key *pk, TRUSTREC *rec ); void tdbio_invalid(void); #endif /*G10_TDBIO_H*/ gnupg-1.4.20/g10/apdu.h0000644000175000017500000001263312635262326011344 00000000000000/* apdu.h - ISO 7816 APDU functions and low level I/O * Copyright (C) 2003, 2008 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 3 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, see . * * $Id$ */ #ifndef APDU_H #define APDU_H /* ISO 7816 values for the statusword are defined here because they should not be visible to the users of the actual ISO command API. */ enum { SW_MORE_DATA = 0x6100, /* Note: that the low byte must be masked of.*/ SW_EOF_REACHED = 0x6282, SW_TERM_STATE = 0x6285, /* Selected file is in termination state. */ SW_EEPROM_FAILURE = 0x6581, SW_WRONG_LENGTH = 0x6700, SW_SM_NOT_SUP = 0x6882, /* Secure Messaging is not supported. */ SW_CC_NOT_SUP = 0x6884, /* Command Chaining is not supported. */ SW_CHV_WRONG = 0x6982, SW_CHV_BLOCKED = 0x6983, SW_USE_CONDITIONS = 0x6985, SW_BAD_PARAMETER = 0x6a80, /* (in the data field) */ SW_NOT_SUPPORTED = 0x6a81, SW_FILE_NOT_FOUND = 0x6a82, SW_RECORD_NOT_FOUND = 0x6a83, SW_BAD_LC = 0x6a87, /* Lc does not match command or p1/p2. */ SW_REF_NOT_FOUND = 0x6a88, SW_BAD_P0_P1 = 0x6b00, SW_EXACT_LENGTH = 0x6c00, SW_INS_NOT_SUP = 0x6d00, SW_CLA_NOT_SUP = 0x6e00, SW_SUCCESS = 0x9000, /* The follwoing statuswords are no real ones but used to map host OS errors into status words. A status word is 16 bit so that those values can't be issued by a card. */ SW_HOST_OUT_OF_CORE = 0x10001, /* No way yet to differentiate between errnos on a failed malloc. */ SW_HOST_INV_VALUE = 0x10002, SW_HOST_INCOMPLETE_CARD_RESPONSE = 0x10003, SW_HOST_NO_DRIVER = 0x10004, SW_HOST_NOT_SUPPORTED = 0x10005, SW_HOST_LOCKING_FAILED= 0x10006, SW_HOST_BUSY = 0x10007, SW_HOST_NO_CARD = 0x10008, SW_HOST_CARD_INACTIVE = 0x10009, SW_HOST_CARD_IO_ERROR = 0x1000a, SW_HOST_GENERAL_ERROR = 0x1000b, SW_HOST_NO_READER = 0x1000c, SW_HOST_ABORTED = 0x1000d, SW_HOST_NO_KEYPAD = 0x1000e, SW_HOST_ALREADY_CONNECTED = 0x1000f }; #define SW_EXACT_LENGTH_P(a) (((a)&~0xff) == SW_EXACT_LENGTH) /* Bit flags for the card status. */ #define APDU_CARD_USABLE (1) /* Card is present and ready for use. */ #define APDU_CARD_PRESENT (2) /* Card is just present. */ #define APDU_CARD_ACTIVE (4) /* Card is active. */ /* Note , that apdu_open_reader returns no status word but -1 on error. */ int apdu_open_reader (const char *portstr); int apdu_open_remote_reader (const char *portstr, const unsigned char *cookie, size_t length, int (*readfnc) (void *opaque, void *buffer, size_t size), void *readfnc_value, int (*writefnc) (void *opaque, const void *buffer, size_t size), void *writefnc_value, void (*closefnc) (void *opaque), void *closefnc_value); int apdu_shutdown_reader (int slot); int apdu_close_reader (int slot); void apdu_prepare_exit (void); int apdu_enum_reader (int slot, int *used); unsigned char *apdu_get_atr (int slot, size_t *atrlen); const char *apdu_strerror (int rc); /* These APDU functions return status words. */ int apdu_connect (int slot); int apdu_disconnect (int slot); int apdu_set_progress_cb (int slot, gcry_handler_progress_t cb, void *cb_arg); int apdu_activate (int slot); int apdu_reset (int slot); int apdu_get_status (int slot, int hang, unsigned int *status, unsigned int *changed); int apdu_check_keypad (int slot, int command, int pin_mode, int pinlen_min, int pinlen_max, int pin_padlen); int apdu_send_simple (int slot, int extended_mode, int class, int ins, int p0, int p1, int lc, const char *data); int apdu_send_simple_kp (int slot, int class, int ins, int p0, int p1, int lc, const char *data, int pin_mode, int pinlen_min, int pinlen_max, int pin_padlen); int apdu_send (int slot, int extended_mode, int class, int ins, int p0, int p1, int lc, const char *data, unsigned char **retbuf, size_t *retbuflen); int apdu_send_le (int slot, int extended_mode, int class, int ins, int p0, int p1, int lc, const char *data, int le, unsigned char **retbuf, size_t *retbuflen); int apdu_send_direct (int slot, size_t extended_length, const unsigned char *apdudata, size_t apdudatalen, int handle_more, unsigned char **retbuf, size_t *retbuflen); #endif /*APDU_H*/ gnupg-1.4.20/g10/options.h0000644000175000017500000002561712635263103012106 00000000000000/* options.h * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007 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 3 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, see . */ #ifndef G10_OPTIONS_H #define G10_OPTIONS_H #include #include #include "main.h" #include "packet.h" #ifndef EXTERN_UNLESS_MAIN_MODULE /* Norcraft can't cope with common symbols */ #if defined (__riscos__) && !defined (INCLUDED_BY_MAIN_MODULE) #define EXTERN_UNLESS_MAIN_MODULE extern #else #define EXTERN_UNLESS_MAIN_MODULE #endif #endif EXTERN_UNLESS_MAIN_MODULE struct { int verbose; int quiet; unsigned debug; int armor; char *outfile; off_t max_output; int dry_run; int list_only; int textmode; int expert; const char *def_sig_expire; int ask_sig_expire; const char *def_cert_expire; int ask_cert_expire; int batch; /* run in batch mode */ int answer_yes; /* answer yes on most questions */ int answer_no; /* answer no on most questions */ int check_sigs; /* check key signatures */ int with_colons; int with_key_data; int with_fingerprint; /* opt --with-fingerprint active */ int fingerprint; /* list fingerprints */ int list_sigs; /* list signatures */ int no_armor; int list_packets; /* list-packets mode: 1=normal, 2=invoked by command*/ int def_cipher_algo; int force_v3_sigs; int force_v4_certs; int force_mdc; int disable_mdc; int def_digest_algo; int cert_digest_algo; int compress_algo; int compress_level; int bz2_compress_level; int bz2_decompress_lowmem; const char *def_secret_key; char *def_recipient; int def_recipient_self; int def_cert_level; int min_cert_level; int ask_cert_level; int emit_version; /* 0 = none, 1 = major only, 2 = major and minor, 3 = full version, 4 = full version plus OS string. */ int marginals_needed; int completes_needed; int max_cert_depth; const char *homedir; char *display; /* 5 options to be passed to the gpg-agent */ char *ttyname; char *ttytype; char *lc_ctype; char *lc_messages; int skip_verify; int compress_keys; int compress_sigs; /* TM_CLASSIC must be zero to accomodate trustdbs generated before we started storing the trust model inside the trustdb. */ enum { TM_CLASSIC=0, TM_PGP=1, TM_EXTERNAL=2, TM_ALWAYS, TM_DIRECT, TM_AUTO } trust_model; int force_ownertrust; enum { CO_GNUPG, CO_RFC4880, CO_RFC2440, CO_RFC1991, CO_PGP2, CO_PGP6, CO_PGP7, CO_PGP8 } compliance; enum { KF_SHORT, KF_LONG, KF_0xSHORT, KF_0xLONG } keyid_format; int pgp2_workarounds; int shm_coprocess; const char *set_filename; STRLIST comments; int throw_keyid; const char *photo_viewer; int s2k_mode; int s2k_digest_algo; int s2k_cipher_algo; unsigned char s2k_count; /* This is the encoded form, not the raw count */ int simple_sk_checksum; /* create the deprecated rfc2440 secret key protection */ int not_dash_escaped; int escape_from; int lock_once; struct keyserver_spec { char *uri; char *scheme; char *auth; char *host; char *port; char *path; char *opaque; STRLIST options; struct { unsigned int direct_uri:1; } flags; struct keyserver_spec *next; } *keyserver; struct { unsigned int options; unsigned int import_options; unsigned int export_options; STRLIST other; } keyserver_options; int exec_disable; int exec_path_set; unsigned int import_options; unsigned int export_options; unsigned int list_options; unsigned int verify_options; const char *def_preference_list; const char *def_keyserver_url; prefitem_t *personal_cipher_prefs; prefitem_t *personal_digest_prefs; prefitem_t *personal_compress_prefs; struct weakhash *weak_digests; int no_perm_warn; int no_mdc_warn; char *temp_dir; int no_encrypt_to; int interactive; struct notation *sig_notations; struct notation *cert_notations; STRLIST sig_policy_url; STRLIST cert_policy_url; STRLIST sig_keyserver_url; STRLIST cert_subpackets; STRLIST sig_subpackets; int allow_non_selfsigned_uid; int allow_freeform_uid; int no_literal; ulong set_filesize; int fast_list_mode; int fixed_list_mode; int ignore_time_conflict; int ignore_valid_from; int ignore_crc_error; int ignore_mdc_error; int command_fd; const char *override_session_key; int show_session_key; int use_agent; const char *gpg_agent_info; int try_all_secrets; int no_expensive_trust_checks; int no_sig_cache; int no_auto_check_trustdb; int preserve_permissions; int no_homedir_creation; struct groupitem *grouplist; int strict; int mangle_dos_filenames; int enable_progress_filter; unsigned int screen_columns; unsigned int screen_lines; byte *show_subpackets; int rfc2440_text; /* If true, let write failures on the status-fd exit the process. */ int exit_on_status_write_error; /* If > 0, limit the number of card insertion prompts to this value. */ int limit_card_insert_tries; #ifdef ENABLE_CARD_SUPPORT const char *ctapi_driver; /* Library to access the ctAPI. */ const char *pcsc_driver; /* Library to access the PC/SC system. */ int disable_ccid; /* Disable the use of the internal CCID driver. */ int disable_keypad; /* Do not allow the use of a keypad. */ #endif /*ENABLE_CARD_SUPPORT*/ struct { /* If set, require an 0x19 backsig to be present on signatures made by signing subkeys. If not set, a missing backsig is not an error (but an invalid backsig still is). */ unsigned int require_cross_cert:1; unsigned int use_embedded_filename:1; unsigned int utf8_filename:1; unsigned int dsa2:1; unsigned int allow_multiple_messages:1; unsigned int allow_weak_digest_algos:1; unsigned int large_rsa:1; } flags; /* Linked list of ways to find a key if the key isn't on the local keyring. */ struct akl { enum {AKL_CERT, AKL_PKA, AKL_LDAP, AKL_KEYSERVER, AKL_SPEC} type; struct keyserver_spec *spec; struct akl *next; } *auto_key_locate; int passwd_repeat; } opt; /* CTRL is used to keep some global variables we currently can't avoid. Future concurrent versions of gpg will put it into a per request structure CTRL. */ EXTERN_UNLESS_MAIN_MODULE struct { int in_auto_key_retrieve; /* True if we are doing an auto_key_retrieve. */ } glo_ctrl; #define DBG_PACKET_VALUE 1 /* debug packet reading/writing */ #define DBG_MPI_VALUE 2 /* debug mpi details */ #define DBG_CIPHER_VALUE 4 /* debug cipher handling */ /* (may reveal sensitive data) */ #define DBG_FILTER_VALUE 8 /* debug internal filter handling */ #define DBG_IOBUF_VALUE 16 /* debug iobuf stuff */ #define DBG_MEMORY_VALUE 32 /* debug memory allocation stuff */ #define DBG_CACHE_VALUE 64 /* debug the cacheing */ #define DBG_MEMSTAT_VALUE 128 /* show memory statistics */ #define DBG_TRUST_VALUE 256 /* debug the trustdb */ #define DBG_HASHING_VALUE 512 /* debug hashing operations */ #define DBG_EXTPROG_VALUE 1024 /* debug external program calls */ #define DBG_CARD_IO_VALUE 2048 /* debug smart card I/O. */ #define DBG_PACKET (opt.debug & DBG_PACKET_VALUE) #define DBG_FILTER (opt.debug & DBG_FILTER_VALUE) #define DBG_CACHE (opt.debug & DBG_CACHE_VALUE) #define DBG_TRUST (opt.debug & DBG_TRUST_VALUE) #define DBG_HASHING (opt.debug & DBG_HASHING_VALUE) #define DBG_EXTPROG (opt.debug & DBG_EXTPROG_VALUE) #define DBG_CARD_IO (opt.debug & DBG_CARD_IO_VALUE) #define GNUPG (opt.compliance==CO_GNUPG) #define RFC1991 (opt.compliance==CO_RFC1991 || opt.compliance==CO_PGP2) #define RFC2440 (opt.compliance==CO_RFC2440) #define RFC4880 (opt.compliance==CO_RFC4880) #define PGP2 (opt.compliance==CO_PGP2) #define PGP6 (opt.compliance==CO_PGP6) #define PGP7 (opt.compliance==CO_PGP7) #define PGP8 (opt.compliance==CO_PGP8) #define PGPX (PGP2 || PGP6 || PGP7 || PGP8) /* Various option flags. Note that there should be no common string names between the IMPORT_ and EXPORT_ flags as they can be mixed in the keyserver-options option. */ #define IMPORT_LOCAL_SIGS (1<<0) #define IMPORT_REPAIR_PKS_SUBKEY_BUG (1<<1) #define IMPORT_FAST (1<<2) #define IMPORT_SK2PK (1<<3) #define IMPORT_MERGE_ONLY (1<<4) #define IMPORT_MINIMAL (1<<5) #define IMPORT_CLEAN (1<<6) #define IMPORT_NO_SECKEY (1<<7) #define IMPORT_KEEP_OWNERTTRUST (1<<8) #define EXPORT_LOCAL_SIGS (1<<0) #define EXPORT_ATTRIBUTES (1<<1) #define EXPORT_SENSITIVE_REVKEYS (1<<2) #define EXPORT_RESET_SUBKEY_PASSWD (1<<3) #define EXPORT_MINIMAL (1<<4) #define EXPORT_CLEAN (1<<5) #define LIST_SHOW_PHOTOS (1<<0) #define LIST_SHOW_POLICY_URLS (1<<1) #define LIST_SHOW_STD_NOTATIONS (1<<2) #define LIST_SHOW_USER_NOTATIONS (1<<3) #define LIST_SHOW_NOTATIONS (LIST_SHOW_STD_NOTATIONS|LIST_SHOW_USER_NOTATIONS) #define LIST_SHOW_KEYSERVER_URLS (1<<4) #define LIST_SHOW_UID_VALIDITY (1<<5) #define LIST_SHOW_UNUSABLE_UIDS (1<<6) #define LIST_SHOW_UNUSABLE_SUBKEYS (1<<7) #define LIST_SHOW_KEYRING (1<<8) #define LIST_SHOW_SIG_EXPIRE (1<<9) #define LIST_SHOW_SIG_SUBPACKETS (1<<10) #define VERIFY_SHOW_PHOTOS (1<<0) #define VERIFY_SHOW_POLICY_URLS (1<<1) #define VERIFY_SHOW_STD_NOTATIONS (1<<2) #define VERIFY_SHOW_USER_NOTATIONS (1<<3) #define VERIFY_SHOW_NOTATIONS (VERIFY_SHOW_STD_NOTATIONS|VERIFY_SHOW_USER_NOTATIONS) #define VERIFY_SHOW_KEYSERVER_URLS (1<<4) #define VERIFY_SHOW_UID_VALIDITY (1<<5) #define VERIFY_SHOW_UNUSABLE_UIDS (1<<6) #define VERIFY_PKA_LOOKUPS (1<<7) #define VERIFY_PKA_TRUST_INCREASE (1<<8) #define VERIFY_SHOW_PRIMARY_UID_ONLY (1<<9) #define KEYSERVER_USE_TEMP_FILES (1<<0) #define KEYSERVER_KEEP_TEMP_FILES (1<<1) #define KEYSERVER_ADD_FAKE_V3 (1<<2) #define KEYSERVER_AUTO_KEY_RETRIEVE (1<<3) #define KEYSERVER_HONOR_KEYSERVER_URL (1<<4) #define KEYSERVER_HONOR_PKA_RECORD (1<<5) #endif /*G10_OPTIONS_H*/ gnupg-1.4.20/g10/cardglue.c0000644000175000017500000012021212635262326012165 00000000000000/* cardglue.c - mainly dispatcher for card related functions. * Copyright (C) 2003, 2004, 2005, 2006, 2009 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 3 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, see . */ #include #ifndef ENABLE_CARD_SUPPORT #error not configured for card support. #endif #include #include #include #include #include #include #include "options.h" #include "packet.h" #include "errors.h" #include "memory.h" #include "util.h" #include "main.h" #include "status.h" #include "ttyio.h" #include "i18n.h" #include "cardglue.h" #include "apdu.h" #include "app-common.h" struct ctrl_ctx_s { assuan_error_t (*status_cb)(void *opaque, const char *line); void *status_cb_arg; }; struct pincb_parm_s { const char *sn; }; struct writekey_parm_s { assuan_context_t ctx; const unsigned char *keydata; size_t keydatalen; }; static char *default_reader_port; static app_t current_app; /* Local prototypes. */ static assuan_error_t learn_status_cb (void *opaque, const char *line); /* To avoid cluttering the code with bunches of ifdefs we use a few dummy functions instead and defines. */ #ifndef ENABLE_AGENT_SUPPORT #define ASSUAN_LINELENGTH 100 static assuan_context_t agent_open (int try, const char *orig_codeset) { return NULL; } void agent_close (assuan_context_t ctx) { } const char * assuan_strerror (assuan_error_t err) { return "no Assuan support"; } assuan_error_t assuan_transact (assuan_context_t ctx, const char *command, assuan_error_t (*data_cb)(void *, const void *, size_t), void *data_cb_arg, assuan_error_t (*inquire_cb)(void*, const char *), void *inquire_cb_arg, assuan_error_t (*status_cb)(void*, const char *), void *status_cb_arg) { return 100; /* ASSUAN_NOT_IMPLEMENTED */ } assuan_error_t assuan_send_data (assuan_context_t ctx, const void *buffer, size_t length) { return 100; /* ASSUAN_NOT_IMPLEMENTED */ } #endif /*!ENABLE_AGENT_SUPPORT*/ /* Create a serialno/fpr string from the serial number and the secret key. caller must free the returned string. There is no error return. [Taken from 1.9's keyid.c]*/ char * serialno_and_fpr_from_sk (const unsigned char *sn, size_t snlen, PKT_secret_key *sk) { unsigned char fpr[MAX_FINGERPRINT_LEN]; size_t fprlen; char *buffer, *p; int i; fingerprint_from_sk (sk, fpr, &fprlen); buffer = p = xmalloc (snlen*2 + 1 + fprlen*2 + 1); for (i=0; i < snlen; i++, p+=2) sprintf (p, "%02X", sn[i]); *p++ = '/'; for (i=0; i < fprlen; i++, p+=2) sprintf (p, "%02X", fpr[i]); *p = 0; return buffer; } /* Send a line with status information via assuan and escape all given buffers. The variable elements are pairs of (char *, size_t), terminated with a (NULL, 0). */ void send_status_info (ctrl_t ctrl, const char *keyword, ...) { va_list arg_ptr; const unsigned char *value; size_t valuelen; char buf[950], *p; size_t n; va_start (arg_ptr, keyword); p = buf; n = 0; valuelen = strlen (keyword); for ( ; valuelen && n < DIM (buf)-2; n++, valuelen--, keyword++) *p++ = *keyword; while ( (value = va_arg (arg_ptr, const unsigned char *)) ) { valuelen = va_arg (arg_ptr, size_t); if (!valuelen) continue; /* empty buffer */ if (n) { *p++ = ' '; n++; } for ( ; valuelen && n < DIM (buf)-2; n++, valuelen--, value++) { if (*value < ' ' || *value == '+') { sprintf (p, "%%%02X", *value); p += 3; } else if (*value == ' ') *p++ = '+'; else *p++ = *value; } } *p = 0; if (ctrl && ctrl->status_cb) ctrl->status_cb (ctrl->status_cb_arg, buf); va_end (arg_ptr); } /* Send a ready formatted status line via assuan. */ void send_status_direct (ctrl_t ctrl, const char *keyword, const char *args) { char buf[950]; if (strchr (args, '\n')) log_error ("error: LF detected in status line - not sending\n"); else { snprintf (buf, sizeof buf, "%s%s%s", keyword, args? " ":"", args? args:""); if (ctrl && ctrl->status_cb) ctrl->status_cb (ctrl->status_cb_arg, buf); } } void gcry_mpi_release (MPI a) { mpi_free (a); } MPI gcry_mpi_set_opaque (MPI a, void *p, unsigned int len) { return mpi_set_opaque (a, p, len); } /* Replacement function of the Libgcrypt onewhich is used in gnupg 1.9. Thus function computes the digest of ALGO from the data in BUFFER of LENGTH. ALGO must be supported. */ void gcry_md_hash_buffer (int algo, void *digest, const void *buffer, size_t length) { MD_HANDLE h = md_open (algo, 0); if (!h) BUG(); md_write (h, (byte *) buffer, length); md_final (h); memcpy (digest, md_read (h, algo), md_digest_length (algo)); md_close (h); } /* This function simply returns the name of the algorithm or some constant string when there is no algo. It will never return NULL. */ const char * gcry_md_algo_name (int algorithm) { const char *s = digest_algo_to_string (algorithm); return s ? s : "?"; } /* This is a limited version of the one in 1.9 but it should be sufficient here. */ void log_printf (const char *fmt, ...) { va_list arg_ptr; va_start (arg_ptr, fmt); vfprintf (log_stream (), fmt, arg_ptr); va_end (arg_ptr); } /* Print a hexdump of BUFFER. With TEXT of NULL print just the raw dump, with TEXT just an empty string, print a trailing linefeed, otherwise print an entire debug line. */ void log_printhex (const char *text, const void *buffer, size_t length) { if (text && *text) log_debug ("%s ", text); if (length) { const unsigned char *p = buffer; log_printf ("%02X", *p); for (length--, p++; length--; p++) log_printf (" %02X", *p); } if (text) log_printf ("\n"); } void app_set_default_reader_port (const char *portstr) { xfree (default_reader_port); default_reader_port = portstr? xstrdup (portstr): NULL; } void card_set_reader_port (const char *portstr) { app_set_default_reader_port (portstr); } /* Retrieve the serial number and the time of the last update of the card. The serial number is returned as a malloced string (hex encoded) in SERIAL and the time of update is returned in STAMP. If no update time is available the returned value is 0. Caller must free SERIAL unless the function returns an error. */ int app_get_serial_and_stamp (app_t app, char **serial, time_t *stamp) { unsigned char *buf, *p; int i; if (!app || !serial || !stamp) return gpg_error (GPG_ERR_INV_VALUE); *serial = NULL; *stamp = 0; /* not available */ buf = xtrymalloc (app->serialnolen * 2 + 1); if (!buf) return gpg_error_from_errno (errno); for (p=buf, i=0; i < app->serialnolen; p +=2, i++) sprintf (p, "%02X", app->serialno[i]); *p = 0; *serial = buf; return 0; } /* Release the card info structure. */ void agent_release_card_info (struct agent_card_info_s *info) { int i; if (!info) return; xfree (info->serialno); info->serialno = NULL; xfree (info->apptype); info->apptype = NULL; xfree (info->disp_name); info->disp_name = NULL; xfree (info->disp_lang); info->disp_lang = NULL; xfree (info->pubkey_url); info->pubkey_url = NULL; xfree (info->login_data); info->login_data = NULL; info->fpr1valid = info->fpr2valid = info->fpr3valid = 0; info->cafpr1valid = info->cafpr2valid = info->cafpr3valid = 0; for (i=0; i < 4; i++) { xfree (info->private_do[i]); info->private_do[i] = NULL; } } /* Print an error message for a failed assuan_transact and return a gpg error code. No error is printed if RC is 0. */ static gpg_error_t test_transact (int rc, const char *command) { if (!rc) return 0; log_error ("sending command `%s' to agent failed: %s\n", command, assuan_strerror (rc)); return gpg_error (GPG_ERR_CARD); } /* Try to open a card using an already running agent. Prepare a proper application context and return it. */ static app_t open_card_via_agent (int *scd_available) { assuan_context_t ctx; app_t app; struct agent_card_info_s info; int rc; *scd_available = 0; ctx = agent_open (1, NULL); if (!ctx) return NULL; /* Request the serialnumber of the card. If we get NOT_SUPPORTED or NO_SCDAEMON back, the gpg-agent either has disabled scdaemon or it can't be used. We close the connection in this case and use our own code. This may happen if just the gpg-agent has been installed for the sake of passphrase caching. */ memset (&info, 0, sizeof info); rc = assuan_transact (ctx, "SCD SERIALNO openpgp", NULL, NULL, NULL, NULL, learn_status_cb, &info); if (rc) { if ((rc & 0xffff) == 60 || (rc & 0xffff) == 119) ; /* No scdaemon available to gpg-agent. */ else { write_status_text (STATUS_CARDCTRL, "4"); log_info ("selecting openpgp failed: %s\n", assuan_strerror (rc)); *scd_available = 1; } agent_release_card_info (&info); agent_close (ctx); return NULL; } app = xcalloc (1, sizeof *app); app->assuan_ctx = ctx; return app; } /* Open the current card and select the openpgp application. Return an APP context handle to be used for further procesing or NULL on error or if no OpenPGP application exists.*/ static app_t open_card (void) { int slot = -1; int rc; app_t app; int did_shutdown = 0; int retry_count = 0; /* First check whether we can contact a gpg-agent and divert all operation to it. This is required because gpg as well as the agent require exclusive access to the reader. */ if (opt.use_agent) { int scd_available; app = open_card_via_agent (&scd_available); if (app) goto ready; /* Yes, there is a agent with a usable card, go that way. */ if (scd_available) return NULL; /* Agent available but card problem. */ } /* No agent or usable agent, thus we do it on our own. */ card_close (); retry: if (did_shutdown) apdu_reset (slot); else { slot = apdu_open_reader (default_reader_port); if (slot == -1) { write_status_text (STATUS_CARDCTRL, "5"); log_error (_("card reader not available\n")); return NULL; } } app = xcalloc (1, sizeof *app); app->slot = slot; rc = app_select_openpgp (app); if (opt.limit_card_insert_tries && ++retry_count >= opt.limit_card_insert_tries) ; else if (rc && !opt.batch) { write_status_text (STATUS_CARDCTRL, "1"); did_shutdown = !!apdu_shutdown_reader (slot); if ( cpr_get_answer_okay_cancel ("cardctrl.insert_card.okay", _("Please insert the card and hit return or enter 'c' to cancel: "), 1) ) { if (!did_shutdown) apdu_close_reader (slot); xfree (app); goto retry; } } if (rc) { write_status_text (STATUS_CARDCTRL, "4"); log_info (_("selecting openpgp failed: %s\n"), gpg_strerror (rc)); apdu_close_reader (slot); xfree (app); return NULL; } ready: app->ref_count = 1; current_app = app; if (is_status_enabled () ) { int i; char *p, *buf; buf = xmalloc (5 + app->serialnolen * 2 + 1); p = stpcpy (buf, "3 "); for (i=0; i < app->serialnolen; p +=2, i++) sprintf (p, "%02X", app->serialno[i]); write_status_text (STATUS_CARDCTRL, buf); xfree (buf); } return app; } void card_close (void) { if (current_app) { app_t app = current_app; current_app = NULL; if (app->assuan_ctx) agent_close (app->assuan_ctx); else apdu_close_reader (app->slot); xfree (app); } } /* Format a cache ID from the serialnumber in SN and return it as an allocated string. In case of an error NULL is returned. */ static char * format_cacheid (const char *sn) { const char *s; size_t snlen; char *cacheid = NULL; /* The serialnumber we use for a card is "CARDSN:serialno". Where serialno is the BCD string (i.e. hex string) with the full number. The serial number expect here constsis of hexdigits followed by other characters, we cut off these other characters. */ if (sn) { for (s=sn,snlen=0; hexdigitp (s); s++, snlen++) ; if (snlen == 32) { /* Yes, this looks indeed like an OpenPGP card S/N. */ cacheid = xtrymalloc (7+snlen+1); if (cacheid) { memcpy (cacheid, "CARDSN:", 7); memcpy (cacheid+7, sn, snlen); cacheid[7+snlen] = 0; } } } return cacheid; } /* If RC is not 0, write an appropriate status message. */ static void status_sc_op_failure (int rc) { if (rc == G10ERR_CANCELED) write_status_text (STATUS_SC_OP_FAILURE, "1"); else if (rc == G10ERR_BAD_PASS) write_status_text (STATUS_SC_OP_FAILURE, "2"); else if (rc) write_status (STATUS_SC_OP_FAILURE); } /* Check that the serial number of the current card (as described by APP) matches SERIALNO. If there is no match and we are not in batch mode, present a prompt to insert the desired card. The function returnd 0 if the present card is okay, -1 if the user selected to insert a new card or an error value. Note that the card context will be closed in all cases except for 0 as return value and if it was possible to merely shutdown the reader. */ static int check_card_serialno (app_t app, const char *serialno) { const char *s; int ask = 0; int n; for (s = serialno, n=0; *s != '/' && hexdigitp (s); s++, n++) ; if (n != 32) { log_error ("invalid serial number in keyring detected\n"); return gpg_error (GPG_ERR_INV_ID); } if (app->serialnolen != 16) ask = 1; for (s = serialno, n=0; !ask && n < 16; s += 2, n++) if (app->serialno[n] != xtoi_2 (s)) ask = 1; if (ask) { char buf[5+32+1]; int did_shutdown = 0; if (current_app && !apdu_shutdown_reader (current_app->slot)) did_shutdown = 1; else card_close (); if (!opt.batch) tty_printf (_("Please remove the current card and " "insert the one with serial number:\n" " %.*s\n"), 32, serialno); sprintf (buf, "1 %.32s", serialno); write_status_text (STATUS_CARDCTRL, buf); if ( !opt.batch && cpr_get_answer_okay_cancel ("cardctrl.change_card.okay", _("Hit return when ready " "or enter 'c' to cancel: "), 1) ) { card_close (); return -1; } if (did_shutdown) apdu_reset (current_app->slot); else card_close (); return gpg_error (GPG_ERR_INV_ID); } return 0; } /* Take a 20 byte hexencoded string and put it into the the provided 20 byte buffer FPR in binary format. */ static int unhexify_fpr (const char *hexstr, unsigned char *fpr) { const char *s; int n; for (s=hexstr, n=0; hexdigitp (s); s++, n++) ; if (*s || (n != 40)) return 0; /* no fingerprint (invalid or wrong length). */ n /= 2; for (s=hexstr, n=0; *s; s += 2, n++) fpr[n] = xtoi_2 (s); return 1; /* okay */ } /* Take the serial number from LINE and return it verbatim in a newly allocated string. We make sure that only hex characters are returned. */ static char * store_serialno (const char *line) { const char *s; char *p; for (s=line; hexdigitp (s); s++) ; p = xmalloc (s + 1 - line); memcpy (p, line, s-line); p[s-line] = 0; return p; } /* Return a new malloced string by unescaping the string S. Escaping is percent escaping and '+'/space mapping. A binary nul will silently be replaced by a 0xFF. Function returns NULL to indicate an out of memory status. */ static char * unescape_status_string (const unsigned char *s) { return unescape_percent_string (s); } static assuan_error_t learn_status_cb (void *opaque, const char *line) { struct agent_card_info_s *parm = opaque; const char *keyword = line; int keywordlen; int i; /* log_debug ("got status line `%s'\n", line); */ for (keywordlen=0; *line && !spacep (line); line++, keywordlen++) ; while (spacep (line)) line++; if (keywordlen == 8 && !memcmp (keyword, "SERIALNO", keywordlen)) { xfree (parm->serialno); parm->serialno = store_serialno (line); parm->is_v2 = (strlen (parm->serialno) >= 16 && xtoi_2 (parm->serialno+12) >= 2 ); } else if (keywordlen == 7 && !memcmp (keyword, "APPTYPE", keywordlen)) { xfree (parm->apptype); parm->apptype = unescape_status_string (line); } else if (keywordlen == 9 && !memcmp (keyword, "DISP-NAME", keywordlen)) { xfree (parm->disp_name); parm->disp_name = unescape_percent_string (line); } else if (keywordlen == 9 && !memcmp (keyword, "DISP-LANG", keywordlen)) { xfree (parm->disp_lang); parm->disp_lang = unescape_percent_string (line); } else if (keywordlen == 8 && !memcmp (keyword, "DISP-SEX", keywordlen)) { parm->disp_sex = *line == '1'? 1 : *line == '2' ? 2: 0; } else if (keywordlen == 10 && !memcmp (keyword, "PUBKEY-URL", keywordlen)) { xfree (parm->pubkey_url); parm->pubkey_url = unescape_percent_string (line); } else if (keywordlen == 10 && !memcmp (keyword, "LOGIN-DATA", keywordlen)) { xfree (parm->login_data); parm->login_data = unescape_percent_string (line); } else if (keywordlen == 11 && !memcmp (keyword, "SIG-COUNTER", keywordlen)) { parm->sig_counter = strtoul (line, NULL, 0); } else if (keywordlen == 10 && !memcmp (keyword, "CHV-STATUS", keywordlen)) { char *p, *buf; buf = p = unescape_percent_string (line); if (buf) { while (spacep (p)) p++; parm->chv1_cached = atoi (p); while (*p && !spacep (p)) p++; while (spacep (p)) p++; for (i=0; *p && i < 3; i++) { parm->chvmaxlen[i] = atoi (p); while (*p && !spacep (p)) p++; while (spacep (p)) p++; } for (i=0; *p && i < 3; i++) { parm->chvretry[i] = atoi (p); while (*p && !spacep (p)) p++; while (spacep (p)) p++; } xfree (buf); } } else if (keywordlen == 6 && !memcmp (keyword, "EXTCAP", keywordlen)) { char *p, *p2, *buf; int abool; buf = p = unescape_status_string (line); if (buf) { for (p = strtok (buf, " "); p; p = strtok (NULL, " ")) { p2 = strchr (p, '='); if (p2) { *p2++ = 0; abool = (*p2 == '1'); if (!strcmp (p, "ki")) parm->extcap.ki = abool; else if (!strcmp (p, "aac")) parm->extcap.aac = abool; } } xfree (buf); } } else if (keywordlen == 7 && !memcmp (keyword, "KEY-FPR", keywordlen)) { int no = atoi (line); while (* line && !spacep (line)) line++; while (spacep (line)) line++; if (no == 1) parm->fpr1valid = unhexify_fpr (line, parm->fpr1); else if (no == 2) parm->fpr2valid = unhexify_fpr (line, parm->fpr2); else if (no == 3) parm->fpr3valid = unhexify_fpr (line, parm->fpr3); } else if (keywordlen == 8 && !memcmp (keyword, "KEY-TIME", keywordlen)) { int no = atoi (line); while (* line && !spacep (line)) line++; while (spacep (line)) line++; if (no == 1) parm->fpr1time = strtoul (line, NULL, 10); else if (no == 2) parm->fpr2time = strtoul (line, NULL, 10); else if (no == 3) parm->fpr3time = strtoul (line, NULL, 10); } else if (keywordlen == 6 && !memcmp (keyword, "CA-FPR", keywordlen)) { int no = atoi (line); while (*line && !spacep (line)) line++; while (spacep (line)) line++; if (no == 1) parm->cafpr1valid = unhexify_fpr (line, parm->cafpr1); else if (no == 2) parm->cafpr2valid = unhexify_fpr (line, parm->cafpr2); else if (no == 3) parm->cafpr3valid = unhexify_fpr (line, parm->cafpr3); } else if (keywordlen == 12 && !memcmp (keyword, "PRIVATE-DO-", 11) && strchr ("1234", keyword[11])) { int no = keyword[11] - '1'; assert (no >= 0 && no <= 3); xfree (parm->private_do[no]); parm->private_do[no] = unescape_percent_string (line); } else if (keywordlen == 8 && !memcmp (keyword, "KEY-ATTR", keywordlen)) { int keyno, algo, nbits; sscanf (line, "%d %d %d", &keyno, &algo, &nbits); keyno--; if (keyno >= 0 && keyno < DIM (parm->key_attr)) { parm->key_attr[keyno].algo = algo; parm->key_attr[keyno].nbits = nbits; } } return 0; } /* Return card info. */ int agent_learn (struct agent_card_info_s *info) { app_t app; int rc; struct ctrl_ctx_s ctrl; time_t stamp; char *serial; app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); memset (info, 0, sizeof *info); if (app->assuan_ctx) { rc = assuan_transact (app->assuan_ctx, "SCD LEARN --force", NULL, NULL, NULL, NULL, learn_status_cb, info); rc = test_transact (rc, "SCD LEARN"); } else { memset (&ctrl, 0, sizeof ctrl); ctrl.status_cb = learn_status_cb; ctrl.status_cb_arg = info; rc = app_get_serial_and_stamp (app, &serial, &stamp); if (!rc) { send_status_info (&ctrl, "SERIALNO", serial, strlen(serial), NULL, 0); xfree (serial); rc = app->fnc.learn_status (app, &ctrl, 0); } } if (!rc) agent_scd_getattr ("KEY-ATTR", info); return rc; } /* Get an attribute from the card. Make sure info is initialized. */ int agent_scd_getattr (const char *name, struct agent_card_info_s *info) { int rc; app_t app; struct ctrl_ctx_s ctrl; app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); if (app->assuan_ctx) { char line[ASSUAN_LINELENGTH]; /* We assume that NAME does not need escaping. */ if (12 + strlen (name) > DIM(line)-1) return gpg_error (GPG_ERR_CARD); stpcpy (stpcpy (line, "SCD GETATTR "), name); rc = test_transact (assuan_transact (app->assuan_ctx, line, NULL, NULL, NULL, NULL, learn_status_cb, info), "SCD GETATTR"); } else { ctrl.status_cb = learn_status_cb; ctrl.status_cb_arg = info; rc = app->fnc.getattr (app, &ctrl, name); } return rc; } static int pin_cb (void *opaque, const char *info, char **retstr) { struct pincb_parm_s *parm = opaque; char *value; int canceled; int isadmin = 0; int newpin = 0; const char *again_text = NULL; const char *ends, *s; char *cacheid = NULL; *retstr = NULL; /* log_debug ("asking for PIN '%s'\n", info); */ /* We use a special prefix to check whether the Admin PIN has been requested. */ if (info && *info =='|' && (ends=strchr (info+1, '|'))) { for (s=info+1; s < ends; s++) { if (*s == 'A') isadmin = 1; else if (*s == 'N') newpin = 1; } info = ends+1; } else if (info && *info == '|') log_debug ("pin_cb called without proper PIN info hack\n"); /* If we are not requesting a new PIN and we are not requesting an AdminPIN, compute a string to be used as the cacheID for gpg-agent. */ if (!newpin && !isadmin && parm) { cacheid = format_cacheid (parm->sn); } else if (newpin && parm) { /* Make really sure that it is not cached anymore. */ agent_clear_pin_cache (parm->sn); } again: if (is_status_enabled()) { if (parm && parm->sn && *parm->sn) { char *buf = xmalloc ( 10 + strlen (parm->sn) + 1); strcpy (stpcpy (buf, isadmin? "OPENPGP 3 ":"OPENPGP 1 "), parm->sn); write_status_text (STATUS_NEED_PASSPHRASE_PIN, buf); xfree (buf); } else write_status_text (STATUS_NEED_PASSPHRASE_PIN, isadmin? "OPENPGP 3" : "OPENPGP 1"); } value = ask_passphrase (info, again_text, newpin && isadmin? "passphrase.adminpin.new.ask" : newpin? "passphrase.pin.new.ask" : isadmin? "passphrase.adminpin.ask" : "passphrase.pin.ask", newpin && isadmin? _("Enter New Admin PIN: ") : newpin? _("Enter New PIN: ") : isadmin? _("Enter Admin PIN: ") : _("Enter PIN: "), cacheid, &canceled); xfree (cacheid); cacheid = NULL; again_text = NULL; if (!value && canceled) return G10ERR_CANCELED; else if (!value) return G10ERR_GENERAL; if (newpin) { char *value2; value2 = ask_passphrase (info, NULL, "passphrase.pin.repeat", _("Repeat this PIN: "), NULL, &canceled); if (!value2 && canceled) { xfree (value); return G10ERR_CANCELED; } else if (!value2) { xfree (value); return G10ERR_GENERAL; } if (strcmp (value, value2)) { again_text = N_("PIN not correctly repeated; try again"); xfree (value2); xfree (value); value = NULL; goto again; } xfree (value2); } *retstr = value; return 0; } /* Send a SETATTR command to the SCdaemon. */ int agent_scd_setattr (const char *name, const unsigned char *value, size_t valuelen, const char *serialno) { app_t app; int rc; struct pincb_parm_s parm; memset (&parm, 0, sizeof parm); parm.sn = serialno; app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); if (app->assuan_ctx) { char line[ASSUAN_LINELENGTH]; char *p; /* We assume that NAME does not need escaping. */ if (12 + strlen (name) > DIM(line)-1) return gpg_error (GPG_ERR_CARD); p = stpcpy (stpcpy (line, "SCD SETATTR "), name); *p++ = ' '; for (; valuelen; value++, valuelen--) { if (p >= line + DIM(line)-5 ) return gpg_error (GPG_ERR_CARD); if (*value < ' ' || *value == '+' || *value == '%') { sprintf (p, "%%%02X", *value); p += 3; } else if (*value == ' ') *p++ = '+'; else *p++ = *value; } *p = 0; rc = test_transact (assuan_transact (app->assuan_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL), "SCD SETATTR"); } else { rc = app->fnc.setattr (app, name, pin_cb, &parm, value, valuelen); } status_sc_op_failure (rc); return rc; } /* Handle a KEYDATA inquiry. Note, we only send the data, assuan_transact takes care of flushing and writing the end */ static assuan_error_t inq_writekey_parms (void *opaque, const char *keyword) { struct writekey_parm_s *parm = opaque; return assuan_send_data (parm->ctx, parm->keydata, parm->keydatalen); } /* Send a WRITEKEY command to the SCdaemon. */ int agent_scd_writekey (int keyno, const char *serialno, const unsigned char *keydata, size_t keydatalen) { app_t app; int rc; char line[ASSUAN_LINELENGTH]; struct pincb_parm_s parm; memset (&parm, 0, sizeof parm); parm.sn = serialno; app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); if (app->assuan_ctx) { struct writekey_parm_s parms; snprintf (line, DIM(line)-1, "SCD WRITEKEY --force OPENPGP.%d", keyno); line[DIM(line)-1] = 0; parms.ctx = app->assuan_ctx; parms.keydata = keydata; parms.keydatalen = keydatalen; rc = test_transact (assuan_transact (app->assuan_ctx, line, NULL, NULL, inq_writekey_parms, &parms, NULL, NULL), "SCD WRITEKEY"); } else { snprintf (line, DIM(line)-1, "OPENPGP.%d", keyno); line[DIM(line)-1] = 0; rc = app->fnc.writekey (app, NULL, line, 0x0001, pin_cb, &parm, keydata, keydatalen); } status_sc_op_failure (rc); return rc; } static assuan_error_t genkey_status_cb (void *opaque, const char *line) { struct agent_card_genkey_s *parm = opaque; const char *keyword = line; int keywordlen; /* log_debug ("got status line `%s'\n", line); */ for (keywordlen=0; *line && !spacep (line); line++, keywordlen++) ; while (spacep (line)) line++; if (keywordlen == 7 && !memcmp (keyword, "KEY-FPR", keywordlen)) { parm->fprvalid = unhexify_fpr (line, parm->fpr); } if (keywordlen == 8 && !memcmp (keyword, "KEY-DATA", keywordlen)) { MPI a; const char *name = line; char *buf; while (*line && !spacep (line)) line++; while (spacep (line)) line++; buf = xmalloc ( 2 + strlen (line) + 1); strcpy (stpcpy (buf, "0x"), line); a = mpi_alloc (300); if( mpi_fromstr (a, buf) ) log_error ("error parsing received key data\n"); else if (*name == 'n' && spacep (name+1)) parm->n = a; else if (*name == 'e' && spacep (name+1)) parm->e = a; else { log_info ("unknown parameter name in received key data\n"); mpi_free (a); } xfree (buf); } else if (keywordlen == 14 && !memcmp (keyword,"KEY-CREATED-AT", keywordlen)) { parm->created_at = (u32)strtoul (line, NULL, 10); } return 0; } /* Send a GENKEY command to the SCdaemon. */ int agent_scd_genkey (struct agent_card_genkey_s *info, int keyno, int force, const char *serialno, u32 *createtime) { app_t app; char line[ASSUAN_LINELENGTH]; struct ctrl_ctx_s ctrl; int rc; struct pincb_parm_s parm; memset (&parm, 0, sizeof parm); parm.sn = serialno; app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); memset (info, 0, sizeof *info); if (app->assuan_ctx) { snprintf (line, DIM(line)-1, "SCD GENKEY %s%d", force? "--force ":"", keyno); line[DIM(line)-1] = 0; rc = test_transact (assuan_transact (app->assuan_ctx, line, NULL, NULL, NULL, NULL, genkey_status_cb, info), "SCD GENKEY"); } else { snprintf (line, DIM(line)-1, "%d", keyno); ctrl.status_cb = genkey_status_cb; ctrl.status_cb_arg = info; rc = app->fnc.genkey (app, &ctrl, line, force? 1:0, *createtime, pin_cb, &parm); } status_sc_op_failure (rc); return rc; } static assuan_error_t membuf_data_cb (void *opaque, const void *buffer, size_t length) { membuf_t *data = opaque; if (buffer) put_membuf (data, buffer, length); return 0; } /* Send a PKSIGN command to the SCdaemon. */ int agent_scd_pksign (const char *serialno, int hashalgo, const unsigned char *indata, size_t indatalen, unsigned char **r_buf, size_t *r_buflen) { struct pincb_parm_s parm; app_t app; int rc; *r_buf = NULL; *r_buflen = 0; memset (&parm, 0, sizeof parm); parm.sn = serialno; retry: app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); if (app->assuan_ctx) { char *p, line[ASSUAN_LINELENGTH]; membuf_t data; size_t len; int i; if (indatalen*2 + 50 > DIM(line)) return gpg_error (GPG_ERR_GENERAL); p = stpcpy (line, "SCD SETDATA "); for (i=0; i < indatalen ; i++, p += 2 ) sprintf (p, "%02X", indata[i]); rc = test_transact (assuan_transact (app->assuan_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL), "SCD SETDATA"); if (!rc) { init_membuf (&data, 1024); snprintf (line, DIM(line)-1, "SCD PKSIGN %s%s", hashalgo == GCRY_MD_SHA1? "--hash=sha1 ": hashalgo == GCRY_MD_SHA224? "--hash=sha224 ": hashalgo == GCRY_MD_SHA256? "--hash=sha256 ": hashalgo == GCRY_MD_SHA384? "--hash=sha384 ": hashalgo == GCRY_MD_SHA512? "--hash=sha512 ": hashalgo == GCRY_MD_RMD160? "--hash=rmd160 ": hashalgo == GCRY_MD_MD5? "--hash=md5 " : "", serialno); line[DIM(line)-1] = 0; rc = test_transact (assuan_transact (app->assuan_ctx, line, membuf_data_cb, &data, NULL, NULL, NULL, NULL), "SCD PKSIGN"); if (rc) xfree (get_membuf (&data, &len)); else *r_buf = get_membuf (&data, r_buflen); } } else { /* Check that the card's serialnumber is as required.*/ rc = check_card_serialno (app, serialno); if (rc == -1) goto retry; if (!rc) rc = app->fnc.sign (app, serialno, hashalgo, pin_cb, &parm, indata, indatalen, r_buf, r_buflen); } if (rc) { status_sc_op_failure (rc); if (!app->assuan_ctx) agent_clear_pin_cache (serialno); } return rc; } /* Send a PKDECRYPT command to the SCdaemon. */ int agent_scd_pkdecrypt (const char *serialno, const unsigned char *indata, size_t indatalen, unsigned char **r_buf, size_t *r_buflen) { struct pincb_parm_s parm; app_t app; int rc; *r_buf = NULL; *r_buflen = 0; memset (&parm, 0, sizeof parm); parm.sn = serialno; retry: app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); if (app->assuan_ctx) { char *p, line[ASSUAN_LINELENGTH]; membuf_t data; size_t len; int i; if (indatalen*2 + 50 > DIM(line)) return gpg_error (GPG_ERR_GENERAL); p = stpcpy (line, "SCD SETDATA "); for (i=0; i < indatalen ; i++, p += 2 ) sprintf (p, "%02X", indata[i]); rc = test_transact (assuan_transact (app->assuan_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL), "SCD SETDATA"); if (!rc) { init_membuf (&data, 1024); snprintf (line, DIM(line)-1, "SCD PKDECRYPT %s", serialno); line[DIM(line)-1] = 0; rc = test_transact (assuan_transact (app->assuan_ctx, line, membuf_data_cb, &data, NULL, NULL, NULL, NULL), "SCD PKDECRYPT"); if (rc) xfree (get_membuf (&data, &len)); else *r_buf = get_membuf (&data, r_buflen); } } else { /* Check that the card's serialnumber is as required.*/ rc = check_card_serialno (app, serialno); if (rc == -1) goto retry; if (!rc) rc = app->fnc.decipher (app, serialno, pin_cb, &parm, indata, indatalen, r_buf, r_buflen); } if (rc) { status_sc_op_failure (rc); if (!app->assuan_ctx) agent_clear_pin_cache (serialno); } return rc; } /* Change the PIN of an OpenPGP card or reset the retry counter. SERIALNO may be NULL or a hex string finally passed to the passphrase callback. */ int agent_scd_change_pin (int chvno, const char *serialno) { app_t app; int reset = 0; int rc; struct pincb_parm_s parm; memset (&parm, 0, sizeof parm); parm.sn = serialno; reset = (chvno >= 100); chvno %= 100; app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); if (app->assuan_ctx) { char line[ASSUAN_LINELENGTH]; snprintf (line, DIM(line)-1, "SCD PASSWD%s %d", reset? " --reset":"", chvno); line[DIM(line)-1] = 0; rc = test_transact (assuan_transact (app->assuan_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL), "SCD PASSWD"); } else { char chvnostr[50]; sprintf (chvnostr, "%d", chvno); rc = app->fnc.change_pin (app, NULL, chvnostr, reset, pin_cb, &parm); } status_sc_op_failure (rc); return rc; } /* Perform a CHECKPIN operation. SERIALNO should be the serial number of the card - optionally followed by the fingerprint; however the fingerprint is ignored here. */ int agent_scd_checkpin (const char *serialnobuf) { app_t app; int rc; struct pincb_parm_s parm; memset (&parm, 0, sizeof parm); parm.sn = serialnobuf; app = current_app? current_app : open_card (); if (!app) return gpg_error (GPG_ERR_CARD); if (app->assuan_ctx) { char line[ASSUAN_LINELENGTH]; if (15 + strlen (serialnobuf) > DIM(line)-1) return gpg_error (GPG_ERR_CARD); stpcpy (stpcpy (line, "SCD CHECKPIN "), serialnobuf); rc = test_transact (assuan_transact (app->assuan_ctx, line, NULL, NULL, NULL, NULL, NULL, NULL), "SCD CHECKPIN"); } else { rc = app->fnc.check_pin (app, serialnobuf, pin_cb, &parm); } status_sc_op_failure (rc); return rc; } void agent_clear_pin_cache (const char *sn) { char *cacheid = format_cacheid (sn); if (cacheid) { passphrase_clear_cache (NULL, cacheid, 0); xfree (cacheid); } } int agent_scd_writecert (const char *certidstr, const unsigned char *certdata, size_t certdatalen) { /* It does not make sense to implement this rarely used and mainly interactive command in GPG-1. GPG-2 is better suited for this. */ not_in_gpg1_notice (); return gpg_error (GPG_ERR_NOT_SUPPORTED); } int agent_scd_readcert (const char *certidstr, void **r_buf, size_t *r_buflen) { /* It does not make sense to implement this rarely used and mainly interactive command in GPG-1. GPG-2 is better suited for this. */ *r_buf = NULL; not_in_gpg1_notice (); return gpg_error (GPG_ERR_NOT_SUPPORTED); } gnupg-1.4.20/g10/import.c0000644000175000017500000022077312635262326011726 00000000000000/* import.c - import a key into our key storage. * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, * 2006 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 3 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, see . */ #include #include #include #include #include #include #include "options.h" #include "packet.h" #include "errors.h" #include "keydb.h" #include "memory.h" #include "util.h" #include "trustdb.h" #include "main.h" #include "i18n.h" #include "ttyio.h" #include "status.h" #include "keyserver-internal.h" struct stats_s { ulong count; ulong no_user_id; ulong imported; ulong imported_rsa; ulong n_uids; ulong n_sigs; ulong n_subk; ulong unchanged; ulong n_revoc; ulong secret_read; ulong secret_imported; ulong secret_dups; ulong skipped_new_keys; ulong not_imported; ulong n_sigs_cleaned; ulong n_uids_cleaned; }; static int import( IOBUF inp, const char* fname,struct stats_s *stats, unsigned char **fpr,size_t *fpr_len,unsigned int options, import_filter_t filter, void *filter_arg, int *r_gpgkeys_err); static int read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root ); static void revocation_present(KBNODE keyblock); static int import_one(const char *fname, KBNODE keyblock,struct stats_s *stats, unsigned char **fpr,size_t *fpr_len, unsigned int options,int from_sk, import_filter_t filter, void *filter_arg); static int import_secret_one( const char *fname, KBNODE keyblock, struct stats_s *stats, unsigned int options, import_filter_t filter, void *filter_arg); static int import_revoke_cert( const char *fname, KBNODE node, struct stats_s *stats); static int chk_self_sigs( const char *fname, KBNODE keyblock, PKT_public_key *pk, u32 *keyid, int *non_self ); static int delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid, unsigned int options ); static int merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock, u32 *keyid, int *n_uids, int *n_sigs, int *n_subk ); static int append_uid( KBNODE keyblock, KBNODE node, int *n_sigs, const char *fname, u32 *keyid ); static int append_key( KBNODE keyblock, KBNODE node, int *n_sigs, const char *fname, u32 *keyid ); static int merge_sigs( KBNODE dst, KBNODE src, int *n_sigs, const char *fname, u32 *keyid ); static int merge_keysigs( KBNODE dst, KBNODE src, int *n_sigs, const char *fname, u32 *keyid ); int parse_import_options(char *str,unsigned int *options,int noisy) { struct parse_options import_opts[]= { {"import-local-sigs",IMPORT_LOCAL_SIGS,NULL, N_("import signatures that are marked as local-only")}, {"repair-pks-subkey-bug",IMPORT_REPAIR_PKS_SUBKEY_BUG,NULL, N_("repair damage from the pks keyserver during import")}, {"keep-ownertrust", IMPORT_KEEP_OWNERTTRUST, NULL, N_("do not clear the ownertrust values during import")}, {"fast-import",IMPORT_FAST,NULL, N_("do not update the trustdb after import")}, {"convert-sk-to-pk",IMPORT_SK2PK,NULL, N_("create a public key when importing a secret key")}, {"merge-only",IMPORT_MERGE_ONLY,NULL, N_("only accept updates to existing keys")}, {"import-clean",IMPORT_CLEAN,NULL, N_("remove unusable parts from key after import")}, {"import-minimal",IMPORT_MINIMAL|IMPORT_CLEAN,NULL, N_("remove as much as possible from key after import")}, /* Aliases for backward compatibility */ {"allow-local-sigs",IMPORT_LOCAL_SIGS,NULL,NULL}, {"repair-hkp-subkey-bug",IMPORT_REPAIR_PKS_SUBKEY_BUG,NULL,NULL}, /* dummy */ {"import-unusable-sigs",0,NULL,NULL}, {"import-clean-sigs",0,NULL,NULL}, {"import-clean-uids",0,NULL,NULL}, {NULL,0,NULL,NULL} }; return parse_options(str,options,import_opts,noisy); } void * import_new_stats_handle (void) { return xmalloc_clear ( sizeof (struct stats_s) ); } void import_release_stats_handle (void *p) { xfree (p); } /**************** * Import the public keys from the given filename. Input may be armored. * This function rejects all keys which are not validly self signed on at * least one userid. Only user ids which are self signed will be imported. * Other signatures are not checked. * * Actually this function does a merge. It works like this: * * - get the keyblock * - check self-signatures and remove all userids and their signatures * without/invalid self-signatures. * - reject the keyblock, if we have no valid userid. * - See whether we have this key already in one of our pubrings. * If not, simply add it to the default keyring. * - Compare the key and the self-signatures of the new and the one in * our keyring. If they are different something weird is going on; * ask what to do. * - See whether we have only non-self-signature on one user id; if not * ask the user what to do. * - compare the signatures: If we already have this signature, check * that they compare okay; if not, issue a warning and ask the user. * (consider looking at the timestamp and use the newest?) * - Simply add the signature. Can't verify here because we may not have * the signature's public key yet; verification is done when putting it * into the trustdb, which is done automagically as soon as this pubkey * is used. * - Proceed with next signature. * * Key revocation certificates have special handling. * */ static int import_keys_internal( IOBUF inp, char **fnames, int nnames, void *stats_handle, unsigned char **fpr, size_t *fpr_len, unsigned int options, import_filter_t filter, void *filter_arg, int *r_gpgkeys_err) { int i, rc = 0; struct stats_s *stats = stats_handle; if (!stats) stats = import_new_stats_handle (); if (inp) { rc = import (inp, "[stream]", stats, fpr, fpr_len, options, filter, filter_arg, r_gpgkeys_err); } else { int once = (!fnames && !nnames); for(i=0; once || i < nnames; once=0, i++ ) { const char *fname = fnames? fnames[i] : NULL; IOBUF inp2 = iobuf_open(fname); if( !fname ) fname = "[stdin]"; if (inp2 && is_secured_file (iobuf_get_fd (inp2))) { iobuf_close (inp2); inp2 = NULL; errno = EPERM; } if( !inp2 ) log_error(_("can't open `%s': %s\n"), fname, strerror(errno) ); else { rc = import (inp2, fname, stats, fpr, fpr_len, options, NULL, NULL, r_gpgkeys_err); iobuf_close(inp2); /* Must invalidate that ugly cache to actually close it. */ iobuf_ioctl (NULL, 2, 0, (char*)fname); if( rc ) log_error("import from `%s' failed: %s\n", fname, g10_errstr(rc) ); } } } if (!stats_handle) { import_print_stats (stats); import_release_stats_handle (stats); } /* If no fast import and the trustdb is dirty (i.e. we added a key or userID that had something other than a selfsig, a signature that was other than a selfsig, or any revocation), then update/check the trustdb if the user specified by setting interactive or by not setting no-auto-check-trustdb */ if(!(options&IMPORT_FAST)) trustdb_check_or_update(); return rc; } void import_keys( char **fnames, int nnames, void *stats_handle, unsigned int options ) { import_keys_internal (NULL, fnames, nnames, stats_handle, NULL, NULL, options, NULL, NULL, NULL); } /* Import keys from an open stream. */ int import_keys_stream( IOBUF inp, void *stats_handle, unsigned char **fpr, size_t *fpr_len,unsigned int options, import_filter_t filter, void *filter_arg, int *r_gpgkeys_err) { return import_keys_internal (inp, NULL, 0, stats_handle, fpr, fpr_len, options, filter, filter_arg, r_gpgkeys_err); } /* Note: If R_GPGKEYS_ERR is not NULL an error code from the keyserver helpers will be stored there. */ static int import (IOBUF inp, const char* fname,struct stats_s *stats, unsigned char **fpr, size_t *fpr_len, unsigned int options, import_filter_t filter, void *filter_arg, int *r_gpgkeys_err) { PACKET *pending_pkt = NULL; KBNODE keyblock = NULL; int rc = 0; armor_filter_context_t *afx = NULL; getkey_disable_caches(); if (!opt.no_armor || r_gpgkeys_err) { /* armored reading is not disabled or enforced. */ afx = new_armor_context (); afx->only_keyblocks = 1; push_armor_filter (afx, inp); } while( !(rc = read_block( inp, &pending_pkt, &keyblock) )) { if( keyblock->pkt->pkttype == PKT_PUBLIC_KEY ) rc = import_one (fname, keyblock, stats, fpr, fpr_len, options, 0, filter, filter_arg); else if( keyblock->pkt->pkttype == PKT_SECRET_KEY ) rc = import_secret_one (fname, keyblock, stats, options, filter, filter_arg); else if( keyblock->pkt->pkttype == PKT_SIGNATURE && keyblock->pkt->pkt.signature->sig_class == 0x20 ) rc = import_revoke_cert( fname, keyblock, stats ); else { log_info( _("skipping block of type %d\n"), keyblock->pkt->pkttype ); } release_kbnode(keyblock); /* fixme: we should increment the not imported counter but this does only make sense if we keep on going despite of errors. */ if( rc ) break; if( !(++stats->count % 100) && !opt.quiet ) log_info(_("%lu keys processed so far\n"), stats->count ); } if( rc == -1 ) rc = 0; else if( rc && rc != G10ERR_INV_KEYRING ) log_error( _("error reading `%s': %s\n"), fname, g10_errstr(rc)); if (afx && r_gpgkeys_err) *r_gpgkeys_err = afx->key_failed_code; release_armor_context (afx); return rc; } void import_print_stats (void *hd) { struct stats_s *stats = hd; if( !opt.quiet ) { log_info(_("Total number processed: %lu\n"), stats->count ); if( stats->skipped_new_keys ) log_info(_(" skipped new keys: %lu\n"), stats->skipped_new_keys ); if( stats->no_user_id ) log_info(_(" w/o user IDs: %lu\n"), stats->no_user_id ); if( stats->imported || stats->imported_rsa ) { log_info(_(" imported: %lu"), stats->imported ); if( stats->imported_rsa ) fprintf(stderr, " (RSA: %lu)", stats->imported_rsa ); putc('\n', stderr); } if( stats->unchanged ) log_info(_(" unchanged: %lu\n"), stats->unchanged ); if( stats->n_uids ) log_info(_(" new user IDs: %lu\n"), stats->n_uids ); if( stats->n_subk ) log_info(_(" new subkeys: %lu\n"), stats->n_subk ); if( stats->n_sigs ) log_info(_(" new signatures: %lu\n"), stats->n_sigs ); if( stats->n_revoc ) log_info(_(" new key revocations: %lu\n"), stats->n_revoc ); if( stats->secret_read ) log_info(_(" secret keys read: %lu\n"), stats->secret_read ); if( stats->secret_imported ) log_info(_(" secret keys imported: %lu\n"), stats->secret_imported ); if( stats->secret_dups ) log_info(_(" secret keys unchanged: %lu\n"), stats->secret_dups ); if( stats->not_imported ) log_info(_(" not imported: %lu\n"), stats->not_imported ); if( stats->n_sigs_cleaned) log_info(_(" signatures cleaned: %lu\n"),stats->n_sigs_cleaned); if( stats->n_uids_cleaned) log_info(_(" user IDs cleaned: %lu\n"),stats->n_uids_cleaned); } if( is_status_enabled() ) { char buf[14*20]; sprintf(buf, "%lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu", stats->count, stats->no_user_id, stats->imported, stats->imported_rsa, stats->unchanged, stats->n_uids, stats->n_subk, stats->n_sigs, stats->n_revoc, stats->secret_read, stats->secret_imported, stats->secret_dups, stats->skipped_new_keys, stats->not_imported ); write_status_text( STATUS_IMPORT_RES, buf ); } } /* Return true if PKTTYPE is valid in a keyblock. */ static int valid_keyblock_packet (int pkttype) { switch (pkttype) { case PKT_PUBLIC_KEY: case PKT_PUBLIC_SUBKEY: case PKT_SECRET_KEY: case PKT_SECRET_SUBKEY: case PKT_SIGNATURE: case PKT_USER_ID: case PKT_ATTRIBUTE: case PKT_RING_TRUST: return 1; default: return 0; } } /**************** * Read the next keyblock from stream A. * PENDING_PKT should be initialzed to NULL * and not chnaged form the caller. * Retunr: 0 = okay, -1 no more blocks or another errorcode. */ static int read_block( IOBUF a, PACKET **pending_pkt, KBNODE *ret_root ) { int rc; PACKET *pkt; KBNODE root = NULL; int in_cert; if( *pending_pkt ) { root = new_kbnode( *pending_pkt ); *pending_pkt = NULL; in_cert = 1; } else in_cert = 0; pkt = xmalloc( sizeof *pkt ); init_packet(pkt); while( (rc=parse_packet(a, pkt)) != -1 ) { if( rc ) { /* ignore errors */ if( rc != G10ERR_UNKNOWN_PACKET ) { log_error("read_block: read error: %s\n", g10_errstr(rc) ); rc = G10ERR_INV_KEYRING; goto ready; } free_packet( pkt ); init_packet(pkt); continue; } if( !root && pkt->pkttype == PKT_SIGNATURE && pkt->pkt.signature->sig_class == 0x20 ) { /* this is a revocation certificate which is handled * in a special way */ root = new_kbnode( pkt ); pkt = NULL; goto ready; } /* make a linked list of all packets */ switch( pkt->pkttype ) { case PKT_COMPRESSED: if(check_compress_algo(pkt->pkt.compressed->algorithm)) { rc = G10ERR_COMPR_ALGO; goto ready; } else { compress_filter_context_t *cfx = xmalloc_clear( sizeof *cfx ); pkt->pkt.compressed->buf = NULL; push_compress_filter2(a,cfx,pkt->pkt.compressed->algorithm,1); } free_packet( pkt ); init_packet(pkt); break; case PKT_RING_TRUST: /* skip those packets */ free_packet( pkt ); init_packet(pkt); break; case PKT_PUBLIC_KEY: case PKT_SECRET_KEY: if( in_cert ) { /* store this packet */ *pending_pkt = pkt; pkt = NULL; goto ready; } in_cert = 1; default: if (in_cert && valid_keyblock_packet (pkt->pkttype)) { if( !root ) root = new_kbnode( pkt ); else add_kbnode( root, new_kbnode( pkt ) ); pkt = xmalloc( sizeof *pkt ); } init_packet(pkt); break; } } ready: if( rc == -1 && root ) rc = 0; if( rc ) release_kbnode( root ); else *ret_root = root; free_packet( pkt ); xfree( pkt ); return rc; } /* Walk through the subkeys on a pk to find if we have the PKS disease: multiple subkeys with their binding sigs stripped, and the sig for the first subkey placed after the last subkey. That is, instead of "pk uid sig sub1 bind1 sub2 bind2 sub3 bind3" we have "pk uid sig sub1 sub2 sub3 bind1". We can't do anything about sub2 and sub3, as they are already lost, but we can try and rescue sub1 by reordering the keyblock so that it reads "pk uid sig sub1 bind1 sub2 sub3". Returns TRUE if the keyblock was modified. */ static int fix_pks_corruption(KBNODE keyblock) { int changed=0,keycount=0; KBNODE node,last=NULL,sknode=NULL; /* First determine if we have the problem at all. Look for 2 or more subkeys in a row, followed by a single binding sig. */ for(node=keyblock;node;last=node,node=node->next) { if(node->pkt->pkttype==PKT_PUBLIC_SUBKEY) { keycount++; if(!sknode) sknode=node; } else if(node->pkt->pkttype==PKT_SIGNATURE && node->pkt->pkt.signature->sig_class==0x18 && keycount>=2 && node->next==NULL) { /* We might have the problem, as this key has two subkeys in a row without any intervening packets. */ /* Sanity check */ if(last==NULL) break; /* Temporarily attach node to sknode. */ node->next=sknode->next; sknode->next=node; last->next=NULL; /* Note we aren't checking whether this binding sig is a selfsig. This is not necessary here as the subkey and binding sig will be rejected later if that is the case. */ if(check_key_signature(keyblock,node,NULL)) { /* Not a match, so undo the changes. */ sknode->next=node->next; last->next=node; node->next=NULL; break; } else { sknode->flag |= 1; /* Mark it good so we don't need to check it again */ changed=1; break; } } else keycount=0; } return changed; } /* Versions of GnuPG before 1.4.11 and 2.0.16 allowed to import bogus direct key signatures. A side effect of this was that a later import of the same good direct key signatures was not possible because the cmp_signature check in merge_blocks considered them equal. Although direct key signatures are now checked during import, there might still be bogus signatures sitting in a keyring. We need to detect and delete them before doing a merge. This fucntion returns the number of removed sigs. */ static int fix_bad_direct_key_sigs (KBNODE keyblock, u32 *keyid) { int rc; int count = 0; KBNODE node; for (node = keyblock->next; node; node=node->next) { if (node->pkt->pkttype == PKT_USER_ID) break; if (node->pkt->pkttype == PKT_SIGNATURE && IS_KEY_SIG (node->pkt->pkt.signature)) { rc = check_key_signature (keyblock, node, NULL); if (rc && rc != G10ERR_PUBKEY_ALGO ) { /* If we don't know the error, we can't decide; this is not a problem because cmp_signature can't compare the signature either. */ log_info ("key %s: invalid direct key signature removed\n", keystr (keyid)); delete_kbnode (node); count++; } } } return count; } static void print_import_ok (PKT_public_key *pk, PKT_secret_key *sk, unsigned int reason) { byte array[MAX_FINGERPRINT_LEN], *s; char buf[MAX_FINGERPRINT_LEN*2+30], *p; size_t i, n; sprintf (buf, "%u ", reason); p = buf + strlen (buf); if (pk) fingerprint_from_pk (pk, array, &n); else fingerprint_from_sk (sk, array, &n); s = array; for (i=0; i < n ; i++, s++, p += 2) sprintf (p, "%02X", *s); write_status_text (STATUS_IMPORT_OK, buf); } static void print_import_check (PKT_public_key * pk, PKT_user_id * id) { char * buf; byte fpr[24]; u32 keyid[2]; size_t i, pos = 0, n; buf = xmalloc (17+41+id->len+32); keyid_from_pk (pk, keyid); sprintf (buf, "%08X%08X ", keyid[0], keyid[1]); pos = 17; fingerprint_from_pk (pk, fpr, &n); for (i = 0; i < n; i++, pos += 2) sprintf (buf+pos, "%02X", fpr[i]); strcat (buf, " "); pos += 1; strcat (buf, id->name); write_status_text (STATUS_IMPORT_CHECK, buf); xfree (buf); } static void check_prefs_warning(PKT_public_key *pk) { log_info(_("WARNING: key %s contains preferences for unavailable\n"), keystr_from_pk(pk)); /* TRANSLATORS: This string is belongs to the previous one. They are only split up to allow printing of a common prefix. */ log_info(_(" algorithms on these user IDs:\n")); } static void check_prefs(KBNODE keyblock) { KBNODE node; PKT_public_key *pk; int problem=0; merge_keys_and_selfsig(keyblock); pk=keyblock->pkt->pkt.public_key; for(node=keyblock;node;node=node->next) { if(node->pkt->pkttype==PKT_USER_ID && node->pkt->pkt.user_id->created && node->pkt->pkt.user_id->prefs) { PKT_user_id *uid=node->pkt->pkt.user_id; prefitem_t *prefs=uid->prefs; char *user=utf8_to_native(uid->name,strlen(uid->name),0); for(;prefs->type;prefs++) { char num[10]; /* prefs->value is a byte, so we're over safe here */ sprintf(num,"%u",prefs->value); if(prefs->type==PREFTYPE_SYM) { if(check_cipher_algo(prefs->value)) { const char *algo=cipher_algo_to_string(prefs->value); if(!problem) check_prefs_warning(pk); log_info(_(" \"%s\": preference for cipher" " algorithm %s\n"),user,algo?algo:num); problem=1; } } else if(prefs->type==PREFTYPE_HASH) { if(check_digest_algo(prefs->value)) { const char *algo=digest_algo_to_string(prefs->value); if(!problem) check_prefs_warning(pk); log_info(_(" \"%s\": preference for digest" " algorithm %s\n"),user,algo?algo:num); problem=1; } } else if(prefs->type==PREFTYPE_ZIP) { if(check_compress_algo(prefs->value)) { const char *algo=compress_algo_to_string(prefs->value); if(!problem) check_prefs_warning(pk); log_info(_(" \"%s\": preference for compression" " algorithm %s\n"),user,algo?algo:num); problem=1; } } } xfree(user); } } if(problem) { log_info(_("it is strongly suggested that you update" " your preferences and\n")); log_info(_("re-distribute this key to avoid potential algorithm" " mismatch problems\n")); if(!opt.batch) { STRLIST sl=NULL,locusr=NULL; size_t fprlen=0; byte fpr[MAX_FINGERPRINT_LEN],*p; char username[(MAX_FINGERPRINT_LEN*2)+1]; unsigned int i; p=fingerprint_from_pk(pk,fpr,&fprlen); for(i=0;ipkt->pkt.public_key; keyid_from_pk( pk, keyid ); uidnode = find_next_kbnode( keyblock, PKT_USER_ID ); if( opt.verbose && !opt.interactive ) { log_info( "pub %4u%c/%s %s ", nbits_from_pk( pk ), pubkey_letter( pk->pubkey_algo ), keystr_from_pk(pk), datestr_from_pk(pk) ); if( uidnode ) print_utf8_string( stderr, uidnode->pkt->pkt.user_id->name, uidnode->pkt->pkt.user_id->len ); putc('\n', stderr); } if( !uidnode ) { log_error( _("key %s: no user ID\n"), keystr_from_pk(pk)); return 0; } if (filter && filter (keyblock, filter_arg)) { log_error (_("key %s: %s\n"), keystr_from_pk(pk), _("rejected by import filter")); return 0; } if (opt.interactive) { if(is_status_enabled()) print_import_check (pk, uidnode->pkt->pkt.user_id); merge_keys_and_selfsig (keyblock); tty_printf ("\n"); show_basic_key_info (keyblock); tty_printf ("\n"); if (!cpr_get_answer_is_yes ("import.okay", "Do you want to import this key? (y/N) ")) return 0; } collapse_uids(&keyblock); /* Clean the key that we're about to import, to cut down on things that we have to clean later. This has no practical impact on the end result, but does result in less logging which might confuse the user. */ if(options&IMPORT_CLEAN) clean_key(keyblock,opt.verbose,options&IMPORT_MINIMAL,NULL,NULL); clear_kbnode_flags( keyblock ); if((options&IMPORT_REPAIR_PKS_SUBKEY_BUG) && fix_pks_corruption(keyblock) && opt.verbose) log_info(_("key %s: PKS subkey corruption repaired\n"), keystr_from_pk(pk)); rc = chk_self_sigs( fname, keyblock , pk, keyid, &non_self ); if( rc ) return rc== -1? 0:rc; /* If we allow such a thing, mark unsigned uids as valid */ if( opt.allow_non_selfsigned_uid ) for( node=keyblock; node; node = node->next ) if( node->pkt->pkttype == PKT_USER_ID && !(node->flag & 1) ) { char *user=utf8_to_native(node->pkt->pkt.user_id->name, node->pkt->pkt.user_id->len,0); node->flag |= 1; log_info( _("key %s: accepted non self-signed user ID \"%s\"\n"), keystr_from_pk(pk),user); xfree(user); } if( !delete_inv_parts( fname, keyblock, keyid, options ) ) { log_error( _("key %s: no valid user IDs\n"), keystr_from_pk(pk)); if( !opt.quiet ) log_info(_("this may be caused by a missing self-signature\n")); stats->no_user_id++; return 0; } /* do we have this key already in one of our pubrings ? */ pk_orig = xmalloc_clear( sizeof *pk_orig ); rc = get_pubkey_fast ( pk_orig, keyid ); if( rc && rc != G10ERR_NO_PUBKEY && rc != G10ERR_UNU_PUBKEY ) { log_error( _("key %s: public key not found: %s\n"), keystr(keyid), g10_errstr(rc)); } else if ( rc && (opt.import_options&IMPORT_MERGE_ONLY) ) { if( opt.verbose ) log_info( _("key %s: new key - skipped\n"), keystr(keyid)); rc = 0; stats->skipped_new_keys++; } else if( rc ) { /* insert this key */ KEYDB_HANDLE hd = keydb_new (0); rc = keydb_locate_writable (hd, NULL); if (rc) { log_error (_("no writable keyring found: %s\n"), g10_errstr (rc)); keydb_release (hd); return G10ERR_GENERAL; } if( opt.verbose > 1 ) log_info (_("writing to `%s'\n"), keydb_get_resource_name (hd) ); rc = keydb_insert_keyblock (hd, keyblock ); if (rc) log_error (_("error writing keyring `%s': %s\n"), keydb_get_resource_name (hd), g10_errstr(rc)); else if (!(opt.import_options & IMPORT_KEEP_OWNERTTRUST)) { /* This should not be possible since we delete the ownertrust when a key is deleted, but it can happen if the keyring and trustdb are out of sync. It can also be made to happen with the trusted-key command and by importing and locally exported key. */ clear_ownertrusts (pk); if(non_self) revalidation_mark (); } keydb_release (hd); /* we are ready */ if( !opt.quiet ) { char *p=get_user_id_native (keyid); log_info( _("key %s: public key \"%s\" imported\n"), keystr(keyid),p); xfree(p); } if( is_status_enabled() ) { char *us = get_long_user_id_string( keyid ); write_status_text( STATUS_IMPORTED, us ); xfree(us); print_import_ok (pk,NULL, 1); } stats->imported++; if( is_RSA( pk->pubkey_algo ) ) stats->imported_rsa++; new_key = 1; } else { /* merge */ KEYDB_HANDLE hd; int n_uids, n_sigs, n_subk, n_sigs_cleaned, n_uids_cleaned; /* Compare the original against the new key; just to be sure nothing * weird is going on */ if( cmp_public_keys( pk_orig, pk ) ) { log_error( _("key %s: doesn't match our copy\n"),keystr(keyid)); goto leave; } /* now read the original keyblock */ hd = keydb_new (0); { byte afp[MAX_FINGERPRINT_LEN]; size_t an; fingerprint_from_pk (pk_orig, afp, &an); while (an < MAX_FINGERPRINT_LEN) afp[an++] = 0; rc = keydb_search_fpr (hd, afp); } if( rc ) { log_error (_("key %s: can't locate original keyblock: %s\n"), keystr(keyid), g10_errstr(rc)); keydb_release (hd); goto leave; } rc = keydb_get_keyblock (hd, &keyblock_orig ); if (rc) { log_error (_("key %s: can't read original keyblock: %s\n"), keystr(keyid), g10_errstr(rc)); keydb_release (hd); goto leave; } /* Make sure the original direct key sigs are all sane. */ n_sigs_cleaned = fix_bad_direct_key_sigs (keyblock_orig, keyid); if (n_sigs_cleaned) commit_kbnode (&keyblock_orig); /* and try to merge the block */ clear_kbnode_flags( keyblock_orig ); clear_kbnode_flags( keyblock ); n_uids = n_sigs = n_subk = n_uids_cleaned = 0; rc = merge_blocks( fname, keyblock_orig, keyblock, keyid, &n_uids, &n_sigs, &n_subk ); if( rc ) { keydb_release (hd); goto leave; } if(options&IMPORT_CLEAN) clean_key(keyblock_orig,opt.verbose,options&IMPORT_MINIMAL, &n_uids_cleaned,&n_sigs_cleaned); if( n_uids || n_sigs || n_subk || n_sigs_cleaned || n_uids_cleaned) { mod_key = 1; /* keyblock_orig has been updated; write */ rc = keydb_update_keyblock (hd, keyblock_orig); if (rc) log_error (_("error writing keyring `%s': %s\n"), keydb_get_resource_name (hd), g10_errstr(rc) ); else if(non_self) revalidation_mark (); /* we are ready */ if( !opt.quiet ) { char *p=get_user_id_native(keyid); if( n_uids == 1 ) log_info( _("key %s: \"%s\" 1 new user ID\n"), keystr(keyid),p); else if( n_uids ) log_info( _("key %s: \"%s\" %d new user IDs\n"), keystr(keyid),p,n_uids); if( n_sigs == 1 ) log_info( _("key %s: \"%s\" 1 new signature\n"), keystr(keyid), p); else if( n_sigs ) log_info( _("key %s: \"%s\" %d new signatures\n"), keystr(keyid), p, n_sigs ); if( n_subk == 1 ) log_info( _("key %s: \"%s\" 1 new subkey\n"), keystr(keyid), p); else if( n_subk ) log_info( _("key %s: \"%s\" %d new subkeys\n"), keystr(keyid), p, n_subk ); if(n_sigs_cleaned==1) log_info(_("key %s: \"%s\" %d signature cleaned\n"), keystr(keyid),p,n_sigs_cleaned); else if(n_sigs_cleaned) log_info(_("key %s: \"%s\" %d signatures cleaned\n"), keystr(keyid),p,n_sigs_cleaned); if(n_uids_cleaned==1) log_info(_("key %s: \"%s\" %d user ID cleaned\n"), keystr(keyid),p,n_uids_cleaned); else if(n_uids_cleaned) log_info(_("key %s: \"%s\" %d user IDs cleaned\n"), keystr(keyid),p,n_uids_cleaned); xfree(p); } stats->n_uids +=n_uids; stats->n_sigs +=n_sigs; stats->n_subk +=n_subk; stats->n_sigs_cleaned +=n_sigs_cleaned; stats->n_uids_cleaned +=n_uids_cleaned; if (is_status_enabled ()) print_import_ok (pk, NULL, ((n_uids?2:0)|(n_sigs?4:0)|(n_subk?8:0))); } else { if (is_status_enabled ()) print_import_ok (pk, NULL, 0); if( !opt.quiet ) { char *p=get_user_id_native(keyid); log_info( _("key %s: \"%s\" not changed\n"),keystr(keyid),p); xfree(p); } stats->unchanged++; } keydb_release (hd); hd = NULL; } leave: /* Now that the key is definitely incorporated into the keydb, we need to check if a designated revocation is present or if the prefs are not rational so we can warn the user. */ if(mod_key) { revocation_present(keyblock_orig); if(!from_sk && seckey_available(keyid)==0) check_prefs(keyblock_orig); } else if(new_key) { /* A little explanation for this: we fill in the fingerprint when importing keys as it can be useful to know the fingerprint in certain keyserver-related cases (a keyserver asked for a particular name, but the key doesn't have that name). However, in cases where we're importing more than one key at a time, we cannot know which key to fingerprint. In these cases, rather than guessing, we do not fingerpring at all, and we must hope the user ID on the keys are useful. */ if(fpr) { xfree(*fpr); if(stats->imported==1) *fpr=fingerprint_from_pk(pk,NULL,fpr_len); else *fpr=NULL; } revocation_present(keyblock); if(!from_sk && seckey_available(keyid)==0) check_prefs(keyblock); } release_kbnode( keyblock_orig ); free_public_key( pk_orig ); return rc; } /* Walk a secret keyblock and produce a public keyblock out of it. */ static KBNODE sec_to_pub_keyblock(KBNODE sec_keyblock) { KBNODE secnode,pub_keyblock=NULL,ctx=NULL; while((secnode=walk_kbnode(sec_keyblock,&ctx,0))) { KBNODE pubnode; if(secnode->pkt->pkttype==PKT_SECRET_KEY || secnode->pkt->pkttype==PKT_SECRET_SUBKEY) { /* Make a public key. We only need to convert enough to write the keyblock out. */ PKT_secret_key *sk=secnode->pkt->pkt.secret_key; PACKET *pkt=xmalloc_clear(sizeof(PACKET)); PKT_public_key *pk=xmalloc_clear(sizeof(PKT_public_key)); int n; if(secnode->pkt->pkttype==PKT_SECRET_KEY) pkt->pkttype=PKT_PUBLIC_KEY; else pkt->pkttype=PKT_PUBLIC_SUBKEY; pkt->pkt.public_key=pk; pk->version=sk->version; pk->timestamp=sk->timestamp; pk->expiredate=sk->expiredate; pk->pubkey_algo=sk->pubkey_algo; n=pubkey_get_npkey(pk->pubkey_algo); if(n==0) { /* we can't properly extract the pubkey without knowing the number of MPIs */ release_kbnode(pub_keyblock); return NULL; } else { int i; for(i=0;ipkey[i]=mpi_copy(sk->skey[i]); } pubnode=new_kbnode(pkt); } else { pubnode=clone_kbnode(secnode); } if(pub_keyblock==NULL) pub_keyblock=pubnode; else add_kbnode(pub_keyblock,pubnode); } return pub_keyblock; } /**************** * Ditto for secret keys. Handling is simpler than for public keys. * We allow secret key importing only when allow is true, this is so * that a secret key can not be imported accidently and thereby tampering * with the trust calculation. */ static int import_secret_one( const char *fname, KBNODE keyblock, struct stats_s *stats, unsigned int options, import_filter_t filter, void *filter_arg) { PKT_secret_key *sk; KBNODE node, uidnode; u32 keyid[2]; int rc = 0; /* get the key and print some info about it */ node = find_kbnode( keyblock, PKT_SECRET_KEY ); if( !node ) BUG(); sk = node->pkt->pkt.secret_key; keyid_from_sk( sk, keyid ); uidnode = find_next_kbnode( keyblock, PKT_USER_ID ); if (filter && filter (keyblock, filter_arg)) { log_error (_("secret key %s: %s\n"), keystr_from_sk(sk), _("rejected by import filter")); return 0; } if( opt.verbose ) { log_info( "sec %4u%c/%s %s ", nbits_from_sk( sk ), pubkey_letter( sk->pubkey_algo ), keystr_from_sk(sk), datestr_from_sk(sk) ); if( uidnode ) print_utf8_string( stderr, uidnode->pkt->pkt.user_id->name, uidnode->pkt->pkt.user_id->len ); putc('\n', stderr); } stats->secret_read++; if ((options & IMPORT_NO_SECKEY)) { log_error (_("importing secret keys not allowed\n")); return 0; } if( !uidnode ) { log_error( _("key %s: no user ID\n"), keystr_from_sk(sk)); return 0; } if(sk->protect.algo>110) { log_error(_("key %s: secret key with invalid cipher %d" " - skipped\n"),keystr_from_sk(sk),sk->protect.algo); return 0; } #ifdef ENABLE_SELINUX_HACKS if (1) { /* We don't allow to import secret keys because that may be used to put a secret key into the keyring and the user might later be tricked into signing stuff with that key. */ log_error (_("importing secret keys not allowed\n")); return 0; } #endif clear_kbnode_flags( keyblock ); /* do we have this key already in one of our secrings ? */ rc = seckey_available( keyid ); if( rc == G10ERR_NO_SECKEY && !(opt.import_options&IMPORT_MERGE_ONLY) ) { /* simply insert this key */ KEYDB_HANDLE hd = keydb_new (1); /* get default resource */ rc = keydb_locate_writable (hd, NULL); if (rc) { log_error (_("no default secret keyring: %s\n"), g10_errstr (rc)); keydb_release (hd); return G10ERR_GENERAL; } rc = keydb_insert_keyblock (hd, keyblock ); if (rc) log_error (_("error writing keyring `%s': %s\n"), keydb_get_resource_name (hd), g10_errstr(rc) ); keydb_release (hd); /* we are ready */ if( !opt.quiet ) log_info( _("key %s: secret key imported\n"), keystr_from_sk(sk)); stats->secret_imported++; if (is_status_enabled ()) print_import_ok (NULL, sk, 1|16); if(options&IMPORT_SK2PK) { /* Try and make a public key out of this. */ KBNODE pub_keyblock=sec_to_pub_keyblock(keyblock); if(pub_keyblock) { import_one (fname, pub_keyblock, stats, NULL, NULL, opt.import_options, 1, NULL, NULL); release_kbnode(pub_keyblock); } } /* Now that the key is definitely incorporated into the keydb, if we have the public part of this key, we need to check if the prefs are rational. */ node=get_pubkeyblock(keyid); if(node) { check_prefs(node); release_kbnode(node); } } else if( !rc ) { /* we can't merge secret keys */ log_error( _("key %s: already in secret keyring\n"), keystr_from_sk(sk)); stats->secret_dups++; if (is_status_enabled ()) print_import_ok (NULL, sk, 16); /* TODO: if we ever do merge secret keys, make sure to handle the sec_to_pub_keyblock feature as well. */ } else log_error( _("key %s: secret key not found: %s\n"), keystr_from_sk(sk), g10_errstr(rc)); return rc; } /**************** * Import a revocation certificate; this is a single signature packet. */ static int import_revoke_cert( const char *fname, KBNODE node, struct stats_s *stats ) { PKT_public_key *pk=NULL; KBNODE onode, keyblock = NULL; KEYDB_HANDLE hd = NULL; u32 keyid[2]; int rc = 0; assert( !node->next ); assert( node->pkt->pkttype == PKT_SIGNATURE ); assert( node->pkt->pkt.signature->sig_class == 0x20 ); keyid[0] = node->pkt->pkt.signature->keyid[0]; keyid[1] = node->pkt->pkt.signature->keyid[1]; pk = xmalloc_clear( sizeof *pk ); rc = get_pubkey( pk, keyid ); if( rc == G10ERR_NO_PUBKEY ) { log_error(_("key %s: no public key -" " can't apply revocation certificate\n"), keystr(keyid)); rc = 0; goto leave; } else if( rc ) { log_error(_("key %s: public key not found: %s\n"), keystr(keyid), g10_errstr(rc)); goto leave; } /* read the original keyblock */ hd = keydb_new (0); { byte afp[MAX_FINGERPRINT_LEN]; size_t an; fingerprint_from_pk (pk, afp, &an); while (an < MAX_FINGERPRINT_LEN) afp[an++] = 0; rc = keydb_search_fpr (hd, afp); } if (rc) { log_error (_("key %s: can't locate original keyblock: %s\n"), keystr(keyid), g10_errstr(rc)); goto leave; } rc = keydb_get_keyblock (hd, &keyblock ); if (rc) { log_error (_("key %s: can't read original keyblock: %s\n"), keystr(keyid), g10_errstr(rc)); goto leave; } /* it is okay, that node is not in keyblock because * check_key_signature works fine for sig_class 0x20 in this * special case. */ rc = check_key_signature( keyblock, node, NULL); if( rc ) { log_error( _("key %s: invalid revocation certificate" ": %s - rejected\n"), keystr(keyid), g10_errstr(rc)); goto leave; } /* check whether we already have this */ for(onode=keyblock->next; onode; onode=onode->next ) { if( onode->pkt->pkttype == PKT_USER_ID ) break; else if( onode->pkt->pkttype == PKT_SIGNATURE && !cmp_signatures(node->pkt->pkt.signature, onode->pkt->pkt.signature)) { rc = 0; goto leave; /* yes, we already know about it */ } } /* insert it */ insert_kbnode( keyblock, clone_kbnode(node), 0 ); /* and write the keyblock back */ rc = keydb_update_keyblock (hd, keyblock ); if (rc) log_error (_("error writing keyring `%s': %s\n"), keydb_get_resource_name (hd), g10_errstr(rc) ); keydb_release (hd); hd = NULL; /* we are ready */ if( !opt.quiet ) { char *p=get_user_id_native (keyid); log_info( _("key %s: \"%s\" revocation certificate imported\n"), keystr(keyid),p); xfree(p); } stats->n_revoc++; /* If the key we just revoked was ultimately trusted, remove its ultimate trust. This doesn't stop the user from putting the ultimate trust back, but is a reasonable solution for now. */ if(get_ownertrust(pk)==TRUST_ULTIMATE) clear_ownertrusts(pk); revalidation_mark (); leave: keydb_release (hd); release_kbnode( keyblock ); free_public_key( pk ); return rc; } /**************** * loop over the keyblock and check all self signatures. * Mark all user-ids with a self-signature by setting flag bit 0. * Mark all user-ids with an invalid self-signature by setting bit 1. * This works also for subkeys, here the subkey is marked. Invalid or * extra subkey sigs (binding or revocation) are marked for deletion. * non_self is set to true if there are any sigs other than self-sigs * in this keyblock. */ static int chk_self_sigs( const char *fname, KBNODE keyblock, PKT_public_key *pk, u32 *keyid, int *non_self ) { KBNODE n,knode=NULL; PKT_signature *sig; int rc; u32 bsdate=0,rsdate=0; KBNODE bsnode=NULL,rsnode=NULL; for( n=keyblock; (n = find_next_kbnode(n, 0)); ) { if(n->pkt->pkttype==PKT_PUBLIC_SUBKEY) { knode=n; bsdate=0; rsdate=0; bsnode=NULL; rsnode=NULL; continue; } else if( n->pkt->pkttype != PKT_SIGNATURE ) continue; sig = n->pkt->pkt.signature; if( keyid[0] == sig->keyid[0] && keyid[1] == sig->keyid[1] ) { /* This just caches the sigs for later use. That way we import a fully-cached key which speeds things up. */ if(!opt.no_sig_cache) check_key_signature(keyblock,n,NULL); if( IS_UID_SIG(sig) || IS_UID_REV(sig) ) { KBNODE unode = find_prev_kbnode( keyblock, n, PKT_USER_ID ); if( !unode ) { log_error( _("key %s: no user ID for signature\n"), keystr(keyid)); return -1; /* the complete keyblock is invalid */ } /* If it hasn't been marked valid yet, keep trying */ if(!(unode->flag&1)) { rc = check_key_signature( keyblock, n, NULL); if( rc ) { if( opt.verbose ) { char *p=utf8_to_native(unode->pkt->pkt.user_id->name, strlen(unode->pkt->pkt.user_id->name),0); log_info( rc == G10ERR_PUBKEY_ALGO ? _("key %s: unsupported public key " "algorithm on user ID \"%s\"\n"): _("key %s: invalid self-signature " "on user ID \"%s\"\n"), keystr(keyid),p); xfree(p); } } else unode->flag |= 1; /* mark that signature checked */ } } else if (IS_KEY_SIG (sig)) { rc = check_key_signature (keyblock, n, NULL); if ( rc ) { if (opt.verbose) log_info (rc == G10ERR_PUBKEY_ALGO ? _("key %s: unsupported public key algorithm\n"): _("key %s: invalid direct key signature\n"), keystr (keyid)); n->flag |= 4; } } else if( sig->sig_class == 0x18 ) { /* Note that this works based solely on the timestamps like the rest of gpg. If the standard gets revocation targets, this may need to be revised. */ if( !knode ) { if(opt.verbose) log_info( _("key %s: no subkey for key binding\n"), keystr(keyid)); n->flag |= 4; /* delete this */ } else { rc = check_key_signature( keyblock, n, NULL); if( rc ) { if(opt.verbose) log_info(rc == G10ERR_PUBKEY_ALGO ? _("key %s: unsupported public key" " algorithm\n"): _("key %s: invalid subkey binding\n"), keystr(keyid)); n->flag|=4; } else { /* It's valid, so is it newer? */ if(sig->timestamp>=bsdate) { knode->flag |= 1; /* the subkey is valid */ if(bsnode) { bsnode->flag|=4; /* Delete the last binding sig since this one is newer */ if(opt.verbose) log_info(_("key %s: removed multiple subkey" " binding\n"),keystr(keyid)); } bsnode=n; bsdate=sig->timestamp; } else n->flag|=4; /* older */ } } } else if( sig->sig_class == 0x28 ) { /* We don't actually mark the subkey as revoked right now, so just check that the revocation sig is the most recent valid one. Note that we don't care if the binding sig is newer than the revocation sig. See the comment in getkey.c:merge_selfsigs_subkey for more */ if( !knode ) { if(opt.verbose) log_info( _("key %s: no subkey for key revocation\n"), keystr(keyid)); n->flag |= 4; /* delete this */ } else { rc = check_key_signature( keyblock, n, NULL); if( rc ) { if(opt.verbose) log_info(rc == G10ERR_PUBKEY_ALGO ? _("key %s: unsupported public" " key algorithm\n"): _("key %s: invalid subkey revocation\n"), keystr(keyid)); n->flag|=4; } else { /* It's valid, so is it newer? */ if(sig->timestamp>=rsdate) { if(rsnode) { rsnode->flag|=4; /* Delete the last revocation sig since this one is newer */ if(opt.verbose) log_info(_("key %s: removed multiple subkey" " revocation\n"),keystr(keyid)); } rsnode=n; rsdate=sig->timestamp; } else n->flag|=4; /* older */ } } } } else *non_self=1; } return 0; } /**************** * delete all parts which are invalid and those signatures whose * public key algorithm is not available in this implemenation; * but consider RSA as valid, because parse/build_packets knows * about it. * returns: true if at least one valid user-id is left over. */ static int delete_inv_parts( const char *fname, KBNODE keyblock, u32 *keyid, unsigned int options) { KBNODE node; int nvalid=0, uid_seen=0, subkey_seen=0; for(node=keyblock->next; node; node = node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) { uid_seen = 1; if( (node->flag & 2) || !(node->flag & 1) ) { if( opt.verbose ) { char *p=utf8_to_native(node->pkt->pkt.user_id->name, node->pkt->pkt.user_id->len,0); log_info( _("key %s: skipped user ID \"%s\"\n"), keystr(keyid),p); xfree(p); } delete_kbnode( node ); /* the user-id */ /* and all following packets up to the next user-id */ while( node->next && node->next->pkt->pkttype != PKT_USER_ID && node->next->pkt->pkttype != PKT_PUBLIC_SUBKEY && node->next->pkt->pkttype != PKT_SECRET_SUBKEY ){ delete_kbnode( node->next ); node = node->next; } } else nvalid++; } else if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY || node->pkt->pkttype == PKT_SECRET_SUBKEY ) { if( (node->flag & 2) || !(node->flag & 1) ) { if( opt.verbose ) log_info( _("key %s: skipped subkey\n"),keystr(keyid)); delete_kbnode( node ); /* the subkey */ /* and all following signature packets */ while( node->next && node->next->pkt->pkttype == PKT_SIGNATURE ) { delete_kbnode( node->next ); node = node->next; } } else subkey_seen = 1; } else if( node->pkt->pkttype == PKT_SIGNATURE && check_pubkey_algo( node->pkt->pkt.signature->pubkey_algo) && node->pkt->pkt.signature->pubkey_algo != PUBKEY_ALGO_RSA ) delete_kbnode( node ); /* build_packet() can't handle this */ else if( node->pkt->pkttype == PKT_SIGNATURE && !node->pkt->pkt.signature->flags.exportable && !(options&IMPORT_LOCAL_SIGS) && seckey_available( node->pkt->pkt.signature->keyid ) ) { /* 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 */ if(opt.verbose) log_info( _("key %s: non exportable signature" " (class 0x%02X) - skipped\n"), keystr(keyid), node->pkt->pkt.signature->sig_class ); delete_kbnode( node ); } else if( node->pkt->pkttype == PKT_SIGNATURE && node->pkt->pkt.signature->sig_class == 0x20 ) { if( uid_seen ) { if(opt.verbose) log_info( _("key %s: revocation certificate" " at wrong place - skipped\n"),keystr(keyid)); delete_kbnode( node ); } else { /* If the revocation cert is from a different key than the one we're working on don't check it - it's probably from a revocation key and won't be verifiable with this key anyway. */ if(node->pkt->pkt.signature->keyid[0]==keyid[0] && node->pkt->pkt.signature->keyid[1]==keyid[1]) { int rc = check_key_signature( keyblock, node, NULL); if( rc ) { if(opt.verbose) log_info( _("key %s: invalid revocation" " certificate: %s - skipped\n"), keystr(keyid), g10_errstr(rc)); delete_kbnode( node ); } } } } else if( node->pkt->pkttype == PKT_SIGNATURE && (node->pkt->pkt.signature->sig_class == 0x18 || node->pkt->pkt.signature->sig_class == 0x28) && !subkey_seen ) { if(opt.verbose) log_info( _("key %s: subkey signature" " in wrong place - skipped\n"), keystr(keyid)); delete_kbnode( node ); } else if( node->pkt->pkttype == PKT_SIGNATURE && !IS_CERT(node->pkt->pkt.signature)) { if(opt.verbose) log_info(_("key %s: unexpected signature class (0x%02X) -" " skipped\n"),keystr(keyid), node->pkt->pkt.signature->sig_class); delete_kbnode(node); } else if( (node->flag & 4) ) /* marked for deletion */ delete_kbnode( node ); } /* note: because keyblock is the public key, it is never marked * for deletion and so keyblock cannot change */ commit_kbnode( &keyblock ); return nvalid; } /**************** * It may happen that the imported keyblock has duplicated user IDs. * We check this here and collapse those user IDs together with their * sigs into one. * Returns: True if the keyblock has changed. */ int collapse_uids( KBNODE *keyblock ) { KBNODE uid1; int any=0; for(uid1=*keyblock;uid1;uid1=uid1->next) { KBNODE uid2; if(is_deleted_kbnode(uid1)) continue; if(uid1->pkt->pkttype!=PKT_USER_ID) continue; for(uid2=uid1->next;uid2;uid2=uid2->next) { if(is_deleted_kbnode(uid2)) continue; if(uid2->pkt->pkttype!=PKT_USER_ID) continue; if(cmp_user_ids(uid1->pkt->pkt.user_id, uid2->pkt->pkt.user_id)==0) { /* We have a duplicated uid */ KBNODE sig1,last; any=1; /* Now take uid2's signatures, and attach them to uid1 */ for(last=uid2;last->next;last=last->next) { if(is_deleted_kbnode(last)) continue; if(last->next->pkt->pkttype==PKT_USER_ID || last->next->pkt->pkttype==PKT_PUBLIC_SUBKEY || last->next->pkt->pkttype==PKT_SECRET_SUBKEY) break; } /* Snip out uid2 */ (find_prev_kbnode(*keyblock,uid2,0))->next=last->next; /* Now put uid2 in place as part of uid1 */ last->next=uid1->next; uid1->next=uid2; delete_kbnode(uid2); /* Now dedupe uid1 */ for(sig1=uid1->next;sig1;sig1=sig1->next) { KBNODE sig2; if(is_deleted_kbnode(sig1)) continue; if(sig1->pkt->pkttype==PKT_USER_ID || sig1->pkt->pkttype==PKT_PUBLIC_SUBKEY || sig1->pkt->pkttype==PKT_SECRET_SUBKEY) break; if(sig1->pkt->pkttype!=PKT_SIGNATURE) continue; for(sig2=sig1->next,last=sig1;sig2;last=sig2,sig2=sig2->next) { if(is_deleted_kbnode(sig2)) continue; if(sig2->pkt->pkttype==PKT_USER_ID || sig2->pkt->pkttype==PKT_PUBLIC_SUBKEY || sig2->pkt->pkttype==PKT_SECRET_SUBKEY) break; if(sig2->pkt->pkttype!=PKT_SIGNATURE) continue; if(cmp_signatures(sig1->pkt->pkt.signature, sig2->pkt->pkt.signature)==0) { /* We have a match, so delete the second signature */ delete_kbnode(sig2); sig2=last; } } } } } } commit_kbnode(keyblock); if(any && !opt.quiet) { const char *key="???"; if( (uid1=find_kbnode( *keyblock, PKT_PUBLIC_KEY )) ) key=keystr_from_pk(uid1->pkt->pkt.public_key); else if( (uid1 = find_kbnode( *keyblock, PKT_SECRET_KEY )) ) key=keystr_from_sk(uid1->pkt->pkt.secret_key); log_info(_("key %s: duplicated user ID detected - merged\n"),key); } return any; } /* Check for a 0x20 revocation from a revocation key that is not present. This may be called without the benefit of merge_xxxx so you can't rely on pk->revkey and friends. */ static void revocation_present(KBNODE keyblock) { KBNODE onode,inode; PKT_public_key *pk=keyblock->pkt->pkt.public_key; for(onode=keyblock->next;onode;onode=onode->next) { /* If we reach user IDs, we're done. */ if(onode->pkt->pkttype==PKT_USER_ID) break; if(onode->pkt->pkttype==PKT_SIGNATURE && onode->pkt->pkt.signature->sig_class==0x1F && onode->pkt->pkt.signature->revkey) { int idx; PKT_signature *sig=onode->pkt->pkt.signature; for(idx=0;idxnumrevkeys;idx++) { u32 keyid[2]; keyid_from_fingerprint(sig->revkey[idx]->fpr, MAX_FINGERPRINT_LEN,keyid); for(inode=keyblock->next;inode;inode=inode->next) { /* If we reach user IDs, we're done. */ if(inode->pkt->pkttype==PKT_USER_ID) break; if(inode->pkt->pkttype==PKT_SIGNATURE && inode->pkt->pkt.signature->sig_class==0x20 && inode->pkt->pkt.signature->keyid[0]==keyid[0] && inode->pkt->pkt.signature->keyid[1]==keyid[1]) { /* Okay, we have a revocation key, and a revocation issued by it. Do we have the key itself? */ int rc; rc=get_pubkey_byfprint_fast (NULL,sig->revkey[idx]->fpr, MAX_FINGERPRINT_LEN); if(rc==G10ERR_NO_PUBKEY || rc==G10ERR_UNU_PUBKEY) { char *tempkeystr=xstrdup(keystr_from_pk(pk)); /* No, so try and get it */ if(opt.keyserver && (opt.keyserver_options.options & KEYSERVER_AUTO_KEY_RETRIEVE)) { log_info(_("WARNING: key %s may be revoked:" " fetching revocation key %s\n"), tempkeystr,keystr(keyid)); keyserver_import_fprint(sig->revkey[idx]->fpr, MAX_FINGERPRINT_LEN, opt.keyserver); /* Do we have it now? */ rc=get_pubkey_byfprint_fast (NULL, sig->revkey[idx]->fpr, MAX_FINGERPRINT_LEN); } if(rc==G10ERR_NO_PUBKEY || rc==G10ERR_UNU_PUBKEY) log_info(_("WARNING: key %s may be revoked:" " revocation key %s not present.\n"), tempkeystr,keystr(keyid)); xfree(tempkeystr); } } } } } } } /**************** * compare and merge the blocks * * o compare the signatures: If we already have this signature, check * that they compare okay; if not, issue a warning and ask the user. * o Simply add the signature. Can't verify here because we may not have * the signature's public key yet; verification is done when putting it * into the trustdb, which is done automagically as soon as this pubkey * is used. * Note: We indicate newly inserted packets with flag bit 0 */ static int merge_blocks( const char *fname, KBNODE keyblock_orig, KBNODE keyblock, u32 *keyid, int *n_uids, int *n_sigs, int *n_subk ) { KBNODE onode, node; int rc, found; /* 1st: handle revocation certificates */ for(node=keyblock->next; node; node=node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) break; else if( node->pkt->pkttype == PKT_SIGNATURE && node->pkt->pkt.signature->sig_class == 0x20 ) { /* check whether we already have this */ found = 0; for(onode=keyblock_orig->next; onode; onode=onode->next ) { if( onode->pkt->pkttype == PKT_USER_ID ) break; else if( onode->pkt->pkttype == PKT_SIGNATURE && onode->pkt->pkt.signature->sig_class == 0x20 && !cmp_signatures(onode->pkt->pkt.signature, node->pkt->pkt.signature)) { found = 1; break; } } if( !found ) { KBNODE n2 = clone_kbnode(node); insert_kbnode( keyblock_orig, n2, 0 ); n2->flag |= 1; ++*n_sigs; if(!opt.quiet) { char *p=get_user_id_native (keyid); log_info(_("key %s: \"%s\" revocation" " certificate added\n"), keystr(keyid),p); xfree(p); } } } } /* 2nd: merge in any direct key (0x1F) sigs */ for(node=keyblock->next; node; node=node->next ) { if( node->pkt->pkttype == PKT_USER_ID ) break; else if( node->pkt->pkttype == PKT_SIGNATURE && node->pkt->pkt.signature->sig_class == 0x1F ) { /* check whether we already have this */ found = 0; for(onode=keyblock_orig->next; onode; onode=onode->next ) { if( onode->pkt->pkttype == PKT_USER_ID ) break; else if( onode->pkt->pkttype == PKT_SIGNATURE && onode->pkt->pkt.signature->sig_class == 0x1F && !cmp_signatures(onode->pkt->pkt.signature, node->pkt->pkt.signature)) { found = 1; break; } } if( !found ) { KBNODE n2 = clone_kbnode(node); insert_kbnode( keyblock_orig, n2, 0 ); n2->flag |= 1; ++*n_sigs; if(!opt.quiet) log_info( _("key %s: direct key signature added\n"), keystr(keyid)); } } } /* 3rd: try to merge new certificates in */ for(onode=keyblock_orig->next; onode; onode=onode->next ) { if( !(onode->flag & 1) && onode->pkt->pkttype == PKT_USER_ID) { /* find the user id in the imported keyblock */ for(node=keyblock->next; node; node=node->next ) if( node->pkt->pkttype == PKT_USER_ID && !cmp_user_ids( onode->pkt->pkt.user_id, node->pkt->pkt.user_id ) ) break; if( node ) { /* found: merge */ rc = merge_sigs( onode, node, n_sigs, fname, keyid ); if( rc ) return rc; } } } /* 4th: add new user-ids */ for(node=keyblock->next; node; node=node->next ) { if( node->pkt->pkttype == PKT_USER_ID) { /* do we have this in the original keyblock */ for(onode=keyblock_orig->next; onode; onode=onode->next ) if( onode->pkt->pkttype == PKT_USER_ID && !cmp_user_ids( onode->pkt->pkt.user_id, node->pkt->pkt.user_id ) ) break; if( !onode ) { /* this is a new user id: append */ rc = append_uid( keyblock_orig, node, n_sigs, fname, keyid); if( rc ) return rc; ++*n_uids; } } } /* 5th: add new subkeys */ for(node=keyblock->next; node; node=node->next ) { onode = NULL; if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY ) { /* do we have this in the original keyblock? */ for(onode=keyblock_orig->next; onode; onode=onode->next ) if( onode->pkt->pkttype == PKT_PUBLIC_SUBKEY && !cmp_public_keys( onode->pkt->pkt.public_key, node->pkt->pkt.public_key ) ) break; if( !onode ) { /* this is a new subkey: append */ rc = append_key( keyblock_orig, node, n_sigs, fname, keyid); if( rc ) return rc; ++*n_subk; } } else if( node->pkt->pkttype == PKT_SECRET_SUBKEY ) { /* do we have this in the original keyblock? */ for(onode=keyblock_orig->next; onode; onode=onode->next ) if( onode->pkt->pkttype == PKT_SECRET_SUBKEY && !cmp_secret_keys( onode->pkt->pkt.secret_key, node->pkt->pkt.secret_key ) ) break; if( !onode ) { /* this is a new subkey: append */ rc = append_key( keyblock_orig, node, n_sigs, fname, keyid); if( rc ) return rc; ++*n_subk; } } } /* 6th: merge subkey certificates */ for(onode=keyblock_orig->next; onode; onode=onode->next ) { if( !(onode->flag & 1) && ( onode->pkt->pkttype == PKT_PUBLIC_SUBKEY || onode->pkt->pkttype == PKT_SECRET_SUBKEY) ) { /* find the subkey in the imported keyblock */ for(node=keyblock->next; node; node=node->next ) { if( node->pkt->pkttype == PKT_PUBLIC_SUBKEY && !cmp_public_keys( onode->pkt->pkt.public_key, node->pkt->pkt.public_key ) ) break; else if( node->pkt->pkttype == PKT_SECRET_SUBKEY && !cmp_secret_keys( onode->pkt->pkt.secret_key, node->pkt->pkt.secret_key ) ) break; } if( node ) { /* found: merge */ rc = merge_keysigs( onode, node, n_sigs, fname, keyid ); if( rc ) return rc; } } } return 0; } /**************** * append the userid starting with NODE and all signatures to KEYBLOCK. */ static int append_uid( KBNODE keyblock, KBNODE node, int *n_sigs, const char *fname, u32 *keyid ) { KBNODE n, n_where=NULL; assert(node->pkt->pkttype == PKT_USER_ID ); /* find the position */ for( n = keyblock; n; n_where = n, n = n->next ) { if( n->pkt->pkttype == PKT_PUBLIC_SUBKEY || n->pkt->pkttype == PKT_SECRET_SUBKEY ) break; } if( !n ) n_where = NULL; /* and append/insert */ while( node ) { /* we add a clone to the original keyblock, because this * one is released first */ n = clone_kbnode(node); if( n_where ) { insert_kbnode( n_where, n, 0 ); n_where = n; } else add_kbnode( keyblock, n ); n->flag |= 1; node->flag |= 1; if( n->pkt->pkttype == PKT_SIGNATURE ) ++*n_sigs; node = node->next; if( node && node->pkt->pkttype != PKT_SIGNATURE ) break; } return 0; } /**************** * Merge the sigs from SRC onto DST. SRC and DST are both a PKT_USER_ID. * (how should we handle comment packets here?) */ static int merge_sigs( KBNODE dst, KBNODE src, int *n_sigs, const char *fname, u32 *keyid ) { KBNODE n, n2; int found=0; assert(dst->pkt->pkttype == PKT_USER_ID ); assert(src->pkt->pkttype == PKT_USER_ID ); for(n=src->next; n && n->pkt->pkttype != PKT_USER_ID; n = n->next ) { if( n->pkt->pkttype != PKT_SIGNATURE ) continue; if( n->pkt->pkt.signature->sig_class == 0x18 || n->pkt->pkt.signature->sig_class == 0x28 ) continue; /* skip signatures which are only valid on subkeys */ found = 0; for(n2=dst->next; n2 && n2->pkt->pkttype != PKT_USER_ID; n2 = n2->next) if(!cmp_signatures(n->pkt->pkt.signature,n2->pkt->pkt.signature)) { found++; break; } if( !found ) { /* This signature is new or newer, append N to DST. * We add a clone to the original keyblock, because this * one is released first */ n2 = clone_kbnode(n); insert_kbnode( dst, n2, PKT_SIGNATURE ); n2->flag |= 1; n->flag |= 1; ++*n_sigs; } } return 0; } /**************** * Merge the sigs from SRC onto DST. SRC and DST are both a PKT_xxx_SUBKEY. */ static int merge_keysigs( KBNODE dst, KBNODE src, int *n_sigs, const char *fname, u32 *keyid ) { KBNODE n, n2; int found=0; assert( dst->pkt->pkttype == PKT_PUBLIC_SUBKEY || dst->pkt->pkttype == PKT_SECRET_SUBKEY ); for(n=src->next; n ; n = n->next ) { if( n->pkt->pkttype == PKT_PUBLIC_SUBKEY || n->pkt->pkttype == PKT_PUBLIC_KEY ) break; if( n->pkt->pkttype != PKT_SIGNATURE ) continue; found = 0; for(n2=dst->next; n2; n2 = n2->next){ if( n2->pkt->pkttype == PKT_PUBLIC_SUBKEY || n2->pkt->pkttype == PKT_PUBLIC_KEY ) break; if( n2->pkt->pkttype == PKT_SIGNATURE && n->pkt->pkt.signature->keyid[0] == n2->pkt->pkt.signature->keyid[0] && n->pkt->pkt.signature->keyid[1] == n2->pkt->pkt.signature->keyid[1] && n->pkt->pkt.signature->timestamp <= n2->pkt->pkt.signature->timestamp && n->pkt->pkt.signature->sig_class == n2->pkt->pkt.signature->sig_class ) { found++; break; } } if( !found ) { /* This signature is new or newer, append N to DST. * We add a clone to the original keyblock, because this * one is released first */ n2 = clone_kbnode(n); insert_kbnode( dst, n2, PKT_SIGNATURE ); n2->flag |= 1; n->flag |= 1; ++*n_sigs; } } return 0; } /**************** * append the subkey starting with NODE and all signatures to KEYBLOCK. * Mark all new and copied packets by setting flag bit 0. */ static int append_key( KBNODE keyblock, KBNODE node, int *n_sigs, const char *fname, u32 *keyid ) { KBNODE n; assert( node->pkt->pkttype == PKT_PUBLIC_SUBKEY || node->pkt->pkttype == PKT_SECRET_SUBKEY ); while( node ) { /* we add a clone to the original keyblock, because this * one is released first */ n = clone_kbnode(node); add_kbnode( keyblock, n ); n->flag |= 1; node->flag |= 1; if( n->pkt->pkttype == PKT_SIGNATURE ) ++*n_sigs; node = node->next; if( node && node->pkt->pkttype != PKT_SIGNATURE ) break; } return 0; } /* Walk a public keyblock and produce a secret keyblock out of it. Instead of inserting the secret key parameters (which we don't have), we insert a stub. */ static KBNODE pub_to_sec_keyblock (KBNODE pub_keyblock) { KBNODE pubnode, secnode; KBNODE sec_keyblock = NULL; KBNODE walkctx = NULL; while((pubnode = walk_kbnode (pub_keyblock,&walkctx,0))) { if (pubnode->pkt->pkttype == PKT_PUBLIC_KEY || pubnode->pkt->pkttype == PKT_PUBLIC_SUBKEY) { /* Make a secret key. We only need to convert enough to write the keyblock out. */ PKT_public_key *pk = pubnode->pkt->pkt.public_key; PACKET *pkt = xmalloc_clear (sizeof *pkt); PKT_secret_key *sk = xmalloc_clear (sizeof *sk); int i, n; if (pubnode->pkt->pkttype == PKT_PUBLIC_KEY) pkt->pkttype = PKT_SECRET_KEY; else pkt->pkttype = PKT_SECRET_SUBKEY; pkt->pkt.secret_key = sk; copy_public_parts_to_secret_key ( pk, sk ); sk->version = pk->version; sk->timestamp = pk->timestamp; n = pubkey_get_npkey (pk->pubkey_algo); if (!n) n = 1; /* Unknown number of parameters, however the data is stored in the first mpi. */ for (i=0; i < n; i++ ) sk->skey[i] = mpi_copy (pk->pkey[i]); sk->is_protected = 1; sk->protect.s2k.mode = 1001; secnode = new_kbnode (pkt); } else { secnode = clone_kbnode (pubnode); } if(!sec_keyblock) sec_keyblock = secnode; else add_kbnode (sec_keyblock, secnode); } return sec_keyblock; } /* Walk over the secret keyring SEC_KEYBLOCK and update any simple stub keys with the serial number SNNUM of the card if one of the fingerprints FPR1, FPR2 or FPR3 match. Print a note if the key is a duplicate (may happen in case of backed uped keys). Returns: True if anything changed. */ static int update_sec_keyblock_with_cardinfo (KBNODE sec_keyblock, const unsigned char *fpr1, const unsigned char *fpr2, const unsigned char *fpr3, const char *serialnostr) { KBNODE node; KBNODE walkctx = NULL; PKT_secret_key *sk; byte array[MAX_FINGERPRINT_LEN]; size_t n; int result = 0; const char *s; while((node = walk_kbnode (sec_keyblock, &walkctx, 0))) { if (node->pkt->pkttype != PKT_SECRET_KEY && node->pkt->pkttype != PKT_SECRET_SUBKEY) continue; sk = node->pkt->pkt.secret_key; fingerprint_from_sk (sk, array, &n); if (n != 20) continue; /* Can't be a card key. */ if ( !((fpr1 && !memcmp (array, fpr1, 20)) || (fpr2 && !memcmp (array, fpr2, 20)) || (fpr3 && !memcmp (array, fpr3, 20))) ) continue; /* No match. */ if (sk->is_protected == 1 && sk->protect.s2k.mode == 1001) { /* Standard case: migrate that stub to a key stub. */ sk->protect.s2k.mode = 1002; s = serialnostr; for (sk->protect.ivlen=0; sk->protect.ivlen < 16 && *s && s[1]; sk->protect.ivlen++, s += 2) sk->protect.iv[sk->protect.ivlen] = xtoi_2 (s); result = 1; } else if (sk->is_protected == 1 && sk->protect.s2k.mode == 1002) { s = serialnostr; for (sk->protect.ivlen=0; sk->protect.ivlen < 16 && *s && s[1]; sk->protect.ivlen++, s += 2) if (sk->protect.iv[sk->protect.ivlen] != xtoi_2 (s)) { log_info (_("NOTE: a key's S/N does not " "match the card's one\n")); break; } } else { if (node->pkt->pkttype != PKT_SECRET_KEY) log_info (_("NOTE: primary key is online and stored on card\n")); else log_info (_("NOTE: secondary key is online and stored on card\n")); } } return result; } /* Check whether a secret key stub exists for the public key PK. If not create such a stub key and store it into the secring. If it exists, add appropriate subkey stubs and update the secring. Return 0 if the key could be created. */ int auto_create_card_key_stub ( const char *serialnostr, const unsigned char *fpr1, const unsigned char *fpr2, const unsigned char *fpr3) { KBNODE pub_keyblock; KBNODE sec_keyblock; KEYDB_HANDLE hd; int rc; /* We only want to do this for an OpenPGP card. */ if (!serialnostr || strncmp (serialnostr, "D27600012401", 12) || strlen (serialnostr) != 32 ) return G10ERR_GENERAL; /* First get the public keyring from any of the provided fingerprints. */ if ( (fpr1 && !get_keyblock_byfprint (&pub_keyblock, fpr1, 20)) || (fpr2 && !get_keyblock_byfprint (&pub_keyblock, fpr2, 20)) || (fpr3 && !get_keyblock_byfprint (&pub_keyblock, fpr3, 20))) ; else return G10ERR_GENERAL; hd = keydb_new (1); /* Now check whether there is a secret keyring. */ { PKT_public_key *pk = pub_keyblock->pkt->pkt.public_key; byte afp[MAX_FINGERPRINT_LEN]; size_t an; fingerprint_from_pk (pk, afp, &an); if (an < MAX_FINGERPRINT_LEN) memset (afp+an, 0, MAX_FINGERPRINT_LEN-an); rc = keydb_search_fpr (hd, afp); } if (!rc) { rc = keydb_get_keyblock (hd, &sec_keyblock); if (rc) { log_error (_("error reading keyblock: %s\n"), g10_errstr(rc) ); rc = G10ERR_GENERAL; } else { merge_keys_and_selfsig (sec_keyblock); /* FIXME: We need to add new subkeys first. */ if (update_sec_keyblock_with_cardinfo (sec_keyblock, fpr1, fpr2, fpr3, serialnostr)) { rc = keydb_update_keyblock (hd, sec_keyblock ); if (rc) log_error (_("error writing keyring `%s': %s\n"), keydb_get_resource_name (hd), g10_errstr(rc) ); } } } else /* A secret key does not exists - create it. */ { sec_keyblock = pub_to_sec_keyblock (pub_keyblock); update_sec_keyblock_with_cardinfo (sec_keyblock, fpr1, fpr2, fpr3, serialnostr); rc = keydb_locate_writable (hd, NULL); if (rc) { log_error (_("no default secret keyring: %s\n"), g10_errstr (rc)); rc = G10ERR_GENERAL; } else { rc = keydb_insert_keyblock (hd, sec_keyblock ); if (rc) log_error (_("error writing keyring `%s': %s\n"), keydb_get_resource_name (hd), g10_errstr(rc) ); } } release_kbnode (sec_keyblock); release_kbnode (pub_keyblock); keydb_release (hd); return rc; } gnupg-1.4.20/config.h.in0000644000175000017500000010540312635263126011673 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ #ifndef GNUPG_CONFIG_H_INCLUDED #define GNUPG_CONFIG_H_INCLUDED /* Defined if the host has big endian byte ordering */ #undef BIG_ENDIAN_HOST /* an Apple OSXism */ #undef BIND_8_COMPAT /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* define to disable keyserver helpers */ #undef DISABLE_KEYSERVER_HELPERS /* define to disable exec-path for keyserver helpers */ #undef DISABLE_KEYSERVER_PATH /* define to disable photo viewing */ #undef DISABLE_PHOTO_VIEWER /* Define to disable regular expression support */ #undef DISABLE_REGEX /* Define if you don't want the default EGD socket name. For details see cipher/rndegd.c */ #undef EGD_SOCKET_NAME /* Define to include gpg-agent support */ #undef ENABLE_AGENT_SUPPORT /* Define to include OpenPGP card support */ #undef ENABLE_CARD_SUPPORT /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to enable SELinux support */ #undef ENABLE_SELINUX_HACKS /* The executable file extension, if any */ #undef EXEEXT /* if set, restrict photo-viewer to this */ #undef FIXED_PHOTO_VIEWER /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `argz_count' function. */ #undef HAVE_ARGZ_COUNT /* Define to 1 if you have the header file. */ #undef HAVE_ARGZ_H /* Define to 1 if you have the `argz_next' function. */ #undef HAVE_ARGZ_NEXT /* Define to 1 if you have the `argz_stringify' function. */ #undef HAVE_ARGZ_STRINGIFY /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF /* Define to 1 if you have the `atexit' function. */ #undef HAVE_ATEXIT /* Define if `gethrtime(2)' does not work correctly i.e. issues a SIGILL. */ #undef HAVE_BROKEN_GETHRTIME /* Defined if the mlock() call does not work */ #undef HAVE_BROKEN_MLOCK /* Define to 1 if the compiler understands __builtin_expect. */ #undef HAVE_BUILTIN_EXPECT /* Defined if a `byte' is typedef'd */ #undef HAVE_BYTE_TYPEDEF /* Defined if the bz2 compression library is available */ #undef HAVE_BZIP2 /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME /* Define to 1 if you have the `ctermid' function. */ #undef HAVE_CTERMID /* Define to 1 if you have the `curl_easy_escape' function. */ #undef HAVE_CURL_EASY_ESCAPE /* Define to 1 if you have the `curl_easy_unescape' function. */ #undef HAVE_CURL_EASY_UNESCAPE /* Define to 1 if you have the `curl_free' function. */ #undef HAVE_CURL_FREE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FEOF_UNLOCKED /* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETS_UNLOCKED /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of `getpagesize', and to 0 if you don't. */ #undef HAVE_DECL_GETPAGESIZE /* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you don't. */ #undef HAVE_DECL_SYS_SIGLIST /* Define to 1 if you have the declaration of `_snprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNPRINTF /* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNWPRINTF /* defined if the system supports a random device */ #undef HAVE_DEV_RANDOM /* Define to 1 if you have the header file. */ #undef HAVE_DIRECT_H /* Defined when the dlopen function family is available */ #undef HAVE_DL_DLOPEN /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ #undef HAVE_DOPRNT /* defined if we run on some of the PCDOS like systems (DOS, Windoze. OS/2) with special properties like no file modes */ #undef HAVE_DOSISH_SYSTEM /* defined if we must run on a stupid file system */ #undef HAVE_DRIVE_LETTERS /* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL /* Define to 1 if you have the header file. */ #undef HAVE_FEATURES_H /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ #undef HAVE_FSEEKO /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define to 1 if you have the `fwprintf' function. */ #undef HAVE_FWPRINTF /* Define to 1 if you have the `getaddrinfo' function. */ #undef HAVE_GETADDRINFO /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getegid' function. */ #undef HAVE_GETEGID /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getgid' function. */ #undef HAVE_GETGID /* Define if you have the `gethrtime(2)' function. */ #undef HAVE_GETHRTIME /* Define to 1 if you have the header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `getpwnam' function. */ #undef HAVE_GETPWNAM /* Define to 1 if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the `getuid' function. */ #undef HAVE_GETUID /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the `inet_ntop' function. */ #undef HAVE_INET_NTOP /* Define to 1 if the system has the type `intmax_t'. */ #undef HAVE_INTMAX_T /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define to 1 if you have the `isascii' function. */ #undef HAVE_ISASCII /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define to 1 if you have the header file. */ #undef HAVE_LANGINFO_H /* Define if you have and nl_langinfo(THOUSANDS_SEP). */ #undef HAVE_LANGINFO_THOUSANDS_SEP /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* Define to 1 if you have the `ldap_get_option' function. */ #undef HAVE_LDAP_GET_OPTION /* Define if the LDAP library supports ld_errno */ #undef HAVE_LDAP_LD_ERRNO /* Define to 1 if you have the `ldap_set_option' function. */ #undef HAVE_LDAP_SET_OPTION /* Define to 1 if you have the `ldap_start_tls_s' function. */ #undef HAVE_LDAP_START_TLS_S /* Define to 1 if you have the `ldap_start_tls_sA' function. */ #undef HAVE_LDAP_START_TLS_SA /* Define to 1 if you have a functional curl library. */ #undef HAVE_LIBCURL /* Define to 1 if you have a fully functional readline library. */ #undef HAVE_LIBREADLINE /* Define to 1 if you have the `rt' library (-lrt). */ #undef HAVE_LIBRT /* Define to 1 if you have a fully functional libusb library. */ #undef HAVE_LIBUSB /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if the system has the type `long double'. */ #undef HAVE_LONG_DOUBLE /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the `mbrtowc' function. */ #undef HAVE_MBRTOWC /* Define to 1 if you have the `memmove' function. */ #undef HAVE_MEMMOVE /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have the `memrchr' function. */ #undef HAVE_MEMRCHR /* Define to 1 if you have the `mkdtemp' function. */ #undef HAVE_MKDTEMP /* Defined if the system supports an mlock() call */ #undef HAVE_MLOCK /* Define to 1 if you have the `mmap' function. */ #undef HAVE_MMAP /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define to 1 if you have the `newlocale' function. */ #undef HAVE_NEWLOCALE /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE /* Define to 1 if you have the `plock' function. */ #undef HAVE_PLOCK /* Define if your printf() function supports format strings with positions. */ #undef HAVE_POSIX_PRINTF /* Define if the defines PTHREAD_MUTEX_RECURSIVE. */ #undef HAVE_PTHREAD_MUTEX_RECURSIVE /* Define if the POSIX multithreading library has read/write locks. */ #undef HAVE_PTHREAD_RWLOCK /* Define to 1 if the system has the type `ptrdiff_t'. */ #undef HAVE_PTRDIFF_T /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if you have the header file. */ #undef HAVE_PWD_H /* Define to 1 if you have the `raise' function. */ #undef HAVE_RAISE /* Define to 1 if you have the `rand' function. */ #undef HAVE_RAND /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the header file. */ #undef HAVE_SIGNAL_H /* Define to 1 if you have the `sigprocmask' function. */ #undef HAVE_SIGPROCMASK /* Define to 1 if the system has the type `sigset_t'. */ #undef HAVE_SIGSET_T /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the `stat' function. */ #undef HAVE_STAT /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror' function. */ #undef HAVE_STRERROR /* Define to 1 if you have the `strftime' function. */ #undef HAVE_STRFTIME /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strlwr' function. */ #undef HAVE_STRLWR /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strnlen' function. */ #undef HAVE_STRNLEN /* Define to 1 if you have the `strsep' function. */ #undef HAVE_STRSEP /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if the system has the type `struct sigaction'. */ #undef HAVE_STRUCT_SIGACTION /* Define to 1 if you have the `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the `sysconf' function. */ #undef HAVE_SYSCONF /* Define to 1 if you have the header file. */ #undef HAVE_SYS_CAPABILITY_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IPC_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SHM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `tcgetattr' function. */ #undef HAVE_TCGETATTR /* Define to 1 if you have the header file. */ #undef HAVE_TERMIO_H /* Define to 1 if you have the `timegm' function. */ #undef HAVE_TIMEGM /* Define to 1 if you have the `times' function. */ #undef HAVE_TIMES /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Defined if a `u16' is typedef'd */ #undef HAVE_U16_TYPEDEF /* Defined if a `u32' is typedef'd */ #undef HAVE_U32_TYPEDEF /* Define to 1 if the system has the type `uintmax_t'. */ #undef HAVE_UINTMAX_T /* Defined if a `ulong' is typedef'd */ #undef HAVE_ULONG_TYPEDEF /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `unsetenv' function. */ #undef HAVE_UNSETENV /* Define to 1 if the system has the type `unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Defined if time_t is an unsigned type */ #undef HAVE_UNSIGNED_TIME_T /* Define to 1 if you have the `usb_get_busses' function. */ #undef HAVE_USB_GET_BUSSES /* Define to 1 if you have the `uselocale' function. */ #undef HAVE_USELOCALE /* Defined if a `ushort' is typedef'd */ #undef HAVE_USHORT_TYPEDEF /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 if you have the header file. */ #undef HAVE_VFORK_H /* Define to 1 or 0, depending whether the compiler supports simple visibility declarations. */ #undef HAVE_VISIBILITY /* Define to 1 if you have the `vprintf' function. */ #undef HAVE_VPRINTF /* Defined if we run on a W32 API based system */ #undef HAVE_W32_SYSTEM /* Define to 1 if you have the `wait4' function. */ #undef HAVE_WAIT4 /* Define to 1 if you have the `waitpid' function. */ #undef HAVE_WAITPID /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the `wcrtomb' function. */ #undef HAVE_WCRTOMB /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define to 1 if you have the `wcsnlen' function. */ #undef HAVE_WCSNLEN /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if `fork' works. */ #undef HAVE_WORKING_FORK /* Define to 1 if O_NOATIME works. */ #undef HAVE_WORKING_O_NOATIME /* Define to 1 if O_NOFOLLOW works. */ #undef HAVE_WORKING_O_NOFOLLOW /* Define to 1 if `vfork' works. */ #undef HAVE_WORKING_VFORK /* Define to 1 if you have the `__fsetlocking' function. */ #undef HAVE___FSETLOCKING /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define if integer division by zero raises signal SIGFPE. */ #undef INTDIV0_RAISES_SIGFPE /* Defined if a SysV shared memory supports the LOCK flag */ #undef IPC_HAVE_SHM_LOCK /* Defined if we can do a deferred shm release */ #undef IPC_RMID_DEFERRED_RELEASE /* Defined if this is not a regular release */ #undef IS_DEVELOPMENT_VERSION /* Defined if libcurl supports AsynchDNS */ #undef LIBCURL_FEATURE_ASYNCHDNS /* Defined if libcurl supports IDN */ #undef LIBCURL_FEATURE_IDN /* Defined if libcurl supports IPv6 */ #undef LIBCURL_FEATURE_IPV6 /* Defined if libcurl supports KRB4 */ #undef LIBCURL_FEATURE_KRB4 /* Defined if libcurl supports libz */ #undef LIBCURL_FEATURE_LIBZ /* Defined if libcurl supports NTLM */ #undef LIBCURL_FEATURE_NTLM /* Defined if libcurl supports SSL */ #undef LIBCURL_FEATURE_SSL /* Defined if libcurl supports SSPI */ #undef LIBCURL_FEATURE_SSPI /* Defined if libcurl supports DICT */ #undef LIBCURL_PROTOCOL_DICT /* Defined if libcurl supports FILE */ #undef LIBCURL_PROTOCOL_FILE /* Defined if libcurl supports FTP */ #undef LIBCURL_PROTOCOL_FTP /* Defined if libcurl supports FTPS */ #undef LIBCURL_PROTOCOL_FTPS /* Defined if libcurl supports HTTP */ #undef LIBCURL_PROTOCOL_HTTP /* Defined if libcurl supports HTTPS */ #undef LIBCURL_PROTOCOL_HTTPS /* Defined if libcurl supports LDAP */ #undef LIBCURL_PROTOCOL_LDAP /* Defined if libcurl supports TELNET */ #undef LIBCURL_PROTOCOL_TELNET /* Defined if libcurl supports TFTP */ #undef LIBCURL_PROTOCOL_TFTP /* The version of the libcurl library in packed hex form */ #undef LIBCURL_VERNUM /* Defined if the host has little endian byte ordering */ #undef LITTLE_ENDIAN_HOST /* Defined if mkdir() does not take permission flags */ #undef MKDIR_TAKES_ONE_ARG /* defined to the name of the strong random device */ #undef NAME_OF_DEV_RANDOM /* defined to the name of the weaker random device */ #undef NAME_OF_DEV_URANDOM /* Define if the LDAP library requires including lber.h before ldap.h */ #undef NEED_LBER_H /* Define to disable all external program execution */ #undef NO_EXEC /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Size of the key and UID caches */ #undef PK_UID_CACHE_SIZE /* A human readable text with the name of the OS */ #undef PRINTABLE_OS_NAME /* Define if exists and defines unusable PRI* macros. */ #undef PRI_MACROS_BROKEN /* Define if the pthread_in_use() detection is hard. */ #undef PTHREAD_IN_USE_DETECTION_HARD /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Size of secure memory buffer */ #undef SECMEM_BUFFER_SIZE /* The size of `time_t', as computed by sizeof. */ #undef SIZEOF_TIME_T /* The size of `uint64_t', as computed by sizeof. */ #undef SIZEOF_UINT64_T /* The size of `unsigned int', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_INT /* The size of `unsigned long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG /* The size of `unsigned long long', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_LONG_LONG /* The size of `unsigned short', as computed by sizeof. */ #undef SIZEOF_UNSIGNED_SHORT /* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P /* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define to include the AES, AES192, and AES256 ciphers */ #undef USE_AES /* Allow to select random modules at runtime. */ #undef USE_ALL_RANDOM_MODULES /* Define to include the BLOWFISH cipher */ #undef USE_BLOWFISH /* Define to include the CAMELLIA cipher */ #undef USE_CAMELLIA /* define if capabilities should be used */ #undef USE_CAPABILITIES /* Define to include the CAST5 cipher */ #undef USE_CAST5 /* define to use DNS CERT */ #undef USE_DNS_CERT /* define to use DNS SRV */ #undef USE_DNS_SRV /* Define to enable the use of extensions */ #undef USE_DYNAMIC_LINKING /* Define to use the new iconv based code */ #undef USE_GNUPG_ICONV /* Define to include the IDEA cipher */ #undef USE_IDEA /* Define if you want to use the included regex lib */ #undef USE_INTERNAL_REGEX /* set this to limit filenames to the 8.3 format */ #undef USE_ONLY_8DOT3 /* Define if the POSIX multithreading library can be used. */ #undef USE_POSIX_THREADS /* Define if references to the POSIX multithreading library should be made weak. */ #undef USE_POSIX_THREADS_WEAK /* Define if the GNU Pth multithreading library can be used. */ #undef USE_PTH_THREADS /* Define if references to the GNU Pth multithreading library should be made weak. */ #undef USE_PTH_THREADS_WEAK /* Defined if the EGD based RNG should be used. */ #undef USE_RNDEGD /* Defined if the /dev/random based RNG should be used. */ #undef USE_RNDLINUX /* Defined if the default Unix RNG should be used. */ #undef USE_RNDUNIX /* Defined if the Windows specific RNG should be used. */ #undef USE_RNDW32 /* Define to include the RSA public key algorithm */ #undef USE_RSA /* Define to include the SHA-224 and SHA-256 digests */ #undef USE_SHA256 /* Define to include the SHA-384 and SHA-512 digests */ #undef USE_SHA512 /* define if the shared memory interface should be made available */ #undef USE_SHM_COPROCESSING /* because the Unix gettext has too much overhead on MingW32 systems and these systems lack Posix functions, we use a simplified version of gettext */ #undef USE_SIMPLE_GETTEXT /* Define if the old Solaris multithreading library can be used. */ #undef USE_SOLARIS_THREADS /* Define if references to the old Solaris multithreading library should be made weak. */ #undef USE_SOLARIS_THREADS_WEAK /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Define to include the TWOFISH cipher */ #undef USE_TWOFISH /* Define if the native Windows multithreading API can be used. */ #undef USE_WINDOWS_THREADS /* Version number of package */ #undef VERSION /* Defined if compiled symbols have a leading underscore */ #undef WITH_SYMBOL_UNDERSCORE /* Enable large inode numbers on Mac OS X 10.5. */ #ifndef _DARWIN_USE_64_BIT_INODE # define _DARWIN_USE_64_BIT_INODE 1 #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ #undef _LARGEFILE_SOURCE /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions. This bug is known to occur on: OS X 10.8 and earlier; see: http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log FreeBSD; see: http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif /* Suppress GCC's bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see . */ # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #ifndef _GL_UNUSED # if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) # else # define _GL_UNUSED # endif #endif /* The __pure__ attribute was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to the widest signed integer type if and do not define. */ #undef intmax_t /* Define to `int' if does not define. */ #undef mode_t /* Define to `int' if does not define. */ #undef pid_t /* Define as the type of the result of subtracting two pointers, if the system doesn't define it. */ #undef ptrdiff_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to the widest unsigned integer type if and do not define. */ #undef uintmax_t /* Define as `fork' if `vfork' does not work. */ #undef vfork /* Define to empty if the keyword `volatile' does not work. Warning: valid code using `volatile' can become incorrect without. Disable with care. */ #undef volatile /* We didn't define endianness above, so get it from OS macros. This is intended for making fat binary builds on OS X. */ #if !defined(BIG_ENDIAN_HOST) && !defined(LITTLE_ENDIAN_HOST) # if defined(__BIG_ENDIAN__) # define BIG_ENDIAN_HOST 1 # elif defined(__LITTLE_ENDIAN__) # define LITTLE_ENDIAN_HOST 1 # else # error "No endianness found" # endif #endif #if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID)) # define EXEC_TEMPFILE_ONLY #endif /* A macro to help checking the GCC version. */ #ifdef __GNUC__ # define GNUPG_GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) #endif /*__GNUC__*/ /* Please note that the string version must not contain more than one character because the using code assumes strlen()==1 */ #ifdef HAVE_DOSISH_SYSTEM # define DIRSEP_C '\\' # define EXTSEP_C '.' # define DIRSEP_S "\\" # define EXTSEP_S "." # define PATHSEP_C ';' # define PATHSEP_S ";" #else # define DIRSEP_C '/' # define EXTSEP_C '.' # define DIRSEP_S "/" # define EXTSEP_S "." # define PATHSEP_C ':' # define PATHSEP_S ":" #endif #ifdef __VMS # define GNUPG_BAK_SFX "_bak" # define GNUPG_TMP_SFX "_tmp" #else /*!def __VMS */ # define GNUPG_BAK_SFX "~" # define GNUPG_TMP_SFX EXTSEP_S "tmp" #endif /* def __VMS [else] */ /* For some OSes we need to use fixed strings for certain directories. */ #ifdef HAVE_DRIVE_LETTERS # define LOCALEDIR "c:\\\\lib\\\\gnupg\\\\locale" # define GNUPG_LIBDIR "c:\\\\lib\\\\gnupg" # define GNUPG_LIBEXECDIR "c:\\\\lib\\\\gnupg" # define GNUPG_DATADIR "c:\\\\lib\\\\gnupg" # define GNUPG_HOMEDIR "c:\\\\gnupg" #else # ifdef __VMS # define GNUPG_DATADIR "/SYS$MANAGER/gnupg_share" # define GNUPG_HOMEDIR "/SYS$LOGIN/gnupg" # define GNUPG_LIBDIR "/SYS$MANAGER/gnupg_share" # define GNUPG_LIBEXECDIR "" # else # define GNUPG_HOMEDIR "~/.gnupg" # endif #endif /* Hack used for W32: ldap.m4 also tests for the ASCII version of ldap_start_tls_s because that is the actual symbol used in the library. winldap.h redefines it to our commonly used value, thus we define our usual macro here. */ #ifdef HAVE_LDAP_START_TLS_SA # ifndef HAVE_LDAP_START_TLS_S # define HAVE_LDAP_START_TLS_S 1 # endif #endif /* This is the major version number of GnuPG so that source included files can test for this. */ #define GNUPG_MAJOR_VERSION 1 /* This is the same as VERSION, but should be overridden if the platform cannot handle things like dots'.' in filenames. Set SAFE_VERSION_DOT and SAFE_VERSION_DASH to whatever SAFE_VERSION uses for dots and dashes. */ #define SAFE_VERSION VERSION #define SAFE_VERSION_DOT '.' #define SAFE_VERSION_DASH '-' /* We want to use our memory allocator for estream-printf. */ #define _ESTREAM_PRINTF_MALLOC xtrymalloc #define _ESTREAM_PRINTF_FREE xfree #define _ESTREAM_PRINTF_EXTRA_INCLUDE "memory.h" #endif /*GNUPG_CONFIG_H_INCLUDED*/ #ifdef HAVE_LIBCURL /* Define curl_free() via free() if our version of curl lacks curl_free() */ #if !defined(curl_free) && !defined(HAVE_CURL_FREE) #define curl_free(a) free((a)) #endif /* Define curl_easy_escape() via curl_escape() if our version of curl lacks curl_easy_escape() */ #if !defined(curl_easy_escape) && !defined(HAVE_CURL_EASY_ESCAPE) #define curl_easy_escape(a,b,c) curl_escape((b),(c)) #endif /* Define curl_easy_unescape() via curl_unescape() if our version of curl lacks curl_easy_unescape() */ #if !defined(curl_easy_unescape) && !defined(HAVE_CURL_EASY_UNESCAPE) #define curl_easy_unescape(a,b,c) curl_unescape((b),(c)) #endif #endif /* HAVE_LIBCURL */ #define __libc_lock_t gl_lock_t #define __libc_lock_define gl_lock_define #define __libc_lock_define_initialized gl_lock_define_initialized #define __libc_lock_init gl_lock_init #define __libc_lock_lock gl_lock_lock #define __libc_lock_unlock gl_lock_unlock #define __libc_lock_recursive_t gl_recursive_lock_t #define __libc_lock_define_recursive gl_recursive_lock_define #define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized #define __libc_lock_init_recursive gl_recursive_lock_init #define __libc_lock_lock_recursive gl_recursive_lock_lock #define __libc_lock_unlock_recursive gl_recursive_lock_unlock #define glthread_in_use libintl_thread_in_use #define glthread_lock_init_func libintl_lock_init_func #define glthread_lock_lock_func libintl_lock_lock_func #define glthread_lock_unlock_func libintl_lock_unlock_func #define glthread_lock_destroy_func libintl_lock_destroy_func #define glthread_rwlock_init_multithreaded libintl_rwlock_init_multithreaded #define glthread_rwlock_init_func libintl_rwlock_init_func #define glthread_rwlock_rdlock_multithreaded libintl_rwlock_rdlock_multithreaded #define glthread_rwlock_rdlock_func libintl_rwlock_rdlock_func #define glthread_rwlock_wrlock_multithreaded libintl_rwlock_wrlock_multithreaded #define glthread_rwlock_wrlock_func libintl_rwlock_wrlock_func #define glthread_rwlock_unlock_multithreaded libintl_rwlock_unlock_multithreaded #define glthread_rwlock_unlock_func libintl_rwlock_unlock_func #define glthread_rwlock_destroy_multithreaded libintl_rwlock_destroy_multithreaded #define glthread_rwlock_destroy_func libintl_rwlock_destroy_func #define glthread_recursive_lock_init_multithreaded libintl_recursive_lock_init_multithreaded #define glthread_recursive_lock_init_func libintl_recursive_lock_init_func #define glthread_recursive_lock_lock_multithreaded libintl_recursive_lock_lock_multithreaded #define glthread_recursive_lock_lock_func libintl_recursive_lock_lock_func #define glthread_recursive_lock_unlock_multithreaded libintl_recursive_lock_unlock_multithreaded #define glthread_recursive_lock_unlock_func libintl_recursive_lock_unlock_func #define glthread_recursive_lock_destroy_multithreaded libintl_recursive_lock_destroy_multithreaded #define glthread_recursive_lock_destroy_func libintl_recursive_lock_destroy_func #define glthread_once_func libintl_once_func #define glthread_once_singlethreaded libintl_once_singlethreaded #define glthread_once_multithreaded libintl_once_multithreaded gnupg-1.4.20/ABOUT-NLS0000644000175000017500000026713312635216116011105 000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. gnupg-1.4.20/README0000644000175000017500000010010312635277061010523 00000000000000 GnuPG - The GNU Privacy Guard ------------------------------- Version 1.4.20 Copyright 1998-2015 Free Software Foundation, Inc. Copyright 1997-2015 Werner Koch This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. Intro ----- GnuPG is GNU's tool for secure communication and data storage. It can be used to encrypt data and to create digital signatures. It includes an advanced key management facility and is compliant with the proposed OpenPGP Internet standard as described in RFC4880. GnuPG works best on GNU/Linux or *BSD systems. Most other Unices are also supported but are not as well tested as the Free Unices. See https://gnupg.org/download/supported_systems.html for a list of systems which are known to work. GnuPG is distributed under the terms of the GNU General Public License. See the files AUTHORS and COPYING for copyright and warranty information. Because GnuPG does not use any patented algorithms it used not to be fully compatible with PGP 2. Now, that the patent on the IDEA cipher algorithm has expired, we support that algorithm and thus provide full compatibility with PGP 2. This allows the decryption of data once encrypted using PGP 2. The default public key algorithm is RSA, but DSA and Elgamal are also supported. Symmetric algorithms available are AES (with 128, 192, and 256 bit keys), 3DES, Blowfish, CAST5 and Twofish. Digest algorithms available are MD5, RIPEMD/160, SHA-1, SHA-256, SHA-384, and SHA-512. Compression algorithms available are ZIP, ZLIB, and BZIP2 (with libbz2 installed). Installation ------------ Please read the file INSTALL and the sections in this file related to the installation. Here is a quick summary: 1) Check that you have unmodified sources. See below on how to do this. Don't skip it - this is an important step! 2) Unpack the tarball. With GNU tar you can do it this way: "tar xzvf gnupg-x.y.z.tar.gz". If you got a bzip2 compressed tarball you need to use: "tar xjvf gnupg-x.y.z.tar.bz2". 3) "cd gnupg-x.y.z" 4) "./configure" 5) "make" 6) "make install" 7) You end up with a "gpg" binary in /usr/local/bin. 8) To avoid swapping out of sensitive data, you may need to install "gpg" setuid root. If you don't do so, you may want to add the option "no-secmem-warning" to ~/.gnupg/gpg.conf. Note that on modern GNU/Linux systems swapping protection does not anymore require GPG to be installed setuid root. How to Verify the Source ------------------------ In order to check that the version of GnuPG which you are going to install is an original and unmodified one, you can do it in one of the following ways: a) If you already have a trusted Version of GnuPG installed, you can simply check the supplied signature: $ gpg --verify gnupg-x.y.z.tar.gz.sig This checks that the detached signature gnupg-x.y.z.tar.gz.sig is indeed a signature of gnupg-x.y.z.tar.gz. The key currently used to create this signature is: "pub 2048R/4F25E3B6 2011-01-12 [expires: 2019-12-31] "uid Werner Koch (dist sig) If you do not have this key, you can get it from the source in the file doc/samplekeys.asc (use "gpg --import doc/samplekeys.asc" to add it to the keyring) or from any keyserver. You have to make sure that this is really the key and not a faked one. You can do this by comparing the output of: $ gpg --fingerprint 0x4F25E3B6 with the fingerprint published elsewhere. Please note, that you have to use an old version of GnuPG to do all this stuff. *Never* use the version which you are going to check! b) If you don't have any of the above programs, you have to verify the SHA1 checksum: $ sha1sum gnupg-x.y.z.tar.gz This should yield an output _similar_ to this: fd9351b26b3189c1d577f0970f9dcadc1234abcd gnupg-x.y.z.tar.gz Now check that this checksum is _exactly_ the same as the one published via the announcement list and probably via Usenet. Documentation ------------- The manual will be distributed separately under the name "gph". An online version of the latest manual draft is available at the GnuPG web pages: https://gnupg.org/documentation/ A list of frequently asked questions is available in the GnuPG distribution in the file doc/FAQ and online as: https://gnupg.org/documentation/faqs.html A couple of HOWTO documents are available online; for a listing see: https://gnupg.org/documentation/howtos.html A man page with a description of all commands and options gets installed along with the program. Introduction ------------ Here is a brief overview on how to use GnuPG - it is strongly suggested that you read the manual and other information about the use of cryptography. GnuPG is only a tool, secure usage requires that YOU KNOW WHAT YOU ARE DOING. The first time you run gpg, it will create a .gnupg directory in your home directory and populate it with a default configuration file. Once this is done, you may create a new key, or if you already have keyrings from PGP, you can import them into GnuPG with: gpg --import path/to/pgp/keyring/pubring.pkr and gpg --import path/to/pgp/keyring/secring.skr The normal way to create a key is gpg --gen-key This asks some questions and then starts key generation. To create good random numbers for the key parameters, GnuPG needs to gather enough noise (entropy) from your system. If you see no progress during key generation you should start some other activities such as moving the mouse or hitting the CTRL and SHIFT keys. Generate a key ONLY on a machine where you have direct physical access - don't do it over the network or on a machine also used by others, especially if you have no access to the root account. When you are asked for a passphrase use a good one which you can easily remember. Don't make the passphrase too long because you have to type it for every decryption or signing; but, - AND THIS IS VERY IMPORTANT - use a good one that is not easily to guess because the security of the whole system relies on your secret key and the passphrase that protects it when someone gains access to your secret keyring. One good way to select a passphrase is to figure out a short nonsense sentence which makes some sense for you and modify it by inserting extra spaces, non-letters and changing the case of some characters - this is really easy to remember especially if you associate some pictures with it. Next, you should create a revocation certificate in case someone gets knowledge of your secret key or you forgot your passphrase gpg --gen-revoke your_user_id Run this command and store the revocation certificate away. The output is always ASCII armored, so that you can print it and (hopefully never) re-create it if your electronic media fails. Now you can use your key to create digital signatures gpg -s file This creates a file "file.gpg" which is compressed and has a signature attached. gpg -sa file Same as above, but creates a file "file.asc" which is ASCII armored and and ready for sending by mail. It is better to use your mailers features to create signatures (The mailer uses GnuPG to do this) because the mailer has the ability to MIME encode such signatures - but this is not a security issue. gpg -s -o out file Creates a signature of "file", but writes the output to the file "out". Everyone who knows your public key (you can and should publish your key by putting it on a key server, a web page or in your .plan file) is now able to check whether you really signed this text gpg --verify file GnuPG now checks whether the signature is valid and prints an appropriate message. If the signature is good, you know at least that the person (or machine) has access to the secret key which corresponds to the published public key. If you run gpg without an option it will verify the signature and create a new file that is identical to the original. gpg can also run as a filter, so that you can pipe data to verify trough it cat signed-file | gpg | wc -l which will check the signature of signed-file and then display the number of lines in the original file. To send a message encrypted to someone you can use gpg -e -r heine file This encrypts "file" with the public key of the user "heine" and writes it to "file.gpg" echo "hello" | gpg -ea -r heine | mail heine Ditto, but encrypts "hello\n" and mails it as ASCII armored message to the user with the mail address heine. gpg -se -r heine file This encrypts "file" with the public key of "heine" and writes it to "file.gpg" after signing it with your user id. gpg -se -r heine -u Suttner file Ditto, but sign the file with your alternative user id "Suttner" GnuPG has some options to help you publish public keys. This is called "exporting" a key, thus gpg --export >all-my-keys exports all the keys in the keyring and writes them (in a binary format) to "all-my-keys". You may then mail "all-my-keys" as an MIME attachment to someone else or put it on an FTP server. To export only some user IDs, you give them as arguments on the command line. To mail a public key or put it on a web page you have to create the key in ASCII armored format gpg --export --armor | mail panther@tiger.int This will send all your public keys to your friend panther. If you have received a key from someone else you can put it into your public keyring. This is called "importing" gpg --import [filenames] New keys are appended to your keyring and already existing keys are updated. Note that GnuPG does not import keys that are not self-signed. Because anyone can claim that a public key belongs to her we must have some way to check that a public key really belongs to the owner. This can be achieved by comparing the key during a phone call. Sure, it is not very easy to compare a binary file by reading the complete hex dump of the file - GnuPG (and nearly every other program used for management of cryptographic keys) provides other solutions. gpg --fingerprint prints the so called "fingerprint" of the given username which is a sequence of hex bytes (which you may have noticed in mail sigs or on business cards) that uniquely identifies the public key - different keys will always have different fingerprints. It is easy to compare fingerprints by phone and I suggest that you print your fingerprint on the back of your business card. To see the fingerprints of the secondary keys, you can give the command twice; but this is normally not needed. If you don't know the owner of the public key you are in trouble. Suppose however that friend of yours knows someone who knows someone who has met the owner of the public key at some computer conference. Suppose that all the people between you and the public key holder may now act as introducers to you. Introducers signing keys thereby certify that they know the owner of the keys they sign. If you then trust all the introducers to have correctly signed other keys, you can be be sure that the other key really belongs to the one who claims to own it. There are 2 steps to validate a key: 1. First check that there is a complete chain of signed keys from the public key you want to use and your key and verify each signature. 2. Make sure that you have full trust in the certificates of all the introduces between the public key holder and you. Step 2 is the more complicated part because there is no easy way for a computer to decide who is trustworthy and who is not. GnuPG leaves this decision to you and will ask you for a trust value (here also referenced as the owner-trust of a key) for every key needed to check the chain of certificates. You may choose from: a) "I don't know" - then it is not possible to use any of the chains of certificates, in which this key is used as an introducer, to validate the target key. Use this if you don't know the introducer. b) "I do not trust" - Use this if you know that the introducer does not do a good job in certifying other keys. The effect is the same as with a) but for a) you may later want to change the value because you got new information about this introducer. c) "I trust marginally" - Use this if you assume that the introducer knows what he is doing. Together with some other marginally trusted keys, GnuPG validates the target key then as good. d) "I fully trust" - Use this if you really know that this introducer does a good job when certifying other keys. If all the introducer are of this trust value, GnuPG normally needs only one chain of signatures to validate a target key okay. (But this may be adjusted with the help of some options). This information is confidential because it gives your personal opinion on the trustworthiness of someone else. Therefore this data is not stored in the keyring but in the "trustdb" (~/.gnupg/trustdb.gpg). Do not assign a high trust value just because the introducer is a friend of yours - decide how well she understands the implications of key signatures and you may want to tell her more about public key cryptography so you can later change the trust value you assigned. Okay, here is how GnuPG helps you with key management. Most stuff is done with the --edit-key command gpg --edit-key GnuPG displays some information about the key and then prompts for a command (enter "help" to see a list of commands and see the man page for a more detailed explanation). To sign a key you select the user ID you want to sign by entering the number that is displayed in the leftmost column (or do nothing if the key has only one user ID) and then enter the command "sign" and follow all the prompts. When you are ready, give the command "save" (or use "quit" to cancel your actions). If you want to sign the key with another of your user IDs, you must give an "-u" option on the command line together with the "--edit-key". Normally you want to sign only one user ID because GnuPG uses only one and this keeps the public key certificate small. Because such key signatures are very important you should make sure that the signatories of your key sign a user ID which is very likely to stay for a long time - choose one with an email address you have full control of or do not enter an email address at all. In future GnuPG will have a way to tell which user ID is the one with an email address you prefer - because you have no signatures on this email address it is easy to change this address. Remember, your signatories sign your public key (the primary one) together with one of your user IDs - so it is not possible to change the user ID later without voiding all the signatures. Tip: If you hear about a key signing party on a computer conference join it because this is a very convenient way to get your key certified (But remember that signatures have nothing to to with the trust you assign to a key). 8 Ways to Specify a User ID ---------=----------------- There are several ways to specify a user ID, here are some examples. * Only by the short keyid (prepend a zero if it begins with A..F): "234567C4" "0F34E556E" "01347A56A" "0xAB123456 * By a complete keyid: "234AABBCC34567C4" "0F323456784E56EAB" "01AB3FED1347A5612" "0x234AABBCC34567C4" * By a fingerprint: "1234343434343434C434343434343434" "123434343434343C3434343434343734349A3434" "0E12343434343434343434EAB3484343434343434" The first one is a short fingerprint for PGP 2.x style keys. The others are long fingerprints for OpenPGP keys. * By an exact string: "=Heinrich Heine " * By an email address: "" * Or by the usual substring: "Heine" "*Heine" The '*' indicates substring search explicitly. Batch mode ---------- If you use the option "--batch", GnuPG runs in non-interactive mode and never prompts for input data. This does not even allow entering the passphrase. Until we have a better solution (something like ssh-agent), you can use the option "--passphrase-fd n", which works like PGP's PGPPASSFD. Batch mode also causes GnuPG to terminate as soon as a BAD signature is detected. Exit status ----------- GnuPG returns with an exit status of 1 if in batch mode and a bad signature has been detected or 2 or higher for all other errors. You should parse stderr or, better, the output of the fd specified with --status-fd to get detailed information about the errors. Configure options ----------------- Here is a list of configure options which are sometime useful for installation. --enable-static-rnd= Force the use of the random byte gathering module . Default is either to use /dev/random or the auto mode. Value for name: egd - Use the module which accesses the Entropy Gathering Daemon. See the webpages for more information about it. unix - Use the standard Unix module which does not have a very good performance. linux - Use the module which accesses /dev/random. This is the first choice and the default one for GNU/Linux or *BSD. auto - Compile linux, egd and unix in and automagically select at runtime. --with-egd-socket= This is only used when EGD is used as random gatherer. GnuPG uses by default "~/.gnupg/entropy" as the socket to connect EGD. Using this option the socket name can be changed. You may use any filename here with 2 exceptions: a filename starting with "~/" uses the socket in the home directory of the user and one starting with a "=" uses a socket in the GnuPG home directory which is "~/.gnupg" by default. --without-readline Do not include support for the readline library even if it is available. The default is to check whether the readline library is a available and use it to allow fancy command line editing. --with-included-zlib Forces usage of the local zlib sources. Default is to use the (shared) library of the system. --with-zlib= Look for the system zlib in DIR. --with-bzip2= Look for the system libbz2 in DIR. --without-bzip2 Disable the BZIP2 compression algorithm. --with-included-gettext Forces usage of the local gettext sources instead of the one provided by your system. --disable-nls Disable NLS support (See the file ABOUT-NLS) --enable-m-guard Enable the integrated malloc checking code. Please note that this feature does not work on all CPUs (e.g. SunOS 5.7 on UltraSparc-2) and might give you a bus error. --disable-dynload If you have problems with dynamic loading, this option disables all dynamic loading stuff. Note that the use of dynamic linking is very limited. --disable-asm Do not use assembler modules. It is not possible to use this on some CPU types. --disable-exec Disable all remote program execution. This disables photo ID viewing as well as all keyserver access. --disable-photo-viewers Disable only photo ID viewing. --disable-keyserver-helpers Disable only keyserver helpers. --disable-keyserver-path Disables the user's ability to use the exec-path feature to add additional search directories when executing a keyserver helper. --with-photo-viewer=FIXED_VIEWER Force the photo viewer to be FIXED_VIEWER and disable any ability for the user to change it in their options file. --disable-rsa Removes support for the RSA public key algorithm. This can give a smaller gpg binary for places where space is tight. --disable-idea --disable-cast5 --disable-blowfish --disable-aes --disable-twofish --disable-sha256 --disable-sha512 Removes support for the selected symmetric or hash algorithm. This can give a smaller gpg binary for places where space is tight. **** Note that if there are existing keys that have one of these algorithms as a preference, messages may be received that use one of these algorithms and you will not be able to decrypt the message! **** The public key preference list can be updated to match the list of available algorithms by using "gpg --edit-key (thekey)", and running the "setpref" command. --enable-minimal Build the smallest gpg binary possible (disables all optional algorithms, disables keyserver access, and disables photo IDs). Specifically, this means --disable-rsa --disable-idea, --disable-cast5, --disable-blowfish, --disable-aes, --disable-twofish, --disable-sha256, --disable-sha512, --without-bzip2, --disable-exec, --disable-card-support and --disable-agent-support. Configure command lines are read from left to right, so if you want to have an "almost minimal" configuration, you can do (for example) "--enable-minimal --enable-rsa" to have RSA added to the minimal build. Adding the option --disable-nls may be useful too. --enable-key-cache=SIZE Set the internal key and UID cache size. This has a significant impact on performance with large keyrings. The default is 4096, but for use on platforms where memory is an issue, it can be set as low as 5. --disable-card-support Do not include smartcard support. The default is to include support if all required libraries are available. --disable-agent-support Do not include support for the gpg-agent. The default is to include support. --enable-selinux-support This prevents access to certain files and won't allow import or export of secret keys. --enable-noexecstack Pass option --noexecstack to as. Autodetect wether the tool chain actually support this. --disable-gnupg-iconv If iconv is available it is used to convert between utf-8 and the system character set. This is in general the preferable solution. However the code is new and under some cirumstances it may give different output than with the limited old support. This option allows to explicity disable the use of iconv. Note, that iconv is also disabled if gettext has been disabled. Installation Problems --------------------- If you get unresolved externals "gettext" you should run configure again with the option "--with-included-gettext"; this is version 0.12.1 which is available at ftp.gnu.org. If you have other compile problems, try the configure options "--with-included-zlib" or "--disable-nls" (See ABOUT-NLS) or --disable-dynload. We can't check all assembler files, so if you have problems assembling them (or the program crashes) use --disable-asm with ./configure. If you opt to delete individual replacement files in hopes of using the remaining ones, be aware that the configure scripts may consider several subdirectories to get all available assembler files; be sure to delete the correct ones. The assembler replacements are in C and in mpi/generic; never delete udiv-qrnnd.S in any CPU directory, because there may be no C substitute. Don't forget to delete "config.cache" and run "./config.status --recheck". We have also heard reports of problems when using versions of gcc earlier than 2.96 along with a non-GNU assembler (as). If this applies to your platform, you can either upgrade gcc to a more recent version, or use the GNU assembler. Some make tools are broken - the best solution is to use GNU's make. Try gmake or grab the sources from a GNU archive and install them. On some OSF systems you may get unresolved externals. This is a libtool problem and the workaround is to manually remove all the "-lc -lz" but the last one from the linker line and execute them manually. On some architectures you see warnings like: longlong.h:175: warning: function declaration isn't a prototype or http.c:647: warning: cast increases required alignment of target type This doesn't matter and we know about it (actually it is due to some warning options which we have enabled for gcc) If you are cross-compiling and you get an error either building a tool called "yat2m" or running that tool, the problem is most likely a bad or missing native compiler. We require a standard C-89 compiler to produce an executable to be run on the build platform. You can explicitly set such a compiler with configure arguments. On HP/UX you might want to try: "CC_FOR_BUILD=c89". Specific problems on some machines ---------------------------------- * Apple Darwin 6.1: ./configure --with-libiconv-prefix=/sw * IBM RS/6000 running AIX: Due to a change in gcc (since version 2.8) the MPI stuff may not build. In this case try to run configure using: CFLAGS="-g -O2 -mcpu=powerpc" ./configure * SVR4.2 (ESIX V4.2 cc) Due to problems with the ESIX as, you probably want to do CFLAGS="-O -K pentium" ./configure --disable-asm * SunOS 4.1.4 ./configure ac_cv_sys_symbol_underscore=yes The Random Device ----------------- Random devices are available in Linux, FreeBSD and OpenBSD. Operating systems without a random devices must use another entropy collector. This collector works by running a lot of commands that yield more or less unpredictable output and feds this as entropy into the random generator - It should work reliably but you should check whether it produces good output for your version of Unix. There are some debug options to help you (see cipher/rndunix.c). Creating an RPM package ----------------------- The file scripts/gnupg.spec is used to build a RPM package (both binary and src): 1. copy the spec file into /usr/src/redhat/SPECS 2. copy the tar file into /usr/src/redhat/SOURCES 3. type: rpm -ba SPECS/gnupg.spec Or use the -t (--tarbuild) option of rpm: 1. rpm -ta gnupg-x.x.x.tar.gz The binary rpm file can now be found in /usr/src/redhat/RPMS, source rpm in /usr/src/redhat/SRPMS Building Universal Binaries on Apple OS X ----------------------------------------- You can build a universal ("fat") binary that will work on both PPC and Intel Macs with something like: ./configure CFLAGS="-arch ppc -arch i386" --disable-endian-check \ --disable-dependency-tracking --disable-asm If you are doing the build on a OS X 10.4 (Tiger) PPC machine you may need to add "-isysroot /Developer/SDKs/MacOSX10.4u.sdk" to those CFLAGS. This additional isysroot is not necessary on Intel Tiger boxes, or any OS X 10.5 (Leopard) or later boxes. Note that when building a universal binary, any third-party libraries you may link with need to be universal as well. All Apple-supplied libraries (even libraries not originally written by Apple like curl, zip, and BZ2) are universal. GnuPG 1.4 and GnuPG 2.x ----------------------- GnuPG 2.x is a newer version of GnuPG with additional support for S/MIME. It has a different design philosophy that splits functionality up into several modules. Both versions may be installed simultaneously without any conflict (gpg is usually installed under the name gpg2 in GnuPG-2). In fact, the GPG version from GnuPG 1.4 is able to make use of the gpg-agent as included in GnuPG-2 and allows for seamless passphrase caching. The advantage of GnuPG 1.4 is its somewhat smaller size and no dependency on other modules at run and build time. The drawback of 1.4 is its much older code base and that only minimal maintainance is done. It is highly suggested to switch to 2.x unless your system is not supported by 2.x. How to Get More Information --------------------------- The primary WWW page is https://gnupg.org or using TOR http://ic6au7wa3f6naxjq.onion The primary FTP site is ftp://ftp.gnupg.org/gcrypt/ or https://gnupg.org/ftp/gcrypt/ See https://gnupg.org/download/mirrors.html for a list of mirrors and use them if possible. You may also find GnuPG mirrored on some of the regular GNU mirrors. We have some mailing lists dedicated to GnuPG: gnupg-announce@gnupg.org For important announcements like new versions and such stuff. This is a moderated list and has very low traffic. Do not post to this list. gnupg-users@gnupg.org For general user discussion and help (English). gnupg-de@gnupg.org German speaking counterpart of gnupg-users. gnupg-ru@gnupg.org Russian speaking counterpart of gnupg-users. gnupg-devel@gnupg.org GnuPG developers main forum. You subscribe to one of the list by sending mail with a subject of "subscribe" to x-request@gnupg.org, where x is the name of the mailing list (gnupg-announce, gnupg-users, etc.). An archive of the mailing lists are available at https://gnupg.org/documentation/mailing-lists.html Please direct bug reports to https://bugs.gnupg.org or post them direct to the mailing list . Please direct questions about GnuPG to the users mailing list or one of the pgp newsgroups; please do not direct questions to one of the authors directly as we are busy working on improvements and bug fixes. The English and German GnuPG mailing lists are watched by the authors and we try to answer questions when time allows us to do so. Commercial grade support for GnuPG is available; for a listing of offers see https://gnupg.org/service.html . Maintaining and improving GnuPG is costly. Since 2001, g10 Code GmbH, a German company owned and headed by GnuPG's principal author Werner Koch, is bearing the majority of these costs. To help them carry on this work, they need your support. See https://gnupg.org/donate/ gnupg-1.4.20/ChangeLog-20110000644000175000017500000017723112635262326012014 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-08-09 Werner Koch * configure.ac: Fix usage of AC_LANG_PROGRAM. 2010-12-28 Werner Koch * configure.ac (git_revision): Add new m4 macro. 2010-10-27 Werner Koch * acinclude.m4 (GNUPG_TIME_T_UNSIGNED): New. * configure.ac: Call AC_HEADER_TIME and GNUPG_TIME_T_UNSIGNED. 2010-10-18 Werner Koch Release 1.4.11. 2010-10-10 Werner Koch * configure.ac (AH_BOTTOM): Add GNUPG_BAK_SFX and GNUPG_TMP_SFX. Define GNUPG_HOMEDIR et al for VMS. 2010-10-05 Werner Koch * configure.ac: Remove check for the faqprog. 2010-09-28 Werner Koch * configure.ac (AH_BOTTOM) [__VMS]: Fix homedir. 2010-09-23 Werner Koch Release 1.4.11rc1. * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Remove --enable-selinux-support option. 2009-09-02 Werner Koch Release 1.4.10. * configure.ac (AC_RG_ENABLE): Don't disable try_gettext in --enable-minimal. * README <--enable-minimal>: Mention --disable-nls. 2009-08-13 Werner Koch Release 1.4.10rc1. * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Remove now obsolete --enable-camellia 2009-08-13 David Shaw * NEWS: Note Camellia and hkps. 2009-07-21 Werner Koch * configure.ac (AH_BOTTOM): Add macros for estream-printf. (estream_PRINTF_INIT): Add it. 2009-06-05 David Shaw * configure.ac: Remove Camellia restriction. 2008-10-03 David Shaw * configure.ac, acinclude.m4: Remove GNUPG_CHECK_DOCBOOK_TO_TEXI as we no longer use it. Noted by John Clizbe. 2008-08-27 David Shaw * configure.ac: Use printf for the most portable SVN version detection. 2008-08-11 Werner Koch * configure.ac: Check for size of time_t. 2008-04-01 Werner Koch * configure.ac (AC_INIT): Fix quoting. 2008-03-31 David Shaw * configure.ac: Require curl 7.10 (Oct 1 2002) or later as we use curl_version_info(). 2008-03-26 Werner Koch Release 1.4.9. 2008-03-07 David Shaw * configure.ac: Darwin's /bin/sh has a builtin echo that doesn't understand '-n'. Use tr to trim the carriage return instead. 2008-03-06 David Shaw * configure.ac: Post-release update. 2007-12-20 Werner Koch Released 1.4.8. 2007-12-17 Werner Koch * configure.ac: Add special treatment for HAVE_LDAP_START_TLS_SA. 2007-12-14 Werner Koch Released 1.4.8rc1. 2007-12-13 David Shaw * NEWS: Note SHA-224 typo. 2007-11-17 David Shaw * NEWS: Say a bit more about RFC-4880. Note some defaults changing. 2007-11-16 Werner Koch Released 1.4.8rc1. 2007-10-27 David Shaw * README: Update notes about OSX Leopard. 2007-10-23 Werner Koch Switched entire package to GPLv3+. * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Enable Camellia and mailto. * configure.ac (MPI_OPT_FLAGS): Always use AM_PO_SUBDIRS. 2007-10-23 gettextize * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.16.1. 2007-10-17 David Shaw * configure.ac: Change various help messages to use AC_HELP_STRING. 2007-07-18 David Shaw * configure.ac: It seems that AM_GNU_GETTEXT doesn't like being run conditionally and it confuses the includes when doing later type checks. This is bug#810. 2007-07-08 David Shaw * configure.ac: AM_PROG_CC_C_O is desired by automake 1.10 to do per-target builds (like we do in the keyserver dir), but exists in the currently-used 1.9.3 as well. 2007-06-13 David Shaw * configure.ac: Add --enable-camellia. Disabled by default. Do not enable this unless you're doing interop testing. 2007-04-16 Werner Koch * acinclude.m4: Fix last change. Make test self-contained by checking for sysconf and getpagesize. Remove indentation for the sake of broken C-89 cpp. 2007-04-16 David Shaw * configure.ac: Add a HAVE_SHM conditional. * acinclude.m4: Use sysconf() if available to avoid a false positive on HAVE_BROKEN_MLOCK when checking for page size. * configure.ac: Check for sysconf. 2007-04-15 David Shaw * configure.ac: QNX puts resolver functions in libsocket. From Sean Boudreau. 2007-03-05 Werner Koch Released 1.4.7. 2007-03-04 David Shaw * NEWS: Note --allow-multiple-messages. 2006-12-21 David Shaw * configure.ac: Only check for libusb if we're building with card support. Noted by Gilles Espinasse. 2006-12-11 Werner Koch * Makefile.am (DISTCLEANFILES): Removed g10defs.h. * configure.ac (AC_CONFIG_COMMANDS): Removed creation of g10defs.h. (AH_BOTTOM): Moved stuff from g10defs.h to config.h. 2006-12-07 David Shaw * configure.ac: AM_CONDITIONAL must not be used inside an if/then. 2006-12-07 Werner Koch * configure.ac: Remove GNUPG_DATADIR for non-W32 systems. 2006-12-06 Werner Koch Released 1.4.6. 2006-12-04 Werner Koch * README: Add hint on hjow to set CC_FOR_BUILD. * configure.ac (CC_FOR_BUILD): New. 2006-12-02 David Shaw * NEWS: Note the CVE for bug#728, --s2k-count, --passphrase-repeat, and the OpenSSL exception. 2006-11-29 Werner Koch Released 1.4.6rc1. 2006-11-05 David Shaw * configure.ac: --enable-minimal leaves out gettext and all resolver functions (SRV, PKA, & CERT). 2006-10-02 Werner Koch * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Add case for mingw32 and allow setting the variable on the command line. Fixes bug 518. Also use HOST instead of TARGET. * README: Add information about the forthcoming GnuPG 2.0. * configure.ac (AB_INIT): New. 2006-09-28 David Shaw * configure.ac: Move strsep to AC_REPLACE_FUNCS so it will end up in libcompat. 2006-08-01 Werner Koch Released 1.4.5. 2006-07-31 Werner Koch * README: Updated info on the key used to sign the tarball. 2006-07-28 Werner Koch Released 1.4.5rc1. 2006-07-08 David Shaw * configure.ac: Fix resolver autoconf code so it works (fails) properly with uClibc. 2006-06-25 Werner Koch Released 1.4.4. 2006-05-23 David Shaw * configure.ac: Add --disable-optimization. This is handy for debugging so the compiler doesn't rearrange things and eliminate variables. 2006-05-22 Marcus Brinkmann * configure.ac: Remove check for noexecstack and invoke CL_AS_NOEXECSTACK instead. 2006-05-16 Werner Koch * README: Removed note for OSF5 as this is the default now. Reported by Joerg Honegger. * configure.ac [osf5]: Fixed warning name to ptrmismatch1. 2006-04-27 David Shaw * NEWS: Note SHA-224 and DSA2. * configure.ac: Remove --enable-old-keyserver-helpers. Comment out --enable-m-guard for now. 2006-04-12 Werner Koch * configure.ac: Print version at end of run. (svn_revision): Posix adjustment. 2006-04-07 Werner Koch * configure.ac: Use new method to include the SVN revison. Now it is the actual global revision number. 2006-04-04 Werner Koch * NEWS: Fixed old news entry to point to rfc4398 which has been published just before 1.4.3. 2006-04-03 Werner Koch Released 1.4.3. 2006-03-30 David Shaw * README: Some more notes about building fat binaries. 2006-03-24 David Shaw * README: Missing some instructions on building a fat binary. 2006-03-20 David Shaw * configure.ac: Improved --disable-endian-check that doesn't involve changing #ifdefs in the rest of the code. 2006-03-19 David Shaw * configure.ac: Add --disable-endian-check for building fat binaries on OSX. * README: Add note on how to build a fat binary on OSX. 2006-03-17 David Shaw * configure.ac: Allow the DNS stuff to work on OSX by trying the Apple-specific BIND_8_COMPAT. 2006-03-09 Werner Koch Released 1.4.3rc2. 2006-03-07 David Shaw * NEWS: Note CERT retrieval. Tweak PKA and backsig language to match current code. * NEWS: Note --auto-key-locate and that keyservers can handle binary data now. 2006-03-01 David Shaw * configure.ac: Fix accidental enabling of SHA-384/512. Noted by Nelson H. F. Beebe. 2006-02-18 David Shaw * configure.ac: Try linking the UINT64_C test program (rather than just compiling it) as UINT64_C looks like a (missing) function, causing a false positive. Noted by Claus Assmann. 2006-02-14 Werner Koch Released 1.4.3rc1. 2006-02-09 Werner Koch * configure.ac: Check for fcntl and ftruncate. 2006-01-22 David Shaw * configure.ac: Add define for EXEEXT so we can find keyserver helpers on systems that use extensions. 2005-12-23 David Shaw * configure.ac: Add switch for DNS CERT. 2005-12-22 David Shaw * configure.ac: Split PKA checking off from DNS SRV checking. Currently PKA is only enabled if HTTP or HKP is enabled which is not necessary. 2005-12-08 David Shaw * NEWS: Note --fetch-keys. 2005-12-06 David Shaw * configure.ac: UINT64_C test needs #include . * configure.ac: Some cleanup so we don't build files that are completely ifdeffed out. This causes a warning on Sun's cc. Do sha512.c and the internal regex code as well for consistency. 2005-11-17 David Shaw * NEWS: Note backsigs, the xxxxx-clean options, and the xxxxx-minimal options. 2005-11-02 David Shaw * configure.ac: Check for a getpagesize() declaration. 2005-10-14 David Shaw * NEWS: Clarify the cURL keyserver changes, and add a note about gpg-zip. * configure.ac: Remove the backsig configure options since this is all done at runtime now. 2005-10-11 David Shaw * configure.ac: Did some backsig testing with the PGP folks. All is well, so I'm turning generation of backsigs on for new keys. Checking for backsigs on verification is still off. 2005-10-05 Werner Koch * configure.ac: Changed identification file name to g10/gpg.c 2005-10-02 Marcus Brinkmann * configure.ac [!$try_gettext]: Invoke AM_PO_SUBDIRS. 2005-08-31 David Shaw * configure.ac: Check for getpwnam, getpwuid, and pwd.h. 2005-08-09 David Shaw * configure.ac: Remove hardcoded -I and -L for /usr/local on FreeBSD. 2005-08-04 David Shaw * configure.ac: Call GNUPG_CHECK_USTAR and generate tools/gpg-zip. 2005-07-28 Werner Koch * configure.ac (USE_DNS_PKA): Define in addition to USE_DNS_SRV. 2005-07-27 Werner Koch Replaced in all directories all calls to m_free, m_alloc, m_realloc, m_strdup by calls to xfoo functions. This is to ease porting to gnupg 1.9. * README.CVS: Renamed to README.SVN. 2005-07-26 David Shaw * NEWS, configure.ac: Switch over to using curl or fake-curl by default. Add --enable-old-keyserver-helpers to not use curl. 2005-07-26 Werner Koch Released 1.4.2. 2005-07-20 David Shaw * configure.ac: Add a define for FAKE_CURL. 2005-07-19 Werner Koch * configure.ac [W32]: Always set DISABLE_KEYSERVER_PATH. 2005-06-21 Werner Koch Released 1.4.2rc2. 2005-06-20 David Shaw * NEWS: Note key cleaning commands. 2005-06-13 David Shaw * configure.ac: Add check for no-pointer-sign warning keyword, and disable. This is gcc4 specific. 2005-05-31 Werner Koch Released 1.4.2rc1. * README: Add a note on GnuPG 1.9. Updated FSF address in all files. 2005-05-26 David Shaw * NEWS: Note command completion and the new curl-based HKP helper. 2005-04-16 David Shaw * configure.ac: Remove --disable-old-hkp - use new HKP handler for --with-libcurl or --enable-fake-curl. * configure.ac: Add --disable-old-hkp option that can be used along with --with-libcurl to build the curl version of HKP. 2005-04-12 David Shaw * configure.ac: Check for memrchr() 2005-03-31 Werner Koch * configure.ac: New option --disable-agent-support. Define ENABLE_AGENT_SUPPORT as AC_DEFINE and AM_CONDITIONAL. Disable support for card and agent with --enable-minimal. (AC_REPLACE_FUNCS): Add isascii. (g10defs.h): Define PATHSEP_C and PATHSEP_S. * README: Changed the instruction on how to verify a signature to show a .sig extension and not the .asc we used to use ages ago. 2005-03-16 David Shaw * configure.ac: Move the LDAP detecting code to m4/ldap.m4. 2005-03-15 Werner Koch Released 1.4.1. 2005-03-11 Werner Koch * configure.ac: New option --enable-noexecstack. 2005-02-16 Werner Koch Released 1.4.1rc2. 2005-02-11 David Shaw * configure.ac: Add --enable-fake-curl option to help test no-curl HTTP. * NEWS: Note Mister/Zuccherato CFB countermeasures. 2005-02-04 Werner Koch * configure.ac (GNUPG_CHECK_GNUMAKE): Removed. Not needed for decent automakes. 2005-02-03 David Shaw * NEWS: Fix typo. 2005-02-03 Werner Koch Released 1.4.1rc1. 2005-01-22 David Shaw * configure.ac: Define FTPS flag if we're using curl, and FTPS is available. * README: Fix some typos (noted by Norihiko Murase), update to 1.4.1, and tweak some descriptions. * NEWS: Note FTPS. 2005-01-18 Werner Koch * configure.ac (HAVE_W32_SYSTEM): Define it. 2005-01-18 David Shaw * NEWS: Note --rfc2440-text import/export-unusable-sigs and gpgkeys_curl. * configure.ac: gpgkeys_mailto is disabled by default. Define HTTPS flag if we're using curl, and HTTPS is available. 2005-01-17 Werner Koch * README: Updated for SHA1 checksums. * configure.ac: Make --without-included-zlib work as expected. Reported by Norihiko Murase. Same for --without-included-regex. 2005-01-03 David Shaw * configure.ac: Use new GNUPG_CHECK_LIBUSB macro. 2004-12-28 David Shaw * configure.ac: Better implementation for the SRV check. We don't need to actually check all the header files individually since the SRV test compile uses them together. 2004-12-24 David Shaw * configure.ac: Use new LIBCURL_CHECK_CONFIG macro for all libcurl stuff. This simplifies, and we don't need the automake conditional stuff any longer. 2004-12-22 David Shaw * configure.ac: --enable-ftp is on by default, --with-libcurl is off by default. If we have neither of --enable-ftp or --enable-http, don't even check for curl. 2004-12-21 David Shaw * configure.ac: Add check for --enable-ftp. It is disabled by default for now. 2004-12-18 David Shaw * configure.ac: Call the new GNUPG_CHECK_READLINE macro for readline stuff. 2004-12-17 David Shaw * configure.ac: Add a --with-ldap=DIR so people can add to the search path. 2004-12-16 David Shaw * configure.ac: Check for arpa/nameser.h. 2004-12-16 Werner Koch * THANKS: Added John Clizbe for help testing the 1.4.0a W32 binary. 2004-12-16 Werner Koch Released 1.4.0. 2004-12-14 Werner Koch Released 1.3.93. * Makefile.am (AUTOMAKE_OPTIONS): Add filename-length-max=99. 2004-11-06 David Shaw * configure.ac: Autodetect wldap32 on Windoze. 2004-11-04 David Shaw * README, configure.ac: Add --enable-backsigs to enable the experimental backsigs code. 2004-11-04 Werner Koch * AUTHORS: Use Maxim Britov. I am not that accustomed to the Russian way of writing names. 2004-10-28 Werner Koch Released 1.3.92. 2004-10-26 Werner Koch * configure.ac: New option --disable-gnupg-iconv, define USE_GNUPG_ICONV. (AC_CANONICAL_TARGET): Replaced by AC_CANONICAL_HOST. Changed all reference to TARGET to HOST. Made sure that i586-mingw32msvc gets detected as mingw32. (UNIT64_C): Don't include inttype.h uncoditional but use a test to ensure that it gets into conftest.h. (AH_TOP): New. Prevent double inclusion of config.h. 2004-10-21 David Shaw * acinclude.m4: aclocal 1.9 wants quoting on AC_DEFUN arguments. 2004-10-21 Werner Koch * configure.ac: Remove the check for asprintf 2004-10-15 Werner Koch Released 1.3.91. * README: Mentioned --enable-selinux-support. 2004-10-15 David Shaw * NEWS: Note gpgkeys_finger, keyserver timeouts, and the direct trust model. 2004-10-15 Werner Koch * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): New. (AUTOMAKE_OPTIONS): New. * configure.ac: Check whether vasprintf needs a replacement. 2004-10-13 Werner Koch * configure.ac: Actually name the option --disable-finger and not http. Add option --enable-selinux-support. 2004-10-11 Werner Koch * configure.ac: New option --disable-finger. 2004-09-17 Werner Koch * configure.ac: Don't check for usb_create_match or use_get_string_simple anymore. 2004-09-15 David Shaw * configure.ac: Give warning when using capabilities. Check for usb_get_string_simple for old libusb reasons. 2004-09-10 David Shaw * NEWS: Note HTTP basic auth. * configure.ac: Check for usb_get_busses since very old stable libusb doesn't have it. 2004-09-09 Werner Koch * README: Doc --disable-card-support and --without-readline. * configure.ac: Check for readline. Make enable-card-support the default. New option --without-readline. Allow the use of either the development or the stable libusb. 2004-07-27 Werner Koch * configure.ac (AM_GNU_GETTEXT_VERSION): New. (min_automake_version): New. 2004-05-24 David Shaw * configure.ac: Try for wldap32 on Win32 platforms. 2004-05-22 Werner Koch Releases 1.3.6. 2004-05-21 David Shaw * NEWS: Note --sig-keyserver-url and the ability to use a preferred keyserver in a regular data sig to fetch the signing key. * configure.ac: Replacement function for timegm(). No need to check for setenv() any longer. 2004-05-20 David Shaw * NEWS: Note HTTP key fetching. * README: Update version and note that HKP is no longer build in. * configure.ac: Handle --disable-http and other code to properly build gpgkeys_http. 2004-05-19 David Shaw * NEWS: Note the addition of preferred keyserver support, --ask-cert-level, --keyid-format, and the removal of show-long-keyids, the quasi-1991 partial length encoding, --export-all, and include-non-rfc. * acinclude.m4 (GNUPG_SYS_NM_PARSE): Remove a leftover slash in a sed expression. 2004-05-01 Werner Koch * acinclude.m4 (ac_pipe_works): Fixed BRE syntax \? -> \{0,1\}. Reported by Todd Vierling. 2004-02-26 Werner Koch Released 1.3.5. 2004-02-25 David Shaw * README: Update copyright. * NEWS: Note --max-output, --list-config, --min-cert-level, AIX fix, new http-proxy keyserver-option, new LDAP server code, TLS, LDAPS, and --show-session-key with --symmetric. 2004-02-20 David Shaw * configure.ac: Check for timegm(). Replacement functions for setenv() and unsetenv(). 2004-02-19 David Shaw * configure.ac: Check for ln -s and add GPGKEYS_LDAP conditional, both for making gpgkeys_ldaps symlink to gpgkeys_ldap. * configure.ac: Simplify the LDAP checking code since OpenLDAP is far more mature these days and dependencies are cleaner. Add checks for ldap_set_option and ldap_start_tls_s. 2004-01-27 David Shaw * NEWS: Note --enable-key-cache, the OpenBSD/i386 and HPPA fixes, and Elgamal removal. * README, configure.ac: Add --enable-key-cache=SIZE configure option. This sets the key/uid cache size. Default is 4096. 2004-01-11 David Shaw * configure.ac: Include stdio.h when checking for bzlib.h. Solaris 9 has a very old bzip2 library and we can at least guarantee that it won't fail because of the lack of stdio.h. * THANKS: Added Phong Nguyen, who found the Elgamal signing key problem. 2003-12-23 Werner Koch * configure.ac: Use -Wformat-nonliteral in maintainer-mode. 2003-11-30 David Shaw * NEWS: Note --disable-rsa. * configure.ac: Add --disable-rsa. * README: Add --with-zlib, --with-bzip2, --without-bzip2, --disable-rsa, and --enable-minimal. Update gettext version. * README: Update version number. Add BZIP2. Remove Elgamal sign+encrypt. 2003-11-27 Werner Koch Released 1.3.4. 2003-11-27 David Shaw * NEWS: Note that we won't encrypt to an Elgamal sign+encrypt key any longer. * configure.ac: Use MSG_NOTICE instead of MSG_WARN for less serious notifications. * NEWS: I meant "less" not "more". 2003-11-12 David Shaw * NEWS: Note BZIP2. * configure.ac: Make sure that the resolver API actually compiles, and not just that the right functions exist. 2003-10-30 David Shaw * configure.ac: Locate libbz2 for bzip2 compression support. 2003-10-26 David Shaw * NEWS: Note --symmetric --encrypt and the improved config file search. * configure.ac: Add SAFE_VERSION_DOT and SAFE_VERSION_DASH. 2003-10-25 Werner Koch * Makefile.am (SUBDIRS): Add intl. (ACLOCAL_AMFLAGS): New variable. (EXTRA_DIST): Add scripts/config.rpath. * configure.ac (AC_CONFIG_FILES): Add po/Makefile.in, (AL_LINGUAS): Removed. 2003-10-24 David Shaw * configure.ac (DLLIBS): Work properly on platforms where dlopen and friends are in libc instead of libdl. 2003-10-24 Werner Koch * configure.ac (DLLIBS): Fixed last change. 2003-10-23 Werner Koch * configure.ac (DLLIBS): Do not include -ldl in the mingw32 case. 2003-10-21 Werner Koch * configure.ac (PRINTABLE_OS_NAME): Remove special case for The Hurd; Robert Millan reported that the uname test is now sufficient. 2003-10-16 David Shaw * configure.ac: Include -ldl when card support is used. 2003-10-10 Werner Koch Release 1.3.3. 2003-10-09 David Shaw * NEWS: Note multiple Comment: support and --sig-keyserver-url. 2003-10-01 Werner Koch * configure.ac (AH_BOTTOM): Define GNUPG_MAJOR_VERSION. (ENABLE_CARD_SUPPORT): Define as automake conditional. 2003-09-30 David Shaw * NEWS: Note that SHA-256 is read-write now, that TIGER/192 is no more, that revoked and expired uids are skipped in -r, and that --no-mangle-dos-filenames is now the default. 2003-09-27 Werner Koch * configure.ac (LIBUSB_LIBS,HAVE_LIBUSB): Check for Libusb. (--enable-card-support): New. 2003-09-04 David Shaw * configure.ac: Drop TIGER/192 support. Check for UINT64_C to go along with uint64_t. 2003-09-01 David Shaw * NEWS: Note --list-options, --verify-options, the deprecation of --show-photos, --show-policy-url, --show-notation, and --show-keyring, and getting the signer's fingerprint in sig records. 2003-08-28 David Shaw * AUTHORS, THANKS: Updates from stable. 2003-08-25 David Shaw * NEWS: Note %g and %p, the "tru" --with-colons record, and the REVKEYSIG --status-fd tag. * README: Add a note about the SunOS symbol underscore problem and how to fix it. Note problem with gcc < 2.96 and non-gnu as. 2003-08-24 David Shaw * configure.ac: Check for getaddrinfo. Don't bother to check for EGD libs since we need to have the netlibs regardless because of the agent socket. 2003-07-10 David Shaw * configure.ac: configure.ac: Check for sigset_t and struct sigaction. This is for Forte c89 on Solaris which seems to define only the function call half of the two pairs by default. * THANKS: Updates from stable. * configure.ac: Include wsock32 in W32LIBS. This is different from NETLIBS so we don't need to force other platforms to pull in the netlibs when they aren't actually needed. * NEWS: Note portability changes. 2003-06-03 David Shaw * configure.ac: Define SAFE_VERSION so that RISCOS can override it and remove invalid chars. 2003-05-30 David Shaw * configure.ac: Put wsock32 in NETLIBS. Put zlib in ZLIBS. Put dl in DLLIBS. Check for getopt.h if available. Look for getopt() in libiberty if libc doesn't have it. Enable GPGKEYS_HKP after AC_PROG_CC so that any needed extension (i.e. ".exe") is defined. 2003-05-27 Werner Koch Released 1.3.2. 2003-05-26 David Shaw * NEWS: Document --gnupg and the deprecation of --no-openpgp and --no-pgpX. 2003-05-24 David Shaw * configure.ac: Edit preprocessor instructions in g10defs.h to remove whitespace before the '#'. This is not required by C89, but there are some compilers out there that don't like it. 2003-05-11 David Shaw * configure.ac: Remove some stuff no longer needed with newer autoconf. Use AC_GNU_SOURCE instead of defining _GNU_SOURCE manually. Add check for strchr() for gettext. Add "ngettext" check for gettext, since that check supposedly implies a check for bind_textdomain_codeset. Add check for times() for random.c. Fix URL for EGD. Make --enable-old-tiger match the stable branch as a separate item. * NEWS: "OpenPGP" trust model is now "PGP". Add note about TIGER being dropped from OpenPGP. Note trust bug fix. * README: Fix all URLs to point to the right place in the reorganized gnupg.org web pages. Some minor language fixes. 2003-04-27 David Shaw * BUGS: Fix bug reporting URL. * NEWS: Add sig version, pk algo, hash algo, and sig class to VALIDSIG. Add notes about SRV, the "subkeyid!" syntax, configure options to disable various algorithms, and the ability to change the keyserver no-modify flag. 2003-04-23 David Shaw * configure.ac: Big warning that TIGER/192 is being removed from the standard, and make it disabled by default. * README: Put back proper copyright line. Remove mention of TIGER/192. 2003-04-15 Werner Koch * configure.ac (HAVE_DOSISH_SYSTEM): New automake conditional. * acinclude.m4 (GNUPG_CHECK_ENDIAN): Fixed quoting of r.e. using quadrigraphs. 2003-04-08 Werner Koch * Makefile.am (EXTRA_DIST): Add autogen.sh wrapper. 2003-04-07 David Shaw * configure.ac: Use much more accurate method to determine whether DNS SRV is usable. * README: Document the various --disable-xxx switches, and add a note about existing keys that may use one of the missing ciphers as a preference. Update copyright date. * NEWS: Add note about SHA-256/384/512. * acinclude.m4: Fix URL to faqprog.pl. 2003-03-24 Werner Koch * acinclude.m4 (GNUPG_CHECK_ENDIAN): When crosscompiling assume little only for Intel CPUs. * configure.ac: Check for ranlib and ar. This is required for cross compiling. 2003-03-11 David Shaw * configure.ac: Look for res_query so we can use DNS SRV, and add --disable-dns-srv to disable it. 2003-03-04 David Shaw * configure.ac: Define @CAPLIBS@ to link in -lcap if we are using capabilities. 2003-02-22 David Shaw * configure.ac: Add --disable-idea for IDEA. Note that disabling IDEA disables both the real IDEA and the possibility of using the IDEA loadable module. Remove the --disable-dynload option since it is no longer meaningful (it is only used if idea-stub is used). 2003-02-21 David Shaw * configure.ac: Add --disable-xxx options for CAST5, BLOWFISH, AES (all), TWOFISH, TIGER192, SHA256, and SHA384/512. Add a --enable-minimal that disables all of them as well as --disable-exec. 2003-02-11 David Shaw * configure.ac: Do not set GNUPG_LIBEXECDIR in ./configure, so that makefiles can override it. Verify that we have a 64-bit type before building tiger.c or sha512.c. Add uint64_t as a possible 64-bit type. 2003-02-02 David Shaw * NEWS: Add notes about disabled keys, trustdb tweaks, and "revuid". 2002-12-27 David Shaw * NEWS: Add note about convert-from-106 script. 2002-11-25 David Shaw * NEWS: Add notes about notation names and '@', the --trust-model option, default algorithms from --personal-xxxx, --primary-keyring, changes with --s2k-digest-algo, the new anonymous recipient improvements, and non-optimized memory wiping. 2002-11-13 David Shaw * THANKS: Changes from stable branch. * configure.ac: Check for ctermid(). From Werner on stable branch. * configure.ac (GPGKEYS_LDAP,GPGKEYS_HKP): Add $EXEEXT. From Werner on stable branch. * configure.ac (try_gettext): Remove special case for cygwin. This removes all the DOS specific macros and let Cygwin work like a real OS. Needs a couple of changes elsewhere but after all, GnuPG presents itself much more like a Posix program and can be used in a full Cygwin environment; e.g. used along with mutt. Changes suggested by Volker Quetschke. From Werner on stable branch. * acinclude.m4 (GNUPG_SYS_NM_PARSE): Allow for underscore in test symbols. Useful for Cygwin builds. (GNUPG_SYS_SYMBOL_UNDERSCORE): Don't hardwire to yes for Cygwin. From Werner on stable branch. * README: Add an installation note for Darwin 6.1. From Werner on stable branch. 2002-11-12 Werner Koch Released 1.3.1 2002-11-03 David Shaw * NEWS: Note trust signature support, --hidden-encrypt-to/--hidden-recipient, and long algorithm name support everywhere. 2002-10-31 David Shaw * Makefile.am: Put gnupg.spec in the root directory so rpm -ta works. * configure.ac: Add a check for volatile. 2002-10-29 David Shaw * configure.ac: Add --disable-regex in case some platform just can't handle the regex stuff. This means they can't fully handle trust sigs with an attached regex either. 2002-10-19 David Shaw * configure.ac: Regex tests adapted from mutt to decide whether to use the internal regex code or not. 2002-10-18 Werner Koch Released 1.3.0. * configure.ac: Changed version number comments. (ALL_LINGUAS): Removed all except for de. During development it might not be a good idea to keep all of them - they get outdated too soon and diff files will be far too large. 2002-10-17 David Shaw * README: Multiple A record rotation works with MINGW32 now, and clarify how it works with LDAP. 2002-10-16 David Shaw * README: Some typo fixes from Florian Weimer, and bump version number. 2002-10-15 David Shaw * NEWS: Some 1.3 notes. 2002-10-12 Werner Koch * configure.ac (NAME_OF_DEV_URANDOM): Use /dev/urandom for NetBSD. Reported by Christian Biere. 2002-10-07 David Shaw * configure.ac: OpenLDAP 2.0.27 changed the dependencies again. Add a "LDAPLIBS" variable so users can try and suggest the right dependencies for their platform. 2002-10-02 David Shaw * configure.ac: Add an --enable-old-tiger, to revert back to the old OID. 2002-09-27 David Shaw * configure.ac: Remove --enable-tiger, as TIGER is now always enabled. 2002-09-25 David Shaw * configure.ac: Add NETLIBS to EGDLIBS when using EGD as EGD uses sockets. 2002-09-24 David Shaw * THANKS: Remove duplicate. * NEWS: Bring in cosmetic changes from stable branch. * configure.ac: Figure out whether the LDAP library supports ldap_get_option, ld_errno, or neither. 2002-09-19 David Shaw * configure.ac: Try linking LDAP as just -lldap as it seems very recent OpenLDAPs (>=2.0.23) support that. 2002-09-14 David Shaw * configure.ac: Try linking LDAP without -lresolv first, just in case the platform has libresolv, but doesn't actually need it to use LDAP. 2002-09-12 David Shaw * NEWS: Note that the old IDEA plugin won't work with post-1.1.90 gpg. 2002-09-12 David Shaw * configure.ac: Remove --enable-external-hkp as this is always on now. Add --disable-hkp to match the other --disable-{keyservertype} options. * NEWS, configure.ac: Move to devel version 1.3. 2002-09-11 Werner Koch Released 1.1.92. * configure.ac (random_modules): The default random module for system lacking a /dev/random is now auto selected at runtime. 2002-09-09 David Shaw * NEWS: typo. * configure.ac: Add a link test for LDAP without -lresolv for HPUX. Remove "hstrerror" test as it is no longer needed. 2002-09-02 Werner Koch * README: Removed the note about a development version so that we later don't forget this. Minor other changes. 2002-08-29 Werner Koch * configure.ac (random_modules): Reworked the code to select the random module. Define USE_ALL_RANDOM_MODULES for value all. 2002-08-27 David Shaw * configure.ac: Check type of mode_t. * NEWS: Clarify that --libexecdir is a configure option. * configure.ac: Check for hstrerror. 2002-08-19 David Shaw * NEWS: Document new ways to enable MDC, and change in automatic compression disabling. * configure.ac: No such thing as the "none" random gather any longer. 2002-08-08 David Shaw * configure.ac: Add an --enable-tiger. * NEWS: Clarify new permission checks. 2002-08-07 David Shaw * configure.ac: If the static IDEA cipher is present, disable dynamic loading. Also fix backwards grammar of keyserver exec-path CHECKING message. 2002-08-05 Werner Koch * configure.ac: Bumbed version number. 2002-08-04 Werner Koch Released 1.1.91. * configure.ac (ALL_LINGUAS): Added Catalan. 2002-08-02 Werner Koch * configure.ac: Removed all extension stuff but keep the tests for dlopen. We don't need to figure out the flags required. All stuff is now statically loaded. 2002-07-30 David Shaw * README, configure.ac: --with-exec-path is now clarified into --disable-keyserver-path * NEWS: changes since 1.1.90. 2002-07-24 David Shaw * configure.ac: Include a GNUPG_LIBEXECDIR in g10defs.h, as well as a SUBST for Makefiles. 2002-07-22 Timo Schulz * configure.ac: Replace the 'c:/' variables with 'c:\' due to the fact we already use '\' in the remaining code. 2002-07-08 David Shaw * configure.ac: Add --with-mailprog to override the use of sendmail with another MTA. We can use anything that follows the "$MAILPROG -t" convention. 2002-07-04 David Shaw * configure.ac: --enable-exec-path should be a 'with'. Fix 'no' cases of --with-exec-path and --with-photo-viewer. * README: Document --disable-exec, --disable-photo-viewers, --disable-keyserver-helpers, --enable-exec-path, and --with-photo-viewer. * configure.ac: Add --with-photo-viewer to lock the viewer at compile time and --disable-keyserver-helpers and --disable-photo-viewers to allow disabling one without disabling the other. 2002-07-03 David Shaw * configure.ac: Allow setting USE_EXEC_PATH to lock the exec-path to a fixed value. 2002-07-01 Werner Koch * configure.ac: Set version number to 1.1.91. Released 1.1.90. * INSTALL: Replaced by generic install file. * README: Marked as development version and moved most stuff of the old INSTALL file to here. 2002-06-30 Werner Koch * configure.ac: Link W32 version against libwsock32. 2002-06-29 Werner Koch * configure.ac (development_version): New. (HAVE_DEV_RANDOM_IOCTL): Removed test for it; it was never used. * BUGS, AUTHORS: Add a note on how to send security related bug reports. 2002-06-20 David Shaw * NEWS: changes since 1.0.7. * configure.ac: Set new version number (1.1.90), and fix Solaris compiler flags for shared objects. 2002-06-11 David Shaw * configure.ac: Move -lsocket and -lnsl checks before LDAP link tests so they work properly on Solaris. Noted by David Champion. Also, check for the Mozilla LDAP library if the OpenLDAP library check fails. Put -lsocket and -lnsl in NETLIBS rather than LIBS so not all programs are forced to link to them. 2002-06-05 David Shaw * configure.ac: Add a switch for the experimental external HKP keyserver interface. 2002-05-22 Werner Koch * configure.ac: Check for strcasecmp and strncasecmp. Removed stricmp and memicmp checks. 2002-05-08 David Shaw * configure.ac: If LDAP comes up unusable, try #including before giving up. Old versions of OpenLDAP require that. 2002-05-03 David Shaw * configure.ac: In g10defs.h, use \ for the directory separator when HAVE_DOSISH_SYSTEM is on. * configure.ac: Add --disable-exec flag to disable all remote program execution. --disable-exec implies --disable-ldap and --disable-mailto. Also look in /usr/lib for sendmail. If sendmail is not found, do not default - just fail. 2002-04-30 David Shaw * configure.ac: Try and link to a sample LDAP program to check if the LDAP we're about to use is really sane. The most common problem (using a very old OpenLDAP), could be fixed with an extra #include, but this would not be very portable to other LDAP libraries. 2002-04-29 Werner Koch Released 1.0.7. * README: Fixed some minor things. 2002-04-25 Werner Koch * configure.ac: Check for locale.h and setlocale 2002-04-24 David Shaw * Update NEWS with recent changes. 2002-04-19 Werner Koch Released 1.0.6e snapshot. 2002-04-12 Werner Koch * configure.ac: Add a warning note to the definition of the EXTSEP macros. 2002-04-09 Werner Koch * configure.ac (ALL_LINGUAS): Added Czech, Galician and Greek translations. s/es_ES/es/. 2002-03-06 Werner Koch * configure.ac (ALL_LINGUAS): s/pt_PT/pt/ 2002-03-04 David Shaw * Add a AC_DEFINE(_GNU_SOURCE). Since this is always defined in config.h, the various autoconf tests should be tested with it enabled. This also works around a compiler warning caused by a minor header bug in glibc 2.1 that causes fseeko to be defined when building gpg, but not when tested for in configure. 2002-03-03 Werner Koch Release 1.0.6d snapshot. 2002-01-04 David Shaw * NEWS: about symmetric messages and fixed file sizes. 2001-12-22 Werner Koch Released 1.0.6c snapshot. * configure.ac (AH_BOTTOM): Moved EXEC_TEMPFILE_ONLY to here. * acconfig.h: Removed, it should no longer be used. 2001-12-21 David Shaw * Add an acconfig.h to define EXEC_TEMPFILE_ONLY on platforms that can't do fork/exec. 2001-12-21 Werner Koch * Makefile.am (dist-hook): We should also look in include for distfiles. (EXTRA_DIST): Remove VERSION because it is generated by dist-hook. 2001-12-20 David Shaw * configure.ac: replacement function for mkdtemp() 2001-12-19 David Shaw * configure.ac: Check for stat() 2001-12-19 Werner Koch * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Support Cygwin target * configure.ac [CYGWIN32]: Don't build tiger. By Disastry. 2001-12-18 Werner Koch * Makefile.am (SUBDIRS): Add keyserver. (dist-hook): Only look in mpi and scripts for distfiles; this way we don't include those of a stale "make dist" directory. 2001-10-23 Werner Koch Released 1.0.6b snapshot. 2001-10-22 Werner Koch * configure.ac: Fixed for automake 1.5 2001-10-17 Werner Koch * README: Removed note on local_ID. 2001-09-28 Werner Koch * configure.ac: From now on add a string "-cvs" to the version to indicate that this is a pre-release of the given version number. 2001-09-26 Werner Koch * configure.ac [MINGW32]: Switched from wsock.dll to ws2_32.dll. 2001-09-09 Werner Koch * configure.ac: autoconf changed the name of the maintainer mode flag, so that not all warnings where enabled. Fixed that. Reported by Dirk Meyer. 2001-09-07 Werner Koch * configure.ac: Test for strsep(). 2001-09-03 Werner Koch * configure.ac: Removed GDBM tests. 2001-08-23 Werner Koch * configure.in (AC_FUNC_FSEEKO): Add. (AC_CHECK_FUNCS): Remove fseeko. By Paul Eggert . 2001-08-22 Werner Koch * configure.ac (gethrtime): Enhanced the test by running a test program. * INSTALL: Removed the note about Solaris problems because the above test should catch this. 2001-08-20 Werner Koch * acinclude.m4: Add check for plock if mlock is broken. * configure.ac: Use regular tests for -lsocket and -lnsl, more thorough test for gethrtime, allow specifying the path to the zlib library if it is not in the default compiler/linker search path, use ${datadir}. All these test enhancements are by Albert Chin. * configure.ac: Set some compiler flags for dec-osf and hpux. By Tim Mooney. * configure.ac: Create g10defs.h with EXTSEP_S et al. 2001-08-03 Werner Koch * configure.ac (VERSION,PACKAGE): Fixed quoting. 2001-07-26 Werner Koch * configure.ac: Finally got it running with the new autoconf. Had to define PACKAGE and VERSION and to add -I.. to each Makefile.am. 2001-07-09 Werner Koch Migrated to autoconf 2.50. * acinclude.m4: Removed the temporary LFS macros and GNUPG_LINK_FILES. * acconfig.h: Removed * configure.in: Replaced by... * configure.ac: and modified for use with autoconf 2.50, use a literal string for the version number. Replaced GNUPG_LINK_FILES with AC_CONFIG_LINKS and moved some informational messages to the end. * VERSION: Removed. * Makefile.am (DISTCLEANFILES): gettext is better now; no more need to remove the libintl.h symlink. (dist-hook): Create VERSION file. 2001-06-08 Werner Koch * configure.in (DYNLINK_MOD_CFLAGS): Use -shared with dec-osf. Reported by Chris Adams. Merged some cases. 2001-05-29 Werner Koch Released version 1.0.6. 2001-05-28 Werner Koch * configure.in (BUILD_INCLUDED_LIBINTL): Set to no for W32. 2001-04-29 Werner Koch Released version 1.0.5. 2001-04-28 Werner Koch Updated all copyright notices. 2001-04-27 Werner Koch * README: Removed a few outdated paragraphs. 2001-04-17 Werner Koch * acinclude.m4 (GNUPG_CHECK_DOCBOOK_TO_TEXI): New. (GNUPG_CHECK_TYPEDEF): Define _GNU_SOURCE because we will use it anyway. * configure.in: Use it here. * configure.in (ALL_LINGUAS): Add Estonian translation by Toomas Soome. (use_m_debug): Removed --enable-m-debug because it does not work anymore. 2001-04-06 Werner Koch * configure.in (ALL_LINGUAS): Add Turkish translation. Thanks to Nilgun Belma Buguner. 2001-03-18 Werner Koch * configure.in: Hardwire the use of -lsocket for some systems. Thanks to Reinhard Wobst. 2001-03-13 Werner Koch * configure.in: Add copyright notice and -lwsock32. 2001-03-12 Werner Koch * INSTALL: Add a note to VPATH builds. 2001-03-08 Werner Koch * debian/: Applied update from James. Added copyright and license notices to some more files. 2001-01-18 Werner Koch * configure.in: Removed tool definitions for MingW32 2000-11-17 Werner Koch * acinclude.m4 (GNUPG_CHECK_FAQPROG): Do not prinnt the warning. 2000-11-11 Paul Eggert Actually Paul's patches are dated 2000-20-17; I applied them today and merged some ChangeLog entries (wk@gnupg.org). * configure.in (AC_SYS_LARGEFILE): Add. (try_large_file): Remove. All uses removed. (AC_CHECK_FUNCS): Remove fopen64 and fstat64. * acinclude.m4 (AC_SYS_LARGEFILE_TEST_INCLUDES, AC_SYS_LARGEFILE_MACRO_VALUE, AC_SYS_LARGEFILE): New macros, taken from GNU tar. * configure.in (AC_CHECK_FUNCS): Add fseeko. 2000-10-17 Werner Koch * configure.in: Disabled fopen64 checks for Solaris and HPUX. 2000-10-13 Werner Koch * configure.in: Append mpi/mpi-asm-defs.h to g10defs.h 2000-10-09 Werner Koch * acinclude.m4: Changed wording of the faqprog.pl warning. Wed Oct 4 15:50:18 CEST 2000 Werner Koch * configure.in: Set DYNLINK_MOD_CFLAGS for Irix. It seems that Irix needs the -shared flag. In 1.1 we are going to use libtool, so this module stuff will get redesigned anyway. Suggested by Jeff Long. Thu Sep 14 14:20:38 CEST 2000 Werner Koch * acinclude.m4 (GNUPG_CHECK_FAQPROG): New. * configure.in: Test for this. * configure.in (DYNLINK_MOD_CFLAGS): Fix by David Champion. Wed Sep 6 17:55:47 CEST 2000 Werner Koch * configure.in: Check for fstat64 and fopen64 Wed Sep 6 14:59:09 CEST 2000 Werner Koch * configure.in (GNUPG_HOMEDIR): New. Fri Aug 25 16:05:38 CEST 2000 Werner Koch * configure.in: Changes to allow for Solaris random device. By Nils Ellmenreich. (--with-egd-socket): New. Wed Aug 23 19:52:51 CEST 2000 Werner Koch * acinclude.m4 (GNUPG_CHECK_MLOCK): Removed that silly mkdir(). Wed Jul 19 11:26:43 CEST 2000 Werner Koch * configure.in (mingw32): Changes to allow for mingw32msvc Fri Jul 14 10:17:30 CEST 2000 Werner Koch * acinclude.m4 (GNUPG_CHECK_MLOCK): Fixed syntax error in C code. Wed Jul 12 13:32:06 CEST 2000 Werner Koch Version 1.0.2 Fri Jun 9 10:09:52 CEST 2000 Werner Koch * configure.in: Add check for termio.h, wait unctiosn and sigaction. Wed Jun 7 19:19:09 CEST 2000 Werner Koch * acinclude.m4 (MKDIR_TAKES_ONE_ARG): Check some headers. By Gaël Quéri. * configure.in (AM_INIT_AUTOMAKE): Use this now. By Gaël. Mon Jun 5 12:37:43 CEST 2000 Werner Koch * acnclude.m4 (GNUPG_CHECK_EXPORTDYNAMIC): Replacement for GNUPG_CHECK_RDYNAMIC which should handle gcc with non GNU ld nicer. Contributed by Dave Dykstra. * configure.in (GNYPG_CHECK_RDYNAMIC): Replaced by the new check. * configure.in (AC_CHECK_AWK): Moved before the first use of AWK. Suggested by Dave Dykstra. Tue May 30 16:37:55 CEST 2000 Werner Koch Version 1.0.1-ePit-1 Sun May 28 13:55:17 CEST 2000 Werner Koch * acinclude.m4 (GNUPG_SYS_NM_PARSE): Added BSDI support. (GNUPG_CHECK_RDYNAMIC): Ditto. Wed Apr 19 10:57:26 CEST 2000 Werner Koch * acconfig.h (HAVE_MLOCK): Added Wed Mar 22 13:50:24 CET 2000 Werner Koch * acinclude.m4 (GNUPG_CHECK_MLOCK): Changed the way to test for librt. Test suggested by Jeff Long. Fri Mar 17 17:50:25 CET 2000 Werner Koch * acinclude.m4 (GNUPG_CHECK_MLOCK): Do librt check only when we can't link a test program. This way GNU systems don't need to link against linrt. (GNUPG_CHECK_IPC): Fixed use of TRY_COMPILE macro. From Tim Mooney. 2000-03-14 12:07:54 Werner Koch (wk@habibti.openit.de) * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Add support for DJGPP. (GNUPG_CHECK_MLOCK): Check whether mlock sits in librt. * configure.in: Add a test for unisgned long long. Tue Mar 7 18:45:31 CET 2000 Werner Koch * acinclude.m4 (GNUPG_CHECK_RDYNAMIC): Add NetBSD. By Thomas Klausner. * configure.in (DYNLINK_MOD_CFLAGS): Set different for NetBSD. Thu Mar 2 15:37:46 CET 2000 Werner Koch * configure.in: Add check for clock_gettime Wed Feb 23 10:07:57 CET 2000 Werner Koch * configure.in (ALL_LINGUAS): Add nl. Wed Feb 16 16:25:09 CET 2000 Werner Koch * configure.in (ALL_LINGUAS): Add Esperanto. Wed Feb 16 14:09:00 CET 2000 Werner Koch * configure.in (ALL_LINGUAS): Add sv and ja. * AUTHORS: Converted to a more compact format. * INSTALL: Wrote a note about a Solaris problem. Thu Feb 10 17:39:44 CET 2000 Werner Koch * configure.in: Use /usr/local for CFLAGS and LDFLAGS when target is freebsd. By Rémi. Thu Jan 13 19:31:58 CET 2000 Werner Koch * configure.in: Do not set development version when the version has a dash in it. Suggested by Dave Dykstra. Thu Dec 16 10:07:58 CET 1999 Werner Koch * VERSION: Set to 1.0.1. * configure.in: Removed substitution for doc/gph/Makefile. Do all the gcc warning only in maintainer mode. Thu Dec 9 10:31:05 CET 1999 Werner Koch * INSTALL: Add a hint for AIX. By Jos Backus. Sat Dec 4 12:30:28 CET 1999 Werner Koch * configure.in (dlopen): Use CHECK_FUNC for a test of dlopen in libc. Suggested by Alexandre Oliva. (-Wall): Moved the settting of gcc warning options near to the end so that tests don't get confused. Suggested by Paul D. Smith. Mon Nov 22 11:14:53 CET 1999 Werner Koch * BUGS: Replaced content with a link to the online list. Fri Nov 12 20:33:19 CET 1999 Werner Koch * README: Fixed a type and add a note about the gnupg-i18n ML. Thu Oct 28 16:08:20 CEST 1999 Werner Koch * acinclude.m4, configure.in (GNUPG_CHECK_GNUMAKE): New. Sat Oct 9 20:34:41 CEST 1999 Werner Koch * configure.in: Tweaked handling of random modules and removed dummy support for libgcrypt. * Makefile.am: Removed libgcrypt support. * cgrypt/ : Removed. * Makefile.am: Removed libtool. Fri Oct 8 20:32:01 CEST 1999 Werner Koch * configure.in: Fixed quoting in test for development version. * THANKS: Add entries for Michael, Brenno and J Horacio who did very nice Howto documents - I apoligize for forgetting to mention them earlier. Tue Sep 28 20:54:37 CEST 1999 Werner Koch * textfilter.c (copy_clearsig_text) [__MINGW32__): Use CR,LF. Fri Sep 17 12:56:42 CEST 1999 Werner Koch * configure.in: Add "-lcap" when capabilities are requested. Add the conditional CROSS_COMPILING. * Makefile.am: Don't use checks when CROSS_COMPILING. Wed Sep 15 16:22:17 CEST 1999 Werner Koch * configure.in (ALL_LINGUAS): Add pt_PT. * configure.in: Some tweaks for cross compiling under MingW32 * acconfig.h (USE_STATIC_RNDW32): New. Tue Sep 7 17:08:10 CEST 1999 Werner Koch * VERSION: Set to 1.0.0. Mon Sep 6 19:59:08 CEST 1999 Werner Koch * configure.in: Create makefile in doc/gph * acinclude.m4 (GNUPG_FUNC_MKDIR_TAKES_ONE_ARG): New * configure.in: use the above. Thu Sep 2 16:40:55 CEST 1999 Werner Koch * VERSION: Set to 0.9.11. Tue Aug 31 17:20:44 CEST 1999 Werner Koch * configure.in: Minor changes to the OS/2 and Mingw32 system labels. Add a printable name for Hurd. Mon Aug 30 20:38:33 CEST 1999 Werner Koch * configure.in: Some support for DJGPP (Mark Elbrecht) Wed Aug 4 10:34:46 CEST 1999 Werner Koch * VERSION: Set to 0.9.10. Mon Jul 26 09:34:46 CEST 1999 Werner Koch * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): remove init of ac_cv_... * Makefile.am (DISCLEANFILES): New Fri Jul 23 13:53:03 CEST 1999 Werner Koch * VERSION: Set to 0.9.9. * configure.in: Print a notice when rndunix is used. Thu Jul 15 10:15:35 CEST 1999 Werner Koch * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Fixed last modification. 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 Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/COPYING0000644000175000017500000010437412352602640010703 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . gnupg-1.4.20/ChangeLog0000644000175000017500000011340412635457223011425 000000000000002015-12-19 Werner Koch Release 1.4.20. w32: Avoid warning when using newer mingw versions. * g10/tdbio.c (ftruncate): Do not define if already defined. 2015-12-19 Daniel Kahn Gillmor gpg: Add option --weak-digest to gpg and gpgv. * g10/options.h: Add weak_digests linked list to opts. * g10/main.h: Declare weakhash linked list struct and additional_weak_digest() function to insert newly-declared weak digests into opts. * g10/misc.c: (additional_weak_digest): New function. (print_digest_algo_note): Check for deprecated digests. * g10/sig-check.c: (do_check): Reject all weak digests. * g10/gpg.c: Add --weak-digest option to gpg. * doc/gpg.texi: Document gpg --weak-digest option. * g10/gpgv.c: Add --weak-digest option to gpgv. * doc/gpgv.texi: Document gpgv --weak-digest option. 2015-12-19 Werner Koch gpg: Reject signatures made with MD5. * g10/gpg.c: Add option --allow-weak-digest-algos. (main): Set option also in PGP2 mode. * g10/options.h (struct opt): Add flags.allow_weak_digest_algos. * g10/sig-check.c (do_check): Reject MD5 signatures. * tests/openpgp/gpg.conf.tmpl: Add allow_weak_digest_algos. 2015-12-17 Werner Koch gpg: Change default cipher for --symmetric from CAST5 to AES-128. * g10/main.h (DEFAULT_CIPHER_ALGO): Change to AES or CAST5 or 3DES depending on configure options. * g10/gpg.c (main): Set opt.s2k_cipher_algo to DEFAULT_CIPHER_ALGO. 2015-12-17 Daniel Kahn Gillmor Pass DBUS_SESSION_BUS_ADDRESS for gnome3. * g10/passphrase.c (stdenvnames): Add DBUS_SESSION_BUS_ADDRESS. 2015-11-20 Werner Koch gpg: Avoid cluttering stdout with trustdb info in verbose mode. * g10/trustdb.c (validate_keys): Call dump_key_array only in debug mode. 2015-10-01 Werner Koch gpg: Silence a compiler warning. * g10/parse-packet.c (enum_sig_subpkt): Replace hack. 2015-09-17 NIIBE Yutaka po: Update Japanese translation. 2015-09-08 NIIBE Yutaka po: Fix Spanish translation. 2015-09-01 Werner Koch Obsolete option --no-sig-create-check. * cipher/rsa.c (rsa_sign): Verify after sign. * g10/gpg.c (opts): Make --no-sig-create-check a NOP. * g10/options.h (opt): Remove field "no_sig_create_check". * g10/sign.c (do_sign): Do check only for DSA. 2015-06-16 NIIBE Yutaka g10: Fix a race condition initially creating trustdb. * g10/tdbio.c (take_write_lock, tdbio_set_dbname): Fix message. 2015-06-15 NIIBE Yutaka g10: Fix a race condition initially creating trustdb. * g10/tdbio.c (take_write_lock, release_write_lock): New. (put_record_into_cache, tdbio_sync, tdbio_end_transaction): Use new lock functions. (tdbio_set_dbname): Fix the race. (open_db): Don't call dotlock_create. 2015-05-19 NIIBE Yutaka g10: detects public key encryption packet error properly. g10/mainproc.c (proc_pubkey_enc): Only allow relevant algorithms for encryption. g10: Improve handling of no corresponding public key. * g10/getkey.c (get_seckey): Return G10ERR_NO_PUBKEY when it's not exact match. 2015-04-30 NIIBE Yutaka g10: fix cmp_public_key and cmp_secret_keys. * g10/free-packet.c (cmp_public_keys, cmp_secret_keys): Compare opaque data at the first entry of the array when it's unknown algo. * mpi/mpi-cmp.c (mpi_cmp): Backport libgcrypt 1.5.0's semantics. 2015-04-05 Werner Koch gpg: Fix DoS while parsing mangled secret key packets. * g10/parse-packet.c (parse_key): Check PKTLEN before calling mpi_read et al. 2015-03-28 Werner Koch gpg: Remove left-over debug message. * g10/armor.c (check_input): Remove log_debug. 2015-02-27 Werner Koch Release 1.4.19. po: Update German translation. 2015-02-26 David Prévot po: Update French translation. 2015-02-26 Roman Pavlik po: Update Czech translation. 2015-02-26 Frans Spiesschaert po: Update Dutch translation. 2015-02-26 Manuel \"Venturi\" Porras Peralta po: Update Spanish translation. 2015-02-26 Jakub Bogusz po: Update Polish translation. 2015-02-26 Ineiev po: Update Russian translation. 2015-02-26 Yuri Chornoivan po: Update Ukrainian translation. 2015-02-26 Milo Casagrande po: Update Italian translation. 2015-02-26 Jedi Lin Update Chinese (traditional) translation. 2015-02-26 Werner Koch Fix for building without DNS support. * util/cert.c (get_cert) [!USE_DNS_CERT]: Add want_ipgp. po,intl: Update to 0.19.3. Switch to a hash and CERT record based PKA system. * util/pka.c: Rewrite. (get_pka_info): Add arg fprbuflen. Change callers to pass this. * util/strgutil.c (ascii_strlwr): New. * configure.ac: Remove option --disable-dns-pka. (USE_DNS_PKA): Remove ac_define. * g10/getkey.c (parse_auto_key_locate): Always include PKA. Move two functions from g10/ to util/. * g10/misc.c (has_invalid_email_chars, is_valid_mailbox): Move to ... * util/strgutil.c: here. Add new function strconcat. * include/util.h (GNUPG_GCC_A_SENTINEL): New. * util/strgutil.c (do_strconcat, strconcat): New. Add convenience function to hash a buffer. * cipher/sha1.c (sha1_hash_buffer): New. Allow requesting only an IPGP certtype with dns_cert(). * util/cert.c (get_cert): Add arg want_ipgp. Change callers. 2015-02-26 NIIBE Yutaka mpi: Avoid data-dependent timing variations in mpi_powm. * include/mpi.h, mpi/mpiutils.c (mpi_set_cond): New. * mpi/mpi-pow.c (SIZE_PRECOMP): Rename from SIZE_B_2I3. (mpi_powm): Access all data in the table and use mpi_set_cond. 2015-02-23 Werner Koch Protect against NULL return of mpi_get_opaque. * g10/seckey-cert.c (do_check): Call BUG for NULL return of get_opaque. 2015-02-23 Daniel Kahn Gillmor gpg: Fix segv due to NULL value stored as opaque MPI. * g10/build-packet.c (do_secret_key): Check for NULL return from gcry_mpi_get_opaque. * g10/keyid.c (hash_public_key): Ditto. 2015-02-23 Werner Koch gpg: Remove an unused variable. * g10/import.c (import): Remove need_armor. [dkg: rebased to STABLE-BRANCH-1-4] 2015-02-23 Daniel Kahn Gillmor curl-shim: clean up varargs. * keyserver/curl-shim.c (curl_easy_setopt) : ensure that va_end is called. 2015-02-23 Werner Koch gpg: Print better diagnostics for keyserver operations. * g10/armor.c (parse_key_failed_line): New. (check_input): Watch out for gpgkeys_ error lines. * g10/filter.h (armor_filter_context_t): Add field key_failed_code. * g10/import.c (import): Add arg r_gpgkeys_err. (import_keys_internal): Ditto. (import_keys_stream): Ditto. * g10/keyserver.c (keyserver_errstr): New. (keyserver_spawn): Detect "KEY " lines while sending. Get gpgkeys_err while receiving keys. (keyserver_work): Add kludge for better error messages. Use inline functions to convert buffer data to scalars. * include/host2net.h (buf16_to_ulong, buf16_to_uint): New. (buf16_to_ushort, buf16_to_u16): New. (buf32_to_size_t, buf32_to_ulong, buf32_to_uint, buf32_to_u32): New. gpg: Prevent an invalid memory read using a garbled keyring. * g10/keyring.c (keyring_get_keyblock): Whitelist allowed packet types. gpg: Fix a NULL-deref in export due to invalid packet lengths. * g10/build-packet.c (write_fake_data): Take care of a NULL stored as opaque MPI. gpg: Fix a NULL-deref due to empty ring trust packets. * g10/parse-packet.c (parse_trust): Always allocate a packet. gpg: Limit the size of key packets to a sensible value. * g10/parse-packet.c (MAX_KEY_PACKET_LENGTH): New. (MAX_UID_PACKET_LENGTH): New. (MAX_COMMENT_PACKET_LENGTH): New. (MAX_ATTR_PACKET_LENGTH): New. (parse_key): Limit the size of a key packet to 256k. (parse_user_id): Use macro for the packet size limit. (parse_attribute): Ditto. (parse_comment): Ditto. gpg: Allow predefined names as answer to the keygen.algo prompt. * g10/keygen.c (ask_algo): Add list of strings. gpg: Print a warning if the subkey expiration may not be what you want. * g10/keyedit.c (subkey_expire_warning): New. keyedit_menu): Call it when needed. 2015-02-11 Werner Koch Use ciphertext blinding for Elgamal decryption. * cipher/elgamal.c (USE_BLINDING): New. (decrypt): Rewrite to use ciphertext blinding. 2015-01-19 Werner Koch Modernize to automake 1.14. * Makefile.am (AUTOMAKE_OPTIONS): Move to ... * configure.ac (AM_INIT_AUTOMAKE): here and add serial-tests. * keyserver/Makefile.am: Replace INCLUDES by AM_CPPFLAGS. * mpi/Makefile.am: Ditto. * util/Makefile.am: Ditto. * keyserver/Makefile.am: Ditto. Adjusted other things. * m4/intl.m4, m4/po.m4: Use autoconf's AC_PROG_MKDIR_P. Fix a problem with select and high fds. * cipher/rndlinux.c (rndlinux_gather_random): Check fd before using FD_SET. 2015-01-13 Werner Koch doc: Formatting fixes. * doc/gpl.texi: Fix enumerate and re-indent examples. 2015-01-13 Daniel Kahn Gillmor avoid future chance of using uninitialized memory. * util/iobuf.c: (iobuf_open): initialize len 2015-01-13 Werner Koch doc: Fix memory leak in yat2m. * doc/yat2m.c (write_th): Free NAME. gpg: Fix possible read of unallocated memory. * g10/parse-packet.c (can_handle_critical): Check content length before calling can_handle_critical_notation. 2015-01-09 Werner Koch scd: Fix possibly inhibited checkpin of the admin pin. * scd/app-openpgp.c (do_check_pin): Do not check a byte of a released buffer. 2015-01-08 Joshua Rogers scd: fix get_public_key for OpenPGPcard v1.0. * scd/app-openpgp.c (get_public_key): correctly close 'fp' upon use. 2014-12-12 NIIBE Yutaka gpg: release DEK soon after its use. * g10/keygen.c (generate_subkeypair): Release DEK soon. 2014-11-24 Werner Koch gpg: Fix use of uninit.value in listing sig subpkts. * g10/parse-packet.c (dump_sig_subpkt): Print regex subpacket sanitized. gpg: Fix off-by-one read in the attribute subpacket parser. * g10/parse-packet.c (parse_attribute_subpkts): Check that the attribute packet is large enough for the subpacket type. gpg: Fix a NULL-deref for invalid input data. * g10/mainproc.c (proc_encrypted): Take care of canceled passpharse entry. 2014-11-14 Werner Koch gpg: Make the use of "--verify FILE" for detached sigs harder. * g10/openfile.c (open_sigfile): Factor some code out to ... (get_matching_datafile): new function. * g10/plaintext.c (hash_datafiles): Do not try to find matching file in batch mode. * g10/mainproc.c (check_sig_and_print): Print a warning if a possibly matching data file is not used by a standard signatures. 2014-11-12 Werner Koch gpg: Add import option "keep-ownertrust". * g10/options.h (IMPORT_KEEP_OWNERTTRUST): New. * g10/import.c (parse_import_options): Add "keep-ownertrust". (import_one): Act upon new option. 2014-10-03 Werner Koch mpi: Fix compiler warning. * mpi/mpi-inv.c (mpi_invm): Do not return a value. 2014-10-03 Daniel Kahn Gillmor gpg: Add build and runtime support for larger RSA keys. * configure.ac: Added --enable-large-secmem option. * g10/options.h: Add opt.flags.large_rsa. * g10/gpg.c: Contingent on configure option: adjust secmem size, add gpg --enable-large-rsa, bound to opt.flags.large_rsa. * g10/keygen.c: Adjust max RSA size based on opt.flags.large_rsa * doc/gpg.texi: Document --enable-large-rsa. 2014-09-29 Werner Koch doc: Final update from master (gnupg 2.1) * doc/Makefile.am (sources_from_trunk): Remove. (update-source): Make it a dummy. * doc/gpg.texi: Update. * doc/yat2m.c: Update. Allow use of --debug-level=LEVEL without '='. * g10/gpg.c (opts): Fix "debug-level". 2014-09-11 Werner Koch mpi: Improve mpi_invm to detect bad input. * mpi/mpi-inv.c (mpi_invm): Return 0 for bad input. 2014-08-20 Werner Koch mpi: Suppress set-but-unused-variables warnings. * include/types.h (GNUPG_GCC_ATTR_UNUSED): Define for gcc >= 3.5. * mpi/mpih-div.c (mpihelp_divmod_1, mpihelp_mod_1): Mark dummy as unused. * mpi/mpi-internal.h (UDIV_QRNND_PREINV): Mark _ql as unused. Fix strict-alias warnings for rijndael.c. * cipher/rijndael.c (do_setkey, prepare_decryption): Use u32_a_t cast. gpg: Allow compressed data with algorithm 0. * g10/mainproc.c (proc_compressed): Remove superfluous check for an algorithm number of 0. 2014-08-06 Werner Koch gpg: Fix regression due to the keyserver import filter. * g10/keyserver.c (keyserver_retrieval_filter): Change args. Rewrite to take subpakets in account. * g10/import.c (import_one, import_secret_one): Pass keyblock to filter. Add kbnode_t for easier backporting. * g10/global.h (kbnode_t): New. 2014-06-30 Werner Koch Release 1.4.18. Limit keysize for unattended key generation to useful values. * g10/keygen.c (gen_elg): Enforce keysize 1024 to 4096. (gen_rsa): Enforce keysize 1024 to 4096. (gen_dsa): Enforce keysize 768 to 3072. Make screening of keyserver result work with multi-key commands. * g10/keyserver.c (ks_retrieval_filter_arg_s): new. (keyserver_retrieval_filter): Use new struct and check all descriptions. (keyserver_spawn): Pass filter arg suing the new struct. 2014-06-23 Werner Koch Release 1.4.17. doc: Update from master. Fix syntax error introduced with 60bd6488. * g10/apdu.c (pcsc_dword_t): Fix syntax error. 2014-06-23 Stefan Tomanek Screen keyserver responses. * g10/main.h: Typedef import_filter for filter callbacks. * g10/import.c (import): Add filter callbacks to param list. (import_one): Ditto. (import_secret_one): Ditto. (import_keys_internal): Ditto. (import_keys_stream): Ditto. * g10/keyserver.c (keyserver_retrieval_filter): New. (keyserver_spawn): Pass filter to import_keys_stream() 2014-06-23 Werner Koch Print hash algorithm in sig records. * g10/keylist.c (list_keyblock_colon): Print field 16. Remove useless diagnostic in MDC verification. * g10/encr-data.c (decrypt_data): Do not distinguish between a bad MDC packet header and a bad MDC. intl: Fix for uClibc. * intl/localename.c (gl_locale_name_thread_unsafe): Take care of uCLIBC. PC/SC cleanup. * g10/apdu.c (pcsc_dword_t): New. It was named as DWORD (double-word) when a word was 16-bit. (struct reader_table_s): Fixes for types. (struct pcsc_readerstate_s) [__APPLE__]: Enable #pragma pack(1). Throughout: Fixes for types. gpg: Use more specific reason codes for INV_RECP. * g10/pkclist.c (build_pk_list): Use more specific reasons codes for INV_RECP. doc: Remove outdated Russian man page. * configure.ac (DOCBOOK_TO_MAN): Remove. * doc/gpg.ru.sgml: Remove. * doc/Makefile.am: Remove all gpg.ru related code. 2014-06-20 Werner Koch gpg: Avoid infinite loop in uncompressing garbled packets. * g10/compress.c (do_uncompress): Limit the number of extra FF bytes. 2014-03-06 Werner Koch gpg: Need to init the trustdb for import. * g10/trustdb.c (clear_ownertrusts): Init trustdb. 2014-01-23 Werner Koch Support building using the latest mingw-w64 toolchain. * acinclude.m4 (GNUPG_SYS_SYMBOL_UNDERSCORE): Change mingw detection. 2013-12-13 Werner Koch Release 1.4.16. 2013-12-11 Werner Koch Change --show-session-key to print the session key earlier. * g10/mainproc.c (proc_encrypted): Move show_session_key code to ... * g10/decrypt-data.c (decrypt_data): here. 2013-12-10 Werner Koch Update config.{guess,sub} and some copyright notices. * scripts/config.guess, scripts/config.sub: Update to version 2013-11-29. 2013-12-05 Werner Koch Prepare for newer automakes which default to parallel tests. * checks/Makefile.am: Add a list of test dependencies. 2013-12-03 Werner Koch Normalize the MPIs used as input to secret key functions. * cipher/rsa.c (secret): Normalize the INPUT. (rsa_decrypt): Pass reduced data to secret. * cipher/elgamal.c (decrypt): Normalize A and B. * cipher/dsa.c (sign): Normalize HASH. Use blinding for the RSA secret operation. * cipher/random.c (randomize_mpi): New. * g10/gpgv.c (randomize_mpi): New stub. * cipher/rsa.c (USE_BLINDING): Define macro. (secret): Implement blinding. 2013-11-27 Werner Koch gpg: Change armor Version header to emit only the major version. * g10/options.h (opt): Rename field no_version to emit_version. * g10/gpg.c (main): Init opt.emit_vesion to 1. Change --emit-version to bump up opt.emit_version. * g10/armor.c (armor_filter): Implement different --emit-version values. 2013-10-18 Werner Koch mpi: mpi-pow improvements. * mpi/mpi-pow.c (USE_ALGORITHM_SIMPLE_EXPONENTIATION): New. (mul_mod) [!USE_ALGORITHM_SIMPLE_EXPONENTIATION]: New. (mpi_powm) [!USE_ALGORITHM_SIMPLE_EXPONENTIATION]: New implementation of left-to-right k-ary exponentiation. Print the keyid for key packets with --list-packets. * g10/parse-packet.c (parse_key): Add keyid printing. 2013-10-11 Werner Koch mpi: Fix syntax error for mips64 and gcc < 4.4. * mpi/longlong.h [__mips && gcc < 4.4]: Fix cpp syntax error. gpg: Do not require a trustdb with --always-trust. * g10/tdbio.c (tdbio_set_dbname): Add arg R_NOFILE. * g10/trustdb.c (trustdb_args): Add field no_trustdb. (init_trustdb): Set that field. (revalidation_mark): Take care of a nonexistent trustdb file. (read_trust_options): Ditto. (get_ownertrust): Ditto. (get_min_ownertrust): Ditto. (update_ownertrust): Ditto. (update_min_ownertrust): Ditto. (clear_ownertrusts): Ditto. (cache_disabled_value): Ditto. (check_trustdb_stale): Ditto. (get_validity): Ditto. * g10/gpg.c (main): Do not create a trustdb with most commands for trust-model always. 2013-10-04 Werner Koch Release 1.4.15. doc: Update from master. gpg: Print a "not found" message for an unknown key in --key-edit. * g10/keyedit.c (keyedit_menu): Print message. gpg: Protect against rogue keyservers sending secret keys. * g10/options.h (IMPORT_NO_SECKEY): New. * g10/keyserver.c (keyserver_spawn, keyserver_import_cert): Set new flag. * g10/import.c (import_secret_one): Deny import if flag is set. 2013-10-04 Daniel Kahn Gillmor gpg: Allow setting of all zero key flags. * g10/keygen.c (do_add_key_flags): Do not check for empty key flags. (cherry picked from commit b693ec02c467696bf9d7324dd081e279f9965151) (cherry picked from commit dd868acb0d13a9f119c0536777350a6c237a66a1) 2013-10-04 Werner Koch gpg: Distinguish between missing and cleared key flags. * include/cipher.h (PUBKEY_USAGE_NONE): New. * g10/getkey.c (parse_key_usage): Set new flag. keyserver: Allow use of cURL's default CA store. * keyserver/gpgkeys_curl.c (main): Set CURLOPT_CAINFO only if a file has been given. * keyserver/gpgkeys_hkp.c (main): Ditto. gpg: Limit the nesting level of I/O filters. * until/iobuf.c (MAX_NESTING_FILTER): New. (iobuf_push_filter2): Limit the nesting level. 2013-10-02 Werner Koch gpg: Fix bug with deeply nested compressed packets. * g10/mainproc.c (MAX_NESTING_DEPTH): New. (proc_compressed): Return an error code. (check_nesting): New. (do_proc_packets): Check packet nesting depth. Handle errors from check_compressed. 2013-09-16 Werner Koch Fix bug in mpi_tdiv_q_2exp. * mpi/mpi-internal.h (MPN_COPY_INCR): Make it work. 2013-08-30 Werner Koch gpg: Use 2048 as the default keysize in batch mode. * g10/keygen.c (gen_elg, gen_dsa, gen_rsa): Set default keysize to 2048. 2013-08-02 Werner Koch gpg: No need to create a trustdb when encrypting with --always-trust. * g10/gpg.c (main): Special case setup_trustdb for --encrypt. 2013-07-25 Werner Koch Release 1.4.14. 2013-07-25 Jedi Lin Update Chinese translation. 2013-07-25 Werner Koch Update to modern beta release numbering scheme. * configure.ac: s/my_/mym4_/. Add new release building code. Prepare for a forthcoming new algorithm id. * include/cipher.h (PUBKEY_ALGO_ECC): New. * g10/keyid.c (pubkey_letter): Add letter 'C'. Mitigate a flush+reload cache attack on RSA secret exponents. * mpi/mpi-pow.c (mpi_powm): Always perform the mpi_mul for exponents hold in secure memory. Fix git revision parsing. * configure.ac: Use git rev-parse to retrieve the revision. 2013-07-16 NIIBE Yutaka gpg: fix previous change. * g10/gpgv.c: Fix void dotlock_remove_lockfiles. 2013-07-12 NIIBE Yutaka gpg: signal handling fix. * include/dotlock.h (dotlock_remove_lockfiles_reclaim): New. (dotlock_destroy, dotlock_remove_lockfiles): Add a flag to reclaim memory or not. * util/dotlock.c (dotlock_create): Use dotlock_remove_lockfiles_reclaim for atexit. (dotlock_destroy_unix, dotlock_destroy) (dotlock_remove_lockfiles): Add a reclaim flag. (dotlock_remove_lockfiles_reclaim): New. * g10/signal.c (got_fatal_signal): Disable flag of reclaim memory to avoid non-async-face call. * g10/keydb.c (maybe_create_keyring): Follow the API change. * g10/gpgv.c: Follow the API change. 2013-03-03 David Shaw Differentiate between success (full or partial), not-found, and failure. * keyserver/gpgkeys_hkp.c (get_key): Use curl_easy_setinfo to get the HTTP status code so we can tell the difference between a successful retrieval, a partial retrieval, a not-found, or a server failed. Emulate curl_easy_getinfo and CURLINFO_RESPONSE_CODE in curl-shim. * keyserver/curl-shim.h, keyserver/curl-shim.c (curl_easy_getinfo): New. Return the HTTP status code for the last transfer. 2013-01-30 David Shaw Fix DNS check for recent OS X releases. * configure.ac: OS X now needs BIND_8_COMPAT and -lresolv 2013-01-11 Werner Koch Automake 1.13 compatibility fix. * configure.ac: s/AM_CONFIG_HEADER/AC_CONFIG_HEADERS/. Fix idea.c for big endian CPUs. * cipher/idea.c: Replace use of WORDS_BIGENDIAN by BIG_ENDIAN_HOST. 2013-01-11 Christian Aistleitner Fix honoring --cert-digest-algo when recreating a cert. * g10/sign.c (update_keysig_packet): Override original signature's digest algo in hashed data. 2012-12-20 Werner Koch Release 1.4.13. Last fix for the SRV record patches. * keyserver/gpgkeys_hkp.c (srv_replace): Make sure SRVCOUNT is always initialized. Update manuals from master. * doc/Makefile.am (update-source): Copy from Git master. (update-source-from-gnupg-2): Remove. * doc/gpg.texi: Fix minor typos and grammar bugs. * doc/yat2m.c: Change diagnostics to updated coding standards. Update config.{guess,sub} to version 2012-07-31. * scripts/config.guess, scripts/config.sub: Update. 2012-12-20 Joe Hansen po: Update Danish translation. * po/da.po: Update. 2012-12-20 Werner Koch gpg: Suppress "public key already present" in quiet mode. * g10/pkclist.c (build_pk_list): Print two diagnostics only in non-quiet mode. Import only packets which are allowed in a keyblock. * g10/import.c (valid_keyblock_packet): New. (read_block): Store only valid packets. 2012-12-19 David Shaw Issue 1447: Pass proper Host header and SNI when SRV is used with curl. * configure.ac: Check for inet_ntop. * m4/libcurl.m4: Provide a #define for the version of the curl library. * keyserver/gpgkeys_hkp.c (main, srv_replace): Call getaddrinfo() on each target. Once we find one that resolves to an address (whether IPv4 or IPv6), pass it into libcurl via CURLOPT_RESOLVE using the SRV name as the "host". Force the HTTP Host header to be the same. Backported from 6b1f71055ebab36989e2089cfde319d2ba40ada7 * keyserver/gpgkeys_hkp.c (main): Only default try-dns-srv to on if we have SRV support in the first place. Backported from 732f3d1d4786239db5f31f82cc04ec79326cc13c Part of issue 1447: Pass proper Host header when SRV is used. * common/http.c (send_request, connect_server): Set proper Host header (no :port, host is that of the SRV) when SRV is used in the curl-shim. Backported from cbe98b2cb1e40ba253300e604996681ae191e363 2012-12-19 Werner Koch Fix last commit. * util/http.c (connect_server): Bump SRVINDEX and not SRV. 2012-12-19 David Shaw Fix issue 1446: honor ports given in SRV responses. * common/http.c (send_request, connect_server, http_open): Use a struct srv instead of a single srvtag so we can pass the chosen host and port back to the caller. (connect_server): Use the proper port in the HAVE_GETADDRINFO case. * keyserver/curl-shim.c (curl_easy_perform): Use struct srv and log chosen host and port. * keyserver/gpgkeys_hkp.c (main): Properly take the port given by SRV. Backported from ba9e974f1fd85b3dbbfb5e26d7a14f71d07c7cf2 2012-12-18 Werner Koch Add meta option ignore-invalid-option. * util/argparse.c (iio_item_def_s, IIO_ITEM_DEF): New. (initialize): Init field IIO_LIST. (ignore_invalid_option_p): New. (ignore_invalid_option_add): New. (ignore_invalid_option_clear): New. (optfile_parse): Implement meta option. 2012-12-15 Werner Koch Fix potential heap corruption in "gpg -v --version" * g10/gpg.c (build_list): Rewrite to cope with buffer overflow in certain locales. * util/membuf.c (put_membuf_str): New. (get_membuf): Make LEN optional. 2012-12-14 Werner Koch Workaround for a gettext problem during "make distcheck". * configure.ac: Add comment string "GNU gnupg". gettext: Upgrade to version 0.18. * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.18. * po/Makefile.in.in: Upgrade to gettext-0.18. Keep option --previous of msgmerge. * intl/: Upgrade to gettext-0.18. * m4/gettext.m4: Upgrade to gettext-0.18.1. * m4/iconv.m4: Upgrade to gettext-0.18.1. * m4/lib-ld.m4: Upgrade to gettext-0.18.1. * m4/lib-link.m4: Upgrade to gettext-0.18.1. * m4/lib-prefix.m4: Upgrade to gettext-0.18.1. * m4/nls.m4: Upgrade to gettext-0.18.1. * m4/po.m4: Upgrade to gettext-0.18.1. * m4/progtest.m4: Upgrade to gettext-0.18.1. * m4/codeset.m4: Upgrade to gettext-0.18.1. * m4/fcntl-o.m4: New file, from gettext-0.18.1. * m4/glibc2.m4: Upgrade to gettext-0.18.1. * m4/glibc21.m4: Upgrade to gettext-0.18.1. * m4/intdiv0.m4: Upgrade to gettext-0.18.1. * m4/intl.m4: Upgrade to gettext-0.18.1. * m4/intldir.m4: Upgrade to gettext-0.18.1. * m4/intlmacosx.m4: Upgrade to gettext-0.18.1. * m4/intmax.m4: Upgrade to gettext-0.18.1. * m4/inttypes_h.m4: Upgrade to gettext-0.18.1. * m4/inttypes-pri.m4: Upgrade to gettext-0.18.1. * m4/lcmessage.m4: Upgrade to gettext-0.18.1. * m4/lock.m4: Upgrade to gettext-0.18.1. * m4/longlong.m4: Upgrade to gettext-0.18.1. * m4/printf-posix.m4: Upgrade to gettext-0.18.1. * m4/size_max.m4: Upgrade to gettext-0.18.1. * m4/stdint_h.m4: Upgrade to gettext-0.18.1. * m4/threadlib.m4: New file, from gettext-0.18.1. * m4/uintmax_t.m4: Upgrade to gettext-0.18.1. * m4/visibility.m4: Upgrade to gettext-0.18.1. * m4/wchar_t.m4: Upgrade to gettext-0.18.1. * m4/wint_t.m4: Upgrade to gettext-0.18.1. * m4/xsize.m4: Upgrade to gettext-0.18.1. * m4/Makefile.am (EXTRA_DIST): Add the new files. 2012-12-13 Werner Koch Support NetBSD m68K ELF targets. * mpi/config.links (m68k*-*-netbsdelf): New. 2012-12-13 NIIBE Yutaka Card: Fix the process of writing key or generating key. * g10/app-openpgp.c (store_fpr): Flush KEY-FPR and KEY-TIME. 2012-11-30 David Shaw Fix mksamplekeys awk to not leave out the whitespace altogether. Refresh sample keys. * mksamplekeys: Tweak awk script to not add trailing whitespace to blank lines (makes git pre-commit hook unhappy). * samplekeys.asc: Refresh. 2012-11-29 David Shaw The keyserver search menu should honor --keyid-format. * keyserver.c (print_keyrec): Honor --keyid-format when getting back full fingerprints from the keyserver (the comment in the code was correct, the code was not). 2012-11-08 Werner Koch tests: Skip secret key import check in SELinux mode. * configure.ac (ENABLE_SELINUX_HACKS): New am_conditional. * checks/Makefile.am (prepared.stamp): Replace by defs-config.inc. (defs-config.inc): Create and set enable_selinux_hacks variable. * checks/defs.inc: Include defs-config.inc. * checks/armor.test: Do not run the last test in selinux mode. GnuPG-bug-id: 1390 de.po: Grammar fix. * po/de.po: Grammar fix by Daniel Leidert Create off-line card encryption key with the right size. * g10/keygen.c (gen_card_key_with_backup): Get the size of the key from the card. Support the not anymore patented IDEA cipher algorithm. * cipher/idea.c: New. Take from Libgcrypt master and adjust for direct use in GnuPG. * cipher/idea-stub.c: Remove. * cipher/Makefile.am: Add idea.c and remove idea-stub.c rules. * configure.ac: Remove idea-stub code. * g10/gpg.c (check_permissions): Remove code path for ITEM==2. (main): Make --load-extension a dummy option. * g10/keygen.c (keygen_set_std_prefs): Include IDEA only in PGP2 compatibility mode. * g10/misc.c (idea_cipher_warn): Remove. Also remove all callers. * g10/seckey-cert.c (do_check): Remove emitting of STATUS_RSA_OR_IDEA. * g10/status.c (get_status_string): Remove STATUS_RSA_OR_IDEA. * g10/status.h (STATUS_RSA_OR_IDEA): Remove. 2012-11-07 Werner Koch Fix usage of dlerror to conform to POSIX. * cipher/idea-stub.c: Clear last error before dlsym. Improve handling of random_seed read errors. * cipher/random.c (read_seed_file): Distinguish between errors and short reads. 2012-11-06 Thomas Klausner Handle systems which have uint64_t but not the UINT64_C macro. * include/types.h (U64_C) [!UINT64_C]: Add simple replacement. 2012-11-06 Werner Koch Fix extern inline use for gcc > 4.3 in c99 mode. * mpi/mpi-inline.h [!G10_MPI_INLINE_DECL]: Take care of changed extern inline semantics in gcc. 2012-08-24 Werner Koch Update translations to adjust for typo fixes. 2012-08-24 David Prévot Update French translation. * po/fr.po: Update. 2012-08-24 Werner Koch Fix typos spotted during translations. * g10/gpg.c: uppercase after Syntax * util/secmem.c (print_warn): Update URL. 2012-08-24 David Prévot Keep previous msgids of translated messages. * po/Makefile.in.in: Use option --previous with msgmerge. 2012-04-29 Werner Koch With --quiet do not print reading passphrase from fd message. Fix for bug#1403. * g10/passphrase.c (read_passphrase_from_fd): Act on --quiet. 2012-02-01 David Shaw Honor --cert-digest-algo when recreating a cert. * g10/sign.c (update_keysig_packet): Honor --cert-digest-algo when recreating a cert. This is used by various things in --edit-key like setpref, primary, etc. Suggested by Christian Aistleitner. 2012-01-30 Werner Koch Release 1.4.12. Fix ChangeLog creation rule. * Makefile.am (gen-ChangeLog): Use set -e. Fixes commit b99e77d5. Add Ukrainian translation. * po/uk.po: New. * po/LINGUAS: Add uk.po. Update GNU helper files. * scripts/config.guess, scripts/config.rpath: Update to version 2012-01-01. * scripts/config.rpath, scripts/compile, scripts/depcomp: Update to modern version. * scripts/texinfo.tex: Update from current gnulib. Update documentation. * doc/gpg.texi, doc/specify-user-id.texi, doc/yat2m.c: Update from current GnuPG master (commit bdde44a). Require gitlog-to-changelog to be installed. * Makefile.am (GITLOG_TO_CHANGELOG): New. (gen-ChangeLog): Use installed version of gitlog-to-changelog. 2012-01-20 Werner Koch Do not copy default merge commit log entries into the ChangeLog. * scripts/gitlog-to-changelog: Skip merge commits. 2012-01-20 David Shaw Changes to --min-cert-level should cause a trustdb rebuild (issue 1366) * g10/gpgv.c, g10/trustdb.c (read_trust_options): Add min_cert_level * g10/trustdb.c (check_trustdb_stale): Request a rebuild if pending_check_trustdb is true (set when we detect a trustdb parameter has changed). * g10/keylist.c (public_key_list): Use 'l' in the "tru" with-colons listing for min_cert_level not matching. * g10/tdbio.c (tdbio_update_version_record, create_version_record, tdbio_db_matches_options, tdbio_dump_record, tdbio_read_record, tdbio_write_record): Add a byte for min_cert_level in the tdbio version record. 2012-01-16 Werner Koch w32: Always build with -fno-omit-frame-pointer. This is required due to a bug in the mingw32 runtime. * configure.ac (HAVE_W32_SYSTEM): Force use of -fno-omit-frame-pointer. w32: Allow passing a relative name for the tarball. * scripts/mk-w32-dist: Prepend PWD to TARBALL. Automate W32 installer building. * doc/README.W32: Document new installer build procedure. * scripts/autogen.sh: Pass all args to the installer (regression fix). * scripts/conf-w32/README: Remove from repo. * scripts/conf-w32/bzip2-1.diff: Remove from repo. * scripts/mk-w32-dist: Rewrite. * scripts/w32installer.nsi [WITH_PATCHES]: Use constant patch file name. 2012-01-13 Werner Koch Add a DECRYPTION_INFO status. * g10/status.h (STATUS_DECRYPTION_INFO): New. * g10/status.c (get_status_string): Add new status string. * g10/encr-data.c: Include status.h. (decrypt_data): Print STATUS_DECRYPTION_INFO. Include bzip2 code to ease building for W32. * bzlib/: Include bzip2 code. * configure.ac [W32]: Force use of included bzip2 code. * scripts/autogen.sh <--build-w32>: Do not pass --with-bzip option. * Makefile.am (SUBDIRS): Add bzip. Use it only under W32. 2012-01-12 Werner Koch Allow building with the 32 bit mingw-w64 toolchain. * scripts/autogen.sh <--build-w32>: Support i686-w64-mingw32 and use it by default if installed. * keyserver/gpgkeys_ldap.c (my_ldap_start_tls_s): Define macro depending on compiler version. (main): Use new macro. * util/miscutil.c [!HAVE_TIMEGM]: Add prototype for the timegm autoconf replacement function. gpg: Remove unused fields from a trust data structure. The functions tdbio_read_record and tdbio_write_record control the actual on-disk format. Thus there is no need to keep reserved fields in the internal data structure. * g10/tdbio.h (struct trust_record): Remove reserved fields. Typo fixes and comment re-formatting. 2012-01-11 David Shaw Distribute dotlock.h. 2012-01-10 David Shaw Refresh sample keys. 2012-01-10 Werner Koch Allow use of a standard space separated fingerprint. We allow a single or a double space in the middle of the fingerprint to help with c+p fingerprints from an HTML pages which are not being enclosed in a "pre" tag. * g10/getkey.c (classify_user_id): Check for space separated GPG fingerprint. Replace file locking by the new portable dotlock code. * include/dotlock.h: New. From current gnupg master. * util/dotlock.c: Ditto. Include util.h. The major changes done in master are: Factor Unix and W32 specific code out into specific functions. Define HAVE_POSIX_SYSTEM. Rearrange some functions. (disable_dotlock): Rename to dotlock_disable. (create_dotlock): Rename to dotlock_create and add a dummy arg. (destroy_dotlock): Rename to dotlock_destroy. (make_dotlock): Rename to dotlock_take. (release_dotlock): Rename to dotlock_release. (remove_lockfiles): Rename to dotlock_remove_lockfiles. Update copyright years. * util/argparse.c (default_strusage): Update printed copyright year. Use gcc pragmas to suppress some warnings. * configure.ac (AH_BOTTOM): Add GNUPG_GCC_VERSION macro. * util/estream-printf.c (pr_float): Use new gcc pragma to ignore a warning about a non-literal format. * util/miscutil.c (asctimestamp): Ditto. * cipher/md.c (md_stop_debug): Use new gcc pragme to ignore a warning * about a set but unused variable. Update gitlog-to-changelog. * scripts/gitlog-to-changelog: Update from gnupg master. * Makefile.am (gen-ChangeLog): Add new options. * scripts/autogen.sh: Fix typo in URL. Reported by Gilles Espinasse. 2011-12-28 David Shaw Use the longest key ID available when talking to a HKP server. This is issue 1340. Now that PKSD is dead, and SKS supports long key IDs, this is safe to do. Patch from Daniel Kahn Gillmor . 2011-12-02 Werner Koch Generate the ChangeLog from commit logs. * scripts/gitlog-to-changelog: New script. Taken from gnulib. * scripts/git-log-fix: New file. * scripts/git-log-footer: New file. * scripts/git-hooks/commit-msg: New script. * autogen.sh: Install commit-msg hook for git. * doc/HACKING: Describe the ChangeLog policy. * Makefile.am (EXTRA_DIST): Add new files. (gen-ChangeLog): New. (dist-hook): Run gen-ChangeLog. Rename all ChangeLog files to ChangeLog-2011. * ChangeLog: New file. 2011-12-01 Werner Koch NB: Changes done before December 1st, 2011 are described in per directory files named ChangeLog-2011. See doc/HACKING for details. ----- Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Copying and distribution of this file and/or the original GIT commit log messages, with or without modification, are permitted provided the copyright notice and this notice are preserved. gnupg-1.4.20/BUGS0000644000175000017500000000076312635262326010337 00000000000000Please see http://bugs.gnupg.org/ for a list of known bugs in GnuPG. We don't distribute this list with the package any longer because a more current one with notes in which version the bug is fixed can be found online. For security related bugs, please contact which directs mails only to the core developers. If you need to encrypt the report you should use the public keys of the maintainer and of 2 or 3 other active developers (consult the ChangeLog and AUTHORS). gnupg-1.4.20/TODO0000644000175000017500000000627212635262326010345 00000000000000 -*- org -*- * Using an expired key for signing should give an error message "expired key" and not "unusable key'. Furthermore the error should also be thrown when the default key has expired. Reported by Eric.VanBuggenhaut add AdValvas.be. * pause scrolling help in --edit-key and elsewhere. * getkey does not return revoked/expired keys - therefore it is not possible to override it. * Selection using +wordlist does not work. What about adding a feature -word to the +wordlist search mode. * Check the changes to the gpg random gatherer on all W32 platforms. * Show more info does not work from edit->trust. We should give more information on the user ID under question while running --update-trustdb. * Check that no secret temporary results are stored in the result parameter of the mpi functions. We have already done this for mpi-mul.c * We need another special packet at the end of a clearsign message to mark it's end and allow for multiple signature for one message. And add a real grammar to the code in mainproc.c * Fix the bug in the mips assembler code * Add a way to show the fingerprint of an key signator's keys * Concatenated encryption messages don't work corectly - only the first one is processed. * Add option to put the list of recipients (from the encryption layer) into the signatures notation data. * --disable-asm should still assemble _udiv_qrnnd when needed * the pubkey encrypt functions should do some sanity checks. * "gpg filename.tar.gz.asc" should work like --verify (-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. However the problem is that we consider the message transpatrent and don't have any indication of the used character set. To implement this feature we need to make sure that all output is plain 7 bit ascii but given that we need to print a user name, this does not make sense at all. The only way this can be implemented is by assuming that the message is encoded in utf8 and hope tht everyone starts to use utf8 instead of latin-1 or whatever RSN. Hmmm, I myself should start with this. * keyflags don't distinguish between {certify,signature}-only. * cat foo | gpg --sign | gpg --list-packets Does not list the signature packet. * When presenting the result of a verification show the user ID with the highest trust level first instead of the primary one. * allow the use of option in gpg.conf. * Add the NEWSIG status. * Delete a card key as well as a wiping. * passphrase_to_dek does not return NULL after a cancel. There is no way to issue a cancel when unsing the CLI - this would however be a Good Thing when used with mixed symkey/pubkey encrypted messages. See comment in mainproc.c:proc_symkey_enc. Note, that this has been fixed in 2.0.2 - we should backport it. * Backport from GnuPG-2: 2009-09-04 Werner Koch * keyedit.c (menu_select_uid): Use IDX ==-1 t select all. (menu_select_key): Ditto. (keyedit_menu) : Allow '*' to select all. gnupg-1.4.20/configure0000755000175000017500000207661412635457154011602 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for gnupg 1.4.20. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: http://bugs.gnupg.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='gnupg' PACKAGE_TARNAME='gnupg' PACKAGE_VERSION='1.4.20' PACKAGE_STRING='gnupg 1.4.20' PACKAGE_BUGREPORT='http://bugs.gnupg.org' PACKAGE_URL='' ac_unique_file="g10/gpg.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" gt_needs= ac_header_list= gl_use_threads_default= ac_func_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS NOEXECSTACK_FLAGS am__fastdepCCAS_FALSE am__fastdepCCAS_TRUE CCASDEPMODE CCASFLAGS CCAS W32LIBS NETLIBS CROSS_COMPILING_FALSE CROSS_COMPILING_TRUE LIBREADLINE LIBUSB LIBUSB_CPPFLAGS _usb_config ZLIBS ENABLE_BZIP2_SUPPORT_FALSE ENABLE_BZIP2_SUPPORT_TRUE ENABLE_LOCAL_ZLIB_FALSE ENABLE_LOCAL_ZLIB_TRUE USE_INTERNAL_REGEX_FALSE USE_INTERNAL_REGEX_TRUE MPI_SFLAGS MPI_EXTRA_ASM_OBJS USE_RNDW32_FALSE USE_RNDW32_TRUE USE_RNDEGD_FALSE USE_RNDEGD_TRUE USE_RNDUNIX_FALSE USE_RNDUNIX_TRUE USE_RNDLINUX_FALSE USE_RNDLINUX_TRUE HAVE_SHM_FALSE HAVE_SHM_TRUE CAPLIBS GETOPT LIBOBJS USE_SHA512_FALSE USE_SHA512_TRUE ENABLE_SELINUX_HACKS_FALSE ENABLE_SELINUX_HACKS_TRUE ENABLE_AGENT_SUPPORT_FALSE ENABLE_AGENT_SUPPORT_TRUE ENABLE_CARD_SUPPORT_FALSE ENABLE_CARD_SUPPORT_TRUE DLLIBS POSUB LTLIBINTL LIBINTL INTLLIBS INTL_LIBTOOL_SUFFIX_PREFIX INTLOBJS GENCAT INSTOBJEXT DATADIRNAME CATOBJEXT USE_INCLUDED_LIBINTL BUILD_INCLUDED_LIBINTL LTLIBC WINDRES WOE32 WOE32DLL HAVE_WPRINTF HAVE_NEWLOCALE HAVE_SNPRINTF HAVE_ASPRINTF HAVE_POSIX_PRINTF INTL_DEFAULT_VERBOSITY INTL_MACOSX_LIBS GLIBC21 INTLBISON LTLIBICONV LIBICONV LTLIBMULTITHREAD LIBMULTITHREAD LTLIBTHREAD LIBTHREAD LIBPTH_PREFIX LTLIBPTH LIBPTH PRI_MACROS_BROKEN ALLOCA HAVE_VISIBILITY CFLAG_VISIBILITY GLIBC2 XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS SED GPGKEYS_MAILTO SENDMAIL GPGKEYS_CURL FAKE_CURL_FALSE FAKE_CURL_TRUE LIBCURL LIBCURL_CPPFLAGS _libcurl_config LDAP_CPPFLAGS LDAPLIBS GPGKEYS_LDAP USE_DNS_SRV_FALSE USE_DNS_SRV_TRUE DNSLIBS GPGKEYS_FINGER GPGKEYS_HKP NM MPI_OPT_FLAGS HAVE_W32_SYSTEM_FALSE HAVE_W32_SYSTEM_TRUE USE_SIMPLE_GETTEXT_FALSE USE_SIMPLE_GETTEXT_TRUE HAVE_DOSISH_SYSTEM_FALSE HAVE_DOSISH_SYSTEM_TRUE CC_FOR_BUILD HAVE_USTAR_FALSE HAVE_USTAR_TRUE TAR PERL AR RANLIB MAINT MAINTAINER_MODE_FALSE MAINTAINER_MODE_TRUE EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_static_rnd with_egd_socket enable_dev_random enable_asm enable_selinux_support enable_gnupg_iconv enable_minimal enable_large_secmem enable_card_support enable_agent_support enable_rsa enable_idea enable_cast5 enable_blowfish enable_aes enable_twofish enable_camellia enable_sha256 enable_sha512 enable_bzip2 enable_exec enable_photo_viewers with_photo_viewer enable_keyserver_helpers enable_ldap enable_hkp enable_finger enable_generic enable_mailto enable_keyserver_path with_included_zlib enable_key_cache with_capabilities enable_maintainer_mode enable_largefile with_tar enable_dns_srv enable_dns_cert with_ldap with_libcurl with_mailprog enable_nls enable_threads with_gnu_ld enable_rpath with_libpth_prefix with_libiconv_prefix with_included_gettext with_libintl_prefix enable_endian_check enable_regex with_included_regex with_zlib with_bzip2 with_libusb with_readline enable_optimization enable_noexecstack ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CC_FOR_BUILD CCAS CCASFLAGS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures gnupg 1.4.20 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gnupg] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of gnupg 1.4.20:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --enable-static-rnd=egd|unix|linux|auto specify a random number source --disable-dev-random disable the use of dev random --disable-asm do not use assembler modules --enable-selinux-support enable SELinux support --disable-gnupg-iconv disable the new iconv code --enable-minimal build the smallest gpg binary possible --enable-large-secmem allocate extra secure memory --disable-card-support disable OpenPGP card support --disable-agent-support disable gpg-agent support --disable-rsa disable the RSA public key algorithm --disable-idea disable the IDEA cipher --disable-cast5 disable the CAST5 cipher --disable-blowfish disable the BLOWFISH cipher --disable-aes disable the AES, AES192, and AES256 ciphers --disable-twofish disable the TWOFISH cipher --enable-camellia enable the CAMELLIA cipher --disable-sha256 disable the SHA-224 and SHA-256 digests --disable-sha512 disable the SHA-384 and SHA-512 digests --disable-bzip2 disable the BZIP2 compression algorithm --disable-exec disable all external program execution --disable-photo-viewers disable photo ID viewers --disable-keyserver-helpers disable all external keyserver support --disable-ldap disable LDAP keyserver interface only --disable-hkp disable HKP keyserver interface only --disable-finger disable finger key fetching interface only --disable-generic disable generic object key fetching interface only --enable-mailto enable email keyserver interface only --disable-keyserver-path disable the exec-path option for keyserver helpers --enable-key-cache=SIZE Set key cache to SIZE (default 4096) --enable-maintainer-mode enable make rules and dependencies not useful (and sometimes confusing) to the casual installer --disable-largefile omit support for large files --disable-dns-srv disable the use of DNS SRV in HKP and HTTP --disable-dns-cert disable the use of CERT records in DNS --disable-nls do not use Native Language Support --enable-threads={posix|solaris|pth|windows} specify multithreading API --disable-threads build without multithread safety --disable-rpath do not hardcode runtime library paths --disable-endian-check disable the endian check and trust the OS provided macros --disable-regex do not handle regular expressions in trust signatures --disable-optimization disable compiler optimization --enable-noexecstack enable non executable stack support (gcc only) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-egd-socket=NAME use NAME for the EGD socket --with-photo-viewer=FIXED_VIEWER set a fixed photo ID viewer --with-included-zlib use the zlib code included here --with-capabilities use linux capabilities [default=no] --with-tar=PATH look for a tar program in PATH --with-ldap=DIR look for the LDAP library in DIR --with-libcurl=DIR look for the curl library in DIR --with-mailprog=NAME use "NAME -t" for mail transport --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib --without-libpth-prefix don't search for libpth in includedir and libdir --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-included-gettext use the GNU gettext library included here --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-included-regex use the included GNU regex library --with-zlib=DIR use libz in DIR --with-bzip2=DIR look for bzip2 in DIR --with-libusb=DIR look for the libusb library in DIR --with-readline=DIR look for the readline library in DIR Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CC_FOR_BUILD build system C compiler CCAS assembler compiler command (defaults to CC) CCASFLAGS assembler compiler flags (defaults to CFLAGS) Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF gnupg configure 1.4.20 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ------------------------------------ ## ## Report this to http://bugs.gnupg.org ## ## ------------------------------------ ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by gnupg $as_me 1.4.20, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs need-ngettext" as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" as_fn_append ac_func_list " symlink" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu development_version=no ac_aux_dir= for ac_dir in scripts "$srcdir"/scripts; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in scripts \"$srcdir\"/scripts" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac am__api_version='1.14' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='gnupg' VERSION='1.4.20' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild project... ${PACKAGE_NAME:-$PACKAGE}" >&5 $as_echo "$as_me: autobuild project... ${PACKAGE_NAME:-$PACKAGE}" >&6;} { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild revision... ${PACKAGE_VERSION:-$VERSION}" >&5 $as_echo "$as_me: autobuild revision... ${PACKAGE_VERSION:-$VERSION}" >&6;} hostname=`hostname` if test "$hostname"; then { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5 $as_echo "$as_me: autobuild hostname... $hostname" >&6;} fi date=`date +%Y%m%d-%H%M%S` if test "$?" != 0; then date=`date` fi if test "$date"; then { $as_echo "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5 $as_echo "$as_me: autobuild timestamp... $date" >&6;} fi ac_config_headers="$ac_config_headers config.h" DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking which random module to use" >&5 $as_echo_n "checking which random module to use... " >&6; } # Check whether --enable-static-rnd was given. if test "${enable_static_rnd+set}" = set; then : enableval=$enable_static_rnd; use_static_rnd=$enableval else use_static_rnd=default fi if test "$use_static_rnd" = no; then use_static_rnd=default fi case "$use_static_rnd" in egd | linux | unix | default ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_static_rnd" >&5 $as_echo "$use_static_rnd" >&6; } ;; auto ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: automagically selected at runtime" >&5 $as_echo "automagically selected at runtime" >&6; } ;; * ) { $as_echo "$as_me:${as_lineno-$LINENO}: result: invalid argument" >&5 $as_echo "invalid argument" >&6; } as_fn_error $? "there is no random module rnd$use_static_rnd" "$LINENO" 5 ;; esac # Check whether --with-egd-socket was given. if test "${with_egd_socket+set}" = set; then : withval=$with_egd_socket; egd_socket_name="$withval" else egd_socket_name="" fi cat >>confdefs.h <<_ACEOF #define EGD_SOCKET_NAME "$egd_socket_name" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether use of /dev/random is requested" >&5 $as_echo_n "checking whether use of /dev/random is requested... " >&6; } # Check whether --enable-dev-random was given. if test "${enable_dev_random+set}" = set; then : enableval=$enable_dev_random; try_dev_random=$enableval else try_dev_random=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try_dev_random" >&5 $as_echo "$try_dev_random" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler modules are requested" >&5 $as_echo_n "checking whether assembler modules are requested... " >&6; } # Check whether --enable-asm was given. if test "${enable_asm+set}" = set; then : enableval=$enable_asm; try_asm_modules=$enableval else try_asm_modules=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try_asm_modules" >&5 $as_echo "$try_asm_modules" >&6; } # SELinux support includes tracking of sensitive files to avoid # leaking their contents through processing these files by gpg itself { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether SELinux support is requested" >&5 $as_echo_n "checking whether SELinux support is requested... " >&6; } # Check whether --enable-selinux-support was given. if test "${enable_selinux_support+set}" = set; then : enableval=$enable_selinux_support; selinux_support=$enableval else selinux_support=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $selinux_support" >&5 $as_echo "$selinux_support" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the new iconv based code is requested" >&5 $as_echo_n "checking whether the new iconv based code is requested... " >&6; } # Check whether --enable-gnupg-iconv was given. if test "${enable_gnupg_iconv+set}" = set; then : enableval=$enable_gnupg_iconv; gnupg_use_iconv=$enableval else gnupg_use_iconv=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_use_iconv" >&5 $as_echo "$gnupg_use_iconv" >&6; } try_extensions=no try_gettext=yes try_dns=yes use_rsa=yes use_idea=yes use_cast5=yes use_blowfish=yes use_aes=yes use_twofish=yes use_camellia=yes use_sha256=yes use_sha512=yes use_bzip2=yes use_exec=yes card_support=yes agent_support=yes disable_keyserver_path=no large_secmem=no # Check whether --enable-minimal was given. if test "${enable_minimal+set}" = set; then : enableval=$enable_minimal; try_dns=no use_rsa=no use_idea=no use_cast5=no use_blowfish=no use_aes=no use_twofish=no use_camellia=no use_sha256=no use_sha512=no use_bzip2=no use_exec=no card_support=no agent_support=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to allocate extra secure memory" >&5 $as_echo_n "checking whether to allocate extra secure memory... " >&6; } # Check whether --enable-large-secmem was given. if test "${enable_large_secmem+set}" = set; then : enableval=$enable_large_secmem; large_secmem=$enableval else large_secmem=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $large_secmem" >&5 $as_echo "$large_secmem" >&6; } if test "$large_secmem" = yes ; then SECMEM_BUFFER_SIZE=65536 else SECMEM_BUFFER_SIZE=32768 fi cat >>confdefs.h <<_ACEOF #define SECMEM_BUFFER_SIZE $SECMEM_BUFFER_SIZE _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether OpenPGP card support is requested" >&5 $as_echo_n "checking whether OpenPGP card support is requested... " >&6; } # Check whether --enable-card-support was given. if test "${enable_card_support+set}" = set; then : enableval=$enable_card_support; card_support=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $card_support" >&5 $as_echo "$card_support" >&6; } # Note that we may later disable the agent support based on the platform. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gpg-agent support is requested" >&5 $as_echo_n "checking whether gpg-agent support is requested... " >&6; } # Check whether --enable-agent-support was given. if test "${enable_agent_support+set}" = set; then : enableval=$enable_agent_support; agent_support=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $agent_support" >&5 $as_echo "$agent_support" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the RSA public key algorithm" >&5 $as_echo_n "checking whether to enable the RSA public key algorithm... " >&6; } # Check whether --enable-rsa was given. if test "${enable_rsa+set}" = set; then : enableval=$enable_rsa; use_rsa=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_rsa" >&5 $as_echo "$use_rsa" >&6; } if test x"$use_rsa" = xyes ; then $as_echo "#define USE_RSA 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the IDEA cipher" >&5 $as_echo_n "checking whether to enable the IDEA cipher... " >&6; } # Check whether --enable-idea was given. if test "${enable_idea+set}" = set; then : enableval=$enable_idea; use_idea=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_idea" >&5 $as_echo "$use_idea" >&6; } if test x"$use_idea" = xyes ; then $as_echo "#define USE_IDEA 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the CAST5 cipher" >&5 $as_echo_n "checking whether to enable the CAST5 cipher... " >&6; } # Check whether --enable-cast5 was given. if test "${enable_cast5+set}" = set; then : enableval=$enable_cast5; use_cast5=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_cast5" >&5 $as_echo "$use_cast5" >&6; } if test x"$use_cast5" = xyes ; then $as_echo "#define USE_CAST5 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the BLOWFISH cipher" >&5 $as_echo_n "checking whether to enable the BLOWFISH cipher... " >&6; } # Check whether --enable-blowfish was given. if test "${enable_blowfish+set}" = set; then : enableval=$enable_blowfish; use_blowfish=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_blowfish" >&5 $as_echo "$use_blowfish" >&6; } if test x"$use_blowfish" = xyes ; then $as_echo "#define USE_BLOWFISH 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the AES ciphers" >&5 $as_echo_n "checking whether to enable the AES ciphers... " >&6; } # Check whether --enable-aes was given. if test "${enable_aes+set}" = set; then : enableval=$enable_aes; use_aes=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_aes" >&5 $as_echo "$use_aes" >&6; } if test x"$use_aes" = xyes ; then $as_echo "#define USE_AES 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the TWOFISH cipher" >&5 $as_echo_n "checking whether to enable the TWOFISH cipher... " >&6; } # Check whether --enable-twofish was given. if test "${enable_twofish+set}" = set; then : enableval=$enable_twofish; use_twofish=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_twofish" >&5 $as_echo "$use_twofish" >&6; } if test x"$use_twofish" = xyes ; then $as_echo "#define USE_TWOFISH 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the CAMELLIA cipher" >&5 $as_echo_n "checking whether to enable the CAMELLIA cipher... " >&6; } # Check whether --enable-camellia was given. if test "${enable_camellia+set}" = set; then : enableval=$enable_camellia; use_camellia=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_camellia" >&5 $as_echo "$use_camellia" >&6; } if test x"$use_camellia" = xyes ; then $as_echo "#define USE_CAMELLIA 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the SHA-224 and SHA-256 digests" >&5 $as_echo_n "checking whether to enable the SHA-224 and SHA-256 digests... " >&6; } # Check whether --enable-sha256 was given. if test "${enable_sha256+set}" = set; then : enableval=$enable_sha256; use_sha256=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_sha256" >&5 $as_echo "$use_sha256" >&6; } if test x"$use_sha256" = xyes ; then $as_echo "#define USE_SHA256 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the SHA-384 and SHA-512 digests" >&5 $as_echo_n "checking whether to enable the SHA-384 and SHA-512 digests... " >&6; } # Check whether --enable-sha512 was given. if test "${enable_sha512+set}" = set; then : enableval=$enable_sha512; use_sha512=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_sha512" >&5 $as_echo "$use_sha512" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the BZIP2 compression algorithm" >&5 $as_echo_n "checking whether to enable the BZIP2 compression algorithm... " >&6; } # Check whether --enable-bzip2 was given. if test "${enable_bzip2+set}" = set; then : enableval=$enable_bzip2; use_bzip2=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_bzip2" >&5 $as_echo "$use_bzip2" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable external program execution" >&5 $as_echo_n "checking whether to enable external program execution... " >&6; } # Check whether --enable-exec was given. if test "${enable_exec+set}" = set; then : enableval=$enable_exec; use_exec=$enableval fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_exec" >&5 $as_echo "$use_exec" >&6; } if test "$use_exec" = no ; then $as_echo "#define NO_EXEC 1" >>confdefs.h fi if test "$use_exec" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable photo ID viewing" >&5 $as_echo_n "checking whether to enable photo ID viewing... " >&6; } # Check whether --enable-photo-viewers was given. if test "${enable_photo_viewers+set}" = set; then : enableval=$enable_photo_viewers; if test "$enableval" = no ; then $as_echo "#define DISABLE_PHOTO_VIEWER 1" >>confdefs.h fi else enableval=yes fi gnupg_cv_enable_photo_viewers=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enableval" >&5 $as_echo "$enableval" >&6; } if test "$gnupg_cv_enable_photo_viewers" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use a fixed photo ID viewer" >&5 $as_echo_n "checking whether to use a fixed photo ID viewer... " >&6; } # Check whether --with-photo-viewer was given. if test "${with_photo_viewer+set}" = set; then : withval=$with_photo_viewer; if test "$withval" = yes ; then withval=no elif test "$withval" != no ; then cat >>confdefs.h <<_ACEOF #define FIXED_PHOTO_VIEWER "$withval" _ACEOF fi else withval=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $withval" >&5 $as_echo "$withval" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable external keyserver helpers" >&5 $as_echo_n "checking whether to enable external keyserver helpers... " >&6; } # Check whether --enable-keyserver-helpers was given. if test "${enable_keyserver_helpers+set}" = set; then : enableval=$enable_keyserver_helpers; if test "$enableval" = no ; then $as_echo "#define DISABLE_KEYSERVER_HELPERS 1" >>confdefs.h fi else enableval=yes fi gnupg_cv_enable_keyserver_helpers=$enableval { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enableval" >&5 $as_echo "$enableval" >&6; } if test "$gnupg_cv_enable_keyserver_helpers" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether LDAP keyserver support is requested" >&5 $as_echo_n "checking whether LDAP keyserver support is requested... " >&6; } # Check whether --enable-ldap was given. if test "${enable_ldap+set}" = set; then : enableval=$enable_ldap; try_ldap=$enableval else try_ldap=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try_ldap" >&5 $as_echo "$try_ldap" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HKP keyserver support is requested" >&5 $as_echo_n "checking whether HKP keyserver support is requested... " >&6; } # Check whether --enable-hkp was given. if test "${enable_hkp+set}" = set; then : enableval=$enable_hkp; try_hkp=$enableval else try_hkp=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try_hkp" >&5 $as_echo "$try_hkp" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether finger key fetching support is requested" >&5 $as_echo_n "checking whether finger key fetching support is requested... " >&6; } # Check whether --enable-finger was given. if test "${enable_finger+set}" = set; then : enableval=$enable_finger; try_finger=$enableval else try_finger=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try_finger" >&5 $as_echo "$try_finger" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether generic object key fetching support is requested" >&5 $as_echo_n "checking whether generic object key fetching support is requested... " >&6; } # Check whether --enable-generic was given. if test "${enable_generic+set}" = set; then : enableval=$enable_generic; try_generic=$enableval else try_generic=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try_generic" >&5 $as_echo "$try_generic" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether email keyserver support is requested" >&5 $as_echo_n "checking whether email keyserver support is requested... " >&6; } # Check whether --enable-mailto was given. if test "${enable_mailto+set}" = set; then : enableval=$enable_mailto; try_mailto=$enableval else try_mailto=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $try_mailto" >&5 $as_echo "$try_mailto" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether keyserver exec-path is enabled" >&5 $as_echo_n "checking whether keyserver exec-path is enabled... " >&6; } # Check whether --enable-keyserver-path was given. if test "${enable_keyserver_path+set}" = set; then : enableval=$enable_keyserver_path; if test "$enableval" = no ; then disable_keyserver_path=yes fi else enableval=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enableval" >&5 $as_echo "$enableval" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the included zlib is requested" >&5 $as_echo_n "checking whether the included zlib is requested... " >&6; } # Check whether --with-included-zlib was given. if test "${with_included_zlib+set}" = set; then : withval=$with_included_zlib; g10_force_zlib="$withval" else g10_force_zlib=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $g10_force_zlib" >&5 $as_echo "$g10_force_zlib" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the size of the key and uid cache" >&5 $as_echo_n "checking for the size of the key and uid cache... " >&6; } # Check whether --enable-key-cache was given. if test "${enable_key_cache+set}" = set; then : enableval=$enable_key_cache; else enableval=4096 fi if test "$enableval" = "no"; then enableval=5 elif test "$enableval" = "yes" || test "$enableval" = ""; then enableval=4096 fi key_cache_size=`echo "$enableval" | sed 's/[A-Za-z]//g'` if test "$enableval" != "$key_cache_size" || test "$key_cache_size" -lt 5; then as_fn_error $? "invalid key-cache size" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $key_cache_size" >&5 $as_echo "$key_cache_size" >&6; } cat >>confdefs.h <<_ACEOF #define PK_UID_CACHE_SIZE $key_cache_size _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether use of capabilities is requested" >&5 $as_echo_n "checking whether use of capabilities is requested... " >&6; } # Check whether --with-capabilities was given. if test "${with_capabilities+set}" = set; then : withval=$with_capabilities; use_capabilities="$withval" else use_capabilities=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_capabilities" >&5 $as_echo "$use_capabilities" >&6; } # To avoid double inclusion of config.h which might happen at some # places, we add the usual double inclusion protection. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5 $as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; } # Check whether --enable-maintainer-mode was given. if test "${enable_maintainer_mode+set}" = set; then : enableval=$enable_maintainer_mode; USE_MAINTAINER_MODE=$enableval else USE_MAINTAINER_MODE=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_MAINTAINER_MODE" >&5 $as_echo "$USE_MAINTAINER_MODE" >&6; } if test $USE_MAINTAINER_MODE = yes; then MAINTAINER_MODE_TRUE= MAINTAINER_MODE_FALSE='#' else MAINTAINER_MODE_TRUE='#' MAINTAINER_MODE_FALSE= fi MAINT=$MAINTAINER_MODE_TRUE { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file missing_dir=`cd $ac_aux_dir && pwd` ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi # Extract the first word of ""perl"", so it can be a program name with args. set dummy "perl"; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_PERL+:} false; then : $as_echo_n "(cached) " >&6 else case $PERL in [\\/]* | ?:[\\/]*) ac_cv_path_PERL="$PERL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PERL=$ac_cv_path_PERL if test -n "$PERL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5 $as_echo "$PERL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for strerror in -lcposix" >&5 $as_echo_n "checking for strerror in -lcposix... " >&6; } if ${ac_cv_lib_cposix_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cposix_strerror=yes else ac_cv_lib_cposix_strerror=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cposix_strerror" >&5 $as_echo "$ac_cv_lib_cposix_strerror" >&6; } if test "x$ac_cv_lib_cposix_strerror" = xyes; then : LIBS="$LIBS -lcposix" fi # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done # Check whether --with-tar was given. if test "${with_tar+set}" = set; then : withval=$with_tar; _do_tar=$withval fi if test x$_do_tar != xno ; then if test x$_do_tar = x ; then # Extract the first word of ""tar"", so it can be a program name with args. set dummy "tar"; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_TAR+:} false; then : $as_echo_n "(cached) " >&6 else case $TAR in [\\/]* | ?:[\\/]*) ac_cv_path_TAR="$TAR" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_TAR="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi TAR=$ac_cv_path_TAR if test -n "$TAR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $TAR" >&5 $as_echo "$TAR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi _mytar=$ac_cv_path_TAR fi # Check if our tar is ustar format. If so, it's good. TODO: Add some # code to check various options, etc, to try and create ustar # format. if test x$_mytar != x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $_mytar speaks USTAR" >&5 $as_echo_n "checking whether $_mytar speaks USTAR... " >&6; } echo hithere > conftest.txt $_mytar -cf - conftest.txt | (dd skip=257 bs=1 count=5 2>/dev/null || cat) | grep ustar > /dev/null _tar_bad=$? rm conftest.txt if test x$_tar_bad = x0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test x$_tar_bad = x0; then HAVE_USTAR_TRUE= HAVE_USTAR_FALSE='#' else HAVE_USTAR_TRUE='#' HAVE_USTAR_FALSE= fi # According to a comment by Marcus Brinkman in libgpg-error, the # AC_PROG_CC_FOR_BUILD macro in the AC archive is broken for autoconf # 2.57. Thus we use a simply use "cc" if we are cross-compiling. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cc for build" >&5 $as_echo_n "checking for cc for build... " >&6; } if test "$cross_compiling" = "yes"; then CC_FOR_BUILD="${CC_FOR_BUILD-cc}" else CC_FOR_BUILD="${CC_FOR_BUILD-$CC}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC_FOR_BUILD" >&5 $as_echo "$CC_FOR_BUILD" >&6; } MPI_OPT_FLAGS="" have_dosish_system=no need_dlopen=yes case "${host}" in *-mingw32*) # special stuff for Windoze NT ac_cv_have_dev_random=no $as_echo "#define USE_ONLY_8DOT3 1" >>confdefs.h $as_echo "#define HAVE_DRIVE_LETTERS 1" >>confdefs.h $as_echo "#define USE_SIMPLE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_W32_SYSTEM 1" >>confdefs.h disable_keyserver_path=yes have_dosish_system=yes need_dlopen=no try_gettext="no" agent_support=no use_simple_gettext=yes have_w32_system=yes # gcc 4.6 uses by default -fomit-frame-pointer. This # conflicts with mingw runtime's setjmp/longjmp usage. The # actual bug we notice is a segv related to the dlopened # iconv.dll: After returning from set_native_charset the stack # frame is corrupt. if test -n "$GCC" ; then CFLAGS="$CFLAGS -fno-omit-frame-pointer" fi ;; i?86-emx-os2 | i?86-*-os2*emx ) # OS/2 with the EMX environment ac_cv_have_dev_random=no $as_echo "#define HAVE_DRIVE_LETTERS 1" >>confdefs.h have_dosish_system=yes try_gettext="no" agent_support=no ;; i?86-*-msdosdjgpp*) # DOS with the DJGPP environment ac_cv_have_dev_random=no $as_echo "#define HAVE_DRIVE_LETTERS 1" >>confdefs.h have_dosish_system=yes try_gettext="no" agent_support=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 ;; *-dec-osf5*) if test -z "$GCC" ; then # Use the newer compiler `-msg_disable ptrmismatch1' to # get rid of the unsigned/signed char mismatch warnings. # Using this may hide other pointer mismatch warnings, but # it at least lets other warning classes through CFLAGS="$CFLAGS -msg_disable ptrmismatch1" fi ;; m68k-atari-mint) ;; *) ;; esac if test "$have_dosish_system" = yes; then $as_echo "#define HAVE_DOSISH_SYSTEM 1" >>confdefs.h fi if test "$have_dosish_system" = yes; then HAVE_DOSISH_SYSTEM_TRUE= HAVE_DOSISH_SYSTEM_FALSE='#' else HAVE_DOSISH_SYSTEM_TRUE='#' HAVE_DOSISH_SYSTEM_FALSE= fi if test x"$use_simple_gettext" = xyes; then USE_SIMPLE_GETTEXT_TRUE= USE_SIMPLE_GETTEXT_FALSE='#' else USE_SIMPLE_GETTEXT_TRUE='#' USE_SIMPLE_GETTEXT_FALSE= fi if test x"$have_w32_system" = xyes; then HAVE_W32_SYSTEM_TRUE= HAVE_W32_SYSTEM_FALSE='#' else HAVE_W32_SYSTEM_TRUE='#' HAVE_W32_SYSTEM_FALSE= fi if test "$disable_keyserver_path" = yes; then $as_echo "#define DISABLE_KEYSERVER_PATH 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD-compatible nm" >&5 $as_echo_n "checking for BSD-compatible nm... " >&6; } if ${ac_cv_path_NM+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$NM"; then # Let the user override the test. ac_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -B" elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -p" else ac_cv_path_NM="$ac_dir/nm" fi break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm fi fi NM="$ac_cv_path_NM" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NM" >&5 $as_echo "$NM" >&6; } # Check for command to grab the raw symbol name followed by C symbol from nm. { $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output" >&5 $as_echo_n "checking command to parse $NM output... " >&6; } if ${ac_cv_sys_global_symbol_pipe+:} false; then : $as_echo_n "(cached) " >&6 else # These are sane defaults that work on at least a few old systems. # {They come from Ultrix. What could be older than Ultrix?!! ;)} # Character class describing NM global symbol codes. ac_symcode='[BCDEGRSTU]' # Regexp to match symbols that can be accessed directly from C. ac_sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. ac_symxfrm='\1 \1' # Define system-specific variables. case "$host_os" in aix*) ac_symcode='[BCDTU]' ;; freebsd* | netbsd* | openbsd* | bsdi* | sunos* | cygwin32* | mingw32*) ac_sympat='_\([_A-Za-z][_A-Za-z0-9]*\)' ac_symxfrm='_\1 \1' ;; irix*) # Cannot use undefined symbols on IRIX because inlined functions mess us up. ac_symcode='[BCDEGRST]' ;; solaris*) ac_symcode='[BDTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then ac_symcode='[ABCDGISTUW]' fi case "$host_os" in cygwin32* | mingw32*) # We do not want undefined symbols on cygwin32. The user must # arrange to define them via -l arguments. ac_symcode='[ABCDGISTW]' ;; esac # Write the raw and C identifiers. ac_cv_sys_global_symbol_pipe="sed -n -e 's/^.* $ac_symcode $ac_sympat$/$ac_symxfrm/p'" # Check to see that the pipe works correctly. ac_pipe_works=no cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. ac_nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$ac_nlist"; then # Try sorting and uniquifying the output. if sort "$ac_nlist" | uniq > "$ac_nlist"T; then mv -f "$ac_nlist"T "$ac_nlist" ac_wcout=`wc "$ac_nlist" 2>/dev/null` ac_count=`echo "X$ac_wcout" | sed -e 's,^X,,' -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` (test "$ac_count" -ge 0) 2>/dev/null || ac_count=-1 else rm -f "$ac_nlist"T ac_count=-1 fi # Make sure that we snagged all the symbols we need. if egrep ' _?nm_test_var$' "$ac_nlist" >/dev/null; then if egrep ' _?nm_test_func$' "$ac_nlist" >/dev/null; then cat < conftest.c #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. sed 's/^.* _\{0,1\}\(.*\)$/extern char \1;/' < "$ac_nlist" >> conftest.c cat <> conftest.c #if defined (__STDC__) && __STDC__ # define __ptr_t void * #else # define __ptr_t char * #endif /* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ int dld_preloaded_symbol_count = $ac_count; /* The mapping between symbol names and symbols. */ struct { char *name; __ptr_t address; } dld_preloaded_symbols[] = { EOF sed 's/^_\{0,1\}\(.*\) _\{0,1\}\(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$ac_nlist" >> conftest.c cat <<\EOF >> conftest.c {0, (__ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftestm.$ac_objext ac_save_LIBS="$LIBS" ac_save_CFLAGS="$CFLAGS" LIBS="conftestm.$ac_objext" CFLAGS="$CFLAGS$no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest; then ac_pipe_works=yes else echo "configure: failed program was:" >&5 cat conftest.c >&5 fi LIBS="$ac_save_LIBS" CFLAGS="$ac_save_CFLAGS" else echo "cannot find nm_test_func in $ac_nlist" >&5 fi else echo "cannot find nm_test_var in $ac_nlist" >&5 fi else echo "cannot run $ac_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.c >&5 fi rm -rf conftest* # Do not use the global_symbol_pipe unless it works. test "$ac_pipe_works" = yes || ac_cv_sys_global_symbol_pipe= fi ac_result=yes if test -z "$ac_cv_sys_global_symbol_pipe"; then ac_result=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_result" >&5 $as_echo "$ac_result" >&6; } tmp_do_check="no" case "${host}" in *-mingw32*) ac_cv_sys_symbol_underscore=yes ;; i386-emx-os2 | i345686-pc-os2*emx | i386-pc-msdosdjgpp) ac_cv_sys_symbol_underscore=yes ;; *) if test "$cross_compiling" = yes; then if test "x$ac_cv_sys_symbol_underscore" = x; then ac_cv_sys_symbol_underscore=yes fi else tmp_do_check="yes" fi ;; esac if test "$tmp_do_check" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5 $as_echo_n "checking for _ prefix in compiled symbols... " >&6; } if ${ac_cv_sys_symbol_underscore+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_symbol_underscore=no cat > conftest.$ac_ext <&5 (eval $ac_compile) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. ac_nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist\""; } >&5 (eval $NM conftest.$ac_objext \| $ac_cv_sys_global_symbol_pipe \> $ac_nlist) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$ac_nlist"; then # See whether the symbols have a leading underscore. if egrep '^_nm_test_func' "$ac_nlist" >/dev/null; then ac_cv_sys_symbol_underscore=yes else if egrep '^nm_test_func ' "$ac_nlist" >/dev/null; then : else echo "configure: cannot find nm_test_func in $ac_nlist" >&5 fi fi else echo "configure: cannot run $ac_cv_sys_global_symbol_pipe" >&5 fi else echo "configure: failed program was:" >&5 cat conftest.c >&5 fi rm -rf conftest* fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _ prefix in compiled symbols" >&5 $as_echo_n "checking for _ prefix in compiled symbols... " >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_symbol_underscore" >&5 $as_echo "$ac_cv_sys_symbol_underscore" >&6; } if test x$ac_cv_sys_symbol_underscore = xyes; then $as_echo "#define WITH_SYMBOL_UNDERSCORE 1" >>confdefs.h fi cat >>confdefs.h <<_ACEOF #define EXEEXT "$EXEEXT" _ACEOF if test x"$try_hkp" = xyes ; then GPGKEYS_HKP="gpgkeys_hkp$EXEEXT" fi if test x"$try_finger" = xyes ; then GPGKEYS_FINGER="gpgkeys_finger$EXEEXT" fi ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : NETLIBS="-lnsl $NETLIBS" fi fi ac_fn_c_check_func "$LINENO" "setsockopt" "ac_cv_func_setsockopt" if test "x$ac_cv_func_setsockopt" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for setsockopt in -lsocket" >&5 $as_echo_n "checking for setsockopt in -lsocket... " >&6; } if ${ac_cv_lib_socket_setsockopt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char setsockopt (); int main () { return setsockopt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_setsockopt=yes else ac_cv_lib_socket_setsockopt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_setsockopt" >&5 $as_echo "$ac_cv_lib_socket_setsockopt" >&6; } if test "x$ac_cv_lib_socket_setsockopt" = xyes; then : NETLIBS="-lsocket $NETLIBS" fi fi if test x"$try_dns" = xyes ; then if test x"$try_hkp" = xyes || test x"$try_http" = xyes ; then # Check whether --enable-dns-srv was given. if test "${enable_dns_srv+set}" = set; then : enableval=$enable_dns_srv; use_dns_srv=$enableval else use_dns_srv=yes fi fi # Check whether --enable-dns-cert was given. if test "${enable_dns_cert+set}" = set; then : enableval=$enable_dns_cert; use_dns_cert=$enableval else use_dns_cert=yes fi fi if test x"$use_dns_srv" = xyes || test x"$use_dns_cert" = xyes; then _dns_save_libs=$LIBS LIBS="" # the double underscore thing is a glibc-ism? { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing res_query" >&5 $as_echo_n "checking for library containing res_query... " >&6; } if ${ac_cv_search_res_query+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char res_query (); int main () { return res_query (); ; return 0; } _ACEOF for ac_lib in '' resolv bind socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_res_query=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_res_query+:} false; then : break fi done if ${ac_cv_search_res_query+:} false; then : else ac_cv_search_res_query=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_res_query" >&5 $as_echo "$ac_cv_search_res_query" >&6; } ac_res=$ac_cv_search_res_query if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing __res_query" >&5 $as_echo_n "checking for library containing __res_query... " >&6; } if ${ac_cv_search___res_query+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __res_query (); int main () { return __res_query (); ; return 0; } _ACEOF for ac_lib in '' resolv bind socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search___res_query=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search___res_query+:} false; then : break fi done if ${ac_cv_search___res_query+:} false; then : else ac_cv_search___res_query=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search___res_query" >&5 $as_echo "$ac_cv_search___res_query" >&6; } ac_res=$ac_cv_search___res_query if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else have_resolver=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dn_expand" >&5 $as_echo_n "checking for library containing dn_expand... " >&6; } if ${ac_cv_search_dn_expand+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dn_expand (); int main () { return dn_expand (); ; return 0; } _ACEOF for ac_lib in '' resolv bind socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dn_expand=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dn_expand+:} false; then : break fi done if ${ac_cv_search_dn_expand+:} false; then : else ac_cv_search_dn_expand=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dn_expand" >&5 $as_echo "$ac_cv_search_dn_expand" >&6; } ac_res=$ac_cv_search_dn_expand if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing __dn_expand" >&5 $as_echo_n "checking for library containing __dn_expand... " >&6; } if ${ac_cv_search___dn_expand+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __dn_expand (); int main () { return __dn_expand (); ; return 0; } _ACEOF for ac_lib in '' resolv bind socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search___dn_expand=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search___dn_expand+:} false; then : break fi done if ${ac_cv_search___dn_expand+:} false; then : else ac_cv_search___dn_expand=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search___dn_expand" >&5 $as_echo "$ac_cv_search___dn_expand" >&6; } ac_res=$ac_cv_search___dn_expand if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else have_resolver=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dn_skipname" >&5 $as_echo_n "checking for library containing dn_skipname... " >&6; } if ${ac_cv_search_dn_skipname+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dn_skipname (); int main () { return dn_skipname (); ; return 0; } _ACEOF for ac_lib in '' resolv bind socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dn_skipname=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dn_skipname+:} false; then : break fi done if ${ac_cv_search_dn_skipname+:} false; then : else ac_cv_search_dn_skipname=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dn_skipname" >&5 $as_echo "$ac_cv_search_dn_skipname" >&6; } ac_res=$ac_cv_search_dn_skipname if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing __dn_skipname" >&5 $as_echo_n "checking for library containing __dn_skipname... " >&6; } if ${ac_cv_search___dn_skipname+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char __dn_skipname (); int main () { return __dn_skipname (); ; return 0; } _ACEOF for ac_lib in '' resolv bind socket; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search___dn_skipname=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search___dn_skipname+:} false; then : break fi done if ${ac_cv_search___dn_skipname+:} false; then : else ac_cv_search___dn_skipname=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search___dn_skipname" >&5 $as_echo "$ac_cv_search___dn_skipname" >&6; } ac_res=$ac_cv_search___dn_skipname if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else have_resolver=no fi fi if test x"$have_resolver" != xno ; then # Make sure that the BIND 4 resolver interface is workable before # enabling any code that calls it. At some point I'll rewrite the # code to use the BIND 8 resolver API. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the resolver is usable" >&5 $as_echo_n "checking whether the resolver is usable... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { unsigned char answer[PACKETSZ]; res_query("foo.bar",C_IN,T_A,answer,PACKETSZ); dn_skipname(0,0); dn_expand(0,0,0,0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_resolver=yes else have_resolver=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_resolver" >&5 $as_echo "$have_resolver" >&6; } # This is Apple-specific and somewhat bizarre as they changed the # define in bind 8 for some reason. if test x"$have_resolver" != xyes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether I can make the resolver usable with BIND_8_COMPAT and libresolv" >&5 $as_echo_n "checking whether I can make the resolver usable with BIND_8_COMPAT and libresolv... " >&6; } LIBS="$LIBS -lresolv" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define BIND_8_COMPAT #include #include #include #include int main () { unsigned char answer[PACKETSZ]; res_query("foo.bar",C_IN,T_A,answer,PACKETSZ); dn_skipname(0,0); dn_expand(0,0,0,0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : have_resolver=yes ; need_compat=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_resolver" >&5 $as_echo "$have_resolver" >&6; } fi fi if test x"$have_resolver" = xyes ; then DNSLIBS=$LIBS if test x"$use_dns_srv" = xyes ; then $as_echo "#define USE_DNS_SRV 1" >>confdefs.h fi if test x"$use_dns_cert" = xyes ; then $as_echo "#define USE_DNS_CERT 1" >>confdefs.h fi if test x"$need_compat" = xyes ; then $as_echo "#define BIND_8_COMPAT 1" >>confdefs.h fi else use_dns_srv=no use_dns_cert=no fi LIBS=$_dns_save_libs fi if test x"$use_dns_srv" = xyes; then USE_DNS_SRV_TRUE= USE_DNS_SRV_FALSE='#' else USE_DNS_SRV_TRUE='#' USE_DNS_SRV_FALSE= fi # Check for LDAP if test "$try_ldap" = yes ; then # Try and link a LDAP test program to weed out unusable LDAP # libraries. -lldap [-llber [-lresolv]] is for older OpenLDAPs. # OpenLDAP, circa 1999, was terrible with creating weird dependencies. # If all else fails, the user can play guess-the-dependency by using # something like ./configure LDAPLIBS="-Lfoo -lbar" # Check whether --with-ldap was given. if test "${with_ldap+set}" = set; then : withval=$with_ldap; _ldap_with=$withval fi if test x$_ldap_with != xno ; then if test -d "$withval" ; then LDAP_CPPFLAGS="-I$withval/include" LDAP_LDFLAGS="-L$withval/lib" fi _ldap_save_cppflags=$CPPFLAGS CPPFLAGS="${LDAP_CPPFLAGS} ${CPPFLAGS}" _ldap_save_ldflags=$LDFLAGS LDFLAGS="${LDAP_LDFLAGS} ${LDFLAGS}" for MY_LDAPLIBS in ${LDAPLIBS+"$LDAPLIBS"} "-lldap" "-lldap -llber" "-lldap -llber -lresolv" "-lwldap32"; do _ldap_save_libs=$LIBS LIBS="$MY_LDAPLIBS $NETLIBS $LIBS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether LDAP via \"$MY_LDAPLIBS\" is present and sane" >&5 $as_echo_n "checking whether LDAP via \"$MY_LDAPLIBS\" is present and sane... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _WIN32 #include #include #else #include #endif int main () { ldap_open("foobar",1234); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gnupg_cv_func_ldap_init=yes else gnupg_cv_func_ldap_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_func_ldap_init" >&5 $as_echo "$gnupg_cv_func_ldap_init" >&6; } if test $gnupg_cv_func_ldap_init = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether I can make LDAP be sane with lber.h" >&5 $as_echo_n "checking whether I can make LDAP be sane with lber.h... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { ldap_open("foobar",1234); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gnupg_cv_func_ldaplber_init=yes else gnupg_cv_func_ldaplber_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_func_ldaplber_init" >&5 $as_echo "$gnupg_cv_func_ldaplber_init" >&6; } fi if test "$gnupg_cv_func_ldaplber_init" = yes ; then $as_echo "#define NEED_LBER_H 1" >>confdefs.h fi if test "$gnupg_cv_func_ldap_init" = yes || \ test "$gnupg_cv_func_ldaplber_init" = yes ; then LDAPLIBS="$LDAP_LDFLAGS $MY_LDAPLIBS" GPGKEYS_LDAP="gpgkeys_ldap$EXEEXT" for ac_func in ldap_get_option ldap_set_option do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # The extra test for ldap_start_tls_sA is for W32 because # that is the actual function in the library. for ac_func in ldap_start_tls_s ldap_start_tls_sA do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_func_ldap_get_option" != yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether LDAP supports ld_errno" >&5 $as_echo_n "checking whether LDAP supports ld_errno... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { LDAP *ldap; ldap->ld_errno; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gnupg_cv_func_ldap_ld_errno=yes else gnupg_cv_func_ldap_ld_errno=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_func_ldap_ld_errno" >&5 $as_echo "$gnupg_cv_func_ldap_ld_errno" >&6; } if test "$gnupg_cv_func_ldap_ld_errno" = yes ; then $as_echo "#define HAVE_LDAP_LD_ERRNO 1" >>confdefs.h fi fi fi LIBS=$_ldap_save_libs if test "$GPGKEYS_LDAP" != "" ; then break; fi done CPPFLAGS=$_ldap_save_cppflags LDFLAGS=$_ldap_save_ldflags fi fi # Check for curl. We fake the curl API if libcurl isn't installed. # We require 7.10 or better as we use curl_version_info(). # Check whether --with-libcurl was given. if test "${with_libcurl+set}" = set; then : withval=$with_libcurl; _libcurl_with=$withval else _libcurl_with=yes fi if test "$_libcurl_with" != "no" ; then for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[1]+256*A[2]+A[3]; print X;}'" # More recent versions of curl-config have a direct --vernum # option, but we'd like this code to work with older versions as # well, so just convert --version. _libcurl_vernum_parse="eval $AWK '{printf \"0x%06X\",\$NF}'" _libcurl_try_link=yes if test -d "$_libcurl_with" ; then LIBCURL_CPPFLAGS="-I$withval/include" _libcurl_ldflags="-L$withval/lib" # Extract the first word of ""$withval/bin/curl-config"", so it can be a program name with args. set dummy "$withval/bin/curl-config"; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path__libcurl_config+:} false; then : $as_echo_n "(cached) " >&6 else case $_libcurl_config in [\\/]* | ?:[\\/]*) ac_cv_path__libcurl_config="$_libcurl_config" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path__libcurl_config="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi _libcurl_config=$ac_cv_path__libcurl_config if test -n "$_libcurl_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_libcurl_config" >&5 $as_echo "$_libcurl_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else # Extract the first word of "curl-config", so it can be a program name with args. set dummy curl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path__libcurl_config+:} false; then : $as_echo_n "(cached) " >&6 else case $_libcurl_config in [\\/]* | ?:[\\/]*) ac_cv_path__libcurl_config="$_libcurl_config" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path__libcurl_config="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi _libcurl_config=$ac_cv_path__libcurl_config if test -n "$_libcurl_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_libcurl_config" >&5 $as_echo "$_libcurl_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test x$_libcurl_config != "x" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the version of libcurl" >&5 $as_echo_n "checking for the version of libcurl... " >&6; } if ${libcurl_cv_lib_curl_version+:} false; then : $as_echo_n "(cached) " >&6 else libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $2}'` fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_curl_version" >&5 $as_echo "$libcurl_cv_lib_curl_version" >&6; } _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse` _libcurl_wanted=`echo 7.10 | $_libcurl_version_parse` if test $_libcurl_wanted -gt 0 ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libcurl >= version 7.10" >&5 $as_echo_n "checking for libcurl >= version 7.10... " >&6; } if ${libcurl_cv_lib_version_ok+:} false; then : $as_echo_n "(cached) " >&6 else if test $_libcurl_version -ge $_libcurl_wanted ; then libcurl_cv_lib_version_ok=yes else libcurl_cv_lib_version_ok=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_version_ok" >&5 $as_echo "$libcurl_cv_lib_version_ok" >&6; } fi if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then if test x"$LIBCURL_CPPFLAGS" = "x" ; then LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` fi if test x"$LIBCURL" = "x" ; then LIBCURL=`$_libcurl_config --libs` # This is so silly, but Apple actually has a bug in their # curl-config script. Fixed in Tiger, but there are still # lots of Panther installs around. case "${host}" in powerpc-apple-darwin7*) LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'` ;; esac fi # All curl-config scripts support --feature _libcurl_features=`$_libcurl_config --feature` # Is it modern enough to have --protocols? (7.12.4) if test $_libcurl_version -ge 461828 ; then _libcurl_protocols=`$_libcurl_config --protocols` fi else _libcurl_try_link=no fi unset _libcurl_wanted fi if test $_libcurl_try_link = yes ; then # we didn't find curl-config, so let's see if the user-supplied # link line (or failing that, "-lcurl") is enough. LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libcurl is usable" >&5 $as_echo_n "checking whether libcurl is usable... " >&6; } if ${libcurl_cv_lib_curl_usable+:} false; then : $as_echo_n "(cached) " >&6 else _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS" _libcurl_save_libs=$LIBS LIBS="$LIBCURL $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { /* Try and use a few common options to force a failure if we are missing symbols or can't link. */ int x; curl_easy_setopt(NULL,CURLOPT_URL,NULL); x=CURL_ERROR_SIZE; x=CURLOPT_WRITEFUNCTION; x=CURLOPT_FILE; x=CURLOPT_ERRORBUFFER; x=CURLOPT_STDERR; x=CURLOPT_VERBOSE; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : libcurl_cv_lib_curl_usable=yes else libcurl_cv_lib_curl_usable=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CPPFLAGS=$_libcurl_save_cppflags LIBS=$_libcurl_save_libs unset _libcurl_save_cppflags unset _libcurl_save_libs fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libcurl_cv_lib_curl_usable" >&5 $as_echo "$libcurl_cv_lib_curl_usable" >&6; } if test $libcurl_cv_lib_curl_usable = yes ; then _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" _libcurl_save_libs=$LIBS LIBS="$LIBS $LIBCURL" # Check for some libcurl functions that aren't in all # versions. for ac_func in curl_free curl_easy_escape curl_easy_unescape do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done CPPFLAGS=$_libcurl_save_cppflags LIBS=$_libcurl_save_libs unset _libcurl_save_cppflags unset _libcurl_save_libs $as_echo "#define HAVE_LIBCURL 1" >>confdefs.h _libcurl_vernum=`echo $_libcurl_version | $_libcurl_vernum_parse` cat >>confdefs.h <<_ACEOF #define LIBCURL_VERNUM $_libcurl_vernum _ACEOF for _libcurl_feature in $_libcurl_features ; do cat >>confdefs.h <<_ACEOF #define `$as_echo "libcurl_feature_$_libcurl_feature" | $as_tr_cpp` 1 _ACEOF eval `$as_echo "libcurl_feature_$_libcurl_feature" | $as_tr_sh`=yes done if test "x$_libcurl_protocols" = "x" ; then # We don't have --protocols, so just assume that all # protocols are available _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT" if test x$libcurl_feature_SSL = xyes ; then _libcurl_protocols="$_libcurl_protocols HTTPS" # FTPS wasn't standards-compliant until version # 7.11.0 if test $_libcurl_version -ge 461568; then _libcurl_protocols="$_libcurl_protocols FTPS" fi fi fi for _libcurl_protocol in $_libcurl_protocols ; do cat >>confdefs.h <<_ACEOF #define `$as_echo "libcurl_protocol_$_libcurl_protocol" | $as_tr_cpp` 1 _ACEOF eval `$as_echo "libcurl_protocol_$_libcurl_protocol" | $as_tr_sh`=yes done else unset LIBCURL unset LIBCURL_CPPFLAGS fi fi unset _libcurl_try_link unset _libcurl_version_parse unset _libcurl_config unset _libcurl_feature unset _libcurl_features unset _libcurl_protocol unset _libcurl_protocols unset _libcurl_version unset _libcurl_vernum unset _libcurl_ldflags fi if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then # This is the IF-NO path fake_curl=yes else # This is the IF-YES path : fi unset _libcurl_with if test x"$fake_curl" = xyes; then FAKE_CURL_TRUE= FAKE_CURL_FALSE='#' else FAKE_CURL_TRUE='#' FAKE_CURL_FALSE= fi # Generic, for us, means curl if test x"$try_generic" = xyes ; then GPGKEYS_CURL="gpgkeys_curl$EXEEXT" fi if test "$try_mailto" = yes ; then # Check whether --with-mailprog was given. if test "${with_mailprog+set}" = set; then : withval=$with_mailprog; else with_mailprog=yes fi if test "$with_mailprog" = yes ; then # Extract the first word of "sendmail", so it can be a program name with args. set dummy sendmail; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_SENDMAIL+:} false; then : $as_echo_n "(cached) " >&6 else case $SENDMAIL in [\\/]* | ?:[\\/]*) ac_cv_path_SENDMAIL="$SENDMAIL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_dummy="$PATH:/usr/sbin:/usr/libexec:/usr/lib" for as_dir in $as_dummy do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_SENDMAIL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi SENDMAIL=$ac_cv_path_SENDMAIL if test -n "$SENDMAIL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SENDMAIL" >&5 $as_echo "$SENDMAIL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "$ac_cv_path_SENDMAIL" ; then GPGKEYS_MAILTO="gpgkeys_mailto" fi elif test "$with_mailprog" != no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a mail transport program" >&5 $as_echo_n "checking for a mail transport program... " >&6; } SENDMAIL=$with_mailprog { $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_mailprog" >&5 $as_echo "$with_mailprog" >&6; } GPGKEYS_MAILTO="gpgkeys_mailto" fi fi case "${host}" in *-mingw32*) PRINTABLE_OS_NAME="MingW32" ;; *-*-cygwin*) PRINTABLE_OS_NAME="Cygwin" ;; i?86-emx-os2 | i?86-*-os2*emx ) PRINTABLE_OS_NAME="OS/2" ;; i?86-*-msdosdjgpp*) PRINTABLE_OS_NAME="MSDOS/DJGPP" try_extensions=no ;; *-linux*) PRINTABLE_OS_NAME="GNU/Linux" ;; *) PRINTABLE_OS_NAME=`uname -s || echo "Unknown"` ;; esac cat >>confdefs.h <<_ACEOF #define PRINTABLE_OS_NAME "$PRINTABLE_OS_NAME" _ACEOF # # 1. Set names of random devices # NAME_OF_DEV_RANDOM="/dev/random" NAME_OF_DEV_URANDOM="/dev/urandom" case "${host}" in *-openbsd*) NAME_OF_DEV_RANDOM="/dev/srandom" NAME_OF_DEV_URANDOM="/dev/urandom" ;; esac cat >>confdefs.h <<_ACEOF #define NAME_OF_DEV_RANDOM "$NAME_OF_DEV_RANDOM" _ACEOF cat >>confdefs.h <<_ACEOF #define NAME_OF_DEV_URANDOM "$NAME_OF_DEV_URANDOM" _ACEOF # This is "GNU gnupg" - The project-id script from gettext # needs to find this string. Without # it "make distcheck" may fail. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 $as_echo_n "checking for a sed that does not truncate output... " >&6; } if ${ac_cv_path_SED+:} false; then : $as_echo_n "(cached) " >&6 else ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 $as_echo "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "$try_gettext" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5 $as_echo_n "checking whether we are using the GNU C Library 2 or newer... " >&6; } if ${ac_cv_gnu_library_2+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then : ac_cv_gnu_library_2=yes else ac_cv_gnu_library_2=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5 $as_echo "$ac_cv_gnu_library_2" >&6; } GLIBC2="$ac_cv_gnu_library_2" CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 $as_echo_n "checking whether the -Werror option is usable... " >&6; } if ${gl_cv_cc_vis_werror+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_vis_werror=yes else gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 $as_echo "$gl_cv_cc_vis_werror" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 $as_echo_n "checking for simple visibility declarations... " >&6; } if ${gl_cv_cc_visibility+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void) {} int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_visibility=yes else gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 $as_echo "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi cat >>confdefs.h <<_ACEOF #define HAVE_VISIBILITY $HAVE_VISIBILITY _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 $as_echo_n "checking for stdint.h... " >&6; } if ${gl_cv_header_stdint_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_h=yes else gl_cv_header_stdint_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 $as_echo "$gl_cv_header_stdint_h" >&6; } if test $gl_cv_header_stdint_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H_WITH_UINTMAX 1 _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if ${ac_cv_working_alloca_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if ${ac_cv_func_alloca_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ void *alloca (size_t); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if ${ac_cv_os_cray+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if ${ac_cv_c_stack_direction+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if ${ac_cv_func_mmap_fixed_mapped+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5 $as_echo_n "checking whether integer division by zero raises SIGFPE... " >&6; } if ${gt_cv_int_divbyzero_sigfpe+:} false; then : $as_echo_n "(cached) " >&6 else gt_cv_int_divbyzero_sigfpe= case "$host_os" in macos* | darwin[6-9]* | darwin[1-9][0-9]*) # On Mac OS X 10.2 or newer, just assume the same as when cross- # compiling. If we were to perform the real test, 1 Crash Report # dialog window would pop up. case "$host_cpu" in i[34567]86 | x86_64) gt_cv_int_divbyzero_sigfpe="guessing yes" ;; esac ;; esac if test -z "$gt_cv_int_divbyzero_sigfpe"; then if test "$cross_compiling" = yes; then : # Guess based on the CPU. case "$host_cpu" in alpha* | i[34567]86 | x86_64 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include static void sigfpe_handler (int sig) { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (2); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gt_cv_int_divbyzero_sigfpe=yes else gt_cv_int_divbyzero_sigfpe=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5 $as_echo "$gt_cv_int_divbyzero_sigfpe" >&6; } case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac cat >>confdefs.h <<_ACEOF #define INTDIV0_RAISES_SIGFPE $value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 $as_echo_n "checking for inttypes.h... " >&6; } if ${gl_cv_header_inttypes_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_inttypes_h=yes else gl_cv_header_inttypes_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 $as_echo "$gl_cv_header_inttypes_h" >&6; } if test $gl_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H_WITH_UINTMAX 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 $as_echo_n "checking for unsigned long long int... " >&6; } if ${ac_cv_type_unsigned_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ unsigned long long int ull = 18446744073709551615ULL; typedef int a[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { unsigned long long int ullmax = 18446744073709551615ull; return (ull << 63 | ull >> 63 | ull << i | ull >> i | ullmax / ull | ullmax % ull); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_type_unsigned_long_long_int=yes else ac_cv_type_unsigned_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 $as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } if test $ac_cv_type_unsigned_long_long_int = yes; then $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h fi if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then test $ac_cv_type_unsigned_long_long_int = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' cat >>confdefs.h <<_ACEOF #define uintmax_t $ac_type _ACEOF else $as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h fi for ac_header in inttypes.h do : ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF fi done if test $ac_cv_header_inttypes_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 $as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } if ${gt_cv_inttypes_pri_broken+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef PRId32 char *p = PRId32; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_inttypes_pri_broken=no else gt_cv_inttypes_pri_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 $as_echo "$gt_cv_inttypes_pri_broken" >&6; } fi if test "$gt_cv_inttypes_pri_broken" = yes; then cat >>confdefs.h <<_ACEOF #define PRI_MACROS_BROKEN 1 _ACEOF PRI_MACROS_BROKEN=1 else PRI_MACROS_BROKEN=0 fi # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; gl_use_threads=$enableval else if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else case "$host_os" in osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac fi fi if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using : case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks . cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 $as_echo_n "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 &5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if ${acl_cv_prog_gnu_ld+:} false; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 $as_echo_n "checking whether imported symbols can be declared weak... " >&6; } if ${gl_cv_have_weak+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main () { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1; then : gl_cv_have_weak="guessing yes" else gl_cv_have_weak="guessing no" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_have_weak=yes else gl_cv_have_weak=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 $as_echo "$gl_cv_have_weak" >&6; } if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes; then : gl_have_pthread_h=yes else gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads gl_have_pthread= # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # http://lists.gnu.org/archive/html/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include pthread_mutex_t m; pthread_mutexattr_t ma; int main () { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_pthread=yes LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test -n "$gl_have_pthread" && break done # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_kill=yes else ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 $as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. case "$host_os" in solaris* | hpux*) $as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi elif test -z "$gl_have_pthread"; then # Some library is needed. Try libpthread and libc_r. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; } if ${ac_cv_lib_pthread_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_kill=yes else ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 $as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes; then : gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread fi if test -z "$gl_have_pthread"; then # For FreeBSD 4. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 $as_echo_n "checking for pthread_kill in -lc_r... " >&6; } if ${ac_cv_lib_c_r_pthread_kill+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_kill=yes else ac_cv_lib_c_r_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 $as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes; then : gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r fi fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix $as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { thr_self(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_solaristhread=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" $as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 $as_echo_n "checking how to link with libpth... " >&6; } if ${ac_cv_libpth_libs+:} false; then : $as_echo_n "(cached) " >&6 else use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libpth-prefix was given. if test "${with_libpth_prefix+set}" = set; then : withval=$with_libpth_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBPTH= LTLIBPTH= INCPTH= LIBPTH_PREFIX= HAVE_LIBPTH= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='pth ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" else LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'pth'; then LIBPTH_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'pth'; then LIBPTH_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" ;; esac done fi else LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" done fi ac_cv_libpth_libs="$LIBPTH" ac_cv_libpth_ltlibs="$LTLIBPTH" ac_cv_libpth_cppflags="$INCPTH" ac_cv_libpth_prefix="$LIBPTH_PREFIX" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 $as_echo "$ac_cv_libpth_libs" >&6; } LIBPTH="$ac_cv_libpth_libs" LTLIBPTH="$ac_cv_libpth_ltlibs" INCPTH="$ac_cv_libpth_cppflags" LIBPTH_PREFIX="$ac_cv_libpth_prefix" for element in $INCPTH; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done HAVE_LIBPTH=yes gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBPTH" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pth_self(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_pth=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" $as_echo "#define USE_PTH_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then $as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows $as_echo "#define USE_WINDOWS_THREADS 1" >>confdefs.h fi ;; esac fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 $as_echo_n "checking for multithread API to use... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 $as_echo "$gl_threads_api" >&6; } if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include " if test "x$ac_cv_type_pthread_rwlock_t" = xyes; then : $as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi : use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if ${am_cv_proto_iconv+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_proto_iconv" >&5 $as_echo " $am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; } int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for ac_header in argz.h inttypes.h limits.h unistd.h sys/param.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getcwd getegid geteuid getgid getuid mempcpy munmap \ stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \ argz_stringify argz_next __fsetlocking do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "#include " if test "x$ac_cv_have_decl_feof_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "#include " if test "x$ac_cv_have_decl_fgets_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl _ACEOF for ac_prog in bison do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_INTLBISON+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_INTLBISON="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi INTLBISON=$ac_cv_prog_INTLBISON if test -n "$INTLBISON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5 $as_echo "$INTLBISON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$INTLBISON" && break done if test -z "$INTLBISON"; then ac_verc_fail=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5 $as_echo_n "checking version of bison... " >&6; } ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 2.[7-9]* | [3-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 $as_echo "$ac_prog_version" >&6; } fi if test $ac_verc_fail = yes; then INTLBISON=: fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if ${ac_cv_type_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif int main () { long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_type_long_long_int=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 $as_echo "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if ${gt_cv_c_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wchar_t=yes else gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 $as_echo "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 $as_echo_n "checking for wint_t... " >&6; } if ${gt_cv_c_wint_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wint_t=yes else gt_cv_c_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 $as_echo "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 $as_echo_n "checking for intmax_t... " >&6; } if ${gt_cv_c_intmax_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif int main () { intmax_t x = -1; return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_intmax_t=yes else gt_cv_c_intmax_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 $as_echo "$gt_cv_c_intmax_t" >&6; } if test $gt_cv_c_intmax_t = yes; then $as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5 $as_echo_n "checking whether printf() supports POSIX/XSI format strings... " >&6; } if ${gt_cv_func_printf_posix+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ notposix #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "notposix" >/dev/null 2>&1; then : gt_cv_func_printf_posix="guessing no" else gt_cv_func_printf_posix="guessing yes" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gt_cv_func_printf_posix=yes else gt_cv_func_printf_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5 $as_echo "$gt_cv_func_printf_posix" >&6; } case $gt_cv_func_printf_posix in *yes) $as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5 $as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; } if ${ac_cv_gnu_library_2_1+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif #ifdef __UCLIBC__ Lucky user #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky" >/dev/null 2>&1; then : ac_cv_gnu_library_2_1=yes else ac_cv_gnu_library_2_1=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 $as_echo "$ac_cv_gnu_library_2_1" >&6; } GLIBC21="$ac_cv_gnu_library_2_1" for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 $as_echo_n "checking for SIZE_MAX... " >&6; } if ${gl_cv_size_max+:} false; then : $as_echo_n "(cached) " >&6 else gl_cv_size_max= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Found it" >/dev/null 2>&1; then : gl_cv_size_max=yes fi rm -f conftest* if test -z "$gl_cv_size_max"; then if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include #include "; then : else size_t_bits_minus_1= fi if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include "; then : else fits_in_uint= fi if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern size_t foo; extern unsigned long foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : fits_in_uint=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else gl_cv_size_max='((size_t)~(size_t)0)' fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 $as_echo "$gl_cv_size_max" >&6; } if test "$gl_cv_size_max" != yes; then cat >>confdefs.h <<_ACEOF #define SIZE_MAX $gl_cv_size_max _ACEOF fi for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done for ac_func in $ac_func_list do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 $as_echo_n "checking for working fcntl.h... " >&6; } if ${gl_cv_header_working_fcntl_h+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_header_working_fcntl_h=cross-compiling else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_UNISTD_H # include #else /* on Windows with MSVC */ # include # include # defined sleep(n) _sleep ((n) * 1000) #endif #include #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; int main () { int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_header_working_fcntl_h=yes else case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5 $as_echo "$gl_cv_header_working_fcntl_h" >&6; } case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac cat >>confdefs.h <<_ACEOF #define HAVE_WORKING_O_NOATIME $ac_val _ACEOF case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac cat >>confdefs.h <<_ACEOF #define HAVE_WORKING_O_NOFOLLOW $ac_val _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi case "$enable_silent_rules" in yes) INTL_DEFAULT_VERBOSITY=0;; no) INTL_DEFAULT_VERBOSITY=1;; *) INTL_DEFAULT_VERBOSITY=1;; esac ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : else $as_echo "#define ptrdiff_t long" >>confdefs.h fi for ac_header in features.h stddef.h stdlib.h string.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in asprintf fwprintf newlocale putenv setenv setlocale \ snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include " if test "x$ac_cv_have_decl__snprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "_snwprintf" "ac_cv_have_decl__snwprintf" "#include " if test "x$ac_cv_have_decl__snwprintf" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNWPRINTF $ac_have_decl _ACEOF ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "#include " if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETC_UNLOCKED $ac_have_decl _ACEOF case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi if test "$ac_cv_func_newlocale" = yes; then HAVE_NEWLOCALE=1 else HAVE_NEWLOCALE=0 fi if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if ${am_cv_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); return !cs; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_langinfo_codeset=yes else am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 $as_echo "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if ${gt_cv_val_LC_MESSAGES+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_val_LC_MESSAGES=yes else gt_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5 $as_echo "$gt_cv_val_LC_MESSAGES" >&6; } if test $gt_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi if test "$enable_shared" = yes; then case "$host_os" in mingw* | cygwin*) is_woe32dll=yes ;; *) is_woe32dll=no ;; esac else is_woe32dll=no fi WOE32DLL=$is_woe32dll case "$host_os" in mingw* | cygwin*) is_woe32=yes ;; *) is_woe32=no ;; esac WOE32=$is_woe32 if test $WOE32 = yes; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_WINDRES+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_WINDRES="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi fi case "$host_os" in hpux*) LTLIBC="" ;; *) LTLIBC="-lc" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5 $as_echo_n "checking whether included gettext is requested... " >&6; } # Check whether --with-included-gettext was given. if test "${with_included_gettext+set}" = set; then : withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval else nls_cv_force_use_gnu_gettext=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5 $as_echo "$nls_cv_force_use_gnu_gettext" >&6; } nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test "$gt_use_preinstalled_gnugettext" != "yes"; then nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV $LIBTHREAD" LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then CATOBJEXT=.gmo fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi nls_cv_header_intl= nls_cv_header_libgt= DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi INTL_LIBTOOL_SUFFIX_PREFIX= INTLLIBS="$LIBINTL" # gettext requires some extra checks. These really should be part of # the basic AM_GNU_GETTEXT macro. TODO: move other gettext-specific # function checks to here. for ac_func in strchr do : ac_fn_c_check_func "$LINENO" "strchr" "ac_cv_func_strchr" if test "x$ac_cv_func_strchr" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRCHR 1 _ACEOF fi done else enable_nls=no USE_NLS=no USE_INCLUDED_LIBINTL=no BUILD_INCLUDED_LIBINTL=no POSUB=po fi if test "$try_extensions" = yes || test x"$card_support" = xyes ; then if test "$need_dlopen" = yes; then _dl_save_libs=$LIBS LIBS="" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing dlopen" >&5 $as_echo_n "checking for library containing dlopen... " >&6; } if ${ac_cv_search_dlopen+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dlopen (); int main () { return dlopen (); ; return 0; } _ACEOF for ac_lib in '' dl; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_dlopen=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_dlopen+:} false; then : break fi done if ${ac_cv_search_dlopen+:} false; then : else ac_cv_search_dlopen=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_dlopen" >&5 $as_echo "$ac_cv_search_dlopen" >&6; } ac_res=$ac_cv_search_dlopen if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" found_dlopen=yes fi if test x"$found_dlopen" = "xyes" ; then $as_echo "#define HAVE_DL_DLOPEN 1" >>confdefs.h DLLIBS=$LIBS else if test "$try_extensions" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: dlopen not found. Disabling extensions." >&5 $as_echo "$as_me: dlopen not found. Disabling extensions." >&6;} try_extensions=no fi if test "$card_support" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dlopen not found. Disabling OpenPGP card support." >&5 $as_echo "$as_me: WARNING: dlopen not found. Disabling OpenPGP card support." >&2;} card_support=no fi fi LIBS=$_dl_save_libs fi fi if test "$card_support" = yes ; then $as_echo "#define ENABLE_CARD_SUPPORT 1" >>confdefs.h fi if test "$agent_support" = yes ; then $as_echo "#define ENABLE_AGENT_SUPPORT 1" >>confdefs.h fi if test "$try_extensions" = yes ; then $as_echo "#define USE_DYNAMIC_LINKING 1" >>confdefs.h fi if test "$selinux_support" = yes ; then $as_echo "#define ENABLE_SELINUX_HACKS 1" >>confdefs.h fi if test "$gnupg_use_iconv" = yes ; then $as_echo "#define USE_GNUPG_ICONV 1" >>confdefs.h fi if test "$card_support" = yes; then ENABLE_CARD_SUPPORT_TRUE= ENABLE_CARD_SUPPORT_FALSE='#' else ENABLE_CARD_SUPPORT_TRUE='#' ENABLE_CARD_SUPPORT_FALSE= fi if test "$agent_support" = yes; then ENABLE_AGENT_SUPPORT_TRUE= ENABLE_AGENT_SUPPORT_FALSE='#' else ENABLE_AGENT_SUPPORT_TRUE='#' ENABLE_AGENT_SUPPORT_FALSE= fi if test "$selinux_support" = yes; then ENABLE_SELINUX_HACKS_TRUE= ENABLE_SELINUX_HACKS_FALSE='#' else ENABLE_SELINUX_HACKS_TRUE='#' ENABLE_SELINUX_HACKS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in unistd.h langinfo.h termio.h locale.h getopt.h pwd.h \ signal.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done # Note that we do not check for iconv here because this is done anyway # by the gettext checks and thus it allows us to disable the use of # iconv by using --disable-nls. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if ${ac_cv_c_inline+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 $as_echo_n "checking for working volatile... " >&6; } if ${ac_cv_c_volatile+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { volatile int x; int * volatile y = (int *) 0; return !x && !y; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else ac_cv_c_volatile=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 $as_echo "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then $as_echo "#define volatile /**/" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF ac_fn_c_check_decl "$LINENO" "sys_siglist" "ac_cv_have_decl_sys_siglist" "#include /* NetBSD declares sys_siglist in unistd.h. */ #ifdef HAVE_UNISTD_H # include #endif " if test "x$ac_cv_have_decl_sys_siglist" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_SYS_SIGLIST $ac_have_decl _ACEOF # Check whether --enable-endian-check was given. if test "${enable_endian_check+set}" = set; then : enableval=$enable_endian_check; endiancheck=$enableval else endiancheck=yes fi if test x"$endiancheck" = xyes ; then tmp_assumed_endian=big if test "$cross_compiling" = yes; then case "$host_cpu" in i[345678]* ) tmp_assumed_endian=little ;; *) ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cross compiling; assuming $tmp_assumed_endian endianess" >&5 $as_echo "$as_me: WARNING: cross compiling; assuming $tmp_assumed_endian endianess" >&2;} fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking endianess" >&5 $as_echo_n "checking endianess... " >&6; } if ${gnupg_cv_c_endian+:} false; then : $as_echo_n "(cached) " >&6 else gnupg_cv_c_endian=unknown # See if sys/param.h defines the BYTE_ORDER macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : # It does; now see whether it defined to BIG_ENDIAN or not. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #if BYTE_ORDER != BIG_ENDIAN not big endian #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_c_endian=big else gnupg_cv_c_endian=little fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test "$gnupg_cv_c_endian" = unknown; then if test "$cross_compiling" = yes; then : gnupg_cv_c_endian=$tmp_assumed_endian else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gnupg_cv_c_endian=little else gnupg_cv_c_endian=big fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_c_endian" >&5 $as_echo "$gnupg_cv_c_endian" >&6; } if test "$gnupg_cv_c_endian" = little; then $as_echo "#define LITTLE_ENDIAN_HOST 1" >>confdefs.h else $as_echo "#define BIG_ENDIAN_HOST 1" >>confdefs.h fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for byte typedef" >&5 $as_echo_n "checking for byte typedef... " >&6; } if ${gnupg_cv_typedef_byte+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GNU_SOURCE 1 #include #include int main () { #undef byte int a = sizeof(byte); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_typedef_byte=yes else gnupg_cv_typedef_byte=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_typedef_byte" >&5 $as_echo "$gnupg_cv_typedef_byte" >&6; } if test "$gnupg_cv_typedef_byte" = yes; then $as_echo "#define HAVE_BYTE_TYPEDEF 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ushort typedef" >&5 $as_echo_n "checking for ushort typedef... " >&6; } if ${gnupg_cv_typedef_ushort+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GNU_SOURCE 1 #include #include int main () { #undef ushort int a = sizeof(ushort); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_typedef_ushort=yes else gnupg_cv_typedef_ushort=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_typedef_ushort" >&5 $as_echo "$gnupg_cv_typedef_ushort" >&6; } if test "$gnupg_cv_typedef_ushort" = yes; then $as_echo "#define HAVE_USHORT_TYPEDEF 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ulong typedef" >&5 $as_echo_n "checking for ulong typedef... " >&6; } if ${gnupg_cv_typedef_ulong+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GNU_SOURCE 1 #include #include int main () { #undef ulong int a = sizeof(ulong); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_typedef_ulong=yes else gnupg_cv_typedef_ulong=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_typedef_ulong" >&5 $as_echo "$gnupg_cv_typedef_ulong" >&6; } if test "$gnupg_cv_typedef_ulong" = yes; then $as_echo "#define HAVE_ULONG_TYPEDEF 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for u16 typedef" >&5 $as_echo_n "checking for u16 typedef... " >&6; } if ${gnupg_cv_typedef_u16+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GNU_SOURCE 1 #include #include int main () { #undef u16 int a = sizeof(u16); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_typedef_u16=yes else gnupg_cv_typedef_u16=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_typedef_u16" >&5 $as_echo "$gnupg_cv_typedef_u16" >&6; } if test "$gnupg_cv_typedef_u16" = yes; then $as_echo "#define HAVE_U16_TYPEDEF 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for u32 typedef" >&5 $as_echo_n "checking for u32 typedef... " >&6; } if ${gnupg_cv_typedef_u32+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GNU_SOURCE 1 #include #include int main () { #undef u32 int a = sizeof(u32); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_typedef_u32=yes else gnupg_cv_typedef_u32=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_typedef_u32" >&5 $as_echo "$gnupg_cv_typedef_u32" >&6; } if test "$gnupg_cv_typedef_u32" = yes; then $as_echo "#define HAVE_U32_TYPEDEF 1" >>confdefs.h fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned short" >&5 $as_echo_n "checking size of unsigned short... " >&6; } if ${ac_cv_sizeof_unsigned_short+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned short))" "ac_cv_sizeof_unsigned_short" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_short" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned short) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_short=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_short" >&5 $as_echo "$ac_cv_sizeof_unsigned_short" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_SHORT $ac_cv_sizeof_unsigned_short _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned int" >&5 $as_echo_n "checking size of unsigned int... " >&6; } if ${ac_cv_sizeof_unsigned_int+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned int))" "ac_cv_sizeof_unsigned_int" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_int" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned int) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_int=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_int" >&5 $as_echo "$ac_cv_sizeof_unsigned_int" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_INT $ac_cv_sizeof_unsigned_int _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 $as_echo_n "checking size of unsigned long... " >&6; } if ${ac_cv_sizeof_unsigned_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 $as_echo "$ac_cv_sizeof_unsigned_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long long" >&5 $as_echo_n "checking size of unsigned long long... " >&6; } if ${ac_cv_sizeof_unsigned_long_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long long))" "ac_cv_sizeof_unsigned_long_long" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_long_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned long long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_long_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long_long" >&5 $as_echo "$ac_cv_sizeof_unsigned_long_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_LONG_LONG $ac_cv_sizeof_unsigned_long_long _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if ${ac_cv_header_time+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 $as_echo_n "checking size of time_t... " >&6; } if ${ac_cv_sizeof_time_t+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" " #include #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif "; then : else if test "$ac_cv_type_time_t" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (time_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_time_t=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 $as_echo "$ac_cv_sizeof_time_t" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_TIME_T $ac_cv_sizeof_time_t _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time_t is unsigned" >&5 $as_echo_n "checking whether time_t is unsigned... " >&6; } if ${gnupg_cv_time_t_unsigned+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif int main () { static int test_array [1 - 2 * !(((time_t)-1) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_time_t_unsigned=no else gnupg_cv_time_t_unsigned=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_time_t_unsigned" >&5 $as_echo "$gnupg_cv_time_t_unsigned" >&6; } if test $gnupg_cv_time_t_unsigned = yes; then $as_echo "#define HAVE_UNSIGNED_TIME_T 1" >>confdefs.h fi # Ensure that we have UINT64_C before we bother to check for uint64_t for ac_header in inttypes.h do : ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for UINT64_C" >&5 $as_echo_n "checking for UINT64_C... " >&6; } if ${gnupg_cv_uint64_c_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { uint64_t foo=UINT64_C(42); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gnupg_cv_uint64_c_works=yes else gnupg_cv_uint64_c_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_uint64_c_works" >&5 $as_echo "$gnupg_cv_uint64_c_works" >&6; } if test "$gnupg_cv_uint64_c_works" = "yes" ; then # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of uint64_t" >&5 $as_echo_n "checking size of uint64_t... " >&6; } if ${ac_cv_sizeof_uint64_t+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (uint64_t))" "ac_cv_sizeof_uint64_t" "$ac_includes_default"; then : else if test "$ac_cv_type_uint64_t" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (uint64_t) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_uint64_t=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_uint64_t" >&5 $as_echo "$ac_cv_sizeof_uint64_t" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UINT64_T $ac_cv_sizeof_uint64_t _ACEOF fi if test "$ac_cv_sizeof_unsigned_short" = "0" \ || test "$ac_cv_sizeof_unsigned_int" = "0" \ || test "$ac_cv_sizeof_unsigned_long" = "0"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Hmmm, something is wrong with the sizes - using defaults" >&5 $as_echo "$as_me: WARNING: Hmmm, something is wrong with the sizes - using defaults" >&2;}; fi if test x"$use_sha512" = xyes \ && test "$ac_cv_sizeof_unsigned_int" != "8" \ && test "$ac_cv_sizeof_unsigned_long" != "8" \ && test "$ac_cv_sizeof_unsigned_long_long" != "8" \ && test x"$ac_cv_sizeof_uint64_t" != "x8"; then { $as_echo "$as_me:${as_lineno-$LINENO}: No 64-bit types. Disabling SHA-384 and SHA-512." >&5 $as_echo "$as_me: No 64-bit types. Disabling SHA-384 and SHA-512." >&6;} use_sha512=no fi if test x"$use_sha512" = xyes ; then $as_echo "#define USE_SHA512 1" >>confdefs.h fi if test x"$use_sha512" = xyes; then USE_SHA512_TRUE= USE_SHA512_FALSE='#' else USE_SHA512_TRUE='#' USE_SHA512_FALSE= fi ac_fn_c_check_decl "$LINENO" "getpagesize" "ac_cv_have_decl_getpagesize" "$ac_includes_default" if test "x$ac_cv_have_decl_getpagesize" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETPAGESIZE $ac_have_decl _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 $as_echo_n "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if ${ac_cv_sys_largefile_source+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGEFILE_SOURCE 1 #include /* for off_t */ #include int main () { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 $as_echo "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source _ACEOF ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then $as_echo "#define HAVE_FSEEKO 1" >>confdefs.h fi for ac_func in vprintf do : ac_fn_c_check_func "$LINENO" "vprintf" "ac_cv_func_vprintf" if test "x$ac_cv_func_vprintf" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VPRINTF 1 _ACEOF ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt" if test "x$ac_cv_func__doprnt" = xyes; then : $as_echo "#define HAVE_DOPRNT 1" >>confdefs.h fi fi done ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi for ac_header in vfork.h do : ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default" if test "x$ac_cv_header_vfork_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_VFORK_H 1 _ACEOF fi done for ac_func in fork vfork do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done if test "x$ac_cv_func_fork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5 $as_echo_n "checking for working fork... " >&6; } if ${ac_cv_func_fork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_fork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { /* By Ruediger Kuhlmann. */ return fork () < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_fork_works=yes else ac_cv_func_fork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5 $as_echo "$ac_cv_func_fork_works" >&6; } else ac_cv_func_fork_works=$ac_cv_func_fork fi if test "x$ac_cv_func_fork_works" = xcross; then case $host in *-*-amigaos* | *-*-msdosdjgpp*) # Override, as these systems have only a dummy fork() stub ac_cv_func_fork_works=no ;; *) ac_cv_func_fork_works=yes ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;} fi ac_cv_func_vfork_works=$ac_cv_func_vfork if test "x$ac_cv_func_vfork" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5 $as_echo_n "checking for working vfork... " >&6; } if ${ac_cv_func_vfork_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_vfork_works=cross else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Paul Eggert for this test. */ $ac_includes_default #include #ifdef HAVE_VFORK_H # include #endif /* On some sparc systems, changes by the child to local and incoming argument registers are propagated back to the parent. The compiler is told about this with #include , but some compilers (e.g. gcc -O) don't grok . Test for this by using a static variable whose address is put into a register that is clobbered by the vfork. */ static void #ifdef __cplusplus sparc_address_test (int arg) # else sparc_address_test (arg) int arg; #endif { static pid_t child; if (!child) { child = vfork (); if (child < 0) { perror ("vfork"); _exit(2); } if (!child) { arg = getpid(); write(-1, "", 0); _exit (arg); } } } int main () { pid_t parent = getpid (); pid_t child; sparc_address_test (0); child = vfork (); if (child == 0) { /* Here is another test for sparc vfork register problems. This test uses lots of local variables, at least as many local variables as main has allocated so far including compiler temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should reuse the register of parent for one of the local variables, since it will think that parent can't possibly be used any more in this routine. Assigning to the local variable will thus munge parent in the parent process. */ pid_t p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); /* Convince the compiler that p..p7 are live; otherwise, it might use the same hardware register for all 8 local variables. */ if (p != p1 || p != p2 || p != p3 || p != p4 || p != p5 || p != p6 || p != p7) _exit(1); /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent from child file descriptors. If the child closes a descriptor before it execs or exits, this munges the parent's descriptor as well. Test for this by closing stdout in the child. */ _exit(close(fileno(stdout)) != 0); } else { int status; struct stat st; while (wait(&status) != child) ; return ( /* Was there some problem with vforking? */ child < 0 /* Did the child fail? (This shouldn't happen.) */ || status /* Did the vfork/compiler bug occur? */ || parent != getpid() /* Did the file descriptor bug occur? */ || fstat(fileno(stdout), &st) != 0 ); } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_vfork_works=yes else ac_cv_func_vfork_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5 $as_echo "$ac_cv_func_vfork_works" >&6; } fi; if test "x$ac_cv_func_fork_works" = xcross; then ac_cv_func_vfork_works=$ac_cv_func_vfork { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5 $as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;} fi if test "x$ac_cv_func_vfork_works" = xyes; then $as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h else $as_echo "#define vfork fork" >>confdefs.h fi if test "x$ac_cv_func_fork_works" = xyes; then $as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h fi for ac_func in strerror stpcpy strlwr tcgetattr strtoul mmap sysconf do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in strcasecmp strncasecmp ctermid times unsetenv getpwnam getpwuid do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in memmove gettimeofday getrusage setrlimit clock_gettime do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in atexit raise getpagesize strftime nl_langinfo setlocale do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in waitpid wait4 sigaction sigprocmask rand pipe stat getaddrinfo do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in fcntl ftruncate inet_ntop do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_func "$LINENO" "mkdtemp" "ac_cv_func_mkdtemp" if test "x$ac_cv_func_mkdtemp" = xyes; then : $as_echo "#define HAVE_MKDTEMP 1" >>confdefs.h else case " $LIBOBJS " in *" mkdtemp.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS mkdtemp.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "timegm" "ac_cv_func_timegm" if test "x$ac_cv_func_timegm" = xyes; then : $as_echo "#define HAVE_TIMEGM 1" >>confdefs.h else case " $LIBOBJS " in *" timegm.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS timegm.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "isascii" "ac_cv_func_isascii" if test "x$ac_cv_func_isascii" = xyes; then : $as_echo "#define HAVE_ISASCII 1" >>confdefs.h else case " $LIBOBJS " in *" isascii.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS isascii.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "memrchr" "ac_cv_func_memrchr" if test "x$ac_cv_func_memrchr" = xyes; then : $as_echo "#define HAVE_MEMRCHR 1" >>confdefs.h else case " $LIBOBJS " in *" memrchr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS memrchr.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep" if test "x$ac_cv_func_strsep" = xyes; then : $as_echo "#define HAVE_STRSEP 1" >>confdefs.h else case " $LIBOBJS " in *" strsep.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strsep.$ac_objext" ;; esac fi ac_fn_c_check_type "$LINENO" "struct sigaction" "ac_cv_type_struct_sigaction" "#include " if test "x$ac_cv_type_struct_sigaction" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRUCT_SIGACTION 1 _ACEOF fi ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" "#include " if test "x$ac_cv_type_sigset_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SIGSET_T 1 _ACEOF fi # See if getopt is in libiberty. This is of course not optimal since # it might be somewhere other than libiberty, but does cover the # mingw32 case. ac_fn_c_check_func "$LINENO" "getopt" "ac_cv_func_getopt" if test "x$ac_cv_func_getopt" = xyes; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for getopt in -liberty" >&5 $as_echo_n "checking for getopt in -liberty... " >&6; } if ${ac_cv_lib_iberty_getopt+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-liberty $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char getopt (); int main () { return getopt (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_iberty_getopt=yes else ac_cv_lib_iberty_getopt=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_iberty_getopt" >&5 $as_echo "$ac_cv_lib_iberty_getopt" >&6; } if test "x$ac_cv_lib_iberty_getopt" = xyes; then : GETOPT="-liberty" fi fi # # check for gethrtime and run a testprogram to see whether # it is broken. It has been reported that some Solaris and HP UX systems # raise an SIGILL # { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethrtime" >&5 $as_echo_n "checking for gethrtime... " >&6; } if ${gnupg_cv_func_gethrtime+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { hrtime_t tv; tv = gethrtime(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gnupg_cv_func_gethrtime=yes else gnupg_cv_func_gethrtime=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_func_gethrtime" >&5 $as_echo "$gnupg_cv_func_gethrtime" >&6; } if test $gnupg_cv_func_gethrtime = yes; then $as_echo "#define HAVE_GETHRTIME 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gethrtime is broken" >&5 $as_echo_n "checking whether gethrtime is broken... " >&6; } if ${gnupg_cv_func_broken_gethrtime+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gnupg_cv_func_broken_gethrtime=assume-no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { hrtime_t tv; tv = gethrtime(); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gnupg_cv_func_broken_gethrtime=no else gnupg_cv_func_broken_gethrtime=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_func_broken_gethrtime" >&5 $as_echo "$gnupg_cv_func_broken_gethrtime" >&6; } if test $gnupg_cv_func_broken_gethrtime = yes; then $as_echo "#define HAVE_BROKEN_GETHRTIME 1" >>confdefs.h fi fi for ac_func in mlock do : ac_fn_c_check_func "$LINENO" "mlock" "ac_cv_func_mlock" if test "x$ac_cv_func_mlock" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MLOCK 1 _ACEOF fi done if test "$ac_cv_func_mlock" = "no"; then for ac_header in sys/mman.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/mman.h" "ac_cv_header_sys_mman_h" "$ac_includes_default" if test "x$ac_cv_header_sys_mman_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_MMAN_H 1 _ACEOF fi done if test "$ac_cv_header_sys_mman_h" = "yes"; then # Add librt to LIBS: { $as_echo "$as_me:${as_lineno-$LINENO}: checking for memlk in -lrt" >&5 $as_echo_n "checking for memlk in -lrt... " >&6; } if ${ac_cv_lib_rt_memlk+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char memlk (); int main () { return memlk (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_rt_memlk=yes else ac_cv_lib_rt_memlk=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rt_memlk" >&5 $as_echo "$ac_cv_lib_rt_memlk" >&6; } if test "x$ac_cv_lib_rt_memlk" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBRT 1 _ACEOF LIBS="-lrt $LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mlock is in sys/mman.h" >&5 $as_echo_n "checking whether mlock is in sys/mman.h... " >&6; } if ${gnupg_cv_mlock_is_in_sys_mman+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_SYS_MMAN_H #include #endif int main () { int i; /* glibc defines this for functions which it implements * to always fail with ENOSYS. Some functions are actually * named something starting with __ and the normal name * is an alias. */ #if defined (__stub_mlock) || defined (__stub___mlock) choke me #else mlock(&i, 4); #endif ; return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gnupg_cv_mlock_is_in_sys_mman=yes else gnupg_cv_mlock_is_in_sys_mman=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_mlock_is_in_sys_mman" >&5 $as_echo "$gnupg_cv_mlock_is_in_sys_mman" >&6; } if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then $as_echo "#define HAVE_MLOCK 1" >>confdefs.h fi fi fi if test "$ac_cv_func_mlock" = "yes"; then for ac_func in sysconf getpagesize do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mlock is broken" >&5 $as_echo_n "checking whether mlock is broken... " >&6; } if ${gnupg_cv_have_broken_mlock+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gnupg_cv_have_broken_mlock="assume-no" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include #include int main() { char *pool; int err; long int pgsize; #if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE) pgsize = sysconf(_SC_PAGESIZE); #elif defined(HAVE_GETPAGESIZE) pgsize = getpagesize(); #else pgsize = -1; #endif if(pgsize==-1) pgsize = 4096; pool = malloc( 4096 + pgsize ); if( !pool ) return 2; pool += (pgsize - ((long int)pool % pgsize)); err = mlock( pool, 4096 ); if( !err || errno == EPERM ) return 0; /* okay */ return 1; /* hmmm */ } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gnupg_cv_have_broken_mlock="no" else gnupg_cv_have_broken_mlock="yes" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi if test "$gnupg_cv_have_broken_mlock" = "yes"; then $as_echo "#define HAVE_BROKEN_MLOCK 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } for ac_func in plock do : ac_fn_c_check_func "$LINENO" "plock" "ac_cv_func_plock" if test "x$ac_cv_func_plock" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PLOCK 1 _ACEOF fi done else if test "$gnupg_cv_have_broken_mlock" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: assuming no" >&5 $as_echo "assuming no" >&6; } fi fi fi for ac_header in sys/stat.h unistd.h direct.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking if mkdir takes one argument" >&5 $as_echo_n "checking if mkdir takes one argument... " >&6; } if ${gnupg_cv_mkdir_takes_one_arg+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_DIRECT_H # include #endif int main () { mkdir ("foo", 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_mkdir_takes_one_arg=no else gnupg_cv_mkdir_takes_one_arg=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_mkdir_takes_one_arg" >&5 $as_echo "$gnupg_cv_mkdir_takes_one_arg" >&6; } if test $gnupg_cv_mkdir_takes_one_arg = yes ; then $as_echo "#define MKDIR_TAKES_ONE_ARG 1" >>confdefs.h fi # # Prepare building of estream-printf # { $as_echo "$as_me:${as_lineno-$LINENO}: checking system features for estream-printf" >&5 $as_echo "$as_me: checking system features for estream-printf" >&6;} for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if ${ac_cv_type_long_long_int+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif int main () { long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_type_long_long_int=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 $as_echo "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long double" >&5 $as_echo_n "checking for long double... " >&6; } if ${ac_cv_type_long_double+:} false; then : $as_echo_n "(cached) " >&6 else if test "$GCC" = yes; then ac_cv_type_long_double=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* The Stardent Vistra knows sizeof (long double), but does not support it. */ long double foo = 0.0L; int main () { static int test_array [1 - 2 * !(/* On Ultrix 4.3 cc, long double is 4 and double is 8. */ sizeof (double) <= sizeof (long double))]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_long_double=yes else ac_cv_type_long_double=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_double" >&5 $as_echo "$ac_cv_type_long_double" >&6; } if test $ac_cv_type_long_double = yes; then $as_echo "#define HAVE_LONG_DOUBLE 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "intmax_t" "ac_cv_type_intmax_t" "$ac_includes_default" if test "x$ac_cv_type_intmax_t" = xyes; then : $as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h else test $ac_cv_type_long_long_int = yes \ && ac_type='long long int' \ || ac_type='long int' cat >>confdefs.h <<_ACEOF #define intmax_t $ac_type _ACEOF fi ac_fn_c_check_type "$LINENO" "uintmax_t" "ac_cv_type_uintmax_t" "$ac_includes_default" if test "x$ac_cv_type_uintmax_t" = xyes; then : $as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h else test $ac_cv_type_unsigned_long_long_int = yes \ && ac_type='unsigned long long int' \ || ac_type='unsigned long int' cat >>confdefs.h <<_ACEOF #define uintmax_t $ac_type _ACEOF fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_PTRDIFF_T 1 _ACEOF fi # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of unsigned long" >&5 $as_echo_n "checking size of unsigned long... " >&6; } if ${ac_cv_sizeof_unsigned_long+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (unsigned long))" "ac_cv_sizeof_unsigned_long" "$ac_includes_default"; then : else if test "$ac_cv_type_unsigned_long" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (unsigned long) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_unsigned_long=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_unsigned_long" >&5 $as_echo "$ac_cv_sizeof_unsigned_long" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_UNSIGNED_LONG $ac_cv_sizeof_unsigned_long _ACEOF # The cast to long int works around a bug in the HP C Compiler # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. { $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 $as_echo_n "checking size of void *... " >&6; } if ${ac_cv_sizeof_void_p+:} false; then : $as_echo_n "(cached) " >&6 else if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : else if test "$ac_cv_type_void_p" = yes; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else ac_cv_sizeof_void_p=0 fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 $as_echo "$ac_cv_sizeof_void_p" >&6; } cat >>confdefs.h <<_ACEOF #define SIZEOF_VOID_P $ac_cv_sizeof_void_p _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and THOUSANDS_SEP" >&5 $as_echo_n "checking for nl_langinfo and THOUSANDS_SEP... " >&6; } if ${estream_cv_langinfo_thousands_sep+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(THOUSANDS_SEP); return !cs; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : estream_cv_langinfo_thousands_sep=yes else estream_cv_langinfo_thousands_sep=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $estream_cv_langinfo_thousands_sep" >&5 $as_echo "$estream_cv_langinfo_thousands_sep" >&6; } if test $estream_cv_langinfo_thousands_sep = yes; then $as_echo "#define HAVE_LANGINFO_THOUSANDS_SEP 1" >>confdefs.h fi if test "$use_capabilities" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** WARNING: using capabilities with GnuPG is experimental code! ***" >&5 $as_echo "$as_me: WARNING: *** *** WARNING: using capabilities with GnuPG is experimental code! ***" >&2;} use_capabilities=no for ac_header in sys/capability.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/capability.h" "ac_cv_header_sys_capability_h" "$ac_includes_default" if test "x$ac_cv_header_sys_capability_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_CAPABILITY_H 1 _ACEOF fi done if test "$ac_cv_header_sys_capability_h" = "yes" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_init in -lcap" >&5 $as_echo_n "checking for cap_init in -lcap... " >&6; } if ${ac_cv_lib_cap_cap_init+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char cap_init (); int main () { return cap_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_cap_cap_init=yes else ac_cv_lib_cap_cap_init=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_cap_init" >&5 $as_echo "$ac_cv_lib_cap_cap_init" >&6; } if test "x$ac_cv_lib_cap_cap_init" = xyes; then : ac_need_libcap=1 fi if test "$ac_cv_lib_cap_cap_init" = "yes"; then $as_echo "#define USE_CAPABILITIES 1" >>confdefs.h CAPLIBS="-lcap" use_capabilities=yes fi fi if test "$use_capabilities" = "no" ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** 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. ***" >&5 $as_echo "$as_me: WARNING: *** *** 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. ***" >&2;} fi fi for ac_header in sys/ipc.h sys/shm.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done if test "$ac_cv_header_sys_shm_h" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether IPC_RMID allowes subsequent attaches" >&5 $as_echo_n "checking whether IPC_RMID allowes subsequent attaches... " >&6; } if ${gnupg_cv_ipc_rmid_deferred_release+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gnupg_cv_ipc_rmid_deferred_release="assume-no" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main() { int id; char *shmaddr; id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777); if (id == -1) exit (2); shmaddr = shmat (id, 0, 0); shmctl (id, IPC_RMID, 0); if ((char*) shmat (id, 0, 0) == (char*) -1) { shmdt (shmaddr); exit (1); } shmdt (shmaddr); shmdt (shmaddr); exit (0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gnupg_cv_ipc_rmid_deferred_release="yes" else gnupg_cv_ipc_rmid_deferred_release="no" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi if test "$gnupg_cv_ipc_rmid_deferred_release" = "yes"; then $as_echo "#define IPC_RMID_DEFERRED_RELEASE 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else if test "$gnupg_cv_ipc_rmid_deferred_release" = "no"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: assuming no" >&5 $as_echo "assuming no" >&6; } fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether SHM_LOCK is available" >&5 $as_echo_n "checking whether SHM_LOCK is available... " >&6; } if ${gnupg_cv_ipc_have_shm_lock+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { int shm_id; shmctl(shm_id, SHM_LOCK, 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gnupg_cv_ipc_have_shm_lock="yes" else gnupg_cv_ipc_have_shm_lock="no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test "$gnupg_cv_ipc_have_shm_lock" = "yes"; then $as_echo "#define IPC_HAVE_SHM_LOCK 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test "$ac_cv_header_sys_shm_h" = "yes"; then $as_echo "#define USE_SHM_COPROCESSING 1" >>confdefs.h fi if test "$ac_cv_header_sys_shm_h" = yes; then HAVE_SHM_TRUE= HAVE_SHM_FALSE='#' else HAVE_SHM_TRUE='#' HAVE_SHM_FALSE= fi if test "$try_dev_random" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for random device" >&5 $as_echo_n "checking for random device... " >&6; } if ${ac_cv_have_dev_random+:} false; then : $as_echo_n "(cached) " >&6 else if test -r "$NAME_OF_DEV_RANDOM" && test -r "$NAME_OF_DEV_URANDOM" ; then ac_cv_have_dev_random=yes; else ac_cv_have_dev_random=no; fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_dev_random" >&5 $as_echo "$ac_cv_have_dev_random" >&6; } if test "$ac_cv_have_dev_random" = yes; then $as_echo "#define HAVE_DEV_RANDOM 1" >>confdefs.h fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for random device" >&5 $as_echo_n "checking for random device... " >&6; } ac_cv_have_dev_random=no { $as_echo "$as_me:${as_lineno-$LINENO}: result: has been disabled" >&5 $as_echo "has been disabled" >&6; } fi random_modules="" if test "$use_static_rnd" = default; then if test "$ac_cv_have_dev_random" = yes; then random_modules="rndlinux" else case "${host}" in *-mingw32*|*-*-cygwin*) random_modules="rndw32" ;; i?86-emx-os2|i?86-*-os2*emx) random_modules="rndos2" ;; m68k-atari-mint) random_modules="rndatari" ;; i?86-*-msdosdjgpp*) : ;; *) random_modules="rndlinux rndegd rndunix" $as_echo "#define USE_ALL_RANDOM_MODULES 1" >>confdefs.h ;; esac fi else if test "$use_static_rnd" = auto; then random_modules="rndlinux rndegd rndunix" $as_echo "#define USE_ALL_RANDOM_MODULES 1" >>confdefs.h else random_modules="rnd$use_static_rnd"; fi fi if test -z "$random_modules"; then as_fn_error $? "no random module available" "$LINENO" 5 fi print_egd_warning=no for rndmod in $random_modules "" ; do case "$rndmod" in rndlinux) $as_echo "#define USE_RNDLINUX 1" >>confdefs.h use_rndlinux=yes ;; rndunix) $as_echo "#define USE_RNDUNIX 1" >>confdefs.h print_egd_warning=yes use_rndunix=yes ;; rndegd) $as_echo "#define USE_RNDEGD 1" >>confdefs.h use_rndegd=yes ;; rndw32) $as_echo "#define USE_RNDW32 1" >>confdefs.h use_rndw32=yes ;; esac done if test "$use_rndlinux" = yes; then USE_RNDLINUX_TRUE= USE_RNDLINUX_FALSE='#' else USE_RNDLINUX_TRUE='#' USE_RNDLINUX_FALSE= fi if test "$use_rndunix" = yes; then USE_RNDUNIX_TRUE= USE_RNDUNIX_FALSE='#' else USE_RNDUNIX_TRUE='#' USE_RNDUNIX_FALSE= fi if test "$use_rndegd" = yes; then USE_RNDEGD_TRUE= USE_RNDEGD_FALSE='#' else USE_RNDEGD_TRUE='#' USE_RNDEGD_FALSE= fi if test "$use_rndw32" = yes; then USE_RNDW32_TRUE= USE_RNDW32_FALSE='#' else USE_RNDW32_TRUE='#' USE_RNDW32_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mpi assembler functions" >&5 $as_echo_n "checking for mpi assembler functions... " >&6; } if test -f $srcdir/mpi/config.links ; then . $srcdir/mpi/config.links ac_config_links="$ac_config_links "$mpi_ln_list"" ac_cv_mpi_extra_asm_modules="$mpi_extra_modules" ac_cv_mpi_sflags="$mpi_sflags" ac_cv_mpi_config_done="yes" { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 $as_echo "failed" >&6; } as_fn_error $? "mpi/config.links missing!" "$LINENO" 5 fi MPI_EXTRA_ASM_OBJS="" show_extraasm="" if test "$ac_cv_mpi_extra_asm_modules" != ""; then for i in $ac_cv_mpi_extra_asm_modules; do show_extraasm="$show_extraasm $i" MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o" done fi MPI_SFLAGS="$ac_cv_mpi_sflags" # Sanity check regex. Tests adapted from mutt. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether regular expression support is requested" >&5 $as_echo_n "checking whether regular expression support is requested... " >&6; } # Check whether --enable-regex was given. if test "${enable_regex+set}" = set; then : enableval=$enable_regex; use_regex=$enableval else use_regex=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_regex" >&5 $as_echo "$use_regex" >&6; } if test "$use_regex" = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the included regex lib is requested" >&5 $as_echo_n "checking whether the included regex lib is requested... " >&6; } # Check whether --with-included-regex was given. if test "${with_included_regex+set}" = set; then : withval=$with_included_regex; gnupg_cv_included_regex="$withval" else gnupg_cv_included_regex=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_included_regex" >&5 $as_echo "$gnupg_cv_included_regex" >&6; } if test $gnupg_cv_included_regex = no ; then # Does the system have regex functions at all? ac_fn_c_check_func "$LINENO" "regcomp" "ac_cv_func_regcomp" if test "x$ac_cv_func_regcomp" = xyes; then : gnupg_cv_included_regex=no else gnupg_cv_included_regex=yes fi fi if test $gnupg_cv_included_regex = no ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether your system's regexp library is broken" >&5 $as_echo_n "checking whether your system's regexp library is broken... " >&6; } if ${gnupg_cv_regex_broken+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gnupg_cv_regex_broken=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gnupg_cv_regex_broken=no else gnupg_cv_regex_broken=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gnupg_cv_regex_broken" >&5 $as_echo "$gnupg_cv_regex_broken" >&6; } if test $gnupg_cv_regex_broken = yes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: your regex is broken - using the included GNU regex instead." >&5 $as_echo "$as_me: WARNING: your regex is broken - using the included GNU regex instead." >&2;} gnupg_cv_included_regex=yes fi fi if test $gnupg_cv_included_regex = yes; then $as_echo "#define USE_INTERNAL_REGEX 1" >>confdefs.h fi else $as_echo "#define DISABLE_REGEX 1" >>confdefs.h fi if test x"$gnupg_cv_included_regex" = xyes; then USE_INTERNAL_REGEX_TRUE= USE_INTERNAL_REGEX_FALSE='#' else USE_INTERNAL_REGEX_TRUE='#' USE_INTERNAL_REGEX_FALSE= fi use_local_zlib=yes if test "$g10_force_zlib" = "yes"; then : else _cppflags="${CPPFLAGS}" _ldflags="${LDFLAGS}" # Check whether --with-zlib was given. if test "${with_zlib+set}" = set; then : withval=$with_zlib; if test -d "$withval"; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi fi ac_fn_c_check_header_mongrel "$LINENO" "zlib.h" "ac_cv_header_zlib_h" "$ac_includes_default" if test "x$ac_cv_header_zlib_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for deflateInit2_ in -lz" >&5 $as_echo_n "checking for deflateInit2_ in -lz... " >&6; } if ${ac_cv_lib_z_deflateInit2_+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char deflateInit2_ (); int main () { return deflateInit2_ (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_deflateInit2_=yes else ac_cv_lib_z_deflateInit2_=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_deflateInit2_" >&5 $as_echo "$ac_cv_lib_z_deflateInit2_" >&6; } if test "x$ac_cv_lib_z_deflateInit2_" = xyes; then : use_local_zlib=no ZLIBS="-lz" else CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags} fi else CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags} fi fi if test "$use_local_zlib" = yes ; then ac_config_links="$ac_config_links zlib.h:zlib/zlib.h zconf.h:zlib/zconf.h" ZLIBS="../zlib/libzlib.a" fi if test "$use_local_zlib" = yes; then ENABLE_LOCAL_ZLIB_TRUE= ENABLE_LOCAL_ZLIB_FALSE='#' else ENABLE_LOCAL_ZLIB_TRUE='#' ENABLE_LOCAL_ZLIB_FALSE= fi # Under W32 we force the use ofthe included bzip2 code. if test x"$have_w32_system" = xyes ; then have_bz2=yes $as_echo "#define HAVE_BZIP2 1" >>confdefs.h ac_config_links="$ac_config_links bzlib.h:bzlib/bzlib.h" ZLIBS="$ZLIBS ../bzlib/libbz2.a" else if test "$use_bzip2" = yes ; then _cppflags="${CPPFLAGS}" _ldflags="${LDFLAGS}" # Check whether --with-bzip2 was given. if test "${with_bzip2+set}" = set; then : withval=$with_bzip2; if test -d "$withval" ; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi else withval="" fi # Checking alongside stdio.h as an early version of bzip2 (1.0) # required stdio.h to be included before bzlib.h, and Solaris 9 is # woefully out of date. if test "$withval" != no ; then ac_fn_c_check_header_compile "$LINENO" "bzlib.h" "ac_cv_header_bzlib_h" "#include " if test "x$ac_cv_header_bzlib_h" = xyes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for BZ2_bzCompressInit in -lbz2" >&5 $as_echo_n "checking for BZ2_bzCompressInit in -lbz2... " >&6; } if ${ac_cv_lib_bz2_BZ2_bzCompressInit+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbz2 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char BZ2_bzCompressInit (); int main () { return BZ2_bzCompressInit (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bz2_BZ2_bzCompressInit=yes else ac_cv_lib_bz2_BZ2_bzCompressInit=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bz2_BZ2_bzCompressInit" >&5 $as_echo "$ac_cv_lib_bz2_BZ2_bzCompressInit" >&6; } if test "x$ac_cv_lib_bz2_BZ2_bzCompressInit" = xyes; then : have_bz2=yes ZLIBS="$ZLIBS -lbz2" $as_echo "#define HAVE_BZIP2 1" >>confdefs.h else CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags} fi else CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags} fi fi fi fi if test x"$have_bz2" = "xyes"; then ENABLE_BZIP2_SUPPORT_TRUE= ENABLE_BZIP2_SUPPORT_FALSE='#' else ENABLE_BZIP2_SUPPORT_TRUE='#' ENABLE_BZIP2_SUPPORT_FALSE= fi # libusb allows us to use the integrated CCID smartcard reader driver. # We don't need it if we don't have card support though. if test "$card_support" = yes ; then # Check whether --with-libusb was given. if test "${with_libusb+set}" = set; then : withval=$with_libusb; _do_libusb=$withval else _do_libusb=yes fi if test "$_do_libusb" != "no" ; then if test -d "$withval" ; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" # Extract the first word of ""$_do_libusb/bin/libusb-config"", so it can be a program name with args. set dummy "$_do_libusb/bin/libusb-config"; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path__usb_config+:} false; then : $as_echo_n "(cached) " >&6 else case $_usb_config in [\\/]* | ?:[\\/]*) ac_cv_path__usb_config="$_usb_config" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path__usb_config="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi _usb_config=$ac_cv_path__usb_config if test -n "$_usb_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_usb_config" >&5 $as_echo "$_usb_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi else # Extract the first word of "libusb-config", so it can be a program name with args. set dummy libusb-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path__usb_config+:} false; then : $as_echo_n "(cached) " >&6 else case $_usb_config in [\\/]* | ?:[\\/]*) ac_cv_path__usb_config="$_usb_config" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path__usb_config="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi _usb_config=$ac_cv_path__usb_config if test -n "$_usb_config"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_usb_config" >&5 $as_echo "$_usb_config" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi _libusb_save_libs=$LIBS _libusb_save_cflags=$CFLAGS if test x$_usb_config != "x" ; then _libusb_try_libs=`$LIBS $_usb_config --libs` _libusb_try_cflags=`$LIBS $_usb_config --cflags` else _libusb_try_libs="-lusb" _libusb_try_cflags="" fi LIBS="$LIBS $_libusb_try_libs" CFLAGS="$CFLAGS $_libusb_try_cflags" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether libusb is present and sane" >&5 $as_echo_n "checking whether libusb is present and sane... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { usb_bulk_write(NULL,0,NULL,0,0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : _found_libusb=yes else _found_libusb=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_found_libusb" >&5 $as_echo "$_found_libusb" >&6; } if test $_found_libusb = yes ; then $as_echo "#define HAVE_LIBUSB 1" >>confdefs.h LIBUSB_CPPFLAGS=$_libusb_try_cflags LIBUSB=$_libusb_try_libs for ac_func in usb_get_busses do : ac_fn_c_check_func "$LINENO" "usb_get_busses" "ac_cv_func_usb_get_busses" if test "x$ac_cv_func_usb_get_busses" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_USB_GET_BUSSES 1 _ACEOF fi done fi LIBS=$_libusb_save_libs CFLAGS=$_libusb_save_cflags unset _libusb_save_libs unset _libusb_save_cflags unset _libusb_try_libs unset _libusb_try_cflags unset _found_libusb fi fi # Check for readline support # Check whether --with-readline was given. if test "${with_readline+set}" = set; then : withval=$with_readline; _do_readline=$withval else _do_readline=yes fi if test "$_do_readline" != "no" ; then if test -d "$withval" ; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi for _termcap in "" "-ltermcap" "-lcurses" "-lncurses" ; do _readline_save_libs=$LIBS _combo="-lreadline${_termcap:+ $_termcap}" LIBS="$LIBS $_combo" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether readline via \"$_combo\" is present and sane" >&5 $as_echo_n "checking whether readline via \"$_combo\" is present and sane... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { rl_completion_func_t *completer; add_history("foobar"); rl_catch_signals=0; rl_inhibit_completion=0; rl_attempted_completion_function=NULL; rl_completion_matches(NULL,NULL); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : _found_readline=yes else _found_readline=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_found_readline" >&5 $as_echo "$_found_readline" >&6; } LIBS=$_readline_save_libs if test $_found_readline = yes ; then $as_echo "#define HAVE_LIBREADLINE 1" >>confdefs.h LIBREADLINE=$_combo break fi done unset _termcap unset _readline_save_libs unset _combo unset _found_readline fi # Allow users to append something to the version string without # flagging it as development version. The user version parts is # considered everything after a dash. if test "$development_version" != yes; then tmp_pat='[a-zA-Z]' if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then development_version=yes fi fi if test "$development_version" = yes; then $as_echo "#define IS_DEVELOPMENT_VERSION 1" >>confdefs.h fi if test x$cross_compiling = xyes; then CROSS_COMPILING_TRUE= CROSS_COMPILING_FALSE='#' else CROSS_COMPILING_TRUE='#' CROSS_COMPILING_FALSE= fi # add some extra libs here so that previous tests don't fail for # mysterious reasons - the final link step should bail out. case "${host}" in *-mingw32*) W32LIBS="-lwsock32" ;; *) ;; esac # Special options used with gcc. if test "$GCC" = yes; then # Note that it is okay to use CFLAGS here because this are just # warning options and the user should have a chance of overriding #them. if test "$USE_MAINTAINER_MODE" = "yes"; then CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes" CFLAGS="$CFLAGS -Wformat-nonliteral" else CFLAGS="$CFLAGS -Wall" fi # This is handy for debugging so the compiler doesn't rearrange # things and eliminate variables. # Check whether --enable-optimization was given. if test "${enable_optimization+set}" = set; then : enableval=$enable_optimization; if test $enableval = no ; then CFLAGS=`echo $CFLAGS | sed 's/-O[0-9]//'` fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc supports -Wno-pointer-sign" >&5 $as_echo_n "checking if gcc supports -Wno-pointer-sign... " >&6; } _gcc_cflags_save=$CFLAGS CFLAGS="-Wno-pointer-sign" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : _gcc_psign=yes else _gcc_psign=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_gcc_psign" >&5 $as_echo "$_gcc_psign" >&6; } CFLAGS=$_gcc_cflags_save; if test x"$_gcc_psign" = xyes ; then CFLAGS="$CFLAGS -Wno-pointer-sign" fi fi # By default we simply use the C compiler to build assembly code. test "${CCAS+set}" = set || CCAS=$CC test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS depcc="$CCAS" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CCAS_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CCAS_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CCAS_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 $as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then am__fastdepCCAS_TRUE= am__fastdepCCAS_FALSE='#' else am__fastdepCCAS_TRUE='#' am__fastdepCCAS_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether non excutable stack support is requested" >&5 $as_echo_n "checking whether non excutable stack support is requested... " >&6; } # Check whether --enable-noexecstack was given. if test "${enable_noexecstack+set}" = set; then : enableval=$enable_noexecstack; noexecstack_support=$enableval else noexecstack_support=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $noexecstack_support" >&5 $as_echo "$noexecstack_support" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether assembler supports --noexecstack option" >&5 $as_echo_n "checking whether assembler supports --noexecstack option... " >&6; } if ${cl_cv_as_noexecstack+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.c <&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } \ && grep -q .note.GNU-stack conftest.s \ && { ac_try='${CCAS} $CCASFLAGS $CPPFLAGS -Wa,--noexecstack -c -o conftest.o conftest.s >/dev/null' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 (eval $ac_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; } then cl_cv_as_noexecstack=yes else cl_cv_as_noexecstack=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cl_cv_as_noexecstack" >&5 $as_echo "$cl_cv_as_noexecstack" >&6; } if test "$noexecstack_support" = yes -a "$cl_cv_as_noexecstack" = yes; then NOEXECSTACK_FLAGS="-Wa,--noexecstack" else NOEXECSTACK_FLAGS= fi if test "$print_egd_warning" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** The performance of the UNIX random gatherer module is not very good *** and it does not keep the entropy pool over multiple invocations of *** GnuPG. The suggested way to overcome this problem is to use the *** *** Entropy Gathering Daemon (EGD) *** *** which provides a entropy source for the whole system. It is written *** in Perl and available at the GnuPG FTP servers. For more information *** consult the GnuPG webpages: *** *** http://www.gnupg.org/download/#EGD *** *** You may want to run ./configure with --enable-static-rnd=egd or *** --enable-static-rnd=auto to use it. ***" >&5 $as_echo "$as_me: WARNING: *** *** The performance of the UNIX random gatherer module is not very good *** and it does not keep the entropy pool over multiple invocations of *** GnuPG. The suggested way to overcome this problem is to use the *** *** Entropy Gathering Daemon (EGD) *** *** which provides a entropy source for the whole system. It is written *** in Perl and available at the GnuPG FTP servers. For more information *** consult the GnuPG webpages: *** *** http://www.gnupg.org/download/#EGD *** *** You may want to run ./configure with --enable-static-rnd=egd or *** --enable-static-rnd=auto to use it. ***" >&2;} fi ac_config_files="$ac_config_files Makefile m4/Makefile intl/Makefile po/Makefile.in util/Makefile mpi/Makefile cipher/Makefile g10/Makefile keyserver/Makefile keyserver/gpgkeys_mailto keyserver/gpgkeys_test doc/Makefile tools/Makefile tools/gpg-zip zlib/Makefile bzlib/Makefile checks/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then as_fn_error $? "conditional \"MAINTAINER_MODE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_USTAR_TRUE}" && test -z "${HAVE_USTAR_FALSE}"; then as_fn_error $? "conditional \"HAVE_USTAR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_DOSISH_SYSTEM_TRUE}" && test -z "${HAVE_DOSISH_SYSTEM_FALSE}"; then as_fn_error $? "conditional \"HAVE_DOSISH_SYSTEM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_SIMPLE_GETTEXT_TRUE}" && test -z "${USE_SIMPLE_GETTEXT_FALSE}"; then as_fn_error $? "conditional \"USE_SIMPLE_GETTEXT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_W32_SYSTEM_TRUE}" && test -z "${HAVE_W32_SYSTEM_FALSE}"; then as_fn_error $? "conditional \"HAVE_W32_SYSTEM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_DNS_SRV_TRUE}" && test -z "${USE_DNS_SRV_FALSE}"; then as_fn_error $? "conditional \"USE_DNS_SRV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${FAKE_CURL_TRUE}" && test -z "${FAKE_CURL_FALSE}"; then as_fn_error $? "conditional \"FAKE_CURL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_CARD_SUPPORT_TRUE}" && test -z "${ENABLE_CARD_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_CARD_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_AGENT_SUPPORT_TRUE}" && test -z "${ENABLE_AGENT_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_AGENT_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_SELINUX_HACKS_TRUE}" && test -z "${ENABLE_SELINUX_HACKS_FALSE}"; then as_fn_error $? "conditional \"ENABLE_SELINUX_HACKS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_SHA512_TRUE}" && test -z "${USE_SHA512_FALSE}"; then as_fn_error $? "conditional \"USE_SHA512\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_SHM_TRUE}" && test -z "${HAVE_SHM_FALSE}"; then as_fn_error $? "conditional \"HAVE_SHM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_RNDLINUX_TRUE}" && test -z "${USE_RNDLINUX_FALSE}"; then as_fn_error $? "conditional \"USE_RNDLINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_RNDUNIX_TRUE}" && test -z "${USE_RNDUNIX_FALSE}"; then as_fn_error $? "conditional \"USE_RNDUNIX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_RNDEGD_TRUE}" && test -z "${USE_RNDEGD_FALSE}"; then as_fn_error $? "conditional \"USE_RNDEGD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_RNDW32_TRUE}" && test -z "${USE_RNDW32_FALSE}"; then as_fn_error $? "conditional \"USE_RNDW32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_INTERNAL_REGEX_TRUE}" && test -z "${USE_INTERNAL_REGEX_FALSE}"; then as_fn_error $? "conditional \"USE_INTERNAL_REGEX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_LOCAL_ZLIB_TRUE}" && test -z "${ENABLE_LOCAL_ZLIB_FALSE}"; then as_fn_error $? "conditional \"ENABLE_LOCAL_ZLIB\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${ENABLE_BZIP2_SUPPORT_TRUE}" && test -z "${ENABLE_BZIP2_SUPPORT_FALSE}"; then as_fn_error $? "conditional \"ENABLE_BZIP2_SUPPORT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CROSS_COMPILING_TRUE}" && test -z "${CROSS_COMPILING_FALSE}"; then as_fn_error $? "conditional \"CROSS_COMPILING\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by gnupg $as_me 1.4.20, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_links="$ac_config_links" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration links: $config_links Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ gnupg config.status 1.4.20 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; ""$mpi_ln_list"") CONFIG_LINKS="$CONFIG_LINKS "$mpi_ln_list"" ;; "zlib.h") CONFIG_LINKS="$CONFIG_LINKS zlib.h:zlib/zlib.h" ;; "zconf.h") CONFIG_LINKS="$CONFIG_LINKS zconf.h:zlib/zconf.h" ;; "bzlib.h") CONFIG_LINKS="$CONFIG_LINKS bzlib.h:bzlib/bzlib.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;; "intl/Makefile") CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; "mpi/Makefile") CONFIG_FILES="$CONFIG_FILES mpi/Makefile" ;; "cipher/Makefile") CONFIG_FILES="$CONFIG_FILES cipher/Makefile" ;; "g10/Makefile") CONFIG_FILES="$CONFIG_FILES g10/Makefile" ;; "keyserver/Makefile") CONFIG_FILES="$CONFIG_FILES keyserver/Makefile" ;; "keyserver/gpgkeys_mailto") CONFIG_FILES="$CONFIG_FILES keyserver/gpgkeys_mailto" ;; "keyserver/gpgkeys_test") CONFIG_FILES="$CONFIG_FILES keyserver/gpgkeys_test" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "tools/Makefile") CONFIG_FILES="$CONFIG_FILES tools/Makefile" ;; "tools/gpg-zip") CONFIG_FILES="$CONFIG_FILES tools/gpg-zip" ;; "zlib/Makefile") CONFIG_FILES="$CONFIG_FILES zlib/Makefile" ;; "bzlib/Makefile") CONFIG_FILES="$CONFIG_FILES bzlib/Makefile" ;; "checks/Makefile") CONFIG_FILES="$CONFIG_FILES checks/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_LINKS+set}" = set || CONFIG_LINKS=$config_links test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :L) # # CONFIG_LINK # if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then : else # Prefer the file from the source tree if names are identical. if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then ac_source=$srcdir/$ac_source fi { $as_echo "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 $as_echo "$as_me: linking $ac_source to $ac_file" >&6;} if test ! -r "$ac_source"; then as_fn_error $? "$ac_source: file not found" "$LINENO" 5 fi rm -f "$ac_file" # Try a relative symlink, then a hard link, then a copy. case $ac_source in [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; *) ac_rel_source=$ac_top_build_prefix$ac_source ;; esac ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || ln "$ac_source" "$ac_file" 2>/dev/null || cp -p "$ac_source" "$ac_file" || as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi # Give some feedback echo echo " Version info: $PACKAGE_STRING" echo " Configured for: $PRINTABLE_OS_NAME ($host)" if test -n "$show_extraasm"; then echo " Extra cpu specific functions:$show_extraasm" fi echo gnupg-1.4.20/keyserver/0000755000175000017500000000000012635457217011752 500000000000000gnupg-1.4.20/keyserver/curl-shim.c0000644000175000017500000002100312635262326013730 00000000000000/* curl-shim.c - Implement a small subset of the curl API in terms of * the iobuf HTTP API * * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2012, * 2013 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 3 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, see . */ #include #include #include #include #include #include #include "http.h" #include "util.h" #include "ksutil.h" #include "curl-shim.h" static CURLcode handle_error(CURL *curl,CURLcode err,const char *str) { if(curl->errorbuffer) { /* Make sure you never exceed CURL_ERROR_SIZE, currently set to 256 in curl-shim.h */ switch(err) { case CURLE_OK: strcpy(curl->errorbuffer,"okay"); break; case CURLE_UNSUPPORTED_PROTOCOL: strcpy(curl->errorbuffer,"unsupported protocol"); break; case CURLE_COULDNT_CONNECT: strcpy(curl->errorbuffer,"couldn't connect"); break; case CURLE_WRITE_ERROR: strcpy(curl->errorbuffer,"write error"); break; case CURLE_HTTP_RETURNED_ERROR: sprintf(curl->errorbuffer,"url returned error %u",curl->status); break; default: strcpy(curl->errorbuffer,"generic error"); break; } if(str && (strlen(curl->errorbuffer)+2+strlen(str)+1)<=CURL_ERROR_SIZE) { strcat(curl->errorbuffer,": "); strcat(curl->errorbuffer,str); } } return err; } CURLcode curl_global_init(long flags) { return CURLE_OK; } void curl_global_cleanup(void) {} CURL * curl_easy_init(void) { CURL *handle; handle=calloc(1,sizeof(CURL)); if(handle) handle->errors=stderr; return handle; } void curl_easy_cleanup(CURL *curl) { free(curl); } CURLcode curl_easy_setopt(CURL *curl,CURLoption option,...) { va_list ap; va_start(ap,option); switch(option) { case CURLOPT_URL: curl->url=va_arg(ap,char *); break; case CURLOPT_USERPWD: curl->auth=va_arg(ap,char *); break; case CURLOPT_WRITEFUNCTION: curl->writer=va_arg(ap,write_func); break; case CURLOPT_FILE: curl->file=va_arg(ap,void *); break; case CURLOPT_ERRORBUFFER: curl->errorbuffer=va_arg(ap,char *); break; case CURLOPT_PROXY: curl->proxy=va_arg(ap,char *); break; case CURLOPT_POST: curl->flags.post=va_arg(ap,long)?1:0; break; case CURLOPT_POSTFIELDS: curl->postfields=va_arg(ap,char *); break; case CURLOPT_SRVTAG_GPG_HACK: curl->srvtag=va_arg(ap,char *); break; case CURLOPT_FAILONERROR: curl->flags.failonerror=va_arg(ap,long)?1:0; break; case CURLOPT_VERBOSE: curl->flags.verbose=va_arg(ap,long)?1:0; break; case CURLOPT_STDERR: curl->errors=va_arg(ap,FILE *); break; case CURLOPT_HTTPHEADER: curl->headers=va_arg(ap,struct curl_slist *); break; default: /* We ignore the huge majority of curl options */ break; } va_end(ap); return handle_error(curl,CURLE_OK,NULL); } CURLcode curl_easy_perform(CURL *curl) { int rc; CURLcode err=CURLE_OK; const char *errstr=NULL; char *proxy=NULL; struct http_srv srv; memset(&srv,0,sizeof(srv)); /* Emulate the libcurl proxy behavior. If the calling program set a proxy, use it. If it didn't set a proxy or set it to NULL, check for one in the environment. If the calling program explicitly set a null-string proxy the http code doesn't use a proxy at all. */ if(curl->proxy) proxy=curl->proxy; else proxy=getenv(HTTP_PROXY_ENV); if(curl->srvtag) srv.srvtag=curl->srvtag; if(curl->flags.verbose) { fprintf(curl->errors,"* HTTP proxy is \"%s\"\n",proxy?proxy:"null"); fprintf(curl->errors,"* HTTP URL is \"%s\"\n",curl->url); if(srv.srvtag) fprintf(curl->errors, "* SRV tag is \"%s\": host and port may be overridden\n", srv.srvtag); fprintf(curl->errors,"* HTTP auth is \"%s\"\n", curl->auth?curl->auth:"null"); fprintf(curl->errors,"* HTTP method is %s\n", curl->flags.post?"POST":"GET"); } if(curl->flags.post) { rc=http_open(&curl->hd,HTTP_REQ_POST,curl->url,curl->auth,0,proxy, &srv,curl->headers?curl->headers->list:NULL); if(rc==0) { char content_len[50]; unsigned int post_len=strlen(curl->postfields); if(curl->flags.verbose && srv.used_server && srv.used_port) fprintf (curl->errors, "* HTTP host:port post-SRV is \"%s:%hu\"\n", srv.used_server, srv.used_port); iobuf_writestr(curl->hd.fp_write, "Content-Type: application/x-www-form-urlencoded\r\n"); sprintf(content_len,"Content-Length: %u\r\n",post_len); iobuf_writestr(curl->hd.fp_write,content_len); http_start_data(&curl->hd); iobuf_write(curl->hd.fp_write,curl->postfields,post_len); rc=http_wait_response(&curl->hd,&curl->status); if(rc==0 && curl->flags.failonerror && curl->status>=300) err=CURLE_HTTP_RETURNED_ERROR; } } else { rc=http_open(&curl->hd,HTTP_REQ_GET,curl->url,curl->auth,0,proxy, &srv,curl->headers?curl->headers->list:NULL); if(rc==0) { if(curl->flags.verbose && srv.used_server && srv.used_port) fprintf (curl->errors, "* HTTP host:port post-SRV is \"%s:%hu\"\n", srv.used_server, srv.used_port); rc=http_wait_response(&curl->hd,&curl->status); if(rc==0) { if(curl->flags.failonerror && curl->status>=300) err=CURLE_HTTP_RETURNED_ERROR; else { unsigned int maxlen=1024,buflen,len; byte *line=NULL; while((len=iobuf_read_line(curl->hd.fp_read, &line,&buflen,&maxlen))) { size_t ret; maxlen=1024; ret=(curl->writer)(line,len,1,curl->file); if(ret!=len) { err=CURLE_WRITE_ERROR; break; } } xfree(line); http_close(&curl->hd); } } else http_close(&curl->hd); } } free (srv.used_server); switch(rc) { case 0: break; case G10ERR_INVALID_URI: err=CURLE_UNSUPPORTED_PROTOCOL; break; case G10ERR_NETWORK: errstr=strerror(errno); err=CURLE_COULDNT_CONNECT; break; default: errstr=g10_errstr(rc); err=CURLE_COULDNT_CONNECT; break; } return handle_error(curl,err,errstr); } CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... ) { va_list ap; long *var; va_start(ap,info); switch(info) { case CURLINFO_RESPONSE_CODE: var=va_arg(ap,long *); *var=curl->status; break; default: break; } return handle_error(curl,CURLE_OK,NULL); } /* This is not the same exact set that is allowed according to RFC-2396, but it is what the real curl uses. */ #define VALID_URI_CHARS "abcdefghijklmnopqrstuvwxyz" \ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ "0123456789" char * curl_easy_escape(CURL *curl,char *str,int length) { int len,max,idx,enc_idx=0; char *enc; if(length) len=length; else len=strlen(str); enc = xtrymalloc(len+1); if(!enc) return enc; max=len; for(idx=0;idxmax) { char *tmp; max+=100; tmp=realloc(enc,max+1); if(!tmp) { free(enc); return NULL; } enc=tmp; } if(strchr(VALID_URI_CHARS,str[idx])) enc[enc_idx++]=str[idx]; else { char numbuf[5]; sprintf(numbuf,"%%%02X",(unsigned char)str[idx]); strcpy(&enc[enc_idx],numbuf); enc_idx+=3; } } enc[enc_idx]='\0'; return enc; } curl_version_info_data * curl_version_info(int type) { static curl_version_info_data data; static const char *protocols[]={"http",NULL}; data.protocols=protocols; return &data; } struct curl_slist * curl_slist_append(struct curl_slist *list,const char *string) { if(!list) { list=calloc(1,sizeof(*list)); if(!list) return NULL; } add_to_strlist(&list->list,string); return list; } void curl_slist_free_all(struct curl_slist *list) { if(list) { free_strlist(list->list); free(list); } } gnupg-1.4.20/keyserver/gpgkeys_mailto.in0000755000175000017500000000663712635262326015252 00000000000000#!@PERL@ -w # gpgkeys_mailto - talk to a email keyserver # Copyright (C) 2001, 2002 Free Software Foundation, Inc. # # This file is part of GnuPG. # # GnuPG is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 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, see . use Getopt::Std; $Getopt::Std::STANDARD_HELP_VERSION=1; $sendmail="@SENDMAIL@ -t"; ### sub VERSION_MESSAGE () { print STDOUT "gpgkeys_mailto (GnuPG) @VERSION@\n"; } sub HELP_MESSAGE () { print STDOUT <$opt_o") || die "Can't open output file $opt_o\n"; } if(@ARGV) { open(STDIN,$ARGV[0]) || die "Can't open input file $ARGV[0]\n"; } while() { last if($_ eq "\n"); if(/^COMMAND (\S+)/) { $command=$1; } if(/^OPAQUE (\S+)/) { $address=$1; } if(/^PROGRAM (\S+)/) { $program=$1; } if(/^OPTION (\S+)/) { if($1=~/^verbose$/i) { $verbose++; } elsif($1=~/^no-verbose$/i) { $verbose--; } elsif($1=~/^mail-from=(.+)$/i) { $from=$1; } elsif($1=~/^no-mail-from$/i) { undef $from; } } } if(!defined($from)) { ($login,$name)=(getpwuid($<))[0,6]; $from="$name <$login>"; } $program="(unknown)" if(!defined($program)); if(!defined($address)) { print STDERR "gpgkeys: no address provided\n"; exit(1); } while() { last if($_ eq "\n"); chomp; push(@keys,$_); } # Send response print "VERSION 1\n"; print "OPTION OUTOFBAND\n\n"; # Email keyservers get and search the same way if($command=~/get/i || $command=~/search/i) { if($command=~/search/i) { print "COUNT 0\n"; } foreach $key (@keys) { open(MAIL,"|$sendmail") || die "ERROR: Can't open $sendmail\n"; print MAIL "From: $from\n"; print MAIL "To: $address\n"; if($command=~/get/i) { # mail keyservers don't like long-form keyids if(substr($key,0,2) eq "0x") { $key=substr($key,2); } if(length($key)>8) { $key=substr($key,-8); } print MAIL "Subject: GET 0x$key\n\n"; } else { print MAIL "Subject: GET $key\n\n"; } print MAIL "GnuPG $program email keyserver request\n"; close(MAIL); # Tell GnuPG not to expect a key print "KEY $key OUTOFBAND\n"; if($verbose) { print STDERR "gpgkeys: key $key requested from $address\n"; } } } if($command=~/send/i) { while(!eof(STDIN)) { open(MAIL,"|$sendmail") || die "ERROR: Can't open $sendmail\n"; print MAIL "From: $name <$login>\n"; print MAIL "To: $address\n"; print MAIL "Subject: ADD\n\n"; while() { if(/^KEY (\S+) BEGIN$/) { $key=$1; last; } } while() { if(/^KEY \S+ END$/) { last; } print MAIL; } close(MAIL); if($verbose) { print STDERR "gpgkeys: key $key sent to $address\n"; } } } # Local Variables: # mode:perl # End: gnupg-1.4.20/keyserver/gpgkeys_test.in0000755000175000017500000000357612635262326014743 00000000000000#!@PERL@ # gpgkeys_test - keyserver code tester # Copyright (C) 2001 Free Software Foundation, Inc. # # This file is part of GnuPG. # # GnuPG is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 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, see . use Getopt::Std; $Getopt::Std::STANDARD_HELP_VERSION=1; $|=1; sub VERSION_MESSAGE () { print STDOUT "gpgkeys_test (GnuPG) @VERSION@\n"; } sub HELP_MESSAGE () { print STDOUT <$opt_o") || die "Can't open output file $opt_o\n"; } if(@ARGV) { print STDERR "Using input file $ARGV[0]\n"; open(STDIN,$ARGV[0]) || die "Can't open input file $ARGV[0]\n"; } # Get the command block print STDERR "Command block:\n"; while() { last if($_ eq "\n"); print STDERR "--command-> $_"; if(/^COMMAND (\w+)/) { $command=$1; } } # Get the keylist block print STDERR "Keylist block:\n"; while() { last if($_ eq "\n"); print STDERR "--keylist-> $_"; } # If it's a SEND, then get the key material if($command eq "SEND") { print STDERR "Key material to send:\n"; while() { print STDERR "$_"; } } printf STDERR "gpgkeys_test finished\n"; # Local Variables: # mode:perl # End: gnupg-1.4.20/keyserver/ChangeLog-20110000644000175000017500000012600312635262326014022 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-08-09 Werner Koch * gpgkeys_hkp.c (srv_replace): Remove unused var. 2009-09-02 Werner Koch * Makefile.am (gpgkeys_curl_SOURCES, gpgkeys_ldap_SOURCES) (gpgkeys_finger_SOURCES): Add ksmalloc.c only with non-faked cURL. 2009-08-25 Werner Koch * ksmalloc.c: New (xtrymalloc, xfree): New. * Makefile.am (gpgkeys_ldap_SOURCES, gpgkeys_curl_SOURCES): (gpgkeys_hkp_SOURCES): Add ksmalloc.c. * gpgkeys_hkp.c, gpgkeys_ldap.c: s/malloc/xtrymalloc/. 2009-07-06 David Shaw * gpgkeys_hkp.c (main, srv_replace): Minor tweaks to use the DNS-SD names ("pgpkey-http" and "pgpkey-https") in SRV lookups instead of "hkp" and "hkps". 2009-06-24 Werner Koch * gpgkeys_ldap.c (send_key): Do not loop over a NULL modlist in fail. Reported by Fabian Keil. 2009-06-09 David Shaw * Makefile.am (gpgkeys_hkp_LDADD): Need DNSLIBS for the resolver now that we're using SRVs. 2009-05-27 David Shaw * gpgkeys_hkp.c (srv_replace): Fix build warning. 2009-05-26 David Shaw * curl-shim.c (curl_slist_append, curl_slist_free_all): New. Simple wrappers around STRLIST to emulate the curl way of doing string lists. (curl_easy_setopt): Handle the curl HTTPHEADER option. * gpgkeys_curl.c, gpgkeys_hkp.c (main): Avoid caches to get the most recent copy of the key. This is bug #1061. 2009-05-03 David Shaw * gpgkeys_mailto.in: Set 'mail-from' as a keyserver-option, rather than the ugly ?from= syntax. 2009-04-20 David Shaw * gpgkeys_hkp.c (srv_replace): New function to transform a SRV hostname to a real hostname. (main): Call it from here for the HAVE_LIBCURL case (without libcurl is handled via the curl-shim). 2009-04-02 David Shaw * curl-shim.h, curl-shim.c (curl_easy_setopt, curl_easy_perform): Add a CURLOPT_SRVTAG_GPG_HACK (passed through the the http engine). 2009-04-01 David Shaw * gpgkeys_hkp.c (main): Switch default port for SSLized HKP to 443 (i.e. the regular https port). 2009-02-03 David Shaw * gpgkeys_hkp.c (send_key, get_key, get_name, search_key, main): Add support for SSLized HKP. 2008-11-18 David Shaw * curl-shim.h, gpgkeys_curl.c, gpgkeys_hkp.c (main): Always show curl version (even for curl-shim). 2008-11-18 Werner Koch * gpgkeys_curl.c (main): Print curl version according to GNU standards. * gpgkeys_hkp.c (main): Ditto. * curl-shim.h (curl_is_gnupg_curl_shim): New. 2008-11-18 David Shaw * curl-shim.h (curl_version): No need to provide a version for curl-shim as it always matches the GnuPG version. * gpgkeys_curl.c, gpgkeys_hkp.c (main): Show which version of curl we're using as part of --version. * gpgkeys_curl.c, gpgkeys_finger.c, gpgkeys_hkp.c, gpgkeys_ldap.c (show_help): Document --version. 2008-04-14 David Shaw * gpgkeys_curl.c (main), gpgkeys_hkp.c (main): Make sure all libcurl number options are passed as long. * curl-shim.c (curl_easy_setopt): Minor tweak to match the real curl better - libcurl uses 'long', not 'unsigned int'. 2008-03-25 Werner Koch * gpgkeys_ldap.c (build_attrs): Take care of char defaulting to unsigned when using hextobyte. 2007-12-17 David Shaw * Makefile.am: Fix compile error when libcurl is in a nonstandard location. 2007-07-28 David Shaw * gpgkeys_ldap.c (main): Fix bug in setting up whether to verify peer SSL cert. This used to work with older OpenLDAP, but is now more strictly handled. 2007-07-27 David Shaw * gpgkeys_ldap.c: Fix build warning with mozldap. * gpgkeys_ldap.c (search_key, main): Fix bug where searching for foo bar (no quotes) on the command line resulted in searching for "foo\2Abar" due to LDAP quoting. The proper search is "foo*bar". 2007-04-16 David Shaw * gpgkeys_hkp.c (main): Show curl or fake-curl version string. * Makefile.am: Link with libcompat.a for ascii_str(n)casecmp. * gpgkeys_curl.c, gpgkeys_ldap.c, gpgkeys_hkp.c, ksutil.c: Rename all str(n)casecmp to ascii_str(n)casecmp. We want the locale-independent ones here. 2007-03-13 David Shaw * gpgkeys_curl.c (main): Use curl_version_info to verify that the protocol we're about to use is actually available. * curl-shim.h, curl-shim.c (curl_free): Make into a macro. (curl_version_info): New. Only advertises "http" for our shim, of course. 2007-02-10 David Shaw * gpgkeys_ldap.c (send_key): Missing a free(). * curl-shim.c (curl_easy_perform): Some debugging items that may be handy. 2007-01-16 David Shaw * curl-shim.h, curl-shim.c, gpgkeys_hkp.c: Rename curl_escape() to curl_easy_escape() to match cURL. 2007-01-15 David Shaw * gpgkeys_hkp.c (send_key): Allow GPG to send any armored key line length without problems. Reported by Felix von Leitner. 2006-12-03 David Shaw * ksutil.c (classify_ks_search): Try and recognize a key ID even without the 0x prefix. This isn't exact (it's possible that a user ID string happens to be 8 or 16 digits of hex), but it's extremely unlikely. Plus GPG itself makes the same assumption. * gpgkeys_hkp.c (search_key): HKP keyservers like the 0x to be present when searching by keyID. 2006-11-05 David Shaw * gpgkeys_hkp.c (curl_mrindex_writer): Revert previous change. Key-not-found still has a HTML response. 2006-10-19 David Shaw * gpgkeys_hkp.c (curl_mrindex_writer): Print a warning if we see HTML coming back from a MR hkp query. 2006-09-28 David Shaw * Makefile.am: Link gpgkeys_ldap to libcompat.a. * gpgkeys_ldap.c, ksutil.h, ksutil.c: Remove hextobyte instead of ks_hextobyte as it is provided by libcompat now. * gpgkeys_ldap.c (build_attrs), ksutil.c (ks_toupper, ks_strcasecmp), ksutil.h: Remove the need for strcasecmp as the field tags are always lowercase. 2006-09-26 Werner Koch * gpgkeys_finger.c (get_key): Cast away signed/unsigned char ptr mismatches. * ksutil.c (ks_hextobyte, ks_toupper, ks_strcasecmp): New. Use them instead of there ascii_foo counterparts. * gpgkeys_ldap.c (main): Replaced BUG by assert. * gpgkeys_curl.c, gpgkeys_hkp.c, gpgkeys_ldap.c, ksutil.c: * ksutil.h: Add special license exception for OpenSSL. This helps to avoid license conflicts if OpenLDAP or cURL is linked against OpenSSL and we would thus indirectly link to OpenSSL. This is considered a bug fix and forgives all possible violations, pertaining to this issue, possibly occured in the past. 2006-07-26 David Shaw * Makefile.am: Fix missing include path for gpgkeys_finger (needs the libcurl path, even though it doesn't use libcurl because of ksutil.c:curl_err_to_gpg_err(). Noted by Gilbert Fernandes. 2006-07-20 David Shaw * curl-shim.c (curl_easy_perform): Minor cleanup of proxy code. 2006-07-16 David Shaw * gpgkeys_hkp.c (send_key), gpgkeys_ldap.c (send_key, send_key_keyserver): Improved version of previous fix. Force match on spaces in string. 2006-07-14 David Shaw * gpgkeys_hkp.c (send_key), gpgkeys_ldap.c (send_key, send_key_keyserver): Fix string matching problem when the ascii armored form of the key happens to match "KEY" at the beginning of the line. 2006-07-12 David Shaw * gpgkeys_ldap.c (printquoted), curl-shim.c (curl_escape): Fix bad encoding of characters > 127. Noted by Nalin Dahyabhai. 2006-04-26 David Shaw * gpgkeys_http.c, gpgkeys_oldhkp.c: Removed. * Makefile.am: Don't build gpgkeys_http or gpgkeys_(old)hkp any longer as this is done via curl or fake-curl. * ksutil.h, ksutil.c, gpgkeys_hkp.c, gpgkeys_curl.c: Minor #include tweaks as FAKE_CURL is no longer meaningful. 2006-04-10 David Shaw * gpgkeys_ldap.c (ldap_quote, get_name, search_key): LDAP-quote directly into place rather than mallocing temporary buffers. * gpgkeys_ldap.c (get_name): Build strings with strcat rather than using sprintf which is harder to read and modify. * ksutil.h, ksutil.c (classify_ks_search): Add KS_SEARCH_KEYID_SHORT and KS_SEARCH_KEYID_LONG to search for a key ID. * gpgkeys_ldap.c (search_key): Use it here to flip from pgpUserID searches to pgpKeyID or pgpCertID. 2006-03-27 David Shaw * gpgkeys_ldap.c: #define LDAP_DEPRECATED for newer OpenLDAPs so they use the regular old API that is compatible with other LDAP libraries. 2006-03-03 David Shaw * gpgkeys_ldap.c (main): Fix build problem with non-OpenLDAP LDAP libraries that have TLS. 2006-02-23 David Shaw * ksutil.c (init_ks_options): Default include-revoked and include-subkeys to on, as gpg isn't doing this any longer. 2006-02-22 David Shaw * gpgkeys_hkp.c (get_name): A GETNAME query turns exact=on to cut down on odd matches. 2006-02-21 David Shaw * gpgkeys_ldap.c (make_one_attr, build_attrs, send_key): Don't allow duplicate attributes as OpenLDAP is now enforcing this. * gpgkeys_ldap.c (main): Add binddn and bindpw so users can pass credentials to a remote LDAP server. * curl-shim.h, curl-shim.c (curl_easy_init, curl_easy_setopt, curl_easy_perform): Mingw has 'stderr' as a macro? * curl-shim.h, curl-shim.c (curl_easy_init, curl_easy_setopt, curl_easy_perform): Add CURLOPT_VERBOSE and CURLOPT_STDERR for easier debugging. 2006-01-16 David Shaw * gpgkeys_hkp.c (send_key): Do not escape the '=' in the HTTP POST when uploading a key. 2005-12-23 David Shaw * ksutil.h, ksutil.c (parse_ks_options): New keyserver command "getname". * gpgkeys_hkp.c (main, get_name), gpgkeys_ldap.c (main, get_name): Use it here to do direct name (rather than key ID) fetches. 2005-12-19 David Shaw * ksutil.h, ksutil.c (curl_armor_writer, curl_writer, curl_writer_finalize): New functionality to handle binary format keys by armoring them for input to GPG. * gpgkeys_curl.c (get_key), gpgkeys_hkp.c (get_key): Call it here. 2005-12-07 David Shaw * gpgkeys_finger.c (get_key), gpgkeys_curl.c (get_key): Better language for the key-not-found error. * ksutil.c (curl_err_to_gpg_err): Add CURLE_OK and CURLE_COULDNT_CONNECT. * gpgkeys_curl.c (get_key): Give key-not-found error if no data is found (or file itself is not found) during a fetch. 2005-12-06 David Shaw * curl-shim.c (curl_easy_perform): Fix build warning (code before declaration). 2005-11-02 David Shaw * gpgkeys_hkp.c (search_key): Fix warning with typecast (though curl should really have defined that char * as const). 2005-08-25 David Shaw * ksutil.h, ksutil.c (parse_ks_options): Remove exact-name and exact-email. (classify_ks_search): Mimic the gpg search modes instead with *, =, <, and @. * gpgkeys_ldap.c (search_key), gpgkeys_hkp.c (search_key): Call them here. Suggested by Jason Harris. 2005-08-18 David Shaw * ksutil.h, ksutil.c (parse_ks_options): New keyserver-option exact-name. The last of exact-name and exact-email overrides the earlier. * gpgkeys_ldap.c (search_key), gpgkeys_hkp.c (search_key): Use it here to do a name-only search. * gpgkeys_ldap.c (ldap_quote): \-quote a string for LDAP. * gpgkeys_ldap.c (search_key): Use it here to escape reserved characters in searches. 2005-08-17 David Shaw * ksutil.h, ksutil.c (parse_ks_options): New keyserver-option exact-email. * gpgkeys_ldap.c (search_key), gpgkeys_hkp.c (search_key): Use it here to do an email-only search. 2005-08-08 David Shaw * Makefile.am: Include LDAP_CPPFLAGS when building LDAP. 2005-08-03 David Shaw * gpgkeys_hkp.c (main), gpgkeys_curl.c (main), curl-shim.h: Show version of curl (or curl-shim) when debug is set. 2005-07-20 David Shaw * gpgkeys_curl.c (get_key, main): Don't try and be smart about what protocols we handle. Directly pass them to curl or fake-curl and see if an error comes back. * curl-shim.h, curl-shim.c (handle_error), ksutil.c (curl_err_to_gpg_err): Add support for CURLE_UNSUPPORTED_PROTOCOL in fake curl. * Makefile.am: Don't need -DFAKE_CURL any longer since it's in config.h. 2005-06-23 David Shaw * gpgkeys_mailto.in, gpgkeys_test.in: Use @VERSION@ so version string stays up to date. * gpgkeys_http.c: Don't need to define HTTP_PROXY_ENV here since it's in ksutil.h. * gpgkeys_curl.c (get_key, main), gpgkeys_hkp.c (main): Pass AUTH values to curl or curl-shim. * curl-shim.c (curl_easy_perform), gpgkeys_curl.c (main), gpgkeys_hkp.c (main): Use curl-style proxy semantics. * curl-shim.h, curl-shim.c (curl_easy_setopt, curl_easy_perform): Add CURLOPT_USERPWD option for HTTP auth. * gpgkeys_http.c (get_key), gpgkeys_oldhkp (send_key, get_key, search_key): No longer need to pass a proxyauth. * gpgkeys_http.c (get_key): Pass auth outside of the URL. 2005-06-21 David Shaw * gpgkeys_http.c (get_key), gpgkeys_oldhkp.c (send_key, get_key, search_key): Fix http_open/http_open_document calls to pass NULL for auth and proxyauth since these programs pass them in the URL. 2005-06-20 David Shaw * gpgkeys_hkp.c (append_path, send_key, get_key, search_key, main), gpgkeys_oldhkp.c (main): Properly handle double slashes in paths. 2005-06-05 David Shaw * ksutil.c (init_ks_options, parse_ks_options): Provide a default "/" path unless overridden by the config. Allow config to specify items multiple times and take the last specified item. 2005-06-04 David Shaw * gpgkeys_hkp.c, gpgkeys_oldhkp.c: Add support for HKP servers that aren't at the root path. Suggested by Jack Bates. 2005-06-01 David Shaw * ksutil.c [HAVE_DOSISH_SYSTEM]: Fix warnings on mingw32. Noted by Joe Vender. 2005-05-04 David Shaw * ksutil.h, ksutil.c: #ifdef so we can build without libcurl or fake-curl. 2005-05-03 David Shaw * gpgkeys_http.c: Need GET defined. 2005-05-01 David Shaw * gpgkeys_hkp.c, gpgkeys_oldhkp.c, ksutil.h: Some minor cleanup and comments as to the size of MAX_LINE and MAX_URL. 2005-04-16 David Shaw * gpgkeys_hkp.c: New hkp handler that uses curl or curl-shim. * Makefile.am: Build new gpgkeys_hkp. * curl-shim.c (curl_easy_perform): Cleanup. * ksutil.h, ksutil.c (curl_writer), gpgkeys_curl.c (get_key): Pass a context to curl_writer so we can support multiple fetches in a single session. * curl-shim.h, curl-shim.c (handle_error, curl_easy_setopt, curl_easy_perform): Add POST functionality to the curl shim. * curl-shim.h, curl-shim.c (curl_escape, curl_free): Emulate curl_escape and curl_free. * gpgkeys_curl.c (main): If the http-proxy option is given without any arguments, try to get the proxy from the environment. * ksutil.h, ksutil.c (curl_err_to_gpg_err, curl_writer): Copy from gpgkeys_curl.c. * gpgkeys_oldhkp.c: Copy from gpgkeys_hkp.c. 2005-03-22 David Shaw * gpgkeys_ldap.c, ksutil.h, ksutil.c (print_nocr): Moved from gpgkeys_ldap.c. Print a string, but strip out any CRs. * gpgkeys_finger.c (get_key), gpgkeys_hkp.c (get_key), gpgkeys_http.c (get_key): Use it here when outputting key material to canonicalize line endings. 2005-03-19 David Shaw * gpgkeys_ldap.c (main): Fix three wrong calls to fail_all(). Noted by Stefan Bellon. 2005-03-17 David Shaw * ksutil.c (parse_ks_options): Handle verbose=nnn. * Makefile.am: Calculate GNUPG_LIBEXECDIR directly. Do not redefine $libexecdir. * gpgkeys_curl.c, gpgkeys_finger.c, gpgkeys_ldap.c: Start using parse_ks_options and remove a lot of common code. * ksutil.h, ksutil.c (parse_ks_options): Parse OPAQUE, and default debug with no arguments to 1. 2005-03-16 David Shaw * gpgkeys_ldap.c: Include lber.h if configure determines we need it. * ksutil.h, ksutil.c (ks_action_to_string): New. (free_ks_options): Only free if options exist. * ksutil.h, ksutil.c (init_ks_options, free_ks_options, parse_ks_options): Pull a lot of duplicated code into a single options parser for all keyserver helpers. 2005-02-11 David Shaw * curl-shim.c (curl_easy_perform): Fix compile warning. * curl-shim.h, gpgkeys_curl.c (main), gpgkeys_ldap.c (main): Add ca-cert-file option, to pass in the SSL cert. * curl-shim.h, curl-shim.c: New. This is code to fake the curl API in terms of the current HTTP iobuf API. * gpgkeys_curl.c [FAKE_CURL], Makefile.am: If FAKE_CURL is set, link with the iobuf code rather than libcurl. 2005-02-05 David Shaw * gpgkeys_finger.c (main), gpgkeys_hkp.c (main): Fix --version output. * gpgkeys_curl.c (main): Make sure the curl handle is cleaned up on failure. 2005-02-01 David Shaw * gpgkeys_hkp.c (get_key), gpgkeys_http.c (get_key): Fix missing http_close() calls. Noted by Phil Pennock. * ksutil.h: Up the default timeout to two minutes. 2005-01-24 David Shaw * gpgkeys_ldap.c (print_nocr): New. (get_key): Call it here to canonicalize line endings. * gpgkeys_curl.c (writer): Discard everything outside the BEGIN and END lines when retrieving keys. Canonicalize line endings. (main): Accept FTPS. 2005-01-21 David Shaw * gpgkeys_ldap.c (main): Add "check-cert" option to disable SSL certificate checking (which is on by default). * gpgkeys_curl.c (main): Add "debug" option to match the LDAP helper. Add "check-cert" option to disable SSL certificate checking (which is on by default). 2005-01-18 David Shaw * gpgkeys_curl.c: Fix typo. 2005-01-18 Werner Koch * gpgkeys_curl.c: s/MAX_PATH/URLMAX_PATH/g to avoid a clash with the W32 defined macro. Removed unneeded initialization of static variables. * gpgkeys_http.c: Ditto. * ksutil.h: s/MAX_PATH/URLMAX_PATH/. 2005-01-17 David Shaw * gpgkeys_curl.c (main): Only allow specified protocols to use the curl handler. * Makefile.am: Use LIBCURL_CPPFLAGS instead of LIBCURL_INCLUDES. 2005-01-13 David Shaw * ksutil.h, gpgkeys_curl.c, gpgkeys_hkp.c, gpgkeys_ldap.c, gpgkeys_finger.c, gpgkeys_http.c: Part 2 of the cleanup. Move all the various defines to ksutil.h. * gpgkeys_finger.c, gpgkeys_hkp.c, gpgkeys_http.c, gpgkeys_ldap.c: Part 1 of a minor cleanup to use #defines instead of hard-coded sizes. * gpgkeys_finger.c (connect_server): Use INADDR_NONE instead of SOCKET_ERROR. Noted by Timo. 2005-01-09 David Shaw * gpgkeys_curl.c (get_key): Newer versions of libcurl don't define TRUE. 2004-12-24 David Shaw * gpgkeys_curl.c (main): Use new defines for opting out of certain transfer protocols. Allow setting HTTP proxy via "http-proxy=foo" option (there is natural support in libcurl for the http_proxy environment variable). * Makefile.am: Remove the conditional since this is all handled in autoconf now. 2004-12-22 David Shaw * gpgkeys_curl.c (main): New "follow-redirects" option. Takes an optional numeric value for the maximum number of redirects to allow. Defaults to 5. * gpgkeys_curl.c (main), gpgkeys_finger.c (main), gpgkeys_hkp.c (main), gpgkeys_http.c (main), gpgkeys_ldap.c (main): Make sure that a "timeout" option passed with no arguments is properly handled. * gpgkeys_curl.c (get_key, writer): New function to wrap around fwrite to avoid DLL access problem on win32. * gpgkeys_http.c (main, get_key): Properly pass authentication info through to the http library. * Makefile.am: Build gpgkeys_http or gpgkeys_curl as needed. * gpgkeys_curl.c (main, get_key): Minor tweaks to work with either FTP or HTTP. * gpgkeys_ftp.c: renamed to gpgkeys_curl.c. * gpgkeys_ftp.c (main, get_key): Use auth data as passed by gpg. Use CURLOPT_FILE instead of CURLOPT_WRITEDATA (same option, but backwards compatible). 2004-12-21 David Shaw * gpgkeys_ftp.c: New. * Makefile.am: Build it if requested. 2004-12-14 Werner Koch * Makefile.am (install-exec-hook, uninstall-hook): Removed. For Windows reasons we can't use the symlink trick. 2004-12-03 David Shaw * Makefile.am: The harmless "ignored error" on gpgkeys_ldap install on top of an existing install is bound to confuse people. Use ln -s -f to force the overwrite. 2004-10-28 David Shaw * gpgkeys_finger.c [_WIN32] (connect_server): Fix typo. 2004-10-28 Werner Koch * Makefile.am (other_libs): New. Also include LIBICONV. Noted by Tim Mooney. 2004-10-28 Werner Koch * Makefile.am (other_libs): 2004-10-18 David Shaw * gpgkeys_hkp.c (send_key, get_key, search_key): Use "hkp" instead of "x-hkp" so it can be used as a SRV tag. 2004-10-16 David Shaw * gpgkeys_finger.c [_WIN32] (connect_server): Fix typo. 2004-10-15 Werner Koch * gpgkeys_ldap.c (main, show_help): Kludge to implement standard GNU options. Factored help printing out. * gpgkeys_finger.c (main, show_help): Ditto. * gpgkeys_hkp.c (main, show_help): Ditto. * gpgkeys_http.c (main, show_help): Ditto. * gpgkeys_test.in, gpgkeys_mailto.in: Implement --version and --help. * Makefile.am: Add ksutil.h. 2004-10-14 David Shaw * gpgkeys_finger.c (main): We do not support relay fingering (i.e. "finger://relayhost/user@example.com"), but finger URLs are occasionally miswritten that way. Give an error in this case. 2004-10-14 Werner Koch * gpgkeys_finger.c (get_key): s/unsigned char/byte/ due to a strange typedef for RISC OS. Noted by Stefan. 2004-10-13 David Shaw * gpgkeys_ldap.c (main), gpgkeys_hkp.c (main), gpgkeys_http.c (main), gpgkeys_finger.c (main): Call timeout functions before performing an action that could block for a long time. * ksutil.h, ksutil.c: New. Right now just contains timeout functions. 2004-10-11 David Shaw * gpgkeys_finger.c, gpgkeys_hkp.c, gpgkeys_http.c, gpgkeys_ldap.c: Fix a few occurances of "filename" to `filename'. 2004-10-11 Werner Koch * gpgkeys_finger.c: New. 2004-08-27 Stefan Bellon * gpgkeys_hkp.c (search_key): Fix the prior faulty fix by introducing a cast but leaving skey unsigned. * gpgkeys_hkp.c (search_key): Change type of variable skey from unsigned char* to char* to fix type incompatibility. 2004-08-23 David Shaw * gpgkeys_ldap.c (get_key, search_key), gpgkeys_hkp.c (get_key, search_key), gpgkeys_http.c (get_key): Do not give informational logs since this is now done inside gpg. * gpgkeys_hkp.c (dehtmlize): Understand the quote character (i.e. """) in HTML responses. (search_key): Search key must be unsigned for url encoder to work properly for 8-bit values. * gpgkeys_ldap.c (get_key): Factor out informational display into new function build_info(). * gpgkeys_ldap.c (build_attrs): Properly terminate user ID strings that got shrunk due to encoding. 2004-08-22 David Shaw * gpgkeys_ldap.c (find_basekeyspacedn): Use LDAP_SCOPE_BASE along with a full DN rather than LDAP_SCOPE_ONELEVEL plus a filter to find the pgpServerInfo object. Some LDAP setups don't like the search. (main): Stop binding to the server since it seems no server really requires it, and some require it not be there. 2004-07-29 David Shaw * gpgkeys_ldap.c (main): Add "debug" option. This is only really useful with OpenLDAP, but it's practically vital to debug SSL and TLS setups. Add "basedn" option. This allows users to override the autodetection for base DN. SSL overrides TLS, so TLS will not be started on SSL connections (starting an already started car). 2004-07-28 David Shaw * gpgkeys_ldap.c (build_attrs): Add "pgpKeySize" and "pgpSubKeyID" attributes so we can do subkey searches. * gpgkeys_ldap.c (main): Under certain error conditions, we might try and unbind twice. Don't. * gpgkeys_ldap.c (join_two_modlists): New. (send_key): Use new function so we can try a modify operation first, and fail over to an add if that fails. Add cannot cope with the NULLs at the head of the modify request, so we jump into the list in the middle. 2004-07-27 David Shaw * gpgkeys_ldap.c (main): Don't try and error out before making a ldaps connection to the NAI keyserver since we cannot tell if it is a NAI keyserver until we connect. Fail if we cannot find a base keyspace DN. Fix a false success message for TLS being enabled. 2004-07-20 Werner Koch * gpgkeys_ldap.c [_WIN32]: Include Windows specific header files. Suggested by Brian Gladman. 2004-05-26 David Shaw * gpgkeys_http.c: General polish and removal of leftover stuff from gpgkeys_hkp.c. 2004-05-21 David Shaw * gpgkeys_http.c (get_key): Cosmetic fix - make sure that URLs with no path use a path of "/". * gpgkeys_ldap.c (ldap2epochtime): We can always rely on timegm() being available now, since it's a replacement function. 2004-05-20 David Shaw * gpgkeys_http.c: New program to do a simple HTTP file fetch using the keyserver interface. * Makefile.am: Build it. 2004-02-28 David Shaw * Makefile.am: Don't split LDADD across two lines since some make programs can't handle blank lines after a \ continuation. Noted by Christoph Moench-Tegeder. 2004-02-25 David Shaw * gpgkeys_ldap.c (send_key): List pgpCertID as one of the deleted attributes. This guarantees that if something goes wrong, we won't be able to complete the transaction, thus leaving any key already existing on the server intact. 2004-02-23 David Shaw * gpgkeys_ldap.c (delete_one_attr): Removed. (make_one_attr): Delete functionality added. Optional deduping functionality added (currently only used for pgpSignerID). (build_attrs): Translate sig entries into pgpSignerID. Properly build the timestamp for pgpKeyCreateTime and pgpKeyExpireTime. 2004-02-22 David Shaw * gpgkeys_ldap.c (delete_one_attr): New function to replace attributes with NULL (a "delete" that works even for nonexistant attributes). (send_key): Use it here to remove attributes so a modify operation starts with a clean playing field. Bias sends to modify before add, since (I suspect) people update their existing keys more often than they make and send new keys to the server. 2004-02-21 David Shaw * gpgkeys_ldap.c (epoch2ldaptime): New. Converse of ldap2epochtime. (make_one_attr): New. Build a modification list in memory to send to the LDAP server. (build_attrs): New. Parse INFO lines sent over by gpg. (free_mod_values): New. Unwinds a modification list. (send_key_keyserver): Renamed from old send_key(). (send_key): New function to send a key to a LDAP server. (main): Use send_key() for real LDAP servers, send_key_keyserver() otherwise. 2004-02-20 David Shaw * gpgkeys_ldap.c: Replacement prototypes for setenv and unsetenv. (search_key): Catch a SIZELIMIT_EXCEEDED error and show the user whatever the server did give us. (find_basekeyspacedn): There is no guarantee that namingContexts will be readable. * Makefile.am: Link gpgkeys_ldap with libutil.a to get the replacement functions (and eventually translations, etc). 2004-02-19 David Shaw * gpgkeys_ldap.c (ldap2epochtime): LDAP timestamps are UTC, so do not correct for timezones. (main): Find the basekeyspacedn before we try to start TLS, so we can give a better error message when a user tries to use TLS with a LDAP keyserver. * Makefile.am: Add automake conditionals to symlink gpgkeys_ldaps to gpgkeys_ldap when needed. * gpgkeys_ldap.c (main): Add support for LDAPS and TLS connections. These are only useful and usable when talking to real LDAP keyservers. Add new "tls" option to tune TLS use from off, to try quietly, to try loudly, or to require TLS. * gpgkeys_ldap.c (find_basekeyspacedn): New function to figure out what kind of LDAP server we're talking to (either real LDAP or the LDAP keyserver), and return the baseKeySpaceDN to find keys under. (main): Call it from here, and remove the old code that only handled the LDAP keyserver. 2004-02-18 David Shaw * gpgkeys_ldap.c (ldap_to_gpg_err): Make sure that LDAP_OPT_ERROR_NUMBER is defined before we use it. * gpgkeys_mailto.in: Fix VERSION number. 2004-01-13 Werner Koch * gpgkeys_hkp.c (send_key): Add a content type. 2004-01-11 David Shaw * gpgkeys_hkp.c (search_key): Catch a mangled input file (useful if something other than GnuPG is calling the program). (main): Avoid possible pre-string write. Noted by Christian Biere. * gpgkeys_ldap.c (main): Avoid possible pre-string write. 2003-12-28 David Shaw * gpgkeys_hkp.c (send_key, get_key, main): Work with new HTTP code that passes the proxy in from the outside. If the command file sends a proxy, use it. If it sends "http-proxy" with no arguments, use $http_proxy from the environment. Suggested by Christian Biere. 2003-12-28 Stefan Bellon * gpgkeys_hkp.c, gpgkeys_ldap.c [__riscos__]: Removal of unnecessary #ifdef __riscos__ sections. 2003-11-27 Werner Koch * gpgkeys_hkp.c (get_key): Fixed invalid use of fprintf without format string. 2003-10-25 Werner Koch * Makefile.am (gpgkeys_hkp_LDADD): Replaced INTLLIBS by LIBINTL. 2003-07-10 David Shaw * Makefile.am: Use W32LIBS where appropriate. 2003-05-30 David Shaw * gpgkeys_hkp.c, gpgkeys_ldap.c: #include if it is available. Also include extern references for optarg and optind since there is no guarantee that any header file will include them. Standards? We don't need no stinkin' standards. * Makefile.am: Use @GETOPT@ to pull in libiberty on those platforms that need it. 2003-04-08 David Shaw * gpgkeys_hkp.c (dehtmlize, parse_hkp_index): Fix memory corruption bug on some platforms. 2003-03-11 David Shaw * gpgkeys_hkp.c (get_key): Properly handle CRLF line endings in the armored key. (main): Accept "try-dns-srv" option. * Makefile.am: Use @CAPLIBS@ to link in -lcap if we are using capabilities. Use @SRVLIBS@ to link in the resolver if we are using DNS SRV. 2003-02-11 David Shaw * Makefile.am: Use a local copy of libexecdir along with @PACKAGE@ so it can be easily overridden at make time. 2003-01-29 David Shaw * gpgkeys_mailto.in: Fix regexp to work properly if the "keyid" is not a keyid, but rather a text string from the user ID. 2003-01-06 David Shaw * gpgkeys_hkp.c (get_key): Use options=mr when getting a key so keyserver doesn't attach the HTML header which we will just have to discard. 2002-11-17 David Shaw * gpgkeys_ldap.c (main), gpgkeys_hkp.c (main): Use new keyserver protocol version. 2002-11-14 David Shaw * gpgkeys_ldap.c (get_key): The deduping code requires "pgpcertid", but that was not available when running without verbose on. Noted by Stefan. 2002-11-10 David Shaw * gpgkeys_ldap.c (get_key): Fix typo in deduping code. 2002-11-05 David Shaw * gpgkeys_ldap.c (key_in_keylist, add_key_to_keylist, free_keylist, get_key, search_key): The LDAP keyserver doesn't remove duplicates, so remove them locally. Do not include the key modification time in the search response. 2002-11-04 David Shaw * gpgkeys_hkp.c (send_key), gpgkeys_ldap.c (send_key): Properly handle an input file that does not include any key data at all. 2002-10-24 David Shaw * gpgkeys_hkp.c (main), gpgkeys_ldap.c (main): Add -V flag to output protocol and program version. 2002-10-21 David Shaw * Makefile.am: Anything linking with libutil.a needs INTLLIBS as well on platforms where INTLLIBS is set. 2002-10-14 David Shaw * gpgkeys_hkp.c (write_quoted): Use %-encoding instead of \-encoding. (parse_hkp_index): Use new keyserver key listing format, and add support for disabled keys via include-disabled. * gpgkeys_ldap.c (get_key): Don't print keysize unless it's >0. (printquoted): Use %-encoding instead of \-encoding. (search_key): Use new keyserver key listing format. 2002-10-08 David Shaw * gpgkeys_ldap.c (search_key, main): Make sure LDAP values are freed in case of error. * gpgkeys_ldap.c (fail_all): New function to unwind a keylist and error each item. (main): Call fail_all from here, as needed. Also add a NO_MEMORY error in an appropriate place and fix error return code. (ldap_err_to_gpg_err): Add KEYSERVER_UNREACHABLE. * gpgkeys_hkp.c (fail_all): New function to unwind a keylist and error each item. (main): Call fail_all from here. Also add a NO_MEMORY error in an appropriate place. (get_key): Use new UNREACHABLE error for network errors. 2002-09-26 Werner Koch * gpgkeys_ldap.c (send_key): Removed non-constant initializers. 2002-09-24 David Shaw * gpgkeys_ldap.c (ldap_err_to_gpg_err, ldap_to_gpg_err, send_key, get_key, search_key, main): Some minor error reporting enhancements for use with GPA (show reasons for KEY FAILED). * gpgkeys_hkp.c (send_key, get_key, search_key, main): Some minor error reporting enhancements for use with GPA (show reasons for KEY FAILED). 2002-09-20 Werner Koch * gpgkeys_hkp.c (handle_old_hkp_index): s/input/inp/ to avoid shadowing warning. 2002-09-19 David Shaw * gpgkeys_hkp.c (get_key, handle_old_hkp_index, search_key): Properly handle line truncation. 2002-09-16 David Shaw * gpgkeys_mailto.in: Add quasi-RFC-2368 mailto:email@addr?from= syntax so people can set their own email address to respond to. * gpgkeys_hkp.c (get_key): Properly respond with KEY FAILED (to gpg) and "key not found" (to user) on failure. 2002-09-13 David Shaw * gpgkeys_hkp.c: (search_key, handle_old_hkp_index): Try and request a machine-readable key index. If the server supports this, pass it through. If the server does not support it, parse the "index" page. 2002-09-12 Stefan Bellon * gpgkeys_hkp.c: Tidied up RISC OS initializations. 2002-09-12 David Shaw * gpgkeys_hkp.c (main): Remove warning - this is no longer experimental code. 2002-09-09 Werner Koch * gpgkeys_hkp.c (send_key, get_key, search_key): Check return value of malloc. (dehtmlize): Use ascii_tolower to protect against weird locales. Cast the argument for isspace for the sake of broken HP/UXes. (search_key): Check return value of realloc. 2002-09-09 David Shaw * gpgkeys_ldap.c (get_key): Some compilers (RISC OS, HPUX c89) don't like using variables as array initializers. * gpgkeys_hkp.c (send_key): Use CRLF in headers. 2002-08-28 David Shaw * gpgkeys_hkp.c (parse_hkp_index): Use same types on all platforms. This was probably leftover from earlier code where the typing mattered. * gpgkeys_hkp.c: Overall cleanup from iobuf conversion. Be consistent in m_alloc and malloc usage. Remove include-disabled (meaningless on HKP). RISC OS tweak. 2002-08-27 David Shaw * gpgkeys_hkp.c, Makefile.am: Convert over to using iobufs. * gpgkeys_hkp.c (http_get, http_post): Use CRLF for line endings. * gpgkeys_hkp.c: Include util.h on RISC OS as per Stefan. Include a replacement for hstrerror() for those platforms (such as RISC OS) that don't have it. 2002-08-26 David Shaw * Makefile.am: May as well include gpgkeys_hkp.c in the distribution now. It works well enough without proxies, and isn't built by default. It would be good to get some test experience with it. * gpgkeys_hkp.c (main): Don't warn about include-subkeys - it isn't unsupported, it's actually non-meaningful in the context of HKP (yet). * gpgkeys_hkp.c (parse_hkp_index, dehtmlize): Move HTML functionality into new "dehtmlize" function. Remove HTML before trying to parse each line from the keyserver. If the keyserver provides key type information in the listing, use it. (Copy over from g10/hkp.c). 2002-08-19 David Shaw * gpgkeys_hkp.c (get_key, parse_hkp_index): Bring over latest code from g10/hkp.c. * gpgkeys_ldap.c (get_key): Fix cosmetic URL display problem (extra ":" at the end). 2002-08-03 Stefan Bellon * gpgkeys_ldap.c: Tidied up RISC OS initializations. 2002-07-25 David Shaw * gpgkeys_hkp.c: "Warning" -> "WARNING" 2002-07-24 David Shaw * Makefile.am: Install keyserver helpers in @GNUPG_LIBEXECDIR@ 2002-07-15 David Shaw * gpgkeys_ldap.c (send_key, get_key, main): Consult the server version string to determine whether to use pgpKey or pgpKeyV2. 2002-07-09 David Shaw * gpgkeys_mailto.in: Use new OPAQUE tag for non net-path URIs. Fail more elegantly if there is no email address to send to. Show the GnuPG version in the message body. 2002-07-04 David Shaw * gpgkeys_ldap.c (get_key), gpgkeys_hkp.c (get_key): Display keyserver URI as a URI, but only if verbose. 2002-07-01 David Shaw * gpgkeys_hkp.c (parse_hkp_index): Error if the keyserver returns an unparseable HKP response. * gpgkeys_hkp.c (main): Warn on honor-http-proxy, broken-http-proxy, and include-subkeys (not supported yet). * gpgkeys_ldap.c (main), gpgkeys_hkp.c (http_connect, main): Fix some shadowing warnings. 2002-06-11 David Shaw * Makefile.am: Don't hard-code the LDAP libraries - get them from LDAPLIBS via configure. Also, gpgkeys_hkp is a program, not a script. 2002-06-10 David Shaw * gpgkeys_ldap.c (include_subkeys): Default "include-subkeys" to off, since GnuPG now defaults it to on. 2002-06-06 David Shaw * gpgkeys_hkp.c (parse_hkp_index): Type tweaks. * gpgkeys_hkp.c (main): Add experimental code warning. 2002-06-05 David Shaw * Makefile.am, gpgkeys_hkp.c (new): Experimental HKP keyserver interface. 2002-05-08 David Shaw * gpgkeys_ldap.c: Include if we absolutely must. This helps when compiling against a very old OpenLDAP. 2002-04-29 David Shaw * gpgkeys_mailto.in: Properly handle key requests in full fingerprint form. 2002-03-29 David Shaw * gpgkeys_ldap.c (printquoted): Quote backslashes within keyserver search responses. 2002-02-25 David Shaw * gpgkeys_ldap (get_key): LDAP keyservers do not support v3 fingerprints, so error out if someone tries. Actually, they don't support any fingerprints, but at least we can calculate a keyid from a v4 fingerprint. 2002-02-23 David Shaw * gpgkeys_ldap: Clarify the notion of a partial failure. This is possible if more than one key is being handled in a batch, and one fails while the other succeeds. Note that a search that comes up with no results is not a failure - that is a valid response of "no answer". * gpgkeys_ldap.c (get_key): Allow GnuPG to send us full v4 fingerprints, long key ids, or short key ids while fetching. Since the LDAP server doesn't actually handle fingerprints, chop them down to long key ids for actual use. * gpgkeys_ldap.c (main, get_key): When searching for a keyid, search for subkeys as well as primary keys. This is mostly significant when automatically fetching the key based on the id in a header (i.e. "signature made by...."). "no-include-subkeys" disables. 2002-02-14 David Shaw * gpgkeys_ldap.c: Fix compiler warning. * gpgkeys_ldap.c: Be much more robust with mangled input files. 2001-12-28 David Shaw * gpgkeys_mailto.in: Use the new OUTOFBAND indicator so gpg knows not to try and import anything. Also turn on perl -w for warnings. * gpgkeys_ldap.c (main): If we're using temp files (rather than stdin/stdout), make sure the file is closed when we're done. 2001-12-20 David Shaw * Properly free the LDAP response when we're done with it. * Now that we handle multiple keys, we must remove duplicates as the LDAP keyserver returns keys with multiple user IDs multiple times. * Properly handle multiple keys with the same key ID (it's really rare, so fetch "0xDEADBEEF" to test this). 2001-12-17 David Shaw * gpgkeys_ldap.c, gpgkeys_mailto.in: Fix GNU capitalization issues. Prefix log messages with "gpgkeys" to clarify which program is generating them. 2001-12-14 David Shaw * gpgkeys_ldap.c (search_key): Use unsigned int rather than uint for portability. 2001-12-04 David Shaw * Initial version of gpgkeys_ldap (LDAP keyserver helper) and gpgkeys_mailto (email keyserver helper) Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/keyserver/curl-shim.h0000644000175000017500000000543012635262326013743 00000000000000/* curl-shim.h * Copyright (C) 2005, 2006, 2007, 2008, 2009, * 2013 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 3 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, see . */ #ifndef _CURL_SHIM_H_ #define _CURL_SHIM_H_ #include "http.h" typedef enum { CURLE_OK=0, CURLE_UNSUPPORTED_PROTOCOL=1, CURLE_COULDNT_CONNECT=7, CURLE_FTP_COULDNT_RETR_FILE=19, CURLE_HTTP_RETURNED_ERROR=22, CURLE_WRITE_ERROR=23 } CURLcode; typedef enum { CURLOPT_URL, CURLOPT_USERPWD, CURLOPT_WRITEFUNCTION, CURLOPT_FILE, CURLOPT_ERRORBUFFER, CURLOPT_FOLLOWLOCATION, CURLOPT_MAXREDIRS, CURLOPT_STDERR, CURLOPT_VERBOSE, CURLOPT_SSL_VERIFYPEER, CURLOPT_PROXY, CURLOPT_CAINFO, CURLOPT_POST, CURLOPT_POSTFIELDS, CURLOPT_FAILONERROR, CURLOPT_HTTPHEADER, CURLOPT_SRVTAG_GPG_HACK } CURLoption; typedef enum { CURLINFO_RESPONSE_CODE } CURLINFO; typedef size_t (*write_func)(char *buffer,size_t size, size_t nitems,void *outstream); typedef struct { char *url; char *auth; char *errorbuffer; char *proxy; write_func writer; void *file; char *postfields; char *srvtag; unsigned int status; FILE *errors; struct curl_slist *headers; struct { unsigned int post:1; unsigned int failonerror:1; unsigned int verbose:1; } flags; struct http_context hd; } CURL; typedef struct { const char **protocols; } curl_version_info_data; #define CURL_ERROR_SIZE 256 #define CURL_GLOBAL_DEFAULT 0 #define CURLVERSION_NOW 0 CURLcode curl_global_init(long flags); void curl_global_cleanup(void); CURL *curl_easy_init(void); CURLcode curl_easy_setopt(CURL *curl,CURLoption option,...); CURLcode curl_easy_perform(CURL *curl); CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... ); void curl_easy_cleanup(CURL *curl); char *curl_easy_escape(CURL *curl,char *str,int len); #define curl_free(x) free(x) #define curl_version() "GnuPG curl-shim" curl_version_info_data *curl_version_info(int type); struct curl_slist { STRLIST list; }; struct curl_slist *curl_slist_append(struct curl_slist *list, const char *string); void curl_slist_free_all(struct curl_slist *list); #endif /* !_CURL_SHIM_H_ */ gnupg-1.4.20/keyserver/ksutil.c0000644000175000017500000003227612635262326013356 00000000000000/* ksutil.c - general keyserver utility functions * Copyright (C) 2004, 2005, 2006, 2007 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 3 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, see . * * In addition, as a special exception, the Free Software Foundation * gives permission to link the code of the keyserver helper tools: * gpgkeys_ldap, gpgkeys_curl and gpgkeys_hkp with the OpenSSL * project's "OpenSSL" library (or with modified versions of it that * use the same license as the "OpenSSL" library), and distribute the * linked executables. You must obey the GNU General Public License * in all respects for all of the code used other than "OpenSSL". If * you modify this file, you may extend this exception to your version * of the file, but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. */ #include #include #include #include #include #include #ifdef HAVE_LIBCURL #include #else #include "curl-shim.h" #endif #include "compat.h" #include "keyserver.h" #include "ksutil.h" #ifdef HAVE_DOSISH_SYSTEM unsigned int set_timeout(unsigned int seconds) {return 0;} int register_timeout(void) {return 0;} #else static void catch_alarm(int foo) { (void)foo; _exit(KEYSERVER_TIMEOUT); } unsigned int set_timeout(unsigned int seconds) { return alarm(seconds); } int register_timeout(void) { #if defined(HAVE_SIGACTION) && defined(HAVE_STRUCT_SIGACTION) struct sigaction act; act.sa_handler=catch_alarm; sigemptyset(&act.sa_mask); act.sa_flags=0; return sigaction(SIGALRM,&act,NULL); #else if(signal(SIGALRM,catch_alarm)==SIG_ERR) return -1; else return 0; #endif } #endif /* !HAVE_DOSISH_SYSTEM */ struct ks_options * init_ks_options(void) { struct ks_options *opt; opt=calloc(1,sizeof(struct ks_options)); if(opt) { opt->action=KS_UNKNOWN; opt->flags.include_revoked=1; opt->flags.include_subkeys=1; opt->flags.check_cert=1; opt->timeout=DEFAULT_KEYSERVER_TIMEOUT; opt->path=strdup("/"); if(!opt->path) { free(opt); opt=NULL; } } return opt; } void free_ks_options(struct ks_options *opt) { if(opt) { free(opt->host); free(opt->port); free(opt->scheme); free(opt->auth); free(opt->path); free(opt->opaque); free(opt->ca_cert_file); free(opt); } } /* Returns 0 if we "ate" the line. Returns >0, a KEYSERVER_ error code if that error applies. Returns -1 if we did not match the line at all. */ int parse_ks_options(char *line,struct ks_options *opt) { int version; char command[MAX_COMMAND+1]; char host[MAX_HOST+1]; char port[MAX_PORT+1]; char scheme[MAX_SCHEME+1]; char auth[MAX_AUTH+1]; char path[URLMAX_PATH+1]; char opaque[MAX_OPAQUE+1]; char option[MAX_OPTION+1]; if(line[0]=='#') return 0; if(sscanf(line,"COMMAND %" MKSTRING(MAX_COMMAND) "s\n",command)==1) { command[MAX_COMMAND]='\0'; if(ascii_strcasecmp(command,"get")==0) opt->action=KS_GET; else if(ascii_strcasecmp(command,"getname")==0) opt->action=KS_GETNAME; else if(ascii_strcasecmp(command,"send")==0) opt->action=KS_SEND; else if(ascii_strcasecmp(command,"search")==0) opt->action=KS_SEARCH; return 0; } if(sscanf(line,"HOST %" MKSTRING(MAX_HOST) "s\n",host)==1) { host[MAX_HOST]='\0'; free(opt->host); opt->host=strdup(host); if(!opt->host) return KEYSERVER_NO_MEMORY; return 0; } if(sscanf(line,"PORT %" MKSTRING(MAX_PORT) "s\n",port)==1) { port[MAX_PORT]='\0'; free(opt->port); opt->port=strdup(port); if(!opt->port) return KEYSERVER_NO_MEMORY; return 0; } if(sscanf(line,"SCHEME %" MKSTRING(MAX_SCHEME) "s\n",scheme)==1) { scheme[MAX_SCHEME]='\0'; free(opt->scheme); opt->scheme=strdup(scheme); if(!opt->scheme) return KEYSERVER_NO_MEMORY; return 0; } if(sscanf(line,"AUTH %" MKSTRING(MAX_AUTH) "s\n",auth)==1) { auth[MAX_AUTH]='\0'; free(opt->auth); opt->auth=strdup(auth); if(!opt->auth) return KEYSERVER_NO_MEMORY; return 0; } if(sscanf(line,"PATH %" MKSTRING(URLMAX_PATH) "s\n",path)==1) { path[URLMAX_PATH]='\0'; free(opt->path); opt->path=strdup(path); if(!opt->path) return KEYSERVER_NO_MEMORY; return 0; } if(sscanf(line,"OPAQUE %" MKSTRING(MAX_OPAQUE) "s\n",opaque)==1) { opaque[MAX_OPAQUE]='\0'; free(opt->opaque); opt->opaque=strdup(opaque); if(!opt->opaque) return KEYSERVER_NO_MEMORY; return 0; } if(sscanf(line,"VERSION %d\n",&version)==1) { if(version!=KEYSERVER_PROTO_VERSION) return KEYSERVER_VERSION_ERROR; return 0; } if(sscanf(line,"OPTION %" MKSTRING(MAX_OPTION) "[^\n]\n",option)==1) { int no=0; char *start=&option[0]; option[MAX_OPTION]='\0'; if(ascii_strncasecmp(option,"no-",3)==0) { no=1; start=&option[3]; } if(ascii_strncasecmp(start,"verbose",7)==0) { if(no) opt->verbose=0; else if(start[7]=='=') opt->verbose=atoi(&start[8]); else opt->verbose++; } else if(ascii_strcasecmp(start,"include-disabled")==0) { if(no) opt->flags.include_disabled=0; else opt->flags.include_disabled=1; } else if(ascii_strcasecmp(start,"include-revoked")==0) { if(no) opt->flags.include_revoked=0; else opt->flags.include_revoked=1; } else if(ascii_strcasecmp(start,"include-subkeys")==0) { if(no) opt->flags.include_subkeys=0; else opt->flags.include_subkeys=1; } else if(ascii_strcasecmp(start,"check-cert")==0) { if(no) opt->flags.check_cert=0; else opt->flags.check_cert=1; } else if(ascii_strncasecmp(start,"debug",5)==0) { if(no) opt->debug=0; else if(start[5]=='=') opt->debug=atoi(&start[6]); else if(start[5]=='\0') opt->debug=1; } else if(ascii_strncasecmp(start,"timeout",7)==0) { if(no) opt->timeout=0; else if(start[7]=='=') opt->timeout=atoi(&start[8]); else if(start[7]=='\0') opt->timeout=DEFAULT_KEYSERVER_TIMEOUT; } else if(ascii_strncasecmp(start,"ca-cert-file",12)==0) { if(no) { free(opt->ca_cert_file); opt->ca_cert_file=NULL; } else if(start[12]=='=') { free(opt->ca_cert_file); opt->ca_cert_file=strdup(&start[13]); if(!opt->ca_cert_file) return KEYSERVER_NO_MEMORY; } } } return -1; } const char * ks_action_to_string(enum ks_action action) { switch(action) { case KS_UNKNOWN: return "UNKNOWN"; case KS_GET: return "GET"; case KS_GETNAME: return "GETNAME"; case KS_SEND: return "SEND"; case KS_SEARCH: return "SEARCH"; } return "?"; } /* Canonicalize CRLF to just LF by stripping CRs. This actually makes sense, since on Unix-like machines LF is correct, and on win32-like machines, our output buffer is opened in textmode and will re-canonicalize line endings back to CRLF. Since we only need to handle armored keys, we don't have to worry about odd cases like CRCRCR and the like. */ void print_nocr(FILE *stream,const char *str) { while(*str) { if(*str!='\r') fputc(*str,stream); str++; } } #define HEX "abcdefABCDEF1234567890" /* Return what sort of item is being searched for. *search is permuted to remove any special indicators of a search type. */ enum ks_search_type classify_ks_search(const char **search) { switch(**search) { case '*': (*search)++; return KS_SEARCH_SUBSTR; case '=': (*search)++; return KS_SEARCH_EXACT; case '<': (*search)++; return KS_SEARCH_MAIL; case '@': (*search)++; return KS_SEARCH_MAILSUB; case '0': if((*search)[1]=='x') { if(strlen(*search)==10 && strspn(*search,HEX"x")==10) { (*search)+=2; return KS_SEARCH_KEYID_SHORT; } else if(strlen(*search)==18 && strspn(*search,HEX"x")==18) { (*search)+=2; return KS_SEARCH_KEYID_LONG; } } /* fall through */ default: /* Try and recognize a key ID. This isn't exact (it's possible that a user ID string happens to be 8 or 16 digits of hex), but it's extremely unlikely. Plus the main GPG program does this also, and consistency is good. */ if(strlen(*search)==8 && strspn(*search,HEX)==8) return KS_SEARCH_KEYID_SHORT; else if(strlen(*search)==16 && strspn(*search,HEX)==16) return KS_SEARCH_KEYID_LONG; /* Last resort */ return KS_SEARCH_SUBSTR; } } int curl_err_to_gpg_err(CURLcode error) { switch(error) { case CURLE_OK: return KEYSERVER_OK; case CURLE_UNSUPPORTED_PROTOCOL: return KEYSERVER_SCHEME_NOT_FOUND; case CURLE_COULDNT_CONNECT: return KEYSERVER_UNREACHABLE; case CURLE_FTP_COULDNT_RETR_FILE: return KEYSERVER_KEY_NOT_FOUND; default: return KEYSERVER_INTERNAL_ERROR; } } #define B64 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" static void curl_armor_writer(const unsigned char *buf,size_t size,void *cw_ctx) { struct curl_writer_ctx *ctx=cw_ctx; size_t idx=0; while(idxarmor_remaining<3 && idxarmor_remaining++,idx++) ctx->armor_ctx[ctx->armor_remaining]=buf[idx]; if(ctx->armor_remaining==3) { /* Top 6 bytes of ctx->armor_ctx[0] */ fputc(B64[(ctx->armor_ctx[0]>>2)&0x3F],ctx->stream); /* Bottom 2 bytes of ctx->armor_ctx[0] and top 4 bytes of ctx->armor_ctx[1] */ fputc(B64[(((ctx->armor_ctx[0]<<4)&0x30) |((ctx->armor_ctx[1]>>4)&0x0F))&0x3F],ctx->stream); /* Bottom 4 bytes of ctx->armor_ctx[1] and top 2 bytes of ctx->armor_ctx[2] */ fputc(B64[(((ctx->armor_ctx[1]<<2)&0x3C) |((ctx->armor_ctx[2]>>6)&0x03))&0x3F],ctx->stream); /* Bottom 6 bytes of ctx->armor_ctx[2] */ fputc(B64[(ctx->armor_ctx[2]&0x3F)],ctx->stream); ctx->linelen+=4; if(ctx->linelen>=70) { fputc('\n',ctx->stream); ctx->linelen=0; } ctx->armor_remaining=0; } } } size_t curl_writer(const void *ptr,size_t size,size_t nmemb,void *cw_ctx) { struct curl_writer_ctx *ctx=cw_ctx; const char *buf=ptr; size_t i; if(!ctx->flags.initialized) { if(size*nmemb==0) return 0; /* The object we're fetching is in binary form */ if(*buf&0x80) { ctx->flags.armor=1; fprintf(ctx->stream,BEGIN"\n\n"); } else ctx->marker=BEGIN; ctx->flags.initialized=1; } if(ctx->flags.armor) curl_armor_writer(ptr,size*nmemb,cw_ctx); else { /* scan the incoming data for our marker */ for(i=0;!ctx->flags.done && i<(size*nmemb);i++) { if(buf[i]==ctx->marker[ctx->markeridx]) { ctx->markeridx++; if(ctx->marker[ctx->markeridx]=='\0') { if(ctx->flags.begun) ctx->flags.done=1; else { /* We've found the BEGIN marker, so now we're looking for the END marker. */ ctx->flags.begun=1; ctx->marker=END; ctx->markeridx=0; fprintf(ctx->stream,BEGIN); continue; } } } else ctx->markeridx=0; if(ctx->flags.begun) { /* Canonicalize CRLF to just LF by stripping CRs. This actually makes sense, since on Unix-like machines LF is correct, and on win32-like machines, our output buffer is opened in textmode and will re-canonicalize line endings back to CRLF. Since this code is just for handling armored keys, we don't have to worry about odd cases like CRCRCR and the like. */ if(buf[i]!='\r') fputc(buf[i],ctx->stream); } } } return size*nmemb; } void curl_writer_finalize(struct curl_writer_ctx *ctx) { if(ctx->flags.armor) { if(ctx->armor_remaining==2) { /* Top 6 bytes of ctx->armorctx[0] */ fputc(B64[(ctx->armor_ctx[0]>>2)&0x3F],ctx->stream); /* Bottom 2 bytes of ctx->armor_ctx[0] and top 4 bytes of ctx->armor_ctx[1] */ fputc(B64[(((ctx->armor_ctx[0]<<4)&0x30) |((ctx->armor_ctx[1]>>4)&0x0F))&0x3F],ctx->stream); /* Bottom 4 bytes of ctx->armor_ctx[1] */ fputc(B64[((ctx->armor_ctx[1]<<2)&0x3C)],ctx->stream); /* Pad */ fputc('=',ctx->stream); } else if(ctx->armor_remaining==1) { /* Top 6 bytes of ctx->armor_ctx[0] */ fputc(B64[(ctx->armor_ctx[0]>>2)&0x3F],ctx->stream); /* Bottom 2 bytes of ctx->armor_ctx[0] */ fputc(B64[((ctx->armor_ctx[0]<<4)&0x30)],ctx->stream); /* Pad */ fputc('=',ctx->stream); /* Pad */ fputc('=',ctx->stream); } fprintf(ctx->stream,"\n"END); ctx->flags.done=1; } } gnupg-1.4.20/keyserver/gpgkeys_hkp.c0000644000175000017500000006335012635262326014353 00000000000000/* gpgkeys_hkp.c - talk to an HKP keyserver * Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, * 2009, 2012, 2013 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 3 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, see . * * In addition, as a special exception, the Free Software Foundation * gives permission to link the code of the keyserver helper tools: * gpgkeys_ldap, gpgkeys_curl and gpgkeys_hkp with the OpenSSL * project's "OpenSSL" library (or with modified versions of it that * use the same license as the "OpenSSL" library), and distribute the * linked executables. You must obey the GNU General Public License * in all respects for all of the code used other than "OpenSSL". If * you modify this file, you may extend this exception to your version * of the file, but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. */ #include #include #include #include #include #include #ifdef HAVE_GETOPT_H # include #endif #ifdef HAVE_LIBCURL # include /* This #define rigamarole is to enable a hack to fake DNS SRV using libcurl. It only works if we have getaddrinfo(), inet_ntop(), and a modern enough version of libcurl (7.21.3) so we can use CURLOPT_RESOLVE to feed the resolver from the outside to force libcurl to pass the right SNI. */ #if (defined(HAVE_GETADDRINFO) && defined(HAVE_INET_NTOP) \ && LIBCURL_VERNUM >= 0x071503) # include # include # include # include #else # undef USE_DNS_SRV #endif #else # include "curl-shim.h" #endif #ifdef USE_DNS_SRV # include "srv.h" #endif #include "compat.h" #include "keyserver.h" #include "ksutil.h" extern char *optarg; extern int optind; static FILE *input,*output,*console; static CURL *curl; static struct ks_options *opt; static char errorbuffer[CURL_ERROR_SIZE]; static char *proto,*port; static size_t curl_mrindex_writer(const void *ptr,size_t size,size_t nmemb,void *stream) { static int checked=0; static int swallow=0; if(!checked) { /* If the document begins with a '<', assume it's a HTML response, which we don't support. Discard the whole message body. GPG can handle it, but this is an optimization to deal with it on this side of the pipe. */ const char *buf=ptr; if(buf[0]=='<') swallow=1; checked=1; } if(swallow || fwrite(ptr,size,nmemb,stream)==nmemb) return size*nmemb; else return 0; } /* Append but avoid creating a double slash // in the path. */ static char * append_path(char *dest,const char *src) { size_t n=strlen(dest); if(src[0]=='/' && n>0 && dest[n-1]=='/') dest[n-1]='\0'; return strcat(dest,src); } int send_key(int *eof) { CURLcode res; char request[MAX_URL+15]; int begin=0,end=0,ret=KEYSERVER_INTERNAL_ERROR; char keyid[17],state[6]; char line[MAX_LINE]; char *key=NULL,*encoded_key=NULL; size_t keysize=1; key = xtrymalloc(1); if(!key) { fprintf(console,"gpgkeys: unable to allocate memory for key\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } key[0]='\0'; /* Read and throw away input until we see the BEGIN */ while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"KEY%*[ ]%16s%*[ ]%5s\n",keyid,state)==2 && strcmp(state,"BEGIN")==0) { begin=1; break; } if(!begin) { /* i.e. eof before the KEY BEGIN was found. This isn't an error. */ *eof=1; ret=KEYSERVER_OK; goto fail; } /* Now slurp up everything until we see the END */ while(fgets(line,MAX_LINE,input)) if(sscanf(line,"KEY%*[ ]%16s%*[ ]%3s\n",keyid,state)==2 && strcmp(state,"END")==0) { end=1; break; } else { char *tempkey; keysize+=strlen(line); tempkey=realloc(key,keysize); if(tempkey==NULL) { fprintf(console,"gpgkeys: unable to reallocate for key\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } else key=tempkey; strcat(key,line); } if(!end) { fprintf(console,"gpgkeys: no KEY %s END found\n",keyid); *eof=1; ret=KEYSERVER_KEY_INCOMPLETE; goto fail; } encoded_key=curl_easy_escape(curl,key,keysize); if(!encoded_key) { fprintf(console,"gpgkeys: out of memory\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } free(key); key=xtrymalloc(8+strlen(encoded_key)+1); if(!key) { fprintf(console,"gpgkeys: out of memory\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } strcpy(key,"keytext="); strcat(key,encoded_key); strcpy(request,proto); strcat(request,"://"); strcat(request,opt->host); strcat(request,":"); strcat(request,port); strcat(request,opt->path); /* request is MAX_URL+15 bytes long - MAX_URL covers the whole URL, including any supplied path. The 15 covers /pks/add. */ append_path(request,"/pks/add"); if(opt->verbose>2) fprintf(console,"gpgkeys: HTTP URL is `%s'\n",request); curl_easy_setopt(curl,CURLOPT_URL,request); curl_easy_setopt(curl,CURLOPT_POST,1L); curl_easy_setopt(curl,CURLOPT_POSTFIELDS,key); curl_easy_setopt(curl,CURLOPT_FAILONERROR,1L); res=curl_easy_perform(curl); if(res!=0) { fprintf(console,"gpgkeys: HTTP post error %d: %s\n",res,errorbuffer); ret=curl_err_to_gpg_err(res); goto fail; } else fprintf(output,"\nKEY %s SENT\n",keyid); ret=KEYSERVER_OK; fail: free(key); curl_free(encoded_key); if(ret!=0 && begin) fprintf(output,"KEY %s FAILED %d\n",keyid,ret); return ret; } static int get_key(char *getkey) { CURLcode res; char request[MAX_URL+92]; char *offset; struct curl_writer_ctx ctx; size_t keylen; memset(&ctx,0,sizeof(ctx)); /* Build the search string. HKP only uses the short key IDs. */ if(strncmp(getkey,"0x",2)==0) getkey+=2; fprintf(output,"KEY 0x%s BEGIN\n",getkey); if(strlen(getkey)==32) { fprintf(console, "gpgkeys: HKP keyservers do not support v3 fingerprints\n"); fprintf(output,"KEY 0x%s FAILED %d\n",getkey,KEYSERVER_NOT_SUPPORTED); return KEYSERVER_NOT_SUPPORTED; } strcpy(request,proto); strcat(request,"://"); strcat(request,opt->host); strcat(request,":"); strcat(request,port); strcat(request,opt->path); /* request is MAX_URL+55 bytes long - MAX_URL covers the whole URL, including any supplied path. The 92 overcovers this /pks/... etc string plus the 8, 16, or 40 bytes of key id/fingerprint */ append_path(request,"/pks/lookup?op=get&options=mr&search=0x"); /* send only fingerprint, long key id, or short keyid. see: https://tools.ietf.org/html/draft-shaw-openpgp-hkp-00#section-3.1.1.1 */ keylen = strlen(getkey); if(keylen >= 40) offset=&getkey[keylen-40]; else if(keylen >= 16) offset=&getkey[keylen-16]; else if(keylen >= 8) offset=&getkey[keylen-8]; else offset=getkey; strcat(request,offset); if(opt->verbose>2) fprintf(console,"gpgkeys: HTTP URL is `%s'\n",request); curl_easy_setopt(curl,CURLOPT_URL,request); curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,curl_writer); ctx.stream=output; curl_easy_setopt(curl,CURLOPT_FILE,&ctx); res=curl_easy_perform(curl); if(res!=CURLE_OK) { fprintf(console,"gpgkeys: HTTP fetch error %d: %s\n",res,errorbuffer); fprintf(output,"\nKEY 0x%s FAILED %d\n",getkey,curl_err_to_gpg_err(res)); } else { long status = 0; curl_writer_finalize(&ctx); curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &status); if (opt->verbose > 2) fprintf (console, "gpgkeys: HTTP response code is %ld\n", status); if (status == 200) { if (!ctx.flags.done) { if (ctx.flags.begun) { fprintf (console, "gpgkeys: key %s partially retrieved" " (probably corrupt)\n", getkey); fprintf (output, "\nKEY 0x%s FAILED %d\n", getkey, KEYSERVER_KEY_INCOMPLETE); } else { fprintf (console, "gpgkeys: key %s can't be retrieved\n", getkey); fprintf (output, "\nKEY 0x%s FAILED %d\n", getkey, KEYSERVER_GENERAL_ERROR); } } else fprintf (output, "\nKEY 0x%s END\n", getkey); } else if (status == 404) { fprintf (console, "gpgkeys: key %s not found on keyserver\n", getkey); fprintf (output, "\nKEY 0x%s FAILED %d\n", getkey, KEYSERVER_KEY_NOT_FOUND); } else { fprintf (console, "gpgkeys: key %s can't be retrieved\n", getkey); fprintf (output, "\nKEY 0x%s FAILED %d\n", getkey, KEYSERVER_GENERAL_ERROR); } } return KEYSERVER_OK; } static int get_name(const char *getkey) { CURLcode res; char *request=NULL; char *searchkey_encoded; int ret=KEYSERVER_INTERNAL_ERROR; struct curl_writer_ctx ctx; memset(&ctx,0,sizeof(ctx)); searchkey_encoded=curl_easy_escape(curl,(char *)getkey,0); if(!searchkey_encoded) { fprintf(console,"gpgkeys: out of memory\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } request=xtrymalloc(MAX_URL+60+strlen(searchkey_encoded)); if(!request) { fprintf(console,"gpgkeys: out of memory\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } fprintf(output,"NAME %s BEGIN\n",getkey); strcpy(request,proto); strcat(request,"://"); strcat(request,opt->host); strcat(request,":"); strcat(request,port); strcat(request,opt->path); append_path(request,"/pks/lookup?op=get&options=mr&search="); strcat(request,searchkey_encoded); if(opt->action==KS_GETNAME) strcat(request,"&exact=on"); if(opt->verbose>2) fprintf(console,"gpgkeys: HTTP URL is `%s'\n",request); curl_easy_setopt(curl,CURLOPT_URL,request); curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,curl_writer); ctx.stream=output; curl_easy_setopt(curl,CURLOPT_FILE,&ctx); res=curl_easy_perform(curl); if(res!=CURLE_OK) { fprintf(console,"gpgkeys: HTTP fetch error %d: %s\n",res,errorbuffer); ret=curl_err_to_gpg_err(res); } else { long status = 0; curl_writer_finalize(&ctx); curl_easy_getinfo (curl, CURLINFO_RESPONSE_CODE, &status); if (opt->verbose > 2) fprintf (console, "gpgkeys: HTTP response code is %ld\n", status); if (status == 200) { if (!ctx.flags.done) { if (ctx.flags.begun) { fprintf (console, "gpgkeys: key %s partially retrieved" " (probably corrupt)\n", getkey); ret = KEYSERVER_KEY_INCOMPLETE; } else { fprintf (console, "gpgkeys: key %s can't be retrieved\n", getkey); ret = KEYSERVER_GENERAL_ERROR; } } else { fprintf (output, "\nNAME %s END\n", getkey); ret = KEYSERVER_OK; } } else if (status == 404) { fprintf (console, "gpgkeys: key %s not found on keyserver\n", getkey); ret = KEYSERVER_KEY_NOT_FOUND; } else { fprintf (console, "gpgkeys: key %s can't be retrieved\n", getkey); ret = KEYSERVER_GENERAL_ERROR; } } fail: curl_free(searchkey_encoded); free(request); if(ret!=KEYSERVER_OK) fprintf(output,"\nNAME %s FAILED %d\n",getkey,ret); return ret; } static int search_key(const char *searchkey) { CURLcode res; char *request=NULL; char *searchkey_encoded; int ret=KEYSERVER_INTERNAL_ERROR; enum ks_search_type search_type; search_type=classify_ks_search(&searchkey); if(opt->debug) fprintf(console,"gpgkeys: search type is %d, and key is \"%s\"\n", search_type,searchkey); searchkey_encoded=curl_easy_escape(curl,(char *)searchkey,0); if(!searchkey_encoded) { fprintf(console,"gpgkeys: out of memory\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } request=xtrymalloc(MAX_URL+60+strlen(searchkey_encoded)); if(!request) { fprintf(console,"gpgkeys: out of memory\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } fprintf(output,"SEARCH %s BEGIN\n",searchkey); strcpy(request,proto); strcat(request,"://"); strcat(request,opt->host); strcat(request,":"); strcat(request,port); strcat(request,opt->path); append_path(request,"/pks/lookup?op=index&options=mr&search="); /* HKP keyservers like the 0x to be present when searching by keyid */ if(search_type==KS_SEARCH_KEYID_SHORT || search_type==KS_SEARCH_KEYID_LONG) strcat(request,"0x"); strcat(request,searchkey_encoded); if(search_type!=KS_SEARCH_SUBSTR) strcat(request,"&exact=on"); if(opt->verbose>2) fprintf(console,"gpgkeys: HTTP URL is `%s'\n",request); curl_easy_setopt(curl,CURLOPT_URL,request); curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,curl_mrindex_writer); curl_easy_setopt(curl,CURLOPT_FILE,output); res=curl_easy_perform(curl); if(res!=0) { fprintf(console,"gpgkeys: HTTP search error %d: %s\n",res,errorbuffer); ret=curl_err_to_gpg_err(res); } else { fprintf(output,"\nSEARCH %s END\n",searchkey); ret=KEYSERVER_OK; } fail: curl_free(searchkey_encoded); free(request); if(ret!=KEYSERVER_OK) fprintf(output,"\nSEARCH %s FAILED %d\n",searchkey,ret); return ret; } void fail_all(struct keylist *keylist,int err) { if(!keylist) return; if(opt->action==KS_SEARCH) { fprintf(output,"SEARCH "); while(keylist) { fprintf(output,"%s ",keylist->str); keylist=keylist->next; } fprintf(output,"FAILED %d\n",err); } else while(keylist) { fprintf(output,"KEY %s FAILED %d\n",keylist->str,err); keylist=keylist->next; } } #if defined(HAVE_LIBCURL) && defined(USE_DNS_SRV) /* If there is a SRV record, take the highest ranked possibility. This is a hack, as we don't proceed downwards if we can't connect(), but only if we can't getaddinfo(). All this should ideally be replaced by actual SRV support in libcurl someday! */ #define HOST_HEADER "Host:" static void srv_replace(const char *srvtag, struct curl_slist **headers, struct curl_slist **resolve) { struct srventry *srvlist=NULL; int srvcount, srvindex; char *portstr; if(!srvtag) return; portstr=malloc (MAX_PORT); if(!portstr) return; if(1+strlen(srvtag)+6+strlen(opt->host)+1<=MAXDNAME) { char srvname[MAXDNAME]; strcpy(srvname,"_"); strcat(srvname,srvtag); strcat(srvname,"._tcp."); strcat(srvname,opt->host); srvcount=getsrv(srvname,&srvlist); } else srvcount = 0; for(srvindex=0 ; srvindexai_family==AF_INET && inet_ntop (res->ai_family, &((struct sockaddr_in *)res->ai_addr)->sin_addr, ipaddr,sizeof(ipaddr))) || (res->ai_family==AF_INET6 && inet_ntop (res->ai_family, &((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, ipaddr,sizeof(ipaddr)))) { char *entry,*host; entry=malloc (strlen(opt->host)+1 +strlen(portstr)+1+strlen(ipaddr)+1); host=malloc (strlen(HOST_HEADER)+1+strlen(opt->host)+1); if(entry && host) { sprintf (entry, "%s:%s:%s", opt->host, portstr, ipaddr); sprintf (host, "%s %s", HOST_HEADER, opt->host); *resolve=curl_slist_append (*resolve,entry); *headers=curl_slist_append (*headers,host); if(*resolve && *headers) { if(curl_easy_setopt (curl, CURLOPT_RESOLVE,*resolve)==CURLE_OK) { if(opt->debug) fprintf (console, "gpgkeys: Faking %s SRV from" " %s to %s:%u\n", srvtag, opt->host, srvlist[srvindex].target, srvlist[srvindex].port); free (opt->port); opt->port=portstr; portstr=NULL; } } } free (entry); free (host); } freeaddrinfo (res); } else continue; /* Not found */ } free (srvlist); free (portstr); } #endif static void show_help (FILE *fp) { fprintf (fp,"-h, --help\thelp\n"); fprintf (fp,"-V\t\tmachine readable version\n"); fprintf (fp,"--version\thuman readable version\n"); fprintf (fp,"-o\t\toutput to this file\n"); } int main(int argc,char *argv[]) { int arg,ret=KEYSERVER_INTERNAL_ERROR; char line[MAX_LINE]; int failed=0; struct keylist *keylist=NULL,*keyptr=NULL; char *proxy=NULL; struct curl_slist *headers=NULL; struct curl_slist *resolve=NULL; /* Only default this to on if we have SRV support */ #ifdef USE_DNS_SRV int try_srv = 1; #else int try_srv = 0; #endif console=stderr; /* Kludge to implement standard GNU options. */ if (argc > 1 && !strcmp (argv[1], "--version")) { printf ("gpgkeys_hkp (GnuPG) %s\n", VERSION); printf ("Uses: %s\n", curl_version()); return 0; } else if (argc > 1 && !strcmp (argv[1], "--help")) { show_help (stdout); return 0; } while((arg=getopt(argc,argv,"hVo:"))!=-1) switch(arg) { default: case 'h': show_help (console); return KEYSERVER_OK; case 'V': fprintf(stdout,"%d\n%s\n",KEYSERVER_PROTO_VERSION,VERSION); return KEYSERVER_OK; case 'o': output=fopen(optarg,"w"); if(output==NULL) { fprintf(console,"gpgkeys: Cannot open output file `%s': %s\n", optarg,strerror(errno)); return KEYSERVER_INTERNAL_ERROR; } break; } if(argc>optind) { input=fopen(argv[optind],"r"); if(input==NULL) { fprintf(console,"gpgkeys: Cannot open input file `%s': %s\n", argv[optind],strerror(errno)); return KEYSERVER_INTERNAL_ERROR; } } if(input==NULL) input=stdin; if(output==NULL) output=stdout; opt=init_ks_options(); if(!opt) return KEYSERVER_NO_MEMORY; /* Get the command and info block */ while(fgets(line,MAX_LINE,input)!=NULL) { int err; char option[MAX_OPTION+1]; if(line[0]=='\n') break; err=parse_ks_options(line,opt); if(err>0) { ret=err; goto fail; } else if(err==0) continue; if(sscanf(line,"OPTION %" MKSTRING(MAX_OPTION) "s\n",option)==1) { int no=0; char *start=&option[0]; option[MAX_OPTION]='\0'; if(ascii_strncasecmp(option,"no-",3)==0) { no=1; start=&option[3]; } if(ascii_strncasecmp(start,"http-proxy",10)==0) { if(no) { free(proxy); proxy=strdup(""); } else if(start[10]=='=') { if(strlen(&start[11])scheme) { fprintf(console,"gpgkeys: no scheme supplied!\n"); ret=KEYSERVER_SCHEME_NOT_FOUND; goto fail; } /* Defaults */ if(ascii_strcasecmp(opt->scheme,"hkps")==0) { proto="https"; port="443"; } else { proto="http"; port="11371"; } if(!opt->host) { fprintf(console,"gpgkeys: no keyserver host provided\n"); goto fail; } if(opt->timeout && register_timeout()==-1) { fprintf(console,"gpgkeys: unable to register timeout handler\n"); return KEYSERVER_INTERNAL_ERROR; } curl_global_init(CURL_GLOBAL_DEFAULT); curl=curl_easy_init(); if(!curl) { fprintf(console,"gpgkeys: unable to initialize curl\n"); ret=KEYSERVER_INTERNAL_ERROR; goto fail; } if(opt->debug) { fprintf(console,"gpgkeys: curl version = %s\n",curl_version()); curl_easy_setopt(curl,CURLOPT_STDERR,console); curl_easy_setopt(curl,CURLOPT_VERBOSE,1L); } /* Only use SRV if the user does not provide a :port. The semantics of a specified port and SRV do not play well together. */ if(!opt->port && try_srv) { char *srvtag; if(ascii_strcasecmp(opt->scheme,"hkp")==0) srvtag="pgpkey-http"; else if(ascii_strcasecmp(opt->scheme,"hkps")==0) srvtag="pgpkey-https"; else srvtag=NULL; #ifdef HAVE_LIBCURL /* We're using libcurl, so fake SRV support via our wrapper. This isn't as good as true SRV support, as we do not try all possible targets at one particular level and work our way down the list, but it's better than nothing. */ #ifdef USE_DNS_SRV srv_replace(srvtag,&headers,&resolve); #else fprintf(console,"gpgkeys: try-dns-srv was requested, but not SRV capable\n"); #endif #else /* !HAVE_LIBCURL */ /* We're using our internal curl shim, so we can use its (true) SRV support. Obviously, CURLOPT_SRVTAG_GPG_HACK isn't a real libcurl option. It's specific to our shim. */ curl_easy_setopt(curl,CURLOPT_SRVTAG_GPG_HACK,srvtag); #endif } /* If the user provided a port (or it came in via SRV, above), replace the default. */ if(opt->port) port=opt->port; curl_easy_setopt(curl,CURLOPT_ERRORBUFFER,errorbuffer); if(opt->auth) curl_easy_setopt(curl,CURLOPT_USERPWD,opt->auth); curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,(long)opt->flags.check_cert); if (opt->ca_cert_file) curl_easy_setopt (curl, CURLOPT_CAINFO, opt->ca_cert_file); /* Avoid caches to get the most recent copy of the key. This is bug #1061. In pre-curl versions of the code, we didn't do it. Then we did do it (as a curl default) until curl changed the default. Now we're doing it again, but in such a way that changing defaults in the future won't impact us. We set both the Pragma and Cache-Control versions of the header, so we're good with both HTTP 1.0 and 1.1. */ headers=curl_slist_append(headers,"Pragma: no-cache"); if(headers) headers=curl_slist_append(headers,"Cache-Control: no-cache"); if(!headers) { fprintf(console,"gpgkeys: out of memory when building HTTP headers\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers); if(proxy) curl_easy_setopt(curl,CURLOPT_PROXY,proxy); /* If it's a GET or a SEARCH, the next thing to come in is the keyids. If it's a SEND, then there are no keyids. */ if(opt->action==KS_SEND) while(fgets(line,MAX_LINE,input)!=NULL && line[0]!='\n'); else if(opt->action==KS_GET || opt->action==KS_GETNAME || opt->action==KS_SEARCH) { for(;;) { struct keylist *work; if(fgets(line,MAX_LINE,input)==NULL) break; else { if(line[0]=='\n' || line[0]=='\0') break; work=xtrymalloc(sizeof(struct keylist)); if(work==NULL) { fprintf(console,"gpgkeys: out of memory while " "building key list\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } strcpy(work->str,line); /* Trim the trailing \n */ work->str[strlen(line)-1]='\0'; work->next=NULL; /* Always attach at the end to keep the list in proper order for searching */ if(keylist==NULL) keylist=work; else keyptr->next=work; keyptr=work; } } } else { fprintf(console,"gpgkeys: no keyserver command specified\n"); goto fail; } /* Send the response */ fprintf(output,"VERSION %d\n",KEYSERVER_PROTO_VERSION); fprintf(output,"PROGRAM %s %s\n\n",VERSION,curl_version()); if(opt->verbose>1) { fprintf(console,"Host:\t\t%s\n",opt->host); if(opt->port) fprintf(console,"Port:\t\t%s\n",opt->port); if(strcmp(opt->path,"/")!=0) fprintf(console,"Path:\t\t%s\n",opt->path); fprintf(console,"Command:\t%s\n",ks_action_to_string(opt->action)); } if(opt->action==KS_GET) { keyptr=keylist; while(keyptr!=NULL) { set_timeout(opt->timeout); if(get_key(keyptr->str)!=KEYSERVER_OK) failed++; keyptr=keyptr->next; } } else if(opt->action==KS_GETNAME) { keyptr=keylist; while(keyptr!=NULL) { set_timeout(opt->timeout); if(get_name(keyptr->str)!=KEYSERVER_OK) failed++; keyptr=keyptr->next; } } else if(opt->action==KS_SEND) { int eof=0; do { set_timeout(opt->timeout); if(send_key(&eof)!=KEYSERVER_OK) failed++; } while(!eof); } else if(opt->action==KS_SEARCH) { char *searchkey=NULL; int len=0; set_timeout(opt->timeout); /* To search, we stick a space in between each key to search for. */ keyptr=keylist; while(keyptr!=NULL) { len+=strlen(keyptr->str)+1; keyptr=keyptr->next; } searchkey=xtrymalloc(len+1); if(searchkey==NULL) { ret=KEYSERVER_NO_MEMORY; fail_all(keylist,KEYSERVER_NO_MEMORY); goto fail; } searchkey[0]='\0'; keyptr=keylist; while(keyptr!=NULL) { strcat(searchkey,keyptr->str); strcat(searchkey," "); keyptr=keyptr->next; } /* Nail that last space */ if(*searchkey) searchkey[strlen(searchkey)-1]='\0'; if(search_key(searchkey)!=KEYSERVER_OK) failed++; free(searchkey); } else abort(); if(!failed) ret=KEYSERVER_OK; fail: while(keylist!=NULL) { struct keylist *current=keylist; keylist=keylist->next; free(current); } if(input!=stdin) fclose(input); if(output!=stdout) fclose(output); free_ks_options(opt); curl_slist_free_all(headers); curl_slist_free_all(resolve); if(curl) curl_easy_cleanup(curl); free(proxy); return ret; } gnupg-1.4.20/keyserver/ksmalloc.c0000644000175000017500000000143112635262326013635 00000000000000/* ksmalloc.c - Walloc wrapper * Copyright (C) 2009 Free Software Foundation, Inc. * * The origin of this code is GnuPG. * * This file is free software; as a special exception the author gives * unlimited permission to copy and/or distribute it, with or without * modifications, as long as this notice is preserved. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include /* A wrapper around malloc because libcompat requires it. */ void * xtrymalloc (size_t n) { return malloc (n); } /* A wrapper around free becuase we are used to it. */ void xfree (void *p) { if (p) free (p); } gnupg-1.4.20/keyserver/Makefile.am0000644000175000017500000000474612635262326013734 00000000000000# Copyright (C) 2001, 2002, 2004, 2005, 2006, # 2007, 2009 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 3 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, see . ## Process this file with automake to produce Makefile.in AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/intl EXTRA_PROGRAMS = gpgkeys_ldap gpgkeys_hkp gpgkeys_finger gpgkeys_curl EXTRA_SCRIPTS = gpgkeys_mailto gpglibexecdir = $(libexecdir)/@PACKAGE@ gpglibexec_PROGRAMS = @GPGKEYS_LDAP@ @GPGKEYS_HKP@ @GPGKEYS_FINGER@ @GPGKEYS_CURL@ gpglibexec_SCRIPTS = @GPGKEYS_MAILTO@ noinst_SCRIPTS = gpgkeys_test gpgkeys_ldap_SOURCES = gpgkeys_ldap.c ksutil.c ksutil.h ksmalloc.c gpgkeys_hkp_SOURCES = gpgkeys_hkp.c ksutil.c ksutil.h gpgkeys_finger_SOURCES = gpgkeys_finger.c ksutil.c ksutil.h gpgkeys_curl_SOURCES = gpgkeys_curl.c ksutil.c ksutil.h other_libs = $(LIBICONV) $(LIBINTL) $(CAPLIBS) gpgkeys_ldap_CPPFLAGS = $(AM_CPPFLAGS) $(LDAP_CPPFLAGS) gpgkeys_ldap_LDADD = ../util/libcompat.a @LDAPLIBS@ @NETLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ gpgkeys_finger_LDADD = ../util/libutil.a @NETLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ if FAKE_CURL gpgkeys_curl_SOURCES += curl-shim.c curl-shim.h gpgkeys_curl_CPPFLAGS = $(AM_CPPFLAGS) gpgkeys_curl_LDADD = ../util/libutil.a @NETLIBS@ @DNSLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ gpgkeys_hkp_SOURCES += curl-shim.c curl-shim.h gpgkeys_hkp_CPPFLAGS = $(AM_CPPFLAGS) gpgkeys_hkp_LDADD = ../util/libutil.a @NETLIBS@ @DNSLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ gpgkeys_finger_CPPFLAGS = $(AM_CPPFLAGS) else gpgkeys_curl_SOURCES += ksmalloc.c gpgkeys_curl_CPPFLAGS = $(AM_CPPFLAGS) $(LIBCURL_CPPFLAGS) gpgkeys_curl_LDADD = ../util/libcompat.a @LIBCURL@ @GETOPT@ gpgkeys_hkp_SOURCES += ksmalloc.c gpgkeys_hkp_CPPFLAGS = $(AM_CPPFLAGS) $(LIBCURL_CPPFLAGS) gpgkeys_hkp_LDADD = ../util/libcompat.a @DNSLIBS@ @LIBCURL@ @GETOPT@ gpgkeys_finger_CPPFLAGS = $(AM_CPPFLAGS) $(LIBCURL_CPPFLAGS) gpgkeys_ldap_CPPFLAGS += $(LIBCURL_CPPFLAGS) endif gnupg-1.4.20/keyserver/Makefile.in0000644000175000017500000015745512635457153013757 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2001, 2002, 2004, 2005, 2006, # 2007, 2009 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 3 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, see . VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ EXTRA_PROGRAMS = gpgkeys_ldap$(EXEEXT) gpgkeys_hkp$(EXEEXT) \ gpgkeys_finger$(EXEEXT) gpgkeys_curl$(EXEEXT) @FAKE_CURL_TRUE@am__append_1 = curl-shim.c curl-shim.h @FAKE_CURL_TRUE@am__append_2 = curl-shim.c curl-shim.h @FAKE_CURL_FALSE@am__append_3 = ksmalloc.c @FAKE_CURL_FALSE@am__append_4 = ksmalloc.c @FAKE_CURL_FALSE@am__append_5 = $(LIBCURL_CPPFLAGS) subdir = keyserver DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs \ $(srcdir)/gpgkeys_mailto.in $(srcdir)/gpgkeys_test.in \ $(top_srcdir)/scripts/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = gpgkeys_mailto gpgkeys_test CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(gpglibexecdir)" \ "$(DESTDIR)$(gpglibexecdir)" PROGRAMS = $(gpglibexec_PROGRAMS) am__gpgkeys_curl_SOURCES_DIST = gpgkeys_curl.c ksutil.c ksutil.h \ curl-shim.c curl-shim.h ksmalloc.c @FAKE_CURL_TRUE@am__objects_1 = gpgkeys_curl-curl-shim.$(OBJEXT) @FAKE_CURL_FALSE@am__objects_2 = gpgkeys_curl-ksmalloc.$(OBJEXT) am_gpgkeys_curl_OBJECTS = gpgkeys_curl-gpgkeys_curl.$(OBJEXT) \ gpgkeys_curl-ksutil.$(OBJEXT) $(am__objects_1) \ $(am__objects_2) gpgkeys_curl_OBJECTS = $(am_gpgkeys_curl_OBJECTS) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) @FAKE_CURL_FALSE@gpgkeys_curl_DEPENDENCIES = ../util/libcompat.a @FAKE_CURL_TRUE@gpgkeys_curl_DEPENDENCIES = ../util/libutil.a \ @FAKE_CURL_TRUE@ $(am__DEPENDENCIES_2) am_gpgkeys_finger_OBJECTS = gpgkeys_finger-gpgkeys_finger.$(OBJEXT) \ gpgkeys_finger-ksutil.$(OBJEXT) gpgkeys_finger_OBJECTS = $(am_gpgkeys_finger_OBJECTS) gpgkeys_finger_DEPENDENCIES = ../util/libutil.a $(am__DEPENDENCIES_2) am__gpgkeys_hkp_SOURCES_DIST = gpgkeys_hkp.c ksutil.c ksutil.h \ curl-shim.c curl-shim.h ksmalloc.c @FAKE_CURL_TRUE@am__objects_3 = gpgkeys_hkp-curl-shim.$(OBJEXT) @FAKE_CURL_FALSE@am__objects_4 = gpgkeys_hkp-ksmalloc.$(OBJEXT) am_gpgkeys_hkp_OBJECTS = gpgkeys_hkp-gpgkeys_hkp.$(OBJEXT) \ gpgkeys_hkp-ksutil.$(OBJEXT) $(am__objects_3) $(am__objects_4) gpgkeys_hkp_OBJECTS = $(am_gpgkeys_hkp_OBJECTS) @FAKE_CURL_FALSE@gpgkeys_hkp_DEPENDENCIES = ../util/libcompat.a @FAKE_CURL_TRUE@gpgkeys_hkp_DEPENDENCIES = ../util/libutil.a \ @FAKE_CURL_TRUE@ $(am__DEPENDENCIES_2) am_gpgkeys_ldap_OBJECTS = gpgkeys_ldap-gpgkeys_ldap.$(OBJEXT) \ gpgkeys_ldap-ksutil.$(OBJEXT) gpgkeys_ldap-ksmalloc.$(OBJEXT) gpgkeys_ldap_OBJECTS = $(am_gpgkeys_ldap_OBJECTS) gpgkeys_ldap_DEPENDENCIES = ../util/libcompat.a $(am__DEPENDENCIES_2) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(gpglibexec_SCRIPTS) $(noinst_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp am__depfiles_maybe = depfiles am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(gpgkeys_curl_SOURCES) $(gpgkeys_finger_SOURCES) \ $(gpgkeys_hkp_SOURCES) $(gpgkeys_ldap_SOURCES) DIST_SOURCES = $(am__gpgkeys_curl_SOURCES_DIST) \ $(gpgkeys_finger_SOURCES) $(am__gpgkeys_hkp_SOURCES_DIST) \ $(gpgkeys_ldap_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/intl EXTRA_SCRIPTS = gpgkeys_mailto gpglibexecdir = $(libexecdir)/@PACKAGE@ gpglibexec_PROGRAMS = @GPGKEYS_LDAP@ @GPGKEYS_HKP@ @GPGKEYS_FINGER@ @GPGKEYS_CURL@ gpglibexec_SCRIPTS = @GPGKEYS_MAILTO@ noinst_SCRIPTS = gpgkeys_test gpgkeys_ldap_SOURCES = gpgkeys_ldap.c ksutil.c ksutil.h ksmalloc.c gpgkeys_hkp_SOURCES = gpgkeys_hkp.c ksutil.c ksutil.h $(am__append_2) \ $(am__append_4) gpgkeys_finger_SOURCES = gpgkeys_finger.c ksutil.c ksutil.h gpgkeys_curl_SOURCES = gpgkeys_curl.c ksutil.c ksutil.h \ $(am__append_1) $(am__append_3) other_libs = $(LIBICONV) $(LIBINTL) $(CAPLIBS) gpgkeys_ldap_CPPFLAGS = $(AM_CPPFLAGS) $(LDAP_CPPFLAGS) \ $(am__append_5) gpgkeys_ldap_LDADD = ../util/libcompat.a @LDAPLIBS@ @NETLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ gpgkeys_finger_LDADD = ../util/libutil.a @NETLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ @FAKE_CURL_FALSE@gpgkeys_curl_CPPFLAGS = $(AM_CPPFLAGS) $(LIBCURL_CPPFLAGS) @FAKE_CURL_TRUE@gpgkeys_curl_CPPFLAGS = $(AM_CPPFLAGS) @FAKE_CURL_FALSE@gpgkeys_curl_LDADD = ../util/libcompat.a @LIBCURL@ @GETOPT@ @FAKE_CURL_TRUE@gpgkeys_curl_LDADD = ../util/libutil.a @NETLIBS@ @DNSLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ @FAKE_CURL_FALSE@gpgkeys_hkp_CPPFLAGS = $(AM_CPPFLAGS) $(LIBCURL_CPPFLAGS) @FAKE_CURL_TRUE@gpgkeys_hkp_CPPFLAGS = $(AM_CPPFLAGS) @FAKE_CURL_FALSE@gpgkeys_hkp_LDADD = ../util/libcompat.a @DNSLIBS@ @LIBCURL@ @GETOPT@ @FAKE_CURL_TRUE@gpgkeys_hkp_LDADD = ../util/libutil.a @NETLIBS@ @DNSLIBS@ $(other_libs) @GETOPT@ @W32LIBS@ @FAKE_CURL_FALSE@gpgkeys_finger_CPPFLAGS = $(AM_CPPFLAGS) $(LIBCURL_CPPFLAGS) @FAKE_CURL_TRUE@gpgkeys_finger_CPPFLAGS = $(AM_CPPFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu keyserver/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu keyserver/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): gpgkeys_mailto: $(top_builddir)/config.status $(srcdir)/gpgkeys_mailto.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ gpgkeys_test: $(top_builddir)/config.status $(srcdir)/gpgkeys_test.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-gpglibexecPROGRAMS: $(gpglibexec_PROGRAMS) @$(NORMAL_INSTALL) @list='$(gpglibexec_PROGRAMS)'; test -n "$(gpglibexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gpglibexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gpglibexecdir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(gpglibexecdir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(gpglibexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-gpglibexecPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(gpglibexec_PROGRAMS)'; test -n "$(gpglibexecdir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(gpglibexecdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(gpglibexecdir)" && rm -f $$files clean-gpglibexecPROGRAMS: -test -z "$(gpglibexec_PROGRAMS)" || rm -f $(gpglibexec_PROGRAMS) installcheck-gpglibexecPROGRAMS: $(gpglibexec_PROGRAMS) bad=0; pid=$$$$; list="$(gpglibexec_PROGRAMS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | \ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(gpglibexecdir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad gpgkeys_curl$(EXEEXT): $(gpgkeys_curl_OBJECTS) $(gpgkeys_curl_DEPENDENCIES) $(EXTRA_gpgkeys_curl_DEPENDENCIES) @rm -f gpgkeys_curl$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gpgkeys_curl_OBJECTS) $(gpgkeys_curl_LDADD) $(LIBS) gpgkeys_finger$(EXEEXT): $(gpgkeys_finger_OBJECTS) $(gpgkeys_finger_DEPENDENCIES) $(EXTRA_gpgkeys_finger_DEPENDENCIES) @rm -f gpgkeys_finger$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gpgkeys_finger_OBJECTS) $(gpgkeys_finger_LDADD) $(LIBS) gpgkeys_hkp$(EXEEXT): $(gpgkeys_hkp_OBJECTS) $(gpgkeys_hkp_DEPENDENCIES) $(EXTRA_gpgkeys_hkp_DEPENDENCIES) @rm -f gpgkeys_hkp$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gpgkeys_hkp_OBJECTS) $(gpgkeys_hkp_LDADD) $(LIBS) gpgkeys_ldap$(EXEEXT): $(gpgkeys_ldap_OBJECTS) $(gpgkeys_ldap_DEPENDENCIES) $(EXTRA_gpgkeys_ldap_DEPENDENCIES) @rm -f gpgkeys_ldap$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gpgkeys_ldap_OBJECTS) $(gpgkeys_ldap_LDADD) $(LIBS) install-gpglibexecSCRIPTS: $(gpglibexec_SCRIPTS) @$(NORMAL_INSTALL) @list='$(gpglibexec_SCRIPTS)'; test -n "$(gpglibexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gpglibexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gpglibexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(gpglibexecdir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(gpglibexecdir)$$dir" || exit $$?; \ } \ ; done uninstall-gpglibexecSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(gpglibexec_SCRIPTS)'; test -n "$(gpglibexecdir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(gpglibexecdir)'; $(am__uninstall_files_from_dir) installcheck-gpglibexecSCRIPTS: $(gpglibexec_SCRIPTS) bad=0; pid=$$$$; list="$(gpglibexec_SCRIPTS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(gpglibexecdir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_curl-curl-shim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_curl-gpgkeys_curl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_curl-ksmalloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_curl-ksutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_finger-gpgkeys_finger.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_finger-ksutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_hkp-curl-shim.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_hkp-gpgkeys_hkp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_hkp-ksmalloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_hkp-ksutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_ldap-gpgkeys_ldap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_ldap-ksmalloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgkeys_ldap-ksutil.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` gpgkeys_curl-gpgkeys_curl.o: gpgkeys_curl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_curl-gpgkeys_curl.o -MD -MP -MF $(DEPDIR)/gpgkeys_curl-gpgkeys_curl.Tpo -c -o gpgkeys_curl-gpgkeys_curl.o `test -f 'gpgkeys_curl.c' || echo '$(srcdir)/'`gpgkeys_curl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_curl-gpgkeys_curl.Tpo $(DEPDIR)/gpgkeys_curl-gpgkeys_curl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpgkeys_curl.c' object='gpgkeys_curl-gpgkeys_curl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_curl-gpgkeys_curl.o `test -f 'gpgkeys_curl.c' || echo '$(srcdir)/'`gpgkeys_curl.c gpgkeys_curl-gpgkeys_curl.obj: gpgkeys_curl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_curl-gpgkeys_curl.obj -MD -MP -MF $(DEPDIR)/gpgkeys_curl-gpgkeys_curl.Tpo -c -o gpgkeys_curl-gpgkeys_curl.obj `if test -f 'gpgkeys_curl.c'; then $(CYGPATH_W) 'gpgkeys_curl.c'; else $(CYGPATH_W) '$(srcdir)/gpgkeys_curl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_curl-gpgkeys_curl.Tpo $(DEPDIR)/gpgkeys_curl-gpgkeys_curl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpgkeys_curl.c' object='gpgkeys_curl-gpgkeys_curl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_curl-gpgkeys_curl.obj `if test -f 'gpgkeys_curl.c'; then $(CYGPATH_W) 'gpgkeys_curl.c'; else $(CYGPATH_W) '$(srcdir)/gpgkeys_curl.c'; fi` gpgkeys_curl-ksutil.o: ksutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_curl-ksutil.o -MD -MP -MF $(DEPDIR)/gpgkeys_curl-ksutil.Tpo -c -o gpgkeys_curl-ksutil.o `test -f 'ksutil.c' || echo '$(srcdir)/'`ksutil.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_curl-ksutil.Tpo $(DEPDIR)/gpgkeys_curl-ksutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksutil.c' object='gpgkeys_curl-ksutil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_curl-ksutil.o `test -f 'ksutil.c' || echo '$(srcdir)/'`ksutil.c gpgkeys_curl-ksutil.obj: ksutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_curl-ksutil.obj -MD -MP -MF $(DEPDIR)/gpgkeys_curl-ksutil.Tpo -c -o gpgkeys_curl-ksutil.obj `if test -f 'ksutil.c'; then $(CYGPATH_W) 'ksutil.c'; else $(CYGPATH_W) '$(srcdir)/ksutil.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_curl-ksutil.Tpo $(DEPDIR)/gpgkeys_curl-ksutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksutil.c' object='gpgkeys_curl-ksutil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_curl-ksutil.obj `if test -f 'ksutil.c'; then $(CYGPATH_W) 'ksutil.c'; else $(CYGPATH_W) '$(srcdir)/ksutil.c'; fi` gpgkeys_curl-curl-shim.o: curl-shim.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_curl-curl-shim.o -MD -MP -MF $(DEPDIR)/gpgkeys_curl-curl-shim.Tpo -c -o gpgkeys_curl-curl-shim.o `test -f 'curl-shim.c' || echo '$(srcdir)/'`curl-shim.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_curl-curl-shim.Tpo $(DEPDIR)/gpgkeys_curl-curl-shim.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl-shim.c' object='gpgkeys_curl-curl-shim.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_curl-curl-shim.o `test -f 'curl-shim.c' || echo '$(srcdir)/'`curl-shim.c gpgkeys_curl-curl-shim.obj: curl-shim.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_curl-curl-shim.obj -MD -MP -MF $(DEPDIR)/gpgkeys_curl-curl-shim.Tpo -c -o gpgkeys_curl-curl-shim.obj `if test -f 'curl-shim.c'; then $(CYGPATH_W) 'curl-shim.c'; else $(CYGPATH_W) '$(srcdir)/curl-shim.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_curl-curl-shim.Tpo $(DEPDIR)/gpgkeys_curl-curl-shim.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl-shim.c' object='gpgkeys_curl-curl-shim.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_curl-curl-shim.obj `if test -f 'curl-shim.c'; then $(CYGPATH_W) 'curl-shim.c'; else $(CYGPATH_W) '$(srcdir)/curl-shim.c'; fi` gpgkeys_curl-ksmalloc.o: ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_curl-ksmalloc.o -MD -MP -MF $(DEPDIR)/gpgkeys_curl-ksmalloc.Tpo -c -o gpgkeys_curl-ksmalloc.o `test -f 'ksmalloc.c' || echo '$(srcdir)/'`ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_curl-ksmalloc.Tpo $(DEPDIR)/gpgkeys_curl-ksmalloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksmalloc.c' object='gpgkeys_curl-ksmalloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_curl-ksmalloc.o `test -f 'ksmalloc.c' || echo '$(srcdir)/'`ksmalloc.c gpgkeys_curl-ksmalloc.obj: ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_curl-ksmalloc.obj -MD -MP -MF $(DEPDIR)/gpgkeys_curl-ksmalloc.Tpo -c -o gpgkeys_curl-ksmalloc.obj `if test -f 'ksmalloc.c'; then $(CYGPATH_W) 'ksmalloc.c'; else $(CYGPATH_W) '$(srcdir)/ksmalloc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_curl-ksmalloc.Tpo $(DEPDIR)/gpgkeys_curl-ksmalloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksmalloc.c' object='gpgkeys_curl-ksmalloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_curl_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_curl-ksmalloc.obj `if test -f 'ksmalloc.c'; then $(CYGPATH_W) 'ksmalloc.c'; else $(CYGPATH_W) '$(srcdir)/ksmalloc.c'; fi` gpgkeys_finger-gpgkeys_finger.o: gpgkeys_finger.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_finger_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_finger-gpgkeys_finger.o -MD -MP -MF $(DEPDIR)/gpgkeys_finger-gpgkeys_finger.Tpo -c -o gpgkeys_finger-gpgkeys_finger.o `test -f 'gpgkeys_finger.c' || echo '$(srcdir)/'`gpgkeys_finger.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_finger-gpgkeys_finger.Tpo $(DEPDIR)/gpgkeys_finger-gpgkeys_finger.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpgkeys_finger.c' object='gpgkeys_finger-gpgkeys_finger.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_finger_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_finger-gpgkeys_finger.o `test -f 'gpgkeys_finger.c' || echo '$(srcdir)/'`gpgkeys_finger.c gpgkeys_finger-gpgkeys_finger.obj: gpgkeys_finger.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_finger_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_finger-gpgkeys_finger.obj -MD -MP -MF $(DEPDIR)/gpgkeys_finger-gpgkeys_finger.Tpo -c -o gpgkeys_finger-gpgkeys_finger.obj `if test -f 'gpgkeys_finger.c'; then $(CYGPATH_W) 'gpgkeys_finger.c'; else $(CYGPATH_W) '$(srcdir)/gpgkeys_finger.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_finger-gpgkeys_finger.Tpo $(DEPDIR)/gpgkeys_finger-gpgkeys_finger.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpgkeys_finger.c' object='gpgkeys_finger-gpgkeys_finger.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_finger_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_finger-gpgkeys_finger.obj `if test -f 'gpgkeys_finger.c'; then $(CYGPATH_W) 'gpgkeys_finger.c'; else $(CYGPATH_W) '$(srcdir)/gpgkeys_finger.c'; fi` gpgkeys_finger-ksutil.o: ksutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_finger_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_finger-ksutil.o -MD -MP -MF $(DEPDIR)/gpgkeys_finger-ksutil.Tpo -c -o gpgkeys_finger-ksutil.o `test -f 'ksutil.c' || echo '$(srcdir)/'`ksutil.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_finger-ksutil.Tpo $(DEPDIR)/gpgkeys_finger-ksutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksutil.c' object='gpgkeys_finger-ksutil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_finger_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_finger-ksutil.o `test -f 'ksutil.c' || echo '$(srcdir)/'`ksutil.c gpgkeys_finger-ksutil.obj: ksutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_finger_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_finger-ksutil.obj -MD -MP -MF $(DEPDIR)/gpgkeys_finger-ksutil.Tpo -c -o gpgkeys_finger-ksutil.obj `if test -f 'ksutil.c'; then $(CYGPATH_W) 'ksutil.c'; else $(CYGPATH_W) '$(srcdir)/ksutil.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_finger-ksutil.Tpo $(DEPDIR)/gpgkeys_finger-ksutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksutil.c' object='gpgkeys_finger-ksutil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_finger_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_finger-ksutil.obj `if test -f 'ksutil.c'; then $(CYGPATH_W) 'ksutil.c'; else $(CYGPATH_W) '$(srcdir)/ksutil.c'; fi` gpgkeys_hkp-gpgkeys_hkp.o: gpgkeys_hkp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_hkp-gpgkeys_hkp.o -MD -MP -MF $(DEPDIR)/gpgkeys_hkp-gpgkeys_hkp.Tpo -c -o gpgkeys_hkp-gpgkeys_hkp.o `test -f 'gpgkeys_hkp.c' || echo '$(srcdir)/'`gpgkeys_hkp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_hkp-gpgkeys_hkp.Tpo $(DEPDIR)/gpgkeys_hkp-gpgkeys_hkp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpgkeys_hkp.c' object='gpgkeys_hkp-gpgkeys_hkp.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_hkp-gpgkeys_hkp.o `test -f 'gpgkeys_hkp.c' || echo '$(srcdir)/'`gpgkeys_hkp.c gpgkeys_hkp-gpgkeys_hkp.obj: gpgkeys_hkp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_hkp-gpgkeys_hkp.obj -MD -MP -MF $(DEPDIR)/gpgkeys_hkp-gpgkeys_hkp.Tpo -c -o gpgkeys_hkp-gpgkeys_hkp.obj `if test -f 'gpgkeys_hkp.c'; then $(CYGPATH_W) 'gpgkeys_hkp.c'; else $(CYGPATH_W) '$(srcdir)/gpgkeys_hkp.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_hkp-gpgkeys_hkp.Tpo $(DEPDIR)/gpgkeys_hkp-gpgkeys_hkp.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpgkeys_hkp.c' object='gpgkeys_hkp-gpgkeys_hkp.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_hkp-gpgkeys_hkp.obj `if test -f 'gpgkeys_hkp.c'; then $(CYGPATH_W) 'gpgkeys_hkp.c'; else $(CYGPATH_W) '$(srcdir)/gpgkeys_hkp.c'; fi` gpgkeys_hkp-ksutil.o: ksutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_hkp-ksutil.o -MD -MP -MF $(DEPDIR)/gpgkeys_hkp-ksutil.Tpo -c -o gpgkeys_hkp-ksutil.o `test -f 'ksutil.c' || echo '$(srcdir)/'`ksutil.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_hkp-ksutil.Tpo $(DEPDIR)/gpgkeys_hkp-ksutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksutil.c' object='gpgkeys_hkp-ksutil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_hkp-ksutil.o `test -f 'ksutil.c' || echo '$(srcdir)/'`ksutil.c gpgkeys_hkp-ksutil.obj: ksutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_hkp-ksutil.obj -MD -MP -MF $(DEPDIR)/gpgkeys_hkp-ksutil.Tpo -c -o gpgkeys_hkp-ksutil.obj `if test -f 'ksutil.c'; then $(CYGPATH_W) 'ksutil.c'; else $(CYGPATH_W) '$(srcdir)/ksutil.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_hkp-ksutil.Tpo $(DEPDIR)/gpgkeys_hkp-ksutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksutil.c' object='gpgkeys_hkp-ksutil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_hkp-ksutil.obj `if test -f 'ksutil.c'; then $(CYGPATH_W) 'ksutil.c'; else $(CYGPATH_W) '$(srcdir)/ksutil.c'; fi` gpgkeys_hkp-curl-shim.o: curl-shim.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_hkp-curl-shim.o -MD -MP -MF $(DEPDIR)/gpgkeys_hkp-curl-shim.Tpo -c -o gpgkeys_hkp-curl-shim.o `test -f 'curl-shim.c' || echo '$(srcdir)/'`curl-shim.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_hkp-curl-shim.Tpo $(DEPDIR)/gpgkeys_hkp-curl-shim.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl-shim.c' object='gpgkeys_hkp-curl-shim.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_hkp-curl-shim.o `test -f 'curl-shim.c' || echo '$(srcdir)/'`curl-shim.c gpgkeys_hkp-curl-shim.obj: curl-shim.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_hkp-curl-shim.obj -MD -MP -MF $(DEPDIR)/gpgkeys_hkp-curl-shim.Tpo -c -o gpgkeys_hkp-curl-shim.obj `if test -f 'curl-shim.c'; then $(CYGPATH_W) 'curl-shim.c'; else $(CYGPATH_W) '$(srcdir)/curl-shim.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_hkp-curl-shim.Tpo $(DEPDIR)/gpgkeys_hkp-curl-shim.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='curl-shim.c' object='gpgkeys_hkp-curl-shim.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_hkp-curl-shim.obj `if test -f 'curl-shim.c'; then $(CYGPATH_W) 'curl-shim.c'; else $(CYGPATH_W) '$(srcdir)/curl-shim.c'; fi` gpgkeys_hkp-ksmalloc.o: ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_hkp-ksmalloc.o -MD -MP -MF $(DEPDIR)/gpgkeys_hkp-ksmalloc.Tpo -c -o gpgkeys_hkp-ksmalloc.o `test -f 'ksmalloc.c' || echo '$(srcdir)/'`ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_hkp-ksmalloc.Tpo $(DEPDIR)/gpgkeys_hkp-ksmalloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksmalloc.c' object='gpgkeys_hkp-ksmalloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_hkp-ksmalloc.o `test -f 'ksmalloc.c' || echo '$(srcdir)/'`ksmalloc.c gpgkeys_hkp-ksmalloc.obj: ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_hkp-ksmalloc.obj -MD -MP -MF $(DEPDIR)/gpgkeys_hkp-ksmalloc.Tpo -c -o gpgkeys_hkp-ksmalloc.obj `if test -f 'ksmalloc.c'; then $(CYGPATH_W) 'ksmalloc.c'; else $(CYGPATH_W) '$(srcdir)/ksmalloc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_hkp-ksmalloc.Tpo $(DEPDIR)/gpgkeys_hkp-ksmalloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksmalloc.c' object='gpgkeys_hkp-ksmalloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_hkp_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_hkp-ksmalloc.obj `if test -f 'ksmalloc.c'; then $(CYGPATH_W) 'ksmalloc.c'; else $(CYGPATH_W) '$(srcdir)/ksmalloc.c'; fi` gpgkeys_ldap-gpgkeys_ldap.o: gpgkeys_ldap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_ldap-gpgkeys_ldap.o -MD -MP -MF $(DEPDIR)/gpgkeys_ldap-gpgkeys_ldap.Tpo -c -o gpgkeys_ldap-gpgkeys_ldap.o `test -f 'gpgkeys_ldap.c' || echo '$(srcdir)/'`gpgkeys_ldap.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_ldap-gpgkeys_ldap.Tpo $(DEPDIR)/gpgkeys_ldap-gpgkeys_ldap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpgkeys_ldap.c' object='gpgkeys_ldap-gpgkeys_ldap.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_ldap-gpgkeys_ldap.o `test -f 'gpgkeys_ldap.c' || echo '$(srcdir)/'`gpgkeys_ldap.c gpgkeys_ldap-gpgkeys_ldap.obj: gpgkeys_ldap.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_ldap-gpgkeys_ldap.obj -MD -MP -MF $(DEPDIR)/gpgkeys_ldap-gpgkeys_ldap.Tpo -c -o gpgkeys_ldap-gpgkeys_ldap.obj `if test -f 'gpgkeys_ldap.c'; then $(CYGPATH_W) 'gpgkeys_ldap.c'; else $(CYGPATH_W) '$(srcdir)/gpgkeys_ldap.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_ldap-gpgkeys_ldap.Tpo $(DEPDIR)/gpgkeys_ldap-gpgkeys_ldap.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gpgkeys_ldap.c' object='gpgkeys_ldap-gpgkeys_ldap.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_ldap-gpgkeys_ldap.obj `if test -f 'gpgkeys_ldap.c'; then $(CYGPATH_W) 'gpgkeys_ldap.c'; else $(CYGPATH_W) '$(srcdir)/gpgkeys_ldap.c'; fi` gpgkeys_ldap-ksutil.o: ksutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_ldap-ksutil.o -MD -MP -MF $(DEPDIR)/gpgkeys_ldap-ksutil.Tpo -c -o gpgkeys_ldap-ksutil.o `test -f 'ksutil.c' || echo '$(srcdir)/'`ksutil.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_ldap-ksutil.Tpo $(DEPDIR)/gpgkeys_ldap-ksutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksutil.c' object='gpgkeys_ldap-ksutil.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_ldap-ksutil.o `test -f 'ksutil.c' || echo '$(srcdir)/'`ksutil.c gpgkeys_ldap-ksutil.obj: ksutil.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_ldap-ksutil.obj -MD -MP -MF $(DEPDIR)/gpgkeys_ldap-ksutil.Tpo -c -o gpgkeys_ldap-ksutil.obj `if test -f 'ksutil.c'; then $(CYGPATH_W) 'ksutil.c'; else $(CYGPATH_W) '$(srcdir)/ksutil.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_ldap-ksutil.Tpo $(DEPDIR)/gpgkeys_ldap-ksutil.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksutil.c' object='gpgkeys_ldap-ksutil.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_ldap-ksutil.obj `if test -f 'ksutil.c'; then $(CYGPATH_W) 'ksutil.c'; else $(CYGPATH_W) '$(srcdir)/ksutil.c'; fi` gpgkeys_ldap-ksmalloc.o: ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_ldap-ksmalloc.o -MD -MP -MF $(DEPDIR)/gpgkeys_ldap-ksmalloc.Tpo -c -o gpgkeys_ldap-ksmalloc.o `test -f 'ksmalloc.c' || echo '$(srcdir)/'`ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_ldap-ksmalloc.Tpo $(DEPDIR)/gpgkeys_ldap-ksmalloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksmalloc.c' object='gpgkeys_ldap-ksmalloc.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_ldap-ksmalloc.o `test -f 'ksmalloc.c' || echo '$(srcdir)/'`ksmalloc.c gpgkeys_ldap-ksmalloc.obj: ksmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT gpgkeys_ldap-ksmalloc.obj -MD -MP -MF $(DEPDIR)/gpgkeys_ldap-ksmalloc.Tpo -c -o gpgkeys_ldap-ksmalloc.obj `if test -f 'ksmalloc.c'; then $(CYGPATH_W) 'ksmalloc.c'; else $(CYGPATH_W) '$(srcdir)/ksmalloc.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/gpgkeys_ldap-ksmalloc.Tpo $(DEPDIR)/gpgkeys_ldap-ksmalloc.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ksmalloc.c' object='gpgkeys_ldap-ksmalloc.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gpgkeys_ldap_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o gpgkeys_ldap-ksmalloc.obj `if test -f 'ksmalloc.c'; then $(CYGPATH_W) 'ksmalloc.c'; else $(CYGPATH_W) '$(srcdir)/ksmalloc.c'; fi` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(gpglibexecdir)" "$(DESTDIR)$(gpglibexecdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-gpglibexecPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-gpglibexecPROGRAMS install-gpglibexecSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: installcheck-gpglibexecPROGRAMS \ installcheck-gpglibexecSCRIPTS maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-gpglibexecPROGRAMS uninstall-gpglibexecSCRIPTS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-gpglibexecPROGRAMS cscopelist-am ctags ctags-am \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am \ install-gpglibexecPROGRAMS install-gpglibexecSCRIPTS \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installcheck-gpglibexecPROGRAMS installcheck-gpglibexecSCRIPTS \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-am uninstall uninstall-am \ uninstall-gpglibexecPROGRAMS uninstall-gpglibexecSCRIPTS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/keyserver/gpgkeys_finger.c0000644000175000017500000002634412635262326015045 00000000000000/* gpgkeys_finger.c - fetch a key via finger * Copyright (C) 2004, 2005 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 3 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, see . */ #include #include #include #include #include #include #ifdef HAVE_GETOPT_H #include #endif #ifdef _WIN32 #include #else #include #include #include #include #include #include #include #include #endif #define INCLUDED_BY_MAIN_MODULE 1 #include "util.h" #include "keyserver.h" #include "ksutil.h" #ifdef _WIN32 #define sock_close(a) closesocket(a) #else #define sock_close(a) close(a) #endif extern char *optarg; extern int optind; static FILE *input,*output,*console; static struct ks_options *opt; #ifdef _WIN32 static void deinit_sockets (void) { WSACleanup(); } static void init_sockets (void) { static int initialized; static WSADATA wsdata; if (initialized) return; if (WSAStartup (0x0101, &wsdata) ) { fprintf (console, "error initializing socket library: ec=%d\n", (int)WSAGetLastError () ); return; } if (wsdata.wVersion < 0x0001) { fprintf (console, "socket library version is %x.%x - but 1.1 needed\n", LOBYTE(wsdata.wVersion), HIBYTE(wsdata.wVersion)); WSACleanup(); return; } atexit (deinit_sockets); initialized = 1; } #endif /*_WIN32*/ /* Connect to SERVER at PORT and return a file descriptor or -1 on error. */ static int connect_server (const char *server, unsigned short port) { int sock = -1; #ifdef _WIN32 struct hostent *hp; struct sockaddr_in addr; unsigned long l; init_sockets (); memset (&addr, 0, sizeof addr); addr.sin_family = AF_INET; addr.sin_port = htons (port); /* Win32 gethostbyname doesn't handle IP addresses internally, so we try inet_addr first on that platform only. */ if ((l = inet_addr (server)) != INADDR_NONE) memcpy (&addr.sin_addr, &l, sizeof l); else if ((hp = gethostbyname (server))) { if (hp->h_addrtype != AF_INET) { fprintf (console, "gpgkeys: unknown address family for `%s'\n", server); return -1; } if (hp->h_length != 4) { fprintf (console, "gpgkeys: illegal address length for `%s'\n", server); return -1; } memcpy (&addr.sin_addr, hp->h_addr, hp->h_length); } else { fprintf (console, "gpgkeys: host `%s' not found: ec=%d\n", server, (int)WSAGetLastError ()); return -1; } sock = socket (AF_INET, SOCK_STREAM, 0); if (sock == INVALID_SOCKET) { fprintf (console, "gpgkeys: error creating socket: ec=%d\n", (int)WSAGetLastError ()); return -1; } if (connect (sock, (struct sockaddr *)&addr, sizeof addr)) { fprintf (console, "gpgkeys: error connecting `%s': ec=%d\n", server, (int)WSAGetLastError ()); sock_close (sock); return -1; } #else struct sockaddr_in addr; struct hostent *host; addr.sin_family = AF_INET; addr.sin_port = htons (port); host = gethostbyname ((char*)server); if (!host) { fprintf (console, "gpgkeys: host `%s' not found: %s\n", server, strerror (errno)); return -1; } addr.sin_addr = *(struct in_addr*)host->h_addr; sock = socket (AF_INET, SOCK_STREAM, 0); if (sock == -1) { fprintf (console, "gpgkeys: error creating socket: %s\n", strerror (errno)); return -1; } if (connect (sock, (struct sockaddr *)&addr, sizeof addr) == -1) { fprintf (console, "gpgkeys: error connecting `%s': %s\n", server, strerror (errno)); close (sock); return -1; } #endif return sock; } static int write_server (int sock, const char *data, size_t length) { int nleft; nleft = length; while (nleft > 0) { int nwritten; #ifdef _WIN32 nwritten = send (sock, data, nleft, 0); if ( nwritten == SOCKET_ERROR ) { fprintf (console, "gpgkeys: write failed: ec=%d\n", (int)WSAGetLastError ()); return -1; } #else nwritten = write (sock, data, nleft); if (nwritten == -1) { if (errno == EINTR) continue; if (errno == EAGAIN) { struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 50000; select(0, NULL, NULL, NULL, &tv); continue; } fprintf (console, "gpgkeys: write failed: %s\n", strerror(errno)); return -1; } #endif nleft -=nwritten; data += nwritten; } return 0; } /* Send the finger REQUEST to the server. Returns 0 and a file descriptor in R_SOCK if the request was sucessful. */ static int send_request (const char *request, int *r_sock) { char *server; char *name; int sock; *r_sock = -1; name = strdup (request); if (!name) { fprintf(console,"gpgkeys: out of memory\n"); return KEYSERVER_NO_MEMORY; } server = strchr (name, '@'); if (!server) { fprintf (console, "gpgkeys: no name included in request\n"); free (name); return KEYSERVER_GENERAL_ERROR; } *server++ = 0; sock = connect_server (server, 79); if (sock == -1) { free (name); return KEYSERVER_UNREACHABLE; } if (write_server (sock, name, strlen (name)) || write_server (sock, "\r\n", 2)) { free (name); sock_close (sock); return KEYSERVER_GENERAL_ERROR; } free (name); *r_sock = sock; return 0; } static int get_key (char *getkey) { int rc; int sock; IOBUF fp_read; unsigned int maxlen, buflen, gotit=0; byte *line = NULL; if (strncmp (getkey,"0x",2)==0) getkey+=2; /* Frankly we don't know what keys the server will return; we indicated the requested key anyway. */ fprintf(output,"KEY 0x%s BEGIN\n",getkey); rc=send_request(opt->opaque,&sock); if(rc) { fprintf(output,"KEY 0x%s FAILED %d\n",getkey, rc); sock_close (sock); return KEYSERVER_OK; } /* Hmmm, we use iobuf here only to cope with Windows socket peculiarities (we can't used fdopen). */ fp_read = iobuf_sockopen (sock , "r"); if (!fp_read) { fprintf(output,"KEY 0x%s FAILED %d\n",getkey, KEYSERVER_INTERNAL_ERROR); sock_close (sock); return KEYSERVER_OK; } while ( iobuf_read_line ( fp_read, &line, &buflen, &maxlen)) { maxlen=1024; if(gotit) { print_nocr (output, (const char*)line); if (!strncmp((char*)line,END,strlen(END))) break; } else if(!strncmp((char*)line,BEGIN,strlen(BEGIN))) { print_nocr(output, (const char*)line); gotit=1; } } if(gotit) fprintf (output,"KEY 0x%s END\n", getkey); else { fprintf(console,"gpgkeys: no key data found for finger:%s\n", opt->opaque); fprintf(output,"KEY 0x%s FAILED %d\n",getkey,KEYSERVER_KEY_NOT_FOUND); } xfree(line); iobuf_close (fp_read); return KEYSERVER_OK; } static void show_help (FILE *fp) { fprintf (fp,"-h, --help\thelp\n"); fprintf (fp,"-V\t\tmachine readable version\n"); fprintf (fp,"--version\thuman readable version\n"); fprintf (fp,"-o\t\toutput to this file\n"); } int main(int argc,char *argv[]) { int arg,ret=KEYSERVER_INTERNAL_ERROR; char line[MAX_LINE]; char *thekey=NULL; console=stderr; /* Kludge to implement standard GNU options. */ if (argc > 1 && !strcmp (argv[1], "--version")) { fputs ("gpgkeys_finger (GnuPG) " VERSION"\n", stdout); return 0; } else if (argc > 1 && !strcmp (argv[1], "--help")) { show_help (stdout); return 0; } while((arg=getopt(argc,argv,"hVo:"))!=-1) switch(arg) { default: case 'h': show_help (console); return KEYSERVER_OK; case 'V': fprintf(stdout,"%d\n%s\n",KEYSERVER_PROTO_VERSION,VERSION); return KEYSERVER_OK; case 'o': output=fopen(optarg,"w"); if(output==NULL) { fprintf(console,"gpgkeys: Cannot open output file `%s': %s\n", optarg,strerror(errno)); return KEYSERVER_INTERNAL_ERROR; } break; } if(argc>optind) { input=fopen(argv[optind],"r"); if(input==NULL) { fprintf(console,"gpgkeys: Cannot open input file `%s': %s\n", argv[optind],strerror(errno)); return KEYSERVER_INTERNAL_ERROR; } } if(input==NULL) input=stdin; if(output==NULL) output=stdout; opt=init_ks_options(); if(!opt) return KEYSERVER_NO_MEMORY; /* Get the command and info block */ while(fgets(line,MAX_LINE,input)!=NULL) { int err; if(line[0]=='\n') break; err=parse_ks_options(line,opt); if(err>0) { ret=err; goto fail; } else if(err==0) continue; } if(opt->host) { fprintf(console,"gpgkeys: finger://relay/user syntax is not" " supported. Use finger:user instead.\n"); ret=KEYSERVER_NOT_SUPPORTED; goto fail; } if(opt->timeout && register_timeout()==-1) { fprintf(console,"gpgkeys: unable to register timeout handler\n"); return KEYSERVER_INTERNAL_ERROR; } /* If it's a GET or a SEARCH, the next thing to come in is the keyids. If it's a SEND, then there are no keyids. */ if(opt->action==KS_GET) { /* Eat the rest of the file */ for(;;) { if(fgets(line,MAX_LINE,input)==NULL) break; else { if(line[0]=='\n' || line[0]=='\0') break; if(!thekey) { thekey=strdup(line); if(!thekey) { fprintf(console,"gpgkeys: out of memory while " "building key list\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } /* Trim the trailing \n */ thekey[strlen(line)-1]='\0'; } } } } else { fprintf(console, "gpgkeys: this keyserver type only supports key retrieval\n"); goto fail; } if(!thekey || !opt->opaque) { fprintf(console,"gpgkeys: invalid keyserver instructions\n"); goto fail; } /* Send the response */ fprintf(output,"VERSION %d\n",KEYSERVER_PROTO_VERSION); fprintf(output,"PROGRAM %s\n\n",VERSION); if(opt->verbose>1) { fprintf(console,"User:\t\t%s\n",opt->opaque); fprintf(console,"Command:\tGET\n"); } set_timeout(opt->timeout); ret=get_key(thekey); fail: free(thekey); if(input!=stdin) fclose(input); if(output!=stdout) fclose(output); free_ks_options(opt); return ret; } gnupg-1.4.20/keyserver/gpgkeys_ldap.c0000644000175000017500000014731112635262326014511 00000000000000/* gpgkeys_ldap.c - talk to a LDAP keyserver * Copyright (C) 2001, 2002, 2004, 2005, 2006, * 2007 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 3 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, see . * * In addition, as a special exception, the Free Software Foundation * gives permission to link the code of the keyserver helper tools: * gpgkeys_ldap, gpgkeys_curl and gpgkeys_hkp with the OpenSSL * project's "OpenSSL" library (or with modified versions of it that * use the same license as the "OpenSSL" library), and distribute the * linked executables. You must obey the GNU General Public License * in all respects for all of the code used other than "OpenSSL". If * you modify this file, you may extend this exception to your version * of the file, but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. */ #include #include #include #include #include #ifdef HAVE_GETOPT_H #include #endif #include #include #include #ifdef _WIN32 #include #include #else #ifdef NEED_LBER_H #include #endif /* For OpenLDAP, to enable the API that we're using. */ #define LDAP_DEPRECATED 1 #include #endif /* For mozldap */ #ifdef HAVE_LDAP_SSL_H #include #endif #include "compat.h" #include "keyserver.h" #include "ksutil.h" #ifdef __riscos__ #include "util.h" #endif #if HAVE_W32_SYSTEM # if !defined(__MINGW64_VERSION_MAJOR) || !defined(__MINGW32_MAJOR_VERSION) /* This is mingw32 with bogus ldap definitions; i.e. Unix style LDAP definitions. */ # define my_ldap_start_tls_s(a,b,c) ldap_start_tls_sA ((a),(b),(c)) # else /* Standard Microsoft or mingw64. */ # define my_ldap_start_tls_s(a,b,c) ldap_start_tls_sA ((a),NULL, NULL,(b),(c)) # endif #else /*!W32*/ # define my_ldap_start_tls_s(a,b,c) ldap_start_tls_s ((a),(b),(c)) #endif /*!W32*/ extern char *optarg; extern int optind; static int real_ldap=0; static char *basekeyspacedn=NULL; static char *pgpkeystr="pgpKey"; static FILE *input=NULL,*output=NULL,*console=NULL; static LDAP *ldap=NULL; static struct ks_options *opt; #ifndef HAVE_TIMEGM time_t timegm(struct tm *tm); #endif static int ldap_err_to_gpg_err(int err) { int ret; switch(err) { case LDAP_ALREADY_EXISTS: ret=KEYSERVER_KEY_EXISTS; break; case LDAP_SERVER_DOWN: ret=KEYSERVER_UNREACHABLE; break; default: ret=KEYSERVER_GENERAL_ERROR; break; } return ret; } static int ldap_to_gpg_err(LDAP *ld) { #if defined(HAVE_LDAP_GET_OPTION) && defined(LDAP_OPT_ERROR_NUMBER) int err; if(ldap_get_option(ld,LDAP_OPT_ERROR_NUMBER,&err)==0) return ldap_err_to_gpg_err(err); else return KEYSERVER_GENERAL_ERROR; #elif defined(HAVE_LDAP_LD_ERRNO) return ldap_err_to_gpg_err(ld->ld_errno); #else /* We should never get here since the LDAP library should always have either ldap_get_option or ld_errno, but just in case... */ return KEYSERVER_GENERAL_ERROR; #endif } static int key_in_keylist(const char *key,struct keylist *list) { struct keylist *keyptr=list; while(keyptr!=NULL) { if(ascii_strcasecmp(key,keyptr->str)==0) return 1; keyptr=keyptr->next; } return 0; } static int add_key_to_keylist(const char *key,struct keylist **list) { struct keylist *keyptr=xtrymalloc(sizeof(struct keylist)); if(keyptr==NULL) { fprintf(console,"gpgkeys: out of memory when deduping " "key list\n"); return KEYSERVER_NO_MEMORY; } strncpy(keyptr->str,key,MAX_LINE); keyptr->str[MAX_LINE-1]='\0'; keyptr->next=*list; *list=keyptr; return 0; } static void free_keylist(struct keylist *list) { while(list!=NULL) { struct keylist *keyptr=list; list=keyptr->next; free(keyptr); } } static time_t ldap2epochtime(const char *timestr) { struct tm pgptime; time_t answer; memset(&pgptime,0,sizeof(pgptime)); /* YYYYMMDDHHmmssZ */ sscanf(timestr,"%4d%2d%2d%2d%2d%2d", &pgptime.tm_year, &pgptime.tm_mon, &pgptime.tm_mday, &pgptime.tm_hour, &pgptime.tm_min, &pgptime.tm_sec); pgptime.tm_year-=1900; pgptime.tm_isdst=-1; pgptime.tm_mon--; /* mktime() takes the timezone into account, so we use timegm() */ answer=timegm(&pgptime); return answer; } /* Caller must free */ static char * epoch2ldaptime(time_t stamp) { struct tm *ldaptime; char buf[16]; ldaptime=gmtime(&stamp); ldaptime->tm_year+=1900; ldaptime->tm_mon++; /* YYYYMMDDHHmmssZ */ sprintf(buf,"%04d%02d%02d%02d%02d%02dZ", ldaptime->tm_year, ldaptime->tm_mon, ldaptime->tm_mday, ldaptime->tm_hour, ldaptime->tm_min, ldaptime->tm_sec); return strdup(buf); } /* Append two onto the end of one. Two is not freed, but its pointers are now part of one. Make sure you don't free them both! */ static int join_two_modlists(LDAPMod ***one,LDAPMod **two) { int i,one_count=0,two_count=0; LDAPMod **grow; for(grow=*one;*grow;grow++) one_count++; for(grow=two;*grow;grow++) two_count++; grow=realloc(*one,sizeof(LDAPMod *)*(one_count+two_count+1)); if(!grow) return 0; for(i=0;imod_type,attr)==0) { char **ptr=(*m)->mod_values; int numvalues=0; /* We have this attribute already, so when the REPLACE happens, the server attributes will be replaced anyway. */ if(!value) return 1; if(ptr) for(ptr=(*m)->mod_values;*ptr;ptr++) { /* Duplicate value */ if(strcmp(*ptr,value)==0) return 1; numvalues++; } ptr=realloc((*m)->mod_values,sizeof(char *)*(numvalues+2)); if(!ptr) return 0; (*m)->mod_values=ptr; ptr[numvalues]=strdup(value); if(!ptr[numvalues]) return 0; ptr[numvalues+1]=NULL; break; } nummods++; } /* We didn't find the attr, so make one and add it to the end */ if(!*m) { LDAPMod **grow; grow=realloc(*modlist,sizeof(LDAPMod *)*(nummods+2)); if(!grow) return 0; *modlist=grow; grow[nummods]=xtrymalloc(sizeof(LDAPMod)); if(!grow[nummods]) return 0; grow[nummods]->mod_op=LDAP_MOD_REPLACE; grow[nummods]->mod_type=attr; if(value) { grow[nummods]->mod_values=xtrymalloc(sizeof(char *)*2); if(!grow[nummods]->mod_values) { grow[nummods]=NULL; return 0; } /* Is this the right thing? Can a UTF8-encoded user ID have embedded nulls? */ grow[nummods]->mod_values[0]=strdup(value); if(!grow[nummods]->mod_values[0]) { free(grow[nummods]->mod_values); grow[nummods]=NULL; return 0; } grow[nummods]->mod_values[1]=NULL; } else grow[nummods]->mod_values=NULL; grow[nummods+1]=NULL; } return 1; } static void build_attrs(LDAPMod ***modlist,char *line) { char *record; int i; /* Remove trailing whitespace */ for(i=strlen(line);i>0;i--) if(ascii_isspace(line[i-1])) line[i-1]='\0'; else break; if((record=strsep(&line,":"))==NULL) return; if (strcmp("pub",record)==0) { char *tok; int disabled=0,revoked=0; /* The long keyid */ if((tok=strsep(&line,":"))==NULL) return; if(strlen(tok)==16) { make_one_attr(modlist,"pgpCertID",tok); make_one_attr(modlist,"pgpKeyID",&tok[8]); } else return; /* The primary pubkey algo */ if((tok=strsep(&line,":"))==NULL) return; switch(atoi(tok)) { case 1: make_one_attr(modlist,"pgpKeyType","RSA"); break; case 17: make_one_attr(modlist,"pgpKeyType","DSS/DH"); break; } /* Size of primary key */ if((tok=strsep(&line,":"))==NULL) return; if(atoi(tok)>0) { char padded[6]; int val=atoi(tok); /* We zero pad this on the left to make PGP happy. */ if(val<99999 && val>0) { sprintf(padded,"%05u",atoi(tok)); make_one_attr(modlist,"pgpKeySize",padded); } } /* pk timestamp */ if((tok=strsep(&line,":"))==NULL) return; if(atoi(tok)>0) { char *stamp=epoch2ldaptime(atoi(tok)); if(stamp) { make_one_attr(modlist,"pgpKeyCreateTime",stamp); free(stamp); } } /* pk expire */ if((tok=strsep(&line,":"))==NULL) return; if(atoi(tok)>0) { char *stamp=epoch2ldaptime(atoi(tok)); if(stamp) { make_one_attr(modlist,"pgpKeyExpireTime",stamp); free(stamp); } } /* flags */ if((tok=strsep(&line,":"))==NULL) return; while(*tok) switch(*tok++) { case 'r': case 'R': revoked=1; break; case 'd': case 'D': disabled=1; break; } /* Note that we always create the pgpDisabled and pgpRevoked attributes, regardless of whether the key is disabled/revoked or not. This is because a very common search is like "(&(pgpUserID=*isabella*)(pgpDisabled=0))" */ make_one_attr(modlist,"pgpDisabled",disabled?"1":"0"); make_one_attr(modlist,"pgpRevoked",revoked?"1":"0"); } else if (strcmp("sub",record)==0) { char *tok; /* The long keyid */ if((tok=strsep(&line,":"))==NULL) return; if(strlen(tok)==16) make_one_attr(modlist,"pgpSubKeyID",tok); else return; /* The subkey algo */ if((tok=strsep(&line,":"))==NULL) return; /* Size of subkey */ if((tok=strsep(&line,":"))==NULL) return; if(atoi(tok)>0) { char padded[6]; int val=atoi(tok); /* We zero pad this on the left to make PGP happy. */ if(val<99999 && val>0) { sprintf(padded,"%05u",atoi(tok)); make_one_attr(modlist,"pgpKeySize",padded); } } /* Ignore the rest of the items for subkeys since the LDAP schema doesn't store them. */ } else if (strcmp("uid",record)==0) { char *userid,*tok; /* The user ID string */ if((tok=strsep(&line,":"))==NULL) return; if(strlen(tok)==0) return; userid=tok; /* By definition, de-%-encoding is always smaller than the original string so we can decode in place. */ i=0; while(*tok) if(tok[0]=='%' && tok[1] && tok[2]) { int c; userid[i] = (c=hextobyte(&tok[1])) == -1 ? '?' : c; i++; tok+=3; } else userid[i++]=*tok++; userid[i]='\0'; /* We don't care about the other info provided in the uid: line since the LDAP schema doesn't need it. */ make_one_attr(modlist,"pgpUserID",userid); } else if(strcmp("sig",record)==0) { char *tok; if((tok=strsep(&line,":"))==NULL) return; if(strlen(tok)==16) make_one_attr(modlist,"pgpSignerID",tok); } } static void free_mod_values(LDAPMod *mod) { char **ptr; if(!mod->mod_values) return; for(ptr=mod->mod_values;*ptr;ptr++) free(*ptr); free(mod->mod_values); } static int send_key(int *eof) { int err,begin=0,end=0,keysize=1,ret=KEYSERVER_INTERNAL_ERROR; char *dn=NULL,line[MAX_LINE],*key=NULL; char keyid[17],state[6]; LDAPMod **modlist,**addlist,**ml; modlist=xtrymalloc(sizeof(LDAPMod *)); if(!modlist) { fprintf(console,"gpgkeys: can't allocate memory for keyserver record\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } *modlist=NULL; addlist=xtrymalloc(sizeof(LDAPMod *)); if(!addlist) { fprintf(console,"gpgkeys: can't allocate memory for keyserver record\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } *addlist=NULL; /* Start by nulling out all attributes. We try and do a modify operation first, so this ensures that we don't leave old attributes lying around. */ make_one_attr(&modlist,"pgpDisabled",NULL); make_one_attr(&modlist,"pgpKeyID",NULL); make_one_attr(&modlist,"pgpKeyType",NULL); make_one_attr(&modlist,"pgpUserID",NULL); make_one_attr(&modlist,"pgpKeyCreateTime",NULL); make_one_attr(&modlist,"pgpSignerID",NULL); make_one_attr(&modlist,"pgpRevoked",NULL); make_one_attr(&modlist,"pgpSubKeyID",NULL); make_one_attr(&modlist,"pgpKeySize",NULL); make_one_attr(&modlist,"pgpKeyExpireTime",NULL); make_one_attr(&modlist,"pgpCertID",NULL); /* Assemble the INFO stuff into LDAP attributes */ while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"INFO%*[ ]%16s%*[ ]%5s\n",keyid,state)==2 && strcmp(state,"BEGIN")==0) { begin=1; break; } if(!begin) { /* i.e. eof before the INFO BEGIN was found. This isn't an error. */ *eof=1; ret=KEYSERVER_OK; goto fail; } if(strlen(keyid)!=16) { *eof=1; ret=KEYSERVER_KEY_INCOMPLETE; goto fail; } dn=xtrymalloc(strlen("pgpCertID=")+16+1+strlen(basekeyspacedn)+1); if(dn==NULL) { fprintf(console,"gpgkeys: can't allocate memory for keyserver record\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } sprintf(dn,"pgpCertID=%s,%s",keyid,basekeyspacedn); key=xtrymalloc(1); if(!key) { fprintf(console,"gpgkeys: unable to allocate memory for key\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } key[0]='\0'; /* Now parse each line until we see the END */ while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"INFO%*[ ]%16s%*[ ]%3s\n",keyid,state)==2 && strcmp(state,"END")==0) { end=1; break; } else build_attrs(&addlist,line); if(!end) { fprintf(console,"gpgkeys: no INFO %s END found\n",keyid); *eof=1; ret=KEYSERVER_KEY_INCOMPLETE; goto fail; } begin=end=0; /* Read and throw away stdin until we see the BEGIN */ while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"KEY%*[ ]%16s%*[ ]%5s\n",keyid,state)==2 && strcmp(state,"BEGIN")==0) { begin=1; break; } if(!begin) { /* i.e. eof before the KEY BEGIN was found. This isn't an error. */ *eof=1; ret=KEYSERVER_OK; goto fail; } /* Now slurp up everything until we see the END */ while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"KEY%*[ ]%16s%*[ ]%3s\n",keyid,state)==2 && strcmp(state,"END")==0) { end=1; break; } else { char *tempkey; keysize+=strlen(line); tempkey=realloc(key,keysize); if(tempkey==NULL) { fprintf(console,"gpgkeys: unable to reallocate for key\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } else key=tempkey; strcat(key,line); } if(!end) { fprintf(console,"gpgkeys: no KEY %s END found\n",keyid); *eof=1; ret=KEYSERVER_KEY_INCOMPLETE; goto fail; } make_one_attr(&addlist,"objectClass","pgpKeyInfo"); make_one_attr(&addlist,"pgpKey",key); /* Now append addlist onto modlist */ if(!join_two_modlists(&modlist,addlist)) { fprintf(console,"gpgkeys: unable to merge LDAP modification lists\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } /* Going on the assumption that modify operations are more frequent than adds, we try a modify first. If it's not there, we just turn around and send an add command for the same key. Otherwise, the modify brings the server copy into compliance with our copy. Note that unlike the LDAP keyserver (and really, any other keyserver) this does NOT merge signatures, but replaces the whole key. This should make some people very happy. */ err=ldap_modify_s(ldap,dn,modlist); if(err==LDAP_NO_SUCH_OBJECT) err=ldap_add_s(ldap,dn,addlist); if(err!=LDAP_SUCCESS) { fprintf(console,"gpgkeys: error adding key %s to keyserver: %s\n", keyid,ldap_err2string(err)); ret=ldap_err_to_gpg_err(err); goto fail; } ret=KEYSERVER_OK; fail: /* Unwind and free the whole modlist structure */ if (modlist) { for(ml=modlist;*ml;ml++) { free_mod_values(*ml); free(*ml); } free(modlist); } free(addlist); free(dn); free(key); if(ret!=0 && begin) fprintf(output,"KEY %s FAILED %d\n",keyid,ret); return ret; } static int send_key_keyserver(int *eof) { int err,begin=0,end=0,keysize=1,ret=KEYSERVER_INTERNAL_ERROR; char *dn=NULL,line[MAX_LINE],*key[2]={NULL,NULL}; char keyid[17],state[6]; LDAPMod mod, *attrs[2]; memset(&mod,0,sizeof(mod)); mod.mod_op=LDAP_MOD_ADD; mod.mod_type=pgpkeystr; mod.mod_values=key; attrs[0]=&mod; attrs[1]=NULL; dn=xtrymalloc(strlen("pgpCertid=virtual,")+strlen(basekeyspacedn)+1); if(dn==NULL) { fprintf(console,"gpgkeys: can't allocate memory for keyserver record\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } strcpy(dn,"pgpCertid=virtual,"); strcat(dn,basekeyspacedn); key[0]=xtrymalloc(1); if(key[0]==NULL) { fprintf(console,"gpgkeys: unable to allocate memory for key\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } key[0][0]='\0'; /* Read and throw away stdin until we see the BEGIN */ while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"KEY%*[ ]%16s%*[ ]%5s\n",keyid,state)==2 && strcmp(state,"BEGIN")==0) { begin=1; break; } if(!begin) { /* i.e. eof before the KEY BEGIN was found. This isn't an error. */ *eof=1; ret=KEYSERVER_OK; goto fail; } /* Now slurp up everything until we see the END */ while(fgets(line,MAX_LINE,input)!=NULL) if(sscanf(line,"KEY%*[ ]%16s%*[ ]%3s\n",keyid,state)==2 && strcmp(state,"END")==0) { end=1; break; } else { keysize+=strlen(line); key[0]=realloc(key[0],keysize); if(key[0]==NULL) { fprintf(console,"gpgkeys: unable to reallocate for key\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } strcat(key[0],line); } if(!end) { fprintf(console,"gpgkeys: no KEY %s END found\n",keyid); *eof=1; ret=KEYSERVER_KEY_INCOMPLETE; goto fail; } err=ldap_add_s(ldap,dn,attrs); if(err!=LDAP_SUCCESS) { fprintf(console,"gpgkeys: error adding key %s to keyserver: %s\n", keyid,ldap_err2string(err)); ret=ldap_err_to_gpg_err(err); goto fail; } ret=KEYSERVER_OK; fail: free(key[0]); free(dn); if(ret!=0 && begin) fprintf(output,"KEY %s FAILED %d\n",keyid,ret); /* Not a fatal error */ if(ret==KEYSERVER_KEY_EXISTS) ret=KEYSERVER_OK; return ret; } static void build_info(const char *certid,LDAPMessage *each) { char **vals; fprintf(output,"INFO %s BEGIN\n",certid); fprintf(output,"pub:%s:",certid); vals=ldap_get_values(ldap,each,"pgpkeytype"); if(vals!=NULL) { if(strcmp(vals[0],"RSA")==0) fprintf(output,"1"); else if(strcmp(vals[0],"DSS/DH")==0) fprintf(output,"17"); ldap_value_free(vals); } fprintf(output,":"); vals=ldap_get_values(ldap,each,"pgpkeysize"); if(vals!=NULL) { if(atoi(vals[0])>0) fprintf(output,"%d",atoi(vals[0])); ldap_value_free(vals); } fprintf(output,":"); vals=ldap_get_values(ldap,each,"pgpkeycreatetime"); if(vals!=NULL) { if(strlen(vals[0])==15) fprintf(output,"%u",(unsigned int)ldap2epochtime(vals[0])); ldap_value_free(vals); } fprintf(output,":"); vals=ldap_get_values(ldap,each,"pgpkeyexpiretime"); if(vals!=NULL) { if(strlen(vals[0])==15) fprintf(output,"%u",(unsigned int)ldap2epochtime(vals[0])); ldap_value_free(vals); } fprintf(output,":"); vals=ldap_get_values(ldap,each,"pgprevoked"); if(vals!=NULL) { if(atoi(vals[0])==1) fprintf(output,"r"); ldap_value_free(vals); } fprintf(output,"\n"); vals=ldap_get_values(ldap,each,"pgpuserid"); if(vals!=NULL) { int i; for(i=0;vals[i];i++) fprintf(output,"uid:%s\n",vals[i]); ldap_value_free(vals); } fprintf(output,"INFO %s END\n",certid); } /* Note that key-not-found is not a fatal error */ static int get_key(char *getkey) { LDAPMessage *res,*each; int ret=KEYSERVER_INTERNAL_ERROR,err,count; struct keylist *dupelist=NULL; char search[62]; /* This ordering is significant - specifically, "pgpcertid" needs to be the second item in the list, since everything after it may be discarded if the user isn't in verbose mode. */ char *attrs[]={"replaceme","pgpcertid","pgpuserid","pgpkeyid","pgprevoked", "pgpdisabled","pgpkeycreatetime","modifytimestamp", "pgpkeysize","pgpkeytype",NULL}; attrs[0]=pgpkeystr; /* Some compilers don't like using variables as array initializers. */ /* Build the search string */ /* GPG can send us a v4 fingerprint, a v3 or v4 long key id, or a v3 or v4 short key id */ if(strncmp(getkey,"0x",2)==0) getkey+=2; if(strlen(getkey)==32) { fprintf(console, "gpgkeys: LDAP keyservers do not support v3 fingerprints\n"); fprintf(output,"KEY 0x%s BEGIN\n",getkey); fprintf(output,"KEY 0x%s FAILED %d\n",getkey,KEYSERVER_NOT_SUPPORTED); return KEYSERVER_NOT_SUPPORTED; } if(strlen(getkey)>16) { char *offset=&getkey[strlen(getkey)-16]; /* fingerprint. Take the last 16 characters and treat it like a long key id */ if(opt->flags.include_subkeys) sprintf(search,"(|(pgpcertid=%.16s)(pgpsubkeyid=%.16s))", offset,offset); else sprintf(search,"(pgpcertid=%.16s)",offset); } else if(strlen(getkey)>8) { /* long key id */ if(opt->flags.include_subkeys) sprintf(search,"(|(pgpcertid=%.16s)(pgpsubkeyid=%.16s))", getkey,getkey); else sprintf(search,"(pgpcertid=%.16s)",getkey); } else { /* short key id */ sprintf(search,"(pgpkeyid=%.8s)",getkey); } if(opt->verbose>2) fprintf(console,"gpgkeys: LDAP fetch for: %s\n",search); if(!opt->verbose) attrs[2]=NULL; /* keep only pgpkey(v2) and pgpcertid */ err=ldap_search_s(ldap,basekeyspacedn, LDAP_SCOPE_SUBTREE,search,attrs,0,&res); if(err!=0) { int errtag=ldap_err_to_gpg_err(err); fprintf(console,"gpgkeys: LDAP search error: %s\n",ldap_err2string(err)); fprintf(output,"KEY 0x%s BEGIN\n",getkey); fprintf(output,"KEY 0x%s FAILED %d\n",getkey,errtag); return errtag; } count=ldap_count_entries(ldap,res); if(count<1) { fprintf(console,"gpgkeys: key %s not found on keyserver\n",getkey); fprintf(output,"KEY 0x%s BEGIN\n",getkey); fprintf(output,"KEY 0x%s FAILED %d\n",getkey,KEYSERVER_KEY_NOT_FOUND); } else { /* There may be more than one unique result for a given keyID, so we should fetch them all (test this by fetching short key id 0xDEADBEEF). */ each=ldap_first_entry(ldap,res); while(each!=NULL) { char **vals,**certid; /* Use the long keyid to remove duplicates. The LDAP server returns the same keyid more than once if there are multiple user IDs on the key. Note that this does NOT mean that a keyid that exists multiple times on the keyserver will not be fetched. It means that each KEY, no matter how many user IDs share its keyid, will be fetched only once. If a keyid that belongs to more than one key is fetched, the server quite properly responds with all matching keys. -ds */ certid=ldap_get_values(ldap,each,"pgpcertid"); if(certid!=NULL) { if(!key_in_keylist(certid[0],dupelist)) { /* it's not a duplicate, so add it */ int rc=add_key_to_keylist(certid[0],&dupelist); if(rc) { ret=rc; goto fail; } build_info(certid[0],each); fprintf(output,"KEY 0x%s BEGIN\n",getkey); vals=ldap_get_values(ldap,each,pgpkeystr); if(vals==NULL) { int errtag=ldap_to_gpg_err(ldap); fprintf(console,"gpgkeys: unable to retrieve key %s " "from keyserver\n",getkey); fprintf(output,"KEY 0x%s FAILED %d\n",getkey,errtag); } else { print_nocr(output,vals[0]); fprintf(output,"\nKEY 0x%s END\n",getkey); ldap_value_free(vals); } } ldap_value_free(certid); } each=ldap_next_entry(ldap,each); } } ret=KEYSERVER_OK; fail: ldap_msgfree(res); free_keylist(dupelist); return ret; } #define LDAP_ESCAPE_CHARS "*()\\" /* Append string to buffer in a LDAP-quoted way */ static void ldap_quote(char *buffer,const char *string) { /* Find the end of buffer */ buffer+=strlen(buffer); for(;*string;string++) { if(strchr(LDAP_ESCAPE_CHARS,*string)) { sprintf(buffer,"\\%02X",*string); buffer+=3; } else *buffer++=*string; } *buffer='\0'; } /* Note that key-not-found is not a fatal error */ static int get_name(char *getkey) { LDAPMessage *res,*each; int ret=KEYSERVER_INTERNAL_ERROR,err,count; /* The maximum size of the search, including the optional stuff and the trailing \0 */ char search[2+12+(MAX_LINE*3)+2+15+14+1+1+20]; /* This ordering is significant - specifically, "pgpcertid" needs to be the second item in the list, since everything after it may be discarded if the user isn't in verbose mode. */ char *attrs[]={"replaceme","pgpcertid","pgpuserid","pgpkeyid","pgprevoked", "pgpdisabled","pgpkeycreatetime","modifytimestamp", "pgpkeysize","pgpkeytype",NULL}; attrs[0]=pgpkeystr; /* Some compilers don't like using variables as array initializers. */ /* Build the search string */ search[0]='\0'; if(!opt->flags.include_disabled || !opt->flags.include_revoked) strcat(search,"(&"); strcat(search,"(pgpUserID=*"); ldap_quote(search,getkey); strcat(search,"*)"); if(!opt->flags.include_disabled) strcat(search,"(pgpDisabled=0)"); if(!opt->flags.include_revoked) strcat(search,"(pgpRevoked=0)"); if(!opt->flags.include_disabled || !opt->flags.include_revoked) strcat(search,")"); if(opt->verbose>2) fprintf(console,"gpgkeys: LDAP fetch for: %s\n",search); if(!opt->verbose) attrs[2]=NULL; /* keep only pgpkey(v2) and pgpcertid */ err=ldap_search_s(ldap,basekeyspacedn, LDAP_SCOPE_SUBTREE,search,attrs,0,&res); if(err!=0) { int errtag=ldap_err_to_gpg_err(err); fprintf(console,"gpgkeys: LDAP search error: %s\n",ldap_err2string(err)); fprintf(output,"NAME %s BEGIN\n",getkey); fprintf(output,"NAME %s FAILED %d\n",getkey,errtag); return errtag; } count=ldap_count_entries(ldap,res); if(count<1) { fprintf(console,"gpgkeys: key %s not found on keyserver\n",getkey); fprintf(output,"NAME %s BEGIN\n",getkey); fprintf(output,"NAME %s FAILED %d\n",getkey,KEYSERVER_KEY_NOT_FOUND); } else { /* There may be more than one result, but we return them all. */ each=ldap_first_entry(ldap,res); while(each!=NULL) { char **vals,**certid; certid=ldap_get_values(ldap,each,"pgpcertid"); if(certid!=NULL) { build_info(certid[0],each); fprintf(output,"NAME %s BEGIN\n",getkey); vals=ldap_get_values(ldap,each,pgpkeystr); if(vals==NULL) { int errtag=ldap_to_gpg_err(ldap); fprintf(console,"gpgkeys: unable to retrieve key %s " "from keyserver\n",getkey); fprintf(output,"NAME %s FAILED %d\n",getkey,errtag); } else { print_nocr(output,vals[0]); fprintf(output,"\nNAME %s END\n",getkey); ldap_value_free(vals); } ldap_value_free(certid); } each=ldap_next_entry(ldap,each); } } ret=KEYSERVER_OK; ldap_msgfree(res); return ret; } static void printquoted(FILE *stream,char *string,char delim) { while(*string) { if(*string==delim || *string=='%') fprintf(stream,"%%%02x",(unsigned char)*string); else fputc(*string,stream); string++; } } /* Returns 0 on success and -1 on error. Note that key-not-found is not an error! */ static int search_key(const char *searchkey) { char **vals,*search; LDAPMessage *res,*each; int err,count=0; struct keylist *dupelist=NULL; /* The maximum size of the search, including the optional stuff and the trailing \0 */ char *attrs[]={"pgpcertid","pgpuserid","pgprevoked","pgpdisabled", "pgpkeycreatetime","pgpkeyexpiretime","modifytimestamp", "pgpkeysize","pgpkeytype",NULL}; enum ks_search_type search_type; search=xtrymalloc(2+1+9+1+3+strlen(searchkey)+3+1+15+14+1+1+20); if(!search) { fprintf(console,"gpgkeys: out of memory when building search list\n"); fprintf(output,"SEARCH %s FAILED %d\n",searchkey,KEYSERVER_NO_MEMORY); return KEYSERVER_NO_MEMORY; } fprintf(output,"SEARCH %s BEGIN\n",searchkey); search_type=classify_ks_search(&searchkey); if(opt->debug) fprintf(console,"search type is %d, and key is \"%s\"\n", search_type,searchkey); /* Build the search string */ search[0]='\0'; if(!opt->flags.include_disabled || !opt->flags.include_revoked) strcat(search,"(&"); strcat(search,"("); switch(search_type) { case KS_SEARCH_KEYID_SHORT: strcat(search,"pgpKeyID"); break; case KS_SEARCH_KEYID_LONG: strcat(search,"pgpCertID"); break; default: strcat(search,"pgpUserID"); break; } strcat(search,"="); switch(search_type) { case KS_SEARCH_SUBSTR: strcat(search,"*"); break; case KS_SEARCH_MAIL: strcat(search,"*<"); break; case KS_SEARCH_MAILSUB: strcat(search,"*<*"); break; case KS_SEARCH_EXACT: case KS_SEARCH_KEYID_LONG: case KS_SEARCH_KEYID_SHORT: break; } strcat(search,searchkey); switch(search_type) { case KS_SEARCH_SUBSTR: strcat(search,"*"); break; case KS_SEARCH_MAIL: strcat(search,">*"); break; case KS_SEARCH_MAILSUB: strcat(search,"*>*"); break; case KS_SEARCH_EXACT: case KS_SEARCH_KEYID_LONG: case KS_SEARCH_KEYID_SHORT: break; } strcat(search,")"); if(!opt->flags.include_disabled) strcat(search,"(pgpDisabled=0)"); if(!opt->flags.include_revoked) strcat(search,"(pgpRevoked=0)"); if(!opt->flags.include_disabled || !opt->flags.include_revoked) strcat(search,")"); if(opt->verbose>2) fprintf(console,"gpgkeys: LDAP search for: %s\n",search); err=ldap_search_s(ldap,basekeyspacedn, LDAP_SCOPE_SUBTREE,search,attrs,0,&res); free(search); if(err!=LDAP_SUCCESS && err!=LDAP_SIZELIMIT_EXCEEDED) { int errtag=ldap_err_to_gpg_err(err); fprintf(output,"SEARCH %s FAILED %d\n",searchkey,errtag); fprintf(console,"gpgkeys: LDAP search error: %s\n",ldap_err2string(err)); return errtag; } /* The LDAP server doesn't return a real count of unique keys, so we can't use ldap_count_entries here. */ each=ldap_first_entry(ldap,res); while(each!=NULL) { char **certid=ldap_get_values(ldap,each,"pgpcertid"); if(certid!=NULL) { if(!key_in_keylist(certid[0],dupelist)) { int rc=add_key_to_keylist(certid[0],&dupelist); if(rc!=0) { fprintf(output,"SEARCH %s FAILED %d\n",searchkey,rc); free_keylist(dupelist); return rc; } count++; } } each=ldap_next_entry(ldap,each); } if(err==LDAP_SIZELIMIT_EXCEEDED) { if(count==1) fprintf(console,"gpgkeys: search results exceeded server limit." " First %d result shown.\n",count); else fprintf(console,"gpgkeys: search results exceeded server limit." " First %d results shown.\n",count); } free_keylist(dupelist); dupelist=NULL; if(count<1) fprintf(output,"info:1:0\n"); else { fprintf(output,"info:1:%d\n",count); each=ldap_first_entry(ldap,res); while(each!=NULL) { char **certid; certid=ldap_get_values(ldap,each,"pgpcertid"); if(certid!=NULL) { LDAPMessage *uids; /* Have we seen this certid before? */ if(!key_in_keylist(certid[0],dupelist)) { int rc=add_key_to_keylist(certid[0],&dupelist); if(rc) { fprintf(output,"SEARCH %s FAILED %d\n",searchkey,rc); free_keylist(dupelist); ldap_value_free(certid); ldap_msgfree(res); return rc; } fprintf(output,"pub:%s:",certid[0]); vals=ldap_get_values(ldap,each,"pgpkeytype"); if(vals!=NULL) { /* The LDAP server doesn't exactly handle this well. */ if(ascii_strcasecmp(vals[0],"RSA")==0) fprintf(output,"1"); else if(ascii_strcasecmp(vals[0],"DSS/DH")==0) fprintf(output,"17"); ldap_value_free(vals); } fputc(':',output); vals=ldap_get_values(ldap,each,"pgpkeysize"); if(vals!=NULL) { /* Not sure why, but some keys are listed with a key size of 0. Treat that like an unknown. */ if(atoi(vals[0])>0) fprintf(output,"%d",atoi(vals[0])); ldap_value_free(vals); } fputc(':',output); /* YYYYMMDDHHmmssZ */ vals=ldap_get_values(ldap,each,"pgpkeycreatetime"); if(vals!=NULL && strlen(vals[0])==15) { fprintf(output,"%u", (unsigned int)ldap2epochtime(vals[0])); ldap_value_free(vals); } fputc(':',output); vals=ldap_get_values(ldap,each,"pgpkeyexpiretime"); if(vals!=NULL && strlen(vals[0])==15) { fprintf(output,"%u", (unsigned int)ldap2epochtime(vals[0])); ldap_value_free(vals); } fputc(':',output); vals=ldap_get_values(ldap,each,"pgprevoked"); if(vals!=NULL) { if(atoi(vals[0])==1) fprintf(output,"r"); ldap_value_free(vals); } vals=ldap_get_values(ldap,each,"pgpdisabled"); if(vals!=NULL) { if(atoi(vals[0])==1) fprintf(output,"d"); ldap_value_free(vals); } #if 0 /* This is not yet specified in the keyserver protocol, but may be someday. */ fputc(':',output); vals=ldap_get_values(ldap,each,"modifytimestamp"); if(vals!=NULL && strlen(vals[0])==15) { fprintf(output,"%u", (unsigned int)ldap2epochtime(vals[0])); ldap_value_free(vals); } #endif fprintf(output,"\n"); /* Now print all the uids that have this certid */ uids=ldap_first_entry(ldap,res); while(uids!=NULL) { vals=ldap_get_values(ldap,uids,"pgpcertid"); if(vals!=NULL) { if(ascii_strcasecmp(certid[0],vals[0])==0) { char **uidvals; fprintf(output,"uid:"); uidvals=ldap_get_values(ldap,uids,"pgpuserid"); if(uidvals!=NULL) { /* Need to escape any colons */ printquoted(output,uidvals[0],':'); ldap_value_free(uidvals); } fprintf(output,"\n"); } ldap_value_free(vals); } uids=ldap_next_entry(ldap,uids); } } ldap_value_free(certid); } each=ldap_next_entry(ldap,each); } } ldap_msgfree(res); free_keylist(dupelist); fprintf(output,"SEARCH %s END\n",searchkey); return KEYSERVER_OK; } static void fail_all(struct keylist *keylist,int err) { if(!keylist) return; if(opt->action==KS_SEARCH) { fprintf(output,"SEARCH "); while(keylist) { fprintf(output,"%s ",keylist->str); keylist=keylist->next; } fprintf(output,"FAILED %d\n",err); } else while(keylist) { fprintf(output,"KEY %s FAILED %d\n",keylist->str,err); keylist=keylist->next; } } static int find_basekeyspacedn(void) { int err,i; char *attr[]={"namingContexts",NULL,NULL,NULL}; LDAPMessage *res; char **context; /* Look for namingContexts */ err=ldap_search_s(ldap,"",LDAP_SCOPE_BASE,"(objectClass=*)",attr,0,&res); if(err==LDAP_SUCCESS) { context=ldap_get_values(ldap,res,"namingContexts"); if(context) { attr[0]="pgpBaseKeySpaceDN"; attr[1]="pgpVersion"; attr[2]="pgpSoftware"; real_ldap=1; /* We found some, so try each namingContext as the search base and look for pgpBaseKeySpaceDN. Because we found this, we know we're talking to a regular-ish LDAP server and not a LDAP keyserver. */ for(i=0;context[i] && !basekeyspacedn;i++) { char **vals; LDAPMessage *si_res; char *object; object=xtrymalloc(17+strlen(context[i])+1); if(!object) return -1; strcpy(object,"cn=pgpServerInfo,"); strcat(object,context[i]); err=ldap_search_s(ldap,object,LDAP_SCOPE_BASE, "(objectClass=*)",attr,0,&si_res); free(object); if(err==LDAP_NO_SUCH_OBJECT) continue; else if(err!=LDAP_SUCCESS) return err; vals=ldap_get_values(ldap,si_res,"pgpBaseKeySpaceDN"); if(vals) { basekeyspacedn=strdup(vals[0]); ldap_value_free(vals); } if(opt->verbose>1) { vals=ldap_get_values(ldap,si_res,"pgpSoftware"); if(vals) { fprintf(console,"Server: \t%s\n",vals[0]); ldap_value_free(vals); } vals=ldap_get_values(ldap,si_res,"pgpVersion"); if(vals) { fprintf(console,"Version:\t%s\n",vals[0]); ldap_value_free(vals); } } ldap_msgfree(si_res); } ldap_value_free(context); } ldap_msgfree(res); } else { /* We don't have an answer yet, which means the server might be a LDAP keyserver. */ char **vals; LDAPMessage *si_res; attr[0]="pgpBaseKeySpaceDN"; attr[1]="version"; attr[2]="software"; err=ldap_search_s(ldap,"cn=pgpServerInfo",LDAP_SCOPE_BASE, "(objectClass=*)",attr,0,&si_res); if(err!=LDAP_SUCCESS) return err; /* For the LDAP keyserver, this is always "OU=ACTIVE,O=PGP KEYSPACE,C=US", but it might not be in the future. */ vals=ldap_get_values(ldap,si_res,"baseKeySpaceDN"); if(vals) { basekeyspacedn=strdup(vals[0]); ldap_value_free(vals); } if(opt->verbose>1) { vals=ldap_get_values(ldap,si_res,"software"); if(vals) { fprintf(console,"Server: \t%s\n",vals[0]); ldap_value_free(vals); } } vals=ldap_get_values(ldap,si_res,"version"); if(vals) { if(opt->verbose>1) fprintf(console,"Version:\t%s\n",vals[0]); /* If the version is high enough, use the new pgpKeyV2 attribute. This design if iffy at best, but it matches how PGP does it. I figure the NAI folks assumed that there would never be a LDAP keyserver vendor with a different numbering scheme. */ if(atoi(vals[0])>1) pgpkeystr="pgpKeyV2"; ldap_value_free(vals); } ldap_msgfree(si_res); } return LDAP_SUCCESS; } static void show_help (FILE *fp) { fprintf (fp,"-h, --help\thelp\n"); fprintf (fp,"-V\t\tmachine readable version\n"); fprintf (fp,"--version\thuman readable version\n"); fprintf (fp,"-o\t\toutput to this file\n"); } int main(int argc,char *argv[]) { int port=0,arg,err,ret=KEYSERVER_INTERNAL_ERROR; char line[MAX_LINE],*binddn=NULL,*bindpw=NULL; int failed=0,use_ssl=0,use_tls=0,bound=0; struct keylist *keylist=NULL,*keyptr=NULL; console=stderr; /* Kludge to implement standard GNU options. */ if (argc > 1 && !strcmp (argv[1], "--version")) { fputs ("gpgkeys_ldap (GnuPG) " VERSION"\n", stdout); return 0; } else if (argc > 1 && !strcmp (argv[1], "--help")) { show_help (stdout); return 0; } while((arg=getopt(argc,argv,"hVo:"))!=-1) switch(arg) { default: case 'h': show_help (console); return KEYSERVER_OK; case 'V': fprintf(stdout,"%d\n%s\n",KEYSERVER_PROTO_VERSION,VERSION); return KEYSERVER_OK; case 'o': output=fopen(optarg,"w"); if(output==NULL) { fprintf(console,"gpgkeys: Cannot open output file `%s': %s\n", optarg,strerror(errno)); return KEYSERVER_INTERNAL_ERROR; } break; } if(argc>optind) { input=fopen(argv[optind],"r"); if(input==NULL) { fprintf(console,"gpgkeys: Cannot open input file `%s': %s\n", argv[optind],strerror(errno)); return KEYSERVER_INTERNAL_ERROR; } } if(input==NULL) input=stdin; if(output==NULL) output=stdout; opt=init_ks_options(); if(!opt) return KEYSERVER_NO_MEMORY; /* Get the command and info block */ while(fgets(line,MAX_LINE,input)!=NULL) { char optionstr[MAX_OPTION+1]; if(line[0]=='\n') break; err=parse_ks_options(line,opt); if(err>0) { ret=err; goto fail; } else if(err==0) continue; if(sscanf(line,"OPTION %" MKSTRING(MAX_OPTION) "[^\n]\n",optionstr)==1) { int no=0; char *start=&optionstr[0]; optionstr[MAX_OPTION]='\0'; if(ascii_strncasecmp(optionstr,"no-",3)==0) { no=1; start=&optionstr[3]; } if(ascii_strncasecmp(start,"tls",3)==0) { if(no) use_tls=0; else if(start[3]=='=') { if(ascii_strcasecmp(&start[4],"no")==0) use_tls=0; else if(ascii_strcasecmp(&start[4],"try")==0) use_tls=1; else if(ascii_strcasecmp(&start[4],"warn")==0) use_tls=2; else if(ascii_strcasecmp(&start[4],"require")==0) use_tls=3; else use_tls=1; } else if(start[3]=='\0') use_tls=1; } else if(ascii_strncasecmp(start,"basedn",6)==0) { if(no) { free(basekeyspacedn); basekeyspacedn=NULL; } else if(start[6]=='=') { free(basekeyspacedn); basekeyspacedn=strdup(&start[7]); if(!basekeyspacedn) { fprintf(console,"gpgkeys: out of memory while creating " "base DN\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } real_ldap=1; } } else if(ascii_strncasecmp(start,"binddn",6)==0) { if(no) { free(binddn); binddn=NULL; } else if(start[6]=='=') { free(binddn); binddn=strdup(&start[7]); if(!binddn) { fprintf(console,"gpgkeys: out of memory while creating " "bind DN\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } real_ldap=1; } } else if(ascii_strncasecmp(start,"bindpw",6)==0) { if(no) { free(bindpw); bindpw=NULL; } else if(start[6]=='=') { free(bindpw); bindpw=strdup(&start[7]); if(!bindpw) { fprintf(console,"gpgkeys: out of memory while creating " "bind password\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } real_ldap=1; } } continue; } } if(!opt->scheme) { fprintf(console,"gpgkeys: no scheme supplied!\n"); ret=KEYSERVER_SCHEME_NOT_FOUND; goto fail; } if(ascii_strcasecmp(opt->scheme,"ldaps")==0) { port=636; use_ssl=1; } if(opt->port) port=atoi(opt->port); if(!opt->host) { fprintf(console,"gpgkeys: no keyserver host provided\n"); goto fail; } if(opt->timeout && register_timeout()==-1) { fprintf(console,"gpgkeys: unable to register timeout handler\n"); return KEYSERVER_INTERNAL_ERROR; } #if defined(LDAP_OPT_X_TLS_CACERTFILE) && defined(HAVE_LDAP_SET_OPTION) if(opt->ca_cert_file) { err=ldap_set_option(NULL,LDAP_OPT_X_TLS_CACERTFILE,opt->ca_cert_file); if(err!=LDAP_SUCCESS) { fprintf(console,"gpgkeys: unable to set ca-cert-file: %s\n", ldap_err2string(err)); ret=KEYSERVER_INTERNAL_ERROR; goto fail; } } #endif /* LDAP_OPT_X_TLS_CACERTFILE && HAVE_LDAP_SET_OPTION */ /* SSL trumps TLS */ if(use_ssl) use_tls=0; /* If it's a GET or a SEARCH, the next thing to come in is the keyids. If it's a SEND, then there are no keyids. */ if(opt->action==KS_SEND) while(fgets(line,MAX_LINE,input)!=NULL && line[0]!='\n'); else if(opt->action==KS_GET || opt->action==KS_GETNAME || opt->action==KS_SEARCH) { for(;;) { struct keylist *work; if(fgets(line,MAX_LINE,input)==NULL) break; else { if(line[0]=='\n' || line[0]=='\0') break; work=xtrymalloc(sizeof(struct keylist)); if(work==NULL) { fprintf(console,"gpgkeys: out of memory while " "building key list\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } strcpy(work->str,line); /* Trim the trailing \n */ work->str[strlen(line)-1]='\0'; work->next=NULL; /* Always attach at the end to keep the list in proper order for searching */ if(keylist==NULL) keylist=work; else keyptr->next=work; keyptr=work; } } } else { fprintf(console,"gpgkeys: no keyserver command specified\n"); goto fail; } /* Send the response */ fprintf(output,"VERSION %d\n",KEYSERVER_PROTO_VERSION); fprintf(output,"PROGRAM %s\n\n",VERSION); if(opt->verbose>1) { fprintf(console,"Host:\t\t%s\n",opt->host); if(port) fprintf(console,"Port:\t\t%d\n",port); fprintf(console,"Command:\t%s\n",ks_action_to_string(opt->action)); } if(opt->debug) { #if defined(LDAP_OPT_DEBUG_LEVEL) && defined(HAVE_LDAP_SET_OPTION) err=ldap_set_option(NULL,LDAP_OPT_DEBUG_LEVEL,&opt->debug); if(err!=LDAP_SUCCESS) fprintf(console,"gpgkeys: unable to set debug mode: %s\n", ldap_err2string(err)); else fprintf(console,"gpgkeys: debug level %d\n",opt->debug); #else fprintf(console,"gpgkeys: not built with debugging support\n"); #endif } /* We have a timeout set for the setup stuff since it could time out as well. */ set_timeout(opt->timeout); /* Note that this tries all A records on a given host (or at least, OpenLDAP does). */ ldap=ldap_init(opt->host,port); if(ldap==NULL) { fprintf(console,"gpgkeys: internal LDAP init error: %s\n", strerror(errno)); fail_all(keylist,KEYSERVER_INTERNAL_ERROR); goto fail; } if(use_ssl) { #if defined(LDAP_OPT_X_TLS) && defined(HAVE_LDAP_SET_OPTION) int ssl=LDAP_OPT_X_TLS_HARD; err=ldap_set_option(ldap,LDAP_OPT_X_TLS,&ssl); if(err!=LDAP_SUCCESS) { fprintf(console,"gpgkeys: unable to make SSL connection: %s\n", ldap_err2string(err)); fail_all(keylist,ldap_err_to_gpg_err(err)); goto fail; } if(!opt->flags.check_cert) ssl=LDAP_OPT_X_TLS_NEVER; err=ldap_set_option(NULL,LDAP_OPT_X_TLS_REQUIRE_CERT,&ssl); if(err!=LDAP_SUCCESS) { fprintf(console, "gpgkeys: unable to set certificate validation: %s\n", ldap_err2string(err)); fail_all(keylist,ldap_err_to_gpg_err(err)); goto fail; } #else fprintf(console,"gpgkeys: unable to make SSL connection: %s\n", "not built with LDAPS support"); fail_all(keylist,KEYSERVER_INTERNAL_ERROR); goto fail; #endif } if(!basekeyspacedn) if((err=find_basekeyspacedn()) || !basekeyspacedn) { fprintf(console,"gpgkeys: unable to retrieve LDAP base: %s\n", err?ldap_err2string(err):"not found"); fail_all(keylist,ldap_err_to_gpg_err(err)); goto fail; } /* use_tls: 0=don't use, 1=try silently to use, 2=try loudly to use, 3=force use. */ if(use_tls) { if(!real_ldap) { if(use_tls>=2) fprintf(console,"gpgkeys: unable to start TLS: %s\n", "not supported by the NAI LDAP keyserver"); if(use_tls==3) { fail_all(keylist,KEYSERVER_INTERNAL_ERROR); goto fail; } } else { #if defined(HAVE_LDAP_START_TLS_S) && defined(HAVE_LDAP_SET_OPTION) int ver=LDAP_VERSION3; err=ldap_set_option(ldap,LDAP_OPT_PROTOCOL_VERSION,&ver); #ifdef LDAP_OPT_X_TLS if(err==LDAP_SUCCESS) { if(opt->flags.check_cert) ver=LDAP_OPT_X_TLS_HARD; else ver=LDAP_OPT_X_TLS_NEVER; err=ldap_set_option(NULL,LDAP_OPT_X_TLS_REQUIRE_CERT,&ver); } #endif if(err==LDAP_SUCCESS) err = my_ldap_start_tls_s (ldap, NULL, NULL); if(err!=LDAP_SUCCESS) { if(use_tls>=2 || opt->verbose>2) fprintf(console,"gpgkeys: unable to start TLS: %s\n", ldap_err2string(err)); /* Are we forcing it? */ if(use_tls==3) { fail_all(keylist,ldap_err_to_gpg_err(err)); goto fail; } } else if(opt->verbose>1) fprintf(console,"gpgkeys: TLS started successfully.\n"); #else if(use_tls>=2) fprintf(console,"gpgkeys: unable to start TLS: %s\n", "not built with TLS support"); if(use_tls==3) { fail_all(keylist,KEYSERVER_INTERNAL_ERROR); goto fail; } #endif } } /* By default we don't bind as there is usually no need to. For cases where the server needs some authentication, the user can use binddn and bindpw for auth. */ if(binddn) { #ifdef HAVE_LDAP_SET_OPTION int ver=LDAP_VERSION3; err=ldap_set_option(ldap,LDAP_OPT_PROTOCOL_VERSION,&ver); if(err!=LDAP_SUCCESS) { fprintf(console,"gpgkeys: unable to go to LDAP 3: %s\n", ldap_err2string(err)); fail_all(keylist,ldap_err_to_gpg_err(err)); goto fail; } #endif if(opt->verbose>2) fprintf(console,"gpgkeys: LDAP bind to %s, pw %s\n",binddn, bindpw?">not shown<":">none<"); err=ldap_simple_bind_s(ldap,binddn,bindpw); if(err!=LDAP_SUCCESS) { fprintf(console,"gpgkeys: internal LDAP bind error: %s\n", ldap_err2string(err)); fail_all(keylist,ldap_err_to_gpg_err(err)); goto fail; } else bound=1; } if(opt->action==KS_GET) { keyptr=keylist; while(keyptr!=NULL) { set_timeout(opt->timeout); if(get_key(keyptr->str)!=KEYSERVER_OK) failed++; keyptr=keyptr->next; } } else if(opt->action==KS_GETNAME) { keyptr=keylist; while(keyptr!=NULL) { set_timeout(opt->timeout); if(get_name(keyptr->str)!=KEYSERVER_OK) failed++; keyptr=keyptr->next; } } else if(opt->action==KS_SEND) { int eof=0; do { set_timeout(opt->timeout); if(real_ldap) { if(send_key(&eof)!=KEYSERVER_OK) failed++; } else { if(send_key_keyserver(&eof)!=KEYSERVER_OK) failed++; } } while(!eof); } else if(opt->action==KS_SEARCH) { char *searchkey=NULL; int len=0; set_timeout(opt->timeout); /* To search, we stick a * in between each key to search for. This means that if the user enters words, they'll get "enters*words". If the user "enters words", they'll get "enters words" */ keyptr=keylist; while(keyptr!=NULL) { len+=strlen(keyptr->str)+1; keyptr=keyptr->next; } searchkey=xtrymalloc((len*3)+1); if(searchkey==NULL) { ret=KEYSERVER_NO_MEMORY; fail_all(keylist,KEYSERVER_NO_MEMORY); goto fail; } searchkey[0]='\0'; keyptr=keylist; while(keyptr!=NULL) { ldap_quote(searchkey,keyptr->str); strcat(searchkey,"*"); keyptr=keyptr->next; } /* Nail that last "*" */ if(*searchkey) searchkey[strlen(searchkey)-1]='\0'; if(search_key(searchkey)!=KEYSERVER_OK) failed++; free(searchkey); } else assert (!"invalid action"); if(!failed) ret=KEYSERVER_OK; fail: while(keylist!=NULL) { struct keylist *current=keylist; keylist=keylist->next; free(current); } if(input!=stdin) fclose(input); if(output!=stdout) fclose(output); free_ks_options(opt); if(ldap!=NULL && bound) ldap_unbind_s(ldap); free(basekeyspacedn); return ret; } gnupg-1.4.20/keyserver/gpgkeys_curl.c0000644000175000017500000002363212635262326014535 00000000000000/* gpgkeys_curl.c - fetch a key via libcurl * Copyright (C) 2004, 2005, 2006, 2007, 2008 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 3 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, see . * * In addition, as a special exception, the Free Software Foundation * gives permission to link the code of the keyserver helper tools: * gpgkeys_ldap, gpgkeys_curl and gpgkeys_hkp with the OpenSSL * project's "OpenSSL" library (or with modified versions of it that * use the same license as the "OpenSSL" library), and distribute the * linked executables. You must obey the GNU General Public License * in all respects for all of the code used other than "OpenSSL". If * you modify this file, you may extend this exception to your version * of the file, but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. */ #include #include #include #include #include #include #ifdef HAVE_GETOPT_H #include #endif #ifdef HAVE_LIBCURL #include #else #include "curl-shim.h" #endif #include "compat.h" #include "keyserver.h" #include "ksutil.h" extern char *optarg; extern int optind; static FILE *input,*output,*console; static CURL *curl; static struct ks_options *opt; static int get_key(char *getkey) { CURLcode res; char errorbuffer[CURL_ERROR_SIZE]; char request[MAX_URL]; struct curl_writer_ctx ctx; memset(&ctx,0,sizeof(ctx)); if(strncmp(getkey,"0x",2)==0) getkey+=2; fprintf(output,"KEY 0x%s BEGIN\n",getkey); sprintf(request,"%s://%s%s%s%s",opt->scheme,opt->host, opt->port?":":"",opt->port?opt->port:"",opt->path?opt->path:"/"); curl_easy_setopt(curl,CURLOPT_URL,request); curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,curl_writer); ctx.stream=output; curl_easy_setopt(curl,CURLOPT_FILE,&ctx); curl_easy_setopt(curl,CURLOPT_ERRORBUFFER,errorbuffer); res=curl_easy_perform(curl); if(res!=CURLE_OK) { fprintf(console,"gpgkeys: %s fetch error %d: %s\n",opt->scheme, res,errorbuffer); fprintf(output,"\nKEY 0x%s FAILED %d\n",getkey,curl_err_to_gpg_err(res)); } else { curl_writer_finalize(&ctx); if(!ctx.flags.done) { fprintf(console,"gpgkeys: no key data found for %s\n",request); fprintf(output,"\nKEY 0x%s FAILED %d\n", getkey,KEYSERVER_KEY_NOT_FOUND); } else fprintf(output,"\nKEY 0x%s END\n",getkey); } return curl_err_to_gpg_err(res); } static void show_help (FILE *fp) { fprintf (fp,"-h, --help\thelp\n"); fprintf (fp,"-V\t\tmachine readable version\n"); fprintf (fp,"--version\thuman readable version\n"); fprintf (fp,"-o\t\toutput to this file\n"); } int main(int argc,char *argv[]) { int arg,ret=KEYSERVER_INTERNAL_ERROR,i; char line[MAX_LINE]; char *thekey=NULL; long follow_redirects=5; char *proxy=NULL; curl_version_info_data *curldata; struct curl_slist *headers=NULL; console=stderr; /* Kludge to implement standard GNU options. */ if (argc > 1 && !strcmp (argv[1], "--version")) { printf ("gpgkeys_curl (GnuPG) %s\n", VERSION); printf ("Uses: %s\n", curl_version()); return 0; } else if (argc > 1 && !strcmp (argv[1], "--help")) { show_help (stdout); return 0; } while((arg=getopt(argc,argv,"hVo:"))!=-1) switch(arg) { default: case 'h': show_help (console); return KEYSERVER_OK; case 'V': fprintf(stdout,"%d\n%s\n",KEYSERVER_PROTO_VERSION,VERSION); return KEYSERVER_OK; case 'o': output=fopen(optarg,"wb"); if(output==NULL) { fprintf(console,"gpgkeys: Cannot open output file `%s': %s\n", optarg,strerror(errno)); return KEYSERVER_INTERNAL_ERROR; } break; } if(argc>optind) { input=fopen(argv[optind],"r"); if(input==NULL) { fprintf(console,"gpgkeys: Cannot open input file `%s': %s\n", argv[optind],strerror(errno)); return KEYSERVER_INTERNAL_ERROR; } } if(input==NULL) input=stdin; if(output==NULL) output=stdout; opt=init_ks_options(); if(!opt) return KEYSERVER_NO_MEMORY; /* Get the command and info block */ while(fgets(line,MAX_LINE,input)!=NULL) { int err; char option[MAX_OPTION+1]; if(line[0]=='\n') break; err=parse_ks_options(line,opt); if(err>0) { ret=err; goto fail; } else if(err==0) continue; if(sscanf(line,"OPTION %" MKSTRING(MAX_OPTION) "s\n",option)==1) { int no=0; char *start=&option[0]; option[MAX_OPTION]='\0'; if(ascii_strncasecmp(option,"no-",3)==0) { no=1; start=&option[3]; } if(ascii_strncasecmp(start,"http-proxy",10)==0) { /* Safe to not check the return code of strdup() here. If it fails, we simply won't use a proxy. */ if(no) { free(proxy); proxy=strdup(""); } else if(start[10]=='=') { if(strlen(&start[11])scheme) { fprintf(console,"gpgkeys: no scheme supplied!\n"); ret=KEYSERVER_SCHEME_NOT_FOUND; goto fail; } if(!opt->host) { fprintf(console,"gpgkeys: no keyserver host provided\n"); goto fail; } if(opt->timeout && register_timeout()==-1) { fprintf(console,"gpgkeys: unable to register timeout handler\n"); return KEYSERVER_INTERNAL_ERROR; } curl_global_init(CURL_GLOBAL_DEFAULT); curl=curl_easy_init(); if(!curl) { fprintf(console,"gpgkeys: unable to initialize curl\n"); ret=KEYSERVER_INTERNAL_ERROR; goto fail; } /* Make sure we have the protocol the user is asking for so we can print a nicer error message. */ curldata=curl_version_info(CURLVERSION_NOW); for(i=0;curldata->protocols[i];i++) if(ascii_strcasecmp(curldata->protocols[i],opt->scheme)==0) break; if(curldata->protocols[i]==NULL) { fprintf(console,"gpgkeys: protocol `%s' not supported\n",opt->scheme); ret=KEYSERVER_SCHEME_NOT_FOUND; goto fail; } if(follow_redirects) { curl_easy_setopt(curl,CURLOPT_FOLLOWLOCATION,1L); if(follow_redirects>0) curl_easy_setopt(curl,CURLOPT_MAXREDIRS,follow_redirects); } if(opt->auth) curl_easy_setopt(curl,CURLOPT_USERPWD,opt->auth); if(opt->debug) { fprintf(console,"gpgkeys: curl version = %s\n",curl_version()); curl_easy_setopt(curl,CURLOPT_STDERR,console); curl_easy_setopt(curl,CURLOPT_VERBOSE,1L); } curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER,(long)opt->flags.check_cert); if (opt->ca_cert_file) curl_easy_setopt (curl, CURLOPT_CAINFO, opt->ca_cert_file); /* Avoid caches to get the most recent copy of the key. This is bug #1061. In pre-curl versions of the code, we didn't do it. Then we did do it (as a curl default) until curl changed the default. Now we're doing it again, but in such a way that changing defaults in the future won't impact us. We set both the Pragma and Cache-Control versions of the header, so we're good with both HTTP 1.0 and 1.1. */ headers=curl_slist_append(headers,"Pragma: no-cache"); if(headers) headers=curl_slist_append(headers,"Cache-Control: no-cache"); if(!headers) { fprintf(console,"gpgkeys: out of memory when building HTTP headers\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } curl_easy_setopt(curl,CURLOPT_HTTPHEADER,headers); if(proxy) curl_easy_setopt(curl,CURLOPT_PROXY,proxy); /* If it's a GET or a SEARCH, the next thing to come in is the keyids. If it's a SEND, then there are no keyids. */ if(opt->action==KS_GET) { /* Eat the rest of the file */ for(;;) { if(fgets(line,MAX_LINE,input)==NULL) break; else { if(line[0]=='\n' || line[0]=='\0') break; if(!thekey) { thekey=strdup(line); if(!thekey) { fprintf(console,"gpgkeys: out of memory while " "building key list\n"); ret=KEYSERVER_NO_MEMORY; goto fail; } /* Trim the trailing \n */ thekey[strlen(line)-1]='\0'; } } } } else { fprintf(console, "gpgkeys: this keyserver type only supports key retrieval\n"); goto fail; } if(!thekey) { fprintf(console,"gpgkeys: invalid keyserver instructions\n"); goto fail; } /* Send the response */ fprintf(output,"VERSION %d\n",KEYSERVER_PROTO_VERSION); fprintf(output,"PROGRAM %s\n\n",VERSION); if(opt->verbose) { fprintf(console,"Scheme:\t\t%s\n",opt->scheme); fprintf(console,"Host:\t\t%s\n",opt->host); if(opt->port) fprintf(console,"Port:\t\t%s\n",opt->port); if(opt->path) fprintf(console,"Path:\t\t%s\n",opt->path); fprintf(console,"Command:\tGET\n"); } set_timeout(opt->timeout); ret=get_key(thekey); fail: free(thekey); if(input!=stdin) fclose(input); if(output!=stdout) fclose(output); free_ks_options(opt); curl_slist_free_all(headers); if(curl) curl_easy_cleanup(curl); free(proxy); curl_global_cleanup(); return ret; } gnupg-1.4.20/keyserver/ksutil.h0000644000175000017500000001012512635262326013350 00000000000000/* ksutil.h * Copyright (C) 2004, 2005, 2006 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 3 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, see . * * In addition, as a special exception, the Free Software Foundation * gives permission to link the code of the keyserver helper tools: * gpgkeys_ldap, gpgkeys_curl and gpgkeys_hkp with the OpenSSL * project's "OpenSSL" library (or with modified versions of it that * use the same license as the "OpenSSL" library), and distribute the * linked executables. You must obey the GNU General Public License * in all respects for all of the code used other than "OpenSSL". If * you modify this file, you may extend this exception to your version * of the file, but you are not obligated to do so. If you do not * wish to do so, delete this exception statement from your version. */ #ifndef _KSUTIL_H_ #define _KSUTIL_H_ #ifdef HAVE_LIBCURL #include #else #include "curl-shim.h" #endif /* MAX_LINE must be at least 1 larger than the largest item we expect to receive, including the name tag ("COMMAND", "PORT", etc) and space between. In practice, that means it should be strlen("OPAQUE")+1+sizeof_opaque+1 */ #define MAX_LINE (6+1+1024+1) #define MAX_COMMAND 7 #define MAX_OPTION 256 #define MAX_SCHEME 20 #define MAX_OPAQUE 1024 #define MAX_AUTH 128 #define MAX_HOST 80 #define MAX_PORT 10 #define URLMAX_PATH 1024 #define MAX_PROXY 128 #define MAX_URL (MAX_SCHEME+1+3+MAX_AUTH+1+1+MAX_HOST+1+1 \ +MAX_PORT+1+1+URLMAX_PATH+1+50) #define STRINGIFY(x) #x #define MKSTRING(x) STRINGIFY(x) #define BEGIN "-----BEGIN PGP PUBLIC KEY BLOCK-----" #define END "-----END PGP PUBLIC KEY BLOCK-----" #ifdef __riscos__ #define HTTP_PROXY_ENV "GnuPG$HttpProxy" #else #define HTTP_PROXY_ENV "http_proxy" #endif struct keylist { char str[MAX_LINE]; struct keylist *next; }; /* 2 minutes seems reasonable */ #define DEFAULT_KEYSERVER_TIMEOUT 120 unsigned int set_timeout(unsigned int seconds); int register_timeout(void); enum ks_action {KS_UNKNOWN=0,KS_GET,KS_GETNAME,KS_SEND,KS_SEARCH}; enum ks_search_type {KS_SEARCH_SUBSTR,KS_SEARCH_EXACT, KS_SEARCH_MAIL,KS_SEARCH_MAILSUB, KS_SEARCH_KEYID_LONG,KS_SEARCH_KEYID_SHORT}; struct ks_options { enum ks_action action; char *host; char *port; char *scheme; char *auth; char *path; char *opaque; struct { unsigned int include_disabled:1; unsigned int include_revoked:1; unsigned int include_subkeys:1; unsigned int check_cert:1; } flags; unsigned int verbose; unsigned int debug; unsigned int timeout; char *ca_cert_file; }; struct ks_options *init_ks_options(void); void free_ks_options(struct ks_options *opt); int parse_ks_options(char *line,struct ks_options *opt); const char *ks_action_to_string(enum ks_action action); void print_nocr(FILE *stream,const char *str); enum ks_search_type classify_ks_search(const char **search); int curl_err_to_gpg_err(CURLcode error); struct curl_writer_ctx { struct { unsigned int initialized:1; unsigned int begun:1; unsigned int done:1; unsigned int armor:1; } flags; int armor_remaining; unsigned char armor_ctx[3]; int markeridx,linelen; const char *marker; FILE *stream; }; size_t curl_writer(const void *ptr,size_t size,size_t nmemb,void *cw_ctx); void curl_writer_finalize(struct curl_writer_ctx *ctx); /* -- From ksmalloc.c or ../include/memory.h -- */ void *xtrymalloc (size_t n); void xfree (void *p); #endif /* !_KSUTIL_H_ */ gnupg-1.4.20/tools/0000755000175000017500000000000012635457217011073 500000000000000gnupg-1.4.20/tools/mail-signed-keys0000755000175000017500000000654212635262326014105 00000000000000#!/bin/sh # Copyright (C) 2000, 2001 Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # FIXME: Add --dry-run, use only valid email addreses, extract only given keys dryrun=0 if [ "$1" = "--dry-run" ]; then dryrun=1 shift fi if [ -z "$1" -o -z "$2" -o -z "$3" ]; then echo "usage: mail-signed-keys keyring signedby signame" >&2 exit 1 fi signame="$3" if [ ! -f $1 ]; then echo "mail-signed-keys: '$1': no such file" >&2 exit 1 fi [ -f '.#tdb.tmp' ] && rm '.#tdb.tmp' ro="--homedir . --no-options --trustdb-name=./.#tdb.tmp --dry-run --lock-never --no-default-keyring --keyring $1" signedby=`gpg $ro --list-keys --with-colons $2 \ 2>/dev/null | awk -F: '$1=="pub" {print $5; exit 0}'` if [ -z "$signedby" ]; then echo "mail-signed-keys: '$2': no such signator" >&2 exit 1 fi if [ "$dryrun" = "0" ]; then echo "About to send the the keys signed by $signedby" >&2 echo -n "to their owners. Do you really want to do this? (y/N)" >&2 read [ "$REPLY" != "y" -a "$REPLY" != "Y" ] && exit 0 fi gpg $ro --check-sigs --with-colons 2>/dev/null \ | awk -F: -v signedby="$signedby" -v gpgopt="$ro" \ -v dryrun="$dryrun" -v signame="$signame" ' BEGIN { sendmail="/usr/lib/sendmail -oi -t " } $1 == "pub" { nextkid=$5; nextuid=$10 if( uidcount > 0 ) { myflush() } kid=nextkid; uid=nextuid; next } $1 == "uid" { uid=$10 ; next } $1 == "sig" && $2 == "!" && $5 == signedby { uids[uidcount++] = uid; next } END { if( uidcount > 0 ) { myflush() } } function myflush() { if ( kid == signedby ) { uidcount=0; return } print "sending key " substr(kid,9) " to" | "cat >&2" for(i=0; i < 1; i++ ) { print " " uids[i] | "cat >&2" if( dryrun == 0 ) { if( i == 0 ) { printf "To: %s", uids[i] | sendmail } else { printf ",\n %s", uids[i] | sendmail } } } if(dryrun == 0) { printf "\n" | sendmail print "Subject: I signed your key " substr(kid,9) | sendmail print "" | sendmail print "Hi," | sendmail print "" | sendmail print "Here you get back the signed key." | sendmail print "Please send it yourself to a keyserver." | sendmail print "" | sendmail print "Peace," | sendmail print " " signame | sendmail print "" | sendmail cmd = "gpg " gpgopt " --export -a " kid " 2>/dev/null" while( (cmd | getline) > 0 ) { print | sendmail } print "" | sendmail close(cmd) close( sendmail ) } uidcount=0 } ' gnupg-1.4.20/tools/ChangeLog-20110000644000175000017500000001571112635262326013146 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2010-05-12 Werner Koch * mk-tdata.c (main): Add option --seq. 2007-10-23 Werner Koch Switched entire package to GPLv3+. 2007-04-16 David Shaw * Makefile.am (noinst_PROGRAMS): Don't build shmtest unless we have shm. 2006-12-11 Werner Koch * Makefile.am (AM_CPPFLAGS): Use in place of INCLUDES. Define LOCALEDIR. * shmtest.c (i18n_init): s/G10_LOCALEDIR/LOCALEDIR/. * mpicalc.c (i18n_init): Ditto. 2006-04-20 David Shaw * make-dns-cert.c (main): Small exit code tweak from Peter Palfrader. 2006-04-05 David Shaw * make-dns-cert.c: Some changes from Peter Palfrader to send errors to stderr and allow spaces in a fingerprint. Also warn when a key is over 16k (as that is the default max-cert-size) and fail when a key is over 64k as that is the DNS limit in many places. 2006-04-04 David Shaw * make-dns-cert.c: New program to generate properly formatted CERT records so people don't have to do it manually. 2006-02-14 Werner Koch * mk-tdata.c (main): Implement option --char. 2005-08-05 David Shaw * gpg-zip.in: Add --decrypt functionality. Fix quoting so filenames with spaces work properly. 2005-08-04 David Shaw * gpg-zip.in: New. Script wrapper to work with encrypted tar files, a la PGP Zip. * Makefile.am: Use it if we have a USTAR compatible tar. 2004-12-18 David Shaw * Makefile.am: Link with readline where needed. 2004-10-28 Werner Koch * Makefile.am (other_libs): New. Also include LIBICONV. Noted by Tim Mooney. 2004-10-01 Werner Koch * bftest.c (i18n_init): Always use LC_ALL. * shmtest.c (i18n_init): Ditto. * mpicalc.c (i18n_init): Ditto. 2004-09-13 David Shaw * pgpgroup-to-gpggroup: New perl script to take groups from PGP command line and write out GnuPG 'group' config lines. 2004-07-04 David Shaw * ring-a-party: ElGamal -> Elgamal 2004-01-11 David Shaw * convert-from-106, lspgpot: Check for gpg binary before proceeding. Don't hardcode the path to gpg. * gpgsplit.c (handle_bzip2): Remove two cut and paste typecast errors. Noted by Stefan Bellon. 2003-12-28 Stefan Bellon * gpgsplit.c [__riscos__]: Removal of unnecessary #ifdef __riscos__ sections. 2003-12-06 David Shaw * gpgsplit.c (write_part): Split off decompression code. (handle_zlib): Move it here. (handle_bzip2): Add this to handle BZIP2 compressed messages. 2003-10-25 Werner Koch * Makefile.am: Replaced INTLLIBS by LIBINTL. 2003-08-24 David Shaw * Makefile.am: Use NETLIBS instead of EGDLIBS. 2003-07-10 David Shaw * Makefile.am: Use W32LIBS where appropriate. 2003-05-30 David Shaw * Makefile.am: Some cleanup, and use DLLIBS for -ldl. 2003-05-24 David Shaw * bftest.c, crlf.c, mk-tdata.c, mpicalc.c, shmtest.c: Edit all preprocessor instructions to remove whitespace before the '#'. This is not required by C89, but there are some compilers out there that don't like it. 2003-03-11 David Shaw * Makefile.am: Use @CAPLIBS@ to link in -lcap if we are using capabilities. 2003-02-22 David Shaw * Makefile.am: Distribute convert-from-106. * convert-from-106: Script to automate the 1.0.6->later conversion. It marks all secret keys as ultimately trusted, adds the signature caches, and checks the trustdb. Moved from the scripts directory. 2002-10-31 Stefan Bellon * gpgsplit.c (write_part) [__riscos__]: Use riscos_load_module() to load ZLib module. 2002-10-23 Werner Koch * gpgsplit.c: New options --secret-to-public and --no-split. GNUified the indentation style. 2002-09-25 David Shaw * Makefile.am: Link bftest with EGDLIBS (i.e. NETLIBS) as EGD uses sockets. 2002-05-07 Stefan Bellon * gpgsplit.c (create_filename): Use EXTSEP_S instead of ".". 2002-04-23 David Shaw * Makefile.am: Do not list libraries in -lxxx format in a dependency line. 2002-01-02 Stefan Bellon * gpgsplit.c [__riscos__]: Added RISC OS specific file name code. * gpgsplit.c (write_part): Introduced two explicit casts. 2001-12-21 David Shaw * gpgsplit.c (pkttype_to_string): PKT_PHOTO_ID -> PKT_ATTRIBUTE 2001-10-23 Werner Koch * Makefile.am (gpgsplit_LDADD): Add ZLIBS. 2001-09-18 Werner Koch * gpgsplit.c: New option --uncompress. (write_part): Handle old style uncompressing. 2001-06-20 Werner Koch * gpgsplit.c: New. * Makefile.am (bin_PROGRAMS): Install gpgsplit. 2001-03-27 Werner Koch * mail-signed-keys: Add option --dry-run. 2001-03-21 Werner Koch * shmtest.c: Add sys/types.h Fri Sep 15 18:40:36 CEST 2000 Werner Koch * ring-a-party: An array start at offset 1 no 0. Many thanks to Mike for finding this bug. Thu Sep 14 14:20:38 CEST 2000 Werner Koch * ring-a-party: Flush the last key. Wed Jul 5 13:28:45 CEST 2000 Werner Koch * mail-signed-keys: New. Tue May 23 09:19:00 CEST 2000 Werner Koch * ring-a-party: New. Thu Jul 8 16:21:27 CEST 1999 Werner Koch * lspgpot: New 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. Copyright 1998, 1999, 2000, 2001, 2007 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/tools/ring-a-party0000755000175000017500000000536212635262326013254 00000000000000#!/bin/sh # ring-a-party - print a keyring suitable for a key signing party # Copyright (C) 2000, 2001 Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if [ $# -lt 1 ]; then echo "usage: ring-a-party keyring [headerline]" >&2 exit 1 fi keyring="$1" hdrline="$1" if [ $# -gt 1 ]; then hdrline="$2" fi if [ ! -f $keyring ]; then echo "ring-a-party: '$keyring': no such file" >&2 exit 1 fi echo "ring-a-party: output will be written to 'a.pub'" >&2 gpg --dry-run --with-fingerprint --with-colons $keyring \ | gawk -v "KEYRING=$hdrline" ' BEGIN { FS=":" algos[1] = "RSA"; algos[16] = "Elgamal"; algos[17] = "DSA"; any = 0; lines = -1; page = 0; now = strftime("%b %d %H:%M %Y"); } END { if (any) myflush(); } $1 == "pub" { if( any ) myflush(); uidcount = 0; signencrypt = 0; uids[uidcount++] = $10; nbits = $3; keyid = substr($5,9); created = $6; expires = $7; algostr = mapalgo($4); if( $4 == 20 || $4 == 1 ) signencrypt = 1; any = 1; } $1 == "fpr" { fpr = $10 } $1 == "uid" { uids[uidcount++] = $10 } $1 == "sub" { if( $4 != 17 && $4 != 3 ) signencrypt=1 } function myflush() { # fixme: take lines to print here into account if( lines > 45 || lines == -1 ) { if( lines != -1 ) printf "\f"; page++; printf "%s %-50.50s Page %d\n\n", now, KEYRING, page ; printf " Type Bits KeyID Created Expires Algorithm Use\n\n"; lines = 1; } printf "[ ] pub %04d 0x%s %10s %10s %-10s %15s\n", nbits, keyid, created, expires == ""? "----------":expires, algostr, signencrypt == 1? "Sign & Encrypt":"Sign only"; length(fpr) == 40 ? printfpr20( fpr ) : printfpr16( fpr ); lnes += 2; for( i=0; i < uidcount; i++ ) { printf "( ) uid %s\n", uids[i]; lines++; } printf "\n\n"; lines += 2; } function mapalgo( no ) { if( no in algos ) return algos[no]; return sprintf( "algoID=%ds", no ); } function printfpr16( s ) { printf " f16 Fingerprint16 ="; for(i=0; i < 16; i++ ) { if( i == 8 ) printf " "; printf " %s", substr( s, i*2+1, 2 ); } printf "\n" } function printfpr20( s ) { printf " f20 Fingerprint20 ="; for(i=0; i < 10; i++ ) { if( i == 5 ) printf " "; printf " %s", substr( s, i*4+1, 4 ); } printf "\n" } ' | tee a.pub | gpg --print-mds gnupg-1.4.20/tools/lspgpot0000755000175000017500000000207112352573031012416 00000000000000#!/bin/sh # lspgpot - script to extract the ownertrust values # from PGP keyrings and list them in GnuPG ownertrust format. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. if ! gpg --version > /dev/null 2>&1 ; then echo "GnuPG not available!" exit 1 fi gpg --dry-run --with-fingerprint --with-colons $* | awk ' BEGIN { FS=":" printf "# Ownertrust listing generated by lspgpot\n" printf "# This can be imported using the command:\n" printf "# gpg --import-ownertrust\n\n" } $1 == "fpr" { fpr = $10 } $1 == "rtv" && $2 == 1 && $3 == 2 { printf "%s:3:\n", fpr; next } $1 == "rtv" && $2 == 1 && $3 == 5 { printf "%s:4:\n", fpr; next } $1 == "rtv" && $2 == 1 && $3 == 6 { printf "%s:5:\n", fpr; next } ' gnupg-1.4.20/tools/gpg-zip.in0000644000175000017500000000634712635216117012722 00000000000000#!/bin/sh # gpg-archive - gpg-ized tar using the same format as PGP's PGP Zip. # Copyright (C) 2005 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 3 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, see . # Despite the name, PGP Zip format is actually an OpenPGP-wrapped tar # file. To be compatible with PGP itself, this must be a USTAR format # tar file. Unclear on whether there is a distinction here between # the GNU or POSIX variant of USTAR. VERSION=@VERSION@ TAR=@TAR@ GPG=gpg usage="\ Usage: gpg-zip [--help] [--version] [--encrypt] [--decrypt] [--symmetric] [--list-archive] [--output FILE] [--gpg GPG] [--gpg-args ARGS] [--tar TAR] [--tar-args ARGS] filename1 [filename2, ...] directory1 [directory2, ...] Encrypt or sign files into an archive." while test $# -gt 0 ; do case $1 in -h | --help | --h*) echo "$usage" exit 0 ;; --list-archive) list=yes create=no unpack=no shift ;; --encrypt | -e) gpg_args="$gpg_args --encrypt" list=no create=yes unpack=no shift ;; --decrypt | -d) gpg_args="$gpg_args --decrypt" list=no create=no unpack=yes shift ;; --symmetric | -c) gpg_args="$gpg_args --symmetric" list=no create=yes unpack=no shift ;; --sign | -s) gpg_args="$gpg_args --sign" list=no create=yes unpack=no shift ;; --recipient | -r) gpg_args="$gpg_args --recipient $2" shift shift ;; --local-user | -u) gpg_args="$gpg_args --local-user $2" shift shift ;; --output | -o) gpg_args="$gpg_args --output $2" shift shift ;; --version) echo "gpg-zip (GnuPG) $VERSION" exit 0 ;; --gpg) GPG=$1 shift ;; --gpg-args) gpg_args="$gpg_args $2" shift shift ;; --tar) TAR=$1 shift ;; --tar-args) tar_args="$tar_args $2" shift shift ;; --) shift break ;; -*) echo "$usage" 1>&2 exit 1 ;; *) break ;; esac done if test x$create = xyes ; then # echo "$TAR -cf - "$@" | $GPG --set-filename x.tar $gpg_args" 1>&2 $TAR -cf - "$@" | $GPG --set-filename x.tar $gpg_args elif test x$list = xyes ; then # echo "cat \"$1\" | $GPG $gpg_args | $TAR $tar_args -tf -" 1>&2 cat "$1" | $GPG $gpg_args | $TAR $tar_args -tf - elif test x$unpack = xyes ; then # echo "cat \"$1\" | $GPG $gpg_args | $TAR $tar_args -xvf -" 1>&2 cat "$1" | $GPG $gpg_args | $TAR $tar_args -xvf - else echo "$usage" 1>&2 exit 1 fi gnupg-1.4.20/tools/shmtest.c0000644000175000017500000001056612635262326012651 00000000000000/* shmtest.c * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is free software; as a special exception the author gives * unlimited permission to copy and/or distribute it, with or without * modifications, as long as this notice is preserved. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #include #include #ifdef HAVE_SYS_IPC_H #include #include #endif #ifdef HAVE_SYS_SHM_H #include #endif #include "util.h" #include "ttyio.h" #include "i18n.h" #ifdef HAVE_DOSISH_SYSTEM int main( int argc, char **argv ) { fprintf(stderr, "Sorry, not yet available for DOSish systems\n"); exit(1); } #else static int serverpid = -1; static void my_usage(void) { fprintf(stderr, "usage: shmtest gpg-command-line\n"); exit(1); } const char * strusage( int level ) { return default_strusage(level); } static void i18n_init(void) { #ifdef ENABLE_NLS setlocale( LC_ALL, "" ); bindtextdomain (PACKAGE, LOCALEDIR); textdomain( PACKAGE ); #endif } static void do_get_string( int mode, const char *keyword, byte *area, size_t areasize ) { size_t n, len; char *p=NULL; int yes=0; n = area[0] << 8 | area[1]; /* fixme: do some sanity checks here */ if( mode == 1 ) p = tty_get( keyword ); else if( mode == 3 ) p = tty_get_hidden( keyword ); else yes = tty_get_answer_is_yes( keyword ); if( p ) { len = strlen(p); memcpy( area+n+2, p, len ); area[n] = len >> 8; area[n+1] = len; xfree(p); } else { /* bool */ area[n] = 0; area[n+1] = 1; area[n+2] = yes; } area[3] = 1; /* we should better use a semaphore */ kill( serverpid, SIGUSR1 ); } int main(int argc, char **argv) { void *area = NULL; size_t areasize = 4096; int shm_id = -1; FILE *fp; char buf[200]; char *p, *p2; size_t n; int i; log_set_name("shmtest"); i18n_init(); #ifndef USE_SHM_COPROCESSING log_info("SHM_COPRPOCESSING is not available\n"); #else if( argc < 1 ) my_usage(); for(n=0,i=1; i < argc; i++ ) n += strlen(argv[i]) + 1; p = xmalloc( 100 + n ); strcpy( p, "../g10/gpg --status-fd 1 --run-as-shm-coprocess 0"); for(i=1; i < argc; i++ ) { strcat(p, " " ); strcat(p, argv[i] ); } fp = popen( p, "r" ); xfree( p ); if( !fp ) log_error("popen failed: %s\n", strerror(errno)); while ( fgets (buf, sizeof (buf) - 1, fp ) != NULL ) { size_t len = strlen(buf); if( len >= 9 && !memcmp( buf, "[GNUPG:] ", 9 ) ) { int word=0; int is_info = 0, is_get = 0; for( p = strtok(buf+9, " \n"); p ; p = strtok(NULL, " \n")) { word++; if( word==1 && !strcmp(p,"SHM_INFO") ) { if( !area ) is_info=1; else log_error("duplicate SHM_INFO ignored\n" ); } else if( is_info && (p2 = strchr(p, '=' )) ) { int val; *p2++ = 0; val = atoi(p2); /* should be atou() for some values */ if( !strcmp(p, "pv" ) ) { if( atoi(p2) != 1 ) log_fatal("invalid protocol version %d\n", val ); is_info = 2; } else if( !strcmp(p, "pid" ) ) serverpid = val; else if( !strcmp(p, "shmid" ) ) shm_id = val; } else if( word == 1 && !strcmp(p,"SHM_GET") ) is_get = 1; else if( word == 1 && !strcmp(p,"SHM_GET_BOOL") ) is_get = 2; else if( word == 1 && !strcmp(p,"SHM_GET_HIDDEN") ) is_get = 3; else if( word == 2 && is_get ) { do_get_string( is_get, p, area, areasize ); break; } else if( word == 1 ) log_info("Status: %s\n", p); } if( is_info ) { if( is_info < 2 ) log_fatal("SHM info without protocol version\n"); if( serverpid == -1 ) log_fatal("SHM info without server's pid\n"); if( shm_id == -1 ) log_fatal("SHM info without id\n"); log_info("Shared memory info: server=%d shm_id=%d\n", serverpid, shm_id); area = shmat( shm_id, 0, 0 ); if( area == (void*)-1 ) log_fatal("attach to shared memory failed: %s\n", strerror(errno)); } } else fputs (buf, stdout); } if( pclose(fp) ) log_error("pclose failed\n"); return 0; #endif } #endif gnupg-1.4.20/tools/Makefile.am0000644000175000017500000000315112635262326013042 00000000000000# Copyright (C) 1998, 1999, 2000, 2001, 2003, # 2004 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 3 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, see . ## Process this file with automake to produce Makefile.in EXTRA_DIST = lspgpot ring-a-party mail-signed-keys convert-from-106 AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/intl if ! HAVE_DOSISH_SYSTEM AM_CPPFLAGS += -DLOCALEDIR="\"$(localedir)\"" endif needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a other_libs = $(LIBICONV) $(LIBINTL) $(CAPLIBS) bin_PROGRAMS = gpgsplit noinst_PROGRAMS = mpicalc bftest clean-sat mk-tdata shmtest make-dns-cert if HAVE_USTAR bin_SCRIPTS = gpg-zip endif if HAVE_SHM noinst_PROGRAMS += shmtest endif gpgsplit_LDADD = $(needed_libs) $(other_libs) @ZLIBS@ mpicalc_LDADD = $(needed_libs) $(other_libs) @W32LIBS@ bftest_LDADD = $(needed_libs) $(other_libs) @W32LIBS@ @DLLIBS@ @NETLIBS@ @LIBREADLINE@ shmtest_LDADD = $(needed_libs) $(other_libs) @LIBREADLINE@ gpgsplit mpicalc bftest shmtest: $(needed_libs) gnupg-1.4.20/tools/Makefile.in0000644000175000017500000007132412635457153013066 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 1998, 1999, 2000, 2001, 2003, # 2004 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 3 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, see . VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_DOSISH_SYSTEM_FALSE@am__append_1 = -DLOCALEDIR="\"$(localedir)\"" bin_PROGRAMS = gpgsplit$(EXEEXT) noinst_PROGRAMS = mpicalc$(EXEEXT) bftest$(EXEEXT) clean-sat$(EXEEXT) \ mk-tdata$(EXEEXT) shmtest$(EXEEXT) make-dns-cert$(EXEEXT) \ $(am__EXEEXT_1) @HAVE_SHM_TRUE@am__append_2 = shmtest subdir = tools DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs $(srcdir)/gpg-zip.in \ $(top_srcdir)/scripts/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = gpg-zip CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" @HAVE_SHM_TRUE@am__EXEEXT_1 = shmtest$(EXEEXT) PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) bftest_SOURCES = bftest.c bftest_OBJECTS = bftest.$(OBJEXT) am__DEPENDENCIES_1 = am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) bftest_DEPENDENCIES = $(needed_libs) $(am__DEPENDENCIES_2) clean_sat_SOURCES = clean-sat.c clean_sat_OBJECTS = clean-sat.$(OBJEXT) clean_sat_LDADD = $(LDADD) gpgsplit_SOURCES = gpgsplit.c gpgsplit_OBJECTS = gpgsplit.$(OBJEXT) gpgsplit_DEPENDENCIES = $(needed_libs) $(am__DEPENDENCIES_2) make_dns_cert_SOURCES = make-dns-cert.c make_dns_cert_OBJECTS = make-dns-cert.$(OBJEXT) make_dns_cert_LDADD = $(LDADD) mk_tdata_SOURCES = mk-tdata.c mk_tdata_OBJECTS = mk-tdata.$(OBJEXT) mk_tdata_LDADD = $(LDADD) mpicalc_SOURCES = mpicalc.c mpicalc_OBJECTS = mpicalc.$(OBJEXT) mpicalc_DEPENDENCIES = $(needed_libs) $(am__DEPENDENCIES_2) shmtest_SOURCES = shmtest.c shmtest_OBJECTS = shmtest.$(OBJEXT) shmtest_DEPENDENCIES = $(needed_libs) $(am__DEPENDENCIES_2) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } SCRIPTS = $(bin_SCRIPTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = bftest.c clean-sat.c gpgsplit.c make-dns-cert.c mk-tdata.c \ mpicalc.c shmtest.c DIST_SOURCES = bftest.c clean-sat.c gpgsplit.c make-dns-cert.c \ mk-tdata.c mpicalc.c shmtest.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = lspgpot ring-a-party mail-signed-keys convert-from-106 AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir)/intl \ $(am__append_1) needed_libs = ../cipher/libcipher.a ../mpi/libmpi.a ../util/libutil.a other_libs = $(LIBICONV) $(LIBINTL) $(CAPLIBS) @HAVE_USTAR_TRUE@bin_SCRIPTS = gpg-zip gpgsplit_LDADD = $(needed_libs) $(other_libs) @ZLIBS@ mpicalc_LDADD = $(needed_libs) $(other_libs) @W32LIBS@ bftest_LDADD = $(needed_libs) $(other_libs) @W32LIBS@ @DLLIBS@ @NETLIBS@ @LIBREADLINE@ shmtest_LDADD = $(needed_libs) $(other_libs) @LIBREADLINE@ all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tools/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu tools/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): gpg-zip: $(top_builddir)/config.status $(srcdir)/gpg-zip.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) installcheck-binPROGRAMS: $(bin_PROGRAMS) bad=0; pid=$$$$; list="$(bin_PROGRAMS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | \ sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) bftest$(EXEEXT): $(bftest_OBJECTS) $(bftest_DEPENDENCIES) $(EXTRA_bftest_DEPENDENCIES) @rm -f bftest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(bftest_OBJECTS) $(bftest_LDADD) $(LIBS) clean-sat$(EXEEXT): $(clean_sat_OBJECTS) $(clean_sat_DEPENDENCIES) $(EXTRA_clean_sat_DEPENDENCIES) @rm -f clean-sat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(clean_sat_OBJECTS) $(clean_sat_LDADD) $(LIBS) gpgsplit$(EXEEXT): $(gpgsplit_OBJECTS) $(gpgsplit_DEPENDENCIES) $(EXTRA_gpgsplit_DEPENDENCIES) @rm -f gpgsplit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gpgsplit_OBJECTS) $(gpgsplit_LDADD) $(LIBS) make-dns-cert$(EXEEXT): $(make_dns_cert_OBJECTS) $(make_dns_cert_DEPENDENCIES) $(EXTRA_make_dns_cert_DEPENDENCIES) @rm -f make-dns-cert$(EXEEXT) $(AM_V_CCLD)$(LINK) $(make_dns_cert_OBJECTS) $(make_dns_cert_LDADD) $(LIBS) mk-tdata$(EXEEXT): $(mk_tdata_OBJECTS) $(mk_tdata_DEPENDENCIES) $(EXTRA_mk_tdata_DEPENDENCIES) @rm -f mk-tdata$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mk_tdata_OBJECTS) $(mk_tdata_LDADD) $(LIBS) mpicalc$(EXEEXT): $(mpicalc_OBJECTS) $(mpicalc_DEPENDENCIES) $(EXTRA_mpicalc_DEPENDENCIES) @rm -f mpicalc$(EXEEXT) $(AM_V_CCLD)$(LINK) $(mpicalc_OBJECTS) $(mpicalc_LDADD) $(LIBS) shmtest$(EXEEXT): $(shmtest_OBJECTS) $(shmtest_DEPENDENCIES) $(EXTRA_shmtest_DEPENDENCIES) @rm -f shmtest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(shmtest_OBJECTS) $(shmtest_LDADD) $(LIBS) install-binSCRIPTS: $(bin_SCRIPTS) @$(NORMAL_INSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n' \ -e 'h;s|.*|.|' \ -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) { files[d] = files[d] " " $$1; \ if (++n[d] == $(am__install_max)) { \ print "f", d, files[d]; n[d] = 0; files[d] = "" } } \ else { print "f", d "/" $$4, $$1 } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binSCRIPTS: @$(NORMAL_UNINSTALL) @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 's,.*/,,;$(transform)'`; \ dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir) installcheck-binSCRIPTS: $(bin_SCRIPTS) bad=0; pid=$$$$; list="$(bin_SCRIPTS)"; for p in $$list; do \ case ' $(AM_INSTALLCHECK_STD_OPTIONS_EXEMPT) ' in \ *" $$p "* | *" $(srcdir)/$$p "*) continue;; \ esac; \ f=`echo "$$p" | sed 's,^.*/,,;$(transform)'`; \ for opt in --help --version; do \ if "$(DESTDIR)$(bindir)/$$f" $$opt >c$${pid}_.out \ 2>c$${pid}_.err &2; bad=1; fi; \ done; \ done; rm -f c$${pid}_.???; exit $$bad mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bftest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clean-sat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gpgsplit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make-dns-cert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mk-tdata.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpicalc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/shmtest.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(SCRIPTS) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-binSCRIPTS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: installcheck-binPROGRAMS installcheck-binSCRIPTS maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-binSCRIPTS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am \ installcheck-binPROGRAMS installcheck-binSCRIPTS installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-binSCRIPTS gpgsplit mpicalc bftest shmtest: $(needed_libs) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/tools/convert-from-1060000755000175000017500000000275012352573031013657 00000000000000#!/bin/sh # Copyright (C) 2002, 2004 Free Software Foundation, Inc. # # This program 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 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . if ! gpg --version > /dev/null 2>&1 ; then echo "GnuPG not available!" exit 1 fi gpg="gpg --no-greeting --no-secmem-warning" echo "This script converts your public keyring and trustdb from GnuPG" echo "1.0.6 or earlier to the 1.0.7 and later format." echo "If you have already done this, there is no harm (but no point)" echo "in doing it again." echo -n "Continue? (y/N)" read answer if test "x$answer" != "xy" ; then exit 0 fi echo echo "Marking your keys as ultimately trusted" for key in `$gpg --with-colons --list-secret-keys | grep sec: | cut -d: -f5` do $gpg --trusted-key $key --with-colons --list-keys $key > /dev/null 2>&1 echo -n "." done echo echo echo "Adding signature caches" $gpg --rebuild-keydb-caches echo echo "Checking trustdb" $gpg --check-trustdb echo echo "Done!" gnupg-1.4.20/tools/mpicalc.c0000644000175000017500000001731112635262326012565 00000000000000/* mpicalc.c - test the mpi functions * Copyright (C) 1997, 1998, 1999, 2004, 2006 Werner Koch * * This is an RPN calculator; values must be given in hex. * Operation is like dc(1) except that the input/output radix is * always 16 and you can use a '-' to prefix a negative number. * Addition operators: ++ and --. All operators must be delimited by a blank * * WARNING: This is an old test utility which is not anymore * maintained as part of GnuPG. However, Libgcrypt has a * copy of it which uses the libgcrypt functions. * * 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 3 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, see . */ #include #include #include #include #include "util.h" #include "mpi.h" #include "i18n.h" #define STACKSIZE 100 static MPI stack[STACKSIZE]; static int stackidx; const char * strusage( int level ) { const char *p; switch( level ) { case 10: case 0: p = "mpicalc - v" VERSION "; " "Copyright 1997 Werner Koch (dd9jn)" ; break; case 13: p = "mpicalc"; break; case 14: p = VERSION; break; case 1: case 11: p = "Usage: mpicalc (-h for help)"; break; case 2: case 12: p = "\nSyntax: mpicalc [options] [files]\n" "MPI RPN calculator\n"; break; default: p = default_strusage(level); } return p; } static void i18n_init(void) { #ifdef ENABLE_NLS setlocale( LC_ALL, "" ); bindtextdomain (PACKAGE, LOCALEDIR); textdomain( PACKAGE ); #endif } static void do_add(void) { if( stackidx < 2 ) { fputs("stack underflow\n",stderr); return; } mpi_add( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] ); stackidx--; } static void do_sub(void) { if( stackidx < 2 ) { fputs("stack underflow\n", stderr); return; } mpi_sub( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] ); stackidx--; } static void do_inc(void) { if( stackidx < 1 ) { fputs("stack underflow\n", stderr); return; } mpi_add_ui( stack[stackidx-1], stack[stackidx-1], 1 ); } static void do_dec(void) { if( stackidx < 1 ) { fputs("stack underflow\n", stderr); return; } /* mpi_sub_ui( stack[stackidx-1], stack[stackidx-1], 1 ); */ } static void do_mul(void) { if( stackidx < 2 ) { fputs("stack underflow\n", stderr); return; } mpi_mul( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] ); stackidx--; } static void do_mulm(void) { if( stackidx < 3 ) { fputs("stack underflow\n", stderr); return; } mpi_mulm( stack[stackidx-3], stack[stackidx-3], stack[stackidx-2], stack[stackidx-1] ); stackidx -= 2; } static void do_div(void) { if( stackidx < 2 ) { fputs("stack underflow\n", stderr); return; } mpi_fdiv_q( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] ); stackidx--; } static void do_rem(void) { if( stackidx < 2 ) { fputs("stack underflow\n", stderr); return; } mpi_fdiv_r( stack[stackidx-2], stack[stackidx-2], stack[stackidx-1] ); stackidx--; } static void do_powm(void) { MPI a; if( stackidx < 3 ) { fputs("stack underflow\n", stderr); return; } a= mpi_alloc(10); mpi_powm( a, stack[stackidx-3], stack[stackidx-2], stack[stackidx-1] ); mpi_free(stack[stackidx-3]); stack[stackidx-3] = a; stackidx -= 2; } static void do_inv(void) { MPI a = mpi_alloc(40); if( stackidx < 2 ) { fputs("stack underflow\n", stderr); return; } mpi_invm( a, stack[stackidx-2], stack[stackidx-1] ); mpi_set(stack[stackidx-2],a); mpi_free(a); stackidx--; } static void do_gcd(void) { MPI a = mpi_alloc(40); if( stackidx < 2 ) { fputs("stack underflow\n", stderr); return; } mpi_gcd( a, stack[stackidx-2], stack[stackidx-1] ); mpi_set(stack[stackidx-2],a); mpi_free(a); stackidx--; } static void do_rshift(void) { if( stackidx < 1 ) { fputs("stack underflow\n", stderr); return; } mpi_rshift( stack[stackidx-1],stack[stackidx-1], 1 ); } int main(int argc, char **argv) { static ARGPARSE_OPTS opts[] = { {0} }; ARGPARSE_ARGS pargs; int i, c; int state = 0; char strbuf[1000]; int stridx=0; pargs.argc = &argc; pargs.argv = &argv; pargs.flags = 0; i18n_init(); while( arg_parse( &pargs, opts) ) { switch( pargs.r_opt ) { default : pargs.err = 2; break; } } if( argc ) usage(1); for(i=0; i < STACKSIZE; i++ ) stack[i] = NULL; stackidx =0; while( (c=getc(stdin)) != EOF ) { if( !state ) { /* waiting */ if( isdigit(c) ) { state = 1; ungetc(c, stdin); strbuf[0] = '0'; strbuf[1] = 'x'; stridx=2; } else if( isspace(c) ) ; else { switch(c) { case '+': if( (c=getc(stdin)) == '+' ) do_inc(); else { ungetc(c, stdin); do_add(); } break; case '-': if( (c=getc(stdin)) == '-' ) do_dec(); else if( isdigit(c) || (c >='A' && c <= 'F') ) { state = 1; ungetc(c, stdin); strbuf[0] = '-'; strbuf[1] = '0'; strbuf[2] = 'x'; stridx=3; } else { ungetc(c, stdin); do_sub(); } break; case '*': do_mul(); break; case 'm': do_mulm(); break; case '/': do_div(); break; case '%': do_rem(); break; case '^': do_powm(); break; case 'I': do_inv(); break; case 'G': do_gcd(); break; case '>': do_rshift(); break; case 'i': /* dummy */ if( !stackidx ) fputs("stack underflow\n", stderr); else { mpi_free(stack[stackidx-1]); stackidx--; } break; case 'd': /* duplicate the tos */ if( !stackidx ) fputs("stack underflow\n", stderr); else if( stackidx < STACKSIZE ) { mpi_free(stack[stackidx]); stack[stackidx] = mpi_copy( stack[stackidx-1] ); stackidx++; } else fputs("stack overflow\n", stderr); break; case 'c': for(i=0; i < stackidx; i++ ) mpi_free(stack[i]), stack[i] = NULL; stackidx = 0; break; case 'p': /* print the tos */ if( !stackidx ) puts("stack is empty"); else { mpi_print(stdout, stack[stackidx-1], 1 ); putchar('\n'); } break; case 'f': /* print the stack */ for( i = stackidx-1 ; i >= 0; i-- ) { printf("[%2d]: ", i ); mpi_print(stdout, stack[i], 1 ); putchar('\n'); } break; default: fputs("invalid operator\n", stderr); } } } else if( state == 1 ) { /* in a number */ if( !isxdigit(c) ) { /* store the number */ state = 0; ungetc(c, stdin); if( stridx < 1000 ) strbuf[stridx] = 0; if( stackidx < STACKSIZE ) { if( !stack[stackidx] ) stack[stackidx] = mpi_alloc(10); if( mpi_fromstr(stack[stackidx], strbuf) ) fputs("invalid number\n", stderr); else stackidx++; } else fputs("stack overflow\n", stderr); } else { /* store digit */ if( stridx < 999 ) strbuf[stridx++] = c; else if( stridx == 999 ) { strbuf[stridx] = 0; fputs("string too large - truncated\n", stderr); stridx++; } } } } for(i=0; i < stackidx; i++ ) mpi_free(stack[i]); return 0; } gnupg-1.4.20/tools/bftest.c0000644000175000017500000000460212635262326012443 00000000000000/* bftest.c - Blowfish test program * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #ifdef HAVE_DOSISH_SYSTEM #include #include #endif #include "util.h" #include "cipher.h" #include "i18n.h" static void my_usage(void) { fprintf(stderr, "usage: bftest [-e][-d] algo key\n"); exit(1); } const char * strusage( int level ) { return default_strusage(level); } static void i18n_init(void) { #ifdef ENABLE_NLS setlocale( LC_ALL, "" ); bindtextdomain (PACKAGE, LOCALEDIR); textdomain( PACKAGE ); #endif } int main(int argc, char **argv) { int encode=0; CIPHER_HANDLE hd; char buf[4096]; int n, size=4096; int algo; #ifdef HAVE_DOSISH_SYSTEM setmode( fileno(stdin), O_BINARY ); setmode( fileno(stdout), O_BINARY ); #endif i18n_init(); if( argc > 1 && !strcmp(argv[1], "-e") ) { encode++; argc--; argv++; } else if( argc > 1 && !strcmp(argv[1], "-E") ) { encode++; argc--; argv++; size = 10; } else if( argc > 1 && !strcmp(argv[1], "-d") ) { argc--; argv++; } else if( argc > 1 && !strcmp(argv[1], "-D") ) { argc--; argv++; size = 10; } if( argc != 3 ) my_usage(); argc--; argv++; algo = string_to_cipher_algo( *argv ); argc--; argv++; hd = cipher_open( algo, CIPHER_MODE_CFB, 0 ); cipher_setkey( hd, *argv, strlen(*argv) ); cipher_setiv( hd, NULL, 0 ); while( (n = fread( buf, 1, size, stdin )) > 0 ) { if( encode ) cipher_encrypt( hd, buf, buf, n ); else cipher_decrypt( hd, buf, buf, n ); if( fwrite( buf, 1, n, stdout) != n ) log_fatal("write error\n"); } cipher_close(hd); return 0; } gnupg-1.4.20/tools/gpgsplit.c0000644000175000017500000004741512635262326013016 00000000000000/* gpgsplit.c - An OpenPGP packet splitting tool * Copyright (C) 2001, 2002, 2003 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 3 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, see . */ /* * TODO: Add an option to uncompress packets. This should come quite handy. */ #include #include #include #include #include #include #include #include #ifdef HAVE_DOSISH_SYSTEM # include /* for setmode() */ #endif #include #ifdef HAVE_BZIP2 #include #endif /* HAVE_BZIP2 */ #if defined(__riscos__) && defined(USE_ZLIBRISCOS) # include "zlib-riscos.h" #endif #define INCLUDED_BY_MAIN_MODULE 1 #include "../g10/packet.h" #include "util.h" static int opt_verbose; static const char *opt_prefix = ""; static int opt_uncompress; static int opt_secret_to_public; static int opt_no_split; static void g10_exit( int rc ); static void split_packets (const char *fname); enum cmd_and_opt_values { aNull = 0, oVerbose = 'v', oPrefix = 'p', oUncompress = 500, oSecretToPublic, oNoSplit, aTest }; static ARGPARSE_OPTS opts[] = { { 301, NULL, 0, "@Options:\n " }, { oVerbose, "verbose", 0, "verbose" }, { oPrefix, "prefix", 2, "|STRING|Prepend filenames with STRING" }, { oUncompress, "uncompress", 0, "uncompress a packet"}, { oSecretToPublic, "secret-to-public", 0, "convert secret keys to public keys"}, { oNoSplit, "no-split", 0, "write to stdout and don't actually split"}, {0} }; const char * strusage( int level ) { const char *p; switch (level) { case 11: p = "gpgsplit (GnuPG)"; break; case 13: p = VERSION; break; case 17: p = PRINTABLE_OS_NAME; break; case 19: p = "Please report bugs to .\n"; break; case 1: case 40: p = "Usage: gpgsplit [options] [files] (-h for help)"; break; case 41: p = "Syntax: gpgsplit [options] [files]\n" "Split an OpenPGP message into packets\n"; break; default: p = default_strusage(level); } return p; } int main( int argc, char **argv ) { ARGPARSE_ARGS pargs; #ifdef HAVE_DOSISH_SYSTEM setmode( fileno(stdin), O_BINARY ); setmode( fileno(stdout), O_BINARY ); #endif log_set_name("gpgsplit"); pargs.argc = &argc; pargs.argv = &argv; pargs.flags= 1; /* do not remove the args */ while (optfile_parse( NULL, NULL, NULL, &pargs, opts)) { switch (pargs.r_opt) { case oVerbose: opt_verbose = 1; break; case oPrefix: opt_prefix = pargs.r.ret_str; break; case oUncompress: opt_uncompress = 1; break; case oSecretToPublic: opt_secret_to_public = 1; break; case oNoSplit: opt_no_split = 1; break; default : pargs.err = 2; break; } } if (log_get_errorcount(0)) g10_exit (2); if (!argc) split_packets (NULL); else { for ( ;argc; argc--, argv++) split_packets (*argv); } g10_exit (0); return 0; } static void g10_exit (int rc) { rc = rc? rc : log_get_errorcount(0)? 2 : 0; exit(rc ); } static const char * pkttype_to_string (int pkttype) { const char *s; switch (pkttype) { case PKT_PUBKEY_ENC : s = "pk_enc"; break; case PKT_SIGNATURE : s = "sig"; break; case PKT_SYMKEY_ENC : s = "sym_enc"; break; case PKT_ONEPASS_SIG : s = "onepass_sig"; break; case PKT_SECRET_KEY : s = "secret_key"; break; case PKT_PUBLIC_KEY : s = "public_key"; break; case PKT_SECRET_SUBKEY : s = "secret_subkey"; break; case PKT_COMPRESSED : s = opt_uncompress? "uncompressed":"compressed"; break; case PKT_ENCRYPTED : s = "encrypted"; break; case PKT_MARKER : s = "marker"; break; case PKT_PLAINTEXT : s = "plaintext"; break; case PKT_RING_TRUST : s = "ring_trust"; break; case PKT_USER_ID : s = "user_id"; break; case PKT_PUBLIC_SUBKEY : s = "public_subkey"; break; case PKT_OLD_COMMENT : s = "old_comment"; break; case PKT_ATTRIBUTE : s = "attribute"; break; case PKT_ENCRYPTED_MDC : s = "encrypted_mdc"; break; case PKT_MDC : s = "mdc"; break; case PKT_COMMENT : s = "comment"; break; case PKT_GPG_CONTROL : s = "gpg_control"; break; default: s = "unknown"; break; } return s; } /* * Create a new filename and a return a pointer to a statically * allocated buffer */ static char * create_filename (int pkttype) { static unsigned int partno = 0; static char *name; if (!name) name = xmalloc (strlen (opt_prefix) + 100 ); assert (pkttype < 1000 && pkttype >= 0 ); partno++; sprintf (name, "%s%06u-%03d" EXTSEP_S "%.40s", opt_prefix, partno, pkttype, pkttype_to_string (pkttype)); return name; } static int read_u16 (FILE *fp, size_t *rn) { int c; if ( (c = getc (fp)) == EOF ) return -1; *rn = c << 8; if ( (c = getc (fp)) == EOF ) return -1; *rn |= c; return 0; } static int read_u32 (FILE *fp, unsigned long *rn) { size_t tmp; if (read_u16 (fp, &tmp)) return -1; *rn = tmp << 16; if (read_u16 (fp, &tmp)) return -1; *rn |= tmp; return 0; } static int write_old_header (FILE *fp, int pkttype, unsigned int len) { int ctb = (0x80 | ((pkttype & 15)<<2)); if (len < 256) ; else if (len < 65536) ctb |= 1; else ctb |= 2; if ( putc ( ctb, fp) == EOF ) return -1; if ( (ctb & 2) ) { if (putc ((len>>24), fp) == EOF) return -1; if (putc ((len>>16), fp) == EOF) return -1; } if ( (ctb & 3) ) { if (putc ((len>>8), fp) == EOF) return -1; } if (putc ((len&0xff), fp) == EOF) return -1; return 0; } static int write_new_header (FILE *fp, int pkttype, unsigned int len) { if ( putc ((0xc0 | (pkttype & 0x3f)), fp) == EOF ) return -1; if (len < 192) { if (putc (len, fp) == EOF) return -1; } else if (len < 8384) { len -= 192; if (putc ((len/256)+192, fp) == EOF) return -1; if (putc ((len%256), fp) == EOF) return -1; } else { if (putc ( 0xff, fp) == EOF) return -1; if (putc ( (len >> 24), fp) == EOF) return -1; if (putc ( (len >> 16), fp) == EOF) return -1; if (putc ( (len >> 8), fp) == EOF) return -1; if (putc ( (len & 0xff), fp) == EOF) return -1; } return 0; } /* Return the length of the public key given BUF of BUFLEN with a secret key. */ static int public_key_length (const unsigned char *buf, size_t buflen) { const unsigned char *s; int nmpis; /* byte version number (3 or 4) u32 creation time [u16 valid days (version 3 only)] byte algorithm n MPIs (n and e) */ if (!buflen) return 0; if (buf[0] < 2 || buf[0] > 4) return 0; /* wrong version number */ if (buflen < (buf[0] == 4? 6:8)) return 0; s = buf + (buf[0] == 4? 6:8); buflen -= (buf[0] == 4? 6:8); switch (s[-1]) { case 1: case 2: case 3: nmpis = 2; break; case 16: case 20: nmpis = 3; break; case 17: nmpis = 4; break; default: return 0; } for (; nmpis; nmpis--) { unsigned int nbits, nbytes; if (buflen < 2) return 0; nbits = (s[0] << 8) | s[1]; s += 2; buflen -= 2; nbytes = (nbits+7) / 8; if (buflen < nbytes) return 0; s += nbytes; buflen -= nbytes; } return s - buf; } static int handle_zlib(int algo,FILE *fpin,FILE *fpout) { z_stream zs; byte *inbuf, *outbuf; unsigned int inbufsize, outbufsize; int c,zinit_done, zrc, nread, count; size_t n; memset (&zs, 0, sizeof zs); inbufsize = 2048; inbuf = xmalloc (inbufsize); outbufsize = 8192; outbuf = xmalloc (outbufsize); zs.avail_in = 0; zinit_done = 0; do { if (zs.avail_in < inbufsize) { n = zs.avail_in; if (!n) zs.next_in = (Bytef *) inbuf; count = inbufsize - n; for (nread=0; nread < count && (c=getc (fpin)) != EOF; nread++) inbuf[n+nread] = c; n += nread; if (nread < count && algo == 1) { inbuf[n] = 0xFF; /* chew dummy byte */ n++; } zs.avail_in = n; } zs.next_out = (Bytef *) outbuf; zs.avail_out = outbufsize; if (!zinit_done) { zrc = (algo == 1? inflateInit2 ( &zs, -13) : inflateInit ( &zs )); if (zrc != Z_OK) { log_fatal ("zlib problem: %s\n", zs.msg? zs.msg : zrc == Z_MEM_ERROR ? "out of core" : zrc == Z_VERSION_ERROR ? "invalid lib version" : "unknown error" ); } zinit_done = 1; } else { #ifdef Z_SYNC_FLUSH zrc = inflate (&zs, Z_SYNC_FLUSH); #else zrc = inflate (&zs, Z_PARTIAL_FLUSH); #endif if (zrc == Z_STREAM_END) ; /* eof */ else if (zrc != Z_OK && zrc != Z_BUF_ERROR) { if (zs.msg) log_fatal ("zlib inflate problem: %s\n", zs.msg ); else log_fatal ("zlib inflate problem: rc=%d\n", zrc ); } for (n=0; n < outbufsize - zs.avail_out; n++) { if (putc (outbuf[n], fpout) == EOF ) return 1; } } } while (zrc != Z_STREAM_END && zrc != Z_BUF_ERROR); inflateEnd (&zs); return 0; } #ifdef HAVE_BZIP2 static int handle_bzip2(int algo,FILE *fpin,FILE *fpout) { bz_stream bzs; byte *inbuf, *outbuf; unsigned int inbufsize, outbufsize; int c,zinit_done, zrc, nread, count; size_t n; memset (&bzs, 0, sizeof bzs); inbufsize = 2048; inbuf = xmalloc (inbufsize); outbufsize = 8192; outbuf = xmalloc (outbufsize); bzs.avail_in = 0; zinit_done = 0; do { if (bzs.avail_in < inbufsize) { n = bzs.avail_in; if (!n) bzs.next_in = inbuf; count = inbufsize - n; for (nread=0; nread < count && (c=getc (fpin)) != EOF; nread++) inbuf[n+nread] = c; n += nread; if (nread < count && algo == 1) { inbuf[n] = 0xFF; /* chew dummy byte */ n++; } bzs.avail_in = n; } bzs.next_out = outbuf; bzs.avail_out = outbufsize; if (!zinit_done) { zrc = BZ2_bzDecompressInit(&bzs,0,0); if (zrc != BZ_OK) log_fatal ("bz2lib problem: %d\n",zrc); zinit_done = 1; } else { zrc = BZ2_bzDecompress(&bzs); if (zrc == BZ_STREAM_END) ; /* eof */ else if (zrc != BZ_OK && zrc != BZ_PARAM_ERROR) log_fatal ("bz2lib inflate problem: %d\n", zrc ); for (n=0; n < outbufsize - bzs.avail_out; n++) { if (putc (outbuf[n], fpout) == EOF ) return 1; } } } while (zrc != BZ_STREAM_END && zrc != BZ_PARAM_ERROR); BZ2_bzDecompressEnd(&bzs); return 0; } #endif /* HAVE_BZIP2 */ /* hdr must point to a buffer large enough to hold all header bytes */ static int write_part ( const char *fname, FILE *fpin, unsigned long pktlen, int pkttype, int partial, unsigned char *hdr, size_t hdrlen) { FILE *fpout; int c, first; unsigned char *p; const char *outname = create_filename (pkttype); #if defined(__riscos__) && defined(USE_ZLIBRISCOS) static int initialized = 0; if (!initialized) initialized = riscos_load_module("ZLib", zlib_path, 1); #endif if (opt_no_split) fpout = stdout; else { if (opt_verbose) log_info ("writing `%s'\n", outname); fpout = fopen (outname, "wb"); if (!fpout) { log_error ("error creating `%s': %s\n", outname, strerror(errno)); /* stop right now, otherwise we would mess up the sequence of the part numbers */ g10_exit (1); } } if (opt_secret_to_public && (pkttype == PKT_SECRET_KEY || pkttype == PKT_SECRET_SUBKEY)) { unsigned char *blob = xmalloc (pktlen); int i, len; pkttype = pkttype == PKT_SECRET_KEY? PKT_PUBLIC_KEY:PKT_PUBLIC_SUBKEY; for (i=0; i < pktlen; i++) { c = getc (fpin); if (c == EOF) goto read_error; blob[i] = c; } len = public_key_length (blob, pktlen); if (!len) { log_error ("error calcualting public key length\n"); g10_exit (1); } if ( (hdr[0] & 0x40) ) { if (write_new_header (fpout, pkttype, len)) goto write_error; } else { if (write_old_header (fpout, pkttype, len)) goto write_error; } for (i=0; i < len; i++) { if ( putc (blob[i], fpout) == EOF ) goto write_error; } goto ready; } if (!opt_uncompress) { for (p=hdr; hdrlen; p++, hdrlen--) { if ( putc (*p, fpout) == EOF ) goto write_error; } } first = 1; while (partial) { size_t partlen; if (partial == 1) { /* openpgp */ if (first ) { c = pktlen; assert( c >= 224 && c < 255 ); first = 0; } else if ((c = getc (fpin)) == EOF ) goto read_error; else hdr[hdrlen++] = c; if (c < 192) { pktlen = c; partial = 0; /* (last segment may follow) */ } else if (c < 224 ) { pktlen = (c - 192) * 256; if ((c = getc (fpin)) == EOF) goto read_error; hdr[hdrlen++] = c; pktlen += c + 192; partial = 0; } else if (c == 255) { if (read_u32 (fpin, &pktlen)) goto read_error; hdr[hdrlen++] = pktlen >> 24; hdr[hdrlen++] = pktlen >> 16; hdr[hdrlen++] = pktlen >> 8; hdr[hdrlen++] = pktlen; partial = 0; } else { /* next partial body length */ for (p=hdr; hdrlen; p++, hdrlen--) { if ( putc (*p, fpout) == EOF ) goto write_error; } partlen = 1 << (c & 0x1f); for (; partlen; partlen--) { if ((c = getc (fpin)) == EOF) goto read_error; if ( putc (c, fpout) == EOF ) goto write_error; } } } else if (partial == 2) { /* old gnupg */ assert (!pktlen); if ( read_u16 (fpin, &partlen) ) goto read_error; hdr[hdrlen++] = partlen >> 8; hdr[hdrlen++] = partlen; for (p=hdr; hdrlen; p++, hdrlen--) { if ( putc (*p, fpout) == EOF ) goto write_error; } if (!partlen) partial = 0; /* end of packet */ for (; partlen; partlen--) { c = getc (fpin); if (c == EOF) goto read_error; if ( putc (c, fpout) == EOF ) goto write_error; } } else { /* compressed: read to end */ pktlen = 0; partial = 0; hdrlen = 0; if (opt_uncompress) { if ((c = getc (fpin)) == EOF) goto read_error; if(c==1 || c==2) { if(handle_zlib(c,fpin,fpout)) goto write_error; } #ifdef HAVE_BZIP2 else if(c==3) { if(handle_bzip2(c,fpin,fpout)) goto write_error; } #endif /* HAVE_BZIP2 */ else { log_error("invalid compression algorithm (%d)\n",c); goto read_error; } } else { while ( (c=getc (fpin)) != EOF ) { if ( putc (c, fpout) == EOF ) goto write_error; } } if (!feof (fpin)) goto read_error; } } for (p=hdr; hdrlen; p++, hdrlen--) { if ( putc (*p, fpout) == EOF ) goto write_error; } /* standard packet or last segment of partial length encoded packet */ for (; pktlen; pktlen--) { c = getc (fpin); if (c == EOF) goto read_error; if ( putc (c, fpout) == EOF ) goto write_error; } ready: if ( !opt_no_split && fclose (fpout) ) log_error ("error closing `%s': %s\n", outname, strerror (errno)); return 0; write_error: log_error ("error writing `%s': %s\n", outname, strerror (errno)); if (!opt_no_split) fclose (fpout); return 2; read_error: if (!opt_no_split) { int save = errno; fclose (fpout); errno = save; } return -1; } static int do_split (const char *fname, FILE *fp) { int c, ctb, pkttype; unsigned long pktlen = 0; int partial = 0; unsigned char header[20]; int header_idx = 0; ctb = getc (fp); if (ctb == EOF) return 3; /* ready */ header[header_idx++] = ctb; if (!(ctb & 0x80)) { log_error("invalid CTB %02x\n", ctb ); return 1; } if ( (ctb & 0x40) ) { /* new CTB */ pkttype = (ctb & 0x3f); if( (c = getc (fp)) == EOF ) return -1; header[header_idx++] = c; if ( c < 192 ) pktlen = c; else if ( c < 224 ) { pktlen = (c - 192) * 256; if( (c = getc (fp)) == EOF ) return -1; header[header_idx++] = c; pktlen += c + 192; } else if ( c == 255 ) { if (read_u32 (fp, &pktlen)) return -1; header[header_idx++] = pktlen >> 24; header[header_idx++] = pktlen >> 16; header[header_idx++] = pktlen >> 8; header[header_idx++] = pktlen; } else { /* partial body length */ pktlen = c; partial = 1; } } else { int lenbytes; pkttype = (ctb>>2)&0xf; lenbytes = ((ctb&3)==3)? 0 : (1<<(ctb & 3)); if (!lenbytes ) { pktlen = 0; /* don't know the value */ if( pkttype == PKT_COMPRESSED ) partial = 3; else partial = 2; /* the old GnuPG partial length encoding */ } else { for ( ; lenbytes; lenbytes-- ) { pktlen <<= 8; if( (c = getc (fp)) == EOF ) return -1; header[header_idx++] = c; pktlen |= c; } } } return write_part (fname, fp, pktlen, pkttype, partial, header, header_idx); } static void split_packets (const char *fname) { FILE *fp; int rc; if (!fname || !strcmp (fname, "-")) { fp = stdin; fname = "-"; } else if ( !(fp = fopen (fname,"rb")) ) { log_error ("can't open `%s': %s\n", fname, strerror (errno)); return; } while ( !(rc = do_split (fname, fp)) ) ; if ( rc > 0 ) ; /* error already handled */ else if ( ferror (fp) ) log_error ("error reading `%s': %s\n", fname, strerror (errno)); else log_error ("premature EOF while reading `%s'\n", fname ); if ( fp != stdin ) fclose (fp); } gnupg-1.4.20/tools/make-dns-cert.c0000644000175000017500000001071712635262326013612 00000000000000/* make-dns-cert.c - An OpenPGP-to-DNS CERT conversion tool * Copyright (C) 2006 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 3 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, see . */ #include #include #ifdef HAVE_GETOPT_H #include #endif #include #include #include #include #include #include #include /* We use TYPE37 instead of CERT since not all nameservers can handle CERT yet... */ static int cert_key(const char *name,const char *keyfile) { int fd,ret=1,err,i; struct stat statbuf; fd=open(keyfile,O_RDONLY); if(fd==-1) { fprintf(stderr,"Cannot open key file %s: %s\n",keyfile,strerror(errno)); return 1; } err=fstat(fd,&statbuf); if(err==-1) { fprintf(stderr,"Unable to stat key file %s: %s\n", keyfile,strerror(errno)); goto fail; } if(statbuf.st_size>65536) { fprintf(stderr,"Key %s too large for CERT encoding\n",keyfile); goto fail; } if(statbuf.st_size>16384) fprintf(stderr,"Warning: key file %s is larger than the default" " GnuPG max-cert-size\n",keyfile); printf("%s\tTYPE37\t\\# %u 0003 0000 00 ", name,(unsigned int)statbuf.st_size+5); err=1; while(err!=0) { unsigned char buffer[1024]; err=read(fd,buffer,1024); if(err==-1) { fprintf(stderr,"Unable to read key file %s: %s\n", keyfile,strerror(errno)); goto fail; } for(i=0;i= 'A' && *tmp <= 'F') || (*tmp >= 'a' && *tmp <= 'f') || (*tmp >= '0' && *tmp <= '9')) { fprlen++; } else if (*tmp != ' ' && *tmp != '\t') { fprintf(stderr,"Fingerprint must consist of only hex digits" " and whitespace\n"); return 1; } tmp++; } if(fprlen%2) { fprintf(stderr,"Fingerprint must be an even number of characters\n"); return 1; } fprlen/=2; len+=fprlen; } if(url) len+=strlen(url); if(!fpr && !url) { fprintf(stderr, "Cannot generate a CERT without either a fingerprint or URL\n"); return 1; } printf("%s\tTYPE37\t\\# %d 0006 0000 00 %02X",name,len,fprlen); if(fpr) printf(" %s",fpr); if(url) { const char *c; printf(" "); for(c=url;*c;c++) printf("%02X",*c); } printf("\n"); return 0; } static void usage(FILE *stream) { fprintf(stream,"make-dns-cert\n"); fprintf(stream,"\t-f\tfingerprint\n"); fprintf(stream,"\t-u\tURL\n"); fprintf(stream,"\t-k\tkey file\n"); fprintf(stream,"\t-n\tDNS name\n"); } int main(int argc,char *argv[]) { int arg,err=1; char *fpr=NULL,*url=NULL,*keyfile=NULL,*name=NULL; if(argc==1) { usage(stderr); return 1; } else if(argc>1 && strcmp(argv[1],"--version")==0) { printf("make-dns-cert (GnuPG) " VERSION "\n"); return 0; } else if(argc>1 && strcmp(argv[1],"--help")==0) { usage(stdout); return 0; } while((arg=getopt(argc,argv,"hf:u:k:n:"))!=-1) switch(arg) { default: case 'h': usage(stdout); exit(0); case 'f': fpr=optarg; break; case 'u': url=optarg; break; case 'k': keyfile=optarg; break; case 'n': name=optarg; break; } if(!name) { fprintf(stderr,"No name provided\n"); return 1; } if(keyfile && (fpr || url)) { fprintf(stderr,"Cannot generate a CERT record with both a keyfile and" " a fingerprint or URL\n"); return 1; } if(keyfile) err=cert_key(name,keyfile); else err=url_key(name,fpr,url); return err; } gnupg-1.4.20/tools/clean-sat.c0000644000175000017500000000141212635262326013017 00000000000000/* clean-sat.c * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is free software; as a special exception the author gives * unlimited permission to copy and/or distribute it, with or without * modifications, as long as this notice is preserved. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include int main(int argc, char **argv) { int c; if( argc > 1 ) { fprintf(stderr, "no arguments, please\n"); return 1; } while( (c=getchar()) == '\n' ) ; while( c != EOF ) { putchar(c); c = getchar(); } return 0; } gnupg-1.4.20/tools/mk-tdata.c0000644000175000017500000000270012635262326012653 00000000000000/* mk-tdata.c - Create some simple random testdata * Copyright (C) 1998, 1999, 2000, 2001, 2006 Free Software Foundation, Inc. * * This file is free software; as a special exception the author gives * unlimited permission to copy and/or distribute it, with or without * modifications, as long as this notice is preserved. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ #include #include #include #include #include #ifndef RAND_MAX /* for SunOS */ #define RAND_MAX 32767 #endif int main(int argc, char **argv) { int i, c = 0; int limit =0; int char_mode = 0; if (argc) { argc--; argv++; } /* Check for option --char N */ if (argc > 1 && !strcmp (argv[0], "--char")) { char_mode = 1; c = strtol (argv[1], NULL, 0); argc -= 2; argv += 2; } limit = argc ? atoi(argv[0]) : 0; srand(getpid()); for (i=0; !limit || i < limit; i++ ) { if (char_mode) { putchar (c); } else { #ifdef HAVE_RAND c = ((unsigned)(1 + (int) (256.0*rand()/(RAND_MAX+1.0)))-1); #else c = ((unsigned)(1 + (int) (256.0*random()/(RAND_MAX+1.0)))-1); #endif putchar (c); } } return 0; } gnupg-1.4.20/acinclude.m40000644000175000017500000005636612635262326012057 00000000000000# macros to configure gnupg # Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2006, 2007, # 2008 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 3 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, see . dnl GNUPG_MSG_PRINT(STRING) dnl print a message dnl define(GNUPG_MSG_PRINT, [ echo $ac_n "$1"" $ac_c" 1>&AC_FD_MSG ]) dnl GNUPG_CHECK_TYPEDEF(TYPE, HAVE_NAME) dnl Check whether a typedef exists and create a #define $2 if it exists dnl AC_DEFUN([GNUPG_CHECK_TYPEDEF], [ AC_MSG_CHECKING(for $1 typedef) AC_CACHE_VAL(gnupg_cv_typedef_$1, [AC_TRY_COMPILE([#define _GNU_SOURCE 1 #include #include ], [ #undef $1 int a = sizeof($1); ], gnupg_cv_typedef_$1=yes, gnupg_cv_typedef_$1=no )]) AC_MSG_RESULT($gnupg_cv_typedef_$1) if test "$gnupg_cv_typedef_$1" = yes; then AC_DEFINE($2,1,[Defined if a `]$1[' is typedef'd]) fi ]) # GNUPG_TIME_T_UNSIGNED # Check whether time_t is unsigned # AC_DEFUN([GNUPG_TIME_T_UNSIGNED], [ AC_CACHE_CHECK(whether time_t is unsigned, gnupg_cv_time_t_unsigned, [AC_REQUIRE([AC_HEADER_TIME])dnl AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY( [AC_INCLUDES_DEFAULT([]) #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif ], [((time_t)-1) < 0])], gnupg_cv_time_t_unsigned=no, gnupg_cv_time_t_unsigned=yes)]) if test $gnupg_cv_time_t_unsigned = yes; then AC_DEFINE(HAVE_UNSIGNED_TIME_T,1,[Defined if time_t is an unsigned type]) fi ])# GNUPG_TIME_T_UNSIGNED dnl GNUPG_CHECK_GNUMAKE dnl AC_DEFUN([GNUPG_CHECK_GNUMAKE], [ if ${MAKE-make} --version 2>/dev/null | grep '^GNU ' >/dev/null 2>&1; then : else AC_MSG_WARN([[ *** *** It seems that you are not using GNU make. Some make tools have serious *** flaws and you may not be able to build this software at all. Before you *** complain, please try GNU make: GNU make is easy to build and available *** at all GNU archives. It is always available from ftp.gnu.org:/gnu/make. ***]]) fi ]) dnl GNUPG_CHECK_FAQPROG dnl AC_DEFUN([GNUPG_CHECK_FAQPROG], [ AC_MSG_CHECKING(for faqprog.pl) if faqprog.pl -V 2>/dev/null | grep '^faqprog.pl ' >/dev/null 2>&1; then working_faqprog=yes FAQPROG="faqprog.pl" else working_faqprog=no FAQPROG=": " fi AC_MSG_RESULT($working_faqprog) AC_SUBST(FAQPROG) AM_CONDITIONAL(WORKING_FAQPROG, test "$working_faqprog" = "yes" ) dnl if test $working_faqprog = no; then dnl AC_MSG_WARN([[ dnl *** dnl *** It seems that the faqprog.pl program is not installed; dnl *** however it is only needed if you want to change the FAQ. dnl *** (faqprog.pl should be available at: dnl *** ftp://ftp.gnupg.org/gcrypt/contrib/faqprog.pl ) dnl *** No need to worry about this warning. dnl ***]]) dnl fi ]) dnl GNUPG_CHECK_ENDIAN dnl define either LITTLE_ENDIAN_HOST or BIG_ENDIAN_HOST dnl define([GNUPG_CHECK_ENDIAN], [ tmp_assumed_endian=big if test "$cross_compiling" = yes; then case "$host_cpu" in i@<:@345678@:>@* ) tmp_assumed_endian=little ;; *) ;; esac AC_MSG_WARN(cross compiling; assuming $tmp_assumed_endian endianess) fi AC_MSG_CHECKING(endianess) AC_CACHE_VAL(gnupg_cv_c_endian, [ gnupg_cv_c_endian=unknown # See if sys/param.h defines the BYTE_ORDER macro. AC_TRY_COMPILE([#include #include ], [ #if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN bogus endian macros #endif], [# It does; now see whether it defined to BIG_ENDIAN or not. AC_TRY_COMPILE([#include #include ], [ #if BYTE_ORDER != BIG_ENDIAN not big endian #endif], gnupg_cv_c_endian=big, gnupg_cv_c_endian=little)]) if test "$gnupg_cv_c_endian" = unknown; then AC_TRY_RUN([main () { /* Are we little or big endian? From Harbison&Steele. */ union { long l; char c[sizeof (long)]; } u; u.l = 1; exit (u.c[sizeof (long) - 1] == 1); }], gnupg_cv_c_endian=little, gnupg_cv_c_endian=big, gnupg_cv_c_endian=$tmp_assumed_endian ) fi ]) AC_MSG_RESULT([$gnupg_cv_c_endian]) if test "$gnupg_cv_c_endian" = little; then AC_DEFINE(LITTLE_ENDIAN_HOST,1, [Defined if the host has little endian byte ordering]) else AC_DEFINE(BIG_ENDIAN_HOST,1, [Defined if the host has big endian byte ordering]) fi ]) dnl GNUPG_CHECK_CACHE dnl define(GNUPG_CHECK_CACHE, [ AC_MSG_CHECKING(cached information) gnupg_hostcheck="$target" AC_CACHE_VAL(gnupg_cv_hostcheck, [ gnupg_cv_hostcheck="$gnupg_hostcheck" ]) if test "$gnupg_cv_hostcheck" != "$gnupg_hostcheck"; then AC_MSG_RESULT(changed) AC_MSG_WARN(config.cache exists!) AC_MSG_ERROR(you must do 'make distclean' first to compile for different target or different parameters.) else AC_MSG_RESULT(ok) fi ]) ###################################################################### # Check for -fPIC etc (taken from libtool) # This sets CFLAGS_PIC to the required flags # NO_PIC to yes if it is not possible to # generate PIC ###################################################################### dnl GNUPG_CHECK_PIC dnl define(GNUPG_CHECK_PIC, [ AC_MSG_CHECKING(for option to create PIC) CFLAGS_PIC= NO_PIC=no if test "$cross_compiling" = yes; then AC_MSG_RESULT(assume none) else if test "$GCC" = yes; then CFLAGS_PIC="-fPIC" else case "$host_os" in aix3* | aix4*) # All rs/6000 code is PIC # but is there any non-rs/6000 AIX platform? ;; hpux9* | hpux10*) CFLAGS_PIC="+Z" ;; irix5* | irix6*) # PIC (with -KPIC) is the default. ;; osf3* | osf4*) # FIXME - pic_flag is probably required for # hppa*-osf* and i860-osf* ;; sco3.2v5*) CFLAGS_PIC='-Kpic' ;; solaris2* | solaris7* ) CFLAGS_PIC='-KPIC' ;; sunos4*) CFLAGS_PIC='-PIC' ;; *) NO_PIC=yes ;; esac fi case "$host_cpu" in rs6000 | powerpc | powerpcle) # Yippee! All RS/6000 and PowerPC code is position-independent. CFLAGS_PIC="" ;; esac if test "$NO_PIC" = yes; then AC_MSG_RESULT(not possible) else if test -z "$CFLAGS_PIC"; then AC_MSG_RESULT(none) else AC_MSG_RESULT($CFLAGS_PIC) fi fi fi ]) ###################################################################### # Check for export-dynamic flag # This sets CFLAGS_EXPORTDYNAMIC to the required flags ###################################################################### dnl GNUPG_CHECK_EXPORTDYNAMIC dnl define(GNUPG_CHECK_EXPORTDYNAMIC, [ AC_MSG_CHECKING(how to specify -export-dynamic) if test "$cross_compiling" = yes; then AC_MSG_RESULT(assume none) CFLAGS_EXPORTDYNAMIC="" else AC_CACHE_VAL(gnupg_cv_export_dynamic,[ if AC_TRY_COMMAND([${CC-cc} $CFLAGS -Wl,--version 2>&1 | grep "GNU ld" >/dev/null]); then # using gnu's linker gnupg_cv_export_dynamic="-Wl,-export-dynamic" else case "$host_os" in hpux* ) gnupg_cv_export_dynamic="-Wl,-E" ;; * ) gnupg_cv_export_dynamic="" ;; esac fi ]) AC_MSG_RESULT($gnupg_cv_export_dynamic) CFLAGS_EXPORTDYNAMIC="$gnupg_cv_export_dynamic" fi ]) ##################################################################### # Check for SysV IPC (from GIMP) # And see whether we have a SHM_LOCK (FreeBSD does not have it). ##################################################################### dnl GNUPG_CHECK_IPC dnl define(GNUPG_CHECK_IPC, [ AC_CHECK_HEADERS(sys/ipc.h sys/shm.h) if test "$ac_cv_header_sys_shm_h" = "yes"; then AC_MSG_CHECKING(whether IPC_RMID allowes subsequent attaches) AC_CACHE_VAL(gnupg_cv_ipc_rmid_deferred_release, AC_TRY_RUN([ #include #include #include int main() { int id; char *shmaddr; id = shmget (IPC_PRIVATE, 4, IPC_CREAT | 0777); if (id == -1) exit (2); shmaddr = shmat (id, 0, 0); shmctl (id, IPC_RMID, 0); if ((char*) shmat (id, 0, 0) == (char*) -1) { shmdt (shmaddr); exit (1); } shmdt (shmaddr); shmdt (shmaddr); exit (0); } ], gnupg_cv_ipc_rmid_deferred_release="yes", gnupg_cv_ipc_rmid_deferred_release="no", gnupg_cv_ipc_rmid_deferred_release="assume-no") ) if test "$gnupg_cv_ipc_rmid_deferred_release" = "yes"; then AC_DEFINE(IPC_RMID_DEFERRED_RELEASE,1, [Defined if we can do a deferred shm release]) AC_MSG_RESULT(yes) else if test "$gnupg_cv_ipc_rmid_deferred_release" = "no"; then AC_MSG_RESULT(no) else AC_MSG_RESULT([assuming no]) fi fi AC_MSG_CHECKING(whether SHM_LOCK is available) AC_CACHE_VAL(gnupg_cv_ipc_have_shm_lock, AC_TRY_COMPILE([#include #include #include ],[ int shm_id; shmctl(shm_id, SHM_LOCK, 0); ], gnupg_cv_ipc_have_shm_lock="yes", gnupg_cv_ipc_have_shm_lock="no" ) ) if test "$gnupg_cv_ipc_have_shm_lock" = "yes"; then AC_DEFINE(IPC_HAVE_SHM_LOCK,1, [Defined if a SysV shared memory supports the LOCK flag]) AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) fi fi ]) ###################################################################### # Check whether mlock is broken (hpux 10.20 raises a SIGBUS if mlock # is not called from uid 0 (not tested whether uid 0 works) # For DECs Tru64 we have also to check whether mlock is in librt # mlock is there a macro using memlk() ###################################################################### dnl GNUPG_CHECK_MLOCK dnl define(GNUPG_CHECK_MLOCK, [ AC_CHECK_FUNCS(mlock) if test "$ac_cv_func_mlock" = "no"; then AC_CHECK_HEADERS(sys/mman.h) if test "$ac_cv_header_sys_mman_h" = "yes"; then # Add librt to LIBS: AC_CHECK_LIB(rt, memlk) AC_CACHE_CHECK([whether mlock is in sys/mman.h], gnupg_cv_mlock_is_in_sys_mman, [AC_TRY_LINK([ #include #ifdef HAVE_SYS_MMAN_H #include #endif ], [ int i; /* glibc defines this for functions which it implements * to always fail with ENOSYS. Some functions are actually * named something starting with __ and the normal name * is an alias. */ #if defined (__stub_mlock) || defined (__stub___mlock) choke me #else mlock(&i, 4); #endif ; return 0; ], gnupg_cv_mlock_is_in_sys_mman=yes, gnupg_cv_mlock_is_in_sys_mman=no)]) if test "$gnupg_cv_mlock_is_in_sys_mman" = "yes"; then AC_DEFINE(HAVE_MLOCK,1, [Defined if the system supports an mlock() call]) fi fi fi if test "$ac_cv_func_mlock" = "yes"; then AC_CHECK_FUNCS(sysconf getpagesize) AC_MSG_CHECKING(whether mlock is broken) AC_CACHE_VAL(gnupg_cv_have_broken_mlock, AC_TRY_RUN([ #include #include #include #include #include #include int main() { char *pool; int err; long int pgsize; #if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE) pgsize = sysconf(_SC_PAGESIZE); #elif defined(HAVE_GETPAGESIZE) pgsize = getpagesize(); #else pgsize = -1; #endif if(pgsize==-1) pgsize = 4096; pool = malloc( 4096 + pgsize ); if( !pool ) return 2; pool += (pgsize - ((long int)pool % pgsize)); err = mlock( pool, 4096 ); if( !err || errno == EPERM ) return 0; /* okay */ return 1; /* hmmm */ } ], gnupg_cv_have_broken_mlock="no", gnupg_cv_have_broken_mlock="yes", gnupg_cv_have_broken_mlock="assume-no" ) ) if test "$gnupg_cv_have_broken_mlock" = "yes"; then AC_DEFINE(HAVE_BROKEN_MLOCK,1, [Defined if the mlock() call does not work]) AC_MSG_RESULT(yes) AC_CHECK_FUNCS(plock) else if test "$gnupg_cv_have_broken_mlock" = "no"; then AC_MSG_RESULT(no) else AC_MSG_RESULT(assuming no) fi fi fi ]) ################################################################ # GNUPG_PROG_NM - find the path to a BSD-compatible name lister AC_DEFUN([GNUPG_PROG_NM], [AC_MSG_CHECKING([for BSD-compatible nm]) AC_CACHE_VAL(ac_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. ac_cv_path_NM="$NM" else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" for ac_dir in /usr/ucb /usr/ccs/bin $PATH /bin; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/nm; then # Check to see if the nm accepts a BSD-compat flag. # Adding the `sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored if ($ac_dir/nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -B" elif ($ac_dir/nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ac_cv_path_NM="$ac_dir/nm -p" else ac_cv_path_NM="$ac_dir/nm" fi break fi done IFS="$ac_save_ifs" test -z "$ac_cv_path_NM" && ac_cv_path_NM=nm fi]) NM="$ac_cv_path_NM" AC_MSG_RESULT([$NM]) AC_SUBST(NM) ]) # GNUPG_SYS_NM_PARSE - Check for command ro grab the raw symbol name followed # by C symbol name from nm. AC_DEFUN([GNUPG_SYS_NM_PARSE], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([GNUPG_PROG_NM])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output]) AC_CACHE_VAL(ac_cv_sys_global_symbol_pipe, [# These are sane defaults that work on at least a few old systems. # {They come from Ultrix. What could be older than Ultrix?!! ;)} changequote(,)dnl # Character class describing NM global symbol codes. ac_symcode='[BCDEGRSTU]' # Regexp to match symbols that can be accessed directly from C. ac_sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Transform the above into a raw symbol and a C symbol. ac_symxfrm='\1 \1' # Define system-specific variables. case "$host_os" in aix*) ac_symcode='[BCDTU]' ;; freebsd* | netbsd* | openbsd* | bsdi* | sunos* | cygwin32* | mingw32*) ac_sympat='_\([_A-Za-z][_A-Za-z0-9]*\)' ac_symxfrm='_\1 \1' ;; irix*) # Cannot use undefined symbols on IRIX because inlined functions mess us up. ac_symcode='[BCDEGRST]' ;; solaris*) ac_symcode='[BDTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. if $NM -V 2>&1 | egrep '(GNU|with BFD)' > /dev/null; then ac_symcode='[ABCDGISTUW]' fi case "$host_os" in cygwin32* | mingw32*) # We do not want undefined symbols on cygwin32. The user must # arrange to define them via -l arguments. ac_symcode='[ABCDGISTW]' ;; esac changequote([,])dnl # Write the raw and C identifiers. ac_cv_sys_global_symbol_pipe="sed -n -e 's/^.* $ac_symcode $ac_sympat$/$ac_symxfrm/p'" # Check to see that the pipe works correctly. ac_pipe_works=no cat > conftest.$ac_ext < $ac_nlist) && test -s "$ac_nlist"; then # Try sorting and uniquifying the output. if sort "$ac_nlist" | uniq > "$ac_nlist"T; then mv -f "$ac_nlist"T "$ac_nlist" ac_wcout=`wc "$ac_nlist" 2>/dev/null` changequote(,)dnl ac_count=`echo "X$ac_wcout" | sed -e 's,^X,,' -e 's/^[ ]*\([0-9][0-9]*\).*$/\1/'` changequote([,])dnl (test "$ac_count" -ge 0) 2>/dev/null || ac_count=-1 else rm -f "$ac_nlist"T ac_count=-1 fi # Make sure that we snagged all the symbols we need. if egrep ' _?nm_test_var$' "$ac_nlist" >/dev/null; then if egrep ' _?nm_test_func$' "$ac_nlist" >/dev/null; then cat < conftest.c #ifdef __cplusplus extern "C" { #endif EOF # Now generate the symbol file. sed 's/^.* _\{0,1\}\(.*\)$/extern char \1;/' < "$ac_nlist" >> conftest.c cat <> conftest.c #if defined (__STDC__) && __STDC__ # define __ptr_t void * #else # define __ptr_t char * #endif /* The number of symbols in dld_preloaded_symbols, -1 if unsorted. */ int dld_preloaded_symbol_count = $ac_count; /* The mapping between symbol names and symbols. */ struct { char *name; __ptr_t address; } changequote(,)dnl dld_preloaded_symbols[] = changequote([,])dnl { EOF sed 's/^_\{0,1\}\(.*\) _\{0,1\}\(.*\)$/ {"\1", (__ptr_t) \&\2},/' < "$ac_nlist" >> conftest.c cat <<\EOF >> conftest.c {0, (__ptr_t) 0} }; #ifdef __cplusplus } #endif EOF # Now try linking the two files. mv conftest.$ac_objext conftestm.$ac_objext ac_save_LIBS="$LIBS" ac_save_CFLAGS="$CFLAGS" LIBS="conftestm.$ac_objext" CFLAGS="$CFLAGS$no_builtin_flag" if AC_TRY_EVAL(ac_link) && test -s conftest; then ac_pipe_works=yes else echo "configure: failed program was:" >&AC_FD_CC cat conftest.c >&AC_FD_CC fi LIBS="$ac_save_LIBS" CFLAGS="$ac_save_CFLAGS" else echo "cannot find nm_test_func in $ac_nlist" >&AC_FD_CC fi else echo "cannot find nm_test_var in $ac_nlist" >&AC_FD_CC fi else echo "cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC fi else echo "$progname: failed program was:" >&AC_FD_CC cat conftest.c >&AC_FD_CC fi rm -rf conftest* # Do not use the global_symbol_pipe unless it works. test "$ac_pipe_works" = yes || ac_cv_sys_global_symbol_pipe= ]) ac_result=yes if test -z "$ac_cv_sys_global_symbol_pipe"; then ac_result=no fi AC_MSG_RESULT($ac_result) ]) # GNUPG_SYS_LIBTOOL_CYGWIN32 - find tools needed on cygwin32 AC_DEFUN([GNUPG_SYS_LIBTOOL_CYGWIN32], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(AS, as, false) ]) # GNUPG_SYS_SYMBOL_UNDERSCORE - does the compiler prefix global symbols # with an underscore? AC_DEFUN([GNUPG_SYS_SYMBOL_UNDERSCORE], [tmp_do_check="no" case "${host}" in *-mingw32*) ac_cv_sys_symbol_underscore=yes ;; i386-emx-os2 | i[3456]86-pc-os2*emx | i386-pc-msdosdjgpp) ac_cv_sys_symbol_underscore=yes ;; *) if test "$cross_compiling" = yes; then if test "x$ac_cv_sys_symbol_underscore" = x; then ac_cv_sys_symbol_underscore=yes fi else tmp_do_check="yes" fi ;; esac if test "$tmp_do_check" = "yes"; then AC_REQUIRE([GNUPG_PROG_NM])dnl AC_REQUIRE([GNUPG_SYS_NM_PARSE])dnl AC_MSG_CHECKING([for _ prefix in compiled symbols]) AC_CACHE_VAL(ac_cv_sys_symbol_underscore, [ac_cv_sys_symbol_underscore=no cat > conftest.$ac_ext < $ac_nlist) && test -s "$ac_nlist"; then # See whether the symbols have a leading underscore. if egrep '^_nm_test_func' "$ac_nlist" >/dev/null; then ac_cv_sys_symbol_underscore=yes else if egrep '^nm_test_func ' "$ac_nlist" >/dev/null; then : else echo "configure: cannot find nm_test_func in $ac_nlist" >&AC_FD_CC fi fi else echo "configure: cannot run $ac_cv_sys_global_symbol_pipe" >&AC_FD_CC fi else echo "configure: failed program was:" >&AC_FD_CC cat conftest.c >&AC_FD_CC fi rm -rf conftest* ]) else AC_MSG_CHECKING([for _ prefix in compiled symbols]) fi AC_MSG_RESULT($ac_cv_sys_symbol_underscore) if test x$ac_cv_sys_symbol_underscore = xyes; then AC_DEFINE(WITH_SYMBOL_UNDERSCORE,1, [Defined if compiled symbols have a leading underscore]) fi ]) dnl Stolen from gcc dnl Define MKDIR_TAKES_ONE_ARG if mkdir accepts only one argument instead dnl of the usual 2. AC_DEFUN([GNUPG_FUNC_MKDIR_TAKES_ONE_ARG], [AC_CHECK_HEADERS(sys/stat.h unistd.h direct.h) AC_CACHE_CHECK([if mkdir takes one argument], gnupg_cv_mkdir_takes_one_arg, [AC_TRY_COMPILE([ #include #ifdef HAVE_SYS_STAT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_DIRECT_H # include #endif], [mkdir ("foo", 0);], gnupg_cv_mkdir_takes_one_arg=no, gnupg_cv_mkdir_takes_one_arg=yes)]) if test $gnupg_cv_mkdir_takes_one_arg = yes ; then AC_DEFINE(MKDIR_TAKES_ONE_ARG,1, [Defined if mkdir() does not take permission flags]) fi ]) # GNUPG_AC_INIT([PACKAGE, VERSION, [ISDEVEL], BUG-REPORT) # ---------------------------------------- # Call AC_INIT with an additional argument to indicate a development # version. If this is called ""svn", the global revision of the # repository will be appended, so that a version. The variable # SVN_REVISION will always be set. In case svn is not available 0 # will be used for the revision. m4_define([GNUPG_AC_INIT], [ m4_define(gnupg_ac_init_tmp, m4_esyscmd([echo -n $((svn info 2>/dev/null || \ echo 'Revision: 0') |sed -n '/^Revision:/ {s/[^0-9]//gp;q}')])) SVN_REVISION="gnupg_ac_init_tmp[]" AC_INIT([$1], [$2][]m4_ifval([$3],[-[$3][]gnupg_ac_init_tmp],[]), [$4]) ]) gnupg-1.4.20/zlib/0000755000175000017500000000000012635457216010672 500000000000000gnupg-1.4.20/zlib/algorithm.doc0000644000175000017500000001260012635262326013262 000000000000001. Compression algorithm (deflate) The deflation algorithm used by zlib (also zip and gzip) is a variation of LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in the input data. The second occurrence of a string is replaced by a pointer to the previous string, in the form of a pair (distance, length). Distances are limited to 32K bytes, and lengths are limited to 258 bytes. When a string does not occur anywhere in the previous 32K bytes, it is emitted as a sequence of literal bytes. (In this description, `string' must be taken as an arbitrary sequence of bytes, and is not restricted to printable characters.) Literals or match lengths are compressed with one Huffman tree, and match distances are compressed with another tree. The trees are stored in a compact form at the start of each block. The blocks can have any size (except that the compressed data for one block must fit in available memory). A block is terminated when deflate() determines that it would be useful to start another block with fresh trees. (This is somewhat similar to the behavior of LZW-based _compress_.) Duplicated strings are found using a hash table. All input strings of length 3 are inserted in the hash table. A hash index is computed for the next 3 bytes. If the hash chain for this index is not empty, all strings in the chain are compared with the current input string, and the longest match is selected. The hash chains are searched starting with the most recent strings, to favor small distances and thus take advantage of the Huffman encoding. The hash chains are singly linked. There are no deletions from the hash chains, the algorithm simply discards matches that are too old. To avoid a worst-case situation, very long hash chains are arbitrarily truncated at a certain length, determined by a runtime option (level parameter of deflateInit). So deflate() does not always find the longest possible match but generally finds a match which is long enough. deflate() also defers the selection of matches with a lazy evaluation mechanism. After a match of length N has been found, deflate() searches for a longer match at the next input byte. If a longer match is found, the previous match is truncated to a length of one (thus producing a single literal byte) and the longer match is emitted afterwards. Otherwise, the original match is kept, and the next match search is attempted only N steps later. The lazy match evaluation is also subject to a runtime parameter. If the current match is long enough, deflate() reduces the search for a longer match, thus speeding up the whole process. If compression ratio is more important than speed, deflate() attempts a complete second search even if the first match is already long enough. The lazy match evaluation is not performed for the fastest compression modes (level parameter 1 to 3). For these fast modes, new strings are inserted in the hash table only when no match was found, or when the match is not too long. This degrades the compression ratio but saves time since there are both fewer insertions and fewer searches. 2. Decompression algorithm (inflate) The real question is, given a Huffman tree, how to decode fast. The most important realization is that shorter codes are much more common than longer codes, so pay attention to decoding the short codes fast, and let the long codes take longer to decode. inflate() sets up a first level table that covers some number of bits of input less than the length of longest code. It gets that many bits from the stream, and looks it up in the table. The table will tell if the next code is that many bits or less and how many, and if it is, it will tell the value, else it will point to the next level table for which inflate() grabs more bits and tries to decode a longer code. How many bits to make the first lookup is a tradeoff between the time it takes to decode and the time it takes to build the table. If building the table took no time (and if you had infinite memory), then there would only be a first level table to cover all the way to the longest code. However, building the table ends up taking a lot longer for more bits since short codes are replicated many times in such a table. What inflate() does is simply to make the number of bits in the first table a variable, and set it for the maximum speed. inflate() sends new trees relatively often, so it is possibly set for a smaller first level table than an application that has only one tree for all the data. For inflate, which has 286 possible codes for the literal/length tree, the size of the first table is nine bits. Also the distance trees have 30 possible values, and the size of the first table is six bits. Note that for each of those cases, the table ended up one bit longer than the ``average'' code length, i.e. the code length of an approximately flat code which would be a little more than eight bits for 286 symbols and a little less than five bits for 30 symbols. It would be interesting to see if optimizing the first level table for other applications gave values within a bit or two of the flat code size. Jean-loup Gailly Mark Adler gzip@prep.ai.mit.edu madler@alumni.caltech.edu References: [LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, pp. 337-343. ``DEFLATE Compressed Data Format Specification'' available in ftp://ds.internic.net/rfc/rfc1951.txt gnupg-1.4.20/zlib/trees.h0000644000175000017500000002037412635262326012107 00000000000000/* header created automatically with -DGEN_TREES_H */ local const ct_data static_ltree[L_CODES+2] = { {{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, {{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, {{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, {{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, {{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, {{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, {{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, {{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, {{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, {{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, {{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, {{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, {{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, {{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, {{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, {{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, {{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, {{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, {{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, {{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, {{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, {{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, {{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, {{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, {{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, {{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, {{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, {{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, {{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, {{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, {{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, {{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, {{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, {{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, {{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, {{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, {{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, {{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, {{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, {{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, {{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, {{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, {{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, {{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, {{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, {{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, {{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, {{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, {{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, {{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, {{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, {{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, {{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, {{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, {{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, {{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, {{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, {{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} }; local const ct_data static_dtree[D_CODES] = { {{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, {{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, {{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, {{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, {{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, {{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} }; const uch _dist_code[DIST_CODE_LEN] = { 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 }; const uch _length_code[MAX_MATCH-MIN_MATCH+1]= { 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 }; local const int base_length[LENGTH_CODES] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0 }; local const int base_dist[D_CODES] = { 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 }; gnupg-1.4.20/zlib/README0000644000175000017500000001570212635262326011473 00000000000000zlib 1.1.3 is a general purpose data compression library. All the code is thread safe. The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). These documents are also available in other formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html All functions of the compression library are documented in the file zlib.h (volunteer to write man pages welcome, contact jloup@gzip.org). A usage example of the library is given in the file example.c which also tests that the library is working correctly. Another example is given in the file minigzip.c. The compression library itself is composed of all source files except example.c and minigzip.c. To compile all files and run the test program, follow the instructions given at the top of Makefile. In short "make test; make install" should work for most machines. For Unix: "configure; make test; make install" For MSDOS, use one of the special makefiles such as Makefile.msc. For VMS, use Make_vms.com or descrip.mms. Questions about zlib should be sent to , or to Gilles Vollant for the Windows DLL version. The zlib home page is http://www.cdrom.com/pub/infozip/zlib/ The official zlib ftp site is ftp://ftp.cdrom.com/pub/infozip/zlib/ Before reporting a problem, please check those sites to verify that you have the latest version of zlib; otherwise get the latest version and check whether the problem still exists or not. Mark Nelson wrote an article about zlib for the Jan. 1997 issue of Dr. Dobb's Journal; a copy of the article is available in http://web2.airmail.net/markn/articles/zlibtool/zlibtool.htm The changes made in version 1.1.3 are documented in the file ChangeLog. The main changes since 1.1.2 are: - fix "an inflate input buffer bug that shows up on rare but persistent occasions" (Mark) - fix gzread and gztell for concatenated .gz files (Didier Le Botlan) - fix gzseek(..., SEEK_SET) in write mode - fix crc check after a gzeek (Frank Faubert) - fix miniunzip when the last entry in a zip file is itself a zip file (J Lillge) - add contrib/asm586 and contrib/asm686 (Brian Raiter) See http://www.muppetlabs.com/~breadbox/software/assembly.html - add support for Delphi 3 in contrib/delphi (Bob Dellaca) - add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) - do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) - use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) - added a FAQ file plus many changes for portability. Unsupported third party contributions are provided in directory "contrib". A Java implementation of zlib is available in the Java Development Kit 1.1 http://www.javasoft.com/products/JDK/1.1/docs/api/Package-java.util.zip.html See the zlib home page http://www.cdrom.com/pub/infozip/zlib/ for details. A Perl interface to zlib written by Paul Marquess is in the CPAN (Comprehensive Perl Archive Network) sites, such as: ftp://ftp.cis.ufl.edu/pub/perl/CPAN/modules/by-module/Compress/Compress-Zlib* A Python interface to zlib written by A.M. Kuchling is available in Python 1.5 and later versions, see http://www.python.org/doc/lib/module-zlib.html A zlib binding for TCL written by Andreas Kupries is availlable at http://www.westend.com/~kupries/doc/trf/man/man.html An experimental package to read and write files in .zip format, written on top of zlib by Gilles Vollant , is available at http://www.winimage.com/zLibDll/unzip.html and also in the contrib/minizip directory of zlib. Notes for some targets: - To build a Windows DLL version, include in a DLL project zlib.def, zlib.rc and all .c files except example.c and minigzip.c; compile with -DZLIB_DLL The zlib DLL support was initially done by Alessandro Iacopetti and is now maintained by Gilles Vollant . Check the zlib DLL home page at http://www.winimage.com/zLibDll From Visual Basic, you can call the DLL functions which do not take a structure as argument: compress, uncompress and all gz* functions. See contrib/visual-basic.txt for more information, or get http://www.tcfb.com/dowseware/cmp-z-it.zip - For 64-bit Irix, deflate.c must be compiled without any optimization. With -O, one libpng test fails. The test works in 32 bit mode (with the -n32 compiler flag). The compiler bug has been reported to SGI. - zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works when compiled with cc. - on Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is necessary to get gzprintf working correctly. This is done by configure. - zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with other compilers. Use "make test" to check your compiler. - gzdopen is not supported on RISCOS, BEOS and by some Mac compilers. - For Turbo C the small model is supported only with reduced performance to avoid any far allocation; it was tested with -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 - For PalmOs, see http://www.cs.uit.no/~perm/PASTA/pilot/software.html Per Harald Myrvang Acknowledgments: The deflate format used by zlib was defined by Phil Katz. The deflate and zlib specifications were written by L. Peter Deutsch. Thanks to all the people who reported problems and suggested various improvements in zlib; they are too numerous to cite here. Copyright notice: (C) 1995-1998 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu If you use the zlib library in a product, we would appreciate *not* receiving lengthy legal documents to sign. The sources are provided for free but without warranty of any kind. The library has been entirely written by Jean-loup Gailly and Mark Adler; it does not include third-party code. If you redistribute modified sources, we would appreciate that you include in the file ChangeLog history information documenting your changes. gnupg-1.4.20/zlib/infblock.c0000644000175000017500000003022612635262326012544 00000000000000/* infblock.c -- interpret and process block types to last block * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" #include "infblock.h" #include "inftrees.h" #include "infcodes.h" #include "infutil.h" struct inflate_codes_state {int dummy;}; /* for buggy compilers */ /* simplify the use of the inflate_huft type with some defines */ #define exop word.what.Exop #define bits word.what.Bits /* Table for deflate from PKZIP's appnote.txt. */ local const uInt border[] = { /* Order of the bit length code lengths */ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; /* Notes beyond the 1.93a appnote.txt: 1. Distance pointers never point before the beginning of the output stream. 2. Distance pointers can point back across blocks, up to 32k away. 3. There is an implied maximum of 7 bits for the bit length table and 15 bits for the actual data. 4. If only one code exists, then it is encoded using one bit. (Zero would be more efficient, but perhaps a little confusing.) If two codes exist, they are coded using one bit each (0 and 1). 5. There is no way of sending zero distance codes--a dummy must be sent if there are none. (History: a pre 2.0 version of PKZIP would store blocks with no distance codes, but this was discovered to be too harsh a criterion.) Valid only for 1.93a. 2.04c does allow zero distance codes, which is sent as one code of zero bits in length. 6. There are up to 286 literal/length codes. Code 256 represents the end-of-block. Note however that the static length tree defines 288 codes just to fill out the Huffman codes. Codes 286 and 287 cannot be used though, since there is no length base or extra bits defined for them. Similarily, there are up to 30 distance codes. However, static trees define 32 codes (all 5 bits) to fill out the Huffman codes, but the last two had better not show up in the data. 7. Unzip can check dynamic Huffman blocks for complete code sets. The exception is that a single code would not be complete (see #4). 8. The five bits following the block type is really the number of literal codes sent minus 257. 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits (1+6+6). Therefore, to output three times the length, you output three codes (1+1+1), whereas to output four times the same length, you only need two codes (1+3). Hmm. 10. In the tree reconstruction algorithm, Code = Code + Increment only if BitLength(i) is not zero. (Pretty obvious.) 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) 12. Note: length code 284 can represent 227-258, but length code 285 really is 258. The last length deserves its own, short code since it gets used a lot in very redundant files. The length 258 is special since 258 - 3 (the min match length) is 255. 13. The literal/length and distance code bit lengths are read as a single stream of lengths. It is possible (and advantageous) for a repeat code (16, 17, or 18) to go across the boundary between the two sets of lengths. */ void inflate_blocks_reset(s, z, c) inflate_blocks_statef *s; z_streamp z; uLongf *c; { if (c != Z_NULL) *c = s->check; if (s->mode == BTREE || s->mode == DTREE) ZFREE(z, s->sub.trees.blens); if (s->mode == CODES) inflate_codes_free(s->sub.decode.codes, z); s->mode = TYPE; s->bitk = 0; s->bitb = 0; s->read = s->write = s->window; if (s->checkfn != Z_NULL) z->adler = s->check = (*s->checkfn)(0L, (const Bytef *)Z_NULL, 0); Tracev((stderr, "inflate: blocks reset\n")); } inflate_blocks_statef *inflate_blocks_new(z, c, w) z_streamp z; check_func c; uInt w; { inflate_blocks_statef *s; if ((s = (inflate_blocks_statef *)ZALLOC (z,1,sizeof(struct inflate_blocks_state))) == Z_NULL) return s; if ((s->hufts = (inflate_huft *)ZALLOC(z, sizeof(inflate_huft), MANY)) == Z_NULL) { ZFREE(z, s); return Z_NULL; } if ((s->window = (Bytef *)ZALLOC(z, 1, w)) == Z_NULL) { ZFREE(z, s->hufts); ZFREE(z, s); return Z_NULL; } s->end = s->window + w; s->checkfn = c; s->mode = TYPE; Tracev((stderr, "inflate: blocks allocated\n")); inflate_blocks_reset(s, z, Z_NULL); return s; } int inflate_blocks(s, z, r) inflate_blocks_statef *s; z_streamp z; int r; { uInt t; /* temporary storage */ uLong b; /* bit buffer */ uInt k; /* bits in bit buffer */ Bytef *p; /* input data pointer */ uInt n; /* bytes available there */ Bytef *q; /* output window write pointer */ uInt m; /* bytes to end of window or read pointer */ /* copy input/output information to locals (UPDATE macro restores) */ LOAD /* process input based on current state */ while (1) switch (s->mode) { case TYPE: NEEDBITS(3) t = (uInt)b & 7; s->last = t & 1; switch (t >> 1) { case 0: /* stored */ Tracev((stderr, "inflate: stored block%s\n", s->last ? " (last)" : "")); DUMPBITS(3) t = k & 7; /* go to byte boundary */ DUMPBITS(t) s->mode = LENS; /* get length of stored block */ break; case 1: /* fixed */ Tracev((stderr, "inflate: fixed codes block%s\n", s->last ? " (last)" : "")); { uInt bl, bd; inflate_huft *tl, *td; inflate_trees_fixed(&bl, &bd, &tl, &td, z); s->sub.decode.codes = inflate_codes_new(bl, bd, tl, td, z); if (s->sub.decode.codes == Z_NULL) { r = Z_MEM_ERROR; LEAVE } } DUMPBITS(3) s->mode = CODES; break; case 2: /* dynamic */ Tracev((stderr, "inflate: dynamic codes block%s\n", s->last ? " (last)" : "")); DUMPBITS(3) s->mode = TABLE; break; case 3: /* illegal */ DUMPBITS(3) s->mode = BAD; z->msg = (char*)"invalid block type"; r = Z_DATA_ERROR; LEAVE } break; case LENS: NEEDBITS(32) if ((((~b) >> 16) & 0xffff) != (b & 0xffff)) { s->mode = BAD; z->msg = (char*)"invalid stored block lengths"; r = Z_DATA_ERROR; LEAVE } s->sub.left = (uInt)b & 0xffff; b = k = 0; /* dump bits */ Tracev((stderr, "inflate: stored length %u\n", s->sub.left)); s->mode = s->sub.left ? STORED : (s->last ? DRY : TYPE); break; case STORED: if (n == 0) LEAVE NEEDOUT t = s->sub.left; if (t > n) t = n; if (t > m) t = m; zmemcpy(q, p, t); p += t; n -= t; q += t; m -= t; if ((s->sub.left -= t) != 0) break; Tracev((stderr, "inflate: stored end, %lu total out\n", z->total_out + (q >= s->read ? q - s->read : (s->end - s->read) + (q - s->window)))); s->mode = s->last ? DRY : TYPE; break; case TABLE: NEEDBITS(14) s->sub.trees.table = t = (uInt)b & 0x3fff; #ifndef PKZIP_BUG_WORKAROUND if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) { s->mode = BAD; z->msg = (char*)"too many length or distance symbols"; r = Z_DATA_ERROR; LEAVE } #endif t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); if ((s->sub.trees.blens = (uIntf*)ZALLOC(z, t, sizeof(uInt))) == Z_NULL) { r = Z_MEM_ERROR; LEAVE } DUMPBITS(14) s->sub.trees.index = 0; Tracev((stderr, "inflate: table sizes ok\n")); s->mode = BTREE; case BTREE: while (s->sub.trees.index < 4 + (s->sub.trees.table >> 10)) { NEEDBITS(3) s->sub.trees.blens[border[s->sub.trees.index++]] = (uInt)b & 7; DUMPBITS(3) } while (s->sub.trees.index < 19) s->sub.trees.blens[border[s->sub.trees.index++]] = 0; s->sub.trees.bb = 7; t = inflate_trees_bits(s->sub.trees.blens, &s->sub.trees.bb, &s->sub.trees.tb, s->hufts, z); if (t != Z_OK) { r = t; if (r == Z_DATA_ERROR) { ZFREE(z, s->sub.trees.blens); s->mode = BAD; } LEAVE } s->sub.trees.index = 0; Tracev((stderr, "inflate: bits tree ok\n")); s->mode = DTREE; case DTREE: while (t = s->sub.trees.table, s->sub.trees.index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f)) { inflate_huft *h; uInt i, j, c; t = s->sub.trees.bb; NEEDBITS(t) h = s->sub.trees.tb + ((uInt)b & inflate_mask[t]); t = h->bits; c = h->base; if (c < 16) { DUMPBITS(t) s->sub.trees.blens[s->sub.trees.index++] = c; } else /* c == 16..18 */ { i = c == 18 ? 7 : c - 14; j = c == 18 ? 11 : 3; NEEDBITS(t + i) DUMPBITS(t) j += (uInt)b & inflate_mask[i]; DUMPBITS(i) i = s->sub.trees.index; t = s->sub.trees.table; if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) { ZFREE(z, s->sub.trees.blens); s->mode = BAD; z->msg = (char*)"invalid bit length repeat"; r = Z_DATA_ERROR; LEAVE } c = c == 16 ? s->sub.trees.blens[i - 1] : 0; do { s->sub.trees.blens[i++] = c; } while (--j); s->sub.trees.index = i; } } s->sub.trees.tb = Z_NULL; { uInt bl, bd; inflate_huft *tl, *td; inflate_codes_statef *c; bl = 9; /* must be <= 9 for lookahead assumptions */ bd = 6; /* must be <= 9 for lookahead assumptions */ t = s->sub.trees.table; t = inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), s->sub.trees.blens, &bl, &bd, &tl, &td, s->hufts, z); if (t != Z_OK) { if (t == (uInt)Z_DATA_ERROR) { ZFREE(z, s->sub.trees.blens); s->mode = BAD; } r = t; LEAVE } Tracev((stderr, "inflate: trees ok\n")); if ((c = inflate_codes_new(bl, bd, tl, td, z)) == Z_NULL) { r = Z_MEM_ERROR; LEAVE } s->sub.decode.codes = c; } ZFREE(z, s->sub.trees.blens); s->mode = CODES; case CODES: UPDATE if ((r = inflate_codes(s, z, r)) != Z_STREAM_END) return inflate_flush(s, z, r); r = Z_OK; inflate_codes_free(s->sub.decode.codes, z); LOAD Tracev((stderr, "inflate: codes end, %lu total out\n", z->total_out + (q >= s->read ? q - s->read : (s->end - s->read) + (q - s->window)))); if (!s->last) { s->mode = TYPE; break; } s->mode = DRY; case DRY: FLUSH if (s->read != s->write) LEAVE s->mode = DONE; case DONE: r = Z_STREAM_END; LEAVE case BAD: r = Z_DATA_ERROR; LEAVE default: r = Z_STREAM_ERROR; LEAVE } } int inflate_blocks_free(s, z) inflate_blocks_statef *s; z_streamp z; { inflate_blocks_reset(s, z, Z_NULL); ZFREE(z, s->window); ZFREE(z, s->hufts); ZFREE(z, s); Tracev((stderr, "inflate: blocks freed\n")); return Z_OK; } void inflate_set_dictionary(s, d, n) inflate_blocks_statef *s; const Bytef *d; uInt n; { zmemcpy(s->window, d, n); s->read = s->write = s->window + n; } /* Returns true if inflate is currently at the end of a block generated * by Z_SYNC_FLUSH or Z_FULL_FLUSH. * IN assertion: s != Z_NULL */ int inflate_blocks_sync_point(s) inflate_blocks_statef *s; { return s->mode == LENS; } gnupg-1.4.20/zlib/ChangeLog-20110000644000175000017500000006044512635262326012752 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2002-03-12 Werner Koch Merged changes from zlib 1.1.4. Sat Feb 13 12:04:43 CET 1999 Werner Koch * Makefile.am: Removed -Wall Wed Jan 20 21:40:21 CET 1999 Werner Koch * Makefile.am: Corrected the list of sources Wed Jan 13 14:10:15 CET 1999 Werner Koch Merged version 1.1.3 with the previousy used 1.0.4 Thu Feb 12 12:20:45 1998 Werner Koch (wk@frodo) Removed a couple of files, as this is only used if zlib is missing on a system. Added automake stuff ChangeLog file for zlib Changes in 1.1.4 (11 March 2002) - ZFREE was repeated on same allocation on some error conditions. This creates a security problem described in http://www.zlib.org/advisory-2002-03-11.txt - Returned incorrect error (Z_MEM_ERROR) on some invalid data - Avoid accesses before window for invalid distances with inflate window less than 32K. - force windowBits > 8 to avoid a bug in the encoder for a window size of 256 bytes. (A complete fix will be available in 1.1.5). Changes in 1.1.3 (9 July 1998) - fix "an inflate input buffer bug that shows up on rare but persistent occasions" (Mark) - fix gzread and gztell for concatenated .gz files (Didier Le Botlan) - fix gzseek(..., SEEK_SET) in write mode - fix crc check after a gzeek (Frank Faubert) - fix miniunzip when the last entry in a zip file is itself a zip file (J Lillge) - add contrib/asm586 and contrib/asm686 (Brian Raiter) See http://www.muppetlabs.com/~breadbox/software/assembly.html - add support for Delphi 3 in contrib/delphi (Bob Dellaca) - add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) - do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) - use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) - added a FAQ file - Support gzdopen on Mac with Metrowerks (Jason Linhart) - Do not redefine Byte on Mac (Brad Pettit & Jason Linhart) - define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young) - avoid some warnings with Borland C (Tom Tanner) - fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant) - emulate utime() for WIN32 in contrib/untgz (Gilles Vollant) - allow several arguments to configure (Tim Mooney, Frodo Looijaard) - use libdir and includedir in Makefile.in (Tim Mooney) - support shared libraries on OSF1 V4 (Tim Mooney) - remove so_locations in "make clean" (Tim Mooney) - fix maketree.c compilation error (Glenn, Mark) - Python interface to zlib now in Python 1.5 (Jeremy Hylton) - new Makefile.riscos (Rich Walker) - initialize static descriptors in trees.c for embedded targets (Nick Smith) - use "foo-gz" in example.c for RISCOS and VMS (Nick Smith) - add the OS/2 files in Makefile.in too (Andrew Zabolotny) - fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane) - fix maketree.c to allow clean compilation of inffixed.h (Mark) - fix parameter check in deflateCopy (Gunther Nikl) - cleanup trees.c, use compressed_len only in debug mode (Christian Spieler) - Many portability patches by Christian Spieler: . zutil.c, zutil.h: added "const" for zmem* . Make_vms.com: fixed some typos . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists . msdos/Makefile.msc: remove "default rtl link library" info from obj files . msdos/Makefile.*: use model-dependent name for the built zlib library . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc: new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT) - use define instead of typedef for Bytef also for MSC small/medium (Tom Lane) - replace __far with _far for better portability (Christian Spieler, Tom Lane) - fix test for errno.h in configure (Tim Newsham) Changes in 1.1.2 (19 March 98) - added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) See http://www.winimage.com/zLibDll/unzip.html - preinitialize the inflate tables for fixed codes, to make the code completely thread safe (Mark) - some simplifications and slight speed-up to the inflate code (Mark) - fix gzeof on non-compressed files (Allan Schrum) - add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs) - use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn) - added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny) - add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori) - do not wrap extern "C" around system includes (Tom Lane) - mention zlib binding for TCL in README (Andreas Kupries) - added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert) - allow "make install prefix=..." even after configure (Glenn Randers-Pehrson) - allow "configure --prefix $HOME" (Tim Mooney) - remove warnings in example.c and gzio.c (Glenn Randers-Pehrson) - move Makefile.sas to amiga/Makefile.sas Changes in 1.1.1 (27 Feb 98) - fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) - remove block truncation heuristic which had very marginal effect for zlib (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the compression ratio on some files. This also allows inlining _tr_tally for matches in deflate_slow. - added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) Changes in 1.1.0 (24 Feb 98) - do not return STREAM_END prematurely in inflate (John Bowler) - revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) - compile with -DFASTEST to get compression code optimized for speed only - in minigzip, try mmap'ing the input file first (Miguel Albrecht) - increase size of I/O buffers in minigzip.c and gzio.c (not a big gain on Sun but significant on HP) - add a pointer to experimental unzip library in README (Gilles Vollant) - initialize variable gcc in configure (Chris Herborth) Changes in 1.0.9 (17 Feb 1998) - added gzputs and gzgets functions - do not clear eof flag in gzseek (Mark Diekhans) - fix gzseek for files in transparent mode (Mark Diekhans) - do not assume that vsprintf returns the number of bytes written (Jens Krinke) - replace EXPORT with ZEXPORT to avoid conflict with other programs - added compress2 in zconf.h, zlib.def, zlib.dnt - new asm code from Gilles Vollant in contrib/asm386 - simplify the inflate code (Mark): . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new() . ZALLOC the length list in inflate_trees_fixed() instead of using stack . ZALLOC the value area for huft_build() instead of using stack . Simplify Z_FINISH check in inflate() - Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8 - in inftrees.c, avoid cc -O bug on HP (Farshid Elahi) - in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with the declaration of FAR (Gilles VOllant) - install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann) - read_buf buf parameter of type Bytef* instead of charf* - zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout) - do not redeclare unlink in minigzip.c for WIN32 (John Bowler) - fix check for presence of directories in "make install" (Ian Willis) Changes in 1.0.8 (27 Jan 1998) - fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant) - fix gzgetc and gzputc for big endian systems (Markus Oberhumer) - added compress2() to allow setting the compression level - include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) - use constant arrays for the static trees in trees.c instead of computing them at run time (thanks to Ken Raeburn for this suggestion). To create trees.h, compile with GEN_TREES_H and run "make test". - check return code of example in "make test" and display result - pass minigzip command line options to file_compress - simplifying code of inflateSync to avoid gcc 2.8 bug - support CC="gcc -Wall" in configure -s (QingLong) - avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn) - fix test for shared library support to avoid compiler warnings - zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant) - check for TARGET_OS_MAC in addition to MACOS (Brad Pettit) - do not use fdopen for Metrowerks on Mac (Brad Pettit)) - add checks for gzputc and gzputc in example.c - avoid warnings in gzio.c and deflate.c (Andreas Kleinert) - use const for the CRC table (Ken Raeburn) - fixed "make uninstall" for shared libraries - use Tracev instead of Trace in infblock.c - in example.c use correct compressed length for test_sync - suppress +vnocompatwarnings in configure for HPUX (not always supported) Changes in 1.0.7 (20 Jan 1998) - fix gzseek which was broken in write mode - return error for gzseek to negative absolute position - fix configure for Linux (Chun-Chung Chen) - increase stack space for MSC (Tim Wegner) - get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant) - define EXPORTVA for gzprintf (Gilles Vollant) - added man page zlib.3 (Rick Rodgers) - for contrib/untgz, fix makedir() and improve Makefile - check gzseek in write mode in example.c - allocate extra buffer for seeks only if gzseek is actually called - avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant) - add inflateSyncPoint in zconf.h - fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def Changes in 1.0.6 (19 Jan 1998) - add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) - Fix a deflate bug occuring only with compression level 0 (thanks to Andy Buckler for finding this one). - In minigzip, pass transparently also the first byte for .Z files. - return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() - check Z_FINISH in inflate (thanks to Marc Schluper) - Implement deflateCopy (thanks to Adam Costello) - make static libraries by default in configure, add --shared option. - move MSDOS or Windows specific files to directory msdos - suppress the notion of partial flush to simplify the interface (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) - suppress history buffer provided by application to simplify the interface (this feature was not implemented anyway in 1.0.4) - next_in and avail_in must be initialized before calling inflateInit or inflateInit2 - add EXPORT in all exported functions (for Windows DLL) - added Makefile.nt (thanks to Stephen Williams) - added the unsupported "contrib" directory: contrib/asm386/ by Gilles Vollant 386 asm code replacing longest_match(). contrib/iostream/ by Kevin Ruland A C++ I/O streams interface to the zlib gz* functions contrib/iostream2/ by Tyge Lvset Another C++ I/O streams interface contrib/untgz/ by "Pedro A. Aranda Guti\irrez" A very simple tar.gz file extractor using zlib contrib/visual-basic.txt by Carlos Rios How to use compress(), uncompress() and the gz* functions from VB. - pass params -f (filtered data), -h (huffman only), -1 to -9 (compression level) in minigzip (thanks to Tom Lane) - use const for rommable constants in deflate - added test for gzseek and gztell in example.c - add undocumented function inflateSyncPoint() (hack for Paul Mackerras) - add undocumented function zError to convert error code to string (for Tim Smithers) - Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code. - Use default memcpy for Symantec MSDOS compiler. - Add EXPORT keyword for check_func (needed for Windows DLL) - add current directory to LD_LIBRARY_PATH for "make test" - create also a link for libz.so.1 - added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) - use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) - added -soname for Linux in configure (Chun-Chung Chen, - assign numbers to the exported functions in zlib.def (for Windows DLL) - add advice in zlib.h for best usage of deflateSetDictionary - work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) - allow compilation with ANSI keywords only enabled for TurboC in large model - avoid "versionString"[0] (Borland bug) - add NEED_DUMMY_RETURN for Borland - use variable z_verbose for tracing in debug mode (L. Peter Deutsch). - allow compilation with CC - defined STDC for OS/2 (David Charlap) - limit external names to 8 chars for MVS (Thomas Lund) - in minigzip.c, use static buffers only for 16-bit systems - fix suffix check for "minigzip -d foo.gz" - do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) - use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) - added makelcc.bat for lcc-win32 (Tom St Denis) - in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) - Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion. - check for unistd.h in configure (for off_t) - remove useless check parameter in inflate_blocks_free - avoid useless assignment of s->check to itself in inflate_blocks_new - do not flush twice in gzclose (thanks to Ken Raeburn) - rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h - use NO_ERRNO_H instead of enumeration of operating systems with errno.h - work around buggy fclose on pipes for HP/UX - support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson) - fix configure if CC is already equal to gcc Changes in 1.0.5 (3 Jan 98) - Fix inflate to terminate gracefully when fed corrupted or invalid data - Use const for rommable constants in inflate - Eliminate memory leaks on error conditions in inflate - Removed some vestigial code in inflate - Update web address in README Changes in 1.0.4 (24 Jul 96) - In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF bit, so the decompressor could decompress all the correct data but went on to attempt decompressing extra garbage data. This affected minigzip too. - zlibVersion and gzerror return const char* (needed for DLL) - port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) - use z_error only for DEBUG (avoid problem with DLLs) Changes in 1.0.3 (2 Jul 96) - use z_streamp instead of z_stream *, which is now a far pointer in MSDOS small and medium models; this makes the library incompatible with previous versions for these models. (No effect in large model or on other systems.) - return OK instead of BUF_ERROR if previous deflate call returned with avail_out as zero but there is nothing to do - added memcmp for non STDC compilers - define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly) - define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO) - better check for 16-bit mode MSC (avoids problem with Symantec) Changes in 1.0.2 (23 May 96) - added Windows DLL support - added a function zlibVersion (for the DLL support) - fixed declarations using Bytef in infutil.c (pb with MSDOS medium model) - Bytef is define's instead of typedef'd only for Borland C - avoid reading uninitialized memory in example.c - mention in README that the zlib format is now RFC1950 - updated Makefile.dj2 - added algorithm.doc Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] - fix array overlay in deflate.c which sometimes caused bad compressed data - fix inflate bug with empty stored block - fix MSDOS medium model which was broken in 0.99 - fix deflateParams() which could generated bad compressed data. - Bytef is define'd instead of typedef'ed (work around Borland bug) - added an INDEX file - new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) - speed up adler32 for modern machines without auto-increment - added -ansi for IRIX in configure - static_init_done in trees.c is an int - define unlink as delete for VMS - fix configure for QNX - add configure branch for SCO and HPUX - avoid many warnings (unused variables, dead assignments, etc...) - no fdopen for BeOS - fix the Watcom fix for 32 bit mode (define FAR as empty) - removed redefinition of Byte for MKWERKS - work around an MWKERKS bug (incorrect merge of all .h files) Changes in 0.99 (27 Jan 96) - allow preset dictionary shared between compressor and decompressor - allow compression level 0 (no compression) - add deflateParams in zlib.h: allow dynamic change of compression level and compression strategy. - test large buffers and deflateParams in example.c - add optional "configure" to build zlib as a shared library - suppress Makefile.qnx, use configure instead - fixed deflate for 64-bit systems (detected on Cray) - fixed inflate_blocks for 64-bit systems (detected on Alpha) - declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2) - always return Z_BUF_ERROR when deflate() has nothing to do - deflateInit and inflateInit are now macros to allow version checking - prefix all global functions and types with z_ with -DZ_PREFIX - make falloc completely reentrant (inftrees.c) - fixed very unlikely race condition in ct_static_init - free in reverse order of allocation to help memory manager - use zlib-1.0/* instead of zlib/* inside the tar.gz - make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion -Wstrict-prototypes -Wmissing-prototypes" - allow gzread on concatenated .gz files - deflateEnd now returns Z_DATA_ERROR if it was premature - deflate is finally (?) fully deterministic (no matches beyond end of input) - Document Z_SYNC_FLUSH - add uninstall in Makefile - Check for __cpluplus in zlib.h - Better test in ct_align for partial flush - avoid harmless warnings for Borland C++ - initialize hash_head in deflate.c - avoid warning on fdopen (gzio.c) for HP cc -Aa - include stdlib.h for STDC compilers - include errno.h for Cray - ignore error if ranlib doesn't exist - call ranlib twice for NeXTSTEP - use exec_prefix instead of prefix for libz.a - renamed ct_* as _tr_* to avoid conflict with applications - clear z->msg in inflateInit2 before any error return - initialize opaque in example.c, gzio.c, deflate.c and inflate.c - fixed typo in zconf.h (_GNUC__ => __GNUC__) - check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode) - fix typo in Make_vms.com (f$trnlnm -> f$getsyi) - in fcalloc, normalize pointer if size > 65520 bytes - don't use special fcalloc for 32 bit Borland C++ - use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc... - use Z_BINARY instead of BINARY - document that gzclose after gzdopen will close the file - allow "a" as mode in gzopen. - fix error checking in gzread - allow skipping .gz extra-field on pipes - added reference to Perl interface in README - put the crc table in FAR data (I dislike more and more the medium model :) - added get_crc_table - added a dimension to all arrays (Borland C can't count). - workaround Borland C bug in declaration of inflate_codes_new & inflate_fast - guard against multiple inclusion of *.h (for precompiled header on Mac) - Watcom C pretends to be Microsoft C small model even in 32 bit mode. - don't use unsized arrays to avoid silly warnings by Visual C++: warning C4746: 'inflate_mask' : unsized array treated as '__far' (what's wrong with far data in far model?). - define enum out of inflate_blocks_state to allow compilation with C++ Changes in 0.95 (16 Aug 95) - fix MSDOS small and medium model (now easier to adapt to any compiler) - inlined send_bits - fix the final (:-) bug for deflate with flush (output was correct but not completely flushed in rare occasions). - default window size is same for compression and decompression (it's now sufficient to set MAX_WBITS in zconf.h). - voidp -> voidpf and voidnp -> voidp (for consistency with other typedefs and because voidnp was not near in large model). Changes in 0.94 (13 Aug 95) - support MSDOS medium model - fix deflate with flush (could sometimes generate bad output) - fix deflateReset (zlib header was incorrectly suppressed) - added support for VMS - allow a compression level in gzopen() - gzflush now calls fflush - For deflate with flush, flush even if no more input is provided. - rename libgz.a as libz.a - avoid complex expression in infcodes.c triggering Turbo C bug - work around a problem with gcc on Alpha (in INSERT_STRING) - don't use inline functions (problem with some gcc versions) - allow renaming of Byte, uInt, etc... with #define. - avoid warning about (unused) pointer before start of array in deflate.c - avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c - avoid reserved word 'new' in trees.c Changes in 0.93 (25 June 95) - temporarily disable inline functions - make deflate deterministic - give enough lookahead for PARTIAL_FLUSH - Set binary mode for stdin/stdout in minigzip.c for OS/2 - don't even use signed char in inflate (not portable enough) - fix inflate memory leak for segmented architectures Changes in 0.92 (3 May 95) - don't assume that char is signed (problem on SGI) - Clear bit buffer when starting a stored block - no memcpy on Pyramid - suppressed inftest.c - optimized fill_window, put longest_match inline for gcc - optimized inflate on stored blocks. - untabify all sources to simplify patches Changes in 0.91 (2 May 95) - Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h - Document the memory requirements in zconf.h - added "make install" - fix sync search logic in inflateSync - deflate(Z_FULL_FLUSH) now works even if output buffer too short - after inflateSync, don't scare people with just "lo world" - added support for DJGPP Changes in 0.9 (1 May 95) - don't assume that zalloc clears the allocated memory (the TurboC bug was Mark's bug after all :) - let again gzread copy uncompressed data unchanged (was working in 0.71) - deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented - added a test of inflateSync in example.c - moved MAX_WBITS to zconf.h because users might want to change that. - document explicitly that zalloc(64K) on MSDOS must return a normalized pointer (zero offset) - added Makefiles for Microsoft C, Turbo C, Borland C++ - faster crc32() Changes in 0.8 (29 April 95) - added fast inflate (inffast.c) - deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this is incompatible with previous versions of zlib which returned Z_OK. - work around a TurboC compiler bug (bad code for b << 0, see infutil.h) (actually that was not a compiler bug, see 0.81 above) - gzread no longer reads one extra byte in certain cases - In gzio destroy(), don't reference a freed structure - avoid many warnings for MSDOS - avoid the ERROR symbol which is used by MS Windows Changes in 0.71 (14 April 95) - Fixed more MSDOS compilation problems :( There is still a bug with TurboC large model. Changes in 0.7 (14 April 95) - Added full inflate support. - Simplified the crc32() interface. The pre- and post-conditioning (one's complement) is now done inside crc32(). WARNING: this is incompatible with previous versions; see zlib.h for the new usage. Changes in 0.61 (12 April 95) - workaround for a bug in TurboC. example and minigzip now work on MSDOS. Changes in 0.6 (11 April 95) - added minigzip.c - added gzdopen to reopen a file descriptor as gzFile - added transparent reading of non-gziped files in gzread. - fixed bug in gzread (don't read crc as data) - fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose). - don't allocate big arrays in the stack (for MSDOS) - fix some MSDOS compilation problems Changes in 0.5: - do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but not yet Z_FULL_FLUSH. - support decompression but only in a single step (forced Z_FINISH) - added opaque object for zalloc and zfree. - added deflateReset and inflateReset - added a variable zlib_version for consistency checking. - renamed the 'filter' parameter of deflateInit2 as 'strategy'. Added Z_FILTERED and Z_HUFFMAN_ONLY constants. Changes in 0.4: - avoid "zip" everywhere, use zlib instead of ziplib. - suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush if compression method == 8. - added adler32 and crc32 - renamed deflateOptions as deflateInit2, call one or the other but not both - added the method parameter for deflateInit2. - added inflateInit2 - simplied considerably deflateInit and inflateInit by not supporting user-provided history buffer. This is supported only in deflateInit2 and inflateInit2. Changes in 0.3: - prefix all macro names with Z_ - use Z_FINISH instead of deflateEnd to finish compression. - added Z_HUFFMAN_ONLY - added gzerror() gnupg-1.4.20/zlib/inffast.c0000644000175000017500000001321712635262326012410 00000000000000/* inffast.c -- process literals and length/distance pairs fast * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" #include "inftrees.h" #include "infblock.h" #include "infcodes.h" #include "infutil.h" #include "inffast.h" struct inflate_codes_state {int dummy;}; /* for buggy compilers */ /* simplify the use of the inflate_huft type with some defines */ #define exop word.what.Exop #define bits word.what.Bits /* macros for bit input with no checking and for returning unused bytes */ #define GRABBITS(j) {while(k<(j)){b|=((uLong)NEXTBYTE)<avail_in-n;c=(k>>3)>3:c;n+=c;p-=c;k-=c<<3;} /* Called with number of bytes left to write in window at least 258 (the maximum string length) and number of input bytes available at least ten. The ten bytes are six bytes for the longest length/ distance pair plus four bytes for overloading the bit buffer. */ int inflate_fast(bl, bd, tl, td, s, z) uInt bl, bd; inflate_huft *tl; inflate_huft *td; /* need separate declaration for Borland C++ */ inflate_blocks_statef *s; z_streamp z; { inflate_huft *t; /* temporary pointer */ uInt e; /* extra bits or operation */ uLong b; /* bit buffer */ uInt k; /* bits in bit buffer */ Bytef *p; /* input data pointer */ uInt n; /* bytes available there */ Bytef *q; /* output window write pointer */ uInt m; /* bytes to end of window or read pointer */ uInt ml; /* mask for literal/length tree */ uInt md; /* mask for distance tree */ uInt c; /* bytes to copy */ uInt d; /* distance back to copy from */ Bytef *r; /* copy source pointer */ /* load input, output, bit values */ LOAD /* initialize masks */ ml = inflate_mask[bl]; md = inflate_mask[bd]; /* do until not enough input or output space for fast loop */ do { /* assume called with m >= 258 && n >= 10 */ /* get literal/length code */ GRABBITS(20) /* max bits for literal/length code */ if ((e = (t = tl + ((uInt)b & ml))->exop) == 0) { DUMPBITS(t->bits) Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? "inflate: * literal '%c'\n" : "inflate: * literal 0x%02x\n", t->base)); *q++ = (Byte)t->base; m--; continue; } do { DUMPBITS(t->bits) if (e & 16) { /* get extra bits for length */ e &= 15; c = t->base + ((uInt)b & inflate_mask[e]); DUMPBITS(e) Tracevv((stderr, "inflate: * length %u\n", c)); /* decode distance base of block to copy */ GRABBITS(15); /* max bits for distance code */ e = (t = td + ((uInt)b & md))->exop; do { DUMPBITS(t->bits) if (e & 16) { /* get extra bits to add to distance base */ e &= 15; GRABBITS(e) /* get extra bits (up to 13) */ d = t->base + ((uInt)b & inflate_mask[e]); DUMPBITS(e) Tracevv((stderr, "inflate: * distance %u\n", d)); /* do the copy */ m -= c; r = q - d; if (r < s->window) /* wrap if needed */ { do { r += s->end - s->window; /* force pointer in window */ } while (r < s->window); /* covers invalid distances */ e = s->end - r; if (c > e) { c -= e; /* wrapped copy */ do { *q++ = *r++; } while (--e); r = s->window; do { *q++ = *r++; } while (--c); } else /* normal copy */ { *q++ = *r++; c--; *q++ = *r++; c--; do { *q++ = *r++; } while (--c); } } else /* normal copy */ { *q++ = *r++; c--; *q++ = *r++; c--; do { *q++ = *r++; } while (--c); } break; } else if ((e & 64) == 0) { t += t->base; e = (t += ((uInt)b & inflate_mask[e]))->exop; } else { z->msg = (char*)"invalid distance code"; UNGRAB UPDATE return Z_DATA_ERROR; } } while (1); break; } if ((e & 64) == 0) { t += t->base; if ((e = (t += ((uInt)b & inflate_mask[e]))->exop) == 0) { DUMPBITS(t->bits) Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? "inflate: * literal '%c'\n" : "inflate: * literal 0x%02x\n", t->base)); *q++ = (Byte)t->base; m--; break; } } else if (e & 32) { Tracevv((stderr, "inflate: * end of block\n")); UNGRAB UPDATE return Z_STREAM_END; } else { z->msg = (char*)"invalid literal/length code"; UNGRAB UPDATE return Z_DATA_ERROR; } } while (1); } while (m >= 258 && n >= 10); /* not enough input or output--restore pointers and return */ UNGRAB UPDATE return Z_OK; } gnupg-1.4.20/zlib/infcodes.c0000644000175000017500000001670512635262326012555 00000000000000/* infcodes.c -- process literals and length/distance pairs * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" #include "inftrees.h" #include "infblock.h" #include "infcodes.h" #include "infutil.h" #include "inffast.h" /* simplify the use of the inflate_huft type with some defines */ #define exop word.what.Exop #define bits word.what.Bits typedef enum { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ START, /* x: set up for LEN */ LEN, /* i: get length/literal/eob next */ LENEXT, /* i: getting length extra (have base) */ DIST, /* i: get distance next */ DISTEXT, /* i: getting distance extra */ COPY, /* o: copying bytes in window, waiting for space */ LIT, /* o: got literal, waiting for output space */ WASH, /* o: got eob, possibly still output waiting */ END, /* x: got eob and all data flushed */ BADCODE} /* x: got error */ inflate_codes_mode; /* inflate codes private state */ struct inflate_codes_state { /* mode */ inflate_codes_mode mode; /* current inflate_codes mode */ /* mode dependent information */ uInt len; union { struct { inflate_huft *tree; /* pointer into tree */ uInt need; /* bits needed */ } code; /* if LEN or DIST, where in tree */ uInt lit; /* if LIT, literal */ struct { uInt get; /* bits to get for extra */ uInt dist; /* distance back to copy from */ } copy; /* if EXT or COPY, where and how much */ } sub; /* submode */ /* mode independent information */ Byte lbits; /* ltree bits decoded per branch */ Byte dbits; /* dtree bits decoder per branch */ inflate_huft *ltree; /* literal/length/eob tree */ inflate_huft *dtree; /* distance tree */ }; inflate_codes_statef *inflate_codes_new(bl, bd, tl, td, z) uInt bl, bd; inflate_huft *tl; inflate_huft *td; /* need separate declaration for Borland C++ */ z_streamp z; { inflate_codes_statef *c; if ((c = (inflate_codes_statef *) ZALLOC(z,1,sizeof(struct inflate_codes_state))) != Z_NULL) { c->mode = START; c->lbits = (Byte)bl; c->dbits = (Byte)bd; c->ltree = tl; c->dtree = td; Tracev((stderr, "inflate: codes new\n")); } return c; } int inflate_codes(s, z, r) inflate_blocks_statef *s; z_streamp z; int r; { uInt j; /* temporary storage */ inflate_huft *t; /* temporary pointer */ uInt e; /* extra bits or operation */ uLong b; /* bit buffer */ uInt k; /* bits in bit buffer */ Bytef *p; /* input data pointer */ uInt n; /* bytes available there */ Bytef *q; /* output window write pointer */ uInt m; /* bytes to end of window or read pointer */ Bytef *f; /* pointer to copy strings from */ inflate_codes_statef *c = s->sub.decode.codes; /* codes state */ /* copy input/output information to locals (UPDATE macro restores) */ LOAD /* process input and output based on current state */ while (1) switch (c->mode) { /* waiting for "i:"=input, "o:"=output, "x:"=nothing */ case START: /* x: set up for LEN */ #ifndef SLOW if (m >= 258 && n >= 10) { UPDATE r = inflate_fast(c->lbits, c->dbits, c->ltree, c->dtree, s, z); LOAD if (r != Z_OK) { c->mode = r == Z_STREAM_END ? WASH : BADCODE; break; } } #endif /* !SLOW */ c->sub.code.need = c->lbits; c->sub.code.tree = c->ltree; c->mode = LEN; case LEN: /* i: get length/literal/eob next */ j = c->sub.code.need; NEEDBITS(j) t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); DUMPBITS(t->bits) e = (uInt)(t->exop); if (e == 0) /* literal */ { c->sub.lit = t->base; Tracevv((stderr, t->base >= 0x20 && t->base < 0x7f ? "inflate: literal '%c'\n" : "inflate: literal 0x%02x\n", t->base)); c->mode = LIT; break; } if (e & 16) /* length */ { c->sub.copy.get = e & 15; c->len = t->base; c->mode = LENEXT; break; } if ((e & 64) == 0) /* next table */ { c->sub.code.need = e; c->sub.code.tree = t + t->base; break; } if (e & 32) /* end of block */ { Tracevv((stderr, "inflate: end of block\n")); c->mode = WASH; break; } c->mode = BADCODE; /* invalid code */ z->msg = (char*)"invalid literal/length code"; r = Z_DATA_ERROR; LEAVE case LENEXT: /* i: getting length extra (have base) */ j = c->sub.copy.get; NEEDBITS(j) c->len += (uInt)b & inflate_mask[j]; DUMPBITS(j) c->sub.code.need = c->dbits; c->sub.code.tree = c->dtree; Tracevv((stderr, "inflate: length %u\n", c->len)); c->mode = DIST; case DIST: /* i: get distance next */ j = c->sub.code.need; NEEDBITS(j) t = c->sub.code.tree + ((uInt)b & inflate_mask[j]); DUMPBITS(t->bits) e = (uInt)(t->exop); if (e & 16) /* distance */ { c->sub.copy.get = e & 15; c->sub.copy.dist = t->base; c->mode = DISTEXT; break; } if ((e & 64) == 0) /* next table */ { c->sub.code.need = e; c->sub.code.tree = t + t->base; break; } c->mode = BADCODE; /* invalid code */ z->msg = (char*)"invalid distance code"; r = Z_DATA_ERROR; LEAVE case DISTEXT: /* i: getting distance extra */ j = c->sub.copy.get; NEEDBITS(j) c->sub.copy.dist += (uInt)b & inflate_mask[j]; DUMPBITS(j) Tracevv((stderr, "inflate: distance %u\n", c->sub.copy.dist)); c->mode = COPY; case COPY: /* o: copying bytes in window, waiting for space */ f = q - c->sub.copy.dist; while (f < s->window) /* modulo window size-"while" instead */ f += s->end - s->window; /* of "if" handles invalid distances */ while (c->len) { NEEDOUT OUTBYTE(*f++) if (f == s->end) f = s->window; c->len--; } c->mode = START; break; case LIT: /* o: got literal, waiting for output space */ NEEDOUT OUTBYTE(c->sub.lit) c->mode = START; break; case WASH: /* o: got eob, possibly more output */ if (k > 7) /* return unused byte, if any */ { Assert(k < 16, "inflate_codes grabbed too many bytes") k -= 8; n++; p--; /* can always return one */ } FLUSH if (s->read != s->write) LEAVE c->mode = END; case END: r = Z_STREAM_END; LEAVE case BADCODE: /* x: got error */ r = Z_DATA_ERROR; LEAVE default: r = Z_STREAM_ERROR; LEAVE } #ifdef NEED_DUMMY_RETURN return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ #endif } void inflate_codes_free(c, z) inflate_codes_statef *c; z_streamp z; { ZFREE(z, c); Tracev((stderr, "inflate: codes free\n")); } gnupg-1.4.20/zlib/trees.c0000644000175000017500000012523012635262326012077 00000000000000/* trees.c -- output deflated data using Huffman coding * Copyright (C) 1995-2002 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ /* * ALGORITHM * * The "deflation" process uses several Huffman trees. The more * common source values are represented by shorter bit sequences. * * Each code tree is stored in a compressed form which is itself * a Huffman encoding of the lengths of all the code strings (in * ascending order by source values). The actual code strings are * reconstructed from the lengths in the inflate process, as described * in the deflate specification. * * REFERENCES * * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc * * Storer, James A. * Data Compression: Methods and Theory, pp. 49-50. * Computer Science Press, 1988. ISBN 0-7167-8156-5. * * Sedgewick, R. * Algorithms, p290. * Addison-Wesley, 1983. ISBN 0-201-06672-6. */ /* @(#) $Id$ */ /* #define GEN_TREES_H */ #include "deflate.h" #ifdef DEBUG # include #endif /* =========================================================================== * Constants */ #define MAX_BL_BITS 7 /* Bit length codes must not exceed MAX_BL_BITS bits */ #define END_BLOCK 256 /* end of block literal code */ #define REP_3_6 16 /* repeat previous bit length 3-6 times (2 bits of repeat count) */ #define REPZ_3_10 17 /* repeat a zero length 3-10 times (3 bits of repeat count) */ #define REPZ_11_138 18 /* repeat a zero length 11-138 times (7 bits of repeat count) */ local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; local const int extra_dbits[D_CODES] /* extra bits for each distance code */ = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; local const uch bl_order[BL_CODES] = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; /* The lengths of the bit length codes are sent in order of decreasing * probability, to avoid transmitting the lengths for unused bit length codes. */ #define Buf_size (8 * 2*sizeof(char)) /* Number of bits used within bi_buf. (bi_buf might be implemented on * more than 16 bits on some systems.) */ /* =========================================================================== * Local data. These are initialized only once. */ #define DIST_CODE_LEN 512 /* see definition of array dist_code below */ #if defined(GEN_TREES_H) || !defined(STDC) /* non ANSI compilers may not accept trees.h */ local ct_data static_ltree[L_CODES+2]; /* The static literal tree. Since the bit lengths are imposed, there is no * need for the L_CODES extra codes used during heap construction. However * The codes 286 and 287 are needed to build a canonical tree (see _tr_init * below). */ local ct_data static_dtree[D_CODES]; /* The static distance tree. (Actually a trivial tree since all codes use * 5 bits.) */ uch _dist_code[DIST_CODE_LEN]; /* Distance codes. The first 256 values correspond to the distances * 3 .. 258, the last 256 values correspond to the top 8 bits of * the 15 bit distances. */ uch _length_code[MAX_MATCH-MIN_MATCH+1]; /* length code for each normalized match length (0 == MIN_MATCH) */ local int base_length[LENGTH_CODES]; /* First normalized length for each code (0 = MIN_MATCH) */ local int base_dist[D_CODES]; /* First normalized distance for each code (0 = distance of 1) */ #else # include "trees.h" #endif /* GEN_TREES_H */ struct static_tree_desc_s { const ct_data *static_tree; /* static tree or NULL */ const intf *extra_bits; /* extra bits for each code or NULL */ int extra_base; /* base index for extra_bits */ int elems; /* max number of elements in the tree */ int max_length; /* max bit length for the codes */ }; local static_tree_desc static_l_desc = {static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; local static_tree_desc static_d_desc = {static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; local static_tree_desc static_bl_desc = {(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; /* =========================================================================== * Local (static) routines in this file. */ local void tr_static_init OF((void)); local void init_block OF((deflate_state *s)); local void pqdownheap OF((deflate_state *s, ct_data *tree, int k)); local void gen_bitlen OF((deflate_state *s, tree_desc *desc)); local void gen_codes OF((ct_data *tree, int max_code, ushf *bl_count)); local void build_tree OF((deflate_state *s, tree_desc *desc)); local void scan_tree OF((deflate_state *s, ct_data *tree, int max_code)); local void send_tree OF((deflate_state *s, ct_data *tree, int max_code)); local int build_bl_tree OF((deflate_state *s)); local void send_all_trees OF((deflate_state *s, int lcodes, int dcodes, int blcodes)); local void compress_block OF((deflate_state *s, ct_data *ltree, ct_data *dtree)); local void set_data_type OF((deflate_state *s)); local unsigned bi_reverse OF((unsigned value, int length)); local void bi_windup OF((deflate_state *s)); local void bi_flush OF((deflate_state *s)); local void copy_block OF((deflate_state *s, charf *buf, unsigned len, int header)); #ifdef GEN_TREES_H local void gen_trees_header OF((void)); #endif #ifndef DEBUG # define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) /* Send a code of the given tree. c and tree must not have side effects */ #else /* DEBUG */ # define send_code(s, c, tree) \ { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ send_bits(s, tree[c].Code, tree[c].Len); } #endif /* =========================================================================== * Output a short LSB first on the stream. * IN assertion: there is enough room in pendingBuf. */ #define put_short(s, w) { \ put_byte(s, (uch)((w) & 0xff)); \ put_byte(s, (uch)((ush)(w) >> 8)); \ } /* =========================================================================== * Send a value on a given number of bits. * IN assertion: length <= 16 and value fits in length bits. */ #ifdef DEBUG local void send_bits OF((deflate_state *s, int value, int length)); local void send_bits(s, value, length) deflate_state *s; int value; /* value to send */ int length; /* number of bits */ { Tracevv((stderr," l %2d v %4x ", length, value)); Assert(length > 0 && length <= 15, "invalid length"); s->bits_sent += (ulg)length; /* If not enough room in bi_buf, use (valid) bits from bi_buf and * (16 - bi_valid) bits from value, leaving (width - (16-bi_valid)) * unused bits in value. */ if (s->bi_valid > (int)Buf_size - length) { s->bi_buf |= (value << s->bi_valid); put_short(s, s->bi_buf); s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); s->bi_valid += length - Buf_size; } else { s->bi_buf |= value << s->bi_valid; s->bi_valid += length; } } #else /* !DEBUG */ #define send_bits(s, value, length) \ { int len = length;\ if (s->bi_valid > (int)Buf_size - len) {\ int val = value;\ s->bi_buf |= (val << s->bi_valid);\ put_short(s, s->bi_buf);\ s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ s->bi_valid += len - Buf_size;\ } else {\ s->bi_buf |= (value) << s->bi_valid;\ s->bi_valid += len;\ }\ } #endif /* DEBUG */ #define MAX(a,b) (a >= b ? a : b) /* the arguments must not have side effects */ /* =========================================================================== * Initialize the various 'constant' tables. */ local void tr_static_init() { #if defined(GEN_TREES_H) || !defined(STDC) static int static_init_done = 0; int n; /* iterates over tree elements */ int bits; /* bit counter */ int length; /* length value */ int code; /* code value */ int dist; /* distance index */ ush bl_count[MAX_BITS+1]; /* number of codes at each bit length for an optimal tree */ if (static_init_done) return; /* For some embedded targets, global variables are not initialized: */ static_l_desc.static_tree = static_ltree; static_l_desc.extra_bits = extra_lbits; static_d_desc.static_tree = static_dtree; static_d_desc.extra_bits = extra_dbits; static_bl_desc.extra_bits = extra_blbits; /* Initialize the mapping length (0..255) -> length code (0..28) */ length = 0; for (code = 0; code < LENGTH_CODES-1; code++) { base_length[code] = length; for (n = 0; n < (1< dist code (0..29) */ dist = 0; for (code = 0 ; code < 16; code++) { base_dist[code] = dist; for (n = 0; n < (1<>= 7; /* from now on, all distances are divided by 128 */ for ( ; code < D_CODES; code++) { base_dist[code] = dist << 7; for (n = 0; n < (1<<(extra_dbits[code]-7)); n++) { _dist_code[256 + dist++] = (uch)code; } } Assert (dist == 256, "tr_static_init: 256+dist != 512"); /* Construct the codes of the static literal tree */ for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; n = 0; while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; /* Codes 286 and 287 do not exist, but we must include them in the * tree construction to get a canonical Huffman tree (longest code * all ones) */ gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); /* The static distance tree is trivial: */ for (n = 0; n < D_CODES; n++) { static_dtree[n].Len = 5; static_dtree[n].Code = bi_reverse((unsigned)n, 5); } static_init_done = 1; # ifdef GEN_TREES_H gen_trees_header(); # endif #endif /* defined(GEN_TREES_H) || !defined(STDC) */ } /* =========================================================================== * Genererate the file trees.h describing the static trees. */ #ifdef GEN_TREES_H # ifndef DEBUG # include # endif # define SEPARATOR(i, last, width) \ ((i) == (last)? "\n};\n\n" : \ ((i) % (width) == (width)-1 ? ",\n" : ", ")) void gen_trees_header() { FILE *header = fopen("trees.h", "w"); int i; Assert (header != NULL, "Can't open trees.h"); fprintf(header, "/* header created automatically with -DGEN_TREES_H */\n\n"); fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); for (i = 0; i < L_CODES+2; i++) { fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); } fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); for (i = 0; i < D_CODES; i++) { fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); } fprintf(header, "const uch _dist_code[DIST_CODE_LEN] = {\n"); for (i = 0; i < DIST_CODE_LEN; i++) { fprintf(header, "%2u%s", _dist_code[i], SEPARATOR(i, DIST_CODE_LEN-1, 20)); } fprintf(header, "const uch _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { fprintf(header, "%2u%s", _length_code[i], SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); } fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); for (i = 0; i < LENGTH_CODES; i++) { fprintf(header, "%1u%s", base_length[i], SEPARATOR(i, LENGTH_CODES-1, 20)); } fprintf(header, "local const int base_dist[D_CODES] = {\n"); for (i = 0; i < D_CODES; i++) { fprintf(header, "%5u%s", base_dist[i], SEPARATOR(i, D_CODES-1, 10)); } fclose(header); } #endif /* GEN_TREES_H */ /* =========================================================================== * Initialize the tree data structures for a new zlib stream. */ void _tr_init(s) deflate_state *s; { tr_static_init(); s->l_desc.dyn_tree = s->dyn_ltree; s->l_desc.stat_desc = &static_l_desc; s->d_desc.dyn_tree = s->dyn_dtree; s->d_desc.stat_desc = &static_d_desc; s->bl_desc.dyn_tree = s->bl_tree; s->bl_desc.stat_desc = &static_bl_desc; s->bi_buf = 0; s->bi_valid = 0; s->last_eob_len = 8; /* enough lookahead for inflate */ #ifdef DEBUG s->compressed_len = 0L; s->bits_sent = 0L; #endif /* Initialize the first block of the first file: */ init_block(s); } /* =========================================================================== * Initialize a new block. */ local void init_block(s) deflate_state *s; { int n; /* iterates over tree elements */ /* Initialize the trees. */ for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; s->dyn_ltree[END_BLOCK].Freq = 1; s->opt_len = s->static_len = 0L; s->last_lit = s->matches = 0; } #define SMALLEST 1 /* Index within the heap array of least frequent node in the Huffman tree */ /* =========================================================================== * Remove the smallest element from the heap and recreate the heap with * one less element. Updates heap and heap_len. */ #define pqremove(s, tree, top) \ {\ top = s->heap[SMALLEST]; \ s->heap[SMALLEST] = s->heap[s->heap_len--]; \ pqdownheap(s, tree, SMALLEST); \ } /* =========================================================================== * Compares to subtrees, using the tree depth as tie breaker when * the subtrees have equal frequency. This minimizes the worst case length. */ #define smaller(tree, n, m, depth) \ (tree[n].Freq < tree[m].Freq || \ (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) /* =========================================================================== * Restore the heap property by moving down the tree starting at node k, * exchanging a node with the smallest of its two sons if necessary, stopping * when the heap property is re-established (each father smaller than its * two sons). */ local void pqdownheap(s, tree, k) deflate_state *s; ct_data *tree; /* the tree to restore */ int k; /* node to move down */ { int v = s->heap[k]; int j = k << 1; /* left son of k */ while (j <= s->heap_len) { /* Set j to the smallest of the two sons: */ if (j < s->heap_len && smaller(tree, s->heap[j+1], s->heap[j], s->depth)) { j++; } /* Exit if v is smaller than both sons */ if (smaller(tree, v, s->heap[j], s->depth)) break; /* Exchange v with the smallest son */ s->heap[k] = s->heap[j]; k = j; /* And continue down the tree, setting j to the left son of k */ j <<= 1; } s->heap[k] = v; } /* =========================================================================== * Compute the optimal bit lengths for a tree and update the total bit length * for the current block. * IN assertion: the fields freq and dad are set, heap[heap_max] and * above are the tree nodes sorted by increasing frequency. * OUT assertions: the field len is set to the optimal bit length, the * array bl_count contains the frequencies for each bit length. * The length opt_len is updated; static_len is also updated if stree is * not null. */ local void gen_bitlen(s, desc) deflate_state *s; tree_desc *desc; /* the tree descriptor */ { ct_data *tree = desc->dyn_tree; int max_code = desc->max_code; const ct_data *stree = desc->stat_desc->static_tree; const intf *extra = desc->stat_desc->extra_bits; int base = desc->stat_desc->extra_base; int max_length = desc->stat_desc->max_length; int h; /* heap index */ int n, m; /* iterate over the tree elements */ int bits; /* bit length */ int xbits; /* extra bits */ ush f; /* frequency */ int overflow = 0; /* number of elements with bit length too large */ for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; /* In a first pass, compute the optimal bit lengths (which may * overflow in the case of the bit length tree). */ tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ for (h = s->heap_max+1; h < HEAP_SIZE; h++) { n = s->heap[h]; bits = tree[tree[n].Dad].Len + 1; if (bits > max_length) bits = max_length, overflow++; tree[n].Len = (ush)bits; /* We overwrite tree[n].Dad which is no longer needed */ if (n > max_code) continue; /* not a leaf node */ s->bl_count[bits]++; xbits = 0; if (n >= base) xbits = extra[n-base]; f = tree[n].Freq; s->opt_len += (ulg)f * (bits + xbits); if (stree) s->static_len += (ulg)f * (stree[n].Len + xbits); } if (overflow == 0) return; Trace((stderr,"\nbit length overflow\n")); /* This happens for example on obj2 and pic of the Calgary corpus */ /* Find the first bit length which could increase: */ do { bits = max_length-1; while (s->bl_count[bits] == 0) bits--; s->bl_count[bits]--; /* move one leaf down the tree */ s->bl_count[bits+1] += 2; /* move one overflow item as its brother */ s->bl_count[max_length]--; /* The brother of the overflow item also moves one step up, * but this does not affect bl_count[max_length] */ overflow -= 2; } while (overflow > 0); /* Now recompute all bit lengths, scanning in increasing frequency. * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all * lengths instead of fixing only the wrong ones. This idea is taken * from 'ar' written by Haruhiko Okumura.) */ for (bits = max_length; bits != 0; bits--) { n = s->bl_count[bits]; while (n != 0) { m = s->heap[--h]; if (m > max_code) continue; if (tree[m].Len != (unsigned) bits) { Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); s->opt_len += ((long)bits - (long)tree[m].Len) *(long)tree[m].Freq; tree[m].Len = (ush)bits; } n--; } } } /* =========================================================================== * Generate the codes for a given tree and bit counts (which need not be * optimal). * IN assertion: the array bl_count contains the bit length statistics for * the given tree and the field len is set for all tree elements. * OUT assertion: the field code is set for all tree elements of non * zero code length. */ local void gen_codes (tree, max_code, bl_count) ct_data *tree; /* the tree to decorate */ int max_code; /* largest code with non zero frequency */ ushf *bl_count; /* number of codes at each bit length */ { ush next_code[MAX_BITS+1]; /* next code value for each bit length */ ush code = 0; /* running code value */ int bits; /* bit index */ int n; /* code index */ /* The distribution counts are first used to generate the code values * without bit reversal. */ for (bits = 1; bits <= MAX_BITS; bits++) { next_code[bits] = code = (code + bl_count[bits-1]) << 1; } /* Check that the bit counts in bl_count are consistent. The last code * must be all ones. */ Assert (code + bl_count[MAX_BITS]-1 == (1<dyn_tree; const ct_data *stree = desc->stat_desc->static_tree; int elems = desc->stat_desc->elems; int n, m; /* iterate over heap elements */ int max_code = -1; /* largest code with non zero frequency */ int node; /* new node being created */ /* Construct the initial heap, with least frequent element in * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. * heap[0] is not used. */ s->heap_len = 0, s->heap_max = HEAP_SIZE; for (n = 0; n < elems; n++) { if (tree[n].Freq != 0) { s->heap[++(s->heap_len)] = max_code = n; s->depth[n] = 0; } else { tree[n].Len = 0; } } /* The pkzip format requires that at least one distance code exists, * and that at least one bit should be sent even if there is only one * possible code. So to avoid special checks later on we force at least * two codes of non zero frequency. */ while (s->heap_len < 2) { node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); tree[node].Freq = 1; s->depth[node] = 0; s->opt_len--; if (stree) s->static_len -= stree[node].Len; /* node is 0 or 1 so it does not have extra bits */ } desc->max_code = max_code; /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, * establish sub-heaps of increasing lengths: */ for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); /* Construct the Huffman tree by repeatedly combining the least two * frequent nodes. */ node = elems; /* next internal node of the tree */ do { pqremove(s, tree, n); /* n = node of least frequency */ m = s->heap[SMALLEST]; /* m = node of next least frequency */ s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ s->heap[--(s->heap_max)] = m; /* Create a new node father of n and m */ tree[node].Freq = tree[n].Freq + tree[m].Freq; s->depth[node] = (uch) (MAX(s->depth[n], s->depth[m]) + 1); tree[n].Dad = tree[m].Dad = (ush)node; #ifdef DUMP_BL_TREE if (tree == s->bl_tree) { fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); } #endif /* and insert the new node in the heap */ s->heap[SMALLEST] = node++; pqdownheap(s, tree, SMALLEST); } while (s->heap_len >= 2); s->heap[--(s->heap_max)] = s->heap[SMALLEST]; /* At this point, the fields freq and dad are set. We can now * generate the bit lengths. */ gen_bitlen(s, (tree_desc *)desc); /* The field len is now set, we can generate the bit codes */ gen_codes ((ct_data *)tree, max_code, s->bl_count); } /* =========================================================================== * Scan a literal or distance tree to determine the frequencies of the codes * in the bit length tree. */ local void scan_tree (s, tree, max_code) deflate_state *s; ct_data *tree; /* the tree to be scanned */ int max_code; /* and its largest code of non zero frequency */ { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ int nextlen = tree[0].Len; /* length of next code */ int count = 0; /* repeat count of the current code */ int max_count = 7; /* max repeat count */ int min_count = 4; /* min repeat count */ if (nextlen == 0) max_count = 138, min_count = 3; tree[max_code+1].Len = (ush)0xffff; /* guard */ for (n = 0; n <= max_code; n++) { curlen = nextlen; nextlen = tree[n+1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { s->bl_tree[curlen].Freq += count; } else if (curlen != 0) { if (curlen != prevlen) s->bl_tree[curlen].Freq++; s->bl_tree[REP_3_6].Freq++; } else if (count <= 10) { s->bl_tree[REPZ_3_10].Freq++; } else { s->bl_tree[REPZ_11_138].Freq++; } count = 0; prevlen = curlen; if (nextlen == 0) { max_count = 138, min_count = 3; } else if (curlen == nextlen) { max_count = 6, min_count = 3; } else { max_count = 7, min_count = 4; } } } /* =========================================================================== * Send a literal or distance tree in compressed form, using the codes in * bl_tree. */ local void send_tree (s, tree, max_code) deflate_state *s; ct_data *tree; /* the tree to be scanned */ int max_code; /* and its largest code of non zero frequency */ { int n; /* iterates over all tree elements */ int prevlen = -1; /* last emitted length */ int curlen; /* length of current code */ int nextlen = tree[0].Len; /* length of next code */ int count = 0; /* repeat count of the current code */ int max_count = 7; /* max repeat count */ int min_count = 4; /* min repeat count */ /* tree[max_code+1].Len = -1; */ /* guard already set */ if (nextlen == 0) max_count = 138, min_count = 3; for (n = 0; n <= max_code; n++) { curlen = nextlen; nextlen = tree[n+1].Len; if (++count < max_count && curlen == nextlen) { continue; } else if (count < min_count) { do { send_code(s, curlen, s->bl_tree); } while (--count != 0); } else if (curlen != 0) { if (curlen != prevlen) { send_code(s, curlen, s->bl_tree); count--; } Assert(count >= 3 && count <= 6, " 3_6?"); send_code(s, REP_3_6, s->bl_tree); send_bits(s, count-3, 2); } else if (count <= 10) { send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count-3, 3); } else { send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count-11, 7); } count = 0; prevlen = curlen; if (nextlen == 0) { max_count = 138, min_count = 3; } else if (curlen == nextlen) { max_count = 6, min_count = 3; } else { max_count = 7, min_count = 4; } } } /* =========================================================================== * Construct the Huffman tree for the bit lengths and return the index in * bl_order of the last bit length code to send. */ local int build_bl_tree(s) deflate_state *s; { int max_blindex; /* index of last bit length code of non zero freq */ /* Determine the bit length frequencies for literal and distance trees */ scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); /* Build the bit length tree: */ build_tree(s, (tree_desc *)(&(s->bl_desc))); /* opt_len now includes the length of the tree representations, except * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. */ /* Determine the number of bit length codes to send. The pkzip format * requires that at least 4 bit length codes be sent. (appnote.txt says * 3 but the actual value used is 4.) */ for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; } /* Update opt_len to include the bit length tree and counts */ s->opt_len += 3*(max_blindex+1) + 5+5+4; Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", s->opt_len, s->static_len)); return max_blindex; } /* =========================================================================== * Send the header for a block using dynamic Huffman trees: the counts, the * lengths of the bit length codes, the literal tree and the distance tree. * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. */ local void send_all_trees(s, lcodes, dcodes, blcodes) deflate_state *s; int lcodes, dcodes, blcodes; /* number of codes for each tree */ { int rank; /* index in bl_order */ Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, "too many codes"); Tracev((stderr, "\nbl counts: ")); send_bits(s, lcodes-257, 5); /* not +255 as stated in appnote.txt */ send_bits(s, dcodes-1, 5); send_bits(s, blcodes-4, 4); /* not -3 as stated in appnote.txt */ for (rank = 0; rank < blcodes; rank++) { Tracev((stderr, "\nbl code %2d ", bl_order[rank])); send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); } Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); send_tree(s, (ct_data *)s->dyn_ltree, lcodes-1); /* literal tree */ Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); send_tree(s, (ct_data *)s->dyn_dtree, dcodes-1); /* distance tree */ Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); } /* =========================================================================== * Send a stored block */ void _tr_stored_block(s, buf, stored_len, eof) deflate_state *s; charf *buf; /* input block */ ulg stored_len; /* length of input block */ int eof; /* true if this is the last block for a file */ { send_bits(s, (STORED_BLOCK<<1)+eof, 3); /* send block type */ #ifdef DEBUG s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; s->compressed_len += (stored_len + 4) << 3; #endif copy_block(s, buf, (unsigned)stored_len, 1); /* with header */ } /* =========================================================================== * Send one empty static block to give enough lookahead for inflate. * This takes 10 bits, of which 7 may remain in the bit buffer. * The current inflate code requires 9 bits of lookahead. If the * last two codes for the previous block (real code plus EOB) were coded * on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode * the last real code. In this case we send two empty static blocks instead * of one. (There are no problems if the previous block is stored or fixed.) * To simplify the code, we assume the worst case of last real code encoded * on one bit only. */ void _tr_align(s) deflate_state *s; { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); #ifdef DEBUG s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ #endif bi_flush(s); /* Of the 10 bits for the empty block, we have already sent * (10 - bi_valid) bits. The lookahead for the last real code (before * the EOB of the previous block) was thus at least one plus the length * of the EOB plus what we have just sent of the empty static block. */ if (1 + s->last_eob_len + 10 - s->bi_valid < 9) { send_bits(s, STATIC_TREES<<1, 3); send_code(s, END_BLOCK, static_ltree); #ifdef DEBUG s->compressed_len += 10L; #endif bi_flush(s); } s->last_eob_len = 7; } /* =========================================================================== * Determine the best encoding for the current block: dynamic trees, static * trees or store, and output the encoded block to the zip file. */ void _tr_flush_block(s, buf, stored_len, eof) deflate_state *s; charf *buf; /* input block, or NULL if too old */ ulg stored_len; /* length of input block */ int eof; /* true if this is the last block for a file */ { ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ int max_blindex = 0; /* index of last bit length code of non zero freq */ /* Build the Huffman trees unless a stored block is forced */ if (s->level > 0) { /* Check if the file is ascii or binary */ if (s->data_type == Z_UNKNOWN) set_data_type(s); /* Construct the literal and distance trees */ build_tree(s, (tree_desc *)(&(s->l_desc))); Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, s->static_len)); build_tree(s, (tree_desc *)(&(s->d_desc))); Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, s->static_len)); /* At this point, opt_len and static_len are the total bit lengths of * the compressed block data, excluding the tree representations. */ /* Build the bit length tree for the above two trees, and get the index * in bl_order of the last bit length code to send. */ max_blindex = build_bl_tree(s); /* Determine the best encoding. Compute first the block length in bytes*/ opt_lenb = (s->opt_len+3+7)>>3; static_lenb = (s->static_len+3+7)>>3; Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, s->last_lit)); if (static_lenb <= opt_lenb) opt_lenb = static_lenb; } else { Assert(buf != (char*)0, "lost buf"); opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ } #ifdef FORCE_STORED if (buf != (char*)0) { /* force stored block */ #else if (stored_len+4 <= opt_lenb && buf != (char*)0) { /* 4: two words for the lengths */ #endif /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. * Otherwise we can't have processed more than WSIZE input bytes since * the last block flush, because compression would have been * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to * transform a block into a stored block. */ _tr_stored_block(s, buf, stored_len, eof); #ifdef FORCE_STATIC } else if (static_lenb >= 0) { /* force static trees */ #else } else if (static_lenb == opt_lenb) { #endif send_bits(s, (STATIC_TREES<<1)+eof, 3); compress_block(s, (ct_data *)static_ltree, (ct_data *)static_dtree); #ifdef DEBUG s->compressed_len += 3 + s->static_len; #endif } else { send_bits(s, (DYN_TREES<<1)+eof, 3); send_all_trees(s, s->l_desc.max_code+1, s->d_desc.max_code+1, max_blindex+1); compress_block(s, (ct_data *)s->dyn_ltree, (ct_data *)s->dyn_dtree); #ifdef DEBUG s->compressed_len += 3 + s->opt_len; #endif } Assert (s->compressed_len == s->bits_sent, "bad compressed size"); /* The above check is made mod 2^32, for files larger than 512 MB * and uLong implemented on 32 bits. */ init_block(s); if (eof) { bi_windup(s); #ifdef DEBUG s->compressed_len += 7; /* align on byte boundary */ #endif } Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, s->compressed_len-7*eof)); } /* =========================================================================== * Save the match info and tally the frequency counts. Return true if * the current block must be flushed. */ int _tr_tally (s, dist, lc) deflate_state *s; unsigned dist; /* distance of matched string */ unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ { s->d_buf[s->last_lit] = (ush)dist; s->l_buf[s->last_lit++] = (uch)lc; if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; } else { s->matches++; /* Here, lc is the match length - MIN_MATCH */ dist--; /* dist = match distance - 1 */ Assert((ush)dist < (ush)MAX_DIST(s) && (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); s->dyn_ltree[_length_code[lc]+LITERALS+1].Freq++; s->dyn_dtree[d_code(dist)].Freq++; } #ifdef TRUNCATE_BLOCK /* Try to guess if it is profitable to stop the current block here */ if ((s->last_lit & 0x1fff) == 0 && s->level > 2) { /* Compute an upper bound for the compressed length */ ulg out_length = (ulg)s->last_lit*8L; ulg in_length = (ulg)((long)s->strstart - s->block_start); int dcode; for (dcode = 0; dcode < D_CODES; dcode++) { out_length += (ulg)s->dyn_dtree[dcode].Freq * (5L+extra_dbits[dcode]); } out_length >>= 3; Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", s->last_lit, in_length, out_length, 100L - out_length*100L/in_length)); if (s->matches < s->last_lit/2 && out_length < in_length/2) return 1; } #endif return (s->last_lit == s->lit_bufsize-1); /* We avoid equality with lit_bufsize because of wraparound at 64K * on 16 bit machines and because stored blocks are restricted to * 64K-1 bytes. */ } /* =========================================================================== * Send the block data compressed using the given Huffman trees */ local void compress_block(s, ltree, dtree) deflate_state *s; ct_data *ltree; /* literal tree */ ct_data *dtree; /* distance tree */ { unsigned dist; /* distance of matched string */ int lc; /* match length or unmatched char (if dist == 0) */ unsigned lx = 0; /* running index in l_buf */ unsigned code; /* the code to send */ int extra; /* number of extra bits to send */ if (s->last_lit != 0) do { dist = s->d_buf[lx]; lc = s->l_buf[lx++]; if (dist == 0) { send_code(s, lc, ltree); /* send a literal byte */ Tracecv(isgraph(lc), (stderr," '%c' ", lc)); } else { /* Here, lc is the match length - MIN_MATCH */ code = _length_code[lc]; send_code(s, code+LITERALS+1, ltree); /* send the length code */ extra = extra_lbits[code]; if (extra != 0) { lc -= base_length[code]; send_bits(s, lc, extra); /* send the extra length bits */ } dist--; /* dist is now the match distance - 1 */ code = d_code(dist); Assert (code < D_CODES, "bad d_code"); send_code(s, code, dtree); /* send the distance code */ extra = extra_dbits[code]; if (extra != 0) { dist -= base_dist[code]; send_bits(s, dist, extra); /* send the extra distance bits */ } } /* literal or match pair ? */ /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ Assert(s->pending < s->lit_bufsize + 2*lx, "pendingBuf overflow"); } while (lx < s->last_lit); send_code(s, END_BLOCK, ltree); s->last_eob_len = ltree[END_BLOCK].Len; } /* =========================================================================== * Set the data type to ASCII or BINARY, using a crude approximation: * binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. * IN assertion: the fields freq of dyn_ltree are set and the total of all * frequencies does not exceed 64K (to fit in an int on 16 bit machines). */ local void set_data_type(s) deflate_state *s; { int n = 0; unsigned ascii_freq = 0; unsigned bin_freq = 0; while (n < 7) bin_freq += s->dyn_ltree[n++].Freq; while (n < 128) ascii_freq += s->dyn_ltree[n++].Freq; while (n < LITERALS) bin_freq += s->dyn_ltree[n++].Freq; s->data_type = (Byte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); } /* =========================================================================== * Reverse the first len bits of a code, using straightforward code (a faster * method would use a table) * IN assertion: 1 <= len <= 15 */ local unsigned bi_reverse(code, len) unsigned code; /* the value to invert */ int len; /* its bit length */ { register unsigned res = 0; do { res |= code & 1; code >>= 1, res <<= 1; } while (--len > 0); return res >> 1; } /* =========================================================================== * Flush the bit buffer, keeping at most 7 bits in it. */ local void bi_flush(s) deflate_state *s; { if (s->bi_valid == 16) { put_short(s, s->bi_buf); s->bi_buf = 0; s->bi_valid = 0; } else if (s->bi_valid >= 8) { put_byte(s, (Byte)s->bi_buf); s->bi_buf >>= 8; s->bi_valid -= 8; } } /* =========================================================================== * Flush the bit buffer and align the output on a byte boundary */ local void bi_windup(s) deflate_state *s; { if (s->bi_valid > 8) { put_short(s, s->bi_buf); } else if (s->bi_valid > 0) { put_byte(s, (Byte)s->bi_buf); } s->bi_buf = 0; s->bi_valid = 0; #ifdef DEBUG s->bits_sent = (s->bits_sent+7) & ~7; #endif } /* =========================================================================== * Copy a stored block, storing first the length and its * one's complement if requested. */ local void copy_block(s, buf, len, header) deflate_state *s; charf *buf; /* the input data */ unsigned len; /* its length */ int header; /* true if block header must be written */ { bi_windup(s); /* align on byte boundary */ s->last_eob_len = 8; /* enough lookahead for inflate */ if (header) { put_short(s, (ush)len); put_short(s, (ush)~len); #ifdef DEBUG s->bits_sent += 2*16; #endif } #ifdef DEBUG s->bits_sent += (ulg)len<<3; #endif while (len--) { put_byte(s, *buf++); } } gnupg-1.4.20/zlib/infblock.h0000644000175000017500000000227612635262326012555 00000000000000/* infblock.h -- header to use infblock.c * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ struct inflate_blocks_state; typedef struct inflate_blocks_state FAR inflate_blocks_statef; extern inflate_blocks_statef * inflate_blocks_new OF(( z_streamp z, check_func c, /* check function */ uInt w)); /* window size */ extern int inflate_blocks OF(( inflate_blocks_statef *, z_streamp , int)); /* initial return code */ extern void inflate_blocks_reset OF(( inflate_blocks_statef *, z_streamp , uLongf *)); /* check value on output */ extern int inflate_blocks_free OF(( inflate_blocks_statef *, z_streamp)); extern void inflate_set_dictionary OF(( inflate_blocks_statef *s, const Bytef *d, /* dictionary */ uInt n)); /* dictionary length */ extern int inflate_blocks_sync_point OF(( inflate_blocks_statef *s)); gnupg-1.4.20/zlib/inftrees.h0000644000175000017500000000507012635262326012600 00000000000000/* inftrees.h -- header to use inftrees.c * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ /* Huffman code lookup table entry--this entry is four bytes for machines that have 16-bit pointers (e.g. PC's in the small or medium model). */ typedef struct inflate_huft_s FAR inflate_huft; struct inflate_huft_s { union { struct { Byte Exop; /* number of extra bits or operation */ Byte Bits; /* number of bits in this code or subcode */ } what; uInt pad; /* pad structure to a power of 2 (4 bytes for */ } word; /* 16-bit, 8 bytes for 32-bit int's) */ uInt base; /* literal, length base, distance base, or table offset */ }; /* Maximum size of dynamic tree. The maximum found in a long but non- exhaustive search was 1004 huft structures (850 for length/literals and 154 for distances, the latter actually the result of an exhaustive search). The actual maximum is not known, but the value below is more than safe. */ #define MANY 1440 extern int inflate_trees_bits OF(( uIntf *, /* 19 code lengths */ uIntf *, /* bits tree desired/actual depth */ inflate_huft * FAR *, /* bits tree result */ inflate_huft *, /* space for trees */ z_streamp)); /* for messages */ extern int inflate_trees_dynamic OF(( uInt, /* number of literal/length codes */ uInt, /* number of distance codes */ uIntf *, /* that many (total) code lengths */ uIntf *, /* literal desired/actual bit depth */ uIntf *, /* distance desired/actual bit depth */ inflate_huft * FAR *, /* literal/length tree result */ inflate_huft * FAR *, /* distance tree result */ inflate_huft *, /* space for trees */ z_streamp)); /* for messages */ extern int inflate_trees_fixed OF(( uIntf *, /* literal desired/actual bit depth */ uIntf *, /* distance desired/actual bit depth */ inflate_huft * FAR *, /* literal/length tree result */ inflate_huft * FAR *, /* distance tree result */ z_streamp)); /* for memory allocation */ gnupg-1.4.20/zlib/inflate.c0000644000175000017500000002267012635262326012403 00000000000000/* inflate.c -- zlib interface to inflate modules * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" #include "infblock.h" struct inflate_blocks_state {int dummy;}; /* for buggy compilers */ typedef enum { METHOD, /* waiting for method byte */ FLAG, /* waiting for flag byte */ DICT4, /* four dictionary check bytes to go */ DICT3, /* three dictionary check bytes to go */ DICT2, /* two dictionary check bytes to go */ DICT1, /* one dictionary check byte to go */ DICT0, /* waiting for inflateSetDictionary */ BLOCKS, /* decompressing blocks */ CHECK4, /* four check bytes to go */ CHECK3, /* three check bytes to go */ CHECK2, /* two check bytes to go */ CHECK1, /* one check byte to go */ DONE, /* finished check, done */ BAD} /* got an error--stay here */ inflate_mode; /* inflate private state */ struct internal_state { /* mode */ inflate_mode mode; /* current inflate mode */ /* mode dependent information */ union { uInt method; /* if FLAGS, method byte */ struct { uLong was; /* computed check value */ uLong need; /* stream check value */ } check; /* if CHECK, check values to compare */ uInt marker; /* if BAD, inflateSync's marker bytes count */ } sub; /* submode */ /* mode independent information */ int nowrap; /* flag for no wrapper */ uInt wbits; /* log2(window size) (8..15, defaults to 15) */ inflate_blocks_statef *blocks; /* current inflate_blocks state */ }; int ZEXPORT inflateReset(z) z_streamp z; { if (z == Z_NULL || z->state == Z_NULL) return Z_STREAM_ERROR; z->total_in = z->total_out = 0; z->msg = Z_NULL; z->state->mode = z->state->nowrap ? BLOCKS : METHOD; inflate_blocks_reset(z->state->blocks, z, Z_NULL); Tracev((stderr, "inflate: reset\n")); return Z_OK; } int ZEXPORT inflateEnd(z) z_streamp z; { if (z == Z_NULL || z->state == Z_NULL || z->zfree == Z_NULL) return Z_STREAM_ERROR; if (z->state->blocks != Z_NULL) inflate_blocks_free(z->state->blocks, z); ZFREE(z, z->state); z->state = Z_NULL; Tracev((stderr, "inflate: end\n")); return Z_OK; } int ZEXPORT inflateInit2_(z, w, version, stream_size) z_streamp z; int w; const char *version; int stream_size; { if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || stream_size != sizeof(z_stream)) return Z_VERSION_ERROR; /* initialize state */ if (z == Z_NULL) return Z_STREAM_ERROR; z->msg = Z_NULL; if (z->zalloc == Z_NULL) { z->zalloc = zcalloc; z->opaque = (voidpf)0; } if (z->zfree == Z_NULL) z->zfree = zcfree; if ((z->state = (struct internal_state FAR *) ZALLOC(z,1,sizeof(struct internal_state))) == Z_NULL) return Z_MEM_ERROR; z->state->blocks = Z_NULL; /* handle undocumented nowrap option (no zlib header or check) */ z->state->nowrap = 0; if (w < 0) { w = - w; z->state->nowrap = 1; } /* set window size */ if (w < 8 || w > 15) { inflateEnd(z); return Z_STREAM_ERROR; } z->state->wbits = (uInt)w; /* create inflate_blocks state */ if ((z->state->blocks = inflate_blocks_new(z, z->state->nowrap ? Z_NULL : adler32, (uInt)1 << w)) == Z_NULL) { inflateEnd(z); return Z_MEM_ERROR; } Tracev((stderr, "inflate: allocated\n")); /* reset state */ inflateReset(z); return Z_OK; } int ZEXPORT inflateInit_(z, version, stream_size) z_streamp z; const char *version; int stream_size; { return inflateInit2_(z, DEF_WBITS, version, stream_size); } #define NEEDBYTE {if(z->avail_in==0)return r;r=f;} #define NEXTBYTE (z->avail_in--,z->total_in++,*z->next_in++) int ZEXPORT inflate(z, f) z_streamp z; int f; { int r; uInt b; if (z == Z_NULL || z->state == Z_NULL || z->next_in == Z_NULL) return Z_STREAM_ERROR; f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK; r = Z_BUF_ERROR; while (1) switch (z->state->mode) { case METHOD: NEEDBYTE if (((z->state->sub.method = NEXTBYTE) & 0xf) != Z_DEFLATED) { z->state->mode = BAD; z->msg = (char*)"unknown compression method"; z->state->sub.marker = 5; /* can't try inflateSync */ break; } if ((z->state->sub.method >> 4) + 8 > z->state->wbits) { z->state->mode = BAD; z->msg = (char*)"invalid window size"; z->state->sub.marker = 5; /* can't try inflateSync */ break; } z->state->mode = FLAG; case FLAG: NEEDBYTE b = NEXTBYTE; if (((z->state->sub.method << 8) + b) % 31) { z->state->mode = BAD; z->msg = (char*)"incorrect header check"; z->state->sub.marker = 5; /* can't try inflateSync */ break; } Tracev((stderr, "inflate: zlib header ok\n")); if (!(b & PRESET_DICT)) { z->state->mode = BLOCKS; break; } z->state->mode = DICT4; case DICT4: NEEDBYTE z->state->sub.check.need = (uLong)NEXTBYTE << 24; z->state->mode = DICT3; case DICT3: NEEDBYTE z->state->sub.check.need += (uLong)NEXTBYTE << 16; z->state->mode = DICT2; case DICT2: NEEDBYTE z->state->sub.check.need += (uLong)NEXTBYTE << 8; z->state->mode = DICT1; case DICT1: NEEDBYTE z->state->sub.check.need += (uLong)NEXTBYTE; z->adler = z->state->sub.check.need; z->state->mode = DICT0; return Z_NEED_DICT; case DICT0: z->state->mode = BAD; z->msg = (char*)"need dictionary"; z->state->sub.marker = 0; /* can try inflateSync */ return Z_STREAM_ERROR; case BLOCKS: r = inflate_blocks(z->state->blocks, z, r); if (r == Z_DATA_ERROR) { z->state->mode = BAD; z->state->sub.marker = 0; /* can try inflateSync */ break; } if (r == Z_OK) r = f; if (r != Z_STREAM_END) return r; r = f; inflate_blocks_reset(z->state->blocks, z, &z->state->sub.check.was); if (z->state->nowrap) { z->state->mode = DONE; break; } z->state->mode = CHECK4; case CHECK4: NEEDBYTE z->state->sub.check.need = (uLong)NEXTBYTE << 24; z->state->mode = CHECK3; case CHECK3: NEEDBYTE z->state->sub.check.need += (uLong)NEXTBYTE << 16; z->state->mode = CHECK2; case CHECK2: NEEDBYTE z->state->sub.check.need += (uLong)NEXTBYTE << 8; z->state->mode = CHECK1; case CHECK1: NEEDBYTE z->state->sub.check.need += (uLong)NEXTBYTE; if (z->state->sub.check.was != z->state->sub.check.need) { z->state->mode = BAD; z->msg = (char*)"incorrect data check"; z->state->sub.marker = 5; /* can't try inflateSync */ break; } Tracev((stderr, "inflate: zlib check ok\n")); z->state->mode = DONE; case DONE: return Z_STREAM_END; case BAD: return Z_DATA_ERROR; default: return Z_STREAM_ERROR; } #ifdef NEED_DUMMY_RETURN return Z_STREAM_ERROR; /* Some dumb compilers complain without this */ #endif } int ZEXPORT inflateSetDictionary(z, dictionary, dictLength) z_streamp z; const Bytef *dictionary; uInt dictLength; { uInt length = dictLength; if (z == Z_NULL || z->state == Z_NULL || z->state->mode != DICT0) return Z_STREAM_ERROR; if (adler32(1L, dictionary, dictLength) != z->adler) return Z_DATA_ERROR; z->adler = 1L; if (length >= ((uInt)1<state->wbits)) { length = (1<state->wbits)-1; dictionary += dictLength - length; } inflate_set_dictionary(z->state->blocks, dictionary, length); z->state->mode = BLOCKS; return Z_OK; } int ZEXPORT inflateSync(z) z_streamp z; { uInt n; /* number of bytes to look at */ Bytef *p; /* pointer to bytes */ uInt m; /* number of marker bytes found in a row */ uLong r, w; /* temporaries to save total_in and total_out */ /* set up */ if (z == Z_NULL || z->state == Z_NULL) return Z_STREAM_ERROR; if (z->state->mode != BAD) { z->state->mode = BAD; z->state->sub.marker = 0; } if ((n = z->avail_in) == 0) return Z_BUF_ERROR; p = z->next_in; m = z->state->sub.marker; /* search */ while (n && m < 4) { static const Byte mark[4] = {0, 0, 0xff, 0xff}; if (*p == mark[m]) m++; else if (*p) m = 0; else m = 4 - m; p++, n--; } /* restore */ z->total_in += p - z->next_in; z->next_in = p; z->avail_in = n; z->state->sub.marker = m; /* return no joy or set up to restart on a new block */ if (m != 4) return Z_DATA_ERROR; r = z->total_in; w = z->total_out; inflateReset(z); z->total_in = r; z->total_out = w; z->state->mode = BLOCKS; return Z_OK; } /* Returns true if inflate is currently at the end of a block generated * by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP * implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH * but removes the length bytes of the resulting empty stored block. When * decompressing, PPP checks that at the end of input packet, inflate is * waiting for these length bytes. */ int ZEXPORT inflateSyncPoint(z) z_streamp z; { if (z == Z_NULL || z->state == Z_NULL || z->state->blocks == Z_NULL) return Z_STREAM_ERROR; return inflate_blocks_sync_point(z->state->blocks); } gnupg-1.4.20/zlib/infutil.h0000644000175000017500000000713712635262326012441 00000000000000/* infutil.h -- types and macros common to blocks and codes * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ #ifndef _INFUTIL_H #define _INFUTIL_H typedef enum { TYPE, /* get type bits (3, including end bit) */ LENS, /* get lengths for stored */ STORED, /* processing stored block */ TABLE, /* get table lengths */ BTREE, /* get bit lengths tree for a dynamic block */ DTREE, /* get length, distance trees for a dynamic block */ CODES, /* processing fixed or dynamic block */ DRY, /* output remaining window bytes */ DONE, /* finished last block, done */ BAD} /* got a data error--stuck here */ inflate_block_mode; /* inflate blocks semi-private state */ struct inflate_blocks_state { /* mode */ inflate_block_mode mode; /* current inflate_block mode */ /* mode dependent information */ union { uInt left; /* if STORED, bytes left to copy */ struct { uInt table; /* table lengths (14 bits) */ uInt index; /* index into blens (or border) */ uIntf *blens; /* bit lengths of codes */ uInt bb; /* bit length tree depth */ inflate_huft *tb; /* bit length decoding tree */ } trees; /* if DTREE, decoding info for trees */ struct { inflate_codes_statef *codes; } decode; /* if CODES, current state */ } sub; /* submode */ uInt last; /* true if this block is the last block */ /* mode independent information */ uInt bitk; /* bits in bit buffer */ uLong bitb; /* bit buffer */ inflate_huft *hufts; /* single malloc for tree space */ Bytef *window; /* sliding window */ Bytef *end; /* one byte after sliding window */ Bytef *read; /* window read pointer */ Bytef *write; /* window write pointer */ check_func checkfn; /* check function */ uLong check; /* check on output */ }; /* defines for inflate input/output */ /* update pointers and return */ #define UPDBITS {s->bitb=b;s->bitk=k;} #define UPDIN {z->avail_in=n;z->total_in+=p-z->next_in;z->next_in=p;} #define UPDOUT {s->write=q;} #define UPDATE {UPDBITS UPDIN UPDOUT} #define LEAVE {UPDATE return inflate_flush(s,z,r);} /* get bytes and bits */ #define LOADIN {p=z->next_in;n=z->avail_in;b=s->bitb;k=s->bitk;} #define NEEDBYTE {if(n)r=Z_OK;else LEAVE} #define NEXTBYTE (n--,*p++) #define NEEDBITS(j) {while(k<(j)){NEEDBYTE;b|=((uLong)NEXTBYTE)<>=(j);k-=(j);} /* output bytes */ #define WAVAIL (uInt)(qread?s->read-q-1:s->end-q) #define LOADOUT {q=s->write;m=(uInt)WAVAIL;} #define WRAP {if(q==s->end&&s->read!=s->window){q=s->window;m=(uInt)WAVAIL;}} #define FLUSH {UPDOUT r=inflate_flush(s,z,r); LOADOUT} #define NEEDOUT {if(m==0){WRAP if(m==0){FLUSH WRAP if(m==0) LEAVE}}r=Z_OK;} #define OUTBYTE(a) {*q++=(Byte)(a);m--;} /* load local pointers */ #define LOAD {LOADIN LOADOUT} /* masks for lower bits (size given to avoid silly warnings with Visual C++) */ extern uInt inflate_mask[17]; /* copy as much as possible from the sliding window to the output area */ extern int inflate_flush OF(( inflate_blocks_statef *, z_streamp , int)); struct internal_state {int dummy;}; /* for buggy compilers */ #endif gnupg-1.4.20/zlib/deflate.c0000644000175000017500000013752712635262326012375 00000000000000/* deflate.c -- compress data using the deflation algorithm * Copyright (C) 1995-2002 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* * ALGORITHM * * The "deflation" process depends on being able to identify portions * of the input text which are identical to earlier input (within a * sliding window trailing behind the input currently being processed). * * The most straightforward technique turns out to be the fastest for * most input files: try all possible matches and select the longest. * The key feature of this algorithm is that insertions into the string * dictionary are very simple and thus fast, and deletions are avoided * completely. Insertions are performed at each input character, whereas * string matches are performed only when the previous match ends. So it * is preferable to spend more time in matches to allow very fast string * insertions and avoid deletions. The matching algorithm for small * strings is inspired from that of Rabin & Karp. A brute force approach * is used to find longer strings when a small match has been found. * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze * (by Leonid Broukhis). * A previous version of this file used a more sophisticated algorithm * (by Fiala and Greene) which is guaranteed to run in linear amortized * time, but has a larger average cost, uses more memory and is patented. * However the F&G algorithm may be faster for some highly redundant * files if the parameter max_chain_length (described below) is too large. * * ACKNOWLEDGEMENTS * * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and * I found it in 'freeze' written by Leonid Broukhis. * Thanks to many people for bug reports and testing. * * REFERENCES * * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". * Available in ftp://ds.internic.net/rfc/rfc1951.txt * * A description of the Rabin and Karp algorithm is given in the book * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. * * Fiala,E.R., and Greene,D.H. * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 * */ /* @(#) $Id$ */ #include "deflate.h" const char deflate_copyright[] = " deflate 1.1.4 Copyright 1995-2002 Jean-loup Gailly "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot include such an acknowledgment, I would appreciate that you keep this copyright string in the executable of your product. */ /* =========================================================================== * Function prototypes. */ typedef enum { need_more, /* block not completed, need more input or more output */ block_done, /* block flush performed */ finish_started, /* finish started, need only more output at next deflate */ finish_done /* finish done, accept no more input or output */ } block_state; typedef block_state (*compress_func) OF((deflate_state *s, int flush)); /* Compression function. Returns the block state after the call. */ local void fill_window OF((deflate_state *s)); local block_state deflate_stored OF((deflate_state *s, int flush)); local block_state deflate_fast OF((deflate_state *s, int flush)); local block_state deflate_slow OF((deflate_state *s, int flush)); local void lm_init OF((deflate_state *s)); local void putShortMSB OF((deflate_state *s, uInt b)); local void flush_pending OF((z_streamp strm)); local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size)); #ifdef ASMV void match_init OF((void)); /* asm code initialization */ uInt longest_match OF((deflate_state *s, IPos cur_match)); #else local uInt longest_match OF((deflate_state *s, IPos cur_match)); #endif #ifdef DEBUG local void check_match OF((deflate_state *s, IPos start, IPos match, int length)); #endif /* =========================================================================== * Local data */ #define NIL 0 /* Tail of hash chains */ #ifndef TOO_FAR # define TOO_FAR 4096 #endif /* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) /* Minimum amount of lookahead, except at the end of the input file. * See deflate.c for comments about the MIN_MATCH+1. */ /* Values for max_lazy_match, good_match and max_chain_length, depending on * the desired pack level (0..9). The values given below have been tuned to * exclude worst case performance for pathological files. Better values may be * found for specific files. */ typedef struct config_s { ush good_length; /* reduce lazy search above this match length */ ush max_lazy; /* do not perform lazy search above this match length */ ush nice_length; /* quit search above this match length */ ush max_chain; compress_func func; } config; local const config configuration_table[10] = { /* good lazy nice chain */ /* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ /* 1 */ {4, 4, 8, 4, deflate_fast}, /* maximum speed, no lazy matches */ /* 2 */ {4, 5, 16, 8, deflate_fast}, /* 3 */ {4, 6, 32, 32, deflate_fast}, /* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ /* 5 */ {8, 16, 32, 32, deflate_slow}, /* 6 */ {8, 16, 128, 128, deflate_slow}, /* 7 */ {8, 32, 128, 256, deflate_slow}, /* 8 */ {32, 128, 258, 1024, deflate_slow}, /* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* maximum compression */ /* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 * For deflate_fast() (levels <= 3) good is ignored and lazy has a different * meaning. */ #define EQUAL 0 /* result of memcmp for equal strings */ struct static_tree_desc_s {int dummy;}; /* for buggy compilers */ /* =========================================================================== * Update a hash value with the given input byte * IN assertion: all calls to to UPDATE_HASH are made with consecutive * input characters, so that a running hash key can be computed from the * previous key instead of complete recalculation each time. */ #define UPDATE_HASH(s,h,c) (h = (((h)<hash_shift) ^ (c)) & s->hash_mask) /* =========================================================================== * Insert string str in the dictionary and set match_head to the previous head * of the hash chain (the most recent string with same hash key). Return * the previous length of the hash chain. * If this file is compiled with -DFASTEST, the compression level is forced * to 1, and no hash chains are maintained. * IN assertion: all calls to to INSERT_STRING are made with consecutive * input characters and the first MIN_MATCH bytes of str are valid * (except for the last MIN_MATCH-1 bytes of the input file). */ #ifdef FASTEST #define INSERT_STRING(s, str, match_head) \ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ match_head = s->head[s->ins_h], \ s->head[s->ins_h] = (Pos)(str)) #else #define INSERT_STRING(s, str, match_head) \ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ s->prev[(str) & s->w_mask] = match_head = s->head[s->ins_h], \ s->head[s->ins_h] = (Pos)(str)) #endif /* =========================================================================== * Initialize the hash table (avoiding 64K overflow for 16 bit systems). * prev[] will be initialized on the fly. */ #define CLEAR_HASH(s) \ s->head[s->hash_size-1] = NIL; \ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head)); /* ========================================================================= */ int ZEXPORT deflateInit_(strm, level, version, stream_size) z_streamp strm; int level; const char *version; int stream_size; { return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, version, stream_size); /* To do: ignore strm->next_in if we use it as window */ } /* ========================================================================= */ int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy, version, stream_size) z_streamp strm; int level; int method; int windowBits; int memLevel; int strategy; const char *version; int stream_size; { deflate_state *s; int noheader = 0; static const char* my_version = ZLIB_VERSION; ushf *overlay; /* We overlay pending_buf and d_buf+l_buf. This works since the average * output size for (length,distance) codes is <= 24 bits. */ if (version == Z_NULL || version[0] != my_version[0] || stream_size != sizeof(z_stream)) { return Z_VERSION_ERROR; } if (strm == Z_NULL) return Z_STREAM_ERROR; strm->msg = Z_NULL; if (strm->zalloc == Z_NULL) { strm->zalloc = zcalloc; strm->opaque = (voidpf)0; } if (strm->zfree == Z_NULL) strm->zfree = zcfree; if (level == Z_DEFAULT_COMPRESSION) level = 6; #ifdef FASTEST level = 1; #endif if (windowBits < 0) { /* undocumented feature: suppress zlib header */ noheader = 1; windowBits = -windowBits; } if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || windowBits < 9 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) { return Z_STREAM_ERROR; } s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); if (s == Z_NULL) return Z_MEM_ERROR; strm->state = (struct internal_state FAR *)s; s->strm = strm; s->noheader = noheader; s->w_bits = windowBits; s->w_size = 1 << s->w_bits; s->w_mask = s->w_size - 1; s->hash_bits = memLevel + 7; s->hash_size = 1 << s->hash_bits; s->hash_mask = s->hash_size - 1; s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH); s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); s->pending_buf = (uchf *) overlay; s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L); if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || s->pending_buf == Z_NULL) { strm->msg = (char*)ERR_MSG(Z_MEM_ERROR); deflateEnd (strm); return Z_MEM_ERROR; } s->d_buf = overlay + s->lit_bufsize/sizeof(ush); s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; s->level = level; s->strategy = strategy; s->method = (Byte)method; return deflateReset(strm); } /* ========================================================================= */ int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength) z_streamp strm; const Bytef *dictionary; uInt dictLength; { deflate_state *s; uInt length = dictLength; uInt n; IPos hash_head = 0; if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL || strm->state->status != INIT_STATE) return Z_STREAM_ERROR; s = strm->state; strm->adler = adler32(strm->adler, dictionary, dictLength); if (length < MIN_MATCH) return Z_OK; if (length > MAX_DIST(s)) { length = MAX_DIST(s); #ifndef USE_DICT_HEAD dictionary += dictLength - length; /* use the tail of the dictionary */ #endif } zmemcpy(s->window, dictionary, length); s->strstart = length; s->block_start = (long)length; /* Insert all strings in the hash table (except for the last two bytes). * s->lookahead stays null, so s->ins_h will be recomputed at the next * call of fill_window. */ s->ins_h = s->window[0]; UPDATE_HASH(s, s->ins_h, s->window[1]); for (n = 0; n <= length - MIN_MATCH; n++) { INSERT_STRING(s, n, hash_head); } if (hash_head) hash_head = 0; /* to make compiler happy */ return Z_OK; } /* ========================================================================= */ int ZEXPORT deflateReset (strm) z_streamp strm; { deflate_state *s; if (strm == Z_NULL || strm->state == Z_NULL || strm->zalloc == Z_NULL || strm->zfree == Z_NULL) return Z_STREAM_ERROR; strm->total_in = strm->total_out = 0; strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ strm->data_type = Z_UNKNOWN; s = (deflate_state *)strm->state; s->pending = 0; s->pending_out = s->pending_buf; if (s->noheader < 0) { s->noheader = 0; /* was set to -1 by deflate(..., Z_FINISH); */ } s->status = s->noheader ? BUSY_STATE : INIT_STATE; strm->adler = 1; s->last_flush = Z_NO_FLUSH; _tr_init(s); lm_init(s); return Z_OK; } /* ========================================================================= */ int ZEXPORT deflateParams(strm, level, strategy) z_streamp strm; int level; int strategy; { deflate_state *s; compress_func func; int err = Z_OK; if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; s = strm->state; if (level == Z_DEFAULT_COMPRESSION) { level = 6; } if (level < 0 || level > 9 || strategy < 0 || strategy > Z_HUFFMAN_ONLY) { return Z_STREAM_ERROR; } func = configuration_table[s->level].func; if (func != configuration_table[level].func && strm->total_in != 0) { /* Flush the last buffer: */ err = deflate(strm, Z_PARTIAL_FLUSH); } if (s->level != level) { s->level = level; s->max_lazy_match = configuration_table[level].max_lazy; s->good_match = configuration_table[level].good_length; s->nice_match = configuration_table[level].nice_length; s->max_chain_length = configuration_table[level].max_chain; } s->strategy = strategy; return err; } /* ========================================================================= * Put a short in the pending buffer. The 16-bit value is put in MSB order. * IN assertion: the stream state is correct and there is enough room in * pending_buf. */ local void putShortMSB (s, b) deflate_state *s; uInt b; { put_byte(s, (Byte)(b >> 8)); put_byte(s, (Byte)(b & 0xff)); } /* ========================================================================= * Flush as much pending output as possible. All deflate() output goes * through this function so some applications may wish to modify it * to avoid allocating a large strm->next_out buffer and copying into it. * (See also read_buf()). */ local void flush_pending(strm) z_streamp strm; { unsigned len = strm->state->pending; if (len > strm->avail_out) len = strm->avail_out; if (len == 0) return; zmemcpy(strm->next_out, strm->state->pending_out, len); strm->next_out += len; strm->state->pending_out += len; strm->total_out += len; strm->avail_out -= len; strm->state->pending -= len; if (strm->state->pending == 0) { strm->state->pending_out = strm->state->pending_buf; } } /* ========================================================================= */ int ZEXPORT deflate (strm, flush) z_streamp strm; int flush; { int old_flush; /* value of flush param for previous deflate call */ deflate_state *s; if (strm == Z_NULL || strm->state == Z_NULL || flush > Z_FINISH || flush < 0) { return Z_STREAM_ERROR; } s = strm->state; if (strm->next_out == Z_NULL || (strm->next_in == Z_NULL && strm->avail_in != 0) || (s->status == FINISH_STATE && flush != Z_FINISH)) { ERR_RETURN(strm, Z_STREAM_ERROR); } if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); s->strm = strm; /* just in case */ old_flush = s->last_flush; s->last_flush = flush; /* Write the zlib header */ if (s->status == INIT_STATE) { uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8; uInt level_flags = (s->level-1) >> 1; if (level_flags > 3) level_flags = 3; header |= (level_flags << 6); if (s->strstart != 0) header |= PRESET_DICT; header += 31 - (header % 31); s->status = BUSY_STATE; putShortMSB(s, header); /* Save the adler32 of the preset dictionary: */ if (s->strstart != 0) { putShortMSB(s, (uInt)(strm->adler >> 16)); putShortMSB(s, (uInt)(strm->adler & 0xffff)); } strm->adler = 1L; } /* Flush as much pending output as possible */ if (s->pending != 0) { flush_pending(strm); if (strm->avail_out == 0) { /* Since avail_out is 0, deflate will be called again with * more output space, but possibly with both pending and * avail_in equal to zero. There won't be anything to do, * but this is not an error situation so make sure we * return OK instead of BUF_ERROR at next call of deflate: */ s->last_flush = -1; return Z_OK; } /* Make sure there is something to do and avoid duplicate consecutive * flushes. For repeated and useless calls with Z_FINISH, we keep * returning Z_STREAM_END instead of Z_BUFF_ERROR. */ } else if (strm->avail_in == 0 && flush <= old_flush && flush != Z_FINISH) { ERR_RETURN(strm, Z_BUF_ERROR); } /* User must not provide more input after the first FINISH: */ if (s->status == FINISH_STATE && strm->avail_in != 0) { ERR_RETURN(strm, Z_BUF_ERROR); } /* Start a new block or continue the current one. */ if (strm->avail_in != 0 || s->lookahead != 0 || (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { block_state bstate; bstate = (*(configuration_table[s->level].func))(s, flush); if (bstate == finish_started || bstate == finish_done) { s->status = FINISH_STATE; } if (bstate == need_more || bstate == finish_started) { if (strm->avail_out == 0) { s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ } return Z_OK; /* If flush != Z_NO_FLUSH && avail_out == 0, the next call * of deflate should use the same flush parameter to make sure * that the flush is complete. So we don't have to output an * empty block here, this will be done at next call. This also * ensures that for a very small output buffer, we emit at most * one empty block. */ } if (bstate == block_done) { if (flush == Z_PARTIAL_FLUSH) { _tr_align(s); } else { /* FULL_FLUSH or SYNC_FLUSH */ _tr_stored_block(s, (char*)0, 0L, 0); /* For a full flush, this empty block will be recognized * as a special marker by inflate_sync(). */ if (flush == Z_FULL_FLUSH) { CLEAR_HASH(s); /* forget history */ } } flush_pending(strm); if (strm->avail_out == 0) { s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ return Z_OK; } } } Assert(strm->avail_out > 0, "bug2"); if (flush != Z_FINISH) return Z_OK; if (s->noheader) return Z_STREAM_END; /* Write the zlib trailer (adler32) */ putShortMSB(s, (uInt)(strm->adler >> 16)); putShortMSB(s, (uInt)(strm->adler & 0xffff)); flush_pending(strm); /* If avail_out is zero, the application will call deflate again * to flush the rest. */ s->noheader = -1; /* write the trailer only once! */ return s->pending != 0 ? Z_OK : Z_STREAM_END; } /* ========================================================================= */ int ZEXPORT deflateEnd (strm) z_streamp strm; { int status; if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR; status = strm->state->status; if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) { return Z_STREAM_ERROR; } /* Deallocate in reverse order of allocations: */ TRY_FREE(strm, strm->state->pending_buf); TRY_FREE(strm, strm->state->head); TRY_FREE(strm, strm->state->prev); TRY_FREE(strm, strm->state->window); ZFREE(strm, strm->state); strm->state = Z_NULL; return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; } /* ========================================================================= * Copy the source state to the destination state. * To simplify the source, this is not supported for 16-bit MSDOS (which * doesn't have enough memory anyway to duplicate compression states). */ int ZEXPORT deflateCopy (dest, source) z_streamp dest; z_streamp source; { #ifdef MAXSEG_64K return Z_STREAM_ERROR; #else deflate_state *ds; deflate_state *ss; ushf *overlay; if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) { return Z_STREAM_ERROR; } ss = source->state; *dest = *source; ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); if (ds == Z_NULL) return Z_MEM_ERROR; dest->state = (struct internal_state FAR *) ds; *ds = *ss; ds->strm = dest; ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2); ds->pending_buf = (uchf *) overlay; if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || ds->pending_buf == Z_NULL) { deflateEnd (dest); return Z_MEM_ERROR; } /* following zmemcpy do not work for 16-bit MSDOS */ zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); zmemcpy(ds->prev, ss->prev, ds->w_size * sizeof(Pos)); zmemcpy(ds->head, ss->head, ds->hash_size * sizeof(Pos)); zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush); ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize; ds->l_desc.dyn_tree = ds->dyn_ltree; ds->d_desc.dyn_tree = ds->dyn_dtree; ds->bl_desc.dyn_tree = ds->bl_tree; return Z_OK; #endif } /* =========================================================================== * Read a new buffer from the current input stream, update the adler32 * and total number of bytes read. All deflate() input goes through * this function so some applications may wish to modify it to avoid * allocating a large strm->next_in buffer and copying from it. * (See also flush_pending()). */ local int read_buf(strm, buf, size) z_streamp strm; Bytef *buf; unsigned size; { unsigned len = strm->avail_in; if (len > size) len = size; if (len == 0) return 0; strm->avail_in -= len; if (!strm->state->noheader) { strm->adler = adler32(strm->adler, strm->next_in, len); } zmemcpy(buf, strm->next_in, len); strm->next_in += len; strm->total_in += len; return (int)len; } /* =========================================================================== * Initialize the "longest match" routines for a new zlib stream */ local void lm_init (s) deflate_state *s; { s->window_size = (ulg)2L*s->w_size; CLEAR_HASH(s); /* Set the default configuration parameters: */ s->max_lazy_match = configuration_table[s->level].max_lazy; s->good_match = configuration_table[s->level].good_length; s->nice_match = configuration_table[s->level].nice_length; s->max_chain_length = configuration_table[s->level].max_chain; s->strstart = 0; s->block_start = 0L; s->lookahead = 0; s->match_length = s->prev_length = MIN_MATCH-1; s->match_available = 0; s->ins_h = 0; #ifdef ASMV match_init(); /* initialize the asm code */ #endif } /* =========================================================================== * Set match_start to the longest match starting at the given string and * return its length. Matches shorter or equal to prev_length are discarded, * in which case the result is equal to prev_length and match_start is * garbage. * IN assertions: cur_match is the head of the hash chain for the current * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 * OUT assertion: the match length is not greater than s->lookahead. */ #ifndef ASMV /* For 80x86 and 680x0, an optimized version will be provided in match.asm or * match.S. The code will be functionally equivalent. */ #ifndef FASTEST local uInt longest_match(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ { unsigned chain_length = s->max_chain_length;/* max hash chain length */ register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ register int len; /* length of current match */ int best_len = s->prev_length; /* best match length so far */ int nice_match = s->nice_match; /* stop if match long enough */ IPos limit = s->strstart > (IPos)MAX_DIST(s) ? s->strstart - (IPos)MAX_DIST(s) : NIL; /* Stop when cur_match becomes <= limit. To simplify the code, * we prevent matches with the string of window index 0. */ Posf *prev = s->prev; uInt wmask = s->w_mask; #ifdef UNALIGNED_OK /* Compare two bytes at a time. Note: this is not always beneficial. * Try with and without -DUNALIGNED_OK to check. */ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; register ush scan_start = *(ushf*)scan; register ush scan_end = *(ushf*)(scan+best_len-1); #else register Bytef *strend = s->window + s->strstart + MAX_MATCH; register Byte scan_end1 = scan[best_len-1]; register Byte scan_end = scan[best_len]; #endif /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. * It is easy to get rid of this optimization if necessary. */ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); /* Do not waste too much time if we already have a good match: */ if (s->prev_length >= s->good_match) { chain_length >>= 2; } /* Do not look for matches beyond the end of the input. This is necessary * to make deflate deterministic. */ if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); do { Assert(cur_match < s->strstart, "no future"); match = s->window + cur_match; /* Skip to next match if the match length cannot increase * or if the match length is less than 2: */ #if (defined(UNALIGNED_OK) && MAX_MATCH == 258) /* This code assumes sizeof(unsigned short) == 2. Do not use * UNALIGNED_OK if your compiler uses a different size. */ if (*(ushf*)(match+best_len-1) != scan_end || *(ushf*)match != scan_start) continue; /* It is not necessary to compare scan[2] and match[2] since they are * always equal when the other bytes match, given that the hash keys * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at * strstart+3, +5, ... up to strstart+257. We check for insufficient * lookahead only every 4th comparison; the 128th check will be made * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is * necessary to put more guard bytes at the end of the window, or * to check more often for insufficient lookahead. */ Assert(scan[2] == match[2], "scan[2]?"); scan++, match++; do { } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && *(ushf*)(scan+=2) == *(ushf*)(match+=2) && scan < strend); /* The funny "do {}" generates better code on most compilers */ /* Here, scan <= window+strstart+257 */ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); if (*scan == *match) scan++; len = (MAX_MATCH - 1) - (int)(strend-scan); scan = strend - (MAX_MATCH-1); #else /* UNALIGNED_OK */ if (match[best_len] != scan_end || match[best_len-1] != scan_end1 || *match != *scan || *++match != scan[1]) continue; /* The check at best_len-1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that * the hash keys are equal and that HASH_BITS >= 8. */ scan += 2, match++; Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; * the 256th check will be made at strstart+258. */ do { } while (*++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && scan < strend); Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); len = MAX_MATCH - (int)(strend - scan); scan = strend - MAX_MATCH; #endif /* UNALIGNED_OK */ if (len > best_len) { s->match_start = cur_match; best_len = len; if (len >= nice_match) break; #ifdef UNALIGNED_OK scan_end = *(ushf*)(scan+best_len-1); #else scan_end1 = scan[best_len-1]; scan_end = scan[best_len]; #endif } } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length != 0); if ((uInt)best_len <= s->lookahead) return (uInt)best_len; return s->lookahead; } #else /* FASTEST */ /* --------------------------------------------------------------------------- * Optimized version for level == 1 only */ local uInt longest_match(s, cur_match) deflate_state *s; IPos cur_match; /* current match */ { register Bytef *scan = s->window + s->strstart; /* current string */ register Bytef *match; /* matched string */ register int len; /* length of current match */ register Bytef *strend = s->window + s->strstart + MAX_MATCH; /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. * It is easy to get rid of this optimization if necessary. */ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); Assert(cur_match < s->strstart, "no future"); match = s->window + cur_match; /* Return failure if the match length is less than 2: */ if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; /* The check at best_len-1 can be removed because it will be made * again later. (This heuristic is not always a win.) * It is not necessary to compare scan[2] and match[2] since they * are always equal when the other bytes match, given that * the hash keys are equal and that HASH_BITS >= 8. */ scan += 2, match += 2; Assert(*scan == *match, "match[2]?"); /* We check for insufficient lookahead only every 8th comparison; * the 256th check will be made at strstart+258. */ do { } while (*++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && *++scan == *++match && scan < strend); Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); len = MAX_MATCH - (int)(strend - scan); if (len < MIN_MATCH) return MIN_MATCH - 1; s->match_start = cur_match; return len <= s->lookahead ? len : s->lookahead; } #endif /* FASTEST */ #endif /* ASMV */ #ifdef DEBUG /* =========================================================================== * Check that the match at match_start is indeed a match. */ local void check_match(s, start, match, length) deflate_state *s; IPos start, match; int length; { /* check that the match is indeed a match */ if (zmemcmp(s->window + match, s->window + start, length) != EQUAL) { fprintf(stderr, " start %u, match %u, length %d\n", start, match, length); do { fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); } while (--length != 0); z_error("invalid match"); } if (z_verbose > 1) { fprintf(stderr,"\\[%d,%d]", start-match, length); do { putc(s->window[start++], stderr); } while (--length != 0); } } #else # define check_match(s, start, match, length) #endif /* =========================================================================== * Fill the window when the lookahead becomes insufficient. * Updates strstart and lookahead. * * IN assertion: lookahead < MIN_LOOKAHEAD * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD * At least one byte has been read, or avail_in == 0; reads are * performed for at least two bytes (required for the zip translate_eol * option -- not supported here). */ local void fill_window(s) deflate_state *s; { register unsigned n, m; register Posf *p; unsigned more; /* Amount of free space at the end of the window. */ uInt wsize = s->w_size; do { more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); /* Deal with !@#$% 64K limit: */ if (more == 0 && s->strstart == 0 && s->lookahead == 0) { more = wsize; } else if (more == (unsigned)(-1)) { /* Very unlikely, but possible on 16 bit machine if strstart == 0 * and lookahead == 1 (input done one byte at time) */ more--; /* If the window is almost full and there is insufficient lookahead, * move the upper half to the lower one to make room in the upper half. */ } else if (s->strstart >= wsize+MAX_DIST(s)) { zmemcpy(s->window, s->window+wsize, (unsigned)wsize); s->match_start -= wsize; s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ s->block_start -= (long) wsize; /* Slide the hash table (could be avoided with 32 bit values at the expense of memory usage). We slide even when level == 0 to keep the hash table consistent if we switch back to level > 0 later. (Using level 0 permanently is not an optimal usage of zlib, so we don't care about this pathological case.) */ n = s->hash_size; p = &s->head[n]; do { m = *--p; *p = (Pos)(m >= wsize ? m-wsize : NIL); } while (--n); n = wsize; #ifndef FASTEST p = &s->prev[n]; do { m = *--p; *p = (Pos)(m >= wsize ? m-wsize : NIL); /* If n is not on any hash chain, prev[n] is garbage but * its value will never be used. */ } while (--n); #endif more += wsize; } if (s->strm->avail_in == 0) return; /* If there was no sliding: * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && * more == window_size - lookahead - strstart * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) * => more >= window_size - 2*WSIZE + 2 * In the BIG_MEM or MMAP case (not yet supported), * window_size == input_size + MIN_LOOKAHEAD && * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. * Otherwise, window_size == 2*WSIZE so more >= 2. * If there was sliding, more >= WSIZE. So in all cases, more >= 2. */ Assert(more >= 2, "more < 2"); n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); s->lookahead += n; /* Initialize the hash value now that we have some input: */ if (s->lookahead >= MIN_MATCH) { s->ins_h = s->window[s->strstart]; UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); #if MIN_MATCH != 3 Call UPDATE_HASH() MIN_MATCH-3 more times #endif } /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, * but this is not important since only literal bytes will be emitted. */ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); } /* =========================================================================== * Flush the current block, with given end-of-file flag. * IN assertion: strstart is set to the end of the current match. */ #define FLUSH_BLOCK_ONLY(s, eof) { \ _tr_flush_block(s, (s->block_start >= 0L ? \ (charf *)&s->window[(unsigned)s->block_start] : \ (charf *)Z_NULL), \ (ulg)((long)s->strstart - s->block_start), \ (eof)); \ s->block_start = s->strstart; \ flush_pending(s->strm); \ Tracev((stderr,"[FLUSH]")); \ } /* Same but force premature exit if necessary. */ #define FLUSH_BLOCK(s, eof) { \ FLUSH_BLOCK_ONLY(s, eof); \ if (s->strm->avail_out == 0) return (eof) ? finish_started : need_more; \ } /* =========================================================================== * Copy without compression as much as possible from the input stream, return * the current block state. * This function does not insert new strings in the dictionary since * uncompressible data is probably not useful. This function is used * only for the level=0 compression option. * NOTE: this function should be optimized to avoid extra copying from * window to pending_buf. */ local block_state deflate_stored(s, flush) deflate_state *s; int flush; { /* Stored blocks are limited to 0xffff bytes, pending_buf is limited * to pending_buf_size, and each stored block has a 5 byte header: */ ulg max_block_size = 0xffff; ulg max_start; if (max_block_size > s->pending_buf_size - 5) { max_block_size = s->pending_buf_size - 5; } /* Copy as much as possible from input to output: */ for (;;) { /* Fill the window as much as possible: */ if (s->lookahead <= 1) { Assert(s->strstart < s->w_size+MAX_DIST(s) || s->block_start >= (long)s->w_size, "slide too late"); fill_window(s); if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more; if (s->lookahead == 0) break; /* flush the current block */ } Assert(s->block_start >= 0L, "block gone"); s->strstart += s->lookahead; s->lookahead = 0; /* Emit a stored block if pending_buf will be full: */ max_start = s->block_start + max_block_size; if (s->strstart == 0 || (ulg)s->strstart >= max_start) { /* strstart == 0 is possible when wraparound on 16-bit machine */ s->lookahead = (uInt)(s->strstart - max_start); s->strstart = (uInt)max_start; FLUSH_BLOCK(s, 0); } /* Flush if we may have to slide, otherwise block_start may become * negative and the data will be gone: */ if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) { FLUSH_BLOCK(s, 0); } } FLUSH_BLOCK(s, flush == Z_FINISH); return flush == Z_FINISH ? finish_done : block_done; } /* =========================================================================== * Compress as much as possible from the input stream, return the current * block state. * This function does not perform lazy evaluation of matches and inserts * new strings in the dictionary only for unmatched strings or for short * matches. It is used only for the fast compression options. */ local block_state deflate_fast(s, flush) deflate_state *s; int flush; { IPos hash_head = NIL; /* head of the hash chain */ int bflush; /* set if current block must be flushed */ for (;;) { /* Make sure that we always have enough lookahead, except * at the end of the input file. We need MAX_MATCH bytes * for the next match, plus MIN_MATCH bytes to insert the * string following the next match. */ if (s->lookahead < MIN_LOOKAHEAD) { fill_window(s); if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { return need_more; } if (s->lookahead == 0) break; /* flush the current block */ } /* Insert the string window[strstart .. strstart+2] in the * dictionary, and set hash_head to the head of the hash chain: */ if (s->lookahead >= MIN_MATCH) { INSERT_STRING(s, s->strstart, hash_head); } /* Find the longest match, discarding those <= prev_length. * At this point we have always match_length < MIN_MATCH */ if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { /* To simplify the code, we prevent matches with the string * of window index 0 (in particular we have to avoid a match * of the string with itself at the start of the input file). */ if (s->strategy != Z_HUFFMAN_ONLY) { s->match_length = longest_match (s, hash_head); } /* longest_match() sets match_start */ } if (s->match_length >= MIN_MATCH) { check_match(s, s->strstart, s->match_start, s->match_length); _tr_tally_dist(s, s->strstart - s->match_start, s->match_length - MIN_MATCH, bflush); s->lookahead -= s->match_length; /* Insert new strings in the hash table only if the match length * is not too large. This saves time but degrades compression. */ #ifndef FASTEST if (s->match_length <= s->max_insert_length && s->lookahead >= MIN_MATCH) { s->match_length--; /* string at strstart already in hash table */ do { s->strstart++; INSERT_STRING(s, s->strstart, hash_head); /* strstart never exceeds WSIZE-MAX_MATCH, so there are * always MIN_MATCH bytes ahead. */ } while (--s->match_length != 0); s->strstart++; } else #endif { s->strstart += s->match_length; s->match_length = 0; s->ins_h = s->window[s->strstart]; UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]); #if MIN_MATCH != 3 Call UPDATE_HASH() MIN_MATCH-3 more times #endif /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not * matter since it will be recomputed at next deflate call. */ } } else { /* No match, output a literal byte */ Tracevv((stderr,"%c", s->window[s->strstart])); _tr_tally_lit (s, s->window[s->strstart], bflush); s->lookahead--; s->strstart++; } if (bflush) FLUSH_BLOCK(s, 0); } FLUSH_BLOCK(s, flush == Z_FINISH); return flush == Z_FINISH ? finish_done : block_done; } /* =========================================================================== * Same as above, but achieves better compression. We use a lazy * evaluation for matches: a match is finally adopted only if there is * no better match at the next window position. */ local block_state deflate_slow(s, flush) deflate_state *s; int flush; { IPos hash_head = NIL; /* head of hash chain */ int bflush; /* set if current block must be flushed */ /* Process the input block. */ for (;;) { /* Make sure that we always have enough lookahead, except * at the end of the input file. We need MAX_MATCH bytes * for the next match, plus MIN_MATCH bytes to insert the * string following the next match. */ if (s->lookahead < MIN_LOOKAHEAD) { fill_window(s); if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { return need_more; } if (s->lookahead == 0) break; /* flush the current block */ } /* Insert the string window[strstart .. strstart+2] in the * dictionary, and set hash_head to the head of the hash chain: */ if (s->lookahead >= MIN_MATCH) { INSERT_STRING(s, s->strstart, hash_head); } /* Find the longest match, discarding those <= prev_length. */ s->prev_length = s->match_length, s->prev_match = s->match_start; s->match_length = MIN_MATCH-1; if (hash_head != NIL && s->prev_length < s->max_lazy_match && s->strstart - hash_head <= MAX_DIST(s)) { /* To simplify the code, we prevent matches with the string * of window index 0 (in particular we have to avoid a match * of the string with itself at the start of the input file). */ if (s->strategy != Z_HUFFMAN_ONLY) { s->match_length = longest_match (s, hash_head); } /* longest_match() sets match_start */ if (s->match_length <= 5 && (s->strategy == Z_FILTERED || (s->match_length == MIN_MATCH && s->strstart - s->match_start > TOO_FAR))) { /* If prev_match is also MIN_MATCH, match_start is garbage * but we will ignore the current match anyway. */ s->match_length = MIN_MATCH-1; } } /* If there was a match at the previous step and the current * match is not better, output the previous match: */ if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; /* Do not insert strings in hash table beyond this. */ check_match(s, s->strstart-1, s->prev_match, s->prev_length); _tr_tally_dist(s, s->strstart -1 - s->prev_match, s->prev_length - MIN_MATCH, bflush); /* Insert in hash table all strings up to the end of the match. * strstart-1 and strstart are already inserted. If there is not * enough lookahead, the last two strings are not inserted in * the hash table. */ s->lookahead -= s->prev_length-1; s->prev_length -= 2; do { if (++s->strstart <= max_insert) { INSERT_STRING(s, s->strstart, hash_head); } } while (--s->prev_length != 0); s->match_available = 0; s->match_length = MIN_MATCH-1; s->strstart++; if (bflush) FLUSH_BLOCK(s, 0); } else if (s->match_available) { /* If there was no match at the previous position, output a * single literal. If there was a match but the current match * is longer, truncate the previous match to a single literal. */ Tracevv((stderr,"%c", s->window[s->strstart-1])); _tr_tally_lit(s, s->window[s->strstart-1], bflush); if (bflush) { FLUSH_BLOCK_ONLY(s, 0); } s->strstart++; s->lookahead--; if (s->strm->avail_out == 0) return need_more; } else { /* There is no previous match to compare with, wait for * the next step to decide. */ s->match_available = 1; s->strstart++; s->lookahead--; } } Assert (flush != Z_NO_FLUSH, "no flush?"); if (s->match_available) { Tracevv((stderr,"%c", s->window[s->strstart-1])); _tr_tally_lit(s, s->window[s->strstart-1], bflush); s->match_available = 0; } FLUSH_BLOCK(s, flush == Z_FINISH); return flush == Z_FINISH ? finish_done : block_done; } gnupg-1.4.20/zlib/zlib.h0000644000175000017500000011770412635262326011731 00000000000000/* zlib.h -- interface of the 'zlib' general purpose compression library version 1.1.4, March 11th, 2002 Copyright (C) 1995-2002 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. Jean-loup Gailly Mark Adler jloup@gzip.org madler@alumni.caltech.edu The data format used by the zlib library is described by RFCs (Request for Comments) 1950 to 1952 in the files ftp://ds.internic.net/rfc/rfc1950.txt (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). */ #ifndef _ZLIB_H #define _ZLIB_H #include "zconf.h" #ifdef __cplusplus extern "C" { #endif #define ZLIB_VERSION "1.1.4" /* The 'zlib' compression library provides in-memory compression and decompression functions, including integrity checks of the uncompressed data. This version of the library supports only one compression method (deflation) but other algorithms will be added later and will have the same stream interface. Compression can be done in a single step if the buffers are large enough (for example if an input file is mmap'ed), or can be done by repeated calls of the compression function. In the latter case, the application must provide more input and/or consume the output (providing more output space) before each call. The library also supports reading and writing files in gzip (.gz) format with an interface similar to that of stdio. The library does not install any signal handler. The decoder checks the consistency of the compressed data, so the library should never crash even in case of corrupted input. */ typedef voidpf (*alloc_func) OF((voidpf opaque, uInt items, uInt size)); typedef void (*free_func) OF((voidpf opaque, voidpf address)); struct internal_state; typedef struct z_stream_s { Bytef *next_in; /* next input byte */ uInt avail_in; /* number of bytes available at next_in */ uLong total_in; /* total nb of input bytes read so far */ Bytef *next_out; /* next output byte should be put there */ uInt avail_out; /* remaining free space at next_out */ uLong total_out; /* total nb of bytes output so far */ char *msg; /* last error message, NULL if no error */ struct internal_state FAR *state; /* not visible by applications */ alloc_func zalloc; /* used to allocate the internal state */ free_func zfree; /* used to free the internal state */ voidpf opaque; /* private data object passed to zalloc and zfree */ int data_type; /* best guess about the data type: ascii or binary */ uLong adler; /* adler32 value of the uncompressed data */ uLong reserved; /* reserved for future use */ } z_stream; typedef z_stream FAR *z_streamp; /* The application must update next_in and avail_in when avail_in has dropped to zero. It must update next_out and avail_out when avail_out has dropped to zero. The application must initialize zalloc, zfree and opaque before calling the init function. All other fields are set by the compression library and must not be updated by the application. The opaque value provided by the application will be passed as the first parameter for calls of zalloc and zfree. This can be useful for custom memory management. The compression library attaches no meaning to the opaque value. zalloc must return Z_NULL if there is not enough memory for the object. If zlib is used in a multi-threaded application, zalloc and zfree must be thread safe. On 16-bit systems, the functions zalloc and zfree must be able to allocate exactly 65536 bytes, but will not be required to allocate more than this if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers returned by zalloc for objects of exactly 65536 bytes *must* have their offset normalized to zero. The default allocation function provided by this library ensures this (see zutil.c). To reduce memory requirements and avoid any allocation of 64K objects, at the expense of compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). The fields total_in and total_out can be used for statistics or progress reports. After compression, total_in holds the total size of the uncompressed data and may be saved for use in the decompressor (particularly if the decompressor wants to decompress everything in a single step). */ /* constants */ #define Z_NO_FLUSH 0 #define Z_PARTIAL_FLUSH 1 /* will be removed, use Z_SYNC_FLUSH instead */ #define Z_SYNC_FLUSH 2 #define Z_FULL_FLUSH 3 #define Z_FINISH 4 /* Allowed flush values; see deflate() below for details */ #define Z_OK 0 #define Z_STREAM_END 1 #define Z_NEED_DICT 2 #define Z_ERRNO (-1) #define Z_STREAM_ERROR (-2) #define Z_DATA_ERROR (-3) #define Z_MEM_ERROR (-4) #define Z_BUF_ERROR (-5) #define Z_VERSION_ERROR (-6) /* Return codes for the compression/decompression functions. Negative * values are errors, positive values are used for special but normal events. */ #define Z_NO_COMPRESSION 0 #define Z_BEST_SPEED 1 #define Z_BEST_COMPRESSION 9 #define Z_DEFAULT_COMPRESSION (-1) /* compression levels */ #define Z_FILTERED 1 #define Z_HUFFMAN_ONLY 2 #define Z_DEFAULT_STRATEGY 0 /* compression strategy; see deflateInit2() below for details */ #define Z_BINARY 0 #define Z_ASCII 1 #define Z_UNKNOWN 2 /* Possible values of the data_type field */ #define Z_DEFLATED 8 /* The deflate compression method (the only one supported in this version) */ #define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ #define zlib_version zlibVersion() /* for compatibility with versions < 1.0.2 */ /* basic functions */ ZEXTERN const char * ZEXPORT zlibVersion OF((void)); /* The application can compare zlibVersion and ZLIB_VERSION for consistency. If the first character differs, the library code actually used is not compatible with the zlib.h header file used by the application. This check is automatically made by deflateInit and inflateInit. */ /* ZEXTERN int ZEXPORT deflateInit OF((z_streamp strm, int level)); Initializes the internal stream state for compression. The fields zalloc, zfree and opaque must be initialized before by the caller. If zalloc and zfree are set to Z_NULL, deflateInit updates them to use default allocation functions. The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: 1 gives best speed, 9 gives best compression, 0 gives no compression at all (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION requests a default compromise between speed and compression (currently equivalent to level 6). deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if level is not a valid compression level, Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible with the version assumed by the caller (ZLIB_VERSION). msg is set to null if there is no error message. deflateInit does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflate OF((z_streamp strm, int flush)); /* deflate compresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may introduce some output latency (reading input without producing any output) except when forced to flush. The detailed semantics are as follows. deflate performs one or both of the following actions: - Compress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in and avail_in are updated and processing will resume at this point for the next call of deflate(). - Provide more output starting at next_out and update next_out and avail_out accordingly. This action is forced if the parameter flush is non zero. Forcing flush frequently degrades the compression ratio, so this parameter should be set only when necessary (in interactive applications). Some output may be provided even if flush is not set. Before the call of deflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more output, and updating avail_in or avail_out accordingly; avail_out should never be zero before the call. The application can consume the compressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. If the parameter flush is set to Z_SYNC_FLUSH, all pending output is flushed to the output buffer and the output is aligned on a byte boundary, so that the decompressor can get all input data available so far. (In particular avail_in is zero after the call if enough output space has been provided before the call.) Flushing may degrade compression for some compression algorithms and so it should be used only when necessary. If flush is set to Z_FULL_FLUSH, all output is flushed as with Z_SYNC_FLUSH, and the compression state is reset so that decompression can restart from this point if previous compressed data has been damaged or if random access is desired. Using Z_FULL_FLUSH too often can seriously degrade the compression. If deflate returns with avail_out == 0, this function must be called again with the same value of the flush parameter and more output space (updated avail_out), until the flush is complete (deflate returns with non-zero avail_out). If the parameter flush is set to Z_FINISH, pending input is processed, pending output is flushed and deflate returns with Z_STREAM_END if there was enough output space; if deflate returns with Z_OK, this function must be called again with Z_FINISH and more output space (updated avail_out) but no more input data, until it returns with Z_STREAM_END or an error. After deflate has returned Z_STREAM_END, the only possible operations on the stream are deflateReset or deflateEnd. Z_FINISH can be used immediately after deflateInit if all the compression is to be done in a single step. In this case, avail_out must be at least 0.1% larger than avail_in plus 12 bytes. If deflate does not return Z_STREAM_END, then it must be called again as described above. deflate() sets strm->adler to the adler32 checksum of all input read so far (that is, total_in bytes). deflate() may update data_type if it can make a good guess about the input data type (Z_ASCII or Z_BINARY). In doubt, the data is considered binary. This field is only for information purposes and does not affect the compression algorithm in any manner. deflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if all input has been consumed and all output has been produced (only when flush is set to Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible (for example avail_in or avail_out was zero). */ ZEXTERN int ZEXPORT deflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending output. deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent, Z_DATA_ERROR if the stream was freed prematurely (some input or output was discarded). In the error case, msg may be set but then points to a static string (which must not be deallocated). */ /* ZEXTERN int ZEXPORT inflateInit OF((z_streamp strm)); Initializes the internal stream state for decompression. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. If next_in is not Z_NULL and avail_in is large enough (the exact value depends on the compression method), inflateInit determines the compression method from the zlib header and allocates all data structures accordingly; otherwise the allocation will be deferred to the first call of inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to use default allocation functions. inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_VERSION_ERROR if the zlib library version is incompatible with the version assumed by the caller. msg is set to null if there is no error message. inflateInit does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) */ ZEXTERN int ZEXPORT inflate OF((z_streamp strm, int flush)); /* inflate decompresses as much data as possible, and stops when the input buffer becomes empty or the output buffer becomes full. It may some introduce some output latency (reading input without producing any output) except when forced to flush. The detailed semantics are as follows. inflate performs one or both of the following actions: - Decompress more input starting at next_in and update next_in and avail_in accordingly. If not all input can be processed (because there is not enough room in the output buffer), next_in is updated and processing will resume at this point for the next call of inflate(). - Provide more output starting at next_out and update next_out and avail_out accordingly. inflate() provides as much output as possible, until there is no more input data or no more space in the output buffer (see below about the flush parameter). Before the call of inflate(), the application should ensure that at least one of the actions is possible, by providing more input and/or consuming more output, and updating the next_* and avail_* values accordingly. The application can consume the uncompressed output when it wants, for example when the output buffer is full (avail_out == 0), or after each call of inflate(). If inflate returns Z_OK and with zero avail_out, it must be called again after making room in the output buffer because there might be more output pending. If the parameter flush is set to Z_SYNC_FLUSH, inflate flushes as much output as possible to the output buffer. The flushing behavior of inflate is not specified for values of the flush parameter other than Z_SYNC_FLUSH and Z_FINISH, but the current implementation actually flushes as much output as possible anyway. inflate() should normally be called until it returns Z_STREAM_END or an error. However if all decompression is to be performed in a single step (a single call of inflate), the parameter flush should be set to Z_FINISH. In this case all pending input is processed and all pending output is flushed; avail_out must be large enough to hold all the uncompressed data. (The size of the uncompressed data may have been saved by the compressor for this purpose.) The next operation on this stream must be inflateEnd to deallocate the decompression state. The use of Z_FINISH is never required, but can be used to inform inflate that a faster routine may be used for the single inflate() call. If a preset dictionary is needed at this point (see inflateSetDictionary below), inflate sets strm-adler to the adler32 checksum of the dictionary chosen by the compressor and returns Z_NEED_DICT; otherwise it sets strm->adler to the adler32 checksum of all output produced so far (that is, total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described below. At the end of the stream, inflate() checks that its computed adler32 checksum is equal to that saved by the compressor and returns Z_STREAM_END only if the checksum is correct. inflate() returns Z_OK if some progress has been made (more input processed or more output produced), Z_STREAM_END if the end of the compressed data has been reached and all uncompressed output has been produced, Z_NEED_DICT if a preset dictionary is needed at this point, Z_DATA_ERROR if the input data was corrupted (input stream not conforming to the zlib format or incorrect adler32 checksum), Z_STREAM_ERROR if the stream structure was inconsistent (for example if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if no progress is possible or if there was not enough room in the output buffer when Z_FINISH is used. In the Z_DATA_ERROR case, the application may then call inflateSync to look for a good compression block. */ ZEXTERN int ZEXPORT inflateEnd OF((z_streamp strm)); /* All dynamically allocated data structures for this stream are freed. This function discards any unprocessed input and does not flush any pending output. inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state was inconsistent. In the error case, msg may be set but then points to a static string (which must not be deallocated). */ /* Advanced functions */ /* The following functions are needed only in some special applications. */ /* ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy)); This is another version of deflateInit with more compression options. The fields next_in, zalloc, zfree and opaque must be initialized before by the caller. The method parameter is the compression method. It must be Z_DEFLATED in this version of the library. The windowBits parameter is the base two logarithm of the window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. Larger values of this parameter result in better compression at the expense of memory usage. The default value is 15 if deflateInit is used instead. The memLevel parameter specifies how much memory should be allocated for the internal compression state. memLevel=1 uses minimum memory but is slow and reduces compression ratio; memLevel=9 uses maximum memory for optimal speed. The default value is 8. See zconf.h for total memory usage as a function of windowBits and memLevel. The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a filter (or predictor), or Z_HUFFMAN_ONLY to force Huffman encoding only (no string match). Filtered data consists mostly of small values with a somewhat random distribution. In this case, the compression algorithm is tuned to compress them better. The effect of Z_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between Z_DEFAULT and Z_HUFFMAN_ONLY. The strategy parameter only affects the compression ratio but not the correctness of the compressed output even if it is not set appropriately. deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid method). msg is set to null if there is no error message. deflateInit2 does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateSetDictionary OF((z_streamp strm, const Bytef *dictionary, uInt dictLength)); /* Initializes the compression dictionary from the given byte sequence without producing any compressed output. This function must be called immediately after deflateInit, deflateInit2 or deflateReset, before any call of deflate. The compressor and decompressor must use exactly the same dictionary (see inflateSetDictionary). The dictionary should consist of strings (byte sequences) that are likely to be encountered later in the data to be compressed, with the most commonly used strings preferably put towards the end of the dictionary. Using a dictionary is most useful when the data to be compressed is short and can be predicted with good accuracy; the data can then be compressed better than with the default empty dictionary. Depending on the size of the compression data structures selected by deflateInit or deflateInit2, a part of the dictionary may in effect be discarded, for example if the dictionary is larger than the window size in deflate or deflate2. Thus the strings most likely to be useful should be put at the end of the dictionary, not at the front. Upon return of this function, strm->adler is set to the Adler32 value of the dictionary; the decompressor may later use this value to determine which dictionary has been used by the compressor. (The Adler32 value applies to the whole dictionary even if only a subset of the dictionary is actually used by the compressor.) deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a parameter is invalid (such as NULL dictionary) or the stream state is inconsistent (for example if deflate has already been called for this stream or if the compression method is bsort). deflateSetDictionary does not perform any compression: this will be done by deflate(). */ ZEXTERN int ZEXPORT deflateCopy OF((z_streamp dest, z_streamp source)); /* Sets the destination stream as a complete copy of the source stream. This function can be useful when several compression strategies will be tried, for example when there are several ways of pre-processing the input data with a filter. The streams that will be discarded should then be freed by calling deflateEnd. Note that deflateCopy duplicates the internal compression state which can be quite large, so this strategy is slow and can consume lots of memory. deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc being NULL). msg is left unchanged in both source and destination. */ ZEXTERN int ZEXPORT deflateReset OF((z_streamp strm)); /* This function is equivalent to deflateEnd followed by deflateInit, but does not free and reallocate all the internal compression state. The stream will keep the same compression level and any other attributes that may have been set by deflateInit2. deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). */ ZEXTERN int ZEXPORT deflateParams OF((z_streamp strm, int level, int strategy)); /* Dynamically update the compression level and compression strategy. The interpretation of level and strategy is as in deflateInit2. This can be used to switch between compression and straight copy of the input data, or to switch to a different kind of input data requiring a different strategy. If the compression level is changed, the input available so far is compressed with the old level (and may be flushed); the new level will take effect only at the next call of deflate(). Before the call of deflateParams, the stream state must be set as for a call of deflate(), since the currently available input may have to be compressed and flushed. In particular, strm->avail_out must be non-zero. deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR if strm->avail_out was zero. */ /* ZEXTERN int ZEXPORT inflateInit2 OF((z_streamp strm, int windowBits)); This is another version of inflateInit with an extra parameter. The fields next_in, avail_in, zalloc, zfree and opaque must be initialized before by the caller. The windowBits parameter is the base two logarithm of the maximum window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. The default value is 15 if inflateInit is used instead. If a compressed stream with a larger window size is given as input, inflate() will return with the error code Z_DATA_ERROR instead of trying to allocate a larger window. inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_STREAM_ERROR if a parameter is invalid (such as a negative memLevel). msg is set to null if there is no error message. inflateInit2 does not perform any decompression apart from reading the zlib header if present: this will be done by inflate(). (So next_in and avail_in may be modified, but next_out and avail_out are unchanged.) */ ZEXTERN int ZEXPORT inflateSetDictionary OF((z_streamp strm, const Bytef *dictionary, uInt dictLength)); /* Initializes the decompression dictionary from the given uncompressed byte sequence. This function must be called immediately after a call of inflate if this call returned Z_NEED_DICT. The dictionary chosen by the compressor can be determined from the Adler32 value returned by this call of inflate. The compressor and decompressor must use exactly the same dictionary (see deflateSetDictionary). inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a parameter is invalid (such as NULL dictionary) or the stream state is inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the expected one (incorrect Adler32 value). inflateSetDictionary does not perform any decompression: this will be done by subsequent calls of inflate(). */ ZEXTERN int ZEXPORT inflateSync OF((z_streamp strm)); /* Skips invalid compressed data until a full flush point (see above the description of deflate with Z_FULL_FLUSH) can be found, or until all available input is skipped. No output is provided. inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. In the success case, the application may save the current current value of total_in which indicates where valid compressed data was found. In the error case, the application may repeatedly call inflateSync, providing more input each time, until success or end of the input data. */ ZEXTERN int ZEXPORT inflateReset OF((z_streamp strm)); /* This function is equivalent to inflateEnd followed by inflateInit, but does not free and reallocate all the internal decompression state. The stream will keep attributes that may have been set by inflateInit2. inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source stream state was inconsistent (such as zalloc or state being NULL). */ /* utility functions */ /* The following utility functions are implemented on top of the basic stream-oriented functions. To simplify the interface, some default options are assumed (compression level and memory usage, standard memory allocation functions). The source code of these utility functions can easily be modified if you need special options. */ ZEXTERN int ZEXPORT compress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Compresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least 0.1% larger than sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. This function can be used to compress a whole file at once if the input file is mmap'ed. compress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer. */ ZEXTERN int ZEXPORT compress2 OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen, int level)); /* Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least 0.1% larger than sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ ZEXTERN int ZEXPORT uncompress OF((Bytef *dest, uLongf *destLen, const Bytef *source, uLong sourceLen)); /* Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.) Upon exit, destLen is the actual size of the compressed buffer. This function can be used to decompress a whole file at once if the input file is mmap'ed. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted. */ typedef voidp gzFile; ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode)); /* Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen ("rb" or "wb") but can also include a compression level ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman only compression as in "wb1h". (See the description of deflateInit2 for more information about the strategy parameter.) gzopen can be used to read a file which is not in gzip format; in this case gzread will directly read from the file without decompression. gzopen returns NULL if the file could not be opened or if there was insufficient memory to allocate the (de)compression state; errno can be checked to distinguish the two cases (if errno is zero, the zlib error is Z_MEM_ERROR). */ ZEXTERN gzFile ZEXPORT gzdopen OF((int fd, const char *mode)); /* gzdopen() associates a gzFile with the file descriptor fd. File descriptors are obtained from calls like open, dup, creat, pipe or fileno (in the file has been previously opened with fopen). The mode parameter is as in gzopen. The next call of gzclose on the returned gzFile will also close the file descriptor fd, just like fclose(fdopen(fd), mode) closes the file descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). gzdopen returns NULL if there was insufficient memory to allocate the (de)compression state. */ ZEXTERN int ZEXPORT gzsetparams OF((gzFile file, int level, int strategy)); /* Dynamically update the compression level or strategy. See the description of deflateInit2 for the meaning of these parameters. gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not opened for writing. */ ZEXTERN int ZEXPORT gzread OF((gzFile file, voidp buf, unsigned len)); /* Reads the given number of uncompressed bytes from the compressed file. If the input file was not in gzip format, gzread copies the given number of bytes into the buffer. gzread returns the number of uncompressed bytes actually read (0 for end of file, -1 for error). */ ZEXTERN int ZEXPORT gzwrite OF((gzFile file, const voidp buf, unsigned len)); /* Writes the given number of uncompressed bytes into the compressed file. gzwrite returns the number of uncompressed bytes actually written (0 in case of error). */ ZEXTERN int ZEXPORTVA gzprintf OF((gzFile file, const char *format, ...)); /* Converts, formats, and writes the args to the compressed file under control of the format string, as in fprintf. gzprintf returns the number of uncompressed bytes actually written (0 in case of error). */ ZEXTERN int ZEXPORT gzputs OF((gzFile file, const char *s)); /* Writes the given null-terminated string to the compressed file, excluding the terminating null character. gzputs returns the number of characters written, or -1 in case of error. */ ZEXTERN char * ZEXPORT gzgets OF((gzFile file, char *buf, int len)); /* Reads bytes from the compressed file until len-1 characters are read, or a newline character is read and transferred to buf, or an end-of-file condition is encountered. The string is then terminated with a null character. gzgets returns buf, or Z_NULL in case of error. */ ZEXTERN int ZEXPORT gzputc OF((gzFile file, int c)); /* Writes c, converted to an unsigned char, into the compressed file. gzputc returns the value that was written, or -1 in case of error. */ ZEXTERN int ZEXPORT gzgetc OF((gzFile file)); /* Reads one byte from the compressed file. gzgetc returns this byte or -1 in case of end of file or error. */ ZEXTERN int ZEXPORT gzflush OF((gzFile file, int flush)); /* Flushes all pending output into the compressed file. The parameter flush is as in the deflate() function. The return value is the zlib error number (see function gzerror below). gzflush returns Z_OK if the flush parameter is Z_FINISH and all output could be flushed. gzflush should be called only when strictly necessary because it can degrade compression. */ ZEXTERN z_off_t ZEXPORT gzseek OF((gzFile file, z_off_t offset, int whence)); /* Sets the starting position for the next gzread or gzwrite on the given compressed file. The offset represents a number of bytes in the uncompressed data stream. The whence parameter is defined as in lseek(2); the value SEEK_END is not supported. If the file is opened for reading, this function is emulated but can be extremely slow. If the file is opened for writing, only forward seeks are supported; gzseek then compresses a sequence of zeroes up to the new starting position. gzseek returns the resulting offset location as measured in bytes from the beginning of the uncompressed stream, or -1 in case of error, in particular if the file is opened for writing and the new starting position would be before the current position. */ ZEXTERN int ZEXPORT gzrewind OF((gzFile file)); /* Rewinds the given file. This function is supported only for reading. gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) */ ZEXTERN z_off_t ZEXPORT gztell OF((gzFile file)); /* Returns the starting position for the next gzread or gzwrite on the given compressed file. This position represents a number of bytes in the uncompressed data stream. gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) */ ZEXTERN int ZEXPORT gzeof OF((gzFile file)); /* Returns 1 when EOF has previously been detected reading the given input stream, otherwise zero. */ ZEXTERN int ZEXPORT gzclose OF((gzFile file)); /* Flushes all pending output if necessary, closes the compressed file and deallocates all the (de)compression state. The return value is the zlib error number (see function gzerror below). */ ZEXTERN const char * ZEXPORT gzerror OF((gzFile file, int *errnum)); /* Returns the error message for the last error which occurred on the given compressed file. errnum is set to zlib error number. If an error occurred in the file system and not in the compression library, errnum is set to Z_ERRNO and the application may consult errno to get the exact error code. */ /* checksum functions */ /* These functions are not related to compression but are exported anyway because they might be useful in applications using the compression library. */ ZEXTERN uLong ZEXPORT adler32 OF((uLong adler, const Bytef *buf, uInt len)); /* Update a running Adler-32 checksum with the bytes buf[0..len-1] and return the updated checksum. If buf is NULL, this function returns the required initial value for the checksum. An Adler-32 checksum is almost as reliable as a CRC32 but can be computed much faster. Usage example: uLong adler = adler32(0L, Z_NULL, 0); while (read_buffer(buffer, length) != EOF) { adler = adler32(adler, buffer, length); } if (adler != original_adler) error(); */ ZEXTERN uLong ZEXPORT crc32 OF((uLong crc, const Bytef *buf, uInt len)); /* Update a running crc with the bytes buf[0..len-1] and return the updated crc. If buf is NULL, this function returns the required initial value for the crc. Pre- and post-conditioning (one's complement) is performed within this function so it shouldn't be done by the application. Usage example: uLong crc = crc32(0L, Z_NULL, 0); while (read_buffer(buffer, length) != EOF) { crc = crc32(crc, buffer, length); } if (crc != original_crc) error(); */ /* various hacks, don't look :) */ /* deflateInit and inflateInit are macros to allow checking the zlib version * and the compiler's view of z_stream: */ ZEXTERN int ZEXPORT deflateInit_ OF((z_streamp strm, int level, const char *version, int stream_size)); ZEXTERN int ZEXPORT inflateInit_ OF((z_streamp strm, const char *version, int stream_size)); ZEXTERN int ZEXPORT deflateInit2_ OF((z_streamp strm, int level, int method, int windowBits, int memLevel, int strategy, const char *version, int stream_size)); ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits, const char *version, int stream_size)); #define deflateInit(strm, level) \ deflateInit_((strm), (level), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit(strm) \ inflateInit_((strm), ZLIB_VERSION, sizeof(z_stream)) #define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ (strategy), ZLIB_VERSION, sizeof(z_stream)) #define inflateInit2(strm, windowBits) \ inflateInit2_((strm), (windowBits), ZLIB_VERSION, sizeof(z_stream)) #if !defined(_Z_UTIL_H) && !defined(NO_DUMMY_DECL) struct internal_state {int dummy;}; /* hack for buggy compilers */ #endif ZEXTERN const char * ZEXPORT zError OF((int err)); ZEXTERN int ZEXPORT inflateSyncPoint OF((z_streamp z)); ZEXTERN const uLongf * ZEXPORT get_crc_table OF((void)); #ifdef __cplusplus } #endif #endif /* _ZLIB_H */ gnupg-1.4.20/zlib/infcodes.h0000644000175000017500000000134112635262326012550 00000000000000/* infcodes.h -- header to use infcodes.c * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ struct inflate_codes_state; typedef struct inflate_codes_state FAR inflate_codes_statef; extern inflate_codes_statef *inflate_codes_new OF(( uInt, uInt, inflate_huft *, inflate_huft *, z_streamp )); extern int inflate_codes OF(( inflate_blocks_statef *, z_streamp , int)); extern void inflate_codes_free OF(( inflate_codes_statef *, z_streamp )); gnupg-1.4.20/zlib/uncompr.c0000644000175000017500000000367512635262326012450 00000000000000/* uncompr.c -- decompress a memory buffer * Copyright (C) 1995-2002 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #include "zlib.h" /* =========================================================================== Decompresses the source buffer into the destination buffer. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be large enough to hold the entire uncompressed data. (The size of the uncompressed data must have been saved previously by the compressor and transmitted to the decompressor by some mechanism outside the scope of this compression library.) Upon exit, destLen is the actual size of the compressed buffer. This function can be used to decompress a whole file at once if the input file is mmap'ed. uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, or Z_DATA_ERROR if the input data was corrupted. */ int ZEXPORT uncompress (dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; uLong sourceLen; { z_stream stream; int err; stream.next_in = (Bytef*)source; stream.avail_in = (uInt)sourceLen; /* Check for source > 64K on 16-bit machine: */ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; stream.next_out = dest; stream.avail_out = (uInt)*destLen; if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; err = inflateInit(&stream); if (err != Z_OK) return err; err = inflate(&stream, Z_FINISH); if (err != Z_STREAM_END) { inflateEnd(&stream); return err == Z_OK ? Z_BUF_ERROR : err; } *destLen = stream.total_out; err = inflateEnd(&stream); return err; } gnupg-1.4.20/zlib/infutil.c0000644000175000017500000000371712635262326012434 00000000000000/* inflate_util.c -- data and routines common to blocks and codes * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" #include "infblock.h" #include "inftrees.h" #include "infcodes.h" #include "infutil.h" struct inflate_codes_state {int dummy;}; /* for buggy compilers */ /* And'ing with mask[n] masks the lower n bits */ uInt inflate_mask[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff }; /* copy as much as possible from the sliding window to the output area */ int inflate_flush(s, z, r) inflate_blocks_statef *s; z_streamp z; int r; { uInt n; Bytef *p; Bytef *q; /* local copies of source and destination pointers */ p = z->next_out; q = s->read; /* compute number of bytes to copy as far as end of window */ n = (uInt)((q <= s->write ? s->write : s->end) - q); if (n > z->avail_out) n = z->avail_out; if (n && r == Z_BUF_ERROR) r = Z_OK; /* update counters */ z->avail_out -= n; z->total_out += n; /* update check information */ if (s->checkfn != Z_NULL) z->adler = s->check = (*s->checkfn)(s->check, q, n); /* copy as far as end of window */ zmemcpy(p, q, n); p += n; q += n; /* see if more to copy at beginning of window */ if (q == s->end) { /* wrap pointers */ q = s->window; if (s->write == s->end) s->write = s->window; /* compute bytes to copy */ n = (uInt)(s->write - q); if (n > z->avail_out) n = z->avail_out; if (n && r == Z_BUF_ERROR) r = Z_OK; /* update counters */ z->avail_out -= n; z->total_out += n; /* update check information */ if (s->checkfn != Z_NULL) z->adler = s->check = (*s->checkfn)(s->check, q, n); /* copy */ zmemcpy(p, q, n); p += n; q += n; } /* update pointers */ z->next_out = p; s->read = q; /* done */ return r; } gnupg-1.4.20/zlib/compress.c0000644000175000017500000000413012635262326012603 00000000000000/* compress.c -- compress a memory buffer * Copyright (C) 1995-2002 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #include "zlib.h" /* =========================================================================== Compresses the source buffer into the destination buffer. The level parameter has the same meaning as in deflateInit. sourceLen is the byte length of the source buffer. Upon entry, destLen is the total size of the destination buffer, which must be at least 0.1% larger than sourceLen plus 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR if there was not enough room in the output buffer, Z_STREAM_ERROR if the level parameter is invalid. */ int ZEXPORT compress2 (dest, destLen, source, sourceLen, level) Bytef *dest; uLongf *destLen; const Bytef *source; uLong sourceLen; int level; { z_stream stream; int err; stream.next_in = (Bytef*)source; stream.avail_in = (uInt)sourceLen; #ifdef MAXSEG_64K /* Check for source > 64K on 16-bit machine: */ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR; #endif stream.next_out = dest; stream.avail_out = (uInt)*destLen; if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR; stream.zalloc = (alloc_func)0; stream.zfree = (free_func)0; stream.opaque = (voidpf)0; err = deflateInit(&stream, level); if (err != Z_OK) return err; err = deflate(&stream, Z_FINISH); if (err != Z_STREAM_END) { deflateEnd(&stream); return err == Z_OK ? Z_BUF_ERROR : err; } *destLen = stream.total_out; err = deflateEnd(&stream); return err; } /* =========================================================================== */ int ZEXPORT compress (dest, destLen, source, sourceLen) Bytef *dest; uLongf *destLen; const Bytef *source; uLong sourceLen; { return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); } gnupg-1.4.20/zlib/Makefile.am0000644000175000017500000000151712635262326012646 00000000000000# Process this file with automake to produce Makefile.in # Copyright (C) 1995-1996 Jean-loup Gailly. # For conditions of distribution and use, see copyright notice in zlib.h # This is used if a systems lacks support of zlib EXTRA_DIST = README algorithm.doc ChangeLog-2011 # I found no other easy way to use this only if zlib is neede # doing this with SUBDIR = @xxx@ in the top Makefile.am does not # work because automake doesn't scan this Makefile.am here. if ENABLE_LOCAL_ZLIB noinst_LIBRARIES = libzlib.a endif libzlib_a_SOURCES = adler32.c compress.c crc32.c \ uncompr.c deflate.c trees.c zutil.c \ inflate.c infblock.c inftrees.c \ infcodes.c infutil.c inffast.c \ deflate.h infblock.h infcodes.h inffast.h \ inffixed.h inftrees.h infutil.h trees.h \ zconf.h zlib.h zutil.h CLEANFILES = foo.gz gnupg-1.4.20/zlib/Makefile.in0000644000175000017500000005133412635457154012666 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Process this file with automake to produce Makefile.in # Copyright (C) 1995-1996 Jean-loup Gailly. # For conditions of distribution and use, see copyright notice in zlib.h # This is used if a systems lacks support of zlib VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = zlib DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs $(srcdir)/zlib.h \ $(srcdir)/zconf.h $(top_srcdir)/scripts/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libzlib_a_AR = $(AR) $(ARFLAGS) libzlib_a_LIBADD = am_libzlib_a_OBJECTS = adler32.$(OBJEXT) compress.$(OBJEXT) \ crc32.$(OBJEXT) uncompr.$(OBJEXT) deflate.$(OBJEXT) \ trees.$(OBJEXT) zutil.$(OBJEXT) inflate.$(OBJEXT) \ infblock.$(OBJEXT) inftrees.$(OBJEXT) infcodes.$(OBJEXT) \ infutil.$(OBJEXT) inffast.$(OBJEXT) libzlib_a_OBJECTS = $(am_libzlib_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libzlib_a_SOURCES) DIST_SOURCES = $(libzlib_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = README algorithm.doc ChangeLog-2011 # I found no other easy way to use this only if zlib is neede # doing this with SUBDIR = @xxx@ in the top Makefile.am does not # work because automake doesn't scan this Makefile.am here. @ENABLE_LOCAL_ZLIB_TRUE@noinst_LIBRARIES = libzlib.a libzlib_a_SOURCES = adler32.c compress.c crc32.c \ uncompr.c deflate.c trees.c zutil.c \ inflate.c infblock.c inftrees.c \ infcodes.c infutil.c inffast.c \ deflate.h infblock.h infcodes.h inffast.h \ inffixed.h inftrees.h infutil.h trees.h \ zconf.h zlib.h zutil.h CLEANFILES = foo.gz all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu zlib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu zlib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libzlib.a: $(libzlib_a_OBJECTS) $(libzlib_a_DEPENDENCIES) $(EXTRA_libzlib_a_DEPENDENCIES) $(AM_V_at)-rm -f libzlib.a $(AM_V_AR)$(libzlib_a_AR) libzlib.a $(libzlib_a_OBJECTS) $(libzlib_a_LIBADD) $(AM_V_at)$(RANLIB) libzlib.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adler32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crc32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/deflate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infblock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infcodes.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inffast.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inflate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/inftrees.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/infutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/trees.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uncompr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zutil.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/zlib/inftrees.c0000644000175000017500000003720012635262326012573 00000000000000/* inftrees.c -- generate Huffman trees for efficient decoding * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ #include "zutil.h" #include "inftrees.h" #if !defined(BUILDFIXED) && !defined(STDC) # define BUILDFIXED /* non ANSI compilers may not accept inffixed.h */ #endif const char inflate_copyright[] = " inflate 1.1.4 Copyright 1995-2002 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot include such an acknowledgment, I would appreciate that you keep this copyright string in the executable of your product. */ struct internal_state {int dummy;}; /* for buggy compilers */ /* simplify the use of the inflate_huft type with some defines */ #define exop word.what.Exop #define bits word.what.Bits local int huft_build OF(( uIntf *, /* code lengths in bits */ uInt, /* number of codes */ uInt, /* number of "simple" codes */ const uIntf *, /* list of base values for non-simple codes */ const uIntf *, /* list of extra bits for non-simple codes */ inflate_huft * FAR*,/* result: starting table */ uIntf *, /* maximum lookup bits (returns actual) */ inflate_huft *, /* space for trees */ uInt *, /* hufts used in space */ uIntf * )); /* space for values */ /* Tables for deflate from PKZIP's appnote.txt. */ local const uInt cplens[31] = { /* Copy lengths for literal codes 257..285 */ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; /* see note #13 above about 258 */ local const uInt cplext[31] = { /* Extra bits for literal codes 257..285 */ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; /* 112==invalid */ local const uInt cpdist[30] = { /* Copy offsets for distance codes 0..29 */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; local const uInt cpdext[30] = { /* Extra bits for distance codes */ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; /* Huffman code decoding is performed using a multi-level table lookup. The fastest way to decode is to simply build a lookup table whose size is determined by the longest code. However, the time it takes to build this table can also be a factor if the data being decoded is not very long. The most common codes are necessarily the shortest codes, so those codes dominate the decoding time, and hence the speed. The idea is you can have a shorter table that decodes the shorter, more probable codes, and then point to subsidiary tables for the longer codes. The time it costs to decode the longer codes is then traded against the time it takes to make longer tables. This results of this trade are in the variables lbits and dbits below. lbits is the number of bits the first level table for literal/ length codes can decode in one step, and dbits is the same thing for the distance codes. Subsequent tables are also less than or equal to those sizes. These values may be adjusted either when all of the codes are shorter than that, in which case the longest code length in bits is used, or when the shortest code is *longer* than the requested table size, in which case the length of the shortest code in bits is used. There are two different values for the two tables, since they code a different number of possibilities each. The literal/length table codes 286 possible values, or in a flat code, a little over eight bits. The distance table codes 30 possible values, or a little less than five bits, flat. The optimum values for speed end up being about one bit more than those, so lbits is 8+1 and dbits is 5+1. The optimum values may differ though from machine to machine, and possibly even between compilers. Your mileage may vary. */ /* If BMAX needs to be larger than 16, then h and x[] should be uLong. */ #define BMAX 15 /* maximum bit length of any code */ local int huft_build(b, n, s, d, e, t, m, hp, hn, v) uIntf *b; /* code lengths in bits (all assumed <= BMAX) */ uInt n; /* number of codes (assumed <= 288) */ uInt s; /* number of simple-valued codes (0..s-1) */ const uIntf *d; /* list of base values for non-simple codes */ const uIntf *e; /* list of extra bits for non-simple codes */ inflate_huft * FAR *t; /* result: starting table */ uIntf *m; /* maximum lookup bits, returns actual */ inflate_huft *hp; /* space for trees */ uInt *hn; /* hufts used in space */ uIntf *v; /* working area: values in order of bit length */ /* Given a list of code lengths and a maximum table size, make a set of tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR if the given code set is incomplete (the tables are still built in this case), or Z_DATA_ERROR if the input is invalid. */ { uInt a; /* counter for codes of length k */ uInt c[BMAX+1]; /* bit length count table */ uInt f; /* i repeats in table every f entries */ int g; /* maximum code length */ int h; /* table level */ register uInt i; /* counter, current code */ register uInt j; /* counter */ register int k; /* number of bits in current code */ int l; /* bits per table (returned in m) */ uInt mask; /* (1 << w) - 1, to avoid cc -O bug on HP */ register uIntf *p; /* pointer into c[], b[], or v[] */ inflate_huft *q; /* points to current table */ struct inflate_huft_s r; /* table entry for structure assignment */ inflate_huft *u[BMAX]; /* table stack */ register int w; /* bits before this table == (l * h) */ uInt x[BMAX+1]; /* bit offsets, then code stack */ uIntf *xp; /* pointer into x */ int y; /* number of dummy codes added */ uInt z; /* number of entries in current table */ /* Generate counts for each bit length */ p = c; #define C0 *p++ = 0; #define C2 C0 C0 C0 C0 #define C4 C2 C2 C2 C2 C4 /* clear c[]--assume BMAX+1 is 16 */ p = b; i = n; do { c[*p++]++; /* assume all entries <= BMAX */ } while (--i); if (c[0] == n) /* null input--all zero length codes */ { *t = (inflate_huft *)Z_NULL; *m = 0; return Z_OK; } /* Find minimum and maximum length, bound *m by those */ l = *m; for (j = 1; j <= BMAX; j++) if (c[j]) break; k = j; /* minimum code length */ if ((uInt)l < j) l = j; for (i = BMAX; i; i--) if (c[i]) break; g = i; /* maximum code length */ if ((uInt)l > i) l = i; *m = l; /* Adjust last length count to fill out codes, if needed */ for (y = 1 << j; j < i; j++, y <<= 1) if ((y -= c[j]) < 0) return Z_DATA_ERROR; if ((y -= c[i]) < 0) return Z_DATA_ERROR; c[i] += y; /* Generate starting offsets into the value table for each length */ x[1] = j = 0; p = c + 1; xp = x + 2; while (--i) { /* note that i == g from above */ *xp++ = (j += *p++); } /* Make a table of values in order of bit lengths */ p = b; i = 0; do { if ((j = *p++) != 0) v[x[j]++] = i; } while (++i < n); n = x[g]; /* set n to length of v */ /* Generate the Huffman codes and for each, make the table entries */ x[0] = i = 0; /* first Huffman code is zero */ p = v; /* grab values in bit order */ h = -1; /* no tables yet--level -1 */ w = -l; /* bits decoded == (l * h) */ u[0] = (inflate_huft *)Z_NULL; /* just to keep compilers happy */ q = (inflate_huft *)Z_NULL; /* ditto */ z = 0; /* ditto */ /* go through the bit lengths (k already is bits in shortest code) */ for (; k <= g; k++) { a = c[k]; while (a--) { /* here i is the Huffman code of length k bits for value *p */ /* make tables up to required level */ while (k > w + l) { h++; w += l; /* previous table always l bits */ /* compute minimum size table less than or equal to l bits */ z = g - w; z = z > (uInt)l ? l : z; /* table size upper limit */ if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ { /* too few codes for k-w bit table */ f -= a + 1; /* deduct codes from patterns left */ xp = c + k; if (j < z) while (++j < z) /* try smaller tables up to z bits */ { if ((f <<= 1) <= *++xp) break; /* enough codes to use up j bits */ f -= *xp; /* else deduct codes from patterns */ } } z = 1 << j; /* table entries for j-bit table */ /* allocate new table */ if (*hn + z > MANY) /* (note: doesn't matter for fixed) */ return Z_DATA_ERROR; /* overflow of MANY */ u[h] = q = hp + *hn; *hn += z; /* connect to last table, if there is one */ if (h) { x[h] = i; /* save pattern for backing up */ r.bits = (Byte)l; /* bits to dump before this table */ r.exop = (Byte)j; /* bits in this table */ j = i >> (w - l); r.base = (uInt)(q - u[h-1] - j); /* offset to this table */ u[h-1][j] = r; /* connect to last table */ } else *t = q; /* first table is returned result */ } /* set up table entry in r */ r.bits = (Byte)(k - w); if (p >= v + n) r.exop = 128 + 64; /* out of values--invalid code */ else if (*p < s) { r.exop = (Byte)(*p < 256 ? 0 : 32 + 64); /* 256 is end-of-block */ r.base = *p++; /* simple code is just the value */ } else { r.exop = (Byte)(e[*p - s] + 16 + 64);/* non-simple--look up in lists */ r.base = d[*p++ - s]; } /* fill code-like entries with r */ f = 1 << (k - w); for (j = i >> w; j < z; j += f) q[j] = r; /* backwards increment the k-bit code i */ for (j = 1 << (k - 1); i & j; j >>= 1) i ^= j; i ^= j; /* backup over finished tables */ mask = (1 << w) - 1; /* needed on HP, cc -O bug */ while ((i & mask) != x[h]) { h--; /* don't need to update q */ w -= l; mask = (1 << w) - 1; } } } /* Return Z_BUF_ERROR if we were given an incomplete table */ return y != 0 && g != 1 ? Z_BUF_ERROR : Z_OK; } int inflate_trees_bits(c, bb, tb, hp, z) uIntf *c; /* 19 code lengths */ uIntf *bb; /* bits tree desired/actual depth */ inflate_huft * FAR *tb; /* bits tree result */ inflate_huft *hp; /* space for trees */ z_streamp z; /* for messages */ { int r; uInt hn = 0; /* hufts used in space */ uIntf *v; /* work area for huft_build */ if ((v = (uIntf*)ZALLOC(z, 19, sizeof(uInt))) == Z_NULL) return Z_MEM_ERROR; r = huft_build(c, 19, 19, (uIntf*)Z_NULL, (uIntf*)Z_NULL, tb, bb, hp, &hn, v); if (r == Z_DATA_ERROR) z->msg = (char*)"oversubscribed dynamic bit lengths tree"; else if (r == Z_BUF_ERROR || *bb == 0) { z->msg = (char*)"incomplete dynamic bit lengths tree"; r = Z_DATA_ERROR; } ZFREE(z, v); return r; } int inflate_trees_dynamic(nl, nd, c, bl, bd, tl, td, hp, z) uInt nl; /* number of literal/length codes */ uInt nd; /* number of distance codes */ uIntf *c; /* that many (total) code lengths */ uIntf *bl; /* literal desired/actual bit depth */ uIntf *bd; /* distance desired/actual bit depth */ inflate_huft * FAR *tl; /* literal/length tree result */ inflate_huft * FAR *td; /* distance tree result */ inflate_huft *hp; /* space for trees */ z_streamp z; /* for messages */ { int r; uInt hn = 0; /* hufts used in space */ uIntf *v; /* work area for huft_build */ /* allocate work area */ if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) return Z_MEM_ERROR; /* build literal/length tree */ r = huft_build(c, nl, 257, cplens, cplext, tl, bl, hp, &hn, v); if (r != Z_OK || *bl == 0) { if (r == Z_DATA_ERROR) z->msg = (char*)"oversubscribed literal/length tree"; else if (r != Z_MEM_ERROR) { z->msg = (char*)"incomplete literal/length tree"; r = Z_DATA_ERROR; } ZFREE(z, v); return r; } /* build distance tree */ r = huft_build(c + nl, nd, 0, cpdist, cpdext, td, bd, hp, &hn, v); if (r != Z_OK || (*bd == 0 && nl > 257)) { if (r == Z_DATA_ERROR) z->msg = (char*)"oversubscribed distance tree"; else if (r == Z_BUF_ERROR) { #ifdef PKZIP_BUG_WORKAROUND r = Z_OK; } #else z->msg = (char*)"incomplete distance tree"; r = Z_DATA_ERROR; } else if (r != Z_MEM_ERROR) { z->msg = (char*)"empty distance tree with lengths"; r = Z_DATA_ERROR; } ZFREE(z, v); return r; #endif } /* done */ ZFREE(z, v); return Z_OK; } /* build fixed tables only once--keep them here */ #ifdef BUILDFIXED local int fixed_built = 0; #define FIXEDH 544 /* number of hufts used by fixed tables */ local inflate_huft fixed_mem[FIXEDH]; local uInt fixed_bl; local uInt fixed_bd; local inflate_huft *fixed_tl; local inflate_huft *fixed_td; #else #include "inffixed.h" #endif int inflate_trees_fixed(bl, bd, tl, td, z) uIntf *bl; /* literal desired/actual bit depth */ uIntf *bd; /* distance desired/actual bit depth */ inflate_huft * FAR *tl; /* literal/length tree result */ inflate_huft * FAR *td; /* distance tree result */ z_streamp z; /* for memory allocation */ { #ifdef BUILDFIXED /* build fixed tables if not already */ if (!fixed_built) { int k; /* temporary variable */ uInt f = 0; /* number of hufts used in fixed_mem */ uIntf *c; /* length list for huft_build */ uIntf *v; /* work area for huft_build */ /* allocate memory */ if ((c = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) return Z_MEM_ERROR; if ((v = (uIntf*)ZALLOC(z, 288, sizeof(uInt))) == Z_NULL) { ZFREE(z, c); return Z_MEM_ERROR; } /* literal table */ for (k = 0; k < 144; k++) c[k] = 8; for (; k < 256; k++) c[k] = 9; for (; k < 280; k++) c[k] = 7; for (; k < 288; k++) c[k] = 8; fixed_bl = 9; huft_build(c, 288, 257, cplens, cplext, &fixed_tl, &fixed_bl, fixed_mem, &f, v); /* distance table */ for (k = 0; k < 30; k++) c[k] = 5; fixed_bd = 5; huft_build(c, 30, 0, cpdist, cpdext, &fixed_td, &fixed_bd, fixed_mem, &f, v); /* done */ ZFREE(z, v); ZFREE(z, c); fixed_built = 1; } #endif *bl = fixed_bl; *bd = fixed_bd; *tl = fixed_tl; *td = fixed_td; return Z_OK; } gnupg-1.4.20/zlib/adler32.c0000644000175000017500000000233512635262326012211 00000000000000/* adler32.c -- compute the Adler-32 checksum of a data stream * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #include "zlib.h" #define BASE 65521L /* largest prime smaller than 65536 */ #define NMAX 5552 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ #define DO1(buf,i) {s1 += buf[i]; s2 += s1;} #define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); #define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); #define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); #define DO16(buf) DO8(buf,0); DO8(buf,8); /* ========================================================================= */ uLong ZEXPORT adler32(adler, buf, len) uLong adler; const Bytef *buf; uInt len; { unsigned long s1 = adler & 0xffff; unsigned long s2 = (adler >> 16) & 0xffff; int k; if (buf == Z_NULL) return 1L; while (len > 0) { k = len < NMAX ? len : NMAX; len -= k; while (k >= 16) { DO16(buf); buf += 16; k -= 16; } if (k != 0) do { s1 += *buf++; s2 += s1; } while (--k); s1 %= BASE; s2 %= BASE; } return (s2 << 16) | s1; } gnupg-1.4.20/zlib/deflate.h0000644000175000017500000002652712635262326012377 00000000000000/* deflate.h -- internal compression state * Copyright (C) 1995-2002 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ /* @(#) $Id$ */ #ifndef _DEFLATE_H #define _DEFLATE_H #include "zutil.h" /* =========================================================================== * Internal compression state. */ #define LENGTH_CODES 29 /* number of length codes, not counting the special END_BLOCK code */ #define LITERALS 256 /* number of literal bytes 0..255 */ #define L_CODES (LITERALS+1+LENGTH_CODES) /* number of Literal or Length codes, including the END_BLOCK code */ #define D_CODES 30 /* number of distance codes */ #define BL_CODES 19 /* number of codes used to transfer the bit lengths */ #define HEAP_SIZE (2*L_CODES+1) /* maximum heap size */ #define MAX_BITS 15 /* All codes must not exceed MAX_BITS bits */ #define INIT_STATE 42 #define BUSY_STATE 113 #define FINISH_STATE 666 /* Stream status */ /* Data structure describing a single value and its code string. */ typedef struct ct_data_s { union { ush freq; /* frequency count */ ush code; /* bit string */ } fc; union { ush dad; /* father node in Huffman tree */ ush len; /* length of bit string */ } dl; } FAR ct_data; #define Freq fc.freq #define Code fc.code #define Dad dl.dad #define Len dl.len typedef struct static_tree_desc_s static_tree_desc; typedef struct tree_desc_s { ct_data *dyn_tree; /* the dynamic tree */ int max_code; /* largest code with non zero frequency */ static_tree_desc *stat_desc; /* the corresponding static tree */ } FAR tree_desc; typedef ush Pos; typedef Pos FAR Posf; typedef unsigned IPos; /* A Pos is an index in the character window. We use short instead of int to * save space in the various tables. IPos is used only for parameter passing. */ typedef struct internal_state { z_streamp strm; /* pointer back to this zlib stream */ int status; /* as the name implies */ Bytef *pending_buf; /* output still pending */ ulg pending_buf_size; /* size of pending_buf */ Bytef *pending_out; /* next pending byte to output to the stream */ int pending; /* nb of bytes in the pending buffer */ int noheader; /* suppress zlib header and adler32 */ Byte data_type; /* UNKNOWN, BINARY or ASCII */ Byte method; /* STORED (for zip only) or DEFLATED */ int last_flush; /* value of flush param for previous deflate call */ /* used by deflate.c: */ uInt w_size; /* LZ77 window size (32K by default) */ uInt w_bits; /* log2(w_size) (8..16) */ uInt w_mask; /* w_size - 1 */ Bytef *window; /* Sliding window. Input bytes are read into the second half of the window, * and move to the first half later to keep a dictionary of at least wSize * bytes. With this organization, matches are limited to a distance of * wSize-MAX_MATCH bytes, but this ensures that IO is always * performed with a length multiple of the block size. Also, it limits * the window size to 64K, which is quite useful on MSDOS. * To do: use the user input buffer as sliding window. */ ulg window_size; /* Actual size of window: 2*wSize, except when the user input buffer * is directly used as sliding window. */ Posf *prev; /* Link to older string with same hash index. To limit the size of this * array to 64K, this link is maintained only for the last 32K strings. * An index in this array is thus a window index modulo 32K. */ Posf *head; /* Heads of the hash chains or NIL. */ uInt ins_h; /* hash index of string to be inserted */ uInt hash_size; /* number of elements in hash table */ uInt hash_bits; /* log2(hash_size) */ uInt hash_mask; /* hash_size-1 */ uInt hash_shift; /* Number of bits by which ins_h must be shifted at each input * step. It must be such that after MIN_MATCH steps, the oldest * byte no longer takes part in the hash key, that is: * hash_shift * MIN_MATCH >= hash_bits */ long block_start; /* Window position at the beginning of the current output block. Gets * negative when the window is moved backwards. */ uInt match_length; /* length of best match */ IPos prev_match; /* previous match */ int match_available; /* set if previous match exists */ uInt strstart; /* start of string to insert */ uInt match_start; /* start of matching string */ uInt lookahead; /* number of valid bytes ahead in window */ uInt prev_length; /* Length of the best match at previous step. Matches not greater than this * are discarded. This is used in the lazy match evaluation. */ uInt max_chain_length; /* To speed up deflation, hash chains are never searched beyond this * length. A higher limit improves compression ratio but degrades the * speed. */ uInt max_lazy_match; /* Attempt to find a better match only when the current match is strictly * smaller than this value. This mechanism is used only for compression * levels >= 4. */ # define max_insert_length max_lazy_match /* Insert new strings in the hash table only if the match length is not * greater than this length. This saves time but degrades compression. * max_insert_length is used only for compression levels <= 3. */ int level; /* compression level (1..9) */ int strategy; /* favor or force Huffman coding*/ uInt good_match; /* Use a faster search when the previous match is longer than this */ int nice_match; /* Stop searching when current match exceeds this */ /* used by trees.c: */ /* Didn't use ct_data typedef below to supress compiler warning */ struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ struct tree_desc_s l_desc; /* desc. for literal tree */ struct tree_desc_s d_desc; /* desc. for distance tree */ struct tree_desc_s bl_desc; /* desc. for bit length tree */ ush bl_count[MAX_BITS+1]; /* number of codes at each bit length for an optimal tree */ int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ int heap_len; /* number of elements in the heap */ int heap_max; /* element of largest frequency */ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. * The same heap array is used to build all trees. */ uch depth[2*L_CODES+1]; /* Depth of each subtree used as tie breaker for trees of equal frequency */ uchf *l_buf; /* buffer for literals or lengths */ uInt lit_bufsize; /* Size of match buffer for literals/lengths. There are 4 reasons for * limiting lit_bufsize to 64K: * - frequencies can be kept in 16 bit counters * - if compression is not successful for the first block, all input * data is still in the window so we can still emit a stored block even * when input comes from standard input. (This can also be done for * all blocks if lit_bufsize is not greater than 32K.) * - if compression is not successful for a file smaller than 64K, we can * even emit a stored file instead of a stored block (saving 5 bytes). * This is applicable only for zip (not gzip or zlib). * - creating new Huffman trees less frequently may not provide fast * adaptation to changes in the input data statistics. (Take for * example a binary file with poorly compressible code followed by * a highly compressible string table.) Smaller buffer sizes give * fast adaptation but have of course the overhead of transmitting * trees more frequently. * - I can't count above 4 */ uInt last_lit; /* running index in l_buf */ ushf *d_buf; /* Buffer for distances. To simplify the code, d_buf and l_buf have * the same number of elements. To use different lengths, an extra flag * array would be necessary. */ ulg opt_len; /* bit length of current block with optimal trees */ ulg static_len; /* bit length of current block with static trees */ uInt matches; /* number of string matches in current block */ int last_eob_len; /* bit length of EOB code for last block */ #ifdef DEBUG ulg compressed_len; /* total bit length of compressed file mod 2^32 */ ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ #endif ush bi_buf; /* Output buffer. bits are inserted starting at the bottom (least * significant bits). */ int bi_valid; /* Number of valid bits in bi_buf. All bits above the last valid bit * are always zero. */ } FAR deflate_state; /* Output a byte on the stream. * IN assertion: there is enough room in pending_buf. */ #define put_byte(s, c) {s->pending_buf[s->pending++] = (c);} #define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) /* Minimum amount of lookahead, except at the end of the input file. * See deflate.c for comments about the MIN_MATCH+1. */ #define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) /* In order to simplify the code, particularly on 16 bit machines, match * distances are limited to MAX_DIST instead of WSIZE. */ /* in trees.c */ void _tr_init OF((deflate_state *s)); int _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc)); void _tr_flush_block OF((deflate_state *s, charf *buf, ulg stored_len, int eof)); void _tr_align OF((deflate_state *s)); void _tr_stored_block OF((deflate_state *s, charf *buf, ulg stored_len, int eof)); #define d_code(dist) \ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) /* Mapping from a distance to a distance code. dist is the distance - 1 and * must not have side effects. _dist_code[256] and _dist_code[257] are never * used. */ #ifndef DEBUG /* Inline versions of _tr_tally for speed: */ #if defined(GEN_TREES_H) || !defined(STDC) extern uch _length_code[]; extern uch _dist_code[]; #else extern const uch _length_code[]; extern const uch _dist_code[]; #endif # define _tr_tally_lit(s, c, flush) \ { uch cc = (c); \ s->d_buf[s->last_lit] = 0; \ s->l_buf[s->last_lit++] = cc; \ s->dyn_ltree[cc].Freq++; \ flush = (s->last_lit == s->lit_bufsize-1); \ } # define _tr_tally_dist(s, distance, length, flush) \ { uch len = (length); \ ush dist = (distance); \ s->d_buf[s->last_lit] = dist; \ s->l_buf[s->last_lit++] = len; \ dist--; \ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ s->dyn_dtree[d_code(dist)].Freq++; \ flush = (s->last_lit == s->lit_bufsize-1); \ } #else # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) # define _tr_tally_dist(s, distance, length, flush) \ flush = _tr_tally(s, distance, length) #endif #endif gnupg-1.4.20/zlib/zutil.h0000644000175000017500000001267012635262326012134 00000000000000/* zutil.h -- internal interface and configuration of the compression library * Copyright (C) 1995-2002 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ /* @(#) $Id$ */ #ifndef _Z_UTIL_H #define _Z_UTIL_H #include "zlib.h" #ifdef STDC # include # include # include #endif #ifdef NO_ERRNO_H extern int errno; #else # include #endif #ifndef local # define local static #endif /* compile with -Dlocal if your debugger can't find static symbols */ typedef unsigned char uch; typedef uch FAR uchf; typedef unsigned short ush; typedef ush FAR ushf; typedef unsigned long ulg; extern const char *z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ #define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] #define ERR_RETURN(strm,err) \ return (strm->msg = (char*)ERR_MSG(err), (err)) /* To be used only when the state is known to be valid */ /* common constants */ #ifndef DEF_WBITS # define DEF_WBITS MAX_WBITS #endif /* default windowBits for decompression. MAX_WBITS is for compression only */ #if MAX_MEM_LEVEL >= 8 # define DEF_MEM_LEVEL 8 #else # define DEF_MEM_LEVEL MAX_MEM_LEVEL #endif /* default memLevel */ #define STORED_BLOCK 0 #define STATIC_TREES 1 #define DYN_TREES 2 /* The three kinds of block type */ #define MIN_MATCH 3 #define MAX_MATCH 258 /* The minimum and maximum match lengths */ #define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ /* target dependencies */ #ifdef MSDOS # define OS_CODE 0x00 # if defined(__TURBOC__) || defined(__BORLANDC__) # if(__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) /* Allow compilation with ANSI keywords only enabled */ void _Cdecl farfree( void *block ); void *_Cdecl farmalloc( unsigned long nbytes ); # else # include # endif # else /* MSC or DJGPP */ # include # endif #endif #ifdef OS2 # define OS_CODE 0x06 #endif #ifdef WIN32 /* Window 95 & Windows NT */ # define OS_CODE 0x0b #endif #if defined(VAXC) || defined(VMS) # define OS_CODE 0x02 # define F_OPEN(name, mode) \ fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") #endif #ifdef AMIGA # define OS_CODE 0x01 #endif #if defined(ATARI) || defined(atarist) # define OS_CODE 0x05 #endif #if defined(MACOS) || defined(TARGET_OS_MAC) # define OS_CODE 0x07 # if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os # include /* for fdopen */ # else # ifndef fdopen # define fdopen(fd,mode) NULL /* No fdopen() */ # endif # endif #endif #ifdef __50SERIES /* Prime/PRIMOS */ # define OS_CODE 0x0F #endif #ifdef TOPS20 # define OS_CODE 0x0a #endif #if defined(_BEOS_) || defined(RISCOS) # define fdopen(fd,mode) NULL /* No fdopen() */ #endif #if (defined(_MSC_VER) && (_MSC_VER > 600)) # define fdopen(fd,type) _fdopen(fd,type) #endif /* Common defaults */ #ifndef OS_CODE # define OS_CODE 0x03 /* assume Unix */ #endif #ifndef F_OPEN # define F_OPEN(name, mode) fopen((name), (mode)) #endif /* functions */ #ifdef HAVE_STRERROR extern char *strerror OF((int)); # define zstrerror(errnum) strerror(errnum) #else # define zstrerror(errnum) "" #endif #if defined(pyr) # define NO_MEMCPY #endif #if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) /* Use our own functions for small and medium model with MSC <= 5.0. * You may have to use the same strategy for Borland C (untested). * The __SC__ check is for Symantec. */ # define NO_MEMCPY #endif #if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) # define HAVE_MEMCPY #endif #ifdef HAVE_MEMCPY # ifdef SMALL_MEDIUM /* MSDOS small or medium model */ # define zmemcpy _fmemcpy # define zmemcmp _fmemcmp # define zmemzero(dest, len) _fmemset(dest, 0, len) # else # define zmemcpy memcpy # define zmemcmp memcmp # define zmemzero(dest, len) memset(dest, 0, len) # endif #else extern void zmemcpy OF((Bytef* dest, const Bytef* source, uInt len)); extern int zmemcmp OF((const Bytef* s1, const Bytef* s2, uInt len)); extern void zmemzero OF((Bytef* dest, uInt len)); #endif /* Diagnostic functions */ #ifdef DEBUG # include extern int z_verbose; extern void z_error OF((char *m)); # define Assert(cond,msg) {if(!(cond)) z_error(msg);} # define Trace(x) {if (z_verbose>=0) fprintf x ;} # define Tracev(x) {if (z_verbose>0) fprintf x ;} # define Tracevv(x) {if (z_verbose>1) fprintf x ;} # define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} # define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} #else # define Assert(cond,msg) # define Trace(x) # define Tracev(x) # define Tracevv(x) # define Tracec(c,x) # define Tracecv(c,x) #endif typedef uLong (ZEXPORT *check_func) OF((uLong check, const Bytef *buf, uInt len)); voidpf zcalloc OF((voidpf opaque, unsigned items, unsigned size)); void zcfree OF((voidpf opaque, voidpf ptr)); #define ZALLOC(strm, items, size) \ (*((strm)->zalloc))((strm)->opaque, (items), (size)) #define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) #define TRY_FREE(s, p) {if (p) ZFREE(s, p);} #endif /* _Z_UTIL_H */ gnupg-1.4.20/zlib/crc32.c0000644000175000017500000001547612635262326011703 00000000000000/* crc32.c -- compute the CRC-32 of a data stream * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #include "zlib.h" #define local static #ifdef DYNAMIC_CRC_TABLE local int crc_table_empty = 1; local uLongf crc_table[256]; local void make_crc_table OF((void)); /* Generate a table for a byte-wise 32-bit CRC calculation on the polynomial: x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. Polynomials over GF(2) are represented in binary, one bit per coefficient, with the lowest powers in the most significant bit. Then adding polynomials is just exclusive-or, and multiplying a polynomial by x is a right shift by one. If we call the above polynomial p, and represent a byte as the polynomial q, also with the lowest power in the most significant bit (so the byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p, where a mod b means the remainder after dividing a by b. This calculation is done using the shift-register method of multiplying and taking the remainder. The register is initialized to zero, and for each incoming bit, x^32 is added mod p to the register if the bit is a one (where x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x (which is shifting right by one and adding x^32 mod p if the bit shifted out is a one). We start with the highest power (least significant bit) of q and repeat for all eight bits of q. The table is simply the CRC of all possible eight bit values. This is all the information needed to generate CRC's on data a byte at a time for all combinations of CRC register values and incoming bytes. */ local void make_crc_table() { uLong c; int n, k; uLong poly; /* polynomial exclusive-or pattern */ /* terms of polynomial defining this crc (except x^32): */ static const Byte p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26}; /* make exclusive-or pattern from polynomial (0xedb88320L) */ poly = 0L; for (n = 0; n < sizeof(p)/sizeof(Byte); n++) poly |= 1L << (31 - p[n]); for (n = 0; n < 256; n++) { c = (uLong)n; for (k = 0; k < 8; k++) c = c & 1 ? poly ^ (c >> 1) : c >> 1; crc_table[n] = c; } crc_table_empty = 0; } #else /* ======================================================================== * Table of CRC-32's of all single-byte values (made by make_crc_table) */ local const uLongf crc_table[256] = { 0x00000000L, 0x77073096L, 0xee0e612cL, 0x990951baL, 0x076dc419L, 0x706af48fL, 0xe963a535L, 0x9e6495a3L, 0x0edb8832L, 0x79dcb8a4L, 0xe0d5e91eL, 0x97d2d988L, 0x09b64c2bL, 0x7eb17cbdL, 0xe7b82d07L, 0x90bf1d91L, 0x1db71064L, 0x6ab020f2L, 0xf3b97148L, 0x84be41deL, 0x1adad47dL, 0x6ddde4ebL, 0xf4d4b551L, 0x83d385c7L, 0x136c9856L, 0x646ba8c0L, 0xfd62f97aL, 0x8a65c9ecL, 0x14015c4fL, 0x63066cd9L, 0xfa0f3d63L, 0x8d080df5L, 0x3b6e20c8L, 0x4c69105eL, 0xd56041e4L, 0xa2677172L, 0x3c03e4d1L, 0x4b04d447L, 0xd20d85fdL, 0xa50ab56bL, 0x35b5a8faL, 0x42b2986cL, 0xdbbbc9d6L, 0xacbcf940L, 0x32d86ce3L, 0x45df5c75L, 0xdcd60dcfL, 0xabd13d59L, 0x26d930acL, 0x51de003aL, 0xc8d75180L, 0xbfd06116L, 0x21b4f4b5L, 0x56b3c423L, 0xcfba9599L, 0xb8bda50fL, 0x2802b89eL, 0x5f058808L, 0xc60cd9b2L, 0xb10be924L, 0x2f6f7c87L, 0x58684c11L, 0xc1611dabL, 0xb6662d3dL, 0x76dc4190L, 0x01db7106L, 0x98d220bcL, 0xefd5102aL, 0x71b18589L, 0x06b6b51fL, 0x9fbfe4a5L, 0xe8b8d433L, 0x7807c9a2L, 0x0f00f934L, 0x9609a88eL, 0xe10e9818L, 0x7f6a0dbbL, 0x086d3d2dL, 0x91646c97L, 0xe6635c01L, 0x6b6b51f4L, 0x1c6c6162L, 0x856530d8L, 0xf262004eL, 0x6c0695edL, 0x1b01a57bL, 0x8208f4c1L, 0xf50fc457L, 0x65b0d9c6L, 0x12b7e950L, 0x8bbeb8eaL, 0xfcb9887cL, 0x62dd1ddfL, 0x15da2d49L, 0x8cd37cf3L, 0xfbd44c65L, 0x4db26158L, 0x3ab551ceL, 0xa3bc0074L, 0xd4bb30e2L, 0x4adfa541L, 0x3dd895d7L, 0xa4d1c46dL, 0xd3d6f4fbL, 0x4369e96aL, 0x346ed9fcL, 0xad678846L, 0xda60b8d0L, 0x44042d73L, 0x33031de5L, 0xaa0a4c5fL, 0xdd0d7cc9L, 0x5005713cL, 0x270241aaL, 0xbe0b1010L, 0xc90c2086L, 0x5768b525L, 0x206f85b3L, 0xb966d409L, 0xce61e49fL, 0x5edef90eL, 0x29d9c998L, 0xb0d09822L, 0xc7d7a8b4L, 0x59b33d17L, 0x2eb40d81L, 0xb7bd5c3bL, 0xc0ba6cadL, 0xedb88320L, 0x9abfb3b6L, 0x03b6e20cL, 0x74b1d29aL, 0xead54739L, 0x9dd277afL, 0x04db2615L, 0x73dc1683L, 0xe3630b12L, 0x94643b84L, 0x0d6d6a3eL, 0x7a6a5aa8L, 0xe40ecf0bL, 0x9309ff9dL, 0x0a00ae27L, 0x7d079eb1L, 0xf00f9344L, 0x8708a3d2L, 0x1e01f268L, 0x6906c2feL, 0xf762575dL, 0x806567cbL, 0x196c3671L, 0x6e6b06e7L, 0xfed41b76L, 0x89d32be0L, 0x10da7a5aL, 0x67dd4accL, 0xf9b9df6fL, 0x8ebeeff9L, 0x17b7be43L, 0x60b08ed5L, 0xd6d6a3e8L, 0xa1d1937eL, 0x38d8c2c4L, 0x4fdff252L, 0xd1bb67f1L, 0xa6bc5767L, 0x3fb506ddL, 0x48b2364bL, 0xd80d2bdaL, 0xaf0a1b4cL, 0x36034af6L, 0x41047a60L, 0xdf60efc3L, 0xa867df55L, 0x316e8eefL, 0x4669be79L, 0xcb61b38cL, 0xbc66831aL, 0x256fd2a0L, 0x5268e236L, 0xcc0c7795L, 0xbb0b4703L, 0x220216b9L, 0x5505262fL, 0xc5ba3bbeL, 0xb2bd0b28L, 0x2bb45a92L, 0x5cb36a04L, 0xc2d7ffa7L, 0xb5d0cf31L, 0x2cd99e8bL, 0x5bdeae1dL, 0x9b64c2b0L, 0xec63f226L, 0x756aa39cL, 0x026d930aL, 0x9c0906a9L, 0xeb0e363fL, 0x72076785L, 0x05005713L, 0x95bf4a82L, 0xe2b87a14L, 0x7bb12baeL, 0x0cb61b38L, 0x92d28e9bL, 0xe5d5be0dL, 0x7cdcefb7L, 0x0bdbdf21L, 0x86d3d2d4L, 0xf1d4e242L, 0x68ddb3f8L, 0x1fda836eL, 0x81be16cdL, 0xf6b9265bL, 0x6fb077e1L, 0x18b74777L, 0x88085ae6L, 0xff0f6a70L, 0x66063bcaL, 0x11010b5cL, 0x8f659effL, 0xf862ae69L, 0x616bffd3L, 0x166ccf45L, 0xa00ae278L, 0xd70dd2eeL, 0x4e048354L, 0x3903b3c2L, 0xa7672661L, 0xd06016f7L, 0x4969474dL, 0x3e6e77dbL, 0xaed16a4aL, 0xd9d65adcL, 0x40df0b66L, 0x37d83bf0L, 0xa9bcae53L, 0xdebb9ec5L, 0x47b2cf7fL, 0x30b5ffe9L, 0xbdbdf21cL, 0xcabac28aL, 0x53b39330L, 0x24b4a3a6L, 0xbad03605L, 0xcdd70693L, 0x54de5729L, 0x23d967bfL, 0xb3667a2eL, 0xc4614ab8L, 0x5d681b02L, 0x2a6f2b94L, 0xb40bbe37L, 0xc30c8ea1L, 0x5a05df1bL, 0x2d02ef8dL }; #endif /* ========================================================================= * This function can be used by asm versions of crc32() */ const uLongf * ZEXPORT get_crc_table() { #ifdef DYNAMIC_CRC_TABLE if (crc_table_empty) make_crc_table(); #endif return (const uLongf *)crc_table; } /* ========================================================================= */ #define DO1(buf) crc = crc_table[((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8); #define DO2(buf) DO1(buf); DO1(buf); #define DO4(buf) DO2(buf); DO2(buf); #define DO8(buf) DO4(buf); DO4(buf); /* ========================================================================= */ uLong ZEXPORT crc32(crc, buf, len) uLong crc; const Bytef *buf; uInt len; { if (buf == Z_NULL) return 0L; #ifdef DYNAMIC_CRC_TABLE if (crc_table_empty) make_crc_table(); #endif crc = crc ^ 0xffffffffL; while (len >= 8) { DO8(buf); len -= 8; } if (len) do { DO1(buf); } while (--len); return crc ^ 0xffffffffL; } gnupg-1.4.20/zlib/zutil.c0000644000175000017500000001216012635262326012121 00000000000000/* zutil.c -- target dependent utility functions for the compression library * Copyright (C) 1995-2002 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #include "zutil.h" struct internal_state {int dummy;}; /* for buggy compilers */ #ifndef STDC extern void exit OF((int)); #endif const char *z_errmsg[10] = { "need dictionary", /* Z_NEED_DICT 2 */ "stream end", /* Z_STREAM_END 1 */ "", /* Z_OK 0 */ "file error", /* Z_ERRNO (-1) */ "stream error", /* Z_STREAM_ERROR (-2) */ "data error", /* Z_DATA_ERROR (-3) */ "insufficient memory", /* Z_MEM_ERROR (-4) */ "buffer error", /* Z_BUF_ERROR (-5) */ "incompatible version",/* Z_VERSION_ERROR (-6) */ ""}; const char * ZEXPORT zlibVersion() { return ZLIB_VERSION; } #ifdef DEBUG # ifndef verbose # define verbose 0 # endif int z_verbose = verbose; void z_error (m) char *m; { fprintf(stderr, "%s\n", m); exit(1); } #endif /* exported to allow conversion of error code to string for compress() and * uncompress() */ const char * ZEXPORT zError(err) int err; { return ERR_MSG(err); } #ifndef HAVE_MEMCPY void zmemcpy(dest, source, len) Bytef* dest; const Bytef* source; uInt len; { if (len == 0) return; do { *dest++ = *source++; /* ??? to be unrolled */ } while (--len != 0); } int zmemcmp(s1, s2, len) const Bytef* s1; const Bytef* s2; uInt len; { uInt j; for (j = 0; j < len; j++) { if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; } return 0; } void zmemzero(dest, len) Bytef* dest; uInt len; { if (len == 0) return; do { *dest++ = 0; /* ??? to be unrolled */ } while (--len != 0); } #endif #ifdef __TURBOC__ #if (defined( __BORLANDC__) || !defined(SMALL_MEDIUM)) && !defined(__32BIT__) /* Small and medium model in Turbo C are for now limited to near allocation * with reduced MAX_WBITS and MAX_MEM_LEVEL */ # define MY_ZCALLOC /* Turbo C malloc() does not allow dynamic allocation of 64K bytes * and farmalloc(64K) returns a pointer with an offset of 8, so we * must fix the pointer. Warning: the pointer must be put back to its * original form in order to free it, use zcfree(). */ #define MAX_PTR 10 /* 10*64K = 640K */ local int next_ptr = 0; typedef struct ptr_table_s { voidpf org_ptr; voidpf new_ptr; } ptr_table; local ptr_table table[MAX_PTR]; /* This table is used to remember the original form of pointers * to large buffers (64K). Such pointers are normalized with a zero offset. * Since MSDOS is not a preemptive multitasking OS, this table is not * protected from concurrent access. This hack doesn't work anyway on * a protected system like OS/2. Use Microsoft C instead. */ voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) { voidpf buf = opaque; /* just to make some compilers happy */ ulg bsize = (ulg)items*size; /* If we allocate less than 65520 bytes, we assume that farmalloc * will return a usable pointer which doesn't have to be normalized. */ if (bsize < 65520L) { buf = farmalloc(bsize); if (*(ush*)&buf != 0) return buf; } else { buf = farmalloc(bsize + 16L); } if (buf == NULL || next_ptr >= MAX_PTR) return NULL; table[next_ptr].org_ptr = buf; /* Normalize the pointer to seg:0 */ *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; *(ush*)&buf = 0; table[next_ptr++].new_ptr = buf; return buf; } void zcfree (voidpf opaque, voidpf ptr) { int n; if (*(ush*)&ptr != 0) { /* object < 64K */ farfree(ptr); return; } /* Find the original pointer */ for (n = 0; n < next_ptr; n++) { if (ptr != table[n].new_ptr) continue; farfree(table[n].org_ptr); while (++n < next_ptr) { table[n-1] = table[n]; } next_ptr--; return; } ptr = opaque; /* just to make some compilers happy */ Assert(0, "zcfree: ptr not found"); } #endif #endif /* __TURBOC__ */ #if defined(M_I86) && !defined(__32BIT__) /* Microsoft C in 16-bit mode */ # define MY_ZCALLOC #if (!defined(_MSC_VER) || (_MSC_VER <= 600)) # define _halloc halloc # define _hfree hfree #endif voidpf zcalloc (voidpf opaque, unsigned items, unsigned size) { if (opaque) opaque = 0; /* to make compiler happy */ return _halloc((long)items, size); } void zcfree (voidpf opaque, voidpf ptr) { if (opaque) opaque = 0; /* to make compiler happy */ _hfree(ptr); } #endif /* MSC */ #ifndef MY_ZCALLOC /* Any system without a special alloc function */ #ifndef STDC extern voidp calloc OF((uInt items, uInt size)); extern void free OF((voidpf ptr)); #endif voidpf zcalloc (opaque, items, size) voidpf opaque; unsigned items; unsigned size; { if (opaque) items += size - size; /* make compiler happy */ return (voidpf)calloc(items, size); } void zcfree (opaque, ptr) voidpf opaque; voidpf ptr; { free(ptr); if (opaque) return; /* make compiler happy */ } #endif /* MY_ZCALLOC */ gnupg-1.4.20/zlib/zconf.h0000644000175000017500000001720212635262326012100 00000000000000/* zconf.h -- configuration of the zlib compression library * Copyright (C) 1995-2002 Jean-loup Gailly. * For conditions of distribution and use, see copyright notice in zlib.h */ /* @(#) $Id$ */ #ifndef _ZCONF_H #define _ZCONF_H /* * If you *really* need a unique prefix for all types and library functions, * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. */ #ifdef Z_PREFIX # define deflateInit_ z_deflateInit_ # define deflate z_deflate # define deflateEnd z_deflateEnd # define inflateInit_ z_inflateInit_ # define inflate z_inflate # define inflateEnd z_inflateEnd # define deflateInit2_ z_deflateInit2_ # define deflateSetDictionary z_deflateSetDictionary # define deflateCopy z_deflateCopy # define deflateReset z_deflateReset # define deflateParams z_deflateParams # define inflateInit2_ z_inflateInit2_ # define inflateSetDictionary z_inflateSetDictionary # define inflateSync z_inflateSync # define inflateSyncPoint z_inflateSyncPoint # define inflateReset z_inflateReset # define compress z_compress # define compress2 z_compress2 # define uncompress z_uncompress # define adler32 z_adler32 # define crc32 z_crc32 # define get_crc_table z_get_crc_table # define Byte z_Byte # define uInt z_uInt # define uLong z_uLong # define Bytef z_Bytef # define charf z_charf # define intf z_intf # define uIntf z_uIntf # define uLongf z_uLongf # define voidpf z_voidpf # define voidp z_voidp #endif #if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) # define WIN32 #endif #if defined(__GNUC__) || defined(WIN32) || defined(__386__) || defined(i386) # ifndef __32BIT__ # define __32BIT__ # endif #endif #if defined(__MSDOS__) && !defined(MSDOS) # define MSDOS #endif /* * Compile with -DMAXSEG_64K if the alloc function cannot allocate more * than 64k bytes at a time (needed on systems with 16-bit int). */ #if defined(MSDOS) && !defined(__32BIT__) # define MAXSEG_64K #endif #ifdef MSDOS # define UNALIGNED_OK #endif #if (defined(MSDOS) || defined(_WINDOWS) || defined(WIN32)) && !defined(STDC) # define STDC #endif #if defined(__STDC__) || defined(__cplusplus) || defined(__OS2__) # ifndef STDC # define STDC # endif #endif #ifndef STDC # ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ # define const # endif #endif /* Some Mac compilers merge all .h files incorrectly: */ #if defined(__MWERKS__) || defined(applec) ||defined(THINK_C) ||defined(__SC__) # define NO_DUMMY_DECL #endif /* Old Borland C incorrectly complains about missing returns: */ #if defined(__BORLANDC__) && (__BORLANDC__ < 0x500) # define NEED_DUMMY_RETURN #endif /* Maximum value for memLevel in deflateInit2 */ #ifndef MAX_MEM_LEVEL # ifdef MAXSEG_64K # define MAX_MEM_LEVEL 8 # else # define MAX_MEM_LEVEL 9 # endif #endif /* Maximum value for windowBits in deflateInit2 and inflateInit2. * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files * created by gzip. (Files created by minigzip can still be extracted by * gzip.) */ #ifndef MAX_WBITS # define MAX_WBITS 15 /* 32K LZ77 window */ #endif /* The memory requirements for deflate are (in bytes): (1 << (windowBits+2)) + (1 << (memLevel+9)) that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) plus a few kilobytes for small objects. For example, if you want to reduce the default memory requirements from 256K to 128K, compile with make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" Of course this will generally degrade compression (there's no free lunch). The memory requirements for inflate are (in bytes) 1 << windowBits that is, 32K for windowBits=15 (default value) plus a few kilobytes for small objects. */ /* Type declarations */ #ifndef OF /* function prototypes */ # ifdef STDC # define OF(args) args # else # define OF(args) () # endif #endif /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, * just define FAR to be empty. */ #if (defined(M_I86SM) || defined(M_I86MM)) && !defined(__32BIT__) /* MSC small or medium model */ # define SMALL_MEDIUM # ifdef _MSC_VER # define FAR _far # else # define FAR far # endif #endif #if defined(__BORLANDC__) && (defined(__SMALL__) || defined(__MEDIUM__)) # ifndef __32BIT__ # define SMALL_MEDIUM # define FAR _far # endif #endif /* Compile with -DZLIB_DLL for Windows DLL support */ #if defined(ZLIB_DLL) # if defined(_WINDOWS) || defined(WINDOWS) # ifdef FAR # undef FAR # endif # include # define ZEXPORT WINAPI # ifdef WIN32 # define ZEXPORTVA WINAPIV # else # define ZEXPORTVA FAR _cdecl _export # endif # endif # if defined (__BORLANDC__) # if (__BORLANDC__ >= 0x0500) && defined (WIN32) # include # define ZEXPORT __declspec(dllexport) WINAPI # define ZEXPORTRVA __declspec(dllexport) WINAPIV # else # if defined (_Windows) && defined (__DLL__) # define ZEXPORT _export # define ZEXPORTVA _export # endif # endif # endif #endif #if defined (__BEOS__) # if defined (ZLIB_DLL) # define ZEXTERN extern __declspec(dllexport) # else # define ZEXTERN extern __declspec(dllimport) # endif #endif #ifndef ZEXPORT # define ZEXPORT #endif #ifndef ZEXPORTVA # define ZEXPORTVA #endif #ifndef ZEXTERN # define ZEXTERN extern #endif #ifndef FAR # define FAR #endif #if !defined(MACOS) && !defined(TARGET_OS_MAC) typedef unsigned char Byte; /* 8 bits */ #endif typedef unsigned int uInt; /* 16 bits or more */ typedef unsigned long uLong; /* 32 bits or more */ #ifdef SMALL_MEDIUM /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ # define Bytef Byte FAR #else typedef Byte FAR Bytef; #endif typedef char FAR charf; typedef int FAR intf; typedef uInt FAR uIntf; typedef uLong FAR uLongf; #ifdef STDC typedef void FAR *voidpf; typedef void *voidp; #else typedef Byte FAR *voidpf; typedef Byte *voidp; #endif #ifdef HAVE_UNISTD_H # include /* for off_t */ # include /* for SEEK_* and off_t */ # define z_off_t off_t #endif #ifndef SEEK_SET # define SEEK_SET 0 /* Seek from beginning of file. */ # define SEEK_CUR 1 /* Seek from current position. */ # define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ #endif #ifndef z_off_t # define z_off_t long #endif /* MVS linker does not support external names larger than 8 bytes */ #if defined(__MVS__) # pragma map(deflateInit_,"DEIN") # pragma map(deflateInit2_,"DEIN2") # pragma map(deflateEnd,"DEEND") # pragma map(inflateInit_,"ININ") # pragma map(inflateInit2_,"ININ2") # pragma map(inflateEnd,"INEND") # pragma map(inflateSync,"INSY") # pragma map(inflateSetDictionary,"INSEDI") # pragma map(inflate_blocks,"INBL") # pragma map(inflate_blocks_new,"INBLNE") # pragma map(inflate_blocks_free,"INBLFR") # pragma map(inflate_blocks_reset,"INBLRE") # pragma map(inflate_codes_free,"INCOFR") # pragma map(inflate_codes,"INCO") # pragma map(inflate_fast,"INFA") # pragma map(inflate_flush,"INFLU") # pragma map(inflate_mask,"INMA") # pragma map(inflate_set_dictionary,"INSEDI2") # pragma map(inflate_copyright,"INCOPY") # pragma map(inflate_trees_bits,"INTRBI") # pragma map(inflate_trees_dynamic,"INTRDY") # pragma map(inflate_trees_fixed,"INTRFI") # pragma map(inflate_trees_free,"INTRFR") #endif #endif /* _ZCONF_H */ gnupg-1.4.20/zlib/inffixed.h0000644000175000017500000002134012635262326012553 00000000000000/* inffixed.h -- table for decoding fixed codes * Generated automatically by the maketree.c program */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ local uInt fixed_bl = 9; local uInt fixed_bd = 5; local inflate_huft fixed_tl[] = { {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},192}, {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},160}, {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},224}, {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},144}, {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},208}, {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},176}, {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},240}, {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},200}, {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},168}, {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},232}, {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},152}, {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},216}, {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},184}, {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},248}, {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},196}, {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},164}, {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},228}, {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},148}, {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},212}, {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},180}, {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},244}, {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},204}, {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},172}, {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},236}, {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},156}, {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},220}, {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},188}, {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},252}, {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},194}, {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},162}, {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},226}, {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},146}, {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},210}, {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},178}, {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},242}, {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},202}, {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},170}, {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},234}, {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},154}, {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},218}, {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},186}, {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},250}, {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},198}, {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},166}, {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},230}, {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},150}, {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},214}, {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},182}, {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},246}, {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},206}, {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},174}, {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},238}, {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},158}, {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},222}, {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},190}, {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},254}, {{{96,7}},256}, {{{0,8}},80}, {{{0,8}},16}, {{{84,8}},115}, {{{82,7}},31}, {{{0,8}},112}, {{{0,8}},48}, {{{0,9}},193}, {{{80,7}},10}, {{{0,8}},96}, {{{0,8}},32}, {{{0,9}},161}, {{{0,8}},0}, {{{0,8}},128}, {{{0,8}},64}, {{{0,9}},225}, {{{80,7}},6}, {{{0,8}},88}, {{{0,8}},24}, {{{0,9}},145}, {{{83,7}},59}, {{{0,8}},120}, {{{0,8}},56}, {{{0,9}},209}, {{{81,7}},17}, {{{0,8}},104}, {{{0,8}},40}, {{{0,9}},177}, {{{0,8}},8}, {{{0,8}},136}, {{{0,8}},72}, {{{0,9}},241}, {{{80,7}},4}, {{{0,8}},84}, {{{0,8}},20}, {{{85,8}},227}, {{{83,7}},43}, {{{0,8}},116}, {{{0,8}},52}, {{{0,9}},201}, {{{81,7}},13}, {{{0,8}},100}, {{{0,8}},36}, {{{0,9}},169}, {{{0,8}},4}, {{{0,8}},132}, {{{0,8}},68}, {{{0,9}},233}, {{{80,7}},8}, {{{0,8}},92}, {{{0,8}},28}, {{{0,9}},153}, {{{84,7}},83}, {{{0,8}},124}, {{{0,8}},60}, {{{0,9}},217}, {{{82,7}},23}, {{{0,8}},108}, {{{0,8}},44}, {{{0,9}},185}, {{{0,8}},12}, {{{0,8}},140}, {{{0,8}},76}, {{{0,9}},249}, {{{80,7}},3}, {{{0,8}},82}, {{{0,8}},18}, {{{85,8}},163}, {{{83,7}},35}, {{{0,8}},114}, {{{0,8}},50}, {{{0,9}},197}, {{{81,7}},11}, {{{0,8}},98}, {{{0,8}},34}, {{{0,9}},165}, {{{0,8}},2}, {{{0,8}},130}, {{{0,8}},66}, {{{0,9}},229}, {{{80,7}},7}, {{{0,8}},90}, {{{0,8}},26}, {{{0,9}},149}, {{{84,7}},67}, {{{0,8}},122}, {{{0,8}},58}, {{{0,9}},213}, {{{82,7}},19}, {{{0,8}},106}, {{{0,8}},42}, {{{0,9}},181}, {{{0,8}},10}, {{{0,8}},138}, {{{0,8}},74}, {{{0,9}},245}, {{{80,7}},5}, {{{0,8}},86}, {{{0,8}},22}, {{{192,8}},0}, {{{83,7}},51}, {{{0,8}},118}, {{{0,8}},54}, {{{0,9}},205}, {{{81,7}},15}, {{{0,8}},102}, {{{0,8}},38}, {{{0,9}},173}, {{{0,8}},6}, {{{0,8}},134}, {{{0,8}},70}, {{{0,9}},237}, {{{80,7}},9}, {{{0,8}},94}, {{{0,8}},30}, {{{0,9}},157}, {{{84,7}},99}, {{{0,8}},126}, {{{0,8}},62}, {{{0,9}},221}, {{{82,7}},27}, {{{0,8}},110}, {{{0,8}},46}, {{{0,9}},189}, {{{0,8}},14}, {{{0,8}},142}, {{{0,8}},78}, {{{0,9}},253}, {{{96,7}},256}, {{{0,8}},81}, {{{0,8}},17}, {{{85,8}},131}, {{{82,7}},31}, {{{0,8}},113}, {{{0,8}},49}, {{{0,9}},195}, {{{80,7}},10}, {{{0,8}},97}, {{{0,8}},33}, {{{0,9}},163}, {{{0,8}},1}, {{{0,8}},129}, {{{0,8}},65}, {{{0,9}},227}, {{{80,7}},6}, {{{0,8}},89}, {{{0,8}},25}, {{{0,9}},147}, {{{83,7}},59}, {{{0,8}},121}, {{{0,8}},57}, {{{0,9}},211}, {{{81,7}},17}, {{{0,8}},105}, {{{0,8}},41}, {{{0,9}},179}, {{{0,8}},9}, {{{0,8}},137}, {{{0,8}},73}, {{{0,9}},243}, {{{80,7}},4}, {{{0,8}},85}, {{{0,8}},21}, {{{80,8}},258}, {{{83,7}},43}, {{{0,8}},117}, {{{0,8}},53}, {{{0,9}},203}, {{{81,7}},13}, {{{0,8}},101}, {{{0,8}},37}, {{{0,9}},171}, {{{0,8}},5}, {{{0,8}},133}, {{{0,8}},69}, {{{0,9}},235}, {{{80,7}},8}, {{{0,8}},93}, {{{0,8}},29}, {{{0,9}},155}, {{{84,7}},83}, {{{0,8}},125}, {{{0,8}},61}, {{{0,9}},219}, {{{82,7}},23}, {{{0,8}},109}, {{{0,8}},45}, {{{0,9}},187}, {{{0,8}},13}, {{{0,8}},141}, {{{0,8}},77}, {{{0,9}},251}, {{{80,7}},3}, {{{0,8}},83}, {{{0,8}},19}, {{{85,8}},195}, {{{83,7}},35}, {{{0,8}},115}, {{{0,8}},51}, {{{0,9}},199}, {{{81,7}},11}, {{{0,8}},99}, {{{0,8}},35}, {{{0,9}},167}, {{{0,8}},3}, {{{0,8}},131}, {{{0,8}},67}, {{{0,9}},231}, {{{80,7}},7}, {{{0,8}},91}, {{{0,8}},27}, {{{0,9}},151}, {{{84,7}},67}, {{{0,8}},123}, {{{0,8}},59}, {{{0,9}},215}, {{{82,7}},19}, {{{0,8}},107}, {{{0,8}},43}, {{{0,9}},183}, {{{0,8}},11}, {{{0,8}},139}, {{{0,8}},75}, {{{0,9}},247}, {{{80,7}},5}, {{{0,8}},87}, {{{0,8}},23}, {{{192,8}},0}, {{{83,7}},51}, {{{0,8}},119}, {{{0,8}},55}, {{{0,9}},207}, {{{81,7}},15}, {{{0,8}},103}, {{{0,8}},39}, {{{0,9}},175}, {{{0,8}},7}, {{{0,8}},135}, {{{0,8}},71}, {{{0,9}},239}, {{{80,7}},9}, {{{0,8}},95}, {{{0,8}},31}, {{{0,9}},159}, {{{84,7}},99}, {{{0,8}},127}, {{{0,8}},63}, {{{0,9}},223}, {{{82,7}},27}, {{{0,8}},111}, {{{0,8}},47}, {{{0,9}},191}, {{{0,8}},15}, {{{0,8}},143}, {{{0,8}},79}, {{{0,9}},255} }; local inflate_huft fixed_td[] = { {{{80,5}},1}, {{{87,5}},257}, {{{83,5}},17}, {{{91,5}},4097}, {{{81,5}},5}, {{{89,5}},1025}, {{{85,5}},65}, {{{93,5}},16385}, {{{80,5}},3}, {{{88,5}},513}, {{{84,5}},33}, {{{92,5}},8193}, {{{82,5}},9}, {{{90,5}},2049}, {{{86,5}},129}, {{{192,5}},24577}, {{{80,5}},2}, {{{87,5}},385}, {{{83,5}},25}, {{{91,5}},6145}, {{{81,5}},7}, {{{89,5}},1537}, {{{85,5}},97}, {{{93,5}},24577}, {{{80,5}},4}, {{{88,5}},769}, {{{84,5}},49}, {{{92,5}},12289}, {{{82,5}},13}, {{{90,5}},3073}, {{{86,5}},193}, {{{192,5}},24577} }; gnupg-1.4.20/zlib/inffast.h0000644000175000017500000000075012635262326012413 00000000000000/* inffast.h -- header to use inffast.c * Copyright (C) 1995-2002 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ /* WARNING: this file should *not* be used by applications. It is part of the implementation of the compression library and is subject to change. Applications should only use zlib.h. */ extern int inflate_fast OF(( uInt, uInt, inflate_huft *, inflate_huft *, inflate_blocks_statef *, z_streamp )); gnupg-1.4.20/VERSION0000644000175000017500000000000712635457223010715 000000000000001.4.20 gnupg-1.4.20/scripts/0000755000175000017500000000000012635457223011417 500000000000000gnupg-1.4.20/scripts/depcomp0000755000175000017500000005601612635216116012716 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # This program 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, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnupg-1.4.20/scripts/install-sh0000755000175000017500000003325512635216116013345 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnupg-1.4.20/scripts/ChangeLog-20110000644000175000017500000003664712635262326013510 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-02-23 Werner Koch * autogen.sh: Add git setup checking. 2010-10-18 Werner Koch * config.guess: Update to version 2010-09-24. * config.sub: Update to version 2010-09-11. 2009-09-05 Werner Koch * autogen.sh <--build-w32>: Pass --with-bzip2. 2009-09-03 Werner Koch * w32installer.nsi: Set the final OutPath to Doc/. 2008-01-30 Werner Koch * w32installer.nsi: Set the OutPath back. 2007-12-12 Werner Koch * config.sub, config.guess: Update to version 2007-11-19. 2007-11-15 Werner Koch * gnupg.spec.in: Converted to utf-8. Changed polish description. This is bug#676. 2007-06-22 Werner Koch * mk-w32-dist: Remove underline markup from man pages. Reported by Dirk Traulsen. 2007-05-03 Werner Koch * autogen.sh: Modernized. Removed autopoint invocation. This should be done by the maintainer and the put into the SVN. 2006-12-13 Werner Koch * gnupg.spec.in: Distribute gnupg1.info. 2006-12-04 Werner Koch * mk-gpg-texi: Removed. 2006-10-02 Werner Koch * w32installer.nsi: Don't uninstall winpt if the installer comes without it. I fixed it despite of what I said in bug 521. 2006-09-13 Werner Koch * autogen.sh: Better detection of the cross compiler. 2006-04-03 Werner Koch * w32installer.nsi: Install curl and not http keyserver helper. 2006-04-03 Werner Koch * autogen.sh: Unsupport mingw32/cpd. 2006-03-09 Werner Koch * config.sub, config.guess: Updated. 2006-02-14 Werner Koch * w32installer.nsi: Don't use System.dll. * autogen.sh (DIE): Add lost exit for --build-w32. 2005-10-02 Marcus Brinkmann * autogen.sh (DIE): Remove ugly hack for po dir suppression. 2005-08-21 David Shaw * gnupg.spec.in: Distribute gpg-zip. 2005-05-31 Werner Koch * config.guess, config.sub, config.rpath: Updated from todays gnulib CVS. 2005-04-22 David Shaw * gnupg.spec.in: No longer any need to override libexecdir. The makefiles now calculate this correctly internally. 2005-03-30 Werner Koch * w32installer.nsi: Allow including of WINPT source. Include libiconv source. * mk-w32-dist: Add code to detect presence of source. Calculate a build number; add option --build-number to overide. 2005-03-14 Werner Koch * mk-w32-dist: Check for patch files. * w32installer.nsi: Translated a few more strings. Print a warning if permssions are not suitable for the installation. Add Uninstaller entries. 2005-02-16 David Shaw * gnupg.spec.in: Fix problem with storing the gpgkeys helpers in libexec, but calling them in libexec/gnupg. 2005-02-16 Werner Koch * w32installer.nsi: Added page to select the language. * mk-w32-dist: Create the opt.ini using the available languages. 2005-02-03 Werner Koch * w32installer.nsi: Display README.W32 at the end of the installation. * mk-w32-dist: Append .txt to README.W32. 2005-01-26 Werner Koch * w32installer.nsi: Create a start menu entry and enhanced the build environment. * mk-w32-dist: Add more support for above. 2005-01-11 Werner Koch * w32installer.nsi: New. * mk-w32-dist: Append ".txt" to some files. Call makensis if available. 2004-12-21 David Shaw * autogen.sh: automake needs --add-missing for conditional CPPFLAGS build in keyserver/Makefile.am. 2004-11-26 Werner Koch * autogen.sh (gettext_vers_num): Fix aclocal test. 2004-10-27 Werner Koch * mk-w32-dist: Use utf-8 encoding for all MO files. 2004-10-26 Werner Koch * autogen.sh: Detect the Debian mingw32 package. 2004-10-18 Werner Koch * mk-gpg-texi: More fixups to help Debian's install-info. 2004-10-15 Werner Koch * mk-gpg-texi: Fix up the @setfilename lines. 2004-10-01 Werner Koch * mk-w32-dist: Updated from stable branch. * mk-gpg-texi: Changed to use the newer docbook2x-texi utility. * config.guess, config.sub, mkinstalldirs, missing * depcomp, install-sh: Upgraded. 2004-07-27 Werner Koch * autogen.sh: Updated to the moder version, grepping the required tool versions from configure.ac. 2004-06-14 Werner Koch * mk-w32-dist: Do not include the en@* po files. * autogen.sh <--build-w32>: Build keyserver helpers again. 2004-04-02 Thomas Schwinge * autogen.sh: Added ACLOCAL_FLAGS. 2003-12-28 Stefan Bellon * build-riscos, conf-riscos/*: Updated to reflect latest changes. 2003-10-25 Werner Koch * autogen.sh: Updated required versions and add -I m4 to aclocal. 2003-08-28 David Shaw * autogen.sh: Touch po/all for --build-w32. From Werner on stable branch. 2003-08-25 David Shaw * gnupg.spec.in: Rework much of the spec to use %-macros throughout. Fix to work properly with RPM 4.1 (all files in buildroot must be packaged). Package and install info files. Tweak the English description. Do not install gpgv and gpgsplit setuid root. Make sure that install-info is called in such a way that doesn't bork the RPM install if it cannot complete (necessary for some upgrade scenarios). 2003-05-26 David Shaw * mk-w32-dist: Don't iconv {hu,sk,zh_TW}.po. (From wk on stable branch) 2003-04-08 Werner Koch * autogen.sh: Add options to build for coldfire and uClinux. 2003-02-22 David Shaw * distfiles, gnupg.spec.in: convert-from-106 is in the tools directory now. * convert-from-106: Move to the tools directory. 2002-12-01 David Shaw * distfiles, gnupg.spec.in: Include convert-from-106. * convert-from-106: Script to automate the 1.0.6->later conversion. It marks all secret keys as ultimately trusted, adds the signature caches, and checks the trustdb. 2002-11-13 David Shaw * mk-w32-dist: Don't use iconv for pl.po. From Werner on stable branch. * mk-w32-dist: Include gpgkeys_ldap and gpgkeys_hkp. 2002-11-12 Werner Koch * config.sub, config.guess: Updated from ftp.gnu.org/gnu/config to version 2002-11-08. 2002-10-31 David Shaw * gnupg.spec.in: Update source ftp path. 2002-10-31 Stefan Bellon * conf-riscos/Makefile: Updated to reflect latest changes. 2002-10-28 Stefan Bellon * conf-riscos/include/config.h: Updated to reflect latest changes. 2002-10-26 David Shaw * gnupg.spec.in: Use new path for keyserver helpers, /usr/lib is no longer used for cipher/hash plugins, and include gpgv, gpgsplit, and the new gnupg.7 man page. 2002-10-17 Werner Koch * autogen.sh: Allow env variables to override the auto* tool names. Suggested by Simon Josefsson. 2002-09-11 Werner Koch * distfiles: Include mk-w32-dist. * mk-w32-dist: Convert the character sets on a per language base. 2002-09-02 Werner Koch * mk-w32-dist: Include more man pages and gpg split. Changed name of ZIP file to better indicate that this is a command line version. 2002-08-23 Werner Koch * autogen.sh : Don't run gettextize. 2002-08-06 Stefan Bellon * conf-riscos/include/config.h: Changed #define FOO to #define FOO 1. * conf-riscos/include/g10defs.h: Likewise. 2002-08-03 Stefan Bellon * conf-riscos/include/g10defs.h: Added GNUPG_LIBEXECDIR. * conf-riscos/include/config.h: Changes due to dynload removal and minor changes to avoid some warnings. * conf-riscos/Makefile: Changes due to dynload removal. * conf-riscos/cipher/*: Not needed anymore due to dynload removal. 2002-07-25 David Shaw * gnupgbug: "Warning" -> "WARNING" 2002-07-01 Werner Koch * mk-gpg-texi: New. 2002-06-30 Werner Koch * mk-w32-dist (bindir): Fixes vor VPATH builds in a subdir, include gpgv. 2002-06-21 Stefan Bellon * conf-riscos/Makefile: Changes due to moving around RISC OS specific stuff in the code. 2002-06-07 Stefan Bellon * conf-riscos/include/config.h [__riscos__]: Fixed macro bug. 2002-05-10 Stefan Bellon * conf-riscos/include/config.h [__riscos__]: Changes for later Norcroft compilers. * conf-riscos/Makefile [__riscos__]: Updated. 2002-04-22 Stefan Bellon * conf-riscos/include/config.h [__riscos__]: Development versions automatically define DEBUG from now on. * conf-riscos/Makefile [__riscos__]: Updated for LDAP keyserver code. 2002-04-19 David Shaw * gnupg.spec.in: Removed pubring.asc and OPTIONS. Added samplekeys.asc. 2002-03-31 David Shaw * gnupg.spec.in: Added the gpgkeys_xxx keyserver helpers. Added a * to catch variations on the basic gpg man page (gpg, gpgv). Mark options.skel as a config file. Do not include the FAQ/faq.html twice (in /doc/ and /share/). 2002-01-02 Stefan Bellon * build-riscos [__riscos__]: Set filetype of Makefile correctly. * conf-riscos/include/g10defs.h [__riscos__]: Added GNU GPL header and exec code defines. * conf-riscos/include/config.h [__riscos__]: Moved parts to include/util.h where they really belong to. * conf-riscos/Makefile [__riscos__]: Updated for new keyserver, exec and photo id code. 2001-12-22 Werner Koch * autogen.sh: Fixed last change. 2001-12-21 Werner Koch * distfiles: Removed those files which which automake installs by default. * autogen.sh: Replaced $() by backticks for system without a posix shell. Removed gawk specific quoting. By David Champion. 2001-10-22 Werner Koch * autogen.sh (aclocal_vers): Require automalke 1.5. 2001-08-21 Stefan Bellon * build-riscos [__riscos__]: New. * conf-riscos [__riscos__]: Ditto. 2001-08-13 Werner Koch * autogen.sh: Test on gettext 0.10.38. By Michael Engels. 2001-08-07 Werner Koch * autogen.sh: Adjusted --build-w32 for autoconf 2.52 2001-07-09 Werner Koch * autogen.sh (autoconf_vers): Require autoconf 2.50 2001-05-06 Werner Koch * config.guess, config.sub: Add updates from subversions.gnu.org. 2001-04-19 Werner Koch * autogen.sh: Add VPATH build support for option --build-w32. 2001-03-12 Werner Koch * config.guess, config.sub: Replaced with the current GNU CVS ones. 2001-01-18 Werner Koch * autogen.sh: New options --build-w32 * build-w32: Does now call autogen.sh 2000-11-24 Werner Koch * build-w32: New script to build the W32 version. * distfiles: And put it into the distribution Thu Sep 14 17:45:11 CEST 2000 Werner Koch * gnupg.spec.in: Updated. Wed Sep 6 17:55:47 CEST 2000 Werner Koch * config.guess, config.sub: Replaced with the latest version from the CVS archive. Hope that does not break too much. Fri May 12 14:01:20 CEST 2000 Werner Koch * gnupg.spec.in: New version from Fabio with some updated descriptions. Mon May 1 15:38:04 CEST 2000 Werner Koch * gnupg.spec.in: New version from Fabio. Fri Mar 17 16:26:05 CET 2000 Werner Koch * config.gues, config.sub: Support for s390-ibm-linux-gnu. Thanks to Holger Smolinski. Thu Mar 2 15:37:46 CET 2000 Werner Koch * config.guess: Add support for QNX. By Sam Roberts. * config.sub: Ditto. Thu Sep 23 09:49:25 1999 Werner Koch (wk@gnupg.org) * commit: Remove leading and trailing empty lines when copying Changes to Changelog Wed Sep 15 16:22:17 CEST 1999 Werner Koch * gnupg.spec: Add Portuguese description Thu Sep 2 16:40:55 CEST 1999 Werner Koch * mkdiff: changed format of diff file name and made script more general. Wed Aug 4 10:34:18 CEST 1999 Werner Koch * config.guess: Updated from gnu/common and applied my emx patch again. * config.sub: Updated from gnu/common. Wed Jul 14 19:42:08 CEST 1999 Werner Koch * ltmain.sh, ltconfig.sh : Updated to libtool 1.3.3 Mon Jul 12 14:55:34 CEST 1999 Werner Koch * autogen.sh: Run libtoolize Sat May 22 22:47:26 CEST 1999 Werner Koch * autogen.sh: Fixed the error message for a missing libtool. Sat May 8 19:28:08 CEST 1999 Werner Koch * mkinstalldirs, install-sh: New from GNU repository * config.sub, config.guess: Merged with rep version. Sun Mar 14 19:34:36 CET 1999 Werner Koch * autogen.sh: Add a check for libtool because some autoconf macros are needed. Mon Feb 22 20:04:00 CET 1999 Werner Koch * autogen.sh: Enhanced the version testing code (Philippe Laliberte) * mkwebpage: Edits the buglist. Sat Feb 13 12:04:43 CET 1999 Werner Koch * autogen.sh: Now uses gettextize Wed Feb 10 17:15:39 CET 1999 Werner Koch * config.sub, config.guess: Support i386-emx-os2 Sun Jan 17 11:04:33 CET 1999 Werner Koch * autogen.sh: Now checks for installed gettext Sat Jan 16 09:27:30 CET 1999 Werner Koch * config.guess (m68k-atari-mint): New. * config.sub: Add support for atarist-MiNT Wed Jan 13 12:49:36 CET 1999 Werner Koch * gnupg.spec.in: New * gnupg.spec: Removed Wed Dec 23 13:18:14 CET 1998 Werner Koch * gnupg.spec: Updated version by Fabio Coatti Thu Dec 17 18:31:15 CET 1998 Werner Koch * gnupg.spec: New version by Reuben Sumner and did some more changes. Fri Nov 27 12:39:29 CET 1998 Werner Koch * commit: New Fri Nov 20 12:01:57 1998 Werner Koch (wk@isil.d.shuttle.de) * mkdiff: signs the patch file Sat Oct 17 16:10:16 1998 Werner Koch (wk@isil.d.shuttle.de) * autogen.sh: New. Wed Oct 14 09:55:25 1998 Werner Koch (wk@isil.d.shuttle.de) * config.guess (FreeBSD): Changes from Jun Kuriyama to support ELF * config.sub: (freebsd): Add to maybe_os Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/scripts/build-w320000755000175000017500000000006212635262326012771 00000000000000#!/bin/sh exec scripts/autogen.sh --build-w32 gnupg-1.4.20/scripts/w32installer.nsi0000644000175000017500000004515312635262326014411 00000000000000; w32installer.nsi -*- coding: latin-1; -*- ; W32 Installer script ; Copyright (C) 2005 Free Software Foundation, Inc. ; ; This file is free software; as a special exception the author gives ; unlimited permission to copy and/or distribute it, with or without ; modifications, as long as this notice is preserved. ; ; This program is distributed in the hope that it will be useful, but ; WITHOUT ANY WARRANTY, to the extent permitted by law; without even the ; implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ;---------------------------------------------------------------------- ; This is an installer script used to create a W32 installer "exe" file ; using NSIS. It is usually used by the mk-w32-dist script. ;---------------------------------------------------------------------- ; We use the modern UI. !include "MUI.nsh" !include "StrFunc.nsh" !include "Sections.nsh" ; ------------- ; General stuff ; ------------- Name "GNU Privacy Guard" !ifdef WITH_WINPT OutFile "gnupg-w32-${VERSION}.exe" !else OutFile "gnupg-w32cli-${VERSION}.exe" !endif InstallDir "$PROGRAMFILES\GNU\GnuPG" InstallDirRegKey HKLM "Software\GNU\GnuPG" "Install Directory" SetCompressor lzma VIProductVersion "${PROD_VERSION}" VIAddVersionKey "ProductName" "GNU Privacy Guard (${VERSION})" VIAddVersionKey "Comments" \ "GnuPG is Free Software; you can redistribute it and/or modify \ it under the terms of the GNU General Public License. You should \ have received a copy of the GNU General Public License along with \ this software; if not, see ." VIAddVersionKey "CompanyName" "Free Software Foundation" VIAddVersionKey "LegalTrademarks" "" VIAddVersionKey "LegalCopyright" \ "Copyright (C) 2007 Free Software Foundation, Inc." VIAddVersionKey "FileDescription" \ "GnuPG: Encryption and digital signature tool" VIAddVersionKey "FileVersion" "${PROD_VERSION}" ; ---------------------- ; Variable declarations ; ---------------------- Var MYTMP Var STARTMENU_FOLDER ; ------------------ ; Interface Settings ; ------------------ ;;;!define MUI_ABORTWARNING !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_UNFINISHPAGE_NOAUTOCLOSE ; Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKCU" !define MUI_LANGDLL_REGISTRY_KEY "Software\GNU\GnuPG" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" ; ----- ; Pages ; ----- !define MUI_WELCOMEPAGE_TEXT "$(T_About)" !insertmacro MUI_PAGE_WELCOME !define MUI_PAGE_HEADER_SUBTEXT "$(T_GPLHeader)" !define MUI_LICENSEPAGE_TEXT_BOTTOM "$(T_GPLShort)" !define MUI_LICENSEPAGE_BUTTON "$(^NextBtn)" !insertmacro MUI_PAGE_LICENSE "COPYING.txt" !define MUI_PAGE_CUSTOMFUNCTION_SHOW PrintNonAdminWarning !insertmacro MUI_PAGE_COMPONENTS Page custom CustomPageOptions !insertmacro MUI_PAGE_DIRECTORY !define MUI_STARTMENUPAGE_REGISTRY_ROOT "HKCU" !define MUI_STARTMENUPAGE_REGISTRY_KEY "Software\GNU\GnuPG" !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder" !insertmacro MUI_PAGE_STARTMENU Application $STARTMENU_FOLDER !insertmacro MUI_PAGE_INSTFILES !define MUI_FINISHPAGE_SHOWREADME "README-W32.txt" !define MUI_FINISHPAGE_SHOWREADME_TEXT "$(T_ShowReadme)" !define MUI_FINISHPAGE_LINK "$(T_FiniLink)" !define MUI_FINISHPAGE_LINK_LOCATION "http://www.gnupg.org/" !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ; ----------------- ; i18n Declarations ; ----------------- !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "German" ; ------------------ ; Installer Sections ; ------------------ !insertmacro MUI_RESERVEFILE_LANGDLL !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ReserveFile "opt.ini" ReserveFile "COPYING.txt" ReserveFile "README-W32.txt" #ReserveFile "${NSISDIR}/Plugins/System.dll" ReserveFile "${NSISDIR}/Plugins/UserInfo.dll" ${StrStr} # Supportable for Install Sections and Functions ${StrTok} # Supportable for Install Sections and Functions ;InstType "full" ;InstType "minimal" ;---------------------- Section "Base" SecBase ; SectionIn 1 2 RO SectionIn RO SetOutPath "$INSTDIR" File "gpg.exe" File "gpgkeys_finger.exe" File "gpgkeys_hkp.exe" File "gpgkeys_curl.exe" File "gpgkeys_ldap.exe" SetOutPath "$INSTDIR\Doc" File "README.txt" File "README-W32.txt" File "COPYING.txt" Call InstallIconv WriteRegStr HKLM "Software\GNU\GnuPG" "Install Directory" $INSTDIR SectionEnd ; Section Base ;---------------------- Section "NLS" SecNLS ; SectionIn 1 SetOutPath "$INSTDIR\gnupg.nls" File "*.mo" SectionEnd ; Section NLS ;------------------------ Section "Tools" SecTools ; SectionIn 1 SetOutPath "$INSTDIR" File "gpgsplit.exe" File "gpgv.exe" SectionEnd ; Section Tools ;------------------ !ifdef WITH_WINPT Section "WinPT" SecWinPT ; SectionIn 1 SetOutPath "$INSTDIR" File "WinPT.exe" File "PTD.dll" File "keyserver.conf" SetOutPath "$INSTDIR\Doc" File "README.winpt.txt" WriteRegStr HKCU "Software\GNU\GnuPG" "gpgProgram" "$INSTDIR\gpg.exe" SectionEnd ; Section WinPT !endif ;---------------------- Section "Documentation" SecDoc ; SectionIn 1 SetOutPath "$INSTDIR\Doc" File "gnupg.man" File "gpg.man" File "gpgv.man" File "NEWS.txt" !ifdef WITH_WINPT File "NEWS.winpt.txt" !endif ; WITH_WINPT !ifdef WITH_PATCHES SetOutPath "$INSTDIR\Src" File 'patches.diff' !endif SectionEnd ; Section Documentation ;------------------ !ifdef WITH_SOURCE Section /o "Source" SecSource SetOutPath "$INSTDIR\Src" ; Note that we include the uncompressed tarballs because this allows ; far better compression results for the distribution. We might ; want to compress it again after installation. File "gnupg-${VERSION}.tar" File "libiconv-${LIBICONV_VERSION}.tar" !ifdef WITH_WINPT File "winpt-${WINPT_VERSION}.tar" !endif ; WITH_WINPT SectionEnd ; Section Source !endif ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; The last section is a hidden one; used to finish up things. ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Section "-Finish" ;;-------------------------- ;; Create the uninstaller ;;-------------------------- WriteUninstaller "$INSTDIR\uninst-gnupg.exe" StrCpy $MYTMP "Software\Microsoft\Windows\CurrentVersion\Uninstall\GnuPG" WriteRegExpandStr HKLM $MYTMP "UninstallString" '"$INSTDIR\uninst-gnupg.exe"' WriteRegExpandStr HKLM $MYTMP "InstallLocation" "$INSTDIR" WriteRegStr HKLM $MYTMP "DisplayName" "GNU Privacy Guard" WriteRegStr HKLM $MYTMP "DisplayIcon" "$INSTDIR\gpg.exe,0" WriteRegStr HKLM $MYTMP "DisplayVersion" "${VERSION}" WriteRegStr HKLM $MYTMP "Publisher" "Free Software Foundation" WriteRegStr HKLM $MYTMP "URLInfoAbout" "http://www.gnupg.org/" WriteRegDWORD HKLM $MYTMP "NoModify" "1" WriteRegDWORD HKLM $MYTMP "NoRepair" "1" ;;--------------------- ;; Create Menu entries ;;--------------------- !insertmacro MUI_STARTMENU_WRITE_BEGIN Application CreateDirectory "$SMPROGRAMS\$STARTMENU_FOLDER" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG README.lnk" \ "$INSTDIR\Doc\README.txt" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG README.Windows.lnk" \ "$INSTDIR\Doc\README-W32.txt" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG NEWS.lnk" \ "$INSTDIR\Doc\NEWS.txt" SectionGetFlags ${SecDoc} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 +2 CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\GnuPG Manual Page.lnk" \ "$INSTDIR\Doc\gpg.man" !ifdef WITH_WINPT SectionGetFlags ${SecWinPT} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 no_winpt_menu CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\winpt.lnk" \ "$INSTDIR\winpt.exe" CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\WinPT README.lnk" \ "$INSTDIR\Doc\README.winpt.txt" SectionGetFlags ${SecDoc} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 +2 CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\WinPT NEWS.lnk" \ "$INSTDIR\Doc\NEWS.winpt.txt" no_winpt_menu: !endif CreateShortCut "$SMPROGRAMS\$STARTMENU_FOLDER\uninst-gnupg.lnk" \ "$INSTDIR\uninst-gnupg.exe" !insertmacro MUI_STARTMENU_WRITE_END ;;----------------- ;; Set the language ;;----------------- SectionGetFlags ${SecNLS} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} 0 lang_none !insertmacro MUI_INSTALLOPTIONS_READ $R0 "opt.ini" "Field 1" "ListItems" DetailPrint "Available languages: $R0" !insertmacro MUI_INSTALLOPTIONS_READ $R1 "opt.ini" "Field 1" "State" DetailPrint "Selected language: $R1" StrCmp $R1 "" lang_none +1 ${StrStr} $R2 $R0 $R1 StrCmp $R2 "" lang_none +1 ${StrTok} $R3 $R2 " " "0" "1" goto lang_set_finish lang_none: DetailPrint "No language selected - using default" StrCpy $R3 "" lang_set_finish: DetailPrint "Setting language to: $R3" WriteRegStr HKCU "Software\GNU\GnuPG" "Lang" $R3 ;; # Set the Outpath pack so that the README file can be displayed. SetOutPath "$INSTDIR\Doc" SectionEnd ; "-Finish" ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;; Create the section for the uninstaller ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Section "Uninstall" ;;------------------------ ;; Delete files ;;------------------------ Delete "$INSTDIR\gpg.exe" Delete "$INSTDIR\gpgkeys_finger.exe" Delete "$INSTDIR\gpgkeys_hkp.exe" Delete "$INSTDIR\gpgkeys_curl.exe" Delete "$INSTDIR\gpgkeys_ldap.exe" Delete "$INSTDIR\Doc\README.txt" Delete "$INSTDIR\Doc\README-W32.txt" Delete "$INSTDIR\Doc\COPYING.txt" Delete "$INSTDIR\Doc\COPYING.LIB.txt" Delete "$INSTDIR\Doc\README.iconv.txt" Delete "$INSTDIR\iconv.dll" Delete "$INSTDIR\gnupg.nls\*.mo" Delete "$INSTDIR\gpgsplit.exe" Delete "$INSTDIR\gpgv.exe" !ifdef WITH_WINPT Delete "$INSTDIR\WinPT.exe" Delete "$INSTDIR\PTD.dll" Delete "$INSTDIR\Doc\README.winpt.txt" Delete "$INSTDIR\Doc\NEWS.winpt.txt" Delete "$INSTDIR\Doc\keyserver.conf" !endif Delete "$INSTDIR\Doc\gnupg.man" Delete "$INSTDIR\Doc\gpg.man" Delete "$INSTDIR\Doc\gpgv.man" Delete "$INSTDIR\Doc\NEWS.txt" Delete "$INSTDIR\Doc\FAQ.txt" Delete "$INSTDIR\Src\gnupg-${VERSION}.tar" Delete "$INSTDIR\Src\libiconv-${LIBICONV_VERSION}.tar" Delete "$INSTDIR\Src\winpt-${WINPT_VERSION}.tar" Delete "$INSTDIR\Src\*.diff" Delete "$INSTDIR\uninst-gnupg.exe" ;;------------------------ ;; Delete directories ;;------------------------ RMDir "$INSTDIR\Doc" RMDir "$INSTDIR\Src" RMDir "$INSTDIR\gnupg.nls" RMDir "$INSTDIR" ;;--------------------------------------------------- ;; Delete the menu entries and any empty parent menus ;;--------------------------------------------------- !insertmacro MUI_STARTMENU_GETFOLDER Application $MYTMP Delete "$SMPROGRAMS\$MYTMP\*.lnk" StrCpy $MYTMP "$SMPROGRAMS\$MYTMP" startMenuDeleteLoop: ClearErrors RMDir $MYTMP GetFullPathName $MYTMP "$MYTMP\.." IfErrors startMenuDeleteLoopDone StrCmp $MYTMP $SMPROGRAMS startMenuDeleteLoopDone startMenuDeleteLoop startMenuDeleteLoopDone: ;;----------------------- ;; Cleanup the registry ;;----------------------- DeleteRegValue HKCU "Software\GNU\GnuPG" "Start Menu Folder" DeleteRegValue HKLM "Software\GNU\GnuPG" "Install Directory" DeleteRegKey /ifempty HKLM "Software\GNU\GnuPG" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\GnuPG" SectionEnd ; Uninstall ; --------- ; Functions ; --------- Function .onInit # We can't use System.dll anymore becuase it has bee removed from # Debian due to an inability to build using FS. We should use the # use our own DLL as we do with gpg4win. #System::Call 'kernel32::CreateMutexA(i 0, i 0, t "GnuPGInst") i .r1 ?e' #Pop $R0 #StrCmp $R0 0 +3 # MessageBox MB_OK "An instance of the installer is already running." # Abort ;;!define MUI_LANGDLL_ALWAYSSHOW !insertmacro MUI_LANGDLL_DISPLAY !insertmacro MUI_INSTALLOPTIONS_EXTRACT "opt.ini" FunctionEnd Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEnd ;; Check whether the current user is in the Administrator group or ;; an OS version without the need for an Administrator is in use. ;; Print a warning if this is not the case. Function PrintNonAdminWarning ClearErrors UserInfo::GetName IfErrors leave Pop $0 UserInfo::GetAccountType Pop $1 StrCmp $1 "Admin" leave +1 MessageBox MB_OK "$(T_AdminNeeded)" leave: FunctionEnd Function CustomPageOptions SectionGetFlags ${SecNLS} $R0 IntOp $R0 $R0 & ${SF_SELECTED} IntCmp $R0 ${SF_SELECTED} show Abort show: !insertmacro MUI_HEADER_TEXT "$(T_InstallOptions)" "$(T_SelectLanguage)" !insertmacro MUI_INSTALLOPTIONS_READ $R0 "opt.ini" "Field 1" "ListItems" ReadRegStr $R1 HKCU "Software\GNU\GnuPG" "Lang" StrCmp $R1 "" use_default +1 ${StrStr} $R2 $R0 "$R1 - " StrCmp $R2 "" +1 set_lang use_default: StrCpy $R2 "$(T_langid) - $(T_langname)" set_lang: ${StrTok} $R3 $R2 "|" "0" "1" !insertmacro MUI_INSTALLOPTIONS_WRITE "opt.ini" "Field 1" "State" $R3 !insertmacro MUI_INSTALLOPTIONS_DISPLAY "opt.ini" FunctionEnd ; Install iconv.dll if it has not been installed on the system. Function InstallIconv ; First delete a iconv DLL already installed in the target directory. ; This is required to detect a meanwhile globally installed dll. Delete "$INSTDIR\iconv.dll" ClearErrors GetDllVersion "iconv.dll" $R0 $R1 IfErrors 0 +3 DetailPrint "iconv.dll is not installed." goto InstallIconv IntOp $R2 $R0 / 0x00010000 IntOp $R3 $R0 & 0x0000FFFF IntOp $R4 $R1 / 0x00010000 IntOp $R5 $R1 & 0x0000FFFF StrCpy $0 "$R2.$R3.$R4.$R5" DetailPrint "iconv.dll version is $0" IntCmp $R2 1 0 IconvTooOld IntCmp $R3 9 0 IconvTooOld return IconvTooOld: DetailPrint "The installed iconv.dll is too old." InstallIconv: SetOutPath "$INSTDIR" File "iconv.dll" SetOutPath "$INSTDIR\doc" File "COPYING.LIB.txt" File "README.iconv.txt" FunctionEnd ; ------------ ; Descriptions ; ------------ ; The list of language IDs and corresponding Latin-1 names. Note that ; this mapping needs to match the one in the mk-w32-dist script, so ; that they are usable to get a default value for then ListItems of ; opt.ini. LangString T_langid ${LANG_ENGLISH} "en" LangString T_langname ${LANG_ENGLISH} "English" LangString T_langid ${LANG_GERMAN} "de" LangString T_langname ${LANG_GERMAN} "Deutsch" ; The About string as displayed on the first page. LangString T_About ${LANG_ENGLISH} \ "GnuPG is GNU's tool for secure communication and data storage. \ It can be used to encrypt data and to create digital signatures. \ It includes an advanced key management facility and is compliant \ with the proposed OpenPGP Internet standard as described in RFC4880. \ \r\n\r\n$_CLICK \ \r\n\r\n\r\n\r\n\r\nThis is GnuPG version ${VERSION}\r\n\ built on $%BUILDINFO%\r\n\ file version ${PROD_VERSION}" LangString T_About ${LANG_GERMAN} \ "GnuPG is das Werkzeug aus dem GNU Projekt zur sicheren Kommunikation \ sowie zum sicheren Speichern von Daten. \ \r\n\r\n$_CLICK \ \r\n\r\n\r\n\r\n\r\nDies ist GnuPG Version ${VERSION}\r\n\ erstellt am $%BUILDINFO%\r\n\ Dateiversion ${PROD_VERSION}" ; Startup page LangString T_GPLHeader ${LANG_ENGLISH} \ "This software is licensed under the terms of the GNU General Public \ License (GPL) which guarantees your freedom to share and change Free \ Software." LangString T_GPLHeader ${LANG_GERMAN}} \ "Diese Software ist unter der GNU General Public License \ (GPL) lizensiert; dies gibt Ihnen die Freiheit, sie \ zu ndern und weiterzugeben." LangString T_GPLShort ${LANG_ENGLISH} \ "In short: You are allowed to run this software for any purpose. \ You may distribute it as long as you give the recipients the same \ rights you have received." LangString T_GPLShort ${LANG_GERMAN} \ "In aller Krze: Sie haben das Recht, die Software zu jedem Zweck \ einzusetzen. Sie knnen die Software weitergeben, sofern Sie dem \ Empfnger dieselben Rechte einrumen, die auch Sie erhalten haben." ; Finish page LangString T_FiniLink ${LANG_ENGLISH} \ "Visit the GnuPG website for latest news and support" LangString T_FiniLink ${LANG_GERMAN}} \ "Zur GnuPG Website mit Neuigkeiten und Hilfsangeboten" ; From Function PrintNonAdminWarning LangString T_AdminNeeded ${LANG_ENGLISH} \ "Warning: Administrator permissions required for a successful installation" LangString T_AdminNeeded ${LANG_GERMAN} \ "Warnung: Administrator Reche werden fr eine erfolgreiche \ Installation bentigt." ; Installation options like language used for GnuPG LangString T_InstallOptions ${LANG_ENGLISH} "Install Options" LangString T_InstallOptions ${LANG_GERMAN} "Installationsoptionen" LangString T_SelectLanguage ${LANG_ENGLISH} "GnuPG Language Selection" LangString T_SelectLanguage ${LANG_German} "Auswahl der Sprache fr GnuPG" ; This text is used on the finish page. LangString T_ShowReadme ${LANG_ENGLISH} "Show the README file" LangString T_ShowReadme ${LANG_GERMAN} "Die README Datei anzeigen" ; Section names LangString DESC_SecBase ${LANG_ENGLISH} \ "The basic files used for the standard OpenPGP protocol" LangString DESC_SecBase ${LANG_GERMAN} \ "Die Basis Dateien zur Benutzung des OpenPGP Protokolls" Langstring DESC_SecNLS ${LANG_ENGLISH} \ "Support for languages other than English" LangString DESC_SecNLS ${LANG_GERMAN} \ "Untersttzung fr weitere Sprachen neben Englisch" LangString DESC_SecTools ${LANG_ENGLISH} \ "Extra tools like gpgv and gpgsplit" LangString DESC_SecTools ${LANG_GERMAN} \ "Weitere Tools wie gpgv und gpgsplit" !ifdef WITH_WINPT LangString DESC_SecWinPT ${LANG_ENGLISH} \ "The Windows Privacy Tray (WinPT)" LangString DESC_SecWinPT ${LANG_GERMAN} \ "Der Windows Privacy Tray (WinPT)" !endif LangString DESC_SecDoc ${LANG_ENGLISH} \ "Manual pages and a FAQ" LangString DESC_SecDoc ${LANG_GERMAN} \ "Handbuchseiten und eine FAQ" LangString DESC_SecSource ${LANG_ENGLISH} \ "Quelltextdateien" LangString DESC_SecSource ${LANG_GERMAN} \ "Source files" ;------------------------------------- ; Associate section names with strings ;-------------------------------------- !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecBase} $(DESC_SecBase) !insertmacro MUI_DESCRIPTION_TEXT ${SecNLS} $(DESC_SecNLS) !insertmacro MUI_DESCRIPTION_TEXT ${SecTools} $(DESC_SecTools) !ifdef WITH_WINPT !insertmacro MUI_DESCRIPTION_TEXT ${SecWinPT} $(DESC_SecWinPT) !endif !insertmacro MUI_DESCRIPTION_TEXT ${SecDoc} $(DESC_SecDoc) !insertmacro MUI_FUNCTION_DESCRIPTION_END gnupg-1.4.20/scripts/texinfo.tex0000644000175000017500000116676312635262326013557 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2013-02-01.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file 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, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} % \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\rgbDarkRed} \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the ec* fonts (cm-super in outline format) for non-CM glyphs. \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. \everycr resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{ZZZ}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{zzz}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \checkenv{}% should not be in an environment. % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{\begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % % ... and for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \endgroup} \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.BLAH for each BLAH % in the params list to some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else \ifnum\paramno<10\relax % at most 9 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % at most 9 \ifnum\paramno<10\relax \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg). % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore gnupg-1.4.20/scripts/config.sub0000755000175000017500000010577512635262326013337 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-09-11' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnupg-1.4.20/scripts/gnupg.spec.in0000644000175000017500000002054112635262326013740 00000000000000# -*- coding: utf-8 -*- # gnupg -- gnu privacy guard # This is a template. The dist target uses it to create the real file. # %define version @pkg_version@ %define name gnupg Summary: GNU Utility for data encryption and digital signatures Summary(it): Utility GNU per la sicurezza nelle comunicazioni e nell'archiviazione dei dati. Summary(cs): GNU nástroj pro ¹ifrovanou komunikaci a bezpeèné ukládání dat Summary(fr): Utilitaire GNU de chiffrement et d'authentification des communications et des données Summary(pl): Narzêdzie GNU do szyfrowania i podpisywania danych Vendor: GNU Privacy Guard Project Name: %{name} Version: %{version} Release: 1 Copyright: GPL Group: Applications/Cryptography Group(cs): Aplikace/©ifrování Group(fr): Applications/Cryptographie Group(it): Applicazioni/Crittografia Source: ftp://ftp.gnupg.org/gcrypt/gnupg/%{name}-%{version}.tar.gz URL: http://www.gnupg.org/ Provides: gpg openpgp Requires(post,preun): /sbin/install-info BuildRoot: %{_tmppath}/rpmbuild_%{name}-%{version} %changelog * Sun Aug 21 2005 David Shaw - Distribute gpg-zip. * Fri Apr 22 2005 David Shaw - No longer any need to override libexecdir. The makefiles now calculate this correctly internally. * Wed Feb 16 2005 David Shaw - Fix problem with storing the gpgkeys helpers in libexec, but calling them in libexec/gnupg. * Wed Jul 30 2003 David Shaw - Rework much of the spec to use %-macros throughout. - Fix to work properly with RPM 4.1 (all files in buildroot must be packaged) - Package and install info files. - Tweak the English description. - There is no need to install gpgv and gpgsplit setuid root. * Sat Nov 30 2002 David Shaw - Add convert-from-106 script * Sat Oct 26 2002 David Shaw - Use new path for keyserver helpers. - /usr/lib is no longer used for cipher/hash plugins. - Include gpgv, gpgsplit, and the new gnupg.7 man page. * Fri Apr 19 2002 David Shaw - Removed OPTIONS and pubring.asc - no longer used - Added doc/samplekeys.asc * Sun Mar 31 2002 David Shaw - Added the gpgkeys_xxx keyserver helpers. - Added a * to catch variations on the basic gpg man page (gpg, gpgv). - Mark options.skel as a config file. - Do not include the FAQ/faq.html twice (in /doc/ and /share/). * Wed Sep 06 2000 Fabio Coatti - Added Polish description and summary (Kindly provided by Lukasz Stelmach ) * Thu Jul 13 2000 Fabio Coatti - Added a * to catch all formats for man pages (plain, gz, bz2...) * Mon May 01 2000 Fabio Coatti - Some corrections in French description, thanks to Gaël Quéri ; Some corrections to Italian descriptions. * Tue Apr 25 2000 Fabio Coatti - Removed the no longer needed patch for man page by Keith Owens * Wed Mar 1 2000 Petr Kri¹tof - Czech descriptions added; some fixes and updates. * Sat Jan 15 2000 Keith Owens - Add missing man page as separate patch instead of updating the tar file. * Mon Dec 27 1999 Fabio Coatti - Upgraded for 1.0.1 (added missing gpg.1 man page) * Sat May 29 1999 Fabio Coatti - Some corrections in French description, thanks to Gaël Quéri * Mon May 17 1999 Fabio Coatti - Added French description, provided by Christophe Labouisse * Thu May 06 1999 Fabio Coatti - Upgraded for 0.9.6 (removed gpgm) * Tue Jan 12 1999 Fabio Coatti - LINGUAS variable is now unset in configure to ensure that all languages will be built. (Thanks to Luca Olivetti ) * Sat Jan 02 1999 Fabio Coatti - Added pl language file. - Included g10/pubring.asc in documentation files. * Sat Dec 19 1998 Fabio Coatti - Modified the spec file provided by Caskey L. Dickson - Now it can be built also by non-root. Installation has to be done as root, gpg is suid. - Added some changes by Ross Golder - Updates for version 0.4.5 of GnuPG (.mo files) %description GnuPG (GNU Privacy Guard) is a GNU utility for encrypting data and creating digital signatures. GnuPG has advanced key management capabilities and is compliant with the proposed OpenPGP Internet standard described in RFC-2440. Since GnuPG doesn't use any patented algorithms, it is not compatible with some versions of PGP 2 which use only the patented IDEA algorithm. See http://www.gnupg.org/why-not-idea.html for information on using IDEA if the patent does not apply to you and you need to be compatible with these versions of PGP 2. %description -l it GnuPG (GNU Privacy Guard) è una utility GNU per la cifratura di dati e la creazione di firme digitali. Possiede una gestione avanzata delle chiavi ed è conforme allo standard Internet OpenPGP, descritto nella RFC 2440. Non utilizzando algoritmi brevettati, non è compatibile con PGP2 (PGP2.x usa solo IDEA, coperto da brevetto mondiale, ed RSA, brevettato negli USA con scadenza 20/09/2000). Questi algoritmi sono utilizzabili da GnuPG tramite moduli esterni. %description -l fr GnuPG est un utilitaire GNU destiné à chiffrer des données et à créer des signatures électroniques. Il a des capacités avancées de gestion de clés et il est conforme à la norme proposée OpenPGP décrite dans la RFC2440. Comme GnuPG n'utilise pas d'algorithme breveté, il n'est compatible avec aucune version de PGP2 (PGP2.x ne sait utiliser que l'IDEA breveté dans le monde entier et RSA, breveté aux États-Unis jusqu'au 20 septembre 2000). %description -l cs GnuPG je GNU nástroj pro bezpeènou komunikaci a ukládání dat. Mù¾e být pou¾it na ¹ifrování dat a vytváøení digitálních podpisù. Obsahuje funkce pro pokroèilou správu klíèù a vyhovuje navrhovanému OpenPGP Internet standardu podle RFC2440. Byl vytvoøen jako kompletní náhrada za PGP. Proto¾e neobsahuje ¹ifrovací algoritmy IDEA nebo RSA, mù¾e být pou¾íván bez omezení. Proto¾e GnuPG nepou¾ívá ¾ádný patentovaný algoritmus, nemù¾e být úplnì kompatibilní s PGP verze 2. PGP 2.x pou¾ívá algoritmy IDEA (patentováno celosvìtovì) a RSA (patentováno ve Spojených státech do 20. záøí 2000). Tyto algoritmy lze zavést do GnuPG pomocí externích modulù. %description -l pl GnuPG (GNU Privacy Guard) jest narzędziem do szyfrowania danych i tworzenia cyfrowych podpisów. GnuPG posiada zaawansowane możliwości obsługi kluczy i jest zgodne z proponowanym standardem internetowym OpenPGP, opisanym w RFC2440. Ponieważ GnuPG nie używa żadnych opatentowanych algorytmów, nie jest zgodne z jakąkolwiek wersją PGP2 (PGP2.x korzysta jedynie z algorytmów: IDEA, opatentowanego na calym świecie oraz RSA, którego patent na terenie Stanów Zjednoczonych wygasa 20. września 2000). %prep rm -rf $RPM_BUILD_ROOT %setup %build if test -n "$LINGUAS"; then unset LINGUAS fi %configure --program-prefix=%{?_program_prefix:%{_program_prefix}} make %install %makeinstall %find_lang %{name} rm %{buildroot}%{_datadir}/%{name}/FAQ rm %{buildroot}%{_datadir}/%{name}/faq.html rm -f %{buildroot}%{_infodir}/dir %files -f %{name}.lang %defattr (-,root,root) %doc INSTALL AUTHORS COPYING NEWS README THANKS TODO PROJECTS doc/DETAILS %doc doc/FAQ doc/faq.html doc/HACKING doc/OpenPGP doc/samplekeys.asc %doc %attr (0755,root,root) tools/convert-from-106 %config %{_datadir}/%{name}/options.skel %{_mandir}/man1/* %{_mandir}/man7/* %{_infodir}/gnupg1.info* %attr (4755,root,root) %{_bindir}/gpg %attr (0755,root,root) %{_bindir}/gpgv %attr (0755,root,root) %{_bindir}/gpgsplit %attr (0755,root,root) %{_bindir}/gpg-zip %attr (0755,root,root) %{_libexecdir}/gnupg/* %post /sbin/install-info %{_infodir}/gpg.info %{_infodir}/dir 2>/dev/null || : /sbin/install-info %{_infodir}/gpgv.info %{_infodir}/dir 2>/dev/null || : %preun if [ $1 = 0 ]; then /sbin/install-info --delete %{_infodir}/gpg.info \ %{_infodir}/dir 2>/dev/null || : /sbin/install-info --delete %{_infodir}/gpgv.info \ %{_infodir}/dir 2>/dev/null || : fi %clean rm -rf $RPM_BUILD_ROOT rm -rf $RPM_BUILD_DIR/%{name}-%{version} gnupg-1.4.20/scripts/config.rpath0000755000175000017500000004421612635216116013650 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2014 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' < # Created: 1993-05-16 # Public domain. # # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' IFS=" "" $nl" errstatus=0 dirmode= usage="\ Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ... Create each directory DIR (with mode MODE, if specified), including all leading file name components. Report bugs to ." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" exit $? ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --version) echo "$0 $scriptversion" exit $? ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac # Solaris 8's mkdir -p isn't thread-safe. If you mkdir -p a/b and # mkdir -p a/c at the same time, both will detect that a is missing, # one will create a, then the other will try to create a and die with # a "File exists" error. This is a problem when calling mkinstalldirs # from a parallel make. We use --version in the probe to restrict # ourselves to GNU mkdir, which is thread-safe. case $dirmode in '') if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" else # On NextStep and OpenStep, the 'mkdir' command does not # recognize any option. It will interpret all options as # directories to create, and then abort because '.' already # exists. test -d ./-p && rmdir ./-p test -d ./--version && rmdir ./--version fi ;; *) if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 && test ! -d ./--version; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" else # Clean up after NextStep and OpenStep mkdir. for d in ./-m ./-p ./--version "./$dirmode"; do test -d $d && rmdir $d done fi ;; esac for file do case $file in /*) pathcomp=/ ;; *) pathcomp= ;; esac oIFS=$IFS IFS=/ set fnord $file shift IFS=$oIFS for d do test "x$d" = x && continue pathcomp=$pathcomp$d case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr= chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp=$pathcomp/ done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnupg-1.4.20/scripts/mdate-sh0000755000175000017500000001363712635216116012773 00000000000000#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2010-08-21.06; # UTC # Copyright (C) 1995-2013 Free Software Foundation, Inc. # written by Ulrich Drepper , June 1995 # # This program 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, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to . EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnupg-1.4.20/scripts/compile0000755000175000017500000001624512635216116012717 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program 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, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnupg-1.4.20/scripts/missing0000755000175000017500000001533012635216116012732 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program 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, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: gnupg-1.4.20/scripts/mkdiff0000755000175000017500000000603412635262326012526 00000000000000#!/bin/sh # Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # Please note that this script is now maintained outside of GNUPG. # To get the most up to date version use # cvs -d :pserver:anoncvs@cvs.gnupg.org:/cvs/wk checkout misc-scripts/mkdiff if [ $# != 1 ] ; then echo "usage: mkdiff package-name" >&2 exit 1 fi pack="$1" set -e curr_ver=$(ls $pack-*.tar.gz 2>/dev/null | sed "s/^$pack-\(.*\)\.tar\.gz/\1/"\ | sort -r -t '.' -n +0 -1 +1 -2 +2 | head -1 ) if [ ! -f $pack-$curr_ver.tar.gz ]; then echo "mkdiff: no current version of package $pack found" >&2 exit 1 fi prev_ver=$(ls $pack-*.tar.gz 2>/dev/null | sed "s/^$pack-\(.*\)\.tar\.gz/\1/"\ | sort -r -t '.' -n +0 -1 +1 -2 +2 | head -2 | tail -1 ) if [ "$prev_ver" = "$curr_ver" ]; then echo "mkdiff: no previous version of package $pack found" >&2 exit 1 fi echo "Current is: $pack-$curr_ver" echo "Previous is: $pack-$prev_ver" echo "Removing old directories" [ -d "$pack-$curr_ver" ] && rm -rf "$pack-$curr_ver" [ -d "$pack-$prev_ver" ] && rm -rf "$pack-$prev_ver" echo "Unpacking previous and current tar" tar xzf "$pack-$curr_ver.tar.gz" rm -f $pack-${curr_ver}/po/*.gmo tar xzf "$pack-$prev_ver.tar.gz" rm -f $pack-${prev_ver}/po/*.gmo echo "Diffing" tmp_name="$pack-$prev_ver-$curr_ver.diff.tmp" diff_name="$pack-$prev_ver-$curr_ver.diff" diff -urN "$pack-$prev_ver/" "$pack-$curr_ver/" > $tmp_name || true echo "Making patch file" cat < $diff_name This is a patch file to create version $curr_ver from $prev_ver. Please check the signature of this patch file: zcat somepath/$pack-$prev_ver-$curr_ver.diff.gz | gpg --verify Change to directory $pack-$prev_ver (or however you renamed it) and give this command: zcat somepath/$pack-$prev_ver-$curr_ver.diff.gz | patch -p1 It is a good idea to rename your current directory to $pack-$curr_ver now. Prereq: $prev_ver EOF sed -ne '/^diff.*VERSION/,/^+[0-9][0-9]*/ p' $tmp_name >> $diff_name echo >> $diff_name sed -e '/^diff.*VERSION/,/^+[0-9][0-9]*/ d' $tmp_name >> $diff_name rm $tmp_name echo "Signing and compressing patch file" gpg --clearsign --not-dash-escaped -u 57548DCD \ < $diff_name | gzip --best > $diff_name.gz rm $diff_name echo "Checking patch file" cd $pack-$prev_ver zcat ../$diff_name.gz | patch -s -p1 rm $(find . -name "*.orig") 2>/dev/null || true cd .. if ! diff -urN "$pack-$prev_ver/" "$pack-$curr_ver/" >/dev/null ; then echo "compare failed" exit 1 fi if ! zcat $diff_name.gz | gpg --batch --verify ; then exit 1 fi echo "cleaning up" rm -rf "$pack-$curr_ver" rm -rf "$pack-$prev_ver" echo "Patch file $diff_name.gz is good." gnupg-1.4.20/scripts/autogen.sh0000755000175000017500000002265412635262326013347 00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. # # Copyright (C) 1998,1999,2000,2001,2002,2003 Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. configure_ac="configure.ac" cvtver () { awk 'NR==1 {split($NF,A,".");X=1000000*A[1]+1000*A[2]+A[3];print X;exit 0}' } check_version () { if [ `("$1" --version || echo "0") | cvtver` -ge "$2" ]; then return 0 fi echo "**Error**: "\`$1\'" not installed or too old." >&2 echo ' Version '$3' or newer is required.' >&2 [ -n "$4" ] && echo ' Note that this is part of '\`$4\''.' >&2 DIE="yes" return 1 } # Allow to override the default tool names AUTOCONF=${AUTOCONF_PREFIX}${AUTOCONF:-autoconf}${AUTOCONF_SUFFIX} AUTOHEADER=${AUTOCONF_PREFIX}${AUTOHEADER:-autoheader}${AUTOCONF_SUFFIX} AUTOMAKE=${AUTOMAKE_PREFIX}${AUTOMAKE:-automake}${AUTOMAKE_SUFFIX} ACLOCAL=${AUTOMAKE_PREFIX}${ACLOCAL:-aclocal}${AUTOMAKE_SUFFIX} GETTEXT=${GETTEXT_PREFIX}${GETTEXT:-gettext}${GETTEXT_SUFFIX} MSGMERGE=${GETTEXT_PREFIX}${MSGMERGE:-msgmerge}${GETTEXT_SUFFIX} DIE=no # Used to cross-compile GnuPG for Windows. if test "$1" = "--build-w32"; then tmp=`dirname $0` tsdir=`cd "$tmp"; cd ..; pwd` shift if [ ! -f $tsdir/scripts/config.guess ]; then echo "$tsdir/scripts/config.guess not found" >&2 exit 1 fi build=`$tsdir/scripts/config.guess` [ -z "$w32root" ] && w32root="$HOME/w32root" echo "Using $w32root as standard install directory" >&2 # Locate the cross compiler crossbindir= for host in i686-w64-mingw32 i586-mingw32msvc i386-mingw32msvc; do if ${host}-gcc --version >/dev/null 2>&1 ; then crossbindir=/usr/${host}/bin conf_CC="CC=${host}-gcc" break; fi done if [ -z "$crossbindir" ]; then echo "Cross compiler kit not installed" >&2 echo "Under Debian GNU/Linux, you may install it using" >&2 echo " apt-get install mingw32 mingw32-runtime mingw32-binutils" >&2 echo "Stop." >&2 exit 1 fi if [ -f "$tsdir/config.log" ]; then if ! head $tsdir/config.log | grep "$host" >/dev/null; then echo "Please run a 'make distclean' first" >&2 exit 1 fi fi disable_foo_tests="" if [ -n "$lib_config_files" ]; then for i in $lib_config_files; do j=`echo $i | tr '[a-z-]' '[A-Z_]'` eval "$j=${crossbindir}/$i" export $j disable_foo_tests="$disable_foo_tests --disable-`echo $i| \ sed 's,-config$,,'`-test" if [ ! -f "${crossbindir}/$i" ]; then echo "$i not installed for MingW32" >&2 DIE=yes fi done fi [ $DIE = yes ] && exit 1 $tsdir/configure ${conf_CC} --build=${build} --host=${host} \ ${disable_foo_tests} $* exit $? fi # This is the special case to build on a ColdFire platform under # the uClinux kernel. Tested on a MCF4249C3 board. if test "$1" = "--build-coldfire"; then tmp=`dirname $0` tsdir=`cd "$tmp"; cd ..; pwd` shift if [ $# -lt 1 ]; then echo "usage: autogen.sh --build-coldfire " >&2 exit 1 fi crossdir="$1" shift host=m68k-elf crossprefix=${host}- if [ ! -f $tsdir/scripts/config.guess ]; then echo "$tsdir/scripts/config.guess not found" >&2 exit 1 fi build=`$tsdir/scripts/config.guess` if [ -f "$tsdir/config.log" ]; then if ! head $tsdir/config.log | grep m68k-elf >/dev/null; then echo "Pease run a 'make distclean' first" >&2 exit 1 fi fi crossbindir=$crossdir/bin CC=${crossbindir}/${crossprefix}gcc CPP=${crossbindir}/cpp AR=${crossbindir}/${crossprefix}ar RANLIB=${crossbindir}/${crossprefix}ranlib CFLAGS="-Os -g -fomit-frame-pointer" CFLAGS="$CFLAGS -m5307 -DCONFIG_COLDFIRE" CFLAGS="$CFLAGS -Dlinux -D__linux__ -Dunix -D__uClinux__ -DEMBED" CFLAGS="$CFLAGS -fno-builtin -msep-data" LDFLAGS="-Wl,-elf2flt -Wl,-move-rodata -nostartfiles" LDFLAGS="$LDFLAGS ${crossdir}/m68k-elf/lib/crt0.o" LIBS="-lc" disable_foo_tests="" if [ -n "$lib_config_files" ]; then for i in $lib_config_files; do j=`echo $i | tr '[a-z-]' '[A-Z_]'` eval "$j=${crossbindir}/$i" export $j disable_foo_tests="$disable_foo_tests --disable-`echo $i| \ sed 's,-config$,,'`-test" if [ ! -f "${crossbindir}/$i" ]; then echo "$i not installed for ColdFire" >&2 DIE=yes fi done fi [ $DIE = yes ] && exit 1 $tsdir/configure --build=${build} --host=${host} \ ${disable_foo_tests} \ --disable-dynload \ --disable-exec \ --disable-photo-viewers \ --disable-keyserver-helpers \ --disable-ldap \ --disable-mailto \ --disable-largefile \ --disable-asm \ --disable-nls $* \ CC="$CC" CPP="$CPP" AR="$AR" RANLIB="$RANLIB" \ CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" LIBS="$LIBS" exit $? fi # This is the special case to build on a ColdFire platform under # the uClinux kernel with uClinux-dist. Tested on a MCF4249C3 board. if test "$1" = "--build-uclinux"; then tmp=`dirname $0` tsdir=`cd "$tmp"; cd ..; pwd` shift if [ ! -f $tsdir/scripts/config.guess ]; then echo "$tsdir/scripts/config.guess not found" >&2 exit 1 fi build=`$tsdir/scripts/config.guess` host=m68k-elf if [ -f "$tsdir/config.log" ]; then if ! head $tsdir/config.log | grep m68k-elf >/dev/null; then echo "Please run a 'make distclean' first" >&2 exit 1 fi fi $tsdir/configure --build=${build} --host=${host} \ ${disable_foo_tests} \ --disable-dynload \ --disable-exec \ --disable-photo-viewers \ --disable-keyserver-helpers \ --disable-ldap \ --disable-mailto \ --disable-largefile \ --disable-asm \ --disable-nls $* \ CC="$CC" CPP="$CPP" AR="$AR" RANLIB="$RANLIB" \ CFLAGS="$CFLAGS" LDFLAGS="$LDFLAGS" LIBS="$LDLIBS" exit $? fi # Grep the required versions from configure.ac autoconf_vers=`sed -n '/^AC_PREREQ(/ { s/^.*(\(.*\))/\1/p q }' ${configure_ac}` autoconf_vers_num=`echo "$autoconf_vers" | cvtver` automake_vers=`sed -n '/^min_automake_version=/ { s/^.*="\(.*\)"/\1/p q }' ${configure_ac}` automake_vers_num=`echo "$automake_vers" | cvtver` gettext_vers=`sed -n '/^AM_GNU_GETTEXT_VERSION(/ { s/^.*(\(.*\))/\1/p q }' ${configure_ac}` gettext_vers_num=`echo "$gettext_vers" | cvtver` if [ -z "$autoconf_vers" -o -z "$automake_vers" -o -z "$gettext_vers" ] then echo "**Error**: version information not found in "\`${configure_ac}\'"." >&2 exit 1 fi if check_version $AUTOCONF $autoconf_vers_num $autoconf_vers ; then check_version $AUTOHEADER $autoconf_vers_num $autoconf_vers autoconf fi if check_version $AUTOMAKE $automake_vers_num $automake_vers; then check_version $ACLOCAL $automake_vers_num $automake_vers automake fi if check_version $GETTEXT $gettext_vers_num $gettext_vers; then check_version $MSGMERGE $gettext_vers_num $gettext_vers gettext fi if test "$DIE" = "yes"; then cat <&2 *** Activating trailing whitespace git pre-commit hook. *** For more information see this thread: http://mail.gnome.org/archives/desktop-devel-list/2009-May/msg00084.html To deactivate this pre-commit hook again move .git/hooks/pre-commit and .git/hooks/pre-commit.sample out of the way. EOF cp -av .git/hooks/pre-commit.sample .git/hooks/pre-commit chmod +x .git/hooks/pre-commit fi if [ -f scripts/git-hooks/commit-msg -a ! -f .git/hooks/commit-msg ] ; then cat <&2 *** Activating commit log message check hook. *** EOF cp -av scripts/git-hooks/commit-msg .git/hooks/commit-msg chmod +x .git/hooks/commit-msg fi tmp=$(git config --get filter.cleanpo.clean) if [ "$tmp" != "awk '/^\"POT-Creation-Date:/&&!s{s=1;next};!/^#: /{print}'" ] then echo "*** Adding GIT filter.cleanpo.clean configuration." >&2 git config --add filter.cleanpo.clean \ "awk '/^\"POT-Creation-Date:/&&!s{s=1;next};!/^#: /{print}'" fi fi echo "Running aclocal -I m4 ${ACLOCAL_FLAGS:+$ACLOCAL_FLAGS }..." $ACLOCAL -I m4 $ACLOCAL_FLAGS echo "Running autoheader..." $AUTOHEADER echo "Running automake --gnu --add-missing..." $AUTOMAKE --gnu --add-missing echo "Running autoconf..." $AUTOCONF echo "You may now run ./configure --enable-maintainer-mode && make " gnupg-1.4.20/scripts/distfiles0000644000175000017500000000011012635262326013236 00000000000000mkdiff build-w32 gnupg.spec.in autogen.sh mk-w32-dist w32installer.nsi gnupg-1.4.20/scripts/mk-w32-dist0000755000175000017500000001752012635262326013251 00000000000000#!/bin/sh # # Copyright (C) 2000, 2001, 2002, 2004, 2005, # 2012 Free Software Foundation, Inc. # # This file is free software; as a special exception the author gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY, to the extent permitted by law; without even the # implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. set -e PGM="mk-w32-dist" [ -z "$w32root" ] && w32root="$HOME/w32root" # Windows uses an internal build number. We use the last day of the # year concatenated with the hour. for it. If it happens that a new # release of the same version is to be made in the next year, the # build number must be given manually by adding the appropriate number # of days. if [ "$1" = "--build-number" -a -n "$2" ]; then build_number="$2" shift shift else build_number=$(date -u '+%j%H' | sed 's/^0*\(.*\)/\1/') fi if [ "$1" = "--iconv-dir" -a -n "$2" ]; then iconvdir="$2" shift shift else iconvdir="${w32root}/share/gnupg-1-extra/iconv" fi if [ $# -lt 1 -o $# -gt 2 -o "$1" = "--help" ]; then echo "usage: $PGM [options] TARBALL [PATCHFILE]" >&2 echo " Options:" >&2 echo " --build-number N Windows build number" >&2 echo " --iconv-dir DIR Directory with inconv files" >&2 exit 1 fi if [ ! -d "$iconvdir" ]; then echo "$PGM: iconv directory does not exists (use option --iconv-dir)" >&2 exit 1 fi ( set +e cd "${iconvdir}" cat </dev/null 44f7289042b71631acac29b2f143330d2da2479e COPYING.LIB 3f4262714a3b508cf20428f046d511f7bfb9fd89 README.iconv a21c860b81ed158e91b2b921b752f48fda6d6f1e iconv.dll EOF if [ $? != 0 ]; then echo "$PGM: iconv files are not available or not correct" >&2 exit 1 fi set -e ) here="$(pwd)" builddir=w32-build-root tarball="$1" patchfile="$2" if [ ! -f "$tarball" ]; then echo "$PGM: tarball does not exist" >&2 exit 1 fi [ "$(echo "$tarball" | head -c 1)" != "/" ] && tarball="$(pwd)/$tarball" if [ -n "$patchfile" -a ! -f "$patchfile" ]; then echo "$PGM: patchfile does not exist" >&2 exit 1 fi if ! makensis -version >/dev/null 2>&1 ; then echo "$PGM: error: makensis is not installed" >&2 exit 1 fi if i686-w64-mingw32-strip --version >/dev/null 2>&1 ; then STRIP=i686-w64-mingw32-strip elif i586-mingw32msvc-strip --version >/dev/null 2>&1 ; then STRIP=i586-mingw32msvc-strip else echo "$PGM: error: strip tool not found" >&2 exit 1 fi echo "tarball: $tarball" >&2 version="$(echo "$tarball" | sed 's,.*/gnupg-\(.*\)\.tar\.gz$,\1,')" prod_version=$(echo "$version"|awk -F'[^0-9]' '{print $1 "." $2 "." $3 }') prod_version="${prod_version}.${build_number}" echo "version: $version ($prod_version)" >&2 [ -n "$patchfile" ] && echo "patchfile: $patchfile" >&2 echo "workdir: $builddir" >&2 echo "preparing work directory ..." >&2 [ -d "$builddir" ] && rm -rf "$builddir" mkdir "$builddir" cd "$builddir" mkdir dist-w32 echo "unpacking tarball ..." >&2 tar xzf "$tarball" cd gnupg-"$version" if [ -n "$patchfile" ]; then echo "applying patchfile ..." >&2 patch -p1 -t < "$patchfile" fi echo "running configure ..." >&2 ./autogen.sh --build-w32 --silent echo "running make ..." >&2 make -s cd ../dist-w32 srcdir="../gnupg-$version" bindir="../gnupg-$version" # A function to return a plain ASCII (or Latin-1) encoded description # text for a language identifier. We need this to display the list of # available languages in the installer. NSIS does not support utf-8 # so we need to standardize on one character set. Note that this # script itself is written in utf-8 but the resulting file will get # converted to Latin-1 get_langname () { case "$1" in be) r="Belarusian"; ;; ca) r="Català"; ;; cs) r="Cesky"; ;; da) r="Danish"; ;; de) r="Deutsch"; ;; el) r="Greek"; ;; en|en@*) r="English"; ;; eo) r="Esperanto"; ;; es) r="Español"; ;; et) r="Eesti keel"; ;; fi) r="Suomi"; ;; fr) r="Français"; ;; gl) r="Galician"; ;; hu) r="Magyar"; ;; id) r="Indonesian"; ;; it) r="Italiano"; ;; ja) r="Japanese"; ;; pl) r="Polski"; ;; pt) r="Português"; ;; pt_BR) r="Português (do Brasil)"; ;; ro) r="Romana"; ;; ru) r="Russian"; ;; sk) r="Slovensky"; ;; sv) r="Svenska"; ;; tr) r="Türkçe"; ;; uk) r="Ukrainian"; ;; zh_CN) r="Chinese (simplified)"; ;; zh_TW) r="Chinese (traditional)"; ;; *) r="" ;; esac echo "$r" } echo "copying files ..." >&2 cp ${bindir}/g10/gpg.exe gpg.exe $STRIP gpg.exe cp ${bindir}/g10/gpgv.exe gpgv.exe $STRIP gpgv.exe for name in hkp curl ldap finger; do cp ${bindir}/keyserver/gpgkeys_$name.exe gpgkeys_$name.exe $STRIP gpgkeys_$name.exe done cp ${bindir}/tools/gpgsplit.exe gpgsplit.exe $STRIP gpgsplit.exe man -Tlatin1 -l ${srcdir}/doc/gpg.1 | sed `printf "s/_\b//g;s/\b.//g"` >gpg.man todos gpg.man man -Tlatin1 -l ${srcdir}/doc/gpgv.1 | sed `printf "s/_\b//g;s/\b.//g"` >gpgv.man todos gpgv.man man -Tlatin1 -l ${srcdir}/doc/gnupg.7 | sed `printf "s/_\b//g;s/\b.//g"` >gnupg.man todos gnupg.man for i in README COPYING NEWS; do cp ${srcdir}/$i $i.txt todos $i.txt done cp ${srcdir}/doc/README.W32 README-W32.txt todos README-W32.txt if [ -n "$patchfile" ]; then echo "copying patch file ..." >&2 cp $patchfile patches.diff patches_defs="-DWITH_PATCHES" fi echo "converting MO files ..." >&2 # We must distribute the MO files in UTF-8, the conversion is done by # gpg at runtime. To include English at the right position in the list we # need a special case. langlist="" langdesclist="" for i in `(ls ${srcdir}/po/*.po; echo ${srcdir}/po/en.po) | sort`; do lang=$(basename $i .po) if [ $lang != "en" ]; then grep -s $lang ${srcdir}/po/LINGUAS >/dev/null || continue [ -f$lang.mo -a $lang.mo -nt $i ] && continue fromset=`sed -n '/^"Content-Type:/ s/.*charset=\([a-zA-Z0-9_-]*\).*/\1/p' $i` case "$fromset" in utf8|utf-8|UTF8|UTF-8) echo "$lang: keeping $fromset" >&2 msgfmt --output-file=$lang.mo $i ;; *) echo "$lang: converting from $fromset to utf-8" >&2 iconv --silent --from-code=$fromset --to-code=utf-8 < $i | \ sed "/^\"Content-Type:/ s/charset=[a-zA-Z0-9_-]*/charset=utf-8/"|\ msgfmt --output-file=$lang.mo - ;; esac fi langlist="$langlist $lang" langname="`get_langname $lang`" [ -n "$langdesclist" ] && langdesclist="${langdesclist}|" langdesclist="${langdesclist}${lang} - ${langname}" done # Create the option file for use with the NSIS installer. cat <opt.ini [Settings] NumFields=1 [Field 1] Type=DropList Left=0 Right=130 Top=20 Bottom=100 ListItems="$langdesclist" EOF src_defs= buildinfo="`date -u '+%Y-%m-%d %H:%M UTC'`" echo "copying iconv ..." >&2 cp "${iconvdir}/iconv.dll" iconv.dll for i in COPYING.LIB README.iconv; do cp ${iconvdir}/$i $i.txt todos $i.txt done # Now run the installer echo "invoking installer as:" echo makensis -v0 -nocd -DVERSION="${version}" \ -DPROD_VERSION="${prod_version}" \ -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \ ${patches_defs} ${srcdir}/scripts/w32installer.nsi BUILDINFO=$buildinfo makensis -v0 -nocd -DVERSION="${version}" \ -DPROD_VERSION="${prod_version}" \ -DGNUPG_SRCDIR="${srcdir}" ${winpt_defs} ${src_defs} \ ${patches_defs} ${srcdir}/scripts/w32installer.nsi mv gnupg-w32cli-${version}.exe "${here}"/ cd "${here}" echo "gnupg-w32cli-${version}.exe ready." >&2 gnupg-1.4.20/scripts/config.guess0000755000175000017500000012355012635262326013663 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-03-23' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: gnupg-1.4.20/intl/0000755000175000017500000000000012635457216010700 500000000000000gnupg-1.4.20/intl/verify.h0000644000175000017500000002541312635262326012276 00000000000000/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2014 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. This is supported by GCC 4.6.0 and later, in C mode, and its use here generates easier-to-read diagnostics when verify (R) fails. Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. This will likely be supported by future GCC versions, in C++ mode. Use this only with GCC. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ && !defined __cplusplus) # define _GL_HAVE__STATIC_ASSERT 1 #endif /* The condition (99 < __GNUC__) is temporary, until we know about the first G++ release that supports static_assert. */ #if (99 < __GNUC__) && defined __cplusplus # define _GL_HAVE_STATIC_ASSERT 1 #endif /* FreeBSD 9.1 , included by and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE_STATIC_ASSERT # include # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and verify() is used within a function body; but inside a function, you can always arrange to use verify_expr() instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #ifdef _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY _Static_assert #else # define _GL_VERIFY(R, DIAGNOSTIC) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H # if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert # define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) # endif # if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif #endif /* @assert.h omit start@ */ /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_true (R) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time, as an integer constant expression. Return 1. This is equivalent to verify_expr (R, 1). verify_true is obsolescent; please use verify_expr instead. */ #define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. */ #define verify(R) _GL_VERIFY (R, "verify (" #R ")") #ifndef __has_builtin # define __has_builtin(x) 0 #endif /* Assume that R always holds. This lets the compiler optimize accordingly. R should not have side-effects; it may or may not be evaluated. Behavior is undefined if R is false. */ #if (__has_builtin (__builtin_unreachable) \ || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif (defined lint \ && (__has_builtin (__builtin_trap) \ || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))) /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer when 'assume' silences warnings even with older GCCs. */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else # define assume(R) ((void) (0 && (R))) #endif /* @assert.h omit end@ */ #endif gnupg-1.4.20/intl/xsize.c0000644000175000017500000000011612635262326012120 00000000000000#include #define XSIZE_INLINE _GL_EXTERN_INLINE #include "xsize.h" gnupg-1.4.20/intl/libintl.rc0000644000175000017500000000312612635262326012601 00000000000000/* Resources for intl.dll */ #include VS_VERSION_INFO VERSIONINFO FILEVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0 PRODUCTVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0 FILEFLAGSMASK 0x3fL /* VS_FFI_FILEFLAGSMASK */ #ifdef _DEBUG FILEFLAGS 0x1L /* VS_FF_DEBUG */ #else FILEFLAGS 0x0L #endif FILEOS 0x10004L /* VOS_DOS_WINDOWS32 */ FILETYPE 0x2L /* VFT_DLL */ FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "04090000" /* Lang = US English, Charset = ASCII */ BEGIN VALUE "Comments", "This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see .\0" VALUE "CompanyName", "Free Software Foundation\0" VALUE "FileDescription", "LGPLed libintl for Windows NT/2000/XP/Vista/7 and Windows 95/98/ME\0" VALUE "FileVersion", PACKAGE_VERSION_STRING "\0" VALUE "InternalName", "intl.dll\0" VALUE "LegalCopyright", "Copyright (C) 1995-2010\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "intl.dll\0" VALUE "ProductName", "libintl: accessing NLS message catalogs\0" VALUE "ProductVersion", PACKAGE_VERSION_STRING "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 0 /* US English, ASCII */ END END gnupg-1.4.20/intl/ref-add.sin0000644000175000017500000000200612635262326012627 00000000000000# Add this package to a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// ta :a s/ @PACKAGE@ / @PACKAGE@ / tb s/ $/ @PACKAGE@ / :b s/^/# Packages using this file:/ } gnupg-1.4.20/intl/loadinfo.h0000644000175000017500000001201612635262326012560 00000000000000/* Copyright (C) 1996-1999, 2000-2003, 2005-2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _LOADINFO_H #define _LOADINFO_H 1 /* Declarations of locale dependent catalog lookup functions. Implemented in localealias.c Possibly replace a locale name by another. explodename.c Split a locale name into its various fields. l10nflist.c Generate a list of filenames of possible message catalogs. finddomain.c Find and open the relevant message catalogs. The main function _nl_find_domain() in finddomain.c is declared in gettextP.h. */ #ifndef internal_function # define internal_function #endif #ifndef LIBINTL_DLL_EXPORTED # define LIBINTL_DLL_EXPORTED #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif /* Separator in PATH like lists of pathnames. */ #if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* Encoding of locale name parts. */ #define XPG_NORM_CODESET 1 #define XPG_CODESET 2 #define XPG_TERRITORY 4 #define XPG_MODIFIER 8 struct loaded_l10nfile { const char *filename; int decided; const void *data; struct loaded_l10nfile *next; struct loaded_l10nfile *successor[1]; }; /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ extern const char *_nl_normalize_codeset (const char *codeset, size_t name_len); /* Lookup a locale dependent file. *L10NFILE_LIST denotes a pool of lookup results of locale dependent files of the same kind, sorted in decreasing order of ->filename. DIRLIST and DIRLIST_LEN are an argz list of directories in which to look, containing at least one directory (i.e. DIRLIST_LEN > 0). MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER are the pieces of the locale name, as produced by _nl_explode_name(). FILENAME is the filename suffix. The return value is the lookup result, either found in *L10NFILE_LIST, or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL. If the return value is non-NULL, it is added to *L10NFILE_LIST, and its ->next field denotes the chaining inside *L10NFILE_LIST, and furthermore its ->successor[] field contains a list of other lookup results from which this lookup result inherits. */ extern struct loaded_l10nfile * _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *filename, int do_allocate); /* Lookup the real locale name for a locale alias NAME, or NULL if NAME is not a locale alias (but possibly a real locale name). The return value is statically allocated and must not be freed. */ /* Part of the libintl ABI only for the sake of the gettext.m4 macro. */ extern LIBINTL_DLL_EXPORTED const char *_nl_expand_alias (const char *name); /* Split a locale name NAME into its pieces: language, modifier, territory, codeset. NAME gets destructively modified: NUL bytes are inserted here and there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY, *CODESET gets assigned either a pointer into the old NAME string, or NULL. *NORMALIZED_CODESET gets assigned the expanded *CODESET, if it is different from *CODESET; this one is dynamically allocated and has to be freed by the caller. The return value is a bitmask, where each bit corresponds to one filled-in value: XPG_MODIFIER for *MODIFIER, XPG_TERRITORY for *TERRITORY, XPG_CODESET for *CODESET, XPG_NORM_CODESET for *NORMALIZED_CODESET. */ extern int _nl_explode_name (char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset); #endif /* loadinfo.h */ gnupg-1.4.20/intl/locale.alias0000644000175000017500000000501712635262326013071 00000000000000# Locale name alias data base. # Copyright (C) 1996-2001,2003,2007 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # The format of this file is the same as for the corresponding file of # the X Window System, which normally can be found in # /usr/lib/X11/locale/locale.alias # A single line contains two fields: an alias and a substitution value. # All entries are case independent. # Note: This file is obsolete and is kept around for the time being for # backward compatibility. Nobody should rely on the names defined here. # Locales should always be specified by their full name. # Packages using this file: bokmal nb_NO.ISO-8859-1 bokm�l nb_NO.ISO-8859-1 catalan ca_ES.ISO-8859-1 croatian hr_HR.ISO-8859-2 czech cs_CZ.ISO-8859-2 danish da_DK.ISO-8859-1 dansk da_DK.ISO-8859-1 deutsch de_DE.ISO-8859-1 dutch nl_NL.ISO-8859-1 eesti et_EE.ISO-8859-1 estonian et_EE.ISO-8859-1 finnish fi_FI.ISO-8859-1 fran�ais fr_FR.ISO-8859-1 french fr_FR.ISO-8859-1 galego gl_ES.ISO-8859-1 galician gl_ES.ISO-8859-1 german de_DE.ISO-8859-1 greek el_GR.ISO-8859-7 hebrew he_IL.ISO-8859-8 hrvatski hr_HR.ISO-8859-2 hungarian hu_HU.ISO-8859-2 icelandic is_IS.ISO-8859-1 italian it_IT.ISO-8859-1 japanese ja_JP.eucJP japanese.euc ja_JP.eucJP ja_JP ja_JP.eucJP ja_JP.ujis ja_JP.eucJP japanese.sjis ja_JP.SJIS korean ko_KR.eucKR korean.euc ko_KR.eucKR ko_KR ko_KR.eucKR lithuanian lt_LT.ISO-8859-13 no_NO nb_NO.ISO-8859-1 no_NO.ISO-8859-1 nb_NO.ISO-8859-1 norwegian nb_NO.ISO-8859-1 nynorsk nn_NO.ISO-8859-1 polish pl_PL.ISO-8859-2 portuguese pt_PT.ISO-8859-1 romanian ro_RO.ISO-8859-2 russian ru_RU.ISO-8859-5 slovak sk_SK.ISO-8859-2 slovene sl_SI.ISO-8859-2 slovenian sl_SI.ISO-8859-2 spanish es_ES.ISO-8859-1 swedish sv_SE.ISO-8859-1 thai th_TH.TIS-620 turkish tr_TR.ISO-8859-9 gnupg-1.4.20/intl/explodename.c0000644000175000017500000000645112635262326013267 00000000000000/* Copyright (C) 1995-1998, 2000-2001, 2003, 2005, 2007 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ /* Split a locale name NAME into a leading language part and all the rest. Return a pointer to the first character after the language, i.e. to the first byte of the rest. */ static char *_nl_find_language (const char *name); static char * _nl_find_language (const char *name) { while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '.') ++name; return (char *) name; } int _nl_explode_name (char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset) { char *cp; int mask; *modifier = NULL; *territory = NULL; *codeset = NULL; *normalized_codeset = NULL; /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_', '.', and `@'. */ mask = 0; *language = cp = name; cp = _nl_find_language (*language); if (*language == cp) /* This does not make sense: language has to be specified. Use this entry as it is without exploding. Perhaps it is an alias. */ cp = strchr (*language, '\0'); else { if (cp[0] == '_') { /* Next is the territory. */ cp[0] = '\0'; *territory = ++cp; while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@') ++cp; mask |= XPG_TERRITORY; } if (cp[0] == '.') { /* Next is the codeset. */ cp[0] = '\0'; *codeset = ++cp; while (cp[0] != '\0' && cp[0] != '@') ++cp; mask |= XPG_CODESET; if (*codeset != cp && (*codeset)[0] != '\0') { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); if (*normalized_codeset == NULL) return -1; else if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; } } } if (cp[0] == '@') { /* Next is the modifier. */ cp[0] = '\0'; *modifier = ++cp; if (cp[0] != '\0') mask |= XPG_MODIFIER; } if (*territory != NULL && (*territory)[0] == '\0') mask &= ~XPG_TERRITORY; if (*codeset != NULL && (*codeset)[0] == '\0') mask &= ~XPG_CODESET; return mask; } gnupg-1.4.20/intl/localcharset.c0000644000175000017500000004522012635262326013427 00000000000000/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006, 2008-2014 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Bruno Haible . */ #include /* Specification. */ #include "localcharset.h" #include #include #include #include #include #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET # define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ #endif #if defined _WIN32 || defined __WIN32__ # define WINDOWS_NATIVE # include #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # ifndef OS2 # define OS2 # endif #endif #if !defined WINDOWS_NATIVE # include # if HAVE_LANGINFO_CODESET # include # else # if 0 /* see comment below */ # include # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include # endif #elif defined WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include #endif #if defined OS2 # define INCL_DOS # include #endif /* For MB_CUR_MAX_L */ #if defined DARWIN7 # include #endif #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) #endif /* Get LIBDIR. */ #ifndef LIBDIR # include "configmake.h" #endif /* Define O_NOFOLLOW to 0 on platforms where it does not exist. */ #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #endif #ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' #endif #ifndef ISSLASH # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) #endif #if HAVE_DECL_GETC_UNLOCKED # undef getc # define getc getc_unlocked #endif /* The following static variable is declared 'volatile' to avoid a possible multithread problem in the function get_charset_aliases. If we are running in a threaded environment, and if two threads initialize 'charset_aliases' simultaneously, both will produce the same value, and everything will be ok if the two assignments to 'charset_aliases' are atomic. But I don't know what will happen if the two assignments mix. */ #if __STDC__ != 1 # define volatile /* empty */ #endif /* Pointer to the contents of the charset.alias file, if it has already been read, else NULL. Its format is: ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ static const char * volatile charset_aliases; /* Return a pointer to the contents of the charset.alias file. */ static const char * get_charset_aliases (void) { const char *cp; cp = charset_aliases; if (cp == NULL) { #if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__) const char *dir; const char *base = "charset.alias"; char *file_name; /* Make it possible to override the charset.alias location. This is necessary for running the testsuite before "make install". */ dir = getenv ("CHARSETALIASDIR"); if (dir == NULL || dir[0] == '\0') dir = relocate (LIBDIR); /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); size_t base_len = strlen (base); int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); file_name = (char *) malloc (dir_len + add_slash + base_len + 1); if (file_name != NULL) { memcpy (file_name, dir, dir_len); if (add_slash) file_name[dir_len] = DIRECTORY_SEPARATOR; memcpy (file_name + dir_len + add_slash, base, base_len + 1); } } if (file_name == NULL) /* Out of memory. Treat the file as empty. */ cp = ""; else { int fd; /* Open the file. Reject symbolic links on platforms that support O_NOFOLLOW. This is a security feature. Without it, an attacker could retrieve parts of the contents (namely, the tail of the first line that starts with "* ") of an arbitrary file by placing a symbolic link to that file under the name "charset.alias" in some writable directory and defining the environment variable CHARSETALIASDIR to point to that directory. */ fd = open (file_name, O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0)); if (fd < 0) /* File not found. Treat it as empty. */ cp = ""; else { FILE *fp; fp = fdopen (fd, "r"); if (fp == NULL) { /* Out of memory. Treat the file as empty. */ close (fd); cp = ""; } else { /* Parse the file's contents. */ char *res_ptr = NULL; size_t res_size = 0; for (;;) { int c; char buf1[50+1]; char buf2[50+1]; size_t l1, l2; char *old_res_ptr; c = getc (fp); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { /* Skip comment, to end of line. */ do c = getc (fp); while (!(c == EOF || c == '\n')); if (c == EOF) break; continue; } ungetc (c, fp); if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) break; l1 = strlen (buf1); l2 = strlen (buf2); old_res_ptr = res_ptr; if (res_size == 0) { res_size = l1 + 1 + l2 + 1; res_ptr = (char *) malloc (res_size + 1); } else { res_size += l1 + 1 + l2 + 1; res_ptr = (char *) realloc (res_ptr, res_size + 1); } if (res_ptr == NULL) { /* Out of memory. */ res_size = 0; free (old_res_ptr); break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); strcpy (res_ptr + res_size - (l2 + 1), buf2); } fclose (fp); if (res_size == 0) cp = ""; else { *(res_ptr + res_size) = '\0'; cp = res_ptr; } } } free (file_name); } #else # if defined DARWIN7 /* To avoid the trouble of installing a file that is shared by many GNU packages -- many packaging systems have problems with this --, simply inline the aliases here. */ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" "ISO8859-2" "\0" "ISO-8859-2" "\0" "ISO8859-4" "\0" "ISO-8859-4" "\0" "ISO8859-5" "\0" "ISO-8859-5" "\0" "ISO8859-7" "\0" "ISO-8859-7" "\0" "ISO8859-9" "\0" "ISO-8859-9" "\0" "ISO8859-13" "\0" "ISO-8859-13" "\0" "ISO8859-15" "\0" "ISO-8859-15" "\0" "KOI8-R" "\0" "KOI8-R" "\0" "KOI8-U" "\0" "KOI8-U" "\0" "CP866" "\0" "CP866" "\0" "CP949" "\0" "CP949" "\0" "CP1131" "\0" "CP1131" "\0" "CP1251" "\0" "CP1251" "\0" "eucCN" "\0" "GB2312" "\0" "GB2312" "\0" "GB2312" "\0" "eucJP" "\0" "EUC-JP" "\0" "eucKR" "\0" "EUC-KR" "\0" "Big5" "\0" "BIG5" "\0" "Big5HKSCS" "\0" "BIG5-HKSCS" "\0" "GBK" "\0" "GBK" "\0" "GB18030" "\0" "GB18030" "\0" "SJIS" "\0" "SHIFT_JIS" "\0" "ARMSCII-8" "\0" "ARMSCII-8" "\0" "PT154" "\0" "PT154" "\0" /*"ISCII-DEV" "\0" "?" "\0"*/ "*" "\0" "UTF-8" "\0"; # endif # if defined VMS /* To avoid the troubles of an extra file charset.alias_vms in the sources of many GNU packages, simply inline the aliases here. */ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation "Compaq C Run-Time Library Reference Manual for OpenVMS systems" section 10.7 "Handling Different Character Sets". */ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" "ISO8859-2" "\0" "ISO-8859-2" "\0" "ISO8859-5" "\0" "ISO-8859-5" "\0" "ISO8859-7" "\0" "ISO-8859-7" "\0" "ISO8859-8" "\0" "ISO-8859-8" "\0" "ISO8859-9" "\0" "ISO-8859-9" "\0" /* Japanese */ "eucJP" "\0" "EUC-JP" "\0" "SJIS" "\0" "SHIFT_JIS" "\0" "DECKANJI" "\0" "DEC-KANJI" "\0" "SDECKANJI" "\0" "EUC-JP" "\0" /* Chinese */ "eucTW" "\0" "EUC-TW" "\0" "DECHANYU" "\0" "DEC-HANYU" "\0" "DECHANZI" "\0" "GB2312" "\0" /* Korean */ "DECKOREAN" "\0" "EUC-KR" "\0"; # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* To avoid the troubles of installing a separate file in the same directory as the DLL and of retrieving the DLL's directory at runtime, simply inline the aliases here. */ cp = "CP936" "\0" "GBK" "\0" "CP1361" "\0" "JOHAB" "\0" "CP20127" "\0" "ASCII" "\0" "CP20866" "\0" "KOI8-R" "\0" "CP20936" "\0" "GB2312" "\0" "CP21866" "\0" "KOI8-RU" "\0" "CP28591" "\0" "ISO-8859-1" "\0" "CP28592" "\0" "ISO-8859-2" "\0" "CP28593" "\0" "ISO-8859-3" "\0" "CP28594" "\0" "ISO-8859-4" "\0" "CP28595" "\0" "ISO-8859-5" "\0" "CP28596" "\0" "ISO-8859-6" "\0" "CP28597" "\0" "ISO-8859-7" "\0" "CP28598" "\0" "ISO-8859-8" "\0" "CP28599" "\0" "ISO-8859-9" "\0" "CP28605" "\0" "ISO-8859-15" "\0" "CP38598" "\0" "ISO-8859-8" "\0" "CP51932" "\0" "EUC-JP" "\0" "CP51936" "\0" "GB2312" "\0" "CP51949" "\0" "EUC-KR" "\0" "CP51950" "\0" "EUC-TW" "\0" "CP54936" "\0" "GB18030" "\0" "CP65001" "\0" "UTF-8" "\0"; # endif #endif charset_aliases = cp; } return cp; } /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset (void) { const char *codeset; const char *aliases; #if !(defined WINDOWS_NATIVE || defined OS2) # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # ifdef __CYGWIN__ /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always returns "US-ASCII". Return the suffix of the locale name from the environment variables (if present) or the codepage as a number. */ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { const char *locale; static char buf[2 + 10 + 1]; locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } } /* The Windows API has a function returning the locale's codepage as a number: GetACP(). This encoding is used by Cygwin, unless the user has set the environment variable CYGWIN=codepage:oem (which very few people do). Output directed to console windows needs to be converted (to GetOEMCP() if the console is using a raster font, or to GetConsoleOutputCP() if it is using a TrueType font). Cygwin does this conversion transparently (see winsup/cygwin/fhandler_console.cc), converting to GetConsoleOutputCP(). This leads to correct results, except when SetConsoleOutputCP has been called and a raster font is in use. */ sprintf (buf, "CP%u", GetACP ()); codeset = buf; } # endif # else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } } /* On some old systems, one used to set locale = "iso8859_1". On others, you set it to "language_COUNTRY.charset". In any case, we resolve it through the charset.alias file. */ codeset = locale; # endif #elif defined WINDOWS_NATIVE static char buf[2 + 10 + 1]; /* The Windows API has a function returning the locale's codepage as a number, but the value doesn't change according to what the 'setlocale' call specified. So we use it as a last resort, in case the string returned by 'setlocale' doesn't specify the codepage. */ char *current_locale = setlocale (LC_ALL, NULL); char *pdot; /* If they set different locales for different categories, 'setlocale' will return a semi-colon separated list of locale values. To make sure we use the correct one, we choose LC_CTYPE. */ if (strchr (current_locale, ';')) current_locale = setlocale (LC_CTYPE, NULL); pdot = strrchr (current_locale, '.'); if (pdot) sprintf (buf, "CP%s", pdot + 1); else { /* The Windows API has a function returning the locale's codepage as a number: GetACP(). When the output goes to a console window, it needs to be provided in GetOEMCP() encoding if the console is using a raster font, or in GetConsoleOutputCP() encoding if it is using a TrueType font. But in GUI programs and for output sent to files and pipes, GetACP() encoding is the best bet. */ sprintf (buf, "CP%u", GetACP ()); } codeset = buf; #elif defined OS2 const char *locale; static char buf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } /* Resolve through the charset.alias file. */ codeset = locale; } else { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { sprintf (buf, "CP%u", cp[0]); codeset = buf; } } #endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; /* Resolve alias. */ for (aliases = get_charset_aliases (); *aliases != '\0'; aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) if (strcmp (codeset, aliases) == 0 || (aliases[0] == '*' && aliases[1] == '\0')) { codeset = aliases + strlen (aliases) + 1; break; } /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; #ifdef DARWIN7 /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" (the default codeset) does not work when MB_CUR_MAX is 1. */ if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) codeset = "ASCII"; #endif return codeset; } gnupg-1.4.20/intl/threadlib.c0000644000175000017500000000360512635262326012722 00000000000000/* Multithreading primitives. Copyright (C) 2005-2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2005. */ #include /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # include # if PTHREAD_IN_USE_DETECTION_HARD /* The function to be executed by a dummy thread. */ static void * dummy_thread_func (void *arg) { return arg; } int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_t thread; if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) /* Thread creation failed. */ result = 0; else { /* Thread creation works. */ void *retval; if (pthread_join (thread, &retval) != 0) abort (); result = 1; } tested = 1; } return result; } # endif #endif /* ========================================================================= */ /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; gnupg-1.4.20/intl/eval-plural.h0000644000175000017500000000524512635262326013217 00000000000000/* Plural expression evaluation. Copyright (C) 2000-2003, 2007 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef STATIC #define STATIC static #endif /* Evaluate the plural expression and return an index value. */ STATIC unsigned long int internal_function plural_eval (const struct expression *pexp, unsigned long int n) { switch (pexp->nargs) { case 0: switch (pexp->operation) { case var: return n; case num: return pexp->val.num; default: break; } /* NOTREACHED */ break; case 1: { /* pexp->operation must be lnot. */ unsigned long int arg = plural_eval (pexp->val.args[0], n); return ! arg; } case 2: { unsigned long int leftarg = plural_eval (pexp->val.args[0], n); if (pexp->operation == lor) return leftarg || plural_eval (pexp->val.args[1], n); else if (pexp->operation == land) return leftarg && plural_eval (pexp->val.args[1], n); else { unsigned long int rightarg = plural_eval (pexp->val.args[1], n); switch (pexp->operation) { case mult: return leftarg * rightarg; case divide: #if !INTDIV0_RAISES_SIGFPE if (rightarg == 0) raise (SIGFPE); #endif return leftarg / rightarg; case module: #if !INTDIV0_RAISES_SIGFPE if (rightarg == 0) raise (SIGFPE); #endif return leftarg % rightarg; case plus: return leftarg + rightarg; case minus: return leftarg - rightarg; case less_than: return leftarg < rightarg; case greater_than: return leftarg > rightarg; case less_or_equal: return leftarg <= rightarg; case greater_or_equal: return leftarg >= rightarg; case equal: return leftarg == rightarg; case not_equal: return leftarg != rightarg; default: break; } } /* NOTREACHED */ break; } case 3: { /* pexp->operation must be qmop. */ unsigned long int boolarg = plural_eval (pexp->val.args[0], n); return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); } } /* NOTREACHED */ return 0; } gnupg-1.4.20/intl/os2compat.h0000644000175000017500000000272612635262326012703 00000000000000/* OS/2 compatibility defines. This file is intended to be included from config.h Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* When included from os2compat.h we need all the original definitions */ #ifndef OS2_AWARE #undef LIBDIR #define LIBDIR _nlos2_libdir extern char *_nlos2_libdir; #undef LOCALEDIR #define LOCALEDIR _nlos2_localedir extern char *_nlos2_localedir; #undef LOCALE_ALIAS_PATH #define LOCALE_ALIAS_PATH _nlos2_localealiaspath extern char *_nlos2_localealiaspath; #endif #undef HAVE_STRCASECMP #define HAVE_STRCASECMP 1 #define strcasecmp stricmp #define strncasecmp strnicmp /* We have our own getenv() which works even if library is compiled as DLL */ #define getenv _nl_getenv /* Older versions of gettext used -1 as the value of LC_MESSAGES */ #define LC_MESSAGES_COMPAT (-1) gnupg-1.4.20/intl/wprintf-parse.h0000644000175000017500000000510512635262326013567 00000000000000/* Parse printf format string. Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _WPRINTF_PARSE_H #define _WPRINTF_PARSE_H #if HAVE_FEATURES_H # include /* for __GLIBC__, __UCLIBC__ */ #endif #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 #if __GLIBC__ >= 2 && !defined __UCLIBC__ # define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ #endif /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* Number of directly allocated directives (no malloc() needed). */ #define N_DIRECT_ALLOC_DIRECTIVES 7 /* A parsed directive. */ typedef struct { const wchar_t* dir_start; const wchar_t* dir_end; int flags; const wchar_t* width_start; const wchar_t* width_end; size_t width_arg_index; const wchar_t* precision_start; const wchar_t* precision_end; size_t precision_arg_index; wchar_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } wchar_t_directive; /* A parsed format string. */ typedef struct { size_t count; wchar_t_directive *dir; size_t max_width_length; size_t max_precision_length; wchar_t_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } wchar_t_directives; /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #ifdef STATIC STATIC #else extern #endif int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a); #endif /* _WPRINTF_PARSE_H */ gnupg-1.4.20/intl/plural-exp.c0000644000175000017500000000763512635262326013064 00000000000000/* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003, 2005-2007 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "plural-exp.h" #if (defined __GNUC__ && !(__APPLE_CC__ > 1) && !defined __cplusplus) \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) /* These structs are the constant expression for the germanic plural form determination. It represents the expression "n != 1". */ static const struct expression plvar = { .nargs = 0, .operation = var, }; static const struct expression plone = { .nargs = 0, .operation = num, .val = { .num = 1 } }; struct expression GERMANIC_PLURAL = { .nargs = 2, .operation = not_equal, .val = { .args = { [0] = (struct expression *) &plvar, [1] = (struct expression *) &plone } } }; # define INIT_GERMANIC_PLURAL() #else /* For compilers without support for ISO C 99 struct/union initializers: Initialization at run-time. */ static struct expression plvar; static struct expression plone; struct expression GERMANIC_PLURAL; static void init_germanic_plural () { if (plone.val.num == 0) { plvar.nargs = 0; plvar.operation = var; plone.nargs = 0; plone.operation = num; plone.val.num = 1; GERMANIC_PLURAL.nargs = 2; GERMANIC_PLURAL.operation = not_equal; GERMANIC_PLURAL.val.args[0] = &plvar; GERMANIC_PLURAL.val.args[1] = &plone; } } # define INIT_GERMANIC_PLURAL() init_germanic_plural () #endif void internal_function EXTRACT_PLURAL_EXPRESSION (const char *nullentry, const struct expression **pluralp, unsigned long int *npluralsp) { if (nullentry != NULL) { const char *plural; const char *nplurals; plural = strstr (nullentry, "plural="); nplurals = strstr (nullentry, "nplurals="); if (plural == NULL || nplurals == NULL) goto no_plural; else { char *endp; unsigned long int n; struct parse_args args; /* First get the number. */ nplurals += 9; while (*nplurals != '\0' && isspace ((unsigned char) *nplurals)) ++nplurals; if (!(*nplurals >= '0' && *nplurals <= '9')) goto no_plural; #if defined HAVE_STRTOUL || defined _LIBC n = strtoul (nplurals, &endp, 10); #else for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) n = n * 10 + (*endp - '0'); #endif if (nplurals == endp) goto no_plural; *npluralsp = n; /* Due to the restrictions bison imposes onto the interface of the scanner function we have to put the input string and the result passed up from the parser into the same structure which address is passed down to the parser. */ plural += 7; args.cp = plural; if (PLURAL_PARSE (&args) != 0) goto no_plural; *pluralp = args.res; } } else { /* By default we are using the Germanic form: singular form only for `one', the plural form otherwise. Yes, this is also what English is using since English is a Germanic language. */ no_plural: INIT_GERMANIC_PLURAL (); *pluralp = &GERMANIC_PLURAL; *npluralsp = 2; } } gnupg-1.4.20/intl/ChangeLog-20110000644000175000017500000000054512635262326012753 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2006-11-27 GNU * Version 0.16.1 released. gnupg-1.4.20/intl/dngettext.c0000644000175000017500000000345112635262326012771 00000000000000/* Implementation of the dngettext(3) function. Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DNGETTEXT __dngettext # define DCNGETTEXT __dcngettext #else # define DNGETTEXT libintl_dngettext # define DCNGETTEXT libintl_dcngettext #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale and skip message according to the plural form. */ char * DNGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n) { return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dngettext, dngettext); #endif gnupg-1.4.20/intl/dcigettext.c0000644000175000017500000013474412635262326013141 00000000000000/* Implementation of the internal dcigettext function. Copyright (C) 1995-1999, 2000-2010, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #ifndef errno extern int errno; #endif #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include #ifdef _LIBC /* Guess whether integer division by zero raises signal SIGFPE. Set to 1 only if you know for sure. In case of doubt, set to 0. */ # if defined __alpha__ || defined __arm__ || defined __i386__ \ || defined __m68k__ || defined __s390__ # define INTDIV0_RAISES_SIGFPE 1 # else # define INTDIV0_RAISES_SIGFPE 0 # endif #endif #if !INTDIV0_RAISES_SIGFPE # include #endif #if defined HAVE_SYS_PARAM_H || defined _LIBC # include #endif #if !defined _LIBC # include "localcharset.h" #endif #include "gettextP.h" #include "plural-exp.h" #ifdef _LIBC # include #else # ifdef IN_LIBGLOCALE # include # endif # include "libgnuintl.h" #endif #include "hash-string.h" /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define_initialized __libc_rwlock_define_initialized # define gl_rwlock_rdlock __libc_rwlock_rdlock # define gl_rwlock_wrlock __libc_rwlock_wrlock # define gl_rwlock_unlock __libc_rwlock_unlock #else # include "lock.h" #endif /* Alignment of types. */ #if defined __GNUC__ && __GNUC__ >= 2 # define alignof(TYPE) __alignof__ (TYPE) #else # define alignof(TYPE) \ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define getcwd __getcwd # ifndef stpcpy # define stpcpy __stpcpy # endif # define tfind __tfind #else # if !defined HAVE_GETCWD char *getwd (); # define getcwd(buf, max) getwd (buf) # else # if VMS # define getcwd(buf, max) (getcwd) (buf, max, 0) # else char *getcwd (); # endif # endif # ifndef HAVE_STPCPY static char *stpcpy (char *dest, const char *src); # endif # ifndef HAVE_MEMPCPY static void *mempcpy (void *dest, const void *src, size_t n); # endif #endif /* Use a replacement if the system does not provide the `tsearch' function family. */ #if HAVE_TSEARCH || defined _LIBC # include #else # define tsearch libintl_tsearch # define tfind libintl_tfind # define tdelete libintl_tdelete # define twalk libintl_twalk # include "tsearch.h" #endif #ifdef _LIBC # define tsearch __tsearch #endif /* Amount to increase buffer size by in each try. */ #define PATH_INCR 32 /* The following is from pathmax.h. */ /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define PATH_MAX but might cause redefinition warnings when sys/param.h is later included (as on MORE/BSD 4.3). */ #if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) # include #endif #ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 255 #endif #if !defined PATH_MAX && defined _PC_PATH_MAX # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) #endif /* Don't include sys/param.h if it already has been. */ #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifndef PATH_MAX # define PATH_MAX _POSIX_PATH_MAX #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) #endif /* Whether to support different locales in different threads. */ #if defined _LIBC || HAVE_USELOCALE || defined IN_LIBGLOCALE # define HAVE_PER_THREAD_LOCALE #endif /* This is the type used for the search tree where known translations are stored. */ struct known_translation_t { /* Domain in which to search. */ const char *domainname; /* The category. */ int category; #ifdef HAVE_PER_THREAD_LOCALE /* Name of the relevant locale category, or "" for the global locale. */ const char *localename; #endif #ifdef IN_LIBGLOCALE /* The character encoding. */ const char *encoding; #endif /* State of the catalog counter at the point the string was found. */ int counter; /* Catalog where the string was found. */ struct loaded_l10nfile *domain; /* And finally the translation. */ const char *translation; size_t translation_length; /* Pointer to the string in question. */ union { char appended[ZERO]; /* used if domain != NULL */ const char *ptr; /* used if domain == NULL */ } msgid; }; gl_rwlock_define_initialized (static, tree_lock) /* Root of the search tree with known translations. */ static void *root; /* Function to compare two entries in the table of known translations. */ static int transcmp (const void *p1, const void *p2) { const struct known_translation_t *s1; const struct known_translation_t *s2; int result; s1 = (const struct known_translation_t *) p1; s2 = (const struct known_translation_t *) p2; result = strcmp (s1->domain != NULL ? s1->msgid.appended : s1->msgid.ptr, s2->domain != NULL ? s2->msgid.appended : s2->msgid.ptr); if (result == 0) { result = strcmp (s1->domainname, s2->domainname); if (result == 0) { #ifdef HAVE_PER_THREAD_LOCALE result = strcmp (s1->localename, s2->localename); if (result == 0) #endif { #ifdef IN_LIBGLOCALE result = strcmp (s1->encoding, s2->encoding); if (result == 0) #endif /* We compare the category last (though this is the cheapest operation) since it is hopefully always the same (namely LC_MESSAGES). */ result = s1->category - s2->category; } } } return result; } /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] attribute_hidden = "messages"; #ifndef IN_LIBGLOCALE /* Value used as the default domain for gettext(3). */ const char *_nl_current_default_domain attribute_hidden = _nl_default_default_domain; #endif /* Contains the default location of the message catalogs. */ #if defined __EMX__ extern const char _nl_default_dirname[]; #else # ifdef _LIBC extern const char _nl_default_dirname[]; libc_hidden_proto (_nl_default_dirname) # endif const char _nl_default_dirname[] = LOCALEDIR; # ifdef _LIBC libc_hidden_data_def (_nl_default_dirname) # endif #endif #ifndef IN_LIBGLOCALE /* List with bindings of specific domains created by bindtextdomain() calls. */ struct binding *_nl_domain_bindings; #endif /* Prototypes for local functions. */ static char *plural_lookup (struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len) internal_function; #ifdef IN_LIBGLOCALE static const char *guess_category_value (int category, const char *categoryname, const char *localename) internal_function; #else static const char *guess_category_value (int category, const char *categoryname) internal_function; #endif #ifdef _LIBC # include "../locale/localeinfo.h" # define category_to_name(category) \ _nl_category_names.str + _nl_category_name_idxs[category] #else static const char *category_to_name (int category) internal_function; #endif #if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE static const char *get_output_charset (struct binding *domainbinding) internal_function; #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define freea(p) /* nothing */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old->address); \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) # define freea(p) free (p) #endif /* have alloca */ #ifdef _LIBC /* List of blocks allocated for translations. */ typedef struct transmem_list { struct transmem_list *next; char data[ZERO]; } transmem_block_t; static struct transmem_list *transmem_list; #else typedef unsigned char transmem_block_t; #endif /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCIGETTEXT __dcigettext #else # define DCIGETTEXT libintl_dcigettext #endif /* Lock variable to protect the global data in the gettext implementation. */ gl_rwlock_define_initialized (, _nl_state_lock attribute_hidden) /* Checking whether the binaries runs SUID must be done and glibc provides easier methods therefore we make a difference here. */ #ifdef _LIBC # define ENABLE_SECURE __libc_enable_secure # define DETERMINE_SECURE #else # ifndef HAVE_GETUID # define getuid() 0 # endif # ifndef HAVE_GETGID # define getgid() 0 # endif # ifndef HAVE_GETEUID # define geteuid() getuid() # endif # ifndef HAVE_GETEGID # define getegid() getgid() # endif static int enable_secure; # define ENABLE_SECURE (enable_secure == 1) # define DETERMINE_SECURE \ if (enable_secure == 0) \ { \ if (getuid () != geteuid () || getgid () != getegid ()) \ enable_secure = 1; \ else \ enable_secure = -1; \ } #endif /* Get the function to evaluate the plural expression. */ #include "eval-plural.h" /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale and, if PLURAL is nonzero, search over string depending on the plural form determined by N. */ #ifdef IN_LIBGLOCALE char * gl_dcigettext (const char *domainname, const char *msgid1, const char *msgid2, int plural, unsigned long int n, int category, const char *localename, const char *encoding) #else char * DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, int plural, unsigned long int n, int category) #endif { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif struct loaded_l10nfile *domain; struct binding *binding; const char *categoryname; const char *categoryvalue; const char *dirname; char *xdomainname; char *single_locale; char *retval; size_t retlen; int saved_errno; struct known_translation_t search; struct known_translation_t **foundp = NULL; #if defined HAVE_PER_THREAD_LOCALE && !defined IN_LIBGLOCALE const char *localename; #endif size_t domainname_len; /* If no real MSGID is given return NULL. */ if (msgid1 == NULL) return NULL; #ifdef _LIBC if (category < 0 || category >= __LC_LAST || category == LC_ALL) /* Bogus. */ return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); #endif /* Preserve the `errno' value. */ saved_errno = errno; #ifdef _LIBC __libc_rwlock_define (extern, __libc_setlocale_lock attribute_hidden) __libc_rwlock_rdlock (__libc_setlocale_lock); #endif gl_rwlock_rdlock (_nl_state_lock); /* If DOMAINNAME is NULL, we are interested in the default domain. If CATEGORY is not LC_MESSAGES this might not make much sense but the definition left this undefined. */ if (domainname == NULL) domainname = _nl_current_default_domain; /* OS/2 specific: backward compatibility with older libintl versions */ #ifdef LC_MESSAGES_COMPAT if (category == LC_MESSAGES_COMPAT) category = LC_MESSAGES; #endif /* Try to find the translation among those which we found at some time. */ search.domain = NULL; search.msgid.ptr = msgid1; search.domainname = domainname; search.category = category; #ifdef HAVE_PER_THREAD_LOCALE # ifndef IN_LIBGLOCALE # ifdef _LIBC localename = _strdupa (_current_locale_name (category)); # else categoryname = category_to_name (category); # define CATEGORYNAME_INITIALIZED localename = _nl_locale_name_thread_unsafe (category, categoryname); if (localename == NULL) localename = ""; # endif # endif search.localename = localename; # ifdef IN_LIBGLOCALE search.encoding = encoding; # endif /* Since tfind/tsearch manage a balanced tree, concurrent tfind and tsearch calls can be fatal. */ gl_rwlock_rdlock (tree_lock); foundp = (struct known_translation_t **) tfind (&search, &root, transcmp); gl_rwlock_unlock (tree_lock); if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) { /* Now deal with plural. */ if (plural) retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation, (*foundp)->translation_length); else retval = (char *) (*foundp)->translation; gl_rwlock_unlock (_nl_state_lock); # ifdef _LIBC __libc_rwlock_unlock (__libc_setlocale_lock); # endif __set_errno (saved_errno); return retval; } #endif /* See whether this is a SUID binary or not. */ DETERMINE_SECURE; /* First find matching binding. */ #ifdef IN_LIBGLOCALE /* We can use a trivial binding, since _nl_find_msg will ignore it anyway, and _nl_load_domain and _nl_find_domain just pass it through. */ binding = NULL; dirname = bindtextdomain (domainname, NULL); #else for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding == NULL) dirname = _nl_default_dirname; else { dirname = binding->dirname; #endif if (!IS_ABSOLUTE_PATH (dirname)) { /* We have a relative path. Make it absolute now. */ size_t dirname_len = strlen (dirname) + 1; size_t path_max; char *resolved_dirname; char *ret; path_max = (unsigned int) PATH_MAX; path_max += 2; /* The getcwd docs say to do this. */ for (;;) { resolved_dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, tmp_dirname); __set_errno (0); ret = getcwd (resolved_dirname, path_max); if (ret != NULL || errno != ERANGE) break; path_max += path_max / 2; path_max += PATH_INCR; } if (ret == NULL) /* We cannot get the current working directory. Don't signal an error but simply return the default string. */ goto return_untranslated; stpcpy (stpcpy (strchr (resolved_dirname, '\0'), "/"), dirname); dirname = resolved_dirname; } #ifndef IN_LIBGLOCALE } #endif /* Now determine the symbolic name of CATEGORY and its value. */ #ifndef CATEGORYNAME_INITIALIZED categoryname = category_to_name (category); #endif #ifdef IN_LIBGLOCALE categoryvalue = guess_category_value (category, categoryname, localename); #else categoryvalue = guess_category_value (category, categoryname); #endif domainname_len = strlen (domainname); xdomainname = (char *) alloca (strlen (categoryname) + domainname_len + 5); ADD_BLOCK (block_list, xdomainname); stpcpy ((char *) mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), domainname, domainname_len), ".mo"); /* Creating working area. */ single_locale = (char *) alloca (strlen (categoryvalue) + 1); ADD_BLOCK (block_list, single_locale); /* Search for the given string. This is a loop because we perhaps got an ordered list of languages to consider for the translation. */ while (1) { /* Make CATEGORYVALUE point to the next element of the list. */ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') ++categoryvalue; if (categoryvalue[0] == '\0') { /* The whole contents of CATEGORYVALUE has been searched but no valid entry has been found. We solve this situation by implicitly appending a "C" entry, i.e. no translation will take place. */ single_locale[0] = 'C'; single_locale[1] = '\0'; } else { char *cp = single_locale; while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') *cp++ = *categoryvalue++; *cp = '\0'; /* When this is a SUID binary we must not allow accessing files outside the dedicated directories. */ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) /* Ingore this entry. */ continue; } /* If the current locale value is C (or POSIX) we don't load a domain. Return the MSGID. */ if (strcmp (single_locale, "C") == 0 || strcmp (single_locale, "POSIX") == 0) break; /* Find structure describing the message catalog matching the DOMAINNAME and CATEGORY. */ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); if (domain != NULL) { #if defined IN_LIBGLOCALE retval = _nl_find_msg (domain, binding, encoding, msgid1, &retlen); #else retval = _nl_find_msg (domain, binding, msgid1, 1, &retlen); #endif if (retval == NULL) { int cnt; for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { #if defined IN_LIBGLOCALE retval = _nl_find_msg (domain->successor[cnt], binding, encoding, msgid1, &retlen); #else retval = _nl_find_msg (domain->successor[cnt], binding, msgid1, 1, &retlen); #endif /* Resource problems are not fatal, instead we return no translation. */ if (__builtin_expect (retval == (char *) -1, 0)) goto return_untranslated; if (retval != NULL) { domain = domain->successor[cnt]; break; } } } /* Returning -1 means that some resource problem exists (likely memory) and that the strings could not be converted. Return the original strings. */ if (__builtin_expect (retval == (char *) -1, 0)) break; if (retval != NULL) { /* Found the translation of MSGID1 in domain DOMAIN: starting at RETVAL, RETLEN bytes. */ FREE_BLOCKS (block_list); if (foundp == NULL) { /* Create a new entry and add it to the search tree. */ size_t msgid_len; size_t size; struct known_translation_t *newp; msgid_len = strlen (msgid1) + 1; size = offsetof (struct known_translation_t, msgid) + msgid_len + domainname_len + 1; #ifdef HAVE_PER_THREAD_LOCALE size += strlen (localename) + 1; #endif newp = (struct known_translation_t *) malloc (size); if (newp != NULL) { char *new_domainname; #ifdef HAVE_PER_THREAD_LOCALE char *new_localename; #endif new_domainname = (char *) mempcpy (newp->msgid.appended, msgid1, msgid_len); memcpy (new_domainname, domainname, domainname_len + 1); #ifdef HAVE_PER_THREAD_LOCALE new_localename = new_domainname + domainname_len + 1; strcpy (new_localename, localename); #endif newp->domainname = new_domainname; newp->category = category; #ifdef HAVE_PER_THREAD_LOCALE newp->localename = new_localename; #endif #ifdef IN_LIBGLOCALE newp->encoding = encoding; #endif newp->counter = _nl_msg_cat_cntr; newp->domain = domain; newp->translation = retval; newp->translation_length = retlen; gl_rwlock_wrlock (tree_lock); /* Insert the entry in the search tree. */ foundp = (struct known_translation_t **) tsearch (newp, &root, transcmp); gl_rwlock_unlock (tree_lock); if (foundp == NULL || __builtin_expect (*foundp != newp, 0)) /* The insert failed. */ free (newp); } } else { /* We can update the existing entry. */ (*foundp)->counter = _nl_msg_cat_cntr; (*foundp)->domain = domain; (*foundp)->translation = retval; (*foundp)->translation_length = retlen; } __set_errno (saved_errno); /* Now deal with plural. */ if (plural) retval = plural_lookup (domain, n, retval, retlen); gl_rwlock_unlock (_nl_state_lock); #ifdef _LIBC __libc_rwlock_unlock (__libc_setlocale_lock); #endif return retval; } } } return_untranslated: /* Return the untranslated MSGID. */ FREE_BLOCKS (block_list); gl_rwlock_unlock (_nl_state_lock); #ifdef _LIBC __libc_rwlock_unlock (__libc_setlocale_lock); #endif #ifndef _LIBC if (!ENABLE_SECURE) { extern void _nl_log_untranslated (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural); const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED"); if (logfilename != NULL && logfilename[0] != '\0') _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural); } #endif __set_errno (saved_errno); return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); } /* Look up the translation of msgid within DOMAIN_FILE and DOMAINBINDING. Return it if found. Return NULL if not found or in case of a conversion failure (problem in the particular message catalog). Return (char *) -1 in case of a memory allocation failure during conversion (only if ENCODING != NULL resp. CONVERT == true). */ char * internal_function #ifdef IN_LIBGLOCALE _nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *encoding, const char *msgid, size_t *lengthp) #else _nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, int convert, size_t *lengthp) #endif { struct loaded_domain *domain; nls_uint32 nstrings; size_t act; char *result; size_t resultlen; if (domain_file->decided <= 0) _nl_load_domain (domain_file, domainbinding); if (domain_file->data == NULL) return NULL; domain = (struct loaded_domain *) domain_file->data; nstrings = domain->nstrings; /* Locate the MSGID and its translation. */ if (domain->hash_tab != NULL) { /* Use the hashing table. */ nls_uint32 len = strlen (msgid); nls_uint32 hash_val = __hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); while (1) { nls_uint32 nstr = W (domain->must_swap_hash_tab, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; nstr--; /* Compare msgid with the original string at index nstr. We compare the lengths with >=, not ==, because plural entries are represented by strings with an embedded NUL. */ if (nstr < nstrings ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len && (strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr].offset)) == 0) : domain->orig_sysdep_tab[nstr - nstrings].length > len && (strcmp (msgid, domain->orig_sysdep_tab[nstr - nstrings].pointer) == 0)) { act = nstr; goto found; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } /* NOTREACHED */ } else { /* Try the default method: binary search in the sorted array of messages. */ size_t top, bottom; bottom = 0; top = nstrings; while (bottom < top) { int cmp_val; act = (bottom + top) / 2; cmp_val = strcmp (msgid, (domain->data + W (domain->must_swap, domain->orig_tab[act].offset))); if (cmp_val < 0) top = act; else if (cmp_val > 0) bottom = act + 1; else goto found; } /* No translation was found. */ return NULL; } found: /* The translation was found at index ACT. If we have to convert the string to use a different character set, this is the time. */ if (act < nstrings) { result = (char *) (domain->data + W (domain->must_swap, domain->trans_tab[act].offset)); resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; } else { result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer; resultlen = domain->trans_sysdep_tab[act - nstrings].length; } #if defined _LIBC || HAVE_ICONV # ifdef IN_LIBGLOCALE if (encoding != NULL) # else if (convert) # endif { /* We are supposed to do a conversion. */ # ifndef IN_LIBGLOCALE const char *encoding = get_output_charset (domainbinding); # endif size_t nconversions; struct converted_domain *convd; size_t i; /* Protect against reallocation of the table. */ gl_rwlock_rdlock (domain->conversions_lock); /* Search whether a table with converted translations for this encoding has already been allocated. */ nconversions = domain->nconversions; convd = NULL; for (i = nconversions; i > 0; ) { i--; if (strcmp (domain->conversions[i].encoding, encoding) == 0) { convd = &domain->conversions[i]; break; } } gl_rwlock_unlock (domain->conversions_lock); if (convd == NULL) { /* We have to allocate a new conversions table. */ gl_rwlock_wrlock (domain->conversions_lock); nconversions = domain->nconversions; /* Maybe in the meantime somebody added the translation. Recheck. */ for (i = nconversions; i > 0; ) { i--; if (strcmp (domain->conversions[i].encoding, encoding) == 0) { convd = &domain->conversions[i]; goto found_convd; } } { /* Allocate a table for the converted translations for this encoding. */ struct converted_domain *new_conversions = (struct converted_domain *) (domain->conversions != NULL ? realloc (domain->conversions, (nconversions + 1) * sizeof (struct converted_domain)) : malloc ((nconversions + 1) * sizeof (struct converted_domain))); if (__builtin_expect (new_conversions == NULL, 0)) { /* Nothing we can do, no more memory. We cannot use the translation because it might be encoded incorrectly. */ unlock_fail: gl_rwlock_unlock (domain->conversions_lock); return (char *) -1; } domain->conversions = new_conversions; /* Copy the 'encoding' string to permanent storage. */ encoding = strdup (encoding); if (__builtin_expect (encoding == NULL, 0)) /* Nothing we can do, no more memory. We cannot use the translation because it might be encoded incorrectly. */ goto unlock_fail; convd = &new_conversions[nconversions]; convd->encoding = encoding; /* Find out about the character set the file is encoded with. This can be found (in textual form) in the entry "". If this entry does not exist or if this does not contain the 'charset=' information, we will assume the charset matches the one the current locale and we don't have to perform any conversion. */ # ifdef _LIBC convd->conv = (__gconv_t) -1; # else # if HAVE_ICONV convd->conv = (iconv_t) -1; # endif # endif { char *nullentry; size_t nullentrylen; /* Get the header entry. This is a recursion, but it doesn't reallocate domain->conversions because we pass encoding = NULL or convert = 0, respectively. */ nullentry = # ifdef IN_LIBGLOCALE _nl_find_msg (domain_file, domainbinding, NULL, "", &nullentrylen); # else _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen); # endif /* Resource problems are fatal. If we continue onwards we will only attempt to calloc a new conv_tab and fail later. */ if (__builtin_expect (nullentry == (char *) -1, 0)) return (char *) -1; if (nullentry != NULL) { const char *charsetstr; charsetstr = strstr (nullentry, "charset="); if (charsetstr != NULL) { size_t len; char *charset; const char *outcharset; charsetstr += strlen ("charset="); len = strcspn (charsetstr, " \t\n"); charset = (char *) alloca (len + 1); # if defined _LIBC || HAVE_MEMPCPY *((char *) mempcpy (charset, charsetstr, len)) = '\0'; # else memcpy (charset, charsetstr, len); charset[len] = '\0'; # endif outcharset = encoding; # ifdef _LIBC /* We always want to use transliteration. */ outcharset = norm_add_slashes (outcharset, "TRANSLIT"); charset = norm_add_slashes (charset, ""); int r = __gconv_open (outcharset, charset, &convd->conv, GCONV_AVOID_NOCONV); if (__builtin_expect (r != __GCONV_OK, 0)) { /* If the output encoding is the same there is nothing to do. Otherwise do not use the translation at all. */ if (__builtin_expect (r != __GCONV_NULCONV, 1)) { gl_rwlock_unlock (domain->conversions_lock); free ((char *) encoding); return NULL; } convd->conv = (__gconv_t) -1; } # else # if HAVE_ICONV /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, we want to use transliteration. */ # if (((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2) \ && !defined __UCLIBC__) \ || _LIBICONV_VERSION >= 0x0105 if (strchr (outcharset, '/') == NULL) { char *tmp; len = strlen (outcharset); tmp = (char *) alloca (len + 10 + 1); memcpy (tmp, outcharset, len); memcpy (tmp + len, "//TRANSLIT", 10 + 1); outcharset = tmp; convd->conv = iconv_open (outcharset, charset); freea (outcharset); } else # endif convd->conv = iconv_open (outcharset, charset); # endif # endif freea (charset); } } } convd->conv_tab = NULL; /* Here domain->conversions is still == new_conversions. */ domain->nconversions++; } found_convd: gl_rwlock_unlock (domain->conversions_lock); } if ( # ifdef _LIBC convd->conv != (__gconv_t) -1 # else # if HAVE_ICONV convd->conv != (iconv_t) -1 # endif # endif ) { /* We are supposed to do a conversion. First allocate an appropriate table with the same structure as the table of translations in the file, where we can put the pointers to the converted strings in. There is a slight complication with plural entries. They are represented by consecutive NUL terminated strings. We handle this case by converting RESULTLEN bytes, including NULs. */ /* This lock primarily protects the memory management variables freemem, freemem_size. It also protects write accesses to convd->conv_tab. It's not worth using a separate lock (such as domain->conversions_lock) for this purpose, because when modifying convd->conv_tab, we also need to lock freemem, freemem_size for most of the time. */ __libc_lock_define_initialized (static, lock) if (__builtin_expect (convd->conv_tab == NULL, 0)) { __libc_lock_lock (lock); if (convd->conv_tab == NULL) { convd->conv_tab = (char **) calloc (nstrings + domain->n_sysdep_strings, sizeof (char *)); if (convd->conv_tab != NULL) goto not_translated_yet; /* Mark that we didn't succeed allocating a table. */ convd->conv_tab = (char **) -1; } __libc_lock_unlock (lock); } if (__builtin_expect (convd->conv_tab == (char **) -1, 0)) /* Nothing we can do, no more memory. We cannot use the translation because it might be encoded incorrectly. */ return (char *) -1; if (convd->conv_tab[act] == NULL) { /* We haven't used this string so far, so it is not translated yet. Do this now. */ /* We use a bit more efficient memory handling. We allocate always larger blocks which get used over time. This is faster than many small allocations. */ # define INITIAL_BLOCK_SIZE 4080 static unsigned char *freemem; static size_t freemem_size; const unsigned char *inbuf; unsigned char *outbuf; int malloc_count; # ifndef _LIBC transmem_block_t *transmem_list; # endif __libc_lock_lock (lock); not_translated_yet: inbuf = (const unsigned char *) result; outbuf = freemem + sizeof (size_t); # ifndef _LIBC transmem_list = NULL; # endif malloc_count = 0; while (1) { transmem_block_t *newmem; # ifdef _LIBC size_t non_reversible; int res; if (freemem_size < sizeof (size_t)) goto resize_freemem; res = __gconv (convd->conv, &inbuf, inbuf + resultlen, &outbuf, outbuf + freemem_size - sizeof (size_t), &non_reversible); if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) break; if (res != __GCONV_FULL_OUTPUT) { /* We should not use the translation at all, it is incorrectly encoded. */ __libc_lock_unlock (lock); return NULL; } inbuf = (const unsigned char *) result; # else # if HAVE_ICONV const char *inptr = (const char *) inbuf; size_t inleft = resultlen; char *outptr = (char *) outbuf; size_t outleft; if (freemem_size < sizeof (size_t)) goto resize_freemem; outleft = freemem_size - sizeof (size_t); if (iconv (convd->conv, (ICONV_CONST char **) &inptr, &inleft, &outptr, &outleft) != (size_t) (-1)) { outbuf = (unsigned char *) outptr; break; } if (errno != E2BIG) { __libc_lock_unlock (lock); return NULL; } # endif # endif resize_freemem: /* We must allocate a new buffer or resize the old one. */ if (malloc_count > 0) { ++malloc_count; freemem_size = malloc_count * INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) realloc (transmem_list, freemem_size); # ifdef _LIBC if (newmem != NULL) transmem_list = newmem; else { struct transmem_list *old = transmem_list; transmem_list = transmem_list->next; free (old); } # endif } else { malloc_count = 1; freemem_size = INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) malloc (freemem_size); # ifdef _LIBC if (newmem != NULL) { /* Add the block to the list of blocks we have to free at some point. */ newmem->next = transmem_list; transmem_list = newmem; } /* Fall through and return -1. */ # endif } if (__builtin_expect (newmem == NULL, 0)) { freemem = NULL; freemem_size = 0; __libc_lock_unlock (lock); return (char *) -1; } # ifdef _LIBC freemem = (unsigned char *) newmem->data; freemem_size -= offsetof (struct transmem_list, data); # else transmem_list = newmem; freemem = newmem; # endif outbuf = freemem + sizeof (size_t); } /* We have now in our buffer a converted string. Put this into the table of conversions. */ *(size_t *) freemem = outbuf - freemem - sizeof (size_t); convd->conv_tab[act] = (char *) freemem; /* Shrink freemem, but keep it aligned. */ freemem_size -= outbuf - freemem; freemem = outbuf; freemem += freemem_size & (alignof (size_t) - 1); freemem_size = freemem_size & ~ (alignof (size_t) - 1); __libc_lock_unlock (lock); } /* Now convd->conv_tab[act] contains the translation of all the plural variants. */ result = convd->conv_tab[act] + sizeof (size_t); resultlen = *(size_t *) convd->conv_tab[act]; } } /* The result string is converted. */ #endif /* _LIBC || HAVE_ICONV */ *lengthp = resultlen; return result; } /* Look up a plural variant. */ static char * internal_function plural_lookup (struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len) { struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; unsigned long int index; const char *p; index = plural_eval (domaindata->plural, n); if (index >= domaindata->nplurals) /* This should never happen. It means the plural expression and the given maximum value do not match. */ index = 0; /* Skip INDEX strings at TRANSLATION. */ p = translation; while (index-- > 0) { #ifdef _LIBC p = __rawmemchr (p, '\0'); #else p = strchr (p, '\0'); #endif /* And skip over the NUL byte. */ p++; if (p >= translation + translation_len) /* This should never happen. It means the plural expression evaluated to a value larger than the number of variants available for MSGID1. */ return (char *) translation; } return (char *) p; } #ifndef _LIBC /* Return string representation of locale CATEGORY. */ static const char * internal_function category_to_name (int category) { const char *retval; switch (category) { #ifdef LC_COLLATE case LC_COLLATE: retval = "LC_COLLATE"; break; #endif #ifdef LC_CTYPE case LC_CTYPE: retval = "LC_CTYPE"; break; #endif #ifdef LC_MONETARY case LC_MONETARY: retval = "LC_MONETARY"; break; #endif #ifdef LC_NUMERIC case LC_NUMERIC: retval = "LC_NUMERIC"; break; #endif #ifdef LC_TIME case LC_TIME: retval = "LC_TIME"; break; #endif #ifdef LC_MESSAGES case LC_MESSAGES: retval = "LC_MESSAGES"; break; #endif #ifdef LC_RESPONSE case LC_RESPONSE: retval = "LC_RESPONSE"; break; #endif #ifdef LC_ALL case LC_ALL: /* This might not make sense but is perhaps better than any other value. */ retval = "LC_ALL"; break; #endif default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } #endif /* Guess value of current locale from value of the environment variables or system-dependent defaults. */ static const char * internal_function #ifdef IN_LIBGLOCALE guess_category_value (int category, const char *categoryname, const char *locale) #else guess_category_value (int category, const char *categoryname) #endif { const char *language; #ifndef IN_LIBGLOCALE const char *locale; # ifndef _LIBC const char *language_default; int locale_defaulted; # endif #endif /* We use the settings in the following order: 1. The value of the environment variable 'LANGUAGE'. This is a GNU extension. Its value can be a colon-separated list of locale names. 2. The value of the environment variable 'LC_ALL', 'LC_xxx', or 'LANG'. More precisely, the first among these that is set to a non-empty value. This is how POSIX specifies it. The value is a single locale name. 3. A system-dependent preference list of languages. Its value can be a colon-separated list of locale names. 4. A system-dependent default locale name. This way: - System-dependent settings can be overridden by environment variables. - If the system provides both a list of languages and a default locale, the former is used. */ #ifndef IN_LIBGLOCALE /* Fetch the locale name, through the POSIX method of looking to `LC_ALL', `LC_xxx', and `LANG'. On some systems this can be done by the `setlocale' function itself. */ # ifdef _LIBC locale = __current_locale_name (category); # else locale_defaulted = 0; # if HAVE_USELOCALE locale = _nl_locale_name_thread_unsafe (category, categoryname); if (locale == NULL) # endif { locale = _nl_locale_name_posix (category, categoryname); if (locale == NULL) { locale = _nl_locale_name_default (); locale_defaulted = 1; } } # endif #endif /* Ignore LANGUAGE and its system-dependent analogon if the locale is set to "C" because 1. "C" locale usually uses the ASCII encoding, and most international messages use non-ASCII characters. These characters get displayed as question marks (if using glibc's iconv()) or as invalid 8-bit characters (because other iconv()s refuse to convert most non-ASCII characters to ASCII). In any case, the output is ugly. 2. The precise output of some programs in the "C" locale is specified by POSIX and should not depend on environment variables like "LANGUAGE" or system-dependent information. We allow such programs to use gettext(). */ if (strcmp (locale, "C") == 0) return locale; /* The highest priority value is the value of the 'LANGUAGE' environment variable. */ language = getenv ("LANGUAGE"); if (language != NULL && language[0] != '\0') return language; #if !defined IN_LIBGLOCALE && !defined _LIBC /* The next priority value is the locale name, if not defaulted. */ if (locale_defaulted) { /* The next priority value is the default language preferences list. */ language_default = _nl_language_preferences_default (); if (language_default != NULL) return language_default; } /* The least priority value is the locale name, if defaulted. */ #endif return locale; } #if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE /* Returns the output charset. */ static const char * internal_function get_output_charset (struct binding *domainbinding) { /* The output charset should normally be determined by the locale. But sometimes the locale is not used or not correctly set up, so we provide a possibility for the user to override this: the OUTPUT_CHARSET environment variable. Moreover, the value specified through bind_textdomain_codeset overrides both. */ if (domainbinding != NULL && domainbinding->codeset != NULL) return domainbinding->codeset; else { /* For speed reasons, we look at the value of OUTPUT_CHARSET only once. This is a user variable that is not supposed to change during a program run. */ static char *output_charset_cache; static int output_charset_cached; if (!output_charset_cached) { const char *value = getenv ("OUTPUT_CHARSET"); if (value != NULL && value[0] != '\0') { size_t len = strlen (value) + 1; char *value_copy = (char *) malloc (len); if (value_copy != NULL) memcpy (value_copy, value, len); output_charset_cache = value_copy; } output_charset_cached = 1; } if (output_charset_cache != NULL) return output_charset_cache; else { # ifdef _LIBC return _NL_CURRENT (LC_CTYPE, CODESET); # else # if HAVE_ICONV return locale_charset (); # endif # endif } } } #endif /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (char *dest, const char *src) { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif #if !_LIBC && !HAVE_MEMPCPY static void * mempcpy (void *dest, const void *src, size_t n) { return (void *) ((char *) memcpy (dest, src, n) + n); } #endif #if !_LIBC && !HAVE_TSEARCH # include "tsearch.c" #endif #ifdef _LIBC /* If we want to free all resources we have to do some work at program's end. */ libc_freeres_fn (free_mem) { void *old; while (_nl_domain_bindings != NULL) { struct binding *oldp = _nl_domain_bindings; _nl_domain_bindings = _nl_domain_bindings->next; if (oldp->dirname != _nl_default_dirname) /* Yes, this is a pointer comparison. */ free (oldp->dirname); free (oldp->codeset); free (oldp); } if (_nl_current_default_domain != _nl_default_default_domain) /* Yes, again a pointer comparison. */ free ((char *) _nl_current_default_domain); /* Remove the search tree with the known translations. */ __tdestroy (root, free); root = NULL; while (transmem_list != NULL) { old = transmem_list; transmem_list = transmem_list->next; free (old); } } #endif gnupg-1.4.20/intl/gettextP.h0000644000175000017500000002355112635262326012577 00000000000000/* Header describing internals of libintl library. Copyright (C) 1995-1999, 2000-2007, 2009-2010 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _GETTEXTP_H #define _GETTEXTP_H #include /* Get size_t. */ #ifdef _LIBC # include "../iconv/gconv_int.h" #else # if HAVE_ICONV # include # endif #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define __libc_rwlock_define #else # include "lock.h" #endif #ifdef _LIBC extern char *__gettext (const char *__msgid); extern char *__dgettext (const char *__domainname, const char *__msgid); extern char *__dcgettext (const char *__domainname, const char *__msgid, int __category); extern char *__ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n); extern char *__dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int n); extern char *__dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category); extern char *__dcigettext (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category); extern char *__textdomain (const char *__domainname); extern char *__bindtextdomain (const char *__domainname, const char *__dirname); extern char *__bind_textdomain_codeset (const char *__domainname, const char *__codeset); extern void _nl_finddomain_subfreeres (void) attribute_hidden; extern void _nl_unload_domain (struct loaded_domain *__domain) internal_function attribute_hidden; #else /* Declare the exported libintl_* functions, in a way that allows us to call them under their real name. */ # undef _INTL_REDIRECT_INLINE # undef _INTL_REDIRECT_MACROS # define _INTL_REDIRECT_MACROS # include "libgnuintl.h" # ifdef IN_LIBGLOCALE extern char *gl_dcigettext (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category, const char *__localename, const char *__encoding); # else extern char *libintl_dcigettext (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category); # endif #endif #include "loadinfo.h" #include "gmo.h" /* Get nls_uint32. */ /* @@ end of prolog @@ */ #ifndef internal_function # define internal_function #endif #ifndef attribute_hidden # define attribute_hidden #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif #ifdef _LIBC # include # define SWAP(i) bswap_32 (i) #else static inline nls_uint32 # ifdef __cplusplus SWAP (nls_uint32 i) # else SWAP (i) nls_uint32 i; # endif { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } #endif /* In-memory representation of system dependent string. */ struct sysdep_string_desc { /* Length of addressed string, including the trailing NUL. */ size_t length; /* Pointer to addressed string. */ const char *pointer; }; /* Cache of translated strings after charset conversion. Note: The strings are converted to the target encoding only on an as-needed basis. */ struct converted_domain { /* The target encoding name. */ const char *encoding; /* The descriptor for conversion from the message catalog's encoding to this target encoding. */ #ifdef _LIBC __gconv_t conv; #else # if HAVE_ICONV iconv_t conv; # endif #endif /* The table of translated strings after charset conversion. */ char **conv_tab; }; /* The representation of an opened message catalog. */ struct loaded_domain { /* Pointer to memory containing the .mo file. */ const char *data; /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */ int use_mmap; /* Size of mmap()ed memory. */ size_t mmap_size; /* 1 if the .mo file uses a different endianness than this machine. */ int must_swap; /* Pointer to additional malloc()ed memory. */ void *malloced; /* Number of static strings pairs. */ nls_uint32 nstrings; /* Pointer to descriptors of original strings in the file. */ const struct string_desc *orig_tab; /* Pointer to descriptors of translated strings in the file. */ const struct string_desc *trans_tab; /* Number of system dependent strings pairs. */ nls_uint32 n_sysdep_strings; /* Pointer to descriptors of original sysdep strings. */ const struct sysdep_string_desc *orig_sysdep_tab; /* Pointer to descriptors of translated sysdep strings. */ const struct sysdep_string_desc *trans_sysdep_tab; /* Size of hash table. */ nls_uint32 hash_size; /* Pointer to hash table. */ const nls_uint32 *hash_tab; /* 1 if the hash table uses a different endianness than this machine. */ int must_swap_hash_tab; /* Cache of charset conversions of the translated strings. */ struct converted_domain *conversions; size_t nconversions; gl_rwlock_define (, conversions_lock) const struct expression *plural; unsigned long int nplurals; }; /* We want to allocate a string at the end of the struct. But ISO C doesn't allow zero sized arrays. */ #ifdef __GNUC__ # define ZERO 0 #else # define ZERO 1 #endif /* A set of settings bound to a message domain. Used to store settings from bindtextdomain() and bind_textdomain_codeset(). */ struct binding { struct binding *next; char *dirname; char *codeset; char domainname[ZERO]; }; /* A counter which is incremented each time some previous translations become invalid. This variable is part of the external ABI of the GNU libintl. */ #ifdef IN_LIBGLOCALE # include extern LIBGLOCALE_DLL_EXPORTED int _nl_msg_cat_cntr; #else extern LIBINTL_DLL_EXPORTED int _nl_msg_cat_cntr; #endif #ifndef _LIBC extern const char *_nl_language_preferences_default (void); # define gl_locale_name_canonicalize _nl_locale_name_canonicalize extern void _nl_locale_name_canonicalize (char *name); # define gl_locale_name_from_win32_LANGID _nl_locale_name_from_win32_LANGID /* extern const char *_nl_locale_name_from_win32_LANGID (LANGID langid); */ # define gl_locale_name_from_win32_LCID _nl_locale_name_from_win32_LCID /* extern const char *_nl_locale_name_from_win32_LCID (LCID lcid); */ # define gl_locale_name_thread_unsafe _nl_locale_name_thread_unsafe extern const char *_nl_locale_name_thread_unsafe (int category, const char *categoryname); # define gl_locale_name_thread _nl_locale_name_thread /* extern const char *_nl_locale_name_thread (int category, const char *categoryname); */ # define gl_locale_name_posix _nl_locale_name_posix extern const char *_nl_locale_name_posix (int category, const char *categoryname); # define gl_locale_name_environ _nl_locale_name_environ extern const char *_nl_locale_name_environ (int category, const char *categoryname); # define gl_locale_name_default _nl_locale_name_default extern const char *_nl_locale_name_default (void); # define gl_locale_name _nl_locale_name /* extern const char *_nl_locale_name (int category, const char *categoryname); */ #endif struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale, const char *__domainname, struct binding *__domainbinding) internal_function; void _nl_load_domain (struct loaded_l10nfile *__domain, struct binding *__domainbinding) internal_function; #ifdef IN_LIBGLOCALE char *_nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *encoding, const char *msgid, size_t *lengthp) internal_function; #else char *_nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, int convert, size_t *lengthp) internal_function; #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_dirname libintl_nl_default_dirname # define _nl_domain_bindings libintl_nl_domain_bindings #endif /* Contains the default location of the message catalogs. */ extern const char _nl_default_dirname[]; #ifdef _LIBC libc_hidden_proto (_nl_default_dirname) #endif /* List with bindings of specific domains. */ extern struct binding *_nl_domain_bindings; /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_default_domain libintl_nl_default_default_domain # define _nl_current_default_domain libintl_nl_current_default_domain #endif /* Name of the default text domain. */ extern const char _nl_default_default_domain[] attribute_hidden; /* Default text domain in which entries for gettext(3) are to be found. */ extern const char *_nl_current_default_domain attribute_hidden; /* @@ begin of epilog @@ */ #endif /* gettextP.h */ gnupg-1.4.20/intl/vasnprintf.h0000644000175000017500000000535412635262326013166 00000000000000/* vsprintf with automatic memory allocation. Copyright (C) 2002-2004, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* Get va_list. */ #include /* Get size_t. */ #include #ifndef __attribute__ /* This feature is available in gcc versions 2.5 and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ # define __attribute__(Spec) /* empty */ # endif /* The __-protected variants of 'format' and 'printf' attributes are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) # define __format__ format # define __printf__ printf # endif #endif #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. When dynamic memory allocation occurs, the preallocated buffer is left alone (with possibly modified contents). This makes it possible to use a statically allocated or stack-allocated buffer, like this: char buf[100]; size_t len = sizeof (buf); char *output = vasnprintf (buf, &len, format, args); if (output == NULL) ... error handling ...; else { ... use the output string ...; if (output != buf) free (output); } */ extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 3, 0))); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ gnupg-1.4.20/intl/localealias.c0000644000175000017500000002445112635262326013237 00000000000000/* Handle aliases for locale names. Copyright (C) 1995-1999, 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #if defined _LIBC || defined HAVE___FSETLOCKING # include #endif #include #ifdef __GNUC__ # undef alloca # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #include #include "gettextP.h" #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define strcasecmp __strcasecmp # ifndef mempcpy # define mempcpy __mempcpy # endif # define HAVE_MEMPCPY 1 # define HAVE___FSETLOCKING 1 #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include #else # include "lock.h" #endif #ifndef internal_function # define internal_function #endif /* Some optimizations for glibc. */ #ifdef _LIBC # define FEOF(fp) feof_unlocked (fp) # define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp) #else # define FEOF(fp) feof (fp) # define FGETS(buf, n, fp) fgets (buf, n, fp) #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif #if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED # undef fgets # define fgets(buf, len, s) fgets_unlocked (buf, len, s) #endif #if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED # undef feof # define feof(s) feof_unlocked (s) #endif __libc_lock_define_initialized (static, lock) struct alias_map { const char *alias; const char *value; }; #ifndef _LIBC # define libc_freeres_ptr(decl) decl #endif libc_freeres_ptr (static char *string_space); static size_t string_space_act; static size_t string_space_max; libc_freeres_ptr (static struct alias_map *map); static size_t nmap; static size_t maxmap; /* Prototypes for local functions. */ static size_t read_alias_file (const char *fname, int fname_len) internal_function; static int extend_alias_table (void); static int alias_compare (const struct alias_map *map1, const struct alias_map *map2); const char * _nl_expand_alias (const char *name) { static const char *locale_alias_path; struct alias_map *retval; const char *result = NULL; size_t added; __libc_lock_lock (lock); if (locale_alias_path == NULL) locale_alias_path = LOCALE_ALIAS_PATH; do { struct alias_map item; item.alias = name; if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), (int (*) (const void *, const void *) ) alias_compare); else retval = NULL; /* We really found an alias. Return the value. */ if (retval != NULL) { result = retval->value; break; } /* Perhaps we can find another alias file. */ added = 0; while (added == 0 && locale_alias_path[0] != '\0') { const char *start; while (locale_alias_path[0] == PATH_SEPARATOR) ++locale_alias_path; start = locale_alias_path; while (locale_alias_path[0] != '\0' && locale_alias_path[0] != PATH_SEPARATOR) ++locale_alias_path; if (start < locale_alias_path) added = read_alias_file (start, locale_alias_path - start); } } while (added != 0); __libc_lock_unlock (lock); return result; } static size_t internal_function read_alias_file (const char *fname, int fname_len) { FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); #else memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); #endif #ifdef _LIBC /* Note the file is opened with cancellation in the I/O functions disabled. */ fp = fopen (relocate (full_fname), "rc"); #else fp = fopen (relocate (full_fname), "r"); #endif freea (full_fname); if (fp == NULL) return 0; #ifdef HAVE___FSETLOCKING /* No threads present. */ __fsetlocking (fp, FSETLOCKING_BYCALLER); #endif added = 0; while (!FEOF (fp)) { /* It is a reasonable approach to use a fix buffer here because a) we are only interested in the first two fields b) these fields must be usable as file names and so must not be that long We avoid a multi-kilobyte buffer here since this would use up stack space which we might not have if the program ran out of memory. */ char buf[400]; char *alias; char *value; char *cp; int complete_line; if (FGETS (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; /* Determine whether the line is complete. */ complete_line = strchr (buf, '\n') != NULL; cp = buf; /* Ignore leading white space. */ while (isspace ((unsigned char) cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ while (isspace ((unsigned char) cp[0])) ++cp; if (cp[0] != '\0') { value = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') { /* This has to be done to make the following test for the end of line possible. We are looking for the terminating '\n' which do not overwrite here. */ *cp++ = '\0'; *cp = '\n'; } else if (cp[0] != '\0') *cp++ = '\0'; #ifdef IN_LIBGLOCALE /* glibc's locale.alias contains entries for ja_JP and ko_KR that make it impossible to use a Japanese or Korean UTF-8 locale under the name "ja_JP" or "ko_KR". Ignore these entries. */ if (strchr (alias, '_') == NULL) #endif { size_t alias_len; size_t value_len; if (nmap >= maxmap) if (__builtin_expect (extend_alias_table (), 0)) goto out; alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { /* Increase size of memory pool. */ size_t new_size = (string_space_max + (alias_len + value_len > 1024 ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) goto out; if (__builtin_expect (string_space != new_pool, 0)) { size_t i; for (i = 0; i < nmap; i++) { map[i].alias += new_pool - string_space; map[i].value += new_pool - string_space; } } string_space = new_pool; string_space_max = new_size; } map[nmap].alias = (const char *) memcpy (&string_space[string_space_act], alias, alias_len); string_space_act += alias_len; map[nmap].value = (const char *) memcpy (&string_space[string_space_act], value, value_len); string_space_act += value_len; ++nmap; ++added; } } } /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ if (! complete_line) do if (FGETS (buf, sizeof buf, fp) == NULL) /* Make sure the inner loop will be left. The outer loop will exit at the `feof' test. */ break; while (strchr (buf, '\n') == NULL); } out: /* Should we test for ferror()? I think we have to silently ignore errors. --drepper */ fclose (fp); if (added > 0) qsort (map, nmap, sizeof (struct alias_map), (int (*) (const void *, const void *)) alias_compare); return added; } static int extend_alias_table () { size_t new_size; struct alias_map *new_map; new_size = maxmap == 0 ? 100 : 2 * maxmap; new_map = (struct alias_map *) realloc (map, (new_size * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ return -1; map = new_map; maxmap = new_size; return 0; } static int alias_compare (const struct alias_map *map1, const struct alias_map *map2) { #if defined _LIBC || defined HAVE_STRCASECMP return strcasecmp (map1->alias, map2->alias); #else const unsigned char *p1 = (const unsigned char *) map1->alias; const unsigned char *p2 = (const unsigned char *) map2->alias; unsigned char c1, c2; if (p1 == p2) return 0; do { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ c1 = isupper (*p1) ? tolower (*p1) : *p1; c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; #endif } gnupg-1.4.20/intl/dcgettext.c0000644000175000017500000000332412635262326012755 00000000000000/* Implementation of the dcgettext(3) function. Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext # define DCIGETTEXT __dcigettext #else # define DCGETTEXT libintl_dcgettext # define DCIGETTEXT libintl_dcigettext #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCGETTEXT (const char *domainname, const char *msgid, int category) { return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ INTDEF(__dcgettext) weak_alias (__dcgettext, dcgettext); #endif gnupg-1.4.20/intl/printf.c0000644000175000017500000002411712635262326012267 00000000000000/* Formatted output to strings, using POSIX/XSI format strings with positions. Copyright (C) 2003, 2006-2007, 2009-2011 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #if !HAVE_POSIX_PRINTF #include #include #include #include /* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */ #ifndef EOVERFLOW # define EOVERFLOW E2BIG #endif /* When building a DLL, we must export some functions. Note that because the functions are only defined for binary backward compatibility, we don't need to use __declspec(dllimport) in any case. */ #if HAVE_VISIBILITY && BUILDING_DLL # define DLL_EXPORTED __attribute__((__visibility__("default"))) #elif defined _MSC_VER && BUILDING_DLL # define DLL_EXPORTED __declspec(dllexport) #else # define DLL_EXPORTED #endif #define STATIC static /* This needs to be consistent with libgnuintl.in.h. */ #if defined __NetBSD__ || defined __BEOS__ || defined __CYGWIN__ || defined __MINGW32__ /* Don't break __attribute__((format(printf,M,N))). This redefinition is only possible because the libc in NetBSD, Cygwin, mingw does not have a function __printf__. */ # define libintl_printf __printf__ #endif /* Define auxiliary functions declared in "printf-args.h". */ #include "printf-args.c" /* Define auxiliary functions declared in "printf-parse.h". */ #include "printf-parse.c" /* Define functions declared in "vasnprintf.h". */ #define vasnprintf libintl_vasnprintf #include "vasnprintf.c" #if 0 /* not needed */ #define asnprintf libintl_asnprintf #include "asnprintf.c" #endif DLL_EXPORTED int libintl_vfprintf (FILE *stream, const char *format, va_list args) { if (strchr (format, '$') == NULL) return vfprintf (stream, format, args); else { size_t length; char *result = libintl_vasnprintf (NULL, &length, format, args); int retval = -1; if (result != NULL) { size_t written = fwrite (result, 1, length, stream); free (result); if (written == length) { if (length > INT_MAX) errno = EOVERFLOW; else retval = length; } } return retval; } } DLL_EXPORTED int libintl_fprintf (FILE *stream, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vfprintf (stream, format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vprintf (const char *format, va_list args) { return libintl_vfprintf (stdout, format, args); } DLL_EXPORTED int libintl_printf (const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vprintf (format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vsprintf (char *resultbuf, const char *format, va_list args) { if (strchr (format, '$') == NULL) return vsprintf (resultbuf, format, args); else { size_t length = (size_t) ~0 / (4 * sizeof (char)); char *result = libintl_vasnprintf (resultbuf, &length, format, args); if (result != resultbuf) { free (result); return -1; } if (length > INT_MAX) { errno = EOVERFLOW; return -1; } else return length; } } DLL_EXPORTED int libintl_sprintf (char *resultbuf, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vsprintf (resultbuf, format, args); va_end (args); return retval; } #if HAVE_SNPRINTF # if HAVE_DECL__SNPRINTF /* Windows. The mingw function vsnprintf() has fewer bugs than the MSVCRT function _vsnprintf(), so prefer that. */ # if defined __MINGW32__ # define system_vsnprintf vsnprintf # else # define system_vsnprintf _vsnprintf # endif # else /* Unix. */ # define system_vsnprintf vsnprintf # endif DLL_EXPORTED int libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args) { if (strchr (format, '$') == NULL) return system_vsnprintf (resultbuf, length, format, args); else { size_t maxlength = length; char *result = libintl_vasnprintf (resultbuf, &length, format, args); if (result == NULL) return -1; if (result != resultbuf) { if (maxlength > 0) { size_t pruned_length = (length < maxlength ? length : maxlength - 1); memcpy (resultbuf, result, pruned_length); resultbuf[pruned_length] = '\0'; } free (result); } if (length > INT_MAX) { errno = EOVERFLOW; return -1; } else return length; } } DLL_EXPORTED int libintl_snprintf (char *resultbuf, size_t length, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vsnprintf (resultbuf, length, format, args); va_end (args); return retval; } #endif #if HAVE_ASPRINTF DLL_EXPORTED int libintl_vasprintf (char **resultp, const char *format, va_list args) { size_t length; char *result = libintl_vasnprintf (NULL, &length, format, args); if (result == NULL) return -1; if (length > INT_MAX) { free (result); errno = EOVERFLOW; return -1; } *resultp = result; return length; } DLL_EXPORTED int libintl_asprintf (char **resultp, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vasprintf (resultp, format, args); va_end (args); return retval; } #endif #if HAVE_FWPRINTF #include #define WIDE_CHAR_VERSION 1 #include "wprintf-parse.h" /* Define auxiliary functions declared in "wprintf-parse.h". */ #define CHAR_T wchar_t #define DIRECTIVE wchar_t_directive #define DIRECTIVES wchar_t_directives #define PRINTF_PARSE wprintf_parse #include "printf-parse.c" /* Define functions declared in "vasnprintf.h". */ #define vasnwprintf libintl_vasnwprintf #include "vasnprintf.c" #if 0 /* not needed */ #define asnwprintf libintl_asnwprintf #include "asnprintf.c" #endif # if HAVE_DECL__SNWPRINTF /* Windows. The function vswprintf() has a different signature than on Unix; we use the function _vsnwprintf() instead. */ # define system_vswprintf _vsnwprintf # else /* Unix. */ # define system_vswprintf vswprintf # endif DLL_EXPORTED int libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args) { if (wcschr (format, '$') == NULL) return vfwprintf (stream, format, args); else { size_t length; wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args); int retval = -1; if (result != NULL) { size_t i; for (i = 0; i < length; i++) if (fputwc (result[i], stream) == WEOF) break; free (result); if (i == length) { if (length > INT_MAX) errno = EOVERFLOW; else retval = length; } } return retval; } } DLL_EXPORTED int libintl_fwprintf (FILE *stream, const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vfwprintf (stream, format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vwprintf (const wchar_t *format, va_list args) { return libintl_vfwprintf (stdout, format, args); } DLL_EXPORTED int libintl_wprintf (const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vwprintf (format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args) { if (wcschr (format, '$') == NULL) return system_vswprintf (resultbuf, length, format, args); else { size_t maxlength = length; wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args); if (result == NULL) return -1; if (result != resultbuf) { if (maxlength > 0) { size_t pruned_length = (length < maxlength ? length : maxlength - 1); memcpy (resultbuf, result, pruned_length * sizeof (wchar_t)); resultbuf[pruned_length] = 0; } free (result); /* Unlike vsnprintf, which has to return the number of character that would have been produced if the resultbuf had been sufficiently large, the vswprintf function has to return a negative value if the resultbuf was not sufficiently large. */ if (length >= maxlength) return -1; } if (length > INT_MAX) { errno = EOVERFLOW; return -1; } else return length; } } DLL_EXPORTED int libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vswprintf (resultbuf, length, format, args); va_end (args); return retval; } #endif #endif gnupg-1.4.20/intl/tsearch.h0000644000175000017500000000535712635262326012430 00000000000000/* Binary tree data structure. Copyright (C) 2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _TSEARCH_H #define _TSEARCH_H #if HAVE_TSEARCH /* Get tseach(), tfind(), tdelete(), twalk() declarations. */ #include #else #ifdef __cplusplus extern "C" { #endif /* See , for details. */ typedef enum { preorder, postorder, endorder, leaf } VISIT; /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is returned. Otherwise, a new element equal to KEY is inserted in the tree and is returned. */ extern void * tsearch (const void *key, void **vrootp, int (*compar) (const void *, const void *)); /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is returned. Otherwise, NULL is returned. */ extern void * tfind (const void *key, void *const *vrootp, int (*compar) (const void *, const void *)); /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is removed from the tree, and its parent node is returned. Otherwise, NULL is returned. */ extern void * tdelete (const void *key, void **vrootp, int (*compar) (const void *, const void *)); /* Perform a depth-first, left-to-right traversal of the tree VROOT. The ACTION function is called: - for non-leaf nodes: 3 times, before the left subtree traversal, after the left subtree traversal but before the right subtree traversal, and after the right subtree traversal, - for leaf nodes: once. The arguments passed to ACTION are: 1. the node; it can be casted to a 'const void * const *', i.e. into a pointer to the key, 2. an indicator which visit of the node this is, 3. the level of the node in the tree (0 for the root). */ extern void twalk (const void *vroot, void (*action) (const void *, VISIT, int)); #ifdef __cplusplus } #endif #endif #endif /* _TSEARCH_H */ gnupg-1.4.20/intl/textdomain.c0000644000175000017500000000737112635262326013144 00000000000000/* Implementation of the textdomain(3) function. Copyright (C) 1995-1998, 2000-2003, 2005-2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define __libc_rwlock_define # define gl_rwlock_wrlock __libc_rwlock_wrlock # define gl_rwlock_unlock __libc_rwlock_unlock #else # include "lock.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define TEXTDOMAIN __textdomain # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define TEXTDOMAIN libintl_textdomain #endif /* Lock variable to protect the global data in the gettext implementation. */ gl_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ char * TEXTDOMAIN (const char *domainname) { char *new_domain; char *old_domain; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; gl_rwlock_wrlock (_nl_state_lock); old_domain = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) { _nl_current_default_domain = _nl_default_default_domain; new_domain = (char *) _nl_current_default_domain; } else if (strcmp (domainname, old_domain) == 0) /* This can happen and people will use it to signal that some environment variable changed. */ new_domain = old_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP new_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; new_domain = (char *) malloc (len); if (new_domain != NULL) memcpy (new_domain, domainname, len); #endif if (new_domain != NULL) _nl_current_default_domain = new_domain; } /* We use this possibility to signal a change of the loaded catalogs since this is most likely the case and there is no other easy we to do it. Do it only when the call was successful. */ if (new_domain != NULL) { ++_nl_msg_cat_cntr; if (old_domain != new_domain && old_domain != _nl_default_default_domain) free (old_domain); } gl_rwlock_unlock (_nl_state_lock); return new_domain; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__textdomain, textdomain); #endif gnupg-1.4.20/intl/localcharset.h0000644000175000017500000000246612635262326013441 00000000000000/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003 Free Software Foundation, Inc. This file is part of the GNU CHARSET Library. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ gnupg-1.4.20/intl/config.charset0000755000175000017500000005517212635262326013451 00000000000000#! /bin/sh # Output a system dependent table of character encoding aliases. # # Copyright (C) 2000-2004, 2006-2010 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # # The table consists of lines of the form # ALIAS CANONICAL # # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". # ALIAS is compared in a case sensitive way. # # CANONICAL is the GNU canonical name for this character encoding. # It must be an encoding supported by libiconv. Support by GNU libc is # also desirable. CANONICAL is case insensitive. Usually an upper case # MIME charset name is preferred. # The current list of GNU canonical charset names is as follows. # # name MIME? used by which systems # (darwin = Mac OS X, woe32 = native Windows) # # ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin cygwin # ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-3 Y glibc solaris cygwin # ISO-8859-4 Y osf solaris freebsd netbsd openbsd darwin # ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin # ISO-8859-6 Y glibc aix hpux solaris cygwin # ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin # ISO-8859-8 Y glibc aix hpux osf solaris cygwin # ISO-8859-9 Y glibc aix hpux irix osf solaris darwin cygwin # ISO-8859-13 glibc netbsd openbsd darwin cygwin # ISO-8859-14 glibc cygwin # ISO-8859-15 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin # KOI8-R Y glibc solaris freebsd netbsd openbsd darwin # KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin # KOI8-T glibc # CP437 dos # CP775 dos # CP850 aix osf dos # CP852 dos # CP855 dos # CP856 aix # CP857 dos # CP861 dos # CP862 dos # CP864 dos # CP865 dos # CP866 freebsd netbsd openbsd darwin dos # CP869 dos # CP874 woe32 dos # CP922 aix # CP932 aix cygwin woe32 dos # CP943 aix # CP949 osf darwin woe32 dos # CP950 woe32 dos # CP1046 aix # CP1124 aix # CP1125 dos # CP1129 aix # CP1131 darwin # CP1250 woe32 # CP1251 glibc solaris netbsd openbsd darwin cygwin woe32 # CP1252 aix woe32 # CP1253 woe32 # CP1254 woe32 # CP1255 glibc woe32 # CP1256 woe32 # CP1257 woe32 # GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin # EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin # EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin # EUC-TW glibc aix hpux irix osf solaris netbsd # BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin # BIG5-HKSCS glibc solaris darwin # GBK glibc aix osf solaris darwin cygwin woe32 dos # GB18030 glibc solaris netbsd darwin # SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin # JOHAB glibc solaris woe32 # TIS-620 glibc aix hpux osf solaris cygwin # VISCII Y glibc # TCVN5712-1 glibc # ARMSCII-8 glibc darwin # GEORGIAN-PS glibc cygwin # PT154 glibc # HP-ROMAN8 hpux # HP-ARABIC8 hpux # HP-GREEK8 hpux # HP-HEBREW8 hpux # HP-TURKISH8 hpux # HP-KANA8 hpux # DEC-KANJI osf # DEC-HANYU osf # UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin # # Note: Names which are not marked as being a MIME name should not be used in # Internet protocols for information interchange (mail, news, etc.). # # Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications # must understand both names and treat them as equivalent. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM host="$1" os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` echo "# This file contains a table of character encoding aliases," echo "# suitable for operating system '${os}'." echo "# It was automatically generated from config.charset." # List of references, updated during installation: echo "# Packages using this file: " case "$os" in linux-gnulibc1*) # Linux libc5 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" echo "POSIX ASCII" for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ sv_FI sv_SE; do echo "$l ISO-8859-1" echo "$l.iso-8859-1 ISO-8859-1" echo "$l.iso-8859-15 ISO-8859-15" echo "$l.iso-8859-15@euro ISO-8859-15" echo "$l@euro ISO-8859-15" echo "$l.cp-437 CP437" echo "$l.cp-850 CP850" echo "$l.cp-1252 CP1252" echo "$l.cp-1252@euro CP1252" #echo "$l.atari-st ATARI-ST" # not a commonly used encoding echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ sl_SI sr sr_CS sr_YU; do echo "$l ISO-8859-2" echo "$l.iso-8859-2 ISO-8859-2" echo "$l.cp-852 CP852" echo "$l.cp-1250 CP1250" echo "$l.utf-8 UTF-8" done for l in mk mk_MK ru ru_RU; do echo "$l ISO-8859-5" echo "$l.iso-8859-5 ISO-8859-5" echo "$l.koi8-r KOI8-R" echo "$l.cp-866 CP866" echo "$l.cp-1251 CP1251" echo "$l.utf-8 UTF-8" done for l in ar ar_SA; do echo "$l ISO-8859-6" echo "$l.iso-8859-6 ISO-8859-6" echo "$l.cp-864 CP864" #echo "$l.cp-868 CP868" # not a commonly used encoding echo "$l.cp-1256 CP1256" echo "$l.utf-8 UTF-8" done for l in el el_GR gr gr_GR; do echo "$l ISO-8859-7" echo "$l.iso-8859-7 ISO-8859-7" echo "$l.cp-869 CP869" echo "$l.cp-1253 CP1253" echo "$l.cp-1253@euro CP1253" echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in he he_IL iw iw_IL; do echo "$l ISO-8859-8" echo "$l.iso-8859-8 ISO-8859-8" echo "$l.cp-862 CP862" echo "$l.cp-1255 CP1255" echo "$l.utf-8 UTF-8" done for l in tr tr_TR; do echo "$l ISO-8859-9" echo "$l.iso-8859-9 ISO-8859-9" echo "$l.cp-857 CP857" echo "$l.cp-1254 CP1254" echo "$l.utf-8 UTF-8" done for l in lt lt_LT lv lv_LV; do #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name echo "$l ISO-8859-13" done for l in ru_UA uk uk_UA; do echo "$l KOI8-U" done for l in zh zh_CN; do #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name echo "$l GB2312" done for l in ja ja_JP ja_JP.EUC; do echo "$l EUC-JP" done for l in ko ko_KR; do echo "$l EUC-KR" done for l in th th_TH; do echo "$l TIS-620" done for l in fa fa_IR; do #echo "$l ISIRI-3342" # a broken encoding echo "$l.utf-8 UTF-8" done ;; linux* | *-gnu*) # With glibc-2.1 or newer, we don't need any canonicalization, # because glibc has iconv and both glibc and libiconv support all # GNU canonical names directly. Therefore, the Makefile does not # need to install the alias file at all. # The following applies only to glibc-2.0.x and older libcs. echo "ISO_646.IRV:1983 ASCII" ;; aix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "IBM-850 CP850" echo "IBM-856 CP856" echo "IBM-921 ISO-8859-13" echo "IBM-922 CP922" echo "IBM-932 CP932" echo "IBM-943 CP943" echo "IBM-1046 CP1046" echo "IBM-1124 CP1124" echo "IBM-1129 CP1129" echo "IBM-1252 CP1252" echo "IBM-eucCN GB2312" echo "IBM-eucJP EUC-JP" echo "IBM-eucKR EUC-KR" echo "IBM-eucTW EUC-TW" echo "big5 BIG5" echo "GBK GBK" echo "TIS-620 TIS-620" echo "UTF-8 UTF-8" ;; hpux*) echo "iso88591 ISO-8859-1" echo "iso88592 ISO-8859-2" echo "iso88595 ISO-8859-5" echo "iso88596 ISO-8859-6" echo "iso88597 ISO-8859-7" echo "iso88598 ISO-8859-8" echo "iso88599 ISO-8859-9" echo "iso885915 ISO-8859-15" echo "roman8 HP-ROMAN8" echo "arabic8 HP-ARABIC8" echo "greek8 HP-GREEK8" echo "hebrew8 HP-HEBREW8" echo "turkish8 HP-TURKISH8" echo "kana8 HP-KANA8" echo "tis620 TIS-620" echo "big5 BIG5" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "hp15CN GB2312" #echo "ccdc ?" # what is this? echo "SJIS SHIFT_JIS" echo "utf8 UTF-8" ;; irix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" ;; osf*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "cp850 CP850" echo "big5 BIG5" echo "dechanyu DEC-HANYU" echo "dechanzi GB2312" echo "deckanji DEC-KANJI" echo "deckorean EUC-KR" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "GBK GBK" echo "KSC5601 CP949" echo "sdeckanji EUC-JP" echo "SJIS SHIFT_JIS" echo "TACTIS TIS-620" echo "UTF-8 UTF-8" ;; solaris*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-3 ISO-8859-3" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "koi8-r KOI8-R" echo "ansi-1251 CP1251" echo "BIG5 BIG5" echo "Big5-HKSCS BIG5-HKSCS" echo "gb2312 GB2312" echo "GBK GBK" echo "GB18030 GB18030" echo "cns11643 EUC-TW" echo "5601 EUC-KR" echo "ko_KR.johap92 JOHAB" echo "eucJP EUC-JP" echo "PCK SHIFT_JIS" echo "TIS620.2533 TIS-620" #echo "sun_eu_greek ?" # what is this? echo "UTF-8 UTF-8" ;; freebsd* | os2*) # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just # reuse FreeBSD's locale data for OS/2. echo "C ASCII" echo "US-ASCII ASCII" for l in la_LN lt_LN; do echo "$l.ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do echo "$l.ISO_8859-1 ISO-8859-1" echo "$l.DIS_8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do echo "$l.ISO_8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO_8859-4 ISO-8859-4" done for l in ru_RU ru_SU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO_8859-5 ISO-8859-5" echo "$l.CP866 CP866" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ja_JP.Shift_JIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; netbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "BIG5 BIG5" echo "SJIS SHIFT_JIS" ;; openbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" ;; darwin[56]*) # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" for l in en_AU en_CA en_GB en_US la_LN; do echo "$l.US-ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ nl_NL no_NO pt_PT sv_SE; do echo "$l ISO-8859-1" echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in la_LN; do echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do echo "$l.ISO8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO8859-4 ISO-8859-4" done for l in ru_RU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO8859-5 ISO-8859-5" echo "$l.CP866 CP866" done for l in bg_BG; do echo "$l.CP1251 CP1251" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; darwin*) # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is # useless: # - It returns the empty string when LANG is set to a locale of the # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 # LC_CTYPE file. # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. # - The documentation says: # "... all code that calls BSD system routines should ensure # that the const *char parameters of these routines are in UTF-8 # encoding. All BSD system functions expect their string # parameters to be in UTF-8 encoding and nothing else." # It also says # "An additional caveat is that string parameters for files, # paths, and other file-system entities must be in canonical # UTF-8. In a canonical UTF-8 Unicode string, all decomposable # characters are decomposed ..." # but this is not true: You can pass non-decomposed UTF-8 strings # to file system functions, and it is the OS which will convert # them to decomposed UTF-8 before accessing the file system. # - The Apple Terminal application displays UTF-8 by default. # - However, other applications are free to use different encodings: # - xterm uses ISO-8859-1 by default. # - TextEdit uses MacRoman by default. # We prefer UTF-8 over decomposed UTF-8-MAC because one should # minimize the use of decomposed Unicode. Unfortunately, through the # Darwin file system, decomposed UTF-8 strings are leaked into user # space nevertheless. # Then there are also the locales with encodings other than US-ASCII # and UTF-8. These locales can be occasionally useful to users (e.g. # when grepping through ISO-8859-1 encoded text files), when all their # file names are in US-ASCII. echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" echo "KOI8-R KOI8-R" echo "KOI8-U KOI8-U" echo "CP866 CP866" echo "CP949 CP949" echo "CP1131 CP1131" echo "CP1251 CP1251" echo "eucCN GB2312" echo "GB2312 GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "Big5 BIG5" echo "Big5HKSCS BIG5-HKSCS" echo "GBK GBK" echo "GB18030 GB18030" echo "SJIS SHIFT_JIS" echo "ARMSCII-8 ARMSCII-8" echo "PT154 PT154" #echo "ISCII-DEV ?" echo "* UTF-8" ;; beos* | haiku*) # BeOS and Haiku have a single locale, and it has UTF-8 encoding. echo "* UTF-8" ;; msdosdjgpp*) # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "#" echo "# The encodings given here may not all be correct." echo "# If you find that the encoding given for your language and" echo "# country is not the one your DOS machine actually uses, just" echo "# correct it in this file, and send a mail to" echo "# Juan Manuel Guerrero " echo "# and Bruno Haible ." echo "#" echo "C ASCII" # ISO-8859-1 languages echo "ca CP850" echo "ca_ES CP850" echo "da CP865" # not CP850 ?? echo "da_DK CP865" # not CP850 ?? echo "de CP850" echo "de_AT CP850" echo "de_CH CP850" echo "de_DE CP850" echo "en CP850" echo "en_AU CP850" # not CP437 ?? echo "en_CA CP850" echo "en_GB CP850" echo "en_NZ CP437" echo "en_US CP437" echo "en_ZA CP850" # not CP437 ?? echo "es CP850" echo "es_AR CP850" echo "es_BO CP850" echo "es_CL CP850" echo "es_CO CP850" echo "es_CR CP850" echo "es_CU CP850" echo "es_DO CP850" echo "es_EC CP850" echo "es_ES CP850" echo "es_GT CP850" echo "es_HN CP850" echo "es_MX CP850" echo "es_NI CP850" echo "es_PA CP850" echo "es_PY CP850" echo "es_PE CP850" echo "es_SV CP850" echo "es_UY CP850" echo "es_VE CP850" echo "et CP850" echo "et_EE CP850" echo "eu CP850" echo "eu_ES CP850" echo "fi CP850" echo "fi_FI CP850" echo "fr CP850" echo "fr_BE CP850" echo "fr_CA CP850" echo "fr_CH CP850" echo "fr_FR CP850" echo "ga CP850" echo "ga_IE CP850" echo "gd CP850" echo "gd_GB CP850" echo "gl CP850" echo "gl_ES CP850" echo "id CP850" # not CP437 ?? echo "id_ID CP850" # not CP437 ?? echo "is CP861" # not CP850 ?? echo "is_IS CP861" # not CP850 ?? echo "it CP850" echo "it_CH CP850" echo "it_IT CP850" echo "lt CP775" echo "lt_LT CP775" echo "lv CP775" echo "lv_LV CP775" echo "nb CP865" # not CP850 ?? echo "nb_NO CP865" # not CP850 ?? echo "nl CP850" echo "nl_BE CP850" echo "nl_NL CP850" echo "nn CP865" # not CP850 ?? echo "nn_NO CP865" # not CP850 ?? echo "no CP865" # not CP850 ?? echo "no_NO CP865" # not CP850 ?? echo "pt CP850" echo "pt_BR CP850" echo "pt_PT CP850" echo "sv CP850" echo "sv_SE CP850" # ISO-8859-2 languages echo "cs CP852" echo "cs_CZ CP852" echo "hr CP852" echo "hr_HR CP852" echo "hu CP852" echo "hu_HU CP852" echo "pl CP852" echo "pl_PL CP852" echo "ro CP852" echo "ro_RO CP852" echo "sk CP852" echo "sk_SK CP852" echo "sl CP852" echo "sl_SI CP852" echo "sq CP852" echo "sq_AL CP852" echo "sr CP852" # CP852 or CP866 or CP855 ?? echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? # ISO-8859-3 languages echo "mt CP850" echo "mt_MT CP850" # ISO-8859-5 languages echo "be CP866" echo "be_BE CP866" echo "bg CP866" # not CP855 ?? echo "bg_BG CP866" # not CP855 ?? echo "mk CP866" # not CP855 ?? echo "mk_MK CP866" # not CP855 ?? echo "ru CP866" echo "ru_RU CP866" echo "uk CP1125" echo "uk_UA CP1125" # ISO-8859-6 languages echo "ar CP864" echo "ar_AE CP864" echo "ar_DZ CP864" echo "ar_EG CP864" echo "ar_IQ CP864" echo "ar_IR CP864" echo "ar_JO CP864" echo "ar_KW CP864" echo "ar_MA CP864" echo "ar_OM CP864" echo "ar_QA CP864" echo "ar_SA CP864" echo "ar_SY CP864" # ISO-8859-7 languages echo "el CP869" echo "el_GR CP869" # ISO-8859-8 languages echo "he CP862" echo "he_IL CP862" # ISO-8859-9 languages echo "tr CP857" echo "tr_TR CP857" # Japanese echo "ja CP932" echo "ja_JP CP932" # Chinese echo "zh_CN GBK" echo "zh_TW CP950" # not CP938 ?? # Korean echo "kr CP949" # not CP934 ?? echo "kr_KR CP949" # not CP934 ?? # Thai echo "th CP874" echo "th_TH CP874" # Other echo "eo CP850" echo "eo_EO CP850" ;; esac gnupg-1.4.20/intl/lock.h0000644000175000017500000010672112635262326011724 00000000000000/* Locking in multithreaded situations. Copyright (C) 2005-2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other synchronization primitives. Normal (non-recursive) locks: Type: gl_lock_t Declaration: gl_lock_define(extern, name) Initializer: gl_lock_define_initialized(, name) Initialization: gl_lock_init (name); Taking the lock: gl_lock_lock (name); Releasing the lock: gl_lock_unlock (name); De-initialization: gl_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_lock_init (&name); Taking the lock: err = glthread_lock_lock (&name); Releasing the lock: err = glthread_lock_unlock (&name); De-initialization: err = glthread_lock_destroy (&name); Read-Write (non-recursive) locks: Type: gl_rwlock_t Declaration: gl_rwlock_define(extern, name) Initializer: gl_rwlock_define_initialized(, name) Initialization: gl_rwlock_init (name); Taking the lock: gl_rwlock_rdlock (name); gl_rwlock_wrlock (name); Releasing the lock: gl_rwlock_unlock (name); De-initialization: gl_rwlock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_rwlock_init (&name); Taking the lock: err = glthread_rwlock_rdlock (&name); err = glthread_rwlock_wrlock (&name); Releasing the lock: err = glthread_rwlock_unlock (&name); De-initialization: err = glthread_rwlock_destroy (&name); Recursive locks: Type: gl_recursive_lock_t Declaration: gl_recursive_lock_define(extern, name) Initializer: gl_recursive_lock_define_initialized(, name) Initialization: gl_recursive_lock_init (name); Taking the lock: gl_recursive_lock_lock (name); Releasing the lock: gl_recursive_lock_unlock (name); De-initialization: gl_recursive_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_recursive_lock_init (&name); Taking the lock: err = glthread_recursive_lock_lock (&name); Releasing the lock: err = glthread_recursive_lock_unlock (&name); De-initialization: err = glthread_recursive_lock_destroy (&name); Once-only execution: Type: gl_once_t Initializer: gl_once_define(extern, name) Execution: gl_once (name, initfunction); Equivalent functions with control of error handling: Execution: err = glthread_once (&name, initfunction); */ #ifndef _LOCK_H #define _LOCK_H #include #include /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # pragma weak pthread_rwlock_init # pragma weak pthread_rwlock_rdlock # pragma weak pthread_rwlock_wrlock # pragma weak pthread_rwlock_unlock # pragma weak pthread_rwlock_destroy # pragma weak pthread_once # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_cancel # define pthread_in_use() (pthread_cancel != NULL) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTHREAD_MUTEX_INITIALIZER # define glthread_lock_init(LOCK) \ (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) # define glthread_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK # ifdef PTHREAD_RWLOCK_INITIALIZER typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) # else typedef struct { int initialized; pthread_mutex_t guard; /* protects the initialization */ pthread_rwlock_t rwlock; /* read-write lock */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0, PTHREAD_MUTEX_INITIALIZER } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif # else typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP typedef pthread_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER # else # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); # else typedef struct { pthread_mutex_t recmutex; /* recursive mutex */ pthread_mutex_t guard; /* protects the initialization */ int initialized; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif # else /* Old versions of POSIX threads on Solaris did not have recursive locks. We have to implement them ourselves. */ typedef struct { pthread_mutex_t mutex; pthread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif /* -------------------------- gl_once_t datatype -------------------------- */ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ # include # ifdef __cplusplus extern "C" { # endif # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_mutex_init # pragma weak pth_mutex_acquire # pragma weak pth_mutex_release # pragma weak pth_rwlock_init # pragma weak pth_rwlock_acquire # pragma weak pth_rwlock_release # pragma weak pth_once # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pth_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTH_MUTEX_INIT # define glthread_lock_init(LOCK) \ (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) # define glthread_lock_lock(LOCK) \ (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) # define glthread_lock_unlock(LOCK) \ (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) # define glthread_lock_destroy(LOCK) \ ((void)(LOCK), 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef pth_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ PTH_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ (pth_in_use () && !pth_rwlock_init (LOCK) ? errno : 0) # define glthread_rwlock_rdlock(LOCK) \ (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RD, 0, NULL) ? errno : 0) # define glthread_rwlock_wrlock(LOCK) \ (pth_in_use () && !pth_rwlock_acquire (LOCK, PTH_RWLOCK_RW, 0, NULL) ? errno : 0) # define glthread_rwlock_unlock(LOCK) \ (pth_in_use () && !pth_rwlock_release (LOCK) ? errno : 0) # define glthread_rwlock_destroy(LOCK) \ ((void)(LOCK), 0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* In Pth, mutexes are recursive by default. */ typedef pth_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ PTH_MUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ (pth_in_use () && !pth_mutex_init (LOCK) ? errno : 0) # define glthread_recursive_lock_lock(LOCK) \ (pth_in_use () && !pth_mutex_acquire (LOCK, 0, NULL) ? errno : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pth_in_use () && !pth_mutex_release (LOCK) ? errno : 0) # define glthread_recursive_lock_destroy(LOCK) \ ((void)(LOCK), 0) /* -------------------------- gl_once_t datatype -------------------------- */ typedef pth_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pth_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (pth_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include # include # ifdef __cplusplus extern "C" { # endif # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak mutex_init # pragma weak mutex_lock # pragma weak mutex_unlock # pragma weak mutex_destroy # pragma weak rwlock_init # pragma weak rw_rdlock # pragma weak rw_wrlock # pragma weak rw_unlock # pragma weak rwlock_destroy # pragma weak thr_self # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ DEFAULTMUTEX # define glthread_lock_init(LOCK) \ (thread_in_use () ? mutex_init (LOCK, USYNC_THREAD, NULL) : 0) # define glthread_lock_lock(LOCK) \ (thread_in_use () ? mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (thread_in_use () ? mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (thread_in_use () ? mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ DEFAULTRWLOCK # define glthread_rwlock_init(LOCK) \ (thread_in_use () ? rwlock_init (LOCK, USYNC_THREAD, NULL) : 0) # define glthread_rwlock_rdlock(LOCK) \ (thread_in_use () ? rw_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (thread_in_use () ? rw_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (thread_in_use () ? rw_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (thread_in_use () ? rwlock_destroy (LOCK) : 0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* Old Solaris threads did not have recursive locks. We have to implement them ourselves. */ typedef struct { mutex_t mutex; thread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { DEFAULTMUTEX, (thread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (thread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (thread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (thread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (thread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; mutex_t mutex; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX }; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (thread_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (gl_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the native Windows Event, Mutex, Semaphore types, because - we need only to synchronize inside a single process (address space), not inter-process locking, - we don't need to support trylock operations. (TryEnterCriticalSection does not work on Windows 95/98/ME. Packages that need trylock usually define their own mutex type.) */ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ typedef struct { volatile int done; volatile long started; } gl_spinlock_t; /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ { { 0, -1 } } # define glthread_lock_init(LOCK) \ (glthread_lock_init_func (LOCK), 0) # define glthread_lock_lock(LOCK) \ glthread_lock_lock_func (LOCK) # define glthread_lock_unlock(LOCK) \ glthread_lock_unlock_func (LOCK) # define glthread_lock_destroy(LOCK) \ glthread_lock_destroy_func (LOCK) extern void glthread_lock_init_func (gl_lock_t *lock); extern int glthread_lock_lock_func (gl_lock_t *lock); extern int glthread_lock_unlock_func (gl_lock_t *lock); extern int glthread_lock_destroy_func (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* It is impossible to implement read-write locks using plain locks, without introducing an extra thread dedicated to managing read-write locks. Therefore here we need to use the low-level Event type. */ typedef struct { HANDLE *array; /* array of waiting threads, each represented by an event */ unsigned int count; /* number of waiting threads */ unsigned int alloc; /* length of allocated array */ unsigned int offset; /* index of first waiting thread in array */ } gl_carray_waitqueue_t; typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ gl_carray_waitqueue_t waiting_readers; /* waiting readers */ gl_carray_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { { 0, -1 } } # define glthread_rwlock_init(LOCK) \ (glthread_rwlock_init_func (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ glthread_rwlock_rdlock_func (LOCK) # define glthread_rwlock_wrlock(LOCK) \ glthread_rwlock_wrlock_func (LOCK) # define glthread_rwlock_unlock(LOCK) \ glthread_rwlock_unlock_func (LOCK) # define glthread_rwlock_destroy(LOCK) \ glthread_rwlock_destroy_func (LOCK) extern void glthread_rwlock_init_func (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_func (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_func (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* The native Windows documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { { 0, -1 }, 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (glthread_recursive_lock_init_func (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ glthread_recursive_lock_lock_func (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ glthread_recursive_lock_unlock_func (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ glthread_recursive_lock_destroy_func (LOCK) extern void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; volatile long started; CRITICAL_SECTION lock; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { -1, -1 }; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (glthread_once_func (ONCE_CONTROL, INITFUNCTION), 0) extern void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef int gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) # define gl_lock_define_initialized(STORAGECLASS, NAME) # define glthread_lock_init(NAME) 0 # define glthread_lock_lock(NAME) 0 # define glthread_lock_unlock(NAME) 0 # define glthread_lock_destroy(NAME) 0 /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef int gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) # define gl_rwlock_define_initialized(STORAGECLASS, NAME) # define glthread_rwlock_init(NAME) 0 # define glthread_rwlock_rdlock(NAME) 0 # define glthread_rwlock_wrlock(NAME) 0 # define glthread_rwlock_unlock(NAME) 0 # define glthread_rwlock_destroy(NAME) 0 /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef int gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) # define glthread_recursive_lock_init(NAME) 0 # define glthread_recursive_lock_lock(NAME) 0 # define glthread_recursive_lock_unlock(NAME) 0 # define glthread_recursive_lock_destroy(NAME) 0 /* -------------------------- gl_once_t datatype -------------------------- */ typedef int gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = 0; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) #endif /* ========================================================================= */ /* Macros with built-in error handling. */ /* -------------------------- gl_lock_t datatype -------------------------- */ #define gl_lock_init(NAME) \ do \ { \ if (glthread_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_lock(NAME) \ do \ { \ if (glthread_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_unlock(NAME) \ do \ { \ if (glthread_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_destroy(NAME) \ do \ { \ if (glthread_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ #define gl_rwlock_init(NAME) \ do \ { \ if (glthread_rwlock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_rdlock(NAME) \ do \ { \ if (glthread_rwlock_rdlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_wrlock(NAME) \ do \ { \ if (glthread_rwlock_wrlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_unlock(NAME) \ do \ { \ if (glthread_rwlock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_destroy(NAME) \ do \ { \ if (glthread_rwlock_destroy (&NAME)) \ abort (); \ } \ while (0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ #define gl_recursive_lock_init(NAME) \ do \ { \ if (glthread_recursive_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_lock(NAME) \ do \ { \ if (glthread_recursive_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_unlock(NAME) \ do \ { \ if (glthread_recursive_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_destroy(NAME) \ do \ { \ if (glthread_recursive_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* -------------------------- gl_once_t datatype -------------------------- */ #define gl_once(NAME, INITFUNCTION) \ do \ { \ if (glthread_once (&NAME, INITFUNCTION)) \ abort (); \ } \ while (0) /* ========================================================================= */ #endif /* _LOCK_H */ gnupg-1.4.20/intl/tsearch.c0000644000175000017500000005174412635262326012424 00000000000000/* Copyright (C) 1995, 1996, 1997, 2000, 2006 Free Software Foundation, Inc. Contributed by Bernd Schmidt , 1997. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Tree search for red/black trees. The algorithm for adding nodes is taken from one of the many "Algorithms" books by Robert Sedgewick, although the implementation differs. The algorithm for deleting nodes can probably be found in a book named "Introduction to Algorithms" by Cormen/Leiserson/Rivest. At least that's the book that my professor took most algorithms from during the "Data Structures" course... Totally public domain. */ /* Red/black trees are binary trees in which the edges are colored either red or black. They have the following properties: 1. The number of black edges on every path from the root to a leaf is constant. 2. No two red edges are adjacent. Therefore there is an upper bound on the length of every path, it's O(log n) where n is the number of nodes in the tree. No path can be longer than 1+2*P where P is the length of the shortest path in the tree. Useful for the implementation: 3. If one of the children of a node is NULL, then the other one is red (if it exists). In the implementation, not the edges are colored, but the nodes. The color interpreted as the color of the edge leading to this node. The color is meaningless for the root node, but we color the root node black for convenience. All added nodes are red initially. Adding to a red/black tree is rather easy. The right place is searched with a usual binary tree search. Additionally, whenever a node N is reached that has two red successors, the successors are colored black and the node itself colored red. This moves red edges up the tree where they pose less of a problem once we get to really insert the new node. Changing N's color to red may violate rule 2, however, so rotations may become necessary to restore the invariants. Adding a new red leaf may violate the same rule, so afterwards an additional check is run and the tree possibly rotated. Deleting is hairy. There are mainly two nodes involved: the node to be deleted (n1), and another node that is to be unchained from the tree (n2). If n1 has a successor (the node with a smallest key that is larger than n1), then the successor becomes n2 and its contents are copied into n1, otherwise n1 becomes n2. Unchaining a node may violate rule 1: if n2 is black, one subtree is missing one black edge afterwards. The algorithm must try to move this error upwards towards the root, so that the subtree that does not have enough black edges becomes the whole tree. Once that happens, the error has disappeared. It may not be necessary to go all the way up, since it is possible that rotations and recoloring can fix the error before that. Although the deletion algorithm must walk upwards through the tree, we do not store parent pointers in the nodes. Instead, delete allocates a small array of parent pointers and fills it while descending the tree. Since we know that the length of a path is O(log n), where n is the number of nodes, this is likely to use less memory. */ /* Tree rotations look like this: A C / \ / \ B C A G / \ / \ --> / \ D E F G B F / \ D E In this case, A has been rotated left. This preserves the ordering of the binary tree. */ #include /* Specification. */ #ifdef IN_LIBINTL # include "tsearch.h" #else # include #endif #include typedef int (*__compar_fn_t) (const void *, const void *); typedef void (*__action_fn_t) (const void *, VISIT, int); #ifndef weak_alias # define __tsearch tsearch # define __tfind tfind # define __tdelete tdelete # define __twalk twalk #endif #ifndef internal_function /* Inside GNU libc we mark some function in a special way. In other environments simply ignore the marking. */ # define internal_function #endif typedef struct node_t { /* Callers expect this to be the first element in the structure - do not move! */ const void *key; struct node_t *left; struct node_t *right; unsigned int red:1; } *node; typedef const struct node_t *const_node; #undef DEBUGGING #ifdef DEBUGGING /* Routines to check tree invariants. */ #include #define CHECK_TREE(a) check_tree(a) static void check_tree_recurse (node p, int d_sofar, int d_total) { if (p == NULL) { assert (d_sofar == d_total); return; } check_tree_recurse (p->left, d_sofar + (p->left && !p->left->red), d_total); check_tree_recurse (p->right, d_sofar + (p->right && !p->right->red), d_total); if (p->left) assert (!(p->left->red && p->red)); if (p->right) assert (!(p->right->red && p->red)); } static void check_tree (node root) { int cnt = 0; node p; if (root == NULL) return; root->red = 0; for(p = root->left; p; p = p->left) cnt += !p->red; check_tree_recurse (root, 0, cnt); } #else #define CHECK_TREE(a) #endif /* Possibly "split" a node with two red successors, and/or fix up two red edges in a row. ROOTP is a pointer to the lowest node we visited, PARENTP and GPARENTP pointers to its parent/grandparent. P_R and GP_R contain the comparison values that determined which way was taken in the tree to reach ROOTP. MODE is 1 if we need not do the split, but must check for two red edges between GPARENTP and ROOTP. */ static void maybe_split_for_insert (node *rootp, node *parentp, node *gparentp, int p_r, int gp_r, int mode) { node root = *rootp; node *rp, *lp; rp = &(*rootp)->right; lp = &(*rootp)->left; /* See if we have to split this node (both successors red). */ if (mode == 1 || ((*rp) != NULL && (*lp) != NULL && (*rp)->red && (*lp)->red)) { /* This node becomes red, its successors black. */ root->red = 1; if (*rp) (*rp)->red = 0; if (*lp) (*lp)->red = 0; /* If the parent of this node is also red, we have to do rotations. */ if (parentp != NULL && (*parentp)->red) { node gp = *gparentp; node p = *parentp; /* There are two main cases: 1. The edge types (left or right) of the two red edges differ. 2. Both red edges are of the same type. There exist two symmetries of each case, so there is a total of 4 cases. */ if ((p_r > 0) != (gp_r > 0)) { /* Put the child at the top of the tree, with its parent and grandparent as successors. */ p->red = 1; gp->red = 1; root->red = 0; if (p_r < 0) { /* Child is left of parent. */ p->left = *rp; *rp = p; gp->right = *lp; *lp = gp; } else { /* Child is right of parent. */ p->right = *lp; *lp = p; gp->left = *rp; *rp = gp; } *gparentp = root; } else { *gparentp = *parentp; /* Parent becomes the top of the tree, grandparent and child are its successors. */ p->red = 0; gp->red = 1; if (p_r < 0) { /* Left edges. */ gp->left = p->right; p->right = gp; } else { /* Right edges. */ gp->right = p->left; p->left = gp; } } } } } /* Find or insert datum into search tree. KEY is the key to be located, ROOTP is the address of tree root, COMPAR the ordering function. */ void * __tsearch (const void *key, void **vrootp, __compar_fn_t compar) { node q; node *parentp = NULL, *gparentp = NULL; node *rootp = (node *) vrootp; node *nextp; int r = 0, p_r = 0, gp_r = 0; /* No they might not, Mr Compiler. */ if (rootp == NULL) return NULL; /* This saves some additional tests below. */ if (*rootp != NULL) (*rootp)->red = 0; CHECK_TREE (*rootp); nextp = rootp; while (*nextp != NULL) { node root = *rootp; r = (*compar) (key, root->key); if (r == 0) return root; maybe_split_for_insert (rootp, parentp, gparentp, p_r, gp_r, 0); /* If that did any rotations, parentp and gparentp are now garbage. That doesn't matter, because the values they contain are never used again in that case. */ nextp = r < 0 ? &root->left : &root->right; if (*nextp == NULL) break; gparentp = parentp; parentp = rootp; rootp = nextp; gp_r = p_r; p_r = r; } q = (struct node_t *) malloc (sizeof (struct node_t)); if (q != NULL) { *nextp = q; /* link new node to old */ q->key = key; /* initialize new node */ q->red = 1; q->left = q->right = NULL; if (nextp != rootp) /* There may be two red edges in a row now, which we must avoid by rotating the tree. */ maybe_split_for_insert (nextp, rootp, parentp, r, p_r, 1); } return q; } #ifdef weak_alias weak_alias (__tsearch, tsearch) #endif /* Find datum in search tree. KEY is the key to be located, ROOTP is the address of tree root, COMPAR the ordering function. */ void * __tfind (key, vrootp, compar) const void *key; void *const *vrootp; __compar_fn_t compar; { node *rootp = (node *) vrootp; if (rootp == NULL) return NULL; CHECK_TREE (*rootp); while (*rootp != NULL) { node root = *rootp; int r; r = (*compar) (key, root->key); if (r == 0) return root; rootp = r < 0 ? &root->left : &root->right; } return NULL; } #ifdef weak_alias weak_alias (__tfind, tfind) #endif /* Delete node with given key. KEY is the key to be deleted, ROOTP is the address of the root of tree, COMPAR the comparison function. */ void * __tdelete (const void *key, void **vrootp, __compar_fn_t compar) { node p, q, r, retval; int cmp; node *rootp = (node *) vrootp; node root, unchained; /* Stack of nodes so we remember the parents without recursion. It's _very_ unlikely that there are paths longer than 40 nodes. The tree would need to have around 250.000 nodes. */ int stacksize = 100; int sp = 0; node *nodestack[100]; if (rootp == NULL) return NULL; p = *rootp; if (p == NULL) return NULL; CHECK_TREE (p); while ((cmp = (*compar) (key, (*rootp)->key)) != 0) { if (sp == stacksize) abort (); nodestack[sp++] = rootp; p = *rootp; rootp = ((cmp < 0) ? &(*rootp)->left : &(*rootp)->right); if (*rootp == NULL) return NULL; } /* This is bogus if the node to be deleted is the root... this routine really should return an integer with 0 for success, -1 for failure and errno = ESRCH or something. */ retval = p; /* We don't unchain the node we want to delete. Instead, we overwrite it with its successor and unchain the successor. If there is no successor, we really unchain the node to be deleted. */ root = *rootp; r = root->right; q = root->left; if (q == NULL || r == NULL) unchained = root; else { node *parent = rootp, *up = &root->right; for (;;) { if (sp == stacksize) abort (); nodestack[sp++] = parent; parent = up; if ((*up)->left == NULL) break; up = &(*up)->left; } unchained = *up; } /* We know that either the left or right successor of UNCHAINED is NULL. R becomes the other one, it is chained into the parent of UNCHAINED. */ r = unchained->left; if (r == NULL) r = unchained->right; if (sp == 0) *rootp = r; else { q = *nodestack[sp-1]; if (unchained == q->right) q->right = r; else q->left = r; } if (unchained != root) root->key = unchained->key; if (!unchained->red) { /* Now we lost a black edge, which means that the number of black edges on every path is no longer constant. We must balance the tree. */ /* NODESTACK now contains all parents of R. R is likely to be NULL in the first iteration. */ /* NULL nodes are considered black throughout - this is necessary for correctness. */ while (sp > 0 && (r == NULL || !r->red)) { node *pp = nodestack[sp - 1]; p = *pp; /* Two symmetric cases. */ if (r == p->left) { /* Q is R's brother, P is R's parent. The subtree with root R has one black edge less than the subtree with root Q. */ q = p->right; if (q->red) { /* If Q is red, we know that P is black. We rotate P left so that Q becomes the top node in the tree, with P below it. P is colored red, Q is colored black. This action does not change the black edge count for any leaf in the tree, but we will be able to recognize one of the following situations, which all require that Q is black. */ q->red = 0; p->red = 1; /* Left rotate p. */ p->right = q->left; q->left = p; *pp = q; /* Make sure pp is right if the case below tries to use it. */ nodestack[sp++] = pp = &q->left; q = p->right; } /* We know that Q can't be NULL here. We also know that Q is black. */ if ((q->left == NULL || !q->left->red) && (q->right == NULL || !q->right->red)) { /* Q has two black successors. We can simply color Q red. The whole subtree with root P is now missing one black edge. Note that this action can temporarily make the tree invalid (if P is red). But we will exit the loop in that case and set P black, which both makes the tree valid and also makes the black edge count come out right. If P is black, we are at least one step closer to the root and we'll try again the next iteration. */ q->red = 1; r = p; } else { /* Q is black, one of Q's successors is red. We can repair the tree with one operation and will exit the loop afterwards. */ if (q->right == NULL || !q->right->red) { /* The left one is red. We perform the same action as in maybe_split_for_insert where two red edges are adjacent but point in different directions: Q's left successor (let's call it Q2) becomes the top of the subtree we are looking at, its parent (Q) and grandparent (P) become its successors. The former successors of Q2 are placed below P and Q. P becomes black, and Q2 gets the color that P had. This changes the black edge count only for node R and its successors. */ node q2 = q->left; q2->red = p->red; p->right = q2->left; q->left = q2->right; q2->right = q; q2->left = p; *pp = q2; p->red = 0; } else { /* It's the right one. Rotate P left. P becomes black, and Q gets the color that P had. Q's right successor also becomes black. This changes the black edge count only for node R and its successors. */ q->red = p->red; p->red = 0; q->right->red = 0; /* left rotate p */ p->right = q->left; q->left = p; *pp = q; } /* We're done. */ sp = 1; r = NULL; } } else { /* Comments: see above. */ q = p->left; if (q->red) { q->red = 0; p->red = 1; p->left = q->right; q->right = p; *pp = q; nodestack[sp++] = pp = &q->right; q = p->left; } if ((q->right == NULL || !q->right->red) && (q->left == NULL || !q->left->red)) { q->red = 1; r = p; } else { if (q->left == NULL || !q->left->red) { node q2 = q->right; q2->red = p->red; p->left = q2->right; q->right = q2->left; q2->left = q; q2->right = p; *pp = q2; p->red = 0; } else { q->red = p->red; p->red = 0; q->left->red = 0; p->left = q->right; q->right = p; *pp = q; } sp = 1; r = NULL; } } --sp; } if (r != NULL) r->red = 0; } free (unchained); return retval; } #ifdef weak_alias weak_alias (__tdelete, tdelete) #endif /* Walk the nodes of a tree. ROOT is the root of the tree to be walked, ACTION the function to be called at each node. LEVEL is the level of ROOT in the whole tree. */ static void internal_function trecurse (const void *vroot, __action_fn_t action, int level) { const_node root = (const_node) vroot; if (root->left == NULL && root->right == NULL) (*action) (root, leaf, level); else { (*action) (root, preorder, level); if (root->left != NULL) trecurse (root->left, action, level + 1); (*action) (root, postorder, level); if (root->right != NULL) trecurse (root->right, action, level + 1); (*action) (root, endorder, level); } } /* Walk the nodes of a tree. ROOT is the root of the tree to be walked, ACTION the function to be called at each node. */ void __twalk (const void *vroot, __action_fn_t action) { const_node root = (const_node) vroot; CHECK_TREE (root); if (root != NULL && action != NULL) trecurse (root, action, 0); } #ifdef weak_alias weak_alias (__twalk, twalk) #endif #ifdef _LIBC /* The standardized functions miss an important functionality: the tree cannot be removed easily. We provide a function to do this. */ static void internal_function tdestroy_recurse (node root, __free_fn_t freefct) { if (root->left != NULL) tdestroy_recurse (root->left, freefct); if (root->right != NULL) tdestroy_recurse (root->right, freefct); (*freefct) ((void *) root->key); /* Free the node itself. */ free (root); } void __tdestroy (void *vroot, __free_fn_t freefct) { node root = (node) vroot; CHECK_TREE (root); if (root != NULL) tdestroy_recurse (root, freefct); } weak_alias (__tdestroy, tdestroy) #endif /* _LIBC */ gnupg-1.4.20/intl/plural.y0000644000175000017500000001655512635262326012321 00000000000000%{ /* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* For bison < 2.0, the bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "plural-exp.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ #ifndef _LIBC # define __gettextparse PLURAL_PARSE #endif %} %parse-param {struct parse_args *arg} %lex-param {struct parse_args *arg} %define api.pure full %expect 7 %union { unsigned long int num; enum expression_operator op; struct expression *exp; } %{ /* Prototypes for local functions. */ static int yylex (YYSTYPE *lval, struct parse_args *arg); static void yyerror (struct parse_args *arg, const char *str); /* Allocation of expressions. */ static struct expression * new_exp (int nargs, enum expression_operator op, struct expression * const *args) { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (enum expression_operator op) { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (enum expression_operator op, struct expression *right) { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (enum expression_operator op, struct expression *left, struct expression *right) { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (enum expression_operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } %} /* This declares that all operators have the same associativity and the precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. There is no unary minus and no bitwise operators. Operators with the same syntactic behaviour have been merged into a single token, to save space in the array generated by bison. */ %right '?' /* ? */ %left '|' /* || */ %left '&' /* && */ %left EQUOP2 /* == != */ %left CMPOP2 /* < > <= >= */ %left ADDOP2 /* + - */ %left MULOP2 /* * / % */ %right '!' /* ! */ %token EQUOP2 CMPOP2 ADDOP2 MULOP2 %token NUMBER %type exp %% start: exp { if ($1 == NULL) YYABORT; arg->res = $1; } ; exp: exp '?' exp ':' exp { $$ = new_exp_3 (qmop, $1, $3, $5); } | exp '|' exp { $$ = new_exp_2 (lor, $1, $3); } | exp '&' exp { $$ = new_exp_2 (land, $1, $3); } | exp EQUOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp CMPOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp ADDOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp MULOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | '!' exp { $$ = new_exp_1 (lnot, $2); } | 'n' { $$ = new_exp_0 (var); } | NUMBER { if (($$ = new_exp_0 (num)) != NULL) $$->val.num = $1; } | '(' exp ')' { $$ = $2; } ; %% void internal_function FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (YYSTYPE *lval, struct parse_args *arg) { const char *exp = arg->cp; int result; while (1) { if (exp[0] == '\0') { arg->cp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } arg->cp = exp; return result; } static void yyerror (struct parse_args *arg, const char *str) { /* Do nothing. We don't print error messages here. */ } gnupg-1.4.20/intl/langprefs.c0000644000175000017500000003064212635262326012746 00000000000000/* Determine the user's language preferences. Copyright (C) 2004-2007 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Bruno Haible . Win32 code originally by Michele Cicciotti . */ #ifdef HAVE_CONFIG_H # include #endif #include #if HAVE_CFPREFERENCESCOPYAPPVALUE # include # include # include # include # include extern void _nl_locale_name_canonicalize (char *name); #endif #if defined _WIN32 || defined __WIN32__ # define WIN32_NATIVE #endif #ifdef WIN32_NATIVE # define WIN32_LEAN_AND_MEAN # include # ifndef MUI_LANGUAGE_NAME # define MUI_LANGUAGE_NAME 8 # endif # ifndef STATUS_BUFFER_OVERFLOW # define STATUS_BUFFER_OVERFLOW 0x80000005 # endif extern void _nl_locale_name_canonicalize (char *name); extern const char *_nl_locale_name_from_win32_LANGID (LANGID langid); extern const char *_nl_locale_name_from_win32_LCID (LCID lcid); /* Get the preferences list through the MUI APIs. This works on Windows Vista and newer. */ static const char * _nl_language_preferences_win32_mui (HMODULE kernel32) { /* DWORD GetUserPreferredUILanguages (ULONG dwFlags, PULONG pulNumLanguages, PWSTR pwszLanguagesBuffer, PULONG pcchLanguagesBuffer); */ typedef DWORD (WINAPI *GetUserPreferredUILanguages_func) (ULONG, PULONG, PWSTR, PULONG); GetUserPreferredUILanguages_func p_GetUserPreferredUILanguages; p_GetUserPreferredUILanguages = (GetUserPreferredUILanguages_func) GetProcAddress (kernel32, "GetUserPreferredUILanguages"); if (p_GetUserPreferredUILanguages != NULL) { ULONG num_languages; ULONG bufsize; DWORD ret; bufsize = 0; ret = p_GetUserPreferredUILanguages (MUI_LANGUAGE_NAME, &num_languages, NULL, &bufsize); if (ret == 0 && GetLastError () == STATUS_BUFFER_OVERFLOW && bufsize > 0) { WCHAR *buffer = (WCHAR *) malloc (bufsize * sizeof (WCHAR)); if (buffer != NULL) { ret = p_GetUserPreferredUILanguages (MUI_LANGUAGE_NAME, &num_languages, buffer, &bufsize); if (ret) { /* Convert the list from NUL-delimited WCHAR[] Win32 locale names to colon-delimited char[] Unix locale names. We assume that all these locale names are in ASCII, nonempty and contain no colons. */ char *languages = (char *) malloc (bufsize + num_languages * 10 + 1); if (languages != NULL) { const WCHAR *p = buffer; char *q = languages; ULONG i; for (i = 0; i < num_languages; i++) { char *q1; char *q2; q1 = q; if (i > 0) *q++ = ':'; q2 = q; for (; *p != (WCHAR)'\0'; p++) { if ((unsigned char) *p != *p || *p == ':') { /* A non-ASCII character or a colon inside the Win32 locale name! Punt. */ q = q1; break; } *q++ = (unsigned char) *p; } if (q == q1) /* An unexpected Win32 locale name occurred. */ break; *q = '\0'; _nl_locale_name_canonicalize (q2); q = q2 + strlen (q2); p++; } *q = '\0'; if (q > languages) { free (buffer); return languages; } free (languages); } } free (buffer); } } } return NULL; } /* Get a preference. This works on Windows ME and newer. */ static const char * _nl_language_preferences_win32_ME (HMODULE kernel32) { /* LANGID GetUserDefaultUILanguage (void); */ typedef LANGID (WINAPI *GetUserDefaultUILanguage_func) (void); GetUserDefaultUILanguage_func p_GetUserDefaultUILanguage; p_GetUserDefaultUILanguage = (GetUserDefaultUILanguage_func) GetProcAddress (kernel32, "GetUserDefaultUILanguage"); if (p_GetUserDefaultUILanguage != NULL) return _nl_locale_name_from_win32_LANGID (p_GetUserDefaultUILanguage ()); return NULL; } /* Get a preference. This works on Windows 95 and newer. */ static const char * _nl_language_preferences_win32_95 () { HKEY desktop_resource_locale_key; if (RegOpenKeyExA (HKEY_CURRENT_USER, "Control Panel\\Desktop\\ResourceLocale", 0, KEY_QUERY_VALUE, &desktop_resource_locale_key) == NO_ERROR) { DWORD type; char data[8 + 1]; DWORD data_size = sizeof (data); DWORD ret; ret = RegQueryValueExA (desktop_resource_locale_key, NULL, NULL, &type, data, &data_size); RegCloseKey (desktop_resource_locale_key); if (ret == NO_ERROR) { /* We expect a string, at most 8 bytes long, that parses as a hexadecimal number. */ if (type == REG_SZ && data_size <= sizeof (data) && (data_size < sizeof (data) || data[sizeof (data) - 1] == '\0')) { LCID lcid; char *endp; /* Ensure it's NUL terminated. */ if (data_size < sizeof (data)) data[data_size] = '\0'; /* Parse it as a hexadecimal number. */ lcid = strtoul (data, &endp, 16); if (endp > data && *endp == '\0') return _nl_locale_name_from_win32_LCID (lcid); } } } return NULL; } /* Get the system's preference. This can be used as a fallback. */ static BOOL CALLBACK ret_first_language (HMODULE h, LPCSTR type, LPCSTR name, WORD lang, LONG_PTR param) { *(const char **)param = _nl_locale_name_from_win32_LANGID (lang); return FALSE; } static const char * _nl_language_preferences_win32_system (HMODULE kernel32) { const char *languages = NULL; /* Ignore the warning on mingw here. mingw has a wrong definition of the last parameter type of ENUMRESLANGPROC. */ EnumResourceLanguages (kernel32, RT_VERSION, MAKEINTRESOURCE (1), ret_first_language, (LONG_PTR)&languages); return languages; } #endif /* Determine the user's language preferences, as a colon separated list of locale names in XPG syntax language[_territory][.codeset][@modifier] The result must not be freed; it is statically allocated. The LANGUAGE environment variable does not need to be considered; it is already taken into account by the caller. */ const char * _nl_language_preferences_default (void) { #if HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ { /* Cache the preferences list, since CoreFoundation calls are expensive. */ static const char *cached_languages; static int cache_initialized; if (!cache_initialized) { CFTypeRef preferences = CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"), kCFPreferencesCurrentApplication); if (preferences != NULL && CFGetTypeID (preferences) == CFArrayGetTypeID ()) { CFArrayRef prefArray = (CFArrayRef)preferences; int n = CFArrayGetCount (prefArray); char buf[256]; size_t size = 0; int i; for (i = 0; i < n; i++) { CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i); if (element != NULL && CFGetTypeID (element) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)element, buf, sizeof (buf), kCFStringEncodingASCII)) { _nl_locale_name_canonicalize (buf); size += strlen (buf) + 1; /* Most GNU programs use msgids in English and don't ship an en.mo message catalog. Therefore when we see "en" in the preferences list, arrange for gettext() to return the msgid, and ignore all further elements of the preferences list. */ if (strcmp (buf, "en") == 0) break; } else break; } if (size > 0) { char *languages = (char *) malloc (size); if (languages != NULL) { char *p = languages; for (i = 0; i < n; i++) { CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i); if (element != NULL && CFGetTypeID (element) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)element, buf, sizeof (buf), kCFStringEncodingASCII)) { _nl_locale_name_canonicalize (buf); strcpy (p, buf); p += strlen (buf); *p++ = ':'; if (strcmp (buf, "en") == 0) break; } else break; } *--p = '\0'; cached_languages = languages; } } } cache_initialized = 1; } if (cached_languages != NULL) return cached_languages; } #endif #ifdef WIN32_NATIVE { /* Cache the preferences list, since computing it is expensive. */ static const char *cached_languages; static int cache_initialized; /* Activate the new code only when the GETTEXT_MUI environment variable is set, for the time being, since the new code is not well tested. */ if (!cache_initialized && getenv ("GETTEXT_MUI") != NULL) { const char *languages = NULL; HMODULE kernel32 = GetModuleHandle ("kernel32"); if (kernel32 != NULL) languages = _nl_language_preferences_win32_mui (kernel32); if (languages == NULL && kernel32 != NULL) languages = _nl_language_preferences_win32_ME (kernel32); if (languages == NULL) languages = _nl_language_preferences_win32_95 (); if (languages == NULL && kernel32 != NULL) languages = _nl_language_preferences_win32_system (kernel32); cached_languages = languages; cache_initialized = 1; } if (cached_languages != NULL) return cached_languages; } #endif return NULL; } gnupg-1.4.20/intl/VERSION0000644000175000017500000000005012635262326011657 00000000000000GNU gettext library from gettext-0.19.3 gnupg-1.4.20/intl/intl-compat.c0000644000175000017500000000656112635262326013217 00000000000000/* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. Copyright (C) 1995, 2000-2003, 2005 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" /* @@ end of prolog @@ */ /* This file redirects the gettext functions (without prefix) to those defined in the included GNU libintl library (with "libintl_" prefix). It is compiled into libintl in order to make the AM_GNU_GETTEXT test of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which has the redirections primarily in the include file. It is also compiled into libgnuintl so that libgnuintl.so can be used as LD_PRELOADable library on glibc systems, to provide the extra features that the functions in the libc don't have (namely, logging). */ #undef gettext #undef dgettext #undef dcgettext #undef ngettext #undef dngettext #undef dcngettext #undef textdomain #undef bindtextdomain #undef bind_textdomain_codeset /* When building a DLL, we must export some functions. Note that because the functions are only defined for binary backward compatibility, we don't need to use __declspec(dllimport) in any case. */ #if HAVE_VISIBILITY && BUILDING_DLL # define DLL_EXPORTED __attribute__((__visibility__("default"))) #elif defined _MSC_VER && BUILDING_DLL # define DLL_EXPORTED __declspec(dllexport) #else # define DLL_EXPORTED #endif DLL_EXPORTED char * gettext (const char *msgid) { return libintl_gettext (msgid); } DLL_EXPORTED char * dgettext (const char *domainname, const char *msgid) { return libintl_dgettext (domainname, msgid); } DLL_EXPORTED char * dcgettext (const char *domainname, const char *msgid, int category) { return libintl_dcgettext (domainname, msgid, category); } DLL_EXPORTED char * ngettext (const char *msgid1, const char *msgid2, unsigned long int n) { return libintl_ngettext (msgid1, msgid2, n); } DLL_EXPORTED char * dngettext (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n) { return libintl_dngettext (domainname, msgid1, msgid2, n); } DLL_EXPORTED char * dcngettext (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n, int category) { return libintl_dcngettext (domainname, msgid1, msgid2, n, category); } DLL_EXPORTED char * textdomain (const char *domainname) { return libintl_textdomain (domainname); } DLL_EXPORTED char * bindtextdomain (const char *domainname, const char *dirname) { return libintl_bindtextdomain (domainname, dirname); } DLL_EXPORTED char * bind_textdomain_codeset (const char *domainname, const char *codeset) { return libintl_bind_textdomain_codeset (domainname, codeset); } gnupg-1.4.20/intl/gettext.c0000644000175000017500000000345712635262326012455 00000000000000/* Implementation of gettext(3) function. Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext # define DCGETTEXT INTUSE(__dcgettext) #else # define GETTEXT libintl_gettext # define DCGETTEXT libintl_dcgettext #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * GETTEXT (const char *msgid) { return DCGETTEXT (NULL, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__gettext, gettext); #endif gnupg-1.4.20/intl/vasnwprintf.h0000644000175000017500000000321112635262326013343 00000000000000/* vswprintf with automatic memory allocation. Copyright (C) 2002-2003 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _VASNWPRINTF_H #define _VASNWPRINTF_H /* Get va_list. */ #include /* Get wchar_t, size_t. */ #include #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. */ extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...); extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args); #ifdef __cplusplus } #endif #endif /* _VASNWPRINTF_H */ gnupg-1.4.20/intl/relocatable.c0000644000175000017500000003724512635262326013250 00000000000000/* Provide relocatable packages. Copyright (C) 2003-2006, 2008-2011 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Tell glibc's to provide a prototype for getline(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #define _GL_USE_STDLIB_ALLOC 1 #include /* Specification. */ #include "relocatable.h" #if ENABLE_RELOCATABLE #include #include #include #include #ifdef NO_XMALLOC # define xmalloc malloc #else # include "xalloc.h" #endif #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include #endif #if DEPENDS_ON_LIBCHARSET # include #endif #if DEPENDS_ON_LIBICONV && HAVE_ICONV # include #endif #if DEPENDS_ON_LIBINTL && ENABLE_NLS # include #endif /* Faked cheap 'bool'. */ #undef bool #undef false #undef true #define bool int #define false 0 #define true 1 /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) # define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILE_SYSTEM_PREFIX_LEN(P) 0 #endif /* Whether to enable the more costly support for relocatable libraries. It allows libraries to be have been installed with a different original prefix than the program. But it is quite costly, especially on Cygwin platforms, see below. Therefore we enable it by default only on native Windows platforms. */ #ifndef ENABLE_COSTLY_RELOCATABLE # if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ # define ENABLE_COSTLY_RELOCATABLE 1 # else # define ENABLE_COSTLY_RELOCATABLE 0 # endif #endif /* Original installation prefix. */ static char *orig_prefix; static size_t orig_prefix_len; /* Current installation prefix. */ static char *curr_prefix; static size_t curr_prefix_len; /* These prefixes do not end in a slash. Anything that will be concatenated to them must start with a slash. */ /* Sets the original and the current installation prefix of this module. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ static void set_this_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) { if (orig_prefix_arg != NULL && curr_prefix_arg != NULL /* Optimization: if orig_prefix and curr_prefix are equal, the relocation is a nop. */ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0) { /* Duplicate the argument strings. */ char *memory; orig_prefix_len = strlen (orig_prefix_arg); curr_prefix_len = strlen (curr_prefix_arg); memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1); #ifdef NO_XMALLOC if (memory != NULL) #endif { memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); orig_prefix = memory; memory += orig_prefix_len + 1; memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); curr_prefix = memory; return; } } orig_prefix = NULL; curr_prefix = NULL; /* Don't worry about wasted memory here - this function is usually only called once. */ } /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ void set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) { set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg); /* Now notify all dependent libraries. */ #if DEPENDS_ON_LIBCHARSET libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif #if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109 libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif #if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif } #if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE) /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular file, and the current pathname of this file. Returns it, freshly allocated. Returns NULL upon failure. */ #ifdef IN_LIBRARY #define compute_curr_prefix local_compute_curr_prefix static #endif char * compute_curr_prefix (const char *orig_installprefix, const char *orig_installdir, const char *curr_pathname) { char *curr_installdir; const char *rel_installdir; if (curr_pathname == NULL) return NULL; /* Determine the relative installation directory, relative to the prefix. This is simply the difference between orig_installprefix and orig_installdir. */ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix)) != 0) /* Shouldn't happen - nothing should be installed outside $(prefix). */ return NULL; rel_installdir = orig_installdir + strlen (orig_installprefix); /* Determine the current installation directory. */ { const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname); const char *p = curr_pathname + strlen (curr_pathname); char *q; while (p > p_base) { p--; if (ISSLASH (*p)) break; } q = (char *) xmalloc (p - curr_pathname + 1); #ifdef NO_XMALLOC if (q == NULL) return NULL; #endif memcpy (q, curr_pathname, p - curr_pathname); q[p - curr_pathname] = '\0'; curr_installdir = q; } /* Compute the current installation prefix by removing the trailing rel_installdir from it. */ { const char *rp = rel_installdir + strlen (rel_installdir); const char *cp = curr_installdir + strlen (curr_installdir); const char *cp_base = curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir); while (rp > rel_installdir && cp > cp_base) { bool same = false; const char *rpi = rp; const char *cpi = cp; while (rpi > rel_installdir && cpi > cp_base) { rpi--; cpi--; if (ISSLASH (*rpi) || ISSLASH (*cpi)) { if (ISSLASH (*rpi) && ISSLASH (*cpi)) same = true; break; } /* Do case-insensitive comparison if the file system is always or often case-insensitive. It's better to accept the comparison if the difference is only in case, rather than to fail. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS - case insignificant file system */ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) break; #else if (*rpi != *cpi) break; #endif } if (!same) break; /* The last pathname component was the same. opi and cpi now point to the slash before it. */ rp = rpi; cp = cpi; } if (rp > rel_installdir) { /* Unexpected: The curr_installdir does not end with rel_installdir. */ free (curr_installdir); return NULL; } { size_t curr_prefix_len = cp - curr_installdir; char *curr_prefix; curr_prefix = (char *) xmalloc (curr_prefix_len + 1); #ifdef NO_XMALLOC if (curr_prefix == NULL) { free (curr_installdir); return NULL; } #endif memcpy (curr_prefix, curr_installdir, curr_prefix_len); curr_prefix[curr_prefix_len] = '\0'; free (curr_installdir); return curr_prefix; } } } #endif /* !IN_LIBRARY || PIC */ #if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE /* Full pathname of shared library, or NULL. */ static char *shared_library_fullname; #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ /* Native Windows only. On Cygwin, it is better to use the Cygwin provided /proc interface, than to use native Windows API and cygwin_conv_to_posix_path, because it supports longer file names (see ). */ /* Determine the full pathname of the shared library when it is loaded. */ BOOL WINAPI DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) { (void) reserved; if (event == DLL_PROCESS_ATTACH) { /* The DLL is being loaded into an application's address range. */ static char location[MAX_PATH]; if (!GetModuleFileName (module_handle, location, sizeof (location))) /* Shouldn't happen. */ return FALSE; if (!IS_PATH_WITH_DIR (location)) /* Shouldn't happen. */ return FALSE; shared_library_fullname = strdup (location); } return TRUE; } #else /* Unix */ static void find_shared_library_fullname () { #if (defined __linux__ && (__GLIBC__ >= 2 || defined __UCLIBC__)) || defined __CYGWIN__ /* Linux has /proc/self/maps. glibc 2 and uClibc have the getline() function. Cygwin >= 1.5 has /proc/self/maps and the getline() function too. But it is costly: ca. 0.3 ms on Linux, 3 ms on Cygwin 1.5, and 5 ms on Cygwin 1.7. */ FILE *fp; /* Open the current process' maps file. It describes one VMA per line. */ fp = fopen ("/proc/self/maps", "r"); if (fp) { unsigned long address = (unsigned long) &find_shared_library_fullname; for (;;) { unsigned long start, end; int c; if (fscanf (fp, "%lx-%lx", &start, &end) != 2) break; if (address >= start && address <= end - 1) { /* Found it. Now see if this line contains a filename. */ while (c = getc (fp), c != EOF && c != '\n' && c != '/') continue; if (c == '/') { size_t size; int len; ungetc (c, fp); shared_library_fullname = NULL; size = 0; len = getline (&shared_library_fullname, &size, fp); if (len >= 0) { /* Success: filled shared_library_fullname. */ if (len > 0 && shared_library_fullname[len - 1] == '\n') shared_library_fullname[len - 1] = '\0'; } } break; } while (c = getc (fp), c != EOF && c != '\n') continue; } fclose (fp); } #endif } #endif /* Native Windows / Unix */ /* Return the full pathname of the current shared library. Return NULL if unknown. Guaranteed to work only on Linux, Cygwin, and native Windows. */ static char * get_shared_library_fullname () { #if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) static bool tried_find_shared_library_fullname; if (!tried_find_shared_library_fullname) { find_shared_library_fullname (); tried_find_shared_library_fullname = true; } #endif return shared_library_fullname; } #endif /* PIC */ /* Returns the pathname, relocated according to the current installation directory. The returned string is either PATHNAME unmodified or a freshly allocated string that you can free with free() after casting it to 'char *'. */ const char * relocate (const char *pathname) { #if defined PIC && defined INSTALLDIR && ENABLE_COSTLY_RELOCATABLE static int initialized; /* Initialization code for a shared library. */ if (!initialized) { /* At this point, orig_prefix and curr_prefix likely have already been set through the main program's set_program_name_and_installdir function. This is sufficient in the case that the library has initially been installed in the same orig_prefix. But we can do better, to also cover the cases that 1. it has been installed in a different prefix before being moved to orig_prefix and (later) to curr_prefix, 2. unlike the program, it has not moved away from orig_prefix. */ const char *orig_installprefix = INSTALLPREFIX; const char *orig_installdir = INSTALLDIR; char *curr_prefix_better; curr_prefix_better = compute_curr_prefix (orig_installprefix, orig_installdir, get_shared_library_fullname ()); set_relocation_prefix (orig_installprefix, curr_prefix_better != NULL ? curr_prefix_better : curr_prefix); if (curr_prefix_better != NULL) free (curr_prefix_better); initialized = 1; } #endif /* Note: It is not necessary to perform case insensitive comparison here, even for DOS-like file systems, because the pathname argument was typically created from the same Makefile variable as orig_prefix came from. */ if (orig_prefix != NULL && curr_prefix != NULL && strncmp (pathname, orig_prefix, orig_prefix_len) == 0) { if (pathname[orig_prefix_len] == '\0') { /* pathname equals orig_prefix. */ char *result = (char *) xmalloc (strlen (curr_prefix) + 1); #ifdef NO_XMALLOC if (result != NULL) #endif { strcpy (result, curr_prefix); return result; } } else if (ISSLASH (pathname[orig_prefix_len])) { /* pathname starts with orig_prefix. */ const char *pathname_tail = &pathname[orig_prefix_len]; char *result = (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); #ifdef NO_XMALLOC if (result != NULL) #endif { memcpy (result, curr_prefix, curr_prefix_len); strcpy (result + curr_prefix_len, pathname_tail); return result; } } } /* Nothing to relocate. */ return pathname; } #endif gnupg-1.4.20/intl/hash-string.c0000644000175000017500000000304012635262326013204 00000000000000/* Implements a string hashing function. Copyright (C) 1995, 1997, 1998, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #ifdef HAVE_CONFIG_H # include #endif /* Specification. */ #include "hash-string.h" /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ unsigned long int __hash_string (const char *str_param) { unsigned long int hval, g; const char *str = str_param; /* Compute the hash value for the given string. */ hval = 0; while (*str != '\0') { hval <<= 4; hval += (unsigned char) *str++; g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } gnupg-1.4.20/intl/Makefile.in0000644000175000017500000005766412635262326012703 00000000000000# Makefile for directory with message catalog handling library of GNU gettext # Copyright (C) 1995-1998, 2000-2007, 2009-2012 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = @SHELL@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. # The VPATH variables allows builds with $builddir != $srcdir, assuming a # 'make' program that supports VPATH (such as GNU make). This line is removed # by autoconf automatically when "$(srcdir)" = ".". # In this directory, the VPATH handling is particular: # 1. If INTL_LIBTOOL_SUFFIX_PREFIX is 'l' (indicating a build with libtool), # the .c -> .lo rules carefully use $(srcdir), so that VPATH can be omitted. # 2. If PACKAGE = gettext-tools, VPATH _must_ be omitted, because otherwise # 'make' does the wrong thing if GNU gettext was configured with # "./configure --srcdir=`pwd`", namely it gets confused by the .lo and .la # files it finds in srcdir = ../../gettext-runtime/intl. VPATH = $(srcdir) prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/intl aliaspath = $(localedir) subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ l = @INTL_LIBTOOL_SUFFIX_PREFIX@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ YACC = @INTLBISON@ -y -d YFLAGS = --name-prefix=__gettext # Windows resource compiler (windres). Used when libtool is not used. WINDRES = @WINDRES@ # Windows resource compiler (windres). Used via libtool. RC = @RC@ # Support for silent-rules. AM_V_at = $(am__v_at_$(V)) am__v_at_ = $(am__v_at_@INTL_DEFAULT_VERBOSITY@) am__v_at_0 = @ AM_V_AR = $(am__v_AR_$(V)) am__v_AR_ = $(am__v_AR_@INTL_DEFAULT_VERBOSITY@) am__v_AR_0 = @echo " AR " $@; AM_V_CC = $(am__v_CC_$(V)) am__v_CC_ = $(am__v_CC_@INTL_DEFAULT_VERBOSITY@) am__v_CC_0 = @echo " CC " $@; AM_V_GEN = $(am__v_GEN_$(V)) am__v_GEN_ = $(am__v_GEN_@INTL_DEFAULT_VERBOSITY@) am__v_GEN_0 = @echo " GEN " $@; AM_V_YACC = $(am__v_YACC_$(V)) am__v_YACC_ = $(am__v_YACC_@INTL_DEFAULT_VERBOSITY@) am__v_YACC_0 = @echo " YACC " $@; AM_V_lt = $(am__v_lt_$(V)) am__v_lt_ = $(am__v_lt_@INTL_DEFAULT_VERBOSITY@) am__v_lt_0 = --silent # -DBUILDING_LIBINTL: Change expansion of LIBINTL_DLL_EXPORTED macro. # -DBUILDING_DLL: Change expansion of RELOCATABLE_DLL_EXPORTED macro. DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ -DLIBDIR=\"$(libdir)\" -DBUILDING_LIBINTL -DBUILDING_DLL -DIN_LIBINTL \ -DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \ -Dset_relocation_prefix=libintl_set_relocation_prefix \ -Drelocate=libintl_relocate \ -DDEPENDS_ON_LIBICONV=1 @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ @CFLAG_VISIBILITY@ LDFLAGS = @LDFLAGS@ $(LDFLAGS_@WOE32DLL@) LDFLAGS_yes = -Wl,--export-all-symbols LDFLAGS_no = LIBS = @LIBS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) HEADERS = \ gmo.h \ gettextP.h \ hash-string.h \ loadinfo.h \ plural-exp.h \ eval-plural.h \ localcharset.h \ lock.h \ relocatable.h \ tsearch.h tsearch.c \ verify.h \ xsize.h \ printf-args.h printf-args.c \ printf-parse.h wprintf-parse.h printf-parse.c \ vasnprintf.h vasnwprintf.h vasnprintf.c \ os2compat.h \ libgnuintl.in.h SOURCES = \ bindtextdom.c \ dcgettext.c \ dgettext.c \ gettext.c \ finddomain.c \ hash-string.c \ loadmsgcat.c \ localealias.c \ textdomain.c \ l10nflist.c \ explodename.c \ dcigettext.c \ dcngettext.c \ dngettext.c \ ngettext.c \ plural.y \ plural-exp.c \ localcharset.c \ threadlib.c \ lock.c \ relocatable.c \ langprefs.c \ localename.c \ log.c \ printf.c \ setlocale.c \ version.c \ xsize.c \ osdep.c \ os2compat.c \ intl-exports.c \ intl-compat.c OBJECTS = \ bindtextdom.$lo \ dcgettext.$lo \ dgettext.$lo \ gettext.$lo \ finddomain.$lo \ hash-string.$lo \ loadmsgcat.$lo \ localealias.$lo \ textdomain.$lo \ l10nflist.$lo \ explodename.$lo \ dcigettext.$lo \ dcngettext.$lo \ dngettext.$lo \ ngettext.$lo \ plural.$lo \ plural-exp.$lo \ localcharset.$lo \ threadlib.$lo \ lock.$lo \ relocatable.$lo \ langprefs.$lo \ localename.$lo \ log.$lo \ printf.$lo \ setlocale.$lo \ version.$lo \ xsize.$lo \ osdep.$lo \ intl-compat.$lo OBJECTS_RES_yes = libintl.res.$lo OBJECTS_RES_no = DISTFILES.common = Makefile.in \ config.charset locale.alias ref-add.sin ref-del.sin export.h libintl.rc \ $(HEADERS) $(SOURCES) DISTFILES.generated = plural.c DISTFILES.normal = VERSION DISTFILES.gettext = ChangeLog COPYING.LIB libintl.glibc README.woe32 DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \ COPYING.LIB-2 COPYING.LIB-2.0 COPYING.LIB-2.1 \ gettext.h libgettext.h plural-eval.c libgnuintl.h \ libgnuintl.h_vms Makefile.vms libgnuintl.h.msvc-static \ libgnuintl.h.msvc-shared Makefile.msvc all: all-@USE_INCLUDED_LIBINTL@ all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed all-no: all-no-@BUILD_INCLUDED_LIBINTL@ all-no-yes: libgnuintl.$la all-no-no: libintl.a libgnuintl.a: $(OBJECTS) $(AM_V_at)rm -f $@ $(AM_V_AR)$(AR) cru $@ $(OBJECTS) $(AM_V_at)$(RANLIB) $@ libintl.la libgnuintl.la: $(OBJECTS) $(OBJECTS_RES_@WOE32@) $(AM_V_GEN)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=link \ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ $(OBJECTS) @LTLIBICONV@ @INTL_MACOSX_LIBS@ $(LIBS) @LTLIBTHREAD@ @LTLIBC@ \ $(OBJECTS_RES_@WOE32@) \ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ -rpath $(libdir) \ -no-undefined # Libtool's library version information for libintl. # Before making a gettext release, the gettext maintainer must change this # according to the libtool documentation, section "Library interface versions". # Maintainers of other packages that include the intl directory must *not* # change these values. LTV_CURRENT=9 LTV_REVISION=2 LTV_AGE=1 .SUFFIXES: .SUFFIXES: .c .y .o .lo .sin .sed .c.o: $(AM_V_CC)$(COMPILE) $< .y.c: $(AM_V_YACC)$(YACC) $(YFLAGS) --output $@ $< $(AM_V_at)rm -f $*.h bindtextdom.lo: $(srcdir)/bindtextdom.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c dcgettext.lo: $(srcdir)/dcgettext.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/dcgettext.c dgettext.lo: $(srcdir)/dgettext.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/dgettext.c gettext.lo: $(srcdir)/gettext.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/gettext.c finddomain.lo: $(srcdir)/finddomain.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/finddomain.c hash-string.lo: $(srcdir)/hash-string.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/hash-string.c loadmsgcat.lo: $(srcdir)/loadmsgcat.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c localealias.lo: $(srcdir)/localealias.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/localealias.c textdomain.lo: $(srcdir)/textdomain.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/textdomain.c l10nflist.lo: $(srcdir)/l10nflist.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/l10nflist.c explodename.lo: $(srcdir)/explodename.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/explodename.c dcigettext.lo: $(srcdir)/dcigettext.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/dcigettext.c dcngettext.lo: $(srcdir)/dcngettext.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/dcngettext.c dngettext.lo: $(srcdir)/dngettext.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/dngettext.c ngettext.lo: $(srcdir)/ngettext.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/ngettext.c plural.lo: $(srcdir)/plural.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/plural.c plural-exp.lo: $(srcdir)/plural-exp.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/plural-exp.c localcharset.lo: $(srcdir)/localcharset.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/localcharset.c threadlib.lo: $(srcdir)/threadlib.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/threadlib.c lock.lo: $(srcdir)/lock.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/lock.c relocatable.lo: $(srcdir)/relocatable.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/relocatable.c langprefs.lo: $(srcdir)/langprefs.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/langprefs.c localename.lo: $(srcdir)/localename.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/localename.c log.lo: $(srcdir)/log.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/log.c printf.lo: $(srcdir)/printf.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/printf.c setlocale.lo: $(srcdir)/setlocale.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/setlocale.c version.lo: $(srcdir)/version.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/version.c xsize.lo: $(srcdir)/xsize.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/xsize.c osdep.lo: $(srcdir)/osdep.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/osdep.c intl-compat.lo: $(srcdir)/intl-compat.c $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC --mode=compile $(COMPILE) $(srcdir)/intl-compat.c # This rule is executed only on Woe32 systems. # The following sed expressions come from the windres-options script. They are # inlined here, so that they can be written in a Makefile without requiring a # temporary file. They must contain literal newlines rather than semicolons, # so that they work with the sed-3.02 that is shipped with MSYS. libintl.res.o: $(srcdir)/libintl.rc nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"; \ sed_extract_major='/^[0-9]/{'$${nl}'s/^\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ $(WINDRES) \ "-DPACKAGE_VERSION_STRING=\\\"$(VERSION)\\\"" \ "-DPACKAGE_VERSION_MAJOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_major"` \ "-DPACKAGE_VERSION_MINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_minor"` \ "-DPACKAGE_VERSION_SUBMINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_subminor"` \ -i $(srcdir)/libintl.rc -o libintl.res.o --output-format=coff libintl.res.lo: $(srcdir)/libintl.rc nlinit=`echo 'nl="'; echo '"'`; eval "$$nlinit"; \ sed_extract_major='/^[0-9]/{'$${nl}'s/^\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ $(LIBTOOL) --mode=compile --tag=RC $(RC) \ "-DPACKAGE_VERSION_STRING=\\\"$(VERSION)\\\"" \ "-DPACKAGE_VERSION_MAJOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_major"` \ "-DPACKAGE_VERSION_MINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_minor"` \ "-DPACKAGE_VERSION_SUBMINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_subminor"` \ -i $(srcdir)/libintl.rc -o libintl.res.lo --output-format=coff ref-add.sed: $(srcdir)/ref-add.sin sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed mv t-ref-add.sed ref-add.sed ref-del.sed: $(srcdir)/ref-del.sin sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed mv t-ref-del.sed ref-del.sed INCLUDES = -I. -I$(srcdir) -I.. libgnuintl.h: $(srcdir)/libgnuintl.in.h sed -e '/IN_LIBGLOCALE/d' \ -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \ -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \ -e 's,@''HAVE_NEWLOCALE''@,@HAVE_NEWLOCALE@,g' \ -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \ -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \ < $(srcdir)/libgnuintl.in.h \ | if test '@WOE32DLL@' = yes; then \ sed -e 's/extern \([^()]*\);/extern __declspec (dllimport) \1;/'; \ else \ cat; \ fi \ | sed -e 's/extern \([^"]\)/extern LIBINTL_DLL_EXPORTED \1/' \ -e "/#define _LIBINTL_H/r $(srcdir)/export.h" \ | sed -e 's,@''HAVE_VISIBILITY''@,@HAVE_VISIBILITY@,g' \ > libgnuintl.h libintl.h: $(srcdir)/libgnuintl.in.h sed -e '/IN_LIBGLOCALE/d' \ -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \ -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \ -e 's,@''HAVE_NEWLOCALE''@,@HAVE_NEWLOCALE@,g' \ -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \ -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \ < $(srcdir)/libgnuintl.in.h > libintl.h charset.alias: $(srcdir)/config.charset $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ mv t-$@ $@ check: all # We must not install the libintl.h/libintl.a files if we are on a # system which has the GNU gettext() function in its C library or in a # separate library. # If you want to use the one which comes with this version of the # package, you have to use "configure --with-included-gettext". install: install-exec install-data install-exec: all if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ if test "@RELOCATABLE@" = yes; then \ dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \ if test -n "$$dependencies"; then \ rm -f $(DESTDIR)$(libdir)/libintl.la; \ fi; \ fi; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no \ && test @GLIBC2@ != no; then \ $(mkdir_p) $(DESTDIR)$(libdir); \ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \ $(LIBTOOL) --mode=uninstall \ rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ if test @GLIBC21@ = no; then \ case '@host_os@' in \ darwin[56]*) \ need_charset_alias=true ;; \ darwin* | cygwin* | mingw* | pw32* | cegcc*) \ need_charset_alias=false ;; \ *) \ need_charset_alias=true ;; \ esac; \ else \ need_charset_alias=false; \ fi; \ if $$need_charset_alias; then \ $(mkdir_p) $(DESTDIR)$(libdir); \ fi; \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ orig=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ if $$need_charset_alias; then \ orig=charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ fi; \ fi; \ $(mkdir_p) $(DESTDIR)$(localedir); \ test -f $(DESTDIR)$(localedir)/locale.alias \ && orig=$(DESTDIR)$(localedir)/locale.alias \ || orig=$(srcdir)/locale.alias; \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ dists="COPYING.LIB $(DISTFILES.common)"; \ for file in $$dists; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ dists="$(DISTFILES.generated)"; \ for file in $$dists; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ $(INSTALL_DATA) $$dir/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ dists="$(DISTFILES.obsolete)"; \ for file in $$dists; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-strip: install install-dvi install-html install-info install-ps install-pdf: installdirs: if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no \ && test @GLIBC2@ != no; then \ $(mkdir_p) $(DESTDIR)$(libdir); \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ if test @GLIBC21@ = no; then \ case '@host_os@' in \ darwin[56]*) \ need_charset_alias=true ;; \ darwin* | cygwin* | mingw* | pw32* | cegcc*) \ need_charset_alias=false ;; \ *) \ need_charset_alias=true ;; \ esac; \ else \ need_charset_alias=false; \ fi; \ if $$need_charset_alias; then \ $(mkdir_p) $(DESTDIR)$(libdir); \ fi; \ $(mkdir_p) $(DESTDIR)$(localedir); \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ rm -f $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=uninstall \ rm -f $(DESTDIR)$(libdir)/libintl.$la; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no \ && test @GLIBC2@ != no; then \ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ if test -f $(DESTDIR)$(localedir)/locale.alias; then \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools"; then \ for file in VERSION COPYING.LIB $(DISTFILES.common) $(DISTFILES.generated); do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi info dvi ps pdf html: $(OBJECTS): ../config.h libgnuintl.h bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo setlocale.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h localename.$lo: $(srcdir)/gettextP.h hash-string.$lo dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h dcigettext.$lo: $(srcdir)/eval-plural.h localcharset.$lo: $(srcdir)/localcharset.h bindtextdom.$lo dcigettext.$lo finddomain.$lo loadmsgcat.$lo localealias.$lo lock.$lo log.$lo: $(srcdir)/lock.h localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/xsize.c $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c # A bison-2.1 generated plural.c includes if ENABLE_NLS. PLURAL_DEPS_yes = libintl.h PLURAL_DEPS_no = plural.$lo: $(PLURAL_DEPS_@USE_INCLUDED_LIBINTL@) tags: TAGS TAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES) id: ID ID: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) mostlyclean: rm -f *.a *.la *.o *.obj *.lo core core.* rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed rm -f -r .libs _libs clean: mostlyclean distclean: clean rm -f Makefile ID TAGS if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \ rm -f $(DISTFILES.normal); \ else \ : ; \ fi maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # GNU gettext needs not contain the file 'VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: Makefile if test "$(PACKAGE)" = "gettext-tools"; then \ : ; \ else \ if test "$(PACKAGE)" = "gettext-runtime"; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ for file in $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ cp -p $$dir/$$file $(distdir) || test $$file = Makefile.in || exit 1; \ done; \ fi Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status # This would be more efficient, but doesn't work any more with autoconf-2.57, # when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used. # cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/intl/osdep.c0000644000175000017500000000167312635262326012101 00000000000000/* OS dependent parts of libintl. Copyright (C) 2001-2002, 2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #if defined __CYGWIN__ || defined __MINGW32__ # include "intl-exports.c" #elif defined __EMX__ # include "os2compat.c" #else /* Avoid AIX compiler warning. */ typedef int dummy; #endif gnupg-1.4.20/intl/printf-parse.h0000644000175000017500000000502412635262326013400 00000000000000/* Parse printf format string. Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _PRINTF_PARSE_H #define _PRINTF_PARSE_H #if HAVE_FEATURES_H # include /* for __GLIBC__, __UCLIBC__ */ #endif #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 #if __GLIBC__ >= 2 && !defined __UCLIBC__ # define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ #endif /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* Number of directly allocated directives (no malloc() needed). */ #define N_DIRECT_ALLOC_DIRECTIVES 7 /* A parsed directive. */ typedef struct { const char* dir_start; const char* dir_end; int flags; const char* width_start; const char* width_end; size_t width_arg_index; const char* precision_start; const char* precision_end; size_t precision_arg_index; char conversion; /* d i o u x X f e E g G c s p n U % but not C S */ size_t arg_index; } char_directive; /* A parsed format string. */ typedef struct { size_t count; char_directive *dir; size_t max_width_length; size_t max_precision_length; char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } char_directives; /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #ifdef STATIC STATIC #else extern #endif int printf_parse (const char *format, char_directives *d, arguments *a); #endif /* _PRINTF_PARSE_H */ gnupg-1.4.20/intl/loadmsgcat.c0000644000175000017500000010333712635262326013105 00000000000000/* Load needed message catalogs. Copyright (C) 1995-1999, 2000-2008, 2010 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #ifdef __GNUC__ # undef alloca # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #ifdef _LIBC # include # include #endif #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || (defined _LIBC && defined _POSIX_MAPPED_FILES) # include # undef HAVE_MMAP # define HAVE_MMAP 1 #else # undef HAVE_MMAP #endif #if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC # include #endif #if defined HAVE_INTTYPES_H || defined _LIBC # include #endif #include "gmo.h" #include "gettextP.h" #include "hash-string.h" #include "plural-exp.h" #ifdef _LIBC # include "../locale/localeinfo.h" # include #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include #else # include "lock.h" #endif #ifdef _LIBC # define PRI_MACROS_BROKEN 0 #endif /* Provide fallback values for macros that ought to be defined in . Note that our fallback values need not be literal strings, because we don't use them with preprocessor string concatenation. */ #if !defined PRId8 || PRI_MACROS_BROKEN # undef PRId8 # define PRId8 "d" #endif #if !defined PRIi8 || PRI_MACROS_BROKEN # undef PRIi8 # define PRIi8 "i" #endif #if !defined PRIo8 || PRI_MACROS_BROKEN # undef PRIo8 # define PRIo8 "o" #endif #if !defined PRIu8 || PRI_MACROS_BROKEN # undef PRIu8 # define PRIu8 "u" #endif #if !defined PRIx8 || PRI_MACROS_BROKEN # undef PRIx8 # define PRIx8 "x" #endif #if !defined PRIX8 || PRI_MACROS_BROKEN # undef PRIX8 # define PRIX8 "X" #endif #if !defined PRId16 || PRI_MACROS_BROKEN # undef PRId16 # define PRId16 "d" #endif #if !defined PRIi16 || PRI_MACROS_BROKEN # undef PRIi16 # define PRIi16 "i" #endif #if !defined PRIo16 || PRI_MACROS_BROKEN # undef PRIo16 # define PRIo16 "o" #endif #if !defined PRIu16 || PRI_MACROS_BROKEN # undef PRIu16 # define PRIu16 "u" #endif #if !defined PRIx16 || PRI_MACROS_BROKEN # undef PRIx16 # define PRIx16 "x" #endif #if !defined PRIX16 || PRI_MACROS_BROKEN # undef PRIX16 # define PRIX16 "X" #endif #if !defined PRId32 || PRI_MACROS_BROKEN # undef PRId32 # define PRId32 "d" #endif #if !defined PRIi32 || PRI_MACROS_BROKEN # undef PRIi32 # define PRIi32 "i" #endif #if !defined PRIo32 || PRI_MACROS_BROKEN # undef PRIo32 # define PRIo32 "o" #endif #if !defined PRIu32 || PRI_MACROS_BROKEN # undef PRIu32 # define PRIu32 "u" #endif #if !defined PRIx32 || PRI_MACROS_BROKEN # undef PRIx32 # define PRIx32 "x" #endif #if !defined PRIX32 || PRI_MACROS_BROKEN # undef PRIX32 # define PRIX32 "X" #endif #if !defined PRId64 || PRI_MACROS_BROKEN # undef PRId64 # define PRId64 (sizeof (long) == 8 ? "ld" : "lld") #endif #if !defined PRIi64 || PRI_MACROS_BROKEN # undef PRIi64 # define PRIi64 (sizeof (long) == 8 ? "li" : "lli") #endif #if !defined PRIo64 || PRI_MACROS_BROKEN # undef PRIo64 # define PRIo64 (sizeof (long) == 8 ? "lo" : "llo") #endif #if !defined PRIu64 || PRI_MACROS_BROKEN # undef PRIu64 # define PRIu64 (sizeof (long) == 8 ? "lu" : "llu") #endif #if !defined PRIx64 || PRI_MACROS_BROKEN # undef PRIx64 # define PRIx64 (sizeof (long) == 8 ? "lx" : "llx") #endif #if !defined PRIX64 || PRI_MACROS_BROKEN # undef PRIX64 # define PRIX64 (sizeof (long) == 8 ? "lX" : "llX") #endif #if !defined PRIdLEAST8 || PRI_MACROS_BROKEN # undef PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 || PRI_MACROS_BROKEN # undef PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 || PRI_MACROS_BROKEN # undef PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 || PRI_MACROS_BROKEN # undef PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 || PRI_MACROS_BROKEN # undef PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 || PRI_MACROS_BROKEN # undef PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 || PRI_MACROS_BROKEN # undef PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 || PRI_MACROS_BROKEN # undef PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 || PRI_MACROS_BROKEN # undef PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 || PRI_MACROS_BROKEN # undef PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 || PRI_MACROS_BROKEN # undef PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 || PRI_MACROS_BROKEN # undef PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 || PRI_MACROS_BROKEN # undef PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 || PRI_MACROS_BROKEN # undef PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 || PRI_MACROS_BROKEN # undef PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 || PRI_MACROS_BROKEN # undef PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 || PRI_MACROS_BROKEN # undef PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 || PRI_MACROS_BROKEN # undef PRIXLEAST32 # define PRIXLEAST32 "X" #endif #if !defined PRIdLEAST64 || PRI_MACROS_BROKEN # undef PRIdLEAST64 # define PRIdLEAST64 PRId64 #endif #if !defined PRIiLEAST64 || PRI_MACROS_BROKEN # undef PRIiLEAST64 # define PRIiLEAST64 PRIi64 #endif #if !defined PRIoLEAST64 || PRI_MACROS_BROKEN # undef PRIoLEAST64 # define PRIoLEAST64 PRIo64 #endif #if !defined PRIuLEAST64 || PRI_MACROS_BROKEN # undef PRIuLEAST64 # define PRIuLEAST64 PRIu64 #endif #if !defined PRIxLEAST64 || PRI_MACROS_BROKEN # undef PRIxLEAST64 # define PRIxLEAST64 PRIx64 #endif #if !defined PRIXLEAST64 || PRI_MACROS_BROKEN # undef PRIXLEAST64 # define PRIXLEAST64 PRIX64 #endif #if !defined PRIdFAST8 || PRI_MACROS_BROKEN # undef PRIdFAST8 # define PRIdFAST8 "d" #endif #if !defined PRIiFAST8 || PRI_MACROS_BROKEN # undef PRIiFAST8 # define PRIiFAST8 "i" #endif #if !defined PRIoFAST8 || PRI_MACROS_BROKEN # undef PRIoFAST8 # define PRIoFAST8 "o" #endif #if !defined PRIuFAST8 || PRI_MACROS_BROKEN # undef PRIuFAST8 # define PRIuFAST8 "u" #endif #if !defined PRIxFAST8 || PRI_MACROS_BROKEN # undef PRIxFAST8 # define PRIxFAST8 "x" #endif #if !defined PRIXFAST8 || PRI_MACROS_BROKEN # undef PRIXFAST8 # define PRIXFAST8 "X" #endif #if !defined PRIdFAST16 || PRI_MACROS_BROKEN # undef PRIdFAST16 # define PRIdFAST16 "d" #endif #if !defined PRIiFAST16 || PRI_MACROS_BROKEN # undef PRIiFAST16 # define PRIiFAST16 "i" #endif #if !defined PRIoFAST16 || PRI_MACROS_BROKEN # undef PRIoFAST16 # define PRIoFAST16 "o" #endif #if !defined PRIuFAST16 || PRI_MACROS_BROKEN # undef PRIuFAST16 # define PRIuFAST16 "u" #endif #if !defined PRIxFAST16 || PRI_MACROS_BROKEN # undef PRIxFAST16 # define PRIxFAST16 "x" #endif #if !defined PRIXFAST16 || PRI_MACROS_BROKEN # undef PRIXFAST16 # define PRIXFAST16 "X" #endif #if !defined PRIdFAST32 || PRI_MACROS_BROKEN # undef PRIdFAST32 # define PRIdFAST32 "d" #endif #if !defined PRIiFAST32 || PRI_MACROS_BROKEN # undef PRIiFAST32 # define PRIiFAST32 "i" #endif #if !defined PRIoFAST32 || PRI_MACROS_BROKEN # undef PRIoFAST32 # define PRIoFAST32 "o" #endif #if !defined PRIuFAST32 || PRI_MACROS_BROKEN # undef PRIuFAST32 # define PRIuFAST32 "u" #endif #if !defined PRIxFAST32 || PRI_MACROS_BROKEN # undef PRIxFAST32 # define PRIxFAST32 "x" #endif #if !defined PRIXFAST32 || PRI_MACROS_BROKEN # undef PRIXFAST32 # define PRIXFAST32 "X" #endif #if !defined PRIdFAST64 || PRI_MACROS_BROKEN # undef PRIdFAST64 # define PRIdFAST64 PRId64 #endif #if !defined PRIiFAST64 || PRI_MACROS_BROKEN # undef PRIiFAST64 # define PRIiFAST64 PRIi64 #endif #if !defined PRIoFAST64 || PRI_MACROS_BROKEN # undef PRIoFAST64 # define PRIoFAST64 PRIo64 #endif #if !defined PRIuFAST64 || PRI_MACROS_BROKEN # undef PRIuFAST64 # define PRIuFAST64 PRIu64 #endif #if !defined PRIxFAST64 || PRI_MACROS_BROKEN # undef PRIxFAST64 # define PRIxFAST64 PRIx64 #endif #if !defined PRIXFAST64 || PRI_MACROS_BROKEN # undef PRIXFAST64 # define PRIXFAST64 PRIX64 #endif #if !defined PRIdMAX || PRI_MACROS_BROKEN # undef PRIdMAX # define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld") #endif #if !defined PRIiMAX || PRI_MACROS_BROKEN # undef PRIiMAX # define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli") #endif #if !defined PRIoMAX || PRI_MACROS_BROKEN # undef PRIoMAX # define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo") #endif #if !defined PRIuMAX || PRI_MACROS_BROKEN # undef PRIuMAX # define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu") #endif #if !defined PRIxMAX || PRI_MACROS_BROKEN # undef PRIxMAX # define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx") #endif #if !defined PRIXMAX || PRI_MACROS_BROKEN # undef PRIXMAX # define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX") #endif #if !defined PRIdPTR || PRI_MACROS_BROKEN # undef PRIdPTR # define PRIdPTR \ (sizeof (void *) == sizeof (long) ? "ld" : \ sizeof (void *) == sizeof (int) ? "d" : \ "lld") #endif #if !defined PRIiPTR || PRI_MACROS_BROKEN # undef PRIiPTR # define PRIiPTR \ (sizeof (void *) == sizeof (long) ? "li" : \ sizeof (void *) == sizeof (int) ? "i" : \ "lli") #endif #if !defined PRIoPTR || PRI_MACROS_BROKEN # undef PRIoPTR # define PRIoPTR \ (sizeof (void *) == sizeof (long) ? "lo" : \ sizeof (void *) == sizeof (int) ? "o" : \ "llo") #endif #if !defined PRIuPTR || PRI_MACROS_BROKEN # undef PRIuPTR # define PRIuPTR \ (sizeof (void *) == sizeof (long) ? "lu" : \ sizeof (void *) == sizeof (int) ? "u" : \ "llu") #endif #if !defined PRIxPTR || PRI_MACROS_BROKEN # undef PRIxPTR # define PRIxPTR \ (sizeof (void *) == sizeof (long) ? "lx" : \ sizeof (void *) == sizeof (int) ? "x" : \ "llx") #endif #if !defined PRIXPTR || PRI_MACROS_BROKEN # undef PRIXPTR # define PRIXPTR \ (sizeof (void *) == sizeof (long) ? "lX" : \ sizeof (void *) == sizeof (int) ? "X" : \ "llX") #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ISO C functions. This is required by the standard because some ISO C functions will require linking with this object file and the name space must not be polluted. */ # define open(name, flags) open_not_cancel_2 (name, flags) # define close(fd) close_not_cancel_no_status (fd) # define read(fd, buf, n) read_not_cancel (fd, buf, n) # define mmap(addr, len, prot, flags, fd, offset) \ __mmap (addr, len, prot, flags, fd, offset) # define munmap(addr, len) __munmap (addr, len) #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in . */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #ifdef __BEOS__ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif /* On reasonable systems, binary I/O is the default. */ #ifndef O_BINARY # define O_BINARY 0 #endif /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ int _nl_msg_cat_cntr; /* Expand a system dependent string segment. Return NULL if unsupported. */ static const char * get_sysdep_segment_value (const char *name) { /* Test for an ISO C 99 section 7.8.1 format string directive. Syntax: P R I { d | i | o | u | x | X } { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */ /* We don't use a table of 14 times 6 'const char *' strings here, because data relocations cost startup time. */ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I') { if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u' || name[3] == 'x' || name[3] == 'X') { if (name[4] == '8' && name[5] == '\0') { if (name[3] == 'd') return PRId8; if (name[3] == 'i') return PRIi8; if (name[3] == 'o') return PRIo8; if (name[3] == 'u') return PRIu8; if (name[3] == 'x') return PRIx8; if (name[3] == 'X') return PRIX8; abort (); } if (name[4] == '1' && name[5] == '6' && name[6] == '\0') { if (name[3] == 'd') return PRId16; if (name[3] == 'i') return PRIi16; if (name[3] == 'o') return PRIo16; if (name[3] == 'u') return PRIu16; if (name[3] == 'x') return PRIx16; if (name[3] == 'X') return PRIX16; abort (); } if (name[4] == '3' && name[5] == '2' && name[6] == '\0') { if (name[3] == 'd') return PRId32; if (name[3] == 'i') return PRIi32; if (name[3] == 'o') return PRIo32; if (name[3] == 'u') return PRIu32; if (name[3] == 'x') return PRIx32; if (name[3] == 'X') return PRIX32; abort (); } if (name[4] == '6' && name[5] == '4' && name[6] == '\0') { if (name[3] == 'd') return PRId64; if (name[3] == 'i') return PRIi64; if (name[3] == 'o') return PRIo64; if (name[3] == 'u') return PRIu64; if (name[3] == 'x') return PRIx64; if (name[3] == 'X') return PRIX64; abort (); } if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A' && name[7] == 'S' && name[8] == 'T') { if (name[9] == '8' && name[10] == '\0') { if (name[3] == 'd') return PRIdLEAST8; if (name[3] == 'i') return PRIiLEAST8; if (name[3] == 'o') return PRIoLEAST8; if (name[3] == 'u') return PRIuLEAST8; if (name[3] == 'x') return PRIxLEAST8; if (name[3] == 'X') return PRIXLEAST8; abort (); } if (name[9] == '1' && name[10] == '6' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST16; if (name[3] == 'i') return PRIiLEAST16; if (name[3] == 'o') return PRIoLEAST16; if (name[3] == 'u') return PRIuLEAST16; if (name[3] == 'x') return PRIxLEAST16; if (name[3] == 'X') return PRIXLEAST16; abort (); } if (name[9] == '3' && name[10] == '2' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST32; if (name[3] == 'i') return PRIiLEAST32; if (name[3] == 'o') return PRIoLEAST32; if (name[3] == 'u') return PRIuLEAST32; if (name[3] == 'x') return PRIxLEAST32; if (name[3] == 'X') return PRIXLEAST32; abort (); } if (name[9] == '6' && name[10] == '4' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST64; if (name[3] == 'i') return PRIiLEAST64; if (name[3] == 'o') return PRIoLEAST64; if (name[3] == 'u') return PRIuLEAST64; if (name[3] == 'x') return PRIxLEAST64; if (name[3] == 'X') return PRIXLEAST64; abort (); } } if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S' && name[7] == 'T') { if (name[8] == '8' && name[9] == '\0') { if (name[3] == 'd') return PRIdFAST8; if (name[3] == 'i') return PRIiFAST8; if (name[3] == 'o') return PRIoFAST8; if (name[3] == 'u') return PRIuFAST8; if (name[3] == 'x') return PRIxFAST8; if (name[3] == 'X') return PRIXFAST8; abort (); } if (name[8] == '1' && name[9] == '6' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST16; if (name[3] == 'i') return PRIiFAST16; if (name[3] == 'o') return PRIoFAST16; if (name[3] == 'u') return PRIuFAST16; if (name[3] == 'x') return PRIxFAST16; if (name[3] == 'X') return PRIXFAST16; abort (); } if (name[8] == '3' && name[9] == '2' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST32; if (name[3] == 'i') return PRIiFAST32; if (name[3] == 'o') return PRIoFAST32; if (name[3] == 'u') return PRIuFAST32; if (name[3] == 'x') return PRIxFAST32; if (name[3] == 'X') return PRIXFAST32; abort (); } if (name[8] == '6' && name[9] == '4' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST64; if (name[3] == 'i') return PRIiFAST64; if (name[3] == 'o') return PRIoFAST64; if (name[3] == 'u') return PRIuFAST64; if (name[3] == 'x') return PRIxFAST64; if (name[3] == 'X') return PRIXFAST64; abort (); } } if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X' && name[7] == '\0') { if (name[3] == 'd') return PRIdMAX; if (name[3] == 'i') return PRIiMAX; if (name[3] == 'o') return PRIoMAX; if (name[3] == 'u') return PRIuMAX; if (name[3] == 'x') return PRIxMAX; if (name[3] == 'X') return PRIXMAX; abort (); } if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R' && name[7] == '\0') { if (name[3] == 'd') return PRIdPTR; if (name[3] == 'i') return PRIiPTR; if (name[3] == 'o') return PRIoPTR; if (name[3] == 'u') return PRIuPTR; if (name[3] == 'x') return PRIxPTR; if (name[3] == 'X') return PRIXPTR; abort (); } } } /* Test for a glibc specific printf() format directive flag. */ if (name[0] == 'I' && name[1] == '\0') { #if defined _LIBC \ || ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)) \ && !defined __UCLIBC__) /* The 'I' flag, in numeric format directives, replaces ASCII digits with the 'outdigits' defined in the LC_CTYPE locale facet. This is used for Farsi (Persian), some Indic languages, and maybe Arabic. */ return "I"; #else return ""; #endif } /* Other system dependent strings are not valid. */ return NULL; } /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function _nl_load_domain (struct loaded_l10nfile *domain_file, struct binding *domainbinding) { __libc_lock_define_initialized_recursive (static, lock); int fd = -1; size_t size; #ifdef _LIBC struct stat64 st; #else struct stat st; #endif struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; struct loaded_domain *domain; int revision; const char *nullentry; size_t nullentrylen; __libc_lock_lock_recursive (lock); if (domain_file->decided != 0) { /* There are two possibilities: + this is the same thread calling again during this initialization via _nl_find_msg. We have initialized everything this call needs. + this is another thread which tried to initialize this object. Not necessary anymore since if the lock is available this is finished. */ goto done; } domain_file->decided = -1; domain_file->data = NULL; /* Note that it would be useless to store domainbinding in domain_file because domainbinding might be == NULL now but != NULL later (after a call to bind_textdomain_codeset). */ /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN syntax. */ if (domain_file->filename == NULL) goto out; /* Try to open the addressed file. */ fd = open (domain_file->filename, O_RDONLY | O_BINARY); if (fd == -1) goto out; /* We must know about the size of the file. */ if ( #ifdef _LIBC __builtin_expect (fstat64 (fd, &st) != 0, 0) #else __builtin_expect (fstat (fd, &st) != 0, 0) #endif || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) || __builtin_expect (size < sizeof (struct mo_file_header), 0)) /* Something went wrong. */ goto out; #ifdef HAVE_MMAP /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); if (__builtin_expect (data != MAP_FAILED, 1)) { /* mmap() call was successful. */ close (fd); fd = -1; use_mmap = 1; } assert (MAP_FAILED == (void *) -1); #endif /* If the data is not yet available (i.e. mmap'ed) we try to load it manually. */ if (data == (struct mo_file_header *) -1) { size_t to_read; char *read_ptr; data = (struct mo_file_header *) malloc (size); if (data == NULL) goto out; to_read = size; read_ptr = (char *) data; do { long int nb = (long int) read (fd, read_ptr, to_read); if (nb <= 0) { #ifdef EINTR if (nb == -1 && errno == EINTR) continue; #endif goto out; } read_ptr += nb; to_read -= nb; } while (to_read > 0); close (fd); fd = -1; } /* Using the magic number we can test whether it really is a message catalog file. */ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED, 0)) { /* The magic number is wrong: not a message catalog file. */ #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); goto out; } domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); if (domain == NULL) goto out; domain_file->data = domain; domain->data = (char *) data; domain->use_mmap = use_mmap; domain->mmap_size = size; domain->must_swap = data->magic != _MAGIC; domain->malloced = NULL; /* Fill in the information about the available tables. */ revision = W (domain->must_swap, data->revision); /* We support only the major revisions 0 and 1. */ switch (revision >> 16) { case 0: case 1: domain->nstrings = W (domain->must_swap, data->nstrings); domain->orig_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->orig_tab_offset)); domain->trans_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->trans_tab_offset)); domain->hash_size = W (domain->must_swap, data->hash_tab_size); domain->hash_tab = (domain->hash_size > 2 ? (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->hash_tab_offset)) : NULL); domain->must_swap_hash_tab = domain->must_swap; /* Now dispatch on the minor revision. */ switch (revision & 0xffff) { case 0: domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; break; case 1: default: { nls_uint32 n_sysdep_strings; if (domain->hash_tab == NULL) /* This is invalid. These minor revisions need a hash table. */ goto invalid; n_sysdep_strings = W (domain->must_swap, data->n_sysdep_strings); if (n_sysdep_strings > 0) { nls_uint32 n_sysdep_segments; const struct sysdep_segment *sysdep_segments; const char **sysdep_segment_values; const nls_uint32 *orig_sysdep_tab; const nls_uint32 *trans_sysdep_tab; nls_uint32 n_inmem_sysdep_strings; size_t memneed; char *mem; struct sysdep_string_desc *inmem_orig_sysdep_tab; struct sysdep_string_desc *inmem_trans_sysdep_tab; nls_uint32 *inmem_hash_tab; unsigned int i, j; /* Get the values of the system dependent segments. */ n_sysdep_segments = W (domain->must_swap, data->n_sysdep_segments); sysdep_segments = (const struct sysdep_segment *) ((char *) data + W (domain->must_swap, data->sysdep_segments_offset)); sysdep_segment_values = (const char **) alloca (n_sysdep_segments * sizeof (const char *)); for (i = 0; i < n_sysdep_segments; i++) { const char *name = (char *) data + W (domain->must_swap, sysdep_segments[i].offset); nls_uint32 namelen = W (domain->must_swap, sysdep_segments[i].length); if (!(namelen > 0 && name[namelen - 1] == '\0')) { freea (sysdep_segment_values); goto invalid; } sysdep_segment_values[i] = get_sysdep_segment_value (name); } orig_sysdep_tab = (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->orig_sysdep_tab_offset)); trans_sysdep_tab = (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->trans_sysdep_tab_offset)); /* Compute the amount of additional memory needed for the system dependent strings and the augmented hash table. At the same time, also drop string pairs which refer to an undefined system dependent segment. */ n_inmem_sysdep_strings = 0; memneed = domain->hash_size * sizeof (nls_uint32); for (i = 0; i < n_sysdep_strings; i++) { int valid = 1; size_t needs[2]; for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); size_t need = 0; const struct segment_pair *p = sysdep_string->segments; if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) for (p = sysdep_string->segments;; p++) { nls_uint32 sysdepref; need += W (domain->must_swap, p->segsize); sysdepref = W (domain->must_swap, p->sysdepref); if (sysdepref == SEGMENTS_END) break; if (sysdepref >= n_sysdep_segments) { /* Invalid. */ freea (sysdep_segment_values); goto invalid; } if (sysdep_segment_values[sysdepref] == NULL) { /* This particular string pair is invalid. */ valid = 0; break; } need += strlen (sysdep_segment_values[sysdepref]); } needs[j] = need; if (!valid) break; } if (valid) { n_inmem_sysdep_strings++; memneed += needs[0] + needs[1]; } } memneed += 2 * n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); if (n_inmem_sysdep_strings > 0) { unsigned int k; /* Allocate additional memory. */ mem = (char *) malloc (memneed); if (mem == NULL) goto invalid; domain->malloced = mem; inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem; mem += n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem; mem += n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); inmem_hash_tab = (nls_uint32 *) mem; mem += domain->hash_size * sizeof (nls_uint32); /* Compute the system dependent strings. */ k = 0; for (i = 0; i < n_sysdep_strings; i++) { int valid = 1; for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); const struct segment_pair *p = sysdep_string->segments; if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) for (p = sysdep_string->segments;; p++) { nls_uint32 sysdepref; sysdepref = W (domain->must_swap, p->sysdepref); if (sysdepref == SEGMENTS_END) break; if (sysdep_segment_values[sysdepref] == NULL) { /* This particular string pair is invalid. */ valid = 0; break; } } if (!valid) break; } if (valid) { for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); const char *static_segments = (char *) data + W (domain->must_swap, sysdep_string->offset); const struct segment_pair *p = sysdep_string->segments; /* Concatenate the segments, and fill inmem_orig_sysdep_tab[k] (for j == 0) and inmem_trans_sysdep_tab[k] (for j == 1). */ struct sysdep_string_desc *inmem_tab_entry = (j == 0 ? inmem_orig_sysdep_tab : inmem_trans_sysdep_tab) + k; if (W (domain->must_swap, p->sysdepref) == SEGMENTS_END) { /* Only one static segment. */ inmem_tab_entry->length = W (domain->must_swap, p->segsize); inmem_tab_entry->pointer = static_segments; } else { inmem_tab_entry->pointer = mem; for (p = sysdep_string->segments;; p++) { nls_uint32 segsize = W (domain->must_swap, p->segsize); nls_uint32 sysdepref = W (domain->must_swap, p->sysdepref); size_t n; if (segsize > 0) { memcpy (mem, static_segments, segsize); mem += segsize; static_segments += segsize; } if (sysdepref == SEGMENTS_END) break; n = strlen (sysdep_segment_values[sysdepref]); memcpy (mem, sysdep_segment_values[sysdepref], n); mem += n; } inmem_tab_entry->length = mem - inmem_tab_entry->pointer; } } k++; } } if (k != n_inmem_sysdep_strings) abort (); /* Compute the augmented hash table. */ for (i = 0; i < domain->hash_size; i++) inmem_hash_tab[i] = W (domain->must_swap_hash_tab, domain->hash_tab[i]); for (i = 0; i < n_inmem_sysdep_strings; i++) { const char *msgid = inmem_orig_sysdep_tab[i].pointer; nls_uint32 hash_val = __hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); for (;;) { if (inmem_hash_tab[idx] == 0) { /* Hash table entry is empty. Use it. */ inmem_hash_tab[idx] = 1 + domain->nstrings + i; break; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } } domain->n_sysdep_strings = n_inmem_sysdep_strings; domain->orig_sysdep_tab = inmem_orig_sysdep_tab; domain->trans_sysdep_tab = inmem_trans_sysdep_tab; domain->hash_tab = inmem_hash_tab; domain->must_swap_hash_tab = 0; } else { domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; } freea (sysdep_segment_values); } else { domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; } } break; } break; default: /* This is an invalid revision. */ invalid: /* This is an invalid .mo file or we ran out of resources. */ free (domain->malloced); #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); free (domain); domain_file->data = NULL; goto out; } /* No caches of converted translations so far. */ domain->conversions = NULL; domain->nconversions = 0; #ifdef _LIBC __libc_rwlock_init (domain->conversions_lock); #else gl_rwlock_init (domain->conversions_lock); #endif /* Get the header entry and look for a plural specification. */ #ifdef IN_LIBGLOCALE nullentry = _nl_find_msg (domain_file, domainbinding, NULL, "", &nullentrylen); #else nullentry = _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen); #endif if (__builtin_expect (nullentry == (char *) -1, 0)) { #ifdef _LIBC __libc_rwlock_fini (domain->conversions_lock); #endif goto invalid; } EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals); out: if (fd != -1) close (fd); domain_file->decided = 1; done: __libc_lock_unlock_recursive (lock); } #ifdef _LIBC void internal_function __libc_freeres_fn_section _nl_unload_domain (struct loaded_domain *domain) { size_t i; if (domain->plural != &__gettext_germanic_plural) __gettext_free_exp ((struct expression *) domain->plural); for (i = 0; i < domain->nconversions; i++) { struct converted_domain *convd = &domain->conversions[i]; free ((char *) convd->encoding); if (convd->conv_tab != NULL && convd->conv_tab != (char **) -1) free (convd->conv_tab); if (convd->conv != (__gconv_t) -1) __gconv_close (convd->conv); } free (domain->conversions); __libc_rwlock_fini (domain->conversions_lock); free (domain->malloced); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) munmap ((caddr_t) domain->data, domain->mmap_size); else # endif /* _POSIX_MAPPED_FILES */ free ((void *) domain->data); free (domain); } #endif gnupg-1.4.20/intl/l10nflist.c0000644000175000017500000002550012635262326012576 00000000000000/* Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Tell glibc's to provide a prototype for stpcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #if defined _LIBC || defined HAVE_ARGZ_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # ifndef stpcpy # define stpcpy(dest, src) __stpcpy(dest, src) # endif #else # ifndef HAVE_STPCPY static char *stpcpy (char *dest, const char *src); # endif #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) #endif /* Define function which are usually not available. */ #ifdef _LIBC # define __argz_count(argz, len) INTUSE(__argz_count) (argz, len) #elif defined HAVE_ARGZ_COUNT # undef __argz_count # define __argz_count argz_count #else /* Returns the number of strings in ARGZ. */ static size_t argz_count__ (const char *argz, size_t len) { size_t count = 0; while (len > 0) { size_t part_len = strlen (argz); argz += part_len + 1; len -= part_len + 1; count++; } return count; } # undef __argz_count # define __argz_count(argz, len) argz_count__ (argz, len) #endif /* !_LIBC && !HAVE_ARGZ_COUNT */ #ifdef _LIBC # define __argz_stringify(argz, len, sep) \ INTUSE(__argz_stringify) (argz, len, sep) #elif defined HAVE_ARGZ_STRINGIFY # undef __argz_stringify # define __argz_stringify argz_stringify #else /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ static void argz_stringify__ (char *argz, size_t len, int sep) { while (len > 0) { size_t part_len = strlen (argz); argz += part_len; len -= part_len + 1; if (len > 0) *argz++ = sep; } } # undef __argz_stringify # define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) #endif /* !_LIBC && !HAVE_ARGZ_STRINGIFY */ #ifdef _LIBC #elif defined HAVE_ARGZ_NEXT # undef __argz_next # define __argz_next argz_next #else static char * argz_next__ (char *argz, size_t argz_len, const char *entry) { if (entry) { if (entry < argz + argz_len) entry = strchr (entry, '\0') + 1; return entry >= argz + argz_len ? NULL : (char *) entry; } else if (argz_len > 0) return argz; else return 0; } # undef __argz_next # define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) #endif /* !_LIBC && !HAVE_ARGZ_NEXT */ /* Return number of bits set in X. */ static inline int pop (int x) { /* We assume that no more than 16 bits are used. */ x = ((x & ~0x5555) >> 1) + (x & 0x5555); x = ((x & ~0x3333) >> 2) + (x & 0x3333); x = ((x >> 4) + x) & 0x0f0f; x = ((x >> 8) + x) & 0xff; return x; } struct loaded_l10nfile * _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *filename, int do_allocate) { char *abs_filename; struct loaded_l10nfile **lastp; struct loaded_l10nfile *retval; char *cp; size_t dirlist_count; size_t entries; int cnt; /* If LANGUAGE contains an absolute directory specification, we ignore DIRLIST. */ if (IS_ABSOLUTE_PATH (language)) dirlist_len = 0; /* Allocate room for the full file name. */ abs_filename = (char *) malloc (dirlist_len + strlen (language) + ((mask & XPG_TERRITORY) != 0 ? strlen (territory) + 1 : 0) + ((mask & XPG_CODESET) != 0 ? strlen (codeset) + 1 : 0) + ((mask & XPG_NORM_CODESET) != 0 ? strlen (normalized_codeset) + 1 : 0) + ((mask & XPG_MODIFIER) != 0 ? strlen (modifier) + 1 : 0) + 1 + strlen (filename) + 1); if (abs_filename == NULL) return NULL; /* Construct file name. */ cp = abs_filename; if (dirlist_len > 0) { memcpy (cp, dirlist, dirlist_len); __argz_stringify (cp, dirlist_len, PATH_SEPARATOR); cp += dirlist_len; cp[-1] = '/'; } cp = stpcpy (cp, language); if ((mask & XPG_TERRITORY) != 0) { *cp++ = '_'; cp = stpcpy (cp, territory); } if ((mask & XPG_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, codeset); } if ((mask & XPG_NORM_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, normalized_codeset); } if ((mask & XPG_MODIFIER) != 0) { *cp++ = '@'; cp = stpcpy (cp, modifier); } *cp++ = '/'; stpcpy (cp, filename); /* Look in list of already loaded domains whether it is already available. */ lastp = l10nfile_list; for (retval = *l10nfile_list; retval != NULL; retval = retval->next) if (retval->filename != NULL) { int compare = strcmp (retval->filename, abs_filename); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It's not in the list. */ retval = NULL; break; } lastp = &retval->next; } if (retval != NULL || do_allocate == 0) { free (abs_filename); return retval; } dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1); /* Allocate a new loaded_l10nfile. */ retval = (struct loaded_l10nfile *) malloc (sizeof (*retval) + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0)) * sizeof (struct loaded_l10nfile *))); if (retval == NULL) { free (abs_filename); return NULL; } retval->filename = abs_filename; /* We set retval->data to NULL here; it is filled in later. Setting retval->decided to 1 here means that retval does not correspond to a real file (dirlist_count > 1) or is not worth looking up (if an unnormalized codeset was specified). */ retval->decided = (dirlist_count > 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); retval->data = NULL; retval->next = *lastp; *lastp = retval; entries = 0; /* Recurse to fill the inheritance list of RETVAL. If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL entry does not correspond to a real file; retval->filename contains colons. In this case we loop across all elements of DIRLIST and across all bit patterns dominated by MASK. If the DIRLIST is a single directory or entirely redundant (i.e. DIRLIST_COUNT == 1), we loop across all bit patterns dominated by MASK, excluding MASK itself. In either case, we loop down from MASK to 0. This has the effect that the extra bits in the locale name are dropped in this order: first the modifier, then the territory, then the codeset, then the normalized_codeset. */ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt) if ((cnt & ~mask) == 0 && !((cnt & XPG_CODESET) != 0 && (cnt & XPG_NORM_CODESET) != 0)) { if (dirlist_count > 1) { /* Iterate over all elements of the DIRLIST. */ char *dir = NULL; while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) != NULL) retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, filename, 1); } else retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, cnt, language, territory, codeset, normalized_codeset, modifier, filename, 1); } retval->successor[entries] = NULL; return retval; } /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ const char * _nl_normalize_codeset (const char *codeset, size_t name_len) { size_t len = 0; int only_digit = 1; char *retval; char *wp; size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) if (isalnum ((unsigned char) codeset[cnt])) { ++len; if (isalpha ((unsigned char) codeset[cnt])) only_digit = 0; } retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); if (retval != NULL) { if (only_digit) wp = stpcpy (retval, "iso"); else wp = retval; for (cnt = 0; cnt < name_len; ++cnt) if (isalpha ((unsigned char) codeset[cnt])) *wp++ = tolower ((unsigned char) codeset[cnt]); else if (isdigit ((unsigned char) codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; } return (const char *) retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (char *dest, const char *src) { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif gnupg-1.4.20/intl/plural.c0000644000175000017500000015442012635262326012265 00000000000000/* A Bison parser, made by GNU Bison 2.7. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc. This program 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.7" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 2 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the variable and function names. */ #define yyparse __gettextparse #define yylex __gettextlex #define yyerror __gettexterror #define yylval __gettextlval #define yychar __gettextchar #define yydebug __gettextdebug #define yynerrs __gettextnerrs /* Copy the first part of user declarations. */ /* Line 371 of yacc.c */ #line 1 "plural.y" /* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* For bison < 2.0, the bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "plural-exp.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ #ifndef _LIBC # define __gettextparse PLURAL_PARSE #endif /* Line 371 of yacc.c */ #line 119 "plural.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus # define YY_NULL nullptr # else # define YY_NULL 0 # endif # endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* In a future release of Bison, this section will be replaced by #include "plural.h". */ #ifndef YY__GETTEXT_PLURAL_H_INCLUDED # define YY__GETTEXT_PLURAL_H_INCLUDED /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int __gettextdebug; #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { EQUOP2 = 258, CMPOP2 = 259, ADDOP2 = 260, MULOP2 = 261, NUMBER = 262 }; #endif /* Tokens. */ #define EQUOP2 258 #define CMPOP2 259 #define ADDOP2 260 #define MULOP2 261 #define NUMBER 262 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE { /* Line 387 of yacc.c */ #line 49 "plural.y" unsigned long int num; enum expression_operator op; struct expression *exp; /* Line 387 of yacc.c */ #line 183 "plural.c" } YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int __gettextparse (void *YYPARSE_PARAM); #else int __gettextparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int __gettextparse (struct parse_args *arg); #else int __gettextparse (); #endif #endif /* ! YYPARSE_PARAM */ #endif /* !YY__GETTEXT_PLURAL_H_INCLUDED */ /* Copy the second part of user declarations. */ /* Line 390 of yacc.c */ #line 55 "plural.y" /* Prototypes for local functions. */ static int yylex (YYSTYPE *lval, struct parse_args *arg); static void yyerror (struct parse_args *arg, const char *str); /* Allocation of expressions. */ static struct expression * new_exp (int nargs, enum expression_operator op, struct expression * const *args) { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (enum expression_operator op) { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (enum expression_operator op, struct expression *right) { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (enum expression_operator op, struct expression *left, struct expression *right) { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (enum expression_operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } /* Line 390 of yacc.c */ #line 287 "plural.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(N) (N) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (YYID (0)) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 9 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 54 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 16 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 3 /* YYNRULES -- Number of rules. */ #define YYNRULES 13 /* YYNRULES -- Number of states. */ #define YYNSTATES 27 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 262 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 6, 7, 8, 9, 11 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 5, 11, 15, 19, 23, 27, 31, 35, 38, 40, 42 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 17, 0, -1, 18, -1, 18, 3, 18, 12, 18, -1, 18, 4, 18, -1, 18, 5, 18, -1, 18, 6, 18, -1, 18, 7, 18, -1, 18, 8, 18, -1, 18, 9, 18, -1, 10, 18, -1, 13, -1, 11, -1, 14, 18, 15, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 152, 152, 160, 164, 168, 172, 176, 180, 184, 188, 192, 196, 201 }; #endif #if YYDEBUG || YYERROR_VERBOSE || 0 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2", "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'", "$accept", "start", "exp", YY_NULL }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 63, 124, 38, 258, 259, 260, 261, 33, 262, 58, 110, 40, 41 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, 1, 3 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. Performed when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 12, 11, 0, 0, 2, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 5, 6, 7, 8, 9, 0, 3 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 5, 6 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -10 static const yytype_int8 yypact[] = { -9, -9, -10, -10, -9, 8, 36, -10, 13, -10, -9, -9, -9, -9, -9, -9, -9, -10, 26, 41, 45, 18, -2, 14, -10, -9, 36 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -10, -10, -1 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 7, 1, 2, 8, 3, 4, 15, 16, 9, 18, 19, 20, 21, 22, 23, 24, 10, 11, 12, 13, 14, 15, 16, 16, 26, 14, 15, 16, 17, 10, 11, 12, 13, 14, 15, 16, 0, 0, 25, 10, 11, 12, 13, 14, 15, 16, 12, 13, 14, 15, 16, 13, 14, 15, 16 }; #define yypact_value_is_default(Yystate) \ (!!((Yystate) == (-10))) #define yytable_value_is_error(Yytable_value) \ YYID (0) static const yytype_int8 yycheck[] = { 1, 10, 11, 4, 13, 14, 8, 9, 0, 10, 11, 12, 13, 14, 15, 16, 3, 4, 5, 6, 7, 8, 9, 9, 25, 7, 8, 9, 15, 3, 4, 5, 6, 7, 8, 9, -1, -1, 12, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, 8, 9 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 10, 11, 13, 14, 17, 18, 18, 18, 0, 3, 4, 5, 6, 7, 8, 9, 15, 18, 18, 18, 18, 18, 18, 18, 12, 18 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. However, YYFAIL appears to be in use. Nevertheless, it is formally deprecated in Bison 2.4.2's NEWS entry, where a plan to phase it out is discussed. */ #define YYFAIL goto yyerrlab #if defined YYFAIL /* This is here to suppress warnings from the GCC cpp's -Wunused-macros. Normally we don't worry about that warning, but some users do, and we want to make it easy for users to remove YYFAIL uses, which will produce warnings from Bison 2.5. */ #endif #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (arg, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) /* Error token number */ #define YYTERROR 1 #define YYERRCODE 256 /* This macro is provided for backward compatibility. */ #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval, arg) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value, arg); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parse_args *arg) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep, arg) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; struct parse_args *arg; #endif { FILE *yyo = yyoutput; YYUSE (yyo); if (!yyvaluep) return; YYUSE (arg); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parse_args *arg) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep, arg) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; struct parse_args *arg; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep, arg); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parse_args *arg) #else static void yy_reduce_print (yyvsp, yyrule, arg) YYSTYPE *yyvsp; int yyrule; struct parse_args *arg; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) , arg); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule, arg); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message about the unexpected token YYTOKEN for the state stack whose top is YYSSP. Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is not large enough to hold the message. In that case, also set *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, yytype_int16 *yyssp, int yytoken) { YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULL; /* Arguments of yyformat. */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; /* Number of reported tokens (one for the "unexpected", one per "expected"). */ int yycount = 0; /* There are many possibilities here to consider: - Assume YYFAIL is not used. It's too flawed to consider. See for details. YYERROR is fine as it does not invoke this function. - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action is an error action. In that case, don't check for expected tokens because there are none. - The only way there can be no lookahead present (in yychar) is if this state is a consistent state with a default action. Thus, detecting the absence of a lookahead is sufficient to determine that there is no unexpected or expected token to report. In that case, just report a simple "syntax error". - Don't assume there isn't a lookahead just because this state is a consistent state with a default action. There might have been a previous inconsistent state, consistent state with a non-default action, or user semantic action that manipulated yychar. - Of course, the expected token list depends on states to have correct lookahead information, and it depends on the parser not to perform extra reductions after fetching a lookahead from the scanner and before detecting a syntax error. Thus, state merging (from LALR or IELR) and default reductions corrupt the expected token list. However, the list is correct for canonical LR with one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ if (yytoken != YYEMPTY) { int yyn = yypact[*yyssp]; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. In other words, skip the first -YYN actions for this state because they are default actions. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yyx; for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR && !yytable_value_is_error (yytable[yyx + yyn])) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; break; } yyarg[yycount++] = yytname[yyx]; { YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } } } } switch (yycount) { # define YYCASE_(N, S) \ case N: \ yyformat = S; \ break YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); # undef YYCASE_ } { YYSIZE_T yysize1 = yysize + yystrlen (yyformat); if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) return 2; yysize = yysize1; } if (*yymsg_alloc < yysize) { *yymsg_alloc = 2 * yysize; if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; return 1; } /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ { char *yyp = *yymsg; int yyi = 0; while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyformat += 2; } else { yyp++; yyformat++; } } return 0; } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parse_args *arg) #else static void yydestruct (yymsg, yytype, yyvaluep, arg) const char *yymsg; int yytype; YYSTYPE *yyvaluep; struct parse_args *arg; #endif { YYUSE (yyvaluep); YYUSE (arg); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (struct parse_args *arg) #else int yyparse (arg) struct parse_args *arg; #endif #endif { /* The lookahead symbol. */ int yychar; #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ static YYSTYPE yyval_default; # define YY_INITIAL_VALUE(Value) = Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif /* The semantic value of the lookahead symbol. */ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); /* Number of syntax errors so far. */ int yynerrs; int yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: `yyss': related to states. `yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; YYSIZE_T yystacksize; int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: /* Line 1792 of yacc.c */ #line 153 "plural.y" { if ((yyvsp[(1) - (1)].exp) == NULL) YYABORT; arg->res = (yyvsp[(1) - (1)].exp); } break; case 3: /* Line 1792 of yacc.c */ #line 161 "plural.y" { (yyval.exp) = new_exp_3 (qmop, (yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].exp), (yyvsp[(5) - (5)].exp)); } break; case 4: /* Line 1792 of yacc.c */ #line 165 "plural.y" { (yyval.exp) = new_exp_2 (lor, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 5: /* Line 1792 of yacc.c */ #line 169 "plural.y" { (yyval.exp) = new_exp_2 (land, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 6: /* Line 1792 of yacc.c */ #line 173 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 7: /* Line 1792 of yacc.c */ #line 177 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 8: /* Line 1792 of yacc.c */ #line 181 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 9: /* Line 1792 of yacc.c */ #line 185 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 10: /* Line 1792 of yacc.c */ #line 189 "plural.y" { (yyval.exp) = new_exp_1 (lnot, (yyvsp[(2) - (2)].exp)); } break; case 11: /* Line 1792 of yacc.c */ #line 193 "plural.y" { (yyval.exp) = new_exp_0 (var); } break; case 12: /* Line 1792 of yacc.c */ #line 197 "plural.y" { if (((yyval.exp) = new_exp_0 (num)) != NULL) (yyval.exp)->val.num = (yyvsp[(1) - (1)].num); } break; case 13: /* Line 1792 of yacc.c */ #line 202 "plural.y" { (yyval.exp) = (yyvsp[(2) - (3)].exp); } break; /* Line 1792 of yacc.c */ #line 1607 "plural.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (arg, YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) { char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; yysyntax_error_status = YYSYNTAX_ERROR; if (yysyntax_error_status == 0) yymsgp = yymsg; else if (yysyntax_error_status == 1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); if (!yymsg) { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; yysyntax_error_status = 2; } else { yysyntax_error_status = YYSYNTAX_ERROR; yymsgp = yymsg; } } yyerror (arg, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } # undef YYSYNTAX_ERROR #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, arg); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp, arg); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow || YYERROR_VERBOSE /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (arg, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, arg); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp, arg); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } /* Line 2055 of yacc.c */ #line 207 "plural.y" void internal_function FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (YYSTYPE *lval, struct parse_args *arg) { const char *exp = arg->cp; int result; while (1) { if (exp[0] == '\0') { arg->cp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } arg->cp = exp; return result; } static void yyerror (struct parse_args *arg, const char *str) { /* Do nothing. We don't print error messages here. */ } gnupg-1.4.20/intl/finddomain.c0000644000175000017500000001357612635262326013104 00000000000000/* Handle list of needed message catalogs Copyright (C) 1995-1999, 2000-2001, 2003-2007 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define_initialized __libc_rwlock_define_initialized # define gl_rwlock_rdlock __libc_rwlock_rdlock # define gl_rwlock_wrlock __libc_rwlock_wrlock # define gl_rwlock_unlock __libc_rwlock_unlock #else # include "lock.h" #endif /* @@ end of prolog @@ */ /* List of already loaded domains. */ static struct loaded_l10nfile *_nl_loaded_domains; /* Return a data structure describing the message catalog described by the DOMAINNAME and CATEGORY parameters with respect to the currently established bindings. */ struct loaded_l10nfile * internal_function _nl_find_domain (const char *dirname, char *locale, const char *domainname, struct binding *domainbinding) { struct loaded_l10nfile *retval; const char *language; const char *modifier; const char *territory; const char *codeset; const char *normalized_codeset; const char *alias_value; int mask; /* LOCALE can consist of up to four recognized parts for the XPG syntax: language[_territory][.codeset][@modifier] Beside the first part all of them are allowed to be missing. If the full specified locale is not found, the less specific one are looked for. The various parts will be stripped off according to the following order: (1) codeset (2) normalized codeset (3) territory (4) modifier */ /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ gl_rwlock_define_initialized (static, lock); gl_rwlock_rdlock (lock); /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, NULL, NULL, domainname, 0); gl_rwlock_unlock (lock); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided <= 0) _nl_load_domain (retval, domainbinding); if (retval->data != NULL) return retval; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided <= 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } return retval; /* NOTREACHED */ } /* See whether the locale value is an alias. If yes its value *overwrites* the alias name. No test for the original value is done. */ alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { #if defined _LIBC || defined HAVE_STRDUP locale = strdup (alias_value); if (locale == NULL) return NULL; #else size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); #endif } /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_', '.', and `@'. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset); if (mask == -1) /* This means we are out of core. */ return NULL; /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ gl_rwlock_wrlock (lock); /* Create all possible locale entries which might be interested in generalization. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, domainname, 1); gl_rwlock_unlock (lock); if (retval == NULL) /* This means we are out of core. */ goto out; if (retval->decided <= 0) _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided <= 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } } /* The room for an alias was dynamically allocated. Free it now. */ if (alias_value != NULL) free (locale); out: /* The space for normalized_codeset is dynamically allocated. Free it. */ if (mask & XPG_NORM_CODESET) free ((void *) normalized_codeset); return retval; } #ifdef _LIBC /* This is called from iconv/gconv_db.c's free_mem, as locales must be freed before freeing gconv steps arrays. */ void __libc_freeres_fn_section _nl_finddomain_subfreeres () { struct loaded_l10nfile *runp = _nl_loaded_domains; while (runp != NULL) { struct loaded_l10nfile *here = runp; if (runp->data != NULL) _nl_unload_domain ((struct loaded_domain *) runp->data); runp = runp->next; free ((char *) here->filename); free (here); } } #endif gnupg-1.4.20/intl/localename.c0000644000175000017500000024736112635262326013075 00000000000000/* Determine name of the currently selected locale. Copyright (C) 1995-2014 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Ulrich Drepper , 1995. */ /* Native Windows code written by Tor Lillqvist . */ /* Mac OS X code written by Bruno Haible . */ #include /* Specification. */ #ifdef IN_LIBINTL # include "gettextP.h" #else # include "localename.h" #endif #include #include #include #include #include #if HAVE_USELOCALE /* Mac OS X 10.5 defines the locale_t type in . */ # if defined __APPLE__ && defined __MACH__ # include # endif # include # if !defined IN_LIBINTL # include "glthread/lock.h" # endif #endif #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE # include # if HAVE_CFLOCALECOPYCURRENT # include # elif HAVE_CFPREFERENCESCOPYAPPVALUE # include # endif #endif #if defined _WIN32 || defined __WIN32__ # define WINDOWS_NATIVE # if !defined IN_LIBINTL # include "glthread/lock.h" # endif #endif #if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ # define WIN32_LEAN_AND_MEAN # include # include /* List of language codes, sorted by value: 0x01 LANG_ARABIC 0x02 LANG_BULGARIAN 0x03 LANG_CATALAN 0x04 LANG_CHINESE 0x05 LANG_CZECH 0x06 LANG_DANISH 0x07 LANG_GERMAN 0x08 LANG_GREEK 0x09 LANG_ENGLISH 0x0a LANG_SPANISH 0x0b LANG_FINNISH 0x0c LANG_FRENCH 0x0d LANG_HEBREW 0x0e LANG_HUNGARIAN 0x0f LANG_ICELANDIC 0x10 LANG_ITALIAN 0x11 LANG_JAPANESE 0x12 LANG_KOREAN 0x13 LANG_DUTCH 0x14 LANG_NORWEGIAN 0x15 LANG_POLISH 0x16 LANG_PORTUGUESE 0x17 LANG_ROMANSH 0x18 LANG_ROMANIAN 0x19 LANG_RUSSIAN 0x1a LANG_CROATIAN == LANG_SERBIAN 0x1b LANG_SLOVAK 0x1c LANG_ALBANIAN 0x1d LANG_SWEDISH 0x1e LANG_THAI 0x1f LANG_TURKISH 0x20 LANG_URDU 0x21 LANG_INDONESIAN 0x22 LANG_UKRAINIAN 0x23 LANG_BELARUSIAN 0x24 LANG_SLOVENIAN 0x25 LANG_ESTONIAN 0x26 LANG_LATVIAN 0x27 LANG_LITHUANIAN 0x28 LANG_TAJIK 0x29 LANG_FARSI 0x2a LANG_VIETNAMESE 0x2b LANG_ARMENIAN 0x2c LANG_AZERI 0x2d LANG_BASQUE 0x2e LANG_SORBIAN 0x2f LANG_MACEDONIAN 0x30 LANG_SUTU 0x31 LANG_TSONGA 0x32 LANG_TSWANA 0x33 LANG_VENDA 0x34 LANG_XHOSA 0x35 LANG_ZULU 0x36 LANG_AFRIKAANS 0x37 LANG_GEORGIAN 0x38 LANG_FAEROESE 0x39 LANG_HINDI 0x3a LANG_MALTESE 0x3b LANG_SAMI 0x3c LANG_GAELIC 0x3d LANG_YIDDISH 0x3e LANG_MALAY 0x3f LANG_KAZAK 0x40 LANG_KYRGYZ 0x41 LANG_SWAHILI 0x42 LANG_TURKMEN 0x43 LANG_UZBEK 0x44 LANG_TATAR 0x45 LANG_BENGALI 0x46 LANG_PUNJABI 0x47 LANG_GUJARATI 0x48 LANG_ORIYA 0x49 LANG_TAMIL 0x4a LANG_TELUGU 0x4b LANG_KANNADA 0x4c LANG_MALAYALAM 0x4d LANG_ASSAMESE 0x4e LANG_MARATHI 0x4f LANG_SANSKRIT 0x50 LANG_MONGOLIAN 0x51 LANG_TIBETAN 0x52 LANG_WELSH 0x53 LANG_CAMBODIAN 0x54 LANG_LAO 0x55 LANG_BURMESE 0x56 LANG_GALICIAN 0x57 LANG_KONKANI 0x58 LANG_MANIPURI 0x59 LANG_SINDHI 0x5a LANG_SYRIAC 0x5b LANG_SINHALESE 0x5c LANG_CHEROKEE 0x5d LANG_INUKTITUT 0x5e LANG_AMHARIC 0x5f LANG_TAMAZIGHT 0x60 LANG_KASHMIRI 0x61 LANG_NEPALI 0x62 LANG_FRISIAN 0x63 LANG_PASHTO 0x64 LANG_TAGALOG 0x65 LANG_DIVEHI 0x66 LANG_EDO 0x67 LANG_FULFULDE 0x68 LANG_HAUSA 0x69 LANG_IBIBIO 0x6a LANG_YORUBA 0x6d LANG_BASHKIR 0x6e LANG_LUXEMBOURGISH 0x6f LANG_GREENLANDIC 0x70 LANG_IGBO 0x71 LANG_KANURI 0x72 LANG_OROMO 0x73 LANG_TIGRINYA 0x74 LANG_GUARANI 0x75 LANG_HAWAIIAN 0x76 LANG_LATIN 0x77 LANG_SOMALI 0x78 LANG_YI 0x79 LANG_PAPIAMENTU 0x7a LANG_MAPUDUNGUN 0x7c LANG_MOHAWK 0x7e LANG_BRETON 0x82 LANG_OCCITAN 0x83 LANG_CORSICAN 0x84 LANG_ALSATIAN 0x85 LANG_YAKUT 0x86 LANG_KICHE 0x87 LANG_KINYARWANDA 0x88 LANG_WOLOF 0x8c LANG_DARI 0x91 LANG_SCOTTISH_GAELIC */ /* Mingw headers don't have latest language and sublanguage codes. */ # ifndef LANG_AFRIKAANS # define LANG_AFRIKAANS 0x36 # endif # ifndef LANG_ALBANIAN # define LANG_ALBANIAN 0x1c # endif # ifndef LANG_ALSATIAN # define LANG_ALSATIAN 0x84 # endif # ifndef LANG_AMHARIC # define LANG_AMHARIC 0x5e # endif # ifndef LANG_ARABIC # define LANG_ARABIC 0x01 # endif # ifndef LANG_ARMENIAN # define LANG_ARMENIAN 0x2b # endif # ifndef LANG_ASSAMESE # define LANG_ASSAMESE 0x4d # endif # ifndef LANG_AZERI # define LANG_AZERI 0x2c # endif # ifndef LANG_BASHKIR # define LANG_BASHKIR 0x6d # endif # ifndef LANG_BASQUE # define LANG_BASQUE 0x2d # endif # ifndef LANG_BELARUSIAN # define LANG_BELARUSIAN 0x23 # endif # ifndef LANG_BENGALI # define LANG_BENGALI 0x45 # endif # ifndef LANG_BRETON # define LANG_BRETON 0x7e # endif # ifndef LANG_BURMESE # define LANG_BURMESE 0x55 # endif # ifndef LANG_CAMBODIAN # define LANG_CAMBODIAN 0x53 # endif # ifndef LANG_CATALAN # define LANG_CATALAN 0x03 # endif # ifndef LANG_CHEROKEE # define LANG_CHEROKEE 0x5c # endif # ifndef LANG_CORSICAN # define LANG_CORSICAN 0x83 # endif # ifndef LANG_DARI # define LANG_DARI 0x8c # endif # ifndef LANG_DIVEHI # define LANG_DIVEHI 0x65 # endif # ifndef LANG_EDO # define LANG_EDO 0x66 # endif # ifndef LANG_ESTONIAN # define LANG_ESTONIAN 0x25 # endif # ifndef LANG_FAEROESE # define LANG_FAEROESE 0x38 # endif # ifndef LANG_FARSI # define LANG_FARSI 0x29 # endif # ifndef LANG_FRISIAN # define LANG_FRISIAN 0x62 # endif # ifndef LANG_FULFULDE # define LANG_FULFULDE 0x67 # endif # ifndef LANG_GAELIC # define LANG_GAELIC 0x3c # endif # ifndef LANG_GALICIAN # define LANG_GALICIAN 0x56 # endif # ifndef LANG_GEORGIAN # define LANG_GEORGIAN 0x37 # endif # ifndef LANG_GREENLANDIC # define LANG_GREENLANDIC 0x6f # endif # ifndef LANG_GUARANI # define LANG_GUARANI 0x74 # endif # ifndef LANG_GUJARATI # define LANG_GUJARATI 0x47 # endif # ifndef LANG_HAUSA # define LANG_HAUSA 0x68 # endif # ifndef LANG_HAWAIIAN # define LANG_HAWAIIAN 0x75 # endif # ifndef LANG_HEBREW # define LANG_HEBREW 0x0d # endif # ifndef LANG_HINDI # define LANG_HINDI 0x39 # endif # ifndef LANG_IBIBIO # define LANG_IBIBIO 0x69 # endif # ifndef LANG_IGBO # define LANG_IGBO 0x70 # endif # ifndef LANG_INDONESIAN # define LANG_INDONESIAN 0x21 # endif # ifndef LANG_INUKTITUT # define LANG_INUKTITUT 0x5d # endif # ifndef LANG_KANNADA # define LANG_KANNADA 0x4b # endif # ifndef LANG_KANURI # define LANG_KANURI 0x71 # endif # ifndef LANG_KASHMIRI # define LANG_KASHMIRI 0x60 # endif # ifndef LANG_KAZAK # define LANG_KAZAK 0x3f # endif # ifndef LANG_KICHE # define LANG_KICHE 0x86 # endif # ifndef LANG_KINYARWANDA # define LANG_KINYARWANDA 0x87 # endif # ifndef LANG_KONKANI # define LANG_KONKANI 0x57 # endif # ifndef LANG_KYRGYZ # define LANG_KYRGYZ 0x40 # endif # ifndef LANG_LAO # define LANG_LAO 0x54 # endif # ifndef LANG_LATIN # define LANG_LATIN 0x76 # endif # ifndef LANG_LATVIAN # define LANG_LATVIAN 0x26 # endif # ifndef LANG_LITHUANIAN # define LANG_LITHUANIAN 0x27 # endif # ifndef LANG_LUXEMBOURGISH # define LANG_LUXEMBOURGISH 0x6e # endif # ifndef LANG_MACEDONIAN # define LANG_MACEDONIAN 0x2f # endif # ifndef LANG_MALAY # define LANG_MALAY 0x3e # endif # ifndef LANG_MALAYALAM # define LANG_MALAYALAM 0x4c # endif # ifndef LANG_MALTESE # define LANG_MALTESE 0x3a # endif # ifndef LANG_MANIPURI # define LANG_MANIPURI 0x58 # endif # ifndef LANG_MAORI # define LANG_MAORI 0x81 # endif # ifndef LANG_MAPUDUNGUN # define LANG_MAPUDUNGUN 0x7a # endif # ifndef LANG_MARATHI # define LANG_MARATHI 0x4e # endif # ifndef LANG_MOHAWK # define LANG_MOHAWK 0x7c # endif # ifndef LANG_MONGOLIAN # define LANG_MONGOLIAN 0x50 # endif # ifndef LANG_NEPALI # define LANG_NEPALI 0x61 # endif # ifndef LANG_OCCITAN # define LANG_OCCITAN 0x82 # endif # ifndef LANG_ORIYA # define LANG_ORIYA 0x48 # endif # ifndef LANG_OROMO # define LANG_OROMO 0x72 # endif # ifndef LANG_PAPIAMENTU # define LANG_PAPIAMENTU 0x79 # endif # ifndef LANG_PASHTO # define LANG_PASHTO 0x63 # endif # ifndef LANG_PUNJABI # define LANG_PUNJABI 0x46 # endif # ifndef LANG_QUECHUA # define LANG_QUECHUA 0x6b # endif # ifndef LANG_ROMANSH # define LANG_ROMANSH 0x17 # endif # ifndef LANG_SAMI # define LANG_SAMI 0x3b # endif # ifndef LANG_SANSKRIT # define LANG_SANSKRIT 0x4f # endif # ifndef LANG_SCOTTISH_GAELIC # define LANG_SCOTTISH_GAELIC 0x91 # endif # ifndef LANG_SERBIAN # define LANG_SERBIAN 0x1a # endif # ifndef LANG_SINDHI # define LANG_SINDHI 0x59 # endif # ifndef LANG_SINHALESE # define LANG_SINHALESE 0x5b # endif # ifndef LANG_SLOVAK # define LANG_SLOVAK 0x1b # endif # ifndef LANG_SOMALI # define LANG_SOMALI 0x77 # endif # ifndef LANG_SORBIAN # define LANG_SORBIAN 0x2e # endif # ifndef LANG_SOTHO # define LANG_SOTHO 0x6c # endif # ifndef LANG_SUTU # define LANG_SUTU 0x30 # endif # ifndef LANG_SWAHILI # define LANG_SWAHILI 0x41 # endif # ifndef LANG_SYRIAC # define LANG_SYRIAC 0x5a # endif # ifndef LANG_TAGALOG # define LANG_TAGALOG 0x64 # endif # ifndef LANG_TAJIK # define LANG_TAJIK 0x28 # endif # ifndef LANG_TAMAZIGHT # define LANG_TAMAZIGHT 0x5f # endif # ifndef LANG_TAMIL # define LANG_TAMIL 0x49 # endif # ifndef LANG_TATAR # define LANG_TATAR 0x44 # endif # ifndef LANG_TELUGU # define LANG_TELUGU 0x4a # endif # ifndef LANG_THAI # define LANG_THAI 0x1e # endif # ifndef LANG_TIBETAN # define LANG_TIBETAN 0x51 # endif # ifndef LANG_TIGRINYA # define LANG_TIGRINYA 0x73 # endif # ifndef LANG_TSONGA # define LANG_TSONGA 0x31 # endif # ifndef LANG_TSWANA # define LANG_TSWANA 0x32 # endif # ifndef LANG_TURKMEN # define LANG_TURKMEN 0x42 # endif # ifndef LANG_UIGHUR # define LANG_UIGHUR 0x80 # endif # ifndef LANG_UKRAINIAN # define LANG_UKRAINIAN 0x22 # endif # ifndef LANG_URDU # define LANG_URDU 0x20 # endif # ifndef LANG_UZBEK # define LANG_UZBEK 0x43 # endif # ifndef LANG_VENDA # define LANG_VENDA 0x33 # endif # ifndef LANG_VIETNAMESE # define LANG_VIETNAMESE 0x2a # endif # ifndef LANG_WELSH # define LANG_WELSH 0x52 # endif # ifndef LANG_WOLOF # define LANG_WOLOF 0x88 # endif # ifndef LANG_XHOSA # define LANG_XHOSA 0x34 # endif # ifndef LANG_YAKUT # define LANG_YAKUT 0x85 # endif # ifndef LANG_YI # define LANG_YI 0x78 # endif # ifndef LANG_YIDDISH # define LANG_YIDDISH 0x3d # endif # ifndef LANG_YORUBA # define LANG_YORUBA 0x6a # endif # ifndef LANG_ZULU # define LANG_ZULU 0x35 # endif # ifndef SUBLANG_AFRIKAANS_SOUTH_AFRICA # define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_ALBANIAN_ALBANIA # define SUBLANG_ALBANIAN_ALBANIA 0x01 # endif # ifndef SUBLANG_ALSATIAN_FRANCE # define SUBLANG_ALSATIAN_FRANCE 0x01 # endif # ifndef SUBLANG_AMHARIC_ETHIOPIA # define SUBLANG_AMHARIC_ETHIOPIA 0x01 # endif # ifndef SUBLANG_ARABIC_SAUDI_ARABIA # define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 # endif # ifndef SUBLANG_ARABIC_IRAQ # define SUBLANG_ARABIC_IRAQ 0x02 # endif # ifndef SUBLANG_ARABIC_EGYPT # define SUBLANG_ARABIC_EGYPT 0x03 # endif # ifndef SUBLANG_ARABIC_LIBYA # define SUBLANG_ARABIC_LIBYA 0x04 # endif # ifndef SUBLANG_ARABIC_ALGERIA # define SUBLANG_ARABIC_ALGERIA 0x05 # endif # ifndef SUBLANG_ARABIC_MOROCCO # define SUBLANG_ARABIC_MOROCCO 0x06 # endif # ifndef SUBLANG_ARABIC_TUNISIA # define SUBLANG_ARABIC_TUNISIA 0x07 # endif # ifndef SUBLANG_ARABIC_OMAN # define SUBLANG_ARABIC_OMAN 0x08 # endif # ifndef SUBLANG_ARABIC_YEMEN # define SUBLANG_ARABIC_YEMEN 0x09 # endif # ifndef SUBLANG_ARABIC_SYRIA # define SUBLANG_ARABIC_SYRIA 0x0a # endif # ifndef SUBLANG_ARABIC_JORDAN # define SUBLANG_ARABIC_JORDAN 0x0b # endif # ifndef SUBLANG_ARABIC_LEBANON # define SUBLANG_ARABIC_LEBANON 0x0c # endif # ifndef SUBLANG_ARABIC_KUWAIT # define SUBLANG_ARABIC_KUWAIT 0x0d # endif # ifndef SUBLANG_ARABIC_UAE # define SUBLANG_ARABIC_UAE 0x0e # endif # ifndef SUBLANG_ARABIC_BAHRAIN # define SUBLANG_ARABIC_BAHRAIN 0x0f # endif # ifndef SUBLANG_ARABIC_QATAR # define SUBLANG_ARABIC_QATAR 0x10 # endif # ifndef SUBLANG_ARMENIAN_ARMENIA # define SUBLANG_ARMENIAN_ARMENIA 0x01 # endif # ifndef SUBLANG_ASSAMESE_INDIA # define SUBLANG_ASSAMESE_INDIA 0x01 # endif # ifndef SUBLANG_AZERI_LATIN # define SUBLANG_AZERI_LATIN 0x01 # endif # ifndef SUBLANG_AZERI_CYRILLIC # define SUBLANG_AZERI_CYRILLIC 0x02 # endif # ifndef SUBLANG_BASHKIR_RUSSIA # define SUBLANG_BASHKIR_RUSSIA 0x01 # endif # ifndef SUBLANG_BASQUE_BASQUE # define SUBLANG_BASQUE_BASQUE 0x01 # endif # ifndef SUBLANG_BELARUSIAN_BELARUS # define SUBLANG_BELARUSIAN_BELARUS 0x01 # endif # ifndef SUBLANG_BENGALI_INDIA # define SUBLANG_BENGALI_INDIA 0x01 # endif # ifndef SUBLANG_BENGALI_BANGLADESH # define SUBLANG_BENGALI_BANGLADESH 0x02 # endif # ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN # define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05 # endif # ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC # define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08 # endif # ifndef SUBLANG_BRETON_FRANCE # define SUBLANG_BRETON_FRANCE 0x01 # endif # ifndef SUBLANG_BULGARIAN_BULGARIA # define SUBLANG_BULGARIAN_BULGARIA 0x01 # endif # ifndef SUBLANG_CAMBODIAN_CAMBODIA # define SUBLANG_CAMBODIAN_CAMBODIA 0x01 # endif # ifndef SUBLANG_CATALAN_SPAIN # define SUBLANG_CATALAN_SPAIN 0x01 # endif # ifndef SUBLANG_CORSICAN_FRANCE # define SUBLANG_CORSICAN_FRANCE 0x01 # endif # ifndef SUBLANG_CROATIAN_CROATIA # define SUBLANG_CROATIAN_CROATIA 0x01 # endif # ifndef SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN # define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04 # endif # ifndef SUBLANG_CHINESE_MACAU # define SUBLANG_CHINESE_MACAU 0x05 # endif # ifndef SUBLANG_CZECH_CZECH_REPUBLIC # define SUBLANG_CZECH_CZECH_REPUBLIC 0x01 # endif # ifndef SUBLANG_DANISH_DENMARK # define SUBLANG_DANISH_DENMARK 0x01 # endif # ifndef SUBLANG_DARI_AFGHANISTAN # define SUBLANG_DARI_AFGHANISTAN 0x01 # endif # ifndef SUBLANG_DIVEHI_MALDIVES # define SUBLANG_DIVEHI_MALDIVES 0x01 # endif # ifndef SUBLANG_DUTCH_SURINAM # define SUBLANG_DUTCH_SURINAM 0x03 # endif # ifndef SUBLANG_ENGLISH_SOUTH_AFRICA # define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 # endif # ifndef SUBLANG_ENGLISH_JAMAICA # define SUBLANG_ENGLISH_JAMAICA 0x08 # endif # ifndef SUBLANG_ENGLISH_CARIBBEAN # define SUBLANG_ENGLISH_CARIBBEAN 0x09 # endif # ifndef SUBLANG_ENGLISH_BELIZE # define SUBLANG_ENGLISH_BELIZE 0x0a # endif # ifndef SUBLANG_ENGLISH_TRINIDAD # define SUBLANG_ENGLISH_TRINIDAD 0x0b # endif # ifndef SUBLANG_ENGLISH_ZIMBABWE # define SUBLANG_ENGLISH_ZIMBABWE 0x0c # endif # ifndef SUBLANG_ENGLISH_PHILIPPINES # define SUBLANG_ENGLISH_PHILIPPINES 0x0d # endif # ifndef SUBLANG_ENGLISH_INDONESIA # define SUBLANG_ENGLISH_INDONESIA 0x0e # endif # ifndef SUBLANG_ENGLISH_HONGKONG # define SUBLANG_ENGLISH_HONGKONG 0x0f # endif # ifndef SUBLANG_ENGLISH_INDIA # define SUBLANG_ENGLISH_INDIA 0x10 # endif # ifndef SUBLANG_ENGLISH_MALAYSIA # define SUBLANG_ENGLISH_MALAYSIA 0x11 # endif # ifndef SUBLANG_ENGLISH_SINGAPORE # define SUBLANG_ENGLISH_SINGAPORE 0x12 # endif # ifndef SUBLANG_ESTONIAN_ESTONIA # define SUBLANG_ESTONIAN_ESTONIA 0x01 # endif # ifndef SUBLANG_FAEROESE_FAROE_ISLANDS # define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01 # endif # ifndef SUBLANG_FARSI_IRAN # define SUBLANG_FARSI_IRAN 0x01 # endif # ifndef SUBLANG_FINNISH_FINLAND # define SUBLANG_FINNISH_FINLAND 0x01 # endif # ifndef SUBLANG_FRENCH_LUXEMBOURG # define SUBLANG_FRENCH_LUXEMBOURG 0x05 # endif # ifndef SUBLANG_FRENCH_MONACO # define SUBLANG_FRENCH_MONACO 0x06 # endif # ifndef SUBLANG_FRENCH_WESTINDIES # define SUBLANG_FRENCH_WESTINDIES 0x07 # endif # ifndef SUBLANG_FRENCH_REUNION # define SUBLANG_FRENCH_REUNION 0x08 # endif # ifndef SUBLANG_FRENCH_CONGO # define SUBLANG_FRENCH_CONGO 0x09 # endif # ifndef SUBLANG_FRENCH_SENEGAL # define SUBLANG_FRENCH_SENEGAL 0x0a # endif # ifndef SUBLANG_FRENCH_CAMEROON # define SUBLANG_FRENCH_CAMEROON 0x0b # endif # ifndef SUBLANG_FRENCH_COTEDIVOIRE # define SUBLANG_FRENCH_COTEDIVOIRE 0x0c # endif # ifndef SUBLANG_FRENCH_MALI # define SUBLANG_FRENCH_MALI 0x0d # endif # ifndef SUBLANG_FRENCH_MOROCCO # define SUBLANG_FRENCH_MOROCCO 0x0e # endif # ifndef SUBLANG_FRENCH_HAITI # define SUBLANG_FRENCH_HAITI 0x0f # endif # ifndef SUBLANG_FRISIAN_NETHERLANDS # define SUBLANG_FRISIAN_NETHERLANDS 0x01 # endif # ifndef SUBLANG_GALICIAN_SPAIN # define SUBLANG_GALICIAN_SPAIN 0x01 # endif # ifndef SUBLANG_GEORGIAN_GEORGIA # define SUBLANG_GEORGIAN_GEORGIA 0x01 # endif # ifndef SUBLANG_GERMAN_LUXEMBOURG # define SUBLANG_GERMAN_LUXEMBOURG 0x04 # endif # ifndef SUBLANG_GERMAN_LIECHTENSTEIN # define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 # endif # ifndef SUBLANG_GREEK_GREECE # define SUBLANG_GREEK_GREECE 0x01 # endif # ifndef SUBLANG_GREENLANDIC_GREENLAND # define SUBLANG_GREENLANDIC_GREENLAND 0x01 # endif # ifndef SUBLANG_GUJARATI_INDIA # define SUBLANG_GUJARATI_INDIA 0x01 # endif # ifndef SUBLANG_HAUSA_NIGERIA_LATIN # define SUBLANG_HAUSA_NIGERIA_LATIN 0x01 # endif # ifndef SUBLANG_HEBREW_ISRAEL # define SUBLANG_HEBREW_ISRAEL 0x01 # endif # ifndef SUBLANG_HINDI_INDIA # define SUBLANG_HINDI_INDIA 0x01 # endif # ifndef SUBLANG_HUNGARIAN_HUNGARY # define SUBLANG_HUNGARIAN_HUNGARY 0x01 # endif # ifndef SUBLANG_ICELANDIC_ICELAND # define SUBLANG_ICELANDIC_ICELAND 0x01 # endif # ifndef SUBLANG_IGBO_NIGERIA # define SUBLANG_IGBO_NIGERIA 0x01 # endif # ifndef SUBLANG_INDONESIAN_INDONESIA # define SUBLANG_INDONESIAN_INDONESIA 0x01 # endif # ifndef SUBLANG_INUKTITUT_CANADA # define SUBLANG_INUKTITUT_CANADA 0x01 # endif # undef SUBLANG_INUKTITUT_CANADA_LATIN # define SUBLANG_INUKTITUT_CANADA_LATIN 0x02 # undef SUBLANG_IRISH_IRELAND # define SUBLANG_IRISH_IRELAND 0x02 # ifndef SUBLANG_JAPANESE_JAPAN # define SUBLANG_JAPANESE_JAPAN 0x01 # endif # ifndef SUBLANG_KANNADA_INDIA # define SUBLANG_KANNADA_INDIA 0x01 # endif # ifndef SUBLANG_KASHMIRI_INDIA # define SUBLANG_KASHMIRI_INDIA 0x02 # endif # ifndef SUBLANG_KAZAK_KAZAKHSTAN # define SUBLANG_KAZAK_KAZAKHSTAN 0x01 # endif # ifndef SUBLANG_KICHE_GUATEMALA # define SUBLANG_KICHE_GUATEMALA 0x01 # endif # ifndef SUBLANG_KINYARWANDA_RWANDA # define SUBLANG_KINYARWANDA_RWANDA 0x01 # endif # ifndef SUBLANG_KONKANI_INDIA # define SUBLANG_KONKANI_INDIA 0x01 # endif # ifndef SUBLANG_KYRGYZ_KYRGYZSTAN # define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01 # endif # ifndef SUBLANG_LAO_LAOS # define SUBLANG_LAO_LAOS 0x01 # endif # ifndef SUBLANG_LATVIAN_LATVIA # define SUBLANG_LATVIAN_LATVIA 0x01 # endif # ifndef SUBLANG_LITHUANIAN_LITHUANIA # define SUBLANG_LITHUANIAN_LITHUANIA 0x01 # endif # undef SUBLANG_LOWER_SORBIAN_GERMANY # define SUBLANG_LOWER_SORBIAN_GERMANY 0x02 # ifndef SUBLANG_LUXEMBOURGISH_LUXEMBOURG # define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01 # endif # ifndef SUBLANG_MACEDONIAN_MACEDONIA # define SUBLANG_MACEDONIAN_MACEDONIA 0x01 # endif # ifndef SUBLANG_MALAY_MALAYSIA # define SUBLANG_MALAY_MALAYSIA 0x01 # endif # ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM # define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 # endif # ifndef SUBLANG_MALAYALAM_INDIA # define SUBLANG_MALAYALAM_INDIA 0x01 # endif # ifndef SUBLANG_MALTESE_MALTA # define SUBLANG_MALTESE_MALTA 0x01 # endif # ifndef SUBLANG_MAORI_NEW_ZEALAND # define SUBLANG_MAORI_NEW_ZEALAND 0x01 # endif # ifndef SUBLANG_MAPUDUNGUN_CHILE # define SUBLANG_MAPUDUNGUN_CHILE 0x01 # endif # ifndef SUBLANG_MARATHI_INDIA # define SUBLANG_MARATHI_INDIA 0x01 # endif # ifndef SUBLANG_MOHAWK_CANADA # define SUBLANG_MOHAWK_CANADA 0x01 # endif # ifndef SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA # define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01 # endif # ifndef SUBLANG_MONGOLIAN_PRC # define SUBLANG_MONGOLIAN_PRC 0x02 # endif # ifndef SUBLANG_NEPALI_NEPAL # define SUBLANG_NEPALI_NEPAL 0x01 # endif # ifndef SUBLANG_NEPALI_INDIA # define SUBLANG_NEPALI_INDIA 0x02 # endif # ifndef SUBLANG_OCCITAN_FRANCE # define SUBLANG_OCCITAN_FRANCE 0x01 # endif # ifndef SUBLANG_ORIYA_INDIA # define SUBLANG_ORIYA_INDIA 0x01 # endif # ifndef SUBLANG_PASHTO_AFGHANISTAN # define SUBLANG_PASHTO_AFGHANISTAN 0x01 # endif # ifndef SUBLANG_POLISH_POLAND # define SUBLANG_POLISH_POLAND 0x01 # endif # ifndef SUBLANG_PUNJABI_INDIA # define SUBLANG_PUNJABI_INDIA 0x01 # endif # ifndef SUBLANG_PUNJABI_PAKISTAN # define SUBLANG_PUNJABI_PAKISTAN 0x02 # endif # ifndef SUBLANG_QUECHUA_BOLIVIA # define SUBLANG_QUECHUA_BOLIVIA 0x01 # endif # ifndef SUBLANG_QUECHUA_ECUADOR # define SUBLANG_QUECHUA_ECUADOR 0x02 # endif # ifndef SUBLANG_QUECHUA_PERU # define SUBLANG_QUECHUA_PERU 0x03 # endif # ifndef SUBLANG_ROMANIAN_ROMANIA # define SUBLANG_ROMANIAN_ROMANIA 0x01 # endif # ifndef SUBLANG_ROMANIAN_MOLDOVA # define SUBLANG_ROMANIAN_MOLDOVA 0x02 # endif # ifndef SUBLANG_ROMANSH_SWITZERLAND # define SUBLANG_ROMANSH_SWITZERLAND 0x01 # endif # ifndef SUBLANG_RUSSIAN_RUSSIA # define SUBLANG_RUSSIAN_RUSSIA 0x01 # endif # ifndef SUBLANG_RUSSIAN_MOLDAVIA # define SUBLANG_RUSSIAN_MOLDAVIA 0x02 # endif # ifndef SUBLANG_SAMI_NORTHERN_NORWAY # define SUBLANG_SAMI_NORTHERN_NORWAY 0x01 # endif # ifndef SUBLANG_SAMI_NORTHERN_SWEDEN # define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02 # endif # ifndef SUBLANG_SAMI_NORTHERN_FINLAND # define SUBLANG_SAMI_NORTHERN_FINLAND 0x03 # endif # ifndef SUBLANG_SAMI_LULE_NORWAY # define SUBLANG_SAMI_LULE_NORWAY 0x04 # endif # ifndef SUBLANG_SAMI_LULE_SWEDEN # define SUBLANG_SAMI_LULE_SWEDEN 0x05 # endif # ifndef SUBLANG_SAMI_SOUTHERN_NORWAY # define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06 # endif # ifndef SUBLANG_SAMI_SOUTHERN_SWEDEN # define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07 # endif # undef SUBLANG_SAMI_SKOLT_FINLAND # define SUBLANG_SAMI_SKOLT_FINLAND 0x08 # undef SUBLANG_SAMI_INARI_FINLAND # define SUBLANG_SAMI_INARI_FINLAND 0x09 # ifndef SUBLANG_SANSKRIT_INDIA # define SUBLANG_SANSKRIT_INDIA 0x01 # endif # ifndef SUBLANG_SERBIAN_LATIN # define SUBLANG_SERBIAN_LATIN 0x02 # endif # ifndef SUBLANG_SERBIAN_CYRILLIC # define SUBLANG_SERBIAN_CYRILLIC 0x03 # endif # ifndef SUBLANG_SINDHI_INDIA # define SUBLANG_SINDHI_INDIA 0x01 # endif # undef SUBLANG_SINDHI_PAKISTAN # define SUBLANG_SINDHI_PAKISTAN 0x02 # ifndef SUBLANG_SINDHI_AFGHANISTAN # define SUBLANG_SINDHI_AFGHANISTAN 0x02 # endif # ifndef SUBLANG_SINHALESE_SRI_LANKA # define SUBLANG_SINHALESE_SRI_LANKA 0x01 # endif # ifndef SUBLANG_SLOVAK_SLOVAKIA # define SUBLANG_SLOVAK_SLOVAKIA 0x01 # endif # ifndef SUBLANG_SLOVENIAN_SLOVENIA # define SUBLANG_SLOVENIAN_SLOVENIA 0x01 # endif # ifndef SUBLANG_SOTHO_SOUTH_AFRICA # define SUBLANG_SOTHO_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_SPANISH_GUATEMALA # define SUBLANG_SPANISH_GUATEMALA 0x04 # endif # ifndef SUBLANG_SPANISH_COSTA_RICA # define SUBLANG_SPANISH_COSTA_RICA 0x05 # endif # ifndef SUBLANG_SPANISH_PANAMA # define SUBLANG_SPANISH_PANAMA 0x06 # endif # ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC # define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 # endif # ifndef SUBLANG_SPANISH_VENEZUELA # define SUBLANG_SPANISH_VENEZUELA 0x08 # endif # ifndef SUBLANG_SPANISH_COLOMBIA # define SUBLANG_SPANISH_COLOMBIA 0x09 # endif # ifndef SUBLANG_SPANISH_PERU # define SUBLANG_SPANISH_PERU 0x0a # endif # ifndef SUBLANG_SPANISH_ARGENTINA # define SUBLANG_SPANISH_ARGENTINA 0x0b # endif # ifndef SUBLANG_SPANISH_ECUADOR # define SUBLANG_SPANISH_ECUADOR 0x0c # endif # ifndef SUBLANG_SPANISH_CHILE # define SUBLANG_SPANISH_CHILE 0x0d # endif # ifndef SUBLANG_SPANISH_URUGUAY # define SUBLANG_SPANISH_URUGUAY 0x0e # endif # ifndef SUBLANG_SPANISH_PARAGUAY # define SUBLANG_SPANISH_PARAGUAY 0x0f # endif # ifndef SUBLANG_SPANISH_BOLIVIA # define SUBLANG_SPANISH_BOLIVIA 0x10 # endif # ifndef SUBLANG_SPANISH_EL_SALVADOR # define SUBLANG_SPANISH_EL_SALVADOR 0x11 # endif # ifndef SUBLANG_SPANISH_HONDURAS # define SUBLANG_SPANISH_HONDURAS 0x12 # endif # ifndef SUBLANG_SPANISH_NICARAGUA # define SUBLANG_SPANISH_NICARAGUA 0x13 # endif # ifndef SUBLANG_SPANISH_PUERTO_RICO # define SUBLANG_SPANISH_PUERTO_RICO 0x14 # endif # ifndef SUBLANG_SPANISH_US # define SUBLANG_SPANISH_US 0x15 # endif # ifndef SUBLANG_SWAHILI_KENYA # define SUBLANG_SWAHILI_KENYA 0x01 # endif # ifndef SUBLANG_SWEDISH_SWEDEN # define SUBLANG_SWEDISH_SWEDEN 0x01 # endif # ifndef SUBLANG_SWEDISH_FINLAND # define SUBLANG_SWEDISH_FINLAND 0x02 # endif # ifndef SUBLANG_SYRIAC_SYRIA # define SUBLANG_SYRIAC_SYRIA 0x01 # endif # ifndef SUBLANG_TAGALOG_PHILIPPINES # define SUBLANG_TAGALOG_PHILIPPINES 0x01 # endif # ifndef SUBLANG_TAJIK_TAJIKISTAN # define SUBLANG_TAJIK_TAJIKISTAN 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ARABIC # define SUBLANG_TAMAZIGHT_ARABIC 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN # define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 # endif # ifndef SUBLANG_TAMIL_INDIA # define SUBLANG_TAMIL_INDIA 0x01 # endif # ifndef SUBLANG_TATAR_RUSSIA # define SUBLANG_TATAR_RUSSIA 0x01 # endif # ifndef SUBLANG_TELUGU_INDIA # define SUBLANG_TELUGU_INDIA 0x01 # endif # ifndef SUBLANG_THAI_THAILAND # define SUBLANG_THAI_THAILAND 0x01 # endif # ifndef SUBLANG_TIBETAN_PRC # define SUBLANG_TIBETAN_PRC 0x01 # endif # undef SUBLANG_TIBETAN_BHUTAN # define SUBLANG_TIBETAN_BHUTAN 0x02 # ifndef SUBLANG_TIGRINYA_ETHIOPIA # define SUBLANG_TIGRINYA_ETHIOPIA 0x01 # endif # ifndef SUBLANG_TIGRINYA_ERITREA # define SUBLANG_TIGRINYA_ERITREA 0x02 # endif # ifndef SUBLANG_TSWANA_SOUTH_AFRICA # define SUBLANG_TSWANA_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_TURKISH_TURKEY # define SUBLANG_TURKISH_TURKEY 0x01 # endif # ifndef SUBLANG_TURKMEN_TURKMENISTAN # define SUBLANG_TURKMEN_TURKMENISTAN 0x01 # endif # ifndef SUBLANG_UIGHUR_PRC # define SUBLANG_UIGHUR_PRC 0x01 # endif # ifndef SUBLANG_UKRAINIAN_UKRAINE # define SUBLANG_UKRAINIAN_UKRAINE 0x01 # endif # ifndef SUBLANG_UPPER_SORBIAN_GERMANY # define SUBLANG_UPPER_SORBIAN_GERMANY 0x01 # endif # ifndef SUBLANG_URDU_PAKISTAN # define SUBLANG_URDU_PAKISTAN 0x01 # endif # ifndef SUBLANG_URDU_INDIA # define SUBLANG_URDU_INDIA 0x02 # endif # ifndef SUBLANG_UZBEK_LATIN # define SUBLANG_UZBEK_LATIN 0x01 # endif # ifndef SUBLANG_UZBEK_CYRILLIC # define SUBLANG_UZBEK_CYRILLIC 0x02 # endif # ifndef SUBLANG_VIETNAMESE_VIETNAM # define SUBLANG_VIETNAMESE_VIETNAM 0x01 # endif # ifndef SUBLANG_WELSH_UNITED_KINGDOM # define SUBLANG_WELSH_UNITED_KINGDOM 0x01 # endif # ifndef SUBLANG_WOLOF_SENEGAL # define SUBLANG_WOLOF_SENEGAL 0x01 # endif # ifndef SUBLANG_XHOSA_SOUTH_AFRICA # define SUBLANG_XHOSA_SOUTH_AFRICA 0x01 # endif # ifndef SUBLANG_YAKUT_RUSSIA # define SUBLANG_YAKUT_RUSSIA 0x01 # endif # ifndef SUBLANG_YI_PRC # define SUBLANG_YI_PRC 0x01 # endif # ifndef SUBLANG_YORUBA_NIGERIA # define SUBLANG_YORUBA_NIGERIA 0x01 # endif # ifndef SUBLANG_ZULU_SOUTH_AFRICA # define SUBLANG_ZULU_SOUTH_AFRICA 0x01 # endif /* GetLocaleInfoA operations. */ # ifndef LOCALE_SNAME # define LOCALE_SNAME 0x5c # endif # ifndef LOCALE_NAME_MAX_LENGTH # define LOCALE_NAME_MAX_LENGTH 85 # endif #endif #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer */ /* Canonicalize a Mac OS X locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Mac OS X locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* This conversion is based on a posting by Deborah GoldSmith on 2005-03-08, http://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */ /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and ISO 3166) names. Prior to Mac OS X 10.3, there is no API for doing this. Therefore we do it ourselves, using a table based on the results of the Mac OS X 10.3.8 function CFLocaleCreateCanonicalLocaleIdentifierFromString(). */ typedef struct { const char legacy[21+1]; const char unixy[5+1]; } legacy_entry; static const legacy_entry legacy_table[] = { { "Afrikaans", "af" }, { "Albanian", "sq" }, { "Amharic", "am" }, { "Arabic", "ar" }, { "Armenian", "hy" }, { "Assamese", "as" }, { "Aymara", "ay" }, { "Azerbaijani", "az" }, { "Basque", "eu" }, { "Belarusian", "be" }, { "Belorussian", "be" }, { "Bengali", "bn" }, { "Brazilian Portugese", "pt_BR" }, { "Brazilian Portuguese", "pt_BR" }, { "Breton", "br" }, { "Bulgarian", "bg" }, { "Burmese", "my" }, { "Byelorussian", "be" }, { "Catalan", "ca" }, { "Chewa", "ny" }, { "Chichewa", "ny" }, { "Chinese", "zh" }, { "Chinese, Simplified", "zh_CN" }, { "Chinese, Traditional", "zh_TW" }, { "Chinese, Tradtional", "zh_TW" }, { "Croatian", "hr" }, { "Czech", "cs" }, { "Danish", "da" }, { "Dutch", "nl" }, { "Dzongkha", "dz" }, { "English", "en" }, { "Esperanto", "eo" }, { "Estonian", "et" }, { "Faroese", "fo" }, { "Farsi", "fa" }, { "Finnish", "fi" }, { "Flemish", "nl_BE" }, { "French", "fr" }, { "Galician", "gl" }, { "Gallegan", "gl" }, { "Georgian", "ka" }, { "German", "de" }, { "Greek", "el" }, { "Greenlandic", "kl" }, { "Guarani", "gn" }, { "Gujarati", "gu" }, { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */ { "Hebrew", "he" }, { "Hindi", "hi" }, { "Hungarian", "hu" }, { "Icelandic", "is" }, { "Indonesian", "id" }, { "Inuktitut", "iu" }, { "Irish", "ga" }, { "Italian", "it" }, { "Japanese", "ja" }, { "Javanese", "jv" }, { "Kalaallisut", "kl" }, { "Kannada", "kn" }, { "Kashmiri", "ks" }, { "Kazakh", "kk" }, { "Khmer", "km" }, { "Kinyarwanda", "rw" }, { "Kirghiz", "ky" }, { "Korean", "ko" }, { "Kurdish", "ku" }, { "Latin", "la" }, { "Latvian", "lv" }, { "Lithuanian", "lt" }, { "Macedonian", "mk" }, { "Malagasy", "mg" }, { "Malay", "ms" }, { "Malayalam", "ml" }, { "Maltese", "mt" }, { "Manx", "gv" }, { "Marathi", "mr" }, { "Moldavian", "mo" }, { "Mongolian", "mn" }, { "Nepali", "ne" }, { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */ { "Nyanja", "ny" }, { "Nynorsk", "nn" }, { "Oriya", "or" }, { "Oromo", "om" }, { "Panjabi", "pa" }, { "Pashto", "ps" }, { "Persian", "fa" }, { "Polish", "pl" }, { "Portuguese", "pt" }, { "Portuguese, Brazilian", "pt_BR" }, { "Punjabi", "pa" }, { "Pushto", "ps" }, { "Quechua", "qu" }, { "Romanian", "ro" }, { "Ruanda", "rw" }, { "Rundi", "rn" }, { "Russian", "ru" }, { "Sami", "se_NO" }, /* Not just "se". */ { "Sanskrit", "sa" }, { "Scottish", "gd" }, { "Serbian", "sr" }, { "Simplified Chinese", "zh_CN" }, { "Sindhi", "sd" }, { "Sinhalese", "si" }, { "Slovak", "sk" }, { "Slovenian", "sl" }, { "Somali", "so" }, { "Spanish", "es" }, { "Sundanese", "su" }, { "Swahili", "sw" }, { "Swedish", "sv" }, { "Tagalog", "tl" }, { "Tajik", "tg" }, { "Tajiki", "tg" }, { "Tamil", "ta" }, { "Tatar", "tt" }, { "Telugu", "te" }, { "Thai", "th" }, { "Tibetan", "bo" }, { "Tigrinya", "ti" }, { "Tongan", "to" }, { "Traditional Chinese", "zh_TW" }, { "Turkish", "tr" }, { "Turkmen", "tk" }, { "Uighur", "ug" }, { "Ukrainian", "uk" }, { "Urdu", "ur" }, { "Uzbek", "uz" }, { "Vietnamese", "vi" }, { "Welsh", "cy" }, { "Yiddish", "yi" } }; /* Convert new-style locale names with language tags (ISO 639 and ISO 15924) to Unix (ISO 639 and ISO 3166) names. */ typedef struct { const char langtag[7+1]; const char unixy[12+1]; } langtag_entry; static const langtag_entry langtag_table[] = { /* Mac OS X has "az-Arab", "az-Cyrl", "az-Latn". The default script for az on Unix is Latin. */ { "az-Latn", "az" }, /* Mac OS X has "ga-dots". Does not yet exist on Unix. */ { "ga-dots", "ga" }, /* Mac OS X has "kk-Cyrl". Does not yet exist on Unix. */ /* Mac OS X has "mn-Cyrl", "mn-Mong". The default script for mn on Unix is Cyrillic. */ { "mn-Cyrl", "mn" }, /* Mac OS X has "ms-Arab", "ms-Latn". The default script for ms on Unix is Latin. */ { "ms-Latn", "ms" }, /* Mac OS X has "tg-Cyrl". The default script for tg on Unix is Cyrillic. */ { "tg-Cyrl", "tg" }, /* Mac OS X has "tk-Cyrl". Does not yet exist on Unix. */ /* Mac OS X has "tt-Cyrl". The default script for tt on Unix is Cyrillic. */ { "tt-Cyrl", "tt" }, /* Mac OS X has "zh-Hans", "zh-Hant". Country codes are used to distinguish these on Unix. */ { "zh-Hans", "zh_CN" }, { "zh-Hant", "zh_TW" } }; /* Convert script names (ISO 15924) to Unix conventions. See http://www.unicode.org/iso15924/iso15924-codes.html */ typedef struct { const char script[4+1]; const char unixy[9+1]; } script_entry; static const script_entry script_table[] = { { "Arab", "arabic" }, { "Cyrl", "cyrillic" }, { "Mong", "mongolian" } }; /* Step 1: Convert using legacy_table. */ if (name[0] >= 'A' && name[0] <= 'Z') { unsigned int i1, i2; i1 = 0; i2 = sizeof (legacy_table) / sizeof (legacy_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in legacy_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const legacy_entry *p = &legacy_table[i]; if (strcmp (name, p->legacy) < 0) i2 = i; else i1 = i; } if (strcmp (name, legacy_table[i1].legacy) == 0) { strcpy (name, legacy_table[i1].unixy); return; } } /* Step 2: Convert using langtag_table and script_table. */ if (strlen (name) == 7 && name[2] == '-') { unsigned int i1, i2; i1 = 0; i2 = sizeof (langtag_table) / sizeof (langtag_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in langtag_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const langtag_entry *p = &langtag_table[i]; if (strcmp (name, p->langtag) < 0) i2 = i; else i1 = i; } if (strcmp (name, langtag_table[i1].langtag) == 0) { strcpy (name, langtag_table[i1].unixy); return; } i1 = 0; i2 = sizeof (script_table) / sizeof (script_entry); while (i2 - i1 > 1) { /* At this point we know that if (name + 3) occurs in script_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const script_entry *p = &script_table[i]; if (strcmp (name + 3, p->script) < 0) i2 = i; else i1 = i; } if (strcmp (name + 3, script_table[i1].script) == 0) { name[2] = '@'; strcpy (name + 3, script_table[i1].unixy); return; } } /* Step 3: Convert new-style dash to Unix underscore. */ { char *p; for (p = name; *p != '\0'; p++) if (*p == '-') *p = '_'; } } #endif #if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ /* Canonicalize a Windows native locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the Windows locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* FIXME: This is probably incomplete: it does not handle "zh-Hans" and "zh-Hant". */ char *p; for (p = name; *p != '\0'; p++) if (*p == '-') { *p = '_'; p++; for (; *p != '\0'; p++) { if (*p >= 'a' && *p <= 'z') *p += 'A' - 'a'; if (*p == '-') { *p = '\0'; return; } } return; } } # if !defined IN_LIBINTL static # endif const char * gl_locale_name_from_win32_LANGID (LANGID langid) { /* Activate the new code only when the GETTEXT_MUI environment variable is set, for the time being, since the new code is not well tested. */ if (getenv ("GETTEXT_MUI") != NULL) { static char namebuf[256]; /* Query the system's notion of locale name. On Windows95/98/ME, GetLocaleInfoA returns some incorrect results. But we don't need to support systems that are so old. */ if (GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT), LOCALE_SNAME, namebuf, sizeof (namebuf) - 1)) { /* Convert it to a Unix locale name. */ gl_locale_name_canonicalize (namebuf); return namebuf; } } /* Internet Explorer has an LCID to RFC3066 name mapping stored in HKEY_CLASSES_ROOT\Mime\Database\Rfc1766. But we better don't use that since IE's i18n subsystem is known to be inconsistent with the native Windows base (e.g. they have different character conversion facilities that produce different results). */ /* Use our own table. */ { int primary, sub; /* Split into language and territory part. */ primary = PRIMARYLANGID (langid); sub = SUBLANGID (langid); /* Dispatch on language. See also http://www.unicode.org/unicode/onlinedat/languages.html . For details about languages, see http://www.ethnologue.com/ . */ switch (primary) { case LANG_AFRIKAANS: switch (sub) { case SUBLANG_AFRIKAANS_SOUTH_AFRICA: return "af_ZA"; } return "af"; case LANG_ALBANIAN: switch (sub) { case SUBLANG_ALBANIAN_ALBANIA: return "sq_AL"; } return "sq"; case LANG_ALSATIAN: switch (sub) { case SUBLANG_ALSATIAN_FRANCE: return "gsw_FR"; } return "gsw"; case LANG_AMHARIC: switch (sub) { case SUBLANG_AMHARIC_ETHIOPIA: return "am_ET"; } return "am"; case LANG_ARABIC: switch (sub) { case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; case SUBLANG_ARABIC_EGYPT: return "ar_EG"; case SUBLANG_ARABIC_LIBYA: return "ar_LY"; case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; case SUBLANG_ARABIC_OMAN: return "ar_OM"; case SUBLANG_ARABIC_YEMEN: return "ar_YE"; case SUBLANG_ARABIC_SYRIA: return "ar_SY"; case SUBLANG_ARABIC_JORDAN: return "ar_JO"; case SUBLANG_ARABIC_LEBANON: return "ar_LB"; case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; case SUBLANG_ARABIC_UAE: return "ar_AE"; case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; case SUBLANG_ARABIC_QATAR: return "ar_QA"; } return "ar"; case LANG_ARMENIAN: switch (sub) { case SUBLANG_ARMENIAN_ARMENIA: return "hy_AM"; } return "hy"; case LANG_ASSAMESE: switch (sub) { case SUBLANG_ASSAMESE_INDIA: return "as_IN"; } return "as"; case LANG_AZERI: switch (sub) { /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ case 0x1e: return "az@latin"; case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; case 0x1d: return "az@cyrillic"; case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; } return "az"; case LANG_BASHKIR: switch (sub) { case SUBLANG_BASHKIR_RUSSIA: return "ba_RU"; } return "ba"; case LANG_BASQUE: switch (sub) { case SUBLANG_BASQUE_BASQUE: return "eu_ES"; } return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ case LANG_BELARUSIAN: switch (sub) { case SUBLANG_BELARUSIAN_BELARUS: return "be_BY"; } return "be"; case LANG_BENGALI: switch (sub) { case SUBLANG_BENGALI_INDIA: return "bn_IN"; case SUBLANG_BENGALI_BANGLADESH: return "bn_BD"; } return "bn"; case LANG_BRETON: switch (sub) { case SUBLANG_BRETON_FRANCE: return "br_FR"; } return "br"; case LANG_BULGARIAN: switch (sub) { case SUBLANG_BULGARIAN_BULGARIA: return "bg_BG"; } return "bg"; case LANG_BURMESE: switch (sub) { case SUBLANG_DEFAULT: return "my_MM"; } return "my"; case LANG_CAMBODIAN: switch (sub) { case SUBLANG_CAMBODIAN_CAMBODIA: return "km_KH"; } return "km"; case LANG_CATALAN: switch (sub) { case SUBLANG_CATALAN_SPAIN: return "ca_ES"; } return "ca"; case LANG_CHEROKEE: switch (sub) { case SUBLANG_DEFAULT: return "chr_US"; } return "chr"; case LANG_CHINESE: switch (sub) { case SUBLANG_CHINESE_TRADITIONAL: case 0x1f: return "zh_TW"; case SUBLANG_CHINESE_SIMPLIFIED: case 0x00: return "zh_CN"; case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; /* traditional */ case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; /* simplified */ case SUBLANG_CHINESE_MACAU: return "zh_MO"; /* traditional */ } return "zh"; case LANG_CORSICAN: switch (sub) { case SUBLANG_CORSICAN_FRANCE: return "co_FR"; } return "co"; case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN * What used to be called Serbo-Croatian * should really now be two separate * languages because of political reasons. * (Says tml, who knows nothing about Serbian * or Croatian.) * (I can feel those flames coming already.) */ switch (sub) { /* Croatian */ case 0x00: return "hr"; case SUBLANG_CROATIAN_CROATIA: return "hr_HR"; case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: return "hr_BA"; /* Serbian */ case 0x1f: return "sr"; case 0x1c: return "sr"; /* latin */ case SUBLANG_SERBIAN_LATIN: return "sr_CS"; /* latin */ case 0x09: return "sr_RS"; /* latin */ case 0x0b: return "sr_ME"; /* latin */ case 0x06: return "sr_BA"; /* latin */ case 0x1b: return "sr@cyrillic"; case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic"; case 0x0a: return "sr_RS@cyrillic"; case 0x0c: return "sr_ME@cyrillic"; case 0x07: return "sr_BA@cyrillic"; /* Bosnian */ case 0x1e: return "bs"; case 0x1a: return "bs"; /* latin */ case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: return "bs_BA"; /* latin */ case 0x19: return "bs@cyrillic"; case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: return "bs_BA@cyrillic"; } return "hr"; case LANG_CZECH: switch (sub) { case SUBLANG_CZECH_CZECH_REPUBLIC: return "cs_CZ"; } return "cs"; case LANG_DANISH: switch (sub) { case SUBLANG_DANISH_DENMARK: return "da_DK"; } return "da"; case LANG_DARI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_DARI_AFGHANISTAN: return "prs_AF"; } return "prs"; case LANG_DIVEHI: switch (sub) { case SUBLANG_DIVEHI_MALDIVES: return "dv_MV"; } return "dv"; case LANG_DUTCH: switch (sub) { case SUBLANG_DUTCH: return "nl_NL"; case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; case SUBLANG_DUTCH_SURINAM: return "nl_SR"; } return "nl"; case LANG_EDO: switch (sub) { case SUBLANG_DEFAULT: return "bin_NG"; } return "bin"; case LANG_ENGLISH: switch (sub) { /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought * English was the language spoken in England. * Oh well. */ case SUBLANG_ENGLISH_US: return "en_US"; case SUBLANG_ENGLISH_UK: return "en_GB"; case SUBLANG_ENGLISH_AUS: return "en_AU"; case SUBLANG_ENGLISH_CAN: return "en_CA"; case SUBLANG_ENGLISH_NZ: return "en_NZ"; case SUBLANG_ENGLISH_EIRE: return "en_IE"; case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; case SUBLANG_ENGLISH_INDONESIA: return "en_ID"; case SUBLANG_ENGLISH_HONGKONG: return "en_HK"; case SUBLANG_ENGLISH_INDIA: return "en_IN"; case SUBLANG_ENGLISH_MALAYSIA: return "en_MY"; case SUBLANG_ENGLISH_SINGAPORE: return "en_SG"; } return "en"; case LANG_ESTONIAN: switch (sub) { case SUBLANG_ESTONIAN_ESTONIA: return "et_EE"; } return "et"; case LANG_FAEROESE: switch (sub) { case SUBLANG_FAEROESE_FAROE_ISLANDS: return "fo_FO"; } return "fo"; case LANG_FARSI: switch (sub) { case SUBLANG_FARSI_IRAN: return "fa_IR"; } return "fa"; case LANG_FINNISH: switch (sub) { case SUBLANG_FINNISH_FINLAND: return "fi_FI"; } return "fi"; case LANG_FRENCH: switch (sub) { case SUBLANG_FRENCH: return "fr_FR"; case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; case SUBLANG_FRENCH_SWISS: return "fr_CH"; case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; case SUBLANG_FRENCH_MONACO: return "fr_MC"; case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */ case SUBLANG_FRENCH_REUNION: return "fr_RE"; case SUBLANG_FRENCH_CONGO: return "fr_CG"; case SUBLANG_FRENCH_SENEGAL: return "fr_SN"; case SUBLANG_FRENCH_CAMEROON: return "fr_CM"; case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI"; case SUBLANG_FRENCH_MALI: return "fr_ML"; case SUBLANG_FRENCH_MOROCCO: return "fr_MA"; case SUBLANG_FRENCH_HAITI: return "fr_HT"; } return "fr"; case LANG_FRISIAN: switch (sub) { case SUBLANG_FRISIAN_NETHERLANDS: return "fy_NL"; } return "fy"; case LANG_FULFULDE: /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */ switch (sub) { case SUBLANG_DEFAULT: return "ff_NG"; } return "ff"; case LANG_GAELIC: switch (sub) { case 0x01: /* SCOTTISH */ /* old, superseded by LANG_SCOTTISH_GAELIC */ return "gd_GB"; case SUBLANG_IRISH_IRELAND: return "ga_IE"; } return "ga"; case LANG_GALICIAN: switch (sub) { case SUBLANG_GALICIAN_SPAIN: return "gl_ES"; } return "gl"; case LANG_GEORGIAN: switch (sub) { case SUBLANG_GEORGIAN_GEORGIA: return "ka_GE"; } return "ka"; case LANG_GERMAN: switch (sub) { case SUBLANG_GERMAN: return "de_DE"; case SUBLANG_GERMAN_SWISS: return "de_CH"; case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; } return "de"; case LANG_GREEK: switch (sub) { case SUBLANG_GREEK_GREECE: return "el_GR"; } return "el"; case LANG_GREENLANDIC: switch (sub) { case SUBLANG_GREENLANDIC_GREENLAND: return "kl_GL"; } return "kl"; case LANG_GUARANI: switch (sub) { case SUBLANG_DEFAULT: return "gn_PY"; } return "gn"; case LANG_GUJARATI: switch (sub) { case SUBLANG_GUJARATI_INDIA: return "gu_IN"; } return "gu"; case LANG_HAUSA: switch (sub) { case 0x1f: return "ha"; case SUBLANG_HAUSA_NIGERIA_LATIN: return "ha_NG"; } return "ha"; case LANG_HAWAIIAN: /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) or Hawaii Creole English ("cpe_US", 600000 speakers)? */ switch (sub) { case SUBLANG_DEFAULT: return "cpe_US"; } return "cpe"; case LANG_HEBREW: switch (sub) { case SUBLANG_HEBREW_ISRAEL: return "he_IL"; } return "he"; case LANG_HINDI: switch (sub) { case SUBLANG_HINDI_INDIA: return "hi_IN"; } return "hi"; case LANG_HUNGARIAN: switch (sub) { case SUBLANG_HUNGARIAN_HUNGARY: return "hu_HU"; } return "hu"; case LANG_IBIBIO: switch (sub) { case SUBLANG_DEFAULT: return "nic_NG"; } return "nic"; case LANG_ICELANDIC: switch (sub) { case SUBLANG_ICELANDIC_ICELAND: return "is_IS"; } return "is"; case LANG_IGBO: switch (sub) { case SUBLANG_IGBO_NIGERIA: return "ig_NG"; } return "ig"; case LANG_INDONESIAN: switch (sub) { case SUBLANG_INDONESIAN_INDONESIA: return "id_ID"; } return "id"; case LANG_INUKTITUT: switch (sub) { case 0x1e: return "iu"; /* syllabic */ case SUBLANG_INUKTITUT_CANADA: return "iu_CA"; /* syllabic */ case 0x1f: return "iu@latin"; case SUBLANG_INUKTITUT_CANADA_LATIN: return "iu_CA@latin"; } return "iu"; case LANG_ITALIAN: switch (sub) { case SUBLANG_ITALIAN: return "it_IT"; case SUBLANG_ITALIAN_SWISS: return "it_CH"; } return "it"; case LANG_JAPANESE: switch (sub) { case SUBLANG_JAPANESE_JAPAN: return "ja_JP"; } return "ja"; case LANG_KANNADA: switch (sub) { case SUBLANG_KANNADA_INDIA: return "kn_IN"; } return "kn"; case LANG_KANURI: switch (sub) { case SUBLANG_DEFAULT: return "kr_NG"; } return "kr"; case LANG_KASHMIRI: switch (sub) { case SUBLANG_DEFAULT: return "ks_PK"; case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; } return "ks"; case LANG_KAZAK: switch (sub) { case SUBLANG_KAZAK_KAZAKHSTAN: return "kk_KZ"; } return "kk"; case LANG_KICHE: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_KICHE_GUATEMALA: return "qut_GT"; } return "qut"; case LANG_KINYARWANDA: switch (sub) { case SUBLANG_KINYARWANDA_RWANDA: return "rw_RW"; } return "rw"; case LANG_KONKANI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_KONKANI_INDIA: return "kok_IN"; } return "kok"; case LANG_KOREAN: switch (sub) { case SUBLANG_DEFAULT: return "ko_KR"; } return "ko"; case LANG_KYRGYZ: switch (sub) { case SUBLANG_KYRGYZ_KYRGYZSTAN: return "ky_KG"; } return "ky"; case LANG_LAO: switch (sub) { case SUBLANG_LAO_LAOS: return "lo_LA"; } return "lo"; case LANG_LATIN: switch (sub) { case SUBLANG_DEFAULT: return "la_VA"; } return "la"; case LANG_LATVIAN: switch (sub) { case SUBLANG_LATVIAN_LATVIA: return "lv_LV"; } return "lv"; case LANG_LITHUANIAN: switch (sub) { case SUBLANG_LITHUANIAN_LITHUANIA: return "lt_LT"; } return "lt"; case LANG_LUXEMBOURGISH: switch (sub) { case SUBLANG_LUXEMBOURGISH_LUXEMBOURG: return "lb_LU"; } return "lb"; case LANG_MACEDONIAN: switch (sub) { case SUBLANG_MACEDONIAN_MACEDONIA: return "mk_MK"; } return "mk"; case LANG_MALAY: switch (sub) { case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; } return "ms"; case LANG_MALAYALAM: switch (sub) { case SUBLANG_MALAYALAM_INDIA: return "ml_IN"; } return "ml"; case LANG_MALTESE: switch (sub) { case SUBLANG_MALTESE_MALTA: return "mt_MT"; } return "mt"; case LANG_MANIPURI: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { case SUBLANG_DEFAULT: return "mni_IN"; } return "mni"; case LANG_MAORI: switch (sub) { case SUBLANG_MAORI_NEW_ZEALAND: return "mi_NZ"; } return "mi"; case LANG_MAPUDUNGUN: switch (sub) { case SUBLANG_MAPUDUNGUN_CHILE: return "arn_CL"; } return "arn"; case LANG_MARATHI: switch (sub) { case SUBLANG_MARATHI_INDIA: return "mr_IN"; } return "mr"; case LANG_MOHAWK: switch (sub) { case SUBLANG_MOHAWK_CANADA: return "moh_CA"; } return "moh"; case LANG_MONGOLIAN: switch (sub) { case SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: case 0x1e: return "mn_MN"; case SUBLANG_MONGOLIAN_PRC: case 0x1f: return "mn_CN"; } return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ case LANG_NEPALI: switch (sub) { case SUBLANG_NEPALI_NEPAL: return "ne_NP"; case SUBLANG_NEPALI_INDIA: return "ne_IN"; } return "ne"; case LANG_NORWEGIAN: switch (sub) { case 0x1f: return "nb"; case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO"; case 0x1e: return "nn"; case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; } return "no"; case LANG_OCCITAN: switch (sub) { case SUBLANG_OCCITAN_FRANCE: return "oc_FR"; } return "oc"; case LANG_ORIYA: switch (sub) { case SUBLANG_ORIYA_INDIA: return "or_IN"; } return "or"; case LANG_OROMO: switch (sub) { case SUBLANG_DEFAULT: return "om_ET"; } return "om"; case LANG_PAPIAMENTU: switch (sub) { case SUBLANG_DEFAULT: return "pap_AN"; } return "pap"; case LANG_PASHTO: switch (sub) { case SUBLANG_PASHTO_AFGHANISTAN: return "ps_AF"; } return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ case LANG_POLISH: switch (sub) { case SUBLANG_POLISH_POLAND: return "pl_PL"; } return "pl"; case LANG_PORTUGUESE: switch (sub) { /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; case SUBLANG_PORTUGUESE: return "pt_PT"; } return "pt"; case LANG_PUNJABI: switch (sub) { case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */ } return "pa"; case LANG_QUECHUA: /* Note: Microsoft uses the non-ISO language code "quz". */ switch (sub) { case SUBLANG_QUECHUA_BOLIVIA: return "qu_BO"; case SUBLANG_QUECHUA_ECUADOR: return "qu_EC"; case SUBLANG_QUECHUA_PERU: return "qu_PE"; } return "qu"; case LANG_ROMANIAN: switch (sub) { case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO"; case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD"; } return "ro"; case LANG_ROMANSH: switch (sub) { case SUBLANG_ROMANSH_SWITZERLAND: return "rm_CH"; } return "rm"; case LANG_RUSSIAN: switch (sub) { case SUBLANG_RUSSIAN_RUSSIA: return "ru_RU"; case SUBLANG_RUSSIAN_MOLDAVIA: return "ru_MD"; } return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */ case LANG_SAMI: switch (sub) { /* Northern Sami */ case 0x00: return "se"; case SUBLANG_SAMI_NORTHERN_NORWAY: return "se_NO"; case SUBLANG_SAMI_NORTHERN_SWEDEN: return "se_SE"; case SUBLANG_SAMI_NORTHERN_FINLAND: return "se_FI"; /* Lule Sami */ case 0x1f: return "smj"; case SUBLANG_SAMI_LULE_NORWAY: return "smj_NO"; case SUBLANG_SAMI_LULE_SWEDEN: return "smj_SE"; /* Southern Sami */ case 0x1e: return "sma"; case SUBLANG_SAMI_SOUTHERN_NORWAY: return "sma_NO"; case SUBLANG_SAMI_SOUTHERN_SWEDEN: return "sma_SE"; /* Skolt Sami */ case 0x1d: return "sms"; case SUBLANG_SAMI_SKOLT_FINLAND: return "sms_FI"; /* Inari Sami */ case 0x1c: return "smn"; case SUBLANG_SAMI_INARI_FINLAND: return "smn_FI"; } return "se"; /* or "smi"? */ case LANG_SANSKRIT: switch (sub) { case SUBLANG_SANSKRIT_INDIA: return "sa_IN"; } return "sa"; case LANG_SCOTTISH_GAELIC: switch (sub) { case SUBLANG_DEFAULT: return "gd_GB"; } return "gd"; case LANG_SINDHI: switch (sub) { case SUBLANG_SINDHI_INDIA: return "sd_IN"; case SUBLANG_SINDHI_PAKISTAN: return "sd_PK"; /*case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";*/ } return "sd"; case LANG_SINHALESE: switch (sub) { case SUBLANG_SINHALESE_SRI_LANKA: return "si_LK"; } return "si"; case LANG_SLOVAK: switch (sub) { case SUBLANG_SLOVAK_SLOVAKIA: return "sk_SK"; } return "sk"; case LANG_SLOVENIAN: switch (sub) { case SUBLANG_SLOVENIAN_SLOVENIA: return "sl_SI"; } return "sl"; case LANG_SOMALI: switch (sub) { case SUBLANG_DEFAULT: return "so_SO"; } return "so"; case LANG_SORBIAN: /* FIXME: Adjust this when such locales appear on Unix. */ switch (sub) { /* Upper Sorbian */ case 0x00: return "hsb"; case SUBLANG_UPPER_SORBIAN_GERMANY: return "hsb_DE"; /* Lower Sorbian */ case 0x1f: return "dsb"; case SUBLANG_LOWER_SORBIAN_GERMANY: return "dsb_DE"; } return "wen"; case LANG_SOTHO: /* calls it "Sepedi"; according to it's the same as Northern Sotho. */ switch (sub) { case SUBLANG_SOTHO_SOUTH_AFRICA: return "nso_ZA"; } return "nso"; case LANG_SPANISH: switch (sub) { case SUBLANG_SPANISH: return "es_ES"; case SUBLANG_SPANISH_MEXICAN: return "es_MX"; case SUBLANG_SPANISH_MODERN: return "es_ES@modern"; /* not seen on Unix */ case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; case SUBLANG_SPANISH_PANAMA: return "es_PA"; case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; case SUBLANG_SPANISH_PERU: return "es_PE"; case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; case SUBLANG_SPANISH_ECUADOR: return "es_EC"; case SUBLANG_SPANISH_CHILE: return "es_CL"; case SUBLANG_SPANISH_URUGUAY: return "es_UY"; case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; case SUBLANG_SPANISH_HONDURAS: return "es_HN"; case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; case SUBLANG_SPANISH_US: return "es_US"; } return "es"; case LANG_SUTU: switch (sub) { case SUBLANG_DEFAULT: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */ } return "bnt"; case LANG_SWAHILI: switch (sub) { case SUBLANG_SWAHILI_KENYA: return "sw_KE"; } return "sw"; case LANG_SWEDISH: switch (sub) { case SUBLANG_SWEDISH_SWEDEN: return "sv_SE"; case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; } return "sv"; case LANG_SYRIAC: switch (sub) { case SUBLANG_SYRIAC_SYRIA: return "syr_SY"; /* An extinct language. */ } return "syr"; case LANG_TAGALOG: switch (sub) { case SUBLANG_TAGALOG_PHILIPPINES: return "tl_PH"; /* or "fil_PH"? */ } return "tl"; /* or "fil"? */ case LANG_TAJIK: switch (sub) { case 0x1f: return "tg"; case SUBLANG_TAJIK_TAJIKISTAN: return "tg_TJ"; } return "tg"; case LANG_TAMAZIGHT: /* Note: Microsoft uses the non-ISO language code "tmz". */ switch (sub) { /* FIXME: Adjust this when Tamazight locales appear on Unix. */ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic"; case 0x1f: return "ber@latin"; case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ@latin"; } return "ber"; case LANG_TAMIL: switch (sub) { case SUBLANG_TAMIL_INDIA: return "ta_IN"; } return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ case LANG_TATAR: switch (sub) { case SUBLANG_TATAR_RUSSIA: return "tt_RU"; } return "tt"; case LANG_TELUGU: switch (sub) { case SUBLANG_TELUGU_INDIA: return "te_IN"; } return "te"; case LANG_THAI: switch (sub) { case SUBLANG_THAI_THAILAND: return "th_TH"; } return "th"; case LANG_TIBETAN: switch (sub) { case SUBLANG_TIBETAN_PRC: /* Most Tibetans would not like "bo_CN". But Tibet does not yet have a country code of its own. */ return "bo"; case SUBLANG_TIBETAN_BHUTAN: return "bo_BT"; } return "bo"; case LANG_TIGRINYA: switch (sub) { case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET"; case SUBLANG_TIGRINYA_ERITREA: return "ti_ER"; } return "ti"; case LANG_TSONGA: switch (sub) { case SUBLANG_DEFAULT: return "ts_ZA"; } return "ts"; case LANG_TSWANA: /* Spoken in South Africa, Botswana. */ switch (sub) { case SUBLANG_TSWANA_SOUTH_AFRICA: return "tn_ZA"; } return "tn"; case LANG_TURKISH: switch (sub) { case SUBLANG_TURKISH_TURKEY: return "tr_TR"; } return "tr"; case LANG_TURKMEN: switch (sub) { case SUBLANG_TURKMEN_TURKMENISTAN: return "tk_TM"; } return "tk"; case LANG_UIGHUR: switch (sub) { case SUBLANG_UIGHUR_PRC: return "ug_CN"; } return "ug"; case LANG_UKRAINIAN: switch (sub) { case SUBLANG_UKRAINIAN_UKRAINE: return "uk_UA"; } return "uk"; case LANG_URDU: switch (sub) { case SUBLANG_URDU_PAKISTAN: return "ur_PK"; case SUBLANG_URDU_INDIA: return "ur_IN"; } return "ur"; case LANG_UZBEK: switch (sub) { case 0x1f: return "uz"; case SUBLANG_UZBEK_LATIN: return "uz_UZ"; case 0x1e: return "uz@cyrillic"; case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; } return "uz"; case LANG_VENDA: switch (sub) { case SUBLANG_DEFAULT: return "ve_ZA"; } return "ve"; case LANG_VIETNAMESE: switch (sub) { case SUBLANG_VIETNAMESE_VIETNAM: return "vi_VN"; } return "vi"; case LANG_WELSH: switch (sub) { case SUBLANG_WELSH_UNITED_KINGDOM: return "cy_GB"; } return "cy"; case LANG_WOLOF: switch (sub) { case SUBLANG_WOLOF_SENEGAL: return "wo_SN"; } return "wo"; case LANG_XHOSA: switch (sub) { case SUBLANG_XHOSA_SOUTH_AFRICA: return "xh_ZA"; } return "xh"; case LANG_YAKUT: switch (sub) { case SUBLANG_YAKUT_RUSSIA: return "sah_RU"; } return "sah"; case LANG_YI: switch (sub) { case SUBLANG_YI_PRC: return "ii_CN"; } return "ii"; case LANG_YIDDISH: switch (sub) { case SUBLANG_DEFAULT: return "yi_IL"; } return "yi"; case LANG_YORUBA: switch (sub) { case SUBLANG_YORUBA_NIGERIA: return "yo_NG"; } return "yo"; case LANG_ZULU: switch (sub) { case SUBLANG_ZULU_SOUTH_AFRICA: return "zu_ZA"; } return "zu"; default: return "C"; } } } # if !defined IN_LIBINTL static # endif const char * gl_locale_name_from_win32_LCID (LCID lcid) { LANGID langid; /* Strip off the sorting rules, keep only the language part. */ langid = LANGIDFROMLCID (lcid); return gl_locale_name_from_win32_LANGID (langid); } # ifdef WINDOWS_NATIVE /* Two variables to interface between get_lcid and the EnumLocales callback function below. */ static LCID found_lcid; static char lname[LC_MAX * (LOCALE_NAME_MAX_LENGTH + 1) + 1]; /* Callback function for EnumLocales. */ static BOOL CALLBACK enum_locales_fn (LPTSTR locale_num_str) { char *endp; char locval[2 * LOCALE_NAME_MAX_LENGTH + 1 + 1]; LCID try_lcid = strtoul (locale_num_str, &endp, 16); if (GetLocaleInfo (try_lcid, LOCALE_SENGLANGUAGE, locval, LOCALE_NAME_MAX_LENGTH)) { strcat (locval, "_"); if (GetLocaleInfo (try_lcid, LOCALE_SENGCOUNTRY, locval + strlen (locval), LOCALE_NAME_MAX_LENGTH)) { size_t locval_len = strlen (locval); if (strncmp (locval, lname, locval_len) == 0 && (lname[locval_len] == '.' || lname[locval_len] == '\0')) { found_lcid = try_lcid; return FALSE; } } } return TRUE; } /* This lock protects the get_lcid against multiple simultaneous calls. */ gl_lock_define_initialized(static, get_lcid_lock) /* Return the Locale ID (LCID) number given the locale's name, a string, in LOCALE_NAME. This works by enumerating all the locales supported by the system, until we find one whose name matches LOCALE_NAME. */ static LCID get_lcid (const char *locale_name) { /* A simple cache. */ static LCID last_lcid; static char last_locale[1000]; /* Lock while looking for an LCID, to protect access to static variables: last_lcid, last_locale, found_lcid, and lname. */ gl_lock_lock (get_lcid_lock); if (last_lcid > 0 && strcmp (locale_name, last_locale) == 0) { gl_lock_unlock (get_lcid_lock); return last_lcid; } strncpy (lname, locale_name, sizeof (lname) - 1); lname[sizeof (lname) - 1] = '\0'; found_lcid = 0; EnumSystemLocales (enum_locales_fn, LCID_SUPPORTED); if (found_lcid > 0) { last_lcid = found_lcid; strcpy (last_locale, locale_name); } gl_lock_unlock (get_lcid_lock); return found_lcid; } # endif #endif #if HAVE_USELOCALE /* glibc or Mac OS X */ /* Simple hash set of strings. We don't want to drag in lots of hash table code here. */ # define SIZE_BITS (sizeof (size_t) * CHAR_BIT) /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See http://www.haible.de/bruno/hashfunc.html. */ static size_t _GL_ATTRIBUTE_PURE string_hash (const void *x) { const char *s = (const char *) x; size_t h = 0; for (; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h; } /* A hash table of fixed size. Multiple threads can access it read-only simultaneously, but only one thread can insert into it at the same time. */ /* A node in a hash bucket collision list. */ struct hash_node { struct hash_node * volatile next; char contents[100]; /* has variable size */ }; # define HASH_TABLE_SIZE 257 static struct hash_node * volatile struniq_hash_table[HASH_TABLE_SIZE] /* = { NULL, ..., NULL } */; /* This lock protects the struniq_hash_table against multiple simultaneous insertions. */ gl_lock_define_initialized(static, struniq_lock) /* Store a copy of the given string in a string pool with indefinite extent. Return a pointer to this copy. */ static const char * struniq (const char *string) { size_t hashcode = string_hash (string); size_t slot = hashcode % HASH_TABLE_SIZE; size_t size; struct hash_node *new_node; struct hash_node *p; for (p = struniq_hash_table[slot]; p != NULL; p = p->next) if (strcmp (p->contents, string) == 0) return p->contents; size = strlen (string) + 1; new_node = (struct hash_node *) malloc (offsetof (struct hash_node, contents[0]) + size); if (new_node == NULL) /* Out of memory. Return a statically allocated string. */ return "C"; memcpy (new_node->contents, string, size); /* Lock while inserting new_node. */ gl_lock_lock (struniq_lock); /* Check whether another thread already added the string while we were waiting on the lock. */ for (p = struniq_hash_table[slot]; p != NULL; p = p->next) if (strcmp (p->contents, string) == 0) { free (new_node); new_node = p; goto done; } /* Really insert new_node into the hash table. Fill new_node entirely first, because other threads may be iterating over the linked list. */ new_node->next = struniq_hash_table[slot]; struniq_hash_table[slot] = new_node; done: /* Unlock after new_node is inserted. */ gl_lock_unlock (struniq_lock); return new_node->contents; } #endif #if defined IN_LIBINTL || HAVE_USELOCALE /* Like gl_locale_name_thread, except that the result is not in storage of indefinite extent. */ # if !defined IN_LIBINTL static # endif const char * gl_locale_name_thread_unsafe (int category, const char *categoryname) { # if HAVE_USELOCALE { locale_t thread_locale = uselocale (NULL); if (thread_locale != LC_GLOBAL_LOCALE) { # if __GLIBC__ >= 2 && !defined __UCLIBC__ /* Work around an incorrect definition of the _NL_LOCALE_NAME macro in glibc < 2.12. See . */ const char *name = nl_langinfo (_NL_ITEM ((category), _NL_ITEM_INDEX (-1))); if (name[0] == '\0') /* Fallback code for glibc < 2.4, which did not implement nl_langinfo (_NL_LOCALE_NAME (category)). */ name = thread_locale->__names[category]; return name; # elif defined __FreeBSD__ || (defined __APPLE__ && defined __MACH__) /* FreeBSD, Mac OS X */ int mask; switch (category) { case LC_CTYPE: mask = LC_CTYPE_MASK; break; case LC_NUMERIC: mask = LC_NUMERIC_MASK; break; case LC_TIME: mask = LC_TIME_MASK; break; case LC_COLLATE: mask = LC_COLLATE_MASK; break; case LC_MONETARY: mask = LC_MONETARY_MASK; break; case LC_MESSAGES: mask = LC_MESSAGES_MASK; break; default: /* We shouldn't get here. */ return ""; } return querylocale (mask, thread_locale); # endif } } # endif return NULL; } #endif const char * gl_locale_name_thread (int category, const char *categoryname) { #if HAVE_USELOCALE const char *name = gl_locale_name_thread_unsafe (category, categoryname); if (name != NULL) return struniq (name); #elif defined WINDOWS_NATIVE if (LC_MIN <= category && category <= LC_MAX) { char *locname = setlocale (category, NULL); LCID lcid = 0; /* If CATEGORY is LC_ALL, the result might be a semi-colon separated list of locales. We need only one, so we take the one corresponding to LC_CTYPE, as the most important for character translations. */ if (strchr (locname, ';')) locname = setlocale (LC_CTYPE, NULL); /* Convert locale name to LCID. We don't want to use LocaleNameToLCID because (a) it is only available since Vista, and (b) it doesn't accept locale names returned by 'setlocale'. */ lcid = get_lcid (locname); if (lcid > 0) return gl_locale_name_from_win32_LCID (lcid); } #endif return NULL; } /* XPG3 defines the result of 'setlocale (category, NULL)' as: "Directs 'setlocale()' to query 'category' and return the current setting of 'local'." However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ #if defined _LIBC || ((defined __GLIBC__ && __GLIBC__ >= 2) && !defined __UCLIBC__) # define HAVE_LOCALE_NULL #endif const char * gl_locale_name_posix (int category, const char *categoryname) { /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. On some systems this can be done by the 'setlocale' function itself. */ #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL return setlocale (category, NULL); #else /* On other systems we ignore what setlocale reports and instead look at the environment variables directly. This is necessary 1. on systems which have a facility for customizing the default locale (Mac OS X, native Windows, Cygwin) and where the system's setlocale() function ignores this default locale (Mac OS X, Cygwin), in two cases: a. when the user missed to use the setlocale() override from libintl (for example by not including ), b. when setlocale supports only the "C" locale, such as on Cygwin 1.5.x. In this case even the override from libintl cannot help. 2. on all systems where setlocale supports only the "C" locale. */ /* Strictly speaking, it is a POSIX violation to look at the environment variables regardless whether setlocale has been called or not. POSIX says: "For C-language programs, the POSIX locale shall be the default locale when the setlocale() function is not called." But we assume that all programs that use internationalized APIs call setlocale (LC_ALL, ""). */ return gl_locale_name_environ (category, categoryname); #endif } const char * gl_locale_name_environ (int category, const char *categoryname) { const char *retval; /* Setting of LC_ALL overrides all other. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') { #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer. Ignore invalid LANG value set by the Terminal application. */ if (strcmp (retval, "UTF-8") != 0) #endif #if defined __CYGWIN__ /* Cygwin. Ignore dummy LANG value set by ~/.profile. */ if (strcmp (retval, "C.UTF-8") != 0) #endif return retval; } return NULL; } const char * gl_locale_name_default (void) { /* POSIX:2001 says: "All implementations shall define a locale as the default locale, to be invoked when no environment variables are set, or set to the empty string. This default locale can be the POSIX locale or any other implementation-defined locale. Some implementations may provide facilities for local installation administrators to set the default locale, customizing it for each location. POSIX:2001 does not require such a facility. The systems with such a facility are Mac OS X and Windows: They provide a GUI that allows the user to choose a locale. - On Mac OS X, by default, none of LC_* or LANG are set. Starting with Mac OS X 10.4 or 10.5, LANG is set for processes launched by the 'Terminal' application (but sometimes to an incorrect value "UTF-8"). When no environment variable is set, setlocale (LC_ALL, "") uses the "C" locale. - On native Windows, by default, none of LC_* or LANG are set. When no environment variable is set, setlocale (LC_ALL, "") uses the locale chosen by the user. - On Cygwin 1.5.x, by default, none of LC_* or LANG are set. When no environment variable is set, setlocale (LC_ALL, "") uses the "C" locale. - On Cygwin 1.7, by default, LANG is set to "C.UTF-8" when the default ~/.profile is executed. When no environment variable is set, setlocale (LC_ALL, "") uses the "C.UTF-8" locale, which operates in the same way as the "C" locale. */ #if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined WINDOWS_NATIVE || defined __CYGWIN__) /* The system does not have a way of setting the locale, other than the POSIX specified environment variables. We use C as default locale. */ return "C"; #else /* Return an XPG style locale name language[_territory][@modifier]. Don't even bother determining the codeset; it's not useful in this context, because message catalogs are not specific to a single codeset. */ # if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer */ { /* Cache the locale name, since CoreFoundation calls are expensive. */ static const char *cached_localename; if (cached_localename == NULL) { char namebuf[256]; # if HAVE_CFLOCALECOPYCURRENT /* Mac OS X 10.3 or newer */ CFLocaleRef locale = CFLocaleCopyCurrent (); CFStringRef name = CFLocaleGetIdentifier (locale); if (CFStringGetCString (name, namebuf, sizeof (namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } CFRelease (locale); # elif HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer */ CFTypeRef value = CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), kCFPreferencesCurrentApplication); if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)value, namebuf, sizeof (namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } # endif if (cached_localename == NULL) cached_localename = "C"; } return cached_localename; } # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */ { LCID lcid; /* Use native Windows API locale ID. */ lcid = GetThreadLocale (); return gl_locale_name_from_win32_LCID (lcid); } # endif #endif } /* Determine the current locale's name, and canonicalize it into XPG syntax language[_territory][.codeset][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ const char * gl_locale_name (int category, const char *categoryname) { const char *retval; retval = gl_locale_name_thread (category, categoryname); if (retval != NULL) return retval; retval = gl_locale_name_posix (category, categoryname); if (retval != NULL) return retval; return gl_locale_name_default (); } gnupg-1.4.20/intl/plural-exp.h0000644000175000017500000001005112635262326013053 00000000000000/* Expression parsing and evaluation for plural form selection. Copyright (C) 2000-2003, 2005-2007 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _PLURAL_EXP_H #define _PLURAL_EXP_H #ifndef internal_function # define internal_function #endif #ifndef attribute_hidden # define attribute_hidden #endif #ifdef __cplusplus extern "C" { #endif enum expression_operator { /* Without arguments: */ var, /* The variable "n". */ num, /* Decimal number. */ /* Unary operators: */ lnot, /* Logical NOT. */ /* Binary operators: */ mult, /* Multiplication. */ divide, /* Division. */ module, /* Modulo operation. */ plus, /* Addition. */ minus, /* Subtraction. */ less_than, /* Comparison. */ greater_than, /* Comparison. */ less_or_equal, /* Comparison. */ greater_or_equal, /* Comparison. */ equal, /* Comparison for equality. */ not_equal, /* Comparison for inequality. */ land, /* Logical AND. */ lor, /* Logical OR. */ /* Ternary operators: */ qmop /* Question mark operator. */ }; /* This is the representation of the expressions to determine the plural form. */ struct expression { int nargs; /* Number of arguments. */ enum expression_operator operation; union { unsigned long int num; /* Number value for `num'. */ struct expression *args[3]; /* Up to three arguments. */ } val; }; /* This is the data structure to pass information to the parser and get the result in a thread-safe way. */ struct parse_args { const char *cp; struct expression *res; }; /* Names for the libintl functions are a problem. This source code is used 1. in the GNU C Library library, 2. in the GNU libintl library, 3. in the GNU gettext tools. The function names in each situation must be different, to allow for binary incompatible changes in 'struct expression'. Furthermore, 1. in the GNU C Library library, the names have a __ prefix, 2.+3. in the GNU libintl library and in the GNU gettext tools, the names must follow ANSI C and not start with __. So we have to distinguish the three cases. */ #ifdef _LIBC # define FREE_EXPRESSION __gettext_free_exp # define PLURAL_PARSE __gettextparse # define GERMANIC_PLURAL __gettext_germanic_plural # define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural #elif defined (IN_LIBINTL) # define FREE_EXPRESSION libintl_gettext_free_exp # define PLURAL_PARSE libintl_gettextparse # define GERMANIC_PLURAL libintl_gettext_germanic_plural # define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural #else # define FREE_EXPRESSION free_plural_expression # define PLURAL_PARSE parse_plural_expression # define GERMANIC_PLURAL germanic_plural # define EXTRACT_PLURAL_EXPRESSION extract_plural_expression #endif extern void FREE_EXPRESSION (struct expression *exp) internal_function; extern int PLURAL_PARSE (struct parse_args *arg); extern struct expression GERMANIC_PLURAL attribute_hidden; extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry, const struct expression **pluralp, unsigned long int *npluralsp) internal_function; #if !defined (_LIBC) && !defined (IN_LIBINTL) && !defined (IN_LIBGLOCALE) extern unsigned long int plural_eval (const struct expression *pexp, unsigned long int n); #endif #ifdef __cplusplus } #endif #endif /* _PLURAL_EXP_H */ gnupg-1.4.20/intl/gmo.h0000644000175000017500000001141512635262326011551 00000000000000/* Description of GNU message catalog format: general file layout. Copyright (C) 1995, 1997, 2000-2002, 2004, 2006 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 #include /* @@ end of prolog @@ */ /* The magic number of the GNU message catalog format. */ #define _MAGIC 0x950412de #define _MAGIC_SWAPPED 0xde120495 /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 #define MO_REVISION_NUMBER_WITH_SYSDEP_I 1 /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work when cross-compiling. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U #else # define UINT_MAX_32_BITS 0xFFFFFFFF #endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ #ifndef UINT_MAX # define UINT_MAX UINT_MAX_32_BITS #endif #if UINT_MAX == UINT_MAX_32_BITS typedef unsigned nls_uint32; #else # if USHRT_MAX == UINT_MAX_32_BITS typedef unsigned short nls_uint32; # else # if ULONG_MAX == UINT_MAX_32_BITS typedef unsigned long nls_uint32; # else /* The following line is intended to throw an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif #endif /* Header for binary .mo file format. */ struct mo_file_header { /* The magic number. */ nls_uint32 magic; /* The revision number of the file format. */ nls_uint32 revision; /* The following are only used in .mo files with major revision 0 or 1. */ /* The number of strings pairs. */ nls_uint32 nstrings; /* Offset of table with start offsets of original strings. */ nls_uint32 orig_tab_offset; /* Offset of table with start offsets of translated strings. */ nls_uint32 trans_tab_offset; /* Size of hash table. */ nls_uint32 hash_tab_size; /* Offset of first hash table entry. */ nls_uint32 hash_tab_offset; /* The following are only used in .mo files with minor revision >= 1. */ /* The number of system dependent segments. */ nls_uint32 n_sysdep_segments; /* Offset of table describing system dependent segments. */ nls_uint32 sysdep_segments_offset; /* The number of system dependent strings pairs. */ nls_uint32 n_sysdep_strings; /* Offset of table with start offsets of original sysdep strings. */ nls_uint32 orig_sysdep_tab_offset; /* Offset of table with start offsets of translated sysdep strings. */ nls_uint32 trans_sysdep_tab_offset; }; /* Descriptor for static string contained in the binary .mo file. */ struct string_desc { /* Length of addressed string, not including the trailing NUL. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* The following are only used in .mo files with minor revision >= 1. */ /* Descriptor for system dependent string segment. */ struct sysdep_segment { /* Length of addressed string, including the trailing NUL. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* Pair of a static and a system dependent segment, in struct sysdep_string. */ struct segment_pair { /* Size of static segment. */ nls_uint32 segsize; /* Reference to system dependent string segment, or ~0 at the end. */ nls_uint32 sysdepref; }; /* Descriptor for system dependent string. */ struct sysdep_string { /* Offset of static string segments in file. */ nls_uint32 offset; /* Alternating sequence of static and system dependent segments. The last segment is a static segment, including the trailing NUL. */ struct segment_pair segments[1]; }; /* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF, regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */ #define SEGMENTS_END ((nls_uint32) ~0) /* @@ begin of epilog @@ */ #endif /* gettext.h */ gnupg-1.4.20/intl/os2compat.c0000644000175000017500000000541212635262326012671 00000000000000/* OS/2 compatibility functions. Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #define OS2_AWARE #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* A version of getenv() that works from DLLs */ extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue); char * _nl_getenv (const char *name) { unsigned char *value; if (DosScanEnv (name, &value)) return NULL; else return value; } /* A fixed size buffer. */ char libintl_nl_default_dirname[MAXPATHLEN+1]; char *_nlos2_libdir = NULL; char *_nlos2_localealiaspath = NULL; char *_nlos2_localedir = NULL; static __attribute__((constructor)) void nlos2_initialize () { char *root = getenv ("UNIXROOT"); char *gnulocaledir = getenv ("GNULOCALEDIR"); _nlos2_libdir = gnulocaledir; if (!_nlos2_libdir) { if (root) { size_t sl = strlen (root); _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1); memcpy (_nlos2_libdir, root, sl); memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1); } else _nlos2_libdir = LIBDIR; } _nlos2_localealiaspath = gnulocaledir; if (!_nlos2_localealiaspath) { if (root) { size_t sl = strlen (root); _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1); memcpy (_nlos2_localealiaspath, root, sl); memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1); } else _nlos2_localealiaspath = LOCALE_ALIAS_PATH; } _nlos2_localedir = gnulocaledir; if (!_nlos2_localedir) { if (root) { size_t sl = strlen (root); _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1); memcpy (_nlos2_localedir, root, sl); memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1); } else _nlos2_localedir = LOCALEDIR; } if (strlen (_nlos2_localedir) <= MAXPATHLEN) strcpy (libintl_nl_default_dirname, _nlos2_localedir); } gnupg-1.4.20/intl/ngettext.c0000644000175000017500000000357712635262326012636 00000000000000/* Implementation of ngettext(3) function. Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define NGETTEXT __ngettext # define DCNGETTEXT __dcngettext #else # define NGETTEXT libintl_ngettext # define DCNGETTEXT libintl_dcngettext #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n) { return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__ngettext, ngettext); #endif gnupg-1.4.20/intl/log.c0000644000175000017500000000740412635262326011546 00000000000000/* Log file output. Copyright (C) 2003, 2005, 2009 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Bruno Haible . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include /* Handle multi-threaded applications. */ #ifdef _LIBC # include #else # include "lock.h" #endif /* Separator between msgctxt and msgid in .mo files. */ #define MSGCTXT_SEPARATOR '\004' /* EOT */ /* Print an ASCII string with quotes and escape sequences where needed. */ static void print_escaped (FILE *stream, const char *str, const char *str_end) { putc ('"', stream); for (; str != str_end; str++) if (*str == '\n') { fputs ("\\n\"", stream); if (str + 1 == str_end) return; fputs ("\n\"", stream); } else { if (*str == '"' || *str == '\\') putc ('\\', stream); putc (*str, stream); } putc ('"', stream); } static char *last_logfilename = NULL; static FILE *last_logfile = NULL; __libc_lock_define_initialized (static, lock) static inline void _nl_log_untranslated_locked (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural) { FILE *logfile; const char *separator; /* Can we reuse the last opened logfile? */ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0) { /* Close the last used logfile. */ if (last_logfilename != NULL) { if (last_logfile != NULL) { fclose (last_logfile); last_logfile = NULL; } free (last_logfilename); last_logfilename = NULL; } /* Open the logfile. */ last_logfilename = (char *) malloc (strlen (logfilename) + 1); if (last_logfilename == NULL) return; strcpy (last_logfilename, logfilename); last_logfile = fopen (logfilename, "a"); if (last_logfile == NULL) return; } logfile = last_logfile; fprintf (logfile, "domain "); print_escaped (logfile, domainname, domainname + strlen (domainname)); separator = strchr (msgid1, MSGCTXT_SEPARATOR); if (separator != NULL) { /* The part before the MSGCTXT_SEPARATOR is the msgctxt. */ fprintf (logfile, "\nmsgctxt "); print_escaped (logfile, msgid1, separator); msgid1 = separator + 1; } fprintf (logfile, "\nmsgid "); print_escaped (logfile, msgid1, msgid1 + strlen (msgid1)); if (plural) { fprintf (logfile, "\nmsgid_plural "); print_escaped (logfile, msgid2, msgid2 + strlen (msgid2)); fprintf (logfile, "\nmsgstr[0] \"\"\n"); } else fprintf (logfile, "\nmsgstr \"\"\n"); putc ('\n', logfile); } /* Add to the log file an entry denoting a failed translation. */ void _nl_log_untranslated (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural) { __libc_lock_lock (lock); _nl_log_untranslated_locked (logfilename, domainname, msgid1, msgid2, plural); __libc_lock_unlock (lock); } gnupg-1.4.20/intl/relocatable.h0000644000175000017500000000607512635262326013252 00000000000000/* Provide relocatable packages. Copyright (C) 2003, 2005, 2008 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _RELOCATABLE_H #define _RELOCATABLE_H #ifdef __cplusplus extern "C" { #endif /* This can be enabled through the configure --enable-relocatable option. */ #if ENABLE_RELOCATABLE /* When building a DLL, we must export some functions. Note that because this is a private .h file, we don't need to use __declspec(dllimport) in any case. */ #if HAVE_VISIBILITY && BUILDING_DLL # define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default"))) #elif defined _MSC_VER && BUILDING_DLL # define RELOCATABLE_DLL_EXPORTED __declspec(dllexport) #else # define RELOCATABLE_DLL_EXPORTED #endif /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ extern RELOCATABLE_DLL_EXPORTED void set_relocation_prefix (const char *orig_prefix, const char *curr_prefix); /* Returns the pathname, relocated according to the current installation directory. The returned string is either PATHNAME unmodified or a freshly allocated string that you can free with free() after casting it to 'char *'. */ extern const char * relocate (const char *pathname); /* Memory management: relocate() potentially allocates memory, because it has to construct a fresh pathname. If this is a problem because your program calls relocate() frequently, think about caching the result. Or free the return value if it was different from the argument pathname. */ /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular file, and the current pathname of this file. Returns it, freshly allocated. Returns NULL upon failure. */ extern char * compute_curr_prefix (const char *orig_installprefix, const char *orig_installdir, const char *curr_pathname); #else /* By default, we use the hardwired pathnames. */ #define relocate(pathname) (pathname) #endif #ifdef __cplusplus } #endif #endif /* _RELOCATABLE_H */ gnupg-1.4.20/intl/xsize.h0000644000175000017500000000710512635262326012132 00000000000000/* xsize.h -- Checked size_t computations. Copyright (C) 2003, 2008-2014 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ #ifndef _XSIZE_H #define _XSIZE_H /* Get size_t. */ #include /* Get SIZE_MAX. */ #include #if HAVE_STDINT_H # include #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XSIZE_INLINE # define XSIZE_INLINE _GL_INLINE #endif /* The size of memory objects is often computed through expressions of type size_t. Example: void* p = malloc (header_size + n * element_size). These computations can lead to overflow. When this happens, malloc() returns a piece of memory that is way too small, and the program then crashes while attempting to fill the memory. To avoid this, the functions and macros in this file check for overflow. The convention is that SIZE_MAX represents overflow. malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc implementation that uses mmap --, it's recommended to use size_overflow_p() or size_in_bounds_p() before invoking malloc(). The example thus becomes: size_t size = xsum (header_size, xtimes (n, element_size)); void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); */ /* Convert an arbitrary value >= 0 to type size_t. */ #define xcast_size_t(N) \ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) /* Sum of two sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum (size_t size1, size_t size2) { size_t sum = size1 + size2; return (sum >= size1 ? sum : SIZE_MAX); } /* Sum of three sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) { return xsum (xsum (xsum (size1, size2), size3), size4); } /* Maximum of two sizes, with overflow check. */ XSIZE_INLINE size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xmax (size_t size1, size_t size2) { /* No explicit check is needed here, because for any n: max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ return (size1 >= size2 ? size1 : size2); } /* Multiplication of a count with an element size, with overflow check. The count must be >= 0 and the element size must be > 0. This is a macro, not a function, so that it works correctly even when N is of a wider type and N > SIZE_MAX. */ #define xtimes(N, ELSIZE) \ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) /* Check for overflow. */ #define size_overflow_p(SIZE) \ ((SIZE) == SIZE_MAX) /* Check against overflow. */ #define size_in_bounds_p(SIZE) \ ((SIZE) != SIZE_MAX) _GL_INLINE_HEADER_END #endif /* _XSIZE_H */ gnupg-1.4.20/intl/setlocale.c0000644000175000017500000010051712635262326012737 00000000000000/* setlocale() function that respects the locale chosen by the user. Copyright (C) 2009 Free Software Foundation, Inc. Written by Bruno Haible , 2009. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif /* Override setlocale() and newlocale() so that when the default locale is requested (locale = "") and no relevant environment variable is set, the locale chosen by the user is used. This matters on MacOS X 10 and Windows. See the comments in localename.c, function gl_locale_name_default. */ #include #include #include /* When building a DLL, we must export some functions. Note that because the functions are only defined for binary backward compatibility, we don't need to use __declspec(dllimport) in any case. */ #if HAVE_VISIBILITY && BUILDING_DLL # define DLL_EXPORTED __attribute__((__visibility__("default"))) #elif defined _MSC_VER && BUILDING_DLL # define DLL_EXPORTED __declspec(dllexport) #else # define DLL_EXPORTED #endif #include "gettextP.h" #if (defined __APPLE__ && defined __MACH__) || defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ # undef setlocale # undef newlocale /* Return string representation of locale category CATEGORY. */ static const char * category_to_name (int category) { const char *retval; switch (category) { case LC_COLLATE: retval = "LC_COLLATE"; break; case LC_CTYPE: retval = "LC_CTYPE"; break; case LC_MONETARY: retval = "LC_MONETARY"; break; case LC_NUMERIC: retval = "LC_NUMERIC"; break; case LC_TIME: retval = "LC_TIME"; break; case LC_MESSAGES: retval = "LC_MESSAGES"; break; default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* The native Win32 setlocale() function expects locale names of the form "German" or "German_Germany" or "DEU", but not "de" or "de_DE". We need to convert the names from the form with ISO 639 language code and ISO 3166 country code to the form with English names or with three-letter identifier. The three-letter identifiers known by a Windows XP SP2 or SP3 are: AFK Afrikaans_South Africa.1252 ARA Arabic_Saudi Arabia.1256 ARB Arabic_Lebanon.1256 ARE Arabic_Egypt.1256 ARG Arabic_Algeria.1256 ARH Arabic_Bahrain.1256 ARI Arabic_Iraq.1256 ARJ Arabic_Jordan.1256 ARK Arabic_Kuwait.1256 ARL Arabic_Libya.1256 ARM Arabic_Morocco.1256 ARO Arabic_Oman.1256 ARQ Arabic_Qatar.1256 ARS Arabic_Syria.1256 ART Arabic_Tunisia.1256 ARU Arabic_U.A.E..1256 ARY Arabic_Yemen.1256 AZE Azeri (Latin)_Azerbaijan.1254 BEL Belarusian_Belarus.1251 BGR Bulgarian_Bulgaria.1251 BSB Bosnian_Bosnia and Herzegovina.1250 BSC Bosnian (Cyrillic)_Bosnia and Herzegovina.1250 (wrong encoding!) CAT Catalan_Spain.1252 CHH Chinese_Hong Kong S.A.R..950 CHI Chinese_Singapore.936 CHS Chinese_People's Republic of China.936 CHT Chinese_Taiwan.950 CSY Czech_Czech Republic.1250 CYM Welsh_United Kingdom.1252 DAN Danish_Denmark.1252 DEA German_Austria.1252 DEC German_Liechtenstein.1252 DEL German_Luxembourg.1252 DES German_Switzerland.1252 DEU German_Germany.1252 ELL Greek_Greece.1253 ENA English_Australia.1252 ENB English_Caribbean.1252 ENC English_Canada.1252 ENG English_United Kingdom.1252 ENI English_Ireland.1252 ENJ English_Jamaica.1252 ENL English_Belize.1252 ENP English_Republic of the Philippines.1252 ENS English_South Africa.1252 ENT English_Trinidad and Tobago.1252 ENU English_United States.1252 ENW English_Zimbabwe.1252 ENZ English_New Zealand.1252 ESA Spanish_Panama.1252 ESB Spanish_Bolivia.1252 ESC Spanish_Costa Rica.1252 ESD Spanish_Dominican Republic.1252 ESE Spanish_El Salvador.1252 ESF Spanish_Ecuador.1252 ESG Spanish_Guatemala.1252 ESH Spanish_Honduras.1252 ESI Spanish_Nicaragua.1252 ESL Spanish_Chile.1252 ESM Spanish_Mexico.1252 ESN Spanish_Spain.1252 ESO Spanish_Colombia.1252 ESP Spanish_Spain.1252 ESR Spanish_Peru.1252 ESS Spanish_Argentina.1252 ESU Spanish_Puerto Rico.1252 ESV Spanish_Venezuela.1252 ESY Spanish_Uruguay.1252 ESZ Spanish_Paraguay.1252 ETI Estonian_Estonia.1257 EUQ Basque_Spain.1252 FAR Farsi_Iran.1256 FIN Finnish_Finland.1252 FOS Faroese_Faroe Islands.1252 FPO Filipino_Philippines.1252 FRA French_France.1252 FRB French_Belgium.1252 FRC French_Canada.1252 FRL French_Luxembourg.1252 FRM French_Principality of Monaco.1252 FRS French_Switzerland.1252 FYN Frisian_Netherlands.1252 GLC Galician_Spain.1252 HEB Hebrew_Israel.1255 HRB Croatian_Bosnia and Herzegovina.1250 HRV Croatian_Croatia.1250 HUN Hungarian_Hungary.1250 IND Indonesian_Indonesia.1252 IRE Irish_Ireland.1252 ISL Icelandic_Iceland.1252 ITA Italian_Italy.1252 ITS Italian_Switzerland.1252 IUK Inuktitut (Latin)_Canada.1252 JPN Japanese_Japan.932 KKZ Kazakh_Kazakhstan.1251 KOR Korean_Korea.949 KYR Kyrgyz_Kyrgyzstan.1251 LBX Luxembourgish_Luxembourg.1252 LTH Lithuanian_Lithuania.1257 LVI Latvian_Latvia.1257 MKI FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251 MON Mongolian_Mongolia.1251 MPD Mapudungun_Chile.1252 MSB Malay_Brunei Darussalam.1252 MSL Malay_Malaysia.1252 MWK Mohawk_Canada.1252 NLB Dutch_Belgium.1252 NLD Dutch_Netherlands.1252 NON Norwegian-Nynorsk_Norway.1252 NOR Norwegian (Bokmål)_Norway.1252 NSO Northern Sotho_South Africa.1252 PLK Polish_Poland.1250 PTB Portuguese_Brazil.1252 PTG Portuguese_Portugal.1252 QUB Quechua_Bolivia.1252 QUE Quechua_Ecuador.1252 QUP Quechua_Peru.1252 RMC Romansh_Switzerland.1252 ROM Romanian_Romania.1250 RUS Russian_Russia.1251 SKY Slovak_Slovakia.1250 SLV Slovenian_Slovenia.1250 SMA Sami (Southern)_Norway.1252 SMB Sami (Southern)_Sweden.1252 SME Sami (Northern)_Norway.1252 SMF Sami (Northern)_Sweden.1252 SMG Sami (Northern)_Finland.1252 SMJ Sami (Lule)_Norway.1252 SMK Sami (Lule)_Sweden.1252 SMN Sami (Inari)_Finland.1252 SMS Sami (Skolt)_Finland.1252 SQI Albanian_Albania.1250 SRB Serbian (Cyrillic)_Serbia and Montenegro.1251 SRL Serbian (Latin)_Serbia and Montenegro.1250 SRN Serbian (Cyrillic)_Bosnia and Herzegovina.1251 SRS Serbian (Latin)_Bosnia and Herzegovina.1250 SVE Swedish_Sweden.1252 SVF Swedish_Finland.1252 SWK Swahili_Kenya.1252 THA Thai_Thailand.874 TRK Turkish_Turkey.1254 TSN Tswana_South Africa.1252 TTT Tatar_Russia.1251 UKR Ukrainian_Ukraine.1251 URD Urdu_Islamic Republic of Pakistan.1256 USA English_United States.1252 UZB Uzbek (Latin)_Uzbekistan.1254 VIT Vietnamese_Viet Nam.1258 XHO Xhosa_South Africa.1252 ZHH Chinese_Hong Kong S.A.R..950 ZHI Chinese_Singapore.936 ZHM Chinese_Macau S.A.R..950 ZUL Zulu_South Africa.1252 */ /* Table from ISO 639 language code, optionally with country or script suffix, to English name. Keep in sync with the gl_locale_name_from_win32_LANGID function in localename.c! */ struct table_entry { const char *code; const char *english; }; static const struct table_entry language_table[] = { { "af", "Afrikaans" }, { "am", "Amharic" }, { "ar", "Arabic" }, { "arn", "Mapudungun" }, { "as", "Assamese" }, { "az@cyrillic", "Azeri (Cyrillic)" }, { "az@latin", "Azeri (Latin)" }, { "ba", "Bashkir" }, { "be", "Belarusian" }, { "ber", "Tamazight" }, { "ber@arabic", "Tamazight (Arabic)" }, { "ber@latin", "Tamazight (Latin)" }, { "bg", "Bulgarian" }, { "bin", "Edo" }, { "bn", "Bengali" }, { "bn_BD", "Bengali (Bangladesh)" }, { "bn_IN", "Bengali (India)" }, { "bnt", "Sutu" }, { "bo", "Tibetan" }, { "br", "Breton" }, { "bs", "BSB" }, /* "Bosnian (Latin)" */ { "bs@cyrillic", "BSC" }, /* Bosnian (Cyrillic) */ { "ca", "Catalan" }, { "chr", "Cherokee" }, { "co", "Corsican" }, { "cpe", "Hawaiian" }, { "cs", "Czech" }, { "cy", "Welsh" }, { "da", "Danish" }, { "de", "German" }, { "dsb", "Lower Sorbian" }, { "dv", "Divehi" }, { "el", "Greek" }, { "en", "English" }, { "es", "Spanish" }, { "et", "Estonian" }, { "eu", "Basque" }, { "fa", "Farsi" }, { "ff", "Fulfulde" }, { "fi", "Finnish" }, { "fo", "Faroese" }, /* "Faeroese" does not work */ { "fr", "French" }, { "fy", "Frisian" }, { "ga", "IRE" }, /* Gaelic (Ireland) */ { "gd", "Gaelic (Scotland)" }, { "gd", "Scottish Gaelic" }, { "gl", "Galician" }, { "gn", "Guarani" }, { "gsw", "Alsatian" }, { "gu", "Gujarati" }, { "ha", "Hausa" }, { "he", "Hebrew" }, { "hi", "Hindi" }, { "hr", "Croatian" }, { "hsb", "Upper Sorbian" }, { "hu", "Hungarian" }, { "hy", "Armenian" }, { "id", "Indonesian" }, { "ig", "Igbo" }, { "ii", "Yi" }, { "is", "Icelandic" }, { "it", "Italian" }, { "iu", "IUK" }, /* Inuktitut */ { "ja", "Japanese" }, { "ka", "Georgian" }, { "kk", "Kazakh" }, { "kl", "Greenlandic" }, { "km", "Cambodian" }, { "km", "Khmer" }, { "kn", "Kannada" }, { "ko", "Korean" }, { "kok", "Konkani" }, { "kr", "Kanuri" }, { "ks", "Kashmiri" }, { "ks_IN", "Kashmiri_India" }, { "ks_PK", "Kashmiri (Arabic)_Pakistan" }, { "ky", "Kyrgyz" }, { "la", "Latin" }, { "lb", "Luxembourgish" }, { "lo", "Lao" }, { "lt", "Lithuanian" }, { "lv", "Latvian" }, { "mi", "Maori" }, { "mk", "FYRO Macedonian" }, { "mk", "Macedonian" }, { "ml", "Malayalam" }, { "mn", "Mongolian" }, { "mni", "Manipuri" }, { "moh", "Mohawk" }, { "mr", "Marathi" }, { "ms", "Malay" }, { "mt", "Maltese" }, { "my", "Burmese" }, { "nb", "NOR" }, /* Norwegian Bokmål */ { "ne", "Nepali" }, { "nic", "Ibibio" }, { "nl", "Dutch" }, { "nn", "NON" }, /* Norwegian Nynorsk */ { "no", "Norwegian" }, { "nso", "Northern Sotho" }, { "nso", "Sepedi" }, { "oc", "Occitan" }, { "om", "Oromo" }, { "or", "Oriya" }, { "pa", "Punjabi" }, { "pap", "Papiamentu" }, { "pl", "Polish" }, { "prs", "Dari" }, { "ps", "Pashto" }, { "pt", "Portuguese" }, { "qu", "Quechua" }, { "qut", "K'iche'" }, { "rm", "Romansh" }, { "ro", "Romanian" }, { "ru", "Russian" }, { "rw", "Kinyarwanda" }, { "sa", "Sanskrit" }, { "sah", "Yakut" }, { "sd", "Sindhi" }, { "se", "Sami (Northern)" }, { "se", "Northern Sami" }, { "si", "Sinhalese" }, { "sk", "Slovak" }, { "sl", "Slovenian" }, { "sma", "Sami (Southern)" }, { "sma", "Southern Sami" }, { "smj", "Sami (Lule)" }, { "smj", "Lule Sami" }, { "smn", "Sami (Inari)" }, { "smn", "Inari Sami" }, { "sms", "Sami (Skolt)" }, { "sms", "Skolt Sami" }, { "so", "Somali" }, { "sq", "Albanian" }, { "sr", "Serbian (Latin)" }, { "sr@cyrillic", "SRB" }, /* Serbian (Cyrillic) */ { "sw", "Swahili" }, { "syr", "Syriac" }, { "ta", "Tamil" }, { "te", "Telugu" }, { "tg", "Tajik" }, { "th", "Thai" }, { "ti", "Tigrinya" }, { "tk", "Turkmen" }, { "tl", "Filipino" }, { "tn", "Tswana" }, { "tr", "Turkish" }, { "ts", "Tsonga" }, { "tt", "Tatar" }, { "ug", "Uighur" }, { "uk", "Ukrainian" }, { "ur", "Urdu" }, { "uz", "Uzbek" }, { "uz", "Uzbek (Latin)" }, { "uz@cyrillic", "Uzbek (Cyrillic)" }, { "ve", "Venda" }, { "vi", "Vietnamese" }, { "wen", "Sorbian" }, { "wo", "Wolof" }, { "xh", "Xhosa" }, { "yi", "Yiddish" }, { "yo", "Yoruba" }, { "zh", "Chinese" }, { "zu", "Zulu" } }; /* Table from ISO 3166 country code to English name. Keep in sync with the gl_locale_name_from_win32_LANGID function in localename.c! */ static const struct table_entry country_table[] = { { "AE", "U.A.E." }, { "AF", "Afghanistan" }, { "AL", "Albania" }, { "AM", "Armenia" }, { "AN", "Netherlands Antilles" }, { "AR", "Argentina" }, { "AT", "Austria" }, { "AU", "Australia" }, { "AZ", "Azerbaijan" }, { "BA", "Bosnia and Herzegovina" }, { "BD", "Bangladesh" }, { "BE", "Belgium" }, { "BG", "Bulgaria" }, { "BH", "Bahrain" }, { "BN", "Brunei Darussalam" }, { "BO", "Bolivia" }, { "BR", "Brazil" }, { "BT", "Bhutan" }, { "BY", "Belarus" }, { "BZ", "Belize" }, { "CA", "Canada" }, { "CG", "Congo" }, { "CH", "Switzerland" }, { "CI", "Cote d'Ivoire" }, { "CL", "Chile" }, { "CM", "Cameroon" }, { "CN", "People's Republic of China" }, { "CO", "Colombia" }, { "CR", "Costa Rica" }, { "CS", "Serbia and Montenegro" }, { "CZ", "Czech Republic" }, { "DE", "Germany" }, { "DK", "Denmark" }, { "DO", "Dominican Republic" }, { "DZ", "Algeria" }, { "EC", "Ecuador" }, { "EE", "Estonia" }, { "EG", "Egypt" }, { "ER", "Eritrea" }, { "ES", "Spain" }, { "ET", "Ethiopia" }, { "FI", "Finland" }, { "FO", "Faroe Islands" }, { "FR", "France" }, { "GB", "United Kingdom" }, { "GD", "Caribbean" }, { "GE", "Georgia" }, { "GL", "Greenland" }, { "GR", "Greece" }, { "GT", "Guatemala" }, { "HK", "Hong Kong" }, { "HK", "Hong Kong S.A.R." }, { "HN", "Honduras" }, { "HR", "Croatia" }, { "HT", "Haiti" }, { "HU", "Hungary" }, { "ID", "Indonesia" }, { "IE", "Ireland" }, { "IL", "Israel" }, { "IN", "India" }, { "IQ", "Iraq" }, { "IR", "Iran" }, { "IS", "Iceland" }, { "IT", "Italy" }, { "JM", "Jamaica" }, { "JO", "Jordan" }, { "JP", "Japan" }, { "KE", "Kenya" }, { "KG", "Kyrgyzstan" }, { "KH", "Cambodia" }, { "KR", "South Korea" }, { "KW", "Kuwait" }, { "KZ", "Kazakhstan" }, { "LA", "Laos" }, { "LB", "Lebanon" }, { "LI", "Liechtenstein" }, { "LK", "Sri Lanka" }, { "LT", "Lithuania" }, { "LU", "Luxembourg" }, { "LV", "Latvia" }, { "LY", "Libya" }, { "MA", "Morocco" }, { "MC", "Principality of Monaco" }, { "MD", "Moldava" }, { "MD", "Moldova" }, { "ME", "Montenegro" }, { "MK", "Former Yugoslav Republic of Macedonia" }, { "ML", "Mali" }, { "MM", "Myanmar" }, { "MN", "Mongolia" }, { "MO", "Macau S.A.R." }, { "MT", "Malta" }, { "MV", "Maldives" }, { "MX", "Mexico" }, { "MY", "Malaysia" }, { "NG", "Nigeria" }, { "NI", "Nicaragua" }, { "NL", "Netherlands" }, { "NO", "Norway" }, { "NP", "Nepal" }, { "NZ", "New Zealand" }, { "OM", "Oman" }, { "PA", "Panama" }, { "PE", "Peru" }, { "PH", "Philippines" }, { "PK", "Islamic Republic of Pakistan" }, { "PL", "Poland" }, { "PR", "Puerto Rico" }, { "PT", "Portugal" }, { "PY", "Paraguay" }, { "QA", "Qatar" }, { "RE", "Reunion" }, { "RO", "Romania" }, { "RS", "Serbia" }, { "RU", "Russia" }, { "RW", "Rwanda" }, { "SA", "Saudi Arabia" }, { "SE", "Sweden" }, { "SG", "Singapore" }, { "SI", "Slovenia" }, { "SK", "Slovak" }, { "SN", "Senegal" }, { "SO", "Somalia" }, { "SR", "Suriname" }, { "SV", "El Salvador" }, { "SY", "Syria" }, { "TH", "Thailand" }, { "TJ", "Tajikistan" }, { "TM", "Turkmenistan" }, { "TN", "Tunisia" }, { "TR", "Turkey" }, { "TT", "Trinidad and Tobago" }, { "TW", "Taiwan" }, { "TZ", "Tanzania" }, { "UA", "Ukraine" }, { "US", "United States" }, { "UY", "Uruguay" }, { "VA", "Vatican" }, { "VE", "Venezuela" }, { "VN", "Viet Nam" }, { "YE", "Yemen" }, { "ZA", "South Africa" }, { "ZW", "Zimbabwe" } }; /* Given a string STRING, find the set of indices i such that TABLE[i].code is the given STRING. It is a range [lo,hi-1]. */ typedef struct { size_t lo; size_t hi; } range_t; static void search (const struct table_entry *table, size_t table_size, const char *string, range_t *result) { /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].code, string) < 0, for i >= hi, strcmp (table[i].code, string) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].code, string); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (language_table[i].code, string) == 0. Find the entire interval of such i. */ { size_t i; for (i = mid; i > lo; ) { i--; if (strcmp (table[i].code, string) < 0) { lo = i + 1; break; } } } { size_t i; for (i = mid; i < hi; i++) { if (strcmp (table[i].code, string) > 0) { hi = i; break; } } } /* The set of i with strcmp (language_table[i].code, string) == 0 is the interval [lo, hi-1]. */ break; } } result->lo = lo; result->hi = hi; } /* Like setlocale, but accept also locale names in the form ll or ll_CC, where ll is an ISO 639 language code and CC is an ISO 3166 country code. */ static char * setlocale_unixlike (int category, const char *locale) { char *result; char llCC_buf[64]; char ll_buf[64]; char CC_buf[64]; /* First, try setlocale with the original argument unchanged. */ result = setlocale (category, locale); if (result != NULL) return result; /* Otherwise, assume the argument is in the form language[_territory][.codeset][@modifier] and try to map it using the tables. */ if (strlen (locale) < sizeof (llCC_buf)) { /* Second try: Remove the codeset part. */ { const char *p = locale; char *q = llCC_buf; /* Copy the part before the dot. */ for (; *p != '\0' && *p != '.'; p++, q++) *q = *p; if (*p == '.') /* Skip the part up to the '@', if any. */ for (; *p != '\0' && *p != '@'; p++) ; /* Copy the part starting with '@', if any. */ for (; *p != '\0'; p++, q++) *q = *p; *q = '\0'; } /* llCC_buf now contains language[_territory][@modifier] */ if (strcmp (llCC_buf, locale) != 0) { result = setlocale (category, llCC_buf); if (result != NULL) return result; } /* Look it up in language_table. */ { range_t range; size_t i; search (language_table, sizeof (language_table) / sizeof (language_table[0]), llCC_buf, &range); for (i = range.lo; i < range.hi; i++) { /* Try the replacement in language_table[i]. */ result = setlocale (category, language_table[i].english); if (result != NULL) return result; } } /* Split language[_territory][@modifier] into ll_buf = language[@modifier] and CC_buf = territory */ { const char *underscore = strchr (llCC_buf, '_'); if (underscore != NULL) { const char *territory_start = underscore + 1; const char *territory_end = strchr (territory_start, '@'); if (territory_end == NULL) territory_end = territory_start + strlen (territory_start); memcpy (ll_buf, llCC_buf, underscore - llCC_buf); strcpy (ll_buf + (underscore - llCC_buf), territory_end); memcpy (CC_buf, territory_start, territory_end - territory_start); CC_buf[territory_end - territory_start] = '\0'; { /* Look up ll_buf in language_table and CC_buf in country_table. */ range_t language_range; search (language_table, sizeof (language_table) / sizeof (language_table[0]), ll_buf, &language_range); if (language_range.lo < language_range.hi) { range_t country_range; search (country_table, sizeof (country_table) / sizeof (country_table[0]), CC_buf, &country_range); if (country_range.lo < country_range.hi) { size_t i; size_t j; for (i = language_range.lo; i < language_range.hi; i++) for (j = country_range.lo; j < country_range.hi; j++) { /* Concatenate the replacements. */ const char *part1 = language_table[i].english; size_t part1_len = strlen (part1); const char *part2 = country_table[j].english; size_t part2_len = strlen (part2) + 1; char buf[64+64]; if (!(part1_len + 1 + part2_len <= sizeof (buf))) abort (); memcpy (buf, part1, part1_len); buf[part1_len] = '_'; memcpy (buf + part1_len + 1, part2, part2_len); /* Try the concatenated replacements. */ result = setlocale (category, buf); if (result != NULL) return result; } } /* Try omitting the country entirely. This may set a locale corresponding to the wrong country, but is better than failing entirely. */ { size_t i; for (i = language_range.lo; i < language_range.hi; i++) { /* Try only the language replacement. */ result = setlocale (category, language_table[i].english); if (result != NULL) return result; } } } } } } } /* Failed. */ return NULL; } # else # define setlocale_unixlike setlocale # endif # if LC_MESSAGES == 1729 /* The system does not store an LC_MESSAGES locale category. Do it here. */ static char lc_messages_name[64] = "C"; /* Like setlocale, but support also LC_MESSAGES. */ static char * setlocale_single (int category, const char *locale) { if (category == LC_MESSAGES) { if (locale != NULL) { lc_messages_name[sizeof (lc_messages_name) - 1] = '\0'; strncpy (lc_messages_name, locale, sizeof (lc_messages_name) - 1); } return lc_messages_name; } else return setlocale_unixlike (category, locale); } # else # define setlocale_single setlocale_unixlike # endif DLL_EXPORTED char * libintl_setlocale (int category, const char *locale) { if (locale != NULL && locale[0] == '\0') { /* A request to the set the current locale to the default locale. */ if (category == LC_ALL) { /* Set LC_CTYPE first. Then the other categories. */ static int const categories[] = { LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES }; char *saved_locale; const char *base_name; unsigned int i; /* Back up the old locale, in case one of the steps fails. */ saved_locale = setlocale (LC_ALL, NULL); if (saved_locale == NULL) return NULL; saved_locale = strdup (saved_locale); if (saved_locale == NULL) return NULL; /* Set LC_CTYPE category. Set all other categories (except possibly LC_MESSAGES) to the same value in the same call; this is likely to save calls. */ base_name = gl_locale_name_environ (LC_CTYPE, category_to_name (LC_CTYPE)); if (base_name == NULL) base_name = gl_locale_name_default (); if (setlocale_unixlike (LC_ALL, base_name) == NULL) goto fail; # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows, setlocale(LC_ALL,...) may succeed but set the LC_CTYPE category to an invalid value ("C") when it does not support the specified encoding. Report a failure instead. */ if (strchr (base_name, '.') != NULL && strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) goto fail; # endif for (i = 0; i < sizeof (categories) / sizeof (categories[0]); i++) { int cat = categories[i]; const char *name; name = gl_locale_name_environ (cat, category_to_name (cat)); if (name == NULL) name = gl_locale_name_default (); /* If name is the same as base_name, it has already been set through the setlocale call before the loop. */ if (strcmp (name, base_name) != 0 # if LC_MESSAGES == 1729 || cat == LC_MESSAGES # endif ) if (setlocale_single (cat, name) == NULL) goto fail; } /* All steps were successful. */ ++_nl_msg_cat_cntr; free (saved_locale); return setlocale (LC_ALL, NULL); fail: if (saved_locale[0] != '\0') /* don't risk an endless recursion */ setlocale (LC_ALL, saved_locale); free (saved_locale); return NULL; } else { char *result; const char *name = gl_locale_name_environ (category, category_to_name (category)); if (name == NULL) name = gl_locale_name_default (); result = setlocale_single (category, name); if (result != NULL) ++_nl_msg_cat_cntr; return result; } } else { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ if (category == LC_ALL && locale != NULL && strchr (locale, '.') != NULL) { char *saved_locale; /* Back up the old locale. */ saved_locale = setlocale (LC_ALL, NULL); if (saved_locale == NULL) return NULL; saved_locale = strdup (saved_locale); if (saved_locale == NULL) return NULL; if (setlocale_unixlike (LC_ALL, locale) == NULL) { free (saved_locale); return NULL; } /* On native Windows, setlocale(LC_ALL,...) may succeed but set the LC_CTYPE category to an invalid value ("C") when it does not support the specified encoding. Report a failure instead. */ if (strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) { if (saved_locale[0] != '\0') /* don't risk an endless recursion */ setlocale (LC_ALL, saved_locale); free (saved_locale); return NULL; } /* It was really successful. */ ++_nl_msg_cat_cntr; free (saved_locale); return setlocale (LC_ALL, NULL); } else # endif { char *result = setlocale_single (category, locale); if (result != NULL) ++_nl_msg_cat_cntr; return result; } } } # if HAVE_NEWLOCALE DLL_EXPORTED locale_t libintl_newlocale (int category_mask, const char *locale, locale_t base) { if (category_mask != 0 && locale != NULL && locale[0] == '\0') { /* A request to construct a locale_t object that refers to the default locale. */ /* Set LC_CTYPE first. Then the other categories. */ static struct { int cat; int mask; } const categories[] = { { LC_CTYPE, LC_CTYPE_MASK }, { LC_NUMERIC, LC_NUMERIC_MASK }, { LC_TIME, LC_TIME_MASK }, { LC_COLLATE, LC_COLLATE_MASK }, { LC_MONETARY, LC_MONETARY_MASK }, { LC_MESSAGES, LC_MESSAGES_MASK } }; locale_t orig_base = base; if ((LC_ALL_MASK & ~category_mask) == 0) { const char *base_name; unsigned int i; /* Set LC_CTYPE category. Set all other categories (except possibly LC_MESSAGES) to the same value in the same call; this is likely to save calls. */ base_name = gl_locale_name_environ (LC_CTYPE, category_to_name (LC_CTYPE)); if (base_name == NULL) base_name = gl_locale_name_default (); base = newlocale (LC_ALL_MASK, base_name, base); if (base == NULL) return NULL; for (i = 1; i < sizeof (categories) / sizeof (categories[0]); i++) { int category = categories[i].cat; int category_mask = categories[i].mask; const char *name; name = gl_locale_name_environ (category, category_to_name (category)); if (name == NULL) name = gl_locale_name_default (); /* If name is the same as base_name, it has already been set through the setlocale call before the loop. */ if (strcmp (name, base_name) != 0) { locale_t copy = newlocale (category_mask, name, base); if (copy == NULL) goto fail; /* No need to call freelocale (base) if copy != base; the newlocale function already takes care of doing it. */ base = copy; } } } else { unsigned int i; for (i = 0; i < sizeof (categories) / sizeof (categories[0]); i++) { int cat_mask = categories[i].mask; if ((category_mask & cat_mask) != 0) { int cat = categories[i].cat; const char *name; locale_t copy; name = gl_locale_name_environ (cat, category_to_name (cat)); if (name == NULL) name = gl_locale_name_default (); copy = newlocale (cat_mask, name, base); if (copy == NULL) goto fail; /* No need to call freelocale (base) if copy != base; the newlocale function already takes care of doing it. */ base = copy; } } } /* All steps were successful. */ return base; fail: if (base != NULL && orig_base == NULL) { int saved_errno = errno; freelocale (base); errno = saved_errno; } return NULL; } else return newlocale (category_mask, locale, base); } # endif #endif gnupg-1.4.20/intl/lock.c0000644000175000017500000006422612635262326011722 00000000000000/* Locking in multithreaded situations. Copyright (C) 2005-2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ #include #include "lock.h" /* ========================================================================= */ #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK # if !defined PTHREAD_RWLOCK_INITIALIZER int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_rwlock_init (&lock->rwlock, NULL); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_rdlock (&lock->rwlock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_wrlock (&lock->rwlock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_rwlock_unlock (&lock->rwlock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_rwlock_destroy (&lock->rwlock); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_init (&lock->lock, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_readers, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_writers, NULL); if (err != 0) return err; lock->waiting_writers_count = 0; lock->runcount = 0; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow. */ /* POSIX says: "It is implementation-defined whether the calling thread acquires the lock when a writer does not hold the lock and there are writers blocked on the lock." Let's say, no: give the writers a higher priority. */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ err = pthread_cond_signal (&lock->waiting_writers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ err = pthread_cond_broadcast (&lock->waiting_readers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } } return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_destroy (&lock->lock); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_readers); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_writers); if (err != 0) return err; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (lock, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; return 0; } # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (&lock->recmutex, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_recursive_lock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_mutex_lock (&lock->recmutex); } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_mutex_unlock (&lock->recmutex); } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_mutex_destroy (&lock->recmutex); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = pthread_mutex_init (&lock->mutex, NULL); if (err != 0) return err; lock->owner = (pthread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { pthread_t self = pthread_self (); if (lock->owner != self) { int err; err = pthread_mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != pthread_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (pthread_t) 0; return pthread_mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (pthread_t) 0) return EBUSY; return pthread_mutex_destroy (&lock->mutex); } # endif /* -------------------------- gl_once_t datatype -------------------------- */ static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; int glthread_once_singlethreaded (pthread_once_t *once_control) { /* We don't know whether pthread_once_t is an integer type, a floating-point type, a pointer type, or a structure type. */ char *firstbyte = (char *)once_control; if (*firstbyte == *(const char *)&fresh_once) { /* First time use of once_control. Invert the first byte. */ *firstbyte = ~ *(const char *)&fresh_once; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* -------------------------- gl_once_t datatype -------------------------- */ static void glthread_once_call (void *arg) { void (**gl_once_temp_addr) (void) = (void (**) (void)) arg; void (*initfunction) (void) = *gl_once_temp_addr; initfunction (); } int glthread_once_multithreaded (pth_once_t *once_control, void (*initfunction) (void)) { void (*temp) (void) = initfunction; return (!pth_once (once_control, glthread_once_call, &temp) ? errno : 0); } int glthread_once_singlethreaded (pth_once_t *once_control) { /* We know that pth_once_t is an integer type. */ if (*once_control == PTH_ONCE_INIT) { /* First time use of once_control. Invert the marker. */ *once_control = ~ PTH_ONCE_INIT; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* --------------------- gl_recursive_lock_t datatype --------------------- */ int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = mutex_init (&lock->mutex, USYNC_THREAD, NULL); if (err != 0) return err; lock->owner = (thread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { thread_t self = thr_self (); if (lock->owner != self) { int err; err = mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != thr_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (thread_t) 0; return mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (thread_t) 0) return EBUSY; return mutex_destroy (&lock->mutex); } /* -------------------------- gl_once_t datatype -------------------------- */ int glthread_once_multithreaded (gl_once_t *once_control, void (*initfunction) (void)) { if (!once_control->inited) { int err; /* Use the mutex to guarantee that if another thread is already calling the initfunction, this thread waits until it's finished. */ err = mutex_lock (&once_control->mutex); if (err != 0) return err; if (!once_control->inited) { once_control->inited = 1; initfunction (); } return mutex_unlock (&once_control->mutex); } else return 0; } int glthread_once_singlethreaded (gl_once_t *once_control) { /* We know that gl_once_t contains an integer type. */ if (!once_control->inited) { /* First time use of once_control. Invert the marker. */ once_control->inited = ~ 0; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ void glthread_lock_init_func (gl_lock_t *lock) { InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } int glthread_lock_lock_func (gl_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); return 0; } int glthread_lock_unlock_func (gl_lock_t *lock) { if (!lock->guard.done) return EINVAL; LeaveCriticalSection (&lock->lock); return 0; } int glthread_lock_destroy_func (gl_lock_t *lock) { if (!lock->guard.done) return EINVAL; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* In this file, the waitqueues are implemented as circular arrays. */ #define gl_waitqueue_t gl_carray_waitqueue_t static void gl_waitqueue_init (gl_waitqueue_t *wq) { wq->array = NULL; wq->count = 0; wq->alloc = 0; wq->offset = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ static HANDLE gl_waitqueue_add (gl_waitqueue_t *wq) { HANDLE event; unsigned int index; if (wq->count == wq->alloc) { unsigned int new_alloc = 2 * wq->alloc + 1; HANDLE *new_array = (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); if (new_array == NULL) /* No more memory. */ return INVALID_HANDLE_VALUE; /* Now is a good opportunity to rotate the array so that its contents starts at offset 0. */ if (wq->offset > 0) { unsigned int old_count = wq->count; unsigned int old_alloc = wq->alloc; unsigned int old_offset = wq->offset; unsigned int i; if (old_offset + old_count > old_alloc) { unsigned int limit = old_offset + old_count - old_alloc; for (i = 0; i < limit; i++) new_array[old_alloc + i] = new_array[i]; } for (i = 0; i < old_count; i++) new_array[i] = new_array[old_offset + i]; wq->offset = 0; } wq->array = new_array; wq->alloc = new_alloc; } /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) /* No way to allocate an event. */ return INVALID_HANDLE_VALUE; index = wq->offset + wq->count; if (index >= wq->alloc) index -= wq->alloc; wq->array[index] = event; wq->count++; return event; } /* Notifies the first thread from a wait queue and dequeues it. */ static void gl_waitqueue_notify_first (gl_waitqueue_t *wq) { SetEvent (wq->array[wq->offset + 0]); wq->offset++; wq->count--; if (wq->count == 0 || wq->offset == wq->alloc) wq->offset = 0; } /* Notifies all threads from a wait queue and dequeues them all. */ static void gl_waitqueue_notify_all (gl_waitqueue_t *wq) { unsigned int i; for (i = 0; i < wq->count; i++) { unsigned int index = wq->offset + i; if (index >= wq->alloc) index -= wq->alloc; SetEvent (wq->array[index]); } wq->count = 0; wq->offset = 0; } void glthread_rwlock_init_func (gl_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); gl_waitqueue_init (&lock->waiting_readers); gl_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glthread_rwlock_rdlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_rwlock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow. */ if (!(lock->runcount + 1 > 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = gl_waitqueue_add (&lock->waiting_readers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_wrlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_rwlock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ HANDLE event = gl_waitqueue_add (&lock->waiting_writers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_unlock_func (gl_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { LeaveCriticalSection (&lock->lock); return EPERM; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; gl_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; gl_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glthread_rwlock_destroy_func (gl_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; if (lock->runcount != 0) return EBUSY; DeleteCriticalSection (&lock->lock); if (lock->waiting_readers.array != NULL) free (lock->waiting_readers.array); if (lock->waiting_writers.array != NULL) free (lock->waiting_writers.array); lock->guard.done = 0; return 0; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ void glthread_recursive_lock_init_func (gl_recursive_lock_t *lock) { lock->owner = 0; lock->depth = 0; InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } int glthread_recursive_lock_lock_func (gl_recursive_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_recursive_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } { DWORD self = GetCurrentThreadId (); if (lock->owner != self) { EnterCriticalSection (&lock->lock); lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } } return 0; } int glthread_recursive_lock_unlock_func (gl_recursive_lock_t *lock) { if (lock->owner != GetCurrentThreadId ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = 0; LeaveCriticalSection (&lock->lock); } return 0; } int glthread_recursive_lock_destroy_func (gl_recursive_lock_t *lock) { if (lock->owner != 0) return EBUSY; DeleteCriticalSection (&lock->lock); lock->guard.done = 0; return 0; } /* -------------------------- gl_once_t datatype -------------------------- */ void glthread_once_func (gl_once_t *once_control, void (*initfunction) (void)) { if (once_control->inited <= 0) { if (InterlockedIncrement (&once_control->started) == 0) { /* This thread is the first one to come to this once_control. */ InitializeCriticalSection (&once_control->lock); EnterCriticalSection (&once_control->lock); once_control->inited = 0; initfunction (); once_control->inited = 1; LeaveCriticalSection (&once_control->lock); } else { /* Undo last operation. */ InterlockedDecrement (&once_control->started); /* Some other thread has already started the initialization. Yield the CPU while waiting for the other thread to finish initializing and taking the lock. */ while (once_control->inited < 0) Sleep (0); if (once_control->inited <= 0) { /* Take the lock. This blocks until the other thread has finished calling the initfunction. */ EnterCriticalSection (&once_control->lock); LeaveCriticalSection (&once_control->lock); if (!(once_control->inited > 0)) abort (); } } } } #endif /* ========================================================================= */ gnupg-1.4.20/intl/export.h0000644000175000017500000000023512635262326012306 00000000000000 #if @HAVE_VISIBILITY@ && BUILDING_LIBINTL #define LIBINTL_DLL_EXPORTED __attribute__((__visibility__("default"))) #else #define LIBINTL_DLL_EXPORTED #endif gnupg-1.4.20/intl/ref-del.sin0000644000175000017500000000173112635262326012647 00000000000000# Remove this package from a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as published by # the Free Software Foundation; either version 2.1 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see . # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// s/ @PACKAGE@ / / s/^/# Packages using this file:/ } gnupg-1.4.20/intl/printf-args.c0000644000175000017500000001465212635262326013224 00000000000000/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2005-2007 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be defined. STATIC Set to 'static' to declare the function static. */ #ifndef PRINTF_FETCHARGS # include #endif /* Specification. */ #ifndef PRINTF_FETCHARGS # include "printf-args.h" #endif #ifdef STATIC STATIC #endif int PRINTF_FETCHARGS (va_list args, arguments *a) { size_t i; argument *ap; for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) switch (ap->type) { case TYPE_SCHAR: ap->a.a_schar = va_arg (args, /*signed char*/ int); break; case TYPE_UCHAR: ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); break; case TYPE_SHORT: ap->a.a_short = va_arg (args, /*short*/ int); break; case TYPE_USHORT: ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); break; case TYPE_INT: ap->a.a_int = va_arg (args, int); break; case TYPE_UINT: ap->a.a_uint = va_arg (args, unsigned int); break; case TYPE_LONGINT: ap->a.a_longint = va_arg (args, long int); break; case TYPE_ULONGINT: ap->a.a_ulongint = va_arg (args, unsigned long int); break; #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: ap->a.a_longlongint = va_arg (args, long long int); break; case TYPE_ULONGLONGINT: ap->a.a_ulonglongint = va_arg (args, unsigned long long int); break; #endif case TYPE_DOUBLE: ap->a.a_double = va_arg (args, double); break; case TYPE_LONGDOUBLE: ap->a.a_longdouble = va_arg (args, long double); break; case TYPE_CHAR: ap->a.a_char = va_arg (args, int); break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by default argument promotions", this is not the case in mingw32, where wint_t is 'unsigned short'. */ ap->a.a_wide_char = (sizeof (wint_t) < sizeof (int) ? va_arg (args, int) : va_arg (args, wint_t)); break; #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); /* A null pointer is an invalid argument for "%s", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_string == NULL) ap->a.a_string = "(NULL)"; break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); /* A null pointer is an invalid argument for "%ls", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_wide_string == NULL) { static const wchar_t wide_null_string[] = { (wchar_t)'(', (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', (wchar_t)')', (wchar_t)0 }; ap->a.a_wide_string = wide_null_string; } break; #endif case TYPE_POINTER: ap->a.a_pointer = va_arg (args, void *); break; case TYPE_COUNT_SCHAR_POINTER: ap->a.a_count_schar_pointer = va_arg (args, signed char *); break; case TYPE_COUNT_SHORT_POINTER: ap->a.a_count_short_pointer = va_arg (args, short *); break; case TYPE_COUNT_INT_POINTER: ap->a.a_count_int_pointer = va_arg (args, int *); break; case TYPE_COUNT_LONGINT_POINTER: ap->a.a_count_longint_pointer = va_arg (args, long int *); break; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ case TYPE_U8_STRING: ap->a.a_u8_string = va_arg (args, const uint8_t *); /* A null pointer is an invalid argument for "%U", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u8_string == NULL) { static const uint8_t u8_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u8_string = u8_null_string; } break; case TYPE_U16_STRING: ap->a.a_u16_string = va_arg (args, const uint16_t *); /* A null pointer is an invalid argument for "%lU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u16_string == NULL) { static const uint16_t u16_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u16_string = u16_null_string; } break; case TYPE_U32_STRING: ap->a.a_u32_string = va_arg (args, const uint32_t *); /* A null pointer is an invalid argument for "%llU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u32_string == NULL) { static const uint32_t u32_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u32_string = u32_null_string; } break; #endif default: /* Unknown type. */ return -1; } return 0; } gnupg-1.4.20/intl/printf-args.h0000644000175000017500000000757212635262326013234 00000000000000/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2006-2007, 2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _PRINTF_ARGS_H #define _PRINTF_ARGS_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be declared. STATIC Set to 'static' to declare the function static. */ /* Default parameters. */ #ifndef PRINTF_FETCHARGS # define PRINTF_FETCHARGS printf_fetchargs #endif /* Get size_t. */ #include /* Get wchar_t. */ #if HAVE_WCHAR_T # include #endif /* Get wint_t. */ #if HAVE_WINT_T # include #endif /* Get va_list. */ #include /* Argument types */ typedef enum { TYPE_NONE, TYPE_SCHAR, TYPE_UCHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, TYPE_LONGINT, TYPE_ULONGINT, #if HAVE_LONG_LONG_INT TYPE_LONGLONGINT, TYPE_ULONGLONGINT, #endif TYPE_DOUBLE, TYPE_LONGDOUBLE, TYPE_CHAR, #if HAVE_WINT_T TYPE_WIDE_CHAR, #endif TYPE_STRING, #if HAVE_WCHAR_T TYPE_WIDE_STRING, #endif TYPE_POINTER, TYPE_COUNT_SCHAR_POINTER, TYPE_COUNT_SHORT_POINTER, TYPE_COUNT_INT_POINTER, TYPE_COUNT_LONGINT_POINTER #if HAVE_LONG_LONG_INT , TYPE_COUNT_LONGLONGINT_POINTER #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ , TYPE_U8_STRING , TYPE_U16_STRING , TYPE_U32_STRING #endif } arg_type; /* Polymorphic argument */ typedef struct { arg_type type; union { signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_longint; unsigned long int a_ulongint; #if HAVE_LONG_LONG_INT long long int a_longlongint; unsigned long long int a_ulonglongint; #endif float a_float; double a_double; long double a_longdouble; int a_char; #if HAVE_WINT_T wint_t a_wide_char; #endif const char* a_string; #if HAVE_WCHAR_T const wchar_t* a_wide_string; #endif void* a_pointer; signed char * a_count_schar_pointer; short * a_count_short_pointer; int * a_count_int_pointer; long int * a_count_longint_pointer; #if HAVE_LONG_LONG_INT long long int * a_count_longlongint_pointer; #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ const uint8_t * a_u8_string; const uint16_t * a_u16_string; const uint32_t * a_u32_string; #endif } a; } argument; /* Number of directly allocated arguments (no malloc() needed). */ #define N_DIRECT_ALLOC_ARGUMENTS 7 typedef struct { size_t count; argument *arg; argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; } arguments; /* Fetch the arguments, putting them into a. */ #ifdef STATIC STATIC #else extern #endif int PRINTF_FETCHARGS (va_list args, arguments *a); #endif /* _PRINTF_ARGS_H */ gnupg-1.4.20/intl/intl-exports.c0000644000175000017500000000334312635262326013433 00000000000000/* List of exported symbols of libintl on Cygwin. Copyright (C) 2006 Free Software Foundation, Inc. Written by Bruno Haible , 2006. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* IMP(x) is a symbol that contains the address of x. */ #if USER_LABEL_PREFIX_UNDERSCORE # define IMP(x) _imp__##x #else # define IMP(x) __imp_##x #endif /* Ensure that the variable x is exported from the library, and that a pseudo-variable IMP(x) is available. */ #define VARIABLE(x) \ /* Export x without redefining x. This code was found by compiling a \ snippet: \ extern __declspec(dllexport) int x; int x = 42; */ \ asm (".section .drectve\n"); \ asm (".ascii \" -export:" #x ",data\"\n"); \ asm (".data\n"); \ /* Allocate a pseudo-variable IMP(x). */ \ extern int x; \ void * IMP(x) = &x; VARIABLE(libintl_version) gnupg-1.4.20/intl/version.c0000644000175000017500000000163412635262326012451 00000000000000/* libintl library version. Copyright (C) 2005 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include "libgnuintl.h" /* Version number: (major<<16) + (minor<<8) + subminor */ int libintl_version = LIBINTL_VERSION; gnupg-1.4.20/intl/bindtextdom.c0000644000175000017500000002124512635262326013305 00000000000000/* Implementation of the bindtextdomain(3) function Copyright (C) 1995-1998, 2000-2003, 2005-2006, 2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define __libc_rwlock_define # define gl_rwlock_wrlock __libc_rwlock_wrlock # define gl_rwlock_unlock __libc_rwlock_unlock #else # include "lock.h" #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ /* Lock variable to protect the global data in the gettext implementation. */ gl_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain # define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define BINDTEXTDOMAIN libintl_bindtextdomain # define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset #endif /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP to be used for the DOMAINNAME message catalog. If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not modified, only the current value is returned. If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither modified nor returned. */ static void set_binding_values (const char *domainname, const char **dirnamep, const char **codesetp) { struct binding *binding; int modified; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') { if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; return; } gl_rwlock_wrlock (_nl_state_lock); modified = 0; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding != NULL) { if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The current binding has be to returned. */ *dirnamep = binding->dirname; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->dirname; if (strcmp (dirname, result) != 0) { if (strcmp (dirname, _nl_default_dirname) == 0) result = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, dirname, len); #endif } if (__builtin_expect (result != NULL, 1)) { if (binding->dirname != _nl_default_dirname) free (binding->dirname); binding->dirname = result; modified = 1; } } *dirnamep = result; } } if (codesetp) { const char *codeset = *codesetp; if (codeset == NULL) /* The current binding has be to returned. */ *codesetp = binding->codeset; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->codeset; if (result == NULL || strcmp (codeset, result) != 0) { #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, codeset, len); #endif if (__builtin_expect (result != NULL, 1)) { free (binding->codeset); binding->codeset = result; modified = 1; } } *codesetp = result; } } } else if ((dirnamep == NULL || *dirnamep == NULL) && (codesetp == NULL || *codesetp == NULL)) { /* Simply return the default values. */ if (dirnamep) *dirnamep = _nl_default_dirname; if (codesetp) *codesetp = NULL; } else { /* We have to create a new binding. */ size_t len = strlen (domainname) + 1; struct binding *new_binding = (struct binding *) malloc (offsetof (struct binding, domainname) + len); if (__builtin_expect (new_binding == NULL, 0)) goto failed; memcpy (new_binding->domainname, domainname, len); if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The default value. */ dirname = _nl_default_dirname; else { if (strcmp (dirname, _nl_default_dirname) == 0) dirname = _nl_default_dirname; else { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; memcpy (result, dirname, len); #endif dirname = result; } } *dirnamep = dirname; new_binding->dirname = (char *) dirname; } else /* The default value. */ new_binding->dirname = (char *) _nl_default_dirname; if (codesetp) { const char *codeset = *codesetp; if (codeset != NULL) { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; memcpy (result, codeset, len); #endif codeset = result; } *codesetp = codeset; new_binding->codeset = (char *) codeset; } else new_binding->codeset = NULL; /* Now enqueue it. */ if (_nl_domain_bindings == NULL || strcmp (domainname, _nl_domain_bindings->domainname) < 0) { new_binding->next = _nl_domain_bindings; _nl_domain_bindings = new_binding; } else { binding = _nl_domain_bindings; while (binding->next != NULL && strcmp (domainname, binding->next->domainname) > 0) binding = binding->next; new_binding->next = binding->next; binding->next = new_binding; } modified = 1; /* Here we deal with memory allocation failures. */ if (0) { failed_codeset: if (new_binding->dirname != _nl_default_dirname) free (new_binding->dirname); failed_dirname: free (new_binding); failed: if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; } } /* If we modified any binding, we flush the caches. */ if (modified) ++_nl_msg_cat_cntr; gl_rwlock_unlock (_nl_state_lock); } /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ char * BINDTEXTDOMAIN (const char *domainname, const char *dirname) { set_binding_values (domainname, &dirname, NULL); return (char *) dirname; } /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ char * BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset) { set_binding_values (domainname, NULL, &codeset); return (char *) codeset; } #ifdef _LIBC /* Aliases for function names in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset); #endif gnupg-1.4.20/intl/libgnuintl.in.h0000644000175000017500000004063012635262326013544 00000000000000/* Message catalogs for internationalization. Copyright (C) 1995-1997, 2000-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef _LIBINTL_H #define _LIBINTL_H 1 #include #if (defined __APPLE__ && defined __MACH__) && @HAVE_NEWLOCALE@ # include #endif /* The LC_MESSAGES locale category is the category used by the functions gettext() and dgettext(). It is specified in POSIX, but not in ANSI C. On systems that don't define it, use an arbitrary value instead. On Solaris, defines __LOCALE_H (or _LOCALE_H in Solaris 2.5) then includes (i.e. this file!) and then only defines LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES in this case. */ #if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun)) # define LC_MESSAGES 1729 #endif /* We define an additional symbol to signal that we use the GNU implementation of gettext. */ #define __USE_GNU_GETTEXT 1 /* Provide information about the supported file formats. Returns the maximum minor revision number supported for a given major revision. */ #define __GNU_GETTEXT_SUPPORTED_REVISION(major) \ ((major) == 0 || (major) == 1 ? 1 : -1) /* Resolve a platform specific conflict on DJGPP. GNU gettext takes precedence over _conio_gettext. */ #ifdef __DJGPP__ # undef gettext #endif #ifdef __cplusplus extern "C" { #endif /* Version number: (major<<16) + (minor<<8) + subminor */ #define LIBINTL_VERSION 0x001303 extern int libintl_version; /* We redirect the functions to those prefixed with "libintl_". This is necessary, because some systems define gettext/textdomain/... in the C library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer). If we used the unprefixed names, there would be cases where the definition in the C library would override the one in the libintl.so shared library. Recall that on ELF systems, the symbols are looked up in the following order: 1. in the executable, 2. in the shared libraries specified on the link command line, in order, 3. in the dependencies of the shared libraries specified on the link command line, 4. in the dlopen()ed shared libraries, in the order in which they were dlopen()ed. The definition in the C library would override the one in libintl.so if either * -lc is given on the link command line and -lintl isn't, or * -lc is given on the link command line before -lintl, or * libintl.so is a dependency of a dlopen()ed shared library but not linked to the executable at link time. Since Solaris gettext() behaves differently than GNU gettext(), this would be unacceptable. The redirection happens by default through macros in C, so that &gettext is independent of the compilation unit, but through inline functions in C++, in order not to interfere with the name mangling of class fields or class methods called 'gettext'. */ /* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS. If he doesn't, we choose the method. A third possible method is _INTL_REDIRECT_ASM, supported only by GCC. */ #if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS) # if defined __GNUC__ && __GNUC__ >= 2 && !(defined __APPLE_CC__ && __APPLE_CC__ > 1) && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus) # define _INTL_REDIRECT_ASM # else # ifdef __cplusplus # define _INTL_REDIRECT_INLINE # else # define _INTL_REDIRECT_MACROS # endif # endif #endif /* Auxiliary macros. */ #ifdef _INTL_REDIRECT_ASM # define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname)) # define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring # define _INTL_STRINGIFY(prefix) #prefix #else # define _INTL_ASM(cname) #endif /* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return its n-th argument literally. This enables GCC to warn for example about printf (gettext ("foo %y")). */ #if defined __GNUC__ && __GNUC__ >= 3 && !(defined __APPLE_CC__ && __APPLE_CC__ > 1 && defined __cplusplus) # define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n))) #else # define _INTL_MAY_RETURN_STRING_ARG(n) #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_gettext (const char *__msgid) _INTL_MAY_RETURN_STRING_ARG (1); static inline char *gettext (const char *__msgid) { return libintl_gettext (__msgid); } #else #ifdef _INTL_REDIRECT_MACROS # define gettext libintl_gettext #endif extern char *gettext (const char *__msgid) _INTL_ASM (libintl_gettext) _INTL_MAY_RETURN_STRING_ARG (1); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dgettext (const char *__domainname, const char *__msgid) _INTL_MAY_RETURN_STRING_ARG (2); static inline char *dgettext (const char *__domainname, const char *__msgid) { return libintl_dgettext (__domainname, __msgid); } #else #ifdef _INTL_REDIRECT_MACROS # define dgettext libintl_dgettext #endif extern char *dgettext (const char *__domainname, const char *__msgid) _INTL_ASM (libintl_dgettext) _INTL_MAY_RETURN_STRING_ARG (2); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcgettext (const char *__domainname, const char *__msgid, int __category) _INTL_MAY_RETURN_STRING_ARG (2); static inline char *dcgettext (const char *__domainname, const char *__msgid, int __category) { return libintl_dcgettext (__domainname, __msgid, __category); } #else #ifdef _INTL_REDIRECT_MACROS # define dcgettext libintl_dcgettext #endif extern char *dcgettext (const char *__domainname, const char *__msgid, int __category) _INTL_ASM (libintl_dcgettext) _INTL_MAY_RETURN_STRING_ARG (2); #endif /* Similar to 'gettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2); static inline char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) { return libintl_ngettext (__msgid1, __msgid2, __n); } #else #ifdef _INTL_REDIRECT_MACROS # define ngettext libintl_ngettext #endif extern char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_ASM (libintl_ngettext) _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2); #endif /* Similar to 'dgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); static inline char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) { return libintl_dngettext (__domainname, __msgid1, __msgid2, __n); } #else #ifdef _INTL_REDIRECT_MACROS # define dngettext libintl_dngettext #endif extern char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_ASM (libintl_dngettext) _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); #endif /* Similar to 'dcgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); static inline char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) { return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category); } #else #ifdef _INTL_REDIRECT_MACROS # define dcngettext libintl_dcngettext #endif extern char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) _INTL_ASM (libintl_dcngettext) _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); #endif #ifndef IN_LIBGLOCALE /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_textdomain (const char *__domainname); static inline char *textdomain (const char *__domainname) { return libintl_textdomain (__domainname); } #else #ifdef _INTL_REDIRECT_MACROS # define textdomain libintl_textdomain #endif extern char *textdomain (const char *__domainname) _INTL_ASM (libintl_textdomain); #endif /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_bindtextdomain (const char *__domainname, const char *__dirname); static inline char *bindtextdomain (const char *__domainname, const char *__dirname) { return libintl_bindtextdomain (__domainname, __dirname); } #else #ifdef _INTL_REDIRECT_MACROS # define bindtextdomain libintl_bindtextdomain #endif extern char *bindtextdomain (const char *__domainname, const char *__dirname) _INTL_ASM (libintl_bindtextdomain); #endif /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_bind_textdomain_codeset (const char *__domainname, const char *__codeset); static inline char *bind_textdomain_codeset (const char *__domainname, const char *__codeset) { return libintl_bind_textdomain_codeset (__domainname, __codeset); } #else #ifdef _INTL_REDIRECT_MACROS # define bind_textdomain_codeset libintl_bind_textdomain_codeset #endif extern char *bind_textdomain_codeset (const char *__domainname, const char *__codeset) _INTL_ASM (libintl_bind_textdomain_codeset); #endif #endif /* IN_LIBGLOCALE */ /* Support for format strings with positions in *printf(), following the POSIX/XSI specification. Note: These replacements for the *printf() functions are visible only in source files that #include or #include "gettext.h". Packages that use *printf() in source files that don't refer to _() or gettext() but for which the format string could be the return value of _() or gettext() need to add this #include. Oh well. */ #if !@HAVE_POSIX_PRINTF@ #include #include /* Get va_list. */ #if (defined __STDC__ && __STDC__) || defined __cplusplus || defined _MSC_VER # include #else # include #endif #if !(defined fprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef fprintf #define fprintf libintl_fprintf extern int fprintf (FILE *, const char *, ...); #endif #if !(defined vfprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef vfprintf #define vfprintf libintl_vfprintf extern int vfprintf (FILE *, const char *, va_list); #endif #if !(defined printf && defined _GL_STDIO_H) /* don't override gnulib */ #undef printf #if defined __NetBSD__ || defined __BEOS__ || defined __CYGWIN__ || defined __MINGW32__ /* Don't break __attribute__((format(printf,M,N))). This redefinition is only possible because the libc in NetBSD, Cygwin, mingw does not have a function __printf__. Alternatively, we could have done this redirection only when compiling with __GNUC__, together with a symbol redirection: extern int printf (const char *, ...) __asm__ (#__USER_LABEL_PREFIX__ "libintl_printf"); But doing it now would introduce a binary incompatibility with already distributed versions of libintl on these systems. */ # define libintl_printf __printf__ #endif #define printf libintl_printf extern int printf (const char *, ...); #endif #if !(defined vprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef vprintf #define vprintf libintl_vprintf extern int vprintf (const char *, va_list); #endif #if !(defined sprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef sprintf #define sprintf libintl_sprintf extern int sprintf (char *, const char *, ...); #endif #if !(defined vsprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef vsprintf #define vsprintf libintl_vsprintf extern int vsprintf (char *, const char *, va_list); #endif #if @HAVE_SNPRINTF@ #if !(defined snprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef snprintf #define snprintf libintl_snprintf extern int snprintf (char *, size_t, const char *, ...); #endif #if !(defined vsnprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef vsnprintf #define vsnprintf libintl_vsnprintf extern int vsnprintf (char *, size_t, const char *, va_list); #endif #endif #if @HAVE_ASPRINTF@ #if !(defined asprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef asprintf #define asprintf libintl_asprintf extern int asprintf (char **, const char *, ...); #endif #if !(defined vasprintf && defined _GL_STDIO_H) /* don't override gnulib */ #undef vasprintf #define vasprintf libintl_vasprintf extern int vasprintf (char **, const char *, va_list); #endif #endif #if @HAVE_WPRINTF@ #undef fwprintf #define fwprintf libintl_fwprintf extern int fwprintf (FILE *, const wchar_t *, ...); #undef vfwprintf #define vfwprintf libintl_vfwprintf extern int vfwprintf (FILE *, const wchar_t *, va_list); #undef wprintf #define wprintf libintl_wprintf extern int wprintf (const wchar_t *, ...); #undef vwprintf #define vwprintf libintl_vwprintf extern int vwprintf (const wchar_t *, va_list); #undef swprintf #define swprintf libintl_swprintf extern int swprintf (wchar_t *, size_t, const wchar_t *, ...); #undef vswprintf #define vswprintf libintl_vswprintf extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list); #endif #endif /* Support for the locale chosen by the user. */ #if (defined __APPLE__ && defined __MACH__) || defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ #ifndef GNULIB_defined_setlocale /* don't override gnulib */ #undef setlocale #define setlocale libintl_setlocale extern char *setlocale (int, const char *); #endif #if @HAVE_NEWLOCALE@ #undef newlocale #define newlocale libintl_newlocale extern locale_t newlocale (int, const char *, locale_t); #endif #endif /* Support for relocatable packages. */ /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ #define libintl_set_relocation_prefix libintl_set_relocation_prefix extern void libintl_set_relocation_prefix (const char *orig_prefix, const char *curr_prefix); #ifdef __cplusplus } #endif #endif /* libintl.h */ gnupg-1.4.20/intl/dcngettext.c0000644000175000017500000000337712635262326013143 00000000000000/* Implementation of the dcngettext(3) function. Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCNGETTEXT __dcngettext # define DCIGETTEXT __dcigettext #else # define DCNGETTEXT libintl_dcngettext # define DCIGETTEXT libintl_dcigettext #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCNGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n, int category) { return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcngettext, dcngettext); #endif gnupg-1.4.20/intl/printf-parse.c0000644000175000017500000005324312635262326013401 00000000000000/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003, 2006-2008, 2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* This file can be parametrized with the following macros: CHAR_T The element type of the format string. CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. DIRECTIVE Structure denoting a format directive. Depends on CHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on CHAR_T. PRINTF_PARSE Function that parses a format string. Depends on CHAR_T. STATIC Set to 'static' to declare the function static. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ #ifndef PRINTF_PARSE # include #endif /* Specification. */ #ifndef PRINTF_PARSE # include "printf-parse.h" #endif /* Default parameters. */ #ifndef PRINTF_PARSE # define PRINTF_PARSE printf_parse # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives #endif /* Get size_t, NULL. */ #include /* Get intmax_t. */ #if defined IN_LIBINTL || defined IN_LIBASPRINTF # if HAVE_STDINT_H_WITH_UINTMAX # include # endif # if HAVE_INTTYPES_H_WITH_UINTMAX # include # endif #else # include #endif /* malloc(), realloc(), free(). */ #include /* memcpy(). */ #include /* errno. */ #include /* Checked size_t computations. */ #include "xsize.h" #if CHAR_T_ONLY_ASCII /* c_isascii(). */ # include "c-ctype.h" #endif #ifdef STATIC STATIC #endif int PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) { const CHAR_T *cp = format; /* pointer into format */ size_t arg_posn = 0; /* number of regular arguments consumed */ size_t d_allocated; /* allocated elements of d->dir */ size_t a_allocated; /* allocated elements of a->arg */ size_t max_width_length = 0; size_t max_precision_length = 0; d->count = 0; d_allocated = N_DIRECT_ALLOC_DIRECTIVES; d->dir = d->direct_alloc_dir; a->count = 0; a_allocated = N_DIRECT_ALLOC_ARGUMENTS; a->arg = a->direct_alloc_arg; #define REGISTER_ARG(_index_,_type_) \ { \ size_t n = (_index_); \ if (n >= a_allocated) \ { \ size_t memory_size; \ argument *memory; \ \ a_allocated = xtimes (a_allocated, 2); \ if (a_allocated <= n) \ a_allocated = xsum (n, 1); \ memory_size = xtimes (a_allocated, sizeof (argument)); \ if (size_overflow_p (memory_size)) \ /* Overflow, would lead to out of memory. */ \ goto out_of_memory; \ memory = (argument *) (a->arg != a->direct_alloc_arg \ ? realloc (a->arg, memory_size) \ : malloc (memory_size)); \ if (memory == NULL) \ /* Out of memory. */ \ goto out_of_memory; \ if (a->arg == a->direct_alloc_arg) \ memcpy (memory, a->arg, a->count * sizeof (argument)); \ a->arg = memory; \ } \ while (a->count <= n) \ a->arg[a->count++].type = TYPE_NONE; \ if (a->arg[n].type == TYPE_NONE) \ a->arg[n].type = (_type_); \ else if (a->arg[n].type != (_type_)) \ /* Ambiguous type for positional argument. */ \ goto error; \ } while (*cp != '\0') { CHAR_T c = *cp++; if (c == '%') { size_t arg_index = ARG_NONE; DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ /* Initialize the next directive. */ dp->dir_start = cp - 1; dp->flags = 0; dp->width_start = NULL; dp->width_end = NULL; dp->width_arg_index = ARG_NONE; dp->precision_start = NULL; dp->precision_end = NULL; dp->precision_arg_index = ARG_NONE; dp->arg_index = ARG_NONE; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; arg_index = n - 1; cp = np + 1; } } /* Read the flags. */ for (;;) { if (*cp == '\'') { dp->flags |= FLAG_GROUP; cp++; } else if (*cp == '-') { dp->flags |= FLAG_LEFT; cp++; } else if (*cp == '+') { dp->flags |= FLAG_SHOWSIGN; cp++; } else if (*cp == ' ') { dp->flags |= FLAG_SPACE; cp++; } else if (*cp == '#') { dp->flags |= FLAG_ALT; cp++; } else if (*cp == '0') { dp->flags |= FLAG_ZERO; cp++; } #if __GLIBC__ >= 2 && !defined __UCLIBC__ else if (*cp == 'I') { dp->flags |= FLAG_LOCALIZED; cp++; } #endif else break; } /* Parse the field width. */ if (*cp == '*') { dp->width_start = cp; cp++; dp->width_end = cp; if (max_width_length < 1) max_width_length = 1; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->width_arg_index = n - 1; cp = np + 1; } } if (dp->width_arg_index == ARG_NONE) { dp->width_arg_index = arg_posn++; if (dp->width_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->width_arg_index, TYPE_INT); } else if (*cp >= '0' && *cp <= '9') { size_t width_length; dp->width_start = cp; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->width_end = cp; width_length = dp->width_end - dp->width_start; if (max_width_length < width_length) max_width_length = width_length; } /* Parse the precision. */ if (*cp == '.') { cp++; if (*cp == '*') { dp->precision_start = cp - 1; cp++; dp->precision_end = cp; if (max_precision_length < 2) max_precision_length = 2; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->precision_arg_index = n - 1; cp = np + 1; } } if (dp->precision_arg_index == ARG_NONE) { dp->precision_arg_index = arg_posn++; if (dp->precision_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->precision_arg_index, TYPE_INT); } else { size_t precision_length; dp->precision_start = cp - 1; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->precision_end = cp; precision_length = dp->precision_end - dp->precision_start; if (max_precision_length < precision_length) max_precision_length = precision_length; } } { arg_type type; /* Parse argument type/size specifiers. */ { int flags = 0; for (;;) { if (*cp == 'h') { flags |= (1 << (flags & 1)); cp++; } else if (*cp == 'L') { flags |= 4; cp++; } else if (*cp == 'l') { flags += 8; cp++; } else if (*cp == 'j') { if (sizeof (intmax_t) > sizeof (long)) { /* intmax_t = long long */ flags += 16; } else if (sizeof (intmax_t) > sizeof (int)) { /* intmax_t = long */ flags += 8; } cp++; } else if (*cp == 'z' || *cp == 'Z') { /* 'z' is standardized in ISO C 99, but glibc uses 'Z' because the warning facility in gcc-2.95.2 understands only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ if (sizeof (size_t) > sizeof (long)) { /* size_t = long long */ flags += 16; } else if (sizeof (size_t) > sizeof (int)) { /* size_t = long */ flags += 8; } cp++; } else if (*cp == 't') { if (sizeof (ptrdiff_t) > sizeof (long)) { /* ptrdiff_t = long long */ flags += 16; } else if (sizeof (ptrdiff_t) > sizeof (int)) { /* ptrdiff_t = long */ flags += 8; } cp++; } #if defined __APPLE__ && defined __MACH__ /* On MacOS X 10.3, PRIdMAX is defined as "qd". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'q') { if (64 / 8 > sizeof (long)) { /* int64_t = long long */ flags += 16; } else { /* int64_t = long */ flags += 8; } cp++; } #endif #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Win32, PRIdMAX is defined as "I64d". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') { if (64 / 8 > sizeof (long)) { /* __int64 = long long */ flags += 16; } else { /* __int64 = long */ flags += 8; } cp += 3; } #endif else break; } /* Read the conversion character. */ c = *cp++; switch (c) { case 'd': case 'i': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_LONGLONGINT; else #endif /* If 'long long' exists and is the same as 'long', we parse "lld" into TYPE_LONGINT. */ if (flags >= 8) type = TYPE_LONGINT; else if (flags & 2) type = TYPE_SCHAR; else if (flags & 1) type = TYPE_SHORT; else type = TYPE_INT; break; case 'o': case 'u': case 'x': case 'X': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_ULONGLONGINT; else #endif /* If 'unsigned long long' exists and is the same as 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ if (flags >= 8) type = TYPE_ULONGINT; else if (flags & 2) type = TYPE_UCHAR; else if (flags & 1) type = TYPE_USHORT; else type = TYPE_UINT; break; case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': if (flags >= 16 || (flags & 4)) type = TYPE_LONGDOUBLE; else type = TYPE_DOUBLE; break; case 'c': if (flags >= 8) #if HAVE_WINT_T type = TYPE_WIDE_CHAR; #else goto error; #endif else type = TYPE_CHAR; break; #if HAVE_WINT_T case 'C': type = TYPE_WIDE_CHAR; c = 'c'; break; #endif case 's': if (flags >= 8) #if HAVE_WCHAR_T type = TYPE_WIDE_STRING; #else goto error; #endif else type = TYPE_STRING; break; #if HAVE_WCHAR_T case 'S': type = TYPE_WIDE_STRING; c = 's'; break; #endif case 'p': type = TYPE_POINTER; break; case 'n': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_COUNT_LONGLONGINT_POINTER; else #endif /* If 'long long' exists and is the same as 'long', we parse "lln" into TYPE_COUNT_LONGINT_POINTER. */ if (flags >= 8) type = TYPE_COUNT_LONGINT_POINTER; else if (flags & 2) type = TYPE_COUNT_SCHAR_POINTER; else if (flags & 1) type = TYPE_COUNT_SHORT_POINTER; else type = TYPE_COUNT_INT_POINTER; break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case 'U': if (flags >= 16) type = TYPE_U32_STRING; else if (flags >= 8) type = TYPE_U16_STRING; else type = TYPE_U8_STRING; break; #endif case '%': type = TYPE_NONE; break; default: /* Unknown conversion character. */ goto error; } } if (type != TYPE_NONE) { dp->arg_index = arg_index; if (dp->arg_index == ARG_NONE) { dp->arg_index = arg_posn++; if (dp->arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->arg_index, type); } dp->conversion = c; dp->dir_end = cp; } d->count++; if (d->count >= d_allocated) { size_t memory_size; DIRECTIVE *memory; d_allocated = xtimes (d_allocated, 2); memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ goto out_of_memory; memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir ? realloc (d->dir, memory_size) : malloc (memory_size)); if (memory == NULL) /* Out of memory. */ goto out_of_memory; if (d->dir == d->direct_alloc_dir) memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); d->dir = memory; } } #if CHAR_T_ONLY_ASCII else if (!c_isascii (c)) { /* Non-ASCII character. Not supported. */ goto error; } #endif } d->dir[d->count].dir_start = cp; d->max_width_length = max_width_length; d->max_precision_length = max_precision_length; return 0; error: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = EINVAL; return -1; out_of_memory: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = ENOMEM; return -1; } #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T_ONLY_ASCII #undef CHAR_T gnupg-1.4.20/intl/dgettext.c0000644000175000017500000000327412635262326012616 00000000000000/* Implementation of the dgettext(3) function. Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DGETTEXT __dgettext # define DCGETTEXT INTUSE(__dcgettext) #else # define DGETTEXT libintl_dgettext # define DCGETTEXT libintl_dcgettext #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale. */ char * DGETTEXT (const char *domainname, const char *msgid) { return DCGETTEXT (domainname, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dgettext, dgettext); #endif gnupg-1.4.20/intl/hash-string.h0000644000175000017500000000247112635262326013220 00000000000000/* Description of GNU message catalog format: string hashing function. Copyright (C) 1995, 1997-1998, 2000-2003, 2005 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* @@ end of prolog @@ */ /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 #ifndef _LIBC # ifdef IN_LIBINTL # define __hash_string libintl_hash_string # else # define __hash_string hash_string # endif #endif /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ extern unsigned long int __hash_string (const char *str_param); gnupg-1.4.20/intl/vasnprintf.c0000644000175000017500000066411312635262326013165 00000000000000/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ /* This file can be parametrized with the following macros: VASNPRINTF The name of the function being defined. FCHAR_T The element type of the format string. DCHAR_T The element type of the destination (result) string. FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. MUST be set if FCHAR_T and DCHAR_T are not the same type. DIRECTIVE Structure denoting a format directive. Depends on FCHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on FCHAR_T. PRINTF_PARSE Function that parses a format string. Depends on FCHAR_T. DCHAR_CPY memcpy like function for DCHAR_T[] arrays. DCHAR_SET memset like function for DCHAR_T[] arrays. DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. SNPRINTF The system's snprintf (or similar) function. This may be either snprintf or swprintf. TCHAR_T The element type of the argument and result string of the said SNPRINTF function. This may be either char or wchar_t. The code exploits that sizeof (TCHAR_T) | sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ /* Tell glibc's to provide a prototype for snprintf(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifndef VASNPRINTF # include #endif #ifndef IN_LIBINTL # include #endif /* Specification. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "vasnwprintf.h" # else # include "vasnprintf.h" # endif #endif #include /* localeconv() */ #include /* snprintf(), sprintf() */ #include /* abort(), malloc(), realloc(), free() */ #include /* memcpy(), strlen() */ #include /* errno */ #include /* CHAR_BIT */ #include /* DBL_MAX_EXP, LDBL_MAX_EXP */ #if HAVE_NL_LANGINFO # include #endif #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "wprintf-parse.h" # else # include "printf-parse.h" # endif #endif /* Checked size_t computations. */ #include "xsize.h" #include "verify.h" #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "float+.h" #endif #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL # include # include "isnand-nolibm.h" #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "isnanl-nolibm.h" # include "fpucw.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL # include # include "isnand-nolibm.h" # include "printf-frexp.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "isnanl-nolibm.h" # include "printf-frexpl.h" # include "fpucw.h" #endif /* Default parameters. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # define VASNPRINTF vasnwprintf # define FCHAR_T wchar_t # define DCHAR_T wchar_t # define TCHAR_T wchar_t # define DCHAR_IS_TCHAR 1 # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives # define PRINTF_PARSE wprintf_parse # define DCHAR_CPY wmemcpy # define DCHAR_SET wmemset # else # define VASNPRINTF vasnprintf # define FCHAR_T char # define DCHAR_T char # define TCHAR_T char # define DCHAR_IS_TCHAR 1 # define DIRECTIVE char_directive # define DIRECTIVES char_directives # define PRINTF_PARSE printf_parse # define DCHAR_CPY memcpy # define DCHAR_SET memset # endif #endif #if WIDE_CHAR_VERSION /* TCHAR_T is wchar_t. */ # define USE_SNPRINTF 1 # if HAVE_DECL__SNWPRINTF /* On Windows, the function swprintf() has a different signature than on Unix; we use the function _snwprintf() or - on mingw - snwprintf() instead. The mingw function snwprintf() has fewer bugs than the MSVCRT function _snwprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snwprintf # else # define SNPRINTF _snwprintf # endif # else /* Unix. */ # define SNPRINTF swprintf # endif #else /* TCHAR_T is char. */ /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. But don't use it on BeOS, since BeOS snprintf produces no output if the size argument is >= 0x3000000. Also don't use it on Linux libc5, since there snprintf with size = 1 writes any output without bounds, like sprintf. */ # if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) # define USE_SNPRINTF 1 # else # define USE_SNPRINTF 0 # endif # if HAVE_DECL__SNPRINTF /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT function _snprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # else # define SNPRINTF _snprintf # endif # else /* Unix. */ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # endif #endif /* Here we need to call the native sprintf, not rpl_sprintf. */ #undef sprintf /* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" warnings in this file. Use -Dlint to suppress them. */ #ifdef lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() and remainder() functions. */ #undef exp #define exp expo #undef remainder #define remainder rem #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && !WIDE_CHAR_VERSION # if (HAVE_STRNLEN && !defined _AIX) # define local_strnlen strnlen # else # ifndef local_strnlen_defined # define local_strnlen_defined 1 static size_t local_strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } # endif # endif #endif #if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T # if HAVE_WCSLEN # define local_wcslen wcslen # else /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid a dependency towards this library, here is a local substitute. Define this substitute only once, even if this file is included twice in the same compilation unit. */ # ifndef local_wcslen_defined # define local_wcslen_defined 1 static size_t local_wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t) 0; ptr++) ; return ptr - s; } # endif # endif #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99) && HAVE_WCHAR_T && WIDE_CHAR_VERSION # if HAVE_WCSNLEN # define local_wcsnlen wcsnlen # else # ifndef local_wcsnlen_defined # define local_wcsnlen_defined 1 static size_t local_wcsnlen (const wchar_t *s, size_t maxlen) { const wchar_t *ptr; for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) ; return ptr - s; } # endif # endif #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL /* Determine the decimal-point character according to the current locale. */ # ifndef decimal_point_char_defined # define decimal_point_char_defined 1 static char decimal_point_char (void) { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems and Mac OS X systems, but is not required to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ # if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) point = nl_langinfo (RADIXCHAR); # elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; # else point = localeconv () -> decimal_point; # endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } # endif #endif #if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zero (double x) { return isnand (x) || x + x == x; } #endif #if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zerol (long double x) { return isnanl (x) || x + x == x; } #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL /* Converting 'long double' to decimal without rare rounding bugs requires real bignums. We use the naming conventions of GNU gmp, but vastly simpler (and slower) algorithms. */ typedef unsigned int mp_limb_t; # define GMP_LIMB_BITS 32 verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); typedef unsigned long long mp_twolimb_t; # define GMP_TWOLIMB_BITS 64 verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); /* Representation of a bignum >= 0. */ typedef struct { size_t nlimbs; mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ } mpn_t; /* Compute the product of two bignums >= 0. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * multiply (mpn_t src1, mpn_t src2, mpn_t *dest) { const mp_limb_t *p1; const mp_limb_t *p2; size_t len1; size_t len2; if (src1.nlimbs <= src2.nlimbs) { len1 = src1.nlimbs; p1 = src1.limbs; len2 = src2.nlimbs; p2 = src2.limbs; } else { len1 = src2.nlimbs; p1 = src2.limbs; len2 = src1.nlimbs; p2 = src1.limbs; } /* Now 0 <= len1 <= len2. */ if (len1 == 0) { /* src1 or src2 is zero. */ dest->nlimbs = 0; dest->limbs = (mp_limb_t *) malloc (1); } else { /* Here 1 <= len1 <= len2. */ size_t dlen; mp_limb_t *dp; size_t k, i, j; dlen = len1 + len2; dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); if (dp == NULL) return NULL; for (k = len2; k > 0; ) dp[--k] = 0; for (i = 0; i < len1; i++) { mp_limb_t digit1 = p1[i]; mp_twolimb_t carry = 0; for (j = 0; j < len2; j++) { mp_limb_t digit2 = p2[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; carry += dp[i + j]; dp[i + j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } dp[i + len2] = (mp_limb_t) carry; } /* Normalise. */ while (dlen > 0 && dp[dlen - 1] == 0) dlen--; dest->nlimbs = dlen; dest->limbs = dp; } return dest->limbs; } /* Compute the quotient of a bignum a >= 0 and a bignum b > 0. a is written as a = q * b + r with 0 <= r < b. q is the quotient, r the remainder. Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, q is incremented. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * divide (mpn_t a, mpn_t b, mpn_t *q) { /* Algorithm: First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). If m=n=1, perform a single-precision division: r:=0, j:=m, while j>0 do {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: We have a/b < beta^(m-n+1). s:=intDsize-1-(highest bit in b[n-1]), 0<=s=beta/2. For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} Compute q* : q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). In case of overflow (q* >= beta) set q* := beta-1. Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] and c3 := b[n-2] * q*. {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow occurred. Furthermore 0 <= c3 < beta^2. If there was overflow and r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, the next test can be skipped.} While c3 > c2, {Here 0 <= c2 < c3 < beta^2} Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. If q* > 0: Put r := r - b * q* * beta^j. In detail: [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. hence: u:=0, for i:=0 to n-1 do u := u + q* * b[i], r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), u:=u div beta (+ 1, if carry in subtraction) r[n+j]:=r[n+j]-u. {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 < q* + 1 <= beta, the carry u does not overflow.} If a negative carry occurs, put q* := q* - 1 and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. Set q[j] := q*. Normalise [q[m-n],..,q[0]]; this yields the quotient q. Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the rest r. The room for q[j] can be allocated at the memory location of r[n+j]. Finally, round-to-even: Shift r left by 1 bit. If r > b or if r = b and q[0] is odd, q := q+1. */ const mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; const mp_limb_t *b_ptr = b.limbs; size_t b_len = b.nlimbs; mp_limb_t *roomptr; mp_limb_t *tmp_roomptr = NULL; mp_limb_t *q_ptr; size_t q_len; mp_limb_t *r_ptr; size_t r_len; /* Allocate room for a_len+2 digits. (Need a_len+1 digits for the real division and 1 more digit for the final rounding of q.) */ roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); if (roomptr == NULL) return NULL; /* Normalise a. */ while (a_len > 0 && a_ptr[a_len - 1] == 0) a_len--; /* Normalise b. */ for (;;) { if (b_len == 0) /* Division by zero. */ abort (); if (b_ptr[b_len - 1] == 0) b_len--; else break; } /* Here m = a_len >= 0 and n = b_len > 0. */ if (a_len < b_len) { /* m beta^(m-2) <= a/b < beta^m */ r_ptr = roomptr; q_ptr = roomptr + 1; { mp_limb_t den = b_ptr[0]; mp_limb_t remainder = 0; const mp_limb_t *sourceptr = a_ptr + a_len; mp_limb_t *destptr = q_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; *--destptr = num / den; remainder = num % den; } /* Normalise and store r. */ if (remainder > 0) { r_ptr[0] = remainder; r_len = 1; } else r_len = 0; /* Normalise q. */ q_len = a_len; if (q_ptr[q_len - 1] == 0) q_len--; } } else { /* n>1: multiple precision division. beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> beta^(m-n-1) <= a/b < beta^(m-n+1). */ /* Determine s. */ size_t s; { mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ /* Determine s = GMP_LIMB_BITS - integer_length (msd). Code copied from gnulib's integer_length.c. */ # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) s = __builtin_clz (msd); # else # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT if (GMP_LIMB_BITS <= DBL_MANT_BIT) { /* Use 'double' operations. Assumes an IEEE 754 'double' implementation. */ # define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) # define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; /* Use a single integer to floating-point conversion. */ m.value = msd; s = GMP_LIMB_BITS - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - DBL_EXP_BIAS); } else # undef NWORDS # endif { s = 31; if (msd >= 0x10000) { msd = msd >> 16; s -= 16; } if (msd >= 0x100) { msd = msd >> 8; s -= 8; } if (msd >= 0x10) { msd = msd >> 4; s -= 4; } if (msd >= 0x4) { msd = msd >> 2; s -= 2; } if (msd >= 0x2) { msd = msd >> 1; s -= 1; } } # endif } /* 0 <= s < GMP_LIMB_BITS. Copy b, shifting it left by s bits. */ if (s > 0) { tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); if (tmp_roomptr == NULL) { free (roomptr); return NULL; } { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = tmp_roomptr; mp_twolimb_t accu = 0; size_t count; for (count = b_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } /* accu must be zero, since that was how s was determined. */ if (accu != 0) abort (); } b_ptr = tmp_roomptr; } /* Copy a, shifting it left by s bits, yields r. Memory layout: At the beginning: r = roomptr[0..a_len], at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ r_ptr = roomptr; if (s == 0) { memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); r_ptr[a_len] = 0; } else { const mp_limb_t *sourceptr = a_ptr; mp_limb_t *destptr = r_ptr; mp_twolimb_t accu = 0; size_t count; for (count = a_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } *destptr++ = (mp_limb_t) accu; } q_ptr = roomptr + b_len; q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ { size_t j = a_len - b_len; /* m-n */ mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; /* Division loop, traversed m-n+1 times. j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ for (;;) { mp_limb_t q_star; mp_limb_t c1; if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ { /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ mp_twolimb_t num = ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) | r_ptr[j + b_len - 1]; q_star = num / b_msd; c1 = num % b_msd; } else { /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) {<= beta !}. If yes, jump directly to the subtraction loop. (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ if (r_ptr[j + b_len] > b_msd || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) /* r[j+n] >= b[n-1]+1 or r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a carry. */ goto subtract; } /* q_star = q*, c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 this can happen only twice. */ if (c3 > c2) { q_star = q_star - 1; /* q* := q* - 1 */ if (c3 - c2 > b_msdd) q_star = q_star - 1; /* q* := q* - 1 */ } } if (q_star > 0) subtract: { /* Subtract r := r - b * q* * beta^j. */ mp_limb_t cr; { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_twolimb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { /* Here 0 <= carry <= q*. */ carry = carry + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + (mp_limb_t) ~(*destptr); /* Here 0 <= carry <= beta*q* + beta-1. */ *destptr++ = ~(mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; /* <= q* */ } cr = (mp_limb_t) carry; } /* Subtract cr from r_ptr[j + b_len], then forget about r_ptr[j + b_len]. */ if (cr > r_ptr[j + b_len]) { /* Subtraction gave a carry. */ q_star = q_star - 1; /* q* := q* - 1 */ /* Add b back. */ { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_limb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { mp_limb_t source1 = *sourceptr++; mp_limb_t source2 = *destptr; *destptr++ = source1 + source2 + carry; carry = (carry ? source1 >= (mp_limb_t) ~source2 : source1 > (mp_limb_t) ~source2); } } /* Forget about the carry and about r[j+n]. */ } } /* q* is determined. Store it as q[j]. */ q_ptr[j] = q_star; if (j == 0) break; j--; } } r_len = b_len; /* Normalise q. */ if (q_ptr[q_len - 1] == 0) q_len--; # if 0 /* Not needed here, since we need r only to compare it with b/2, and b is shifted left by s bits. */ /* Shift r right by s bits. */ if (s > 0) { mp_limb_t ptr = r_ptr + r_len; mp_twolimb_t accu = 0; size_t count; for (count = r_len; count > 0; count--) { accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); } } # endif /* Normalise r. */ while (r_len > 0 && r_ptr[r_len - 1] == 0) r_len--; } /* Compare r << 1 with b. */ if (r_len > b_len) goto increment_q; { size_t i; for (i = b_len;;) { mp_limb_t r_i = (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) | (i < r_len ? r_ptr[i] << 1 : 0); mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); if (r_i > b_i) goto increment_q; if (r_i < b_i) goto keep_q; if (i == 0) break; i--; } } if (q_len > 0 && ((q_ptr[0] & 1) != 0)) /* q is odd. */ increment_q: { size_t i; for (i = 0; i < q_len; i++) if (++(q_ptr[i]) != 0) goto keep_q; q_ptr[q_len++] = 1; } keep_q: if (tmp_roomptr != NULL) free (tmp_roomptr); q->limbs = q_ptr; q->nlimbs = q_len; return roomptr; } /* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal representation. Destroys the contents of a. Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * convert_to_decimal (mpn_t a, size_t extra_zeroes) { mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); if (c_ptr != NULL) { char *d_ptr = c_ptr; for (; extra_zeroes > 0; extra_zeroes--) *d_ptr++ = '0'; while (a_len > 0) { /* Divide a by 10^9, in-place. */ mp_limb_t remainder = 0; mp_limb_t *ptr = a_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; *ptr = num / 1000000000; remainder = num % 1000000000; } /* Store the remainder as 9 decimal digits. */ for (count = 9; count > 0; count--) { *d_ptr++ = '0' + (remainder % 10); remainder = remainder / 10; } /* Normalize a. */ if (a_ptr[a_len - 1] == 0) a_len--; } /* Remove leading zeroes. */ while (d_ptr > c_ptr && d_ptr[-1] == '0') d_ptr--; /* But keep at least one zero. */ if (d_ptr == c_ptr) *d_ptr++ = '0'; /* Terminate the string. */ *d_ptr = '\0'; } return c_ptr; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_long_double (long double x, int *ep, mpn_t *mp) { mpn_t m; int exp; long double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'long double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess precision. */ if (!(y == 0.0L)) abort (); # endif /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - LDBL_MANT_BIT; return m.limbs; } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_double (double x, int *ep, mpn_t *mp) { mpn_t m; int exp; double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } if (!(y == 0.0)) abort (); /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - DBL_MANT_BIT; return m.limbs; } # endif /* Assuming x = 2^e * m is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) { int s; size_t extra_zeroes; unsigned int abs_n; unsigned int abs_s; mp_limb_t *pow5_ptr; size_t pow5_len; unsigned int s_limbs; unsigned int s_bits; mpn_t pow5; mpn_t z; void *z_memory; char *digits; if (memory == NULL) return NULL; /* x = 2^e * m, hence y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) = round (2^s * 5^n * m). */ s = e + n; extra_zeroes = 0; /* Factor out a common power of 10 if possible. */ if (s > 0 && n > 0) { extra_zeroes = (s < n ? s : n); s -= extra_zeroes; n -= extra_zeroes; } /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. Before converting to decimal, we need to compute z = round (2^s * 5^n * m). */ /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same sign. 2.322 is slightly larger than log(5)/log(2). */ abs_n = (n >= 0 ? n : -n); abs_s = (s >= 0 ? s : -s); pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + abs_s / GMP_LIMB_BITS + 1) * sizeof (mp_limb_t)); if (pow5_ptr == NULL) { free (memory); return NULL; } /* Initialize with 1. */ pow5_ptr[0] = 1; pow5_len = 1; /* Multiply with 5^|n|. */ if (abs_n > 0) { static mp_limb_t const small_pow5[13 + 1] = { 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125 }; unsigned int n13; for (n13 = 0; n13 <= abs_n; n13 += 13) { mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; size_t j; mp_twolimb_t carry = 0; for (j = 0; j < pow5_len; j++) { mp_limb_t digit2 = pow5_ptr[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; pow5_ptr[j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } if (carry > 0) pow5_ptr[pow5_len++] = (mp_limb_t) carry; } } s_limbs = abs_s / GMP_LIMB_BITS; s_bits = abs_s % GMP_LIMB_BITS; if (n >= 0 ? s >= 0 : s <= 0) { /* Multiply with 2^|s|. */ if (s_bits > 0) { mp_limb_t *ptr = pow5_ptr; mp_twolimb_t accu = 0; size_t count; for (count = pow5_len; count > 0; count--) { accu += (mp_twolimb_t) *ptr << s_bits; *ptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) { *ptr = (mp_limb_t) accu; pow5_len++; } } if (s_limbs > 0) { size_t count; for (count = pow5_len; count > 0;) { count--; pow5_ptr[s_limbs + count] = pow5_ptr[count]; } for (count = s_limbs; count > 0;) { count--; pow5_ptr[count] = 0; } pow5_len += s_limbs; } pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* Multiply m with pow5. No division needed. */ z_memory = multiply (m, pow5, &z); } else { /* Divide m by pow5 and round. */ z_memory = divide (m, pow5, &z); } } else { pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* n >= 0, s < 0. Multiply m with pow5, then divide by 2^|s|. */ mpn_t numerator; mpn_t denominator; void *tmp_memory; tmp_memory = multiply (m, pow5, &numerator); if (tmp_memory == NULL) { free (pow5_ptr); free (memory); return NULL; } /* Construct 2^|s|. */ { mp_limb_t *ptr = pow5_ptr + pow5_len; size_t i; for (i = 0; i < s_limbs; i++) ptr[i] = 0; ptr[s_limbs] = (mp_limb_t) 1 << s_bits; denominator.limbs = ptr; denominator.nlimbs = s_limbs + 1; } z_memory = divide (numerator, denominator, &z); free (tmp_memory); } else { /* n < 0, s > 0. Multiply m with 2^s, then divide by pow5. */ mpn_t numerator; mp_limb_t *num_ptr; num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) * sizeof (mp_limb_t)); if (num_ptr == NULL) { free (pow5_ptr); free (memory); return NULL; } { mp_limb_t *destptr = num_ptr; { size_t i; for (i = 0; i < s_limbs; i++) *destptr++ = 0; } if (s_bits > 0) { const mp_limb_t *sourceptr = m.limbs; mp_twolimb_t accu = 0; size_t count; for (count = m.nlimbs; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s_bits; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) *destptr++ = (mp_limb_t) accu; } else { const mp_limb_t *sourceptr = m.limbs; size_t count; for (count = m.nlimbs; count > 0; count--) *destptr++ = *sourceptr++; } numerator.limbs = num_ptr; numerator.nlimbs = destptr - num_ptr; } z_memory = divide (numerator, pow5, &z); free (num_ptr); } } free (pow5_ptr); free (memory); /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ if (z_memory == NULL) return NULL; digits = convert_to_decimal (z, extra_zeroes); free (z_memory); return digits; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_long_double (long double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_long_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_double (double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10l (long double x) { int exp; long double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); if (y == 0.0L) return INT_MIN; if (y < 0.5L) { while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0L / (1 << 16))) { y *= 1.0L * (1 << 16); exp -= 16; } if (y < (1.0L / (1 << 8))) { y *= 1.0L * (1 << 8); exp -= 8; } if (y < (1.0L / (1 << 4))) { y *= 1.0L * (1 << 4); exp -= 4; } if (y < (1.0L / (1 << 2))) { y *= 1.0L * (1 << 2); exp -= 2; } if (y < (1.0L / (1 << 1))) { y *= 1.0L * (1 << 1); exp -= 1; } } if (!(y >= 0.5L && y < 1.0L)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10 (double x) { int exp; double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); if (y == 0.0) return INT_MIN; if (y < 0.5) { while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0 / (1 << 16))) { y *= 1.0 * (1 << 16); exp -= 16; } if (y < (1.0 / (1 << 8))) { y *= 1.0 * (1 << 8); exp -= 8; } if (y < (1.0 / (1 << 4))) { y *= 1.0 * (1 << 4); exp -= 4; } if (y < (1.0 / (1 << 2))) { y *= 1.0 * (1 << 2); exp -= 2; } if (y < (1.0 / (1 << 1))) { y *= 1.0 * (1 << 1); exp -= 1; } } if (!(y >= 0.5 && y < 1.0)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif /* Tests whether a string of digits consists of exactly PRECISION zeroes and a single '1' digit. */ static int is_borderline (const char *digits, size_t precision) { for (; precision > 0; precision--, digits++) if (*digits != '0') return 0; if (*digits != '1') return 0; digits++; return *digits == '\0'; } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 /* Use a different function name, to make it possible that the 'wchar_t' parametrization and the 'char' parametrization get compiled in the same translation unit. */ # if WIDE_CHAR_VERSION # define MAX_ROOM_NEEDED wmax_room_needed # else # define MAX_ROOM_NEEDED max_room_needed # endif /* Returns the number of TCHAR_T units needed as temporary space for the result of sprintf or SNPRINTF of a single conversion directive. */ static size_t MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, arg_type type, int flags, size_t width, int has_precision, size_t precision, int pad_ourselves) { size_t tmp_length; switch (conversion) { case 'd': case 'i': case 'u': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Multiply by 2, as an estimate for FLAG_GROUP. */ tmp_length = xsum (tmp_length, tmp_length); /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'o': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'x': case 'X': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a leading sign or alternate form. */ tmp_length = xsum (tmp_length, 2); break; case 'f': case 'F': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ else tmp_length = (unsigned int) (DBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ tmp_length = xsum (tmp_length, precision); break; case 'e': case 'E': case 'g': case 'G': tmp_length = 12; /* sign, decimal point, exponent etc. */ tmp_length = xsum (tmp_length, precision); break; case 'a': case 'A': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (DBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); break; case 'c': # if HAVE_WINT_T && !WIDE_CHAR_VERSION if (type == TYPE_WIDE_CHAR) tmp_length = MB_CUR_MAX; else # endif tmp_length = 1; break; case 's': # if HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) { # if WIDE_CHAR_VERSION /* ISO C says about %ls in fwprintf: "If the precision is not specified or is greater than the size of the array, the array shall contain a null wide character." So if there is a precision, we must not use wcslen. */ const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; if (has_precision) tmp_length = local_wcsnlen (arg, precision); else tmp_length = local_wcslen (arg); # else /* ISO C says about %ls in fprintf: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." So if there is a precision, we must not use wcslen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # endif } else # endif { # if WIDE_CHAR_VERSION /* ISO C says about %s in fwprintf: "If the precision is not specified or is greater than the size of the converted array, the converted array shall contain a null wide character." So if there is a precision, we must not use strlen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # else /* ISO C says about %s in fprintf: "If the precision is not specified or greater than the size of the array, the array shall contain a null character." So if there is a precision, we must not use strlen. */ const char *arg = ap->arg[arg_index].a.a_string; if (has_precision) tmp_length = local_strnlen (arg, precision); else tmp_length = strlen (arg); # endif } break; case 'p': tmp_length = (unsigned int) (sizeof (void *) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading 0x */ break; default: abort (); } if (!pad_ourselves) { # if ENABLE_UNISTDIO /* Padding considers the number of characters, therefore the number of elements after padding may be > max (tmp_length, width) but is certainly <= tmp_length + width. */ tmp_length = xsum (tmp_length, width); # else /* Padding considers the number of elements, says POSIX. */ if (tmp_length < width) tmp_length = width; # endif } tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ return tmp_length; } #endif DCHAR_T * VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, va_list args) { DIRECTIVES d; arguments a; if (PRINTF_PARSE (format, &d, &a) < 0) /* errno is already set. */ return NULL; #define CLEANUP() \ if (d.dir != d.direct_alloc_dir) \ free (d.dir); \ if (a.arg != a.direct_alloc_arg) \ free (a.arg); if (PRINTF_FETCHARGS (args, &a) < 0) { CLEANUP (); errno = EINVAL; return NULL; } { size_t buf_neededlength; TCHAR_T *buf; TCHAR_T *buf_malloced; const FCHAR_T *cp; size_t i; DIRECTIVE *dp; /* Output string accumulator. */ DCHAR_T *result; size_t allocated; size_t length; /* Allocate a small buffer that will hold a directive passed to sprintf or snprintf. */ buf_neededlength = xsum4 (7, d.max_width_length, d.max_precision_length, 6); #if HAVE_ALLOCA if (buf_neededlength < 4000 / sizeof (TCHAR_T)) { buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); buf_malloced = NULL; } else #endif { size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); if (size_overflow_p (buf_memsize)) goto out_of_memory_1; buf = (TCHAR_T *) malloc (buf_memsize); if (buf == NULL) goto out_of_memory_1; buf_malloced = buf; } if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ /* Ensures that allocated >= needed. Aborts through a jump to out_of_memory if needed is SIZE_MAX or otherwise too big. */ #define ENSURE_ALLOCATION(needed) \ if ((needed) > allocated) \ { \ size_t memory_size; \ DCHAR_T *memory; \ \ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ if ((needed) > allocated) \ allocated = (needed); \ memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ if (size_overflow_p (memory_size)) \ goto out_of_memory; \ if (result == resultbuf || result == NULL) \ memory = (DCHAR_T *) malloc (memory_size); \ else \ memory = (DCHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ goto out_of_memory; \ if (result == resultbuf && length > 0) \ DCHAR_CPY (memory, result, length); \ result = memory; \ } for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) { if (cp != dp->dir_start) { size_t n = dp->dir_start - cp; size_t augmented_length = xsum (length, n); ENSURE_ALLOCATION (augmented_length); /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we need that the format string contains only ASCII characters if FCHAR_T and DCHAR_T are not the same type. */ if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) { DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); length = augmented_length; } else { do result[length++] = (unsigned char) *cp++; while (--n > 0); } } if (i == d.count) break; /* Execute a single directive. */ if (dp->conversion == '%') { size_t augmented_length; if (!(dp->arg_index == ARG_NONE)) abort (); augmented_length = xsum (length, 1); ENSURE_ALLOCATION (augmented_length); result[length] = '%'; length = augmented_length; } else { if (!(dp->arg_index != ARG_NONE)) abort (); if (dp->conversion == 'n') { switch (a.arg[dp->arg_index].type) { case TYPE_COUNT_SCHAR_POINTER: *a.arg[dp->arg_index].a.a_count_schar_pointer = length; break; case TYPE_COUNT_SHORT_POINTER: *a.arg[dp->arg_index].a.a_count_short_pointer = length; break; case TYPE_COUNT_INT_POINTER: *a.arg[dp->arg_index].a.a_count_int_pointer = length; break; case TYPE_COUNT_LONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longint_pointer = length; break; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; #endif default: abort (); } } #if ENABLE_UNISTDIO /* The unistdio extensions. */ else if (dp->conversion == 'U') { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } switch (type) { case TYPE_U8_STRING: { const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; const uint8_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u8_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT8_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-8 to locale encoding. */ converted = u8_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-8 to UTF-16/UTF-32. */ converted = U8_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U16_STRING: { const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; const uint16_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u16_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT16_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-16 to locale encoding. */ converted = u16_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-16 to UTF-8/UTF-32. */ converted = U16_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U32_STRING: { const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; const uint32_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u32_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT32_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-32 to locale encoding. */ converted = u32_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-32 to UTF-8/UTF-16. */ converted = U32_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; default: abort (); } } #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T else if (dp->conversion == 's' # if WIDE_CHAR_VERSION && a.arg[dp->arg_index].type != TYPE_WIDE_STRING # else && a.arg[dp->arg_index].type == TYPE_WIDE_STRING # endif ) { /* The normal handling of the 's' directive below requires allocating a temporary buffer. The determination of its length (tmp_length), in the case when a precision is specified, below requires a conversion between a char[] string and a wchar_t[] wide string. It could be done, but we have no guarantee that the implementation of sprintf will use the exactly same algorithm. Without this guarantee, it is possible to have buffer overrun bugs. In order to avoid such bugs, we implement the entire processing of the 's' directive ourselves. */ int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } # if WIDE_CHAR_VERSION /* %s in vasnwprintf. See the specification of fwprintf. */ { const char *arg = a.arg[dp->arg_index].a.a_string; const char *arg_end; size_t characters; if (has_precision) { /* Use only as many bytes as needed to produce PRECISION wide characters, from the left. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of wide characters. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } if (has_precision || has_width) { /* We know the number of wide characters in advance. */ size_t remaining; # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; remaining--) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); result[length++] = wc; arg += count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); ENSURE_ALLOCATION (xsum (length, 1)); result[length++] = wc; arg += count; } } if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # else /* %ls in vasnprintf. See the specification of fprintf. */ { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; const wchar_t *arg_end; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; if (has_precision) { /* Use only as many wide characters as needed to produce at most PRECISION bytes, from the left. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; while (precision > 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg_end, &state); # else count = wctomb (cbuf, *arg_end); # endif if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } if (precision < count) break; arg_end++; characters += count; precision -= count; } } # if DCHAR_IS_TCHAR else if (has_width) # else else # endif { /* Use the entire string, and count the number of bytes. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg_end, &state); # else count = wctomb (cbuf, *arg_end); # endif if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end++; characters += count; } } # if DCHAR_IS_TCHAR else { /* Use the entire string. */ arg_end = arg + local_wcslen (arg); /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); if (tmpsrc == NULL) goto out_of_memory; { TCHAR_T *tmpptr = tmpsrc; size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpptr, cbuf, count); tmpptr += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { int saved_errno = errno; free (tmpsrc); if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } free (tmpsrc); # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_precision || has_width) { /* We know the number of bytes in advance. */ size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) /* Inconsistency. */ abort (); memcpy (result + length, cbuf, count); length += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t count = wcrtomb (cbuf, *arg, &state); # else count = wctomb (cbuf, *arg); # endif if (count <= 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; arg++; } } # else ENSURE_ALLOCATION (xsum (length, tmpdst_len)); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # endif } #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'a' || dp->conversion == 'A') # if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # endif ) # endif ) { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; size_t width; int has_precision; size_t precision; size_t tmp_length; size_t count; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* Allocate a temporary buffer of sufficient size. */ if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) ((LDBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) ((DBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; if (type == TYPE_LONGDOUBLE) { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; long double mantissa; if (arg > 0.0L) mantissa = printf_frexpl (arg, &exponent); else { exponent = 0; mantissa = 0.0L; } if (has_precision && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ long double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5L : tail > 0.5L) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0L; } if (tail != 0.0L) for (q = precision; q > 0; q--) tail *= 0.0625L; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0L || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0L) { mantissa *= 16.0L; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } END_LONG_DOUBLE_ROUNDING (); } # else abort (); # endif } else { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; double mantissa; if (arg > 0.0) mantissa = printf_frexp (arg, &exponent); else { exponent = 0; mantissa = 0.0; } if (has_precision && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5 : tail > 0.5) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0; } if (tail != 0.0) for (q = precision; q > 0; q--) tail *= 0.0625; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0 || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0) { mantissa *= 16.0; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } } # else abort (); # endif } /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif #if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'f' || dp->conversion == 'F' || dp->conversion == 'e' || dp->conversion == 'E' || dp->conversion == 'g' || dp->conversion == 'G' || dp->conversion == 'a' || dp->conversion == 'A') && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # elif NEED_PRINTF_INFINITE_DOUBLE || (a.arg[dp->arg_index].type == TYPE_DOUBLE /* The systems (mingw) which produce wrong output for Inf, -Inf, and NaN also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # elif NEED_PRINTF_INFINITE_LONG_DOUBLE || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE /* Some systems produce wrong output for Inf, -Inf, and NaN. Some systems in this category (IRIX 5.3) also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) # endif )) { # if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) arg_type type = a.arg[dp->arg_index].type; # endif int flags = dp->flags; size_t width; size_t count; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* POSIX specifies the default precision to be 6 for %f, %F, %e, %E, but not for %g, %G. Implementations appear to use the same default precision also for %g, %G. But for %a, %A, the default precision is 0. */ if (!has_precision) if (!(dp->conversion == 'a' || dp->conversion == 'A')) precision = 6; /* Allocate a temporary buffer of sufficient size. */ # if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); # elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); # elif NEED_PRINTF_LONG_DOUBLE tmp_length = LDBL_DIG + 1; # elif NEED_PRINTF_DOUBLE tmp_length = DBL_DIG + 1; # else tmp_length = 0; # endif if (tmp_length < precision) tmp_length = precision; # if NEED_PRINTF_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (!(isnanl (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10l (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif # if NEED_PRINTF_DOUBLE # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE if (type == TYPE_DOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { double arg = a.arg[dp->arg_index].a.a_double; if (!(isnand (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10 (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_LONG_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_long_double (arg, precision); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0L) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0L. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)precision - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0L) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0L. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: count <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0L)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else if (dp->conversion == 'a' || dp->conversion == 'A') { *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion - 'A' + 'P'; *p++ = '+'; *p++ = '0'; } else abort (); # endif } END_LONG_DOUBLE_ROUNDING (); } } # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE else # endif # endif # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE { double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_double (arg, precision); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)precision - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: ecount <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *p++ = '0'; # endif *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else abort (); # endif } } } # endif /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif else { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION size_t width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION int has_precision; size_t precision; #endif #if NEED_PRINTF_UNBOUNDED_PRECISION int prec_ourselves; #else # define prec_ourselves 0 #endif #if NEED_PRINTF_FLAG_LEFTADJUST # define pad_ourselves 1 #elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int pad_ourselves; #else # define pad_ourselves 0 #endif TCHAR_T *fbp; unsigned int prefix_count; int prefixes[2] IF_LINT (= { 0 }); int orig_errno; #if !USE_SNPRINTF size_t tmp_length; TCHAR_T tmpbuf[700]; TCHAR_T *tmp; #endif #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 0; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 1; #endif } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || NEED_PRINTF_UNBOUNDED_PRECISION has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } #endif /* Decide whether to handle the precision ourselves. */ #if NEED_PRINTF_UNBOUNDED_PRECISION switch (dp->conversion) { case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': prec_ourselves = has_precision && (precision > 0); break; default: prec_ourselves = 0; break; } #endif /* Decide whether to perform the padding ourselves. */ #if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) switch (dp->conversion) { # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need to perform the padding after this conversion. Functions with unistdio extensions perform the padding based on character count rather than element count. */ case 'c': case 's': # endif # if NEED_PRINTF_FLAG_ZERO case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': # endif pad_ourselves = 1; break; default: pad_ourselves = prec_ourselves; break; } #endif #if !USE_SNPRINTF /* Allocate a temporary buffer of sufficient size for calling sprintf. */ tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (TCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } #endif /* Construct the format string for calling snprintf or sprintf. */ fbp = buf; *fbp++ = '%'; #if NEED_PRINTF_FLAG_GROUPING /* The underlying implementation doesn't support the ' flag. Produce no grouping characters in this case; this is acceptable because the grouping is locale dependent. */ #else if (flags & FLAG_GROUP) *fbp++ = '\''; #endif if (flags & FLAG_LEFT) *fbp++ = '-'; if (flags & FLAG_SHOWSIGN) *fbp++ = '+'; if (flags & FLAG_SPACE) *fbp++ = ' '; if (flags & FLAG_ALT) *fbp++ = '#'; #if __GLIBC__ >= 2 && !defined __UCLIBC__ if (flags & FLAG_LOCALIZED) *fbp++ = 'I'; #endif if (!pad_ourselves) { if (flags & FLAG_ZERO) *fbp++ = '0'; if (dp->width_start != dp->width_end) { size_t n = dp->width_end - dp->width_start; /* The width specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->width_start; do *fbp++ = (unsigned char) *mp++; while (--n > 0); } } } if (!prec_ourselves) { if (dp->precision_start != dp->precision_end) { size_t n = dp->precision_end - dp->precision_start; /* The precision specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->precision_start; do *fbp++ = (unsigned char) *mp++; while (--n > 0); } } } switch (type) { #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *fbp++ = 'I'; *fbp++ = '6'; *fbp++ = '4'; break; # else *fbp++ = 'l'; /*FALLTHROUGH*/ # endif #endif case TYPE_LONGINT: case TYPE_ULONGINT: #if HAVE_WINT_T case TYPE_WIDE_CHAR: #endif #if HAVE_WCHAR_T case TYPE_WIDE_STRING: #endif *fbp++ = 'l'; break; case TYPE_LONGDOUBLE: *fbp++ = 'L'; break; default: break; } #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') *fbp = 'f'; else #endif *fbp = dp->conversion; #if USE_SNPRINTF # if !(((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) && !defined __UCLIBC__) || ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) fbp[1] = '%'; fbp[2] = 'n'; fbp[3] = '\0'; # else /* On glibc2 systems from glibc >= 2.3 - probably also older ones - we know that snprintf's return value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and gl_SNPRINTF_TRUNCATION_C99 pass. Therefore we can avoid using %n in this situation. On glibc2 systems from 2004-10-18 or newer, the use of %n in format strings in writable memory may crash the program (if compiled with _FORTIFY_SOURCE=2), so we should avoid it in this situation. */ /* On native Windows systems (such as mingw), we can avoid using %n because: - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, snprintf does not write more than the specified number of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes '4', '5', '6' into buf, not '4', '5', '\0'.) - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf allows us to recognize the case of an insufficient buffer size: it returns -1 in this case. On native Windows systems (such as mingw) where the OS is Windows Vista, the use of %n in format strings by default crashes the program. See and So we should avoid %n in this situation. */ fbp[1] = '\0'; # endif #else fbp[1] = '\0'; #endif /* Construct the arguments for calling snprintf or sprintf. */ prefix_count = 0; if (!pad_ourselves && dp->width_arg_index != ARG_NONE) { if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; } if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) { if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; } #if USE_SNPRINTF /* The SNPRINTF result is appended after result[0..length]. The latter is an array of DCHAR_T; SNPRINTF appends an array of TCHAR_T to it. This is possible because sizeof (TCHAR_T) divides sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). */ # define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) /* Ensure that maxlen below will be >= 2. Needed on BeOS, where an snprintf() with maxlen==1 acts like sprintf(). */ ENSURE_ALLOCATION (xsum (length, (2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR)); /* Prepare checking whether snprintf returns the count via %n. */ *(TCHAR_T *) (result + length) = '\0'; #endif orig_errno = errno; for (;;) { int count = -1; #if USE_SNPRINTF int retcount = 0; size_t maxlen = allocated - length; /* SNPRINTF can fail if its second argument is > INT_MAX. */ if (maxlen > INT_MAX / TCHARS_PER_DCHAR) maxlen = INT_MAX / TCHARS_PER_DCHAR; maxlen = maxlen * TCHARS_PER_DCHAR; # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ arg, &count); \ break; \ case 1: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], arg, &count); \ break; \ case 2: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], prefixes[1], arg, \ &count); \ break; \ default: \ abort (); \ } #else # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ count = sprintf (tmp, buf, arg); \ break; \ case 1: \ count = sprintf (tmp, buf, prefixes[0], arg); \ break; \ case 2: \ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ arg); \ break; \ default: \ abort (); \ } #endif errno = 0; switch (type) { case TYPE_SCHAR: { int arg = a.arg[dp->arg_index].a.a_schar; SNPRINTF_BUF (arg); } break; case TYPE_UCHAR: { unsigned int arg = a.arg[dp->arg_index].a.a_uchar; SNPRINTF_BUF (arg); } break; case TYPE_SHORT: { int arg = a.arg[dp->arg_index].a.a_short; SNPRINTF_BUF (arg); } break; case TYPE_USHORT: { unsigned int arg = a.arg[dp->arg_index].a.a_ushort; SNPRINTF_BUF (arg); } break; case TYPE_INT: { int arg = a.arg[dp->arg_index].a.a_int; SNPRINTF_BUF (arg); } break; case TYPE_UINT: { unsigned int arg = a.arg[dp->arg_index].a.a_uint; SNPRINTF_BUF (arg); } break; case TYPE_LONGINT: { long int arg = a.arg[dp->arg_index].a.a_longint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGINT: { unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; SNPRINTF_BUF (arg); } break; #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: { long long int arg = a.arg[dp->arg_index].a.a_longlongint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGLONGINT: { unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; SNPRINTF_BUF (arg); } break; #endif case TYPE_DOUBLE: { double arg = a.arg[dp->arg_index].a.a_double; SNPRINTF_BUF (arg); } break; case TYPE_LONGDOUBLE: { long double arg = a.arg[dp->arg_index].a.a_longdouble; SNPRINTF_BUF (arg); } break; case TYPE_CHAR: { int arg = a.arg[dp->arg_index].a.a_char; SNPRINTF_BUF (arg); } break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: { wint_t arg = a.arg[dp->arg_index].a.a_wide_char; SNPRINTF_BUF (arg); } break; #endif case TYPE_STRING: { const char *arg = a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; #endif case TYPE_POINTER: { void *arg = a.arg[dp->arg_index].a.a_pointer; SNPRINTF_BUF (arg); } break; default: abort (); } #if USE_SNPRINTF /* Portability: Not all implementations of snprintf() are ISO C 99 compliant. Determine the number of bytes that snprintf() has produced or would have produced. */ if (count >= 0) { /* Verify that snprintf() has NUL-terminated its result. */ if (count < maxlen && ((TCHAR_T *) (result + length)) [count] != '\0') abort (); /* Portability hack. */ if (retcount > count) count = retcount; } else { /* snprintf() doesn't understand the '%n' directive. */ if (fbp[1] != '\0') { /* Don't use the '%n' directive; instead, look at the snprintf() return value. */ fbp[1] = '\0'; continue; } else { /* Look at the snprintf() return value. */ if (retcount < 0) { # if !HAVE_SNPRINTF_RETVAL_C99 /* HP-UX 10.20 snprintf() is doubly deficient: It doesn't understand the '%n' directive, *and* it returns -1 (rather than the length that would have been required) when the buffer is too small. But a failure at this point can also come from other reasons than a too small buffer, such as an invalid wide string argument to the %ls directive, or possibly an invalid floating-point argument. */ size_t tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (maxlen < tmp_length) { /* Make more room. But try to do through this reallocation only once. */ size_t bigger_need = xsum (length, xsum (tmp_length, TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); /* And always grow proportionally. (There may be several arguments, each needing a little more room than the previous one.) */ size_t bigger_need2 = xsum (xtimes (allocated, 2), 12); if (bigger_need < bigger_need2) bigger_need = bigger_need2; ENSURE_ALLOCATION (bigger_need); continue; } # endif } else count = retcount; } } #endif /* Attempt to handle failure. */ if (count < 0) { /* SNPRINTF or sprintf failed. Save and use the errno that it has set, if any. */ int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = (saved_errno != 0 ? saved_errno : (dp->conversion == 'c' || dp->conversion == 's' ? EILSEQ : EINVAL)); return NULL; } #if USE_SNPRINTF /* Handle overflow of the allocated buffer. If such an overflow occurs, a C99 compliant snprintf() returns a count >= maxlen. However, a non-compliant snprintf() function returns only count = maxlen - 1. To cover both cases, test whether count >= maxlen - 1. */ if ((unsigned int) count + 1 >= maxlen) { /* If maxlen already has attained its allowed maximum, allocating more memory will not increase maxlen. Instead of looping, bail out. */ if (maxlen == INT_MAX / TCHARS_PER_DCHAR) goto overflow; else { /* Need at least (count + 1) * sizeof (TCHAR_T) bytes. (The +1 is for the trailing NUL.) But ask for (count + 2) * sizeof (TCHAR_T) bytes, so that in the next round, we likely get maxlen > (unsigned int) count + 1 and so we don't get here again. And allocate proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = xmax (xsum (length, ((unsigned int) count + 2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); continue; } } #endif #if NEED_PRINTF_UNBOUNDED_PRECISION if (prec_ourselves) { /* Handle the precision. */ TCHAR_T *prec_ptr = # if USE_SNPRINTF (TCHAR_T *) (result + length); # else tmp; # endif size_t prefix_count; size_t move; prefix_count = 0; /* Put the additional zeroes after the sign. */ if (count >= 1 && (*prec_ptr == '-' || *prec_ptr == '+' || *prec_ptr == ' ')) prefix_count = 1; /* Put the additional zeroes after the 0x prefix if (flags & FLAG_ALT) || (dp->conversion == 'p'). */ else if (count >= 2 && prec_ptr[0] == '0' && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) prefix_count = 2; move = count - prefix_count; if (precision > move) { /* Insert zeroes. */ size_t insert = precision - move; TCHAR_T *prec_end; # if USE_SNPRINTF size_t n = xsum (length, (count + insert + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; ENSURE_ALLOCATION (n); length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; prec_ptr = (TCHAR_T *) (result + length); # endif prec_end = prec_ptr + count; prec_ptr += prefix_count; while (prec_end > prec_ptr) { prec_end--; prec_end[insert] = prec_end[0]; } prec_end += insert; do *--prec_end = '0'; while (prec_end > prec_ptr); count += insert; } } #endif #if !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); #endif #if !DCHAR_IS_TCHAR /* Convert from TCHAR_T[] to DCHAR_T[]. */ if (dp->conversion == 'c' || dp->conversion == 's') { /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING TYPE_WIDE_STRING. The result string is not certainly ASCII. */ const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); # if USE_SNPRINTF tmpsrc = (TCHAR_T *) (result + length); # else tmpsrc = tmp; # endif tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, count, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } ENSURE_ALLOCATION (xsum (length, tmpdst_len)); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); count = tmpdst_len; } else { /* The result string is ASCII. Simple 1:1 conversion. */ # if USE_SNPRINTF /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a no-op conversion, in-place on the array starting at (result + length). */ if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) # endif { const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t n; # if USE_SNPRINTF if (result == resultbuf) { tmpsrc = (TCHAR_T *) (result + length); /* ENSURE_ALLOCATION will not move tmpsrc (because it's part of resultbuf). */ ENSURE_ALLOCATION (xsum (length, count)); } else { /* ENSURE_ALLOCATION will move the array (because it uses realloc(). */ ENSURE_ALLOCATION (xsum (length, count)); tmpsrc = (TCHAR_T *) (result + length); } # else tmpsrc = tmp; ENSURE_ALLOCATION (xsum (length, count)); # endif tmpdst = result + length; /* Copy backwards, because of overlapping. */ tmpsrc += count; tmpdst += count; for (n = count; n > 0; n--) *--tmpdst = (unsigned char) *--tmpsrc; } } #endif #if DCHAR_IS_TCHAR && !USE_SNPRINTF /* Make room for the result. */ if (count > allocated - length) { /* Need at least count elements. But allocate proportionally. */ size_t n = xmax (xsum (length, count), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); } #endif /* Here count <= allocated - length. */ /* Perform padding. */ #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION if (pad_ourselves && has_width) { size_t w; # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, count); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = count; # endif if (w < width) { size_t pad = width - w; /* Make room for the result. */ if (xsum (count, pad) > allocated - length) { /* Need at least count + pad elements. But allocate proportionally. */ size_t n = xmax (xsum3 (length, count, pad), xtimes (allocated, 2)); # if USE_SNPRINTF length += count; ENSURE_ALLOCATION (n); length -= count; # else ENSURE_ALLOCATION (n); # endif } /* Here count + pad <= allocated - length. */ { # if !DCHAR_IS_TCHAR || USE_SNPRINTF DCHAR_T * const rp = result + length; # else DCHAR_T * const rp = tmp; # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; DCHAR_T *pad_ptr; # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) pad_ptr = NULL; } /* The generated string now extends from rp to p, with the zero padding insertion point being at pad_ptr. */ count = count + pad; /* = end - rp */ if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > rp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } } } } #endif /* Here still count <= allocated - length. */ #if !DCHAR_IS_TCHAR || USE_SNPRINTF /* The snprintf() result did fit. */ #else /* Append the sprintf() result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); #endif #if !USE_SNPRINTF if (tmp != tmpbuf) free (tmp); #endif #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') { /* Convert the %f result to upper case for %F. */ DCHAR_T *rp = result + length; size_t rc; for (rc = count; rc > 0; rc--, rp++) if (*rp >= 'a' && *rp <= 'z') *rp = *rp - 'a' + 'A'; } #endif length += count; break; } errno = orig_errno; #undef pad_ourselves #undef prec_ourselves } } } /* Add the final NUL. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; if (result != resultbuf && length + 1 < allocated) { /* Shrink the allocated memory if possible. */ DCHAR_T *memory; memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); if (memory != NULL) result = memory; } if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); *lengthp = length; /* Note that we can produce a big string of a length > INT_MAX. POSIX says that snprintf() fails with errno = EOVERFLOW in this case, but that's only because snprintf() returns an 'int'. This function does not have this limitation. */ return result; #if USE_SNPRINTF overflow: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EOVERFLOW; return NULL; #endif out_of_memory: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); out_of_memory_1: CLEANUP (); errno = ENOMEM; return NULL; } } #undef MAX_ROOM_NEEDED #undef TCHARS_PER_DCHAR #undef SNPRINTF #undef USE_SNPRINTF #undef DCHAR_SET #undef DCHAR_CPY #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef DCHAR_IS_TCHAR #undef TCHAR_T #undef DCHAR_T #undef FCHAR_T #undef VASNPRINTF gnupg-1.4.20/m4/0000755000175000017500000000000012635457216010252 500000000000000gnupg-1.4.20/m4/uintmax_t.m40000644000175000017500000000213112635262326012435 00000000000000# uintmax_t.m4 serial 12 dnl Copyright (C) 1997-2004, 2007-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ([2.13]) # Define uintmax_t to 'unsigned long' or 'unsigned long long' # if it is not already defined in or . AC_DEFUN([gl_AC_TYPE_UINTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) test $ac_cv_type_unsigned_long_long_int = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type], [Define to unsigned long or unsigned long long if and don't define.]) else AC_DEFINE([HAVE_UINTMAX_T], [1], [Define if you have the 'uintmax_t' type in or .]) fi ]) gnupg-1.4.20/m4/longdouble.m40000644000175000017500000000227712352573031012564 00000000000000# longdouble.m4 serial 2 (gettext-0.15) dnl Copyright (C) 2002-2003, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether the compiler supports the 'long double' type. dnl Prerequisite: AC_PROG_CC dnl This file is only needed in autoconf <= 2.59. Newer versions of autoconf dnl have a macro AC_TYPE_LONG_DOUBLE with identical semantics. AC_DEFUN([gt_TYPE_LONGDOUBLE], [ AC_CACHE_CHECK([for long double], gt_cv_c_long_double, [if test "$GCC" = yes; then gt_cv_c_long_double=yes else AC_TRY_COMPILE([ /* The Stardent Vistra knows sizeof(long double), but does not support it. */ long double foo = 0.0; /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ int array [2*(sizeof(long double) >= sizeof(double)) - 1]; ], , gt_cv_c_long_double=yes, gt_cv_c_long_double=no) fi]) if test $gt_cv_c_long_double = yes; then AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.]) fi ]) gnupg-1.4.20/m4/intdiv0.m40000644000175000017500000000455212635262326012013 00000000000000# intdiv0.m4 serial 6 (gettext-0.18.2) dnl Copyright (C) 2002, 2007-2008, 2010-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gt_INTDIV0], [ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], gt_cv_int_divbyzero_sigfpe, [ gt_cv_int_divbyzero_sigfpe= changequote(,)dnl case "$host_os" in macos* | darwin[6-9]* | darwin[1-9][0-9]*) # On Mac OS X 10.2 or newer, just assume the same as when cross- # compiling. If we were to perform the real test, 1 Crash Report # dialog window would pop up. case "$host_cpu" in i[34567]86 | x86_64) gt_cv_int_divbyzero_sigfpe="guessing yes" ;; esac ;; esac changequote([,])dnl if test -z "$gt_cv_int_divbyzero_sigfpe"; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include static void sigfpe_handler (int sig) { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (2); } ]])], [gt_cv_int_divbyzero_sigfpe=yes], [gt_cv_int_divbyzero_sigfpe=no], [ # Guess based on the CPU. changequote(,)dnl case "$host_cpu" in alpha* | i[34567]86 | x86_64 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac changequote([,])dnl ]) fi ]) case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac AC_DEFINE_UNQUOTED([INTDIV0_RAISES_SIGFPE], [$value], [Define if integer division by zero raises signal SIGFPE.]) ]) gnupg-1.4.20/m4/threadlib.m40000644000175000017500000003545712635262326012404 00000000000000# threadlib.m4 serial 11 (gettext-0.18.2) dnl Copyright (C) 2005-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, dnl USE_PTH_THREADS, USE_WINDOWS_THREADS dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for dnl programs that really need multithread functionality. The difference dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. AC_DEFUN([gl_THREADLIB_EARLY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) ]) dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_EARLY_BODY], [ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that dnl influences the result of the autoconf tests that test for *_unlocked dnl declarations, on AIX 5 at least. Therefore it must come early. AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl AC_BEFORE([$0], [gl_ARGP])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) dnl Check for multithreading. m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) AC_ARG_ENABLE([threads], AC_HELP_STRING([--enable-threads={posix|solaris|pth|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AC_HELP_STRING([--disable-threads], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else changequote(,)dnl case "$host_os" in dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl . osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using : case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks . cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi ]) dnl The guts of gl_THREADLIB. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_BODY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. AC_CACHE_CHECK([whether imported symbols can be declared weak], [gl_cv_have_weak], [gl_cv_have_weak=no dnl First, test whether the compiler accepts it syntactically. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern void xyzzy (); #pragma weak xyzzy]], [[xyzzy();]])], [gl_cv_have_weak=maybe]) if test $gl_cv_have_weak = maybe; then dnl Second, test whether it actually works. On Cygwin 1.7.2, with dnl gcc 4.3, symbols declared weak always evaluate to the address 0. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #pragma weak fputs int main () { return (fputs == NULL); }]])], [gl_cv_have_weak=yes], [gl_cv_have_weak=no], [dnl When cross-compiling, assume that only ELF platforms support dnl weak symbols. AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_have_weak="guessing yes"], [gl_cv_have_weak="guessing no"]) ]) fi ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_THREADLIB_EARLY_BODY. AC_CHECK_HEADER([pthread.h], [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads gl_have_pthread= # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # http://lists.gnu.org/archive/html/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include pthread_mutex_t m; pthread_mutexattr_t ma; ]], [[pthread_mutex_lock (&m); pthread_mutexattr_init (&ma);]])], [gl_have_pthread=yes LIBTHREAD=$gl_pthread LTLIBTHREAD=$gl_pthread LIBMULTITHREAD=$gl_pthread LTLIBMULTITHREAD=$gl_pthread]) LIBS=$save_LIBS test -n "$gl_have_pthread" && break done # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread" && test -z "$LIBTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. AC_CHECK_LIB([pthread], [pthread_kill], [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. case "$host_os" in solaris* | hpux*) AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) esac ]) elif test -z "$gl_have_pthread"; then # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB([pthread], [pthread_kill], [gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) if test -z "$gl_have_pthread"; then # For FreeBSD 4. AC_CHECK_LIB([c_r], [pthread_kill], [gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[thr_self();]])], [gl_have_solaristhread=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_SOLARIS_THREADS], [1], [Define if the old Solaris multithreading library can be used.]) if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_SOLARIS_THREADS_WEAK], [1], [Define if references to the old Solaris multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" AC_LIB_LINKFLAGS([pth]) gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS $LIBPTH" AC_LINK_IFELSE( [AC_LANG_PROGRAM([[#include ]], [[pth_self();]])], [gl_have_pth=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_PTH_THREADS], [1], [Define if the GNU Pth multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_PTH_THREADS_WEAK], [1], [Define if references to the GNU Pth multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows AC_DEFINE([USE_WINDOWS_THREADS], [1], [Define if the native Windows multithreading API can be used.]) fi ;; esac fi fi AC_MSG_CHECKING([for multithread API to use]) AC_MSG_RESULT([$gl_threads_api]) AC_SUBST([LIBTHREAD]) AC_SUBST([LTLIBTHREAD]) AC_SUBST([LIBMULTITHREAD]) AC_SUBST([LTLIBMULTITHREAD]) ]) AC_DEFUN([gl_THREADLIB], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([gl_THREADLIB_BODY]) ]) dnl gl_DISABLE_THREADS dnl ------------------ dnl Sets the gl_THREADLIB default so that threads are not used by default. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_DISABLE_THREADS], [ m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) ]) dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl dnl GNU Hurd/glibc posix dnl dnl Ubuntu 14.04 posix -pthread Y OK dnl dnl FreeBSD 5.3 posix -lc_r Y dnl posix -lkse ? Y dnl posix -lpthread ? Y dnl posix -lthr Y dnl dnl FreeBSD 5.2 posix -lc_r Y dnl posix -lkse Y dnl posix -lthr Y dnl dnl FreeBSD 4.0,4.10 posix -lc_r Y OK dnl dnl NetBSD 1.6 -- dnl dnl OpenBSD 3.4 posix -lpthread Y OK dnl dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) dnl dnl IRIX 6.5 posix -lpthread Y 0.5 dnl dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK dnl dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl dnl Any of the above pth -lpth 0.0 dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- dnl dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is dnl turned off: dnl OK if all three tests terminate OK, dnl 0.5 if the first test terminates OK but the second one loops endlessly, dnl 0.0 if the first test already loops endlessly. gnupg-1.4.20/m4/intl.m40000644000175000017500000002724312635262326011406 00000000000000# intl.m4 serial 27 (gettext-0.19) dnl Copyright (C) 1995-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2009. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([gt_GLIBC2])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([gl_VISIBILITY])dnl AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl AC_REQUIRE([gt_TYPE_WCHAR_T])dnl AC_REQUIRE([gt_TYPE_WINT_T])dnl AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gt_TYPE_INTMAX_T]) AC_REQUIRE([gt_PRINTF_POSIX]) AC_REQUIRE([gl_GLIBC21])dnl AC_REQUIRE([gl_XSIZE])dnl AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl AC_REQUIRE([gt_INTL_MACOSX])dnl AC_REQUIRE([gl_EXTERN_INLINE])dnl AC_REQUIRE([gt_GL_ATTRIBUTE])dnl dnl Support for automake's --enable-silent-rules. case "$enable_silent_rules" in yes) INTL_DEFAULT_VERBOSITY=0;; no) INTL_DEFAULT_VERBOSITY=1;; *) INTL_DEFAULT_VERBOSITY=1;; esac AC_SUBST([INTL_DEFAULT_VERBOSITY]) AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_CHECK_HEADERS([features.h stddef.h stdlib.h string.h]) AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \ snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). AC_CHECK_DECLS([_snprintf, _snwprintf], , , [#include ]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). AC_CHECK_DECLS([getc_unlocked], , , [#include ]) case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac AC_SUBST([HAVE_POSIX_PRINTF]) if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi AC_SUBST([HAVE_ASPRINTF]) if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi AC_SUBST([HAVE_SNPRINTF]) if test "$ac_cv_func_newlocale" = yes; then HAVE_NEWLOCALE=1 else HAVE_NEWLOCALE=0 fi AC_SUBST([HAVE_NEWLOCALE]) if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi AC_SUBST([HAVE_WPRINTF]) AM_LANGINFO_CODESET gt_LC_MESSAGES dnl Compilation on mingw and Cygwin needs special Makefile rules, because dnl 1. when we install a shared library, we must arrange to export dnl auxiliary pointer variables for every exported variable, dnl 2. when we install a shared library and a static library simultaneously, dnl the include file specifies __declspec(dllimport) and therefore we dnl must arrange to define the auxiliary pointer variables for the dnl exported variables _also_ in the static library. if test "$enable_shared" = yes; then case "$host_os" in mingw* | cygwin*) is_woe32dll=yes ;; *) is_woe32dll=no ;; esac else is_woe32dll=no fi WOE32DLL=$is_woe32dll AC_SUBST([WOE32DLL]) dnl On mingw and Cygwin, we can activate special Makefile rules which add dnl version information to the shared libraries and executables. case "$host_os" in mingw* | cygwin*) is_woe32=yes ;; *) is_woe32=no ;; esac WOE32=$is_woe32 AC_SUBST([WOE32]) if test $WOE32 = yes; then dnl Check for a program that compiles Windows resource files. AC_CHECK_TOOL([WINDRES], [windres]) fi dnl Determine whether when creating a library, "-lc" should be passed to dnl libtool or not. On many platforms, it is required for the libtool option dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool dnl in the *.la files - makes it impossible to create multithreaded programs, dnl because libtool also reorders the -lc to come before the -pthread, and dnl this disables pthread_create() . case "$host_os" in hpux*) LTLIBC="" ;; *) LTLIBC="-lc" ;; esac AC_SUBST([LTLIBC]) dnl Rename some macros and functions used for locking. AH_BOTTOM([ #define __libc_lock_t gl_lock_t #define __libc_lock_define gl_lock_define #define __libc_lock_define_initialized gl_lock_define_initialized #define __libc_lock_init gl_lock_init #define __libc_lock_lock gl_lock_lock #define __libc_lock_unlock gl_lock_unlock #define __libc_lock_recursive_t gl_recursive_lock_t #define __libc_lock_define_recursive gl_recursive_lock_define #define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized #define __libc_lock_init_recursive gl_recursive_lock_init #define __libc_lock_lock_recursive gl_recursive_lock_lock #define __libc_lock_unlock_recursive gl_recursive_lock_unlock #define glthread_in_use libintl_thread_in_use #define glthread_lock_init_func libintl_lock_init_func #define glthread_lock_lock_func libintl_lock_lock_func #define glthread_lock_unlock_func libintl_lock_unlock_func #define glthread_lock_destroy_func libintl_lock_destroy_func #define glthread_rwlock_init_multithreaded libintl_rwlock_init_multithreaded #define glthread_rwlock_init_func libintl_rwlock_init_func #define glthread_rwlock_rdlock_multithreaded libintl_rwlock_rdlock_multithreaded #define glthread_rwlock_rdlock_func libintl_rwlock_rdlock_func #define glthread_rwlock_wrlock_multithreaded libintl_rwlock_wrlock_multithreaded #define glthread_rwlock_wrlock_func libintl_rwlock_wrlock_func #define glthread_rwlock_unlock_multithreaded libintl_rwlock_unlock_multithreaded #define glthread_rwlock_unlock_func libintl_rwlock_unlock_func #define glthread_rwlock_destroy_multithreaded libintl_rwlock_destroy_multithreaded #define glthread_rwlock_destroy_func libintl_rwlock_destroy_func #define glthread_recursive_lock_init_multithreaded libintl_recursive_lock_init_multithreaded #define glthread_recursive_lock_init_func libintl_recursive_lock_init_func #define glthread_recursive_lock_lock_multithreaded libintl_recursive_lock_lock_multithreaded #define glthread_recursive_lock_lock_func libintl_recursive_lock_lock_func #define glthread_recursive_lock_unlock_multithreaded libintl_recursive_lock_unlock_multithreaded #define glthread_recursive_lock_unlock_func libintl_recursive_lock_unlock_func #define glthread_recursive_lock_destroy_multithreaded libintl_recursive_lock_destroy_multithreaded #define glthread_recursive_lock_destroy_func libintl_recursive_lock_destroy_func #define glthread_once_func libintl_once_func #define glthread_once_singlethreaded libintl_once_singlethreaded #define glthread_once_multithreaded libintl_once_multithreaded ]) ]) dnl Checks for the core files of the intl subdirectory: dnl dcigettext.c dnl eval-plural.h dnl explodename.c dnl finddomain.c dnl gettextP.h dnl gmo.h dnl hash-string.h hash-string.c dnl l10nflist.c dnl libgnuintl.h.in (except the *printf stuff) dnl loadinfo.h dnl loadmsgcat.c dnl localealias.c dnl log.c dnl plural-exp.h plural-exp.c dnl plural.y dnl Used by libglocale. AC_DEFUN([gt_INTL_SUBDIR_CORE], [ AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_REQUIRE([gl_LOCK])dnl AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]], [[]])], [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1], [Define to 1 if the compiler understands __builtin_expect.])]) AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h]) AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \ stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \ argz_stringify argz_next __fsetlocking]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). AC_CHECK_DECLS([feof_unlocked, fgets_unlocked], , , [#include ]) AM_ICONV dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-2.7 for %define api.pure. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 2.[7-9]* | [3-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) dnl Copies _GL_UNUSED and _GL_ATTRIBUTE_PURE definitions from dnl gnulib-common.m4 as a fallback, if the project isn't using Gnulib. AC_DEFUN([gt_GL_ATTRIBUTE], [ m4_ifndef([gl_[]COMMON], AH_VERBATIM([gt_gl_attribute], [/* Define as a marker that can be attached to declarations that might not be used. This helps to reduce warnings, such as from GCC -Wunused-parameter. */ #ifndef _GL_UNUSED # if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_UNUSED __attribute__ ((__unused__)) # else # define _GL_UNUSED # endif #endif /* The __pure__ attribute was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif ]))]) gnupg-1.4.20/m4/inttypes-pri.m40000644000175000017500000000234512635262326013103 00000000000000# inttypes-pri.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1997-2002, 2006, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.53]) # Define PRI_MACROS_BROKEN if exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_CHECK_HEADERS([inttypes.h]) if test $ac_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], [gt_cv_inttypes_pri_broken], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #ifdef PRId32 char *p = PRId32; #endif ]], [[]])], [gt_cv_inttypes_pri_broken=no], [gt_cv_inttypes_pri_broken=yes]) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1], [Define if exists and defines unusable PRI* macros.]) PRI_MACROS_BROKEN=1 else PRI_MACROS_BROKEN=0 fi AC_SUBST([PRI_MACROS_BROKEN]) ]) gnupg-1.4.20/m4/longlong.m40000644000175000017500000001120312635262326012244 00000000000000# longlong.m4 serial 17 dnl Copyright (C) 1999-2007, 2009-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_LONG_LONG_INT if 'long long int' works. # This fixes a bug in Autoconf 2.61, and can be faster # than what's in Autoconf 2.62 through 2.68. # Note: If the type 'long long int' exists but is only 32 bits large # (as on some very old compilers), HAVE_LONG_LONG_INT will not be # defined. In this case you can treat 'long long int' like 'long int'. AC_DEFUN([AC_TYPE_LONG_LONG_INT], [ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], [ac_cv_type_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_long_long_int = yes; then dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. dnl If cross compiling, assume the bug is not important, since dnl nobody cross compiles for this platform as far as we know. AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[@%:@include @%:@ifndef LLONG_MAX @%:@ define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) @%:@ define LLONG_MAX (HALF - 1 + HALF) @%:@endif]], [[long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0;]])], [], [ac_cv_type_long_long_int=no], [:]) fi fi]) if test $ac_cv_type_long_long_int = yes; then AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) fi ]) # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. # This fixes a bug in Autoconf 2.61, and can be faster # than what's in Autoconf 2.62 through 2.68. # Note: If the type 'unsigned long long int' exists but is only 32 bits # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT # will not be defined. In this case you can treat 'unsigned long long int' # like 'unsigned long int'. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], [ AC_CACHE_CHECK([for unsigned long long int], [ac_cv_type_unsigned_long_long_int], [ac_cv_type_unsigned_long_long_int=yes if test "x${ac_cv_prog_cc_c99-no}" = xno; then AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [], [ac_cv_type_unsigned_long_long_int=no]) fi]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) fi ]) # Expands to a C program that can be used to test for simultaneous support # of 'long long' and 'unsigned long long'. We don't want to say that # 'long long' is available if 'unsigned long long' is not, or vice versa, # because too many programs rely on the symmetry between signed and unsigned # integer types (excluding 'bool'). AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], [ AC_LANG_PROGRAM( [[/* For now, do not test the preprocessor; as of 2007 there are too many implementations with broken preprocessors. Perhaps this can be revisited in 2012. In the meantime, code should not expect #if to work with literals wider than 32 bits. */ /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63;]], [[/* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull));]]) ]) gnupg-1.4.20/m4/glibc21.m40000644000175000017500000000161312635262326011654 00000000000000# glibc21.m4 serial 5 dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2014 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.1 or newer, or uClibc. # From Bruno Haible. AC_DEFUN([gl_GLIBC21], [ AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc], [ac_cv_gnu_library_2_1], [AC_EGREP_CPP([Lucky], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif #ifdef __UCLIBC__ Lucky user #endif ], [ac_cv_gnu_library_2_1=yes], [ac_cv_gnu_library_2_1=no]) ] ) AC_SUBST([GLIBC21]) GLIBC21="$ac_cv_gnu_library_2_1" ] ) gnupg-1.4.20/m4/po.m40000644000175000017500000004503712635216116011053 00000000000000# po.m4 serial 22 (gettext-0.19) dnl Copyright (C) 1995-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <]) # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [[#include ]], [[ #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ]])], [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], [Define if the defines PTHREAD_MUTEX_RECURSIVE.])]) fi gl_PREREQ_LOCK ]) # Prerequisites of lib/glthread/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [:]) gnupg-1.4.20/m4/libcurl.m40000644000175000017500000002400612635262326012066 00000000000000# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION], # [ACTION-IF-YES], [ACTION-IF-NO]) # ---------------------------------------------------------- # David Shaw Jan-16-2007 # # Checks for libcurl. DEFAULT-ACTION is the string yes or no to # specify whether to default to --with-libcurl or --without-libcurl. # If not supplied, DEFAULT-ACTION is yes. MINIMUM-VERSION is the # minimum version of libcurl to accept. Pass the version as a regular # version number like 7.10.1. If not supplied, any version is # accepted. ACTION-IF-YES is a list of shell commands to run if # libcurl was successfully found and passed the various tests. # ACTION-IF-NO is a list of shell commands that are run otherwise. # Note that using --without-libcurl does run ACTION-IF-NO. # # This macro #defines HAVE_LIBCURL if a working libcurl setup is # found, and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary # values. Other useful defines are LIBCURL_FEATURE_xxx where xxx are # the various features supported by libcurl, and LIBCURL_PROTOCOL_yyy # where yyy are the various protocols supported by libcurl. Both xxx # and yyy are capitalized. See the list of AH_TEMPLATEs at the top of # the macro for the complete list of possible defines. Shell # variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also # defined to 'yes' for those features and protocols that were found. # Note that xxx and yyy keep the same capitalization as in the # curl-config list (e.g. it's "HTTP" and not "http"). # # Users may override the detected values by doing something like: # LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure # # For the sake of sanity, this macro assumes that any libcurl that is # found is after version 7.7.2, the first version that included the # curl-config script. Note that it is very important for people # packaging binary versions of libcurl to include this script! # Without curl-config, we can only guess what protocols are available, # or use curl_version_info to figure it out at runtime. AC_DEFUN([LIBCURL_CHECK_CONFIG], [ AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL]) AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4]) AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6]) AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz]) AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS]) AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN]) AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI]) AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM]) AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP]) AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS]) AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP]) AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS]) AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE]) AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET]) AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP]) AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT]) AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP]) AC_ARG_WITH(libcurl, AC_HELP_STRING([--with-libcurl=DIR],[look for the curl library in DIR]), [_libcurl_with=$withval],[_libcurl_with=m4_if([$1],,[yes],[$1])]) if test "$_libcurl_with" != "no" ; then AC_PROG_AWK _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'" # More recent versions of curl-config have a direct --vernum # option, but we'd like this code to work with older versions as # well, so just convert --version. _libcurl_vernum_parse="eval $AWK '{printf \"0x%06X\",\$NF}'" _libcurl_try_link=yes if test -d "$_libcurl_with" ; then LIBCURL_CPPFLAGS="-I$withval/include" _libcurl_ldflags="-L$withval/lib" AC_PATH_PROG([_libcurl_config],["$withval/bin/curl-config"]) else AC_PATH_PROG([_libcurl_config],[curl-config]) fi if test x$_libcurl_config != "x" ; then AC_CACHE_CHECK([for the version of libcurl], [libcurl_cv_lib_curl_version], [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`]) _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse` _libcurl_wanted=`echo m4_if([$2],,[0],[$2]) | $_libcurl_version_parse` if test $_libcurl_wanted -gt 0 ; then AC_CACHE_CHECK([for libcurl >= version $2], [libcurl_cv_lib_version_ok], [ if test $_libcurl_version -ge $_libcurl_wanted ; then libcurl_cv_lib_version_ok=yes else libcurl_cv_lib_version_ok=no fi ]) fi if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then if test x"$LIBCURL_CPPFLAGS" = "x" ; then LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` fi if test x"$LIBCURL" = "x" ; then LIBCURL=`$_libcurl_config --libs` # This is so silly, but Apple actually has a bug in their # curl-config script. Fixed in Tiger, but there are still # lots of Panther installs around. case "${host}" in powerpc-apple-darwin7*) LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'` ;; esac fi # All curl-config scripts support --feature _libcurl_features=`$_libcurl_config --feature` # Is it modern enough to have --protocols? (7.12.4) if test $_libcurl_version -ge 461828 ; then _libcurl_protocols=`$_libcurl_config --protocols` fi else _libcurl_try_link=no fi unset _libcurl_wanted fi if test $_libcurl_try_link = yes ; then # we didn't find curl-config, so let's see if the user-supplied # link line (or failing that, "-lcurl") is enough. LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"} AC_CACHE_CHECK([whether libcurl is usable], [libcurl_cv_lib_curl_usable], [ _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS" _libcurl_save_libs=$LIBS LIBS="$LIBCURL $LIBS" AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ /* Try and use a few common options to force a failure if we are missing symbols or can't link. */ int x; curl_easy_setopt(NULL,CURLOPT_URL,NULL); x=CURL_ERROR_SIZE; x=CURLOPT_WRITEFUNCTION; x=CURLOPT_FILE; x=CURLOPT_ERRORBUFFER; x=CURLOPT_STDERR; x=CURLOPT_VERBOSE; ]])],libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no) CPPFLAGS=$_libcurl_save_cppflags LIBS=$_libcurl_save_libs unset _libcurl_save_cppflags unset _libcurl_save_libs ]) if test $libcurl_cv_lib_curl_usable = yes ; then _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" _libcurl_save_libs=$LIBS LIBS="$LIBS $LIBCURL" # Check for some libcurl functions that aren't in all # versions. AC_CHECK_FUNCS([curl_free curl_easy_escape curl_easy_unescape]) AH_BOTTOM([ #ifdef HAVE_LIBCURL /* Define curl_free() via free() if our version of curl lacks curl_free() */ #if !defined(curl_free) && !defined(HAVE_CURL_FREE) #define curl_free(a) free((a)) #endif /* Define curl_easy_escape() via curl_escape() if our version of curl lacks curl_easy_escape() */ #if !defined(curl_easy_escape) && !defined(HAVE_CURL_EASY_ESCAPE) #define curl_easy_escape(a,b,c) curl_escape((b),(c)) #endif /* Define curl_easy_unescape() via curl_unescape() if our version of curl lacks curl_easy_unescape() */ #if !defined(curl_easy_unescape) && !defined(HAVE_CURL_EASY_UNESCAPE) #define curl_easy_unescape(a,b,c) curl_unescape((b),(c)) #endif #endif /* HAVE_LIBCURL */ ]) CPPFLAGS=$_libcurl_save_cppflags LIBS=$_libcurl_save_libs unset _libcurl_save_cppflags unset _libcurl_save_libs AC_DEFINE(HAVE_LIBCURL,1, [Define to 1 if you have a functional curl library.]) AC_SUBST(LIBCURL_CPPFLAGS) AC_SUBST(LIBCURL) _libcurl_vernum=`echo $_libcurl_version | $_libcurl_vernum_parse` AC_DEFINE_UNQUOTED(LIBCURL_VERNUM,$_libcurl_vernum,[The version of the libcurl library in packed hex form]) for _libcurl_feature in $_libcurl_features ; do AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1]) eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes done if test "x$_libcurl_protocols" = "x" ; then # We don't have --protocols, so just assume that all # protocols are available _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT" if test x$libcurl_feature_SSL = xyes ; then _libcurl_protocols="$_libcurl_protocols HTTPS" # FTPS wasn't standards-compliant until version # 7.11.0 if test $_libcurl_version -ge 461568; then _libcurl_protocols="$_libcurl_protocols FTPS" fi fi fi for _libcurl_protocol in $_libcurl_protocols ; do AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1]) eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes done else unset LIBCURL unset LIBCURL_CPPFLAGS fi fi unset _libcurl_try_link unset _libcurl_version_parse unset _libcurl_config unset _libcurl_feature unset _libcurl_features unset _libcurl_protocol unset _libcurl_protocols unset _libcurl_version unset _libcurl_vernum unset _libcurl_ldflags fi if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then # This is the IF-NO path m4_if([$4],,:,[$4]) else # This is the IF-YES path m4_if([$3],,:,[$3]) fi unset _libcurl_with ])dnl gnupg-1.4.20/m4/ChangeLog-20110000644000175000017500000002040312635262326012320 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-08-09 Werner Koch * libcurl.m4: s/ifelse/m4_if/. 2009-07-21 Werner Koch * estream.m4: New. Taken from libestream. 2007-12-17 Werner Koch * ldap.m4: Test for ldap_start_tls_sA. 2007-10-23 gettextize * gettext.m4: Upgrade to gettext-0.16.1. * iconv.m4: Upgrade to gettext-0.16.1. * lib-ld.m4: Upgrade to gettext-0.16.1. * lib-link.m4: Upgrade to gettext-0.16.1. * lib-prefix.m4: Upgrade to gettext-0.16.1. * nls.m4: Upgrade to gettext-0.16.1. * po.m4: Upgrade to gettext-0.16.1. * progtest.m4: Upgrade to gettext-0.16.1. * codeset.m4: Upgrade to gettext-0.16.1. * glibc2.m4: New file, from gettext-0.16.1. * glibc21.m4: Upgrade to gettext-0.16.1. * intdiv0.m4: Upgrade to gettext-0.16.1. * intl.m4: New file, from gettext-0.16.1. * intldir.m4: New file, from gettext-0.16.1. * intmax.m4: Upgrade to gettext-0.16.1. * inttypes_h.m4: Upgrade to gettext-0.16.1. * inttypes-pri.m4: Upgrade to gettext-0.16.1. * lcmessage.m4: Upgrade to gettext-0.16.1. * lock.m4: New file, from gettext-0.16.1. * longdouble.m4: Upgrade to gettext-0.16.1. * longlong.m4: Upgrade to gettext-0.16.1. * printf-posix.m4: Upgrade to gettext-0.16.1. * size_max.m4: Upgrade to gettext-0.16.1. * stdint_h.m4: Upgrade to gettext-0.16.1. * uintmax_t.m4: Upgrade to gettext-0.16.1. * ulonglong.m4: Upgrade to gettext-0.16.1. * visibility.m4: New file, from gettext-0.16.1. * wchar_t.m4: Upgrade to gettext-0.16.1. * wint_t.m4: Upgrade to gettext-0.16.1. * xsize.m4: Upgrade to gettext-0.16.1. * Makefile.am (EXTRA_DIST): Add the new files. 2007-08-02 David Shaw * ldap.m4: Revert the mozldap change: mozldap has some significant differences around TLS compared to OpenLDAP, and will segfault (!) if the NSS library is not initialized first. Nothing impossible to do, but I think I'll wait until someone actually asks us for mozldap support. 2007-07-27 David Shaw * ldap.m4: If we don't find ldap or winldap, try for mozldap. 2007-01-16 David Shaw * libcurl.m4: Check for curl_easy_escape() and curl_easy_unescape(). Replace with curl_escape() and curl_unescape() if libcurl doesn't have it. 2006-10-02 Werner Koch * autobuild.m4: New. 2006-07-12 David Shaw * tar-ustar.m4: Use dd instead of strings as it's more likely to be around. Suggested by Nelson H. F. Beebe. 2006-07-11 David Shaw * tar-ustar.m4: Not all greps know the -q (quiet) flag, so redirect to /dev/null instead. * tar-ustar.m4: Pass tar data through strings so that greps that don't grep in binary files (Solaris) can detect the string. Noted by Mark Davies. 2006-06-25 Werner Koch * Makefile.am: Added noexecstack.m4 and ldap.m4 2006-05-22 Marcus Brinkmann * noexecstack.m4: New file. 2006-05-09 David Shaw * libcurl.m4: Fix mistaken AC_SUBST when curl is not found. 2006-01-17 David Shaw * libcurl.m4: Add IDN, SSPI, NTLM, and TFTP defines. 2006-01-16 David Shaw * libcurl.m4: Remove GOPHER, as that is not supported in libcurl any longer. 2005-11-05 David Shaw * libusb.m4: Check for libusb-config and if we find it, use --libs and --cflags. This is needed for OS X since libusb brings in dependencies to various Apple libraries. 2005-10-21 David Shaw * readline.m4: Check for rl_completion_func_t and rl_completion_matches. 2005-08-05 David Shaw * ldap.m4: If a PATH is given to --with-ldap, bias directory search towards the given path for includes and libraries. Noted by Jason Harris. * Makefile.am: Distribute tar-ustar.m4. * libcurl.m4: If a PATH is given to --with-libcurl, look for curl-config in that path. Bias directory search towards the given path for includes and libraries. 2005-08-04 David Shaw * tar-ustar.m4: New. Check for a tar that creates USTAR format tar files. 2005-07-20 David Shaw * libcurl.m4: Check that our libcurl has curl_version_info(CURLINFO_NOW). 2005-06-22 David Shaw * libcurl.m4: Only do the OS X linker fix on Panther. Tiger has a clean curl-config. 2005-04-24 David Shaw * libcurl.m4: Add a check for curl_free() since older versions of libcurl don't have it. Substitute free() as an alternative. 2005-03-21 David Shaw * readline.m4: Check for completion functionality. * ldap.m4: Comments. 2005-03-16 David Shaw * ldap.m4: New. Moved from configure.ac. 2005-02-28 David Shaw * libcurl.m4: Use $LIBS instead of $LDFLAGS. This should help build problems on Mingw32. 2005-02-03 David Shaw * libcurl.m4: More comments. 2005-01-24 David Shaw * libcurl.m4: All versions of curl-config support --feature. 2005-01-22 David Shaw * libcurl.m4: Note that FTPS existed, but wasn't fully standards-compliant until version 7.11.0. 2005-01-17 David Shaw * libcurl.m4: Use LIBCURL_CPPFLAGS and not LIBCURL_INCLUDES to match automake syntax. 2005-01-03 David Shaw * Makefile.am, libusb.m4: New libusb check macro. 2004-12-24 David Shaw * libcurl.m4: Rewrite this to use the new --protocols flag I gave to the libcurl people. * Makefile.am: Add readline.m4 and libcurl.m4. 2004-12-23 David Shaw * libcurl.m4: OSX has a problem with their curl-config script. * readline.m4: Make sure that readline is modern enough to understand rl_catch_signals. * libcurl.m4: Don't require curl-config to be present since it seems some binary packages don't include it. Allow users to specify LIBCURL and LIBCURL_INCLUDES for us. 2004-12-22 David Shaw * libcurl.m4: Be much more strict with libcurl by trying to compile and link a test program that uses the features that we need. 2004-12-21 David Shaw * libcurl.m4: New. 2004-12-18 David Shaw * readline.m4: New. 2004-07-27 gettextize * gettext.m4: Upgrade to gettext-0.14.1. * intmax.m4: New file, from gettext-0.14.1. * lib-ld.m4: Upgrade to gettext-0.14.1. * lib-prefix.m4: Upgrade to gettext-0.14.1. * longdouble.m4: New file, from gettext-0.14.1. * longlong.m4: New file, from gettext-0.14.1. * po.m4: Upgrade to gettext-0.14.1. * printf-posix.m4: New file, from gettext-0.14.1. * signed.m4: New file, from gettext-0.14.1. * size_max.m4: New file, from gettext-0.14.1. * ulonglong.m4: Upgrade to gettext-0.14.1. * wchar_t.m4: New file, from gettext-0.14.1. * wint_t.m4: New file, from gettext-0.14.1. * xsize.m4: New file, from gettext-0.14.1. * Makefile.am (EXTRA_DIST): Add the new files. 2003-10-25 gettextize * codeset.m4: New file, from gettext-0.12.1. * gettext.m4: New file, from gettext-0.12.1. * glibc21.m4: New file, from gettext-0.12.1. * iconv.m4: New file, from gettext-0.12.1. * intdiv0.m4: New file, from gettext-0.12.1. * inttypes.m4: New file, from gettext-0.12.1. * inttypes_h.m4: New file, from gettext-0.12.1. * inttypes-pri.m4: New file, from gettext-0.12.1. * isc-posix.m4: New file, from gettext-0.12.1. * lcmessage.m4: New file, from gettext-0.12.1. * lib-ld.m4: New file, from gettext-0.12.1. * lib-link.m4: New file, from gettext-0.12.1. * lib-prefix.m4: New file, from gettext-0.12.1. * nls.m4: New file, from gettext-0.12.1. * po.m4: New file, from gettext-0.12.1. * progtest.m4: New file, from gettext-0.12.1. * stdint_h.m4: New file, from gettext-0.12.1. * uintmax_t.m4: New file, from gettext-0.12.1. * ulonglong.m4: New file, from gettext-0.12.1. * Makefile.am: New file. gnupg-1.4.20/m4/fcntl-o.m40000644000175000017500000001107412635262326011775 00000000000000# fcntl-o.m4 serial 4 dnl Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc to define O_NOATIME and O_NOFOLLOW. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include #include #if HAVE_UNISTD_H # include #else /* on Windows with MSVC */ # include # include # defined sleep(n) _sleep ((n) * 1000) #endif #include #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], [gl_cv_header_working_fcntl_h=cross-compiling])]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], [Define to 1 if O_NOATIME works.]) case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], [Define to 1 if O_NOFOLLOW works.]) ]) gnupg-1.4.20/m4/gettext.m40000644000175000017500000003561512635216116012122 00000000000000# gettext.m4 serial 66 (gettext-0.18.2) dnl Copyright (C) 1995-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) gnupg-1.4.20/m4/visibility.m40000644000175000017500000000642712635262326012630 00000000000000# visibility.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2005, 2008, 2010-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Tests whether the compiler supports the command-line option dnl -fvisibility=hidden and the function and variable attributes dnl __attribute__((__visibility__("hidden"))) and dnl __attribute__((__visibility__("default"))). dnl Does *not* test for __visibility__("protected") - which has tricky dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on dnl Mac OS X. dnl Does *not* test for __visibility__("internal") - which has processor dnl dependent semantics. dnl Does *not* test for #pragma GCC visibility push(hidden) - which is dnl "really only recommended for legacy code". dnl Set the variable CFLAG_VISIBILITY. dnl Defines and sets the variable HAVE_VISIBILITY. AC_DEFUN([gl_VISIBILITY], [ AC_REQUIRE([AC_PROG_CC]) CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then dnl First, check whether -Werror can be added to the command line, or dnl whether it leads to an error because of some other option that the dnl user has put into $CC $CFLAGS $CPPFLAGS. AC_MSG_CHECKING([whether the -Werror option is usable]) AC_CACHE_VAL([gl_cv_cc_vis_werror], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_vis_werror=yes], [gl_cv_cc_vis_werror=no]) CFLAGS="$gl_save_CFLAGS"]) AC_MSG_RESULT([$gl_cv_cc_vis_werror]) dnl Now check whether visibility declarations are supported. AC_MSG_CHECKING([for simple visibility declarations]) AC_CACHE_VAL([gl_cv_cc_visibility], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" dnl We use the option -Werror and a function dummyfunc, because on some dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning dnl "visibility attribute not supported in this configuration; ignored" dnl at the first function definition in every compilation unit, and we dnl don't want to use the option in this case. if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void) {} ]], [[]])], [gl_cv_cc_visibility=yes], [gl_cv_cc_visibility=no]) CFLAGS="$gl_save_CFLAGS"]) AC_MSG_RESULT([$gl_cv_cc_visibility]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi AC_SUBST([CFLAG_VISIBILITY]) AC_SUBST([HAVE_VISIBILITY]) AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ]) gnupg-1.4.20/m4/inttypes_h.m40000644000175000017500000000177412635262326012627 00000000000000# inttypes_h.m4 serial 10 dnl Copyright (C) 1997-2004, 2006, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_inttypes_h=yes], [gl_cv_header_inttypes_h=no])]) if test $gl_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) gnupg-1.4.20/m4/wchar_t.m40000644000175000017500000000146212635262326012062 00000000000000# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) gnupg-1.4.20/m4/readline.m40000644000175000017500000000367712635262326012230 00000000000000dnl Check for readline and dependencies dnl Copyright (C) 2004, 2005 Free Software Foundation, Inc. dnl dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl Defines HAVE_LIBREADLINE to 1 if a working readline setup is dnl found, and sets @LIBREADLINE@ to the necessary libraries. AC_DEFUN([GNUPG_CHECK_READLINE], [ AC_ARG_WITH(readline, AC_HELP_STRING([--with-readline=DIR], [look for the readline library in DIR]), [_do_readline=$withval],[_do_readline=yes]) if test "$_do_readline" != "no" ; then if test -d "$withval" ; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi for _termcap in "" "-ltermcap" "-lcurses" "-lncurses" ; do _readline_save_libs=$LIBS _combo="-lreadline${_termcap:+ $_termcap}" LIBS="$LIBS $_combo" AC_MSG_CHECKING([whether readline via \"$_combo\" is present and sane]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include #include #include ]],[[ rl_completion_func_t *completer; add_history("foobar"); rl_catch_signals=0; rl_inhibit_completion=0; rl_attempted_completion_function=NULL; rl_completion_matches(NULL,NULL); ]])],_found_readline=yes,_found_readline=no) AC_MSG_RESULT([$_found_readline]) LIBS=$_readline_save_libs if test $_found_readline = yes ; then AC_DEFINE(HAVE_LIBREADLINE,1, [Define to 1 if you have a fully functional readline library.]) AC_SUBST(LIBREADLINE,$_combo) break fi done unset _termcap unset _readline_save_libs unset _combo unset _found_readline fi ])dnl gnupg-1.4.20/m4/intlmacosx.m40000644000175000017500000000475312635262326012622 00000000000000# intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) gnupg-1.4.20/m4/printf-posix.m40000644000175000017500000000305312635262326013073 00000000000000# printf-posix.m4 serial 6 (gettext-0.18.2) dnl Copyright (C) 2003, 2007, 2009-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether the printf() function supports POSIX/XSI format strings with dnl positions. AC_DEFUN([gt_PRINTF_POSIX], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings], gt_cv_func_printf_posix, [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); }]])], [gt_cv_func_printf_posix=yes], [gt_cv_func_printf_posix=no], [ AC_EGREP_CPP([notposix], [ #if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ notposix #endif ], [gt_cv_func_printf_posix="guessing no"], [gt_cv_func_printf_posix="guessing yes"]) ]) ]) case $gt_cv_func_printf_posix in *yes) AC_DEFINE([HAVE_POSIX_PRINTF], [1], [Define if your printf() function supports format strings with positions.]) ;; esac ]) gnupg-1.4.20/m4/ulonglong.m40000644000175000017500000000353212635262326012437 00000000000000# ulonglong.m4 serial 6 dnl Copyright (C) 1999-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. # This fixes a bug in Autoconf 2.60, but can be removed once we # assume 2.61 everywhere. # Note: If the type 'unsigned long long int' exists but is only 32 bits # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT # will not be defined. In this case you can treat 'unsigned long long int' # like 'unsigned long int'. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], [ AC_CACHE_CHECK([for unsigned long long int], [ac_cv_type_unsigned_long_long_int], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[unsigned long long int ull = 18446744073709551615ULL; typedef int a[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63;]], [[unsigned long long int ullmax = 18446744073709551615ull; return (ull << 63 | ull >> 63 | ull << i | ull >> i | ullmax / ull | ullmax % ull);]])], [ac_cv_type_unsigned_long_long_int=yes], [ac_cv_type_unsigned_long_long_int=no])]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1, [Define to 1 if the system has the type `unsigned long long int'.]) fi ]) # This macro is obsolescent and should go away soon. AC_DEFUN([gl_AC_TYPE_UNSIGNED_LONG_LONG], [ AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) ac_cv_type_unsigned_long_long=$ac_cv_type_unsigned_long_long_int if test $ac_cv_type_unsigned_long_long = yes; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, [Define if you have the 'unsigned long long' type.]) fi ]) gnupg-1.4.20/m4/noexecstack.m40000644000175000017500000000421112635262326012735 00000000000000# noexecstack.m4 dnl Copyright (C) 1995-2006 Free Software Foundation, Inc. dnl dnl This library is free software; you can redistribute it and/or dnl modify it under the terms of the GNU Lesser General Public dnl License as published by the Free Software Foundation; either dnl version 2.1 of the License, or (at your option) any later version. dnl dnl This library is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl Lesser General Public License for more details. dnl dnl You should have received a copy of the GNU Lesser General Public dnl License along with this library; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA dnl Checks whether the stack can be marked nonexecutable by passing an dnl option to the C-compiler when acting on .s files. Returns that dnl option in NOEXECSTACK_FLAGS. dnl This macro is adapted from one found in GLIBC-2.3.5. AC_DEFUN([CL_AS_NOEXECSTACK],[ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AM_PROG_AS]) AC_MSG_CHECKING([whether non excutable stack support is requested]) AC_ARG_ENABLE(noexecstack, AC_HELP_STRING([--enable-noexecstack], [enable non executable stack support (gcc only)]), noexecstack_support=$enableval, noexecstack_support=no) AC_MSG_RESULT($noexecstack_support) AC_CACHE_CHECK([whether assembler supports --noexecstack option], cl_cv_as_noexecstack, [dnl cat > conftest.c </dev/null]) \ && grep -q .note.GNU-stack conftest.s \ && AC_TRY_COMMAND([${CCAS} $CCASFLAGS $CPPFLAGS -Wa,--noexecstack -c -o conftest.o conftest.s >/dev/null]) then cl_cv_as_noexecstack=yes else cl_cv_as_noexecstack=no fi rm -f conftest*]) if test "$noexecstack_support" = yes -a "$cl_cv_as_noexecstack" = yes; then NOEXECSTACK_FLAGS="-Wa,--noexecstack" else NOEXECSTACK_FLAGS= fi AC_SUBST(NOEXECSTACK_FLAGS) ]) gnupg-1.4.20/m4/lib-ld.m40000644000175000017500000000714312635216116011574 00000000000000# lib-ld.m4 serial 6 dnl Copyright (C) 1996-2003, 2009-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 /dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`echo "$ac_prog"| sed 's%\\\\%/%g'` while echo "$ac_prog" | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL([acl_cv_path_LD], [if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 has the 'wint_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) fi ]) gnupg-1.4.20/m4/ldap.m40000644000175000017500000000663112635262326011356 00000000000000dnl Check for LDAP dnl Copyright (C) 2005 Free Software Foundation, Inc. dnl dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl Defines @GPGKEYS_LDAP@ to a executable name if a working ldap dnl setup is found, and sets @LDAPLIBS@ to the necessary libraries. AC_DEFUN([GNUPG_CHECK_LDAP], [ # Try and link a LDAP test program to weed out unusable LDAP # libraries. -lldap [-llber [-lresolv]] is for older OpenLDAPs. # OpenLDAP, circa 1999, was terrible with creating weird dependencies. # If all else fails, the user can play guess-the-dependency by using # something like ./configure LDAPLIBS="-Lfoo -lbar" AC_ARG_WITH(ldap, AC_HELP_STRING([--with-ldap=DIR],[look for the LDAP library in DIR]), [_ldap_with=$withval]) if test x$_ldap_with != xno ; then if test -d "$withval" ; then LDAP_CPPFLAGS="-I$withval/include" LDAP_LDFLAGS="-L$withval/lib" fi _ldap_save_cppflags=$CPPFLAGS CPPFLAGS="${LDAP_CPPFLAGS} ${CPPFLAGS}" _ldap_save_ldflags=$LDFLAGS LDFLAGS="${LDAP_LDFLAGS} ${LDFLAGS}" for MY_LDAPLIBS in ${LDAPLIBS+"$LDAPLIBS"} "-lldap" "-lldap -llber" "-lldap -llber -lresolv" "-lwldap32"; do _ldap_save_libs=$LIBS LIBS="$MY_LDAPLIBS $1 $LIBS" AC_MSG_CHECKING([whether LDAP via \"$MY_LDAPLIBS\" is present and sane]) AC_TRY_LINK([ #ifdef _WIN32 #include #include #else #include #endif ],[ldap_open("foobar",1234);], [gnupg_cv_func_ldap_init=yes],[gnupg_cv_func_ldap_init=no]) AC_MSG_RESULT([$gnupg_cv_func_ldap_init]) if test $gnupg_cv_func_ldap_init = no; then AC_MSG_CHECKING([whether I can make LDAP be sane with lber.h]) AC_TRY_LINK([#include #include ],[ldap_open("foobar",1234);], [gnupg_cv_func_ldaplber_init=yes],[gnupg_cv_func_ldaplber_init=no]) AC_MSG_RESULT([$gnupg_cv_func_ldaplber_init]) fi if test "$gnupg_cv_func_ldaplber_init" = yes ; then AC_DEFINE(NEED_LBER_H,1,[Define if the LDAP library requires including lber.h before ldap.h]) fi if test "$gnupg_cv_func_ldap_init" = yes || \ test "$gnupg_cv_func_ldaplber_init" = yes ; then LDAPLIBS="$LDAP_LDFLAGS $MY_LDAPLIBS" GPGKEYS_LDAP="gpgkeys_ldap$EXEEXT" AC_CHECK_FUNCS(ldap_get_option ldap_set_option) # The extra test for ldap_start_tls_sA is for W32 because # that is the actual function in the library. AC_CHECK_FUNCS(ldap_start_tls_s ldap_start_tls_sA) if test "$ac_cv_func_ldap_get_option" != yes ; then AC_MSG_CHECKING([whether LDAP supports ld_errno]) AC_TRY_LINK([#include ],[LDAP *ldap; ldap->ld_errno;], [gnupg_cv_func_ldap_ld_errno=yes], [gnupg_cv_func_ldap_ld_errno=no]) AC_MSG_RESULT([$gnupg_cv_func_ldap_ld_errno]) if test "$gnupg_cv_func_ldap_ld_errno" = yes ; then AC_DEFINE(HAVE_LDAP_LD_ERRNO,1,[Define if the LDAP library supports ld_errno]) fi fi fi LIBS=$_ldap_save_libs if test "$GPGKEYS_LDAP" != "" ; then break; fi done AC_SUBST(GPGKEYS_LDAP) AC_SUBST(LDAPLIBS) AC_SUBST(LDAP_CPPFLAGS) CPPFLAGS=$_ldap_save_cppflags LDFLAGS=$_ldap_save_ldflags fi ])dnl gnupg-1.4.20/m4/Makefile.am0000644000175000017500000000111612635262326012221 00000000000000EXTRA_DIST = glibc2.m4 intl.m4 intldir.m4 lock.m4 visibility.m4 intmax.m4 longdouble.m4 longlong.m4 printf-posix.m4 \ signed.m4 size_max.m4 wchar_t.m4 wint_t.m4 xsize.m4 \ codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 \ inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 \ lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 nls.m4 \ po.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 \ readline.m4 libcurl.m4 libusb.m4 tar-ustar.m4 \ ldap.m4 \ noexecstack.m4 autobuild.m4 estream.m4 gnupg-1.4.20/m4/Makefile.in0000644000175000017500000003556712635457153012257 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = m4 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = glibc2.m4 intl.m4 intldir.m4 lock.m4 visibility.m4 intmax.m4 longdouble.m4 longlong.m4 printf-posix.m4 \ signed.m4 size_max.m4 wchar_t.m4 wint_t.m4 xsize.m4 \ codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 \ inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 \ lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 nls.m4 \ po.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 \ readline.m4 libcurl.m4 libusb.m4 tar-ustar.m4 \ ldap.m4 \ noexecstack.m4 autobuild.m4 estream.m4 all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu m4/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/m4/lib-link.m40000644000175000017500000010044312635216116012127 00000000000000# lib-link.m4 serial 26 (gettext-0.18.2) dnl Copyright (C) 2001-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$3]], [[$4]])], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_libname_spec, dnl acl_library_names_spec, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) gnupg-1.4.20/m4/signed.m40000644000175000017500000000140112635262326011675 00000000000000# signed.m4 serial 1 (gettext-0.10.40) dnl Copyright (C) 2001-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([bh_C_SIGNED], [ AC_CACHE_CHECK([for signed], bh_cv_c_signed, [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)]) if test $bh_cv_c_signed = no; then AC_DEFINE(signed, , [Define to empty if the C compiler doesn't support this keyword.]) fi ]) gnupg-1.4.20/m4/iconv.m40000644000175000017500000002162012635216116011543 00000000000000# iconv.m4 serial 18 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; }]])], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [ changequote(,)dnl case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac changequote([,])dnl ]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated . m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) gnupg-1.4.20/m4/stdint_h.m40000644000175000017500000000174312635262326012251 00000000000000# stdint_h.m4 serial 9 dnl Copyright (C) 1997-2004, 2006, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include #include ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_stdint_h=yes], [gl_cv_header_stdint_h=no])]) if test $gl_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) gnupg-1.4.20/m4/progtest.m40000644000175000017500000000604012635216116012273 00000000000000# progtest.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1996-2003, 2005, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) gnupg-1.4.20/m4/glibc2.m40000644000175000017500000000147612635262326011602 00000000000000# glibc2.m4 serial 3 dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2014 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.0 or newer. # From Bruno Haible. AC_DEFUN([gt_GLIBC2], [ AC_CACHE_CHECK([whether we are using the GNU C Library 2 or newer], [ac_cv_gnu_library_2], [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [ac_cv_gnu_library_2=yes], [ac_cv_gnu_library_2=no]) ] ) AC_SUBST([GLIBC2]) GLIBC2="$ac_cv_gnu_library_2" ] ) gnupg-1.4.20/m4/xsize.m40000644000175000017500000000062612635262326011576 00000000000000# xsize.m4 serial 5 dnl Copyright (C) 2003-2004, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSIZE], [ dnl Prerequisites of lib/xsize.h. AC_REQUIRE([gl_SIZE_MAX]) AC_CHECK_HEADERS([stdint.h]) ]) gnupg-1.4.20/m4/estream.m40000644000175000017500000000307012635216116012064 00000000000000dnl Autoconf macros for libestream dnl Copyright (C) 2007 g10 Code GmbH dnl dnl This file is free software; as a special exception the author gives dnl unlimited permission to copy and/or distribute it, with or without dnl modifications, as long as this notice is preserved. dnl dnl This file is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY, to the extent permitted by law; without even the dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. dnl estream_PRINTF_INIT dnl Prepare build of source included estream-printf.c dnl AC_DEFUN([estream_PRINTF_INIT], [ AC_MSG_NOTICE([checking system features for estream-printf]) AC_CHECK_HEADERS(stdint.h) AC_TYPE_LONG_LONG_INT AC_TYPE_LONG_DOUBLE AC_TYPE_INTMAX_T AC_TYPE_UINTMAX_T AC_CHECK_TYPES([ptrdiff_t]) AC_CHECK_SIZEOF([unsigned long]) AC_CHECK_SIZEOF([void *]) AC_CACHE_CHECK([for nl_langinfo and THOUSANDS_SEP], estream_cv_langinfo_thousands_sep, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(THOUSANDS_SEP); return !cs;], estream_cv_langinfo_thousands_sep=yes, estream_cv_langinfo_thousands_sep=no) ]) if test $estream_cv_langinfo_thousands_sep = yes; then AC_DEFINE(HAVE_LANGINFO_THOUSANDS_SEP, 1, [Define if you have and nl_langinfo(THOUSANDS_SEP).]) fi ]) dnl estream_INIT dnl Prepare build of source included estream.c dnl AC_DEFUN([estream_INIT], [ AC_REQUIRE([estream_PRINTF_INIT]) AC_MSG_NOTICE([checking system features for estream]) ]) gnupg-1.4.20/m4/lib-prefix.m40000644000175000017500000002042212635216116012465 00000000000000# lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) gnupg-1.4.20/m4/size_max.m40000644000175000017500000000577012635262326012260 00000000000000# size_max.m4 serial 10 dnl Copyright (C) 2003, 2005-2006, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_SIZE_MAX], [ AC_CHECK_HEADERS([stdint.h]) dnl First test whether the system already has SIZE_MAX. AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ gl_cv_size_max= AC_EGREP_CPP([Found it], [ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif ], [gl_cv_size_max=yes]) if test -z "$gl_cv_size_max"; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. Try hard to find a definition that can dnl be used in a preprocessor #if, i.e. doesn't contain a cast. AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], [#include #include ], [size_t_bits_minus_1=]) AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], [#include ], [fits_in_uint=]) if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then dnl Even though SIZE_MAX fits in an unsigned int, it must be of type dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include extern size_t foo; extern unsigned long foo; ]], [[]])], [fits_in_uint=0]) fi dnl We cannot use 'expr' to simplify this expression, because 'expr' dnl works only with 'long' integers in the host environment, while we dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else dnl Shouldn't happen, but who knows... gl_cv_size_max='((size_t)~(size_t)0)' fi fi ]) if test "$gl_cv_size_max" != yes; then AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], [Define as the maximum value of type 'size_t', if the system doesn't define it.]) fi dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after dnl . Remember that the #undef in AH_VERBATIM gets replaced with dnl #define by AC_DEFINE_UNQUOTED. AH_VERBATIM([SIZE_MAX], [/* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif]) ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) gnupg-1.4.20/m4/libusb.m40000644000175000017500000000424112635262326011711 00000000000000dnl Check for libusb dnl Copyright (C) 2004, 2005 Free Software Foundation, Inc. dnl dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl Defines HAVE_LIBUSB to 1 if a working libusb setup is found, and sets dnl @LIBUSB@ to the necessary libraries. HAVE_USB_GET_BUSSES is set if dnl usb_get_busses() exists. AC_DEFUN([GNUPG_CHECK_LIBUSB], [ AC_ARG_WITH(libusb, AC_HELP_STRING([--with-libusb=DIR], [look for the libusb library in DIR]), [_do_libusb=$withval],[_do_libusb=yes]) if test "$_do_libusb" != "no" ; then if test -d "$withval" ; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" AC_PATH_PROG([_usb_config],["$_do_libusb/bin/libusb-config"]) else AC_PATH_PROG([_usb_config],[libusb-config]) fi _libusb_save_libs=$LIBS _libusb_save_cflags=$CFLAGS if test x$_usb_config != "x" ; then _libusb_try_libs=`$LIBS $_usb_config --libs` _libusb_try_cflags=`$LIBS $_usb_config --cflags` else _libusb_try_libs="-lusb" _libusb_try_cflags="" fi LIBS="$LIBS $_libusb_try_libs" CFLAGS="$CFLAGS $_libusb_try_cflags" AC_MSG_CHECKING([whether libusb is present and sane]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ usb_bulk_write(NULL,0,NULL,0,0); ]])],_found_libusb=yes,_found_libusb=no) AC_MSG_RESULT([$_found_libusb]) if test $_found_libusb = yes ; then AC_DEFINE(HAVE_LIBUSB,1, [Define to 1 if you have a fully functional libusb library.]) AC_SUBST(LIBUSB_CPPFLAGS,$_libusb_try_cflags) AC_SUBST(LIBUSB,$_libusb_try_libs) AC_CHECK_FUNCS(usb_get_busses) fi LIBS=$_libusb_save_libs CFLAGS=$_libusb_save_cflags unset _libusb_save_libs unset _libusb_save_cflags unset _libusb_try_libs unset _libusb_try_cflags unset _found_libusb fi ])dnl gnupg-1.4.20/m4/intmax.m40000644000175000017500000000214312635262326011730 00000000000000# intmax.m4 serial 6 (gettext-0.18.2) dnl Copyright (C) 2002-2005, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether the system has the 'intmax_t' type, but don't attempt to dnl find a replacement if it is lacking. AC_DEFUN([gt_TYPE_INTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif ]], [[intmax_t x = -1; return !x;]])], [gt_cv_c_intmax_t=yes], [gt_cv_c_intmax_t=no])]) if test $gt_cv_c_intmax_t = yes; then AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in or .]) fi ]) gnupg-1.4.20/m4/lcmessage.m40000644000175000017500000000253312635262326012376 00000000000000# lcmessage.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1995-2002, 2004-2005, 2008-2014 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([gt_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], [gt_cv_val_LC_MESSAGES], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[return LC_MESSAGES]])], [gt_cv_val_LC_MESSAGES=yes], [gt_cv_val_LC_MESSAGES=no])]) if test $gt_cv_val_LC_MESSAGES = yes; then AC_DEFINE([HAVE_LC_MESSAGES], [1], [Define if your file defines LC_MESSAGES.]) fi ]) gnupg-1.4.20/m4/isc-posix.m40000644000175000017500000000213312352573031012337 00000000000000# isc-posix.m4 serial 2 (gettext-0.11.2) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # This file is not needed with autoconf-2.53 and newer. Remove it in 2005. # This test replaces the one in autoconf. # Currently this macro should have the same name as the autoconf macro # because gettext's gettext.m4 (distributed in the automake package) # still uses it. Otherwise, the use in gettext.m4 makes autoheader # give these diagnostics: # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX undefine([AC_ISC_POSIX]) AC_DEFUN([AC_ISC_POSIX], [ dnl This test replaces the obsolescent AC_ISC_POSIX kludge. AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) ] ) gnupg-1.4.20/m4/codeset.m40000644000175000017500000000150012635262326012052 00000000000000# codeset.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2006, 2008-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[char* cs = nl_langinfo(CODESET); return !cs;]])], [am_cv_langinfo_codeset=yes], [am_cv_langinfo_codeset=no]) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE([HAVE_LANGINFO_CODESET], [1], [Define if you have and nl_langinfo(CODESET).]) fi ]) gnupg-1.4.20/m4/inttypes.m40000644000175000017500000000171712352573031012307 00000000000000# inttypes.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H if exists and doesn't clash with # . AC_DEFUN([gt_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, [ AC_TRY_COMPILE( [#include #include ], [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) ]) if test $gt_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, [Define if exists and doesn't clash with .]) fi ]) gnupg-1.4.20/m4/nls.m40000644000175000017500000000231512635216116011221 00000000000000# nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) gnupg-1.4.20/m4/tar-ustar.m40000644000175000017500000000251012352573031012342 00000000000000dnl Check for a tar program that speaks ustar format dnl Copyright (C) 2005, 2006 Free Software Foundation, Inc. dnl dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. AC_DEFUN([GNUPG_CHECK_USTAR], [ AC_ARG_WITH(tar, AC_HELP_STRING([--with-tar=PATH],[look for a tar program in PATH]), [_do_tar=$withval]) if test x$_do_tar != xno ; then if test x$_do_tar = x ; then AC_PATH_PROG(TAR,"tar") _mytar=$ac_cv_path_TAR fi # Check if our tar is ustar format. If so, it's good. TODO: Add some # code to check various options, etc, to try and create ustar # format. if test x$_mytar != x ; then AC_MSG_CHECKING([whether $_mytar speaks USTAR]) echo hithere > conftest.txt $_mytar -cf - conftest.txt | (dd skip=257 bs=1 count=5 2>/dev/null || cat) | grep ustar > /dev/null _tar_bad=$? rm conftest.txt if test x$_tar_bad = x0 ; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi fi fi AM_CONDITIONAL(HAVE_USTAR, test x$_tar_bad = x0) ])dnl gnupg-1.4.20/m4/intldir.m40000644000175000017500000000163312635262326012100 00000000000000# intldir.m4 serial 2 (gettext-0.18) dnl Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. AC_PREREQ([2.52]) dnl Tells the AM_GNU_GETTEXT macro to consider an intl/ directory. AC_DEFUN([AM_GNU_GETTEXT_INTL_SUBDIR], []) gnupg-1.4.20/tests/0000755000175000017500000000000012635457216011074 500000000000000gnupg-1.4.20/tests/ChangeLog-20110000644000175000017500000000462712635262326013154 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2002-12-04 Werner Koch * inittests (gpgsm.conf): Fake system time. 2002-10-31 Neal H. Walfield * Makefile.am (inittests.stamp): Do not set LD_LIBRARY_PATH here. (TESTS_ENVIRONMENT): Do it here. And also frob $(LIBGCRYPT_LIBS) and $(PTH_LIBS). 2002-10-31 Neal H. Walfield * asschk.c (die): New macro. (read_assuan): If in verbose mode, dump the string that was read. (write_assuan): Be more verbose on failure. 2002-09-04 Neal H. Walfield * Makefile.am (inittests.stamp): Do not set LD_LIBRARY_PATH, but rather prepend it. Be more robust and prefer printf over echo -n. 2002-09-04 Marcus Brinkmann * asschk.c (start_server): Close the parent's file descriptors in the child. (read_assuan): Variable NREAD removed. Cut off the received line currectly if more than one line was read. 2002-09-03 Neal H. Walfield * Makefile.am (inittests.stamp): Construct an LD_LIBRARY_PATH from LDFLAGS. 2002-08-09 Werner Koch * asschk.c (cmd_getenv): New. (expand_line): Allow / as variable name delimiter. * sm-sign+verify, sm-verify: Use $srcdir so that a VPATH build works. * Makefile.am: Fixes for make dist. * samplekets/Makefile.am: New. 2002-08-08 Werner Koch * asschk.c: Added some new features. * runtest, inittests: New. * text-1.txt, text-2.txt, text-3.txt: New. * text-1.osig.pem, text-1.dsig.pem, text-1.osig-bad.pem: New. * text-2.osig.pem, text-2.osig-bad.pem: New. * samplekeys : New directory * sm-verify, sm-sign+verify: The first test scripts. 2002-08-06 Werner Koch * Makefile.am, asschk.c: New. Copyright 2002 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/Makefile.am0000644000175000017500000000620612635262326011706 00000000000000# Copyright (C) 1998,1999,2000,2001,2003,2010,2011, # 2012 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 3 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, see . ## Process this file with automake to produce Makefile.in ACLOCAL_AMFLAGS = -I m4 # We can't use --enable-selinux-support because some of our regression # tests are importing secret keys and that is not allowed if # selinux-support is enabled. DISTCHECK_CONFIGURE_FLAGS = --enable-mailto GITLOG_TO_CHANGELOG=gitlog-to-changelog if CROSS_COMPILING checks = else checks = checks endif if HAVE_W32_SYSTEM bzlib = bzlib else bzlib = endif SUBDIRS = m4 intl zlib ${bzlib} util mpi cipher tools \ g10 keyserver po doc ${checks} EXTRA_DIST = scripts/config.rpath PROJECTS BUGS config.h.in \ autogen.sh ChangeLog-2011 po/ChangeLog-2011 \ util/ChangeLog-2011 scripts/ChangeLog-2011 \ doc/ChangeLog-2011 tools/ChangeLog-2011 \ zlib/ChangeLog-2011 m4/ChangeLog-2011 \ include/ChangeLog-2011 g10/ChangeLog-2011 \ checks/ChangeLog-2011 cipher/ChangeLog-2011 \ intl/ChangeLog-2011 keyserver/ChangeLog-2011 \ tests/ChangeLog-2011 mpi/ChangeLog-2011 DISTCLEANFILES = # We do not install README into the doc directory because that would # conflict with GnuPG-2. # dist_doc_DATA = README # Add all the files listed in "distfiles" files to the distribution, # apply version numbers to some files and create a VERSION file which # we need for the Prereq: patch file trick. dist-hook: gen-ChangeLog @set -e; \ for file in `cd $(top_srcdir); \ find scripts mpi include -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)/gnupg.spec echo "$(VERSION)" > $(distdir)/VERSION gen_start_date = 2011-12-01T06:00:00 .PHONY: gen-ChangeLog gen-ChangeLog: set -e; \ if test -d $(top_srcdir)/.git; then \ (cd $(top_srcdir) && \ $(GITLOG_TO_CHANGELOG) --append-dot --tear-off \ --amend=scripts/git-log-fix \ --since=$(gen_start_date) ) > $(distdir)/cl-t; \ cat $(top_srcdir)/scripts/git-log-footer >> $(distdir)/cl-t; \ rm -f $(distdir)/ChangeLog; \ mv $(distdir)/cl-t $(distdir)/ChangeLog; \ fi gnupg-1.4.20/NEWS0000644000175000017500000024716512635277061010366 00000000000000Noteworthy changes in version 1.4.20 (2015-12-20) ------------------------------------------------- * Reject signatures made using the MD5 hash algorithm unless the new option --allow-weak-digest-algos or --pgp2 are given. * New option --weak-digest to specify hash algorithms which should be considered weak. * Changed default cipher for symmetric-only encryption to AES-128. * Fix for DoS when importing certain garbled secret keys. * Improved error reporting for secret subkey w/o corresponding public subkey. * Improved error reporting in decryption due to wrong algorithm. * Fix cluttering of stdout with trustdb info in double verbose mode. * Pass a DBUS envvar to gpg-agent for use by gnome-keyring. Noteworthy changes in version 1.4.19 (2015-02-27) ------------------------------------------------- * Use ciphertext blinding for Elgamal decryption [CVE-2014-3591]. See http://www.cs.tau.ac.il/~tromer/radioexp/ for details. * Fixed data-dependent timing variations in modular exponentiation [related to CVE-2015-0837, Last-Level Cache Side-Channel Attacks are Practical]. * Detect faulty use of --verify on detached signatures. * Changed the PKA method to use CERT records and hashed names. * New import option "keep-ownertrust". * Support algorithm names when generating keys using the --command-fd method. * Updated many translations. * Updated build system. * Fixed a regression in keyserver import * Fixed argument parsing for option --debug-level. * Fixed DoS based on bogus and overlong key packets. * Fixed bugs related to bogus keyrings. * The usual minor minor bug fixes. Noteworthy changes in version 1.4.18 (2014-06-30) ------------------------------------------------- * Fix a regression in 1.4.17 if more than one keyid is given to --recv-keys et al. * Cap RSA and Elgamal keysize at 4096 bit also for unattended key generation. Noteworthy changes in version 1.4.17 (2014-06-23) ------------------------------------------------- * Avoid DoS due to garbled compressed data packets. [CVE-2014-4617] * Screen keyserver reponses to avoid import of unwanted keys by rogue servers. * Add hash algorithms to the "sig" records of the colon output. * More specific reason codes for INV_RECP status. * Fixes for PC/SC access on Apple. * Minor bug fixes. Noteworthy changes in version 1.4.16 (2013-12-18) ------------------------------------------------- * Fixed the RSA Key Extraction via Low-Bandwidth Acoustic Cryptanalysis attack as described by Genkin, Shamir, and Tromer. See . [CVE-2013-4576] * Put only the major version number by default into armored output. * Do not create a trustdb file if --trust-model=always is used. * Print the keyid for key packets with --list-packets. * Changed modular exponentiation algorithm to recover from a small performance loss due to a change in 1.4.14. Noteworthy changes in version 1.4.15 (2013-10-04) ------------------------------------------------- * Fixed possible infinite recursion in the compressed packet parser. [CVE-2013-4402] * Protect against rogue keyservers sending secret keys. * Use 2048 bit also as default for batch key generation. * Minor bug fixes. Noteworthy changes in version 1.4.14 (2013-07-25) ------------------------------------------------- * Mitigate the Yarom/Falkner flush+reload side-channel attack on RSA secret keys. See . [CVE-2013-4242] * Fixed IDEA for big-endian CPUs * Improved the diagnostics for failed keyserver lockups. * Minor bug and portability fixes. Noteworthy changes in version 1.4.13 (2012-12-20) ------------------------------------------------- * Add support for the old cipher algorithm IDEA. * Minor bug fixes. Noteworthy changes in version 1.4.12 (2012-01-30) ------------------------------------------------- * GPG now accepts a space separated fingerprint as a user ID. This allows to copy and paste the fingerprint from the key listing. * Removed support for the original HKP keyserver which is not anymore used by any site. * Rebuild the trustdb after changing the option --min-cert-level. * Improved JPEG detection. * Included more VMS patches * Made it easier to create an installer for Windows. * Supports the 32 bit variant of the mingw-w64 toolchain. * Made file locking more portable. * Minor bug fixes. Noteworthy changes in version 1.4.11 (2010-10-18) ------------------------------------------------- * Bug fixes and portability changes. * Minor changes for better interoperability with GnuPG-2. Noteworthy changes in version 1.4.10 (2009-09-02) ------------------------------------------------- * 2048 bit RSA keys are now generated by default. The default hash algorithm preferences has changed to prefer SHA-256 over SHA-1. 2048 bit DSA keys are now generated to use a 256 bit hash algorithm * Support v2 OpenPGP cards. * The algorithm to compute the SIG_ID status has been changed to match the one from 2.0.10. * Improved file locking. Implemented it for W32. * Fixed a memory leak which made imports of many keys very slow. * Many smaller bug fixes. * Support for the Camellia cipher (RFC-5581). * Support for HKP keyservers over SSL ("HKPS"). Noteworthy changes in version 1.4.9 (2008-03-26) ------------------------------------------------ * Improved AES encryption performance by more than 20% (on ia32). Decryption is also a bit faster. * Fixed possible memory corruption bug in 1.4.8 while importing OpenPGP keys. [CVE-2008-1530] Noteworthy changes in version 1.4.8 (2007-12-20) ------------------------------------------------ ******************************************* * A decade of GnuPG: g10-0.0.0.tar.gz was * * released exactly 10 years ago. * ******************************************* * Changed the license to GPLv3. * Improved detection of keyrings specified multiple times. * Changes to better cope with broken keyservers. * Minor bug fixes. * The new OpenPGP standard is now complete, and has been published as RFC-4880. The GnuPG --openpgp mode (note this is not the default) has been updated to match the new standard. The --rfc2440 option can be used to return to the older RFC-2440 behavior. The main differences between the two are "--enable-dsa2 --no-rfc2440-text --escape-from-lines --require-cross-certification". * By default (i.e. --gnupg mode), --require-cross-certification is now on. --rfc2440-text and --force-v3-sigs are now off. * Allow encryption using legacy Elgamal sign+encrypt keys if option --rfc2440 is used. * Fixed the auto creation of the key stub for smartcards. * Fixed a rare bug in decryption using the OpenPGP card. * Fix RFC-4880 typo in the SHA-224 hash prefix. Old SHA-224 signatures will continue to work. Noteworthy changes in version 1.4.7 (2007-03-05) ------------------------------------------------ * By default, do not allow processing multiple plaintexts in a single stream. Many programs that called GnuPG were assuming that GnuPG did not permit this, and were thus not using the plaintext boundary status tags that GnuPG provides. This change makes GnuPG reject such messages by default which makes those programs safe again. --allow-multiple-messages returns to the old behavior. [CVE-2007-1263]. * [W32] The environment variable LANGUAGE may be used to override the language given by HKCU\Software\GNU\GnuPG:Lang. The language files "*.mo" are expected in a directory named "gnupg.nls" below the directory with the gpg.exe binary. * New --verify-option show-primary-uid-only. Noteworthy changes in version 1.4.6 (2006-12-06) ------------------------------------------------ * Fixed a serious and exploitable bug in processing encrypted packages. [CVE-2006-6235]. * Fixed a buffer overflow in gpg. [bug#728, CVE-2006-6169] * Fixed a bug while decrypting certain compressed and encrypted messages. [bug#537] * Added --s2k-count to set the number of times passphrase mangling is repeated. The default is 65536 times. * Added --passphrase-repeat to set the number of times GPG will prompt for a new passphrase to be repeated. This is useful to help memorize a new passphrase. The default is 1 repetition. * Added a GPL license exception to the keyserver helper programs gpgkeys_ldap, gpgkeys_curl, and gpgkeys_hkp, to clarify any potential questions about the ability to distribute binaries that link to the OpenSSL library. GnuPG does not link directly to OpenSSL, but libcurl (used for HKP, HTTP, and FTP) and OpenLDAP (used for LDAP) may. Note that this license exception is considered a bug fix and is intended to forgive any violations pertaining to this issue, including those that may have occurred in the past. * Man pages are now built from the same source as those of GnuPG-2. Noteworthy changes in version 1.4.5 (2006-08-01) ------------------------------------------------ * Reverted check for valid standard handles under Windows. * More DSA2 tweaks. * Fixed a problem uploading certain keys to the smart card. * Fixed 2 more possible memory allocation attacks. * Added Norwegian translation. Noteworthy changes in version 1.4.4 (2006-06-25) ------------------------------------------------ * User IDs are now capped at 2048 bytes. This avoids a memory allocation attack (see CVE-2006-3082). * Added support for the SHA-224 hash. Like the SHA-384 hash, it is mainly useful when DSS (the US Digital Signature Standard) compatibility is desired. * Added support for the latest update to DSA keys and signatures. This allows for larger keys than 1024 bits and hashes other than SHA-1 and RIPEMD/160. Note that not all OpenPGP implementations can handle these new keys and signatures yet. See "--enable-dsa2" in the manual for more information. Noteworthy changes in version 1.4.3 (2006-04-03) ------------------------------------------------ * If available, cURL-based keyserver helpers are built that can retrieve keys using HKP or any protocol that cURL supports (HTTP, HTTPS, FTP, FTPS, etc). If cURL is not available, HKP and HTTP are still supported using a built-in cURL emulator. To force building the old pre-cURL keyserver helpers, use the configure option --enable-old-keyserver-helpers. Note that none of this affects finger or LDAP support, which are unchanged. Note also that a future version of GnuPG will remove the old keyserver helpers altogether. * Implemented Public Key Association (PKA) signature verification. This uses special DNS records and notation data to associate a mail address with an OpenPGP key to prove that mail coming from that address is legitimate without the need for a full trust path to the signing key. * When exporting subkeys, those specified with a key ID or fingerpint and the '!' suffix are now merged into one keyblock. * Added "gpg-zip", a program to create encrypted archives that can interoperate with PGP Zip. * Added support for signing subkey cross-certification "back signatures". Requiring cross-certification to be present is currently off by default, but will be changed to on by default in the future, once more keys use it. A new "cross-certify" command in the --edit-key menu can be used to update signing subkeys to have cross-certification. * The key cleaning options for --import-options and --export-options have been further polished. "import-clean" and "export-clean" replace the older import-clean-sigs/import-clean-uids and export-clean-sigs/export-clean-uids option pairs. * New "minimize" command in the --edit-key menu removes everything that can be removed from a key, rendering it as small as possible. There are corresponding "export-minimal" and "import-minimal" commands for --export-options and --import-options. * New --fetch-keys command to retrieve keys by specifying a URI. This allows direct key retrieval from a web page or other location that can be specified in a URI. Available protocols are HTTP and finger, plus anything that cURL supplies, if built with cURL support. * Files containing several signed messages are not allowed any longer as there is no clean way to report the status of such files back to the caller. To partly revert to the old behaviour the new option --allow-multisig-verification may be used. * The keyserver helpers can now handle keys in either ASCII armor or binary format. * New auto-key-locate option that takes an ordered list of methods to locate a key if it is not available at encryption time (-r or --recipient). Possible methods include "cert" (use DNS CERT as per RFC2538bis, "pka" (use DNS PKA), "ldap" (consult the LDAP server for the domain in question), "keyserver" (use the currently defined keyserver), as well as arbitrary keyserver URIs that will be contacted for the key. * Able to retrieve keys using DNS CERT records as per RFC-4398. Noteworthy changes in version 1.4.2 (2005-07-26) ------------------------------------------------ * New command "verify" in the card-edit menu to display the Private-DO-3. The Admin command has been enhanced to take the optional arguments "on", "off" and "verify". The latter may be used to verify the Admin Pin without modifying data; this allows displaying the Private-DO-4 with the "list" command. * Rewrote large parts of the card code to optionally make use of a running gpg-agent. If --use-agent is being used and a gpg-agent with enabled scdaemon is active, gpg will now divert all card operations to that daemon. This is required because both, scdaemon and gpg require exclusive access to the card reader. By delegating the work to scdaemon, both can peacefully coexist and scdaemon is able to control the use of the reader. Note that this requires at least gnupg 1.9.17. * Fixed a couple of problems with the card reader. * Command completion is now available in the --edit-key and --card-edit menus. Filename completion is available at all filename prompts. Note that completion is only available if the system provides a readline library. * New experimental HKP keyserver helper that uses the cURL library. It is enabled via the configure option --with-libcurl like the other (also experimental) cURL helpers. * New key cleaning options that can be used to remove unusable (expired, revoked) signatures from a key. This is available via the new "clean" command in --edit-key on a key by key basis, as well as via the import-clean-sigs/import-clean-uids and export-clean-sigs/export-clean-uids options for --import-options and --export-options. These are currently off by default, and replace the import-unusable-sigs/export-unusable-sigs options from version 1.4.1. * New export option export-reset-subkey-passwd. * New option --limit-card-insert-tries. Noteworthy changes in version 1.4.1 (2005-03-15) ------------------------------------------------ * New --rfc2440-text option which controls how text is handled in signatures. This is in response to some problems seen with certain PGP/MIME mail clients and GnuPG version 1.4.0. More details about this are available at . * New "import-unusable-sigs" and "export-unusable-sigs" tags for --import-options and --export-options. These are off by default, which causes GnuPG to not import or export key signatures that are not usable (e.g. expired signatures). * New experimental HTTP, HTTPS, FTP, and FTPS keyserver helper that uses the cURL library to retrieve keys. This is disabled by default, but may be enabled with the configure option --with-libcurl. Without this option, the existing HTTP code is used for HTTP, and HTTPS, FTP, and FTPS are not supported. * When running a --card-status or --card-edit and a public key is available, missing secret key stubs will be created on the fly. Details of the key are listed too. * The implicit packet dumping in double verbose mode is now sent to stderr and not to stdout. * Added countermeasures against the Mister/Zuccherato CFB attack . * [W32] The algorithm for the default home directory changed: First we look at the environment variable GNUPGHOME, if this one is not set, we check whether the registry entry {HKCU,HKLM}\Software\GNU\GnuPG:HomeDir has been set. If this fails we use a GnuPG directory below the standard application data directory (APPDATA) of the current user. Only in the case that this directory cannot be determined, the old default of c:\gnupg will be used. The option --homedir still overrides all of them. * [W32] The locale selection under Windows changed. You need to enter the locale in the registry at HKCU\Software\GNU\GnuPG:Lang. For German you would use "de". If it is not set, GnuPG falls back to HKLM. The languages files "*.mo" are expected in a directory named "gnupg.nls" below the installation directory; that directory must be stored in the registry at the same key as above with the name "Install Directory". * Add new --edit-key command "bkuptocard" to allow restoring a card key from a backup. * The "fetch" command of --card-edit now retrieves the key using the default keyserver if no URL has been stored on the card. * New configure option --enable-noexecstack. Noteworthy changes in version 1.4.0 (2004-12-16) ------------------------------------------------ * See the file doc/highlights-1.4.txt for an overview of all changes in respect to the 1.2 series. Noteworthy changes in version 1.3.93 (2004-12-14) ------------------------------------------------- * Ask the user to repeat a changed PIN. * Switched to automake 1.9. Minor big fixes. Noteworthy changes in version 1.3.92 (2004-10-28) ------------------------------------------------- * Added Russian man page. Thanks to Pawel I. Shajdo. * libiconv is now used to support other character sets other than UTF-8, Latin-1,-2 and KOI8-2. The W32 version will only work correctly when iconv.dll is installed on the system. A binary version is available at all GNU mirror sites under libiconv. * gettext for Windows has been simplified. The MO files are now distributed UTF-8 encoded and gpg translates on the fly. Noteworthy changes in version 1.3.91 (2004-10-15) ------------------------------------------------- * A new configure option --enable-selinux-support disallows processing of confidential files used by gpg (e.g. secring.gpg). This helps writing ACLs for the SELinux kernel. * Support for fetching keys via finger has been added. This is useful for setting a preferred keyserver URL like "finger:wk@g10code.com". * Timeout support has been added to the keyserver helpers. This allows users to set an upper limit on how long to wait for the keyserver before giving up. * New "direct" trust model where users can set key validity directly if they do not want to participate in the web of trust. * Minor bug fixes, code and string cleanups. Noteworthy changes in version 1.3.90 (2004-10-01) ------------------------------------------------- * Readline support at all prompts is now available if the system provides a readline library. The build time option --without-readline may be used to disable this feature. * Support for the OpenPGP smartcard is now enabled by default. Use the option --disable-card-support to build without support for smartcards. * New command "addcardkey" in the key edit menu to add subkeys to a smartcard. New command "keytocard" to transfer a key to a smartcard. The serial number of the card is show in secret key listings. * -K may now be used as an alias for --list-secret-keys. * HTTP Basic authentication is now supported for all HKP and HTTP keyserver functions, either through a proxy or via direct access. Noteworthy changes in version 1.3.6 (2004-05-22) ------------------------------------------------ * New --keyid-format option that selects short (99242560), long (DB698D7199242560), 0xshort (0x99242560), or 0xlong (0xDB698D7199242560) keyid displays. This lets users tune the display to what they prefer. * The --list-options and --verify-options option "show-long-keyids" has been removed since --keyid-format obviates the need for them. * Support for the old quasi-1991 partial length encoding has been removed. * The --export-all and --export-options include-non-rfc options have been removed as superfluous since nonstandard V3 Elgamal sign+encrypt keys have been removed. * Preferred keyserver support has been added. Users may set a preferred keyserver via the --edit-key command "keyserver". If the --keyserver-option honor-keyserver-url is set (and it is by default), then the preferred keyserver is used when refreshing that key. * The --sig-keyserver-url option can be used to inform signature recipients where the signing key can be downloaded. When verifying the signature, if the signing key is not present, and the keyserver options honor-keyserver-url and auto-key-retrieve are set, this URL will be used to retrieve the key. * Support for fetching keys via HTTP has been added. This is mainly useful for setting a preferred keyserver URL like "http://www.jabberwocky.com/key.asc". * New --ask-cert-level/--no-ask-cert-level option to turn on and off the prompt for signature level when signing a key. Defaults to off. * New --gpgconf-list command for internal use by the gpgconf utility from gnupg 1.9.x. Noteworthy changes in version 1.3.5 (2004-02-26) ------------------------------------------------ * New --min-cert-level option to disregard key signatures that are under a specified level. Defaults to 2 (i.e. discard 0x11 signatures). * New --max-output option to limit the amount of plaintext output generated by GnuPG. This option can be used by programs which call GnuPG to process messages that may result in plaintext larger than the calling program is prepared to handle. This is sometimes called a "Decompression Bomb". * New --list-config command for frontends and other programs that call GnuPG. See doc/DETAILS for the specifics of this. * Some performance improvements with large keyrings. See the build time option --enable-key-cache=SIZE in the README file for details. * Some portability fixes for the OpenBSD/i386, HPPA, and AIX platforms. * New keyserver-option "http-proxy" to specify which proxy to use in the config file without using environment variables. * Added support for storing, retrieving, and searching for keys in LDAP servers. Note that this is different than the "LDAP keyserver" which was already (and remains) supported. * Added support for TLS and LDAPS session encryption for LDAP. * --show-session-key/--override-session-key now works with --symmetric messages. * The configure options --enable-rsa and --disable-rsa can now be used to enable or disable the RSA algorithm. This can be useful for embedded use where space is tight. --enable-minimal includes --disable-rsa. RSA is enabled by default. * The last support for Elgamal sign+encrypt keys has been removed. Noteworthy changes in version 1.3.4 (2003-11-27) ------------------------------------------------ * Added support for BZIP2 compression. This should be considered experimental, and is only available if the libbzip2 library is installed. * Added the ability to handle messages that can be decrypted with either a passphrase or a secret key. These messages may be generated with --symmetric --encrypt or --symmetric --sign --encrypt. * The config file search has been enhanced to try for less specific filename matches before giving up. For example, version 1.3.4 will try for gpg.conf-1.3.4, gpg.conf-1.3, and gpg.conf-1 before falling back to the regular gpg.conf file. * Fixed a format string bug in the HKP keyserver handler. * Support for Elgamal sign+encrypt keys has been removed. Old signatures may still be verified, and existing encrypted messages may still be decrypted, but no new signatures may be issued by, and no new messages will be encrypted to, these keys. Noteworthy changes in version 1.3.3 (2003-10-10) ------------------------------------------------ * Basic support for the OpenPGP card. New commands --card-status, --card-edit, --change-pin and the configuration options --reader-port, --ctapi-driver, --pcsc-driver, and --disable-ccid. * Full (read/write) support for the SHA-256 hash has been added. * Support for the TIGER/192 hash has been dropped. This should not be interpreted as a statement as to the strength of TIGER/192 - rather, the upcoming revision to the OpenPGP standard removes support for several unused (or mostly unused) hashes. * Revoked or expired user IDs are now skipped when selecting keys for encryption. Specifying a key by the key ID overrides this check and allows the selection of any key. * Note that --no-mangle-dos-filenames is now the default. If you are upgrading from a 1.2.x version of GnuPG, and are running a very old version of Windows that has the 8.3 filename limit, you may need to change this. * Multiple "Comment:" lines in armored output are now allowed. * New --list-options option. This option takes a list of arguments that allows the user to customize exactly what key listings (including the --edit-key listing) look like, enabling or disabling things such as photo display, policy URL, preferred keyserver URL, or notation display, long or short keyIDs, calculated validity for each user ID, etc. See the manual for the complete list of list-options. * New --verify-options option. This option takes a list of arguments that allows the user to customize exactly what happens during signature verification, enabling or disabling things such as photo display, policy URL, preferred keyserver URL, or notation display, long or short keyIDs, calculated validity for each user ID, etc. See the manual for the complete list of verify-options. * New --sig-keyserver-url to embed a "where to get my key" subpacket into a signature. * The options --show-photos, --show-policy-url, --show-notation, and --show-keyring are all deprecated in favor of those arguments to --list-options and --verify-options. The new method is more flexible since a user can specify (for example) showing photos during sig verification, but not in key listings. * The complete fingerprint of the key that made a given key certification is now available in the --with-colons output. For technical reasons, this is only available when running with --no-sig-cache set. See doc/DETAILS for the specifics of this. * IPv6 support for HKP keyserver access. IPv6 for LDAP keyserver access is also supported, but is dependent on the LDAP library used. * To simplify running both the stable (1.2.x) and development (1.3.x) versions of GnuPG, the development version will try to load the options file gpg.conf-VERSION (e.g. gpg.conf-1.3.3 for this release) before falling back to the regular gpg.conf file. * Two new %-expandos for use in notation and policy URLs. "%g" expands to the fingerprint of the key making the signature (which might be a subkey), and "%p" expands to the fingerprint of the primary key that owns the key making the signature. * New "tru" record in --with-colons --list-keys listings. It shows the status of the trust database that was used to calculate the key validity in the listings. See doc/DETAILS for the specifics of this. * New REVKEYSIG status tag for --status-fd. It indicates a valid signature that was issued by a revoked key. See doc/DETAILS for the specifics of this. * A number of portability changes to make building GnuPG on less-common platforms easier. Noteworthy changes in version 1.3.2 (2003-05-27) ------------------------------------------------ * New "--gnupg" option (set by default) that disables --openpgp, and the various --pgpX emulation options. This replaces --no-openpgp, and --no-pgpX, and also means that GnuPG has finally grown a --gnupg option to make GnuPG act like GnuPG. * A bug in key validation has been fixed. This bug only affects keys with more than one user ID (photo IDs do not count here), and results in all user IDs on a given key being treated with the validity of the most-valid user ID on that key. * Notation names that do not contain a '@' are no longer allowed unless --expert is set. This is to help prevent pollution of the (as yet unused) IETF notation namespace. * Multiple trust models are now supported via the --trust-model option. The options are "pgp" (web-of-trust plus trust signatures), "classic" (web-of-trust only), and "always" (identical to the --always-trust option). * The --personal-{cipher|digest|compression}-preferences are now consulted to get default algorithms before resorting to the last-ditch defaults of --s2k-cipher-algo, SHA1, and ZIP respectively. This allows a user to set algorithms to use in a safe manner so they are used when legal to do so, without forcing them on for all messages. * New --primary-keyring option to designate the keyring that the user wants new keys imported into. * --s2k-digest-algo is now used for all password mangling. Earlier versions used both --s2k-digest-algo and --digest-algo for passphrase mangling. * Handling of --hidden-recipient or --throw-keyid messages is now easier - the user only needs to give their passphrase once, and GnuPG will try it against all of the available secret keys. * Care is taken to prevent compiler optimization from removing memory wiping code. * New option --no-mangle-dos-filenames so that filenames are not truncated in the W32 version. * A "convert-from-106" script has been added. This is a simple script that automates the conversion from a 1.0.6 or earlier version of GnuPG to a 1.0.7 or later version. * Disabled keys are now skipped when selecting keys for encryption. If you are using the --with-colons key listings to detect disabled keys, please see doc/DETAILS for a minor format change in this release. * Minor trustdb changes to make the trust calculations match common usage. * New command "revuid" in the --edit-key menu to revoke a user ID. This is a simpler interface to the old method (which still works) of revoking the user ID self-signature. * Status VALIDSIG does now also print the primary key's fingerprint, as well as the signature version, pubkey algorithm, hash algorithm, and signature class. * Add read-only support for the SHA-256 hash, and optional read-only support for the SHA-384 and SHA-512 hashes. * New option --enable-progress-filter for use with frontends. * DNS SRV records are used in HKP keyserver lookups to allow administrators to load balance and select keyserver ports automatically. This is as specified in draft-shaw-openpgp-hkp-00.txt. * When using the "keyid!" syntax during a key export, only that specified key is exported. If the key in question is a subkey, the primary key plus only that subkey is exported. * configure --disable-xxx options to disable individual algorithms at build time. This can be used to build a smaller gpg binary for embedded uses where space is tight. See the README file for the algorithms that can be used with this option, or use --enable-minimal to build the smallest gpg possible (disables all optional algorithms, disables keyserver access, and disables photo IDs). * The keyserver no-modify flag on a key can now be displayed and modified. * Note that the TIGER/192 digest algorithm is in the process of being dropped from the OpenPGP standard. While this release of GnuPG still contains it, it is disabled by default. To ensure you will still be able to use your messages with future versions of GnuPG and other OpenPGP programs, please do not use this algorithm. Noteworthy changes in version 1.3.1 (2002-11-12) ------------------------------------------------ * Trust signature support. This is based on the Maurer trust model where a user can specify the trust level along with the signature with multiple levels so users can delegate certification ability to other users, possibly restricted by a regular expression on the user ID. Note that full trust signature support requires a regular expression parsing library. The regexp code from glibc 2.3.1 is included for those platforms that don't have working regexp functions available. The configure option --disable-regex may be used to disable any regular expression code, which will make GnuPG ignore any trust signature with a regular expression included. * Two new commands --hidden-recipient (-R) and --hidden-encrypt-to encrypt to a user, but hide the identity of that user. This is the same functionality as --throw-keyid, but can be used on a per-user basis. * Full algorithm names (e.g. "3DES", "SHA1", "ZIP") can now be used interchangeably with the short algorithm names (e.g. "S2", "H2", "Z1") anywhere algorithm names are used in GnuPG. Noteworthy changes in version 1.3.0 (2002-10-18) ------------------------------------------------ * The last piece of internal keyserver support has been removed, and now all keyserver access is done via the keyserver plugins. There is also a newer keyserver protocol used between GnuPG and the plugins, so plugins from earlier versions of GnuPG may not work properly. * The HKP keyserver plugin supports the new machine-readable key listing format for those keyservers that provide it. * When using a HKP keyserver with multiple DNS records (such as wwwkeys.pgp.net which has the addresses of multiple servers around the world), try all records until one succeeds. Note that it depends on the LDAP library used whether the LDAP keyserver plugin does this as well. * The library dependencies for OpenLDAP seem to change fairly frequently, and GnuPG's configure script cannot guess all the combinations. Use ./configure LDAPLIBS="-L libdir -l libs" to override the script and use the libraries selected. * Secret keys generated with --export-secret-subkeys are now indicated in key listings with a '#' after the "sec", and in --with-colons listings by showing no capabilities (no lowercase characters). * --trusted-key has been un-obsoleted, as it is useful for adding ultimately trusted keys from the config file. It is identical to using --edit and "trust" to change a key to ultimately trusted. * Translations other than de are no longer distributed with the development branch. This is due to the frequent text changes during development, which cause the translations to rapidly go out of date. Noteworthy changes in version 1.1.92 (2002-09-11) ------------------------------------------------- * [IMPORTANT] The default configuration file is now ~/.gnupg/gpg.conf. If an old ~/.gnupg/options is found it will still be used. This change is required to have a more consistent naming scheme with forthcoming tools. * The use of MDCs have increased. A MDC will be used if the recipients directly request it, if the recipients have AES, AES192, AES256, or TWOFISH in their cipher preferences, or if the chosen cipher has a blocksize not equal to 64 bits (currently this is also AES, AES192, AES256, and TWOFISH). * GnuPG will no longer automatically disable compression when processing an already-compressed file unless a MDC is being used. This is to give the message a certain amount of resistance to the chosen-ciphertext attack while communicating with other programs (most commonly PGP earlier than version 7.x) that do not support MDCs. * The option --interactive now has the desired effect when importing keys. * The file permission and ownership checks on files have been clarified. Specifically, the homedir (usually ~/.gnupg) is checked to protect everything within it. If the user specifies keyrings outside this homedir, they are presumed to be shared keyrings and therefore *not* checked. Configuration files specified with the --options option and the IDEA cipher extension specified with --load-extension are checked, along with their enclosing directories. * The configure option --with-static-rnd=auto allows to build gpg with all available entropy gathering modules included. At runtime the best usable one will be selected from the list linux, egd, unix. This is also the default for systems lacking a /dev/random device. * The default character set is now taken from the current locale; it can still be overridden by the --charset option. Using the option -vvv shows the used character set. * [REMOVED] --emulate-checksum-bug and --emulate-3des-s2k-bug have been removed. Noteworthy changes in version 1.1.91 (2002-08-04) ------------------------------------------------- * All modules are now linked statically; the --load-extension option is in general not useful anymore. The only exception is to specify the deprecated idea cipher. * The IDEA plugin has changed. Previous versions of the IDEA plugin will no longer work with GnuPG. However, the current version of the plugin will work with earlier GnuPG versions. * When using --batch with one of the --delete-key commands, the key must be specified by fingerprint. See the man page for details. * There are now various ways to restrict the ability GnuPG has to exec external programs (for the keyserver helpers or photo ID viewers). Read the README file for the complete list. * New export option to leave off attribute packets (photo IDs) during export. This is useful when exporting to HKP keyservers which do not understand attribute packets. * New import option to repair during import the HKP keyserver mangling multiple subkeys bug. Note that this cannot completely repair the damaged key as some crucial data is removed by the keyserver, but it does at least give you back one subkey. This is on by default for keyserver --recv-keys, and off by default for regular --import. * The keyserver helper programs now live in /usr/[local/]libexec/gnupg by default. If you are upgrading from 1.0.7, you might want to delete your old copies in /usr/[local/]bin. If you use an OS that does not use libexec for whatever reason, use configure --libexecdir=/usr/local/lib to place the keyserver helpers there. * The LDAP keyserver handler now works properly with very old (version 1) LDAP keyservers. Noteworthy changes in version 1.1.90 (2002-07-01) ------------------------------------------------- * New commands: --personal-cipher-preferences, --personal-digest-preferences, and --personal-compress-preferences allow the user to specify which algorithms are to be preferred. Note that this does not permit using an algorithm that is not present in the recipient's preferences (which would violate the OpenPGP standard). This just allows sorting the preferences differently. * New "group" command to refer to several keys with one name. * A warning is issued if the user forces the use of an algorithm that is not listed in the recipient's preferences. * Full revocation key (aka "designated revoker") support. * The preferred hash algorithms on a key are consulted when encrypting a signed message to that key. Note that this is disabled by default by a SHA1 preference in --personal-digest-preferences. * --cert-digest-algo allows the user to specify the hash algorithm to use when signing a key rather than the default SHA1 (or MD5 for PGP2 keys). Do not use this feature unless you fully understand the implications of this. * --pgp7 mode automatically sets all necessary options to ensure that the resulting message will be usable by a user of PGP 7.x. * New --attribute-fd command for frontends and scripts to get the contents of attribute packets (i.e. photos) * In expert mode, the user can now re-sign a v3 key with a v4 self-signature. This does not change the v3 key into a v4 key, but it does allow the user to use preferences, primary ID flags, etc. * Significantly improved photo ID support on non-unixlike platforms. * The version number has jumped ahead to 1.1.90 to skip over the old version 1.1 and to get ready for the upcoming 1.2. * ElGamal sign and encrypt is not anymore allowed in the key generation dialog unless in expert mode. RSA sign and encrypt has been added with the same restrictions. * [W32] Keyserver access does work with Windows NT. Noteworthy changes in version 1.0.7 (2002-04-29) ------------------------------------------------ * Secret keys are now stored and exported in a new format which uses SHA-1 for integrity checks. This format renders the Rosa/Klima attack useless. Other OpenPGP implementations might not yet support this, so the option --simple-sk-checksum creates the old vulnerable format. * The default cipher algorithm for encryption is now CAST5, default hash algorithm is SHA-1. This will give us better interoperability with other OpenPGP implementations. * Symmetric encrypted messages now use a fixed file size if possible. This is a tradeoff: it breaks PGP 5, but fixes PGP 2, 6, and 7. Note this was only an issue with RFC-1991 style symmetric messages. * Photographic user ID support. This uses an external program to view the images. * Enhanced keyserver support via keyserver "plugins". GnuPG comes with plugins for the NAI LDAP keyserver as well as the HKP email keyserver. It retains internal support for the HKP HTTP keyserver. * Nonrevocable signatures are now supported. If a user signs a key nonrevocably, this signature cannot be taken back so be careful! * Multiple signature classes are usable when signing a key to specify how carefully the key information (fingerprint, photo ID, etc) was checked. * --pgp2 mode automatically sets all necessary options to ensure that the resulting message will be usable by a user of PGP 2.x. * --pgp6 mode automatically sets all necessary options to ensure that the resulting message will be usable by a user of PGP 6.x. * Signatures may now be given an expiration date. When signing a key with an expiration date, the user is prompted whether they want their signature to expire at the same time. * Revocation keys (designated revokers) are now supported if present. There is currently no way to designate new keys as designated revokers. * Permissions on the .gnupg directory and its files are checked for safety. * --expert mode enables certain silly things such as signing a revoked user id, expired key, or revoked key. * Some fixes to build cleanly under Cygwin32. * New tool gpgsplit to split OpenPGP data formats into packets. * New option --preserve-permissions. * Subkeys created in the future are not used for encryption or signing unless the new option --ignore-valid-from is used. * Revoked user-IDs are not listed unless signatures are listed too or we are in verbose mode. * There is no default comment string with ascii armors anymore except for revocation certificates and --enarmor mode. * The command "primary" in the edit menu can be used to change the primary UID, "setpref" and "updpref" can be used to change the preferences. * Fixed the preference handling; since 1.0.5 they were erroneously matched against against the latest user ID and not the given one. * RSA key generation. * Merged Stefan's patches for RISC OS in. See comments in scripts/build-riscos. * It is now possible to sign and conventional encrypt a message (-cs). * The MDC feature flag is supported and can be set by using the "updpref" edit command. * The status messages GOODSIG and BADSIG are now returning the primary UID, encoded using %XX escaping (but with spaces left as spaces, so that it should not break too much) * Support for GDBM based keyrings has been removed. * The entire keyring management has been revamped. * The way signature stati are store has changed so that v3 signatures can be supported. To increase the speed of many operations for existing keyrings you can use the new --rebuild-keydb-caches command. * The entire key validation process (trustdb) has been revamped. See the man page entries for --update-trustdb, --check-trustdb and --no-auto-check-trustdb. * --trusted-keys is again obsolete, --edit can be used to set the ownertrust of any key to ultimately trusted. * A subkey is never used to sign keys. * Read only keyrings are now handled as expected. Noteworthy changes in version 1.0.6 (2001-05-29) ------------------------------------------------ * Security fix for a format string bug in the tty code. * Fixed format string bugs in all PO files. * Removed Russian translation due to too many bugs. The FTP server has an unofficial but better translation in the contrib directory. * Fixed expire time calculation and keyserver access. * The usual set of minor bug fixes and enhancements. * non-writable keyrings are now correctly handled. Noteworthy changes in version 1.0.5 (2001-04-29) ------------------------------------------------ * WARNING: The semantics of --verify have changed to address a problem with detached signature detection. --verify now ignores signed material given on stdin unless this is requested by using a "-" as the name for the file with the signed material. Please check all your detached signature handling applications and make sure that they don't pipe the signed material to stdin without using a filename together with "-" on the the command line. * WARNING: Corrected hash calculation for input data larger than 512M - it was just wrong, so you might notice bad signature in some very big files. It may be wise to keep an old copy of GnuPG around. * Secret keys are no longer imported unless you use the new option --allow-secret-key-import. This is a kludge and future versions will handle it in another way. * New command "showpref" in the --edit-key menu to show an easier to understand preference listing. * There is now the notation of a primary user ID. For example, it is printed with a signature verification as the first user ID; revoked user IDs are not printed there anymore. In general the primary user ID is the one with the latest self-signature. * New --charset=utf-8 to bypass all internal conversions. * Large File Support (LFS) is now working. * New options: --ignore-crc-error, --no-sig-create-check, --no-sig-cache, --fixed-list-mode, --no-expensive-trust-checks, --enable-special-filenames and --use-agent. See man page. * New command --pipemode, which can be used to run gpg as a co-process. Currently only the verification of detached signatures are working. See doc/DETAILS. * Keyserver support for the W32 version. * Rewritten key selection code so that GnuPG can better cope with multiple subkeys, expire dates and so. The drawback is that it is slower. * A whole lot of bug fixes. * The verification status of self-signatures are now cached. To increase the speed of key list operations for existing keys you can do the following in your GnuPG homedir (~/.gnupg): cp pubring.gpg pubring.gpg.save && gpg --export-all >x && \ rm pubring.gpg && gpg --import x Only v4 keys (i.e not the old RSA keys) benefit from this caching. * New translations: Estonian, Turkish. Noteworthy changes in version 1.0.4 (2000-10-17) ------------------------------------------------ * Fixed a serious bug which could lead to false signature verification results when more than one signature is fed to gpg. This is the primary reason for releasing this version. * New utility gpgv which is a stripped down version of gpg to be used to verify signatures against a list of trusted keys. * Rijndael (AES) is now supported and listed with top preference. * --with-colons now works with --print-md[s]. Noteworthy changes in version 1.0.3 (2000-09-18) ------------------------------------------------ * Fixed problems with piping to/from other MS-Windows software * Expiration time of the primary key can be changed again. * Revoked user IDs are now marked in the output of --list-key * New options --show-session-key and --override-session-key to help the British folks to somewhat minimize the danger of this Orwellian RIP bill. * New options --merge-only and --try-all-secrets. * New configuration option --with-egd-socket. * The --trusted-key option is back after it left us with 0.9.5 * RSA is supported. Key generation does not yet work but will come soon. * CAST5 and SHA-1 are now the default algorithms to protect the key and for symmetric-only encryption. This should solve a couple of compatibility problems because the old algorithms are optional according to RFC2440 * Twofish and MDC enhanced encryption is now used. PGP 7 supports this. Older versions of GnuPG don't support it, so they should be upgraded to at least 1.0.2 Noteworthy changes in version 1.0.2 (2000-07-12) ---------------------------------------------- * Fixed expiration handling of encryption keys. * Add an experimental feature to do unattended key generation. * The user is now asked for the reason of revocation as required by the new OpenPGP draft. * There is a ~/.gnupg/random_seed file now which saves the state of the internal RNG and increases system performance somewhat. This way the full entropy source is only used in cases were it is really required. Use the option --no-random-seed-file to disable this feature. * New options --ignore-time-conflict and --lock-never. * Some fixes for the W32 version. * The entropy.dll is not anymore used by the W32 version but replaced by code derived from Cryptlib. * Encryption is now much faster: About 2 times for 1k bit keys and 8 times for 4k keys. * New encryption keys are generated in a way which allows a much faster decryption. * New command --export-secret-subkeys which outputs the the _primary_ key with it's secret parts deleted. This is useful for automated decryption/signature creation as it allows to keep the real secret primary key offline and thereby protecting the key certificates and allowing to create revocations for the subkeys. See the FAQ for a procedure to install such secret keys. * Keygeneration now writes to the first writeable keyring or as default to the one in the homedirectory. Prior versions ignored all --keyring options. * New option --command-fd to take user input from a file descriptor; to be used with --status-fd by software which uses GnuPG as a backend. * There is a new status PROGRESS which is used to show progress during key generation. * Support for the new MDC encryption packets. To create them either --force-mdc must be use or cipher algorithm with a blocksize other than 64 bits is to be used. --openpgp currently disables MDC packets entirely. This option should not yet be used. * New option --no-auto-key-retrieve to disable retrieving of a missing public key from a keyserver, when a keyserver has been set. * Danish translation Noteworthy changes in version 1.0.1 (1999-12-16) ----------------------------------- * New command --verify-files. New option --fast-list-mode. * $http_proxy is now used when --honor-http-proxy is set. * Fixed some minor bugs and the problem with conventional encrypted packets which did use the gpg v3 partial length headers. * Add Indonesian and Portugese translations. * Fixed a bug with symmetric-only encryption using the non-default 3DES. The option --emulate-3des-s2k-bug may be used to decrypt documents which have been encrypted this way; this should be done immediately as this workaround will be remove in 1.1 * Can now handle (but not display) PGP's photo IDs. I don't know the format of that packet but after stripping a few bytes from the start it looks like a JPEG (at least my test data). Handling of this package is required because otherwise it would mix up the self signatures and you can't import those keys. * Passing non-ascii user IDs on the commandline should now work in all cases. * New keys are now generated with an additional preference to Blowfish. * Removed the GNU Privacy Handbook from the distribution as it will go into a separate one. Noteworthy changes in version 1.0.0 (1999-09-07) ----------------------------------- * Add a very preliminary version of the GNU Privacy Handbook to the distribution (lynx doc/gph/index.html). * Changed the version number to GnuPG 2001 ;-) Noteworthy changes in version 0.9.11 ------------------------------------ * UTF-8 strings are now correctly printed (if --charset is set correctly). Output of --with-colons remains C-style escaped UTF-8. * Workaround for a problem with PGP 5 detached signature in textmode. * Fixed a problem when importing new subkeys (duplicated signatures). Noteworthy changes in version 0.9.10 ------------------------------------ * Some strange new options to help pgpgpg * Cleaned up the dox a bit. Noteworthy changes in version 0.9.9 ----------------------------------- * 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. * New script tools/lspgpot to help transferring assigned trustvalues from PGP to GnuPG. * New commands --lsign-key and made --sign-key a shortcut for --edit and sign. * New options (#122--126 ;-) --[no-]default-recipient[-self], --disable-{cipher,pubkey}-algo. See the man page. * Enhanced info output in case of multiple recipients and fixed exit code. * New option --allow-non-selfsigned-uid to work around a problem with the German IN way of separating signing and encryption keys. 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 canonical 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 yyyy-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. Version 0.2.2 (1998-02-09) Version 0.2.1 (1998-01-28) Version 0.2.0 (1998-01-25) Version 0.1.3 (1998-01-12) Version 0.1.2 (1998-01-07) Version 0.1.1 (1998-01-07) Version 0.1.0 (1998-01-05) Version 0.0.0 (1997-12-20) Copyright (C) 1998-2015 Free Software Foundation, Inc. Copyright (C) 1997-2015 Werner Koch This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/Makefile.in0000644000175000017500000007674012635457153011735 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 1998,1999,2000,2001,2003,2010,2011, # 2012 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 3 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, see . VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in $(top_srcdir)/scripts/mkinstalldirs \ $(top_srcdir)/intl/Makefile.in ABOUT-NLS COPYING THANKS TODO \ scripts/compile scripts/config.guess scripts/config.rpath \ scripts/config.sub scripts/depcomp scripts/install-sh \ scripts/mdate-sh scripts/missing scripts/mkinstalldirs \ scripts/texinfo.tex $(top_srcdir)/scripts/compile \ $(top_srcdir)/scripts/config.guess \ $(top_srcdir)/scripts/config.rpath \ $(top_srcdir)/scripts/config.sub \ $(top_srcdir)/scripts/install-sh $(top_srcdir)/scripts/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = intl/Makefile zlib.h zconf.h bzlib.h CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = m4 intl zlib bzlib util mpi cipher tools g10 keyserver \ po doc checks DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2 GZIP_ENV = --best DIST_TARGETS = dist-bzip2 dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 # We can't use --enable-selinux-support because some of our regression # tests are importing secret keys and that is not allowed if # selinux-support is enabled. DISTCHECK_CONFIGURE_FLAGS = --enable-mailto GITLOG_TO_CHANGELOG = gitlog-to-changelog @CROSS_COMPILING_FALSE@checks = checks @CROSS_COMPILING_TRUE@checks = @HAVE_W32_SYSTEM_FALSE@bzlib = @HAVE_W32_SYSTEM_TRUE@bzlib = bzlib SUBDIRS = m4 intl zlib ${bzlib} util mpi cipher tools \ g10 keyserver po doc ${checks} EXTRA_DIST = scripts/config.rpath PROJECTS BUGS config.h.in \ autogen.sh ChangeLog-2011 po/ChangeLog-2011 \ util/ChangeLog-2011 scripts/ChangeLog-2011 \ doc/ChangeLog-2011 tools/ChangeLog-2011 \ zlib/ChangeLog-2011 m4/ChangeLog-2011 \ include/ChangeLog-2011 g10/ChangeLog-2011 \ checks/ChangeLog-2011 cipher/ChangeLog-2011 \ intl/ChangeLog-2011 keyserver/ChangeLog-2011 \ tests/ChangeLog-2011 mpi/ChangeLog-2011 DISTCLEANFILES = gen_start_date = 2011-12-01T06:00:00 all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" @if test -z "$(am__skip_length_check)" && find "$(distdir)" -type f -print | \ grep '^...................................................................................................' 1>&2; then \ echo 'error: the above filenames are too long' 1>&2; \ exit 1; \ else :; fi dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure \ --with-included-gettext \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-hook dist-lzip dist-shar dist-tarZ dist-xz \ dist-zip distcheck distclean distclean-generic distclean-hdr \ distclean-tags distcleancheck distdir distuninstallcheck dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # We do not install README into the doc directory because that would # conflict with GnuPG-2. # dist_doc_DATA = README # Add all the files listed in "distfiles" files to the distribution, # apply version numbers to some files and create a VERSION file which # we need for the Prereq: patch file trick. dist-hook: gen-ChangeLog @set -e; \ for file in `cd $(top_srcdir); \ find scripts mpi include -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)/gnupg.spec echo "$(VERSION)" > $(distdir)/VERSION .PHONY: gen-ChangeLog gen-ChangeLog: set -e; \ if test -d $(top_srcdir)/.git; then \ (cd $(top_srcdir) && \ $(GITLOG_TO_CHANGELOG) --append-dot --tear-off \ --amend=scripts/git-log-fix \ --since=$(gen_start_date) ) > $(distdir)/cl-t; \ cat $(top_srcdir)/scripts/git-log-footer >> $(distdir)/cl-t; \ rm -f $(distdir)/ChangeLog; \ mv $(distdir)/cl-t $(distdir)/ChangeLog; \ fi # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/mpi/0000755000175000017500000000000012635457223010515 500000000000000gnupg-1.4.20/mpi/mpi-mul.c0000644000175000017500000001254712635262326012170 00000000000000/* mpi-mul.c - MPI functions * Copyright (C) 1994, 1996 Free Software Foundation, Inc. * Copyright (C) 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" void mpi_mul_ui( MPI prod, MPI mult, unsigned long small_mult ) { mpi_size_t size, prod_size; mpi_ptr_t prod_ptr; mpi_limb_t cy; int sign; size = mult->nlimbs; sign = mult->sign; if( !size || !small_mult ) { prod->nlimbs = 0; prod->sign = 0; return; } prod_size = size + 1; if( prod->alloced < prod_size ) mpi_resize( prod, prod_size ); prod_ptr = prod->d; cy = mpihelp_mul_1( prod_ptr, mult->d, size, (mpi_limb_t)small_mult ); if( cy ) prod_ptr[size++] = cy; prod->nlimbs = size; prod->sign = sign; } void mpi_mul_2exp( MPI w, MPI u, unsigned long cnt) { mpi_size_t usize, wsize, limb_cnt; mpi_ptr_t wp; mpi_limb_t wlimb; int usign, wsign; usize = u->nlimbs; usign = u->sign; if( !usize ) { w->nlimbs = 0; w->sign = 0; return; } limb_cnt = cnt / BITS_PER_MPI_LIMB; wsize = usize + limb_cnt + 1; if( w->alloced < wsize ) mpi_resize(w, wsize ); wp = w->d; wsize = usize + limb_cnt; wsign = usign; cnt %= BITS_PER_MPI_LIMB; if( cnt ) { wlimb = mpihelp_lshift( wp + limb_cnt, u->d, usize, cnt ); if( wlimb ) { wp[wsize] = wlimb; wsize++; } } else { MPN_COPY_DECR( wp + limb_cnt, u->d, usize ); } /* Zero all whole limbs at low end. Do it here and not before calling * mpn_lshift, not to lose for U == W. */ MPN_ZERO( wp, limb_cnt ); w->nlimbs = wsize; w->sign = wsign; } void mpi_mul( MPI w, MPI u, MPI v) { mpi_size_t usize, vsize, wsize; mpi_ptr_t up, vp, wp; mpi_limb_t cy; int usign, vsign, usecure, vsecure, sign_product; int assign_wp=0; mpi_ptr_t tmp_limb=NULL; if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */ usize = v->nlimbs; usign = v->sign; usecure = mpi_is_secure(v); up = v->d; vsize = u->nlimbs; vsign = u->sign; vsecure = mpi_is_secure(u); vp = u->d; } else { usize = u->nlimbs; usign = u->sign; usecure = mpi_is_secure(u); up = u->d; vsize = v->nlimbs; vsign = v->sign; vsecure = mpi_is_secure(v); vp = v->d; } sign_product = usign ^ vsign; wp = w->d; /* Ensure W has space enough to store the result. */ wsize = usize + vsize; if ( !mpi_is_secure (w) && (mpi_is_secure (u) || mpi_is_secure (v)) ) { /* w is not allocated in secure space but u or v is. To make sure * that no temporray results are stored in w, we temporary use * a newly allocated limb space for w */ wp = mpi_alloc_limb_space( wsize, 1 ); assign_wp = 2; /* mark it as 2 so that we can later copy it back to * mormal memory */ } else if( w->alloced < wsize ) { if( wp == up || wp == vp ) { wp = mpi_alloc_limb_space( wsize, mpi_is_secure(w) ); assign_wp = 1; } else { mpi_resize(w, wsize ); wp = w->d; } } else { /* Make U and V not overlap with W. */ if( wp == up ) { /* W and U are identical. Allocate temporary space for U. */ up = tmp_limb = mpi_alloc_limb_space( usize, usecure ); /* Is V identical too? Keep it identical with U. */ if( wp == vp ) vp = up; /* Copy to the temporary space. */ MPN_COPY( up, wp, usize ); } else if( wp == vp ) { /* W and V are identical. Allocate temporary space for V. */ vp = tmp_limb = mpi_alloc_limb_space( vsize, vsecure ); /* Copy to the temporary space. */ MPN_COPY( vp, wp, vsize ); } } if( !vsize ) wsize = 0; else { cy = mpihelp_mul( wp, up, usize, vp, vsize ); wsize -= cy? 0:1; } if( assign_wp ) { if (assign_wp == 2) { /* copy the temp wp from secure memory back to normal memory */ mpi_ptr_t tmp_wp = mpi_alloc_limb_space (wsize, 0); MPN_COPY (tmp_wp, wp, wsize); mpi_free_limb_space (wp); wp = tmp_wp; } mpi_assign_limb_space( w, wp, wsize ); } w->nlimbs = wsize; w->sign = sign_product; if( tmp_limb ) mpi_free_limb_space( tmp_limb ); } void mpi_mulm( MPI w, MPI u, MPI v, MPI m) { mpi_mul(w, u, v); mpi_fdiv_r( w, w, m ); } gnupg-1.4.20/mpi/i586/0000755000175000017500000000000012635457223011210 500000000000000gnupg-1.4.20/mpi/i586/README0000644000175000017500000000211412635262326012004 00000000000000This directory contains mpn functions optimized for Intel Pentium processors. RELEVANT OPTIMIZATION ISSUES 1. Pentium doesn't allocate cache lines on writes, unlike most other modern processors. Since the functions in the mpn class do array writes, we have to handle allocating the destination cache lines by reading a word from it in the loops, to achieve the best performance. 2. Pairing of memory operations requires that the two issued operations refer to different cache banks. The simplest way to insure this is to read/write two words from the same object. If we make operations on different objects, they might or might not be to the same cache bank. STATUS 1. mpn_lshift and mpn_rshift run at about 6 cycles/limb, but the Pentium documentation indicates that they should take only 43/8 = 5.375 cycles/limb, or 5 cycles/limb asymptotically. 2. mpn_add_n and mpn_sub_n run at asymptotically 2 cycles/limb. Due to loop overhead and other delays (cache refill?), they run at or near 2.5 cycles/limb. 3. mpn_mul_1, mpn_addmul_1, mpn_submul_1 all run 1 cycle faster than they should... gnupg-1.4.20/mpi/i586/mpih-mul2.S0000644000175000017500000000520112635262326013062 00000000000000/* i80586 addmul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_addmul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ #define res_ptr edi #define s1_ptr esi #define size ecx #define s2_limb ebp TEXT ALIGN (3) GLOBL C_SYMBOL_NAME(mpihelp_addmul_1) C_SYMBOL_NAME(mpihelp_addmul_1:) INSN1(push,l ,R(edi)) INSN1(push,l ,R(esi)) INSN1(push,l ,R(ebx)) INSN1(push,l ,R(ebp)) INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20)) INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24)) INSN2(mov,l ,R(size),MEM_DISP(esp,28)) INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32)) INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4)) INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4)) INSN1(neg,l ,R(size)) INSN2(xor,l ,R(ebx),R(ebx)) ALIGN (3) Loop: INSN2(adc,l ,R(ebx),$0) INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4)) INSN1(mul,l ,R(s2_limb)) INSN2(add,l ,R(eax),R(ebx)) INSN2(mov,l ,R(ebx),MEM_INDEX(res_ptr,size,4)) INSN2(adc,l ,R(edx),$0) INSN2(add,l ,R(ebx),R(eax)) INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx)) INSN1(inc,l ,R(size)) INSN2(mov,l ,R(ebx),R(edx)) INSN1(jnz, ,Loop) INSN2(adc,l ,R(ebx),$0) INSN2(mov,l ,R(eax),R(ebx)) INSN1(pop,l ,R(ebp)) INSN1(pop,l ,R(ebx)) INSN1(pop,l ,R(esi)) INSN1(pop,l ,R(edi)) ret gnupg-1.4.20/mpi/i586/mpih-mul3.S0000644000175000017500000000520012635262326013062 00000000000000/* i80586 submul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_submul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ #define res_ptr edi #define s1_ptr esi #define size ecx #define s2_limb ebp TEXT ALIGN (3) GLOBL C_SYMBOL_NAME(mpihelp_submul_1) C_SYMBOL_NAME(mpihelp_submul_1:) INSN1(push,l ,R(edi)) INSN1(push,l ,R(esi)) INSN1(push,l ,R(ebx)) INSN1(push,l ,R(ebp)) INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20)) INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24)) INSN2(mov,l ,R(size),MEM_DISP(esp,28)) INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32)) INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4)) INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4)) INSN1(neg,l ,R(size)) INSN2(xor,l ,R(ebx),R(ebx)) ALIGN (3) Loop: INSN2(adc,l ,R(ebx),$0) INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4)) INSN1(mul,l ,R(s2_limb)) INSN2(add,l ,R(eax),R(ebx)) INSN2(mov,l ,R(ebx),MEM_INDEX(res_ptr,size,4)) INSN2(adc,l ,R(edx),$0) INSN2(sub,l ,R(ebx),R(eax)) INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx)) INSN1(inc,l ,R(size)) INSN2(mov,l ,R(ebx),R(edx)) INSN1(jnz, ,Loop) INSN2(adc,l ,R(ebx),$0) INSN2(mov,l ,R(eax),R(ebx)) INSN1(pop,l ,R(ebp)) INSN1(pop,l ,R(ebx)) INSN1(pop,l ,R(esi)) INSN1(pop,l ,R(edi)) ret gnupg-1.4.20/mpi/i586/mpih-rshift.S0000644000175000017500000001133612635262326013510 00000000000000/* i80586 rshift * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_rshift( mpi_ptr_t wp, (sp + 4) * mpi_ptr_t up, (sp + 8) * mpi_size_t usize, (sp + 12) * unsigned cnt) (sp + 16) */ .text ALIGN (3) .globl C_SYMBOL_NAME(mpihelp_rshift) C_SYMBOL_NAME(mpihelp_rshift:) pushl %edi pushl %esi pushl %ebx pushl %ebp movl 20(%esp),%edi /* res_ptr */ movl 24(%esp),%esi /* s_ptr */ movl 28(%esp),%ebp /* size */ movl 32(%esp),%ecx /* cnt */ /* We can use faster code for shift-by-1 under certain conditions. */ cmp $1,%ecx jne Rnormal leal 4(%edi),%eax cmpl %esi,%eax jnc Rspecial /* jump if res_ptr + 1 >= s_ptr */ leal (%edi,%ebp,4),%eax cmpl %eax,%esi jnc Rspecial /* jump if s_ptr >= res_ptr + size */ Rnormal: movl (%esi),%edx addl $4,%esi xorl %eax,%eax shrdl %cl,%edx,%eax /* compute carry limb */ pushl %eax /* push carry limb onto stack */ decl %ebp pushl %ebp shrl $3,%ebp jz Rend movl (%edi),%eax /* fetch destination cache line */ ALIGN (2) Roop: movl 28(%edi),%eax /* fetch destination cache line */ movl %edx,%ebx movl (%esi),%eax movl 4(%esi),%edx shrdl %cl,%eax,%ebx shrdl %cl,%edx,%eax movl %ebx,(%edi) movl %eax,4(%edi) movl 8(%esi),%ebx movl 12(%esi),%eax shrdl %cl,%ebx,%edx shrdl %cl,%eax,%ebx movl %edx,8(%edi) movl %ebx,12(%edi) movl 16(%esi),%edx movl 20(%esi),%ebx shrdl %cl,%edx,%eax shrdl %cl,%ebx,%edx movl %eax,16(%edi) movl %edx,20(%edi) movl 24(%esi),%eax movl 28(%esi),%edx shrdl %cl,%eax,%ebx shrdl %cl,%edx,%eax movl %ebx,24(%edi) movl %eax,28(%edi) addl $32,%esi addl $32,%edi decl %ebp jnz Roop Rend: popl %ebp andl $7,%ebp jz Rend2 Roop2: movl (%esi),%eax shrdl %cl,%eax,%edx /* compute result limb */ movl %edx,(%edi) movl %eax,%edx addl $4,%esi addl $4,%edi decl %ebp jnz Roop2 Rend2: shrl %cl,%edx /* compute most significant limb */ movl %edx,(%edi) /* store it */ popl %eax /* pop carry limb */ popl %ebp popl %ebx popl %esi popl %edi ret /* We loop from least significant end of the arrays, which is only permissable if the source and destination don't overlap, since the function is documented to work for overlapping source and destination. */ Rspecial: leal -4(%edi,%ebp,4),%edi leal -4(%esi,%ebp,4),%esi movl (%esi),%edx subl $4,%esi decl %ebp pushl %ebp shrl $3,%ebp shrl $1,%edx incl %ebp decl %ebp jz RLend movl (%edi),%eax /* fetch destination cache line */ ALIGN (2) RLoop: movl -28(%edi),%eax /* fetch destination cache line */ movl %edx,%ebx movl (%esi),%eax movl -4(%esi),%edx rcrl $1,%eax movl %ebx,(%edi) rcrl $1,%edx movl %eax,-4(%edi) movl -8(%esi),%ebx movl -12(%esi),%eax rcrl $1,%ebx movl %edx,-8(%edi) rcrl $1,%eax movl %ebx,-12(%edi) movl -16(%esi),%edx movl -20(%esi),%ebx rcrl $1,%edx movl %eax,-16(%edi) rcrl $1,%ebx movl %edx,-20(%edi) movl -24(%esi),%eax movl -28(%esi),%edx rcrl $1,%eax movl %ebx,-24(%edi) rcrl $1,%edx movl %eax,-28(%edi) leal -32(%esi),%esi /* use leal not to clobber carry */ leal -32(%edi),%edi decl %ebp jnz RLoop RLend: popl %ebp sbbl %eax,%eax /* save carry in %eax */ andl $7,%ebp jz RLend2 addl %eax,%eax /* restore carry from eax */ RLoop2: movl %edx,%ebx movl (%esi),%edx rcrl $1,%edx movl %ebx,(%edi) leal -4(%esi),%esi /* use leal not to clobber carry */ leal -4(%edi),%edi decl %ebp jnz RLoop2 jmp RL1 RLend2: addl %eax,%eax /* restore carry from eax */ RL1: movl %edx,(%edi) /* store last limb */ movl $0,%eax rcrl $1,%eax popl %ebp popl %ebx popl %esi popl %edi ret gnupg-1.4.20/mpi/i586/mpih-add1.S0000644000175000017500000000521612635262326013022 00000000000000/* i80586 add_n -- Add two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1992, 1994, 1995, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_add_n( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_ptr_t s2_ptr, (sp + 12) * mpi_size_t size) (sp + 16) */ .text ALIGN (3) .globl C_SYMBOL_NAME(mpihelp_add_n) C_SYMBOL_NAME(mpihelp_add_n:) pushl %edi pushl %esi pushl %ebx pushl %ebp movl 20(%esp),%edi /* res_ptr */ movl 24(%esp),%esi /* s1_ptr */ movl 28(%esp),%ebp /* s2_ptr */ movl 32(%esp),%ecx /* size */ movl (%ebp),%ebx decl %ecx movl %ecx,%edx shrl $3,%ecx andl $7,%edx testl %ecx,%ecx /* zero carry flag */ jz Lend pushl %edx ALIGN (3) Loop: movl 28(%edi),%eax /* fetch destination cache line */ leal 32(%edi),%edi L1: movl (%esi),%eax movl 4(%esi),%edx adcl %ebx,%eax movl 4(%ebp),%ebx adcl %ebx,%edx movl 8(%ebp),%ebx movl %eax,-32(%edi) movl %edx,-28(%edi) L2: movl 8(%esi),%eax movl 12(%esi),%edx adcl %ebx,%eax movl 12(%ebp),%ebx adcl %ebx,%edx movl 16(%ebp),%ebx movl %eax,-24(%edi) movl %edx,-20(%edi) L3: movl 16(%esi),%eax movl 20(%esi),%edx adcl %ebx,%eax movl 20(%ebp),%ebx adcl %ebx,%edx movl 24(%ebp),%ebx movl %eax,-16(%edi) movl %edx,-12(%edi) L4: movl 24(%esi),%eax movl 28(%esi),%edx adcl %ebx,%eax movl 28(%ebp),%ebx adcl %ebx,%edx movl 32(%ebp),%ebx movl %eax,-8(%edi) movl %edx,-4(%edi) leal 32(%esi),%esi leal 32(%ebp),%ebp decl %ecx jnz Loop popl %edx Lend: decl %edx /* test %edx w/o clobbering carry */ js Lend2 incl %edx Loop2: leal 4(%edi),%edi movl (%esi),%eax adcl %ebx,%eax movl 4(%ebp),%ebx movl %eax,-4(%edi) leal 4(%esi),%esi leal 4(%ebp),%ebp decl %edx jnz Loop2 Lend2: movl (%esi),%eax adcl %ebx,%eax movl %eax,(%edi) sbbl %eax,%eax negl %eax popl %ebp popl %ebx popl %esi popl %edi ret gnupg-1.4.20/mpi/i586/mpih-mul1.S0000644000175000017500000000476612635262326013100 00000000000000/* i80586 mul_1 -- Multiply a limb vector with a limb and store * the result in a second limb vector. * * Copyright (C) 1992, 1994, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_mul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ #define res_ptr edi #define s1_ptr esi #define size ecx #define s2_limb ebp TEXT ALIGN (3) GLOBL C_SYMBOL_NAME(mpihelp_mul_1) C_SYMBOL_NAME(mpihelp_mul_1:) INSN1(push,l ,R(edi)) INSN1(push,l ,R(esi)) INSN1(push,l ,R(ebx)) INSN1(push,l ,R(ebp)) INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20)) INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24)) INSN2(mov,l ,R(size),MEM_DISP(esp,28)) INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32)) INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4)) INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4)) INSN1(neg,l ,R(size)) INSN2(xor,l ,R(ebx),R(ebx)) ALIGN (3) Loop: INSN2(adc,l ,R(ebx),$0) INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4)) INSN1(mul,l ,R(s2_limb)) INSN2(add,l ,R(ebx),R(eax)) INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(ebx)) INSN1(inc,l ,R(size)) INSN2(mov,l ,R(ebx),R(edx)) INSN1(jnz, ,Loop) INSN2(adc,l ,R(ebx),$0) INSN2(mov,l ,R(eax),R(ebx)) INSN1(pop,l ,R(ebp)) INSN1(pop,l ,R(ebx)) INSN1(pop,l ,R(esi)) INSN1(pop,l ,R(edi)) ret gnupg-1.4.20/mpi/i586/distfiles0000644000175000017500000000014012635262326013032 00000000000000mpih-add1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S mpih-lshift.S mpih-rshift.S mpih-sub1.S README gnupg-1.4.20/mpi/i586/mpih-lshift.S0000644000175000017500000001132512635262326013500 00000000000000/* i80586 lshift * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_lshift( mpi_ptr_t wp, (sp + 4) * mpi_ptr_t up, (sp + 8) * mpi_size_t usize, (sp + 12) * unsigned cnt) (sp + 16) */ .text ALIGN (3) .globl C_SYMBOL_NAME(mpihelp_lshift) C_SYMBOL_NAME(mpihelp_lshift:) pushl %edi pushl %esi pushl %ebx pushl %ebp movl 20(%esp),%edi /* res_ptr */ movl 24(%esp),%esi /* s_ptr */ movl 28(%esp),%ebp /* size */ movl 32(%esp),%ecx /* cnt */ /* We can use faster code for shift-by-1 under certain conditions. */ cmp $1,%ecx jne Lnormal leal 4(%esi),%eax cmpl %edi,%eax jnc Lspecial /* jump if s_ptr + 1 >= res_ptr */ leal (%esi,%ebp,4),%eax cmpl %eax,%edi jnc Lspecial /* jump if res_ptr >= s_ptr + size */ Lnormal: leal -4(%edi,%ebp,4),%edi leal -4(%esi,%ebp,4),%esi movl (%esi),%edx subl $4,%esi xorl %eax,%eax shldl %cl,%edx,%eax /* compute carry limb */ pushl %eax /* push carry limb onto stack */ decl %ebp pushl %ebp shrl $3,%ebp jz Lend movl (%edi),%eax /* fetch destination cache line */ ALIGN (2) Loop: movl -28(%edi),%eax /* fetch destination cache line */ movl %edx,%ebx movl (%esi),%eax movl -4(%esi),%edx shldl %cl,%eax,%ebx shldl %cl,%edx,%eax movl %ebx,(%edi) movl %eax,-4(%edi) movl -8(%esi),%ebx movl -12(%esi),%eax shldl %cl,%ebx,%edx shldl %cl,%eax,%ebx movl %edx,-8(%edi) movl %ebx,-12(%edi) movl -16(%esi),%edx movl -20(%esi),%ebx shldl %cl,%edx,%eax shldl %cl,%ebx,%edx movl %eax,-16(%edi) movl %edx,-20(%edi) movl -24(%esi),%eax movl -28(%esi),%edx shldl %cl,%eax,%ebx shldl %cl,%edx,%eax movl %ebx,-24(%edi) movl %eax,-28(%edi) subl $32,%esi subl $32,%edi decl %ebp jnz Loop Lend: popl %ebp andl $7,%ebp jz Lend2 Loop2: movl (%esi),%eax shldl %cl,%eax,%edx movl %edx,(%edi) movl %eax,%edx subl $4,%esi subl $4,%edi decl %ebp jnz Loop2 Lend2: shll %cl,%edx /* compute least significant limb */ movl %edx,(%edi) /* store it */ popl %eax /* pop carry limb */ popl %ebp popl %ebx popl %esi popl %edi ret /* We loop from least significant end of the arrays, which is only permissable if the source and destination don't overlap, since the function is documented to work for overlapping source and destination. */ Lspecial: movl (%esi),%edx addl $4,%esi decl %ebp pushl %ebp shrl $3,%ebp addl %edx,%edx incl %ebp decl %ebp jz LLend movl (%edi),%eax /* fetch destination cache line */ ALIGN (2) LLoop: movl 28(%edi),%eax /* fetch destination cache line */ movl %edx,%ebx movl (%esi),%eax movl 4(%esi),%edx adcl %eax,%eax movl %ebx,(%edi) adcl %edx,%edx movl %eax,4(%edi) movl 8(%esi),%ebx movl 12(%esi),%eax adcl %ebx,%ebx movl %edx,8(%edi) adcl %eax,%eax movl %ebx,12(%edi) movl 16(%esi),%edx movl 20(%esi),%ebx adcl %edx,%edx movl %eax,16(%edi) adcl %ebx,%ebx movl %edx,20(%edi) movl 24(%esi),%eax movl 28(%esi),%edx adcl %eax,%eax movl %ebx,24(%edi) adcl %edx,%edx movl %eax,28(%edi) leal 32(%esi),%esi /* use leal not to clobber carry */ leal 32(%edi),%edi decl %ebp jnz LLoop LLend: popl %ebp sbbl %eax,%eax /* save carry in %eax */ andl $7,%ebp jz LLend2 addl %eax,%eax /* restore carry from eax */ LLoop2: movl %edx,%ebx movl (%esi),%edx adcl %edx,%edx movl %ebx,(%edi) leal 4(%esi),%esi /* use leal not to clobber carry */ leal 4(%edi),%edi decl %ebp jnz LLoop2 jmp LL1 LLend2: addl %eax,%eax /* restore carry from eax */ LL1: movl %edx,(%edi) /* store last limb */ sbbl %eax,%eax negl %eax popl %ebp popl %ebx popl %esi popl %edi ret gnupg-1.4.20/mpi/i586/mpih-sub1.S0000644000175000017500000000607312635262326013065 00000000000000/* i80586 sub_n -- Sub two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_sub_n( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_ptr_t s2_ptr, (sp + 12) * mpi_size_t size) (sp + 16) */ .text ALIGN (3) .globl C_SYMBOL_NAME(mpihelp_sub_n) C_SYMBOL_NAME(mpihelp_sub_n:) pushl %edi pushl %esi pushl %ebx pushl %ebp movl 20(%esp),%edi /* res_ptr */ movl 24(%esp),%esi /* s1_ptr */ movl 28(%esp),%ebp /* s2_ptr */ movl 32(%esp),%ecx /* size */ movl (%ebp),%ebx decl %ecx movl %ecx,%edx shrl $3,%ecx andl $7,%edx testl %ecx,%ecx /* zero carry flag */ jz Lend pushl %edx ALIGN (3) Loop: movl 28(%edi),%eax /* fetch destination cache line */ leal 32(%edi),%edi L1: movl (%esi),%eax movl 4(%esi),%edx sbbl %ebx,%eax movl 4(%ebp),%ebx sbbl %ebx,%edx movl 8(%ebp),%ebx movl %eax,-32(%edi) movl %edx,-28(%edi) L2: movl 8(%esi),%eax movl 12(%esi),%edx sbbl %ebx,%eax movl 12(%ebp),%ebx sbbl %ebx,%edx movl 16(%ebp),%ebx movl %eax,-24(%edi) movl %edx,-20(%edi) L3: movl 16(%esi),%eax movl 20(%esi),%edx sbbl %ebx,%eax movl 20(%ebp),%ebx sbbl %ebx,%edx movl 24(%ebp),%ebx movl %eax,-16(%edi) movl %edx,-12(%edi) L4: movl 24(%esi),%eax movl 28(%esi),%edx sbbl %ebx,%eax movl 28(%ebp),%ebx sbbl %ebx,%edx movl 32(%ebp),%ebx movl %eax,-8(%edi) movl %edx,-4(%edi) leal 32(%esi),%esi leal 32(%ebp),%ebp decl %ecx jnz Loop popl %edx Lend: decl %edx /* test %edx w/o clobbering carry */ js Lend2 incl %edx Loop2: leal 4(%edi),%edi movl (%esi),%eax sbbl %ebx,%eax movl 4(%ebp),%ebx movl %eax,-4(%edi) leal 4(%esi),%esi leal 4(%ebp),%ebp decl %edx jnz Loop2 Lend2: movl (%esi),%eax sbbl %ebx,%eax movl %eax,(%edi) sbbl %eax,%eax negl %eax popl %ebp popl %ebx popl %esi popl %edi ret gnupg-1.4.20/mpi/mpih-mul.c0000644000175000017500000003551012635262326012333 00000000000000/* mpihelp-mul.c - MPI helper functions * Copyright (C) 1994, 1996, 1998, 1999, * 2000 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 3 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, see . * * 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. */ #include #include #include #include #include "mpi-internal.h" #include "longlong.h" #define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \ do { \ if( (size) < KARATSUBA_THRESHOLD ) \ mul_n_basecase (prodp, up, vp, size); \ else \ mul_n (prodp, up, vp, size, tspace); \ } while (0); #define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \ do { \ if ((size) < KARATSUBA_THRESHOLD) \ mpih_sqr_n_basecase (prodp, up, size); \ else \ mpih_sqr_n (prodp, up, size, tspace); \ } while (0); /* Multiply the natural numbers u (pointed to by UP) and v (pointed to by VP), * both with SIZE limbs, and store the result at PRODP. 2 * SIZE limbs are * always stored. Return the most significant limb. * * Argument constraints: * 1. PRODP != UP and PRODP != VP, i.e. the destination * must be distinct from the multiplier and the multiplicand. * * * Handle simple cases with traditional multiplication. * * This is the most critical code of multiplication. All multiplies rely * on this, both small and huge. Small ones arrive here immediately. Huge * ones arrive here as this is the base case for Karatsuba's recursive * algorithm below. */ static mpi_limb_t mul_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size) { mpi_size_t i; mpi_limb_t cy; mpi_limb_t v_limb; /* Multiply by the first limb in V separately, as the result can be * stored (not added) to PROD. We also avoid a loop for zeroing. */ v_limb = vp[0]; if( v_limb <= 1 ) { if( v_limb == 1 ) MPN_COPY( prodp, up, size ); else MPN_ZERO( prodp, size ); cy = 0; } else cy = mpihelp_mul_1( prodp, up, size, v_limb ); prodp[size] = cy; prodp++; /* For each iteration in the outer loop, multiply one limb from * U with one limb from V, and add it to PROD. */ for( i = 1; i < size; i++ ) { v_limb = vp[i]; if( v_limb <= 1 ) { cy = 0; if( v_limb == 1 ) cy = mpihelp_add_n(prodp, prodp, up, size); } else cy = mpihelp_addmul_1(prodp, up, size, v_limb); prodp[size] = cy; prodp++; } return cy; } static void mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size, mpi_ptr_t tspace ) { if( size & 1 ) { /* The size is odd, and the code below doesn't handle that. * Multiply the least significant (size - 1) limbs with a recursive * call, and handle the most significant limb of S1 and S2 * separately. * A slightly faster way to do this would be to make the Karatsuba * code below behave as if the size were even, and let it check for * odd size in the end. I.e., in essence move this code to the end. * Doing so would save us a recursive call, and potentially make the * stack grow a lot less. */ mpi_size_t esize = size - 1; /* even size */ mpi_limb_t cy_limb; MPN_MUL_N_RECURSE( prodp, up, vp, esize, tspace ); cy_limb = mpihelp_addmul_1( prodp + esize, up, esize, vp[esize] ); prodp[esize + esize] = cy_limb; cy_limb = mpihelp_addmul_1( prodp + esize, vp, size, up[esize] ); prodp[esize + size] = cy_limb; } else { /* Anatolij Alekseevich Karatsuba's divide-and-conquer algorithm. * * Split U in two pieces, U1 and U0, such that * U = U0 + U1*(B**n), * and V in V1 and V0, such that * V = V0 + V1*(B**n). * * UV is then computed recursively using the identity * * 2n n n n * UV = (B + B )U V + B (U -U )(V -V ) + (B + 1)U V * 1 1 1 0 0 1 0 0 * * Where B = 2**BITS_PER_MP_LIMB. */ mpi_size_t hsize = size >> 1; mpi_limb_t cy; int negflg; /* Product H. ________________ ________________ * |_____U1 x V1____||____U0 x V0_____| * Put result in upper part of PROD and pass low part of TSPACE * as new TSPACE. */ MPN_MUL_N_RECURSE(prodp + size, up + hsize, vp + hsize, hsize, tspace); /* Product M. ________________ * |_(U1-U0)(V0-V1)_| */ if( mpihelp_cmp(up + hsize, up, hsize) >= 0 ) { mpihelp_sub_n(prodp, up + hsize, up, hsize); negflg = 0; } else { mpihelp_sub_n(prodp, up, up + hsize, hsize); negflg = 1; } if( mpihelp_cmp(vp + hsize, vp, hsize) >= 0 ) { mpihelp_sub_n(prodp + hsize, vp + hsize, vp, hsize); negflg ^= 1; } else { mpihelp_sub_n(prodp + hsize, vp, vp + hsize, hsize); /* No change of NEGFLG. */ } /* Read temporary operands from low part of PROD. * Put result in low part of TSPACE using upper part of TSPACE * as new TSPACE. */ MPN_MUL_N_RECURSE(tspace, prodp, prodp + hsize, hsize, tspace + size); /* Add/copy product H. */ MPN_COPY (prodp + hsize, prodp + size, hsize); cy = mpihelp_add_n( prodp + size, prodp + size, prodp + size + hsize, hsize); /* Add product M (if NEGFLG M is a negative number) */ if(negflg) cy -= mpihelp_sub_n(prodp + hsize, prodp + hsize, tspace, size); else cy += mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size); /* Product L. ________________ ________________ * |________________||____U0 x V0_____| * Read temporary operands from low part of PROD. * Put result in low part of TSPACE using upper part of TSPACE * as new TSPACE. */ MPN_MUL_N_RECURSE(tspace, up, vp, hsize, tspace + size); /* Add/copy Product L (twice) */ cy += mpihelp_add_n(prodp + hsize, prodp + hsize, tspace, size); if( cy ) mpihelp_add_1(prodp + hsize + size, prodp + hsize + size, hsize, cy); MPN_COPY(prodp, tspace, hsize); cy = mpihelp_add_n(prodp + hsize, prodp + hsize, tspace + hsize, hsize); if( cy ) mpihelp_add_1(prodp + size, prodp + size, size, 1); } } void mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size ) { mpi_size_t i; mpi_limb_t cy_limb; mpi_limb_t v_limb; /* Multiply by the first limb in V separately, as the result can be * stored (not added) to PROD. We also avoid a loop for zeroing. */ v_limb = up[0]; if( v_limb <= 1 ) { if( v_limb == 1 ) MPN_COPY( prodp, up, size ); else MPN_ZERO(prodp, size); cy_limb = 0; } else cy_limb = mpihelp_mul_1( prodp, up, size, v_limb ); prodp[size] = cy_limb; prodp++; /* For each iteration in the outer loop, multiply one limb from * U with one limb from V, and add it to PROD. */ for( i=1; i < size; i++) { v_limb = up[i]; if( v_limb <= 1 ) { cy_limb = 0; if( v_limb == 1 ) cy_limb = mpihelp_add_n(prodp, prodp, up, size); } else cy_limb = mpihelp_addmul_1(prodp, up, size, v_limb); prodp[size] = cy_limb; prodp++; } } void mpih_sqr_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size, mpi_ptr_t tspace) { if( size & 1 ) { /* The size is odd, and the code below doesn't handle that. * Multiply the least significant (size - 1) limbs with a recursive * call, and handle the most significant limb of S1 and S2 * separately. * A slightly faster way to do this would be to make the Karatsuba * code below behave as if the size were even, and let it check for * odd size in the end. I.e., in essence move this code to the end. * Doing so would save us a recursive call, and potentially make the * stack grow a lot less. */ mpi_size_t esize = size - 1; /* even size */ mpi_limb_t cy_limb; MPN_SQR_N_RECURSE( prodp, up, esize, tspace ); cy_limb = mpihelp_addmul_1( prodp + esize, up, esize, up[esize] ); prodp[esize + esize] = cy_limb; cy_limb = mpihelp_addmul_1( prodp + esize, up, size, up[esize] ); prodp[esize + size] = cy_limb; } else { mpi_size_t hsize = size >> 1; mpi_limb_t cy; /* Product H. ________________ ________________ * |_____U1 x U1____||____U0 x U0_____| * Put result in upper part of PROD and pass low part of TSPACE * as new TSPACE. */ MPN_SQR_N_RECURSE(prodp + size, up + hsize, hsize, tspace); /* Product M. ________________ * |_(U1-U0)(U0-U1)_| */ if( mpihelp_cmp( up + hsize, up, hsize) >= 0 ) mpihelp_sub_n( prodp, up + hsize, up, hsize); else mpihelp_sub_n (prodp, up, up + hsize, hsize); /* Read temporary operands from low part of PROD. * Put result in low part of TSPACE using upper part of TSPACE * as new TSPACE. */ MPN_SQR_N_RECURSE(tspace, prodp, hsize, tspace + size); /* Add/copy product H */ MPN_COPY(prodp + hsize, prodp + size, hsize); cy = mpihelp_add_n(prodp + size, prodp + size, prodp + size + hsize, hsize); /* Add product M (if NEGFLG M is a negative number). */ cy -= mpihelp_sub_n (prodp + hsize, prodp + hsize, tspace, size); /* Product L. ________________ ________________ * |________________||____U0 x U0_____| * Read temporary operands from low part of PROD. * Put result in low part of TSPACE using upper part of TSPACE * as new TSPACE. */ MPN_SQR_N_RECURSE (tspace, up, hsize, tspace + size); /* Add/copy Product L (twice). */ cy += mpihelp_add_n (prodp + hsize, prodp + hsize, tspace, size); if( cy ) mpihelp_add_1(prodp + hsize + size, prodp + hsize + size, hsize, cy); MPN_COPY(prodp, tspace, hsize); cy = mpihelp_add_n (prodp + hsize, prodp + hsize, tspace + hsize, hsize); if( cy ) mpihelp_add_1 (prodp + size, prodp + size, size, 1); } } /* This should be made into an inline function in gmp.h. */ void mpihelp_mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size) { int secure; if( up == vp ) { if( size < KARATSUBA_THRESHOLD ) mpih_sqr_n_basecase( prodp, up, size ); else { mpi_ptr_t tspace; secure = m_is_secure( up ); tspace = mpi_alloc_limb_space( 2 * size, secure ); mpih_sqr_n( prodp, up, size, tspace ); mpi_free_limb_space( tspace ); } } else { if( size < KARATSUBA_THRESHOLD ) mul_n_basecase( prodp, up, vp, size ); else { mpi_ptr_t tspace; secure = m_is_secure( up ) || m_is_secure( vp ); tspace = mpi_alloc_limb_space( 2 * size, secure ); mul_n (prodp, up, vp, size, tspace); mpi_free_limb_space( tspace ); } } } void mpihelp_mul_karatsuba_case( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize, mpi_ptr_t vp, mpi_size_t vsize, struct karatsuba_ctx *ctx ) { mpi_limb_t cy; if( !ctx->tspace || ctx->tspace_size < vsize ) { if( ctx->tspace ) mpi_free_limb_space( ctx->tspace ); ctx->tspace = mpi_alloc_limb_space( 2 * vsize, m_is_secure( up ) || m_is_secure( vp ) ); ctx->tspace_size = vsize; } MPN_MUL_N_RECURSE( prodp, up, vp, vsize, ctx->tspace ); prodp += vsize; up += vsize; usize -= vsize; if( usize >= vsize ) { if( !ctx->tp || ctx->tp_size < vsize ) { if( ctx->tp ) mpi_free_limb_space( ctx->tp ); ctx->tp = mpi_alloc_limb_space( 2 * vsize, m_is_secure( up ) || m_is_secure( vp ) ); ctx->tp_size = vsize; } do { MPN_MUL_N_RECURSE( ctx->tp, up, vp, vsize, ctx->tspace ); cy = mpihelp_add_n( prodp, prodp, ctx->tp, vsize ); mpihelp_add_1( prodp + vsize, ctx->tp + vsize, vsize, cy ); prodp += vsize; up += vsize; usize -= vsize; } while( usize >= vsize ); } if( usize ) { if( usize < KARATSUBA_THRESHOLD ) { mpihelp_mul( ctx->tspace, vp, vsize, up, usize ); } else { if( !ctx->next ) { ctx->next = xmalloc_clear( sizeof *ctx ); } mpihelp_mul_karatsuba_case( ctx->tspace, vp, vsize, up, usize, ctx->next ); } cy = mpihelp_add_n( prodp, prodp, ctx->tspace, vsize); mpihelp_add_1( prodp + vsize, ctx->tspace + vsize, usize, cy ); } } void mpihelp_release_karatsuba_ctx( struct karatsuba_ctx *ctx ) { struct karatsuba_ctx *ctx2; if( ctx->tp ) mpi_free_limb_space( ctx->tp ); if( ctx->tspace ) mpi_free_limb_space( ctx->tspace ); for( ctx=ctx->next; ctx; ctx = ctx2 ) { ctx2 = ctx->next; if( ctx->tp ) mpi_free_limb_space( ctx->tp ); if( ctx->tspace ) mpi_free_limb_space( ctx->tspace ); xfree( ctx ); } } /* Multiply the natural numbers u (pointed to by UP, with USIZE limbs) * and v (pointed to by VP, with VSIZE limbs), and store the result at * PRODP. USIZE + VSIZE limbs are always stored, but if the input * operands are normalized. Return the most significant limb of the * result. * * NOTE: The space pointed to by PRODP is overwritten before finished * with U and V, so overlap is an error. * * Argument constraints: * 1. USIZE >= VSIZE. * 2. PRODP != UP and PRODP != VP, i.e. the destination * must be distinct from the multiplier and the multiplicand. */ mpi_limb_t mpihelp_mul( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize, mpi_ptr_t vp, mpi_size_t vsize) { mpi_ptr_t prod_endp = prodp + usize + vsize - 1; mpi_limb_t cy; struct karatsuba_ctx ctx; if( vsize < KARATSUBA_THRESHOLD ) { mpi_size_t i; mpi_limb_t v_limb; if( !vsize ) return 0; /* Multiply by the first limb in V separately, as the result can be * stored (not added) to PROD. We also avoid a loop for zeroing. */ v_limb = vp[0]; if( v_limb <= 1 ) { if( v_limb == 1 ) MPN_COPY( prodp, up, usize ); else MPN_ZERO( prodp, usize ); cy = 0; } else cy = mpihelp_mul_1( prodp, up, usize, v_limb ); prodp[usize] = cy; prodp++; /* For each iteration in the outer loop, multiply one limb from * U with one limb from V, and add it to PROD. */ for( i = 1; i < vsize; i++ ) { v_limb = vp[i]; if( v_limb <= 1 ) { cy = 0; if( v_limb == 1 ) cy = mpihelp_add_n(prodp, prodp, up, usize); } else cy = mpihelp_addmul_1(prodp, up, usize, v_limb); prodp[usize] = cy; prodp++; } return cy; } memset( &ctx, 0, sizeof ctx ); mpihelp_mul_karatsuba_case( prodp, up, usize, vp, vsize, &ctx ); mpihelp_release_karatsuba_ctx( &ctx ); return *prod_endp; } gnupg-1.4.20/mpi/sparc32/0000755000175000017500000000000012635457223011772 500000000000000gnupg-1.4.20/mpi/sparc32/udiv.S0000644000175000017500000000760612635262326013014 00000000000000/* SPARC v7 __udiv_qrnnd division support, used from longlong.h. * This is for v7 CPUs without a floating-point unit. * * Copyright (C) 1993, 1994, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ ! INPUT PARAMETERS ! rem_ptr o0 ! n1 o1 ! n0 o2 ! d o3 #include "sysdep.h" .text .align 4 .global C_SYMBOL_NAME(__udiv_qrnnd) C_SYMBOL_NAME(__udiv_qrnnd): tst %o3 bneg Largedivisor mov 8,%g1 b Lp1 addxcc %o2,%o2,%o2 Lplop: bcc Ln1 addxcc %o2,%o2,%o2 Lp1: addx %o1,%o1,%o1 subcc %o1,%o3,%o4 bcc Ln2 addxcc %o2,%o2,%o2 Lp2: addx %o1,%o1,%o1 subcc %o1,%o3,%o4 bcc Ln3 addxcc %o2,%o2,%o2 Lp3: addx %o1,%o1,%o1 subcc %o1,%o3,%o4 bcc Ln4 addxcc %o2,%o2,%o2 Lp4: addx %o1,%o1,%o1 addcc %g1,-1,%g1 bne Lplop subcc %o1,%o3,%o4 bcc Ln5 addxcc %o2,%o2,%o2 Lp5: st %o1,[%o0] retl xnor %g0,%o2,%o0 Lnlop: bcc Lp1 addxcc %o2,%o2,%o2 Ln1: addx %o4,%o4,%o4 subcc %o4,%o3,%o1 bcc Lp2 addxcc %o2,%o2,%o2 Ln2: addx %o4,%o4,%o4 subcc %o4,%o3,%o1 bcc Lp3 addxcc %o2,%o2,%o2 Ln3: addx %o4,%o4,%o4 subcc %o4,%o3,%o1 bcc Lp4 addxcc %o2,%o2,%o2 Ln4: addx %o4,%o4,%o4 addcc %g1,-1,%g1 bne Lnlop subcc %o4,%o3,%o1 bcc Lp5 addxcc %o2,%o2,%o2 Ln5: st %o4,[%o0] retl xnor %g0,%o2,%o0 Largedivisor: and %o2,1,%o5 ! %o5 = n0 & 1 srl %o2,1,%o2 sll %o1,31,%g2 or %g2,%o2,%o2 ! %o2 = lo(n1n0 >> 1) srl %o1,1,%o1 ! %o1 = hi(n1n0 >> 1) and %o3,1,%g2 srl %o3,1,%g3 ! %g3 = floor(d / 2) add %g3,%g2,%g3 ! %g3 = ceil(d / 2) b LLp1 addxcc %o2,%o2,%o2 LLplop: bcc LLn1 addxcc %o2,%o2,%o2 LLp1: addx %o1,%o1,%o1 subcc %o1,%g3,%o4 bcc LLn2 addxcc %o2,%o2,%o2 LLp2: addx %o1,%o1,%o1 subcc %o1,%g3,%o4 bcc LLn3 addxcc %o2,%o2,%o2 LLp3: addx %o1,%o1,%o1 subcc %o1,%g3,%o4 bcc LLn4 addxcc %o2,%o2,%o2 LLp4: addx %o1,%o1,%o1 addcc %g1,-1,%g1 bne LLplop subcc %o1,%g3,%o4 bcc LLn5 addxcc %o2,%o2,%o2 LLp5: add %o1,%o1,%o1 ! << 1 tst %g2 bne Oddp add %o5,%o1,%o1 st %o1,[%o0] retl xnor %g0,%o2,%o0 LLnlop: bcc LLp1 addxcc %o2,%o2,%o2 LLn1: addx %o4,%o4,%o4 subcc %o4,%g3,%o1 bcc LLp2 addxcc %o2,%o2,%o2 LLn2: addx %o4,%o4,%o4 subcc %o4,%g3,%o1 bcc LLp3 addxcc %o2,%o2,%o2 LLn3: addx %o4,%o4,%o4 subcc %o4,%g3,%o1 bcc LLp4 addxcc %o2,%o2,%o2 LLn4: addx %o4,%o4,%o4 addcc %g1,-1,%g1 bne LLnlop subcc %o4,%g3,%o1 bcc LLp5 addxcc %o2,%o2,%o2 LLn5: add %o4,%o4,%o4 ! << 1 tst %g2 bne Oddn add %o5,%o4,%o4 st %o4,[%o0] retl xnor %g0,%o2,%o0 Oddp: xnor %g0,%o2,%o2 ! q' in %o2. r' in %o1 addcc %o1,%o2,%o1 bcc LLp6 addx %o2,0,%o2 sub %o1,%o3,%o1 LLp6: subcc %o1,%o3,%g0 bcs LLp7 subx %o2,-1,%o2 sub %o1,%o3,%o1 LLp7: st %o1,[%o0] retl mov %o2,%o0 Oddn: xnor %g0,%o2,%o2 ! q' in %o2. r' in %o4 addcc %o4,%o2,%o4 bcc LLn6 addx %o2,0,%o2 sub %o4,%o3,%o4 LLn6: subcc %o4,%o3,%g0 bcs LLn7 subx %o2,-1,%o2 sub %o4,%o3,%o4 LLn7: st %o4,[%o0] retl mov %o2,%o0 gnupg-1.4.20/mpi/sparc32/mpih-rshift.S0000644000175000017500000000357712635262326014302 00000000000000/* sparc rshift * * Copyright (C) 1995, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ ! INPUT PARAMETERS ! res_ptr %o0 ! src_ptr %o1 ! size %o2 ! cnt %o3 #include "sysdep.h" .text .align 4 .global C_SYMBOL_NAME(mpihelp_rshift) C_SYMBOL_NAME(mpihelp_rshift): ld [%o1],%g2 ! load first limb sub %g0,%o3,%o5 ! negate shift count add %o2,-1,%o2 andcc %o2,4-1,%g4 ! number of limbs in first loop sll %g2,%o5,%g1 ! compute function result be L0 ! if multiple of 4 limbs, skip first loop st %g1,[%sp+80] sub %o2,%g4,%o2 ! adjust count for main loop Loop0: ld [%o1+4],%g3 add %o0,4,%o0 add %o1,4,%o1 addcc %g4,-1,%g4 srl %g2,%o3,%o4 sll %g3,%o5,%g1 mov %g3,%g2 or %o4,%g1,%o4 bne Loop0 st %o4,[%o0-4] L0: tst %o2 be Lend nop Loop: ld [%o1+4],%g3 add %o0,16,%o0 addcc %o2,-4,%o2 srl %g2,%o3,%o4 sll %g3,%o5,%g1 ld [%o1+8],%g2 srl %g3,%o3,%g4 or %o4,%g1,%o4 st %o4,[%o0-16] sll %g2,%o5,%g1 ld [%o1+12],%g3 srl %g2,%o3,%o4 or %g4,%g1,%g4 st %g4,[%o0-12] sll %g3,%o5,%g1 ld [%o1+16],%g2 srl %g3,%o3,%g4 or %o4,%g1,%o4 st %o4,[%o0-8] sll %g2,%o5,%g1 add %o1,16,%o1 or %g4,%g1,%g4 bne Loop st %g4,[%o0-4] Lend: srl %g2,%o3,%g2 st %g2,[%o0-0] retl ld [%sp+80],%o0 gnupg-1.4.20/mpi/sparc32/mpih-add1.S0000644000175000017500000001277412635262326013613 00000000000000/* SPARC _add_n -- Add two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1995, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_add_n( mpi_ptr_t res_ptr, * mpi_ptr_t s1_ptr, * mpi_ptr_t s2_ptr, * mpi_size_t size) */ ! INPUT PARAMETERS #define res_ptr %o0 #define s1_ptr %o1 #define s2_ptr %o2 #define size %o3 #include "sysdep.h" .text .align 4 .global C_SYMBOL_NAME(mpihelp_add_n) C_SYMBOL_NAME(mpihelp_add_n): xor s2_ptr,res_ptr,%g1 andcc %g1,4,%g0 bne L1 ! branch if alignment differs nop ! ** V1a ** L0: andcc res_ptr,4,%g0 ! res_ptr unaligned? Side effect: cy=0 be L_v1 ! if no, branch nop /* Add least significant limb separately to align res_ptr and s2_ptr */ ld [s1_ptr],%g4 add s1_ptr,4,s1_ptr ld [s2_ptr],%g2 add s2_ptr,4,s2_ptr add size,-1,size addcc %g4,%g2,%o4 st %o4,[res_ptr] add res_ptr,4,res_ptr L_v1: addx %g0,%g0,%o4 ! save cy in register cmp size,2 ! if size < 2 ... bl Lend2 ! ... branch to tail code subcc %g0,%o4,%g0 ! restore cy ld [s1_ptr+0],%g4 addcc size,-10,size ld [s1_ptr+4],%g1 ldd [s2_ptr+0],%g2 blt Lfin1 subcc %g0,%o4,%g0 ! restore cy /* Add blocks of 8 limbs until less than 8 limbs remain */ Loop1: addxcc %g4,%g2,%o4 ld [s1_ptr+8],%g4 addxcc %g1,%g3,%o5 ld [s1_ptr+12],%g1 ldd [s2_ptr+8],%g2 std %o4,[res_ptr+0] addxcc %g4,%g2,%o4 ld [s1_ptr+16],%g4 addxcc %g1,%g3,%o5 ld [s1_ptr+20],%g1 ldd [s2_ptr+16],%g2 std %o4,[res_ptr+8] addxcc %g4,%g2,%o4 ld [s1_ptr+24],%g4 addxcc %g1,%g3,%o5 ld [s1_ptr+28],%g1 ldd [s2_ptr+24],%g2 std %o4,[res_ptr+16] addxcc %g4,%g2,%o4 ld [s1_ptr+32],%g4 addxcc %g1,%g3,%o5 ld [s1_ptr+36],%g1 ldd [s2_ptr+32],%g2 std %o4,[res_ptr+24] addx %g0,%g0,%o4 ! save cy in register addcc size,-8,size add s1_ptr,32,s1_ptr add s2_ptr,32,s2_ptr add res_ptr,32,res_ptr bge Loop1 subcc %g0,%o4,%g0 ! restore cy Lfin1: addcc size,8-2,size blt Lend1 subcc %g0,%o4,%g0 ! restore cy /* Add blocks of 2 limbs until less than 2 limbs remain */ Loope1: addxcc %g4,%g2,%o4 ld [s1_ptr+8],%g4 addxcc %g1,%g3,%o5 ld [s1_ptr+12],%g1 ldd [s2_ptr+8],%g2 std %o4,[res_ptr+0] addx %g0,%g0,%o4 ! save cy in register addcc size,-2,size add s1_ptr,8,s1_ptr add s2_ptr,8,s2_ptr add res_ptr,8,res_ptr bge Loope1 subcc %g0,%o4,%g0 ! restore cy Lend1: addxcc %g4,%g2,%o4 addxcc %g1,%g3,%o5 std %o4,[res_ptr+0] addx %g0,%g0,%o4 ! save cy in register andcc size,1,%g0 be Lret1 subcc %g0,%o4,%g0 ! restore cy /* Add last limb */ ld [s1_ptr+8],%g4 ld [s2_ptr+8],%g2 addxcc %g4,%g2,%o4 st %o4,[res_ptr+8] Lret1: retl addx %g0,%g0,%o0 ! return carry-out from most sign. limb L1: xor s1_ptr,res_ptr,%g1 andcc %g1,4,%g0 bne L2 nop ! ** V1b ** mov s2_ptr,%g1 mov s1_ptr,s2_ptr b L0 mov %g1,s1_ptr ! ** V2 ** /* If we come here, the alignment of s1_ptr and res_ptr as well as the alignment of s2_ptr and res_ptr differ. Since there are only two ways things can be aligned (that we care about) we now know that the alignment of s1_ptr and s2_ptr are the same. */ L2: cmp size,1 be Ljone nop andcc s1_ptr,4,%g0 ! s1_ptr unaligned? Side effect: cy=0 be L_v2 ! if no, branch nop /* Add least significant limb separately to align s1_ptr and s2_ptr */ ld [s1_ptr],%g4 add s1_ptr,4,s1_ptr ld [s2_ptr],%g2 add s2_ptr,4,s2_ptr add size,-1,size addcc %g4,%g2,%o4 st %o4,[res_ptr] add res_ptr,4,res_ptr L_v2: addx %g0,%g0,%o4 ! save cy in register addcc size,-8,size blt Lfin2 subcc %g0,%o4,%g0 ! restore cy /* Add blocks of 8 limbs until less than 8 limbs remain */ Loop2: ldd [s1_ptr+0],%g2 ldd [s2_ptr+0],%o4 addxcc %g2,%o4,%g2 st %g2,[res_ptr+0] addxcc %g3,%o5,%g3 st %g3,[res_ptr+4] ldd [s1_ptr+8],%g2 ldd [s2_ptr+8],%o4 addxcc %g2,%o4,%g2 st %g2,[res_ptr+8] addxcc %g3,%o5,%g3 st %g3,[res_ptr+12] ldd [s1_ptr+16],%g2 ldd [s2_ptr+16],%o4 addxcc %g2,%o4,%g2 st %g2,[res_ptr+16] addxcc %g3,%o5,%g3 st %g3,[res_ptr+20] ldd [s1_ptr+24],%g2 ldd [s2_ptr+24],%o4 addxcc %g2,%o4,%g2 st %g2,[res_ptr+24] addxcc %g3,%o5,%g3 st %g3,[res_ptr+28] addx %g0,%g0,%o4 ! save cy in register addcc size,-8,size add s1_ptr,32,s1_ptr add s2_ptr,32,s2_ptr add res_ptr,32,res_ptr bge Loop2 subcc %g0,%o4,%g0 ! restore cy Lfin2: addcc size,8-2,size blt Lend2 subcc %g0,%o4,%g0 ! restore cy Loope2: ldd [s1_ptr+0],%g2 ldd [s2_ptr+0],%o4 addxcc %g2,%o4,%g2 st %g2,[res_ptr+0] addxcc %g3,%o5,%g3 st %g3,[res_ptr+4] addx %g0,%g0,%o4 ! save cy in register addcc size,-2,size add s1_ptr,8,s1_ptr add s2_ptr,8,s2_ptr add res_ptr,8,res_ptr bge Loope2 subcc %g0,%o4,%g0 ! restore cy Lend2: andcc size,1,%g0 be Lret2 subcc %g0,%o4,%g0 ! restore cy /* Add last limb */ Ljone: ld [s1_ptr],%g4 ld [s2_ptr],%g2 addxcc %g4,%g2,%o4 st %o4,[res_ptr] Lret2: retl addx %g0,%g0,%o0 ! return carry-out from most sign. limb gnupg-1.4.20/mpi/sparc32/distfiles0000644000175000017500000000006112635262326013616 00000000000000 mpih-lshift.S mpih-rshift.S mpih-add1.S udiv.S gnupg-1.4.20/mpi/sparc32/mpih-lshift.S0000644000175000017500000000376512635262326014273 00000000000000/* sparc lshift * * Copyright (C) 1995, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ ! INPUT PARAMETERS ! res_ptr %o0 ! src_ptr %o1 ! size %o2 ! cnt %o3 #include "sysdep.h" .text .align 4 .global C_SYMBOL_NAME(mpihelp_lshift) C_SYMBOL_NAME(mpihelp_lshift): sll %o2,2,%g1 add %o1,%g1,%o1 ! make %o1 point at end of src ld [%o1-4],%g2 ! load first limb sub %g0,%o3,%o5 ! negate shift count add %o0,%g1,%o0 ! make %o0 point at end of res add %o2,-1,%o2 andcc %o2,4-1,%g4 ! number of limbs in first loop srl %g2,%o5,%g1 ! compute function result be L0 ! if multiple of 4 limbs, skip first loop st %g1,[%sp+80] sub %o2,%g4,%o2 ! adjust count for main loop Loop0: ld [%o1-8],%g3 add %o0,-4,%o0 add %o1,-4,%o1 addcc %g4,-1,%g4 sll %g2,%o3,%o4 srl %g3,%o5,%g1 mov %g3,%g2 or %o4,%g1,%o4 bne Loop0 st %o4,[%o0+0] L0: tst %o2 be Lend nop Loop: ld [%o1-8],%g3 add %o0,-16,%o0 addcc %o2,-4,%o2 sll %g2,%o3,%o4 srl %g3,%o5,%g1 ld [%o1-12],%g2 sll %g3,%o3,%g4 or %o4,%g1,%o4 st %o4,[%o0+12] srl %g2,%o5,%g1 ld [%o1-16],%g3 sll %g2,%o3,%o4 or %g4,%g1,%g4 st %g4,[%o0+8] srl %g3,%o5,%g1 ld [%o1-20],%g2 sll %g3,%o3,%g4 or %o4,%g1,%o4 st %o4,[%o0+4] srl %g2,%o5,%g1 add %o1,-16,%o1 or %g4,%g1,%g4 bne Loop st %g4,[%o0+0] Lend: sll %g2,%o3,%g2 st %g2,[%o0-4] retl ld [%sp+80],%o0 gnupg-1.4.20/mpi/mpi-cmp.c0000644000175000017500000000406612635262326012147 00000000000000/* mpi-cmp.c - MPI functions * 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 3 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, see . */ #include #include #include #include #include "mpi-internal.h" int mpi_cmp_ui( MPI u, unsigned long v ) { mpi_limb_t limb = v; mpi_normalize( u ); if( !u->nlimbs && !limb ) return 0; if( u->sign ) return -1; if( u->nlimbs > 1 ) return 1; if( u->d[0] == limb ) return 0; else if( u->d[0] > limb ) return 1; else return -1; } int mpi_cmp( MPI u, MPI v ) { mpi_size_t usize, vsize; int cmp; if (mpi_is_opaque (u) || mpi_is_opaque (v)) { if (mpi_is_opaque (u) && !mpi_is_opaque (v)) return -1; if (!mpi_is_opaque (u) && mpi_is_opaque (v)) return 1; if (!u->nbits && !v->nbits) return 0; /* Empty buffers are identical. */ if (u->nbits < v->nbits) return -1; if (u->nbits > v->nbits) return 1; return memcmp (u->d, v->d, u->nbits); } mpi_normalize( u ); mpi_normalize( v ); usize = u->nlimbs; vsize = v->nlimbs; if( !u->sign && v->sign ) return 1; if( u->sign && !v->sign ) return -1; if( usize != vsize && !u->sign && !v->sign ) return usize - vsize; if( usize != vsize && u->sign && v->sign ) return vsize + usize; if( !usize ) return 0; if( !(cmp=mpihelp_cmp( u->d, v->d, usize )) ) return 0; if( (cmp < 0?1:0) == (u->sign?1:0)) return 1; return -1; } gnupg-1.4.20/mpi/hppa/0000755000175000017500000000000012635457223011445 500000000000000gnupg-1.4.20/mpi/hppa/README0000644000175000017500000000267412635262326012254 00000000000000This directory contains mpn functions for various HP PA-RISC chips. Code that runs faster on the PA7100 and later implementations, is in the pa7100 directory. RELEVANT OPTIMIZATION ISSUES Load and Store timing On the PA7000 no memory instructions can issue the two cycles after a store. For the PA7100, this is reduced to one cycle. The PA7100 has a lookup-free cache, so it helps to schedule loads and the dependent instruction really far from each other. STATUS 1. mpn_mul_1 could be improved to 6.5 cycles/limb on the PA7100, using the instructions bwlow (but some sw pipelining is needed to avoid the xmpyu-fstds delay): fldds s1_ptr xmpyu fstds N(%r30) xmpyu fstds N(%r30) ldws N(%r30) ldws N(%r30) ldws N(%r30) ldws N(%r30) addc stws res_ptr addc stws res_ptr addib Loop 2. mpn_addmul_1 could be improved from the current 10 to 7.5 cycles/limb (asymptotically) on the PA7100, using the instructions below. With proper sw pipelining and the unrolling level below, the speed becomes 8 cycles/limb. fldds s1_ptr fldds s1_ptr xmpyu fstds N(%r30) xmpyu fstds N(%r30) xmpyu fstds N(%r30) xmpyu fstds N(%r30) ldws N(%r30) ldws N(%r30) ldws N(%r30) ldws N(%r30) ldws N(%r30) ldws N(%r30) ldws N(%r30) ldws N(%r30) addc addc addc addc addc %r0,%r0,cy-limb ldws res_ptr ldws res_ptr ldws res_ptr ldws res_ptr add stws res_ptr addc stws res_ptr addc stws res_ptr addc stws res_ptr addib gnupg-1.4.20/mpi/hppa/mpih-rshift.S0000644000175000017500000000324212635262326013742 00000000000000/* hppa rshift * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_rshift( mpi_ptr_t wp, (gr26) * mpi_ptr_t up, (gr25) * mpi_size_t usize, (gr24) * unsigned cnt) (gr23) */ .code .export mpihelp_rshift .label mpihelp_rshift .proc .callinfo frame=64,no_calls .entry ldws,ma 4(0,%r25),%r22 mtsar %r23 addib,= -1,%r24,L$r004 vshd %r22,%r0,%r28 ; compute carry out limb ldws,ma 4(0,%r25),%r29 addib,= -1,%r24,L$r002 vshd %r29,%r22,%r20 .label L$roop ldws,ma 4(0,%r25),%r22 stws,ma %r20,4(0,%r26) addib,= -1,%r24,L$r003 vshd %r22,%r29,%r20 ldws,ma 4(0,%r25),%r29 stws,ma %r20,4(0,%r26) addib,<> -1,%r24,L$roop vshd %r29,%r22,%r20 .label L$r002 stws,ma %r20,4(0,%r26) vshd %r0,%r29,%r20 bv 0(%r2) stw %r20,0(0,%r26) .label L$r003 stws,ma %r20,4(0,%r26) .label L$r004 vshd %r0,%r22,%r20 bv 0(%r2) stw %r20,0(0,%r26) .exit .procend gnupg-1.4.20/mpi/hppa/mpih-add1.S0000644000175000017500000000417312635262326013260 00000000000000/* hppa add_n -- Add two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1992, 1994, 1998, * 2001 Fee 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 3 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, see . * * 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. */ /******************* * mpi_limb_t * mpihelp_add_n( mpi_ptr_t res_ptr, (gr26) * mpi_ptr_t s1_ptr, (gr25) * mpi_ptr_t s2_ptr, (gr24) * mpi_size_t size) (gr23) * * One might want to unroll this as for other processors, but it turns * out that the data cache contention after a store makes such * unrolling useless. We can't come under 5 cycles/limb anyway. */ .code .export mpihelp_add_n .label mpihelp_add_n .proc .callinfo frame=0,no_calls .entry ldws,ma 4(0,%r25),%r20 ldws,ma 4(0,%r24),%r19 addib,= -1,%r23,L$end ; check for (SIZE == 1) add %r20,%r19,%r28 ; add first limbs ignoring cy .label L$loop ldws,ma 4(0,%r25),%r20 ldws,ma 4(0,%r24),%r19 stws,ma %r28,4(0,%r26) addib,<> -1,%r23,L$loop addc %r20,%r19,%r28 .label L$end stws %r28,0(0,%r26) bv 0(%r2) addc %r0,%r0,%r28 .exit .procend gnupg-1.4.20/mpi/hppa/distfiles0000644000175000017500000000011112635262326013265 00000000000000README udiv-qrnnd.S mpih-add1.S mpih-sub1.S mpih-lshift.S mpih-rshift.S gnupg-1.4.20/mpi/hppa/mpih-lshift.S0000644000175000017500000000333212635262326013734 00000000000000/* hppa lshift * * Copyright (C) 1992, 1994, 1998 * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_lshift( mpi_ptr_t wp, (gr26) * mpi_ptr_t up, (gr25) * mpi_size_t usize, (gr24) * unsigned cnt) (gr23) */ .code .export mpihelp_lshift .label mpihelp_lshift .proc .callinfo frame=64,no_calls .entry sh2add %r24,%r25,%r25 sh2add %r24,%r26,%r26 ldws,mb -4(0,%r25),%r22 subi 32,%r23,%r1 mtsar %r1 addib,= -1,%r24,L$0004 vshd %r0,%r22,%r28 ; compute carry out limb ldws,mb -4(0,%r25),%r29 addib,= -1,%r24,L$0002 vshd %r22,%r29,%r20 .label L$loop ldws,mb -4(0,%r25),%r22 stws,mb %r20,-4(0,%r26) addib,= -1,%r24,L$0003 vshd %r29,%r22,%r20 ldws,mb -4(0,%r25),%r29 stws,mb %r20,-4(0,%r26) addib,<> -1,%r24,L$loop vshd %r22,%r29,%r20 .label L$0002 stws,mb %r20,-4(0,%r26) vshd %r29,%r0,%r20 bv 0(%r2) stw %r20,-4(0,%r26) .label L$0003 stws,mb %r20,-4(0,%r26) .label L$0004 vshd %r22,%r0,%r20 bv 0(%r2) stw %r20,-4(0,%r26) .exit .procend gnupg-1.4.20/mpi/hppa/udiv-qrnnd.S0000644000175000017500000001560312635262326013603 00000000000000/* HP-PA __udiv_qrnnd division support, used from longlong.h. * This version runs fast on pre-PA7000 CPUs. * * Copyright (C) 1993, 1994, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ /* INPUT PARAMETERS * rem_ptr gr26 * n1 gr25 * n0 gr24 * d gr23 * * The code size is a bit excessive. We could merge the last two ds;addc * sequences by simply moving the "bb,< Odd" instruction down. The only * trouble is the FFFFFFFF code that would need some hacking. */ .code .export __udiv_qrnnd .label __udiv_qrnnd .proc .callinfo frame=0,no_calls .entry comb,< %r23,0,L$largedivisor sub %r0,%r23,%r1 ; clear cy as side-effect ds %r0,%r1,%r0 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r24 ds %r25,%r23,%r25 addc %r24,%r24,%r28 ds %r25,%r23,%r25 comclr,>= %r25,%r0,%r0 addl %r25,%r23,%r25 stws %r25,0(0,%r26) bv 0(%r2) addc %r28,%r28,%r28 .label L$largedivisor extru %r24,31,1,%r19 ; r19 = n0 & 1 bb,< %r23,31,L$odd extru %r23,30,31,%r22 ; r22 = d >> 1 shd %r25,%r24,1,%r24 ; r24 = new n0 extru %r25,30,31,%r25 ; r25 = new n1 sub %r0,%r22,%r21 ds %r0,%r21,%r0 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 comclr,>= %r25,%r0,%r0 addl %r25,%r22,%r25 sh1addl %r25,%r19,%r25 stws %r25,0(0,%r26) bv 0(%r2) addc %r24,%r24,%r28 .label L$odd addib,sv,n 1,%r22,L$FF.. ; r22 = (d / 2 + 1) shd %r25,%r24,1,%r24 ; r24 = new n0 extru %r25,30,31,%r25 ; r25 = new n1 sub %r0,%r22,%r21 ds %r0,%r21,%r0 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r24 ds %r25,%r22,%r25 addc %r24,%r24,%r28 comclr,>= %r25,%r0,%r0 addl %r25,%r22,%r25 sh1addl %r25,%r19,%r25 ; We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25 add,nuv %r28,%r25,%r25 addl %r25,%r1,%r25 addc %r0,%r28,%r28 sub,<< %r25,%r23,%r0 addl %r25,%r1,%r25 stws %r25,0(0,%r26) bv 0(%r2) addc %r0,%r28,%r28 ; This is just a special case of the code above. ; We come here when d == 0xFFFFFFFF .label L$FF.. add,uv %r25,%r24,%r24 sub,<< %r24,%r23,%r0 ldo 1(%r24),%r24 stws %r24,0(0,%r26) bv 0(%r2) addc %r0,%r25,%r28 .exit .procend gnupg-1.4.20/mpi/hppa/mpih-sub1.S0000644000175000017500000000431212635262326013314 00000000000000/* hppa sub_n -- Sub two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_sub_n( mpi_ptr_t res_ptr, (gr26) * mpi_ptr_t s1_ptr, (gr25) * mpi_ptr_t s2_ptr, (gr24) * mpi_size_t size) (gr23) * * One might want to unroll this as for other processors, but it turns * out that the data cache contention after a store makes such * unrolling useless. We can't come under 5 cycles/limb anyway. */ .code .export mpihelp_sub_n .label mpihelp_sub_n .proc .callinfo frame=0,no_calls .entry ldws,ma 4(0,%r25),%r20 ldws,ma 4(0,%r24),%r19 addib,= -1,%r23,L$end ; check for (SIZE == 1) sub %r20,%r19,%r28 ; subtract first limbs ignoring cy .label L$loop ldws,ma 4(0,%r25),%r20 ldws,ma 4(0,%r24),%r19 stws,ma %r28,4(0,%r26) addib,<> -1,%r23,L$loop subb %r20,%r19,%r28 .label L$end stws %r28,0(0,%r26) addc %r0,%r0,%r28 bv 0(%r2) subi 1,%r28,%r28 .exit .procend gnupg-1.4.20/mpi/mpih-div.c0000644000175000017500000003406712635262326012326 00000000000000/* mpihelp-div.c - MPI helper functions * Copyright (C) 1994, 1996 Free Software Foundation, Inc. * 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 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" #include "longlong.h" #ifndef UMUL_TIME #define UMUL_TIME 1 #endif #ifndef UDIV_TIME #define UDIV_TIME UMUL_TIME #endif /* FIXME: We should be using invert_limb (or invert_normalized_limb) * here (not udiv_qrnnd). */ mpi_limb_t mpihelp_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, mpi_limb_t divisor_limb) { mpi_size_t i; mpi_limb_t n1, n0, r; int dummy GNUPG_GCC_ATTR_UNUSED; /* Botch: Should this be handled at all? Rely on callers? */ if( !dividend_size ) return 0; /* If multiplication is much faster than division, and the * dividend is large, pre-invert the divisor, and use * only multiplications in the inner loop. * * This test should be read: * Does it ever help to use udiv_qrnnd_preinv? * && Does what we save compensate for the inversion overhead? */ if( UDIV_TIME > (2 * UMUL_TIME + 6) && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME ) { int normalization_steps; count_leading_zeros( normalization_steps, divisor_limb ); if( normalization_steps ) { mpi_limb_t divisor_limb_inverted; divisor_limb <<= normalization_steps; /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the * most significant bit (with weight 2**N) implicit. * * Special case for DIVISOR_LIMB == 100...000. */ if( !(divisor_limb << 1) ) divisor_limb_inverted = ~(mpi_limb_t)0; else udiv_qrnnd(divisor_limb_inverted, dummy, -divisor_limb, 0, divisor_limb); n1 = dividend_ptr[dividend_size - 1]; r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps); /* Possible optimization: * if (r == 0 * && divisor_limb > ((n1 << normalization_steps) * | (dividend_ptr[dividend_size - 2] >> ...))) * ...one division less... */ for( i = dividend_size - 2; i >= 0; i--) { n0 = dividend_ptr[i]; UDIV_QRNND_PREINV(dummy, r, r, ((n1 << normalization_steps) | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))), divisor_limb, divisor_limb_inverted); n1 = n0; } UDIV_QRNND_PREINV(dummy, r, r, n1 << normalization_steps, divisor_limb, divisor_limb_inverted); return r >> normalization_steps; } else { mpi_limb_t divisor_limb_inverted; /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the * most significant bit (with weight 2**N) implicit. * * Special case for DIVISOR_LIMB == 100...000. */ if( !(divisor_limb << 1) ) divisor_limb_inverted = ~(mpi_limb_t)0; else udiv_qrnnd(divisor_limb_inverted, dummy, -divisor_limb, 0, divisor_limb); i = dividend_size - 1; r = dividend_ptr[i]; if( r >= divisor_limb ) r = 0; else i--; for( ; i >= 0; i--) { n0 = dividend_ptr[i]; UDIV_QRNND_PREINV(dummy, r, r, n0, divisor_limb, divisor_limb_inverted); } return r; } } else { if( UDIV_NEEDS_NORMALIZATION ) { int normalization_steps; count_leading_zeros(normalization_steps, divisor_limb); if( normalization_steps ) { divisor_limb <<= normalization_steps; n1 = dividend_ptr[dividend_size - 1]; r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps); /* Possible optimization: * if (r == 0 * && divisor_limb > ((n1 << normalization_steps) * | (dividend_ptr[dividend_size - 2] >> ...))) * ...one division less... */ for(i = dividend_size - 2; i >= 0; i--) { n0 = dividend_ptr[i]; udiv_qrnnd (dummy, r, r, ((n1 << normalization_steps) | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))), divisor_limb); n1 = n0; } udiv_qrnnd (dummy, r, r, n1 << normalization_steps, divisor_limb); return r >> normalization_steps; } } /* No normalization needed, either because udiv_qrnnd doesn't require * it, or because DIVISOR_LIMB is already normalized. */ i = dividend_size - 1; r = dividend_ptr[i]; if(r >= divisor_limb) r = 0; else i--; for(; i >= 0; i--) { n0 = dividend_ptr[i]; udiv_qrnnd (dummy, r, r, n0, divisor_limb); } return r; } } /* Divide num (NP/NSIZE) by den (DP/DSIZE) and write * the NSIZE-DSIZE least significant quotient limbs at QP * and the DSIZE long remainder at NP. If QEXTRA_LIMBS is * non-zero, generate that many fraction bits and append them after the * other quotient limbs. * Return the most significant limb of the quotient, this is always 0 or 1. * * Preconditions: * 0. NSIZE >= DSIZE. * 1. The most significant bit of the divisor must be set. * 2. QP must either not overlap with the input operands at all, or * QP + DSIZE >= NP must hold true. (This means that it's * possible to put the quotient in the high part of NUM, right after the * remainder in NUM. * 3. NSIZE >= DSIZE, even if QEXTRA_LIMBS is non-zero. */ mpi_limb_t mpihelp_divrem( mpi_ptr_t qp, mpi_size_t qextra_limbs, mpi_ptr_t np, mpi_size_t nsize, mpi_ptr_t dp, mpi_size_t dsize) { mpi_limb_t most_significant_q_limb = 0; switch(dsize) { case 0: /* We are asked to divide by zero, so go ahead and do it! (To make the compiler not remove this statement, return the value.) */ return 1 / dsize; case 1: { mpi_size_t i; mpi_limb_t n1; mpi_limb_t d; d = dp[0]; n1 = np[nsize - 1]; if( n1 >= d ) { n1 -= d; most_significant_q_limb = 1; } qp += qextra_limbs; for( i = nsize - 2; i >= 0; i--) udiv_qrnnd( qp[i], n1, n1, np[i], d ); qp -= qextra_limbs; for( i = qextra_limbs - 1; i >= 0; i-- ) udiv_qrnnd (qp[i], n1, n1, 0, d); np[0] = n1; } break; case 2: { mpi_size_t i; mpi_limb_t n1, n0, n2; mpi_limb_t d1, d0; np += nsize - 2; d1 = dp[1]; d0 = dp[0]; n1 = np[1]; n0 = np[0]; if( n1 >= d1 && (n1 > d1 || n0 >= d0) ) { sub_ddmmss (n1, n0, n1, n0, d1, d0); most_significant_q_limb = 1; } for( i = qextra_limbs + nsize - 2 - 1; i >= 0; i-- ) { mpi_limb_t q; mpi_limb_t r; if( i >= qextra_limbs ) np--; else np[0] = 0; if( n1 == d1 ) { /* Q should be either 111..111 or 111..110. Need special * treatment of this rare case as normal division would * give overflow. */ q = ~(mpi_limb_t)0; r = n0 + d1; if( r < d1 ) { /* Carry in the addition? */ add_ssaaaa( n1, n0, r - d0, np[0], 0, d0 ); qp[i] = q; continue; } n1 = d0 - (d0 != 0?1:0); n0 = -d0; } else { udiv_qrnnd (q, r, n1, n0, d1); umul_ppmm (n1, n0, d0, q); } n2 = np[0]; q_test: if( n1 > r || (n1 == r && n0 > n2) ) { /* The estimated Q was too large. */ q--; sub_ddmmss (n1, n0, n1, n0, 0, d0); r += d1; if( r >= d1 ) /* If not carry, test Q again. */ goto q_test; } qp[i] = q; sub_ddmmss (n1, n0, r, n2, n1, n0); } np[1] = n1; np[0] = n0; } break; default: { mpi_size_t i; mpi_limb_t dX, d1, n0; np += nsize - dsize; dX = dp[dsize - 1]; d1 = dp[dsize - 2]; n0 = np[dsize - 1]; if( n0 >= dX ) { if(n0 > dX || mpihelp_cmp(np, dp, dsize - 1) >= 0 ) { mpihelp_sub_n(np, np, dp, dsize); n0 = np[dsize - 1]; most_significant_q_limb = 1; } } for( i = qextra_limbs + nsize - dsize - 1; i >= 0; i--) { mpi_limb_t q; mpi_limb_t n1, n2; mpi_limb_t cy_limb; if( i >= qextra_limbs ) { np--; n2 = np[dsize]; } else { n2 = np[dsize - 1]; MPN_COPY_DECR (np + 1, np, dsize - 1); np[0] = 0; } if( n0 == dX ) { /* This might over-estimate q, but it's probably not worth * the extra code here to find out. */ q = ~(mpi_limb_t)0; } else { mpi_limb_t r; udiv_qrnnd(q, r, n0, np[dsize - 1], dX); umul_ppmm(n1, n0, d1, q); while( n1 > r || (n1 == r && n0 > np[dsize - 2])) { q--; r += dX; if( r < dX ) /* I.e. "carry in previous addition?" */ break; n1 -= n0 < d1; n0 -= d1; } } /* Possible optimization: We already have (q * n0) and (1 * n1) * after the calculation of q. Taking advantage of that, we * could make this loop make two iterations less. */ cy_limb = mpihelp_submul_1(np, dp, dsize, q); if( n2 != cy_limb ) { mpihelp_add_n(np, np, dp, dsize); q--; } qp[i] = q; n0 = np[dsize - 1]; } } } return most_significant_q_limb; } /**************** * Divide (DIVIDEND_PTR,,DIVIDEND_SIZE) by DIVISOR_LIMB. * Write DIVIDEND_SIZE limbs of quotient at QUOT_PTR. * Return the single-limb remainder. * There are no constraints on the value of the divisor. * * QUOT_PTR and DIVIDEND_PTR might point to the same limb. */ mpi_limb_t mpihelp_divmod_1( mpi_ptr_t quot_ptr, mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, mpi_limb_t divisor_limb) { mpi_size_t i; mpi_limb_t n1, n0, r; int dummy GNUPG_GCC_ATTR_UNUSED; if( !dividend_size ) return 0; /* If multiplication is much faster than division, and the * dividend is large, pre-invert the divisor, and use * only multiplications in the inner loop. * * This test should be read: * Does it ever help to use udiv_qrnnd_preinv? * && Does what we save compensate for the inversion overhead? */ if( UDIV_TIME > (2 * UMUL_TIME + 6) && (UDIV_TIME - (2 * UMUL_TIME + 6)) * dividend_size > UDIV_TIME ) { int normalization_steps; count_leading_zeros( normalization_steps, divisor_limb ); if( normalization_steps ) { mpi_limb_t divisor_limb_inverted; divisor_limb <<= normalization_steps; /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the * most significant bit (with weight 2**N) implicit. */ /* Special case for DIVISOR_LIMB == 100...000. */ if( !(divisor_limb << 1) ) divisor_limb_inverted = ~(mpi_limb_t)0; else udiv_qrnnd(divisor_limb_inverted, dummy, -divisor_limb, 0, divisor_limb); n1 = dividend_ptr[dividend_size - 1]; r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps); /* Possible optimization: * if (r == 0 * && divisor_limb > ((n1 << normalization_steps) * | (dividend_ptr[dividend_size - 2] >> ...))) * ...one division less... */ for( i = dividend_size - 2; i >= 0; i--) { n0 = dividend_ptr[i]; UDIV_QRNND_PREINV( quot_ptr[i + 1], r, r, ((n1 << normalization_steps) | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))), divisor_limb, divisor_limb_inverted); n1 = n0; } UDIV_QRNND_PREINV( quot_ptr[0], r, r, n1 << normalization_steps, divisor_limb, divisor_limb_inverted); return r >> normalization_steps; } else { mpi_limb_t divisor_limb_inverted; /* Compute (2**2N - 2**N * DIVISOR_LIMB) / DIVISOR_LIMB. The * result is a (N+1)-bit approximation to 1/DIVISOR_LIMB, with the * most significant bit (with weight 2**N) implicit. */ /* Special case for DIVISOR_LIMB == 100...000. */ if( !(divisor_limb << 1) ) divisor_limb_inverted = ~(mpi_limb_t) 0; else udiv_qrnnd(divisor_limb_inverted, dummy, -divisor_limb, 0, divisor_limb); i = dividend_size - 1; r = dividend_ptr[i]; if( r >= divisor_limb ) r = 0; else quot_ptr[i--] = 0; for( ; i >= 0; i-- ) { n0 = dividend_ptr[i]; UDIV_QRNND_PREINV( quot_ptr[i], r, r, n0, divisor_limb, divisor_limb_inverted); } return r; } } else { if(UDIV_NEEDS_NORMALIZATION) { int normalization_steps; count_leading_zeros (normalization_steps, divisor_limb); if( normalization_steps ) { divisor_limb <<= normalization_steps; n1 = dividend_ptr[dividend_size - 1]; r = n1 >> (BITS_PER_MPI_LIMB - normalization_steps); /* Possible optimization: * if (r == 0 * && divisor_limb > ((n1 << normalization_steps) * | (dividend_ptr[dividend_size - 2] >> ...))) * ...one division less... */ for( i = dividend_size - 2; i >= 0; i--) { n0 = dividend_ptr[i]; udiv_qrnnd (quot_ptr[i + 1], r, r, ((n1 << normalization_steps) | (n0 >> (BITS_PER_MPI_LIMB - normalization_steps))), divisor_limb); n1 = n0; } udiv_qrnnd (quot_ptr[0], r, r, n1 << normalization_steps, divisor_limb); return r >> normalization_steps; } } /* No normalization needed, either because udiv_qrnnd doesn't require * it, or because DIVISOR_LIMB is already normalized. */ i = dividend_size - 1; r = dividend_ptr[i]; if(r >= divisor_limb) r = 0; else quot_ptr[i--] = 0; for(; i >= 0; i--) { n0 = dividend_ptr[i]; udiv_qrnnd( quot_ptr[i], r, r, n0, divisor_limb ); } return r; } } gnupg-1.4.20/mpi/power/0000755000175000017500000000000012635457223011651 500000000000000gnupg-1.4.20/mpi/power/mpih-mul2.S0000644000175000017500000000573412635262326013536 00000000000000/* IBM POWER addmul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1994, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" /* # INPUT PARAMETERS # res_ptr r3 # s1_ptr r4 # size r5 # s2_limb r6 # The RS/6000 has no unsigned 32x32->64 bit multiplication instruction. To # obtain that operation, we have to use the 32x32->64 signed multiplication # instruction, and add the appropriate compensation to the high limb of the # result. We add the multiplicand if the multiplier has its most significant # bit set, and we add the multiplier if the multiplicand has its most # significant bit set. We need to preserve the carry flag between each # iteration, so we have to compute the compensation carefully (the natural, # srai+and doesn't work). Since the POWER architecture has a branch unit # we can branch in zero cycles, so that's how we perform the additions. */ .toc .csect .mpihelp_addmul_1[PR] .align 2 .globl mpihelp_addmul_1 .globl .mpihelp_addmul_1 .csect mpihelp_addmul_1[DS] mpihelp_addmul_1: .long .mpihelp_addmul_1[PR], TOC[tc0], 0 .csect .mpihelp_addmul_1[PR] .mpihelp_addmul_1: cal 3,-4(3) l 0,0(4) cmpi 0,6,0 mtctr 5 mul 9,0,6 srai 7,0,31 and 7,7,6 mfmq 8 cax 9,9,7 l 7,4(3) a 8,8,7 # add res_limb blt Lneg Lpos: bdz Lend Lploop: lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 10,0,6 mfmq 0 ae 8,0,9 # low limb + old_cy_limb + old cy l 7,4(3) aze 10,10 # propagate cy to new cy_limb a 8,8,7 # add res_limb bge Lp0 cax 10,10,6 # adjust high limb for negative limb from s1 Lp0: bdz Lend0 lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 9,0,6 mfmq 0 ae 8,0,10 l 7,4(3) aze 9,9 a 8,8,7 bge Lp1 cax 9,9,6 # adjust high limb for negative limb from s1 Lp1: bdn Lploop b Lend Lneg: cax 9,9,0 bdz Lend Lnloop: lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 10,0,6 mfmq 7 ae 8,7,9 l 7,4(3) ae 10,10,0 # propagate cy to new cy_limb a 8,8,7 # add res_limb bge Ln0 cax 10,10,6 # adjust high limb for negative limb from s1 Ln0: bdz Lend0 lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 9,0,6 mfmq 7 ae 8,7,10 l 7,4(3) ae 9,9,0 # propagate cy to new cy_limb a 8,8,7 # add res_limb bge Ln1 cax 9,9,6 # adjust high limb for negative limb from s1 Ln1: bdn Lnloop b Lend Lend0: cal 9,0(10) Lend: st 8,4(3) aze 3,9 br gnupg-1.4.20/mpi/power/mpih-mul3.S0000644000175000017500000000626012635262326013532 00000000000000/* IBM POWER submul_1 -- Multiply a limb vector with a limb and subtract * the result from a second limb vector. * * Copyright (C) 1992, 1994, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" /* # INPUT PARAMETERS # res_ptr r3 # s1_ptr r4 # size r5 # s2_limb r6 # The RS/6000 has no unsigned 32x32->64 bit multiplication instruction. To # obtain that operation, we have to use the 32x32->64 signed multiplication # instruction, and add the appropriate compensation to the high limb of the # result. We add the multiplicand if the multiplier has its most significant # bit set, and we add the multiplier if the multiplicand has its most # significant bit set. We need to preserve the carry flag between each # iteration, so we have to compute the compensation carefully (the natural, # srai+and doesn't work). Since the POWER architecture has a branch unit # we can branch in zero cycles, so that's how we perform the additions. */ .toc .csect .mpihelp_submul_1[PR] .align 2 .globl mpihelp_submul_1 .globl .mpihelp_submul_1 .csect mpihelp_submul_1[DS] mpihelp_submul_1: .long .mpihelp_submul_1[PR], TOC[tc0], 0 .csect .mpihelp_submul_1[PR] .mpihelp_submul_1: cal 3,-4(3) l 0,0(4) cmpi 0,6,0 mtctr 5 mul 9,0,6 srai 7,0,31 and 7,7,6 mfmq 11 cax 9,9,7 l 7,4(3) sf 8,11,7 # add res_limb a 11,8,11 # invert cy (r11 is junk) blt Lneg Lpos: bdz Lend Lploop: lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 10,0,6 mfmq 0 ae 11,0,9 # low limb + old_cy_limb + old cy l 7,4(3) aze 10,10 # propagate cy to new cy_limb sf 8,11,7 # add res_limb a 11,8,11 # invert cy (r11 is junk) bge Lp0 cax 10,10,6 # adjust high limb for negative limb from s1 Lp0: bdz Lend0 lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 9,0,6 mfmq 0 ae 11,0,10 l 7,4(3) aze 9,9 sf 8,11,7 a 11,8,11 # invert cy (r11 is junk) bge Lp1 cax 9,9,6 # adjust high limb for negative limb from s1 Lp1: bdn Lploop b Lend Lneg: cax 9,9,0 bdz Lend Lnloop: lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 10,0,6 mfmq 7 ae 11,7,9 l 7,4(3) ae 10,10,0 # propagate cy to new cy_limb sf 8,11,7 # add res_limb a 11,8,11 # invert cy (r11 is junk) bge Ln0 cax 10,10,6 # adjust high limb for negative limb from s1 Ln0: bdz Lend0 lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 9,0,6 mfmq 7 ae 11,7,10 l 7,4(3) ae 9,9,0 # propagate cy to new cy_limb sf 8,11,7 # add res_limb a 11,8,11 # invert cy (r11 is junk) bge Ln1 cax 9,9,6 # adjust high limb for negative limb from s1 Ln1: bdn Lnloop b Lend Lend0: cal 9,0(10) Lend: st 8,4(3) aze 3,9 br gnupg-1.4.20/mpi/power/mpih-rshift.S0000644000175000017500000000344512635262326014153 00000000000000/* IBM POWER rshift * * Copyright (C) 1992, 1994, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" /* # INPUT PARAMETERS # res_ptr r3 # s_ptr r4 # size r5 # cnt r6 */ .toc .extern mpihelp_rshift[DS] .extern .mpihelp_rshift .csect [PR] .align 2 .globl mpihelp_rshift .globl .mpihelp_rshift .csect mpihelp_rshift[DS] mpihelp_rshift: .long .mpihelp_rshift, TOC[tc0], 0 .csect [PR] .mpihelp_rshift: sfi 8,6,32 mtctr 5 # put limb count in CTR loop register l 0,0(4) # read least significant limb ai 9,3,-4 # adjust res_ptr since it's offset in the stu:s sle 3,0,8 # compute carry limb, and init MQ register bdz Lend2 # if just one limb, skip loop lu 0,4(4) # read 2:nd least significant limb sleq 7,0,8 # compute least significant limb of result bdz Lend # if just two limb, skip loop Loop: lu 0,4(4) # load next higher limb stu 7,4(9) # store previous result during read latency sleq 7,0,8 # compute result limb bdn Loop # loop back until CTR is zero Lend: stu 7,4(9) # store 2:nd most significant limb Lend2: sre 7,0,6 # compute most significant limb st 7,4(9) # store it br gnupg-1.4.20/mpi/power/mpih-add1.S0000644000175000017500000000506012635262326013460 00000000000000/* IBM POWER add_n -- Add two limb vectors of equal, non-zero length. * * Copyright (C) 1992, 1994, 1996, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" /* # INPUT PARAMETERS # res_ptr r3 # s1_ptr r4 # s2_ptr r5 # size r6 */ .toc .extern mpihelp_add_n[DS] .extern .mpihelp_add_n .csect [PR] .align 2 .globl mpihelp_add_n .globl .mpihelp_add_n .csect mpihelp_add_n[DS] mpihelp_add_n: .long .mpihelp_add_n, TOC[tc0], 0 .csect [PR] .mpihelp_add_n: andil. 10,6,1 # odd or even number of limbs? l 8,0(4) # load least significant s1 limb l 0,0(5) # load least significant s2 limb cal 3,-4(3) # offset res_ptr, it's updated before it's used sri 10,6,1 # count for unrolled loop a 7,0,8 # add least significant limbs, set cy mtctr 10 # copy count into CTR beq 0,Leven # branch if even # of limbs (# of limbs >= 2) # We have an odd # of limbs. Add the first limbs separately. cmpi 1,10,0 # is count for unrolled loop zero? bne 1,L1 # branch if not st 7,4(3) aze 3,10 # use the fact that r10 is zero... br # return # We added least significant limbs. Now reload the next limbs to enter loop. L1: lu 8,4(4) # load s1 limb and update s1_ptr lu 0,4(5) # load s2 limb and update s2_ptr stu 7,4(3) ae 7,0,8 # add limbs, set cy Leven: lu 9,4(4) # load s1 limb and update s1_ptr lu 10,4(5) # load s2 limb and update s2_ptr bdz Lend # If done, skip loop Loop: lu 8,4(4) # load s1 limb and update s1_ptr lu 0,4(5) # load s2 limb and update s2_ptr ae 11,9,10 # add previous limbs with cy, set cy stu 7,4(3) # lu 9,4(4) # load s1 limb and update s1_ptr lu 10,4(5) # load s2 limb and update s2_ptr ae 7,0,8 # add previous limbs with cy, set cy stu 11,4(3) # bdn Loop # decrement CTR and loop back Lend: ae 11,9,10 # add limbs with cy, set cy st 7,4(3) # st 11,8(3) # lil 3,0 # load cy into ... aze 3,3 # ... return value register br gnupg-1.4.20/mpi/power/mpih-mul1.S0000644000175000017500000000541312635262326013527 00000000000000/* IBM POWER mul_1 -- Multiply a limb vector with a limb and store * the result in a second limb vector. * * Copyright (C) 1992, 1994, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" /* # INPUT PARAMETERS # res_ptr r3 # s1_ptr r4 # size r5 # s2_limb r6 # The RS/6000 has no unsigned 32x32->64 bit multiplication instruction. To # obtain that operation, we have to use the 32x32->64 signed multiplication # instruction, and add the appropriate compensation to the high limb of the # result. We add the multiplicand if the multiplier has its most significant # bit set, and we add the multiplier if the multiplicand has its most # significant bit set. We need to preserve the carry flag between each # iteration, so we have to compute the compensation carefully (the natural, # srai+and doesn't work). Since the POWER architecture has a branch unit # we can branch in zero cycles, so that's how we perform the additions. */ .toc .csect .mpihelp_mul_1[PR] .align 2 .globl mpihelp_mul_1 .globl .mpihelp_mul_1 .csect mpihelp_mul_1[DS] mpihelp_mul_1: .long .mpihelp_mul_1[PR], TOC[tc0], 0 .csect .mpihelp_mul_1[PR] .mpihelp_mul_1: cal 3,-4(3) l 0,0(4) cmpi 0,6,0 mtctr 5 mul 9,0,6 srai 7,0,31 and 7,7,6 mfmq 8 ai 0,0,0 # reset carry cax 9,9,7 blt Lneg Lpos: bdz Lend Lploop: lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 10,0,6 mfmq 0 ae 8,0,9 bge Lp0 cax 10,10,6 # adjust high limb for negative limb from s1 Lp0: bdz Lend0 lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 9,0,6 mfmq 0 ae 8,0,10 bge Lp1 cax 9,9,6 # adjust high limb for negative limb from s1 Lp1: bdn Lploop b Lend Lneg: cax 9,9,0 bdz Lend Lnloop: lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 10,0,6 cax 10,10,0 # adjust high limb for negative s2_limb mfmq 0 ae 8,0,9 bge Ln0 cax 10,10,6 # adjust high limb for negative limb from s1 Ln0: bdz Lend0 lu 0,4(4) stu 8,4(3) cmpi 0,0,0 mul 9,0,6 cax 9,9,0 # adjust high limb for negative s2_limb mfmq 0 ae 8,0,10 bge Ln1 cax 9,9,6 # adjust high limb for negative limb from s1 Ln1: bdn Lnloop b Lend Lend0: cal 9,0(10) Lend: st 8,4(3) aze 3,9 br gnupg-1.4.20/mpi/power/distfiles0000644000175000017500000000013012635262326013472 00000000000000mpih-add1.S mpih-lshift.S mpih-mul1.S mpih-mul2.S mpih-mul3.S mpih-rshift.S mpih-sub1.S gnupg-1.4.20/mpi/power/mpih-lshift.S0000644000175000017500000000342212635262326014140 00000000000000/* IBM POWER lshift * * Copyright (C) 1992, 1994, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" /* # INPUT PARAMETERS # res_ptr r3 # s_ptr r4 # size r5 # cnt r6 */ .toc .extern mpihelp_lshift[DS] .extern .mpihelp_lshift .csect [PR] .align 2 .globl mpihelp_lshift .globl .mpihelp_lshift .csect mpihelp_lshift[DS] mpihelp_lshift: .long .mpihelp_lshift, TOC[tc0], 0 .csect [PR] .mpihelp_lshift: sli 0,5,2 cax 9,3,0 cax 4,4,0 sfi 8,6,32 mtctr 5 # put limb count in CTR loop register lu 0,-4(4) # read most significant limb sre 3,0,8 # compute carry out limb, and init MQ register bdz Lend2 # if just one limb, skip loop lu 0,-4(4) # read 2:nd most significant limb sreq 7,0,8 # compute most significant limb of result bdz Lend # if just two limb, skip loop Loop: lu 0,-4(4) # load next lower limb stu 7,-4(9) # store previous result during read latency sreq 7,0,8 # compute result limb bdn Loop # loop back until CTR is zero Lend: stu 7,-4(9) # store 2:nd least significant limb Lend2: sle 7,0,6 # compute least significant limb st 7,-4(9) # store it br gnupg-1.4.20/mpi/power/mpih-sub1.S0000644000175000017500000000521612635262326013524 00000000000000/* IBM POWER sub_n -- Subtract two limb vectors of equal, non-zero length. * * Copyright (C) 1992, 1994, 1995, 1996, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" /* # INPUT PARAMETERS # res_ptr r3 # s1_ptr r4 # s2_ptr r5 # size r6 */ .toc .extern mpihelp_sub_n[DS] .extern .mpihelp_sub_n .csect [PR] .align 2 .globl mpihelp_sub_n .globl .mpihelp_sub_n .csect mpihelp_sub_n[DS] mpihelp_sub_n: .long .mpihelp_sub_n, TOC[tc0], 0 .csect [PR] .mpihelp_sub_n: andil. 10,6,1 # odd or even number of limbs? l 8,0(4) # load least significant s1 limb l 0,0(5) # load least significant s2 limb cal 3,-4(3) # offset res_ptr, it's updated before it's used sri 10,6,1 # count for unrolled loop sf 7,0,8 # subtract least significant limbs, set cy mtctr 10 # copy count into CTR beq 0,Leven # branch if even # of limbs (# of limbs >= 2) # We have an odd # of limbs. Add the first limbs separately. cmpi 1,10,0 # is count for unrolled loop zero? bne 1,L1 # branch if not st 7,4(3) sfe 3,0,0 # load !cy into ... sfi 3,3,0 # ... return value register br # return # We added least significant limbs. Now reload the next limbs to enter loop. L1: lu 8,4(4) # load s1 limb and update s1_ptr lu 0,4(5) # load s2 limb and update s2_ptr stu 7,4(3) sfe 7,0,8 # subtract limbs, set cy Leven: lu 9,4(4) # load s1 limb and update s1_ptr lu 10,4(5) # load s2 limb and update s2_ptr bdz Lend # If done, skip loop Loop: lu 8,4(4) # load s1 limb and update s1_ptr lu 0,4(5) # load s2 limb and update s2_ptr sfe 11,10,9 # subtract previous limbs with cy, set cy stu 7,4(3) # lu 9,4(4) # load s1 limb and update s1_ptr lu 10,4(5) # load s2 limb and update s2_ptr sfe 7,0,8 # subtract previous limbs with cy, set cy stu 11,4(3) # bdn Loop # decrement CTR and loop back Lend: sfe 11,10,9 # subtract limbs with cy, set cy st 7,4(3) # st 11,8(3) # sfe 3,0,0 # load !cy into ... sfi 3,3,0 # ... return value register br gnupg-1.4.20/mpi/mpi-pow.c0000644000175000017500000005175512635262326012204 00000000000000/* mpi-pow.c - MPI functions * Copyright (C) 1994, 1996, 1998, 2000 Free Software Foundation, Inc. * Copyright (C) 2013 Werner Koch * * 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 3 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, see . * * 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. */ #include #include #include #include #include "mpi-internal.h" #include "longlong.h" #include /* * When you need old implementation, please add compilation option * -DUSE_ALGORITHM_SIMPLE_EXPONENTIATION * or expose this line: #define USE_ALGORITHM_SIMPLE_EXPONENTIATION 1 */ #if defined(USE_ALGORITHM_SIMPLE_EXPONENTIATION) /**************** * RES = BASE ^ EXP mod MOD */ void mpi_powm( MPI res, MPI base, MPI exponent, MPI mod) { mpi_ptr_t rp, ep, mp, bp; mpi_size_t esize, msize, bsize, rsize; int msign, bsign, rsign; int esec, msec, bsec, rsec; mpi_size_t size; int mod_shift_cnt; int negative_result; mpi_ptr_t mp_marker=NULL, bp_marker=NULL, ep_marker=NULL; mpi_ptr_t xp_marker=NULL; int assign_rp=0; mpi_ptr_t tspace = NULL; mpi_size_t tsize=0; /* to avoid compiler warning */ /* fixme: we should check that the warning is void*/ esize = exponent->nlimbs; msize = mod->nlimbs; size = 2 * msize; msign = mod->sign; esec = mpi_is_secure(exponent); msec = mpi_is_secure(mod); bsec = mpi_is_secure(base); rsec = mpi_is_secure(res); rp = res->d; ep = exponent->d; if( !msize ) msize = 1 / msize; /* provoke a signal */ if( !esize ) { /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0 * depending on if MOD equals 1. */ rp[0] = 1; res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1; res->sign = 0; goto leave; } /* Normalize MOD (i.e. make its most significant bit set) as required by * mpn_divrem. This will make the intermediate values in the calculation * slightly larger, but the correct result is obtained after a final * reduction using the original MOD value. */ mp = mp_marker = mpi_alloc_limb_space(msize, msec); count_leading_zeros( mod_shift_cnt, mod->d[msize-1] ); if( mod_shift_cnt ) mpihelp_lshift( mp, mod->d, msize, mod_shift_cnt ); else MPN_COPY( mp, mod->d, msize ); bsize = base->nlimbs; bsign = base->sign; if( bsize > msize ) { /* The base is larger than the module. Reduce it. */ /* Allocate (BSIZE + 1) with space for remainder and quotient. * (The quotient is (bsize - msize + 1) limbs.) */ bp = bp_marker = mpi_alloc_limb_space( bsize + 1, bsec ); MPN_COPY( bp, base->d, bsize ); /* We don't care about the quotient, store it above the remainder, * at BP + MSIZE. */ mpihelp_divrem( bp + msize, 0, bp, bsize, mp, msize ); bsize = msize; /* Canonicalize the base, since we are going to multiply with it * quite a few times. */ MPN_NORMALIZE( bp, bsize ); } else bp = base->d; if( !bsize ) { res->nlimbs = 0; res->sign = 0; goto leave; } if( res->alloced < size ) { /* We have to allocate more space for RES. If any of the input * parameters are identical to RES, defer deallocation of the old * space. */ if( rp == ep || rp == mp || rp == bp ) { rp = mpi_alloc_limb_space( size, rsec ); assign_rp = 1; } else { mpi_resize( res, size ); rp = res->d; } } else { /* Make BASE, EXPONENT and MOD not overlap with RES. */ if( rp == bp ) { /* RES and BASE are identical. Allocate temp. space for BASE. */ assert( !bp_marker ); bp = bp_marker = mpi_alloc_limb_space( bsize, bsec ); MPN_COPY(bp, rp, bsize); } if( rp == ep ) { /* RES and EXPONENT are identical. Allocate temp. space for EXPONENT. */ ep = ep_marker = mpi_alloc_limb_space( esize, esec ); MPN_COPY(ep, rp, esize); } if( rp == mp ) { /* RES and MOD are identical. Allocate temporary space for MOD.*/ assert( !mp_marker ); mp = mp_marker = mpi_alloc_limb_space( msize, msec ); MPN_COPY(mp, rp, msize); } } MPN_COPY( rp, bp, bsize ); rsize = bsize; rsign = bsign; { mpi_size_t i; mpi_ptr_t xp = xp_marker = mpi_alloc_limb_space( 2 * (msize + 1), msec ); int c; mpi_limb_t e; mpi_limb_t carry_limb; struct karatsuba_ctx karactx; memset( &karactx, 0, sizeof karactx ); negative_result = (ep[0] & 1) && base->sign; i = esize - 1; e = ep[i]; count_leading_zeros (c, e); e = (e << c) << 1; /* shift the exp bits to the left, lose msb */ c = BITS_PER_MPI_LIMB - 1 - c; /* Main loop. * * Make the result be pointed to alternately by XP and RP. This * helps us avoid block copying, which would otherwise be necessary * with the overlap restrictions of mpihelp_divmod. With 50% probability * the result after this loop will be in the area originally pointed * by RP (==RES->d), and with 50% probability in the area originally * pointed to by XP. */ for(;;) { while( c ) { mpi_ptr_t tp; mpi_size_t xsize; /*mpihelp_mul_n(xp, rp, rp, rsize);*/ if( rsize < KARATSUBA_THRESHOLD ) mpih_sqr_n_basecase( xp, rp, rsize ); else { if( !tspace ) { tsize = 2 * rsize; tspace = mpi_alloc_limb_space( tsize, 0 ); } else if( tsize < (2*rsize) ) { mpi_free_limb_space( tspace ); tsize = 2 * rsize; tspace = mpi_alloc_limb_space( tsize, 0 ); } mpih_sqr_n( xp, rp, rsize, tspace ); } xsize = 2 * rsize; if( xsize > msize ) { mpihelp_divrem(xp + msize, 0, xp, xsize, mp, msize); xsize = msize; } tp = rp; rp = xp; xp = tp; rsize = xsize; /* To mitigate the Yarom/Falkner flush+reload cache * side-channel attack on the RSA secret exponent, we * do the multiplication regardless of the value of * the high-bit of E. But to avoid this performance * penalty we do it only if the exponent has been * stored in secure memory and we can thus assume it * is a secret exponent. */ if (esec || (mpi_limb_signed_t)e < 0) { /*mpihelp_mul( xp, rp, rsize, bp, bsize );*/ if( bsize < KARATSUBA_THRESHOLD ) { mpihelp_mul( xp, rp, rsize, bp, bsize ); } else { mpihelp_mul_karatsuba_case( xp, rp, rsize, bp, bsize, &karactx ); } xsize = rsize + bsize; if( xsize > msize ) { mpihelp_divrem(xp + msize, 0, xp, xsize, mp, msize); xsize = msize; } } if ((mpi_limb_signed_t)e < 0) { tp = rp; rp = xp; xp = tp; rsize = xsize; } e <<= 1; c--; } i--; if( i < 0 ) break; e = ep[i]; c = BITS_PER_MPI_LIMB; } /* We shifted MOD, the modulo reduction argument, left MOD_SHIFT_CNT * steps. Adjust the result by reducing it with the original MOD. * * Also make sure the result is put in RES->d (where it already * might be, see above). */ if( mod_shift_cnt ) { carry_limb = mpihelp_lshift( res->d, rp, rsize, mod_shift_cnt); rp = res->d; if( carry_limb ) { rp[rsize] = carry_limb; rsize++; } } else { MPN_COPY( res->d, rp, rsize); rp = res->d; } if( rsize >= msize ) { mpihelp_divrem(rp + msize, 0, rp, rsize, mp, msize); rsize = msize; } /* Remove any leading zero words from the result. */ if( mod_shift_cnt ) mpihelp_rshift( rp, rp, rsize, mod_shift_cnt); MPN_NORMALIZE (rp, rsize); mpihelp_release_karatsuba_ctx( &karactx ); } if( negative_result && rsize ) { if( mod_shift_cnt ) mpihelp_rshift( mp, mp, msize, mod_shift_cnt); mpihelp_sub( rp, mp, msize, rp, rsize); rsize = msize; rsign = msign; MPN_NORMALIZE(rp, rsize); } res->nlimbs = rsize; res->sign = rsign; leave: if( assign_rp ) mpi_assign_limb_space( res, rp, size ); if( mp_marker ) mpi_free_limb_space( mp_marker ); if( bp_marker ) mpi_free_limb_space( bp_marker ); if( ep_marker ) mpi_free_limb_space( ep_marker ); if( xp_marker ) mpi_free_limb_space( xp_marker ); if( tspace ) mpi_free_limb_space( tspace ); } #else /*!USE_ALGORITHM_SIMPLE_EXPONENTIATION */ /** * Internal function to compute * * X = R * S mod M * * and set the size of X at the pointer XSIZE_P. * Use karatsuba structure at KARACTX_P. * * Condition: * RSIZE >= SSIZE * Enough space for X is allocated beforehand. * * For generic cases, we can/should use mpi_mulm. * This function is use for specific internal case. */ static void mul_mod (mpi_ptr_t xp, mpi_size_t *xsize_p, mpi_ptr_t rp, mpi_size_t rsize, mpi_ptr_t sp, mpi_size_t ssize, mpi_ptr_t mp, mpi_size_t msize, struct karatsuba_ctx *karactx_p) { if( ssize < KARATSUBA_THRESHOLD ) mpihelp_mul ( xp, rp, rsize, sp, ssize ); else mpihelp_mul_karatsuba_case (xp, rp, rsize, sp, ssize, karactx_p); if (rsize + ssize > msize) { mpihelp_divrem (xp + msize, 0, xp, rsize + ssize, mp, msize); *xsize_p = msize; } else *xsize_p = rsize + ssize; } #define SIZE_PRECOMP ((1 << (5 - 1))) /**************** * RES = BASE ^ EXPO mod MOD * * To mitigate the Yarom/Falkner flush+reload cache side-channel * attack on the RSA secret exponent, we don't use the square * routine but multiplication. * * Reference: * Handbook of Applied Cryptography * Algorithm 14.83: Modified left-to-right k-ary exponentiation */ void mpi_powm (MPI res, MPI base, MPI expo, MPI mod) { /* Pointer to the limbs of the arguments, their size and signs. */ mpi_ptr_t rp, ep, mp, bp; mpi_size_t esize, msize, bsize, rsize; int msign, bsign, rsign; /* Flags telling the secure allocation status of the arguments. */ int esec, msec, bsec; /* Size of the result including space for temporary values. */ mpi_size_t size; /* Helper. */ int mod_shift_cnt; int negative_result; mpi_ptr_t mp_marker = NULL; mpi_ptr_t bp_marker = NULL; mpi_ptr_t ep_marker = NULL; mpi_ptr_t xp_marker = NULL; mpi_ptr_t precomp[SIZE_PRECOMP]; /* Pre-computed array: BASE^1, ^3, ^5, ... */ mpi_size_t precomp_size[SIZE_PRECOMP]; mpi_size_t W; mpi_ptr_t base_u; mpi_size_t base_u_size; mpi_size_t max_u_size; esize = expo->nlimbs; msize = mod->nlimbs; size = 2 * msize; msign = mod->sign; if (esize * BITS_PER_MPI_LIMB > 512) W = 5; else if (esize * BITS_PER_MPI_LIMB > 256) W = 4; else if (esize * BITS_PER_MPI_LIMB > 128) W = 3; else if (esize * BITS_PER_MPI_LIMB > 64) W = 2; else W = 1; esec = mpi_is_secure(expo); msec = mpi_is_secure(mod); bsec = mpi_is_secure(base); rp = res->d; ep = expo->d; if (!msize) msize = 1 / msize; /* provoke a signal */ if (!esize) { /* Exponent is zero, result is 1 mod MOD, i.e., 1 or 0 depending on if MOD equals 1. */ res->nlimbs = (msize == 1 && mod->d[0] == 1) ? 0 : 1; if (res->nlimbs) { RESIZE_IF_NEEDED (res, 1); rp = res->d; rp[0] = 1; } res->sign = 0; goto leave; } /* Normalize MOD (i.e. make its most significant bit set) as required by mpn_divrem. This will make the intermediate values in the calculation slightly larger, but the correct result is obtained after a final reduction using the original MOD value. */ mp = mp_marker = mpi_alloc_limb_space(msize, msec); count_leading_zeros (mod_shift_cnt, mod->d[msize-1]); if (mod_shift_cnt) mpihelp_lshift (mp, mod->d, msize, mod_shift_cnt); else MPN_COPY( mp, mod->d, msize ); bsize = base->nlimbs; bsign = base->sign; if (bsize > msize) { /* The base is larger than the module. Reduce it. Allocate (BSIZE + 1) with space for remainder and quotient. (The quotient is (bsize - msize + 1) limbs.) */ bp = bp_marker = mpi_alloc_limb_space( bsize + 1, bsec ); MPN_COPY ( bp, base->d, bsize ); /* We don't care about the quotient, store it above the * remainder, at BP + MSIZE. */ mpihelp_divrem( bp + msize, 0, bp, bsize, mp, msize ); bsize = msize; /* Canonicalize the base, since we are going to multiply with it quite a few times. */ MPN_NORMALIZE( bp, bsize ); } else bp = base->d; if (!bsize) { res->nlimbs = 0; res->sign = 0; goto leave; } /* Make BASE, EXPO and MOD not overlap with RES. */ if ( rp == bp ) { /* RES and BASE are identical. Allocate temp. space for BASE. */ assert (!bp_marker); bp = bp_marker = mpi_alloc_limb_space( bsize, bsec ); MPN_COPY(bp, rp, bsize); } if ( rp == ep ) { /* RES and EXPO are identical. Allocate temp. space for EXPO. */ ep = ep_marker = mpi_alloc_limb_space( esize, esec ); MPN_COPY(ep, rp, esize); } if ( rp == mp ) { /* RES and MOD are identical. Allocate temporary space for MOD.*/ assert (!mp_marker); mp = mp_marker = mpi_alloc_limb_space( msize, msec ); MPN_COPY(mp, rp, msize); } /* Copy base to the result. */ if (res->alloced < size) { mpi_resize (res, size); rp = res->d; } /* Main processing. */ { mpi_size_t i, j, k; mpi_ptr_t xp; mpi_size_t xsize; int c; mpi_limb_t e; mpi_limb_t carry_limb; struct karatsuba_ctx karactx; mpi_ptr_t tp; xp = xp_marker = mpi_alloc_limb_space( 2 * (msize + 1), msec ); memset( &karactx, 0, sizeof karactx ); negative_result = (ep[0] & 1) && bsign; /* Precompute PRECOMP[], BASE^(2 * i + 1), BASE^1, ^3, ^5, ... */ if (W > 1) /* X := BASE^2 */ mul_mod (xp, &xsize, bp, bsize, bp, bsize, mp, msize, &karactx); base_u = precomp[0] = mpi_alloc_limb_space (bsize, esec); base_u_size = max_u_size = precomp_size[0] = bsize; MPN_COPY (precomp[0], bp, bsize); for (i = 1; i < (1 << (W - 1)); i++) { /* PRECOMP[i] = BASE^(2 * i + 1) */ if (xsize >= base_u_size) mul_mod (rp, &rsize, xp, xsize, base_u, base_u_size, mp, msize, &karactx); else mul_mod (rp, &rsize, base_u, base_u_size, xp, xsize, mp, msize, &karactx); base_u = precomp[i] = mpi_alloc_limb_space (rsize, esec); base_u_size = precomp_size[i] = rsize; if (max_u_size < base_u_size) max_u_size = base_u_size; MPN_COPY (precomp[i], rp, rsize); } base_u = mpi_alloc_limb_space (max_u_size, esec); i = esize - 1; /* Main loop. Make the result be pointed to alternately by XP and RP. This helps us avoid block copying, which would otherwise be necessary with the overlap restrictions of mpihelp_divmod. With 50% probability the result after this loop will be in the area originally pointed by RP (==RES->d), and with 50% probability in the area originally pointed to by XP. */ rsign = 0; if (W == 1) { rsize = bsize; } else { rsize = msize; MPN_ZERO (rp, rsize); } MPN_COPY ( rp, bp, bsize ); e = ep[i]; count_leading_zeros (c, e); e = (e << c) << 1; c = BITS_PER_MPI_LIMB - 1 - c; j = 0; for (;;) if (e == 0) { j += c; i--; if ( i < 0 ) { c = 0; break; } e = ep[i]; c = BITS_PER_MPI_LIMB; } else { int c0; mpi_limb_t e0; count_leading_zeros (c0, e); e = (e << c0); c -= c0; j += c0; if (c >= W) { e0 = (e >> (BITS_PER_MPI_LIMB - W)); e = (e << W); c -= W; } else { i--; if ( i < 0 ) { e = (e >> (BITS_PER_MPI_LIMB - c)); break; } c0 = c; e0 = (e >> (BITS_PER_MPI_LIMB - W)) | (ep[i] >> (BITS_PER_MPI_LIMB - W + c0)); e = (ep[i] << (W - c0)); c = BITS_PER_MPI_LIMB - W + c0; } count_trailing_zeros (c0, e0); e0 = (e0 >> c0) >> 1; for (j += W - c0; j; j--) { mul_mod (xp, &xsize, rp, rsize, rp, rsize, mp, msize, &karactx); tp = rp; rp = xp; xp = tp; rsize = xsize; } /* * base_u <= precomp[e0] * base_u_size <= precomp_size[e0]; */ base_u_size = 0; for (k = 0; k < (1<< (W - 1)); k++) { struct gcry_mpi w, u; w.alloced = w.nlimbs = precomp_size[k]; u.alloced = u.nlimbs = precomp_size[k]; w.nbits = w.nlimbs * BITS_PER_MPI_LIMB; u.nbits = u.nlimbs * BITS_PER_MPI_LIMB; w.sign = u.sign = 0; w.flags = u.flags = 0; w.d = base_u; u.d = precomp[k]; mpi_set_cond (&w, &u, k == e0); base_u_size |= (precomp_size[k] & ((mpi_size_t)0 - (k == e0)) ); } mul_mod (xp, &xsize, rp, rsize, base_u, base_u_size, mp, msize, &karactx); tp = rp; rp = xp; xp = tp; rsize = xsize; j = c0; } if (c != 0) { j += c; count_trailing_zeros (c, e); e = (e >> c); j -= c; } while (j--) { mul_mod (xp, &xsize, rp, rsize, rp, rsize, mp, msize, &karactx); tp = rp; rp = xp; xp = tp; rsize = xsize; } if (e != 0) { base_u_size = 0; for (k = 0; k < (1<< (W - 1)); k++) { struct gcry_mpi w, u; w.alloced = w.nlimbs = precomp_size[k]; u.alloced = u.nlimbs = precomp_size[k]; w.nbits = w.nlimbs * BITS_PER_MPI_LIMB; u.nbits = u.nlimbs * BITS_PER_MPI_LIMB; w.sign = u.sign = 0; w.flags = u.flags = 0; w.d = base_u; u.d = precomp[k]; mpi_set_cond (&w, &u, k == (e>>1)); base_u_size |= (precomp_size[k] & ((mpi_size_t)0 - (k == (e>>1))) ); } mul_mod (xp, &xsize, rp, rsize, base_u, base_u_size, mp, msize, &karactx); tp = rp; rp = xp; xp = tp; rsize = xsize; for (; c; c--) { mul_mod (xp, &xsize, rp, rsize, rp, rsize, mp, msize, &karactx); tp = rp; rp = xp; xp = tp; rsize = xsize; } } /* We shifted MOD, the modulo reduction argument, left MOD_SHIFT_CNT steps. Adjust the result by reducing it with the original MOD. Also make sure the result is put in RES->d (where it already might be, see above). */ if ( mod_shift_cnt ) { carry_limb = mpihelp_lshift( res->d, rp, rsize, mod_shift_cnt); rp = res->d; if ( carry_limb ) { rp[rsize] = carry_limb; rsize++; } } else if (res->d != rp) { MPN_COPY (res->d, rp, rsize); rp = res->d; } if ( rsize >= msize ) { mpihelp_divrem(rp + msize, 0, rp, rsize, mp, msize); rsize = msize; } /* Remove any leading zero words from the result. */ if ( mod_shift_cnt ) mpihelp_rshift (rp, rp, rsize, mod_shift_cnt); MPN_NORMALIZE (rp, rsize); mpihelp_release_karatsuba_ctx (&karactx ); for (i = 0; i < (1 << (W - 1)); i++) mpi_free_limb_space (precomp[i]); mpi_free_limb_space (base_u); } /* Fixup for negative results. */ if ( negative_result && rsize ) { if ( mod_shift_cnt ) mpihelp_rshift (mp, mp, msize, mod_shift_cnt); mpihelp_sub (rp, mp, msize, rp, rsize); rsize = msize; rsign = msign; MPN_NORMALIZE(rp, rsize); } assert (res->d == rp); res->nlimbs = rsize; res->sign = rsign; leave: if (mp_marker) mpi_free_limb_space (mp_marker); if (bp_marker) mpi_free_limb_space (bp_marker); if (ep_marker) mpi_free_limb_space (ep_marker); if (xp_marker) mpi_free_limb_space (xp_marker); } #endif /*!USE_ALGORITHM_SIMPLE_EXPONENTIATION */ gnupg-1.4.20/mpi/ChangeLog-20110000644000175000017500000004171412635262326012575 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-08-09 Werner Koch * mpicoder.c (mpi_fromstr): Remove unused var. * mpi-pow.c (mpi_powm): Remove unused var. 2011-07-04 Werner Koch * longlong.h: [__arm__]: Do no use asm if thumb code generation is enabled. Fixes bug#1202. 2010-10-28 Werner Koch * longlong.h: Revert last two changes and replace by code from libgcrypt 1.4.6. 2010-10-22 Jason Woodward (wk) * longlong.h (umul_ppmm) [mips32]: Fix typo. (umul_ppmm) [mips64]: Don't use =h with gcc >= 4.4. 2010-06-01 Werner Koch * longlong.h (umul_ppmm) <__mips__>: Add code for gcc 4.4. This fixes bug#1231. 2009-12-09 Werner Koch * config.links: Remove asm modules for all sparc64. This is related to debian#560028. 2008-03-25 Werner Koch * config.links (mpi_sflags): Powerpc64 needs to come even before the generic linux powerpc entry. 2007-10-23 Werner Koch Switched entire package to GPLv3+. * longlong.h: Change address notice but keep LGPL. * powerpc32/*: Remove LGPL license cruft in the middle of the files 2007-01-15 David Shaw * config.links: powerpc64* needs to come before powerpc* or it will never match. Reported by Alon Bar-Lev for libgcrypt, but relevant here as well. 2006-12-11 Werner Koch * mpi-internal.h: Include mpi-asm-defs.h. (mpi_limb_t): Moved definition from mpi.h to here. (struct gcry_mpi): Moved from mpi.h to here. * mpiutil.c (mpi_get_nlimbs, mpi_is_neg): New. To replace the macros. This helps hiding details of the MPI implementation. (mpi_nlimb_hint_from_nbytes, mpi_nlimb_hint_from_nbits): Ditto. (mpi_get_flags): Ditto. * mpicoder.c (mpi_read, mpi_read_from_buffer, mpi_print): s/MPI_NULL/NULL/. 2005-09-01 David Shaw * mpicoder.c (mpi_read): Fix minor bug in reading a zero-length MPI (was failing unnecessarily). 2005-05-06 Werner Koch * mpi-scan.c (mpi_putbyte, mpi_getbyte): Removed. Not used. 2005-04-21 Werner Koch * mpicoder.c (mpi_read): Changed error detection to always return an error while maintaining the actual number of bytes read. 2005-03-11 Werner Koch * Makefile.am (ASFLAGS): Renamed to AM_CCASFLAGS and added the variable for non exectubale stack options. Adapted users. 2004-12-20 Werner Koch * mpicoder.c (mpi_read_from_buffer): Don't abort in case of an invalid MPI but print a message and return NULL. Use log_info and not log_error. 2004-10-26 Werner Koch * config.links: Use HOST instead of TARGET. 2004-10-12 Werner Koch * Makefile.am (.S.o): Include MPI_SFLAGS. This is our bug 145. 2004-09-29 David Shaw * mpicoder.c (mpi_read): If we must fail due to a oversize (generally corrupt) MPI, make sure the number of bytes we read is valid so we can skip the rest of the bad packet (in hopes the whole stream isn't invalid). 2004-05-20 David Shaw * longlong.h: Typo. * mpi-pow.c (mpi_powm): s/exp/exponent/ to shutup a compiler warning. From Werner on stable branch. 2004-01-20 David Shaw * hppa1.1/udiv-qrnnd.S: Alignment fix from Lamont Jones for Debian. 2004-01-11 David Shaw * config.links: OpenBSD 3.4 is now ELF, so use the proper assembler code for that. Use the portable C MPI code for OpenBSD before 3.4, and remove the special i386-openbsd assembly directory. * Makefile.am: Add the portable C links to DISTCLEANFILES. Noted by Nelson H. F. Beebe. * mpi-mpow.c (build_index): s/index/idx/ to avoid gcc warning. From Werner on stable branch. * longlong.h: Added PowerPC 64 bit code from GPM-4.1.2 but didn't enable it yet. From Werner on stable branch. 2003-12-29 David Shaw * g10m.c: Dead code. Remove. * Makefile.am: Don't compile g10m.c. 2003-12-17 David Shaw * mpiutil.c (mpi_set_opaque, mpi_get_opaque): Make the length of an opaque MPI unsigned. 2003-12-04 David Shaw * config.links: Show target in asm-syntax.h file and include targets for K*BSD (GNU userland with BSD kernel). 2003-11-20 David Shaw * config.links: sparc64 assembler doesn't work on FreeBSD or OpenBSD either. 2003-05-26 David Shaw * Makefile.am: Make use of AM_CFLAGS. (From wk on stable branch) 2003-05-24 David Shaw * mpicoder.c, mpi-inline.h, mpi-inv.c, mpiutil.c, mpih-div.c, mpi-internal.h, mpi-scan.c: Edit all preprocessor instructions to remove whitespace before the '#'. This is not required by C89, but there are some compilers out there that don't like it. 2003-04-25 David Shaw * config.links: Re-disable assembler on Darwin. Darwin 6.5 broke it again. 2003-04-15 Werner Koch * longlong.h (umul_ppmm): Support SH3 and SH4. Thanks to kazuya.s@jp.yokogawa.com. 2002-11-16 David Shaw * config.links: Use OpenBSD/NetBSD powerpc assembler code for Darwin. Successfully tested by Gordon Worley. 2002-10-17 Werner Koch * config.links (powerpc-apple-darwin6.1): Disable assembler due to non-working modules/as. Suggested by Gordon Worley. 2002-10-02 David Shaw * longlong.h: Some whitespace changes in HPPA to fix assembler problems on HP-UX. From David Ellement. 2002-09-20 Werner Koch * mpicoder.c (do_get_buffer): Avoid zero length allocation. Checked that all callers behave properly when NBYTES returns 0 as the length of the allocated buffer. 2002-09-10 Werner Koch * mpi-bit.c (mpi_normalize): Replaced the check for protected by is_opaque. (mpi_get_nbits): Removed the special case for protected MPIs. * mpicoder.c (do_get_buffer): Likewise. (mpi_print): Removed the nbit_info printing. 2002-09-03 Werner Koch * mpicoder.c (mpi_set_buffer): Cast all left operands of a shift to a larger type so that 16 bit CPUs don't suffer from an overflow. Suggested by TOGAWA Satoshi. 2002-08-24 David Shaw * longlong.h: Remove space between \ and newline. gcc is complaining. 2002-08-13 Werner Koch * mpicoder.c (do_get_buffer): Don't remove leading zeros if the MPI is marked as protected. 2002-08-02 Timo Schulz * mpicoder.c: Add a '\n' to all log_bug functions. 2002-08-01 Werner Koch * config.links: Added case for sparc64-netbsd. Suggested by ww@styx.org. 2002-07-25 David Shaw * config.links: Add special rule for OpenBSD on x86 to use special i386-openbsd files. OpenBSD (at least until version 3.1) has an older assembler that won't work with the files in i386. 2002-07-24 Stefan Bellon * longlong.h [__riscos__]: Removed #pragma which is not needed anymore since the K&R multiline strings are gone. 2002-07-24 Werner Koch * longlong.h: Replaced all K&R multiline strings by ISO ones for the sake of modern compilers. Suggested by Marco Parrone. 2002-05-10 Stefan Bellon * mpiutil.c (mpi_alloc_like/mpi_debug_alloc_like): Added code for M_DEBUG. 2002-04-18 Werner Koch * i386/syntax.h (ALIGN): Removed parens from definition * i386/mpih-add1.S, i386/mpih-sub1.S, i386/mpih-rshift.S, i386/mpih-lshift.S: Minor syntax changes suggested by Mark Pettit after comparing the files with those for GMP 4. 2001-11-08 Werner Koch * config.links (mpi_sflags): Add extra rule for sparc64-sun-solaris2. 2001-08-20 Werner Koch * longlong.h [__riscos__]: Need a special pragma here. 2001-08-09 Werner Koch * config.links: Added configuraton for powerpc-openbsd. By Peter Valchev 2001-07-09 Werner Koch * config.links: Changed the way the list of files to be symlinked is returned. 2001-05-27 Werner Koch * hppa/, hppa1.1/, pa7100/ : Use .label command instead of labels because there syntax changed. By Matthew Wilcox. 2001-05-06 Werner Koch * longlong.h: Fixes for ARM by Phil Blundell. 2001-04-17 Werner Koch Updated copyright notices. 2001-03-24 Werner Koch * mpi-mul.c (mpi_mul): Make sure that secret temporary results are not stored in w. Suggested by Florian Weimer. 2001-03-18 Werner Koch * config.links: Use i386 code for i386. According to tests by Kevin Ryde the i586 code runs slow on i386 CPUs. Ditto for i786. 2000-10-24 Werner Koch * mips3/: Changed a few comments to C-style. By Jeff Long. 2000-10-13 Werner Koch * mpi.h: Removed the inclusion of mpi-asm-defs.h because this makes some trouble when doing a VPATH build. configure now takes care of it. 2000-10-12 Werner Koch * generic/mpi-asm-defs.h: New. * mips3/mpi-asm-defs.h: New. * config.links: Create a link to one of the above files. Wed Jul 19 11:26:43 CEST 2000 Werner Koch * config.links: Support for powerpc--netbsd by Gabriel Rosenkoetter. Wed Mar 22 13:50:24 CET 2000 Werner Koch * config.links: Add support for FreeBSD 5 and made the case stmt looking nicer. From Jun Kuriyama. Fri Mar 17 17:50:25 CET 2000 Werner Koch * config.links (sparc64-unknown-linux-gnu): use udic module. From Adam Mitchell. 2000-03-14 12:03:56 Werner Koch (wk@habibti.openit.de) * Makefile.am: Do not use .s and .S files but a temp names, so that OSes with caseinsensitive filenames do work. From Frank Donahoe. Tue Mar 7 18:45:31 CET 2000 Werner Koch * mpih-mul.c (mpihelp_mul_karatsuba_case): It seems that the untested part works fine. Removed the debugging message. * longlong.h (umul_ppmm): Fixes for ARM-4. By Sean MacLennan. * config.links: Add support for NetBSD. Thu Jan 13 19:31:58 CET 2000 Werner Koch * mpi-internal.h (karatsuba_ctx): New. * mpih-mul.c (mpihelp_release_karatsuba_ctx): New. (mpihelp_mul_karatsuba_case): New. (mpihelp_mul): Splitted to make use of the new functions. * mpi-pow.c (mpi_powm): Make use of the new splitted function to avoid multiple allocation of temporary memory during the karatsuba operations. * mpi_mpow.c: Removed the unused Barrett code. Sun Dec 19 15:22:26 CET 1999 Werner Koch * power/ : Converted more comments to C comments because some AS complain about ' in comments. Thu Dec 16 10:07:58 CET 1999 Werner Koch * Makefile.am: c/SFLAGS/ASFLAGS/. This has only been used by the powerpc and actually never passed the -Wa,foo to the cc. Thu Dec 9 10:31:05 CET 1999 Werner Koch * power/: Add all files from GMP for this CPU. * config.links: Support for BSDI 4.x. By Wayne Chapeskie. (sparc8): Made the search path the same as sparc9 * mpih-div.c (mpihelp_divrem): The MPN_COPY_DECR copied one elemnat too many. This is gmp2.0.2p9.txt patch. Sat Oct 9 20:34:41 CEST 1999 Werner Koch * Makefile.am: Removed libtool. Mon Aug 30 20:38:33 CEST 1999 Werner Koch * config.links: Add case label for DJGPP Wed Jul 14 19:42:08 CEST 1999 Werner Koch * Makefile.am: Use .s files as temporaries, disabled other .S rules. 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 Mller. 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 Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/mpi/m68k/0000755000175000017500000000000012635457223011302 500000000000000gnupg-1.4.20/mpi/m68k/syntax.h0000644000175000017500000001175412635262326012727 00000000000000/* asm.h -- Definitions for 68k syntax variations. * * Copyright (C) 1992, 1994, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #undef ALIGN #ifdef MIT_SYNTAX #define PROLOG(name) #define EPILOG(name) #define R(r)r #define MEM(base)base@ #define MEM_DISP(base,displacement)base@(displacement) #define MEM_INDX(base,idx,size_suffix)base@(idx:size_suffix) #define MEM_INDX1(base,idx,size_suffix,scale)base@(idx:size_suffix:scale) #define MEM_PREDEC(memory_base)memory_base@- #define MEM_POSTINC(memory_base)memory_base@+ #define L(label) label #define TEXT .text #define ALIGN .even #define GLOBL .globl #define moveql moveq /* Use variable sized opcodes. */ #define bcc jcc #define bcs jcs #define bls jls #define beq jeq #define bne jne #define bra jra #endif #ifdef SONY_SYNTAX #define PROLOG(name) #define EPILOG(name) #define R(r)r #define MEM(base)(base) #define MEM_DISP(base,displacement)(displacement,base) #define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix) #define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale) #define MEM_PREDEC(memory_base)-(memory_base) #define MEM_POSTINC(memory_base)(memory_base)+ #define L(label) label #define TEXT .text #define ALIGN .even #define GLOBL .globl #endif #ifdef MOTOROLA_SYNTAX #define PROLOG(name) #define EPILOG(name) #define R(r)r #define MEM(base)(base) #define MEM_DISP(base,displacement)(displacement,base) #define MEM_INDX(base,idx,size_suffix)(base,idx.size_suffix) #define MEM_INDX1(base,idx,size_suffix,scale)(base,idx.size_suffix*scale) #define MEM_PREDEC(memory_base)-(memory_base) #define MEM_POSTINC(memory_base)(memory_base)+ #define L(label) label #define TEXT #define ALIGN #define GLOBL XDEF #define lea LEA #define movel MOVE.L #define moveml MOVEM.L #define moveql MOVEQ.L #define cmpl CMP.L #define orl OR.L #define clrl CLR.L #define eorw EOR.W #define lsrl LSR.L #define lsll LSL.L #define roxrl ROXR.L #define roxll ROXL.L #define addl ADD.L #define addxl ADDX.L #define addql ADDQ.L #define subl SUB.L #define subxl SUBX.L #define subql SUBQ.L #define negl NEG.L #define mulul MULU.L #define bcc BCC #define bcs BCS #define bls BLS #define beq BEQ #define bne BNE #define bra BRA #define dbf DBF #define rts RTS #define d0 D0 #define d1 D1 #define d2 D2 #define d3 D3 #define d4 D4 #define d5 D5 #define d6 D6 #define d7 D7 #define a0 A0 #define a1 A1 #define a2 A2 #define a3 A3 #define a4 A4 #define a5 A5 #define a6 A6 #define a7 A7 #define sp SP #endif #ifdef ELF_SYNTAX #define PROLOG(name) .type name,@function #define EPILOG(name) .size name,.-name #define MEM(base)(R(base)) #define MEM_DISP(base,displacement)(displacement,R(base)) #define MEM_PREDEC(memory_base)-(R(memory_base)) #define MEM_POSTINC(memory_base)(R(memory_base))+ #ifdef __STDC__ #define R_(r)%##r #define R(r)R_(r) #define MEM_INDX_(base,idx,size_suffix)(R(base),R(idx##.##size_suffix)) #define MEM_INDX(base,idx,size_suffix)MEM_INDX_(base,idx,size_suffix) #define MEM_INDX1_(base,idx,size_suffix,scale)(R(base),R(idx##.##size_suffix*scale)) #define MEM_INDX1(base,idx,size_suffix,scale)MEM_INDX1_(base,idx,size_suffix,scale) #define L(label) .##label #else #define R(r)%/**/r #define MEM_INDX(base,idx,size_suffix)(R(base),R(idx).size_suffix) #define MEM_INDX1(base,idx,size_suffix,scale)(R(base),R(idx).size_suffix*scale) #define L(label) ./**/label #endif #define TEXT .text #define ALIGN .align 2 #define GLOBL .globl #define bcc jbcc #define bcs jbcs #define bls jbls #define beq jbeq #define bne jbne #define bra jbra #endif #if defined (SONY_SYNTAX) || defined (ELF_SYNTAX) #define movel move.l #define moveml movem.l #define moveql moveq.l #define cmpl cmp.l #define orl or.l #define clrl clr.l #define eorw eor.w #define lsrl lsr.l #define lsll lsl.l #define roxrl roxr.l #define roxll roxl.l #define addl add.l #define addxl addx.l #define addql addq.l #define subl sub.l #define subxl subx.l #define subql subq.l #define negl neg.l #define mulul mulu.l #endif gnupg-1.4.20/mpi/m68k/mpih-rshift.S0000644000175000017500000001015012635262326013573 00000000000000/* mc68020 rshift -- Shift right a low-level natural-number integer. * * Copyright (C) 1996, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_rshift( mpi_ptr_t wp, (sp + 4) * mpi_ptr_t up, (sp + 8) * mpi_size_t usize, (sp + 12) * unsigned cnt) (sp + 16) */ #define res_ptr a1 #define s_ptr a0 #define s_size d6 #define cnt d4 TEXT ALIGN GLOBL C_SYMBOL_NAME(mpihelp_rshift) C_SYMBOL_NAME(mpihelp_rshift:) PROLOG(mpihelp_rshift) /* Save used registers on the stack. */ moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp) /* Copy the arguments to registers. */ movel MEM_DISP(sp,28),R(res_ptr) movel MEM_DISP(sp,32),R(s_ptr) movel MEM_DISP(sp,36),R(s_size) movel MEM_DISP(sp,40),R(cnt) moveql #1,R(d5) cmpl R(d5),R(cnt) bne L(Rnormal) cmpl R(res_ptr),R(s_ptr) bls L(Rspecial) /* jump if res_ptr >= s_ptr */ #if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) lea MEM_INDX1(res_ptr,s_size,l,4),R(a2) #else /* not mc68020 */ movel R(s_size),R(d0) asll #2,R(d0) lea MEM_INDX(res_ptr,d0,l),R(a2) #endif cmpl R(s_ptr),R(a2) bls L(Rspecial) /* jump if s_ptr >= res_ptr + s_size */ L(Rnormal:) moveql #32,R(d5) subl R(cnt),R(d5) movel MEM_POSTINC(s_ptr),R(d2) movel R(d2),R(d0) lsll R(d5),R(d0) /* compute carry limb */ lsrl R(cnt),R(d2) movel R(d2),R(d1) subql #1,R(s_size) beq L(Rend) lsrl #1,R(s_size) bcs L(R1) subql #1,R(s_size) L(Roop:) movel MEM_POSTINC(s_ptr),R(d2) movel R(d2),R(d3) lsll R(d5),R(d3) orl R(d3),R(d1) movel R(d1),MEM_POSTINC(res_ptr) lsrl R(cnt),R(d2) L(R1:) movel MEM_POSTINC(s_ptr),R(d1) movel R(d1),R(d3) lsll R(d5),R(d3) orl R(d3),R(d2) movel R(d2),MEM_POSTINC(res_ptr) lsrl R(cnt),R(d1) dbf R(s_size),L(Roop) subl #0x10000,R(s_size) bcc L(Roop) L(Rend:) movel R(d1),MEM(res_ptr) /* store most significant limb */ /* Restore used registers from stack frame. */ moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) rts /* We loop from most significant end of the arrays, which is only permissable if the source and destination don't overlap, since the function is documented to work for overlapping source and destination. */ L(Rspecial:) #if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr) lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr) #else /* not mc68000 */ movel R(s_size),R(d0) asll #2,R(d0) addl R(s_size),R(s_ptr) addl R(s_size),R(res_ptr) #endif clrl R(d0) /* initialize carry */ eorw #1,R(s_size) lsrl #1,R(s_size) bcc L(LR1) subql #1,R(s_size) L(LRoop:) movel MEM_PREDEC(s_ptr),R(d2) roxrl #1,R(d2) movel R(d2),MEM_PREDEC(res_ptr) L(LR1:) movel MEM_PREDEC(s_ptr),R(d2) roxrl #1,R(d2) movel R(d2),MEM_PREDEC(res_ptr) dbf R(s_size),L(LRoop) roxrl #1,R(d0) /* save cy in msb */ subl #0x10000,R(s_size) bcs L(LRend) addl R(d0),R(d0) /* restore cy */ bra L(LRoop) L(LRend:) /* Restore used registers from stack frame. */ moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) rts EPILOG(mpihelp_rshift) gnupg-1.4.20/mpi/m68k/mpih-add1.S0000644000175000017500000000512212635262326013110 00000000000000/* mc68020 __mpn_add_n -- Add two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1992, 1994,1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_add_n( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_ptr_t s2_ptr, (sp + 16) * mpi_size_t size) (sp + 12) */ TEXT ALIGN GLOBL C_SYMBOL_NAME(mpihelp_add_n) C_SYMBOL_NAME(mpihelp_add_n:) PROLOG(mpihelp_add_n) /* Save used registers on the stack. */ movel R(d2),MEM_PREDEC(sp) movel R(a2),MEM_PREDEC(sp) /* Copy the arguments to registers. Better use movem? */ movel MEM_DISP(sp,12),R(a2) movel MEM_DISP(sp,16),R(a0) movel MEM_DISP(sp,20),R(a1) movel MEM_DISP(sp,24),R(d2) eorw #1,R(d2) lsrl #1,R(d2) bcc L(L1) subql #1,R(d2) /* clears cy as side effect */ L(Loop:) movel MEM_POSTINC(a0),R(d0) movel MEM_POSTINC(a1),R(d1) addxl R(d1),R(d0) movel R(d0),MEM_POSTINC(a2) L(L1:) movel MEM_POSTINC(a0),R(d0) movel MEM_POSTINC(a1),R(d1) addxl R(d1),R(d0) movel R(d0),MEM_POSTINC(a2) dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */ subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */ subl #0x10000,R(d2) bcs L(L2) addl R(d0),R(d0) /* restore cy */ bra L(Loop) L(L2:) negl R(d0) /* Restore used registers from stack frame. */ movel MEM_POSTINC(sp),R(a2) movel MEM_POSTINC(sp),R(d2) rts EPILOG(mpihelp_add_n) gnupg-1.4.20/mpi/m68k/mc68020/0000755000175000017500000000000012635457223012301 500000000000000gnupg-1.4.20/mpi/m68k/mc68020/mpih-mul2.S0000644000175000017500000000522312635262326014157 00000000000000/* mc68020 __mpn_addmul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1994, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_addmul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ TEXT ALIGN GLOBL C_SYMBOL_NAME(mpihelp_addmul_1) C_SYMBOL_NAME(mpihelp_addmul_1:) PROLOG(mpihelp_addmul_1) #define res_ptr a0 #define s1_ptr a1 #define s1_size d2 #define s2_limb d4 /* Save used registers on the stack. */ moveml R(d2)-R(d5),MEM_PREDEC(sp) /* Copy the arguments to registers. Better use movem? */ movel MEM_DISP(sp,20),R(res_ptr) movel MEM_DISP(sp,24),R(s1_ptr) movel MEM_DISP(sp,28),R(s1_size) movel MEM_DISP(sp,32),R(s2_limb) eorw #1,R(s1_size) clrl R(d1) clrl R(d5) lsrl #1,R(s1_size) bcc L(L1) subql #1,R(s1_size) subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ L(Loop:) movel MEM_POSTINC(s1_ptr),R(d3) mulul R(s2_limb),R(d1):R(d3) addxl R(d0),R(d3) addxl R(d5),R(d1) addl R(d3),MEM_POSTINC(res_ptr) L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) mulul R(s2_limb),R(d0):R(d3) addxl R(d1),R(d3) addxl R(d5),R(d0) addl R(d3),MEM_POSTINC(res_ptr) dbf R(s1_size),L(Loop) addxl R(d5),R(d0) subl #0x10000,R(s1_size) bcc L(Loop) /* Restore used registers from stack frame. */ moveml MEM_POSTINC(sp),R(d2)-R(d5) rts EPILOG(mpihelp_addmul_1) gnupg-1.4.20/mpi/m68k/mc68020/mpih-mul3.S0000644000175000017500000000523412635262326014162 00000000000000/* mc68020 __mpn_submul_1 -- Multiply a limb vector with a limb and subtract * the result from a second limb vector. * * Copyright (C) 1992, 1994, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_submul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ TEXT ALIGN GLOBL C_SYMBOL_NAME(mpihelp_submul_1) C_SYMBOL_NAME(mpihelp_submul_1:) PROLOG(mpihelp_submul_1) #define res_ptr a0 #define s1_ptr a1 #define s1_size d2 #define s2_limb d4 /* Save used registers on the stack. */ moveml R(d2)-R(d5),MEM_PREDEC(sp) /* Copy the arguments to registers. Better use movem? */ movel MEM_DISP(sp,20),R(res_ptr) movel MEM_DISP(sp,24),R(s1_ptr) movel MEM_DISP(sp,28),R(s1_size) movel MEM_DISP(sp,32),R(s2_limb) eorw #1,R(s1_size) clrl R(d1) clrl R(d5) lsrl #1,R(s1_size) bcc L(L1) subql #1,R(s1_size) subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ L(Loop:) movel MEM_POSTINC(s1_ptr),R(d3) mulul R(s2_limb),R(d1):R(d3) addxl R(d0),R(d3) addxl R(d5),R(d1) subl R(d3),MEM_POSTINC(res_ptr) L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) mulul R(s2_limb),R(d0):R(d3) addxl R(d1),R(d3) addxl R(d5),R(d0) subl R(d3),MEM_POSTINC(res_ptr) dbf R(s1_size),L(Loop) addxl R(d5),R(d0) subl #0x10000,R(s1_size) bcc L(Loop) /* Restore used registers from stack frame. */ moveml MEM_POSTINC(sp),R(d2)-R(d5) rts EPILOG(mpihelp_submul_1) gnupg-1.4.20/mpi/m68k/mc68020/mpih-mul1.S0000644000175000017500000000540612635262326014161 00000000000000/* mc68020 __mpn_mul_1 -- Multiply a limb vector with a limb and store * the result in a second limb vector. * * Copyright (C) 1992, 1994, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_mul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ TEXT ALIGN GLOBL C_SYMBOL_NAME(mpihelp_mul_1) C_SYMBOL_NAME(mpihelp_mul_1:) PROLOG(mpihelp_mul_1) #define res_ptr a0 #define s1_ptr a1 #define s1_size d2 #define s2_limb d4 /* Save used registers on the stack. */ moveml R(d2)-R(d4),MEM_PREDEC(sp) #if 0 movel R(d2),MEM_PREDEC(sp) movel R(d3),MEM_PREDEC(sp) movel R(d4),MEM_PREDEC(sp) #endif /* Copy the arguments to registers. Better use movem? */ movel MEM_DISP(sp,16),R(res_ptr) movel MEM_DISP(sp,20),R(s1_ptr) movel MEM_DISP(sp,24),R(s1_size) movel MEM_DISP(sp,28),R(s2_limb) eorw #1,R(s1_size) clrl R(d1) lsrl #1,R(s1_size) bcc L(L1) subql #1,R(s1_size) subl R(d0),R(d0) /* (d0,cy) <= (0,0) */ L(Loop:) movel MEM_POSTINC(s1_ptr),R(d3) mulul R(s2_limb),R(d1):R(d3) addxl R(d0),R(d3) movel R(d3),MEM_POSTINC(res_ptr) L(L1:) movel MEM_POSTINC(s1_ptr),R(d3) mulul R(s2_limb),R(d0):R(d3) addxl R(d1),R(d3) movel R(d3),MEM_POSTINC(res_ptr) dbf R(s1_size),L(Loop) clrl R(d3) addxl R(d3),R(d0) subl #0x10000,R(s1_size) bcc L(Loop) /* Restore used registers from stack frame. */ moveml MEM_POSTINC(sp),R(d2)-R(d4) #if 0 movel MEM_POSTINC(sp),R(d4) movel MEM_POSTINC(sp),R(d3) movel MEM_POSTINC(sp),R(d2) #endif rts EPILOG(mpihelp_mul_1) gnupg-1.4.20/mpi/m68k/mc68020/distfiles0000644000175000017500000000004412635262326014126 00000000000000mpih-mul1.S mpih-mul2.S mpih-mul3.S gnupg-1.4.20/mpi/m68k/distfiles0000644000175000017500000000010012635262326013120 00000000000000syntax.h mpih-lshift.S mpih-rshift.S mpih-add1.S mpih-sub1.S gnupg-1.4.20/mpi/m68k/mpih-lshift.S0000644000175000017500000001016512635262326013573 00000000000000/* mc68020 lshift -- Shift left a low-level natural-number integer. * * Copyright (C) 1996, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_lshift( mpi_ptr_t wp, (sp + 4) * mpi_ptr_t up, (sp + 8) * mpi_size_t usize, (sp + 12) * unsigned cnt) (sp + 16) */ #define res_ptr a1 #define s_ptr a0 #define s_size d6 #define cnt d4 TEXT ALIGN GLOBL C_SYMBOL_NAME(mpihelp_lshift) C_SYMBOL_NAME(mpihelp_lshift:) PROLOG(mpihelp_lshift) /* Save used registers on the stack. */ moveml R(d2)-R(d6)/R(a2),MEM_PREDEC(sp) /* Copy the arguments to registers. */ movel MEM_DISP(sp,28),R(res_ptr) movel MEM_DISP(sp,32),R(s_ptr) movel MEM_DISP(sp,36),R(s_size) movel MEM_DISP(sp,40),R(cnt) moveql #1,R(d5) cmpl R(d5),R(cnt) bne L(Lnormal) cmpl R(s_ptr),R(res_ptr) bls L(Lspecial) /* jump if s_ptr >= res_ptr */ #if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) lea MEM_INDX1(s_ptr,s_size,l,4),R(a2) #else /* not mc68020 */ movel R(s_size),R(d0) asll #2,R(d0) lea MEM_INDX(s_ptr,d0,l),R(a2) #endif cmpl R(res_ptr),R(a2) bls L(Lspecial) /* jump if res_ptr >= s_ptr + s_size */ L(Lnormal:) moveql #32,R(d5) subl R(cnt),R(d5) #if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) lea MEM_INDX1(s_ptr,s_size,l,4),R(s_ptr) lea MEM_INDX1(res_ptr,s_size,l,4),R(res_ptr) #else /* not mc68000 */ movel R(s_size),R(d0) asll #2,R(d0) addl R(s_size),R(s_ptr) addl R(s_size),R(res_ptr) #endif movel MEM_PREDEC(s_ptr),R(d2) movel R(d2),R(d0) lsrl R(d5),R(d0) /* compute carry limb */ lsll R(cnt),R(d2) movel R(d2),R(d1) subql #1,R(s_size) beq L(Lend) lsrl #1,R(s_size) bcs L(L1) subql #1,R(s_size) L(Loop:) movel MEM_PREDEC(s_ptr),R(d2) movel R(d2),R(d3) lsrl R(d5),R(d3) orl R(d3),R(d1) movel R(d1),MEM_PREDEC(res_ptr) lsll R(cnt),R(d2) L(L1:) movel MEM_PREDEC(s_ptr),R(d1) movel R(d1),R(d3) lsrl R(d5),R(d3) orl R(d3),R(d2) movel R(d2),MEM_PREDEC(res_ptr) lsll R(cnt),R(d1) dbf R(s_size),L(Loop) subl #0x10000,R(s_size) bcc L(Loop) L(Lend:) movel R(d1),MEM_PREDEC(res_ptr) /* store least significant limb */ /* Restore used registers from stack frame. */ moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) rts /* We loop from least significant end of the arrays, which is only permissable if the source and destination don't overlap, since the function is documented to work for overlapping source and destination. */ L(Lspecial:) clrl R(d0) /* initialize carry */ eorw #1,R(s_size) lsrl #1,R(s_size) bcc L(LL1) subql #1,R(s_size) L(LLoop:) movel MEM_POSTINC(s_ptr),R(d2) addxl R(d2),R(d2) movel R(d2),MEM_POSTINC(res_ptr) L(LL1:) movel MEM_POSTINC(s_ptr),R(d2) addxl R(d2),R(d2) movel R(d2),MEM_POSTINC(res_ptr) dbf R(s_size),L(LLoop) addxl R(d0),R(d0) /* save cy in lsb */ subl #0x10000,R(s_size) bcs L(LLend) lsrl #1,R(d0) /* restore cy */ bra L(LLoop) L(LLend:) /* Restore used registers from stack frame. */ moveml MEM_POSTINC(sp),R(d2)-R(d6)/R(a2) rts EPILOG(mpihelp_lshift) gnupg-1.4.20/mpi/m68k/mpih-sub1.S0000644000175000017500000000513312635262326013153 00000000000000/* mc68020 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and * store difference in a third limb vector. * * Copyright (C) 1992, 1994, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_sub_n( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_ptr_t s2_ptr, (sp + 16) * mpi_size_t size) (sp + 12) */ TEXT ALIGN GLOBL C_SYMBOL_NAME(mpihelp_sub_n) C_SYMBOL_NAME(mpihelp_sub_n:) PROLOG(mpihelp_sub_n) /* Save used registers on the stack. */ movel R(d2),MEM_PREDEC(sp) movel R(a2),MEM_PREDEC(sp) /* Copy the arguments to registers. Better use movem? */ movel MEM_DISP(sp,12),R(a2) movel MEM_DISP(sp,16),R(a0) movel MEM_DISP(sp,20),R(a1) movel MEM_DISP(sp,24),R(d2) eorw #1,R(d2) lsrl #1,R(d2) bcc L(L1) subql #1,R(d2) /* clears cy as side effect */ L(Loop:) movel MEM_POSTINC(a0),R(d0) movel MEM_POSTINC(a1),R(d1) subxl R(d1),R(d0) movel R(d0),MEM_POSTINC(a2) L(L1:) movel MEM_POSTINC(a0),R(d0) movel MEM_POSTINC(a1),R(d1) subxl R(d1),R(d0) movel R(d0),MEM_POSTINC(a2) dbf R(d2),L(Loop) /* loop until 16 lsb of %4 == -1 */ subxl R(d0),R(d0) /* d0 <= -cy; save cy as 0 or -1 in d0 */ subl #0x10000,R(d2) bcs L(L2) addl R(d0),R(d0) /* restore cy */ bra L(Loop) L(L2:) negl R(d0) /* Restore used registers from stack frame. */ movel MEM_POSTINC(sp),R(a2) movel MEM_POSTINC(sp),R(d2) rts EPILOG(mpihelp_sub_n) gnupg-1.4.20/mpi/mpiutil.c0000644000175000017500000002453212635262326012270 00000000000000/* mpiutil.ac - Utility functions for MPI * 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 3 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, see . */ #include #include #include #include #include #include "mpi.h" #include "mpi-internal.h" #include "memory.h" #include "util.h" #ifdef M_DEBUG #undef mpi_alloc #undef mpi_alloc_secure #undef mpi_free #endif /**************** * Note: It was a bad idea to use the number of limbs to allocate * because on a alpha the limbs are large but we normally need * integers of n bits - So we should chnage this to bits (or bytes). * * But mpi_alloc is used in a lot of places :-) */ MPI #ifdef M_DEBUG mpi_debug_alloc( unsigned nlimbs, const char *info ) #else mpi_alloc( unsigned nlimbs ) #endif { MPI a; if( DBG_MEMORY ) log_debug("mpi_alloc(%u)\n", nlimbs*BITS_PER_MPI_LIMB ); #ifdef M_DEBUG a = m_debug_alloc( sizeof *a, info ); a->d = nlimbs? mpi_debug_alloc_limb_space( nlimbs, 0, info ) : NULL; #else a = xmalloc( sizeof *a ); a->d = nlimbs? mpi_alloc_limb_space( nlimbs, 0 ) : NULL; #endif a->alloced = nlimbs; a->nlimbs = 0; a->sign = 0; a->flags = 0; a->nbits = 0; return a; } void mpi_m_check( MPI a ) { m_check(a); m_check(a->d); } MPI #ifdef M_DEBUG mpi_debug_alloc_secure( unsigned nlimbs, const char *info ) #else mpi_alloc_secure( unsigned nlimbs ) #endif { MPI a; if( DBG_MEMORY ) log_debug("mpi_alloc_secure(%u)\n", nlimbs*BITS_PER_MPI_LIMB ); #ifdef M_DEBUG a = m_debug_alloc( sizeof *a, info ); a->d = nlimbs? mpi_debug_alloc_limb_space( nlimbs, 1, info ) : NULL; #else a = xmalloc( sizeof *a ); a->d = nlimbs? mpi_alloc_limb_space( nlimbs, 1 ) : NULL; #endif a->alloced = nlimbs; a->flags = 1; a->nlimbs = 0; a->sign = 0; a->nbits = 0; return a; } #if 0 static void *unused_limbs_5; static void *unused_limbs_32; static void *unused_limbs_64; #endif mpi_ptr_t #ifdef M_DEBUG mpi_debug_alloc_limb_space( unsigned nlimbs, int secure, const char *info ) #else mpi_alloc_limb_space( unsigned nlimbs, int secure ) #endif { size_t len = nlimbs * sizeof(mpi_limb_t); mpi_ptr_t p; if( DBG_MEMORY ) log_debug("mpi_alloc_limb_space(%u)\n", (unsigned)len*8 ); #if 0 if( !secure ) { if( nlimbs == 5 && unused_limbs_5 ) { /* DSA 160 bits */ p = unused_limbs_5; unused_limbs_5 = *p; return p; } else if( nlimbs == 32 && unused_limbs_32 ) { /* DSA 1024 bits */ p = unused_limbs_32; unused_limbs_32 = *p; return p; } else if( nlimbs == 64 && unused_limbs_64 ) { /* DSA 2*1024 bits */ p = unused_limbs_64; unused_limbs_64 = *p; return p; } } #endif #ifdef M_DEBUG p = secure? m_debug_alloc_secure(len, info):m_debug_alloc( len, info ); #else p = secure? xmalloc_secure( len ):xmalloc( len ); #endif return p; } void #ifdef M_DEBUG mpi_debug_free_limb_space( mpi_ptr_t a, const char *info ) #else mpi_free_limb_space( mpi_ptr_t a ) #endif { if( !a ) return; if( DBG_MEMORY ) log_debug("mpi_free_limb_space of size %lu\n", (ulong)m_size(a)*8 ); #if 0 if( !m_is_secure(a) ) { size_t nlimbs = m_size(a) / 4 ; void *p = a; if( nlimbs == 5 ) { /* DSA 160 bits */ *a = unused_limbs_5; unused_limbs_5 = a; return; } else if( nlimbs == 32 ) { /* DSA 1024 bits */ *a = unused_limbs_32; unused_limbs_32 = a; return; } else if( nlimbs == 64 ) { /* DSA 2*1024 bits */ *a = unused_limbs_64; unused_limbs_64 = a; return; } } #endif xfree(a); } void mpi_assign_limb_space( MPI a, mpi_ptr_t ap, unsigned nlimbs ) { mpi_free_limb_space(a->d); a->d = ap; a->alloced = nlimbs; } /**************** * Resize the array of A to NLIMBS. the additional space is cleared * (set to 0) [done by xrealloc()] */ void #ifdef M_DEBUG mpi_debug_resize( MPI a, unsigned nlimbs, const char *info ) #else mpi_resize( MPI a, unsigned nlimbs ) #endif { if( nlimbs <= a->alloced ) return; /* no need to do it */ /* Note: a->secure is not used - instead the realloc functions * take care of it. Maybe we should drop a->secure completely * and rely on a mpi_is_secure function, which would be * a wrapper around m_is_secure */ #ifdef M_DEBUG if( a->d ) a->d = m_debug_realloc(a->d, nlimbs * sizeof(mpi_limb_t), info ); else a->d = m_debug_alloc_clear( nlimbs * sizeof(mpi_limb_t), info ); #else if( a->d ) a->d = xrealloc(a->d, nlimbs * sizeof(mpi_limb_t) ); else a->d = xmalloc_clear( nlimbs * sizeof(mpi_limb_t) ); #endif a->alloced = nlimbs; } void mpi_clear( MPI a ) { a->nlimbs = 0; a->nbits = 0; a->flags = 0; } void #ifdef M_DEBUG mpi_debug_free( MPI a, const char *info ) #else mpi_free( MPI a ) #endif { if( !a ) return; if( DBG_MEMORY ) log_debug("mpi_free\n" ); if( a->flags & 4 ) xfree( a->d ); else { #ifdef M_DEBUG mpi_debug_free_limb_space(a->d, info); #else mpi_free_limb_space(a->d); #endif } if( a->flags & ~7 ) log_bug("invalid flag value in mpi\n"); xfree(a); } void mpi_set_secure( MPI a ) { mpi_ptr_t ap, bp; if( (a->flags & 1) ) return; a->flags |= 1; ap = a->d; if( !a->nlimbs ) { assert(!ap); return; } #ifdef M_DEBUG bp = mpi_debug_alloc_limb_space( a->nlimbs, 1, "set_secure" ); #else bp = mpi_alloc_limb_space( a->nlimbs, 1 ); #endif MPN_COPY( bp, ap, a->nlimbs ); a->d = bp; #ifdef M_DEBUG mpi_debug_free_limb_space(ap, "set_secure"); #else mpi_free_limb_space(ap); #endif } MPI mpi_set_opaque( MPI a, void *p, unsigned int len ) { if( !a ) { #ifdef M_DEBUG a = mpi_debug_alloc(0,"alloc_opaque"); #else a = mpi_alloc(0); #endif } if( a->flags & 4 ) xfree( a->d ); else { #ifdef M_DEBUG mpi_debug_free_limb_space(a->d, "alloc_opaque"); #else mpi_free_limb_space(a->d); #endif } a->d = p; a->alloced = 0; a->nlimbs = 0; a->nbits = len; a->flags = 4; return a; } void * mpi_get_opaque( MPI a, unsigned int *len ) { if( !(a->flags & 4) ) log_bug("mpi_get_opaque on normal mpi\n"); if( len ) *len = a->nbits; return a->d; } /**************** * Note: This copy function should not interpret the MPI * but copy it transparently. */ MPI #ifdef M_DEBUG mpi_debug_copy( MPI a, const char *info ) #else mpi_copy( MPI a ) #endif { int i; MPI b; if( a && (a->flags & 4) ) { void *p = m_is_secure(a->d)? xmalloc_secure( a->nbits ) : xmalloc( a->nbits ); memcpy( p, a->d, a->nbits ); b = mpi_set_opaque( NULL, p, a->nbits ); } else if( a ) { #ifdef M_DEBUG b = mpi_is_secure(a)? mpi_debug_alloc_secure( a->nlimbs, info ) : mpi_debug_alloc( a->nlimbs, info ); #else b = mpi_is_secure(a)? mpi_alloc_secure( a->nlimbs ) : mpi_alloc( a->nlimbs ); #endif b->nlimbs = a->nlimbs; b->sign = a->sign; b->flags = a->flags; b->nbits = a->nbits; for(i=0; i < b->nlimbs; i++ ) b->d[i] = a->d[i]; } else b = NULL; return b; } /**************** * This function allocates an MPI which is optimized to hold * a value as large as the one given in the argument and allocates it * with the same flags as A. */ MPI #ifdef M_DEBUG mpi_debug_alloc_like( MPI a, const char *info ) #else mpi_alloc_like( MPI a ) #endif { MPI b; if( a && (a->flags & 4) ) { void *p = m_is_secure(a->d)? xmalloc_secure( a->nbits ) : xmalloc( a->nbits ); memcpy( p, a->d, a->nbits ); b = mpi_set_opaque( NULL, p, a->nbits ); } else if( a ) { #ifdef M_DEBUG b = mpi_is_secure(a)? mpi_debug_alloc_secure( a->nlimbs, info ) : mpi_debug_alloc( a->nlimbs, info ); #else b = mpi_is_secure(a)? mpi_alloc_secure( a->nlimbs ) : mpi_alloc( a->nlimbs ); #endif b->nlimbs = 0; b->sign = 0; b->flags = a->flags; b->nbits = 0; } else b = NULL; return b; } void mpi_set( MPI w, MPI u) { mpi_ptr_t wp, up; mpi_size_t usize = u->nlimbs; int usign = u->sign; RESIZE_IF_NEEDED(w, usize); wp = w->d; up = u->d; MPN_COPY( wp, up, usize ); w->nlimbs = usize; w->nbits = u->nbits; w->flags = u->flags; w->sign = usign; } void mpi_set_cond( MPI w, MPI u, unsigned long set) { mpi_size_t i; mpi_size_t nlimbs = u->alloced; mpi_limb_t mask = ((mpi_limb_t)0) - !!set; mpi_limb_t x; if (w->alloced != u->alloced) log_bug ("mpi_set_cond: different sizes\n"); for (i = 0; i < nlimbs; i++) { x = mask & (w->d[i] ^ u->d[i]); w->d[i] = w->d[i] ^ x; } x = mask & (w->nlimbs ^ u->nlimbs); w->nlimbs = w->nlimbs ^ x; x = mask & (w->nbits ^ u->nbits); w->nbits = w->nbits ^ x; x = mask & (w->sign ^ u->sign); w->sign = w->sign ^ x; } void mpi_set_ui( MPI w, unsigned long u) { RESIZE_IF_NEEDED(w, 1); w->d[0] = u; w->nlimbs = u? 1:0; w->sign = 0; w->nbits = 0; w->flags = 0; } MPI mpi_alloc_set_ui( unsigned long u) { #ifdef M_DEBUG MPI w = mpi_debug_alloc(1,"alloc_set_ui"); #else MPI w = mpi_alloc(1); #endif w->d[0] = u; w->nlimbs = u? 1:0; w->sign = 0; return w; } void mpi_swap( MPI a, MPI b) { struct gcry_mpi tmp; tmp = *a; *a = *b; *b = tmp; } int mpi_get_nlimbs (MPI a) { return a->nlimbs; } int mpi_is_neg (MPI a) { return a->sign; } /* Return the number of limbs to store an MPI which is specified by the number of bytes to represent it. */ unsigned int mpi_nlimb_hint_from_nbytes (unsigned int nbytes) { return (nbytes+BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB; } /* Return the number of limbs to store an MPI which is specified by the number of bytes to represent it. */ unsigned int mpi_nlimb_hint_from_nbits (unsigned int nbits) { return (nbits+BITS_PER_MPI_LIMB-1) / BITS_PER_MPI_LIMB; } unsigned int mpi_get_flags (MPI a) { return a->flags; } gnupg-1.4.20/mpi/generic/0000755000175000017500000000000012635457223012131 500000000000000gnupg-1.4.20/mpi/generic/mpi-asm-defs.h0000644000175000017500000000033012635262326014476 00000000000000/* This file defines some basic constants for the MPI machinery. We * need to define the types on a per-CPU basis, so it is done with * this file here. */ #define BYTES_PER_MPI_LIMB (SIZEOF_UNSIGNED_LONG) gnupg-1.4.20/mpi/generic/udiv-w-sdiv.c0000644000175000017500000000550012635262326014371 00000000000000/* mpihelp_udiv_w_sdiv -- implement udiv_qrnnd on machines with only signed * division. * Copyright (C) 1992, 1994, 1996, 1998 Free Software Foundation, Inc. * Contributed by Peter L. Montgomery. * * 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 3 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, see . */ #include #include #include #include "mpi-internal.h" #include "longlong.h" #if 0 /* not yet ported to MPI */ mpi_limb_t mpihelp_udiv_w_sdiv( mpi_limp_t *rp, mpi_limp_t *a1, mpi_limp_t *a0, mpi_limp_t *d ) { mp_limb_t q, r; mp_limb_t c0, c1, b1; if ((mpi_limb_signed_t) d >= 0) { if (a1 < d - a1 - (a0 >> (BITS_PER_MP_LIMB - 1))) { /* dividend, divisor, and quotient are nonnegative */ sdiv_qrnnd (q, r, a1, a0, d); } else { /* Compute c1*2^32 + c0 = a1*2^32 + a0 - 2^31*d */ sub_ddmmss (c1, c0, a1, a0, d >> 1, d << (BITS_PER_MP_LIMB - 1)); /* Divide (c1*2^32 + c0) by d */ sdiv_qrnnd (q, r, c1, c0, d); /* Add 2^31 to quotient */ q += (mp_limb_t) 1 << (BITS_PER_MP_LIMB - 1); } } else { b1 = d >> 1; /* d/2, between 2^30 and 2^31 - 1 */ c1 = a1 >> 1; /* A/2 */ c0 = (a1 << (BITS_PER_MP_LIMB - 1)) + (a0 >> 1); if (a1 < b1) /* A < 2^32*b1, so A/2 < 2^31*b1 */ { sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ r = 2*r + (a0 & 1); /* Remainder from A/(2*b1) */ if ((d & 1) != 0) { if (r >= q) r = r - q; else if (q - r <= d) { r = r - q + d; q--; } else { r = r - q + 2*d; q -= 2; } } } else if (c1 < b1) /* So 2^31 <= (A/2)/b1 < 2^32 */ { c1 = (b1 - 1) - c1; c0 = ~c0; /* logical NOT */ sdiv_qrnnd (q, r, c1, c0, b1); /* (A/2) / (d/2) */ q = ~q; /* (A/2)/b1 */ r = (b1 - 1) - r; r = 2*r + (a0 & 1); /* A/(2*b1) */ if ((d & 1) != 0) { if (r >= q) r = r - q; else if (q - r <= d) { r = r - q + d; q--; } else { r = r - q + 2*d; q -= 2; } } } else /* Implies c1 = b1 */ { /* Hence a1 = d - 1 = 2*b1 - 1 */ if (a0 >= -d) { q = -1; r = a0 + d; } else { q = -2; r = a0 + 2*d; } } } *rp = r; return q; } #endif gnupg-1.4.20/mpi/generic/mpih-mul2.c0000644000175000017500000000372012635262326014027 00000000000000/* mpihelp-mul_2.c - MPI helper functions * Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" #include "longlong.h" mpi_limb_t mpihelp_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb) { mpi_limb_t cy_limb; mpi_size_t j; mpi_limb_t prod_high, prod_low; mpi_limb_t x; /* The loop counter and index J goes from -SIZE to -1. This way * the loop becomes faster. */ j = -s1_size; res_ptr -= j; s1_ptr -= j; cy_limb = 0; do { umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb ); prod_low += cy_limb; cy_limb = (prod_low < cy_limb?1:0) + prod_high; x = res_ptr[j]; prod_low = x + prod_low; cy_limb += prod_low < x?1:0; res_ptr[j] = prod_low; } while ( ++j ); return cy_limb; } gnupg-1.4.20/mpi/generic/mpih-mul1.c0000644000175000017500000000370412635262326014030 00000000000000/* mpihelp-mul_1.c - MPI helper functions * Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" #include "longlong.h" mpi_limb_t mpihelp_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb) { mpi_limb_t cy_limb; mpi_size_t j; mpi_limb_t prod_high, prod_low; /* The loop counter and index J goes from -S1_SIZE to -1. This way * the loop becomes faster. */ j = -s1_size; /* Offset the base pointers to compensate for the negative indices. */ s1_ptr -= j; res_ptr -= j; cy_limb = 0; do { umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb ); prod_low += cy_limb; cy_limb = (prod_low < cy_limb?1:0) + prod_high; res_ptr[j] = prod_low; } while( ++j ); return cy_limb; } gnupg-1.4.20/mpi/generic/mpih-mul3.c0000644000175000017500000000371712635262326014036 00000000000000/* mpihelp-mul_3.c - MPI helper functions * Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" #include "longlong.h" mpi_limb_t mpihelp_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb) { mpi_limb_t cy_limb; mpi_size_t j; mpi_limb_t prod_high, prod_low; mpi_limb_t x; /* The loop counter and index J goes from -SIZE to -1. This way * the loop becomes faster. */ j = -s1_size; res_ptr -= j; s1_ptr -= j; cy_limb = 0; do { umul_ppmm( prod_high, prod_low, s1_ptr[j], s2_limb); prod_low += cy_limb; cy_limb = (prod_low < cy_limb?1:0) + prod_high; x = res_ptr[j]; prod_low = x - prod_low; cy_limb += prod_low > x?1:0; res_ptr[j] = prod_low; } while( ++j ); return cy_limb; } gnupg-1.4.20/mpi/generic/mpih-sub1.c0000644000175000017500000000400412635262326014016 00000000000000/* mpihelp-add_2.c - MPI helper functions * Copyright (C) 1994, 1996, 1997, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" #include "longlong.h" mpi_limb_t mpihelp_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_ptr_t s2_ptr, mpi_size_t size) { mpi_limb_t x, y, cy; mpi_size_t j; /* The loop counter and index J goes from -SIZE to -1. This way the loop becomes faster. */ j = -size; /* Offset the base pointers to compensate for the negative indices. */ s1_ptr -= j; s2_ptr -= j; res_ptr -= j; cy = 0; do { y = s2_ptr[j]; x = s1_ptr[j]; y += cy; /* add previous carry to subtrahend */ cy = y < cy; /* get out carry from that addition */ y = x - y; /* main subtract */ cy += y > x; /* get out carry from the subtract, combine */ res_ptr[j] = y; } while( ++j ); return cy; } gnupg-1.4.20/mpi/generic/mpih-rshift.c0000644000175000017500000000421312635262326014445 00000000000000/* mpih-rshift.c - MPI helper functions * Copyright (C) 1994, 1996, 1998, 1999, * 2000, 2001 Free Software Foundation, Inc. * * This file is part of GNUPG * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" /* Shift U (pointed to by UP and USIZE limbs long) CNT bits to the right * and store the USIZE least significant limbs of the result at WP. * The bits shifted out to the right are returned. * * Argument constraints: * 1. 0 < CNT < BITS_PER_MP_LIMB * 2. If the result is to be written over the input, WP must be <= UP. */ mpi_limb_t mpihelp_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt) { mpi_limb_t high_limb, low_limb; unsigned sh_1, sh_2; mpi_size_t i; mpi_limb_t retval; sh_1 = cnt; wp -= 1; sh_2 = BITS_PER_MPI_LIMB - sh_1; high_limb = up[0]; retval = high_limb << sh_2; low_limb = high_limb; for( i=1; i < usize; i++) { high_limb = up[i]; wp[i] = (low_limb >> sh_1) | (high_limb << sh_2); low_limb = high_limb; } wp[i] = low_limb >> sh_1; return retval; } gnupg-1.4.20/mpi/generic/mpih-lshift.c0000644000175000017500000000422512635262326014442 00000000000000/* mpihelp-lshift.c - MPI helper functions * Copyright (C) 1994, 1996, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" /* Shift U (pointed to by UP and USIZE digits long) CNT bits to the left * and store the USIZE least significant digits of the result at WP. * Return the bits shifted out from the most significant digit. * * Argument constraints: * 1. 0 < CNT < BITS_PER_MP_LIMB * 2. If the result is to be written over the input, WP must be >= UP. */ mpi_limb_t mpihelp_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned int cnt) { mpi_limb_t high_limb, low_limb; unsigned sh_1, sh_2; mpi_size_t i; mpi_limb_t retval; sh_1 = cnt; wp += 1; sh_2 = BITS_PER_MPI_LIMB - sh_1; i = usize - 1; low_limb = up[i]; retval = low_limb >> sh_2; high_limb = low_limb; while( --i >= 0 ) { low_limb = up[i]; wp[i] = (high_limb << sh_1) | (low_limb >> sh_2); high_limb = low_limb; } wp[i] = high_limb << sh_1; return retval; } gnupg-1.4.20/mpi/generic/mpih-add1.c0000644000175000017500000000402312635262326013756 00000000000000/* mpihelp-add_1.c - MPI helper functions * Copyright (C) 1994, 1996, 1997, 1998, * 2000 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 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" #include "longlong.h" mpi_limb_t mpihelp_add_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_ptr_t s2_ptr, mpi_size_t size) { mpi_limb_t x, y, cy; mpi_size_t j; /* The loop counter and index J goes from -SIZE to -1. This way the loop becomes faster. */ j = -size; /* Offset the base pointers to compensate for the negative indices. */ s1_ptr -= j; s2_ptr -= j; res_ptr -= j; cy = 0; do { y = s2_ptr[j]; x = s1_ptr[j]; y += cy; /* add previous carry to one addend */ cy = y < cy; /* get out carry from that addition */ y += x; /* add other addend */ cy += y < x; /* get out carry from that add, combine */ res_ptr[j] = y; } while( ++j ); return cy; } gnupg-1.4.20/mpi/generic/distfiles0000644000175000017500000000016612635262326013763 00000000000000mpih-add1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c mpih-lshift.c mpih-rshift.c mpih-sub1.c udiv-w-sdiv.c mpi-asm-defs.h gnupg-1.4.20/mpi/mpi-inv.c0000644000175000017500000001465312635262326012167 00000000000000/* mpi-inv.c - MPI functions * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include "mpi-internal.h" /**************** * Calculate the multiplicative inverse X of A mod N * That is: Find the solution x for * 1 = (a*x) mod n */ void mpi_invm( MPI x, MPI a, MPI n ) { #if 0 MPI u, v, u1, u2, u3, v1, v2, v3, q, t1, t2, t3; MPI ta, tb, tc; u = mpi_copy(a); v = mpi_copy(n); u1 = mpi_alloc_set_ui(1); u2 = mpi_alloc_set_ui(0); u3 = mpi_copy(u); v1 = mpi_alloc_set_ui(0); v2 = mpi_alloc_set_ui(1); v3 = mpi_copy(v); q = mpi_alloc( mpi_get_nlimbs(u)+1 ); t1 = mpi_alloc( mpi_get_nlimbs(u)+1 ); t2 = mpi_alloc( mpi_get_nlimbs(u)+1 ); t3 = mpi_alloc( mpi_get_nlimbs(u)+1 ); while( mpi_cmp_ui( v3, 0 ) ) { mpi_fdiv_q( q, u3, v3 ); mpi_mul(t1, v1, q); mpi_mul(t2, v2, q); mpi_mul(t3, v3, q); mpi_sub(t1, u1, t1); mpi_sub(t2, u2, t2); mpi_sub(t3, u3, t3); mpi_set(u1, v1); mpi_set(u2, v2); mpi_set(u3, v3); mpi_set(v1, t1); mpi_set(v2, t2); mpi_set(v3, t3); } /* log_debug("result:\n"); log_mpidump("q =", q ); log_mpidump("u1=", u1); log_mpidump("u2=", u2); log_mpidump("u3=", u3); log_mpidump("v1=", v1); log_mpidump("v2=", v2); */ mpi_set(x, u1); mpi_free(u1); mpi_free(u2); mpi_free(u3); mpi_free(v1); mpi_free(v2); mpi_free(v3); mpi_free(q); mpi_free(t1); mpi_free(t2); mpi_free(t3); mpi_free(u); mpi_free(v); #elif 0 /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X) * modified according to Michael Penk's solution for Exercice 35 */ /* FIXME: we can simplify this in most cases (see Knuth) */ MPI u, v, u1, u2, u3, v1, v2, v3, t1, t2, t3; unsigned k; int sign; u = mpi_copy(a); v = mpi_copy(n); for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) { mpi_rshift(u, u, 1); mpi_rshift(v, v, 1); } u1 = mpi_alloc_set_ui(1); u2 = mpi_alloc_set_ui(0); u3 = mpi_copy(u); v1 = mpi_copy(v); /* !-- used as const 1 */ v2 = mpi_alloc( mpi_get_nlimbs(u) ); mpi_sub( v2, u1, u ); v3 = mpi_copy(v); if( mpi_test_bit(u, 0) ) { /* u is odd */ t1 = mpi_alloc_set_ui(0); t2 = mpi_alloc_set_ui(1); t2->sign = 1; t3 = mpi_copy(v); t3->sign = !t3->sign; goto Y4; } else { t1 = mpi_alloc_set_ui(1); t2 = mpi_alloc_set_ui(0); t3 = mpi_copy(u); } do { do { if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */ mpi_add(t1, t1, v); mpi_sub(t2, t2, u); } mpi_rshift(t1, t1, 1); mpi_rshift(t2, t2, 1); mpi_rshift(t3, t3, 1); Y4: ; } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */ if( !t3->sign ) { mpi_set(u1, t1); mpi_set(u2, t2); mpi_set(u3, t3); } else { mpi_sub(v1, v, t1); sign = u->sign; u->sign = !u->sign; mpi_sub(v2, u, t2); u->sign = sign; sign = t3->sign; t3->sign = !t3->sign; mpi_set(v3, t3); t3->sign = sign; } mpi_sub(t1, u1, v1); mpi_sub(t2, u2, v2); mpi_sub(t3, u3, v3); if( t1->sign ) { mpi_add(t1, t1, v); mpi_sub(t2, t2, u); } } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */ /* mpi_lshift( u3, k ); */ mpi_set(x, u1); mpi_free(u1); mpi_free(u2); mpi_free(u3); mpi_free(v1); mpi_free(v2); mpi_free(v3); mpi_free(t1); mpi_free(t2); mpi_free(t3); #else /* Extended Euclid's algorithm (See TAOPC Vol II, 4.5.2, Alg X) * modified according to Michael Penk's solution for Exercice 35 * with further enhancement */ MPI u, v, u1, u2=NULL, u3, v1, v2=NULL, v3, t1, t2=NULL, t3; unsigned k; int sign; int odd ; if (!mpi_cmp_ui (a, 0)) return; /* Inverse does not exists. */ if (!mpi_cmp_ui (n, 1)) return; /* Inverse does not exists. */ u = mpi_copy(a); v = mpi_copy(n); for(k=0; !mpi_test_bit(u,0) && !mpi_test_bit(v,0); k++ ) { mpi_rshift(u, u, 1); mpi_rshift(v, v, 1); } odd = mpi_test_bit(v,0); u1 = mpi_alloc_set_ui(1); if( !odd ) u2 = mpi_alloc_set_ui(0); u3 = mpi_copy(u); v1 = mpi_copy(v); if( !odd ) { v2 = mpi_alloc( mpi_get_nlimbs(u) ); mpi_sub( v2, u1, u ); /* U is used as const 1 */ } v3 = mpi_copy(v); if( mpi_test_bit(u, 0) ) { /* u is odd */ t1 = mpi_alloc_set_ui(0); if( !odd ) { t2 = mpi_alloc_set_ui(1); t2->sign = 1; } t3 = mpi_copy(v); t3->sign = !t3->sign; goto Y4; } else { t1 = mpi_alloc_set_ui(1); if( !odd ) t2 = mpi_alloc_set_ui(0); t3 = mpi_copy(u); } do { do { if( !odd ) { if( mpi_test_bit(t1, 0) || mpi_test_bit(t2, 0) ) { /* one is odd */ mpi_add(t1, t1, v); mpi_sub(t2, t2, u); } mpi_rshift(t1, t1, 1); mpi_rshift(t2, t2, 1); mpi_rshift(t3, t3, 1); } else { if( mpi_test_bit(t1, 0) ) mpi_add(t1, t1, v); mpi_rshift(t1, t1, 1); mpi_rshift(t3, t3, 1); } Y4: ; } while( !mpi_test_bit( t3, 0 ) ); /* while t3 is even */ if( !t3->sign ) { mpi_set(u1, t1); if( !odd ) mpi_set(u2, t2); mpi_set(u3, t3); } else { mpi_sub(v1, v, t1); sign = u->sign; u->sign = !u->sign; if( !odd ) mpi_sub(v2, u, t2); u->sign = sign; sign = t3->sign; t3->sign = !t3->sign; mpi_set(v3, t3); t3->sign = sign; } mpi_sub(t1, u1, v1); if( !odd ) mpi_sub(t2, u2, v2); mpi_sub(t3, u3, v3); if( t1->sign ) { mpi_add(t1, t1, v); if( !odd ) mpi_sub(t2, t2, u); } } while( mpi_cmp_ui( t3, 0 ) ); /* while t3 != 0 */ /* mpi_lshift( u3, k ); */ mpi_set(x, u1); mpi_free(u1); mpi_free(v1); mpi_free(t1); if( !odd ) { mpi_free(u2); mpi_free(v2); mpi_free(t2); } mpi_free(u3); mpi_free(v3); mpi_free(t3); mpi_free(u); mpi_free(v); #endif } gnupg-1.4.20/mpi/mpicoder.c0000644000175000017500000002615212635262326012407 00000000000000/* mpicoder.c - Coder for the external representation of MPIs * Copyright (C) 1998, 1999, 2005 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 3 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, see . */ #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 ); xfree(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 int nmax = *ret_nread; unsigned nbits, nbytes, nlimbs, nread=0; mpi_limb_t a; MPI val = NULL; if (nread == nmax) goto overflow; if( (c = iobuf_get(inp)) == -1 ) goto leave; nread++; nbits = c << 8; if (nread == nmax) goto overflow; if( (c = iobuf_get(inp)) == -1 ) goto leave; nread++; nbits |= c; if( nbits > MAX_EXTERN_MPI_BITS ) { log_error("mpi too large for this implementation (%u bits)\n", nbits); goto leave; } 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++ ) { if (nread == nmax) { #ifdef M_DEBUG mpi_debug_free (val); #else mpi_free (val); #endif val = NULL; goto overflow; } a <<= 8; a |= iobuf_get(inp) & 0xff; nread++; } i = 0; val->d[j-1] = a; } leave: *ret_nread = nread; return val; overflow: log_error ("mpi larger than indicated length (%u bytes)\n", nmax); *ret_nread = nread; return val; } MPI mpi_read_from_buffer(byte *buffer, unsigned int *ret_nread, int secure) { int i, j; unsigned nbits, nbytes, nlimbs, nread=0; mpi_limb_t a; MPI val = NULL; if( *ret_nread < 2 ) goto leave; nbits = buffer[0] << 8 | buffer[1]; if( nbits > MAX_EXTERN_MPI_BITS ) { log_info ("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 ) { /* This (as well as the above error condition) may happen if we use this function to parse a decrypted MPI which didn't turn out to be a real MPI - possible because the supplied key was wrong but the OpenPGP checksum didn't caught it. */ log_info ("mpi larger than buffer\n"); mpi_free (val); val = NULL; goto leave; } 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 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' ) ; 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 == NULL ) return fprintf(fp, "[MPI_NULL]"); if( !mode ) { unsigned int n1; n1 = mpi_get_nbits(a); 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 xmalloced 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; unsigned int n; if( sign ) *sign = a->sign; *nbytes = n = a->nlimbs * BYTES_PER_MPI_LIMB; if (!n) n++; /* avoid zero length allocation */ p = buffer = force_secure || mpi_is_secure(a) ? xmalloc_secure(n) : xmalloc(n); 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 operation * 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 = (mpi_limb_t)*p-- ; alimb |= (mpi_limb_t)*p-- << 8 ; alimb |= (mpi_limb_t)*p-- << 16 ; alimb |= (mpi_limb_t)*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 |= (mpi_limb_t)*p-- << 8 ; if( p >= buffer ) alimb |= (mpi_limb_t)*p-- << 16 ; if( p >= buffer ) alimb |= (mpi_limb_t)*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 ); } gnupg-1.4.20/mpi/mpi-add.c0000644000175000017500000001317212635262326012116 00000000000000/* mpi-add.c - MPI functions * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * Copyright (C) 1994, 1996 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 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" /**************** * Add the unsigned integer V to the mpi-integer U and store the * result in W. U and V may be the same. */ void mpi_add_ui(MPI w, MPI u, unsigned long v ) { mpi_ptr_t wp, up; mpi_size_t usize, wsize; int usign, wsign; usize = u->nlimbs; usign = u->sign; wsign = 0; /* If not space for W (and possible carry), increase space. */ wsize = usize + 1; if( w->alloced < wsize ) mpi_resize(w, wsize); /* These must be after realloc (U may be the same as W). */ up = u->d; wp = w->d; if( !usize ) { /* simple */ wp[0] = v; wsize = v? 1:0; } else if( !usign ) { /* mpi is not negative */ mpi_limb_t cy; cy = mpihelp_add_1(wp, up, usize, v); wp[usize] = cy; wsize = usize + cy; } else { /* The signs are different. Need exact comparison to determine * which operand to subtract from which. */ if( usize == 1 && up[0] < v ) { wp[0] = v - up[0]; wsize = 1; } else { mpihelp_sub_1(wp, up, usize, v); /* Size can decrease with at most one limb. */ wsize = usize - (wp[usize-1]==0); wsign = 1; } } w->nlimbs = wsize; w->sign = wsign; } void mpi_add(MPI w, MPI u, MPI v) { mpi_ptr_t wp, up, vp; mpi_size_t usize, vsize, wsize; int usign, vsign, wsign; if( u->nlimbs < v->nlimbs ) { /* Swap U and V. */ usize = v->nlimbs; usign = v->sign; vsize = u->nlimbs; vsign = u->sign; wsize = usize + 1; RESIZE_IF_NEEDED(w, wsize); /* These must be after realloc (u or v may be the same as w). */ up = v->d; vp = u->d; } else { usize = u->nlimbs; usign = u->sign; vsize = v->nlimbs; vsign = v->sign; wsize = usize + 1; RESIZE_IF_NEEDED(w, wsize); /* These must be after realloc (u or v may be the same as w). */ up = u->d; vp = v->d; } wp = w->d; wsign = 0; if( !vsize ) { /* simple */ MPN_COPY(wp, up, usize ); wsize = usize; wsign = usign; } else if( usign != vsign ) { /* different sign */ /* This test is right since USIZE >= VSIZE */ if( usize != vsize ) { mpihelp_sub(wp, up, usize, vp, vsize); wsize = usize; MPN_NORMALIZE(wp, wsize); wsign = usign; } else if( mpihelp_cmp(up, vp, usize) < 0 ) { mpihelp_sub_n(wp, vp, up, usize); wsize = usize; MPN_NORMALIZE(wp, wsize); if( !usign ) wsign = 1; } else { mpihelp_sub_n(wp, up, vp, usize); wsize = usize; MPN_NORMALIZE(wp, wsize); if( usign ) wsign = 1; } } else { /* U and V have same sign. Add them. */ mpi_limb_t cy = mpihelp_add(wp, up, usize, vp, vsize); wp[usize] = cy; wsize = usize + cy; if( usign ) wsign = 1; } w->nlimbs = wsize; w->sign = wsign; } /**************** * Subtract the unsigned integer V from the mpi-integer U and store the * result in W. */ void mpi_sub_ui(MPI w, MPI u, unsigned long v ) { mpi_ptr_t wp, up; mpi_size_t usize, wsize; int usign, wsign; usize = u->nlimbs; usign = u->sign; wsign = 0; /* If not space for W (and possible carry), increase space. */ wsize = usize + 1; if( w->alloced < wsize ) mpi_resize(w, wsize); /* These must be after realloc (U may be the same as W). */ up = u->d; wp = w->d; if( !usize ) { /* simple */ wp[0] = v; wsize = v? 1:0; wsign = 1; } else if( usign ) { /* mpi and v are negative */ mpi_limb_t cy; cy = mpihelp_add_1(wp, up, usize, v); wp[usize] = cy; wsize = usize + cy; } else { /* The signs are different. Need exact comparison to determine * which operand to subtract from which. */ if( usize == 1 && up[0] < v ) { wp[0] = v - up[0]; wsize = 1; wsign = 1; } else { mpihelp_sub_1(wp, up, usize, v); /* Size can decrease with at most one limb. */ wsize = usize - (wp[usize-1]==0); } } w->nlimbs = wsize; w->sign = wsign; } void mpi_sub(MPI w, MPI u, MPI v) { if( w == v ) { MPI vv = mpi_copy(v); vv->sign = !vv->sign; mpi_add( w, u, vv ); mpi_free(vv); } else { /* fixme: this is not thread-save (we temp. modify v) */ v->sign = !v->sign; mpi_add( w, u, v ); v->sign = !v->sign; } } void mpi_addm( MPI w, MPI u, MPI v, MPI m) { mpi_add(w, u, v); mpi_fdiv_r( w, w, m ); } void mpi_subm( MPI w, MPI u, MPI v, MPI m) { mpi_sub(w, u, v); mpi_fdiv_r( w, w, m ); } gnupg-1.4.20/mpi/mpi-inline.c0000644000175000017500000000220612635262326012640 00000000000000/* mpi-inline.c * Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include /* put the inline functions as real functions into the lib */ #define G10_MPI_INLINE_DECL #include "mpi-internal.h" /* always include the header becuase it is only * included by mpi-internal if __GCC__ is defined but we * need it here in all cases and the above definition of * of the macro allows us to do so */ #include "mpi-inline.h" gnupg-1.4.20/mpi/i386/0000755000175000017500000000000012635457223011206 500000000000000gnupg-1.4.20/mpi/i386/mpih-mul2.S0000644000175000017500000000502612635262326013065 00000000000000/* i80386 addmul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_addmul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ #define res_ptr edi #define s1_ptr esi #define size ecx #define s2_limb ebp TEXT ALIGN (3) GLOBL C_SYMBOL_NAME(mpihelp_addmul_1) C_SYMBOL_NAME(mpihelp_addmul_1:) INSN1(push,l ,R(edi)) INSN1(push,l ,R(esi)) INSN1(push,l ,R(ebx)) INSN1(push,l ,R(ebp)) INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20)) INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24)) INSN2(mov,l ,R(size),MEM_DISP(esp,28)) INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32)) INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4)) INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4)) INSN1(neg,l ,R(size)) INSN2(xor,l ,R(ebx),R(ebx)) ALIGN (3) Loop: INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4)) INSN1(mul,l ,R(s2_limb)) INSN2(add,l ,R(eax),R(ebx)) INSN2(adc,l ,R(edx),$0) INSN2(add,l ,MEM_INDEX(res_ptr,size,4),R(eax)) INSN2(adc,l ,R(edx),$0) INSN2(mov,l ,R(ebx),R(edx)) INSN1(inc,l ,R(size)) INSN1(jnz, ,Loop) INSN2(mov,l ,R(eax),R(ebx)) INSN1(pop,l ,R(ebp)) INSN1(pop,l ,R(ebx)) INSN1(pop,l ,R(esi)) INSN1(pop,l ,R(edi)) ret gnupg-1.4.20/mpi/i386/mpih-mul3.S0000644000175000017500000000502712635262326013067 00000000000000/* i80386 submul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_submul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ #define res_ptr edi #define s1_ptr esi #define size ecx #define s2_limb ebp TEXT ALIGN (3) GLOBL C_SYMBOL_NAME(mpihelp_submul_1) C_SYMBOL_NAME(mpihelp_submul_1:) INSN1(push,l ,R(edi)) INSN1(push,l ,R(esi)) INSN1(push,l ,R(ebx)) INSN1(push,l ,R(ebp)) INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20)) INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24)) INSN2(mov,l ,R(size),MEM_DISP(esp,28)) INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32)) INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4)) INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4)) INSN1(neg,l ,R(size)) INSN2(xor,l ,R(ebx),R(ebx)) ALIGN (3) Loop: INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4)) INSN1(mul,l ,R(s2_limb)) INSN2(add,l ,R(eax),R(ebx)) INSN2(adc,l ,R(edx),$0) INSN2(sub,l ,MEM_INDEX(res_ptr,size,4),R(eax)) INSN2(adc,l ,R(edx),$0) INSN2(mov,l ,R(ebx),R(edx)) INSN1(inc,l ,R(size)) INSN1(jnz, ,Loop) INSN2(mov,l ,R(eax),R(ebx)) INSN1(pop,l ,R(ebp)) INSN1(pop,l ,R(ebx)) INSN1(pop,l ,R(esi)) INSN1(pop,l ,R(edi)) ret gnupg-1.4.20/mpi/i386/syntax.h0000644000175000017500000000450712635262326012631 00000000000000/* syntax.h -- Definitions for x86 syntax variations. * * Copyright (C) 1992, 1994, 1995, 1998, * 2001 Free Software Foundation, Inc. * * 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 3 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, see . * * 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. */ #undef ALIGN #if defined (BSD_SYNTAX) || defined (ELF_SYNTAX) #define R(r) %r #define MEM(base)(base) #define MEM_DISP(base,displacement)displacement(R(base)) #define MEM_INDEX(base,index,size)(R(base),R(index),size) #ifdef __STDC__ #define INSN1(mnemonic,size_suffix,dst)mnemonic##size_suffix dst #define INSN2(mnemonic,size_suffix,dst,src)mnemonic##size_suffix src,dst #else #define INSN1(mnemonic,size_suffix,dst)mnemonic/**/size_suffix dst #define INSN2(mnemonic,size_suffix,dst,src)mnemonic/**/size_suffix src,dst #endif #define TEXT .text #if defined (BSD_SYNTAX) #define ALIGN(log) .align log #endif #if defined (ELF_SYNTAX) #define ALIGN(log) .align 1<. * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_rshift( mpi_ptr_t wp, (sp + 4) * mpi_ptr_t up, (sp + 8) * mpi_size_t usize, (sp + 12) * unsigned cnt) (sp + 16) */ .text ALIGN (3) .globl C_SYMBOL_NAME(mpihelp_rshift) C_SYMBOL_NAME(mpihelp_rshift:) pushl %edi pushl %esi pushl %ebx movl 16(%esp),%edi /* wp */ movl 20(%esp),%esi /* up */ movl 24(%esp),%edx /* usize */ movl 28(%esp),%ecx /* cnt */ leal -4(%edi,%edx,4),%edi leal (%esi,%edx,4),%esi negl %edx movl (%esi,%edx,4),%ebx /* read least significant limb */ xorl %eax,%eax shrdl %ebx,%eax /* compute carry limb */ incl %edx jz Lend2 pushl %eax /* push carry limb onto stack */ testb $1,%dl jnz L2 /* enter loop in the middle */ movl %ebx,%eax ALIGN (3) Loop2: movl (%esi,%edx,4),%ebx /* load next higher limb */ shrdl %ebx,%eax /* compute result limb */ movl %eax,(%edi,%edx,4) /* store it */ incl %edx L2: movl (%esi,%edx,4),%eax shrdl %eax,%ebx movl %ebx,(%edi,%edx,4) incl %edx jnz Loop2 shrl %cl,%eax /* compute most significant limb */ movl %eax,(%edi) /* store it */ popl %eax /* pop carry limb */ popl %ebx popl %esi popl %edi ret Lend2: shrl %cl,%ebx /* compute most significant limb */ movl %ebx,(%edi) /* store it */ popl %ebx popl %esi popl %edi ret gnupg-1.4.20/mpi/i386/mpih-add1.S0000644000175000017500000000626512635262326013025 00000000000000/* i80386 add_n -- Add two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, * 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_add_n( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_ptr_t s2_ptr, (sp + 12) * mpi_size_t size) (sp + 16) */ .text ALIGN (3) .globl C_SYMBOL_NAME(mpihelp_add_n) C_SYMBOL_NAME(mpihelp_add_n:) pushl %edi pushl %esi movl 12(%esp),%edi /* res_ptr */ movl 16(%esp),%esi /* s1_ptr */ movl 20(%esp),%edx /* s2_ptr */ movl 24(%esp),%ecx /* size */ movl %ecx,%eax shrl $3,%ecx /* compute count for unrolled loop */ negl %eax andl $7,%eax /* get index where to start loop */ jz Loop /* necessary special case for 0 */ incl %ecx /* adjust loop count */ shll $2,%eax /* adjustment for pointers... */ subl %eax,%edi /* ... since they are offset ... */ subl %eax,%esi /* ... by a constant when we ... */ subl %eax,%edx /* ... enter the loop */ shrl $2,%eax /* restore previous value */ #ifdef PIC /* Calculate start address in loop for PIC. Due to limitations in some assemblers, Loop-L0-3 cannot be put into the leal */ call L0 L0: leal (%eax,%eax,8),%eax addl (%esp),%eax addl $(Loop-L0-3),%eax addl $4,%esp #else /* Calculate start address in loop for non-PIC. */ leal Loop-3(%eax,%eax,8),%eax #endif jmp *%eax /* jump into loop */ ALIGN (3) Loop: movl (%esi),%eax adcl (%edx),%eax movl %eax,(%edi) movl 4(%esi),%eax adcl 4(%edx),%eax movl %eax,4(%edi) movl 8(%esi),%eax adcl 8(%edx),%eax movl %eax,8(%edi) movl 12(%esi),%eax adcl 12(%edx),%eax movl %eax,12(%edi) movl 16(%esi),%eax adcl 16(%edx),%eax movl %eax,16(%edi) movl 20(%esi),%eax adcl 20(%edx),%eax movl %eax,20(%edi) movl 24(%esi),%eax adcl 24(%edx),%eax movl %eax,24(%edi) movl 28(%esi),%eax adcl 28(%edx),%eax movl %eax,28(%edi) leal 32(%edi),%edi leal 32(%esi),%esi leal 32(%edx),%edx decl %ecx jnz Loop sbbl %eax,%eax negl %eax popl %esi popl %edi ret gnupg-1.4.20/mpi/i386/mpih-mul1.S0000644000175000017500000000472212635262326013066 00000000000000/* i80386 mul_1 -- Multiply a limb vector with a limb and store * the result in a second limb vector. * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_mul_1( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_size_t s1_size, (sp + 12) * mpi_limb_t s2_limb) (sp + 16) */ #define res_ptr edi #define s1_ptr esi #define size ecx #define s2_limb ebp TEXT ALIGN (3) GLOBL C_SYMBOL_NAME(mpihelp_mul_1) C_SYMBOL_NAME(mpihelp_mul_1:) INSN1(push,l ,R(edi)) INSN1(push,l ,R(esi)) INSN1(push,l ,R(ebx)) INSN1(push,l ,R(ebp)) INSN2(mov,l ,R(res_ptr),MEM_DISP(esp,20)) INSN2(mov,l ,R(s1_ptr),MEM_DISP(esp,24)) INSN2(mov,l ,R(size),MEM_DISP(esp,28)) INSN2(mov,l ,R(s2_limb),MEM_DISP(esp,32)) INSN2(lea,l ,R(res_ptr),MEM_INDEX(res_ptr,size,4)) INSN2(lea,l ,R(s1_ptr),MEM_INDEX(s1_ptr,size,4)) INSN1(neg,l ,R(size)) INSN2(xor,l ,R(ebx),R(ebx)) ALIGN (3) Loop: INSN2(mov,l ,R(eax),MEM_INDEX(s1_ptr,size,4)) INSN1(mul,l ,R(s2_limb)) INSN2(add,l ,R(eax),R(ebx)) INSN2(mov,l ,MEM_INDEX(res_ptr,size,4),R(eax)) INSN2(adc,l ,R(edx),$0) INSN2(mov,l ,R(ebx),R(edx)) INSN1(inc,l ,R(size)) INSN1(jnz, ,Loop) INSN2(mov,l ,R(eax),R(ebx)) INSN1(pop,l ,R(ebp)) INSN1(pop,l ,R(ebx)) INSN1(pop,l ,R(esi)) INSN1(pop,l ,R(edi)) ret gnupg-1.4.20/mpi/i386/distfiles0000644000175000017500000000014212635262326013032 00000000000000mpih-add1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S mpih-lshift.S mpih-rshift.S mpih-sub1.S syntax.h gnupg-1.4.20/mpi/i386/mpih-lshift.S0000644000175000017500000000476012635262326013503 00000000000000/* i80386 lshift * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_lshift( mpi_ptr_t wp, (sp + 4) * mpi_ptr_t up, (sp + 8) * mpi_size_t usize, (sp + 12) * unsigned cnt) (sp + 16) */ .text ALIGN (3) .globl C_SYMBOL_NAME(mpihelp_lshift) C_SYMBOL_NAME(mpihelp_lshift:) pushl %edi pushl %esi pushl %ebx movl 16(%esp),%edi /* res_ptr */ movl 20(%esp),%esi /* s_ptr */ movl 24(%esp),%edx /* size */ movl 28(%esp),%ecx /* cnt */ subl $4,%esi /* adjust s_ptr */ movl (%esi,%edx,4),%ebx /* read most significant limb */ xorl %eax,%eax shldl %ebx,%eax /* compute carry limb */ decl %edx jz Lend pushl %eax /* push carry limb onto stack */ testb $1,%dl jnz L1 /* enter loop in the middle */ movl %ebx,%eax ALIGN (3) Loop: movl (%esi,%edx,4),%ebx /* load next lower limb */ shldl %ebx,%eax /* compute result limb */ movl %eax,(%edi,%edx,4) /* store it */ decl %edx L1: movl (%esi,%edx,4),%eax shldl %eax,%ebx movl %ebx,(%edi,%edx,4) decl %edx jnz Loop shll %cl,%eax /* compute least significant limb */ movl %eax,(%edi) /* store it */ popl %eax /* pop carry limb */ popl %ebx popl %esi popl %edi ret Lend: shll %cl,%ebx /* compute least significant limb */ movl %ebx,(%edi) /* store it */ popl %ebx popl %esi popl %edi ret gnupg-1.4.20/mpi/i386/mpih-sub1.S0000644000175000017500000000626612635262326013067 00000000000000/* i80386 sub_n -- Sub two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, * 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include "sysdep.h" #include "asm-syntax.h" /******************* * mpi_limb_t * mpihelp_sub_n( mpi_ptr_t res_ptr, (sp + 4) * mpi_ptr_t s1_ptr, (sp + 8) * mpi_ptr_t s2_ptr, (sp + 12) * mpi_size_t size) (sp + 16) */ .text ALIGN (3) .globl C_SYMBOL_NAME(mpihelp_sub_n) C_SYMBOL_NAME(mpihelp_sub_n:) pushl %edi pushl %esi movl 12(%esp),%edi /* res_ptr */ movl 16(%esp),%esi /* s1_ptr */ movl 20(%esp),%edx /* s2_ptr */ movl 24(%esp),%ecx /* size */ movl %ecx,%eax shrl $3,%ecx /* compute count for unrolled loop */ negl %eax andl $7,%eax /* get index where to start loop */ jz Loop /* necessary special case for 0 */ incl %ecx /* adjust loop count */ shll $2,%eax /* adjustment for pointers... */ subl %eax,%edi /* ... since they are offset ... */ subl %eax,%esi /* ... by a constant when we ... */ subl %eax,%edx /* ... enter the loop */ shrl $2,%eax /* restore previous value */ #ifdef PIC /* Calculate start address in loop for PIC. Due to limitations in some assemblers, Loop-L0-3 cannot be put into the leal */ call L0 L0: leal (%eax,%eax,8),%eax addl (%esp),%eax addl $(Loop-L0-3),%eax addl $4,%esp #else /* Calculate start address in loop for non-PIC. */ leal Loop-3(%eax,%eax,8),%eax #endif jmp *%eax /* jump into loop */ ALIGN (3) Loop: movl (%esi),%eax sbbl (%edx),%eax movl %eax,(%edi) movl 4(%esi),%eax sbbl 4(%edx),%eax movl %eax,4(%edi) movl 8(%esi),%eax sbbl 8(%edx),%eax movl %eax,8(%edi) movl 12(%esi),%eax sbbl 12(%edx),%eax movl %eax,12(%edi) movl 16(%esi),%eax sbbl 16(%edx),%eax movl %eax,16(%edi) movl 20(%esi),%eax sbbl 20(%edx),%eax movl %eax,20(%edi) movl 24(%esi),%eax sbbl 24(%edx),%eax movl %eax,24(%edi) movl 28(%esi),%eax sbbl 28(%edx),%eax movl %eax,28(%edi) leal 32(%edi),%edi leal 32(%esi),%esi leal 32(%edx),%edx decl %ecx jnz Loop sbbl %eax,%eax negl %eax popl %esi popl %edi ret gnupg-1.4.20/mpi/pa7100/0000755000175000017500000000000012635457223011425 500000000000000gnupg-1.4.20/mpi/pa7100/mpih-rshift.S0000644000175000017500000000414012635262326013720 00000000000000/* hppa rshift * optimized for the PA7100, where it runs at 3.25 cycles/limb * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_rshift( mpi_ptr_t wp, (gr26) * mpi_ptr_t up, (gr25) * mpi_size_t usize, (gr24) * unsigned cnt) (gr23) */ .code .export mpihelp_rshift .label mpihelp_rshift .proc .callinfo frame=64,no_calls .entry ldws,ma 4(0,%r25),%r22 mtsar %r23 addib,= -1,%r24,L$r004 vshd %r22,%r0,%r28 ; compute carry out limb ldws,ma 4(0,%r25),%r29 addib,<= -5,%r24,L$rrest vshd %r29,%r22,%r20 .label L$roop ldws,ma 4(0,%r25),%r22 stws,ma %r20,4(0,%r26) vshd %r22,%r29,%r20 ldws,ma 4(0,%r25),%r29 stws,ma %r20,4(0,%r26) vshd %r29,%r22,%r20 ldws,ma 4(0,%r25),%r22 stws,ma %r20,4(0,%r26) vshd %r22,%r29,%r20 ldws,ma 4(0,%r25),%r29 stws,ma %r20,4(0,%r26) addib,> -4,%r24,L$roop vshd %r29,%r22,%r20 .label L$rrest addib,= 4,%r24,L$rend1 nop .label L$eroop ldws,ma 4(0,%r25),%r22 stws,ma %r20,4(0,%r26) addib,<= -1,%r24,L$rend2 vshd %r22,%r29,%r20 ldws,ma 4(0,%r25),%r29 stws,ma %r20,4(0,%r26) addib,> -1,%r24,L$eroop vshd %r29,%r22,%r20 .label L$rend1 stws,ma %r20,4(0,%r26) vshd %r0,%r29,%r20 bv 0(%r2) stw %r20,0(0,%r26) .label L$rend2 stws,ma %r20,4(0,%r26) .label L$r004 vshd %r0,%r22,%r20 bv 0(%r2) stw %r20,0(0,%r26) .exit .procend gnupg-1.4.20/mpi/pa7100/distfiles0000644000175000017500000000003512635262326013252 00000000000000mpih-lshift.S mpih-rshift.S gnupg-1.4.20/mpi/pa7100/mpih-lshift.S0000644000175000017500000000423512635262326013717 00000000000000/* hppa lshift * optimized for the PA7100, where it runs at 3.25 cycles/limb * * Copyright (C) 1992, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_lshift( mpi_ptr_t wp, (gr26) * mpi_ptr_t up, (gr25) * mpi_size_t usize, (gr24) * unsigned cnt) (gr23) */ .code .export mpihelp_lshift .label mpihelp_lshift .proc .callinfo frame=64,no_calls .entry sh2add %r24,%r25,%r25 sh2add %r24,%r26,%r26 ldws,mb -4(0,%r25),%r22 subi 32,%r23,%r1 mtsar %r1 addib,= -1,%r24,L$0004 vshd %r0,%r22,%r28 ; compute carry out limb ldws,mb -4(0,%r25),%r29 addib,<= -5,%r24,L$rest vshd %r22,%r29,%r20 .label L$loop ldws,mb -4(0,%r25),%r22 stws,mb %r20,-4(0,%r26) vshd %r29,%r22,%r20 ldws,mb -4(0,%r25),%r29 stws,mb %r20,-4(0,%r26) vshd %r22,%r29,%r20 ldws,mb -4(0,%r25),%r22 stws,mb %r20,-4(0,%r26) vshd %r29,%r22,%r20 ldws,mb -4(0,%r25),%r29 stws,mb %r20,-4(0,%r26) addib,> -4,%r24,L$loop vshd %r22,%r29,%r20 .label L$rest addib,= 4,%r24,L$end1 nop .label L$eloop ldws,mb -4(0,%r25),%r22 stws,mb %r20,-4(0,%r26) addib,<= -1,%r24,L$end2 vshd %r29,%r22,%r20 ldws,mb -4(0,%r25),%r29 stws,mb %r20,-4(0,%r26) addib,> -1,%r24,L$eloop vshd %r22,%r29,%r20 .label L$end1 stws,mb %r20,-4(0,%r26) vshd %r29,%r0,%r20 bv 0(%r2) stw %r20,-4(0,%r26) .label L$end2 stws,mb %r20,-4(0,%r26) .label L$0004 vshd %r22,%r0,%r20 bv 0(%r2) stw %r20,-4(0,%r26) .exit .procend gnupg-1.4.20/mpi/mpi-scan.c0000644000175000017500000000662412635262326012316 00000000000000/* mpi-scan.c - MPI functions * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include "mpi-internal.h" #include "longlong.h" /**************** * Scan through an mpi and return byte for byte. a -1 is returned to indicate * the end of the mpi. Scanning is done from the lsb to the msb, returned * values are in the range of 0 .. 255. * * FIXME: This code is VERY ugly! */ #if 0 /* Code is not used */ int mpi_getbyte( MPI a, unsigned idx ) { int i, j; unsigned n; mpi_ptr_t ap; mpi_limb_t limb; ap = a->d; for(n=0,i=0; i < a->nlimbs; i++ ) { limb = ap[i]; for( j=0; j < BYTES_PER_MPI_LIMB; j++, n++ ) if( n == idx ) return (limb >> j*8) & 0xff; } return -1; } #endif /* Code is not used */ /**************** * Put a value at position IDX into A. idx counts from lsb to msb */ /* FIXME: There is a problem with the long constants which should have a LL prefix or better the macros we use at other places. */ #if 0 /* Code is not used */ void mpi_putbyte( MPI a, unsigned idx, int xc ) { int i, j; unsigned n; mpi_ptr_t ap; mpi_limb_t limb, c; c = xc & 0xff; ap = a->d; for(n=0,i=0; i < a->alloced; i++ ) { limb = ap[i]; for( j=0; j < BYTES_PER_MPI_LIMB; j++, n++ ) if( n == idx ) { #if BYTES_PER_MPI_LIMB == 4 if( j == 0 ) limb = (limb & 0xffffff00) | c; else if( j == 1 ) limb = (limb & 0xffff00ff) | (c<<8); else if( j == 2 ) limb = (limb & 0xff00ffff) | (c<<16); else limb = (limb & 0x00ffffff) | (c<<24); #elif BYTES_PER_MPI_LIMB == 8 if( j == 0 ) limb = (limb & 0xffffffffffffff00) | c; else if( j == 1 ) limb = (limb & 0xffffffffffff00ff) | (c<<8); else if( j == 2 ) limb = (limb & 0xffffffffff00ffff) | (c<<16); else if( j == 3 ) limb = (limb & 0xffffffff00ffffff) | (c<<24); else if( j == 4 ) limb = (limb & 0xffffff00ffffffff) | (c<<32); else if( j == 5 ) limb = (limb & 0xffff00ffffffffff) | (c<<40); else if( j == 6 ) limb = (limb & 0xff00ffffffffffff) | (c<<48); else limb = (limb & 0x00ffffffffffffff) | (c<<56); #else #error please enhance this function, its ugly - i know. #endif if( a->nlimbs <= i ) a->nlimbs = i+1; ap[i] = limb; return; } } abort(); /* index out of range */ } #endif /* Code is not used */ /**************** * Count the number of zerobits at the low end of A */ unsigned int mpi_trailing_zeros( MPI a ) { unsigned n, count = 0; for(n=0; n < a->nlimbs; n++ ) { if( a->d[n] ) { unsigned nn; mpi_limb_t alimb = a->d[n]; count_trailing_zeros( nn, alimb ); count += nn; break; } count += BITS_PER_MPI_LIMB; } return count; } gnupg-1.4.20/mpi/mpi-inline.h0000644000175000017500000000713412635262326012652 00000000000000/* mpi-inline.h - Internal to the Multi Precision Integers * Copyright (C) 1994, 1996, 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 3 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, see . * * 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_INLINE_H #define G10_MPI_INLINE_H /* Starting with gcc 4.3 "extern inline" conforms in c99 mode to the c99 semantics. To keep the useful old semantics we use an attribute. */ #ifndef G10_MPI_INLINE_DECL # ifdef __GNUC_STDC_INLINE__ # define G10_MPI_INLINE_DECL extern inline __attribute__ ((__gnu_inline__)) # else # define G10_MPI_INLINE_DECL extern __inline__ # endif #endif G10_MPI_INLINE_DECL mpi_limb_t mpihelp_add_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb) { mpi_limb_t x; x = *s1_ptr++; s2_limb += x; *res_ptr++ = s2_limb; if( s2_limb < x ) { /* sum is less than the left operand: handle carry */ while( --s1_size ) { x = *s1_ptr++ + 1; /* add carry */ *res_ptr++ = x; /* and store */ if( x ) /* not 0 (no overflow): we can stop */ goto leave; } return 1; /* return carry (size of s1 to small) */ } leave: if( res_ptr != s1_ptr ) { /* not the same variable */ mpi_size_t i; /* copy the rest */ for( i=0; i < s1_size-1; i++ ) res_ptr[i] = s1_ptr[i]; } return 0; /* no carry */ } G10_MPI_INLINE_DECL mpi_limb_t mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_ptr_t s2_ptr, mpi_size_t s2_size) { mpi_limb_t cy = 0; if( s2_size ) cy = mpihelp_add_n( res_ptr, s1_ptr, s2_ptr, s2_size ); if( s1_size - s2_size ) cy = mpihelp_add_1( res_ptr + s2_size, s1_ptr + s2_size, s1_size - s2_size, cy); return cy; } G10_MPI_INLINE_DECL mpi_limb_t mpihelp_sub_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb ) { mpi_limb_t x; x = *s1_ptr++; s2_limb = x - s2_limb; *res_ptr++ = s2_limb; if( s2_limb > x ) { while( --s1_size ) { x = *s1_ptr++; *res_ptr++ = x - 1; if( x ) goto leave; } return 1; } leave: if( res_ptr != s1_ptr ) { mpi_size_t i; for( i=0; i < s1_size-1; i++ ) res_ptr[i] = s1_ptr[i]; } return 0; } G10_MPI_INLINE_DECL mpi_limb_t mpihelp_sub( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_ptr_t s2_ptr, mpi_size_t s2_size) { mpi_limb_t cy = 0; if( s2_size ) cy = mpihelp_sub_n(res_ptr, s1_ptr, s2_ptr, s2_size); if( s1_size - s2_size ) cy = mpihelp_sub_1(res_ptr + s2_size, s1_ptr + s2_size, s1_size - s2_size, cy); return cy; } #endif /*G10_MPI_INLINE_H*/ gnupg-1.4.20/mpi/mpi-internal.h0000644000175000017500000002267212635262326013214 00000000000000/* mpi-internal.h - Internal to the Multi Precision Integers * Copyright (C) 1994, 1996 Free Software Foundation, Inc. * Copyright (C) 1998, 2000 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 3 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, see . * * 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_INTERNAL_H #define G10_MPI_INTERNAL_H #include "mpi.h" #include "mpi-asm-defs.h" #if BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_INT typedef unsigned int mpi_limb_t; typedef signed int mpi_limb_signed_t; #elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_LONG typedef unsigned long int mpi_limb_t; typedef signed long int mpi_limb_signed_t; #elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_LONG_LONG typedef unsigned long long int mpi_limb_t; typedef signed long long int mpi_limb_signed_t; #elif BYTES_PER_MPI_LIMB == SIZEOF_UNSIGNED_SHORT typedef unsigned short int mpi_limb_t; typedef signed short int mpi_limb_signed_t; #else #error BYTES_PER_MPI_LIMB does not match any C type #endif #define BITS_PER_MPI_LIMB (8*BYTES_PER_MPI_LIMB) struct gcry_mpi { int alloced; /* array size (# of allocated limbs) */ int nlimbs; /* number of valid limbs */ unsigned 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: not used */ /* bit 2: the limb is a pointer to some xmalloced data */ mpi_limb_t *d; /* array with the limbs */ }; /* If KARATSUBA_THRESHOLD is not already defined, define it to a * value which is good on most machines. */ /* tested 4, 16, 32 and 64, where 16 gave the best performance when * checking a 768 and a 1024 bit ElGamal signature. * (wk 22.12.97) */ #ifndef KARATSUBA_THRESHOLD #define KARATSUBA_THRESHOLD 16 #endif /* The code can't handle KARATSUBA_THRESHOLD smaller than 2. */ #if KARATSUBA_THRESHOLD < 2 #undef KARATSUBA_THRESHOLD #define KARATSUBA_THRESHOLD 2 #endif typedef mpi_limb_t *mpi_ptr_t; /* pointer to a limb */ typedef int mpi_size_t; /* (must be a signed type) */ #define ABS(x) (x >= 0 ? x : -x) #define MIN(l,o) ((l) < (o) ? (l) : (o)) #define MAX(h,i) ((h) > (i) ? (h) : (i)) #define RESIZE_IF_NEEDED(a,b) \ do { \ if( (a)->alloced < (b) ) \ mpi_resize((a), (b)); \ } while(0) /* Copy N limbs from S to D. */ #define MPN_COPY( d, s, n) \ do { \ mpi_size_t _i; \ for( _i = 0; _i < (n); _i++ ) \ (d)[_i] = (s)[_i]; \ } while(0) #define MPN_COPY_INCR( d, s, n) \ do { \ mpi_size_t _i; \ for( _i = 0; _i < (n); _i++ ) \ (d)[_i] = (s)[_i]; \ } while (0) #define MPN_COPY_DECR( d, s, n ) \ do { \ mpi_size_t _i; \ for( _i = (n)-1; _i >= 0; _i--) \ (d)[_i] = (s)[_i]; \ } while(0) /* Zero N limbs at D */ #define MPN_ZERO(d, n) \ do { \ int _i; \ for( _i = 0; _i < (n); _i++ ) \ (d)[_i] = 0; \ } while (0) #define MPN_NORMALIZE(d, n) \ do { \ while( (n) > 0 ) { \ if( (d)[(n)-1] ) \ break; \ (n)--; \ } \ } while(0) #define MPN_NORMALIZE_NOT_ZERO(d, n) \ do { \ for(;;) { \ if( (d)[(n)-1] ) \ break; \ (n)--; \ } \ } while(0) #define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \ do { \ if( (size) < KARATSUBA_THRESHOLD ) \ mul_n_basecase (prodp, up, vp, size); \ else \ mul_n (prodp, up, vp, size, tspace); \ } while (0); /* Divide the two-limb number in (NH,,NL) by D, with DI being the largest * limb not larger than (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB). * If this would yield overflow, DI should be the largest possible number * (i.e., only ones). For correct operation, the most significant bit of D * has to be set. Put the quotient in Q and the remainder in R. */ #define UDIV_QRNND_PREINV(q, r, nh, nl, d, di) \ do { \ mpi_limb_t _ql GNUPG_GCC_ATTR_UNUSED; \ mpi_limb_t _q, _r; \ mpi_limb_t _xh, _xl; \ umul_ppmm (_q, _ql, (nh), (di)); \ _q += (nh); /* DI is 2**BITS_PER_MPI_LIMB too small */ \ umul_ppmm (_xh, _xl, _q, (d)); \ sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl); \ if( _xh ) { \ sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \ _q++; \ if( _xh) { \ sub_ddmmss (_xh, _r, _xh, _r, 0, (d)); \ _q++; \ } \ } \ if( _r >= (d) ) { \ _r -= (d); \ _q++; \ } \ (r) = _r; \ (q) = _q; \ } while (0) /*-- mpiutil.c --*/ #ifdef M_DEBUG #define mpi_alloc_limb_space(n,f) mpi_debug_alloc_limb_space((n),(f), M_DBGINFO( __LINE__ ) ) #define mpi_free_limb_space(n) mpi_debug_free_limb_space((n), M_DBGINFO( __LINE__ ) ) mpi_ptr_t mpi_debug_alloc_limb_space( unsigned nlimbs, int sec, const char *info ); void mpi_debug_free_limb_space( mpi_ptr_t a, const char *info ); #else mpi_ptr_t mpi_alloc_limb_space( unsigned nlimbs, int sec ); void mpi_free_limb_space( mpi_ptr_t a ); #endif void mpi_assign_limb_space( MPI a, mpi_ptr_t ap, unsigned nlimbs ); /*-- mpi-bit.c --*/ void mpi_rshift_limbs( MPI a, unsigned int count ); void mpi_lshift_limbs( MPI a, unsigned int count ); /*-- mpihelp-add.c --*/ mpi_limb_t mpihelp_add_1(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb ); mpi_limb_t mpihelp_add_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_ptr_t s2_ptr, mpi_size_t size); mpi_limb_t mpihelp_add(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_ptr_t s2_ptr, mpi_size_t s2_size); /*-- mpihelp-sub.c --*/ mpi_limb_t mpihelp_sub_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb ); mpi_limb_t mpihelp_sub_n( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_ptr_t s2_ptr, mpi_size_t size); mpi_limb_t mpihelp_sub(mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_ptr_t s2_ptr, mpi_size_t s2_size); /*-- mpihelp-cmp.c --*/ int mpihelp_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size ); /*-- mpihelp-mul.c --*/ struct karatsuba_ctx { struct karatsuba_ctx *next; mpi_ptr_t tspace; mpi_size_t tspace_size; mpi_ptr_t tp; mpi_size_t tp_size; }; void mpihelp_release_karatsuba_ctx( struct karatsuba_ctx *ctx ); mpi_limb_t mpihelp_addmul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb); mpi_limb_t mpihelp_submul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb); void mpihelp_mul_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_ptr_t vp, mpi_size_t size); mpi_limb_t mpihelp_mul( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize, mpi_ptr_t vp, mpi_size_t vsize); void mpih_sqr_n_basecase( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size ); void mpih_sqr_n( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t size, mpi_ptr_t tspace); void mpihelp_mul_karatsuba_case( mpi_ptr_t prodp, mpi_ptr_t up, mpi_size_t usize, mpi_ptr_t vp, mpi_size_t vsize, struct karatsuba_ctx *ctx ); /*-- mpihelp-mul_1.c (or xxx/cpu/ *.S) --*/ mpi_limb_t mpihelp_mul_1( mpi_ptr_t res_ptr, mpi_ptr_t s1_ptr, mpi_size_t s1_size, mpi_limb_t s2_limb); /*-- mpihelp-div.c --*/ mpi_limb_t mpihelp_mod_1(mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, mpi_limb_t divisor_limb); mpi_limb_t mpihelp_divrem( mpi_ptr_t qp, mpi_size_t qextra_limbs, mpi_ptr_t np, mpi_size_t nsize, mpi_ptr_t dp, mpi_size_t dsize); mpi_limb_t mpihelp_divmod_1( mpi_ptr_t quot_ptr, mpi_ptr_t dividend_ptr, mpi_size_t dividend_size, mpi_limb_t divisor_limb); /*-- mpihelp-shift.c --*/ mpi_limb_t mpihelp_lshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt); mpi_limb_t mpihelp_rshift( mpi_ptr_t wp, mpi_ptr_t up, mpi_size_t usize, unsigned cnt); /* Define stuff for longlong.h. */ #define W_TYPE_SIZE BITS_PER_MPI_LIMB typedef mpi_limb_t UWtype; typedef unsigned int UHWtype; #if defined (__GNUC__) typedef unsigned int UQItype __attribute__ ((mode (QI))); typedef int SItype __attribute__ ((mode (SI))); typedef unsigned int USItype __attribute__ ((mode (SI))); typedef int DItype __attribute__ ((mode (DI))); typedef unsigned int UDItype __attribute__ ((mode (DI))); #else typedef unsigned char UQItype; typedef long SItype; typedef unsigned long USItype; #endif #ifdef __GNUC__ #include "mpi-inline.h" #endif #endif /*G10_MPI_INTERNAL_H*/ gnupg-1.4.20/mpi/mpi-bit.c0000644000175000017500000001246212635262326012145 00000000000000/* mpi-bit.c - MPI bit level fucntions * 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 3 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, see . */ #include #include #include #include #include "mpi-internal.h" #include "longlong.h" #ifdef MPI_INTERNAL_NEED_CLZ_TAB #ifdef __STDC__ const #endif unsigned char __clz_tab[] = { 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, }; #endif #define A_LIMB_1 ((mpi_limb_t)1) /**************** * Sometimes we have MSL (most significant limbs) which are 0; * this is for some reasons not good, so this function removes them. */ void mpi_normalize( MPI a ) { if( mpi_is_opaque (a) ) return; for( ; a->nlimbs && !a->d[a->nlimbs-1]; a->nlimbs-- ) ; } /**************** * Return the number of bits in A. */ unsigned mpi_get_nbits( MPI a ) { unsigned n; mpi_normalize( a ); if( a->nlimbs ) { mpi_limb_t alimb = a->d[a->nlimbs-1]; if( alimb ) count_leading_zeros( n, alimb ); else n = BITS_PER_MPI_LIMB; n = BITS_PER_MPI_LIMB - n + (a->nlimbs-1) * BITS_PER_MPI_LIMB; } else n = 0; return n; } /**************** * Test whether bit N is set. */ int mpi_test_bit( MPI a, unsigned n ) { unsigned limbno, bitno; mpi_limb_t limb; limbno = n / BITS_PER_MPI_LIMB; bitno = n % BITS_PER_MPI_LIMB; if( limbno >= a->nlimbs ) return 0; /* too far left: this is a 0 */ limb = a->d[limbno]; return (limb & (A_LIMB_1 << bitno))? 1: 0; } /**************** * Set bit N of A. */ void mpi_set_bit( MPI a, unsigned n ) { unsigned limbno, bitno; limbno = n / BITS_PER_MPI_LIMB; bitno = n % BITS_PER_MPI_LIMB; if( limbno >= a->nlimbs ) { /* resize */ if( a->alloced >= limbno ) mpi_resize(a, limbno+1 ); a->nlimbs = limbno+1; } a->d[limbno] |= (A_LIMB_1<= a->nlimbs ) { /* resize */ if( a->alloced >= limbno ) mpi_resize(a, limbno+1 ); a->nlimbs = limbno+1; } a->d[limbno] |= (A_LIMB_1<d[limbno] &= ~(A_LIMB_1 << bitno); a->nlimbs = limbno+1; } /**************** * clear bit N of A and all bits above */ void mpi_clear_highbit( MPI a, unsigned n ) { unsigned limbno, bitno; limbno = n / BITS_PER_MPI_LIMB; bitno = n % BITS_PER_MPI_LIMB; if( limbno >= a->nlimbs ) return; /* not allocated, so need to clear bits :-) */ for( ; bitno < BITS_PER_MPI_LIMB; bitno++ ) a->d[limbno] &= ~(A_LIMB_1 << bitno); a->nlimbs = limbno+1; } /**************** * Clear bit N of A. */ void mpi_clear_bit( MPI a, unsigned n ) { unsigned limbno, bitno; limbno = n / BITS_PER_MPI_LIMB; bitno = n % BITS_PER_MPI_LIMB; if( limbno >= a->nlimbs ) return; /* don't need to clear this bit, it's to far to left */ a->d[limbno] &= ~(A_LIMB_1 << bitno); } /**************** * Shift A by N bits to the right * FIXME: should use alloc_limb if X and A are same. */ void mpi_rshift( MPI x, MPI a, unsigned n ) { mpi_ptr_t xp; mpi_size_t xsize; xsize = a->nlimbs; x->sign = a->sign; RESIZE_IF_NEEDED(x, xsize); xp = x->d; if( xsize ) { mpihelp_rshift( xp, a->d, xsize, n); MPN_NORMALIZE( xp, xsize); } x->nlimbs = xsize; } /**************** * Shift A by COUNT limbs to the left * This is used only within the MPI library */ void mpi_lshift_limbs( MPI a, unsigned int count ) { mpi_ptr_t ap = a->d; int n = a->nlimbs; int i; if( !count || !n ) return; RESIZE_IF_NEEDED( a, n+count ); for( i = n-1; i >= 0; i-- ) ap[i+count] = ap[i]; for(i=0; i < count; i++ ) ap[i] = 0; a->nlimbs += count; } /**************** * Shift A by COUNT limbs to the right * This is used only within the MPI library */ void mpi_rshift_limbs( MPI a, unsigned int count ) { mpi_ptr_t ap = a->d; mpi_size_t n = a->nlimbs; unsigned int i; if( count >= n ) { a->nlimbs = 0; return; } for( i = 0; i < n - count; i++ ) ap[i] = ap[i+count]; ap[i] = 0; a->nlimbs -= count; } gnupg-1.4.20/mpi/Makefile.am0000644000175000017500000000460312635262326012472 00000000000000# Copyright (C) 1998, 1999, 2000, 2001, 2003 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 3 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, see . ## Process this file with automake to produce Makefile.in AM_CPPFLAGS = -I.. -I$(top_srcdir)/include AM_CFLAGS = $(MPI_OPT_FLAGS) AM_CCASFLAGS = $(NOEXECSTACK_FLAGS) $(MPI_SFLAGS) EXTRA_DIST = config.links DISTCLEANFILES = mpi-asm-defs.h \ mpih-add1.S mpih-add1.c mpih-mul1.S mpih-mul1.c \ mpih-mul2.S mpih-mul2.c mpih-mul3.S mpih-mul3.c \ mpih-lshift.S mpih-lshift.c mpih-rshift.S mpih-rshift.c \ mpih-sub1.S mpih-sub1.c asm-syntax.h sysdep.h # Note: we only use .S files so we should delete all left over .s CLEANFILES = _*.s noinst_LIBRARIES = libmpi.a # libmpi_a_LDFLAGS = libmpi_a_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 # 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 libmpi_a_DEPENDENCIES = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ libmpi_a_LIBADD = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ # cancel the default rules used by libtool which do not really # work and add one to cpp .S files .S.o: $(CPP) $(INCLUDES) $(DEFS) $< | grep -v '^#' > _$*.s $(COMPILE) $(AM_CCASFLAGS) -c _$*.s mv -f _$*.o $*.o .S.lo: gnupg-1.4.20/mpi/mpih-cmp.c0000644000175000017500000000377512635262326012325 00000000000000/* mpihelp-sub.c - MPI helper functions * Copyright (C) 1994, 1996 Free Software Foundation, Inc. * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" /**************** * Compare OP1_PTR/OP1_SIZE with OP2_PTR/OP2_SIZE. * There are no restrictions on the relative sizes of * the two arguments. * Return 1 if OP1 > OP2, 0 if they are equal, and -1 if OP1 < OP2. */ int mpihelp_cmp( mpi_ptr_t op1_ptr, mpi_ptr_t op2_ptr, mpi_size_t size ) { mpi_size_t i; mpi_limb_t op1_word, op2_word; for( i = size - 1; i >= 0 ; i--) { op1_word = op1_ptr[i]; op2_word = op2_ptr[i]; if( op1_word != op2_word ) goto diff; } return 0; diff: /* This can *not* be simplified to * op2_word - op2_word * since that expression might give signed overflow. */ return (op1_word > op2_word) ? 1 : -1; } gnupg-1.4.20/mpi/mpi-gcd.c0000644000175000017500000000254312635262326012123 00000000000000/* mpi-gcd.c - MPI functions * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include "mpi-internal.h" /**************** * Find the greatest common divisor G of A and B. * Return: true if this 1, false in all other cases */ int mpi_gcd( MPI g, MPI xa, MPI xb ) { MPI a, b; a = mpi_copy(xa); b = mpi_copy(xb); /* TAOCP Vol II, 4.5.2, Algorithm A */ a->sign = 0; b->sign = 0; while( mpi_cmp_ui( b, 0 ) ) { mpi_fdiv_r( g, a, b ); /* g used as temorary variable */ mpi_set(a,b); mpi_set(b,g); } mpi_set(g, a); mpi_free(a); mpi_free(b); return !mpi_cmp_ui( g, 1); } gnupg-1.4.20/mpi/Makefile.in0000644000175000017500000005476212635457153012522 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 1998, 1999, 2000, 2001, 2003 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 3 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, see . VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = mpi DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs \ $(top_srcdir)/scripts/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libmpi_a_AR = $(AR) $(ARFLAGS) am_libmpi_a_OBJECTS = mpi-add.$(OBJEXT) mpi-bit.$(OBJEXT) \ mpi-cmp.$(OBJEXT) mpi-div.$(OBJEXT) mpi-gcd.$(OBJEXT) \ mpi-inline.$(OBJEXT) mpi-inv.$(OBJEXT) mpi-mul.$(OBJEXT) \ mpi-pow.$(OBJEXT) mpi-mpow.$(OBJEXT) mpi-scan.$(OBJEXT) \ mpicoder.$(OBJEXT) mpih-cmp.$(OBJEXT) mpih-div.$(OBJEXT) \ mpih-mul.$(OBJEXT) mpiutil.$(OBJEXT) libmpi_a_OBJECTS = $(am_libmpi_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libmpi_a_SOURCES) DIST_SOURCES = $(libmpi_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I.. -I$(top_srcdir)/include AM_CFLAGS = $(MPI_OPT_FLAGS) AM_CCASFLAGS = $(NOEXECSTACK_FLAGS) $(MPI_SFLAGS) EXTRA_DIST = config.links DISTCLEANFILES = mpi-asm-defs.h \ mpih-add1.S mpih-add1.c mpih-mul1.S mpih-mul1.c \ mpih-mul2.S mpih-mul2.c mpih-mul3.S mpih-mul3.c \ mpih-lshift.S mpih-lshift.c mpih-rshift.S mpih-rshift.c \ mpih-sub1.S mpih-sub1.c asm-syntax.h sysdep.h # Note: we only use .S files so we should delete all left over .s CLEANFILES = _*.s noinst_LIBRARIES = libmpi.a # libmpi_a_LDFLAGS = libmpi_a_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 # 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 libmpi_a_DEPENDENCIES = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ libmpi_a_LIBADD = $(common_asm_objects) @MPI_EXTRA_ASM_OBJS@ all: all-am .SUFFIXES: .SUFFIXES: .S .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu mpi/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu mpi/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libmpi.a: $(libmpi_a_OBJECTS) $(libmpi_a_DEPENDENCIES) $(EXTRA_libmpi_a_DEPENDENCIES) $(AM_V_at)-rm -f libmpi.a $(AM_V_AR)$(libmpi_a_AR) libmpi.a $(libmpi_a_OBJECTS) $(libmpi_a_LIBADD) $(AM_V_at)$(RANLIB) libmpi.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-add.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-bit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-cmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-div.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-gcd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-inline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-inv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-mpow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-mul.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-pow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpi-scan.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpicoder.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-cmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-div.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpih-mul.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mpiutil.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # cancel the default rules used by libtool which do not really # work and add one to cpp .S files .S.o: $(CPP) $(INCLUDES) $(DEFS) $< | grep -v '^#' > _$*.s $(COMPILE) $(AM_CCASFLAGS) -c _$*.s mv -f _$*.o $*.o .S.lo: # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/mpi/powerpc64/0000755000175000017500000000000012635457223012346 500000000000000gnupg-1.4.20/mpi/powerpc64/distfiles0000644000175000017500000000000012635262326014163 00000000000000gnupg-1.4.20/mpi/supersparc/0000755000175000017500000000000012635457223012704 500000000000000gnupg-1.4.20/mpi/supersparc/udiv.S0000644000175000017500000000506612635262326013724 00000000000000/* SuperSPARC __udiv_qrnnd division support, used from longlong.h. * This is for SuperSPARC only, to compensate for its * semi-functional udiv instruction. * * Copyright (C) 1993, 1994, 1996, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ ! INPUT PARAMETERS ! rem_ptr i0 ! n1 i1 ! n0 i2 ! d i3 #include "sysdep.h" #undef ret /* Kludge for glibc */ .text .align 8 LC0: .double 0r4294967296 LC1: .double 0r2147483648 .align 4 .global C_SYMBOL_NAME(__udiv_qrnnd) C_SYMBOL_NAME(__udiv_qrnnd): !#PROLOGUE# 0 save %sp,-104,%sp !#PROLOGUE# 1 st %i1,[%fp-8] ld [%fp-8],%f10 sethi %hi(LC0),%o7 fitod %f10,%f4 ldd [%o7+%lo(LC0)],%f8 cmp %i1,0 bge L248 mov %i0,%i5 faddd %f4,%f8,%f4 L248: st %i2,[%fp-8] ld [%fp-8],%f10 fmuld %f4,%f8,%f6 cmp %i2,0 bge L249 fitod %f10,%f2 faddd %f2,%f8,%f2 L249: st %i3,[%fp-8] faddd %f6,%f2,%f2 ld [%fp-8],%f10 cmp %i3,0 bge L250 fitod %f10,%f4 faddd %f4,%f8,%f4 L250: fdivd %f2,%f4,%f2 sethi %hi(LC1),%o7 ldd [%o7+%lo(LC1)],%f4 fcmped %f2,%f4 nop fbge,a L251 fsubd %f2,%f4,%f2 fdtoi %f2,%f2 st %f2,[%fp-8] b L252 ld [%fp-8],%i4 L251: fdtoi %f2,%f2 st %f2,[%fp-8] ld [%fp-8],%i4 sethi %hi(-2147483648),%g2 xor %i4,%g2,%i4 L252: umul %i3,%i4,%g3 rd %y,%i0 subcc %i2,%g3,%o7 subxcc %i1,%i0,%g0 be L253 cmp %o7,%i3 add %i4,-1,%i0 add %o7,%i3,%o7 st %o7,[%i5] ret restore L253: blu L246 mov %i4,%i0 add %i4,1,%i0 sub %o7,%i3,%o7 L246: st %o7,[%i5] ret restore gnupg-1.4.20/mpi/supersparc/distfiles0000644000175000017500000000001112635262326014523 00000000000000 udiv.S gnupg-1.4.20/mpi/alpha/0000755000175000017500000000000012635457223011602 500000000000000gnupg-1.4.20/mpi/alpha/README0000644000175000017500000000351012635262326012377 00000000000000This directory contains mpn functions optimized for DEC Alpha processors. RELEVANT OPTIMIZATION ISSUES EV4 1. This chip has very limited store bandwidth. The on-chip L1 cache is write-through, and a cache line is transfered from the store buffer to the off-chip L2 in as much 15 cycles on most systems. This delay hurts mpn_add_n, mpn_sub_n, mpn_lshift, and mpn_rshift. 2. Pairing is possible between memory instructions and integer arithmetic instructions. 3. mulq and umulh is documented to have a latency of 23 cycles, but 2 of these cycles are pipelined. Thus, multiply instructions can be issued at a rate of one each 21nd cycle. EV5 1. The memory bandwidth of this chip seems excellent, both for loads and stores. Even when the working set is larger than the on-chip L1 and L2 caches, the perfromance remain almost unaffected. 2. mulq has a measured latency of 13 cycles and an issue rate of 1 each 8th cycle. umulh has a measured latency of 15 cycles and an issue rate of 1 each 10th cycle. But the exact timing is somewhat confusing. 3. mpn_add_n. With 4-fold unrolling, we need 37 instructions, whereof 12 are memory operations. This will take at least ceil(37/2) [dual issue] + 1 [taken branch] = 20 cycles We have 12 memory cycles, plus 4 after-store conflict cycles, or 16 data cache cycles, which should be completely hidden in the 20 issue cycles. The computation is inherently serial, with these dependencies: addq / \ addq cmpult | | cmpult | \ / or I.e., there is a 4 cycle path for each limb, making 16 cycles the absolute minimum. We could replace the `or' with a cmoveq/cmovne, which would save a cycle on EV5, but that might waste a cycle on EV4. Also, cmov takes 2 cycles. addq / \ addq cmpult | \ cmpult -> cmovne STATUS gnupg-1.4.20/mpi/alpha/mpih-mul2.S0000644000175000017500000000515612635262326013465 00000000000000/* Alpha 21064 addmul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r16) * mpi_ptr_t s1_ptr, (r17) * mpi_size_t s1_size, (r18) * mpi_limb_t s2_limb) (r19) * * This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5. */ .set noreorder .set noat .text .align 3 .globl mpihelp_addmul_1 .ent mpihelp_addmul_1 2 mpihelp_addmul_1: .frame $30,0,$26 ldq $2,0($17) # $2 = s1_limb addq $17,8,$17 # s1_ptr++ subq $18,1,$18 # size-- mulq $2,$19,$3 # $3 = prod_low ldq $5,0($16) # $5 = *res_ptr umulh $2,$19,$0 # $0 = prod_high beq $18,.Lend1 # jump if size was == 1 ldq $2,0($17) # $2 = s1_limb addq $17,8,$17 # s1_ptr++ subq $18,1,$18 # size-- addq $5,$3,$3 cmpult $3,$5,$4 stq $3,0($16) addq $16,8,$16 # res_ptr++ beq $18,.Lend2 # jump if size was == 2 .align 3 .Loop: mulq $2,$19,$3 # $3 = prod_low ldq $5,0($16) # $5 = *res_ptr addq $4,$0,$0 # cy_limb = cy_limb + 'cy' subq $18,1,$18 # size-- umulh $2,$19,$4 # $4 = cy_limb ldq $2,0($17) # $2 = s1_limb addq $17,8,$17 # s1_ptr++ addq $3,$0,$3 # $3 = cy_limb + prod_low cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) addq $5,$3,$3 cmpult $3,$5,$5 stq $3,0($16) addq $16,8,$16 # res_ptr++ addq $5,$0,$0 # combine carries bne $18,.Loop .Lend2: mulq $2,$19,$3 # $3 = prod_low ldq $5,0($16) # $5 = *res_ptr addq $4,$0,$0 # cy_limb = cy_limb + 'cy' umulh $2,$19,$4 # $4 = cy_limb addq $3,$0,$3 # $3 = cy_limb + prod_low cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) addq $5,$3,$3 cmpult $3,$5,$5 stq $3,0($16) addq $5,$0,$0 # combine carries addq $4,$0,$0 # cy_limb = prod_high + cy ret $31,($26),1 .Lend1: addq $5,$3,$3 cmpult $3,$5,$5 stq $3,0($16) addq $0,$5,$0 ret $31,($26),1 .end mpihelp_addmul_1 gnupg-1.4.20/mpi/alpha/mpih-mul3.S0000644000175000017500000000517712635262326013471 00000000000000/* Alpha 21064 submul_1 -- Multiply a limb vector with a limb and * subtract the result from a second limb vector. * Copyright (C) 1992, 1994, 1995, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_submul_1( mpi_ptr_t res_ptr, (r16 ) * mpi_ptr_t s1_ptr, (r17 ) * mpi_size_t s1_size, (r18 ) * mpi_limb_t s2_limb) (r19 ) * * This code runs at 42 cycles/limb on EV4 and 18 cycles/limb on EV5. */ .set noreorder .set noat .text .align 3 .globl mpihelp_submul_1 .ent mpihelp_submul_1 2 mpihelp_submul_1: .frame $30,0,$26 ldq $2,0($17) # $2 = s1_limb addq $17,8,$17 # s1_ptr++ subq $18,1,$18 # size-- mulq $2,$19,$3 # $3 = prod_low ldq $5,0($16) # $5 = *res_ptr umulh $2,$19,$0 # $0 = prod_high beq $18,.Lend1 # jump if size was == 1 ldq $2,0($17) # $2 = s1_limb addq $17,8,$17 # s1_ptr++ subq $18,1,$18 # size-- subq $5,$3,$3 cmpult $5,$3,$4 stq $3,0($16) addq $16,8,$16 # res_ptr++ beq $18,.Lend2 # jump if size was == 2 .align 3 .Loop: mulq $2,$19,$3 # $3 = prod_low ldq $5,0($16) # $5 = *res_ptr addq $4,$0,$0 # cy_limb = cy_limb + 'cy' subq $18,1,$18 # size-- umulh $2,$19,$4 # $4 = cy_limb ldq $2,0($17) # $2 = s1_limb addq $17,8,$17 # s1_ptr++ addq $3,$0,$3 # $3 = cy_limb + prod_low cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) subq $5,$3,$3 cmpult $5,$3,$5 stq $3,0($16) addq $16,8,$16 # res_ptr++ addq $5,$0,$0 # combine carries bne $18,.Loop .Lend2: mulq $2,$19,$3 # $3 = prod_low ldq $5,0($16) # $5 = *res_ptr addq $4,$0,$0 # cy_limb = cy_limb + 'cy' umulh $2,$19,$4 # $4 = cy_limb addq $3,$0,$3 # $3 = cy_limb + prod_low cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) subq $5,$3,$3 cmpult $5,$3,$5 stq $3,0($16) addq $5,$0,$0 # combine carries addq $4,$0,$0 # cy_limb = prod_high + cy ret $31,($26),1 .Lend1: subq $5,$3,$3 cmpult $5,$3,$5 stq $3,0($16) addq $0,$5,$0 ret $31,($26),1 .end mpihelp_submul_1 gnupg-1.4.20/mpi/alpha/mpih-rshift.S0000644000175000017500000000560512635262326014104 00000000000000/* alpha rshift * Copyright (C) 1994, 1995, 1998, 1999, * 2000, 2001 Free Software Foundation, Inc. * * This file is part of GNUPG. * * GNUPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ /******************* * mpi_limb_t * mpihelp_rshift( mpi_ptr_t wp, (r16) * mpi_ptr_t up, (r17) * mpi_size_t usize, (r18) * unsigned cnt) (r19) * * This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling, * it would take 4 cycles/limb. It should be possible to get down to 3 * cycles/limb since both ldq and stq can be paired with the other used * instructions. But there are many restrictions in the 21064 pipeline that * makes it hard, if not impossible, to get down to 3 cycles/limb: * * 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay. * 2. Only aligned instruction pairs can be paired. * 3. The store buffer or silo might not be able to deal with the bandwidth. */ .set noreorder .set noat .text .align 3 .globl mpihelp_rshift .ent mpihelp_rshift mpihelp_rshift: .frame $30,0,$26,0 ldq $4,0($17) # load first limb addq $17,8,$17 subq $31,$19,$7 subq $18,1,$18 and $18,4-1,$20 # number of limbs in first loop sll $4,$7,$0 # compute function result beq $20,.R0 subq $18,$20,$18 .align 3 .Roop0: ldq $3,0($17) addq $16,8,$16 addq $17,8,$17 subq $20,1,$20 srl $4,$19,$5 sll $3,$7,$6 bis $3,$3,$4 bis $5,$6,$8 stq $8,-8($16) bne $20,.Roop0 .R0: beq $18,.Rend .align 3 .Roop: ldq $3,0($17) addq $16,32,$16 subq $18,4,$18 srl $4,$19,$5 sll $3,$7,$6 ldq $4,8($17) srl $3,$19,$1 bis $5,$6,$8 stq $8,-32($16) sll $4,$7,$2 ldq $3,16($17) srl $4,$19,$5 bis $1,$2,$8 stq $8,-24($16) sll $3,$7,$6 ldq $4,24($17) srl $3,$19,$1 bis $5,$6,$8 stq $8,-16($16) sll $4,$7,$2 addq $17,32,$17 bis $1,$2,$8 stq $8,-8($16) bgt $18,.Roop .Rend: srl $4,$19,$8 stq $8,0($16) ret $31,($26),1 .end mpihelp_rshift gnupg-1.4.20/mpi/alpha/mpih-add1.S0000644000175000017500000000442512635262326013415 00000000000000/* alpha add_n -- Add two limb vectors of the same length > 0 and store * sum in a third limb vector. * Copyright (C) 1995, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_add_n( mpi_ptr_t res_ptr, ($16) * mpi_ptr_t s1_ptr, ($17) * mpi_ptr_t s2_ptr, ($18) * mpi_size_t size) ($19) */ .set noreorder .set noat .text .align 3 .globl mpihelp_add_n .ent mpihelp_add_n mpihelp_add_n: .frame $30,0,$26,0 ldq $3,0($17) ldq $4,0($18) subq $19,1,$19 and $19,4-1,$2 # number of limbs in first loop bis $31,$31,$0 beq $2,.L0 # if multiple of 4 limbs, skip first loop subq $19,$2,$19 .Loop0: subq $2,1,$2 ldq $5,8($17) addq $4,$0,$4 ldq $6,8($18) cmpult $4,$0,$1 addq $3,$4,$4 cmpult $4,$3,$0 stq $4,0($16) or $0,$1,$0 addq $17,8,$17 addq $18,8,$18 bis $5,$5,$3 bis $6,$6,$4 addq $16,8,$16 bne $2,.Loop0 .L0: beq $19,.Lend .align 3 .Loop: subq $19,4,$19 ldq $5,8($17) addq $4,$0,$4 ldq $6,8($18) cmpult $4,$0,$1 addq $3,$4,$4 cmpult $4,$3,$0 stq $4,0($16) or $0,$1,$0 ldq $3,16($17) addq $6,$0,$6 ldq $4,16($18) cmpult $6,$0,$1 addq $5,$6,$6 cmpult $6,$5,$0 stq $6,8($16) or $0,$1,$0 ldq $5,24($17) addq $4,$0,$4 ldq $6,24($18) cmpult $4,$0,$1 addq $3,$4,$4 cmpult $4,$3,$0 stq $4,16($16) or $0,$1,$0 ldq $3,32($17) addq $6,$0,$6 ldq $4,32($18) cmpult $6,$0,$1 addq $5,$6,$6 cmpult $6,$5,$0 stq $6,24($16) or $0,$1,$0 addq $17,32,$17 addq $18,32,$18 addq $16,32,$16 bne $19,.Loop .Lend: addq $4,$0,$4 cmpult $4,$0,$1 addq $3,$4,$4 cmpult $4,$3,$0 stq $4,0($16) or $0,$1,$0 ret $31,($26),1 .end mpihelp_add_n gnupg-1.4.20/mpi/alpha/mpih-mul1.S0000644000175000017500000000535312635262326013463 00000000000000/* Alpha 21064 mpih-mul1.S -- Multiply a limb vector with a limb and store * the result in a second limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_mul_1( mpi_ptr_t res_ptr, (r16) * mpi_ptr_t s1_ptr, (r17) * mpi_size_t s1_size, (r18) * mpi_limb_t s2_limb) (r19) * * This code runs at 42 cycles/limb on the EV4 and 18 cycles/limb on the EV5. * * To improve performance for long multiplications, we would use * 'fetch' for S1 and 'fetch_m' for RES. It's not obvious how to use * these instructions without slowing down the general code: 1. We can * only have two prefetches in operation at any time in the Alpha * architecture. 2. There will seldom be any special alignment * between RES_PTR and S1_PTR. Maybe we can simply divide the current * loop into an inner and outer loop, having the inner loop handle * exactly one prefetch block? */ .set noreorder .set noat .text .align 3 .globl mpihelp_mul_1 .ent mpihelp_mul_1 2 mpihelp_mul_1: .frame $30,0,$26 ldq $2,0($17) # $2 = s1_limb subq $18,1,$18 # size-- mulq $2,$19,$3 # $3 = prod_low bic $31,$31,$4 # clear cy_limb umulh $2,$19,$0 # $0 = prod_high beq $18,Lend1 # jump if size was == 1 ldq $2,8($17) # $2 = s1_limb subq $18,1,$18 # size-- stq $3,0($16) beq $18,Lend2 # jump if size was == 2 .align 3 Loop: mulq $2,$19,$3 # $3 = prod_low addq $4,$0,$0 # cy_limb = cy_limb + 'cy' subq $18,1,$18 # size-- umulh $2,$19,$4 # $4 = cy_limb ldq $2,16($17) # $2 = s1_limb addq $17,8,$17 # s1_ptr++ addq $3,$0,$3 # $3 = cy_limb + prod_low stq $3,8($16) cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) addq $16,8,$16 # res_ptr++ bne $18,Loop Lend2: mulq $2,$19,$3 # $3 = prod_low addq $4,$0,$0 # cy_limb = cy_limb + 'cy' umulh $2,$19,$4 # $4 = cy_limb addq $3,$0,$3 # $3 = cy_limb + prod_low cmpult $3,$0,$0 # $0 = carry from (cy_limb + prod_low) stq $3,8($16) addq $4,$0,$0 # cy_limb = prod_high + cy ret $31,($26),1 Lend1: stq $3,0($16) ret $31,($26),1 .end mpihelp_mul_1 gnupg-1.4.20/mpi/alpha/distfiles0000644000175000017500000000015612635262326013433 00000000000000README mpih-add1.S mpih-sub1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S mpih-lshift.S mpih-rshift.S udiv-qrnnd.S gnupg-1.4.20/mpi/alpha/mpih-lshift.S0000644000175000017500000000572312635262326014077 00000000000000/* alpha - left shift * * Copyright (C) 1994, 1995, 1998, 2001 Free Software Foundation, Inc. * * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ /******************* * mpi_limb_t * mpihelp_lshift( mpi_ptr_t wp, (r16) * mpi_ptr_t up, (r17) * mpi_size_t usize, (r18) * unsigned cnt) (r19) * * This code runs at 4.8 cycles/limb on the 21064. With infinite unrolling, * it would take 4 cycles/limb. It should be possible to get down to 3 * cycles/limb since both ldq and stq can be paired with the other used * instructions. But there are many restrictions in the 21064 pipeline that * makes it hard, if not impossible, to get down to 3 cycles/limb: * * 1. ldq has a 3 cycle delay, srl and sll have a 2 cycle delay. * 2. Only aligned instruction pairs can be paired. * 3. The store buffer or silo might not be able to deal with the bandwidth. */ .set noreorder .set noat .text .align 3 .globl mpihelp_lshift .ent mpihelp_lshift mpihelp_lshift: .frame $30,0,$26,0 s8addq $18,$17,$17 # make r17 point at end of s1 ldq $4,-8($17) # load first limb subq $17,8,$17 subq $31,$19,$7 s8addq $18,$16,$16 # make r16 point at end of RES subq $18,1,$18 and $18,4-1,$20 # number of limbs in first loop srl $4,$7,$0 # compute function result beq $20,.L0 subq $18,$20,$18 .align 3 .Loop0: ldq $3,-8($17) subq $16,8,$16 subq $17,8,$17 subq $20,1,$20 sll $4,$19,$5 srl $3,$7,$6 bis $3,$3,$4 bis $5,$6,$8 stq $8,0($16) bne $20,.Loop0 .L0: beq $18,.Lend .align 3 .Loop: ldq $3,-8($17) subq $16,32,$16 subq $18,4,$18 sll $4,$19,$5 srl $3,$7,$6 ldq $4,-16($17) sll $3,$19,$1 bis $5,$6,$8 stq $8,24($16) srl $4,$7,$2 ldq $3,-24($17) sll $4,$19,$5 bis $1,$2,$8 stq $8,16($16) srl $3,$7,$6 ldq $4,-32($17) sll $3,$19,$1 bis $5,$6,$8 stq $8,8($16) srl $4,$7,$2 subq $17,32,$17 bis $1,$2,$8 stq $8,0($16) bgt $18,.Loop .Lend: sll $4,$19,$8 stq $8,-8($16) ret $31,($26),1 .end mpihelp_lshift gnupg-1.4.20/mpi/alpha/udiv-qrnnd.S0000644000175000017500000000611412635262326013735 00000000000000/* Alpha 21064 __udiv_qrnnd * * Copyright (C) 1992, 1994, 1995, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ .set noreorder .set noat .text .align 3 .globl __udiv_qrnnd .ent __udiv_qrnnd __udiv_qrnnd: .frame $30,0,$26,0 .prologue 0 #define cnt $2 #define tmp $3 #define rem_ptr $16 #define n1 $17 #define n0 $18 #define d $19 #define qb $20 ldiq cnt,16 blt d,.Largedivisor .Loop1: cmplt n0,0,tmp addq n1,n1,n1 bis n1,tmp,n1 addq n0,n0,n0 cmpule d,n1,qb subq n1,d,tmp cmovne qb,tmp,n1 bis n0,qb,n0 cmplt n0,0,tmp addq n1,n1,n1 bis n1,tmp,n1 addq n0,n0,n0 cmpule d,n1,qb subq n1,d,tmp cmovne qb,tmp,n1 bis n0,qb,n0 cmplt n0,0,tmp addq n1,n1,n1 bis n1,tmp,n1 addq n0,n0,n0 cmpule d,n1,qb subq n1,d,tmp cmovne qb,tmp,n1 bis n0,qb,n0 cmplt n0,0,tmp addq n1,n1,n1 bis n1,tmp,n1 addq n0,n0,n0 cmpule d,n1,qb subq n1,d,tmp cmovne qb,tmp,n1 bis n0,qb,n0 subq cnt,1,cnt bgt cnt,.Loop1 stq n1,0(rem_ptr) bis $31,n0,$0 ret $31,($26),1 .Largedivisor: and n0,1,$4 srl n0,1,n0 sll n1,63,tmp or tmp,n0,n0 srl n1,1,n1 and d,1,$6 srl d,1,$5 addq $5,$6,$5 .Loop2: cmplt n0,0,tmp addq n1,n1,n1 bis n1,tmp,n1 addq n0,n0,n0 cmpule $5,n1,qb subq n1,$5,tmp cmovne qb,tmp,n1 bis n0,qb,n0 cmplt n0,0,tmp addq n1,n1,n1 bis n1,tmp,n1 addq n0,n0,n0 cmpule $5,n1,qb subq n1,$5,tmp cmovne qb,tmp,n1 bis n0,qb,n0 cmplt n0,0,tmp addq n1,n1,n1 bis n1,tmp,n1 addq n0,n0,n0 cmpule $5,n1,qb subq n1,$5,tmp cmovne qb,tmp,n1 bis n0,qb,n0 cmplt n0,0,tmp addq n1,n1,n1 bis n1,tmp,n1 addq n0,n0,n0 cmpule $5,n1,qb subq n1,$5,tmp cmovne qb,tmp,n1 bis n0,qb,n0 subq cnt,1,cnt bgt cnt,.Loop2 addq n1,n1,n1 addq $4,n1,n1 bne $6,.LOdd stq n1,0(rem_ptr) bis $31,n0,$0 ret $31,($26),1 .LOdd: /* q' in n0. r' in n1 */ addq n1,n0,n1 cmpult n1,n0,tmp # tmp := carry from addq beq tmp,.LLp6 addq n0,1,n0 subq n1,d,n1 .LLp6: cmpult n1,d,tmp bne tmp,.LLp7 addq n0,1,n0 subq n1,d,n1 .LLp7: stq n1,0(rem_ptr) bis $31,n0,$0 ret $31,($26),1 .end __udiv_qrnnd gnupg-1.4.20/mpi/alpha/mpih-sub1.S0000644000175000017500000000447312635262326013461 00000000000000/* Alpha sub_n -- Subtract two limb vectors of the same length > 0 and * store difference in a third limb vector. * Copyright (C) 1995, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_sub_n( mpi_ptr_t res_ptr, (r16) * mpi_ptr_t s1_ptr, (r17) * mpi_ptr_t s2_ptr, (r18) * mpi_size_t size) (r19) */ .set noreorder .set noat .text .align 3 .globl mpihelp_sub_n .ent mpihelp_sub_n mpihelp_sub_n: .frame $30,0,$26,0 ldq $3,0($17) ldq $4,0($18) subq $19,1,$19 and $19,4-1,$2 # number of limbs in first loop bis $31,$31,$0 beq $2,.L0 # if multiple of 4 limbs, skip first loop subq $19,$2,$19 .Loop0: subq $2,1,$2 ldq $5,8($17) addq $4,$0,$4 ldq $6,8($18) cmpult $4,$0,$1 subq $3,$4,$4 cmpult $3,$4,$0 stq $4,0($16) or $0,$1,$0 addq $17,8,$17 addq $18,8,$18 bis $5,$5,$3 bis $6,$6,$4 addq $16,8,$16 bne $2,.Loop0 .L0: beq $19,.Lend .align 3 .Loop: subq $19,4,$19 ldq $5,8($17) addq $4,$0,$4 ldq $6,8($18) cmpult $4,$0,$1 subq $3,$4,$4 cmpult $3,$4,$0 stq $4,0($16) or $0,$1,$0 ldq $3,16($17) addq $6,$0,$6 ldq $4,16($18) cmpult $6,$0,$1 subq $5,$6,$6 cmpult $5,$6,$0 stq $6,8($16) or $0,$1,$0 ldq $5,24($17) addq $4,$0,$4 ldq $6,24($18) cmpult $4,$0,$1 subq $3,$4,$4 cmpult $3,$4,$0 stq $4,16($16) or $0,$1,$0 ldq $3,32($17) addq $6,$0,$6 ldq $4,32($18) cmpult $6,$0,$1 subq $5,$6,$6 cmpult $5,$6,$0 stq $6,24($16) or $0,$1,$0 addq $17,32,$17 addq $18,32,$18 addq $16,32,$16 bne $19,.Loop .Lend: addq $4,$0,$4 cmpult $4,$0,$1 subq $3,$4,$4 cmpult $3,$4,$0 stq $4,0($16) or $0,$1,$0 ret $31,($26),1 .end mpihelp_sub_n gnupg-1.4.20/mpi/sparc32v8/0000755000175000017500000000000012635457223012250 500000000000000gnupg-1.4.20/mpi/sparc32v8/mpih-mul2.S0000644000175000017500000000577612635262326014143 00000000000000/* SPARC v8 __mpn_addmul_1 -- Multiply a limb vector with a limb and * add the result to a second limb vector. * * Copyright (C) 1992, 1993, 1994, 1995, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ ! INPUT PARAMETERS ! res_ptr o0 ! s1_ptr o1 ! size o2 ! s2_limb o3 #include "sysdep.h" .text .align 4 .global C_SYMBOL_NAME(mpihelp_addmul_1) C_SYMBOL_NAME(mpihelp_addmul_1): orcc %g0,%g0,%g2 ld [%o1+0],%o4 ! 1 sll %o2,4,%g1 and %g1,(4-1)<<4,%g1 #if PIC mov %o7,%g4 ! Save return address register call 1f add %o7,LL-1f,%g3 1: mov %g4,%o7 ! Restore return address register #else sethi %hi(LL),%g3 or %g3,%lo(LL),%g3 #endif jmp %g3+%g1 nop LL: LL00: add %o0,-4,%o0 b Loop00 /* 4, 8, 12, ... */ add %o1,-4,%o1 nop LL01: b Loop01 /* 1, 5, 9, ... */ nop nop nop LL10: add %o0,-12,%o0 /* 2, 6, 10, ... */ b Loop10 add %o1,4,%o1 nop LL11: add %o0,-8,%o0 /* 3, 7, 11, ... */ b Loop11 add %o1,-8,%o1 nop 1: addcc %g3,%g2,%g3 ! 1 ld [%o1+4],%o4 ! 2 rd %y,%g2 ! 1 addx %g0,%g2,%g2 ld [%o0+0],%g1 ! 2 addcc %g1,%g3,%g3 st %g3,[%o0+0] ! 1 Loop00: umul %o4,%o3,%g3 ! 2 ld [%o0+4],%g1 ! 2 addxcc %g3,%g2,%g3 ! 2 ld [%o1+8],%o4 ! 3 rd %y,%g2 ! 2 addx %g0,%g2,%g2 nop addcc %g1,%g3,%g3 st %g3,[%o0+4] ! 2 Loop11: umul %o4,%o3,%g3 ! 3 addxcc %g3,%g2,%g3 ! 3 ld [%o1+12],%o4 ! 4 rd %y,%g2 ! 3 add %o1,16,%o1 addx %g0,%g2,%g2 ld [%o0+8],%g1 ! 2 addcc %g1,%g3,%g3 st %g3,[%o0+8] ! 3 Loop10: umul %o4,%o3,%g3 ! 4 addxcc %g3,%g2,%g3 ! 4 ld [%o1+0],%o4 ! 1 rd %y,%g2 ! 4 addx %g0,%g2,%g2 ld [%o0+12],%g1 ! 2 addcc %g1,%g3,%g3 st %g3,[%o0+12] ! 4 add %o0,16,%o0 addx %g0,%g2,%g2 Loop01: addcc %o2,-4,%o2 bg 1b umul %o4,%o3,%g3 ! 1 addcc %g3,%g2,%g3 ! 4 rd %y,%g2 ! 4 addx %g0,%g2,%g2 ld [%o0+0],%g1 ! 2 addcc %g1,%g3,%g3 st %g3,[%o0+0] ! 4 addx %g0,%g2,%o0 retl nop ! umul, ld, addxcc, rd, st ! umul, ld, addxcc, rd, ld, addcc, st, addx gnupg-1.4.20/mpi/sparc32v8/mpih-mul3.S0000644000175000017500000000362712635262326014135 00000000000000/* SPARC v8 __mpn_submul_1 -- Multiply a limb vector with a limb and * subtract the result from a second limb vector. * * Copyright (C) 1992, 1993, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ ! INPUT PARAMETERS ! res_ptr o0 ! s1_ptr o1 ! size o2 ! s2_limb o3 #include "sysdep.h" .text .align 4 .global C_SYMBOL_NAME(mpihelp_submul_1) C_SYMBOL_NAME(mpihelp_submul_1): sub %g0,%o2,%o2 ! negate ... sll %o2,2,%o2 ! ... and scale size sub %o1,%o2,%o1 ! o1 is offset s1_ptr sub %o0,%o2,%g1 ! g1 is offset res_ptr mov 0,%o0 ! clear cy_limb Loop: ld [%o1+%o2],%o4 ld [%g1+%o2],%g2 umul %o4,%o3,%o5 rd %y,%g3 addcc %o5,%o0,%o5 addx %g3,0,%o0 subcc %g2,%o5,%g2 addx %o0,0,%o0 st %g2,[%g1+%o2] addcc %o2,4,%o2 bne Loop nop retl nop gnupg-1.4.20/mpi/sparc32v8/mpih-mul1.S0000644000175000017500000000525112635262326014126 00000000000000/* SPARC v8 __mpn_mul_1 -- Multiply a limb vector with a single limb and * store the product in a second limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ ! INPUT PARAMETERS ! res_ptr o0 ! s1_ptr o1 ! size o2 ! s2_limb o3 #include "sysdep.h" .text .align 8 .global C_SYMBOL_NAME(mpihelp_mul_1) C_SYMBOL_NAME(mpihelp_mul_1): sll %o2,4,%g1 and %g1,(4-1)<<4,%g1 #if PIC mov %o7,%g4 ! Save return address register call 1f add %o7,LL-1f,%g3 1: mov %g4,%o7 ! Restore return address register #else sethi %hi(LL),%g3 or %g3,%lo(LL),%g3 #endif jmp %g3+%g1 ld [%o1+0],%o4 ! 1 LL: LL00: add %o0,-4,%o0 add %o1,-4,%o1 b Loop00 /* 4, 8, 12, ... */ orcc %g0,%g0,%g2 LL01: b Loop01 /* 1, 5, 9, ... */ orcc %g0,%g0,%g2 nop nop LL10: add %o0,-12,%o0 /* 2, 6, 10, ... */ add %o1,4,%o1 b Loop10 orcc %g0,%g0,%g2 nop LL11: add %o0,-8,%o0 /* 3, 7, 11, ... */ add %o1,-8,%o1 b Loop11 orcc %g0,%g0,%g2 Loop: addcc %g3,%g2,%g3 ! 1 ld [%o1+4],%o4 ! 2 st %g3,[%o0+0] ! 1 rd %y,%g2 ! 1 Loop00: umul %o4,%o3,%g3 ! 2 addxcc %g3,%g2,%g3 ! 2 ld [%o1+8],%o4 ! 3 st %g3,[%o0+4] ! 2 rd %y,%g2 ! 2 Loop11: umul %o4,%o3,%g3 ! 3 addxcc %g3,%g2,%g3 ! 3 ld [%o1+12],%o4 ! 4 add %o1,16,%o1 st %g3,[%o0+8] ! 3 rd %y,%g2 ! 3 Loop10: umul %o4,%o3,%g3 ! 4 addxcc %g3,%g2,%g3 ! 4 ld [%o1+0],%o4 ! 1 st %g3,[%o0+12] ! 4 add %o0,16,%o0 rd %y,%g2 ! 4 addx %g0,%g2,%g2 Loop01: addcc %o2,-4,%o2 bg Loop umul %o4,%o3,%g3 ! 1 addcc %g3,%g2,%g3 ! 4 st %g3,[%o0+0] ! 4 rd %y,%g2 ! 4 retl addx %g0,%g2,%o0 gnupg-1.4.20/mpi/sparc32v8/distfiles0000644000175000017500000000004612635262326014077 00000000000000 mpih-mul1.S mpih-mul2.S mpih-mul3.S gnupg-1.4.20/mpi/mpi-div.c0000644000175000017500000002014012635262326012141 00000000000000/* mpi-div.c - MPI functions * Copyright (C) 1994, 1996 Free Software Foundation, Inc. * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ #include #include #include #include "mpi-internal.h" #include "longlong.h" void mpi_fdiv_r( MPI rem, MPI dividend, MPI divisor ) { int divisor_sign = divisor->sign; MPI temp_divisor = NULL; /* We need the original value of the divisor after the remainder has been * preliminary calculated. We have to copy it to temporary space if it's * the same variable as REM. */ if( rem == divisor ) { temp_divisor = mpi_copy( divisor ); divisor = temp_divisor; } mpi_tdiv_r( rem, dividend, divisor ); if( ((divisor_sign?1:0) ^ (dividend->sign?1:0)) && rem->nlimbs ) mpi_add( rem, rem, divisor); if( temp_divisor ) mpi_free(temp_divisor); } /**************** * Division rounding the quotient towards -infinity. * The remainder gets the same sign as the denominator. * rem is optional */ ulong mpi_fdiv_r_ui( MPI rem, MPI dividend, ulong divisor ) { mpi_limb_t rlimb; rlimb = mpihelp_mod_1( dividend->d, dividend->nlimbs, divisor ); if( rlimb && dividend->sign ) rlimb = divisor - rlimb; if( rem ) { rem->d[0] = rlimb; rem->nlimbs = rlimb? 1:0; } return rlimb; } void mpi_fdiv_q( MPI quot, MPI dividend, MPI divisor ) { MPI tmp = mpi_alloc( mpi_get_nlimbs(quot) ); mpi_fdiv_qr( quot, tmp, dividend, divisor); mpi_free(tmp); } void mpi_fdiv_qr( MPI quot, MPI rem, MPI dividend, MPI divisor ) { int divisor_sign = divisor->sign; MPI temp_divisor = NULL; if( quot == divisor || rem == divisor ) { temp_divisor = mpi_copy( divisor ); divisor = temp_divisor; } mpi_tdiv_qr( quot, rem, dividend, divisor ); if( (divisor_sign ^ dividend->sign) && rem->nlimbs ) { mpi_sub_ui( quot, quot, 1 ); mpi_add( rem, rem, divisor); } if( temp_divisor ) mpi_free(temp_divisor); } /* If den == quot, den needs temporary storage. * If den == rem, den needs temporary storage. * If num == quot, num needs temporary storage. * If den has temporary storage, it can be normalized while being copied, * i.e no extra storage should be allocated. */ void mpi_tdiv_r( MPI rem, MPI num, MPI den) { mpi_tdiv_qr(NULL, rem, num, den ); } void mpi_tdiv_qr( MPI quot, MPI rem, MPI num, MPI den) { mpi_ptr_t np, dp; mpi_ptr_t qp, rp; mpi_size_t nsize = num->nlimbs; mpi_size_t dsize = den->nlimbs; mpi_size_t qsize, rsize; mpi_size_t sign_remainder = num->sign; mpi_size_t sign_quotient = num->sign ^ den->sign; unsigned normalization_steps; mpi_limb_t q_limb; mpi_ptr_t marker[5]; int markidx=0; /* Ensure space is enough for quotient and remainder. * We need space for an extra limb in the remainder, because it's * up-shifted (normalized) below. */ rsize = nsize + 1; mpi_resize( rem, rsize); qsize = rsize - dsize; /* qsize cannot be bigger than this. */ if( qsize <= 0 ) { if( num != rem ) { rem->nlimbs = num->nlimbs; rem->sign = num->sign; MPN_COPY(rem->d, num->d, nsize); } if( quot ) { /* This needs to follow the assignment to rem, in case the * numerator and quotient are the same. */ quot->nlimbs = 0; quot->sign = 0; } return; } if( quot ) mpi_resize( quot, qsize); /* Read pointers here, when reallocation is finished. */ np = num->d; dp = den->d; rp = rem->d; /* Optimize division by a single-limb divisor. */ if( dsize == 1 ) { mpi_limb_t rlimb; if( quot ) { qp = quot->d; rlimb = mpihelp_divmod_1( qp, np, nsize, dp[0] ); qsize -= qp[qsize - 1] == 0; quot->nlimbs = qsize; quot->sign = sign_quotient; } else rlimb = mpihelp_mod_1( np, nsize, dp[0] ); rp[0] = rlimb; rsize = rlimb != 0?1:0; rem->nlimbs = rsize; rem->sign = sign_remainder; return; } if( quot ) { qp = quot->d; /* Make sure QP and NP point to different objects. Otherwise the * numerator would be gradually overwritten by the quotient limbs. */ if(qp == np) { /* Copy NP object to temporary space. */ np = marker[markidx++] = mpi_alloc_limb_space(nsize, mpi_is_secure(quot)); MPN_COPY(np, qp, nsize); } } else /* Put quotient at top of remainder. */ qp = rp + dsize; count_leading_zeros( normalization_steps, dp[dsize - 1] ); /* Normalize the denominator, i.e. make its most significant bit set by * shifting it NORMALIZATION_STEPS bits to the left. Also shift the * numerator the same number of steps (to keep the quotient the same!). */ if( normalization_steps ) { mpi_ptr_t tp; mpi_limb_t nlimb; /* Shift up the denominator setting the most significant bit of * the most significant word. Use temporary storage not to clobber * the original contents of the denominator. */ tp = marker[markidx++] = mpi_alloc_limb_space(dsize,mpi_is_secure(den)); mpihelp_lshift( tp, dp, dsize, normalization_steps ); dp = tp; /* Shift up the numerator, possibly introducing a new most * significant word. Move the shifted numerator in the remainder * meanwhile. */ nlimb = mpihelp_lshift(rp, np, nsize, normalization_steps); if( nlimb ) { rp[nsize] = nlimb; rsize = nsize + 1; } else rsize = nsize; } else { /* The denominator is already normalized, as required. Copy it to * temporary space if it overlaps with the quotient or remainder. */ if( dp == rp || (quot && (dp == qp))) { mpi_ptr_t tp; tp = marker[markidx++] = mpi_alloc_limb_space(dsize, mpi_is_secure(den)); MPN_COPY( tp, dp, dsize ); dp = tp; } /* Move the numerator to the remainder. */ if( rp != np ) MPN_COPY(rp, np, nsize); rsize = nsize; } q_limb = mpihelp_divrem( qp, 0, rp, rsize, dp, dsize ); if( quot ) { qsize = rsize - dsize; if(q_limb) { qp[qsize] = q_limb; qsize += 1; } quot->nlimbs = qsize; quot->sign = sign_quotient; } rsize = dsize; MPN_NORMALIZE (rp, rsize); if( normalization_steps && rsize ) { mpihelp_rshift(rp, rp, rsize, normalization_steps); rsize -= rp[rsize - 1] == 0?1:0; } rem->nlimbs = rsize; rem->sign = sign_remainder; while( markidx ) mpi_free_limb_space(marker[--markidx]); } void mpi_tdiv_q_2exp( MPI w, MPI u, unsigned count ) { mpi_size_t usize, wsize; mpi_size_t limb_cnt; usize = u->nlimbs; limb_cnt = count / BITS_PER_MPI_LIMB; wsize = usize - limb_cnt; if( limb_cnt >= usize ) w->nlimbs = 0; else { mpi_ptr_t wp; mpi_ptr_t up; RESIZE_IF_NEEDED( w, wsize ); wp = w->d; up = u->d; count %= BITS_PER_MPI_LIMB; if( count ) { mpihelp_rshift( wp, up + limb_cnt, wsize, count ); wsize -= !wp[wsize - 1]; } else { MPN_COPY_INCR( wp, up + limb_cnt, wsize); } w->nlimbs = wsize; } } /**************** * Check whether dividend is divisible by divisor * (note: divisor must fit into a limb) */ int mpi_divisible_ui(MPI dividend, ulong divisor ) { return !mpihelp_mod_1( dividend->d, dividend->nlimbs, divisor ); } gnupg-1.4.20/mpi/mips3/0000755000175000017500000000000012635457223011550 500000000000000gnupg-1.4.20/mpi/mips3/README0000644000175000017500000000137012635262326012347 00000000000000This directory contains mpn functions optimized for MIPS3. Example of processors that implement MIPS3 are R4000, R4400, R4600, R4700, and R8000. RELEVANT OPTIMIZATION ISSUES 1. On the R4000 and R4400, branches, both the plain and the "likely" ones, take 3 cycles to execute. (The fastest possible loop will take 4 cycles, because of the delay insn.) On the R4600, branches takes a single cycle On the R8000, branches often take no noticable cycles, as they are executed in a separate function unit.. 2. The R4000 and R4400 have a load latency of 4 cycles. 3. On the R4000 and R4400, multiplies take a data-dependent number of cycles, contrary to the SGI documentation. There seem to be 3 or 4 possible latencies. STATUS Good... gnupg-1.4.20/mpi/mips3/mpi-asm-defs.h0000644000175000017500000000030312635262326014115 00000000000000/* This file defines some basic constants for the MPI machinery. We * need to define the types on a per-CPU basis, so it is done with * this file here. */ #define BYTES_PER_MPI_LIMB 8 gnupg-1.4.20/mpi/mips3/mpih-mul2.S0000644000175000017500000000454312635262326013432 00000000000000/* MIPS3 addmul_1 -- Multiply a limb vector with a single limb and * add the product to a second limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, 2000 * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r4) * mpi_ptr_t s1_ptr, (r5) * mpi_size_t s1_size, (r6) * mpi_limb_t s2_limb) (r7) */ .text .align 4 .globl mpihelp_addmul_1 .ent mpihelp_addmul_1 mpihelp_addmul_1: .set noreorder .set nomacro /* # warm up phase 0 */ ld $8,0($5) /* # warm up phase 1 */ daddiu $5,$5,8 dmultu $8,$7 daddiu $6,$6,-1 beq $6,$0,$LC0 move $2,$0 # zero cy2 daddiu $6,$6,-1 beq $6,$0,$LC1 ld $8,0($5) # load new s1 limb as early as possible Loop: ld $10,0($4) mflo $3 mfhi $9 daddiu $5,$5,8 daddu $3,$3,$2 # add old carry limb to low product limb dmultu $8,$7 ld $8,0($5) # load new s1 limb as early as possible daddiu $6,$6,-1 # decrement loop counter sltu $2,$3,$2 # carry from previous addition -> $2 daddu $3,$10,$3 sltu $10,$3,$10 daddu $2,$2,$10 sd $3,0($4) daddiu $4,$4,8 bne $6,$0,Loop daddu $2,$9,$2 # add high product limb and carry from addition /* # cool down phase 1 */ $LC1: ld $10,0($4) mflo $3 mfhi $9 daddu $3,$3,$2 sltu $2,$3,$2 dmultu $8,$7 daddu $3,$10,$3 sltu $10,$3,$10 daddu $2,$2,$10 sd $3,0($4) daddiu $4,$4,8 daddu $2,$9,$2 # add high product limb and carry from addition /* # cool down phase 0 */ $LC0: ld $10,0($4) mflo $3 mfhi $9 daddu $3,$3,$2 sltu $2,$3,$2 daddu $3,$10,$3 sltu $10,$3,$10 daddu $2,$2,$10 sd $3,0($4) j $31 daddu $2,$9,$2 # add high product limb and carry from addition .end mpihelp_addmul_1 gnupg-1.4.20/mpi/mips3/mpih-mul3.S0000644000175000017500000000454612635262326013436 00000000000000/* MIPS3 submul_1 -- Multiply a limb vector with a single limb and * subtract the product from a second limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, 2000 * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_submul_1( mpi_ptr_t res_ptr, (r4) * mpi_ptr_t s1_ptr, (r5) * mpi_size_t s1_size, (r6) * mpi_limb_t s2_limb) (r7) */ .text .align 4 .globl mpihelp_submul_1 .ent mpihelp_submul_1 mpihelp_submul_1: .set noreorder .set nomacro /* # warm up phase 0 */ ld $8,0($5) /* # warm up phase 1 */ daddiu $5,$5,8 dmultu $8,$7 daddiu $6,$6,-1 beq $6,$0,$LC0 move $2,$0 # zero cy2 daddiu $6,$6,-1 beq $6,$0,$LC1 ld $8,0($5) # load new s1 limb as early as possible Loop: ld $10,0($4) mflo $3 mfhi $9 daddiu $5,$5,8 daddu $3,$3,$2 # add old carry limb to low product limb dmultu $8,$7 ld $8,0($5) # load new s1 limb as early as possible daddiu $6,$6,-1 # decrement loop counter sltu $2,$3,$2 # carry from previous addition -> $2 dsubu $3,$10,$3 sgtu $10,$3,$10 daddu $2,$2,$10 sd $3,0($4) daddiu $4,$4,8 bne $6,$0,Loop daddu $2,$9,$2 # add high product limb and carry from addition /* # cool down phase 1 */ $LC1: ld $10,0($4) mflo $3 mfhi $9 daddu $3,$3,$2 sltu $2,$3,$2 dmultu $8,$7 dsubu $3,$10,$3 sgtu $10,$3,$10 daddu $2,$2,$10 sd $3,0($4) daddiu $4,$4,8 daddu $2,$9,$2 # add high product limb and carry from addition /* # cool down phase 0 */ $LC0: ld $10,0($4) mflo $3 mfhi $9 daddu $3,$3,$2 sltu $2,$3,$2 dsubu $3,$10,$3 sgtu $10,$3,$10 daddu $2,$2,$10 sd $3,0($4) j $31 daddu $2,$9,$2 # add high product limb and carry from addition .end mpihelp_submul_1 gnupg-1.4.20/mpi/mips3/mpih-rshift.S0000644000175000017500000000361712635262326014053 00000000000000/* mips3 rshift * * Copyright (C) 1995, 1998, 2000 * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_rshift( mpi_ptr_t wp, ($4) * mpi_ptr_t up, ($5) * mpi_size_t usize, ($6) * unsigned cnt) ($7) */ .text .align 2 .globl mpihelp_rshift .ent mpihelp_rshift mpihelp_rshift: .set noreorder .set nomacro ld $10,0($5) # load first limb dsubu $13,$0,$7 daddiu $6,$6,-1 and $9,$6,4-1 # number of limbs in first loop beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop dsll $2,$10,$13 # compute function result dsubu $6,$6,$9 .Loop0: ld $3,8($5) daddiu $4,$4,8 daddiu $5,$5,8 daddiu $9,$9,-1 dsrl $11,$10,$7 dsll $12,$3,$13 move $10,$3 or $8,$11,$12 bne $9,$0,.Loop0 sd $8,-8($4) .L0: beq $6,$0,.Lend nop .Loop: ld $3,8($5) daddiu $4,$4,32 daddiu $6,$6,-4 dsrl $11,$10,$7 dsll $12,$3,$13 ld $10,16($5) dsrl $14,$3,$7 or $8,$11,$12 sd $8,-32($4) dsll $9,$10,$13 ld $3,24($5) dsrl $11,$10,$7 or $8,$14,$9 sd $8,-24($4) dsll $12,$3,$13 ld $10,32($5) dsrl $14,$3,$7 or $8,$11,$12 sd $8,-16($4) dsll $9,$10,$13 daddiu $5,$5,32 or $8,$14,$9 bgtz $6,.Loop sd $8,-8($4) .Lend: dsrl $8,$10,$7 j $31 sd $8,0($4) .end mpihelp_rshift gnupg-1.4.20/mpi/mips3/mpih-add1.S0000644000175000017500000000446212635262326013364 00000000000000/* mips3 add_n -- Add two limb vectors of the same length > 0 and store * sum in a third limb vector. * * Copyright (C) 1995, 1998, 2000 * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_add_n( mpi_ptr_t res_ptr, ($4) * mpi_ptr_t s1_ptr, ($5) * mpi_ptr_t s2_ptr, ($6) * mpi_size_t size) ($7) */ .text .align 2 .globl mpihelp_add_n .ent mpihelp_add_n mpihelp_add_n: .set noreorder .set nomacro ld $10,0($5) ld $11,0($6) daddiu $7,$7,-1 and $9,$7,4-1 # number of limbs in first loop beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop move $2,$0 dsubu $7,$7,$9 .Loop0: daddiu $9,$9,-1 ld $12,8($5) daddu $11,$11,$2 ld $13,8($6) sltu $8,$11,$2 daddu $11,$10,$11 sltu $2,$11,$10 sd $11,0($4) or $2,$2,$8 daddiu $5,$5,8 daddiu $6,$6,8 move $10,$12 move $11,$13 bne $9,$0,.Loop0 daddiu $4,$4,8 .L0: beq $7,$0,.Lend nop .Loop: daddiu $7,$7,-4 ld $12,8($5) daddu $11,$11,$2 ld $13,8($6) sltu $8,$11,$2 daddu $11,$10,$11 sltu $2,$11,$10 sd $11,0($4) or $2,$2,$8 ld $10,16($5) daddu $13,$13,$2 ld $11,16($6) sltu $8,$13,$2 daddu $13,$12,$13 sltu $2,$13,$12 sd $13,8($4) or $2,$2,$8 ld $12,24($5) daddu $11,$11,$2 ld $13,24($6) sltu $8,$11,$2 daddu $11,$10,$11 sltu $2,$11,$10 sd $11,16($4) or $2,$2,$8 ld $10,32($5) daddu $13,$13,$2 ld $11,32($6) sltu $8,$13,$2 daddu $13,$12,$13 sltu $2,$13,$12 sd $13,24($4) or $2,$2,$8 daddiu $5,$5,32 daddiu $6,$6,32 bne $7,$0,.Loop daddiu $4,$4,32 .Lend: daddu $11,$11,$2 sltu $8,$11,$2 daddu $11,$10,$11 sltu $2,$11,$10 sd $11,0($4) j $31 or $2,$2,$8 .end mpihelp_add_n gnupg-1.4.20/mpi/mips3/mpih-mul1.S0000644000175000017500000000417212635262326013427 00000000000000/* mips3 mpih-mul1.S -- Multiply a limb vector with a limb and store * the result in a second limb vector. * * Copyright (C) 1992, 1994, 1995, 1998, 2000 * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_mul_1( mpi_ptr_t res_ptr, (r4) * mpi_ptr_t s1_ptr, (r5) * mpi_size_t s1_size, (r6) * mpi_limb_t s2_limb) (r7) */ .text .align 4 .globl mpihelp_mul_1 .ent mpihelp_mul_1 mpihelp_mul_1: .set noreorder .set nomacro /* # warm up phase 0 */ ld $8,0($5) /* # warm up phase 1 */ daddiu $5,$5,8 dmultu $8,$7 daddiu $6,$6,-1 beq $6,$0,$LC0 move $2,$0 # zero cy2 daddiu $6,$6,-1 beq $6,$0,$LC1 ld $8,0($5) # load new s1 limb as early as possible Loop: mflo $10 mfhi $9 daddiu $5,$5,8 daddu $10,$10,$2 # add old carry limb to low product limb dmultu $8,$7 ld $8,0($5) # load new s1 limb as early as possible daddiu $6,$6,-1 # decrement loop counter sltu $2,$10,$2 # carry from previous addition -> $2 sd $10,0($4) daddiu $4,$4,8 bne $6,$0,Loop daddu $2,$9,$2 # add high product limb and carry from addition /* # cool down phase 1 */ $LC1: mflo $10 mfhi $9 daddu $10,$10,$2 sltu $2,$10,$2 dmultu $8,$7 sd $10,0($4) daddiu $4,$4,8 daddu $2,$9,$2 # add high product limb and carry from addition /* # cool down phase 0 */ $LC0: mflo $10 mfhi $9 daddu $10,$10,$2 sltu $2,$10,$2 sd $10,0($4) j $31 daddu $2,$9,$2 # add high product limb and carry from addition .end mpihelp_mul_1 gnupg-1.4.20/mpi/mips3/distfiles0000644000175000017500000000015712635262326013402 00000000000000README mpih-add1.S mpih-sub1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S mpih-lshift.S mpih-rshift.S mpi-asm-defs.h gnupg-1.4.20/mpi/mips3/mpih-lshift.S0000644000175000017500000000400012635262326014030 00000000000000/* mips3 lshift * * Copyright (C) 1995, 1998, 2000, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_lshift( mpi_ptr_t wp, ($4) * mpi_ptr_t up, ($5) * mpi_size_t usize, ($6) * unsigned cnt) ($7) */ .text .align 2 .globl mpihelp_lshift .ent mpihelp_lshift mpihelp_lshift: .set noreorder .set nomacro dsll $2,$6,3 daddu $5,$5,$2 # make r5 point at end of src ld $10,-8($5) # load first limb dsubu $13,$0,$7 daddu $4,$4,$2 # make r4 point at end of res daddiu $6,$6,-1 and $9,$6,4-1 # number of limbs in first loop beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop dsrl $2,$10,$13 # compute function result dsubu $6,$6,$9 .Loop0: ld $3,-16($5) daddiu $4,$4,-8 daddiu $5,$5,-8 daddiu $9,$9,-1 dsll $11,$10,$7 dsrl $12,$3,$13 move $10,$3 or $8,$11,$12 bne $9,$0,.Loop0 sd $8,0($4) .L0: beq $6,$0,.Lend nop .Loop: ld $3,-16($5) daddiu $4,$4,-32 daddiu $6,$6,-4 dsll $11,$10,$7 dsrl $12,$3,$13 ld $10,-24($5) dsll $14,$3,$7 or $8,$11,$12 sd $8,24($4) dsrl $9,$10,$13 ld $3,-32($5) dsll $11,$10,$7 or $8,$14,$9 sd $8,16($4) dsrl $12,$3,$13 ld $10,-40($5) dsll $14,$3,$7 or $8,$11,$12 sd $8,8($4) dsrl $9,$10,$13 daddiu $5,$5,-32 or $8,$14,$9 bgtz $6,.Loop sd $8,0($4) .Lend: dsll $8,$10,$7 j $31 sd $8,-8($4) .end mpihelp_lshift gnupg-1.4.20/mpi/mips3/mpih-sub1.S0000644000175000017500000000450712635262326013425 00000000000000/* mips3 sub_n -- Subtract two limb vectors of the same length > 0 and * store difference in a third limb vector. * * Copyright (C) 1995, 1998, 1999, 2000, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /******************* * mpi_limb_t * mpihelp_sub_n( mpi_ptr_t res_ptr, (r4) * mpi_ptr_t s1_ptr, (r5) * mpi_ptr_t s2_ptr, (r6) * mpi_size_t size) (r7) */ .text .align 2 .globl mpihelp_sub_n .ent mpihelp_sub_n mpihelp_sub_n: .set noreorder .set nomacro ld $10,0($5) ld $11,0($6) daddiu $7,$7,-1 and $9,$7,4-1 # number of limbs in first loop beq $9,$0,.L0 # if multiple of 4 limbs, skip first loop move $2,$0 dsubu $7,$7,$9 .Loop0: daddiu $9,$9,-1 ld $12,8($5) daddu $11,$11,$2 ld $13,8($6) sltu $8,$11,$2 dsubu $11,$10,$11 sltu $2,$10,$11 sd $11,0($4) or $2,$2,$8 daddiu $5,$5,8 daddiu $6,$6,8 move $10,$12 move $11,$13 bne $9,$0,.Loop0 daddiu $4,$4,8 .L0: beq $7,$0,.Lend nop .Loop: daddiu $7,$7,-4 ld $12,8($5) daddu $11,$11,$2 ld $13,8($6) sltu $8,$11,$2 dsubu $11,$10,$11 sltu $2,$10,$11 sd $11,0($4) or $2,$2,$8 ld $10,16($5) daddu $13,$13,$2 ld $11,16($6) sltu $8,$13,$2 dsubu $13,$12,$13 sltu $2,$12,$13 sd $13,8($4) or $2,$2,$8 ld $12,24($5) daddu $11,$11,$2 ld $13,24($6) sltu $8,$11,$2 dsubu $11,$10,$11 sltu $2,$10,$11 sd $11,16($4) or $2,$2,$8 ld $10,32($5) daddu $13,$13,$2 ld $11,32($6) sltu $8,$13,$2 dsubu $13,$12,$13 sltu $2,$12,$13 sd $13,24($4) or $2,$2,$8 daddiu $5,$5,32 daddiu $6,$6,32 bne $7,$0,.Loop daddiu $4,$4,32 .Lend: daddu $11,$11,$2 sltu $8,$11,$2 dsubu $11,$10,$11 sltu $2,$10,$11 sd $11,0($4) j $31 or $2,$2,$8 .end mpihelp_sub_n gnupg-1.4.20/mpi/longlong.h0000644000175000017500000021553312635262326012434 00000000000000/* longlong.h -- definitions for mixed size 32/64 bit arithmetic. Note: I added some stuff for use with gnupg Copyright (C) 1991, 1992, 1993, 1994, 1996, 1998, 2000, 2001, 2002, 2003, 2011 Free Software Foundation, Inc. This file is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this file; if not, see . */ /* You have to define the following before including this file: UWtype -- An unsigned type, default type for operations (typically a "word") UHWtype -- An unsigned type, at least half the size of UWtype. UDWtype -- An unsigned type, at least twice as large a UWtype W_TYPE_SIZE -- size in bits of UWtype SItype, USItype -- Signed and unsigned 32 bit types. DItype, UDItype -- Signed and unsigned 64 bit types. On a 32 bit machine UWtype should typically be USItype; on a 64 bit machine, UWtype should typically be UDItype. */ #define __BITS4 (W_TYPE_SIZE / 4) #define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) #define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) #define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) /* This is used to make sure no undesirable sharing between different libraries that use this file takes place. */ #ifndef __MPN #define __MPN(x) __##x #endif /* Define auxiliary asm macros. 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype word product in HIGH_PROD and LOW_PROD. 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a UDWtype product. This is just a variant of umul_ppmm. 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, denominator) divides a UDWtype, composed by the UWtype integers HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less than DENOMINATOR for correct operation. If, in addition, the most significant bit of DENOMINATOR must be 1, then the pre-processor symbol UDIV_NEEDS_NORMALIZATION is defined to 1. 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, denominator). Like udiv_qrnnd but the numbers are signed. The quotient is rounded towards 0. 5) count_leading_zeros(count, x) counts the number of zero-bits from the msb to the first non-zero bit in the UWtype X. This is the number of steps X needs to be shifted left to set the msb. Undefined for X == 0, unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts from the least significant end. 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, high_addend_2, low_addend_2) adds two UWtype integers, composed by HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow (i.e. carry out) is not stored anywhere, and is lost. 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, and is lost. If any of these macros are left undefined for a particular CPU, C macros are used. */ /* The CPUs come in alphabetical order below. Please add support for more CPUs here, or improve the current support for the CPUs below! */ #if defined (__GNUC__) && !defined (NO_ASM) /* We sometimes need to clobber "cc" with gcc2, but that would not be understood by gcc1. Use cpp to avoid major code duplication. */ #if __GNUC__ < 2 #define __CLOBBER_CC #define __AND_CLOBBER_CC #else /* __GNUC__ >= 2 */ #define __CLOBBER_CC : "cc" #define __AND_CLOBBER_CC , "cc" #endif /* __GNUC__ < 2 */ /*************************************** ************** A29K ***************** ***************************************/ #if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add %1,%4,%5\n" \ "addc %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub %1,%4,%5\n" \ "subc %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("multiplu %0,%1,%2" \ : "=r" ((USItype)(xl)) \ : "r" (__m0), \ "r" (__m1)); \ __asm__ ("multmu %0,%1,%2" \ : "=r" ((USItype)(xh)) \ : "r" (__m0), \ "r" (__m1)); \ } while (0) #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("dividu %0,%3,%4" \ : "=r" ((USItype)(q)), \ "=q" ((USItype)(r)) \ : "1" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "r" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))) #define COUNT_LEADING_ZEROS_0 32 #endif /* __a29k__ */ #if defined (__alpha) && W_TYPE_SIZE == 64 #define umul_ppmm(ph, pl, m0, m1) \ do { \ UDItype __m0 = (m0), __m1 = (m1); \ __asm__ ("umulh %r1,%2,%0" \ : "=r" ((UDItype) ph) \ : "%rJ" (__m0), \ "rI" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define UMUL_TIME 46 #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { UDItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern UDItype __udiv_qrnnd (); #define UDIV_TIME 220 #endif /* LONGLONG_STANDALONE */ #endif /* __alpha */ /*************************************** ************** ARM ****************** ***************************************/ #if defined (__arm__) && W_TYPE_SIZE == 32 && !defined (__thumb__) #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("adds %1, %4, %5\n" \ "adc %0, %2, %3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subs %1, %4, %5\n" \ "sbc %0, %2, %3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #if defined __ARM_ARCH_2__ || defined __ARM_ARCH_3__ #define umul_ppmm(xh, xl, a, b) \ __asm__ ("%@ Inlined umul_ppmm\n" \ "mov %|r0, %2, lsr #16 @ AAAA\n" \ "mov %|r2, %3, lsr #16 @ BBBB\n" \ "bic %|r1, %2, %|r0, lsl #16 @ aaaa\n" \ "bic %0, %3, %|r2, lsl #16 @ bbbb\n" \ "mul %1, %|r1, %|r2 @ aaaa * BBBB\n" \ "mul %|r2, %|r0, %|r2 @ AAAA * BBBB\n" \ "mul %|r1, %0, %|r1 @ aaaa * bbbb\n" \ "mul %0, %|r0, %0 @ AAAA * bbbb\n" \ "adds %|r0, %1, %0 @ central sum\n" \ "addcs %|r2, %|r2, #65536\n" \ "adds %1, %|r1, %|r0, lsl #16\n" \ "adc %0, %|r2, %|r0, lsr #16" \ : "=&r" ((USItype)(xh)), \ "=r" ((USItype)(xl)) \ : "r" ((USItype)(a)), \ "r" ((USItype)(b)) \ : "r0", "r1", "r2") #else #define umul_ppmm(xh, xl, a, b) \ __asm__ ("%@ Inlined umul_ppmm\n" \ "umull %r1, %r0, %r2, %r3" \ : "=&r" ((USItype)(xh)), \ "=r" ((USItype)(xl)) \ : "r" ((USItype)(a)), \ "r" ((USItype)(b)) \ : "r0", "r1") #endif #define UMUL_TIME 20 #define UDIV_TIME 100 #endif /* __arm__ */ /*************************************** ************** CLIPPER ************** ***************************************/ #if defined (__clipper__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("mulwux %2,%0" \ : "=r" (__xx.__ll) \ : "%0" ((USItype)(u)), \ "r" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define smul_ppmm(w1, w0, u, v) \ ({union {DItype __ll; \ struct {SItype __l, __h;} __i; \ } __xx; \ __asm__ ("mulwx %2,%0" \ : "=r" (__xx.__ll) \ : "%0" ((SItype)(u)), \ "r" ((SItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("mulwux %2,%0" \ : "=r" (__w) \ : "%0" ((USItype)(u)), \ "r" ((USItype)(v))); \ __w; }) #endif /* __clipper__ */ /*************************************** ************** GMICRO *************** ***************************************/ #if defined (__gmicro__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add.w %5,%1\n" \ "addx %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub.w %5,%1\n" \ "subx %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(ph, pl, m0, m1) \ __asm__ ("mulx %3,%0,%1" \ : "=g" ((USItype)(ph)), \ "=r" ((USItype)(pl)) \ : "%0" ((USItype)(m0)), \ "g" ((USItype)(m1))) #define udiv_qrnnd(q, r, nh, nl, d) \ __asm__ ("divx %4,%0,%1" \ : "=g" ((USItype)(q)), \ "=r" ((USItype)(r)) \ : "1" ((USItype)(nh)), \ "0" ((USItype)(nl)), \ "g" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("bsch/1 %1,%0" \ : "=g" (count) \ : "g" ((USItype)(x)), \ "0" ((USItype)0)) #endif /*************************************** ************** HPPA ***************** ***************************************/ #if defined (__hppa) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ (" add %4,%5,%1\n" \ " addc %2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rM" ((USItype)(ah)), \ "rM" ((USItype)(bh)), \ "%rM" ((USItype)(al)), \ "rM" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ (" sub %4,%5,%1\n" \ " subb %2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rM" ((USItype)(ah)), \ "rM" ((USItype)(bh)), \ "rM" ((USItype)(al)), \ "rM" ((USItype)(bl))) #if defined (_PA_RISC1_1) #define umul_ppmm(wh, wl, u, v) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ (" xmpyu %1,%2,%0" \ : "=*f" (__xx.__ll) \ : "*f" ((USItype)(u)), \ "*f" ((USItype)(v))); \ (wh) = __xx.__i.__h; \ (wl) = __xx.__i.__l; \ } while (0) #define UMUL_TIME 8 #define UDIV_TIME 60 #else #define UMUL_TIME 40 #define UDIV_TIME 80 #endif #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { USItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern USItype __udiv_qrnnd (); #endif /* LONGLONG_STANDALONE */ #define count_leading_zeros(count, x) \ do { \ USItype __tmp; \ __asm__ ( \ " ldi 1,%0 \n" \ " extru,= %1,15,16,%%r0 ; Bits 31..16 zero? \n" \ " extru,tr %1,15,16,%1 ; No. Shift down, skip add.\n" \ " ldo 16(%0),%0 ; Yes. Perform add. \n" \ " extru,= %1,23,8,%%r0 ; Bits 15..8 zero? \n" \ " extru,tr %1,23,8,%1 ; No. Shift down, skip add.\n" \ " ldo 8(%0),%0 ; Yes. Perform add. \n" \ " extru,= %1,27,4,%%r0 ; Bits 7..4 zero? \n" \ " extru,tr %1,27,4,%1 ; No. Shift down, skip add.\n" \ " ldo 4(%0),%0 ; Yes. Perform add. \n" \ " extru,= %1,29,2,%%r0 ; Bits 3..2 zero? \n" \ " extru,tr %1,29,2,%1 ; No. Shift down, skip add.\n" \ " ldo 2(%0),%0 ; Yes. Perform add. \n" \ " extru %1,30,1,%1 ; Extract bit 1. \n" \ " sub %0,%1,%0 ; Subtract it. " \ : "=r" (count), "=r" (__tmp) : "1" (x)); \ } while (0) #endif /* hppa */ /*************************************** ************** I370 ***************** ***************************************/ #if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32 #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mr %0,%3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (__m0), \ "r" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define smul_ppmm(xh, xl, m0, m1) \ do { \ union {DItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("mr %0,%3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (m0), \ "r" (m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ } while (0) #define sdiv_qrnnd(q, r, n1, n0, d) \ do { \ union {DItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __xx.__i.__h = n1; __xx.__i.__l = n0; \ __asm__ ("dr %0,%2" \ : "=r" (__xx.__ll) \ : "0" (__xx.__ll), "r" (d)); \ (q) = __xx.__i.__l; (r) = __xx.__i.__h; \ } while (0) #endif /*************************************** ************** I386 ***************** ***************************************/ #if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addl %5,%1\n" \ "adcl %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subl %5,%1\n" \ "sbbl %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(w1, w0, u, v) \ __asm__ ("mull %3" \ : "=a" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "%0" ((USItype)(u)), \ "rm" ((USItype)(v))) #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divl %4" \ : "=a" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "rm" ((USItype)(d))) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("bsrl %1,%0" \ : "=r" (__cbtmp) : "rm" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define count_trailing_zeros(count, x) \ __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x))) #ifndef UMUL_TIME #define UMUL_TIME 40 #endif #ifndef UDIV_TIME #define UDIV_TIME 40 #endif #endif /* 80x86 */ /*************************************** ************** I860 ***************** ***************************************/ #if defined (__i860__) && W_TYPE_SIZE == 32 #define rshift_rhlc(r,h,l,c) \ __asm__ ("shr %3,r0,r0\n" \ "shrd %1,%2,%0" \ "=r" (r) : "r" (h), "r" (l), "rn" (c)) #endif /* i860 */ /*************************************** ************** I960 ***************** ***************************************/ #if defined (__i960__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("cmpo 1,0\n" \ "addc %5,%4,%1\n" \ "addc %3,%2,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%dI" ((USItype)(ah)), \ "dI" ((USItype)(bh)), \ "%dI" ((USItype)(al)), \ "dI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("cmpo 0,0\n" \ "subc %5,%4,%1\n" \ "subc %3,%2,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "dI" ((USItype)(ah)), \ "dI" ((USItype)(bh)), \ "dI" ((USItype)(al)), \ "dI" ((USItype)(bl))) #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("emul %2,%1,%0" \ : "=d" (__xx.__ll) \ : "%dI" ((USItype)(u)), \ "dI" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("emul %2,%1,%0" \ : "=d" (__w) \ : "%dI" ((USItype)(u)), \ "dI" ((USItype)(v))); \ __w; }) #define udiv_qrnnd(q, r, nh, nl, d) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __nn; \ __nn.__i.__h = (nh); __nn.__i.__l = (nl); \ __asm__ ("ediv %d,%n,%0" \ : "=d" (__rq.__ll) \ : "dI" (__nn.__ll), \ "dI" ((USItype)(d))); \ (r) = __rq.__i.__l; (q) = __rq.__i.__h; \ } while (0) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("scanbit %1,%0" \ : "=r" (__cbtmp) \ : "r" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define COUNT_LEADING_ZEROS_0 (-32) /* sic */ #if defined (__i960mx) /* what is the proper symbol to test??? */ #define rshift_rhlc(r,h,l,c) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __nn; \ __nn.__i.__h = (h); __nn.__i.__l = (l); \ __asm__ ("shre %2,%1,%0" \ : "=d" (r) : "dI" (__nn.__ll), "dI" (c)); \ } #endif /* i960mx */ #endif /* i960 */ /*************************************** ************** 68000 **************** ***************************************/ #if (defined (__mc68000__) || defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add%.l %5,%1\n" \ "addx%.l %3,%0" \ : "=d" ((USItype)(sh)), \ "=&d" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "d" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub%.l %5,%1\n" \ "subx%.l %3,%0" \ : "=d" ((USItype)(sh)), \ "=&d" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "d" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) #define umul_ppmm(w1, w0, u, v) \ __asm__ ("mulu%.l %3,%1:%0" \ : "=d" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "%0" ((USItype)(u)), \ "dmi" ((USItype)(v))) #define UMUL_TIME 45 #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divu%.l %4,%1:%0" \ : "=d" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "dmi" ((USItype)(d))) #define UDIV_TIME 90 #define sdiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divs%.l %4,%1:%0" \ : "=d" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "dmi" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("bfffo %1{%b2:%b2},%0" \ : "=d" ((USItype)(count)) \ : "od" ((USItype)(x)), "n" (0)) #define COUNT_LEADING_ZEROS_0 32 #else /* not mc68020 */ #define umul_ppmm(xh, xl, a, b) \ do { USItype __umul_tmp1, __umul_tmp2; \ __asm__ ("| Inlined umul_ppmm \n" \ " move%.l %5,%3 \n" \ " move%.l %2,%0 \n" \ " move%.w %3,%1 \n" \ " swap %3 \n" \ " swap %0 \n" \ " mulu %2,%1 \n" \ " mulu %3,%0 \n" \ " mulu %2,%3 \n" \ " swap %2 \n" \ " mulu %5,%2 \n" \ " add%.l %3,%2 \n" \ " jcc 1f \n" \ " add%.l %#0x10000,%0 \n" \ "1: move%.l %2,%3 \n" \ " clr%.w %2 \n" \ " swap %2 \n" \ " swap %3 \n" \ " clr%.w %3 \n" \ " add%.l %3,%1 \n" \ " addx%.l %2,%0 \n" \ " | End inlined umul_ppmm" \ : "=&d" ((USItype)(xh)), "=&d" ((USItype)(xl)), \ "=d" (__umul_tmp1), "=&d" (__umul_tmp2) \ : "%2" ((USItype)(a)), "d" ((USItype)(b))); \ } while (0) #define UMUL_TIME 100 #define UDIV_TIME 400 #endif /* not mc68020 */ #endif /* mc68000 */ /*************************************** ************** 88000 **************** ***************************************/ #if defined (__m88000__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addu.co %1,%r4,%r5\n" \ "addu.ci %0,%r2,%r3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rJ" ((USItype)(ah)), \ "rJ" ((USItype)(bh)), \ "%rJ" ((USItype)(al)), \ "rJ" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subu.co %1,%r4,%r5\n" \ "subu.ci %0,%r2,%r3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rJ" ((USItype)(ah)), \ "rJ" ((USItype)(bh)), \ "rJ" ((USItype)(al)), \ "rJ" ((USItype)(bl))) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("ff1 %0,%1" \ : "=r" (__cbtmp) \ : "r" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define COUNT_LEADING_ZEROS_0 63 /* sic */ #if defined (__m88110__) #define umul_ppmm(wh, wl, u, v) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __x; \ __asm__ ("mulu.d %0,%1,%2" : "=r" (__x.__ll) : "r" (u), "r" (v)); \ (wh) = __x.__i.__h; \ (wl) = __x.__i.__l; \ } while (0) #define udiv_qrnnd(q, r, n1, n0, d) \ ({union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __x, __q; \ __x.__i.__h = (n1); __x.__i.__l = (n0); \ __asm__ ("divu.d %0,%1,%2" \ : "=r" (__q.__ll) : "r" (__x.__ll), "r" (d)); \ (r) = (n0) - __q.__l * (d); (q) = __q.__l; }) #define UMUL_TIME 5 #define UDIV_TIME 25 #else #define UMUL_TIME 17 #define UDIV_TIME 150 #endif /* __m88110__ */ #endif /* __m88000__ */ /*************************************** ************** MIPS ***************** ***************************************/ #if defined (__mips__) && W_TYPE_SIZE == 32 #if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) #define umul_ppmm(w1, w0, u, v) \ do { \ UDItype _r; \ _r = (UDItype) u * v; \ (w1) = _r >> 32; \ (w0) = (USItype) _r; \ } while (0) #elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 #define umul_ppmm(w1, w0, u, v) \ __asm__ ("multu %2,%3" \ : "=l" ((USItype)(w0)), \ "=h" ((USItype)(w1)) \ : "d" ((USItype)(u)), \ "d" ((USItype)(v))) #else #define umul_ppmm(w1, w0, u, v) \ __asm__ ("multu %2,%3 \n" \ "mflo %0 \n" \ "mfhi %1" \ : "=d" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "d" ((USItype)(u)), \ "d" ((USItype)(v))) #endif #define UMUL_TIME 10 #define UDIV_TIME 100 #endif /* __mips__ */ /*************************************** ************** MIPS/64 ************** ***************************************/ #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64 # if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) typedef unsigned int UTItype __attribute__ ((mode (TI))); # define umul_ppmm(w1, w0, u, v) \ do { \ UTItype _r; \ _r = (UTItype) u * v; \ (w1) = _r >> 64; \ (w0) = (UDItype) _r; \ } while (0) # elif __GNUC__ > 2 || __GNUC_MINOR__ >= 7 # define umul_ppmm(w1, w0, u, v) \ __asm__ ("dmultu %2,%3" \ : "=l" ((UDItype)(w0)), \ "=h" ((UDItype)(w1)) \ : "d" ((UDItype)(u)), \ "d" ((UDItype)(v))) # else # define umul_ppmm(w1, w0, u, v) \ __asm__ ("dmultu %2,%3 \n" \ "mflo %0 \n" \ "mfhi %1" \ : "=d" ((UDItype)(w0)), \ "=d" ((UDItype)(w1)) \ : "d" ((UDItype)(u)), \ "d" ((UDItype)(v))) # endif # define UMUL_TIME 20 # define UDIV_TIME 140 #endif /* __mips__ */ /*************************************** ************** 32000 **************** ***************************************/ #if defined (__ns32000__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("meid %2,%0" \ : "=g" (__xx.__ll) \ : "%0" ((USItype)(u)), \ "g" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("meid %2,%0" \ : "=g" (__w) \ : "%0" ((USItype)(u)), \ "g" ((USItype)(v))); \ __w; }) #define udiv_qrnnd(q, r, n1, n0, d) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ __asm__ ("deid %2,%0" \ : "=g" (__xx.__ll) \ : "0" (__xx.__ll), \ "g" ((USItype)(d))); \ (r) = __xx.__i.__l; (q) = __xx.__i.__h; }) #define count_trailing_zeros(count,x) \ do { __asm__ ("ffsd %2,%0" \ : "=r" ((USItype) (count)) \ : "0" ((USItype) 0), \ "r" ((USItype) (x))); \ } while (0) #endif /* __ns32000__ */ /*************************************** ************** PPC ****************** ***************************************/ #if (defined (_ARCH_PPC) || defined (_IBMR2)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ do { \ if (__builtin_constant_p (bh) && (bh) == 0) \ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ else \ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ } while (0) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ do { \ if (__builtin_constant_p (ah) && (ah) == 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) == 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else \ __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ } while (0) #define count_leading_zeros(count, x) \ __asm__ ("{cntlz|cntlzw} %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))) #define COUNT_LEADING_ZEROS_0 32 #if defined (_ARCH_PPC) #define umul_ppmm(ph, pl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mulhwu %0,%1,%2" \ : "=r" ((USItype) ph) \ : "%r" (__m0), \ "r" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define UMUL_TIME 15 #define smul_ppmm(ph, pl, m0, m1) \ do { \ SItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mulhw %0,%1,%2" \ : "=r" ((SItype) ph) \ : "%r" (__m0), \ "r" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define SMUL_TIME 14 #define UDIV_TIME 120 #else #define umul_ppmm(xh, xl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mul %0,%2,%3" \ : "=r" ((USItype)(xh)), \ "=q" ((USItype)(xl)) \ : "r" (__m0), \ "r" (__m1)); \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define UMUL_TIME 8 #define smul_ppmm(xh, xl, m0, m1) \ __asm__ ("mul %0,%2,%3" \ : "=r" ((SItype)(xh)), \ "=q" ((SItype)(xl)) \ : "r" (m0), \ "r" (m1)) #define SMUL_TIME 4 #define sdiv_qrnnd(q, r, nh, nl, d) \ __asm__ ("div %0,%2,%4" \ : "=r" ((SItype)(q)), "=q" ((SItype)(r)) \ : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d))) #define UDIV_TIME 100 #endif #endif /* Power architecture variants. */ /* Powerpc 64 bit support taken from gmp-4.1.2. */ /* We should test _IBMR2 here when we add assembly support for the system vendor compilers. */ #if 0 /* Not yet enabled because we don't have hardware for a test. */ #if (defined (_ARCH_PPC) || defined (__powerpc__)) && W_TYPE_SIZE == 64 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ do { \ if (__builtin_constant_p (bh) && (bh) == 0) \ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ : "=r" (sh), "=&r" (sl) : "r" (ah), "%r" (al), "rI" (bl));\ else \ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ : "=r" (sh), "=&r" (sl) \ : "%r" (ah), "r" (bh), "%r" (al), "rI" (bl)); \ } while (0) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ do { \ if (__builtin_constant_p (ah) && (ah) == 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ else if (__builtin_constant_p (ah) && (ah) == ~(UDItype) 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ : "=r" (sh), "=&r" (sl) : "r" (bh), "rI" (al), "r" (bl));\ else if (__builtin_constant_p (bh) && (bh) == 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ else if (__builtin_constant_p (bh) && (bh) == ~(UDItype) 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ : "=r" (sh), "=&r" (sl) : "r" (ah), "rI" (al), "r" (bl));\ else \ __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ : "=r" (sh), "=&r" (sl) \ : "r" (ah), "r" (bh), "rI" (al), "r" (bl)); \ } while (0) #define count_leading_zeros(count, x) \ __asm__ ("cntlzd %0,%1" : "=r" (count) : "r" (x)) #define COUNT_LEADING_ZEROS_0 64 #define umul_ppmm(ph, pl, m0, m1) \ do { \ UDItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mulhdu %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ (pl) = __m0 * __m1; \ } while (0) #define UMUL_TIME 15 #define smul_ppmm(ph, pl, m0, m1) \ do { \ DItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mulhd %0,%1,%2" : "=r" (ph) : "%r" (m0), "r" (m1)); \ (pl) = __m0 * __m1; \ } while (0) #define SMUL_TIME 14 /* ??? */ #define UDIV_TIME 120 /* ??? */ #endif /* 64-bit PowerPC. */ #endif /* if 0 */ /*************************************** ************** PYR ****************** ***************************************/ #if defined (__pyr__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addw %5,%1 \n" \ "addwc %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subw %5,%1 \n" \ "subwb %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) /* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */ #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("movw %1,%R0 \n" \ "uemul %2,%0" \ : "=&r" (__xx.__ll) \ : "g" ((USItype) (u)), \ "g" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #endif /* __pyr__ */ /*************************************** ************** RT/ROMP ************** ***************************************/ #if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("a %1,%5 \n" \ "ae %0,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "r" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("s %1,%5\n" \ "se %0,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "r" ((USItype)(bl))) #define umul_ppmm(ph, pl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ( \ "s r2,r2 \n" \ "mts r10,%2 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "m r2,%3 \n" \ "cas %0,r2,r0 \n" \ "mfs r10,%1" \ : "=r" ((USItype)(ph)), \ "=r" ((USItype)(pl)) \ : "%r" (__m0), \ "r" (__m1) \ : "r2"); \ (ph) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define UMUL_TIME 20 #define UDIV_TIME 200 #define count_leading_zeros(count, x) \ do { \ if ((x) >= 0x10000) \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x) >> 16)); \ else \ { \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))); \ (count) += 16; \ } \ } while (0) #endif /* RT/ROMP */ /*************************************** ************** SH2 ****************** ***************************************/ #if (defined (__sh2__) || defined(__sh3__) || defined(__SH4__) ) \ && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ __asm__ ( \ "dmulu.l %2,%3\n" \ "sts macl,%1\n" \ "sts mach,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v)) \ : "macl", "mach") #define UMUL_TIME 5 #endif /*************************************** ************** SPARC **************** ***************************************/ #if defined (__sparc__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addcc %r4,%5,%1\n" \ "addx %r2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rJ" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%rJ" ((USItype)(al)), \ "rI" ((USItype)(bl)) \ __CLOBBER_CC) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subcc %r4,%5,%1\n" \ "subx %r2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rJ" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "rJ" ((USItype)(al)), \ "rI" ((USItype)(bl)) \ __CLOBBER_CC) #if defined (__sparc_v8__) /* Don't match immediate range because, 1) it is not often useful, 2) the 'I' flag thinks of the range as a 13 bit signed interval, while we want to match a 13 bit interval, sign extended to 32 bits, but INTERPRETED AS UNSIGNED. */ #define umul_ppmm(w1, w0, u, v) \ __asm__ ("umul %2,%3,%1;rd %%y,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v))) #define UMUL_TIME 5 #ifndef SUPERSPARC /* SuperSPARC's udiv only handles 53 bit dividends */ #define udiv_qrnnd(q, r, n1, n0, d) \ do { \ USItype __q; \ __asm__ ("mov %1,%%y;nop;nop;nop;udiv %2,%3,%0" \ : "=r" ((USItype)(__q)) \ : "r" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "r" ((USItype)(d))); \ (r) = (n0) - __q * (d); \ (q) = __q; \ } while (0) #define UDIV_TIME 25 #endif /* SUPERSPARC */ #else /* ! __sparc_v8__ */ #if defined (__sparclite__) /* This has hardware multiply but not divide. It also has two additional instructions scan (ffs from high bit) and divscc. */ #define umul_ppmm(w1, w0, u, v) \ __asm__ ("umul %2,%3,%1;rd %%y,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v))) #define UMUL_TIME 5 #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("! Inlined udiv_qrnnd \n" \ " wr %%g0,%2,%%y ! Not a delayed write for sparclite \n" \ " tst %%g0 \n" \ " divscc %3,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%%g1 \n" \ " divscc %%g1,%4,%0 \n" \ " rd %%y,%1 \n" \ " bl,a 1f \n" \ " add %1,%4,%1 \n" \ "1: ! End of inline udiv_qrnnd" \ : "=r" ((USItype)(q)), \ "=r" ((USItype)(r)) \ : "r" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "rI" ((USItype)(d)) \ : "%g1" __AND_CLOBBER_CC) #define UDIV_TIME 37 #define count_leading_zeros(count, x) \ __asm__ ("scan %1,0,%0" \ : "=r" ((USItype)(x)) \ : "r" ((USItype)(count))) /* Early sparclites return 63 for an argument of 0, but they warn that future implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0 undefined. */ #endif /* __sparclite__ */ #endif /* __sparc_v8__ */ /* Default to sparc v7 versions of umul_ppmm and udiv_qrnnd. */ #ifndef umul_ppmm #define umul_ppmm(w1, w0, u, v) \ __asm__ ("! Inlined umul_ppmm \n" \ " wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr \n" \ " sra %3,31,%%g2 ! Don't move this insn \n" \ " and %2,%%g2,%%g2 ! Don't move this insn \n" \ " andcc %%g0,0,%%g1 ! Don't move this insn \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,%3,%%g1 \n" \ " mulscc %%g1,0,%%g1 \n" \ " add %%g1,%%g2,%0 \n" \ " rd %%y,%1" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "%rI" ((USItype)(u)), \ "r" ((USItype)(v)) \ : "%g1", "%g2" __AND_CLOBBER_CC) #define UMUL_TIME 39 /* 39 instructions */ #endif #ifndef udiv_qrnnd #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { USItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern USItype __udiv_qrnnd (); #define UDIV_TIME 140 #endif /* LONGLONG_STANDALONE */ #endif /* udiv_qrnnd */ #endif /* __sparc__ */ /*************************************** ************** VAX ****************** ***************************************/ #if defined (__vax__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addl2 %5,%1\n" \ "adwc %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subl2 %5,%1\n" \ "sbwc %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("emul %1,%2,$0,%0" \ : "=g" (__xx.__ll) \ : "g" (__m0), \ "g" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define sdiv_qrnnd(q, r, n1, n0, d) \ do { \ union {DItype __ll; \ struct {SItype __l, __h;} __i; \ } __xx; \ __xx.__i.__h = n1; __xx.__i.__l = n0; \ __asm__ ("ediv %3,%2,%0,%1" \ : "=g" (q), "=g" (r) \ : "g" (__xx.__ll), "g" (d)); \ } while (0) #endif /* __vax__ */ /*************************************** ************** Z8000 **************** ***************************************/ #if defined (__z8000__) && W_TYPE_SIZE == 16 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \ : "=r" ((unsigned int)(sh)), \ "=&r" ((unsigned int)(sl)) \ : "%0" ((unsigned int)(ah)), \ "r" ((unsigned int)(bh)), \ "%1" ((unsigned int)(al)), \ "rQR" ((unsigned int)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \ : "=r" ((unsigned int)(sh)), \ "=&r" ((unsigned int)(sl)) \ : "0" ((unsigned int)(ah)), \ "r" ((unsigned int)(bh)), \ "1" ((unsigned int)(al)), \ "rQR" ((unsigned int)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {long int __ll; \ struct {unsigned int __h, __l;} __i; \ } __xx; \ unsigned int __m0 = (m0), __m1 = (m1); \ __asm__ ("mult %S0,%H3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (__m0), \ "rQR" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((signed int) __m0 >> 15) & __m1) \ + (((signed int) __m1 >> 15) & __m0)); \ } while (0) #endif /* __z8000__ */ #endif /* __GNUC__ */ /*************************************** *********** Generic Versions ******** ***************************************/ #if !defined (umul_ppmm) && defined (__umulsidi3) #define umul_ppmm(ph, pl, m0, m1) \ { \ UDWtype __ll = __umulsidi3 (m0, m1); \ ph = (UWtype) (__ll >> W_TYPE_SIZE); \ pl = (UWtype) __ll; \ } #endif #if !defined (__umulsidi3) #define __umulsidi3(u, v) \ ({UWtype __hi, __lo; \ umul_ppmm (__hi, __lo, u, v); \ ((UDWtype) __hi << W_TYPE_SIZE) | __lo; }) #endif /* If this machine has no inline assembler, use C macros. */ #if !defined (add_ssaaaa) #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ do { \ UWtype __x; \ __x = (al) + (bl); \ (sh) = (ah) + (bh) + (__x < (al)); \ (sl) = __x; \ } while (0) #endif #if !defined (sub_ddmmss) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ do { \ UWtype __x; \ __x = (al) - (bl); \ (sh) = (ah) - (bh) - (__x > (al)); \ (sl) = __x; \ } while (0) #endif #if !defined (umul_ppmm) #define umul_ppmm(w1, w0, u, v) \ do { \ UWtype __x0, __x1, __x2, __x3; \ UHWtype __ul, __vl, __uh, __vh; \ UWtype __u = (u), __v = (v); \ \ __ul = __ll_lowpart (__u); \ __uh = __ll_highpart (__u); \ __vl = __ll_lowpart (__v); \ __vh = __ll_highpart (__v); \ \ __x0 = (UWtype) __ul * __vl; \ __x1 = (UWtype) __ul * __vh; \ __x2 = (UWtype) __uh * __vl; \ __x3 = (UWtype) __uh * __vh; \ \ __x1 += __ll_highpart (__x0);/* this can't give carry */ \ __x1 += __x2; /* but this indeed can */ \ if (__x1 < __x2) /* did we get it? */ \ __x3 += __ll_B; /* yes, add it in the proper pos. */ \ \ (w1) = __x3 + __ll_highpart (__x1); \ (w0) = (__ll_lowpart (__x1) << W_TYPE_SIZE/2) + __ll_lowpart (__x0);\ } while (0) #endif #if !defined (umul_ppmm) #define smul_ppmm(w1, w0, u, v) \ do { \ UWtype __w1; \ UWtype __m0 = (u), __m1 = (v); \ umul_ppmm (__w1, w0, __m0, __m1); \ (w1) = __w1 - (-(__m0 >> (W_TYPE_SIZE - 1)) & __m1) \ - (-(__m1 >> (W_TYPE_SIZE - 1)) & __m0); \ } while (0) #endif /* Define this unconditionally, so it can be used for debugging. */ #define __udiv_qrnnd_c(q, r, n1, n0, d) \ do { \ UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \ __d1 = __ll_highpart (d); \ __d0 = __ll_lowpart (d); \ \ __r1 = (n1) % __d1; \ __q1 = (n1) / __d1; \ __m = (UWtype) __q1 * __d0; \ __r1 = __r1 * __ll_B | __ll_highpart (n0); \ if (__r1 < __m) \ { \ __q1--, __r1 += (d); \ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ if (__r1 < __m) \ __q1--, __r1 += (d); \ } \ __r1 -= __m; \ \ __r0 = __r1 % __d1; \ __q0 = __r1 / __d1; \ __m = (UWtype) __q0 * __d0; \ __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ if (__r0 < __m) \ { \ __q0--, __r0 += (d); \ if (__r0 >= (d)) \ if (__r0 < __m) \ __q0--, __r0 += (d); \ } \ __r0 -= __m; \ \ (q) = (UWtype) __q1 * __ll_B | __q0; \ (r) = __r0; \ } while (0) /* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through __udiv_w_sdiv (defined in libgcc or elsewhere). */ #if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) #define udiv_qrnnd(q, r, nh, nl, d) \ do { \ UWtype __r; \ (q) = __MPN(udiv_w_sdiv) (&__r, nh, nl, d); \ (r) = __r; \ } while (0) #endif /* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */ #if !defined (udiv_qrnnd) #define UDIV_NEEDS_NORMALIZATION 1 #define udiv_qrnnd __udiv_qrnnd_c #endif #if !defined (count_leading_zeros) extern #ifdef __STDC__ const #endif unsigned char __clz_tab[]; #define MPI_INTERNAL_NEED_CLZ_TAB 1 #define count_leading_zeros(count, x) \ do { \ UWtype __xr = (x); \ UWtype __a; \ \ if (W_TYPE_SIZE <= 32) \ { \ __a = __xr < ((UWtype) 1 << 2*__BITS4) \ ? (__xr < ((UWtype) 1 << __BITS4) ? 0 : __BITS4) \ : (__xr < ((UWtype) 1 << 3*__BITS4) ? 2*__BITS4 : 3*__BITS4);\ } \ else \ { \ for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \ if (((__xr >> __a) & 0xff) != 0) \ break; \ } \ \ (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \ } while (0) /* This version gives a well-defined value for zero. */ #define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE #endif #if !defined (count_trailing_zeros) /* Define count_trailing_zeros using count_leading_zeros. The latter might be defined in asm, but if it is not, the C version above is good enough. */ #define count_trailing_zeros(count, x) \ do { \ UWtype __ctz_x = (x); \ UWtype __ctz_c; \ count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \ (count) = W_TYPE_SIZE - 1 - __ctz_c; \ } while (0) #endif #ifndef UDIV_NEEDS_NORMALIZATION #define UDIV_NEEDS_NORMALIZATION 0 #endif gnupg-1.4.20/mpi/hppa1.1/0000755000175000017500000000000012635457223011665 500000000000000gnupg-1.4.20/mpi/hppa1.1/mpih-mul2.S0000644000175000017500000000636512635262326013553 00000000000000/* hppa1.1 addmul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1993, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ /******************* * mpi_limb_t * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r26) * mpi_ptr_t s1_ptr, (r25) * mpi_size_t s1_size, (r24) * mpi_limb_t s2_limb) (r23) * * This runs at 11 cycles/limb on a PA7000. With the used instructions, it * can not become faster due to data cache contention after a store. On the * PA7100 it runs at 10 cycles/limb, and that can not be improved either, * since only the xmpyu does not need the integer pipeline, so the only * dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb * on the PA7100. * * There are some ideas described in mul1.S that applies to this code too. */ .code .export mpihelp_addmul_1 .label mpihelp_addmul_1 .proc .callinfo frame=64,no_calls .entry ldo 64(%r30),%r30 fldws,ma 4(%r25),%fr5 stw %r23,-16(%r30) ; move s2_limb ... addib,= -1,%r24,L$just_one_limb fldws -16(%r30),%fr4 ; ... into fr4 add %r0,%r0,%r0 ; clear carry xmpyu %fr4,%fr5,%fr6 fldws,ma 4(%r25),%fr7 fstds %fr6,-16(%r30) xmpyu %fr4,%fr7,%fr8 ldw -12(%r30),%r19 ; least significant limb in product ldw -16(%r30),%r28 fstds %fr8,-16(%r30) addib,= -1,%r24,L$end ldw -12(%r30),%r1 ; Main loop .label L$loop ldws 0(%r26),%r29 fldws,ma 4(%r25),%fr5 add %r29,%r19,%r19 stws,ma %r19,4(%r26) addc %r28,%r1,%r19 xmpyu %fr4,%fr5,%fr6 ldw -16(%r30),%r28 fstds %fr6,-16(%r30) addc %r0,%r28,%r28 addib,<> -1,%r24,L$loop ldw -12(%r30),%r1 .label L$end ldw 0(%r26),%r29 add %r29,%r19,%r19 stws,ma %r19,4(%r26) addc %r28,%r1,%r19 ldw -16(%r30),%r28 ldws 0(%r26),%r29 addc %r0,%r28,%r28 add %r29,%r19,%r19 stws,ma %r19,4(%r26) addc %r0,%r28,%r28 bv 0(%r2) ldo -64(%r30),%r30 .label L$just_one_limb xmpyu %fr4,%fr5,%fr6 ldw 0(%r26),%r29 fstds %fr6,-16(%r30) ldw -12(%r30),%r1 ldw -16(%r30),%r28 add %r29,%r1,%r19 stw %r19,0(%r26) addc %r0,%r28,%r28 bv 0(%r2) ldo -64(%r30),%r30 .exit .procend gnupg-1.4.20/mpi/hppa1.1/mpih-mul3.S0000644000175000017500000000677712635262326013563 00000000000000/* hppa1.1 submul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * * Copyright (C) 1992, 1993, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ /******************* * mpi_limb_t * mpihelp_submul_1( mpi_ptr_t res_ptr, (r26) * mpi_ptr_t s1_ptr, (r25) * mpi_size_t s1_size, (r24) * mpi_limb_t s2_limb) (r23) * * * This runs at 12 cycles/limb on a PA7000. With the used instructions, it * can not become faster due to data cache contention after a store. On the * PA7100 it runs at 11 cycles/limb, and that can not be improved either, * since only the xmpyu does not need the integer pipeline, so the only * dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb * on the PA7100. * * There are some ideas described in mul1.S that applies to this code too. * * It seems possible to make this run as fast as addmul_1, if we use * sub,>>= %r29,%r19,%r22 * addi 1,%r28,%r28 * but that requires reworking the hairy software pipeline... */ .code .export mpihelp_submul_1 .label mpihelp_submul_1 .proc .callinfo frame=64,no_calls .entry ldo 64(%r30),%r30 fldws,ma 4(%r25),%fr5 stw %r23,-16(%r30) ; move s2_limb ... addib,= -1,%r24,L$just_one_limb fldws -16(%r30),%fr4 ; ... into fr4 add %r0,%r0,%r0 ; clear carry xmpyu %fr4,%fr5,%fr6 fldws,ma 4(%r25),%fr7 fstds %fr6,-16(%r30) xmpyu %fr4,%fr7,%fr8 ldw -12(%r30),%r19 ; least significant limb in product ldw -16(%r30),%r28 fstds %fr8,-16(%r30) addib,= -1,%r24,L$end ldw -12(%r30),%r1 ; Main loop .label L$loop ldws 0(%r26),%r29 fldws,ma 4(%r25),%fr5 sub %r29,%r19,%r22 add %r22,%r19,%r0 stws,ma %r22,4(%r26) addc %r28,%r1,%r19 xmpyu %fr4,%fr5,%fr6 ldw -16(%r30),%r28 fstds %fr6,-16(%r30) addc %r0,%r28,%r28 addib,<> -1,%r24,L$loop ldw -12(%r30),%r1 .label L$end ldw 0(%r26),%r29 sub %r29,%r19,%r22 add %r22,%r19,%r0 stws,ma %r22,4(%r26) addc %r28,%r1,%r19 ldw -16(%r30),%r28 ldws 0(%r26),%r29 addc %r0,%r28,%r28 sub %r29,%r19,%r22 add %r22,%r19,%r0 stws,ma %r22,4(%r26) addc %r0,%r28,%r28 bv 0(%r2) ldo -64(%r30),%r30 .label L$just_one_limb xmpyu %fr4,%fr5,%fr6 ldw 0(%r26),%r29 fstds %fr6,-16(%r30) ldw -12(%r30),%r1 ldw -16(%r30),%r28 sub %r29,%r1,%r22 add %r22,%r1,%r0 stw %r22,0(%r26) addc %r0,%r28,%r28 bv 0(%r2) ldo -64(%r30),%r30 .exit .procend gnupg-1.4.20/mpi/hppa1.1/mpih-mul1.S0000644000175000017500000000671212635262326013546 00000000000000/* hppa1.1 mul_1 -- Multiply a limb vector with a limb and store * the result in a second limb vector. * * Copyright (C) 1992, 1993, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ /******************* * mpi_limb_t * mpihelp_mul_1( mpi_ptr_t res_ptr, (r26) * mpi_ptr_t s1_ptr, (r25) * mpi_size_t s1_size, (r24) * mpi_limb_t s2_limb) (r23) * * * * This runs at 9 cycles/limb on a PA7000. With the used instructions, it can * not become faster due to data cache contention after a store. On the * PA7100 it runs at 7 cycles/limb, and that can not be improved either, since * only the xmpyu does not need the integer pipeline, so the only dual-issue * we will get are addc+xmpyu. Unrolling would not help either CPU. * * We could use fldds to read two limbs at a time from the S1 array, and that * could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and * PA7100, respectively. We don't do that since it does not seem worth the * (alignment) troubles... * * At least the PA7100 is rumored to be able to deal with cache-misses * without stalling instruction issue. If this is true, and the cache is * actually also lockup-free, we should use a deeper software pipeline, and * load from S1 very early! (The loads and stores to -12(sp) will surely be * in the cache.) */ .code .export mpihelp_mul_1 .label mpihelp_mul_1 .proc .callinfo frame=64,no_calls .entry ldo 64(%r30),%r30 fldws,ma 4(%r25),%fr5 stw %r23,-16(%r30) ; move s2_limb ... addib,= -1,%r24,L$just_one_limb fldws -16(%r30),%fr4 ; ... into fr4 add %r0,%r0,%r0 ; clear carry xmpyu %fr4,%fr5,%fr6 fldws,ma 4(%r25),%fr7 fstds %fr6,-16(%r30) xmpyu %fr4,%fr7,%fr8 ldw -12(%r30),%r19 ; least significant limb in product ldw -16(%r30),%r28 fstds %fr8,-16(%r30) addib,= -1,%r24,L$end ldw -12(%r30),%r1 ; Main loop .label L$loop fldws,ma 4(%r25),%fr5 stws,ma %r19,4(%r26) addc %r28,%r1,%r19 xmpyu %fr4,%fr5,%fr6 ldw -16(%r30),%r28 fstds %fr6,-16(%r30) addib,<> -1,%r24,L$loop ldw -12(%r30),%r1 .label L$end stws,ma %r19,4(%r26) addc %r28,%r1,%r19 ldw -16(%r30),%r28 stws,ma %r19,4(%r26) addc %r0,%r28,%r28 bv 0(%r2) ldo -64(%r30),%r30 .label L$just_one_limb xmpyu %fr4,%fr5,%fr6 fstds %fr6,-16(%r30) ldw -16(%r30),%r28 ldo -64(%r30),%r30 bv 0(%r2) fstws %fr6R,0(%r26) .exit .procend gnupg-1.4.20/mpi/hppa1.1/distfiles0000644000175000017500000000006212635262326013512 00000000000000udiv-qrnnd.S mpih-mul1.S mpih-mul2.S mpih-mul3.S gnupg-1.4.20/mpi/hppa1.1/udiv-qrnnd.S0000644000175000017500000000444712635262326014027 00000000000000/* HP-PA __udiv_qrnnd division support, used from longlong.h. * This version runs fast on PA 7000 and later. * * Copyright (C) 1993, 1994, 1998, * 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * 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. */ /* INPUT PARAMETERS * rem_ptr gr26 * n1 gr25 * n0 gr24 * d gr23 */ .code .align 8 .label L$0000 .word 0x43f00000 .word 0x0 .export __udiv_qrnnd .label __udiv_qrnnd .proc .callinfo frame=64,no_calls .entry ldo 64(%r30),%r30 stws %r25,-16(0,%r30) ; n_hi stws %r24,-12(0,%r30) ; n_lo ldil L'L$0000,%r19 ; ' ldo R'L$0000(%r19),%r19 ; ' fldds -16(0,%r30),%fr5 stws %r23,-12(0,%r30) comib,<= 0,%r25,L$1 fcnvxf,dbl,dbl %fr5,%fr5 fldds 0(0,%r19),%fr4 fadd,dbl %fr4,%fr5,%fr5 .label L$1 fcpy,sgl %fr0,%fr6L fldws -12(0,%r30),%fr6R fcnvxf,dbl,dbl %fr6,%fr4 fdiv,dbl %fr5,%fr4,%fr5 fcnvfx,dbl,dbl %fr5,%fr4 fstws %fr4R,-16(%r30) xmpyu %fr4R,%fr6R,%fr6 ldws -16(%r30),%r28 fstds %fr6,-16(0,%r30) ldws -12(0,%r30),%r21 ldws -16(0,%r30),%r20 sub %r24,%r21,%r22 subb %r25,%r20,%r19 comib,= 0,%r19,L$2 ldo -64(%r30),%r30 add %r22,%r23,%r22 ldo -1(%r28),%r28 .label L$2 bv 0(%r2) stws %r22,0(0,%r26) .exit .procend gnupg-1.4.20/mpi/powerpc32/0000755000175000017500000000000012635457223012341 500000000000000gnupg-1.4.20/mpi/powerpc32/mpih-mul2.S0000644000175000017500000000510612635262326014217 00000000000000/* PowerPC-32 addmul_1 -- Multiply a limb vector with a limb and add * the result to a second limb vector. * Copyright (C) 1993, 1994, 1995, 1997, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" #ifndef USE_PPC_PATCHES /******************* * mpi_limb_t * mpihelp_addmul_1( mpi_ptr_t res_ptr, (r3) * mpi_ptr_t s1_ptr, (r4) * mpi_size_t s1_size, (r5) * mpi_limb_t s2_limb) (r6) * * This is a fairly straightforward implementation. The timing of the PC601 * is hard to understand, so I will wait to optimize this until I have some * hardware to play with. * * The code trivially generalizes to 64 bit limbs for the PC620. */ .toc .csect .mpihelp_addmul_1[PR] .align 2 .globl mpihelp_addmul_1 .globl .mpihelp_addmul_1 .csect mpihelp_addmul_1[DS] mpihelp_addmul_1: .long .mpihelp_addmul_1[PR], TOC[tc0], 0 .csect .mpihelp_addmul_1[PR] .mpihelp_addmul_1: mtctr 5 lwz 0,0(4) mullw 7,0,6 mulhwu 10,0,6 lwz 9,0(3) addc 8,7,9 addi 3,3,-4 bdz Lend Loop: lwzu 0,4(4) stwu 8,4(3) mullw 8,0,6 adde 7,8,10 mulhwu 10,0,6 lwz 9,4(3) addze 10,10 addc 8,7,9 bdnz Loop Lend: stw 8,4(3) addze 3,10 blr #else /* mp_limb_t mpn_addmul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_size_t s1_size, mp_limb_t s2_limb) Calculate res+s1*s2 and put result back in res; return carry. */ ENTRY(mpihelp_addmul_1) mtctr %r5 lwz %r0,0(%r4) mullw %r7,%r0,%r6 mulhwu %r10,%r0,%r6 lwz %r9,0(%r3) addc %r8,%r7,%r9 addi %r3,%r3,-4 /* adjust res_ptr */ bdz 1f 0: lwzu %r0,4(%r4) stwu %r8,4(%r3) mullw %r8,%r0,%r6 adde %r7,%r8,%r10 mulhwu %r10,%r0,%r6 lwz %r9,4(%r3) addze %r10,%r10 addc %r8,%r7,%r9 bdnz 0b 1: stw %r8,4(%r3) addze %r3,%r10 blr END(mpihelp_addmul_1) #endif gnupg-1.4.20/mpi/powerpc32/mpih-mul3.S0000644000175000017500000000542012635262326014217 00000000000000/* PowerPC-32 submul_1 -- Multiply a limb vector with a limb and subtract * the result from a second limb vector. * * Copyright (C) 1993, 1994, 1995, 1997, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" #ifndef USE_PPC_PATCHES /******************* * mpi_limb_t * mpihelp_submul_1( mpi_ptr_t res_ptr, (r3) * mpi_ptr_t s1_ptr, (r4) * mpi_size_t s1_size, (r5) * mpi_limb_t s2_limb) (r6) * * This is a fairly straightforward implementation. The timing of the PC601 * is hard to understand, so I will wait to optimize this until I have some * hardware to play with. * * The code trivially generalizes to 64 bit limbs for the PC620. */ .toc .csect .mpihelp_submul_1[PR] .align 2 .globl mpihelp_submul_1 .globl .mpihelp_submul_1 .csect mpihelp_submul_1[DS] mpihelp_submul_1: .long .mpihelp_submul_1[PR], TOC[tc0], 0 .csect .mpihelp_submul_1[PR] .mpihelp_submul_1: mtctr 5 lwz 0,0(4) mullw 7,0,6 mulhwu 10,0,6 lwz 9,0(3) subfc 8,7,9 addc 7,7,8 # invert cy (r7 is junk) addi 3,3,-4 bdz Lend Loop: lwzu 0,4(4) stwu 8,4(3) mullw 8,0,6 adde 7,8,10 mulhwu 10,0,6 lwz 9,4(3) addze 10,10 subfc 8,7,9 addc 7,7,8 # invert cy (r7 is junk) bdnz Loop Lend: stw 8,4(3) addze 3,10 blr #else /* mp_limb_t mpn_submul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_size_t s1_size, mp_limb_t s2_limb) Calculate res-s1*s2 and put result back in res; return carry. */ ENTRY(mpihelp_submul_1) mtctr %r5 lwz %r0,0(%r4) mullw %r7,%r0,%r6 mulhwu %r10,%r0,%r6 lwz %r9,0(%r3) subf %r8,%r7,%r9 addc %r7,%r7,%r8 # invert cy (r7 is junk) addi %r3,%r3,-4 # adjust res_ptr bdz 1f 0: lwzu %r0,4(%r4) stwu %r8,4(%r3) mullw %r8,%r0,%r6 adde %r7,%r8,%r10 mulhwu %r10,%r0,%r6 lwz %r9,4(%r3) addze %r10,%r10 subf %r8,%r7,%r9 addc %r7,%r7,%r8 # invert cy (r7 is junk) bdnz 0b 1: stw %r8,4(%r3) addze %r3,%r10 blr END(mpihelp_submul_1) #endif gnupg-1.4.20/mpi/powerpc32/syntax.h0000644000175000017500000000450012635262326013755 00000000000000/* gmp2-2.0.2-ppc/mpn/powerpc-linux/syntax.h Tue Oct 6 19:27:01 1998 */ /* From glibc's sysdeps/unix/sysv/linux/powerpc/sysdep.h */ /* Copyright (C) 1992, 1997, 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 3 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, see . */ #define USE_PPC_PATCHES 1 /* This seems to always be the case on PPC. */ #define ALIGNARG(log2) log2 /* For ELF we need the `.type' directive to make shared libs work right. */ #define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg; #define ASM_SIZE_DIRECTIVE(name) .size name,.-name #define ASM_GLOBAL_DIRECTIVE .globl #ifdef __STDC__ # define C_LABEL(name) C_SYMBOL_NAME(name)##: #else # define C_LABEL(name) C_SYMBOL_NAME(name)/**/: #endif #ifdef __STDC__ # define L(body) .L##body #else # define L(body) .L/**/body #endif /* No profiling of gmp's assembly for now... */ #define CALL_MCOUNT /* no profiling */ #define ENTRY(name) \ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ .align ALIGNARG(2); \ C_LABEL(name) \ CALL_MCOUNT #define EALIGN_W_0 /* No words to insert. */ #define EALIGN_W_1 nop #define EALIGN_W_2 nop;nop #define EALIGN_W_3 nop;nop;nop #define EALIGN_W_4 EALIGN_W_3;nop #define EALIGN_W_5 EALIGN_W_4;nop #define EALIGN_W_6 EALIGN_W_5;nop #define EALIGN_W_7 EALIGN_W_6;nop /* EALIGN is like ENTRY, but does alignment to 'words'*4 bytes past a 2^align boundary. */ #define EALIGN(name, alignt, words) \ ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name); \ ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \ .align ALIGNARG(alignt); \ EALIGN_W_##words; \ C_LABEL(name) #undef END #define END(name) \ ASM_SIZE_DIRECTIVE(name) gnupg-1.4.20/mpi/powerpc32/mpih-rshift.S0000644000175000017500000000455112635262326014642 00000000000000/* PowerPC-32 rshift * Copyright (C) 1995, 1997, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" #ifndef USE_PPC_PATCHES /******************* * mpi_limb_t * mpihelp_rshift( mpi_ptr_t wp, (r3) * mpi_ptr_t up, (r4) * mpi_size_t usize, (r5) * unsigned cnt) (r6) */ .toc .csect .text[PR] .align 2 .globl mpihelp_rshift .globl .mpihelp_rshift .csect mpihelp_rshift[DS] mpihelp_rshift: .long .mpihelp_rshift, TOC[tc0], 0 .csect .text[PR] .mpihelp_rshift: mtctr 5 # copy size into CTR addi 7,3,-4 # move adjusted res_ptr to free return reg subfic 8,6,32 lwz 11,0(4) # load first s1 limb slw 3,11,8 # compute function return value bdz Lend1 Loop: lwzu 10,4(4) srw 9,11,6 slw 12,10,8 or 9,9,12 stwu 9,4(7) bdz Lend2 lwzu 11,4(4) srw 9,10,6 slw 12,11,8 or 9,9,12 stwu 9,4(7) bdnz Loop Lend1: srw 0,11,6 stw 0,4(7) blr Lend2: srw 0,10,6 stw 0,4(7) blr #else /* INPUT PARAMETERS res_ptr r3 s1_ptr r4 size r5 cnt r6 */ ENTRY(mpihelp_rshift) mtctr 5 # copy size into CTR addi 7,3,-4 # move adjusted res_ptr to free return reg subfic 8,6,32 lwz 11,0(4) # load first s1 limb slw 3,11,8 # compute function return value bdz 1f 0: lwzu 10,4(4) srw 9,11,6 slw 12,10,8 or 9,9,12 stwu 9,4(7) bdz 2f lwzu 11,4(4) srw 9,10,6 slw 12,11,8 or 9,9,12 stwu 9,4(7) bdnz 0b 1: srw 0,11,6 stw 0,4(7) blr 2: srw 0,10,6 stw 0,4(7) blr END(mpihelp_rshift) #endif gnupg-1.4.20/mpi/powerpc32/mpih-add1.S0000644000175000017500000000615212635262326014153 00000000000000/* PowerPC-32 add_n -- Add two limb vectors of equal, non-zero length. * Copyright (C) 1992, 1994, 1995, 1997, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" #ifndef USE_PPC_PATCHES /******************* * mpi_limb_t * mpihelp_add_n( mpi_ptr_t res_ptr, (r3) * mpi_ptr_t s1_ptr, (r4) * mpi_ptr_t s2_ptr, (r5) * mpi_size_t size) (r6) */ .toc .extern mpihelp_add_n[DS] .extern .mpihelp_add_n .csect [PR] .align 2 .globl mpihelp_add_n .globl .mpihelp_add_n .csect mpihelp_add_n[DS] mpihelp_add_n: .long .mpihelp_add_n, TOC[tc0], 0 .csect [PR] .mpihelp_add_n: mtctr 6 # copy size into CTR lwz 8,0(4) # load least significant s1 limb lwz 0,0(5) # load least significant s2 limb addi 3,3,-4 # offset res_ptr, it is updated before used addc 7,0,8 # add least significant limbs, set cy bdz Lend # If done, skip loop Loop: lwzu 8,4(4) # load s1 limb and update s1_ptr lwzu 0,4(5) # load s2 limb and update s2_ptr stwu 7,4(3) # store previous limb in load latency slot adde 7,0,8 # add new limbs with cy, set cy bdnz Loop # decrement CTR and loop back Lend: stw 7,4(3) # store ultimate result limb li 3,0 # load cy into ... addze 3,3 # ... return value register blr #else #include "sysdep.h" #include "asm-syntax.h" /* mp_limb_t mpn_add_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size) Calculate s1+s2 and put result in res_ptr; return carry, 0 or 1. */ /* Note on optimisation: This code is optimal for the 601. Almost every other possible 2-unrolled inner loop will not be. Also, watch out for the alignment... */ EALIGN(mpihelp_add_n,3,0) /* Set up for loop below. */ mtcrf 0x01,%r6 srwi. %r7,%r6,1 li %r10,0 mtctr %r7 bt 31,2f /* Clear the carry. */ addic %r0,%r0,0 /* Adjust pointers for loop. */ addi %r3,%r3,-4 addi %r4,%r4,-4 addi %r5,%r5,-4 b 0f 2: lwz %r7,0(%r5) lwz %r6,0(%r4) addc %r6,%r6,%r7 stw %r6,0(%r3) beq 1f /* The loop. */ /* Align start of loop to an odd word boundary to guarantee that the last two words can be fetched in one access (for 601). */ 0: lwz %r9,4(%r4) lwz %r8,4(%r5) lwzu %r6,8(%r4) lwzu %r7,8(%r5) adde %r8,%r9,%r8 stw %r8,4(%r3) adde %r6,%r6,%r7 stwu %r6,8(%r3) bdnz 0b /* Return the carry. */ 1: addze %r3,%r10 blr END(mpihelp_add_n) #endif gnupg-1.4.20/mpi/powerpc32/mpih-mul1.S0000644000175000017500000000472712635262326014226 00000000000000/* PowerPC-32 mul_1 -- Multiply a limb vector with a limb and store * the result in a second limb vector. * * Copyright (C) 1992, 1993, 1994, 1995, 1997 * 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" #ifndef USE_PPC_PATCHES /******************* * mpi_limb_t * mpihelp_mul_1( mpi_ptr_t res_ptr, (r3) * mpi_ptr_t s1_ptr, (r4) * mpi_size_t s1_size, (r5) * mpi_limb_t s2_limb) (r6) * * This is a fairly straightforward implementation. The timing of the PC601 * is hard to understand, so I will wait to optimize this until I have some * hardware to play with. * * The code trivially generalizes to 64 bit limbs for the PC620. */ .toc .csect .mpihelp_mul_1[PR] .align 2 .globl mpihelp_mul_1 .globl .mpihelp_mul_1 .csect mpihelp_mul_1[DS] mpihelp_mul_1: .long .mpihelp_mul_1[PR], TOC[tc0], 0 .csect .mpihelp_mul_1[PR] .mpihelp_mul_1: mtctr 5 lwz 0,0(4) mullw 7,0,6 mulhwu 10,0,6 addi 3,3,-4 # adjust res_ptr addic 5,5,0 # clear cy with dummy insn bdz Lend Loop: lwzu 0,4(4) stwu 7,4(3) mullw 8,0,6 adde 7,8,10 mulhwu 10,0,6 bdnz Loop Lend: stw 7,4(3) addze 3,10 blr #else /* mp_limb_t mpn_mul_1 (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_size_t s1_size, mp_limb_t s2_limb) Calculate s1*s2 and put result in res_ptr; return carry. */ ENTRY(mpihelp_mul_1) mtctr %r5 lwz %r0,0(%r4) mullw %r7,%r0,%r6 mulhwu %r10,%r0,%r6 addi %r3,%r3,-4 # adjust res_ptr addic %r5,%r5,0 # clear cy with dummy insn bdz 1f 0: lwzu %r0,4(%r4) stwu %r7,4(%r3) mullw %r8,%r0,%r6 adde %r7,%r8,%r10 mulhwu %r10,%r0,%r6 bdnz 0b 1: stw %r7,4(%r3) addze %r3,%r10 blr END(mpihelp_mul_1) #endif gnupg-1.4.20/mpi/powerpc32/distfiles0000644000175000017500000000014212635262326014165 00000000000000mpih-add1.S mpih-sub1.S mpih-mul1.S mpih-mul2.S mpih-mul3.S mpih-lshift.S mpih-rshift.S syntax.h gnupg-1.4.20/mpi/powerpc32/mpih-lshift.S0000644000175000017500000001043512635262326014632 00000000000000/* PowerPC-32 lshift * Copyright (C) 1995, 1996, 1997, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" #ifndef USE_PPC_PATCHES /******************* * mpi_limb_t * mpihelp_lshift( mpi_ptr_t wp, (r3) * mpi_ptr_t up, (r4) * mpi_size_t usize, (r5) * unsigned cnt) (r6) */ .toc .csect .text[PR] .align 2 .globl mpihelp_lshift .globl .mpihelp_lshift .csect mpihelp_lshift[DS] mpihelp_lshift: .long .mpihelp_lshift, TOC[tc0], 0 .csect .text[PR] .mpihelp_lshift: mtctr 5 # copy size into CTR slwi 0,5,2 add 7,3,0 # make r7 point at end of res add 4,4,0 # make r4 point at end of s1 subfic 8,6,32 lwzu 11,-4(4) # load first s1 limb srw 3,11,8 # compute function return value bdz Lend1 Loop: lwzu 10,-4(4) slw 9,11,6 srw 12,10,8 or 9,9,12 stwu 9,-4(7) bdz Lend2 lwzu 11,-4(4) slw 9,10,6 srw 12,11,8 or 9,9,12 stwu 9,-4(7) bdnz Loop Lend1: slw 0,11,6 stw 0,-4(7) blr Lend2: slw 0,10,6 stw 0,-4(7) blr #else /* mp_limb_t mpn_lshift (mp_ptr wp, mp_srcptr up, mp_size_t usize, unsigned int cnt) */ EALIGN(mpihelp_lshift,3,0) mtctr %r5 # copy size into CTR cmplwi %cr0,%r5,16 # is size < 16 slwi %r0,%r5,2 add %r7,%r3,%r0 # make r7 point at end of res add %r4,%r4,%r0 # make r4 point at end of s1 lwzu %r11,-4(%r4) # load first s1 limb subfic %r8,%r6,32 srw %r3,%r11,%r8 # compute function return value bge %cr0,L(big) # branch if size >= 16 bdz L(end1) 0: lwzu %r10,-4(%r4) slw %r9,%r11,%r6 srw %r12,%r10,%r8 or %r9,%r9,%r12 stwu %r9,-4(%r7) bdz L(end2) lwzu %r11,-4(%r4) slw %r9,%r10,%r6 srw %r12,%r11,%r8 or %r9,%r9,%r12 stwu %r9,-4(%r7) bdnz 0b L(end1):slw %r0,%r11,%r6 stw %r0,-4(%r7) blr /* Guaranteed not to succeed. */ L(boom): tweq %r0,%r0 /* We imitate a case statement, by using (yuk!) fixed-length code chunks, of size 4*12 bytes. We have to do this (or something) to make this PIC. */ L(big): mflr %r9 bltl- %cr0,L(boom) # Never taken, only used to set LR. slwi %r10,%r6,4 mflr %r12 add %r10,%r12,%r10 slwi %r8,%r6,5 add %r10,%r8,%r10 mtctr %r10 addi %r5,%r5,-1 mtlr %r9 bctr L(end2):slw %r0,%r10,%r6 stw %r0,-4(%r7) blr #define DO_LSHIFT(n) \ mtctr %r5; \ 0: lwzu %r10,-4(%r4); \ slwi %r9,%r11,n; \ inslwi %r9,%r10,n,32-n; \ stwu %r9,-4(%r7); \ bdz- L(end2); \ lwzu %r11,-4(%r4); \ slwi %r9,%r10,n; \ inslwi %r9,%r11,n,32-n; \ stwu %r9,-4(%r7); \ bdnz 0b; \ b L(end1) DO_LSHIFT(1) DO_LSHIFT(2) DO_LSHIFT(3) DO_LSHIFT(4) DO_LSHIFT(5) DO_LSHIFT(6) DO_LSHIFT(7) DO_LSHIFT(8) DO_LSHIFT(9) DO_LSHIFT(10) DO_LSHIFT(11) DO_LSHIFT(12) DO_LSHIFT(13) DO_LSHIFT(14) DO_LSHIFT(15) DO_LSHIFT(16) DO_LSHIFT(17) DO_LSHIFT(18) DO_LSHIFT(19) DO_LSHIFT(20) DO_LSHIFT(21) DO_LSHIFT(22) DO_LSHIFT(23) DO_LSHIFT(24) DO_LSHIFT(25) DO_LSHIFT(26) DO_LSHIFT(27) DO_LSHIFT(28) DO_LSHIFT(29) DO_LSHIFT(30) DO_LSHIFT(31) END(mpihelp_lshift) #endif gnupg-1.4.20/mpi/powerpc32/mpih-sub1.S0000644000175000017500000000626612635262326014222 00000000000000/* PowerPC-32 sub_n -- Subtract two limb vectors of the same length > 0 * and store difference in a third limb vector. * Copyright (C) 1992, 1994, 1995, 1997, 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 3 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, see . */ #include "sysdep.h" #include "asm-syntax.h" #ifndef USE_PPC_PATCHES /******************* * mpi_limb_t * mpihelp_sub_n( mpi_ptr_t res_ptr, (r3) * mpi_ptr_t s1_ptr, (r4) * mpi_ptr_t s2_ptr, (r5) * mpi_size_t size) (r6) */ .toc .extern mpihelp_sub_n[DS] .extern .mpihelp_sub_n .csect [PR] .align 2 .globl mpihelp_sub_n .globl .mpihelp_sub_n .csect mpihelp_sub_n[DS] mpihelp_sub_n: .long .mpihelp_sub_n, TOC[tc0], 0 .csect [PR] .mpihelp_sub_n: mtctr 6 # copy size into CTR lwz 8,0(4) # load least significant s1 limb lwz 0,0(5) # load least significant s2 limb addi 3,3,-4 # offset res_ptr, it is updated before used subfc 7,0,8 # add least significant limbs, set cy bdz Lend # If done, skip loop Loop: lwzu 8,4(4) # load s1 limb and update s1_ptr lwzu 0,4(5) # load s2 limb and update s2_ptr stwu 7,4(3) # store previous limb in load latency slot subfe 7,0,8 # add new limbs with cy, set cy bdnz Loop # decrement CTR and loop back Lend: stw 7,4(3) # store ultimate result limb subfe 3,0,0 # load !cy into ... subfic 3,3,0 # ... return value register blr #else /* mp_limb_t mpn_sub_n (mp_ptr res_ptr, mp_srcptr s1_ptr, mp_srcptr s2_ptr, mp_size_t size) Calculate s1-s2 and put result in res_ptr; return borrow, 0 or 1. */ /* Note on optimisation: This code is optimal for the 601. Almost every other possible 2-unrolled inner loop will not be. Also, watch out for the alignment... */ EALIGN(mpihelp_sub_n,3,1) /* Set up for loop below. */ mtcrf 0x01,%r6 srwi. %r7,%r6,1 mtctr %r7 bt 31,2f /* Set the carry (clear the borrow). */ subfc %r0,%r0,%r0 /* Adjust pointers for loop. */ addi %r3,%r3,-4 addi %r4,%r4,-4 addi %r5,%r5,-4 b 0f 2: lwz %r7,0(%r5) lwz %r6,0(%r4) subfc %r6,%r7,%r6 stw %r6,0(%r3) beq 1f /* Align start of loop to an odd word boundary to guarantee that the last two words can be fetched in one access (for 601). This turns out to be important. */ 0: lwz %r9,4(%r4) lwz %r8,4(%r5) lwzu %r6,8(%r4) lwzu %r7,8(%r5) subfe %r8,%r8,%r9 stw %r8,4(%r3) subfe %r6,%r7,%r6 stwu %r6,8(%r3) bdnz 0b /* Return the borrow. */ 1: subfe %r3,%r3,%r3 neg %r3,%r3 blr END(mpihelp_sub_n) #endif gnupg-1.4.20/mpi/mpi-mpow.c0000644000175000017500000000455712635262326012357 00000000000000/* mpi-mpow.c - MPI functions * Copyright (C) 1998, 1999, 2000 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 3 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, see . */ #include #include #include #include "mpi-internal.h" #include "longlong.h" #include static int build_index( MPI *exparray, int k, int i, int t ) { int j, bitno; int idx = 0; bitno = t-i; for(j=k-1; j >= 0; j-- ) { idx <<= 1; if( mpi_test_bit( exparray[j], bitno ) ) idx |= 1; } return idx; } /**************** * RES = (BASE[0] ^ EXP[0]) * (BASE[1] ^ EXP[1]) * ... * mod M */ void mpi_mulpowm( MPI res, MPI *basearray, MPI *exparray, MPI m) { int k; /* number of elements */ int t; /* bit size of largest exponent */ int i, j, idx; MPI *G; /* table with precomputed values of size 2^k */ MPI tmp; for(k=0; basearray[k]; k++ ) ; assert(k); for(t=0, i=0; (tmp=exparray[i]); i++ ) { j = mpi_get_nbits(tmp); if( j > t ) t = j; } assert(i==k); assert(t); assert( k < 10 ); G = xmalloc_clear( (1<= 0 && idx < (1<. # sourced by ../configure to get the list of files to link # this should set $mpi_ln_list. # Note: this is called from the above directory. mpi_extra_modules= mpi_sflags= test -d ./mpi || mkdir ./mpi echo '/* created by config.links - do not edit */' >./mpi/asm-syntax.h echo "/* Host: ${host} */" >>./mpi/asm-syntax.h if test "$try_asm_modules" = "yes" ; then case "${host}" in powerpc-apple-darwin* | \ i[34567]86*-*-openbsd[12]* | \ i[34567]86*-*-openbsd3.[0123]*) echo '/* No working assembler modules available */' >>./mpi/asm-syntax.h path="" ;; i[3467]86*-*-openbsd* | \ i[3467]86*-*-freebsd*-elf | \ i[3467]86*-*-freebsd[3-9]* | \ i[3467]86*-*-freebsdelf* | \ i[3467]86*-*-netbsd* | \ i[3467]86*-*-k*bsd*) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i386" ;; i586*-*-openbsd* | \ i586*-*-freebsd*-elf | \ i586*-*-freebsd[3-9]* | \ i586*-*-freebsdelf* | \ i586*-*-netbsd* | \ i586*-*-k*bsd* | \ pentium-*-netbsd* | \ pentiumpro-*-netbsd*) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i586 i386" ;; i[34]86*-*-bsdi4*) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i386" ;; i[3467]86*-*-linuxaout* | \ i[3467]86*-*-linuxoldld* | \ i[3467]86*-*-*bsd*) echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h echo '#define X86_BROKEN_ALIGN' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i386" ;; i586*-*-linuxaout* | \ i586*-*-linuxoldld* | \ i586*-*-*bsd*) echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h echo '#define X86_BROKEN_ALIGN' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i586 i386" ;; i[3467]86*-msdosdjgpp*) echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i386" ;; i586*-msdosdjgpp*) echo '#define BSD_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i586 i386" ;; i[3467]86*-*-*) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i386" ;; i586*-*-* | \ pentium-*-* | \ pentiumpro-*-*) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/i386/syntax.h >>./mpi/asm-syntax.h path="i586 i386" ;; alpha*-*-*) echo '/* configured for alpha */' >>./mpi/asm-syntax.h path="alpha" mpi_extra_modules="udiv-qrnnd" ;; hppa7000*-*-*) echo '/* configured for HPPA (pa7000) */' >>./mpi/asm-syntax.h path="hppa1.1 hppa" mpi_extra_modules="udiv-qrnnd" ;; hppa1.0*-*-*) echo '/* configured for HPPA 1.0 */' >>./mpi/asm-syntax.h path="hppa" mpi_extra_modules="udiv-qrnnd" ;; hppa*-*-*) # assume pa7100 echo '/* configured for HPPA (pa7100) */' >>./mpi/asm-syntax.h path="pa7100 hppa1.1 hppa" mpi_extra_modules="udiv-qrnnd" ;; sparc64-*-linux-gnu) echo '/* No working assembler modules available */' >>./mpi/asm-syntax.h path="" ;; sparc64-sun-solaris2*) echo '/* No working assembler modules available */' >>./mpi/asm-syntax.h path="" ;; sparc64-*-netbsd* | sparc64-*-freebsd* | sparc64-*-openbsd*) # There are no sparc64 assembler modules that work on the # *BSDs, so use the generic C functions. echo '/* No working assembler modules available */' >>./mpi/asm-syntax.h path="" ;; sparc64*-*-*) echo '/* No working assembler modules available */' >>./mpi/asm-syntax.h path="" ;; sparc9*-*-* | \ ultrasparc*-*-* ) echo '/* configured for sparc9 or higher */' >>./mpi/asm-syntax.h path="sparc32v8 sparc32" ;; sparc8*-*-* | \ microsparc*-*-*) echo '/* configured for sparc8 */' >>./mpi/asm-syntax.h path="sparc32v8 sparc32" ;; supersparc*-*-*) echo '/* configured for supersparc */' >>./mpi/asm-syntax.h path="supersparc sparc32v8 sparc32" mpi_extra_modules="udiv" ;; sparc*-*-*) echo '/* configured for sparc */' >>./mpi/asm-syntax.h path="sparc32" mpi_extra_modules="udiv" ;; mips[34]*-*-* | \ mips*-*-irix6*) echo '/* configured for MIPS3 */' >>./mpi/asm-syntax.h path="mips3" ;; mips*-*-*) echo '/* configured for MIPS2 */' >>./mpi/asm-syntax.h path="mips2" ;; # Motorola 68k configurations. Let m68k mean 68020-68040. # mc68000 or mc68060 configurations need to be specified explicitly m680[234]0*-*-linuxaout* | \ m68k*-*-linuxaout*) echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h path="m68k/mc68020 m68k" ;; m68060*-*-linuxaout*) echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h path="m68k" ;; m680[234]0*-*-linux* | \ m68k*-*-linux*) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h ;; m68060*-*-linux*) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h path="m68k" ;; m68k*-*-netbsdelf) echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h path="m68k" ;; m68k-atari-mint) echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h path="m68k/mc68020 m68k" ;; m68000*-*-* | \ m68060*-*-*) echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h path="m68k/mc68000" ;; m680[234]0*-*-* | \ m68k*-*-*) echo '#define MIT_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/m68k/syntax.h >>./mpi/asm-syntax.h path="m68k/mc68020 m68k" ;; ppc620-*-* | \ powerpc64*-*-*) mpi_sflags="-Wa,-mppc" path="powerpc64" ;; powerpc*-*-linux*) echo '/* configured for powerpc/ELF */' >>./mpi/asm-syntax.h echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/powerpc32/syntax.h >>./mpi/asm-syntax.h path="powerpc32" ;; powerpc*-*-netbsd* | powerpc*-*-openbsd*) echo '/* configured for {Open,Net}BSD on powerpc */' >>./mpi/asm-syntax.h echo '#define ELF_SYNTAX' >>./mpi/asm-syntax.h cat $srcdir/mpi/powerpc32/syntax.h >>./mpi/asm-syntax.h mpi_sflags="-Wa,-mppc" path="powerpc32" ;; rs6000-*-aix[456789]* | \ rs6000-*-aix3.2.[456789]) mpi_sflags="-Wa,-mpwr" path="power" mpi_extra_modules="udiv-w-sdiv" ;; rs6000-*-* | \ power-*-* | \ power2-*-*) mpi_sflags="-Wa,-mppc" path="power" mpi_extra_modules="udiv-w-sdiv" ;; powerpc-ibm-aix4.2.* ) # I am not sure about this one but a machine identified by # powerpc-ibm-aix4.2.1.0 cannot use the powerpc32 code. mpi_sflags="-Wa,-mpwr" path="power" mpi_extra_modules="udiv-w-sdiv" ;; ppc601-*-*) mpi_sflags="-Wa,-mppc" path="power powerpc32" ;; ppc60[234]*-*-* | \ powerpc*-*-*) mpi_sflags="-Wa,-mppc" path="powerpc32" ;; *) echo '/* No assembler modules configured */' >>./mpi/asm-syntax.h path="" ;; esac else echo '/* Assembler modules disabled on request */' >>./mpi/asm-syntax.h path="" fi # Make sysdep.h echo '/* created by config.links - do not edit */' >./mpi/sysdep.h if test x$ac_cv_sys_symbol_underscore = xyes; then cat <>./mpi/sysdep.h #if __STDC__ #define C_SYMBOL_NAME(name) _##name #else #define C_SYMBOL_NAME(name) _/**/name #endif EOF else cat <>./mpi/sysdep.h #define C_SYMBOL_NAME(name) name EOF fi # fixme: grep these modules from Makefile.in mpi_ln_modules="${mpi_extra_modules} mpih-add1 mpih-mul1 mpih-mul2 mpih-mul3 \ mpih-lshift mpih-rshift mpih-sub1" mpi_ln_objects= mpi_ln_list= # try to get file to link from the assembler subdirectory and # if this fails get it from the generic subdirectory. path="$path generic" for fn in $mpi_ln_modules ; do mpi_ln_objects="$mpi_ln_objects $fn.o" for dir in $path ; do rm -f $srcdir/mpi/$fn.[Sc] if test -f $srcdir/mpi/$dir/$fn.S ; then mpi_ln_list="$mpi_ln_list mpi/$fn.S:mpi/$dir/$fn.S" break; elif test -f $srcdir/mpi/$dir/$fn.c ; then mpi_ln_list="$mpi_ln_list mpi/$fn.c:mpi/$dir/$fn.c" break; fi done done # Same thing for the file which defines the limb size path="$path generic" for dir in $path ; do rm -f $srcdir/mpi/mpi-asm-defs.h if test -f $srcdir/mpi/$dir/mpi-asm-defs.h ; then mpi_ln_list="$mpi_ln_list mpi/mpi-asm-defs.h:mpi/$dir/mpi-asm-defs.h" break; fi done gnupg-1.4.20/doc/0000755000175000017500000000000012635457223010475 500000000000000gnupg-1.4.20/doc/gpg.texi0000644000175000017500000037514412635277061012103 00000000000000 @c Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, @c 2008, 2009, 2010 Free Software Foundation, Inc. @c This is part of the GnuPG manual. @c For copying conditions, see the file gnupg.texi. @node Invoking GPG @chapter Invoking GPG @cindex GPG command options @cindex command options @cindex options, GPG command @c Begin algorithm defaults @set DEFSYMENCALGO AES128 @c End algorithm defaults @macro gpgname gpg @end macro @manpage gpg.1 @ifset manverb .B gpg \- OpenPGP encryption and signing tool @end ifset @mansect synopsis @ifset manverb .B gpg .RB [ \-\-homedir .IR dir ] .RB [ \-\-options .IR file ] .RI [ options ] .I command .RI [ args ] @end ifset @mansect description @command{@gpgname} is the OpenPGP only version of the GNU Privacy Guard (GnuPG). It is a tool to provide digital encryption and signing services using the OpenPGP standard. @command{@gpgname} features complete key management and all bells and whistles you can expect from a decent OpenPGP implementation. This is the standalone version of @command{gpg}. For desktop use you should consider using @command{gpg2} from the GnuPG-2 package @footnote{On some platforms gpg2 is installed under the name @command{gpg}}. @manpause @xref{Option Index}, for an index to @command{@gpgname}'s commands and options. @mancont @menu * GPG Commands:: List of all commands. * GPG Options:: List of all options. * GPG Configuration:: Configuration files. * GPG Examples:: Some usage examples. Developer information: * Unattended Usage of GPG:: Using @command{gpg} from other programs. @end menu @c * GPG Protocol:: The protocol the server mode uses. @c ******************************************* @c *************** **************** @c *************** COMMANDS **************** @c *************** **************** @c ******************************************* @mansect commands @node GPG Commands @section Commands Commands are not distinguished from options except for the fact that only one command is allowed. @command{@gpgname} may be run with no commands, in which case it will perform a reasonable action depending on the type of file it is given as input (an encrypted message is decrypted, a signature is verified, a file containing keys is listed). Please remember that option as well as command parsing stops as soon as a non-option is encountered, you can explicitly stop parsing by using the special option @option{--}. @menu * General GPG Commands:: Commands not specific to the functionality. * Operational GPG Commands:: Commands to select the type of operation. * OpenPGP Key Management:: How to manage your keys. @end menu @c ******************************************* @c ********** GENERAL COMMANDS ************* @c ******************************************* @node General GPG Commands @subsection Commands not specific to the function @table @gnupgtabopt @item --version @opindex version Print the program version and licensing information. Note that you cannot abbreviate this command. @item --help @itemx -h @opindex help Print a usage message summarizing the most useful command line options. Note that you cannot abbreviate this command. @item --warranty @opindex warranty Print warranty information. @item --dump-options @opindex dump-options Print a list of all available options and commands. Note that you cannot abbreviate this command. @end table @c ******************************************* @c ******** OPERATIONAL COMMANDS *********** @c ******************************************* @node Operational GPG Commands @subsection Commands to select the type of operation @table @gnupgtabopt @item --sign @itemx -s @opindex sign Make a signature. This command may be combined with @option{--encrypt} (for a signed and encrypted message), @option{--symmetric} (for a signed and symmetrically encrypted message), or @option{--encrypt} and @option{--symmetric} together (for a signed message that may be decrypted via a secret key or a passphrase). The key to be used for signing is chosen by default or can be set with the @option{--local-user} and @option{--default-key} options. @item --clearsign @opindex clearsign Make a clear text signature. The content in a clear text signature is readable without any special software. OpenPGP software is only needed to verify the signature. Clear text signatures may modify end-of-line whitespace for platform independence and are not intended to be reversible. The key to be used for signing is chosen by default or can be set with the @option{--local-user} and @option{--default-key} options. @item --detach-sign @itemx -b @opindex detach-sign Make a detached signature. @item --encrypt @itemx -e @opindex encrypt Encrypt data. This option may be combined with @option{--sign} (for a signed and encrypted message), @option{--symmetric} (for a message that may be decrypted via a secret key or a passphrase), or @option{--sign} and @option{--symmetric} together (for a signed message that may be decrypted via a secret key or a passphrase). @item --symmetric @itemx -c @opindex symmetric Encrypt with a symmetric cipher using a passphrase. The default symmetric cipher used is @value{DEFSYMENCALGO}, but may be chosen with the @option{--cipher-algo} option. This option may be combined with @option{--sign} (for a signed and symmetrically encrypted message), @option{--encrypt} (for a message that may be decrypted via a secret key or a passphrase), or @option{--sign} and @option{--encrypt} together (for a signed message that may be decrypted via a secret key or a passphrase). @item --store @opindex store Store only (make a simple RFC1991 literal data packet). @item --decrypt @itemx -d @opindex decrypt Decrypt the file given on the command line (or STDIN if no file is specified) and write it to STDOUT (or the file specified with @option{--output}). If the decrypted file is signed, the signature is also verified. This command differs from the default operation, as it never writes to the filename which is included in the file and it rejects files which don't begin with an encrypted message. @item --verify @opindex verify Assume that the first argument is a signed file and verify it without generating any output. With no arguments, the signature packet is read from STDIN. If only a one argument is given, it is expected to be a complete signature. With more than 1 argument, the first should be a detached signature and the remaining files ake up the the signed data. To read the signed data from STDIN, use @samp{-} as the second filename. For security reasons a detached signature cannot read the signed material from STDIN without denoting it in the above way. Note: If the option @option{--batch} is not used, @command{gpg} may assume that a single argument is a file with a detached signature and it will try to find a matching data file by stripping certain suffixes. Using this historical feature to verify a detached signature is strongly discouraged; always specify the data file too. Note: When verifying a cleartext signature, @command{gpg} verifies only what makes up the cleartext signed data and not any extra data outside of the cleartext signature or header lines following directly the dash marker line. The option @code{--output} may be used to write out the actual signed data; but there are other pitfalls with this format as well. It is suggested to avoid cleartext signatures in favor of detached signatures. @item --multifile @opindex multifile This modifies certain other commands to accept multiple files for processing on the command line or read from STDIN with each filename on a separate line. This allows for many files to be processed at once. @option{--multifile} may currently be used along with @option{--verify}, @option{--encrypt}, and @option{--decrypt}. Note that @option{--multifile --verify} may not be used with detached signatures. @item --verify-files @opindex verify-files Identical to @option{--multifile --verify}. @item --encrypt-files @opindex encrypt-files Identical to @option{--multifile --encrypt}. @item --decrypt-files @opindex decrypt-files Identical to @option{--multifile --decrypt}. @item --list-keys @itemx -k @itemx --list-public-keys @opindex list-keys List all keys from the public keyrings, or just the keys given on the command line. @option{-k} is slightly different from @option{--list-keys} in that it allows only for one argument and takes the second argument as the keyring to search. This is for command line compatibility with PGP 2 and has been removed in @command{gpg2}. Avoid using the output of this command in scripts or other programs as it is likely to change as GnuPG changes. See @option{--with-colons} for a machine-parseable key listing command that is appropriate for use in scripts and other programs. @item --list-secret-keys @itemx -K @opindex list-secret-keys List all keys from the secret keyrings, or just the ones given on the command line. A @code{#} after the letters @code{sec} means that the secret key is not usable (for example, if it was created via @option{--export-secret-subkeys}). @item --list-sigs @opindex list-sigs Same as @option{--list-keys}, but the signatures are listed too. For each signature listed, there are several flags in between the "sig" tag and keyid. These flags give additional information about each signature. From left to right, they are the numbers 1-3 for certificate check level (see @option{--ask-cert-level}), "L" for a local or non-exportable signature (see @option{--lsign-key}), "R" for a nonRevocable signature (see the @option{--edit-key} command "nrsign"), "P" for a signature that contains a policy URL (see @option{--cert-policy-url}), "N" for a signature that contains a notation (see @option{--cert-notation}), "X" for an eXpired signature (see @option{--ask-cert-expire}), and the numbers 1-9 or "T" for 10 and above to indicate trust signature levels (see the @option{--edit-key} command "tsign"). @item --check-sigs @opindex check-sigs Same as @option{--list-sigs}, but the signatures are verified. Note that for performance reasons the revocation status of a signing key is not shown. The status of the verification is indicated by a flag directly following the "sig" tag (and thus before the flags described above for @option{--list-sigs}). A "!" indicates that the signature has been successfully verified, a "-" denotes a bad signature and a "%" is used if an error occurred while checking the signature (e.g. a non supported algorithm). @item --fingerprint @opindex fingerprint List all keys (or the specified ones) along with their fingerprints. This is the same output as @option{--list-keys} but with the additional output of a line with the fingerprint. May also be combined with @option{--list-sigs} or @option{--check-sigs}. If this command is given twice, the fingerprints of all secondary keys are listed too. @item --list-packets @opindex list-packets List only the sequence of packets. This is mainly useful for debugging. @item --card-edit @opindex card-edit Present a menu to work with a smartcard. The subcommand "help" provides an overview on available commands. For a detailed description, please see the Card HOWTO at https://gnupg.org/documentation/howtos.html#GnuPG-cardHOWTO . @item --card-status @opindex card-status Show the content of the smart card. @item --change-pin @opindex change-pin Present a menu to allow changing the PIN of a smartcard. This functionality is also available as the subcommand "passwd" with the @option{--card-edit} command. @item --delete-key @code{name} @opindex delete-key Remove key from the public keyring. In batch mode either @option{--yes} is required or the key must be specified by fingerprint. This is a safeguard against accidental deletion of multiple keys. @item --delete-secret-key @code{name} @opindex delete-secret-key Remove key from the secret keyring. In batch mode the key must be specified by fingerprint. @item --delete-secret-and-public-key @code{name} @opindex delete-secret-and-public-key Same as @option{--delete-key}, but if a secret key exists, it will be removed first. In batch mode the key must be specified by fingerprint. @item --export @opindex export Either export all keys from all keyrings (default keyrings and those registered via option @option{--keyring}), or if at least one name is given, those of the given name. The exported keys are written to STDOUT or to the file given with option @option{--output}. Use together with @option{--armor} to mail those keys. @item --send-keys @code{key IDs} @opindex send-keys Similar to @option{--export} but sends the keys to a keyserver. Fingerprints may be used instead of key IDs. Option @option{--keyserver} must be used to give the name of this keyserver. Don't send your complete keyring to a keyserver --- select only those keys which are new or changed by you. If no key IDs are given, @command{gpg} does nothing. @item --export-secret-keys @itemx --export-secret-subkeys @opindex export-secret-keys @opindex export-secret-subkeys Same as @option{--export}, but exports the secret keys instead. The exported keys are written to STDOUT or to the file given with option @option{--output}. This command is often used along with the option @option{--armor} to allow easy printing of the key for paper backup; however the external tool @command{paperkey} does a better job for creating backups on paper. Note that exporting a secret key can be a security risk if the exported keys are send over an insecure channel. The second form of the command has the special property to render the secret part of the primary key useless; this is a GNU extension to OpenPGP and other implementations can not be expected to successfully import such a key. Its intended use is to generated a full key with an additional signing subkey on a dedicated machine and then using this command to export the key without the primary key to the main machine. See the option @option{--simple-sk-checksum} if you want to import an exported secret key into ancient OpenPGP implementations. @item --import @itemx --fast-import @opindex import Import/merge keys. This adds the given keys to the keyring. The fast version is currently just a synonym. There are a few other options which control how this command works. Most notable here is the @option{--import-options merge-only} option which does not insert new keys but does only the merging of new signatures, user-IDs and subkeys. @item --recv-keys @code{key IDs} @opindex recv-keys Import the keys with the given key IDs from a keyserver. Option @option{--keyserver} must be used to give the name of this keyserver. @item --refresh-keys @opindex refresh-keys Request updates from a keyserver for keys that already exist on the local keyring. This is useful for updating a key with the latest signatures, user IDs, etc. Calling this with no arguments will refresh the entire keyring. Option @option{--keyserver} must be used to give the name of the keyserver for all keys that do not have preferred keyservers set (see @option{--keyserver-options honor-keyserver-url}). @item --search-keys @code{names} @opindex search-keys Search the keyserver for the given names. Multiple names given here will be joined together to create the search string for the keyserver. Option @option{--keyserver} must be used to give the name of this keyserver. Keyservers that support different search methods allow using the syntax specified in "How to specify a user ID" below. Note that different keyserver types support different search methods. Currently only LDAP supports them all. @item --fetch-keys @code{URIs} @opindex fetch-keys Retrieve keys located at the specified URIs. Note that different installations of GnuPG may support different protocols (HTTP, FTP, LDAP, etc.) @item --update-trustdb @opindex update-trustdb Do trust database maintenance. This command iterates over all keys and builds the Web of Trust. This is an interactive command because it may have to ask for the "ownertrust" values for keys. The user has to give an estimation of how far she trusts the owner of the displayed key to correctly certify (sign) other keys. GnuPG only asks for the ownertrust value if it has not yet been assigned to a key. Using the @option{--edit-key} menu, the assigned value can be changed at any time. @item --check-trustdb @opindex check-trustdb Do trust database maintenance without user interaction. From time to time the trust database must be updated so that expired keys or signatures and the resulting changes in the Web of Trust can be tracked. Normally, GnuPG will calculate when this is required and do it automatically unless @option{--no-auto-check-trustdb} is set. This command can be used to force a trust database check at any time. The processing is identical to that of @option{--update-trustdb} but it skips keys with a not yet defined "ownertrust". For use with cron jobs, this command can be used together with @option{--batch} in which case the trust database check is done only if a check is needed. To force a run even in batch mode add the option @option{--yes}. @anchor{option --export-ownertrust} @item --export-ownertrust @opindex export-ownertrust Send the ownertrust values to STDOUT. This is useful for backup purposes as these values are the only ones which can't be re-created from a corrupted trustdb. Example: @c man:.RS @example @gpgname{} --export-ownertrust > otrust.txt @end example @c man:.RE @item --import-ownertrust @opindex import-ownertrust Update the trustdb with the ownertrust values stored in @code{files} (or STDIN if not given); existing values will be overwritten. In case of a severely damaged trustdb and if you have a recent backup of the ownertrust values (e.g. in the file @file{otrust.txt}, you may re-create the trustdb using these commands: @c man:.RS @example cd ~/.gnupg rm trustdb.gpg @gpgname{} --import-ownertrust < otrust.txt @end example @c man:.RE @item --rebuild-keydb-caches @opindex rebuild-keydb-caches When updating from version 1.0.6 to 1.0.7 this command should be used to create signature caches in the keyring. It might be handy in other situations too. @item --print-md @code{algo} @itemx --print-mds @opindex print-md Print message digest of algorithm ALGO for all given files or STDIN. With the second form (or a deprecated "*" as algo) digests for all available algorithms are printed. @item --gen-random @code{0|1|2} @code{count} @opindex gen-random Emit @var{count} random bytes of the given quality level 0, 1 or 2. If @var{count} is not given or zero, an endless sequence of random bytes will be emitted. If used with @option{--armor} the output will be base64 encoded. PLEASE, don't use this command unless you know what you are doing; it may remove precious entropy from the system! @item --gen-prime @code{mode} @code{bits} @opindex gen-prime Use the source, Luke :-). The output format is still subject to change. @item --enarmor @item --dearmor @opindex enarmor @opindex dearmor Pack or unpack an arbitrary input into/from an OpenPGP ASCII armor. This is a GnuPG extension to OpenPGP and in general not very useful. @end table @c ******************************************* @c ******* KEY MANGEMENT COMMANDS ********** @c ******************************************* @node OpenPGP Key Management @subsection How to manage your keys This section explains the main commands for key management @table @gnupgtabopt @item --gen-key @opindex gen-key Generate a new key pair using the current default parameters. This is the standard command to create a new key. There is also a feature which allows you to create keys in batch mode. See the the manual section ``Unattended key generation'' on how to use this. @item --gen-revoke @code{name} @opindex gen-revoke Generate a revocation certificate for the complete key. To revoke a subkey or a signature, use the @option{--edit} command. @item --desig-revoke @code{name} @opindex desig-revoke Generate a designated revocation certificate for a key. This allows a user (with the permission of the keyholder) to revoke someone else's key. @item --edit-key @opindex edit-key Present a menu which enables you to do most of the key management related tasks. It expects the specification of a key on the command line. @c ******** Begin Edit-key Options ********** @table @asis @item uid @code{n} @opindex keyedit:uid Toggle selection of user ID or photographic user ID with index @code{n}. Use @code{*} to select all and @code{0} to deselect all. @item key @code{n} @opindex keyedit:key Toggle selection of subkey with index @code{n}. Use @code{*} to select all and @code{0} to deselect all. @item sign @opindex keyedit:sign Make a signature on key of user @code{name} If the key is not yet signed by the default user (or the users given with -u), the program displays the information of the key again, together with its fingerprint and asks whether it should be signed. This question is repeated for all users specified with -u. @item lsign @opindex keyedit:lsign Same as "sign" but the signature is marked as non-exportable and will therefore never be used by others. This may be used to make keys valid only in the local environment. @item nrsign @opindex keyedit:nrsign Same as "sign" but the signature is marked as non-revocable and can therefore never be revoked. @item tsign @opindex keyedit:tsign Make a trust signature. This is a signature that combines the notions of certification (like a regular signature), and trust (like the "trust" command). It is generally only useful in distinct communities or groups. @end table @c man:.RS Note that "l" (for local / non-exportable), "nr" (for non-revocable, and "t" (for trust) may be freely mixed and prefixed to "sign" to create a signature of any type desired. @c man:.RE @table @asis @item delsig @opindex keyedit:delsig Delete a signature. Note that it is not possible to retract a signature, once it has been send to the public (i.e. to a keyserver). In that case you better use @code{revsig}. @item revsig @opindex keyedit:revsig Revoke a signature. For every signature which has been generated by one of the secret keys, GnuPG asks whether a revocation certificate should be generated. @item check @opindex keyedit:check Check the signatures on all selected user IDs. @item adduid @opindex keyedit:adduid Create an additional user ID. @item addphoto @opindex keyedit:addphoto Create a photographic user ID. This will prompt for a JPEG file that will be embedded into the user ID. Note that a very large JPEG will make for a very large key. Also note that some programs will display your JPEG unchanged (GnuPG), and some programs will scale it to fit in a dialog box (PGP). @item showphoto @opindex keyedit:showphoto Display the selected photographic user ID. @item deluid @opindex keyedit:deluid Delete a user ID or photographic user ID. Note that it is not possible to retract a user id, once it has been send to the public (i.e. to a keyserver). In that case you better use @code{revuid}. @item revuid @opindex keyedit:revuid Revoke a user ID or photographic user ID. @item primary @opindex keyedit:primary Flag the current user id as the primary one, removes the primary user id flag from all other user ids and sets the timestamp of all affected self-signatures one second ahead. Note that setting a photo user ID as primary makes it primary over other photo user IDs, and setting a regular user ID as primary makes it primary over other regular user IDs. @item keyserver @opindex keyedit:keyserver Set a preferred keyserver for the specified user ID(s). This allows other users to know where you prefer they get your key from. See @option{--keyserver-options honor-keyserver-url} for more on how this works. Setting a value of "none" removes an existing preferred keyserver. @item notation @opindex keyedit:notation Set a name=value notation for the specified user ID(s). See @option{--cert-notation} for more on how this works. Setting a value of "none" removes all notations, setting a notation prefixed with a minus sign (-) removes that notation, and setting a notation name (without the =value) prefixed with a minus sign removes all notations with that name. @item pref @opindex keyedit:pref List preferences from the selected user ID. This shows the actual preferences, without including any implied preferences. @item showpref @opindex keyedit:showpref More verbose preferences listing for the selected user ID. This shows the preferences in effect by including the implied preferences of 3DES (cipher), SHA-1 (digest), and Uncompressed (compression) if they are not already included in the preference list. In addition, the preferred keyserver and signature notations (if any) are shown. @item setpref @code{string} @opindex keyedit:setpref Set the list of user ID preferences to @code{string} for all (or just the selected) user IDs. Calling setpref with no arguments sets the preference list to the default (either built-in or set via @option{--default-preference-list}), and calling setpref with "none" as the argument sets an empty preference list. Use @command{@gpgname --version} to get a list of available algorithms. Note that while you can change the preferences on an attribute user ID (aka "photo ID"), GnuPG does not select keys via attribute user IDs so these preferences will not be used by GnuPG. When setting preferences, you should list the algorithms in the order which you'd like to see them used by someone else when encrypting a message to your key. If you don't include 3DES, it will be automatically added at the end. Note that there are many factors that go into choosing an algorithm (for example, your key may not be the only recipient), and so the remote OpenPGP application being used to send to you may or may not follow your exact chosen order for a given message. It will, however, only choose an algorithm that is present on the preference list of every recipient key. See also the INTEROPERABILITY WITH OTHER OPENPGP PROGRAMS section below. @item addkey @opindex keyedit:addkey Add a subkey to this key. @item addcardkey @opindex keyedit:addcardkey Generate a subkey on a card and add it to this key. @item keytocard @opindex keyedit:keytocard Transfer the selected secret subkey (or the primary key if no subkey has been selected) to a smartcard. The secret key in the keyring will be replaced by a stub if the key could be stored successfully on the card and you use the save command later. Only certain key types may be transferred to the card. A sub menu allows you to select on what card to store the key. Note that it is not possible to get that key back from the card - if the card gets broken your secret key will be lost unless you have a backup somewhere. @item bkuptocard @code{file} @opindex keyedit:bkuptocard Restore the given file to a card. This command may be used to restore a backup key (as generated during card initialization) to a new card. In almost all cases this will be the encryption key. You should use this command only with the corresponding public key and make sure that the file given as argument is indeed the backup to restore. You should then select 2 to restore as encryption key. You will first be asked to enter the passphrase of the backup key and then for the Admin PIN of the card. @item delkey @opindex keyedit:delkey Remove a subkey (secondart key). Note that it is not possible to retract a subkey, once it has been send to the public (i.e. to a keyserver). In that case you better use @code{revkey}. @item revkey @opindex keyedit:revkey Revoke a subkey. @item expire @opindex keyedit:expire Change the key or subkey expiration time. If a subkey is selected, the expiration time of this subkey will be changed. With no selection, the key expiration of the primary key is changed. @item trust @opindex keyedit:trust Change the owner trust value for the key. This updates the trust-db immediately and no save is required. @item disable @itemx enable @opindex keyedit:disable @opindex keyedit:enable Disable or enable an entire key. A disabled key can not normally be used for encryption. @item addrevoker @opindex keyedit:addrevoker Add a designated revoker to the key. This takes one optional argument: "sensitive". If a designated revoker is marked as sensitive, it will not be exported by default (see export-options). @item passwd @opindex keyedit:passwd Change the passphrase of the secret key. @item toggle @opindex keyedit:toggle Toggle between public and secret key listing. @item clean @opindex keyedit:clean Compact (by removing all signatures except the selfsig) any user ID that is no longer usable (e.g. revoked, or expired). Then, remove any signatures that are not usable by the trust calculations. Specifically, this removes any signature that does not validate, any signature that is superseded by a later signature, revoked signatures, and signatures issued by keys that are not present on the keyring. @item minimize @opindex keyedit:minimize Make the key as small as possible. This removes all signatures from each user ID except for the most recent self-signature. @item cross-certify @opindex keyedit:cross-certify Add cross-certification signatures to signing subkeys that may not currently have them. Cross-certification signatures protect against a subtle attack against signing subkeys. See @option{--require-cross-certification}. All new keys generated have this signature by default, so this option is only useful to bring older keys up to date. @item save @opindex keyedit:save Save all changes to the key rings and quit. @item quit @opindex keyedit:quit Quit the program without updating the key rings. @end table @c man:.RS The listing shows you the key with its secondary keys and all user ids. The primary user id is indicated by a dot, and selected keys or user ids are indicated by an asterisk. The trust value is displayed with the primary key: the first is the assigned owner trust and the second is the calculated trust value. Letters are used for the values: @c man:.RE @table @asis @item - No ownertrust assigned / not yet calculated. @item e Trust calculation has failed; probably due to an expired key. @item q Not enough information for calculation. @item n Never trust this key. @item m Marginally trusted. @item f Fully trusted. @item u Ultimately trusted. @end table @c ******** End Edit-key Options ********** @item --sign-key @code{name} @opindex sign-key Signs a public key with your secret key. This is a shortcut version of the subcommand "sign" from @option{--edit}. @item --lsign-key @code{name} @opindex lsign-key Signs a public key with your secret key but marks it as non-exportable. This is a shortcut version of the subcommand "lsign" from @option{--edit-key}. @end table @c ******************************************* @c *************** **************** @c *************** OPTIONS **************** @c *************** **************** @c ******************************************* @mansect options @node GPG Options @section Option Summary @command{@gpgname} features a bunch of options to control the exact behaviour and to change the default configuration. @menu * GPG Configuration Options:: How to change the configuration. * GPG Key related Options:: Key related options. * GPG Input and Output:: Input and Output. * OpenPGP Options:: OpenPGP protocol specific options. * Compliance Options:: Compliance options. * GPG Esoteric Options:: Doing things one usually don't want to do. * Deprecated Options:: Deprecated options. @end menu Long options can be put in an options file (default "~/.gnupg/gpg.conf"). Short option names will not work - for example, "armor" is a valid option for the options file, while "a" is not. Do not write the 2 dashes, but simply the name of the option and any required arguments. Lines with a hash ('#') as the first non-white-space character are ignored. Commands may be put in this file too, but that is not generally useful as the command will execute automatically with every execution of gpg. Please remember that option parsing stops as soon as a non-option is encountered, you can explicitly stop parsing by using the special option @option{--}. @c ******************************************* @c ******** CONFIGURATION OPTIONS ********** @c ******************************************* @node GPG Configuration Options @subsection How to change the configuration These options are used to change the configuration and are usually found in the option file. @table @gnupgtabopt @item --default-key @var{name} @opindex default-key Use @var{name} as the default key to sign with. If this option is not used, the default key is the first key found in the secret keyring. Note that @option{-u} or @option{--local-user} overrides this option. @item --default-recipient @var{name} @opindex default-recipient Use @var{name} as default recipient if option @option{--recipient} is not used and don't ask if this is a valid one. @var{name} must be non-empty. @item --default-recipient-self @opindex default-recipient-self Use the default key as default recipient if option @option{--recipient} is not used and don't ask if this is a valid one. The default key is the first one from the secret keyring or the one set with @option{--default-key}. @item --no-default-recipient @opindex no-default-recipient Reset @option{--default-recipient} and @option{--default-recipient-self}. @item -v, --verbose @opindex verbose Give more information during processing. If used twice, the input data is listed in detail. @item --no-verbose @opindex no-verbose Reset verbose level to 0. @item -q, --quiet @opindex quiet Try to be as quiet as possible. @item --batch @itemx --no-batch @opindex batch @opindex no-batch Use batch mode. Never ask, do not allow interactive commands. @option{--no-batch} disables this option. This option is commonly used for unattended operations. WARNING: Unattended operation bears a higher risk of being exposed to security attacks. In particular any unattended use of GnuPG which involves the use of secret keys should take care not to provide an decryption oracle. There are several standard pre-cautions against being used as an oracle. For example never return detailed error messages or any diagnostics printed by your software to the remote site. Consult with an expert in case of doubt. Note that even with a filename given on the command line, gpg might still need to read from STDIN (in particular if gpg figures that the input is a detached signature and no data file has been specified). Thus if you do not want to feed data via STDIN, you should connect STDIN to @file{/dev/null}. @item --no-tty @opindex no-tty Make sure that the TTY (terminal) is never used for any output. This option is needed in some cases because GnuPG sometimes prints warnings to the TTY even if @option{--batch} is used. @item --yes @opindex yes Assume "yes" on most questions. @item --no @opindex no Assume "no" on most questions. @item --list-options @code{parameters} @opindex list-options This is a space or comma delimited string that gives options used when listing keys and signatures (that is, @option{--list-keys}, @option{--list-sigs}, @option{--list-public-keys}, @option{--list-secret-keys}, and the @option{--edit-key} functions). Options can be prepended with a @option{no-} (after the two dashes) to give the opposite meaning. The options are: @table @asis @item show-photos @opindex list-options:show-photos Causes @option{--list-keys}, @option{--list-sigs}, @option{--list-public-keys}, and @option{--list-secret-keys} to display any photo IDs attached to the key. Defaults to no. See also @option{--photo-viewer}. Does not work with @option{--with-colons}: see @option{--attribute-fd} for the appropriate way to get photo data for scripts and other frontends. @item show-usage @opindex list-options:show-usage Show usage information for keys and subkeys in the standard key listing. This is a list of letters indicating the allowed usage for a key (@code{E}=encryption, @code{S}=signing, @code{C}=certification, @code{A}=authentication). Defaults to no. @item show-policy-urls @opindex list-options:show-policy-urls Show policy URLs in the @option{--list-sigs} or @option{--check-sigs} listings. Defaults to no. @item show-notations @itemx show-std-notations @itemx show-user-notations @opindex list-options:show-notations @opindex list-options:show-std-notations @opindex list-options:show-user-notations Show all, IETF standard, or user-defined signature notations in the @option{--list-sigs} or @option{--check-sigs} listings. Defaults to no. @item show-keyserver-urls @opindex list-options:show-keyserver-urls Show any preferred keyserver URL in the @option{--list-sigs} or @option{--check-sigs} listings. Defaults to no. @item show-uid-validity @opindex list-options:show-uid-validity Display the calculated validity of user IDs during key listings. Defaults to no. @item show-unusable-uids @opindex list-options:show-unusable-uids Show revoked and expired user IDs in key listings. Defaults to no. @item show-unusable-subkeys @opindex list-options:show-unusable-subkeys Show revoked and expired subkeys in key listings. Defaults to no. @item show-keyring @opindex list-options:show-keyring Display the keyring name at the head of key listings to show which keyring a given key resides on. Defaults to no. @item show-sig-expire @opindex list-options:show-sig-expire Show signature expiration dates (if any) during @option{--list-sigs} or @option{--check-sigs} listings. Defaults to no. @item show-sig-subpackets @opindex list-options:show-sig-subpackets Include signature subpackets in the key listing. This option can take an optional argument list of the subpackets to list. If no argument is passed, list all subpackets. Defaults to no. This option is only meaningful when using @option{--with-colons} along with @option{--list-sigs} or @option{--check-sigs}. @end table @item --verify-options @code{parameters} @opindex verify-options This is a space or comma delimited string that gives options used when verifying signatures. Options can be prepended with a `no-' to give the opposite meaning. The options are: @table @asis @item show-photos @opindex verify-options:show-photos Display any photo IDs present on the key that issued the signature. Defaults to no. See also @option{--photo-viewer}. @item show-policy-urls @opindex verify-options:show-policy-urls Show policy URLs in the signature being verified. Defaults to no. @item show-notations @itemx show-std-notations @itemx show-user-notations @opindex verify-options:show-notations @opindex verify-options:show-std-notations @opindex verify-options:show-user-notations Show all, IETF standard, or user-defined signature notations in the signature being verified. Defaults to IETF standard. @item show-keyserver-urls @opindex verify-options:show-keyserver-urls Show any preferred keyserver URL in the signature being verified. Defaults to no. @item show-uid-validity @opindex verify-options:show-uid-validity Display the calculated validity of the user IDs on the key that issued the signature. Defaults to no. @item show-unusable-uids @opindex verify-options:show-unusable-uids Show revoked and expired user IDs during signature verification. Defaults to no. @item show-primary-uid-only @opindex verify-options:show-primary-uid-only Show only the primary user ID during signature verification. That is all the AKA lines as well as photo Ids are not shown with the signature verification status. @item pka-lookups @opindex verify-options:pka-lookups Enable PKA lookups to verify sender addresses. Note that PKA is based on DNS, and so enabling this option may disclose information on when and what signatures are verified or to whom data is encrypted. This is similar to the "web bug" described for the auto-key-retrieve feature. @item pka-trust-increase @opindex verify-options:pka-trust-increase Raise the trust in a signature to full if the signature passes PKA validation. This option is only meaningful if pka-lookups is set. @end table @item --enable-large-rsa @itemx --disable-large-rsa @opindex enable-large-rsa @opindex disable-large-rsa With --gen-key and --batch, enable the creation of larger RSA secret keys than is generally recommended (up to 8192 bits). These large keys are more expensive to use, and their signatures and certifications are also larger. @item --enable-dsa2 @itemx --disable-dsa2 @opindex enable-dsa2 @opindex disable-dsa2 Enable hash truncation for all DSA keys even for old DSA Keys up to 1024 bit. This is also the default with @option{--openpgp}. Note that older versions of GnuPG also required this flag to allow the generation of DSA larger than 1024 bit. @item --photo-viewer @code{string} @opindex photo-viewer This is the command line that should be run to view a photo ID. "%i" will be expanded to a filename containing the photo. "%I" does the same, except the file will not be deleted once the viewer exits. Other flags are "%k" for the key ID, "%K" for the long key ID, "%f" for the key fingerprint, "%t" for the extension of the image type (e.g. "jpg"), "%T" for the MIME type of the image (e.g. "image/jpeg"), "%v" for the single-character calculated validity of the image being viewed (e.g. "f"), "%V" for the calculated validity as a string (e.g. "full"), "%U" for a base32 encoded hash of the user ID, and "%%" for an actual percent sign. If neither %i or %I are present, then the photo will be supplied to the viewer on standard input. The default viewer is "xloadimage -fork -quiet -title 'KeyID 0x%k' STDIN". Note that if your image viewer program is not secure, then executing it from GnuPG does not make it secure. @item --exec-path @code{string} @opindex exec-path Sets a list of directories to search for photo viewers and keyserver helpers. If not provided, keyserver helpers use the compiled-in default directory, and photo viewers use the $PATH environment variable. Note, that on W32 system this value is ignored when searching for keyserver helpers. @item --keyring @code{file} @opindex keyring Add @code{file} to the current list of keyrings. If @code{file} begins with a tilde and a slash, these are replaced by the $HOME directory. If the filename does not contain a slash, it is assumed to be in the GnuPG home directory ("~/.gnupg" if @option{--homedir} or $GNUPGHOME is not used). Note that this adds a keyring to the current list. If the intent is to use the specified keyring alone, use @option{--keyring} along with @option{--no-default-keyring}. @item --secret-keyring @code{file} @opindex secret-keyring Same as @option{--keyring} but for the secret keyrings. @item --primary-keyring @code{file} @opindex primary-keyring Designate @code{file} as the primary public keyring. This means that newly imported keys (via @option{--import} or keyserver @option{--recv-from}) will go to this keyring. @item --trustdb-name @code{file} @opindex trustdb-name Use @code{file} instead of the default trustdb. If @code{file} begins with a tilde and a slash, these are replaced by the $HOME directory. If the filename does not contain a slash, it is assumed to be in the GnuPG home directory (@file{~/.gnupg} if @option{--homedir} or $GNUPGHOME is not used). @anchor{option --homedir} @include opt-homedir.texi @item --pcsc-driver @code{file} @opindex pcsc-driver Use @code{file} to access the smartcard reader. The current default is `libpcsclite.so.1' for GLIBC based systems, `/System/Library/Frameworks/PCSC.framework/PCSC' for MAC OS X, `winscard.dll' for Windows and `libpcsclite.so' for other systems. @item --disable-ccid @opindex disable-ccid Disable the integrated support for CCID compliant readers. This allows to fall back to one of the other drivers even if the internal CCID driver can handle the reader. Note, that CCID support is only available if libusb was available at build time. @item --reader-port @code{number_or_string} @opindex reader-port This option may be used to specify the port of the card terminal. A value of 0 refers to the first serial device; add 32768 to access USB devices. The default is 32768 (first USB device). PC/SC or CCID readers might need a string here; run the program in verbose mode to get a list of available readers. The default is then the first reader found. @item --display-charset @code{name} @opindex display-charset Set the name of the native character set. This is used to convert some informational strings like user IDs to the proper UTF-8 encoding. Note that this has nothing to do with the character set of data to be encrypted or signed; GnuPG does not recode user-supplied data. If this option is not used, the default character set is determined from the current locale. A verbosity level of 3 shows the chosen set. Valid values for @code{name} are: @table @asis @item iso-8859-1 @opindex display-charset:iso-8859-1 This is the Latin 1 set. @item iso-8859-2 @opindex display-charset:iso-8859-2 The Latin 2 set. @item iso-8859-15 @opindex display-charset:iso-8859-15 This is currently an alias for the Latin 1 set. @item koi8-r @opindex display-charset:koi8-r The usual Russian set (rfc1489). @item utf-8 @opindex display-charset:utf-8 Bypass all translations and assume that the OS uses native UTF-8 encoding. @end table @item --utf8-strings @itemx --no-utf8-strings @opindex utf8-strings Assume that command line arguments are given as UTF8 strings. The default (@option{--no-utf8-strings}) is to assume that arguments are encoded in the character set as specified by @option{--display-charset}. These options affect all following arguments. Both options may be used multiple times. @anchor{gpg-option --options} @item --options @code{file} @opindex options Read options from @code{file} and do not try to read them from the default options file in the homedir (see @option{--homedir}). This option is ignored if used in an options file. @item --no-options @opindex no-options Shortcut for @option{--options /dev/null}. This option is detected before an attempt to open an option file. Using this option will also prevent the creation of a @file{~/.gnupg} homedir. @item -z @code{n} @itemx --compress-level @code{n} @itemx --bzip2-compress-level @code{n} @opindex compress-level @opindex bzip2-compress-level Set compression level to @code{n} for the ZIP and ZLIB compression algorithms. The default is to use the default compression level of zlib (normally 6). @option{--bzip2-compress-level} sets the compression level for the BZIP2 compression algorithm (defaulting to 6 as well). This is a different option from @option{--compress-level} since BZIP2 uses a significant amount of memory for each additional compression level. @option{-z} sets both. A value of 0 for @code{n} disables compression. @item --bzip2-decompress-lowmem @opindex bzip2-decompress-lowmem Use a different decompression method for BZIP2 compressed files. This alternate method uses a bit more than half the memory, but also runs at half the speed. This is useful under extreme low memory circumstances when the file was originally compressed at a high @option{--bzip2-compress-level}. @item --mangle-dos-filenames @itemx --no-mangle-dos-filenames @opindex mangle-dos-filenames @opindex no-mangle-dos-filenames Older version of Windows cannot handle filenames with more than one dot. @option{--mangle-dos-filenames} causes GnuPG to replace (rather than add to) the extension of an output filename to avoid this problem. This option is off by default and has no effect on non-Windows platforms. @item --ask-cert-level @itemx --no-ask-cert-level @opindex ask-cert-level When making a key signature, prompt for a certification level. If this option is not specified, the certification level used is set via @option{--default-cert-level}. See @option{--default-cert-level} for information on the specific levels and how they are used. @option{--no-ask-cert-level} disables this option. This option defaults to no. @item --default-cert-level @code{n} @opindex default-cert-level The default to use for the check level when signing a key. 0 means you make no particular claim as to how carefully you verified the key. 1 means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. 2 means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. 3 means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are just that: examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you. This option defaults to 0 (no particular claim). @item --min-cert-level @opindex min-cert-level When building the trust database, treat any signatures with a certification level below this as invalid. Defaults to 2, which disregards level 1 signatures. Note that level 0 "no particular claim" signatures are always accepted. @item --trusted-key @code{long key ID} @opindex trusted-key Assume that the specified key (which must be given as a full 8 byte key ID) is as trustworthy as one of your own secret keys. This option is useful if you don't want to keep your secret keys (or one of them) online but still want to be able to check the validity of a given recipient's or signator's key. @item --trust-model @code{pgp|classic|direct|always|auto} @opindex trust-model Set what trust model GnuPG should follow. The models are: @table @asis @item pgp @opindex trust-mode:pgp This is the Web of Trust combined with trust signatures as used in PGP 5.x and later. This is the default trust model when creating a new trust database. @item classic @opindex trust-mode:classic This is the standard Web of Trust as introduced by PGP 2. @item direct @opindex trust-mode:direct Key validity is set directly by the user and not calculated via the Web of Trust. @item always @opindex trust-mode:always Skip key validation and assume that used keys are always fully valid. You generally won't use this unless you are using some external validation scheme. This option also suppresses the "[uncertain]" tag printed with signature checks when there is no evidence that the user ID is bound to the key. Note that this trust model still does not allow the use of expired, revoked, or disabled keys. @item auto @opindex trust-mode:auto Select the trust model depending on whatever the internal trust database says. This is the default model if such a database already exists. @end table @item --auto-key-locate @code{parameters} @itemx --no-auto-key-locate @opindex auto-key-locate GnuPG can automatically locate and retrieve keys as needed using this option. This happens when encrypting to an email address (in the "user@@example.com" form), and there are no user@@example.com keys on the local keyring. This option takes any number of the following mechanisms, in the order they are to be tried: @table @asis @item cert Locate a key using DNS CERT, as specified in rfc4398. @item pka Locate a key using DNS PKA. @item ldap Using DNS Service Discovery, check the domain in question for any LDAP keyservers to use. If this fails, attempt to locate the key using the PGP Universal method of checking @samp{ldap://keys.(thedomain)}. @item keyserver Locate a key using whatever keyserver is defined using the @option{--keyserver} option. @item keyserver-URL In addition, a keyserver URL as used in the @option{--keyserver} option may be used here to query that particular keyserver. @item local Locate the key using the local keyrings. This mechanism allows to select the order a local key lookup is done. Thus using @samp{--auto-key-locate local} is identical to @option{--no-auto-key-locate}. @item nodefault This flag disables the standard local key lookup, done before any of the mechanisms defined by the @option{--auto-key-locate} are tried. The position of this mechanism in the list does not matter. It is not required if @code{local} is also used. @item clear Clear all defined mechanisms. This is useful to override mechanisms given in a config file. @end table @item --keyid-format @code{short|0xshort|long|0xlong} @opindex keyid-format Select how to display key IDs. "short" is the traditional 8-character key ID. "long" is the more accurate (but less convenient) 16-character key ID. Add an "0x" to either to include an "0x" at the beginning of the key ID, as in 0x99242560. Note that this option is ignored if the option --with-colons is used. @item --keyserver @code{name} @opindex keyserver Use @code{name} as your keyserver. This is the server that @option{--recv-keys}, @option{--send-keys}, and @option{--search-keys} will communicate with to receive keys from, send keys to, and search for keys on. The format of the @code{name} is a URI: `scheme:[//]keyservername[:port]' The scheme is the type of keyserver: "hkp" for the HTTP (or compatible) keyservers, "ldap" for the LDAP keyservers, or "mailto" for the Graff email keyserver. Note that your particular installation of GnuPG may have other keyserver types available as well. Keyserver schemes are case-insensitive. After the keyserver name, optional keyserver configuration options may be provided. These are the same as the global @option{--keyserver-options} from below, but apply only to this particular keyserver. Most keyservers synchronize with each other, so there is generally no need to send keys to more than one server. The keyserver @code{hkp://keys.gnupg.net} uses round robin DNS to give a different keyserver each time you use it. @item --keyserver-options @code{name=value1 } @opindex keyserver-options This is a space or comma delimited string that gives options for the keyserver. Options can be prefixed with a `no-' to give the opposite meaning. Valid import-options or export-options may be used here as well to apply to importing (@option{--recv-key}) or exporting (@option{--send-key}) a key from a keyserver. While not all options are available for all keyserver types, some common options are: @table @asis @item include-revoked When searching for a key with @option{--search-keys}, include keys that are marked on the keyserver as revoked. Note that not all keyservers differentiate between revoked and unrevoked keys, and for such keyservers this option is meaningless. Note also that most keyservers do not have cryptographic verification of key revocations, and so turning this option off may result in skipping keys that are incorrectly marked as revoked. @item include-disabled When searching for a key with @option{--search-keys}, include keys that are marked on the keyserver as disabled. Note that this option is not used with HKP keyservers. @item auto-key-retrieve This option enables the automatic retrieving of keys from a keyserver when verifying signatures made by keys that are not on the local keyring. Note that this option makes a "web bug" like behavior possible. Keyserver operators can see which keys you request, so by sending you a message signed by a brand new key (which you naturally will not have on your local keyring), the operator can tell both your IP address and the time when you verified the signature. @item honor-keyserver-url When using @option{--refresh-keys}, if the key in question has a preferred keyserver URL, then use that preferred keyserver to refresh the key from. In addition, if auto-key-retrieve is set, and the signature being verified has a preferred keyserver URL, then use that preferred keyserver to fetch the key from. Defaults to yes. @item honor-pka-record If auto-key-retrieve is set, and the signature being verified has a PKA record, then use the PKA information to fetch the key. Defaults to yes. @item include-subkeys When receiving a key, include subkeys as potential targets. Note that this option is not used with HKP keyservers, as they do not support retrieving keys by subkey id. @item use-temp-files On most Unix-like platforms, GnuPG communicates with the keyserver helper program via pipes, which is the most efficient method. This option forces GnuPG to use temporary files to communicate. On some platforms (such as Win32 and RISC OS), this option is always enabled. @item keep-temp-files If using `use-temp-files', do not delete the temp files after using them. This option is useful to learn the keyserver communication protocol by reading the temporary files. @item verbose Tell the keyserver helper program to be more verbose. This option can be repeated multiple times to increase the verbosity level. @item timeout Tell the keyserver helper program how long (in seconds) to try and perform a keyserver action before giving up. Note that performing multiple actions at the same time uses this timeout value per action. For example, when retrieving multiple keys via @option{--recv-keys}, the timeout applies separately to each key retrieval, and not to the @option{--recv-keys} command as a whole. Defaults to 30 seconds. @item http-proxy=@code{value} Set the proxy to use for HTTP and HKP keyservers. This overrides the "http_proxy" environment variable, if any. @item max-cert-size When retrieving a key via DNS CERT, only accept keys up to this size. Defaults to 16384 bytes. @item debug Turn on debug output in the keyserver helper program. Note that the details of debug output depends on which keyserver helper program is being used, and in turn, on any libraries that the keyserver helper program uses internally (libcurl, openldap, etc). @item check-cert Enable certificate checking if the keyserver presents one (for hkps or ldaps). Defaults to on. @item ca-cert-file Provide a certificate store to override the system default. Only necessary if check-cert is enabled, and the keyserver is using a certificate that is not present in a system default certificate list. Note that depending on the SSL library that the keyserver helper is built with, this may actually be a directory or a file. @end table @item --completes-needed @code{n} @opindex compliant-needed Number of completely trusted users to introduce a new key signer (defaults to 1). @item --marginals-needed @code{n} @opindex marginals-needed Number of marginally trusted users to introduce a new key signer (defaults to 3) @item --max-cert-depth @code{n} @opindex max-cert-depth Maximum depth of a certification chain (default is 5). @item --simple-sk-checksum @opindex simple-sk-checksum Secret keys are integrity protected by using a SHA-1 checksum. This method is part of the upcoming enhanced OpenPGP specification but GnuPG already uses it as a countermeasure against certain attacks. Old applications don't understand this new format, so this option may be used to switch back to the old behaviour. Using this option bears a security risk. Note that using this option only takes effect when the secret key is encrypted - the simplest way to make this happen is to change the passphrase on the key (even changing it to the same value is acceptable). @item --no-sig-cache @opindex no-sig-cache Do not cache the verification status of key signatures. Caching gives a much better performance in key listings. However, if you suspect that your public keyring is not save against write modifications, you can use this option to disable the caching. It probably does not make sense to disable it because all kind of damage can be done if someone else has write access to your public keyring. @item --no-sig-create-check @opindex no-sig-create-check This options is obsolete. It has no function. @item --auto-check-trustdb @itemx --no-auto-check-trustdb @opindex auto-check-trustdb If GnuPG feels that its information about the Web of Trust has to be updated, it automatically runs the @option{--check-trustdb} command internally. This may be a time consuming process. @option{--no-auto-check-trustdb} disables this option. @item --use-agent @itemx --no-use-agent @opindex use-agent Try to use the GnuPG-Agent. With this option, GnuPG first tries to connect to the agent before it asks for a passphrase. @option{--no-use-agent} disables this option. @item --gpg-agent-info @opindex gpg-agent-info Override the value of the environment variable @samp{GPG_AGENT_INFO}. This is only used when @option{--use-agent} has been given. Given that this option is not anymore used by @command{gpg2}, it should be avoided if possible. @item --lock-once @opindex lock-once Lock the databases the first time a lock is requested and do not release the lock until the process terminates. @item --lock-multiple @opindex lock-multiple Release the locks every time a lock is no longer needed. Use this to override a previous @option{--lock-once} from a config file. @item --lock-never @opindex lock-never Disable locking entirely. This option should be used only in very special environments, where it can be assured that only one process is accessing those files. A bootable floppy with a stand-alone encryption system will probably use this. Improper usage of this option may lead to data and key corruption. @item --exit-on-status-write-error @opindex exit-on-status-write-error This option will cause write errors on the status FD to immediately terminate the process. That should in fact be the default but it never worked this way and thus we need an option to enable this, so that the change won't break applications which close their end of a status fd connected pipe too early. Using this option along with @option{--enable-progress-filter} may be used to cleanly cancel long running gpg operations. @item --limit-card-insert-tries @code{n} @opindex limit-card-insert-tries With @code{n} greater than 0 the number of prompts asking to insert a smartcard gets limited to N-1. Thus with a value of 1 gpg won't at all ask to insert a card if none has been inserted at startup. This option is useful in the configuration file in case an application does not know about the smartcard support and waits ad infinitum for an inserted card. @item --no-random-seed-file @opindex no-random-seed-file GnuPG uses a file to store its internal random pool over invocations. This makes random generation faster; however sometimes write operations are not desired. This option can be used to achieve that with the cost of slower random generation. @item --no-greeting @opindex no-greeting Suppress the initial copyright message. @item --no-secmem-warning @opindex no-secmem-warning Suppress the warning about "using insecure memory". @item --no-permission-warning @opindex permission-warning Suppress the warning about unsafe file and home directory (@option{--homedir}) permissions. Note that the permission checks that GnuPG performs are not intended to be authoritative, but rather they simply warn about certain common permission problems. Do not assume that the lack of a warning means that your system is secure. Note that the warning for unsafe @option{--homedir} permissions cannot be suppressed in the gpg.conf file, as this would allow an attacker to place an unsafe gpg.conf file in place, and use this file to suppress warnings about itself. The @option{--homedir} permissions warning may only be suppressed on the command line. @item --no-mdc-warning @opindex no-mdc-warning Suppress the warning about missing MDC integrity protection. @item --require-secmem @itemx --no-require-secmem @opindex require-secmem Refuse to run if GnuPG cannot get secure memory. Defaults to no (i.e. run, but give a warning). @item --require-cross-certification @itemx --no-require-cross-certification @opindex require-cross-certification When verifying a signature made from a subkey, ensure that the cross certification "back signature" on the subkey is present and valid. This protects against a subtle attack against subkeys that can sign. Defaults to @option{--require-cross-certification} for @command{@gpgname}. @item --expert @itemx --no-expert @opindex expert Allow the user to do certain nonsensical or "silly" things like signing an expired or revoked key, or certain potentially incompatible things like generating unusual key types. This also disables certain warning messages about potentially incompatible actions. As the name implies, this option is for experts only. If you don't fully understand the implications of what it allows you to do, leave this off. @option{--no-expert} disables this option. @end table @c ******************************************* @c ******** KEY RELATED OPTIONS ************ @c ******************************************* @node GPG Key related Options @subsection Key related options @table @gnupgtabopt @item --recipient @var{name} @itemx -r @opindex recipient Encrypt for user id @var{name}. If this option or @option{--hidden-recipient} is not specified, GnuPG asks for the user-id unless @option{--default-recipient} is given. @item --hidden-recipient @var{name} @itemx -R @opindex hidden-recipient Encrypt for user ID @var{name}, but hide the key ID of this user's key. This option helps to hide the receiver of the message and is a limited countermeasure against traffic analysis. If this option or @option{--recipient} is not specified, GnuPG asks for the user ID unless @option{--default-recipient} is given. @item --encrypt-to @code{name} @opindex encrypt-to Same as @option{--recipient} but this one is intended for use in the options file and may be used with your own user-id as an "encrypt-to-self". These keys are only used when there are other recipients given either by use of @option{--recipient} or by the asked user id. No trust checking is performed for these user ids and even disabled keys can be used. @item --hidden-encrypt-to @code{name} @opindex hidden-encrypt-to Same as @option{--hidden-recipient} but this one is intended for use in the options file and may be used with your own user-id as a hidden "encrypt-to-self". These keys are only used when there are other recipients given either by use of @option{--recipient} or by the asked user id. No trust checking is performed for these user ids and even disabled keys can be used. @item --no-encrypt-to @opindex no-encrypt-to Disable the use of all @option{--encrypt-to} and @option{--hidden-encrypt-to} keys. @item --group @code{name=value1 } @opindex group Sets up a named group, which is similar to aliases in email programs. Any time the group name is a recipient (@option{-r} or @option{--recipient}), it will be expanded to the values specified. Multiple groups with the same name are automatically merged into a single group. The values are @code{key IDs} or fingerprints, but any key description is accepted. Note that a value with spaces in it will be treated as two different values. Note also there is only one level of expansion --- you cannot make an group that points to another group. When used from the command line, it may be necessary to quote the argument to this option to prevent the shell from treating it as multiple arguments. @item --ungroup @code{name} @opindex ungroup Remove a given entry from the @option{--group} list. @item --no-groups @opindex no-groups Remove all entries from the @option{--group} list. @item --local-user @var{name} @itemx -u @opindex local-user Use @var{name} as the key to sign with. Note that this option overrides @option{--default-key}. @item --try-all-secrets @opindex try-all-secrets Don't look at the key ID as stored in the message but try all secret keys in turn to find the right decryption key. This option forces the behaviour as used by anonymous recipients (created by using @option{--throw-keyids} or @option{--hidden-recipient}) and might come handy in case where an encrypted message contains a bogus key ID. @item --skip-hidden-recipients @itemx --no-skip-hidden-recipients @opindex skip-hidden-recipients @opindex no-skip-hidden-recipients During decryption skip all anonymous recipients. This option helps in the case that people use the hidden recipients feature to hide there own encrypt-to key from others. If oneself has many secret keys this may lead to a major annoyance because all keys are tried in turn to decrypt soemthing which was not really intended for it. The drawback of this option is that it is currently not possible to decrypt a message which includes real anonymous recipients. @end table @c ******************************************* @c ******** INPUT AND OUTPUT *************** @c ******************************************* @node GPG Input and Output @subsection Input and Output @table @gnupgtabopt @item --armor @itemx -a @opindex armor Create ASCII armored output. The default is to create the binary OpenPGP format. @item --no-armor @opindex no-armor Assume the input data is not in ASCII armored format. @item --output @var{file} @itemx -o @var{file} @opindex output Write output to @var{file}. @item --max-output @code{n} @opindex max-output This option sets a limit on the number of bytes that will be generated when processing a file. Since OpenPGP supports various levels of compression, it is possible that the plaintext of a given message may be significantly larger than the original OpenPGP message. While GnuPG works properly with such messages, there is often a desire to set a maximum file size that will be generated before processing is forced to stop by the OS limits. Defaults to 0, which means "no limit". @item --import-options @code{parameters} @opindex import-options This is a space or comma delimited string that gives options for importing keys. Options can be prepended with a `no-' to give the opposite meaning. The options are: @table @asis @item import-local-sigs Allow importing key signatures marked as "local". This is not generally useful unless a shared keyring scheme is being used. Defaults to no. @item keep-ownertrust Normally possible still existing ownertrust values of a key are cleared if a key is imported. This is in general desirable so that a formerly deleted key does not automatically gain an ownertrust values merely due to import. On the other hand it is sometimes necessary to re-import a trusted set of keys again but keeping already assigned ownertrust values. This can be achived by using this option. @item repair-pks-subkey-bug During import, attempt to repair the damage caused by the PKS keyserver bug (pre version 0.9.6) that mangles keys with multiple subkeys. Note that this cannot completely repair the damaged key as some crucial data is removed by the keyserver, but it does at least give you back one subkey. Defaults to no for regular @option{--import} and to yes for keyserver @option{--recv-keys}. @item merge-only During import, allow key updates to existing keys, but do not allow any new keys to be imported. Defaults to no. @item import-clean After import, compact (remove all signatures except the self-signature) any user IDs from the new key that are not usable. Then, remove any signatures from the new key that are not usable. This includes signatures that were issued by keys that are not present on the keyring. This option is the same as running the @option{--edit-key} command "clean" after import. Defaults to no. @item import-minimal Import the smallest key possible. This removes all signatures except the most recent self-signature on each user ID. This option is the same as running the @option{--edit-key} command "minimize" after import. Defaults to no. @end table @item --export-options @code{parameters} @opindex export-options This is a space or comma delimited string that gives options for exporting keys. Options can be prepended with a `no-' to give the opposite meaning. The options are: @table @asis @item export-local-sigs Allow exporting key signatures marked as "local". This is not generally useful unless a shared keyring scheme is being used. Defaults to no. @item export-attributes Include attribute user IDs (photo IDs) while exporting. This is useful to export keys if they are going to be used by an OpenPGP program that does not accept attribute user IDs. Defaults to yes. @item export-sensitive-revkeys Include designated revoker information that was marked as "sensitive". Defaults to no. @item export-reset-subkey-passwd When using the @option{--export-secret-subkeys} command, this option resets the passphrases for all exported subkeys to empty. This is useful when the exported subkey is to be used on an unattended machine where a passphrase doesn't necessarily make sense. Defaults to no. @item export-clean Compact (remove all signatures from) user IDs on the key being exported if the user IDs are not usable. Also, do not export any signatures that are not usable. This includes signatures that were issued by keys that are not present on the keyring. This option is the same as running the @option{--edit-key} command "clean" before export except that the local copy of the key is not modified. Defaults to no. @item export-minimal Export the smallest key possible. This removes all signatures except the most recent self-signature on each user ID. This option is the same as running the @option{--edit-key} command "minimize" before export except that the local copy of the key is not modified. Defaults to no. @end table @item --with-colons @opindex with-colons Print key listings delimited by colons. Note that the output will be encoded in UTF-8 regardless of any @option{--display-charset} setting. This format is useful when GnuPG is called from scripts and other programs as it is easily machine parsed. The details of this format are documented in the file @file{doc/DETAILS}, which is included in the GnuPG source distribution. @item --fixed-list-mode @opindex fixed-list-mode Do not merge primary user ID and primary key in @option{--with-colon} listing mode and print all timestamps as seconds since 1970-01-01. @item --with-fingerprint @opindex with-fingerprint Same as the command @option{--fingerprint} but changes only the format of the output and may be used together with another command. @end table @c ******************************************* @c ******** OPENPGP OPTIONS **************** @c ******************************************* @node OpenPGP Options @subsection OpenPGP protocol specific options. @table @gnupgtabopt @item -t, --textmode @itemx --no-textmode @opindex textmode Treat input files as text and store them in the OpenPGP canonical text form with standard "CRLF" line endings. This also sets the necessary flags to inform the recipient that the encrypted or signed data is text and may need its line endings converted back to whatever the local system uses. This option is useful when communicating between two platforms that have different line ending conventions (UNIX-like to Mac, Mac to Windows, etc). @option{--no-textmode} disables this option, and is the default. If @option{-t} (but not @option{--textmode}) is used together with armoring and signing, this enables clearsigned messages. This kludge is needed for command-line compatibility with command-line versions of PGP; normally you would use @option{--sign} or @option{--clearsign} to select the type of the signature. @item --force-v3-sigs @itemx --no-force-v3-sigs @opindex force-v3-sigs OpenPGP states that an implementation should generate v4 signatures but PGP versions 5 through 7 only recognize v4 signatures on key material. This option forces v3 signatures for signatures on data. Note that this option implies @option{--no-ask-sig-expire}, and unsets @option{--sig-policy-url}, @option{--sig-notation}, and @option{--sig-keyserver-url}, as these features cannot be used with v3 signatures. @option{--no-force-v3-sigs} disables this option. Defaults to no. @item --force-v4-certs @itemx --no-force-v4-certs @opindex force-v4-certs Always use v4 key signatures even on v3 keys. This option also changes the default hash algorithm for v3 RSA keys from MD5 to SHA-1. @option{--no-force-v4-certs} disables this option. @item --force-mdc @opindex force-mdc Force the use of encryption with a modification detection code. This is always used with the newer ciphers (those with a blocksize greater than 64 bits), or if all of the recipient keys indicate MDC support in their feature flags. @item --disable-mdc @opindex disable-mdc Disable the use of the modification detection code. Note that by using this option, the encrypted message becomes vulnerable to a message modification attack. @item --personal-cipher-preferences @code{string} @opindex personal-cipher-preferences Set the list of personal cipher preferences to @code{string}. Use @command{@gpgname --version} to get a list of available algorithms, and use @code{none} to set no preference at all. This allows the user to safely override the algorithm chosen by the recipient key preferences, as GPG will only select an algorithm that is usable by all recipients. The most highly ranked cipher in this list is also used for the @option{--symmetric} encryption command. @item --personal-digest-preferences @code{string} @opindex personal-digest-preferences Set the list of personal digest preferences to @code{string}. Use @command{@gpgname --version} to get a list of available algorithms, and use @code{none} to set no preference at all. This allows the user to safely override the algorithm chosen by the recipient key preferences, as GPG will only select an algorithm that is usable by all recipients. The most highly ranked digest algorithm in this list is also used when signing without encryption (e.g. @option{--clearsign} or @option{--sign}). @item --personal-compress-preferences @code{string} @opindex personal-compress-preferences Set the list of personal compression preferences to @code{string}. Use @command{@gpgname --version} to get a list of available algorithms, and use @code{none} to set no preference at all. This allows the user to safely override the algorithm chosen by the recipient key preferences, as GPG will only select an algorithm that is usable by all recipients. The most highly ranked compression algorithm in this list is also used when there are no recipient keys to consider (e.g. @option{--symmetric}). @item --s2k-cipher-algo @code{name} @opindex s2k-cipher-algo Use @code{name} as the cipher algorithm used to protect secret keys. The default cipher is @value{DEFSYMENCALGO}. This cipher is also used for conventional encryption if @option{--personal-cipher-preferences} and @option{--cipher-algo} is not given. @item --s2k-digest-algo @code{name} @opindex s2k-digest-algo Use @code{name} as the digest algorithm used to mangle the passphrases. The default algorithm is SHA-1. @item --s2k-mode @code{n} @opindex s2k-mode Selects how passphrases are mangled. If @code{n} is 0 a plain passphrase (which is not recommended) will be used, a 1 adds a salt to the passphrase and a 3 (the default) iterates the whole process a number of times (see --s2k-count). Unless @option{--rfc1991} is used, this mode is also used for conventional encryption. @item --s2k-count @code{n} @opindex s2k-count Specify how many times the passphrase mangling is repeated. This value may range between 1024 and 65011712 inclusive. The default is inquired from gpg-agent. Note that not all values in the 1024-65011712 range are legal and if an illegal value is selected, GnuPG will round up to the nearest legal value. This option is only meaningful if @option{--s2k-mode} is 3. @end table @c *************************** @c ******* Compliance ******** @c *************************** @node Compliance Options @subsection Compliance options These options control what GnuPG is compliant to. Only one of these options may be active at a time. Note that the default setting of this is nearly always the correct one. See the INTEROPERABILITY WITH OTHER OPENPGP PROGRAMS section below before using one of these options. @table @gnupgtabopt @item --gnupg @opindex gnupg Use standard GnuPG behavior. This is essentially OpenPGP behavior (see @option{--openpgp}), but with some additional workarounds for common compatibility problems in different versions of PGP. This is the default option, so it is not generally needed, but it may be useful to override a different compliance option in the gpg.conf file. @item --openpgp @opindex openpgp Reset all packet, cipher and digest options to strict OpenPGP behavior. Use this option to reset all previous options like @option{--s2k-*}, @option{--cipher-algo}, @option{--digest-algo} and @option{--compress-algo} to OpenPGP compliant values. All PGP workarounds are disabled. @item --rfc4880 @opindex rfc4880 Reset all packet, cipher and digest options to strict RFC-4880 behavior. Note that this is currently the same thing as @option{--openpgp}. @item --rfc2440 @opindex rfc2440 Reset all packet, cipher and digest options to strict RFC-2440 behavior. @ifclear gpgtowone @item --rfc1991 @opindex rfc1991 Try to be more RFC-1991 (PGP 2.x) compliant. This option is deprecated will be removed in GnuPG 2.1. @item --pgp2 @opindex pgp2 Set up all options to be as PGP 2.x compliant as possible, and warn if an action is taken (e.g. encrypting to a non-RSA key) that will create a message that PGP 2.x will not be able to handle. Note that `PGP 2.x' here means `MIT PGP 2.6.2'. There are other versions of PGP 2.x available, but the MIT release is a good common baseline. This option implies @option{--rfc1991 --disable-mdc --no-force-v4-certs --escape-from-lines --force-v3-sigs --allow-weak-digest-algos --cipher-algo IDEA --digest-algo MD5 --compress-algo ZIP}. It also disables @option{--textmode} when encrypting. This option is deprecated will be removed in GnuPG 2.1. The reason for dropping PGP-2 support is that the PGP 2 format is not anymore considered safe (for example due to the use of the broken MD5 algorithm). Note that the decryption of PGP-2 created messages will continue to work. @end ifclear @item --pgp6 @opindex pgp6 Set up all options to be as PGP 6 compliant as possible. This restricts you to the ciphers IDEA (if the IDEA plugin is installed), 3DES, and CAST5, the hashes MD5, SHA1 and RIPEMD160, and the compression algorithms none and ZIP. This also disables --throw-keyids, and making signatures with signing subkeys as PGP 6 does not understand signatures made by signing subkeys. This option implies @option{--disable-mdc --escape-from-lines --force-v3-sigs}. @item --pgp7 @opindex pgp7 Set up all options to be as PGP 7 compliant as possible. This is identical to @option{--pgp6} except that MDCs are not disabled, and the list of allowable ciphers is expanded to add AES128, AES192, AES256, and TWOFISH. @item --pgp8 @opindex pgp8 Set up all options to be as PGP 8 compliant as possible. PGP 8 is a lot closer to the OpenPGP standard than previous versions of PGP, so all this does is disable @option{--throw-keyids} and set @option{--escape-from-lines}. All algorithms are allowed except for the SHA224, SHA384, and SHA512 digests. @end table @c ******************************************* @c ******** ESOTERIC OPTIONS *************** @c ******************************************* @node GPG Esoteric Options @subsection Doing things one usually doesn't want to do. @table @gnupgtabopt @item -n @itemx --dry-run @opindex dry-run Don't make any changes (this is not completely implemented). @item --list-only @opindex list-only Changes the behaviour of some commands. This is like @option{--dry-run} but different in some cases. The semantic of this command may be extended in the future. Currently it only skips the actual decryption pass and therefore enables a fast listing of the encryption keys. @item -i @itemx --interactive @opindex interactive Prompt before overwriting any files. @item --debug-level @var{level} @opindex debug-level Select the debug level for investigating problems. @var{level} may be a numeric value or by a keyword: @table @code @item none No debugging at all. A value of less than 1 may be used instead of the keyword. @item basic Some basic debug messages. A value between 1 and 2 may be used instead of the keyword. @item advanced More verbose debug messages. A value between 3 and 5 may be used instead of the keyword. @item expert Even more detailed messages. A value between 6 and 8 may be used instead of the keyword. @item guru All of the debug messages you can get. A value greater than 8 may be used instead of the keyword. The creation of hash tracing files is only enabled if the keyword is used. @end table How these messages are mapped to the actual debugging flags is not specified and may change with newer releases of this program. They are however carefully selected to best aid in debugging. @item --debug @var{flags} @opindex debug Set debugging flags. All flags are or-ed and @var{flags} may be given in C syntax (e.g. 0x0042). @item --debug-all @opindex debug-all Set all useful debugging flags. @item --debug-ccid-driver @opindex debug-ccid-driver Enable debug output from the included CCID driver for smartcards. Note that this option is only available on some system. @item --faked-system-time @var{epoch} @opindex faked-system-time This option is only useful for testing; it sets the system time back or forth to @var{epoch} which is the number of seconds elapsed since the year 1970. Alternatively @var{epoch} may be given as a full ISO time string (e.g. "20070924T154812"). @item --enable-progress-filter @opindex enable-progress-filter Enable certain PROGRESS status outputs. This option allows frontends to display a progress indicator while gpg is processing larger files. There is a slight performance overhead using it. @item --status-fd @code{n} @opindex status-fd Write special status strings to the file descriptor @code{n}. See the file DETAILS in the documentation for a listing of them. @item --status-file @code{file} @opindex status-file Same as @option{--status-fd}, except the status data is written to file @code{file}. @item --logger-fd @code{n} @opindex logger-fd Write log output to file descriptor @code{n} and not to STDERR. @item --log-file @code{file} @itemx --logger-file @code{file} @opindex log-file Same as @option{--logger-fd}, except the logger data is written to file @code{file}. Note that @option{--log-file} is only implemented for GnuPG-2. @item --attribute-fd @code{n} @opindex attribute-fd Write attribute subpackets to the file descriptor @code{n}. This is most useful for use with @option{--status-fd}, since the status messages are needed to separate out the various subpackets from the stream delivered to the file descriptor. @item --attribute-file @code{file} @opindex attribute-file Same as @option{--attribute-fd}, except the attribute data is written to file @code{file}. @item --comment @code{string} @itemx --no-comments @opindex comment Use @code{string} as a comment string in clear text signatures and ASCII armored messages or keys (see @option{--armor}). The default behavior is not to use a comment string. @option{--comment} may be repeated multiple times to get multiple comment strings. @option{--no-comments} removes all comments. It is a good idea to keep the length of a single comment below 60 characters to avoid problems with mail programs wrapping such lines. Note that comment lines, like all other header lines, are not protected by the signature. @item --emit-version @itemx --no-emit-version @opindex emit-version Force inclusion of the version string in ASCII armored output. If given once only the name of the program and the major number is emitted (default), given twice the minor is also emitted, given triple the micro is added, and given quad an operating system identification is also emitted. @option{--no-emit-version} disables the version line. @item --sig-notation @code{name=value} @itemx --cert-notation @code{name=value} @itemx -N, --set-notation @code{name=value} @opindex sig-notation @opindex cert-notation @opindex set-notation Put the name value pair into the signature as notation data. @code{name} must consist only of printable characters or spaces, and must contain a '@@' character in the form keyname@@domain.example.com (substituting the appropriate keyname and domain name, of course). This is to help prevent pollution of the IETF reserved notation namespace. The @option{--expert} flag overrides the '@@' check. @code{value} may be any printable string; it will be encoded in UTF8, so you should check that your @option{--display-charset} is set correctly. If you prefix @code{name} with an exclamation mark (!), the notation data will be flagged as critical (rfc4880:5.2.3.16). @option{--sig-notation} sets a notation for data signatures. @option{--cert-notation} sets a notation for key signatures (certifications). @option{--set-notation} sets both. There are special codes that may be used in notation names. "%k" will be expanded into the key ID of the key being signed, "%K" into the long key ID of the key being signed, "%f" into the fingerprint of the key being signed, "%s" into the key ID of the key making the signature, "%S" into the long key ID of the key making the signature, "%g" into the fingerprint of the key making the signature (which might be a subkey), "%p" into the fingerprint of the primary key of the key making the signature, "%c" into the signature count from the OpenPGP smartcard, and "%%" results in a single "%". %k, %K, and %f are only meaningful when making a key signature (certification), and %c is only meaningful when using the OpenPGP smartcard. @item --sig-policy-url @code{string} @itemx --cert-policy-url @code{string} @itemx --set-policy-url @code{string} @opindex sig-policy-url @opindex cert-policy-url @opindex set-policy-url Use @code{string} as a Policy URL for signatures (rfc4880:5.2.3.20). If you prefix it with an exclamation mark (!), the policy URL packet will be flagged as critical. @option{--sig-policy-url} sets a policy url for data signatures. @option{--cert-policy-url} sets a policy url for key signatures (certifications). @option{--set-policy-url} sets both. The same %-expandos used for notation data are available here as well. @item --sig-keyserver-url @code{string} @opindex sig-keyserver-url Use @code{string} as a preferred keyserver URL for data signatures. If you prefix it with an exclamation mark (!), the keyserver URL packet will be flagged as critical. The same %-expandos used for notation data are available here as well. @item --set-filename @code{string} @opindex set-filename Use @code{string} as the filename which is stored inside messages. This overrides the default, which is to use the actual filename of the file being encrypted. @item --for-your-eyes-only @itemx --no-for-your-eyes-only @opindex for-your-eyes-only Set the `for your eyes only' flag in the message. This causes GnuPG to refuse to save the file unless the @option{--output} option is given, and PGP to use a "secure viewer" with a claimed Tempest-resistant font to display the message. This option overrides @option{--set-filename}. @option{--no-for-your-eyes-only} disables this option. @item --use-embedded-filename @itemx --no-use-embedded-filename @opindex use-embedded-filename Try to create a file with a name as embedded in the data. This can be a dangerous option as it allows to overwrite files. Defaults to no. @item --cipher-algo @code{name} @opindex cipher-algo Use @code{name} as cipher algorithm. Running the program with the command @option{--version} yields a list of supported algorithms. If this is not used the cipher algorithm is selected from the preferences stored with the key. In general, you do not want to use this option as it allows you to violate the OpenPGP standard. @option{--personal-cipher-preferences} is the safe way to accomplish the same thing. @item --digest-algo @code{name} @opindex digest-algo Use @code{name} as the message digest algorithm. Running the program with the command @option{--version} yields a list of supported algorithms. In general, you do not want to use this option as it allows you to violate the OpenPGP standard. @option{--personal-digest-preferences} is the safe way to accomplish the same thing. @item --compress-algo @code{name} @opindex compress-algo Use compression algorithm @code{name}. "zlib" is RFC-1950 ZLIB compression. "zip" is RFC-1951 ZIP compression which is used by PGP. "bzip2" is a more modern compression scheme that can compress some things better than zip or zlib, but at the cost of more memory used during compression and decompression. "uncompressed" or "none" disables compression. If this option is not used, the default behavior is to examine the recipient key preferences to see which algorithms the recipient supports. If all else fails, ZIP is used for maximum compatibility. ZLIB may give better compression results than ZIP, as the compression window size is not limited to 8k. BZIP2 may give even better compression results than that, but will use a significantly larger amount of memory while compressing and decompressing. This may be significant in low memory situations. Note, however, that PGP (all versions) only supports ZIP compression. Using any algorithm other than ZIP or "none" will make the message unreadable with PGP. In general, you do not want to use this option as it allows you to violate the OpenPGP standard. @option{--personal-compress-preferences} is the safe way to accomplish the same thing. @item --cert-digest-algo @code{name} @opindex cert-digest-algo Use @code{name} as the message digest algorithm used when signing a key. Running the program with the command @option{--version} yields a list of supported algorithms. Be aware that if you choose an algorithm that GnuPG supports but other OpenPGP implementations do not, then some users will not be able to use the key signatures you make, or quite possibly your entire key. @item --disable-cipher-algo @code{name} @opindex disable-cipher-algo Never allow the use of @code{name} as cipher algorithm. The given name will not be checked so that a later loaded algorithm will still get disabled. @item --disable-pubkey-algo @code{name} @opindex disable-pubkey-algo Never allow the use of @code{name} as public key algorithm. The given name will not be checked so that a later loaded algorithm will still get disabled. @item --throw-keyids @itemx --no-throw-keyids @opindex throw-keyids Do not put the recipient key IDs into encrypted messages. This helps to hide the receivers of the message and is a limited countermeasure against traffic analysis.@footnote{Using a little social engineering anyone who is able to decrypt the message can check whether one of the other recipients is the one he suspects.} On the receiving side, it may slow down the decryption process because all available secret keys must be tried. @option{--no-throw-keyids} disables this option. This option is essentially the same as using @option{--hidden-recipient} for all recipients. @item --not-dash-escaped @opindex not-dash-escaped This option changes the behavior of cleartext signatures so that they can be used for patch files. You should not send such an armored file via email because all spaces and line endings are hashed too. You can not use this option for data which has 5 dashes at the beginning of a line, patch files don't have this. A special armor header line tells GnuPG about this cleartext signature option. @item --escape-from-lines @itemx --no-escape-from-lines @opindex escape-from-lines Because some mailers change lines starting with "From " to ">From " it is good to handle such lines in a special way when creating cleartext signatures to prevent the mail system from breaking the signature. Note that all other PGP versions do it this way too. Enabled by default. @option{--no-escape-from-lines} disables this option. @item --passphrase-repeat @code{n} @opindex passphrase-repeat Specify how many times @command{@gpgname} will request a new passphrase be repeated. This is useful for helping memorize a passphrase. Defaults to 1 repetition. @item --passphrase-fd @code{n} @opindex passphrase-fd Read the passphrase from file descriptor @code{n}. Only the first line will be read from file descriptor @code{n}. If you use 0 for @code{n}, the passphrase will be read from STDIN. This can only be used if only one passphrase is supplied. @item --passphrase-file @code{file} @opindex passphrase-file Read the passphrase from file @code{file}. Only the first line will be read from file @code{file}. This can only be used if only one passphrase is supplied. Obviously, a passphrase stored in a file is of questionable security if other users can read this file. Don't use this option if you can avoid it. @item --passphrase @code{string} @opindex passphrase Use @code{string} as the passphrase. This can only be used if only one passphrase is supplied. Obviously, this is of very questionable security on a multi-user system. Don't use this option if you can avoid it. @item --command-fd @code{n} @opindex command-fd This is a replacement for the deprecated shared-memory IPC mode. If this option is enabled, user input on questions is not expected from the TTY but from the given file descriptor. It should be used together with @option{--status-fd}. See the file doc/DETAILS in the source distribution for details on how to use it. @item --command-file @code{file} @opindex command-file Same as @option{--command-fd}, except the commands are read out of file @code{file} @item --allow-non-selfsigned-uid @itemx --no-allow-non-selfsigned-uid @opindex allow-non-selfsigned-uid Allow the import and use of keys with user IDs which are not self-signed. This is not recommended, as a non self-signed user ID is trivial to forge. @option{--no-allow-non-selfsigned-uid} disables. @item --allow-freeform-uid @opindex allow-freeform-uid Disable all checks on the form of the user ID while generating a new one. This option should only be used in very special environments as it does not ensure the de-facto standard format of user IDs. @item --ignore-time-conflict @opindex ignore-time-conflict GnuPG normally checks that the timestamps associated with keys and signatures have plausible values. However, sometimes a signature seems to be older than the key due to clock problems. This option makes these checks just a warning. See also @option{--ignore-valid-from} for timestamp issues on subkeys. @item --ignore-valid-from @opindex ignore-valid-from GnuPG normally does not select and use subkeys created in the future. This option allows the use of such keys and thus exhibits the pre-1.0.7 behaviour. You should not use this option unless there is some clock problem. See also @option{--ignore-time-conflict} for timestamp issues with signatures. @item --ignore-crc-error @opindex ignore-crc-error The ASCII armor used by OpenPGP is protected by a CRC checksum against transmission errors. Occasionally the CRC gets mangled somewhere on the transmission channel but the actual content (which is protected by the OpenPGP protocol anyway) is still okay. This option allows GnuPG to ignore CRC errors. @item --ignore-mdc-error @opindex ignore-mdc-error This option changes a MDC integrity protection failure into a warning. This can be useful if a message is partially corrupt, but it is necessary to get as much data as possible out of the corrupt message. However, be aware that a MDC protection failure may also mean that the message was tampered with intentionally by an attacker. @item --allow-weak-digest-algos @opindex allow-weak-digest-algos Signatures made with known-weak digest algorithms are normally rejected with an ``invalid digest algorithm'' message. This option allows the verification of signatures made with such weak algorithms. MD5 is the only digest algorithm considered weak by default. See also @option{--weak-digest} to reject other digest algorithms. @item --weak-digest @code{name} @opindex weak-digest Treat the specified digest algorithm as weak. Signatures made over weak digests algorithms are normally rejected. This option can be supplied multiple times if multiple algorithms should be considered weak. See also @option{--allow-weak-digest-algos} to disable rejection of weak digests. MD5 is always considered weak, and does not need to be listed explicitly. @item --no-default-keyring @opindex no-default-keyring Do not add the default keyrings to the list of keyrings. Note that GnuPG will not operate without any keyrings, so if you use this option and do not provide alternate keyrings via @option{--keyring} or @option{--secret-keyring}, then GnuPG will still use the default public or secret keyrings. @item --skip-verify @opindex skip-verify Skip the signature verification step. This may be used to make the decryption faster if the signature verification is not needed. @item --with-key-data @opindex with-key-data Print key listings delimited by colons (like @option{--with-colons}) and print the public key data. @item --fast-list-mode @opindex fast-list-mode Changes the output of the list commands to work faster; this is achieved by leaving some parts empty. Some applications don't need the user ID and the trust information given in the listings. By using this options they can get a faster listing. The exact behaviour of this option may change in future versions. If you are missing some information, don't use this option. @item --no-literal @opindex no-literal This is not for normal use. Use the source to see for what it might be useful. @item --set-filesize @opindex set-filesize This is not for normal use. Use the source to see for what it might be useful. @item --show-session-key @opindex show-session-key Display the session key used for one message. See @option{--override-session-key} for the counterpart of this option. We think that Key Escrow is a Bad Thing; however the user should have the freedom to decide whether to go to prison or to reveal the content of one specific message without compromising all messages ever encrypted for one secret key. DON'T USE IT UNLESS YOU ARE REALLY FORCED TO DO SO. @item --override-session-key @code{string} @opindex override-session-key Don't use the public key but the session key @code{string}. The format of this string is the same as the one printed by @option{--show-session-key}. This option is normally not used but comes handy in case someone forces you to reveal the content of an encrypted message; using this option you can do this without handing out the secret key. @item --ask-sig-expire @itemx --no-ask-sig-expire @opindex ask-sig-expire When making a data signature, prompt for an expiration time. If this option is not specified, the expiration time set via @option{--default-sig-expire} is used. @option{--no-ask-sig-expire} disables this option. @item --default-sig-expire @opindex default-sig-expire The default expiration time to use for signature expiration. Valid values are "0" for no expiration, a number followed by the letter d (for days), w (for weeks), m (for months), or y (for years) (for example "2m" for two months, or "5y" for five years), or an absolute date in the form YYYY-MM-DD. Defaults to "0". @item --ask-cert-expire @itemx --no-ask-cert-expire @opindex ask-cert-expire When making a key signature, prompt for an expiration time. If this option is not specified, the expiration time set via @option{--default-cert-expire} is used. @option{--no-ask-cert-expire} disables this option. @item --default-cert-expire @opindex default-cert-expire The default expiration time to use for key signature expiration. Valid values are "0" for no expiration, a number followed by the letter d (for days), w (for weeks), m (for months), or y (for years) (for example "2m" for two months, or "5y" for five years), or an absolute date in the form YYYY-MM-DD. Defaults to "0". @item --allow-secret-key-import @opindex allow-secret-key-import This is an obsolete option and is not used anywhere. @item --allow-multiple-messages @item --no-allow-multiple-messages @opindex allow-multiple-messages Allow processing of multiple OpenPGP messages contained in a single file or stream. Some programs that call GPG are not prepared to deal with multiple messages being processed together, so this option defaults to no. Note that versions of GPG prior to 1.4.7 always allowed multiple messages. Warning: Do not use this option unless you need it as a temporary workaround! @item --enable-special-filenames @opindex enable-special-filenames This options enables a mode in which filenames of the form @file{-&n}, where n is a non-negative decimal number, refer to the file descriptor n and not to a file with that name. @item --no-expensive-trust-checks @opindex no-expensive-trust-checks Experimental use only. @item --preserve-permissions @opindex preserve-permissions Don't change the permissions of a secret keyring back to user read/write only. Use this option only if you really know what you are doing. @item --default-preference-list @code{string} @opindex default-preference-list Set the list of default preferences to @code{string}. This preference list is used for new keys and becomes the default for "setpref" in the edit menu. @item --default-keyserver-url @code{name} @opindex default-keyserver-url Set the default keyserver URL to @code{name}. This keyserver will be used as the keyserver URL when writing a new self-signature on a key, which includes key generation and changing preferences. @item --list-config @opindex list-config Display various internal configuration parameters of GnuPG. This option is intended for external programs that call GnuPG to perform tasks, and is thus not generally useful. See the file @file{doc/DETAILS} in the source distribution for the details of which configuration items may be listed. @option{--list-config} is only usable with @option{--with-colons} set. @item --gpgconf-list @opindex gpgconf-list This command is similar to @option{--list-config} but in general only internally used by the @command{gpgconf} tool. @item --gpgconf-test @opindex gpgconf-test This is more or less dummy action. However it parses the configuration file and returns with failure if the configuration file would prevent @command{gpg} from startup. Thus it may be used to run a syntax check on the configuration file. @end table @c ******************************* @c ******* Deprecated ************ @c ******************************* @node Deprecated Options @subsection Deprecated options @table @gnupgtabopt @item --load-extension @code{name} @opindex load-extension Load an extension module. If @code{name} does not contain a slash it is searched for in the directory configured when GnuPG was built (generally "/usr/local/lib/gnupg"). Extensions are not generally useful anymore, and the use of this option is deprecated. @item --show-photos @itemx --no-show-photos @opindex show-photos Causes @option{--list-keys}, @option{--list-sigs}, @option{--list-public-keys}, @option{--list-secret-keys}, and verifying a signature to also display the photo ID attached to the key, if any. See also @option{--photo-viewer}. These options are deprecated. Use @option{--list-options [no-]show-photos} and/or @option{--verify-options [no-]show-photos} instead. @item --show-keyring @opindex show-keyring Display the keyring name at the head of key listings to show which keyring a given key resides on. This option is deprecated: use @option{--list-options [no-]show-keyring} instead. @item --ctapi-driver @code{file} @opindex ctapi-driver Use @code{file} to access the smartcard reader. The current default is `libtowitoko.so'. Note that the use of this interface is deprecated; it may be removed in future releases. @item --always-trust @opindex always-trust Identical to @option{--trust-model always}. This option is deprecated. @item --show-notation @itemx --no-show-notation @opindex show-notation Show signature notations in the @option{--list-sigs} or @option{--check-sigs} listings as well as when verifying a signature with a notation in it. These options are deprecated. Use @option{--list-options [no-]show-notation} and/or @option{--verify-options [no-]show-notation} instead. @item --show-policy-url @itemx --no-show-policy-url @opindex show-policy-url Show policy URLs in the @option{--list-sigs} or @option{--check-sigs} listings as well as when verifying a signature with a policy URL in it. These options are deprecated. Use @option{--list-options [no-]show-policy-url} and/or @option{--verify-options [no-]show-policy-url} instead. @end table @c ******************************************* @c *************** **************** @c *************** FILES **************** @c *************** **************** @c ******************************************* @mansect files @node GPG Configuration @section Configuration files There are a few configuration files to control certain aspects of @command{@gpgname}'s operation. Unless noted, they are expected in the current home directory (@pxref{option --homedir}). @table @file @item gpg.conf @cindex gpg.conf This is the standard configuration file read by @command{@gpgname} on startup. It may contain any valid long option; the leading two dashes may not be entered and the option may not be abbreviated. This default name may be changed on the command line (@pxref{gpg-option --options}). You should backup this file. @end table @c man:.RE Note that on larger installations, it is useful to put predefined files into the directory @file{/etc/skel/.gnupg/} so that newly created users start up with a working configuration. For internal purposes @command{@gpgname} creates and maintains a few other files; They all live in in the current home directory (@pxref{option --homedir}). Only the @command{@gpgname} may modify these files. @table @file @item ~/.gnupg/pubring.gpg The public keyring. You should backup this file. @item ~/.gnupg/pubring.gpg.lock The lock file for the public keyring. @item ~/.gnupg/pubring.kbx @itemx ~/.gnupg/pubring.kbx.lock A public keyring and its lock file used by GnuPG versions >= 2. It is ignored by GnuPG 1.x @item ~/.gnupg/secring.gpg The secret keyring. You should backup this file. @item ~/.gnupg/trustdb.gpg The trust database. There is no need to backup this file; it is better to backup the ownertrust values (@pxref{option --export-ownertrust}). @item ~/.gnupg/trustdb.gpg.lock The lock file for the trust database. @item ~/.gnupg/random_seed A file used to preserve the state of the internal random pool. @item ~/.gnupg/secring.gpg.lock The lock file for the secret keyring. @item ~/.gnupg/openpgp-revocs.d/ This is the directory where gpg stores pre-generated revocation certificates. The file name corresponds to the OpenPGP fingerprint of the respective key. It is suggested to backup those certificates and if the primary private key is not stored on the disk to move them to an external storage device. Anyone who can access theses files is able to revoke the corresponding key. You may want to print them out. You should backup all files in this directory and take care to keep this backup closed away. @item /usr[/local]/share/gnupg/options.skel The skeleton options file. @item /usr[/local]/lib/gnupg/ Default location for extensions. @end table @c man:.RE Operation is further controlled by a few environment variables: @table @asis @item HOME Used to locate the default home directory. @item GNUPGHOME If set directory used instead of "~/.gnupg". @item GPG_AGENT_INFO Used to locate the gpg-agent. This is only honored when @option{--use-agent} is set. The value consists of 3 colon delimited fields: The first is the path to the Unix Domain Socket, the second the PID of the gpg-agent and the protocol version which should be set to 1. When starting the gpg-agent as described in its documentation, this variable is set to the correct value. The option @option{--gpg-agent-info} can be used to override it. @item PINENTRY_USER_DATA This value is passed via gpg-agent to pinentry. It is useful to convey extra information to a custom pinentry. @item COLUMNS @itemx LINES Used to size some displays to the full size of the screen. @item LANGUAGE Apart from its use by GNU, it is used in the W32 version to override the language selection done through the Registry. If used and set to a valid and available language name (@var{langid}), the file with the translation is loaded from @code{@var{gpgdir}/gnupg.nls/@var{langid}.mo}. Here @var{gpgdir} is the directory out of which the gpg binary has been loaded. If it can't be loaded the Registry is tried and as last resort the native Windows locale system is used. @end table @c ******************************************* @c *************** **************** @c *************** EXAMPLES **************** @c *************** **************** @c ******************************************* @mansect examples @node GPG Examples @section Examples @table @asis @item gpg -se -r @code{Bob} @code{file} sign and encrypt for user Bob @item gpg --clearsign @code{file} make a clear text signature @item gpg -sb @code{file} make a detached signature @item gpg -u 0x12345678 -sb @code{file} make a detached signature with the key 0x12345678 @item gpg --list-keys @code{user_ID} show keys @item gpg --fingerprint @code{user_ID} show fingerprint @item gpg --verify @code{pgpfile} @itemx gpg --verify @code{sigfile} Verify the signature of the file but do not output the data. The second form is used for detached signatures, where @code{sigfile} is the detached signature (either ASCII armored or binary) and are the signed data; if this is not given, the name of the file holding the signed data is constructed by cutting off the extension (".asc" or ".sig") of @code{sigfile} or by asking the user for the filename. @end table @c ******************************************* @c *************** **************** @c *************** USER ID **************** @c *************** **************** @c ******************************************* @mansect how to specify a user id @ifset isman @include specify-user-id.texi @end ifset @mansect return value @chapheading RETURN VALUE The program returns 0 if everything was fine, 1 if at least a signature was bad, and other error codes for fatal errors. @mansect warnings @chapheading WARNINGS Use a *good* password for your user account and a *good* passphrase to protect your secret key. This passphrase is the weakest part of the whole system. Programs to do dictionary attacks on your secret keyring are very easy to write and so you should protect your "~/.gnupg/" directory very well. Keep in mind that, if this program is used over a network (telnet), it is *very* easy to spy out your passphrase! If you are going to verify detached signatures, make sure that the program knows about it; either give both filenames on the command line or use @samp{-} to specify STDIN. @mansect interoperability @chapheading INTEROPERABILITY WITH OTHER OPENPGP PROGRAMS GnuPG tries to be a very flexible implementation of the OpenPGP standard. In particular, GnuPG implements many of the optional parts of the standard, such as the SHA-512 hash, and the ZLIB and BZIP2 compression algorithms. It is important to be aware that not all OpenPGP programs implement these optional algorithms and that by forcing their use via the @option{--cipher-algo}, @option{--digest-algo}, @option{--cert-digest-algo}, or @option{--compress-algo} options in GnuPG, it is possible to create a perfectly valid OpenPGP message, but one that cannot be read by the intended recipient. There are dozens of variations of OpenPGP programs available, and each supports a slightly different subset of these optional algorithms. For example, until recently, no (unhacked) version of PGP supported the BLOWFISH cipher algorithm. A message using BLOWFISH simply could not be read by a PGP user. By default, GnuPG uses the standard OpenPGP preferences system that will always do the right thing and create messages that are usable by all recipients, regardless of which OpenPGP program they use. Only override this safe default if you really know what you are doing. If you absolutely must override the safe default, or if the preferences on a given key are invalid for some reason, you are far better off using the @option{--pgp6}, @option{--pgp7}, or @option{--pgp8} options. These options are safe as they do not force any particular algorithms in violation of OpenPGP, but rather reduce the available algorithms to a "PGP-safe" list. @mansect bugs @chapheading BUGS On older systems this program should be installed as setuid(root). This is necessary to lock memory pages. Locking memory pages prevents the operating system from writing memory pages (which may contain passphrases or other sensitive material) to disk. If you get no warning message about insecure memory your operating system supports locking without being root. The program drops root privileges as soon as locked memory is allocated. Note also that some systems (especially laptops) have the ability to ``suspend to disk'' (also known as ``safe sleep'' or ``hibernate''). This writes all memory to disk before going into a low power or even powered off mode. Unless measures are taken in the operating system to protect the saved memory, passphrases or other sensitive material may be recoverable from it later. Before you report a bug you should first search the mailing list archives for similar problems and second check whether such a bug has already been reported to our bug tracker at http://bugs.gnupg.org . @c ******************************************* @c *************** ************** @c *************** UNATTENDED ************** @c *************** ************** @c ******************************************* @manpause @node Unattended Usage of GPG @section Unattended Usage @command{gpg} is often used as a backend engine by other software. To help with this a machine interface has been defined to have an unambiguous way to do this. The options @option{--status-fd} and @option{--batch} are almost always required for this. @menu * Unattended GPG key generation:: Unattended key generation @end menu @node Unattended GPG key generation @subsection Unattended key generation The command @option{--gen-key} may be used along with the option @option{--batch} for unattended key generation. The parameters are either read from stdin or given as a file on the command line. The format of the parameter file is as follows: @itemize @bullet @item Text only, line length is limited to about 1000 characters. @item UTF-8 encoding must be used to specify non-ASCII characters. @item Empty lines are ignored. @item Leading and trailing while space is ignored. @item A hash sign as the first non white space character indicates a comment line. @item Control statements are indicated by a leading percent sign, the arguments are separated by white space from the keyword. @item Parameters are specified by a keyword, followed by a colon. Arguments are separated by white space. @item The first parameter must be @samp{Key-Type}; control statements may be placed anywhere. @item The order of the parameters does not matter except for @samp{Key-Type} which must be the first parameter. The parameters are only used for the generated keyblock (primary and subkeys); parameters from previous sets are not used. Some syntactically checks may be performed. @item Key generation takes place when either the end of the parameter file is reached, the next @samp{Key-Type} parameter is encountered or at the control statement @samp{%commit} is encountered. @end itemize @noindent Control statements: @table @asis @item %echo @var{text} Print @var{text} as diagnostic. @item %dry-run Suppress actual key generation (useful for syntax checking). @item %commit Perform the key generation. Note that an implicit commit is done at the next @asis{Key-Type} parameter. @item %pubring @var{filename} @itemx %secring @var{filename} Do not write the key to the default or commandline given keyring but to @var{filename}. This must be given before the first commit to take place, duplicate specification of the same filename is ignored, the last filename before a commit is used. The filename is used until a new filename is used (at commit points) and all keys are written to that file. If a new filename is given, this file is created (and overwrites an existing one). For GnuPG versions prior to 2.1, both control statements must be given. For GnuPG 2.1 and later @samp{%secring} is a no-op. @item %ask-passphrase @itemx %no-ask-passphrase Enable (or disable) a mode where the command @option{passphrase} is ignored and instead the usual passphrase dialog is used. This does not make sense for batch key generation; however the unattended key generation feature is also used by GUIs and this feature relinquishes the GUI from implementing its own passphrase entry code. These are global control statements and affect all future key genrations. @item %no-protection Since GnuPG version 2.1 it is not anymore possible to specify a passphrase for unattended key generation. The passphrase command is simply ignored and @samp{%ask-passpharse} is thus implicitly enabled. Using this option allows the creation of keys without any passphrase protection. This option is mainly intended for regression tests. @item %transient-key If given the keys are created using a faster and a somewhat less secure random number generator. This option may be used for keys which are only used for a short time and do not require full cryptographic strength. It takes only effect if used together with the control statement @samp{%no-protection}. @end table @noindent General Parameters: @table @asis @item Key-Type: @var{algo} Starts a new parameter block by giving the type of the primary key. The algorithm must be capable of signing. This is a required parameter. @var{algo} may either be an OpenPGP algorithm number or a string with the algorithm name. The special value @samp{default} may be used for @var{algo} to create the default key type; in this case a @samp{Key-Usage} shall not be given and @samp{default} also be used for @samp{Subkey-Type}. @item Key-Length: @var{nbits} The requested length of the generated key in bits. The default is returned by running the command @samp{gpg2 --gpgconf-list}. @item Key-Grip: @var{hexstring} This is optional and used to generate a CSR or certificate for an already existing key. Key-Length will be ignored when given. @item Key-Usage: @var{usage-list} Space or comma delimited list of key usages. Allowed values are @samp{encrypt}, @samp{sign}, and @samp{auth}. This is used to generate the key flags. Please make sure that the algorithm is capable of this usage. Note that OpenPGP requires that all primary keys are capable of certification, so no matter what usage is given here, the @samp{cert} flag will be on. If no @samp{Key-Usage} is specified and the @samp{Key-Type} is not @samp{default}, all allowed usages for that particular algorithm are used; if it is not given but @samp{default} is used the usage will be @samp{sign}. @item Subkey-Type: @var{algo} This generates a secondary key (subkey). Currently only one subkey can be handled. See also @samp{Key-Type} above. @item Subkey-Length: @var{nbits} Length of the secondary key (subkey) in bits. The default is returned by running the command @samp{gpg2 --gpgconf-list}". @item Subkey-Usage: @var{usage-list} Key usage lists for a subkey; similar to @samp{Key-Usage}. @item Passphrase: @var{string} If you want to specify a passphrase for the secret key, enter it here. Default is not to use any passphrase. @item Name-Real: @var{name} @itemx Name-Comment: @var{comment} @itemx Name-Email: @var{email} The three parts of a user name. Remember to use UTF-8 encoding here. If you don't give any of them, no user ID is created. @item Expire-Date: @var{iso-date}|(@var{number}[d|w|m|y]) Set the expiration date for the key (and the subkey). It may either be entered in ISO date format (e.g. "20000815T145012") or as number of days, weeks, month or years after the creation date. The special notation "seconds=N" is also allowed to specify a number of seconds since creation. Without a letter days are assumed. Note that there is no check done on the overflow of the type used by OpenPGP for timestamps. Thus you better make sure that the given value make sense. Although OpenPGP works with time intervals, GnuPG uses an absolute value internally and thus the last year we can represent is 2105. @item Creation-Date: @var{iso-date} Set the creation date of the key as stored in the key information and which is also part of the fingerprint calculation. Either a date like "1986-04-26" or a full timestamp like "19860426T042640" may be used. The time is considered to be UTC. The special notation "seconds=N" may be used to directly specify a the number of seconds since Epoch (Unix time). If it is not given the current time is used. @item Preferences: @var{string} Set the cipher, hash, and compression preference values for this key. This expects the same type of string as the sub-command @samp{setpref} in the @option{--edit-key} menu. @item Revoker: @var{algo}:@var{fpr} [sensitive] Add a designated revoker to the generated key. Algo is the public key algorithm of the designated revoker (i.e. RSA=1, DSA=17, etc.) @var{fpr} is the fingerprint of the designated revoker. The optional @samp{sensitive} flag marks the designated revoker as sensitive information. Only v4 keys may be designated revokers. @item Keyserver: @var{string} This is an optional parameter that specifies the preferred keyserver URL for the key. @item Handle: @var{string} This is an optional parameter only used with the status lines KEY_CREATED and KEY_NOT_CREATED. @var{string} may be up to 100 characters and should not contain spaces. It is useful for batch key generation to associate a key parameter block with a status line. @end table @noindent Here is an example on how to create a key: @smallexample $ cat >foo < ssb 1024g/8F70E2C0 2000-03-09 @end smallexample @noindent If you want to create a key with the default algorithms you would use these parameters: @smallexample %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Joe Tester Name-Comment: with stupid passphrase Name-Email: joe@@foo.bar Expire-Date: 0 Passphrase: abc %pubring foo.pub %secring foo.sec # Do a commit here, so that we can later print "done" :-) %commit %echo done @end smallexample @mansect see also @ifset isman @command{gpgv}(1), @end ifset @include see-also-note.texi gnupg-1.4.20/doc/highlights-1.4.txt0000644000175000017500000001762112635262326013615 00000000000000GnuPG 1.4 Highlights ==================== This is a brief overview of the changes between the GnuPG 1.2 series and the new GnuPG 1.4 series. To read the full list of highlights for each revision that led up to 1.4, see the NEWS file in the GnuPG distribution. This document is based on the NEWS file, and is thus the highlights of the highlights. When upgrading, note that RFC-2440, the OpenPGP standard, is currently being revised. Most of the revisions in the latest draft (2440bis-12) have already been incorporated into GnuPG 1.4. Algorithm Changes ----------------- OpenPGP supports many different algorithms for encryption, hashing, and compression, and taking into account the OpenPGP revisions, GnuPG 1.4 supports a slightly different algorithm set than 1.2 did. The SHA256, SHA384, and SHA512 hashes are now supported for read and write. The BZIP2 compression algorithm is now supported for read and write. Due to the recent successful attack on the MD5 hash algorithm (discussed in , among other places), MD5 is deprecated for OpenPGP use. It is still allowed in GnuPG 1.4 for backwards compatibility, but a warning is given when it is used. The TIGER/192 hash is no longer available. This should not be interpreted as a statement as to the quality of TIGER/192 - rather, the revised OpenPGP standard removes support for several unused or mostly unused hashes, and TIGER/192 was one of them. Similarly, Elgamal signatures and the Elgamal signing key type have been removed from the OpenPGP standard, and thus from GnuPG. Please do not confuse Elgamal signatures with DSA or DSS signatures or with Elgamal encryption. Elgamal signatures were very rarely used and were not supported in any product other than GnuPG. Elgamal encryption was and still is part of OpenPGP and GnuPG. Very old (pre-1.0) versions of GnuPG supported a nonstandard (contrary to OpenPGP) Elgamal key type. While no recent version of GnuPG permitted the generation of such keys, GnuPG 1.2 could still use them. GnuPG 1.4 no longer allows the use of these keys or the (also nonstandard) messages generated using them. At build time, it is possible to select which algorithms will be built into GnuPG. This can be used to build a smaller program binary for embedded uses where space is tight. Keyserver Changes ----------------- GnuPG 1.4 does all keyserver operations via plugin or helper applications. This allows the main GnuPG program to be smaller and simpler. People who package GnuPG for various reasons have the flexibility to include or leave out support for any keyserver type as desired. Support for fetching keys via HTTP and finger has been added. This is mainly useful for setting a preferred keyserver URL like "http://www.jabberwocky.com/key.asc". or "finger:wk@g10code.com". The LDAP keyserver helper now supports storing, retrieving, and searching for keys in both the old NAI "LDAP keyserver" as well as the more recent method to store OpenPGP keys in standard LDAP servers. This is compatible with the storage schema that PGP uses, so both products can interoperate with the same LDAP server. The LDAP keyserver helper is compatible with the PGP company's new "Global Directory" service. If the LDAP library you use supports LDAP-over-TLS and LDAPS, then GnuPG detects this and supports them as well. Note that using TLS or LDAPS does not improve the security of GnuPG itself, but may be useful in certain key distribution scenarios. HTTP Basic authentication is now supported for all HKP and HTTP keyserver functions, either through a proxy or via direct access. The HKP keyserver plugin supports the new machine-readable key listing format for those keyservers that provide it. IPv6 is supported for HKP and HTTP keyserver access. When using a HKP keyserver with multiple DNS records (such as subkeys.pgp.net which has the addresses of multiple servers around the world), all DNS address records are tried until one succeeds. This prevents a single down server in the rotation from stopping access. DNS SRV records are used in HKP keyserver lookups to allow administrators to load balance and select keyserver ports automatically. Timeout support has been added to the keyserver plugins. This allows users to set an upper limit on how long to wait for the keyserver before giving up. Preferred Keyserver URL ----------------------- Preferred keyserver support has been added. Users may set a preferred keyserver via the --edit-key command "keyserver". If the --keyserver-option honor-keyserver-url is set (and it is by default), then the preferred keyserver is used when refreshing that key with --refresh-keys. The --sig-keyserver-url option can be used to inform signature recipients where the signing key can be downloaded. When verifying the signature, if the signing key is not present, and the keyserver options honor-keyserver-url and auto-key-retrieve are set, this URL will be used to retrieve the key. Trust Signatures ---------------- GnuPG 1.4 supports OpenPGP trust signatures, which allow a user to specify the trust level and distance from the user along with the signature so users can delegate different levels of certification ability to other users, possibly restricted by a regular expression on the user ID. Trust Models ------------ GnuPG 1.4 supports several ways of looking at trust: Classic - The classic PGP trust model, where people sign each others keys and thus build up an assurance (called "validity") that the key belongs to the right person. This was the default trust model in GnuPG 1.2. Always - Bypass all trust checks, and make all keys fully valid. Direct - Users may set key validity directly. PGP - The PGP 7 and 8 behavior which combines Classic trust with trust signatures overlaid on top. This is the default trust model in GnuPG 1.4. The OpenPGP Smartcard --------------------- GnuPG 1.4 supports the OpenPGP smartcard () Secret keys may be kept fully or partially on the smartcard. The smartcard may be used for primary keys or subkeys. Other Interesting New Features ------------------------------ For those using Security-Enhanced Linux , the configure option --enable-selinux-support prevents GnuPG from processing its own files (i.e. reading the secret keyring for something other than getting a secret key from it). This simplifies writing ACLs for the SELinux kernel. Readline support is now available at all prompts if the system provides a readline library. GnuPG can now create messages that can be decrypted with either a passphrase or a secret key. These messages may be generated with --symmetric --encrypt or --symmetric --sign --encrypt. --list-options and --verify-options allow the user to customize exactly what key listings or signature verifications look like, enabling or disabling things such as photo display, preferred keyserver URL, calculated validity for each user ID, etc. The --primary-keyring option designates the keyring that the user wants new keys imported into. The --hidden-recipient (or -R) command encrypts to a user, but hides the identity of that user. This is the same functionality as --throw-keyid, but can be used on a per-user basis. Full algorithm names (e.g. "3DES", "SHA1", "ZIP") can now be used interchangeably with the short algorithm names (e.g. "S2", "H2", "Z1") anywhere algorithm names are used in GnuPG. The --keyid-format option selects short (99242560), long (DB698D7199242560), 0xshort (0x99242560), or 0xlong (0xDB698D7199242560) key ID displays. This lets users tune the display to what they prefer. While it is not recommended for extended periods, it is possible to run both GnuPG 1.2.x and GnuPG 1.4 during the transition. To aid in this, GnuPG 1.4 tries to load a config file suffixed with its version before it loads the default config file. For example, 1.4 will try for gpg.conf-1.4 and gpg.conf-1 before falling back to the regular gpg.conf file. gnupg-1.4.20/doc/texi.css0000644000175000017500000000011612635262326012074 00000000000000/* The gnupg.org standard stylesheet. */ @import url(/share/site.css); gnupg-1.4.20/doc/samplekeys.asc0000644000175000017500000015351412635262326013271 00000000000000 pub 2048D/1E42B367 2007-12-31 [expires: 2018-12-31] uid Werner Koch uid Werner Koch sub 1024D/77F95F95 2011-11-02 sub 2048R/C193565B 2011-11-07 [expires: 2013-12-31] pub 2048R/4F25E3B6 2011-01-12 [expires: 2019-12-31] uid Werner Koch (dist sig) sub 2048R/AC87C71A 2011-01-12 [expires: 2019-12-31] pub 1024D/5B0358A2 1999-03-15 [expired: 2011-07-11] uid Werner Koch uid Werner Koch uid Werner Koch uid Werner Koch pub 1024D/57548DCD 1998-07-07 [expired: 2005-12-31] uid Werner Koch (gnupg sig) pub 4096R/99242560 2002-01-28 uid David M. Shaw sub 2048R/A1BC4FA4 2012-01-10 [expires: 2017-01-31] sub 2048R/6F410A43 2012-01-10 [expires: 2017-01-31] pub 2048R/CA57AD7C 2004-12-06 uid PGP Global Directory Verification Key uid [jpeg image of size 3400] uid DNR KS1 uid DNR-KS2 pub 1024D/B2D7795E 2001-01-04 uid Philip R. Zimmermann uid Philip R. Zimmermann uid [jpeg image of size 3369] uid [jpeg image of size 3457] uid Philip R. Zimmermann sub 3072g/A8E92834 2001-01-04 pub 1024R/1CE0C630 2006-01-01 [expired: 2011-06-30] uid Werner Koch (dist sig) -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.4.11 (GNU/Linux) mQGiBDWiHh4RBAD+l0rg5p9rW4M3sKvmeyzhs2mDxhRKDTVVUnTwpMIR2kIA9pT4 3No/coPajDvhZTaDM/vSz25IZDZWJ7gEu86RpoEdtr/eK8GuDcgsWvFs5+YpCDwW G2dx39ME7DN+SRvEE1xUm4E9G2Nnd2UNtLgg82wgi/ZK4Ih9CYDyo0a9awCgisn3 RvZ/MREJmQq1+SjJgDx+c2sEAOEnxGYisqIKcOTdPOTTie7o7x+nem2uac7uOW68 N+wRWxhGPIxsOdueMIa7U94Wg/Ydn4f2WngJpBvKNaHYmW8j1Q5zvZXXpIWRXSvy TR641BceGHNdYiR/PiDBJsGQ3ac7n7pwhV4qex3IViRDJWz5Dzr88x+Oju63KtxY urUIBACi7d1rUlHr4ok7iBRlWHYXU2hpUIQ8C+UOE1XXT+HB7mZLSRONQnWMyXnq bAAW+EUUX2xpb54CevAg4eOilt0es8GZMmU6c0wdUsnMWWqOKHBFFlDIvyI27aZ9 quf0yvby63kFCanQKc0QnqGXQKzuXbFqBYW2UQrYgjXji8rd8bQnV2VybmVyIEtv Y2ggKGdudXBnIHNpZykgPGRkOWpuQGdudS5vcmc+iGEEExECACECF4AFCQ4Uh/0F AkG8aF4GCwkIBwMCAxUCAwMWAgECHgEACgkQaLeriVdUjc0EkwCfTXfXdqDS2COs ZRm0OUphuY0h4x4AnRSlWyPGnKUFxKOw8TwwCSLsdvZHmQGiBDbtSOkRBACURhKn GIFyXIeX61GAY9hJA5FgG4UalV55ohdz4whBgDzDGLE3XYlO8HCn4ggKilll6MOw Y0yZeg6PEU9Y3SqTzpQSV6qj2M7MgcS8xOpi6bNCu0iyZUik0KklUXMdI8e/CVmB pQJT9CofbD1dsP6z4dC6z3jil0+5Wbfw6yIXzwCgy/7Fagq5mN0H760/JEiiXILS 1n0D/3H26lTaxo1vGput9Td1FQN7Vn6YDP0/To5ipsOODROV3zyUwF5QleY+8zTF JA3qD5KxRfA726WELOF1mB6Mw44UdkPniOoGdMH5oSx6qnNnlVZBBu3U+e1qfQwL QjHu0WX4Z2q00DKpWLThGv7Loh5NKi6OfTbMhfHoevCAzQnmA/wKc6J8GqthENTh KXxZaei3Ep0t+PlBmbUzuAYCXZhI6/0KyD6emyQ7LYIaPv9qEfMkMLhxicG0v/AA wOCBRKS3bkqc6wAYaO0bjUHJvem3HkWPux82t83+6YPyRnVjm/mwt0uEyKSvt7Md 2DVrO3lEcKRkRHiYuf0nonPhl5Rs5bQaV2VybmVyIEtvY2ggPHdrQGdudXBnLm9y Zz6IawQTEQIAIwIXgAIZAQULBwoDAgMVAgMDFgIBAh4BBQJGtcWFBQkXLil/ABIH ZUdQRwABAQkQXeJJllsDWKJBTACfQI8TnuVIxE88u2napOMyUfoWZSMAn2t47LUM uyDEHRcYvEBiP/SRVvsrtBxXZXJuZXIgS29jaCA8d2tAZzEwY29kZS5jb20+iGME ExECACMCGwMCHgECF4AFCwcKAwIDFQIDAxYCAQUCRrXFkQUJFy4pfwAKCRBd4kmW WwNYomksAJ4q+Lv3fDvzDJl4JcOmzWHPsPg2QQCdHcj5DwCCM7YnRLiE58ApHdrg 11S0C1dlcm5lciBLb2NoiGMEExECABsDCwoDAxUDAgMWAgECF4AFAka1xZEFCRcu KX8AEgdlR1BHAAEBCRBd4kmWWwNYokHUAKCKSLq+i1yHrG8ZXqJRk+d4SyanGwCe KFwqqRr3tbae+m4iK+EcyY+BR2a0HVdlcm5lciBLb2NoIDx3ZXJuZXJAZnNmZS5v cmc+iGMEExECACMCGwMCHgECF4AFCwcKAwIDFQIDAxYCAQUCRrXFkQUJFy4pfwAK CRBd4kmWWwNYomC9AKCOTnRhGus67gV2k+8K2SwytYDqVQCfcaEJKu8EBd0sx3F0 24GX/RNwnZq5AQsEQF3bKQEIANEoVLSVnD/YxrBL3s/edXK3YUX1dZvyyLtP0mCX 41EX3e6pQ4gLXmze7lJU9zB0iGgbTjBgodMsqHIECMWnhrN8uaIgEMOnfsNjdIC0 lPpOyBQtH7IWRdtG+4g5Tk3/RbHOsroknCUVUTJo9fvOZZUowKP5IyPYWuaW25VL RoJ/SKjef3ttQC+5Td2CNMWgepbjTXuyZ9sThUzCctiLf/VJL2zTKwozo/HnIQze hCI5b/2lLjzBIV+zeVeLw3UGKSA91TkUUD7kEZJSHHIV/6Wp2PBwHIELstPd0KsV 5ZA4vRR5WHrAbjw7rePyO57uZ9Ob7nn25ecP8nrk+IdxlOcABimITwQYEQIADwUC QF3bKQIbDAUJA1jvAAAKCRBd4kmWWwNYohLWAKCgnbPg6cDR1W3tkz894CwpcDQo VQCfcBXfK5kpfhYfDk+d/mwuYXktSSW5AQsEQ7gWIgEIANFah4LB/iVUglBqEzvK 0VG88yuRJlDLTvb8jr/hA8qxocj4eegHw+NOYGnIEMsrxjo5/djWE1vvvF76baD7 xar8FQoe9SLUX7HOzOmeLG0yv5A6LLpTuQIkDp8a+rSqbOtcZy/mteka9bDJl/KZ MtbhfZYqA0vxuE4PLS4n1lH9+GMTuecgeAhuhKcEBQ8cKwj0EW6axtTwUqwokI4G rOIcTIMduLHu4/oHJiyUfa1TD1Z1BTxjOjaZaiOCFemMTtRPS0BvhA1N3C6suCIQ gfm6awzjd6WvX/ad3ToqKBBf41HgyrK1H7bwm0QQq9QvAlmmYTGzgH44HjHyX7ot zT8ABimITwQYEQIADwUCQ7gWIgIbDAUJA8EVgAAKCRBd4kmWWwNYol3LAJ43JG07 X/IjKI2Si1hF87nLfG4ehwCcDIDiNrFrvTaxGziI9H9ZYmQyASq5AaIER3ko1BEE AITOSpTeW3g46dEaTnGDrre9/WrhXvHzL7kP1TpzYC4jig7C2t63xUgLCgmv17ie C9j+VqiK6olGPIL8y5RdHjJgStNAL+psZ0kjx2yGACUpgDky49hRtfxWGuohJnBH Upsp/2DGOCyL0nlzkvJRIVdIZAMgYYmnGu8atilHpHb/AKD/aYLuxeQfHRjylB8y Od7iHEE7VwP/QSxhwtSQWXdgz/KyTwjAjN69JGNx6iUKrwNiPLphEufYi0EzdKkr xltkTLuZYmd+yoxMKvoKHAOgLe+RcnF9ZZDc2XUjujIlu0lDIe0/2xUXJYQ3zKza St1qbzuk414SzRjkisVUne/GuJNuM2wAwTSmeGXhO/fgc++1MiuLdr8D/j/T8lfN S48czJ0eF+/VG2FG5l+JVucRbvmBWilVWFXWOTWyoFuqQ+8t6uHAdlyyxZlgt3rZ WsU6r2vQ+ayELJ3nny4zZdxlBA8O2XbpV3fXf5NlUsZWY3/tifySOwHIQRvJX0NA Sz2Ao4qXBKF7CM6sZzlbXja6XHZyUG5p3anAiJcEGBECAA8FAkd5KNQCGwIFCQah TGwAUgkQXeJJllsDWKJHIAQZEQIABgUCR3ko1AAKCRDNP81ePVLCghD5AJ46ond0 H0ny3nPQrXI5/CQxk12YzACfR+j9+k0y+vLYfzuDCWoSuLeWuvBYygCePPYlR8Tt yegne86Z/xquxNFgFjsAoL6wDuo4gsI+6/bzSNlyrkUYmLO7uQENBEd5KWMBCADe LY1DPSaB2NyWLeaLLTa1G0QTIXp2y6FpLvgC/PIzR8InRxNhkBDaswFBPuc/oASN QCvXTCjFsgPvc1jS6UpTHY3NnZlxB6s5NbW1YDPQE1CklJ73uNU9r8aBxMhsrzoq VO/PzLqUhcwWp/6sBjyFz5Zb+WNip4Id9J+ej537r2UJo/GiMh3JOWgp5/SqUTWz wowtU111eROlURVh6wrG11ZbQqFo7qMY1lAut8Vt4vJxKvjTdlls7fhRfPwmcxBD XxZycPOKO8VF3XJPI3bVxkoKFRuOJZK/fHnghgEYwrviKiG0vDISUOTqOE63haot a72gUUlDTJGrorvNO8C/ABEBAAGITwQYEQIADwUCR3kpYwIbDAUJBp/6XQAKCRBd 4kmWWwNYohbBAKDA1ZUpbI3OWd+5Efnj482Urmv47gCgtXRryMuxJZ8MWhfBZ0Yq vH7DeKC5AaIEQF3aTxEEAP9SgfIbIPL6BQ1nqoblsTYoiwWPL48uBZPjkDfy8XsV R5V9aRQlggC4x4/MD3Ip5AUgReI7PcHnp4m3vcVLXPl+/7i7hAwd84iKzgN8I8VW 0EevflcNm7nbWEnpjaGxJWFbhSLI1DmqnafoU8nZgGp2QoE+flgGDd559C3SiHRT AKDbqgS3EDhTbwfS+bAhW5Xi8/2CPwP9HueeuW9M/cyt8UvliLsj2eYMEIy7CeSL O13XfnqCjcnHK+b59/ADd99dpMaq3gKj7Aj1RIsRV2qWDJpDNXVxP7Cy+FzxelQs ytPQOV8H8AkB+RgmSyfxlNRUkC3sQU6jR9IwmPD4iB5fp/SqUpn++77TAArXqsfH bmlnwcuU1EAD/i7CEhxLBYS1N77hwxL8DWCqjpi+1PKG+6dc0BQFIU3uUhbzLGfq EobUDhveqgtlsvoEZ/lR8RgMv/uOjXEgiATQyTEa7s3M2vjXlpLjXjzklma3Lqmc am3dEf/5OR02yZif6hPU/x8f/VQle0kKNKdOCV1+dlo8aJH2UIZRRIvtiJcEGBEC AA8CGwIFCQcbVgAFAkR1rB0AUkcgBBkRAgAGBQJEdawTAAoJEGB4TpQBClft2RMA n1XiL/bC9hByZInCJTaCd8WS8kYCAKCfpAWwLIxkfwAeD/RI+2p00nQfvAkQXeJJ llsDWKKx7QCguc4/HiEs64Ey5p6Yihy67X8E0YsAnRXMFdXVP7ww8uldljPiD1Tg yurpiEYEEBECAAYFAjc3I8UACgkQ9u7fIBhLxNmHZQCglWbPDznIcnOxdDW+k7Yg A9+/n00An1ZjSiJipverUxLEFHAbSBWI0IntiEYEEBECAAYFAjc6+aMACgkQdQ9k lcidkz6GiwCdGe0KSP/vSyEZM/GClQXvjMD4RvMAoJwyTIdcjPZbQizDeAO3btn2 CCwTiEYEEBECAAYFAjgUDhkACgkQYAeQgHPH80+I2gCdHeTAPusmEfN2bdkijpW1 gpxBvGoAn1kzL7Mg7tC4pqlqw2fV3kRUy1a5iEYEEBECAAYFAjgqYh4ACgkQ4/JY VBKPDnkPkACgmzk7HMlJ1h0qw6OHyMtDE4RI4ToAni+Cm+01pHfzh0EnFQTvLE1M 9PtoiEYEEBECAAYFAjnKOw4ACgkQK7tDpvCerwquXwCfbW9xGF2AHQakBPakh61x KmC8WEEAn3TytfY5qrTjxIj2HZFKN5QuQpYSiEYEEBECAAYFAjnKiy8ACgkQF6ZB bfeUj9ombQCfYQYxpipdMGBxbNd8jbL9RDmH3nMAoITmZnDJwXzpHNuSLY8o3c5Y hHXziEYEEBECAAYFAjnKnXcACgkQNfZhfFE679le7gCggQjsjFhjaIO1lWHfPusn 0dqdhRYAn3rOW0XSeh64V9o+VItH2LZngmNAiEYEEBECAAYFAjnLMigACgkQUaz2 rXW+gJcIVgCfRRq0G2fCcZOFoey9uZGAkWctKsQAoLw6lUhdeZDgULrDC7OQRIk7 CnMtiEYEEBECAAYFAjnPp1IACgkQkVrMRaj0wv0IqwCfWGMeiZ58ysuZCAP9IsX3 aKcSPtcAoJno1COOjAMhoWjUiHctgLZX9+gTiEYEEBECAAYFAjnQ39UACgkQbyOL wk/aWgxfIwCfb/GeMAD8w84hq5/aUQMCvVqUYqAAn07SKuWYsZLEUuPWIgYY0yoB yJxviEYEEBECAAYFAjnSCrEACgkQv+EgZWshSJq8jACfdf20dqs3IWOPHgFMdYb5 VF+WkJUAn05quvyHB3Xug8csxWg6RwSfQBTBiEYEEBECAAYFAjpMy0UACgkQ7UaB yb89+bRUrQCg6aozpYiCEDPVAHe54/8/q48FLP8AniviG9fjxInPaSKB+LXRmQjc 2jLZiEYEEBECAAYFAjqJgd8ACgkQYogE2yD8bPYGagCggMsqGJN61JuOQkY5MiKb 4UPQpBwAniNYwQb+hlEzJF7qnPECh0MAxq8OiEYEEBECAAYFAjrBCNQACgkQt1an jIgqbEu30gCdEsSeFtJ5KziD5l/CvAhVZt9lnQUAnRrmbV8HkndXp3+DNoREgscZ k/rliEYEEBECAAYFAjrB0SkACgkQ0vCiU5+ISsiPkgCeOFayt7NkcymwTC2UKNjj yukNDvAAoLq/bOTNZECtztYIMDQ2VrzZ3m6KiEYEEBECAAYFAjr1eYsACgkQ7A6v cTZ3gCXdrQCgllIx6G2DkKSGKBhYCgsyywFBXLUAn2PJGrCOov0LS8jCMD2Xo4T7 qfsjiEYEEBECAAYFAjr1mwEACgkQLBigKrTF83+E4ACffa4yaJ6Pj4uFZY7dVuiO fkuoTE8AniIdw0DVkHBuxlNp9PAglhztyE+oiEYEEBECAAYFAjtFbTsACgkQ53Xj JNtBs4ex3wCfXLPNscM4Uxtmy0/t5Ygg9lDWEQAAnR39P9eJtEeBtMPfbEGYc10A BqjkiEYEEBECAAYFAjtF2QAACgkQI/q1+wgWzBuJgACeIak+A98IheVSowXG4J6j zBA439MAn2IFA8EB/EkQ1rn7OEmFNX++PNZyiEYEEBECAAYFAjtF8RYACgkQJ4bC RH+KQBfSwgCaAvm7pL+LioYj/oKDBQ1pJAj+UqMAn10W8RKrYblMZ4L11R2TO9xO vFn6iEYEEBECAAYFAjtIDxYACgkQBgac8paUV/DLWACgifbHtSi50JxmSr18Wofe VcVcAXUAoJs99aH6/t9gkO34ajXjiIQxc0qMiEYEEBECAAYFAjtIJ18ACgkQ11ld N0tyliUx5gCggbhG1uzvdgHNY8oCt4cc6TfHUREAoJuRw8q2kbztnt8TQ4mjiTIN cBXziEYEEBECAAYFAjtJwaAACgkQUI/TY7yTaDkPjgCcDSJQUZBBP/5OvW48Q3BU kUkRSQkAn1Mjqe4WTFEEA8HK5h+KDcqR0aZIiEYEEBECAAYFAjtKFVcACgkQliSD 4VZixzSYCgCeJpt98LMq02q9W1bK5iPUvCkcsSYAn1dqFcoXctXVnMj53z8zfAaW 0BcwiEYEEBECAAYFAjtLFwcACgkQDqdWtRRIQ/XMGQCdH1u9tmtUYY3ExVLdT/H2 IIQCU3MAoI69Y4Z17RDh4Bj2gmJwmEAmfDwbiEYEEBECAAYFAjtMF8oACgkQ1w1f WGA80Hj2mwCfazudYZSMmQWO85xZvg0uTB3rhZQAn3DSyrvXxIpmv0CcnBtUQu5N 21kSiEYEEBECAAYFAjtRuWUACgkQ5DsVPMtGficbLACeNpRJOS9AZ7q7bhX2sBJg lKLloTsAoLm5FTnY6iAySfPZZlwAVeE6zMJwiEYEEBECAAYFAjtSxD8ACgkQO/YJ xouvzb1F7ACfVp8vhxAWCeRZN3InlvYLrxFTng4An1QO6+D3QUjX+0YRNZ3tpZDT Sd6QiEYEEBECAAYFAjtXQl8ACgkQeRYvNvf2qtklNwCfcg4Tss3C9Nf6NiyOAHhX O4JLhtkAn055IHb4i2IO5TQLSQi0tk4ktZVfiEYEEBECAAYFAjtnOlkACgkQwAsN NiHlPr2cagCg07IN1/MaXn+8yd4Ncp9/723gEBgAnjNCoGAAccbvCCVE29sXBNAv Uo8MiEYEEBECAAYFAjuYRI4ACgkQkC29kYw4qQpqwACfcyB4krJFqyeHoKzRYDqW 8JDUdvcAn2pa3UDeKM7FVe8LgCQyz0McM4JqiEYEEBECAAYFAjwH+10ACgkQ2tKw XV88MYVF8gCeMoYaFN7v/VDmuYt+G1BXDxzcuusAnR8fAcIyBjSffB0yEIwaA7O9 X7ZxiEYEEBECAAYFAjwIEdIACgkQaliC34RARgJ9zgCfS1K0bROVSB+9wX4g+xEE 0phEAToAn3etSLME5hzsisIRMjUsGbBDe7+aiEYEEBECAAYFAjwjtVQACgkQRHJT 9Ar9DKjv+QCbBE3lRMzyKxTbPUd9v+nB8EVqv4cAn0DxPkAIkuriAuwtOjCypTDN ydyxiEYEEBECAAYFAjxdq0AACgkQ7vDbNLMhJgNwvwCeMc0QmOS0ctJOX1J9a3DW kMyUdf4An3iIslZ7stkMOi1VdyE5fR2YDvNFiEYEEBECAAYFAjxw4+MACgkQGM0l pSLzivNlngCeLdkkRkcyHVKttl6Z9IQExE+gaNsAnRko+7BQOu5jXMfGarg1rE2z DhsFiEYEEBECAAYFAjxxJxIACgkQscRzFz57S3PkJwCg3qepdTsiNKuGYC6a1RlJ ZTBqkiEAn2G6ypvCpWAL43LWbMbyyf/rYxSoiEYEEBECAAYFAjxxQYIACgkQOhqm NZCaVAYvbACgz9mXzo/nC64mx03IFgL8oFuBAhIAoL91NILXxGYrkaOnM+2Ci20U vA3ZiEYEEBECAAYFAjxzeIMACgkQo+C50no0+t5J7QCgpSCgGQ8eMefvsDsF0DlE ZzuAHNoAoK1TFwuK7ZowUQJyWp1tKDtNDbx3iEYEEBECAAYFAjx+gfMACgkQjjtz nt0rzJ3/dgCgnDMnLna3yPskxeVf32wDbTHLxf0AnjWCw4lfYauS0LumGv9uHN9P aErhiEYEEBECAAYFAjyAY8EACgkQ14NrbAzZIOdEPgCgt5DiZfRFkvzAPecRDCIp 3pOdUwkAnjj1CDE+Kzg2RiK9Z73QM8B0J4driEYEEBECAAYFAjyBd5kACgkQ/3vb rZlD49+lmwCfS9apz+gEHsRV6ELS4NtCLvrJsRkAn3AexpisdP+8KwolieJwaVPi tN2giEYEEBECAAYFAjyMzCQACgkQhbmQdcKRDkGoiACaAqrwXn6kf3aD7wss1rgQ mrCtJKIAoIU6uifoxBubp2+YjW6kjbnkFMD0iEYEEBECAAYFAjyXNDoACgkQoegC cNp0M5aGrgCeLBRQ8CAVzPO8OTz2TMFqYLIbFrcAoK2qJqojmF2+THtFCHz0hhiB AekNiEYEEBECAAYFAjyXNjgACgkQg2i7WWb7wYxzxwCfcrZ5yTwjn9Sh1S/yL3MB KBs8uxUAn0pC4GgIsbbaxcf1QA5AYwFiPcPEiEYEEBECAAYFAjyxODEACgkQJXt5 TsZsoD0pVgCfTIJ88OFNFlnUFoNZemDdbd4ZqEsAn1y5ZyCl5SYkqFTGiVtkgtII EhK7iEYEEBECAAYFAjyxguAACgkQeuuK7Uc6ScnBgACfUlQrrDUb78b93JEvThA/ f1ZankIAni448ZxagzPjnj/vH33yK14agnq0iEYEEBECAAYFAjyxj4MACgkQocWS fM5dzg4qigCdHrjYquNu2aphWggG5E0G6zCW5MEAn1NQJmKkTEUsbanbVOBx1G5w vYkeiEYEEBECAAYFAjyyhzsACgkQVlEzpFDUq7k99gCeMJc5KvC2gAHgCVjv6Hn7 AKgY+rMAnRFIrjunb1Sh77542URoWAVmuPN0iEYEEBECAAYFAjzyIFQACgkQX180 7qC7Pev9PgCfcW15D2cS4UTkn11BSqn+pgrA4KIAoKzLDc78X3OFDzVXTOvk8V89 OshGiEYEEBECAAYFAj1uHIwACgkQKMb1a4F8NWhPPQCaAprFvggEHBTVR+KWzm0Z 3l9ijLIAnAw2QtJ1Mlnz0ctNwSJwORM87/ARiEYEEBECAAYFAj2ERksACgkQ1Dyz BZX+yjSzyACgjUKL3CH2UYciEAarZU9H0ZYIIWQAnA6I1aJ0FgWiF2bd/jgWaBL2 jtd4iEYEEBECAAYFAj2F5U4ACgkQdZc6ENbQhKbt/gCfblKSqJohqhaFawtXPs8T X1UqY/sAnjqwumhFN4YAAez36gItTB9BxcmJiEYEEBECAAYFAj43BmIACgkQkQgh ntzeiQqeGACfSyyIi1vPniQOq8xLfgjDxFkkVEYAoJSFbH8uhrwBMa8aOIRkjN9u RdY2iEYEEBECAAYFAj+Q/gMACgkQdt8qX2QD4/2lhwCgnv3QSQPCGbmTI67mtAxl 9d4rZ4UAn1WXmoSknE2WYeqRUb6d4wAhG/jViEYEEBECAAYFAkCnUpQACgkQt+hx Iz4tn22gnwCfTWoR3vhEv0yp1Ks/vz7jow0Tw6QAn3YXgQn0DS9/9u7AyG5gjh18 VLtuiEYEEBECAAYFAkCnUqEACgkQt+hxIz4tn22dOACgjeYArERuayyqZmozCahs gUyPihMAn0PkgZDTwKgSw690xdLuR2rWJrPQiEYEEBECAAYFAkGD05gACgkQ9oi/ YaVie2EkhgCg582nMvFSTXDb/PdF0+kZTBQTCGQAmwSEka7EMzOzoCxEefZd+GQm EdcXiEYEEBECAAYFAkGGD60ACgkQ6gnEQD//YGyIWQCgruyF9KSG2GuqPVQIsizC CV8rjPcAnRQsBzfw9QLM960FP64YWUCqhYkYiEYEEhECAAYFAj0EW94ACgkQj/Ea xd/oD7Lv2ACfUACXl0hDfGeEdbGjhIa/hSaZCrkAmwV4SdeJnBoXV22VBEekmTfz HKHEiEYEExECAAYFAjyvU4oACgkQ6pxm6rn41tmEewCbB4FZ6z6dmSJ2epBIdeoS 8KHLNhEAn2ZcUDKfuFpVVDuV/bMhpjbbHJRIiEYEExECAAYFAj0FswMACgkQoWMM j3Tgt2a46gCdFwSWzfEmyuvfjnmNPzCyvdO2R2cAoJRl1Ibl/2hPXjenl1f08pQL ThZAiEYEExECAAYFAj0GRB8ACgkQKb5dImj9VJ8FHACcDjdyCPMWjSbrXKCVFjDt uapl428AnRSI7e1VYRJcVdGmrAtmu360GrQpiEYEExECAAYFAj2J/ScACgkQ74J3 yv6ZHpg4ogCgj8BllYTJEQ5sF62Qd2q9o2FNJ8cAn2K/7zpy9M/Oig+yIYofaN+5 fnUUiEYEExECAAYFAj4ykiMACgkQaqtaJwF/Vr1MmgCfcNfOOm6/woHpEtuFVgYX vUh0tG4AnRTPBwdemHFViOojNJ0glWck/84ciEYEExECAAYFAkDa3nAACgkQRTxF SQIw1gIZCQCg/jjaczO/s9GkLq/kftPN8A6kLr8AoPwGlVzoq5yWxhgCkEMfV+KI tmDViEYEExECAAYFAkGE+RcACgkQ3ZHkUS+VgsFX/ACfRYBeswRWTHOdc4gLefxU VSGbj8wAnA3CWEF3MQOIpJQ5KSFLE2104h5riEYEExECAAYFAkGNFPwACgkQ+C5c wEsrK56k8QCguxJO7l5effxWbaYOgeVko8HiQ80AoKSJGsOZGx1nvQRKeRK/7DrZ bB2piEYEExECAAYFAkGqFTYACgkQztt/8ZMtg2MVMgCfZevJcAcVXa4hUUJSjkWo 0j/b9MkAn2HZC4sNs9nMN1PvX95Ge39wfBEKiEYEExECAAYFAkIrN0cACgkQi0rE gawecV4jeQCdF+GUDJuQnCaFZqw6sNgZtol0UncAn1/VQvGDB0Or+JItHnUlCU98 URNXiEkEExECAAkFAkGD3AUCBwAACgkQQSganqDijRh6lQCgmgm1rqgdF3qYuDQn /S1vFxggwpIAn1htaL3fD6o4LnT/8BIm6K6tPGPWiEwEEBECAAwFAj0BE/8Fgwa1 sWoACgkQFBE43aPkXWatjQCdF96DM2kdreTGbWTKjTMTuwB3AtYAoOxTFERoyUCn 7nTsufD4QpxIkJCiiEwEEBECAAwFAj2GAuUFgwYwwoQACgkQU+KFTgvh8OP+lgCf TLjRfVihRNQQ/MVIuHttesX/s/4An1ZBth8G2EvCfiOU2KoOjl3MZUJ4iEwEEBEC AAwFAj+ObrAFgwQoVrkACgkQCmLlNDenkUkzjQCeIR3z4h7TMEeNI9Sy5/4Sgclj 9WsAoK9yVbdDuWQJQh/ZBUpx0GjxMSW1iEwEEBECAAwFAj+SeAcFgwQkTWIACgkQ 78vN/2HwW4xfggCgg+yTSXldBhvFoDXoAeOwcC74YqkAn0b+tC5AZ2BQkg0vJXZ6 tFXuOvhaiEwEEBECAAwFAkCoZL4FgwmwcCoACgkQEgljnRFKqFxfngCfbXYSsBtM M5hcUCsnm9IvyCmMhgAAnjtDe7q+5cW/JmzE3illB+u8fc9DiEwEEBECAAwFAkC/ Rz8FgwmZjakACgkQ2S0k392WXIP5uwCfTlmW1u9U3nck5mCo6DeTHNTmUvkAn2jn jXhvqKoLfS2ERRwQlFFAw6NRiEwEEBECAAwFAkDbVF4Fgwl9gIoACgkQ9ijrk0dD IGxiBQCeJIrdN0kFT16KL4COSILMmcjVxygAni6OinWWNJqCk+k+BNIvKpm+QKm2 iEwEEBECAAwFAkDxIncFgwlnsnEACgkQkvv9V4b8pZK7gACgwOU8kI9ZBzryS+Hx AeWEo4WjeC8Anjl67/wgPGr4XAS/XA1xmWzRwZiPiEwEEBECAAwFAkGsm40Fgwis OVsACgkQLEmBxMM0hsB4NgCeLxvQw1g9MSpWY9+2VbSK/4vNd4EAnicGGKdS3Zy4 8E4GBZr62ZmWjr/iiEwEEBECAAwFAkHCEoIFgwiWwmYACgkQGFnQH2d7oezd+QCe JzuPIHb2H/PX1R9NYqC6z+63wFsAmgJUX4Ei+WzKGs2r8LVtIo03nc/niEwEEBEC AAwFAkHCKOAFgwiWrAgACgkQgcL36+ITtpJ6eQCfQ5aTW9WLJNVWTdp4fi618YDd nNEAn36Vz84EsZ0gpO0Je9S+geCrffj6iEwEEBECAAwFAkHCKTAFgwiWq7gACgkQ a3Ds2V3D9HOXdgCg91Pqo7tiv00Je9XoTIJq82ug6gsAn2Q37v0WzuggX1xyzDSR 7oxz77owiEwEEBECAAwFAkIi82wFgwg14XwACgkQ2KgHx8zsInvpsgCfdHcjOaK7 aK1MBAYBaWwkK4rfd7kAoKxblxsQzllz7sLvFbK7xG2ipuNJiEwEEBECAAwFAkIo ngEFgwgwNucACgkQLADuUthSlVgXawCcCbstExBnVkd/fHvatuzJ3sJ0g0gAn1t1 CmnaMwV/HVQlUhfqefYlVN3giEwEEBECAAwFAkJTjYsFgwgFR10ACgkQlvNNek/0 hjUNPgCfRJZleAq/j/4tbek4A3/lhgXJha0An1aToz0bp8HSf2NBjW1euvf/4VZC iEwEEBECAAwFAkKYjoAFgwfARmgACgkQTbbnG4BhqDBuUgCgyBpzBy8k7OKzjiYr KMGIWZqiMiYAnjHdHdzo6dKcV+J3ef4hl3VcLqDfiEwEEBECAAwFAkK9MmEFgweb oocACgkQr2QksT29OyBNEACfbNEfltwRZ1RmZEkt9ZTwOJSli5gAn3brUt3vc1JI xs8dlkwHV1fSJpH8iEwEEBECAAwFAkK9RW4Fgwebj3oACgkQ62zWxYk/rQd1UACg wJNmfL/Cs6bYMFPC1dRrNsf2GtAAnR6K37k2u63FX1lbg4aSMLCcNviCiEwEEBEC AAwFAkLinZ0Fgwd2N0sACgkQ9D5yZjzIjAkhqgCgj/Uy+2Xvfw9FAwPdWSaC+o4A VUEAoIvJ06LeJppo5EQqEt1mc8bYV1UjiEwEEBECAAwFAkLlBZcFgwdzz1EACgkQ g2E6UBaCfQMWAwCgk0N+XcWaLDssH7wYu0EtOFW1kKUAn3Vq83yrmg+F4TvieNmP hhqTP6W2iEwEEhECAAwFAj5ecYsFgwVYU94ACgkQUF6IRyLnX0ugAwCgnZ5NnBWJ 3j9/7slzg5Iy/pU6UesAoLaNJiUgVfg+h3uP4vUJhum91P/biEwEEhECAAwFAj97 CToFgwQ7vC8ACgkQW7P1GVgWeRq/ZACeL6lVKkE1iFiC/YonlBzLqNAdVkgAoIBH 8VYDXLRIgBpyfSdwc1YxTeDDiEwEEhECAAwFAj+P7j8FgwQm1yoACgkQKLKVw/Ru rbuqxACfb1X6tBq7g3z5HgfCXv2sm2gQI5sAn1JLb8gDxuSRcWMHulGZY0hZJfvy iEwEEhECAAwFAkCn2cEFgwmw+ycACgkQt5wosOl/hW1B0wCgiQGkFQEonh2cRtw1 xXowakWqx/EAnjp2Du5T+xpOdf4O+JwV5DmtKqW+iEwEEhECAAwFAkGE6LYFgwjT 7DIACgkQGKDMjVcGpLQO+QCgsc+A/SO9bY78+ul2KU+7SCcztq8AnRbnT0G0HnJd QYMffrLF5Ing2fP5iEwEEhECAAwFAkGxhHAFgwinUHgACgkQAVLWA9/qxLltoQCg 24DNLxMnSOcPFPCNLTPkyyjyQu4AoIe0tZDEDS7mvM6RQaHREvCuFIOZiEwEEhEC AAwFAkKWAqQFgwfC0kQACgkQi5YpQ/wkPzzhMQCgj+rrxz3tJgTrmh3g3+5rIcWE EUYAnjKOFjzGL/7SyFlpehh0Xa3oO69WiEwEEhECAAwFAkLrbeoFgwdtZv4ACgkQ wm9wFgHGy4MQfQCffyaecfqcThyxP9FNgZ2Uz4pBwAEAnjMFgtk5JN6gZ+Ztgqe+ YyYrGvvuiEwEEhECAAwFAkLw+X4Fgwdn22oACgkQWNqWrwuQEUHBCgCgn3XtRj5q JxudfYkec540HnkoerEAnR2x0A8LAA49rsbhCiLZlmTaaD67iEwEExECAAwFAj0H TRcFgwaveFIACgkQPGLK2OTUMk2IMgCfUXkZfmZrMFIiYO8F/naQMBs/94UAn2Xr f2uaISYrPudIbRkxYm+R2NrZiEwEExECAAwFAj14eLIFgwY+TLcACgkQ0BqcGU12 bN6ruACgi2uFjh4Sy0Kjyd760dvfpa/9jtMAnjHyPQ0tHYSqSZDD9qaQvb/F3PlM iEwEExECAAwFAj15MRMFgwY9lFYACgkQcFxTidXBs1halQCgiR5GTSx4fSCqkikz rOOOXAonDVcAnRFQ13dmkjLcRy4E8bxLtm8xPyAdiEwEExECAAwFAj2DrfMFgwYz F3YACgkQAtbtIeMsT0ugzQCaA50Snyeu82nth0ikNVnzHD4W0eAAnA9WxGBmmpvW YOq5LOTy2fVe2P+EiEwEExECAAwFAj2F/AoFgwYwyV8ACgkQ9Wsmo6Y5nnPZcgCf UvxNXjoWYEsAYJz3z+MWDeGrfJQAn3slXF9ced2OAN3YgYZNTlIC7UUaiEwEExEC AAwFAj2IEOQFgwYutIUACgkQg2XL3N1NTv7QVACgr+C/P7gqGDupYTC21jl07mPf G/cAoLZ9zkmr1YF6Br7szUKksSan6fwtiEwEExECAAwFAj2IOwAFgwYuimkACgkQ Hb1edYOZ4buWMwCff0YYdFZ7gdc1qjCaeXDhCfLe0OAAn1OJuZ/eKGk+i0V/ScLp OMLn/SCCiEwEExECAAwFAj22wZ4FgwYAA8sACgkQVkEm8inxm9HyigCfaNbjyIlH YA9cAv8sLkz5uHRoTe4AnRyDPfAFiBPZZhwJNDlmTEColXL/iEwEExECAAwFAj72 Ip0FgwTAoswACgkQofbulCQLTD21TQCfcKuy3MEjJRrikDBgKtpIP1at2cQAmwRl ZNeKOT0UJ4RNt2piAHqTD47giEwEExECAAwFAj72z7wFgwS/9a0ACgkQBYtazUQc X4H/jgCfaQXW+LvjoJacVNYrdxhXUYx2a+4AoMQV/y+zjcnaNRbZTH6unq4fBDB5 iEwEExECAAwFAj8AnloFgwS2Jw8ACgkQMozWs+vCdRW8xQCeJLRNfZLO7twP4DnA saP9wNdsI+AAoKChEzuM19HrksvckWmBVafawaPRiEwEExECAAwFAj8Fq5cFgwSx GdIACgkQTrg06OLM8A+J1wCgmucpP9rc1NjzPHDFNcQokRbp/REAnRvctW/8AwDa H/btQjPtXgQGCbrPiEwEExECAAwFAj+PlHgFgwQnMPEACgkQbHYXjKDtmC0gWwCg rfQwM+i6i82wTcXx8LRPVHm//88AnjOiqMYKpGj4cpkwdX2nhUlZEyGOiEwEExEC AAwFAj+QUxgFgwQmclEACgkQnQioDO2QjWrbcwCeNw1qkRaDRy3/fl41K0F7fbCq q58AnRXqq6031t7zmMdmZDvFlB5M6uFXiEwEExECAAwFAj+Qbb4FgwQmV6sACgkQ lSxWI2ynbPR51wCgkZpbx8pnoqj6mmXrUQgJSce7eRMAoJcbGZ0ls3JXAJRD5y0P YzznxLIriEwEExECAAwFAj+RGicFgwQlq0IACgkQ46aNyqaY2pkmnQCeLsrSrn63 Mnhc7lwklc3UHlYHQLwAniZuyemrUEsU0fdQKHdafHg471iPiEwEExECAAwFAj+S mrkFgwQkKrAACgkQtamfe9tFLSc5AwCfaA0hJcLIfm1Eek+X2hs01q3f2lMAn04y qK1H85hZ+77goaEBj2YEEiYsiEwEExECAAwFAj+TKtsFgwQjmo4ACgkQrSAagZQ6 Xw5tYQCbBE8yHKPJrUivqIYiVJL8y7voOqAAoJc/HBTNTrRSxyjK7nPmyBYlbY8m iEwEExECAAwFAj+UBecFgwQiv4IACgkQOiUrvZ0kS1UvJwCg2Lw5xCu5/pUTEFEr cShPUDM3uDIAoNLDQt61O5Wego+ez43N2N8doSqFiEwEExECAAwFAj+VCZoFgwQh u88ACgkQTDL5CJndlGiZvgCgiM3ez6j21lBLfJnMIKhGMrMhW/gAn0WLirWDnek/ f9iDEMVcGMEnwOOciEwEExECAAwFAj+cMmsFgwQakv4ACgkQNgJWU6vgsQY8MQCc DE5hjYq9uHuyC7ZnBg47a5BkVdsAoNxLfUY6DeCekwPu3e+3qJsbwib7iEwEExEC AAwFAj/UdIUFgwPiUOQACgkQW5ql+IAeqTKRqACfd21FYGEziCv14kLK2bD6ghb8 0jUAni5XNqaFLg8i+0bg/MSQVf88ZQKziEwEExECAAwFAkDcUg4Fgwl8gtoACgkQ zQ+com69o1nN6gCfUXjD5LUESFXa08Px3pbfXidXAuAAoMJ1/H/oFgcer7t+tACN 2vC8GGYsiEwEExECAAwFAkDkGbAFgwl0uzgACgkQHckf8471INHpVQCfV67np1ke Bn20I5JABN5Swm51B+EAnRxMBVbypQcppBhdWnxQadrjhHVqiEwEExECAAwFAkDu oKIFgwlqNEYACgkQyA90Wa3Cns2o+wCgjBXhs2mEn9HFs5F8WR4AdTpWp0UAnj/Q ls/ZRkcy/RAfAN12XgHOkpyciEwEExECAAwFAkENp5kFgwlLLU8ACgkQK6gmAsLO gJlWDQCfe7E7rcFCn9xuL5Rh9MDVVueAJY4AoIL6CdZIlgg9Lt/HG2dDFgwPwbkG iEwEExECAAwFAkEYu4wFgwlAGVwACgkQ1W4oD4nfjasGFACgyTFOT3NMOo7DObxu lYi+WtYriqUAn1Y740hi4fWeByAn5qoUj8brf24piEwEExECAAwFAkEiMZoFgwk2 o04ACgkQ+FmQsCSK63O7vwCePBtM5gchuVC3gXAMO7r1A/le76AAoIMM0oq6wuiH nT/dUAG858Cw09t0iEwEExECAAwFAkGA8OwFgwjX4/wACgkQsYn2tNI6QchEuQCe N/pbbqMBzHuAfWO/g9QfmlmVIW0An2WQXrXoE3xnVp2C85BtML2phOWPiEwEExEC AAwFAkGEAf8FgwjU0ukACgkQTjypAm4rQ9yB6ACfYnJx27fjxYsq+5UfQEemQt2V O3cAnApE8yUw0B3ZpqCyfRo8JQIb/cJUiEwEExECAAwFAkGEkIoFgwjURF4ACgkQ lPH09zrL0iMiigCcCIbdWZPauTvF4Pn724WxH6Qed5EAmwcodEzOE/rElE7fqScR mudd8Ur7iEwEExECAAwFAkGEvnwFgwjUFmwACgkQTbPZ7n9FhNqFGgCeNgwyzTJY 1OABEu/EoBXEUOENxdMAnA6Ul/yxKQihc39VvKQfpdwPGUhRiEwEExECAAwFAkGE 6B8FgwjT7MkACgkQLMilaHDIrOVJxQCeIJI+GgF1UfUOjkYsjkq260Q72OUAoL0e kc/ixpvh4Vs0j1q9Wx0fpQUwiEwEExECAAwFAkGFRwQFgwjTjeQACgkQDecnbV4F d/JDbACfW5h+kLB3Y0wokkr/sxy8RFXwp9kAnjMs2yoVbG2ZbkHQV2ZODRF66zuM iEwEExECAAwFAkGFVkIFgwjTfqYACgkQqI/9z8xhHubw1wCfWLT8UnjyRQIuxGPP WjtGVeezdP4An2GJa9XsZW3yv2eOPAsP93+npZtdiEwEExECAAwFAkGFXLkFgwjT eC8ACgkQT6RVPNdrU1mZHgCgq9+wyMgDr96Ism0gY9OxSqMA+88Ani8EIVnKhI6t rTzgZLZDrZ5pdzDuiEwEExECAAwFAkGG8eAFgwjR4wgACgkQbHYXjKDtmC3wYACg 1f05WHi83tg/PMHoBkqlngdDIuIAoK7KZ/to5FrkfNphn6Zo0fozB1n0iEwEExEC AAwFAkGHwbsFgwjREy0ACgkQVm02LO4Jd+iS0wCfbUWuTf4DZrjdua5kNdfvk65g ojgAoLHPPvTdAlVKacX/rnPD7c36LfuYiEwEExECAAwFAkGH6+oFgwjQ6P4ACgkQ TTx8oVVPtMYoQQCfXmZAzk9EjL3qPz50zZgSUO8l3m4An0Xoqn603NHFaHfbBKdt WGijlgl5iEwEExECAAwFAkGMPFkFgwjMmI8ACgkQiSG13M0VqIMbDQCfSxC8XNls eJ9VQ50GJ66KwSDljmMAn33ApYFWTs8qa/EBIQSgqPlVEBO/iEwEExECAAwFAkGS MFkFgwjGpI8ACgkQ/2R3A0yRcenRkgCbB5vYhB0cv0S9X1y54Ci1KmaMDNkAnjeO H5rAZQsOQZXoDJPzHNrjYpLciEwEExECAAwFAkGTrb0FgwjFJysACgkQ1mvqN8E/ x7b7ygCaAyFqMIKTMqQYuQ7hnGpMTx7FPmoAoJtfYoL1pFmVZ5Mhwkv9GFUee+HH iEwEExECAAwFAkGZWWUFgwi/e4MACgkQSvFUKpY6VLAkgACgiL8te7hejTXfDXRI OAZeVzd76/cAoJbmj0tdYt2QGc3j/4yMnmXrKPC/iEwEExECAAwFAkGc8GEFgwi7 5IcACgkQV5nlLYTPmpDPdACfbASh9WQ47r2zzcVcjlfbvsz2VvgAn0KtwOo73pm3 e7aPO/mYlLsP4V9iiEwEExECAAwFAkGqMckFgwiuox8ACgkQdDpVTOTwh9cWbgCf aMETpI9v6LZgWuTCzE7DceGsuW8AoIcBSwWGF0XkXpRYcvXfjvAg57+piEwEExEC AAwFAkGrJUQFgwitr6QACgkQzop515gBbccEhwCfZhBXUVoNKDbW5mpYGxfKrMfS cIgAnj0XoOlYmWWNN1hlKoSQrZSvh4FFiEwEExECAAwFAkG3PJoFgwihmE4ACgkQ EfLcQ8rmNEIRiwCgpAzSttJZSiGIffSr4/dixsFUVxAAoIwnyzPthchrUSMR10Av PAu8Czm9iEwEExECAAwFAkG4HyoFgwigtb4ACgkQ5Vyxg0d4n7u8mQCfdQ++3anp pXuhZp6cQIp1DCCz56AAnRA9B/n9ah1wL+IMjoBhFvgSW7JLiEwEExECAAwFAkG4 K9cFgwigqREACgkQ4We9YdVB4USYCgCeLsm06Ov/Yoi9lfn4UB0IX3qwBFgAoIPE VT2gGxQYua51y70pjVYG6t4eiEwEExECAAwFAkG4Wg0FgwigetsACgkQBMQfNs0k hKmYzACfZgUeTlimmFrhBDEV6SsslxvVIGUAoKZR9c4+kfE0+BJ069AUZBkkeRKG iEwEExECAAwFAkG5dt4FgwifXgoACgkQPrq84hvwIdMBbgCeJhjUvC1klrCPhWqK hyfoKJE+hWYAnitsOnNDnjkKDdKta+mrdL23iPD5iEwEExECAAwFAkHCqnIFgwiW KnYACgkQPG1Ayb4vCvZS9ACfROLs6kU6Z93eoFUJl5H1M3U/L3sAoIgAGfCxQ3sA DvFiYg11GTGnDzffiEwEExECAAwFAkHq47IFgwht8TYACgkQvdkzt4X+wX/UgACf eM81+Z/SliH++ZzOmy5ZR9ljTo8AnA5DGAsPAbdU7j1NN0NXUg53dNvkiEwEExEC AAwFAkIIjHoFgwhQSG4ACgkQIqUcje1P4MASOwCeLyBkToAQ+3Bvup4B9POq1xip ZNgAnAui9pLAdwaGAZ8w5PFxuS2GoXxEiEwEExECAAwFAkI2qnwFgwgiKmwACgkQ 1cW3Q8Sn6j4gRACfQWmnt2z+J0tB79JQ50hNEVrYuKEAoNAe1Y5xlLlDTSKJmnwj qnN0qaeriFsEExECABsFAjbtSOoFCQzJfIADCwoDAxUDAgMWAgECF4AACgkQXeJJ llsDWKK11gCfUgltInjqS+wGOrxfjiGjJsNmVtYAoJLaNHln4KYwLlYOo16kdcB7 dqUDiF4EExECAB4DCwoDAxUDAgMWAgECF4ACGQEFAkBd2egFCRNri/8ACgkQXeJJ llsDCRDs0gCgy5RdOqhFvwUFYWj+dHb4LGt7xi0AoKduFxGMuM/loPShQnjvk/VV FesAiIMEExECAEMFAkKVnMMFgwfDOCU2Gmh0dHA6Ly93d3cudmFuaGV1c2Rlbi5j b20vcGdwLWtleS1zaWduaW5nLXBvbGljeS5odG1sAAoJEDAZDowfKNiuNUAAnjPH ZE2+qGvOkOkRYAmqCFMXw9euAJ4lr8dHPg0y8xeNH8M6rSswZaeHT4kAlQMFEDuB 4BNSrOsu06QsYQEB6AYD/iRZgJ2U+hTGt879PPwLW1y7dQFbjMHqbyyM7eml9ZbC +m+jqNvMsniFCR5qvStMgbXuUZGGpd41mL5+vqF0wwM00nBQe+rr5grY2oMPCSEJ RNtHEamOsbc4GP59nrwbUhA7MKPSrPCvh9bvh+XQ7MSlar9eVBkqvnYmKdaKI1io iKIEEwECAAwFAj+WOcoFgwQgi58ACgkQ4WdUde/jR61yvQQAghvUxGu+fWc6RUEZ nrQ8n69FOPRq+od8fiYNF5iSWfBon3hmT8IQi3vRFbqCcKsd7fn+rl2zZjFU5f7S uzaF8+hODuH7B/jK+bW/dnhpgDRZyvmZMtLpeAOPh3IkrGEeknV1LeTZcRJnbGTZ iSu3LS8E/AVuSXmmj+2tXXBzSFKJARUDBRA3Q97TUoBXRHZTQB0BAchxB/9iTH4O 9RoIshiUysQgMpncn9o9snx+sCO/NiSuAVleHNBP1d/Kvo6SGLJYoVfbfLPMNVyu Z4jGi8JQjsgVjpAz93nIevhjz7Xwd3JpS9oUvPej1mdWnUB4AnkKQfN+5+eso9Gk 7OC9cWq20lU9tpVMDIlOj8GHR9kYfJ4fBbzdCGbG5Z9pzo+96gDUMzX5ZrHlChdV 4eHJPMi60XeK+mpocQFQH3GBUSTeM3Sy93JoYJLdAA2ZcwMF5xI8HRx8u0rwCZNX nDTgPaRbDiW7587n3dWn7Pwmxu/CPtCQ4YO+WdjcKvHio7CqojtM8/7xuclkp3Wb 1pE1s9w929ca9SHdiQEVAwUQOcqYVhpPhku+30gxAQGDOwgAjoKCGePm8h7g2edN YGosrPTMcZ8PNCMETXMZozgCbEd5oWvotRaZnta2CZyj/u5gOrE7z8XR2PNttenu HVDii5y0KwaaTR12/wrp9VJ61wLy/4zncnx/C9Nwg/Mu9Y2bMS8EuL16yWNrm6Yx prWsaaYy7G251NI7cseXcVnuAowzm6k8ovEwCAqVl4s7EUibNQQCuDgH4idUdr41 0fDnpUalpvsGYf1wqhs93RbjU7pNEaLmnlz8zESHYaev+JpMVAfnw/jjWp97xyCu al75xrc/aj93anrobvU/sSKCDbteDzW9xYyjqZGu2npn+rBR4iUHZf9j/glwT0PV nH/jf4kBHAQTAQIABgUCQQm8qwAKCRAz/XFX/s5mTm10B/wK4tRztfYKQVVYYl3r duOE1rEntFEP3yV0H5qkIlPrXNi3j2hgOiUEBNDgFpuJ9rSz7IZ3GcIGlP2IlT9O icGwpabAtoB81S8rJKkzI+bBLCK2J1xJslIdjk2FO1u+KjLu1gu3RZYaYPc3bETX XmtECI2h5hNazvDw+QS1JTIkqr/vhl3TY9JAxiLwNBWn30phh8kRzvRJh1EI584v RVb7nTSd6PYpnpoEskJbXyAc+BV2QLPk95oj52MweGADFNv3uuyUq2WH9H1KP3Mn wNReTy++woQfLzobHHMyBr4ccC4uKlqOmBcZ+kkmEjxrJTRALelu2quUhpR7a0tc qFxSiQGiBBMBAgAMBQJBhRYSBYMI077WAAoJENJkZhEZk6qtGSkL/0qaizY3Ix+h wNj+UAN8sGhPLYNGSnPCgLyLMceByJP7fpF96Try6wIYsVAsXdltuC6wEsDNjIc7 4FCduAc0HfhnJ5Yu3ciJ/DvR//vlbnE1pp+RysVf7V3CVNxLgOdfSBd76tgktcfb sh+R+qKR4JtWjojkET+XAOrCDYNj8P3nNxHzzYO9UHSBsNzrm46RBFNxtETh0nDx mgzfu6i2vpSwoRMbi/39VGlHJNYoA7itVZfZx8FebJA9KcirRDGtWcofsUhWWfnQ A2K+ahPIx+N0xVzuxjKZoXbkSC+LFwzaoYFUE6OcFsBkUY40QhCNKIWUX3kSZVUW ro6WuwMltQAkXG+03awShgpciqzZ3o+Oro8zmMoESJl9c5oUWuIfJwHpvrw7UrAr cZLdf6bcOjHlJqGv2XSRJIxeiUtLghPrZF8pqN7j58yL94QC7PsQLsRkcgGLp9aS v87O7XzGU9nlyOS7wR56pQPClpTO8tm6ckquKh7T5jIqnszVh2t4yYkCIgQQAQIA DAUCQcIpbgWDCJaregAKCRCq4+bOZqFEaCX4D/4kRmZ8eDsYuKrw8OS0yUK3PI9k 4wyBGxUQmuJKgXFRAbCkUpATHvRh6ZXquWFSVbgkay3cfbGLfZWiT7TAz+k3eiVS tm/Mk88pqlTfu2pUq0/5bpqJF9zt/L/i2aY/030A4l5gsEccCsdy5F1FXQPbYGFT vjtPJx8hMstAG761HhaOib/A2O8jd7f8elZMGSTubtsFJ1/K2Po6sy/3ylJlfo/F zgvqTJYju4IPsIrq44D3k4kQDMahU2W4k6crQncV7w2wqC0zxmuZIuCio1wyvYG3 ey/pjNfrOemSuA/gmmN38uBJM+vEQIPnUdJslc9H2eH4rVKFEQZuqUk+HUdwVQhJ KfwaMmSiGj4PeXphtFc6a3lqfhsiN+7lOnzk0dRMCxZEMgLjIC6pGquJ610zsYGR b/viXDUliNBJod7CeOHRH653/00U9aaqh1Km2He+BWmtZt+Kzw10YUm8oox0/E6X lE4EL8p/LP1uv8vbaGzTVxX5NIr9gVhrnOVDHHXtlFZxatg7ZLuSNkK6oiqsR2yn xk2ysmTQEzyi20UFxnH8ICsUyRyEDbJlbewQPtJRnknpV6QhsUA6bVytyYYA3RkJ qSDojEgAgz5LL+Zhm1Ttz9ccwxJY6/ZevzlScNrFxPnzmaotfWPgFis0yF+PLZGT uf/gssj8yYMAWhhtBJkBogQ6VOgnEQQAwk/7RqQbtBB6Y3dxtdULZE1mJ4oWQwXX p42FdhL6LYEWQI+YeHsKa6tbv86sxgWKYmC//Y/uVwxXKFhduG87FJh17Gw0or/l xMkDQ9RlHceMFXBGOazY5AK19Ol7mczm71xVzr6kY+i7JHj7cN8S3+bo/IzzdDX+ mCp4XxiB0VkAoP9FAK94TCus3AP3oL1kRrJvXSXnA/9fF1npM7eSSXit33myTv9z MHuNzulTTsZjKRljmE64Yr8jm/2S4C3nal/jHlxxnRq6AEWfpMWKv2vcuYzXIrw/ hMjfiIjQzw+uK5dNBTWZLMe3Yow/PT2yFCwwrVKabNidIJOYp0fss4p3/ow8hZ5+ VBByNqzxS1G11hyVyXKdFAQAgZMw3XrD4xFV2XU0Uy5NLH4lhHXATP+RqTbMDJSu AOwOoqiaEjSeKTuUKuj2DsAxahoq9fVhH6E8h1tJMYqZ1W76uKtrwIUiCjqjRCRs YOA0xCnnH98QnSdJFvHVUqIBwx/3PkOPkRUKv99Wnr9xw8ttGGssQBPeAViLCpIW jMqIYQQfEQIAIQUCOlTwWwIHABcMgBE/xzIEHSPp6mbdtQCcnbwh33TcYQAKCRDH RjY5std5Xle4AKCh1dqtFxD/BiZMqdP1eZYG8AZgTACfU7VX8NpIaGmdyzVdrSDU o49AJae0IlBoaWxpcCBSLiBaaW1tZXJtYW5uIDxwcnpAbWl0LmVkdT6IqgQQEQIA agUCRef5PDQUgAAAAAAgAAtwcmVmZXJyZWQtZW1haWwtZW5jb2RpbmdAcGdwLmNv bXBhcnRpdGlvbmVkBQsJCAcDAhkBGRhsZGFwOi8va2V5c2VydmVyLnBncC5jb20F GwMAAAAFHgEAAAAACgkQx0Y2ObLXeV5HSACgjFrFxTBOtJlEIchRGIAQkfGP40gA n34gLcaPqvzDS+mRQEqQGEc2DKQRtCJQaGlsaXAgUi4gWmltbWVybWFubiA8cHJ6 QGFjbS5vcmc+iJsEEBECAFsFAkXn+Tw0FIAAAAAAIAALcHJlZmVycmVkLWVtYWls LWVuY29kaW5nQHBncC5jb21wYXJ0aXRpb25lZBkYbGRhcDovL2tleXNlcnZlci5w Z3AuY29tBR4BAAAAAAoJEMdGNjmy13lemYkAoKcCxXB8HSiXXIxTT7mID5EXa4Sh AKDdLTSyEKe2BPpaTITWO5iRkFENYdHMf/8AAA06ARAAAQEAAAAAAAAAAAAAAAD/ 2P/gABBKRklGAAEBAAABAAEAAP/bAEMACgcHCAcGCggICAsKCgsOGBAODQ0OHRUW ERgjHyUkIh8iISYrNy8mKTQpISIwQTE0OTs+Pj4lLkRJQzxINz0+O//bAEMBCgsL Dg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7O//AABEIAJAAeAMBIgACEQEDEQH/xAAfAAABBQEBAQEBAQAA AAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0BAgMABBEFEiEx QQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygpKjQ1Njc4OTpD REVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImKkpOUlZaXmJma oqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj5OXm5+jp6vHy 8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJCgv/xAC1EQAC AQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVi ctEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlq c3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TF xsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AOop cUoNISAMk4FdJ54dqgmuooh8zCqV5qfJSL86yLi52o0sz4RRkk00iW+xqS6qOdhr NvPEqWiks4dh/CprlL/xC87GO3JjXPXuaypZmkYDO7PXA/rUua6GsaTe50dx471E viBI0HoRuNVT4113dgSKv1QVz6ctgLj2NaFu3lRbREgZunIrO7NuWK6G5Z+OdTDf vvKlC/e+Tb+tdVpXijTtUUKJRDN3jc/yPevNWmcsRIiAeiilkkhgjE8ODz1Vvu01 JkummewghgCCCPUUprhdD8buvl297EjRHhZVOCPqOldvHKs0ayRncjDIIPUVadzF prcXbig0tFMkjIop5xRTAeOtZuqXZj/coeT1rTzgc9q5m7uBNcux6Z4oSCTIua5L xNqpeY2UbfKh+fB6munup1trWWdukaFq88ffI3msfnkO4k0qj0sXRjd3ZPaxO37x 1+U9BjOTW3BokrwB5ULF+Qo4xUGjWokuYlI+QfMfeu7htEmVeMVztnYlc4G50GUj IRgB69qrwWQtGyV3knr3FekNo0Lk8HJ98CqUnhvzCQWI9OOlJyL9mcDdxcNuZyxG QSaggsZZiSm73Nd+PCTOAZSpUe1aFtoVtbKMRru9hSUh+zPL57W4sSGeN9jdeOK7 bwR4lknddKnG5VTMUncexrR1TTYjAwKAjvxXERwHSfECeU5QN88Z9DWkXqY1I3R6 7SVDZzi5s4ph/Ggapq2OMbRS0UxBOwWB2PZTXMYHY5/Cug1Nytk+O/Fc/mnEmRme IX2aLPn+LC/rXED5pQM5HfHeur8XSFbCGMfxyZP4CuYgi82ZIl4PrWVTc6qK906f Qo1M+5TnHGB0FdnZMAg57VgaPYi0thgZOK1IruCFyGkGT2FYPU6oqxsJyR7VaR1x ggVRhmjcja4OfSrYUgjHekbLUkcAkAAc1WkK7iRwKkUlpmA6KKgmba+3oT0pDM+9 kBQgc1wviOMLcWr9w5H4V210ecetcf4lKMyZ7E/yqosxqHW+CriS48M25lzmMtGC e4B4rez6VieDY9nhi0B5J3Hn/eNbldS2POluxpNFKeKKZJR1mYLCsXduaxa0NaP+ koP9ms3NUtiHuVNVsIby1DXAYopOCh5HvXIaZY3M92ktv82x84bjIrvb5d+hTbRj y4mYk+5x/jWB4bfzBIxHCkKK5W7ydz0lFRhFI2heqIfLCMk7L8sfUn2FZytp4UG6 nSOcjcVVdx/Kti+gSaxJ2gupBDY5HIpV0NFyY0Q5HPY/nWbbRpGNzLkvSYohaala lVzyYdrYzxz3rQ0/Wr2GNhJIkzLznB6e2D/OmHQ5IInjtQI0kADgkHP6VW/s1rJS VXcMbThsZzUOXY0jGy1Oii1VowWVoSZjhQSRn2FU9S1lLaVTcCPcOMI+cfyqnrS+ RZWsMeQyhQuOhxWLNFcPEHjVpJskuHUFSO2O+aaYS0NWTxBYsu4Pz2DcZrlvENx5 jQSLkAljg+tX2aK3jSO409dsg+d41I2n6Gsu907zpIYImwHk+Xc3rxgVcWYyv1PS /DabPDtiOuYQfz5rTqK1iSG2jiRdqxoFA+gqQ11HnsQ9KKDRTJMfWwRdIexWs3Nb urW5mgEi9UrCq1sS9x958+g3UakANHjJ7c//AF6wNARokdT3c8Vs3M/l6bcrtLbk 6Vm6bEUZcEZzkj3PJrllGzZ6EJ8yR0luqzQtE33WGDWlBC0MIEo8wjjcvf3rIt5N rHtV0aslupGVZ+wNYtnXFaE9xcW8SFmhlGPy/OqCEz3Cgx7UHzKh7e596jmkNyhu JbhNynKrngfWoYNbRpd4VSE4JU5pJrqW0Ta3C5tlmUfNCwYD1pbVYLqBXBV1PT1+ hqPU9dtp4vLUKrNxtXvTrKCJlCzhoWcZSSM4P0PrRJpgrhd6dbmInZz9a5xUlfWr MR84mVQfpya6l4ljXDXUjD04/wAKxI2A16BEXIL8ADpmrppXOevpE7fgdqSjk9Ri ius8wQ0UhooAJBmJhjqK5ZwVkKnsa6vrXP6pD5NyWxw3NOJMijIu+Nl6ZBFUtNOJ /LKBSvXnpV7OaxtQMtjdiUNhJDwfSpqq6NaErSOjbCgOTwOtc6zyX15N5AcjcSCO Riqlxrh8sxxsQyjHJ4zTtEvja36+aTtbqK4nFo9FNN2HXRulUwO7R5PIOen1qrZ2 t19oVo2GByQrAHFdpcrC0fnbAQO5FY0mpWAYo9sg2jlgOtJM25YrdmDfw3jyb2JL ZJADZxir1pql0kIhuWeMqflYdqvfYbO7G+NMA9gcUmrtbWqQQ8BumBR5EyVtmWod SN1bZyC4ODjp9aXQonuPEhYjKwR7icd6rWhhis1IPQZxW54UgIhuLphgzSZXP93t W1JanLXl7p0BNIaQmk7ZrpOEUmimk0UCGPcxR/eYVkapdR3LoEwQtTwaJcTENdy7 R3VeTWnb6dBbD9zCAf7zcmqtYWrOeisLucZSBgv95uB+tV9V0ZrzSHVRmVAWXHfF ddPtETrvJcjt0qsibEDDtzT3QLR3PEgWSTZJnOcHJq/aySTSoUPOMsfTFdV4u8HM zHULEDY5yyjsTXF20j2s7pINvY1yNdD0FK6ujttPvjLbPas2QDjOc1K2k2t7IZlO 0lMdelclHem0VSHI3DPHrWhB4i+zx+WhycYJxWbVjeM09zTiZNJEoZw2PuD6Vzmo 3z3t09weDnjHYU271CS7kG7hcmn6bpF7rUwitkOyPl5G4UfWnGOpE5/cavh60udU vQvITqzdgK9Et4UtbdIU4VFAFUdD0iGzsjEigvnLN0JNXjG8TcP+DiuqMLI8+c+Z 3JCQfxoJpm/byy49cc0oYEZBzTsyAOfpRSE0UAaaoeSxx7CmOcnipmGUpmMn8KZd iu0WFLMOSf6UxY8AY6EcVclTKkev+FRR7S3lkckZX+oouKwkO0qY2AKnjB6fSuX8 Q+BLS63T2sWM5JRfvL7j1HtXUMnlvn+E1W1vWYdF0eW8nbG3CpxnLHoKzkkzSEmm eRahoF5bTnblowcD/CqsGhahczBI4juY4AHJJrqJ9b1bUoBIEt7e3B5uGAJ/A02L xdDpeCkpuZen7uIKG9s1h1Onm00LOkfDq5Jjl1GdVXPzRIckj3NdmLG106xENpCk MeeFUdT61JYXIvrKOcblEg+ZG4ZD3U+4NB3XNzgDKpXTFJHJKTluRxx7IweQc5qd Y3YcnI681KIgAc+9S4AC+/FVcmxWWLggHBHUetNe3OeuM+1WGTL59RTudoJ9RTuK xQaFl6Nn2xRVx0LHGO3WinoKxaz+7/KkUfN+FL0GPelPXIqDQXAYH8arsCrhh1HI q0gyDUTr09RikMHwyBuxrG1nTk1iFdOnyLeTO8jqPTH861S4EZQ/WqMknkK9zNKs aJyzMeFHvTF1PLtctLrTLxtHmOYoYw0RHAcf3qveB9Htpnk1m8Uv9nfbBGRxuAyW P0zxUOp6jba34lkvZXcWrfuoz0O0DGfxJrp/C0C6dq0+ms4kt7lPOt39wMMPy5/C sVbmsbNvlNvTHAtp3UEK0hYAjHUCrMKMgDA4Y9aiiDPK6fKFJH3RV8R/0NbbGHUg /eM5GT1qdUbyxuPIp+ADT153Ci4WIn4YfiKXZlSO9D9vrT1I3YpgLgAZ7GimTMfL IHWihIGz/9mITgQQEQIABgUCOlaPIgASCRDHRjY5std5XgdlR1BHAAEBB9EAoJKf He2geEWwIBoiwJGSYV0jgef2AJsEMoiq8ESPJtydoFb6Jm59yMDOx9HM1/8AAA2S ARAAAQEAAAAAAAAAAAAAAAD/2P/gABBKRklGAAEBAAABAAEAAP/bAEMACgcHCAcG CggICAsKCgsOGBAODQ0OHRUWERgjHyUkIh8iISYrNy8mKTQpISIwQTE0OTs+Pj4l LkRJQzxINz0+O//bAEMBCgsLDg0OHBAQHDsoIig7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O//AABEIAI8AdQMBIgACEQED EQH/xAAfAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQD BQUEBAAAAX0BAgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoW FxgZGiUmJygpKjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5 eoOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU 1dbX2Nna4eLj5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAA AQIDBAUGBwgJCgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2Fx EyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdI SUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Sl pqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4 +fr/2gAMAwEAAhEDEQA/APZqKKKACiiigArI1vxLpuhRk3Uu6XHyxL94/wCH41le NvFx0K3+x2OHv5R1yMRL6n3rx+8vJbqV5priaaVjmSQvgA/WpcuxpCF9WdzqXxN1 KdythFFbpnHTe38v6Viy+ONecDzNRljycjaSv9BXOW7Rvz5LZH8e8k1YWABi7AMW 68n+XOazb8zZRt0Oss/GWsRMrnUJHGfuybWB/Ouz0XxvZ3yLHe/6PKf4iPlP+FeR CPyBlfmGeUIxmr1hKGby/MO3se4NCbQpRTPdkdZFDowZT0IOQadXlVnrF/oUnmpO Vjz8yHlWH0rvtA1+LW4SQmyRRkjsR6itFK5jKNjXoooqiAooooAKKKKACs7XtVTR dHnvmwWRcIp/iY9BWjXAfFe98nTLO3D43yF2HcgcD+dJ7Dirs811PUZr2+kuLiRp ppHJZjwoNFhYJeS4blBz6DNZ7yZYBRjPX1Nb2lsYkBJxnqawm7I7acbs049OtzGE Ax06Y4qnd6Dfo5azDSpjjHatWCTKcjJ+uK17RsoMGsE2jdo4628Navd3A8+MQoM5 LV0lt4Ulhj/dSorEYLlMn9a34V3Hgc1oxRKUz3IrVNswnZHBaj4a1d4yJpkuUHIK jaam8I6lNoOsql0SYD8rEjBXPrXatHg89a57XdPhFzBcFQFZgjkDpnoaak0ybJqx 6OCGAIOQeQaWsPwndyT6V9nmbdJat5e7+8v8J/L+VbldCdzkaswooopiCiiigAry P4sXhk1yG2YAJBCMYPJJ5/LpXqOp6jBpWnT31ycRwruPv6CvBfGOrXGvai+phFRX wNoJO0DtUya2NacG/eMyCMzTABScVtwK0cYUc56+1R6TZGKxSaTBLc7gcip5ZNo/ d7Qc/Mx6Z/CuaTuzuhZK5q2TsFAbvW/bw4VSmMe3auPtdat4f3U0sZY9Dtb+orpt N1izkiAW4jyeMZqOWw+a5u2uYwZW4CjmrsbFYxxkEfnWeZUNoioykSsMkHtVxZ/3 xj7BeD2NWjCWpO0ikY/pWP4o2/8ACPXLjG5QCv1yMVqMecday/EboNKKPyHcfpzT JRb8CO7+fvGDtGfqCRXYVzXguDbYyzMPncgE9/Wulrojsc0twoooqiQooooA5D4l yEeG44gxHm3C5+gBNeSM6SOqoActgDPFerfEuKSXS7MoCQJiDj1K8V5hHaG1uoon I3ck4Oc1zzfvM7qX8NI04t6KPK7LtwRnNUbnSNRuyZYpNqZOfLUZHNXhMA+1Rn6V rafIlsFaZmiBJwGGB+dY3sb2Oat9Hv8Aztkl2rwYPDxK5/pVG1e5t9QWMxlHyMBO M/SvSN9swztQse+BXKXcEU+t4gKu5OCVPC8+vrT5u4orU14p7lLdbmWJo2YcFOAp 9T/9akn8TXdthUnEz4ycRjIrbkso20+2Q8IrhT9M1gX3giKe5Z9xRWO4PGcEGkhN rsamm+K0udqXFnNGx43qmQT9O1S+I5VuYLSOF1IaT5vbpWUbPU9KmQRXP2y2GAY3 ++vuGro9PtBqOr2izhkjQF9gHUA5wf8APetI6uxjNWVzptCtmtdHgR12uV3MPc/5 FaNFFdRxBRRRQAUUUUAY3ivTptT0GWG2XdMhDqo6tjsPwrx++tpbfUlWZHRlA+Vh gj8K95ryr4hWLQ+IWuCciaMFRj8/5VlOPU6KM/snI/af9Iyc8H16V1elX/mQhGxt 9D0rjJMxuGbIye9SDUWgZjIjhMcBeg9P51g43O1ySRva/r1nBIlrb2qAt/rJtg+U e3v71Dol1YDU1aBgEx0Fc7NN/aJ3RoWDdqdb6XcWS/a2ZwvUD/CjlVhKX3Hr6CGe zCBwQ45x296ZazvNAeBIyMUYr6g1xml38qXkK3UkwhUA4D4z9a0bO7XSdcdY5t1t dnzEJPc9VNK5HIdPKY3VB5RLBhxtrV0e3VblnbG9U6D3P/1hWYLnzcY4z0Fa2hN5 y3M38Jk2L7gf/rrWna5z1LqJrUUUV0HMFFFFABRRWLrHi/QdDB+3ajErj/lmh3N+ Q6fjQBtVxfxKsd2jpqSD57ZtrY/un/6/86wNW+OFjCzR6Vpks7dnmbaD+Az/ADrn bn4j634hD6ffLBDb3SsPLSPBAxkck561L2NIp3ObuL5RICWGRnnoOvWt3S/Lmj2v hy6/NyDniuMvM29wUxjnnFbeh3wUrHgZHzMx6ZrOUbo3jN8xqnTYoLpsRxMno3H6 1u6Y9jJGtv8Av4lz90ESKD7BhxTbQW2pKC64xxnua0LHw+sMxkaQlUbIH8q5/U6X LsSPpdzJ5uBDchlO12XY4PbpxWLDaXF5KtrJhPLOSVOduD2966fUtRTTbUgNvkPC L6+9c5pV8glkk3gsXxge5p2ZPMdOpkS3/d5MgXCDuW7V2el2f2DTorfuBlvqetef Sa9a6N5Wo6gjyW0br8sfJLdv8a7bRPFGjeIIw2nXqSPjJib5XH/ATXRTVkclZ3eh r0UUVqYBRRRQB4X4o+KOq6sjQWrfYrc9om+Y/Vq89uLmS5kJYk5PJ9abM7M2KfDE FG49e1I0J7eFIgGIy/8AKnW9xt1OGRunmDP0pjMQv1qBwTu9c0PUd7Gzqtp5xJUD eORnvWdZ3LWpaOQbexBFaUF2Ly1D5y6/K49xUUyxzfLKvPY//XrKLa0Z0Tin7yNa x8Qw2xTcfu9/73at238XKIjhlye3oa8+azK/ccHjqTjNSJBNEoXeAAc53d6HCL1J U5JWsdPqeuPNJgyAlSOSc4qCxmdLgysxVF6tj/OTWZp8CXLZbdIByWA2g1Y81pb6 RQNsUXyqi9Ae5+v+FWoWRPNc0b6/e/lPmjEarhYz0ArGUyWF4JLWV42Q7kKtgjn1 rRc4+8B9fWs3U488gHlMH6VRJ6R4X+Kk0Spa60puEHAnUfOPqO/+eteladrGnatE JLG7inBGcK3I+o6ivmG3kbcNxrZtb6a1cSQTPGwOQy5BoJ5Uz6Sorxaw+I+vWsHl tcibHQypuI/Gii5PIzzSOHzHLEfKDUpXHWrEQR418rkUjp64plWKrkgUkMZkD45x zSyKT0FVpgyplSQV5yOMUiSxC0llPv6ISNw9K3rdbWZQ0hGMVz1leG4PkXBBLDCt 7+hretpbf7GUbBY+vUVFSPVG1KXQaZbWN2VYI3PZj/jTIIE1BmKOrRo20qn9f8/n WdeThEl2pgE8kkcmrvhrbHpczgjc0nIzjp/k1pCCTJlUb0NG/uE0+xbylA/hUDuT /wDrqDTofLt1ycluST3J61T1Nmmv4oecp87Z9egrQtipiHXHpmqk9SYkrLjnP5dq pXwBRDz3HTpV5xwcDrz3qtdJutmPdSDUlGNgqxB9etXFf5eD7ioJVBAPQ06Elhx1 NIS0ZZWQjIVT+C0UkYTLBsDnrxzRQWZSiaKX90C2T0Her+fMGMdOopYFWMg9Tjk0 w8OfemQtBjqMHBHFMijEkgTseOalbj86ZBxcL6ZoF1MbYUd1yQUPFamnvLLK754x wP8AaPeql0uy+kAx1NbGmRCOxV+mfmP41UVdkIgvo3liEbkZ5YDqVpPD9z5MktjL gCXlMj+Idvy/lViXBuUBbqoxn1zWbO2BKV4LMApHbpzVPR3AvWwM080553sdp9hw KvwyeVIBnCt1J9ahtItkKKPTFEuVcccNUGiNItkZJPPb0pgUMrqedwxUdtMJIyrH 7vf1FQm9bP7kDj+Nun5UhlKcYU4A4psLfNnOOvSluO+eST2qKHJkAHfigV9TQgQ7 TkEf1/SirWEiRcjJIooGf//ZiJsEEBECAFsFAkXn+Tw0FIAAAAAAIAALcHJlZmVy cmVkLWVtYWlsLWVuY29kaW5nQHBncC5jb21wYXJ0aXRpb25lZBkYbGRhcDovL2tl eXNlcnZlci5wZ3AuY29tBR4BAAAAAAoJEMdGNjmy13levlgAoMqGHGUHYglUc1q0 ONVSbBqREwqgAKDm0Wb8gOEgOc4LMyrMUjFQDE+9ibQtUGhpbGlwIFIuIFppbW1l cm1hbm4gPHByekBwaGlsemltbWVybWFubi5jb20+iKEEEBECAGEFAkXn+Tw0FIAA AAAAIAALcHJlZmVycmVkLWVtYWlsLWVuY29kaW5nQHBncC5jb21wYXJ0aXRpb25l ZAULCQgHAxkYbGRhcDovL2tleXNlcnZlci5wZ3AuY29tBR4BAAAAAAoJEMdGNjmy 13leaBkAni74iLTyTIzFwexRyQIQaKO3Gda9AKDIot/KYfOdMe8YD4f5Di2KsiAn R7kDDQQ6VOgnEAwAzB13VyQ4SuLE8OiOE2eXTpITYfbb6yUOF/32mPfIfHmwch04 dfv2wXPEgxEmK0Ngw+Po1gr9oSgmC66prrNlD6IAUwGgfNaroxIe+g8qzh90hE/K 8xfzpEDp19J3tkItAjbBJstoXp18mAkKjX4t7eRdefXUkk+bGI78KqdLfDL2Qle3 CH8IF3KiutapQvMF6PlTETlPtvFuuUs4INoBp1ajFOmPQFXz0AfGy0OplK33TGSG SfgMg71l6RfUodNQ+PVZX9x2Uk89PY3bzpnhV5JZzf24rnRPxfx2vIPFRzBhznzJ Zv8V+bv9kV7HAarTW56NoKVyOtQa8L9GAFgr5fSI/VhOSdvNILSd5JEHNmszbDgN RR0PfIizHHxbLY7288kjwEPwpVsYjY67VYy4XTjTNP18F1dDox0YbN4zISy1Kv88 4bEpQBgRjXyEpwpy1obEAxnIByl6ypUM2Zafq9AKUJsCRtMIPWakXUGfnHy9iUsi GSa6q6Jew1XpTDJvAAICDACNUV4K2PS6h574Z3NaBsIQe5jkVO48MSohjC6s29Cj PhlU79cQIYWmBpuNfwroZ6zltyz6Y2Fm65V0IfvVicR7zvFFCOhahMuk1cr+Qp93 6OMEq9sLZGxTjClgwrHGS7YpMSZrEC7bpOmERjo4F/n5YmCHJCH8QzCOc9+80gjV EsHiJVABrC8yykjKL5x1V/PSArE4QtMLbkBPGmQYOw8bx6jCHoO43QjUzbqRfBMH ZqWVJyoIIZCp+n13XM4+NO/cDVsZ8bjch0LIOyMrT85n24yfXRlP0s7BFjLm59Jj hf4djuJWikJawWETlypAy86OYRRuwCbIyNauBeTKy+avZvF2oLvpwH4UnudpC06/ O0jkj2lQpn9EEUw11RwO6sq9zYTwAUyKerN00cbCfyiZl01CIo0btcTO6hQK3c67 PaloJ9lVH8/mH7LuqkMLDH5ugkpzmed/8SorfqVkakne6b4mRySFCBXaVZoKmDHz cH2oSSMhM9exyh6dzi1bGu6IVAQYEQIADAUCOlToJwUbDAAAAAASCRDHRjY5std5 XgdlR1BHAAEB5W0AoPjfnyN286hffnwedCebBR1RzO4WAJ9PvQHw5eZ3J6+A+0Xj A5WKCGcEUZkBDQRBs9LyAQgAy29km+UGzoUSM3zoN7vRd9/ICtV2ViRvCcFz/A0h m0BKH9PmKE/+2wPt4dZY4dyxtJvCVBHaJa8S8//DILrtkwNlEIjMEWkQoUlbwYJA kWJK/e/pApTYJovjy7lDdc+LbKanRO+tZ0Vb1JdseF7y0ydtYVOXlxhrAvqhT+BH 3vAeZB/hXsQH5xTz86Ltxo2w22L+AmItKcoU8ZmrscickK0PzEFLdERUZC/Kgs1g kdgZh94zNzNFrdKCp/AvPn1iLVIeVPX87/yvRnjv0lfPs3S+DK3ag7LYKlzbNux/ lniIG15VBiLNJjjROk7SmeT1xucxTNW89bw3QGG2OHlFgwARAQABtCVQR1AgR2xv YmFsIERpcmVjdG9yeSBWZXJpZmljYXRpb24gS2V5iQFWBBABAgBABQJCUbRwBwsJ CAcDAgoCGQEZGGxkYXA6Ly9rZXlzZXJ2ZXIucGdwLmNvbQUbAwAAAAMWAgEFHgEA AAAEFQgCCgAKCRCXELibyletfPfmCACdUd0CHYqqu/BKc+izvdh2VVt4X0txvGzi hg8MKToAeIOmOvafG7jyLUGIt5rtpMQTDACRwhr/eUIs/TY2MZermBGdalb93TG2 xoMOPzJha6xYaEQmxSWurkLPYqPDE1AddGEdcQNHy+r27PDkSMIHS7r2+XA2ajz5 9rXtgw1V1dpeyZcmUlyJUdrN28aixxPNk64oMd1omZjyclwLJ2TiqwU6IY5wWblQ 4o+fN0GHfU0qCWrD/GH7WdMDbPmiuxjiNUUgHqxaq60hxVBi38nvx2IAoV6aQQ5B 7SRTklmtjfgTymngGZLqZ8/Kvw20cV8w4ATibxpwV5pkrVfr65bn0cye/wAADVkB EAABAQAAAAAAAAAAAAAAAP/Y/+AAEEpGSUYAAQEAAAEAAQAA/9sAQwAKBwcIBwYK CAgICwoKCw4YEA4NDQ4dFRYRGCMfJSQiHyIhJis3LyYpNCkhIjBBMTQ5Oz4+PiUu RElDPEg3PT47/9sAQwEKCwsODQ4cEBAcOygiKDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7/8AAEQgAkAB4AwEiAAIRAQMR Af/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQYHCAkKC//EALUQAAIBAwMCBAMF BQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYX GBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6 g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV 1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+v/EAB8BAAMBAQEBAQEBAQEAAAAAAAAB AgMEBQYHCAkKC//EALURAAIBAgQEAwQHBQQEAAECdwABAgMRBAUhMQYSQVEHYXET IjKBCBRCkaGxwQkjM1LwFWJy0QoWJDThJfEXGBkaJicoKSo1Njc4OTpDREVGR0hJ SlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoKDhIWGh4iJipKTlJWWl5iZmqKjpKWm p6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uLj5OXm5+jp6vLz9PX29/j5 +v/aAAwDAQACEQMRAD8A9moqtf30Gm2cl3cvtijGSa4a++LNlGStlZvKR0ZuBWkK U6nwomU4x3PQqK8guPinrEzYhhihX86ns/Ffia/XzElJUHOV4/rW/wBUqJXlZEe2 i9j1iivMP+Ex1q3+/KCw6gip4PiXdREC5tUkHcrwaTwlVbK4e1iekUVzmheNdO1y cWyK8U5Gdrf410QOa55RcXaSNE09ULRRRUjCiiigAooooAKKKKAOY+IblfCN1g9c A/rXh1fQPiXT4dU0o2dwXEcrclCARgE8ZB9K4J/AGkKeJr38ZU/+Ir0MLiIUoNSO erTlJ3R54v3hXpfg3UdNGmrHPMsToOc9+KrQeBdAd2SS7vkYdPnX/wCIqy3gfRoT hb+9GP8AaQ/+yVdavRqxs2yYU5wdzH164t57+V7XHlZOCOh5rn5n5NdrJ4U0xBt/ tC8x16p/8RTP+EK0uRQ32q9IPfzE/wDiKuGKpRSSYnSm3c5/wjP5XiKFywUDqSce levR6/pCR4k1S0DDqPOXI/WvPLjwdplpbtPG9zI6so2yspU5YDoFHrW7pOmRWpEi qVyuPlHH41xYmpGpPmibU4uKszqY9f0aZtseq2bN6eeuf51fVldQyMGU9CDkGueM COpxtYe3NYWoabJJOZrWV7V1yFe1cxnH1HX8a57Glz0CiuFg8U6rpjql2PtkXTMg Cv8Agw4/MfjXU6VrthrCH7NKRIoy8LjDr+Hp7jIosFzRooopDCiiigClqXKRD1c/ +gtWPLFitnUfuRH/AG//AGUiqDKGFAzAmFzG7rGhAJJyB604XtzGGjeAuD3GR2x2 60t1fTJf3EChAsLKo+XOcorZP/fVQm8lPXZ/3yKLCJDPIBsjUjIHUewFWoYWS2jD DBArPN1IQR8o/wCAirdvcERwu33ZYkdgOgLKCcfnRYBL0f8AEvmz6x/+jUqxbzyC LCKoC92NRaiMWLkHhmj/AB+dTWlarutdoIXI64oQETXJ25MbA9DsolCEY4zjpVsw L5QXgMB1xWZMRDIywoJn6HnAWmIzb+GZyyIisD0Vl4Nc5I0ulXSO8zQtnMTrkGM/ 71dVNpufnMkm7Odwfmqd5CGi8tuQB0b5v51SEzf8M+Kl1QixvdqXoHysOFmA7j0P qPxHoOlrxm5DROrRkxvGQVZOCpHQivSPCfiEa9px80gXlvhZ1Hf0Yex/mDRKNtQT N6iiioKKmoD9zGfSVf1OP61QrUuovOgZM4PBB9CDkH865PxJrVx4d057yS0inAcI qq5TJJ+hoAqXg/4m9/8A9dU/9FR1CRUGlan/AG7Fcal9n+z+dNjy9+/btRV64Gem elWiKoRHVuIf6Ha/9e0X/oC1VIrIt/FtxNGsFtoxk+zoITI1zhWKjbn7vt0zSYzf vJSLAIennIB+p/pWtZy4hXmuQa71fUzGhtre1jR920MXLHGMk+2T6da1oZb22ULM 6FDwGCkHNFhGzNqCbjAmXkPGF7VJFAkEQHBNQWkMUcQIwc859fepJJeOtNIVyK4b g1jXjda0LiTg1k3b9atEsxr3qai0LWDoOvQXpYiEny5x6oep/Dg/hT7s9ayLoZVs 1VriPeQcjIorC8F37ah4Vs3kbdLCvkyexXjn3xg/jRWBqb1ee/FqYLpun24P+snL MPoOK9Crzb4uKQumSfwl2H44qo7iexB4JQHRwCMj7Q39K2roRRXTkqPLU8iuB8NF l8S6ftdgrSHIycH5T2rvb8b2uap6MS1RDJcWsq7YUCt65J4rA0FUCHKjh2/9CNYf jDUSkS2lskrlHDTSR/8ALPjocUaH4msUtVjCM0qLyqkAH8TyKSBnoELoOgFJf3Vo ITFcTBNy546gevtzXM6Rqd3fakWadyigsYw3y+gAH410O/PDZHHcU7E3LWnXED2S C2nE0ajG4HJ/GpJJeOtYlxYpJdxXMcssLxkE+SwXdj14qrf6jrP22SK0t4RFkFZZ MYx/n8aANieXg1mXMnWla5lKRCSMFmB8xoz8qHHvzg1TnlzVIRTuW61l3MyQRSTu NwjXdt9T2FXZ3zWfcRpPG8Mn3JBtJ9PQ/nVCO7+Dl49z4f1BJG3Mt6XJ/wB5V/wo qD4LwvDpurK45W5VT9QtFYPc1Wx6VXDfFi0M3hmG6A5trhSfoRj/AAruaz9d01dY 0O809v8AlvEVX2bt+uKFowZ4z4Zbd4h04/8ATRv/AEBq7+T53ufrXnXhffF4ls4J QVkildWB7EKwNehwnfLcD/aFXLcUThGs5bDUpYrgFWZ2dGHR1J6ip57C0voRHcQq 6htwI+Ug4xkEVo+MJ0jksrYA+ZuMhPouMfzP6VnQyEqKqOqJejMmfSr/AE8NNbzC 6hjG7aQVlA/kcVueFtR+12Mrpceagk4Abdt4/rUiMeOeaqS6UhuVubSaWymxtdrb C+YvoR6+9FhHRPcCNGaRgiqNzFjgAVmya/pYkZftSnH8QQlT9D3rmdbefT4o7KO6 ne3ky+yV9xBB9euO+Kw2mfruNAj0OW8t/K837TB5eM7/ADBjFVp3IAOQQwyCDkEe xrz95W9vrirula1LYyiOQu9s2Q0YPT3GehpgdJK2apzt8hottQgv1k8pZEeMZIYg 5GcZyKjuFkkKQxKXklYKijqSeAKdwPUvhdbeX4ZmutpH2y7eUZ9AAv8ANTRXSaJp qaPotnpyYP2eIKxHdv4j+JyaKwe5qi/RRRSGeaeJ/Dx03x7Yavbr/o967eZj+GQI 38xz+dXdPffczD1cVu+Lzi0tT6Tj/wBBNc3oz7r5x6uKroIwPFt5BeazFbQKGa1B WSQdycfL+GP1qCCPgU3+yprC/ltrpcSqxOezAnhge9aMNv04rRaIh7jEiNSSFLeF 55c7I1LNjrgVcjt/alu9O+12U1uSUEqFNyjlcjrRcVjzzVL6bU5xJIioqjCIo4Uf 1NUDEfStiXTLizuHtboL5qc7l6OvZhTTZ+1K4WMZoSe1NFuSelbP2M9xT47As2FX Jp3FYqaUptJ2fZu3IVwSR1r0L4f6FHqmsf2w8bC3sjhA2CGlx29duc/UisHQ/Dlz reoiwtPl24NxPjKwL/Vj2H9K9m07T7bStPhsbOPy4IV2qO/uT6knkmoky4otUUUV BYUUUUAc54yP+hWv/XwB+hrntOTyNbSP+84rs9Z04ajaqu7a8bh0OMjI9a5O6gvo b3zjZAuDwyOMfryKaegEHjZTYva6qV8yFf3MqKMsueQw9uDmq+nPZahGJLSdHz2z yKsXEOpagyC4IWOM5WNOmfUnuaxtT8NOJPtFoGt5uu6PjP4U0xNHSx2bjtmrC2p/ u1xEOr+J9MO1sXCj++OavxeO9Tj4m0vJ9jTuI09c8NrqUavGfKuI/wDVyhc49iO4 rnToV/A/lXCI5xkPGCFI/HvWhL491BhiLSufc1l6hrXiTVZQIALaPGOFyfc0gHza dBZxGW9nSFBydxp+nafPrEii0RrOyP3rmRfncf7Cn+Z/Wo9K8NXEl0Lm+L3EgOQZ Tux9K7W0s5BgYNFwsbOg2tlpVilnYxCOMHJ7s7HqxPc1sqcjNZNnbsuM1qoMLUlD 6KKKACiiigBCM1E9tG55UVNRQBWNlF2UVC+mxP8Aw1fooAx5NDgfqg/KoG8N2p/5 ZL+Vb9FAHPjw1ag/6pfyqZNBt06IPyraooAzU0qJOiirCWcadBVqigBixhegp1LR QAUUUUAf/9mJAU4EEAECADgFAkJRtHAHCwkIBwMCChkYbGRhcDovL2tleXNlcnZl ci5wZ3AuY29tBRsDAAAAAxYCAQUeAQAAAAAKCRCXELibyletfEgSB/4/kRnDLh5l aGauPl25grp5237eE9E2uKOpsTZHOsJOT/T6XBPYsc7Y1crDJr9ouGO+OnQmPQdb X4UFtdEt/R862B4dyOGtsG/c0J4mQn9V52wntXkbLDYU6S1V151yhLHPRMA+TLYj yApbmSFwdPGcdriUmfv4vU6kjORFLiZPpV6oFxlIk2klzetyP+AZ2xcwsPEmkk+3 e56JOOVAvSP/oHClTvqGBE4K7FOwC+rpNemA/SaX2GRxBZqWKEvqkN7S3zwht4Gk v3YwWVlpDbec+3urG0ZKOPVxI9xFId9x4I6zpS/LiTW4ZWeTXiC3MR6hkx44vucD BAwY3zU/wupttClETlIgS1MxIDxkby1ub3QtcmVwbHlAa2V5c2VydmVyMS5wZ3Au Y29tPokBUwQQAQIAPQUCSaBWggcLCQgHAwIKGRhsZGFwOi8va2V5c2VydmVyLnBn cC5jb20FGwMAAAADFgIBBR4BAAAABBUIAgoACgkQlxC4m8pXrXy3rAf/VEVOn1nt BRkVHmGvx4cVaE+h5MIxcXdWKSDDaZmyM3jdnLOnGsh1TDAdE5BefUHMC85LSsY2 IOx846ZAW6XP45zXjHEajHZNlt2cOdcRvxF5meKZAJZgRF+lG1joZJju5bM2MbZ0 sHXLdd+w4Eb5CpNQtIlJmpFgP7YinA+UB2XqqdypG8XMZw9c8inRFLqe+g8l97S7 awRMNEBQPCK+vtlT/EIDXa3EQuFyy8xA/R/LQJE2A36lDZvqIEvbHWWMeBIbWveD eBCMcSTdQJMQoer36YWF38aLRFfPqLUCau9bikqFu03vpatd4X4VdOwHT1/XEqda LhzfTcyzW0glALQpRE5SLUtTMiA8ZG8tbm90LXJlcGx5QGtleXNlcnZlcjIucGdw LmNvbT6JAVMEEAECAD0FAkmgVpsHCwkIBwMCChkYbGRhcDovL2tleXNlcnZlci5w Z3AuY29tBRsDAAAAAxYCAQUeAQAAAAQVCAIKAAoJEJcQuJvKV618HDMH/jX86QEN UuARicYnvysocu2Ax1F+svyCZmf0qEyLjgeeUWXU0CCLXK5YDbALwPOJUoiK7xgJ oJU/QUVe4ErUEXy5kNGnyVm5Pcix/T/gNfjK69nBjmea0O7epeuNnttmLVbYDxz0 eBz7kDfRH0+2JjLkvPabzFmXg/rAOtgJADZEt/MYLzztsg8Er+29dNFQVl+PZfWj +rimvzPg0lNoVSX9eux4ZwlHY8/dLb99TksSuosmGWPr3TGh9GR/2hitSLLJvX9R taY0mw4dIfLLwURz2W+VIkhrf2eJJAorojQyHUuF5c0vtobXnYqReIfSaLpsfgQ7 NpNHt18t7Lej0+GYjgRDt/rHAQQA0JkZeitcyQMqk2xGd/5mGoc4+YNwQo8OSmVw IvY8UAI3tBorhF6ha9niaqZU4vdldTnXMU0j1oPckAhOgRPaOvaEZhYUTF0F/15p iAF5dkZQ6dsmXVUkPNYMZTpkc2nA+IACBiOmygGBkLFuXvHRW1i6SNz28iRH/UZc YLi/2iEAIIFWUJm0Jldlcm5lciBLb2NoIChkaXN0IHNpZykgPGRkOWpuQGdudS5v cmc+iLwEEwECACYCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCTS2MtwUJClRO YQAKCRBTtiDQHODGMPB4A/0U1DJR9LbkWuBs8Ko6KJoKLMVI6iYNJBhAtm3dxWeU xA16eYDWW/b9Lk5KnjtSWuGOeqa7MCsXnkyHkO88KE9IcM3mFnhfFN2qagd/nRch l9MPsdOgf/ug7j72Alv2V8s28R10HTjfwySe/omXWwK3qn8ou6N7ID+EwCV7i2e2 u5kDKgRHeRfDEQgAnwKxwiRUep5JsTYlvlBODwFt20JWvSVhagsLuFai5DyP5R2+ acR33/Bc8tjvPQcQ/+oV0g8dkpVZgBhzgiYUocdb3zRlWDbCZ9qDSudIp/ZBrw9P plQAn8uTMj1fJrTHDjNqdfMFlbjHdoHmG3TWIAK35/wzaVP+fTOnglKYV5GBA3BA gamUSo0gdSTRJ6hwDPoHOX3OFZWHWfh2AaxGU1/2Sz2YOZH30e18gOiIKlj0mND6 2MQzsRro8nkracmYZpE+3s1c6CgSPspY926Sjq5Lii4wd1uU54Aiy2L00f4O8szc oLf/rq6czTvOSrBiwVQ5JEoUrMIjyHrbdGRQfwDg/A2sKSzVE19nOszOndICn0vP w068V+j0uQOWcwf+MRAaZ45wq9kY5204uJXDS4Pm9uXPZa209Ul8ra1In1EG3DhJ Ann5Pl+yT6FP8dw29Q7gveCwGjBX1NqOhlj08wTbRAQbRqYODLOUNcNYNYA0RKSj N5hiD8nCyl4QfiX4vKRfqrwakYgN8Z1mQC2T9NPWXy2PvJzAdOrv+fcynC8s/of8 4wpqSCXRa+cUKLZus7SvEJrNRhtTDlT0NbwlAh4ksCGu1dSrZZWCCLB6ke7CF7k0 poiyePE6tTWOfZxNYQ+yYnHHIIcj3l+dqJxXxMOahxDyaF4XDo8UrmtsfVPYu3KS Z8yypyAYXWWu00Ibe/4y+Au+UsvnxMXhEp4PDwgAlAU/s1FMwC3sxjmRr8Z/NjjO q0f5dplfVl3qShAfiAzxtSQcKn5dX/NP5iPIYcJK9i2K8oXebvnHnEcu9ffd3T0p wGA2srBv/rCFcWM/TOHaFkFYUnvRDiZ4FnL2D+Wwlg8m5pQWECYApKxVKjL0EyTg pJaam40Jv7sV2lrpvXUgMaeWHhwiqgSC1J4wVS6Gq5ldG3Fl8KLWYlxXd1qZwR4x P0Ep8nBYd9+Pm60fCk0p5kvr+iPgelvlTnMsx7fvFqV7qNWEuKJApmb+n8yJX+h3 FSTiU/Haaqc8jIap+GGE9C20QvaK3NiqMdIc2oqLPStBKCn+TEUBDLABwHTNDLQc V2VybmVyIEtvY2ggPHdrQGcxMGNvZGUuY29tPohxBBMRCwAhAhsDBQkUsIqNAh4B AheABQsHCgkCBRUIAgoDBQJHeR6AAAoJEPKthaweQrNn+kQA33yabKyY9z1ujVox cLF7ROc0mSsX75srRXIjxTgA4NKwgnV1GN1QL6bKH4G7AFTgmJMQjWLywpguY3G0 Gldlcm5lciBLb2NoIDx3a0BnbnVwZy5vcmc+iHQEExELACQCGwMFCRSwio0CHgEC F4AFCwcKCQIFFQgCCgMFAkd5HpcCGQEACgkQ8q2FrB5Cs2eXYwDfUNqvI0xrFP47 l0+sBBD5j8Z9H9FygT4ZuVZOxwDePf9XYQuNja+MQUqZEtZbvilME5zf5wUMo3sV tLkBDQRH47TPAQgArMK+fv08+pw2sCF0DQtk717TSyHmcmn8e7ndGXEBxZWy/sQW oZrKKr5/gmkCH3O0p/sSZhijfCzTeElFO0ASFaSAvaXcQqhUnjEcI4ic3KLbI7fS qoqgvkJ8qwfIFovb8jMO/tBQgNmYAODTBlnLq5zJIvTvpqEAePBZdd90SGiC6vNA DZ04D5Pbl3ZdXNwakv1y+eLc4jnYPcAkqsf8U7/ClpGcaADPLC0Kp1lN6lYBXRV6 QXpEa0qh2JT4PGu7981hFVvKjBdvClbz6E8I3aSny8acUF6bBRV+/H9k2lW9xrD7 +E3obBXJ55CWOL4ynoS69ii2XyVQxyWz+a7ZlwARAQABiF8EGBELAA8FAkfjtM8C GwwFCQcajaEACgkQ8q2FrB5Cs2cuqQDfYDr3l9GbFNxAZSv/HSXKcZ5MJys5TLff QYPQXwDfRzV6imKyGJmI6tAaDVAgLDNld64LDP2wrcOezLkBogROsUyGEQQAlCMD C6m1nkcdAK3MV884airO5/akCJhT0CWjd6LxbM27SremsW7HSaUoOSNXSXpPgktd DcA7y6Y8cXteGm9+/ZHwNoXgYWnTpWjk50qLre0iCNLcpT1V0cMEev5B/2YXOiog /7obnI+tjG/y7V41bNzAceKehSFbSi5hyz7EAZMAoIbBb88QRdsh1RKmtHdVXsju vldpA/0cp/wmWwWEfWMGKvtCk5i6Ayl8T6YHRjtqZwnMFrNbjEssulkQ0XpDGRcA yO92utp12sl7h8DWl4OSEFh6rnFVJPrII8YQXahrAchB7Mtc5AzDFFmgJqvJdp8W EVnx+nLl9shaRifHUSdLwdt909p+1CFm8ChDl7+eZE7YbvEWGQP+JNA0DHFqNSxC Fzs667Cnic7op3BkaUN13zNuR1aVpepxUEhkk6LfiiHmQON7QHVAqvtq/TO0svyy 8nAeFhlWqcXX84tuoobmnsCowa137CXYV/SD7JVjy5X/b6cbs2sIty37eJLjoffn xQHvN+azf+JtxtTXhMTedhBQAgdlBGaIoQQYEQgACQUCTrgQCQIbAgBSCRDyrYWs HkKzZ0cgBBkRCAAGBQJOuBAJAAoJEE8FQNV3+V+VkpoAnA5MTmFbkcoM4N4OYwb3 YGMfoAD0AJ9j2e0iEo9fhMfcSoKG9xssLopUTOj0AODNadm6ajGAly1Ioam+eLSb qxHfSkQEHOxhMiFjAN9q4LuirSOu65uR1bnTmF+Z92++qMIuEkH4/LnNuQENBE64 FVgBCAChkCmMrdCKW/PWuBQs2/lcTqz3i33KOUCynyj1aOzen9HUJVHymJnN4dZT jq3ARlSTuCSoJmQwcmom0wjDS2L9qqCnUctdyIoFxTetnMP3JkBhJ4j5IxtwkTzn Wa0SgEjvBdNUkLTBG/3lgfMFoqlQNh1or07wsHS+LlvaxvFnqMozssKqYLC9mTVq WfXvTeRsCzYLvZ6jy4rqbJnDIJzHgqV3K6cyqA5NcZqoWj8OQNUbS+sVCU8nkYkD YQA7wm2nwolEfROSdFtSTmL49PNQS1V3MUdLUb7SfsDmwfm59SDmJUp4iw3F535P /ei+G5cBYzHO0jN0nzUH/sfM7njjABEBAAGIXwQYEQgADwUCTrgVWAIbDAUJBAqO RwAKCRDyrYWsHkKzZ6TKAN0WMNFzexmPvciaqa2LyUVUI/ht3suw/tlVSGDCAN9t CWF1UFBrQORgcrpgQBfNKPkUdAxxyiDrXfZ1mQENBE0ti4EBCACqGtKlX9jI/enh lBdy2cyQP6Q7JoyxtaG6/ckAKWHYrqFTQk3IUe8TuDrGT742XFncG9PoMBfJDUNl tIPgKFn8E9tYQqAOlpSA25bOb30cA2ADkrjgjvDAH8cZ+fkIayWtObTxwqLfPivj FxEM//IdShFFVQj+QHmXYBJggWyEIil8Bje7KRw6B5ucs4qSzp5VH4CqDr9PDnLD 8lBGHk0x8jpwh4V/yEODJKATY0Vj00793L8uqA35ZiyczUvvJSLYvf7STO943Gsw kxdAfqxXbYifiK2gjE/7SAmB+2jFxsonUDOB1BAY5s3FKqrkaxZr3BBjeuGGoCui SX/cXRIhABEBAAG0Fldlcm5lciBLb2NoIChkaXN0IHNpZymJAT4EEwECACgFAk0t i4ECGwMFCRDdnwIGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheAAAoJECSbOdJPJeO2 PlMIAJxPtFXf5yozPpFjRbSkSdjsk9eru05shKZOAKw3RUePTU80SRLPdg4AH+vk m1JMWFFpwvHlgfxqnE9rp13o7L/4UwNUwqH85zCwu7SHz9cX3d4UUwzcP6qQP4BQ EH9/xlpQS9eTK9b2RMyggqwd/J8mxjvoWzL8Klf/wl6jXHn/yP92xG9/YA86lNOL 1N3/PhlZzLuJ6bdD9WzsEp/+kh3UDfjkIrOcWkqwupB+d01R4bHPu9tvXy8Xut8S ok2zku2xVkEOsV2TXHbwuHO2AGC5pWDX6wgCE4F5XeCB/0ovao2/bk22w1TxzP6P Mxo6sLkmaF6D0frhM2bl4C/uSsq5AQ0ETS2LgQEIAKHwucgbaRj0V7Ht0FnM6Rmb qwZ7IFV2lR+YN1gkZaWRRCaJoPEZFKhhPEBX1bDVwr/iTPaPPEtpi7oQoHk65yeL rhtOmXXpNVkV/5WQjAJIrWn+JQ3z/ZejxHULhzKsGg5FC6pRYcEyzRXHtv4BO9kB IKNVirZjEkQG4BnIrQgl6e2YFa47GNMqcQH7nJdwG1cGQOZOIDQQM41gBzwoSrSt MA6DjHkukFegKfcSbSLArBtYNAwTwmW7RqOMEJwlo0+NYx2Yn75x66bYwdlsP0FL Ogez/O/IxoPRxXr0l4e+uj6dFHqvBi04dx6JsPmXEyeAyLiCWSh7Rwq8uIhBUBUA EQEAAYkBJQQYAQIADwUCTS2LgQIbIAUJEN2fAgAKCRAkmznSTyXjtrsSCACRNgfG kD0OqOiwYo1/+KyWnrQLusVvSYOw8hN66geU3BO8iQ0Koy+m0QKY1kWjaHwewpg8 ZebY4E2sHbNIC9Spyiyz29sAJ2invf4/4MepTgpxNiw4+XmykCkN1AfVhvMTQXMz RbO5ZwRtPpjsMr1j5vX1s6U3/RxSAItpAkCu1GGTTOH0r12Ochc/um+QGAyO6WUj /IiZ1MX7toXW0SCo8DSl8z5Q7KmJWF6TQLK1Lku4bIVG1Huwo1/0WHc2vCad5BxH jgoy8TsKLTmvYQZWtnjWvQGV2UOABYWcacutZXQQ2PPCIY7LlpuS/45CXWbT5Y+m xY3y7dbz4aF+8uyCiJwEEAECAAYFAk0tjQQACgkQU7Yg0BzgxjBGTwQAi5qzI6cJ slbyOl+TeDZVnLV0FmPuDg8dojvQrVDPxfemIjxZZoMLCVM8ly8AC2JPrIYfN040 C343saIc0tTtOwwmVMuy7G/Uex22CdWH/0HBMpG4gFuOuQmW9QQDjEdh1DgwU2gA WonX54ZlMybWss+2NCikRwMflVUupH57BauZAgsEPFTJeQEQAKCDq/E0+KCD0VDP XgKQ+1H90SrewKMrWvj7ajJ6hGej6mpnpntl+mGAD+rnCjB4UAY6DXsoPZZd6ChD mldsW8/7D2P3ObeDn1fNNFLNmBJx6VOJs+crLqDyvwYMBjohCtpHqnF7jb3v83Oe q9G8qlO3mDVc/kvKNUGwS/0cBgkTW/LLXSpJBG0TPdC6dTN8Qs0LiSJg0xk6eaBo V5bgA8giFYO2uvGpbc5+OnUrgMCGpydrKt+9hs62qHSzEnbjqS9VzcFz2kfrAPD/ K5vZ164+roFkEsEnCu27/bSoPSexn2Kz/mPRovUxm5WavvEpip56HLMnVZ2kkrna qeD2dq1h51L4Z58oMjDUmrumlA1Z9V25M0hMVMXQmzCCCNC4+opPxN3kYLLBBY3+ QYdunoR3JuJRdn71+nh56TRQHkz6ytLBuQXiFDSYGuqWxqiOLgK5eNzRz5nHUPSk Z+qoEKa8RXW0u6XdTyHRPNHiilQDyYsp6BCnlyOH90fPvNM8PFWBKvduUn0XEjVn r22H/6MmPerqOije5b/nLypAKvN1ILOz5MMRbC5xm0ki4iFNy3wAw9j8DK349/2N d8j7FJCDPevsS7mj6sS7Tb9y2Fo5zhvcpgO02SMsqzOCJ7G3UFg6rTpH5jKHaqCy D1rPOR+52++nCEKknsQ7Fx1o/dvHAAYptCVEYXZpZCBNLiBTaGF3IDxkc2hhd0Bq YWJiZXJ3b2NreS5jb20+iQI5BBMBAgAjAhsDAh4BAheABQJPDEnABgsJCAcDAgYV CgkICwIFFgIDAQAACgkQ22mNcZkkJWBi3Q//beukI1Sq42RbUPYFwk5p9o+tj2J4 kS8Z5ZRJNBNy0qrkXTCKChfA5kCYGDb8jsU9qivN/jpma2RerZ77Az8NBap1WRLR 4EhjXR6x/2F/r4I3++9tNkG89SGR7IJlVMQsIEwtN0wsY0C2N646i+1Lc4f6qVLu 158/v6mUzFPR4EP6jLB+yDqKMbZJqfhicW2jXyiflrk6OGGC5WbKfVKqOG1FyYB+ 2NlmtG8sSdD9hE9uADS8VGdp9hoaEv1LxL8miugx9y2cDbzvwYyFGWOb6kITRaz6 wroWaUq9xMZYY5PG48vedXRx5dcSCORcTeM7raJmwVfvL1q+YqDgJGiQgKVsEoaM OQOLIXuXyvmbUDtY6pepxIDcnLVZCtXTHY3LVdGwnTQMxKXmgJygRJ1PFegJJLgt SHBK9haaPzad6iXc98ZL2wZ39thl10LzAyzbVHvQJfnu3lDOOawSBZOK4DZeFeVi UpF7cpADw3llk8lYtXMsNFq10KDIzFSu4eKBO0fkajlss7ZrJN1YlxWcHbIrpINW 3TNEny0d4cFypshQj2cl6+c9yfVBCNM5M5mm7YMu7f9voJ+tAq/LnfqqQEZJv49b Iu+0aVRtGElefd27b7tRE/6weFpxoyBk2OTkU+RrjBr/rdp7O0nhWbJAA//l8PP6 ++aYNnS9/vfdjE+5AQ0ETwxJ3QEIAMVOEC6RP/3MNhri2/v5PwG8SaLM2ZUxpnX+ TtRMocqcdPo2zlOYgRCSYn/CYS01BKwt86o5smDTQ9R8Nm2pvSgcQeyZSVSsnEEW J84oTQMCnNllMpGytxT1XcpPVZUj0ttBzpc/3QvzWhMz//bKG5F3lUYtDgpoMQDt 4IPMnlNsNJyrIOxuYB7aGuZKDfL3hf6DR6ClrFrHJDOOULXOTuiAb9TmvCc2oIrp xMN8g41HtjSHstWumMj7+0NuFaQthQBpj9ZWA6X6dgB84ea9Wd7enlKvTkqtKdB6 de6P5QUy1HWt/7mTDOZfvTVsaoibqQHjgMG2OJ/R/wdChDML0GUAEQEAAYkDRAQY AQIADwUCTwxJ3QIbAgUJCYPP8wEpCRDbaY1xmSQlYMBdIAQZAQIABgUCTwxJ3QAK CRD+p4p6obxPpHxhB/9sNDyAsCSX6s1QPAecgJDGxhdIrE3Z5Bx+O+DVG1cGlBIh 3UpojPmxxyqF8koTqsAInLK2D8CeEqg8IB/IjI/LhiQf/Mby57gB46jeThfecdcy hh97kHPhXj9Gea2u82YXIYYlVjD9VbsKggoSLFmda6YgPFd6KMbkwaIFgCNDK4GF VITq7HdHHDJCS5Iec/KnhnQNMHkFdQcycUwaiNSuvIK54LLex2MAL/RoLpYNEmwx ApyWlaghrJe6aRh44FHboBT9lAd7pJ1P2CXEdirrG+WM+DVE7dluJF0bTQ94WtpR yMyCQSv07qBZVUtU/oUe2curJymo3Pv+zxcevmVkTAEQAIKfiBMRDuXfLaGPDBW3 2OgOReVu4MysBKJSrvh+x1xD0BO/z/1bZFKMYf71ayf7sBq58o+rMjPUH9ulzTPL 8U4F3oA2DtP/YSmJixPqB29MqifIZHrhLZwbEjYyysanohZU5YfwenMKdCnjFuCf GbAoSkUAkyqioXHkHUmBf/qt/v73JNHu7QQOMmJ88PT7f+EYNykcTkd8tANojiZH /Vaem/NqfEPFqem6MwEjzyJDwNff1NUeeQLnT+LeAOeC2cWUZel5VbbUzxIWYFTf ijplP1QanihFY3D0Yu2weJzpWbKfyTKPJMVOwQS1RwDFZxnPxlXJxvaIOeWQjMHE KsYP+LZymH/JG5FMc6UX9duaFZ9fCmivT6OXc2XlWbTLaK5Ux/uneXg/pA5ZcTG7 5RFjya/pvXzioeFCieNrecn2M13aEZkuAPcdMlrwAVzX9WaMKi6BUBtcIIEVoohZ Hzq+SzO2bR10H4tfU1T6+PewAcZ9dYGc8sSgGrbiBiW4DbdkP5oR3BUDO1EJYcHh sFY7+nn+384XXXBd9BZQKvHHkeot38T9PFTB8tk1ClfnUD9CUTl/4zPTwbe2NQNa SwLJJ7yR3/4V3jTY3ogZSqu1+GTPschRBwD5JSm8y7eBbjzbRXqLmTEO3hjZSrE1 w1iBJFuC3n+ouAqeAvRr/aazuQENBE8MSi8BCACvl2RV6ve1i8nr++fKneCgMLTh 5nxKSBaqiYpT2dlGwpAdyBU46aij9hH/b6oYAB0CxxrgMxNaBOpGVxUENFQ1qK6b fW1KInduYFJVqh4J6pAByz8Pu2BOdk0POarB3JDH51kE+QYZeyt+jgbO4+UYmorP QGiexeMjrKhJNQLjnHzLlYNptwCgaSatubDrk6+p7x5dHPRTk1cqjYA1IJ+wgK7i XO/TOo2dDYmYZ6T2n9Pr0q5IksWYjM+sfpnsaH+Y4KQ1TfXBlxvKU+gAZTi0PFZE 4lQKEvp3lSxklxBVcvVDJyfSGQ0C9FeqU/sgLDrfKljVxck1dFKeIWsgYbG7ABEB AAGJAiUEGAECAA8FAk8MSi8CGwwFCQmDz6EACgkQ22mNcZkkJWAlZw//duQCqkLq I83OH+vy5z/52d+9Ca2u3tANvudrT5z9XyRWtuVevhRmYy8ClnnmEoCb66yGZ13R tnBjxDf21fz6daNSc4lbSrpOySjCkdKP86wUipuCX+uFzsVdivb2PtvZ3C383RCe A7Ys1jNMF54jfwlCKaIPiNwIUggWOXiGFCs0UB0mlp12DcDZh9/lWEAGrSt3Q1Jg cHjUGbNbmrJD7NIsBZqjRp3i0WgSd4oDY3svpGOL0Ixz0Zsitqz5XRSJxgBqb8VK ytF8W53YHrW4IfQFbn93CbxG40PcmWoU/s3qxFfdC9DrK/sGejWTlg37luVPPlWz 9i9lC5kAf12M9veUKESC+uyCf1wEoK9mLMVPl3l8v2X5BzVT3CxberXV5IHIXoa5 sATkor+O2S/TVKdo16IOqhSaK3JDH4ETH4s08bX0C/XYVKrRXCT1xPCQid27fcvz C6Dj8Q41Z+cjFQbrzXWkNCJ/OD/qkPmmtKH51EUBiToR2Q67ubUtioV9+dwtAclr wSvSHcfKqRPLGGeqhZaR0cENfjEBfp+sG42QmzD1KIPFyPaWJpEjsWcqIRxcm8MI 69iI2NSR6dbXTgHHcf1HHZFL1/TJNmT52GqDal3MG8iSDnn8gYd+S3hCSmsO4wHh K/UIN6X2/CAeQoHDpRcWLPhqVIHekxZNmOM= =zGxu -----END PGP PUBLIC KEY BLOCK----- gnupg-1.4.20/doc/ChangeLog-20110000644000175000017500000010455012635262326012553 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-02-23 Werner Koch * gpg-zip.1: Update by taking a built copy from master. 2010-10-05 Werner Koch * FAQ: Make it a static file with a pointer to the online location. * Makefile.am (EXTRA_DIST): Remove faq.raw and faq.html. (FAQ, faq.html): Remove these targets 2010-02-11 Werner Koch * faq.raw: Fixed the bug reporting address. 2010-01-29 Werner Koch * gnupg1.texi: Fix dir entry. Fixes bug#1183. 2009-09-02 Werner Koch * gpgv.texi, gpg.texi: Update from GnuPG-2. 2009-08-18 Werner Koch * Makefile.am (sources_from_trunk): New. (update-source-from-gnupg-2): New. Run it. Fixes bug#917 2009-08-13 Werner Koch * gpgv.texi, gpg.texi: Update from GnuPG-2. 2008-04-30 David Shaw * gpg-zip.1: Add man page thanks to Colin Tuckley and Daniel Leidert. 2008-04-02 Werner Koch * opt-homedir.texi: Remove special case for Registry key. * yat2m.c (proc_texi_cmd): Use the \(aq glyph for @samp. This is bug#898. (proc_texi_buffer): Handle backslashs correctly. 2007-12-21 Werner Koch * README.W32: Tell that Vista is supported and that at least NT-4 is required. It might still work on older systems, but I don't know for sure. 2007-12-12 Werner Koch * gpg.texi, specify-user-id.texi: Update from gnupg-2. * yat2m.c: Update from gnupg-2. 2007-10-27 David Shaw * gpg.texi: Update from gnupg-2. 2007-10-23 Werner Koch * gpg.texi: Updated from gnupg-2. * gpl.texi: Replace by GPLv3 version. * Makefile.am: Use standard suffix rules. 2006-12-04 Werner Koch * yat2m.c: New. * Makefile.am: New rules to build yatm and the man pages. 2006-06-22 David Shaw * gpg.sgml: Document --enable-dsa2, --disable-dsa2, and --default-keyserver-url. * DETAILS: Note "Keyserver:" * gpg.sgml: Note that --pgp8 does not include SHA224. Clarify that clearsigned messages are not reversible. 2006-05-23 David Shaw * mksamplekeys: Incorporate new package signature key and minimize keys when generating samplekeys.asc. 2006-05-17 Werner Koch * samplekeys.asc: Added new package signature key and cleaned all keys to save space. 2006-04-18 David Shaw * gpg.sgml: Reminders that --cipher-algo, --digest-algo, and --compress-algo should be avoided. 2006-04-11 Michael Roth (wk) * gpg.sgml (passphrase-fd): Explain that only the first line is used. 2006-04-09 David Shaw * gpg.sgml: Some typo fixes. This is Debian 361324. 2006-03-11 David Shaw * samplekeys.asc: Update 99242560 to have a signing subkey backsig. 2006-03-09 David Shaw * gpg.sgml: Clarify new notation delete feature. 2006-03-08 David Shaw * gpg.sgml: Document "notation". 2006-03-07 David Shaw * gpg.sgml: Rename backsigs to cross-certification (backsigs is just shorthand). Document max-cert-size. * gpg.sgml: Document new way of enabling the PKA functions. Some minor other cleanups. 2006-03-06 David Shaw * gpg.sgml: Document --auto-key-locate. 2006-02-24 David Shaw * gpg.sgml: Document new --keyserver syntax. 2005-12-20 Werner Koch * gpg.sgml (trust-model): Document "auto" and the "pka" variants. (keyserver-options): Document "auto-pka-retrieve". (allow-pka-lookup): Document. 2005-12-08 David Shaw * gpg.sgml: Document --fetch-keys. 2005-12-07 David Shaw * gpg.sgml: Document -d. Add [file] to a few options. 2005-11-17 David Shaw * gpg.sgml: Clarify "xxxxx-clean" and "clean". Document "xxxxx-minimal", and "minimize". 2005-11-02 David Shaw * gpg.sgml: Clarify what is and isn't included in a "clean sigs". 2005-10-27 David Shaw * gpg.sgml: Document backsign, --require-backsigs, and --no-require-backsigs. * DETAILS: Clarify Key-Usage. 2005-10-07 Werner Koch * gpgv.sgml: Small spelling corrections by Mike Dowling. 2005-09-21 David Shaw * gpg.sgml: Note that --display-charset is just for display and doesn't recode data. Note that --search-keys can use the standard search syntax now (<, =, *, @). Document the @-address mode. 2005-08-23 David Shaw * gpg.sgml: Fix documentation for setpref/updpref, document import-clean, --status-file, --logger-file, --attribute-file, --passphrase-file, --passphrase, and --command-file. Comment out the "+word match" selection syntax since it isn't supported. 2005-07-22 Werner Koch * gpg.sgml: Removed entry for --no-interactive-selection. 2005-07-19 Werner Koch * gpg.sgml: Document --limit-card-insert-tries. 2005-07-18 David Shaw * samplekeys.asc: Update 99242560. * gpg.sgml: Clarify --throw-keyid and --hidden-recipient a bit. 2005-06-20 David Shaw * gpg.sgml: Document --edit-key/clean, import-clean, and export-clean. 2005-06-20 Werner Koch * gpg.sgml: Document smartcard related options. 2005-06-06 Werner Koch * DETAILS: New subcode 5 for CARDCTRL. 2005-05-13 David Shaw * gpg.sgml: Document --default-sig-expire and --default-cert-expire, remove --sk-comments and --no-sk-comments, and clarify the form of a non-IETF notation for --sig-notation and --cert-notation. 2005-05-05 David Shaw * gpg.sgml: Clarify --min-cert-level a bit. 2005-03-14 Werner Koch * gnupg-w32.reg: Removed. 2005-03-07 Werner Koch * gpg.sgml (comment): Add note to keep the comment short. * DETAILS: Document new status codes. 2005-02-15 Werner Koch * faq.raw: Add htmlcharset header line as suggested by Maxim Britov. s/ElGamal/Elgamal/. Replaced reference to NAI by PGP Corp. * gpg.ru.sgml: Updated from upstream. Added a closing PARA. * gpg.sgml: Add bkuptocard command for --edit-key. 2005-02-05 David Shaw * gpg.sgml: Note that level 0 signatures are always accepted regardless of --min-cert-level. 2005-02-03 Werner Koch * README.W32: Updated to match the switch to the NSIS installer. 2005-01-27 Werner Koch * faq.raw: Updated to the version from 1.2.7. 2005-01-18 Werner Koch * gnupg-w32.reg: Remove the entry for the home directory. 2004-12-16 Werner Koch * TRANSLATE: Add a note on how to send translations. 2004-12-16 David Shaw * gpg.sgml: Document --require-secmem/--no-require-secmem. Note that the sign flags (l, t, nr) can be mixed. Remove --nrsign-key. 2004-12-12 Werner Koch * samplekeys.asc, mksamplekeys (keys): Removed my old 621CC013 key which expires at the end of this year. Add g10 Code's source code signing key 37D92FFB. 2004-12-09 David Shaw * highlights-1.4.txt: New. * mksamplekeys, samplekeys.asc: Add the PGP global directory key. 2004-11-26 David Shaw * gpg.sgml: Document export-minimal. 2004-10-28 David Shaw * DETAILS: Document SIG_SUBPACKET status tag. 2004-10-28 Werner Koch * Makefile.am (EXTRA_DIST): Add gpg.ru.1. 2004-10-18 David Shaw * gpg.sgml: Minor language tweaks. * samplekeys.asc: Updated 99242560. * DETAILS: spk flags are hex. 2004-10-15 Werner Koch * DETAILS: Document IMPORT_CHECK. 2004-10-14 David Shaw * gpg.sgml: Document using "none" to remove preferred keyservers, the keyserver timeout parameter, and the direct trust model. 2004-09-23 Werner Koch * gpg.sgml: Document "addcardkey" and "keytocard". 2004-09-20 Werner Koch * gpg.sgml: Document -K. 2004-09-16 David Shaw * DETAILS: Document the 'spk' signature subpacket record. Add more detail on "tru" records. * gpg.sgml: Note that PGP scales photo IDs to fit in the dialog box. Document show-sig-subpackets. Document the '%c' signature counter expando. 2004-09-15 Werner Koch * gpg.sgml: Document "--debug-ccid-driver". 2004-09-14 David Shaw * gpg.sgml: Note that --throw-keyid is --throw-keyids. Note changes in --pgp8. Rephrase the "don't play algorithm games" warning now that PGP has blowfish, zlib, and bzip2. 2004-08-07 David Shaw * gpg.sgml: Remove show-long-keyids since it is replaced by --keyid-format. Rename show-validity as show-uid-validity. --ask-cert-level defaults to no. 2004-06-28 David Shaw * DETAILS: Document PLAINTEXT and PLAINTEXT_LENGTH. * gpg.sgml: Clarify that --min-cert-level disregards level 1 certs by default. Clarify include-revoked a bit to note that keyservers might not be accurate. Note that --charset is --display-charset. Some language tweaks for --simple-sk-checksum (Debian 251795). Note the PGP silliness with preferred keyserver subpackets causing PGP/MIME. 2004-05-21 David Shaw * gpg.sgml: Document --edit-key "keyserver" command, --keyid-format, --keyserver-option honor-keyserver-url, and --list and --verify option show-std/user-notations. 2004-05-19 David Shaw * gpg.sgml: Clarify that --charset applies to informational strings and does not recode messages themselves. Remove include-non-rfc export-option. 2004-05-08 David Shaw * DETAILS, credits-1.0, credits-1.2: ElGamal -> Elgamal. * gpg.sgml: Document --no-use-embedded-filename and --min-cert-level. * gpgv.sgml: Removed leftover . 2004-05-03 Werner Koch * gpgv.sgml: Removed reference to non-available option --no-default-keyring. 2004-04-09 David Shaw * gpg.sgml: Document delsig. Clarify that --refresh-keys arguments are optional. Document --bzip2-decompress-lowmem. 2004-04-05 Werner Koch * DETAILS (NEWSIG): Documented. 2004-02-25 David Shaw * gpg.sgml: Document --ask-cert-level, --max-output, and --default-cert-level. * gpg.sgml: Document keyserver-option http-proxy, import-option merge-only, remove old honor-http-proxy, --merge-only, and --emulate-md-encode-bug. Document COLUMNS and LINES. 2004-02-12 David Shaw * gnupg.7: Clarify that 'gpgv' doesn't encrypt, and that's not a bug. * samplekeys.asc: Update 99242560. * gpg.sgml: Clarify -u/--local-user and --default-key. Note what happens if you run 'gpg' without any commands. Document --multifile. Document list-option show-unusable-subkeys. 2004-01-30 David Shaw * DETAILS: Details for --list-config. * gpg.sgml: Document --ungroup and --list-config. 2004-01-07 David Shaw * gpg.sgml: Fix a few minor typos. Clarify what --textmode is useful for. * gpg.sgml: List proper documentation URL. Note that addrevoker takes an optional "sensitive" argument. Remind that $GNUPGHOME can be used instead of --homedir. Clarify --no-default-keyring, and note why it may not take effect if there are no other keyrings present. Remove --pgp2 from the list of --pgpXes that are just for bad preference lists. Explain more why locking memory pages is good. * gpg.sgml: Add an example of what an exclamation mark is, as people seem to miss it often. 2003-12-08 David Shaw * gpg.sgml: Fix a few missing semicolons in & entities. Noted by Christian Biere. Some minor grammar fixes. Remove the "host -l pgp.net | grep wwwkeys" advice since the nameserver no longer all allow zone transfers. Replace it with a mention of hkp://subkeys.pgp.net. Note that BZIP2 defaults to compression level 6. 2003-10-31 Werner Koch * DETAILS: Add a note about the date format for X.509. 2003-11-21 David Shaw * gpg.sgml: Note the new combinations with --symmetric and --encrypt. Document --bzip2-compress-level, and --bzip2-compress-lowmem. Clarify the plurarility (or not) of various list and verify options. Document BZIP2 in the --compress-algo section. Warn about compatibility issues with ZLIB and BZIP2. 2003-11-20 David Shaw * gpg.sgml: Document --compress-level. Some minor tweaks to other entries. * TRANSLATE: New, note to translators about the yes|yes multiple match syntax. * Makefile.am: Include TRANSLATE in distributed files. 2003-10-28 Werner Koch * DETAILS: Add the 'a' value for field 12 and the new field 15. 2003-10-01 David Shaw * samplekeys.asc: Update 99242560. * gpg.sgml: Document --no-groups. 2003-09-30 David Shaw * gpg.sgml: Note web bug like behavior of auto-key-retrieve. Note that big photos mean big keys. Document --rfc2440. Document verify-option show-unusable-uids. * gpg.sgml: Clarify --mangle-dos-filenames, document list-option show-unusable-uids, remove --no-comment (which is now --no-sk-comments), add --no-comments (to remove --comment), remove --default-comment, and document --sig-keyserver-url. 2003-09-01 David Shaw * DETAILS: Note fingerprint of signing key in sig records. 2003-08-31 David Shaw * gpg.sgml: Use "keyserver-url" instead of "preferred-keyserver" for the sake of short and simple commands. 2003-08-29 David Shaw * gpg.sgml: Document list-options (show-preferred-keyserver, show-validity, show-long-keyid, and show-sig-expire), and verify-options (show-preferred-keyserver, show-validity, show-long-keyid). 2003-08-28 David Shaw * samplekeys.asc: Updated. * DETAILS: Document "tru" trust record. Document REVKEYSIG status tag. Removed paragraph on gdbm usage. Note that pipemode is deprecated. 2003-08-25 David Shaw * gpg.sgml: Document --list-options (show-photos, show-policy-url, show-notation, show-keyring) and --verify-options (show-photos, show-policy-url, show-notation). Deprecate --show-photos, --show-policy-url, --show-notation, and --show-keyring. 2003-07-10 David Shaw * DETAILS: Document the --attribute-fd data. * gpg.sgml: Document --set-notation. Explain why it is not possible to disable permission warnings in the gpg.conf file about the homedir. Add pointer in --ignore-time-conflict to see --ignore-valid from, and vice versa. Warning not to try and parse --list-keys in scripts. Document the signature flags (1-3/L/R/P/N/X/T), Document expandos %g and %p. Note the default --personal-digest-preferences are SHA-1. 2003-05-26 David Shaw * gpg.sgml, gpgv.sgml: Small SGML fixes. (From wk on stable branch) * gnupg-w32.reg: Use HLM for the program and make sure the entries are created. Suggested by danielc@analysisandsolutions.com. (From wk on stable branch) 2003-05-24 David Shaw * gpg.sgml: Document --trustdb-name. Document --gnupg in a new compliance section, and remove the various --no-PGPX options. Deprecate --no-comment in favor of --no-sk-comments. 2003-05-04 David Shaw * gpg.sgml: Some general language tweaks. Note default algo for --symmetric. --export-ownertrust takes no args. Document --no-escape-from-lines. Fix escaped "From". Make "openpgp" trust model into "pgp". 2003-04-27 David Shaw * DETAILS (VALIDSIG): Add version, pk algo, digest algo, sig class, and a reserved field for flags in a future version. * gpg.sgml: Document --no-textmode and --no-use-agent. Clarify the interoperability section. Clarify that "hkp corruption" (repair-hkp-subkey-bug) is really "pks corruption" (repair-pks-subkey-bug). 2003-04-15 Werner Koch * gpg.sgml: Document --enable-progress-filter. 2003-04-07 David Shaw * DETAILS: Don't specify which hash is used to make up the namehash since it may change in the future. * samplekeys.asc: Updated. * gpg.sgml: Document "revuid". Clarify that --openpgp resets --pgpX. Some cleanup of --no-xxx options, make sure that all SGML tags are closed, clarify --pgp8 allows SHA-256, and document --no-emit-version. * Makefile.am: Allow CVS version to build without faqprog.pl. 2003-04-01 Werner Koch * DETAILS (VALIDSIG): Add primary keys fingerprint. 2003-01-27 David Shaw * DETAILS: Document trust depth, value, and regexp. 2003-01-14 David Shaw * gpg.sgml: Minor language tweaks, spell check, copyright date, etc. * DETAILS: Note that user IDs/UATs fill in creation and expiration date. Document namehash. 2003-01-06 David Shaw * DETAILS: Document disabled flag in capabilities field. 2002-12-27 David Shaw * gpg.sgml: Clarify --no-permission-warning to note that the permission warnings are not intended to be the be-all and end-all in security checks. Add note to --group that when used on the command line, it may be necessary to quote the argument so it is not treated as multiple arguments. Noted by Stefan Bellon. 2002-12-23 Werner Koch * samplekeys.asc: Updated. 2002-12-10 David Shaw * gpg.sgml: Clarify include-revoked and include-disabled so they match what the program actually does. Noted by Dick Gevers. * gpg.sgml: Document %-expandos for policy URLs and notations. * gpg.sgml: Document --pgp8. Clarify that --pgp6 and --pgp7 disable --throw-keyid. 2002-12-05 Werner Koch * gpg.sgml: Document --no-mangle-dos-filenames. 2002-12-01 David Shaw * gpg.sgml: Point out that if the user absolutely must, it's better to use --pgpX than forcing an algorithm manually. Better still not to use anything, of course. 2002-11-25 David Shaw * gpg.sgml: Document --primary-keyring. Clarify --s2k-cipher-algo, --s2k-digest-algo, --personal-cipher-preferences, --personal-digest-preferences, and --personal-compress-preferences. * gpg.sgml: Document --sig-policy-url, --cert-policy-url, --sig-notation, --cert-notation. Clarify --show-notation and --show-policy-url that policy URLs and notations can be used in data signatures as well. Add note about '@' being a required character in notation names. 2002-11-21 David Shaw * gpg.sgml: Add an interoperability section. 2002-11-17 David Shaw * gpg.sgml: Correct defaults for --s2k-mode and --s2k-digest-mode. Noted by Haakon Riiser. 2002-11-14 David Shaw * gpg.sgml: --compress-algo now allows algorithm names. 2002-11-13 David Shaw * gpg.sgml: Document --trust-model. 2002-11-04 David Shaw * KEYSERVER: New. Documents the --with-colons format for keyserver listings. * DETAILS: Clarify meaning of 'u'. Noted by Timo. 2002-11-03 David Shaw * gpg.sgml: Document "tsign", clarify "setpref", clarify --recipient, document --hidden-recipient, document --hidden-encrypt-to, clarify --no-encrypt-to, clarify --throw-keyid, document --no-throw-keyid. 2002-10-25 Werner Koch * README.W32: Add blurb on how to create a ZIP file, changed requirement for mingw32 to 0.3.2. 2002-10-24 David Shaw * gpg.sgml: Document --refresh-keys. 2002-10-19 David Shaw * gpg.sgml: Clarify --force-mdc, and document --disable-mdc. 2002-10-12 Werner Koch * DETAILS (KEY_CREATED): Enhanced by fingerprint. 2002-10-03 David Shaw * gpg.sgml: Note that '#' means secret-key-unavailable, and that keyserver schemes are case-insensitive. 2002-09-30 David Shaw * gpg.sgml: Note that --pgp2 disables --textmode when encrypting. 2002-09-20 David Shaw * gpg.sgml: Some minor language cleanup. 2002-09-20 Werner Koch * DETAILS: s/XORed/ORed/. 2002-09-15 Werner Koch * gpg.sgml: Add rebuild-keydb-caches. 2002-09-12 David Shaw * DETAILS: Fix batch key generation example. 2002-09-11 Werner Koch * Makefile.am (EXTRA_DIST): Include gnupg-32.reg 2002-09-02 Werner Koch * gpg.sgml: Updated the charset option. * DETAILS: Added status IMPORT_OK. * gnupg.7: New mini man page. 2002-08-30 David Shaw * gpg.sgml: Document keyserver-option include-subkeys. Note that honor-http-proxy is a keyserver-option now. * DETAILS: Add "Key not trusted" to INV_RECP status code. 2002-08-23 Werner Koch * faq.raw: Updated. New Maintainer is David D. Scribner. 2002-08-22 David Shaw * gpg.sgml: Clarify meaning of keyserver option include-revoked. 2002-08-21 Werner Koch * DETAILS: Added IMPORT_PROBLEM. 2002-08-20 David Shaw * DETAILS: Clarify that trust letters 'q' and '-' can be treated identically. * gpg.sgml: Document --ignore-mdc-error. 2002-08-06 David Shaw * gpg.sgml: Clarify that only long-form options can go in the config file. 2002-08-06 Werner Koch * gpg.sgml: Fixed doc regarding the name change of the option file. 2002-07-30 David Shaw * gpg.sgml: Clarify --edit/addrevoker (sensitive), and --keyserver-options (--import/export-options may be used as well). Document --import-options and --export-options with their various options. --show-photos now works during signature verification as well. Document --exec-path. Note in --simple-sk-checksum that the passphrase must be changed for this to take effect. Note that --pgp7 does not disable MDC. Document --no-mdc-warning. 2002-07-25 Werner Koch * gpg.sgml: Document new --delete behaviour. 2002-07-25 David Shaw * gpg.sgml: Clarify the differences between "pref" and "showpref". Note in "setpref" that a list of available algorithms can be printed with "gpg -v --version". Note in "updpref" that we don't select keys via attribute uids, so preferences there will be ignored. 2002-07-01 David Shaw * gpg.sgml: Clarify "group". 2002-07-01 Werner Koch * Makefile.am: Due to problems with VPATH builds we don't try to build the texi vesions of the manual pages anymore automatically. 2002-06-30 Werner Koch * README.W32: Adjusted some descriptions. Fixed the regsitry entry descriptions. 2002-06-21 David Shaw * DETAILS: Document "uat". * gpg.sgml: Document --personal-{compress|digest|compress}-preferences, --group, and add comments to --expert. 2002-06-17 Werner Koch * gpg.sgml: Grammar fix. 2002-06-03 David Shaw * DETAILS: Details of ATTRIBUTE. * gpg.sgml: Document --attribute-fd 2002-06-03 Timo Schulz * DETAILS: Add ATTRIBUTE. 2002-05-31 David Shaw * gpg.sgml: Add "edit/addrevoker". Document --desig-revoke. Note that -z and --compress are the same option. Note that --digest-algo can no longer violate OpenPGP with a non-160 bit hash with DSA. Document --cert-digest-algo with suitable warnings not to use it. Note the default s2k-cipher-algo is now CAST5. Note that --force-v3-sigs overrides --ask-sig-expire. Revise --expert documentation, as it is now definitely legal to have more than one photo ID on a key. --preference-list is now --default-preference-list with the new meaning. Document --personal-preference-list. * DETAILS: Document "Revoker" for batch key generation. 2002-05-22 Werner Koch * gpg.sgml: sgml syntax fix. 2002-05-12 Werner Koch * gpg.sgml: Fixed URL in the description section. * faq.raw: Minor typo fixes noted by kromJx@myrealbox.com. 2002-05-11 Werner Koch * gpg.sgml: Typo fix. 2002-05-07 David Shaw * gpg.sgml: Add entries for --sk-comments, --no-sk-comments, --pgp7, and --no-pgp7. Fix --pgp2 and --pgp6: the proper name is --escape-from-lines and not --escape-from. 2002-04-30 Timo Schulz * gpg.sgml: Add an entry for --encrypt-files and --decrypt-files. 2002-04-29 David Shaw * gpg.sgml: Fix minor error in --pgp6 documentation: it does not imply --digest-algo MD5 2002-04-29 Werner Koch * samplekeys.asc: Added gnupg distribution key 57548DCD. * faq.raw: Inserted Douglas Calvert as new maintainer. Acknowledge Nils. Add entry about trust packet parsing problems. 2002-04-24 David Shaw * gpg.sgml: Add some documentation for --edit/{addphoto|showphoto|nrsign|nrlsign}, and the difference between %t and %T in photo viewer command lines. 2002-04-23 Stefan Bellon * gpg.sgml: Moved options from section "COMMANDS" to section "OPTIONS". 2002-04-20 David Shaw * samplekeys.asc: Added 0x5B0358A2 2002-04-19 David Shaw * gpg.sgml: Add "%t" flag for photo IDs, a note about primary having different meanings for photo and regular IDs, rename --default-check-level to --default-cert-check-level, add --auto-check-trustdb, and --pgp6. * DETAILS: Add EXPSIG, EXPKEYSIG, and KEYEXPIRED. Add notes to SIGEXPIRED (deprecated), and VALIDSIG (added expiration date). Add "Preferences" command to unattended key generation instructions. Also fixed a few typos. * samplekeys.asc: new (added to EXTRA_DIST in Makefile.am as well) 2002-01-31 Marcus Brinkmann * DETAILS: Fix a spelling error, correct IMPORTED_RES to IMPORT_RES, correct INV_RECP (the second occurence) to NO_RECP. 2002-04-03 David Shaw * gpg.sgml: auto-key-retrieve is a keyserver-option (noted by Roger Sondermann). 2002-03-27 David Shaw * gpg.sgml: --pgp2 also means --disable-mdc, --no-ask-sig-expire, and --no-ask-cert-expire. It does not mean --no-force-v3-sigs (noted by Timo). 2002-03-27 David Shaw * gpg.sgml: Add a few notes about --pgp2 meaning MIT PGP 2.6.2, and keyserver details about HKP and NAI HKP. 2002-03-18 David Shaw * gpg.sgml: Change meaning of --allow-non-selfsigned-uid to match change in code, and add --no-allow-non-selfsigned-uid. 2002-03-13 Werner Koch * faq.raw: Due to a lack of time Nils can't serve anymore as a maintainer. Removed his address and setup a generic address. 2002-03-06 Werner Koch * gpg.sgml: Add an entry for --export-ownertrust. Suggested by Bernhard Reiter. 2002-01-26 Timo Schulz * gnupg-w32.reg: New. Registry file for W32 in registry format. 2002-01-26 Werner Koch * gpg.sgml: A few words about --gpg-agent-info and GPG_AGENT_INFO. 2002-01-25 Timo Schulz * README.W32: Modify the filename because now the .exe extension is automatically added to the binary. 2002-01-14 Werner Koch * gpg.sgml: Talk about PGP 5 and higher. 2002-01-11 David Shaw * gpg.sgml: Added documentation for --{no-}ask-cert-expire, --{no-}ask-sig-expire, and revise --expert (it doesn't switch on the expiration prompt anymore) and --default-check-level (to be clearer as to what makes a good key check before signing). 2002-01-07 Werner Koch * DETAILS: Removed the comment that unattended key generation is experimental. It is now a standard feature. 2001-12-22 David Shaw * gpg.sgml: Fixed a few typos. * gpg.sgml: Added documentation for --show-photos, --no-show-photos, --photo-viewer, --nrsign-key, --default-check-level, --search-keys, --keyserver-options, --show-notation, --no-show-notation, --show-policy-url, --no-show-policy-url, --for-your-eyes-only, --no-for-your-eyes-only, --pgp2, --no-pgp2, --no-permission-warning, --expert, --no-expert. 2001-10-31 Werner Koch * gpg.sgml: Add a remark on how to get the long key ID. Suggested by Sebastian Klemke. 2001-10-23 Werner Koch * gpg.sgml: Add missing tag. 2001-09-28 Werner Koch * gpg.sgml: Add a note on option parsing. 2001-09-24 Werner Koch * gpg.sgml: Described --{update,check}-trustdb. 2001-09-03 Werner Koch * gpg.sgml, gpgv.sgml: Removed GDBM stuff. 2001-08-29 Werner Koch * faq.raw: Described how to delete a secret key w/o a public key and changed the entry on updating the preferences. 2001-08-08 Werner Koch * gpg.sgml: Documented --print-mds and marked the --print-md * as deprecated because it does not work in the W32 version. Suggested by John Kane. (WARNINGS): Typo fix. (--with-colons): Clarified that the output is in UTF-8. 2001-08-01 Werner Koch * gpg.sgml: Added --ignore-valid-from 2001-04-20 Werner Koch * faq.raw (Maintained-by): Removed note that load-extension is not available under Windoze. * gpg.sgml: Add new --charset UTF-8. 2001-04-19 Werner Koch * faq.raw: Add a note about dates displayed as ????-??-??. 2001-04-17 Werner Koch * Makefile.am (%.texi): Add rules to create .texi from .sgml. However we can't automate this because automake does not like .texi files as BUILT_SOURCES. (%.dvi,%.ps): Removed these rules, because they are not needed and get in the way of automake's dvi target * HACKING: Changed CVS description. 2001-04-06 Werner Koch * gpg.sgml: Small typo fixes by Florian Weimer. 2001-03-27 Werner Koch * gpg.sgml: Add --no-sig-cache and --no-sig-create-check. 2001-03-23 Werner Koch * DETAILS: New status UNEXPECTED. 2001-03-13 Werner Koch * gpg.sgml: Described --fixed-list-mode. 2001-03-06 Werner Koch * gpgv.sgml: Changed some gpg to gpgv. Thanks to John A. Murdie. 2001-03-03 Werner Koch * gpg.sgml: Tell something about the 0x12345678! key ID syntax. 2001-01-18 Werner Koch * README.W32: Changed building instructions for MinGW32/CPD 0.3 2001-01-09 Werner Koch * DETAILS: Fixed docs for NEED_PASSPHRASE and added USERID_HINT. 2000-11-30 Werner Koch * gpg.sgml: Fixed the description of --verify. Add a short note the warnings sections. 2000-10-19 Werner Koch * gpg.sgml: Fixed doc for --allow-non-selfsigned-uid. Add entry for --ignore-crc-error. 2000-10-18 Werner Koch * OpenPGP: Dropped the paragraph that RSA is not implemented. 2000-10-14 Werner Koch * faq.raw: Add an answer to the problem of multiple signatures. Wed Oct 4 15:50:18 CEST 2000 Werner Koch * gpgv.sgml: New. * Makefile.am: build it. Thu Sep 14 14:20:38 CEST 2000 Werner Koch * faq.raw: New. * Makefile.am: Support to build FAQs Wed Jul 12 13:32:06 CEST 2000 Werner Koch * gpg.sgml: Add a note about the availability of the GPH. 2000-07-03 13:59:24 Werner Koch (wk@habibti.openit.de) * DETAILS, FAQ: Typo fixes by Yosiaki IIDA. 2000-05-12 10:57:21 Werner Koch (wk@habibti.openit.de) * gpg.sgml: Documented --no-tty. 2000-03-09 15:01:51 Werner Koch (wk@habibti.openit.de) * DETAILS: Ad a short blurb about unattended key generation. Wed Feb 9 15:33:44 CET 2000 Werner Koch * gpg.sgml: Describe --ignore-time-conflict. * gpg.sgml: Fixed a few typos. Thanks to Holger Trapp. Wed Jan 5 11:51:17 CET 2000 Werner Koch * FAQ: Enhanced answer for the 3des-s2k bug. Sat Dec 4 12:30:28 CET 1999 Werner Koch * gpg.sgml: Add section about the user ID Mon Nov 22 11:14:53 CET 1999 Werner Koch * gph: Removed the directory from the dist becuase it will go into it's own package. Thu Sep 23 09:52:58 CEST 1999 Werner Koch * README.W32: New. Mon Sep 6 19:59:08 CEST 1999 Werner Koch * Makefile.am (SUBDIRS): New subdir gph for the manual. Thu Jul 22 20:03:03 CEST 1999 Werner Koch * gpg.sgml (--always-trust): Added. Wed Jul 14 19:42:08 CEST 1999 Werner Koch * Makefile.am: Create a dummy man page if docbook-to-man is missing. Wed Jun 16 20:16:21 CEST 1999 Werner Koch * gpg1.pod: Removed. * gpg.sgml: New. Replaces the pod file * Makefile.am: Add rule to make a man file from sgml Tue Jun 15 12:21:08 CEST 1999 Werner Koch * Makefile.in.in: Use DESTDIR. Mon May 31 19:41:10 CEST 1999 Werner Koch * gpg.1pod: Enhanced the Bugs section (Michael). Wed Feb 10 17:15:39 CET 1999 Werner Koch * gpg.1pod: Spelling and grammar corrections (John A. Martin) * FAQ: Ditto. * DETAILS: Ditto. Copyright 1998, 1999, 2000, 2001, 2009 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/doc/stamp-vti0000644000175000017500000000014712635457221012264 00000000000000@set UPDATED 19 December 2015 @set UPDATED-MONTH December 2015 @set EDITION 1.4.20 @set VERSION 1.4.20 gnupg-1.4.20/doc/FAQ0000644000175000017500000000046412635216116010745 00000000000000GnuPG Frequently Asked Questions A FAQ is a fast moving target and thus we don't distribute it anymore with GnuPG. You may retrieve the current FAQ in HTML format at http://www.gnupg.org/faq/GnuPG-FAQ.html or in plain text format at the FTP server: ftp://ftp.gnupg.org/gcrypt/gnupg/GnuPG-FAQ.txt gnupg-1.4.20/doc/DETAILS0000644000175000017500000014104612635262326011431 00000000000000 -*- text -*- NOTE: The definitive reference is in GIT master. Format of colon listings ======================== First an example: $ gpg --fixed-list-mode --with-colons --list-keys \ --with-fingerprint --with-fingerprint wk@gnupg.org pub:f:1024:17:6C7EE1B8621CC013:899817715:1055898235::m:::scESC: fpr:::::::::ECAF7590EB3443B5C7CF3ACB6C7EE1B8621CC013: uid:f::::::::Werner Koch : uid:f::::::::Werner Koch : sub:f:1536:16:06AD222CADF6A6E1:919537416:1036177416:::::e: fpr:::::::::CF8BCC4B18DE08FCD8A1615906AD222CADF6A6E1: sub:r:1536:20:5CE086B5B5A18FF4:899817788:1025961788:::::esc: fpr:::::::::AB059359A3B81F410FCFF97F5CE086B5B5A18FF4: The double --with-fingerprint prints the fingerprint for the subkeys too, --fixed-list-mode is themodern listing way printing dates in seconds since Epoch and does not merge the first userID with the pub record. 1. Field: Type of record pub = public key crt = X.509 certificate crs = X.509 certificate and private key available sub = subkey (secondary key) sec = secret key ssb = secret subkey (secondary key) uid = user id (only field 10 is used). uat = user attribute (same as user id except for field 10). sig = signature rev = revocation signature fpr = fingerprint: (fingerprint is in field 10) pkd = public key data (special field format, see below) grp = reserved for gpgsm rvk = revocation key tru = trust database information spk = signature subpacket 2. Field: A letter describing the calculated trust. This is a single letter, but be prepared that additional information may follow in some future versions. (not used for secret keys) o = Unknown (this key is new to the system) i = The key is invalid (e.g. due to a missing self-signature) d = The key has been disabled (deprecated - use the 'D' in field 12 instead) r = The key has been revoked e = The key has expired - = Unknown trust (i.e. no value assigned) q = Undefined trust '-' and 'q' may safely be treated as the same value for most purposes n = Don't trust this key at all m = There is marginal trust in this key f = The key is fully trusted u = The key is ultimately trusted. This often means that the secret key is available, but any key may be marked as ultimately trusted. 3. Field: length of key in bits. 4. Field: Algorithm: 1 = RSA 16 = Elgamal (encrypt only) 17 = DSA (sometimes called DH, sign only) 20 = Elgamal (sign and encrypt - don't use them!) (for other id's see include/cipher.h) 5. Field: KeyID 6. Field: Creation Date (in UTC). For UID and UAT records, this is the self-signature date. Note that the dae is usally printed in seconds since epoch, however, we are migrating to an ISO 8601 format (e.g. "19660205T091500"). This is currently only relevant for X.509, A simple way to detect the format is be scannning for the 'T'. 7. Field: Key or user ID/user attribute expiration date or empty if none. 8. Field: Used for serial number in crt records (used to be the Local-ID). For UID and UAT records, this is a hash of the user ID contents used to represent that exact user ID. For trust signatures, this is the trust depth seperated by the trust value by a space. 9. Field: Ownertrust (primary public keys only) This is a single letter, but be prepared that additional information may follow in some future versions. For trust signatures with a regular expression, this is the regular expression value, quoted as in field 10. 10. Field: User-ID. The value is quoted like a C string to avoid control characters (the colon is quoted "\x3a"). This is not used with --fixed-list-mode in gpg. A UAT record puts the attribute subpacket count here, a space, and then the total attribute subpacket size. In gpgsm the issuer name comes here An FPR record stores the fingerprint here. The fingerprint of an revocation key is stored here. 11. Field: Signature class. This is a 2 digit hexnumber followed by either the letter 'x' for an exportable signature or the letter 'l' for a local-only signature. The class byte of an revocation key is also given here, 'x' and 'l' ist used the same way. 12. Field: Key capabilities: e = encrypt s = sign c = certify a = authentication A key may have any combination of them in any order. In addition to these letters, the primary key has uppercase versions of the letters to denote the _usable_ capabilities of the entire key, and a potential letter 'D' to indicate a disabled key. 13. Field: Used in FPR records for S/MIME keys to store the fingerprint of the issuer certificate. This is useful to build the certificate path based on certificates stored in the local keyDB; it is only filled if the issue certificate is available. The advantage of using this value is that it is guaranteed to have been been build by the same lookup algorithm as gpgsm uses. For "uid" recods this lists the preferences n the sameway the -edit menu does. For "sig" records, this is the fingerprint of the key that issued the signature. Note that this is only filled in if the signature verified correctly. Note also that for various technical reasons, this fingerprint is only available if --no-sig-cache is used. 14. Field Flag field used in the --edit menu output: 15. Field Used in sec/sbb to print the serial number of a token (internal protect mode 1002) or a '#' if that key is a simple stub (internal protect mode 1001) All dates are displayed in the format yyyy-mm-dd unless you use the option --fixed-list-mode in which case they are displayed as seconds since Epoch. More fields may be added later, so parsers should be prepared for this. When parsing a number the parser should stop at the first non-number character so that additional information can later be added. If field 1 has the tag "pkd", a listing looks like this: pkd:0:1024:B665B1435F4C2 .... FF26ABB: ! ! !-- the value ! !------ for information number of bits in the value !--------- index (eg. DSA goes from 0 to 3: p,q,g,y) The "tru" trust database records have the fields: 2: Reason for staleness of trust. If this field is empty, then the trustdb is not stale. This field may have multiple flags in it: o: Trustdb is old t: Trustdb was built with a different trust model than the one we are using now. 3: Trust model: 0: Classic trust model, as used in PGP 2.x. 1: PGP trust model, as used in PGP 6 and later. This is the same as the classic trust model, except for the addition of trust signatures. GnuPG before version 1.4 used the classic trust model by default. GnuPG 1.4 and later uses the PGP trust model by default. 4: Date trustdb was created in seconds since 1/1/1970. 5: Date trustdb will expire in seconds since 1/1/1970. The "spk" signature subpacket records have the fields: 2: Subpacket number as per RFC-2440 and later. 3: Flags in hex. Currently the only two bits assigned are 1, to indicate that the subpacket came from the hashed part of the signature, and 2, to indicate the subpacket was marked critical. 4: Length of the subpacket. Note that this is the length of the subpacket, and not the length of field 5 below. Due to the need for %-encoding, the length of field 5 may be up to 3x this value. 5: The subpacket data. Printable ASCII is shown as ASCII, but other values are rendered as %XX where XX is the hex value for the byte. Format of the "--status-fd" output ================================== Every line is prefixed with "[GNUPG:] ", followed by a keyword with the type of the status line and a some arguments depending on the type (maybe none); an application should always be prepared to see more arguments in future versions. NEWSIG May be issued right before a signature verification starts. This is useful to define a context for parsing ERROR status messages. No arguments are currently defined. GOODSIG The signature with the keyid is good. For each signature only one of the three codes GOODSIG, BADSIG or ERRSIG will be emitted and they may be used as a marker for a new signature. The username is the primary one encoded in UTF-8 and %XX escaped. EXPSIG The signature with the keyid is good, but the signature is expired. The username is the primary one encoded in UTF-8 and %XX escaped. EXPKEYSIG The signature with the keyid is good, but the signature was made by an expired key. The username is the primary one encoded in UTF-8 and %XX escaped. REVKEYSIG The signature with the keyid is good, but the signature was made by a revoked key. The username is the primary one encoded in UTF-8 and %XX escaped. BADSIG The signature with the keyid has not been verified okay. The username is the primary one encoded in UTF-8 and %XX escaped. ERRSIG \ It was not possible to check the signature. This may be caused by a missing public key or an unsupported algorithm. A RC of 4 indicates unknown algorithm, a 9 indicates a missing public key. The other fields give more information about this signature. sig_class is a 2 byte hex-value. Note, that TIMESTAMP may either be a number with seconds since epoch or an ISO 8601 string which can be detected by the presence of the letter 'T' inside. VALIDSIG The signature with the keyid is good. This is the same as GOODSIG but has the fingerprint as the argument. Both status lines are emitted for a good signature. All arguments here are on one long line. sig-timestamp is the signature creation time in seconds after the epoch. expire-timestamp is the signature expiration time in seconds after the epoch (zero means "does not expire"). sig-version, pubkey-algo, hash-algo, and sig-class (a 2-byte hex value) are all straight from the signature packet. PRIMARY-KEY-FPR is the fingerprint of the primary key or identical to the first argument. This is useful to get back to the primary key without running gpg again for this purpose. Note, that *-TIMESTAMP may either be a number with seconds since epoch or an ISO 8601 string which can be detected by the presence of the letter 'T' inside. SIG_ID This is emitted only for signatures of class 0 or 1 which have been verified okay. The string is a signature id and may be used in applications to detect replay attacks of signed messages. Note that only DLP algorithms give unique ids - others may yield duplicated ones when they have been created in the same second. Note, that SIG-TIMESTAMP may either be a number with seconds since epoch or an ISO 8601 string which can be detected by the presence of the letter 'T' inside. ENC_TO The message is encrypted to this keyid. keytype is the numerical value of the public key algorithm, keylength is the length of the key or 0 if it is not known (which is currently always the case). NODATA No data has been found. Codes for what are: 1 - No armored data. 2 - Expected a packet but did not found one. 3 - Invalid packet found, this may indicate a non OpenPGP message. 4 - signature expected but not found You may see more than one of these status lines. UNEXPECTED Unexpected data has been encountered 0 - not further specified 1 TRUST_UNDEFINED TRUST_NEVER TRUST_MARGINAL TRUST_FULLY TRUST_ULTIMATE For good signatures one of these status lines are emitted to indicate how trustworthy the signature is. The error token values are currently only emiited by gpgsm. PKA_TRUST_GOOD PKA_TRUST_BAD Depending on the outcome of the PKA check one of the above status codes is emitted in addition to a TRUST_* status. Without PKA info available or SIGEXPIRED This is deprecated in favor of KEYEXPIRED. KEYEXPIRED The key has expired. expire-timestamp is the expiration time in seconds after the epoch. Note, that TIMESTAMP may either be a number with seconds since epoch or an ISO 8601 string which can be detected by the presence of the letter 'T' inside. KEYREVOKED The used key has been revoked by its owner. No arguments yet. BADARMOR The ASCII armor is corrupted. No arguments yet. RSA_OR_IDEA Obsolete. This status message used to be emitted for requests to use the IDEA or RSA algorithms. It has been dropped from GnuPG 1.4 after the respective patents expired. SHM_INFO SHM_GET SHM_GET_BOOL SHM_GET_HIDDEN GET_BOOL GET_LINE GET_HIDDEN GOT_IT NEED_PASSPHRASE Issued whenever a passphrase is needed. keytype is the numerical value of the public key algorithm or 0 if this is not applicable, keylength is the length of the key or 0 if it is not known (this is currently always the case). NEED_PASSPHRASE_SYM Issued whenever a passphrase for symmetric encryption is needed. NEED_PASSPHRASE_PIN [] Issued whenever a PIN is requested to unlock a card. MISSING_PASSPHRASE No passphrase was supplied. An application which encounters this message may want to stop parsing immediately because the next message will probably be a BAD_PASSPHRASE. However, if the application is a wrapper around the key edit menu functionality it might not make sense to stop parsing but simply ignoring the following BAD_PASSPHRASE. BAD_PASSPHRASE The supplied passphrase was wrong or not given. In the latter case you may have seen a MISSING_PASSPHRASE. GOOD_PASSPHRASE The supplied passphrase was good and the secret key material is therefore usable. DECRYPTION_FAILED The symmetric decryption failed - one reason could be a wrong passphrase for a symmetrical encrypted message. DECRYPTION_OKAY The decryption process succeeded. This means, that either the correct secret key has been used or the correct passphrase for a conventional encrypted message was given. The program itself may return an errorcode because it may not be possible to verify a signature for some reasons. NO_PUBKEY NO_SECKEY The key is not available IMPORT_CHECK This status is emitted in interactive mode right before the "import.okay" prompt. IMPORTED The keyid and name of the signature just imported IMPORT_OK [] The key with the primary key's FINGERPRINT has been imported. Reason flags: 0 := Not actually changed 1 := Entirely new key. 2 := New user IDs 4 := New signatures 8 := New subkeys 16 := Contains private key. The flags may be ORed. IMPORT_PROBLEM [] Issued for each import failure. Reason codes are: 0 := "No specific reason given". 1 := "Invalid Certificate". 2 := "Issuer Certificate missing". 3 := "Certificate Chain too long". 4 := "Error storing certificate". IMPORT_RES Final statistics on import process (this is one long line) FILE_START Start processing a file . indicates the performed operation: 1 - verify 2 - encrypt 3 - decrypt FILE_DONE Marks the end of a file processing which has been started by FILE_START. BEGIN_DECRYPTION END_DECRYPTION Mark the start and end of the actual decryption process. These are also emitted when in --list-only mode. BEGIN_ENCRYPTION END_ENCRYPTION Mark the start and end of the actual encryption process. BEGIN_SIGNING Mark the start of the actual signing process. This may be used as an indication that all requested secret keys are ready for use. DELETE_PROBLEM reason_code Deleting a key failed. Reason codes are: 1 - No such key 2 - Must delete secret key first 3 - Ambigious specification PROGRESS what char cur total Used by the primegen and Public key functions to indicate progress. "char" is the character displayed with no --status-fd enabled, with the linefeed replaced by an 'X'. "cur" is the current amount done and "total" is amount to be done; a "total" of 0 indicates that the total amount is not known. 100/100 may be used to detect the end of operation. Well known values for WHAT: "pk_dsa" - DSA key generation "pk_elg" - Elgamal key generation "primegen" - Prime generation "need_entropy" - Waiting for new entropy in the RNG "file:XXX" - processing file XXX (note that current gpg versions leave out the "file:" prefix). "tick" - generic tick without any special meaning - useful for letting clients know that the server is still working. "starting_agent" - A gpg-agent was started because it is not running as a daemon. SIG_CREATED A signature has been created using these parameters. type: 'D' = detached 'C' = cleartext 'S' = standard (only the first character should be checked) class: 2 hex digits with the signature class Note, that TIMESTAMP may either be a number with seconds since epoch or an ISO 8601 string which can be detected by the presence of the letter 'T' inside. KEY_CREATED [] A key has been created type: 'B' = primary and subkey 'P' = primary 'S' = subkey The fingerprint is one of the primary key for type B and P and the one of the subkey for S. Handle is an arbitrary non-whitespace string used to match key parameters from batch key creation run. KEY_NOT_CREATED [] The key from batch run has not been created due to errors. SESSION_KEY : The session key used to decrypt the message. This message will only be emitted when the special option --show-session-key is used. The format is suitable to be passed to the option --override-session-key NOTATION_NAME NOTATION_DATA name and string are %XX escaped; the data may be splitted among several notation_data lines. USERID_HINT Give a hint about the user ID for a certain keyID. POLICY_URL string is %XX escaped BEGIN_STREAM END_STREAM Issued by pipemode. INV_RECP Issued for each unusable recipient. The reasons codes currently in use are: 0 := "No specific reason given". 1 := "Not Found" 2 := "Ambigious specification" 3 := "Wrong key usage" 4 := "Key revoked" 5 := "Key expired" 6 := "No CRL known" 7 := "CRL too old" 8 := "Policy mismatch" 9 := "Not a secret key" 10 := "Key not trusted" 13 := "Key disabled" 14 := "Syntax error in specification" Note that this status is also used for gpgsm's SIGNER command where it relates to signer's of course. NO_RECP Issued when no recipients are usable. ALREADY_SIGNED Warning: This is experimental and might be removed at any time. TRUNCATED The output was truncated to MAXNO items. This status code is issued for certain external requests ERROR This is a generic error status message, it might be followed by error location specific data. and should not contain a space. The error code is a either a string commencing with a letter or such string prefix with a numerical error code and an underscore; e.g.: "151011327_EOF" ATTRIBUTE This is one long line issued for each attribute subpacket when an attribute packet is seen during key listing. is the fingerprint of the key. is the length of the attribute subpacket. is the attribute type (1==image). / indicates that this is the Nth indexed subpacket of count total subpackets in this attribute packet. and are from the self-signature on the attribute packet. If the attribute packet does not have a valid self-signature, then the timestamp is 0. are a bitwise OR of: 0x01 = this attribute packet is a primary uid 0x02 = this attribute packet is revoked 0x04 = this attribute packet is expired CARDCTRL [] This is used to control smartcard operations. Defined values for WHAT are: 1 = Request insertion of a card. Serialnumber may be given to request a specific card. 2 = Request removal of a card. 3 = Card with serialnumber detected 4 = No card available. 5 = No card reader available PLAINTEXT This indicates the format of the plaintext that is about to be written. The format is a 1 byte hex code that shows the format of the plaintext: 62 ('b') is binary data, 74 ('t') is text data with no character set specified, and 75 ('u') is text data encoded in the UTF-8 character set. The timestamp is in seconds since the epoch. If a filename is available it gets printed as the third argument, percent-escaped as usual. PLAINTEXT_LENGTH This indicates the length of the plaintext that is about to be written. Note that if the plaintext packet has partial length encoding it is not possible to know the length ahead of time. In that case, this status tag does not appear. SIG_SUBPACKET This indicates that a signature subpacket was seen. The format is the same as the "spk" record above. SC_OP_FAILURE [] An operation on a smartcard definitely failed. Currently there is no indication of the actual error code, but application should be prepared to later accept more arguments. Defined values for CODE are: 0 - unspecified error (identically to a missing CODE) 1 - canceled 2 - bad PIN SC_OP_SUCCESS A smart card operaion succeeded. This status is only printed for certain operation and is mostly useful to check whether a PIN change really worked. BACKUP_KEY_CREATED fingerprint fname A backup key named FNAME has been created for the key with KEYID. Format of the "--attribute-fd" output ===================================== When --attribute-fd is set, during key listings (--list-keys, --list-secret-keys) GnuPG dumps each attribute packet to the file descriptor specified. --attribute-fd is intended for use with --status-fd as part of the required information is carried on the ATTRIBUTE status tag (see above). The contents of the attribute data is specified by 2440bis, but for convenience, here is the Photo ID format, as it is currently the only attribute defined: Byte 0-1: The length of the image header. Due to a historical accident (i.e. oops!) back in the NAI PGP days, this is a little-endian number. Currently 16 (0x10 0x00). Byte 2: The image header version. Currently 0x01. Byte 3: Encoding format. 0x01 == JPEG. Byte 4-15: Reserved, and currently unused. All other data after this header is raw image (JPEG) data. Format of the "--list-config" output ==================================== --list-config outputs information about the GnuPG configuration for the benefit of frontends or other programs that call GnuPG. There are several list-config items, all colon delimited like the rest of the --with-colons output. The first field is always "cfg" to indicate configuration information. The second field is one of (with examples): version: the third field contains the version of GnuPG. cfg:version:1.3.5 pubkey: the third field contains the public key algorithmdcaiphers this version of GnuPG supports, separated by semicolons. The algorithm numbers are as specified in RFC-2440. cfg:pubkey:1;2;3;16;17 cipher: the third field contains the symmetric ciphers this version of GnuPG supports, separated by semicolons. The cipher numbers are as specified in RFC-2440. cfg:cipher:2;3;4;7;8;9;10 digest: the third field contains the digest (hash) algorithms this version of GnuPG supports, separated by semicolons. The digest numbers are as specified in RFC-2440. cfg:digest:1;2;3;8;9;10 compress: the third field contains the compression algorithms this version of GnuPG supports, separated by semicolons. The algorithm numbers are as specified in RFC-2440. cfg:compress:0;1;2;3 group: the third field contains the name of the group, and the fourth field contains the values that the group expands to, separated by semicolons. For example, a group of: group mynames = paige 0x12345678 joe patti would result in: cfg:group:mynames:patti;joe;0x12345678;paige Key generation ============== Key generation shows progress by printing different characters to stderr: "." Last 10 Miller-Rabin tests failed "+" Miller-Rabin test succeeded "!" Reloading the pool with fresh prime numbers "^" Checking a new value for the generator "<" Size of one factor decreased ">" Size of one factor increased The prime number for Elgamal is generated this way: 1) Make a prime number q of 160, 200, 240 bits (depending on the keysize) 2) Select the length of the other prime factors to be at least the size of q and calculate the number of prime factors needed 3) Make a pool of prime numbers, each of the length determined in step 2 4) Get a new permutation out of the pool or continue with step 3 if we have tested all permutations. 5) Calculate a candidate prime p = 2 * q * p[1] * ... * p[n] + 1 6) Check that this prime has the correct length (this may change q if it seems not to be possible to make a prime of the desired length) 7) Check whether this is a prime using trial divisions and the Miller-Rabin test. 8) Continue with step 4 if we did not find a prime in step 7. 9) Find a generator for that prime. This algorithm is based on Lim and Lee's suggestion from the Crypto '97 proceedings p. 260. Unattended key generation ========================= This feature allows unattended generation of keys controlled by a parameter file. To use this feature, you use --gen-key together with --batch and feed the parameters either from stdin or from a file given on the commandline. The format of this file is as follows: o Text only, line length is limited to about 1000 chars. o You must use UTF-8 encoding to specify non-ascii characters. o Empty lines are ignored. o Leading and trailing spaces are ignored. o A hash sign as the first non white space character indicates a comment line. o Control statements are indicated by a leading percent sign, the arguments are separated by white space from the keyword. o Parameters are specified by a keyword, followed by a colon. Arguments are separated by white space. o The first parameter must be "Key-Type", control statements may be placed anywhere. o Key generation takes place when either the end of the parameter file is reached, the next "Key-Type" parameter is encountered or at the control statement "%commit" o Control statements: %echo Print . %dry-run Suppress actual key generation (useful for syntax checking). %commit Perform the key generation. An implicit commit is done at the next "Key-Type" parameter. %pubring %secring Do not write the key to the default or commandline given keyring but to . This must be given before the first commit to take place, duplicate specification of the same filename is ignored, the last filename before a commit is used. The filename is used until a new filename is used (at commit points) and all keys are written to that file. If a new filename is given, this file is created (and overwrites an existing one). Both control statements must be given. o The order of the parameters does not matter except for "Key-Type" which must be the first parameter. The parameters are only for the generated keyblock and parameters from previous key generations are not used. Some syntactically checks may be performed. The currently defined parameters are: Key-Type: | Starts a new parameter block by giving the type of the primary key. The algorithm must be capable of signing. This is a required parameter. Key-Length: Length of the key in bits. Default is 1024. Key-Usage: Space or comma delimited list of key usage, allowed values are "encrypt", "sign", and "auth". This is used to generate the key flags. Please make sure that the algorithm is capable of this usage. Note that OpenPGP requires that all primary keys are capable of certification, so no matter what usage is given here, the "cert" flag will be on. If no Key-Usage is specified, all the allowed usages for that particular algorithm are used. Subkey-Type: | This generates a secondary key. Currently only one subkey can be handled. Subkey-Length: Length of the subkey in bits. Default is 1024. Subkey-Usage: Similar to Key-Usage. Passphrase: If you want to specify a passphrase for the secret key, enter it here. Default is not to use any passphrase. Name-Real: Name-Comment: Name-Email: The 3 parts of a key. Remember to use UTF-8 here. If you don't give any of them, no user ID is created. Expire-Date: |([d|w|m|y]) Set the expiration date for the key (and the subkey). It may either be entered in ISO date format (2000-08-15) or as number of days, weeks, month or years. Without a letter days are assumed. Preferences: Set the cipher, hash, and compression preference values for this key. This expects the same type of string as "setpref" in the --edit menu. Revoker: : [sensitive] Add a designated revoker to the generated key. Algo is the public key algorithm of the designated revoker (i.e. RSA=1, DSA=17, etc.) Fpr is the fingerprint of the designated revoker. The optional "sensitive" flag marks the designated revoker as sensitive information. Only v4 keys may be designated revokers. Handle: This is an optional parameter only used with the status lines KEY_CREATED and KEY_NOT_CREATED. STRING may be up to 100 characters and should not contain spaces. It is useful for batch key generation to associate a key parameter block with a status line. Keyserver: This is an optional parameter that specifies the preferred keyserver URL for the key. Here is an example: $ cat >foo < ssb 1024g/8F70E2C0 2000-03-09 Layout of the TrustDB ===================== The TrustDB is built from fixed length records, where the first byte describes the record type. All numeric values are stored in network byte order. The length of each record is 40 bytes. The first record of the DB is always of type 1 and this is the only record of this type. FIXME: The layout changed, document it here. Record type 0: -------------- Unused record, can be reused for any purpose. Record type 1: -------------- Version information for this TrustDB. This is always the first record of the DB and the only one with type 1. 1 byte value 1 3 bytes 'gpg' magic value 1 byte Version of the TrustDB (2) 1 byte marginals needed 1 byte completes needed 1 byte max_cert_depth The three items are used to check whether the cached validity value from the dir record can be used. 1 u32 locked flags [not used] 1 u32 timestamp of trustdb creation 1 u32 timestamp of last modification which may affect the validity of keys in the trustdb. This value is checked against the validity timestamp in the dir records. 1 u32 timestamp of last validation [currently not used] (Used to keep track of the time, when this TrustDB was checked against the pubring) 1 u32 record number of keyhashtable [currently not used] 1 u32 first free record 1 u32 record number of shadow directory hash table [currently not used] It does not make sense to combine this table with the key table because the keyid is not in every case a part of the fingerprint. 1 u32 record number of the trusthashtbale Record type 2: (directory record) -------------- Informations about a public key certificate. These are static values which are never changed without user interaction. 1 byte value 2 1 byte reserved 1 u32 LID . (This is simply the record number of this record.) 1 u32 List of key-records (the first one is the primary key) 1 u32 List of uid-records 1 u32 cache record 1 byte ownertrust 1 byte dirflag 1 byte maximum validity of all the user ids 1 u32 time of last validity check. 1 u32 Must check when this time has been reached. (0 = no check required) Record type 3: (key record) -------------- Informations about a primary public key. (This is mainly used to lookup a trust record) 1 byte value 3 1 byte reserved 1 u32 LID 1 u32 next - next key record 7 bytes reserved 1 byte keyflags 1 byte pubkey algorithm 1 byte length of the fingerprint (in bytes) 20 bytes fingerprint of the public key (This is the value we use to identify a key) Record type 4: (uid record) -------------- Informations about a userid We do not store the userid but the hash value of the userid because that is sufficient. 1 byte value 4 1 byte reserved 1 u32 LID points to the directory record. 1 u32 next next userid 1 u32 pointer to preference record 1 u32 siglist list of valid signatures 1 byte uidflags 1 byte validity of the key calculated over this user id 20 bytes ripemd160 hash of the username. Record type 5: (pref record) -------------- This record type is not anymore used. 1 byte value 5 1 byte reserved 1 u32 LID; points to the directory record (and not to the uid record!). (or 0 for standard preference record) 1 u32 next 30 byte preference data Record type 6 (sigrec) ------------- Used to keep track of key signatures. Self-signatures are not stored. If a public key is not in the DB, the signature points to a shadow dir record, which in turn has a list of records which might be interested in this key (and the signature record here is one). 1 byte value 6 1 byte reserved 1 u32 LID points back to the dir record 1 u32 next next sigrec of this uid or 0 to indicate the last sigrec. 6 times 1 u32 Local_id of signatures dir or shadow dir record 1 byte Flag: Bit 0 = checked: Bit 1 is valid (we have a real directory record for this) 1 = valid is set (but may be revoked) Record type 8: (shadow directory record) -------------- This record is used to reserve a LID for a public key. We need this to create the sig records of other keys, even if we do not yet have the public key of the signature. This record (the record number to be more precise) will be reused as the dir record when we import the real public key. 1 byte value 8 1 byte reserved 1 u32 LID (This is simply the record number of this record.) 2 u32 keyid 1 byte pubkey algorithm 3 byte reserved 1 u32 hintlist A list of records which have references to this key. This is used for fast access to signature records which are not yet checked. Note, that this is only a hint and the actual records may not anymore hold signature records for that key but that the code cares about this. 18 byte reserved Record Type 10 (hash table) -------------- Due to the fact that we use fingerprints to lookup keys, we can implement quick access by some simple hash methods, and avoid the overhead of gdbm. A property of fingerprints is that they can be used directly as hash values. (They can be considered as strong random numbers.) What we use is a dynamic multilevel architecture, which combines hashtables, record lists, and linked lists. This record is a hashtable of 256 entries; a special property is that all these records are stored consecutively to make one big table. The hash value is simple the 1st, 2nd, ... byte of the fingerprint (depending on the indirection level). When used to hash shadow directory records, a different table is used and indexed by the keyid. 1 byte value 10 1 byte reserved n u32 recnum; n depends on the record length: n = (reclen-2)/4 which yields 9 for the current record length of 40 bytes. the total number of such record which makes up the table is: m = (256+n-1) / n which is 29 for a record length of 40. To look up a key we use the first byte of the fingerprint to get the recnum from this hashtable and look up the addressed record: - If this record is another hashtable, we use 2nd byte to index this hash table and so on. - if this record is a hashlist, we walk all entries until we found one a matching one. - if this record is a key record, we compare the fingerprint and to decide whether it is the requested key; Record type 11 (hash list) -------------- see hash table for an explanation. This is also used for other purposes. 1 byte value 11 1 byte reserved 1 u32 next next hash list record n times n = (reclen-5)/5 1 u32 recnum For the current record length of 40, n is 7 Record type 254 (free record) --------------- All these records form a linked list of unused records. 1 byte value 254 1 byte reserved (0) 1 u32 next_free Packet Headers =============== GNUPG uses PGP 2 packet headers and also understands OpenPGP packet header. There is one enhancement used with the old style packet headers: CTB bits 10, the "packet-length length bits", have values listed in the following table: 00 - 1-byte packet-length field 01 - 2-byte packet-length field 10 - 4-byte packet-length field 11 - no packet length supplied, unknown packet length As indicated in this table, depending on the packet-length length bits, the remaining 1, 2, 4, or 0 bytes of the packet structure field are a "packet-length field". The packet-length field is a whole number field. The value of the packet-length field is defined to be the value of the whole number field. A value of 11 is currently used in one place: on compressed data. That is, a compressed data block currently looks like , where , binary 10 1000 11, is an indefinite-length packet. The proper interpretation is "until the end of the enclosing structure", although it should never appear outermost (where the enclosing structure is a file). + This will be changed with another version, where the new meaning of + the value 11 (see below) will also take place. + + A value of 11 for other packets enables a special length encoding, + which is used in case, where the length of the following packet can + not be determined prior to writing the packet; especially this will + be used if large amounts of data are processed in filter mode. + + It works like this: After the CTB (with a length field of 11) a + marker field is used, which gives the length of the following datablock. + This is a simple 2 byte field (MSB first) containing the amount of data + following this field, not including this length field. After this datablock + another length field follows, which gives the size of the next datablock. + A value of 0 indicates the end of the packet. The maximum size of a + data block is limited to 65534, thereby reserving a value of 0xffff for + future extensions. These length markers must be inserted into the data + stream just before writing the data out. + + This 2 byte field is large enough, because the application must buffer + this amount of data to prepend the length marker before writing it out. + Data block sizes larger than about 32k doesn't make any sense. Note + that this may also be used for compressed data streams, but we must use + another packet version to tell the application that it can not assume, + that this is the last packet. GNU extensions to the S2K algorithm =================================== S2K mode 101 is used to identify these extensions. After the hash algorithm the 3 bytes "GNU" are used to make clear that these are extensions for GNU, the next bytes gives the GNU protection mode - 1000. Defined modes are: 1001 - do not store the secret part at all 1002 - a stub to access smartcards (not used in 1.2.x) Pipemode ======== NOTE: This is deprecated and will be removed in future versions. This mode can be used to perform multiple operations with one call to gpg. It comes handy in cases where you have to verify a lot of signatures. Currently we support only detached signatures. This mode is a kludge to avoid running gpg n daemon mode and using Unix Domain Sockets to pass the data to it. There is no easy portable way to do this under Windows, so we use plain old pipes which do work well under Windows. Because there is no way to signal multiple EOFs in a pipe we have to embed control commands in the data stream: We distinguish between a data state and a control state. Initially the system is in data state but it won't accept any data. Instead it waits for transition to control state which is done by sending a single '@' character. While in control state the control command os expected and this command is just a single byte after which the system falls back to data state (but does not necesary accept data now). The simplest control command is a '@' which just inserts this character into the data stream. Here is the format we use for detached signatures: "@<" - Begin of new stream "@B" - Detached signature follows. This emits a control packet (1,'B') "@t" - Signed text follows. This emits the control packet (2, 'B') "@." - End of operation. The final control packet forces signature verification "@>" - End of stream Other Notes =========== * For packet version 3 we calculate the keyids this way: RSA := low 64 bits of n ELGAMAL := build a v3 pubkey packet (with CTB 0x99) and calculate a rmd160 hash value from it. This is used as the fingerprint and the low 64 bits are the keyid. * Revocation certificates consist only of the signature packet; "import" knows how to handle this. The rationale behind it is to keep them small. Keyserver Message Format ========================= The keyserver may be contacted by a Unix Domain socket or via TCP. The format of a request is: ==== command-tag "Content-length:" digits CRLF ======= Where command-tag is NOOP GET PUT DELETE The format of a response is: ====== "GNUPG/1.0" status-code status-text "Content-length:" digits CRLF ============ followed by bytes of data Status codes are: o 1xx: Informational - Request received, continuing process o 2xx: Success - The action was successfully received, understood, and accepted o 4xx: Client Error - The request contains bad syntax or cannot be fulfilled o 5xx: Server Error - The server failed to fulfill an apparently valid request Documentation on HKP (the http keyserver protocol): A minimalistic HTTP server on port 11371 recognizes a GET for /pks/lookup. The standard http URL encoded query parameters are this (always key=value): - op=index (like pgp -kv), op=vindex (like pgp -kvv) and op=get (like pgp -kxa) - search=. This is a list of words that must occur in the key. The words are delimited with space, points, @ and so on. The delimiters are not searched for and the order of the words doesn't matter (but see next option). - exact=on. This switch tells the hkp server to only report exact matching keys back. In this case the order and the "delimiters" are important. - fingerprint=on. Also reports the fingerprints when used with 'index' or 'vindex' The keyserver also recognizes http-POSTs to /pks/add. Use this to upload keys. A better way to do this would be a request like: /pks/lookup/?op= This can be implemented using Hurd's translator mechanism. However, I think the whole key server stuff has to be re-thought; I have some ideas and probably create a white paper. Algorithm names for the "keygen.algo" prompt ============================================ When using a --command-fd controlled key generation or "addkey" there is way to know the number to enter on the "keygen.algo" prompt. The displayed numbers are for human reception and may change with releases. To provide a stable way to enter a desired algorithm choice the prompt also accepts predefined names for the algorithms, which will not change. | Name | No | Description | |---------+----+---------------------------------| | rsa+rsa | 1 | RSA and RSA (default) | | dsa+elg | 2 | DSA and Elgamal | | dsa | 3 | DSA (sign only) | | rsa/s | 4 | RSA (sign only) | | elg | 5 | Elgamal (encrypt only) | | rsa/e | 6 | RSA (encrypt only) | | dsa/* | 7 | DSA (set your own capabilities) | | rsa/* | 8 | RSA (set your own capabilities) | If one of the "foo/*" names are used a "keygen.flags" prompt needs to be answered as well. Instead of toggling the predefined flags, it is also possible to set them direct: Use a "=" character directly followed by a comination of "a" (for authentication), "s" (for signing), or "c" (for certification). ## gnupg-1.4.20/doc/gpg-zip.10000644000175000017500000000457712635262326012067 00000000000000.\" Created from Texinfo source by yat2m 1.0 .TH GPG-ZIP 1 2011-02-23 "GnuPG 1.4" "GNU Privacy Guard" .SH NAME .B gpg-zip \- Encrypt or sign files into an archive .SH SYNOPSIS .B gpg-zip .RI [ options ] .I filename1 .I [ filename2, ... ] .I directory1 .I [ directory2, ... ] .SH DESCRIPTION \fBgpg-zip\fR encrypts or signs files into an archive. It is an gpg-ized tar using the same format as used by PGP's PGP Zip. .SH OPTIONS \fBgpg-zip\fR understands these options: .TP .B --encrypt .TP .B -e Encrypt data. This option may be combined with \fB--symmetric\fR (for output that may be decrypted via a secret key or a passphrase). .TP .B --decrypt .TP .B -d Decrypt data. .TP .B --symmetric .TP .B -c Encrypt with a symmetric cipher using a passphrase. The default symmetric cipher used is CAST5, but may be chosen with the \fB--cipher-algo\fR option to \fBgpg\fR. .TP .B --sign .TP .B -s Make a signature. See \fBgpg\fR. .TP .B --recipient \fIuser\fR .TP .B -r \fIuser\fR Encrypt for user id \fIuser\fR. See \fBgpg\fR. .TP .B --local-user \fIuser\fR .TP .B -u \fIuser\fR Use \fIuser\fR as the key to sign with. See \fBgpg\fR. .TP .B --list-archive List the contents of the specified archive. .TP .B --output \fIfile\fR .TP .B -o \fIfile\fR Write output to specified file \fIfile\fR. .TP .B --gpg \fIgpgcmd\fR Use the specified command \fIgpgcmd\fR instead of \fBgpg\fR. .TP .B --gpg-args \fIargs\fR Pass the specified options to \fBgpg\fR. .TP .B --tar \fItarcmd\fR Use the specified command \fItarcmd\fR instead of \fBtar\fR. .TP .B --tar-args \fIargs\fR Pass the specified options to \fBtar\fR. .TP .B --version Print version of the program and exit. .TP .B --help Display a brief help page and exit. .SH EXAMPLES Encrypt the contents of directory \(oq\fImydocs\fR\(cq for user Bob to file \(oq\fItest1\fR\(cq: .RS 2 .nf gpg-zip --encrypt --output test1 --gpg-args -r Bob mydocs .fi .RE List the contents of archive \(oq\fItest1\fR\(cq: .RS 2 .nf gpg-zip --list-archive test1 .fi .RE .SH DIAGNOSTICS The program returns 0 if everything was fine, 1 otherwise. .SH SEE ALSO \fBgpg\fR(1), \fBtar\fR(1), The full documentation for this tool is maintained as a Texinfo manual. If GnuPG and the info program are properly installed at your site, the command .RS 2 .nf info gnupg .fi .RE should give you access to the complete manual including a menu structure and an index. gnupg-1.4.20/doc/opt-homedir.texi0000644000175000017500000000217412635262326013541 00000000000000@c This option is included at several places. @item --homedir @var{dir} @opindex homedir Set the name of the home directory to @var{dir}. If this option is not used, the home directory defaults to @file{~/.gnupg}. It is only recognized when given on the command line. It also overrides any home directory stated through the environment variable @env{GNUPGHOME} or (on Windows systems) by means of the Registry entry @var{HKCU\Software\GNU\GnuPG:HomeDir}. On Windows systems it is possible to install GnuPG as a portable application. In this case only this command line option is considered, all other ways to set a home directory are ignored. To install GnuPG as a portable application under Windows, create an empty file name @file{gpgconf.ctl} in the same directory as the tool @file{gpgconf.exe}. The root of the installation is than that directory; or, if @file{gpgconf.exe} has been installed directly below a directory named @file{bin}, its parent directory. You also need to make sure that the following directories exist and are writable: @file{ROOT/home} for the GnuPG home and @file{ROOT/var/cache/gnupg} for internal cache files. gnupg-1.4.20/doc/see-also-note.texi0000644000175000017500000000055712412220365013756 00000000000000@c We append this note to all ``see also'' sections of the man pages @ifset isman The full documentation for this tool is maintained as a Texinfo manual. If GnuPG and the info program are properly installed at your site, the command @example info gnupg @end example should give you access to the complete manual including a menu structure and an index. @end ifset gnupg-1.4.20/doc/Makefile.am0000644000175000017500000000544512635262326012457 00000000000000# Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. # # This file is part of GnuPG. # # GnuPG is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 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, see . ## Process this file with automake to create Makefile.in EXTRA_DIST = DETAILS FAQ \ HACKING OpenPGP README.W32 samplekeys.asc gnupg.7 \ TRANSLATE highlights-1.4.txt \ gpg.texi gpgv.texi specify-user-id.texi see-also-note.texi \ opt-homedir.texi texi.css yat2m.c gpl.texi gpg-zip.1 myman_sources = gpg.texi gpgv.texi myman_pages = gpg.1 gpgv.1 info_TEXINFOS = gnupg1.texi # We do not install gnupg.7 because 2.1 does it also be default. This # is the more future proof way of handling it. man_MANS = $(myman_pages) gpg-zip.1 noinst_man_MANS = gnupg.7 gnupg1_TEXINFOS = gnupg1.texi # Need this to avoid building of dvis with automake 1.4 DVIS = pkgdata_DATA = FAQ # we can't add gpg.texi gpgv.texi here because automake does not like them to # be built files. CLEANFILES = gpg.xml gpgv.xml DISTCLEANFILES = yat2m yat2m-stamp.tmp yat2m-stamp $(myman_pages) AM_MAKEINFOFLAGS = -I $(srcdir) --css-include=$(srcdir)/texi.css -D gpgone YAT2M_OPTIONS = -I $(srcdir) -D gpgone \ --release "GnuPG @PACKAGE_VERSION@" --source "GNU Privacy Guard 1.4" yat2m: Makefile yat2m.c $(CC_FOR_BUILD) -o $@ $(srcdir)/yat2m.c yat2m-stamp: $(myman_sources) @rm -f yat2m-stamp.tmp @touch yat2m-stamp.tmp for file in $(myman_sources) ; do \ ./yat2m $(YAT2M_OPTIONS) --store \ `test -f '$$file' || echo '$(srcdir)/'`$$file ; done @mv -f yat2m-stamp.tmp $@ yat2m-stamp: yat2m $(myman_pages) : yat2m-stamp @if test -f $@; then :; else \ trap 'rm -rf yat2m-stamp yat2m-lock' 1 2 13 15; \ if mkdir yat2m-lock 2>/dev/null; then \ rm -f yat2m-stamp; \ $(MAKE) $(AM_MAKEFLAGS) yat2m-stamp; \ rmdir yat2m-lock; \ else \ while test -d yat2m-lock; do sleep 1; done; \ test -f yat2m-stamp; exit $$?; \ fi; \ fi dist-hook: @if test "`wc -c < gpg.1`" -lt 200; then \ echo 'ERROR: dummy man page'; false; fi update-source: @echo Not anymore used - we now keep docs for 1.x separate @echo from GnuPG-2. gnupg-1.4.20/doc/gpl.texi0000644000175000017500000010462712635262326012102 00000000000000@node Copying @unnumbered GNU General Public License @center Version 3, 29 June 2007 @c This file is intended to be included in another file. @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @unnumberedsec Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. @iftex @unnumberedsec TERMS AND CONDITIONS @end iftex @ifinfo @center TERMS AND CONDITIONS @end ifinfo @enumerate 0 @item Definitions. ``This License'' refers to version 3 of the GNU General Public License. ``Copyright'' also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. ``The Program'' refers to any copyrightable work licensed under this License. Each licensee is addressed as ``you''. ``Licensees'' and ``recipients'' may be individuals or organizations. To ``modify'' a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a ``modified version'' of the earlier work or a work ``based on'' the earlier work. A ``covered work'' means either the unmodified Program or a work based on the Program. To ``propagate'' a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To ``convey'' a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays ``Appropriate Legal Notices'' to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. @item Source Code. The ``source code'' for a work means the preferred form of the work for making modifications to it. ``Object code'' means any non-source form of a work. A ``Standard Interface'' means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The ``System Libraries'' of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A ``Major Component'', in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The ``Corresponding Source'' for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. @item Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. @item Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. @item Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. @item Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to ``keep intact all notices''. @item You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. @item If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. @end enumerate A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. @item Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: @enumerate a @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. @item Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. @item Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. @item Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. @item Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. @end enumerate A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A ``User Product'' is either (1) a ``consumer product'', which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, ``normally used'' refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. ``Installation Information'' for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. @item Additional Terms. ``Additional permissions'' are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or @item Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. @end enumerate All other non-permissive additional terms are considered ``further restrictions'' within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. @item Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. @item Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. @item Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An ``entity transaction'' is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. @item Patents. A ``contributor'' is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's ``contributor version''. A contributor's ``essential patent claims'' are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, ``control'' includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a ``patent license'' is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To ``grant'' such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. ``Knowingly relying'' means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is ``discriminatory'' if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. @item No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. @item Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. @item Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. @item Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. @item Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. @item Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. @end enumerate @iftex @heading END OF TERMS AND CONDITIONS @end iftex @ifinfo @center END OF TERMS AND CONDITIONS @end ifinfo @unnumberedsec How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the ``copyright'' line and a pointer to where the full notice is found. @example @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see @url{http://www.gnu.org/licenses/}. @end example @noindent Also add information on how to contact you by electronic and paper mail. @noindent If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{show c} should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an ``about box''. You should also get your employer (if you work as a programmer) or school, if any, to sign a ``copyright disclaimer'' for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see @url{http://www.gnu.org/licenses/}. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. gnupg-1.4.20/doc/Makefile.in0000644000175000017500000010060412635457153012465 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. # # This file is part of GnuPG. # # GnuPG is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 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, see . VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs $(gnupg1_TEXINFOS) \ $(top_srcdir)/scripts/mdate-sh $(srcdir)/version.texi \ $(srcdir)/stamp-vti $(top_srcdir)/scripts/texinfo.tex ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/gnupg1.info TEXINFO_TEX = $(top_srcdir)/scripts/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/scripts PDFS = gnupg1.pdf PSS = gnupg1.ps HTMLS = gnupg1.html TEXINFOS = gnupg1.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(pkgdatadir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 NROFF = nroff MANS = $(man_MANS) DATA = $(pkgdata_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = DETAILS FAQ \ HACKING OpenPGP README.W32 samplekeys.asc gnupg.7 \ TRANSLATE highlights-1.4.txt \ gpg.texi gpgv.texi specify-user-id.texi see-also-note.texi \ opt-homedir.texi texi.css yat2m.c gpl.texi gpg-zip.1 myman_sources = gpg.texi gpgv.texi myman_pages = gpg.1 gpgv.1 info_TEXINFOS = gnupg1.texi # We do not install gnupg.7 because 2.1 does it also be default. This # is the more future proof way of handling it. man_MANS = $(myman_pages) gpg-zip.1 noinst_man_MANS = gnupg.7 gnupg1_TEXINFOS = gnupg1.texi # Need this to avoid building of dvis with automake 1.4 DVIS = pkgdata_DATA = FAQ # we can't add gpg.texi gpgv.texi here because automake does not like them to # be built files. CLEANFILES = gpg.xml gpgv.xml DISTCLEANFILES = yat2m yat2m-stamp.tmp yat2m-stamp $(myman_pages) AM_MAKEINFOFLAGS = -I $(srcdir) --css-include=$(srcdir)/texi.css -D gpgone YAT2M_OPTIONS = -I $(srcdir) -D gpgone \ --release "GnuPG @PACKAGE_VERSION@" --source "GNU Privacy Guard 1.4" all: all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi $(srcdir)/gnupg1.info: gnupg1.texi $(srcdir)/version.texi $(gnupg1_TEXINFOS) gnupg1.dvi: gnupg1.texi $(srcdir)/version.texi $(gnupg1_TEXINFOS) gnupg1.pdf: gnupg1.texi $(srcdir)/version.texi $(gnupg1_TEXINFOS) gnupg1.html: gnupg1.texi $(srcdir)/version.texi $(gnupg1_TEXINFOS) $(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti $(srcdir)/stamp-vti: gnupg1.texi $(top_srcdir)/configure @(dir=.; test -f ./gnupg1.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/scripts/mdate-sh $$dir/gnupg1.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp @cmp -s vti.tmp $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi"; \ cp vti.tmp $(srcdir)/version.texi) -@rm -f vti.tmp @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp maintainer-clean-vti: @MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf gnupg1.t2d gnupg1.t2p clean-aminfo: -test -z "gnupg1.dvi gnupg1.pdf gnupg1.ps gnupg1.html" \ || rm -rf gnupg1.dvi gnupg1.pdf gnupg1.ps gnupg1.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgdatadir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgdatadir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info dist-hook check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) $(MANS) $(DATA) installdirs: for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-aminfo clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-man install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-pdf-am uninstall-pkgdataDATA \ uninstall-ps-am uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ cscopelist-am ctags-am dist-hook dist-info distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-pkgdataDATA \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-vti pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am uninstall-dvi-am \ uninstall-html-am uninstall-info-am uninstall-man \ uninstall-man1 uninstall-pdf-am uninstall-pkgdataDATA \ uninstall-ps-am yat2m: Makefile yat2m.c $(CC_FOR_BUILD) -o $@ $(srcdir)/yat2m.c yat2m-stamp: $(myman_sources) @rm -f yat2m-stamp.tmp @touch yat2m-stamp.tmp for file in $(myman_sources) ; do \ ./yat2m $(YAT2M_OPTIONS) --store \ `test -f '$$file' || echo '$(srcdir)/'`$$file ; done @mv -f yat2m-stamp.tmp $@ yat2m-stamp: yat2m $(myman_pages) : yat2m-stamp @if test -f $@; then :; else \ trap 'rm -rf yat2m-stamp yat2m-lock' 1 2 13 15; \ if mkdir yat2m-lock 2>/dev/null; then \ rm -f yat2m-stamp; \ $(MAKE) $(AM_MAKEFLAGS) yat2m-stamp; \ rmdir yat2m-lock; \ else \ while test -d yat2m-lock; do sleep 1; done; \ test -f yat2m-stamp; exit $$?; \ fi; \ fi dist-hook: @if test "`wc -c < gpg.1`" -lt 200; then \ echo 'ERROR: dummy man page'; false; fi update-source: @echo Not anymore used - we now keep docs for 1.x separate @echo from GnuPG-2. # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/doc/version.texi0000644000175000017500000000014712635457221012775 00000000000000@set UPDATED 19 December 2015 @set UPDATED-MONTH December 2015 @set EDITION 1.4.20 @set VERSION 1.4.20 gnupg-1.4.20/doc/yat2m.c0000644000175000017500000012404112635262326011615 00000000000000/* yat2m.c - Yet Another Texi 2 Man converter * Copyright (C) 2005, 2013 g10 Code GmbH * Copyright (C) 2006, 2008, 2011 Free Software Foundation, Inc. * * This program 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 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /* This is a simple texinfo to man page converter. It needs some special markup in th e texinfo and tries best to get a create man page. It has been designed for the GnuPG man pages and thus only a few texinfo commands are supported. To use this you need to add the following macros into your texinfo source: @macro manpage {a} @end macro @macro mansect {a} @end macro @macro manpause @end macro @macro mancont @end macro They are used by yat2m to select parts of the Texinfo which should go into the man page. These macros need to be used without leading left space. Processing starts after a "manpage" macro has been seen. "mansect" identifies the section and yat2m make sure to emit the sections in the proper order. Note that @mansect skips the next input line if that line begins with @section, @subsection or @chapheading. To insert verbatim troff markup, the following texinfo code may be used: @ifset manverb .B whateever you want @end ifset alternativly a special comment may be used: @c man:.B whatever you want This is useful in case you need just one line. If you want to include parts only in the man page but keep the texinfo translation you may use: @ifset isman stuff to be rendered only on man pages @end ifset or to exclude stuff from man pages: @ifclear isman stuff not to be rendered on man pages @end ifclear the keyword @section is ignored, however @subsection gets rendered as ".SS". @menu is completely skipped. Several man pages may be extracted from one file, either using the --store or the --select option. If you want to indent tables in the source use this style: @table foo @item @item @table @item @end @end Don't change the indentation within a table and keep the same number of white space at the start of the line. yat2m simply detects the number of white spaces in front of an @item and remove this number of spaces from all following lines until a new @item is found or there are less spaces than for the last @item. Note that @* does only work correctly if used at the end of an input line. */ #include #include #include #include #include #include #include #include #include #define PGM "yat2m" #define VERSION "1.0" /* The maximum length of a line including the linefeed and one extra character. */ #define LINESIZE 1024 /* Number of allowed condition nestings. */ #define MAX_CONDITION_NESTING 10 /* Option flags. */ static int verbose; static int quiet; static int debug; static const char *opt_source; static const char *opt_release; static const char *opt_select; static const char *opt_include; static int opt_store; /* Flag to keep track whether any error occurred. */ static int any_error; /* Object to keep macro definitions. */ struct macro_s { struct macro_s *next; char *value; /* Malloced value. */ char name[1]; }; typedef struct macro_s *macro_t; /* List of all defined macros. */ static macro_t macrolist; /* List of variables set by @set. */ static macro_t variablelist; /* List of global macro names. The value part is not used. */ static macro_t predefinedmacrolist; /* Object to keep track of @isset and @ifclear. */ struct condition_s { int manverb; /* "manverb" needs special treatment. */ int isset; /* This is an @isset condition. */ char name[1]; /* Name of the condition macro. */ }; typedef struct condition_s *condition_t; /* The stack used to evaluate conditions. And the current states. */ static condition_t condition_stack[MAX_CONDITION_NESTING]; static int condition_stack_idx; static int cond_is_active; /* State of ifset/ifclear */ static int cond_in_verbatim; /* State of "manverb". */ /* Object to store one line of content. */ struct line_buffer_s { struct line_buffer_s *next; int verbatim; /* True if LINE contains verbatim data. The default is Texinfo source. */ char *line; }; typedef struct line_buffer_s *line_buffer_t; /* Object to collect the data of a section. */ struct section_buffer_s { char *name; /* Malloced name of the section. This may be NULL to indicate this slot is not used. */ line_buffer_t lines; /* Linked list with the lines of the section. */ line_buffer_t *lines_tail; /* Helper for faster appending to the linked list. */ line_buffer_t last_line; /* Points to the last line appended. */ }; typedef struct section_buffer_s *section_buffer_t; /* Variable to keep info about the current page together. */ static struct { /* Filename of the current page or NULL if no page is active. Malloced. */ char *name; /* Number of allocated elements in SECTIONS below. */ size_t n_sections; /* Array with the data of the sections. */ section_buffer_t sections; } thepage; /* The list of standard section names. COMMANDS and ASSUAN are GnuPG specific. */ static const char * const standard_sections[] = { "NAME", "SYNOPSIS", "DESCRIPTION", "RETURN VALUE", "EXIT STATUS", "ERROR HANDLING", "ERRORS", "COMMANDS", "OPTIONS", "USAGE", "EXAMPLES", "FILES", "ENVIRONMENT", "DIAGNOSTICS", "SECURITY", "CONFORMING TO", "ASSUAN", "NOTES", "BUGS", "AUTHOR", "SEE ALSO", NULL }; /*-- Local prototypes. --*/ static void proc_texi_buffer (FILE *fp, const char *line, size_t len, int *table_level, int *eol_action); /* Print diagnostic message and exit with failure. */ static void die (const char *format, ...) { va_list arg_ptr; fflush (stdout); fprintf (stderr, "%s: ", PGM); va_start (arg_ptr, format); vfprintf (stderr, format, arg_ptr); va_end (arg_ptr); putc ('\n', stderr); exit (1); } /* Print diagnostic message. */ static void err (const char *format, ...) { va_list arg_ptr; fflush (stdout); if (strncmp (format, "%s:%d:", 6)) fprintf (stderr, "%s: ", PGM); va_start (arg_ptr, format); vfprintf (stderr, format, arg_ptr); va_end (arg_ptr); putc ('\n', stderr); any_error = 1; } /* Print diagnostic message. */ static void inf (const char *format, ...) { va_list arg_ptr; fflush (stdout); fprintf (stderr, "%s: ", PGM); va_start (arg_ptr, format); vfprintf (stderr, format, arg_ptr); va_end (arg_ptr); putc ('\n', stderr); } static void * xmalloc (size_t n) { void *p = malloc (n); if (!p) die ("out of core: %s", strerror (errno)); return p; } static void * xcalloc (size_t n, size_t m) { void *p = calloc (n, m); if (!p) die ("out of core: %s", strerror (errno)); return p; } static void * xrealloc (void *old, size_t n) { void *p = realloc (old, n); if (!p) die ("out of core: %s", strerror (errno)); return p; } static char * xstrdup (const char *string) { void *p = malloc (strlen (string)+1); if (!p) die ("out of core: %s", strerror (errno)); strcpy (p, string); return p; } /* Uppercase the ascii characters in STRING. */ static char * ascii_strupr (char *string) { char *p; for (p = string; *p; p++) if (!(*p & 0x80)) *p = toupper (*p); return string; } /* Return the current date as an ISO string. */ const char * isodatestring (void) { static char buffer[11+5]; struct tm *tp; time_t atime = time (NULL); if (atime < 0) strcpy (buffer, "????" "-??" "-??"); else { tp = gmtime (&atime); sprintf (buffer,"%04d-%02d-%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday ); } return buffer; } /* Add NAME to the list of predefined macros which are global for all files. */ static void add_predefined_macro (const char *name) { macro_t m; for (m=predefinedmacrolist; m; m = m->next) if (!strcmp (m->name, name)) break; if (!m) { m = xcalloc (1, sizeof *m + strlen (name)); strcpy (m->name, name); m->next = predefinedmacrolist; predefinedmacrolist = m; } } /* Create or update a macro with name MACRONAME and set its values TO MACROVALUE. Note that ownership of the macro value is transferred to this function. */ static void set_macro (const char *macroname, char *macrovalue) { macro_t m; for (m=macrolist; m; m = m->next) if (!strcmp (m->name, macroname)) break; if (m) free (m->value); else { m = xcalloc (1, sizeof *m + strlen (macroname)); strcpy (m->name, macroname); m->next = macrolist; macrolist = m; } m->value = macrovalue; macrovalue = NULL; } /* Create or update a variable with name and value given in NAMEANDVALUE. */ static void set_variable (char *nameandvalue) { macro_t m; const char *value; char *p; for (p = nameandvalue; *p && *p != ' ' && *p != '\t'; p++) ; if (!*p) value = ""; else { *p++ = 0; while (*p == ' ' || *p == '\t') p++; value = p; } for (m=variablelist; m; m = m->next) if (!strcmp (m->name, nameandvalue)) break; if (m) free (m->value); else { m = xcalloc (1, sizeof *m + strlen (nameandvalue)); strcpy (m->name, nameandvalue); m->next = variablelist; variablelist = m; } m->value = xstrdup (value); } /* Return true if the macro or variable NAME is set, i.e. not the empty string and not evaluating to 0. */ static int macro_set_p (const char *name) { macro_t m; for (m = macrolist; m ; m = m->next) if (!strcmp (m->name, name)) break; if (!m) for (m = variablelist; m ; m = m->next) if (!strcmp (m->name, name)) break; if (!m || !m->value || !*m->value) return 0; if ((*m->value & 0x80) || !isdigit (*m->value)) return 1; /* Not a digit but some other string. */ return !!atoi (m->value); } /* Evaluate the current conditions. */ static void evaluate_conditions (const char *fname, int lnr) { int i; /* for (i=0; i < condition_stack_idx; i++) */ /* inf ("%s:%d: stack[%d] %s %s %c", */ /* fname, lnr, i, condition_stack[i]->isset? "set":"clr", */ /* condition_stack[i]->name, */ /* (macro_set_p (condition_stack[i]->name) */ /* ^ !condition_stack[i]->isset)? 't':'f'); */ cond_is_active = 1; cond_in_verbatim = 0; if (condition_stack_idx) { for (i=0; i < condition_stack_idx; i++) { if (condition_stack[i]->manverb) cond_in_verbatim = (macro_set_p (condition_stack[i]->name) ^ !condition_stack[i]->isset); else if (!(macro_set_p (condition_stack[i]->name) ^ !condition_stack[i]->isset)) { cond_is_active = 0; break; } } } /* inf ("%s:%d: active=%d verbatim=%d", */ /* fname, lnr, cond_is_active, cond_in_verbatim); */ } /* Push a condition with condition macro NAME onto the stack. If ISSET is true, a @isset condition is pushed. */ static void push_condition (const char *name, int isset, const char *fname, int lnr) { condition_t cond; int manverb = 0; if (condition_stack_idx >= MAX_CONDITION_NESTING) { err ("%s:%d: condition nested too deep", fname, lnr); return; } if (!strcmp (name, "manverb")) { if (!isset) { err ("%s:%d: using \"@ifclear manverb\" is not allowed", fname, lnr); return; } manverb = 1; } cond = xcalloc (1, sizeof *cond + strlen (name)); cond->manverb = manverb; cond->isset = isset; strcpy (cond->name, name); condition_stack[condition_stack_idx++] = cond; evaluate_conditions (fname, lnr); } /* Remove the last condition from the stack. ISSET is used for error reporting. */ static void pop_condition (int isset, const char *fname, int lnr) { if (!condition_stack_idx) { err ("%s:%d: unbalanced \"@end %s\"", fname, lnr, isset?"isset":"isclear"); return; } condition_stack_idx--; free (condition_stack[condition_stack_idx]); condition_stack[condition_stack_idx] = NULL; evaluate_conditions (fname, lnr); } /* Return a section buffer for the section NAME. Allocate a new buffer if this is a new section. Keep track of the sections in THEPAGE. This function may reallocate the section array in THEPAGE. */ static section_buffer_t get_section_buffer (const char *name) { int i; section_buffer_t sect; /* If there is no section we put everything into the required NAME section. Given that this is the first one listed it is likely that error are easily visible. */ if (!name) name = "NAME"; for (i=0; i < thepage.n_sections; i++) { sect = thepage.sections + i; if (sect->name && !strcmp (name, sect->name)) return sect; } for (i=0; i < thepage.n_sections; i++) if (!thepage.sections[i].name) break; if (i < thepage.n_sections) sect = thepage.sections + i; else { /* We need to allocate or reallocate the section array. */ size_t old_n = thepage.n_sections; size_t new_n = 20; if (!old_n) thepage.sections = xcalloc (new_n, sizeof *thepage.sections); else { thepage.sections = xrealloc (thepage.sections, ((old_n + new_n) * sizeof *thepage.sections)); memset (thepage.sections + old_n, 0, new_n * sizeof *thepage.sections); } thepage.n_sections += new_n; /* Setup the tail pointers. */ for (i=old_n; i < thepage.n_sections; i++) { sect = thepage.sections + i; sect->lines_tail = §->lines; } sect = thepage.sections + old_n; } /* Store the name. */ assert (!sect->name); sect->name = xstrdup (name); return sect; } /* Add the content of LINE to the section named SECTNAME. */ static void add_content (const char *sectname, char *line, int verbatim) { section_buffer_t sect; line_buffer_t lb; sect = get_section_buffer (sectname); if (sect->last_line && !sect->last_line->verbatim == !verbatim) { /* Lets append that line to the last one. We do this to keep all lines of the same kind (i.e.verbatim or not) together in one large buffer. */ size_t n1, n; lb = sect->last_line; n1 = strlen (lb->line); n = n1 + 1 + strlen (line) + 1; lb->line = xrealloc (lb->line, n); strcpy (lb->line+n1, "\n"); strcpy (lb->line+n1+1, line); } else { lb = xcalloc (1, sizeof *lb); lb->verbatim = verbatim; lb->line = xstrdup (line); sect->last_line = lb; *sect->lines_tail = lb; sect->lines_tail = &lb->next; } } /* Prepare for a new man page using the filename NAME. */ static void start_page (char *name) { if (verbose) inf ("starting page '%s'", name); assert (!thepage.name); thepage.name = xstrdup (name); thepage.n_sections = 0; } /* Write the .TH entry of the current page. Return -1 if there is a problem with the page. */ static int write_th (FILE *fp) { char *name, *p; fputs (".\\\" Created from Texinfo source by yat2m " VERSION "\n", fp); name = ascii_strupr (xstrdup (thepage.name)); p = strrchr (name, '.'); if (!p || !p[1]) { err ("no section name in man page '%s'", thepage.name); free (name); return -1; } *p++ = 0; fprintf (fp, ".TH %s %s %s \"%s\" \"%s\"\n", name, p, isodatestring (), opt_release, opt_source); free (name); return 0; } /* Process the texinfo command COMMAND (without the leading @) and write output if needed to FP. REST is the remainer of the line which should either point to an opening brace or to a white space. The function returns the number of characters already processed from REST. LEN is the usable length of REST. TABLE_LEVEL is used to control the indentation of tables. */ static size_t proc_texi_cmd (FILE *fp, const char *command, const char *rest, size_t len, int *table_level, int *eol_action) { static struct { const char *name; /* Name of the command. */ int what; /* What to do with this command. */ const char *lead_in; /* String to print with a opening brace. */ const char *lead_out;/* String to print with the closing brace. */ } cmdtbl[] = { { "command", 0, "\\fB", "\\fR" }, { "code", 0, "\\fB", "\\fR" }, { "sc", 0, "\\fB", "\\fR" }, { "var", 0, "\\fI", "\\fR" }, { "samp", 0, "\\(aq", "\\(aq" }, { "file", 0, "\\(oq\\fI","\\fR\\(cq" }, { "env", 0, "\\(oq\\fI","\\fR\\(cq" }, { "acronym", 0 }, { "dfn", 0 }, { "option", 0, "\\fB", "\\fR" }, { "example", 1, ".RS 2\n.nf\n" }, { "smallexample", 1, ".RS 2\n.nf\n" }, { "asis", 7 }, { "anchor", 7 }, { "cartouche", 1 }, { "xref", 0, "see: [", "]" }, { "pxref", 0, "see: [", "]" }, { "uref", 0, "(\\fB", "\\fR)" }, { "footnote",0, " ([", "])" }, { "emph", 0, "\\fI", "\\fR" }, { "w", 1 }, { "c", 5 }, { "opindex", 1 }, { "cpindex", 1 }, { "cindex", 1 }, { "noindent", 0 }, { "section", 1 }, { "chapter", 1 }, { "subsection", 6, "\n.SS " }, { "chapheading", 0}, { "item", 2, ".TP\n.B " }, { "itemx", 2, ".TP\n.B " }, { "table", 3 }, { "itemize", 3 }, { "bullet", 0, "* " }, { "*", 0, "\n.br"}, { "/", 0 }, { "end", 4 }, { "quotation",1, ".RS\n\\fB" }, { "value", 8 }, { NULL } }; size_t n; int i; const char *s; const char *lead_out = NULL; int ignore_args = 0; for (i=0; cmdtbl[i].name && strcmp (cmdtbl[i].name, command); i++) ; if (cmdtbl[i].name) { s = cmdtbl[i].lead_in; if (s) fputs (s, fp); lead_out = cmdtbl[i].lead_out; switch (cmdtbl[i].what) { case 1: /* Throw away the entire line. */ s = memchr (rest, '\n', len); return s? (s-rest)+1 : len; case 2: /* Handle @item. */ break; case 3: /* Handle table. */ if (++(*table_level) > 1) fputs (".RS\n", fp); /* Now throw away the entire line. */ s = memchr (rest, '\n', len); return s? (s-rest)+1 : len; break; case 4: /* Handle end. */ for (s=rest, n=len; n && (*s == ' ' || *s == '\t'); s++, n--) ; if (n >= 5 && !memcmp (s, "table", 5) && (!n || s[5] == ' ' || s[5] == '\t' || s[5] == '\n')) { if ((*table_level)-- > 1) fputs (".RE\n", fp); } else if (n >= 7 && !memcmp (s, "example", 7) && (!n || s[7] == ' ' || s[7] == '\t' || s[7] == '\n')) { fputs (".fi\n.RE\n", fp); } else if (n >= 12 && !memcmp (s, "smallexample", 12) && (!n || s[12] == ' ' || s[12] == '\t' || s[12] == '\n')) { fputs (".fi\n.RE\n", fp); } else if (n >= 9 && !memcmp (s, "quotation", 9) && (!n || s[9] == ' ' || s[9] == '\t' || s[9] == '\n')) { fputs ("\\fR\n.RE\n", fp); } /* Now throw away the entire line. */ s = memchr (rest, '\n', len); return s? (s-rest)+1 : len; case 5: /* Handle special comments. */ for (s=rest, n=len; n && (*s == ' ' || *s == '\t'); s++, n--) ; if (n >= 4 && !memcmp (s, "man:", 4)) { for (s+=4, n-=4; n && *s != '\n'; n--, s++) putc (*s, fp); putc ('\n', fp); } /* Now throw away the entire line. */ s = memchr (rest, '\n', len); return s? (s-rest)+1 : len; case 6: *eol_action = 1; break; case 7: ignore_args = 1; break; case 8: ignore_args = 1; if (*rest != '{') { err ("opening brace for command '%s' missing", command); return len; } else { /* Find closing brace. */ for (s=rest+1, n=1; *s && n < len; s++, n++) if (*s == '}') break; if (*s != '}') { err ("closing brace for command '%s' not found", command); return len; } else { size_t len = s - (rest + 1); macro_t m; for (m = variablelist; m; m = m->next) if (strlen (m->name) == len &&!strncmp (m->name, rest+1, len)) break; if (m) fputs (m->value, fp); else inf ("texinfo variable '%.*s' is not set", (int)len, rest+1); } } break; default: break; } } else /* macro */ { macro_t m; for (m = macrolist; m ; m = m->next) if (!strcmp (m->name, command)) break; if (m) { proc_texi_buffer (fp, m->value, strlen (m->value), table_level, eol_action); ignore_args = 1; /* Parameterized macros are not yet supported. */ } else inf ("texinfo command '%s' not supported (%.*s)", command, ((s = memchr (rest, '\n', len)), (s? (s-rest) : len)), rest); } if (*rest == '{') { /* Find matching closing brace. */ for (s=rest+1, n=1, i=1; i && *s && n < len; s++, n++) if (*s == '{') i++; else if (*s == '}') i--; if (i) { err ("closing brace for command '%s' not found", command); return len; } if (n > 2 && !ignore_args) proc_texi_buffer (fp, rest+1, n-2, table_level, eol_action); } else n = 0; if (lead_out) fputs (lead_out, fp); return n; } /* Process the string LINE with LEN bytes of Texinfo content. */ static void proc_texi_buffer (FILE *fp, const char *line, size_t len, int *table_level, int *eol_action) { const char *s; char cmdbuf[256]; int cmdidx = 0; int in_cmd = 0; size_t n; for (s=line; *s && len; s++, len--) { if (in_cmd) { if (in_cmd == 1) { switch (*s) { case '@': case '{': case '}': putc (*s, fp); in_cmd = 0; break; case ':': /* Not ending a sentence flag. */ in_cmd = 0; break; case '.': case '!': case '?': /* Ending a sentence. */ putc (*s, fp); in_cmd = 0; break; case ' ': case '\t': case '\n': /* Non collapsing spaces. */ putc (*s, fp); in_cmd = 0; break; default: cmdidx = 0; cmdbuf[cmdidx++] = *s; in_cmd++; break; } } else if (*s == '{' || *s == ' ' || *s == '\t' || *s == '\n') { cmdbuf[cmdidx] = 0; n = proc_texi_cmd (fp, cmdbuf, s, len, table_level, eol_action); assert (n <= len); s += n; len -= n; s--; len++; in_cmd = 0; } else if (cmdidx < sizeof cmdbuf -1) cmdbuf[cmdidx++] = *s; else { err ("texinfo command too long - ignored"); in_cmd = 0; } } else if (*s == '@') in_cmd = 1; else if (*s == '\n') { switch (*eol_action) { case 1: /* Create a dummy paragraph. */ fputs ("\n\\ \n", fp); break; default: putc (*s, fp); } *eol_action = 0; } else if (*s == '\\') fputs ("\\\\", fp); else putc (*s, fp); } if (in_cmd > 1) { cmdbuf[cmdidx] = 0; n = proc_texi_cmd (fp, cmdbuf, s, len, table_level, eol_action); assert (n <= len); s += n; len -= n; s--; len++; in_cmd = 0; } } /* Do something with the Texinfo line LINE. */ static void parse_texi_line (FILE *fp, const char *line, int *table_level) { int eol_action = 0; /* A quick test whether there are any texinfo commands. */ if (!strchr (line, '@')) { fputs (line, fp); putc ('\n', fp); return; } proc_texi_buffer (fp, line, strlen (line), table_level, &eol_action); putc ('\n', fp); } /* Write all the lines LINES to FP. */ static void write_content (FILE *fp, line_buffer_t lines) { line_buffer_t line; int table_level = 0; for (line = lines; line; line = line->next) { if (line->verbatim) { fputs (line->line, fp); putc ('\n', fp); } else { /* fputs ("TEXI---", fp); */ /* fputs (line->line, fp); */ /* fputs ("---\n", fp); */ parse_texi_line (fp, line->line, &table_level); } } } static int is_standard_section (const char *name) { int i; const char *s; for (i=0; (s=standard_sections[i]); i++) if (!strcmp (s, name)) return 1; return 0; } /* Finish a page; that is sort the data and write it out to the file. */ static void finish_page (void) { FILE *fp; section_buffer_t sect = NULL; int idx; const char *s; int i; if (!thepage.name) return; /* No page active. */ if (verbose) inf ("finishing page '%s'", thepage.name); if (opt_select) { if (!strcmp (opt_select, thepage.name)) { inf ("selected '%s'", thepage.name ); fp = stdout; } else { fp = fopen ( "/dev/null", "w" ); if (!fp) die ("failed to open /dev/null: %s\n", strerror (errno)); } } else if (opt_store) { inf ("writing '%s'", thepage.name ); fp = fopen ( thepage.name, "w" ); if (!fp) die ("failed to create '%s': %s\n", thepage.name, strerror (errno)); } else fp = stdout; if (write_th (fp)) goto leave; for (idx=0; (s=standard_sections[idx]); idx++) { for (i=0; i < thepage.n_sections; i++) { sect = thepage.sections + i; if (sect->name && !strcmp (s, sect->name)) break; } if (i == thepage.n_sections) sect = NULL; if (sect) { fprintf (fp, ".SH %s\n", sect->name); write_content (fp, sect->lines); /* Now continue with all non standard sections directly following this one. */ for (i++; i < thepage.n_sections; i++) { sect = thepage.sections + i; if (sect->name && is_standard_section (sect->name)) break; if (sect->name) { fprintf (fp, ".SH %s\n", sect->name); write_content (fp, sect->lines); } } } } leave: if (fp != stdout) fclose (fp); free (thepage.name); thepage.name = NULL; /* FIXME: Cleanup the content. */ } /* Parse one Texinfo file and create manpages according to the embedded instructions. */ static void parse_file (const char *fname, FILE *fp, char **section_name, int in_pause) { char *line; int lnr = 0; /* Fixme: The following state variables don't carry over to include files. */ int skip_to_end = 0; /* Used to skip over menu entries. */ int skip_sect_line = 0; /* Skip after @mansect. */ int item_indent = 0; /* How far is the current @item indented. */ /* Helper to define a macro. */ char *macroname = NULL; char *macrovalue = NULL; size_t macrovaluesize = 0; size_t macrovalueused = 0; line = xmalloc (LINESIZE); while (fgets (line, LINESIZE, fp)) { size_t n = strlen (line); int got_line = 0; char *p, *pend; lnr++; if (!n || line[n-1] != '\n') { err ("%s:%d: trailing linefeed missing, line too long or " "embedded Nul character", fname, lnr); break; } line[--n] = 0; /* Kludge to allow indentation of tables. */ for (p=line; *p == ' ' || *p == '\t'; p++) ; if (*p) { if (*p == '@' && !strncmp (p+1, "item", 4)) item_indent = p - line; /* Set a new indent level. */ else if (p - line < item_indent) item_indent = 0; /* Switch off indention. */ if (item_indent) { memmove (line, line+item_indent, n - item_indent + 1); n -= item_indent; } } if (*line == '@') { for (p=line+1, n=1; *p && *p != ' ' && *p != '\t'; p++) n++; while (*p == ' ' || *p == '\t') p++; } else p = line; /* Take action on macro. */ if (macroname) { if (n == 4 && !memcmp (line, "@end", 4) && (line[4]==' '||line[4]=='\t'||!line[4]) && !strncmp (p, "macro", 5) && (p[5]==' '||p[5]=='\t'||!p[5])) { if (macrovalueused) macrovalue[--macrovalueused] = 0; /* Kill the last LF. */ macrovalue[macrovalueused] = 0; /* Terminate macro. */ macrovalue = xrealloc (macrovalue, macrovalueused+1); set_macro (macroname, macrovalue); macrovalue = NULL; free (macroname); macroname = NULL; } else { if (macrovalueused + strlen (line) + 2 >= macrovaluesize) { macrovaluesize += strlen (line) + 256; macrovalue = xrealloc (macrovalue, macrovaluesize); } strcpy (macrovalue+macrovalueused, line); macrovalueused += strlen (line); macrovalue[macrovalueused++] = '\n'; } continue; } if (n >= 5 && !memcmp (line, "@node", 5) && (line[5]==' '||line[5]=='\t'||!line[5])) { /* Completey ignore @node lines. */ continue; } if (skip_sect_line) { skip_sect_line = 0; if (!strncmp (line, "@section", 8) || !strncmp (line, "@subsection", 11) || !strncmp (line, "@chapheading", 12)) continue; } /* We only parse lines we need and ignore the rest. There are a few macros used to control this as well as one @ifset command. Parts we know about are saved away into containers separate for each section. */ /* First process ifset/ifclear commands. */ if (*line == '@') { if (n == 6 && !memcmp (line, "@ifset", 6) && (line[6]==' '||line[6]=='\t')) { for (p=line+7; *p == ' ' || *p == '\t'; p++) ; if (!*p) { err ("%s:%d: name missing after \"@ifset\"", fname, lnr); continue; } for (pend=p; *pend && *pend != ' ' && *pend != '\t'; pend++) ; *pend = 0; /* Ignore rest of the line. */ push_condition (p, 1, fname, lnr); continue; } else if (n == 8 && !memcmp (line, "@ifclear", 8) && (line[8]==' '||line[8]=='\t')) { for (p=line+9; *p == ' ' || *p == '\t'; p++) ; if (!*p) { err ("%s:%d: name missing after \"@ifsclear\"", fname, lnr); continue; } for (pend=p; *pend && *pend != ' ' && *pend != '\t'; pend++) ; *pend = 0; /* Ignore rest of the line. */ push_condition (p, 0, fname, lnr); continue; } else if (n == 4 && !memcmp (line, "@end", 4) && (line[4]==' '||line[4]=='\t') && !strncmp (p, "ifset", 5) && (p[5]==' '||p[5]=='\t'||!p[5])) { pop_condition (1, fname, lnr); continue; } else if (n == 4 && !memcmp (line, "@end", 4) && (line[4]==' '||line[4]=='\t') && !strncmp (p, "ifclear", 7) && (p[7]==' '||p[7]=='\t'||!p[7])) { pop_condition (0, fname, lnr); continue; } } /* Take action on ifset/ifclear. */ if (!cond_is_active) continue; /* Process commands. */ if (*line == '@') { if (skip_to_end && n == 4 && !memcmp (line, "@end", 4) && (line[4]==' '||line[4]=='\t'||!line[4])) { skip_to_end = 0; } else if (cond_in_verbatim) { got_line = 1; } else if (n == 6 && !memcmp (line, "@macro", 6)) { macroname = xstrdup (p); macrovalue = xmalloc ((macrovaluesize = 1024)); macrovalueused = 0; } else if (n == 4 && !memcmp (line, "@set", 4)) { set_variable (p); } else if (n == 8 && !memcmp (line, "@manpage", 8)) { free (*section_name); *section_name = NULL; finish_page (); start_page (p); in_pause = 0; } else if (n == 8 && !memcmp (line, "@mansect", 8)) { if (!thepage.name) err ("%s:%d: section outside of a man page", fname, lnr); else { free (*section_name); *section_name = ascii_strupr (xstrdup (p)); in_pause = 0; skip_sect_line = 1; } } else if (n == 9 && !memcmp (line, "@manpause", 9)) { if (!*section_name) err ("%s:%d: pausing outside of a man section", fname, lnr); else if (in_pause) err ("%s:%d: already pausing", fname, lnr); else in_pause = 1; } else if (n == 8 && !memcmp (line, "@mancont", 8)) { if (!*section_name) err ("%s:%d: continue outside of a man section", fname, lnr); else if (!in_pause) err ("%s:%d: continue while not pausing", fname, lnr); else in_pause = 0; } else if (n == 5 && !memcmp (line, "@menu", 5) && (line[5]==' '||line[5]=='\t'||!line[5])) { skip_to_end = 1; } else if (n == 8 && !memcmp (line, "@include", 8) && (line[8]==' '||line[8]=='\t'||!line[8])) { char *incname = xstrdup (p); FILE *incfp = fopen (incname, "r"); if (!incfp && opt_include && *opt_include && *p != '/') { free (incname); incname = xmalloc (strlen (opt_include) + 1 + strlen (p) + 1); strcpy (incname, opt_include); if ( incname[strlen (incname)-1] != '/' ) strcat (incname, "/"); strcat (incname, p); incfp = fopen (incname, "r"); } if (!incfp) err ("can't open include file '%s':%s", incname, strerror (errno)); else { parse_file (incname, incfp, section_name, in_pause); fclose (incfp); } free (incname); } else if (n == 4 && !memcmp (line, "@bye", 4) && (line[4]==' '||line[4]=='\t'||!line[4])) { break; } else if (!skip_to_end) got_line = 1; } else if (!skip_to_end) got_line = 1; if (got_line && cond_in_verbatim) add_content (*section_name, line, 1); else if (got_line && thepage.name && *section_name && !in_pause) add_content (*section_name, line, 0); } if (ferror (fp)) err ("%s:%d: read error: %s", fname, lnr, strerror (errno)); free (macroname); free (macrovalue); free (line); } static void top_parse_file (const char *fname, FILE *fp) { char *section_name = NULL; /* Name of the current section or NULL if not in a section. */ macro_t m; while (macrolist) { macro_t next = macrolist->next; free (macrolist->value); free (macrolist); macrolist = next; } while (variablelist) { macro_t next = variablelist->next; free (variablelist->value); free (variablelist); variablelist = next; } for (m=predefinedmacrolist; m; m = m->next) set_macro (m->name, xstrdup ("1")); cond_is_active = 1; cond_in_verbatim = 0; parse_file (fname, fp, §ion_name, 0); free (section_name); finish_page (); } int main (int argc, char **argv) { int last_argc = -1; opt_source = "GNU"; opt_release = ""; /* Define default macros. The trick is that these macros are not defined when using the actual texinfo renderer. */ add_predefined_macro ("isman"); add_predefined_macro ("manverb"); /* Option parsing. */ if (argc) { argc--; argv++; } while (argc && last_argc != argc ) { last_argc = argc; if (!strcmp (*argv, "--")) { argc--; argv++; break; } else if (!strcmp (*argv, "--help")) { puts ( "Usage: " PGM " [OPTION] [FILE]\n" "Extract man pages from a Texinfo source.\n\n" " --source NAME use NAME as source field\n" " --release STRING use STRING as the release field\n" " --store write output using @manpage name\n" " --select NAME only output pages with @manpage NAME\n" " --verbose enable extra informational output\n" " --debug enable additional debug output\n" " --help display this help and exit\n" " -I DIR also search in include DIR\n" " -D gpgone the only useable define\n\n" "With no FILE, or when FILE is -, read standard input.\n\n" "Report bugs to ."); exit (0); } else if (!strcmp (*argv, "--version")) { puts (PGM " " VERSION "\n" "Copyright (C) 2005 g10 Code GmbH\n" "This program comes with ABSOLUTELY NO WARRANTY.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions. See the file COPYING for details."); exit (0); } else if (!strcmp (*argv, "--verbose")) { verbose = 1; argc--; argv++; } else if (!strcmp (*argv, "--quiet")) { quiet = 1; argc--; argv++; } else if (!strcmp (*argv, "--debug")) { verbose = debug = 1; argc--; argv++; } else if (!strcmp (*argv, "--source")) { argc--; argv++; if (argc) { opt_source = *argv; argc--; argv++; } } else if (!strcmp (*argv, "--release")) { argc--; argv++; if (argc) { opt_release = *argv; argc--; argv++; } } else if (!strcmp (*argv, "--store")) { opt_store = 1; argc--; argv++; } else if (!strcmp (*argv, "--select")) { argc--; argv++; if (argc) { opt_select = strrchr (*argv, '/'); if (opt_select) opt_select++; else opt_select = *argv; argc--; argv++; } } else if (!strcmp (*argv, "-I")) { argc--; argv++; if (argc) { opt_include = *argv; argc--; argv++; } } else if (!strcmp (*argv, "-D")) { argc--; argv++; if (argc) { add_predefined_macro (*argv); argc--; argv++; } } } if (argc > 1) die ("usage: " PGM " [OPTION] [FILE] (try --help for more information)\n"); /* Start processing. */ if (argc && strcmp (*argv, "-")) { FILE *fp = fopen (*argv, "rb"); if (!fp) die ("%s:0: can't open file: %s", *argv, strerror (errno)); top_parse_file (*argv, fp); fclose (fp); } else top_parse_file ("-", stdin); return !!any_error; } /* Local Variables: compile-command: "gcc -Wall -g -Wall -o yat2m yat2m.c" End: */ gnupg-1.4.20/doc/gnupg1.texi0000644000175000017500000000640712635262326012516 00000000000000\input texinfo @c -*-texinfo-*- @c %**start of header @setfilename gnupg1.info @include version.texi @settitle Using the GnuPG Version 1.4 @c A couple of macros with no effect on texinfo @c but used by the yat2m processor. @macro manpage {a} @end macro @macro mansect {a} @end macro @macro manpause @end macro @macro mancont @end macro @c Create a separate index for command line options. @defcodeindex op @c Merge the standard indexes into a single one. @syncodeindex fn cp @syncodeindex vr cp @syncodeindex ky cp @syncodeindex pg cp @syncodeindex tp cp @c %**end of header @copying This is the @cite{The GNU Privacy Guard Manual} (@value{VERSION}, @value{UPDATED}). @iftex Published by the Free Software Foundation@* 51 Franklin St, Fifth Floor@* Boston, MA 02110-1301 USA @end iftex Copyright @copyright{} 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The text of the license can be found in the section entitled ``Copying''. @end quotation @end copying @dircategory GNU Utilities @direntry * gpg: (gnupg1). OpenPGP encryption and signing tool (v1). @end direntry @c @c Printing stuff taken from gcc. @c @macro gnupgtabopt{body} @code{\body\} @end macro @macro gnupgoptlist{body} @smallexample \body\ @end smallexample @end macro @c Makeinfo handles the above macro OK, TeX needs manual line breaks; @c they get lost at some point in handling the macro. But if @macro is @c used here rather than @alias, it produces double line breaks. @iftex @alias gol = * @end iftex @ifnottex @macro gol @end macro @end ifnottex @c @c Titlepage @c @setchapternewpage odd @titlepage @title Using the GNU Privacy Guard, Version 1.4 @subtitle Version @value{VERSION} @subtitle @value{UPDATED} @author Werner Koch (@email{wk@@gnupg.org}) @page @vskip 0pt plus 1filll @insertcopying @end titlepage @ifnothtml @summarycontents @contents @page @end ifnothtml @ifnottex @node Top @top @insertcopying @noindent This manual documents how to use the standalone version of GNU Privacy Guard. @end ifnottex @menu * Invoking GPG:: Using the classic GPG protocol. * Specify a User ID:: How to Specify a User Id. * Copying:: GNU General Public License says how you can copy and share GnuPG * Option Index:: Index to command line options. * Index:: Index of concepts and symbol names. @end menu @ifhtml @end ifhtml @ifhtml @page @summarycontents @contents @end ifhtml @include gpg.texi @node Specify a User ID @chapter How to Specify a User Id @anchor{how-to-specify-a-user-id} @include specify-user-id.texi @include gpl.texi @c --------------------------------------------------------------------- @c Indexes @c --------------------------------------------------------------------- @node Option Index @unnumbered Option Index @printindex op @node Index @unnumbered Index @printindex cp @c --------------------------------------------------------------------- @c Epilogue @c --------------------------------------------------------------------- @bye gnupg-1.4.20/doc/gpgv.texi0000644000175000017500000001051612635263103012246 00000000000000@c Copyright (C) 2004 Free Software Foundation, Inc. @c This is part of the GnuPG manual. @c For copying conditions, see the file GnuPG.texi. @c @c This is included by tools.texi. @c @c Begin GnuPG 1.x specific stuff @ifset gpgone @macro gpgvname gpgv @end macro @manpage gpgv.1 @node gpgv @section Verify OpenPGP signatures @ifset manverb .B gpgv \- Verify OpenPGP signatures @end ifset @mansect synopsis @ifset manverb .B gpgv .RI [ options ] .I signed_files @end ifset @end ifset @c End GnuPG 1.x specific stuff @c Begin GnuPG 2 specific stuff @ifclear gpgone @macro gpgvname gpgv2 @end macro @manpage gpgv2.1 @node gpgv @section Verify OpenPGP signatures @ifset manverb .B gpgv2 \- Verify OpenPGP signatures @end ifset @mansect synopsis @ifset manverb .B gpgv2 .RI [ options ] .I signed_files @end ifset @end ifclear @c End GnuPG 2 specific stuff @mansect description @code{@gpgvname} is an OpenPGP signature verification tool. This program is actually a stripped-down version of @code{gpg} which is only able to check signatures. It is somewhat smaller than the fully-blown @code{gpg} and uses a different (and simpler) way to check that the public keys used to make the signature are valid. There are no configuration files and only a few options are implemented. @code{@gpgvname} assumes that all keys in the keyring are trustworthy. That does also mean that it does not check for expired or revoked keys. By default a keyring named @file{trustedkeys.gpg} is used. This default keyring is assumed to be in the home directory of GnuPG, either the default home directory or the one set by an option or an environment variable. The option @code{--keyring} may be used to specify a different keyring or even multiple keyrings. @noindent @mansect options @code{@gpgvname} recognizes these options: @table @gnupgtabopt @item --verbose @itemx -v @opindex verbose Gives more information during processing. If used twice, the input data is listed in detail. @item --quiet @itemx -q @opindex quiet Try to be as quiet as possible. @item --keyring @var{file} @opindex keyring Add @var{file} to the list of keyrings. If @var{file} begins with a tilde and a slash, these are replaced by the HOME directory. If the filename does not contain a slash, it is assumed to be in the home-directory ("~/.gnupg" if --homedir is not used). @item --status-fd @var{n} @opindex status-fd Write special status strings to the file descriptor @var{n}. See the file DETAILS in the documentation for a listing of them. @item --logger-fd @code{n} @opindex logger-fd Write log output to file descriptor @code{n} and not to stderr. @item --ignore-time-conflict @opindex ignore-time-conflict GnuPG normally checks that the timestamps associated with keys and signatures have plausible values. However, sometimes a signature seems to be older than the key due to clock problems. This option turns these checks into warnings. @include opt-homedir.texi @item --weak-digest @code{name} @opindex weak-digest Treat the specified digest algorithm as weak. Signatures made over weak digests algorithms are normally rejected. This option can be supplied multiple times if multiple algorithms should be considered weak. MD5 is always considered weak, and does not need to be listed explicitly. @end table @mansect return value The program returns 0 if everything is fine, 1 if at least one signature was bad, and other error codes for fatal errors. @mansect examples @subsection Examples @table @asis @item @gpgvname @code{pgpfile} @itemx @gpgvname @code{sigfile} [@code{datafile}] Verify the signature of the file. The second form is used for detached signatures, where @code{sigfile} is the detached signature (either ASCII-armored or binary) and @code{datafile} contains the signed data; if @code{datafile} is "-" the signed data is expected on @code{stdin}; if @code{datafile} is not given the name of the file holding the signed data is constructed by cutting off the extension (".asc", ".sig" or ".sign") from @code{sigfile}. @end table @mansect environment @subsection Environment @table @asis @item HOME Used to locate the default home directory. @item GNUPGHOME If set directory used instead of "~/.gnupg". @end table @mansect files @subsection FILES @table @asis @item ~/.gnupg/trustedkeys.gpg The default keyring with the allowed keys. @end table @mansect see also @command{gpg2}(1) @include see-also-note.texi gnupg-1.4.20/doc/gnupg.70000644000175000017500000000122612635262326011624 00000000000000.TH GNUPG 7 2002-09-02 GNU "GNU Privacy Guard" .SH NAME GnuPG \- The GNU Privacy Guard suite of programs .SH DESCRIPTION GnuPG is a set of programs for public key encryption and digital signatures. The program most users will want to use is the OpenPGP command line tool, named \fBgpg\fP. \fBgpgv\fP is a stripped down version of \fBgpg\fP with no encryption functionality, used only to verify signatures against a trusted keyring. There is also a tool called \fBgpgsplit\fP to split OpenPGP messages or keyrings into their component packets. This is mainly useful for seeing how OpenPGP messages are put together. .SH "SEE ALSO" .BR gpg (1), .BR gpgv (1), gnupg-1.4.20/doc/OpenPGP0000644000175000017500000001041012635262326011602 00000000000000 GnuPG and OpenPGP ================= See RFC2440 for a description of OpenPGP. We have an annotated version of this RFC online: http://www.gnupg.org/rfc2440.html Compatibility Notes =================== GnuPG (>=1.0.3) is in compliance with RFC2440 despite these exceptions: * (9.2) states that IDEA SHOULD be implemented. This is not done due to patent problems. All MAY features are implemented with this exception: * multi-part armored messages are not supported. MIME (rfc2015) should be used instead. Most of the OPTIONAL stuff is implemented. There are a couple of options which can be used to override some RFC requirements. This is always mentioned with the description of that options. A special format of partial packet length exists for v3 packets which can be considered to be in compliance with RFC1991; this format is only created if a special option is active. GnuPG uses a S2K mode of 101 for GNU extensions to the secret key protection algorithms. This number is not defined in OpenPGP, but given the fact that this number is in a range which used at many other places in OpenPGP for private/experimenat algorithm identifiers, this should be not a so bad choice. The 3 bytes "GNU" are used to identify this as a GNU extension - see the file DETAILS for a definition of the used data formats. Some Notes on OpenPGP / PGP Compatibility: ========================================== * PGP 5.x does not accept V4 signatures for anything other than key material. The GnuPG option --force-v3-sigs mimics this behavior. * PGP 5.x does not recognize the "five-octet" lengths in new-format headers or in signature subpacket lengths. * PGP 5.0 rejects an encrypted session key if the keylength differs from the S2K symmetric algorithm. This is a bug in its validation function. * PGP 5.0 does not handle multiple one-pass signature headers and trailers. Signing one will compress the one-pass signed literal and prefix a V3 signature instead of doing a nested one-pass signature. * When exporting a private key, PGP 2.x generates the header "BEGIN PGP SECRET KEY BLOCK" instead of "BEGIN PGP PRIVATE KEY BLOCK". All previous versions ignore the implied data type, and look directly at the packet data type. * In a clear-signed signature, PGP 5.0 will figure out the correct hash algorithm if there is no "Hash:" header, but it will reject a mismatch between the header and the actual algorithm used. The "standard" (i.e. Zimmermann/Finney/et al.) version of PGP 2.x rejects the "Hash:" header and assumes MD5. There are a number of enhanced variants of PGP 2.6.x that have been modified for SHA-1 signatures. * PGP 5.0 can read an RSA key in V4 format, but can only recognize it with a V3 keyid, and can properly use only a V3 format RSA key. * Neither PGP 5.x nor PGP 6.0 recognize ElGamal Encrypt and Sign keys. They only handle ElGamal Encrypt-only keys. Parts of this document are taken from: ====================================== OpenPGP Message Format draft-ietf-openpgp-formats-07.txt Copyright 1998 by The Internet Society. All Rights Reserved. This document and translations of it may be copied and furnished to others, and derivative works that comment on or otherwise explain it or assist in its implementation may be prepared, copied, published and distributed, in whole or in part, without restriction of any kind, provided that the above copyright notice and this paragraph are included on all such copies and derivative works. However, this document itself may not be modified in any way, such as by removing the copyright notice or references to the Internet Society or other Internet organizations, except as needed for the purpose of developing Internet standards in which case the procedures for copyrights defined in the Internet Standards process must be followed, or as required to translate it into languages other than English. The limited permissions granted above are perpetual and will not be revoked by the Internet Society or its successors or assigns. gnupg-1.4.20/doc/HACKING0000644000175000017500000002112512635262326011403 00000000000000 A Hacker's Guide to GNUPG ================================ (Some notes on GNUPG internals.) * No more ChangeLog files Do not modify any of the ChangeLog files in GnuPG. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist" time. As such, there are strict requirements on the form of the commit log messages. The old ChangeLog files have all be renamed to ChangeLog-2011 * Commit log requirements Your commit log should always start with a one-line summary, the second line should be blank, and the remaining lines are usually ChangeLog-style entries for all affected files. However, it's fine -- even recommended -- to write a few lines of prose describing the change, when the summary and ChangeLog entries don't give enough of the big picture. Omit the leading TABs that you're used to seeing in a "real" ChangeLog file, but keep the maximum line length at 72 or smaller, so that the generated ChangeLog lines, each with its leading TAB, will not exceed 80 columns. ===> Under construction <======= GIT Access ========== The GIT repository is available at: git clone git://git.gnupg.org/gnupg.git git checkout STABLE-BRANCH-1-4 You may want to subscribe to: gnupg-commit-watchers@gnupg.org by sending a mail with subject "subscribe" to gnupg-commit-watchers-request@gnupg.org You must run scripts/autogen.sh before doing the ./configure, as this creates some needed files not include in the repository. autogen.sh should check that you have all required tools installed. RSYNC access ============ The FTP archive is also available by anonymous rsync. A daily snapshot of the CVS head revision is also available. See rsync(1) and try "rsync ftp.gnupg.org::" to see available resources. RFCs ==== 1423 Privacy Enhancement for Internet Electronic Mail: Part III: Algorithms, Modes, and Identifiers. 1489 Registration of a Cyrillic Character Set. 1750 Randomness Recommendations for Security. 1991 PGP Message Exchange Formats. 2015 MIME Security with Pretty Good Privacy (PGP). 2144 The CAST-128 Encryption Algorithm. 2279 UTF-8, a transformation format of ISO 10646. 4880 OpenPGP (replaces by 2440). Debug Flags ----------- Use the option "--debug n" to output debug information. This option can be used multiple times, all values are ORed; n maybe prefixed with 0x to use hex-values. value used for ----- ---------------------------------------------- 1 packet reading/writing 2 MPI details 4 ciphers and primes (may reveal sensitive data) 8 iobuf filter functions 16 iobuf stuff 32 memory allocation stuff 64 caching 128 show memory statistics at exit 256 trust verification stuff Directory Layout ---------------- ./ Readme, configure ./scripts Scripts needed by configure and others ./doc Documentation ./util General purpose utility function ./mpi Multi precision integer library ./cipher Cryptographic functions ./g10 GnuPG application ./tools Some helper and demo programs ./keybox The keybox library (under construction) ./gcrypt Stuff needed to build libgcrypt (under construction) Detailed Roadmap ---------------- g10/g10.c Main module with option parsing and all the stuff you have to do on startup. Also has the exout handler and some helper functions. g10/sign.c Create signature and optionally encrypt g10/parse-packet.c g10/build-packet.c g10/free-packet.c Parsing and creating of OpenPGP message packets. g10/getkey.c Key selection code g10/pkclist.c Build a list of public keys g10/skclist.c Build a list of secret keys g10/ringedit.c Keyring I/O g10/keydb.h g10/keyid.c Helper functions to get the keyid, fingerprint etc. g10/trustdb.c g10/trustdb.h g10/tdbdump.c Management of the trustdb.gpg g10/compress.c Filter to handle compression g10/filter.h Declarations for all filter functions g10/delkey.c Delete a key g10/kbnode.c Helper for the KBNODE linked list g10/main.h Prototypes and some constants g10/mainproc.c Message processing g10/armor.c Ascii armor filter g10/mdfilter.c Filter to calculate hashs g10/textfilter.c Filter to handle CR/LF and trailing white space g10/cipher.c En-/Decryption filter g10/misc.c Utlity functions g10/options.h Structure with all the command line options and related constants g10/openfile.c Create/Open Files g10/tdbio.c I/O handling for the trustdb.gpg g10/tdbio.h g10/hkp.h Keyserver access g10/hkp.c g10/packet.h Defintion of OpenPGP structures. g10/passphrase.c Passphrase handling code g10/pubkey-enc.c g10/seckey-cert.c g10/seskey.c g10/import.c g10/export.c g10/comment.c g10/status.c g10/status.h g10/sign.c g10/plaintext.c g10/encr-data.c g10/encode.c g10/revoke.c g10/keylist.c g10/sig-check.c g10/signal.c g10/helptext.c g10/verify.c g10/decrypt.c g10/keyedit.c g10/dearmor.c g10/keygen.c Memory allocation ----------------- Use only the functions: m_alloc() m_alloc_clear() m_strdup() m_free() If you want to store a passphrase or some other sensitive data you may want to use m_alloc_secure() instead of m_alloc(), as this puts the data into a memory region which is protected from swapping (on some platforms). m_free() works for both. This functions will not return if there is not enough memory available. Logging ------- Option parsing --------------- GNUPG does not use getopt or GNU getopt but functions of it's own. See util/argparse.c for details. The advantage of these functions is that it is more easy to display and maintain the help texts for the options. The same option table is also used to parse resource files. What is an IOBUF ---------------- This is the data structure used for most I/O of gnupg. It is similar to System V Streams but much simpler. Because OpenPGP messages are nested in different ways; the use of such a system has big advantages. Here is an example, how it works: If the parser sees a packet header with a partial length, it pushes the block_filter onto the IOBUF to handle these partial length packets: from now on you don't have to worry about this. When it sees a compressed packet it pushes the uncompress filter and the next read byte is one which has already been uncompressed by this filter. Same goes for enciphered packet, plaintext packets and so on. The file g10/encode.c might be a good staring point to see how it is used - actually this is the other way: constructing messages using pushed filters but it may be easier to understand. How to use the message digest functions --------------------------------------- cipher/md.c implements an interface to hash (message digest functions). a) If you have a common part of data and some variable parts and you need to hash of the concatenated parts, you can use this: md = md_open(...) md_write( md, common_part ) md1 = md_copy( md ) md_write(md1, part1) md_final(md1); digest1 = md_read(md1) md2 = md_copy( md ) md_write(md2, part2) md_final(md2); digest2 = md_read(md2) An example are key signatures; the key packet is the common part and the user-id packets are the variable parts. b) If you need a running digest you should use this: md = md_open(...) md_write( md, part1 ) digest_of_part1 = md_digest( md ); md_write( md, part2 ) digest_of_part1_cat_part2 = md_digest( md ); .... Both methods may be combined. [Please see the source for the real syntax] How to use the cipher functions ------------------------------- cipher/cipher.c implements the interface to symmetric encryption functions. As usual you have a function to open a cipher (which returns a handle to be used with all other functions), some functions to set the key and other stuff and a encrypt and decrypt function which does the real work. You probably know how to work with files - so it should really be easy to work with these functions. Here is an example: CIPHER_HANDLE hd; hd = cipher_open( CIPHER_ALGO_TWOFISH, CIPHER_MODE_CFB, 0 ); if( !hd ) oops( use other function to check for the real error ); rc = cipher_setkey( hd, key256bit, 32 ) ) if( rc ) oops( weak key or something like this ); cipher_setiv( hd, some_IV_or_NULL_for_all_zeroes ); cipher_encrypt( hd, plain, cipher, size ); cipher_close( hd ); How to use the public key functions ----------------------------------- cipher/pubkey.c implements the interface to asymmetric encryption and signature functions. This is basically the same as with the symmetric counterparts, but due to their nature it is a little bit more complicated. [Give an example] gnupg-1.4.20/doc/TRANSLATE0000644000175000017500000000213512635262326011674 00000000000000$Id$ Note for translators -------------------- Some strings in GnuPG are for matching user input against. These strings can accept multiple values that mean essentially the same thing. For example, the string "yes" in English is "sí" in Spanish. However, some users will type "si" (without the accent). To accomodate both users, you can translate the string "yes" as "sí|si". You can have any number of alternate matches seperated by the | character like "sí|si|seguro". The strings that can be handled in this way are of the form "yes|yes", (or "no|no", etc.) There should also be a comment in the .po file directing you to this file. Sending new or updated translations ----------------------------------- Please note that we do not use the TP Robot but require that translations are to be send by mail to translations@gnupg.org. We also strongly advise to get subscribed to i18n@gnupg.org and request assistance if it is not clear on how to translate certain strings. A wrongly translated string may lead to a security problem. A copyright disclaimer to the FSF is required by all translators. gnupg-1.4.20/doc/specify-user-id.texi0000644000175000017500000001162512635262326014323 00000000000000@c Include file to allow for different placements in man pages and the manual There are different ways to specify a user ID to GnuPG. Some of them are only valid for @command{gpg} others are only good for @command{gpgsm}. Here is the entire list of ways to specify a key: @itemize @bullet @item By key Id. This format is deduced from the length of the string and its content or @code{0x} prefix. The key Id of an X.509 certificate are the low 64 bits of its SHA-1 fingerprint. The use of key Ids is just a shortcut, for all automated processing the fingerprint should be used. When using @command{gpg} an exclamation mark (!) may be appended to force using the specified primary or secondary key and not to try and calculate which primary or secondary key to use. The last four lines of the example give the key ID in their long form as internally used by the OpenPGP protocol. You can see the long key ID using the option @option{--with-colons}. @cartouche @example 234567C4 0F34E556E 01347A56A 0xAB123456 234AABBCC34567C4 0F323456784E56EAB 01AB3FED1347A5612 0x234AABBCC34567C4 @end example @end cartouche @item By fingerprint. This format is deduced from the length of the string and its content or the @code{0x} prefix. Note, that only the 20 byte version fingerprint is available with @command{gpgsm} (i.e. the SHA-1 hash of the certificate). When using @command{gpg} an exclamation mark (!) may be appended to force using the specified primary or secondary key and not to try and calculate which primary or secondary key to use. The best way to specify a key Id is by using the fingerprint. This avoids any ambiguities in case that there are duplicated key IDs. @cartouche @example 1234343434343434C434343434343434 123434343434343C3434343434343734349A3434 0E12343434343434343434EAB3484343434343434 0xE12343434343434343434EAB3484343434343434 @end example @end cartouche @noindent @command{gpgsm} also accepts colons between each pair of hexadecimal digits because this is the de-facto standard on how to present X.509 fingerprints. @command{gpg} also allows the use of the space separated SHA-1 fingerprint as printed by the key listing commands. @item By exact match on OpenPGP user ID. This is denoted by a leading equal sign. It does not make sense for X.509 certificates. @cartouche @example =Heinrich Heine @end example @end cartouche @item By exact match on an email address. This is indicated by enclosing the email address in the usual way with left and right angles. @cartouche @example @end example @end cartouche @item By word match. All words must match exactly (not case sensitive) but can appear in any order in the user ID or a subjects name. Words are any sequences of letters, digits, the underscore and all characters with bit 7 set. @cartouche @example +Heinrich Heine duesseldorf @end example @end cartouche @item By exact match on the subject's DN. This is indicated by a leading slash, directly followed by the RFC-2253 encoded DN of the subject. Note that you can't use the string printed by "gpgsm --list-keys" because that one as been reordered and modified for better readability; use --with-colons to print the raw (but standard escaped) RFC-2253 string @cartouche @example /CN=Heinrich Heine,O=Poets,L=Paris,C=FR @end example @end cartouche @item By exact match on the issuer's DN. This is indicated by a leading hash mark, directly followed by a slash and then directly followed by the rfc2253 encoded DN of the issuer. This should return the Root cert of the issuer. See note above. @cartouche @example #/CN=Root Cert,O=Poets,L=Paris,C=FR @end example @end cartouche @item By exact match on serial number and issuer's DN. This is indicated by a hash mark, followed by the hexadecimal representation of the serial number, then followed by a slash and the RFC-2253 encoded DN of the issuer. See note above. @cartouche @example #4F03/CN=Root Cert,O=Poets,L=Paris,C=FR @end example @end cartouche @item By keygrip This is indicated by an ampersand followed by the 40 hex digits of a keygrip. @command{gpgsm} prints the keygrip when using the command @option{--dump-cert}. It does not yet work for OpenPGP keys. @cartouche @example &D75F22C3F86E355877348498CDC92BD21010A480 @end example @end cartouche @item By substring match. This is the default mode but applications may want to explicitly indicate this by putting the asterisk in front. Match is not case sensitive. @cartouche @example Heine *Heine @end example @end cartouche @end itemize Please note that we have reused the hash mark identifier which was used in old GnuPG versions to indicate the so called local-id. It is not anymore used and there should be no conflict when used with X.509 stuff. Using the RFC-2253 format of DNs has the drawback that it is not possible to map them back to the original encoding, however we don't have to do this because our key database stores this encoding as meta data. gnupg-1.4.20/doc/README.W320000644000175000017500000002004112635262326011642 00000000000000README.W32 -*- text -*- This is a binary package with GnuPG for MS-Windows NT-4, W2000, XP and Vista. A native version for 64 bit is not available. See the file README for generic instructions and usage hints. A FAQ comes with this package and a probably more recent one can be found online at http://www.gnupg.org/faq.html. See http://www.gnupg.org/docs-mls.html for a list of mailing lists. In particular the list gnupg-users@gnupg.org might be useful to answer questions - but please read the FAQ first. Installation directory: ======================= The installation directory of GnuPG is stored in the Registry under the key HKEY_LOCAL_MACHINE\Software\GNU\GnuPG with the name "Install Directory". Depending on your Windows system the above key might be slightly different. The installer does not change the PATH environment variable to include this directory. You might want to do this manually. Note, that this registry entry is also used to locate the keyserver helper programs (e.g. gpgkeys_ldap). Below the Installation directory, you will find directories named "Doc", "gnupg.nls" and "Src". The latter will be used for distributed patches, if any, and to store the source file if they have been included in this package. The source files usually require further unpacking using the TAR utility. Internationalization support: ============================= Store the locale id (like "de") into the Registry under the key HKEY_CURRENT_USER\Software\GNU\GnuPG with the name "Lang". This must match one of the installed languages files in the directory named "gnupg.nls" below the installation directory. Note, that the ".mo" extension is not part of the locale id. Home directory: =============== GnuPG makes use of a per user home directory to store its keys as well as configuration files. The default home directory is a directory named "gnupg" below the application data directory of the user. This directory will be created if it does not exist. Being only a default, it may be changed by setting the name of the home directory into the Registry under the key HKEY_CURRENT_USER\Software\GNU\GnuPG using the name "HomeDir". If an environment variable "GNUPGHOME" exists, this even overrides the registry setting. The command line option "--homedir" may be used to override all other settings of the home directory. Reporting bugs: =============== Please check the documentation first before asking or reporting a bugs. In particular check the archives of the mailing lists (see www.gnupg.org) and the bug tracking system at http://bugs.gnupg.org (login is "guest" password is "guest") whether the problem is already known. Asking on the gnupg-users mailing list is also strongly encouraged; if you are not subscribed it may some time until a posting is approved (this is an anti-spam measure). Bug reporting addresses are listed in the file AUTHORS. If you want to report a bug or have other problems, always give detailed description of the problem, the version of GnuPG you used, the version of the OS, whether it is the official version from gnupg.org or how you built it. Don't edit error messages - replacing sensitive information like user IDs, fingerprints and keyids is okay. If possible, switch to English messages by changing the "Lang" entry to empty (see under Internationalization support). How to build GnuPG from the source: =================================== Until recently all official GnuPG versions have been build using the Mingw32/CPD kit as available at ftp://ftp.gnupg.org/people/werner/cpd/mingw32-cpd-0.3.2.tar.gz . However, for maintenance reasons we switched to Debian's mingw32 cross compiler package and that is now the recommended way of building GnuPG for W32 platforms. It might be possible to build it nativly on a W32 platform but this is not supported. Please don't file any bug reports if it does not build with any other system than the recommended one. According to the conditions of the GNU General Public License you either got the source files with this package, a written offer to send you the source on demand or the source is available at the same site you downloaded the binary package. If you downloaded the package from the official GnuPG site or one of its mirrors, the corresponding source tarball is available in the sibling directory named gnupg. The source used to build all versions is always the same and the version numbers should match. If the version number of the binary package has a letter suffix, you will find a patch file installed in the "Src" directory with the changes relative to the generic version. The source is distributed as a BZIP2 or GZIP compressed tar archive. See the instructions in file README on how to check the integrity of that file. With a properly setup build environment, you unpack the tarball change to the created directory and run $ ./autogen.sh --build-w32 $ make $ cp g10/gpg*.exe /some_windows_drive/ Building a version with the installer requires an install NSIS tool and a directory with the iconv files. The script mk-w32-dist does the entire build from the tarball and checks most prerequisites; example: $ scripts/mk-w32-dist $(pwd)/gnupg-1.4.3.tar.gz If you installed the iconv files in a non-standard place you may use $ scripts/mk-w32-dist --iconv-dir /foo/bar/ $(pwd)/gnupg-1.4.3.tar.gz If you need to patch the standard tarball, you can supply a patch file: $ scripts/mk-w32-dist $(pwd)/gnupg-1.4.3.tar.gz mypatches That patch file will then be part of the installer. Copying: ======== GnuPG is Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2012 Free Software Foundation, Inc. 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 3 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, see . See the files AUTHORS and THANKS for credits, further legal information and bug reporting addresses pertaining to GnuPG. For copying conditions of the GNU LIBICONV library see the file README.iconv. The installer software used to create the official binary packages for W32 is NSIS (http://nsis.sourceforge.net/): Copyright (C) 1999-2005 Nullsoft, Inc. This license applies to everything in the NSIS package, except where otherwise noted. This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software. Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions: 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 3. This notice may not be removed or altered from any source distribution. The user interface used with the installer is Copyright (C) 2002-2005 Joost Verburg [It is distributed along with NSIS and the same conditions as stated above apply] The term "W32" is used to describe the API used by current Microsoft Windows versions. We don't use the Microsft terminology here; in hacker terminology, calling something a "win" is a form of praise. Keep in mind that Windows ist just a temporary workaround until you can switch to a complete Free Software system. Be the source always with you. gnupg-1.4.20/doc/gnupg1.info0000644000175000017500000063343512635457223012511 00000000000000This is gnupg1.info, produced by makeinfo version 5.2 from gnupg1.texi. This is the 'The GNU Privacy Guard Manual' (1.4.20, 19 December 2015). Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The text of the license can be found in the section entitled "Copying". INFO-DIR-SECTION GNU Utilities START-INFO-DIR-ENTRY * gpg: (gnupg1). OpenPGP encryption and signing tool (v1). END-INFO-DIR-ENTRY  File: gnupg1.info, Node: Top, Next: Invoking GPG, Up: (dir) Using the GnuPG Version 1.4 *************************** This is the 'The GNU Privacy Guard Manual' (1.4.20, 19 December 2015). Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. The text of the license can be found in the section entitled "Copying". This manual documents how to use the standalone version of GNU Privacy Guard. * Menu: * Invoking GPG:: Using the classic GPG protocol. * Specify a User ID:: How to Specify a User Id. * Copying:: GNU General Public License says how you can copy and share GnuPG * Option Index:: Index to command line options. * Index:: Index of concepts and symbol names.  File: gnupg1.info, Node: Invoking GPG, Next: Specify a User ID, Prev: Top, Up: Top 1 Invoking GPG ************** 'gpg' is the OpenPGP only version of the GNU Privacy Guard (GnuPG). It is a tool to provide digital encryption and signing services using the OpenPGP standard. 'gpg' features complete key management and all bells and whistles you can expect from a decent OpenPGP implementation. This is the standalone version of 'gpg'. For desktop use you should consider using 'gpg2' from the GnuPG-2 package (1). *Note Option Index::, for an index to 'gpg''s commands and options. * Menu: * GPG Commands:: List of all commands. * GPG Options:: List of all options. * GPG Configuration:: Configuration files. * GPG Examples:: Some usage examples. Developer information: * Unattended Usage of GPG:: Using 'gpg' from other programs. ---------- Footnotes ---------- (1) On some platforms gpg2 is installed under the name 'gpg'  File: gnupg1.info, Node: GPG Commands, Next: GPG Options, Up: Invoking GPG 1.1 Commands ============ Commands are not distinguished from options except for the fact that only one command is allowed. 'gpg' may be run with no commands, in which case it will perform a reasonable action depending on the type of file it is given as input (an encrypted message is decrypted, a signature is verified, a file containing keys is listed). Please remember that option as well as command parsing stops as soon as a non-option is encountered, you can explicitly stop parsing by using the special option '--'. * Menu: * General GPG Commands:: Commands not specific to the functionality. * Operational GPG Commands:: Commands to select the type of operation. * OpenPGP Key Management:: How to manage your keys.  File: gnupg1.info, Node: General GPG Commands, Next: Operational GPG Commands, Up: GPG Commands 1.1.1 Commands not specific to the function ------------------------------------------- '--version' Print the program version and licensing information. Note that you cannot abbreviate this command. '--help' '-h' Print a usage message summarizing the most useful command line options. Note that you cannot abbreviate this command. '--warranty' Print warranty information. '--dump-options' Print a list of all available options and commands. Note that you cannot abbreviate this command.  File: gnupg1.info, Node: Operational GPG Commands, Next: OpenPGP Key Management, Prev: General GPG Commands, Up: GPG Commands 1.1.2 Commands to select the type of operation ---------------------------------------------- '--sign' '-s' Make a signature. This command may be combined with '--encrypt' (for a signed and encrypted message), '--symmetric' (for a signed and symmetrically encrypted message), or '--encrypt' and '--symmetric' together (for a signed message that may be decrypted via a secret key or a passphrase). The key to be used for signing is chosen by default or can be set with the '--local-user' and '--default-key' options. '--clearsign' Make a clear text signature. The content in a clear text signature is readable without any special software. OpenPGP software is only needed to verify the signature. Clear text signatures may modify end-of-line whitespace for platform independence and are not intended to be reversible. The key to be used for signing is chosen by default or can be set with the '--local-user' and '--default-key' options. '--detach-sign' '-b' Make a detached signature. '--encrypt' '-e' Encrypt data. This option may be combined with '--sign' (for a signed and encrypted message), '--symmetric' (for a message that may be decrypted via a secret key or a passphrase), or '--sign' and '--symmetric' together (for a signed message that may be decrypted via a secret key or a passphrase). '--symmetric' '-c' Encrypt with a symmetric cipher using a passphrase. The default symmetric cipher used is AES128, but may be chosen with the '--cipher-algo' option. This option may be combined with '--sign' (for a signed and symmetrically encrypted message), '--encrypt' (for a message that may be decrypted via a secret key or a passphrase), or '--sign' and '--encrypt' together (for a signed message that may be decrypted via a secret key or a passphrase). '--store' Store only (make a simple RFC1991 literal data packet). '--decrypt' '-d' Decrypt the file given on the command line (or STDIN if no file is specified) and write it to STDOUT (or the file specified with '--output'). If the decrypted file is signed, the signature is also verified. This command differs from the default operation, as it never writes to the filename which is included in the file and it rejects files which don't begin with an encrypted message. '--verify' Assume that the first argument is a signed file and verify it without generating any output. With no arguments, the signature packet is read from STDIN. If only a one argument is given, it is expected to be a complete signature. With more than 1 argument, the first should be a detached signature and the remaining files ake up the the signed data. To read the signed data from STDIN, use '-' as the second filename. For security reasons a detached signature cannot read the signed material from STDIN without denoting it in the above way. Note: If the option '--batch' is not used, 'gpg' may assume that a single argument is a file with a detached signature and it will try to find a matching data file by stripping certain suffixes. Using this historical feature to verify a detached signature is strongly discouraged; always specify the data file too. Note: When verifying a cleartext signature, 'gpg' verifies only what makes up the cleartext signed data and not any extra data outside of the cleartext signature or header lines following directly the dash marker line. The option '--output' may be used to write out the actual signed data; but there are other pitfalls with this format as well. It is suggested to avoid cleartext signatures in favor of detached signatures. '--multifile' This modifies certain other commands to accept multiple files for processing on the command line or read from STDIN with each filename on a separate line. This allows for many files to be processed at once. '--multifile' may currently be used along with '--verify', '--encrypt', and '--decrypt'. Note that '--multifile --verify' may not be used with detached signatures. '--verify-files' Identical to '--multifile --verify'. '--encrypt-files' Identical to '--multifile --encrypt'. '--decrypt-files' Identical to '--multifile --decrypt'. '--list-keys' '-k' '--list-public-keys' List all keys from the public keyrings, or just the keys given on the command line. '-k' is slightly different from '--list-keys' in that it allows only for one argument and takes the second argument as the keyring to search. This is for command line compatibility with PGP 2 and has been removed in 'gpg2'. Avoid using the output of this command in scripts or other programs as it is likely to change as GnuPG changes. See '--with-colons' for a machine-parseable key listing command that is appropriate for use in scripts and other programs. '--list-secret-keys' '-K' List all keys from the secret keyrings, or just the ones given on the command line. A '#' after the letters 'sec' means that the secret key is not usable (for example, if it was created via '--export-secret-subkeys'). '--list-sigs' Same as '--list-keys', but the signatures are listed too. For each signature listed, there are several flags in between the "sig" tag and keyid. These flags give additional information about each signature. From left to right, they are the numbers 1-3 for certificate check level (see '--ask-cert-level'), "L" for a local or non-exportable signature (see '--lsign-key'), "R" for a nonRevocable signature (see the '--edit-key' command "nrsign"), "P" for a signature that contains a policy URL (see '--cert-policy-url'), "N" for a signature that contains a notation (see '--cert-notation'), "X" for an eXpired signature (see '--ask-cert-expire'), and the numbers 1-9 or "T" for 10 and above to indicate trust signature levels (see the '--edit-key' command "tsign"). '--check-sigs' Same as '--list-sigs', but the signatures are verified. Note that for performance reasons the revocation status of a signing key is not shown. The status of the verification is indicated by a flag directly following the "sig" tag (and thus before the flags described above for '--list-sigs'). A "!" indicates that the signature has been successfully verified, a "-" denotes a bad signature and a "%" is used if an error occurred while checking the signature (e.g. a non supported algorithm). '--fingerprint' List all keys (or the specified ones) along with their fingerprints. This is the same output as '--list-keys' but with the additional output of a line with the fingerprint. May also be combined with '--list-sigs' or '--check-sigs'. If this command is given twice, the fingerprints of all secondary keys are listed too. '--list-packets' List only the sequence of packets. This is mainly useful for debugging. '--card-edit' Present a menu to work with a smartcard. The subcommand "help" provides an overview on available commands. For a detailed description, please see the Card HOWTO at https://gnupg.org/documentation/howtos.html#GnuPG-cardHOWTO . '--card-status' Show the content of the smart card. '--change-pin' Present a menu to allow changing the PIN of a smartcard. This functionality is also available as the subcommand "passwd" with the '--card-edit' command. '--delete-key name' Remove key from the public keyring. In batch mode either '--yes' is required or the key must be specified by fingerprint. This is a safeguard against accidental deletion of multiple keys. '--delete-secret-key name' Remove key from the secret keyring. In batch mode the key must be specified by fingerprint. '--delete-secret-and-public-key name' Same as '--delete-key', but if a secret key exists, it will be removed first. In batch mode the key must be specified by fingerprint. '--export' Either export all keys from all keyrings (default keyrings and those registered via option '--keyring'), or if at least one name is given, those of the given name. The exported keys are written to STDOUT or to the file given with option '--output'. Use together with '--armor' to mail those keys. '--send-keys key IDs' Similar to '--export' but sends the keys to a keyserver. Fingerprints may be used instead of key IDs. Option '--keyserver' must be used to give the name of this keyserver. Don't send your complete keyring to a keyserver -- select only those keys which are new or changed by you. If no key IDs are given, 'gpg' does nothing. '--export-secret-keys' '--export-secret-subkeys' Same as '--export', but exports the secret keys instead. The exported keys are written to STDOUT or to the file given with option '--output'. This command is often used along with the option '--armor' to allow easy printing of the key for paper backup; however the external tool 'paperkey' does a better job for creating backups on paper. Note that exporting a secret key can be a security risk if the exported keys are send over an insecure channel. The second form of the command has the special property to render the secret part of the primary key useless; this is a GNU extension to OpenPGP and other implementations can not be expected to successfully import such a key. Its intended use is to generated a full key with an additional signing subkey on a dedicated machine and then using this command to export the key without the primary key to the main machine. See the option '--simple-sk-checksum' if you want to import an exported secret key into ancient OpenPGP implementations. '--import' '--fast-import' Import/merge keys. This adds the given keys to the keyring. The fast version is currently just a synonym. There are a few other options which control how this command works. Most notable here is the '--import-options merge-only' option which does not insert new keys but does only the merging of new signatures, user-IDs and subkeys. '--recv-keys key IDs' Import the keys with the given key IDs from a keyserver. Option '--keyserver' must be used to give the name of this keyserver. '--refresh-keys' Request updates from a keyserver for keys that already exist on the local keyring. This is useful for updating a key with the latest signatures, user IDs, etc. Calling this with no arguments will refresh the entire keyring. Option '--keyserver' must be used to give the name of the keyserver for all keys that do not have preferred keyservers set (see '--keyserver-options honor-keyserver-url'). '--search-keys names' Search the keyserver for the given names. Multiple names given here will be joined together to create the search string for the keyserver. Option '--keyserver' must be used to give the name of this keyserver. Keyservers that support different search methods allow using the syntax specified in "How to specify a user ID" below. Note that different keyserver types support different search methods. Currently only LDAP supports them all. '--fetch-keys URIs' Retrieve keys located at the specified URIs. Note that different installations of GnuPG may support different protocols (HTTP, FTP, LDAP, etc.) '--update-trustdb' Do trust database maintenance. This command iterates over all keys and builds the Web of Trust. This is an interactive command because it may have to ask for the "ownertrust" values for keys. The user has to give an estimation of how far she trusts the owner of the displayed key to correctly certify (sign) other keys. GnuPG only asks for the ownertrust value if it has not yet been assigned to a key. Using the '--edit-key' menu, the assigned value can be changed at any time. '--check-trustdb' Do trust database maintenance without user interaction. From time to time the trust database must be updated so that expired keys or signatures and the resulting changes in the Web of Trust can be tracked. Normally, GnuPG will calculate when this is required and do it automatically unless '--no-auto-check-trustdb' is set. This command can be used to force a trust database check at any time. The processing is identical to that of '--update-trustdb' but it skips keys with a not yet defined "ownertrust". For use with cron jobs, this command can be used together with '--batch' in which case the trust database check is done only if a check is needed. To force a run even in batch mode add the option '--yes'. '--export-ownertrust' Send the ownertrust values to STDOUT. This is useful for backup purposes as these values are the only ones which can't be re-created from a corrupted trustdb. Example: gpg --export-ownertrust > otrust.txt '--import-ownertrust' Update the trustdb with the ownertrust values stored in 'files' (or STDIN if not given); existing values will be overwritten. In case of a severely damaged trustdb and if you have a recent backup of the ownertrust values (e.g. in the file 'otrust.txt', you may re-create the trustdb using these commands: cd ~/.gnupg rm trustdb.gpg gpg --import-ownertrust < otrust.txt '--rebuild-keydb-caches' When updating from version 1.0.6 to 1.0.7 this command should be used to create signature caches in the keyring. It might be handy in other situations too. '--print-md algo' '--print-mds' Print message digest of algorithm ALGO for all given files or STDIN. With the second form (or a deprecated "*" as algo) digests for all available algorithms are printed. '--gen-random 0|1|2 count' Emit COUNT random bytes of the given quality level 0, 1 or 2. If COUNT is not given or zero, an endless sequence of random bytes will be emitted. If used with '--armor' the output will be base64 encoded. PLEASE, don't use this command unless you know what you are doing; it may remove precious entropy from the system! '--gen-prime mode bits' Use the source, Luke :-). The output format is still subject to change. '--enarmor' '--dearmor' Pack or unpack an arbitrary input into/from an OpenPGP ASCII armor. This is a GnuPG extension to OpenPGP and in general not very useful.  File: gnupg1.info, Node: OpenPGP Key Management, Prev: Operational GPG Commands, Up: GPG Commands 1.1.3 How to manage your keys ----------------------------- This section explains the main commands for key management '--gen-key' Generate a new key pair using the current default parameters. This is the standard command to create a new key. There is also a feature which allows you to create keys in batch mode. See the the manual section "Unattended key generation" on how to use this. '--gen-revoke name' Generate a revocation certificate for the complete key. To revoke a subkey or a signature, use the '--edit' command. '--desig-revoke name' Generate a designated revocation certificate for a key. This allows a user (with the permission of the keyholder) to revoke someone else's key. '--edit-key' Present a menu which enables you to do most of the key management related tasks. It expects the specification of a key on the command line. uid 'n' Toggle selection of user ID or photographic user ID with index 'n'. Use '*' to select all and '0' to deselect all. key 'n' Toggle selection of subkey with index 'n'. Use '*' to select all and '0' to deselect all. sign Make a signature on key of user 'name' If the key is not yet signed by the default user (or the users given with -u), the program displays the information of the key again, together with its fingerprint and asks whether it should be signed. This question is repeated for all users specified with -u. lsign Same as "sign" but the signature is marked as non-exportable and will therefore never be used by others. This may be used to make keys valid only in the local environment. nrsign Same as "sign" but the signature is marked as non-revocable and can therefore never be revoked. tsign Make a trust signature. This is a signature that combines the notions of certification (like a regular signature), and trust (like the "trust" command). It is generally only useful in distinct communities or groups. Note that "l" (for local / non-exportable), "nr" (for non-revocable, and "t" (for trust) may be freely mixed and prefixed to "sign" to create a signature of any type desired. delsig Delete a signature. Note that it is not possible to retract a signature, once it has been send to the public (i.e. to a keyserver). In that case you better use 'revsig'. revsig Revoke a signature. For every signature which has been generated by one of the secret keys, GnuPG asks whether a revocation certificate should be generated. check Check the signatures on all selected user IDs. adduid Create an additional user ID. addphoto Create a photographic user ID. This will prompt for a JPEG file that will be embedded into the user ID. Note that a very large JPEG will make for a very large key. Also note that some programs will display your JPEG unchanged (GnuPG), and some programs will scale it to fit in a dialog box (PGP). showphoto Display the selected photographic user ID. deluid Delete a user ID or photographic user ID. Note that it is not possible to retract a user id, once it has been send to the public (i.e. to a keyserver). In that case you better use 'revuid'. revuid Revoke a user ID or photographic user ID. primary Flag the current user id as the primary one, removes the primary user id flag from all other user ids and sets the timestamp of all affected self-signatures one second ahead. Note that setting a photo user ID as primary makes it primary over other photo user IDs, and setting a regular user ID as primary makes it primary over other regular user IDs. keyserver Set a preferred keyserver for the specified user ID(s). This allows other users to know where you prefer they get your key from. See '--keyserver-options honor-keyserver-url' for more on how this works. Setting a value of "none" removes an existing preferred keyserver. notation Set a name=value notation for the specified user ID(s). See '--cert-notation' for more on how this works. Setting a value of "none" removes all notations, setting a notation prefixed with a minus sign (-) removes that notation, and setting a notation name (without the =value) prefixed with a minus sign removes all notations with that name. pref List preferences from the selected user ID. This shows the actual preferences, without including any implied preferences. showpref More verbose preferences listing for the selected user ID. This shows the preferences in effect by including the implied preferences of 3DES (cipher), SHA-1 (digest), and Uncompressed (compression) if they are not already included in the preference list. In addition, the preferred keyserver and signature notations (if any) are shown. setpref 'string' Set the list of user ID preferences to 'string' for all (or just the selected) user IDs. Calling setpref with no arguments sets the preference list to the default (either built-in or set via '--default-preference-list'), and calling setpref with "none" as the argument sets an empty preference list. Use 'gpg --version' to get a list of available algorithms. Note that while you can change the preferences on an attribute user ID (aka "photo ID"), GnuPG does not select keys via attribute user IDs so these preferences will not be used by GnuPG. When setting preferences, you should list the algorithms in the order which you'd like to see them used by someone else when encrypting a message to your key. If you don't include 3DES, it will be automatically added at the end. Note that there are many factors that go into choosing an algorithm (for example, your key may not be the only recipient), and so the remote OpenPGP application being used to send to you may or may not follow your exact chosen order for a given message. It will, however, only choose an algorithm that is present on the preference list of every recipient key. See also the INTEROPERABILITY WITH OTHER OPENPGP PROGRAMS section below. addkey Add a subkey to this key. addcardkey Generate a subkey on a card and add it to this key. keytocard Transfer the selected secret subkey (or the primary key if no subkey has been selected) to a smartcard. The secret key in the keyring will be replaced by a stub if the key could be stored successfully on the card and you use the save command later. Only certain key types may be transferred to the card. A sub menu allows you to select on what card to store the key. Note that it is not possible to get that key back from the card - if the card gets broken your secret key will be lost unless you have a backup somewhere. bkuptocard 'file' Restore the given file to a card. This command may be used to restore a backup key (as generated during card initialization) to a new card. In almost all cases this will be the encryption key. You should use this command only with the corresponding public key and make sure that the file given as argument is indeed the backup to restore. You should then select 2 to restore as encryption key. You will first be asked to enter the passphrase of the backup key and then for the Admin PIN of the card. delkey Remove a subkey (secondart key). Note that it is not possible to retract a subkey, once it has been send to the public (i.e. to a keyserver). In that case you better use 'revkey'. revkey Revoke a subkey. expire Change the key or subkey expiration time. If a subkey is selected, the expiration time of this subkey will be changed. With no selection, the key expiration of the primary key is changed. trust Change the owner trust value for the key. This updates the trust-db immediately and no save is required. disable enable Disable or enable an entire key. A disabled key can not normally be used for encryption. addrevoker Add a designated revoker to the key. This takes one optional argument: "sensitive". If a designated revoker is marked as sensitive, it will not be exported by default (see export-options). passwd Change the passphrase of the secret key. toggle Toggle between public and secret key listing. clean Compact (by removing all signatures except the selfsig) any user ID that is no longer usable (e.g. revoked, or expired). Then, remove any signatures that are not usable by the trust calculations. Specifically, this removes any signature that does not validate, any signature that is superseded by a later signature, revoked signatures, and signatures issued by keys that are not present on the keyring. minimize Make the key as small as possible. This removes all signatures from each user ID except for the most recent self-signature. cross-certify Add cross-certification signatures to signing subkeys that may not currently have them. Cross-certification signatures protect against a subtle attack against signing subkeys. See '--require-cross-certification'. All new keys generated have this signature by default, so this option is only useful to bring older keys up to date. save Save all changes to the key rings and quit. quit Quit the program without updating the key rings. The listing shows you the key with its secondary keys and all user ids. The primary user id is indicated by a dot, and selected keys or user ids are indicated by an asterisk. The trust value is displayed with the primary key: the first is the assigned owner trust and the second is the calculated trust value. Letters are used for the values: - No ownertrust assigned / not yet calculated. e Trust calculation has failed; probably due to an expired key. q Not enough information for calculation. n Never trust this key. m Marginally trusted. f Fully trusted. u Ultimately trusted. '--sign-key name' Signs a public key with your secret key. This is a shortcut version of the subcommand "sign" from '--edit'. '--lsign-key name' Signs a public key with your secret key but marks it as non-exportable. This is a shortcut version of the subcommand "lsign" from '--edit-key'.  File: gnupg1.info, Node: GPG Options, Next: GPG Configuration, Prev: GPG Commands, Up: Invoking GPG 1.2 Option Summary ================== 'gpg' features a bunch of options to control the exact behaviour and to change the default configuration. * Menu: * GPG Configuration Options:: How to change the configuration. * GPG Key related Options:: Key related options. * GPG Input and Output:: Input and Output. * OpenPGP Options:: OpenPGP protocol specific options. * Compliance Options:: Compliance options. * GPG Esoteric Options:: Doing things one usually don't want to do. * Deprecated Options:: Deprecated options. Long options can be put in an options file (default "~/.gnupg/gpg.conf"). Short option names will not work - for example, "armor" is a valid option for the options file, while "a" is not. Do not write the 2 dashes, but simply the name of the option and any required arguments. Lines with a hash ('#') as the first non-white-space character are ignored. Commands may be put in this file too, but that is not generally useful as the command will execute automatically with every execution of gpg. Please remember that option parsing stops as soon as a non-option is encountered, you can explicitly stop parsing by using the special option '--'.  File: gnupg1.info, Node: GPG Configuration Options, Next: GPG Key related Options, Up: GPG Options 1.2.1 How to change the configuration ------------------------------------- These options are used to change the configuration and are usually found in the option file. '--default-key NAME' Use NAME as the default key to sign with. If this option is not used, the default key is the first key found in the secret keyring. Note that '-u' or '--local-user' overrides this option. '--default-recipient NAME' Use NAME as default recipient if option '--recipient' is not used and don't ask if this is a valid one. NAME must be non-empty. '--default-recipient-self' Use the default key as default recipient if option '--recipient' is not used and don't ask if this is a valid one. The default key is the first one from the secret keyring or the one set with '--default-key'. '--no-default-recipient' Reset '--default-recipient' and '--default-recipient-self'. '-v, --verbose' Give more information during processing. If used twice, the input data is listed in detail. '--no-verbose' Reset verbose level to 0. '-q, --quiet' Try to be as quiet as possible. '--batch' '--no-batch' Use batch mode. Never ask, do not allow interactive commands. '--no-batch' disables this option. This option is commonly used for unattended operations. WARNING: Unattended operation bears a higher risk of being exposed to security attacks. In particular any unattended use of GnuPG which involves the use of secret keys should take care not to provide an decryption oracle. There are several standard pre-cautions against being used as an oracle. For example never return detailed error messages or any diagnostics printed by your software to the remote site. Consult with an expert in case of doubt. Note that even with a filename given on the command line, gpg might still need to read from STDIN (in particular if gpg figures that the input is a detached signature and no data file has been specified). Thus if you do not want to feed data via STDIN, you should connect STDIN to '/dev/null'. '--no-tty' Make sure that the TTY (terminal) is never used for any output. This option is needed in some cases because GnuPG sometimes prints warnings to the TTY even if '--batch' is used. '--yes' Assume "yes" on most questions. '--no' Assume "no" on most questions. '--list-options parameters' This is a space or comma delimited string that gives options used when listing keys and signatures (that is, '--list-keys', '--list-sigs', '--list-public-keys', '--list-secret-keys', and the '--edit-key' functions). Options can be prepended with a 'no-' (after the two dashes) to give the opposite meaning. The options are: show-photos Causes '--list-keys', '--list-sigs', '--list-public-keys', and '--list-secret-keys' to display any photo IDs attached to the key. Defaults to no. See also '--photo-viewer'. Does not work with '--with-colons': see '--attribute-fd' for the appropriate way to get photo data for scripts and other frontends. show-usage Show usage information for keys and subkeys in the standard key listing. This is a list of letters indicating the allowed usage for a key ('E'=encryption, 'S'=signing, 'C'=certification, 'A'=authentication). Defaults to no. show-policy-urls Show policy URLs in the '--list-sigs' or '--check-sigs' listings. Defaults to no. show-notations show-std-notations show-user-notations Show all, IETF standard, or user-defined signature notations in the '--list-sigs' or '--check-sigs' listings. Defaults to no. show-keyserver-urls Show any preferred keyserver URL in the '--list-sigs' or '--check-sigs' listings. Defaults to no. show-uid-validity Display the calculated validity of user IDs during key listings. Defaults to no. show-unusable-uids Show revoked and expired user IDs in key listings. Defaults to no. show-unusable-subkeys Show revoked and expired subkeys in key listings. Defaults to no. show-keyring Display the keyring name at the head of key listings to show which keyring a given key resides on. Defaults to no. show-sig-expire Show signature expiration dates (if any) during '--list-sigs' or '--check-sigs' listings. Defaults to no. show-sig-subpackets Include signature subpackets in the key listing. This option can take an optional argument list of the subpackets to list. If no argument is passed, list all subpackets. Defaults to no. This option is only meaningful when using '--with-colons' along with '--list-sigs' or '--check-sigs'. '--verify-options parameters' This is a space or comma delimited string that gives options used when verifying signatures. Options can be prepended with a 'no-' to give the opposite meaning. The options are: show-photos Display any photo IDs present on the key that issued the signature. Defaults to no. See also '--photo-viewer'. show-policy-urls Show policy URLs in the signature being verified. Defaults to no. show-notations show-std-notations show-user-notations Show all, IETF standard, or user-defined signature notations in the signature being verified. Defaults to IETF standard. show-keyserver-urls Show any preferred keyserver URL in the signature being verified. Defaults to no. show-uid-validity Display the calculated validity of the user IDs on the key that issued the signature. Defaults to no. show-unusable-uids Show revoked and expired user IDs during signature verification. Defaults to no. show-primary-uid-only Show only the primary user ID during signature verification. That is all the AKA lines as well as photo Ids are not shown with the signature verification status. pka-lookups Enable PKA lookups to verify sender addresses. Note that PKA is based on DNS, and so enabling this option may disclose information on when and what signatures are verified or to whom data is encrypted. This is similar to the "web bug" described for the auto-key-retrieve feature. pka-trust-increase Raise the trust in a signature to full if the signature passes PKA validation. This option is only meaningful if pka-lookups is set. '--enable-large-rsa' '--disable-large-rsa' With -gen-key and -batch, enable the creation of larger RSA secret keys than is generally recommended (up to 8192 bits). These large keys are more expensive to use, and their signatures and certifications are also larger. '--enable-dsa2' '--disable-dsa2' Enable hash truncation for all DSA keys even for old DSA Keys up to 1024 bit. This is also the default with '--openpgp'. Note that older versions of GnuPG also required this flag to allow the generation of DSA larger than 1024 bit. '--photo-viewer string' This is the command line that should be run to view a photo ID. "%i" will be expanded to a filename containing the photo. "%I" does the same, except the file will not be deleted once the viewer exits. Other flags are "%k" for the key ID, "%K" for the long key ID, "%f" for the key fingerprint, "%t" for the extension of the image type (e.g. "jpg"), "%T" for the MIME type of the image (e.g. "image/jpeg"), "%v" for the single-character calculated validity of the image being viewed (e.g. "f"), "%V" for the calculated validity as a string (e.g. "full"), "%U" for a base32 encoded hash of the user ID, and "%%" for an actual percent sign. If neither %i or %I are present, then the photo will be supplied to the viewer on standard input. The default viewer is "xloadimage -fork -quiet -title 'KeyID 0x%k' STDIN". Note that if your image viewer program is not secure, then executing it from GnuPG does not make it secure. '--exec-path string' Sets a list of directories to search for photo viewers and keyserver helpers. If not provided, keyserver helpers use the compiled-in default directory, and photo viewers use the $PATH environment variable. Note, that on W32 system this value is ignored when searching for keyserver helpers. '--keyring file' Add 'file' to the current list of keyrings. If 'file' begins with a tilde and a slash, these are replaced by the $HOME directory. If the filename does not contain a slash, it is assumed to be in the GnuPG home directory ("~/.gnupg" if '--homedir' or $GNUPGHOME is not used). Note that this adds a keyring to the current list. If the intent is to use the specified keyring alone, use '--keyring' along with '--no-default-keyring'. '--secret-keyring file' Same as '--keyring' but for the secret keyrings. '--primary-keyring file' Designate 'file' as the primary public keyring. This means that newly imported keys (via '--import' or keyserver '--recv-from') will go to this keyring. '--trustdb-name file' Use 'file' instead of the default trustdb. If 'file' begins with a tilde and a slash, these are replaced by the $HOME directory. If the filename does not contain a slash, it is assumed to be in the GnuPG home directory ('~/.gnupg' if '--homedir' or $GNUPGHOME is not used). '--homedir DIR' Set the name of the home directory to DIR. If this option is not used, the home directory defaults to '~/.gnupg'. It is only recognized when given on the command line. It also overrides any home directory stated through the environment variable 'GNUPGHOME' or (on Windows systems) by means of the Registry entry HKCU\SOFTWARE\GNU\GNUPG:HOMEDIR. On Windows systems it is possible to install GnuPG as a portable application. In this case only this command line option is considered, all other ways to set a home directory are ignored. To install GnuPG as a portable application under Windows, create an empty file name 'gpgconf.ctl' in the same directory as the tool 'gpgconf.exe'. The root of the installation is than that directory; or, if 'gpgconf.exe' has been installed directly below a directory named 'bin', its parent directory. You also need to make sure that the following directories exist and are writable: 'ROOT/home' for the GnuPG home and 'ROOT/var/cache/gnupg' for internal cache files. '--pcsc-driver file' Use 'file' to access the smartcard reader. The current default is 'libpcsclite.so.1' for GLIBC based systems, '/System/Library/Frameworks/PCSC.framework/PCSC' for MAC OS X, 'winscard.dll' for Windows and 'libpcsclite.so' for other systems. '--disable-ccid' Disable the integrated support for CCID compliant readers. This allows to fall back to one of the other drivers even if the internal CCID driver can handle the reader. Note, that CCID support is only available if libusb was available at build time. '--reader-port number_or_string' This option may be used to specify the port of the card terminal. A value of 0 refers to the first serial device; add 32768 to access USB devices. The default is 32768 (first USB device). PC/SC or CCID readers might need a string here; run the program in verbose mode to get a list of available readers. The default is then the first reader found. '--display-charset name' Set the name of the native character set. This is used to convert some informational strings like user IDs to the proper UTF-8 encoding. Note that this has nothing to do with the character set of data to be encrypted or signed; GnuPG does not recode user-supplied data. If this option is not used, the default character set is determined from the current locale. A verbosity level of 3 shows the chosen set. Valid values for 'name' are: iso-8859-1 This is the Latin 1 set. iso-8859-2 The Latin 2 set. iso-8859-15 This is currently an alias for the Latin 1 set. koi8-r The usual Russian set (rfc1489). utf-8 Bypass all translations and assume that the OS uses native UTF-8 encoding. '--utf8-strings' '--no-utf8-strings' Assume that command line arguments are given as UTF8 strings. The default ('--no-utf8-strings') is to assume that arguments are encoded in the character set as specified by '--display-charset'. These options affect all following arguments. Both options may be used multiple times. '--options file' Read options from 'file' and do not try to read them from the default options file in the homedir (see '--homedir'). This option is ignored if used in an options file. '--no-options' Shortcut for '--options /dev/null'. This option is detected before an attempt to open an option file. Using this option will also prevent the creation of a '~/.gnupg' homedir. '-z n' '--compress-level n' '--bzip2-compress-level n' Set compression level to 'n' for the ZIP and ZLIB compression algorithms. The default is to use the default compression level of zlib (normally 6). '--bzip2-compress-level' sets the compression level for the BZIP2 compression algorithm (defaulting to 6 as well). This is a different option from '--compress-level' since BZIP2 uses a significant amount of memory for each additional compression level. '-z' sets both. A value of 0 for 'n' disables compression. '--bzip2-decompress-lowmem' Use a different decompression method for BZIP2 compressed files. This alternate method uses a bit more than half the memory, but also runs at half the speed. This is useful under extreme low memory circumstances when the file was originally compressed at a high '--bzip2-compress-level'. '--mangle-dos-filenames' '--no-mangle-dos-filenames' Older version of Windows cannot handle filenames with more than one dot. '--mangle-dos-filenames' causes GnuPG to replace (rather than add to) the extension of an output filename to avoid this problem. This option is off by default and has no effect on non-Windows platforms. '--ask-cert-level' '--no-ask-cert-level' When making a key signature, prompt for a certification level. If this option is not specified, the certification level used is set via '--default-cert-level'. See '--default-cert-level' for information on the specific levels and how they are used. '--no-ask-cert-level' disables this option. This option defaults to no. '--default-cert-level n' The default to use for the check level when signing a key. 0 means you make no particular claim as to how carefully you verified the key. 1 means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. 2 means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. 3 means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are just that: examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you. This option defaults to 0 (no particular claim). '--min-cert-level' When building the trust database, treat any signatures with a certification level below this as invalid. Defaults to 2, which disregards level 1 signatures. Note that level 0 "no particular claim" signatures are always accepted. '--trusted-key long key ID' Assume that the specified key (which must be given as a full 8 byte key ID) is as trustworthy as one of your own secret keys. This option is useful if you don't want to keep your secret keys (or one of them) online but still want to be able to check the validity of a given recipient's or signator's key. '--trust-model pgp|classic|direct|always|auto' Set what trust model GnuPG should follow. The models are: pgp This is the Web of Trust combined with trust signatures as used in PGP 5.x and later. This is the default trust model when creating a new trust database. classic This is the standard Web of Trust as introduced by PGP 2. direct Key validity is set directly by the user and not calculated via the Web of Trust. always Skip key validation and assume that used keys are always fully valid. You generally won't use this unless you are using some external validation scheme. This option also suppresses the "[uncertain]" tag printed with signature checks when there is no evidence that the user ID is bound to the key. Note that this trust model still does not allow the use of expired, revoked, or disabled keys. auto Select the trust model depending on whatever the internal trust database says. This is the default model if such a database already exists. '--auto-key-locate parameters' '--no-auto-key-locate' GnuPG can automatically locate and retrieve keys as needed using this option. This happens when encrypting to an email address (in the "user@example.com" form), and there are no user@example.com keys on the local keyring. This option takes any number of the following mechanisms, in the order they are to be tried: cert Locate a key using DNS CERT, as specified in rfc4398. pka Locate a key using DNS PKA. ldap Using DNS Service Discovery, check the domain in question for any LDAP keyservers to use. If this fails, attempt to locate the key using the PGP Universal method of checking 'ldap://keys.(thedomain)'. keyserver Locate a key using whatever keyserver is defined using the '--keyserver' option. keyserver-URL In addition, a keyserver URL as used in the '--keyserver' option may be used here to query that particular keyserver. local Locate the key using the local keyrings. This mechanism allows to select the order a local key lookup is done. Thus using '--auto-key-locate local' is identical to '--no-auto-key-locate'. nodefault This flag disables the standard local key lookup, done before any of the mechanisms defined by the '--auto-key-locate' are tried. The position of this mechanism in the list does not matter. It is not required if 'local' is also used. clear Clear all defined mechanisms. This is useful to override mechanisms given in a config file. '--keyid-format short|0xshort|long|0xlong' Select how to display key IDs. "short" is the traditional 8-character key ID. "long" is the more accurate (but less convenient) 16-character key ID. Add an "0x" to either to include an "0x" at the beginning of the key ID, as in 0x99242560. Note that this option is ignored if the option -with-colons is used. '--keyserver name' Use 'name' as your keyserver. This is the server that '--recv-keys', '--send-keys', and '--search-keys' will communicate with to receive keys from, send keys to, and search for keys on. The format of the 'name' is a URI: 'scheme:[//]keyservername[:port]' The scheme is the type of keyserver: "hkp" for the HTTP (or compatible) keyservers, "ldap" for the LDAP keyservers, or "mailto" for the Graff email keyserver. Note that your particular installation of GnuPG may have other keyserver types available as well. Keyserver schemes are case-insensitive. After the keyserver name, optional keyserver configuration options may be provided. These are the same as the global '--keyserver-options' from below, but apply only to this particular keyserver. Most keyservers synchronize with each other, so there is generally no need to send keys to more than one server. The keyserver 'hkp://keys.gnupg.net' uses round robin DNS to give a different keyserver each time you use it. '--keyserver-options name=value1 ' This is a space or comma delimited string that gives options for the keyserver. Options can be prefixed with a 'no-' to give the opposite meaning. Valid import-options or export-options may be used here as well to apply to importing ('--recv-key') or exporting ('--send-key') a key from a keyserver. While not all options are available for all keyserver types, some common options are: include-revoked When searching for a key with '--search-keys', include keys that are marked on the keyserver as revoked. Note that not all keyservers differentiate between revoked and unrevoked keys, and for such keyservers this option is meaningless. Note also that most keyservers do not have cryptographic verification of key revocations, and so turning this option off may result in skipping keys that are incorrectly marked as revoked. include-disabled When searching for a key with '--search-keys', include keys that are marked on the keyserver as disabled. Note that this option is not used with HKP keyservers. auto-key-retrieve This option enables the automatic retrieving of keys from a keyserver when verifying signatures made by keys that are not on the local keyring. Note that this option makes a "web bug" like behavior possible. Keyserver operators can see which keys you request, so by sending you a message signed by a brand new key (which you naturally will not have on your local keyring), the operator can tell both your IP address and the time when you verified the signature. honor-keyserver-url When using '--refresh-keys', if the key in question has a preferred keyserver URL, then use that preferred keyserver to refresh the key from. In addition, if auto-key-retrieve is set, and the signature being verified has a preferred keyserver URL, then use that preferred keyserver to fetch the key from. Defaults to yes. honor-pka-record If auto-key-retrieve is set, and the signature being verified has a PKA record, then use the PKA information to fetch the key. Defaults to yes. include-subkeys When receiving a key, include subkeys as potential targets. Note that this option is not used with HKP keyservers, as they do not support retrieving keys by subkey id. use-temp-files On most Unix-like platforms, GnuPG communicates with the keyserver helper program via pipes, which is the most efficient method. This option forces GnuPG to use temporary files to communicate. On some platforms (such as Win32 and RISC OS), this option is always enabled. keep-temp-files If using 'use-temp-files', do not delete the temp files after using them. This option is useful to learn the keyserver communication protocol by reading the temporary files. verbose Tell the keyserver helper program to be more verbose. This option can be repeated multiple times to increase the verbosity level. timeout Tell the keyserver helper program how long (in seconds) to try and perform a keyserver action before giving up. Note that performing multiple actions at the same time uses this timeout value per action. For example, when retrieving multiple keys via '--recv-keys', the timeout applies separately to each key retrieval, and not to the '--recv-keys' command as a whole. Defaults to 30 seconds. http-proxy='value' Set the proxy to use for HTTP and HKP keyservers. This overrides the "http_proxy" environment variable, if any. max-cert-size When retrieving a key via DNS CERT, only accept keys up to this size. Defaults to 16384 bytes. debug Turn on debug output in the keyserver helper program. Note that the details of debug output depends on which keyserver helper program is being used, and in turn, on any libraries that the keyserver helper program uses internally (libcurl, openldap, etc). check-cert Enable certificate checking if the keyserver presents one (for hkps or ldaps). Defaults to on. ca-cert-file Provide a certificate store to override the system default. Only necessary if check-cert is enabled, and the keyserver is using a certificate that is not present in a system default certificate list. Note that depending on the SSL library that the keyserver helper is built with, this may actually be a directory or a file. '--completes-needed n' Number of completely trusted users to introduce a new key signer (defaults to 1). '--marginals-needed n' Number of marginally trusted users to introduce a new key signer (defaults to 3) '--max-cert-depth n' Maximum depth of a certification chain (default is 5). '--simple-sk-checksum' Secret keys are integrity protected by using a SHA-1 checksum. This method is part of the upcoming enhanced OpenPGP specification but GnuPG already uses it as a countermeasure against certain attacks. Old applications don't understand this new format, so this option may be used to switch back to the old behaviour. Using this option bears a security risk. Note that using this option only takes effect when the secret key is encrypted - the simplest way to make this happen is to change the passphrase on the key (even changing it to the same value is acceptable). '--no-sig-cache' Do not cache the verification status of key signatures. Caching gives a much better performance in key listings. However, if you suspect that your public keyring is not save against write modifications, you can use this option to disable the caching. It probably does not make sense to disable it because all kind of damage can be done if someone else has write access to your public keyring. '--no-sig-create-check' This options is obsolete. It has no function. '--auto-check-trustdb' '--no-auto-check-trustdb' If GnuPG feels that its information about the Web of Trust has to be updated, it automatically runs the '--check-trustdb' command internally. This may be a time consuming process. '--no-auto-check-trustdb' disables this option. '--use-agent' '--no-use-agent' Try to use the GnuPG-Agent. With this option, GnuPG first tries to connect to the agent before it asks for a passphrase. '--no-use-agent' disables this option. '--gpg-agent-info' Override the value of the environment variable 'GPG_AGENT_INFO'. This is only used when '--use-agent' has been given. Given that this option is not anymore used by 'gpg2', it should be avoided if possible. '--lock-once' Lock the databases the first time a lock is requested and do not release the lock until the process terminates. '--lock-multiple' Release the locks every time a lock is no longer needed. Use this to override a previous '--lock-once' from a config file. '--lock-never' Disable locking entirely. This option should be used only in very special environments, where it can be assured that only one process is accessing those files. A bootable floppy with a stand-alone encryption system will probably use this. Improper usage of this option may lead to data and key corruption. '--exit-on-status-write-error' This option will cause write errors on the status FD to immediately terminate the process. That should in fact be the default but it never worked this way and thus we need an option to enable this, so that the change won't break applications which close their end of a status fd connected pipe too early. Using this option along with '--enable-progress-filter' may be used to cleanly cancel long running gpg operations. '--limit-card-insert-tries n' With 'n' greater than 0 the number of prompts asking to insert a smartcard gets limited to N-1. Thus with a value of 1 gpg won't at all ask to insert a card if none has been inserted at startup. This option is useful in the configuration file in case an application does not know about the smartcard support and waits ad infinitum for an inserted card. '--no-random-seed-file' GnuPG uses a file to store its internal random pool over invocations. This makes random generation faster; however sometimes write operations are not desired. This option can be used to achieve that with the cost of slower random generation. '--no-greeting' Suppress the initial copyright message. '--no-secmem-warning' Suppress the warning about "using insecure memory". '--no-permission-warning' Suppress the warning about unsafe file and home directory ('--homedir') permissions. Note that the permission checks that GnuPG performs are not intended to be authoritative, but rather they simply warn about certain common permission problems. Do not assume that the lack of a warning means that your system is secure. Note that the warning for unsafe '--homedir' permissions cannot be suppressed in the gpg.conf file, as this would allow an attacker to place an unsafe gpg.conf file in place, and use this file to suppress warnings about itself. The '--homedir' permissions warning may only be suppressed on the command line. '--no-mdc-warning' Suppress the warning about missing MDC integrity protection. '--require-secmem' '--no-require-secmem' Refuse to run if GnuPG cannot get secure memory. Defaults to no (i.e. run, but give a warning). '--require-cross-certification' '--no-require-cross-certification' When verifying a signature made from a subkey, ensure that the cross certification "back signature" on the subkey is present and valid. This protects against a subtle attack against subkeys that can sign. Defaults to '--require-cross-certification' for 'gpg'. '--expert' '--no-expert' Allow the user to do certain nonsensical or "silly" things like signing an expired or revoked key, or certain potentially incompatible things like generating unusual key types. This also disables certain warning messages about potentially incompatible actions. As the name implies, this option is for experts only. If you don't fully understand the implications of what it allows you to do, leave this off. '--no-expert' disables this option.  File: gnupg1.info, Node: GPG Key related Options, Next: GPG Input and Output, Prev: GPG Configuration Options, Up: GPG Options 1.2.2 Key related options ------------------------- '--recipient NAME' '-r' Encrypt for user id NAME. If this option or '--hidden-recipient' is not specified, GnuPG asks for the user-id unless '--default-recipient' is given. '--hidden-recipient NAME' '-R' Encrypt for user ID NAME, but hide the key ID of this user's key. This option helps to hide the receiver of the message and is a limited countermeasure against traffic analysis. If this option or '--recipient' is not specified, GnuPG asks for the user ID unless '--default-recipient' is given. '--encrypt-to name' Same as '--recipient' but this one is intended for use in the options file and may be used with your own user-id as an "encrypt-to-self". These keys are only used when there are other recipients given either by use of '--recipient' or by the asked user id. No trust checking is performed for these user ids and even disabled keys can be used. '--hidden-encrypt-to name' Same as '--hidden-recipient' but this one is intended for use in the options file and may be used with your own user-id as a hidden "encrypt-to-self". These keys are only used when there are other recipients given either by use of '--recipient' or by the asked user id. No trust checking is performed for these user ids and even disabled keys can be used. '--no-encrypt-to' Disable the use of all '--encrypt-to' and '--hidden-encrypt-to' keys. '--group name=value1 ' Sets up a named group, which is similar to aliases in email programs. Any time the group name is a recipient ('-r' or '--recipient'), it will be expanded to the values specified. Multiple groups with the same name are automatically merged into a single group. The values are 'key IDs' or fingerprints, but any key description is accepted. Note that a value with spaces in it will be treated as two different values. Note also there is only one level of expansion -- you cannot make an group that points to another group. When used from the command line, it may be necessary to quote the argument to this option to prevent the shell from treating it as multiple arguments. '--ungroup name' Remove a given entry from the '--group' list. '--no-groups' Remove all entries from the '--group' list. '--local-user NAME' '-u' Use NAME as the key to sign with. Note that this option overrides '--default-key'. '--try-all-secrets' Don't look at the key ID as stored in the message but try all secret keys in turn to find the right decryption key. This option forces the behaviour as used by anonymous recipients (created by using '--throw-keyids' or '--hidden-recipient') and might come handy in case where an encrypted message contains a bogus key ID. '--skip-hidden-recipients' '--no-skip-hidden-recipients' During decryption skip all anonymous recipients. This option helps in the case that people use the hidden recipients feature to hide there own encrypt-to key from others. If oneself has many secret keys this may lead to a major annoyance because all keys are tried in turn to decrypt soemthing which was not really intended for it. The drawback of this option is that it is currently not possible to decrypt a message which includes real anonymous recipients.  File: gnupg1.info, Node: GPG Input and Output, Next: OpenPGP Options, Prev: GPG Key related Options, Up: GPG Options 1.2.3 Input and Output ---------------------- '--armor' '-a' Create ASCII armored output. The default is to create the binary OpenPGP format. '--no-armor' Assume the input data is not in ASCII armored format. '--output FILE' '-o FILE' Write output to FILE. '--max-output n' This option sets a limit on the number of bytes that will be generated when processing a file. Since OpenPGP supports various levels of compression, it is possible that the plaintext of a given message may be significantly larger than the original OpenPGP message. While GnuPG works properly with such messages, there is often a desire to set a maximum file size that will be generated before processing is forced to stop by the OS limits. Defaults to 0, which means "no limit". '--import-options parameters' This is a space or comma delimited string that gives options for importing keys. Options can be prepended with a 'no-' to give the opposite meaning. The options are: import-local-sigs Allow importing key signatures marked as "local". This is not generally useful unless a shared keyring scheme is being used. Defaults to no. keep-ownertrust Normally possible still existing ownertrust values of a key are cleared if a key is imported. This is in general desirable so that a formerly deleted key does not automatically gain an ownertrust values merely due to import. On the other hand it is sometimes necessary to re-import a trusted set of keys again but keeping already assigned ownertrust values. This can be achived by using this option. repair-pks-subkey-bug During import, attempt to repair the damage caused by the PKS keyserver bug (pre version 0.9.6) that mangles keys with multiple subkeys. Note that this cannot completely repair the damaged key as some crucial data is removed by the keyserver, but it does at least give you back one subkey. Defaults to no for regular '--import' and to yes for keyserver '--recv-keys'. merge-only During import, allow key updates to existing keys, but do not allow any new keys to be imported. Defaults to no. import-clean After import, compact (remove all signatures except the self-signature) any user IDs from the new key that are not usable. Then, remove any signatures from the new key that are not usable. This includes signatures that were issued by keys that are not present on the keyring. This option is the same as running the '--edit-key' command "clean" after import. Defaults to no. import-minimal Import the smallest key possible. This removes all signatures except the most recent self-signature on each user ID. This option is the same as running the '--edit-key' command "minimize" after import. Defaults to no. '--export-options parameters' This is a space or comma delimited string that gives options for exporting keys. Options can be prepended with a 'no-' to give the opposite meaning. The options are: export-local-sigs Allow exporting key signatures marked as "local". This is not generally useful unless a shared keyring scheme is being used. Defaults to no. export-attributes Include attribute user IDs (photo IDs) while exporting. This is useful to export keys if they are going to be used by an OpenPGP program that does not accept attribute user IDs. Defaults to yes. export-sensitive-revkeys Include designated revoker information that was marked as "sensitive". Defaults to no. export-reset-subkey-passwd When using the '--export-secret-subkeys' command, this option resets the passphrases for all exported subkeys to empty. This is useful when the exported subkey is to be used on an unattended machine where a passphrase doesn't necessarily make sense. Defaults to no. export-clean Compact (remove all signatures from) user IDs on the key being exported if the user IDs are not usable. Also, do not export any signatures that are not usable. This includes signatures that were issued by keys that are not present on the keyring. This option is the same as running the '--edit-key' command "clean" before export except that the local copy of the key is not modified. Defaults to no. export-minimal Export the smallest key possible. This removes all signatures except the most recent self-signature on each user ID. This option is the same as running the '--edit-key' command "minimize" before export except that the local copy of the key is not modified. Defaults to no. '--with-colons' Print key listings delimited by colons. Note that the output will be encoded in UTF-8 regardless of any '--display-charset' setting. This format is useful when GnuPG is called from scripts and other programs as it is easily machine parsed. The details of this format are documented in the file 'doc/DETAILS', which is included in the GnuPG source distribution. '--fixed-list-mode' Do not merge primary user ID and primary key in '--with-colon' listing mode and print all timestamps as seconds since 1970-01-01. '--with-fingerprint' Same as the command '--fingerprint' but changes only the format of the output and may be used together with another command.  File: gnupg1.info, Node: OpenPGP Options, Next: Compliance Options, Prev: GPG Input and Output, Up: GPG Options 1.2.4 OpenPGP protocol specific options. ---------------------------------------- '-t, --textmode' '--no-textmode' Treat input files as text and store them in the OpenPGP canonical text form with standard "CRLF" line endings. This also sets the necessary flags to inform the recipient that the encrypted or signed data is text and may need its line endings converted back to whatever the local system uses. This option is useful when communicating between two platforms that have different line ending conventions (UNIX-like to Mac, Mac to Windows, etc). '--no-textmode' disables this option, and is the default. If '-t' (but not '--textmode') is used together with armoring and signing, this enables clearsigned messages. This kludge is needed for command-line compatibility with command-line versions of PGP; normally you would use '--sign' or '--clearsign' to select the type of the signature. '--force-v3-sigs' '--no-force-v3-sigs' OpenPGP states that an implementation should generate v4 signatures but PGP versions 5 through 7 only recognize v4 signatures on key material. This option forces v3 signatures for signatures on data. Note that this option implies '--no-ask-sig-expire', and unsets '--sig-policy-url', '--sig-notation', and '--sig-keyserver-url', as these features cannot be used with v3 signatures. '--no-force-v3-sigs' disables this option. Defaults to no. '--force-v4-certs' '--no-force-v4-certs' Always use v4 key signatures even on v3 keys. This option also changes the default hash algorithm for v3 RSA keys from MD5 to SHA-1. '--no-force-v4-certs' disables this option. '--force-mdc' Force the use of encryption with a modification detection code. This is always used with the newer ciphers (those with a blocksize greater than 64 bits), or if all of the recipient keys indicate MDC support in their feature flags. '--disable-mdc' Disable the use of the modification detection code. Note that by using this option, the encrypted message becomes vulnerable to a message modification attack. '--personal-cipher-preferences string' Set the list of personal cipher preferences to 'string'. Use 'gpg --version' to get a list of available algorithms, and use 'none' to set no preference at all. This allows the user to safely override the algorithm chosen by the recipient key preferences, as GPG will only select an algorithm that is usable by all recipients. The most highly ranked cipher in this list is also used for the '--symmetric' encryption command. '--personal-digest-preferences string' Set the list of personal digest preferences to 'string'. Use 'gpg --version' to get a list of available algorithms, and use 'none' to set no preference at all. This allows the user to safely override the algorithm chosen by the recipient key preferences, as GPG will only select an algorithm that is usable by all recipients. The most highly ranked digest algorithm in this list is also used when signing without encryption (e.g. '--clearsign' or '--sign'). '--personal-compress-preferences string' Set the list of personal compression preferences to 'string'. Use 'gpg --version' to get a list of available algorithms, and use 'none' to set no preference at all. This allows the user to safely override the algorithm chosen by the recipient key preferences, as GPG will only select an algorithm that is usable by all recipients. The most highly ranked compression algorithm in this list is also used when there are no recipient keys to consider (e.g. '--symmetric'). '--s2k-cipher-algo name' Use 'name' as the cipher algorithm used to protect secret keys. The default cipher is AES128. This cipher is also used for conventional encryption if '--personal-cipher-preferences' and '--cipher-algo' is not given. '--s2k-digest-algo name' Use 'name' as the digest algorithm used to mangle the passphrases. The default algorithm is SHA-1. '--s2k-mode n' Selects how passphrases are mangled. If 'n' is 0 a plain passphrase (which is not recommended) will be used, a 1 adds a salt to the passphrase and a 3 (the default) iterates the whole process a number of times (see -s2k-count). Unless '--rfc1991' is used, this mode is also used for conventional encryption. '--s2k-count n' Specify how many times the passphrase mangling is repeated. This value may range between 1024 and 65011712 inclusive. The default is inquired from gpg-agent. Note that not all values in the 1024-65011712 range are legal and if an illegal value is selected, GnuPG will round up to the nearest legal value. This option is only meaningful if '--s2k-mode' is 3.  File: gnupg1.info, Node: Compliance Options, Next: GPG Esoteric Options, Prev: OpenPGP Options, Up: GPG Options 1.2.5 Compliance options ------------------------ These options control what GnuPG is compliant to. Only one of these options may be active at a time. Note that the default setting of this is nearly always the correct one. See the INTEROPERABILITY WITH OTHER OPENPGP PROGRAMS section below before using one of these options. '--gnupg' Use standard GnuPG behavior. This is essentially OpenPGP behavior (see '--openpgp'), but with some additional workarounds for common compatibility problems in different versions of PGP. This is the default option, so it is not generally needed, but it may be useful to override a different compliance option in the gpg.conf file. '--openpgp' Reset all packet, cipher and digest options to strict OpenPGP behavior. Use this option to reset all previous options like '--s2k-*', '--cipher-algo', '--digest-algo' and '--compress-algo' to OpenPGP compliant values. All PGP workarounds are disabled. '--rfc4880' Reset all packet, cipher and digest options to strict RFC-4880 behavior. Note that this is currently the same thing as '--openpgp'. '--rfc2440' Reset all packet, cipher and digest options to strict RFC-2440 behavior. '--rfc1991' Try to be more RFC-1991 (PGP 2.x) compliant. This option is deprecated will be removed in GnuPG 2.1. '--pgp2' Set up all options to be as PGP 2.x compliant as possible, and warn if an action is taken (e.g. encrypting to a non-RSA key) that will create a message that PGP 2.x will not be able to handle. Note that 'PGP 2.x' here means 'MIT PGP 2.6.2'. There are other versions of PGP 2.x available, but the MIT release is a good common baseline. This option implies '--rfc1991 --disable-mdc --no-force-v4-certs --escape-from-lines --force-v3-sigs --allow-weak-digest-algos --cipher-algo IDEA --digest-algo MD5 --compress-algo ZIP'. It also disables '--textmode' when encrypting. This option is deprecated will be removed in GnuPG 2.1. The reason for dropping PGP-2 support is that the PGP 2 format is not anymore considered safe (for example due to the use of the broken MD5 algorithm). Note that the decryption of PGP-2 created messages will continue to work. '--pgp6' Set up all options to be as PGP 6 compliant as possible. This restricts you to the ciphers IDEA (if the IDEA plugin is installed), 3DES, and CAST5, the hashes MD5, SHA1 and RIPEMD160, and the compression algorithms none and ZIP. This also disables -throw-keyids, and making signatures with signing subkeys as PGP 6 does not understand signatures made by signing subkeys. This option implies '--disable-mdc --escape-from-lines --force-v3-sigs'. '--pgp7' Set up all options to be as PGP 7 compliant as possible. This is identical to '--pgp6' except that MDCs are not disabled, and the list of allowable ciphers is expanded to add AES128, AES192, AES256, and TWOFISH. '--pgp8' Set up all options to be as PGP 8 compliant as possible. PGP 8 is a lot closer to the OpenPGP standard than previous versions of PGP, so all this does is disable '--throw-keyids' and set '--escape-from-lines'. All algorithms are allowed except for the SHA224, SHA384, and SHA512 digests.  File: gnupg1.info, Node: GPG Esoteric Options, Next: Deprecated Options, Prev: Compliance Options, Up: GPG Options 1.2.6 Doing things one usually doesn't want to do. -------------------------------------------------- '-n' '--dry-run' Don't make any changes (this is not completely implemented). '--list-only' Changes the behaviour of some commands. This is like '--dry-run' but different in some cases. The semantic of this command may be extended in the future. Currently it only skips the actual decryption pass and therefore enables a fast listing of the encryption keys. '-i' '--interactive' Prompt before overwriting any files. '--debug-level LEVEL' Select the debug level for investigating problems. LEVEL may be a numeric value or by a keyword: 'none' No debugging at all. A value of less than 1 may be used instead of the keyword. 'basic' Some basic debug messages. A value between 1 and 2 may be used instead of the keyword. 'advanced' More verbose debug messages. A value between 3 and 5 may be used instead of the keyword. 'expert' Even more detailed messages. A value between 6 and 8 may be used instead of the keyword. 'guru' All of the debug messages you can get. A value greater than 8 may be used instead of the keyword. The creation of hash tracing files is only enabled if the keyword is used. How these messages are mapped to the actual debugging flags is not specified and may change with newer releases of this program. They are however carefully selected to best aid in debugging. '--debug FLAGS' Set debugging flags. All flags are or-ed and FLAGS may be given in C syntax (e.g. 0x0042). '--debug-all' Set all useful debugging flags. '--debug-ccid-driver' Enable debug output from the included CCID driver for smartcards. Note that this option is only available on some system. '--faked-system-time EPOCH' This option is only useful for testing; it sets the system time back or forth to EPOCH which is the number of seconds elapsed since the year 1970. Alternatively EPOCH may be given as a full ISO time string (e.g. "20070924T154812"). '--enable-progress-filter' Enable certain PROGRESS status outputs. This option allows frontends to display a progress indicator while gpg is processing larger files. There is a slight performance overhead using it. '--status-fd n' Write special status strings to the file descriptor 'n'. See the file DETAILS in the documentation for a listing of them. '--status-file file' Same as '--status-fd', except the status data is written to file 'file'. '--logger-fd n' Write log output to file descriptor 'n' and not to STDERR. '--log-file file' '--logger-file file' Same as '--logger-fd', except the logger data is written to file 'file'. Note that '--log-file' is only implemented for GnuPG-2. '--attribute-fd n' Write attribute subpackets to the file descriptor 'n'. This is most useful for use with '--status-fd', since the status messages are needed to separate out the various subpackets from the stream delivered to the file descriptor. '--attribute-file file' Same as '--attribute-fd', except the attribute data is written to file 'file'. '--comment string' '--no-comments' Use 'string' as a comment string in clear text signatures and ASCII armored messages or keys (see '--armor'). The default behavior is not to use a comment string. '--comment' may be repeated multiple times to get multiple comment strings. '--no-comments' removes all comments. It is a good idea to keep the length of a single comment below 60 characters to avoid problems with mail programs wrapping such lines. Note that comment lines, like all other header lines, are not protected by the signature. '--emit-version' '--no-emit-version' Force inclusion of the version string in ASCII armored output. If given once only the name of the program and the major number is emitted (default), given twice the minor is also emitted, given triple the micro is added, and given quad an operating system identification is also emitted. '--no-emit-version' disables the version line. '--sig-notation name=value' '--cert-notation name=value' '-N, --set-notation name=value' Put the name value pair into the signature as notation data. 'name' must consist only of printable characters or spaces, and must contain a '@' character in the form keyname@domain.example.com (substituting the appropriate keyname and domain name, of course). This is to help prevent pollution of the IETF reserved notation namespace. The '--expert' flag overrides the '@' check. 'value' may be any printable string; it will be encoded in UTF8, so you should check that your '--display-charset' is set correctly. If you prefix 'name' with an exclamation mark (!), the notation data will be flagged as critical (rfc4880:5.2.3.16). '--sig-notation' sets a notation for data signatures. '--cert-notation' sets a notation for key signatures (certifications). '--set-notation' sets both. There are special codes that may be used in notation names. "%k" will be expanded into the key ID of the key being signed, "%K" into the long key ID of the key being signed, "%f" into the fingerprint of the key being signed, "%s" into the key ID of the key making the signature, "%S" into the long key ID of the key making the signature, "%g" into the fingerprint of the key making the signature (which might be a subkey), "%p" into the fingerprint of the primary key of the key making the signature, "%c" into the signature count from the OpenPGP smartcard, and "%%" results in a single "%". %k, %K, and %f are only meaningful when making a key signature (certification), and %c is only meaningful when using the OpenPGP smartcard. '--sig-policy-url string' '--cert-policy-url string' '--set-policy-url string' Use 'string' as a Policy URL for signatures (rfc4880:5.2.3.20). If you prefix it with an exclamation mark (!), the policy URL packet will be flagged as critical. '--sig-policy-url' sets a policy url for data signatures. '--cert-policy-url' sets a policy url for key signatures (certifications). '--set-policy-url' sets both. The same %-expandos used for notation data are available here as well. '--sig-keyserver-url string' Use 'string' as a preferred keyserver URL for data signatures. If you prefix it with an exclamation mark (!), the keyserver URL packet will be flagged as critical. The same %-expandos used for notation data are available here as well. '--set-filename string' Use 'string' as the filename which is stored inside messages. This overrides the default, which is to use the actual filename of the file being encrypted. '--for-your-eyes-only' '--no-for-your-eyes-only' Set the 'for your eyes only' flag in the message. This causes GnuPG to refuse to save the file unless the '--output' option is given, and PGP to use a "secure viewer" with a claimed Tempest-resistant font to display the message. This option overrides '--set-filename'. '--no-for-your-eyes-only' disables this option. '--use-embedded-filename' '--no-use-embedded-filename' Try to create a file with a name as embedded in the data. This can be a dangerous option as it allows to overwrite files. Defaults to no. '--cipher-algo name' Use 'name' as cipher algorithm. Running the program with the command '--version' yields a list of supported algorithms. If this is not used the cipher algorithm is selected from the preferences stored with the key. In general, you do not want to use this option as it allows you to violate the OpenPGP standard. '--personal-cipher-preferences' is the safe way to accomplish the same thing. '--digest-algo name' Use 'name' as the message digest algorithm. Running the program with the command '--version' yields a list of supported algorithms. In general, you do not want to use this option as it allows you to violate the OpenPGP standard. '--personal-digest-preferences' is the safe way to accomplish the same thing. '--compress-algo name' Use compression algorithm 'name'. "zlib" is RFC-1950 ZLIB compression. "zip" is RFC-1951 ZIP compression which is used by PGP. "bzip2" is a more modern compression scheme that can compress some things better than zip or zlib, but at the cost of more memory used during compression and decompression. "uncompressed" or "none" disables compression. If this option is not used, the default behavior is to examine the recipient key preferences to see which algorithms the recipient supports. If all else fails, ZIP is used for maximum compatibility. ZLIB may give better compression results than ZIP, as the compression window size is not limited to 8k. BZIP2 may give even better compression results than that, but will use a significantly larger amount of memory while compressing and decompressing. This may be significant in low memory situations. Note, however, that PGP (all versions) only supports ZIP compression. Using any algorithm other than ZIP or "none" will make the message unreadable with PGP. In general, you do not want to use this option as it allows you to violate the OpenPGP standard. '--personal-compress-preferences' is the safe way to accomplish the same thing. '--cert-digest-algo name' Use 'name' as the message digest algorithm used when signing a key. Running the program with the command '--version' yields a list of supported algorithms. Be aware that if you choose an algorithm that GnuPG supports but other OpenPGP implementations do not, then some users will not be able to use the key signatures you make, or quite possibly your entire key. '--disable-cipher-algo name' Never allow the use of 'name' as cipher algorithm. The given name will not be checked so that a later loaded algorithm will still get disabled. '--disable-pubkey-algo name' Never allow the use of 'name' as public key algorithm. The given name will not be checked so that a later loaded algorithm will still get disabled. '--throw-keyids' '--no-throw-keyids' Do not put the recipient key IDs into encrypted messages. This helps to hide the receivers of the message and is a limited countermeasure against traffic analysis.(1) On the receiving side, it may slow down the decryption process because all available secret keys must be tried. '--no-throw-keyids' disables this option. This option is essentially the same as using '--hidden-recipient' for all recipients. '--not-dash-escaped' This option changes the behavior of cleartext signatures so that they can be used for patch files. You should not send such an armored file via email because all spaces and line endings are hashed too. You can not use this option for data which has 5 dashes at the beginning of a line, patch files don't have this. A special armor header line tells GnuPG about this cleartext signature option. '--escape-from-lines' '--no-escape-from-lines' Because some mailers change lines starting with "From " to ">From " it is good to handle such lines in a special way when creating cleartext signatures to prevent the mail system from breaking the signature. Note that all other PGP versions do it this way too. Enabled by default. '--no-escape-from-lines' disables this option. '--passphrase-repeat n' Specify how many times 'gpg' will request a new passphrase be repeated. This is useful for helping memorize a passphrase. Defaults to 1 repetition. '--passphrase-fd n' Read the passphrase from file descriptor 'n'. Only the first line will be read from file descriptor 'n'. If you use 0 for 'n', the passphrase will be read from STDIN. This can only be used if only one passphrase is supplied. '--passphrase-file file' Read the passphrase from file 'file'. Only the first line will be read from file 'file'. This can only be used if only one passphrase is supplied. Obviously, a passphrase stored in a file is of questionable security if other users can read this file. Don't use this option if you can avoid it. '--passphrase string' Use 'string' as the passphrase. This can only be used if only one passphrase is supplied. Obviously, this is of very questionable security on a multi-user system. Don't use this option if you can avoid it. '--command-fd n' This is a replacement for the deprecated shared-memory IPC mode. If this option is enabled, user input on questions is not expected from the TTY but from the given file descriptor. It should be used together with '--status-fd'. See the file doc/DETAILS in the source distribution for details on how to use it. '--command-file file' Same as '--command-fd', except the commands are read out of file 'file' '--allow-non-selfsigned-uid' '--no-allow-non-selfsigned-uid' Allow the import and use of keys with user IDs which are not self-signed. This is not recommended, as a non self-signed user ID is trivial to forge. '--no-allow-non-selfsigned-uid' disables. '--allow-freeform-uid' Disable all checks on the form of the user ID while generating a new one. This option should only be used in very special environments as it does not ensure the de-facto standard format of user IDs. '--ignore-time-conflict' GnuPG normally checks that the timestamps associated with keys and signatures have plausible values. However, sometimes a signature seems to be older than the key due to clock problems. This option makes these checks just a warning. See also '--ignore-valid-from' for timestamp issues on subkeys. '--ignore-valid-from' GnuPG normally does not select and use subkeys created in the future. This option allows the use of such keys and thus exhibits the pre-1.0.7 behaviour. You should not use this option unless there is some clock problem. See also '--ignore-time-conflict' for timestamp issues with signatures. '--ignore-crc-error' The ASCII armor used by OpenPGP is protected by a CRC checksum against transmission errors. Occasionally the CRC gets mangled somewhere on the transmission channel but the actual content (which is protected by the OpenPGP protocol anyway) is still okay. This option allows GnuPG to ignore CRC errors. '--ignore-mdc-error' This option changes a MDC integrity protection failure into a warning. This can be useful if a message is partially corrupt, but it is necessary to get as much data as possible out of the corrupt message. However, be aware that a MDC protection failure may also mean that the message was tampered with intentionally by an attacker. '--allow-weak-digest-algos' Signatures made with known-weak digest algorithms are normally rejected with an "invalid digest algorithm" message. This option allows the verification of signatures made with such weak algorithms. MD5 is the only digest algorithm considered weak by default. See also '--weak-digest' to reject other digest algorithms. '--weak-digest name' Treat the specified digest algorithm as weak. Signatures made over weak digests algorithms are normally rejected. This option can be supplied multiple times if multiple algorithms should be considered weak. See also '--allow-weak-digest-algos' to disable rejection of weak digests. MD5 is always considered weak, and does not need to be listed explicitly. '--no-default-keyring' Do not add the default keyrings to the list of keyrings. Note that GnuPG will not operate without any keyrings, so if you use this option and do not provide alternate keyrings via '--keyring' or '--secret-keyring', then GnuPG will still use the default public or secret keyrings. '--skip-verify' Skip the signature verification step. This may be used to make the decryption faster if the signature verification is not needed. '--with-key-data' Print key listings delimited by colons (like '--with-colons') and print the public key data. '--fast-list-mode' Changes the output of the list commands to work faster; this is achieved by leaving some parts empty. Some applications don't need the user ID and the trust information given in the listings. By using this options they can get a faster listing. The exact behaviour of this option may change in future versions. If you are missing some information, don't use this option. '--no-literal' This is not for normal use. Use the source to see for what it might be useful. '--set-filesize' This is not for normal use. Use the source to see for what it might be useful. '--show-session-key' Display the session key used for one message. See '--override-session-key' for the counterpart of this option. We think that Key Escrow is a Bad Thing; however the user should have the freedom to decide whether to go to prison or to reveal the content of one specific message without compromising all messages ever encrypted for one secret key. DON'T USE IT UNLESS YOU ARE REALLY FORCED TO DO SO. '--override-session-key string' Don't use the public key but the session key 'string'. The format of this string is the same as the one printed by '--show-session-key'. This option is normally not used but comes handy in case someone forces you to reveal the content of an encrypted message; using this option you can do this without handing out the secret key. '--ask-sig-expire' '--no-ask-sig-expire' When making a data signature, prompt for an expiration time. If this option is not specified, the expiration time set via '--default-sig-expire' is used. '--no-ask-sig-expire' disables this option. '--default-sig-expire' The default expiration time to use for signature expiration. Valid values are "0" for no expiration, a number followed by the letter d (for days), w (for weeks), m (for months), or y (for years) (for example "2m" for two months, or "5y" for five years), or an absolute date in the form YYYY-MM-DD. Defaults to "0". '--ask-cert-expire' '--no-ask-cert-expire' When making a key signature, prompt for an expiration time. If this option is not specified, the expiration time set via '--default-cert-expire' is used. '--no-ask-cert-expire' disables this option. '--default-cert-expire' The default expiration time to use for key signature expiration. Valid values are "0" for no expiration, a number followed by the letter d (for days), w (for weeks), m (for months), or y (for years) (for example "2m" for two months, or "5y" for five years), or an absolute date in the form YYYY-MM-DD. Defaults to "0". '--allow-secret-key-import' This is an obsolete option and is not used anywhere. '--allow-multiple-messages' '--no-allow-multiple-messages' Allow processing of multiple OpenPGP messages contained in a single file or stream. Some programs that call GPG are not prepared to deal with multiple messages being processed together, so this option defaults to no. Note that versions of GPG prior to 1.4.7 always allowed multiple messages. Warning: Do not use this option unless you need it as a temporary workaround! '--enable-special-filenames' This options enables a mode in which filenames of the form '-&n', where n is a non-negative decimal number, refer to the file descriptor n and not to a file with that name. '--no-expensive-trust-checks' Experimental use only. '--preserve-permissions' Don't change the permissions of a secret keyring back to user read/write only. Use this option only if you really know what you are doing. '--default-preference-list string' Set the list of default preferences to 'string'. This preference list is used for new keys and becomes the default for "setpref" in the edit menu. '--default-keyserver-url name' Set the default keyserver URL to 'name'. This keyserver will be used as the keyserver URL when writing a new self-signature on a key, which includes key generation and changing preferences. '--list-config' Display various internal configuration parameters of GnuPG. This option is intended for external programs that call GnuPG to perform tasks, and is thus not generally useful. See the file 'doc/DETAILS' in the source distribution for the details of which configuration items may be listed. '--list-config' is only usable with '--with-colons' set. '--gpgconf-list' This command is similar to '--list-config' but in general only internally used by the 'gpgconf' tool. '--gpgconf-test' This is more or less dummy action. However it parses the configuration file and returns with failure if the configuration file would prevent 'gpg' from startup. Thus it may be used to run a syntax check on the configuration file. ---------- Footnotes ---------- (1) Using a little social engineering anyone who is able to decrypt the message can check whether one of the other recipients is the one he suspects.  File: gnupg1.info, Node: Deprecated Options, Prev: GPG Esoteric Options, Up: GPG Options 1.2.7 Deprecated options ------------------------ '--load-extension name' Load an extension module. If 'name' does not contain a slash it is searched for in the directory configured when GnuPG was built (generally "/usr/local/lib/gnupg"). Extensions are not generally useful anymore, and the use of this option is deprecated. '--show-photos' '--no-show-photos' Causes '--list-keys', '--list-sigs', '--list-public-keys', '--list-secret-keys', and verifying a signature to also display the photo ID attached to the key, if any. See also '--photo-viewer'. These options are deprecated. Use '--list-options [no-]show-photos' and/or '--verify-options [no-]show-photos' instead. '--show-keyring' Display the keyring name at the head of key listings to show which keyring a given key resides on. This option is deprecated: use '--list-options [no-]show-keyring' instead. '--ctapi-driver file' Use 'file' to access the smartcard reader. The current default is 'libtowitoko.so'. Note that the use of this interface is deprecated; it may be removed in future releases. '--always-trust' Identical to '--trust-model always'. This option is deprecated. '--show-notation' '--no-show-notation' Show signature notations in the '--list-sigs' or '--check-sigs' listings as well as when verifying a signature with a notation in it. These options are deprecated. Use '--list-options [no-]show-notation' and/or '--verify-options [no-]show-notation' instead. '--show-policy-url' '--no-show-policy-url' Show policy URLs in the '--list-sigs' or '--check-sigs' listings as well as when verifying a signature with a policy URL in it. These options are deprecated. Use '--list-options [no-]show-policy-url' and/or '--verify-options [no-]show-policy-url' instead.  File: gnupg1.info, Node: GPG Configuration, Next: GPG Examples, Prev: GPG Options, Up: Invoking GPG 1.3 Configuration files ======================= There are a few configuration files to control certain aspects of 'gpg''s operation. Unless noted, they are expected in the current home directory (*note option --homedir::). 'gpg.conf' This is the standard configuration file read by 'gpg' on startup. It may contain any valid long option; the leading two dashes may not be entered and the option may not be abbreviated. This default name may be changed on the command line (*note gpg-option --options::). You should backup this file. Note that on larger installations, it is useful to put predefined files into the directory '/etc/skel/.gnupg/' so that newly created users start up with a working configuration. For internal purposes 'gpg' creates and maintains a few other files; They all live in in the current home directory (*note option --homedir::). Only the 'gpg' may modify these files. '~/.gnupg/pubring.gpg' The public keyring. You should backup this file. '~/.gnupg/pubring.gpg.lock' The lock file for the public keyring. '~/.gnupg/pubring.kbx' '~/.gnupg/pubring.kbx.lock' A public keyring and its lock file used by GnuPG versions >= 2. It is ignored by GnuPG 1.x '~/.gnupg/secring.gpg' The secret keyring. You should backup this file. '~/.gnupg/trustdb.gpg' The trust database. There is no need to backup this file; it is better to backup the ownertrust values (*note option --export-ownertrust::). '~/.gnupg/trustdb.gpg.lock' The lock file for the trust database. '~/.gnupg/random_seed' A file used to preserve the state of the internal random pool. '~/.gnupg/secring.gpg.lock' The lock file for the secret keyring. '~/.gnupg/openpgp-revocs.d/' This is the directory where gpg stores pre-generated revocation certificates. The file name corresponds to the OpenPGP fingerprint of the respective key. It is suggested to backup those certificates and if the primary private key is not stored on the disk to move them to an external storage device. Anyone who can access theses files is able to revoke the corresponding key. You may want to print them out. You should backup all files in this directory and take care to keep this backup closed away. '/usr[/local]/share/gnupg/options.skel' The skeleton options file. '/usr[/local]/lib/gnupg/' Default location for extensions. Operation is further controlled by a few environment variables: HOME Used to locate the default home directory. GNUPGHOME If set directory used instead of "~/.gnupg". GPG_AGENT_INFO Used to locate the gpg-agent. This is only honored when '--use-agent' is set. The value consists of 3 colon delimited fields: The first is the path to the Unix Domain Socket, the second the PID of the gpg-agent and the protocol version which should be set to 1. When starting the gpg-agent as described in its documentation, this variable is set to the correct value. The option '--gpg-agent-info' can be used to override it. PINENTRY_USER_DATA This value is passed via gpg-agent to pinentry. It is useful to convey extra information to a custom pinentry. COLUMNS LINES Used to size some displays to the full size of the screen. LANGUAGE Apart from its use by GNU, it is used in the W32 version to override the language selection done through the Registry. If used and set to a valid and available language name (LANGID), the file with the translation is loaded from 'GPGDIR/gnupg.nls/LANGID.mo'. Here GPGDIR is the directory out of which the gpg binary has been loaded. If it can't be loaded the Registry is tried and as last resort the native Windows locale system is used.  File: gnupg1.info, Node: GPG Examples, Next: Unattended Usage of GPG, Prev: GPG Configuration, Up: Invoking GPG 1.4 Examples ============ gpg -se -r 'Bob' 'file' sign and encrypt for user Bob gpg -clearsign 'file' make a clear text signature gpg -sb 'file' make a detached signature gpg -u 0x12345678 -sb 'file' make a detached signature with the key 0x12345678 gpg -list-keys 'user_ID' show keys gpg -fingerprint 'user_ID' show fingerprint gpg -verify 'pgpfile' gpg -verify 'sigfile' Verify the signature of the file but do not output the data. The second form is used for detached signatures, where 'sigfile' is the detached signature (either ASCII armored or binary) and are the signed data; if this is not given, the name of the file holding the signed data is constructed by cutting off the extension (".asc" or ".sig") of 'sigfile' or by asking the user for the filename. RETURN VALUE ************ The program returns 0 if everything was fine, 1 if at least a signature was bad, and other error codes for fatal errors. WARNINGS ******** Use a *good* password for your user account and a *good* passphrase to protect your secret key. This passphrase is the weakest part of the whole system. Programs to do dictionary attacks on your secret keyring are very easy to write and so you should protect your "~/.gnupg/" directory very well. Keep in mind that, if this program is used over a network (telnet), it is *very* easy to spy out your passphrase! If you are going to verify detached signatures, make sure that the program knows about it; either give both filenames on the command line or use '-' to specify STDIN. INTEROPERABILITY WITH OTHER OPENPGP PROGRAMS ******************************************** GnuPG tries to be a very flexible implementation of the OpenPGP standard. In particular, GnuPG implements many of the optional parts of the standard, such as the SHA-512 hash, and the ZLIB and BZIP2 compression algorithms. It is important to be aware that not all OpenPGP programs implement these optional algorithms and that by forcing their use via the '--cipher-algo', '--digest-algo', '--cert-digest-algo', or '--compress-algo' options in GnuPG, it is possible to create a perfectly valid OpenPGP message, but one that cannot be read by the intended recipient. There are dozens of variations of OpenPGP programs available, and each supports a slightly different subset of these optional algorithms. For example, until recently, no (unhacked) version of PGP supported the BLOWFISH cipher algorithm. A message using BLOWFISH simply could not be read by a PGP user. By default, GnuPG uses the standard OpenPGP preferences system that will always do the right thing and create messages that are usable by all recipients, regardless of which OpenPGP program they use. Only override this safe default if you really know what you are doing. If you absolutely must override the safe default, or if the preferences on a given key are invalid for some reason, you are far better off using the '--pgp6', '--pgp7', or '--pgp8' options. These options are safe as they do not force any particular algorithms in violation of OpenPGP, but rather reduce the available algorithms to a "PGP-safe" list. BUGS **** On older systems this program should be installed as setuid(root). This is necessary to lock memory pages. Locking memory pages prevents the operating system from writing memory pages (which may contain passphrases or other sensitive material) to disk. If you get no warning message about insecure memory your operating system supports locking without being root. The program drops root privileges as soon as locked memory is allocated. Note also that some systems (especially laptops) have the ability to "suspend to disk" (also known as "safe sleep" or "hibernate"). This writes all memory to disk before going into a low power or even powered off mode. Unless measures are taken in the operating system to protect the saved memory, passphrases or other sensitive material may be recoverable from it later. Before you report a bug you should first search the mailing list archives for similar problems and second check whether such a bug has already been reported to our bug tracker at http://bugs.gnupg.org .  File: gnupg1.info, Node: Unattended Usage of GPG, Prev: GPG Examples, Up: Invoking GPG 1.5 Unattended Usage ==================== 'gpg' is often used as a backend engine by other software. To help with this a machine interface has been defined to have an unambiguous way to do this. The options '--status-fd' and '--batch' are almost always required for this. * Menu: * Unattended GPG key generation:: Unattended key generation  File: gnupg1.info, Node: Unattended GPG key generation, Up: Unattended Usage of GPG 1.5.1 Unattended key generation ------------------------------- The command '--gen-key' may be used along with the option '--batch' for unattended key generation. The parameters are either read from stdin or given as a file on the command line. The format of the parameter file is as follows: * Text only, line length is limited to about 1000 characters. * UTF-8 encoding must be used to specify non-ASCII characters. * Empty lines are ignored. * Leading and trailing while space is ignored. * A hash sign as the first non white space character indicates a comment line. * Control statements are indicated by a leading percent sign, the arguments are separated by white space from the keyword. * Parameters are specified by a keyword, followed by a colon. Arguments are separated by white space. * The first parameter must be 'Key-Type'; control statements may be placed anywhere. * The order of the parameters does not matter except for 'Key-Type' which must be the first parameter. The parameters are only used for the generated keyblock (primary and subkeys); parameters from previous sets are not used. Some syntactically checks may be performed. * Key generation takes place when either the end of the parameter file is reached, the next 'Key-Type' parameter is encountered or at the control statement '%commit' is encountered. Control statements: %echo TEXT Print TEXT as diagnostic. %dry-run Suppress actual key generation (useful for syntax checking). %commit Perform the key generation. Note that an implicit commit is done at the next Key-Type parameter. %pubring FILENAME %secring FILENAME Do not write the key to the default or commandline given keyring but to FILENAME. This must be given before the first commit to take place, duplicate specification of the same filename is ignored, the last filename before a commit is used. The filename is used until a new filename is used (at commit points) and all keys are written to that file. If a new filename is given, this file is created (and overwrites an existing one). For GnuPG versions prior to 2.1, both control statements must be given. For GnuPG 2.1 and later '%secring' is a no-op. %ask-passphrase %no-ask-passphrase Enable (or disable) a mode where the command 'passphrase' is ignored and instead the usual passphrase dialog is used. This does not make sense for batch key generation; however the unattended key generation feature is also used by GUIs and this feature relinquishes the GUI from implementing its own passphrase entry code. These are global control statements and affect all future key genrations. %no-protection Since GnuPG version 2.1 it is not anymore possible to specify a passphrase for unattended key generation. The passphrase command is simply ignored and '%ask-passpharse' is thus implicitly enabled. Using this option allows the creation of keys without any passphrase protection. This option is mainly intended for regression tests. %transient-key If given the keys are created using a faster and a somewhat less secure random number generator. This option may be used for keys which are only used for a short time and do not require full cryptographic strength. It takes only effect if used together with the control statement '%no-protection'. General Parameters: Key-Type: ALGO Starts a new parameter block by giving the type of the primary key. The algorithm must be capable of signing. This is a required parameter. ALGO may either be an OpenPGP algorithm number or a string with the algorithm name. The special value 'default' may be used for ALGO to create the default key type; in this case a 'Key-Usage' shall not be given and 'default' also be used for 'Subkey-Type'. Key-Length: NBITS The requested length of the generated key in bits. The default is returned by running the command 'gpg2 --gpgconf-list'. Key-Grip: HEXSTRING This is optional and used to generate a CSR or certificate for an already existing key. Key-Length will be ignored when given. Key-Usage: USAGE-LIST Space or comma delimited list of key usages. Allowed values are 'encrypt', 'sign', and 'auth'. This is used to generate the key flags. Please make sure that the algorithm is capable of this usage. Note that OpenPGP requires that all primary keys are capable of certification, so no matter what usage is given here, the 'cert' flag will be on. If no 'Key-Usage' is specified and the 'Key-Type' is not 'default', all allowed usages for that particular algorithm are used; if it is not given but 'default' is used the usage will be 'sign'. Subkey-Type: ALGO This generates a secondary key (subkey). Currently only one subkey can be handled. See also 'Key-Type' above. Subkey-Length: NBITS Length of the secondary key (subkey) in bits. The default is returned by running the command 'gpg2 --gpgconf-list'". Subkey-Usage: USAGE-LIST Key usage lists for a subkey; similar to 'Key-Usage'. Passphrase: STRING If you want to specify a passphrase for the secret key, enter it here. Default is not to use any passphrase. Name-Real: NAME Name-Comment: COMMENT Name-Email: EMAIL The three parts of a user name. Remember to use UTF-8 encoding here. If you don't give any of them, no user ID is created. Expire-Date: ISO-DATE|(NUMBER[d|w|m|y]) Set the expiration date for the key (and the subkey). It may either be entered in ISO date format (e.g. "20000815T145012") or as number of days, weeks, month or years after the creation date. The special notation "seconds=N" is also allowed to specify a number of seconds since creation. Without a letter days are assumed. Note that there is no check done on the overflow of the type used by OpenPGP for timestamps. Thus you better make sure that the given value make sense. Although OpenPGP works with time intervals, GnuPG uses an absolute value internally and thus the last year we can represent is 2105. Creation-Date: ISO-DATE Set the creation date of the key as stored in the key information and which is also part of the fingerprint calculation. Either a date like "1986-04-26" or a full timestamp like "19860426T042640" may be used. The time is considered to be UTC. The special notation "seconds=N" may be used to directly specify a the number of seconds since Epoch (Unix time). If it is not given the current time is used. Preferences: STRING Set the cipher, hash, and compression preference values for this key. This expects the same type of string as the sub-command 'setpref' in the '--edit-key' menu. Revoker: ALGO:FPR [sensitive] Add a designated revoker to the generated key. Algo is the public key algorithm of the designated revoker (i.e. RSA=1, DSA=17, etc.) FPR is the fingerprint of the designated revoker. The optional 'sensitive' flag marks the designated revoker as sensitive information. Only v4 keys may be designated revokers. Keyserver: STRING This is an optional parameter that specifies the preferred keyserver URL for the key. Handle: STRING This is an optional parameter only used with the status lines KEY_CREATED and KEY_NOT_CREATED. STRING may be up to 100 characters and should not contain spaces. It is useful for batch key generation to associate a key parameter block with a status line. Here is an example on how to create a key: $ cat >foo < ssb 1024g/8F70E2C0 2000-03-09 If you want to create a key with the default algorithms you would use these parameters: %echo Generating a default key Key-Type: default Subkey-Type: default Name-Real: Joe Tester Name-Comment: with stupid passphrase Name-Email: joe@foo.bar Expire-Date: 0 Passphrase: abc %pubring foo.pub %secring foo.sec # Do a commit here, so that we can later print "done" :-) %commit %echo done  File: gnupg1.info, Node: Specify a User ID, Next: Copying, Prev: Invoking GPG, Up: Top 2 How to Specify a User Id ************************** There are different ways to specify a user ID to GnuPG. Some of them are only valid for 'gpg' others are only good for 'gpgsm'. Here is the entire list of ways to specify a key: * By key Id. This format is deduced from the length of the string and its content or '0x' prefix. The key Id of an X.509 certificate are the low 64 bits of its SHA-1 fingerprint. The use of key Ids is just a shortcut, for all automated processing the fingerprint should be used. When using 'gpg' an exclamation mark (!) may be appended to force using the specified primary or secondary key and not to try and calculate which primary or secondary key to use. The last four lines of the example give the key ID in their long form as internally used by the OpenPGP protocol. You can see the long key ID using the option '--with-colons'. 234567C4 0F34E556E 01347A56A 0xAB123456 234AABBCC34567C4 0F323456784E56EAB 01AB3FED1347A5612 0x234AABBCC34567C4 * By fingerprint. This format is deduced from the length of the string and its content or the '0x' prefix. Note, that only the 20 byte version fingerprint is available with 'gpgsm' (i.e. the SHA-1 hash of the certificate). When using 'gpg' an exclamation mark (!) may be appended to force using the specified primary or secondary key and not to try and calculate which primary or secondary key to use. The best way to specify a key Id is by using the fingerprint. This avoids any ambiguities in case that there are duplicated key IDs. 1234343434343434C434343434343434 123434343434343C3434343434343734349A3434 0E12343434343434343434EAB3484343434343434 0xE12343434343434343434EAB3484343434343434 'gpgsm' also accepts colons between each pair of hexadecimal digits because this is the de-facto standard on how to present X.509 fingerprints. 'gpg' also allows the use of the space separated SHA-1 fingerprint as printed by the key listing commands. * By exact match on OpenPGP user ID. This is denoted by a leading equal sign. It does not make sense for X.509 certificates. =Heinrich Heine * By exact match on an email address. This is indicated by enclosing the email address in the usual way with left and right angles. * By word match. All words must match exactly (not case sensitive) but can appear in any order in the user ID or a subjects name. Words are any sequences of letters, digits, the underscore and all characters with bit 7 set. +Heinrich Heine duesseldorf * By exact match on the subject's DN. This is indicated by a leading slash, directly followed by the RFC-2253 encoded DN of the subject. Note that you can't use the string printed by "gpgsm -list-keys" because that one as been reordered and modified for better readability; use -with-colons to print the raw (but standard escaped) RFC-2253 string /CN=Heinrich Heine,O=Poets,L=Paris,C=FR * By exact match on the issuer's DN. This is indicated by a leading hash mark, directly followed by a slash and then directly followed by the rfc2253 encoded DN of the issuer. This should return the Root cert of the issuer. See note above. #/CN=Root Cert,O=Poets,L=Paris,C=FR * By exact match on serial number and issuer's DN. This is indicated by a hash mark, followed by the hexadecimal representation of the serial number, then followed by a slash and the RFC-2253 encoded DN of the issuer. See note above. #4F03/CN=Root Cert,O=Poets,L=Paris,C=FR * By keygrip This is indicated by an ampersand followed by the 40 hex digits of a keygrip. 'gpgsm' prints the keygrip when using the command '--dump-cert'. It does not yet work for OpenPGP keys. &D75F22C3F86E355877348498CDC92BD21010A480 * By substring match. This is the default mode but applications may want to explicitly indicate this by putting the asterisk in front. Match is not case sensitive. Heine *Heine Please note that we have reused the hash mark identifier which was used in old GnuPG versions to indicate the so called local-id. It is not anymore used and there should be no conflict when used with X.509 stuff. Using the RFC-2253 format of DNs has the drawback that it is not possible to map them back to the original encoding, however we don't have to do this because our key database stores this encoding as meta data.  File: gnupg1.info, Node: Copying, Next: Option Index, Prev: Specify a User ID, Up: Top GNU General Public License ************************** Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble ======== The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program-to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a. The work must carry prominent notices stating that you modified it, and giving a relevant date. b. The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c. You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d. If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b. Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c. Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d. Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e. Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b. Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c. Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d. Limiting the use for publicity purposes of names of licensors or authors of the material; or e. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f. Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs ============================================= If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES. Copyright (C) YEAR NAME OF AUTHOR This program 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 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: PROGRAM Copyright (C) YEAR NAME OF AUTHOR This program comes with ABSOLUTELY NO WARRANTY; for details type 'show w'. This is free software, and you are welcome to redistribute it under certain conditions; type 'show c' for details. The hypothetical commands 'show w' and 'show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read .  File: gnupg1.info, Node: Option Index, Next: Index, Prev: Copying, Up: Top Option Index ************ [index] * Menu: * allow-freeform-uid: GPG Esoteric Options. (line 310) * allow-multiple-messages: GPG Esoteric Options. (line 442) * allow-non-selfsigned-uid: GPG Esoteric Options. (line 305) * allow-secret-key-import: GPG Esoteric Options. (line 438) * allow-weak-digest-algos: GPG Esoteric Options. (line 345) * always-trust: Deprecated Options. (line 32) * armor: GPG Input and Output. (line 8) * ask-cert-expire: GPG Esoteric Options. (line 425) * ask-cert-level: GPG Configuration Options. (line 359) * ask-sig-expire: GPG Esoteric Options. (line 411) * attribute-fd: GPG Esoteric Options. (line 85) * attribute-file: GPG Esoteric Options. (line 91) * auto-check-trustdb: GPG Configuration Options. (line 652) * auto-key-locate: GPG Configuration Options. (line 439) * batch: GPG Configuration Options. (line 39) * bzip2-compress-level: GPG Configuration Options. (line 333) * bzip2-decompress-lowmem: GPG Configuration Options. (line 343) * card-edit: Operational GPG Commands. (line 165) * card-status: Operational GPG Commands. (line 171) * cert-digest-algo: GPG Esoteric Options. (line 224) * cert-notation: GPG Esoteric Options. (line 117) * cert-policy-url: GPG Esoteric Options. (line 147) * change-pin: Operational GPG Commands. (line 174) * check-sigs: Operational GPG Commands. (line 142) * check-trustdb: Operational GPG Commands. (line 277) * cipher-algo: GPG Esoteric Options. (line 185) * clearsign: Operational GPG Commands. (line 17) * command-fd: GPG Esoteric Options. (line 293) * command-file: GPG Esoteric Options. (line 300) * comment: GPG Esoteric Options. (line 96) * compliant-needed: GPG Configuration Options. (line 617) * compress-algo: GPG Esoteric Options. (line 201) * compress-level: GPG Configuration Options. (line 333) * ctapi-driver: Deprecated Options. (line 27) * dearmor: Operational GPG Commands. (line 331) * debug: GPG Esoteric Options. (line 47) * debug-all: GPG Esoteric Options. (line 51) * debug-ccid-driver: GPG Esoteric Options. (line 54) * debug-level: GPG Esoteric Options. (line 22) * decrypt: Operational GPG Commands. (line 52) * decrypt-files: Operational GPG Commands. (line 100) * default-cert-expire: GPG Esoteric Options. (line 431) * default-cert-level: GPG Configuration Options. (line 367) * default-key: GPG Configuration Options. (line 10) * default-keyserver-url: GPG Esoteric Options. (line 470) * default-preference-list: GPG Esoteric Options. (line 465) * default-recipient: GPG Configuration Options. (line 15) * default-recipient-self: GPG Configuration Options. (line 19) * default-sig-expire: GPG Esoteric Options. (line 417) * delete-key: Operational GPG Commands. (line 179) * delete-secret-and-public-key: Operational GPG Commands. (line 188) * delete-secret-key: Operational GPG Commands. (line 184) * desig-revoke: OpenPGP Key Management. (line 21) * detach-sign: Operational GPG Commands. (line 27) * digest-algo: GPG Esoteric Options. (line 194) * disable-ccid: GPG Configuration Options. (line 274) * disable-cipher-algo: GPG Esoteric Options. (line 232) * disable-dsa2: GPG Configuration Options. (line 190) * disable-large-rsa: GPG Configuration Options. (line 183) * disable-mdc: OpenPGP Options. (line 46) * disable-pubkey-algo: GPG Esoteric Options. (line 237) * display-charset: GPG Configuration Options. (line 288) * display-charset:iso-8859-1: GPG Configuration Options. (line 297) * display-charset:iso-8859-15: GPG Configuration Options. (line 303) * display-charset:iso-8859-2: GPG Configuration Options. (line 300) * display-charset:koi8-r: GPG Configuration Options. (line 306) * display-charset:utf-8: GPG Configuration Options. (line 309) * dry-run: GPG Esoteric Options. (line 8) * dump-options: General GPG Commands. (line 19) * edit-key: OpenPGP Key Management. (line 26) * emit-version: GPG Esoteric Options. (line 107) * enable-dsa2: GPG Configuration Options. (line 190) * enable-large-rsa: GPG Configuration Options. (line 183) * enable-progress-filter: GPG Esoteric Options. (line 64) * enable-special-filenames: GPG Esoteric Options. (line 452) * enarmor: Operational GPG Commands. (line 331) * encrypt: Operational GPG Commands. (line 31) * encrypt-files: Operational GPG Commands. (line 97) * encrypt-to: GPG Key related Options. (line 21) * escape-from-lines: GPG Esoteric Options. (line 262) * exec-path: GPG Configuration Options. (line 214) * exit-on-status-write-error: GPG Configuration Options. (line 685) * expert: GPG Configuration Options. (line 743) * export: Operational GPG Commands. (line 193) * export-options: GPG Input and Output. (line 75) * export-ownertrust: Operational GPG Commands. (line 292) * export-secret-keys: Operational GPG Commands. (line 209) * export-secret-subkeys: Operational GPG Commands. (line 209) * faked-system-time: GPG Esoteric Options. (line 58) * fast-list-mode: GPG Esoteric Options. (line 376) * fetch-keys: Operational GPG Commands. (line 262) * fingerprint: Operational GPG Commands. (line 154) * fixed-list-mode: GPG Input and Output. (line 126) * for-your-eyes-only: GPG Esoteric Options. (line 171) * force-mdc: OpenPGP Options. (line 40) * force-v3-sigs: OpenPGP Options. (line 25) * force-v4-certs: OpenPGP Options. (line 35) * gen-key: OpenPGP Key Management. (line 9) * gen-prime: Operational GPG Commands. (line 326) * gen-random: Operational GPG Commands. (line 319) * gen-revoke: OpenPGP Key Management. (line 17) * gnupg: Compliance Options. (line 12) * gpg-agent-info: GPG Configuration Options. (line 664) * gpgconf-list: GPG Esoteric Options. (line 483) * gpgconf-test: GPG Esoteric Options. (line 487) * group: GPG Key related Options. (line 41) * help: General GPG Commands. (line 12) * hidden-encrypt-to: GPG Key related Options. (line 29) * hidden-recipient: GPG Key related Options. (line 14) * homedir: GPG Configuration Options. (line 247) * ignore-crc-error: GPG Esoteric Options. (line 330) * ignore-mdc-error: GPG Esoteric Options. (line 337) * ignore-time-conflict: GPG Esoteric Options. (line 316) * ignore-valid-from: GPG Esoteric Options. (line 323) * import: Operational GPG Commands. (line 231) * import-options: GPG Input and Output. (line 29) * import-ownertrust: Operational GPG Commands. (line 298) * interactive: GPG Esoteric Options. (line 19) * keyedit:addcardkey: OpenPGP Key Management. (line 162) * keyedit:addkey: OpenPGP Key Management. (line 159) * keyedit:addphoto: OpenPGP Key Management. (line 81) * keyedit:addrevoker: OpenPGP Key Management. (line 210) * keyedit:adduid: OpenPGP Key Management. (line 78) * keyedit:bkuptocard: OpenPGP Key Management. (line 176) * keyedit:check: OpenPGP Key Management. (line 75) * keyedit:clean: OpenPGP Key Management. (line 222) * keyedit:cross-certify: OpenPGP Key Management. (line 236) * keyedit:delkey: OpenPGP Key Management. (line 187) * keyedit:delsig: OpenPGP Key Management. (line 65) * keyedit:deluid: OpenPGP Key Management. (line 91) * keyedit:disable: OpenPGP Key Management. (line 206) * keyedit:enable: OpenPGP Key Management. (line 206) * keyedit:expire: OpenPGP Key Management. (line 195) * keyedit:key: OpenPGP Key Management. (line 35) * keyedit:keyserver: OpenPGP Key Management. (line 108) * keyedit:keytocard: OpenPGP Key Management. (line 165) * keyedit:lsign: OpenPGP Key Management. (line 46) * keyedit:minimize: OpenPGP Key Management. (line 231) * keyedit:notation: OpenPGP Key Management. (line 115) * keyedit:nrsign: OpenPGP Key Management. (line 51) * keyedit:passwd: OpenPGP Key Management. (line 216) * keyedit:pref: OpenPGP Key Management. (line 123) * keyedit:primary: OpenPGP Key Management. (line 100) * keyedit:quit: OpenPGP Key Management. (line 247) * keyedit:revkey: OpenPGP Key Management. (line 192) * keyedit:revsig: OpenPGP Key Management. (line 70) * keyedit:revuid: OpenPGP Key Management. (line 97) * keyedit:save: OpenPGP Key Management. (line 244) * keyedit:setpref: OpenPGP Key Management. (line 135) * keyedit:showphoto: OpenPGP Key Management. (line 88) * keyedit:showpref: OpenPGP Key Management. (line 127) * keyedit:sign: OpenPGP Key Management. (line 39) * keyedit:toggle: OpenPGP Key Management. (line 219) * keyedit:trust: OpenPGP Key Management. (line 201) * keyedit:tsign: OpenPGP Key Management. (line 55) * keyedit:uid: OpenPGP Key Management. (line 31) * keyid-format: GPG Configuration Options. (line 482) * keyring: GPG Configuration Options. (line 221) * keyserver: GPG Configuration Options. (line 489) * keyserver-options: GPG Configuration Options. (line 509) * limit-card-insert-tries: GPG Configuration Options. (line 694) * list-config: GPG Esoteric Options. (line 475) * list-keys: Operational GPG Commands. (line 105) * list-only: GPG Esoteric Options. (line 11) * list-options: GPG Configuration Options. (line 70) * list-options:show-keyring: GPG Configuration Options. (line 119) * list-options:show-keyserver-urls: GPG Configuration Options. (line 103) * list-options:show-notations: GPG Configuration Options. (line 98) * list-options:show-photos: GPG Configuration Options. (line 78) * list-options:show-policy-urls: GPG Configuration Options. (line 92) * list-options:show-sig-expire: GPG Configuration Options. (line 123) * list-options:show-sig-subpackets: GPG Configuration Options. (line 127) * list-options:show-std-notations: GPG Configuration Options. (line 98) * list-options:show-uid-validity: GPG Configuration Options. (line 107) * list-options:show-unusable-subkeys: GPG Configuration Options. (line 115) * list-options:show-unusable-uids: GPG Configuration Options. (line 111) * list-options:show-usage: GPG Configuration Options. (line 86) * list-options:show-user-notations: GPG Configuration Options. (line 98) * list-packets: Operational GPG Commands. (line 161) * list-secret-keys: Operational GPG Commands. (line 120) * list-sigs: Operational GPG Commands. (line 126) * load-extension: Deprecated Options. (line 7) * local-user: GPG Key related Options. (line 63) * lock-multiple: GPG Configuration Options. (line 674) * lock-never: GPG Configuration Options. (line 678) * lock-once: GPG Configuration Options. (line 670) * log-file: GPG Esoteric Options. (line 81) * logger-fd: GPG Esoteric Options. (line 77) * lsign-key: OpenPGP Key Management. (line 282) * mangle-dos-filenames: GPG Configuration Options. (line 351) * marginals-needed: GPG Configuration Options. (line 621) * max-cert-depth: GPG Configuration Options. (line 625) * max-output: GPG Input and Output. (line 19) * min-cert-level: GPG Configuration Options. (line 396) * multifile: Operational GPG Commands. (line 86) * no: GPG Configuration Options. (line 67) * no-armor: GPG Input and Output. (line 12) * no-batch: GPG Configuration Options. (line 39) * no-default-keyring: GPG Esoteric Options. (line 361) * no-default-recipient: GPG Configuration Options. (line 25) * no-encrypt-to: GPG Key related Options. (line 37) * no-expensive-trust-checks: GPG Esoteric Options. (line 457) * no-greeting: GPG Configuration Options. (line 708) * no-groups: GPG Key related Options. (line 59) * no-literal: GPG Esoteric Options. (line 384) * no-mangle-dos-filenames: GPG Configuration Options. (line 351) * no-mdc-warning: GPG Configuration Options. (line 727) * no-options: GPG Configuration Options. (line 326) * no-random-seed-file: GPG Configuration Options. (line 702) * no-secmem-warning: GPG Configuration Options. (line 711) * no-sig-cache: GPG Configuration Options. (line 639) * no-sig-create-check: GPG Configuration Options. (line 648) * no-skip-hidden-recipients: GPG Key related Options. (line 75) * no-tty: GPG Configuration Options. (line 59) * no-verbose: GPG Configuration Options. (line 32) * not-dash-escaped: GPG Esoteric Options. (line 252) * openpgp: Compliance Options. (line 19) * options: GPG Configuration Options. (line 321) * output: GPG Input and Output. (line 16) * override-session-key: GPG Esoteric Options. (line 402) * passphrase: GPG Esoteric Options. (line 287) * passphrase-fd: GPG Esoteric Options. (line 274) * passphrase-file: GPG Esoteric Options. (line 280) * passphrase-repeat: GPG Esoteric Options. (line 269) * pcsc-driver: GPG Configuration Options. (line 268) * permission-warning: GPG Configuration Options. (line 714) * personal-cipher-preferences: OpenPGP Options. (line 51) * personal-compress-preferences: OpenPGP Options. (line 69) * personal-digest-preferences: OpenPGP Options. (line 60) * pgp2: Compliance Options. (line 38) * pgp6: Compliance Options. (line 57) * pgp7: Compliance Options. (line 68) * pgp8: Compliance Options. (line 74) * photo-viewer: GPG Configuration Options. (line 196) * preserve-permissions: GPG Esoteric Options. (line 460) * primary-keyring: GPG Configuration Options. (line 235) * print-md: Operational GPG Commands. (line 314) * quiet: GPG Configuration Options. (line 35) * reader-port: GPG Configuration Options. (line 280) * rebuild-keydb-caches: Operational GPG Commands. (line 308) * recipient: GPG Key related Options. (line 8) * recv-keys: Operational GPG Commands. (line 240) * refresh-keys: Operational GPG Commands. (line 244) * require-cross-certification: GPG Configuration Options. (line 736) * require-secmem: GPG Configuration Options. (line 731) * rfc1991: Compliance Options. (line 34) * rfc2440: Compliance Options. (line 30) * rfc4880: Compliance Options. (line 25) * s2k-cipher-algo: OpenPGP Options. (line 79) * s2k-count: OpenPGP Options. (line 96) * s2k-digest-algo: OpenPGP Options. (line 85) * s2k-mode: OpenPGP Options. (line 89) * search-keys: Operational GPG Commands. (line 253) * secret-keyring: GPG Configuration Options. (line 232) * send-keys: Operational GPG Commands. (line 200) * set-filename: GPG Esoteric Options. (line 165) * set-filesize: GPG Esoteric Options. (line 388) * set-notation: GPG Esoteric Options. (line 117) * set-policy-url: GPG Esoteric Options. (line 147) * show-keyring: Deprecated Options. (line 22) * show-notation: Deprecated Options. (line 36) * show-photos: Deprecated Options. (line 14) * show-policy-url: Deprecated Options. (line 44) * show-session-key: GPG Esoteric Options. (line 392) * sig-keyserver-url: GPG Esoteric Options. (line 157) * sig-notation: GPG Esoteric Options. (line 117) * sig-policy-url: GPG Esoteric Options. (line 147) * sign: Operational GPG Commands. (line 8) * sign-key: OpenPGP Key Management. (line 278) * simple-sk-checksum: GPG Configuration Options. (line 628) * skip-hidden-recipients: GPG Key related Options. (line 75) * skip-verify: GPG Esoteric Options. (line 368) * status-fd: GPG Esoteric Options. (line 69) * status-file: GPG Esoteric Options. (line 73) * store: Operational GPG Commands. (line 48) * symmetric: Operational GPG Commands. (line 39) * textmode: OpenPGP Options. (line 8) * throw-keyids: GPG Esoteric Options. (line 243) * trust-mode:always: GPG Configuration Options. (line 424) * trust-mode:auto: GPG Configuration Options. (line 433) * trust-mode:classic: GPG Configuration Options. (line 417) * trust-mode:direct: GPG Configuration Options. (line 420) * trust-mode:pgp: GPG Configuration Options. (line 412) * trust-model: GPG Configuration Options. (line 409) * trustdb-name: GPG Configuration Options. (line 240) * trusted-key: GPG Configuration Options. (line 402) * try-all-secrets: GPG Key related Options. (line 67) * ungroup: GPG Key related Options. (line 56) * update-trustdb: Operational GPG Commands. (line 267) * use-agent: GPG Configuration Options. (line 659) * use-embedded-filename: GPG Esoteric Options. (line 180) * utf8-strings: GPG Configuration Options. (line 314) * verbose: GPG Configuration Options. (line 28) * verify: Operational GPG Commands. (line 60) * verify-files: Operational GPG Commands. (line 94) * verify-options: GPG Configuration Options. (line 134) * verify-options:pka-lookups: GPG Configuration Options. (line 170) * verify-options:pka-trust-increase: GPG Configuration Options. (line 177) * verify-options:show-keyserver-urls: GPG Configuration Options. (line 153) * verify-options:show-notations: GPG Configuration Options. (line 149) * verify-options:show-photos: GPG Configuration Options. (line 139) * verify-options:show-policy-urls: GPG Configuration Options. (line 143) * verify-options:show-primary-uid-only: GPG Configuration Options. (line 165) * verify-options:show-std-notations: GPG Configuration Options. (line 149) * verify-options:show-uid-validity: GPG Configuration Options. (line 157) * verify-options:show-unusable-uids: GPG Configuration Options. (line 161) * verify-options:show-user-notations: GPG Configuration Options. (line 149) * version: General GPG Commands. (line 7) * warranty: General GPG Commands. (line 16) * weak-digest: GPG Esoteric Options. (line 353) * with-colons: GPG Input and Output. (line 118) * with-fingerprint: GPG Input and Output. (line 130) * with-key-data: GPG Esoteric Options. (line 372) * yes: GPG Configuration Options. (line 64)  File: gnupg1.info, Node: Index, Prev: Option Index, Up: Top Index ***** [index] * Menu: * command options: Invoking GPG. (line 6) * GPG command options: Invoking GPG. (line 6) * gpg.conf: GPG Configuration. (line 11) * options, GPG command: Invoking GPG. (line 6)  Tag Table: Node: Top719 Node: Invoking GPG1765 Ref: Invoking GPG-Footnote-12692 Node: GPG Commands2757 Node: General GPG Commands3588 Node: Operational GPG Commands4220 Ref: option --export-ownertrust17481 Node: OpenPGP Key Management19268 Node: GPG Options31001 Node: GPG Configuration Options32333 Ref: option --homedir42343 Ref: gpg-option --options45625 Node: GPG Key related Options64971 Node: GPG Input and Output68548 Node: OpenPGP Options74479 Node: Compliance Options79528 Node: GPG Esoteric Options83020 Ref: GPG Esoteric Options-Footnote-1104994 Node: Deprecated Options105148 Node: GPG Configuration107129 Node: GPG Examples111067 Node: Unattended Usage of GPG115410 Node: Unattended GPG key generation115850 Node: Specify a User ID125135 Ref: how-to-specify-a-user-id125284 Node: Copying130021 Node: Option Index167550 Node: Index209427  End Tag Table gnupg-1.4.20/bzlib/0000755000175000017500000000000012635457216011034 500000000000000gnupg-1.4.20/bzlib/huffman.c0000644000175000017500000001550312635262326012544 00000000000000 /*-------------------------------------------------------------*/ /*--- Huffman coding low-level stuff ---*/ /*--- huffman.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------------*/ #define WEIGHTOF(zz0) ((zz0) & 0xffffff00) #define DEPTHOF(zz1) ((zz1) & 0x000000ff) #define MYMAX(zz2,zz3) ((zz2) > (zz3) ? (zz2) : (zz3)) #define ADDWEIGHTS(zw1,zw2) \ (WEIGHTOF(zw1)+WEIGHTOF(zw2)) | \ (1 + MYMAX(DEPTHOF(zw1),DEPTHOF(zw2))) #define UPHEAP(z) \ { \ Int32 zz, tmp; \ zz = z; tmp = heap[zz]; \ while (weight[tmp] < weight[heap[zz >> 1]]) { \ heap[zz] = heap[zz >> 1]; \ zz >>= 1; \ } \ heap[zz] = tmp; \ } #define DOWNHEAP(z) \ { \ Int32 zz, yy, tmp; \ zz = z; tmp = heap[zz]; \ while (True) { \ yy = zz << 1; \ if (yy > nHeap) break; \ if (yy < nHeap && \ weight[heap[yy+1]] < weight[heap[yy]]) \ yy++; \ if (weight[tmp] < weight[heap[yy]]) break; \ heap[zz] = heap[yy]; \ zz = yy; \ } \ heap[zz] = tmp; \ } /*---------------------------------------------------*/ void BZ2_hbMakeCodeLengths ( UChar *len, Int32 *freq, Int32 alphaSize, Int32 maxLen ) { /*-- Nodes and heap entries run from 1. Entry 0 for both the heap and nodes is a sentinel. --*/ Int32 nNodes, nHeap, n1, n2, i, j, k; Bool tooLong; Int32 heap [ BZ_MAX_ALPHA_SIZE + 2 ]; Int32 weight [ BZ_MAX_ALPHA_SIZE * 2 ]; Int32 parent [ BZ_MAX_ALPHA_SIZE * 2 ]; for (i = 0; i < alphaSize; i++) weight[i+1] = (freq[i] == 0 ? 1 : freq[i]) << 8; while (True) { nNodes = alphaSize; nHeap = 0; heap[0] = 0; weight[0] = 0; parent[0] = -2; for (i = 1; i <= alphaSize; i++) { parent[i] = -1; nHeap++; heap[nHeap] = i; UPHEAP(nHeap); } AssertH( nHeap < (BZ_MAX_ALPHA_SIZE+2), 2001 ); while (nHeap > 1) { n1 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); n2 = heap[1]; heap[1] = heap[nHeap]; nHeap--; DOWNHEAP(1); nNodes++; parent[n1] = parent[n2] = nNodes; weight[nNodes] = ADDWEIGHTS(weight[n1], weight[n2]); parent[nNodes] = -1; nHeap++; heap[nHeap] = nNodes; UPHEAP(nHeap); } AssertH( nNodes < (BZ_MAX_ALPHA_SIZE * 2), 2002 ); tooLong = False; for (i = 1; i <= alphaSize; i++) { j = 0; k = i; while (parent[k] >= 0) { k = parent[k]; j++; } len[i-1] = j; if (j > maxLen) tooLong = True; } if (! tooLong) break; /* 17 Oct 04: keep-going condition for the following loop used to be 'i < alphaSize', which missed the last element, theoretically leading to the possibility of the compressor looping. However, this count-scaling step is only needed if one of the generated Huffman code words is longer than maxLen, which up to and including version 1.0.2 was 20 bits, which is extremely unlikely. In version 1.0.3 maxLen was changed to 17 bits, which has minimal effect on compression ratio, but does mean this scaling step is used from time to time, enough to verify that it works. This means that bzip2-1.0.3 and later will only produce Huffman codes with a maximum length of 17 bits. However, in order to preserve backwards compatibility with bitstreams produced by versions pre-1.0.3, the decompressor must still handle lengths of up to 20. */ for (i = 1; i <= alphaSize; i++) { j = weight[i] >> 8; j = 1 + (j / 2); weight[i] = j << 8; } } } /*---------------------------------------------------*/ void BZ2_hbAssignCodes ( Int32 *code, UChar *length, Int32 minLen, Int32 maxLen, Int32 alphaSize ) { Int32 n, vec, i; vec = 0; for (n = minLen; n <= maxLen; n++) { for (i = 0; i < alphaSize; i++) if (length[i] == n) { code[i] = vec; vec++; }; vec <<= 1; } } /*---------------------------------------------------*/ void BZ2_hbCreateDecodeTables ( Int32 *limit, Int32 *base, Int32 *perm, UChar *length, Int32 minLen, Int32 maxLen, Int32 alphaSize ) { Int32 pp, i, j, vec; pp = 0; for (i = minLen; i <= maxLen; i++) for (j = 0; j < alphaSize; j++) if (length[j] == i) { perm[pp] = j; pp++; }; for (i = 0; i < BZ_MAX_CODE_LEN; i++) base[i] = 0; for (i = 0; i < alphaSize; i++) base[length[i]+1]++; for (i = 1; i < BZ_MAX_CODE_LEN; i++) base[i] += base[i-1]; for (i = 0; i < BZ_MAX_CODE_LEN; i++) limit[i] = 0; vec = 0; for (i = minLen; i <= maxLen; i++) { vec += (base[i+1] - base[i]); limit[i] = vec-1; vec <<= 1; } for (i = minLen + 1; i <= maxLen; i++) base[i] = ((limit[i-1] + 1) << 1) - base[i]; } /*-------------------------------------------------------------*/ /*--- end huffman.c ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/bzlib/README0000644000175000017500000001661712635262326011643 00000000000000This is the README for bzip2/libzip2. This version is fully compatible with the previous public releases. ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in this file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ Complete documentation is available in Postscript form (manual.ps), PDF (manual.pdf) or html (manual.html). A plain-text version of the manual page is available as bzip2.txt. HOW TO BUILD -- UNIX Type 'make'. This builds the library libbz2.a and then the programs bzip2 and bzip2recover. Six self-tests are run. If the self-tests complete ok, carry on to installation: To install in /usr/local/bin, /usr/local/lib, /usr/local/man and /usr/local/include, type make install To install somewhere else, eg, /xxx/yyy/{bin,lib,man,include}, type make install PREFIX=/xxx/yyy If you are (justifiably) paranoid and want to see what 'make install' is going to do, you can first do make -n install or make -n install PREFIX=/xxx/yyy respectively. The -n instructs make to show the commands it would execute, but not actually execute them. HOW TO BUILD -- UNIX, shared library libbz2.so. Do 'make -f Makefile-libbz2_so'. This Makefile seems to work for Linux-ELF (RedHat 7.2 on an x86 box), with gcc. I make no claims that it works for any other platform, though I suspect it probably will work for most platforms employing both ELF and gcc. bzip2-shared, a client of the shared library, is also built, but not self-tested. So I suggest you also build using the normal Makefile, since that conducts a self-test. A second reason to prefer the version statically linked to the library is that, on x86 platforms, building shared objects makes a valuable register (%ebx) unavailable to gcc, resulting in a slowdown of 10%-20%, at least for bzip2. Important note for people upgrading .so's from 0.9.0/0.9.5 to version 1.0.X. All the functions in the library have been renamed, from (eg) bzCompress to BZ2_bzCompress, to avoid namespace pollution. Unfortunately this means that the libbz2.so created by Makefile-libbz2_so will not work with any program which used an older version of the library. I do encourage library clients to make the effort to upgrade to use version 1.0, since it is both faster and more robust than previous versions. HOW TO BUILD -- Windows 95, NT, DOS, Mac, etc. It's difficult for me to support compilation on all these platforms. My approach is to collect binaries for these platforms, and put them on the master web site (http://www.bzip.org). Look there. However (FWIW), bzip2-1.0.X is very standard ANSI C and should compile unmodified with MS Visual C. If you have difficulties building, you might want to read README.COMPILATION.PROBLEMS. At least using MS Visual C++ 6, you can build from the unmodified sources by issuing, in a command shell: nmake -f makefile.msc (you may need to first run the MSVC-provided script VCVARS32.BAT so as to set up paths to the MSVC tools correctly). VALIDATION Correct operation, in the sense that a compressed file can always be decompressed to reproduce the original, is obviously of paramount importance. To validate bzip2, I used a modified version of Mark Nelson's churn program. Churn is an automated test driver which recursively traverses a directory structure, using bzip2 to compress and then decompress each file it encounters, and checking that the decompressed data is the same as the original. Please read and be aware of the following: WARNING: This program and library (attempts to) compress data by performing several non-trivial transformations on it. Unless you are 100% familiar with *all* the algorithms contained herein, and with the consequences of modifying them, you should NOT meddle with the compression or decompression machinery. Incorrect changes can and very likely *will* lead to disastrous loss of data. DISCLAIMER: I TAKE NO RESPONSIBILITY FOR ANY LOSS OF DATA ARISING FROM THE USE OF THIS PROGRAM/LIBRARY, HOWSOEVER CAUSED. Every compression of a file implies an assumption that the compressed file can be decompressed to reproduce the original. Great efforts in design, coding and testing have been made to ensure that this program works correctly. However, the complexity of the algorithms, and, in particular, the presence of various special cases in the code which occur with very low but non-zero probability make it impossible to rule out the possibility of bugs remaining in the program. DO NOT COMPRESS ANY DATA WITH THIS PROGRAM UNLESS YOU ARE PREPARED TO ACCEPT THE POSSIBILITY, HOWEVER SMALL, THAT THE DATA WILL NOT BE RECOVERABLE. That is not to say this program is inherently unreliable. Indeed, I very much hope the opposite is true. bzip2/libbzip2 has been carefully constructed and extensively tested. PATENTS: To the best of my knowledge, bzip2/libbzip2 does not use any patented algorithms. However, I do not have the resources to carry out a patent search. Therefore I cannot give any guarantee of the above statement. WHAT'S NEW IN 0.9.0 (as compared to 0.1pl2) ? * Approx 10% faster compression, 30% faster decompression * -t (test mode) is a lot quicker * Can decompress concatenated compressed files * Programming interface, so programs can directly read/write .bz2 files * Less restrictive (BSD-style) licensing * Flag handling more compatible with GNU gzip * Much more documentation, i.e., a proper user manual * Hopefully, improved portability (at least of the library) WHAT'S NEW IN 0.9.5 ? * Compression speed is much less sensitive to the input data than in previous versions. Specifically, the very slow performance caused by repetitive data is fixed. * Many small improvements in file and flag handling. * A Y2K statement. WHAT'S NEW IN 1.0.0 ? See the CHANGES file. WHAT'S NEW IN 1.0.2 ? See the CHANGES file. WHAT'S NEW IN 1.0.3 ? See the CHANGES file. WHAT'S NEW IN 1.0.4 ? See the CHANGES file. WHAT'S NEW IN 1.0.5 ? See the CHANGES file. WHAT'S NEW IN 1.0.6 ? See the CHANGES file. I hope you find bzip2 useful. Feel free to contact me at jseward@bzip.org if you have any suggestions or queries. Many people mailed me with comments, suggestions and patches after the releases of bzip-0.15, bzip-0.21, and bzip2 versions 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 and 1.0.3, and the changes in bzip2 are largely a result of this feedback. I thank you for your comments. bzip2's "home" is http://www.bzip.org/ Julian Seward jseward@bzip.org Cambridge, UK. 18 July 1996 (version 0.15) 25 August 1996 (version 0.21) 7 August 1997 (bzip2, version 0.1) 29 August 1997 (bzip2, version 0.1pl2) 23 August 1998 (bzip2, version 0.9.0) 8 June 1999 (bzip2, version 0.9.5) 4 Sept 1999 (bzip2, version 0.9.5d) 5 May 2000 (bzip2, version 1.0pre8) 30 December 2001 (bzip2, version 1.0.2pre1) 15 February 2005 (bzip2, version 1.0.3) 20 December 2006 (bzip2, version 1.0.4) 10 December 2007 (bzip2, version 1.0.5) 6 Sept 2010 (bzip2, version 1.0.6) gnupg-1.4.20/bzlib/README.1st0000644000175000017500000000057212635262326012342 00000000000000This is a stripped down version of bzip2 - version 1.0.6. It does not include any drivers but merely builds the libbz2.a library. The source has been taken from www.bzip.org on 2010-09-23 and stripped down by g10 Code GmbH for use with Gpg4win and to be included into the GnupG 1.4.12 source. The only changed files are Makefile and bzlib.h (disabled Windows specific code). gnupg-1.4.20/bzlib/crctable.c0000644000175000017500000001132112635262326012671 00000000000000 /*-------------------------------------------------------------*/ /*--- Table for doing CRCs ---*/ /*--- crctable.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*-- I think this is an implementation of the AUTODIN-II, Ethernet & FDDI 32-bit CRC standard. Vaguely derived from code by Rob Warnock, in Section 51 of the comp.compression FAQ. --*/ UInt32 BZ2_crc32Table[256] = { /*-- Ugly, innit? --*/ 0x00000000L, 0x04c11db7L, 0x09823b6eL, 0x0d4326d9L, 0x130476dcL, 0x17c56b6bL, 0x1a864db2L, 0x1e475005L, 0x2608edb8L, 0x22c9f00fL, 0x2f8ad6d6L, 0x2b4bcb61L, 0x350c9b64L, 0x31cd86d3L, 0x3c8ea00aL, 0x384fbdbdL, 0x4c11db70L, 0x48d0c6c7L, 0x4593e01eL, 0x4152fda9L, 0x5f15adacL, 0x5bd4b01bL, 0x569796c2L, 0x52568b75L, 0x6a1936c8L, 0x6ed82b7fL, 0x639b0da6L, 0x675a1011L, 0x791d4014L, 0x7ddc5da3L, 0x709f7b7aL, 0x745e66cdL, 0x9823b6e0L, 0x9ce2ab57L, 0x91a18d8eL, 0x95609039L, 0x8b27c03cL, 0x8fe6dd8bL, 0x82a5fb52L, 0x8664e6e5L, 0xbe2b5b58L, 0xbaea46efL, 0xb7a96036L, 0xb3687d81L, 0xad2f2d84L, 0xa9ee3033L, 0xa4ad16eaL, 0xa06c0b5dL, 0xd4326d90L, 0xd0f37027L, 0xddb056feL, 0xd9714b49L, 0xc7361b4cL, 0xc3f706fbL, 0xceb42022L, 0xca753d95L, 0xf23a8028L, 0xf6fb9d9fL, 0xfbb8bb46L, 0xff79a6f1L, 0xe13ef6f4L, 0xe5ffeb43L, 0xe8bccd9aL, 0xec7dd02dL, 0x34867077L, 0x30476dc0L, 0x3d044b19L, 0x39c556aeL, 0x278206abL, 0x23431b1cL, 0x2e003dc5L, 0x2ac12072L, 0x128e9dcfL, 0x164f8078L, 0x1b0ca6a1L, 0x1fcdbb16L, 0x018aeb13L, 0x054bf6a4L, 0x0808d07dL, 0x0cc9cdcaL, 0x7897ab07L, 0x7c56b6b0L, 0x71159069L, 0x75d48ddeL, 0x6b93dddbL, 0x6f52c06cL, 0x6211e6b5L, 0x66d0fb02L, 0x5e9f46bfL, 0x5a5e5b08L, 0x571d7dd1L, 0x53dc6066L, 0x4d9b3063L, 0x495a2dd4L, 0x44190b0dL, 0x40d816baL, 0xaca5c697L, 0xa864db20L, 0xa527fdf9L, 0xa1e6e04eL, 0xbfa1b04bL, 0xbb60adfcL, 0xb6238b25L, 0xb2e29692L, 0x8aad2b2fL, 0x8e6c3698L, 0x832f1041L, 0x87ee0df6L, 0x99a95df3L, 0x9d684044L, 0x902b669dL, 0x94ea7b2aL, 0xe0b41de7L, 0xe4750050L, 0xe9362689L, 0xedf73b3eL, 0xf3b06b3bL, 0xf771768cL, 0xfa325055L, 0xfef34de2L, 0xc6bcf05fL, 0xc27dede8L, 0xcf3ecb31L, 0xcbffd686L, 0xd5b88683L, 0xd1799b34L, 0xdc3abdedL, 0xd8fba05aL, 0x690ce0eeL, 0x6dcdfd59L, 0x608edb80L, 0x644fc637L, 0x7a089632L, 0x7ec98b85L, 0x738aad5cL, 0x774bb0ebL, 0x4f040d56L, 0x4bc510e1L, 0x46863638L, 0x42472b8fL, 0x5c007b8aL, 0x58c1663dL, 0x558240e4L, 0x51435d53L, 0x251d3b9eL, 0x21dc2629L, 0x2c9f00f0L, 0x285e1d47L, 0x36194d42L, 0x32d850f5L, 0x3f9b762cL, 0x3b5a6b9bL, 0x0315d626L, 0x07d4cb91L, 0x0a97ed48L, 0x0e56f0ffL, 0x1011a0faL, 0x14d0bd4dL, 0x19939b94L, 0x1d528623L, 0xf12f560eL, 0xf5ee4bb9L, 0xf8ad6d60L, 0xfc6c70d7L, 0xe22b20d2L, 0xe6ea3d65L, 0xeba91bbcL, 0xef68060bL, 0xd727bbb6L, 0xd3e6a601L, 0xdea580d8L, 0xda649d6fL, 0xc423cd6aL, 0xc0e2d0ddL, 0xcda1f604L, 0xc960ebb3L, 0xbd3e8d7eL, 0xb9ff90c9L, 0xb4bcb610L, 0xb07daba7L, 0xae3afba2L, 0xaafbe615L, 0xa7b8c0ccL, 0xa379dd7bL, 0x9b3660c6L, 0x9ff77d71L, 0x92b45ba8L, 0x9675461fL, 0x8832161aL, 0x8cf30badL, 0x81b02d74L, 0x857130c3L, 0x5d8a9099L, 0x594b8d2eL, 0x5408abf7L, 0x50c9b640L, 0x4e8ee645L, 0x4a4ffbf2L, 0x470cdd2bL, 0x43cdc09cL, 0x7b827d21L, 0x7f436096L, 0x7200464fL, 0x76c15bf8L, 0x68860bfdL, 0x6c47164aL, 0x61043093L, 0x65c52d24L, 0x119b4be9L, 0x155a565eL, 0x18197087L, 0x1cd86d30L, 0x029f3d35L, 0x065e2082L, 0x0b1d065bL, 0x0fdc1becL, 0x3793a651L, 0x3352bbe6L, 0x3e119d3fL, 0x3ad08088L, 0x2497d08dL, 0x2056cd3aL, 0x2d15ebe3L, 0x29d4f654L, 0xc5a92679L, 0xc1683bceL, 0xcc2b1d17L, 0xc8ea00a0L, 0xd6ad50a5L, 0xd26c4d12L, 0xdf2f6bcbL, 0xdbee767cL, 0xe3a1cbc1L, 0xe760d676L, 0xea23f0afL, 0xeee2ed18L, 0xf0a5bd1dL, 0xf464a0aaL, 0xf9278673L, 0xfde69bc4L, 0x89b8fd09L, 0x8d79e0beL, 0x803ac667L, 0x84fbdbd0L, 0x9abc8bd5L, 0x9e7d9662L, 0x933eb0bbL, 0x97ffad0cL, 0xafb010b1L, 0xab710d06L, 0xa6322bdfL, 0xa2f33668L, 0xbcb4666dL, 0xb8757bdaL, 0xb5365d03L, 0xb1f740b4L }; /*-------------------------------------------------------------*/ /*--- end crctable.c ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/bzlib/LICENSE0000644000175000017500000000355012635262326011760 00000000000000 -------------------------------------------------------------------------- This program, "bzip2", the associated library "libbzip2", and all documentation, are copyright (C) 1996-2010 Julian R Seward. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. 3. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. 4. The name of the author may not be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Julian Seward, jseward@bzip.org bzip2/libbzip2 version 1.0.6 of 6 September 2010 -------------------------------------------------------------------------- gnupg-1.4.20/bzlib/decompress.c0000644000175000017500000005063312635262326013267 00000000000000 /*-------------------------------------------------------------*/ /*--- Decompression machinery ---*/ /*--- decompress.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------------*/ static void makeMaps_d ( DState* s ) { Int32 i; s->nInUse = 0; for (i = 0; i < 256; i++) if (s->inUse[i]) { s->seqToUnseq[s->nInUse] = i; s->nInUse++; } } /*---------------------------------------------------*/ #define RETURN(rrr) \ { retVal = rrr; goto save_state_and_return; }; #define GET_BITS(lll,vvv,nnn) \ case lll: s->state = lll; \ while (True) { \ if (s->bsLive >= nnn) { \ UInt32 v; \ v = (s->bsBuff >> \ (s->bsLive-nnn)) & ((1 << nnn)-1); \ s->bsLive -= nnn; \ vvv = v; \ break; \ } \ if (s->strm->avail_in == 0) RETURN(BZ_OK); \ s->bsBuff \ = (s->bsBuff << 8) | \ ((UInt32) \ (*((UChar*)(s->strm->next_in)))); \ s->bsLive += 8; \ s->strm->next_in++; \ s->strm->avail_in--; \ s->strm->total_in_lo32++; \ if (s->strm->total_in_lo32 == 0) \ s->strm->total_in_hi32++; \ } #define GET_UCHAR(lll,uuu) \ GET_BITS(lll,uuu,8) #define GET_BIT(lll,uuu) \ GET_BITS(lll,uuu,1) /*---------------------------------------------------*/ #define GET_MTF_VAL(label1,label2,lval) \ { \ if (groupPos == 0) { \ groupNo++; \ if (groupNo >= nSelectors) \ RETURN(BZ_DATA_ERROR); \ groupPos = BZ_G_SIZE; \ gSel = s->selector[groupNo]; \ gMinlen = s->minLens[gSel]; \ gLimit = &(s->limit[gSel][0]); \ gPerm = &(s->perm[gSel][0]); \ gBase = &(s->base[gSel][0]); \ } \ groupPos--; \ zn = gMinlen; \ GET_BITS(label1, zvec, zn); \ while (1) { \ if (zn > 20 /* the longest code */) \ RETURN(BZ_DATA_ERROR); \ if (zvec <= gLimit[zn]) break; \ zn++; \ GET_BIT(label2, zj); \ zvec = (zvec << 1) | zj; \ }; \ if (zvec - gBase[zn] < 0 \ || zvec - gBase[zn] >= BZ_MAX_ALPHA_SIZE) \ RETURN(BZ_DATA_ERROR); \ lval = gPerm[zvec - gBase[zn]]; \ } /*---------------------------------------------------*/ Int32 BZ2_decompress ( DState* s ) { UChar uc; Int32 retVal; Int32 minLen, maxLen; bz_stream* strm = s->strm; /* stuff that needs to be saved/restored */ Int32 i; Int32 j; Int32 t; Int32 alphaSize; Int32 nGroups; Int32 nSelectors; Int32 EOB; Int32 groupNo; Int32 groupPos; Int32 nextSym; Int32 nblockMAX; Int32 nblock; Int32 es; Int32 N; Int32 curr; Int32 zt; Int32 zn; Int32 zvec; Int32 zj; Int32 gSel; Int32 gMinlen; Int32* gLimit; Int32* gBase; Int32* gPerm; if (s->state == BZ_X_MAGIC_1) { /*initialise the save area*/ s->save_i = 0; s->save_j = 0; s->save_t = 0; s->save_alphaSize = 0; s->save_nGroups = 0; s->save_nSelectors = 0; s->save_EOB = 0; s->save_groupNo = 0; s->save_groupPos = 0; s->save_nextSym = 0; s->save_nblockMAX = 0; s->save_nblock = 0; s->save_es = 0; s->save_N = 0; s->save_curr = 0; s->save_zt = 0; s->save_zn = 0; s->save_zvec = 0; s->save_zj = 0; s->save_gSel = 0; s->save_gMinlen = 0; s->save_gLimit = NULL; s->save_gBase = NULL; s->save_gPerm = NULL; } /*restore from the save area*/ i = s->save_i; j = s->save_j; t = s->save_t; alphaSize = s->save_alphaSize; nGroups = s->save_nGroups; nSelectors = s->save_nSelectors; EOB = s->save_EOB; groupNo = s->save_groupNo; groupPos = s->save_groupPos; nextSym = s->save_nextSym; nblockMAX = s->save_nblockMAX; nblock = s->save_nblock; es = s->save_es; N = s->save_N; curr = s->save_curr; zt = s->save_zt; zn = s->save_zn; zvec = s->save_zvec; zj = s->save_zj; gSel = s->save_gSel; gMinlen = s->save_gMinlen; gLimit = s->save_gLimit; gBase = s->save_gBase; gPerm = s->save_gPerm; retVal = BZ_OK; switch (s->state) { GET_UCHAR(BZ_X_MAGIC_1, uc); if (uc != BZ_HDR_B) RETURN(BZ_DATA_ERROR_MAGIC); GET_UCHAR(BZ_X_MAGIC_2, uc); if (uc != BZ_HDR_Z) RETURN(BZ_DATA_ERROR_MAGIC); GET_UCHAR(BZ_X_MAGIC_3, uc) if (uc != BZ_HDR_h) RETURN(BZ_DATA_ERROR_MAGIC); GET_BITS(BZ_X_MAGIC_4, s->blockSize100k, 8) if (s->blockSize100k < (BZ_HDR_0 + 1) || s->blockSize100k > (BZ_HDR_0 + 9)) RETURN(BZ_DATA_ERROR_MAGIC); s->blockSize100k -= BZ_HDR_0; if (s->smallDecompress) { s->ll16 = BZALLOC( s->blockSize100k * 100000 * sizeof(UInt16) ); s->ll4 = BZALLOC( ((1 + s->blockSize100k * 100000) >> 1) * sizeof(UChar) ); if (s->ll16 == NULL || s->ll4 == NULL) RETURN(BZ_MEM_ERROR); } else { s->tt = BZALLOC( s->blockSize100k * 100000 * sizeof(Int32) ); if (s->tt == NULL) RETURN(BZ_MEM_ERROR); } GET_UCHAR(BZ_X_BLKHDR_1, uc); if (uc == 0x17) goto endhdr_2; if (uc != 0x31) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_2, uc); if (uc != 0x41) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_3, uc); if (uc != 0x59) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_4, uc); if (uc != 0x26) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_5, uc); if (uc != 0x53) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_BLKHDR_6, uc); if (uc != 0x59) RETURN(BZ_DATA_ERROR); s->currBlockNo++; if (s->verbosity >= 2) VPrintf1 ( "\n [%d: huff+mtf ", s->currBlockNo ); s->storedBlockCRC = 0; GET_UCHAR(BZ_X_BCRC_1, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_2, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_3, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_BCRC_4, uc); s->storedBlockCRC = (s->storedBlockCRC << 8) | ((UInt32)uc); GET_BITS(BZ_X_RANDBIT, s->blockRandomised, 1); s->origPtr = 0; GET_UCHAR(BZ_X_ORIGPTR_1, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); GET_UCHAR(BZ_X_ORIGPTR_2, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); GET_UCHAR(BZ_X_ORIGPTR_3, uc); s->origPtr = (s->origPtr << 8) | ((Int32)uc); if (s->origPtr < 0) RETURN(BZ_DATA_ERROR); if (s->origPtr > 10 + 100000*s->blockSize100k) RETURN(BZ_DATA_ERROR); /*--- Receive the mapping table ---*/ for (i = 0; i < 16; i++) { GET_BIT(BZ_X_MAPPING_1, uc); if (uc == 1) s->inUse16[i] = True; else s->inUse16[i] = False; } for (i = 0; i < 256; i++) s->inUse[i] = False; for (i = 0; i < 16; i++) if (s->inUse16[i]) for (j = 0; j < 16; j++) { GET_BIT(BZ_X_MAPPING_2, uc); if (uc == 1) s->inUse[i * 16 + j] = True; } makeMaps_d ( s ); if (s->nInUse == 0) RETURN(BZ_DATA_ERROR); alphaSize = s->nInUse+2; /*--- Now the selectors ---*/ GET_BITS(BZ_X_SELECTOR_1, nGroups, 3); if (nGroups < 2 || nGroups > 6) RETURN(BZ_DATA_ERROR); GET_BITS(BZ_X_SELECTOR_2, nSelectors, 15); if (nSelectors < 1) RETURN(BZ_DATA_ERROR); for (i = 0; i < nSelectors; i++) { j = 0; while (True) { GET_BIT(BZ_X_SELECTOR_3, uc); if (uc == 0) break; j++; if (j >= nGroups) RETURN(BZ_DATA_ERROR); } s->selectorMtf[i] = j; } /*--- Undo the MTF values for the selectors. ---*/ { UChar pos[BZ_N_GROUPS], tmp, v; for (v = 0; v < nGroups; v++) pos[v] = v; for (i = 0; i < nSelectors; i++) { v = s->selectorMtf[i]; tmp = pos[v]; while (v > 0) { pos[v] = pos[v-1]; v--; } pos[0] = tmp; s->selector[i] = tmp; } } /*--- Now the coding tables ---*/ for (t = 0; t < nGroups; t++) { GET_BITS(BZ_X_CODING_1, curr, 5); for (i = 0; i < alphaSize; i++) { while (True) { if (curr < 1 || curr > 20) RETURN(BZ_DATA_ERROR); GET_BIT(BZ_X_CODING_2, uc); if (uc == 0) break; GET_BIT(BZ_X_CODING_3, uc); if (uc == 0) curr++; else curr--; } s->len[t][i] = curr; } } /*--- Create the Huffman decoding tables ---*/ for (t = 0; t < nGroups; t++) { minLen = 32; maxLen = 0; for (i = 0; i < alphaSize; i++) { if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; if (s->len[t][i] < minLen) minLen = s->len[t][i]; } BZ2_hbCreateDecodeTables ( &(s->limit[t][0]), &(s->base[t][0]), &(s->perm[t][0]), &(s->len[t][0]), minLen, maxLen, alphaSize ); s->minLens[t] = minLen; } /*--- Now the MTF values ---*/ EOB = s->nInUse+1; nblockMAX = 100000 * s->blockSize100k; groupNo = -1; groupPos = 0; for (i = 0; i <= 255; i++) s->unzftab[i] = 0; /*-- MTF init --*/ { Int32 ii, jj, kk; kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE - 1; ii >= 0; ii--) { for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = (UChar)(ii * MTFL_SIZE + jj); kk--; } s->mtfbase[ii] = kk + 1; } } /*-- end MTF init --*/ nblock = 0; GET_MTF_VAL(BZ_X_MTF_1, BZ_X_MTF_2, nextSym); while (True) { if (nextSym == EOB) break; if (nextSym == BZ_RUNA || nextSym == BZ_RUNB) { es = -1; N = 1; do { /* Check that N doesn't get too big, so that es doesn't go negative. The maximum value that can be RUNA/RUNB encoded is equal to the block size (post the initial RLE), viz, 900k, so bounding N at 2 million should guard against overflow without rejecting any legitimate inputs. */ if (N >= 2*1024*1024) RETURN(BZ_DATA_ERROR); if (nextSym == BZ_RUNA) es = es + (0+1) * N; else if (nextSym == BZ_RUNB) es = es + (1+1) * N; N = N * 2; GET_MTF_VAL(BZ_X_MTF_3, BZ_X_MTF_4, nextSym); } while (nextSym == BZ_RUNA || nextSym == BZ_RUNB); es++; uc = s->seqToUnseq[ s->mtfa[s->mtfbase[0]] ]; s->unzftab[uc] += es; if (s->smallDecompress) while (es > 0) { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); s->ll16[nblock] = (UInt16)uc; nblock++; es--; } else while (es > 0) { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); s->tt[nblock] = (UInt32)uc; nblock++; es--; }; continue; } else { if (nblock >= nblockMAX) RETURN(BZ_DATA_ERROR); /*-- uc = MTF ( nextSym-1 ) --*/ { Int32 ii, jj, kk, pp, lno, off; UInt32 nn; nn = (UInt32)(nextSym - 1); if (nn < MTFL_SIZE) { /* avoid general-case expense */ pp = s->mtfbase[0]; uc = s->mtfa[pp+nn]; while (nn > 3) { Int32 z = pp+nn; s->mtfa[(z) ] = s->mtfa[(z)-1]; s->mtfa[(z)-1] = s->mtfa[(z)-2]; s->mtfa[(z)-2] = s->mtfa[(z)-3]; s->mtfa[(z)-3] = s->mtfa[(z)-4]; nn -= 4; } while (nn > 0) { s->mtfa[(pp+nn)] = s->mtfa[(pp+nn)-1]; nn--; }; s->mtfa[pp] = uc; } else { /* general case */ lno = nn / MTFL_SIZE; off = nn % MTFL_SIZE; pp = s->mtfbase[lno] + off; uc = s->mtfa[pp]; while (pp > s->mtfbase[lno]) { s->mtfa[pp] = s->mtfa[pp-1]; pp--; }; s->mtfbase[lno]++; while (lno > 0) { s->mtfbase[lno]--; s->mtfa[s->mtfbase[lno]] = s->mtfa[s->mtfbase[lno-1] + MTFL_SIZE - 1]; lno--; } s->mtfbase[0]--; s->mtfa[s->mtfbase[0]] = uc; if (s->mtfbase[0] == 0) { kk = MTFA_SIZE-1; for (ii = 256 / MTFL_SIZE-1; ii >= 0; ii--) { for (jj = MTFL_SIZE-1; jj >= 0; jj--) { s->mtfa[kk] = s->mtfa[s->mtfbase[ii] + jj]; kk--; } s->mtfbase[ii] = kk + 1; } } } } /*-- end uc = MTF ( nextSym-1 ) --*/ s->unzftab[s->seqToUnseq[uc]]++; if (s->smallDecompress) s->ll16[nblock] = (UInt16)(s->seqToUnseq[uc]); else s->tt[nblock] = (UInt32)(s->seqToUnseq[uc]); nblock++; GET_MTF_VAL(BZ_X_MTF_5, BZ_X_MTF_6, nextSym); continue; } } /* Now we know what nblock is, we can do a better sanity check on s->origPtr. */ if (s->origPtr < 0 || s->origPtr >= nblock) RETURN(BZ_DATA_ERROR); /*-- Set up cftab to facilitate generation of T^(-1) --*/ /* Check: unzftab entries in range. */ for (i = 0; i <= 255; i++) { if (s->unzftab[i] < 0 || s->unzftab[i] > nblock) RETURN(BZ_DATA_ERROR); } /* Actually generate cftab. */ s->cftab[0] = 0; for (i = 1; i <= 256; i++) s->cftab[i] = s->unzftab[i-1]; for (i = 1; i <= 256; i++) s->cftab[i] += s->cftab[i-1]; /* Check: cftab entries in range. */ for (i = 0; i <= 256; i++) { if (s->cftab[i] < 0 || s->cftab[i] > nblock) { /* s->cftab[i] can legitimately be == nblock */ RETURN(BZ_DATA_ERROR); } } /* Check: cftab entries non-descending. */ for (i = 1; i <= 256; i++) { if (s->cftab[i-1] > s->cftab[i]) { RETURN(BZ_DATA_ERROR); } } s->state_out_len = 0; s->state_out_ch = 0; BZ_INITIALISE_CRC ( s->calculatedBlockCRC ); s->state = BZ_X_OUTPUT; if (s->verbosity >= 2) VPrintf0 ( "rt+rld" ); if (s->smallDecompress) { /*-- Make a copy of cftab, used in generation of T --*/ for (i = 0; i <= 256; i++) s->cftabCopy[i] = s->cftab[i]; /*-- compute the T vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->ll16[i]); SET_LL(i, s->cftabCopy[uc]); s->cftabCopy[uc]++; } /*-- Compute T^(-1) by pointer reversal on T --*/ i = s->origPtr; j = GET_LL(i); do { Int32 tmp = GET_LL(j); SET_LL(j, i); i = j; j = tmp; } while (i != s->origPtr); s->tPos = s->origPtr; s->nblock_used = 0; if (s->blockRandomised) { BZ_RAND_INIT_MASK; BZ_GET_SMALL(s->k0); s->nblock_used++; BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; } else { BZ_GET_SMALL(s->k0); s->nblock_used++; } } else { /*-- compute the T^(-1) vector --*/ for (i = 0; i < nblock; i++) { uc = (UChar)(s->tt[i] & 0xff); s->tt[s->cftab[uc]] |= (i << 8); s->cftab[uc]++; } s->tPos = s->tt[s->origPtr] >> 8; s->nblock_used = 0; if (s->blockRandomised) { BZ_RAND_INIT_MASK; BZ_GET_FAST(s->k0); s->nblock_used++; BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; } else { BZ_GET_FAST(s->k0); s->nblock_used++; } } RETURN(BZ_OK); endhdr_2: GET_UCHAR(BZ_X_ENDHDR_2, uc); if (uc != 0x72) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_3, uc); if (uc != 0x45) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_4, uc); if (uc != 0x38) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_5, uc); if (uc != 0x50) RETURN(BZ_DATA_ERROR); GET_UCHAR(BZ_X_ENDHDR_6, uc); if (uc != 0x90) RETURN(BZ_DATA_ERROR); s->storedCombinedCRC = 0; GET_UCHAR(BZ_X_CCRC_1, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_2, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_3, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); GET_UCHAR(BZ_X_CCRC_4, uc); s->storedCombinedCRC = (s->storedCombinedCRC << 8) | ((UInt32)uc); s->state = BZ_X_IDLE; RETURN(BZ_STREAM_END); default: AssertH ( False, 4001 ); } AssertH ( False, 4002 ); save_state_and_return: s->save_i = i; s->save_j = j; s->save_t = t; s->save_alphaSize = alphaSize; s->save_nGroups = nGroups; s->save_nSelectors = nSelectors; s->save_EOB = EOB; s->save_groupNo = groupNo; s->save_groupPos = groupPos; s->save_nextSym = nextSym; s->save_nblockMAX = nblockMAX; s->save_nblock = nblock; s->save_es = es; s->save_N = N; s->save_curr = curr; s->save_zt = zt; s->save_zn = zn; s->save_zvec = zvec; s->save_zj = zj; s->save_gSel = gSel; s->save_gMinlen = gMinlen; s->save_gLimit = gLimit; s->save_gBase = gBase; s->save_gPerm = gPerm; return retVal; } /*-------------------------------------------------------------*/ /*--- end decompress.c ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/bzlib/bzlib.h0000644000175000017500000001417712635262326012235 00000000000000 /*-------------------------------------------------------------*/ /*--- Public header file for the library. ---*/ /*--- bzlib.h ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #ifndef _BZLIB_H #define _BZLIB_H #ifdef __cplusplus extern "C" { #endif #define BZ_RUN 0 #define BZ_FLUSH 1 #define BZ_FINISH 2 #define BZ_OK 0 #define BZ_RUN_OK 1 #define BZ_FLUSH_OK 2 #define BZ_FINISH_OK 3 #define BZ_STREAM_END 4 #define BZ_SEQUENCE_ERROR (-1) #define BZ_PARAM_ERROR (-2) #define BZ_MEM_ERROR (-3) #define BZ_DATA_ERROR (-4) #define BZ_DATA_ERROR_MAGIC (-5) #define BZ_IO_ERROR (-6) #define BZ_UNEXPECTED_EOF (-7) #define BZ_OUTBUFF_FULL (-8) #define BZ_CONFIG_ERROR (-9) typedef struct { char *next_in; unsigned int avail_in; unsigned int total_in_lo32; unsigned int total_in_hi32; char *next_out; unsigned int avail_out; unsigned int total_out_lo32; unsigned int total_out_hi32; void *state; void *(*bzalloc)(void *,int,int); void (*bzfree)(void *,void *); void *opaque; } bz_stream; #ifndef BZ_IMPORT #define BZ_EXPORT #endif #ifndef BZ_NO_STDIO /* Need a definitition for FILE */ #include #endif /* We do not need a DLL and thus we don't want to include the Windows header file. (g10 Code, 2007-08-20) */ #if defined( _WIN32 ) && 0 # include # ifdef small /* windows.h define small to char */ # undef small # endif # ifdef BZ_EXPORT # define BZ_API(func) WINAPI func # define BZ_EXTERN extern # else /* import windows dll dynamically */ # define BZ_API(func) (WINAPI * func) # define BZ_EXTERN # endif #else # define BZ_API(func) func # define BZ_EXTERN extern #endif /*-- Core (low-level) library functions --*/ BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN int BZ_API(BZ2_bzCompress) ( bz_stream* strm, int action ); BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( bz_stream* strm ); BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( bz_stream *strm, int verbosity, int small ); BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( bz_stream* strm ); BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ); /*-- High(er) level library functions --*/ #ifndef BZ_NO_STDIO #define BZ_MAX_UNUSED 5000 typedef void BZFILE; BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, int small, void* unused, int nUnused ); BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( int* bzerror, BZFILE* b ); BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( int* bzerror, BZFILE* b, void** unused, int* nUnused ); BZ_EXTERN int BZ_API(BZ2_bzRead) ( int* bzerror, BZFILE* b, void* buf, int len ); BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( int* bzerror, FILE* f, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN void BZ_API(BZ2_bzWrite) ( int* bzerror, BZFILE* b, void* buf, int len ); BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ); BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, unsigned int* nbytes_out_lo32, unsigned int* nbytes_out_hi32 ); #endif /*-- Utility functions --*/ BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int blockSize100k, int verbosity, int workFactor ); BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int small, int verbosity ); /*-- Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the threading-safeness of it. If this code breaks, please contact both Yoshioka and me. --*/ BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( void ); #ifndef BZ_NO_STDIO BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( const char *path, const char *mode ); BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( int fd, const char *mode ); BZ_EXTERN int BZ_API(BZ2_bzread) ( BZFILE* b, void* buf, int len ); BZ_EXTERN int BZ_API(BZ2_bzwrite) ( BZFILE* b, void* buf, int len ); BZ_EXTERN int BZ_API(BZ2_bzflush) ( BZFILE* b ); BZ_EXTERN void BZ_API(BZ2_bzclose) ( BZFILE* b ); BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( BZFILE *b, int *errnum ); #endif #ifdef __cplusplus } #endif #endif /*-------------------------------------------------------------*/ /*--- end bzlib.h ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/bzlib/compress.c0000644000175000017500000005004212635262326012750 00000000000000 /*-------------------------------------------------------------*/ /*--- Compression machinery (not incl block sorting) ---*/ /*--- compress.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ /* CHANGES 0.9.0 -- original version. 0.9.0a/b -- no changes in this file. 0.9.0c -- changed setting of nGroups in sendMTFValues() so as to do a bit better on small files */ #include "bzlib_private.h" /*---------------------------------------------------*/ /*--- Bit stream I/O ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ void BZ2_bsInitWrite ( EState* s ) { s->bsLive = 0; s->bsBuff = 0; } /*---------------------------------------------------*/ static void bsFinishWrite ( EState* s ) { while (s->bsLive > 0) { s->zbits[s->numZ] = (UChar)(s->bsBuff >> 24); s->numZ++; s->bsBuff <<= 8; s->bsLive -= 8; } } /*---------------------------------------------------*/ #define bsNEEDW(nz) \ { \ while (s->bsLive >= 8) { \ s->zbits[s->numZ] \ = (UChar)(s->bsBuff >> 24); \ s->numZ++; \ s->bsBuff <<= 8; \ s->bsLive -= 8; \ } \ } /*---------------------------------------------------*/ static __inline__ void bsW ( EState* s, Int32 n, UInt32 v ) { bsNEEDW ( n ); s->bsBuff |= (v << (32 - s->bsLive - n)); s->bsLive += n; } /*---------------------------------------------------*/ static void bsPutUInt32 ( EState* s, UInt32 u ) { bsW ( s, 8, (u >> 24) & 0xffL ); bsW ( s, 8, (u >> 16) & 0xffL ); bsW ( s, 8, (u >> 8) & 0xffL ); bsW ( s, 8, u & 0xffL ); } /*---------------------------------------------------*/ static void bsPutUChar ( EState* s, UChar c ) { bsW( s, 8, (UInt32)c ); } /*---------------------------------------------------*/ /*--- The back end proper ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ static void makeMaps_e ( EState* s ) { Int32 i; s->nInUse = 0; for (i = 0; i < 256; i++) if (s->inUse[i]) { s->unseqToSeq[i] = s->nInUse; s->nInUse++; } } /*---------------------------------------------------*/ static void generateMTFValues ( EState* s ) { UChar yy[256]; Int32 i, j; Int32 zPend; Int32 wr; Int32 EOB; /* After sorting (eg, here), s->arr1 [ 0 .. s->nblock-1 ] holds sorted order, and ((UChar*)s->arr2) [ 0 .. s->nblock-1 ] holds the original block data. The first thing to do is generate the MTF values, and put them in ((UInt16*)s->arr1) [ 0 .. s->nblock-1 ]. Because there are strictly fewer or equal MTF values than block values, ptr values in this area are overwritten with MTF values only when they are no longer needed. The final compressed bitstream is generated into the area starting at (UChar*) (&((UChar*)s->arr2)[s->nblock]) These storage aliases are set up in bzCompressInit(), except for the last one, which is arranged in compressBlock(). */ UInt32* ptr = s->ptr; UChar* block = s->block; UInt16* mtfv = s->mtfv; makeMaps_e ( s ); EOB = s->nInUse+1; for (i = 0; i <= EOB; i++) s->mtfFreq[i] = 0; wr = 0; zPend = 0; for (i = 0; i < s->nInUse; i++) yy[i] = (UChar) i; for (i = 0; i < s->nblock; i++) { UChar ll_i; AssertD ( wr <= i, "generateMTFValues(1)" ); j = ptr[i]-1; if (j < 0) j += s->nblock; ll_i = s->unseqToSeq[block[j]]; AssertD ( ll_i < s->nInUse, "generateMTFValues(2a)" ); if (yy[0] == ll_i) { zPend++; } else { if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mtfv[wr] = BZ_RUNB; wr++; s->mtfFreq[BZ_RUNB]++; } else { mtfv[wr] = BZ_RUNA; wr++; s->mtfFreq[BZ_RUNA]++; } if (zPend < 2) break; zPend = (zPend - 2) / 2; }; zPend = 0; } { register UChar rtmp; register UChar* ryy_j; register UChar rll_i; rtmp = yy[1]; yy[1] = yy[0]; ryy_j = &(yy[1]); rll_i = ll_i; while ( rll_i != rtmp ) { register UChar rtmp2; ryy_j++; rtmp2 = rtmp; rtmp = *ryy_j; *ryy_j = rtmp2; }; yy[0] = rtmp; j = ryy_j - &(yy[0]); mtfv[wr] = j+1; wr++; s->mtfFreq[j+1]++; } } } if (zPend > 0) { zPend--; while (True) { if (zPend & 1) { mtfv[wr] = BZ_RUNB; wr++; s->mtfFreq[BZ_RUNB]++; } else { mtfv[wr] = BZ_RUNA; wr++; s->mtfFreq[BZ_RUNA]++; } if (zPend < 2) break; zPend = (zPend - 2) / 2; }; zPend = 0; } mtfv[wr] = EOB; wr++; s->mtfFreq[EOB]++; s->nMTF = wr; } /*---------------------------------------------------*/ #define BZ_LESSER_ICOST 0 #define BZ_GREATER_ICOST 15 static void sendMTFValues ( EState* s ) { Int32 v, t, i, j, gs, ge, totc, bt, bc, iter; Int32 nSelectors, alphaSize, minLen, maxLen, selCtr; Int32 nGroups, nBytes; /*-- UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; is a global since the decoder also needs it. Int32 code[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 rfreq[BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; are also globals only used in this proc. Made global to keep stack frame size small. --*/ UInt16 cost[BZ_N_GROUPS]; Int32 fave[BZ_N_GROUPS]; UInt16* mtfv = s->mtfv; if (s->verbosity >= 3) VPrintf3( " %d in block, %d after MTF & 1-2 coding, " "%d+2 syms in use\n", s->nblock, s->nMTF, s->nInUse ); alphaSize = s->nInUse+2; for (t = 0; t < BZ_N_GROUPS; t++) for (v = 0; v < alphaSize; v++) s->len[t][v] = BZ_GREATER_ICOST; /*--- Decide how many coding tables to use ---*/ AssertH ( s->nMTF > 0, 3001 ); if (s->nMTF < 200) nGroups = 2; else if (s->nMTF < 600) nGroups = 3; else if (s->nMTF < 1200) nGroups = 4; else if (s->nMTF < 2400) nGroups = 5; else nGroups = 6; /*--- Generate an initial set of coding tables ---*/ { Int32 nPart, remF, tFreq, aFreq; nPart = nGroups; remF = s->nMTF; gs = 0; while (nPart > 0) { tFreq = remF / nPart; ge = gs-1; aFreq = 0; while (aFreq < tFreq && ge < alphaSize-1) { ge++; aFreq += s->mtfFreq[ge]; } if (ge > gs && nPart != nGroups && nPart != 1 && ((nGroups-nPart) % 2 == 1)) { aFreq -= s->mtfFreq[ge]; ge--; } if (s->verbosity >= 3) VPrintf5( " initial group %d, [%d .. %d], " "has %d syms (%4.1f%%)\n", nPart, gs, ge, aFreq, (100.0 * (float)aFreq) / (float)(s->nMTF) ); for (v = 0; v < alphaSize; v++) if (v >= gs && v <= ge) s->len[nPart-1][v] = BZ_LESSER_ICOST; else s->len[nPart-1][v] = BZ_GREATER_ICOST; nPart--; gs = ge+1; remF -= aFreq; } } /*--- Iterate up to BZ_N_ITERS times to improve the tables. ---*/ for (iter = 0; iter < BZ_N_ITERS; iter++) { for (t = 0; t < nGroups; t++) fave[t] = 0; for (t = 0; t < nGroups; t++) for (v = 0; v < alphaSize; v++) s->rfreq[t][v] = 0; /*--- Set up an auxiliary length table which is used to fast-track the common case (nGroups == 6). ---*/ if (nGroups == 6) { for (v = 0; v < alphaSize; v++) { s->len_pack[v][0] = (s->len[1][v] << 16) | s->len[0][v]; s->len_pack[v][1] = (s->len[3][v] << 16) | s->len[2][v]; s->len_pack[v][2] = (s->len[5][v] << 16) | s->len[4][v]; } } nSelectors = 0; totc = 0; gs = 0; while (True) { /*--- Set group start & end marks. --*/ if (gs >= s->nMTF) break; ge = gs + BZ_G_SIZE - 1; if (ge >= s->nMTF) ge = s->nMTF-1; /*-- Calculate the cost of this group as coded by each of the coding tables. --*/ for (t = 0; t < nGroups; t++) cost[t] = 0; if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ register UInt32 cost01, cost23, cost45; register UInt16 icv; cost01 = cost23 = cost45 = 0; # define BZ_ITER(nn) \ icv = mtfv[gs+(nn)]; \ cost01 += s->len_pack[icv][0]; \ cost23 += s->len_pack[icv][1]; \ cost45 += s->len_pack[icv][2]; \ BZ_ITER(0); BZ_ITER(1); BZ_ITER(2); BZ_ITER(3); BZ_ITER(4); BZ_ITER(5); BZ_ITER(6); BZ_ITER(7); BZ_ITER(8); BZ_ITER(9); BZ_ITER(10); BZ_ITER(11); BZ_ITER(12); BZ_ITER(13); BZ_ITER(14); BZ_ITER(15); BZ_ITER(16); BZ_ITER(17); BZ_ITER(18); BZ_ITER(19); BZ_ITER(20); BZ_ITER(21); BZ_ITER(22); BZ_ITER(23); BZ_ITER(24); BZ_ITER(25); BZ_ITER(26); BZ_ITER(27); BZ_ITER(28); BZ_ITER(29); BZ_ITER(30); BZ_ITER(31); BZ_ITER(32); BZ_ITER(33); BZ_ITER(34); BZ_ITER(35); BZ_ITER(36); BZ_ITER(37); BZ_ITER(38); BZ_ITER(39); BZ_ITER(40); BZ_ITER(41); BZ_ITER(42); BZ_ITER(43); BZ_ITER(44); BZ_ITER(45); BZ_ITER(46); BZ_ITER(47); BZ_ITER(48); BZ_ITER(49); # undef BZ_ITER cost[0] = cost01 & 0xffff; cost[1] = cost01 >> 16; cost[2] = cost23 & 0xffff; cost[3] = cost23 >> 16; cost[4] = cost45 & 0xffff; cost[5] = cost45 >> 16; } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) { UInt16 icv = mtfv[i]; for (t = 0; t < nGroups; t++) cost[t] += s->len[t][icv]; } } /*-- Find the coding table which is best for this group, and record its identity in the selector table. --*/ bc = 999999999; bt = -1; for (t = 0; t < nGroups; t++) if (cost[t] < bc) { bc = cost[t]; bt = t; }; totc += bc; fave[bt]++; s->selector[nSelectors] = bt; nSelectors++; /*-- Increment the symbol frequencies for the selected table. --*/ if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ # define BZ_ITUR(nn) s->rfreq[bt][ mtfv[gs+(nn)] ]++ BZ_ITUR(0); BZ_ITUR(1); BZ_ITUR(2); BZ_ITUR(3); BZ_ITUR(4); BZ_ITUR(5); BZ_ITUR(6); BZ_ITUR(7); BZ_ITUR(8); BZ_ITUR(9); BZ_ITUR(10); BZ_ITUR(11); BZ_ITUR(12); BZ_ITUR(13); BZ_ITUR(14); BZ_ITUR(15); BZ_ITUR(16); BZ_ITUR(17); BZ_ITUR(18); BZ_ITUR(19); BZ_ITUR(20); BZ_ITUR(21); BZ_ITUR(22); BZ_ITUR(23); BZ_ITUR(24); BZ_ITUR(25); BZ_ITUR(26); BZ_ITUR(27); BZ_ITUR(28); BZ_ITUR(29); BZ_ITUR(30); BZ_ITUR(31); BZ_ITUR(32); BZ_ITUR(33); BZ_ITUR(34); BZ_ITUR(35); BZ_ITUR(36); BZ_ITUR(37); BZ_ITUR(38); BZ_ITUR(39); BZ_ITUR(40); BZ_ITUR(41); BZ_ITUR(42); BZ_ITUR(43); BZ_ITUR(44); BZ_ITUR(45); BZ_ITUR(46); BZ_ITUR(47); BZ_ITUR(48); BZ_ITUR(49); # undef BZ_ITUR } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) s->rfreq[bt][ mtfv[i] ]++; } gs = ge+1; } if (s->verbosity >= 3) { VPrintf2 ( " pass %d: size is %d, grp uses are ", iter+1, totc/8 ); for (t = 0; t < nGroups; t++) VPrintf1 ( "%d ", fave[t] ); VPrintf0 ( "\n" ); } /*-- Recompute the tables based on the accumulated frequencies. --*/ /* maxLen was changed from 20 to 17 in bzip2-1.0.3. See comment in huffman.c for details. */ for (t = 0; t < nGroups; t++) BZ2_hbMakeCodeLengths ( &(s->len[t][0]), &(s->rfreq[t][0]), alphaSize, 17 /*20*/ ); } AssertH( nGroups < 8, 3002 ); AssertH( nSelectors < 32768 && nSelectors <= (2 + (900000 / BZ_G_SIZE)), 3003 ); /*--- Compute MTF values for the selectors. ---*/ { UChar pos[BZ_N_GROUPS], ll_i, tmp2, tmp; for (i = 0; i < nGroups; i++) pos[i] = i; for (i = 0; i < nSelectors; i++) { ll_i = s->selector[i]; j = 0; tmp = pos[j]; while ( ll_i != tmp ) { j++; tmp2 = tmp; tmp = pos[j]; pos[j] = tmp2; }; pos[0] = tmp; s->selectorMtf[i] = j; } }; /*--- Assign actual codes for the tables. --*/ for (t = 0; t < nGroups; t++) { minLen = 32; maxLen = 0; for (i = 0; i < alphaSize; i++) { if (s->len[t][i] > maxLen) maxLen = s->len[t][i]; if (s->len[t][i] < minLen) minLen = s->len[t][i]; } AssertH ( !(maxLen > 17 /*20*/ ), 3004 ); AssertH ( !(minLen < 1), 3005 ); BZ2_hbAssignCodes ( &(s->code[t][0]), &(s->len[t][0]), minLen, maxLen, alphaSize ); } /*--- Transmit the mapping table. ---*/ { Bool inUse16[16]; for (i = 0; i < 16; i++) { inUse16[i] = False; for (j = 0; j < 16; j++) if (s->inUse[i * 16 + j]) inUse16[i] = True; } nBytes = s->numZ; for (i = 0; i < 16; i++) if (inUse16[i]) bsW(s,1,1); else bsW(s,1,0); for (i = 0; i < 16; i++) if (inUse16[i]) for (j = 0; j < 16; j++) { if (s->inUse[i * 16 + j]) bsW(s,1,1); else bsW(s,1,0); } if (s->verbosity >= 3) VPrintf1( " bytes: mapping %d, ", s->numZ-nBytes ); } /*--- Now the selectors. ---*/ nBytes = s->numZ; bsW ( s, 3, nGroups ); bsW ( s, 15, nSelectors ); for (i = 0; i < nSelectors; i++) { for (j = 0; j < s->selectorMtf[i]; j++) bsW(s,1,1); bsW(s,1,0); } if (s->verbosity >= 3) VPrintf1( "selectors %d, ", s->numZ-nBytes ); /*--- Now the coding tables. ---*/ nBytes = s->numZ; for (t = 0; t < nGroups; t++) { Int32 curr = s->len[t][0]; bsW ( s, 5, curr ); for (i = 0; i < alphaSize; i++) { while (curr < s->len[t][i]) { bsW(s,2,2); curr++; /* 10 */ }; while (curr > s->len[t][i]) { bsW(s,2,3); curr--; /* 11 */ }; bsW ( s, 1, 0 ); } } if (s->verbosity >= 3) VPrintf1 ( "code lengths %d, ", s->numZ-nBytes ); /*--- And finally, the block data proper ---*/ nBytes = s->numZ; selCtr = 0; gs = 0; while (True) { if (gs >= s->nMTF) break; ge = gs + BZ_G_SIZE - 1; if (ge >= s->nMTF) ge = s->nMTF-1; AssertH ( s->selector[selCtr] < nGroups, 3006 ); if (nGroups == 6 && 50 == ge-gs+1) { /*--- fast track the common case ---*/ UInt16 mtfv_i; UChar* s_len_sel_selCtr = &(s->len[s->selector[selCtr]][0]); Int32* s_code_sel_selCtr = &(s->code[s->selector[selCtr]][0]); # define BZ_ITAH(nn) \ mtfv_i = mtfv[gs+(nn)]; \ bsW ( s, \ s_len_sel_selCtr[mtfv_i], \ s_code_sel_selCtr[mtfv_i] ) BZ_ITAH(0); BZ_ITAH(1); BZ_ITAH(2); BZ_ITAH(3); BZ_ITAH(4); BZ_ITAH(5); BZ_ITAH(6); BZ_ITAH(7); BZ_ITAH(8); BZ_ITAH(9); BZ_ITAH(10); BZ_ITAH(11); BZ_ITAH(12); BZ_ITAH(13); BZ_ITAH(14); BZ_ITAH(15); BZ_ITAH(16); BZ_ITAH(17); BZ_ITAH(18); BZ_ITAH(19); BZ_ITAH(20); BZ_ITAH(21); BZ_ITAH(22); BZ_ITAH(23); BZ_ITAH(24); BZ_ITAH(25); BZ_ITAH(26); BZ_ITAH(27); BZ_ITAH(28); BZ_ITAH(29); BZ_ITAH(30); BZ_ITAH(31); BZ_ITAH(32); BZ_ITAH(33); BZ_ITAH(34); BZ_ITAH(35); BZ_ITAH(36); BZ_ITAH(37); BZ_ITAH(38); BZ_ITAH(39); BZ_ITAH(40); BZ_ITAH(41); BZ_ITAH(42); BZ_ITAH(43); BZ_ITAH(44); BZ_ITAH(45); BZ_ITAH(46); BZ_ITAH(47); BZ_ITAH(48); BZ_ITAH(49); # undef BZ_ITAH } else { /*--- slow version which correctly handles all situations ---*/ for (i = gs; i <= ge; i++) { bsW ( s, s->len [s->selector[selCtr]] [mtfv[i]], s->code [s->selector[selCtr]] [mtfv[i]] ); } } gs = ge+1; selCtr++; } AssertH( selCtr == nSelectors, 3007 ); if (s->verbosity >= 3) VPrintf1( "codes %d\n", s->numZ-nBytes ); } /*---------------------------------------------------*/ void BZ2_compressBlock ( EState* s, Bool is_last_block ) { if (s->nblock > 0) { BZ_FINALISE_CRC ( s->blockCRC ); s->combinedCRC = (s->combinedCRC << 1) | (s->combinedCRC >> 31); s->combinedCRC ^= s->blockCRC; if (s->blockNo > 1) s->numZ = 0; if (s->verbosity >= 2) VPrintf4( " block %d: crc = 0x%08x, " "combined CRC = 0x%08x, size = %d\n", s->blockNo, s->blockCRC, s->combinedCRC, s->nblock ); BZ2_blockSort ( s ); } s->zbits = (UChar*) (&((UChar*)s->arr2)[s->nblock]); /*-- If this is the first block, create the stream header. --*/ if (s->blockNo == 1) { BZ2_bsInitWrite ( s ); bsPutUChar ( s, BZ_HDR_B ); bsPutUChar ( s, BZ_HDR_Z ); bsPutUChar ( s, BZ_HDR_h ); bsPutUChar ( s, (UChar)(BZ_HDR_0 + s->blockSize100k) ); } if (s->nblock > 0) { bsPutUChar ( s, 0x31 ); bsPutUChar ( s, 0x41 ); bsPutUChar ( s, 0x59 ); bsPutUChar ( s, 0x26 ); bsPutUChar ( s, 0x53 ); bsPutUChar ( s, 0x59 ); /*-- Now the block's CRC, so it is in a known place. --*/ bsPutUInt32 ( s, s->blockCRC ); /*-- Now a single bit indicating (non-)randomisation. As of version 0.9.5, we use a better sorting algorithm which makes randomisation unnecessary. So always set the randomised bit to 'no'. Of course, the decoder still needs to be able to handle randomised blocks so as to maintain backwards compatibility with older versions of bzip2. --*/ bsW(s,1,0); bsW ( s, 24, s->origPtr ); generateMTFValues ( s ); sendMTFValues ( s ); } /*-- If this is the last block, add the stream trailer. --*/ if (is_last_block) { bsPutUChar ( s, 0x17 ); bsPutUChar ( s, 0x72 ); bsPutUChar ( s, 0x45 ); bsPutUChar ( s, 0x38 ); bsPutUChar ( s, 0x50 ); bsPutUChar ( s, 0x90 ); bsPutUInt32 ( s, s->combinedCRC ); if (s->verbosity >= 2) VPrintf1( " final combined CRC = 0x%08x\n ", s->combinedCRC ); bsFinishWrite ( s ); } } /*-------------------------------------------------------------*/ /*--- end compress.c ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/bzlib/Makefile.am0000644000175000017500000000151312635262326013004 00000000000000# ------------------------------------------------------------------ # This file is part of bzip2/libbzip2, a program and library for # lossless, block-sorting data compression. # # bzip2/libbzip2 version 1.0.6 of 6 September 2010 # Copyright (C) 1996-2010 Julian Seward # # Please read the WARNING, DISCLAIMER and PATENTS sections in the # README file. # # This program is released under the terms of the license contained # in the file LICENSE. # ------------------------------------------------------------------ # # Modified by g10 Code on 2010-09-23. # Changed to automake by g10 Code on 2012-01-13. EXTRA_DIST = README README.1st CHANGES LICENSE noinst_LIBRARIES = libbz2.a libbz2_a_SOURCES = blocksort.c huffman.c crctable.c randtable.c \ compress.c decompress.c bzlib.c bzlib.h bzlib_private.h gnupg-1.4.20/bzlib/Makefile.in0000644000175000017500000005020612635457153013024 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # ------------------------------------------------------------------ # This file is part of bzip2/libbzip2, a program and library for # lossless, block-sorting data compression. # # bzip2/libbzip2 version 1.0.6 of 6 September 2010 # Copyright (C) 1996-2010 Julian Seward # # Please read the WARNING, DISCLAIMER and PATENTS sections in the # README file. # # This program is released under the terms of the license contained # in the file LICENSE. # ------------------------------------------------------------------ # # Modified by g10 Code on 2010-09-23. # Changed to automake by g10 Code on 2012-01-13. VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = bzlib DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs $(srcdir)/bzlib.h \ $(top_srcdir)/scripts/depcomp README ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libbz2_a_AR = $(AR) $(ARFLAGS) libbz2_a_LIBADD = am_libbz2_a_OBJECTS = blocksort.$(OBJEXT) huffman.$(OBJEXT) \ crctable.$(OBJEXT) randtable.$(OBJEXT) compress.$(OBJEXT) \ decompress.$(OBJEXT) bzlib.$(OBJEXT) libbz2_a_OBJECTS = $(am_libbz2_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libbz2_a_SOURCES) DIST_SOURCES = $(libbz2_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = README README.1st CHANGES LICENSE noinst_LIBRARIES = libbz2.a libbz2_a_SOURCES = blocksort.c huffman.c crctable.c randtable.c \ compress.c decompress.c bzlib.c bzlib.h bzlib_private.h all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bzlib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bzlib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libbz2.a: $(libbz2_a_OBJECTS) $(libbz2_a_DEPENDENCIES) $(EXTRA_libbz2_a_DEPENDENCIES) $(AM_V_at)-rm -f libbz2.a $(AM_V_AR)$(libbz2_a_AR) libbz2.a $(libbz2_a_OBJECTS) $(libbz2_a_LIBADD) $(AM_V_at)$(RANLIB) libbz2.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blocksort.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bzlib.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compress.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crctable.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/decompress.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/huffman.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/randtable.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/bzlib/bzlib.c0000644000175000017500000013135212635262326012223 00000000000000 /*-------------------------------------------------------------*/ /*--- Library top-level functions. ---*/ /*--- bzlib.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ /* CHANGES 0.9.0 -- original version. 0.9.0a/b -- no changes in this file. 0.9.0c -- made zero-length BZ_FLUSH work correctly in bzCompress(). fixed bzWrite/bzRead to ignore zero-length requests. fixed bzread to correctly handle read requests after EOF. wrong parameter order in call to bzDecompressInit in bzBuffToBuffDecompress. Fixed. */ #include "bzlib_private.h" /*---------------------------------------------------*/ /*--- Compression stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ #ifndef BZ_NO_STDIO void BZ2_bz__AssertH__fail ( int errcode ) { fprintf(stderr, "\n\nbzip2/libbzip2: internal error number %d.\n" "This is a bug in bzip2/libbzip2, %s.\n" "Please report it to me at: jseward@bzip.org. If this happened\n" "when you were using some program which uses libbzip2 as a\n" "component, you should also report this bug to the author(s)\n" "of that program. Please make an effort to report this bug;\n" "timely and accurate bug reports eventually lead to higher\n" "quality software. Thanks. Julian Seward, 10 December 2007.\n\n", errcode, BZ2_bzlibVersion() ); if (errcode == 1007) { fprintf(stderr, "\n*** A special note about internal error number 1007 ***\n" "\n" "Experience suggests that a common cause of i.e. 1007\n" "is unreliable memory or other hardware. The 1007 assertion\n" "just happens to cross-check the results of huge numbers of\n" "memory reads/writes, and so acts (unintendedly) as a stress\n" "test of your memory system.\n" "\n" "I suggest the following: try compressing the file again,\n" "possibly monitoring progress in detail with the -vv flag.\n" "\n" "* If the error cannot be reproduced, and/or happens at different\n" " points in compression, you may have a flaky memory system.\n" " Try a memory-test program. I have used Memtest86\n" " (www.memtest86.com). At the time of writing it is free (GPLd).\n" " Memtest86 tests memory much more thorougly than your BIOSs\n" " power-on test, and may find failures that the BIOS doesn't.\n" "\n" "* If the error can be repeatably reproduced, this is a bug in\n" " bzip2, and I would very much like to hear about it. Please\n" " let me know, and, ideally, save a copy of the file causing the\n" " problem -- without which I will be unable to investigate it.\n" "\n" ); } exit(3); } #endif /*---------------------------------------------------*/ static int bz_config_ok ( void ) { if (sizeof(int) != 4) return 0; if (sizeof(short) != 2) return 0; if (sizeof(char) != 1) return 0; return 1; } /*---------------------------------------------------*/ static void* default_bzalloc ( void* opaque, Int32 items, Int32 size ) { void* v = malloc ( items * size ); return v; } static void default_bzfree ( void* opaque, void* addr ) { if (addr != NULL) free ( addr ); } /*---------------------------------------------------*/ static void prepare_new_block ( EState* s ) { Int32 i; s->nblock = 0; s->numZ = 0; s->state_out_pos = 0; BZ_INITIALISE_CRC ( s->blockCRC ); for (i = 0; i < 256; i++) s->inUse[i] = False; s->blockNo++; } /*---------------------------------------------------*/ static void init_RL ( EState* s ) { s->state_in_ch = 256; s->state_in_len = 0; } static Bool isempty_RL ( EState* s ) { if (s->state_in_ch < 256 && s->state_in_len > 0) return False; else return True; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompressInit) ( bz_stream* strm, int blockSize100k, int verbosity, int workFactor ) { Int32 n; EState* s; if (!bz_config_ok()) return BZ_CONFIG_ERROR; if (strm == NULL || blockSize100k < 1 || blockSize100k > 9 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; if (strm->bzfree == NULL) strm->bzfree = default_bzfree; s = BZALLOC( sizeof(EState) ); if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; s->arr1 = NULL; s->arr2 = NULL; s->ftab = NULL; n = 100000 * blockSize100k; s->arr1 = BZALLOC( n * sizeof(UInt32) ); s->arr2 = BZALLOC( (n+BZ_N_OVERSHOOT) * sizeof(UInt32) ); s->ftab = BZALLOC( 65537 * sizeof(UInt32) ); if (s->arr1 == NULL || s->arr2 == NULL || s->ftab == NULL) { if (s->arr1 != NULL) BZFREE(s->arr1); if (s->arr2 != NULL) BZFREE(s->arr2); if (s->ftab != NULL) BZFREE(s->ftab); if (s != NULL) BZFREE(s); return BZ_MEM_ERROR; } s->blockNo = 0; s->state = BZ_S_INPUT; s->mode = BZ_M_RUNNING; s->combinedCRC = 0; s->blockSize100k = blockSize100k; s->nblockMAX = 100000 * blockSize100k - 19; s->verbosity = verbosity; s->workFactor = workFactor; s->block = (UChar*)s->arr2; s->mtfv = (UInt16*)s->arr1; s->zbits = NULL; s->ptr = (UInt32*)s->arr1; strm->state = s; strm->total_in_lo32 = 0; strm->total_in_hi32 = 0; strm->total_out_lo32 = 0; strm->total_out_hi32 = 0; init_RL ( s ); prepare_new_block ( s ); return BZ_OK; } /*---------------------------------------------------*/ static void add_pair_to_block ( EState* s ) { Int32 i; UChar ch = (UChar)(s->state_in_ch); for (i = 0; i < s->state_in_len; i++) { BZ_UPDATE_CRC( s->blockCRC, ch ); } s->inUse[s->state_in_ch] = True; switch (s->state_in_len) { case 1: s->block[s->nblock] = (UChar)ch; s->nblock++; break; case 2: s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; break; case 3: s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; break; default: s->inUse[s->state_in_len-4] = True; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = (UChar)ch; s->nblock++; s->block[s->nblock] = ((UChar)(s->state_in_len-4)); s->nblock++; break; } } /*---------------------------------------------------*/ static void flush_RL ( EState* s ) { if (s->state_in_ch < 256) add_pair_to_block ( s ); init_RL ( s ); } /*---------------------------------------------------*/ #define ADD_CHAR_TO_BLOCK(zs,zchh0) \ { \ UInt32 zchh = (UInt32)(zchh0); \ /*-- fast track the common case --*/ \ if (zchh != zs->state_in_ch && \ zs->state_in_len == 1) { \ UChar ch = (UChar)(zs->state_in_ch); \ BZ_UPDATE_CRC( zs->blockCRC, ch ); \ zs->inUse[zs->state_in_ch] = True; \ zs->block[zs->nblock] = (UChar)ch; \ zs->nblock++; \ zs->state_in_ch = zchh; \ } \ else \ /*-- general, uncommon cases --*/ \ if (zchh != zs->state_in_ch || \ zs->state_in_len == 255) { \ if (zs->state_in_ch < 256) \ add_pair_to_block ( zs ); \ zs->state_in_ch = zchh; \ zs->state_in_len = 1; \ } else { \ zs->state_in_len++; \ } \ } /*---------------------------------------------------*/ static Bool copy_input_until_stop ( EState* s ) { Bool progress_in = False; if (s->mode == BZ_M_RUNNING) { /*-- fast track the common case --*/ while (True) { /*-- block full? --*/ if (s->nblock >= s->nblockMAX) break; /*-- no input? --*/ if (s->strm->avail_in == 0) break; progress_in = True; ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; } } else { /*-- general, uncommon case --*/ while (True) { /*-- block full? --*/ if (s->nblock >= s->nblockMAX) break; /*-- no input? --*/ if (s->strm->avail_in == 0) break; /*-- flush/finish end? --*/ if (s->avail_in_expect == 0) break; progress_in = True; ADD_CHAR_TO_BLOCK ( s, (UInt32)(*((UChar*)(s->strm->next_in))) ); s->strm->next_in++; s->strm->avail_in--; s->strm->total_in_lo32++; if (s->strm->total_in_lo32 == 0) s->strm->total_in_hi32++; s->avail_in_expect--; } } return progress_in; } /*---------------------------------------------------*/ static Bool copy_output_until_stop ( EState* s ) { Bool progress_out = False; while (True) { /*-- no output space? --*/ if (s->strm->avail_out == 0) break; /*-- block done? --*/ if (s->state_out_pos >= s->numZ) break; progress_out = True; *(s->strm->next_out) = s->zbits[s->state_out_pos]; s->state_out_pos++; s->strm->avail_out--; s->strm->next_out++; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } return progress_out; } /*---------------------------------------------------*/ static Bool handle_compress ( bz_stream* strm ) { Bool progress_in = False; Bool progress_out = False; EState* s = strm->state; while (True) { if (s->state == BZ_S_OUTPUT) { progress_out |= copy_output_until_stop ( s ); if (s->state_out_pos < s->numZ) break; if (s->mode == BZ_M_FINISHING && s->avail_in_expect == 0 && isempty_RL(s)) break; prepare_new_block ( s ); s->state = BZ_S_INPUT; if (s->mode == BZ_M_FLUSHING && s->avail_in_expect == 0 && isempty_RL(s)) break; } if (s->state == BZ_S_INPUT) { progress_in |= copy_input_until_stop ( s ); if (s->mode != BZ_M_RUNNING && s->avail_in_expect == 0) { flush_RL ( s ); BZ2_compressBlock ( s, (Bool)(s->mode == BZ_M_FINISHING) ); s->state = BZ_S_OUTPUT; } else if (s->nblock >= s->nblockMAX) { BZ2_compressBlock ( s, False ); s->state = BZ_S_OUTPUT; } else if (s->strm->avail_in == 0) { break; } } } return progress_in || progress_out; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompress) ( bz_stream *strm, int action ) { Bool progress; EState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; preswitch: switch (s->mode) { case BZ_M_IDLE: return BZ_SEQUENCE_ERROR; case BZ_M_RUNNING: if (action == BZ_RUN) { progress = handle_compress ( strm ); return progress ? BZ_RUN_OK : BZ_PARAM_ERROR; } else if (action == BZ_FLUSH) { s->avail_in_expect = strm->avail_in; s->mode = BZ_M_FLUSHING; goto preswitch; } else if (action == BZ_FINISH) { s->avail_in_expect = strm->avail_in; s->mode = BZ_M_FINISHING; goto preswitch; } else return BZ_PARAM_ERROR; case BZ_M_FLUSHING: if (action != BZ_FLUSH) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) return BZ_FLUSH_OK; s->mode = BZ_M_RUNNING; return BZ_RUN_OK; case BZ_M_FINISHING: if (action != BZ_FINISH) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect != s->strm->avail_in) return BZ_SEQUENCE_ERROR; progress = handle_compress ( strm ); if (!progress) return BZ_SEQUENCE_ERROR; if (s->avail_in_expect > 0 || !isempty_RL(s) || s->state_out_pos < s->numZ) return BZ_FINISH_OK; s->mode = BZ_M_IDLE; return BZ_STREAM_END; } return BZ_OK; /*--not reached--*/ } /*---------------------------------------------------*/ int BZ_API(BZ2_bzCompressEnd) ( bz_stream *strm ) { EState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; if (s->arr1 != NULL) BZFREE(s->arr1); if (s->arr2 != NULL) BZFREE(s->arr2); if (s->ftab != NULL) BZFREE(s->ftab); BZFREE(strm->state); strm->state = NULL; return BZ_OK; } /*---------------------------------------------------*/ /*--- Decompression stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompressInit) ( bz_stream* strm, int verbosity, int small ) { DState* s; if (!bz_config_ok()) return BZ_CONFIG_ERROR; if (strm == NULL) return BZ_PARAM_ERROR; if (small != 0 && small != 1) return BZ_PARAM_ERROR; if (verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; if (strm->bzalloc == NULL) strm->bzalloc = default_bzalloc; if (strm->bzfree == NULL) strm->bzfree = default_bzfree; s = BZALLOC( sizeof(DState) ); if (s == NULL) return BZ_MEM_ERROR; s->strm = strm; strm->state = s; s->state = BZ_X_MAGIC_1; s->bsLive = 0; s->bsBuff = 0; s->calculatedCombinedCRC = 0; strm->total_in_lo32 = 0; strm->total_in_hi32 = 0; strm->total_out_lo32 = 0; strm->total_out_hi32 = 0; s->smallDecompress = (Bool)small; s->ll4 = NULL; s->ll16 = NULL; s->tt = NULL; s->currBlockNo = 0; s->verbosity = verbosity; return BZ_OK; } /*---------------------------------------------------*/ /* Return True iff data corruption is discovered. Returns False if there is no problem. */ static Bool unRLE_obuf_to_output_FAST ( DState* s ) { UChar k1; if (s->blockRandomised) { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_FAST(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_FAST(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } } else { /* restore */ UInt32 c_calculatedBlockCRC = s->calculatedBlockCRC; UChar c_state_out_ch = s->state_out_ch; Int32 c_state_out_len = s->state_out_len; Int32 c_nblock_used = s->nblock_used; Int32 c_k0 = s->k0; UInt32* c_tt = s->tt; UInt32 c_tPos = s->tPos; char* cs_next_out = s->strm->next_out; unsigned int cs_avail_out = s->strm->avail_out; Int32 ro_blockSize100k = s->blockSize100k; /* end restore */ UInt32 avail_out_INIT = cs_avail_out; Int32 s_save_nblockPP = s->save_nblock+1; unsigned int total_out_lo32_old; while (True) { /* try to finish existing run */ if (c_state_out_len > 0) { while (True) { if (cs_avail_out == 0) goto return_notr; if (c_state_out_len == 1) break; *( (UChar*)(cs_next_out) ) = c_state_out_ch; BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); c_state_out_len--; cs_next_out++; cs_avail_out--; } s_state_out_len_eq_one: { if (cs_avail_out == 0) { c_state_out_len = 1; goto return_notr; }; *( (UChar*)(cs_next_out) ) = c_state_out_ch; BZ_UPDATE_CRC ( c_calculatedBlockCRC, c_state_out_ch ); cs_next_out++; cs_avail_out--; } } /* Only caused by corrupt data stream? */ if (c_nblock_used > s_save_nblockPP) return True; /* can a new run be started? */ if (c_nblock_used == s_save_nblockPP) { c_state_out_len = 0; goto return_notr; }; c_state_out_ch = c_k0; BZ_GET_FAST_C(k1); c_nblock_used++; if (k1 != c_k0) { c_k0 = k1; goto s_state_out_len_eq_one; }; if (c_nblock_used == s_save_nblockPP) goto s_state_out_len_eq_one; c_state_out_len = 2; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; c_state_out_len = 3; BZ_GET_FAST_C(k1); c_nblock_used++; if (c_nblock_used == s_save_nblockPP) continue; if (k1 != c_k0) { c_k0 = k1; continue; }; BZ_GET_FAST_C(k1); c_nblock_used++; c_state_out_len = ((Int32)k1) + 4; BZ_GET_FAST_C(c_k0); c_nblock_used++; } return_notr: total_out_lo32_old = s->strm->total_out_lo32; s->strm->total_out_lo32 += (avail_out_INIT - cs_avail_out); if (s->strm->total_out_lo32 < total_out_lo32_old) s->strm->total_out_hi32++; /* save */ s->calculatedBlockCRC = c_calculatedBlockCRC; s->state_out_ch = c_state_out_ch; s->state_out_len = c_state_out_len; s->nblock_used = c_nblock_used; s->k0 = c_k0; s->tt = c_tt; s->tPos = c_tPos; s->strm->next_out = cs_next_out; s->strm->avail_out = cs_avail_out; /* end save */ } return False; } /*---------------------------------------------------*/ __inline__ Int32 BZ2_indexIntoF ( Int32 indx, Int32 *cftab ) { Int32 nb, na, mid; nb = 0; na = 256; do { mid = (nb + na) >> 1; if (indx >= cftab[mid]) nb = mid; else na = mid; } while (na - nb != 1); return nb; } /*---------------------------------------------------*/ /* Return True iff data corruption is discovered. Returns False if there is no problem. */ static Bool unRLE_obuf_to_output_SMALL ( DState* s ) { UChar k1; if (s->blockRandomised) { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_SMALL(k1); BZ_RAND_UPD_MASK; k1 ^= BZ_RAND_MASK; s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); BZ_RAND_UPD_MASK; s->k0 ^= BZ_RAND_MASK; s->nblock_used++; } } else { while (True) { /* try to finish existing run */ while (True) { if (s->strm->avail_out == 0) return False; if (s->state_out_len == 0) break; *( (UChar*)(s->strm->next_out) ) = s->state_out_ch; BZ_UPDATE_CRC ( s->calculatedBlockCRC, s->state_out_ch ); s->state_out_len--; s->strm->next_out++; s->strm->avail_out--; s->strm->total_out_lo32++; if (s->strm->total_out_lo32 == 0) s->strm->total_out_hi32++; } /* can a new run be started? */ if (s->nblock_used == s->save_nblock+1) return False; /* Only caused by corrupt data stream? */ if (s->nblock_used > s->save_nblock+1) return True; s->state_out_len = 1; s->state_out_ch = s->k0; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 2; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; s->state_out_len = 3; BZ_GET_SMALL(k1); s->nblock_used++; if (s->nblock_used == s->save_nblock+1) continue; if (k1 != s->k0) { s->k0 = k1; continue; }; BZ_GET_SMALL(k1); s->nblock_used++; s->state_out_len = ((Int32)k1) + 4; BZ_GET_SMALL(s->k0); s->nblock_used++; } } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompress) ( bz_stream *strm ) { Bool corrupt; DState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; while (True) { if (s->state == BZ_X_IDLE) return BZ_SEQUENCE_ERROR; if (s->state == BZ_X_OUTPUT) { if (s->smallDecompress) corrupt = unRLE_obuf_to_output_SMALL ( s ); else corrupt = unRLE_obuf_to_output_FAST ( s ); if (corrupt) return BZ_DATA_ERROR; if (s->nblock_used == s->save_nblock+1 && s->state_out_len == 0) { BZ_FINALISE_CRC ( s->calculatedBlockCRC ); if (s->verbosity >= 3) VPrintf2 ( " {0x%08x, 0x%08x}", s->storedBlockCRC, s->calculatedBlockCRC ); if (s->verbosity >= 2) VPrintf0 ( "]" ); if (s->calculatedBlockCRC != s->storedBlockCRC) return BZ_DATA_ERROR; s->calculatedCombinedCRC = (s->calculatedCombinedCRC << 1) | (s->calculatedCombinedCRC >> 31); s->calculatedCombinedCRC ^= s->calculatedBlockCRC; s->state = BZ_X_BLKHDR_1; } else { return BZ_OK; } } if (s->state >= BZ_X_MAGIC_1) { Int32 r = BZ2_decompress ( s ); if (r == BZ_STREAM_END) { if (s->verbosity >= 3) VPrintf2 ( "\n combined CRCs: stored = 0x%08x, computed = 0x%08x", s->storedCombinedCRC, s->calculatedCombinedCRC ); if (s->calculatedCombinedCRC != s->storedCombinedCRC) return BZ_DATA_ERROR; return r; } if (s->state != BZ_X_OUTPUT) return r; } } AssertH ( 0, 6001 ); return 0; /*NOTREACHED*/ } /*---------------------------------------------------*/ int BZ_API(BZ2_bzDecompressEnd) ( bz_stream *strm ) { DState* s; if (strm == NULL) return BZ_PARAM_ERROR; s = strm->state; if (s == NULL) return BZ_PARAM_ERROR; if (s->strm != strm) return BZ_PARAM_ERROR; if (s->tt != NULL) BZFREE(s->tt); if (s->ll16 != NULL) BZFREE(s->ll16); if (s->ll4 != NULL) BZFREE(s->ll4); BZFREE(strm->state); strm->state = NULL; return BZ_OK; } #ifndef BZ_NO_STDIO /*---------------------------------------------------*/ /*--- File I/O stuff ---*/ /*---------------------------------------------------*/ #define BZ_SETERR(eee) \ { \ if (bzerror != NULL) *bzerror = eee; \ if (bzf != NULL) bzf->lastErr = eee; \ } typedef struct { FILE* handle; Char buf[BZ_MAX_UNUSED]; Int32 bufN; Bool writing; bz_stream strm; Int32 lastErr; Bool initialisedOk; } bzFile; /*---------------------------------------------*/ static Bool myfeof ( FILE* f ) { Int32 c = fgetc ( f ); if (c == EOF) return True; ungetc ( c, f ); return False; } /*---------------------------------------------------*/ BZFILE* BZ_API(BZ2_bzWriteOpen) ( int* bzerror, FILE* f, int blockSize100k, int verbosity, int workFactor ) { Int32 ret; bzFile* bzf = NULL; BZ_SETERR(BZ_OK); if (f == NULL || (blockSize100k < 1 || blockSize100k > 9) || (workFactor < 0 || workFactor > 250) || (verbosity < 0 || verbosity > 4)) { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; if (ferror(f)) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = malloc ( sizeof(bzFile) ); if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); bzf->initialisedOk = False; bzf->bufN = 0; bzf->handle = f; bzf->writing = True; bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; if (workFactor == 0) workFactor = 30; ret = BZ2_bzCompressInit ( &(bzf->strm), blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = 0; bzf->initialisedOk = True; return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWrite) ( int* bzerror, BZFILE* b, void* buf, int len ) { Int32 n, n2, ret; bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL || buf == NULL || len < 0) { BZ_SETERR(BZ_PARAM_ERROR); return; }; if (!(bzf->writing)) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; if (len == 0) { BZ_SETERR(BZ_OK); return; }; bzf->strm.avail_in = len; bzf->strm.next_in = buf; while (True) { bzf->strm.avail_out = BZ_MAX_UNUSED; bzf->strm.next_out = bzf->buf; ret = BZ2_bzCompress ( &(bzf->strm), BZ_RUN ); if (ret != BZ_RUN_OK) { BZ_SETERR(ret); return; }; if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (bzf->strm.avail_in == 0) { BZ_SETERR(BZ_OK); return; }; } } /*---------------------------------------------------*/ void BZ_API(BZ2_bzWriteClose) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in, unsigned int* nbytes_out ) { BZ2_bzWriteClose64 ( bzerror, b, abandon, nbytes_in, NULL, nbytes_out, NULL ); } void BZ_API(BZ2_bzWriteClose64) ( int* bzerror, BZFILE* b, int abandon, unsigned int* nbytes_in_lo32, unsigned int* nbytes_in_hi32, unsigned int* nbytes_out_lo32, unsigned int* nbytes_out_hi32 ) { Int32 n, n2, ret; bzFile* bzf = (bzFile*)b; if (bzf == NULL) { BZ_SETERR(BZ_OK); return; }; if (!(bzf->writing)) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = 0; if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = 0; if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = 0; if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = 0; if ((!abandon) && bzf->lastErr == BZ_OK) { while (True) { bzf->strm.avail_out = BZ_MAX_UNUSED; bzf->strm.next_out = bzf->buf; ret = BZ2_bzCompress ( &(bzf->strm), BZ_FINISH ); if (ret != BZ_FINISH_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return; }; if (bzf->strm.avail_out < BZ_MAX_UNUSED) { n = BZ_MAX_UNUSED - bzf->strm.avail_out; n2 = fwrite ( (void*)(bzf->buf), sizeof(UChar), n, bzf->handle ); if (n != n2 || ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (ret == BZ_STREAM_END) break; } } if ( !abandon && !ferror ( bzf->handle ) ) { fflush ( bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return; }; } if (nbytes_in_lo32 != NULL) *nbytes_in_lo32 = bzf->strm.total_in_lo32; if (nbytes_in_hi32 != NULL) *nbytes_in_hi32 = bzf->strm.total_in_hi32; if (nbytes_out_lo32 != NULL) *nbytes_out_lo32 = bzf->strm.total_out_lo32; if (nbytes_out_hi32 != NULL) *nbytes_out_hi32 = bzf->strm.total_out_hi32; BZ_SETERR(BZ_OK); BZ2_bzCompressEnd ( &(bzf->strm) ); free ( bzf ); } /*---------------------------------------------------*/ BZFILE* BZ_API(BZ2_bzReadOpen) ( int* bzerror, FILE* f, int verbosity, int small, void* unused, int nUnused ) { bzFile* bzf = NULL; int ret; BZ_SETERR(BZ_OK); if (f == NULL || (small != 0 && small != 1) || (verbosity < 0 || verbosity > 4) || (unused == NULL && nUnused != 0) || (unused != NULL && (nUnused < 0 || nUnused > BZ_MAX_UNUSED))) { BZ_SETERR(BZ_PARAM_ERROR); return NULL; }; if (ferror(f)) { BZ_SETERR(BZ_IO_ERROR); return NULL; }; bzf = malloc ( sizeof(bzFile) ); if (bzf == NULL) { BZ_SETERR(BZ_MEM_ERROR); return NULL; }; BZ_SETERR(BZ_OK); bzf->initialisedOk = False; bzf->handle = f; bzf->bufN = 0; bzf->writing = False; bzf->strm.bzalloc = NULL; bzf->strm.bzfree = NULL; bzf->strm.opaque = NULL; while (nUnused > 0) { bzf->buf[bzf->bufN] = *((UChar*)(unused)); bzf->bufN++; unused = ((void*)( 1 + ((UChar*)(unused)) )); nUnused--; } ret = BZ2_bzDecompressInit ( &(bzf->strm), verbosity, small ); if (ret != BZ_OK) { BZ_SETERR(ret); free(bzf); return NULL; }; bzf->strm.avail_in = bzf->bufN; bzf->strm.next_in = bzf->buf; bzf->initialisedOk = True; return bzf; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzReadClose) ( int *bzerror, BZFILE *b ) { bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL) { BZ_SETERR(BZ_OK); return; }; if (bzf->writing) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (bzf->initialisedOk) (void)BZ2_bzDecompressEnd ( &(bzf->strm) ); free ( bzf ); } /*---------------------------------------------------*/ int BZ_API(BZ2_bzRead) ( int* bzerror, BZFILE* b, void* buf, int len ) { Int32 n, ret; bzFile* bzf = (bzFile*)b; BZ_SETERR(BZ_OK); if (bzf == NULL || buf == NULL || len < 0) { BZ_SETERR(BZ_PARAM_ERROR); return 0; }; if (bzf->writing) { BZ_SETERR(BZ_SEQUENCE_ERROR); return 0; }; if (len == 0) { BZ_SETERR(BZ_OK); return 0; }; bzf->strm.avail_out = len; bzf->strm.next_out = buf; while (True) { if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; if (bzf->strm.avail_in == 0 && !myfeof(bzf->handle)) { n = fread ( bzf->buf, sizeof(UChar), BZ_MAX_UNUSED, bzf->handle ); if (ferror(bzf->handle)) { BZ_SETERR(BZ_IO_ERROR); return 0; }; bzf->bufN = n; bzf->strm.avail_in = bzf->bufN; bzf->strm.next_in = bzf->buf; } ret = BZ2_bzDecompress ( &(bzf->strm) ); if (ret != BZ_OK && ret != BZ_STREAM_END) { BZ_SETERR(ret); return 0; }; if (ret == BZ_OK && myfeof(bzf->handle) && bzf->strm.avail_in == 0 && bzf->strm.avail_out > 0) { BZ_SETERR(BZ_UNEXPECTED_EOF); return 0; }; if (ret == BZ_STREAM_END) { BZ_SETERR(BZ_STREAM_END); return len - bzf->strm.avail_out; }; if (bzf->strm.avail_out == 0) { BZ_SETERR(BZ_OK); return len; }; } return 0; /*not reached*/ } /*---------------------------------------------------*/ void BZ_API(BZ2_bzReadGetUnused) ( int* bzerror, BZFILE* b, void** unused, int* nUnused ) { bzFile* bzf = (bzFile*)b; if (bzf == NULL) { BZ_SETERR(BZ_PARAM_ERROR); return; }; if (bzf->lastErr != BZ_STREAM_END) { BZ_SETERR(BZ_SEQUENCE_ERROR); return; }; if (unused == NULL || nUnused == NULL) { BZ_SETERR(BZ_PARAM_ERROR); return; }; BZ_SETERR(BZ_OK); *nUnused = bzf->strm.avail_in; *unused = bzf->strm.next_in; } #endif /*---------------------------------------------------*/ /*--- Misc convenience stuff ---*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ int BZ_API(BZ2_bzBuffToBuffCompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int blockSize100k, int verbosity, int workFactor ) { bz_stream strm; int ret; if (dest == NULL || destLen == NULL || source == NULL || blockSize100k < 1 || blockSize100k > 9 || verbosity < 0 || verbosity > 4 || workFactor < 0 || workFactor > 250) return BZ_PARAM_ERROR; if (workFactor == 0) workFactor = 30; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; ret = BZ2_bzCompressInit ( &strm, blockSize100k, verbosity, workFactor ); if (ret != BZ_OK) return ret; strm.next_in = source; strm.next_out = dest; strm.avail_in = sourceLen; strm.avail_out = *destLen; ret = BZ2_bzCompress ( &strm, BZ_FINISH ); if (ret == BZ_FINISH_OK) goto output_overflow; if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ *destLen -= strm.avail_out; BZ2_bzCompressEnd ( &strm ); return BZ_OK; output_overflow: BZ2_bzCompressEnd ( &strm ); return BZ_OUTBUFF_FULL; errhandler: BZ2_bzCompressEnd ( &strm ); return ret; } /*---------------------------------------------------*/ int BZ_API(BZ2_bzBuffToBuffDecompress) ( char* dest, unsigned int* destLen, char* source, unsigned int sourceLen, int small, int verbosity ) { bz_stream strm; int ret; if (dest == NULL || destLen == NULL || source == NULL || (small != 0 && small != 1) || verbosity < 0 || verbosity > 4) return BZ_PARAM_ERROR; strm.bzalloc = NULL; strm.bzfree = NULL; strm.opaque = NULL; ret = BZ2_bzDecompressInit ( &strm, verbosity, small ); if (ret != BZ_OK) return ret; strm.next_in = source; strm.next_out = dest; strm.avail_in = sourceLen; strm.avail_out = *destLen; ret = BZ2_bzDecompress ( &strm ); if (ret == BZ_OK) goto output_overflow_or_eof; if (ret != BZ_STREAM_END) goto errhandler; /* normal termination */ *destLen -= strm.avail_out; BZ2_bzDecompressEnd ( &strm ); return BZ_OK; output_overflow_or_eof: if (strm.avail_out > 0) { BZ2_bzDecompressEnd ( &strm ); return BZ_UNEXPECTED_EOF; } else { BZ2_bzDecompressEnd ( &strm ); return BZ_OUTBUFF_FULL; }; errhandler: BZ2_bzDecompressEnd ( &strm ); return ret; } /*---------------------------------------------------*/ /*-- Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) to support better zlib compatibility. This code is not _officially_ part of libbzip2 (yet); I haven't tested it, documented it, or considered the threading-safeness of it. If this code breaks, please contact both Yoshioka and me. --*/ /*---------------------------------------------------*/ /*---------------------------------------------------*/ /*-- return version like "0.9.5d, 4-Sept-1999". --*/ const char * BZ_API(BZ2_bzlibVersion)(void) { return BZ_VERSION; } #ifndef BZ_NO_STDIO /*---------------------------------------------------*/ #if defined(_WIN32) || defined(OS2) || defined(MSDOS) # include # include # define SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY) #else # define SET_BINARY_MODE(file) #endif static BZFILE * bzopen_or_bzdopen ( const char *path, /* no use when bzdopen */ int fd, /* no use when bzdopen */ const char *mode, int open_mode) /* bzopen: 0, bzdopen:1 */ { int bzerr; char unused[BZ_MAX_UNUSED]; int blockSize100k = 9; int writing = 0; char mode2[10] = ""; FILE *fp = NULL; BZFILE *bzfp = NULL; int verbosity = 0; int workFactor = 30; int smallMode = 0; int nUnused = 0; if (mode == NULL) return NULL; while (*mode) { switch (*mode) { case 'r': writing = 0; break; case 'w': writing = 1; break; case 's': smallMode = 1; break; default: if (isdigit((int)(*mode))) { blockSize100k = *mode-BZ_HDR_0; } } mode++; } strcat(mode2, writing ? "w" : "r" ); strcat(mode2,"b"); /* binary mode */ if (open_mode==0) { if (path==NULL || strcmp(path,"")==0) { fp = (writing ? stdout : stdin); SET_BINARY_MODE(fp); } else { fp = fopen(path,mode2); } } else { #ifdef BZ_STRICT_ANSI fp = NULL; #else fp = fdopen(fd,mode2); #endif } if (fp == NULL) return NULL; if (writing) { /* Guard against total chaos and anarchy -- JRS */ if (blockSize100k < 1) blockSize100k = 1; if (blockSize100k > 9) blockSize100k = 9; bzfp = BZ2_bzWriteOpen(&bzerr,fp,blockSize100k, verbosity,workFactor); } else { bzfp = BZ2_bzReadOpen(&bzerr,fp,verbosity,smallMode, unused,nUnused); } if (bzfp == NULL) { if (fp != stdin && fp != stdout) fclose(fp); return NULL; } return bzfp; } /*---------------------------------------------------*/ /*-- open file for read or write. ex) bzopen("file","w9") case path="" or NULL => use stdin or stdout. --*/ BZFILE * BZ_API(BZ2_bzopen) ( const char *path, const char *mode ) { return bzopen_or_bzdopen(path,-1,mode,/*bzopen*/0); } /*---------------------------------------------------*/ BZFILE * BZ_API(BZ2_bzdopen) ( int fd, const char *mode ) { return bzopen_or_bzdopen(NULL,fd,mode,/*bzdopen*/1); } /*---------------------------------------------------*/ int BZ_API(BZ2_bzread) (BZFILE* b, void* buf, int len ) { int bzerr, nread; if (((bzFile*)b)->lastErr == BZ_STREAM_END) return 0; nread = BZ2_bzRead(&bzerr,b,buf,len); if (bzerr == BZ_OK || bzerr == BZ_STREAM_END) { return nread; } else { return -1; } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzwrite) (BZFILE* b, void* buf, int len ) { int bzerr; BZ2_bzWrite(&bzerr,b,buf,len); if(bzerr == BZ_OK){ return len; }else{ return -1; } } /*---------------------------------------------------*/ int BZ_API(BZ2_bzflush) (BZFILE *b) { /* do nothing now... */ return 0; } /*---------------------------------------------------*/ void BZ_API(BZ2_bzclose) (BZFILE* b) { int bzerr; FILE *fp; if (b==NULL) {return;} fp = ((bzFile *)b)->handle; if(((bzFile*)b)->writing){ BZ2_bzWriteClose(&bzerr,b,0,NULL,NULL); if(bzerr != BZ_OK){ BZ2_bzWriteClose(NULL,b,1,NULL,NULL); } }else{ BZ2_bzReadClose(&bzerr,b); } if(fp!=stdin && fp!=stdout){ fclose(fp); } } /*---------------------------------------------------*/ /*-- return last error code --*/ static const char *bzerrorstrings[] = { "OK" ,"SEQUENCE_ERROR" ,"PARAM_ERROR" ,"MEM_ERROR" ,"DATA_ERROR" ,"DATA_ERROR_MAGIC" ,"IO_ERROR" ,"UNEXPECTED_EOF" ,"OUTBUFF_FULL" ,"CONFIG_ERROR" ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ ,"???" /* for future */ }; const char * BZ_API(BZ2_bzerror) (BZFILE *b, int *errnum) { int err = ((bzFile *)b)->lastErr; if(err>0) err = 0; *errnum = err; return bzerrorstrings[err*-1]; } #endif /*-------------------------------------------------------------*/ /*--- end bzlib.c ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/bzlib/randtable.c0000644000175000017500000000733712635262326013062 00000000000000 /*-------------------------------------------------------------*/ /*--- Table for randomising repetitive blocks ---*/ /*--- randtable.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------*/ Int32 BZ2_rNums[512] = { 619, 720, 127, 481, 931, 816, 813, 233, 566, 247, 985, 724, 205, 454, 863, 491, 741, 242, 949, 214, 733, 859, 335, 708, 621, 574, 73, 654, 730, 472, 419, 436, 278, 496, 867, 210, 399, 680, 480, 51, 878, 465, 811, 169, 869, 675, 611, 697, 867, 561, 862, 687, 507, 283, 482, 129, 807, 591, 733, 623, 150, 238, 59, 379, 684, 877, 625, 169, 643, 105, 170, 607, 520, 932, 727, 476, 693, 425, 174, 647, 73, 122, 335, 530, 442, 853, 695, 249, 445, 515, 909, 545, 703, 919, 874, 474, 882, 500, 594, 612, 641, 801, 220, 162, 819, 984, 589, 513, 495, 799, 161, 604, 958, 533, 221, 400, 386, 867, 600, 782, 382, 596, 414, 171, 516, 375, 682, 485, 911, 276, 98, 553, 163, 354, 666, 933, 424, 341, 533, 870, 227, 730, 475, 186, 263, 647, 537, 686, 600, 224, 469, 68, 770, 919, 190, 373, 294, 822, 808, 206, 184, 943, 795, 384, 383, 461, 404, 758, 839, 887, 715, 67, 618, 276, 204, 918, 873, 777, 604, 560, 951, 160, 578, 722, 79, 804, 96, 409, 713, 940, 652, 934, 970, 447, 318, 353, 859, 672, 112, 785, 645, 863, 803, 350, 139, 93, 354, 99, 820, 908, 609, 772, 154, 274, 580, 184, 79, 626, 630, 742, 653, 282, 762, 623, 680, 81, 927, 626, 789, 125, 411, 521, 938, 300, 821, 78, 343, 175, 128, 250, 170, 774, 972, 275, 999, 639, 495, 78, 352, 126, 857, 956, 358, 619, 580, 124, 737, 594, 701, 612, 669, 112, 134, 694, 363, 992, 809, 743, 168, 974, 944, 375, 748, 52, 600, 747, 642, 182, 862, 81, 344, 805, 988, 739, 511, 655, 814, 334, 249, 515, 897, 955, 664, 981, 649, 113, 974, 459, 893, 228, 433, 837, 553, 268, 926, 240, 102, 654, 459, 51, 686, 754, 806, 760, 493, 403, 415, 394, 687, 700, 946, 670, 656, 610, 738, 392, 760, 799, 887, 653, 978, 321, 576, 617, 626, 502, 894, 679, 243, 440, 680, 879, 194, 572, 640, 724, 926, 56, 204, 700, 707, 151, 457, 449, 797, 195, 791, 558, 945, 679, 297, 59, 87, 824, 713, 663, 412, 693, 342, 606, 134, 108, 571, 364, 631, 212, 174, 643, 304, 329, 343, 97, 430, 751, 497, 314, 983, 374, 822, 928, 140, 206, 73, 263, 980, 736, 876, 478, 430, 305, 170, 514, 364, 692, 829, 82, 855, 953, 676, 246, 369, 970, 294, 750, 807, 827, 150, 790, 288, 923, 804, 378, 215, 828, 592, 281, 565, 555, 710, 82, 896, 831, 547, 261, 524, 462, 293, 465, 502, 56, 661, 821, 976, 991, 658, 869, 905, 758, 745, 193, 768, 550, 608, 933, 378, 286, 215, 979, 792, 961, 61, 688, 793, 644, 986, 403, 106, 366, 905, 644, 372, 567, 466, 434, 645, 210, 389, 550, 919, 135, 780, 773, 635, 389, 707, 100, 626, 958, 165, 504, 920, 176, 193, 713, 857, 265, 203, 50, 668, 108, 645, 990, 626, 197, 510, 357, 358, 850, 858, 364, 936, 638 }; /*-------------------------------------------------------------*/ /*--- end randtable.c ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/bzlib/blocksort.c0000644000175000017500000007364012635262326013130 00000000000000 /*-------------------------------------------------------------*/ /*--- Block sorting machinery ---*/ /*--- blocksort.c ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #include "bzlib_private.h" /*---------------------------------------------*/ /*--- Fallback O(N log(N)^2) sorting ---*/ /*--- algorithm, for repetitive blocks ---*/ /*---------------------------------------------*/ /*---------------------------------------------*/ static __inline__ void fallbackSimpleSort ( UInt32* fmap, UInt32* eclass, Int32 lo, Int32 hi ) { Int32 i, j, tmp; UInt32 ec_tmp; if (lo == hi) return; if (hi - lo > 3) { for ( i = hi-4; i >= lo; i-- ) { tmp = fmap[i]; ec_tmp = eclass[tmp]; for ( j = i+4; j <= hi && ec_tmp > eclass[fmap[j]]; j += 4 ) fmap[j-4] = fmap[j]; fmap[j-4] = tmp; } } for ( i = hi-1; i >= lo; i-- ) { tmp = fmap[i]; ec_tmp = eclass[tmp]; for ( j = i+1; j <= hi && ec_tmp > eclass[fmap[j]]; j++ ) fmap[j-1] = fmap[j]; fmap[j-1] = tmp; } } /*---------------------------------------------*/ #define fswap(zz1, zz2) \ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } #define fvswap(zzp1, zzp2, zzn) \ { \ Int32 yyp1 = (zzp1); \ Int32 yyp2 = (zzp2); \ Int32 yyn = (zzn); \ while (yyn > 0) { \ fswap(fmap[yyp1], fmap[yyp2]); \ yyp1++; yyp2++; yyn--; \ } \ } #define fmin(a,b) ((a) < (b)) ? (a) : (b) #define fpush(lz,hz) { stackLo[sp] = lz; \ stackHi[sp] = hz; \ sp++; } #define fpop(lz,hz) { sp--; \ lz = stackLo[sp]; \ hz = stackHi[sp]; } #define FALLBACK_QSORT_SMALL_THRESH 10 #define FALLBACK_QSORT_STACK_SIZE 100 static void fallbackQSort3 ( UInt32* fmap, UInt32* eclass, Int32 loSt, Int32 hiSt ) { Int32 unLo, unHi, ltLo, gtHi, n, m; Int32 sp, lo, hi; UInt32 med, r, r3; Int32 stackLo[FALLBACK_QSORT_STACK_SIZE]; Int32 stackHi[FALLBACK_QSORT_STACK_SIZE]; r = 0; sp = 0; fpush ( loSt, hiSt ); while (sp > 0) { AssertH ( sp < FALLBACK_QSORT_STACK_SIZE - 1, 1004 ); fpop ( lo, hi ); if (hi - lo < FALLBACK_QSORT_SMALL_THRESH) { fallbackSimpleSort ( fmap, eclass, lo, hi ); continue; } /* Random partitioning. Median of 3 sometimes fails to avoid bad cases. Median of 9 seems to help but looks rather expensive. This too seems to work but is cheaper. Guidance for the magic constants 7621 and 32768 is taken from Sedgewick's algorithms book, chapter 35. */ r = ((r * 7621) + 1) % 32768; r3 = r % 3; if (r3 == 0) med = eclass[fmap[lo]]; else if (r3 == 1) med = eclass[fmap[(lo+hi)>>1]]; else med = eclass[fmap[hi]]; unLo = ltLo = lo; unHi = gtHi = hi; while (1) { while (1) { if (unLo > unHi) break; n = (Int32)eclass[fmap[unLo]] - (Int32)med; if (n == 0) { fswap(fmap[unLo], fmap[ltLo]); ltLo++; unLo++; continue; }; if (n > 0) break; unLo++; } while (1) { if (unLo > unHi) break; n = (Int32)eclass[fmap[unHi]] - (Int32)med; if (n == 0) { fswap(fmap[unHi], fmap[gtHi]); gtHi--; unHi--; continue; }; if (n < 0) break; unHi--; } if (unLo > unHi) break; fswap(fmap[unLo], fmap[unHi]); unLo++; unHi--; } AssertD ( unHi == unLo-1, "fallbackQSort3(2)" ); if (gtHi < ltLo) continue; n = fmin(ltLo-lo, unLo-ltLo); fvswap(lo, unLo-n, n); m = fmin(hi-gtHi, gtHi-unHi); fvswap(unLo, hi-m+1, m); n = lo + unLo - ltLo - 1; m = hi - (gtHi - unHi) + 1; if (n - lo > hi - m) { fpush ( lo, n ); fpush ( m, hi ); } else { fpush ( m, hi ); fpush ( lo, n ); } } } #undef fmin #undef fpush #undef fpop #undef fswap #undef fvswap #undef FALLBACK_QSORT_SMALL_THRESH #undef FALLBACK_QSORT_STACK_SIZE /*---------------------------------------------*/ /* Pre: nblock > 0 eclass exists for [0 .. nblock-1] ((UChar*)eclass) [0 .. nblock-1] holds block ptr exists for [0 .. nblock-1] Post: ((UChar*)eclass) [0 .. nblock-1] holds block All other areas of eclass destroyed fmap [0 .. nblock-1] holds sorted order bhtab [ 0 .. 2+(nblock/32) ] destroyed */ #define SET_BH(zz) bhtab[(zz) >> 5] |= (1 << ((zz) & 31)) #define CLEAR_BH(zz) bhtab[(zz) >> 5] &= ~(1 << ((zz) & 31)) #define ISSET_BH(zz) (bhtab[(zz) >> 5] & (1 << ((zz) & 31))) #define WORD_BH(zz) bhtab[(zz) >> 5] #define UNALIGNED_BH(zz) ((zz) & 0x01f) static void fallbackSort ( UInt32* fmap, UInt32* eclass, UInt32* bhtab, Int32 nblock, Int32 verb ) { Int32 ftab[257]; Int32 ftabCopy[256]; Int32 H, i, j, k, l, r, cc, cc1; Int32 nNotDone; Int32 nBhtab; UChar* eclass8 = (UChar*)eclass; /*-- Initial 1-char radix sort to generate initial fmap and initial BH bits. --*/ if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); for (i = 0; i < 257; i++) ftab[i] = 0; for (i = 0; i < nblock; i++) ftab[eclass8[i]]++; for (i = 0; i < 256; i++) ftabCopy[i] = ftab[i]; for (i = 1; i < 257; i++) ftab[i] += ftab[i-1]; for (i = 0; i < nblock; i++) { j = eclass8[i]; k = ftab[j] - 1; ftab[j] = k; fmap[k] = i; } nBhtab = 2 + (nblock / 32); for (i = 0; i < nBhtab; i++) bhtab[i] = 0; for (i = 0; i < 256; i++) SET_BH(ftab[i]); /*-- Inductively refine the buckets. Kind-of an "exponential radix sort" (!), inspired by the Manber-Myers suffix array construction algorithm. --*/ /*-- set sentinel bits for block-end detection --*/ for (i = 0; i < 32; i++) { SET_BH(nblock + 2*i); CLEAR_BH(nblock + 2*i + 1); } /*-- the log(N) loop --*/ H = 1; while (1) { if (verb >= 4) VPrintf1 ( " depth %6d has ", H ); j = 0; for (i = 0; i < nblock; i++) { if (ISSET_BH(i)) j = i; k = fmap[i] - H; if (k < 0) k += nblock; eclass[k] = j; } nNotDone = 0; r = -1; while (1) { /*-- find the next non-singleton bucket --*/ k = r + 1; while (ISSET_BH(k) && UNALIGNED_BH(k)) k++; if (ISSET_BH(k)) { while (WORD_BH(k) == 0xffffffff) k += 32; while (ISSET_BH(k)) k++; } l = k - 1; if (l >= nblock) break; while (!ISSET_BH(k) && UNALIGNED_BH(k)) k++; if (!ISSET_BH(k)) { while (WORD_BH(k) == 0x00000000) k += 32; while (!ISSET_BH(k)) k++; } r = k - 1; if (r >= nblock) break; /*-- now [l, r] bracket current bucket --*/ if (r > l) { nNotDone += (r - l + 1); fallbackQSort3 ( fmap, eclass, l, r ); /*-- scan bucket and generate header bits-- */ cc = -1; for (i = l; i <= r; i++) { cc1 = eclass[fmap[i]]; if (cc != cc1) { SET_BH(i); cc = cc1; }; } } } if (verb >= 4) VPrintf1 ( "%6d unresolved strings\n", nNotDone ); H *= 2; if (H > nblock || nNotDone == 0) break; } /*-- Reconstruct the original block in eclass8 [0 .. nblock-1], since the previous phase destroyed it. --*/ if (verb >= 4) VPrintf0 ( " reconstructing block ...\n" ); j = 0; for (i = 0; i < nblock; i++) { while (ftabCopy[j] == 0) j++; ftabCopy[j]--; eclass8[fmap[i]] = (UChar)j; } AssertH ( j < 256, 1005 ); } #undef SET_BH #undef CLEAR_BH #undef ISSET_BH #undef WORD_BH #undef UNALIGNED_BH /*---------------------------------------------*/ /*--- The main, O(N^2 log(N)) sorting ---*/ /*--- algorithm. Faster for "normal" ---*/ /*--- non-repetitive blocks. ---*/ /*---------------------------------------------*/ /*---------------------------------------------*/ static __inline__ Bool mainGtU ( UInt32 i1, UInt32 i2, UChar* block, UInt16* quadrant, UInt32 nblock, Int32* budget ) { Int32 k; UChar c1, c2; UInt16 s1, s2; AssertD ( i1 != i2, "mainGtU" ); /* 1 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 2 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 3 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 4 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 5 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 6 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 7 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 8 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 9 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 10 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 11 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; /* 12 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); i1++; i2++; k = nblock + 8; do { /* 1 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 2 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 3 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 4 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 5 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 6 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 7 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; /* 8 */ c1 = block[i1]; c2 = block[i2]; if (c1 != c2) return (c1 > c2); s1 = quadrant[i1]; s2 = quadrant[i2]; if (s1 != s2) return (s1 > s2); i1++; i2++; if (i1 >= nblock) i1 -= nblock; if (i2 >= nblock) i2 -= nblock; k -= 8; (*budget)--; } while (k >= 0); return False; } /*---------------------------------------------*/ /*-- Knuth's increments seem to work better than Incerpi-Sedgewick here. Possibly because the number of elems to sort is usually small, typically <= 20. --*/ static Int32 incs[14] = { 1, 4, 13, 40, 121, 364, 1093, 3280, 9841, 29524, 88573, 265720, 797161, 2391484 }; static void mainSimpleSort ( UInt32* ptr, UChar* block, UInt16* quadrant, Int32 nblock, Int32 lo, Int32 hi, Int32 d, Int32* budget ) { Int32 i, j, h, bigN, hp; UInt32 v; bigN = hi - lo + 1; if (bigN < 2) return; hp = 0; while (incs[hp] < bigN) hp++; hp--; for (; hp >= 0; hp--) { h = incs[hp]; i = lo + h; while (True) { /*-- copy 1 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; /*-- copy 2 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; /*-- copy 3 --*/ if (i > hi) break; v = ptr[i]; j = i; while ( mainGtU ( ptr[j-h]+d, v+d, block, quadrant, nblock, budget ) ) { ptr[j] = ptr[j-h]; j = j - h; if (j <= (lo + h - 1)) break; } ptr[j] = v; i++; if (*budget < 0) return; } } } /*---------------------------------------------*/ /*-- The following is an implementation of an elegant 3-way quicksort for strings, described in a paper "Fast Algorithms for Sorting and Searching Strings", by Robert Sedgewick and Jon L. Bentley. --*/ #define mswap(zz1, zz2) \ { Int32 zztmp = zz1; zz1 = zz2; zz2 = zztmp; } #define mvswap(zzp1, zzp2, zzn) \ { \ Int32 yyp1 = (zzp1); \ Int32 yyp2 = (zzp2); \ Int32 yyn = (zzn); \ while (yyn > 0) { \ mswap(ptr[yyp1], ptr[yyp2]); \ yyp1++; yyp2++; yyn--; \ } \ } static __inline__ UChar mmed3 ( UChar a, UChar b, UChar c ) { UChar t; if (a > b) { t = a; a = b; b = t; }; if (b > c) { b = c; if (a > b) b = a; } return b; } #define mmin(a,b) ((a) < (b)) ? (a) : (b) #define mpush(lz,hz,dz) { stackLo[sp] = lz; \ stackHi[sp] = hz; \ stackD [sp] = dz; \ sp++; } #define mpop(lz,hz,dz) { sp--; \ lz = stackLo[sp]; \ hz = stackHi[sp]; \ dz = stackD [sp]; } #define mnextsize(az) (nextHi[az]-nextLo[az]) #define mnextswap(az,bz) \ { Int32 tz; \ tz = nextLo[az]; nextLo[az] = nextLo[bz]; nextLo[bz] = tz; \ tz = nextHi[az]; nextHi[az] = nextHi[bz]; nextHi[bz] = tz; \ tz = nextD [az]; nextD [az] = nextD [bz]; nextD [bz] = tz; } #define MAIN_QSORT_SMALL_THRESH 20 #define MAIN_QSORT_DEPTH_THRESH (BZ_N_RADIX + BZ_N_QSORT) #define MAIN_QSORT_STACK_SIZE 100 static void mainQSort3 ( UInt32* ptr, UChar* block, UInt16* quadrant, Int32 nblock, Int32 loSt, Int32 hiSt, Int32 dSt, Int32* budget ) { Int32 unLo, unHi, ltLo, gtHi, n, m, med; Int32 sp, lo, hi, d; Int32 stackLo[MAIN_QSORT_STACK_SIZE]; Int32 stackHi[MAIN_QSORT_STACK_SIZE]; Int32 stackD [MAIN_QSORT_STACK_SIZE]; Int32 nextLo[3]; Int32 nextHi[3]; Int32 nextD [3]; sp = 0; mpush ( loSt, hiSt, dSt ); while (sp > 0) { AssertH ( sp < MAIN_QSORT_STACK_SIZE - 2, 1001 ); mpop ( lo, hi, d ); if (hi - lo < MAIN_QSORT_SMALL_THRESH || d > MAIN_QSORT_DEPTH_THRESH) { mainSimpleSort ( ptr, block, quadrant, nblock, lo, hi, d, budget ); if (*budget < 0) return; continue; } med = (Int32) mmed3 ( block[ptr[ lo ]+d], block[ptr[ hi ]+d], block[ptr[ (lo+hi)>>1 ]+d] ); unLo = ltLo = lo; unHi = gtHi = hi; while (True) { while (True) { if (unLo > unHi) break; n = ((Int32)block[ptr[unLo]+d]) - med; if (n == 0) { mswap(ptr[unLo], ptr[ltLo]); ltLo++; unLo++; continue; }; if (n > 0) break; unLo++; } while (True) { if (unLo > unHi) break; n = ((Int32)block[ptr[unHi]+d]) - med; if (n == 0) { mswap(ptr[unHi], ptr[gtHi]); gtHi--; unHi--; continue; }; if (n < 0) break; unHi--; } if (unLo > unHi) break; mswap(ptr[unLo], ptr[unHi]); unLo++; unHi--; } AssertD ( unHi == unLo-1, "mainQSort3(2)" ); if (gtHi < ltLo) { mpush(lo, hi, d+1 ); continue; } n = mmin(ltLo-lo, unLo-ltLo); mvswap(lo, unLo-n, n); m = mmin(hi-gtHi, gtHi-unHi); mvswap(unLo, hi-m+1, m); n = lo + unLo - ltLo - 1; m = hi - (gtHi - unHi) + 1; nextLo[0] = lo; nextHi[0] = n; nextD[0] = d; nextLo[1] = m; nextHi[1] = hi; nextD[1] = d; nextLo[2] = n+1; nextHi[2] = m-1; nextD[2] = d+1; if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); if (mnextsize(1) < mnextsize(2)) mnextswap(1,2); if (mnextsize(0) < mnextsize(1)) mnextswap(0,1); AssertD (mnextsize(0) >= mnextsize(1), "mainQSort3(8)" ); AssertD (mnextsize(1) >= mnextsize(2), "mainQSort3(9)" ); mpush (nextLo[0], nextHi[0], nextD[0]); mpush (nextLo[1], nextHi[1], nextD[1]); mpush (nextLo[2], nextHi[2], nextD[2]); } } #undef mswap #undef mvswap #undef mpush #undef mpop #undef mmin #undef mnextsize #undef mnextswap #undef MAIN_QSORT_SMALL_THRESH #undef MAIN_QSORT_DEPTH_THRESH #undef MAIN_QSORT_STACK_SIZE /*---------------------------------------------*/ /* Pre: nblock > N_OVERSHOOT block32 exists for [0 .. nblock-1 +N_OVERSHOOT] ((UChar*)block32) [0 .. nblock-1] holds block ptr exists for [0 .. nblock-1] Post: ((UChar*)block32) [0 .. nblock-1] holds block All other areas of block32 destroyed ftab [0 .. 65536 ] destroyed ptr [0 .. nblock-1] holds sorted order if (*budget < 0), sorting was abandoned */ #define BIGFREQ(b) (ftab[((b)+1) << 8] - ftab[(b) << 8]) #define SETMASK (1 << 21) #define CLEARMASK (~(SETMASK)) static void mainSort ( UInt32* ptr, UChar* block, UInt16* quadrant, UInt32* ftab, Int32 nblock, Int32 verb, Int32* budget ) { Int32 i, j, k, ss, sb; Int32 runningOrder[256]; Bool bigDone[256]; Int32 copyStart[256]; Int32 copyEnd [256]; UChar c1; Int32 numQSorted; UInt16 s; if (verb >= 4) VPrintf0 ( " main sort initialise ...\n" ); /*-- set up the 2-byte frequency table --*/ for (i = 65536; i >= 0; i--) ftab[i] = 0; j = block[0] << 8; i = nblock-1; for (; i >= 3; i -= 4) { quadrant[i] = 0; j = (j >> 8) | ( ((UInt16)block[i]) << 8); ftab[j]++; quadrant[i-1] = 0; j = (j >> 8) | ( ((UInt16)block[i-1]) << 8); ftab[j]++; quadrant[i-2] = 0; j = (j >> 8) | ( ((UInt16)block[i-2]) << 8); ftab[j]++; quadrant[i-3] = 0; j = (j >> 8) | ( ((UInt16)block[i-3]) << 8); ftab[j]++; } for (; i >= 0; i--) { quadrant[i] = 0; j = (j >> 8) | ( ((UInt16)block[i]) << 8); ftab[j]++; } /*-- (emphasises close relationship of block & quadrant) --*/ for (i = 0; i < BZ_N_OVERSHOOT; i++) { block [nblock+i] = block[i]; quadrant[nblock+i] = 0; } if (verb >= 4) VPrintf0 ( " bucket sorting ...\n" ); /*-- Complete the initial radix sort --*/ for (i = 1; i <= 65536; i++) ftab[i] += ftab[i-1]; s = block[0] << 8; i = nblock-1; for (; i >= 3; i -= 4) { s = (s >> 8) | (block[i] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i; s = (s >> 8) | (block[i-1] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-1; s = (s >> 8) | (block[i-2] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-2; s = (s >> 8) | (block[i-3] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i-3; } for (; i >= 0; i--) { s = (s >> 8) | (block[i] << 8); j = ftab[s] -1; ftab[s] = j; ptr[j] = i; } /*-- Now ftab contains the first loc of every small bucket. Calculate the running order, from smallest to largest big bucket. --*/ for (i = 0; i <= 255; i++) { bigDone [i] = False; runningOrder[i] = i; } { Int32 vv; Int32 h = 1; do h = 3 * h + 1; while (h <= 256); do { h = h / 3; for (i = h; i <= 255; i++) { vv = runningOrder[i]; j = i; while ( BIGFREQ(runningOrder[j-h]) > BIGFREQ(vv) ) { runningOrder[j] = runningOrder[j-h]; j = j - h; if (j <= (h - 1)) goto zero; } zero: runningOrder[j] = vv; } } while (h != 1); } /*-- The main sorting loop. --*/ numQSorted = 0; for (i = 0; i <= 255; i++) { /*-- Process big buckets, starting with the least full. Basically this is a 3-step process in which we call mainQSort3 to sort the small buckets [ss, j], but also make a big effort to avoid the calls if we can. --*/ ss = runningOrder[i]; /*-- Step 1: Complete the big bucket [ss] by quicksorting any unsorted small buckets [ss, j], for j != ss. Hopefully previous pointer-scanning phases have already completed many of the small buckets [ss, j], so we don't have to sort them at all. --*/ for (j = 0; j <= 255; j++) { if (j != ss) { sb = (ss << 8) + j; if ( ! (ftab[sb] & SETMASK) ) { Int32 lo = ftab[sb] & CLEARMASK; Int32 hi = (ftab[sb+1] & CLEARMASK) - 1; if (hi > lo) { if (verb >= 4) VPrintf4 ( " qsort [0x%x, 0x%x] " "done %d this %d\n", ss, j, numQSorted, hi - lo + 1 ); mainQSort3 ( ptr, block, quadrant, nblock, lo, hi, BZ_N_RADIX, budget ); numQSorted += (hi - lo + 1); if (*budget < 0) return; } } ftab[sb] |= SETMASK; } } AssertH ( !bigDone[ss], 1006 ); /*-- Step 2: Now scan this big bucket [ss] so as to synthesise the sorted order for small buckets [t, ss] for all t, including, magically, the bucket [ss,ss] too. This will avoid doing Real Work in subsequent Step 1's. --*/ { for (j = 0; j <= 255; j++) { copyStart[j] = ftab[(j << 8) + ss] & CLEARMASK; copyEnd [j] = (ftab[(j << 8) + ss + 1] & CLEARMASK) - 1; } for (j = ftab[ss << 8] & CLEARMASK; j < copyStart[ss]; j++) { k = ptr[j]-1; if (k < 0) k += nblock; c1 = block[k]; if (!bigDone[c1]) ptr[ copyStart[c1]++ ] = k; } for (j = (ftab[(ss+1) << 8] & CLEARMASK) - 1; j > copyEnd[ss]; j--) { k = ptr[j]-1; if (k < 0) k += nblock; c1 = block[k]; if (!bigDone[c1]) ptr[ copyEnd[c1]-- ] = k; } } AssertH ( (copyStart[ss]-1 == copyEnd[ss]) || /* Extremely rare case missing in bzip2-1.0.0 and 1.0.1. Necessity for this case is demonstrated by compressing a sequence of approximately 48.5 million of character 251; 1.0.0/1.0.1 will then die here. */ (copyStart[ss] == 0 && copyEnd[ss] == nblock-1), 1007 ) for (j = 0; j <= 255; j++) ftab[(j << 8) + ss] |= SETMASK; /*-- Step 3: The [ss] big bucket is now done. Record this fact, and update the quadrant descriptors. Remember to update quadrants in the overshoot area too, if necessary. The "if (i < 255)" test merely skips this updating for the last bucket processed, since updating for the last bucket is pointless. The quadrant array provides a way to incrementally cache sort orderings, as they appear, so as to make subsequent comparisons in fullGtU() complete faster. For repetitive blocks this makes a big difference (but not big enough to be able to avoid the fallback sorting mechanism, exponential radix sort). The precise meaning is: at all times: for 0 <= i < nblock and 0 <= j <= nblock if block[i] != block[j], then the relative values of quadrant[i] and quadrant[j] are meaningless. else { if quadrant[i] < quadrant[j] then the string starting at i lexicographically precedes the string starting at j else if quadrant[i] > quadrant[j] then the string starting at j lexicographically precedes the string starting at i else the relative ordering of the strings starting at i and j has not yet been determined. } --*/ bigDone[ss] = True; if (i < 255) { Int32 bbStart = ftab[ss << 8] & CLEARMASK; Int32 bbSize = (ftab[(ss+1) << 8] & CLEARMASK) - bbStart; Int32 shifts = 0; while ((bbSize >> shifts) > 65534) shifts++; for (j = bbSize-1; j >= 0; j--) { Int32 a2update = ptr[bbStart + j]; UInt16 qVal = (UInt16)(j >> shifts); quadrant[a2update] = qVal; if (a2update < BZ_N_OVERSHOOT) quadrant[a2update + nblock] = qVal; } AssertH ( ((bbSize-1) >> shifts) <= 65535, 1002 ); } } if (verb >= 4) VPrintf3 ( " %d pointers, %d sorted, %d scanned\n", nblock, numQSorted, nblock - numQSorted ); } #undef BIGFREQ #undef SETMASK #undef CLEARMASK /*---------------------------------------------*/ /* Pre: nblock > 0 arr2 exists for [0 .. nblock-1 +N_OVERSHOOT] ((UChar*)arr2) [0 .. nblock-1] holds block arr1 exists for [0 .. nblock-1] Post: ((UChar*)arr2) [0 .. nblock-1] holds block All other areas of block destroyed ftab [ 0 .. 65536 ] destroyed arr1 [0 .. nblock-1] holds sorted order */ void BZ2_blockSort ( EState* s ) { UInt32* ptr = s->ptr; UChar* block = s->block; UInt32* ftab = s->ftab; Int32 nblock = s->nblock; Int32 verb = s->verbosity; Int32 wfact = s->workFactor; UInt16* quadrant; Int32 budget; Int32 budgetInit; Int32 i; if (nblock < 10000) { fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); } else { /* Calculate the location for quadrant, remembering to get the alignment right. Assumes that &(block[0]) is at least 2-byte aligned -- this should be ok since block is really the first section of arr2. */ i = nblock+BZ_N_OVERSHOOT; if (i & 1) i++; quadrant = (UInt16*)(&(block[i])); /* (wfact-1) / 3 puts the default-factor-30 transition point at very roughly the same place as with v0.1 and v0.9.0. Not that it particularly matters any more, since the resulting compressed stream is now the same regardless of whether or not we use the main sort or fallback sort. */ if (wfact < 1 ) wfact = 1; if (wfact > 100) wfact = 100; budgetInit = nblock * ((wfact-1) / 3); budget = budgetInit; mainSort ( ptr, block, quadrant, ftab, nblock, verb, &budget ); if (verb >= 3) VPrintf3 ( " %d work, %d block, ratio %5.2f\n", budgetInit - budget, nblock, (float)(budgetInit - budget) / (float)(nblock==0 ? 1 : nblock) ); if (budget < 0) { if (verb >= 2) VPrintf0 ( " too repetitive; using fallback" " sorting algorithm\n" ); fallbackSort ( s->arr1, s->arr2, ftab, nblock, verb ); } } s->origPtr = -1; for (i = 0; i < s->nblock; i++) if (ptr[i] == 0) { s->origPtr = i; break; }; AssertH( s->origPtr != -1, 1003 ); } /*-------------------------------------------------------------*/ /*--- end blocksort.c ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/bzlib/CHANGES0000644000175000017500000002654512635262326011757 00000000000000 ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ 0.9.0 ~~~~~ First version. 0.9.0a ~~~~~~ Removed 'ranlib' from Makefile, since most modern Unix-es don't need it, or even know about it. 0.9.0b ~~~~~~ Fixed a problem with error reporting in bzip2.c. This does not effect the library in any way. Problem is: versions 0.9.0 and 0.9.0a (of the program proper) compress and decompress correctly, but give misleading error messages (internal panics) when an I/O error occurs, instead of reporting the problem correctly. This shouldn't give any data loss (as far as I can see), but is confusing. Made the inline declarations disappear for non-GCC compilers. 0.9.0c ~~~~~~ Fixed some problems in the library pertaining to some boundary cases. This makes the library behave more correctly in those situations. The fixes apply only to features (calls and parameters) not used by bzip2.c, so the non-fixedness of them in previous versions has no effect on reliability of bzip2.c. In bzlib.c: * made zero-length BZ_FLUSH work correctly in bzCompress(). * fixed bzWrite/bzRead to ignore zero-length requests. * fixed bzread to correctly handle read requests after EOF. * wrong parameter order in call to bzDecompressInit in bzBuffToBuffDecompress. Fixed. In compress.c: * changed setting of nGroups in sendMTFValues() so as to do a bit better on small files. This _does_ effect bzip2.c. 0.9.5a ~~~~~~ Major change: add a fallback sorting algorithm (blocksort.c) to give reasonable behaviour even for very repetitive inputs. Nuked --repetitive-best and --repetitive-fast since they are no longer useful. Minor changes: mostly a whole bunch of small changes/ bugfixes in the driver (bzip2.c). Changes pertaining to the user interface are: allow decompression of symlink'd files to stdout decompress/test files even without .bz2 extension give more accurate error messages for I/O errors when compressing/decompressing to stdout, don't catch control-C read flags from BZIP2 and BZIP environment variables decline to break hard links to a file unless forced with -f allow -c flag even with no filenames preserve file ownerships as far as possible make -s -1 give the expected block size (100k) add a flag -q --quiet to suppress nonessential warnings stop decoding flags after --, so files beginning in - can be handled resolved inconsistent naming: bzcat or bz2cat ? bzip2 --help now returns 0 Programming-level changes are: fixed syntax error in GET_LL4 for Borland C++ 5.02 let bzBuffToBuffDecompress return BZ_DATA_ERROR{_MAGIC} fix overshoot of mode-string end in bzopen_or_bzdopen wrapped bzlib.h in #ifdef __cplusplus ... extern "C" { ... } close file handles under all error conditions added minor mods so it compiles with DJGPP out of the box fixed Makefile so it doesn't give problems with BSD make fix uninitialised memory reads in dlltest.c 0.9.5b ~~~~~~ Open stdin/stdout in binary mode for DJGPP. 0.9.5c ~~~~~~ Changed BZ_N_OVERSHOOT to be ... + 2 instead of ... + 1. The + 1 version could cause the sorted order to be wrong in some extremely obscure cases. Also changed setting of quadrant in blocksort.c. 0.9.5d ~~~~~~ The only functional change is to make bzlibVersion() in the library return the correct string. This has no effect whatsoever on the functioning of the bzip2 program or library. Added a couple of casts so the library compiles without warnings at level 3 in MS Visual Studio 6.0. Included a Y2K statement in the file Y2K_INFO. All other changes are minor documentation changes. 1.0 ~~~ Several minor bugfixes and enhancements: * Large file support. The library uses 64-bit counters to count the volume of data passing through it. bzip2.c is now compiled with -D_FILE_OFFSET_BITS=64 to get large file support from the C library. -v correctly prints out file sizes greater than 4 gigabytes. All these changes have been made without assuming a 64-bit platform or a C compiler which supports 64-bit ints, so, except for the C library aspect, they are fully portable. * Decompression robustness. The library/program should be robust to any corruption of compressed data, detecting and handling _all_ corruption, instead of merely relying on the CRCs. What this means is that the program should never crash, given corrupted data, and the library should always return BZ_DATA_ERROR. * Fixed an obscure race-condition bug only ever observed on Solaris, in which, if you were very unlucky and issued control-C at exactly the wrong time, both input and output files would be deleted. * Don't run out of file handles on test/decompression when large numbers of files have invalid magic numbers. * Avoid library namespace pollution. Prefix all exported symbols with BZ2_. * Minor sorting enhancements from my DCC2000 paper. * Advance the version number to 1.0, so as to counteract the (false-in-this-case) impression some people have that programs with version numbers less than 1.0 are in some way, experimental, pre-release versions. * Create an initial Makefile-libbz2_so to build a shared library. Yes, I know I should really use libtool et al ... * Make the program exit with 2 instead of 0 when decompression fails due to a bad magic number (ie, an invalid bzip2 header). Also exit with 1 (as the manual claims :-) whenever a diagnostic message would have been printed AND the corresponding operation is aborted, for example bzip2: Output file xx already exists. When a diagnostic message is printed but the operation is not aborted, for example bzip2: Can't guess original name for wurble -- using wurble.out then the exit value 0 is returned, unless some other problem is also detected. I think it corresponds more closely to what the manual claims now. 1.0.1 ~~~~~ * Modified dlltest.c so it uses the new BZ2_ naming scheme. * Modified makefile-msc to fix minor build probs on Win2k. * Updated README.COMPILATION.PROBLEMS. There are no functionality changes or bug fixes relative to version 1.0.0. This is just a documentation update + a fix for minor Win32 build problems. For almost everyone, upgrading from 1.0.0 to 1.0.1 is utterly pointless. Don't bother. 1.0.2 ~~~~~ A bug fix release, addressing various minor issues which have appeared in the 18 or so months since 1.0.1 was released. Most of the fixes are to do with file-handling or documentation bugs. To the best of my knowledge, there have been no data-loss-causing bugs reported in the compression/decompression engine of 1.0.0 or 1.0.1. Note that this release does not improve the rather crude build system for Unix platforms. The general plan here is to autoconfiscate/ libtoolise 1.0.2 soon after release, and release the result as 1.1.0 or perhaps 1.2.0. That, however, is still just a plan at this point. Here are the changes in 1.0.2. Bug-reporters and/or patch-senders in parentheses. * Fix an infinite segfault loop in 1.0.1 when a directory is encountered in -f (force) mode. (Trond Eivind Glomsrod, Nicholas Nethercote, Volker Schmidt) * Avoid double fclose() of output file on certain I/O error paths. (Solar Designer) * Don't fail with internal error 1007 when fed a long stream (> 48MB) of byte 251. Also print useful message suggesting that 1007s may be caused by bad memory. (noticed by Juan Pedro Vallejo, fixed by me) * Fix uninitialised variable silly bug in demo prog dlltest.c. (Jorj Bauer) * Remove 512-MB limitation on recovered file size for bzip2recover on selected platforms which support 64-bit ints. At the moment all GCC supported platforms, and Win32. (me, Alson van der Meulen) * Hard-code header byte values, to give correct operation on platforms using EBCDIC as their native character set (IBM's OS/390). (Leland Lucius) * Copy file access times correctly. (Marty Leisner) * Add distclean and check targets to Makefile. (Michael Carmack) * Parameterise use of ar and ranlib in Makefile. Also add $(LDFLAGS). (Rich Ireland, Bo Thorsen) * Pass -p (create parent dirs as needed) to mkdir during make install. (Jeremy Fusco) * Dereference symlinks when copying file permissions in -f mode. (Volker Schmidt) * Majorly simplify implementation of uInt64_qrm10. (Bo Lindbergh) * Check the input file still exists before deleting the output one, when aborting in cleanUpAndFail(). (Joerg Prante, Robert Linden, Matthias Krings) Also a bunch of patches courtesy of Philippe Troin, the Debian maintainer of bzip2: * Wrapper scripts (with manpages): bzdiff, bzgrep, bzmore. * Spelling changes and minor enhancements in bzip2.1. * Avoid race condition between creating the output file and setting its interim permissions safely, by using fopen_output_safely(). No changes to bzip2recover since there is no issue with file permissions there. * do not print senseless report with -v when compressing an empty file. * bzcat -f works on non-bzip2 files. * do not try to escape shell meta-characters on unix (the shell takes care of these). * added --fast and --best aliases for -1 -9 for gzip compatibility. 1.0.3 (15 Feb 05) ~~~~~~~~~~~~~~~~~ Fixes some minor bugs since the last version, 1.0.2. * Further robustification against corrupted compressed data. There are currently no known bitstreams which can cause the decompressor to crash, loop or access memory which does not belong to it. If you are using bzip2 or the library to decompress bitstreams from untrusted sources, an upgrade to 1.0.3 is recommended. This fixes CAN-2005-1260. * The documentation has been converted to XML, from which html and pdf can be derived. * Various minor bugs in the documentation have been fixed. * Fixes for various compilation warnings with newer versions of gcc, and on 64-bit platforms. * The BZ_NO_STDIO cpp symbol was not properly observed in 1.0.2. This has been fixed. 1.0.4 (20 Dec 06) ~~~~~~~~~~~~~~~~~ Fixes some minor bugs since the last version, 1.0.3. * Fix file permissions race problem (CAN-2005-0953). * Avoid possible segfault in BZ2_bzclose. From Coverity's NetBSD scan. * 'const'/prototype cleanups in the C code. * Change default install location to /usr/local, and handle multiple 'make install's without error. * Sanitise file names more carefully in bzgrep. Fixes CAN-2005-0758 to the extent that applies to bzgrep. * Use 'mktemp' rather than 'tempfile' in bzdiff. * Tighten up a couple of assertions in blocksort.c following automated analysis. * Fix minor doc/comment bugs. 1.0.5 (10 Dec 07) ~~~~~~~~~~~~~~~~~ Security fix only. Fixes CERT-FI 20469 as it applies to bzip2. 1.0.6 (6 Sept 10) ~~~~~~~~~~~~~~~~~ * Security fix for CVE-2010-0405. This was reported by Mikolaj Izdebski. * Make the documentation build on Ubuntu 10.04 1.0.6 (2010-09-23) ------------------ * Stripped down by g10 Code GmbH. Tarball renamed to bzip2-1.0.6-g10.tar.gz 1.0.6 (2012-01-13) ------------------ * New Makefile and included into the GnuPG 1.4 source. gnupg-1.4.20/bzlib/bzlib_private.h0000644000175000017500000003165712635262326013771 00000000000000 /*-------------------------------------------------------------*/ /*--- Private header file for the library. ---*/ /*--- bzlib_private.h ---*/ /*-------------------------------------------------------------*/ /* ------------------------------------------------------------------ This file is part of bzip2/libbzip2, a program and library for lossless, block-sorting data compression. bzip2/libbzip2 version 1.0.6 of 6 September 2010 Copyright (C) 1996-2010 Julian Seward Please read the WARNING, DISCLAIMER and PATENTS sections in the README file. This program is released under the terms of the license contained in the file LICENSE. ------------------------------------------------------------------ */ #ifndef _BZLIB_PRIVATE_H #define _BZLIB_PRIVATE_H #include #ifndef BZ_NO_STDIO #include #include #include #endif #include "bzlib.h" /*-- General stuff. --*/ #define BZ_VERSION "1.0.6, 6-Sept-2010" typedef char Char; typedef unsigned char Bool; typedef unsigned char UChar; typedef int Int32; typedef unsigned int UInt32; typedef short Int16; typedef unsigned short UInt16; #define True ((Bool)1) #define False ((Bool)0) #ifndef __GNUC__ #define __inline__ /* */ #endif #ifndef BZ_NO_STDIO extern void BZ2_bz__AssertH__fail ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) BZ2_bz__AssertH__fail ( errcode ); } #if BZ_DEBUG #define AssertD(cond,msg) \ { if (!(cond)) { \ fprintf ( stderr, \ "\n\nlibbzip2(debug build): internal error\n\t%s\n", msg );\ exit(1); \ }} #else #define AssertD(cond,msg) /* */ #endif #define VPrintf0(zf) \ fprintf(stderr,zf) #define VPrintf1(zf,za1) \ fprintf(stderr,zf,za1) #define VPrintf2(zf,za1,za2) \ fprintf(stderr,zf,za1,za2) #define VPrintf3(zf,za1,za2,za3) \ fprintf(stderr,zf,za1,za2,za3) #define VPrintf4(zf,za1,za2,za3,za4) \ fprintf(stderr,zf,za1,za2,za3,za4) #define VPrintf5(zf,za1,za2,za3,za4,za5) \ fprintf(stderr,zf,za1,za2,za3,za4,za5) #else extern void bz_internal_error ( int errcode ); #define AssertH(cond,errcode) \ { if (!(cond)) bz_internal_error ( errcode ); } #define AssertD(cond,msg) do { } while (0) #define VPrintf0(zf) do { } while (0) #define VPrintf1(zf,za1) do { } while (0) #define VPrintf2(zf,za1,za2) do { } while (0) #define VPrintf3(zf,za1,za2,za3) do { } while (0) #define VPrintf4(zf,za1,za2,za3,za4) do { } while (0) #define VPrintf5(zf,za1,za2,za3,za4,za5) do { } while (0) #endif #define BZALLOC(nnn) (strm->bzalloc)(strm->opaque,(nnn),1) #define BZFREE(ppp) (strm->bzfree)(strm->opaque,(ppp)) /*-- Header bytes. --*/ #define BZ_HDR_B 0x42 /* 'B' */ #define BZ_HDR_Z 0x5a /* 'Z' */ #define BZ_HDR_h 0x68 /* 'h' */ #define BZ_HDR_0 0x30 /* '0' */ /*-- Constants for the back end. --*/ #define BZ_MAX_ALPHA_SIZE 258 #define BZ_MAX_CODE_LEN 23 #define BZ_RUNA 0 #define BZ_RUNB 1 #define BZ_N_GROUPS 6 #define BZ_G_SIZE 50 #define BZ_N_ITERS 4 #define BZ_MAX_SELECTORS (2 + (900000 / BZ_G_SIZE)) /*-- Stuff for randomising repetitive blocks. --*/ extern Int32 BZ2_rNums[512]; #define BZ_RAND_DECLS \ Int32 rNToGo; \ Int32 rTPos \ #define BZ_RAND_INIT_MASK \ s->rNToGo = 0; \ s->rTPos = 0 \ #define BZ_RAND_MASK ((s->rNToGo == 1) ? 1 : 0) #define BZ_RAND_UPD_MASK \ if (s->rNToGo == 0) { \ s->rNToGo = BZ2_rNums[s->rTPos]; \ s->rTPos++; \ if (s->rTPos == 512) s->rTPos = 0; \ } \ s->rNToGo--; /*-- Stuff for doing CRCs. --*/ extern UInt32 BZ2_crc32Table[256]; #define BZ_INITIALISE_CRC(crcVar) \ { \ crcVar = 0xffffffffL; \ } #define BZ_FINALISE_CRC(crcVar) \ { \ crcVar = ~(crcVar); \ } #define BZ_UPDATE_CRC(crcVar,cha) \ { \ crcVar = (crcVar << 8) ^ \ BZ2_crc32Table[(crcVar >> 24) ^ \ ((UChar)cha)]; \ } /*-- States and modes for compression. --*/ #define BZ_M_IDLE 1 #define BZ_M_RUNNING 2 #define BZ_M_FLUSHING 3 #define BZ_M_FINISHING 4 #define BZ_S_OUTPUT 1 #define BZ_S_INPUT 2 #define BZ_N_RADIX 2 #define BZ_N_QSORT 12 #define BZ_N_SHELL 18 #define BZ_N_OVERSHOOT (BZ_N_RADIX + BZ_N_QSORT + BZ_N_SHELL + 2) /*-- Structure holding all the compression-side stuff. --*/ typedef struct { /* pointer back to the struct bz_stream */ bz_stream* strm; /* mode this stream is in, and whether inputting */ /* or outputting data */ Int32 mode; Int32 state; /* remembers avail_in when flush/finish requested */ UInt32 avail_in_expect; /* for doing the block sorting */ UInt32* arr1; UInt32* arr2; UInt32* ftab; Int32 origPtr; /* aliases for arr1 and arr2 */ UInt32* ptr; UChar* block; UInt16* mtfv; UChar* zbits; /* for deciding when to use the fallback sorting algorithm */ Int32 workFactor; /* run-length-encoding of the input */ UInt32 state_in_ch; Int32 state_in_len; BZ_RAND_DECLS; /* input and output limits and current posns */ Int32 nblock; Int32 nblockMAX; Int32 numZ; Int32 state_out_pos; /* map of bytes used in block */ Int32 nInUse; Bool inUse[256]; UChar unseqToSeq[256]; /* the buffer for bit stream creation */ UInt32 bsBuff; Int32 bsLive; /* block and combined CRCs */ UInt32 blockCRC; UInt32 combinedCRC; /* misc administratium */ Int32 verbosity; Int32 blockNo; Int32 blockSize100k; /* stuff for coding the MTF values */ Int32 nMTF; Int32 mtfFreq [BZ_MAX_ALPHA_SIZE]; UChar selector [BZ_MAX_SELECTORS]; UChar selectorMtf[BZ_MAX_SELECTORS]; UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 code [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 rfreq [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; /* second dimension: only 3 needed; 4 makes index calculations faster */ UInt32 len_pack[BZ_MAX_ALPHA_SIZE][4]; } EState; /*-- externs for compression. --*/ extern void BZ2_blockSort ( EState* ); extern void BZ2_compressBlock ( EState*, Bool ); extern void BZ2_bsInitWrite ( EState* ); extern void BZ2_hbAssignCodes ( Int32*, UChar*, Int32, Int32, Int32 ); extern void BZ2_hbMakeCodeLengths ( UChar*, Int32*, Int32, Int32 ); /*-- states for decompression. --*/ #define BZ_X_IDLE 1 #define BZ_X_OUTPUT 2 #define BZ_X_MAGIC_1 10 #define BZ_X_MAGIC_2 11 #define BZ_X_MAGIC_3 12 #define BZ_X_MAGIC_4 13 #define BZ_X_BLKHDR_1 14 #define BZ_X_BLKHDR_2 15 #define BZ_X_BLKHDR_3 16 #define BZ_X_BLKHDR_4 17 #define BZ_X_BLKHDR_5 18 #define BZ_X_BLKHDR_6 19 #define BZ_X_BCRC_1 20 #define BZ_X_BCRC_2 21 #define BZ_X_BCRC_3 22 #define BZ_X_BCRC_4 23 #define BZ_X_RANDBIT 24 #define BZ_X_ORIGPTR_1 25 #define BZ_X_ORIGPTR_2 26 #define BZ_X_ORIGPTR_3 27 #define BZ_X_MAPPING_1 28 #define BZ_X_MAPPING_2 29 #define BZ_X_SELECTOR_1 30 #define BZ_X_SELECTOR_2 31 #define BZ_X_SELECTOR_3 32 #define BZ_X_CODING_1 33 #define BZ_X_CODING_2 34 #define BZ_X_CODING_3 35 #define BZ_X_MTF_1 36 #define BZ_X_MTF_2 37 #define BZ_X_MTF_3 38 #define BZ_X_MTF_4 39 #define BZ_X_MTF_5 40 #define BZ_X_MTF_6 41 #define BZ_X_ENDHDR_2 42 #define BZ_X_ENDHDR_3 43 #define BZ_X_ENDHDR_4 44 #define BZ_X_ENDHDR_5 45 #define BZ_X_ENDHDR_6 46 #define BZ_X_CCRC_1 47 #define BZ_X_CCRC_2 48 #define BZ_X_CCRC_3 49 #define BZ_X_CCRC_4 50 /*-- Constants for the fast MTF decoder. --*/ #define MTFA_SIZE 4096 #define MTFL_SIZE 16 /*-- Structure holding all the decompression-side stuff. --*/ typedef struct { /* pointer back to the struct bz_stream */ bz_stream* strm; /* state indicator for this stream */ Int32 state; /* for doing the final run-length decoding */ UChar state_out_ch; Int32 state_out_len; Bool blockRandomised; BZ_RAND_DECLS; /* the buffer for bit stream reading */ UInt32 bsBuff; Int32 bsLive; /* misc administratium */ Int32 blockSize100k; Bool smallDecompress; Int32 currBlockNo; Int32 verbosity; /* for undoing the Burrows-Wheeler transform */ Int32 origPtr; UInt32 tPos; Int32 k0; Int32 unzftab[256]; Int32 nblock_used; Int32 cftab[257]; Int32 cftabCopy[257]; /* for undoing the Burrows-Wheeler transform (FAST) */ UInt32 *tt; /* for undoing the Burrows-Wheeler transform (SMALL) */ UInt16 *ll16; UChar *ll4; /* stored and calculated CRCs */ UInt32 storedBlockCRC; UInt32 storedCombinedCRC; UInt32 calculatedBlockCRC; UInt32 calculatedCombinedCRC; /* map of bytes used in block */ Int32 nInUse; Bool inUse[256]; Bool inUse16[16]; UChar seqToUnseq[256]; /* for decoding the MTF values */ UChar mtfa [MTFA_SIZE]; Int32 mtfbase[256 / MTFL_SIZE]; UChar selector [BZ_MAX_SELECTORS]; UChar selectorMtf[BZ_MAX_SELECTORS]; UChar len [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 limit [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 base [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 perm [BZ_N_GROUPS][BZ_MAX_ALPHA_SIZE]; Int32 minLens[BZ_N_GROUPS]; /* save area for scalars in the main decompress code */ Int32 save_i; Int32 save_j; Int32 save_t; Int32 save_alphaSize; Int32 save_nGroups; Int32 save_nSelectors; Int32 save_EOB; Int32 save_groupNo; Int32 save_groupPos; Int32 save_nextSym; Int32 save_nblockMAX; Int32 save_nblock; Int32 save_es; Int32 save_N; Int32 save_curr; Int32 save_zt; Int32 save_zn; Int32 save_zvec; Int32 save_zj; Int32 save_gSel; Int32 save_gMinlen; Int32* save_gLimit; Int32* save_gBase; Int32* save_gPerm; } DState; /*-- Macros for decompression. --*/ #define BZ_GET_FAST(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ s->tPos = s->tt[s->tPos]; \ cccc = (UChar)(s->tPos & 0xff); \ s->tPos >>= 8; #define BZ_GET_FAST_C(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (c_tPos >= (UInt32)100000 * (UInt32)ro_blockSize100k) return True; \ c_tPos = c_tt[c_tPos]; \ cccc = (UChar)(c_tPos & 0xff); \ c_tPos >>= 8; #define SET_LL4(i,n) \ { if (((i) & 0x1) == 0) \ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0xf0) | (n); else \ s->ll4[(i) >> 1] = (s->ll4[(i) >> 1] & 0x0f) | ((n) << 4); \ } #define GET_LL4(i) \ ((((UInt32)(s->ll4[(i) >> 1])) >> (((i) << 2) & 0x4)) & 0xF) #define SET_LL(i,n) \ { s->ll16[i] = (UInt16)(n & 0x0000ffff); \ SET_LL4(i, n >> 16); \ } #define GET_LL(i) \ (((UInt32)s->ll16[i]) | (GET_LL4(i) << 16)) #define BZ_GET_SMALL(cccc) \ /* c_tPos is unsigned, hence test < 0 is pointless. */ \ if (s->tPos >= (UInt32)100000 * (UInt32)s->blockSize100k) return True; \ cccc = BZ2_indexIntoF ( s->tPos, s->cftab ); \ s->tPos = GET_LL(s->tPos); /*-- externs for decompression. --*/ extern Int32 BZ2_indexIntoF ( Int32, Int32* ); extern Int32 BZ2_decompress ( DState* ); extern void BZ2_hbCreateDecodeTables ( Int32*, Int32*, Int32*, UChar*, Int32, Int32, Int32 ); #endif /*-- BZ_NO_STDIO seems to make NULL disappear on some platforms. --*/ #ifdef BZ_NO_STDIO #ifndef NULL #define NULL 0 #endif #endif /*-------------------------------------------------------------*/ /*--- end bzlib_private.h ---*/ /*-------------------------------------------------------------*/ gnupg-1.4.20/util/0000755000175000017500000000000012635457216010707 500000000000000gnupg-1.4.20/util/ttyio.c0000644000175000017500000003430612635262326012145 00000000000000/* ttyio.c - tty i/O functions * Copyright (C) 1998, 1999, 2000, 2001, 2002, * 2004 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 3 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, see . */ #include #include #include #include #include #include #ifdef HAVE_TCGETATTR #include #else #ifdef HAVE_TERMIO_H /* simulate termios with termio */ #include #define termios termio #define tcsetattr ioctl #define TCSAFLUSH TCSETAF #define tcgetattr(A,B) ioctl(A,TCGETA,B) #define HAVE_TCGETATTR #endif #endif #ifdef _WIN32 /* use the odd Win32 functions */ #include #ifdef HAVE_TCGETATTR #error windows and termios #endif #endif #include #include #ifdef HAVE_LIBREADLINE #include #include #endif #ifdef __VMS # include "vms.h" #endif /* __VMS */ #include "util.h" #include "memory.h" #include "ttyio.h" #define CONTROL_D ('D' - 'A' + 1) #ifdef _WIN32 /* use the odd Win32 functions */ static struct { HANDLE in, out; } con; #define DEF_INPMODE (ENABLE_LINE_INPUT|ENABLE_ECHO_INPUT \ |ENABLE_PROCESSED_INPUT ) #define HID_INPMODE (ENABLE_LINE_INPUT|ENABLE_PROCESSED_INPUT ) #define DEF_OUTMODE (ENABLE_WRAP_AT_EOL_OUTPUT|ENABLE_PROCESSED_OUTPUT) #else /* yeah, we have a real OS */ static FILE *ttyfp = NULL; #endif static int initialized; static int last_prompt_len; static int batchmode; static int no_terminal; #ifdef HAVE_TCGETATTR static struct termios termsave; static int restore_termios; #endif /* This is a wrapper around ttyname so that we can use it even when the standard streams are redirected. It figures the name out the first time and returns it in a statically allocated buffer. */ const char * tty_get_ttyname (void) { static char *name; /* On a GNU system ctermid() always return /dev/tty, so this does not make much sense - however if it is ever changed we do the Right Thing now. */ #ifdef HAVE_CTERMID static int got_name; if (!got_name) { const char *s; s = ctermid (NULL); if (s) name = strdup (s); got_name = 1; } #endif /* Assume the standard tty on memory error or when there is no ctermid. */ return name? name : "/dev/tty"; } #ifdef HAVE_TCGETATTR static void cleanup(void) { if( restore_termios ) { restore_termios = 0; /* do it prios in case it is interrupted again */ if( tcsetattr(fileno(ttyfp), TCSAFLUSH, &termsave) ) log_error("tcsetattr() failed: %s\n", strerror(errno) ); } } #endif void tty_cleanup_after_signal (void) { #ifdef HAVE_TCGETATTR cleanup (); #endif } #ifdef __VMS /* 2006-08-10 SMS. Interface function needed for VMS (unless someone wishes to make "ttyfp" global). See g10_log_print_prefix() in util/logger.c. */ FILE * ttyfp_is (void) { return ttyfp; } #endif /* def __VMS */ #ifndef __VMS static #endif void init_ttyfp(void) { if( initialized ) return; #if defined(_WIN32) { SECURITY_ATTRIBUTES sa; memset(&sa, 0, sizeof(sa)); sa.nLength = sizeof(sa); sa.bInheritHandle = TRUE; con.out = CreateFileA( "CONOUT$", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, OPEN_EXISTING, 0, 0 ); if( con.out == INVALID_HANDLE_VALUE ) log_fatal ("open(CONOUT$) failed: %s", w32_strerror (0)); memset(&sa, 0, sizeof(sa)); sa.nLength = sizeof(sa); sa.bInheritHandle = TRUE; con.in = CreateFileA( "CONIN$", GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, OPEN_EXISTING, 0, 0 ); if (con.in == INVALID_HANDLE_VALUE) log_fatal ("open(CONIN$) failed: %s", w32_strerror (0)); } SetConsoleMode(con.in, DEF_INPMODE ); SetConsoleMode(con.out, DEF_OUTMODE ); #elif defined(__EMX__) ttyfp = stdout; /* Fixme: replace by the real functions: see wklib */ #else ttyfp = batchmode? stderr : fopen( tty_get_ttyname (), "r+"); if( !ttyfp ) { ttyfp = stderr; /* Use stderr as fallback for log_error. */ initialized = 1; /* Make sure log_error won't try to init the tty again. */ log_error("cannot open tty `%s': %s\n", tty_get_ttyname (), strerror(errno) ); exit(2); } #ifdef HAVE_LIBREADLINE rl_catch_signals = 0; rl_instream = rl_outstream = ttyfp; rl_inhibit_completion = 1; #endif #endif #ifdef HAVE_TCGETATTR atexit( cleanup ); #endif initialized = 1; } #ifdef HAVE_LIBREADLINE void tty_enable_completion(rl_completion_func_t *completer) { if( no_terminal ) return; if( !initialized ) init_ttyfp(); rl_attempted_completion_function=completer; rl_inhibit_completion=0; } void tty_disable_completion(void) { if( no_terminal ) return; if( !initialized ) init_ttyfp(); rl_inhibit_completion=1; } #endif /*HAVE_LIBREADLINE*/ int tty_batchmode( int onoff ) { int old = batchmode; if( onoff != -1 ) batchmode = onoff; return old; } int tty_no_terminal(int onoff) { int old = no_terminal; no_terminal = onoff ? 1 : 0; return old; } void tty_printf( const char *fmt, ... ) { va_list arg_ptr; if (no_terminal) return; if( !initialized ) init_ttyfp(); va_start( arg_ptr, fmt ) ; #ifdef _WIN32 { char *buf; int n; DWORD nwritten; buf = xtryvasprintf(fmt, arg_ptr); if (!buf) log_bug("xtryvasprintf() failed\n"); n = strlen (buf); if (!WriteConsoleA (con.out, buf, n, &nwritten, NULL)) log_fatal ("WriteConsole failed: %s", w32_strerror (0)); if( n != nwritten ) log_fatal ("WriteConsole failed: %d != %d\n", n, (int)nwritten ); last_prompt_len += n; xfree (buf); } #else last_prompt_len += vfprintf(ttyfp,fmt,arg_ptr) ; fflush(ttyfp); #endif va_end(arg_ptr); } /* Same as tty_printf but if FP is not NULL, behave like the standard fprintf. */ void tty_fprintf (FILE *fp, const char *fmt, ... ) { va_list arg_ptr; if (fp) { va_start (arg_ptr, fmt) ; vfprintf (fp, fmt, arg_ptr ); va_end (arg_ptr); return; } if (no_terminal) return; if( !initialized ) init_ttyfp(); va_start( arg_ptr, fmt ) ; #ifdef _WIN32 { char *buf; int n; DWORD nwritten; buf = xtryvasprintf (fmt, arg_ptr); if (!buf) log_bug ("xtryvasprintf() failed\n"); n = strlen (buf); if (!WriteConsoleA (con.out, buf, n, &nwritten, NULL)) log_fatal ("WriteConsole failed: %s", w32_strerror (0)); if (n != nwritten) log_fatal ("WriteConsole failed: %d != %d\n", n, (int)nwritten); last_prompt_len += n; xfree (buf); } #else last_prompt_len += vfprintf(ttyfp,fmt,arg_ptr) ; fflush(ttyfp); #endif va_end(arg_ptr); } /**************** * Print a string, but filter all control characters out. */ void tty_print_string( const byte *p, size_t n ) { if (no_terminal) return; if( !initialized ) init_ttyfp(); #ifdef _WIN32 /* not so effective, change it if you want */ for( ; n; n--, p++ ) if( iscntrl( *p ) ) { if( *p == '\n' ) tty_printf("\\n"); else if( !*p ) tty_printf("\\0"); else tty_printf("\\x%02x", *p); } else tty_printf("%c", *p); #else for( ; n; n--, p++ ) if( iscntrl( *p ) ) { putc('\\', ttyfp); if( *p == '\n' ) putc('n', ttyfp); else if( !*p ) putc('0', ttyfp); else fprintf(ttyfp, "x%02x", *p ); } else putc(*p, ttyfp); #endif } void tty_print_utf8_string2 (const byte *p, size_t n, size_t max_n ) { size_t i; char *buf; if (no_terminal) return; /* we can handle plain ascii simpler, so check for it first */ for(i=0; i < n; i++ ) { if( p[i] & 0x80 ) break; } if( i < n ) { buf = utf8_to_native( p, n, 0 ); if( max_n && (strlen( buf ) > max_n )) { buf[max_n] = 0; } /*(utf8 conversion already does the control character quoting)*/ tty_printf("%s", buf ); xfree( buf ); } else { if( max_n && (n > max_n) ) { n = max_n; } tty_print_string( p, n ); } } void tty_print_utf8_string( const byte *p, size_t n ) { tty_print_utf8_string2( p, n, 0 ); } static char * do_get( const char *prompt, int hidden ) { char *buf; #ifndef __riscos__ byte cbuf[1]; #endif int c, n, i; if( batchmode ) { log_error("Sorry, we are in batchmode - can't get input\n"); exit(2); } if (no_terminal) { log_error("Sorry, no terminal at all requested - can't get input\n"); exit(2); } if( !initialized ) init_ttyfp(); last_prompt_len = 0; n = 50; buf = hidden ? xmalloc_secure(n) : xmalloc(n); i = 0; #ifdef _WIN32 /* windoze version */ if( hidden ) SetConsoleMode(con.in, HID_INPMODE ); tty_printf( "%s", prompt ); for(;;) { DWORD nread; if (!ReadConsoleA (con.in, cbuf, 1, &nread, NULL)) log_fatal ("ReadConsole failed: %s", w32_strerror (0)); if( !nread ) continue; if( *cbuf == '\n' ) break; if( !hidden ) last_prompt_len++; c = *cbuf; if( c == '\t' ) c = ' '; else if( c > 0xa0 ) ; /* we don't allow 0xa0, as this is a protected blank which may * confuse the user */ else if( iscntrl(c) ) continue; if( !(i < n-1) ) { n += 50; buf = xrealloc( buf, n ); } buf[i++] = c; } if( hidden ) SetConsoleMode(con.in, DEF_INPMODE ); #elif defined(__riscos__) tty_printf( "%s", prompt ); do { c = riscos_getchar(); if (c == 0xa || c == 0xd) { /* Return || Enter */ c = (int) '\n'; } else if (c == 0x8 || c == 0x7f) { /* Backspace || Delete */ if (i>0) { i--; if (!hidden) { last_prompt_len--; fputc(8, ttyfp); fputc(32, ttyfp); fputc(8, ttyfp); fflush(ttyfp); } } else { fputc(7, ttyfp); fflush(ttyfp); } continue; } else if (c == (int) '\t') { /* Tab */ c = ' '; } else if (c > 0xa0) { ; /* we don't allow 0xa0, as this is a protected blank which may * confuse the user */ } else if (iscntrl(c)) { continue; } if(!(i < n-1)) { n += 50; buf = xrealloc(buf, n); } buf[i++] = c; if (!hidden) { last_prompt_len++; fputc(c, ttyfp); fflush(ttyfp); } } while (c != '\n'); i = (i>0) ? i-1 : 0; #else /* unix version */ if( hidden ) { #ifdef HAVE_TCGETATTR struct termios term; if( tcgetattr(fileno(ttyfp), &termsave) ) log_fatal("tcgetattr() failed: %s\n", strerror(errno) ); restore_termios = 1; term = termsave; term.c_lflag &= ~(ECHO | ECHOE | ECHOK | ECHONL); if( tcsetattr( fileno(ttyfp), TCSAFLUSH, &term ) ) log_fatal("tcsetattr() failed: %s\n", strerror(errno) ); #endif # ifdef __VMS /* Disable terminal echo. */ if (vms_set_term_echo (0)) log_fatal ("error disabling terminal echo: %s\n", strerror (errno)); # endif /* __VMS */ } tty_printf( "%s", prompt ); /* fixme: How can we avoid that the \n is echoed w/o disabling * canonical mode - w/o this kill_prompt can't work */ while( read(fileno(ttyfp), cbuf, 1) == 1 && *cbuf != '\n' ) { if( !hidden ) last_prompt_len++; c = *cbuf; if( c == CONTROL_D ) log_info("control d found\n"); if( c == '\t' ) c = ' '; else if( c > 0xa0 ) ; /* we don't allow 0xa0, as this is a protected blank which may * confuse the user */ else if( iscntrl(c) ) continue; if( !(i < n-1) ) { n += 50; buf = xrealloc( buf, n ); } buf[i++] = c; } if( *cbuf != '\n' ) { buf[0] = CONTROL_D; i = 1; } if( hidden ) { # ifdef HAVE_TCGETATTR if( tcsetattr(fileno(ttyfp), TCSAFLUSH, &termsave) ) log_error("tcsetattr() failed: %s\n", strerror(errno) ); restore_termios = 0; # endif # ifdef __VMS /* Restore (most likely enable) terminal echo. */ if (vms_set_term_echo( -1)) log_fatal ("error enabling terminal echo: %s\n", strerror (errno)); # endif /* __VMS */ } #endif /* end unix version */ buf[i] = 0; return buf; } char * tty_get( const char *prompt ) { #ifdef HAVE_LIBREADLINE if (!batchmode && !no_terminal) { char *line; char *buf; if( !initialized ) init_ttyfp(); last_prompt_len = 0; line = readline (prompt?prompt:""); /* We need to copy it to memory controlled by our malloc implementations; further we need to convert an EOF to our convention. */ buf = xmalloc(line? strlen(line)+1:2); if (line) { strcpy (buf, line); trim_spaces (buf); if (strlen (buf) > 2 ) add_history (line); /* Note that we test BUF but add LINE. */ free (line); } else { buf[0] = CONTROL_D; buf[1] = 0; } return buf; } else #endif /* HAVE_LIBREADLINE */ return do_get( prompt, 0 ); } char * tty_get_hidden( const char *prompt ) { return do_get( prompt, 1 ); } void tty_kill_prompt() { if ( no_terminal ) return; if( !initialized ) init_ttyfp(); if( batchmode ) last_prompt_len = 0; if( !last_prompt_len ) return; #ifdef _WIN32 tty_printf("\r%*s\r", last_prompt_len, ""); #else { int i; putc('\r', ttyfp); for(i=0; i < last_prompt_len; i ++ ) putc(' ', ttyfp); putc('\r', ttyfp); fflush(ttyfp); } #endif last_prompt_len = 0; } int tty_get_answer_is_yes( const char *prompt ) { int yes; char *p = tty_get( prompt ); tty_kill_prompt(); yes = answer_is_yes(p); xfree(p); return yes; } gnupg-1.4.20/util/iobuf.c0000644000175000017500000016401012635262326012075 00000000000000/* iobuf.c - file handling * Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2008, * 2009 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 3 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, see . */ #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_DOSISH_SYSTEM #include #endif #ifdef __riscos__ #include #include #endif /* __riscos__ */ #include "memory.h" #include "util.h" #include "dynload.h" #include "iobuf.h" #ifdef __VMS # include "vms.h" # define open open_vms #endif /* def __VMS */ /* The size of the internal buffers. NOTE: If you change this value you MUST also adjust the regression test "armored_key_8192" and "nopad_armored_msg" in armor.test! */ #define IOBUF_BUFFER_SIZE 8192 #undef FILE_FILTER_USES_STDIO /* To avoid a potential DoS with compression packets we better limit the number of filters in a chain. */ #define MAX_NESTING_FILTER 64 #ifdef HAVE_DOSISH_SYSTEM #define USE_SETMODE 1 #endif #ifdef FILE_FILTER_USES_STDIO #define my_fileno(a) fileno ((a)) #define my_fopen_ro(a,b) fopen ((a),(b)) #define my_fopen(a,b) fopen ((a),(b)) typedef FILE *FILEP_OR_FD; #define INVALID_FP NULL #define FILEP_OR_FD_FOR_STDIN (stdin) #define FILEP_OR_FD_FOR_STDOUT (stdout) typedef struct { FILE *fp; /* open file handle */ int keep_open; int no_cache; int print_only_name; /* flags indicating that fname is not a real file*/ char fname[1]; /* name of the file */ } file_filter_ctx_t ; #else #define my_fileno(a) (a) #define my_fopen_ro(a,b) fd_cache_open ((a),(b)) #define my_fopen(a,b) direct_open ((a),(b)) #ifdef HAVE_DOSISH_SYSTEM typedef HANDLE FILEP_OR_FD; #define INVALID_FP ((HANDLE)-1) #define FILEP_OR_FD_FOR_STDIN (GetStdHandle (STD_INPUT_HANDLE)) #define FILEP_OR_FD_FOR_STDOUT (GetStdHandle (STD_OUTPUT_HANDLE)) #undef USE_SETMODE #else typedef int FILEP_OR_FD; #define INVALID_FP (-1) #define FILEP_OR_FD_FOR_STDIN (0) #define FILEP_OR_FD_FOR_STDOUT (1) #endif typedef struct { FILEP_OR_FD fp; /* open file handle */ int keep_open; int no_cache; int eof_seen; int print_only_name; /* flags indicating that fname is not a real file*/ char fname[1]; /* name of the file */ } file_filter_ctx_t ; struct close_cache_s { struct close_cache_s *next; FILEP_OR_FD fp; char fname[1]; }; typedef struct close_cache_s *CLOSE_CACHE; static CLOSE_CACHE close_cache; #endif #ifdef _WIN32 typedef struct { int sock; int keep_open; int no_cache; int eof_seen; int print_only_name; /* flags indicating that fname is not a real file*/ char fname[1]; /* name of the file */ } sock_filter_ctx_t ; #endif /*_WIN32*/ /* The first partial length header block must be of size 512 * to make it easier (and efficienter) we use a min. block size of 512 * for all chunks (but the last one) */ #define OP_MIN_PARTIAL_CHUNK 512 #define OP_MIN_PARTIAL_CHUNK_2POW 9 typedef struct { int use; size_t size; size_t count; int partial; /* 1 = partial header, 2 in last partial packet */ char *buffer; /* used for partial header */ size_t buflen; /* used size of buffer */ int first_c; /* of partial header (which is > 0)*/ int eof; } block_filter_ctx_t; static int special_names_enabled; static int underflow(IOBUF a); static int translate_file_handle ( int fd, int for_write ); #ifndef FILE_FILTER_USES_STDIO /* This is a replacement for strcmp. Under W32 it does not distinguish between backslash and slash. */ static int fd_cache_strcmp (const char *a, const char *b) { #ifdef HAVE_DOSISH_SYSTEM for (; *a && *b; a++, b++) { if (*a != *b && !((*a == '/' && *b == '\\') || (*a == '\\' && *b == '/')) ) break; } return *(const unsigned char *)a - *(const unsigned char *)b; #else return strcmp (a, b); #endif } /* * Invalidate (i.e. close) a cached iobuf or all iobufs if NULL is * used for FNAME. */ static int fd_cache_invalidate (const char *fname) { CLOSE_CACHE cc; int err=0; if (!fname) { if( DBG_IOBUF ) log_debug ("fd_cache_invalidate (all)\n"); for (cc=close_cache; cc; cc = cc->next ) { if ( cc->fp != INVALID_FP ) { #ifdef HAVE_DOSISH_SYSTEM CloseHandle (cc->fp); #else close(cc->fp); #endif cc->fp = INVALID_FP; } } return err; } if( DBG_IOBUF ) log_debug ("fd_cache_invalidate (%s)\n", fname); for (cc=close_cache; cc; cc = cc->next ) { if ( cc->fp != INVALID_FP && !fd_cache_strcmp (cc->fname, fname) ) { if( DBG_IOBUF ) log_debug (" did (%s)\n", cc->fname); #ifdef HAVE_DOSISH_SYSTEM if(CloseHandle (cc->fp)==0) err=-1; #else err=close(cc->fp); #endif cc->fp = INVALID_FP; } } return err; } static int fd_cache_synchronize(const char *fname) { int err=0; #ifndef HAVE_DOSISH_SYSTEM CLOSE_CACHE cc; if( DBG_IOBUF ) log_debug ("fd_cache_synchronize (%s)\n", fname); for (cc=close_cache; cc; cc = cc->next ) { if ( cc->fp != INVALID_FP && !fd_cache_strcmp (cc->fname, fname) ) { if( DBG_IOBUF ) log_debug (" did (%s)\n", cc->fname); err=fsync(cc->fp); } } #endif return err; } static FILEP_OR_FD direct_open (const char *fname, const char *mode) { #ifdef HAVE_DOSISH_SYSTEM unsigned long da, cd, sm; HANDLE hfile; /* Note, that we do not handle all mode combinations */ /* According to the ReactOS source it seems that open() of the * standard MSW32 crt does open the file in share mode which is * something new for MS applications ;-) */ if ( strchr (mode, '+') ) { fd_cache_invalidate (fname); da = GENERIC_READ|GENERIC_WRITE; cd = OPEN_EXISTING; sm = FILE_SHARE_READ | FILE_SHARE_WRITE; } else if ( strchr (mode, 'w') ) { fd_cache_invalidate (fname); da = GENERIC_WRITE; cd = CREATE_ALWAYS; sm = FILE_SHARE_WRITE; } else { da = GENERIC_READ; cd = OPEN_EXISTING; sm = FILE_SHARE_READ; } hfile = CreateFile (fname, da, sm, NULL, cd, FILE_ATTRIBUTE_NORMAL, NULL); return hfile; #else int oflag; int cflag = S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH; /* Note, that we do not handle all mode combinations */ if ( strchr (mode, '+') ) { fd_cache_invalidate (fname); oflag = O_RDWR; } else if ( strchr (mode, 'w') ) { fd_cache_invalidate (fname); oflag = O_WRONLY | O_CREAT | O_TRUNC; } else { oflag = O_RDONLY; } #ifdef O_BINARY if (strchr (mode, 'b')) oflag |= O_BINARY; #endif #ifndef __riscos__ return open (fname, oflag, cflag ); #else { struct stat buf; int rc = stat( fname, &buf ); /* Don't allow iobufs on directories */ if( !rc && S_ISDIR(buf.st_mode) && !S_ISREG(buf.st_mode) ) return __set_errno( EISDIR ); else return open( fname, oflag, cflag ); } #endif #endif } /* * Instead of closing an FD we keep it open and cache it for later reuse * Note that this caching strategy only works if the process does not chdir. */ static void fd_cache_close (const char *fname, FILEP_OR_FD fp) { CLOSE_CACHE cc; assert (fp); if ( !fname || !*fname ) { #ifdef HAVE_DOSISH_SYSTEM CloseHandle (fp); #else close(fp); #endif if( DBG_IOBUF ) log_debug ("fd_cache_close (%d) real\n", (int)fp); return; } /* try to reuse a slot */ for (cc=close_cache; cc; cc = cc->next ) { if ( cc->fp == INVALID_FP && !fd_cache_strcmp (cc->fname, fname) ) { cc->fp = fp; if( DBG_IOBUF ) log_debug ("fd_cache_close (%s) used existing slot\n", fname); return; } } /* add a new one */ if( DBG_IOBUF ) log_debug ("fd_cache_close (%s) new slot created\n", fname); cc = xmalloc_clear (sizeof *cc + strlen (fname)); strcpy (cc->fname, fname); cc->fp = fp; cc->next = close_cache; close_cache = cc; } /* * Do an direct_open on FNAME but first try to reuse one from the fd_cache */ static FILEP_OR_FD fd_cache_open (const char *fname, const char *mode) { CLOSE_CACHE cc; assert (fname); for (cc=close_cache; cc; cc = cc->next ) { if ( cc->fp != INVALID_FP && !fd_cache_strcmp (cc->fname, fname) ) { FILEP_OR_FD fp = cc->fp; cc->fp = INVALID_FP; if( DBG_IOBUF ) log_debug ("fd_cache_open (%s) using cached fp\n", fname); #ifdef HAVE_DOSISH_SYSTEM if (SetFilePointer (fp, 0, NULL, FILE_BEGIN) == 0xffffffff ) { log_error ("rewind file failed on handle %p: %s\n", fp, w32_strerror (errno)); fp = INVALID_FP; } #else if ( lseek (fp, 0, SEEK_SET) == (off_t)-1 ) { log_error("can't rewind fd %d: %s\n", fp, strerror(errno) ); fp = INVALID_FP; } #endif return fp; } } if( DBG_IOBUF ) log_debug ("fd_cache_open (%s) not cached\n", fname); return direct_open (fname, mode); } #endif /*FILE_FILTER_USES_STDIO*/ /**************** * Read data from a file into buf which has an allocated length of *LEN. * return the number of read bytes in *LEN. OPAQUE is the FILE * of * the stream. A is not used. * control may be: * IOBUFCTRL_INIT: called just before the function is linked into the * list of function. This can be used to prepare internal * data structures of the function. * IOBUFCTRL_FREE: called just before the function is removed from the * list of functions and can be used to release internal * data structures or close a file etc. * IOBUFCTRL_UNDERFLOW: called by iobuf_underflow to fill the buffer * with new stuff. *RET_LEN is the available size of the * buffer, and should be set to the number of bytes * which were put into the buffer. The function * returns 0 to indicate success, -1 on EOF and * G10ERR_xxxxx for other errors. * * IOBUFCTRL_FLUSH: called by iobuf_flush() to write out the collected stuff. * *RET_LAN is the number of bytes in BUF. * * IOBUFCTRL_CANCEL: send to all filters on behalf of iobuf_cancel. The * filter may take appropriate action on this message. */ static int file_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) { file_filter_ctx_t *a = opaque; FILEP_OR_FD f = a->fp; size_t size = *ret_len; size_t nbytes = 0; int rc = 0; #ifdef FILE_FILTER_USES_STDIO if( control == IOBUFCTRL_UNDERFLOW ) { assert( size ); /* need a buffer */ if ( feof(f)) { /* On terminals you could easiely read as many EOFs as you call */ rc = -1; /* fread() or fgetc() repeatly. Every call will block until you press */ *ret_len = 0; /* CTRL-D. So we catch this case before we call fread() again. */ } else { clearerr( f ); nbytes = fread( buf, 1, size, f ); if( feof(f) && !nbytes ) { rc = -1; /* okay: we can return EOF now. */ } else if( ferror(f) && errno != EPIPE ) { log_error("%s: read error: %s\n", a->fname, strerror(errno)); rc = G10ERR_READ_FILE; } *ret_len = nbytes; } } else if( control == IOBUFCTRL_FLUSH ) { if( size ) { clearerr( f ); nbytes = fwrite( buf, 1, size, f ); if( ferror(f) ) { log_error("%s: write error: %s\n", a->fname, strerror(errno)); rc = G10ERR_WRITE_FILE; } } *ret_len = nbytes; } else if( control == IOBUFCTRL_INIT ) { a->keep_open = a->no_cache = 0; } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "file_filter"; } else if( control == IOBUFCTRL_FREE ) { if( f != stdin && f != stdout ) { if( DBG_IOBUF ) log_debug("%s: close fd %d\n", a->fname, fileno(f) ); if (!a->keep_open) fclose(f); } f = NULL; xfree(a); /* we can free our context now */ } #else /* !stdio implementation */ if( control == IOBUFCTRL_UNDERFLOW ) { assert( size ); /* need a buffer */ if ( a->eof_seen) { rc = -1; *ret_len = 0; } else { #ifdef HAVE_DOSISH_SYSTEM unsigned long nread; nbytes = 0; if ( !ReadFile ( f, buf, size, &nread, NULL ) ) { if ((int)GetLastError () != ERROR_BROKEN_PIPE) { log_error ("%s: read error: %s\n", a->fname, w32_strerror (0)); rc = G10ERR_READ_FILE; } } else if ( !nread ) { a->eof_seen = 1; rc = -1; } else { nbytes = nread; } #else int n; nbytes = 0; do { n = read ( f, buf, size ); } while (n == -1 && errno == EINTR ); if ( n == -1 ) { /* error */ if (errno != EPIPE) { log_error("%s: read error: %s\n", a->fname, strerror(errno)); rc = G10ERR_READ_FILE; } } else if ( !n ) { /* eof */ a->eof_seen = 1; rc = -1; } else { nbytes = n; } #endif *ret_len = nbytes; } } else if( control == IOBUFCTRL_FLUSH ) { if( size ) { #ifdef HAVE_DOSISH_SYSTEM byte *p = buf; unsigned long n; nbytes = size; do { if (size && !WriteFile (f, p, nbytes, &n, NULL)) { log_error ("%s: write error: %s\n", a->fname, w32_strerror (0)); rc = G10ERR_WRITE_FILE; break; } p += n; nbytes -= n; } while ( nbytes ); nbytes = p - buf; #else byte *p = buf; int n; nbytes = size; do { do { n = write ( f, p, nbytes ); } while ( n == -1 && errno == EINTR ); if ( n > 0 ) { p += n; nbytes -= n; } } while ( n != -1 && nbytes ); if( n == -1 ) { log_error("%s: write error: %s\n", a->fname, strerror(errno)); rc = G10ERR_WRITE_FILE; } nbytes = p - buf; #endif } *ret_len = nbytes; } else if ( control == IOBUFCTRL_INIT ) { a->eof_seen = 0; a->keep_open = 0; a->no_cache = 0; } else if ( control == IOBUFCTRL_DESC ) { *(char**)buf = "file_filter(fd)"; } else if ( control == IOBUFCTRL_FREE ) { #ifdef HAVE_DOSISH_SYSTEM if ( f != FILEP_OR_FD_FOR_STDIN && f != FILEP_OR_FD_FOR_STDOUT ) { if( DBG_IOBUF ) log_debug("%s: close handle %p\n", a->fname, f ); if (!a->keep_open) fd_cache_close (a->no_cache?NULL:a->fname, f); } #else if ( (int)f != 0 && (int)f != 1 ) { if( DBG_IOBUF ) log_debug("%s: close fd %d\n", a->fname, f ); if (!a->keep_open) fd_cache_close (a->no_cache?NULL:a->fname, f); } f = INVALID_FP; #endif xfree (a); /* we can free our context now */ } #endif /* !stdio implementation */ return rc; } #ifdef _WIN32 /* Becuase sockets are an special object under Lose32 we have to * use a special filter */ static int sock_filter (void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) { sock_filter_ctx_t *a = opaque; size_t size = *ret_len; size_t nbytes = 0; int rc = 0; if( control == IOBUFCTRL_UNDERFLOW ) { assert( size ); /* need a buffer */ if ( a->eof_seen) { rc = -1; *ret_len = 0; } else { int nread; nread = recv ( a->sock, buf, size, 0 ); if ( nread == SOCKET_ERROR ) { int ec = (int)WSAGetLastError (); log_error("socket read error: ec=%d\n", ec); rc = G10ERR_READ_FILE; } else if ( !nread ) { a->eof_seen = 1; rc = -1; } else { nbytes = nread; } *ret_len = nbytes; } } else if( control == IOBUFCTRL_FLUSH ) { if( size ) { byte *p = buf; int n; nbytes = size; do { n = send (a->sock, p, nbytes, 0); if ( n == SOCKET_ERROR ) { int ec = (int)WSAGetLastError (); log_error("socket write error: ec=%d\n", ec); rc = G10ERR_WRITE_FILE; break; } p += n; nbytes -= n; } while ( nbytes ); nbytes = p - buf; } *ret_len = nbytes; } else if ( control == IOBUFCTRL_INIT ) { a->eof_seen = 0; a->keep_open = 0; a->no_cache = 0; } else if ( control == IOBUFCTRL_DESC ) { *(char**)buf = "sock_filter"; } else if ( control == IOBUFCTRL_FREE ) { if (!a->keep_open) closesocket (a->sock); xfree (a); /* we can free our context now */ } return rc; } #endif /*_WIN32*/ /**************** * This is used to implement the block write mode. * Block reading is done on a byte by byte basis in readbyte(), * without a filter */ static int block_filter(void *opaque, int control, IOBUF chain, byte *buf, size_t *ret_len) { block_filter_ctx_t *a = opaque; size_t size = *ret_len; int c, needed, rc = 0; char *p; if( control == IOBUFCTRL_UNDERFLOW ) { size_t n=0; p = buf; assert( size ); /* need a buffer */ if( a->eof ) /* don't read any further */ rc = -1; while( !rc && size ) { if( !a->size ) { /* get the length bytes */ if( a->partial == 2 ) { a->eof = 1; if( !n ) rc = -1; break; } else if( a->partial ) { /* These OpenPGP introduced huffman like encoded length * bytes are really a mess :-( */ if( a->first_c ) { c = a->first_c; a->first_c = 0; } else if( (c = iobuf_get(chain)) == -1 ) { log_error("block_filter: 1st length byte missing\n"); rc = G10ERR_READ_FILE; break; } if( c < 192 ) { a->size = c; a->partial = 2; if( !a->size ) { a->eof = 1; if( !n ) rc = -1; break; } } else if( c < 224 ) { a->size = (c - 192) * 256; if( (c = iobuf_get(chain)) == -1 ) { log_error("block_filter: 2nd length byte missing\n"); rc = G10ERR_READ_FILE; break; } a->size += c + 192; a->partial = 2; if( !a->size ) { a->eof = 1; if( !n ) rc = -1; break; } } else if( c == 255 ) { a->size = iobuf_get(chain) << 24; a->size |= iobuf_get(chain) << 16; a->size |= iobuf_get(chain) << 8; if( (c = iobuf_get(chain)) == -1 ) { log_error("block_filter: invalid 4 byte length\n"); rc = G10ERR_READ_FILE; break; } a->size |= c; a->partial = 2; if( !a->size ) { a->eof = 1; if( !n ) rc = -1; break; } } else { /* next partial body length */ a->size = 1 << (c & 0x1f); } /* log_debug("partial: ctx=%p c=%02x size=%u\n", a, c, a->size);*/ } else BUG(); } while( !rc && size && a->size ) { needed = size < a->size ? size : a->size; c = iobuf_read( chain, p, needed ); if( c < needed ) { if( c == -1 ) c = 0; log_error("block_filter %p: read error (size=%lu,a->size=%lu)\n", a, (ulong)size+c, (ulong)a->size+c); rc = G10ERR_READ_FILE; } else { size -= c; a->size -= c; p += c; n += c; } } } *ret_len = n; } else if( control == IOBUFCTRL_FLUSH ) { if( a->partial ) { /* the complicated openpgp scheme */ size_t blen, n, nbytes = size + a->buflen; assert( a->buflen <= OP_MIN_PARTIAL_CHUNK ); if( nbytes < OP_MIN_PARTIAL_CHUNK ) { /* not enough to write a partial block out; so we store it*/ if( !a->buffer ) a->buffer = xmalloc( OP_MIN_PARTIAL_CHUNK ); memcpy( a->buffer + a->buflen, buf, size ); a->buflen += size; } else { /* okay, we can write out something */ /* do this in a loop to use the most efficient block lengths */ p = buf; do { /* find the best matching block length - this is limited * by the size of the internal buffering */ for( blen=OP_MIN_PARTIAL_CHUNK*2, c=OP_MIN_PARTIAL_CHUNK_2POW+1; blen <= nbytes; blen *=2, c++ ) ; blen /= 2; c--; /* write the partial length header */ assert( c <= 0x1f ); /*;-)*/ c |= 0xe0; iobuf_put( chain, c ); if( (n=a->buflen) ) { /* write stuff from the buffer */ assert( n == OP_MIN_PARTIAL_CHUNK); if( iobuf_write(chain, a->buffer, n ) ) rc = G10ERR_WRITE_FILE; a->buflen = 0; nbytes -= n; } if( (n = nbytes) > blen ) n = blen; if( n && iobuf_write(chain, p, n ) ) rc = G10ERR_WRITE_FILE; p += n; nbytes -= n; } while( !rc && nbytes >= OP_MIN_PARTIAL_CHUNK ); /* store the rest in the buffer */ if( !rc && nbytes ) { assert( !a->buflen ); assert( nbytes < OP_MIN_PARTIAL_CHUNK ); if( !a->buffer ) a->buffer = xmalloc( OP_MIN_PARTIAL_CHUNK ); memcpy( a->buffer, p, nbytes ); a->buflen = nbytes; } } } else BUG(); } else if( control == IOBUFCTRL_INIT ) { if( DBG_IOBUF ) log_debug("init block_filter %p\n", a ); if( a->partial ) a->count = 0; else if( a->use == 1 ) a->count = a->size = 0; else a->count = a->size; /* force first length bytes */ a->eof = 0; a->buffer = NULL; a->buflen = 0; } else if( control == IOBUFCTRL_DESC ) { *(char**)buf = "block_filter"; } else if( control == IOBUFCTRL_FREE ) { if( a->use == 2 ) { /* write the end markers */ if( a->partial ) { u32 len; /* write out the remaining bytes without a partial header * the length of this header may be 0 - but if it is * the first block we are not allowed to use a partial header * and frankly we can't do so, because this length must be * a power of 2. This is _really_ complicated because we * have to check the possible length of a packet prior * to it's creation: a chain of filters becomes complicated * and we need a lot of code to handle compressed packets etc. * :-((((((( */ /* construct header */ len = a->buflen; /*log_debug("partial: remaining length=%u\n", len );*/ if( len < 192 ) rc = iobuf_put(chain, len ); else if( len < 8384 ) { if( !(rc=iobuf_put( chain, ((len-192) / 256) + 192)) ) rc = iobuf_put( chain, ((len-192) % 256)); } else { /* use a 4 byte header */ if( !(rc=iobuf_put( chain, 0xff )) ) if( !(rc=iobuf_put( chain, (len >> 24)&0xff )) ) if( !(rc=iobuf_put( chain, (len >> 16)&0xff )) ) if( !(rc=iobuf_put( chain, (len >> 8)&0xff ))) rc=iobuf_put( chain, len & 0xff ); } if( !rc && len ) rc = iobuf_write(chain, a->buffer, len ); if( rc ) { log_error("block_filter: write error: %s\n",strerror(errno)); rc = G10ERR_WRITE_FILE; } xfree( a->buffer ); a->buffer = NULL; a->buflen = 0; } else BUG(); } else if( a->size ) { log_error("block_filter: pending bytes!\n"); } if( DBG_IOBUF ) log_debug("free block_filter %p\n", a ); xfree(a); /* we can free our context now */ } return rc; } static void print_chain( IOBUF a ) { if( !DBG_IOBUF ) return; for(; a; a = a->chain ) { size_t dummy_len = 0; const char *desc = "[none]"; if( a->filter ) a->filter( a->filter_ov, IOBUFCTRL_DESC, NULL, (byte*)&desc, &dummy_len ); log_debug("iobuf chain: %d.%d `%s' filter_eof=%d start=%d len=%d\n", a->no, a->subno, desc?desc:"?", a->filter_eof, (int)a->d.start, (int)a->d.len ); } } int iobuf_print_chain( IOBUF a ) { print_chain(a); return 0; } /**************** * Allocate a new io buffer, with no function assigned. * Use is the desired usage: 1 for input, 2 for output, 3 for temp buffer * BUFSIZE is a suggested buffer size. */ IOBUF iobuf_alloc(int use, size_t bufsize) { IOBUF a; static int number=0; a = xmalloc_clear(sizeof *a); a->use = use; a->d.buf = xmalloc( bufsize ); a->d.size = bufsize; a->no = ++number; a->subno = 0; a->opaque = NULL; a->real_fname = NULL; return a; } int iobuf_close ( IOBUF a ) { IOBUF a2; size_t dummy_len=0; int rc=0; if( a && a->directfp ) { fclose( a->directfp ); xfree( a->real_fname ); if( DBG_IOBUF ) log_debug("iobuf_close -> %p\n", a->directfp ); return 0; } for( ; a && !rc ; a = a2 ) { a2 = a->chain; if( a->use == 2 && (rc=iobuf_flush(a)) ) log_error("iobuf_flush failed on close: %s\n", g10_errstr(rc)); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: close `%s'\n", a->no, a->subno, a->desc?a->desc:"?"); if( a->filter && (rc = a->filter(a->filter_ov, IOBUFCTRL_FREE, a->chain, NULL, &dummy_len)) ) log_error("IOBUFCTRL_FREE failed on close: %s\n", g10_errstr(rc) ); xfree(a->real_fname); if (a->d.buf) { memset (a->d.buf, 0, a->d.size); /* erase the buffer */ xfree(a->d.buf); } xfree(a); } return rc; } int iobuf_cancel( IOBUF a ) { const char *s; IOBUF a2; int rc; #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) char *remove_name = NULL; #endif if( a && a->use == 2 ) { s = iobuf_get_real_fname(a); if( s && *s ) { #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) remove_name = xstrdup ( s ); #else remove(s); #endif } } /* send a cancel message to all filters */ for( a2 = a; a2 ; a2 = a2->chain ) { size_t dummy; if( a2->filter ) a2->filter( a2->filter_ov, IOBUFCTRL_CANCEL, a2->chain, NULL, &dummy ); } rc = iobuf_close(a); #if defined(HAVE_DOSISH_SYSTEM) || defined(__riscos__) if ( remove_name ) { /* Argg, MSDOS does not allow to remove open files. So * we have to do it here */ remove ( remove_name ); xfree ( remove_name ); } #endif return rc; } /**************** * create a temporary iobuf, which can be used to collect stuff * in an iobuf and later be written by iobuf_write_temp() to another * iobuf. */ IOBUF iobuf_temp() { IOBUF a; a = iobuf_alloc(3, IOBUF_BUFFER_SIZE ); return a; } IOBUF iobuf_temp_with_content( const char *buffer, size_t length ) { IOBUF a; a = iobuf_alloc(3, length ); memcpy( a->d.buf, buffer, length ); a->d.len = length; return a; } void iobuf_enable_special_filenames ( int yes ) { special_names_enabled = yes; } /* * see whether the filename has the for "-&nnnn", where n is a * non-zero number. * Returns this number or -1 if it is not the case. */ static int check_special_filename ( const char *fname ) { if ( special_names_enabled && fname && *fname == '-' && fname[1] == '&' ) { int i; fname += 2; for (i=0; digitp (fname+i); i++ ) ; if ( !fname[i] ) return atoi (fname); } return -1; } /* This fucntion returns true if FNAME indicates a PIPE (stdout or stderr) or a special file name if those are enabled. */ int iobuf_is_pipe_filename (const char *fname) { if (!fname || (*fname=='-' && !fname[1]) ) return 1; return check_special_filename (fname) != -1; } /**************** * Create a head iobuf for reading from a file * returns: NULL if an error occures and sets errno */ IOBUF iobuf_open( const char *fname ) { IOBUF a; FILEP_OR_FD fp; file_filter_ctx_t *fcx; size_t len = 0; int print_only = 0; int fd; if( !fname || (*fname=='-' && !fname[1]) ) { fp = FILEP_OR_FD_FOR_STDIN; #ifdef USE_SETMODE setmode ( my_fileno(fp) , O_BINARY ); #endif fname = "[stdin]"; print_only = 1; } else if ( (fd = check_special_filename ( fname )) != -1 ) return iobuf_fdopen ( translate_file_handle (fd,0), "rb" ); else if( (fp = my_fopen_ro(fname, "rb")) == INVALID_FP ) return NULL; a = iobuf_alloc(1, IOBUF_BUFFER_SIZE ); fcx = xmalloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; fcx->print_only_name = print_only; strcpy(fcx->fname, fname ); if( !print_only ) a->real_fname = xstrdup( fname ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len ); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: open `%s' fd=%d\n", a->no, a->subno, fname, (int)my_fileno(fcx->fp) ); return a; } /**************** * Create a head iobuf for reading from a file * returns: NULL if an error occures and sets errno */ IOBUF iobuf_fdopen( int fd, const char *mode ) { IOBUF a; FILEP_OR_FD fp; file_filter_ctx_t *fcx; size_t len; #ifdef FILE_FILTER_USES_STDIO if( !(fp = fdopen(fd, mode)) ) return NULL; #else fp = (FILEP_OR_FD)fd; #endif a = iobuf_alloc( strchr( mode, 'w')? 2:1, IOBUF_BUFFER_SIZE ); fcx = xmalloc( sizeof *fcx + 20 ); fcx->fp = fp; fcx->print_only_name = 1; sprintf(fcx->fname, "[fd %d]", fd ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len ); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: fdopen `%s'\n", a->no, a->subno, fcx->fname ); iobuf_ioctl (a,3,1,NULL); /* disable fd caching */ return a; } IOBUF iobuf_sockopen ( int fd, const char *mode ) { IOBUF a; #ifdef _WIN32 sock_filter_ctx_t *scx; size_t len; a = iobuf_alloc( strchr( mode, 'w')? 2:1, IOBUF_BUFFER_SIZE ); scx = xmalloc( sizeof *scx + 25 ); scx->sock = fd; scx->print_only_name = 1; sprintf(scx->fname, "[sock %d]", fd ); a->filter = sock_filter; a->filter_ov = scx; sock_filter( scx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); sock_filter( scx, IOBUFCTRL_INIT, NULL, NULL, &len ); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: sockopen `%s'\n", a->no, a->subno, scx->fname); iobuf_ioctl (a,3,1,NULL); /* disable fd caching */ #else a = iobuf_fdopen (fd, mode); #endif return a; } /**************** * create an iobuf for writing to a file; the file will be created. */ IOBUF iobuf_create( const char *fname ) { IOBUF a; FILEP_OR_FD fp; file_filter_ctx_t *fcx; size_t len; int print_only = 0; int fd; if( !fname || (*fname=='-' && !fname[1]) ) { fp = FILEP_OR_FD_FOR_STDOUT; #ifdef USE_SETMODE setmode ( my_fileno(fp) , O_BINARY ); #endif fname = "[stdout]"; print_only = 1; } else if ( (fd = check_special_filename ( fname )) != -1 ) return iobuf_fdopen ( translate_file_handle (fd, 1), "wb" ); else if( (fp = my_fopen(fname, "wb")) == INVALID_FP ) return NULL; a = iobuf_alloc(2, IOBUF_BUFFER_SIZE ); fcx = xmalloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; fcx->print_only_name = print_only; strcpy(fcx->fname, fname ); if( !print_only ) a->real_fname = xstrdup( fname ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len ); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: create `%s'\n", a->no, a->subno, a->desc?a->desc:"?" ); return a; } /**************** * append to an iobuf; if the file does not exist, create it. * cannot be used for stdout. * Note: This is not used. */ #if 0 /* not used */ IOBUF iobuf_append( const char *fname ) { IOBUF a; FILE *fp; file_filter_ctx_t *fcx; size_t len; if( !fname ) return NULL; else if( !(fp = my_fopen(fname, "ab")) ) return NULL; a = iobuf_alloc(2, IOBUF_BUFFER_SIZE ); fcx = xmalloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; strcpy(fcx->fname, fname ); a->real_fname = xstrdup( fname ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len ); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: append `%s'\n", a->no, a->subno, a->desc?a->desc:"?" ); return a; } #endif IOBUF iobuf_openrw( const char *fname ) { IOBUF a; FILEP_OR_FD fp; file_filter_ctx_t *fcx; size_t len; if( !fname ) return NULL; else if( (fp = my_fopen(fname, "r+b")) == INVALID_FP ) return NULL; a = iobuf_alloc(2, IOBUF_BUFFER_SIZE ); fcx = xmalloc( sizeof *fcx + strlen(fname) ); fcx->fp = fp; strcpy(fcx->fname, fname ); a->real_fname = xstrdup( fname ); a->filter = file_filter; a->filter_ov = fcx; file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len ); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: openrw `%s'\n", a->no, a->subno, a->desc?a->desc:"?"); return a; } int iobuf_ioctl ( IOBUF a, int cmd, int intval, void *ptrval ) { if ( cmd == 1 ) { /* keep system filepointer/descriptor open */ if( DBG_IOBUF ) log_debug("iobuf-%d.%d: ioctl `%s' keep=%d\n", a? a->no:-1, a?a->subno:-1, a&&a->desc?a->desc:"?", intval ); for( ; a; a = a->chain ) if( !a->chain && a->filter == file_filter ) { file_filter_ctx_t *b = a->filter_ov; b->keep_open = intval; return 0; } #ifdef _WIN32 else if( !a->chain && a->filter == sock_filter ) { sock_filter_ctx_t *b = a->filter_ov; b->keep_open = intval; return 0; } #endif } else if ( cmd == 2 ) { /* invalidate cache */ if( DBG_IOBUF ) log_debug("iobuf-*.*: ioctl `%s' invalidate\n", ptrval? (char*)ptrval:"[all]"); if ( !a && !intval ) { #ifndef FILE_FILTER_USES_STDIO return fd_cache_invalidate (ptrval); #endif return 0; } } else if ( cmd == 3 ) { /* disallow/allow caching */ if( DBG_IOBUF ) log_debug("iobuf-%d.%d: ioctl `%s' no_cache=%d\n", a? a->no:-1, a?a->subno:-1, a&&a->desc?a->desc:"?", intval ); for( ; a; a = a->chain ) if( !a->chain && a->filter == file_filter ) { file_filter_ctx_t *b = a->filter_ov; b->no_cache = intval; return 0; } #ifdef _WIN32 else if( !a->chain && a->filter == sock_filter ) { sock_filter_ctx_t *b = a->filter_ov; b->no_cache = intval; return 0; } #endif } else if(cmd==4) { /* Do a fsync on the open fd and return any errors to the caller of iobuf_ioctl */ if( DBG_IOBUF ) log_debug("iobuf-*.*: ioctl `%s' fsync\n", ptrval? (char*)ptrval:""); if(!a && !intval && ptrval) { #ifndef FILE_FILTER_USES_STDIO return fd_cache_synchronize (ptrval); #else return 0; #endif } } return -1; } /**************** * Register an i/o filter. */ int iobuf_push_filter( IOBUF a, int (*f)(void *opaque, int control, IOBUF chain, byte *buf, size_t *len), void *ov ) { return iobuf_push_filter2( a, f, ov, 0 ); } int iobuf_push_filter2( IOBUF a, int (*f)(void *opaque, int control, IOBUF chain, byte *buf, size_t *len), void *ov, int rel_ov ) { IOBUF b; size_t dummy_len=0; int rc=0; if( a->directfp ) BUG(); if( a->use == 2 && (rc=iobuf_flush(a)) ) return rc; if (a->subno >= MAX_NESTING_FILTER) { log_error ("i/o filter too deeply nested - corrupted data?\n"); return G10ERR_UNEXPECTED; } /* make a copy of the current stream, so that * A is the new stream and B the original one. * The contents of the buffers are transferred to the * new stream. */ b = xmalloc(sizeof *b); memcpy(b, a, sizeof *b ); /* fixme: it is stupid to keep a copy of the name at every level * but we need the name somewhere because the name known by file_filter * may have been released when we need the name of the file */ b->real_fname = a->real_fname? xstrdup(a->real_fname):NULL; /* remove the filter stuff from the new stream */ a->filter = NULL; a->filter_ov = NULL; a->filter_ov_owner = 0; a->filter_eof = 0; if( a->use == 3 ) a->use = 2; /* make a write stream from a temp stream */ if( a->use == 2 ) { /* allocate a fresh buffer for the original stream */ b->d.buf = xmalloc( a->d.size ); b->d.len = 0; b->d.start = 0; } else { /* allocate a fresh buffer for the new stream */ a->d.buf = xmalloc( a->d.size ); a->d.len = 0; a->d.start = 0; } /* disable nlimit for the new stream */ a->ntotal = b->ntotal + b->nbytes; a->nlimit = a->nbytes = 0; a->nofast &= ~1; /* make a link from the new stream to the original stream */ a->chain = b; a->opaque = b->opaque; /* setup the function on the new stream */ a->filter = f; a->filter_ov = ov; a->filter_ov_owner = rel_ov; a->subno = b->subno + 1; f( ov, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &dummy_len ); if( DBG_IOBUF ) { log_debug("iobuf-%d.%d: push `%s'\n", a->no, a->subno, a->desc?a->desc:"?" ); print_chain( a ); } /* now we can initialize the new function if we have one */ if( a->filter && (rc = a->filter(a->filter_ov, IOBUFCTRL_INIT, a->chain, NULL, &dummy_len)) ) log_error("IOBUFCTRL_INIT failed: %s\n", g10_errstr(rc) ); return rc; } /**************** * Remove an i/o filter. */ static int pop_filter( IOBUF a, int (*f)(void *opaque, int control, IOBUF chain, byte *buf, size_t *len), void *ov ) { IOBUF b; size_t dummy_len=0; int rc=0; if( a->directfp ) BUG(); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: pop `%s'\n", a->no, a->subno, a->desc?a->desc:"?" ); if( !a->filter ) { /* this is simple */ b = a->chain; assert(b); xfree(a->d.buf); xfree(a->real_fname); memcpy(a,b, sizeof *a); xfree(b); return 0; } for(b=a ; b; b = b->chain ) if( b->filter == f && (!ov || b->filter_ov == ov) ) break; if( !b ) log_bug("pop_filter(): filter function not found\n"); /* flush this stream if it is an output stream */ if( a->use == 2 && (rc=iobuf_flush(b)) ) { log_error("iobuf_flush failed in pop_filter: %s\n", g10_errstr(rc)); return rc; } /* and tell the filter to free it self */ if( b->filter && (rc = b->filter(b->filter_ov, IOBUFCTRL_FREE, b->chain, NULL, &dummy_len)) ) { log_error("IOBUFCTRL_FREE failed: %s\n", g10_errstr(rc) ); return rc; } if( b->filter_ov && b->filter_ov_owner ) { xfree( b->filter_ov ); b->filter_ov = NULL; } /* and see how to remove it */ if( a == b && !b->chain ) log_bug("can't remove the last filter from the chain\n"); else if( a == b ) { /* remove the first iobuf from the chain */ /* everything from b is copied to a. This is save because * a flush has been done on the to be removed entry */ b = a->chain; xfree(a->d.buf); xfree(a->real_fname); memcpy(a,b, sizeof *a); xfree(b); if( DBG_IOBUF ) log_debug("iobuf-%d.%d: popped filter\n", a->no, a->subno ); } else if( !b->chain ) { /* remove the last iobuf from the chain */ log_bug("Ohh jeee, trying to remove a head filter\n"); } else { /* remove an intermediate iobuf from the chain */ log_bug("Ohh jeee, trying to remove an intermediate filter\n"); } return rc; } /**************** * read underflow: read more bytes into the buffer and return * the first byte or -1 on EOF. */ static int underflow(IOBUF a) { size_t len; int rc; assert( a->d.start == a->d.len ); if( a->use == 3 ) return -1; /* EOF because a temp buffer can't do an underflow */ if( a->filter_eof ) { if( a->chain ) { IOBUF b = a->chain; if( DBG_IOBUF ) log_debug("iobuf-%d.%d: pop `%s' in underflow\n", a->no, a->subno, a->desc?a->desc:"?" ); xfree(a->d.buf); xfree(a->real_fname); memcpy(a, b, sizeof *a); xfree(b); print_chain(a); } else a->filter_eof = 0; /* for the top level filter */ if( DBG_IOBUF ) log_debug("iobuf-%d.%d: underflow: eof (due to filter eof)\n", a->no, a->subno ); return -1; /* return one(!) EOF */ } if( a->error ) { if( DBG_IOBUF ) log_debug("iobuf-%d.%d: error\n", a->no, a->subno ); return -1; } if( a->directfp ) { FILE *fp = a->directfp; len = fread( a->d.buf, 1, a->d.size, fp); if( len < a->d.size ) { if( ferror(fp) ) a->error = 1; } a->d.len = len; a->d.start = 0; return len? a->d.buf[a->d.start++] : -1; } if( a->filter ) { len = a->d.size; if( DBG_IOBUF ) log_debug("iobuf-%d.%d: underflow: req=%lu\n", a->no, a->subno, (ulong)len ); rc = a->filter( a->filter_ov, IOBUFCTRL_UNDERFLOW, a->chain, a->d.buf, &len ); if( DBG_IOBUF ) { log_debug("iobuf-%d.%d: underflow: got=%lu rc=%d\n", a->no, a->subno, (ulong)len, rc ); /* if( a->no == 1 ) */ /* log_hexdump (" data:", a->d.buf, len); */ } if( a->use == 1 && rc == -1 ) { /* EOF: we can remove the filter */ size_t dummy_len=0; /* and tell the filter to free itself */ if( (rc = a->filter(a->filter_ov, IOBUFCTRL_FREE, a->chain, NULL, &dummy_len)) ) log_error("IOBUFCTRL_FREE failed: %s\n", g10_errstr(rc) ); if( a->filter_ov && a->filter_ov_owner ) { xfree( a->filter_ov ); a->filter_ov = NULL; } a->filter = NULL; a->desc = NULL; a->filter_ov = NULL; a->filter_eof = 1; if( !len && a->chain ) { IOBUF b = a->chain; if( DBG_IOBUF ) log_debug("iobuf-%d.%d: pop in underflow (!len)\n", a->no, a->subno); xfree(a->d.buf); xfree(a->real_fname); memcpy(a,b, sizeof *a); xfree(b); print_chain(a); } } else if( rc ) a->error = 1; if( !len ) { if( DBG_IOBUF ) log_debug("iobuf-%d.%d: underflow: eof\n", a->no, a->subno ); return -1; } a->d.len = len; a->d.start = 0; return a->d.buf[a->d.start++]; } else { if( DBG_IOBUF ) log_debug("iobuf-%d.%d: underflow: eof (no filter)\n", a->no, a->subno ); return -1; /* no filter; return EOF */ } } int iobuf_flush(IOBUF a) { size_t len; int rc; if( a->directfp ) return 0; if( a->use == 3 ) { /* increase the temp buffer */ char *newbuf; size_t newsize = a->d.size + IOBUF_BUFFER_SIZE; if( DBG_IOBUF ) log_debug("increasing temp iobuf from %lu to %lu\n", (ulong)a->d.size, (ulong)newsize ); newbuf = xmalloc( newsize ); memcpy( newbuf, a->d.buf, a->d.len ); xfree(a->d.buf); a->d.buf = newbuf; a->d.size = newsize; return 0; } else if( a->use != 2 ) log_bug("flush on non-output iobuf\n"); else if( !a->filter ) log_bug("iobuf_flush: no filter\n"); len = a->d.len; rc = a->filter( a->filter_ov, IOBUFCTRL_FLUSH, a->chain, a->d.buf, &len ); if( !rc && len != a->d.len ) { log_info("iobuf_flush did not write all!\n"); rc = G10ERR_WRITE_FILE; } else if( rc ) a->error = 1; a->d.len = 0; return rc; } /**************** * Read a byte from the iobuf; returns -1 on EOF */ int iobuf_readbyte(IOBUF a) { int c; /* nlimit does not work together with unget */ /* nbytes is also not valid! */ if( a->unget.buf ) { if( a->unget.start < a->unget.len ) return a->unget.buf[a->unget.start++]; xfree(a->unget.buf); a->unget.buf = NULL; a->nofast &= ~2; } if( a->nlimit && a->nbytes >= a->nlimit ) return -1; /* forced EOF */ if( a->d.start < a->d.len ) { c = a->d.buf[a->d.start++]; } else if( (c=underflow(a)) == -1 ) return -1; /* EOF */ a->nbytes++; return c; } int iobuf_read(IOBUF a, byte *buf, unsigned buflen ) { int c, n; if( a->unget.buf || a->nlimit ) { /* handle special cases */ for(n=0 ; n < buflen; n++ ) { if( (c = iobuf_readbyte(a)) == -1 ) { if( !n ) return -1; /* eof */ break; } else if( buf ) *buf = c; if( buf ) buf++; } return n; } n = 0; do { if( n < buflen && a->d.start < a->d.len ) { unsigned size = a->d.len - a->d.start; if( size > buflen - n ) size = buflen - n; if( buf ) memcpy( buf, a->d.buf + a->d.start, size ); n += size; a->d.start += size; if( buf ) buf += size; } if( n < buflen ) { if( (c=underflow(a)) == -1 ) { a->nbytes += n; return n? n : -1/*EOF*/; } if( buf ) *buf++ = c; n++; } } while( n < buflen ); a->nbytes += n; return n; } /**************** * Have a look at the iobuf. * NOTE: This only works in special cases. */ int iobuf_peek(IOBUF a, byte *buf, unsigned buflen ) { int n=0; if( a->filter_eof ) return -1; if( !(a->d.start < a->d.len) ) { if( underflow(a) == -1 ) return -1; /* and unget this character */ assert(a->d.start == 1); a->d.start = 0; } for(n=0 ; n < buflen && (a->d.start+n) < a->d.len ; n++, buf++ ) *buf = a->d.buf[n]; return n; } int iobuf_writebyte(IOBUF a, unsigned c) { if( a->directfp ) BUG(); if( a->d.len == a->d.size ) if( iobuf_flush(a) ) return -1; assert( a->d.len < a->d.size ); a->d.buf[a->d.len++] = c; return 0; } int iobuf_write(IOBUF a, byte *buf, unsigned buflen ) { if( a->directfp ) BUG(); do { if( buflen && a->d.len < a->d.size ) { unsigned size = a->d.size - a->d.len; if( size > buflen ) size = buflen; memcpy( a->d.buf + a->d.len, buf, size ); buflen -= size; buf += size; a->d.len += size; } if( buflen ) { if( iobuf_flush(a) ) return -1; } } while( buflen ); return 0; } int iobuf_writestr(IOBUF a, const char *buf ) { for( ; *buf; buf++ ) if( iobuf_writebyte(a, *buf) ) return -1; return 0; } /**************** * copy the contents of TEMP to A. */ int iobuf_write_temp( IOBUF a, IOBUF temp ) { while( temp->chain ) pop_filter( temp, temp->filter, NULL ); return iobuf_write(a, temp->d.buf, temp->d.len ); } /**************** * copy the contents of the temp io stream to BUFFER. */ size_t iobuf_temp_to_buffer( IOBUF a, byte *buffer, size_t buflen ) { size_t n = a->d.len; if( n > buflen ) n = buflen; memcpy( buffer, a->d.buf, n ); return n; } /**************** * Call this function to terminate processing of the temp stream * without closing it. This removes all filters from the stream * makes sure that iobuf_get_temp_{buffer,length}() returns correct * values. */ void iobuf_flush_temp( IOBUF temp ) { while( temp->chain ) pop_filter( temp, temp->filter, NULL ); } /**************** * Set a limit on how many bytes may be read from the input stream A. * Setting the limit to 0 disables this feature. */ void iobuf_set_limit( IOBUF a, off_t nlimit ) { if( nlimit ) a->nofast |= 1; else a->nofast &= ~1; a->nlimit = nlimit; a->ntotal += a->nbytes; a->nbytes = 0; } /* Return the length of an open file A. IF OVERFLOW is not NULL it will be set to true if the file is larger than what off_t can cope with. The function return 0 on error or on overflow condition. */ off_t iobuf_get_filelength (IOBUF a, int *overflow ) { struct stat st; if (overflow) *overflow = 0; if (a->directfp) { FILE *fp = a->directfp; #ifdef __VMS /* 2009-02-19 SMS. * On VMS, use a VMS-specific method to determine file size. * For some non-UNIX-like file formats, the fstat() result * will not agree with the C Standard I/O functions such as * getc() and fread(), so these must be detected and handled * specially. */ return vms_file_size (fileno( fp)); #else /*!__VMS */ if( !fstat(fileno(fp), &st) ) return st.st_size; log_error("fstat() failed: %s\n", strerror(errno) ); return 0; #endif /*!__VMS */ } /* Hmmm: file_filter may have already been removed */ for( ; a; a = a->chain ) if( !a->chain && a->filter == file_filter ) { file_filter_ctx_t *b = a->filter_ov; FILEP_OR_FD fp = b->fp; #if defined(HAVE_DOSISH_SYSTEM) && !defined(FILE_FILTER_USES_STDIO) ulong size; static int (* __stdcall get_file_size_ex) (void *handle, LARGE_INTEGER *size); static int get_file_size_ex_initialized; if (!get_file_size_ex_initialized) { void *handle; handle = dlopen ("kernel32.dll", RTLD_LAZY); if (handle) { get_file_size_ex = dlsym (handle, "GetFileSizeEx"); if (!get_file_size_ex) dlclose (handle); } get_file_size_ex_initialized = 1; } if (get_file_size_ex) { /* This is a newer system with GetFileSizeEx; we use this then becuase it seem that GetFileSize won't return a proper error in case a file is larger than 4GB. */ LARGE_INTEGER size; if (get_file_size_ex (fp, &size)) { if (!size.u.HighPart) return size.u.LowPart; if (overflow) *overflow = 1; return 0; } } else { if ((size=GetFileSize (fp, NULL)) != 0xffffffff) return size; } log_error ("GetFileSize for handle %p failed: %s\n", fp, w32_strerror (0)); #elif defined(__VMS) return vms_file_size (my_fileno (fp)); #else if( !fstat(my_fileno(fp), &st) ) return st.st_size; log_error("fstat() failed: %s\n", strerror(errno) ); #endif break; } return 0; } /* Return the file descriptor of the underlying file or -1 if it is not available. */ int iobuf_get_fd (IOBUF a) { if (a->directfp) return fileno ( (FILE*)a->directfp ); for ( ; a; a = a->chain ) if (!a->chain && a->filter == file_filter) { file_filter_ctx_t *b = a->filter_ov; FILEP_OR_FD fp = b->fp; return my_fileno (fp); } return -1; } /**************** * Tell the file position, where the next read will take place */ off_t iobuf_tell( IOBUF a ) { return a->ntotal + a->nbytes; } #if !defined(HAVE_FSEEKO) && !defined(fseeko) #ifdef HAVE_LIMITS_H # include #endif #ifndef LONG_MAX # define LONG_MAX ((long) ((unsigned long) -1 >> 1)) #endif #ifndef LONG_MIN # define LONG_MIN (-1 - LONG_MAX) #endif /**************** * A substitute for fseeko, for hosts that don't have it. */ static int fseeko( FILE *stream, off_t newpos, int whence ) { while( newpos != (long) newpos ) { long pos = newpos < 0 ? LONG_MIN : LONG_MAX; if( fseek( stream, pos, whence ) != 0 ) return -1; newpos -= pos; whence = SEEK_CUR; } return fseek( stream, (long)newpos, whence ); } #endif /**************** * This is a very limited implementation. It simply discards all internal * buffering and removes all filters but the first one. */ int iobuf_seek( IOBUF a, off_t newpos ) { file_filter_ctx_t *b = NULL; if( a->directfp ) { FILE *fp = a->directfp; if( fseeko( fp, newpos, SEEK_SET ) ) { log_error("can't seek: %s\n", strerror(errno) ); return -1; } clearerr(fp); } else { for( ; a; a = a->chain ) { if( !a->chain && a->filter == file_filter ) { b = a->filter_ov; break; } } if( !a ) return -1; #ifdef FILE_FILTER_USES_STDIO if( fseeko( b->fp, newpos, SEEK_SET ) ) { log_error("can't fseek: %s\n", strerror(errno) ); return -1; } #else #ifdef HAVE_DOSISH_SYSTEM if (SetFilePointer (b->fp, newpos, NULL, FILE_BEGIN) == 0xffffffff ) { log_error ("SetFilePointer failed on handle %p: %s\n", b->fp, w32_strerror (0)); return -1; } #else if ( lseek (b->fp, newpos, SEEK_SET) == (off_t)-1 ) { log_error("can't lseek: %s\n", strerror(errno) ); return -1; } #endif #endif } a->d.len = 0; /* discard buffer */ a->d.start = 0; a->nbytes = 0; a->nlimit = 0; a->nofast &= ~1; a->ntotal = newpos; a->error = 0; /* remove filters, but the last */ if( a->chain ) log_debug("pop_filter called in iobuf_seek - please report\n"); while( a->chain ) pop_filter( a, a->filter, NULL ); return 0; } /**************** * Retrieve the real filename */ const char * iobuf_get_real_fname( IOBUF a ) { if( a->real_fname ) return a->real_fname; /* the old solution */ for( ; a; a = a->chain ) if( !a->chain && a->filter == file_filter ) { file_filter_ctx_t *b = a->filter_ov; return b->print_only_name? NULL : b->fname; } return NULL; } /**************** * Retrieve the filename */ const char * iobuf_get_fname( IOBUF a ) { for( ; a; a = a->chain ) if( !a->chain && a->filter == file_filter ) { file_filter_ctx_t *b = a->filter_ov; return b->fname; } return NULL; } /**************** * enable partial block mode as described in the OpenPGP draft. * LEN is the first length byte on read, but ignored on writes. */ void iobuf_set_partial_block_mode( IOBUF a, size_t len ) { block_filter_ctx_t *ctx = xmalloc_clear( sizeof *ctx ); assert( a->use == 1 || a->use == 2 ); ctx->use = a->use; if( !len ) { if( a->use == 1 ) log_debug("pop_filter called in set_partial_block_mode" " - please report\n"); pop_filter(a, block_filter, NULL ); } else { ctx->partial = 1; ctx->size = 0; ctx->first_c = len; iobuf_push_filter(a, block_filter, ctx ); } } /**************** * Same as fgets() but if the buffer is too short a larger one will * be allocated up to some limit *max_length. * A line is considered a byte stream ending in a LF. * Returns the length of the line. EOF is indicated by a line of * length zero. The last LF may be missing due to an EOF. * is max_length is zero on return, the line has been truncated. * * Note: The buffer is allocated with enough space to append a CR,LF,EOL */ unsigned iobuf_read_line( IOBUF a, byte **addr_of_buffer, unsigned *length_of_buffer, unsigned *max_length ) { int c; char *buffer = *addr_of_buffer; unsigned length = *length_of_buffer; unsigned nbytes = 0; unsigned maxlen = *max_length; char *p; if( !buffer ) { /* must allocate a new buffer */ length = 256; buffer = xmalloc( length ); *addr_of_buffer = buffer; *length_of_buffer = length; } length -= 3; /* reserve 3 bytes (cr,lf,eol) */ p = buffer; while( (c=iobuf_get(a)) != -1 ) { if( nbytes == length ) { /* increase the buffer */ if( length > maxlen ) { /* this is out limit */ /* skip the rest of the line */ while( c != '\n' && (c=iobuf_get(a)) != -1 ) ; *p++ = '\n'; /* always append a LF (we have reserved space) */ nbytes++; *max_length = 0; /* indicate truncation */ break; } length += 3; /* correct for the reserved byte */ length += length < 1024? 256 : 1024; buffer = xrealloc( buffer, length ); *addr_of_buffer = buffer; *length_of_buffer = length; length -= 3; /* and reserve again */ p = buffer + nbytes; } *p++ = c; nbytes++; if( c == '\n' ) break; } *p = 0; /* make sure the line is a string */ return nbytes; } /* This is the non iobuf specific function */ int iobuf_translate_file_handle ( int fd, int for_write ) { #ifdef _WIN32 { int x; if ( fd <= 2 ) return fd; /* do not do this for error, stdin, stdout, stderr */ x = _open_osfhandle ( fd, for_write? 1:0 ); if (x==-1 ) log_error ("failed to translate osfhandle %p\n", (void*)fd ); else { /*log_info ("_open_osfhandle %p yields %d%s\n", (void*)fd, x, for_write? " for writing":"" );*/ fd = x; } } #endif return fd; } static int translate_file_handle ( int fd, int for_write ) { #ifdef _WIN32 #ifdef FILE_FILTER_USES_STDIO fd = iobuf_translate_file_handle (fd, for_write); #else { int x; if ( fd == 0 ) x = (int)GetStdHandle (STD_INPUT_HANDLE); else if (fd == 1) x = (int)GetStdHandle (STD_OUTPUT_HANDLE); else if (fd == 2) x = (int)GetStdHandle (STD_ERROR_HANDLE); else x = fd; if (x == -1) log_debug ("GetStdHandle(%d) failed: %s\n", fd, w32_strerror (0)); fd = x; } #endif #endif return fd; } void iobuf_skip_rest(IOBUF a, unsigned long n, int partial) { if ( partial ) { for (;;) { if (a->nofast || a->d.start >= a->d.len) { if (iobuf_readbyte (a) == -1) { break; } } else { unsigned long count = a->d.len - a->d.start; a->nbytes += count; a->d.start = a->d.len; } } } else { unsigned long remaining = n; while (remaining > 0) { if (a->nofast || a->d.start >= a->d.len) { if (iobuf_readbyte (a) == -1) { break; } --remaining; } else { unsigned long count = a->d.len - a->d.start; if (count > remaining) { count = remaining; } a->nbytes += count; a->d.start += count; remaining -= count; } } } } gnupg-1.4.20/util/assuan-connect.c0000644000175000017500000000411612635262326013712 00000000000000/* assuan-connect.c - Establish a connection (client) * Copyright (C) 2001, 2002 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include #include #include #ifndef HAVE_W32_SYSTEM #include #endif #include "assuan-defs.h" /* Create a new context. */ int _assuan_new_context (assuan_context_t *r_ctx) { assuan_context_t ctx; *r_ctx = NULL; ctx = xcalloc (1, sizeof *ctx); ctx->input_fd = -1; ctx->output_fd = -1; ctx->inbound.fd = -1; ctx->outbound.fd = -1; ctx->io = NULL; ctx->listen_fd = -1; *r_ctx = ctx; return 0; } void _assuan_release_context (assuan_context_t ctx) { if (ctx) { xfree (ctx->hello_line); xfree (ctx->okay_line); xfree (ctx); } } /* Disconnect and release the context CTX. */ void assuan_disconnect (assuan_context_t ctx) { if (ctx) { assuan_write_line (ctx, "BYE"); ctx->finish_handler (ctx); ctx->deinit_handler (ctx); ctx->deinit_handler = NULL; _assuan_release_context (ctx); } } /* Return the PID of the peer or -1 if not known. */ pid_t assuan_get_pid (assuan_context_t ctx) { return (ctx && ctx->pid)? ctx->pid : -1; } gnupg-1.4.20/util/pka.c0000644000175000017500000001724312635262326011551 00000000000000/* pka.c - DNS Public Key Association CERT record access * Copyright (C) 1998-2015 Free Software Foundation, Inc. * Copyright (C) 1998-2015 Werner Koch * * 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 3 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, see . */ #include #include #include #include #include #include "memory.h" #include "types.h" #include "cipher.h" #include "util.h" static int string_has_ctrl_or_space (const char *string) { for (; *string; string++ ) if (!(*string & 0x80) && *string <= 0x20) return 1; return 0; } /* Return true if STRING has two consecutive '.' after an '@' sign. */ static int has_dotdot_after_at (const char *string) { string = strchr (string, '@'); if (!string) return 0; /* No at-sign. */ string++; return !!strstr (string, ".."); } /* Return the mailbox (local-part@domain) form a standard user id. Caller must free the result. Returns NULL if no valid mailbox was found (or we are out of memory). */ static char * mailbox_from_userid (const char *userid) { const char *s, *s_end; size_t len; char *result = NULL; s = strchr (userid, '<'); if (s) { /* Seems to be a standard user id. */ s++; s_end = strchr (s, '>'); if (s_end && s_end > s) { len = s_end - s; result = xmalloc (len + 1); strncpy (result, s, len); result[len] = 0; /* Apply some basic checks on the address. We do not use is_valid_mailbox because those checks are too strict. */ if (string_count_chr (result, '@') != 1 /* Need exactly one '@. */ || *result == '@' /* local-part missing. */ || result[len-1] == '@' /* domain missing. */ || result[len-1] == '.' /* ends with a dot. */ || string_has_ctrl_or_space (result) || has_dotdot_after_at (result)) { xfree (result); result = NULL; errno = EINVAL; } } else errno = EINVAL; } else if (is_valid_mailbox (userid)) { /* The entire user id is a mailbox. Return that one. Note that this fallback method has some restrictions on the valid syntax of the mailbox. However, those who want weird addresses should know about it and use the regular <...> syntax. */ result = xtrystrdup (userid); } else errno = EINVAL; return result? ascii_strlwr (result) : NULL; } /* Zooko's base32 variant. See RFC-6189 and http://philzimmermann.com/docs/human-oriented-base-32-encoding.txt Caller must xfree the returned string. Returns NULL and sets ERRNO on error. To avoid integer overflow DATALEN is limited to 2^16 bytes. Note, that DATABITS is measured in bits!. */ static char * zb32_encode (const void *data, unsigned int databits) { static char const zb32asc[32] = {'y','b','n','d','r','f','g','8', 'e','j','k','m','c','p','q','x', 'o','t','1','u','w','i','s','z', 'a','3','4','5','h','7','6','9' }; const unsigned char *s; char *output, *d; size_t datalen; datalen = (databits + 7) / 8; if (datalen > (1 << 16)) { errno = EINVAL; return NULL; } d = output = xtrymalloc (8 * (datalen / 5) + 2 * (datalen % 5) - ((datalen%5)>2) + 1); if (!output) return NULL; /* I use straightforward code. The compiler should be able to do a better job on optimization than me and it is easier to read. */ for (s = data; datalen >= 5; s += 5, datalen -= 5) { *d++ = zb32asc[((s[0] ) >> 3) ]; *d++ = zb32asc[((s[0] & 7) << 2) | (s[1] >> 6) ]; *d++ = zb32asc[((s[1] & 63) >> 1) ]; *d++ = zb32asc[((s[1] & 1) << 4) | (s[2] >> 4) ]; *d++ = zb32asc[((s[2] & 15) << 1) | (s[3] >> 7) ]; *d++ = zb32asc[((s[3] & 127) >> 2) ]; *d++ = zb32asc[((s[3] & 3) << 3) | (s[4] >> 5) ]; *d++ = zb32asc[((s[4] & 31) ) ]; } switch (datalen) { case 4: *d++ = zb32asc[((s[0] ) >> 3) ]; *d++ = zb32asc[((s[0] & 7) << 2) | (s[1] >> 6) ]; *d++ = zb32asc[((s[1] & 63) >> 1) ]; *d++ = zb32asc[((s[1] & 1) << 4) | (s[2] >> 4) ]; *d++ = zb32asc[((s[2] & 15) << 1) | (s[3] >> 7) ]; *d++ = zb32asc[((s[3] & 127) >> 2) ]; *d++ = zb32asc[((s[3] & 3) << 3) ]; break; case 3: *d++ = zb32asc[((s[0] ) >> 3) ]; *d++ = zb32asc[((s[0] & 7) << 2) | (s[1] >> 6) ]; *d++ = zb32asc[((s[1] & 63) >> 1) ]; *d++ = zb32asc[((s[1] & 1) << 4) | (s[2] >> 4) ]; *d++ = zb32asc[((s[2] & 15) << 1) ]; break; case 2: *d++ = zb32asc[((s[0] ) >> 3) ]; *d++ = zb32asc[((s[0] & 7) << 2) | (s[1] >> 6) ]; *d++ = zb32asc[((s[1] & 63) >> 1) ]; *d++ = zb32asc[((s[1] & 1) << 4) ]; break; case 1: *d++ = zb32asc[((s[0] ) >> 3) ]; *d++ = zb32asc[((s[0] & 7) << 2) ]; break; default: break; } *d = 0; /* Need to strip some bytes if not a multiple of 40. */ output[(databits + 5 - 1) / 5] = 0; return output; } /* For the given email ADDRESS lookup the PKA information in the DNS. On success the fingerprint is stored at FPRBUF and the URI will be returned in an allocated buffer. Note that the URI might be a zero length string as this information is optional. Caller must xfree the returned string. FPRBUFLEN gives the size of the expected fingerprint (usually 20). On error NULL is returned and the 20 bytes at FPR are not defined. */ char * get_pka_info (const char *address, void *fprbuf, size_t fprbuflen) { char *result = NULL; char *mbox; char *domain; /* Points to mbox. */ char hashbuf[20]; char *hash = NULL; char *name = NULL; unsigned char *fpr = NULL; size_t fpr_len; char *url = NULL; mbox = mailbox_from_userid (address); if (!mbox) goto leave; domain = strchr (mbox, '@'); if (!domain) goto leave; *domain++ = 0; sha1_hash_buffer (hashbuf, mbox, strlen (mbox)); hash = zb32_encode (hashbuf, 8*20); if (!hash) goto leave; name = strconcat (hash, "._pka.", domain, NULL); if (!name) goto leave; if (get_cert (name, 1, 16384, NULL, &fpr, &fpr_len, &url)) goto leave; if (!fpr) goto leave; /* Return the fingerprint. */ if (fpr_len != fprbuflen) { /* fprintf (stderr, "get_dns_cert failed: fprlen (%zu/%zu)\n", */ /* fpr_len, fprbuflen); */ goto leave; } memcpy (fprbuf, fpr, fpr_len); /* We return the URL or an empty string. */ if (!url) url = xcalloc (1, 1); result = url; url = NULL; leave: xfree (fpr); xfree (url); xfree (name); xfree (hash); xfree (mbox); return result; } gnupg-1.4.20/util/assuan-client.c0000644000175000017500000002025512635262326013541 00000000000000/* assuan-client.c - client functions * Copyright (C) 2001, 2002 Free Software Foundation, Inc. * Copyright (C) 2005 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #include #include #include #include #include #include #include #include "assuan-defs.h" #define xtoi_1(p) (*(p) <= '9'? (*(p)- '0'): \ *(p) <= 'F'? (*(p)-'A'+10):(*(p)-'a'+10)) #define xtoi_2(p) ((xtoi_1(p) * 16) + xtoi_1((p)+1)) assuan_error_t _assuan_read_from_server (assuan_context_t ctx, int *okay, int *off) { char *line; int linelen; assuan_error_t rc; *okay = 0; *off = 0; do { rc = _assuan_read_line (ctx); if (rc) return rc; line = ctx->inbound.line; linelen = ctx->inbound.linelen; } while (*line == '#' || !linelen); if (linelen >= 1 && line[0] == 'D' && line[1] == ' ') { *okay = 2; /* data line */ *off = 2; } else if (linelen >= 1 && line[0] == 'S' && (line[1] == '\0' || line[1] == ' ')) { *okay = 4; *off = 1; while (line[*off] == ' ') ++*off; } else if (linelen >= 2 && line[0] == 'O' && line[1] == 'K' && (line[2] == '\0' || line[2] == ' ')) { *okay = 1; *off = 2; while (line[*off] == ' ') ++*off; } else if (linelen >= 3 && line[0] == 'E' && line[1] == 'R' && line[2] == 'R' && (line[3] == '\0' || line[3] == ' ')) { *okay = 0; *off = 3; while (line[*off] == ' ') ++*off; } else if (linelen >= 7 && line[0] == 'I' && line[1] == 'N' && line[2] == 'Q' && line[3] == 'U' && line[4] == 'I' && line[5] == 'R' && line[6] == 'E' && (line[7] == '\0' || line[7] == ' ')) { *okay = 3; *off = 7; while (line[*off] == ' ') ++*off; } else if (linelen >= 3 && line[0] == 'E' && line[1] == 'N' && line[2] == 'D' && (line[3] == '\0' || line[3] == ' ')) { *okay = 5; /* end line */ *off = 3; } else rc = ASSUAN_Invalid_Response; return rc; } assuan_error_t assuan_transact (assuan_context_t ctx, const char *command, assuan_error_t (*data_cb)(void *, const void *, size_t), void *data_cb_arg, assuan_error_t (*inquire_cb)(void*, const char *), void *inquire_cb_arg, assuan_error_t (*status_cb)(void*, const char *), void *status_cb_arg) { return assuan_transact2 (ctx, command, data_cb, data_cb_arg, inquire_cb, inquire_cb_arg, status_cb, status_cb_arg, NULL, NULL); } /** * assuan_transact2: * @ctx: The Assuan context * @command: Coimmand line to be send to server * @data_cb: Callback function for data lines * @data_cb_arg: first argument passed to @data_cb * @inquire_cb: Callback function for a inquire response * @inquire_cb_arg: first argument passed to @inquire_cb * @status_cb: Callback function for a status response * @status_cb_arg: first argument passed to @status_cb * @okay_cb: Callback function for the final OK response * @okay_cb_arg: first argument passed to @okay_cb * * FIXME: Write documentation * * Return value: 0 on success or error code. The error code may be * the one one returned by the server in error lines or from the * callback functions. **/ assuan_error_t assuan_transact2 (assuan_context_t ctx, const char *command, assuan_error_t (*data_cb)(void *, const void *, size_t), void *data_cb_arg, assuan_error_t (*inquire_cb)(void*, const char *), void *inquire_cb_arg, assuan_error_t (*status_cb)(void*, const char *), void *status_cb_arg, assuan_error_t (*okay_cb)(void*, const char *), void *okay_cb_arg) { int rc, okay, off; unsigned char *line; int linelen; rc = assuan_write_line (ctx, command); if (rc) return rc; if (*command == '#' || !*command) return 0; /* Don't expect a response for a comment line. */ again: rc = _assuan_read_from_server (ctx, &okay, &off); if (rc) return rc; /* error reading from server */ line = ctx->inbound.line + off; linelen = ctx->inbound.linelen - off; if (!okay) { rc = atoi (line); if (rc < 100) rc = ASSUAN_Server_Fault; } else if (okay == 1) /* Received OK. */ { if (okay_cb) { rc = okay_cb (okay_cb_arg, line); /* We better wipe out the buffer after processing it. This is no real guarantee that it won't get swapped out but at least for the standard cases we can make sure that a passphrase returned with the OK line is rendered unreadable. In fact the current Assuan interface suffers from the problem that it is not possible to do assuan I/O through secure memory. There is no easy solution given the current implementation but we need to address it sooner or later. The problem was introduced with gpg-agent's GET_PASPHRASE command but it might also make sense to have a way to convey sessions keys through secured memory. Note that the old implementation in gpg for accessing the passphrase in fact used secure memory but had the drawback of using a limited and not fully conforming Assuan implementation - given that pinentry and gpg-agent neither use secured memory for Assuan I/O, it is negligible to drop the old implementation in gpg's passphrase.c and use the wipememory workaround here. */ memset (line, 0, strlen (line)); } } else if (okay == 2) { if (!data_cb) rc = ASSUAN_No_Data_Callback; else { unsigned char *s, *d; for (s=d=line; linelen; linelen--) { if (*s == '%' && linelen > 2) { /* handle escaping */ s++; *d++ = xtoi_2 (s); s += 2; linelen -= 2; } else *d++ = *s++; } *d = 0; /* add a hidden string terminator */ rc = data_cb (data_cb_arg, line, d - line); if (!rc) goto again; } } else if (okay == 3) { if (!inquire_cb) { assuan_write_line (ctx, "END"); /* get out of inquire mode */ _assuan_read_from_server (ctx, &okay, &off); /* dummy read */ rc = ASSUAN_No_Inquire_Callback; } else { rc = inquire_cb (inquire_cb_arg, line); if (!rc) rc = assuan_send_data (ctx, NULL, 0); /* flush and send END */ if (!rc) goto again; } } else if (okay == 4) { if (status_cb) rc = status_cb (status_cb_arg, line); if (!rc) goto again; } else if (okay == 5) { if (!data_cb) rc = ASSUAN_No_Data_Callback; else { rc = data_cb (data_cb_arg, NULL, 0); if (!rc) goto again; } } return rc; } gnupg-1.4.20/util/estream-printf.c0000644000175000017500000014065712635262326013744 00000000000000/* estream-printf.c - Versatile C-99 compliant printf formatting * Copyright (C) 2007, 2008, 2009 g10 Code GmbH * * This file is part of Libestream. * * Libestream 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. * * Libestream 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 Libestream; if not, see . */ /* Required autoconf tests: AC_TYPE_LONG_LONG_INT defines HAVE_LONG_LONG_INT AC_TYPE_LONG_DOUBLE defines HAVE_LONG_DOUBLE AC_TYPE_INTMAX_T defines HAVE_INTMAX_T AC_TYPE_UINTMAX_T defines HAVE_UINTMAX_T AC_CHECK_TYPES([ptrdiff_t]) defines HAVE_PTRDIFF_T AC_CHECK_SIZEOF([unsigned long]) defines SIZEOF_UNSIGNED_LONG AC_CHECK_SIZEOF([void *]) defines SIZEOF_VOID_P HAVE_LANGINFO_THOUSANDS_SEP Note that the file estream.m4 provides the autoconf macro ESTREAM_PRINTF_INIT which runs all required checks. See estream-printf.h for ways to tune this code. Missing stuff: wchar and wint_t thousands_sep in pr_float. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #include #include #include #if defined(HAVE_INTMAX_T) || defined(HAVE_UINTMAX_T) # ifdef HAVE_STDINT_H # include # endif #endif #ifdef HAVE_LANGINFO_THOUSANDS_SEP #include #endif #ifdef _ESTREAM_PRINTF_EXTRA_INCLUDE # include _ESTREAM_PRINTF_EXTRA_INCLUDE #endif #include "estream-printf.h" /* #define DEBUG 1 */ /* Allow redefinition of asprintf used malloc functions. */ #if defined(_ESTREAM_PRINTF_MALLOC) #define my_printf_malloc(a) _ESTREAM_PRINTF_MALLOC((a)) #else #define my_printf_malloc(a) malloc((a)) #endif #if defined(_ESTREAM_PRINTF_FREE) #define my_printf_free(a) _ESTREAM_PRINTF_FREE((a)) #else #define my_printf_free(a) free((a)) #endif /* Calculate array dimension. */ #ifndef DIM #define DIM(array) (sizeof (array) / sizeof (*array)) #endif /* We allow for that many args without requiring malloced memory. */ #define DEFAULT_MAX_ARGSPECS 5 /* We allow for that many values without requiring malloced memory. */ #define DEFAULT_MAX_VALUES 8 /* We allocate this many new array argspec elements each time. */ #define ARGSPECS_BUMP_VALUE 10 /* Special values for the field width and the precision. */ #define NO_FIELD_VALUE (-1) #define STAR_FIELD_VALUE (-2) /* Bit valuues used for the conversion flags. */ #define FLAG_GROUPING 1 #define FLAG_LEFT_JUST 2 #define FLAG_PLUS_SIGN 4 #define FLAG_SPACE_PLUS 8 #define FLAG_ALT_CONV 16 #define FLAG_ZERO_PAD 32 /* Constants used the length modifiers. */ typedef enum { LENMOD_NONE = 0, LENMOD_CHAR, /* "hh" */ LENMOD_SHORT, /* "h" */ LENMOD_LONG, /* "l" */ LENMOD_LONGLONG, /* "ll" */ LENMOD_INTMAX, /* "j" */ LENMOD_SIZET, /* "z" */ LENMOD_PTRDIFF, /* "t" */ LENMOD_LONGDBL /* "L" */ } lenmod_t; /* All the conversion specifiers. */ typedef enum { CONSPEC_UNKNOWN = 0, CONSPEC_DECIMAL, CONSPEC_OCTAL, CONSPEC_UNSIGNED, CONSPEC_HEX, CONSPEC_HEX_UP, CONSPEC_FLOAT, CONSPEC_FLOAT_UP, CONSPEC_EXP, CONSPEC_EXP_UP, CONSPEC_F_OR_G, CONSPEC_F_OR_G_UP, CONSPEC_HEX_EXP, CONSPEC_HEX_EXP_UP, CONSPEC_CHAR, CONSPEC_STRING, CONSPEC_POINTER, CONSPEC_STRERROR, CONSPEC_BYTES_SO_FAR } conspec_t; /* Constants describing all the suppoorted types. Note that we list all the types we know about even if certain types are not available on this system. */ typedef enum { VALTYPE_UNSUPPORTED = 0, /* Artificial type for error detection. */ VALTYPE_CHAR, VALTYPE_SCHAR, VALTYPE_UCHAR, VALTYPE_SHORT, VALTYPE_USHORT, VALTYPE_INT, VALTYPE_UINT, VALTYPE_LONG, VALTYPE_ULONG, VALTYPE_LONGLONG, VALTYPE_ULONGLONG, VALTYPE_DOUBLE, VALTYPE_LONGDOUBLE, VALTYPE_STRING, VALTYPE_INTMAX, VALTYPE_UINTMAX, VALTYPE_SIZE, VALTYPE_PTRDIFF, VALTYPE_POINTER, VALTYPE_CHAR_PTR, VALTYPE_SCHAR_PTR, VALTYPE_SHORT_PTR, VALTYPE_INT_PTR, VALTYPE_LONG_PTR, VALTYPE_LONGLONG_PTR, VALTYPE_INTMAX_PTR, VALTYPE_SIZE_PTR, VALTYPE_PTRDIFF_PTR } valtype_t; /* A union used to store the actual values. */ typedef union { char a_char; signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_long; unsigned long int a_ulong; #ifdef HAVE_LONG_LONG_INT long long int a_longlong; unsigned long long int a_ulonglong; #endif double a_double; #ifdef HAVE_LONG_DOUBLE long double a_longdouble; #endif const char *a_string; #ifdef HAVE_INTMAX_T intmax_t a_intmax; #endif #ifdef HAVE_UINTMAX_T intmax_t a_uintmax; #endif size_t a_size; #ifdef HAVE_PTRDIFF_T ptrdiff_t a_ptrdiff; #endif void *a_void_ptr; char *a_char_ptr; signed char *a_schar_ptr; short *a_short_ptr; int *a_int_ptr; long *a_long_ptr; #ifdef HAVE_LONG_LONG_INT long long int *a_longlong_ptr; #endif #ifdef HAVE_INTMAX_T intmax_t *a_intmax_ptr; #endif size_t *a_size_ptr; #ifdef HAVE_PTRDIFF_T ptrdiff_t *a_ptrdiff_ptr; #endif } value_t; /* An object used to keep track of a format option and arguments. */ struct argspec_s { size_t length; /* The length of these args including the percent. */ unsigned int flags; /* The conversion flags (bits defined by FLAG_foo). */ int width; /* The field width. */ int precision; /* The precision. */ lenmod_t lenmod; /* The length modifier. */ conspec_t conspec; /* The conversion specifier. */ int arg_pos; /* The position of the argument. This one may be -1 to indicate that no value is expected (e.g. for "%m"). */ int width_pos; /* The position of the argument for a field width star's value. 0 for not used. */ int precision_pos; /* The position of the argument for the a precision star's value. 0 for not used. */ valtype_t vt; /* The type of the corresponding argument. */ }; typedef struct argspec_s *argspec_t; /* An object to build up a table of values and their types. */ struct valueitem_s { valtype_t vt; /* The type of the value. */ value_t value; /* The value. */ }; typedef struct valueitem_s *valueitem_t; #ifdef DEBUG static void dump_argspecs (argspec_t arg, size_t argcount) { int idx; for (idx=0; argcount; argcount--, arg++, idx++) fprintf (stderr, "%2d: len=%u flags=%u width=%d prec=%d mod=%d " "con=%d vt=%d pos=%d-%d-%d\n", idx, (unsigned int)arg->length, arg->flags, arg->width, arg->precision, arg->lenmod, arg->conspec, arg->vt, arg->arg_pos, arg->width_pos, arg->precision_pos); } #endif /*DEBUG*/ /* Set the vt field for ARG. */ static void compute_type (argspec_t arg) { switch (arg->conspec) { case CONSPEC_UNKNOWN: arg->vt = VALTYPE_UNSUPPORTED; break; case CONSPEC_DECIMAL: switch (arg->lenmod) { case LENMOD_CHAR: arg->vt = VALTYPE_SCHAR; break; case LENMOD_SHORT: arg->vt = VALTYPE_SHORT; break; case LENMOD_LONG: arg->vt = VALTYPE_LONG; break; case LENMOD_LONGLONG: arg->vt = VALTYPE_LONGLONG; break; case LENMOD_INTMAX: arg->vt = VALTYPE_INTMAX; break; case LENMOD_SIZET: arg->vt = VALTYPE_SIZE; break; case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF; break; default: arg->vt = VALTYPE_INT; break; } break; case CONSPEC_OCTAL: case CONSPEC_UNSIGNED: case CONSPEC_HEX: case CONSPEC_HEX_UP: switch (arg->lenmod) { case LENMOD_CHAR: arg->vt = VALTYPE_UCHAR; break; case LENMOD_SHORT: arg->vt = VALTYPE_USHORT; break; case LENMOD_LONG: arg->vt = VALTYPE_ULONG; break; case LENMOD_LONGLONG: arg->vt = VALTYPE_ULONGLONG; break; case LENMOD_INTMAX: arg->vt = VALTYPE_UINTMAX; break; case LENMOD_SIZET: arg->vt = VALTYPE_SIZE; break; case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF; break; default: arg->vt = VALTYPE_UINT; break; } break; case CONSPEC_FLOAT: case CONSPEC_FLOAT_UP: case CONSPEC_EXP: case CONSPEC_EXP_UP: case CONSPEC_F_OR_G: case CONSPEC_F_OR_G_UP: case CONSPEC_HEX_EXP: case CONSPEC_HEX_EXP_UP: switch (arg->lenmod) { case LENMOD_LONGDBL: arg->vt = VALTYPE_LONGDOUBLE; break; case LENMOD_LONG: arg->vt = VALTYPE_DOUBLE; break; default: arg->vt = VALTYPE_DOUBLE; break; } break; case CONSPEC_CHAR: arg->vt = VALTYPE_INT; break; case CONSPEC_STRING: arg->vt = VALTYPE_STRING; break; case CONSPEC_POINTER: arg->vt = VALTYPE_POINTER; break; case CONSPEC_STRERROR: arg->vt = VALTYPE_STRING; break; case CONSPEC_BYTES_SO_FAR: switch (arg->lenmod) { case LENMOD_CHAR: arg->vt = VALTYPE_SCHAR_PTR; break; case LENMOD_SHORT: arg->vt = VALTYPE_SHORT_PTR; break; case LENMOD_LONG: arg->vt = VALTYPE_LONG_PTR; break; case LENMOD_LONGLONG: arg->vt = VALTYPE_LONGLONG_PTR; break; case LENMOD_INTMAX: arg->vt = VALTYPE_INTMAX_PTR; break; case LENMOD_SIZET: arg->vt = VALTYPE_SIZE_PTR; break; case LENMOD_PTRDIFF: arg->vt = VALTYPE_PTRDIFF_PTR; break; default: arg->vt = VALTYPE_INT_PTR; break; } break; } } /* Parse the FORMAT string and populate the specification array stored at the address ARGSPECS_ADDR. The caller has provided enough space to store up to MAX_ARGSPECS in that buffer. The function may however ignore the provided buffer and malloc a larger one. On success the addrrss of that larger buffer will be stored at ARGSPECS_ADDR. The actual number of specifications will be returned at R_ARGSPECS_COUNT. */ static int parse_format (const char *format, argspec_t *argspecs_addr, size_t max_argspecs, size_t *r_argspecs_count) { const char *s; argspec_t argspecs = *argspecs_addr; argspec_t arg; size_t argcount = 0; if (!format) goto leave_einval; for (; *format; format++) { unsigned int flags; int width, precision; lenmod_t lenmod; conspec_t conspec; int arg_pos, width_pos, precision_pos; if (*format != '%') continue; s = ++format; if (!*s) goto leave_einval; if (*s == '%') continue; /* Just a quoted percent. */ /* First check whether there is a positional argument. */ arg_pos = 0; /* No positional argument given. */ if (*s >= '1' && *s <= '9') { const char *save_s = s; arg_pos = (*s++ - '0'); for (; *s >= '0' && *s <= '9'; s++) arg_pos = 10*arg_pos + (*s - '0'); if (arg_pos < 0) goto leave_einval; /* Overflow during conversion. */ if (*s == '$') s++; else { arg_pos = 0; s = save_s; } } /* Parse the flags. */ flags = 0; for ( ; *s; s++) { switch (*s) { case '\'': flags |= FLAG_GROUPING; break; case '-': flags |= FLAG_LEFT_JUST; break; case '+': flags |= FLAG_PLUS_SIGN; break; case ' ': flags |= FLAG_SPACE_PLUS; break; case '#': flags |= FLAG_ALT_CONV; break; case '0': flags |= FLAG_ZERO_PAD; break; default: goto flags_parsed; } } flags_parsed: /* Parse the field width. */ width_pos = 0; if (*s == '*') { width = STAR_FIELD_VALUE; s++; /* If we have a positional argument, another one might also be used to give the position of the star's value. */ if (arg_pos && *s >= '1' && *s <= '9') { width_pos = (*s++ - '0'); for (; *s >= '0' && *s <= '9'; s++) width_pos = 10*width_pos + (*s - '0'); if (width_pos < 1) goto leave_einval; /* Overflow during conversion. */ if (*s != '$') goto leave_einval; /* Not followed by $. */ s++; } } else if ( *s >= '0' && *s <= '9') { width = (*s++ - '0'); for (; *s >= '0' && *s <= '9'; s++) { if (!width && *s == '0') goto leave_einval; /* Leading zeroes are not allowed. Fixme: check what other implementations do. */ width = 10*width + (*s - '0'); } if (width < 0) goto leave_einval; /* Overflow during conversion. */ } else width = NO_FIELD_VALUE; /* Parse the precision. */ precision_pos = 0; precision = NO_FIELD_VALUE; if (*s == '.') { int ignore_value = (s[1] == '-'); s++; if (*s == '*') { precision = STAR_FIELD_VALUE; s++; /* If we have a positional argument, another one might also be used to give the position of the star's value. */ if (arg_pos && *s >= '1' && *s <= '9') { precision_pos = (*s++ - '0'); for (; *s >= '0' && *s <= '9'; s++) precision_pos = 10*precision_pos + (*s - '0'); if (precision_pos < 1) goto leave_einval; /* Overflow during conversion. */ if (*s != '$') goto leave_einval; /* Not followed by $. */ s++; } } else if ( *s >= '0' && *s <= '9') { precision = (*s++ - '0'); for (; *s >= '0' && *s <= '9'; s++) { if (!precision && *s == '0') goto leave_einval; /* Leading zeroes are not allowed. Fixme: check what other implementations do. */ precision = 10*precision + (*s - '0'); } if (precision < 0) goto leave_einval; /* Overflow during conversion. */ } else precision = 0; if (ignore_value) precision = NO_FIELD_VALUE; } /* Parse the length modifiers. */ switch (*s) { case 'h': if (s[1] == 'h') { lenmod = LENMOD_CHAR; s++; } else lenmod = LENMOD_SHORT; s++; break; case 'l': if (s[1] == 'l') { lenmod = LENMOD_LONGLONG; s++; } else lenmod = LENMOD_LONG; s++; break; case 'j': lenmod = LENMOD_INTMAX; s++; break; case 'z': lenmod = LENMOD_SIZET; s++; break; case 't': lenmod = LENMOD_PTRDIFF; s++; break; case 'L': lenmod = LENMOD_LONGDBL; s++; break; default: lenmod = LENMOD_NONE; break; } /* Parse the conversion specifier. */ switch (*s) { case 'd': case 'i': conspec = CONSPEC_DECIMAL; break; case 'o': conspec = CONSPEC_OCTAL; break; case 'u': conspec = CONSPEC_UNSIGNED; break; case 'x': conspec = CONSPEC_HEX; break; case 'X': conspec = CONSPEC_HEX_UP; break; case 'f': conspec = CONSPEC_FLOAT; break; case 'F': conspec = CONSPEC_FLOAT_UP; break; case 'e': conspec = CONSPEC_EXP; break; case 'E': conspec = CONSPEC_EXP_UP; break; case 'g': conspec = CONSPEC_F_OR_G; break; case 'G': conspec = CONSPEC_F_OR_G_UP; break; case 'a': conspec = CONSPEC_HEX_EXP; break; case 'A': conspec = CONSPEC_HEX_EXP_UP; break; case 'c': conspec = CONSPEC_CHAR; break; case 's': conspec = CONSPEC_STRING; break; case 'p': conspec = CONSPEC_POINTER; break; case 'n': conspec = CONSPEC_BYTES_SO_FAR; break; case 'C': conspec = CONSPEC_CHAR; lenmod = LENMOD_LONG; break; case 'S': conspec = CONSPEC_STRING; lenmod = LENMOD_LONG; break; case 'm': conspec = CONSPEC_STRERROR; arg_pos = -1; break; default: conspec = CONSPEC_UNKNOWN; } /* Save the args. */ if (argcount >= max_argspecs) { /* We either need to allocate a new array instead of the caller provided one or realloc the array. Instead of using realloc we allocate a new one and release the original one then. */ size_t n, newmax; argspec_t newarg; newmax = max_argspecs + ARGSPECS_BUMP_VALUE; if (newmax <= max_argspecs) goto leave_einval; /* Too many arguments. */ newarg = calloc (newmax, sizeof *newarg); if (!newarg) goto leave; for (n=0; n < argcount; n++) newarg[n] = argspecs[n]; if (argspecs != *argspecs_addr) free (argspecs); argspecs = newarg; max_argspecs = newmax; } arg = argspecs + argcount; arg->length = s - format + 2; arg->flags = flags; arg->width = width; arg->precision = precision; arg->lenmod = lenmod; arg->conspec = conspec; arg->arg_pos = arg_pos; arg->width_pos = width_pos; arg->precision_pos = precision_pos; compute_type (arg); argcount++; format = s; } *argspecs_addr = argspecs; *r_argspecs_count = argcount; return 0; /* Success. */ leave_einval: errno = EINVAL; leave: if (argspecs != *argspecs_addr) free (argspecs); *argspecs_addr = NULL; return -1; } /* This function reads all the values as specified by VALUETABLE into VALUETABLE. The values are expected in VAARGS. The function returns -1 if a specified type is not supported. */ static int read_values (valueitem_t valuetable, size_t valuetable_len, va_list vaargs) { int validx; for (validx=0; validx < valuetable_len; validx++) { value_t *value = &valuetable[validx].value; valtype_t vt = valuetable[validx].vt; switch (vt) { case VALTYPE_CHAR: value->a_char = va_arg (vaargs, int); break; case VALTYPE_CHAR_PTR: value->a_char_ptr = va_arg (vaargs, char *); break; case VALTYPE_SCHAR: value->a_schar = va_arg (vaargs, int); break; case VALTYPE_SCHAR_PTR: value->a_schar_ptr = va_arg (vaargs, signed char *); break; case VALTYPE_UCHAR: value->a_uchar = va_arg (vaargs, int); break; case VALTYPE_SHORT: value->a_short = va_arg (vaargs, int); break; case VALTYPE_USHORT: value->a_ushort = va_arg (vaargs, int); break; case VALTYPE_SHORT_PTR: value->a_short_ptr = va_arg (vaargs, short *); break; case VALTYPE_INT: value->a_int = va_arg (vaargs, int); break; case VALTYPE_INT_PTR: value->a_int_ptr = va_arg (vaargs, int *); break; case VALTYPE_UINT: value->a_uint = va_arg (vaargs, unsigned int); break; case VALTYPE_LONG: value->a_long = va_arg (vaargs, long); break; case VALTYPE_ULONG: value->a_ulong = va_arg (vaargs, unsigned long); break; case VALTYPE_LONG_PTR: value->a_long_ptr = va_arg (vaargs, long *); break; #ifdef HAVE_LONG_LONG_INT case VALTYPE_LONGLONG: value->a_longlong = va_arg (vaargs, long long int); break; case VALTYPE_ULONGLONG: value->a_ulonglong = va_arg (vaargs, unsigned long long int); break; case VALTYPE_LONGLONG_PTR: value->a_longlong_ptr = va_arg (vaargs, long long *); break; #endif case VALTYPE_DOUBLE: value->a_double = va_arg (vaargs, double); break; #ifdef HAVE_LONG_DOUBLE case VALTYPE_LONGDOUBLE: value->a_longdouble = va_arg (vaargs, long double); break; #endif case VALTYPE_STRING: value->a_string = va_arg (vaargs, const char *); break; case VALTYPE_POINTER: value->a_void_ptr = va_arg (vaargs, void *); break; #ifdef HAVE_INTMAX_T case VALTYPE_INTMAX: value->a_intmax = va_arg (vaargs, intmax_t); break; case VALTYPE_INTMAX_PTR: value->a_intmax_ptr = va_arg (vaargs, intmax_t *); break; #endif #ifdef HAVE_UINTMAX_T case VALTYPE_UINTMAX: value->a_uintmax = va_arg (vaargs, uintmax_t); break; #endif case VALTYPE_SIZE: value->a_size = va_arg (vaargs, size_t); break; case VALTYPE_SIZE_PTR: value->a_size_ptr = va_arg (vaargs, size_t *); break; #ifdef HAVE_PTRDIFF_T case VALTYPE_PTRDIFF: value->a_ptrdiff = va_arg (vaargs, ptrdiff_t); break; case VALTYPE_PTRDIFF_PTR: value->a_ptrdiff_ptr = va_arg (vaargs, ptrdiff_t *); break; #endif default: /* Unsupported type. */ return -1; } } return 0; } /* Output COUNT padding characters PADCHAR and update NBYTES by the number of bytes actually written. */ static int pad_out (estream_printf_out_t outfnc, void *outfncarg, int padchar, int count, size_t *nbytes) { char buf[32]; size_t n; int rc; while (count > 0) { n = (count <= sizeof buf)? count : sizeof buf; memset (buf, padchar, n); rc = outfnc (outfncarg, buf, n); if (rc) return rc; *nbytes += n; count -= n; } return 0; } /* "d,i,o,u,x,X" formatting. OUTFNC and OUTFNCARG describes the output routine, ARG gives the argument description and VALUE the actual value (its type is available through arg->vt). */ static int pr_integer (estream_printf_out_t outfnc, void *outfncarg, argspec_t arg, value_t value, size_t *nbytes) { int rc; #ifdef HAVE_LONG_LONG_INT unsigned long long aulong; #else unsigned long aulong; #endif char numbuf[100]; char *p, *pend; size_t n; char signchar = 0; int n_prec; /* Number of extra precision digits required. */ int n_extra; /* Extra number of prefix or sign characters. */ if (arg->conspec == CONSPEC_DECIMAL) { #ifdef HAVE_LONG_LONG_INT long long along; #else long along; #endif switch (arg->vt) { case VALTYPE_SHORT: along = value.a_short; break; case VALTYPE_INT: along = value.a_int; break; case VALTYPE_LONG: along = value.a_long; break; #ifdef HAVE_LONG_LONG_INT case VALTYPE_LONGLONG: along = value.a_longlong; break; case VALTYPE_SIZE: along = value.a_size; break; # ifdef HAVE_INTMAX_T case VALTYPE_INTMAX: along = value.a_intmax; break; # endif # ifdef HAVE_PTRDIFF_T case VALTYPE_PTRDIFF: along = value.a_ptrdiff; break; # endif #endif /*HAVE_LONG_LONG_INT*/ default: return -1; } if (along < 0) { aulong = -along; signchar = '-'; } else aulong = along; } else { switch (arg->vt) { case VALTYPE_USHORT: aulong = value.a_ushort; break; case VALTYPE_UINT: aulong = value.a_uint; break; case VALTYPE_ULONG: aulong = value.a_ulong; break; #ifdef HAVE_LONG_LONG_INT case VALTYPE_ULONGLONG: aulong = value.a_ulonglong; break; case VALTYPE_SIZE: aulong = value.a_size; break; # ifdef HAVE_UINTMAX_T case VALTYPE_UINTMAX: aulong = value.a_uintmax; break; # endif # ifdef HAVE_PTRDIFF_T case VALTYPE_PTRDIFF: aulong = value.a_ptrdiff; break; # endif #endif /*HAVE_LONG_LONG_INT*/ default: return -1; } } if (signchar == '-') ; else if ((arg->flags & FLAG_PLUS_SIGN)) signchar = '+'; else if ((arg->flags & FLAG_SPACE_PLUS)) signchar = ' '; n_extra = !!signchar; /* We build the string up backwards. */ p = pend = numbuf + DIM(numbuf); if ((!aulong && !arg->precision)) ; else if (arg->conspec == CONSPEC_DECIMAL || arg->conspec == CONSPEC_UNSIGNED) { int grouping = -1; const char * grouping_string = #ifdef HAVE_LANGINFO_THOUSANDS_SEP nl_langinfo(THOUSANDS_SEP); #else "'"; #endif do { if ((arg->flags & FLAG_GROUPING) && (++grouping == 3) && *grouping_string) { *--p = *grouping_string; grouping = 0; } *--p = '0' + (aulong % 10); aulong /= 10; } while (aulong); } else if (arg->conspec == CONSPEC_OCTAL) { do { *--p = '0' + (aulong % 8); aulong /= 8; } while (aulong); if ((arg->flags & FLAG_ALT_CONV) && *p != '0') *--p = '0'; } else /* HEX or HEXUP */ { const char *digits = ((arg->conspec == CONSPEC_HEX) ? "0123456789abcdef" : "0123456789ABCDEF"); do { *--p = digits[(aulong % 16)]; aulong /= 16; } while (aulong); if ((arg->flags & FLAG_ALT_CONV)) n_extra += 2; } n = pend - p; if ((arg->flags & FLAG_ZERO_PAD) && arg->precision == NO_FIELD_VALUE && !(arg->flags & FLAG_LEFT_JUST) && n && arg->width - n_extra > n ) n_prec = arg->width - n_extra - n; else if (arg->precision > 0 && arg->precision > n) n_prec = arg->precision - n; else n_prec = 0; if (!(arg->flags & FLAG_LEFT_JUST) && arg->width >= 0 && arg->width - n_extra > n && arg->width - n_extra - n >= n_prec ) { rc = pad_out (outfnc, outfncarg, ' ', arg->width - n_extra - n - n_prec, nbytes); if (rc) return rc; } if (signchar) { rc = outfnc (outfncarg, &signchar, 1); if (rc) return rc; *nbytes += 1; } if ((arg->flags & FLAG_ALT_CONV) && (arg->conspec == CONSPEC_HEX || arg->conspec == CONSPEC_HEX_UP)) { rc = outfnc (outfncarg, arg->conspec == CONSPEC_HEX? "0x": "0X", 2); if (rc) return rc; *nbytes += 2; } if (n_prec) { rc = pad_out (outfnc, outfncarg, '0', n_prec, nbytes); if (rc) return rc; } rc = outfnc (outfncarg, p, pend - p); if (rc) return rc; *nbytes += pend - p; if ((arg->flags & FLAG_LEFT_JUST) && arg->width >= 0 && arg->width - n_extra - n_prec > n) { rc = pad_out (outfnc, outfncarg, ' ', arg->width - n_extra - n_prec - n, nbytes); if (rc) return rc; } return 0; } /* "e,E,f,F,g,G,a,A" formatting. OUTFNC and OUTFNCARG describes the output routine, ARG gives the argument description and VALUE the actual value (its type is available through arg->vt). For portability reasons sprintf is used for the actual formatting. This is useful because sprint is the only standard function to convert a floating number into its ascii representation. To avoid using malloc we just pass the precision to sprintf and do the final formatting with our own code. */ static int pr_float (estream_printf_out_t outfnc, void *outfncarg, argspec_t arg, value_t value, size_t *nbytes) { int rc; #ifdef HAVE_LONG_DOUBLE long double adblfloat = 0; /* Just to please gcc. */ int use_dbl = 0; #endif double afloat; char numbuf[350]; char formatstr[20]; char *p, *pend; size_t n; char signchar = 0; int n_extra; /* Extra number of prefix or sign characters. */ switch (arg->vt) { case VALTYPE_DOUBLE: afloat = value.a_double; break; #ifdef HAVE_LONG_DOUBLE case VALTYPE_LONGDOUBLE: afloat = 0; /* Just to please gcc. */ adblfloat = value.a_longdouble; use_dbl=1; break; #endif default: return -1; } /* We build the string using sprint. */ p = formatstr + sizeof formatstr; *--p = 0; switch (arg->conspec) { case CONSPEC_FLOAT: *--p = 'f'; break; case CONSPEC_FLOAT_UP: *--p = 'F'; break; case CONSPEC_EXP: *--p = 'e'; break; case CONSPEC_EXP_UP: *--p = 'E'; break; case CONSPEC_F_OR_G: *--p = 'g'; break; case CONSPEC_F_OR_G_UP: *--p = 'G'; break; case CONSPEC_HEX_EXP: *--p = 'a'; break; case CONSPEC_HEX_EXP_UP: *--p = 'A'; break; default: return -1; /* Actually a bug. */ } #ifdef HAVE_LONG_DOUBLE if (use_dbl) *--p = 'L'; #endif if (arg->precision != NO_FIELD_VALUE) { /* Limit it to a meaningful value so that even a stupid sprintf won't overflow our buffer. */ n = arg->precision <= 100? arg->precision : 100; do { *--p = '0' + (n % 10); n /= 10; } while (n); *--p = '.'; } if ((arg->flags & FLAG_ALT_CONV)) *--p = '#'; *--p = '%'; #if GNUPG_GCC_VERSION >= 40600 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wformat-nonliteral" #endif #ifdef HAVE_LONG_DOUBLE if (use_dbl) sprintf (numbuf, p, adblfloat); else #endif /*HAVE_LONG_DOUBLE*/ sprintf (numbuf, p, afloat); #if GNUPG_GCC_VERSION >= 40600 # pragma GCC diagnostic pop #endif p = numbuf; n = strlen (numbuf); pend = p + n; if (*p =='-') { signchar = '-'; p++; n--; } else if ((arg->flags & FLAG_PLUS_SIGN)) signchar = '+'; else if ((arg->flags & FLAG_SPACE_PLUS)) signchar = ' '; n_extra = !!signchar; if (!(arg->flags & FLAG_LEFT_JUST) && arg->width >= 0 && arg->width - n_extra > n) { rc = pad_out (outfnc, outfncarg, ' ', arg->width - n_extra - n, nbytes); if (rc) return rc; } if (signchar) { rc = outfnc (outfncarg, &signchar, 1); if (rc) return rc; *nbytes += 1; } rc = outfnc (outfncarg, p, pend - p); if (rc) return rc; *nbytes += pend - p; if ((arg->flags & FLAG_LEFT_JUST) && arg->width >= 0 && arg->width - n_extra > n) { rc = pad_out (outfnc, outfncarg, ' ', arg->width - n_extra - n, nbytes); if (rc) return rc; } return 0; } /* "c" formatting. */ static int pr_char (estream_printf_out_t outfnc, void *outfncarg, argspec_t arg, value_t value, size_t *nbytes) { int rc; char buf[1]; if (arg->vt != VALTYPE_INT) return -1; buf[0] = (unsigned int)value.a_int; rc = outfnc (outfncarg, buf, 1); if(rc) return rc; *nbytes += 1; return 0; } /* "s" formatting. */ static int pr_string (estream_printf_out_t outfnc, void *outfncarg, argspec_t arg, value_t value, size_t *nbytes) { int rc; size_t n; const char *string, *s; if (arg->vt != VALTYPE_STRING) return -1; string = value.a_string; if (!string) string = "(null)"; if (arg->precision >= 0) { for (n=0,s=string; *s && n < arg->precision; s++) n++; } else n = strlen (string); if (!(arg->flags & FLAG_LEFT_JUST) && arg->width >= 0 && arg->width > n ) { rc = pad_out (outfnc, outfncarg, ' ', arg->width - n, nbytes); if (rc) return rc; } rc = outfnc (outfncarg, string, n); if (rc) return rc; *nbytes += n; if ((arg->flags & FLAG_LEFT_JUST) && arg->width >= 0 && arg->width > n) { rc = pad_out (outfnc, outfncarg, ' ', arg->width - n, nbytes); if (rc) return rc; } return 0; } /* "p" formatting. */ static int pr_pointer (estream_printf_out_t outfnc, void *outfncarg, argspec_t arg, value_t value, size_t *nbytes) { int rc; #ifdef HAVE_LONG_LONG_INT unsigned long long aulong; #else unsigned long aulong; #endif char numbuf[100]; char *p, *pend; if (arg->vt != VALTYPE_POINTER) return -1; /* We assume that a pointer can be converted to an unsigned long. That is not correct for a 64 bit Windows, but then we assume that long long is supported and usable for storing a pointer. */ #if defined(HAVE_LONG_LONG_INT) && (SIZEOF_UNSIGNED_LONG < SIZEOF_VOID_P) aulong = (unsigned long long)value.a_void_ptr; #else aulong = (unsigned long)value.a_void_ptr; #endif p = pend = numbuf + DIM(numbuf); do { *--p = "0123456789abcdefx"[(aulong % 16)]; aulong /= 16; } while (aulong); while ((pend-p) < 2*sizeof (aulong)) *--p = '0'; *--p = 'x'; *--p = '0'; rc = outfnc (outfncarg, p, pend - p); if (rc) return rc; *nbytes += pend - p; return 0; } /* "n" pesudo format operation. */ static int pr_bytes_so_far (estream_printf_out_t outfnc, void *outfncarg, argspec_t arg, value_t value, size_t *nbytes) { (void)outfnc; (void)outfncarg; switch (arg->vt) { case VALTYPE_SCHAR_PTR: *value.a_schar_ptr = (signed char)(unsigned int)(*nbytes); break; case VALTYPE_SHORT_PTR: *value.a_short_ptr = (short)(unsigned int)(*nbytes); break; case VALTYPE_LONG_PTR: *value.a_long_ptr = (long)(*nbytes); break; #ifdef HAVE_LONG_LONG_INT case VALTYPE_LONGLONG_PTR: *value.a_longlong_ptr = (long long)(*nbytes); break; #endif #ifdef HAVE_INTMAX_T case VALTYPE_INTMAX_PTR: *value.a_intmax_ptr = (intmax_t)(*nbytes); break; #endif case VALTYPE_SIZE_PTR: *value.a_size_ptr = (*nbytes); break; #ifdef HAVE_PTRDIFF_T case VALTYPE_PTRDIFF_PTR: *value.a_ptrdiff_ptr = (ptrdiff_t)(*nbytes); break; #endif case VALTYPE_INT_PTR: *value.a_int_ptr = (int)(*nbytes); break; default: return -1; /* An unsupported type has been used. */ } return 0; } /* Run the actual formatting. OUTFNC and OUTFNCARG are the output functions. FORMAT is format string ARGSPECS is the parsed format string, ARGSPECS_LEN the number of items in ARGSPECS. VALUETABLE holds the values and may be directly addressed using the position arguments given by ARGSPECS. MYERRNO is used for the "%m" conversion. NBYTES well be updated to reflect the number of bytes send to the output function. */ static int do_format (estream_printf_out_t outfnc, void *outfncarg, const char *format, argspec_t argspecs, size_t argspecs_len, valueitem_t valuetable, int myerrno, size_t *nbytes) { int rc = 0; const char *s; argspec_t arg = argspecs; int argidx = 0; /* Only used for assertion. */ size_t n; value_t value; s = format; while ( *s ) { if (*s != '%') { s++; continue; } if (s != format) { rc = outfnc (outfncarg, format, (n=s-format)); if (rc) return rc; *nbytes += n; } if (s[1] == '%') { /* Note that this code ignores one trailing percent escape - this is however okay as the args parser must have detected this already. */ rc = outfnc (outfncarg, s, 1); if (rc) return rc; *nbytes += 1; s += 2; format = s; continue; } /* Save the next start. */ s += arg->length; format = s; assert (argidx < argspecs_len); argidx++; /* Apply indirect field width and precision values. */ if (arg->width == STAR_FIELD_VALUE) { assert (valuetable[arg->width_pos-1].vt == VALTYPE_INT); arg->width = valuetable[arg->width_pos-1].value.a_int; if (arg->width < 0) { arg->width = -arg->width; arg->flags |= FLAG_LEFT_JUST; } } if (arg->precision == STAR_FIELD_VALUE) { assert (valuetable[arg->precision_pos-1].vt == VALTYPE_INT); arg->precision = valuetable[arg->precision_pos-1].value.a_int; if (arg->precision < 0) arg->precision = NO_FIELD_VALUE; } if (arg->arg_pos == -1 && arg->conspec == CONSPEC_STRERROR) value.a_string = strerror (myerrno); else { assert (arg->vt == valuetable[arg->arg_pos-1].vt); value = valuetable[arg->arg_pos-1].value; } switch (arg->conspec) { case CONSPEC_UNKNOWN: assert (!"bug"); break; case CONSPEC_DECIMAL: case CONSPEC_UNSIGNED: case CONSPEC_OCTAL: case CONSPEC_HEX: case CONSPEC_HEX_UP: rc = pr_integer (outfnc, outfncarg, arg, value, nbytes); break; case CONSPEC_FLOAT: case CONSPEC_FLOAT_UP: case CONSPEC_EXP: case CONSPEC_EXP_UP: case CONSPEC_F_OR_G: case CONSPEC_F_OR_G_UP: case CONSPEC_HEX_EXP: case CONSPEC_HEX_EXP_UP: rc = pr_float (outfnc, outfncarg, arg, value, nbytes); break; case CONSPEC_CHAR: rc = pr_char (outfnc, outfncarg, arg, value, nbytes); break; case CONSPEC_STRING: case CONSPEC_STRERROR: rc = pr_string (outfnc, outfncarg, arg, value, nbytes); break; case CONSPEC_POINTER: rc = pr_pointer (outfnc, outfncarg, arg, value, nbytes); break; case CONSPEC_BYTES_SO_FAR: rc = pr_bytes_so_far (outfnc, outfncarg, arg, value, nbytes); break; } if (rc) return rc; arg++; } /* Print out any trailing stuff. */ n = s - format; rc = n? outfnc (outfncarg, format, n) : 0; if (!rc) *nbytes += n; return rc; } /* The versatile printf formatting routine. It expects a callback function OUTFNC and an opaque argument OUTFNCARG used for actual output of the formatted stuff. FORMAT is the format specification and VAARGS a variable argumemt list matching the arguments of FORMAT. */ int estream_format (estream_printf_out_t outfnc, void *outfncarg, const char *format, va_list vaargs) { /* Buffer to hold the argspecs and a pointer to it.*/ struct argspec_s argspecs_buffer[DEFAULT_MAX_ARGSPECS]; argspec_t argspecs = argspecs_buffer; size_t argspecs_len; /* Number of specifications in ARGSPECS. */ /* Buffer to hold the description for the values. */ struct valueitem_s valuetable_buffer[DEFAULT_MAX_VALUES]; valueitem_t valuetable = valuetable_buffer; int rc; /* Return code. */ size_t argidx; /* Used to index the argspecs array. */ size_t validx; /* Used to index the valuetable. */ int max_pos;/* Highest argument position. */ size_t nbytes = 0; /* Keep track of the number of bytes passed to the output function. */ int myerrno = errno; /* Save the errno for use with "%m". */ /* Parse the arguments to come up with descriptive list. We can't do this on the fly because we need to support positional arguments. */ rc = parse_format (format, &argspecs, DIM(argspecs_buffer), &argspecs_len); if (rc) goto leave; /* Check that all ARG_POS fields are set. */ for (argidx=0,max_pos=0; argidx < argspecs_len; argidx++) { if (argspecs[argidx].arg_pos != -1 && argspecs[argidx].arg_pos > max_pos) max_pos = argspecs[argidx].arg_pos; if (argspecs[argidx].width_pos > max_pos) max_pos = argspecs[argidx].width_pos; if (argspecs[argidx].precision_pos > max_pos) max_pos = argspecs[argidx].precision_pos; } if (!max_pos) { /* Fill in all the positions. */ for (argidx=0; argidx < argspecs_len; argidx++) { if (argspecs[argidx].width == STAR_FIELD_VALUE) argspecs[argidx].width_pos = ++max_pos; if (argspecs[argidx].precision == STAR_FIELD_VALUE) argspecs[argidx].precision_pos = ++max_pos; if (argspecs[argidx].arg_pos != -1 ) argspecs[argidx].arg_pos = ++max_pos; } } else { /* Check that they are all filled. More test are done later. */ for (argidx=0; argidx < argspecs_len; argidx++) { if (!argspecs[argidx].arg_pos || (argspecs[argidx].width == STAR_FIELD_VALUE && !argspecs[argidx].width_pos) || (argspecs[argidx].precision == STAR_FIELD_VALUE && !argspecs[argidx].precision_pos)) goto leave_einval; } } /* Check that there is no overflow in max_pos and that it has a reasonable length. There may never be more elements than the number of characters in FORMAT. */ if (max_pos < 0 || max_pos >= strlen (format)) goto leave_einval; #ifdef DEBUG dump_argspecs (argspecs, argspecs_len); #endif /* Allocate a table to hold the values. If it is small enough we use a stack allocated buffer. */ if (max_pos > DIM(valuetable_buffer)) { valuetable = calloc (max_pos, sizeof *valuetable); if (!valuetable) goto leave_error; } else { for (validx=0; validx < DIM(valuetable_buffer); validx++) valuetable[validx].vt = VALTYPE_UNSUPPORTED; } for (argidx=0; argidx < argspecs_len; argidx++) { if (argspecs[argidx].arg_pos != - 1) { validx = argspecs[argidx].arg_pos - 1; if (valuetable[validx].vt) goto leave_einval; /* Already defined. */ valuetable[validx].vt = argspecs[argidx].vt; } if (argspecs[argidx].width == STAR_FIELD_VALUE) { validx = argspecs[argidx].width_pos - 1; if (valuetable[validx].vt) goto leave_einval; /* Already defined. */ valuetable[validx].vt = VALTYPE_INT; } if (argspecs[argidx].precision == STAR_FIELD_VALUE) { validx = argspecs[argidx].precision_pos - 1; if (valuetable[validx].vt) goto leave_einval; /* Already defined. */ valuetable[validx].vt = VALTYPE_INT; } } /* Read all the arguments. This will error out for unsupported types and for not given positional arguments. */ rc = read_values (valuetable, max_pos, vaargs); if (rc) goto leave_einval; /* for (validx=0; validx < max_pos; validx++) */ /* fprintf (stderr, "%2d: vt=%d\n", validx, valuetable[validx].vt); */ /* Everything has been collected, go ahead with the formatting. */ rc = do_format (outfnc, outfncarg, format, argspecs, argspecs_len, valuetable, myerrno, &nbytes); goto leave; leave_einval: errno = EINVAL; leave_error: rc = -1; leave: if (valuetable != valuetable_buffer) free (valuetable); if (argspecs != argspecs_buffer) free (argspecs); return rc; } /* A simple output handler utilizing stdio. */ static int plain_stdio_out (void *outfncarg, const char *buf, size_t buflen) { FILE *fp = (FILE*)outfncarg; if ( fwrite (buf, buflen, 1, fp) != 1 ) return -1; return 0; } /* A replacement for printf. */ int estream_printf (const char *format, ...) { int rc; va_list arg_ptr; va_start (arg_ptr, format); rc = estream_format (plain_stdio_out, stderr, format, arg_ptr); va_end (arg_ptr); return rc; } /* A replacement for fprintf. */ int estream_fprintf (FILE *fp, const char *format, ...) { int rc; va_list arg_ptr; va_start (arg_ptr, format); rc = estream_format (plain_stdio_out, fp, format, arg_ptr); va_end (arg_ptr); return rc; } /* A replacement for vfprintf. */ int estream_vfprintf (FILE *fp, const char *format, va_list arg_ptr) { return estream_format (plain_stdio_out, fp, format, arg_ptr); } /* Communication object used between estream_snprintf and fixed_buffer_out. */ struct fixed_buffer_parm_s { size_t size; /* Size of the buffer. */ size_t count; /* Number of bytes requested for output. */ size_t used; /* Used size of the buffer. */ char *buffer; /* Provided buffer. */ }; /* A simple malloced buffer output handler. */ static int fixed_buffer_out (void *outfncarg, const char *buf, size_t buflen) { struct fixed_buffer_parm_s *parm = outfncarg; parm->count += buflen; if (!parm->buffer) ; else if (parm->used + buflen < parm->size) { /* Handle the common case that everything fits into the buffer separately. */ memcpy (parm->buffer + parm->used, buf, buflen); parm->used += buflen; } else { /* The slow version of above. */ for ( ;buflen && parm->used < parm->size; buflen--) parm->buffer[parm->used++] = *buf++; } return 0; } /* A replacement for vsnprintf. */ int estream_vsnprintf (char *buf, size_t bufsize, const char *format, va_list arg_ptr) { struct fixed_buffer_parm_s parm; int rc; parm.size = bufsize; parm.count = 0; parm.used = 0; parm.buffer = bufsize?buf:NULL; rc = estream_format (fixed_buffer_out, &parm, format, arg_ptr); if (!rc) rc = fixed_buffer_out (&parm, "", 1); /* Print terminating Nul. */ if (rc == -1) return -1; if (bufsize && buf && parm.size && parm.count >= parm.size) buf[parm.size-1] = 0; parm.count--; /* Do not count the trailing nul. */ return (int)parm.count; /* Return number of bytes which would have been written. */ } /* A replacement for snprintf. */ int estream_snprintf (char *buf, size_t bufsize, const char *format, ...) { int rc; va_list arg_ptr; va_start (arg_ptr, format); rc = estream_vsnprintf (buf, bufsize, format, arg_ptr); va_end (arg_ptr); return rc; } /* Communication object used between estream_asprintf and dynamic_buffer_out. */ struct dynamic_buffer_parm_s { int error_flag; /* Internal helper. */ size_t alloced; /* Allocated size of the buffer. */ size_t used; /* Used size of the buffer. */ char *buffer; /* Malloced buffer. */ }; /* A simple malloced buffer output handler. */ static int dynamic_buffer_out (void *outfncarg, const char *buf, size_t buflen) { struct dynamic_buffer_parm_s *parm = outfncarg; if (parm->error_flag) { /* Just in case some formatting routine did not checked for an error. */ errno = parm->error_flag; return -1; } if (parm->used + buflen >= parm->alloced) { char *p; parm->alloced += buflen + 512; p = realloc (parm->buffer, parm->alloced); if (!p) { parm->error_flag = errno ? errno : ENOMEM; /* Wipe out what we already accumulated. This is useful in case sensitive data is formated. */ memset (parm->buffer, 0, parm->used); return -1; } parm->buffer = p; } memcpy (parm->buffer + parm->used, buf, buflen); parm->used += buflen; return 0; } /* A replacement for vasprintf. As with the BSD of vasprintf version -1 will be returned on error and NULL stored at BUFP. On success the number of bytes printed will be returned. */ int estream_vasprintf (char **bufp, const char *format, va_list arg_ptr) { struct dynamic_buffer_parm_s parm; int rc; parm.error_flag = 0; parm.alloced = 512; parm.used = 0; parm.buffer = my_printf_malloc (parm.alloced); if (!parm.buffer) { *bufp = NULL; return -1; } rc = estream_format (dynamic_buffer_out, &parm, format, arg_ptr); if (!rc) rc = dynamic_buffer_out (&parm, "", 1); /* Print terminating Nul. */ /* Fixme: Should we shrink the resulting buffer? */ if (rc != -1 && parm.error_flag) { rc = -1; errno = parm.error_flag; } if (rc == -1) { memset (parm.buffer, 0, parm.used); my_printf_free (parm.buffer); *bufp = NULL; return -1; } assert (parm.used); /* We have at least the terminating Nul. */ *bufp = parm.buffer; return parm.used - 1; /* Do not include that Nul. */ } /* A replacement for asprintf. As with the BSD of asprintf version -1 will be returned on error and NULL stored at BUFP. On success the number of bytes printed will be returned. */ int estream_asprintf (char **bufp, const char *format, ...) { int rc; va_list arg_ptr; va_start (arg_ptr, format); rc = estream_vasprintf (bufp, format, arg_ptr); va_end (arg_ptr); return rc; } gnupg-1.4.20/util/assuan-buffer.c0000644000175000017500000003025112635262326013531 00000000000000/* assuan-buffer.c - read and send data * Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #include #include #include #include #include #include #include #ifdef HAVE_W32_SYSTEM #include #endif #include "assuan-defs.h" #ifndef HAVE_MEMRCHR void *memrchr(const void *s, int c, size_t n); #endif static int writen (assuan_context_t ctx, const char *buffer, size_t length) { while (length) { ssize_t nwritten = ctx->io->writefnc (ctx, buffer, length); if (nwritten < 0) { if (errno == EINTR) continue; return -1; /* write error */ } length -= nwritten; buffer += nwritten; } return 0; /* okay */ } /* Read an entire line. */ static int readaline (assuan_context_t ctx, char *buf, size_t buflen, int *r_nread, int *r_eof) { size_t nleft = buflen; char *p; *r_eof = 0; *r_nread = 0; while (nleft > 0) { ssize_t n = ctx->io->readfnc (ctx, buf, nleft); if (n < 0) { if (errno == EINTR) continue; return -1; /* read error */ } else if (!n) { *r_eof = 1; break; /* allow incomplete lines */ } p = buf; nleft -= n; buf += n; *r_nread += n; p = memrchr (p, '\n', n); if (p) break; /* at least one full line available - that's enough for now */ } return 0; } int _assuan_read_line (assuan_context_t ctx) { char *line = ctx->inbound.line; int nread, atticlen; int rc; char *endp = 0; if (ctx->inbound.eof) return -1; atticlen = ctx->inbound.attic.linelen; if (atticlen) { memcpy (line, ctx->inbound.attic.line, atticlen); ctx->inbound.attic.linelen = 0; endp = memchr (line, '\n', atticlen); if (endp) /* Found another line in the attic. */ { rc = 0; nread = atticlen; atticlen = 0; } else /* There is pending data but not a full line. */ { assert (atticlen < LINELENGTH); rc = readaline (ctx, line + atticlen, LINELENGTH - atticlen, &nread, &ctx->inbound.eof); } } else /* No pending data. */ rc = readaline (ctx, line, LINELENGTH, &nread, &ctx->inbound.eof); if (rc) { if (ctx->log_fp) fprintf (ctx->log_fp, "%s[%u.%p] DBG: <- [Error: %s]\n", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx, strerror (errno)); return ASSUAN_Read_Error; } if (!nread) { assert (ctx->inbound.eof); if (ctx->log_fp) fprintf (ctx->log_fp, "%s[%u.%p] DBG: <- [EOF]\n", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx); return -1; } ctx->inbound.attic.pending = 0; nread += atticlen; if (! endp) endp = memchr (line, '\n', nread); if (endp) { int n = endp - line + 1; if (n < nread) /* LINE contains more than one line. We copy it to the attic now as handlers are allowed to modify the passed buffer. */ { int len = nread - n; memcpy (ctx->inbound.attic.line, endp + 1, len); ctx->inbound.attic.pending = memrchr (endp + 1, '\n', len) ? 1 : 0; ctx->inbound.attic.linelen = len; } if (endp != line && endp[-1] == '\r') endp --; *endp = 0; ctx->inbound.linelen = endp - line; if (ctx->log_fp) { fprintf (ctx->log_fp, "%s[%u.%p] DBG: <- ", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx); if (ctx->confidential) fputs ("[Confidential data not shown]", ctx->log_fp); else _assuan_log_print_buffer (ctx->log_fp, ctx->inbound.line, ctx->inbound.linelen); putc ('\n', ctx->log_fp); } return 0; } else { if (ctx->log_fp) fprintf (ctx->log_fp, "%s[%u.%p] DBG: <- [Invalid line]\n", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx); *line = 0; ctx->inbound.linelen = 0; return ctx->inbound.eof ? ASSUAN_Line_Not_Terminated : ASSUAN_Line_Too_Long; } } /* Read the next line from the client or server and return a pointer in *LINE to a buffer holding the line. LINELEN is the length of *LINE. The buffer is valid until the next read operation on it. The caller may modify the buffer. The buffer is invalid (i.e. must not be used) if an error is returned. Returns 0 on success or an assuan error code. See also: assuan_pending_line(). */ assuan_error_t assuan_read_line (assuan_context_t ctx, char **line, size_t *linelen) { assuan_error_t err; if (!ctx) return ASSUAN_Invalid_Value; err = _assuan_read_line (ctx); *line = ctx->inbound.line; *linelen = ctx->inbound.linelen; return err; } /* Return true if a full line is buffered (i.e. an entire line may be read without any I/O). */ int assuan_pending_line (assuan_context_t ctx) { return ctx && ctx->inbound.attic.pending; } assuan_error_t _assuan_write_line (assuan_context_t ctx, const char *prefix, const char *line, size_t len) { int rc = 0; size_t prefixlen = prefix? strlen (prefix):0; /* Make sure that the line is short enough. */ if (len + prefixlen + 2 > ASSUAN_LINELENGTH) { if (ctx->log_fp) fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> " "[supplied line too long -truncated]\n", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx); if (prefixlen > 5) prefixlen = 5; if (len > ASSUAN_LINELENGTH - prefixlen - 2) len = ASSUAN_LINELENGTH - prefixlen - 2 - 1; } /* Fixme: we should do some kind of line buffering. */ if (ctx->log_fp) { fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> ", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx); if (ctx->confidential) fputs ("[Confidential data not shown]", ctx->log_fp); else _assuan_log_print_buffer (ctx->log_fp, line, len); putc ('\n', ctx->log_fp); } if (prefixlen) { rc = writen (ctx, prefix, prefixlen); if (rc) rc = ASSUAN_Write_Error; } if (!rc) { rc = writen (ctx, line, len); if (rc) rc = ASSUAN_Write_Error; if (!rc) { rc = writen (ctx, "\n", 1); if (rc) rc = ASSUAN_Write_Error; } } return rc; } assuan_error_t assuan_write_line (assuan_context_t ctx, const char *line) { size_t len; const char *s; if (!ctx) return ASSUAN_Invalid_Value; /* Make sure that we never take a LF from the user - this might violate the protocol. */ s = strchr (line, '\n'); len = s? (s-line) : strlen (line); if (ctx->log_fp && s) fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> " "[supplied line contained a LF -truncated]\n", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx); return _assuan_write_line (ctx, NULL, line, len); } /* Write out the data in buffer as datalines with line wrapping and percent escaping. This function is used for GNU's custom streams */ int _assuan_cookie_write_data (void *cookie, const char *buffer, size_t orig_size) { assuan_context_t ctx = cookie; size_t size = orig_size; char *line; size_t linelen; if (ctx->outbound.data.error) return 0; line = ctx->outbound.data.line; linelen = ctx->outbound.data.linelen; line += linelen; while (size) { /* insert data line header */ if (!linelen) { *line++ = 'D'; *line++ = ' '; linelen += 2; } /* copy data, keep some space for the CRLF and to escape one character */ while (size && linelen < LINELENGTH-2-2) { if (*buffer == '%' || *buffer == '\r' || *buffer == '\n') { sprintf (line, "%%%02X", *(unsigned char*)buffer); line += 3; linelen += 3; buffer++; } else { *line++ = *buffer++; linelen++; } size--; } if (linelen >= LINELENGTH-2-2) { if (ctx->log_fp) { fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> ", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx); if (ctx->confidential) fputs ("[Confidential data not shown]", ctx->log_fp); else _assuan_log_print_buffer (ctx->log_fp, ctx->outbound.data.line, linelen); putc ('\n', ctx->log_fp); } *line++ = '\n'; linelen++; if (writen (ctx, ctx->outbound.data.line, linelen)) { ctx->outbound.data.error = ASSUAN_Write_Error; return 0; } line = ctx->outbound.data.line; linelen = 0; } } ctx->outbound.data.linelen = linelen; return (int)orig_size; } /* Write out any buffered data This function is used for GNU's custom streams */ int _assuan_cookie_write_flush (void *cookie) { assuan_context_t ctx = cookie; char *line; size_t linelen; if (ctx->outbound.data.error) return 0; line = ctx->outbound.data.line; linelen = ctx->outbound.data.linelen; line += linelen; if (linelen) { if (ctx->log_fp) { fprintf (ctx->log_fp, "%s[%u.%p] DBG: -> ", assuan_get_assuan_log_prefix (), (unsigned int)getpid (), (void *)ctx); if (ctx->confidential) fputs ("[Confidential data not shown]", ctx->log_fp); else _assuan_log_print_buffer (ctx->log_fp, ctx->outbound.data.line, linelen); putc ('\n', ctx->log_fp); } *line++ = '\n'; linelen++; if (writen (ctx, ctx->outbound.data.line, linelen)) { ctx->outbound.data.error = ASSUAN_Write_Error; return 0; } ctx->outbound.data.linelen = 0; } return 0; } /** * assuan_send_data: * @ctx: An assuan context * @buffer: Data to send or NULL to flush * @length: length of the data to send/ * * This function may be used by the server or the client to send data * lines. The data will be escaped as required by the Assuan protocol * and may get buffered until a line is full. To force sending the * data out @buffer may be passed as NULL (in which case @length must * also be 0); however when used by a client this flush operation does * also send the terminating "END" command to terminate the reponse on * a INQUIRE response. However, when assuan_transact() is used, this * function takes care of sending END itself. * * Return value: 0 on success or an error code **/ assuan_error_t assuan_send_data (assuan_context_t ctx, const void *buffer, size_t length) { if (!ctx) return ASSUAN_Invalid_Value; if (!buffer && length) return ASSUAN_Invalid_Value; if (!buffer) { /* flush what we have */ _assuan_cookie_write_flush (ctx); if (ctx->outbound.data.error) return ctx->outbound.data.error; if (!ctx->is_server) return assuan_write_line (ctx, "END"); } else { _assuan_cookie_write_data (ctx, buffer, length); if (ctx->outbound.data.error) return ctx->outbound.data.error; } return 0; } gnupg-1.4.20/util/ChangeLog-20110000644000175000017500000016257512635262326012776 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-09-12 Werner Koch * ttyio.c (init_ttyfp): Avoid endless loop due to a failed opening of the tty. Suggested by Steven M. Schweda. 2011-08-09 Werner Koch * pka.c (get_pka_info): Turn ANSWER into a union to avoid aliasing problems with modern compilers. See bug#1307. Reported by Steve Grubb. (get_pka_info): Remove unused vars. 2010-10-27 Werner Koch * miscutil.c (INVALID_TIME_CHECK): New. (strtimestamp, isotimestamp, asctimestamp): Use it. 2010-09-28 Steven M. Schweda (wk) Changes to help the VMS port. See http://antinode.info/dec/sw/gnupg.html . * cert.c [__VMS]: Include cert_vms.h. * ttyio.c [__VMS]: Include vms.h. (init_ttyfp) [__VMS]: Make global. (ttyfp_is) [__VMS]: New. (do_get) [__VMS]: Disable terminal echo. * srv.c [__VMS]: Include cert_vms.h. * secmem.c (lock_pool) [__VMS]: Use log_warning. * pka.c [USE_DNS_PKA]: Define T_CERT. * logger.c [__VMS]: Include unistd.h and ttyio.h. (g10_log_print_prefix) [__VMS]: Init logfp. * iobuf.c [__VMS]: Include vms.h. (iobuf_get_filelength) [__VMS]: Use VMS specific method. 2009-09-03 Werner Koch * ttyio.c (tty_printf) [_WIN32]: s/xtryasprintf/xtryvasprint/ * strgutil.c (xtryvasprintf): New. * estream-printf.c: Include stdint.h only if HAVE_STDINT_H is defined. Problem reported by Nelson H. F. Beebe. * estream.m4: Check for stdint.h. * estream-printf.c: Remove all test code. Use macro DEBUG instead of TEST for debugging. 2009-08-25 Werner Koch * compat.c: Change license to all-permissive. The GPL and the exception does no make sense here. (do_strconcat, xstrconcat): New. 2009-08-18 Werner Koch * iobuf.c (fd_cache_close): Change debug printf format assuming that FILEP_OR_FD is today always an int. * miscutil.c (print_string2): Loose check for control characters to better cope with utf-8. The range 0x80..0x9f is nowadays not anymore accidently used for control charaters. Fixes bug#1103. 2009-08-11 David Shaw * strgutil.c (string_to_utf8): New function to convert a Latin-1 string to UTF8. From GPA. 2009-07-23 David Shaw * srv.c (getsrv): Fix type-punning warning. (main): Allow testing any SRV. 2009-07-21 Werner Koch * ttyio.c (tty_printf): Replace vasprintf by xtryasprintf. (tty_fprintf): Ditto. * strgutil.c: Include estream-printf.h. (xasprintf, xtryasprintf): New. (vasprintf, asprintf): Remove. * estream-printf.c: New. Taken from libestream. * Makefile.am (libutil_a_SOURCES): Add it. * memory.c (trymalloc,trystrdup): New. * convert.c: New. Taken from GnuPG 2.0 SVN. * Makefile.am (libutil_a_SOURCES): Add it. 2009-05-26 David Shaw * http.c (send_request): Pass in a STRLIST for additional headers. Change all callers. 2009-05-22 Werner Koch * ttyio.c (tty_cleanup_after_signal): New. 2009-05-05 Werner Koch * dotlock.c: Merged changes from GnuPG-2. Better detection of stale lockfiles and actual locking support on W32. Fixes bug#1028. * miscutil.c (isotime2seconds): New. 2009-04-05 David Shaw * srv.h: Move to include/srv.h. * http.c (send_request): Pass in srvtag... (http_open): ...from here. 2009-04-02 David Shaw * http.c (connect_server): free (rather than xfree) the result of getsrv(). (http_open, http_open_document): Allow passing srvtag to http_open and http_open_document. * Makefile.am: Make srv.c part of libcompat instead of libutil. * srv.c (getsrv): Raise maximum packet size to 2048, as PACKETSZ is too small these days. Use libc malloc and free as we're part of libcompat now which may not be linked to memory.c. 2009-03-20 David Shaw * iobuf.c (fd_cache_synchronize): New. fsync() a file in cache. (iobuf_ioctl): Called here, for ioctl 4. (fd_cache_invalidate): Pass return code from close() back to iobuf_ioctl(). 2009-03-13 David Shaw * http.c (do_parse_uri): Properly handle IPv6 literal addresses as per RFC-2732. Adapted from patch by Phil Pennock. * Makefile.am, http.c (start_server): Minor tweaks to get http-test compiling again. 2008-09-05 David Shaw * Makefile.am: Use $(CC) instead of "cc" to compile, as the user might be overriding the compiler. 2008-08-19 Werner Koch * iobuf.c: Avoid passing a NULL (iobuf_t)->desc to the log function. Should in general never be NULL, but well. Reported by M. Heneka. 2008-03-06 David Shaw * argparse.c (default_strusage): Update copyright date. 2007-10-23 Werner Koch Switched entire package to GPLv3+. The parts taken from libassuan and glibc are kept at LGPLv2+; only the address as been chnaged. * argparse.c (strusage): Use id 10 for the license string; defaults to GPL3+. Change long note to version 3 or later. (show_version): Print the license info. 2007-08-24 Werner Koch * fileutil.c (same_file_p): New. Taken from SVN trunk. (compare_filenames) [HAVE_DRIVE_LETTERS]: Take drive letters and backslashes in account. 2007-04-16 David Shaw * strgutil.c (ascii_toupper, ascii_tolower, ascii_strcasecmp, ascii_strncasecmp): Move functions to compat.c. 2007-04-16 Werner Koch * secmem.c (init_pool): Avoid assigning a negative value to a size_t. 2007-04-16 David Shaw * secmem.c (init_pool): Use sysconf() if available to determine page size. 2007-04-15 David Shaw * argparse.c (default_strusage): Copyright 2007. * cert.c, srv.c, pka.c: Need arpa/inet.h for ntohs(). 2007-02-26 Werner Koch * simple-gettext.c (set_gettext_file): Make use of the envvar LANGUAGE to allow overriding of the registry setting. 2007-02-12 Werner Koch * secmem.c (ptr_into_pool_p): New. (m_is_secure): Implement in terms of above. Also check that the pool has been initialized. 2007-02-10 David Shaw * http.c (do_parse_uri): Remove the hkp port 11371 detection. We implement hkp in the keyserver handler, and the support here makes it appear like a bad hkp request actually succeeded. 2007-01-31 David Shaw * ttyio.c (do_get): Assume that anything read from the user without echoing to the screen is sensitive and put it in secure memory. Suggested by Benjamin Bennett. 2006-12-14 Werner Koch * http.c (http_wait_response): No more shutdown. Fixes bug#739. 2006-10-02 David Shaw * strsep.c (strsep): It's strsep, not strsep2 from testing. (If I had a dollar for every time I've done that...) 2006-09-28 David Shaw * strgutil.c (strsep): Move to strsep.c for AC_REPLACE_FUNCS. * Makefile.am: Build libcompat.a for keyserver helpers. libutil.a always contains everything in libcompat.a, so we only need to link to one or the other. * miscutil.c: Move hextobyte to new file compat.c. 2006-07-31 Werner Koch * iobuf.c (iobuf_ioctl, fd_cache_invalidate): Allow closing all open files. 2006-07-29 Marcus Brinkmann * secmem.c (init_pool): Close FD after establishing the mapping. 2006-07-20 David Shaw * http.c (send_request): A zero-length proxy is the same as no proxy at all. Suggested by J. Scott Berg. 2006-04-17 David Shaw * miscutil.c (make_printable_string): Fix bug where some control characters lose part of their ASCII representation. 2006-04-11 David Shaw * memory.c (realloc): Revert m_guard fix and stick an #error in there to inform people not to use it. 2006-04-11 Werner Koch * iobuf.c (IOBUF_BUFFER_SIZE): New to replace hardwired 8192. 2006-04-06 David Shaw * memory.c (realloc): Fix compile problem with --enable-m-guard. 2006-03-30 David Shaw * cert.c (main): Fix test program build warning on OSX. 2006-03-16 David Shaw * cert.c (get_cert): Handle the fixed IPGP type with fingerprint. 2006-03-08 David Shaw * argparse.c (default_strusage): Update copyright year to 2006. 2006-02-19 David Shaw * http.c (send_request): A zero length proxy is the same as no proxy. 2006-02-14 Werner Koch * errors.c (g10_errstr): Add NO_DATA. 2006-01-26 David Shaw * cert.c (get_cert): Disable IPGP types for now until the format questions in the draft are settled. * srv.c (getsrv): Error on oversize SRV responses. 2005-12-24 David Shaw * cert.c (get_cert): Properly chase down CNAMEs pointing to CERTs. 2005-12-23 David Shaw * cert.c, Makefile.am: New code to do DNS CERT queries. 2005-12-22 David Shaw * srv.c, Makefile.am: Only build srv.c if we need to. 2005-12-10 Ryan Lortie (dshaw) * ttyio.c (tty_enable_completion, tty_disable_completion): Add checks for no_terminal so we don't try to open("/dev/tty") when invoked with --no-tty. 2005-12-06 David Shaw * Makefile.am: Some cleanup so we don't build files that are completely ifdeffed out. This causes a warning on Sun's cc. Do the internal regex code as well for consistency. * mkdtemp.c (mkdtemp): Fix warning. * secmem.c, assuan-buffer.c, dotlock.c: Fix a few warnings from printf-ing %p where the arg wasn't void *. 2005-11-02 David Shaw * util.c [!HAVE_DECL_GETPAGESIZE]: Prototype getpagesize() if unistd.h doesn't have it (for MinGW). 2005-09-22 Werner Koch * iobuf.c (iobuf_get_filelength): New arg OVERFLOW. (iobuf_get_filelength) [W32]: Use GetFileSizeEx if available. * fileutil.c (is_file_compressed): Take care of the OVERFLOW 2005-08-31 David Shaw * fileutil.c (untilde): New. Expand ~/foo and ~username/foo filenames into full paths using $HOME if possible, or getpwuid/getpwnam if necessary. (make_filename): Use it here. 2005-07-28 Werner Koch * pka.c: New. (parse_txt_record): Changed from v=1 to v=pka1. * Makefile.am (pka-test): new. 2005-07-27 Werner Koch * memory.c (FNAMEX, FNAMEXM): New macros to cope with the now used names xmalloc style names. 2005-07-18 Werner Koch * ttyio.c (do_get): Move printing of the prompt after disabling echo. Suggested by Scott Worley. 2005-06-23 David Shaw * http.c (make_radix64_string): Add '=' padding as per standard. (send_request, http_open, http_open_document): Clean up auth code. Can now support different auth for a proxy and the file being requested via that proxy. Unescape auth strings. 2005-06-22 David Shaw * memrchr.c (memrchr): Not all compilers allow initializing based on a variable that is also being initialized. Noted by Nelson H. F. Beebe. 2005-06-21 David Shaw * http.c (send_request, http_open, http_open_document): Pass in auth and proxyauth that can override the in-url auth. * http.c (send_request): Need == after the radix64-encoded basic auth string. 2005-06-08 David Shaw * dotlock.c [HAVE_DOSISH_SYSTEM]: Fix unused function warnings on mingw32. Noted by Joe Vender. 2005-05-31 Werner Koch * regcomp.c (MB_CUR_MAX) [_WIN32]: Define it only if not defined. 2005-05-29 David Shaw * strgutil.c (set_native_charset) [_WIN32]: Add alias for codepage CP65001 to utf-8. 2005-05-19 Werner Koch * membuf.c: New. Taken from gnupg 1.9. 2005-05-05 David Shaw * miscutil.c (add_days_to_timestamp): Remove as unused. 2005-04-12 David Shaw * assuan-client.c: Fix warning on OSX. * memrchr.c: New replacement function. * assuan-buffer.c: Use it here. 2005-04-04 Werner Koch * memory.c (xcalloc, xcalloc_secure): New wrappers. * assuan-client.c (assuan_transact): Factored all code out to .. (assuan_transact2): .. new. Add arg OKAY_CB. Wipe the memory processed though that callback. 2005-03-31 Werner Koch * isascii.c: New. This is an autoconf replacement function. * Makefile.am (assuan_source): New. Only used when agent support has been requested. * assuan-buffer.c, assuan-client.c, assuan-defs.h, * assuan-errors.c, assuan-logging.c, assuan-socket-connect.c, * assuan-socket.c, assuan-util.c, assuan-connect.c: New. Taken from libassuan 0.6.9 and adjusted for our limited use of Assuan. 2005-03-18 David Shaw * ttyio.c (tty_enable_completion, tty_disable_completion): Enable and disable readline completion. (init_ttyfp): Completion is disabled by default. 2005-03-14 Werner Koch * miscutil.c (isotimestamp): New. 2005-03-10 Werner Koch * secmem.c (secmem_realloc): Take control information into account when checking whether a resize is needed. 2005-03-08 Werner Koch * miscutil.c (asctimestamp) [W32]: Don't use %Z. 2005-02-03 Werner Koch * w32reg.c (read_w32_registry_string): Fallback to HKLM also for a missing name. * http.c (connect_server): Define ERR outside of the !W32 block. 2005-02-01 David Shaw * http.c (connect_server): Fix fd leak when connecting to a round-robin server set that has some down servers. Noted by Phil Pennock. 2005-01-20 Werner Koch * simple-gettext.c (set_gettext_file): Use MO files depending on the installation directory. Add new arg REGKEY. 2005-01-18 Werner Koch * argparse.c (default_strusage): Changed default copyright year to 2005. * strgutil.c (handle_iconv_error): Print error messages only once. (native_to_utf8, utf8_to_native): Ditto. 2005-01-11 Werner Koch * strgutil.c (set_native_charset) [W32]: Use the alias table from libiconv 1.9.2. 2005-01-13 David Shaw * http.c (connect_server): Use INADDR_NONE instead of SOCKET_ERROR. Noted by Timo. 2005-01-06 Werner Koch * strgutil.c (set_native_charset): Assume that ASCII, ANSI_X3.4-1968 and 646 are actually meant as Latin-1. If nl_langinfo is not available get the charset from environment variables. For W32 use GetACP as error fallback. Removed Latin-15 to Latin-1 aliasing. 2004-12-28 David Shaw * srv.h: Better implementation for the SRV check. We don't need to actually check all the header files individually since the SRV test compile uses them together. 2004-12-20 Werner Koch * strgutil.c (handle_iconv_error): Turn diagnostics into warnings so that gpg does not return with failure. (native_to_utf8, utf8_to_native): Ditto. 2004-12-16 Werner Koch * iobuf.c (fd_cache_strcmp) [W32]: Casting is a Bad Thing. Cast to an unsigned char pointer and to an unsigned integer. 2004-12-18 David Shaw * ttyio.c: Use only HAVE_LIBREADLINE to detect readline availability. 2004-12-16 David Shaw * srv.h: Don't include arpa/nameser.h unless we have it. Include "types.h" for u16. * secmem.c (secmem_init): Return a flag to indicate whether we got the lock. 2004-12-06 Werner Koch * iobuf.c (fd_cache_strcmp): New. Use whenever we compare filenames for the fd_cache. This is needed because the backslash is an alias for a slash under W32. Reported by Tobias Winkler. 2004-12-03 David Shaw * http.c (send_request): Include the port if non-80 in the Host: header. Noted by Jason Harris. 2004-11-03 Timo Schulz * strgutil.c (w32_strerror): New. * ttyio.c (init_ttyfp, tty_printf, do_get): Use it here. * iobuf.c (fd_cache_open, file_filter): Likewise. (iobuf_seek, translate_file_handle): Likewise. 2004-11-02 Werner Koch * strgutil.c (load_libiconv): Use log_info to avoid failures when iconv.dll is not installed. 2004-10-31 Werner Koch * simple-gettext.c (get_string): Removed debugging hack. 2004-10-27 Werner Koch * simple-gettext.c: Removed windows.h. (get_string): On the fly translation from utf-8 to active character set. * strgutil.c (load_libiconv) [_WIN32]: new. (set_native_charset) [_WIN32]: Call it here and autodetect the used code page. (native_to_utf8, utf8_to_native): Reverted arguments for iconv_open. (handle_iconv_error): Made this function match iconv_open argumnet ordering. (utf8_to_native): Disable all quoting for DELIM == -1. 2004-10-26 Werner Koch * strgutil.c (mem2str): Translated comment to English. (handle_iconv_error) [USE_GNUPG_ICONV]: New. (set_native_charset) [USE_GNUPG_ICONV]: Added iconv based conversion checks. (native_to_utf8, utf8_to_native): Added iconv based conversion. 2004-10-21 Werner Koch * vasprintf.c: Removed. It was used only at one place and I don't want to get into build problems in 1.4. 2004-10-18 David Shaw * http.c (connect_server, send_request): Use the URI scheme as the SRV tag rather than hard-coding _hkp. 2004-10-16 David Shaw * http.c (connect_server): [_WIN32] actually fill in the sin_addr so we aren't always talking to localhost. Add some general sanity checking of parameters learned from gethostbyname(). 2004-10-15 Werner Koch * vasprintf.c: New. Taken from gnupg 1.9. 2004-10-14 Werner Koch * iobuf.c (iobuf_get_fd): Removed double check on directfp and cats it to FILEP becuase directfp is actually a void *. Notes by Stefan. 2004-10-13 Werner Koch * logger.c (g10_log_error_f, g10_log_fatal_f, g10_log_info_f) (g10_log_debug_f, print_prefix_f): Removed. * iobuf.c (iobuf_is_pipe_filename): New. (iobuf_get_fd): New. * fileutil.c (is_file_compressed): Use it here. 2004-09-30 David Shaw * iobuf.c (pop_filter): Make static. * dotlock.c (destroy_dotlock): New. Remove the handle from the list of locks. (release_dotlock): Don't act if we don't have any locks at all. From Werner on stable branch. 2004-09-10 David Shaw * http.c (make_radix64_string, do_parse_uri, send_request): Add basic auth for proxies and direct requests. Suggested by Florent Thoumie. * http.c (main): Fix test code for http-test. 2004-09-09 Werner Koch * errors.c (g10_errstr): New error codes G10ERR_NO_CARD, G10ERR_CANCELED. * ttyio.c (tty_get): Add readline support. * iobuf.c (iobuf_skip_rest): New. Orginal patch by Florian Weimer. Added new argument PARTIAL. 2004-08-19 David Shaw * http.c (insert_escapes): Fix encoding problem for non-URI-safe characters. Noted by Vladimir Novak. 2004-05-21 David Shaw * timegm.c: New replacement function. Removes the need for setenv.c and unsetenv.c. * setenv.c: Removed. * unsetenv.c: Removed. 2004-03-04 David Shaw * iobuf.c (block_filter): Remove the old gpg indeterminate length mode. (iobuf_set_block_mode, iobuf_in_block_mode): Removed as superfluous. 2004-03-01 David Shaw * iobuf.c (block_filter): Properly handle a partial body stream that ends with a 5-byte length that happens to be zero. 2004-02-28 David Shaw * unsetenv.c: Fixed debugging typo. 2004-02-24 Werner Koch * secmem.c (lock_pool) [_AIX]: Also set errno. 2004-02-21 David Shaw * miscutil.c (hextobyte): Moved here from g10/misc.c so I can use it in the keyserver helpers. 2004-02-20 David Shaw * mkdtemp.c: New (moved from g10/), setenv.c: New, unsetenv.c: New. * Makefile.am: Include @LIBOBJS@ for replacement functions. 2004-01-15 David Shaw * argparse.c (default_strusage): Update copyright date. (initialize): Avoid a number of -Wformat-nonliteral warnings. These aren't actual problems, but the warnings bothered me. * miscutil.c (print_string2): New variation on print_string that allows two delimiters. (print_string): Call print_string2 to do work. 2003-12-29 David Shaw * g10u.c: Dead code. Remove. * Makefile.am: Don't compile g10u.c. * iobuf.c (block_filter): Properly handle a partial body stream that ends with a 5-byte length. 2003-12-28 David Shaw * http.c (send_request, http_open_document, http_open): Pass the http proxy from outside rather than pulling it from the evironment. 2003-12-28 Stefan Bellon * riscos.c [__riscos__]: Better filetype handling (use a different SWI) and removal of unnecessary function. * memory.c (out_of_core) [__riscos__]: Produce stack backtrace on RISC OS if out_of_core() is called and M_GUARD is compiled in. 2003-12-06 David Shaw * http.c (send_request): Add a Host: header for virtual hosts. 2003-12-04 David Shaw * miscutil.c (answer_is_yes_no_default, answer_is_yes_no_quit): Don't use alternate strings when not needed so we don't have to re-translate them. Hopefully the comment will be enough to indicate multiple match strings. 2003-11-20 David Shaw * miscutil.c (match_multistr): New. Match against each segment in a string with tokens separated by |. (answer_is_yes_no_default, answer_is_yes_no_quit, answer_is_okay_cancel): Use it here to enable alternate translations. 2003-11-01 David Shaw * http.c (connect_server): Differentiate between generic "can't connect" errors and the more specific "host not found". Suggested by Samuel Tardieu. 2003-10-29 Werner Koch * miscutil.c (answer_is_okay_cancel): New. 2003-10-25 Werner Koch * Makefile.am: Replaced INTLLIBS by LIBINTL. 2003-10-23 Werner Koch * secmem.c (lock_pool) [_AIX]: Don't use plock. 2003-10-12 David Shaw * srv.c: OSX 10.2.8/Darwin 6.8 seems to have some #include ordering issues? Move sys/types.h up higher to work around. 2003-10-08 Werner Koch * ttyio.c (tty_print_string, tty_print_utf8_string2) (tty_print_utf8_string): Made string arg const. 2003-09-28 Timo Schulz * strgutil.c [WIN32] (asprintf): New. 2003-09-28 Werner Koch * ttyio.c (tty_fprintf): New. 2003-09-21 Timo Schulz * http.c [WIN32]: Define MB_CUR_MAX. (connect_server): use unsigned long since W32 does not have in_addr_t. 2003-08-28 David Shaw * dotlock.c, http.c, iobuf.c, simple-gettext.c, srv.c, srv.h, strgutil.c, ttyio.c, w32reg.c: s/__MINGW32__/_WIN32/ to help building on native Windows compilers. Requested by Brian Gladman. From Werner on stable branch. * http.c (connect_server): Oops - forgot to freeaddrinfo(). 2003-08-24 David Shaw * http.c (connect_server): Try and use getaddrinfo if it is available. Try for IPv6 via getaddrinfo() or a IPv6-ized gethostbyname(). Suggested by Jun-ichiro itojun Hagino. 2003-07-10 David Shaw (from Werner on stable branch) * iobuf.c (check_special_filename): Replaced is isdigit by digitp to avoid passing negative values and potential locale problems. Problem noted by Christian Biere. * strgutil.c (strlwr,strcasecmp,strncasecmp): Make sure we don't pass a negative value. * miscutil.c (scan_isodatestr): Ditto. 2003-05-30 David Shaw * srv.h, srv.c: Include windows.h with MINGW32. 2003-05-24 David Shaw * argparse.c, dotlock.c, fileutil.c, iobuf.c, miscutil.c, simple-gettext.c, errors.c, http.c, memory.c, secmem.c, ttyio.c: Edit all preprocessor instructions to remove whitespace before the '#'. This is not required by C89, but there are some compilers out there that don't like it. 2003-05-21 Werner Koch * fileutil.c (is_file_compressed): Fixed checking for "-" filename. 2003-04-13 David Shaw * srv.c (main): Test against wwwkeys.pgp.net. * srv.h: Grr. The RH7.3 Linux man page defines the fourth arg of dn_expand as unsigned char*, but it is really char* according to resolv.h. 2003-03-23 David Shaw * argparse.c (default_strusage): Change copyright date. 2003-03-14 David Shaw * srv.h, srv.c (getsrv): Use unsigned char rather than char. Noted by Stefan Bellon. 2003-03-11 David Shaw * http.c (connect_server): Use DNS SRV to get a server list. Fail over to A records if necessary. * Makefile.am, srv.h, srv.c: New DNS SRV handling code. 2003-02-22 David Shaw * ttyio.c (tty_print_utf8_string, tty_print_utf8_string2): Use 0 to indicate a string with no maximum size. This prevents early truncation of strings that contain control chars which are expanded into \xXX form. 2002-12-26 David Shaw * iobuf.c (iobuf_flush): Only print debug info if debugging is on. 2002-11-13 David Shaw * secmem.c (lock_pool) [__CYGWIN__]: Don't print secmem warning. From Werner on stable branch. 2002-11-09 Werner Koch * ttyio.c (TERMDEVICE): Removed. (tty_get_ttyname): New. (init_ttyfp): Use it here instead of the TERMDEVICE macro. 2002-11-06 David Shaw * w32reg.c (read_w32_registry_string): Fixed expanding of the environment buffer; didn't worked at all. Reported by Thijmen Klok. From Werner on stable branch. * secmem.c (secmem_free, secmem_term): Use wipememory2() instead of memset() to overwrite secure memory * iobuf.c (direct_open): Handle mode 'b' if O_BINARY is available. From Werner on stable branch. * fileutil.c: Comment from stable branch. 2002-10-31 Stefan Bellon * riscos.c (riscos_load_module, riscos_check_regexp): New. (riscos_set_filetype_by_mimetype, riscos_dump_fdlist) (riscos_fdopenfile, riscos_close_fds, riscos_renamefile) (riscos_gstrans, riscos_list_openfiles, riscos_not_implemented): Renamed functions to contain riscos prefix. * dotlock.c [__riscos__]: Renames due to changes in riscos.c. * fileutil.c [__riscos__]: Likewise. 2002-10-29 Stefan Bellon * fileutil.c: Removed unnecessary left-over includes for RISC OS. (make_filename): Tidied up RISC OS stuff. (compare_filenames) [__riscos__]: Compare with ascii_strcasecmp(). (make_basename) [__riscos__]: Branch to own RISC OS routine from here. * riscos.c (riscos_make_basename): New. 2002-10-28 Stefan Bellon * fileutil.c (make_basename) [__riscos__]: Cut off RISC OS' filing systems from filepath. * riscos.c (riscos_get_filetype_from_string, riscos_get_filetype): Added. (riscos_set_filetype_by_number): Made public. 2002-10-19 David Shaw * Makefile.am, regcomp.c, regex.c, regex_internal.c, regex_internal.h, regexec.c: Add new regex files from glibc 2.3.1. 2002-10-17 David Shaw * http.c (connect_server): Try all A records for names with multiple addresses until one answers for both MINGW32 and not MINGW32. 2002-10-10 David Shaw * http.c (connect_server): Properly handle a single A record that fails connect(). 2002-10-03 David Shaw * logger.c (g10_log_warning, log_set_strict): Add new log_warning logger command which can be switched between log_info and log_error via log_set_strict. 2002-09-24 David Shaw * http.c (connect_server): Try all A records for names with multiple addresses until one answers (not MINGW32). 2002-09-16 Werner Koch * w32reg.c (read_w32_registry_string): Fallback to HLM. 2002-09-12 Stefan Bellon * fileutil.c (make_filename): Removed variable for RISC OS to avoid compiler warning. * secmem.c: Removed static variable for RISC OS to avoid compiler warning. 2002-09-11 Werner Koch * simple-gettext.c: Disable charset mappings. We do it now when installing the files. 2002-09-09 Werner Koch * w32reg.c (read_w32_registry_string): Handle REG_EXPAND_SZ. Suggested by Ryan Malayter. * strgutil.c (ascii_strcasecmp): Replaced by code from gnulib. (ascii_strncasecmp): New. 2002-09-02 Werner Koch * simple-gettext.c (set_gettext_file): Make sure that we only use backslashes. * strgutil.c (set_native_charset): Allow NULL as argument to use nl_langinfo for selection. Mapped latin-15 to latin-1. 2002-08-30 Werner Koch * iobuf.c (block_filter): Removed the assert, so that one can pass the first character of a message and use the block filter for non partial length encoded packets. 2002-08-06 Stefan Bellon * ttyio.c [__riscos__]: Moved low-level RISC OS stuff to riscos.c. * riscos.c: Use new SWI calling mechanism of UnixLib. 2002-08-03 Stefan Bellon * secmem.c (init_pool, secmem_term): Changed #if to #ifdef in order to avoid warning with RISC OS' Norcroft C. 2002-07-25 David Shaw * secmem.c: "Warning" -> "WARNING" 2002-07-05 Werner Koch * argparse.c (initialize): We better exit after a read error so that we don't run into an endless loop when reading a directory. Noted by Andrew Suffield. 2002-07-01 David Shaw * argparse.c (optfile_parse): Fix variable typo - 'p2' should be 'p' :) 2002-06-29 Werner Koch * argparse.c (optfile_parse): Renamed an auto I to P2 to avoid shadowing warning. 2002-06-21 Stefan Bellon * riscos.c (riscos_global_defaults): New. 2002-06-20 Stefan Bellon * riscos.c (riscos_set_filetype_by_number, riscos_set_filetype): New. Set RISC OS filetype according to MIME type. 2002-06-14 David Shaw * strgutil.c (pop_strlist): New function to pop the head off of a strlist. 2002-06-05 Timo Schulz * fileutil.c (is_file_compressed): Corrected the magic values for bzip2 and gzip. Noted by David. 2002-05-22 Werner Koch * fileutil.c (compare_filenames): Replaced stricmp by strcasecmp. * miscutil.c (answer_is_yes_no_quit,answer_is_yes_no_default): Ditto. * strgutil.c (strncasecmp): New. (memicmp): Removed. 2002-05-10 Stefan Bellon * memory.c (add_entry) [M_DEBUG]: Added some missing EXTRA_ALIGN. (free_entry) [M_DEBUG]: Free secure memory via secmem_free. (alloc_secure): Malloc at least 1 byte. (realloc) [M_GUARD]: Added missing FNAMEARG to function call. * logger.c (g10_log_bug0) [__riscos__]: Make use of first g10_log_bug0 function for later Norcroft compiler. * riscos.c: Added stdlib.h include. 2002-05-04 Werner Koch * http.c (write_server) [__MINGW32__]: Replaced WriteFile by send because sockets don't work with WriteFile under NT anymore. 2002-05-03 David Shaw * argparse.c (optfile_parse): Remove quotes only if they totally enclose the string, and do not occur within the string. This makes specifying a program under Win32 easier when you need quotes around part of a string, but not around the whole string. 2002-05-02 Werner Koch * memory.c (alloc): Malloc at least 1 byte. Noted by Winona Brown. 2002-04-23 David Shaw * miscutil.c: New function answer_is_yes_no_default() to give a default answer. 2002-04-22 Stefan Bellon * riscos.c (riscos_open, riscos_fopen, riscos_fstat, set_filetype): Removed as they're not needed anymore. * iobuf.c (direct_open) [__riscos__]: Don't allow opening of directories. 2002-04-08 Werner Koch Fixed filename of last entry. 2002-03-29 David Shaw * miscutil.c (print_string, utf8_to_native): If a delimiter is used, then quote the backslash character as well. Problem noted by Rainer Perske. 2002-03-15 Werner Koch * argparse.c (optfile_parse): Fixed missing argument handling. 2002-02-28 Timo Schulz * http.c (write_server): Convert integer to a HANDLE for W32. 2002-01-27 David Shaw * iobuf.c (iobuf_fdopen, iobuf_sockopen): Do not cache fdopened fds on close. 2002-01-08 Werner Koch * secmem.c (print_warn): Print a pointer to the FAQ. 2002-01-05 Werner Koch * argparse.c (default_strusage): Set default copyright date to 2002. 2002-01-02 Stefan Bellon * iobuf.c [__riscos__]: Updated include file name. * fileutil.c [__riscos__]: Ditto. * ttyio.d [__riscos__]: Ditto. * riscos.c [__riscos__]: Ditto. Added debugging code and unified error messages. 2001-12-27 David Shaw * errors.c (g10_errstr): Added G10ERR_KEYSERVER 2001-12-27 Werner Koch * simple-gettext.c [MINGW32]: Fixed last changed. 2001-12-22 Stefan Bellon * memory.c (realloc): Fixed realloc not working when M_GUARD is defined and first parameter is NULL. 2001-12-22 Timo Schulz * fileutil.c (is_file_compressed): New. 2001-12-19 Werner Koch * simple-gettext.c, w32reg.c [CYGWIN32]: Allow to use this file 2001-10-11 Werner Koch * http.c (do_parse_uri): Changed initialization of the port number so that it does also work with x-hkp. By David Shaw. 2001-09-19 Werner Koch * w32reg.c (get_root_key): New. (read_w32_registry_string): Use it here. (write_w32_registry_string): New. Contributed by Timo. * iobuf.c (iobuf_ioctl): New command to disable fd caching. Implemented no_cache flag where needed. (iobuf_sockopen): Always set no_cache flag. * strgutil.c (utf8_to_native): Add a delim arg and changed all callers. Make sure that quoting is done when translation is disabled. * miscutil.c (print_utf8_string2): New. 2001-09-17 Werner Koch * miscutil.c (print_string): Use explicit ranges and not iscntrl(). (make_printable_string): Ditto. 2001-09-07 Werner Koch * strgutil.c (strsep): New, taken from glibc 2.2.1. 2001-09-03 Werner Koch * miscutil.c (strtimestamp,asctimestamp): Avoid trigraphs. 2001-08-21 Stefan Bellon * riscos.c [__riscos__] (close_fds): Fixed possible endless loop. 2001-08-20 Werner Koch Applied patches from Stefan Bellon to support RISC OS. Nearly all of these patches are identified by the __riscos__ macro. * secmem.c [__riscos__]: Disabled secure memory stuff. * dotlock.c, ttyio.c [__riscos__]: Adapted for RISC OS * fileutil.c, iobuf.c: Adapted for RISC OS; mainly replaced hardcoded path separators with EXTSEP_S like macros. * http.c (send_request): Use macros for the env-var name. * logger.c [__riscos__]: Do an fflush at the end of each log function. * memory.c [__riscos__]: Minor patches * riscos.c (set_filetype): New. * secmem.c (lock_pool): Under HPUX mlock is broken but we might have plock, so we use this to lock the entire process. By Albert Chin. 2001-07-03 Werner Koch * strgutil.c (utf8_to_native): Fixed printing of invalid utf-8 characters. Thomas Roessler reported that the escaping didn't work correct. 2001-06-12 Werner Koch * strgutil.c (ascii_memistr,ascii_isupper,ascii_islower, ascii_toupper,ascii_tolower, ascii_strcasecmp, ascii_memcasecmp): New. (set_native_charset): Use ascii_strcasecmp() * fileutil.c (compare_filenames): Ditto * miscutil.c (answer_is_yes): Ditto. (answer_is_yes_no_quit): Ditto. 2001-06-06 Werner Koch * strgutil.c (vasprintf) [__MINGW32__]: New. Taken from libiberty. * ttyio.c (tty_printf) [__MINGW32__]: Replaced the sprintf with the new vasprintf. 2001-06-05 Werner Koch * dotlock.c (make_dotlock): Typo fixes. 2001-05-25 Werner Koch * ttyio.c (do_get): Fixed a serious format string bug. Thanks to fish stiqz. 2001-05-23 Werner Koch * secmem.c (EPERM): Try to work around a Slackware problem. 2001-05-05 Werner Koch * http.c (http_start_data): Flush before writing. (http_wait_response): No need to flush here. 2001-04-27 Werner Koch * memory.c (out_of_core): Print an explanation on reasons why secret memory can get exhausted. 2001-04-23 Werner Koch * http.c (http_wait_response): Implement new flag to inhibit the TCP shutdown. 2001-04-20 Werner Koch * http.c (http_start_data): Use write_server and not the iobuf stuff. I wonder why we are at all using write_server - shouldn't it be handled by iobuf? * strgutil.c (set_native_charset): Allow utf-8 by introducing the new no_translation variable. (native_to_utf8): Handle no_translation. (utf8_to_native): Ditto. 2001-04-19 Werner Koch * miscutil.c (asctimestamp): Handle negative times. We must do this because Windoze segvs on negative times passed to gmtime(). (strtimestamp): Ditto. 2001-04-14 Werner Koch * strgutil.c (utf8_to_native): Fixed a segv. Thanks to Keith Clayton. 2001-04-13 Werner Koch * iobuf.c (iobuf_fopen): Removed because it is not used and furthermore mode is ignored for an fname of "-". Suggested by Florian Weimer. 2001-04-02 Werner Koch * iobuf.c (translate_file_handle): New. Use this function everywhere in this file. (iobuf_translate_file_handle): Always use the osfhandle stuff here because callers don't know the implementation details of iobuf and they expect that the handles are translated. 2001-03-29 Werner Koch * miscutil.c (answer_is_yes): An empty string does now return no. (answer_is_yes_no_quit): Likewise. * iobuf.c (iobuf_close): Burn the buffers. 2001-03-26 Werner Koch * ttyio.c: Define TERMDEVICE depending on OS. * http.c (http_start_data): send a CRLF and not just a LF. Pointed out by Steven Murdoch. 2001-03-13 Werner Koch * iobuf.c (iobuf_sockopen): New. (sock_filter) [__MINGW32__]: New. (iobuf_ioctl): New. (file_filter): Implemented keep_open mode. * http.c (http_open, http_wait_response): Replaced iobuf_fdopen by iobuf_sockopen and use an iobuf_ioctl to avoid the dup(). (deinit_sockets, init_sockets) [__MINGW32__]: New. (connect_server, write_server): Add code to work with W32 sockets. 2001-03-12 Werner Koch * strgutil.c (check_trailing_chars,check_trailing_ws): New. 2001-03-08 Werner Koch * argparse.c (default_strusage): Changed year of printed copyright to 2001. * iobuf.c (fd_cache_invalidate, fd_cache_close, fd_cache_open): New. (direct_open): Invalidate the fd_cache for read access. (file_filter): Cache the close here. (iobuf_open): Use new my_fopen_ro macro to try the cache first. 2001-03-07 Werner Koch * iobuf.c: Made the old stdio file handling cpp conditional controlled by FILE_FILTER_USES_STDIO and added a new open/read/close based one. We don't need the stdio buffering becuase we are doing our own buffering anyway. And it is a prerequesite to allow the use of ReadFile et al for W32 which in turn is needed to make the http stuff work there. The new W32 stuff has also been implemented. Minor changes to all open functions. (direct_open): New. (file_filter): Core of the new read/write handling. (iobuf_get_filelength): Use W32 API function here. But it is currently limited to 2GB files. (iobuf_seek): Ditto. 2001-03-01 Werner Koch * errors.c (g10_errstr): New codes UNU_SECKEY and UNU_PUBKEY. 2000-12-28 Werner Koch * dotlock.c: Made all_lockfiles volatile. (remove_lockfiles): Made public. 2000-11-30 Werner Koch * iobuf.c (iobuf_translate_file_handle): New. (iobuf_open, iobuf_create): Use it for special filenames 2000-11-11 Paul Eggert * iobuf.c (iobuf_get_filelength): Now returns off_t, not u32. Remove kludges to worry about large files; the callers check for files that are too large, and they should already be doing the right thing in an implementation-independent way. (fopen, fstat): Remove macros. * iobuf.c (iobuf_set_limit, iobuf_tell, iobuf_seek): Use off_t, not ulong, for file offsets. (): Include if needed. (LONG_MAX, LONG_MIN): Define a substitute if needed. (fseeko): Define a substitute if needed. * iobuf.c (iobuf_seek): Do not use %lu to report file 2000-11-09 Werner Koch * iobuf.c (iobuf_enable_special_filenames): New. (check_special_filename): New. (iobuf_open): check for special filenames. (iobuf_create): Ditto. 2000-10-23 Werner Koch * secmem.c (lock_pool): Don't print warning for Windows. 2000-10-16 Werner Koch * secmem.c (lock_pool): Fixed error checking for Linux. By James Troup. Thu Sep 14 14:20:38 CEST 2000 Werner Koch * miscutil.c (answer_is_yes_no_quit): Swapped order of yes/no test so that no is returned for an empty input. By David Champion. Wed Sep 6 17:55:47 CEST 2000 Werner Koch * iobuf.c: Use fopen64 insead of fopen when available. (iobuf_get_filelength): Use fstat64 when available but return 2^32-1 if the file is larger than this value. Wed Sep 6 14:59:09 CEST 2000 Werner Koch * secmem.c (secmem_realloc): check for failed secmem_malloc. By Matt Kraai. * strgutil.c (utf8_to_native): Fixed null ptr problem. By Giampaolo Tomassoni. Thu Jul 27 10:02:38 CEST 2000 Werner Koch * iobuf.c: Use setmode() at several places to set stdin and stdout to binary mode for MSDOS based systems * iobuf.c (underflow): Initialize dummy_len to keep memory checker happy. Fri Jun 9 10:09:52 CEST 2000 Werner Koch * ttyio.c: Simulate termios with termios. By Dave Dykstra. Thu Jun 8 20:22:00 CEST 2000 Werner Koch * secmem.c (lock_pool,secmem_init): Additional check for dropped privs. Tue May 30 16:37:55 CEST 2000 Werner Koch * iobuf.c (iobuf_cancel): Fix for MSDOS. Fri Apr 14 19:37:08 CEST 2000 Werner Koch * dotlock.c (disable_dotlock): New. Implmented this in the module. 2000-03-09 14:04:22 Werner Koch (wk@habibti.openit.de) * argparse.c (default_strusage): Changed year of default copyright. Tue Mar 7 18:45:31 CET 2000 Werner Koch * secmem.c (lock_pool): No more warning for QNX. By Sam Roberts. 2000-03-02 15:51:04 Werner Koch (wk@habibti.gnupg.de) * ttyio.c (tty_print_utf8_string): Oops. Thu Mar 2 15:37:46 CET 2000 Werner Koch * ttyio.c (tty_print_utf8_string2): New to allow a max output size. Wed Feb 23 10:07:57 CET 2000 Werner Koch * miscutil.c (asctimestamp): Fix for possible buffer overflow by large system returned date format string. Fri Dec 31 14:08:15 CET 1999 Werner Koch * logger.c (log_inc_errorcount): New. Sat Dec 4 12:30:28 CET 1999 Werner Koch * iobuf.c (iobuf_cancel): Broadcast the new Cancel mesaage to all filters. Mon Nov 22 11:14:53 CET 1999 Werner Koch * strgutil.c (strcasecmp): New. * secmem.c (pool_is_mmapped): Made volatile. Sat Oct 9 20:34:41 CEST 1999 Werner Koch * Makefile.am: Removed libtool. Fri Oct 8 20:32:01 CEST 1999 Werner Koch * w32reg.c: New. * simple-gettext.c: Use the Registry to locate the mo file. * http.c (send_request): Add support for proxys; suggested by Walter Hofmann. (http_open_document): Pass flags to http_open. Fri Sep 17 12:56:42 CEST 1999 Werner Koch * secmem.c (lock_pool): Check for ENOSYS return my mlock() on old SCOs. * ttyio.c (do_get): Replaced #if __MINGW32__ by #ifdef becuase gcc 2.95.1 assigns a floating point value (0.2) to this macro, which in turn can't be used in an expression. Wed Sep 15 16:22:17 CEST 1999 Werner Koch * simple-gettext.c: New. Wed Sep 1 15:30:44 CEST 1999 Werner Koch * argparse.c (arg_parse): Add standard options to the dump-options output. Tue Aug 31 17:20:44 CEST 1999 Werner Koch * strgutil (utf8_to_native): Implemented. (check_utf8_string): Removed. * miscutil.c (make_printable_string): Fixed possible buffer overflow. (print_utf8_string): New. * ttyio.c (tty_print_utf8_string): New. Mon Aug 30 20:38:33 CEST 1999 Werner Koch * secmem.c (pool_okay): declared volatile. * miscutil.c (answer_is_yes): Always check for plain "yes". (answer_is_yes_no_quit): Likewise. * dotlock.c (create_dotlock): Fixed segv during cleanup. Mon Jul 12 14:55:34 CEST 1999 Werner Koch * argparse.c (initialize): Init ret_xxx. (optfile_parse): Remove quotes from arguments. 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 (Rmi). 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 (Gal Quri). 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 (Rmi 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. Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/util/membuf.c0000644000175000017500000000411212635262326012240 00000000000000/* membuf.c - A simple implementation of a dynamic buffer * Copyright (C) 2001, 2003 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 3 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, see . */ #include #include #include #include #include "util.h" /* A simple implementation of a dynamic buffer. Use init_membuf() to create a buffer, put_membuf to append bytes and get_membuf to release and return the buffer. Allocation errors are detected but only returned at the final get_membuf(), this helps not to clutter the code with out of core checks. */ void init_membuf (membuf_t *mb, int initiallen) { mb->len = 0; mb->size = initiallen; mb->out_of_core = 0; mb->buf = xmalloc (initiallen); if (!mb->buf) mb->out_of_core = errno; } void put_membuf (membuf_t *mb, const void *buf, size_t len) { if (mb->out_of_core) return; if (mb->len + len >= mb->size) { char *p; mb->size += len + 1024; p = xrealloc (mb->buf, mb->size); mb->buf = p; } memcpy (mb->buf + mb->len, buf, len); mb->len += len; } void put_membuf_str (membuf_t *mb, const char *buf) { put_membuf (mb, buf, strlen (buf)); } void * get_membuf (membuf_t *mb, size_t *len) { char *p; if (mb->out_of_core) { xfree (mb->buf); mb->buf = NULL; return NULL; } p = mb->buf; if (len) *len = mb->len; mb->buf = NULL; mb->out_of_core = ENOMEM; /* hack to make sure it won't get reused. */ return p; } gnupg-1.4.20/util/timegm.c0000644000175000017500000000324312635262326012253 00000000000000/* timegm.c - libc replacement function * Copyright (C) 2004 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 3 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, see . */ /* timegm() is a GNU function that might not be available everywhere. It's basically the inverse of gmtime() - you give it a struct tm, and get back a time_t. It differs from mktime() in that it handles the case where the struct tm is UTC and the local environment isn't. Some BSDs don't handle the putenv("foo") case properly, so we use unsetenv if the platform has it to remove environment variables. */ #include #include #include #include time_t timegm(struct tm *tm) { time_t answer; char *zone; zone=getenv("TZ"); putenv("TZ=UTC"); tzset(); answer=mktime(tm); if(zone) { char *old_zone; old_zone=malloc(3+strlen(zone)+1); if(old_zone) { strcpy(old_zone,"TZ="); strcat(old_zone,zone); putenv(old_zone); } } else #ifdef HAVE_UNSETENV unsetenv("TZ"); #else putenv("TZ"); #endif tzset(); return answer; } gnupg-1.4.20/util/regcomp.c0000644000175000017500000032700212635262326012427 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #include #include #include #include #include #include #include #if defined(_WIN32) && !defined (MB_CUR_MAX) #define MB_CUR_MAX 2 #endif #if defined HAVE_WCHAR_H || defined _LIBC # include #endif /* HAVE_WCHAR_H || _LIBC */ #if defined HAVE_WCTYPE_H || defined _LIBC # include #endif /* HAVE_WCTYPE_H || _LIBC */ /* In case that the system doesn't have isblank(). */ #if !defined _LIBC && !defined HAVE_ISBLANK && !defined isblank # define isblank(ch) ((ch) == ' ' || (ch) == '\t') #endif #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include # include # include # endif #endif /* This is for other GNU distributions with internationalized messages. */ #if HAVE_LIBINTL_H || defined _LIBC # include # ifdef _LIBC # undef gettext # define gettext(msgid) \ INTUSE(__dcgettext) (INTUSE(_libc_intl_domainname), msgid, LC_MESSAGES) # endif #else # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif #include "_regex.h" /* gnupg */ #include "regex_internal.h" static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, int length, reg_syntax_t syntax); static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap); static reg_errcode_t init_dfa (re_dfa_t *dfa, int pat_len); static reg_errcode_t init_word_char (re_dfa_t *dfa); #ifdef RE_ENABLE_I18N static void free_charset (re_charset_t *cset); #endif /* RE_ENABLE_I18N */ static void free_workarea_compile (regex_t *preg); static reg_errcode_t create_initial_state (re_dfa_t *dfa); static reg_errcode_t analyze (re_dfa_t *dfa); static reg_errcode_t analyze_tree (re_dfa_t *dfa, bin_tree_t *node); static void calc_first (re_dfa_t *dfa, bin_tree_t *node); static void calc_next (re_dfa_t *dfa, bin_tree_t *node); static void calc_epsdest (re_dfa_t *dfa, bin_tree_t *node); static reg_errcode_t duplicate_node (int *new_idx, re_dfa_t *dfa, int org_idx, unsigned int constraint); static reg_errcode_t calc_eclosure (re_dfa_t *dfa); static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, int node, int root); static void calc_inveclosure (re_dfa_t *dfa); static int fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax); static re_token_t fetch_token (re_string_t *input, reg_syntax_t syntax); static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax); static int peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax); static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, int nest, reg_errcode_t *err); static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, int nest, reg_errcode_t *err); static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, int nest, reg_errcode_t *err); static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, int nest, reg_errcode_t *err); static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax); static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token); #ifndef _LIBC # ifdef RE_ENABLE_I18N static reg_errcode_t build_range_exp (re_bitset_ptr_t sbcset, re_charset_t *mbcset, int *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem); static reg_errcode_t build_collating_symbol (re_bitset_ptr_t sbcset, re_charset_t *mbcset, int *coll_syxmalloc, const unsigned char *name); # else /* not RE_ENABLE_I18N */ static reg_errcode_t build_range_exp (re_bitset_ptr_t sbcset, bracket_elem_t *start_elem, bracket_elem_t *end_elem); static reg_errcode_t build_collating_symbol (re_bitset_ptr_t sbcset, const unsigned char *name); # endif /* not RE_ENABLE_I18N */ #endif /* not _LIBC */ #ifdef RE_ENABLE_I18N static reg_errcode_t build_equiv_class (re_bitset_ptr_t sbcset, re_charset_t *mbcset, int *equiv_class_alloc, const unsigned char *name); static reg_errcode_t build_charclass (re_bitset_ptr_t sbcset, re_charset_t *mbcset, int *char_class_alloc, const unsigned char *class_name, reg_syntax_t syntax); #else /* not RE_ENABLE_I18N */ static reg_errcode_t build_equiv_class (re_bitset_ptr_t sbcset, const unsigned char *name); static reg_errcode_t build_charclass (re_bitset_ptr_t sbcset, const unsigned char *class_name, reg_syntax_t syntax); #endif /* not RE_ENABLE_I18N */ static bin_tree_t *build_word_op (re_dfa_t *dfa, int not, reg_errcode_t *err); static void free_bin_tree (bin_tree_t *tree); static bin_tree_t *create_tree (bin_tree_t *left, bin_tree_t *right, re_token_type_t type, int index); static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ const char __re_error_msgid[] attribute_hidden = { #define REG_NOERROR_IDX 0 gettext_noop ("Success") /* REG_NOERROR */ "\0" #define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") gettext_noop ("No match") /* REG_NOMATCH */ "\0" #define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") gettext_noop ("Invalid regular expression") /* REG_BADPAT */ "\0" #define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ "\0" #define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") gettext_noop ("Invalid character class name") /* REG_ECTYPE */ "\0" #define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") gettext_noop ("Trailing backslash") /* REG_EESCAPE */ "\0" #define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") gettext_noop ("Invalid back reference") /* REG_ESUBREG */ "\0" #define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") gettext_noop ("Unmatched [ or [^") /* REG_EBRACK */ "\0" #define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [ or [^") gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ "\0" #define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") gettext_noop ("Unmatched \\{") /* REG_EBRACE */ "\0" #define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ "\0" #define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") gettext_noop ("Invalid range end") /* REG_ERANGE */ "\0" #define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") gettext_noop ("Memory exhausted") /* REG_ESPACE */ "\0" #define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ "\0" #define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") gettext_noop ("Premature end of regular expression") /* REG_EEND */ "\0" #define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") gettext_noop ("Regular expression too big") /* REG_ESIZE */ "\0" #define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ }; const size_t __re_error_msgid_idx[] attribute_hidden = { REG_NOERROR_IDX, REG_NOMATCH_IDX, REG_BADPAT_IDX, REG_ECOLLATE_IDX, REG_ECTYPE_IDX, REG_EESCAPE_IDX, REG_ESUBREG_IDX, REG_EBRACK_IDX, REG_EPAREN_IDX, REG_EBRACE_IDX, REG_BADBR_IDX, REG_ERANGE_IDX, REG_ESPACE_IDX, REG_BADRPT_IDX, REG_EEND_IDX, REG_ESIZE_IDX, REG_ERPAREN_IDX }; /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length LENGTH) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the `allocated' (and perhaps `buffer') and `translate' fields are set in BUFP on entry. */ const char * re_compile_pattern (pattern, length, bufp) const char *pattern; size_t length; struct re_pattern_buffer *bufp; { reg_errcode_t ret; /* GNU code is written to assume at least RE_NREGS registers will be set (and at least one extra will be -1). */ bufp->regs_allocated = REGS_UNALLOCATED; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub. */ bufp->no_sub = 0; /* Match anchors at newline. */ bufp->newline_anchor = 1; ret = re_compile_internal (bufp, pattern, length, re_syntax_options); if (!ret) return NULL; return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } #ifdef _LIBC weak_alias (__re_compile_pattern, re_compile_pattern) #endif /* Set by `re_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (syntax) reg_syntax_t syntax; { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; return ret; } #ifdef _LIBC weak_alias (__re_set_syntax, re_set_syntax) #endif int re_compile_fastmap (bufp) struct re_pattern_buffer *bufp; { re_dfa_t *dfa = (re_dfa_t *) bufp->buffer; char *fastmap = bufp->fastmap; memset (fastmap, '\0', sizeof (char) * SBC_MAX); re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); if (dfa->init_state != dfa->init_state_word) re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); if (dfa->init_state != dfa->init_state_nl) re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); if (dfa->init_state != dfa->init_state_begbuf) re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); bufp->fastmap_accurate = 1; return 0; } #ifdef _LIBC weak_alias (__re_compile_fastmap, re_compile_fastmap) #endif /* Helper function for re_compile_fastmap. Compile fastmap for the initial_state INIT_STATE. */ static void re_compile_fastmap_iter (bufp, init_state, fastmap) regex_t *bufp; const re_dfastate_t *init_state; char *fastmap; { re_dfa_t *dfa = (re_dfa_t *) bufp->buffer; int node_cnt; for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) { int node = init_state->nodes.elems[node_cnt]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_CONTEXT_NODE) { node = dfa->nodes[node].opr.ctx_info->entity; type = dfa->nodes[node].type; } if (type == CHARACTER) fastmap[dfa->nodes[node].opr.c] = 1; else if (type == SIMPLE_BRACKET) { int i, j, ch; for (i = 0, ch = 0; i < BITSET_UINTS; ++i) for (j = 0; j < UINT_BITS; ++j, ++ch) if (dfa->nodes[node].opr.sbcset[i] & (1 << j)) fastmap[ch] = 1; } #ifdef RE_ENABLE_I18N else if (type == COMPLEX_BRACKET) { int i; re_charset_t *cset = dfa->nodes[node].opr.mbcset; if (cset->non_match || cset->ncoll_syms || cset->nequiv_classes || cset->nranges || cset->nchar_classes) { # ifdef _LIBC if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0) { /* In this case we want to catch the bytes which are the first byte of any collation elements. e.g. In da_DK, we want to catch 'a' since "aa" is a valid collation element, and don't catch 'b' since 'b' is the only collation element which starts from 'b'. */ int j, ch; const int32_t *table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); for (i = 0, ch = 0; i < BITSET_UINTS; ++i) for (j = 0; j < UINT_BITS; ++j, ++ch) if (table[ch] < 0) fastmap[ch] = 1; } # else if (MB_CUR_MAX > 1) for (i = 0; i < SBC_MAX; ++i) if (__btowc (i) == WEOF) fastmap[i] = 1; # endif /* not _LIBC */ } for (i = 0; i < cset->nmbchars; ++i) { char buf[256]; wctomb (buf, cset->mbchars[i]); fastmap[*(unsigned char *) buf] = 1; } } #endif /* RE_ENABLE_I18N */ else if (type == END_OF_RE || type == OP_PERIOD #ifdef RE_ENABLE_I18N || type == COMPLEX_BRACKET #endif /* RE_ENABLE_I18N */ ) { memset (fastmap, '\1', sizeof (char) * SBC_MAX); if (type == END_OF_RE) bufp->can_be_null = 1; return; } } } /* Entry point for POSIX code. */ /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set `buffer' to the compiled pattern; `used' to the length of the compiled pattern; `syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; `newline_anchor' to REG_NEWLINE being set in CFLAGS; `fastmap' to an allocated space for the fastmap; `fastmap_accurate' to zero; `re_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (preg, pattern, cflags) regex_t *__restrict preg; const char *__restrict pattern; int cflags; { reg_errcode_t ret; reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; /* Try to allocate space for the fastmap. */ preg->fastmap = re_malloc (char, SBC_MAX); if (BE (preg->fastmap == NULL, 0)) return REG_ESPACE; syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); preg->translate = NULL; ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; /* We have already checked preg->fastmap != NULL. */ if (BE (ret == REG_NOERROR, 1)) { /* Compute the fastmap now, since regexec cannot modify the pattern buffer. */ if (BE (re_compile_fastmap (preg) == -2, 0)) { /* Some error occurred while computing the fastmap, just forget about it. */ re_free (preg->fastmap); preg->fastmap = NULL; } } return (int) ret; } #ifdef _LIBC weak_alias (__regcomp, regcomp) #endif /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (errcode, preg, errbuf, errbuf_size) int errcode; const regex_t *preg; char *errbuf; size_t errbuf_size; { const char *msg; size_t msg_size; if (BE (errcode < 0 || errcode >= (int) (sizeof (__re_error_msgid_idx) / sizeof (__re_error_msgid_idx[0])), 0)) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); msg_size = strlen (msg) + 1; /* Includes the null. */ if (BE (errbuf_size != 0, 1)) { if (BE (msg_size > errbuf_size, 0)) { #if defined HAVE_MEMPCPY || defined _LIBC *((char *) __mempcpy (errbuf, msg, errbuf_size - 1)) = '\0'; #else memcpy (errbuf, msg, errbuf_size - 1); errbuf[errbuf_size - 1] = 0; #endif } else memcpy (errbuf, msg, msg_size); } return msg_size; } #ifdef _LIBC weak_alias (__regerror, regerror) #endif /* Free dynamically allocated space used by PREG. */ void regfree (preg) regex_t *preg; { int i, j; re_dfa_t *dfa = (re_dfa_t *) preg->buffer; if (BE (dfa != NULL, 1)) { re_free (dfa->subexps); for (i = 0; i < dfa->nodes_len; ++i) { re_token_t *node = dfa->nodes + i; #ifdef RE_ENABLE_I18N if (node->type == COMPLEX_BRACKET && node->duplicated == 0) free_charset (node->opr.mbcset); else #endif /* RE_ENABLE_I18N */ if (node->type == SIMPLE_BRACKET && node->duplicated == 0) re_free (node->opr.sbcset); else if (node->type == OP_CONTEXT_NODE) { if (dfa->nodes[node->opr.ctx_info->entity].type == OP_BACK_REF) { if (node->opr.ctx_info->bkref_eclosure != NULL) re_node_set_free (node->opr.ctx_info->bkref_eclosure); re_free (node->opr.ctx_info->bkref_eclosure); } re_free (node->opr.ctx_info); } } re_free (dfa->firsts); re_free (dfa->nexts); for (i = 0; i < dfa->nodes_len; ++i) { if (dfa->eclosures != NULL) re_node_set_free (dfa->eclosures + i); if (dfa->inveclosures != NULL) re_node_set_free (dfa->inveclosures + i); if (dfa->edests != NULL) re_node_set_free (dfa->edests + i); } re_free (dfa->edests); re_free (dfa->eclosures); re_free (dfa->inveclosures); re_free (dfa->nodes); for (i = 0; i <= dfa->state_hash_mask; ++i) { struct re_state_table_entry *entry = dfa->state_table + i; for (j = 0; j < entry->num; ++j) { re_dfastate_t *state = entry->array[j]; if (state->entrance_nodes != &state->nodes) { re_node_set_free (state->entrance_nodes); re_free (state->entrance_nodes); } re_node_set_free (&state->nodes); re_free (state->trtable); re_free (state->trtable_search); re_free (state); } re_free (entry->array); } re_free (dfa->state_table); if (dfa->word_char != NULL) re_free (dfa->word_char); #ifdef DEBUG re_free (dfa->re_str); #endif re_free (dfa); } re_free (preg->fastmap); } #ifdef _LIBC weak_alias (__regfree, regfree) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * # ifdef _LIBC /* Make these definitions weak in libc, so POSIX programs can redefine these names if they don't use our functions, and still use regcomp/regexec above without link errors. */ weak_function # endif re_comp (s) const char *s; { reg_errcode_t ret; if (!s) { if (!re_comp_buf.buffer) return gettext ("No previous regular expression"); return 0; } if (!re_comp_buf.buffer) { re_comp_buf.fastmap = (char *) malloc (SBC_MAX); if (re_comp_buf.fastmap == NULL) return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) REG_ESPACE]); } /* Since `re_exec' always passes NULL for the `regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); if (!ret) return NULL; /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */ return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } #endif /* _REGEX_RE_COMP */ /* Internal entry point. Compile the regular expression PATTERN, whose length is LENGTH. SYNTAX indicate regular expression's syntax. */ static reg_errcode_t re_compile_internal (preg, pattern, length, syntax) regex_t *preg; const char * pattern; int length; reg_syntax_t syntax; { reg_errcode_t err = REG_NOERROR; re_dfa_t *dfa; re_string_t regexp; /* Initialize the pattern buffer. */ preg->fastmap_accurate = 0; preg->syntax = syntax; preg->not_bol = preg->not_eol = 0; preg->used = 0; preg->re_nsub = 0; /* Initialize the dfa. */ dfa = (re_dfa_t *) preg->buffer; if (preg->allocated < sizeof (re_dfa_t)) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. If ->buffer is NULL this is a simple allocation. */ dfa = re_realloc (preg->buffer, re_dfa_t, 1); if (dfa == NULL) return REG_ESPACE; preg->allocated = sizeof (re_dfa_t); } preg->buffer = (unsigned char *) dfa; preg->used = sizeof (re_dfa_t); err = init_dfa (dfa, length); if (BE (err != REG_NOERROR, 0)) { re_free (dfa); preg->buffer = NULL; return err; } #ifdef DEBUG dfa->re_str = re_malloc (char, length + 1); strncpy (dfa->re_str, pattern, length + 1); #endif err = re_string_construct (®exp, pattern, length, preg->translate, syntax & RE_ICASE); if (BE (err != REG_NOERROR, 0)) { re_free (dfa); preg->buffer = NULL; return err; } /* Parse the regular expression, and build a structure tree. */ preg->re_nsub = 0; dfa->str_tree = parse (®exp, preg, syntax, &err); if (BE (dfa->str_tree == NULL, 0)) goto re_compile_internal_free_return; /* Analyze the tree and collect information which is necessary to create the dfa. */ err = analyze (dfa); if (BE (err != REG_NOERROR, 0)) goto re_compile_internal_free_return; /* Then create the initial state of the dfa. */ err = create_initial_state (dfa); if (BE (err != REG_NOERROR, 0)) goto re_compile_internal_free_return; re_compile_internal_free_return: /* Release work areas. */ free_workarea_compile (preg); re_string_destruct (®exp); return err; } /* Initialize DFA. We use the length of the regular expression PAT_LEN as the initial length of some arrays. */ static reg_errcode_t init_dfa (dfa, pat_len) re_dfa_t *dfa; int pat_len; { int table_size; memset (dfa, '\0', sizeof (re_dfa_t)); dfa->nodes_alloc = pat_len + 1; dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); dfa->states_alloc = pat_len + 1; /* table_size = 2 ^ ceil(log pat_len) */ for (table_size = 1; table_size > 0; table_size <<= 1) if (table_size > pat_len) break; dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); dfa->state_hash_mask = table_size - 1; dfa->subexps_alloc = 1; dfa->subexps = re_malloc (re_subexp_t, dfa->subexps_alloc); dfa->word_char = NULL; if (BE (dfa->nodes == NULL || dfa->state_table == NULL || dfa->subexps == NULL, 0)) { /* We don't bother to free anything which was allocated. Very soon the process will go down anyway. */ dfa->subexps = NULL; dfa->state_table = NULL; dfa->nodes = NULL; return REG_ESPACE; } return REG_NOERROR; } /* Initialize WORD_CHAR table, which indicate which character is "word". In this case "word" means that it is the word construction character used by some operators like "\<", "\>", etc. */ static reg_errcode_t init_word_char (dfa) re_dfa_t *dfa; { int i, j, ch; dfa->word_char = (re_bitset_ptr_t) calloc (sizeof (bitset), 1); if (BE (dfa->word_char == NULL, 0)) return REG_ESPACE; for (i = 0, ch = 0; i < BITSET_UINTS; ++i) for (j = 0; j < UINT_BITS; ++j, ++ch) if (isalnum (ch) || ch == '_') dfa->word_char[i] |= 1 << j; return REG_NOERROR; } /* Free the work area which are only used while compiling. */ static void free_workarea_compile (preg) regex_t *preg; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; free_bin_tree (dfa->str_tree); dfa->str_tree = NULL; } /* Create initial states for all contexts. */ static reg_errcode_t create_initial_state (dfa) re_dfa_t *dfa; { int first, i; reg_errcode_t err; re_node_set init_nodes; /* Initial states have the epsilon closure of the node which is the first node of the regular expression. */ first = dfa->str_tree->first; dfa->init_node = first; err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); if (BE (err != REG_NOERROR, 0)) return err; /* The back-references which are in initial states can epsilon transit, since in this case all of the subexpressions can be null. Then we add epsilon closures of the nodes which are the next nodes of the back-references. */ if (dfa->nbackref > 0) for (i = 0; i < init_nodes.nelem; ++i) { int node_idx = init_nodes.elems[i]; re_token_type_t type = dfa->nodes[node_idx].type; int clexp_idx; int entity = (type != OP_CONTEXT_NODE ? node_idx : dfa->nodes[node_idx].opr.ctx_info->entity); if ((type != OP_CONTEXT_NODE || (dfa->nodes[entity].type != OP_BACK_REF)) && (type != OP_BACK_REF)) continue; for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) { re_token_t *clexp_node; clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; if (clexp_node->type == OP_CLOSE_SUBEXP && clexp_node->opr.idx + 1 == dfa->nodes[entity].opr.idx) break; } if (clexp_idx == init_nodes.nelem) continue; if (type == OP_CONTEXT_NODE && (dfa->nodes[dfa->nodes[node_idx].opr.ctx_info->entity].type == OP_BACK_REF)) { int prev_nelem = init_nodes.nelem; re_node_set_merge (&init_nodes, dfa->nodes[node_idx].opr.ctx_info->bkref_eclosure); if (prev_nelem < init_nodes.nelem) i = 0; } else if (type == OP_BACK_REF) { int next_idx = dfa->nexts[node_idx]; if (!re_node_set_contains (&init_nodes, next_idx)) { re_node_set_merge (&init_nodes, dfa->eclosures + next_idx); i = 0; } } } /* It must be the first time to invoke acquire_state. */ dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); /* We don't check ERR here, since the initial state must not be NULL. */ if (BE (dfa->init_state == NULL, 0)) return err; if (dfa->init_state->has_constraint) { dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_WORD); dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE); dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (BE (dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL, 0)) return err; } else dfa->init_state_word = dfa->init_state_nl = dfa->init_state_begbuf = dfa->init_state; re_node_set_free (&init_nodes); return REG_NOERROR; } /* Analyze the structure tree, and calculate "first", "next", "edest", "eclosure", and "inveclosure". */ static reg_errcode_t analyze (dfa) re_dfa_t *dfa; { int i; reg_errcode_t ret; /* Allocate arrays. */ dfa->firsts = re_malloc (int, dfa->nodes_alloc); dfa->nexts = re_malloc (int, dfa->nodes_alloc); dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_alloc); if (BE (dfa->firsts == NULL || dfa->nexts == NULL || dfa->edests == NULL || dfa->eclosures == NULL || dfa->inveclosures == NULL, 0)) return REG_ESPACE; /* Initialize them. */ for (i = 0; i < dfa->nodes_len; ++i) { dfa->firsts[i] = -1; dfa->nexts[i] = -1; re_node_set_init_empty (dfa->edests + i); re_node_set_init_empty (dfa->eclosures + i); re_node_set_init_empty (dfa->inveclosures + i); } ret = analyze_tree (dfa, dfa->str_tree); if (BE (ret == REG_NOERROR, 1)) { ret = calc_eclosure (dfa); if (ret == REG_NOERROR) calc_inveclosure (dfa); } return ret; } /* Helper functions for analyze. This function calculate "first", "next", and "edest" for the subtree whose root is NODE. */ static reg_errcode_t analyze_tree (dfa, node) re_dfa_t *dfa; bin_tree_t *node; { reg_errcode_t ret; if (node->first == -1) calc_first (dfa, node); if (node->next == -1) calc_next (dfa, node); if (node->eclosure.nelem == 0) calc_epsdest (dfa, node); /* Calculate "first" etc. for the left child. */ if (node->left != NULL) { ret = analyze_tree (dfa, node->left); if (BE (ret != REG_NOERROR, 0)) return ret; } /* Calculate "first" etc. for the right child. */ if (node->right != NULL) { ret = analyze_tree (dfa, node->right); if (BE (ret != REG_NOERROR, 0)) return ret; } return REG_NOERROR; } /* Calculate "first" for the node NODE. */ static void calc_first (dfa, node) re_dfa_t *dfa; bin_tree_t *node; { int idx, type; idx = node->node_idx; type = (node->type == 0) ? dfa->nodes[idx].type : node->type; switch (type) { #ifdef DEBUG case OP_OPEN_BRACKET: case OP_CLOSE_BRACKET: case OP_OPEN_DUP_NUM: case OP_CLOSE_DUP_NUM: case OP_NON_MATCH_LIST: case OP_OPEN_COLL_ELEM: case OP_CLOSE_COLL_ELEM: case OP_OPEN_EQUIV_CLASS: case OP_CLOSE_EQUIV_CLASS: case OP_OPEN_CHAR_CLASS: case OP_CLOSE_CHAR_CLASS: /* These must not be appeared here. */ assert (0); #endif case END_OF_RE: case CHARACTER: case OP_PERIOD: case OP_DUP_ASTERISK: case OP_DUP_QUESTION: #ifdef RE_ENABLE_I18N case COMPLEX_BRACKET: #endif /* RE_ENABLE_I18N */ case SIMPLE_BRACKET: case OP_BACK_REF: case ANCHOR: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: node->first = idx; break; case OP_DUP_PLUS: #ifdef DEBUG assert (node->left != NULL); #endif if (node->left->first == -1) calc_first (dfa, node->left); node->first = node->left->first; break; case OP_ALT: node->first = idx; break; /* else fall through */ default: #ifdef DEBUG assert (node->left != NULL); #endif if (node->left->first == -1) calc_first (dfa, node->left); node->first = node->left->first; break; } if (node->type == 0) dfa->firsts[idx] = node->first; } /* Calculate "next" for the node NODE. */ static void calc_next (dfa, node) re_dfa_t *dfa; bin_tree_t *node; { int idx, type; bin_tree_t *parent = node->parent; if (parent == NULL) { node->next = -1; idx = node->node_idx; if (node->type == 0) dfa->nexts[idx] = node->next; return; } idx = parent->node_idx; type = (parent->type == 0) ? dfa->nodes[idx].type : parent->type; switch (type) { case OP_DUP_ASTERISK: case OP_DUP_PLUS: node->next = idx; break; case CONCAT: if (parent->left == node) { if (parent->right->first == -1) calc_first (dfa, parent->right); node->next = parent->right->first; break; } /* else fall through */ default: if (parent->next == -1) calc_next (dfa, parent); node->next = parent->next; break; } idx = node->node_idx; if (node->type == 0) dfa->nexts[idx] = node->next; } /* Calculate "edest" for the node NODE. */ static void calc_epsdest (dfa, node) re_dfa_t *dfa; bin_tree_t *node; { int idx; idx = node->node_idx; if (node->type == 0) { if (dfa->nodes[idx].type == OP_DUP_ASTERISK || dfa->nodes[idx].type == OP_DUP_PLUS || dfa->nodes[idx].type == OP_DUP_QUESTION) { if (node->left->first == -1) calc_first (dfa, node->left); if (node->next == -1) calc_next (dfa, node); re_node_set_init_2 (dfa->edests + idx, node->left->first, node->next); } else if (dfa->nodes[idx].type == OP_ALT) { int left, right; if (node->left != NULL) { if (node->left->first == -1) calc_first (dfa, node->left); left = node->left->first; } else { if (node->next == -1) calc_next (dfa, node); left = node->next; } if (node->right != NULL) { if (node->right->first == -1) calc_first (dfa, node->right); right = node->right->first; } else { if (node->next == -1) calc_next (dfa, node); right = node->next; } re_node_set_init_2 (dfa->edests + idx, left, right); } else if (dfa->nodes[idx].type == ANCHOR || dfa->nodes[idx].type == OP_OPEN_SUBEXP || dfa->nodes[idx].type == OP_CLOSE_SUBEXP) re_node_set_init_1 (dfa->edests + idx, node->next); } } /* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. The new index will be stored in NEW_IDX and return REG_NOERROR if succeeded, otherwise return the error code. */ static reg_errcode_t duplicate_node (new_idx, dfa, org_idx, constraint) re_dfa_t *dfa; int *new_idx, org_idx; unsigned int constraint; { re_token_t dup; int dup_idx; reg_errcode_t err; dup.type = OP_CONTEXT_NODE; if (dfa->nodes[org_idx].type == OP_CONTEXT_NODE) { /* If the node whose index is ORG_IDX is the same as the intended node, use it. */ if (dfa->nodes[org_idx].constraint == constraint) { *new_idx = org_idx; return REG_NOERROR; } dup.constraint = constraint | dfa->nodes[org_idx].constraint; } else dup.constraint = constraint; /* In case that `entity' points OP_CONTEXT_NODE, we correct `entity' to real entity in calc_inveclosures(). */ dup.opr.ctx_info = malloc (sizeof (*dup.opr.ctx_info)); dup_idx = re_dfa_add_node (dfa, dup, 1); if (BE (dup.opr.ctx_info == NULL || dup_idx == -1, 0)) return REG_ESPACE; dup.opr.ctx_info->entity = org_idx; dup.opr.ctx_info->bkref_eclosure = NULL; dfa->nodes[dup_idx].duplicated = 1; dfa->firsts[dup_idx] = dfa->firsts[org_idx]; dfa->nexts[dup_idx] = dfa->nexts[org_idx]; err = re_node_set_init_copy (dfa->edests + dup_idx, dfa->edests + org_idx); if (BE (err != REG_NOERROR, 0)) return err; /* Since we don't duplicate epsilon nodes, epsilon closure have only itself. */ err = re_node_set_init_1 (dfa->eclosures + dup_idx, dup_idx); if (BE (err != REG_NOERROR, 0)) return err; err = re_node_set_init_1 (dfa->inveclosures + dup_idx, dup_idx); if (BE (err != REG_NOERROR, 0)) return err; /* Then we must update inveclosure for this node. We process them at last part of calc_eclosure(), since we don't complete to calculate them here. */ *new_idx = dup_idx; return REG_NOERROR; } static void calc_inveclosure (dfa) re_dfa_t *dfa; { int src, idx, dest, entity; for (src = 0; src < dfa->nodes_len; ++src) { for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) { dest = dfa->eclosures[src].elems[idx]; re_node_set_insert (dfa->inveclosures + dest, src); } entity = src; while (dfa->nodes[entity].type == OP_CONTEXT_NODE) { entity = dfa->nodes[entity].opr.ctx_info->entity; re_node_set_merge (dfa->inveclosures + src, dfa->inveclosures + entity); dfa->nodes[src].opr.ctx_info->entity = entity; } } } /* Calculate "eclosure" for all the node in DFA. */ static reg_errcode_t calc_eclosure (dfa) re_dfa_t *dfa; { int idx, node_idx, max, incomplete = 0; #ifdef DEBUG assert (dfa->nodes_len > 0); #endif /* For each nodes, calculate epsilon closure. */ for (node_idx = 0, max = dfa->nodes_len; ; ++node_idx) { reg_errcode_t err; re_node_set eclosure_elem; if (node_idx == max) { if (!incomplete) break; incomplete = 0; node_idx = 0; } #ifdef DEBUG assert (dfa->nodes[node_idx].type != OP_CONTEXT_NODE); assert (dfa->eclosures[node_idx].nelem != -1); #endif /* If we have already calculated, skip it. */ if (dfa->eclosures[node_idx].nelem != 0) continue; /* Calculate epsilon closure of `node_idx'. */ err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, 1); if (BE (err != REG_NOERROR, 0)) return err; if (dfa->eclosures[node_idx].nelem == 0) { incomplete = 1; re_node_set_free (&eclosure_elem); } } /* for duplicated nodes. */ for (idx = max; idx < dfa->nodes_len; ++idx) { int entity, i, constraint; re_node_set *bkref_eclosure; entity = dfa->nodes[idx].opr.ctx_info->entity; re_node_set_merge (dfa->inveclosures + idx, dfa->inveclosures + entity); if (dfa->nodes[entity].type != OP_BACK_REF) continue; /* If the node is backreference, duplicate the epsilon closure of the next node. Since it may epsilon transit. */ /* Note: duplicate_node() may realloc dfa->eclosures, etc. */ bkref_eclosure = re_malloc (re_node_set, 1); if (BE (bkref_eclosure == NULL, 0)) return REG_ESPACE; re_node_set_init_empty (bkref_eclosure); constraint = dfa->nodes[idx].constraint; for (i = 0; i < dfa->eclosures[dfa->nexts[idx]].nelem; ++i) { int dest_node_idx = dfa->eclosures[dfa->nexts[idx]].elems[i]; if (!IS_EPSILON_NODE (dfa->nodes[dest_node_idx].type)) { reg_errcode_t err; err = duplicate_node (&dest_node_idx, dfa, dest_node_idx, constraint); if (BE (err != REG_NOERROR, 0)) return err; } re_node_set_insert (bkref_eclosure, dest_node_idx); } dfa->nodes[idx].opr.ctx_info->bkref_eclosure = bkref_eclosure; } return REG_NOERROR; } /* Calculate epsilon closure of NODE. */ static reg_errcode_t calc_eclosure_iter (new_set, dfa, node, root) re_node_set *new_set; re_dfa_t *dfa; int node, root; { reg_errcode_t err; unsigned int constraint; int i, max, incomplete = 0; re_node_set eclosure; err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); if (BE (err != REG_NOERROR, 0)) return err; /* This indicates that we are calculating this node now. We reference this value to avoid infinite loop. */ dfa->eclosures[node].nelem = -1; constraint = ((dfa->nodes[node].type == ANCHOR) ? dfa->nodes[node].opr.ctx_type : 0); /* Expand each epsilon destination nodes. */ if (dfa->edests[node].nelem != 0) for (i = 0; i < dfa->edests[node].nelem; ++i) { re_node_set eclosure_elem; int edest = dfa->edests[node].elems[i]; /* If calculating the epsilon closure of `edest' is in progress, return intermediate result. */ if (dfa->eclosures[edest].nelem == -1) { incomplete = 1; continue; } /* If we haven't calculated the epsilon closure of `edest' yet, calculate now. Otherwise use calculated epsilon closure. */ if (dfa->eclosures[edest].nelem == 0) { err = calc_eclosure_iter (&eclosure_elem, dfa, edest, 0); if (BE (err != REG_NOERROR, 0)) return err; } else eclosure_elem = dfa->eclosures[edest]; /* Merge the epsilon closure of `edest'. */ re_node_set_merge (&eclosure, &eclosure_elem); /* If the epsilon closure of `edest' is incomplete, the epsilon closure of this node is also incomplete. */ if (dfa->eclosures[edest].nelem == 0) { incomplete = 1; re_node_set_free (&eclosure_elem); } } /* If the current node has constraints, duplicate all non-epsilon nodes. Since they must inherit the constraints. */ if (constraint) for (i = 0, max = eclosure.nelem; i < max; ++i) { int dest = eclosure.elems[i]; if (!IS_EPSILON_NODE (dfa->nodes[dest].type)) { int dup_dest; reg_errcode_t err; err = duplicate_node (&dup_dest, dfa, dest, constraint); if (BE (err != REG_NOERROR, 0)) return err; if (dest != dup_dest) { re_node_set_remove_at (&eclosure, i--); re_node_set_insert (&eclosure, dup_dest); --max; } } } /* Epsilon closures include itself. */ re_node_set_insert (&eclosure, node); if (incomplete && !root) dfa->eclosures[node].nelem = 0; else dfa->eclosures[node] = eclosure; *new_set = eclosure; return REG_NOERROR; } /* Functions for token which are used in the parser. */ /* Fetch a token from INPUT. We must not use this function inside bracket expressions. */ static re_token_t fetch_token (input, syntax) re_string_t *input; reg_syntax_t syntax; { re_token_t token; int consumed_byte; consumed_byte = peek_token (&token, input, syntax); re_string_skip_bytes (input, consumed_byte); return token; } /* Peek a token from INPUT, and return the length of the token. We must not use this function inside bracket expressions. */ static int peek_token (token, input, syntax) re_token_t *token; re_string_t *input; reg_syntax_t syntax; { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; #ifdef RE_ENABLE_I18N token->mb_partial = 0; if (MB_CUR_MAX > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; token->mb_partial = 1; return 1; } #endif if (c == '\\') { unsigned char c2; if (re_string_cur_idx (input) + 1 >= re_string_length (input)) { token->type = BACK_SLASH; return 1; } c2 = re_string_peek_byte_case (input, 1); token->opr.c = c2; token->type = CHARACTER; switch (c2) { case '|': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (!(syntax & RE_NO_BK_REFS)) { token->type = OP_BACK_REF; token->opr.idx = c2 - '0'; } break; case '<': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.idx = WORD_FIRST; } break; case '>': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.idx = WORD_LAST; } break; case 'b': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.idx = WORD_DELIM; } break; case 'B': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.idx = INSIDE_WORD; } break; case 'w': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_WORD; break; case 'W': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTWORD; break; case '`': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.idx = BUF_FIRST; } break; case '\'': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.idx = BUF_LAST; } break; case '(': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_OPEN_SUBEXP; break; case ')': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_CLOSE_SUBEXP; break; case '+': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_CLOSE_DUP_NUM; break; default: break; } return 2; } token->type = CHARACTER; switch (c) { case '\n': if (syntax & RE_NEWLINE_ALT) token->type = OP_ALT; break; case '|': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '*': token->type = OP_DUP_ASTERISK; break; case '+': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_CLOSE_DUP_NUM; break; case '(': if (syntax & RE_NO_BK_PARENS) token->type = OP_OPEN_SUBEXP; break; case ')': if (syntax & RE_NO_BK_PARENS) token->type = OP_CLOSE_SUBEXP; break; case '[': token->type = OP_OPEN_BRACKET; break; case '.': token->type = OP_PERIOD; break; case '^': if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && re_string_cur_idx (input) != 0) { char prev = re_string_peek_byte (input, -1); if (prev != '|' && prev != '(' && (!(syntax & RE_NEWLINE_ALT) || prev != '\n')) break; } token->type = ANCHOR; token->opr.idx = LINE_FIRST; break; case '$': if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && re_string_cur_idx (input) + 1 != re_string_length (input)) { re_token_t next; re_string_skip_bytes (input, 1); peek_token (&next, input, syntax); re_string_skip_bytes (input, -1); if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) break; } token->type = ANCHOR; token->opr.idx = LINE_LAST; break; default: break; } return 1; } /* Peek a token from INPUT, and return the length of the token. We must not use this function out of bracket expressions. */ static int peek_token_bracket (token, input, syntax) re_token_t *token; re_string_t *input; reg_syntax_t syntax; { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; return 1; } #endif /* RE_ENABLE_I18N */ if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS)) { /* In this case, '\' escape a character. */ unsigned char c2; c2 = re_string_peek_byte (input, 1); token->opr.c = c2; token->type = CHARACTER; return 1; } if (c == '[') /* '[' is a special char in a bracket exps. */ { unsigned char c2; int token_len; c2 = re_string_peek_byte (input, 1); token->opr.c = c2; token_len = 2; switch (c2) { case '.': token->type = OP_OPEN_COLL_ELEM; break; case '=': token->type = OP_OPEN_EQUIV_CLASS; break; case ':': if (syntax & RE_CHAR_CLASSES) { token->type = OP_OPEN_CHAR_CLASS; break; } /* else fall through. */ default: token->type = CHARACTER; token->opr.c = c; token_len = 1; break; } return token_len; } switch (c) { case '-': token->type = OP_CHARSET_RANGE; break; case ']': token->type = OP_CLOSE_BRACKET; break; case '^': token->type = OP_NON_MATCH_LIST; break; default: token->type = CHARACTER; } return 1; } /* Functions for parser. */ /* Entry point of the parser. Parse the regular expression REGEXP and return the structure tree. If an error is occured, ERR is set by error code, and return NULL. This function build the following tree, from regular expression : CAT / \ / \ EOR CAT means concatenation. EOR means end of regular expression. */ static bin_tree_t * parse (regexp, preg, syntax, err) re_string_t *regexp; regex_t *preg; reg_syntax_t syntax; reg_errcode_t *err; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; bin_tree_t *tree, *eor, *root; re_token_t current_token; int new_idx; current_token = fetch_token (regexp, syntax); tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; new_idx = re_dfa_add_node (dfa, current_token, 0); eor = create_tree (NULL, NULL, 0, new_idx); if (tree != NULL) root = create_tree (tree, eor, CONCAT, 0); else root = eor; if (BE (new_idx == -1 || eor == NULL || root == NULL, 0)) return *err = REG_ESPACE, NULL; return root; } /* This function build the following tree, from regular expression |: ALT / \ / \ ALT means alternative, which represents the operator `|'. */ static bin_tree_t * parse_reg_exp (regexp, preg, token, syntax, nest, err) re_string_t *regexp; regex_t *preg; re_token_t *token; reg_syntax_t syntax; int nest; reg_errcode_t *err; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; bin_tree_t *tree, *branch = NULL; int new_idx; tree = parse_branch (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; while (token->type == OP_ALT) { re_token_t alt_token = *token; new_idx = re_dfa_add_node (dfa, alt_token, 0); *token = fetch_token (regexp, syntax); if (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { branch = parse_branch (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && branch == NULL, 0)) { free_bin_tree (tree); return NULL; } } else branch = NULL; tree = create_tree (tree, branch, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) return *err = REG_ESPACE, NULL; dfa->has_plural_match = 1; } return tree; } /* This function build the following tree, from regular expression : CAT / \ / \ CAT means concatenation. */ static bin_tree_t * parse_branch (regexp, preg, token, syntax, nest, err) re_string_t *regexp; regex_t *preg; re_token_t *token; reg_syntax_t syntax; int nest; reg_errcode_t *err; { bin_tree_t *tree, *exp; tree = parse_expression (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; while (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { exp = parse_expression (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && exp == NULL, 0)) { free_bin_tree (tree); return NULL; } if (tree != NULL && exp != NULL) { tree = create_tree (tree, exp, CONCAT, 0); if (tree == NULL) return *err = REG_ESPACE, NULL; } else if (tree == NULL) tree = exp; /* Otherwise exp == NULL, we don't need to create new tree. */ } return tree; } /* This function build the following tree, from regular expression a*: * | a */ static bin_tree_t * parse_expression (regexp, preg, token, syntax, nest, err) re_string_t *regexp; regex_t *preg; re_token_t *token; reg_syntax_t syntax; int nest; reg_errcode_t *err; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; bin_tree_t *tree; int new_idx; switch (token->type) { case CHARACTER: new_idx = re_dfa_add_node (dfa, *token, 0); tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) return *err = REG_ESPACE, NULL; #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) { while (!re_string_eoi (regexp) && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) { bin_tree_t *mbc_remain; *token = fetch_token (regexp, syntax); new_idx = re_dfa_add_node (dfa, *token, 0); mbc_remain = create_tree (NULL, NULL, 0, new_idx); tree = create_tree (tree, mbc_remain, CONCAT, 0); if (BE (new_idx == -1 || mbc_remain == NULL || tree == NULL, 0)) return *err = REG_ESPACE, NULL; } } #endif break; case OP_OPEN_SUBEXP: tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_OPEN_BRACKET: tree = parse_bracket_exp (regexp, dfa, token, syntax, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_BACK_REF: if (BE (preg->re_nsub < token->opr.idx || dfa->subexps[token->opr.idx - 1].end == -1, 0)) { *err = REG_ESUBREG; return NULL; } new_idx = re_dfa_add_node (dfa, *token, 0); tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) return *err = REG_ESPACE, NULL; ++dfa->nbackref; dfa->has_mb_node = 1; break; case OP_DUP_ASTERISK: case OP_DUP_PLUS: case OP_DUP_QUESTION: case OP_OPEN_DUP_NUM: if (syntax & RE_CONTEXT_INVALID_OPS) return *err = REG_BADRPT, NULL; else if (syntax & RE_CONTEXT_INDEP_OPS) { *token = fetch_token (regexp, syntax); return parse_expression (regexp, preg, token, syntax, nest, err); } /* else fall through */ case OP_CLOSE_SUBEXP: if ((token->type == OP_CLOSE_SUBEXP) && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) return *err = REG_ERPAREN, NULL; /* else fall through */ case OP_CLOSE_DUP_NUM: /* We treat it as a normal character. */ /* Then we can these characters as normal characters. */ token->type = CHARACTER; new_idx = re_dfa_add_node (dfa, *token, 0); tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) return *err = REG_ESPACE, NULL; break; case ANCHOR: if (dfa->word_char == NULL) { *err = init_word_char (dfa); if (BE (*err != REG_NOERROR, 0)) return NULL; } if (token->opr.ctx_type == WORD_DELIM) { bin_tree_t *tree_first, *tree_last; int idx_first, idx_last; token->opr.ctx_type = WORD_FIRST; idx_first = re_dfa_add_node (dfa, *token, 0); tree_first = create_tree (NULL, NULL, 0, idx_first); token->opr.ctx_type = WORD_LAST; idx_last = re_dfa_add_node (dfa, *token, 0); tree_last = create_tree (NULL, NULL, 0, idx_last); token->type = OP_ALT; new_idx = re_dfa_add_node (dfa, *token, 0); tree = create_tree (tree_first, tree_last, 0, new_idx); if (BE (idx_first == -1 || idx_last == -1 || new_idx == -1 || tree_first == NULL || tree_last == NULL || tree == NULL, 0)) return *err = REG_ESPACE, NULL; } else { new_idx = re_dfa_add_node (dfa, *token, 0); tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) return *err = REG_ESPACE, NULL; } /* We must return here, since ANCHORs can't be followed by repetition operators. eg. RE"^*" is invalid or "", it must not be "". */ *token = fetch_token (regexp, syntax); return tree; case OP_PERIOD: new_idx = re_dfa_add_node (dfa, *token, 0); tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) return *err = REG_ESPACE, NULL; if (MB_CUR_MAX > 1) dfa->has_mb_node = 1; break; case OP_WORD: tree = build_word_op (dfa, 0, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_NOTWORD: tree = build_word_op (dfa, 1, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; break; case OP_ALT: case END_OF_RE: return NULL; case BACK_SLASH: *err = REG_EESCAPE; return NULL; default: /* Must not happen? */ #ifdef DEBUG assert (0); #endif return NULL; } *token = fetch_token (regexp, syntax); while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) { tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; dfa->has_plural_match = 1; } return tree; } /* This function build the following tree, from regular expression (): SUBEXP | */ static bin_tree_t * parse_sub_exp (regexp, preg, token, syntax, nest, err) re_string_t *regexp; regex_t *preg; re_token_t *token; reg_syntax_t syntax; int nest; reg_errcode_t *err; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; bin_tree_t *tree, *left_par, *right_par; size_t cur_nsub; int new_idx; cur_nsub = preg->re_nsub++; if (dfa->subexps_alloc < preg->re_nsub) { re_subexp_t *new_array; dfa->subexps_alloc *= 2; new_array = re_realloc (dfa->subexps, re_subexp_t, dfa->subexps_alloc); if (BE (new_array == NULL, 0)) { dfa->subexps_alloc /= 2; *err = REG_ESPACE; return NULL; } dfa->subexps = new_array; } dfa->subexps[cur_nsub].start = dfa->nodes_len; dfa->subexps[cur_nsub].end = -1; new_idx = re_dfa_add_node (dfa, *token, 0); left_par = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || left_par == NULL, 0)) return *err = REG_ESPACE, NULL; dfa->nodes[new_idx].opr.idx = cur_nsub; *token = fetch_token (regexp, syntax); /* The subexpression may be a null string. */ if (token->type == OP_CLOSE_SUBEXP) tree = NULL; else { tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); if (BE (*err != REG_NOERROR && tree == NULL, 0)) return NULL; } if (BE (token->type != OP_CLOSE_SUBEXP, 0)) { free_bin_tree (tree); *err = REG_BADPAT; return NULL; } new_idx = re_dfa_add_node (dfa, *token, 0); dfa->subexps[cur_nsub].end = dfa->nodes_len; right_par = create_tree (NULL, NULL, 0, new_idx); tree = ((tree == NULL) ? right_par : create_tree (tree, right_par, CONCAT, 0)); tree = create_tree (left_par, tree, CONCAT, 0); if (BE (new_idx == -1 || right_par == NULL || tree == NULL, 0)) return *err = REG_ESPACE, NULL; dfa->nodes[new_idx].opr.idx = cur_nsub; return tree; } /* This function parse repetition operators like "*", "+", "{1,3}" etc. */ static bin_tree_t * parse_dup_op (dup_elem, regexp, dfa, token, syntax, err) bin_tree_t *dup_elem; re_string_t *regexp; re_dfa_t *dfa; re_token_t *token; reg_syntax_t syntax; reg_errcode_t *err; { re_token_t dup_token; bin_tree_t *tree = dup_elem, *work_tree; int new_idx, start_idx = re_string_cur_idx (regexp); re_token_t start_token = *token; if (token->type == OP_OPEN_DUP_NUM) { int i; int end = 0; int start = fetch_number (regexp, token, syntax); bin_tree_t *elem; if (start == -1) { if (token->type == CHARACTER && token->opr.c == ',') start = 0; /* We treat "{,m}" as "{0,m}". */ else { *err = REG_BADBR; /* {} is invalid. */ return NULL; } } if (BE (start != -2, 1)) { /* We treat "{n}" as "{n,n}". */ end = ((token->type == OP_CLOSE_DUP_NUM) ? start : ((token->type == CHARACTER && token->opr.c == ',') ? fetch_number (regexp, token, syntax) : -2)); } if (BE (start == -2 || end == -2, 0)) { /* Invalid sequence. */ if (token->type == OP_CLOSE_DUP_NUM) goto parse_dup_op_invalid_interval; else goto parse_dup_op_ebrace; } if (BE (start == 0 && end == 0, 0)) { /* We treat "{0}" and "{0,0}" as null string. */ *token = fetch_token (regexp, syntax); free_bin_tree (dup_elem); return NULL; } /* Extract "{n,m}" to "...{0,}". */ elem = tree; for (i = 0; i < start; ++i) if (i != 0) { work_tree = duplicate_tree (elem, dfa); tree = create_tree (tree, work_tree, CONCAT, 0); if (BE (work_tree == NULL || tree == NULL, 0)) goto parse_dup_op_espace; } if (end == -1) { /* We treat "{0,}" as "*". */ dup_token.type = OP_DUP_ASTERISK; if (start > 0) { elem = duplicate_tree (elem, dfa); new_idx = re_dfa_add_node (dfa, dup_token, 0); work_tree = create_tree (elem, NULL, 0, new_idx); tree = create_tree (tree, work_tree, CONCAT, 0); if (BE (elem == NULL || new_idx == -1 || work_tree == NULL || tree == NULL, 0)) goto parse_dup_op_espace; } else { new_idx = re_dfa_add_node (dfa, dup_token, 0); tree = create_tree (elem, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) goto parse_dup_op_espace; } } else if (end - start > 0) { /* Then extract "{0,m}" to "??...?". */ dup_token.type = OP_DUP_QUESTION; if (start > 0) { elem = duplicate_tree (elem, dfa); new_idx = re_dfa_add_node (dfa, dup_token, 0); elem = create_tree (elem, NULL, 0, new_idx); tree = create_tree (tree, elem, CONCAT, 0); if (BE (elem == NULL || new_idx == -1 || tree == NULL, 0)) goto parse_dup_op_espace; } else { new_idx = re_dfa_add_node (dfa, dup_token, 0); tree = elem = create_tree (elem, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) goto parse_dup_op_espace; } for (i = 1; i < end - start; ++i) { work_tree = duplicate_tree (elem, dfa); tree = create_tree (tree, work_tree, CONCAT, 0); if (BE (work_tree == NULL || tree == NULL, 0)) return *err = REG_ESPACE, NULL; } } } else { new_idx = re_dfa_add_node (dfa, *token, 0); tree = create_tree (tree, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) return *err = REG_ESPACE, NULL; } *token = fetch_token (regexp, syntax); return tree; parse_dup_op_espace: free_bin_tree (tree); *err = REG_ESPACE; return NULL; parse_dup_op_ebrace: if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0)) { *err = REG_EBRACE; return NULL; } goto parse_dup_op_rollback; parse_dup_op_invalid_interval: if (BE (!(syntax & RE_INVALID_INTERVAL_ORD), 0)) { *err = REG_BADBR; return NULL; } parse_dup_op_rollback: re_string_set_index (regexp, start_idx); *token = start_token; token->type = CHARACTER; return dup_elem; } /* Size of the names for collating symbol/equivalence_class/character_class. I'm not sure, but maybe enough. */ #define BRACKET_NAME_BUF_SIZE 32 #ifndef _LIBC /* Local function for parse_bracket_exp only used in case of NOT _LIBC. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument sinse we may update it. */ static reg_errcode_t # ifdef RE_ENABLE_I18N build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem) re_charset_t *mbcset; int *range_alloc; # else /* not RE_ENABLE_I18N */ build_range_exp (sbcset, start_elem, end_elem) # endif /* not RE_ENABLE_I18N */ re_bitset_ptr_t sbcset; bracket_elem_t *start_elem, *end_elem; { unsigned int start_ch, end_ch; /* Equivalence Classes and Character Classes can't be a range start/end. */ if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, 0)) return REG_ERANGE; /* We can handle no multi character collating elements without libc support. */ if (BE ((start_elem->type == COLL_SYM && strlen ((char *) start_elem->opr.name) > 1) || (end_elem->type == COLL_SYM && strlen ((char *) end_elem->opr.name) > 1), 0)) return REG_ECOLLATE; # ifdef RE_ENABLE_I18N { wchar_t wc, start_wc, end_wc; wchar_t cmp_buf[6] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'}; start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)); end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) ? __btowc (start_ch) : start_elem->opr.wch); end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) ? __btowc (end_ch) : end_elem->opr.wch); cmp_buf[0] = start_wc; cmp_buf[4] = end_wc; if (wcscoll (cmp_buf, cmp_buf + 4) > 0) return REG_ERANGE; /* Check the space of the arrays. */ if (*range_alloc == mbcset->nranges) { /* There are not enough space, need realloc. */ wchar_t *new_array_start, *new_array_end; int new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; /* Use realloc since mbcset->range_starts and mbcset->range_ends are NULL if *range_alloc == 0. */ new_array_start = re_realloc (mbcset->range_starts, wchar_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, wchar_t, new_nranges); if (BE (new_array_start == NULL || new_array_end == NULL, 0)) return REG_ESPACE; mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_wc; mbcset->range_ends[mbcset->nranges++] = end_wc; /* Build the table for single byte characters. */ for (wc = 0; wc <= SBC_MAX; ++wc) { cmp_buf[2] = wc; if (wcscoll (cmp_buf, cmp_buf + 2) <= 0 && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0) bitset_set (sbcset, wc); } } # else /* not RE_ENABLE_I18N */ { unsigned int ch; start_ch = ((start_elem->type == SB_CHAR ) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)); end_ch = ((end_elem->type == SB_CHAR ) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); if (start_ch > end_ch) return REG_ERANGE; /* Build the table for single byte characters. */ for (ch = 0; ch <= SBC_MAX; ++ch) if (start_ch <= ch && ch <= end_ch) bitset_set (sbcset, ch); } # endif /* not RE_ENABLE_I18N */ return REG_NOERROR; } #endif /* not _LIBC */ #ifndef _LIBC /* Helper function for parse_bracket_exp only used in case of NOT _LIBC.. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static reg_errcode_t # ifdef RE_ENABLE_I18N build_collating_symbol (sbcset, mbcset, coll_syxmalloc, name) re_charset_t *mbcset; int *coll_syxmalloc; # else /* not RE_ENABLE_I18N */ build_collating_symbol (sbcset, name) # endif /* not RE_ENABLE_I18N */ re_bitset_ptr_t sbcset; const unsigned char *name; { size_t name_len = strlen ((const char *) name); if (BE (name_len != 1, 0)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } #endif /* not _LIBC */ /* This function parse bracket expression like "[abc]", "[a-c]", "[[.a-a.]]" etc. */ static bin_tree_t * parse_bracket_exp (regexp, dfa, token, syntax, err) re_string_t *regexp; re_dfa_t *dfa; re_token_t *token; reg_syntax_t syntax; reg_errcode_t *err; { #ifdef _LIBC const unsigned char *collseqmb; const char *collseqwc; uint32_t nrules; int32_t table_size; const int32_t *symb_table; const unsigned char *extra; /* Local function for parse_bracket_exp used in _LIBC environement. Seek the collating symbol entry correspondings to NAME. Return the index of the symbol in the SYMB_TABLE. */ static inline int32_t seek_collating_symbol_entry (name, name_len) const unsigned char *name; size_t name_len; { int32_t hash = elem_hash ((const char *) name, name_len); int32_t elem = hash % table_size; int32_t second = hash % (table_size - 2); while (symb_table[2 * elem] != 0) { /* First compare the hashing value. */ if (symb_table[2 * elem] == hash /* Compare the length of the name. */ && name_len == extra[symb_table[2 * elem + 1]] /* Compare the name. */ && memcmp (name, &extra[symb_table[2 * elem + 1] + 1], name_len) == 0) { /* Yep, this is the entry. */ break; } /* Next entry. */ elem += second; } return elem; } /* Local function for parse_bracket_exp used in _LIBC environement. Look up the collation sequence value of BR_ELEM. Return the value if succeeded, UINT_MAX otherwise. */ static inline unsigned int lookup_collation_sequence_value (br_elem) bracket_elem_t *br_elem; { if (br_elem->type == SB_CHAR) { /* if (MB_CUR_MAX == 1) */ if (nrules == 0) return collseqmb[br_elem->opr.ch]; else { wint_t wc = __btowc (br_elem->opr.ch); return collseq_table_lookup (collseqwc, wc); } } else if (br_elem->type == MB_CHAR) { return collseq_table_lookup (collseqwc, br_elem->opr.wch); } else if (br_elem->type == COLL_SYM) { size_t sym_name_len = strlen ((char *) br_elem->opr.name); if (nrules != 0) { int32_t elem, idx; elem = seek_collating_symbol_entry (br_elem->opr.name, sym_name_len); if (symb_table[2 * elem] != 0) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; /* Skip the byte sequence of the collating element. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the multibyte collation sequence value. */ idx += sizeof (unsigned int); /* Skip the wide char sequence of the collating element. */ idx += sizeof (unsigned int) * (1 + *(unsigned int *) (extra + idx)); /* Return the collation sequence value. */ return *(unsigned int *) (extra + idx); } else if (symb_table[2 * elem] == 0 && sym_name_len == 1) { /* No valid character. Match it as a single byte character. */ return collseqmb[br_elem->opr.name[0]]; } } else if (sym_name_len == 1) return collseqmb[br_elem->opr.name[0]]; } return UINT_MAX; } /* Local function for parse_bracket_exp used in _LIBC environement. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument sinse we may update it. */ static inline reg_errcode_t # ifdef RE_ENABLE_I18N build_range_exp (sbcset, mbcset, range_alloc, start_elem, end_elem) re_charset_t *mbcset; int *range_alloc; # else /* not RE_ENABLE_I18N */ build_range_exp (sbcset, start_elem, end_elem) # endif /* not RE_ENABLE_I18N */ re_bitset_ptr_t sbcset; bracket_elem_t *start_elem, *end_elem; { unsigned int ch; uint32_t start_collseq; uint32_t end_collseq; # ifdef RE_ENABLE_I18N /* Check the space of the arrays. */ if (*range_alloc == mbcset->nranges) { /* There are not enough space, need realloc. */ uint32_t *new_array_start; uint32_t *new_array_end; int new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; /* Use realloc since mbcset->range_starts and mbcset->range_ends are NULL if *range_alloc == 0. */ new_array_start = re_realloc (mbcset->range_starts, uint32_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, uint32_t, new_nranges); if (BE (new_array_start == NULL || new_array_end == NULL, 0)) return REG_ESPACE; mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } # endif /* RE_ENABLE_I18N */ /* Equivalence Classes and Character Classes can't be a range start/end. */ if (BE (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS, 0)) return REG_ERANGE; start_collseq = lookup_collation_sequence_value (start_elem); end_collseq = lookup_collation_sequence_value (end_elem); /* Check start/end collation sequence values. */ if (BE (start_collseq == UINT_MAX || end_collseq == UINT_MAX, 0)) return REG_ECOLLATE; if (BE ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq, 0)) return REG_ERANGE; # ifdef RE_ENABLE_I18N /* Got valid collation sequence values, add them as a new entry. */ mbcset->range_starts[mbcset->nranges] = start_collseq; mbcset->range_ends[mbcset->nranges++] = end_collseq; # endif /* RE_ENABLE_I18N */ /* Build the table for single byte characters. */ for (ch = 0; ch <= SBC_MAX; ch++) { uint32_t ch_collseq; /* if (MB_CUR_MAX == 1) */ if (nrules == 0) ch_collseq = collseqmb[ch]; else ch_collseq = collseq_table_lookup (collseqwc, __btowc (ch)); if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) bitset_set (sbcset, ch); } return REG_NOERROR; } /* Local function for parse_bracket_exp used in _LIBC environement. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument sinse we may update it. */ static inline reg_errcode_t # ifdef RE_ENABLE_I18N build_collating_symbol (sbcset, mbcset, coll_syxmalloc, name) re_charset_t *mbcset; int *coll_syxmalloc; # else /* not RE_ENABLE_I18N */ build_collating_symbol (sbcset, name) # endif /* not RE_ENABLE_I18N */ re_bitset_ptr_t sbcset; const unsigned char *name; { int32_t elem, idx; size_t name_len = strlen ((const char *) name); if (nrules != 0) { elem = seek_collating_symbol_entry (name, name_len); if (symb_table[2 * elem] != 0) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; } else if (symb_table[2 * elem] == 0 && name_len == 1) { /* No valid character, treat it as a normal character. */ bitset_set (sbcset, name[0]); return REG_NOERROR; } else return REG_ECOLLATE; # ifdef RE_ENABLE_I18N /* Got valid collation sequence, add it as a new entry. */ /* Check the space of the arrays. */ if (*coll_syxmalloc == mbcset->ncoll_syms) { /* Not enough, realloc it. */ /* +1 in case of mbcset->ncoll_syms is 0. */ *coll_syxmalloc = 2 * mbcset->ncoll_syms + 1; /* Use realloc since mbcset->coll_syms is NULL if *alloc == 0. */ mbcset->coll_syms = re_realloc (mbcset->coll_syms, int32_t, *coll_syxmalloc); if (BE (mbcset->coll_syms == NULL, 0)) return REG_ESPACE; } mbcset->coll_syms[mbcset->ncoll_syms++] = idx; # endif /* RE_ENABLE_I18N */ return REG_NOERROR; } else { if (BE (name_len != 1, 0)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } } #endif re_token_t br_token; re_bitset_ptr_t sbcset; #ifdef RE_ENABLE_I18N re_charset_t *mbcset; int coll_syxmalloc = 0, range_alloc = 0, mbchar_alloc = 0; int equiv_class_alloc = 0, char_class_alloc = 0; #else /* not RE_ENABLE_I18N */ int non_match = 0; #endif /* not RE_ENABLE_I18N */ bin_tree_t *work_tree; int token_len, new_idx; #ifdef _LIBC collseqmb = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules) { /* if (MB_CUR_MAX > 1) */ collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); } #endif sbcset = (re_bitset_ptr_t) calloc (sizeof (unsigned int), BITSET_UINTS); #ifdef RE_ENABLE_I18N mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); #endif /* RE_ENABLE_I18N */ #ifdef RE_ENABLE_I18N if (BE (sbcset == NULL || mbcset == NULL, 0)) #else if (BE (sbcset == NULL, 0)) #endif /* RE_ENABLE_I18N */ { *err = REG_ESPACE; return NULL; } token_len = peek_token_bracket (token, regexp, syntax); if (BE (token->type == END_OF_RE, 0)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } if (token->type == OP_NON_MATCH_LIST) { #ifdef RE_ENABLE_I18N int i; mbcset->non_match = 1; #else /* not RE_ENABLE_I18N */ non_match = 1; #endif /* not RE_ENABLE_I18N */ if (syntax & RE_HAT_LISTS_NOT_NEWLINE) bitset_set (sbcset, '\0'); re_string_skip_bytes (regexp, token_len); /* Skip a token. */ token_len = peek_token_bracket (token, regexp, syntax); if (BE (token->type == END_OF_RE, 0)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) for (i = 0; i < SBC_MAX; ++i) if (__btowc (i) == WEOF) bitset_set (sbcset, i); #endif /* RE_ENABLE_I18N */ } /* We treat the first ']' as a normal character. */ if (token->type == OP_CLOSE_BRACKET) token->type = CHARACTER; while (1) { bracket_elem_t start_elem, end_elem; unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; reg_errcode_t ret; int token_len2 = 0, is_range_exp = 0; re_token_t token2; start_elem.opr.name = start_name_buf; ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, syntax); if (BE (ret != REG_NOERROR, 0)) { *err = ret; goto parse_bracket_exp_free_return; } token_len = peek_token_bracket (token, regexp, syntax); if (BE (token->type == END_OF_RE, 0)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } if (token->type == OP_CHARSET_RANGE) { re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ token_len2 = peek_token_bracket (&token2, regexp, syntax); if (BE (token->type == END_OF_RE, 0)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } if (token2.type == OP_CLOSE_BRACKET) { /* We treat the last '-' as a normal character. */ re_string_skip_bytes (regexp, -token_len); token->type = CHARACTER; } else is_range_exp = 1; } if (is_range_exp == 1) { end_elem.opr.name = end_name_buf; ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, dfa, syntax); if (BE (ret != REG_NOERROR, 0)) { *err = ret; goto parse_bracket_exp_free_return; } token_len = peek_token_bracket (token, regexp, syntax); if (BE (token->type == END_OF_RE, 0)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } *err = build_range_exp (sbcset, #ifdef RE_ENABLE_I18N mbcset, &range_alloc, #endif /* RE_ENABLE_I18N */ &start_elem, &end_elem); if (BE (*err != REG_NOERROR, 0)) goto parse_bracket_exp_free_return; } else { switch (start_elem.type) { case SB_CHAR: bitset_set (sbcset, start_elem.opr.ch); break; #ifdef RE_ENABLE_I18N case MB_CHAR: /* Check whether the array has enough space. */ if (mbchar_alloc == mbcset->nmbchars) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nmbchars is 0. */ mbchar_alloc = 2 * mbcset->nmbchars + 1; /* Use realloc since array is NULL if *alloc == 0. */ mbcset->mbchars = re_realloc (mbcset->mbchars, wchar_t, mbchar_alloc); if (BE (mbcset->mbchars == NULL, 0)) goto parse_bracket_exp_espace; } mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; break; #endif /* RE_ENABLE_I18N */ case EQUIV_CLASS: *err = build_equiv_class (sbcset, #ifdef RE_ENABLE_I18N mbcset, &equiv_class_alloc, #endif /* RE_ENABLE_I18N */ start_elem.opr.name); if (BE (*err != REG_NOERROR, 0)) goto parse_bracket_exp_free_return; break; case COLL_SYM: *err = build_collating_symbol (sbcset, #ifdef RE_ENABLE_I18N mbcset, &coll_syxmalloc, #endif /* RE_ENABLE_I18N */ start_elem.opr.name); if (BE (*err != REG_NOERROR, 0)) goto parse_bracket_exp_free_return; break; case CHAR_CLASS: ret = build_charclass (sbcset, #ifdef RE_ENABLE_I18N mbcset, &char_class_alloc, #endif /* RE_ENABLE_I18N */ start_elem.opr.name, syntax); if (BE (ret != REG_NOERROR, 0)) goto parse_bracket_exp_espace; break; default: assert (0); break; } } if (token->type == OP_CLOSE_BRACKET) break; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ /* If it is non-matching list. */ #ifdef RE_ENABLE_I18N if (mbcset->non_match) #else /* not RE_ENABLE_I18N */ if (non_match) #endif /* not RE_ENABLE_I18N */ bitset_not (sbcset); /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; new_idx = re_dfa_add_node (dfa, br_token, 0); work_tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || work_tree == NULL, 0)) goto parse_bracket_exp_espace; #ifdef RE_ENABLE_I18N if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes || mbcset->nranges || (MB_CUR_MAX > 1 && (mbcset->nchar_classes || mbcset->non_match))) { re_token_t alt_token; bin_tree_t *mbc_tree; /* Build a tree for complex bracket. */ br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; dfa->has_mb_node = 1; new_idx = re_dfa_add_node (dfa, br_token, 0); mbc_tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || mbc_tree == NULL, 0)) goto parse_bracket_exp_espace; /* Then join them by ALT node. */ dfa->has_plural_match = 1; alt_token.type = OP_ALT; new_idx = re_dfa_add_node (dfa, alt_token, 0); work_tree = create_tree (work_tree, mbc_tree, 0, new_idx); if (BE (new_idx != -1 && mbc_tree != NULL, 1)) return work_tree; } else { free_charset (mbcset); return work_tree; } #else /* not RE_ENABLE_I18N */ return work_tree; #endif /* not RE_ENABLE_I18N */ parse_bracket_exp_espace: *err = REG_ESPACE; parse_bracket_exp_free_return: re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ return NULL; } /* Parse an element in the bracket expression. */ static reg_errcode_t parse_bracket_element (elem, regexp, token, token_len, dfa, syntax) bracket_elem_t *elem; re_string_t *regexp; re_token_t *token; int token_len; re_dfa_t *dfa; reg_syntax_t syntax; { #ifdef RE_ENABLE_I18N int cur_char_size; cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); if (cur_char_size > 1) { elem->type = MB_CHAR; elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); re_string_skip_bytes (regexp, cur_char_size); return REG_NOERROR; } #endif /* RE_ENABLE_I18N */ re_string_skip_bytes (regexp, token_len); /* Skip a token. */ if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS || token->type == OP_OPEN_EQUIV_CLASS) return parse_bracket_symbol (elem, regexp, token); elem->type = SB_CHAR; elem->opr.ch = token->opr.c; return REG_NOERROR; } /* Parse a bracket symbol in the bracket expression. Bracket symbols are such as [::], [..], and [==]. */ static reg_errcode_t parse_bracket_symbol (elem, regexp, token) bracket_elem_t *elem; re_string_t *regexp; re_token_t *token; { unsigned char ch, delim = token->opr.c; int i = 0; for (;; ++i) { if (re_string_eoi(regexp) || i >= BRACKET_NAME_BUF_SIZE) return REG_EBRACK; if (token->type == OP_OPEN_CHAR_CLASS) ch = re_string_fetch_byte_case (regexp); else ch = re_string_fetch_byte (regexp); if (ch == delim && re_string_peek_byte (regexp, 0) == ']') break; elem->opr.name[i] = ch; } re_string_skip_bytes (regexp, 1); elem->opr.name[i] = '\0'; switch (token->type) { case OP_OPEN_COLL_ELEM: elem->type = COLL_SYM; break; case OP_OPEN_EQUIV_CLASS: elem->type = EQUIV_CLASS; break; case OP_OPEN_CHAR_CLASS: elem->type = CHAR_CLASS; break; default: break; } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the equivalence class which is represented by NAME. The result are written to MBCSET and SBCSET. EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, is a pointer argument sinse we may update it. */ static reg_errcode_t #ifdef RE_ENABLE_I18N build_equiv_class (sbcset, mbcset, equiv_class_alloc, name) re_charset_t *mbcset; int *equiv_class_alloc; #else /* not RE_ENABLE_I18N */ build_equiv_class (sbcset, name) #endif /* not RE_ENABLE_I18N */ re_bitset_ptr_t sbcset; const unsigned char *name; { #if defined _LIBC && defined RE_ENABLE_I18N uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { const int32_t *table, *indirect; const unsigned char *weights, *extra, *cp; unsigned char char_buf[2]; int32_t idx1, idx2; unsigned int ch; size_t len; /* This #include defines a local function! */ # include /* Calculate the index for equivalence class. */ cp = name; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx1 = findidx (&cp); if (BE (idx1 == 0 || cp < name + strlen ((const char *) name), 0)) /* This isn't a valid character. */ return REG_ECOLLATE; /* Build single byte matcing table for this equivalence class. */ char_buf[1] = (unsigned char) '\0'; len = weights[idx1]; for (ch = 0; ch < SBC_MAX; ++ch) { char_buf[0] = ch; cp = char_buf; idx2 = findidx (&cp); /* idx2 = table[ch]; */ if (idx2 == 0) /* This isn't a valid character. */ continue; if (len == weights[idx2]) { int cnt = 0; while (cnt <= len && weights[idx1 + 1 + cnt] == weights[idx2 + 1 + cnt]) ++cnt; if (cnt > len) bitset_set (sbcset, ch); } } /* Check whether the array has enough space. */ if (*equiv_class_alloc == mbcset->nequiv_classes) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nequiv_classes is 0. */ *equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; /* Use realloc since the array is NULL if *alloc == 0. */ mbcset->equiv_classes = re_realloc (mbcset->equiv_classes, int32_t, *equiv_class_alloc); if (BE (mbcset->equiv_classes == NULL, 0)) return REG_ESPACE; } mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; } else #endif /* _LIBC && RE_ENABLE_I18N */ { if (BE (strlen ((const char *) name) != 1, 0)) return REG_ECOLLATE; bitset_set (sbcset, *name); } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the character class which is represented by NAME. The result are written to MBCSET and SBCSET. CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, is a pointer argument sinse we may update it. */ static reg_errcode_t #ifdef RE_ENABLE_I18N build_charclass (sbcset, mbcset, char_class_alloc, class_name, syntax) re_charset_t *mbcset; int *char_class_alloc; #else /* not RE_ENABLE_I18N */ build_charclass (sbcset, class_name, syntax) #endif /* not RE_ENABLE_I18N */ re_bitset_ptr_t sbcset; const unsigned char *class_name; reg_syntax_t syntax; { int i; const char *name = (const char *) class_name; /* In case of REG_ICASE "upper" and "lower" match the both of upper and lower cases. */ if ((syntax & RE_ICASE) && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) name = "alpha"; #ifdef RE_ENABLE_I18N /* Check the space of the arrays. */ if (*char_class_alloc == mbcset->nchar_classes) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nchar_classes is 0. */ *char_class_alloc = 2 * mbcset->nchar_classes + 1; /* Use realloc since array is NULL if *alloc == 0. */ mbcset->char_classes = re_realloc (mbcset->char_classes, wctype_t, *char_class_alloc); if (BE (mbcset->char_classes == NULL, 0)) return REG_ESPACE; } mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); #endif /* RE_ENABLE_I18N */ #define BUILD_CHARCLASS_LOOP(ctype_func)\ for (i = 0; i < SBC_MAX; ++i) \ { \ if (ctype_func (i)) \ bitset_set (sbcset, i); \ } if (strcmp (name, "alnum") == 0) BUILD_CHARCLASS_LOOP (isalnum) else if (strcmp (name, "cntrl") == 0) BUILD_CHARCLASS_LOOP (iscntrl) else if (strcmp (name, "lower") == 0) BUILD_CHARCLASS_LOOP (islower) else if (strcmp (name, "space") == 0) BUILD_CHARCLASS_LOOP (isspace) else if (strcmp (name, "alpha") == 0) BUILD_CHARCLASS_LOOP (isalpha) else if (strcmp (name, "digit") == 0) BUILD_CHARCLASS_LOOP (isdigit) else if (strcmp (name, "print") == 0) BUILD_CHARCLASS_LOOP (isprint) else if (strcmp (name, "upper") == 0) BUILD_CHARCLASS_LOOP (isupper) else if (strcmp (name, "blank") == 0) BUILD_CHARCLASS_LOOP (isblank) else if (strcmp (name, "graph") == 0) BUILD_CHARCLASS_LOOP (isgraph) else if (strcmp (name, "punct") == 0) BUILD_CHARCLASS_LOOP (ispunct) else if (strcmp (name, "xdigit") == 0) BUILD_CHARCLASS_LOOP (isxdigit) else return REG_ECTYPE; return REG_NOERROR; } static bin_tree_t * build_word_op (dfa, not, err) re_dfa_t *dfa; int not; reg_errcode_t *err; { re_bitset_ptr_t sbcset; #ifdef RE_ENABLE_I18N re_charset_t *mbcset; int alloc = 0; #else /* not RE_ENABLE_I18N */ int non_match = 0; #endif /* not RE_ENABLE_I18N */ reg_errcode_t ret; re_token_t br_token; bin_tree_t *tree; int new_idx; sbcset = (re_bitset_ptr_t) calloc (sizeof (unsigned int), BITSET_UINTS); #ifdef RE_ENABLE_I18N mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); #endif /* RE_ENABLE_I18N */ #ifdef RE_ENABLE_I18N if (BE (sbcset == NULL || mbcset == NULL, 0)) #else /* not RE_ENABLE_I18N */ if (BE (sbcset == NULL, 0)) #endif /* not RE_ENABLE_I18N */ { *err = REG_ESPACE; return NULL; } if (not) { #ifdef RE_ENABLE_I18N int i; /* if (syntax & RE_HAT_LISTS_NOT_NEWLINE) bitset_set(cset->sbcset, '\0'); */ mbcset->non_match = 1; if (MB_CUR_MAX > 1) for (i = 0; i < SBC_MAX; ++i) if (__btowc (i) == WEOF) bitset_set (sbcset, i); #else /* not RE_ENABLE_I18N */ non_match = 1; #endif /* not RE_ENABLE_I18N */ } /* We don't care the syntax in this case. */ ret = build_charclass (sbcset, #ifdef RE_ENABLE_I18N mbcset, &alloc, #endif /* RE_ENABLE_I18N */ (const unsigned char *) "alpha", 0); if (BE (ret != REG_NOERROR, 0)) { re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ *err = REG_ESPACE; return NULL; } /* \w match '_' also. */ bitset_set (sbcset, '_'); /* If it is non-matching list. */ #ifdef RE_ENABLE_I18N if (mbcset->non_match) #else /* not RE_ENABLE_I18N */ if (non_match) #endif /* not RE_ENABLE_I18N */ bitset_not (sbcset); /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; new_idx = re_dfa_add_node (dfa, br_token, 0); tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || tree == NULL, 0)) goto build_word_op_espace; #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) { re_token_t alt_token; bin_tree_t *mbc_tree; /* Build a tree for complex bracket. */ br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; dfa->has_mb_node = 1; new_idx = re_dfa_add_node (dfa, br_token, 0); mbc_tree = create_tree (NULL, NULL, 0, new_idx); if (BE (new_idx == -1 || mbc_tree == NULL, 0)) goto build_word_op_espace; /* Then join them by ALT node. */ alt_token.type = OP_ALT; new_idx = re_dfa_add_node (dfa, alt_token, 0); tree = create_tree (tree, mbc_tree, 0, new_idx); if (BE (new_idx != -1 && mbc_tree != NULL, 1)) return tree; } else { free_charset (mbcset); return tree; } #else /* not RE_ENABLE_I18N */ return tree; #endif /* not RE_ENABLE_I18N */ build_word_op_espace: re_free (sbcset); #ifdef RE_ENABLE_I18N free_charset (mbcset); #endif /* RE_ENABLE_I18N */ *err = REG_ESPACE; return NULL; } /* This is intended for the expressions like "a{1,3}". Fetch a number from `input', and return the number. Return -1, if the number field is empty like "{,1}". Return -2, If an error is occured. */ static int fetch_number (input, token, syntax) re_string_t *input; re_token_t *token; reg_syntax_t syntax; { int num = -1; unsigned char c; while (1) { *token = fetch_token (input, syntax); c = token->opr.c; if (BE (token->type == END_OF_RE, 0)) return -2; if (token->type == OP_CLOSE_DUP_NUM || c == ',') break; num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2) ? -2 : ((num == -1) ? c - '0' : num * 10 + c - '0')); num = (num > RE_DUP_MAX) ? -2 : num; } return num; } #ifdef RE_ENABLE_I18N static void free_charset (re_charset_t *cset) { re_free (cset->mbchars); # ifdef _LIBC re_free (cset->coll_syms); re_free (cset->equiv_classes); re_free (cset->range_starts); re_free (cset->range_ends); # endif re_free (cset->char_classes); re_free (cset); } #endif /* RE_ENABLE_I18N */ /* Functions for binary tree operation. */ /* Create a node of tree. Note: This function automatically free left and right if malloc fails. */ static bin_tree_t * create_tree (left, right, type, index) bin_tree_t *left; bin_tree_t *right; re_token_type_t type; int index; { bin_tree_t *tree; tree = re_malloc (bin_tree_t, 1); if (BE (tree == NULL, 0)) { free_bin_tree (left); free_bin_tree (right); return NULL; } tree->parent = NULL; tree->left = left; tree->right = right; tree->type = type; tree->node_idx = index; tree->first = -1; tree->next = -1; re_node_set_init_empty (&tree->eclosure); if (left != NULL) left->parent = tree; if (right != NULL) right->parent = tree; return tree; } /* Free the sub tree pointed by TREE. */ static void free_bin_tree (tree) bin_tree_t *tree; { if (tree == NULL) return; /*re_node_set_free (&tree->eclosure);*/ free_bin_tree (tree->left); free_bin_tree (tree->right); re_free (tree); } /* Duplicate the node SRC, and return new node. */ static bin_tree_t * duplicate_tree (src, dfa) const bin_tree_t *src; re_dfa_t *dfa; { bin_tree_t *left = NULL, *right = NULL, *new_tree; int new_node_idx; /* Since node indies must be according to Post-order of the tree, we must duplicate the left at first. */ if (src->left != NULL) { left = duplicate_tree (src->left, dfa); if (left == NULL) return NULL; } /* Secondaly, duplicate the right. */ if (src->right != NULL) { right = duplicate_tree (src->right, dfa); if (right == NULL) { free_bin_tree (left); return NULL; } } /* At last, duplicate itself. */ if (src->type == NON_TYPE) { new_node_idx = re_dfa_add_node (dfa, dfa->nodes[src->node_idx], 0); dfa->nodes[new_node_idx].duplicated = 1; if (BE (new_node_idx == -1, 0)) { free_bin_tree (left); free_bin_tree (right); return NULL; } } else new_node_idx = src->type; new_tree = create_tree (left, right, src->type, new_node_idx); if (BE (new_tree == NULL, 0)) { free_bin_tree (left); free_bin_tree (right); } return new_tree; } gnupg-1.4.20/util/w32reg.c0000644000175000017500000001251012635262326012077 00000000000000/* w32reg.c - MS-Windows Registry access * Copyright (C) 1999, 2002, 2005 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 3 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, see . */ #include #if defined (_WIN32) || defined (__CYGWIN32__) /* This module is only used in this environment */ #include #include #include #include #include #include "util.h" #include "memory.h" static HKEY get_root_key(const char *root) { HKEY root_key; if( !root ) root_key = HKEY_CURRENT_USER; else if( !strcmp( root, "HKEY_CLASSES_ROOT" ) ) root_key = HKEY_CLASSES_ROOT; else if( !strcmp( root, "HKEY_CURRENT_USER" ) ) root_key = HKEY_CURRENT_USER; else if( !strcmp( root, "HKEY_LOCAL_MACHINE" ) ) root_key = HKEY_LOCAL_MACHINE; else if( !strcmp( root, "HKEY_USERS" ) ) root_key = HKEY_USERS; else if( !strcmp( root, "HKEY_PERFORMANCE_DATA" ) ) root_key = HKEY_PERFORMANCE_DATA; else if( !strcmp( root, "HKEY_CURRENT_CONFIG" ) ) root_key = HKEY_CURRENT_CONFIG; else return NULL; return root_key; } /**************** * Return a string from the Win32 Registry or NULL in case of * error. Caller must release the return value. A NULL for root * is an alias for HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE in turn. * NOTE: The value is allocated with a plain malloc() - use free() and not * the usual xfree()!!! */ char * read_w32_registry_string( const char *root, const char *dir, const char *name ) { HKEY root_key, key_handle; DWORD n1, nbytes, type; char *result = NULL; if ( !(root_key = get_root_key(root) ) ) return NULL; if( RegOpenKeyEx( root_key, dir, 0, KEY_READ, &key_handle ) ) { if (root) return NULL; /* no need for a RegClose, so return direct */ /* It seems to be common practise to fall back to HKLM. */ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) ) return NULL; /* still no need for a RegClose, so return direct */ } nbytes = 1; if( RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes ) ) { if (root) goto leave; /* Try to fallback to HKLM also vor a missing value. */ RegCloseKey (key_handle); if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, dir, 0, KEY_READ, &key_handle) ) return NULL; /* Nope. */ if (RegQueryValueEx( key_handle, name, 0, NULL, NULL, &nbytes)) goto leave; } result = malloc( (n1=nbytes+1) ); if( !result ) goto leave; if( RegQueryValueEx( key_handle, name, 0, &type, result, &n1 ) ) { free(result); result = NULL; goto leave; } result[nbytes] = 0; /* make sure it is really a string */ if (type == REG_EXPAND_SZ && strchr (result, '%')) { char *tmp; n1 += 1000; tmp = malloc (n1+1); if (!tmp) goto leave; nbytes = ExpandEnvironmentStrings (result, tmp, n1); if (nbytes && nbytes > n1) { free (tmp); n1 = nbytes; tmp = malloc (n1 + 1); if (!tmp) goto leave; nbytes = ExpandEnvironmentStrings (result, tmp, n1); if (nbytes && nbytes > n1) { free (tmp); /* oops - truncated, better don't expand at all */ goto leave; } tmp[nbytes] = 0; free (result); result = tmp; } else if (nbytes) { /* okay, reduce the length */ tmp[nbytes] = 0; free (result); result = malloc (strlen (tmp)+1); if (!result) result = tmp; else { strcpy (result, tmp); free (tmp); } } else { /* error - don't expand */ free (tmp); } } leave: RegCloseKey( key_handle ); return result; } int write_w32_registry_string(const char *root, const char *dir, const char *name, const char *value) { HKEY root_key, reg_key; if ( !(root_key = get_root_key(root) ) ) return -1; if ( RegOpenKeyEx( root_key, dir, 0, KEY_WRITE, ®_key ) != ERROR_SUCCESS ) return -1; if ( RegSetValueEx( reg_key, name, 0, REG_SZ, (BYTE *)value, strlen( value ) ) != ERROR_SUCCESS ) { if ( RegCreateKey( root_key, name, ®_key ) != ERROR_SUCCESS ) { RegCloseKey(reg_key); return -1; } if ( RegSetValueEx( reg_key, name, 0, REG_SZ, (BYTE *)value, strlen( value ) ) != ERROR_SUCCESS ) { RegCloseKey(reg_key); return -1; } } RegCloseKey( reg_key ); return 0; } #endif /* __MINGW32__ || __CYGWIN32__ */ gnupg-1.4.20/util/dotlock.c0000644000175000017500000011210312635262326012424 00000000000000/* dotlock.c - dotfile locking * Copyright (C) 1998, 2000, 2001, 2003, 2004, * 2005, 2006, 2008, 2010, 2011 Free Software Foundation, Inc. * * This file is part of JNLIB, which is a subsystem of GnuPG. * * JNLIB is free software; you can redistribute it and/or modify it * under the terms of either * * - the GNU Lesser General Public License as published by the Free * Software Foundation; either version 3 of the License, or (at * your option) any later version. * * or * * - 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. * * or both in parallel, as here. * * JNLIB 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 copies of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, see . * * ALTERNATIVELY, this file may be distributed under the terms of the * following license, in which case the provisions of this license are * required INSTEAD OF the GNU Lesser General License or the GNU * General Public License. If you wish to allow use of your version of * this file only under the terms of the GNU Lesser General License or * the GNU General Public License, and not to allow others to use your * version of this file under the terms of the following license, * indicate your decision by deleting this paragraph and the license * below. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, and the entire permission notice in its entirety, * including the disclaimer of warranties. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote * products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. */ /* Overview: ========= This module implements advisory file locking in a portable way. Due to the problems with POSIX fcntl locking a separate lock file is used. It would be possible to use fcntl locking on this lock file and thus avoid the weird auto unlock bug of POSIX while still having an unproved better performance of fcntl locking. However there are still problems left, thus we resort to use a hardlink which has the well defined property that a link call will fail if the target file already exists. Given that hardlinks are also available on NTFS file systems since Windows XP; it will be possible to enhance this module to use hardlinks even on Windows and thus allow Windows and Posix clients to use locking on the same directory. This is not yet implemented; instead we use a lockfile on Windows along with W32 style file locking. On FAT file systems hardlinks are not supported. Thus this method does not work. Our solution is to use a O_EXCL locking instead. Querying the type of the file system is not easy to do in a portable way (e.g. Linux has a statfs, BSDs have a the same call but using different structures and constants). What we do instead is to check at runtime whether link(2) works for a specific lock file. How to use: =========== At program initialization time, the module should be explicitly initialized: dotlock_create (NULL, 0); This installs an atexit handler and may also initialize mutex etc. It is optional for non-threaded applications. Only the first call has an effect. This needs to be done before any extra threads are started. To create a lock file (which prepares it but does not take the lock) you do: dotlock_t h h = dotlock_create (fname, 0); if (!h) error ("error creating lock file: %s\n", strerror (errno)); It is important to handle the error. For example on a read-only file system a lock can't be created (but is usually not needed). FNAME is the file you want to lock; the actual lockfile is that name with the suffix ".lock" appended. On success a handle to be used with the other functions is returned or NULL on error. Note that the handle shall only be used by one thread at a time. This function creates a unique file temporary file (".#lk*") in the same directory as FNAME and returns a handle for further operations. The module keeps track of theses unique files so that they will be unlinked using the atexit handler. If you don't need the lock file anymore, you may also explicitly remove it with a call to: dotlock_destroy (h, 1); To actually lock the file, you use: if (dotlock_take (h, -1)) error ("error taking lock: %s\n", strerror (errno)); This function will wait until the lock is acquired. If an unexpected error occurs if will return non-zero and set ERRNO. If you pass (0) instead of (-1) the function does not wait in case the file is already locked but returns -1 and sets ERRNO to EACCES. Any other positive value for the second parameter is considered a timeout valuie in milliseconds. To release the lock you call: if (dotlock_release (h)) error ("error releasing lock: %s\n", strerror (errno)); or, if the lock file is not anymore needed, you may just call dotlock_destroy. However dotlock_release does some extra checks before releasing the lock and prints diagnostics to help detecting bugs. If you want to explicitly destroy all lock files you may call dotlock_remove_lockfiles (); which is the core of the installed atexit handler. In case your application wants to disable locking completely it may call disable_locking () before any locks are created. There are two convenience functions to store an integer (e.g. a file descriptor) value with the handle: void dotlock_set_fd (dotlock_t h, int fd); int dotlock_get_fd (dotlock_t h); If nothing has been stored dotlock_get_fd returns -1. How to build: ============= This module was originally developed for GnuPG but later changed to allow its use without any GnuPG dependency. If you want to use it with you application you may simply use it and it should figure out most things automagically. You may use the common config.h file to pass macros, but take care to pass -DHAVE_CONFIG_H to the compiler. Macros used by this module are: DOTLOCK_USE_PTHREAD - Define if POSIX threads are in use. DOTLOCK_GLIB_LOGGING - Define this to use Glib logging functions. DOTLOCK_EXT_SYM_PREFIX - Prefix all external symbols with the string to which this macro evaluates. GNUPG_MAJOR_VERSION - Defined when used by GnuPG. HAVE_DOSISH_SYSTEM - Defined for Windows etc. Will be automatically defined if a the target is Windows. HAVE_POSIX_SYSTEM - Internally defined to !HAVE_DOSISH_SYSTEM. HAVE_SIGNAL_H - Should be defined on Posix systems. If config.h is not used defaults to defined. DIRSEP_C - Separation character for file name parts. Usually not redefined. EXTSEP_S - Separation string for file name suffixes. Usually not redefined. HAVE_W32CE_SYSTEM - Currently only used by GnuPG. Note that there is a test program t-dotlock which has compile instructions at its end. At least for SMBFS and CIFS it is important that 64 bit versions of stat are used; most programming environments do this these days, just in case you want to compile it on the command line, remember to pass -D_FILE_OFFSET_BITS=64 Bugs: ===== On Windows this module is not yet thread-safe. Miscellaneous notes: ==================== On hardlinks: - Hardlinks are supported under Windows with NTFS since XP/Server2003. - In Linux 2.6.33 both SMBFS and CIFS seem to support hardlinks. - NFS supports hard links. But there are solvable problems. - FAT does not support links On the file locking API: - CIFS on Linux 2.6.33 supports several locking methods. SMBFS seems not to support locking. No closer checks done. - NFS supports Posix locks. flock is emulated in the server. However there are a couple of problems; see below. - FAT does not support locks. - An advantage of fcntl locking is that R/W locks can be implemented which is not easy with a straight lock file. On O_EXCL: - Does not work reliable on NFS - Should work on CIFS and SMBFS but how can we delete lockfiles? On NFS problems: - Locks vanish if the server crashes and reboots. - Client crashes keep the lock in the server until the client re-connects. - Communication problems may return unreliable error codes. The MUA Postfix's workaround is to compare the link count after seeing an error for link. However that gives a race. If using a unique file to link to a lockfile and using stat to check the link count instead of looking at the error return of link(2) is the best solution. - O_EXCL seems to have a race and may re-create a file anyway. */ #ifdef HAVE_CONFIG_H # include #endif /* Some quick replacements for stuff we usually expect to be defined in config.h. Define HAVE_POSIX_SYSTEM for better readability. */ #if !defined (HAVE_DOSISH_SYSTEM) && defined(_WIN32) # define HAVE_DOSISH_SYSTEM 1 #endif #if !defined (HAVE_DOSISH_SYSTEM) && !defined (HAVE_POSIX_SYSTEM) # define HAVE_POSIX_SYSTEM 1 #endif /* With no config.h assume that we have sitgnal.h. */ #if !defined (HAVE_CONFIG_H) && defined (HAVE_POSIX_SYSTEM) # define HAVE_SIGNAL_H 1 #endif /* Standard headers. */ #include #include #include #include #include #include #include #ifdef HAVE_DOSISH_SYSTEM # define WIN32_LEAN_AND_MEAN /* We only need the OS core stuff. */ # include #else # include # include # include #endif #include #include #include #include #ifdef HAVE_SIGNAL_H # include #endif #ifdef DOTLOCK_USE_PTHREAD # include #endif #ifdef DOTLOCK_GLIB_LOGGING # include #endif #ifdef GNUPG_MAJOR_VERSION # if GNUPG_MAJOR_VERSION > 1 # include "libjnlib-config.h" # else # include "../include/util.h" # endif #endif #ifdef HAVE_W32CE_SYSTEM # include "utf8conv.h" /* WindowsCE requires filename conversion. */ #endif #include "dotlock.h" /* Define constants for file name construction. */ #if !defined(DIRSEP_C) && !defined(EXTSEP_S) # ifdef HAVE_DOSISH_SYSTEM # define DIRSEP_C '\\' # define EXTSEP_S "." #else # define DIRSEP_C '/' # define EXTSEP_S "." # endif #endif /* In GnuPG we use wrappers around the malloc fucntions. If they are not defined we assume that this code is used outside of GnuPG and fall back to the regular malloc functions. */ #ifndef jnlib_malloc # define jnlib_malloc(a) malloc ((a)) # define jnlib_calloc(a,b) calloc ((a), (b)) # define jnlib_free(a) free ((a)) #endif /* Wrapper to set ERRNO. */ #ifndef jnlib_set_errno # ifdef HAVE_W32CE_SYSTEM # define jnlib_set_errno(e) gpg_err_set_errno ((e)) # else # define jnlib_set_errno(e) do { errno = (e); } while (0) # endif #endif /* Gettext macro replacement. */ #ifndef _ # define _(a) (a) #endif #ifdef GNUPG_MAJOR_VERSION # define my_info_0(a) log_info ((a)) # define my_info_1(a,b) log_info ((a), (b)) # define my_info_2(a,b,c) log_info ((a), (b), (c)) # define my_info_3(a,b,c,d) log_info ((a), (b), (c), (d)) # define my_error_0(a) log_error ((a)) # define my_error_1(a,b) log_error ((a), (b)) # define my_error_2(a,b,c) log_error ((a), (b), (c)) # define my_debug_1(a,b) log_debug ((a), (b)) # define my_fatal_0(a) log_fatal ((a)) #elif defined (DOTLOCK_GLIB_LOGGING) # define my_info_0(a) g_message ((a)) # define my_info_1(a,b) g_message ((a), (b)) # define my_info_2(a,b,c) g_message ((a), (b), (c)) # define my_info_3(a,b,c,d) g_message ((a), (b), (c), (d)) # define my_error_0(a) g_warning ((a)) # define my_error_1(a,b) g_warning ((a), (b)) # define my_error_2(a,b,c) g_warning ((a), (b), (c)) # define my_debug_1(a,b) g_debug ((a), (b)) # define my_fatal_0(a) g_error ((a)) #else # define my_info_0(a) fprintf (stderr, (a)) # define my_info_1(a,b) fprintf (stderr, (a), (b)) # define my_info_2(a,b,c) fprintf (stderr, (a), (b), (c)) # define my_info_3(a,b,c,d) fprintf (stderr, (a), (b), (c), (d)) # define my_error_0(a) fprintf (stderr, (a)) # define my_error_1(a,b) fprintf (stderr, (a), (b)) # define my_error_2(a,b,c) fprintf (stderr, (a), (b), (c)) # define my_debug_1(a,b) fprintf (stderr, (a), (b)) # define my_fatal_0(a) do { fprintf (stderr,(a)); fflush (stderr); \ abort (); } while (0) #endif /* The object describing a lock. */ struct dotlock_handle { struct dotlock_handle *next; char *lockname; /* Name of the actual lockfile. */ unsigned int locked:1; /* Lock status. */ unsigned int disable:1; /* If true, locking is disabled. */ unsigned int use_o_excl:1; /* Use open (O_EXCL) for locking. */ int extra_fd; /* A place for the caller to store an FD. */ #ifdef HAVE_DOSISH_SYSTEM HANDLE lockhd; /* The W32 handle of the lock file. */ #else /*!HAVE_DOSISH_SYSTEM */ char *tname; /* Name of the lockfile template. */ size_t nodename_off; /* Offset in TNAME of the nodename part. */ size_t nodename_len; /* Length of the nodename part. */ #endif /*!HAVE_DOSISH_SYSTEM */ }; /* A list of of all lock handles. The volatile attribute might help if used in an atexit handler. */ static volatile dotlock_t all_lockfiles; #ifdef DOTLOCK_USE_PTHREAD static pthread_mutex_t all_lockfiles_mutex = PTHREAD_MUTEX_INITIALIZER; # define LOCK_all_lockfiles() do { \ if (pthread_mutex_lock (&all_lockfiles_mutex)) \ my_fatal_0 ("locking all_lockfiles_mutex failed\n"); \ } while (0) # define UNLOCK_all_lockfiles() do { \ if (pthread_mutex_unlock (&all_lockfiles_mutex)) \ my_fatal_0 ("unlocking all_lockfiles_mutex failed\n"); \ } while (0) #else /*!DOTLOCK_USE_PTHREAD*/ # define LOCK_all_lockfiles() do { } while (0) # define UNLOCK_all_lockfiles() do { } while (0) #endif /*!DOTLOCK_USE_PTHREAD*/ /* If this has the value true all locking is disabled. */ static int never_lock; /* Entirely disable all locking. This function should be called before any locking is done. It may be called right at startup of the process as it only sets a global value. */ void dotlock_disable (void) { never_lock = 1; } #ifdef HAVE_POSIX_SYSTEM static int maybe_deadlock (dotlock_t h) { dotlock_t r; int res = 0; LOCK_all_lockfiles (); for (r=all_lockfiles; r; r = r->next) { if ( r != h && r->locked ) { res = 1; break; } } UNLOCK_all_lockfiles (); return res; } #endif /*HAVE_POSIX_SYSTEM*/ /* Read the lock file and return the pid, returns -1 on error. True will be stored in the integer at address SAME_NODE if the lock file has been created on the same node. */ #ifdef HAVE_POSIX_SYSTEM static int read_lockfile (dotlock_t h, int *same_node ) { char buffer_space[10+1+70+1]; /* 70 is just an estimated value; node names are usually shorter. */ int fd; int pid = -1; char *buffer, *p; size_t expected_len; int res, nread; *same_node = 0; expected_len = 10 + 1 + h->nodename_len + 1; if ( expected_len >= sizeof buffer_space) { buffer = jnlib_malloc (expected_len); if (!buffer) return -1; } else buffer = buffer_space; if ( (fd = open (h->lockname, O_RDONLY)) == -1 ) { int e = errno; my_info_2 ("error opening lockfile `%s': %s\n", h->lockname, strerror(errno) ); if (buffer != buffer_space) jnlib_free (buffer); jnlib_set_errno (e); /* Need to return ERRNO here. */ return -1; } p = buffer; nread = 0; do { res = read (fd, p, expected_len - nread); if (res == -1 && errno == EINTR) continue; if (res < 0) { my_info_1 ("error reading lockfile `%s'\n", h->lockname ); close (fd); if (buffer != buffer_space) jnlib_free (buffer); jnlib_set_errno (0); /* Do not return an inappropriate ERRNO. */ return -1; } p += res; nread += res; } while (res && nread != expected_len); close(fd); if (nread < 11) { my_info_1 ("invalid size of lockfile `%s'\n", h->lockname); if (buffer != buffer_space) jnlib_free (buffer); jnlib_set_errno (0); /* Better don't return an inappropriate ERRNO. */ return -1; } if (buffer[10] != '\n' || (buffer[10] = 0, pid = atoi (buffer)) == -1 || !pid ) { my_error_2 ("invalid pid %d in lockfile `%s'\n", pid, h->lockname); if (buffer != buffer_space) jnlib_free (buffer); jnlib_set_errno (0); return -1; } if (nread == expected_len && !memcmp (h->tname+h->nodename_off, buffer+11, h->nodename_len) && buffer[11+h->nodename_len] == '\n') *same_node = 1; if (buffer != buffer_space) jnlib_free (buffer); return pid; } #endif /*HAVE_POSIX_SYSTEM */ /* Check whether the file system which stores TNAME supports hardlinks. Instead of using the non-portable statsfs call which differs between various Unix versions, we do a runtime test. Returns: 0 supports hardlinks; 1 no hardlink support, -1 unknown (test error). */ #ifdef HAVE_POSIX_SYSTEM static int use_hardlinks_p (const char *tname) { char *lname; struct stat sb; unsigned int nlink; int res; if (stat (tname, &sb)) return -1; nlink = (unsigned int)sb.st_nlink; lname = jnlib_malloc (strlen (tname) + 1 + 1); if (!lname) return -1; strcpy (lname, tname); strcat (lname, "x"); /* We ignore the return value of link() because it is unreliable. */ (void) link (tname, lname); if (stat (tname, &sb)) res = -1; /* Ooops. */ else if (sb.st_nlink == nlink + 1) res = 0; /* Yeah, hardlinks are supported. */ else res = 1; /* No hardlink support. */ unlink (lname); jnlib_free (lname); return res; } #endif /*HAVE_POSIX_SYSTEM */ #ifdef HAVE_POSIX_SYSTEM /* Locking core for Unix. It used a temporary file and the link system call to make locking an atomic operation. */ static dotlock_t dotlock_create_unix (dotlock_t h, const char *file_to_lock) { int fd = -1; char pidstr[16]; const char *nodename; const char *dirpart; int dirpartlen; struct utsname utsbuf; size_t tnamelen; snprintf (pidstr, sizeof pidstr, "%10d\n", (int)getpid() ); /* Create a temporary file. */ if ( uname ( &utsbuf ) ) nodename = "unknown"; else nodename = utsbuf.nodename; if ( !(dirpart = strrchr (file_to_lock, DIRSEP_C)) ) { dirpart = EXTSEP_S; dirpartlen = 1; } else { dirpartlen = dirpart - file_to_lock; dirpart = file_to_lock; } LOCK_all_lockfiles (); h->next = all_lockfiles; all_lockfiles = h; tnamelen = dirpartlen + 6 + 30 + strlen(nodename) + 10 + 1; h->tname = jnlib_malloc (tnamelen + 1); if (!h->tname) { all_lockfiles = h->next; UNLOCK_all_lockfiles (); jnlib_free (h); return NULL; } h->nodename_len = strlen (nodename); snprintf (h->tname, tnamelen, "%.*s/.#lk%p.", dirpartlen, dirpart, h ); h->nodename_off = strlen (h->tname); snprintf (h->tname+h->nodename_off, tnamelen - h->nodename_off, "%s.%d", nodename, (int)getpid ()); do { jnlib_set_errno (0); fd = open (h->tname, O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IRGRP|S_IROTH|S_IWUSR ); } while (fd == -1 && errno == EINTR); if ( fd == -1 ) { all_lockfiles = h->next; UNLOCK_all_lockfiles (); my_error_2 (_("failed to create temporary file `%s': %s\n"), h->tname, strerror(errno)); jnlib_free (h->tname); jnlib_free (h); return NULL; } if ( write (fd, pidstr, 11 ) != 11 ) goto write_failed; if ( write (fd, nodename, strlen (nodename) ) != strlen (nodename) ) goto write_failed; if ( write (fd, "\n", 1 ) != 1 ) goto write_failed; if ( close (fd) ) goto write_failed; /* Check whether we support hard links. */ switch (use_hardlinks_p (h->tname)) { case 0: /* Yes. */ break; case 1: /* No. */ unlink (h->tname); h->use_o_excl = 1; break; default: my_error_2 ("can't check whether hardlinks are supported for `%s': %s\n", h->tname, strerror(errno)); goto write_failed; } h->lockname = jnlib_malloc (strlen (file_to_lock) + 6 ); if (!h->lockname) { all_lockfiles = h->next; UNLOCK_all_lockfiles (); unlink (h->tname); jnlib_free (h->tname); jnlib_free (h); return NULL; } strcpy (stpcpy (h->lockname, file_to_lock), EXTSEP_S "lock"); UNLOCK_all_lockfiles (); if (h->use_o_excl) my_debug_1 ("locking for `%s' done via O_EXCL\n", h->lockname); return h; write_failed: all_lockfiles = h->next; UNLOCK_all_lockfiles (); my_error_2 (_("error writing to `%s': %s\n"), h->tname, strerror (errno)); close (fd); unlink (h->tname); jnlib_free (h->tname); jnlib_free (h); return NULL; } #endif /*HAVE_POSIX_SYSTEM*/ #ifdef HAVE_DOSISH_SYSTEM /* Locking core for Windows. This version does not need a temporary file but uses the plain lock file along with record locking. We create this file here so that we later only need to do the file locking. For error reporting it is useful to keep the name of the file in the handle. */ static dotlock_t dotlock_create_w32 (dotlock_t h, const char *file_to_lock) { LOCK_all_lockfiles (); h->next = all_lockfiles; all_lockfiles = h; h->lockname = jnlib_malloc ( strlen (file_to_lock) + 6 ); if (!h->lockname) { all_lockfiles = h->next; UNLOCK_all_lockfiles (); jnlib_free (h); return NULL; } strcpy (stpcpy(h->lockname, file_to_lock), EXTSEP_S "lock"); /* If would be nice if we would use the FILE_FLAG_DELETE_ON_CLOSE along with FILE_SHARE_DELETE but that does not work due to a race condition: Despite the OPEN_ALWAYS flag CreateFile may return an error and we can't reliable create/open the lock file unless we would wait here until it works - however there are other valid reasons why a lock file can't be created and thus the process would not stop as expected but spin until Windows crashes. Our solution is to keep the lock file open; that does not harm. */ { #ifdef HAVE_W32CE_SYSTEM wchar_t *wname = utf8_to_wchar (h->lockname); if (wname) h->lockhd = CreateFile (wname, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL); else h->lockhd = INVALID_HANDLE_VALUE; jnlib_free (wname); #else h->lockhd = CreateFile (h->lockname, GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL, OPEN_ALWAYS, 0, NULL); #endif } if (h->lockhd == INVALID_HANDLE_VALUE) { all_lockfiles = h->next; UNLOCK_all_lockfiles (); my_error_2 (_("can't create `%s': %s\n"), h->lockname, w32_strerror (-1)); jnlib_free (h->lockname); jnlib_free (h); return NULL; } return h; } #endif /*HAVE_DOSISH_SYSTEM*/ /* Create a lockfile for a file name FILE_TO_LOCK and returns an object of type dotlock_t which may be used later to actually acquire the lock. A cleanup routine gets installed to cleanup left over locks or other files used internally by the lock mechanism. Calling this function with NULL does only install the atexit handler and may thus be used to assure that the cleanup is called after all other atexit handlers. This function creates a lock file in the same directory as FILE_TO_LOCK using that name and a suffix of ".lock". Note that on POSIX systems a temporary file ".#lk..pid[.threadid] is used. FLAGS must be 0. The function returns an new handle which needs to be released using destroy_dotlock but gets also released at the termination of the process. On error NULL is returned. */ dotlock_t dotlock_create (const char *file_to_lock, unsigned int flags) { static int initialized; dotlock_t h; if ( !initialized ) { atexit (dotlock_remove_lockfiles_reclaim); initialized = 1; } if ( !file_to_lock ) return NULL; /* Only initialization was requested. */ if (flags) { jnlib_set_errno (EINVAL); return NULL; } h = jnlib_calloc (1, sizeof *h); if (!h) return NULL; h->extra_fd = -1; if (never_lock) { h->disable = 1; LOCK_all_lockfiles (); h->next = all_lockfiles; all_lockfiles = h; UNLOCK_all_lockfiles (); return h; } #ifdef HAVE_DOSISH_SYSTEM return dotlock_create_w32 (h, file_to_lock); #else /*!HAVE_DOSISH_SYSTEM */ return dotlock_create_unix (h, file_to_lock); #endif /*!HAVE_DOSISH_SYSTEM*/ } /* Convenience function to store a file descriptor (or any any other integer value) in the context of handle H. */ void dotlock_set_fd (dotlock_t h, int fd) { h->extra_fd = fd; } /* Convenience function to retrieve a file descriptor (or any any other integer value) stored in the context of handle H. */ int dotlock_get_fd (dotlock_t h) { return h->extra_fd; } #ifdef HAVE_POSIX_SYSTEM /* Unix specific code of destroy_dotlock. */ static void dotlock_destroy_unix (dotlock_t h, int reclaim) { if (h->locked && h->lockname) unlink (h->lockname); if (h->tname && !h->use_o_excl) unlink (h->tname); if (reclaim) jnlib_free (h->tname); } #endif /*HAVE_POSIX_SYSTEM*/ #ifdef HAVE_DOSISH_SYSTEM /* Windows specific code of destroy_dotlock. */ static void dotlock_destroy_w32 (dotlock_t h) { if (h->locked) { OVERLAPPED ovl; memset (&ovl, 0, sizeof ovl); UnlockFileEx (h->lockhd, 0, 1, 0, &ovl); } CloseHandle (h->lockhd); } #endif /*HAVE_DOSISH_SYSTEM*/ /* Destroy the locck handle H and release the lock. */ void dotlock_destroy (dotlock_t h, int reclaim) { dotlock_t hprev, htmp; if ( !h ) return; /* First remove the handle from our global list of all locks. */ LOCK_all_lockfiles (); for (hprev=NULL, htmp=all_lockfiles; htmp; hprev=htmp, htmp=htmp->next) if (htmp == h) { if (hprev) hprev->next = htmp->next; else all_lockfiles = htmp->next; h->next = NULL; break; } UNLOCK_all_lockfiles (); /* Then destroy the lock. */ if (!h->disable) { #ifdef HAVE_DOSISH_SYSTEM dotlock_destroy_w32 (h); #else /* !HAVE_DOSISH_SYSTEM */ dotlock_destroy_unix (h, reclaim); #endif /* HAVE_DOSISH_SYSTEM */ if (reclaim) jnlib_free (h->lockname); } if (reclaim) jnlib_free (h); } #ifdef HAVE_POSIX_SYSTEM /* Unix specific code of make_dotlock. Returns 0 on success and -1 on error. */ static int dotlock_take_unix (dotlock_t h, long timeout) { int wtime = 0; int sumtime = 0; int pid; int lastpid = -1; int ownerchanged; const char *maybe_dead=""; int same_node; again: if (h->use_o_excl) { /* No hardlink support - use open(O_EXCL). */ int fd; do { jnlib_set_errno (0); fd = open (h->lockname, O_WRONLY|O_CREAT|O_EXCL, S_IRUSR|S_IRGRP|S_IROTH|S_IWUSR ); } while (fd == -1 && errno == EINTR); if (fd == -1 && errno == EEXIST) ; /* Lock held by another process. */ else if (fd == -1) { my_error_2 ("lock not made: open(O_EXCL) of `%s' failed: %s\n", h->lockname, strerror (errno)); return -1; } else { char pidstr[16]; snprintf (pidstr, sizeof pidstr, "%10d\n", (int)getpid()); if (write (fd, pidstr, 11 ) == 11 && write (fd, h->tname + h->nodename_off,h->nodename_len) == h->nodename_len && write (fd, "\n", 1) == 1 && !close (fd)) { h->locked = 1; return 0; } /* Write error. */ my_error_2 ("lock not made: writing to `%s' failed: %s\n", h->lockname, strerror (errno)); close (fd); unlink (h->lockname); return -1; } } else /* Standard method: Use hardlinks. */ { struct stat sb; /* We ignore the return value of link() because it is unreliable. */ (void) link (h->tname, h->lockname); if (stat (h->tname, &sb)) { my_error_1 ("lock not made: Oops: stat of tmp file failed: %s\n", strerror (errno)); /* In theory this might be a severe error: It is possible that link succeeded but stat failed due to changed permissions. We can't do anything about it, though. */ return -1; } if (sb.st_nlink == 2) { h->locked = 1; return 0; /* Okay. */ } } /* Check for stale lock files. */ if ( (pid = read_lockfile (h, &same_node)) == -1 ) { if ( errno != ENOENT ) { my_info_0 ("cannot read lockfile\n"); return -1; } my_info_0 ("lockfile disappeared\n"); goto again; } else if ( pid == getpid() && same_node ) { my_info_0 ("Oops: lock already held by us\n"); h->locked = 1; return 0; /* okay */ } else if ( same_node && kill (pid, 0) && errno == ESRCH ) { /* Note: It is unlikley that we get a race here unless a pid is reused too fast or a new process with the same pid as the one of the stale file tries to lock right at the same time as we. */ my_info_1 (_("removing stale lockfile (created by %d)\n"), pid); unlink (h->lockname); goto again; } if (lastpid == -1) lastpid = pid; ownerchanged = (pid != lastpid); if (timeout) { struct timeval tv; /* Wait until lock has been released. We use increasing retry intervals of 50ms, 100ms, 200ms, 400ms, 800ms, 2s, 4s and 8s but reset it if the lock owner meanwhile changed. */ if (!wtime || ownerchanged) wtime = 50; else if (wtime < 800) wtime *= 2; else if (wtime == 800) wtime = 2000; else if (wtime < 8000) wtime *= 2; if (timeout > 0) { if (wtime > timeout) wtime = timeout; timeout -= wtime; } sumtime += wtime; if (sumtime >= 1500) { sumtime = 0; my_info_3 (_("waiting for lock (held by %d%s) %s...\n"), pid, maybe_dead, maybe_deadlock(h)? _("(deadlock?) "):""); } tv.tv_sec = wtime / 1000; tv.tv_usec = (wtime % 1000) * 1000; select (0, NULL, NULL, NULL, &tv); goto again; } jnlib_set_errno (EACCES); return -1; } #endif /*HAVE_POSIX_SYSTEM*/ #ifdef HAVE_DOSISH_SYSTEM /* Windows specific code of make_dotlock. Returns 0 on success and -1 on error. */ static int dotlock_take_w32 (dotlock_t h, long timeout) { int wtime = 0; int w32err; OVERLAPPED ovl; again: /* Lock one byte at offset 0. The offset is given by OVL. */ memset (&ovl, 0, sizeof ovl); if (LockFileEx (h->lockhd, (LOCKFILE_EXCLUSIVE_LOCK | LOCKFILE_FAIL_IMMEDIATELY), 0, 1, 0, &ovl)) { h->locked = 1; return 0; /* okay */ } w32err = GetLastError (); if (w32err != ERROR_LOCK_VIOLATION) { my_error_2 (_("lock `%s' not made: %s\n"), h->lockname, w32_strerror (w32err)); return -1; } if (timeout) { /* Wait until lock has been released. We use retry intervals of 50ms, 100ms, 200ms, 400ms, 800ms, 2s, 4s and 8s. */ if (!wtime) wtime = 50; else if (wtime < 800) wtime *= 2; else if (wtime == 800) wtime = 2000; else if (wtime < 8000) wtime *= 2; if (timeout > 0) { if (wtime > timeout) wtime = timeout; timeout -= wtime; } if (wtime >= 800) my_info_1 (_("waiting for lock %s...\n"), h->lockname); Sleep (wtime); goto again; } return -1; } #endif /*HAVE_DOSISH_SYSTEM*/ /* Take a lock on H. A value of 0 for TIMEOUT returns immediately if the lock can't be taked, -1 waits forever (hopefully not), other values wait for TIMEOUT milliseconds. Returns: 0 on success */ int dotlock_take (dotlock_t h, long timeout) { int ret; if ( h->disable ) return 0; /* Locks are completely disabled. Return success. */ if ( h->locked ) { my_debug_1 ("Oops, `%s' is already locked\n", h->lockname); return 0; } #ifdef HAVE_DOSISH_SYSTEM ret = dotlock_take_w32 (h, timeout); #else /*!HAVE_DOSISH_SYSTEM*/ ret = dotlock_take_unix (h, timeout); #endif /*!HAVE_DOSISH_SYSTEM*/ return ret; } #ifdef HAVE_POSIX_SYSTEM /* Unix specific code of release_dotlock. */ static int dotlock_release_unix (dotlock_t h) { int pid, same_node; pid = read_lockfile (h, &same_node); if ( pid == -1 ) { my_error_0 ("release_dotlock: lockfile error\n"); return -1; } if ( pid != getpid() || !same_node ) { my_error_1 ("release_dotlock: not our lock (pid=%d)\n", pid); return -1; } if ( unlink( h->lockname ) ) { my_error_1 ("release_dotlock: error removing lockfile `%s'\n", h->lockname); return -1; } /* Fixme: As an extra check we could check whether the link count is now really at 1. */ return 0; } #endif /*HAVE_POSIX_SYSTEM */ #ifdef HAVE_DOSISH_SYSTEM /* Windows specific code of release_dotlock. */ static int dotlock_release_w32 (dotlock_t h) { OVERLAPPED ovl; memset (&ovl, 0, sizeof ovl); if (!UnlockFileEx (h->lockhd, 0, 1, 0, &ovl)) { my_error_2 ("release_dotlock: error removing lockfile `%s': %s\n", h->lockname, w32_strerror (-1)); return -1; } return 0; } #endif /*HAVE_DOSISH_SYSTEM */ /* Release a lock. Returns 0 on success. */ int dotlock_release (dotlock_t h) { int ret; /* To avoid atexit race conditions we first check whether there are any locks left. It might happen that another atexit handler tries to release the lock while the atexit handler of this module already ran and thus H is undefined. */ LOCK_all_lockfiles (); ret = !all_lockfiles; UNLOCK_all_lockfiles (); if (ret) return 0; if ( h->disable ) return 0; if ( !h->locked ) { my_debug_1 ("Oops, `%s' is not locked\n", h->lockname); return 0; } #ifdef HAVE_DOSISH_SYSTEM ret = dotlock_release_w32 (h); #else ret = dotlock_release_unix (h); #endif if (!ret) h->locked = 0; return ret; } /* Remove all lockfiles. This is called by the atexit handler installed by this module but may also be called by other termination handlers. When RECLAIM == 0, it doesn't reclaim memory allocated. This is useful calling by signal handlers. */ void dotlock_remove_lockfiles (int reclaim) { dotlock_t h, h2; /* First set the lockfiles list to NULL so that for example dotlock_release is ware that this fucntion is currently running. */ LOCK_all_lockfiles (); h = all_lockfiles; all_lockfiles = NULL; UNLOCK_all_lockfiles (); while ( h ) { h2 = h->next; dotlock_destroy (h, reclaim); h = h2; } } void dotlock_remove_lockfiles_reclaim (void) { dotlock_remove_lockfiles (1); } gnupg-1.4.20/util/isascii.c0000644000175000017500000000154612635262326012421 00000000000000/* isascii.c - Replacement for isascii. * Copyright (C) 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifdef HAVE_CONFIG_H #include #endif int isascii (int c) { return (((c) & ~0x7f) == 0); } gnupg-1.4.20/util/assuan-util.c0000644000175000017500000000647112635262326013244 00000000000000/* assuan-util.c - Utility functions for Assuan * Copyright (C) 2001, 2002, 2003, 2004 Free Software Foundation, Inc. * Copyright (C) 2005 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #include #include #include #include #include #include "assuan-defs.h" /* Store the error in the context so that the error sending function can take out a descriptive text. Inside the assuan code, use the macro set_error instead of this function. */ int assuan_set_error (assuan_context_t ctx, int err, const char *text) { ctx->err_no = err; ctx->err_str = text; return err; } void assuan_set_pointer (assuan_context_t ctx, void *pointer) { if (ctx) ctx->user_pointer = pointer; } void * assuan_get_pointer (assuan_context_t ctx) { return ctx? ctx->user_pointer : NULL; } void assuan_set_log_stream (assuan_context_t ctx, FILE *fp) { if (ctx) { if (ctx->log_fp) fflush (ctx->log_fp); ctx->log_fp = fp; _assuan_set_default_log_stream (fp); } } void assuan_begin_confidential (assuan_context_t ctx) { if (ctx) { ctx->confidential = 1; } } void assuan_end_confidential (assuan_context_t ctx) { if (ctx) { ctx->confidential = 0; } } /* Dump a possibly binary string (used for debugging). Distinguish ascii text from binary and print it accordingly. */ void _assuan_log_print_buffer (FILE *fp, const void *buffer, size_t length) { const unsigned char *s; int n; for (n=length,s=buffer; n; n--, s++) if ((!isascii (*s) || iscntrl (*s) || !isprint (*s)) && !(*s >= 0x80)) break; s = buffer; if (!n && *s != '[') fwrite (buffer, length, 1, fp); else { putc ('[', fp); for (n=0; n < length; n++, s++) fprintf (fp, " %02x", *s); putc (' ', fp); putc (']', fp); } } /* Log a user-supplied string. Escapes non-printable before printing. */ void _assuan_log_sanitized_string (const char *string) { const unsigned char *s = string; FILE *fp = assuan_get_assuan_log_stream (); if (! *s) return; for (; *s; s++) { int c = 0; switch (*s) { case '\r': c = 'r'; break; case '\n': c = 'n'; break; case '\f': c = 'f'; break; case '\v': c = 'v'; break; case '\b': c = 'b'; break; default: if ((isascii (*s) && isprint (*s)) || (*s >= 0x80)) putc (*s, fp); else { putc ('\\', fp); fprintf (fp, "x%02x", *s); } } if (c) { putc ('\\', fp); putc (c, fp); } } } gnupg-1.4.20/util/memrchr.c0000644000175000017500000000242312635262326012425 00000000000000/* memrchr.c - libc replacement function * Copyright (C) 2005 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 3 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, see . */ /* memrchr() is a GNU function that might not be available everywhere. It's basically the inverse of memchr() - search backwards in a memory block for a particular character. */ #include #include /* There are many ways to optimize this, but this is a simple unoptimized implementation. */ void * memrchr(const void *s, int c, size_t n) { const unsigned char *start=s,*end=s; end+=n-1; while(end>=start) { if(*end==c) return (void *)end; else end--; } return NULL; } gnupg-1.4.20/util/compat.c0000644000175000017500000000771412635262326012263 00000000000000/* compat.c - Simple compatibility functions * Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc. * * The origin of this code is GnuPG. * * This file is free software; as a special exception the author gives * unlimited permission to copy and/or distribute it, with or without * modifications, as long as this notice is preserved. * * This file is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY, to the extent permitted by law; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * History: * 2006-09-28 dshaw Created. Added function hextobyte from GnuPG. * 2007-04-16 dshaw Added ascii_toupper, ascii_tolower, ascii_strcasecmp, * ascii_strncasecmp from GnuPG. * 2009-08-25 wk License changed by GnuPG maintainer from GPL with * OpenSSL exception to this all permissive license. * 2009-08-25 wk Wrote new function xstrconcat. */ #include #include #include #include #include #include /* We require an external malloc function named xtrymalloc. */ void *xtrymalloc (size_t n); #ifndef DIM #define DIM(v) (sizeof(v)/sizeof((v)[0])) #endif int hextobyte (const char *s) { int c; if ( *s >= '0' && *s <= '9' ) c = 16 * (*s - '0'); else if ( *s >= 'A' && *s <= 'F' ) c = 16 * (10 + *s - 'A'); else if ( *s >= 'a' && *s <= 'f' ) c = 16 * (10 + *s - 'a'); else return -1; s++; if ( *s >= '0' && *s <= '9' ) c += *s - '0'; else if ( *s >= 'A' && *s <= 'F' ) c += 10 + *s - 'A'; else if ( *s >= 'a' && *s <= 'f' ) c += 10 + *s - 'a'; else return -1; return c; } int ascii_toupper (int c) { if (c >= 'a' && c <= 'z') c &= ~0x20; return c; } int ascii_tolower (int c) { if (c >= 'A' && c <= 'Z') c |= 0x20; return c; } int ascii_strcasecmp (const char *a, const char *b) { const unsigned char *p1 = (const unsigned char *)a; const unsigned char *p2 = (const unsigned char *)b; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = ascii_tolower (*p1); c2 = ascii_tolower (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; } int ascii_strncasecmp (const char *a, const char *b, size_t n) { const unsigned char *p1 = (const unsigned char *)a; const unsigned char *p2 = (const unsigned char *)b; unsigned char c1, c2; if (p1 == p2 || !n ) return 0; do { c1 = ascii_tolower (*p1); c2 = ascii_tolower (*p2); if ( !--n || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; } static char * do_strconcat (const char *s1, va_list arg_ptr) { const char *argv[48]; size_t argc; size_t needed; char *buffer, *p; const char *r; argc = 0; argv[argc++] = s1; needed = strlen (s1); while (((argv[argc] = va_arg (arg_ptr, const char *)))) { needed += strlen (argv[argc]); if (argc >= DIM (argv)-1) { errno = EINVAL; return NULL; } argc++; } needed++; buffer = xtrymalloc (needed); if (buffer) { for (p = buffer, argc=0; argv[argc]; argc++) { for (r = argv[argc]; *r; ) *p++ = *r++; *p = 0; } } return buffer; } /* Concatenate the string S1 with all the following strings up to a NULL. Returns a malloced buffer. */ char * xstrconcat (const char *s1, ...) { va_list arg_ptr; char *result; if (!s1) { result = xtrymalloc (1); if (result) *result = 0; } else { va_start (arg_ptr, s1); result = do_strconcat (s1, arg_ptr); va_end (arg_ptr); } if (!result) { if (errno == EINVAL) fputs ("\nfatal: too many args for xstrconcat\n", stderr); else fputs ("\nfatal: out of memory\n", stderr); exit (2); } return result; } gnupg-1.4.20/util/assuan-logging.c0000644000175000017500000000500212635262326013702 00000000000000/* assuan-logging.c - Default logging function. * Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #ifdef HAVE_W32_SYSTEM #include #endif /*HAVE_W32_SYSTEM*/ #include "assuan-defs.h" static char prefix_buffer[80]; static FILE *_assuan_log; void _assuan_set_default_log_stream (FILE *fp) { if (!_assuan_log) _assuan_log = fp; } void assuan_set_assuan_log_stream (FILE *fp) { _assuan_log = fp; } FILE * assuan_get_assuan_log_stream (void) { return _assuan_log ? _assuan_log : stderr; } /* Set the prefix to be used for logging to TEXT or resets it to the default if TEXT is NULL. */ void assuan_set_assuan_log_prefix (const char *text) { if (text) { strncpy (prefix_buffer, text, sizeof (prefix_buffer)-1); prefix_buffer[sizeof (prefix_buffer)-1] = 0; } else *prefix_buffer = 0; } const char * assuan_get_assuan_log_prefix (void) { return prefix_buffer; } void _assuan_log_printf (const char *format, ...) { va_list arg_ptr; FILE *fp; const char *prf; fp = assuan_get_assuan_log_stream (); prf = assuan_get_assuan_log_prefix (); if (*prf) { fputs (prf, fp); fputs (": ", fp); } va_start (arg_ptr, format); vfprintf (fp, format, arg_ptr ); va_end (arg_ptr); } #ifdef HAVE_W32_SYSTEM const char * _assuan_w32_strerror (int ec) { static char strerr[256]; if (ec == -1) ec = (int)GetLastError (); FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, ec, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), strerr, sizeof (strerr)-1, NULL); return strerr; } #endif /*HAVE_W32_SYSTEM*/ gnupg-1.4.20/util/errors.c0000644000175000017500000001017412635262326012306 00000000000000/* errors.c - error strings * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include "errors.h" #include "i18n.h" #ifndef HAVE_STRERROR char * strerror( int n ) { extern char *sys_errlist[]; extern int sys_nerr; static char buf[15]; if( n >= 0 && n < sys_nerr ) return sys_errlist[n]; strcpy( buf, "Unknown error" ); return buf; } #endif /* !HAVE_STRERROR */ const char * g10_errstr( int err ) { static char buf[50]; const char *p; #define X(n,s) case G10ERR_##n : p = s; break; switch( err ) { case -1: p = "eof"; break; case 0: p = "okay"; break; X(GENERAL, N_("general error")) X(UNKNOWN_PACKET, N_("unknown packet type")) X(UNKNOWN_VERSION,N_("unknown version")) X(PUBKEY_ALGO ,N_("unknown pubkey algorithm")) X(DIGEST_ALGO ,N_("unknown digest algorithm")) X(BAD_PUBKEY ,N_("bad public key")) X(BAD_SECKEY ,N_("bad secret key")) X(BAD_SIGN ,N_("bad signature")) X(CHECKSUM , N_("checksum error")) X(BAD_PASS , N_("bad passphrase")) X(NO_PUBKEY ,N_("public key not found")) X(CIPHER_ALGO ,N_("unknown cipher algorithm")) X(KEYRING_OPEN ,N_("can't open the keyring")) X(INVALID_PACKET ,N_("invalid packet")) X(INVALID_ARMOR ,N_("invalid armor")) X(NO_USER_ID ,N_("no such user id")) X(NO_SECKEY ,N_("secret key not available")) X(WRONG_SECKEY ,N_("wrong secret key used")) X(UNSUPPORTED ,N_("not supported")) X(BAD_KEY ,N_("bad key")) X(READ_FILE ,N_("file read error")) X(WRITE_FILE ,N_("file write error")) X(COMPR_ALGO ,N_("unknown compress algorithm")) X(OPEN_FILE ,N_("file open error")) X(CREATE_FILE ,N_("file create error")) X(PASSPHRASE ,N_("invalid passphrase")) X(NI_PUBKEY ,N_("unimplemented pubkey algorithm")) X(NI_CIPHER ,N_("unimplemented cipher algorithm")) X(SIG_CLASS ,N_("unknown signature class")) X(TRUSTDB ,N_("trust database error")) X(BAD_MPI ,N_("bad MPI")) X(RESOURCE_LIMIT ,N_("resource limit")) X(INV_KEYRING ,N_("invalid keyring")) X(BAD_CERT ,N_("bad certificate")) X(INV_USER_ID ,N_("malformed user id")) X(CLOSE_FILE ,N_("file close error")) X(RENAME_FILE ,N_("file rename error")) X(DELETE_FILE ,N_("file delete error")) X(UNEXPECTED ,N_("unexpected data")) X(TIME_CONFLICT ,N_("timestamp conflict")) X(WR_PUBKEY_ALGO ,N_("unusable pubkey algorithm")) X(FILE_EXISTS ,N_("file exists")) X(WEAK_KEY ,N_("weak key")) X(INV_ARG ,N_("invalid argument")) X(BAD_URI ,N_("bad URI")) X(INVALID_URI ,N_("unsupported URI")) X(NETWORK ,N_("network error")) X(SELFTEST_FAILED,"selftest failed") X(NOT_ENCRYPTED ,N_("not encrypted")) X(NOT_PROCESSED ,N_("not processed")) /* the key cannot be used for a specific usage */ X(UNU_PUBKEY ,N_("unusable public key")) X(UNU_SECKEY ,N_("unusable secret key")) X(KEYSERVER ,N_("keyserver error")) X(CANCELED ,N_("canceled")) X(NO_CARD ,N_("no card")) X(NO_DATA ,N_("no data")) default: p = buf; sprintf(buf, "g10err=%d", err); break; } #undef X return _(p); } gnupg-1.4.20/util/regex_internal.c0000644000175000017500000010660412635262326014004 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #include #include #include #include #include #include #if defined HAVE_WCHAR_H || defined _LIBC # include #endif /* HAVE_WCHAR_H || _LIBC */ #if defined HAVE_WCTYPE_H || defined _LIBC # include #endif /* HAVE_WCTYPE_H || _LIBC */ #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include # include # include # endif #endif /* This is for other GNU distributions with internationalized messages. */ #if HAVE_LIBINTL_H || defined _LIBC # include # ifdef _LIBC # undef gettext # define gettext(msgid) \ INTUSE(__dcgettext) (_libc_intl_domainname_internal, msgid, LC_MESSAGES) # endif #else # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif #include "_regex.h" /* gnupg */ #include "regex_internal.h" static void re_string_construct_common (const char *str, int len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, int icase); #ifdef RE_ENABLE_I18N static int re_string_skip_chars (re_string_t *pstr, int new_raw_idx); #endif /* RE_ENABLE_I18N */ static re_dfastate_t *create_newstate_common (re_dfa_t *dfa, const re_node_set *nodes, unsigned int hash); static reg_errcode_t register_state (re_dfa_t *dfa, re_dfastate_t *newstate, unsigned int hash); static re_dfastate_t *create_ci_newstate (re_dfa_t *dfa, const re_node_set *nodes, unsigned int hash); static re_dfastate_t *create_cd_newstate (re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, unsigned int hash); static unsigned int inline calc_state_hash (const re_node_set *nodes, unsigned int context); /* Functions for string operation. */ /* This function allocate the buffers. It is necessary to call re_string_reconstruct before using the object. */ static reg_errcode_t re_string_allocate (pstr, str, len, init_len, trans, icase) re_string_t *pstr; const char *str; int len, init_len, icase; RE_TRANSLATE_TYPE trans; { reg_errcode_t ret; int init_buf_len = (len + 1 < init_len) ? len + 1: init_len; re_string_construct_common (str, len, pstr, trans, icase); pstr->stop = pstr->len; ret = re_string_realloc_buffers (pstr, init_buf_len); if (BE (ret != REG_NOERROR, 0)) return ret; pstr->mbs_case = (MBS_CASE_ALLOCATED (pstr) ? pstr->mbs_case : (unsigned char *) str); pstr->mbs = MBS_ALLOCATED (pstr) ? pstr->mbs : pstr->mbs_case; pstr->valid_len = (MBS_CASE_ALLOCATED (pstr) || MBS_ALLOCATED (pstr) || MB_CUR_MAX > 1) ? pstr->valid_len : len; return REG_NOERROR; } /* This function allocate the buffers, and initialize them. */ static reg_errcode_t re_string_construct (pstr, str, len, trans, icase) re_string_t *pstr; const char *str; int len, icase; RE_TRANSLATE_TYPE trans; { reg_errcode_t ret; re_string_construct_common (str, len, pstr, trans, icase); pstr->stop = pstr->len; /* Set 0 so that this function can initialize whole buffers. */ pstr->valid_len = 0; if (len > 0) { ret = re_string_realloc_buffers (pstr, len + 1); if (BE (ret != REG_NOERROR, 0)) return ret; } pstr->mbs_case = (MBS_CASE_ALLOCATED (pstr) ? pstr->mbs_case : (unsigned char *) str); pstr->mbs = MBS_ALLOCATED (pstr) ? pstr->mbs : pstr->mbs_case; if (icase) { #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) build_wcs_upper_buffer (pstr); else #endif /* RE_ENABLE_I18N */ build_upper_buffer (pstr); } else { #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) build_wcs_buffer (pstr); else #endif /* RE_ENABLE_I18N */ { if (trans != NULL) re_string_translate_buffer (pstr); else pstr->valid_len = len; } } /* Initialized whole buffers, then valid_len == bufs_len. */ pstr->valid_len = pstr->bufs_len; return REG_NOERROR; } /* Helper functions for re_string_allocate, and re_string_construct. */ static reg_errcode_t re_string_realloc_buffers (pstr, new_buf_len) re_string_t *pstr; int new_buf_len; { #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) { pstr->wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); if (BE (pstr->wcs == NULL, 0)) return REG_ESPACE; } #endif /* RE_ENABLE_I18N */ if (MBS_ALLOCATED (pstr)) { pstr->mbs = re_realloc (pstr->mbs, unsigned char, new_buf_len); if (BE (pstr->mbs == NULL, 0)) return REG_ESPACE; } if (MBS_CASE_ALLOCATED (pstr)) { pstr->mbs_case = re_realloc (pstr->mbs_case, unsigned char, new_buf_len); if (BE (pstr->mbs_case == NULL, 0)) return REG_ESPACE; if (!MBS_ALLOCATED (pstr)) pstr->mbs = pstr->mbs_case; } pstr->bufs_len = new_buf_len; return REG_NOERROR; } static void re_string_construct_common (str, len, pstr, trans, icase) const char *str; int len; re_string_t *pstr; RE_TRANSLATE_TYPE trans; int icase; { memset (pstr, '\0', sizeof (re_string_t)); pstr->raw_mbs = (const unsigned char *) str; pstr->len = len; pstr->trans = trans; pstr->icase = icase ? 1 : 0; } #ifdef RE_ENABLE_I18N /* Build wide character buffer PSTR->WCS. If the byte sequence of the string are: (0), (1), (0), (1), Then wide character buffer will be: , WEOF , , WEOF , We use WEOF for padding, they indicate that the position isn't a first byte of a multibyte character. Note that this function assumes PSTR->VALID_LEN elements are already built and starts from PSTR->VALID_LEN. */ static void build_wcs_buffer (pstr) re_string_t *pstr; { mbstate_t prev_st; int byte_idx, end_idx, mbclen, remain_len; /* Build the buffers from pstr->valid_len to either pstr->len or pstr->bufs_len. */ end_idx = (pstr->bufs_len > pstr->len)? pstr->len : pstr->bufs_len; for (byte_idx = pstr->valid_len; byte_idx < end_idx;) { wchar_t wc; remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; mbclen = mbrtowc (&wc, ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx), remain_len, &pstr->cur_state); if (BE (mbclen == (size_t) -2, 0)) { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } else if (BE (mbclen == (size_t) -1 || mbclen == 0, 0)) { /* We treat these cases as a singlebyte character. */ mbclen = 1; wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; pstr->cur_state = prev_st; } /* Apply the translateion if we need. */ if (pstr->trans != NULL && mbclen == 1) { int ch = pstr->trans[pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]]; pstr->mbs_case[byte_idx] = ch; } /* Write wide character and padding. */ pstr->wcs[byte_idx++] = wc; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } pstr->valid_len = byte_idx; } /* Build wide character buffer PSTR->WCS like build_wcs_buffer, but for REG_ICASE. */ static void build_wcs_upper_buffer (pstr) re_string_t *pstr; { mbstate_t prev_st; int byte_idx, end_idx, mbclen, remain_len; /* Build the buffers from pstr->valid_len to either pstr->len or pstr->bufs_len. */ end_idx = (pstr->bufs_len > pstr->len)? pstr->len : pstr->bufs_len; for (byte_idx = pstr->valid_len; byte_idx < end_idx;) { wchar_t wc; remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; mbclen = mbrtowc (&wc, ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx), remain_len, &pstr->cur_state); if (BE (mbclen == (size_t) -2, 0)) { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } else if (mbclen == 1 || mbclen == (size_t) -1 || mbclen == 0) { /* In case of a singlebyte character. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; /* Apply the translateion if we need. */ if (pstr->trans != NULL && mbclen == 1) { ch = pstr->trans[ch]; pstr->mbs_case[byte_idx] = ch; } pstr->wcs[byte_idx] = iswlower (wc) ? toupper (wc) : wc; pstr->mbs[byte_idx++] = islower (ch) ? toupper (ch) : ch; if (BE (mbclen == (size_t) -1, 0)) pstr->cur_state = prev_st; } else /* mbclen > 1 */ { if (iswlower (wc)) wcrtomb ((char *) pstr->mbs + byte_idx, towupper (wc), &prev_st); else memcpy (pstr->mbs + byte_idx, pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); pstr->wcs[byte_idx++] = iswlower (wc) ? toupper (wc) : wc; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } } pstr->valid_len = byte_idx; } /* Skip characters until the index becomes greater than NEW_RAW_IDX. Return the index. */ static int re_string_skip_chars (pstr, new_raw_idx) re_string_t *pstr; int new_raw_idx; { mbstate_t prev_st; int rawbuf_idx, mbclen; /* Skip the characters which are not necessary to check. */ for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_len; rawbuf_idx < new_raw_idx;) { int remain_len = pstr->len - rawbuf_idx; prev_st = pstr->cur_state; mbclen = mbrlen ((const char *) pstr->raw_mbs + rawbuf_idx, remain_len, &pstr->cur_state); if (BE (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0, 0)) { /* We treat these cases as a singlebyte character. */ mbclen = 1; pstr->cur_state = prev_st; } /* Then proceed the next character. */ rawbuf_idx += mbclen; } return rawbuf_idx; } #endif /* RE_ENABLE_I18N */ /* Build the buffer PSTR->MBS, and apply the translation if we need. This function is used in case of REG_ICASE. */ static void build_upper_buffer (pstr) re_string_t *pstr; { int char_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; if (pstr->trans != NULL) { ch = pstr->trans[ch]; pstr->mbs_case[char_idx] = ch; } if (islower (ch)) pstr->mbs[char_idx] = toupper (ch); else pstr->mbs[char_idx] = ch; } pstr->valid_len = char_idx; } /* Apply TRANS to the buffer in PSTR. */ static void re_string_translate_buffer (pstr) re_string_t *pstr; { int buf_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; pstr->mbs_case[buf_idx] = pstr->trans[ch]; } pstr->valid_len = buf_idx; } /* This function re-construct the buffers. Concretely, convert to wide character in case of MB_CUR_MAX > 1, convert to upper case in case of REG_ICASE, apply translation. */ static reg_errcode_t re_string_reconstruct (pstr, idx, eflags, newline) re_string_t *pstr; int idx, eflags, newline; { int offset = idx - pstr->raw_mbs_idx; if (offset < 0) { /* Reset buffer. */ #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); #endif /* RE_ENABLE_I18N */ pstr->len += pstr->raw_mbs_idx; pstr->stop += pstr->raw_mbs_idx; pstr->valid_len = pstr->raw_mbs_idx = 0; pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (!MBS_CASE_ALLOCATED (pstr)) pstr->mbs_case = (unsigned char *) pstr->raw_mbs; if (!MBS_ALLOCATED (pstr) && !MBS_CASE_ALLOCATED (pstr)) pstr->mbs = (unsigned char *) pstr->raw_mbs; offset = idx; } if (offset != 0) { pstr->tip_context = re_string_context_at (pstr, offset - 1, eflags, newline); /* Are the characters which are already checked remain? */ if (offset < pstr->valid_len) { /* Yes, move them to the front of the buffer. */ #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); #endif /* RE_ENABLE_I18N */ if (MBS_ALLOCATED (pstr)) memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); if (MBS_CASE_ALLOCATED (pstr)) memmove (pstr->mbs_case, pstr->mbs_case + offset, pstr->valid_len - offset); pstr->valid_len -= offset; #if DEBUG assert (pstr->valid_len > 0); #endif } else { /* No, skip all characters until IDX. */ pstr->valid_len = 0; #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) { int wcs_idx; pstr->valid_len = re_string_skip_chars (pstr, idx) - idx; for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) pstr->wcs[wcs_idx] = WEOF; } #endif /* RE_ENABLE_I18N */ } if (!MBS_CASE_ALLOCATED (pstr)) { pstr->mbs_case += offset; /* In case of !MBS_ALLOCATED && !MBS_CASE_ALLOCATED. */ if (!MBS_ALLOCATED (pstr)) pstr->mbs += offset; } } pstr->raw_mbs_idx = idx; pstr->len -= offset; pstr->stop -= offset; /* Then build the buffers. */ #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) { if (pstr->icase) build_wcs_upper_buffer (pstr); else build_wcs_buffer (pstr); } else #endif /* RE_ENABLE_I18N */ { if (pstr->icase) build_upper_buffer (pstr); else if (pstr->trans != NULL) re_string_translate_buffer (pstr); } pstr->cur_idx = 0; return REG_NOERROR; } static void re_string_destruct (pstr) re_string_t *pstr; { #ifdef RE_ENABLE_I18N re_free (pstr->wcs); #endif /* RE_ENABLE_I18N */ if (MBS_ALLOCATED (pstr)) re_free (pstr->mbs); if (MBS_CASE_ALLOCATED (pstr)) re_free (pstr->mbs_case); } /* Return the context at IDX in INPUT. */ static unsigned int re_string_context_at (input, idx, eflags, newline_anchor) const re_string_t *input; int idx, eflags, newline_anchor; { int c; if (idx < 0 || idx == input->len) { if (idx < 0) /* In this case, we use the value stored in input->tip_context, since we can't know the character in input->mbs[-1] here. */ return input->tip_context; else /* (idx == input->len) */ return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF : CONTEXT_NEWLINE | CONTEXT_ENDBUF); } c = re_string_byte_at (input, idx); if (IS_WORD_CHAR (c)) return CONTEXT_WORD; return (newline_anchor && IS_NEWLINE (c)) ? CONTEXT_NEWLINE : 0; } /* Functions for set operation. */ static reg_errcode_t re_node_set_alloc (set, size) re_node_set *set; int size; { set->alloc = size; set->nelem = 0; set->elems = re_malloc (int, size); if (BE (set->elems == NULL, 0)) return REG_ESPACE; return REG_NOERROR; } static reg_errcode_t re_node_set_init_1 (set, elem) re_node_set *set; int elem; { set->alloc = 1; set->nelem = 1; set->elems = re_malloc (int, 1); if (BE (set->elems == NULL, 0)) return REG_ESPACE; set->elems[0] = elem; return REG_NOERROR; } static reg_errcode_t re_node_set_init_2 (set, elem1, elem2) re_node_set *set; int elem1, elem2; { set->alloc = 2; set->elems = re_malloc (int, 2); if (BE (set->elems == NULL, 0)) return REG_ESPACE; if (elem1 == elem2) { set->nelem = 1; set->elems[0] = elem1; } else { set->nelem = 2; if (elem1 < elem2) { set->elems[0] = elem1; set->elems[1] = elem2; } else { set->elems[0] = elem2; set->elems[1] = elem1; } } return REG_NOERROR; } static reg_errcode_t re_node_set_init_copy (dest, src) re_node_set *dest; const re_node_set *src; { dest->nelem = src->nelem; if (src->nelem > 0) { dest->alloc = dest->nelem; dest->elems = re_malloc (int, dest->alloc); if (BE (dest->elems == NULL, 0)) return REG_ESPACE; memcpy (dest->elems, src->elems, src->nelem * sizeof (int)); } else re_node_set_init_empty (dest); return REG_NOERROR; } /* Calculate the intersection of the sets SRC1 and SRC2. And merge it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. Note: We assume dest->elems is NULL, when dest->alloc is 0. */ static reg_errcode_t re_node_set_add_intersect (dest, src1, src2) re_node_set *dest; const re_node_set *src1, *src2; { int i1, i2, id; if (src1->nelem > 0 && src2->nelem > 0) { if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) { dest->alloc = src1->nelem + src2->nelem + dest->nelem; dest->elems = re_realloc (dest->elems, int, dest->alloc); if (BE (dest->elems == NULL, 0)) return REG_ESPACE; } } else return REG_NOERROR; for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) { if (src1->elems[i1] > src2->elems[i2]) { ++i2; continue; } if (src1->elems[i1] == src2->elems[i2]) { while (id < dest->nelem && dest->elems[id] < src2->elems[i2]) ++id; if (id < dest->nelem && dest->elems[id] == src2->elems[i2]) ++id; else { memmove (dest->elems + id + 1, dest->elems + id, sizeof (int) * (dest->nelem - id)); dest->elems[id++] = src2->elems[i2++]; ++dest->nelem; } } ++i1; } return REG_NOERROR; } /* Calculate the union set of the sets SRC1 and SRC2. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t re_node_set_init_union (dest, src1, src2) re_node_set *dest; const re_node_set *src1, *src2; { int i1, i2, id; if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) { dest->alloc = src1->nelem + src2->nelem; dest->elems = re_malloc (int, dest->alloc); if (BE (dest->elems == NULL, 0)) return REG_ESPACE; } else { if (src1 != NULL && src1->nelem > 0) return re_node_set_init_copy (dest, src1); else if (src2 != NULL && src2->nelem > 0) return re_node_set_init_copy (dest, src2); else re_node_set_init_empty (dest); return REG_NOERROR; } for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) { if (src1->elems[i1] > src2->elems[i2]) { dest->elems[id++] = src2->elems[i2++]; continue; } if (src1->elems[i1] == src2->elems[i2]) ++i2; dest->elems[id++] = src1->elems[i1++]; } if (i1 < src1->nelem) { memcpy (dest->elems + id, src1->elems + i1, (src1->nelem - i1) * sizeof (int)); id += src1->nelem - i1; } else if (i2 < src2->nelem) { memcpy (dest->elems + id, src2->elems + i2, (src2->nelem - i2) * sizeof (int)); id += src2->nelem - i2; } dest->nelem = id; return REG_NOERROR; } /* Calculate the union set of the sets DEST and SRC. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t re_node_set_merge (dest, src) re_node_set *dest; const re_node_set *src; { int si, di; if (src == NULL || src->nelem == 0) return REG_NOERROR; if (dest->alloc < src->nelem + dest->nelem) { dest->alloc = 2 * (src->nelem + dest->alloc); dest->elems = re_realloc (dest->elems, int, dest->alloc); if (BE (dest->elems == NULL, 0)) return REG_ESPACE; } for (si = 0, di = 0 ; si < src->nelem && di < dest->nelem ;) { int cp_from, ncp, mid, right, src_elem = src->elems[si]; /* Binary search the spot we will add the new element. */ right = dest->nelem; while (di < right) { mid = (di + right) / 2; if (dest->elems[mid] < src_elem) di = mid + 1; else right = mid; } if (di >= dest->nelem) break; if (dest->elems[di] == src_elem) { /* Skip since, DEST already has the element. */ ++di; ++si; continue; } /* Skip the src elements which are less than dest->elems[di]. */ cp_from = si; while (si < src->nelem && src->elems[si] < dest->elems[di]) ++si; /* Copy these src elements. */ ncp = si - cp_from; memmove (dest->elems + di + ncp, dest->elems + di, sizeof (int) * (dest->nelem - di)); memcpy (dest->elems + di, src->elems + cp_from, sizeof (int) * ncp); /* Update counters. */ di += ncp; dest->nelem += ncp; } /* Copy remaining src elements. */ if (si < src->nelem) { memcpy (dest->elems + di, src->elems + si, sizeof (int) * (src->nelem - si)); dest->nelem += src->nelem - si; } return REG_NOERROR; } /* Insert the new element ELEM to the re_node_set* SET. return 0 if SET already has ELEM, return -1 if an error is occured, return 1 otherwise. */ static int re_node_set_insert (set, elem) re_node_set *set; int elem; { int idx, right, mid; /* In case of the set is empty. */ if (set->elems == NULL || set->alloc == 0) { if (BE (re_node_set_init_1 (set, elem) == REG_NOERROR, 1)) return 1; else return -1; } /* Binary search the spot we will add the new element. */ idx = 0; right = set->nelem; while (idx < right) { mid = (idx + right) / 2; if (set->elems[mid] < elem) idx = mid + 1; else right = mid; } /* Realloc if we need. */ if (set->alloc < set->nelem + 1) { int *new_array; set->alloc = set->alloc * 2; new_array = re_malloc (int, set->alloc); if (BE (new_array == NULL, 0)) return -1; /* Copy the elements they are followed by the new element. */ if (idx > 0) memcpy (new_array, set->elems, sizeof (int) * (idx)); /* Copy the elements which follows the new element. */ if (set->nelem - idx > 0) memcpy (new_array + idx + 1, set->elems + idx, sizeof (int) * (set->nelem - idx)); re_free (set->elems); set->elems = new_array; } else { /* Move the elements which follows the new element. */ if (set->nelem - idx > 0) memmove (set->elems + idx + 1, set->elems + idx, sizeof (int) * (set->nelem - idx)); } /* Insert the new element. */ set->elems[idx] = elem; ++set->nelem; return 1; } /* Compare two node sets SET1 and SET2. return 1 if SET1 and SET2 are equivalent, retrun 0 otherwise. */ static int re_node_set_compare (set1, set2) const re_node_set *set1, *set2; { int i; if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) return 0; for (i = 0 ; i < set1->nelem ; i++) if (set1->elems[i] != set2->elems[i]) return 0; return 1; } /* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ static int re_node_set_contains (set, elem) const re_node_set *set; int elem; { int idx, right, mid; if (set->nelem <= 0) return 0; /* Binary search the element. */ idx = 0; right = set->nelem - 1; while (idx < right) { mid = (idx + right) / 2; if (set->elems[mid] < elem) idx = mid + 1; else right = mid; } return set->elems[idx] == elem ? idx + 1 : 0; } static void re_node_set_remove_at (set, idx) re_node_set *set; int idx; { if (idx < 0 || idx >= set->nelem) return; if (idx < set->nelem - 1) memmove (set->elems + idx, set->elems + idx + 1, sizeof (int) * (set->nelem - idx - 1)); --set->nelem; } /* Add the token TOKEN to dfa->nodes, and return the index of the token. Or return -1, if an error will be occured. */ static int re_dfa_add_node (dfa, token, mode) re_dfa_t *dfa; re_token_t token; int mode; { if (dfa->nodes_len >= dfa->nodes_alloc) { re_token_t *new_array; dfa->nodes_alloc *= 2; new_array = re_realloc (dfa->nodes, re_token_t, dfa->nodes_alloc); if (BE (new_array == NULL, 0)) return -1; else dfa->nodes = new_array; if (mode) { int *new_firsts, *new_nexts; re_node_set *new_edests, *new_eclosures, *new_inveclosures; new_firsts = re_realloc (dfa->firsts, int, dfa->nodes_alloc); new_nexts = re_realloc (dfa->nexts, int, dfa->nodes_alloc); new_edests = re_realloc (dfa->edests, re_node_set, dfa->nodes_alloc); new_eclosures = re_realloc (dfa->eclosures, re_node_set, dfa->nodes_alloc); new_inveclosures = re_realloc (dfa->inveclosures, re_node_set, dfa->nodes_alloc); if (BE (new_firsts == NULL || new_nexts == NULL || new_edests == NULL || new_eclosures == NULL || new_inveclosures == NULL, 0)) return -1; dfa->firsts = new_firsts; dfa->nexts = new_nexts; dfa->edests = new_edests; dfa->eclosures = new_eclosures; dfa->inveclosures = new_inveclosures; } } dfa->nodes[dfa->nodes_len] = token; dfa->nodes[dfa->nodes_len].duplicated = 0; return dfa->nodes_len++; } static unsigned int inline calc_state_hash (nodes, context) const re_node_set *nodes; unsigned int context; { unsigned int hash = nodes->nelem + context; int i; for (i = 0 ; i < nodes->nelem ; i++) hash += nodes->elems[i]; return hash; } /* Search for the state whose node_set is equivalent to NODES. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t* re_acquire_state (err, dfa, nodes) reg_errcode_t *err; re_dfa_t *dfa; const re_node_set *nodes; { unsigned int hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; int i; if (BE (nodes->nelem == 0, 0)) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, 0); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (hash != state->hash) continue; if (re_node_set_compare (&state->nodes, nodes)) return state; } /* There are no appropriate state in the dfa, create the new one. */ new_state = create_ci_newstate (dfa, nodes, hash); if (BE (new_state != NULL, 1)) return new_state; else { *err = REG_ESPACE; return NULL; } } /* Search for the state whose node_set is equivalent to NODES and whose context is equivalent to CONTEXT. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t* re_acquire_state_context (err, dfa, nodes, context) reg_errcode_t *err; re_dfa_t *dfa; const re_node_set *nodes; unsigned int context; { unsigned int hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; int i; if (nodes->nelem == 0) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, context); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (hash != state->hash) continue; if (re_node_set_compare (state->entrance_nodes, nodes) && state->context == context) return state; } /* There are no appropriate state in `dfa', create the new one. */ new_state = create_cd_newstate (dfa, nodes, context, hash); if (BE (new_state != NULL, 1)) return new_state; else { *err = REG_ESPACE; return NULL; } } /* Allocate memory for DFA state and initialize common properties. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * create_newstate_common (dfa, nodes, hash) re_dfa_t *dfa; const re_node_set *nodes; unsigned int hash; { re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (BE (newstate == NULL, 0)) return NULL; re_node_set_init_copy (&newstate->nodes, nodes); newstate->trtable = NULL; newstate->trtable_search = NULL; newstate->hash = hash; return newstate; } /* Store the new state NEWSTATE whose hash value is HASH in appropriate position. Return value indicate the error code if failed. */ static reg_errcode_t register_state (dfa, newstate, hash) re_dfa_t *dfa; re_dfastate_t *newstate; unsigned int hash; { struct re_state_table_entry *spot; spot = dfa->state_table + (hash & dfa->state_hash_mask); if (spot->alloc <= spot->num) { spot->alloc = 2 * spot->num + 2; spot->array = re_realloc (spot->array, re_dfastate_t *, spot->alloc); if (BE (spot->array == NULL, 0)) return REG_ESPACE; } spot->array[spot->num++] = newstate; return REG_NOERROR; } /* Create the new state which is independ of contexts. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * create_ci_newstate (dfa, nodes, hash) re_dfa_t *dfa; const re_node_set *nodes; unsigned int hash; { int i; reg_errcode_t err; re_dfastate_t *newstate; newstate = create_newstate_common (dfa, nodes, hash); if (BE (newstate == NULL, 0)) return NULL; newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; if (type == CHARACTER) continue; /* If the state has the halt node, the state is a halt state. */ else if (type == END_OF_RE) newstate->halt = 1; #ifdef RE_ENABLE_I18N else if (type == COMPLEX_BRACKET || (type == OP_PERIOD && MB_CUR_MAX > 1)) newstate->accept_mb = 1; #endif /* RE_ENABLE_I18N */ else if (type == OP_BACK_REF) newstate->has_backref = 1; else if (type == ANCHOR || OP_CONTEXT_NODE) { newstate->has_constraint = 1; if (type == OP_CONTEXT_NODE && dfa->nodes[node->opr.ctx_info->entity].type == END_OF_RE) newstate->halt = 1; } } err = register_state (dfa, newstate, hash); return (err != REG_NOERROR) ? NULL : newstate; } /* Create the new state which is depend on the context CONTEXT. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * create_cd_newstate (dfa, nodes, context, hash) re_dfa_t *dfa; const re_node_set *nodes; unsigned int context, hash; { int i, nctx_nodes = 0; reg_errcode_t err; re_dfastate_t *newstate; newstate = create_newstate_common (dfa, nodes, hash); if (BE (newstate == NULL, 0)) return NULL; newstate->context = context; newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { unsigned int constraint = 0; re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; if (type == CHARACTER) continue; /* If the state has the halt node, the state is a halt state. */ else if (type == END_OF_RE) newstate->halt = 1; #ifdef RE_ENABLE_I18N else if (type == COMPLEX_BRACKET || (type == OP_PERIOD && MB_CUR_MAX > 1)) newstate->accept_mb = 1; #endif /* RE_ENABLE_I18N */ else if (type == OP_BACK_REF) newstate->has_backref = 1; else if (type == ANCHOR) constraint = node->opr.ctx_type; else if (type == OP_CONTEXT_NODE) { re_token_type_t ctype = dfa->nodes[node->opr.ctx_info->entity].type; constraint = node->constraint; if (ctype == END_OF_RE) newstate->halt = 1; else if (ctype == OP_BACK_REF) newstate->has_backref = 1; #ifdef RE_ENABLE_I18N else if (ctype == COMPLEX_BRACKET || (type == OP_PERIOD && MB_CUR_MAX > 1)) newstate->accept_mb = 1; #endif /* RE_ENABLE_I18N */ } if (constraint) { if (newstate->entrance_nodes == &newstate->nodes) { newstate->entrance_nodes = re_malloc (re_node_set, 1); if (BE (newstate->entrance_nodes == NULL, 0)) return NULL; re_node_set_init_copy (newstate->entrance_nodes, nodes); nctx_nodes = 0; newstate->has_constraint = 1; } if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) { re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); ++nctx_nodes; } } } err = register_state (dfa, newstate, hash); return (err != REG_NOERROR) ? NULL : newstate; } gnupg-1.4.20/util/secmem.c0000644000175000017500000003035212635262326012243 00000000000000/* secmem.c - memory allocation from a secure heap * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, * 2007 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 3 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, see . */ #include #include #include #include #include #include #include #if defined(HAVE_MLOCK) || defined(HAVE_MMAP) #include #include #include #ifdef USE_CAPABILITIES #include #endif #ifdef HAVE_PLOCK #include #endif #endif #include "types.h" #include "memory.h" #include "util.h" #include "i18n.h" /* MinGW doesn't seem to prototype getpagesize, though it does have it. */ #if !HAVE_DECL_GETPAGESIZE int getpagesize(void); #endif #if defined(MAP_ANON) && !defined(MAP_ANONYMOUS) #define MAP_ANONYMOUS MAP_ANON #endif /* It seems that Slackware 7.1 does not know about EPERM */ #if !defined(EPERM) && defined(ENOMEM) #define EPERM ENOMEM #endif #define DEFAULT_POOLSIZE 16384 typedef struct memblock_struct MEMBLOCK; struct memblock_struct { unsigned size; union { MEMBLOCK *next; PROPERLY_ALIGNED_TYPE aligned; } u; }; static void *pool; static volatile int pool_okay; /* may be checked in an atexit function */ #ifdef HAVE_MMAP static volatile int pool_is_mmapped; #endif static size_t poolsize; /* allocated length */ static size_t poollen; /* used length */ static MEMBLOCK *unused_blocks; static unsigned max_alloced; static unsigned cur_alloced; static unsigned max_blocks; static unsigned cur_blocks; static int disable_secmem; static int show_warning; static int no_warning; static int suspend_warning; static void print_warn(void) { if (!no_warning) { log_info(_("WARNING: using insecure memory!\n")); log_info(_("please see http://www.gnupg.org/documentation/faqs.html" " for more information\n")); } } static void lock_pool( void *p, size_t n ) { #if defined(USE_CAPABILITIES) && defined(HAVE_MLOCK) int err; cap_set_proc( cap_from_text("cap_ipc_lock+ep") ); err = mlock( p, n ); if( err && errno ) err = errno; cap_set_proc( cap_from_text("cap_ipc_lock+p") ); if( err ) { if( errno != EPERM #ifdef EAGAIN /* OpenBSD returns this */ && errno != EAGAIN #endif #ifdef ENOSYS /* Some SCOs return this (function not implemented) */ && errno != ENOSYS #endif #ifdef ENOMEM /* Linux can return this */ && errno != ENOMEM #endif ) log_error("can't lock memory: %s\n", strerror(err)); show_warning = 1; } #elif defined(HAVE_MLOCK) uid_t uid; int err; uid = getuid(); #ifdef HAVE_BROKEN_MLOCK /* ick. but at least we get secured memory. about to lock entire data segment. */ #ifdef HAVE_PLOCK # ifdef _AIX /* The configure for AIX returns broken mlock but the plock has the strange requirement to somehow set the stack limit first. The problem might turn out in indeterministic program behaviour and hanging processes which can somehow be solved when enough processes are clogging up the memory. To get this problem out of the way we simply don't try to lock the memory at all. */ errno = EPERM; err = errno; # else /* !_AIX */ err = plock( DATLOCK ); if( err && errno ) err = errno; # endif /*_AIX*/ #else /*!HAVE_PLOCK*/ if( uid ) { errno = EPERM; err = errno; } else { err = mlock( p, n ); if( err && errno ) err = errno; } #endif /*!HAVE_PLOCK*/ #else err = mlock( p, n ); if( err && errno ) err = errno; #endif if( uid && !geteuid() ) { /* check that we really dropped the privs. * Note: setuid(0) should always fail */ if( setuid( uid ) || getuid() != geteuid() || !setuid(0) ) log_fatal("failed to reset uid: %s\n", strerror(errno)); } if( err ) { if( errno != EPERM #ifdef EAGAIN /* OpenBSD returns this */ && errno != EAGAIN #endif #ifdef ENOSYS /* Some SCOs return this (function not implemented) */ && errno != ENOSYS #endif #ifdef ENOMEM /* Linux can return this */ && errno != ENOMEM #endif ) #ifdef __VMS log_warning ("can't lock memory: %s\n", strerror(err)); #else log_error ("can't lock memory: %s\n", strerror(err)); #endif show_warning = 1; } #elif defined ( __QNX__ ) /* QNX does not page at all, so the whole secure memory stuff does * not make much sense. However it is still of use because it * wipes out the memory on a free(). * Therefore it is sufficient to suppress the warning */ #elif defined (HAVE_DOSISH_SYSTEM) || defined (__CYGWIN__) /* It does not make sense to print such a warning, given the fact that * this whole Windows !@#$% and their user base are inherently insecure */ #elif defined (__riscos__) /* no virtual memory on RISC OS, so no pages are swapped to disc, * besides we don't have mmap, so we don't use it! ;-) * But don't complain, as explained above. */ #else log_info("Please note that you don't have secure memory on this system\n"); #endif } static void init_pool( size_t n) { long int pgsize_val; size_t pgsize; poolsize = n; if( disable_secmem ) log_bug("secure memory is disabled"); #if defined(HAVE_SYSCONF) && defined(_SC_PAGESIZE) pgsize_val = sysconf (_SC_PAGESIZE); #elif defined(HAVE_GETPAGESIZE) pgsize_val = getpagesize (); #else pgsize_val = -1; #endif pgsize = (pgsize_val != -1 && pgsize_val > 0)? pgsize_val : 4096; #ifdef HAVE_MMAP poolsize = (poolsize + pgsize -1 ) & ~(pgsize-1); #ifdef MAP_ANONYMOUS pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); #else /* map /dev/zero instead */ { int fd; fd = open("/dev/zero", O_RDWR); if( fd == -1 ) { log_error("can't open /dev/zero: %s\n", strerror(errno) ); pool = (void*)-1; } else { pool = mmap( 0, poolsize, PROT_READ|PROT_WRITE, MAP_PRIVATE, fd, 0); close (fd); } } #endif if( pool == (void*)-1 ) log_info("can't mmap pool of %u bytes: %s - using malloc\n", (unsigned)poolsize, strerror(errno)); else { pool_is_mmapped = 1; pool_okay = 1; } #endif if( !pool_okay ) { pool = malloc( poolsize ); if( !pool ) log_fatal("can't allocate memory pool of %u bytes\n", (unsigned)poolsize); else pool_okay = 1; } lock_pool( pool, poolsize ); poollen = 0; } /* concatenate unused blocks */ static void compress_pool(void) { /* fixme: we really should do this */ } void secmem_set_flags( unsigned flags ) { int was_susp = suspend_warning; no_warning = flags & 1; suspend_warning = flags & 2; /* and now issue the warning if it is not longer suspended */ if( was_susp && !suspend_warning && show_warning ) { show_warning = 0; print_warn(); } } unsigned secmem_get_flags(void) { unsigned flags; flags = no_warning ? 1:0; flags |= suspend_warning ? 2:0; return flags; } /* Returns 1 if memory was locked, 0 if not. */ int secmem_init( size_t n ) { if( !n ) { #ifndef __riscos__ #ifdef USE_CAPABILITIES /* drop all capabilities */ cap_set_proc( cap_from_text("all-eip") ); #elif !defined(HAVE_DOSISH_SYSTEM) uid_t uid; disable_secmem=1; uid = getuid(); if( uid != geteuid() ) { if( setuid( uid ) || getuid() != geteuid() || !setuid(0) ) log_fatal("failed to drop setuid\n" ); } #endif #endif /* !__riscos__ */ } else { if( n < DEFAULT_POOLSIZE ) n = DEFAULT_POOLSIZE; if( !pool_okay ) init_pool(n); else log_error("Oops, secure memory pool already initialized\n"); } return !show_warning; } void * secmem_malloc( size_t size ) { MEMBLOCK *mb, *mb2; int compressed=0; if( !pool_okay ) { log_info( _("operation is not possible without initialized secure memory\n")); log_info(_("(you may have used the wrong program for this task)\n")); exit(2); } if( show_warning && !suspend_warning ) { show_warning = 0; print_warn(); } /* Blocks are always a multiple of 32. Note that we allocate an extra of the size of an entire MEMBLOCK. This is required becuase we do not only need the SIZE info but also extra space to chain up unused memory blocks. */ size += sizeof(MEMBLOCK); size = ((size + 31) / 32) * 32; retry: /* try to get it from the used blocks */ for(mb = unused_blocks,mb2=NULL; mb; mb2=mb, mb = mb->u.next ) if( mb->size >= size ) { if( mb2 ) mb2->u.next = mb->u.next; else unused_blocks = mb->u.next; goto leave; } /* allocate a new block */ if( (poollen + size <= poolsize) ) { mb = (void*)((char*)pool + poollen); poollen += size; mb->size = size; } else if( !compressed ) { compressed=1; compress_pool(); goto retry; } else return NULL; leave: cur_alloced += mb->size; cur_blocks++; if( cur_alloced > max_alloced ) max_alloced = cur_alloced; if( cur_blocks > max_blocks ) max_blocks = cur_blocks; return &mb->u.aligned.c; } void * secmexrealloc( void *p, size_t newsize ) { MEMBLOCK *mb; size_t size; void *a; mb = (MEMBLOCK*)((char*)p - ((size_t) &((MEMBLOCK*)0)->u.aligned.c)); size = mb->size; if (size < sizeof(MEMBLOCK)) log_bug ("secure memory corrupted at block %p\n", (void *)mb); size -= ((size_t) &((MEMBLOCK*)0)->u.aligned.c); if( newsize <= size ) return p; /* It is easier not to shrink the memory. */ a = secmem_malloc( newsize ); if ( a ) { memcpy(a, p, size); memset((char*)a+size, 0, newsize-size); secmem_free(p); } return a; } void secmem_free( void *a ) { MEMBLOCK *mb; size_t size; if( !a ) return; mb = (MEMBLOCK*)((char*)a - ((size_t) &((MEMBLOCK*)0)->u.aligned.c)); size = mb->size; /* This does not make much sense: probably this memory is held in the * cache. We do it anyway: */ wipememory2(mb, 0xff, size ); wipememory2(mb, 0xaa, size ); wipememory2(mb, 0x55, size ); wipememory2(mb, 0x00, size ); mb->size = size; mb->u.next = unused_blocks; unused_blocks = mb; cur_blocks--; cur_alloced -= size; } /* Check whether P points into the pool. */ static int ptr_into_pool_p (const void *p) { /* We need to convert pointers to addresses. This is required by C-99 6.5.8 to avoid undefined behaviour. Using size_t is at least only implementation defined. See also http://lists.gnupg.org/pipermail/gcrypt-devel/2007-February/001102.html */ size_t p_addr = (size_t)p; size_t pool_addr = (size_t)pool; return p_addr >= pool_addr && p_addr < pool_addr+poolsize; } int m_is_secure( const void *p ) { return pool_okay && ptr_into_pool_p (p); } /**************** * Warning: This code might be called by an interrupt handler * and frankly, there should really be such a handler, * to make sure that the memory is wiped out. * We hope that the OS wipes out mlocked memory after * receiving a SIGKILL - it really should do so, otherwise * there is no chance to get the secure memory cleaned. */ void secmem_term() { if( !pool_okay ) return; wipememory2( pool, 0xff, poolsize); wipememory2( pool, 0xaa, poolsize); wipememory2( pool, 0x55, poolsize); wipememory2( pool, 0x00, poolsize); #ifdef HAVE_MMAP if( pool_is_mmapped ) munmap( pool, poolsize ); #endif pool = NULL; pool_okay = 0; poolsize=0; poollen=0; unused_blocks=NULL; } void secmem_dump_stats() { if( disable_secmem ) return; fprintf(stderr, "secmem usage: %u/%u bytes in %u/%u blocks of pool %lu/%lu\n", cur_alloced, max_alloced, cur_blocks, max_blocks, (ulong)poollen, (ulong)poolsize ); } gnupg-1.4.20/util/cert.c0000644000175000017500000001224612635262326011731 00000000000000/* cert.c - DNS CERT code * Copyright (C) 2005, 2006, 2007 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 3 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, see . */ #include #include #ifdef USE_DNS_CERT #ifdef _WIN32 #include #else #include #include #include #include #endif #include #include "memory.h" #endif #include "iobuf.h" #include "util.h" /* Not every installation has gotten around to supporting CERTs yet... */ #ifndef T_CERT # define T_CERT 37 # ifdef __VMS # include "cert_vms.h" # endif /* def __VMS */ #endif #ifdef USE_DNS_CERT /* Returns -1 on error, 0 for no answer, 1 for PGP provided and 2 for IPGP provided. */ int get_cert (const char *name, int want_ipgp, size_t max_size,IOBUF *iobuf, unsigned char **fpr, size_t *fpr_len, char **url) { unsigned char *answer; int r,ret=-1; u16 count; if(fpr) *fpr=NULL; if(url) *url=NULL; answer=xmalloc(max_size); r=res_query(name,C_IN,T_CERT,answer,max_size); /* Not too big, not too small, no errors and at least 1 answer. */ if(r>=sizeof(HEADER) && r<=max_size && (((HEADER *)answer)->rcode)==NOERROR && (count=ntohs(((HEADER *)answer)->ancount))) { int rc; unsigned char *pt,*emsg; emsg=&answer[r]; pt=&answer[sizeof(HEADER)]; /* Skip over the query */ rc=dn_skipname(pt,emsg); if(rc==-1) goto fail; pt+=rc+QFIXEDSZ; /* There are several possible response types for a CERT request. We're interested in the PGP (a key) and IPGP (a URI) types. Skip all others. TODO: A key is better than a URI since we've gone through all this bother to fetch it, so favor that if we have both PGP and IPGP? */ while(count-->0 && pt=pt[0]+1 && fpr && fpr_len && url) { /* IPGP type */ *fpr_len=pt[0]; if(*fpr_len) { *fpr=xmalloc(*fpr_len); memcpy(*fpr,&pt[1],*fpr_len); } else *fpr=NULL; if(dlen>*fpr_len+1) { *url=xmalloc(dlen-(*fpr_len+1)+1); memcpy(*url,&pt[*fpr_len+1],dlen-(*fpr_len+1)); (*url)[dlen-(*fpr_len+1)]='\0'; } else *url=NULL; ret=2; break; } /* Neither type matches, so go around to the next answer. */ pt+=dlen; } } fail: xfree(answer); return ret; } #else /* !USE_DNS_CERT */ int get_cert (const char *name, int want_ipgp, size_t max_size,IOBUF *iobuf, unsigned char **fpr, size_t *fpr_len, char **url) { return -1; } #endif /* Test with simon.josefsson.org */ #ifdef TEST int main(int argc,char *argv[]) { unsigned char *fpr; size_t fpr_len; char *url; int rc; IOBUF iobuf; if(argc!=2) { printf("cert-test [name]\n"); return 1; } printf("CERT lookup on %s\n",argv[1]); rc=get_cert (argv[1], 0, 16384, &iobuf, &fpr, &fpr_len, &url); if(rc==-1) printf("error\n"); else if(rc==0) printf("no answer\n"); else if(rc==1) { printf("key found: %d bytes\n",(int)iobuf_get_temp_length(iobuf)); iobuf_close(iobuf); } else if(rc==2) { if(fpr) { size_t i; printf("Fingerprint found (%d bytes): ",(int)fpr_len); for(i=0;i. ## Process this file with automake to produce Makefile.in AM_CPPFLAGS= -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl noinst_LIBRARIES = libutil.a libcompat.a libutil_a_SOURCES = logger.c fileutil.c miscutil.c strgutil.c \ ttyio.c argparse.c memory.c secmem.c errors.c iobuf.c \ dotlock.c http.c pka.c membuf.c cert.c convert.c \ estream-printf.c \ $(libcompat_a_SOURCES) if USE_SIMPLE_GETTEXT libutil_a_SOURCES+=simple-gettext.c endif if HAVE_W32_SYSTEM libutil_a_SOURCES+=w32reg.c endif if ENABLE_AGENT_SUPPORT libutil_a_SOURCES+=assuan-buffer.c assuan-client.c assuan-defs.h \ assuan-errors.c assuan-logging.c assuan-socket-connect.c \ assuan-connect.c assuan-socket.c assuan-util.c endif if USE_INTERNAL_REGEX libutil_a_SOURCES+=regex.c endif # The internal regex code #includes these. EXTRA_libutil_a_SOURCES = regcomp.c regexec.c regex_internal.c \ regex_internal.h # LIBOBJS and libcompat.a are for the replacement functions and # similar simple stuff. They're segregated in libcompat so we can # link it to the keyserver helpers which have different licensing. # libutil.a, by definition, includes everything that libcompat.a does. libutil_a_DEPENDENCIES = @LIBOBJS@ libutil_a_LIBADD = @LIBOBJS@ libcompat_a_SOURCES=compat.c libcompat_a_DEPENDENCIES = @LIBOBJS@ libcompat_a_LIBADD = @LIBOBJS@ if USE_DNS_SRV libcompat_a_SOURCES+=srv.c endif http-test: http.c $(CC) -DHAVE_CONFIG_H $(CFLAGS) -I. $(INCLUDES) $(LDFLAGS) -g -Wall \ -DTEST -o http-test http.c libutil.a @LIBINTL@ @DNSLIBS@ @CAPLIBS@ srv-test: srv.c $(CC) -DHAVE_CONFIG_H $(CFLAGS) -I. $(INCLUDES) $(LDFLAGS) -g -Wall \ -DTEST -o srv-test srv.c libutil.a @LIBINTL@ @DNSLIBS@ @CAPLIBS@ pka-test: pka.c $(CC) -DHAVE_CONFIG_H $(CFLAGS) -I. $(INCLUDES) $(LDFLAGS) -g -Wall \ -DTEST -o pka-test pka.c libutil.a @LIBINTL@ @DNSLIBS@ @CAPLIBS@ cert-test: cert.c $(CC) -DHAVE_CONFIG_H $(CFLAGS) -I. $(INCLUDES) $(LDFLAGS) -g -Wall \ -DTEST -o cert-test cert.c libutil.a @LIBINTL@ @DNSLIBS@ @CAPLIBS@ gnupg-1.4.20/util/argparse.c0000644000175000017500000007376512635262326012615 00000000000000/* [argparse.c wk 17.06.97] Argument Parser for option handling * Copyright (C) 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007, * 2008, 2010, 2012 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 3 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, see . */ #include #include #include #include #include #include "util.h" #include "i18n.h" /********************************* * @Summary arg_parse * #include * * typedef struct { * char *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; * const char *last; * void *aliases; * } internal; DO NOT CHANGE * } ARGPARSE_ARGS; * * typedef struct { * int short_opt; * const char *long_opt; * unsigned flags; * } ARGPARSE_OPTS; * * int arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts ); * * @Description * This is my replacement for getopt(). See the example for a typical usage. * Global flags are: * Bit 0 : Do not remove options form argv * Bit 1 : Do not stop at last option but return other args * with r_opt set to -1. * Bit 2 : Assume options and real args are mixed. * Bit 3 : Do not use -- to stop option processing. * Bit 4 : Do not skip the first arg. * Bit 5 : allow usage of long option with only one dash * Bit 6 : ignore --version and --help * all other bits must be set to zero, this value is modified by the * function, so assume this is write only. * Local flags (for each option): * Bit 2-0 : 0 = does not take an argument * 1 = takes int argument * 2 = takes string argument * 3 = takes long argument * 4 = takes ulong argument * Bit 3 : argument is optional (r_type will the be set to 0) * Bit 4 : allow 0x etc. prefixed values. * Bit 7 : this is a command and not an option * You stop the option processing by setting opts to NULL, the function will * then return 0. * @Return Value * Returns the args.r_opt or 0 if ready * r_opt may be -2/-7 to indicate an unknown option/command. * @See Also * ArgExpand * @Notes * You do not need to process the options 'h', '--help' or '--version' * because this function includes standard help processing; but if you * specify '-h', '--help' or '--version' you have to do it yourself. * The option '--' stops argument processing; if bit 1 is set the function * continues to return normal arguments. * To process float args or unsigned args you must use a string args and do * the conversion yourself. * @Example * * ARGPARSE_OPTS opts[] = { * { 'v', "verbose", 0 }, * { 'd', "debug", 0 }, * { 'o', "output", 2 }, * { 'c', "cross-ref", 2|8 }, * { 'm', "my-option", 1|8 }, * { 500, "have-no-short-option-for-this-long-option", 0 }, * {0} }; * ARGPARSE_ARGS pargs = { &argc, &argv, 0 } * * while( ArgParse( &pargs, &opts) ) { * switch( pargs.r_opt ) { * case 'v': opt.verbose++; break; * case 'd': opt.debug++; break; * case 'o': opt.outfile = pargs.r.ret_str; break; * case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break; * case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break; * case 500: opt.a_long_one++; break * default : pargs.err = 1; break; -- force warning output -- * } * } * if( argc > 1 ) * log_fatal( "Too many args"); * */ typedef struct alias_def_s *ALIAS_DEF; struct alias_def_s { ALIAS_DEF next; char *name; /* malloced buffer with name, \0, value */ const char *value; /* ptr into name */ }; /* Object to store the names for the --ignore-invalid-option option. This is a simple linked list. */ typedef struct iio_item_def_s *IIO_ITEM_DEF; struct iio_item_def_s { IIO_ITEM_DEF next; char name[1]; /* String with the long option name. */ }; static int set_opt_arg(ARGPARSE_ARGS *arg, unsigned flags, char *s); static void show_help(ARGPARSE_OPTS *opts, unsigned flags); static void show_version(void); static void initialize( ARGPARSE_ARGS *arg, const char *filename, unsigned *lineno ) { if( !(arg->flags & (1<<15)) ) { /* initialize this instance */ arg->internal.idx = 0; arg->internal.last = NULL; arg->internal.inarg = 0; arg->internal.stopped = 0; arg->internal.aliases = NULL; arg->internal.cur_alias = NULL; arg->internal.iio_list = NULL; arg->err = 0; arg->flags |= 1<<15; /* mark initialized */ if( *arg->argc < 0 ) log_bug("Invalid argument for ArgParse\n"); } if( arg->err ) { /* last option was erroneous */ if( filename ) { if( arg->r_opt == -6 ) log_error("%s:%u: argument not expected\n", filename, *lineno ); else if( arg->r_opt == -5 ) log_error("%s:%u: read error\n", filename, *lineno ); else if( arg->r_opt == -4 ) log_error("%s:%u: keyword too long\n", filename, *lineno ); else if( arg->r_opt == -3 ) log_error("%s:%u: missing argument\n", filename, *lineno ); else if( arg->r_opt == -7 ) log_error("%s:%u: invalid command\n", filename, *lineno ); else if( arg->r_opt == -10 ) log_error("%s:%u: invalid alias definition\n",filename,*lineno); else log_error("%s:%u: invalid option\n", filename, *lineno ); } else { if( arg->r_opt == -3 ) log_error("Missing argument for option \"%.50s\"\n", arg->internal.last? arg->internal.last:"[??]" ); else if( arg->r_opt == -6 ) log_error("Option \"%.50s\" does not expect an argument\n", arg->internal.last? arg->internal.last:"[??]" ); else if( arg->r_opt == -7 ) log_error("Invalid command \"%.50s\"\n", arg->internal.last? arg->internal.last:"[??]" ); else if( arg->r_opt == -8 ) log_error("Option \"%.50s\" is ambiguous\n", arg->internal.last? arg->internal.last:"[??]" ); else if( arg->r_opt == -9 ) log_error("Command \"%.50s\" is ambiguous\n", arg->internal.last? arg->internal.last:"[??]" ); else log_error("Invalid option \"%.50s\"\n", arg->internal.last? arg->internal.last:"[??]" ); } if( arg->err != 1 || arg->r_opt == -5 ) exit(2); arg->err = 0; } /* clearout the return value union */ arg->r.ret_str = NULL; arg->r.ret_long= 0; } static void store_alias( ARGPARSE_ARGS *arg, char *name, char *value ) { /* TODO: replace this dummy function with a rea one * and fix the probelms IRIX has with (ALIAS_DEV)arg.. * used as lvalue */ #if 0 ALIAS_DEF a = xmalloc( sizeof *a ); a->name = name; a->value = value; a->next = (ALIAS_DEF)arg->internal.aliases; (ALIAS_DEF)arg->internal.aliases = a; #endif } /* Return true if KEYWORD is in the ignore-invalid-option list. */ static int ignore_invalid_option_p (ARGPARSE_ARGS *arg, const char *keyword) { IIO_ITEM_DEF item = arg->internal.iio_list; for (; item; item = item->next) if (!strcmp (item->name, keyword)) return 1; return 0; } /* Add the keywords up to the next LF to the list of to be ignored options. After returning FP will either be at EOF or the next character read wll be the first of a new line. */ static void ignore_invalid_option_add (ARGPARSE_ARGS *arg, FILE *fp) { IIO_ITEM_DEF item; int c; char name[100]; int namelen = 0; int ready = 0; enum { skipWS, collectNAME, skipNAME, addNAME} state = skipWS; while (!ready) { c = getc (fp); if (c == '\n') ready = 1; else if (c == EOF) { c = '\n'; ready = 1; } again: switch (state) { case skipWS: if (!isascii (c) || !isspace(c)) { namelen = 0; state = collectNAME; goto again; } break; case collectNAME: if (isspace (c)) { state = addNAME; goto again; } else if (namelen < DIM(name)-1) name[namelen++] = c; else /* Too long. */ state = skipNAME; break; case skipNAME: if (isspace (c)) { state = skipWS; goto again; } break; case addNAME: name[namelen] = 0; if (!ignore_invalid_option_p (arg, name)) { item = xmalloc (sizeof *item + namelen); strcpy (item->name, name); item->next = (IIO_ITEM_DEF)arg->internal.iio_list; arg->internal.iio_list = item; } state = skipWS; goto again; } } } /* Clear the entire ignore-invalid-option list. */ static void ignore_invalid_option_clear (ARGPARSE_ARGS *arg) { IIO_ITEM_DEF item, tmpitem; for (item = arg->internal.iio_list; item; item = tmpitem) { tmpitem = item->next; xfree (item); } arg->internal.iio_list = NULL; } /**************** * Get options from a file. * Lines starting with '#' are comment lines. * Syntax is simply a keyword and the argument. * Valid keywords are all keywords from the long_opt list without * the leading dashes. The special keywords "help", "warranty" and "version" * are not valid here. * The special keyword "alias" may be used to store alias definitions, * which are later expanded like long options. * Caller must free returned strings. * If called with FP set to NULL command line args are parse instead. * * Q: Should we allow the syntax * keyword = value * and accept for boolean options a value of 1/0, yes/no or true/false? * Note: Abbreviation of options is here not allowed. */ int optfile_parse( FILE *fp, const char *filename, unsigned *lineno, ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts) { int state, i, c; int idx=0; char keyword[100]; char *buffer = NULL; size_t buflen = 0; int inverse=0; int in_alias=0; if( !fp ) /* same as arg_parse() in this case */ return arg_parse( arg, opts ); initialize( arg, filename, lineno ); /* find the next keyword */ state = i = 0; for(;;) { c=getc(fp); if( c == '\n' || c== EOF ) { if( c != EOF ) ++*lineno; if( state == -1 ) break; else if( state == 2 ) { keyword[i] = 0; for(i=0; opts[i].short_opt; i++ ) if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) ) break; idx = i; arg->r_opt = opts[idx].short_opt; if( inverse ) /* this does not have an effect, hmmm */ arg->r_opt = -arg->r_opt; if( !opts[idx].short_opt ) { /* unknown command/option */ if (!strcmp (keyword, "ignore-invalid-option")) { /* No argument - ignore this meta option. */ state = i = 0; continue; } else if (ignore_invalid_option_p (arg, keyword)) { /* This invalid option is in the iio list. */ state = i = 0; continue; } arg->r_opt = (opts[idx].flags & 256)? -7:-2; } else if( !(opts[idx].flags & 7) ) /* does not take an arg */ arg->r_type = 0; /* okay */ else if( (opts[idx].flags & 8) ) /* argument is optional */ arg->r_type = 0; /* okay */ else /* required argument */ arg->r_opt = -3; /* error */ break; } else if( state == 3 ) { /* no argument found */ if( in_alias ) arg->r_opt = -3; /* error */ else if( !(opts[idx].flags & 7) ) /* does not take an arg */ arg->r_type = 0; /* okay */ else if( (opts[idx].flags & 8) ) /* no optional argument */ arg->r_type = 0; /* okay */ else /* no required argument */ arg->r_opt = -3; /* error */ break; } else if( state == 4 ) { /* have an argument */ if( in_alias ) { if( !buffer ) arg->r_opt = -6; else { char *p; buffer[i] = 0; p = strpbrk( buffer, " \t" ); if( p ) { *p++ = 0; trim_spaces( p ); } if( !p || !*p ) { xfree( buffer ); arg->r_opt = -10; } else { store_alias( arg, buffer, p ); } } } else if( !(opts[idx].flags & 7) ) /* does not take an arg */ arg->r_opt = -6; /* error */ else { char *p; if( !buffer ) { keyword[i] = 0; buffer = xstrdup(keyword); } else buffer[i] = 0; trim_spaces( buffer ); p = buffer; /* remove quotes if they totally enclose the string, and do not occur within the string */ if( *p == '"' && p[strlen(p)-1]=='"') { char *p2=p; while(*(++p2)) if(*p2=='"') break; if(*p2=='"' && *(p2+1)=='\0') { p[strlen(p)-1] = 0; p++; } } if( !set_opt_arg(arg, opts[idx].flags, p) ) xfree(buffer); } break; } else if( c == EOF ) { ignore_invalid_option_clear (arg); if( ferror(fp) ) arg->r_opt = -5; /* read error */ else arg->r_opt = 0; /* eof */ break; } state = 0; i = 0; } else if( state == -1 ) ; /* skip */ else if( !state && isspace(c) ) ; /* skip leading white space */ else if( !state && c == '#' ) state = 1; /* start of a comment */ else if( state == 1 ) ; /* skip comments */ else if( state == 2 && isspace(c) ) { keyword[i] = 0; for(i=0; opts[i].short_opt; i++ ) if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) ) break; idx = i; arg->r_opt = opts[idx].short_opt; if( !opts[idx].short_opt ) { if( !strcmp( keyword, "alias" ) ) { in_alias = 1; state = 3; } else if (!strcmp (keyword, "ignore-invalid-option")) { ignore_invalid_option_add (arg, fp); state = i = 0; ++*lineno; } else if (ignore_invalid_option_p (arg, keyword)) state = 1; /* Process like a comment. */ else { arg->r_opt = (opts[idx].flags & 256)? -7:-2; state = -1; /* skip rest of line and leave */ } } else state = 3; } else if( state == 3 ) { /* skip leading spaces of the argument */ if( !isspace(c) ) { i = 0; keyword[i++] = c; state = 4; } } else if( state == 4 ) { /* collect the argument */ if( buffer ) { if( i < buflen-1 ) buffer[i++] = c; else { buflen += 50; buffer = xrealloc(buffer, buflen); buffer[i++] = c; } } else if( i < DIM(keyword)-1 ) keyword[i++] = c; else { buflen = DIM(keyword)+50; buffer = xmalloc(buflen); memcpy(buffer, keyword, i); buffer[i++] = c; } } else if( i >= DIM(keyword)-1 ) { arg->r_opt = -4; /* keyword to long */ state = -1; /* skip rest of line and leave */ } else { keyword[i++] = c; state = 2; } } return arg->r_opt; } static int find_long_option( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts, const char *keyword ) { int i; size_t n; /* Would be better if we can do a binary search, but it is not possible to reorder our option table because we would mess up our help strings - What we can do is: Build a nice option lookup table wehn this function is first invoked */ if( !*keyword ) return -1; for(i=0; opts[i].short_opt; i++ ) if( opts[i].long_opt && !strcmp( opts[i].long_opt, keyword) ) return i; #if 0 { ALIAS_DEF a; /* see whether it is an alias */ for( a = args->internal.aliases; a; a = a->next ) { if( !strcmp( a->name, keyword) ) { /* todo: must parse the alias here */ args->internal.cur_alias = a; return -3; /* alias available */ } } } #endif /* not found, see whether it is an abbreviation */ /* aliases may not be abbreviated */ n = strlen( keyword ); for(i=0; opts[i].short_opt; i++ ) { if( opts[i].long_opt && !strncmp( opts[i].long_opt, keyword, n ) ) { int j; for(j=i+1; opts[j].short_opt; j++ ) { if( opts[j].long_opt && !strncmp( opts[j].long_opt, keyword, n ) ) return -2; /* abbreviation is ambiguous */ } return i; } } return -1; } int arg_parse( ARGPARSE_ARGS *arg, ARGPARSE_OPTS *opts) { int idx; int argc; char **argv; char *s, *s2; int i; initialize( arg, NULL, NULL ); argc = *arg->argc; argv = *arg->argv; idx = arg->internal.idx; if( !idx && argc && !(arg->flags & (1<<4)) ) { /* skip the first entry */ argc--; argv++; idx++; } next_one: if( !argc ) { /* no more args */ arg->r_opt = 0; goto leave; /* ready */ } s = *argv; arg->internal.last = s; if( arg->internal.stopped && (arg->flags & (1<<1)) ) { arg->r_opt = -1; /* not an option but a argument */ arg->r_type = 2; arg->r.ret_str = s; argc--; argv++; idx++; /* set to next one */ } else if( arg->internal.stopped ) { /* ready */ arg->r_opt = 0; goto leave; } else if( *s == '-' && s[1] == '-' ) { /* long option */ char *argpos; arg->internal.inarg = 0; if( !s[2] && !(arg->flags & (1<<3)) ) { /* stop option processing */ arg->internal.stopped = 1; argc--; argv++; idx++; goto next_one; } argpos = strchr( s+2, '=' ); if( argpos ) *argpos = 0; i = find_long_option( arg, opts, s+2 ); if( argpos ) *argpos = '='; if( i < 0 && !strcmp( "help", s+2) ) { if( !(arg->flags & (1<<6)) ) { show_help(opts, arg->flags); } } else if( i < 0 && !strcmp( "version", s+2) ) { if( !(arg->flags & (1<<6)) ) { show_version(); exit(0); } } else if( i < 0 && !strcmp( "warranty", s+2) ) { puts( strusage(16) ); exit(0); } else if( i < 0 && !strcmp( "dump-options", s+2) ) { for(i=0; opts[i].short_opt; i++ ) { if( opts[i].long_opt ) printf( "--%s\n", opts[i].long_opt ); } fputs("--dump-options\n--help\n--version\n--warranty\n", stdout ); exit(0); } if( i == -2 ) /* ambiguous option */ arg->r_opt = -8; else if( i == -1 ) { arg->r_opt = -2; arg->r.ret_str = s+2; } else arg->r_opt = opts[i].short_opt; if( i < 0 ) ; else if( (opts[i].flags & 7) ) { if( argpos ) { s2 = argpos+1; if( !*s2 ) s2 = NULL; } else s2 = argv[1]; if( !s2 && (opts[i].flags & 8) ) { /* no argument but it is okay*/ arg->r_type = 0; /* because it is optional */ } else if( !s2 ) { arg->r_opt = -3; /* missing argument */ } else if( !argpos && *s2 == '-' && (opts[i].flags & 8) ) { /* the argument is optional and the next seems to be * an option. We do not check this possible option * but assume no argument */ arg->r_type = 0; } else { set_opt_arg(arg, opts[i].flags, s2); if( !argpos ) { argc--; argv++; idx++; /* skip one */ } } } else { /* does not take an argument */ if( argpos ) arg->r_type = -6; /* argument not expected */ else arg->r_type = 0; } argc--; argv++; idx++; /* set to next one */ } else if( (*s == '-' && s[1]) || arg->internal.inarg ) { /* short option */ int dash_kludge = 0; i = 0; if( !arg->internal.inarg ) { arg->internal.inarg++; if( arg->flags & (1<<5) ) { for(i=0; opts[i].short_opt; i++ ) if( opts[i].long_opt && !strcmp( opts[i].long_opt, s+1)) { dash_kludge=1; break; } } } s += arg->internal.inarg; if( !dash_kludge ) { for(i=0; opts[i].short_opt; i++ ) if( opts[i].short_opt == *s ) break; } if( !opts[i].short_opt && ( *s == 'h' || *s == '?' ) ) { if( !(arg->flags & (1<<6)) ) { show_help(opts, arg->flags); } } arg->r_opt = opts[i].short_opt; if( !opts[i].short_opt ) { arg->r_opt = (opts[i].flags & 256)? -7:-2; arg->internal.inarg++; /* point to the next arg */ arg->r.ret_str = s; } else if( (opts[i].flags & 7) ) { if( s[1] && !dash_kludge ) { s2 = s+1; set_opt_arg(arg, opts[i].flags, s2); } else { s2 = argv[1]; if( !s2 && (opts[i].flags & 8) ) { /* no argument but it is okay*/ arg->r_type = 0; /* because it is optional */ } else if( !s2 ) { arg->r_opt = -3; /* missing argument */ } else if( *s2 == '-' && s2[1] && (opts[i].flags & 8) ) { /* the argument is optional and the next seems to be * an option. We do not check this possible option * but assume no argument */ arg->r_type = 0; } else { set_opt_arg(arg, opts[i].flags, s2); argc--; argv++; idx++; /* skip one */ } } s = "x"; /* so that !s[1] yields false */ } else { /* does not take an argument */ arg->r_type = 0; arg->internal.inarg++; /* point to the next arg */ } if( !s[1] || dash_kludge ) { /* no more concatenated short options */ arg->internal.inarg = 0; argc--; argv++; idx++; } } else if( arg->flags & (1<<2) ) { arg->r_opt = -1; /* not an option but a argument */ arg->r_type = 2; arg->r.ret_str = s; argc--; argv++; idx++; /* set to next one */ } else { arg->internal.stopped = 1; /* stop option processing */ goto next_one; } leave: *arg->argc = argc; *arg->argv = argv; arg->internal.idx = idx; return arg->r_opt; } static int set_opt_arg(ARGPARSE_ARGS *arg, unsigned flags, char *s) { int base = (flags & 16)? 0 : 10; switch( arg->r_type = (flags & 7) ) { case 1: /* takes int argument */ arg->r.ret_int = (int)strtol(s,NULL,base); return 0; case 3: /* takes long argument */ arg->r.ret_long= strtol(s,NULL,base); return 0; case 4: /* takes ulong argument */ arg->r.ret_ulong= strtoul(s,NULL,base); return 0; case 2: /* takes string argument */ default: arg->r.ret_str = s; return 1; } } static size_t long_opt_strlen( ARGPARSE_OPTS *o ) { size_t n = strlen(o->long_opt); if( o->description && *o->description == '|' ) { const char *s; s=o->description+1; if( *s != '=' ) n++; for(; *s && *s != '|'; s++ ) n++; } return n; } /**************** * Print formatted help. The description string has some special * meanings: * - A description string which is "@" suppresses help output for * this option * - a description,ine which starts with a '@' and is followed by * any other characters is printed as is; this may be used for examples * ans such. * - A description which starts with a '|' outputs the string between this * bar and the next one as arguments of the long option. */ static void show_help( ARGPARSE_OPTS *opts, unsigned flags ) { const char *s; show_version(); putchar('\n'); s = strusage(41); puts(s); if( opts[0].description ) { /* auto format the option description */ int i,j, indent; /* get max. length of long options */ for(i=indent=0; opts[i].short_opt; i++ ) { if( opts[i].long_opt ) if( !opts[i].description || *opts[i].description != '@' ) if( (j=long_opt_strlen(opts+i)) > indent && j < 35 ) indent = j; } /* example: " -v, --verbose Viele Sachen ausgeben" */ indent += 10; if( *opts[0].description != '@' ) puts("Options:"); for(i=0; opts[i].short_opt; i++ ) { s = _( opts[i].description ); if( s && *s== '@' && !s[1] ) /* hide this line */ continue; if( s && *s == '@' ) { /* unindented comment only line */ for(s++; *s; s++ ) { if( *s == '\n' ) { if( s[1] ) putchar('\n'); } else putchar(*s); } putchar('\n'); continue; } j = 3; if( opts[i].short_opt < 256 ) { printf(" -%c", opts[i].short_opt ); if( !opts[i].long_opt ) { if(s && *s == '|' ) { putchar(' '); j++; for(s++ ; *s && *s != '|'; s++, j++ ) putchar(*s); if( *s ) s++; } } } else fputs(" ", stdout); if( opts[i].long_opt ) { j += printf("%c --%s", opts[i].short_opt < 256?',':' ', opts[i].long_opt ); if(s && *s == '|' ) { if( *++s != '=' ) { putchar(' '); j++; } for( ; *s && *s != '|'; s++, j++ ) putchar(*s); if( *s ) s++; } fputs(" ", stdout); j += 3; } for(;j < indent; j++ ) putchar(' '); if( s ) { if( *s && j > indent ) { putchar('\n'); for(j=0;j < indent; j++ ) putchar(' '); } for(; *s; s++ ) { if( *s == '\n' ) { if( s[1] ) { putchar('\n'); for(j=0;j < indent; j++ ) putchar(' '); } } else putchar(*s); } } putchar('\n'); } if( flags & 32 ) puts("\n(A single dash may be used instead of the double ones)"); } if( (s=strusage(19)) ) { /* bug reports to ... */ putchar('\n'); fputs(s, stdout); } fflush(stdout); exit(0); } static void show_version() { const char *s; int i; /* version line */ fputs(strusage(11), stdout); if( (s=strusage(12)) ) printf(" (%s)", s ); printf(" %s\n", strusage(13) ); /* additional version lines */ for(i=20; i < 30; i++ ) if( (s=strusage(i)) ) printf("%s\n", s ); /* copyright string */ if( (s=strusage(14)) ) printf("%s\n", s ); /* Licence string. */ if( (s=strusage (10)) ) printf("%s\n", s ); /* copying conditions */ if( (s=strusage(15)) ) fputs(s, stdout); /* thanks */ if( (s=strusage(18)) ) fputs(s, stdout); /* additional program info */ for(i=30; i < 40; i++ ) if( (s=strusage(i)) ) fputs( (const byte*)s, stdout); fflush(stdout); } void usage( int level ) { if( !level ) { fprintf(stderr,"%s %s; %s\n", strusage(11), strusage(13), strusage(14) ); fflush(stderr); } else if( level == 1 ) { fputs(strusage(40),stderr); exit(2); } else if( level == 2 ) { puts(strusage(41)); exit(0); } } /* Level * 0: Copyright String auf stderr ausgeben * 1: Kurzusage auf stderr ausgeben und beenden * 2: Langusage auf stdout ausgeben und beenden * 10: Return license info string * 11: name of program * 12: optional name of package which includes this program. * 13: version string * 14: copyright string * 15: Short copying conditions (with LFs) * 16: Long copying conditions (with LFs) * 17: Optional printable OS name * 18: Optional thanks list (with LFs) * 19: Bug report info *20..29: Additional lib version strings. *30..39: Additional program info (with LFs) * 40: short usage note (with LF) * 41: long usage note (with LF) */ const char * default_strusage( int level ) { const char *p = NULL; switch( level ) { case 10: p = ("License GPLv3+: GNU GPL version 3 or later " ""); break; case 11: p = "foo"; break; case 13: p = "0.0"; break; case 14: p = "Copyright (C) 2015 Free Software Foundation, Inc."; break; case 15: p = "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n"; break; case 16: p = "This is free software; you can redistribute it and/or modify\n" "it under the terms of the GNU General Public License as published by\n" "the Free Software Foundation; either version 3 of the License, or\n" "(at your option) any later version.\n\n" "It is distributed in the hope that it will be useful,\n" "but WITHOUT ANY WARRANTY; without even the implied warranty of\n" "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" "GNU General Public License for more details.\n\n" "You should have received a copy of the GNU General Public License\n" "along with this software. If not, see .\n"; break; case 40: /* short and long usage */ case 41: p = ""; break; } return p; } #ifdef TEST static struct { int verbose; int debug; char *outfile; char *crf; int myopt; int echo; int a_long_one; }opt; int main(int argc, char **argv) { ARGPARSE_OPTS opts[] = { { 'v', "verbose", 0 , "Laut sein"}, { 'e', "echo" , 0 , "Zeile ausgeben, damit wir sehen, was wir einegegeben haben"}, { 'd', "debug", 0 , "Debug\nfalls mal etasws\nSchief geht"}, { 'o', "output", 2 }, { 'c', "cross-ref", 2|8, "cross-reference erzeugen\n" }, { 'm', "my-option", 1|8 }, { 500, "a-long-option", 0 }, {0} }; ARGPARSE_ARGS pargs = { &argc, &argv, 2|4|32 }; int i; while( ArgParse( &pargs, opts) ) { switch( pargs.r_opt ) { case -1 : printf( "arg=`%s'\n", pargs.r.ret_str); break; case 'v': opt.verbose++; break; case 'e': opt.echo++; break; case 'd': opt.debug++; break; case 'o': opt.outfile = pargs.r.ret_str; break; case 'c': opt.crf = pargs.r_type? pargs.r.ret_str:"a.crf"; break; case 'm': opt.myopt = pargs.r_type? pargs.r.ret_int : 1; break; case 500: opt.a_long_one++; break; default : pargs.err = 1; break; /* force warning output */ } } for(i=0; i < argc; i++ ) printf("%3d -> (%s)\n", i, argv[i] ); puts("Options:"); if( opt.verbose ) printf(" verbose=%d\n", opt.verbose ); if( opt.debug ) printf(" debug=%d\n", opt.debug ); if( opt.outfile ) printf(" outfile=`%s'\n", opt.outfile ); if( opt.crf ) printf(" crffile=`%s'\n", opt.crf ); if( opt.myopt ) printf(" myopt=%d\n", opt.myopt ); if( opt.a_long_one ) printf(" a-long-one=%d\n", opt.a_long_one ); if( opt.echo ) printf(" echo=%d\n", opt.echo ); return 0; } #endif /**** bottom of file ****/ gnupg-1.4.20/util/Makefile.in0000644000175000017500000006435312635457153012707 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 1998, 1999, 2000, 2001, 2005, 2006, 2008 # 2009 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 3 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, see . VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @USE_SIMPLE_GETTEXT_TRUE@am__append_1 = simple-gettext.c @HAVE_W32_SYSTEM_TRUE@am__append_2 = w32reg.c @ENABLE_AGENT_SUPPORT_TRUE@am__append_3 = assuan-buffer.c assuan-client.c assuan-defs.h \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-errors.c assuan-logging.c assuan-socket-connect.c \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-connect.c assuan-socket.c assuan-util.c @USE_INTERNAL_REGEX_TRUE@am__append_4 = regex.c @USE_DNS_SRV_TRUE@am__append_5 = srv.c subdir = util DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs strsep.c timegm.c \ memrchr.c mkdtemp.c isascii.c $(top_srcdir)/scripts/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libcompat_a_AR = $(AR) $(ARFLAGS) am__libcompat_a_SOURCES_DIST = compat.c srv.c @USE_DNS_SRV_TRUE@am__objects_1 = srv.$(OBJEXT) am_libcompat_a_OBJECTS = compat.$(OBJEXT) $(am__objects_1) libcompat_a_OBJECTS = $(am_libcompat_a_OBJECTS) libutil_a_AR = $(AR) $(ARFLAGS) am__libutil_a_SOURCES_DIST = logger.c fileutil.c miscutil.c strgutil.c \ ttyio.c argparse.c memory.c secmem.c errors.c iobuf.c \ dotlock.c http.c pka.c membuf.c cert.c convert.c \ estream-printf.c compat.c srv.c simple-gettext.c w32reg.c \ assuan-buffer.c assuan-client.c assuan-defs.h assuan-errors.c \ assuan-logging.c assuan-socket-connect.c assuan-connect.c \ assuan-socket.c assuan-util.c regex.c am__objects_2 = compat.$(OBJEXT) $(am__objects_1) @USE_SIMPLE_GETTEXT_TRUE@am__objects_3 = simple-gettext.$(OBJEXT) @HAVE_W32_SYSTEM_TRUE@am__objects_4 = w32reg.$(OBJEXT) @ENABLE_AGENT_SUPPORT_TRUE@am__objects_5 = assuan-buffer.$(OBJEXT) \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-client.$(OBJEXT) \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-errors.$(OBJEXT) \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-logging.$(OBJEXT) \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-socket-connect.$(OBJEXT) \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-connect.$(OBJEXT) \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-socket.$(OBJEXT) \ @ENABLE_AGENT_SUPPORT_TRUE@ assuan-util.$(OBJEXT) @USE_INTERNAL_REGEX_TRUE@am__objects_6 = regex.$(OBJEXT) am_libutil_a_OBJECTS = logger.$(OBJEXT) fileutil.$(OBJEXT) \ miscutil.$(OBJEXT) strgutil.$(OBJEXT) ttyio.$(OBJEXT) \ argparse.$(OBJEXT) memory.$(OBJEXT) secmem.$(OBJEXT) \ errors.$(OBJEXT) iobuf.$(OBJEXT) dotlock.$(OBJEXT) \ http.$(OBJEXT) pka.$(OBJEXT) membuf.$(OBJEXT) cert.$(OBJEXT) \ convert.$(OBJEXT) estream-printf.$(OBJEXT) $(am__objects_2) \ $(am__objects_3) $(am__objects_4) $(am__objects_5) \ $(am__objects_6) libutil_a_OBJECTS = $(am_libutil_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcompat_a_SOURCES) $(libutil_a_SOURCES) \ $(EXTRA_libutil_a_SOURCES) DIST_SOURCES = $(am__libcompat_a_SOURCES_DIST) \ $(am__libutil_a_SOURCES_DIST) $(EXTRA_libutil_a_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl noinst_LIBRARIES = libutil.a libcompat.a libutil_a_SOURCES = logger.c fileutil.c miscutil.c strgutil.c ttyio.c \ argparse.c memory.c secmem.c errors.c iobuf.c dotlock.c http.c \ pka.c membuf.c cert.c convert.c estream-printf.c \ $(libcompat_a_SOURCES) $(am__append_1) $(am__append_2) \ $(am__append_3) $(am__append_4) # The internal regex code #includes these. EXTRA_libutil_a_SOURCES = regcomp.c regexec.c regex_internal.c \ regex_internal.h # LIBOBJS and libcompat.a are for the replacement functions and # similar simple stuff. They're segregated in libcompat so we can # link it to the keyserver helpers which have different licensing. # libutil.a, by definition, includes everything that libcompat.a does. libutil_a_DEPENDENCIES = @LIBOBJS@ libutil_a_LIBADD = @LIBOBJS@ libcompat_a_SOURCES = compat.c $(am__append_5) libcompat_a_DEPENDENCIES = @LIBOBJS@ libcompat_a_LIBADD = @LIBOBJS@ all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu util/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libcompat.a: $(libcompat_a_OBJECTS) $(libcompat_a_DEPENDENCIES) $(EXTRA_libcompat_a_DEPENDENCIES) $(AM_V_at)-rm -f libcompat.a $(AM_V_AR)$(libcompat_a_AR) libcompat.a $(libcompat_a_OBJECTS) $(libcompat_a_LIBADD) $(AM_V_at)$(RANLIB) libcompat.a libutil.a: $(libutil_a_OBJECTS) $(libutil_a_DEPENDENCIES) $(EXTRA_libutil_a_DEPENDENCIES) $(AM_V_at)-rm -f libutil.a $(AM_V_AR)$(libutil_a_AR) libutil.a $(libutil_a_OBJECTS) $(libutil_a_LIBADD) $(AM_V_at)$(RANLIB) libutil.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/isascii.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/memrchr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/mkdtemp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/strsep.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/timegm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/argparse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assuan-buffer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assuan-client.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assuan-connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assuan-errors.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assuan-logging.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assuan-socket-connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assuan-socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assuan-util.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/compat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/convert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dotlock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/errors.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/estream-printf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/http.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iobuf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logger.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/membuf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/miscutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pka.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regcomp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regex_internal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/regexec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/secmem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simple-gettext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/srv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strgutil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ttyio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/w32reg.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf $(DEPDIR) ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf $(DEPDIR) ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am http-test: http.c $(CC) -DHAVE_CONFIG_H $(CFLAGS) -I. $(INCLUDES) $(LDFLAGS) -g -Wall \ -DTEST -o http-test http.c libutil.a @LIBINTL@ @DNSLIBS@ @CAPLIBS@ srv-test: srv.c $(CC) -DHAVE_CONFIG_H $(CFLAGS) -I. $(INCLUDES) $(LDFLAGS) -g -Wall \ -DTEST -o srv-test srv.c libutil.a @LIBINTL@ @DNSLIBS@ @CAPLIBS@ pka-test: pka.c $(CC) -DHAVE_CONFIG_H $(CFLAGS) -I. $(INCLUDES) $(LDFLAGS) -g -Wall \ -DTEST -o pka-test pka.c libutil.a @LIBINTL@ @DNSLIBS@ @CAPLIBS@ cert-test: cert.c $(CC) -DHAVE_CONFIG_H $(CFLAGS) -I. $(INCLUDES) $(LDFLAGS) -g -Wall \ -DTEST -o cert-test cert.c libutil.a @LIBINTL@ @DNSLIBS@ @CAPLIBS@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/util/logger.c0000644000175000017500000001307012635262326012247 00000000000000/* logger.c - log functions * 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 3 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, see . */ #include #include #include #include #include #include #include "util.h" #include "i18n.h" #ifdef __VMS # include # include "ttyio.h" #endif /* def __VMS */ static char pidstring[15]; static char *pgm_name; static int errorcount; static int strict; 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 ) { xfree(pgm_name); if( name ) pgm_name = xstrdup(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; } void log_inc_errorcount() { errorcount++; } int log_set_strict(int val) { int old=strict; strict=val; return old; } void g10_log_print_prefix(const char *text) { #ifdef __VMS /* 2006-08-10 SMS. VMS terminal carriage control differs from that on UNIX, and one result is overwritten messages when terminal output is done through multiple file pointers (like logfp and ttyfp), even when they both are connected to the same terminal. The accomodation attempted here is to initialize ttyfp before logfp, and if stderr and ttyfp are both terminals (presumably the same one), to set an unset logfp to ttyfp instead of to stderr. */ if (!logfp ) { FILE *ttyfp_local; init_ttyfp(); ttyfp_local = ttyfp_is (); if (isatty (fileno (stderr)) && isatty (fileno (ttyfp_local))) { logfp = ttyfp_local; } } #endif /* def __VMS */ if( !logfp ) logfp = stderr; if( pgm_name ) fprintf(logfp, "%s%s: %s", pgm_name, pidstring, text ); else fprintf(logfp, "?%s: %s", pidstring, text ); #ifdef __riscos__ fflush( logfp ); #endif /* __riscos__ */ } void g10_log_info( const char *fmt, ... ) { va_list arg_ptr ; g10_log_print_prefix(""); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); #ifdef __riscos__ fflush( logfp ); #endif /* __riscos__ */ } void g10_log_warning( const char *fmt, ... ) { va_list arg_ptr ; if(strict) { errorcount++; g10_log_print_prefix(_("ERROR: ")); } else g10_log_print_prefix(_("WARNING: ")); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); #ifdef __riscos__ fflush( logfp ); #endif /* __riscos__ */ } void g10_log_error( const char *fmt, ... ) { va_list arg_ptr ; g10_log_print_prefix(""); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); errorcount++; #ifdef __riscos__ fflush( logfp ); #endif /* __riscos__ */ } void g10_log_fatal( const char *fmt, ... ) { va_list arg_ptr ; g10_log_print_prefix("fatal: "); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); secmem_dump_stats(); #ifdef __riscos__ fflush( logfp ); #endif /* __riscos__ */ exit(2); } void g10_log_bug( const char *fmt, ... ) { va_list arg_ptr ; putc('\n', stderr ); 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 defined (__riscos__) \ || ( __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 ; g10_log_print_prefix("DBG: "); va_start( arg_ptr, fmt ) ; vfprintf(logfp,fmt,arg_ptr) ; va_end(arg_ptr); #ifdef __riscos__ fflush( logfp ); #endif /* __riscos__ */ } void g10_log_hexdump( const char *text, const char *buf, size_t len ) { int i; g10_log_print_prefix(text); for(i=0; i < len; i++ ) fprintf(logfp, " %02X", ((const byte*)buf)[i] ); fputc('\n', logfp); #ifdef __riscos__ fflush( logfp ); #endif /* __riscos__ */ } gnupg-1.4.20/util/fileutil.c0000644000175000017500000002046512635262326012613 00000000000000/* fileutil.c - file utilities * Copyright (C) 1998, 2003, 2005, 2007 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 3 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, see . */ #include #include #include #include #include #include #include #include #ifdef HAVE_PWD_H #include #endif #include #ifdef HAVE_W32_SYSTEM # define WIN32_LEAN_AND_MEAN # include #else /*!HAVE_W32_SYSTEM*/ # include # include # include #endif /*!HAVE_W32_SYSTEM*/ #include "util.h" #include "memory.h" #include "ttyio.h" /*************** * Extract from a given path the filename component. * */ char * make_basename(const char *filepath, const char *inputpath) { #ifdef __riscos__ return riscos_make_basename(filepath, inputpath); #endif char *p; if ( !(p=strrchr(filepath, DIRSEP_C)) ) #ifdef HAVE_DRIVE_LETTERS if ( !(p=strrchr(filepath, '\\')) ) if ( !(p=strrchr(filepath, ':')) ) #endif { return xstrdup(filepath); } return xstrdup(p+1); } /*************** * Extract from a given filename the path prepended to it. * If their isn't a path prepended to the filename, a dot * is returned ('.'). * */ char * make_dirname(const char *filepath) { char *dirname; int dirname_length; char *p; if ( !(p=strrchr(filepath, DIRSEP_C)) ) #ifdef HAVE_DRIVE_LETTERS if ( !(p=strrchr(filepath, '\\')) ) if ( !(p=strrchr(filepath, ':')) ) #endif { return xstrdup(EXTSEP_S); } dirname_length = p-filepath; dirname = xmalloc(dirname_length+1); strncpy(dirname, filepath, dirname_length); dirname[dirname_length] = 0; return dirname; } /* Expand tildes. Handles both the ~/foo and ~username/foo cases. Returns what the tilde expands to. *name is advanced to be past the tilde expansion. */ static char * untilde(const char **name) { char *home=NULL; assert((*name)[0]=='~'); if((*name)[1]==DIRSEP_C || (*name)[1]=='\0') { /* This is the "~/foo" or "~" case. */ char *tmp=getenv("HOME"); if(tmp) home=xstrdup(tmp); #ifdef HAVE_GETPWUID if(!home) { struct passwd *pwd; pwd=getpwuid(getuid()); if(pwd) home=xstrdup(pwd->pw_dir); } #endif if(home) (*name)++; } #ifdef HAVE_GETPWNAM else { /* This is the "~username" case. */ char *user,*sep; struct passwd *pwd; user=xstrdup((*name)+1); sep=strchr(user,DIRSEP_C); if(sep) *sep='\0'; pwd=getpwnam(user); if(pwd) { home=xstrdup(pwd->pw_dir); (*name)+=1+strlen(user); } xfree(user); } #endif return home; } /* Construct a filename from the NULL terminated list of parts. Tilde expansion is done here. Note that FIRST_PART must never be NULL and that this function is guaranteed to return an allocated string. */ char * make_filename( const char *first_part, ... ) { va_list arg_ptr ; size_t n; const char *s; char *name, *p, *home=NULL; va_start( arg_ptr, first_part ) ; n = strlen(first_part)+1; while( (s=va_arg(arg_ptr, const char *)) ) n += strlen(s) + 1; va_end(arg_ptr); #ifndef __riscos__ if(*first_part=='~') { home=untilde(&first_part); if(home) n+=strlen(home); } #endif name = xmalloc(n); p = home ? stpcpy(stpcpy(name,home), first_part) : stpcpy(name, first_part); va_start( arg_ptr, first_part ) ; while( (s=va_arg(arg_ptr, const char *)) ) p = stpcpy(stpcpy(p, DIRSEP_S), s); va_end(arg_ptr); xfree(home); #ifndef __riscos__ return name; #else /* __riscos__ */ p = riscos_gstrans(name); xfree(name); return p; #endif /* __riscos__ */ } /* Compare whether the filenames are identical. This is a special version of strcmp() taking the semantics of filenames in account. Note that this function works only on the supplied names without considereing any context like the current directory. See also same_file_p(). */ int compare_filenames (const char *a, const char *b) { #ifdef __riscos__ int c = 0; char *abuf, *bbuf; abuf = riscos_gstrans(a); bbuf = riscos_gstrans(b); c = ascii_strcasecmp (abuf, bbuf); xfree(abuf); xfree(bbuf); return c; #elif defined (HAVE_DRIVE_LETTERS) for ( ; *a && *b; a++, b++ ) { if (*a != *b && (toupper (*(const unsigned char*)a) != toupper (*(const unsigned char*)b) ) && !((*a == '/' && *b == '\\') || (*a == '\\' && *b == '/'))) break; } if ((*a == '/' && *b == '\\') || (*a == '\\' && *b == '/')) return 0; else return (toupper (*(const unsigned char*)a) - toupper (*(const unsigned char*)b)); #else /*!HAVE_DRIVE_LETTERS*/ return strcmp (a,b); #endif } /* Check whether the files NAME1 and NAME2 are identical. This is for example achieved by comparing the inode numbers of the files. */ int same_file_p (const char *name1, const char *name2) { int yes; /* First try a shortcut. */ if (!compare_filenames (name1, name2)) yes = 1; else { #ifdef HAVE_W32_SYSTEM HANDLE file1, file2; BY_HANDLE_FILE_INFORMATION info1, info2; file1 = CreateFile (name1, 0, 0, NULL, OPEN_EXISTING, 0, NULL); if (file1 == INVALID_HANDLE_VALUE) yes = 0; /* If we can't open the file, it is not the same. */ else { file2 = CreateFile (name2, 0, 0, NULL, OPEN_EXISTING, 0, NULL); if (file1 == INVALID_HANDLE_VALUE) yes = 0; /* If we can't open the file, it is not the same. */ else { yes = (GetFileInformationByHandle (file1, &info1) && GetFileInformationByHandle (file2, &info2) && info1.dwVolumeSerialNumber==info2.dwVolumeSerialNumber && info1.nFileIndexHigh == info2.nFileIndexHigh && info1.nFileIndexLow == info2.nFileIndexLow); CloseHandle (file2); } CloseHandle (file1); } #else /*!HAVE_W32_SYSTEM*/ struct stat info1, info2; yes = (!stat (name1, &info1) && !stat (name2, &info2) && info1.st_dev == info2.st_dev && info1.st_ino == info2.st_ino); #endif /*!HAVE_W32_SYSTEM*/ } return yes; } /**************** * A simple function to decide whether the filename is stdout * or a real filename. */ const char * print_fname_stdout( const char *s ) { if( !s || (*s == '-' && !s[1]) ) return "[stdout]"; return s; } const char * print_fname_stdin( const char *s ) { if( !s || (*s == '-' && !s[1]) ) return "[stdin]"; return s; } /**************** * Check if the file is compressed. **/ int is_file_compressed( const char *s, int *ret_rc ) { IOBUF a; byte buf[4]; int i, rc = 0; int overflow; struct magic_compress_s { size_t len; byte magic[4]; } magic[] = { { 3, { 0x42, 0x5a, 0x68, 0x00 } }, /* bzip2 */ { 3, { 0x1f, 0x8b, 0x08, 0x00 } }, /* gzip */ { 4, { 0x50, 0x4b, 0x03, 0x04 } }, /* (pk)zip */ }; if ( iobuf_is_pipe_filename (s) || !ret_rc ) return 0; /* We can't check stdin or no file was given */ a = iobuf_open( s ); if ( a == NULL ) { *ret_rc = G10ERR_OPEN_FILE; return 0; } if ( iobuf_get_filelength( a, &overflow ) < 4 && !overflow) { *ret_rc = 0; goto leave; } if ( iobuf_read( a, buf, 4 ) == -1 ) { *ret_rc = G10ERR_READ_FILE; goto leave; } for ( i = 0; i < DIM( magic ); i++ ) { if ( !memcmp( buf, magic[i].magic, magic[i].len ) ) { *ret_rc = 0; rc = 1; break; } } leave: iobuf_close( a ); return rc; } gnupg-1.4.20/util/regexec.c0000644000175000017500000034105612635262326012422 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #include #include #include #include #include #if defined HAVE_WCHAR_H || defined _LIBC # include #endif /* HAVE_WCHAR_H || _LIBC */ #if defined HAVE_WCTYPE_H || defined _LIBC # include #endif /* HAVE_WCTYPE_H || _LIBC */ #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include # include # include # endif #endif #include "_regex.h" /* gnupg */ #include "regex_internal.h" static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, re_string_t *input, int n); static void match_ctx_free (re_match_context_t *cache); static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, int node, int str_idx, int from, int to); static void match_ctx_clear_flag (re_match_context_t *mctx); static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, int last_node, int last_str_idx, int check_subexp); static reg_errcode_t re_search_internal (const regex_t *preg, const char *string, int length, int start, int range, int stop, size_t nmatch, regmatch_t pmatch[], int eflags); static int re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, int length1, const char *string2, int length2, int start, int range, struct re_registers *regs, int stop, int ret_len); static int re_search_stub (struct re_pattern_buffer *bufp, const char *string, int length, int start, int range, int stop, struct re_registers *regs, int ret_len); static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, int nregs, int regs_allocated); static inline re_dfastate_t *acquire_init_state_context (reg_errcode_t *err, const regex_t *preg, const re_match_context_t *mctx, int idx); static int check_matching (const regex_t *preg, re_match_context_t *mctx, int fl_search, int fl_longest_match); static int check_halt_node_context (const re_dfa_t *dfa, int node, unsigned int context); static int check_halt_state_context (const regex_t *preg, const re_dfastate_t *state, const re_match_context_t *mctx, int idx); static void update_regs (re_dfa_t *dfa, regmatch_t *pmatch, int cur_node, int cur_idx, int nmatch); static int proceed_next_node (const regex_t *preg, int nregs, regmatch_t *regs, const re_match_context_t *mctx, int *pidx, int node, re_node_set *eps_via_nodes, struct re_fail_stack_t *fs); static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, int str_idx, int *dests, int nregs, regmatch_t *regs, re_node_set *eps_via_nodes); static int pop_fail_stack (struct re_fail_stack_t *fs, int *pidx, int nregs, regmatch_t *regs, re_node_set *eps_via_nodes); static reg_errcode_t set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, int fl_backtrack); #ifdef RE_ENABLE_I18N static int sift_states_iter_mb (const regex_t *preg, const re_match_context_t *mctx, re_sift_context_t *sctx, int node_idx, int str_idx, int max_str_idx); #endif /* RE_ENABLE_I18N */ static reg_errcode_t sift_states_backward (const regex_t *preg, re_match_context_t *mctx, re_sift_context_t *sctx); static reg_errcode_t update_cur_sifted_state (const regex_t *preg, re_match_context_t *mctx, re_sift_context_t *sctx, int str_idx, re_node_set *dest_nodes); static reg_errcode_t add_epsilon_src_nodes (re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates); static reg_errcode_t sub_epsilon_src_nodes (re_dfa_t *dfa, int node, re_node_set *dest_nodes, const re_node_set *and_nodes); static int check_dst_limits (re_dfa_t *dfa, re_node_set *limits, re_match_context_t *mctx, int dst_node, int dst_idx, int src_node, int src_idx); static int check_dst_limits_calc_pos (re_dfa_t *dfa, re_match_context_t *mctx, int limit, re_node_set *eclosures, int subexp_idx, int node, int str_idx); static reg_errcode_t check_subexp_limits (re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, int str_idx); static reg_errcode_t search_subexp (const regex_t *preg, re_match_context_t *mctx, re_sift_context_t *sctx, int str_idx, re_node_set *dest_nodes); static reg_errcode_t sift_states_bkref (const regex_t *preg, re_match_context_t *mctx, re_sift_context_t *sctx, int str_idx, re_node_set *dest_nodes); static reg_errcode_t clean_state_log_if_need (re_match_context_t *mctx, int next_state_log_idx); static reg_errcode_t merge_state_array (re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, int num); static re_dfastate_t *transit_state (reg_errcode_t *err, const regex_t *preg, re_match_context_t *mctx, re_dfastate_t *state, int fl_search); static re_dfastate_t *transit_state_sb (reg_errcode_t *err, const regex_t *preg, re_dfastate_t *pstate, int fl_search, re_match_context_t *mctx); #ifdef RE_ENABLE_I18N static reg_errcode_t transit_state_mb (const regex_t *preg, re_dfastate_t *pstate, re_match_context_t *mctx); #endif /* RE_ENABLE_I18N */ static reg_errcode_t transit_state_bkref (const regex_t *preg, re_dfastate_t *pstate, re_match_context_t *mctx); static reg_errcode_t transit_state_bkref_loop (const regex_t *preg, re_node_set *nodes, re_dfastate_t **work_state_log, re_match_context_t *mctx); static re_dfastate_t **build_trtable (const regex_t *dfa, const re_dfastate_t *state, int fl_search); #ifdef RE_ENABLE_I18N static int check_node_accept_bytes (const regex_t *preg, int node_idx, const re_string_t *input, int idx); # ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t name_len); # endif /* _LIBC */ #endif /* RE_ENABLE_I18N */ static int group_nodes_into_DFAstates (const regex_t *dfa, const re_dfastate_t *state, re_node_set *states_node, bitset *states_ch); static int check_node_accept (const regex_t *preg, const re_token_t *node, const re_match_context_t *mctx, int idx); static reg_errcode_t extend_buffers (re_match_context_t *mctx); /* Entry point for POSIX code. */ /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies `execution flags' which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. We return 0 if we find a match and REG_NOMATCH if not. */ int regexec (preg, string, nmatch, pmatch, eflags) const regex_t *__restrict preg; const char *__restrict string; size_t nmatch; regmatch_t pmatch[]; int eflags; { reg_errcode_t err; int length = strlen (string); if (preg->no_sub) err = re_search_internal (preg, string, length, 0, length, length, 0, NULL, eflags); else err = re_search_internal (preg, string, length, 0, length, length, nmatch, pmatch, eflags); return err != REG_NOERROR; } #ifdef _LIBC weak_alias (__regexec, regexec) #endif /* Entry points for GNU code. */ /* re_match, re_search, re_match_2, re_search_2 The former two functions operate on STRING with length LENGTH, while the later two operate on concatenation of STRING1 and STRING2 with lengths LENGTH1 and LENGTH2, respectively. re_match() matches the compiled pattern in BUFP against the string, starting at index START. re_search() first tries matching at index START, then it tries to match starting from index START + 1, and so on. The last start position tried is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same way as re_match().) The parameter STOP of re_{match,search}_2 specifies that no match exceeding the first STOP characters of the concatenation of the strings should be concerned. If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match and all groups is stroed in REGS. (For the "_2" variants, the offsets are computed relative to the concatenation, not relative to the individual strings.) On success, re_match* functions return the length of the match, re_search* return the position of the start of the match. Return value -1 means no match was found and -2 indicates an internal error. */ int re_match (bufp, string, length, start, regs) struct re_pattern_buffer *bufp; const char *string; int length, start; struct re_registers *regs; { return re_search_stub (bufp, string, length, start, 0, length, regs, 1); } #ifdef _LIBC weak_alias (__re_match, re_match) #endif int re_search (bufp, string, length, start, range, regs) struct re_pattern_buffer *bufp; const char *string; int length, start, range; struct re_registers *regs; { return re_search_stub (bufp, string, length, start, range, length, regs, 0); } #ifdef _LIBC weak_alias (__re_search, re_search) #endif int re_match_2 (bufp, string1, length1, string2, length2, start, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; int length1, length2, start, stop; struct re_registers *regs; { return re_search_2_stub (bufp, string1, length1, string2, length2, start, 0, regs, stop, 1); } #ifdef _LIBC weak_alias (__re_match_2, re_match_2) #endif int re_search_2 (bufp, string1, length1, string2, length2, start, range, regs, stop) struct re_pattern_buffer *bufp; const char *string1, *string2; int length1, length2, start, range, stop; struct re_registers *regs; { return re_search_2_stub (bufp, string1, length1, string2, length2, start, range, regs, stop, 0); } #ifdef _LIBC weak_alias (__re_search_2, re_search_2) #endif static int re_search_2_stub (bufp, string1, length1, string2, length2, start, range, regs, stop, ret_len) struct re_pattern_buffer *bufp; const char *string1, *string2; int length1, length2, start, range, stop, ret_len; struct re_registers *regs; { const char *str; int rval; int len = length1 + length2; int free_str = 0; if (BE (length1 < 0 || length2 < 0 || stop < 0, 0)) return -2; /* Concatenate the strings. */ if (length2 > 0) if (length1 > 0) { char *s = re_malloc (char, len); if (BE (s == NULL, 0)) return -2; memcpy (s, string1, length1); memcpy (s + length1, string2, length2); str = s; free_str = 1; } else str = string2; else str = string1; rval = re_search_stub (bufp, str, len, start, range, stop, regs, ret_len); if (free_str) re_free ((char *) str); return rval; } /* The parameters have the same meaning as those of re_search. Additional parameters: If RET_LEN is nonzero the length of the match is returned (re_match style); otherwise the position of the match is returned. */ static int re_search_stub (bufp, string, length, start, range, stop, regs, ret_len) struct re_pattern_buffer *bufp; const char *string; int length, start, range, stop, ret_len; struct re_registers *regs; { reg_errcode_t result; regmatch_t *pmatch; int nregs, rval; int eflags = 0; /* Check for out-of-range. */ if (BE (start < 0 || start > length, 0)) return -1; if (BE (start + range > length, 0)) range = length - start; else if (BE (start + range < 0, 0)) range = -start; eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; /* Compile fastmap if we haven't yet. */ if (range > 0 && bufp->fastmap != NULL && !bufp->fastmap_accurate) re_compile_fastmap (bufp); if (BE (bufp->no_sub, 0)) regs = NULL; /* We need at least 1 register. */ if (regs == NULL) nregs = 1; else if (BE (bufp->regs_allocated == REGS_FIXED && regs->num_regs < bufp->re_nsub + 1, 0)) { nregs = regs->num_regs; if (BE (nregs < 1, 0)) { /* Nothing can be copied to regs. */ regs = NULL; nregs = 1; } } else nregs = bufp->re_nsub + 1; pmatch = re_malloc (regmatch_t, nregs); if (BE (pmatch == NULL, 0)) return -2; result = re_search_internal (bufp, string, length, start, range, stop, nregs, pmatch, eflags); rval = 0; /* I hope we needn't fill ther regs with -1's when no match was found. */ if (result != REG_NOERROR) rval = -1; else if (regs != NULL) { /* If caller wants register contents data back, copy them. */ bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, bufp->regs_allocated); if (BE (bufp->regs_allocated == REGS_UNALLOCATED, 0)) rval = -2; } if (BE (rval == 0, 1)) { if (ret_len) { assert (pmatch[0].rm_so == start); rval = pmatch[0].rm_eo - start; } else rval = pmatch[0].rm_so; } re_free (pmatch); return rval; } static unsigned re_copy_regs (regs, pmatch, nregs, regs_allocated) struct re_registers *regs; regmatch_t *pmatch; int nregs, regs_allocated; { int rval = REGS_REALLOCATE; int i; int need_regs = nregs + 1; /* We need one extra element beyond `num_regs' for the `-1' marker GNU code uses. */ /* Have the register data arrays been allocated? */ if (regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. */ regs->start = re_malloc (regoff_t, need_regs); if (BE (regs->start == NULL, 0)) return REGS_UNALLOCATED; regs->end = re_malloc (regoff_t, need_regs); if (BE (regs->end == NULL, 0)) { re_free (regs->start); return REGS_UNALLOCATED; } regs->num_regs = need_regs; } else if (regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (need_regs > regs->num_regs) { regs->start = re_realloc (regs->start, regoff_t, need_regs); if (BE (regs->start == NULL, 0)) { if (regs->end != NULL) re_free (regs->end); return REGS_UNALLOCATED; } regs->end = re_realloc (regs->end, regoff_t, need_regs); if (BE (regs->end == NULL, 0)) { re_free (regs->start); return REGS_UNALLOCATED; } regs->num_regs = need_regs; } } else { assert (regs_allocated == REGS_FIXED); /* This function may not be called with REGS_FIXED and nregs too big. */ assert (regs->num_regs >= nregs); rval = REGS_FIXED; } /* Copy the regs. */ for (i = 0; i < nregs; ++i) { regs->start[i] = pmatch[i].rm_so; regs->end[i] = pmatch[i].rm_eo; } for ( ; i < regs->num_regs; ++i) regs->start[i] = regs->end[i] = -1; return rval; } /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (bufp, regs, num_regs, starts, ends) struct re_pattern_buffer *bufp; struct re_registers *regs; unsigned num_regs; regoff_t *starts, *ends; { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = (regoff_t *) 0; } } #ifdef _LIBC weak_alias (__re_set_registers, re_set_registers) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC int # ifdef _LIBC weak_function # endif re_exec (s) const char *s; { return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); } #endif /* _REGEX_RE_COMP */ static re_node_set empty_set; /* Internal entry point. */ /* Searches for a compiled pattern PREG in the string STRING, whose length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same mingings with regexec. START, and RANGE have the same meanings with re_search. Return REG_NOERROR if we find a match, and REG_NOMATCH if not, otherwise return the error code. Note: We assume front end functions already check ranges. (START + RANGE >= 0 && START + RANGE <= LENGTH) */ static reg_errcode_t re_search_internal (preg, string, length, start, range, stop, nmatch, pmatch, eflags) const regex_t *preg; const char *string; int length, start, range, stop, eflags; size_t nmatch; regmatch_t pmatch[]; { reg_errcode_t err; re_dfa_t *dfa = (re_dfa_t *)preg->buffer; re_string_t input; int left_lim, right_lim, incr; int fl_longest_match, match_first, match_last = -1; re_match_context_t mctx; char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate) ? preg->fastmap : NULL); /* Check if the DFA haven't been compiled. */ if (BE (preg->used == 0 || dfa->init_state == NULL || dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL, 0)) return REG_NOMATCH; re_node_set_init_empty (&empty_set); /* We must check the longest matching, if nmatch > 0. */ fl_longest_match = (nmatch != 0); err = re_string_allocate (&input, string, length, dfa->nodes_len + 1, preg->translate, preg->syntax & RE_ICASE); if (BE (err != REG_NOERROR, 0)) return err; input.stop = stop; err = match_ctx_init (&mctx, eflags, &input, dfa->nbackref * 2); if (BE (err != REG_NOERROR, 0)) return err; /* We will log all the DFA states through which the dfa pass, if nmatch > 1, or this dfa has "multibyte node", which is a back-reference or a node which can accept multibyte character or multi character collating element. */ if (nmatch > 1 || dfa->has_mb_node) { mctx.state_log = re_malloc (re_dfastate_t *, dfa->nodes_len + 1); if (BE (mctx.state_log == NULL, 0)) return REG_ESPACE; } else mctx.state_log = NULL; #ifdef DEBUG /* We assume front-end functions already check them. */ assert (start + range >= 0 && start + range <= length); #endif match_first = start; input.tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF); /* Check incrementally whether of not the input string match. */ incr = (range < 0) ? -1 : 1; left_lim = (range < 0) ? start + range : start; right_lim = (range < 0) ? start : start + range; for (;;) { /* At first get the current byte from input string. */ int ch; if (MB_CUR_MAX > 1 && (preg->syntax & RE_ICASE || preg->translate)) { /* In this case, we can't determin easily the current byte, since it might be a component byte of a multibyte character. Then we use the constructed buffer instead. */ /* If MATCH_FIRST is out of the valid range, reconstruct the buffers. */ if (input.raw_mbs_idx + input.valid_len <= match_first) re_string_reconstruct (&input, match_first, eflags, preg->newline_anchor); /* If MATCH_FIRST is out of the buffer, leave it as '\0'. Note that MATCH_FIRST must not be smaller than 0. */ ch = ((match_first >= length) ? 0 : re_string_byte_at (&input, match_first - input.raw_mbs_idx)); } else { /* We apply translate/conversion manually, since it is trivial in this case. */ /* If MATCH_FIRST is out of the buffer, leave it as '\0'. Note that MATCH_FIRST must not be smaller than 0. */ ch = (match_first < length) ? (unsigned char)string[match_first] : 0; /* Apply translation if we need. */ ch = preg->translate ? preg->translate[ch] : ch; /* In case of case insensitive mode, convert to upper case. */ ch = ((preg->syntax & RE_ICASE) && islower (ch)) ? toupper (ch) : ch; } /* Eliminate inappropriate one by fastmap. */ if (preg->can_be_null || fastmap == NULL || fastmap[ch]) { /* Reconstruct the buffers so that the matcher can assume that the matching starts from the begining of the buffer. */ re_string_reconstruct (&input, match_first, eflags, preg->newline_anchor); #ifdef RE_ENABLE_I18N /* Eliminate it when it is a component of a multibyte character and isn't the head of a multibyte character. */ if (MB_CUR_MAX == 1 || re_string_first_byte (&input, 0)) #endif { /* It seems to be appropriate one, then use the matcher. */ /* We assume that the matching starts from 0. */ mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; match_last = check_matching (preg, &mctx, 0, fl_longest_match); if (match_last != -1) { if (BE (match_last == -2, 0)) return REG_ESPACE; else break; /* We found a matching. */ } } } /* Update counter. */ match_first += incr; if (match_first < left_lim || right_lim < match_first) break; } /* Set pmatch[] if we need. */ if (match_last != -1 && nmatch > 0) { int reg_idx; /* Initialize registers. */ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; /* Set the points where matching start/end. */ pmatch[0].rm_so = 0; mctx.match_last = pmatch[0].rm_eo = match_last; if (!preg->no_sub && nmatch > 1) { /* We need the ranges of all the subexpressions. */ int halt_node; re_dfastate_t **sifted_states; re_dfastate_t **lim_states = NULL; re_dfastate_t *pstate = mctx.state_log[match_last]; re_sift_context_t sctx; #ifdef DEBUG assert (mctx.state_log != NULL); #endif halt_node = check_halt_state_context (preg, pstate, &mctx, match_last); if (dfa->has_plural_match) { match_ctx_clear_flag (&mctx); sifted_states = re_malloc (re_dfastate_t *, match_last + 1); if (BE (sifted_states == NULL, 0)) return REG_ESPACE; if (dfa->nbackref) { lim_states = calloc (sizeof (re_dfastate_t *), match_last + 1); if (BE (lim_states == NULL, 0)) return REG_ESPACE; } sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, mctx.match_last, 0); err = sift_states_backward (preg, &mctx, &sctx); if (BE (err != REG_NOERROR, 0)) return err; if (lim_states != NULL) { err = merge_state_array (dfa, sifted_states, lim_states, match_last + 1); if (BE (err != REG_NOERROR, 0)) return err; re_free (lim_states); } re_node_set_free (&sctx.limits); re_free (mctx.state_log); mctx.state_log = sifted_states; } mctx.last_node = halt_node; err = set_regs (preg, &mctx, nmatch, pmatch, dfa->has_plural_match && dfa->nbackref > 0); if (BE (err != REG_NOERROR, 0)) return err; } /* At last, add the offset to the each registers, since we slided the buffers so that We can assume that the matching starts from 0. */ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so != -1) { pmatch[reg_idx].rm_so += match_first; pmatch[reg_idx].rm_eo += match_first; } } re_free (mctx.state_log); if (dfa->nbackref) match_ctx_free (&mctx); re_string_destruct (&input); return (match_last == -1) ? REG_NOMATCH : REG_NOERROR; } /* Acquire an initial state and return it. We must select appropriate initial state depending on the context, since initial states may have constraints like "\<", "^", etc.. */ static inline re_dfastate_t * acquire_init_state_context (err, preg, mctx, idx) reg_errcode_t *err; const regex_t *preg; const re_match_context_t *mctx; int idx; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; *err = REG_NOERROR; if (dfa->init_state->has_constraint) { unsigned int context; context = re_string_context_at (mctx->input, idx - 1, mctx->eflags, preg->newline_anchor); if (IS_WORD_CONTEXT (context)) return dfa->init_state_word; else if (IS_ORDINARY_CONTEXT (context)) return dfa->init_state; else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) return dfa->init_state_begbuf; else if (IS_NEWLINE_CONTEXT (context)) return dfa->init_state_nl; else if (IS_BEGBUF_CONTEXT (context)) { /* It is relatively rare case, then calculate on demand. */ return re_acquire_state_context (err, dfa, dfa->init_state->entrance_nodes, context); } else /* Must not happen? */ return dfa->init_state; } else return dfa->init_state; } /* Check whether the regular expression match input string INPUT or not, and return the index where the matching end, return -1 if not match, or return -2 in case of an error. FL_SEARCH means we must search where the matching starts, FL_LONGEST_MATCH means we want the POSIX longest matching. Note that the matcher assume that the maching starts from the current index of the buffer. */ static int check_matching (preg, mctx, fl_search, fl_longest_match) const regex_t *preg; re_match_context_t *mctx; int fl_search, fl_longest_match; { reg_errcode_t err; int match = 0; int match_last = -1; int cur_str_idx = re_string_cur_idx (mctx->input); re_dfastate_t *cur_state; cur_state = acquire_init_state_context (&err, preg, mctx, cur_str_idx); /* An initial state must not be NULL(invalid state). */ if (BE (cur_state == NULL, 0)) return -2; if (mctx->state_log != NULL) mctx->state_log[cur_str_idx] = cur_state; if (cur_state->has_backref) { int i; re_dfa_t *dfa = (re_dfa_t *) preg->buffer; for (i = 0; i < cur_state->nodes.nelem; ++i) { re_token_type_t type; int node = cur_state->nodes.elems[i]; int entity = (dfa->nodes[node].type != OP_CONTEXT_NODE ? node : dfa->nodes[node].opr.ctx_info->entity); type = dfa->nodes[entity].type; if (type == OP_BACK_REF) { int clexp_idx; for (clexp_idx = 0; clexp_idx < cur_state->nodes.nelem; ++clexp_idx) { re_token_t *clexp_node; clexp_node = dfa->nodes + cur_state->nodes.elems[clexp_idx]; if (clexp_node->type == OP_CLOSE_SUBEXP && clexp_node->opr.idx + 1== dfa->nodes[entity].opr.idx) { err = match_ctx_add_entry (mctx, node, 0, 0, 0); if (BE (err != REG_NOERROR, 0)) return -2; break; } } } } } /* If the RE accepts NULL string. */ if (cur_state->halt) { if (!cur_state->has_constraint || check_halt_state_context (preg, cur_state, mctx, cur_str_idx)) { if (!fl_longest_match) return cur_str_idx; else { match_last = cur_str_idx; match = 1; } } } while (!re_string_eoi (mctx->input)) { cur_state = transit_state (&err, preg, mctx, cur_state, fl_search && !match); if (cur_state == NULL) /* Reached at the invalid state or an error. */ { cur_str_idx = re_string_cur_idx (mctx->input); if (BE (err != REG_NOERROR, 0)) return -2; if (fl_search && !match) { /* Restart from initial state, since we are searching the point from where matching start. */ #ifdef RE_ENABLE_I18N if (MB_CUR_MAX == 1 || re_string_first_byte (mctx->input, cur_str_idx)) #endif /* RE_ENABLE_I18N */ cur_state = acquire_init_state_context (&err, preg, mctx, cur_str_idx); if (BE (cur_state == NULL && err != REG_NOERROR, 0)) return -2; if (mctx->state_log != NULL) mctx->state_log[cur_str_idx] = cur_state; } else if (!fl_longest_match && match) break; else /* (fl_longest_match && match) || (!fl_search && !match) */ { if (mctx->state_log == NULL) break; else { int max = mctx->state_log_top; for (; cur_str_idx <= max; ++cur_str_idx) if (mctx->state_log[cur_str_idx] != NULL) break; if (cur_str_idx > max) break; } } } if (cur_state != NULL && cur_state->halt) { /* Reached at a halt state. Check the halt state can satisfy the current context. */ if (!cur_state->has_constraint || check_halt_state_context (preg, cur_state, mctx, re_string_cur_idx (mctx->input))) { /* We found an appropriate halt state. */ match_last = re_string_cur_idx (mctx->input); match = 1; if (!fl_longest_match) break; } } } return match_last; } /* Check NODE match the current context. */ static int check_halt_node_context (dfa, node, context) const re_dfa_t *dfa; int node; unsigned int context; { int entity; re_token_type_t type = dfa->nodes[node].type; if (type == END_OF_RE) return 1; if (type != OP_CONTEXT_NODE) return 0; entity = dfa->nodes[node].opr.ctx_info->entity; if (dfa->nodes[entity].type != END_OF_RE || NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[node].constraint, context)) return 0; return 1; } /* Check the halt state STATE match the current context. Return 0 if not match, if the node, STATE has, is a halt node and match the context, return the node. */ static int check_halt_state_context (preg, state, mctx, idx) const regex_t *preg; const re_dfastate_t *state; const re_match_context_t *mctx; int idx; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i; unsigned int context; #ifdef DEBUG assert (state->halt); #endif context = re_string_context_at (mctx->input, idx, mctx->eflags, preg->newline_anchor); for (i = 0; i < state->nodes.nelem; ++i) if (check_halt_node_context (dfa, state->nodes.elems[i], context)) return state->nodes.elems[i]; return 0; } /* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA corresponding to the DFA). Return the destination node, and update EPS_VIA_NODES, return -1 in case of errors. */ static int proceed_next_node (preg, nregs, regs, mctx, pidx, node, eps_via_nodes, fs) const regex_t *preg; regmatch_t *regs; const re_match_context_t *mctx; int nregs, *pidx, node; re_node_set *eps_via_nodes; struct re_fail_stack_t *fs; { re_dfa_t *dfa = (re_dfa_t *)preg->buffer; int i, err, dest_node, cur_entity; dest_node = -1; cur_entity = ((dfa->nodes[node].type == OP_CONTEXT_NODE) ? dfa->nodes[node].opr.ctx_info->entity : node); if (IS_EPSILON_NODE (dfa->nodes[node].type)) { int ndest, dest_nodes[2], dest_entities[2]; err = re_node_set_insert (eps_via_nodes, node); if (BE (err < 0, 0)) return -1; /* Pick up valid destinations. */ for (ndest = 0, i = 0; i < mctx->state_log[*pidx]->nodes.nelem; ++i) { int candidate = mctx->state_log[*pidx]->nodes.elems[i]; int entity; entity = ((dfa->nodes[candidate].type == OP_CONTEXT_NODE) ? dfa->nodes[candidate].opr.ctx_info->entity : candidate); if (!re_node_set_contains (dfa->edests + node, entity)) continue; dest_nodes[0] = (ndest == 0) ? candidate : dest_nodes[0]; dest_entities[0] = (ndest == 0) ? entity : dest_entities[0]; dest_nodes[1] = (ndest == 1) ? candidate : dest_nodes[1]; dest_entities[1] = (ndest == 1) ? entity : dest_entities[1]; ++ndest; } if (ndest <= 1) return ndest == 0 ? -1 : (ndest == 1 ? dest_nodes[0] : 0); if (dest_entities[0] > dest_entities[1]) { int swap_work = dest_nodes[0]; dest_nodes[0] = dest_nodes[1]; dest_nodes[1] = swap_work; } /* In order to avoid infinite loop like "(a*)*". */ if (re_node_set_contains (eps_via_nodes, dest_nodes[0])) return dest_nodes[1]; if (fs != NULL) push_fail_stack (fs, *pidx, dest_nodes, nregs, regs, eps_via_nodes); return dest_nodes[0]; } else { int naccepted = 0, entity = node; re_token_type_t type = dfa->nodes[node].type; if (type == OP_CONTEXT_NODE) { entity = dfa->nodes[node].opr.ctx_info->entity; type = dfa->nodes[entity].type; } #ifdef RE_ENABLE_I18N if (ACCEPT_MB_NODE (type)) naccepted = check_node_accept_bytes (preg, entity, mctx->input, *pidx); else #endif /* RE_ENABLE_I18N */ if (type == OP_BACK_REF) { int subexp_idx = dfa->nodes[entity].opr.idx; naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; if (fs != NULL) { if (regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) return -1; else if (naccepted) { char *buf = re_string_get_buffer (mctx->input); if (strncmp (buf + regs[subexp_idx].rm_so, buf + *pidx, naccepted) != 0) return -1; } } if (naccepted == 0) { err = re_node_set_insert (eps_via_nodes, node); if (BE (err < 0, 0)) return -2; dest_node = dfa->nexts[node]; if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node)) return dest_node; for (i = 0; i < mctx->state_log[*pidx]->nodes.nelem; ++i) { dest_node = mctx->state_log[*pidx]->nodes.elems[i]; if ((dfa->nodes[dest_node].type == OP_CONTEXT_NODE && (dfa->nexts[node] == dfa->nodes[dest_node].opr.ctx_info->entity))) return dest_node; } } } if (naccepted != 0 || check_node_accept (preg, dfa->nodes + node, mctx, *pidx)) { dest_node = dfa->nexts[node]; *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node))) return -1; re_node_set_empty (eps_via_nodes); return dest_node; } } return -1; } static reg_errcode_t push_fail_stack (fs, str_idx, dests, nregs, regs, eps_via_nodes) struct re_fail_stack_t *fs; int str_idx, *dests, nregs; regmatch_t *regs; re_node_set *eps_via_nodes; { reg_errcode_t err; int num = fs->num++; if (fs->num == fs->alloc) { fs->alloc *= 2; fs->stack = realloc (fs->stack, (sizeof (struct re_fail_stack_ent_t) * fs->alloc)); if (fs->stack == NULL) return REG_ESPACE; } fs->stack[num].idx = str_idx; fs->stack[num].node = dests[1]; fs->stack[num].regs = re_malloc (regmatch_t, nregs); memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); return err; } static int pop_fail_stack (fs, pidx, nregs, regs, eps_via_nodes) struct re_fail_stack_t *fs; int *pidx, nregs; regmatch_t *regs; re_node_set *eps_via_nodes; { int num = --fs->num; assert (num >= 0); *pidx = fs->stack[num].idx; memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); re_node_set_free (eps_via_nodes); *eps_via_nodes = fs->stack[num].eps_via_nodes; return fs->stack[num].node; } /* Set the positions where the subexpressions are starts/ends to registers PMATCH. Note: We assume that pmatch[0] is already set, and pmatch[i].rm_so == pmatch[i].rm_eo == -1 (i > 1). */ static reg_errcode_t set_regs (preg, mctx, nmatch, pmatch, fl_backtrack) const regex_t *preg; const re_match_context_t *mctx; size_t nmatch; regmatch_t *pmatch; int fl_backtrack; { re_dfa_t *dfa = (re_dfa_t *)preg->buffer; int idx, cur_node, real_nmatch; re_node_set eps_via_nodes; struct re_fail_stack_t *fs; struct re_fail_stack_t fs_body = {0, 2, NULL}; #ifdef DEBUG assert (nmatch > 1); assert (mctx->state_log != NULL); #endif if (fl_backtrack) { fs = &fs_body; fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); } else fs = NULL; cur_node = dfa->init_node; real_nmatch = (nmatch <= preg->re_nsub) ? nmatch : preg->re_nsub + 1; re_node_set_init_empty (&eps_via_nodes); for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) { update_regs (dfa, pmatch, cur_node, idx, real_nmatch); if (idx == pmatch[0].rm_eo && cur_node == mctx->last_node) { int reg_idx; if (fs) { for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) break; if (reg_idx == nmatch) return REG_NOERROR; cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, &eps_via_nodes); } else return REG_NOERROR; } /* Proceed to next node. */ cur_node = proceed_next_node (preg, nmatch, pmatch, mctx, &idx, cur_node, &eps_via_nodes, fs); if (BE (cur_node < 0, 0)) { if (cur_node == -2) return REG_ESPACE; if (fs) cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, &eps_via_nodes); else return REG_NOMATCH; } } re_node_set_free (&eps_via_nodes); return REG_NOERROR; } static void update_regs (dfa, pmatch, cur_node, cur_idx, nmatch) re_dfa_t *dfa; regmatch_t *pmatch; int cur_node, cur_idx, nmatch; { int type = dfa->nodes[cur_node].type; int reg_num; if (type != OP_OPEN_SUBEXP && type != OP_CLOSE_SUBEXP) return; reg_num = dfa->nodes[cur_node].opr.idx + 1; if (reg_num >= nmatch) return; if (type == OP_OPEN_SUBEXP) { /* We are at the first node of this sub expression. */ pmatch[reg_num].rm_so = cur_idx; pmatch[reg_num].rm_eo = -1; } else if (type == OP_CLOSE_SUBEXP) /* We are at the first node of this sub expression. */ pmatch[reg_num].rm_eo = cur_idx; } #define NUMBER_OF_STATE 1 /* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 and sift the nodes in each states according to the following rules. Updated state_log will be wrote to STATE_LOG. Rules: We throw away the Node `a' in the STATE_LOG[STR_IDX] if... 1. When STR_IDX == MATCH_LAST(the last index in the state_log): If `a' isn't the LAST_NODE and `a' can't epsilon transit to the LAST_NODE, we throw away the node `a'. 2. When 0 <= STR_IDX < MATCH_LAST and `a' accepts string `s' and transit to `b': i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw away the node `a'. ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is throwed away, we throw away the node `a'. 3. When 0 <= STR_IDX < n and 'a' epsilon transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the node `a'. ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is throwed away, we throw away the node `a'. */ #define STATE_NODE_CONTAINS(state,node) \ ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) static reg_errcode_t sift_states_backward (preg, mctx, sctx) const regex_t *preg; re_match_context_t *mctx; re_sift_context_t *sctx; { reg_errcode_t err; re_dfa_t *dfa = (re_dfa_t *)preg->buffer; int null_cnt = 0; int str_idx = sctx->last_str_idx; re_node_set cur_dest; re_node_set *cur_src; /* Points the state_log[str_idx]->nodes */ #ifdef DEBUG assert (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); #endif cur_src = &mctx->state_log[str_idx]->nodes; /* Build sifted state_log[str_idx]. It has the nodes which can epsilon transit to the last_node and the last_node itself. */ err = re_node_set_init_1 (&cur_dest, sctx->last_node); if (BE (err != REG_NOERROR, 0)) return err; err = update_cur_sifted_state (preg, mctx, sctx, str_idx, &cur_dest); if (BE (err != REG_NOERROR, 0)) return err; /* Then check each states in the state_log. */ while (str_idx > 0) { int i, ret; /* Update counters. */ null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; if (null_cnt > mctx->max_mb_elem_len) { memset (sctx->sifted_states, '\0', sizeof (re_dfastate_t *) * str_idx); return REG_NOERROR; } re_node_set_empty (&cur_dest); --str_idx; cur_src = ((mctx->state_log[str_idx] == NULL) ? &empty_set : &mctx->state_log[str_idx]->nodes); /* Then build the next sifted state. We build the next sifted state on `cur_dest', and update `sifted_states[str_idx]' with `cur_dest'. Note: `cur_dest' is the sifted state from `state_log[str_idx + 1]'. `cur_src' points the node_set of the old `state_log[str_idx]'. */ for (i = 0; i < cur_src->nelem; i++) { int prev_node = cur_src->elems[i]; int entity = prev_node; int naccepted = 0; re_token_type_t type = dfa->nodes[prev_node].type; if (IS_EPSILON_NODE(type)) continue; if (type == OP_CONTEXT_NODE) { entity = dfa->nodes[prev_node].opr.ctx_info->entity; type = dfa->nodes[entity].type; } #ifdef RE_ENABLE_I18N /* If the node may accept `multi byte'. */ if (ACCEPT_MB_NODE (type)) naccepted = sift_states_iter_mb (preg, mctx, sctx, entity, str_idx, sctx->last_str_idx); #endif /* RE_ENABLE_I18N */ /* We don't check backreferences here. See update_cur_sifted_state(). */ if (!naccepted && check_node_accept (preg, dfa->nodes + prev_node, mctx, str_idx) && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], dfa->nexts[prev_node])) naccepted = 1; if (naccepted == 0) continue; if (sctx->limits.nelem) { int to_idx = str_idx + naccepted; if (check_dst_limits (dfa, &sctx->limits, mctx, dfa->nexts[prev_node], to_idx, prev_node, str_idx)) continue; } ret = re_node_set_insert (&cur_dest, prev_node); if (BE (ret == -1, 0)) return err; } /* Add all the nodes which satisfy the following conditions: - It can epsilon transit to a node in CUR_DEST. - It is in CUR_SRC. And update state_log. */ err = update_cur_sifted_state (preg, mctx, sctx, str_idx, &cur_dest); if (BE (err != REG_NOERROR, 0)) return err; } re_node_set_free (&cur_dest); return REG_NOERROR; } /* Helper functions. */ static inline reg_errcode_t clean_state_log_if_need (mctx, next_state_log_idx) re_match_context_t *mctx; int next_state_log_idx; { int top = mctx->state_log_top; if (next_state_log_idx >= mctx->input->bufs_len || (next_state_log_idx >= mctx->input->valid_len && mctx->input->valid_len < mctx->input->len)) { reg_errcode_t err; err = extend_buffers (mctx); if (BE (err != REG_NOERROR, 0)) return err; } if (top < next_state_log_idx) { memset (mctx->state_log + top + 1, '\0', sizeof (re_dfastate_t *) * (next_state_log_idx - top)); mctx->state_log_top = next_state_log_idx; } return REG_NOERROR; } static reg_errcode_t merge_state_array (dfa, dst, src, num) re_dfa_t *dfa; re_dfastate_t **dst; re_dfastate_t **src; int num; { int st_idx; reg_errcode_t err; for (st_idx = 0; st_idx < num; ++st_idx) { if (dst[st_idx] == NULL) dst[st_idx] = src[st_idx]; else if (src[st_idx] != NULL) { re_node_set merged_set; err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, &src[st_idx]->nodes); if (BE (err != REG_NOERROR, 0)) return err; dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); if (BE (err != REG_NOERROR, 0)) return err; re_node_set_free (&merged_set); } } return REG_NOERROR; } static reg_errcode_t update_cur_sifted_state (preg, mctx, sctx, str_idx, dest_nodes) const regex_t *preg; re_match_context_t *mctx; re_sift_context_t *sctx; int str_idx; re_node_set *dest_nodes; { reg_errcode_t err; re_dfa_t *dfa = (re_dfa_t *)preg->buffer; const re_node_set *candidates; candidates = ((mctx->state_log[str_idx] == NULL) ? &empty_set : &mctx->state_log[str_idx]->nodes); /* At first, add the nodes which can epsilon transit to a node in DEST_NODE. */ err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; /* Then, check the limitations in the current sift_context. */ if (sctx->limits.nelem) { err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, mctx->bkref_ents, str_idx); if (BE (err != REG_NOERROR, 0)) return err; } /* Update state_log. */ sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); if (BE (sctx->sifted_states[str_idx] == NULL && err != REG_NOERROR, 0)) return err; /* If we are searching for the subexpression candidates. Note that we were from transit_state_bkref_loop() in this case. */ if (sctx->check_subexp) { err = search_subexp (preg, mctx, sctx, str_idx, dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; } if ((mctx->state_log[str_idx] != NULL && mctx->state_log[str_idx]->has_backref)) { err = sift_states_bkref (preg, mctx, sctx, str_idx, dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; } return REG_NOERROR; } static reg_errcode_t add_epsilon_src_nodes (dfa, dest_nodes, candidates) re_dfa_t *dfa; re_node_set *dest_nodes; const re_node_set *candidates; { reg_errcode_t err; int src_idx; re_node_set src_copy; err = re_node_set_init_copy (&src_copy, dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; for (src_idx = 0; src_idx < src_copy.nelem; ++src_idx) { err = re_node_set_add_intersect (dest_nodes, candidates, dfa->inveclosures + src_copy.elems[src_idx]); if (BE (err != REG_NOERROR, 0)) return err; } re_node_set_free (&src_copy); return REG_NOERROR; } static reg_errcode_t sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates) re_dfa_t *dfa; int node; re_node_set *dest_nodes; const re_node_set *candidates; { int ecl_idx; reg_errcode_t err; re_node_set *inv_eclosure = dfa->inveclosures + node; re_node_set except_nodes; re_node_set_init_empty (&except_nodes); for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { int cur_node = inv_eclosure->elems[ecl_idx]; if (cur_node == node) continue; if (dfa->edests[cur_node].nelem) { int edst1 = dfa->edests[cur_node].elems[0]; int edst2 = ((dfa->edests[cur_node].nelem > 1) ? dfa->edests[cur_node].elems[1] : -1); if ((!re_node_set_contains (inv_eclosure, edst1) && re_node_set_contains (dest_nodes, edst1)) || (edst2 > 0 && !re_node_set_contains (inv_eclosure, edst2) && re_node_set_contains (dest_nodes, edst2))) { err = re_node_set_add_intersect (&except_nodes, candidates, dfa->inveclosures + cur_node); if (BE (err != REG_NOERROR, 0)) return err; } } } for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { int cur_node = inv_eclosure->elems[ecl_idx]; if (!re_node_set_contains (&except_nodes, cur_node)) { int idx = re_node_set_contains (dest_nodes, cur_node) - 1; re_node_set_remove_at (dest_nodes, idx); } } re_node_set_free (&except_nodes); return REG_NOERROR; } static int check_dst_limits (dfa, limits, mctx, dst_node, dst_idx, src_node, src_idx) re_dfa_t *dfa; re_node_set *limits; re_match_context_t *mctx; int dst_node, dst_idx, src_node, src_idx; { int lim_idx, src_pos, dst_pos; for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { int bkref, subexp_idx/*, node_idx, cls_node*/; struct re_backref_cache_entry *ent; ent = mctx->bkref_ents + limits->elems[lim_idx]; bkref = (dfa->nodes[ent->node].type == OP_CONTEXT_NODE ? dfa->nodes[ent->node].opr.ctx_info->entity : ent->node); subexp_idx = dfa->nodes[bkref].opr.idx - 1; dst_pos = check_dst_limits_calc_pos (dfa, mctx, limits->elems[lim_idx], dfa->eclosures + dst_node, subexp_idx, dst_node, dst_idx); src_pos = check_dst_limits_calc_pos (dfa, mctx, limits->elems[lim_idx], dfa->eclosures + src_node, subexp_idx, src_node, src_idx); /* In case of: ( ) ( ) ( ) */ if (src_pos == dst_pos) continue; /* This is unrelated limitation. */ else return 1; } return 0; } static int check_dst_limits_calc_pos (dfa, mctx, limit, eclosures, subexp_idx, node, str_idx) re_dfa_t *dfa; re_match_context_t *mctx; re_node_set *eclosures; int limit, subexp_idx, node, str_idx; { struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; int pos = (str_idx < lim->subexp_from ? -1 : (lim->subexp_to < str_idx ? 1 : 0)); if (pos == 0 && (str_idx == lim->subexp_from || str_idx == lim->subexp_to)) { int node_idx; for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) { int node = eclosures->elems[node_idx]; int entity = node; re_token_type_t type= dfa->nodes[node].type; if (type == OP_CONTEXT_NODE) { entity = dfa->nodes[node].opr.ctx_info->entity; type = dfa->nodes[entity].type; } if (type == OP_BACK_REF) { int bi; for (bi = 0; bi < mctx->nbkref_ents; ++bi) { struct re_backref_cache_entry *ent = mctx->bkref_ents + bi; if (ent->node == node && ent->subexp_from == ent->subexp_to && ent->str_idx == str_idx) { int cpos, dst; dst = dfa->nexts[node]; cpos = check_dst_limits_calc_pos (dfa, mctx, limit, dfa->eclosures + dst, subexp_idx, dst, str_idx); if ((str_idx == lim->subexp_from && cpos == -1) || (str_idx == lim->subexp_to && cpos == 0)) return cpos; } } } if (type == OP_OPEN_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx && str_idx == lim->subexp_from) { pos = -1; break; } if (type == OP_CLOSE_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx && str_idx == lim->subexp_to) break; } if (node_idx == eclosures->nelem && str_idx == lim->subexp_to) pos = 1; } return pos; } /* Check the limitations of sub expressions LIMITS, and remove the nodes which are against limitations from DEST_NODES. */ static reg_errcode_t check_subexp_limits (dfa, dest_nodes, candidates, limits, bkref_ents, str_idx) re_dfa_t *dfa; re_node_set *dest_nodes; const re_node_set *candidates; re_node_set *limits; struct re_backref_cache_entry *bkref_ents; int str_idx; { reg_errcode_t err; int node_idx, lim_idx; for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { int bkref, subexp_idx; struct re_backref_cache_entry *ent; ent = bkref_ents + limits->elems[lim_idx]; if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) continue; /* This is unrelated limitation. */ bkref = (dfa->nodes[ent->node].type == OP_CONTEXT_NODE ? dfa->nodes[ent->node].opr.ctx_info->entity : ent->node); subexp_idx = dfa->nodes[bkref].opr.idx - 1; if (ent->subexp_to == str_idx) { int ops_node = -1; int cls_node = -1; for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { int node = dest_nodes->elems[node_idx]; re_token_type_t type= dfa->nodes[node].type; if (type == OP_OPEN_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) ops_node = node; else if (type == OP_CLOSE_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) cls_node = node; } /* Check the limitation of the open subexpression. */ /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ if (ops_node >= 0) { err = sub_epsilon_src_nodes(dfa, ops_node, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; } /* Check the limitation of the close subexpression. */ for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { int node = dest_nodes->elems[node_idx]; if (!re_node_set_contains (dfa->inveclosures + node, cls_node) && !re_node_set_contains (dfa->eclosures + node, cls_node)) { /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes(dfa, node, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; --node_idx; } } } else /* (ent->subexp_to != str_idx) */ { for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { int node = dest_nodes->elems[node_idx]; re_token_type_t type= dfa->nodes[node].type; if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) { if (subexp_idx != dfa->nodes[node].opr.idx) continue; if ((type == OP_CLOSE_SUBEXP && ent->subexp_to != str_idx) || (type == OP_OPEN_SUBEXP)) { /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes(dfa, node, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; } } } } } return REG_NOERROR; } /* Search for the top (in case of sctx->check_subexp < 0) or the bottom (in case of sctx->check_subexp > 0) of the subexpressions which the backreference sctx->cur_bkref can match. */ static reg_errcode_t search_subexp (preg, mctx, sctx, str_idx, dest_nodes) const regex_t *preg; re_match_context_t *mctx; re_sift_context_t *sctx; int str_idx; re_node_set *dest_nodes; { reg_errcode_t err; re_dfa_t *dfa = (re_dfa_t *)preg->buffer; re_sift_context_t local_sctx; int node_idx, node=0; /* gnupg */ const re_node_set *candidates; re_dfastate_t **lim_states = NULL; candidates = ((mctx->state_log[str_idx] == NULL) ? &empty_set : &mctx->state_log[str_idx]->nodes); local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { re_token_type_t type; int entity; node = dest_nodes->elems[node_idx]; type = dfa->nodes[node].type; entity = (type != OP_CONTEXT_NODE ? node : dfa->nodes[node].opr.ctx_info->entity); type = (type != OP_CONTEXT_NODE ? type : dfa->nodes[entity].type); if (type == OP_CLOSE_SUBEXP && sctx->check_subexp == dfa->nodes[node].opr.idx + 1) { re_dfastate_t *cur_state; /* Found the bottom of the subexpression, then search for the top of it. */ if (local_sctx.sifted_states == NULL) { /* It hasn't been initialized yet, initialize it now. */ local_sctx = *sctx; err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); if (BE (err != REG_NOERROR, 0)) return err; } local_sctx.check_subexp = -sctx->check_subexp; local_sctx.limited_states = sctx->limited_states; local_sctx.last_node = node; local_sctx.last_str_idx = local_sctx.cls_subexp_idx = str_idx; cur_state = local_sctx.sifted_states[str_idx]; err = sift_states_backward (preg, mctx, &local_sctx); local_sctx.sifted_states[str_idx] = cur_state; if (BE (err != REG_NOERROR, 0)) return err; /* There must not 2 same node in a node set. */ break; } else if (type == OP_OPEN_SUBEXP && -sctx->check_subexp == dfa->nodes[node].opr.idx + 1) { /* Found the top of the subexpression, check that the backreference can match the input string. */ char *buf; int dest_str_idx; int bkref_str_idx = re_string_cur_idx (mctx->input); int subexp_len = sctx->cls_subexp_idx - str_idx; if (subexp_len < 0 || bkref_str_idx + subexp_len > mctx->input->len) break; if (bkref_str_idx + subexp_len > mctx->input->valid_len && mctx->input->valid_len < mctx->input->len) { reg_errcode_t err; err = extend_buffers (mctx); if (BE (err != REG_NOERROR, 0)) return err; } buf = (char *) re_string_get_buffer (mctx->input); if (strncmp (buf + str_idx, buf + bkref_str_idx, subexp_len) != 0) break; if (sctx->limits.nelem && str_idx > 0) { re_dfastate_t *cur_state = sctx->sifted_states[str_idx]; if (lim_states == NULL) { lim_states = re_malloc (re_dfastate_t *, str_idx + 1); } if (local_sctx.sifted_states == NULL) { /* It hasn't been initialized yet, initialize it now. */ local_sctx = *sctx; if (BE (lim_states == NULL, 0)) return REG_ESPACE; err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); if (BE (err != REG_NOERROR, 0)) return err; } local_sctx.check_subexp = 0; local_sctx.last_node = node; local_sctx.last_str_idx = str_idx; local_sctx.limited_states = lim_states; memset (lim_states, '\0', sizeof (re_dfastate_t*) * (str_idx + 1)); err = sift_states_backward (preg, mctx, &local_sctx); if (BE (err != REG_NOERROR, 0)) return err; if (local_sctx.sifted_states[0] == NULL && local_sctx.limited_states[0] == NULL) { sctx->sifted_states[str_idx] = cur_state; break; } sctx->sifted_states[str_idx] = cur_state; } /* Successfully matched, add a new cache entry. */ dest_str_idx = bkref_str_idx + subexp_len; err = match_ctx_add_entry (mctx, sctx->cur_bkref, bkref_str_idx, str_idx, sctx->cls_subexp_idx); if (BE (err != REG_NOERROR, 0)) return err; err = clean_state_log_if_need (mctx, dest_str_idx); if (BE (err != REG_NOERROR, 0)) return err; break; } } /* Remove the top/bottom of the sub expression we processed. */ if (node_idx < dest_nodes->nelem) { err = sub_epsilon_src_nodes(dfa, node, dest_nodes, candidates); if (BE (err != REG_NOERROR, 0)) return err; /* Update state_log. */ sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; } if (local_sctx.sifted_states != NULL) re_node_set_free (&local_sctx.limits); if (lim_states != NULL) re_free (lim_states); return REG_NOERROR; } static reg_errcode_t sift_states_bkref (preg, mctx, sctx, str_idx, dest_nodes) const regex_t *preg; re_match_context_t *mctx; re_sift_context_t *sctx; int str_idx; re_node_set *dest_nodes; { reg_errcode_t err; re_dfa_t *dfa = (re_dfa_t *)preg->buffer; int node_idx, node; re_sift_context_t local_sctx; const re_node_set *candidates; candidates = ((mctx->state_log[str_idx] == NULL) ? &empty_set : &mctx->state_log[str_idx]->nodes); local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) { int entity; int cur_bkref_idx = re_string_cur_idx (mctx->input); re_token_type_t type; node = candidates->elems[node_idx]; type = dfa->nodes[node].type; entity = (type != OP_CONTEXT_NODE ? node : dfa->nodes[node].opr.ctx_info->entity); type = (type != OP_CONTEXT_NODE ? type : dfa->nodes[entity].type); if (node == sctx->cur_bkref && str_idx == cur_bkref_idx) continue; /* Avoid infinite loop for the REs like "()\1+". */ if (node == sctx->last_node && str_idx == sctx->last_str_idx) continue; if (type == OP_BACK_REF) { int enabled_idx; for (enabled_idx = 0; enabled_idx < mctx->nbkref_ents; ++enabled_idx) { int disabled_idx, subexp_len, to_idx; struct re_backref_cache_entry *entry; entry = mctx->bkref_ents + enabled_idx; subexp_len = entry->subexp_to - entry->subexp_from; to_idx = str_idx + subexp_len; if (entry->node != node || entry->str_idx != str_idx || to_idx > sctx->last_str_idx || sctx->sifted_states[to_idx] == NULL) continue; if (!STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dfa->nexts[node])) { int dst_idx; re_node_set *dsts = &sctx->sifted_states[to_idx]->nodes; for (dst_idx = 0; dst_idx < dsts->nelem; ++dst_idx) { int dst_node = dsts->elems[dst_idx]; if (dfa->nodes[dst_node].type == OP_CONTEXT_NODE && (dfa->nodes[dst_node].opr.ctx_info->entity == dfa->nexts[node])) break; } if (dst_idx == dsts->nelem) continue; } if (check_dst_limits (dfa, &sctx->limits, mctx, node, str_idx, dfa->nexts[node], to_idx)) continue; if (sctx->check_subexp == dfa->nodes[entity].opr.idx) { char *buf; buf = (char *) re_string_get_buffer (mctx->input); if (strncmp (buf + entry->subexp_from, buf + cur_bkref_idx, subexp_len) != 0) continue; err = match_ctx_add_entry (mctx, sctx->cur_bkref, cur_bkref_idx, entry->subexp_from, entry->subexp_to); if (BE (err != REG_NOERROR, 0)) return err; err = clean_state_log_if_need (mctx, cur_bkref_idx + subexp_len); if (BE (err != REG_NOERROR, 0)) return err; } else { re_dfastate_t *cur_state; entry->flag = 0; for (disabled_idx = enabled_idx + 1; disabled_idx < mctx->nbkref_ents; ++disabled_idx) { struct re_backref_cache_entry *entry2; entry2 = mctx->bkref_ents + disabled_idx; if (entry2->node != node || entry2->str_idx != str_idx) continue; entry2->flag = 1; } if (local_sctx.sifted_states == NULL) { local_sctx = *sctx; err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); if (BE (err != REG_NOERROR, 0)) return err; } local_sctx.last_node = node; local_sctx.last_str_idx = str_idx; err = re_node_set_insert (&local_sctx.limits, enabled_idx); if (BE (err < 0, 0)) return REG_ESPACE; cur_state = local_sctx.sifted_states[str_idx]; err = sift_states_backward (preg, mctx, &local_sctx); if (BE (err != REG_NOERROR, 0)) return err; if (sctx->limited_states != NULL) { err = merge_state_array (dfa, sctx->limited_states, local_sctx.sifted_states, str_idx + 1); if (BE (err != REG_NOERROR, 0)) return err; } local_sctx.sifted_states[str_idx] = cur_state; re_node_set_remove_at (&local_sctx.limits, local_sctx.limits.nelem - 1); entry->flag = 1; } } for (enabled_idx = 0; enabled_idx < mctx->nbkref_ents; ++enabled_idx) { struct re_backref_cache_entry *entry; entry = mctx->bkref_ents + enabled_idx; if (entry->node == node && entry->str_idx == str_idx) entry->flag = 0; } } } if (local_sctx.sifted_states != NULL) { re_node_set_free (&local_sctx.limits); } return REG_NOERROR; } #ifdef RE_ENABLE_I18N static int sift_states_iter_mb (preg, mctx, sctx, node_idx, str_idx, max_str_idx) const regex_t *preg; const re_match_context_t *mctx; re_sift_context_t *sctx; int node_idx, str_idx, max_str_idx; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int naccepted; /* Check the node can accept `multi byte'. */ naccepted = check_node_accept_bytes (preg, node_idx, mctx->input, str_idx); if (naccepted > 0 && str_idx + naccepted <= max_str_idx && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], dfa->nexts[node_idx])) /* The node can't accept the `multi byte', or the destination was already throwed away, then the node could't accept the current input `multi byte'. */ naccepted = 0; /* Otherwise, it is sure that the node could accept `naccepted' bytes input. */ return naccepted; } #endif /* RE_ENABLE_I18N */ /* Functions for state transition. */ /* Return the next state to which the current state STATE will transit by accepting the current input byte, and update STATE_LOG if necessary. If STATE can accept a multibyte char/collating element/back reference update the destination of STATE_LOG. */ static re_dfastate_t * transit_state (err, preg, mctx, state, fl_search) reg_errcode_t *err; const regex_t *preg; re_match_context_t *mctx; re_dfastate_t *state; int fl_search; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; re_dfastate_t **trtable, *next_state; unsigned char ch; if (re_string_cur_idx (mctx->input) + 1 >= mctx->input->bufs_len || (re_string_cur_idx (mctx->input) + 1 >= mctx->input->valid_len && mctx->input->valid_len < mctx->input->len)) { *err = extend_buffers (mctx); if (BE (*err != REG_NOERROR, 0)) return NULL; } *err = REG_NOERROR; if (state == NULL) { next_state = state; re_string_skip_bytes (mctx->input, 1); } else { #ifdef RE_ENABLE_I18N /* If the current state can accept multibyte. */ if (state->accept_mb) { *err = transit_state_mb (preg, state, mctx); if (BE (*err != REG_NOERROR, 0)) return NULL; } #endif /* RE_ENABLE_I18N */ /* Then decide the next state with the single byte. */ if (1) { /* Use transition table */ ch = re_string_fetch_byte (mctx->input); trtable = fl_search ? state->trtable_search : state->trtable; if (trtable == NULL) { trtable = build_trtable (preg, state, fl_search); if (fl_search) state->trtable_search = trtable; else state->trtable = trtable; } next_state = trtable[ch]; } else { /* don't use transition table */ next_state = transit_state_sb (err, preg, state, fl_search, mctx); if (BE (next_state == NULL && err != REG_NOERROR, 0)) return NULL; } } /* Update the state_log if we need. */ if (mctx->state_log != NULL) { int cur_idx = re_string_cur_idx (mctx->input); if (cur_idx > mctx->state_log_top) { mctx->state_log[cur_idx] = next_state; mctx->state_log_top = cur_idx; } else if (mctx->state_log[cur_idx] == 0) { mctx->state_log[cur_idx] = next_state; } else { re_dfastate_t *pstate; unsigned int context; re_node_set next_nodes, *log_nodes, *table_nodes = NULL; /* If (state_log[cur_idx] != 0), it implies that cur_idx is the destination of a multibyte char/collating element/ back reference. Then the next state is the union set of these destinations and the results of the transition table. */ pstate = mctx->state_log[cur_idx]; log_nodes = pstate->entrance_nodes; if (next_state != NULL) { table_nodes = next_state->entrance_nodes; *err = re_node_set_init_union (&next_nodes, table_nodes, log_nodes); if (BE (*err != REG_NOERROR, 0)) return NULL; } else next_nodes = *log_nodes; /* Note: We already add the nodes of the initial state, then we don't need to add them here. */ context = re_string_context_at (mctx->input, re_string_cur_idx (mctx->input) - 1, mctx->eflags, preg->newline_anchor); next_state = mctx->state_log[cur_idx] = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ if (table_nodes != NULL) re_node_set_free (&next_nodes); } /* If the next state has back references. */ if (next_state != NULL && next_state->has_backref) { *err = transit_state_bkref (preg, next_state, mctx); if (BE (*err != REG_NOERROR, 0)) return NULL; next_state = mctx->state_log[cur_idx]; } } return next_state; } /* Helper functions for transit_state. */ /* Return the next state to which the current state STATE will transit by accepting the current input byte. */ static re_dfastate_t * transit_state_sb (err, preg, state, fl_search, mctx) reg_errcode_t *err; const regex_t *preg; re_dfastate_t *state; int fl_search; re_match_context_t *mctx; { re_dfa_t *dfa = (re_dfa_t *) preg->buffer; re_node_set next_nodes; re_dfastate_t *next_state; int node_cnt, cur_str_idx = re_string_cur_idx (mctx->input); unsigned int context; *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); if (BE (*err != REG_NOERROR, 0)) return NULL; for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) { int cur_node = state->nodes.elems[node_cnt]; if (check_node_accept (preg, dfa->nodes + cur_node, mctx, cur_str_idx)) { *err = re_node_set_merge (&next_nodes, dfa->eclosures + dfa->nexts[cur_node]); if (BE (*err != REG_NOERROR, 0)) return NULL; } } if (fl_search) { #ifdef RE_ENABLE_I18N int not_initial = 0; if (MB_CUR_MAX > 1) for (node_cnt = 0; node_cnt < next_nodes.nelem; ++node_cnt) if (dfa->nodes[next_nodes.elems[node_cnt]].type == CHARACTER) { not_initial = dfa->nodes[next_nodes.elems[node_cnt]].mb_partial; break; } if (!not_initial) #endif { *err = re_node_set_merge (&next_nodes, dfa->init_state->entrance_nodes); if (BE (*err != REG_NOERROR, 0)) return NULL; } } context = re_string_context_at (mctx->input, cur_str_idx, mctx->eflags, preg->newline_anchor); next_state = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ re_node_set_free (&next_nodes); re_string_skip_bytes (mctx->input, 1); return next_state; } #ifdef RE_ENABLE_I18N static reg_errcode_t transit_state_mb (preg, pstate, mctx) const regex_t *preg; re_dfastate_t *pstate; re_match_context_t *mctx; { reg_errcode_t err; re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i; for (i = 0; i < pstate->nodes.nelem; ++i) { re_node_set dest_nodes, *new_nodes; int cur_node_idx = pstate->nodes.elems[i]; int naccepted = 0, dest_idx; unsigned int context; re_dfastate_t *dest_state; if (dfa->nodes[cur_node_idx].type == OP_CONTEXT_NODE) { context = re_string_context_at (mctx->input, re_string_cur_idx (mctx->input), mctx->eflags, preg->newline_anchor); if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, context)) continue; cur_node_idx = dfa->nodes[cur_node_idx].opr.ctx_info->entity; } /* How many bytes the node can accepts? */ if (ACCEPT_MB_NODE (dfa->nodes[cur_node_idx].type)) naccepted = check_node_accept_bytes (preg, cur_node_idx, mctx->input, re_string_cur_idx (mctx->input)); if (naccepted == 0) continue; /* The node can accepts `naccepted' bytes. */ dest_idx = re_string_cur_idx (mctx->input) + naccepted; mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted : mctx->max_mb_elem_len); err = clean_state_log_if_need (mctx, dest_idx); if (BE (err != REG_NOERROR, 0)) return err; #ifdef DEBUG assert (dfa->nexts[cur_node_idx] != -1); #endif /* `cur_node_idx' may point the entity of the OP_CONTEXT_NODE, then we use pstate->nodes.elems[i] instead. */ new_nodes = dfa->eclosures + dfa->nexts[pstate->nodes.elems[i]]; dest_state = mctx->state_log[dest_idx]; if (dest_state == NULL) dest_nodes = *new_nodes; else { err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_nodes); if (BE (err != REG_NOERROR, 0)) return err; } context = re_string_context_at (mctx->input, dest_idx - 1, mctx->eflags, preg->newline_anchor); mctx->state_log[dest_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); if (BE (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR, 0)) return err; if (dest_state != NULL) re_node_set_free (&dest_nodes); } return REG_NOERROR; } #endif /* RE_ENABLE_I18N */ static reg_errcode_t transit_state_bkref (preg, pstate, mctx) const regex_t *preg; re_dfastate_t *pstate; re_match_context_t *mctx; { reg_errcode_t err; re_dfastate_t **work_state_log; work_state_log = re_malloc (re_dfastate_t *, re_string_cur_idx (mctx->input) + 1); if (BE (work_state_log == NULL, 0)) return REG_ESPACE; err = transit_state_bkref_loop (preg, &pstate->nodes, work_state_log, mctx); re_free (work_state_log); return err; } /* Caller must allocate `work_state_log'. */ static reg_errcode_t transit_state_bkref_loop (preg, nodes, work_state_log, mctx) const regex_t *preg; re_node_set *nodes; re_dfastate_t **work_state_log; re_match_context_t *mctx; { reg_errcode_t err; re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i; regmatch_t *cur_regs = re_malloc (regmatch_t, preg->re_nsub + 1); int cur_str_idx = re_string_cur_idx (mctx->input); if (BE (cur_regs == NULL, 0)) return REG_ESPACE; for (i = 0; i < nodes->nelem; ++i) { int dest_str_idx, subexp_idx, prev_nelem, bkc_idx; int node_idx = nodes->elems[i]; unsigned int context; re_token_t *node = dfa->nodes + node_idx; re_node_set *new_dest_nodes; re_sift_context_t sctx; /* Check whether `node' is a backreference or not. */ if (node->type == OP_BACK_REF) subexp_idx = node->opr.idx; else if (node->type == OP_CONTEXT_NODE && dfa->nodes[node->opr.ctx_info->entity].type == OP_BACK_REF) { context = re_string_context_at (mctx->input, cur_str_idx, mctx->eflags, preg->newline_anchor); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) continue; subexp_idx = dfa->nodes[node->opr.ctx_info->entity].opr.idx; } else continue; /* `node' is a backreference. Check the substring which the substring matched. */ sift_ctx_init (&sctx, work_state_log, NULL, node_idx, cur_str_idx, subexp_idx); sctx.cur_bkref = node_idx; match_ctx_clear_flag (mctx); err = sift_states_backward (preg, mctx, &sctx); if (BE (err != REG_NOERROR, 0)) return err; /* And add the epsilon closures (which is `new_dest_nodes') of the backreference to appropriate state_log. */ #ifdef DEBUG assert (dfa->nexts[node_idx] != -1); #endif for (bkc_idx = 0; bkc_idx < mctx->nbkref_ents; ++bkc_idx) { int subexp_len; re_dfastate_t *dest_state; struct re_backref_cache_entry *bkref_ent; bkref_ent = mctx->bkref_ents + bkc_idx; if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) continue; subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; new_dest_nodes = ((node->type == OP_CONTEXT_NODE && subexp_len == 0) ? dfa->nodes[node_idx].opr.ctx_info->bkref_eclosure : dfa->eclosures + dfa->nexts[node_idx]); dest_str_idx = (cur_str_idx + bkref_ent->subexp_to - bkref_ent->subexp_from); context = (IS_WORD_CHAR (re_string_byte_at (mctx->input, dest_str_idx - 1)) ? CONTEXT_WORD : 0); dest_state = mctx->state_log[dest_str_idx]; prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 : mctx->state_log[cur_str_idx]->nodes.nelem); /* Add `new_dest_node' to state_log. */ if (dest_state == NULL) { mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, new_dest_nodes, context); if (BE (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR, 0)) return err; } else { re_node_set dest_nodes; err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_dest_nodes); if (BE (err != REG_NOERROR, 0)) return err; mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); if (BE (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR, 0)) return err; re_node_set_free (&dest_nodes); } /* We need to check recursively if the backreference can epsilon transit. */ if (subexp_len == 0 && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) { err = transit_state_bkref_loop (preg, new_dest_nodes, work_state_log, mctx); if (BE (err != REG_NOERROR, 0)) return err; } } } re_free (cur_regs); return REG_NOERROR; } /* Build transition table for the state. Return the new table if succeeded, otherwise return NULL. */ static re_dfastate_t ** build_trtable (preg, state, fl_search) const regex_t *preg; const re_dfastate_t *state; int fl_search; { reg_errcode_t err; re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i, j, k, ch; int ndests; /* Number of the destination states from `state'. */ re_dfastate_t **trtable, **dest_states, **dest_states_word, **dest_states_nl; re_node_set follows, *dests_node; bitset *dests_ch; bitset acceptable; /* We build DFA states which corresponds to the destination nodes from `state'. `dests_node[i]' represents the nodes which i-th destination state contains, and `dests_ch[i]' represents the characters which i-th destination state accepts. */ dests_node = re_malloc (re_node_set, SBC_MAX); dests_ch = re_malloc (bitset, SBC_MAX); /* Initialize transiton table. */ trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (BE (dests_node == NULL || dests_ch == NULL || trtable == NULL, 0)) return NULL; /* At first, group all nodes belonging to `state' into several destinations. */ ndests = group_nodes_into_DFAstates (preg, state, dests_node, dests_ch); if (BE (ndests <= 0, 0)) { re_free (dests_node); re_free (dests_ch); /* Return NULL in case of an error, trtable otherwise. */ return (ndests < 0) ? NULL : trtable; } dest_states = re_malloc (re_dfastate_t *, ndests); dest_states_word = re_malloc (re_dfastate_t *, ndests); dest_states_nl = re_malloc (re_dfastate_t *, ndests); bitset_empty (acceptable); err = re_node_set_alloc (&follows, ndests + 1); if (BE (dest_states == NULL || dest_states_word == NULL || dest_states_nl == NULL || err != REG_NOERROR, 0)) return NULL; /* Then build the states for all destinations. */ for (i = 0; i < ndests; ++i) { int next_node; re_node_set_empty (&follows); /* Merge the follows of this destination states. */ for (j = 0; j < dests_node[i].nelem; ++j) { next_node = dfa->nexts[dests_node[i].elems[j]]; if (next_node != -1) { err = re_node_set_merge (&follows, dfa->eclosures + next_node); if (BE (err != REG_NOERROR, 0)) return NULL; } } /* If search flag is set, merge the initial state. */ if (fl_search) { #ifdef RE_ENABLE_I18N int not_initial = 0; for (j = 0; j < follows.nelem; ++j) if (dfa->nodes[follows.elems[j]].type == CHARACTER) { not_initial = dfa->nodes[follows.elems[j]].mb_partial; break; } if (!not_initial) #endif { err = re_node_set_merge (&follows, dfa->init_state->entrance_nodes); if (BE (err != REG_NOERROR, 0)) return NULL; } } dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); if (BE (dest_states[i] == NULL && err != REG_NOERROR, 0)) return NULL; /* If the new state has context constraint, build appropriate states for these contexts. */ if (dest_states[i]->has_constraint) { dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_WORD); if (BE (dest_states_word[i] == NULL && err != REG_NOERROR, 0)) return NULL; dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_NEWLINE); if (BE (dest_states_nl[i] == NULL && err != REG_NOERROR, 0)) return NULL; } else { dest_states_word[i] = dest_states[i]; dest_states_nl[i] = dest_states[i]; } bitset_merge (acceptable, dests_ch[i]); } /* Update the transition table. */ /* For all characters ch...: */ for (i = 0, ch = 0; i < BITSET_UINTS; ++i) for (j = 0; j < UINT_BITS; ++j, ++ch) if ((acceptable[i] >> j) & 1) { /* The current state accepts the character ch. */ if (IS_WORD_CHAR (ch)) { for (k = 0; k < ndests; ++k) if ((dests_ch[k][i] >> j) & 1) { /* k-th destination accepts the word character ch. */ trtable[ch] = dest_states_word[k]; /* There must be only one destination which accepts character ch. See group_nodes_into_DFAstates. */ break; } } else /* not WORD_CHAR */ { for (k = 0; k < ndests; ++k) if ((dests_ch[k][i] >> j) & 1) { /* k-th destination accepts the non-word character ch. */ trtable[ch] = dest_states[k]; /* There must be only one destination which accepts character ch. See group_nodes_into_DFAstates. */ break; } } } /* new line */ if (bitset_contain (acceptable, NEWLINE_CHAR)) { /* The current state accepts newline character. */ for (k = 0; k < ndests; ++k) if (bitset_contain (dests_ch[k], NEWLINE_CHAR)) { /* k-th destination accepts newline character. */ trtable[NEWLINE_CHAR] = dest_states_nl[k]; /* There must be only one destination which accepts newline. See group_nodes_into_DFAstates. */ break; } } re_free (dest_states_nl); re_free (dest_states_word); re_free (dest_states); re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); re_free (dests_ch); re_free (dests_node); return trtable; } /* Group all nodes belonging to STATE into several destinations. Then for all destinations, set the nodes belonging to the destination to DESTS_NODE[i] and set the characters accepted by the destination to DEST_CH[i]. This function return the number of destinations. */ static int group_nodes_into_DFAstates (preg, state, dests_node, dests_ch) const regex_t *preg; const re_dfastate_t *state; re_node_set *dests_node; bitset *dests_ch; { reg_errcode_t err; const re_dfa_t *dfa = (re_dfa_t *) preg->buffer; int i, j, k; int ndests; /* Number of the destinations from `state'. */ bitset accepts; /* Characters a node can accept. */ const re_node_set *cur_nodes = &state->nodes; bitset_empty (accepts); ndests = 0; /* For all the nodes belonging to `state', */ for (i = 0; i < cur_nodes->nelem; ++i) { unsigned int constraint = 0; re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; re_token_type_t type = node->type; if (type == OP_CONTEXT_NODE) { constraint = node->constraint; node = dfa->nodes + node->opr.ctx_info->entity; type = node->type; } /* Enumerate all single byte character this node can accept. */ if (type == CHARACTER) bitset_set (accepts, node->opr.c); else if (type == SIMPLE_BRACKET) { bitset_merge (accepts, node->opr.sbcset); } else if (type == OP_PERIOD) { bitset_set_all (accepts); if (!(preg->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (preg->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } else continue; /* Check the `accepts' and sift the characters which are not match it the context. */ if (constraint) { if (constraint & NEXT_WORD_CONSTRAINT) for (j = 0; j < BITSET_UINTS; ++j) accepts[j] &= dfa->word_char[j]; else if (constraint & NEXT_NOTWORD_CONSTRAINT) for (j = 0; j < BITSET_UINTS; ++j) accepts[j] &= ~dfa->word_char[j]; else if (constraint & NEXT_NEWLINE_CONSTRAINT) { int accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); bitset_empty (accepts); if (accepts_newline) bitset_set (accepts, NEWLINE_CHAR); else continue; } } /* Then divide `accepts' into DFA states, or create a new state. */ for (j = 0; j < ndests; ++j) { bitset intersec; /* Intersection sets, see below. */ bitset remains; /* Flags, see below. */ int has_intersec, not_subset, not_consumed; /* Optimization, skip if this state doesn't accept the character. */ if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) continue; /* Enumerate the intersection set of this state and `accepts'. */ has_intersec = 0; for (k = 0; k < BITSET_UINTS; ++k) has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; /* And skip if the intersection set is empty. */ if (!has_intersec) continue; /* Then check if this state is a subset of `accepts'. */ not_subset = not_consumed = 0; for (k = 0; k < BITSET_UINTS; ++k) { not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; } /* If this state isn't a subset of `accepts', create a new group state, which has the `remains'. */ if (not_subset) { bitset_copy (dests_ch[ndests], remains); bitset_copy (dests_ch[j], intersec); err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); if (BE (err != REG_NOERROR, 0)) return -1; ++ndests; } /* Put the position in the current group. */ err = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); if (BE (err < 0, 0)) return -1; /* If all characters are consumed, go to next node. */ if (!not_consumed) break; } /* Some characters remain, create a new group. */ if (j == ndests) { bitset_copy (dests_ch[ndests], accepts); err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); if (BE (err != REG_NOERROR, 0)) return -1; ++ndests; bitset_empty (accepts); } } return ndests; } #ifdef RE_ENABLE_I18N /* Check how many bytes the node `dfa->nodes[node_idx]' accepts. Return the number of the bytes the node accepts. STR_IDX is the current index of the input string. This function handles the nodes which can accept one character, or one collating element like '.', '[a-z]', opposite to the other nodes can only accept one byte. */ static int check_node_accept_bytes (preg, node_idx, input, str_idx) const regex_t *preg; int node_idx, str_idx; const re_string_t *input; { const re_dfa_t *dfa = (re_dfa_t *) preg->buffer; const re_token_t *node = dfa->nodes + node_idx; int elem_len = re_string_elem_size_at (input, str_idx); int char_len = re_string_char_size_at (input, str_idx); int i; # ifdef _LIBC int j; uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); # endif /* _LIBC */ if (elem_len <= 1 && char_len <= 1) return 0; if (node->type == OP_PERIOD) { /* '.' accepts any one character except the following two cases. */ if ((!(preg->syntax & RE_DOT_NEWLINE) && re_string_byte_at (input, str_idx) == '\n') || ((preg->syntax & RE_DOT_NOT_NULL) && re_string_byte_at (input, str_idx) == '\0')) return 0; return char_len; } else if (node->type == COMPLEX_BRACKET) { const re_charset_t *cset = node->opr.mbcset; # ifdef _LIBC const unsigned char *pin = re_string_get_buffer (input) + str_idx; # endif /* _LIBC */ int match_len = 0; wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) ? re_string_wchar_at (input, str_idx) : 0); /* match with multibyte character? */ for (i = 0; i < cset->nmbchars; ++i) if (wc == cset->mbchars[i]) { match_len = char_len; goto check_node_accept_bytes_match; } /* match with character_class? */ for (i = 0; i < cset->nchar_classes; ++i) { wctype_t wt = cset->char_classes[i]; if (__iswctype (wc, wt)) { match_len = char_len; goto check_node_accept_bytes_match; } } # ifdef _LIBC if (nrules != 0) { unsigned int in_collseq = 0; const int32_t *table, *indirect; const unsigned char *weights, *extra; const char *collseqwc; int32_t idx; /* This #include defines a local function! */ # include /* match with collating_symbol? */ if (cset->ncoll_syms) extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (i = 0; i < cset->ncoll_syms; ++i) { const unsigned char *coll_sym = extra + cset->coll_syms[i]; /* Compare the length of input collating element and the length of current collating element. */ if (*coll_sym != elem_len) continue; /* Compare each bytes. */ for (j = 0; j < *coll_sym; j++) if (pin[j] != coll_sym[1 + j]) break; if (j == *coll_sym) { /* Match if every bytes is equal. */ match_len = j; goto check_node_accept_bytes_match; } } if (cset->nranges) { if (elem_len <= char_len) { collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); in_collseq = collseq_table_lookup (collseqwc, wc); } else in_collseq = find_collation_sequence_value (pin, elem_len); } /* match with range expression? */ for (i = 0; i < cset->nranges; ++i) if (cset->range_starts[i] <= in_collseq && in_collseq <= cset->range_ends[i]) { match_len = elem_len; goto check_node_accept_bytes_match; } /* match with equivalence_class? */ if (cset->nequiv_classes) { const unsigned char *cp = pin; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx = findidx (&cp); if (idx > 0) for (i = 0; i < cset->nequiv_classes; ++i) { int32_t equiv_class_idx = cset->equiv_classes[i]; size_t weight_len = weights[idx]; if (weight_len == weights[equiv_class_idx]) { int cnt = 0; while (cnt <= weight_len && (weights[equiv_class_idx + 1 + cnt] == weights[idx + 1 + cnt])) ++cnt; if (cnt > weight_len) { match_len = elem_len; goto check_node_accept_bytes_match; } } } } } else # endif /* _LIBC */ { /* match with range expression? */ #if __GNUC__ >= 2 wchar_t cmp_buf[] = {L'\0', L'\0', wc, L'\0', L'\0', L'\0'}; #else wchar_t cmp_buf[] = {L'\0', L'\0', L'\0', L'\0', L'\0', L'\0'}; cmp_buf[2] = wc; #endif for (i = 0; i < cset->nranges; ++i) { cmp_buf[0] = cset->range_starts[i]; cmp_buf[4] = cset->range_ends[i]; if (wcscoll (cmp_buf, cmp_buf + 2) <= 0 && wcscoll (cmp_buf + 2, cmp_buf + 4) <= 0) { match_len = char_len; goto check_node_accept_bytes_match; } } } check_node_accept_bytes_match: if (!cset->non_match) return match_len; else { if (match_len > 0) return 0; else return (elem_len > char_len) ? elem_len : char_len; } } return 0; } # ifdef _LIBC static unsigned int find_collation_sequence_value (mbs, mbs_len) const unsigned char *mbs; size_t mbs_len; { uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules == 0) { if (mbs_len == 1) { /* No valid character. Match it as a single byte character. */ const unsigned char *collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); return collseq[mbs[0]]; } return UINT_MAX; } else { int32_t idx; const unsigned char *extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (idx = 0; ;) { int mbs_cnt, found = 0; int32_t elem_mbs_len; /* Skip the name of collating element name. */ idx = idx + extra[idx] + 1; elem_mbs_len = extra[idx++]; if (mbs_len == elem_mbs_len) { for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) break; if (mbs_cnt == elem_mbs_len) /* Found the entry. */ found = 1; } /* Skip the byte sequence of the collating element. */ idx += elem_mbs_len; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the collation sequence value. */ idx += sizeof (uint32_t); /* Skip the wide char sequence of the collating element. */ idx = idx + sizeof (uint32_t) * (extra[idx] + 1); /* If we found the entry, return the sequence value. */ if (found) return *(uint32_t *) (extra + idx); /* Skip the collation sequence value. */ idx += sizeof (uint32_t); } } } # endif /* _LIBC */ #endif /* RE_ENABLE_I18N */ /* Check whether the node accepts the byte which is IDX-th byte of the INPUT. */ static int check_node_accept (preg, node, mctx, idx) const regex_t *preg; const re_token_t *node; const re_match_context_t *mctx; int idx; { const re_dfa_t *dfa = (re_dfa_t *) preg->buffer; const re_token_t *cur_node; unsigned char ch; if (node->type == OP_CONTEXT_NODE) { /* The node has constraints. Check whether the current context satisfies the constraints. */ unsigned int context = re_string_context_at (mctx->input, idx, mctx->eflags, preg->newline_anchor); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) return 0; cur_node = dfa->nodes + node->opr.ctx_info->entity; } else cur_node = node; ch = re_string_byte_at (mctx->input, idx); if (cur_node->type == CHARACTER) return cur_node->opr.c == ch; else if (cur_node->type == SIMPLE_BRACKET) return bitset_contain (cur_node->opr.sbcset, ch); else if (cur_node->type == OP_PERIOD) return !((ch == '\n' && !(preg->syntax & RE_DOT_NEWLINE)) || (ch == '\0' && (preg->syntax & RE_DOT_NOT_NULL))); else return 0; } /* Extend the buffers, if the buffers have run out. */ static reg_errcode_t extend_buffers (mctx) re_match_context_t *mctx; { reg_errcode_t ret; re_string_t *pstr = mctx->input; /* Double the lengthes of the buffers. */ ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); if (BE (ret != REG_NOERROR, 0)) return ret; if (mctx->state_log != NULL) { /* And double the length of state_log. */ mctx->state_log = re_realloc (mctx->state_log, re_dfastate_t *, pstr->bufs_len * 2); if (BE (mctx->state_log == NULL, 0)) return REG_ESPACE; } /* Then reconstruct the buffers. */ if (pstr->icase) { #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) build_wcs_upper_buffer (pstr); else #endif /* RE_ENABLE_I18N */ build_upper_buffer (pstr); } else { #ifdef RE_ENABLE_I18N if (MB_CUR_MAX > 1) build_wcs_buffer (pstr); else #endif /* RE_ENABLE_I18N */ { if (pstr->trans != NULL) re_string_translate_buffer (pstr); else pstr->valid_len = pstr->bufs_len; } } return REG_NOERROR; } /* Functions for matching context. */ static reg_errcode_t match_ctx_init (mctx, eflags, input, n) re_match_context_t *mctx; int eflags, n; re_string_t *input; { mctx->eflags = eflags; mctx->input = input; mctx->match_last = -1; if (n > 0) { mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); if (BE (mctx->bkref_ents == NULL, 0)) return REG_ESPACE; } else mctx->bkref_ents = NULL; mctx->nbkref_ents = 0; mctx->abkref_ents = n; mctx->max_mb_elem_len = 0; return REG_NOERROR; } static void match_ctx_free (mctx) re_match_context_t *mctx; { re_free (mctx->bkref_ents); } /* Add a new backreference entry to the cache. */ static reg_errcode_t match_ctx_add_entry (mctx, node, str_idx, from, to) re_match_context_t *mctx; int node, str_idx, from, to; { if (mctx->nbkref_ents >= mctx->abkref_ents) { mctx->bkref_ents = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, mctx->abkref_ents * 2); if (BE (mctx->bkref_ents == NULL, 0)) return REG_ESPACE; memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); mctx->abkref_ents *= 2; } mctx->bkref_ents[mctx->nbkref_ents].node = node; mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; mctx->bkref_ents[mctx->nbkref_ents++].flag = 0; if (mctx->max_mb_elem_len < to - from) mctx->max_mb_elem_len = to - from; return REG_NOERROR; } static void match_ctx_clear_flag (mctx) re_match_context_t *mctx; { int i; for (i = 0; i < mctx->nbkref_ents; ++i) { mctx->bkref_ents[i].flag = 0; } } static void sift_ctx_init (sctx, sifted_sts, limited_sts, last_node, last_str_idx, check_subexp) re_sift_context_t *sctx; re_dfastate_t **sifted_sts, **limited_sts; int last_node, last_str_idx, check_subexp; { sctx->sifted_states = sifted_sts; sctx->limited_states = limited_sts; sctx->last_node = last_node; sctx->last_str_idx = last_str_idx; sctx->check_subexp = check_subexp; re_node_set_init_empty (&sctx->limits); } gnupg-1.4.20/util/convert.c0000644000175000017500000001674512635262326012464 00000000000000/* convert.c - Hex conversion functions. * Copyright (C) 2006, 2008 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 3 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, see . */ #include #include #include #include #include "util.h" #define tohex(n) ((n) < 10 ? ((n) + '0') : (((n) - 10) + 'A')) /* Convert STRING consisting of hex characters into its binary representation and store that at BUFFER. BUFFER needs to be of LENGTH bytes. The function checks that the STRING will convert exactly to LENGTH bytes. The string is delimited by either end of string or a white space character. The function returns -1 on error or the length of the parsed string. */ int hex2bin (const char *string, void *buffer, size_t length) { int i; const char *s = string; for (i=0; i < length; ) { if (!hexdigitp (s) || !hexdigitp (s+1)) return -1; /* Invalid hex digits. */ ((unsigned char*)buffer)[i++] = xtoi_2 (s); s += 2; } if (*s && (!isascii (*s) || !isspace (*s)) ) return -1; /* Not followed by Nul or white space. */ if (i != length) return -1; /* Not of expected length. */ if (*s) s++; /* Skip the delimiter. */ return s - string; } /* Convert STRING consisting of hex characters into its binary representation and store that at BUFFER. BUFFER needs to be of LENGTH bytes. The function check that the STRING will convert exactly to LENGTH bytes. Colons inbetween the hex digits are allowed, if one colon has been given a colon is expected very 2 characters. The string is delimited by either end of string or a white space character. The function returns -1 on error or the length of the parsed string. */ int hexcolon2bin (const char *string, void *buffer, size_t length) { int i; const char *s = string; int need_colon = 0; for (i=0; i < length; ) { if (i==1 && *s == ':') /* Skip colons between hex digits. */ { need_colon = 1; s++; } else if (need_colon && *s == ':') s++; else if (need_colon) return -1; /* Colon expected. */ if (!hexdigitp (s) || !hexdigitp (s+1)) return -1; /* Invalid hex digits. */ ((unsigned char*)buffer)[i++] = xtoi_2 (s); s += 2; } if (*s == ':') return -1; /* Trailing colons are not allowed. */ if (*s && (!isascii (*s) || !isspace (*s)) ) return -1; /* Not followed by Nul or white space. */ if (i != length) return -1; /* Not of expected length. */ if (*s) s++; /* Skip the delimiter. */ return s - string; } static char * do_bin2hex (const void *buffer, size_t length, char *stringbuf, int with_colon) { const unsigned char *s; char *p; if (!stringbuf) { /* Not really correct for with_colon but we don't care about the one wasted byte. */ size_t n = with_colon? 3:2; size_t nbytes = n * length + 1; if (length && (nbytes-1) / n != length) { errno = ENOMEM; return NULL; } stringbuf = xtrymalloc (nbytes); if (!stringbuf) return NULL; } for (s = buffer, p = stringbuf; length; length--, s++) { if (with_colon && s != buffer) *p++ = ':'; *p++ = tohex ((*s>>4)&15); *p++ = tohex (*s&15); } *p = 0; return stringbuf; } /* Convert LENGTH bytes of data in BUFFER into hex encoding and store that at the provided STRINGBUF. STRINGBUF must be allocated of at least (2*LENGTH+1) bytes or be NULL so that the function mallocs an appropriate buffer. Returns STRINGBUF or NULL on error (which may only occur if STRINGBUF has been NULL and the internal malloc failed). */ char * bin2hex (const void *buffer, size_t length, char *stringbuf) { return do_bin2hex (buffer, length, stringbuf, 0); } /* Convert LENGTH bytes of data in BUFFER into hex encoding and store that at the provided STRINGBUF. STRINGBUF must be allocated of at least (3*LENGTH+1) bytes or be NULL so that the function mallocs an appropriate buffer. Returns STRINGBUF or NULL on error (which may only occur if STRINGBUF has been NULL and the internal malloc failed). */ char * bin2hexcolon (const void *buffer, size_t length, char *stringbuf) { return do_bin2hex (buffer, length, stringbuf, 1); } /* Convert HEXSTRING consisting of hex characters into string and store that at BUFFER. HEXSTRING is either delimited by end of string or a white space character. The function makes sure that the resulting string in BUFFER is terminated by a Nul character. BUFSIZE is the availabe length of BUFFER; if the converted result plus a possible required Nul character does not fit into this buffer, the function returns NULL and won't change the existing conent of buffer. In-place conversion is possible as long as BUFFER points to HEXSTRING. If BUFFER is NULL and bufsize is 0 the function scans HEXSTRING but does not store anything. This may be used to find the end of hexstring. On sucess the function returns a pointer to the next character after HEXSTRING (which is either end-of-string or a the next white space). If BUFLEN is not NULL the strlen of buffer is stored there; this will even be done if BUFFER has been passed as NULL. */ const char * hex2str (const char *hexstring, char *buffer, size_t bufsize, size_t *buflen) { const char *s = hexstring; int idx, count; int need_nul = 0; if (buflen) *buflen = 0; for (s=hexstring, count=0; hexdigitp (s) && hexdigitp (s+1); s += 2, count++) ; if (*s && (!isascii (*s) || !isspace (*s)) ) return NULL; /* Not followed by Nul or white space. */ /* We need to append a nul character. However we don't want that if the hexstring already ends with "00". */ need_nul = ((s == hexstring) || !(s[-2] == '0' && s[-1] == '0')); if (need_nul) count++; if (buffer) { if (count > bufsize) return NULL; /* Too long. */ for (s=hexstring, idx=0; hexdigitp (s) && hexdigitp (s+1); s += 2) ((unsigned char*)buffer)[idx++] = xtoi_2 (s); if (need_nul) buffer[idx] = 0; } if (buflen) *buflen = count - 1; return s; } /* Same as hex2str but this function allocated a new string. Returns NULL on error. If R_COUNT is not NULL, the number of scanned bytes will be stored there. ERRNO is set on error. */ char * hex2str_alloc (const char *hexstring, size_t *r_count) { const char *tail; size_t nbytes; char *result; tail = hex2str (hexstring, NULL, 0, &nbytes); if (!tail) { if (r_count) *r_count = 0; errno = EINVAL; return NULL; } if (r_count) *r_count = tail - hexstring; result = xtrymalloc (nbytes+1); if (!result) return NULL; if (!hex2str (hexstring, result, nbytes+1, NULL)) BUG (); return result; } gnupg-1.4.20/util/regex_internal.h0000644000175000017500000004536112635262326014013 00000000000000/* Extended regular expression matching and search library. Copyright (C) 2002 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa . The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #ifndef _REGEX_INTERNAL_H #define _REGEX_INTERNAL_H 1 /* Number of bits in a byte. */ #define BYTE_BITS 8 /* Number of single byte character. */ #define SBC_MAX 256 #define COLL_ELEM_LEN_MAX 8 /* The character which represents newline. */ #define NEWLINE_CHAR '\n' /* Rename to standard API for using out of glibc. */ #ifndef _LIBC # define __wctype wctype # define __iswctype iswctype # define __btowc btowc # define __mempcpy memcpy # define attribute_hidden #endif /* not _LIBC */ extern const char __re_error_msgid[] attribute_hidden; extern const size_t __re_error_msgid_idx[] attribute_hidden; /* Number of bits in an unsinged int. */ #define UINT_BITS (sizeof (unsigned int) * BYTE_BITS) /* Number of unsigned int in an bit_set. */ #define BITSET_UINTS ((SBC_MAX + UINT_BITS - 1) / UINT_BITS) typedef unsigned int bitset[BITSET_UINTS]; typedef unsigned int *re_bitset_ptr_t; #define bitset_set(set,i) (set[i / UINT_BITS] |= 1 << i % UINT_BITS) #define bitset_clear(set,i) (set[i / UINT_BITS] &= ~(1 << i % UINT_BITS)) #define bitset_contain(set,i) (set[i / UINT_BITS] & (1 << i % UINT_BITS)) #define bitset_empty(set) memset (set, 0, sizeof (unsigned int) * BITSET_UINTS) #define bitset_set_all(set) \ memset (set, 255, sizeof (unsigned int) * BITSET_UINTS) #define bitset_copy(dest,src) \ memcpy (dest, src, sizeof (unsigned int) * BITSET_UINTS) static inline void bitset_not (bitset set); static inline void bitset_merge (bitset dest, const bitset src); #if 0 /* gnupg */ static inline void bitset_not_merge (bitset dest, const bitset src); #endif #define PREV_WORD_CONSTRAINT 0x0001 #define PREV_NOTWORD_CONSTRAINT 0x0002 #define NEXT_WORD_CONSTRAINT 0x0004 #define NEXT_NOTWORD_CONSTRAINT 0x0008 #define PREV_NEWLINE_CONSTRAINT 0x0010 #define NEXT_NEWLINE_CONSTRAINT 0x0020 #define PREV_BEGBUF_CONSTRAINT 0x0040 #define NEXT_ENDBUF_CONSTRAINT 0x0080 #define DUMMY_CONSTRAINT 0x0100 typedef enum { INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, LINE_FIRST = PREV_NEWLINE_CONSTRAINT, LINE_LAST = NEXT_NEWLINE_CONSTRAINT, BUF_FIRST = PREV_BEGBUF_CONSTRAINT, BUF_LAST = NEXT_ENDBUF_CONSTRAINT, WORD_DELIM = DUMMY_CONSTRAINT } re_context_type; typedef struct { int alloc; int nelem; int *elems; } re_node_set; typedef enum { NON_TYPE = 0, /* Token type, these are used only by token. */ OP_OPEN_BRACKET, OP_CLOSE_BRACKET, OP_CHARSET_RANGE, OP_OPEN_DUP_NUM, OP_CLOSE_DUP_NUM, OP_NON_MATCH_LIST, OP_OPEN_COLL_ELEM, OP_CLOSE_COLL_ELEM, OP_OPEN_EQUIV_CLASS, OP_CLOSE_EQUIV_CLASS, OP_OPEN_CHAR_CLASS, OP_CLOSE_CHAR_CLASS, OP_WORD, OP_NOTWORD, BACK_SLASH, /* Tree type, these are used only by tree. */ CONCAT, ALT, SUBEXP, SIMPLE_BRACKET, #ifdef RE_ENABLE_I18N COMPLEX_BRACKET, #endif /* RE_ENABLE_I18N */ /* Node type, These are used by token, node, tree. */ OP_OPEN_SUBEXP, OP_CLOSE_SUBEXP, OP_PERIOD, CHARACTER, END_OF_RE, OP_ALT, OP_DUP_ASTERISK, OP_DUP_PLUS, OP_DUP_QUESTION, OP_BACK_REF, ANCHOR, OP_CONTEXT_NODE, /* Dummy marker. */ END_OF_RE_TOKEN_T } re_token_type_t; #ifdef RE_ENABLE_I18N typedef struct { /* Multibyte characters. */ wchar_t *mbchars; /* Collating symbols. */ # ifdef _LIBC int32_t *coll_syms; # endif /* Equivalence classes. */ # ifdef _LIBC int32_t *equiv_classes; # endif /* Range expressions. */ # ifdef _LIBC uint32_t *range_starts; uint32_t *range_ends; # else /* not _LIBC */ wchar_t *range_starts; wchar_t *range_ends; # endif /* not _LIBC */ /* Character classes. */ wctype_t *char_classes; /* If this character set is the non-matching list. */ unsigned int non_match : 1; /* # of multibyte characters. */ int nmbchars; /* # of collating symbols. */ int ncoll_syms; /* # of equivalence classes. */ int nequiv_classes; /* # of range expressions. */ int nranges; /* # of character classes. */ int nchar_classes; } re_charset_t; #endif /* RE_ENABLE_I18N */ typedef struct { union { unsigned char c; /* for CHARACTER */ re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ #ifdef RE_ENABLE_I18N re_charset_t *mbcset; /* for COMPLEX_BRACKET */ #endif /* RE_ENABLE_I18N */ int idx; /* for BACK_REF */ re_context_type ctx_type; /* for ANCHOR */ struct { int entity; /* for OP_CONTEXT_NODE, index of the entity */ re_node_set *bkref_eclosure; } *ctx_info; } opr; #if __GNUC__ >= 2 re_token_type_t type : 8; #else re_token_type_t type; #endif unsigned int constraint : 10; /* context constraint */ unsigned int duplicated : 1; #ifdef RE_ENABLE_I18N unsigned int mb_partial : 1; #endif } re_token_t; #define IS_EPSILON_NODE(type) \ ((type) == OP_ALT || (type) == OP_DUP_ASTERISK || (type) == OP_DUP_PLUS \ || (type) == OP_DUP_QUESTION || (type) == ANCHOR \ || (type) == OP_OPEN_SUBEXP || (type) == OP_CLOSE_SUBEXP) #define ACCEPT_MB_NODE(type) \ ((type) == COMPLEX_BRACKET || (type) == OP_PERIOD) struct re_string_t { /* Indicate the raw buffer which is the original string passed as an argument of regexec(), re_search(), etc.. */ const unsigned char *raw_mbs; /* Store the multibyte string. In case of "case insensitive mode" like REG_ICASE, upper cases of the string are stored, otherwise MBS points the same address that RAW_MBS points. */ unsigned char *mbs; /* Store the case sensitive multibyte string. In case of "case insensitive mode", the original string are stored, otherwise MBS_CASE points the same address that MBS points. */ unsigned char *mbs_case; #ifdef RE_ENABLE_I18N /* Store the wide character string which is corresponding to MBS. */ wint_t *wcs; mbstate_t cur_state; #endif /* Index in RAW_MBS. Each character mbs[i] corresponds to raw_mbs[raw_mbs_idx + i]. */ int raw_mbs_idx; /* The length of the valid characters in the buffers. */ int valid_len; /* The length of the buffers MBS, MBS_CASE, and WCS. */ int bufs_len; /* The index in MBS, which is updated by re_string_fetch_byte. */ int cur_idx; /* This is length_of_RAW_MBS - RAW_MBS_IDX. */ int len; /* End of the buffer may be shorter than its length in the cases such as re_match_2, re_search_2. Then, we use STOP for end of the buffer instead of LEN. */ int stop; /* The context of mbs[0]. We store the context independently, since the context of mbs[0] may be different from raw_mbs[0], which is the beginning of the input string. */ unsigned int tip_context; /* The translation passed as a part of an argument of re_compile_pattern. */ RE_TRANSLATE_TYPE trans; /* 1 if REG_ICASE. */ unsigned int icase : 1; }; typedef struct re_string_t re_string_t; /* In case of REG_ICASE, we allocate the buffer dynamically for mbs. */ #define MBS_ALLOCATED(pstr) (pstr->icase) /* In case that we need translation, we allocate the buffer dynamically for mbs_case. Note that mbs == mbs_case if not REG_ICASE. */ #define MBS_CASE_ALLOCATED(pstr) (pstr->trans != NULL) static reg_errcode_t re_string_allocate (re_string_t *pstr, const char *str, int len, int init_len, RE_TRANSLATE_TYPE trans, int icase); static reg_errcode_t re_string_construct (re_string_t *pstr, const char *str, int len, RE_TRANSLATE_TYPE trans, int icase); static reg_errcode_t re_string_reconstruct (re_string_t *pstr, int idx, int eflags, int newline); static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, int new_buf_len); #ifdef RE_ENABLE_I18N static void build_wcs_buffer (re_string_t *pstr); static void build_wcs_upper_buffer (re_string_t *pstr); #endif /* RE_ENABLE_I18N */ static void build_upper_buffer (re_string_t *pstr); static void re_string_translate_buffer (re_string_t *pstr); static void re_string_destruct (re_string_t *pstr); #ifdef RE_ENABLE_I18N static int re_string_elem_size_at (const re_string_t *pstr, int idx); static inline int re_string_char_size_at (const re_string_t *pstr, int idx); static inline wint_t re_string_wchar_at (const re_string_t *pstr, int idx); #endif /* RE_ENABLE_I18N */ static unsigned int re_string_context_at (const re_string_t *input, int idx, int eflags, int newline_anchor); #define re_string_peek_byte(pstr, offset) \ ((pstr)->mbs[(pstr)->cur_idx + offset]) #define re_string_peek_byte_case(pstr, offset) \ ((pstr)->mbs_case[(pstr)->cur_idx + offset]) #define re_string_fetch_byte(pstr) \ ((pstr)->mbs[(pstr)->cur_idx++]) #define re_string_fetch_byte_case(pstr) \ ((pstr)->mbs_case[(pstr)->cur_idx++]) #define re_string_first_byte(pstr, idx) \ ((idx) == (pstr)->len || (pstr)->wcs[idx] != WEOF) #define re_string_is_single_byte_char(pstr, idx) \ ((pstr)->wcs[idx] != WEOF && ((pstr)->len == (idx) \ || (pstr)->wcs[(idx) + 1] != WEOF)) #define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) #define re_string_cur_idx(pstr) ((pstr)->cur_idx) #define re_string_get_buffer(pstr) ((pstr)->mbs) #define re_string_length(pstr) ((pstr)->len) #define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) #define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) #define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) #define re_free(p) free (p) struct bin_tree_t { struct bin_tree_t *parent; struct bin_tree_t *left; struct bin_tree_t *right; /* `node_idx' is the index in dfa->nodes, if `type' == 0. Otherwise `type' indicate the type of this node. */ re_token_type_t type; int node_idx; int first; int next; re_node_set eclosure; }; typedef struct bin_tree_t bin_tree_t; #define CONTEXT_WORD 1 #define CONTEXT_NEWLINE (CONTEXT_WORD << 1) #define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) #define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) #define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) #define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) #define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) #define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) #define IS_ORDINARY_CONTEXT(c) ((c) == 0) #define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') #define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) #define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) #define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) struct re_dfastate_t { unsigned int hash; re_node_set nodes; re_node_set *entrance_nodes; struct re_dfastate_t **trtable; struct re_dfastate_t **trtable_search; /* If this state is a special state. A state is a special state if the state is the halt state, or a anchor. */ unsigned int context : 2; unsigned int halt : 1; /* If this state can accept `multi byte'. Note that we refer to multibyte characters, and multi character collating elements as `multi byte'. */ unsigned int accept_mb : 1; /* If this state has backreference node(s). */ unsigned int has_backref : 1; unsigned int has_constraint : 1; }; typedef struct re_dfastate_t re_dfastate_t; typedef struct { /* start <= node < end */ int start; int end; } re_subexp_t; struct re_state_table_entry { int num; int alloc; re_dfastate_t **array; }; struct re_backref_cache_entry { int node; int str_idx; int subexp_from; int subexp_to; int flag; }; typedef struct { /* EFLAGS of the argument of regexec. */ int eflags; /* Where the matching ends. */ int match_last; int last_node; /* The string object corresponding to the input string. */ re_string_t *input; /* The state log used by the matcher. */ re_dfastate_t **state_log; int state_log_top; /* Back reference cache. */ int nbkref_ents; int abkref_ents; struct re_backref_cache_entry *bkref_ents; int max_mb_elem_len; } re_match_context_t; typedef struct { int cur_bkref; int cls_subexp_idx; re_dfastate_t **sifted_states; re_dfastate_t **limited_states; re_node_set limits; int last_node; int last_str_idx; int check_subexp; } re_sift_context_t; struct re_fail_stack_ent_t { int idx; int node; regmatch_t *regs; re_node_set eps_via_nodes; }; struct re_fail_stack_t { int num; int alloc; struct re_fail_stack_ent_t *stack; }; struct re_dfa_t { re_bitset_ptr_t word_char; /* number of subexpressions `re_nsub' is in regex_t. */ int subexps_alloc; re_subexp_t *subexps; re_token_t *nodes; int nodes_alloc; int nodes_len; bin_tree_t *str_tree; int *firsts; int *nexts; re_node_set *edests; re_node_set *eclosures; re_node_set *inveclosures; struct re_state_table_entry *state_table; unsigned int state_hash_mask; re_dfastate_t *init_state; re_dfastate_t *init_state_word; re_dfastate_t *init_state_nl; re_dfastate_t *init_state_begbuf; int states_alloc; int init_node; int nbackref; /* The number of backreference in this dfa. */ /* If this dfa has "multibyte node", which is a backreference or a node which can accept multibyte character or multi character collating element. */ #ifdef DEBUG char* re_str; #endif unsigned int has_plural_match : 1; unsigned int has_mb_node : 1; }; typedef struct re_dfa_t re_dfa_t; static reg_errcode_t re_node_set_alloc (re_node_set *set, int size); static reg_errcode_t re_node_set_init_1 (re_node_set *set, int elem); static reg_errcode_t re_node_set_init_2 (re_node_set *set, int elem1, int elem2); #define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) static reg_errcode_t re_node_set_init_copy (re_node_set *dest, const re_node_set *src); static reg_errcode_t re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, const re_node_set *src2); static reg_errcode_t re_node_set_init_union (re_node_set *dest, const re_node_set *src1, const re_node_set *src2); static reg_errcode_t re_node_set_merge (re_node_set *dest, const re_node_set *src); static int re_node_set_insert (re_node_set *set, int elem); static int re_node_set_compare (const re_node_set *set1, const re_node_set *set2); static int re_node_set_contains (const re_node_set *set, int elem); static void re_node_set_remove_at (re_node_set *set, int idx); #define re_node_set_empty(p) ((p)->nelem = 0) #define re_node_set_free(set) re_free ((set)->elems) static int re_dfa_add_node (re_dfa_t *dfa, re_token_t token, int mode); static re_dfastate_t *re_acquire_state (reg_errcode_t *err, re_dfa_t *dfa, const re_node_set *nodes); static re_dfastate_t *re_acquire_state_context (reg_errcode_t *err, re_dfa_t *dfa, const re_node_set *nodes, unsigned int context); typedef enum { SB_CHAR, MB_CHAR, EQUIV_CLASS, COLL_SYM, CHAR_CLASS } bracket_elem_type; typedef struct { bracket_elem_type type; union { unsigned char ch; unsigned char *name; wchar_t wch; } opr; } bracket_elem_t; /* Inline functions for bitset operation. */ static inline void bitset_not (set) bitset set; { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_UINTS; ++bitset_i) set[bitset_i] = ~set[bitset_i]; } static inline void bitset_merge (dest, src) bitset dest; const bitset src; { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_UINTS; ++bitset_i) dest[bitset_i] |= src[bitset_i]; } #if 0 /* gnupg */ static inline void bitset_not_merge (dest, src) bitset dest; const bitset src; { int i; for (i = 0; i < BITSET_UINTS; ++i) dest[i] |= ~src[i]; } #endif #ifdef RE_ENABLE_I18N /* Inline functions for re_string. */ static inline int re_string_char_size_at (pstr, idx) const re_string_t *pstr; int idx; { int byte_idx; if (MB_CUR_MAX == 1) return 1; for (byte_idx = 1; idx + byte_idx < pstr->len; ++byte_idx) if (pstr->wcs[idx + byte_idx] != WEOF) break; return byte_idx; } static inline wint_t re_string_wchar_at (pstr, idx) const re_string_t *pstr; int idx; { if (MB_CUR_MAX == 1) return (wint_t) pstr->mbs[idx]; return (wint_t) pstr->wcs[idx]; } static int re_string_elem_size_at (pstr, idx) const re_string_t *pstr; int idx; { #ifdef _LIBC const unsigned char *p, *extra; const int32_t *table, *indirect; int32_t tmp; # include uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); p = pstr->mbs + idx; tmp = findidx (&p); return p - pstr->mbs - idx; } else #endif /* _LIBC */ return 1; } #endif /* RE_ENABLE_I18N */ #endif /* _REGEX_INTERNAL_H */ gnupg-1.4.20/util/strgutil.c0000644000175000017500000010644612635262326012657 00000000000000/* strgutil.c - string utilities * Copyright (C) 1994, 1998, 1999, 2000, 2001, * 2003, 2004, 2005, 2009 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 3 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, see . */ #include #include #include #include #include #ifdef HAVE_LANGINFO_CODESET #include #endif /* For W32 we use dynamic loading of the iconv dll and don't need any * iconv headers at all. */ #ifndef _WIN32 # ifndef HAVE_ICONV # undef USE_GNUPG_ICONV # endif #endif #ifdef USE_GNUPG_ICONV # include # ifndef _WIN32 # include # endif #endif #include "types.h" #include "util.h" #include "memory.h" #include "i18n.h" #include "dynload.h" #include "estream-printf.h" /* Our xasprintf replacements are expected to work with our memory allocator. Let's test for this here. */ #if !defined(_ESTREAM_PRINTF_MALLOC) || !defined(_ESTREAM_PRINTF_FREE) #error Please define _ESTREAM_PRINTF_MALLOC and _FREE #endif #ifndef USE_GNUPG_ICONV static ushort koi8_unicode[128] = { 0x2500,0x2502,0x250c,0x2510,0x2514,0x2518,0x251c,0x2524, 0x252c,0x2534,0x253c,0x2580,0x2584,0x2588,0x258c,0x2590, 0x2591,0x2592,0x2593,0x2320,0x25a0,0x2219,0x221a,0x2248, 0x2264,0x2265,0x00a0,0x2321,0x00b0,0x00b2,0x00b7,0x00f7, 0x2550,0x2551,0x2552,0x0451,0x2553,0x2554,0x2555,0x2556, 0x2557,0x2558,0x2559,0x255a,0x255b,0x255c,0x255d,0x255e, 0x255f,0x2560,0x2561,0x0401,0x2562,0x2563,0x2564,0x2565, 0x2566,0x2567,0x2568,0x2569,0x256a,0x256b,0x256c,0x00a9, 0x044e,0x0430,0x0431,0x0446,0x0434,0x0435,0x0444,0x0433, 0x0445,0x0438,0x0439,0x043a,0x043b,0x043c,0x043d,0x043e, 0x043f,0x044f,0x0440,0x0441,0x0442,0x0443,0x0436,0x0432, 0x044c,0x044b,0x0437,0x0448,0x044d,0x0449,0x0447,0x044a, 0x042e,0x0410,0x0411,0x0426,0x0414,0x0415,0x0424,0x0413, 0x0425,0x0418,0x0419,0x041a,0x041b,0x041c,0x041d,0x041e, 0x041f,0x042f,0x0420,0x0421,0x0422,0x0423,0x0416,0x0412, 0x042c,0x042b,0x0417,0x0428,0x042d,0x0429,0x0427,0x042a }; static ushort latin2_unicode[128] = { 0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087, 0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F, 0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097, 0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F, 0x00A0,0x0104,0x02D8,0x0141,0x00A4,0x013D,0x015A,0x00A7, 0x00A8,0x0160,0x015E,0x0164,0x0179,0x00AD,0x017D,0x017B, 0x00B0,0x0105,0x02DB,0x0142,0x00B4,0x013E,0x015B,0x02C7, 0x00B8,0x0161,0x015F,0x0165,0x017A,0x02DD,0x017E,0x017C, 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7, 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E, 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7, 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF, 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7, 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F, 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7, 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9 }; #endif /*!USE_GNUPG_ICONV*/ #ifndef MB_LEN_MAX #define MB_LEN_MAX 16 #endif static const char *active_charset_name = "iso-8859-1"; static ushort *active_charset = NULL; static int no_translation = 0; static int use_iconv = 0; #ifdef _WIN32 typedef void* iconv_t; #ifndef ICONV_CONST #define ICONV_CONST const #endif iconv_t (* __stdcall iconv_open) (const char *tocode, const char *fromcode); size_t (* __stdcall iconv) (iconv_t cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft); int (* __stdcall iconv_close) (iconv_t cd); #endif /*_WIN32*/ #ifdef _WIN32 static int load_libiconv (void) { static int done; if (!done) { void *handle; done = 1; /* Do it right now because we might get called recursivly through gettext. */ handle = dlopen ("iconv.dll", RTLD_LAZY); if (handle) { iconv_open = dlsym (handle, "libiconv_open"); if (iconv_open) iconv = dlsym (handle, "libiconv"); if (iconv) iconv_close = dlsym (handle, "libiconv_close"); } if (!handle || !iconv_close) { log_info (_("error loading `%s': %s\n"), "iconv.dll", dlerror ()); log_info(_("please see http://www.gnupg.org/download/iconv.html " "for more information\n")); iconv_open = NULL; iconv = NULL; iconv_close = NULL; if (handle) dlclose (handle); } } return iconv_open? 0: -1; } #endif /* _WIN32 */ void free_strlist( STRLIST sl ) { STRLIST sl2; for(; sl; sl = sl2 ) { sl2 = sl->next; xfree(sl); } } STRLIST add_to_strlist( STRLIST *list, const char *string ) { STRLIST sl; sl = xmalloc( sizeof *sl + strlen(string)); sl->flags = 0; strcpy(sl->d, string); sl->next = *list; *list = sl; return sl; } /**************** * Same as add_to_strlist() but if is_utf8 is *not* set a conversion * to UTF8 is done */ STRLIST add_to_strlist2( STRLIST *list, const char *string, int is_utf8 ) { STRLIST sl; if( is_utf8 ) sl = add_to_strlist( list, string ); else { char *p = native_to_utf8( string ); sl = add_to_strlist( list, p ); xfree( p ); } return sl; } STRLIST append_to_strlist( STRLIST *list, const char *string ) { STRLIST r, sl; sl = xmalloc( sizeof *sl + strlen(string)); sl->flags = 0; strcpy(sl->d, string); sl->next = NULL; if( !*list ) *list = sl; else { for( r = *list; r->next; r = r->next ) ; r->next = sl; } return sl; } STRLIST append_to_strlist2( STRLIST *list, const char *string, int is_utf8 ) { STRLIST sl; if( is_utf8 ) sl = append_to_strlist( list, string ); else { char *p = native_to_utf8( string ); sl = append_to_strlist( list, p ); xfree( p ); } return sl; } STRLIST strlist_prev( STRLIST head, STRLIST node ) { STRLIST n; for(n=NULL; head && head != node; head = head->next ) n = head; return n; } STRLIST strlist_last( STRLIST node ) { if( node ) for( ; node->next ; node = node->next ) ; return node; } char * pop_strlist( STRLIST *list ) { char *str=NULL; STRLIST sl=*list; if(sl) { str=xmalloc(strlen(sl->d)+1); strcpy(str,sl->d); *list=sl->next; xfree(sl); } return str; } /**************** * Look for the substring SUB in buffer and return a pointer to that * substring in BUF or NULL if not found. * Comparison is case-insensitive. */ const char * memistr( const char *buf, size_t buflen, const char *sub ) { const byte *t, *s ; size_t n; for( t=buf, n=buflen, s=sub ; n ; t++, n-- ) if( toupper(*t) == toupper(*s) ) { for( buf=t++, buflen = n--, s++; n && toupper(*t) == toupper(*s); t++, s++, n-- ) ; if( !*s ) return buf; t = buf; n = buflen; s = sub ; } return NULL ; } const char * ascii_memistr( const char *buf, size_t buflen, const char *sub ) { const byte *t, *s ; size_t n; for( t=buf, n=buflen, s=sub ; n ; t++, n-- ) if( ascii_toupper(*t) == ascii_toupper(*s) ) { for( buf=t++, buflen = n--, s++; n && ascii_toupper(*t) == ascii_toupper(*s); t++, s++, n-- ) ; if( !*s ) return buf; t = buf; n = buflen; s = sub ; } return NULL ; } /* Like strncpy() but copy at max N-1 bytes and append a '\0'. With * N given as 0 nothing is copied at all. With DEST given as NULL * sufficient memory is allocated using xmalloc (note that xmalloc is * guaranteed to succeed or to abort the process). */ char * mem2str( char *dest , const void *src , size_t n ) { char *d; const char *s; if( n ) { if( !dest ) dest = xmalloc( n ) ; d = dest; s = src ; for(n--; n && *s; n-- ) *d++ = *s++; *d = '\0' ; } return dest ; } /* * Remove leading and trailing white spaces */ char * trim_spaces( char *str ) { char *string, *p, *mark; string = str; /* Find first non space character. */ for( p=string; *p && isspace( *(byte*)p ) ; p++ ) ; /* Move characters. */ for( (mark = NULL); (*string = *p); string++, p++ ) if( isspace( *(byte*)p ) ) { if( !mark ) mark = string ; } else mark = NULL ; if( mark ) *mark = '\0' ; /* Remove trailing spaces. */ return str ; } unsigned int trim_trailing_chars( byte *line, unsigned len, const char *trimchars ) { byte *p, *mark; unsigned n; for(mark=NULL, p=line, n=0; n < len; n++, p++ ) { if( strchr(trimchars, *p ) ) { if( !mark ) mark = p; } else mark = NULL; } if( mark ) { *mark = 0; return mark - line; } return len; } /**************** * Remove trailing white spaces and return the length of the buffer */ unsigned trim_trailing_ws( byte *line, unsigned len ) { return trim_trailing_chars( line, len, " \t\r\n" ); } unsigned int check_trailing_chars( const byte *line, unsigned int len, const char *trimchars ) { const byte *p, *mark; unsigned int n; for(mark=NULL, p=line, n=0; n < len; n++, p++ ) { if( strchr(trimchars, *p ) ) { if( !mark ) mark = p; } else mark = NULL; } if( mark ) { return mark - line; } return len; } /**************** * Remove trailing white spaces and return the length of the buffer */ unsigned int check_trailing_ws( const byte *line, unsigned int len ) { return check_trailing_chars( line, len, " \t\r\n" ); } int string_count_chr( const char *string, int c ) { int count; for(count=0; *string; string++ ) if( *string == c ) count++; return count; } /* Check whether the string has characters not valid in an RFC-822 address. To cope with OpenPGP we ignore non-ascii characters so that for example umlauts are legal in an email address. An OpenPGP user ID must be utf-8 encoded but there is no strict requirement for RFC-822. Thus to avoid IDNA encoding we put the address verbatim as utf-8 into the user ID under the assumption that mail programs handle IDNA at a lower level and take OpenPGP user IDs as utf-8. Note that we can't do an utf-8 encoding checking here because in keygen.c this function is called with the native encoding and native to utf-8 encoding is only done later. */ int has_invalid_email_chars (const char *s) { int at_seen=0; const char *valid_chars= "01234567890_-.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; for ( ; *s; s++ ) { if ( *s & 0x80 ) continue; /* We only care about ASCII. */ 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; } /* Check whether NAME represents a valid mailbox according t RFC822. Returns true if so. */ int is_valid_mailbox (const char *name) { return !( !name || !*name || has_invalid_email_chars (name) || string_count_chr (name,'@') != 1 || *name == '@' || name[strlen(name)-1] == '@' || name[strlen(name)-1] == '.' || strstr (name, "..") ); } #ifdef USE_GNUPG_ICONV static void handle_iconv_error (const char *to, const char *from, int use_fallback) { if (errno == EINVAL) { static int shown1, shown2; int x; if (to && !strcmp (to, "utf-8")) { x = shown1; shown1 = 1; } else { x = shown2; shown2 = 1; } if (!x) log_info (_("conversion from `%s' to `%s' not available\n"), from, to); } else { static int shown; if (!shown) log_info (_("iconv_open failed: %s\n"), strerror (errno)); shown = 1; } if (use_fallback) { /* To avoid further error messages we fallback to Latin-1 for the native encoding. This is justified as one can expect that on a utf-8 enabled system nl_langinfo() will work and thus we won't never get to here. Thus Latin-1 seems to be a reasonable default. */ active_charset_name = "iso-8859-1"; no_translation = 0; active_charset = NULL; use_iconv = 0; } } #endif /*USE_GNUPG_ICONV*/ int set_native_charset( const char *newset ) { const char *full_newset; if (!newset) { #ifdef _WIN32 static char codepage[30]; unsigned int cpno; const char *aliases; /* We are a console program thus we need to use the GetConsoleOutputCP function and not the the GetACP which would give the codepage for a GUI program. Note this is not a bulletproof detection because GetConsoleCP might return a different one for console input. Not sure how to cope with that. If the console Code page is not known we fall back to the system code page. */ cpno = GetConsoleOutputCP (); if (!cpno) cpno = GetACP (); sprintf (codepage, "CP%u", cpno ); /* Resolve alias. We use a long string string and not the usual array to optimize if the code is taken to a DSO. Taken from libiconv 1.9.2. */ newset = codepage; for (aliases = ("CP936" "\0" "GBK" "\0" "CP1361" "\0" "JOHAB" "\0" "CP20127" "\0" "ASCII" "\0" "CP20866" "\0" "KOI8-R" "\0" "CP21866" "\0" "KOI8-RU" "\0" "CP28591" "\0" "ISO-8859-1" "\0" "CP28592" "\0" "ISO-8859-2" "\0" "CP28593" "\0" "ISO-8859-3" "\0" "CP28594" "\0" "ISO-8859-4" "\0" "CP28595" "\0" "ISO-8859-5" "\0" "CP28596" "\0" "ISO-8859-6" "\0" "CP28597" "\0" "ISO-8859-7" "\0" "CP28598" "\0" "ISO-8859-8" "\0" "CP28599" "\0" "ISO-8859-9" "\0" "CP28605" "\0" "ISO-8859-15" "\0" "CP65001" "\0" "UTF-8" "\0"); *aliases; aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) { if (!strcmp (codepage, aliases) ||(*aliases == '*' && !aliases[1])) { newset = aliases + strlen (aliases) + 1; break; } } #else #ifdef HAVE_LANGINFO_CODESET newset = nl_langinfo (CODESET); #else /* !HAVE_LANGINFO_CODESET */ /* Try to get the used charset from environment variables. */ static char codepage[30]; const char *lc, *dot, *mod; strcpy (codepage, "iso-8859-1"); lc = getenv ("LC_ALL"); if (!lc || !*lc) { lc = getenv ("LC_CTYPE"); if (!lc || !*lc) lc = getenv ("LANG"); } if (lc && *lc) { dot = strchr (lc, '.'); if (dot) { mod = strchr (++dot, '@'); if (!mod) mod = dot + strlen (dot); if (mod - dot < sizeof codepage && dot != mod) { memcpy (codepage, dot, mod - dot); codepage [mod - dot] = 0; } } } newset = codepage; #endif /* !HAVE_LANGINFO_CODESET */ #endif } full_newset = newset; if (strlen (newset) > 3 && !ascii_memcasecmp (newset, "iso", 3)) { newset += 3; if (*newset == '-' || *newset == '_') newset++; } /* Note that we silently assume that plain ASCII is actually meant as Latin-1. This makes sense because many Unix system don't have their locale set up properly and thus would get annoying error messages and we have to handle all the "bug" reports. Latin-1 has always been the character set used for 8 bit characters on Unix systems. */ if( !*newset || !ascii_strcasecmp (newset, "8859-1" ) || !ascii_strcasecmp (newset, "646" ) || !ascii_strcasecmp (newset, "ASCII" ) || !ascii_strcasecmp (newset, "ANSI_X3.4-1968" ) ) { active_charset_name = "iso-8859-1"; no_translation = 0; active_charset = NULL; use_iconv = 0; } else if( !ascii_strcasecmp (newset, "utf8" ) || !ascii_strcasecmp(newset, "utf-8") ) { active_charset_name = "utf-8"; no_translation = 1; active_charset = NULL; use_iconv = 0; } #ifdef USE_GNUPG_ICONV else { iconv_t cd; #ifdef _WIN32 if (load_libiconv ()) return G10ERR_GENERAL; #endif /*_WIN32*/ cd = iconv_open (full_newset, "utf-8"); if (cd == (iconv_t)-1) { handle_iconv_error (full_newset, "utf-8", 0); return G10ERR_GENERAL; } iconv_close (cd); cd = iconv_open ("utf-8", full_newset); if (cd == (iconv_t)-1) { handle_iconv_error ("utf-8", full_newset, 0); return G10ERR_GENERAL; } iconv_close (cd); active_charset_name = full_newset; no_translation = 0; active_charset = NULL; use_iconv = 1; } #else /*!USE_GNUPG_ICONV*/ else if( !ascii_strcasecmp( newset, "8859-2" ) ) { active_charset_name = "iso-8859-2"; no_translation = 0; active_charset = latin2_unicode; use_iconv = 0; } else if( !ascii_strcasecmp( newset, "koi8-r" ) ) { active_charset_name = "koi8-r"; no_translation = 0; active_charset = koi8_unicode; use_iconv = 0; } else return G10ERR_GENERAL; #endif /*!USE_GNUPG_ICONV*/ return 0; } const char* get_native_charset() { return active_charset_name; } /**************** * Convert string, which is in native encoding to UTF8 and return the * new allocated UTF8 string. */ char * native_to_utf8( const char *string ) { const byte *s; char *buffer; byte *p; size_t length=0; if (no_translation) { /* Already utf-8 encoded. */ buffer = xstrdup (string); } else if( !active_charset && !use_iconv) /* Shortcut implementation for Latin-1. */ { for(s=string; *s; s++ ) { length++; if( *s & 0x80 ) length++; } buffer = xmalloc( length + 1 ); for(p=buffer, s=string; *s; s++ ) { if( *s & 0x80 ) { *p++ = 0xc0 | ((*s >> 6) & 3); *p++ = 0x80 | ( *s & 0x3f ); } else *p++ = *s; } *p = 0; } else /* Need to use a translation table. */ { #ifdef USE_GNUPG_ICONV iconv_t cd; const char *inptr; char *outptr; size_t inbytes, outbytes; cd = iconv_open ("utf-8", active_charset_name); if (cd == (iconv_t)-1) { handle_iconv_error ("utf-8", active_charset_name, 1); return native_to_utf8 (string); } for (s=string; *s; s++ ) { length++; if ((*s & 0x80)) length += 5; /* We may need up to 6 bytes for the utf8 output. */ } buffer = xmalloc (length + 1); inptr = string; inbytes = strlen (string); outptr = buffer; outbytes = length; if ( iconv (cd, (ICONV_CONST char **)&inptr, &inbytes, &outptr, &outbytes) == (size_t)-1) { static int shown; if (!shown) log_info (_("conversion from `%s' to `%s' failed: %s\n"), active_charset_name, "utf-8", strerror (errno)); shown = 1; /* We don't do any conversion at all but use the strings as is. */ strcpy (buffer, string); } else /* Success. */ { *outptr = 0; /* We could realloc the buffer now but I doubt that it makes much sense given that it will get freed anyway soon after. */ } iconv_close (cd); #else /*!USE_GNUPG_ICONV*/ for(s=string; *s; s++ ) { length++; if( *s & 0x80 ) length += 2; /* We may need up to 3 bytes. */ } buffer = xmalloc( length + 1 ); for(p=buffer, s=string; *s; s++ ) { if( *s & 0x80 ) { ushort val = active_charset[ *s & 0x7f ]; if( val < 0x0800 ) { *p++ = 0xc0 | ( (val >> 6) & 0x1f ); *p++ = 0x80 | ( val & 0x3f ); } else { *p++ = 0xe0 | ( (val >> 12) & 0x0f ); *p++ = 0x80 | ( (val >> 6) & 0x3f ); *p++ = 0x80 | ( val & 0x3f ); } } else *p++ = *s; } *p = 0; #endif /*!USE_GNUPG_ICONV*/ } return buffer; } /**************** * Convert string, which is in UTF8 to native encoding. illegal * encodings by some "\xnn" and quote all control characters. A * character with value DELIM will always be quoted, it must be a * vanilla ASCII character. A DELIM value of -1 is special: it disables * all quoting of control characters. */ char * utf8_to_native( const char *string, size_t length, int delim ) { int nleft; int i; byte encbuf[8]; int encidx; const byte *s; size_t n; byte *buffer = NULL, *p = NULL; unsigned long val = 0; size_t slen; int resync = 0; /* 1. pass (p==NULL): count the extended utf-8 characters */ /* 2. pass (p!=NULL): create string */ for( ;; ) { for( slen=length, nleft=encidx=0, n=0, s=string; slen; s++, slen-- ) { if( resync ) { if( !(*s < 128 || (*s >= 0xc0 && *s <= 0xfd)) ) { /* still invalid */ if( p ) { sprintf(p, "\\x%02x", *s ); p += 4; } n += 4; continue; } resync = 0; } if( !nleft ) { if( !(*s & 0x80) ) { /* plain ascii */ if( delim != -1 && (*s < 0x20 || *s == 0x7f || *s == delim || (delim && *s=='\\'))) { n++; if( p ) *p++ = '\\'; switch( *s ) { case '\n': n++; if( p ) *p++ = 'n'; break; case '\r': n++; if( p ) *p++ = 'r'; break; case '\f': n++; if( p ) *p++ = 'f'; break; case '\v': n++; if( p ) *p++ = 'v'; break; case '\b': n++; if( p ) *p++ = 'b'; break; case 0 : n++; if( p ) *p++ = '0'; break; default: n += 3; if ( p ) { sprintf( p, "x%02x", *s ); p += 3; } break; } } else { if( p ) *p++ = *s; n++; } } else if( (*s & 0xe0) == 0xc0 ) { /* 110x xxxx */ val = *s & 0x1f; nleft = 1; encidx = 0; encbuf[encidx++] = *s; } else if( (*s & 0xf0) == 0xe0 ) { /* 1110 xxxx */ val = *s & 0x0f; nleft = 2; encidx = 0; encbuf[encidx++] = *s; } else if( (*s & 0xf8) == 0xf0 ) { /* 1111 0xxx */ val = *s & 0x07; nleft = 3; encidx = 0; encbuf[encidx++] = *s; } else if( (*s & 0xfc) == 0xf8 ) { /* 1111 10xx */ val = *s & 0x03; nleft = 4; encidx = 0; encbuf[encidx++] = *s; } else if( (*s & 0xfe) == 0xfc ) { /* 1111 110x */ val = *s & 0x01; nleft = 5; encidx = 0; encbuf[encidx++] = *s; } else { /* invalid encoding: print as \xnn */ if( p ) { sprintf(p, "\\x%02x", *s ); p += 4; } n += 4; resync = 1; } } else if( *s < 0x80 || *s >= 0xc0 ) { /* invalid */ if( p ) { for(i=0; i < encidx; i++ ) { sprintf(p, "\\x%02x", encbuf[i] ); p += 4; } sprintf(p, "\\x%02x", *s ); p += 4; } n += 4 + 4*encidx; nleft = 0; encidx = 0; resync = 1; } else { encbuf[encidx++] = *s; val <<= 6; val |= *s & 0x3f; if( !--nleft ) { /* ready */ if (no_translation) { if( p ) { for(i=0; i < encidx; i++ ) *p++ = encbuf[i]; } n += encidx; encidx = 0; } #ifdef USE_GNUPG_ICONV else if(use_iconv) { /* Our strategy for using iconv is a bit * strange but it better keeps compatibility * with previous versions in regard to how * invalid encodings are displayed. What we * do is to keep the utf-8 as is and have the * real translation step then at the end. * Yes, I know that this is ugly. However we * are short of the 1.4 release and for this * branch we should not mee too much around * with iconv things. One reason for this is * that we don't know enough about non-GNU * iconv implementation and want to minimize * the risk of breaking the code on too many * platforms. */ if( p ) { for(i=0; i < encidx; i++ ) *p++ = encbuf[i]; } n += encidx; encidx = 0; } #endif /*USE_GNUPG_ICONV*/ else if( active_charset ) { /* table lookup */ for(i=0; i < 128; i++ ) { if( active_charset[i] == val ) break; } if( i < 128 ) { /* we can print this one */ if( p ) *p++ = i+128; n++; } else { /* we do not have a translation: print utf8 */ if( p ) { for(i=0; i < encidx; i++ ) { sprintf(p, "\\x%02x", encbuf[i] ); p += 4; } } n += encidx*4; encidx = 0; } } else { /* native set */ if( val >= 0x80 && val < 256 ) { n++; /* we can simply print this character */ if( p ) *p++ = val; } else { /* we do not have a translation: print utf8 */ if( p ) { for(i=0; i < encidx; i++ ) { sprintf(p, "\\x%02x", encbuf[i] ); p += 4; } } n += encidx*4; encidx = 0; } } } } } if( !buffer ) { /* allocate the buffer after the first pass */ buffer = p = xmalloc( n + 1 ); } #ifdef USE_GNUPG_ICONV else if(use_iconv) { /* Note: See above for comments. */ iconv_t cd; const char *inptr; char *outbuf, *outptr; size_t inbytes, outbytes; *p = 0; /* Terminate the buffer. */ cd = iconv_open (active_charset_name, "utf-8"); if (cd == (iconv_t)-1) { handle_iconv_error (active_charset_name, "utf-8", 1); xfree (buffer); return utf8_to_native (string, length, delim); } /* Allocate a new buffer large enough to hold all possible * encodings. */ n = p - buffer + 1; inbytes = n - 1;; inptr = buffer; outbytes = n * MB_LEN_MAX; if (outbytes / MB_LEN_MAX != n) BUG (); /* Actually an overflow. */ outbuf = outptr = xmalloc (outbytes); if ( iconv (cd, (ICONV_CONST char **)&inptr, &inbytes, &outptr, &outbytes) == (size_t)-1) { static int shown; if (!shown) log_info (_("conversion from `%s' to `%s' failed: %s\n"), "utf-8", active_charset_name, strerror (errno)); shown = 1; /* Didn't worked out. Temporary disable the use of * iconv and fall back to our old code. */ xfree (buffer); buffer = NULL; xfree (outbuf); use_iconv = 0; outbuf = utf8_to_native (string, length, delim); use_iconv = 1; } else { /* Success. */ *outptr = 0; /* We could realloc the buffer now but I doubt that it makes much sense given that it will get freed anyway soon after. */ xfree (buffer); } iconv_close (cd); return outbuf; } #endif /*USE_GNUPG_ICONV*/ else { *p = 0; /* make a string */ return buffer; } } } /* This is similar to native_to_utf8, except it can take any input (which may or may not be UTF8 encoded) and return something that is (almost) definitely UTF8. This code is mostly borrowed from GPA. */ char * string_to_utf8 (const char *string) { const char *s; if (!string) return NULL; /* Due to a bug in old and not so old PGP versions user IDs have been copied verbatim into the key. Thus many users with Umlauts et al. in their name will see their names garbled. Although this is not an issue for me (;-)), I have a couple of friends with Umlauts in their name, so let's try to make their life easier by detecting invalid encodings and convert that to Latin-1. We use this even for X.509 because it may make things even better given all the invalid encodings often found in X.509 certificates. */ for (s = string; *s && !(*s & 0x80); s++) ; if (*s && ((s[1] & 0xc0) == 0x80) && ( ((*s & 0xe0) == 0xc0) || ((*s & 0xf0) == 0xe0) || ((*s & 0xf8) == 0xf0) || ((*s & 0xfc) == 0xf8) || ((*s & 0xfe) == 0xfc)) ) { /* Possible utf-8 character followed by continuation byte. Although this might still be Latin-1 we better assume that it is valid utf-8. */ return xstrdup (string); } else if (*s && !strchr (string, 0xc3)) { size_t length=0; char *buffer,*p; /* No 0xC3 character in the string; assume that it is Latin-1. */ for(s=string; *s; s++ ) { length++; if( *s & 0x80 ) length++; } buffer = xmalloc( length + 1 ); for(p=buffer, s=string; *s; s++ ) { if( *s & 0x80 ) { *p++ = 0xc0 | ((*s >> 6) & 3); *p++ = 0x80 | ( *s & 0x3f ); } else *p++ = *s; } *p = 0; return buffer; } else { /* Everything else is assumed to be UTF-8. We do this even that we know the encoding is not valid. However as we only test the first non-ascii character, valid encodings might follow. */ return xstrdup (string); } } /* Same as asprintf but return an allocated buffer suitable to be freed using xfree. This function simply dies on memory failure, thus no extra check is required. */ char * xasprintf (const char *fmt, ...) { va_list ap; char *buf; va_start (ap, fmt); if (estream_vasprintf (&buf, fmt, ap) < 0) log_fatal ("estream_asprintf failed: %s\n", strerror (errno)); va_end (ap); return buf; } /* Same as above but return NULL on memory failure. */ char * xtryasprintf (const char *fmt, ...) { int rc; va_list ap; char *buf; va_start (ap, fmt); rc = estream_vasprintf (&buf, fmt, ap); va_end (ap); if (rc < 0) return NULL; return buf; } char * xtryvasprintf (const char *fmt, va_list arg_ptr) { int rc; char *buf; rc = estream_vasprintf (&buf, fmt, arg_ptr); if (rc < 0) return NULL; return buf; } static char * do_strconcat (const char *s1, va_list arg_ptr) { const char *argv[48]; size_t argc; size_t needed; char *buffer, *p; argc = 0; argv[argc++] = s1; needed = strlen (s1); while (((argv[argc] = va_arg (arg_ptr, const char *)))) { needed += strlen (argv[argc]); if (argc >= DIM (argv)-1) { errno = EINVAL; return NULL; } argc++; } needed++; buffer = xtrymalloc (needed); if (buffer) { for (p = buffer, argc=0; argv[argc]; argc++) p = stpcpy (p, argv[argc]); } return buffer; } /* Concatenate the string S1 with all the following strings up to a NULL. Returns a malloced buffer with the new string or NULL on a malloc error or if too many arguments are given. */ char * strconcat (const char *s1, ...) { va_list arg_ptr; char *result; if (!s1) result = xtrystrdup (""); else { va_start (arg_ptr, s1); result = do_strconcat (s1, arg_ptr); va_end (arg_ptr); } return result; } /**************************************************** ******** locale insensitive ctype functions ******** ****************************************************/ /* FIXME: replace them by a table lookup and macros */ int ascii_isupper (int c) { return c >= 'A' && c <= 'Z'; } int ascii_islower (int c) { return c >= 'a' && c <= 'z'; } int ascii_memcasecmp( const char *a, const char *b, size_t n ) { if (a == b) return 0; for ( ; n; n--, a++, b++ ) { if( *a != *b && ascii_toupper (*a) != ascii_toupper (*b) ) return *a == *b? 0 : (ascii_toupper (*a) - ascii_toupper (*b)); } return 0; } /* Lowercase all ASCII characters in S. */ char * ascii_strlwr (char *s) { char *p; for (p = s; *p; p++ ) if (isascii (*p) && *p >= 'A' && *p <= 'Z') *p |= 0x20; return s; } /********************************************* ********** missing string functions ********* *********************************************/ #ifndef HAVE_STPCPY char * stpcpy(char *a,const char *b) { while( *b ) *a++ = *b++; *a = 0; return (char*)a; } #endif #ifndef HAVE_STRLWR char * strlwr(char *s) { char *p; for(p=s; *p; p++ ) *p = tolower(*(unsigned char *)p); return s; } #endif #ifndef HAVE_STRCASECMP int strcasecmp( const char *a, const char *b ) { for( ; *a && *b; a++, b++ ) { if( *a != *b && toupper(*(const byte *)a) != toupper(*(const byte *)b) ) break; } return *(const byte*)a - *(const byte*)b; } #endif #ifndef HAVE_STRNCASECMP int strncasecmp( const char *a, const char *b, size_t n ) { for( ; n && *a && *b; a++, b++, n--) { if( *a != *b && toupper(*(const byte *)a) != toupper(*(const byte *)b) ) break; } if (!n) return 0; return *(const byte*)a - *(const byte*)b; } #endif #ifdef _WIN32 const char * w32_strerror (int w32_errno) { static char strerr[256]; int ec = (int)GetLastError (); if (w32_errno == 0) w32_errno = ec; FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM, NULL, w32_errno, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), strerr, DIM (strerr)-1, NULL); return strerr; } #endif /*_WIN32*/ gnupg-1.4.20/util/memory.c0000644000175000017500000003726112635262326012310 00000000000000/* memory.c - memory allocation * Copyright (C) 1998, 1999, 2001, 2005 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 3 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, see . * * * 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 */ #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 /* This is a very crude alignment check which does not work on all CPUs * IIRC, I once introduced it for testing on an Alpha. We should better * replace this guard stuff with one provided by a modern malloc library */ #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 #ifndef M_GUARD #define M_GUARD 1 #endif #undef xmalloc #undef xtrymalloc #undef xmalloc_clear #undef xmalloc_secure #undef xmalloc_secure_clear #undef xrealloc #undef xfree #undef m_check #undef xstrdup #undef xtrystrdup #define FNAME(a) m_debug_ ##a #define FNAMEX(a) m_debug_ ##a #define FNAMEXM(a) m_debug_ ##a #define FNAMEPRT , const char *info #define FNAMEARG , info #ifndef __riscos__ #define store_len(p,n,m) do { add_entry(p,n,m, \ info, __FUNCTION__); } while(0) #else #define store_len(p,n,m) do { add_entry(p,n,m, \ info, __func__ ); } while(0) #endif #else #define FNAME(a) m_ ##a #define FNAMEX(a) x ##a #define FNAMEXM(a) xm ##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 + EXTRA_ALIGN + 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[EXTRA_ALIGN+0] = index; p[EXTRA_ALIGN+1] = index >> 8 ; p[EXTRA_ALIGN+2] = index >> 16 ; p[EXTRA_ALIGN+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; } if( m_is_secure(p+EXTRA_ALIGN+4) ) secmem_free(p); else { 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 ) { #ifndef __riscos__ check_mem(e->user_p-4-EXTRA_ALIGN, info); #else check_mem((const byte *) e->user_p-4-EXTRA_ALIGN, info); #endif } } } #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 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 ) { #ifdef 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_error ("out of %s memory while allocating %u bytes\n", secure? "secure":"" ,(unsigned)n ); if (secure) { /*secmem_dump_stats ();*/ log_info ("(this may be caused by too many secret keys used " "simultaneously or due to excessive large key sizes)\n"); } #if defined(M_GUARD) && defined(__riscos__) abort(); #endif exit (2); } /**************** * Allocate memory of size n. * This function gives up if we do not have enough memory */ void * FNAMEXM(alloc)( size_t n FNAMEPRT ) { char *p; #ifdef M_GUARD if(!n) out_of_core(n,0); /* should never happen */ 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 /* mallocing zero bytes is undefined by ISO-C, so we better make sure that it won't happen */ if (!n) n = 1; if( !(p = malloc( n )) ) out_of_core(n,0); return p; #endif } /* Allocate memory of size n. This function returns NULL if we do not have enough memory. */ void * FNAMEX(trymalloc)(size_t n FNAMEPRT) { #ifdef M_GUARD char *p; if (!n) n = 1; p = malloc (n + EXTRA_ALIGN+5); if (!p) return NULL; store_len(p,n,0); used_memory += n; p[4+EXTRA_ALIGN+n] = MAGIC_END_BYTE; return p+EXTRA_ALIGN+4; #else /* Mallocing zero bytes is undefined by ISO-C, so we better make sure that it won't happen. */ return malloc (n? n: 1); #endif } /**************** * Allocate memory of size n from the secure memory pool. * This function gives up if we do not have enough memory */ void * FNAMEXM(alloc_secure)( size_t n FNAMEPRT ) { char *p; #ifdef M_GUARD if(!n) out_of_core(n,1); /* should never happen */ 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 /* mallocing zero bytes is undefined by ISO-C, so we better make sure that it won't happen */ if (!n) n = 1; if( !(p = secmem_malloc( n )) ) out_of_core(n,1); return p; #endif } void * FNAMEXM(alloc_clear)( size_t n FNAMEPRT ) { void *p; p = FNAMEXM(alloc)( n FNAMEARG ); memset(p, 0, n ); return p; } void * FNAMEXM(alloc_secure_clear)( size_t n FNAMEPRT) { void *p; p = FNAMEXM(alloc_secure)( n FNAMEARG ); memset(p, 0, n ); return p; } /**************** * realloc and clear the old space */ void * FNAMEX(realloc)( void *a, size_t n FNAMEPRT ) { void *b; #ifdef M_GUARD if( a ) { #error "--enable-m-guard does not currently work" unsigned char *p = a; 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 b = FNAME(alloc)(n FNAMEARG); #else if( m_is_secure(a) ) { if( !(b = secmexrealloc( 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 FNAMEX(free)( void *a FNAMEPRT ) { byte *p = a; if( !p ) return; #ifdef M_DEBUG free_entry(p-EXTRA_ALIGN-4, info); #elif defined 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("dummy 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 } char * FNAMEX(strdup)( const char *a FNAMEPRT ) { size_t n = strlen(a); char *p = FNAMEXM(alloc)(n+1 FNAMEARG); strcpy(p, a); return p; } char * FNAMEX(trystrdup)(const char *a FNAMEPRT) { size_t n = strlen (a); char *p = FNAMEX(trymalloc)(n+1 FNAMEARG); if (p) strcpy (p, a); return p; } /* Wrapper around xmalloc_clear to take the usual 2 arguments of a calloc style function. */ void * xcalloc (size_t n, size_t m) { size_t nbytes; nbytes = n * m; if (m && nbytes / m != n) out_of_core (nbytes, 0); return xmalloc_clear (nbytes); } /* Wrapper around xmalloc_csecure_lear to take the usual 2 arguments of a calloc style function. */ void * xcalloc_secure (size_t n, size_t m) { size_t nbytes; nbytes = n * m; if (m && nbytes / m != n) out_of_core (nbytes, 1); return xmalloc_secure_clear (nbytes); } gnupg-1.4.20/util/http.c0000644000175000017500000006147712635262326011765 00000000000000/* http.c - HTTP protocol handler * Copyright (C) 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, * 2009, 2012 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 3 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, see . */ #include #include #include #include #include #include #include #ifdef _WIN32 #include #else #include #include #include #include #include #include #include #include #endif #include "util.h" #include "iobuf.h" #include "i18n.h" #include "http.h" #include "srv.h" #ifdef _WIN32 #define sock_close(a) closesocket(a) #else #define sock_close(a) close(a) #endif #define MAX_LINELEN 20000 /* max. length of a HTTP line */ #define VALID_URI_CHARS "abcdefghijklmnopqrstuvwxyz" \ "ABCDEFGHIJKLMNOPQRSTUVWXYZ" \ "01234567890@" \ "!\"#$%&'()*+,-./:;<=>?[\\]^_{|}~" #ifndef EAGAIN #define EAGAIN EWOULDBLOCK #endif static int parse_uri( PARSED_URI *ret_uri, const char *uri ); static void release_parsed_uri( PARSED_URI uri ); static int do_parse_uri( PARSED_URI uri, int only_local_part ); static int remove_escapes( byte *string ); static int insert_escapes( byte *buffer, const byte *string, const byte *special ); static URI_TUPLE parse_tuple( byte *string ); static int send_request( HTTP_HD hd, const char *auth, const char *proxy, struct http_srv *srv, STRLIST headers); static byte *build_rel_path( PARSED_URI uri ); static int parse_response( HTTP_HD hd ); static int connect_server( const char *server, ushort port, unsigned int flags, struct http_srv *srv ); static int write_server( int sock, const char *data, size_t length ); #ifdef _WIN32 static void deinit_sockets (void) { WSACleanup(); } static void init_sockets (void) { static int initialized; static WSADATA wsdata; if (initialized) return; if( WSAStartup( 0x0101, &wsdata ) ) { log_error ("error initializing socket library: ec=%d\n", (int)WSAGetLastError () ); return; } if( wsdata.wVersion < 0x0001 ) { log_error ("socket library version is %x.%x - but 1.1 needed\n", LOBYTE(wsdata.wVersion), HIBYTE(wsdata.wVersion)); WSACleanup(); return; } atexit ( deinit_sockets ); initialized = 1; } #endif /*_WIN32*/ static byte bintoasc[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "abcdefghijklmnopqrstuvwxyz" "0123456789+/"; /**************** * create a radix64 encoded string. */ /* TODO: This is a duplicate of code in g10/armor.c modified to do the "=" padding. Better to use a single copy in strgutil.c ? */ static char * make_radix64_string( const byte *data, size_t len ) { char *buffer, *p; buffer = p = xmalloc( (len+2)/3*4 + 1 ); for( ; len >= 3 ; len -= 3, data += 3 ) { *p++ = bintoasc[(data[0] >> 2) & 077]; *p++ = bintoasc[(((data[0] <<4)&060)|((data[1] >> 4)&017))&077]; *p++ = bintoasc[(((data[1]<<2)&074)|((data[2]>>6)&03))&077]; *p++ = bintoasc[data[2]&077]; } if( len == 2 ) { *p++ = bintoasc[(data[0] >> 2) & 077]; *p++ = bintoasc[(((data[0] <<4)&060)|((data[1] >> 4)&017))&077]; *p++ = bintoasc[((data[1]<<2)&074)]; *p++ = '='; } else if( len == 1 ) { *p++ = bintoasc[(data[0] >> 2) & 077]; *p++ = bintoasc[(data[0] <<4)&060]; *p++ = '='; *p++ = '='; } *p = 0; return buffer; } int http_open( HTTP_HD hd, HTTP_REQ_TYPE reqtype, const char *url, char *auth, unsigned int flags, const char *proxy, struct http_srv *srv, STRLIST headers ) { int rc; if( !(reqtype == HTTP_REQ_GET || reqtype == HTTP_REQ_POST) ) return G10ERR_INV_ARG; /* initialize the handle */ memset( hd, 0, sizeof *hd ); hd->sock = -1; hd->initialized = 1; hd->req_type = reqtype; hd->flags = flags; rc = parse_uri( &hd->uri, url ); if( !rc ) { rc = send_request( hd, auth, proxy, srv, headers ); if( !rc ) { hd->fp_write = iobuf_sockopen( hd->sock , "w" ); if( hd->fp_write ) return 0; rc = G10ERR_GENERAL; } } if( !hd->fp_read && !hd->fp_write && hd->sock != -1 ) sock_close( hd->sock ); iobuf_close( hd->fp_read ); iobuf_close( hd->fp_write); release_parsed_uri( hd->uri ); hd->initialized = 0; return rc; } void http_start_data( HTTP_HD hd ) { iobuf_flush ( hd->fp_write ); if( !hd->in_data ) { write_server (hd->sock, "\r\n", 2); hd->in_data = 1; } } int http_wait_response( HTTP_HD hd, unsigned int *ret_status ) { int rc; http_start_data( hd ); /* make sure that we are in the data */ #if 0 hd->sock = dup( hd->sock ); if( hd->sock == -1 ) return G10ERR_GENERAL; #endif iobuf_ioctl (hd->fp_write, 1, 1, NULL); /* keep the socket open */ iobuf_close (hd->fp_write); hd->fp_write = NULL; /* We do not want the shutdown code anymore. It used to be there to support old versions of pksd. These versions are anyway unusable and the latest releases haven been fixed to properly handle HTTP 1.0. */ /* if ( !(hd->flags & HTTP_FLAG_NO_SHUTDOWN) ) */ /* shutdown( hd->sock, 1 ); */ hd->in_data = 0; hd->fp_read = iobuf_sockopen( hd->sock , "r" ); if( !hd->fp_read ) return G10ERR_GENERAL; rc = parse_response( hd ); if( !rc && ret_status ) *ret_status = hd->status_code; return rc; } int http_open_document( HTTP_HD hd, const char *document, char *auth, unsigned int flags, const char *proxy, struct http_srv *srv, STRLIST headers ) { int rc; rc = http_open(hd, HTTP_REQ_GET, document, auth, flags, proxy, srv, headers ); if( rc ) return rc; rc = http_wait_response( hd, NULL ); if( rc ) http_close( hd ); return rc; } void http_close( HTTP_HD hd ) { if( !hd || !hd->initialized ) return; if( !hd->fp_read && !hd->fp_write && hd->sock != -1 ) sock_close( hd->sock ); iobuf_close( hd->fp_read ); iobuf_close( hd->fp_write ); release_parsed_uri( hd->uri ); xfree( hd->buffer ); hd->initialized = 0; } /**************** * Parse an URI and put the result into the newly allocated ret_uri. * The caller must always use release_parsed_uri to releases the * resources (even on an error). */ static int parse_uri( PARSED_URI *ret_uri, const char *uri ) { *ret_uri = xmalloc_clear( sizeof(**ret_uri) + strlen(uri) ); strcpy( (*ret_uri)->buffer, uri ); return do_parse_uri( *ret_uri, 0 ); } static void release_parsed_uri( PARSED_URI uri ) { if( uri ) { URI_TUPLE r, r2; for( r = uri->query; r; r = r2 ) { r2 = r->next; xfree( r ); } xfree( uri ); } } static int do_parse_uri( PARSED_URI uri, int only_local_part ) { URI_TUPLE *tail; char *p, *p2, *p3; int n; p = uri->buffer; n = strlen( uri->buffer ); /* initialize all fields to an empty string or an empty list */ uri->scheme = uri->host = uri->path = p + n; uri->port = 0; uri->params = uri->query = NULL; /* a quick validity check */ if( strspn( p, VALID_URI_CHARS) != n ) return G10ERR_BAD_URI; /* invalid characters found */ if( !only_local_part ) { /* find the scheme */ if( !(p2 = strchr( p, ':' ) ) || p2 == p ) return G10ERR_BAD_URI; /* No scheme */ *p2++ = 0; strlwr( p ); uri->scheme = p; if(strcmp(uri->scheme,"http")==0) uri->port = 80; else return G10ERR_INVALID_URI; /* Unsupported scheme */ p = p2; /* find the hostname */ if( *p != '/' ) return G10ERR_INVALID_URI; /* does not start with a slash */ p++; if( *p == '/' ) { /* there seems to be a hostname */ p++; if( (p2 = strchr(p, '/')) ) *p2++ = 0; /* Check for username/password encoding */ if((p3=strchr(p,'@'))) { uri->auth=p; *p3++='\0'; p=p3; } strlwr( p ); /* Handle a host of [IP] so that [IP:V6]:port works */ if( *p == '[' && (p3=strchr( p, ']' )) ) { *p3++ = '\0'; /* worst case, uri->host should have length 0, points to \0 */ uri->host = p + 1; p = p3; } else uri->host = p; if( (p3=strchr( p, ':' )) ) { *p3++ = '\0'; uri->port = atoi( p3 ); } if( (n = remove_escapes( uri->host )) < 0 ) return G10ERR_BAD_URI; if( n != strlen( uri->host ) ) return G10ERR_BAD_URI; /* hostname with a Nul in it */ p = p2 ? p2 : NULL; } } /* end global URI part */ /* parse the pathname part */ if( !p || !*p ) /* we don't have a path */ return 0; /* and this is okay */ /* todo: here we have to check params */ /* do we have a query part */ if( (p2 = strchr( p, '?' )) ) *p2++ = 0; uri->path = p; if( (n = remove_escapes( p )) < 0 ) return G10ERR_BAD_URI; if( n != strlen( p ) ) return G10ERR_BAD_URI; /* path with a Nul in it */ p = p2 ? p2 : NULL; if( !p || !*p ) /* we don't have a query string */ return 0; /* okay */ /* now parse the query string */ tail = &uri->query; for(;;) { URI_TUPLE elem; if( (p2 = strchr( p, '&' )) ) *p2++ = 0; if( !(elem = parse_tuple( p )) ) return G10ERR_BAD_URI; *tail = elem; tail = &elem->next; if( !p2 ) break; /* ready */ p = p2; } return 0; } /**************** * Remove all %xx escapes; this is done inplace. * Returns: new length of the string. */ static int remove_escapes( byte *string ) { int n = 0; byte *p, *s; for(p=s=string; *s ; s++ ) { if( *s == '%' ) { if( s[1] && s[2] && isxdigit(s[1]) && isxdigit(s[2]) ) { s++; *p = *s >= '0' && *s <= '9' ? *s - '0' : *s >= 'A' && *s <= 'F' ? *s - 'A' + 10 : *s - 'a' + 10 ; *p <<= 4; s++; *p |= *s >= '0' && *s <= '9' ? *s - '0' : *s >= 'A' && *s <= 'F' ? *s - 'A' + 10 : *s - 'a' + 10 ; p++; n++; } else { *p++ = *s++; if( *s ) *p++ = *s++; if( *s ) *p++ = *s++; if( *s ) *p = 0; return -1; /* bad URI */ } } else { *p++ = *s; n++; } } *p = 0; /* always keep a string terminator */ return n; } static int insert_escapes( byte *buffer, const byte *string, const byte *special ) { int n = 0; for( ; *string; string++ ) { if( strchr( VALID_URI_CHARS, *string ) && !strchr( special, *string ) ) { if( buffer ) *buffer++ = *string; n++; } else { if( buffer ) { sprintf( buffer, "%%%02X", *string ); buffer += 3; } n += 3; } } return n; } static URI_TUPLE parse_tuple( byte *string ) { byte *p = string; byte *p2; int n; URI_TUPLE tuple; if( (p2 = strchr( p, '=' )) ) *p2++ = 0; if( (n = remove_escapes( p )) < 0 ) return NULL; /* bad URI */ if( n != strlen( p ) ) return NULL; /* name with a Nul in it */ tuple = xmalloc_clear( sizeof *tuple ); tuple->name = p; if( !p2 ) { /* we have only the name, so we assume an empty value string */ tuple->value = p + strlen(p); tuple->valuelen = 0; } else { /* name and value */ if( (n = remove_escapes( p2 )) < 0 ) { xfree( tuple ); return NULL; /* bad URI */ } tuple->value = p2; tuple->valuelen = n; } return tuple; } /**************** * Send a HTTP request to the server * Returns 0 if the request was successful */ static int send_request( HTTP_HD hd, const char *auth, const char *proxy, struct http_srv *srv, STRLIST headers ) { const byte *server; byte *request, *p; ushort port; int rc; char *proxy_authstr=NULL,*authstr=NULL; server = *hd->uri->host? hd->uri->host : "localhost"; port = hd->uri->port? hd->uri->port : 80; if(proxy && *proxy) { PARSED_URI uri; rc = parse_uri( &uri, proxy ); if (rc) { log_error("invalid HTTP proxy (%s): %s\n",proxy,g10_errstr(rc)); release_parsed_uri( uri ); return G10ERR_NETWORK; } hd->sock = connect_server( *uri->host? uri->host : "localhost", uri->port? uri->port : 80, 0, srv ); if(uri->auth) { char *x; remove_escapes(uri->auth); x=make_radix64_string(uri->auth,strlen(uri->auth)); proxy_authstr=xmalloc(52+strlen(x)); sprintf(proxy_authstr,"Proxy-Authorization: Basic %s\r\n",x); xfree(x); } release_parsed_uri( uri ); } else hd->sock = connect_server( server, port, hd->flags, srv ); if(auth || hd->uri->auth) { char *x,*tempauth=NULL; if(auth) { tempauth=xstrdup(auth); remove_escapes(tempauth); } else if(hd->uri->auth) remove_escapes(hd->uri->auth); x=make_radix64_string(tempauth?tempauth:hd->uri->auth, strlen(tempauth?tempauth:hd->uri->auth)); authstr=xmalloc(52+strlen(x)); sprintf(authstr,"Authorization: Basic %s\r\n",x); xfree(x); xfree(tempauth); } if( hd->sock == -1 ) return G10ERR_NETWORK; p = build_rel_path( hd->uri ); request=xmalloc(strlen(server)*2 + strlen(p) + (authstr?strlen(authstr):0) + (proxy_authstr?strlen(proxy_authstr):0) + 65); if( proxy && *proxy ) sprintf( request, "%s http://%s:%hu%s%s HTTP/1.0\r\n%s%s", hd->req_type == HTTP_REQ_GET ? "GET" : hd->req_type == HTTP_REQ_HEAD? "HEAD": hd->req_type == HTTP_REQ_POST? "POST": "OOPS", server, port, *p == '/'? "":"/", p, authstr?authstr:"",proxy_authstr?proxy_authstr:"" ); else { char portstr[35]; if(port == 80 || (srv && srv->used_server)) *portstr = 0; else sprintf(portstr,":%u",port); sprintf( request, "%s %s%s HTTP/1.0\r\nHost: %s%s\r\n%s", hd->req_type == HTTP_REQ_GET ? "GET" : hd->req_type == HTTP_REQ_HEAD? "HEAD": hd->req_type == HTTP_REQ_POST? "POST": "OOPS", *p == '/'? "":"/", p, server, portstr, authstr?authstr:""); } xfree(p); rc = write_server( hd->sock, request, strlen(request) ); if(rc==0) for(;headers;headers=headers->next) { rc = write_server( hd->sock, headers->d, strlen(headers->d) ); if(rc) break; rc = write_server( hd->sock, "\r\n", 2 ); if(rc) break; } xfree( request ); xfree(proxy_authstr); xfree(authstr); return rc; } /**************** * Build the relative path from the parsed URI. * Minimal implementation. */ static byte* build_rel_path( PARSED_URI uri ) { URI_TUPLE r; byte *rel_path, *p; int n; /* count the needed space */ n = insert_escapes( NULL, uri->path, "%;?&" ); /* todo: build params */ for( r=uri->query; r; r = r->next ) { n++; /* '?'/'&' */ n += insert_escapes( NULL, r->name, "%;?&=" ); n++; /* '='*/ n += insert_escapes( NULL, r->value, "%;?&=" ); } n++; /* now allocate and copy */ p = rel_path = xmalloc( n ); n = insert_escapes( p, uri->path, "%;?&" ); p += n; /* todo: add params */ for( r=uri->query; r; r = r->next ) { *p++ = r == uri->query? '?':'&'; n = insert_escapes( p, r->name, "%;?&=" ); p += n; *p++ = '='; /* todo: use valuelen */ n = insert_escapes( p, r->value, "%;?&=" ); p += n; } *p = 0; return rel_path; } /*********************** * Parse the response from a server. * Returns: errorcode and sets some fileds in the handle */ static int parse_response( HTTP_HD hd ) { byte *line, *p, *p2; unsigned maxlen, len; /* Wait for the status line */ do { maxlen = MAX_LINELEN; len = iobuf_read_line( hd->fp_read, &hd->buffer, &hd->buffer_size, &maxlen ); line = hd->buffer; if( !maxlen ) return -1; /* line has been truncated */ if( !len ) return -1; /* eof */ } while( !*line ); if( (p = strchr( line, '/')) ) *p++ = 0; if( !p || strcmp( line, "HTTP" ) ) return 0; /* assume http 0.9 */ if( (p2 = strpbrk( p, " \t" ) ) ) { *p2++ = 0; p2 += strspn( p2, " \t" ); } if( !p2 ) return 0; /* assume http 0.9 */ p = p2; /* todo: add HTTP version number check here */ if( (p2 = strpbrk( p, " \t" ) ) ) *p2++ = 0; if( !isdigit(p[0]) || !isdigit(p[1]) || !isdigit(p[2]) || p[3] ) { /* malformed HTTP statuscode - assume HTTP 0.9 */ hd->is_http_0_9 = 1; hd->status_code = 200; return 0; } hd->status_code = atoi( p ); /* skip all the header lines and wait for the empty line */ do { maxlen = MAX_LINELEN; len = iobuf_read_line( hd->fp_read, &hd->buffer, &hd->buffer_size, &maxlen ); line = hd->buffer; /* we ignore truncated lines */ if( !len ) return -1; /* eof */ /* time lineendings */ if( (*line == '\r' && line[1] == '\n') || *line == '\n' ) *line = 0; } while( len && *line ); return 0; } #ifdef TEST static int start_server(void) { struct sockaddr_in mya; struct sockaddr_in peer; int fd, client; fd_set rfds; int addrlen; int i; if( (fd=socket(AF_INET,SOCK_STREAM, 0)) == -1 ) { log_error("socket() failed: %s\n", strerror(errno)); return -1; } i = 1; if( setsockopt( fd, SOL_SOCKET, SO_REUSEADDR, (byte*)&i, sizeof(i) ) ) log_info("setsockopt(SO_REUSEADDR) failed: %s\n", strerror(errno) ); mya.sin_family=AF_INET; memset(&mya.sin_addr, 0, sizeof(mya.sin_addr)); mya.sin_port=htons(11371); if( bind( fd, (struct sockaddr *)&mya, sizeof(mya)) ) { log_error("bind to port 11371 failed: %s\n", strerror(errno) ); sock_close( fd ); return -1; } if( listen( fd, 5 ) ) { log_error("listen failed: %s\n", strerror(errno) ); sock_close( fd ); return -1; } for(;;) { FD_ZERO(&rfds); FD_SET( fd, &rfds ); if( select( fd+1, &rfds, NULL, NULL, NULL) <= 0 ) continue; /* ignore any errors */ if( !FD_ISSET( fd, &rfds ) ) continue; addrlen = sizeof peer; client = accept( fd, (struct sockaddr *)&peer, &addrlen); if( client == -1 ) continue; /* oops */ log_info("connect from %s\n", inet_ntoa( peer.sin_addr ) ); fflush(stdout); fflush(stderr); if( !fork() ) { int c; FILE *fp; fp = fdopen( client , "r" ); while( (c=getc(fp)) != EOF ) putchar(c); fclose(fp); exit(0); } sock_close( client ); } return 0; } #endif static int connect_server( const char *server, ushort port, unsigned int flags, struct http_srv *srv ) { int sock = -1; int srvcount = 0; int connected = 0; int hostfound = 0; int chosen = -1; int fakesrv = 0; struct srventry *srvlist = NULL; int srvindex; #ifdef _WIN32 unsigned long inaddr; init_sockets(); /* Win32 gethostbyname doesn't handle IP addresses internally, so we try inet_addr first on that platform only. */ if((inaddr=inet_addr(server))!=INADDR_NONE) { struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); if((sock=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET) { log_error("error creating socket: ec=%d\n",(int)WSAGetLastError()); return -1; } addr.sin_family=AF_INET; addr.sin_port=htons(port); memcpy(&addr.sin_addr,&inaddr,sizeof(inaddr)); if(connect(sock,(struct sockaddr *)&addr,sizeof(addr))==0) return sock; else { sock_close(sock); return -1; } } #endif #ifdef USE_DNS_SRV /* Do the SRV thing */ if(srv && srv->srvtag) { /* We're using SRV, so append the tags */ if(1+strlen(srv->srvtag)+6+strlen(server)+1<=MAXDNAME) { char srvname[MAXDNAME]; strcpy(srvname,"_"); strcat(srvname,srv->srvtag); strcat(srvname,"._tcp."); strcat(srvname,server); srvcount=getsrv(srvname,&srvlist); } } #endif if(srvlist==NULL) { /* Either we're not using SRV, or the SRV lookup failed. Make up a fake SRV record. */ srvlist=calloc(1,sizeof(struct srventry)); if(!srvlist) return -1; srvlist->port=port; strncpy(srvlist->target,server,MAXDNAME); srvlist->target[MAXDNAME-1]='\0'; srvcount = 1; fakesrv = 1; } #ifdef HAVE_GETADDRINFO for(srvindex=0;srvindexai_next) { if((sock=socket(ai->ai_family,ai->ai_socktype,ai->ai_protocol))==-1) { log_error("error creating socket: %s\n",strerror(errno)); freeaddrinfo(res); return -1; } if(connect(sock,ai->ai_addr,ai->ai_addrlen)==0) { connected=1; chosen = srvindex; break; } sock_close(sock); } freeaddrinfo(res); if(ai) break; } #else /* !HAVE_GETADDRINFO */ for(srvindex=0; srvindex < srvcount; srvindex++) { int i=0; struct hostent *host=NULL; struct sockaddr_in addr; memset(&addr,0,sizeof(addr)); if((host=gethostbyname(srvlist[srvindex].target))==NULL) continue; hostfound=1; if((sock=socket(host->h_addrtype,SOCK_STREAM,0))==-1) { log_error("error creating socket: %s\n",strerror(errno)); return -1; } addr.sin_family=host->h_addrtype; if(addr.sin_family!=AF_INET) { log_error("%s: unknown address family\n",srvlist[srvindex].target); return -1; } addr.sin_port=htons(srvlist[srvindex].port); /* Try all A records until one responds. */ while(host->h_addr_list[i]) { if(host->h_length!=4) { log_error("%s: illegal address length\n",srvlist[srvindex].target); return -1; } memcpy(&addr.sin_addr,host->h_addr_list[i],host->h_length); if(connect(sock,(struct sockaddr *)&addr,sizeof(addr))==0) { connected=1; chosen = srvindex; break; } i++; } if(host->h_addr_list[i]) break; sock_close(sock); } #endif /* !HAVE_GETADDRINFO */ if(!fakesrv && chosen > -1 && srv) { srv->used_server = strdup (srvlist[chosen].target); srv->used_port = srvlist[chosen].port; } free(srvlist); if(!connected) { int err=errno; #ifdef _WIN32 if(hostfound) log_error("%s: Unable to connect: ec=%d\n",server,(int)WSAGetLastError()); else log_error("%s: Host not found: ec=%d\n",server,(int)WSAGetLastError()); #else if(hostfound) log_error("%s: %s\n",server,strerror(err)); else log_error("%s: Host not found\n",server); #endif if(sock!=-1) sock_close(sock); errno=err; return -1; } return sock; } static int write_server( int sock, const char *data, size_t length ) { int nleft; nleft = length; while( nleft > 0 ) { #ifdef _WIN32 int nwritten; nwritten = send (sock, data, nleft, 0); if ( nwritten == SOCKET_ERROR ) { log_info ("write failed: ec=%d\n", (int)WSAGetLastError ()); return G10ERR_NETWORK; } #else int nwritten = write( sock, data, nleft ); if( nwritten == -1 ) { if( errno == EINTR ) continue; if( errno == EAGAIN ) { struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 50000; select(0, NULL, NULL, NULL, &tv); continue; } log_info("write failed: %s\n", strerror(errno)); return G10ERR_NETWORK; } #endif nleft -=nwritten; data += nwritten; } return 0; } /**** Test code ****/ #ifdef TEST int main(int argc, char **argv) { int rc; PARSED_URI uri; URI_TUPLE r; struct http_context hd; int c; log_set_name("http-test"); if( argc == 1 ) { start_server(); return 0; } if( argc != 2 ) { fprintf(stderr,"usage: http-test uri\n"); return 1; } argc--; argv++; rc = parse_uri( &uri, *argv ); if( rc ) { log_error("`%s': %s\n", *argv, g10_errstr(rc)); release_parsed_uri( uri ); return 1; } printf("Scheme: %s\n", uri->scheme ); printf("Host : %s\n", uri->host ); printf("Port : %u\n", uri->port ); printf("Path : %s\n", uri->path ); for( r=uri->params; r; r = r->next ) { printf("Params: %s=%s", r->name, r->value ); if( strlen( r->value ) != r->valuelen ) printf(" [real length=%d]", (int)r->valuelen ); putchar('\n'); } for( r=uri->query; r; r = r->next ) { printf("Query : %s=%s", r->name, r->value ); if( strlen( r->value ) != r->valuelen ) printf(" [real length=%d]", (int)r->valuelen ); putchar('\n'); } release_parsed_uri( uri ); uri = NULL; rc = http_open_document( &hd, *argv, NULL, 0, NULL, NULL, NULL ); if( rc ) { log_error("can't get `%s': %s\n", *argv, g10_errstr(rc)); return 1; } log_info("open_http_document succeeded; status=%u\n", hd.status_code ); while( (c=iobuf_get( hd.fp_read)) != -1 ) putchar(c); http_close( &hd ); return 0; } #endif /*TEST*/ gnupg-1.4.20/util/mkdtemp.c0000644000175000017500000000444712635262326012441 00000000000000/* mkdtemp.c - libc replacement function * Copyright (C) 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /* This is a replacement function for mkdtemp in case the platform we're building on (like mine!) doesn't have it. */ #include #include #include #include #include #include #include #include "types.h" #include "cipher.h" #ifdef MKDIR_TAKES_ONE_ARG # undef mkdir # define mkdir(a,b) mkdir(a) #endif char *mkdtemp(char *template) { unsigned int attempts,idx,count=0; char *ch; idx=strlen(template); /* Walk backwards to count all the Xes */ while(idx>0 && template[idx-1]=='X') { count++; idx--; } if(count==0) { errno=EINVAL; return NULL; } ch=&template[idx]; /* Try 4 times to make the temp directory */ for(attempts=0;attempts<4;attempts++) { unsigned int remaining=count; char *marker=ch; byte *randombits; idx=0; /* Using really random bits is probably overkill here. The worst thing that can happen with a directory name collision is that the function will return an error. */ randombits=get_random_bits(4*remaining,0,0); while(remaining>1) { sprintf(marker,"%02X",randombits[idx++]); marker+=2; remaining-=2; } /* Any leftover Xes? get_random_bits rounds up to full bytes, so this is safe. */ if(remaining>0) sprintf(marker,"%X",randombits[idx]&0xF); xfree(randombits); if(mkdir(template,0700)==0) break; } if(attempts==4) return NULL; /* keeps the errno from mkdir, whatever it is */ return template; } gnupg-1.4.20/util/assuan-errors.c0000644000175000017500000001061212635262326013573 00000000000000/* assuan-errors.c - error codes * Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. * Copyright (C) 2005 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #include #include "assuan.h" /* This function returns a textual representaion of the given error code. If this is an unknown value, a string with the value is returned (Beware: it is hold in a static buffer). Return value: String with the error description. */ const char * assuan_strerror (assuan_error_t err) { const char *s; static char buf[50]; switch (err) { case ASSUAN_No_Error: s="no error"; break; case ASSUAN_General_Error: s="general error"; break; case ASSUAN_Out_Of_Core: s="out of core"; break; case ASSUAN_Invalid_Value: s="invalid value"; break; case ASSUAN_Timeout: s="timeout"; break; case ASSUAN_Read_Error: s="read error"; break; case ASSUAN_Write_Error: s="write error"; break; case ASSUAN_Problem_Starting_Server: s="problem starting server"; break; case ASSUAN_Not_A_Server: s="not a server"; break; case ASSUAN_Not_A_Client: s="not a client"; break; case ASSUAN_Nested_Commands: s="nested commands"; break; case ASSUAN_Invalid_Response: s="invalid response"; break; case ASSUAN_No_Data_Callback: s="no data callback"; break; case ASSUAN_No_Inquire_Callback: s="no inquire callback"; break; case ASSUAN_Connect_Failed: s="connect failed"; break; case ASSUAN_Accept_Failed: s="accept failed"; break; case ASSUAN_Not_Implemented: s="not implemented"; break; case ASSUAN_Server_Fault: s="server fault"; break; case ASSUAN_Invalid_Command: s="invalid command"; break; case ASSUAN_Unknown_Command: s="unknown command"; break; case ASSUAN_Syntax_Error: s="syntax error"; break; case ASSUAN_Parameter_Error: s="parameter error"; break; case ASSUAN_Parameter_Conflict: s="parameter conflict"; break; case ASSUAN_Line_Too_Long: s="line too long"; break; case ASSUAN_Line_Not_Terminated: s="line not terminated"; break; case ASSUAN_No_Input: s="no input"; break; case ASSUAN_No_Output: s="no output"; break; case ASSUAN_Canceled: s="canceled"; break; case ASSUAN_Unsupported_Algorithm: s="unsupported algorithm"; break; case ASSUAN_Server_Resource_Problem: s="server resource problem"; break; case ASSUAN_Server_IO_Error: s="server io error"; break; case ASSUAN_Server_Bug: s="server bug"; break; case ASSUAN_No_Data_Available: s="no data available"; break; case ASSUAN_Invalid_Data: s="invalid data"; break; case ASSUAN_Unexpected_Command: s="unexpected command"; break; case ASSUAN_Too_Much_Data: s="too much data"; break; case ASSUAN_Inquire_Unknown: s="inquire unknown"; break; case ASSUAN_Inquire_Error: s="inquire error"; break; case ASSUAN_Invalid_Option: s="invalid option"; break; case ASSUAN_Invalid_Index: s="invalid index"; break; case ASSUAN_Unexpected_Status: s="unexpected status"; break; case ASSUAN_Unexpected_Data: s="unexpected data"; break; case ASSUAN_Invalid_Status: s="invalid status"; break; case ASSUAN_Locale_Problem: s="locale problem"; break; case ASSUAN_Not_Confirmed: s="not confirmed"; break; case ASSUAN_USER_ERROR_FIRST: s="user error first"; break; case ASSUAN_USER_ERROR_LAST: s="user error last"; break; default: { unsigned int source, code; source = ((err >> 24) & 0xff); code = (err & 0x00ffffff); if (source) /* Assume this is an libgpg-error. */ sprintf (buf, "ec=%u.%u", source, code ); else sprintf (buf, "ec=%d", err ); s=buf; break; } } return s; } gnupg-1.4.20/util/assuan-socket-connect.c0000644000175000017500000001115712635262326015203 00000000000000/* assuan-socket-connect.c - Assuan socket based client * Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #include #include #include #include #include #include #include #include #ifndef HAVE_W32_SYSTEM #include #include #else #include #endif #include "assuan-defs.h" /* Hacks for Slowaris. */ #ifndef PF_LOCAL # ifdef PF_UNIX # define PF_LOCAL PF_UNIX # else # define PF_LOCAL AF_UNIX # endif #endif #ifndef AF_LOCAL # define AF_LOCAL AF_UNIX #endif #ifndef SUN_LEN # define SUN_LEN(ptr) ((size_t) (((struct sockaddr_un *) 0)->sun_path) \ + strlen ((ptr)->sun_path)) #endif static int do_finish (assuan_context_t ctx) { if (ctx->inbound.fd != -1) { _assuan_close (ctx->inbound.fd); } ctx->inbound.fd = -1; ctx->outbound.fd = -1; return 0; } static void do_deinit (assuan_context_t ctx) { do_finish (ctx); } static ssize_t simple_read (assuan_context_t ctx, void *buffer, size_t size) { #ifndef HAVE_W32_SYSTEM return read (ctx->inbound.fd, buffer, size); #else return recv (ctx->inbound.fd, buffer, size, 0); #endif } static ssize_t simple_write (assuan_context_t ctx, const void *buffer, size_t size) { #ifndef HAVE_W32_SYSTEM return write (ctx->outbound.fd, buffer, size); #else return send (ctx->outbound.fd, buffer, size, 0); #endif } /* Make a connection to the Unix domain socket NAME and return a new Assuan context in CTX. SERVER_PID is currently not used but may become handy in the future. */ assuan_error_t assuan_socket_connect (assuan_context_t *r_ctx, const char *name, pid_t server_pid) { static struct assuan_io io = { simple_read, simple_write }; assuan_error_t err; assuan_context_t ctx; int fd; struct sockaddr_un srvr_addr; size_t len; const char *s; if (!r_ctx || !name) return ASSUAN_Invalid_Value; *r_ctx = NULL; /* We require that the name starts with a slash, so that we can alter reuse this function for other socket types. To make things easier we allow an optional dirver prefix. */ s = name; if (*s && s[1] == ':') s += 2; if (*s != DIRSEP_C && *s != '/') return ASSUAN_Invalid_Value; if (strlen (name)+1 >= sizeof srvr_addr.sun_path) return ASSUAN_Invalid_Value; err = _assuan_new_context (&ctx); if (err) return err; ctx->deinit_handler = do_deinit; ctx->finish_handler = do_finish; fd = _assuan_sock_new (PF_LOCAL, SOCK_STREAM, 0); if (fd == -1) { _assuan_log_printf ("can't create socket: %s\n", strerror (errno)); _assuan_release_context (ctx); return ASSUAN_General_Error; } memset (&srvr_addr, 0, sizeof srvr_addr); srvr_addr.sun_family = AF_LOCAL; strncpy (srvr_addr.sun_path, name, sizeof (srvr_addr.sun_path) - 1); srvr_addr.sun_path[sizeof (srvr_addr.sun_path) - 1] = 0; len = SUN_LEN (&srvr_addr); if (_assuan_sock_connect (fd, (struct sockaddr *) &srvr_addr, len) == -1) { _assuan_log_printf ("can't connect to `%s': %s\n", name, strerror (errno)); _assuan_release_context (ctx); _assuan_close (fd); return ASSUAN_Connect_Failed; } ctx->inbound.fd = fd; ctx->outbound.fd = fd; ctx->io = &io; /* initial handshake */ { int okay, off; err = _assuan_read_from_server (ctx, &okay, &off); if (err) _assuan_log_printf ("can't connect to server: %s\n", assuan_strerror (err)); else if (okay != 1) { /*LOG ("can't connect to server: `");*/ _assuan_log_sanitized_string (ctx->inbound.line); fprintf (assuan_get_assuan_log_stream (), "'\n"); err = ASSUAN_Connect_Failed; } } if (err) { assuan_disconnect (ctx); } else *r_ctx = ctx; return 0; } gnupg-1.4.20/util/assuan-defs.h0000644000175000017500000001635312635262326013215 00000000000000/* assuan-defs.c - Internal definitions to Assuan * Copyright (C) 2001, 2002, 2004 Free Software Foundation, Inc. * Copyright (C) 2005 Free Software Foundation, Inc. * * This file is part of Assuan. * * Assuan is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * Assuan is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #ifndef ASSUAN_DEFS_H #define ASSUAN_DEFS_H #include #ifndef HAVE_W32_SYSTEM #include #include #else #include #endif #include #include "assuan.h" #include "memory.h" #ifndef HAVE_W32_SYSTEM #define DIRSEP_C '/' #else #define DIRSEP_C '\\' #endif #ifdef HAVE_W32_SYSTEM #define AF_LOCAL AF_UNIX /* We need to prefix the structure with a sockaddr_in header so we can use it later for sendto and recvfrom. */ struct sockaddr_un { short sun_family; unsigned short sun_port; struct in_addr sun_addr; char sun_path[108-2-4]; /* Path name. */ }; /* Not needed anymore because the current mingw32 defines this in sys/types.h */ /* typedef int ssize_t; */ /* Missing W32 functions */ int putc_unlocked (int c, FILE *stream); void * memrchr (const void *block, int c, size_t size); char * stpcpy (char *dest, const char *src); #endif #define LINELENGTH ASSUAN_LINELENGTH struct cmdtbl_s { const char *name; int (*handler)(assuan_context_t, char *line); }; struct assuan_io { /* Routine to read from input_fd. */ ssize_t (*readfnc) (assuan_context_t, void *, size_t); /* Routine to write to output_fd. */ ssize_t (*writefnc) (assuan_context_t, const void *, size_t); /* Send a file descriptor. */ assuan_error_t (*sendfd) (assuan_context_t, int); /* Receive a file descriptor. */ assuan_error_t (*receivefd) (assuan_context_t, int *); }; struct assuan_context_s { assuan_error_t err_no; const char *err_str; int os_errno; /* last system error number used with certain error codes*/ int confidential; int is_server; /* set if this is context belongs to a server */ int in_inquire; char *hello_line; char *okay_line; /* see assan_set_okay_line() */ void *user_pointer; /* for assuan_[gs]et_pointer () */ FILE *log_fp; struct { int fd; int eof; char line[LINELENGTH]; int linelen; /* w/o CR, LF - might not be the same as strlen(line) due to embedded nuls. However a nul is always written at this pos */ struct { char line[LINELENGTH]; int linelen ; int pending; /* i.e. at least one line is available in the attic */ } attic; } inbound; struct { int fd; struct { FILE *fp; char line[LINELENGTH]; int linelen; int error; } data; } outbound; int pipe_mode; /* We are in pipe mode, i.e. we can handle just one connection and must terminate then */ pid_t pid; /* The the pid of the peer. */ int listen_fd; /* The fd we are listening on (used by socket servers) */ int connected_fd; /* helper */ /* Used for Unix domain sockets. */ struct sockaddr_un myaddr; struct sockaddr_un serveraddr; /* When reading from datagram sockets, we must read an entire message at a time. This means that we have to do our own buffering to be able to get the semantics of read. */ void *domainbuffer; /* Offset of start of buffer. */ int domainbufferoffset; /* Bytes buffered. */ int domainbuffersize; /* Memory allocated. */ int domainbufferallocated; int *pendingfds; int pendingfdscount; void (*deinit_handler)(assuan_context_t); int (*accept_handler)(assuan_context_t); int (*finish_handler)(assuan_context_t); struct cmdtbl_s *cmdtbl; size_t cmdtbl_used; /* used entries */ size_t cmdtbl_size; /* allocated size of table */ void (*bye_notify_fnc)(assuan_context_t); void (*reset_notify_fnc)(assuan_context_t); void (*cancel_notify_fnc)(assuan_context_t); int (*option_handler_fnc)(assuan_context_t,const char*, const char*); void (*input_notify_fnc)(assuan_context_t, const char *); void (*output_notify_fnc)(assuan_context_t, const char *); int input_fd; /* set by INPUT command */ int output_fd; /* set by OUTPUT command */ /* io routines. */ struct assuan_io *io; }; /*-- assuan-pipe-server.c --*/ int _assuan_new_context (assuan_context_t *r_ctx); void _assuan_release_context (assuan_context_t ctx); /*-- assuan-domain-connect.c --*/ /* Make a connection to the Unix domain socket NAME and return a new Assuan context in CTX. SERVER_PID is currently not used but may become handy in the future. */ assuan_error_t _assuan_domain_init (assuan_context_t *r_ctx, int rendezvousfd, pid_t peer); /*-- assuan-handler.c --*/ int _assuan_register_std_commands (assuan_context_t ctx); /*-- assuan-buffer.c --*/ int _assuan_read_line (assuan_context_t ctx); int _assuan_cookie_write_data (void *cookie, const char *buffer, size_t size); int _assuan_cookie_write_flush (void *cookie); assuan_error_t _assuan_write_line (assuan_context_t ctx, const char *prefix, const char *line, size_t len); /*-- assuan-client.c --*/ assuan_error_t _assuan_read_from_server (assuan_context_t ctx, int *okay, int *off); /*-- assuan-util.c --*/ #define set_error(c,e,t) assuan_set_error ((c), ASSUAN_ ## e, (t)) void _assuan_log_print_buffer (FILE *fp, const void *buffer, size_t length); void _assuan_log_sanitized_string (const char *string); #ifdef HAVE_W32_SYSTEM const char *_assuan_w32_strerror (int ec); #define w32_strerror(e) _assuan_w32_strerror ((e)) #endif /*HAVE_W32_SYSTEM*/ /*-- assuan-logging.c --*/ void _assuan_set_default_log_stream (FILE *fp); void _assuan_log_printf (const char *format, ...) #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 5 ) __attribute__ ((format (printf,1,2))) #endif ; /*-- assuan-io.c --*/ ssize_t _assuan_simple_read (assuan_context_t ctx, void *buffer, size_t size); ssize_t _assuan_simple_write (assuan_context_t ctx, const void *buffer, size_t size); /*-- assuan-socket.c --*/ int _assuan_close (int fd); int _assuan_sock_new (int domain, int type, int proto); int _assuan_sock_connect (int sockfd, struct sockaddr *addr, int addrlen); #ifdef HAVE_FOPENCOOKIE /* We have to implement funopen in terms of glibc's fopencookie. */ FILE *_assuan_funopen(void *cookie, cookie_read_function_t *readfn, cookie_write_function_t *writefn, cookie_seek_function_t *seekfn, cookie_close_function_t *closefn); #define funopen(a,r,w,s,c) _assuan_funopen ((a), (r), (w), (s), (c)) #endif /*HAVE_FOPENCOOKIE*/ #endif /*ASSUAN_DEFS_H*/ gnupg-1.4.20/util/miscutil.c0000644000175000017500000003060612635262326012625 00000000000000/* miscutil.c - miscellaneous utilities * Copyright (C) 1998, 1999, 2000, 2001, 2003, * 2004, 2005 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 3 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, see . */ #include #include #include #include #include #include #ifdef HAVE_LANGINFO_H #include #endif #include "types.h" #include "util.h" #include "i18n.h" #ifndef HAVE_TIMEGM time_t timegm (struct tm *tm); #endif #ifdef HAVE_UNSIGNED_TIME_T # define INVALID_TIME_CHECK(a) ((a) == (time_t)(-1)) #else /* Error or 32 bit time_t and value after 2038-01-19. */ # define INVALID_TIME_CHECK(a) ((a) < 0) #endif /**************** * 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( !digitp(string+i) ) return 0; if( !digitp(string+5) || !digitp(string+6) ) return 0; if( !digitp(string+8) || !digitp(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; } /**************** * 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; if (INVALID_TIME_CHECK (atime)) { strcpy (buffer, "????" "-??" "-??"); } else { 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 GMT */ const char * isotimestamp (u32 stamp) { static char buffer[25+5]; struct tm *tp; time_t atime = stamp; if (INVALID_TIME_CHECK (atime)) { strcpy (buffer, "????" "-??" "-??" " " "??" ":" "??" ":" "??"); } else { tp = gmtime( &atime ); sprintf(buffer,"%04d-%02d-%02d %02d:%02d:%02d", 1900+tp->tm_year, tp->tm_mon+1, tp->tm_mday, tp->tm_hour, tp->tm_min, tp->tm_sec); } return buffer; } /* Scan am ISO timestamp and return an Epoch based timestamp. The only supported format is "yyyymmddThhmmss" delimited by white space, nul, a colon or a comma. Returns 0 for an invalid string. */ u32 isotime2seconds (const char *string) { const char *s; int year, month, day, hour, minu, sec; struct tm tmbuf; int i; time_t result; if (!*string) return 0; for (s=string, i=0; i < 8; i++, s++) if (!digitp (s)) return 0; if (*s != 'T') return 0; for (s++, i=9; i < 15; i++, s++) if (!digitp (s)) return 0; if ( !(!*s || (isascii (*s) && isspace(*s)) || *s == ':' || *s == ',')) return 0; /* Wrong delimiter. */ year = atoi_4 (string); month = atoi_2 (string + 4); day = atoi_2 (string + 6); hour = atoi_2 (string + 9); minu = atoi_2 (string + 11); sec = atoi_2 (string + 13); /* Basic checks. */ if (year < 1970 || month < 1 || month > 12 || day < 1 || day > 31 || hour > 23 || minu > 59 || sec > 61 ) return 0; memset (&tmbuf, 0, sizeof tmbuf); tmbuf.tm_sec = sec; tmbuf.tm_min = minu; tmbuf.tm_hour = hour; tmbuf.tm_mday = day; tmbuf.tm_mon = month-1; tmbuf.tm_year = year - 1900; tmbuf.tm_isdst = -1; result = timegm (&tmbuf); return (result == (time_t)(-1))? 0 : (u32)result; } /**************** * 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; if (INVALID_TIME_CHECK (atime)) { strcpy (buffer, "????" "-??" "-??"); return buffer; } tp = localtime( &atime ); #ifdef HAVE_STRFTIME #if defined(HAVE_NL_LANGINFO) # if GNUPG_GCC_VERSION >= 40600 # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wformat-nonliteral" # endif mem2str( fmt, nl_langinfo(D_T_FMT), DIM(fmt)-3 ); if( strstr( fmt, "%Z" ) == NULL ) strcat( fmt, " %Z"); strftime( buffer, DIM(buffer)-1, fmt, tp ); # if GNUPG_GCC_VERSION >= 40600 # pragma GCC diagnostic pop # endif #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, #ifdef HAVE_W32_SYSTEM "%c" #else "%c %Z" #endif , 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_string2( FILE *fp, const byte *p, size_t n, int delim, int delim2 ) { for( ; n; n--, p++ ) if (*p < 0x20 || *p == 0x7f || *p == delim || *p == delim2 || ((delim || delim2) && *p=='\\')) { 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); } void print_string( FILE *fp, const byte *p, size_t n, int delim ) { print_string2(fp,p,n,delim,0); } /**************** * Print an UTF8 string to FP and filter all control characters out. */ void print_utf8_string2 ( FILE *fp, const byte *p, size_t n, int delim ) { size_t i; char *buf; /* we can handle plain ascii simpler, so check for it first */ for(i=0; i < n; i++ ) { if( p[i] & 0x80 ) break; } if( i < n ) { buf = utf8_to_native ( p, n, delim ); /*(utf8 conversion already does the control character quoting)*/ fputs( buf, fp ); xfree( buf ); } else print_string( fp, p, n, delim ); } void print_utf8_string( FILE *fp, const byte *p, size_t n ) { print_utf8_string2 (fp, p, n, 0); } /**************** * This function returns a string which is suitable for printing * Caller must release it with xfree() */ 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( *p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim || (delim && *p=='\\')) { if( *p=='\n' || *p=='\r' || *p=='\f' || *p=='\v' || *p=='\b' || !*p ) buflen += 2; else buflen += 4; } else buflen++; } p = save_p; n = save_n; /* and now make the string */ d = buffer = xmalloc( buflen ); for( ; n; n--, p++ ) { if( *p < 0x20 || (*p >= 0x7f && *p < 0xa0) || *p == delim || (delim && *p=='\\')) { *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 += 3; } } else *d++ = *p; } *d = 0; return buffer; } int answer_is_yes_no_default( const char *s, int def_answer ) { /* TRANSLATORS: See doc/TRANSLATE about this string. */ const char *long_yes = _("yes"); const char *short_yes = _("yY"); /* TRANSLATORS: See doc/TRANSLATE about this string. */ const char *long_no = _("no"); const char *short_no = _("nN"); /* Note: we have to use the local dependent strcasecmp here */ if( match_multistr(long_yes,s) ) return 1; if( *s && strchr( short_yes, *s ) && !s[1] ) return 1; /* test for no strings to catch ambiguities for the next test */ if( match_multistr(long_no,s) ) return 0; if( *s && strchr( short_no, *s ) && !s[1] ) return 0; /* test for the english version (for those who are used to type yes) */ if( !ascii_strcasecmp(s, "yes" ) ) return 1; if( *s && strchr( "yY", *s ) && !s[1] ) return 1; return def_answer; } int answer_is_yes( const char *s ) { return answer_is_yes_no_default(s,0); } /**************** * Return 1 for yes, -1 for quit, or 0 for no */ int answer_is_yes_no_quit( const char *s ) { /* TRANSLATORS: See doc/TRANSLATE about this string. */ const char *long_yes = _("yes"); /* TRANSLATORS: See doc/TRANSLATE about this string. */ const char *long_no = _("no"); /* TRANSLATORS: See doc/TRANSLATE about this string. */ const char *long_quit = _("quit"); const char *short_yes = _("yY"); const char *short_no = _("nN"); const char *short_quit = _("qQ"); if( match_multistr(long_no,s) ) return 0; if( match_multistr(long_yes,s) ) return 1; if( match_multistr(long_quit,s) ) return -1; if( *s && strchr( short_no, *s ) && !s[1] ) return 0; if( *s && strchr( short_yes, *s ) && !s[1] ) return 1; if( *s && strchr( short_quit, *s ) && !s[1] ) return -1; /* but not here */ if( !ascii_strcasecmp(s, "yes" ) ) return 1; if( !ascii_strcasecmp(s, "quit" ) ) return -1; if( *s && strchr( "yY", *s ) && !s[1] ) return 1; if( *s && strchr( "qQ", *s ) && !s[1] ) return -1; return 0; } /* Return 1 for okay, 0 for for cancel or DEF_ANSWER for default. */ int answer_is_okay_cancel (const char *s, int def_answer) { /* TRANSLATORS: See doc/TRANSLATE about this string. */ const char *long_okay = _("okay|okay"); /* TRANSLATORS: See doc/TRANSLATE about this string. */ const char *long_cancel = _("cancel|cancel"); const char *short_okay = _("oO"); const char *short_cancel = _("cC"); /* Note: We have to use the locale dependent strcasecmp */ if ( match_multistr(long_okay,s) ) return 1; if ( match_multistr(long_cancel,s) ) return 0; if ( *s && strchr( short_okay, *s ) && !s[1] ) return 1; if ( *s && strchr( short_cancel, *s ) && !s[1] ) return 0; /* Always test for the English values (not locale here) */ if ( !ascii_strcasecmp(s, "okay" ) ) return 1; if ( !ascii_strcasecmp(s, "ok" ) ) return 1; if ( !ascii_strcasecmp(s, "cancel" ) ) return 0; if ( *s && strchr( "oO", *s ) && !s[1] ) return 1; if ( *s && strchr( "cC", *s ) && !s[1] ) return 0; return def_answer; } /* Try match against each substring of multistr, delimited by | */ int match_multistr(const char *multistr,const char *match) { do { size_t seglen=strcspn(multistr,"|"); if(!seglen) break; /* Using the localized strncasecmp */ if(strncasecmp(multistr,match,seglen)==0) return 1; multistr+=seglen; if(*multistr=='|') multistr++; } while(*multistr); return 0; } gnupg-1.4.20/util/simple-gettext.c0000644000175000017500000003441112635262326013745 00000000000000/* simple-gettext.c - a simplified version of gettext. * Copyright (C) 1995, 1996, 1997, 1999, * 2005 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 3 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, see . */ /* This is a simplified version of gettext written by Ulrich Drepper. * It is used for the Win32 version of GnuPG beucase all the overhead * of gettext is not needed and we have to do some special Win32 stuff. * I decided that this is far easier than to tweak gettext for the special * cases (I tried it but it is a lot of code). wk 15.09.99 */ #include #ifdef USE_SIMPLE_GETTEXT #if !defined (_WIN32) && !defined (__CYGWIN32__) #error This file can only be used under Windows or Cygwin32 #endif #include #include #include #include #include #include #include #include "types.h" #include "util.h" #include "windows.h" /* For GetModuleFileName. */ /* The magic number of the GNU message catalog format. */ #define MAGIC 0x950412de #define MAGIC_SWAPPED 0xde120495 /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 /* Header for binary .mo file format. */ struct mo_file_header { /* The magic number. */ u32 magic; /* The revision number of the file format. */ u32 revision; /* The number of strings pairs. */ u32 nstrings; /* Offset of table with start offsets of original strings. */ u32 orig_tab_offset; /* Offset of table with start offsets of translation strings. */ u32 trans_tab_offset; /* Size of hashing table. */ u32 hash_tab_size; /* Offset of first hashing entry. */ u32 hash_tab_offset; }; struct string_desc { /* Length of addressed string. */ u32 length; /* Offset of string in file. */ u32 offset; }; struct overflow_space_s { struct overflow_space_s *next; u32 idx; char d[1]; }; struct loaded_domain { char *data; int must_swap; u32 nstrings; char *mapped; /* 0 = not yet mapped, 1 = mapped, 2 = mapped to overflow space */ struct overflow_space_s *overflow_space; struct string_desc *orig_tab; struct string_desc *trans_tab; u32 hash_size; u32 *hash_tab; }; static struct loaded_domain *the_domain; static __inline__ u32 do_swap_u32( u32 i ) { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } #define SWAPIT(flag, data) ((flag) ? do_swap_u32(data) : (data) ) /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 /* The so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ static __inline__ ulong hash_string( const char *str_param ) { unsigned long int hval, g; const char *str = str_param; hval = 0; while (*str != '\0') { hval <<= 4; hval += (unsigned long int) *str++; g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } static struct loaded_domain * load_domain( const char *filename ) { FILE *fp; size_t size; struct stat st; struct mo_file_header *data = NULL; struct loaded_domain *domain = NULL; size_t to_read; char *read_ptr; fp = fopen( filename, "rb" ); if( !fp ) return NULL; /* can't open the file */ /* we must know about the size of the file */ if( fstat( fileno(fp ), &st ) || (size = (size_t)st.st_size) != st.st_size || size < sizeof (struct mo_file_header) ) { fclose( fp ); return NULL; } data = malloc( size ); if( !data ) { fclose( fp ); return NULL; /* out of memory */ } to_read = size; read_ptr = (char *) data; do { long int nb = fread( read_ptr, 1, to_read, fp ); if( nb < to_read ) { fclose (fp); free(data); return NULL; /* read error */ } read_ptr += nb; to_read -= nb; } while( to_read > 0 ); fclose (fp); /* Using the magic number we can test whether it really is a message * catalog file. */ if( data->magic != MAGIC && data->magic != MAGIC_SWAPPED ) { /* The magic number is wrong: not a message catalog file. */ free( data ); return NULL; } domain = calloc( 1, sizeof *domain ); if( !domain ) { free( data ); return NULL; } domain->data = (char *) data; domain->must_swap = data->magic != MAGIC; /* Fill in the information about the available tables. */ switch( SWAPIT(domain->must_swap, data->revision) ) { case 0: domain->nstrings = SWAPIT(domain->must_swap, data->nstrings); domain->orig_tab = (struct string_desc *) ((char *) data + SWAPIT(domain->must_swap, data->orig_tab_offset)); domain->trans_tab = (struct string_desc *) ((char *) data + SWAPIT(domain->must_swap, data->trans_tab_offset)); domain->hash_size = SWAPIT(domain->must_swap, data->hash_tab_size); domain->hash_tab = (u32 *) ((char *) data + SWAPIT(domain->must_swap, data->hash_tab_offset)); break; default: /* This is an invalid revision. */ free( data ); free( domain ); return NULL; } /* Allocate an array to keep track of code page mappings. */ domain->mapped = calloc( 1, domain->nstrings ); if( !domain->mapped ) { free( data ); free( domain ); return NULL; } return domain; } /* Set the file used for translations. Pass a NULL to disable translation. A new filename may be set at anytime. WARNING: After changing the filename you should not access any data retrieved by gettext(). If REGKEY is not NULL, the function tries to selected the language the registry key "Lang" below that key. If in addition the environment variable LANGUAGE has been set, that value will override a value set by the registry key. */ int set_gettext_file ( const char *filename, const char *regkey ) { struct loaded_domain *domain = NULL; if ( filename && *filename ) { if ( filename[0] == '/' #ifdef HAVE_DRIVE_LETTERS || ( isalpha(filename[0]) && filename[1] == ':' && (filename[2] == '/' || filename[2] == '\\') ) #endif ) { /* absolute path - use it as is */ domain = load_domain( filename ); } else if (regkey) /* Standard. */ { char *instdir, *langid, *fname; char *p; int envvar_mode = 0; again: if (!envvar_mode && (p = getenv ("LANGUAGE")) && *p) { envvar_mode = 1; langid = malloc (strlen (p)+1); if (!langid) return -1; strcpy (langid, p); /* We only make use of the first language given. Strip the rest. */ p = strchr (langid, ':'); if (p) *p = 0; /* In the $LANGUAGE case we do not use the registered installation directory but the one where the gpg binary has been found. */ instdir = malloc (MAX_PATH+5); if ( !instdir || !GetModuleFileName (NULL, instdir, MAX_PATH) ) { free (langid); free (instdir); return -1; /* Error getting the process' file name. */ } p = strrchr (instdir, DIRSEP_C); if (!p) { free (langid); free (instdir); return -1; /* Invalid file name returned. */ } *p = 0; } else { instdir = read_w32_registry_string ("HKEY_LOCAL_MACHINE", regkey, "Install Directory"); if (!instdir) return -1; langid = read_w32_registry_string (NULL, /* HKCU then HKLM */ regkey, "Lang"); if (!langid) { free (instdir); return -1; } } /* Strip stuff after a dot in case the user tried to enter the entire locale syntacs as usual for POSIX. */ p = strchr (langid, '.'); if (p) *p = 0; /* Build the key: "/.nls/.mo" We use a directory below the installation directory with the domain included in case the software has been insalled with other software altogether at the same place. */ fname = malloc (strlen (instdir) + 1 + strlen (filename) + 5 + strlen (langid) + 3 + 1); if (!fname) { free (instdir); free (langid); return -1; } strcpy (stpcpy (stpcpy (stpcpy (stpcpy ( stpcpy (fname, instdir),"\\"), filename), ".nls\\"), langid), ".mo"); free (instdir); free (langid); /* Better make sure that we don't mix forward and backward slashes. It seems that some Windoze versions don't accept this. */ for (p=fname; *p; p++) { if (*p == '/') *p = '\\'; } domain = load_domain (fname); free(fname); if (!domain && envvar_mode == 1) { /* In case it failed, we try again using the registry method. */ envvar_mode++; goto again; } } if (!domain) return -1; } if ( the_domain ) { struct overflow_space_s *os, *os2; free ( the_domain->data ); free ( the_domain->mapped ); for (os=the_domain->overflow_space; os; os = os2) { os2 = os->next; free (os); } free ( the_domain ); the_domain = NULL; } the_domain = domain; return 0; } static const char* get_string( struct loaded_domain *domain, u32 idx ) { struct overflow_space_s *os; char *p; p = domain->data + SWAPIT(domain->must_swap, domain->trans_tab[idx].offset); if (!domain->mapped[idx]) { size_t plen, buflen; char *buf; domain->mapped[idx] = 1; plen = strlen (p); buf = utf8_to_native (p, plen, -1); buflen = strlen (buf); if (buflen <= plen) strcpy (p, buf); else { /* There is not enough space for the translation - store it in the overflow_space else and mark that in the mapped array. Because we expect that this won't happen too often, we use a simple linked list. */ os = malloc (sizeof *os + buflen); if (os) { os->idx = idx; strcpy (os->d, buf); os->next = domain->overflow_space; domain->overflow_space = os; p = os->d; } else p = "ERROR in GETTEXT MALLOC"; } xfree (buf); } else if (domain->mapped[idx] == 2) { /* We need to get the string from the overflow_space. */ for (os=domain->overflow_space; os; os = os->next) if (os->idx == idx) return (const char*)os->d; p = "ERROR in GETTEXT\n"; } return (const char*)p; } const char * gettext( const char *msgid ) { struct loaded_domain *domain; size_t act = 0; size_t top, bottom; if( !(domain = the_domain) ) goto not_found; /* Locate the MSGID and its translation. */ if( domain->hash_size > 2 && domain->hash_tab ) { /* Use the hashing table. */ u32 len = strlen (msgid); u32 hash_val = hash_string (msgid); u32 idx = hash_val % domain->hash_size; u32 incr = 1 + (hash_val % (domain->hash_size - 2)); u32 nstr = SWAPIT (domain->must_swap, domain->hash_tab[idx]); if ( !nstr ) /* Hash table entry is empty. */ goto not_found; if( SWAPIT(domain->must_swap, domain->orig_tab[nstr - 1].length) == len && !strcmp( msgid, domain->data + SWAPIT(domain->must_swap, domain->orig_tab[nstr - 1].offset)) ) return get_string( domain, nstr - 1 ); for(;;) { if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; nstr = SWAPIT(domain->must_swap, domain->hash_tab[idx]); if( !nstr ) goto not_found; /* Hash table entry is empty. */ if ( SWAPIT(domain->must_swap, domain->orig_tab[nstr - 1].length) == len && !strcmp (msgid, domain->data + SWAPIT(domain->must_swap, domain->orig_tab[nstr - 1].offset))) return get_string( domain, nstr-1 ); } /* NOTREACHED */ } /* Now we try the default method: binary search in the sorted array of messages. */ bottom = 0; top = domain->nstrings; while( bottom < top ) { int cmp_val; act = (bottom + top) / 2; cmp_val = strcmp(msgid, domain->data + SWAPIT(domain->must_swap, domain->orig_tab[act].offset)); if (cmp_val < 0) top = act; else if (cmp_val > 0) bottom = act + 1; else return get_string( domain, act ); } not_found: return msgid; } #if 0 unsigned int cp1, cp2; cp1 = GetConsoleCP(); cp2 = GetConsoleOutputCP(); log_info("InputCP=%u OutputCP=%u\n", cp1, cp2 ); if( !SetConsoleOutputCP( 1252 ) ) log_info("SetConsoleOutputCP failed: %s\n", w32_strerror (0)); cp1 = GetConsoleCP(); cp2 = GetConsoleOutputCP(); log_info("InputCP=%u OutputCP=%u after switch1\n", cp1, cp2 ); #endif #endif /* USE_SIMPLE_GETTEXT */ gnupg-1.4.20/util/assuan-socket.c0000644000175000017500000000442612635262326013555 00000000000000/* assuan-socket.c * Copyright (C) 2004 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 3 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, see . */ /* Please note that this is a stripped down and modified version of the orginal Assuan code from libassuan. */ #include #include #ifdef HAVE_W32_SYSTEM #include #include #else #include #include #endif #include "assuan-defs.h" int _assuan_close (int fd) { #ifndef HAVE_W32_SYSTEM return close (fd); #else int rc = closesocket (fd); if (rc && WSAGetLastError () == WSAENOTSOCK) rc = close (fd); return rc; #endif } int _assuan_sock_new (int domain, int type, int proto) { #ifndef HAVE_W32_SYSTEM return socket (domain, type, proto); #else if (domain == AF_UNIX || domain == AF_LOCAL) domain = AF_INET; return socket (domain, type, proto); #endif } int _assuan_sock_connect (int sockfd, struct sockaddr * addr, int addrlen) { #ifndef HAVE_W32_SYSTEM return connect (sockfd, addr, addrlen); #else struct sockaddr_in myaddr; struct sockaddr_un * unaddr; FILE * fp; int port = 0; unaddr = (struct sockaddr_un *)addr; fp = fopen (unaddr->sun_path, "rb"); if (!fp) return -1; fscanf (fp, "%d", &port); fclose (fp); /* XXX: set errno in this case */ if (port < 0 || port > 65535) return -1; myaddr.sin_family = AF_INET; myaddr.sin_port = port; myaddr.sin_addr.s_addr = htonl (INADDR_LOOPBACK); /* we need this later. */ unaddr->sun_family = myaddr.sin_family; unaddr->sun_port = myaddr.sin_port; unaddr->sun_addr.s_addr = myaddr.sin_addr.s_addr; return connect (sockfd, (struct sockaddr *)&myaddr, sizeof myaddr); #endif } gnupg-1.4.20/util/srv.c0000644000175000017500000001330612635262326011604 00000000000000/* srv.c - DNS SRV code * Copyright (C) 2003, 2005, 2006, 2007, 2009 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 3 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, see . */ #include #include #ifdef _WIN32 #include #else #include #include #include #include #endif #include #include #include #include #include "srv.h" /* Not every installation has gotten around to supporting SRVs yet... */ #ifndef T_SRV # define T_SRV 33 # ifdef __VMS # include "cert_vms.h" # endif /* def __VMS */ #endif static int priosort(const void *a,const void *b) { const struct srventry *sa=a,*sb=b; if(sa->priority>sb->priority) return 1; else if(sa->prioritypriority) return -1; else return 0; } int getsrv(const char *name,struct srventry **list) { unsigned char answer[2048]; int r,srvcount=0; unsigned char *pt,*emsg; u16 count,dlen; HEADER *header=(HEADER *)answer; *list=NULL; r=res_query(name,C_IN,T_SRV,answer,2048); if(r2048) return -1; if(header->rcode==NOERROR && (count=ntohs(header->ancount))) { int i,rc; emsg=&answer[r]; pt=&answer[sizeof(HEADER)]; /* Skip over the query */ rc=dn_skipname(pt,emsg); if(rc==-1) goto fail; pt+=rc+QFIXEDSZ; while(count-->0 && ptpriority=*pt++ << 8; srv->priority|=*pt++; srv->weight=*pt++ << 8; srv->weight|=*pt++; srv->port=*pt++ << 8; srv->port|=*pt++; /* Get the name. 2782 doesn't allow name compression, but dn_expand still works to pull the name out of the packet. */ rc=dn_expand(answer,emsg,pt,srv->target,MAXDNAME); if(rc==1 && srv->target[0]==0) /* "." */ goto noanswer; if(rc==-1) goto fail; pt+=rc; /* Corrupt packet? */ if(dlen!=rc+6) goto fail; #if 0 printf("count=%d\n",srvcount); printf("priority=%d\n",srv->priority); printf("weight=%d\n",srv->weight); printf("port=%d\n",srv->port); printf("target=%s\n",srv->target); #endif } /* Now we have an array of all the srv records. */ /* Order by priority */ qsort(*list,srvcount,sizeof(struct srventry),priosort); /* For each priority, move the zero-weighted items first. */ for(i=0;i. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see . */ #ifdef _LIBC /* We have to keep the namespace clean. */ # define regfree(preg) __regfree (preg) # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) # define regerror(errcode, preg, errbuf, errbuf_size) \ __regerror(errcode, preg, errbuf, errbuf_size) # define re_set_registers(bu, re, nu, st, en) \ __re_set_registers (bu, re, nu, st, en) # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) # define re_match(bufp, string, size, pos, regs) \ __re_match (bufp, string, size, pos, regs) # define re_search(bufp, string, size, startpos, range, regs) \ __re_search (bufp, string, size, startpos, range, regs) # define re_compile_pattern(pattern, length, bufp) \ __re_compile_pattern (pattern, length, bufp) # define re_set_syntax(syntax) __re_set_syntax (syntax) # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) #endif #if _LIBC || __GNUC__ >= 3 # define BE(expr, val) __builtin_expect (expr, val) #else # define BE(expr, val) (expr) # define inline #endif #include "regcomp.c" #include "regexec.c" #include "regex_internal.c" /* Binary backward compatibility. */ #if _LIBC # include # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") int re_max_failures = 2000; # endif #endif gnupg-1.4.20/util/strsep.c0000644000175000017500000000204712635262326012312 00000000000000#include #include /* code taken from glibc-2.2.1/sysdeps/generic/strsep.c */ char * strsep (char **stringp, const char *delim) { char *begin, *end; begin = *stringp; if (begin == NULL) return NULL; /* A frequent case is when the delimiter string contains only one character. Here we don't need to call the expensive `strpbrk' function and instead work using `strchr'. */ if (delim[0] == '\0' || delim[1] == '\0') { char ch = delim[0]; if (ch == '\0') end = NULL; else { if (*begin == ch) end = begin; else if (*begin == '\0') end = NULL; else end = strchr (begin + 1, ch); } } else /* Find the end of the token. */ end = strpbrk (begin, delim); if (end) { /* Terminate the token and set *STRINGP past NUL character. */ *end++ = '\0'; *stringp = end; } else /* No more delimiters; this is the last token. */ *stringp = NULL; return begin; } gnupg-1.4.20/checks/0000755000175000017500000000000012635457223011170 500000000000000gnupg-1.4.20/checks/mkdemodirs0000755000175000017500000000215212635262326013172 00000000000000#!/bin/sh set -e GPG="../g10/gpg --batch --quiet --no-secmem-warning --allow-secret-key-import" NAMES='Alpha Bravo Charlie Delta Echo Foxtrot Golf Hotel India Juliet Kilo Lima Mike November Oscar Papa Quebec Romeo Sierra Tango Uniform Victor Whisky XRay Yankee Zulu' if [ "$1" = "--clean" ]; then (for i in $NAMES; do [ -d $i ] && rm -r $i done) || true exit 0 fi $GPG --dearmor -o secdemo.gpg --yes ../checks/secdemo.asc $GPG --dearmor -o pubdemo.gpg --yes ../checks/pubdemo.asc [ -f ./tdb.tmp ] && rm ./tdb.tmp GPGDEMO="$GPG --homedir . --trustdb-name ./tdb.tmp --no-default-keyring --keyring pubdemo.gpg --secret-keyring secdemo.gpg" echo -n "Creating:" for name in $NAMES; do echo -n " $name" [ -d $name ] && rm -r $name mkdir $name $GPGDEMO --export-secret-key -o - $name > $name/Secret.gpg $GPG --homedir $name --import $name/Secret.gpg $GPGDEMO --export -o - $name > $name/Public.gpg $GPG --homedir $name --import $name/Public.gpg [ -f $name/pubring.gpg~ ] && rm $name/pubring.gpg~ done echo "." [ -f ./tdb.tmp ] && rm ./tdb.tmp rm pubdemo.gpg secdemo.gpg gnupg-1.4.20/checks/signencrypt-dsa.test0000755000175000017500000000112512635262326015123 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking signing and encryption for DSA for i in $plain_files $data_files ; do $GPG $dsa_keyrings --always-trust -se -o x --yes \ -u "$dsa_usrname1" -r "$dsa_usrname2" $i $GPG $dsa_keyrings -o y --yes x cmp $i y || error "$i: mismatch" done for da in ripemd160 sha1; do for i in $plain_files; do $GPG $dsa_keyrings --always-trust -se -o x --yes --digest-algo $da \ -u "$dsa_usrname1" -r "$dsa_usrname2" $i $GPG $dsa_keyrings -o y --yes x cmp $i y || error "$i: mismatch" # process only the first one break done done gnupg-1.4.20/checks/plain-1-pgp.asc0000644000175000017500000000257312635262326013632 00000000000000This is an encrypted version of plain-1 for the PGP test key 0xCB879DE9 using 3DES. -----BEGIN PGP MESSAGE----- Version: GnuPG v1.3.5-cvs (GNU/Linux) hM4DW3oC8MuHnekQAv0U6qlDAA64QS/oZJErr1J77m5Dh7IFen3mAcwOxvL/POqS HQWTFcuFT4LH9asSWgRe6DebJGfscMjMqNPAkhEJtKQQ2jEesn2Bon6SMwah7vkD 9Zap7WKHRlnB/Da1/xQC/ispXY7e5tuejnzoNSAOWFpBn354nvkKGaCfMRNuz3R2 HljH+gXKRa00n2dPmvX9Mr8AI0Q+FoEI2/YW+6aUxmv8b0c2dP6HcL6HUu0Ro2Nl RJNPfYXP20EL/Xrv8LN0Ksnp3YKTWrz5gQKNr3DH5pn1PjFqAKz4JD6rQBpnlh1c 03gLB1OAJWA6+/QNaEQV451GBZW3ul10R/6621/kk0Isdxn/htlD4Jl/jAvFdlQW ULBu1HorZZ5X/IMuMRFwSQkx+H8i0zq+LGr8+rLFVTRuXBrgpeTLWs/f35DDblPp jtPGSs1qql98PfOV1tAr16rGRLAAyNWEgi3yZWUGgq5dfFnRbJX1hrj9waQmq1g0 mn1oB9Ig708xSZqcfFVFNpvIB7nmbFF/WaMnqfL3XmgTe8whKB/f/XYhg+W2d57h EmTcAlC1N6IHY8/7YqtnjitavTIUsi0hPldX0tvrjsaZ7ppSma2epRJhx47jIFjw wXOEByZE+K3pyTSN8KJxParDsqrTWFrL0t8az9W8lWG7YYsxUxk9cwRo5PyEko1M kAKrbDMb+02Iw35yeuxFY33dl7KqpaWy43ksX/ROxX4S0InQywaQejXyt5A1cJN1 t+G0aKdRp40MDKtOkZfFGlUSFZIhB0dxKVfSKJE/SIeYZzROTuyCNe/2wwufxgpa uztUf5ipVnINupiztWGw5c5Wp40ptQ/0K4/35KrZhMoFGR9DtImAPpZocuiFdJDt uqqapxGfJ876S4hFjRAkHSNRsAySul9zFLnIJ+Smk5xsvQZK4yjDwZfSs9b7WPKg 7NCxl5bF5dIbWRYdRBNjHQ4m3LyYmqKzQqALSYT54/9O35B7rb1fOB2SFIuME0QI 5XQq9QsH/f5rW8U6Ixzw1582B8fO1TMRhCqMyXozmsBJoWdCIQTQiVNyrbgLi+ss wKiKq4AymLXFMSpI4TOCc+rKiAdMpLbNO8Ndox5hZEGz+mqg84cgC/rkJc/P03KR uo0+rb5eSfJw9t+uzBXDmFHynayj0CB8wW9iwXknpdlHDo1z =7Otr -----END PGP MESSAGE----- gnupg-1.4.20/checks/armdetach.test0000755000175000017500000000040312635262326013737 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking armored detached signatures for i in $plain_files $data_files ; do echo "$usrpass1" | $GPG --passphrase-fd 0 -sab -o x --yes $i $GPG -o /dev/null --yes x <$i || error "$i: bad signature" done gnupg-1.4.20/checks/plain-2.asc0000644000175000017500000000336512635262326013047 00000000000000-----BEGIN PGP MESSAGE----- Version: GnuPG v1.3.5-cvs (GNU/Linux) hQEOA6urKKJHvid1EAP/aYXFOkxPzbBB0SWtyX+yyvZso8i1WJS3pzrHNXcXQSQx xOAfmlCiuXYrjEzlyDAn7k7RLAhUB/ffI58HnbkQ7btWujrHig/V1tQ0j5igR85M 3y2/msWu2c2pyeZnx29LzeoJ2aMVTbMObszlG+TNOuhCNn4unvbShrkFjNK5fi8E AIHiavE77ZPfcaUrXp6FJ6OuhbnJQ8y8CVpH++ddgU6xXK1vByMSsYqiOjfq08gV MzqT1eMVvKhSjl3R6Ktl7j+ErYM4KuIofIZsKc8M3JnoTSrLqWSEBq+DEiaSI58i SMJfzxfKA84bpJyLIjp4bjRIXveYoX8UjEnSNr3xuDIq0ukBoVe6Bx8lBActcwE+ kE7EffSBHUmnm8cvwZan+Ms8t9p9aQEzBxV/LfEXZyk36lK35zCH188iJR+tt9zs rNubkRuOjq9jAcBtrvgjTTO91Ru7z4RCYeMfnX9AauJZFShBNYN46GTIwqMWE9vq B/IYFH9/L2nufcrDQ6u5WxJo0y2FoPqVS4RKEZ4FlKnlT2Op0X1k9w+1nWTtKwQx fPsB+YRSKmVbZOXDeKAIVEyGHgR1Hj6pbo/IeHSJ2DJt5OFu6eLQYjxYjM7BPjPD Gn+lTUvqw5ykYpCcnvpEx25+qHh5HI11Hi0sLKzvB92hhsQ7+lU2D+iAzsMJKdwE u2bCnrZokzZwDBy6NISQ+hoc6NPPezQM4FLN0BB752fa9DYMQo5nEGfPUM7fv51A nUdGOmaDVWY54GQxiYzl0JAT41sQSYlVHcWBCGNAm064y+tsHVjDYcf5uze/3Iuw m/IbRGLBT7x+j2OqMX30yXoeHCg0/M/2c6vIzhdHEsJjTbTr+M4bMii/mB5kSo/7 x5R14Lr0mwnPNDFHG2egqd5uL8985+5BENm7q0pQHKGM5NxkjVSWCpzRgKcSEq5A x4Q2HbhEJNP6ZonnZkDmGM52Eq62eaR7t8+k9px35osfiTiClmVrjsTgl5Kvatk0 oL1aYEwp8OtavoSwidUTk+Xb+cEE09P5bnCFs5Js0e5wdo+/izJ6iBuF+PndTh4i 4ppFmt8/GZ63MKBJu4CZE7QJMVAcmmCrsGRONP2JVgmyaBjrIl5xk9FPXQVY0AJx gl3/jO/QFHYs+dlrQ3aqg8Mm0eZyLmZEYjoNibD8PW0keYiVfTF7EGl4jS2sAboc AOzbuABa+30vIjJRWeW5UdTcLyNK7B2qWk6dqpRn9ps3cwCWUiTIcIRgot4PY+3M 8BL4smyZIP1Fmz/woL7gSVIaJHMExHjYPyRlfo+6Vfy3hh3zdiB9e5xA8QRFKgUb Px5ShU5bBykfvFBJjgKU1XLBKqdklaudf3+v8F3LPIyuO6vTYzOIU9UKAHy9CrA2 kAZ8kgHBTtAjmKuJjASBCZHPepq0G9SaRDQI5g4DXx0LXPX3y5xkwVI6kd0QmsMF UU4ij/xjzIPN/AxBgQI8HKk56FnaX0JKoHm7mqWa+1TzbuvJjio4J/IN9XXzVqb1 YL+mkx607hdW9oJltXLO5eio0pb12v/0YXAQlsrlJJNPCUW5hYFv/vH1rHzR98xx nx4PXElm8VUuhKDxdVi9Ipo8fL9Amu3PwYonzOck3R2W4wwlmcopVQQ= =Ng8B -----END PGP MESSAGE----- gnupg-1.4.20/checks/plain-3o.asc0000644000175000017500000000046212635262326013222 00000000000000Stored by G10, because diff/patch have problems with files not having a trailing LF - and this one has none. -----BEGIN PGP ARMORED FILE----- Version: G10 v0.2.6a (Linux) Comment: This is an alpha version! RGllcyBpc3QgZWluZSBlaW5mYWNoZSBaZWlsZSBvaG5lIExGIGFtIEVuZGUu =ZQ6m -----END PGP ARMORED FILE----- gnupg-1.4.20/checks/secring.asc0000644000175000017500000001005012635262326013224 00000000000000This is a test secret keyring simply stored by GNUPG so that it is easier to make diff files. sec 1024D/D74C5F22 2003-12-31 Test one (pp=def) ssb 1024g/47BE2775 2003-12-31 sec 1024D/C40FDECF 2003-12-31 Test two (no pp) ssb 1024g/B27907AA 2003-12-31 sec 1024R/ECABF51D 2003-12-31 Test three (no pp) -----BEGIN PGP PRIVATE KEY BLOCK----- Version: GnuPG v1.3.5-cvs (GNU/Linux) lQHhBD/yNQgRBAC/KSfe6uVfDgA3BrGpNLhVxT/ytwXMpBI8pEdTiY0jWnYrb/Yu 8wtCeZ9GAux/ZA/ted+7pdibHXfX5PzDfgUTZwrIJa57OUpWwI878AzZxNsnVv1I P6ufGyESKME4PUQO5heKhwAb0gQwFwArS3v4oeYrEljhJ79kpt319JEAEwCg+hTk nylYwYGT/PEVQ4JlLPoWmqUEAJn1HX1Od5tyoK4OEAM5G+wHz3SBj4FMonZNWs1I t03JKHoM5ulQ2FgEWmBVIPTKSDm/jQXPYApz5DpxpoGYbTCaEo6zfE32AEzoXDmG AZE90Xhq/wcEN+JcHpHytAA/n+hYaR3sYegQ52mWMR+vdd99KO0V0jLRcckgBA7Z 2jlFA/98cyy2nYt0QI5Tf+t/d4WBeib2yNWVtZH/j7XpDqHLZDgVAYkazCA6ZF7B vLddBEqVAh1X5tqua4AXX9L4SGYb7B0LRV72alhYiWWHez126KjVgwRTUxtEJ4En HmYJRReLlXosPIRhXSz7HFAqalPXJ0DvC9kzTQnnjPOylyMPTf4CAwJkfa7fzYfs BWBdwH11VHPRv4hkbVaS7Vw6TTmc9D+ZEFv6pw+gTLldIfEZU3+24eoVkMjdwGF2 dXN/V7QjVGVzdCBvbmUgKHBwPWRlZikgPG9uZUBleGFtcGxlLmNvbT6IWgQTEQIA GgUCP/I1CAIbAwILAgMVAgMDFgIBAh4BAheAAAoJEA73cJbXTF8iUO4AnA8wHb3e rMrfWV3ij0d/cEiSJAYFAJ9fcbShgTXDN1dIVZvLSW5E93TfC50BVwQ/8jUNEAQA 6AJLWnjvNx15zRS9ULSmF7BqUdRTp/ua6VavSPRljVFTQg4/XwcB5Psg1zA9xRpS 8L0ph6deZhu87WLuw01QI6wpRqbCD6hI0xxszcDA3DGWCBPIlLU3pbMhfsyNEtSV Sq1stGE8MaUKW23rJ4CNLSllPrjpMA1oEOJEiCT3gAMAAwUD/0aHZfVLL7gin9G0 wkM9k5j5jqxZQ3s6IzYGR1SYIs6Zo5V+CuwR68p1IEGPShVY3zVTTaLuNDOGEAje 1kwUmY/+GUXsCVLkdJouPb63WccAorLvRCGyQg1HjUIK/2wcBzmA3Vatjk0Ol4jX YaaqxYw9BU9QexNN7RCxPpdsfO8L/gIDAmR9rt/Nh+wFYEvXzcetbmRUtlnyX2e0 2F35hsF4RxXrHAYepLiQbk+oWnYH8mWL5IED80PzjUifsIxDH9AWHUBvD+4NjxWI SQQYEQIACQUCP/I1DQIbDAAKCRAO93CW10xfInB4AKDKD5BulHRXb04ynP6YWel6 I2g3fQCgqJEJLoUNcIF3tp2jF2jBr80WmM2VAbsEP/JSaxEEAKxxqlg9Kz9DZ/3N 52BC0w+JtYKke39vpdWVDHR3MHmMJ/31Y2iSpm0fvRs3h1j9/fBVmLOZglNQyH62 SxdJyZwCelkZzfUy/qLm9Qaqi7wpg0p4EbmWdoFF/A1Zg/MU7D5w5xu+EA1J77Z6 QyALN9rIOXZ7rLLa64lw/MV4LdIPAKC449htJbbp5rkJHvBDs4YxEIkk5wP/X4hP GlIw5PlHrsG7hdahhTudV5hRGlvosnwsrYJXvKAQLAV1EV26SIYUH5pM/ycXrG25 dqVoG56uQqnhBdUqo4iSnsxY3ZMA46D14REc9P//CGvJ/j2Z41gw8u8oB7rS50dj voaWb5myj7bhacTBdfah3U8dVXcIi1ZFvtiaGAYD+gIF7eNIdpaYiB0427un4ggc 26+Y9nkF93DaMnZEaYSeum6g/g7D1vwINFgQkMYEWi4DK3W+uH0E/n8o20wS2wvM rbeYaQm5v6ucd001wwFDY6AdwpwP7UCLQcu6qqvwNHdxWYK6+gIsSufLmeMGrsvC 0WQqYeu1GfGpHIMCZJlZAACff9jWuNkBIYwr0gZvXL9kMpPTORMJ4LQiVGVzdCB0 d28gKG5vIHBwKSA8dHdvQGV4YW1wbGUuY29tPohfBBMRAgAfBQI/8lJrAhsDBwsJ CAcDAgEDFQIDAxYCAQIeAQIXgAAKCRCXPVDhxA/ez4BDAJ9sPyWbgc4424/Rt291 voaJYdMdFwCdFAxAg7wN6d8qoZKEWJZUiopPvzGdATEEP/JSbxAEAMzYsfnax02A jMUvDYlGTaVUxp1n8zI8QqlcmWLfQhJuwOCXH0m4EVKaairp8K3rg5pjRhXNVvpU 9aC37yWg4v6EP6Lm4CHKtBGeYDlMnWo/etT1d5bTZmmlEmbCeo0cWmtBQdXIMehF QfPIEeiQeJgDOClfgrf3/UMz79kzEvKrAAMGA/43c6bZ7IidduMk1uXsIb1FaZgx rk/QrgN4IFuuW4zoX62r1+a3xzAlyz1zDVxYKQNNdr4IVcLp/3pJI+/68WqWZpRN vGKUg4/D8J/5ZKjQI8uOujMvsFHqAoIO5hIP++YrNqICs8dS+dp2suwRpn0uNeZu wQY1h7IlAOikbRV7dQAA92kVxs7SWBQ/iTexM19Ih/AEK3xjAFOY+TlruFMjjLYO TohJBBgRAgAJBQI/8lJvAhsMAAoJEJc9UOHED97PLL4An2KG78IRsthGnHJOtnQP QrYoxb27AJ41qvZyQw0V5ClIAtEtd+JqUnxHmJUB1gQ/8lO9AQQAqFJWduzk11/m 0Ac/K/mab0kzzr3UUor1bkxh4vcxJHOTZF3a9Y6t1WUpwlOXeCNkY98tRYUg6A40 wFgkKz/4jdOaiDtHW2bOqrvJmJ/wH/5zdmDpthu53JEgXUKP/+j2dfrvYTZYxy2m 11DA68QK9iPSBmksglFMQE2IJatwEAEACQEBAAP4vKABRIX7dtUOm2y6VyGsESE5 D4YI1AhL0EWodt84EPEUvC1o61UuYbAe28JIHwjIKDLgDiedZ6hTBV3K5cI1aFHL 421hDE0qtD+mVZhcRGnR2RHhr9gX6qX+4P8mV0w1nhdShwUhlFO1GuwQ2/dWKwYd XGbDW7P58LIiudGWuQIAwzxYBjmWvVl1Kqvf2s2qe0tmqhdU7g2Jt3lPDej/ckxU n/ESozKSu517zueU8IAkw+Vf2CM/UHntSZHE3yYY2QIA3LWUXwDxr0OL1MMRuLrK PZ2wrRZRmGU0IDDx3zBX5VMsR/WNMwPLo8iimBT2F7ez3umPqqrugRtJj6ryF3t3 aQH+Kfst9psjWkmpBrEO99j4Gq6orYHnzd4fSnnOJEv4/ObdXrGBGwvV5RZblXCF A2kB3ShaYowpengtqBVzpD0cCZ6ntCZUZXN0IHRocmVlIChubyBwcCkgPHRocmVl QGV4YW1wbGUuY29tPoi1BBMBAgAfBQI/8lO9AhsDBwsJCAcDAgEDFQIDAxYCAQIe AQIXgAAKCRDRILYm7Kv1HWpDA/9sINfVYaTW7TOQolYn9Vee4feOTpl6+S4dkgLC OWoDG/V17k/cl7Jr/iQ+YRBOi0S/fFwMBn72kEvdOtmiUAqHGQFnTyXhBLLvqTJ/ yEHR6hnZK+zsusY8EmvoIdfSTIOJqkeACEEpCr0aE0qkgBm4voMrZ05pAO2hFJba IHWHiQ== =52aT -----END PGP PRIVATE KEY BLOCK----- gnupg-1.4.20/checks/multisig.test0000755000175000017500000001122112635262326013644 00000000000000#!/bin/sh # Check that gpg verifies only signatures where there is no ambiguity # in the order of packets. Needs the Demo Keys Lima and Mike. # Note: We do son't support multiple signaturess anymore thus thsi test is # not really needed becuase verify could do the same. We keep it anyway. . $srcdir/defs.inc || exit 3 suspend_error sig_1ls1ls_valid=' -----BEGIN PGP ARMORED FILE----- kA0DAAIRN8q1H7eRA/gBrCdiBXRleHQxOogq9EkgYW0gc29ycnksIEkgY2FuJ3Qg ZG8gdGhhdAqIPwMFADqIKvQ3yrUft5ED+BEC2joAoJaSaXOZEtSZqQ780HIXG77e 8PB7AJ4wCprmaFTO0fBaTcXDuEOBdAWnOZANAwACETfKtR+3kQP4AawnYgV0ZXh0 MTqIKvRJIGFtIHNvcnJ5LCBJIGNhbid0IGRvIHRoYXQKiD8DBQA6iCr0N8q1H7eR A/gRAto6AKCWkmlzmRLUmakO/NByFxu+3vDwewCeMAqa5mhUztHwWk3Fw7hDgXQF pzk= =8jSC -----END PGP ARMORED FILE----- ' sig_ls_valid=' -----BEGIN PGP ARMORED FILE----- rCdiBXRleHQxOogrS0kgYW0gc29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqI K0s3yrUft5ED+BECLQMAn2jZUNOpB4OuurSQkc2TRfg6ek02AJ9+oJS0frQ+yUsT QDUFTH2PvZRxjw== =J+lb -----END PGP ARMORED FILE----- ' sig_sl_valid=' -----BEGIN PGP ARMORED FILE----- iD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeDrrq0kJHNk0X4OnpNNgCffqCU tH60PslLE0A1BUx9j72UcY+sJ2IFdGV4dDE6iCtLSSBhbSBzb3JyeSwgSSBjYW4n dCBkbyB0aGF0Cg== =N9MP -----END PGP ARMORED FILE----- ' sig_11lss_valid_but_is_not=' -----BEGIN PGP ARMORED FILE----- kA0DAAIRN8q1H7eRA/gAkA0DAAIRN8q1H7eRA/gBrCdiBXRleHQxOogyXUkgYW0g c29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqIMl03yrUft5ED+BECwQAAnRXT mXjVd385oD38W80XuheWKTGcAJ9pZ6/flaKDfw+SLido7xaUHuhp5Yg/AwUAOogy XTfKtR+3kQP4EQLBAACgnN0IP+NztE0aAc/DZ17yHWR9diwAniN0P01WmbgZJoZB Q341WRXKS/at =Ekrs -----END PGP ARMORED FILE----- ' sig_11lss11lss_valid_but_is_not=' -----BEGIN PGP ARMORED FILE----- kA0DAAIRN8q1H7eRA/gAkA0DAAIRN8q1H7eRA/gBrCdiBXRleHQxOogyXUkgYW0g c29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqIMl03yrUft5ED+BECwQAAnRXT mXjVd385oD38W80XuheWKTGcAJ9pZ6/flaKDfw+SLido7xaUHuhp5Yg/AwUAOogy XTfKtR+3kQP4EQLBAACgnN0IP+NztE0aAc/DZ17yHWR9diwAniN0P01WmbgZJoZB Q341WRXKS/atkA0DAAIRN8q1H7eRA/gAkA0DAAIRN8q1H7eRA/gBrCdiBXRleHQx OogyXUkgYW0gc29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqIMl03yrUft5ED +BECwQAAnRXTmXjVd385oD38W80XuheWKTGcAJ9pZ6/flaKDfw+SLido7xaUHuhp 5Yg/AwUAOogyXTfKtR+3kQP4EQLBAACgnN0IP+NztE0aAc/DZ17yHWR9diwAniN0 P01WmbgZJoZBQ341WRXKS/at =P1Mu -----END PGP ARMORED FILE----- ' sig_ssl_valid_but_is_not=' -----BEGIN PGP ARMORED FILE----- iD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeDrrq0kJHNk0X4OnpNNgCffqCU tH60PslLE0A1BUx9j72UcY+IPwMFADqIK0s3yrUft5ED+BECLQMAn2jZUNOpB4Ou urSQkc2TRfg6ek02AJ9+oJS0frQ+yUsTQDUFTH2PvZRxj6wnYgV0ZXh0MTqIK0tJ IGFtIHNvcnJ5LCBJIGNhbid0IGRvIHRoYXQK =Zven -----END PGP ARMORED FILE----- ' sig_1lsls_invalid=' -----BEGIN PGP ARMORED FILE----- kA0DAAIRN8q1H7eRA/gBrCdiBXRleHQxOogq9EkgYW0gc29ycnksIEkgY2FuJ3Qg ZG8gdGhhdAqIPwMFADqIKvQ3yrUft5ED+BEC2joAoJaSaXOZEtSZqQ780HIXG77e 8PB7AJ4wCprmaFTO0fBaTcXDuEOBdAWnOawnYgV0ZXh0MTqIK0tJIGFtIHNvcnJ5 LCBJIGNhbid0IGRvIHRoYXQKiD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeD rrq0kJHNk0X4OnpNNgCffqCUtH60PslLE0A1BUx9j72UcY8= =nkeu -----END PGP ARMORED FILE----- ' sig_lsls_invalid=' -----BEGIN PGP ARMORED FILE----- rCdiBXRleHQxOogrS0kgYW0gc29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqI K0s3yrUft5ED+BECLQMAn2jZUNOpB4OuurSQkc2TRfg6ek02AJ9+oJS0frQ+yUsT QDUFTH2PvZRxj6wnYgV0ZXh0MTqIK0tJIGFtIHNvcnJ5LCBJIGNhbid0IGRvIHRo YXQKiD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeDrrq0kJHNk0X4OnpNNgCf fqCUtH60PslLE0A1BUx9j72UcY8= =BlZH -----END PGP ARMORED FILE----- ' sig_lss_invalid=' -----BEGIN PGP ARMORED FILE----- rCdiBXRleHQxOogrS0kgYW0gc29ycnksIEkgY2FuJ3QgZG8gdGhhdAqIPwMFADqI K0s3yrUft5ED+BECLQMAn2jZUNOpB4OuurSQkc2TRfg6ek02AJ9+oJS0frQ+yUsT QDUFTH2PvZRxj4g/AwUAOogrSzfKtR+3kQP4EQItAwCfaNlQ06kHg666tJCRzZNF +Dp6TTYAn36glLR+tD7JSxNANQVMfY+9lHGP =jmt6 -----END PGP ARMORED FILE----- ' sig_slsl_invalid=' -----BEGIN PGP ARMORED FILE----- iD8DBQA6iCtLN8q1H7eRA/gRAi0DAJ9o2VDTqQeDrrq0kJHNk0X4OnpNNgCffqCU tH60PslLE0A1BUx9j72UcY+sJ2IFdGV4dDE6iCtLSSBhbSBzb3JyeSwgSSBjYW4n dCBkbyB0aGF0Cog/AwUAOogrSzfKtR+3kQP4EQItAwCfaNlQ06kHg666tJCRzZNF +Dp6TTYAn36glLR+tD7JSxNANQVMfY+9lHGPrCdiBXRleHQxOogrS0kgYW0gc29y cnksIEkgY2FuJ3QgZG8gdGhhdAo= =phBF -----END PGP ARMORED FILE----- ' for i in sig_sl_valid ; do eval "(IFS=; echo \"\$$i\")" | ./gpg_dearmor >x $GPG --verify x 2>/dev/null || error "valid is invalid ($i)" linefeed done #for i in "$sig_11lss_valid_but_is_not" "$sig_11lss11lss_valid_but_is_not" \ # "$sig_ssl_valid_but_is_not"; do # echo "$i" | $GPG --dearmor >x # $GPG --verify /dev/null || error "valid is invalid" #done for i in sig_1ls1ls_valid sig_ls_valid \ sig_1lsls_invalid sig_lsls_invalid \ sig_lss_invalid sig_slsl_invalid ; do eval "(IFS=; echo \"\$$i\")" | ./gpg_dearmor >x $GPG --verify /dev/null && error "invalid is valid ($i)" linefeed done resume_error gnupg-1.4.20/checks/detach.test0000755000175000017500000000037112635262326013243 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking detached signatures for i in $plain_files $data_files ; do echo "$usrpass1" | $GPG --passphrase-fd 0 -sb -o x --yes $i $GPG -o /dev/null --yes x <$i || error "$i: bad signature" done gnupg-1.4.20/checks/genkey1024.test0000755000175000017500000000107212635262326013603 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 ../g10/gpg --quiet --batch --quick-random --homedir . --gen-key <y # MD5 test_one ":1:" "D41D8CD98F00B204E9800998ECF8427E" # SHA-1 test_one ":2:" "DA39A3EE5E6B4B0D3255BFEF95601890AFD80709" # RMD160 test_one ":3:" "9C1185A5C5E9FC54612808977EE8F548B2258D31" # SHA-224 if have_hash_algo "SHA224"; then test_one ":11:" "D14A028C2A3A2BC9476102BB288234C415A2B01F828EA62AC5B3E42F" else echo "Hash algorithm SHA-224 is not installed (not an error)" fi # SHA-256 if have_hash_algo "SHA256"; then test_one ":8:" "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855" else echo "Hash algorithm SHA-256 is not installed (not an error)" fi # SHA-384 if have_hash_algo "SHA384"; then test_one ":9:" "38B060A751AC96384CD9327EB1B1E36A21FDB71114BE07434C0CC7BF63F6E1DA274EDEBFE76F65FBD51AD2F14898B95B" else echo "Hash algorithm SHA-384 is not installed (not an error)" fi # SHA-512 if have_hash_algo "SHA512"; then test_one ":10:" "CF83E1357EEFB8BDF1542850D66D8007D620E4050B5715DC83F4A921D36CE9CE47D0D13C5D85F2B0FF8318D2877EEC2F63B931BD47417A81A538327AF927DA3E" else echo "Hash algorithm SHA-512 is not installed (not an error)" fi [ "$failed" != "" ] && error "$failed failed for empty string" echo_n "abcdefghijklmnopqrstuvwxyz" | $GPG --with-colons --print-mds >y test_one ":1:" "C3FCD3D76192E4007DFB496CCA67E13B" test_one ":2:" "32D10C7B8CF96570CA04CE37F2A19D84240D3A89" test_one ":3:" "F71C27109C692C1B56BBDCEB5B9D2865B3708DBC" if have_hash_algo "SHA224"; then test_one ":11:" "45A5F72C39C5CFF2522EB3429799E49E5F44B356EF926BCF390DCCC2" fi if have_hash_algo "SHA256"; then test_one ":8:" "71C480DF93D6AE2F1EFAD1447C66C9525E316218CF51FC8D9ED832F2DAF18B73" fi if have_hash_algo "SHA384"; then test_one ":9:" "FEB67349DF3DB6F5924815D6C3DC133F091809213731FE5C7B5F4999E463479FF2877F5F2936FA63BB43784B12F3EBB4" fi if have_hash_algo "SHA512"; then test_one ":10:" "4DBFF86CC2CA1BAE1E16468A05CB9881C97F1753BCE3619034898FAA1AABE429955A1BF8EC483D7421FE3C1646613A59ED5441FB0F321389F77F48A879C7B1F1" fi [ "$failed" != "" ] && error "$failed failed for a..z" exit 0 gnupg-1.4.20/checks/ChangeLog-20110000644000175000017500000002333612635262326013250 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2010-10-19 David Shaw * armor.test: Tweak the bug 1179 test to only run if Twofish is included in the program. The sample message requires Twofish. 2010-05-12 Werner Koch * armor.test: Extend to test bug 1179. 2007-12-14 Werner Koch * Makefile.am (./gpg_dearmor): Revert last change. The actual fix was to make --no-options work correctly. 2007-11-28 David Shaw * defs.inc: Use new --list-config method to get cipher and digest names. 2007-11-22 Werner Koch * Makefile.am (./gpg_dearmor): Add --homedir so that we don't auto create a ~/.gnupg/. From Gentoo. 2007-07-18 David Shaw * defs.inc (all_hash_algos): See "all_cipher_algos", below. * sigs.test: Use it here, and also test with >=160 bit hashes for DSA2. 2007-05-14 David Shaw * defs.inc (all_cipher_algos): New function to return all ciphers we support. This is safer than the previous setup which could hide that some ciphers weren't being tested. Plus, this automatically tests any new ciphers we may add. * conventional.test, encrypt-test, encrypt-dsa.test, conventional-mdc.test: Use it here. 2007-05-02 David Shaw * conventional.test, encrypt.test, encrypt-dsa.test, conventional-mdc.test: Fix some broken tests that were only testing 3DES instead of all available ciphers. 2007-03-04 David Shaw * verify.test: Use --allow-multiple-messages instead of --allow-multisig-verification. Two clearsigs in a row counts as a multiple-message test. 2006-12-11 Werner Koch * verify.test (msg_clsclss_asc): Work around a bug in OpenBSD. 2006-04-19 David Shaw * sigs.test, mds.test: Add tests for SHA-224, SHA-384, and SHA-512. 2006-04-11 Werner Koch * armor.test: New. 2006-03-09 Werner Koch * defs.inc: Removed Basishm by proper redirection. 2006-03-06 Werner Koch * defs.inc: Print error messages also to stderr. Allow for verbose environment variable. (linefeed): New. (suspend_error, resume_error): New. * verify.test: More tests. * multisig.test: Better error printing. (sig_1ls1ls_valid, sig_ls_valid): Moved to the non-valid group. 2006-02-14 Werner Koch * verify.test: New. 2005-06-21 Werner Koch * conventional.test (algos): Uhh ohh, cut+paste error and not tested. 2005-06-02 Werner Koch * conventional.test: have_cipher_algo now requires uppercase algorithm names. Changed. Noted by John R. Shannon. 2004-02-09 David Shaw * clearsig.test, sigs.test: Properly detect RSA being missing, and use the proper key for doing an RSA test. 2003-12-31 David Shaw * clearsig.test, conventional-mdc.test, conventional.test, defs.inc, encrypt-dsa.test, encrypt.test, genkey1024.test, plain-1.asc, plain-1-pgp.asc, plain-2.asc, plain-3.asc, pubring.asc, secring.asc, sigs.test: Rework tests to work properly with a gpg binary that doesn't have all ciphers and all pk algos. Basically, we test for the ciphers we have, only test signing with non-160-bit hashes with RSA (we test all hashes as hashes). Test all key lengths of AES. 2003-12-05 David Shaw * Makefile.am: Reenable tests now that the Elgamal signature keys are gone. * defs.inc, pubring.asc, secring.asc, plain-1.asc, plain-2.asc, plain-3.asc: Remove the old v3 Elgamal keys and replace with RSA+Elgamal and RSA s+e. 2003-12-03 David Shaw * options: Remove emulate-md-encode-bug. 2003-11-27 Werner Koch * Makefile.am (TESTS): Temporary remove tests using ElG signatures. 2003-09-04 David Shaw * mds.test, sigs.test: Remove TIGER/192 and make SHA-256 optional (since it might not be compiled in). 2003-07-10 David Shaw * Makefile.am: Add --no-permission-warning to avoid spurious warning when importing demo keys. 2003-05-27 Werner Koch * Makefile.am (CLEANFILES): Add gpg.conf 2003-05-26 David Shaw * defs.inc (pgmname): Make sure there is a valid options file. (From wk on stable branch) * mds.test: Note that missing algorithms are not errors. 2003-04-23 David Shaw * Makefile.am, options.in: Rename options.in to options since it no longer needs to be a generated file. * sigs.test: TODO note to add the new SHAs when we start generating them. * mds.test: Test the new SHAs. 2002-05-10 Werner Koch * Makefile.am: Add gpg_dearmor to all targets where it is used. Noted by Andreas Haumer. 2002-04-19 Werner Koch * signencrypt-dsa.test, sigs-dsa.test: Don't check with MD5 as this is not valid with DSA signatures. 2001-12-22 Werner Koch * options.in: Add no-permission-warning. 2001-12-21 Werner Koch * Makefile.am (distclean-local): prefix mkdemodirs with srcdir (DISTCLEANFILES): Add random_seed. 2001-12-19 Werner Koch * options.in: Remove load-extension tiger * Makefile.am (./options): append it if there is such a module. 2001-10-23 Werner Koch * defs.inc, Makefile.am: Do not use $srcdir when invoking gpg. Write the logfile to the current directory. 2001-09-28 Werner Koch * defs.inc: Write a log file for each test. * run-gpg, run-gpgm, run-gpg.patterns: Removed. Replaced in all tests by a simple macro from defs.inc. * Makefile.am (CLEANFILES): Remove log files. (./gpg_dearmor): create it and use it instead of the macro. This is needed in multisig.test due to IFS tricks. * armsignencrypt.test, signencrypt-dsa.test, signencrypt.test, armencryptp.test, armencrypt.test, encryptp.test, seat.test, encrypt-dsa.test, encrypt.test: Use --always-trust because the test are not designed to check the validity. 2001-09-06 Werner Koch * genkey1024.test: Simplified by using a parameter file. 2001-05-30 Werner Koch * multisig.test (IFS): Reset IFS just before the test. 2001-04-30 Werner Koch * multisig.test: Add an set +x to avoid ksh problems 2001-04-28 Werner Koch * run-gpg.patterns: a v3 test key expired yesterday, suppress the messages. 2001-03-27 Werner Koch * defs.inc: Removed creation of options file. * options.in: New. * Makefile.am: Create options file and fixed import of pubdemo.asc. * run-gpg.patterns (gpg): Add some more patterns. 2001-03-20 Werner Koch * Makefile.am: Import the pubdemo.asc file * sigs.test (hash_algo_list): s/tiger/tiger192/ 2001-03-19 Werner Koch * mkdemodirs (GPGDEMO): Add --allow-secret-key-import to all gpg invocations. Use echon -n instead of an argument with \c. 2001-02-12 Werner Koch * multisig.test: new * Makefile.am (TESTS): Added. 2000-10-18 Werner Koch * conventional-mdc.test: Add Rijndael and fix for empty plain texts. Thu Feb 10 17:39:44 CET 2000 Werner Koch * mkdemodirs: Fixed the --clean loop. Thu Jan 13 19:31:58 CET 2000 Werner Koch * defs.inc (chdir): Removed becuase it is unsused an plain old sh does not like this name. Reported by Alec Habig. Tue Oct 26 20:02:23 1999 Werner Koch (wk@gnupg.org) * Makefile.am (GPG_DEARMOR): New and use --no-options. Tue Aug 31 17:20:44 CEST 1999 Werner Koch * defs.inc: set LC_ALL empty Wed Aug 4 10:34:18 CEST 1999 Werner Koch * defs.inc (echo_n): New and used instead of /bin/echo "\c" Sun Apr 18 10:11:28 CEST 1999 Werner Koch * mkdemodirs: New * signdemokey: New. * Makefile.am (distclean-local): New. Wed Mar 17 13:09:03 CET 1999 Werner Koch * mds.test: replaced the "echo -n" Mon Mar 8 20:47:17 CET 1999 Werner Koch * pubdemo.asc, secdemo.asc: New. Fri Feb 19 15:49:15 CET 1999 Werner Koch * genkey1024.test: Be really quiet. 1999-01-01 Geoff Keating * Makefile.am (CLEANFILES): Also delete trustdb and any leftover lockfiles. Fri Nov 27 15:30:24 CET 1998 Werner Koch * clearsig.test: Some more test cases. Sun Oct 25 18:19:35 1998 Werner Koch (wk@isil.d.shuttle.de) * mds.test: Check whether TIGER is available. * sigs.tesr: Ditto. Wed Sep 23 12:25:07 1998 Werner Koch (wk@isil.d.shuttle.de) * run-gpg.patterns: New (because Solaris fgrep does not like -f -). Mon Aug 10 21:33:38 1998 Werner Koch (wk@(none)) * genkey1024.test: Ariel fixed this. Wed Jul 8 10:43:47 1998 Werner Koch (wk@isil.d.shuttle.de) * seat.test: New. Mon May 18 15:40:02 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.am: Now uses mk-tdata to produce random test data. * ChangeLog: New. Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/checks/conventional.test0000755000175000017500000000115112635262326014507 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking conventional encryption for i in plain-2 data-32000 ; do echo "Hier spricht HAL" | $GPG --passphrase-fd 0 -c -o x --yes $i echo "Hier spricht HAL" | $GPG --passphrase-fd 0 -o y --yes x cmp $i y || error "$i: mismatch" done for a in `all_cipher_algos`; do echo_n "$a " for i in plain-1 data-80000 ; do echo "Hier spricht HAL" | $GPG --passphrase-fd 0 \ --cipher-algo $a -c -o x --yes $i echo "Hier spricht HAL" | $GPG --passphrase-fd 0 -o y --yes x cmp $i y || error "$i: ($a) mismatch" done done echo_n "| " gnupg-1.4.20/checks/plain-3.asc0000644000175000017500000000113712635262326013043 00000000000000-----BEGIN PGP MESSAGE----- Version: GnuPG v1.3.5-cvs (GNU/Linux) hQEOA6urKKJHvid1EAQAreXx68NPUPpiNhqRyM//Y97N8hX5iAWq3WxXTa8D6Hy9 81Jy2wI4IeDhHIoWuXMIX2oVL//V1+LyLkrF/tutBVvqct0TUDUWqb4Ydpfk2l5j FfSybWW1fS4D1e0KVB3Lfj2Y4cCoT/+zyq7jUKQE++qNefPBzeaRWY4qeI6xXF8E AMj01HPe0ZwIBWqiIYv91Q7rGzEZm0ROPilgSQjUvCdsNQGhZpFGTl6uMSU0lmp8 SD2EKv3xGeo2nMPy/Xp4JoYAMW+fjJh+wM6uT84nJgCVaeWyR7HAfF1U4rzqz7DF amPozuwuZiyjoo/wB1irZSl90t5Oa69oMesZtGMvwBN10mMBM0TotT4gjgviv5uY kLjD7DM79xy0drptNypmcVcjnDunM6bSEhTyq/fahdaULTYcwSOTXVMyesNpmLCb ziayleyuSaXPxIqWTgSfkab/W2FGWZvbexYaSaWXmDqsyzs81o0= =JDKF -----END PGP MESSAGE----- gnupg-1.4.20/checks/decrypt-dsa.test0000755000175000017500000000033212635262326014227 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking decryption of supplied DSA encrypted file for i in "plain-1" ; do $GPG $dsa_keyrings -o y --yes $srcdir/$i-pgp.asc cmp $i y || error "$i: mismatch" done gnupg-1.4.20/checks/secring.skr.asc0000644000175000017500000000247612635262326014037 00000000000000This is a test secring generated by pgp 5 beta Type Bits KeyID Created Expires Algorithm Use sec+ 768 439F02CA 1998-03-17 ---------- DSS Sign and Encrypt sub 768 CB879DE9 1998-03-17 ---------- Diffie-Hellman uid pgp5 test There is no password on the key -----BEGIN PGP ARMORED FILE----- Version: GNUPG v0.2.13a (Linux) Comment: This is an alpha version! Comment: Use "gpgm --dearmor" for unpacking lQFbBDUOrE4RAwDbbxWAbWsheUJprK6VryMTpwDiYwMfL+92nrHqSfPqlpMWgDTia8qnpRSXbyEm Sppp/6/Ygp+N3n32Kznq7PjHXiuWLlZGvZMtzmvaMA17y0GY6oLBxS7rhASXIKa9hEUAoP+KBFly qNMdsK8j+ZO0A8rnImGrAwC1ddDme5iZFkTEWHhrtU97sEu2GDkSQB8HdX8CoRcrOz/B2WliF6qf BKhcZPFVBIhKNzjTfY7SEYAZk2zcsCm8elnwSLaGEzxKFNFBqKDNXP+a35spcqsHSGzDVw4VuKMD AJNnAP6skpHlhVAmecLZT9eRzVoOq1ivUIntK2Mh47qsL74q6BBwz2sviPU2Y3pDlbb6Ed0qJAXv dCT24hlfoGoXzkoDInkPJTJeL0gCnwmQPjvXFFd71Cvg5LaL4lIQLQAAn3GbgsWo+7E/hWakzstp TXzI2kDIDIm0GXBncDUgdGVzdCA8cGdwNUBkZXYubnVsbD6dAO8ENQ6sVhADAP8Fa5TbD6k8VmW1 IjK1DfDI0xUdsVIbk8N3Hb0YIlT1E/6tZdfiNwqaKVQcf17gJIObBwfNM3OqWYOudmBVd3S6E3Hk u64nW+ZNt7B2toWRgnk6OgHcSDsud4Igjwz/RQACAgL/ToefzlcVKiPuobKfXHDhIUQPTfGic2Az 47wkMoYHo9j9ZE7AWaliMdPz4jLyLfqqoU9mH8g+vJhyAc7UnAF2Sk5466FDypdPm5F9PTW3cqqI wJM4WgkSlM8J2hxH4YtlAADlG+pxFXNFuDPmcq6jL6dug2ikZ7hcHLAy7DddSS8OAA== =1UWo -----END PGP ARMORED FILE----- gnupg-1.4.20/checks/defs.inc0000755000175000017500000000645312635262326012535 00000000000000# definitions for the check scripts -*- sh -*- #-------------------------------- #------ constants --------------- #-------------------------------- # First the Makefile generated constants . ./defs-config.inc || exit 3 # Note that usrpass1 is also used in Makefile.am usrname1="one" usrpass1="def" usrname2="two" usrpass2="" usrname3="three" usrpass3="" dsa_usrname1="pgp5" # we use the sub key because we do not yet have the logic to # to derive the first encryption key from a keyblock (I guess) dsa_usrname2="0xCB879DE9" dsa_keyrings="--keyring ./pubring.pkr --secret-keyring ./secring.skr" plain_files="plain-1 plain-2 plain-3" data_files="data-500 data-9000 data-32000 data-80000" exp_files="" # The testscripts expect the original language LANG= LANGUAGE= LC_ALL= LC_MESSAGES= # Internal use. defs_stop_on_error=no defs_error_seen=no #-------------------------------- #------ utility functions ------- #-------------------------------- fatal () { echo "$pgmname: fatal:" $* >&2 echo "$pgmname: fatal:" $* >&5 exit 1; } error () { echo "$pgmname:" $* >&2 defs_error_seen=yes echo "$pgmname:" $* >&5 if [ x$defs_stop_on_error != xyes ]; then exit 1 fi } # Call this at the start of a test and resume_error at the end to keep # on running all subtests without immediately exiting on error. suspend_error () { defs_stop_on_error=yes } resume_error () { if [ x$defs_error_seen = xyes ]; then exit 1 fi defs_stop_on_error=no defs_error_seen=no } info () { echo "$pgmname:" $* >&2 if [ -n "${verbose+set}" ]; then echo "$pgmname:" $* >&5 fi } linefeed () { echo >&2 } echo_n_init=no echo_n () { if test "$echo_n_init" = "no"; then if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then echo_n_n= echo_n_c=' ' else echo_n_n='-n' echo_n_c= fi else echo_n_n= echo_n_c='\c' fi echo_n_init=yes fi echo $echo_n_n "${1}$echo_n_c" } #cleanup () { # rm $cleanup_files 2>/dev/null || true # echo "#empty" >./options #} #add_cleanup () { # cleanup_files="$cleanup_files $*" #} # Special function for zOS. my_chtag () { #FIXME: Is there an envvar to test for the OS or do we # need to resort to a configure test #if test "$FOO" = "bar"; then # chtag -tc ISO8859-1 $1 #fi : } have_pubkey_algo () { if ../g10/gpg --homedir . --version | grep "Pubkey:.*$1" >/dev/null then true else false fi } have_hash_algo () { if ../g10/gpg --homedir . --version | grep "Hash:.*$1" >/dev/null then true else false fi } all_cipher_algos () { ../g10/gpg --homedir . --with-colons --list-config ciphername | sed 's/^cfg:ciphername://; s/;/ /g' } all_hash_algos () { ../g10/gpg --homedir . --with-colons --list-config digestname | sed 's/^cfg:digestname://; s/;/ /g' } set -e pgmname=`basename $0` #trap cleanup SIGHUP SIGINT SIGQUIT [ -z "$srcdir" ] && fatal "not called from make" # Make sure we have a valid option files even with VPATH builds. if [ -f ./options ]; then : elif [ -f ./gpg.conf ]; then : elif [ -f $srcdir/options ]; then cat $srcdir/options >gpg.conf fi GPG="../g10/gpg --no-permission-warning --homedir . " exec 5>&2 2>${pgmname}.log : # end gnupg-1.4.20/checks/armdetachm.test0000755000175000017500000000040112635262326014112 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking armored detached signatures of multiple files i="$plain_files $data_files" echo "$usrpass1" | $GPG --passphrase-fd 0 -sab -o x --yes $i cat $i | $GPG -o /dev/null --yes x || error "$i: bad signature" gnupg-1.4.20/checks/armencryptp.test0000755000175000017500000000046512635262326014363 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking armored encryption with a pipe for i in $plain_files $data_files ; do $GPG --always-trust -ea --yes -r "$usrname2" < $i | tee x | $GPG -o y --yes cmp $i y || error "$i: mismatch" $GPG --yes < x > y cmp $i y || error "$i: mismatch" done gnupg-1.4.20/checks/detachm.test0000755000175000017500000000037012635262326013417 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking detached signatures of multiple files i="$plain_files $data_files" echo "$usrpass1" | $GPG --passphrase-fd 0 -sb -o x --yes $i cat $i | $GPG -o /dev/null --yes x || error "$i: bad signature" gnupg-1.4.20/checks/clearsig.test0000755000175000017500000000563712635262326013616 00000000000000#!/bin/sh # Fixme: we should not only do a --verify but also the output. . $srcdir/defs.inc || exit 3 # ====================================== # I can't compare the out because plain-3 has no LF as last charcater # but the output has always one. I do not thinkl this is a bug, because # it is clear text and not binary text. # ====================================== for i in $plain_files plain-large ; do echo "$usrpass1" | $GPG --passphrase-fd 0 -sat -o x --yes $i $GPG --verify x done # ====================================== # and once more to check rfc1991 # ====================================== if have_pubkey_algo "RSA"; then for i in $plain_files plain-large ; do $GPG -u $usrname3 --rfc1991 --digest-algo md5 -sat -o x --yes $i $GPG --verify x done fi # ====================================== # and one with long lines # ====================================== cat >y <y <y <y <y echo_n " " >>y echo "$usrpass1" | $GPG --passphrase-fd 0 --clearsign -o x --yes y $GPG --verify x # ====================================== # check our special diff mode # ====================================== cat >y <mfx.md, n1->pkt->pkt.signature->digest_algo); } /* ask for file and hash it */ - if( c->sigs_only ) { + if( c->sigs_only ) rc = hash_datafiles( c->mfx.md, NULL, c->signed_data, c->sigfilename, n1? (n1->pkt->pkt.onepass_sig->sig_class == 0x01):0 ); EOF echo "$usrpass1" | $GPG --passphrase-fd 0 \ --not-dash-escaped --clearsign -o x --yes y $GPG --verify x gnupg-1.4.20/checks/armsigs.test0000755000175000017500000000036312635262326013461 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking armored signatures for i in $plain_files $data_files ; do echo "$usrpass1" | $GPG --passphrase-fd 0 -sa -o x --yes $i $GPG -o y --yes x cmp $i y || error "$i: mismatch" done gnupg-1.4.20/checks/verify.test0000755000175000017500000002237212635262326013324 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 suspend_error # # Two simple tests to check that verify fails for bad input data # info "checking bogus signature 1" ../tools/mk-tdata --char 0x2d 64 >x $GPG --verify x data-500 && error "no error code from verify" info "checking bogus signature 2" ../tools/mk-tdata --char 0xca 64 >x $GPG --verify x data-500 && error "no error code from verify" linefeed # A variable to collect the test names tests="" # A plain signed message created using # echo abc | gpg --homedir . --passphrase-fd 0 -u Alpha -z0 -sa msg tests="$tests msg_ols_asc" msg_ols_asc='-----BEGIN PGP MESSAGE----- kA0DAAIRLXJ8x2hpdzQBrQEHYgNtc2dEDFJaSSB0aGluayB0aGF0IGFsbCByaWdo dC10aGlua2luZyBwZW9wbGUgaW4gdGhpcyBjb3VudHJ5IGFyZSBzaWNrIGFuZAp0 aXJlZCBvZiBiZWluZyB0b2xkIHRoYXQgb3JkaW5hcnkgZGVjZW50IHBlb3BsZSBh cmUgZmVkIHVwIGluIHRoaXMKY291bnRyeSB3aXRoIGJlaW5nIHNpY2sgYW5kIHRp cmVkLiAgSSdtIGNlcnRhaW5seSBub3QuICBCdXQgSSdtCnNpY2sgYW5kIHRpcmVk IG9mIGJlaW5nIHRvbGQgdGhhdCBJIGFtLgotIE1vbnR5IFB5dGhvbgqIPwMFAEQM UlotcnzHaGl3NBECR4IAoJlEGTY+bHjD2HYuCixLQCmk01pbAKCIjkzLOAmkZNm0 D8luT78c/1x45Q== =a29i -----END PGP MESSAGE-----' # A plain signed message created using # echo abc | gpg --homedir . --passphrase-fd 0 -u Alpha -sa msg tests="$tests msg_cols_asc" msg_cols_asc='-----BEGIN PGP MESSAGE----- owGbwMvMwCSoW1RzPCOz3IRxLSN7EnNucboLT6Cgp0JJRmZeNpBMLFFIzMlRKMpM zyjRBQtm5qUrFKTmF+SkKmTmgdQVKyTnl+aVFFUqJBalKhRnJmcrJOalcJVkFqWm KOSnKSSlgrSU5OekQMzLL0rJzEsEKk9JTU7NK4EZBtKcBtRRWgAzlwtmbnlmSQbU GJjxCmDj9RQUPNVzFZJTi0oSM/NyKhXy8kuAYk6lJSBxLlTF2NziqZCYq8elq+Cb n1dSqRBQWZKRn8fVYc/MygAKBljYCDIFiTDMT+9seu836Q+bevyHTJ0dzPNuvCjn ZpgrwX38z58rJsfYDhwOSS4SkN/d6vUAAA== =s6sY -----END PGP MESSAGE-----' # A PGP 2 style message. tests="$tests msg_sl_asc" msg_sl_asc='-----BEGIN PGP MESSAGE----- iD8DBQBEDFJaLXJ8x2hpdzQRAkeCAKCZRBk2Pmx4w9h2LgosS0AppNNaWwCgiI5M yzgJpGTZtA/Jbk+/HP9ceOWtAQdiA21zZ0QMUlpJIHRoaW5rIHRoYXQgYWxsIHJp Z2h0LXRoaW5raW5nIHBlb3BsZSBpbiB0aGlzIGNvdW50cnkgYXJlIHNpY2sgYW5k CnRpcmVkIG9mIGJlaW5nIHRvbGQgdGhhdCBvcmRpbmFyeSBkZWNlbnQgcGVvcGxl IGFyZSBmZWQgdXAgaW4gdGhpcwpjb3VudHJ5IHdpdGggYmVpbmcgc2ljayBhbmQg dGlyZWQuICBJJ20gY2VydGFpbmx5IG5vdC4gIEJ1dCBJJ20Kc2ljayBhbmQgdGly ZWQgb2YgYmVpbmcgdG9sZCB0aGF0IEkgYW0uCi0gTW9udHkgUHl0aG9uCg== =0ukK -----END PGP MESSAGE-----' # An OpenPGP message lacking the onepass packet. We used to accept # such messages but now consider them invalid. tests="$tests bad_ls_asc" bad_ls_asc='-----BEGIN PGP MESSAGE----- rQEHYgNtc2dEDFJaSSB0aGluayB0aGF0IGFsbCByaWdodC10aGlua2luZyBwZW9w bGUgaW4gdGhpcyBjb3VudHJ5IGFyZSBzaWNrIGFuZAp0aXJlZCBvZiBiZWluZyB0 b2xkIHRoYXQgb3JkaW5hcnkgZGVjZW50IHBlb3BsZSBhcmUgZmVkIHVwIGluIHRo aXMKY291bnRyeSB3aXRoIGJlaW5nIHNpY2sgYW5kIHRpcmVkLiAgSSdtIGNlcnRh aW5seSBub3QuICBCdXQgSSdtCnNpY2sgYW5kIHRpcmVkIG9mIGJlaW5nIHRvbGQg dGhhdCBJIGFtLgotIE1vbnR5IFB5dGhvbgqIPwMFAEQMUlotcnzHaGl3NBECR4IA oJlEGTY+bHjD2HYuCixLQCmk01pbAKCIjkzLOAmkZNm0D8luT78c/1x45Q== =Mpiu -----END PGP MESSAGE-----' # A signed message prefixed with an unsigned literal packet. # (fols = faked-literal-data, one-pass, literal-data, signature) # This should throw an error because running gpg to extract the # signed data will return both literal data packets tests="$tests bad_fols_asc" bad_fols_asc='-----BEGIN PGP MESSAGE----- rF1iDG1zZy51bnNpZ25lZEQMY0x0aW1lc2hhcmluZywgbjoKCUFuIGFjY2VzcyBt ZXRob2Qgd2hlcmVieSBvbmUgY29tcHV0ZXIgYWJ1c2VzIG1hbnkgcGVvcGxlLgqQ DQMAAhEtcnzHaGl3NAGtAQdiA21zZ0QMUlpJIHRoaW5rIHRoYXQgYWxsIHJpZ2h0 LXRoaW5raW5nIHBlb3BsZSBpbiB0aGlzIGNvdW50cnkgYXJlIHNpY2sgYW5kCnRp cmVkIG9mIGJlaW5nIHRvbGQgdGhhdCBvcmRpbmFyeSBkZWNlbnQgcGVvcGxlIGFy ZSBmZWQgdXAgaW4gdGhpcwpjb3VudHJ5IHdpdGggYmVpbmcgc2ljayBhbmQgdGly ZWQuICBJJ20gY2VydGFpbmx5IG5vdC4gIEJ1dCBJJ20Kc2ljayBhbmQgdGlyZWQg b2YgYmVpbmcgdG9sZCB0aGF0IEkgYW0uCi0gTW9udHkgUHl0aG9uCog/AwUARAxS Wi1yfMdoaXc0EQJHggCgmUQZNj5seMPYdi4KLEtAKaTTWlsAoIiOTMs4CaRk2bQP yW5Pvxz/XHjl =UNM4 -----END PGP MESSAGE-----' # A signed message suffixed with an unsigned literal packet. # (fols = faked-literal-data, one-pass, literal-data, signature) # This should throw an error because running gpg to extract the # signed data will return both literal data packets tests="$tests bad_olsf_asc" bad_olsf_asc='-----BEGIN PGP MESSAGE----- kA0DAAIRLXJ8x2hpdzQBrQEHYgNtc2dEDFJaSSB0aGluayB0aGF0IGFsbCByaWdo dC10aGlua2luZyBwZW9wbGUgaW4gdGhpcyBjb3VudHJ5IGFyZSBzaWNrIGFuZAp0 aXJlZCBvZiBiZWluZyB0b2xkIHRoYXQgb3JkaW5hcnkgZGVjZW50IHBlb3BsZSBh cmUgZmVkIHVwIGluIHRoaXMKY291bnRyeSB3aXRoIGJlaW5nIHNpY2sgYW5kIHRp cmVkLiAgSSdtIGNlcnRhaW5seSBub3QuICBCdXQgSSdtCnNpY2sgYW5kIHRpcmVk IG9mIGJlaW5nIHRvbGQgdGhhdCBJIGFtLgotIE1vbnR5IFB5dGhvbgqIPwMFAEQM UlotcnzHaGl3NBECR4IAoJlEGTY+bHjD2HYuCixLQCmk01pbAKCIjkzLOAmkZNm0 D8luT78c/1x45axdYgxtc2cudW5zaWduZWREDGNMdGltZXNoYXJpbmcsIG46CglB biBhY2Nlc3MgbWV0aG9kIHdoZXJlYnkgb25lIGNvbXB1dGVyIGFidXNlcyBtYW55 IHBlb3BsZS4K =3gnG -----END PGP MESSAGE-----' # Two standard signed messages in a row tests="$tests msg_olsols_asc_multiple" msg_olsols_asc_multiple='-----BEGIN PGP MESSAGE----- kA0DAAIRLXJ8x2hpdzQBrQEHYgNtc2dEDFJaSSB0aGluayB0aGF0IGFsbCByaWdo dC10aGlua2luZyBwZW9wbGUgaW4gdGhpcyBjb3VudHJ5IGFyZSBzaWNrIGFuZAp0 aXJlZCBvZiBiZWluZyB0b2xkIHRoYXQgb3JkaW5hcnkgZGVjZW50IHBlb3BsZSBh cmUgZmVkIHVwIGluIHRoaXMKY291bnRyeSB3aXRoIGJlaW5nIHNpY2sgYW5kIHRp cmVkLiAgSSdtIGNlcnRhaW5seSBub3QuICBCdXQgSSdtCnNpY2sgYW5kIHRpcmVk IG9mIGJlaW5nIHRvbGQgdGhhdCBJIGFtLgotIE1vbnR5IFB5dGhvbgqIPwMFAEQM UlotcnzHaGl3NBECR4IAoJlEGTY+bHjD2HYuCixLQCmk01pbAKCIjkzLOAmkZNm0 D8luT78c/1x45ZANAwACES1yfMdoaXc0Aa0BB2IDbXNnRAxSWkkgdGhpbmsgdGhh dCBhbGwgcmlnaHQtdGhpbmtpbmcgcGVvcGxlIGluIHRoaXMgY291bnRyeSBhcmUg c2ljayBhbmQKdGlyZWQgb2YgYmVpbmcgdG9sZCB0aGF0IG9yZGluYXJ5IGRlY2Vu dCBwZW9wbGUgYXJlIGZlZCB1cCBpbiB0aGlzCmNvdW50cnkgd2l0aCBiZWluZyBz aWNrIGFuZCB0aXJlZC4gIEknbSBjZXJ0YWlubHkgbm90LiAgQnV0IEknbQpzaWNr IGFuZCB0aXJlZCBvZiBiZWluZyB0b2xkIHRoYXQgSSBhbS4KLSBNb250eSBQeXRo b24KiD8DBQBEDFJaLXJ8x2hpdzQRAkeCAKCZRBk2Pmx4w9h2LgosS0AppNNaWwCg iI5MyzgJpGTZtA/Jbk+/HP9ceOU= =8nLN -----END PGP MESSAGE-----' # A standard message with two signatures (actually the same signature # duplicated). tests="$tests msg_oolss_asc" msg_oolss_asc='-----BEGIN PGP MESSAGE----- kA0DAAIRLXJ8x2hpdzQBkA0DAAIRLXJ8x2hpdzQBrQEHYgNtc2dEDFJaSSB0aGlu ayB0aGF0IGFsbCByaWdodC10aGlua2luZyBwZW9wbGUgaW4gdGhpcyBjb3VudHJ5 IGFyZSBzaWNrIGFuZAp0aXJlZCBvZiBiZWluZyB0b2xkIHRoYXQgb3JkaW5hcnkg ZGVjZW50IHBlb3BsZSBhcmUgZmVkIHVwIGluIHRoaXMKY291bnRyeSB3aXRoIGJl aW5nIHNpY2sgYW5kIHRpcmVkLiAgSSdtIGNlcnRhaW5seSBub3QuICBCdXQgSSdt CnNpY2sgYW5kIHRpcmVkIG9mIGJlaW5nIHRvbGQgdGhhdCBJIGFtLgotIE1vbnR5 IFB5dGhvbgqIPwMFAEQMUlotcnzHaGl3NBECR4IAoJlEGTY+bHjD2HYuCixLQCmk 01pbAKCIjkzLOAmkZNm0D8luT78c/1x45Yg/AwUARAxSWi1yfMdoaXc0EQJHggCg mUQZNj5seMPYdi4KLEtAKaTTWlsAoIiOTMs4CaRk2bQPyW5Pvxz/XHjl =KVw5 -----END PGP MESSAGE-----' # A standard message with two one-pass packet but only one signature # packet tests="$tests bad_ools_asc" bad_ools_asc='-----BEGIN PGP MESSAGE----- kA0DAAIRLXJ8x2hpdzQBkA0DAAIRLXJ8x2hpdzQBrQEHYgNtc2dEDFJaSSB0aGlu ayB0aGF0IGFsbCByaWdodC10aGlua2luZyBwZW9wbGUgaW4gdGhpcyBjb3VudHJ5 IGFyZSBzaWNrIGFuZAp0aXJlZCBvZiBiZWluZyB0b2xkIHRoYXQgb3JkaW5hcnkg ZGVjZW50IHBlb3BsZSBhcmUgZmVkIHVwIGluIHRoaXMKY291bnRyeSB3aXRoIGJl aW5nIHNpY2sgYW5kIHRpcmVkLiAgSSdtIGNlcnRhaW5seSBub3QuICBCdXQgSSdt CnNpY2sgYW5kIHRpcmVkIG9mIGJlaW5nIHRvbGQgdGhhdCBJIGFtLgotIE1vbnR5 IFB5dGhvbgqIPwMFAEQMUlotcnzHaGl3NBECR4IAoJlEGTY+bHjD2HYuCixLQCmk 01pbAKCIjkzLOAmkZNm0D8luT78c/1x45Q== =1/ix -----END PGP MESSAGE-----' # Standard cleartext signature tests="$tests msg_cls_asc" msg_cls_asc=`cat <x case "$i" in msg_*_asc) $GPG --verify x || error "verify of $i failed" ;; msg_*_asc_multiple) $GPG --verify --allow-multiple-messages x \ || error "verify of $i failed" set +x $GPG --verify x && error "verify of $i succeeded but should not" set -x ;; bad_*_asc) set +x $GPG --verify x && error "verify of $i succeeded but should not" set -x ;; *) error "No handler for test case $i" ;; esac linefeed done resume_error gnupg-1.4.20/checks/pubring.pkr.asc0000644000175000017500000000262312635262326014042 00000000000000This is a test pubring generated by pgp 5 beta Type Bits KeyID Created Expires Algorithm Use sec+ 768 439F02CA 1998-03-17 ---------- DSS Sign and Encrypt sub 768 CB879DE9 1998-03-17 ---------- Diffie-Hellman uid pgp5 test -----BEGIN PGP ARMORED FILE----- Version: GNUPG v0.2.13a (Linux) Comment: This is an alpha version! Comment: Use "gpgm --dearmor" for unpacking mQFCBDUOrE4RAwDbbxWAbWsheUJprK6VryMTpwDiYwMfL+92nrHqSfPqlpMWgDTia8qnpRSXbyEm Sppp/6/Ygp+N3n32Kznq7PjHXiuWLlZGvZMtzmvaMA17y0GY6oLBxS7rhASXIKa9hEUAoP+KBFly qNMdsK8j+ZO0A8rnImGrAwC1ddDme5iZFkTEWHhrtU97sEu2GDkSQB8HdX8CoRcrOz/B2WliF6qf BKhcZPFVBIhKNzjTfY7SEYAZk2zcsCm8elnwSLaGEzxKFNFBqKDNXP+a35spcqsHSGzDVw4VuKMD AJNnAP6skpHlhVAmecLZT9eRzVoOq1ivUIntK2Mh47qsL74q6BBwz2sviPU2Y3pDlbb6Ed0qJAXv dCT24hlfoGoXzkoDInkPJTJeL0gCnwmQPjvXFFd71Cvg5LaL4lIQLbABh7QZcGdwNSB0ZXN0IDxw Z3A1QGRldi5udWxsPrABA4kASwQQEQIACwUCNQ6sTgQLAwECAAoJENY0E25DnwLKxIoAoPSyM/Mw BogpyMU5YY+Sj74k3UIfAJ0RopQa8ciickDVzoSVPrGysrnOkLABZ7kAzQQ1DqxWEAMA/wVrlNsP qTxWZbUiMrUN8MjTFR2xUhuTw3cdvRgiVPUT/q1l1+I3CpopVBx/XuAkg5sHB80zc6pZg652YFV3 dLoTceS7ridb5k23sHa2hZGCeTo6AdxIOy53giCPDP9FAAICAv9Oh5/OVxUqI+6hsp9ccOEhRA9N 8aJzYDPjvCQyhgej2P1kTsBZqWIx0/PiMvIt+qqhT2YfyD68mHIBztScAXZKTnjroUPKl0+bkX09 NbdyqojAkzhaCRKUzwnaHEfhi2WwAYeJAD8DBRg1DqxW1jQTbkOfAsoRAnaPAJ0Z/k6Y2ypgDhXo qBLeW7Lq/AKYEACeLTod6Nt117DkqDz9epmIqwWOE1ewAWc= =6BrN -----END PGP ARMORED FILE----- gnupg-1.4.20/checks/armsignencrypt.test0000755000175000017500000000047212635262326015062 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking armored signing and encryption for i in $plain_files $data_files ; do echo "$usrpass1" | $GPG --passphrase-fd 0 --always-trust \ -sae -o x --yes -r "$usrname2" $i $GPG -o y --yes x cmp $i y || error "$i: mismatch" done gnupg-1.4.20/checks/encryptp.test0000755000175000017500000000034612635262326013661 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking encryption with a pipe for i in $plain_files $data_files ; do $GPG --always-trust -e --yes -r "$usrname2" <$i | $GPG --yes > y cmp $i y || error "$i: mismatch" done gnupg-1.4.20/checks/armor.test0000755000175000017500000013625412635262326013145 00000000000000#!/bin/sh # Regression tests pertaining to the armoring. . $srcdir/defs.inc || exit 3 armored_key_8192='-----BEGIN PGP PUBLIC KEY BLOCK----- Version: SKS 1.0.9 mQGiBDnKLQkRBACVlYh6HivoRjHzGedNpnYPISxImK3eFgt+qs/DD9rqhBOSUTYvmKfa1u7M W4XDc23YEoq3MyhtC35IL2RH6rmeIPz7ZVK5rUKWMqzf94n58gIkgdDZgCcaDWImtZFSjji4 TGhepaIz75iIbymvtnjr9d++fH/lFkz0HDjbOkXCfwCg9GeOjiWw1yBK8cO11acAjk+QpW8D /i8ftC1hV0iuh9mswYeG05pBbeeaOW4I2Ps4IcecpXhSyPaP1YiXKRqg9GX2brNgXwc3MEiq Wn4UU407RzjrUNF4/d20Q7N2g2MDUDzBtmMytfT2LLKlj53Cq+p510yXESA7UHjiOpRrHPN9 R69wHmHPsLPkdkB/jRTSM1gzQNtXA/96bRpfGMtCssfB449gBA/kYF14iXUM5KTF6YPSFhCC xPGNMoP1uxTk0NHvcYZe4zW2O6b/f9x5Lh15RI1ozWXakX6u3xEV3OqsvVTtXupe4MljHQlX YwMDI3MUzFtnHR+He1Bw5lkBVWtkV7rX2kX749J1EgADwlNEP1KFRdjqi7QhU3VzdW11IE9T QVdBIDxzdXN1bXVvQGRlYmlhbi5vcmc+iEYEEBECAAYFAjvNYPUACgkQU+WZW1FVMwrlTACf RigokAWd1OqYtcOt3v829fhNqYEAnR9uUslZr6B6RaW0z8/BZZuhGuLViEYEEBECAAYFAjzG evgACgkQfGUzr9MtPXGWyACg066aP5SSkBHWqqYGGLZv9sVRMNIAoIEHBI1gq4rPJatYDdau Ni6DUTkGiEYEEBECAAYFAjzGfBAACgkQ9D5yZjzIjAlTqACeJmtp9kpfljkARhfa3QTc2Q56 WKkAoJmUchp+fAceVeFncpFeo6leM1YhiEYEEBECAAYFAjzGftIACgkQ2QCnNZ2xmQQCegCg rdTsTWzaZk6gF+mtvIDwKsUx8gwAnRUbdDfOP0qL+83Bbz2r/IzPxjCEiEYEEBECAAYFAj2T Rd0ACgkQFwU5DuZsm7BfXQCeNVG09VZ2VnuuWTRbgoANXGIyRb0AoI/giUU4DcIpAPbcoNV7 PzCIreyviEYEExECAAYFAj2508wACgkQ0pu//EQuY8KiUwCdHijK7Wkim2FUPU6i6KxwRH/k kFwAn1sOAWVOrLfRBfrNNQBANpbr5ufniEYEExECAAYFAj27vpsACgkQKb5dImj9VJ9m2wCc DeL9IkWpytXLPFhKCH9U9XhzPA4AnRjiY3y6AdNhbUgG/eS8Dumch0dniEYEExECAAYFAj5q MCcACgkQO/YJxouvzb2O5QCghtxYfrIcbfTcBwvz9vG1sBHkQSkAnj3PMjN9dk1x1e4rUD9d S00JOoI0iFYEExECABYFAjnKLQkECwoEAwMVAwIDFgIBAheAAAoJEN7sjAneQVsOUfcAoNgN xaeqMn5EWO2MkwVvVrLjWI2FAKDLnp19rJsU69OK7qHqfMeGWFXsQYheBBMRAgAWBQI5yi0J BAsKBAMDFQMCAxYCAQIXgAASCRDe7IwJ3kFbDgdlR1BHAAEBUfcAoNgNxaeqMn5EWO2MkwVv VrLjWI2FAKDLnp19rJsU69OK7qHqfMeGWFXsQYiVAwUQOcrkWi2pLp/VI9wNAQE5mAP/WW9g shqGqWN/rWevpVKlzwqGSqMUq6E2K34dHrFdqd/WnY8ng5zAd66Ey3OLS5x9/+KI6W9MU5OI WmxOfrp7PxwqLrQH/BruPTHe9mZbkSyjWIS/V+W8/lYtzIUYTd0584+1x7cK6jah3mAdFu5t 8fr1k3NyVXFH66dLrLF0bBu0JFN1c3VtdSBPU0FXQSA8c3VzdW11LW9AZGViaWFuLm9yLmpw PohGBBARAgAGBQI7zWD4AAoJEFPlmVtRVTMKpEEAn0Oxl1tcdFf6LxiG2URD7kmHNm+iAJ9l uLXjsYvo0OXlG1HlaFkFduhgp4hGBBARAgAGBQI8xnr7AAoJEHxlM6/TLT1xZlEAnjSeGhDQ mbidMrjv4nOaWWDePjN7AKDXoHEhZbpUIJLJBgS4jZfuGtT3VYhGBBARAgAGBQI8xnwTAAoJ EPQ+cmY8yIwJTjEAnAllI6IPXWJlHjtwqlHHwprrZG4eAJwMTl5Rbqu1lf+Lmz3N8QBrcTjn zYhGBBARAgAGBQI8xn7VAAoJENkApzWdsZkE6M4AoIpVj26AQLU6dtiJuLNMio8jKx/AAJ9n 8VzpA4GFEL3Rg2eqNvuQC0bJp4hGBBARAgAGBQI9k0XgAAoJEBcFOQ7mbJuwsaUAnRIT1q2W kEgui423U/TVWLvSp2/aAKDG6xkJ+tdAmBnO5CcQcNswRmK4NIhGBBMRAgAGBQI9u76dAAoJ ECm+XSJo/VSfDJQAn0pZLQJhXUWzasjG2s2L8egRvvkmAJ4yTxKBoZbvtruTf//8HwNLRs9W v4hGBBMRAgAGBQI+ajAuAAoJEDv2CcaLr829bTYAoJzZa95z3Ty/rVS8Q5viOnicJwtOAKCG RKoaw3UZfpm6RLHZ4aHlYxCA0YhXBBMRAgAXBQI6aHxFBQsHCgMEAxUDAgMWAgECF4AACgkQ 3uyMCd5BWw4I+ACfQhdkd2tu9qqWuWW7O1GsLpb359oAoLleotCCH4La5L5ZE/cPIde9+p8o iF8EExECABcFAjpofEUFCwcKAwQDFQMCAxYCAQIXgAASCRDe7IwJ3kFbDgdlR1BHAAEBCPgA n0IXZHdrbvaqlrlluztRrC6W9+faAKC5XqLQgh+C2uS+WRP3DyHXvfqfKLQlU3VzdW11IE9T QVdBIDxzdXN1bXUtb0Bnb2ZvcndhcmQub3JnPohGBBARAgAGBQI7zWD4AAoJEFPlmVtRVTMK aY0An0oI4Fwko9YsVWS+0M3/Tpc8FB2eAJ4oALojFgFkOWYT97dh8rTQW8BhyohGBBARAgAG BQI8xnr7AAoJEHxlM6/TLT1xsXcAoJV/9zoudxvWy+LwktkGyCB7aTx4AJ0Z8GWmx2/C4W2M tSyaUscY3X19uYhGBBARAgAGBQI8xnwTAAoJEPQ+cmY8yIwJpxQAn3efnPpctMJFDQomRDbo 7Q8rg6r4AKCq7LZmOaXvyrBF/JcYjOCLtYMPIIhGBBARAgAGBQI8xn7VAAoJENkApzWdsZkE iB0AnRQs0XjhpGOpR1lyEOuZkm2xxHPzAJ9Is3sG9UMOr+YS5V1GXXiFM29S3YhGBBARAgAG BQI9k0XgAAoJEBcFOQ7mbJuwjiAAn2wcQP9HreVLCSQruB1wnX/s79ZcAKCRcecLF+wiRo59 JJvwtnxp2W24EYhGBBMRAgAGBQI9u76dAAoJECm+XSJo/VSftKUAoJQ/cYKqkyOLSOelU8eM plFiFJlPAJwK7B0HrN+tDmR7r8Hc0GrRrbAuvYhGBBMRAgAGBQI+ajAuAAoJEDv2CcaLr829 PX0An2kfEs+3iR5qV35EQlCdL5ITZCSNAKCf8HErpT620TUhU6hI7vW5R3LNgohXBBMRAgAX BQI6aHxeBQsHCgMEAxUDAgMWAgECF4AACgkQ3uyMCd5BWw5HzwCdF8w3WjnwTvktko3ZB7IM mFLKvSQAn3GbioDBdV+j6xuhSI90osLMu1jgiF8EExECABcFAjpofF4FCwcKAwQDFQMCAxYC AQIXgAASCRDe7IwJ3kFbDgdlR1BHAAEBR88AnRfMN1o58E75LZKN2QeyDJhSyr0kAJ9xm4qA wXVfo+sboUiPdKLCzLtY4IkBIgQQAQIADAUCQpGGggUDABJ1AAAKCRCXELibyletfJEKCACw Yf5qY4J3RtHnC56HmGiW4GXaahJpBQ1JcWmfx7CkTqJPQveg+KQ4pfLuJvZ8v4YqPZCxPOeK /ZhIO48UB4obcD8BZdSkRA4QBamRp8iqcgrCot/LA5xQu9tivIhUJP/1dT6PmDy4DAV3Flgt HgED5niVESDPfz3Gjff5iWWIs6dM3bycxoTcFWLz++578aOasoq9T8Tfua9H8UrouVz3+6TK xG0rGeb2jOQOQcbLCn3soU/Z60H3SvJYHzgxlS5bqIybrjo3sAnuus/kisrmNjeFfQBdl9v+ GnK65D1tmBa1+6a95uHb+OG4eHzIXmvnDI4A1RhRKiZ/kpVsT7RViQEiBBABAgAMBQJCo1H8 BQMAEnUAAAoJEJcQuJvKV618bJgIAMb9Xiv8ps3quJ9ByHhbIQtBOymH0fFiodsutPrcR2Af 1lc/eh3Ik20Z9Ba3g5V6eUW+3sjpDsjKtI1CXuRq0Zgmze3hrUTMRmyrLoaHPocrqfj2G9mW y2OomLHMDurcJFQkSUJioI4Kxo+1NBZmylPKUEeIEoP8UBJbKxf78dVh00ZUecwZcn9lLiZA TycRQ0WTT1Yv1fI+tBmvSrpMSe+0k+JS+QigvINN5vUxaV1cN6mkREPYVm7oHzPCQ2C9NX1q cI/Wkc38ieZw1Sv9vyPCCL6MYd/2t1209a/ZKADaw5l+mhyWUqIT6SXPLxMDy0NvPhTKdDr1 7S5LOcKhwPqJASIEEAECAAwFAkK2pukFAwASdQAACgkQlxC4m8pXrXxvUQgAlfw6doD0JHtY iN9uCp2M1orLKS/zm66e9eiYPJwbim96KiwP98Ti5J+QO5hZdT3dhW2Avw5JPFiQukSc/rjT 1YHRyuhZfXKhQhsjom5JmyFSdeIzjnz0PIM2qZaK4OfFihleQfQ8Y94wkPwYtkEXxpBQSClg Xk6QJEql34sQexIDM7VsREwv/eIQ73RMquat4RZP1L3h4nj1UJu/X7ey3HVVo61gH0RIAR+A adv59AAp//TkKUNIRCHOsIpFCXHjJsJxRvJKhiz3T6FhqFEQNF2tDJKHFV1FcLAIEZheuGOV fKNXgmvVATPHrJsg5HsZACg/aRFq9NL9FYskFyGcB4kBIgQQAQIADAUCQrdR0QUDABJ1AAAK CRCXELibyletfMNMB/49u9oQzbmTtmHaoKuvou7OA6zmrfeu5X9vV1efZgItF78J7G19fVt8 K3e6kn0KGYVL+FTbPdEbvrYTb+jfMkzrHooxQYSr0j8Baqfh2bMuZzuw2pVtgBUTYHoihNjQ lv6GPtF7Y3CVWLUYXZ25yqY3Hzh9YneoH8bUVFZWxRFitqGB+noFpvm0YXrCJZ19BDNTQlx7 5quAl4KTNOAxapsKaBrz/4PrnNbuwZBkzP5EEuEyjTM+6UBhxibXfdWKnZw6ky7k6tuUsc68 qfQJBK6KBmVLflZ5nrd2N90Ueb0m3xfzdncBAZb43THGhi6XyZ4jvbMjvjm3MCGuUosYYbT6 iQEiBBABAgAMBQJCyQLdBQMAEnUAAAoJEJcQuJvKV618Jz0IAKstm2VX39p4Lt4k55ZdOqXG CqHCFT5YYOVcnptx8dKTpHWQXpI2lUJBAcWz0IAXXFhyUbGpvS1E9T/pYF97RSSsQyTncQll mLbzy3fESVkGT9xpEvF7ZaK+61BKuWFpbKRdpy5wWakk0GRyF0156vxm7vQh4XI91TwXj7DA v6KYWdjnHcEB8O9jLw6RlD4Y6dKjb/v7vTY6dGmYYyOQVK+Bmr/8vVcNDf+tevExsytTu4FZ tL9yp+yHODfHP5LZk3mC7UGR/mUKFDYhuEzzIU5ozc6qUfC5ViGt2Hjg45i2T79WeSV0UHSE 8c3JOgE3e7A71bQEUJygPC9S+RTuc8aJASIEEAECAAwFAkLMT3oFAwASdQAACgkQlxC4m8pX rXwoBgf+MEjA/hx7UMl6LHwheZ9qzH/4P1d4CU46SzoC/XEPqWGs9sJw0dKxEAnRZgrG1WMP Ml127bOHby5WWDa/xGi0siYM64F386SG0W42FD67vPK9mMPnCDIQ4xn5gGoqUUl8ZzFG0eNv XRg0bmMVmoZFvaUyf0uah/0dYCYplgAjJtmC3cmNuJ98PoYEVHMKKGtPW4fVf+TcN90HVjXU kr0GnAvRegb3ZXnte3GrOe3jOfXjfjZMyEM6a16FFuKHmykgfyX/I4tS9GqoxPZ6s0KARKn0 YLZUuxxFL7i1VaGJR/9duyUc8T0BLc9O4TxNuvd1vd5UKVVmTL04fe0q1Bfu4okBIgQQAQIA DAUCQtGX8QUDABJ1AAAKCRCXELibyletfNEoCACtKtfWhAfkxLqPihQMbvwXTuSszG61XNYb a41gTOpjADF2jQAQ2y8oilVyr5RgSvug8knik3EitSpBOOg0o5Y9NHF3e+85r27m8T5cP3g5 GHAeugRFDqMXXioiAw9WoyvG9ruMY4caD3gAuogM4hB/3EMEHSlMylMrXLUtbGkQKqkLVJQn 7V/3SVG8zfUyGb0lSFaGtHFa6LaIIuvJwkQYGMT/SiK7ISqPKOPD7kKRWhxjgcfzVthqGORn uQGi+316fdA+JzEYOI/gGdcZsbN/KrMSNQ0DOdSRIeiATy9M0fd+8QtUPOCtaDKLYISSrm72 xgnKbussJRxAPjxo66dPiQEiBBABAgAMBQJC42DIBQMAEnUAAAoJEJcQuJvKV6181SUIAL/P gZhrwepyFUhr+nlYvxeflrxgR9Yl1aNtTngcOYlFU273cs3XnkczIpkg4fVikY5s56Y42G8F NvqRu0M0eL5kJvYi50NNMQnf39GkZZp2LrL9bZ9n7ysWU5tiOJsxCBnaOiAg/p6vCUVN3NV+ t8vRP1fHwPsd5tYEBqA/g4g1U0xJAG+JqJftSDRDLxfTZ16hBdHzlQ3opqMMmW5Mv005p4o+ buh4HzQLmBHDE98BeZ7CpjYeXY23bu8oi0tvkcTjCEeBWrXWfA3pKSX5HH63nmG3ryKuP0tr 1A2gTgs9JtLXnGFJUdVYULiQbU781wR6+9o/0h6NuCJDPmJMNmmJASIEEAECAAwFAkLmBFIF AwASdQAACgkQlxC4m8pXrXxYZwf/ah4IaTK3CbtqF1+4uz7VVRKemSaNg3jMKLey2simqAQs 1JwqkLuwEgrwF7XiejfLAvX0/yFqJZkdtDFqeK0VrwOq3WIpfj7+g5B9YSW0CkasD0HUci/l oXQiT9CN7PAe1vM5X4X3cqlXfC9tmU7fH7kc0kULxYHAfn96nZQklZS9aVecJ0H+pqMlPoDt xtxweNa7UJWAanO9kbPZ/xEdSlkuqzk1CK6ThURedc2lCE+qobPpUZri1FEvMBjyXoQ9MyD6 AFWfax9eNn1ZSRq9t2WpPyFSQmCvyGETHyvM2BBiFR6UAQUKdr+d4ZE09cR0wXpEtoqaNeJ8 AidTEGkuLYkBIgQQAQIADAUCQuydlwUDABJ1AAAKCRCXELibyletfLsbB/0X/Jafv+v43U26 W3HD5XdmHaNdxm7uthGzGGzATGcTAUd3/t8fyVFk2XgmUYxtz0wHUdM8GiyK0tpKBu6wqcbO nGkBlvC1m6Blxy+PvpJxQ2sK4ycN8ToEEn/7HCCJesS2fvDudXkvdvskXkxZprPWe7JTHNxj fvESUAbLLmSpNGflZnMAOfuQP0hFBQr4D5FEA+zMf7FtrwkBanXt6W65xxEIJ/239ctCsRe8 jIQ4LesYQN7hyX6x9bP9h3tEw6+OtvjYbMH+2B/3muNVac/9bYqi9rnuGew9eAjmdmm0u8T5 7Iboy5mUDH2wjpRo6MGU1cHe4oZscW0f9TPE+6XbiQEiBBABAgAMBQJC7UXaBQMAEnUAAAoJ EJcQuJvKV618zbcH/RlUtrZSBcUafmhY29s9BYycwWx/UoeJRIJmi852TguSGsoPuAYEGeaW WxCdSru2ibn7GPBXowM5u+4MqYqaRB695sg/Ajxho2Djys3lV0TPeSIbyZ7cXbjoSDnSVw/N eWGKJLwbFVZPjjC7mcGIMhE1NGGxyRO5H1Z6GA8dEP3zR0rIivklN8KEngfyLRVvB5WYPBs+ buaNF5HflsBXl2bOP5ueThcal1PSE4HNoQXz79t0Cw7kpsWy3FyFUVVRHPyvwVpJSdYjz8Ur L4cD3Dj9SOPwa4AvM7WX+JXbPEIFxi+NA4R0TVxIZXJ/HX8AZj87RFxGYlTfP3GFFw+52QaJ ASIEEAECAAwFAkMHCEAFAwASdQAACgkQlxC4m8pXrXxGXQgAwFY5RYFHKcYkL9nDfblQDjXW Ictj1rlP2yPsy8dKX579ejhdd8o0TGJf8AzYRaDEpffPf/ZvyfRltqKd979GzdAE3smkrGeD kPuUY2rEF6Eon549Tn7omGYNueDuO27QQ4zIs0k9h4m+pE6PxPTgC5BsEVF8Hrz647/XSTf2 G0Wo11y/KBWGJ9BYvZ1YSxwmk5zicGF4sYNktO1Yl6CGS1ugP9zitCuwSiUm+gJrMCZ3am/D +Of+80Ui7e/V9yOOeyC7/gqQq4okPZbdVzJ3hiG2Y3eip19ewHYlYSiLoBW3rr3M3mKBTcbx +nLfVOTUHp8HdqxIyI782SaZlpg0mYkBIgQQAQIADAUCQwhbTQUDABJ1AAAKCRCXELibylet fD7WB/9ydWuVT1DeeL3UBqqeRRN+mt5DChdFeCjJhWcAjds8R6Z8Q9c+kpKEk+MeSevKaOAf iiM2JBtruIxt1sfh/vVEFgjHP/M0sF1il6TwZEKqVn5c3ikMYCMXy75xheslCJoX7fi4jZut TO8+JqjVN+z+SYzeRrvQFcjJoIOLRnshh2XgUiXVf/xo/My+fM9rKnMHxF/75PaFVVz8cXz1 X3jsuUOVLxnUZHsOaP9r1h3bq8uHJxkxPElVPbCuKLdCWrNOHHX6/+TAH9xohUvrBm6HXqbv O/aVGqf+Bip6oWSB6rSIe9+0GmXLRe4Ph3ekBvyGUJM/nFhN4hQHX69xZS7yiQEiBBABAgAM BQJDEOyRBQMAEnUAAAoJEJcQuJvKV618IlwIAIPbWp20TBCnU0D3kE6JFqRaVKqNAFaJbmRn 48qxX10NmHnBAluU1iJiUsVL2kOpvf2eyFUsX+sQfVJPzmWkUU2gED/+WZNkcmxPZ72FtJCs hW30BcJnLjcRo8wv/6nhdEZ2JYNiBIFHxNQ6iiB7BzVpYsMp1l5tI6mIhbxYxMNETTMrb+hK NNAhxjrqiWxPNlrzw6TaKnBOE0Au/Asjz9n37hsPV5Q9xY3zXbff3yDirVkBC4l0Vc+U6drX XiFBjQj77yt6AjTYUzBZY7UuGQ0W6o/6QF3KfiC3WAoFJL7SLujIaALkALs+lFzsu3CA9KoB X8Ca4hA7kzOP1H76VZKJASIEEAECAAwFAkMSPXoFAwASdQAACgkQlxC4m8pXrXx3cQf9GBPO XIrdbvUWIKTofiwftiy6j3MhKOszHkzR9quCu6aLu/aVvIA/avTZHjfj0EvYaQaSNMWplMiX i2UhkPHe4cgJYkbjmXEz16GtXYPZXGP1FubQ/RwQ7yQKaVtXSCgz+ZdR5tKhU5kruxAsVjly KcQvST95wlqxLuvXzSCjPdWj4qBvkuEt6QADx8EYCafraIiHPRkKtAAiK0sXJSkLevXn3zAN 6X6ngvZZiNQFvfWLFV8Rodz1vI4S6Af2MTSlVV9Vw0voJGprcsNDlB8k5B/Kl9LigeKdkFa8 JVfwOQppAtU+Nq3pHjquEafZrPVF9HWY0G0Szh5tOFEpVMF6g4kBIgQQAQIADAUCQxQ7iwUD ABJ1AAAKCRCXELibyletfBVfB/9ydVsiBrNWLt0RwbAdMvHRceHz1twh+YeSnpr9Equ7aDMG qou4ppl/nTbnZIizdWn3dnRKt+vKY/puuPIT9kEVF7DlfBOcWBdLBvJz34eBt29BCFgvsfOS fwESMNKgquZmrraGpEvj4cSTOmW3DJPevB+6ajsN87BC5Qp2MjDGVkwT/Nj6R60pz/vmeSwl 0BmzgthrBd+NfHSA116HEAF1V21/2UhA1hbkPKe40jWp6HK+GcXDC3+PucTJeS8nX4LLQnWZ JCr1QUbkaW6jHCw7i/pgCLfqBBdIh7xJE7d+6mut1AKtq2qUSpEM4qTvrR89DLz3OtNiMnr9 hq7s5SyduQINBDnKLe0QCACUXlS4TkpEZZP06rJ2IVWZ2v7ZSPkLXjDRcC8h6ESQeZdBOSbd dciiWYiHtGq2kyx+eoltwooP7EgJ9m35wn0FGV+5hpKbhSwz2Up9oYsSbexjx/hlopUYGCL4 kgezCUWQsKypsitJChjV8MHgePDQcF3ho+qK+0ZJeevbYKSZ9bLyzt/i3/b3Jnt0f8tsFP3P djel4N76DyQiTyuoOxzZJUJDKx1zr745PUMGcur79oAxuahUfPcRpuwcHFOB0yO7SwEY8fe2 68U5/AZrGwX+UAZhN7y2MMkU/xK/4BIDY5/W4NY3EX2APAYMRanI+mFW3idui8EEzpzKZ1K1 8RODAAMFCACOAfgCjg7cgjZe58k0lAV0SANrJbMqgAT1M7v4f5mOf5e3B4si9z8Mk1hx5cRX I3dDz/W4LPh8eONmMPjov42NOz8z84PksQBbnjlfZ5UCotPS2fZ2actJPhYCho+a4iXwRm8B aXQ3DFa1CsWdXvkGsNIouuSkGoGh6+sEgAdP6JXanM9YGTQINy9Xsg9YOj1UWInSwRqUmJnj aNQhxJfj8j5W0uXixzkbKB+Is92mfo8Km3TAi9u0Ge/Acb5Cz0c5sqs+oWqcouaTS3o8/1n6 CZVmvcHyGI0APiALwU84z7YT9srpXHrjiHo2oS3M4sLxl0nuSFqD6uiIFrg7yF+HiEYEGBEC AAYFAjnKLe0ACgkQ3uyMCd5BWw6XgQCg7Gu7XOzqnEcnCYR7v6rub5d0zwwAoOsQ9TNDYmVl nW1ff9rt1YcTH9LiiE4EGBECAAYFAjnKLe0AEgkQ3uyMCd5BWw4HZUdQRwABAZeBAKDsa7tc 7OqcRycJhHu/qu5vl3TPDACg6xD1M0NiZWWdbV9/2u3VhxMf0uI= =oXxa -----END PGP PUBLIC KEY BLOCK----- ' # Bug solved 2005-04-07: # Try importing the attached key file. As the key is exactly 8192 # bytes long, radix64_read is called twice - the first time to read # the 8192 bytes, and then once again, to handle the pad '=' on the # last four character radix64 block '0uI='. gpg bails out with # gpg: [don't know]: invalid packet (ctb=2d) # On a read for only the = sign, radix64_read returns -1 for EOF. # This causes the iobuf code to pop the armor filter and thus the next # byte read is the '-' from the END header line, causing an error. i=armored_key_8192 info "checking: $i" eval "(IFS=; echo \"\$$i\")" >x $GPG --import x || error "the $i bug is back in town" nopad_armored_msg='-----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.11-svn5139 (GNU/Linux) hQEOA2rm1+5GqHH4EAQAi8xXorNRK4QSZR1os2xtbVeZg5pI0hrdyejn0jSnlWmw wqnhQnoOXsX/ZE8Sq0deOJDKhIJztVcu4QB17R0zRxXhN+huXq/DRGUa3X2xF+Po 4bP1XsZT6jYc6RDiN8KzQkuUgEjGsQhEYzBMFgk+tFDDA6PYKRk2mn0UaTyR6NUD /jimx1teliNBMhrPQjbBMCdgczfUhH0srGFKovkduf+Fmn0v4rV3JAhtHPYaPrgY hQtCMdjgCdh3uMK6rbprGdQ2lh4PAFKd25djBJlf8KBqkJXimAYhe5Y1q/x58xbA R5/tAKZFKT+ooU9qjVzXA0APHBwV50/K76Rsxo0QQOTihQEMA7WIRff0Cc1UAQf+ MZ5HWEX6+2teJWGVKMmJBFkYF4rAEIoqEmtzRWcsAPx6PFXQt5Ok3PbSGDgOsQTQ XwR5bEmZ6Gd/O2xIM4BnwKQ/g6PxksPuni0ajZS5YWdoGY7ZTS1LpZMFj++fhtQ9 1hd8j+i4P+GA2+4TUxVVFwIbHDT58+mw+tYD0KDfizdSwVc22F+5nT1tLaKJVvmu VX5L9u8OY6kR/xP09uCq+YzzHt1bi49Avrq9PpV2wbo2P0t7H+3bI92oGvpMPM2L ONAXyh11dlQkIrOiVztWtTYIfoCsV7Ud+25V+jYEfd9hyE0gf4awgqhpLwPrzzAs aHKQwrjlMaByKKht2teMJNLtARZ+7LbxgF0TR/019x4+XHCBhmwmPzL+OnPTC1r7 fdB0kte5OefTUfglJyz9tD9QnrvCvuOmKxcsOu0C6NLUqZRJN9knhLBZyXbwx/Cm yA60Er2dGssL7e4pa+qW2O/xJRL1IaWpgZa6Ne89ut25hbEDWexCAikBnPUrwrLE sqWOepzPNGxUILOcjDV2jKq0t7XKfwj6UPoCQxY6FQpx/0goWllh+PuVLz7tazsM c01KGfU61j5EyyuytOkJO2XgyXZj6Zat194NgsMrNGBBWl5QSGUb5W0jW1bHm0Cr U+xNTvjnlVZzqy8w3GDr2bCWi6qJs20TrbsbDa4+sK9+WDJ2fcb6LzfTGOekbvyc OKyYcEL/UXMH0uYrReRiH/gheESZqyQ1kCz+/q01D0N0KBqj6LHCJyK6cOukrY5M Cd+Kdk2gPL5VP0FSVJLoFXfbfwQtjIkbhsP06sFOBszPhd8bh+/r+RKWaqQvHJDX u5XqE/lJfBpNd+NBPK1p1fMVW/ljj3EwsJCdYOxh2moXD7gcehbaHCN/pFxD2Xiu wFHAqTghAtge4DuIECN+8QrE6xgCnwx1TYlhd9T4f+OqTcn/RdSrGcR/TtQK7TJY R2zVvj7vougCx5avrNwmJNX2DiJJl/nDHmjzEFByFv+UvL1PUn4m0dsbyx8alixE dw4wl352n/ZpjIc7GdLeusuUPJ7xFY3r1xS16QuInhuj+ZIlPVVeo1vI29BxGP7n HH9JmewN57O8xztGeBSMb5dZCSsGaiZtT7TdF2C+r6NgwcULzpgANVMVjNt0U305 ZhTf0FxH1LFTDd6IH1ry3EABCRQX+NDi78m9082QJPw0u46P6fchF2xW8MlJHa0W u+G0+DNrHXUFZBxt0yG7YqWYzqezXX/9ngin/W0o3Myf7RdHxmlwSm7fUuz2nYTn 0gpJqmu1MdDN5wKxuIO3qMOoG8LGJwnR31sDo9BG+8Hpp+yxYMEMMpmW33otfYcq Qqt7L5kWYDrQb0jGr52hS8fBujYi58AY++a/RqddFkU4c3kgA11A2GNqsbtxw7rU jN1uqPs2bQA2HqEdlL2ZD71E8jZXztKxMIHyXbJuIEt3GOywJWeHNi2vZa2F4tIw bEy12FJXLW/6Dac7COzqVILjNH45S37JRQCc/0kAJV1VWMyhuPBU2LoPwMhdXiDm k2vznYlm2cEuvFL/6DRm32Dd/YaA0fw3S/L7nFyuA2FVJjs17XiIRdUemxXt1kC0 1KPjNVekwJph2YE8GMyyV4nsuf5yGw0wJkXqRYR72Cf8mgxc6rPIS0panSWlAl1x 5TMf9pEh0TUkNENAbxFazsfpG1RTEVzjpeLXrDSK84O3WW0jUHoG3IyP5iVli3g+ /HPmOdd6+hBVZq11BcA97xnozZE0d0zFCVkpp2bcK/69X9NC/Cl9FTI0DzdoWMVL XTwmOV9BYsXAjJLXAfQR2eDrunaNkZO+rr3KT0/TtqhpcCo2AdP2IPglVRcYGLlr SUoF/sAtUgFLGnVnURrkAnKamSs7KBx6J4Y4uiBUqMxX6L4T456FBxHHMQNy7cQB quyVixd21NB+P8GYdwb+KLpVjiQRdveqDjBJEn/nTK1yKAhq7SY8B6StVgbzPcmQ Pt52HkVTh8a45gxvF8qGWcbhw1E9rwVT6yPFJXQiR/4ciEFFEfqQkYzNz7wVstqe R0Uf/rqwBdUCDpPzMPgl9OPKFMHNJ2tfYYU4kzfzdxBb6aKJbOX8xkxrhmktyUaE Ap4b2gngCenXf/1zrVoyH8+KOQPZZXlnUK1HfIERZwh2JlmowLvobMlup5zL/+s3 kRsnxRLbJqn0tYYYFwKsGbEqHZUpzbWR6TKNsJvoRlcgOKbAqel8ggFXiSc4co/f VZqk2IPzaQCkTyAU+B5Fl29bTfB4LK9gvZlY63y/VFD2bEBVk36pI9M7CokAr+00 KvAKEzpmSXN4RHKwJ0W1gZz4IGPKvi3eO6a35wd47K2tIS5K3IfTjsIsUM+agh37 7xJiJByfKgA7ardssI1xeG46U2iIBvdUNeQe4Q2ODF4AjxczK3hJwBPg55FGkhll dIDa07ZsOTB23LpoCejKi4zzn5DsDNqQLaYaSP0Cud6DOuSsmUFHSHSo+NtzqEQG rm2o1LkZwQ85iDf1A3b/pzHBf2xhxEEdtMZ2yfWxPJvz+8hsasysqPD8BTJIy0jn NzmXJKTj8ll9IhQjr3UBCZZXWUPNbrl3zKGUTQMXbdUIV6cB6hjLERILhgm2VhKR eEOFMaqATMKnGETa03l6wDhWDyj7HbgzgKkveHJ5PDFKz+RJ3sIwgKD4LoSOYtZr MGuHzMtiFSx+42ZitFm28G6rzj7NUVA+FHvlkogLWCfrXkNyEp0F3D/qbg3S8WS3 WrdUbLwbjFRSHgkdIUA4yIjCSmRzupfpvXS3UZPFD/tLZicU0ogfVL/2KK5WLYW2 03q6egJXqYX1iQSOTXwx+Msw9zVzwcAI8j7KKDLVv0fLWXSMOg2ondmznb3s0Y91 iaYjf7iFhuGH0hk0rTc6+CkxUhet2GeBc51G5XuLt7+Pgml8k7bZHU8kOB6etEP2 i++7b6uCAhBW3o6shyoRgJNYJmzYbThfIx3yu+3vl1gkSxSQFo4RpEmk8VtjUsio tYJNRsAq79wGsyLuPwLKPkPihjGEf488A2NKuVnHB7051oU9hWbRGCVhzdOnD04Q HKzZVjt2HyI0v1sY/Nq3BqVH1Ha1CkmySYeeKXRgVQfD6RIzfd3Dgr34+rZqF3qD MXna3FeH2W22dbZH/yA+KuQEjU+uOOk8QQsqXorunuyuslrOmGzaDPILW8zJeV+v tBeecStyR4FdtWl1KH7YTdFDkeGKOQeBAKYpyYUKr3s1grPh6caqgF1FMNL3Qw+s x4d0zp9efHkGqhp1az97oNFBzGmsBD759iPu44QaElulO3OAPyn2GYZA3NhnFX7Q uGtFLSexLpVTlVyBHf/QeGJk2lkDuOegiAkW81lorVF0+gFFae/HIOnEZgVK0/Nu h8XNFvGd7iKlNhfLtRbKPqHYOtxxGC7gpuSa/M4kgvTmN78QonKjZPDxhlDhYE19 WOHq14t60lZopVLY1bQREvem1K/RmPk8lak+uf/Fa+UqZ5C33m6kmbM8rwYmuSs5 Y3M3mR2n4tsTrXEO1AN1vShuIJoMEJ0ledDJiWKkLHRZ/SJOBLYMM+F3/hliWB47 eNkfQgo9JaTiNs9SBVVcxWYEGUieAZjOekD74oN9nOLVaXS82kQostloXhPHvBG3 gKQufi48gOj1i7REcTyhQMhIXa/NQ80aKZEedH+qQvYTTNGe1XIJnRILyQfirtgX 2m7PTaup+psJEOP/+Yf07G5KzN3wtBIXi3Avlr39ihdbuORERUNvu6kR2psvlXdQ otIijpBJW3Ur5yTpnTUo7chSlWFzbmVYv2cyXPrQc06RSxzrIQFjyTKI1/Pf6Aax wA7Uep62ga5r3IuR26XfaxunphrmFwb47EiFYP6JaNCYW7x5y4OGl8w1OYmabhwP azJsUAAem/lXZpPjx3s9meC48fHpuM5N9myIuRlLN1Rtl7EIG8cuZuubi+VUEhWD byap1IYIFZjWnS22/yuw6pzyNk5Mr5ccyo5xxvg1ZyC5rondGCcm1egSDcrHXQsE pR+jKBcR5AUKBhrgSy+N4HHZvsah+eNnTIZIm2Hh92vTLZZF7u3lW3mlePp4/zAt VMbn09ET1qWaIl9xMuHDIfIsSXMLsj4+o8qKaxipQ2sjFjnsFGIK1cAjjptpoUYU CffDWoBnLGkFSVTTooOQHuQhUmqaIv2pXWid/f1smPUjkshLoWiPoVl9lLzvo/XH NhoJ159/qczMsiosx3Y6e/haFlIfrklSklJCO+j4N/PYW+vyqYg/O6FlWF3BPRhp qnKwe+KfUeAyXQKG5CkONWBmUAhuLWOLU1P5280iAKHnOe3YRxkGIpsFJlIA9dIX Lf8KW9zFYMS5J1xysSyYtCwUfa/ewpRY+KuLAH/3wSbxViuhwJ1aoS2N6m8hkTqy SODnP5Nz/n/EZi3wWesBnz8oqBdrwkOWRnfFORpRkAedcsd9XYCbF1dHozHBdY8Y uu8N91ob/5c4RmP08Q5ama/BjaxskdMH3tw7kW/7r9tpzS7a2SLLzbDnyycZjknV tPr/xi2bmXHkUNnFwsTL0qvIkcZpae3k2oTwgNrjczqIdYGynflOc/gqxVeBO8gk t7mqZ5sCOlhqPkf+/1EY9kVwS0lh84yV2SskkuhEOF5BZP7IgNTgeZlgTwYRsGZq R40pWhW2iuAWfHop7NkrIWRvtyVtVtzwqtTLOs4oNrZU6f8xh+1asPdLqp48h53N wwS3AduoX31189s/ZnYUR74dfYcf3JehKyBTsfPfq+8rHf/LOHc831bavHQ4ncnW f//8T5Xipbjo+WX6LQxr9NnCIkZaJ4cjET+SBvEf2YGRjtG+3jGmWdgAkZLhWJFp xqhhOorpOFItwHiYIqsy6WEcEf2hEAww7NnC1qNmglDXw2ou2WOk/WDL+Oya9ANY 1HAaYrNmyjZ45GXvt9/ISzeiFaClgetu/zmJTe0IG7qxuOsd0MG8DugeFwUDZQrq rrVL4U6Z9MZLQl/DAYppnxSmne8vQfwHQqRXoazaIxAh3/uWh/w220YuSIHJt8Cm a6J0w6YlQtBmaeY22/rbiOJLqAMtBDC4cCAp8nSuxZKdVTpJA7axQee6lWTzan5q WVyvyIkqq/4iuU+WLDtHV441cgnYENyZ/T6jrHwrX1AYIv8d2Bi179JVa0OKO7di axMS+65agfbswB1wKRU1QYin1sDQUMPjGbEtP0reyAFwpBlmA38rIg3j4xr1nm8p MkdCKOdqZw2ppWDTLFqqM6iUpTiOUZLzC80si8C0VYkTCZkCRze9QTAD3cdfITZZ huiHO3K4pS/6ao4QJtr78B4yyUMST8isRibuvqxQYaEIgO7DkFjD0Vh815jkydXB Mag8MjSydC3MuAYFtruOm0H2OtoBsY8YBbeQXeC04U49P0ktYYI7MNsShhfFxRtR kXV/PldGwhF3egUjSjk5UBiZEUDw39PMiWy6k/uM1KiT6AewNryw6j5SqqzeWynh MWAqxK2oIV+zhoR8EaX1sIZ3LtPeDi61GIaeKhnv88FhDQDX+pjm6I2qKgXhnYxr TI8YqfbGXGpCZWk13AL6CyYqSzcLeJYKInETPbmZ0D/eA00dKvDUcHnt4UEpuVHq XUHETJR1OEF/xNF2DyXBja1+B8fGfChRMjmk2J3YjmIcg1m6svC5r3Cti7WpbKIs qldz+u5QKRbAbj+izAd9PEHbJ7azMlFHyL1W69VkO9C2u3qYF3Kx4diDAQFVGisv 6wVaT7kZod6Yn3dkv19EicvCnfyq1vE511OExvi75E01iznFRjdXIjCOpcsbVsnS vbdCo+TnLi01Fg7c4Bp50VMxZOKwvY083cxbR+csrf8z0TyfuaxPsy4YiLhv7SMU 5D5f85TSgP1j1Gqy2vCqqh5iegpi9+JhO2efZGFTZTyuCsGiIzC9CyQ7BUPHTz12 nvFa0pYNUjFHJD0FN8qVMVVOgl2SWldRaRD77FbcLsyiS19dFgnvbxXtEdW5OPD/ AdxCM5PtrJymOijry6jKs7oU/9jZJMw1sooVjcX9Xo9e5HWRqawTAe24nhwzlSRT 3GLcU/jTOmsjq3NLbzzC0VQb6/nqkN5t4f3JJj6jzRo/1lxKhHB4c+/CgVtQ3GPi aCjiyDt3qey29K5lMNmo+dIMtIh6Sf4klKSOlh3oT0XgM1WNNeJdFt6v344vxOrq /jw3tSMx9vRMDv52bdtCzzcfkVlSYLPlhS9ErBjaICVWqfaFJMzD2euHmau0RuPV S96FiHJfc4t0Lgb75bwIXA6a0SSS/JrDRUynBr3kmSUDJs67i3ULJ1rMV553K/3g xOBRT3t+gAYbl+5Dfu1+btu1MkmpVA1duQYcVxO/Mw2asc/kvXA+rGrs3FsScGmD Kr/1yLfXvM+p0bYlkCfVoOVEqfU83t1+5Hxp3PlqYwzxlBPx4rgofnDRyeLGtu7j +1rZ8m1W/lndkJVf445LqcXWJy8c9V476LXpoRL5oNAQkEERDK5NHS45TP7cYFId 0xuLwCQQ5hh3cBw+oBSqRZmjiEuxSArhBaw93S5SM96dXhoAmXEiipNbIXO53pqa jFeb2kVctAeNhupsUMql4nocwUYWyi0bMBzJH4eUakgBShxJjtAD+k2SEFk+nCVL 76fVSxUwmpdqOTSMNo/L0CpG3zHU+CflPBnmSXFyTgZD9F2FJCUBWWdKst4bHq0T qoL4Y5Wqj6YK8QtZecrqigrayOk+CEM02C6nhyM7Hdt8sWSPtpWGkF85Ksz9RCxF QnfIQImjM9Qt6Hd7c8EOxpgdZufvD10vlELH8O5U+TimCoCaViiTcH7p9BziOI4b 18d9bgXkj6GZmS5uOSBsMIF+uZjKQxyMgwzAaEYHA+vlKPS15rDDtlDNGWDHfNik hj7b/FesKCBCdqYpxKWmcHgX4aN7MNMTy+HroF/XVAPGzxGAnMS6oFahb4C/o4be T8k1mGhTlTQRWMi3VI9LrXoP1MsH8LwbaPSnSo80X5sbgZmSlctu5QiSaFm0kYc4 HxMR9fJzxZyuXM/IbXSdlYCc04xwNO7hrF2n2HI4x5BR7fWZSl/E2yfpxwdBtcBf l2amxpmIjusGprhGCI860vpQxfyWyTfWNdMX+OFL+Jsgog6Qm8A6bSaNTs35Dkf9 TjvTPS3wUPwDbTuk9++zPiKt5h85IOFaFzyjC/u+C38IvNmvUUcYLha8GEVz4OnA KT7FrOizC7pdyrqbCIJhoZsOzk8romND67wXfgIWZXYMU1b2K81jIFSvkVwrXT9w 56vollH0x8YJD9xC3U8QcMDnK3FwuOrlGxHY8BfNszCV/OXpT0qlBVC/gywaq993 YJoQOWugT4CWpmSqnRLjTV3gJTHH+qqQZ23TsoVE9WoByXj/yb14FtdRq9oGL8H4 Ke03JNOkAlwzohG0XEsoHLC9+o5x6KT37OtLuds2bYV+PzSRVLJjsqNL3C5XSp/a nfXTim+6VIANM25jzxfCcot+VBz13fhwnaY3Am78ZEjQVmJn+Z4DbWIIIc6XGtBG eNydm9WNcZ2jF64aMN62DBp3RGqgnhE/qXTv/Sw0l9qiOCeWJ5GwqU+Bj08D4/6y 6xBaaWHcPqCNuyk7pPG/tN59GVUP/jHEX77Z2kn6RiLbnKahcekaifolgBuhgiw1 /c0fbWmJZVCUVhVPI7fHTAaUIO/VrK878WkSUWL5dRvjXp1yCvAxeYffsdwamPyQ R67h7sHAPPtYs9XpIjZxTzGF0YDFc+mpfYykLvc5ixrcuHGo3Km/hzdjVRhcCydM CexKFEHqI97u0Bz5aNW3tOE4iTeNth80tl2rV2PsJoK6FRkdGgFGdIsHZkhy3lsG GwGcp4bmAawGB/MmjnIQRPeVaSobJSln0BgP/j77h+pe+eTswwxBeCh90umeE9sd dFfKQNzuZvd5heYwzbLTwlWbNn8wnB/nh/Jh4O6w3db6WDi8Yl54mt1OSFNVjT9b 1rM0CfUDFDk+Jzd3fwY5QQDy+Dy8oPm0lm0xCj7mrzmlVGP5JmLCvPiJUTPuybdr WlBJe9T3Hyi5xkYgl9P6Itxho+qHEMUYa3ScBBC8Tvl7y91Gp26CIfR5pQxkLKmh KI2wYSHF9fytr5F6imJ6kTocxq8T6UvVgXi61pWScjifnQdQBYtNcsmu6F2djNAF RIunpWxbcq9b1nuQaMx6aQhYTMnau/ApeW6Y4bbVwUHyHCWMwy4TiE1ifFrvOYzQ Ph3WPsfDJ7dfvHfN7/Vr/qF3mcORScAfkWa2yhVitoBnBMJ9fM+q6Qrxulp8xOqH 0UwdTA/FSaIApZbIHVO5xquLVXDD8Hoene6GWz+wep/oUqXc2k1wl/8XbhKlS29z N6vJZ5zVJqLSWWyHceh9L1fd6ycHaNeYkPSAGBA5IluJfm0NsQHGW6LyGkkpnFVp mmB+crDof/RHYDU/ep3I+BP27yTFw+j4vgELB6XN689kE2dWetrINmemwilaFoNd eDmVpKbQR3J3WD9WNTseI2OJtZn/E+W8mzRkp3G54nGVq94nMYqxCMFHSGQm78iW CLqjp0uNPM1NUdAH9Y5jaWF7NzBQGh5H3KLqvn95ynwMbWeFEZ9tzjLoIO3u3qzJ eBlhnrM7JnwG/8XYatKQ4JaLteyTdYrlENwmQa0d41kuWiZYGGar4Jwqqf/Ma26V UR+IXP39j9agKLjzDDJJgt5Z0rknEWy8wQMhIY6WiKYpYGH4c9zrYtdzwRU7+w1I h85xbqgPMTSVlmRlgn81vpljz61Tw2hkb1sUB2uqgas7nwUod2+eiZWBOKDl3awq u6kwgp94M0opu9t5xx5oJeb+WdQd1nWo/5E3Pdp1hNPwFpqW0TjMgAtQHmXy3r0r sI4pjs5PS6JZ05D5+WR3GA5KDA1cCMq3kBDNhsxqUeKkM2BNuq/J/qQL1pyXjlwr 4dqR7r49Op0PDIkkl5BEUOXLjLgwAN+TRMhu52vdM9V1jTBFG1hGFd4M7+4jOviy jaPsJyzrhvL0tkvxpq5eQUJRqMqqqrJd16UmJZef/xhYFuu+p6sr4oNtE+JxuOmE JgaC8I2HM6mIBq3VV4heR0CZUzP1WYk/iv+Z8WmYMTa2AVBbgwHlUK2fhLci8uPp tEsLiwyWubB4elo2VLxvgXPaBROuzqANnGSeFM9B2XZoGejAVsDRk9/cfzHunHcv is98xkuq9JRtWPdNIXgKVIvP0GuuDP1CNhdWR7XULqMZbZmq6UWsUwRWfPBZ9NM6 rag4I+gpwnHPHAK3yBe40bgw9J9pSJVClNkH2RLoA4t7V2atSQOatLTP2JictUD1 2R9kaeRdQ0XHbRe5QnvrByFy1noidLgyv2PXbZMHW+1OyGKMfY3eKa4/k/Wmgw+Z QUaomeAVqguCRQB/8QBv7f1fLJu+ZqhjhQXZoTk0MdDro40fTI5wxxg/yV25sw42 McPy8dR14mKAXocHpYhP792wVhemaBPZC17LXt95xLvfAOLDz/ORalrUHdhwUtZu VKzQcxFhVp4aOCYR8gFgMKYNwX5E7I0ixfoTKf099fqwsAvKlOCqnoOuzFnRPrui XNg3CkWkJqZG4UgLE9mL0l4CAZ2J9kbleN+4YMLQUXFvlk74Qial8hE0QBIdCCyu 6huelLEGsUZd+c+VsEQRUfq9sVUONGcIt9LQGFb/IYQoko87E1RThq2b5D+R1R4v AWMIJGit1k0F3SxYdeUEYTCqpUddXtjhjSUGbzikMU/PbmyZXFu5PHMK6L8MVoWL ZQ2TwphlVTo/gVz7dvW7KeZinnHB1BE2EOoSfhRukO2ckRH+bzuwC76xczosPLGn LnYQFLqpYBDN1uCrvoyaV4S0xhgHsfl7kyPVdoqDcoVJSik8uKu6KSCUUyUbrrjg lANey8pArBpI7x9BREUnGWNwZS6s5O9giMI58xljBm9wvu91fqGdga3qrv1QMgQg Hytb/q+OAgQaQ1wIJpZbKliWz8uqPk41fsDy6ZKOO6UXYwjOg822Wwj7xSpbSRf/ lhegSXgfihyeEeeWeMTLDWI+N2zuj16zZSCyQHqaDS+vCkMkAXUtJx5Ia3maBHAK m1UMTJD6pP99zIqum5/QK4QKEk4rIvYtO0nTOW3L9fos2a6Cc2FouFon0Sbz2+IT fVM7zO7RBwI+xSyDmV1nc8C5VyKxUlAAcuqVKEe9YnG5pwv3ogPKQZ0TqSp8zUCO YOxHkG4F1kxAXHdrVarP+BYQuYIru1ZFovUQ5vYnl/8F3/7cuD7opnO5hKBr0tvD 6lM2PvPpIzlOVDiNZSZDHOfmYWWVlq4uzzuP8tG3tLyYBGG/AZuDTA7WNrOGTSSB ZP9FVxvNT3kaxGHmjO7lGA1FtjRmkMJr05EWMHHvatvRcDFBVR1thxLkyfneSWs2 orwnAqkYe8Fz9U8p38L4UC+J+2EZszHAeSO+eW3jrqZuFYbckROdzhktdUsRZcdL WFpDIN5zINOo13q2Ei/nG2kIlYKp6Mq0b+wN4x/ILkBWnOuzKXOY6dSrRr4y/zq1 dpr4ZfQezvsLNh8zjMolwXYdLj32Rg8cgmq6bPWIm0k9Qbln9HCBTO5VihgUfvIe edpOxvSi+HpgIGnGl1M/w62z9HnZBCIcgZS4Z3EPvi7CWQg4S1aOABj/mri/RBh4 k2vx1D0EQX5gBRcbgIGdyFyiRT4cAdPiXyje4zLIl0XT+v3/+LJnX7NPWXLPSOM4 Skq+fDvzrFQYdZ7yefdxIujVKdI3iuo9dWTwITApf/KYop/M4vb5CJfa12Sig+VA k8wdIDwXkklbOvpe468KAtTdUyoluuoROH0hXNaypKHBLMHk0JJRVB9OxBlIdQSs jEoUZqQF4Kll7vHSC2sDeYfwiuBp5qZRPet+ew0SdwZfVmXcvjVKr8iPJEtr07Wj CtyMi2+yw4G4X99em2JJu728dI4OWPUeyuR4x3dRf1fM5OshgLYxEJl0CMDqKVr6 GqJ/HAhj7lLQ9k4NOLn/RgKt65jXrjEJB+IHFFitqGu9qLKM8QkMAAKwBfsRyJiZ 2e7aMj3w51DrifRL7uq8WZdP+RzvNb81WItRtVBQecHnPHrZI9Hwq7guxlzZTOT1 lmUYNC48LVuq+aZsaD5i6MmT0hXCTC8GC4W+KAAqM1ZkHi8sV9zztWD0YCxmvjpi ldx0MTVU8dqySwvBFK0faO31pG1rf8qGVN99Ys/pY4OWGcnbDwGblWhhYlJYZ8uZ 7IHt+0Zh3hpVWtOAttwifKXM6bGRX83O1FVExJhXkjg3zrklxNv+3baMHKrZFryi uDtE3LLbc5ypK1Afp5oenYpUiQwUeJ0fGYH2NT1fEc8UCRqmvcJGSc/MmBiWRMQN Iz83mOJ1sP3e0dbbXr4ZcCDf+RLKZRS8AH1zRp1FoBUIhyu4HVOs1C9YBmpaUGyX t/c2O+1Slh7bpAKQnguBqIno6O7XB9rZrs/PXezDv/03CU5lQkYqai8SZck1LrhE Ta3ak+EV76QfHTQm0DiVFIMD7IaXAjyYdm6nCDxZkLN+Ir/neEC10UzcWHqNIdKe o2ao5YePZFY/WW0HicTH62MJDZFvgppWZSxx00IktHmTsILKgHkGgBgMvLTkRX+H DdAzqFYNeewOnF2m4U3Z8R2pt3/m63p3sMSYsHnpK3OKjI0trrRJHuFjgTDAwhVm xMimLL/8SnVJW+KtjZ+XazD0hMvBC2GzcrYr4h66iVOZI1tsFE44BAlh9LW7h0D6 FRRkZkbipDpv5uiKoOr6qrhjf4/2NxCdkYI36cAfU2czuPPZ7OoHkLniBbUuKavc n45Mn8tkq0qaCfUns46OUCc4qyBb3igBKVLlDlhP6gjNNdYKNaRKsQ09bs7TUk+d fJupU57YoatfskkG/RPhJebLSuuvh5+Z966ZTfGSVVIOFPDdACv/S6lJN8DiD7H1 8b+bAVMdVcXn/egeKvsNuWovYZU4DPVdOLM0E5wGGCmqyt1ygFSaUcoFVFiYfnAB FkIxxBOtp67dLSazZDRRcsJRLroZ0AQRl7x9zN8Z5E/OxvQtiv2C/evhntVm2Tjr wdJlwPysZfKqjnccXkM5pkoMN3/vrNVjCGMYrCRz2AOPNVHrTr0Hm7TAFJ6QQOPk xITHOlIHEBGg1T1ZI3gwSyl9WLlGRp5vyQ+rdef4zg1ycDIj7sxFA2nzBsUBm5Xd SgYzbnp32Nir9MSr7pHy5XFPCKVzs0R3GqfAjGQlyt9Xuxau52u194n386tockI7 iOe2u7DPjqVXcS9Z6lNFO0o6H27F2x+dicSeHXBoWU6DBxvvjWtHG5E/9blp7zCF weP5dMmB3UzuL3DcIFprNGJt9kEqmN80eWQRn6H3X/IzNWjLT52AT6pKS1sowOsj RztQ2qAJ5md7Uz7fTniUtjp831SmxvUx49Sh7XYfNEpqjyY9VizByKPOUdUKmoXr fgXIfsi6yLYkoR/g34dh2JsKrC1bVtC2AiRVAgtcBDN1zFm5hiQGztq7D/aXzr09 q9szvRnXUat9iAJjCPsfjVJ6k4YjpmQ3iX2Kz+JHHNBYD7EAW89GhTSqJJB0viM8 3lhxgxZgxnBz8ymwhKsyu1GKzJCv3cmvTqhlHo5xpn1YMFU7ea5xm5XkYKysWhq5 w1dSMKhuvA0dNau3XTef7M0AI8iWIXdM70447qn2Gwp0bO7f2KZVtXoYMzr51CaP QoAEL6FfwULtruriOK26YhmH1F1ey31xgjE0eTbxW6AFLEvYQ0OX0PmjX1/OBW1x sVil7+beskMwIJpRPlsx1LUc8uojLnaD2j0ymqkxCuF9G/WkX1nlyi1s/SJpqAbF EzXkwj+4B1wM/c6fHfxyt0wxzaTNoZi/omqG6PdXmJDnNF3DlWs5LpHQOsKKKXSh 2Uv4055evCC9R60LgC/xONXYB4zHTlmeBNnZO9lwcT1AdQ3Ho0h7TnqFm4IBnVva f5DZ5ntxLyygAdRLLHR2rQ3SN1Ms4rX3CtfMGvISX14CYu9U7WaHtL1XLbfw7Q2e z+wf0xE2zq/cO2161rUUQ7eq4XmF/qYreQ0nBT29ell6wE0540ncv8FAOO3dWK66 4PrGQJFY8qgZ8B9wmTuHUBvTZ6du3KI1LYGOS5yIktfFX+0UWK+kPRQnLt/ibzID n1FoGt4lBlDuOBq3KcVZ5KiwEbS5uNsOuApygXanE9bEIXmGDKqGIMsIz3ZrEURp vVMxcr5fZDhNFsaJ6W/MuN1F9+V3Xu4qgS6603JiD/TRiZwKmt+YjZkmD90p5xU1 joRyPUNv2SVkOqAmxVV0DCEctj3UT6S6XN3eDNN5v+JA4qAJqoSdVjV8M+8R8bHs 6bDuwPrmOrQ5IFQKC0u0AqmrxfQjNXNftN0OwymryZcg2YTpOu6XAmwa058b7Dp5 VR11McEUfl5qGtnc8Nhp3TUdvJ0ugx55LTM70SPZqADChRwdz/LGzA6Cj7DTKtAd /aD3ccRN4sEXEPGhYacalHKNSAyQPSLWc8+7T2GI8KHZgDQMreHDjzWQwUydEliq 1wgEkXu72pRArUJ5jmE8ac8r3xGukO+HbAsijgQqKPctveQbGJ+Ypv08wKJHXauq E11NwaijBOZoZ6BrCFG/yOrjStDSbrhqd9qVqm3QCewoA2AifcNnzhcQw5Yk5a2I ehhGFN7eJxFM+bkXyHMcd3j/4K+7P0WChAS0vujJdm5I8HJYNtz6AlLT+ZT91zGX pJOUOnguWtWKhOQ3Hkzy3LrRhjFUmpdh56zOuKOoWP3tIhX5NMZyEBe9JQCYgXMX MXLA7uM/muO+Ju0p6TW9eZbc0vdmAjSDXGfJHsdXwt3XuxnbFIpSHhvLTsBqX78s cS2kv1IIVvolSeBIFhWmpB8Z0whWNwKWk/Ze9rR+ESmmCM7ykQO+IuEjD/AdzOfC H85sQ5uJLcL9xtzdkQ5jkryp0wZSgbApXnKMvt5pVxbUqLkEkguuiGwvPmKvAQau jxnypJh+ygKiDrK1WQmaV6sDHofvLjE7VC0SbH2l6ueQ6lQBhE/26UOFKrsOmxmU u6fwhiVyv8tiPR5/FLlp3ZuS4FjS6ZzBPAW/8VEhdeU7T6vOvpkDUxQZGsz+L3Nt u0mHVaMR1NaMIc6LwCoc2UcWJSlVf8C/tjvWDY8cyNDUCeMpnadQCrxgvVhC6r6Q SIJXxnkRgt9QkOQYzHx+l5I6klB6npXYE02+IVjririiAdIT1SCRBOxW02o8Jefk lMpqXygQEb21j5LQZgFmwiQSEx5xpvmvjAn7CkWZ+RIwjnLdymz8yUAWHPv433iE RvkJ3XeKw6TSrHfiJtVPOVoMbILBjxLHP5SxZ6S671WN+aujWpCKeUkIwiemiHBQ NlpR54J9O0u/yDYhDtTWicSnDvMUJPEPOGMhDXgxzl6JdbnvpjEQhPL4/UMpQCuW U4kySde3ANyjUgaldWOT4omzh5KLnrBxUrfsV9uFbPnNMROliOU8fpYvkrLaAb32 mVGbYBncYJPgeVrFQTl2sBM6UMsDFeplGahZ1pzJLkC8aqySgIDpAyvZRBXYDe35 C5sqCCdjeAUJ+/DOQOoOb8owQR0413HTnHQOU8ZkTsuqSnfNoH6KmjU3XH+xMlhi 8YqLK+83J9ACgk9e1BkYQA6TdJuI2Nt4MRoBdFnXP8SfpcCO5dm1Prs7hOlhEJQb W7vNkZdwAK4WnotcVHRYScTuqn4eA4FIPBu8Mc56QLe9G7FWD8Z7g3bgbIDmgaw/ Zc/V/6H8jUKMlEtPfJeHFmRxh1F5nDpjJswmLAGP+xJm9WUvuFDKHo/svpUb8KG3 JP9gu7Hy39pZCU242AH4PK3cxPifhQU88GDWac5FfbGZ3fzoIW/NdxZnhSY7WY4A nk9SEv3HGjkmpPGnu3AYDMYnE7XiYk7rtDBMh7ZkZLw26NH9hZeOE4sLqa7aS8KU /WbhWzobgS4AlIZVNTUAPPkzKnPCIUPofCF13e23d0QI9nZDTe6JktEzP86lpzw2 kQg1Zr2pm67jC9FQcu3nUgy0/XBPaBzn3LjCIYB9DX8ZjXBvRnG60qatu/yEYDQJ 0KE/4V47I2Qs91jjmmTY3yRkCOWR3Hpbi9JIXLuLivvMz36AYQvCrwBxXImBxjNj u2d6McMg+LdDrtFjIIViqFJzYSjI/dtCT0aFHN3yF2Cfiy3tvlV8ja2B7Y6w+sOe BByjguuUl83bDGZWZD3BXRDiKEjeNJMJT/hlVsIjH++370rZD/XMYimE/oe5m5wQ lL4MMw/WjKHT1X+CJs5tDInM9nyzlbwHXkF25iYwA59Fu1Zbdlagz+SmDp3J1dxm SbRHKDo3dPp4n3XhHcdH+H4eOdCTOQ9U3jOn5how8DnkHMGHj9NG3Ga6jZqSp5US GithsWl6RhTeWYI2vZBafYF75whkB/iPTbwz/SKQprh6D5XbfQ23yp6k9CY1jnSK qrxMsEfuJ07xN5Ri4VRn1EOEs5QXf2aD5znMFXlUrVbNRKuYJ64U92wdHjqwZsUA CnVlkC+NUWBqLOEWOv7J57Id84Fast/x4DyKri3hqcfw8+t9lXfDFojmHWaPvqSt t7Hxxr0dYIQddMF0vePV0OGNMXLAcg9wQ0Hhretge4sbWkp2cW0ESTsvNpk12YJ2 l14yFBgLOZd5T+xsV/NG+3jB5lyXfhRYa+eTC0VbEyXAWog/3Kl4XcPEAL2rXCju T3Z35x7XdbMCz5GSBvsmU92blmscpBLDOUJNpQBKIHyBmixM77YKMyE5ISpQ1Rk3 hUAoOKIicF278ToBpdWJ/CyLkROzrTuuR7GAG4hhkor76alvyxW1F1rONuWkZkk9 kV79E8Et772+7ndPsGQ1ZLkWvCHl9hTUJPdsRMjK/NZhuytD/oMWndUewg9AUY4Y YUu8iqRsSyE7rcsK/LvBXbjf/LZd5orDCXyWDT7sGZfKtJHiiEHoMhsH/YNcSPKq KhPyOz/p4hFFAaGfhxAdSnrh91qviqHpdyT5K6J/kzrrMZm3Mbsoxi5n5hIpeO3w 4g5i7nGJ8C+TxZqaOr5jL8qYpHN9e+Lakr3oN5pDlpvKlXNzf2de3OgyOXMkbNie n0tdlCSkOxh9vCSiekjcclhPzVdcuqNuTriVcZiwcWaGQZq52MGkVbmTY9+qp11T OPj51ZB5KbEJaSfzLvX4ju1XZWdbz5FAkt9RyDqm0cLNWU1Ue5iEQuK1fLoDqH8N YyJWoHavKb33jQnqHvZrBnwxUlrpbfvqmqCvdsKdsjNu6lcreQU+reRSIbkgiVjT jYMWeTLzoMFyo4sVGik2ogUXnVSiWGAxnvc35iB863IlIjr9iYHsiSkZ1Zd2ytQ/ t2jf7n1chJTyn1wkI3w6Gj1oW1CO+4083O0GfU7aUJUwUACsUAXMso+EdH9uDu5b UIS4U2WFff2dJgvNKXZh3vdsAruoEzsk3avocj72GvCBg+qbHL8rDfaZeT5qaBy8 xNhiOqXULKfg/CwU/ilvt+V/QTvo9WIv11f7mYS0j18GJsgaVm4Mrw7uh4T9A5f5 4PnmZsNM5b0HpW62DCnARfkjGEObdTC0znKbSoGn4wD3H09T5HP88oSd2q+rdx11 GFCdo3MOYEhI7y0cUBO+onZozOVJELyW9sbGoXy5jcRtah63sXcZN/+hayQiH+3s eLh7rOtQSV/Et1P3oDK8hrMUnNcK6+BMediPxf/PHWCGBqjZP0t4diaON/UBavvZ SWA/m2Utgyqvy7h5IEOUbIomiKz90OypeHd57tVNC0BNMIQHnAYvgaDrZbUHpT2T 7LqLPpG9rffH12550v/ZCCUrIFy0SiaXNZYQiDeG5/WiBOzS0MZZ3PVIMqx0czOG Tx8WUcSEasnjAH+pGK16YGDc66YLnrMhyySgiIrWsKqf8NolxDd67Z6AXcvKh+zy sCwUHzvTgXJ81ejNWekHIaAUZnpYXe2DCKXUuEOFJpYCdn4EfgOryDwte2WlGvUS ZPfj3Ym43bG0RoyFSo5qnJNE1Z7jjNJKxOEIFy8NHvb46ipcY7UeT2r6R8OJLi/H yM/8L2op7rXw6UEPat05dCp90VrXtzrT8UgF72yGVP7Wc0Hosb42JuqxmXtLlX6I oOu0l7Ht4zaKMm7DGbznsqHs2daXNhJTAQ49e4owHN8zpIZrt+SbN4b1/svO4hZJ fK5izj6botAkJIAnY8FT+lyrJ3oRtB3dq51lg/tWXsTR7RYyl2UVxXDRw0mpW5pe J8XS2J7tLaTIsVbuO19Q4de5u47KlzOn+exdvmPu6QwZVBIIs2CIFhYKjXKVxKAs tTuVv8ygT033gzrXOU9XkbjEPaTY9Dy0WlUf7wwg5Ug5dmEhrRRlhu4+rOc9mGH5 NzEwSl4ZJmEPP1auB87iM3l1g0KcL81QX0kcTVCS0AnJUNTg1eSr+zc84tn2VLyp xdWidOZ5V5T5p7O0TDDZ/PJAddWAuGhRmK5vSW0XaNYcKUdSOTwul4+881/i/1mh ft2mHm5+PymHbBRVLMmVvB/AG9jqACnRXg4pbHwxp8RRMm5AXwQiRrKA7arUPttd 1Faxq6C4e2GIYDdbWmLRg2P3PYZXbZE2HNo5DGpZ60xs9GwirIPeZZbmPjRTTvqC h7TBHyNZm/mQ3jB+f+2vdH0k9kXFxGCcitg+1faAjCOIkcQKdpc8RMz+e+XSIV39 ZcIlLrV2Ku5jpJ9MbWNg4BpcCDi14nteey2R4JQGOSyeR27VMjGtVWB+b8fNjT29 J9fDdgcso4OINe2jDC2oqtmlCHXMYDsaWx9uAB0LKsGbMYsF4kR8EqS10Yo709ij ARppJ4cRcYmxN+GsVLemIBTYVObK6Ro/k88rOZk00+cLGNWsZwkp2Bgdu5cuNfEX /0xkeR8dtuIZhAYdc61Hc61TVEQFPUyhbLgS/PEc7jhkLkbD3p4acVNrqt2I6WAH iAcLHJe6aCB29C1XRJf8DI9a5+7nXqSKFdv1pKQgVBLon+gk5CctlDsl/H2J4ehW J7/MrWpmKmlG5AUuTESqB9tShUZPCoxkB2wEWgNtPwoCi7+P57NR5A8BD56zP7hJ 3vrkxSLHnzKBVkrN82cDk/RiVJz7PM6108APRRWncXx5kIfeK48A5FxgcZ7RElV6 UWQGFfoGlC3rRJyMYAKai5Ial/mQVLwtcdTweaQdNiDXVKeAFyXgznA3fkMfE+9d 0v0u6FtMml7KSXUwIT6JKmg17W4Lr8qdGFzz6W2YqAI0RelErgTbuai35i/4YTnW r5hOuCNTsDYZA0XuNVq2xbIcLoCJPOkOGRNtCKZdIt4CwBFGFg4ak4KVhpFjNTvC wBhDj7exxsiOdtpniKeHOiGk0hH6IEMITL5e+C9ycXmur9geA4v3Vr8E3MAsFixZ mYbgqx/xlI8Ahprd36ab+YTwmhRoav1ZsHJiiejNfUmv8Z625nQ7Pj6LPysLNZ0O +UKZ6wm6mEBYm4hP6GfqJK3k/4V9nOt8sXxfo3FXKVAus26m9dDYOL1qb4NWsRLx r7hGMJfsf+hwcCpcN2urK/C6Mzpa923kMBBp/E35ObTyv9A9Fnjdpsp2t3Oo+G6z Q9IYGV2taJt3pPWK+qLGxkTEb8HzfH98vdWfdplr0B5C9pXel+gK0Dmk6+LnxYXk TA6ao7f8mxzLSMUiPjLW1Rl1udPnNjGFIdgcPQ9ZNJSx+6O3o2LcU6YVcwTcb4ES vqT+dWkh88O0WoKWkQL36V5mBUudSl6WipcLY2twp+WWweJquHA4xh13uqqbhF4Y 4kwkupt8Im0oQKrLSofMaEalUPMZkIaXai6qhz5niRfo7x5fe8+8jS20HMUljbDG sn/Uyc1/MBv+8w1TXBOWoAgaoutuzOocARU2RbGrICc0Mm/rbuUt9nVKxpW1WvML awKfDhbY2XYoYn0CzfYrvA6oGZJ3bNwRa8MtEkmQdR7Qb99H5hn9StOKNE3BVKEu AZFgiWTGI2Eq/XlCOHW1vL/D4bPun/0PP8IfL3PyPjiELm/CSVYP59v1ZGtZyPqz 2By3MT+7r1gqjU02HMElDq/+2MeJMu5YMzhcibQABS4JmqPHr5fpvqTzyz0T+zs7 KRdMh7LVQ0WmW1F1pkwHEjVV8oFWkHCh0s4e0pmYPhW3/YRDVyAGSFNY9zKsv8a9 BpLQEEY0JqW4aXLibKciLcj1dkY7XOrpFTir+LwYaCt7NayHm8ddWjWBg694U4Hc zxs8FWCp0VKm9/HlS4Nt1VkoYmxWdZCLCpllS7ZmQ4K9m4UfIRcyfh6NGeUOJ+SL av+L7m8I0TyRZ/0hra1D1c31Rltmt/2BoOnE6oo5plmxOkpV7PX4tLZO5oNlbbel C1IkzdjI9GLQgqr9XhNszFyeVfb8W3UjRNHzv+NfLY/bqU8vhDjtHmchlsnOiFSL TbW8I6VtbzhVAh6cwCE+1uLhd4B/pBczdg4DTxv7DkTZamvzOAVfyK5r38A2vCwe LOFpV0BN9v/4RqfXejFiw8gfXcA+UJNcOvVuRp6Hz8tmnZzyfTWTMRP38FTR6qVL 7TGxeUwCmmAzYR3tUAwBYQzb7rLg5U7jeMtii08URsKUqOMFWvEomrm3Gb+/mRXA LZSjp18pflAxDtqvHNCxie5Fo1yMbqnO2kYT0BK/mppsLzKYH4QiuYjjTv9ffKjc A6RtTVJ/U1aUnJZ62nQJcbAw3Lv6YgtNFFqUq+KlwEhudvJpKtMf/zwp+caxyYNn F04gCsJlIVvqYUAZ2LV53tnLkBMs85bs0nzRBUkPCw1PK7YRv39mirDMYvbV3F5t bOUjeQvUx+tYzRrnT/ndmpPFR/iS2xatvoErkuIPxMrgX7W3amN6CHKGsqQn9VHd ujqoTTHMkIdyq7NcC0DIvUGjIXMMOwHL3bq04rYXadpsNgiKxqhvjallJC/1aNKg ra2KuxKxHT4g1lt501i1Xz91bjwXJPnKB5vwseEm4eElS6k/EUBWoR0AWGWu+nCz RWt60260ENuSuLT7BB7pbUUfgYxcHd5oJO7jQYK9xY7LImJzR+BYKO0l9M/TMWtL LxecJE2SdMkUJcNAM8p5BVL6W9gBzDK/UIh4qM4Ja31CwOdyrUUVr29HuUxnTNVh 7RCX+WkSSGdiq1G/PEb8YwPPs7roZSP/nBcj4GNh6aZFiv+RBntOpzJA2oxoJ/z7 4hK2g+UC62A+krW41h3QvMCZ/ZcNmQWcLg1EsnVGThFajtz5+1MU/p/R0JZ1HE/E UUoi+Aj6MC1MBsOaTqKNKq+0JL11hxya0uypiBJTQsCex63bdXGmOoN8OK+TQ9gt GO24H17S3ZXXy3koLUY50YGVXXY6UXgVYL0TlGWQFNjEzDxgZI4/tJckEyv+0gv8 82eMDz5sMDVFXdYme8Rz3RyrG2+4kS1dYQNQ3vKuSABtAMU8v8RcoBX/EZGgOXy8 4K0F+nD/Ldoi9d355n/pumiT5uz8omBNFs8Xv5zIArGCGg8fBQAqRslA6su041rp Uet3zhg3/EICocyFAsEL8a/qmG7SgmiLOx58ehTBs3/WMWr0am59UJUKN0iDHjB7 lOezHJg78R98dfWIeWq2nSbOcriPvZcaWKbTDmh5ss5bNhwLHn1EwVpIdWzJo51R 3J321Fnm1m1IpPRBkc1DV1Jt7daR27QuC+ikQC33SKOUnKeE9Kb6sRSA/9jBuzIH Z51iPuEZDLgFlomc5easAMfMYg1JEi9ocRsnzyEL8P5HS5znAdqO3kBFsG6X2b4r z0wgBl0TO9jKgut/WbW7rp4AhZQlrRo+ARF1J1G7dPov3SZ74eIhbbIOYf5owapY Fud9ctRnE90T1B8N07RRorhMvhPw0fxiJBPMq0jGVTTxp93gEA79CEBh/c6RhhdZ ++zOma31Jc/nwvxY/FzGEUdzT+m89leib3I2DIHGBaQ5ZKUNXFRz/VF++sH3YrGB UQXRJEu/rbjJMXCfhs3TLor10cDx2P1bnO6oNTwt+BQuWH6Vz/cV6+KYDheGK5IQ N8iryCFvr41BDkMj1YaL55EqWpEk64adh5WN8YtruTowlJjsZ+d6MM/vsVz0USLU TeoXzOiNIfXFO8xjN2PS4PcsEOq2ti/oTPlJJW3hQ6dB4R8nk++iS+NZ6SRUnI8U mQ0utN+N/1HQKLh9nzUACdWe9BJ4KMJMpF8Vdk7mghIcX3aG9H+duT3FY8P0nsed cJM5H5tG1RkLw98POYNnPjn7j8iETIAlNG4QFh1qSO27rCHu9X2+9r0XxDPZiNhT +HmdKXeIrAd2HotvWdwBnBChfxAb32I8QQHqwxkS9eBcexC7IxIkI3HLO1/EqKZU XqpLF8eyZ5YlNwavBoHPs5yiVJyXX9HHDwF12hGiPpj5cmjgAX5jxV3OTVp7A6rc cx2Appm5AeN8nz5XE4WrQeQQek19Dd6bM0p0kowmusMRSjOJvLCTtmTyLeVMXsFi /mLYee6rSEyjrB8lIjVMWq33rz//tnU1NuoqTM0X5Tj9iUd7R2f8DAA8q2NageAR kFK7B2IAIKpfy+366Axc8cE2+of8SocRdbavX35xTahsnQhaFpoDoxlhoOkCTtzj Y25jc8xNSO7ULGjE30DIPSNp35KG14rNVNTHJB62ks3z0XirNU4/pUrYOzIfBdZL 49ETu3y7oVb/ouhZs3QCptZlkiFf9quG/eTumY4cm63n5nTLjWwPpUFQzPE2gpgS FJXFFlm252hRNKtJnNZv55EBUxcd5T6GjykyfpKxEnxBNbOLzsg3c/uXDKbJjpwt qpCqA4Y2BXHYNti+l4Fxjfy/WQ7a+pwMj8ImA5vqxn14N8cQAKSYI7m8k3ZH5EHy LMCrU94T6QFvpxzrRB392MIVR0IRe6mAvdPXpbHdKXkIYNYCtVZBt8TC/kPjuoXK 84PlabtFzJAMZlf4Eg1+2WLTPCJageKSUsOKbJqn65tw5OX1i7W+hdQQnNl/c+CC jR1ZJp+AK5dOi7mR8lV7NPPoI7wkeY8avx4pwFpMtcexxAldfx5sG4Fd3MXSYJAz 4n+qqrXjkTOfYlbuPcG6CPUcFR6siHktns5HyKBrNm8/8pk61/qgtJy/1pMpUia3 kV8aFL+8Mey3soYij+DBeiOIE/5tyASokdngNiwZvw4K40PsW+jzQCiXYeGfhi9C YiTydDpT+pWBLxdKdk2B+wTIl+F6XniREcz5o2+ZyJzf8u3Nf1DI/bqwNk1+tg9t yHcjEHoQsA8YsLkK9JzhE48pLJaLHeGGfJlXlN6lPKhMrvWiEAdjvTLqykyjgv21 wTgZg8BSf2rKApVGVmJRr1H4hf4eLpT5llt3byZ/lnmTfgJ9gLo32wDfPF4xi1U9 nW6fk1mLN1tp3YDaIAnr1qbD0kFXkcjGRmWg68vukVNzaRcdF6Su/Y8jLlm3GQM6 q7hJWH2ZnqiOx+9XPHyb6IDF4AXxbYWu35EiSgqu+5L0W11GlyKbB7plExhPXEn3 HItmzZ/wuAhf3DOb/szBdeOAevcTjNagohAeax3yvnavgQ2925YGhezxgaEoxo+7 U9B7T03XEGTaIx5qn8EMqu1wKy546kSWBhAxq8wHXqQfeA3w88f12l3VVDT9nYoU lEIJyS6kzOASMh0n3AGFv+q1YG4ZGlO88810wFoGXAOJhCQ5jgAWFDrK68F67Lps Cq9lWODdG9dypIn/bGcv0fOQtoj1YmA5ZzvYgzEawftbGruaMW1FjHJcH4Lnosa3 0hDBLBclrgG5ZoMeOtTQpmRkmioTawwGVoX3fmi6eKtLWKJWL9znh6KRLWIPOQb9 /KhHmuxPyVYkpBVc7EDyEXdaZfN57JTCvjBaGZBF3eE826q9mSTOiaTOEUDU/TD4 vCmsDCL9/hVlWf1IjutZ6Iy/BGupHY04lOM18Wvr3Npm2B1TVB49mtZdhbN5bUw+ xevTb5dgAfYnaDds4zIX+h2FNeLp5rDty2x3th+5Hre/TUY/zJ2WaM0yigQ1s9Rn 5uZ6sg/bPe+M6nOzPguHz77pqSVa9PrGsHo65Hgb1w71S1NXOMFaCKQEH6lVl6kv UPKs73P0vUhAJM0njD+8LaXIsaTsILNY2IbOPyMsT6TgpvHkzlO5nR+h7R/o2pao kDmW0vBuHdw15V58JlYD7DR6eqsP0ESdnJRjEiuvnJEWElXXDA6OX89OqiM6cnFX LuN8BrmhdfH8nPXDTPkIGLcCOgBg9anEwAWG0T8ZXKY60nElz+bScXijDpyxnGpL /Wmwr2L0WtYoDyT/X5a8qtWY0B0I72NFeoEkg/A5rHGZ+SfSc79sE+4dm/zVNU37 AurHotydNRXi5tL8/SgWggSD//KPv39pg8lmUi8AIfe/+Vrmqy3fnCUgyMb2iULM mMahyuZb7m4Glsd/VbCprT++3ZLV1K+SzP9GCZymos3byCw4CZV6oTrkyw9lqCf/ O4xXy6Kz+Cl91do8OlIG3PhOmRSvVU1uDQmdX26mbbckLhmk6ZPYltg4/A33rfmB Atc+5XtVRhRteZ3Bk0csryFi1ljX5jdslsYsiOzPzs4FfzY4pcP/75ec92VEb3C0 8lF786UbHHVBu6ZGDSBASbhqlVE5vC1z5b2YJRiNolpr+2KUOsDF8ReXDaogAgyj vcczjik83AV4+Wyc70sc6Y+9kpTxchdhmug8Fdrx7gUwwkqm25m9ia5Z1qIX5RQv RG/pMtdOLbps0XoE1GEZjOC74bIfRffcspiPmUEDKlfqcHdB78Z6sgNAO3TfRzTV elsEB27DNDNC4OAYLqfXnt3WPhfKyE2LHGf3jqX+izVgy2LdqxDd5TB6LEnWpLbC K388OEnmc2HBxhcoPQqcd5zyDGsXXhK1EuNnJMvP2G3Ug26wKd0xo1H8Y5cVMEw1 W6YHmLvsxKAOEScsjqfEMkwMQri1d21fzCwcfqF1v7sA2GwLf1QNC8Vfrle1vU2E dvrMtsnv4XZHSPMlsYZpsNpR5L7T79hTjsHIVHvfOwG+VhzL43G8EIdUVLDrwZzk FtJE4jF0CG/mTcgXPiT9gY5RBDYFjdwEVyz9nCBBopoYmY15tM19g9uZErZ2pm2V 2pJXdsVMTLM/m9kZcShA7I89XtCZyBlvfV2IO/xLeqhKCBhY945k1EDvQGHWyJ+k lC6zPO1F0ihTLE3mhDIV/9WX9V9iKMMcO7b1XRhH9ym6O/bE6XECIvA6V5Zi2Hvy p5knHk4cuGSOuQaAxlUHgDTZVuFQrBeygh2xJRHDD0aDKff8lJrUGmSG6STKd2IR C7YWBdt/nfpSXEqKejOteMxil0XuOxQUTqmIyysvEXsQAluYyEqNd97LleWuKvox 0oUIj3W7AuztDo6NesANMSvMquGE1DCRm+SlVab/LpT05CYpLNhsiPjzRy0vTDhz RS+2i3d7OFWzmmy0A1dVFojqvVe+rVLgF8L9aVEOg/t8l0/SIS1X7c1deYYIlqyg aQ1kjUOrUNaxIXyBgo8drkBt/esoO2aG30Ty5BmNerORyWi97Kf9Kz0FFwXFhjWF wfhV3iVlvfB4yt4xyVOiS23PvRqhQh5FDGUacg7l18VFgQkEPCCXoel9oWQaqB// efrcNeNlOjRs/zf+gkgQ+YGK1Tg4WkcFCrWyJ4CWp1FDy777m4tgCABc+Uf9elwc OnEFDjVMJlIojzQ8ojtsMqDyqka71A02UbR22JV5GGLMrZn7v4a7m3IwYKsYDOMq rdnhETVHpR/MZNpmIl9sJDqp0l9f4nfZ0NXaEGtJWrAi1y8dF7DXw06ejb63m/vP u3CpEPd031clExD9laaCBX8+eIpZ1qA6auswkck/itIasaeXO0B1pyKKfT8/sdBF Yec7SXwaZ7YMdwMeQ/q9epaQCjfC6WhiyZFOspC8iKCv+YG9DnL+IPLoz19Uy+0s 3MIo2eEb4UEoVusA+qPmyo2J54jxjoLg3lopEzZy6INaWmLwfLwuUPmW4ZQVGxTX K48eY7AQVwofe7+bVabVaJt15o0lC4bwwyvUFmVYYiWb6cQPghLlarFhCgQG6PuG cb2pbwNpS37CR3ClVoKoGpRim8UdgQCc/87wfpKGdIkNHL03U14uE/S+pnWKgxE/ hVlfAJmEN2XXaxs8EUnyTyChxvXtR6oVPinbtDKUh+K6jhFrc6j4c2W9LaX6x3VW 8YceU4m1088zXoAQ+JQ9ZjEE3EZSBhNTtD2CUBWxVvMtI1aD4pXoGcftSC48nJcm 2yva7a45CfUthHrGM8K5DqHuxgYPkbvMxpQhoSAABg1XttOEBhr0wLCe6GwjB1MV NJ02CTwcU9NdGCXNwVY8bMQYUNmKWgno59C4nnYKGx89J6ot0oSDeozipqGR6qHH k6TOjTmJck0x5v4UB2bFTqv2d757j1wHX9aWI+TfE5LId9VNlx8eEceJPwLQCN+x sklKuZgzJ2kbopE/t6+AmOOf8Exowa74kJFjSRE/T0muNYRFFGUj5s+Q3IVqPc07 N//rNHGR64YK7rUuIWM225WP9PF4cTIUwReOO9+G/RF/wwlYdPFx7gGE+RZpvRet idaiJdgWpWq2LCfDUr1lY5tpO5t0HIEEfGfCngGiMmxtBHjlQsnTxxiUbU76omrG GflKQZprwhbm0QjLr8DdqAWbl9NHyx7sNvNIBvIKfx4ha1HdIWqv7TIc4F7weR03 zm4S2xk3TvQvF5B5S/wkP2ah1Q4D6s2zb/ltAfEdjZh1OplgUwtdl5qmD+6Gb4Rf MZhmhwPjFlH6tZbzVlbEKCBAVb1f7fBHdITP9J6vuZdfJX2KLgmowSCvF/CV2eFg MkYByXc70gFxGVQYWf+iyokBlopcPrUtaE6lz9HdvdYs8h9E6utNfigBO8HwesOv 3mzx8QdZIxjlFobEryoM8coveomoQHMysGW2T7ZZcSH/qdGsim4wbz0Gh/2a3tZt JLwcuOTnkCy48iRcbmp1yM2v32466e5swRG08jx7WvfksGsyw3s1Bf2aKvXmLTfn shsnvKATqsbt9oYfNRSkr1VfbSHrtX/4QFSWoKA/y++3BCf1fymNwgZRqyWGiJ1L J+eXOgl8hPXQqwR6NAONtq81uJP5hPZ96B4W8A69Onlz+0O4yuHL0DzJXR6Y4WAa +n5TWI7+D5nt5qMpURepwZVFAUblGqnzrt+ObSbZ4439acvFBqn2FqR1l903cMQc LVM+5iO7QFHh3cAp0wh5q500lgTI6E7isKaphnf7lrYfhu/XGLEMmhiIr6vCHIHZ qqF4LZ57amrwoa6vdbU0Mb84aN72gTee/hstZUUD9hS2NN6bRwwdV7Q8kCd7KXh4 ksi+C9ezIkLL5rk/4RJEIVXzAYsk8+EPTLmsOpEld9Fhsz8qVixgMUKGuP7DTME0 Ho+OlDdCc+LjeZ5PutEd+NErTSnKa0/wvr0p3SoNfNIBbLZ3B5vZmc/PJ/lC78dt lEJSoPLROxAjjmVL1PBS/xK2C2HFGl5GUtAJr3MBB4AoZqsm0ZE4FzSgkivPbDgT BC5uErDc8j5XERShES53q+pqsH6iFCWjtxfbQR2ZuaENehgBS9TZ5FC8TqhG+veg f3nyC6l3N1+2Q2vG37MM+u4de+UueB4J5aYaTOnozJefc+B0yqdShxKFjJczuQ+y U3DWcLMFVWcxWLJEc/ofdTjaKArlOsPSXcfK+MkGg7uamfmpwBGAVLAg7XQAczQR xItqTHxdRgyKmVmSQ+W32dPQezdGlwGx6/6xd4tgvkbmvcdiD2Dxd+hERwLxV8ch /6QZsS+2QLwsfCd5PuowAd4smW+t0hh/T2P9nJj9RFqAGJZjxlk2uiWgXnJqYka8 9Wh3i+l5VjU9Vp88jbXsgNDnXv2moTm8PhU7xs7yup2OEOyINZQKmP/IruBdnIxL //mkxVweMNZx/zX8EIU/ZCWJLhTZdD1zQ64qg7OLsbDyoxUgjRqAm3ThGm+/RM2m 4oYmgnEo0992SEooQQdaEaknVqxr3cFBPipBjhtSrvHtTmPdeXZd9LJMzDma1QPN CVE3N3cFlUjmZc6TbNobJs82eepRP5rReUDh774+Dmzjt9zG/f5lwd9AsMak8tSJ QqtordsjIBbD9mullL9VCAoEaICDQuKJyuRZKC6Zl8KmUlbJeRWAZoGYzFh9gQNZ vyowcho94c5OJVoWrkN9orZ3/AilScbdAbbVx1WUge/M1MTIimoyityrctwS1kCj 5mEpsmR0KFkxQa0g/N40ieVaidIKulHKJ7/xXUO8Xev8W/73Foh9iJ4Zzk6WeBr6 TzopDhv9S9C7DjYyPkIa/h/TcoW0ERGleqaXNUdv4FMw/h5elQz8UNTX44LA8e2C 9rMkErSGRCMJFNMfw1tE9i4bDvfaupbAQ2wpASuLnrE1o8NCHAAVhL4NVhVhuTQZ 0+p9l1MOKB4Mm1lJ7IQctspsgdI6tX8mSHtFkzxGVTV2mReDgM+xCiM/oK5Nqi3u bLeC/zCdhj08i1S33/NLgDTqXHiRQ4ixwmySXpJOhC/rbvcpS8n8LFY7vstUAg0P xc+wdjQV2oe7k2nuR/57pExIffynJ7VDbbKwSZ3Dolj78q9WuB7ej+AqXWyJWG8a aB7ayuu2J9r5kVjvR4XhHsJsPA5HOe79TJwfLdUdGvoH95mHx5G3BnuqShPWFvB0 ejs4MN7tUoAMa06Te9AR20s867XbFWlA287mptLRKaWeQF7348vEpGjSQIJOzODS GCqFqaWn4ketWLu/EWfrSFMQMLeOlgIjWroeU2j1pIlPAS275ukJq06Tzs3vKq/u dDZsFg5skLngk8Uf1IBAuqnvFo+oCmK4Hcjdm22Ab4s7s1cLoRZOOVM+il3kM71X pcvOL/MnpEZ7z/Dv+0/EkvOaB6h+f6TXk5pSlW8IwlZ1IyXjXshY8uPo4zr9DuGa yHjCfvQxdHzSjBQ8EFcTarxQngcNynIcOt8EhYcg8sM4l73YoE50GIbJEtQStxO4 sTdfyE+648y3mVXqMmLslw+W5i5CLN2EHvMLiOPcRccRpyfgSzrKOkAh94FjgRyn lENX1UgKrCEAQwSdtKW9KdvO0IoLkRqcsISbji0M5H1hxwY3WImYxnPSkLrIDXnx 1W5qCXTjPqRAyuhLO3L49NcwCbCzRUXbfeATqQNWHrqjgI3rDfXhM2CMEzyndQ2v qRKS6NKd7gCRAUJWwqqZeJhkMjIyEodY8Ni001VxiCAjRIekn7W+p0dxfedQWpVI mDDElCMlXPQ5wcEftCjNDwrExEV/AAqEPgNzARnzQO3zrdTgs3LNTQ+KD/XRSeE+ PlRMnR/buNn+EqXFNmF9iQt/y93Btb6GmMe4gAaAUfLpirozlnLYq4crn+LF4HHU tIi+AFTXrckbd+UH29l1JZLssgC5hNFVyJ5yl1e5XL+G3Ak63UyGeoqTbuNDMCRY L4FCEG38vzg6KZMzKyRbge3jPvI/ant0OwF2R/xNXaTedwHLBw29ObXNrnjzYMcG nAhc/i4QSXZpjoucfurBkyeUeRofRc1m62MZJvURsniWqpg1YQeJPBibww3vHd+O 59UrrcXjga11aRhTV91rGMlgigMeOxn3R4yR16QTRIlnwXUpV4fNddJ4YMNBs4yQ bwvO3LZxAoYInLFBI2RMYaXr+ujFMTpw0INHPqo3TXFsHnNa6HVYdNKbouXv5/2j bANMr6X1ITuTvtQN4tWGbop5qfp90b9pPyw8P0bxSdro4ZHMeSgbiS9q6qZxjVz7 jnOKMUrdbDkbYM+ojXZ18/4WPKtaxf6lTLrh3m5CJ1V8slRJp0Jes74aDQf/OXqo QgqVrI2wnl1klGwn06bhVaymdk0hMkxAfeHBGZIQ4BMMZ3aLuVWjAcBH/HP1tVQ4 IG7MHRnm81yVNgA6yAuZZIPQwxDWVko7rRm/DnsJcpKfL0nZHoF+bJ6q4Rd6Dey1 S96L4PDmXseFkVZOH/7dNWyKuvSA/MmthkN14lWJiYJebaXb7oZG3XDC70o7bG6Y mtGOrOwVthFereg1Ii98ZA4nKgqeu2paMju/t03hQXHY5iqyV9ax0A3B0rdivz4U VbqCcO7pGNb/Ki3gGc3hfVw9YXnR7E+tra19eE7UM7o+YlunKF1Q5dJaLKY1z3L9 3UAJmXG/sZcLqrDn9zHfb/YxqbyIkM7VIU2kKztWCCNiNKgLQsIoVzK4sbS2LVDI grmvZg+Q7EkwxZ1FXeBGJmsiyjKYPU3PI8ZBU1MXjwTjtnQRuBSxh+Ok9glPeE+1 rUDdlVoogUGgPAvLV3BM43E/Q5VE+X04KvPNKINvvS1nZpGKyyy1MayOfstc7Hsw W/RgllTEd7VW5jgZKg7YyA8r8cUjMqE7zewrq6MtkoFk6ZVslWxfoADBW3ivwdwe I4XwNboOgBx77qxf95aHRRdqWZa0JF8zvK5BH6EpBI29hlJU4leax696ACA7QIIM Rpc+ulkvHsNxsUlrUut9AXoob0MqDJRmZvU4gSVivHjvKLEIlymJw4pLbMWhcrNa v94TExP21Fy/zYcWiZT2nCX6qZVXTcUcQGIrBTWDbR8bxKll4FNo/2zmelyFmeXt iH+Zp2EwFAUELsrxx9plNd5WceyU9VnZoeucNFd2QFl7lV9KL8AlQaaMdsYOt27m 8j7iNBID4HtCYM0xLwE/5uqVQPxX6qzPPZc66MSRIi8ZHZPFvVilFVzFyZSrq5Lo ojQQmAycQGOzx7dwx7vi9SeTrBRY2PK3WVurcLiRxM+2u9vjlxigwimpnK3VU1dh GDoPghB3O34bfiV5GndcnPDLJxsSGWz2z2WiyCFgCkVp3shHUN5c2PLWDIOf/Ejz LzNJXFKjO6/6ZGpMmGf6bZCa9MBnvXMNic9/k0lmtbgj8SS+2//gko1EDa/Gpaqo J2xgEuHLvp9KQABWt9VRI+tNUJQCS/Jq10ZiT1TzhczyJEqbtVDOo0l5A5sMV0PO HszFNxw2BmuM8RYGgAe5pkrdzVdtB8TLmhys7P+xRXNXnsUb+878kt2EyiXjMl1g oFeAlj2afj/GgelJG0G0FXm5WPDhbthHOO1hW9RP5WCTybjUTAS+GbikVwxa7bZE LHrROUOInY0ntR9lRNjpVCMdajCsMiqT/G0C/ApzeW6ErLMFIDdVdGSdnz/WDi5C xQTIS1FOAdefQ0CohE0yOOvjKTAGzht+g4gYiSa/mOnvXcCVM8t39thglZhq4+6G oWpOrXwByd8OA5f1aQMqSgoySJOGg8a3X7NR9bEDbF7/6QNJE5FvxwXvA8zcabUo OGxXen85Gkq1M/VnlJ3RGM8vA5UizsdPESYUCVH1eKg8ROlrQOr3ISj5kaNL42fv OSROmeHvZrHtvGn6hLTNPtWcm1hGSJS/Q5CEZe0/4ActkorF9kuoHCSG3UegX/lg 5mD9aMTHUhD5VooS6OdyakqD+6LptNqQPL0IQALsS9Ls+8KUBxIi9cOe0xIusAQl OmyJcUJNr+Oq+Ypr6sWvelbWiymgGDN4gHm6BvzyXv5ihnvnmkIQ16WkAsIChzZx cZUl/bz9bDsSyJ4FyzSRoWuURTz9la3Bo2x5ufLChv2i9+X9WO6Y3nFc4KOBY4hD WeFt0ZUiY30SyTiWqrPHP8Lnto9JTBOZcIIHOqPgy4L+685Ou6xwO0cUzicIza5M TbMBOPfnVSgPSCFImGSjAaahWEvl360B8qjx8i1vgkUOxjqfFMnjZUF5b9lBDS72 JK0esvGRUQqyC4uQHbTi8EOJYaOnCn+0lXPzLNpN171DHfEg/X6iiD0zTjMX/7Sk PPm2z3zH7yJmeDnh5e/gvgWaPuTVaN+LdUYv/ijqfS3bx6yF1VpNr+esTI23S+o2 1HqlCfhZUnVmn6r0J1L8tuVeZaMni1qOFs4KacGA9UwAZeGVdOmK0rFIqUXKDehq 7BAmDZV3hnQD2TQzgfDfXpegRECX/wZZVrcg896NltY1r6AVm9jcKLVCNalyoCwe Rp6anjx8qsUxnXXYN2rhl/l2Y9D23QZ2OM0cpvb9QPJGGgGeSaQu6p8N4hRUroje UlL8vBLle6tcvVoiRCvPCja857vnthqUppv9bzM9SAyMz4RXcYgQvFErExOI0eyT II67WbrY2j9ul7h4fZjNKCND7o2aENbylK8CU1wlwEBYC8BPgkTqi+dErP+VrWte QAhjomMkOVKKzG8JaoPJoVYBmMkMTCPsFFuTjtgvg2+a+DOiYbI8yTDT4+Mi/Woi gZUcE0HUosPkkJ2ZU3zDXdwPIr4DI7TlrnZPF99Es68+NXD6lQgc6U2fjnBfKMFw MfaTfrg3ykA8mBwqZ6hQdIoqha14uje9Ses2axrEF1FY+pU7JEKDozmo3HzgTfYA UFoHCu4Zbeu1IiHHJuVSRrwVy0BsY0nrq0Tjq2uYSbXyR9KylHCxztpzku5Gncy2 Cl0sBUqv1uNWIt1v6yHdupzRM/fIZ3F95nPIomgM+uHmdpHaXyizM4D3doRGzNPH fOm6jWgKCllI8JHYJ1DUBUokYv8TYJLf0gOSaZLZmpEh88iXfBP52ZBlUIokeUN0 aZlxSqawVMteeqcjCs7TNySBDzfTCZREHr77tnBz4+jINXi06mh+/Hz+LRA3YNRD Do5hyzvvFBg49rY0JzZPTC9J4bi+w1MPmmdz0OgQGG1Wiu+4LrSuBUOgiA0V+FyY /Md51ShFwRg/5zgcWS4hK1Eg4kKTKLF6Wjdu88PCKx2+gu9dYjXgdRuzZ6LUqqS2 It/j3VptrXm8NwQFGM27HnqGwK5u+Ym3qLJ0FE4vWNbbxGlZtX3NS8SqZSqVfbqq TwIz4lXU3ipZJ5b42IanZ2nfWqKpdYn99C7yK6AbwA+qZf5zmy436dH+Rvo6PC6W +9MQcrrNgvq0tiAJvA39dzb77bhRjAKzL5cDiA40hPlcZs5+Q5g9XpYtKsSfzu7s FCFRnhXmhiBXoUqf5jsYNrm5dvtl27wPTaKvVQQ6SsVtXDZSWEbdAj8Xfeq7kev+ jtvaOUmFRMaFevzu5t2uuLYzH7zufMB6p13chVUH9yRnWBzdha/Sqf78k57UQnZg EJwvXcDJ+uFbnd2sibgoASzDNljSfERK5RfD7Re3n5dK6W0PXzic+7ljGoSLedtd 6DD11IzD6WjBlE/9Aiof6IUDdzuo2VZ0XtufBxmYHXUx9LF3/dgGOr8hvxz/wpMx nPnr9QDgF9svoCvYq1toUbtWgKd1LjXeVoprAhHXwbn4Z8hj7+/LpPYwR1X3u1ik wL916n0bOkLgWgqGjqsrgskk5Lk6ZzyrESZ0xd6/+dSrf2YxLivF8O4eCLfNxB3d =3akT -----END PGP MESSAGE----- ' alpha_seckey='-----BEGIN PGP PRIVATE KEY BLOCK----- Version: GnuPG v1.4.8 (GNU/Linux) lQHhBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU /RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p +SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5 cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS 09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+ lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5av4CAwKcF1Qep+Pf ssOqtJhr+klruUBf55onBJi4vkk0gK3m32p/05YB2bbMURGz8R4JxUZfUxjdDk73 LaNYRbQpQWxwaGEgVGVzdCAoZGVtbyBrZXkpIDxhbHBoYUBleGFtcGxlLm5ldD6I VQQTEQIAFQUCNuOOngMLCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NDl4AJ4rouHB +LpCkNi5C59jHEa1kbANzACgmddtrNSj1yPyTCwUwRghPUomECS0EEFsaWNlIChk ZW1vIGtleSmIVQQTEQIAFQUCNuO2qwMLCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3 NCeMAJ9MeUVrago5Jc6PdwdeN5OMwby37QCghW65cZTQlD1bBlIq/QM8bz9AN4G0 J0FsZmEgVGVzdCAoZGVtbyBrZXkpIDxhbGZhQGV4YW1wbGUubmV0PohVBBMRAgAV BQI247hYAwsKAwMVAwIDFgIBAheAAAoJEC1yfMdoaXc0t8IAoJPwa6j+Vm5Vi3Nv uo8JZri4PJ/DAJ9dqbmaJdB8FdJnHfGh1rXK3y/Jcp0BuAQ2448PEAQAnI3XH1f0 uyN9fZnw72zsHMw706g7EW29nD4UDQG4OzRZViSrUa5n39eI7QrfTO+1meVvs0y8 F/PvFst5jH68rPLnGSrXz4sTl1T4cop1FBkquvCAKwPLy0lE7jjtCyItOSwIOo8x oTfY4JEEXmcqsbm+KHv9yYSF/YK4Cf7bIzcAAwcD/Rnl5jKxoucDA96pD2829TKs LFQSau+Xiy8bvOSSDdlyABsOkNBSaeKO3eAQEKgDM7dzjVNTnAlpQ0EQ8Y9Z8pxO WYEQYlaMrnRBC4DZ2IadzEhLlIOz5BVp/jfhrr8oVVBwKZXsrz9PZLz+e4Yn+siU Uvlei9boD9L2ZgSOHakP/gIDApwXVB6n49+yw6e5k2VJBGTFDkQbxpgi4oslePpT 7Tc2qjAke4zO8JHkgKSokEgnMpMz412q9otFX/3qC5MpPG5P8f4r00Kfy9Am/thk ri01WTIUqF8L/VZXJxLKVoRAabSXudG0eavfah14fN5/+Bw5i8vSHhc/xmQEKTya 2X8Nt1F5zMrE1LAGVVCL9i/DUygnJYOZzAd1Ct0RJ4kFj7lOBICF2IWWiEYEGBEC AAYFAjbjjw8ACgkQLXJ8x2hpdzQgqQCgn81AaW8W/lyVwMh/UBeMuVMUb24An2uz wg7Md81a5RI3F2FG8747t9gX =VM1e -----END PGP PRIVATE KEY BLOCK----- ' # Bug 1179 solved 2010-05-12: # It occured for messages of a multiple of the iobuf block size where # the last line had no pad character. Due to premature popping of the # armor filter gpg swalled the CRC line and passed the '-----END...' # line on to the decryption layer. # Can only perform this test if we have Twofish. We also can't use it # if we have SELinux support, because that will fail on secret key # import. if test x$enable_selinux_hacks = xyes ; then echo "SELinux support is enabled: skipping secret key import check" else if $GPG --with-colons --list-config ciphername | grep TWOFISH > /dev/null 2>/dev/null ; then i=alpha_seckey info "importing: $i" eval "(IFS=; echo \"\$$i\")" >x $GPG --import x || true i=nopad_armored_msg info "checking: $i" eval "(IFS=; echo \"\$$i\")" >x if echo "abc" | $GPG --passphrase-fd 0 -o - x > /dev/null ; then : else error "bug#1179 is back in town" fi fi fi gnupg-1.4.20/checks/Makefile.am0000644000175000017500000001106612635262326013146 00000000000000# Copyright (C) 1998, 1999, 2000, 2001, 2003 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 3 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, see . # Process this file with automake to create Makefile.in GPG_IMPORT = ../g10/gpg --homedir . --quiet --yes --no-permission-warning --import TESTS = version.test mds.test \ decrypt.test decrypt-dsa.test \ sigs.test sigs-dsa.test \ encrypt.test encrypt-dsa.test \ seat.test clearsig.test encryptp.test detach.test \ armsigs.test armencrypt.test armencryptp.test \ signencrypt.test signencrypt-dsa.test \ armsignencrypt.test armdetach.test \ armdetachm.test detachm.test genkey1024.test \ conventional.test conventional-mdc.test \ multisig.test verify.test armor.test # Force sequential run of tests as in the good old times mds.log: version.log decrypt.log: mds.log decrypt-dsa.log: decrypt.log sigs.log: decrypt-dsa.log sigs-dsa.log: sigs.log encrypt.log: sigs-dsa.log encrypt-dsa.log: encrypt.log seat.log: encrypt-dsa.log clearsig.log: seat.log encryptp.log: clearsig.log detach.log: encryptp.log armsigs.log: detach.log armencrypt.log: armsigs.log armencryptp.log: armencrypt.log signencrypt.log: armencryptp.log signencrypt-dsa.log: signencrypt.log armsignencrypt.log: signencrypt-dsa.log armdetach.log: armsignencrypt.log armdetachm.log: armdetach.log detachm.log: armdetachm.log genkey1024.log: detachm.log conventional.log: genkey1024.log conventional-mdc.log: conventional.log multisig.log: conventional-mdc.log verify.log: multisig.log armor.log: verify.log TEST_FILES = pubring.asc secring.asc plain-1o.asc plain-2o.asc plain-3o.asc \ plain-1.asc plain-2.asc plain-3.asc plain-1-pgp.asc \ pubring.pkr.asc secring.skr.asc secdemo.asc pubdemo.asc options DATA_FILES = data-500 data-9000 data-32000 data-80000 plain-large EXTRA_DIST = defs.inc $(TESTS) $(TEST_FILES) \ mkdemodirs signdemokey CLEANFILES = defs-config.inc x y yy z out err $(DATA_FILES) \ plain-1 plain-2 plain-3 trustdb.gpg *.lock .\#lk* \ *.test.log gpg_dearmor gpg.conf \ pubring.gpg secring.gpg pubring.pkr secring.skr DISTCLEANFILES = pubring.gpg~ random_seed all-local: defs-config.inc distclean-local: $(srcdir)/mkdemodirs --clean defs-config.inc: ./pubring.gpg ./secring.gpg ./plain-1 ./plain-2 ./plain-3 \ ./pubring.pkr ./secring.skr ./gpg_dearmor $(DATA_FILES) $(GPG_IMPORT) $(srcdir)/pubdemo.asc echo '# Do not edit - created by the Makefile. -*- sh -*-' \ > defs-config.inc if ENABLE_SELINUX_HACKS echo enable_selinux_hacks=yes >> defs-config.inc else echo enable_selinux_hacks=no >> defs-config.inc endif ./gpg_dearmor: echo '#!/bin/sh' >./gpg_dearmor echo "../g10/gpg --no-options --no-greeting \ --no-secmem-warning --batch --dearmor" >>./gpg_dearmor chmod 755 ./gpg_dearmor ./pubring.gpg: $(srcdir)/pubring.asc $(srcdir)/pubdemo.asc ./gpg_dearmor ./gpg_dearmor > ./pubring.gpg < $(srcdir)/pubring.asc ./secring.gpg: $(srcdir)/secring.asc ./gpg_dearmor ./gpg_dearmor > ./secring.gpg < $(srcdir)/secring.asc ./pubring.pkr: $(srcdir)/pubring.pkr.asc ./gpg_dearmor ./gpg_dearmor > ./pubring.pkr < $(srcdir)/pubring.pkr.asc ./secring.skr: $(srcdir)/secring.skr.asc ./gpg_dearmor ./gpg_dearmor > ./secring.skr < $(srcdir)/secring.skr.asc ./plain-1: $(srcdir)/plain-1o.asc ./gpg_dearmor ./gpg_dearmor > ./plain-1 < $(srcdir)/plain-1o.asc ./plain-2: $(srcdir)/plain-2o.asc ./gpg_dearmor ./gpg_dearmor > ./plain-2 < $(srcdir)/plain-2o.asc ./plain-3: $(srcdir)/plain-3o.asc ./gpg_dearmor ./gpg_dearmor > ./plain-3 < $(srcdir)/plain-3o.asc data-500: ../tools/mk-tdata 500 >data-500 data-9000: ../tools/mk-tdata 9000 >data-9000 data-32000: ../tools/mk-tdata 32000 >data-32000 data-80000: ../tools/mk-tdata 80000 >data-80000 plain-large: cat $(srcdir)/../doc/HACKING \ $(srcdir)/../doc/DETAILS \ $(srcdir)/../doc/FAQ >plain-large gnupg-1.4.20/checks/version.test0000755000175000017500000000017312635262326013500 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 # print the GPG version $GPG --version #fixme: check that the output is correct gnupg-1.4.20/checks/Makefile.in0000644000175000017500000005465312635457153013174 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 1998, 1999, 2000, 2001, 2003 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 3 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, see . # Process this file with automake to create Makefile.in VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = checks DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ GPG_IMPORT = ../g10/gpg --homedir . --quiet --yes --no-permission-warning --import TESTS = version.test mds.test \ decrypt.test decrypt-dsa.test \ sigs.test sigs-dsa.test \ encrypt.test encrypt-dsa.test \ seat.test clearsig.test encryptp.test detach.test \ armsigs.test armencrypt.test armencryptp.test \ signencrypt.test signencrypt-dsa.test \ armsignencrypt.test armdetach.test \ armdetachm.test detachm.test genkey1024.test \ conventional.test conventional-mdc.test \ multisig.test verify.test armor.test TEST_FILES = pubring.asc secring.asc plain-1o.asc plain-2o.asc plain-3o.asc \ plain-1.asc plain-2.asc plain-3.asc plain-1-pgp.asc \ pubring.pkr.asc secring.skr.asc secdemo.asc pubdemo.asc options DATA_FILES = data-500 data-9000 data-32000 data-80000 plain-large EXTRA_DIST = defs.inc $(TESTS) $(TEST_FILES) \ mkdemodirs signdemokey CLEANFILES = defs-config.inc x y yy z out err $(DATA_FILES) \ plain-1 plain-2 plain-3 trustdb.gpg *.lock .\#lk* \ *.test.log gpg_dearmor gpg.conf \ pubring.gpg secring.gpg pubring.pkr secring.skr DISTCLEANFILES = pubring.gpg~ random_seed all: all-am .SUFFIXES: $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu checks/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu checks/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags TAGS: ctags CTAGS: cscope cscopelist: check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst $(AM_TESTS_FD_REDIRECT); then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ col="$$grn"; \ else \ col="$$red"; \ fi; \ echo "$${col}$$dashes$${std}"; \ echo "$${col}$$banner$${std}"; \ test -z "$$skipped" || echo "$${col}$$skipped$${std}"; \ test -z "$$report" || echo "$${col}$$report$${std}"; \ echo "$${col}$$dashes$${std}"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am all-local check check-TESTS check-am clean \ clean-generic cscopelist-am ctags-am distclean \ distclean-generic distclean-local distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am # Force sequential run of tests as in the good old times mds.log: version.log decrypt.log: mds.log decrypt-dsa.log: decrypt.log sigs.log: decrypt-dsa.log sigs-dsa.log: sigs.log encrypt.log: sigs-dsa.log encrypt-dsa.log: encrypt.log seat.log: encrypt-dsa.log clearsig.log: seat.log encryptp.log: clearsig.log detach.log: encryptp.log armsigs.log: detach.log armencrypt.log: armsigs.log armencryptp.log: armencrypt.log signencrypt.log: armencryptp.log signencrypt-dsa.log: signencrypt.log armsignencrypt.log: signencrypt-dsa.log armdetach.log: armsignencrypt.log armdetachm.log: armdetach.log detachm.log: armdetachm.log genkey1024.log: detachm.log conventional.log: genkey1024.log conventional-mdc.log: conventional.log multisig.log: conventional-mdc.log verify.log: multisig.log armor.log: verify.log all-local: defs-config.inc distclean-local: $(srcdir)/mkdemodirs --clean defs-config.inc: ./pubring.gpg ./secring.gpg ./plain-1 ./plain-2 ./plain-3 \ ./pubring.pkr ./secring.skr ./gpg_dearmor $(DATA_FILES) $(GPG_IMPORT) $(srcdir)/pubdemo.asc echo '# Do not edit - created by the Makefile. -*- sh -*-' \ > defs-config.inc @ENABLE_SELINUX_HACKS_TRUE@ echo enable_selinux_hacks=yes >> defs-config.inc @ENABLE_SELINUX_HACKS_FALSE@ echo enable_selinux_hacks=no >> defs-config.inc ./gpg_dearmor: echo '#!/bin/sh' >./gpg_dearmor echo "../g10/gpg --no-options --no-greeting \ --no-secmem-warning --batch --dearmor" >>./gpg_dearmor chmod 755 ./gpg_dearmor ./pubring.gpg: $(srcdir)/pubring.asc $(srcdir)/pubdemo.asc ./gpg_dearmor ./gpg_dearmor > ./pubring.gpg < $(srcdir)/pubring.asc ./secring.gpg: $(srcdir)/secring.asc ./gpg_dearmor ./gpg_dearmor > ./secring.gpg < $(srcdir)/secring.asc ./pubring.pkr: $(srcdir)/pubring.pkr.asc ./gpg_dearmor ./gpg_dearmor > ./pubring.pkr < $(srcdir)/pubring.pkr.asc ./secring.skr: $(srcdir)/secring.skr.asc ./gpg_dearmor ./gpg_dearmor > ./secring.skr < $(srcdir)/secring.skr.asc ./plain-1: $(srcdir)/plain-1o.asc ./gpg_dearmor ./gpg_dearmor > ./plain-1 < $(srcdir)/plain-1o.asc ./plain-2: $(srcdir)/plain-2o.asc ./gpg_dearmor ./gpg_dearmor > ./plain-2 < $(srcdir)/plain-2o.asc ./plain-3: $(srcdir)/plain-3o.asc ./gpg_dearmor ./gpg_dearmor > ./plain-3 < $(srcdir)/plain-3o.asc data-500: ../tools/mk-tdata 500 >data-500 data-9000: ../tools/mk-tdata 9000 >data-9000 data-32000: ../tools/mk-tdata 32000 >data-32000 data-80000: ../tools/mk-tdata 80000 >data-80000 plain-large: cat $(srcdir)/../doc/HACKING \ $(srcdir)/../doc/DETAILS \ $(srcdir)/../doc/FAQ >plain-large # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/checks/secdemo.asc0000644000175000017500000013331112635262326013217 0000000000000026 demo keys (passphrase is "abc"): sec 1024D/68697734 1999-03-08 Alpha Test (demo key) uid Alice (demo key) uid Alfa Test (demo key) ssb 1024g/46A871F8 1999-03-08 sec 1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) ssb 1024g/BC43DA60 1999-03-08 sec 1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) uid Eve (demo key) uid Echelon (demo key) ssb 1024g/7272144D 1999-03-08 sec 1024D/8FC282E6 1999-03-08 Golf Test (demo key) ssb 1024g/9DCAD354 1999-03-08 sec 1024D/04259677 1999-03-08 India Test (demo key) ssb 1024g/61F76C73 1999-03-08 sec 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) ssb 1024g/9AF64D02 1999-03-08 sec 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) uid Bob (demo key) ssb 1024g/E29BA37F 1999-03-08 sec 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) ssb 1024g/B0C45424 1999-03-08 sec 1024D/7372E243 1999-03-08 Foxtrot Test (demo key) ssb 1024g/EE45198E 1999-03-08 sec 1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) ssb 1024g/D622AD0A 1999-03-08 sec 1024D/D2699313 1999-03-08 Juliet Test (demo key) ssb 1024g/35F8F136 1999-03-08 sec 1024D/B79103F8 1999-03-08 Lima Test (demo key) ssb 1024g/FE56350C 1999-03-08 sec 1024D/BE5CF886 1999-03-08 Mike Test (demo key) uid Mallory (demo key) ssb 1024g/4F31EAE8 1999-03-08 sec 1024D/30CEC684 1999-03-08 November Test (demo key) ssb 1024g/8B70E472 1999-03-08 sec 1024D/6D9732AC 1999-03-08 Oscar Test (demo key) ssb 1024g/2681619F 1999-03-08 sec 1024D/3FF13206 1999-03-08 Papa test (demo key) ssb 1024g/63330D9C 1999-03-08 sec 1024D/3C661C84 1999-03-08 Quebec Test (demo key) ssb 1024g/A029ACF4 1999-03-08 sec 1024D/777FBED3 1999-03-08 Romeo Test (demo key) ssb 1024g/11D102EA 1999-03-08 sec 1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) ssb 1024g/0F1B50B4 1999-03-08 sec 1024D/85A81F38 1999-03-08 Tango Test (demo key) ssb 1024g/101C0402 1999-03-08 sec 1024D/653244D6 1999-03-08 Uniform Test (demo key) ssb 1024g/5522BDB9 1999-03-08 sec 1024D/61F04784 1999-03-08 Victor Test (demo key) ssb 1024g/07287134 1999-03-08 sec 1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) ssb 1024g/FD6E27F6 1999-03-08 sec 1024D/567FB34A 1999-03-08 XRay Test (demo key) ssb 1024g/41E408BE 1999-03-08 sec 1024D/4B11B25F 1999-03-08 Yankee Test (demo key) ssb 1024g/F7B080AD 1999-03-08 sec 1024D/54ACD246 1999-03-08 Zulu Test (demo key) ssb 1024g/A172C881 1999-03-08 -----BEGIN PGP PRIVATE KEY BLOCK----- Version: GnuPG v0.9.3 (GNU/Linux) Comment: For info see http://www.gnupg.org lQHOBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU /RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p +SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5 cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS 09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+ lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5av8EAQNuYiCeVh4Q pF3i4v6LDa82cNBI92zOHLJAu1nbeJ6bl86f/lrm6DuH/SYjOkRTQV9mYWN0b3I6 AACvUW2sEdiVCzqYu9QdI92LJQd2HLYgKf0mIzpEU0FfZmFjdG9yOgAAr3LeP6n0 SUaQqSNKJPx1Wes66+3KH0n9JiM6RFNBX2ZhY3RvcjoAAK9/tmRCQsDGIXRnEJZM rvRjIUE4qvtztClBbHBoYSBUZXN0IChkZW1vIGtleSkgPGFscGhhQGV4YW1wbGUu bmV0PohVBBMRAgAVBQI2446eAwsKAwMVAwIDFgIBAheAAAoJEC1yfMdoaXc0OXgA niui4cH4ukKQ2LkLn2McRrWRsA3MAKCZ122s1KPXI/JMLBTBGCE9SiYQJLQQQWxp Y2UgKGRlbW8ga2V5KYhVBBMRAgAVBQI247arAwsKAwMVAwIDFgIBAheAAAoJEC1y fMdoaXc0J4wAn0x5RWtqCjklzo93B143k4zBvLftAKCFbrlxlNCUPVsGUir9Azxv P0A3gbQnQWxmYSBUZXN0IChkZW1vIGtleSkgPGFsZmFAZXhhbXBsZS5uZXQ+iFUE ExECABUFAjbjuFgDCwoDAxUDAgMWAgECF4AACgkQLXJ8x2hpdzS3wgCgk/BrqP5W blWLc2+6jwlmuLg8n8MAn12puZol0HwV0mcd8aHWtcrfL8lynQGlBDbjjw8QBACc jdcfV/S7I319mfDvbOwczDvTqDsRbb2cPhQNAbg7NFlWJKtRrmff14jtCt9M77WZ 5W+zTLwX8+8Wy3mMfrys8ucZKtfPixOXVPhyinUUGSq68IArA8vLSUTuOO0LIi05 LAg6jzGhN9jgkQReZyqxub4oe/3JhIX9grgJ/tsjNwADBwP9GeXmMrGi5wMD3qkP bzb1MqwsVBJq75eLLxu85JIN2XIAGw6Q0FJp4o7d4BAQqAMzt3ONU1OcCWlDQRDx j1nynE5ZgRBiVoyudEELgNnYhp3MSEuUg7PkFWn+N+GuvyhVUHApleyvP09kvP57 hif6yJRS+V6L1ugP0vZmBI4dqQ//BAEDbmIgnlYeEKRd4uL+iw2vNnOO9Y3cRSEx yy8unuzNvx5GFG6KNtxoFCDzMMzUa0EDH1x/QJA3CgqMpS282nLdk/5O+AphiEVe Gv8+c6pL/t7falIfSgKZ0j2nvCKH12SobwiNflTGJB+jLnnesjqYJD7h0SVLjToP /vtKPYlXOU1ZpKzDwP5YcQQuRhF9Tj8SUxScIIhGBBgRAgAGBQI2448PAAoJEC1y fMdoaXc0IKkAoJ/NQGlvFv5clcDIf1AXjLlTFG9uAJ9rs8IOzHfNWuUSNxdhRvO+ O7fYF5UBzgQ245BnEQQAvwwkLp4Dtoie4/fvandnK4wVPCvgJkIbNuyQZCarQGwv 8RapBwbANT4vGW+ky2vzgptj21xYjOcdNMIhJ1Sjc7hjs1PLhwepMFrS4/Ple1Tl jpEgxLZ5UxertMvSTr7OxsA76jjOQt0B+y2vs5zXgLtedux4+pdFxkgM8r6fjZMA oJ5LVNdVRaSkiHaKZWQWsjfTs0/LA/wMHP/PdH4kjFmDRqOPp+iB8YYwQTPZS/gw HtUbQhLcFEljaxrCMRZw0ZDMbzKWk+BrrBvgz4Wk3XawwUshYgi8SgwWIDG0jusE PYOs1hBIdWTEzFVP2pK/NQzhAqJV5/390OLEY8SN4bts/LY1XsADzU7lhE0Oohx6 FanaZCuGgAQAn2zK53yuk7o8UrPdTHygVn2McsPYYzOvlVfHCSXQ14oXjCs1nK1X nMIGGM7pJjYpzv/wUZkHLNcHX4uVHXxyzRQ4oMPekncmaR8fu/YIQ9zag5s2GpKE SKAynGQCKwI4H5eYn+ryIgOHNS44UnXFUwbEsonP5pJNNRIM7VimNGn/BAEDIkls jKh5E70pJ77zKAq/uP+EnBQq0tCcyqQgQiG1n28iMQy45N5zv/0mIzpEU0FfZmFj dG9yOgAAr2cvUYCyL3NVUcfw3gGkK+A8ZyTfoBH9JiM6RFNBX2ZhY3RvcjoAAK9H YClNyCyakk4UDrW4qn8YgsdvZcxN/SYjOkRTQV9mYWN0b3I6AACvZ5Ed3zcwNvmF Ptb2h6OhMGgwrNan67QtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVA ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K 8xr9q2w+RACghpiwPnn7F3HJsm9VXM8SwBjWThIAnjHZulQw9Tee9XDT5STui+ZG +WN3nQGlBDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8 FmfdIXnaNLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//E GIZK0zTgW13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwAD BwP/R009s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqksw V17bJG81czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD8 1VP+6zBhhTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2Gb/BAEDIklsjKh5E70p J77zKAq/uPsbfaq2h50JWrb/wQiufxaUrYRvo5FjMBLnoUE+L/yG/Hp2ZRZuA5Ez BpZ3ON5LaFadahL98oQe/W3IXFZwxyYfGCtVrV16zx6cFTJQK/iIqp3TNp/fA6TR E3syS1FQZIZMiFLvgSy4Tsu4vAadP290Tc62LP9ivC3PiIxt3aqW2l/NLohGBBgR AgAGBQI245CCAAoJEEE/SvMa/atsta0An3ZMmv9EVWVwEvf/Rwf7nbFsgGhuAJ0b P+lAOCRSYziWSIDf+BJ9F19H3ZUBzgQ245HNEQQAis7GTDqtEM6luop6eWsxFi9+ qhUVp9N6S+xlbwzQZVA4FjCqf1VR9JX8fwjLecmxT5xThQVcRqgeFVaCyky2Nge/ FcFMPZQeaP5jv5GRWc5PvH9Sw8pvGOTB56V4ZeR4cQLDBm5CF5tKu1BCWWq2MLHf ct7TXe6QCzZKcjzdw8sAoN9VvrKN+EbQC+THzdWaUWpdcfWnBACFWEyLVPTpI1jN soCZ00F8Fau/2baXk8mdROlJZS6bq54ksfOQQzReBWce35h0W7NeBRp+yeoSf7Y3 i0jTO4mrOiL/0NCcS8qKNnGKG1irdLes3pQhDZpcUe2G9W3FnGhxl6W5hpYc9550 mUj2H3I5tmfSYsVcVjpNSIdBizxE2AP/SI1t6q7LHMQp0h3MPQ2z7daMhUGViXnV l2+rKjb5T7bvSFdV0iyyuyoqvUPBGWwJFLAxj6esHRlQ6W8togHuoJCR7cL2bK79 8mgYOExk5gBexq1VHQQZN1edK4LGo2ESKrCVtkYwBzAU76hYFKAbKMU8dMxI7DRd LjZ3vdQ3FNr/BAED+xylaHWcBOTZBCd4ui6NIsLkQLv5uFW66tWYKvc2APAe8oKx h5YMp/0mIzpEU0FfZmFjdG9yOgAAr0tuCtmJhCp9PoSOTFA2ssaMB7jl+5H9JiM6 RFNBX2ZhY3RvcjoAAK9Ilc3l2agIgR5iIQnvOgyYUe4duz+d/SYjOkRTQV9mYWN0 b3I6AACvfQ0dS/51Esd9E/rbG/m1C3qIenSthbQnRWNobyBUZXN0IChkZW1vIGtl eSkgPGVjaG9AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpH8DCwoDAxUDAgMWAgEC F4AACgkQMYwfrvrvbRtnAwCgs2haIgJu/UEpmCEnojO1zCoaBwwAmgPAlNY/PttA u6zYqTh2M9yn1DIXtA5FdmUgKGRlbW8ga2V5KYhVBBMRAgAVBQI247gAAwsKAwMV AwIDFgIBAheAAAoJEDGMH676720bIN0AnjjH9IN8523PCAYk6yD1IFM/ad1qAKCe nkWU2ZO8/oU8seCQ3HkXkG2JRrQSRWNoZWxvbiAoZGVtbyBrZXkpiFUEExECABUF AjbjuB8DCwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRtepgCeOpUG5rVkWVJXULae GZzqbT+2SbUAn3HmDGXzAJ6lCiYh5NrTIb8A7wIdnQGlBDbjkf8QBAC0pe0mjRH/ JmKL3mubSTRMKGcd77+l8psl4GtcA6iqNj3g650Q2xxgW+Qb1iL9SeiIJP8KuEfj 6vfPVKZHKkRAfsjnpbhN8zz7WQa2y8kkmqojHoGIh5wAD3NE6ox+1D2WvnySmU1J OuAQlEDfRC5C9hSrQBkO0TUCWL2wquDv1wADBQQAl3TuGt2SCuYSXo4R2dNZpB2u kqqHOj7nnTQu7ZVoi1OtgZYxor/w783GzLJ75PfdQMSd6T+Gbyq+QgpaiBvlmWtc 5rcF3ZgnxiW9n2zUlQ+M6denubJT6/Aqfn7yL9v0sr8K7kTrPqAM0lb6DAMwBkpN 8o+Z0+aIpG5/jOtnwuT/BAED+xylaHWcBOTZBCd4ui6NIsGHGb+xn5M8RwQblStX KFu07GugiONqnqNgB+sywt1otn4dFUWo/4FzJzvEtBQ6EjchWAVKoVYj5H7ExOP4 BKNDNb9JfOzu9ItHk8TvQ5X7HoV/r9eM0i6MRzNOlvchB1P3Hjw4a2Pj6TwpEBGZ uuYqe14UAGPlUjHSn+LuhtGpE06zuYhGBBgRAgAGBQI245H/AAoJEDGMH676720b j5AAn2T9b/n1T2CTa+Q5oGKLAsBIcgeGAJ9kC4ETWfY8itary77dKmyVJetgl5UB zgQ245LREQQAubUOd0B7cFzJHF5vo5NwiMZ1JXPjyNqL2OWE/XfaeJiB55oMmVEP mK1JF69wU7ZBpo1l4PEIWcP7WRMqvBEFl+8LnelRkSW95kwFr3D8TRnarZy3kfiB F1t33dnkVTaZYxCDKOBdZ/ZiRvLa6gZ/KHhITfzaS7h36G2MbAlGlj8AoKQPFsEP jByKYdx72m5/2Ju/4d4jA/oCNAKaJH7N8Y3HLis1ShhpytJP1yC9GJjtec3ugzYS C7RKV3NJcBeCX4om3KhiDSN6YYVICf4wdqz6TAocoqPzR2t7Fz6+upxIgh5WGnnC s2e7uO1eXUCSXONfiDEDzRKGTQjkdvwFo+880DkiGln/qmRrcILA568dwNnOrBio 5QP/dbkpUBhqGDr2LchpkoYyQlqzbvUpXJ1xlfZim1jfrmdfsk83dE3iBzvmT8By IZcMoqDEHil95LmJp3qw1yVeApP/ZWR+0XiBLEF9GhcAOc5ihH2ACSXLWiRXpyMm K2/erTvTX3QkAcqoQ1cFWCwNNCrlgycB84Hdm5GXdajp7cD/BAEDMzjCY4kr/Q3j hyianLh3vPRtiNtOM1BAXVlyCFrMAWM4wvd1NvQzOv0mIzpEU0FfZmFjdG9yOgAA r2YMtXCKQcwejpJAvOyUDQkN7pMthHn9JiM6RFNBX2ZhY3RvcjoAAK9Jr4qS3ZZl PdL7YV1+Phgvnly8701B/SYjOkRTQV9mYWN0b3I6AACvUexSWiUCxWbF+aprVRlc r9OTu8iDIbQnR29sZiBUZXN0IChkZW1vIGtleSkgPGdvbGZAZXhhbXBsZS5uZXQ+ iFUEExECABUFAjbjktEDCwoDAxUDAgMWAgECF4AACgkQFoQQpI/CguYi4wCgmXVE CJyjkfpJJBTdGzCjhUq4N/sAn3Cguw1R4rX0391e1pAUuyM4OsFnnQGlBDbjkvwQ BAC2wan9ScDXLgCqN7CWSRM5B68vC3PCbemYsuOXZjdN8afw2LSHxZ3buRXfYxRn JNo1pm4PGkMQ7ZpQikZZVCZa+WoIVXYXRnYAjxHhvHW0LaQPvnyFS9H5LaGf2Urs TWVA+695zYsSaX669XFb9WbiIMGB4yUiXPvQwUL0tSd+kwADBQP8C3sKWjsPh02T jcEy+FDxWAn4g3LfsOPw8dfawJln+0h9LA0hTebbKBJWt5OUMqjjTq/pCZ5+z+b1 0f2WwET/xAvjQSTdJjrFX9DNNU3jhCCelEpal9oxsbNYlVd5zOU2RN4hlmj+eEOb 5oy5wy797sQpsbrgGetCTsvPotIpvbH/BAEDMzjCY4kr/Q3jhyianLh3vPDNvR6M j3Bba3JZVQTKkPeSB3XBJgQ8ssznZMvxlNdGPl6SOlpBYPcmUuo2u69fS+LUzqxM 0unjLC/WRRPWr5QCyg3kJFXpZ5DcsdXUPikfaRD4XWuVPTStcu7NC3YRt+QN0y4m dadZMjSAwMyHg/oqZHF6HoK/TA5ZTVHNlabj+zNpyYhGBBgRAgAGBQI245L9AAoJ EBaEEKSPwoLmSuUAnRcjDyrjIbOCDkQfCrpPvbqiHoQMAKCYSE1DVqBk+RlVUp8R uPmgvzIKC5UBzgQ245SxEQQAyG4mRUQZagjDgl0xAnaSbLCQ5wJqYq/snwCl+IbD lXcoHqXQNO9QJrPKwKQAUv3Nvk7mqZWnfMPoskLOASrs6nkCv2Fo9Aw6smNizO6i W7xXepwvxjho4hLnE00oGPCDhUnAU05LO2pTBoxwHVs0o6vtaaViXk0s6dOFCoVd f9MAoLjiGlK/3DFWoUrqIiuE3aLfgkddBACrp1snJ1BtiGhmKjt7An6Qoc5LVnU4 1J/REiQIyitUFAvPX+fiqzDyE3VD8qX/vvTLpgZCYvvEdBlSfM8IcCn1/Qh4aw9J HzuvKQg8WclvnQ8zq/7RV9J7h/aS/KIhDJIpGhi6YfjfjdSKfLYYfr3S4TVK9xD0 Za3AH7/lrTqW8gP/fpKWu8fJyJ9kqHyYrI/j4ykt5QKBj3tHjqCv7FQb4FY8txnN 3fLzBtva/tlkSKRsLobixjZUGF+uQR1dTCv042LxZ6aEUqrUytxqUc05pCSAvEZV 8bX2H/5+ulSwdxKEzs1h2NvSTAiZ54zzKGjHNmEitdAaPD/9u5xdAiqPFxH/BAED CYhWuhxneJYv2ZhcXqW11qNlLO3tHf4QWPYOZ9bRChm0UzW5CRik8f0mIzpEU0Ff ZmFjdG9yOgAAr2JqCOINgV2LqfCiK4s7X0mqwBz/uAX9JiM6RFNBX2ZhY3RvcjoA AK9CmjU0rQ5lHrAdn3TtY6fEEyaU9UBx/SYjOkRTQV9mYWN0b3I6AACvdPZBZuBl tFtFIRj0/+lL7Cm9daq3wbQpSW5kaWEgVGVzdCAoZGVtbyBrZXkpIDxpbmRpYUBl eGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOUsQMLCgMDFQMCAxYCAQIXgAAKCRAf6Pxv BCWWd1pYAJ4lvyDCV/l9oXkJOzNeGL3Df5u87gCfWm5F7YsIhi+PR7BVafFUBsWT w+udAaUENuOVEhAEAIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Faon800I3GUzETuQA2 AT3getR+GuV4pbZWE/80b9hnNW50UJGiP1+SXfVtY5vT8p/gNFwn5d0O/pq3bpgF RJmoawTzx8SFDwCVPHEcwOHE2j5LvfrvRBOyKU32tr976ri+Uowt0+92LuA7AAMF A/0Yo9dDqhjR2UoNcYfEZwWhRHaaJenP3z3QbzjJkASb5H84xCTEpv0dqEtVTJUo Io8Lh5VjbiCwok4QPLVSbQFeHqTKb7N96PjevkZ1Co6OrLCNOcPRvXxgCwSGbuuL MkQJEutnXLu0DOKquY94KXXh79La7lTgjReE/1Wzbgc1+v8EAQMJiFa6HGd4li/Z mFxepbXWoDrmIq/iTdsieZ9YRYA+rJ4OBtb2sjqV2L6WYNOqc2qDSj9QDIRJ8yiD ysA/4Yiur+UNBqRtJQGroegDXG4+NHsudnVzGXaQsgEqAjZ9PZEtsrEf8D89NeZ0 3yQFkAXQ3n+aCf69jmau/Yf2YAX7D8brkxgQp3PCUcOgGv8EPo9r+AeRiEYEGBEC AAYFAjbjlRIACgkQH+j8bwQllncJeACaAqT6TL4N3gG2lLQNzV6gMd/p3dgAn2/2 mEgFb3CkorWwdW++wf/YThe0lQHOBDbjlSURBACcp0BogujMnThXpn4UjBARj9oX gQWskkhz657AXu6RmX/u5RmpLGqbNmNuqKDIwUbJslIxrpOnA3QEobkIl7ThH+ZU IhGzPUnHlhd7M3dQWw1U0TfpHyXx3FYb7CCPabrSC7hWWh1ylUxz+RGJJSApR+D/ GY+dF7dIllKUbaUGbwCg1z+vkNbzqibcwdYrwCjKG9VeFa8D/A5yPHqB9NMp+3Ol AGE4XRTR8LeelALpu+MuNMGFCMLdZfmt/Amoyau51FsQ7WwWrNM5A+1v3Fq0x5Wp Nw6Lr7HbN9d6zidN+L0uCrXPweET8ueS3DFnHI945epe703TbcjJBO/uYLn0LXEx mTg846/1ZlQbPgLzmzb/2JMkJ+QzA/4xFbRL2YeaKyu4JjpMNUVzXYogUwg9KZZq /qBbpsIAD7Agd+ZxLJHoweItXaC0nS9C6qDJZ95OJrE+h/Tt2D2lmxXseTVlSESa Wh45x9mbC0eRGFYYRsSx3z0hYwMmXA0ntj0lndC8ru8HjZtBW/KF0VB0RcfSyW+W +yAq0Jxo5v8EAQNzQpmchsGqHF94WG/VI+1oYlA4rI/KYT/DB+zHXBquIl2KZoUR ebyb/SYjOkRTQV9mYWN0b3I6AACvUJB07mtW6/9i6mmuR9JtC7USM0AP//0mIzpE U0FfZmFjdG9yOgAAr2EW7SJ8fPMvmLE8+Kb56tIqW9FrYAP9JiM6RFNBX2ZhY3Rv cjoAAK9VpNLwU8ljMnpHbTNr6de2pplMjS3ztCdLaWxvIFRlc3QgKGRlbW8ga2V5 KSA8a2lsb0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOVJQMLCgMDFQMCAxYCAQIX gAAKCRCtGw+tQ8LQx9USAJ4sELIj8IZxlvkwqmmEMXtm1kIhQgCfZEpMtTpkRbT+ rEHMssei72JJi+OdAaUENuOVSBAEALmZYtP72G7OodR4RfR270RxTHj40PfUpPIf 3U8ezyO3kqjB12IdD2YIXIZW6zEj53psX8DGya5nSvVjdFofQSVHtsnB/H7VHBka OQnREoInHs4helYOD0M/RZcbRIb65e6vEesuzvo9N0ACSlBsAXbeeNKGfGGCog74 GVGcZ6HnAAMHA/9W9n2MwJ7lq0GV4V0EOHDVcTAVRSh0nB9uKBVW7hFi4DP7XYBf gj8Nlbc22vMkkdSvNFUoLEH7Op9sMglXfiCPJSh02U/6XyAhXDyZRyrOIHviTZ9S HMQQIqtEETVuYRkzvSnSfDBVq1p9gW6eZN9q6AM7gmoKInpRaODFRWU7Df8EAQNz QpmchsGqHF94WG/VI+1oYTZm8S4dmnYvEY77B6haPMQN5nCjubqfHGGIMJxRRG/I HzXq0tNi4fusoLILtVbUgta+94uzgnsrUJqZbfmwrId96U52nG82ZMhLpX41lZ/d LZouCr/jMO0uvF+WYMjO04ffBfcnNkeQv0p7WDH0zZZjuJ0aoUwBM9xxU3lYTgzl aZi8iEYEGBECAAYFAjbjlUgACgkQrRsPrUPC0MeO/QCeNYtFDXrr21NZlLu0OfAe lPBM51AAoKglouZG0f49sm9tHg1Gc/nwjzzhlQHOBDbjouIRBACKncc4Ueec7dWa VARy2SmNVufeSenYs4AsIPP0v59jEl7JI0rb+4JbIJoAzW/hcm26GS/UbbpQwig8 /PgMUV5QfBST4CEOlf7/x2a4HKk9tDV4An7q2aNr1beW+twxfUGWWV5I0o1b/iKV k/LiQRiaMr8pJXY266m6/2Pn9LmDtwCg+Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eR xLqCt1hT98gdDLykRTlI3kMq6EK3I+z/8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpD ltPYHgWnUC733ujAKANdyybm3HrA3TSBjEAhNfcu8nkrVorvASQUDCLJatWRWJTU VrPH+GXIXMA/Oi6LDsgNDOJanwzzvDCCm8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMI fSFSvpZWNgQgYZntiXSUGYOVs28T/87RoRx02tsVDw2PA8z68q/XRuM9NdetxbUX QHB9eszFLi3W1idsXhd/C4SyiTgEFXG8Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVL mBp7qfj5Y9XSM5SE0Th+fP8EAQNn55Peu081+nAbRC00SOkO5P3aJwu7AIvXN9Ng rJdUW7TQmQK+cHyT/SYjOkRTQV9mYWN0b3I6AACvbK2QUpz29Yo72wl9Cy/TCjWc O22z5f0mIzpEU0FfZmFjdG9yOgAAr3et3apzZ+S3o9ywcdaosE2TLfNzuX/9JiM6 RFNBX2ZhY3RvcjoAAK9PHpBSB/T7wKTGFBngy9sOwtS7ZM3ptClCcmF2byBUZXN0 IChkZW1vIGtleSkgPGJyYXZvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246LjAwsK AwMVAwIDFgIBAheAAAoJEP4YCx2p47CybMcAnj/BlcF5gdhj8huiFijkgZZi/YgA AKDxpmP4JCksz+UPKsQ8UbtuTPbpPbQOQm9iIChkZW1vIGtleSmIVQQTEQIAFQUC NuO3OwMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOwshrhAKCK3IrzNqME6oA3RllO rx87OCIRggCfVkR+Nf6N59lS5j7jMXOuk799fQ6dAaUENuOjBxAEAJVJ1fFRaXPz UWOoeBHhvUS2aGZbz0Kamwd8qVLCVi8G1sH/LtMUh+8CvhkVum6p7Dom+2MgRmhe +iVNbAdU8QWS4bQsBrTeiVpinMLpkEO4uRvT1G6QIPjN1jrHBsAxGw7NmC/n3stl e04ssueY7JOmyNEMvO1ay42CWbmt985PAAMHA/9LJVm8UR0RWfn91BOnt4C1d2tt kQzfv1y0InbrrdFtNl3nmUgF6/V9OcpCS8NNjZ7nzIhDgT43Ov32qD0LJ/p7c6ES tNSoQE6G6wGB7j/sTkushUy+joAVT2qCfRKCye7/DDa3FXDdcSOovweCX7hD/nth G8k576rb1h70svx5qP8EAQNn55Peu081+nAbRC00SOkO55yVYRTuqV1cyTx/djMo oC9B9hYiXA8kcUn/RO3hztHVFGSYQWYNhOGBPe+FrUFfY6yjGeS9rlLKQ3oaGCr6 pvZYdIBdzktW+TItDPYmRaaBTKrBw8jmccsn7xnEriVcgkSTTMd706I8cCIQh/iK iM5pFZGPPghQPn6paS6L+ydP0ZNliEYEGBECAAYFAjbjowcACgkQ/hgLHanjsLIy uQCdFkPnvUpYurVoPjhg1pw4UzuaVYwAnROb93OSUP9PZxf4XVJwHKU2PnCUlQHO BDbjo4cRBADeZztXPNYwpoIf6BfqepImZqhVd2qXuZBJnEvwaFoAl7er42pXXLZh WIu7/gWODfcyNxsUKgMbeQ+nWO2jdcZQtt+gmRAGl1F5LbxsP6aRw43W7PAkbmYg PY5tY/dhgFGP5puoV9mhijpFcK/cjeg6wNgmjuEsCv8BF5FX4/p2swCgwmgcx88E pJF3/EDrTk4/8Xr6Z88EAL99JWgnl0w2TNiP9T3c5mtVdcYs32ntJH82TiQQ0LR0 A7zRY5ruojNZC9LsTht5K69AJakrDA/Fu5mr2xYoFJcW4b7rpeKUy/wYifeOhYY5 T2NDYvaZnQJXZ6O8lGLFgAxCmnZEN4IRFahKs/gAmG86d6fCvuSrohSZvQ+Lsr06 BACFT4tjfuL6MZ0VhsClxeBPny2AM10+bDDM5eOl5ODLN9Nxf+SRu5AdIojz2OqD 9Jd55WobpUXGzTI+0g23636IuJuH7VGCF92nFwkjdIDblRoqYPAsJRkMiC4FkRae qF0DpgJacYSBnHdY3Yd7I+cvgkK7oBjzTiU/Zs5hZAeK8f8EAQNhroQ8vAawUbBJ GAm7E5zNoXK3ly9yV45/SohVZDzODvOlo6LWymLq/SYjOkRTQV9mYWN0b3I6AACv VTx87uYeuay/ZhQKJudCoAgGZGdML/0mIzpEU0FfZmFjdG9yOgAAr34g7RZNSO3G bdz8PNLxVgFG9ZaKo7X9JiM6RFNBX2ZhY3RvcjoAAK9YCrkTYjGM3LHB50POLDFY Z1O3Mu9jtClEZWx0YSBUZXN0IChkZW1vIGtleSkgPGRlbHRhQGV4YW1wbGUubmV0 PohVBBMRAgAVBQI246OHAwsKAwMVAwIDFgIBAheAAAoJEOup8kDrncnmriYAoLZf OyE8KQbqCKZA2lLbxnCXr2G1AKCnWAeL/6RLjuyT7ddG3qd+ggEnB50BpQQ246Oq EAQAj7WdaOJjzJNs2G8rvrDZvD/uaALQ9PtdvYAp/Drp7xMH5T62+KKTlKdO3s8I QBPiuFocJNir5st/nm8Xl+gcOZOvtr45c/cl54fGO1gOjBZOfgbkdBVK/LMwuQWI ebK4qCZnAOlDLYNGVUguGLnEQBSfnhhkgh0WA0kqt7fYvpcAAwUD/3cOEqPlMdYe LnGEG4wPxtyVIchwGOv0YRW5apbz2fdO7otj1AFUN5WzFw0A5+WHza1OIUhg50Zc o6HnwKx6F+LbZ5aOc37EAvaFgPuMxBfkaWYagCof3jBF0CbTWUXV/D5/dFmIeuGT uUMNsGVH+OSMW2hBN/7+aJK5LLHL+hzp/wQBA2GuhDy8BrBRsEkYCbsTnM2iEIZ+ jDx69i6vtiK2mS5+ud0+9/XEd1foHMXoByohTsJeUvbwXvAu7FvDdfroq3XGvSjZ +czTMIekzBbYRxC+pPYENNuBn/e6LTKQD4oVW+uQYcPax5AvZeR5tm9RPxuQ1EYN AmHR2OEtmE4zSbqGtrnsp/a097bTCnmxH6PsQ19HSseIRgQYEQIABgUCNuOjqgAK CRDrqfJA653J5nNNAJ9Se4OBQyISgG6RMM2e6+frY01H+wCeJmn1SGKVrWnZeIBE j+jR5OSAMDCVAc4ENuOlJhEEAN1bOV3WXINYOoY9LMY6x6FfJNJrSk59VMtySkmk OkStyfyNLxwqteRVSjAjtKVmE9GZgj7mmoZobkVnlUl3VN8paKFzs74kMegrfJqY 6eHo4VAU9lQXX5aUAaIVctz5Y4PNuA5IzL/zJcDqfTN76/d63mf0rOJvewMaPDkM yaJjAKCZTCeh+qyQdW/VLq0ODTyZcAsoowQAhUbJ/2KPcHM1vR9VgZQ4tTTuepDd Gk1A9oq09CkGhtGSdD9lJ3O6IAtwIH5Drrh/VwoYD46C2bQv9/XFSYpFbetP2XMy 1wLLqRy50IjY4eb+A5w/MqqOPmiekPzh+BHgF1ux6FPz66ubEWIr9sUUjp4LUvl5 0FBxEuztMXaNjdIEAJ1fL3IeDqINMmHKy9HtS4tYT/Wz3KyKuFmA9vS/IgXAd9HM z3oBgg+ktmv+O+SsNrBPFgZ8YhmuPtTIZ4+7tEJ4VFVVfnkHp682/d8CpubBDUYd NftYcI10CQ/TvJPFn/Cdm508DNDBGQR9nf1N1xxs6Ed8e9u/dE1DRXFta1BS/wQB A7n3lqEldy5uprCBgI7BwpM0ElWN+2D2a9LgElCF6MeTnG4Ycamo4Gb9JiM6RFNB X2ZhY3RvcjoAAK9TlqT8l+FZ3rsTboSXkdYnCZZwh4rd/SYjOkRTQV9mYWN0b3I6 AACvZXMVrb4dxU2h5sKMOGXEpcHs+DuVW/0mIzpEU0FfZmFjdG9yOgAAr3vtqeEa itcXHtaGrkSx+21NoZaKkS+0LUZveHRyb3QgVGVzdCAoZGVtbyBrZXkpIDxmb3h0 cm90QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246UmAwsKAwMVAwIDFgIBAheAAAoJ ENS/V/NzcuJDdy0An1AXntULu0eTFfoqIj2gIoRR6l/kAJ0VIXasNn5cMC6DtduH /Cl3BCFW250BpQQ246VQEAQA31Qj2MGefTCoF0x+D+9UMxZ6RuBPzI6gzX1tzcUP WYy38NIq+lNYBg7hLFkUfn0uTsAm33h2Q8z4/DGT7jmQWpoIg7yNTr6681L/gYo5 FhhC+qERZ1iPMyfMwwD7rrz9bthUGTqChV2h6NiPUPM7ic/D9rxJICXy8dsoj0dQ 6dsAAwUD/0ggimQTUCGmNHHypor/GY0XAAL4Vy8jAsC0FH1UaqDVTrTDH1qWLRnS 9uxEsOJIGSLMSdxC0FZEYq4jCm7CYjTOHTHvvYDbhs9QhvW9r4VD2efbERFSEYMi H69ASQLGDp/O5kOZTgQOvl5oxzvsrOMaRFSWcn66uUAMORmHKz1g/wQBA7n3lqEl dy5uprCBgI7BwpMwsmLANtSNhKe+VmFkvN9msymkZ/XyA43Ts3EpgI/RoP2B4GS9 LyuCC26DEqGnsats++yae/wDoWz1mM9tq4UcML4hSHIbZnG2OEZDIiu1q5aS1I27 UeWhA8+qPhPosw9cJ3Y3sQIgdIEiKzAdfsjhmE78aSpljhGnFumTVv9p/lCNuAGI RgQYEQIABgUCNuOlUAAKCRDUv1fzc3LiQ475AJ9aAil0KqenoLziTexEcc2EnFmR uwCdEjwBOoJFx6qltIM/tJcxqRi7qu2VAc4ENuOl2hEEAKeOL2pIdZ+zQtehxdL9 l/uDBFSTuN9rLb8DgLiw8Z9j8U5CEH/M38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT 83lq+Ad0lgaZTR4z6nrd5ViOlHPlfqo4RPZPzPe+uF7EfDl792sJerXGAasLosmK nxKAyJyVjh7eZcjTS/hUhO9zAKDVyLHJ/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlx sXpcrCQIoKeDXgKNVv9L+0Pebspzr2WOah8iBN1QOkbtexIKCbb9mmviEnJU0FFx 5MIw4mipvY4EpCaH3McGwJpCzWmdzID8Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RD tfbIlbwotfbiOT9Tr3IPbH+tHAZByMRyvxID/RN90WOPSpODxr9AH9btmeJD0BfN t99116+qdwvWrTofcbkBgzvB34vLLDaMKVIyinxz2lYyC7aSpA3uzjZvoPvPrQJF LE0dx7DSkUTtWbQGByRabpyrXYdKZzsFXLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq /A0jgztaZVWa37IY/wQBA4atrlwHD2LVQWW8aUn17IvjZxnp2Z5Em6q1rszts7m9 rXCv+fKUFF/9JiM6RFNBX2ZhY3RvcjoAAK9hYwqxHjc6iHxWUSLF376lmCzbsJxV /SYjOkRTQV9mYWN0b3I6AACvYBDzN17V2d/ZXmycyHFyOyxqAighH/0mIzpEU0Ff ZmFjdG9yOgAAr1pTL8K2pO6rbaqNJoTiKU0q6XdGAj+0KUhvdGVsIFRlc3QgKGRl bW8ga2V5KSA8aG90ZWxAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpdoDCwoDAxUD AgMWAgECF4AACgkQE9uWVTTG4/Hs1ACdFOYsQ4pNSdT9grdhmONXKXgVRzkAoImb lC/iwRti3/yZ8Ljc0tEc4HTPnQGlBDbjph0QBADOk7pS4JZak/26nkZWEs+hIIF9 IgD0labkCnr+GNDmGJrsJxLwTjU+NoaXo+SHmWPaqRJQFrz3ZJfJAxioyoSr+Hv4 Fbv6frZIJEy1g4dFhk8DiG+zR3uPOcZCUyyW3HupqahU0/RcX7CzXAcuPJCXeoye SsBDyUAk/6ODs/kerwADBwP8DrWpAtFexIWvsswGdpRJHSjr7j8cJ2Hy36acB5AE MCSd7kNM+LCrOqyOhh6RfokrvCT6ZuwlN39nDnkmSr3FWbqcRSj8khs3tw+Uyp8I tqhL621vFn180I7dZM11bECv+YZlmIF/L3JNzFR+jmpODR99bLjQI0dpUqT6IhyS 0bP/BAEDhq2uXAcPYtVBZbxpSfXsi+AHAuizXUm/50gOqDPn9/AvgQnPzxgeV71O aUzUKvZEVIC7A8eNbmLXooM3Kc6ppaVOy1l6BVNcHA+iAdEOnGL9e46NALwFz+DH rt2umY2banvt6kYyWqChnp6vnk8O4CD8ufKnQ4c3zfSul69uuUA+l4e5ZG8V5yUo ikTP7kb7/7PSMohGBBgRAgAGBQI246YdAAoJEBPbllU0xuPxJmgAnjzxkJIErPw9 iJ/WlLv4gvPY/IhLAJ9WR725AmIjPEe8YqhNfx5b+Va9CpUBzgQ246f/EQQAl65u b9rEKS7XsXwNkvGtj1K7gnql2H1bJ5GF9bGCWhWmB8WFtsAy9XUeC3WbrcuWFgTs btTfXZ5I7j7HSG6ukf6Ycusb+bA1IoT+GAQGWpFeWoXe16wXZFl0pEc2iUnx9Tht oQF0fO5YlbvHJPEQ3kvoqcdb52WOOfOuCAJxc6sAoNqo5w0YxgJ9jkj7J4cmR+OF UEKXA/wO0jrvYE7eiZeFUjGNiRotxzhTzh53rxtz2/DWG3D+IBFOt4qqxxp3WCSN O5SnBZWUW50hDkhTxS7jSmsfPBmCinmQ6EF5FaFPyLQBq0uKwhMaWficdrQS9syX FlPuzQ5jOS3kVAxOmtDd7CMTC8892dj02qzAE46QNNUI91kZXAP+PINfoJ8hV2zv lGZ9tVlo+Lgsl1BOvxvEgmYV14gyTmMWga5sNq7TdMdWi8Fz0Vy7sI4S+RMJ96rM ws2iTzWLi2jGO44itoWttCwqmGJmlSWurRsvYhSBgvNCLXFGGaQn5ncO1tqKnWSD f625UnAipsgW8P4Agd5qJZiwXfJ67Hj/BAEDu6tMael+rX7E/usFH0MyFQczfHWC g6VkC9TYfdLwbBVtdcq/lugvQP0mIzpEU0FfZmFjdG9yOgAAr030xCMZovqQobPR re1kY7ZER8BZq7H9JiM6RFNBX2ZhY3RvcjoAAK91zg0swEPwYMWjD9p9kHpjle8c eWvt/SYjOkRTQV9mYWN0b3I6AACvbxuq5MH2Yu4E6hH46k0+/KnqrsrS0bQrSnVs aWV0IFRlc3QgKGRlbW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAV BQI246f/AwsKAwMVAwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAnj5F4su5N516+dcX YBl7cLVDPp1JAJ9d2mO76rlmINaaTtH5lhApIjQjEZ0BpQQ246gqEAQAkdlSJYfT iZH/CkfV8tnhI6IDz+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7 MdHAz4RKFnAAXPDBZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyP TIU5vq6FLmsWmMB55iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJ gag14bTaBw0niZK0KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CN QBBO47VUi0y1UVjExtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+a onKzj5QEo1XiiMNTFFmP/wQBA7urTGnpfq1+xP7rBR9DMhUEbuQV+5mF3JEYDt0d r9Ej9Ccl8GT/tOi0QsPNbtaWED6pY70iZMVJSk0TG7pZ47FNx8UHI2bJKWWjCF1n uXV+mW/xLMM1GgFMwK44bX2IsEJVqFjB7alBd/uj0ugnj2feFeTao2xDuSQ71IjG y/lFtOkcdJOov7L4tNh2/8ag6bbuZKiIRgQYEQIABgUCNuOoKgAKCRAMggxx0mmT E4+uAJ4+JbldpmIpRDEuE8tFCnHacQr0/QCeLU0G5RaI4jZI+QUKtYiXq0ITUnGV Ac4ENuOo3REEAMFaZuaYHLD67UlMCLHGPk1dFdAn3Mu2TFFDUYfEtA/JDOiNZacP iQSZ7zK+wVe66Vs9fzNkyeXqpwLzC35vkTx0K1m69Ave9LnXIZ70zvpVEL/UeCuI TRiocxNglPgn4dyJ+2V0cWJ36NGcZmkvBW0vGItpYCbpIGLzYVOfiVUbAKC2Nze7 9Iyw+DKU9HI39B4fz85nkwP9HbIb9z5kXiRZyCaXOMnFBQ3bAZh4Og5ZQxdLyZ/r IX4Mu3DGjqg6UtosdVNHr6ofZWHPXNqqTUivoUmOS5Qa8dtUW3YGa8vbpK1OMnjM LhQVJZg/eou99s9OFP5GgPh5r5Vw/EYQZ6qzS6YiYnqzSt5LcolL2+Ae0ajXUizi c/UD/0TNXtCRfkS4SeVSkZXarb1oZjHdGlw6ENiLGiA0e5b4r0rByW4EQQGZPvg3 DFXMjqp0lVVmfmXFPggLkbTP+SJ1/VGSC/wSqPkMiKSCenRqwHwWIdKxv7f13hye TZXR7P8uaSddSXaakqmT99v6pdZOo8NsVQTx3PzPKpEVciPB/wQBA3B94sZ4BXVU UYZFifR1y3VNINM8s1ZkPHDNwxOmQwK5PkcxqfpPpGv9JiM6RFNBX2ZhY3RvcjoA AK95UQT4zAahgt0Z7gBkqnFPjSb7Fn9j/SYjOkRTQV9mYWN0b3I6AACvZij2NXRN N8KfYKoU+00zOAYGp8PcUf0mIzpEU0FfZmFjdG9yOgAAr2BTPmLEX46yXGfFOW40 pPQsV5wHy6+0J0xpbWEgVGVzdCAoZGVtbyBrZXkpIDxsaW1hQGV4YW1wbGUubmV0 PohVBBMRAgAVBQI246jdAwsKAwMVAwIDFgIBAheAAAoJEDfKtR+3kQP4ilwAn2q9 qdnkpFPi1neWFi0OEOr5le7lAJ40e+wQHgKIE+Fn7sjYQ0Liwn7oip0BpQQ246j1 EAQAp/Ccn5EzxXIGljKVKZ5Pp0xJA3uBoQBvXzu2pU4HU+vmgwnX1313x+4BsHVE bw7+lfyhKnDD0TSwIAHj/xeE+jraCTU8X1iwe49eAyTaWF4wTyTzdZKQ9mrfBnFg dWlRjLALcTMJaOE2Zasn8wgAEHgi4QWyBPS1il+aFE6oizsAAwYD/RpvJnfv8Vqf bCxOYt7meLfTLrvcPlGNynv1nEgNgjbYRGIRzbXDDz+jwcLc9MeNuZgtaXvUbsQ8 s0X1dP6vq43VmQTQPlU1TQx10o+YYn73ptyhbwOkyIDGmyf6uFhO0+B5/MY0KRLC xo0lwMxvVkYNd6k804pSJPqwusWBm2R0/wQBA3B94sZ4BXVUUYZFifR1y3VOfk4w 3PRZvIRE/y8bsqADpUHOrpzhg45mVJx0XUD9jUsufCzZg7wHdE3KlnZW2cJ+HHoh up28Ie38bbaUVgfofuur31BiAVojpu8KhTncGAMb64oNfdRJapHzzBcuUigQ9ETt 6OPgUE/thuHws+GpxQe8KhGQcVfJwuRernhyJhW+BEeIRgQYEQIABgUCNuOo9gAK CRA3yrUft5ED+PJaAKCkicGM/NGxdTvpyHhtVSSkTRV/6gCgsnKOr6ziNIo/Bbdf RfYDd1dL4lOVAc4ENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6t k2jzeUt6ooNd+c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+ Ydxo5Yjm1DQH7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhV n8zzAKCpx1LUlQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssU p806PQorw/ZOuoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpg SdD79V+oJAFLATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqT Jzc6zUn1Qqag1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn 4aVJ5D0pFB9izTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqL b7E5LrlxZONUnrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQ/wQB A5YOFNcg/BY3BMnzmbEa9r4DVqdF0faqHCAPM1GU/o1rZ++VSNJruLP9JiM6RFNB X2ZhY3RvcjoAAK9h5T6r3UXJdRJYgiPBeltuXDZLCq03/SYjOkRTQV9mYWN0b3I6 AACvXXkGa4lux84ceaJy3CpOkPW9NxGnh/0mIzpEU0FfZmFjdG9yOgAAr2H8Yr3s FEe3lYbWaVBMe1xHDnsfH0u0J01pa2UgVGVzdCAoZGVtbyBrZXkpIDxtaWtlQGV4 YW1wbGUubmV0PohVBBMRAgAVBQI246pkAwsKAwMVAwIDFgIBAheAAAoJEL55SFK+ XPiG8SMAmQEeRej4CyoP+wmpdhNm+c9famN9AJ9nKsCqRWJ/ufezi0YqAcbgbaNQ 5rQSTWFsbG9yeSAoZGVtbyBrZXkpiFUEExECABUFAjbjt7cDCwoDAxUDAgMWAgEC F4AACgkQvnlIUr5c+IaZ1QCgqGtz7Pnbid5+UylHAn40bwpXE7EAmwVmqbtsG1iW Wt1xOo2oyTj0t8E5nQGlBDbjqn4QBACme9aNjmsy/D0vLzEUvj2kaMBgVv3MWKO+ Abi0yKsjdP0QEt+UosnybgpahGhPZ42bL8kYsfJmO95pWHxN6sNX67FmQQa+/vTa fPw04SVBOMdYejLSfqmhyLoXGF8l3Vuc6MMraZkS58RA1KfY+EDjqCMItFMA+7Au mK1JIvm5uwADBgP+KP0pE7r38nHf5b0NlDFYhAGIqdgdWvW6zZal2lNXiOkKok4I 6AH+GUGYJjULX+2mwCPUDdllqYlFZVmg2iSRF4i1ktd8ZpymsZuaaNyDz2AUzlXe cRQ0JT+abYFBannyHg04K/rR0avkYCocPEBK0+TfzzNvER3IWznsI9Dhkm3/BAED lg4U1yD8FjcEyfOZsRr2vgAw2DSsek1WQcJVSrTcrl4DmC6JoYKNZxcZxkz+azXG MzU6P/gruBQX4ldaWq8ObvjrdF+g032GXju9Olh9Wx82E+lc4O2K5kwNe0fveQQG 7vFrmajyXnIB4myEx8jSGNcEUcl/6pMmwjzIOMcU1lPVYNkZU8cFQpZHJ2dY0OO9 MXpawIhGBBgRAgAGBQI246p+AAoJEL55SFK+XPiGkTIAnj6CpWQaP+vvx+HhzcjT cL/VKlZQAJ9Nk+d40+pCqkNEZDcV/xO6vXHbbZUBzgQ246rjEQQArXimh2e6XDO0 Lo/BHPEsdHyd7tDXS7KOcZ/RJOBVjCwbuo8O2/+SowdlrVzmUlihzs3k31AMe/TT Ciaw/Y2Vv9JBABVXmacGRdZfHwbERC0fXMQGoxN0bxZIAmAIV7BdSZ6PqolOUzb2 nRlOEs5j+Lzp546yFk8vN5rWYsKBSHMAoIGmmgpRPEONTciH1bY0t3/jZvMdA/4n B/bsDN76QdkFdvSCAams4Gha+7waKIBaAJZWgkGzy4sh19TJN5BGYOcXsJg0v7VO Kxqo+1HC/TpWcdSAg/HKfNMjWH6COyuVzOrGDjJnyTkRjhLKjLaGG6N5Zbg4A5IN ug2Tcp1HhR2UayFs9nCqk7mgd3cNPZvLCTbrN6aBLQP/UNSg7Iyj4vPtpFMyaCt1 etUIJVwFQ5X8yugeSjhGehkf4F/TObssi40RMmxUkjT5by0ddfpleBkeQHK1UDph NEKRcqNTK/rg7G6sJMxEb0ata+aTsqjOVj14ZV2uaKOJ2tXwRF++iBMyusSFRtOx pzZ2mPnZT4LC6uCPPgNtGRv/BAEDsc7YSdD9O4gyqEDz+24vfhBH5b1jnJJ9MOul ZipNjfbpG+Tocn1wYf0mIzpEU0FfZmFjdG9yOgAAr1WRiijedefkEEOQBUrN2HOs xDW9NIX9JiM6RFNBX2ZhY3RvcjoAAK9CxfX5lmHbWFcJfFHEQCfpabmW2/on/SYj OkRTQV9mYWN0b3I6AACvV5X9PayElGU3atpQ//cE3jl3tHEfhbQvTm92ZW1iZXIg VGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxlLm5ldD6IVQQTEQIAFQUC NuOq4wMLCgMDFQMCAxYCAQIXgAAKCRAlsA/UMM7GhJjYAJ96+gRNnRtFX68Wbsix 2VqHsXeLugCfVbbEonL55bC9BBQ89XY+6AFNSgGdAaUENuOrHBAEAOGceVg3PC6F tgrZrnofohzWnui6FVBzeai1DZ5MMKmdN6/QMv1eeHoMOb33fbfhwA51n+kPuhap r6QqTzx62RGA/gK1m7vjU2OfYxSO65GN/rSUXN/kE83jR7Hux4MocRXZ+/8ngqL7 JAjw1LZdJyOniJpeRvrckPNC/bKaua77AAMFA/95VjAjJIAU/gOMwtbqTgV+cmHe 52Aa1CJEalV88yKG86nnqHuL4xxUTTZljyjbbKleJD/Ah7R1BxBhSEDy8WuTuonE VHVxTcL9Yig4pZ/OzYZf5fkl1eLNaSLb8XZMT0JbP02b//OMpAr29lcaga1o1RtW vrlUyIYOTm2RcTxkf/8EAQOxzthJ0P07iDKoQPP7bi9+FNgB92LCXMeilHSPeArG JblD4lyK8pp+jwjSCaWJrWQO/OJJOzhTh6Betn6H6C6bapoEaQ8TuKbHEnOMUfax tx/yzDtWu4EWGMyG9sSPjXRr/lChDsi5OMcYnrxK3foQYMEHBMb1fIqqtRZmqWPc FixNLKLjBalB2cMRuYaY8o2V3ZyKiEYEGBECAAYFAjbjqxwACgkQJbAP1DDOxoQg 5wCfbgzOK8WkgR8iruUOQagMIqwMr6gAn1iBQ2TJM5znLHzYgLX+D0k5IG/plQHO BDbjq1sRBACVaJ7JCEOyjZmcPbBv6CrpqqTWtFSFzB0HAJNuITVosCye4yXycsfh ++FpPPZX8B6OgvTR7bx24Dmiv0mIF+ZVuWulMAgZay7QBTq4RCxaBnBF2yjc0f8p 8fxnmXHAm2Rn+GUCIQeiGYagPfyYk2yCebrdFdp1QfvqKs7oxy9aVwCg414fuLbk BysyiXg7sFnCoarbmJsD/0hGErsAWF+BpGsNPPzg9oiyzGnV1YpqVGu4wlgZArYs O4SXndD53WudgE+WI9uNav/0aSPHcrgHQJ9ZZALSxSXvts1EWqvwVeSNFly+QKjH Ecbs8gUbvust3ZKJD55L52nlCKO64wLyySS9C67FLp4iTSD6OMaU2GO673thrrF5 A/9nF6Tfunw/W71NOY3uc+2XMZcat8pWL0O0nfUTzTmu5cWpO6gV9w4FGu19j4M5 5tfxHEjBBX9MSbLHChd2aS/TcRjAPoAlKbHda5WLn+t69wf2d9IQcPLuwULwIGnh pq8AVFA2uGiZIH2VKblyUYtmIPieWMXUQUAHBAVyHseGU/8EAQMb786noBSUDw4m 7xGDnWduktairbapLv/ColtFylU7mo8tzwPJ9N6M/SYjOkRTQV9mYWN0b3I6AACv V0SyyziakJ764L9AWGhvZl0VDNCEff0mIzpEU0FfZmFjdG9yOgAAr2aAgfc/R0ZI X1er4E/LYM2tthHZ54n9JiM6RFNBX2ZhY3RvcjoAAK9vCoy6yI44r9RAQQdGiriB nWdRPg35tClPc2NhciBUZXN0IChkZW1vIGtleSkgPG9zY2FyQGV4YW1wbGUubmV0 PohVBBMRAgAVBQI246tbAwsKAwMVAwIDFgIBAheAAAoJEF9jVrptlzKssC8An32a 3EYMFU3dvYtqymOZk1G6qdElAJ9XrILycL0GM22u75KkQfVlZReszp0BpQQ246uO EAQAnQtV0TzPQjBa4FVL4qFO0koX3y544FgWd4amzmK7ILV37kHb+pQIsZzT3Z5P 5OJoy/MNaam41Jn5m6aVQ8c7IolEJSWrcxg31NYA3O5LJ16Rf784IW7nMvBzTtEh 4t7jPxlwue+ImdaMWvwNeHypwlWE9U4alGtbrAuWEFx5uCMAAwUD/3+C2YDd3Wy+ Iy6lxwzaQCBI4k2yl8QyhzpwKH//+EhNJqWjVRy7t58SOewrV30iNpDEEpv96aqU ys2gZTPwmzACVGp4ZpSzwEQ3Cf4UHA7QbBeZxRu83y33tEgcILDNR8S/evFb2u1r G2KUmvfPtx0g7svVcKYRae4uB25wm0iu/wQBAxvvzqegFJQPDibvEYOdZ26Rt9Gj Nyo0jdE5rAxUvk0VBw7TW+V6uxtqp+fKrP3W/ewR4mUXo1jq29kicdAtO/nI0uEW iMuascrL4lCWWcrEK2n4AX7KbzJ9W3HDupQhHHwYga7LFg+ZAc+6m9k+cn6M8Syc sbQt90IMqon/jpYnSialNZilcMpFfYCnqBDTVKpBReiIRgQYEQIABgUCNuOrjgAK CRBfY1a6bZcyrA3hAKCPwFgK2ukTx/0R6o/BN6HFJh7Y+ACeIB2LqEi2uOknmyef 7JveVqldPTyVAc4ENuOsQxEEAIQRmJhsJniNi/bRff/YGrZ9aFWt81G93W8WhV51 qq+ntUHgUNY55Yyos4XLOa2tS+K8zP6X15FesVBPYIQa5BIC10mAsLfJ+1rbnGJP uNBA2U2MoEaRxo/JtXQ//5jiTRlYwLDRnBzuaMCPdsirveu+JBw53ytRwjwe7m/D 1PPvAKCp2dj1FtDjubTN7kCF0o2KzPwE0wP7BimQxXyPwSzGqLaHXSEBsh84OQTx PI98BXgq0195/A1B1/pPs356euKlqoefUTHYhbjiMYbjZT+A6juudf7A2Ucy03G8 HDZ4k1f1vmzrj24+6ygGBcxTVr0BaweiC1DwG3LjQoJ1cuFxRQ8BYJDGIwPrUW5J dlnzW2bJWfdyXOoD/0S7iEVN9txkSKildOeP1YcDCD8MM3hvF9kUc+1hbmir8SOZ /IYJAyQN+j+mYWsLuKtZ/F9pqiBNTXH2jWCTqldOD/ZYxHVJAARnkiVG6yckMLsx Hi2LPPBK8xack0y92mKe7za/7fhVgCRSs7M/rzUbzUhyInHSyxr2SYb+8lbu/wQB A3vncg3S/0EKhZRFb/E5MzbPjleeF5fQn4SvP7U30kDoHyI3LH6KymD9JiM6RFNB X2ZhY3RvcjoAAK9Gv/oavNniW7Yqm+70mldjom2X6ztd/SYjOkRTQV9mYWN0b3I6 AACvTc6M6Pazxb3BIBjtK8lUhha6Ei7BOf0mIzpEU0FfZmFjdG9yOgAAr3SSQHcy 6mye2mjpCNKs/FezOQKbDUe0J1BhcGEgdGVzdCAoZGVtbyBrZXkpIDxwYXBhQGV4 YW1wbGUubmV0PohVBBMRAgAVBQI246xEAwsKAwMVAwIDFgIBAheAAAoJEF0V4B0/ 8TIG4YwAn2L7BGoJE1q7g/ePfsIhAc0nacGKAJ4iBZV69HtWtOryudH1sG7zEoaR KZ0BpQQ246xxEAQA3mE758SGpbalfvWhJSpb9NEdZJvJs1zlutDW3OBNuF4eIb8t AnWUeO1mhlCzJbcf958S40BHCvKjgiO8rSeaJCyplRHXv3ldMhuj/Bo83TxC6MLb q5ZsvWlgvnJBqvBso6jICy3iOATU2llVz+vX5ZSns24RqmJxWO8U3OSJUIsAAwYE AJZAliv6HSjOvslD8Gojy9Mq5Vdv4MgFCO5LM3su9qIioypv1l1802ZnUC2+SWjY J7ZUzKWJDNVJNm4clBt+sNMFcF/5D4Ag2Id1kQCh3MG8O/qnu+xOeg/4DZtLyXrG tY5sq3crL34ZQOSpbda5qBxQqiBCARv8Up5z4Z6DBKBR/wQBA3vncg3S/0EKhZRF b/E5MzbLEL6CTR0ywkrjR5f4P+KFRNbVixP74rOGEYga1Uy8PrUOMDBIjbtKVWQy 6ly4hnMv7ZPtIZSJFpeofg7k/kTNJB0W0BcJhWfg5CbiWncJYH+IZT6+/0aJfmhe y7gMlkoXOqH7y1MlLXHLriVzNOpapAK4Q7vwzzfRL8kXP8zC+u1noiuIRgQYEQIA BgUCNuOscgAKCRBdFeAdP/EyBhuTAJ4zaeXrBSUA3s0m0MV04WJxDDGwWgCeKwYd KMH/CO2Eaetd28XWxnxJHO6VAc4ENuOs0REEAIHCI/xKPD6yIRGsSnI3PXTW/f9A WdwcQZO8fWuxypuqNP73Hyx9lxYxcQeA3X3vjtTwvSjVKiIuhk2nxm8qkuO17Jzi bOZ77K4JlaVFMwHe6dHcXHNrSaHcIZB+BrTj+IuD/Vwa8Z4EK1kNI7t99xDxesC1 ou6pFchhDQn7L5LTAKCmIDPl2IfVEHu/x19Bogp5NxMVZwP+K8gcXcgYoY9NourP LwHuZpU68L/OboKLkgfeVxF/Bj372liFv06VFkOmu6PGM1P5CD2u2MxE2F/HvxVa 9mXd9xwH3i1DadzktDbxG2CZRg31u/1+6i1b9aOVgowh1ISvAwn/QMfW+M+wm0R6 bcUhOFO/TQgjrF0LDm1dvKpRrBUD/iCGgoe3U6gA8P5wZn7l8XqTyl0ul3YtLaO/ S30La/k1LSThFRiG6qkAbIBEhYk+akdFu6oTp5eO0yEMj0J7f1ffeEMMgBrSILTO amBUVu9INRZMg0V+ez80zLlNgY1SOph5GlJC2i7o20V4kBZvCFyeK39vexqaSrko LzXK+0Zq/wQBA0GK22cdg+tRJk3gYcN/JjZjdGbyparZK4zFc6L9X+dZtsC9gBVh D2j9JiM6RFNBX2ZhY3RvcjoAAK9XLx987T5u+PQj0za48diNtMwF5HRv/SYjOkRT QV9mYWN0b3I6AACvZ+sSQxavyXXTvVtvSZ9DrB2hdoyR5f0mIzpEU0FfZmFjdG9y OgAAr2TiK/D9hNwmBtF5JxEuKwCv5DBmY920K1F1ZWJlYyBUZXN0IChkZW1vIGtl eSkgPHF1ZWJlY0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOs0QMLCgMDFQMCAxYC AQIXgAAKCRAcZ+wTPGYchNG4AKCjSqAGZAKs7NstyNXe0qmxdjqhgACfUIFuQ0RA vRxngnEfGZJiTL7vHBmdAaUENuOs5BAEAJGi4T/jrY5BtRTM0psAneQytzzFgH4+ LigUXAAb0QDAOkyGNfWHrfHJIS7A3Nc9pMWAdOjWgSKbYyrzra0SQ75/SkI5+/S5 ev2Fpki+HYo7cNgVXnbCJrIY7k4DAMunqPJ9JCUXc88WxGvKV5b45htqCPnV2Pgq +AEIKD5aGfLjAAMFA/9+O6ttUbeY2bQHRdThl4HUxQw4lgYN7stgGZsbHCc0y6ln 1HF9vlE4Tl6HI/NR/8OauQrXt8988dh039QNZsOdAeRWTk4PgSuXq6VDG5WNw6B9 bvRPKXe5yeVmNNl6KESBzMcq87kANZWZ68vKJ2JihxPHRAyfxwGr2JKkVF0S+f8E AQNBittnHYPrUSZN4GHDfyY2YCjm88CdmfBmhTozr+i8fBZaKPsQQkAz4Ybhdf+d CkGOyQjOvI9qUX4wNF1n9/2af6a9A9TJNYGpdQ3AQUyyH1AXIfYLeZhAKR8oHgP3 r5L4DDGmyAG/I47Ziko9nyyRjEkT5B17n0HedUtHH0+v6vtjNc4OA0XtbY0SCvuF MpLRF9guiEYEGBECAAYFAjbjrOQACgkQHGfsEzxmHISIlwCfZ8SYKvVQnWcUbLR4 pdAC/SDm0XwAnAqTsdVw9qkF0c5EwGnsst/qiAqalQHOBDbjrjgRBACU0OjVoC32 Kh/dUjXPdN6HIusEhHheYpFIzYHHTYJmFBEjBj9CwrpYGjGUmp+BS2wFS59zO2Ml pQGLGrmo+YGBdio338Hwdm8baeScd2Koqu+oWkCoBMm2VxxbS3M8kq0ppNu2Q5EE O/qGywVrVpfBM3siM3mcsjVaHyWy+T1IqwCg/lnggNIr+Yz2HoU9GwCwBi9331kD /jRTBAuXTq7vAG2bGpJ0X/zqSMLSRZfwnZj28hx6I0SIT0yZU1xggrAgzSbB24Xn QSSxWMR2BZQmupPdHO0l8xPn5KCbYo4C+9+ZsprxEXg09KtVcMOsV6qTq40NPSOd RRNAVhOOTg/GD0qX5r9ztB57qpefmp4Nfy5tmo3SehfRA/9jkdKCLrZRsE/kH57k GoT5kt4nvJW2X3T03BMKvspVm3WjdlrR0Ji0yiw9P05sCMJqeFKe4RZreG6i606C itZpRIRbpjfMEq838zgUDv7VGF7zqCedYu36sepfkzxj/slNyu6A21HTgMWxiBrk DXoIuxMPFKYzZGC+nCHXgW2uof8EAQOPMKazZfwtUoJ7eB74i789uCp+H+yM1KRO CEcmSW/T7ago8wfbaRdC/SYjOkRTQV9mYWN0b3I6AACvTozOxPOPjYlU7v7vhyL4 rFswiNRORf0mIzpEU0FfZmFjdG9yOgAAr0jn/8fzbG+geTnYS5NG4g227pXLeTn9 JiM6RFNBX2ZhY3RvcjoAAK9spiY0wOlyucxM1H39jlMftXgj0GA/tClSb21lbyBU ZXN0IChkZW1vIGtleSkgPHJvbWVvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI24644 AwsKAwMVAwIDFgIBAheAAAoJEDvb7bF3f77Tq+AAn10WjJmAMcn1pBFwE28eIqtU z5bsAKCoNi7oa/HFVQZRypKR7SChjez90p0BpQQ2465mEAQAiea3rOLV0WY9+rOz +CmVlH9GAvJrS8cXjRF3uXJALZ/IDH3EkCeDHouDtRAb6ymfQ89vBJr9BZg3eug1 HeMm0SJNTzfJFq8vVLhiwH/1QQJDCMl4WAhJwe8EbDY+JBeQ4WIsrXqdsHpD6HGT thgFKCMmNsjDW9ptoNivFJytkAcAAwUD/iMYod6PvvotNl8IuMDnu2q6NsUngZh/ W/JxGifL/EVS0TtAIKEeBi8ynkzn7+exVOPLZWO7MbYehTsXiWkJEtZw9S0aW9xl A2a+6jP8jhmKdFoXUYBlvnNHmGt9oOWo6ts59/h9S+Mq5kUmTOJ5meWV3vYo5BrN FDWKpotIAWMa/wQBA48wprNl/C1Sgnt4HviLvz27SydCgapMV/zUfdQL64nYYQj/ 00crVG3e1cAN2iOPRNsjnczkYXjFfSxTxoVvQEOvScRoOF1LQ6doAGGSJmSkyIGZ wxb4VLD8GhqmCX30XxOcTRG6EiLq9+kDGL5gAnBUTviRF6Tc+y9N79L+nxc4lawj 36d0ZXeIG2fm8RycxA2E4ICIRgQYEQIABgUCNuOuZgAKCRA72+2xd3++00nRAKCQ vRyQt5pNoWbpj8btfqGK00jpOACgjSITGzCNURjHPCPEBAPqgOVDh4CVAc4ENuOv BBEEAMUtk4AJiXP3jaKpIhbi3B73S2SZ67rKzBkicjelpwWk6LndsCrbLsIWsDf8 fNtih0r9As+2arfApkNlwuCGq1ZlPGGGEf18OqPxFvnghVEbDdcosP4bIm3k6G2s gFbMl68xAGnTtkS5Gfz43uTuznPzdZnGbIjP0uBmPfZk6GW7AKDhi4htuxr3Y+ud 9lx1bWM9KqUtAwQAiRYHm605RZVBkdzlfYx1Iwgn/l8Chq3MsPrfBMslapBnq1an 2/nEQPmuIde9C6ALN1t03DHpKonx2XgjYVz8pgty2FU7txSSm2EE+975dXp3ov4T fD1KxksOl770PAzixLfNhPW1q4A2cEruGgO74qEX3/fAa1J0nRKDgmA/mgYD/2TS ZKCaFHoc3IHQnkygmGzzZNpVZV2+1kIB8Z2hNo9V81PYpzlYV8SlG51ajW1G3ePc ti7JOIP6MquNUbYR4TOzZy1Dq4+VqqZCB6fOeIKL40IKKAoMMDYFNLp9zcT+s6+6 DTPH27eE1WEt+NQjBgr2ofC/4iAU/nmAYmo4xn7Y/wQBAw1YC6sO6OK1YqygeAug 0cwEFM97WACPFwv/yo59kPUn2OPV90GqWcP9JiM6RFNBX2ZhY3RvcjoAAK9kgTY3 bsST11j0XtHaORe84A/oRwpP/SYjOkRTQV9mYWN0b3I6AACvXbfs2GvacmwUsN1h JIJ6o5Tv41Oiif0mIzpEU0FfZmFjdG9yOgAAr34DrRWil2lE06jH9gI775+twQFW Zp+0K1NpZXJyYSBUZXN0IChkZW1vIGtleSkgPHNpZXJyYUBleGFtcGxlLm5ldD6I VQQTEQIAFQUCNuOvBAMLCgMDFQMCAxYCAQIXgAAKCRCl5n9/o64+oa9/AKCaJbj4 sc17CLwMOuvFVejk4mwUQQCfcrpQGZox97B60MgQRs/wklSEVWedAaUENuOvgBAE ALhxyR0+JaBA2Qa8CberwXHNEuiDrz+N9++Pwy+375dDg2KQ7RUnx7NiRV368be/ lGgdMhLKeYxZlmNPnpoUNINk86RCzYbSpmAASBOnMJQF2WdQLxmsdJNJCMKfse1H ZylgIJQGWI+1q0O9Lcx7Vd1F8GFeJvThMHRyLoOvMVCTAAMFBACN7RHUg2b0aRko DNMQKL6VV6LvBteSfgkXqf2vUovmhQtUXxoYc0QnVPCPuS6raRpxiNz8OLgp0RJF Nk32zOVmc2u68B30kociBt7Kx6d7fJGHL5gVqpebUy1YJ3DBoOIOgcMBKmXnlG24 IrHPq5bvuqGtnwToZEOuEj3ZHzwNuf8EAQMNWAurDujitWKsoHgLoNHMAI9CpJsg 3p5r1/2dTbN+h0CJ+lqHoo70wkoAb+gaM+7jq/FWce/7mNExPIYobdgkvZ2rbKJP x8o0zJqu77IkMLTb/eh8z+dEaC9X0S/uYgN6AUJl/DsEU+XwOd+JY8Es0wJda+M0 qvSGaH6+kTYy4pO5QD1BrfdPTOVNxcFna7HAItZPiEYEGBECAAYFAjbjr4EACgkQ peZ/f6OuPqEzHwCgo3fuvctqBR1zM+lGiitaCcoRH98AoM2iZsG2q1yiU3MebUWD xcPCiuRMlQHOBDbjsAoRBACQ4U3waYeRudWpRA1GiHxbw9CvqFw16gwe4Q4N7LVS KWUffXdm6P3TzrlVqK8FxQQyXitHO4iREKzFipcXam0RpB/KWhUpy+V1qOMTI5J6 pyc2Lt4G+9+IqBR0wuFgzNv76ExrhaS8Pnoq1vsJddsLrB6ZzZFsTBCFrdh6Bk3q 3wCg9yVAa2nj2/IByp1xc8hLvES6d7MD/12gCo3vjQGHqoXAKsb9khD1I/BDILV+ 0g5JMg7/MLkX3DcDALeF8B2J5zN26VMFo9iXAxhPa7DZ2vx7hQI8/9pa4VCp3B9A ssL44WLbdbfdo9HD2Wnkd6WPEf25vDbNtLYj+7sVZY/rMyNj3+SolB4YlhydkU1x hNqVJk+lBYXNA/47smbyDSsJG1EksKSr7KIteXenuFseT2dpgK0+cvlC4rQceFii LF1elFVWhATWgXut5PXBRnTxG2vx35Une+pC5nEncvha+93d0zCK5sACjFXSo0QB HN5fO2Gj3dvy3U/k1swkMN9xKLXsSe8mc2QNkicdu/48iIF5FrcL5+VAjP8EAQOk qTnVSVlDNyanmeWCbHT5y1XDf7flXnKwAlPvRhV71WMkqrgQyZSO/SYjOkRTQV9m YWN0b3I6AACvYMiOr13riT9DyF8K7MAH9rFUqh5JY/0mIzpEU0FfZmFjdG9yOgAA r1ZK4vMwe7MVGkYsBl0OFJFhJWf+nD/9JiM6RFNBX2ZhY3RvcjoAAK9tanjl+Ggi icD8mvH2FEnlCyuiB9iHtClUYW5nbyBUZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4 YW1wbGUubmV0PohVBBMRAgAVBQI247AKAwsKAwMVAwIDFgIBAheAAAoJEFjLmkyF qB84JOIAn1w8JVmBDp+6A35ia9SqWpt52ZiiAKCIHwczU5eSjSlPSm5W8C7dlk+B CZ0BpQQ247CeEAQAnr0w2OcvlUX7E8u2C8dJGIj7wRU5qDazxh0tw55/ybJ3/Kyh CFfsr2dZ2E7Zw6Yvc1u3WTTf82nH4S+/IJFSI+qBi3TrcwVtt8Xa3Po7cIzNvS0b BhqfmOOXJc4ihUlADR2Jukm/QC+f6bO8IZBDWr/7LnT4SwEPhPoZNMFb63sAAwYE AJ2kiP3e1zM+zEo2i2jkOny1Igyn0sRiuw0OXQ9B656zp02G5qtDN+IXhgLdfQqg qyWckP4BLDJ4NtQoEM/Mr2/7oj3h01XpbU86R1QFQOXmoWw3q7yqEWIwfOBqClSF 0A14sXdjQwadyabTFsW4m8Zn5jLW+1sH4PrVjHoNEz4C/wQBA6SpOdVJWUM3JqeZ 5YJsdPnICDfLPDsLTp+mSJOvz8ZkqbdjjI/q3Kptusm2FbDk07+WCtgfeKcaeJZH FNDb0PYRG9S22OGNlhDTmZluNPmUG5syMkoyycBX+4RTirp7LNS+VBIOHa6d1wD1 k8lANIjD/ilD8pW0pAyqN5oJLDgGD9892G7eeE9Vy4XGRmBB6TbFMF2IRgQYEQIA BgUCNuOwngAKCRBYy5pMhagfOAibAKCS4dbgdlteoklBNH9XU3+trecmqgCg4u4N x5RLyPVJoOlZhb87WTBcW5+VAc4ENuOxqREEAN621mjyBM5OvWclduTmwl+5VJBo yZuAulmkyzdDsL6ABfRdf5D+9y4en7BXY2rRLi/7Dkr6zEMXgDxQN/6r4aY0owDl TbuGRwNC8TjwRhSCFx1YqNZ4XCaYk5vQoyhq116HiI9PiPyhwbD6LTPqj97TLQ5V axS8iqniJk/dSWc7AKCA6rkZ88kyrcrdw0PedTsY5Hx7UQQAxyAfT2jrwduNvCnD 56M+4rBUVrfsI5f/rkUXw8416V6rsyvdjzIqpssiwhYNrGuV+WlvIzP9KG4N01Ty CH6ax/CHT5E3N0Q+akkIJUk51k7jpy52BvIBCuIfs/KxJuLsBuamcyXuRCu6EBlZ cu2cfV7WQqi8HjdremHzAXiSi3ID/jkDxssoSYm+mr9qZjpWMOcazGQOOPDY6hVu 3ywt0aOmBqePd+/LkpGFZ5YsqGa2rji0f3ubhgOYYIdVr8iJzhoM8wy9Q9Z1pjkP IJ56tU5vck3WosLujnHYcG3xETtxec8mXlUrFzirPKzlupARhi3Z0/hwmoqTc6OM JuXpMn7x/wQBAwH5EiW2ICr1W3T/Rx6Cb3eG3/JG8Sjo3rpEYlaApMS+d4oM/9V8 3kr9JiM6RFNBX2ZhY3RvcjoAAK9AzQba8DH0bAE2s5RGAEJ5VAWk/+g1/SYjOkRT QV9mYWN0b3I6AACveVUvbR4gGYzhP/+FIlqbM8KFSN9EM/0mIzpEU0FfZmFjdG9y OgAAr239YwqXBe1eAtTrlPkM+BZQS5iCzKm0LVVuaWZvcm0gVGVzdCAoZGVtbyBr ZXkpIDx1bmlmb3JtQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247GpAwsKAwMVAwID FgIBAheAAAoJEKlMD3VlMkTWM1sAn0eideyWSJxrd/trrimzJpapYrQPAJ99nNzM TsSCQwsfLaq0E7kkkS7KtZ0BpQQ247HDEAQAtbvtPTT+OnT55+kSbXMy9yxK6Mq3 D5hzpNxW4jXyfGDJxQXkk/lPvnIYv5Cs5vjeMvE2RPLB8Bqp5HiAbSV9mJkCRYSo tkUfQLVZ9h1dWUwWE9avz+zKWUzzCPRDg5QhDyU71/jHbT/MYdBrI9YtcLo0DiQI l3a6rD8Xp+EnIecAAwUD/jUUTsyxauJAVKYKE8r1syZfehncpH/jtAIW05We4sfS rUC38Rq6s4KNIcA429kM3lh341YWmmknOVFjTLiEMh0XLI/ceJ9uVxhNB1MjlUg+ OiDgI32Rfm3lzmvzW2HEfs8zkX169asltoOKFfCzeLOLleHT2pkN5ffC5IPJYVgn /wQBAwH5EiW2ICr1W3T/Rx6Cb3eFuP+IvpNCP9FJtq/cHx/aNtVczSNEk2ParqkE bsZoGgIF0fZStEWeTda8b2/P8dt8E/hZL8YE86A6y26jjzhIQBnThCdlxYXCI+f3 rwXSdBJYBu6jvOA6Cp7VJkBGBUknV3c26VN6mF0tq2xw8EdB0Z94SBwIObsUJxUX GSx6F9n/BIaIRgQYEQIABgUCNuOxwwAKCRCpTA91ZTJE1s6YAJ90NN6PZ4hYojIq GPHLsoXLX4ZQqwCeNI8dzekcdK9ZkqXRxIfFj4cQH5+VAc4ENuOzmhEEAKMDGobM DqPX3SKI3/W8m9LmNgtDUffHGHNd1npnGM8mSyVfWjEWoEg2GPMEmdX3/tvUUV7n Tz02IJwZRVlrbEPdW76eItMAY1NB43LpjQTrAR++mVAslulUY6a5V5nJKEc0IqOu xkW1LWavujX1JRvlBZLeBkdpsVNuaGJtwUFfAKDfqoZUCcZxnO+dRMalHLfGOn7O 4QP/apMk2mc+GJwpKSxXBvoQkVcfuZBJmXJuUCc4BUUzHX0ZSKNbgxY/kVR1xN3k rMgOCR6dEsGukIsgVWRDj9to/+E6IIs6YKhG7fGcXKhE8z8mf3hDLcmjbCKDCSFB T7PI5TkLzlAEP1y2Rtin/Sa71unGZhNyEfAPW/d1dRcRVqMD/2WcTPUaIjRvAqmb xUpenRhg/mF5rwmHl81VvVBbZCoZ35c0edEZKpfmyYbKuz7GhjEPz6O/UWGYZpK/ 7r6f4kFUrhO5atClnRyBkvmNmdfbtM5hd5jh3lgqAT7tk7ntPAIh8X8/qm5+Uab6 3kZwXCPiSR+iEwRp42GbVL7F/b2r/wQBA+smNbHH+mT2ogDvwebUEYQ5u7AjqZvU WkfnZPKAVQwghkIrT1Vq21v9JiM6RFNBX2ZhY3RvcjoAAK90DxORhCauJg3tbEH5 zO25GERe8T2L/SYjOkRTQV9mYWN0b3I6AACvW0fayFNyPj0o3kQ0YOk+vZDnV7i/ 4/0mIzpEU0FfZmFjdG9yOgAAr1sEI+EYL25Oh+V/MAHMZ3nfeIm133O0K1ZpY3Rv ciBUZXN0IChkZW1vIGtleSkgPHZpY3RvckBleGFtcGxlLm9yZz6IVQQTEQIAFQUC NuOzmgMLCgMDFQMCAxYCAQIXgAAKCRBHr0tpYfBHhMxJAJ91JH/X2uIsYSrKJmI/ S1Zgwoz1/wCfdQoDeGHzNwPI5NaxIZH0XYr+O22dAaUENuOzvhAEAIeRQIHb2kyS 94wRnI2IoiaLMXk1n9y/3VGPfX2TfEd/Q0laFCn/UbfxLEuQ8sF1ZygHiYlE2MPJ WzEVRe9FYUgx6TAvSrWwdJZNwnAKlCz4soq0+YPcsDduFu5NJ2liCYrLbVIfh6m5 uoHOT8/TX3eZZfMeBIYt5ShOjc3t4FDTAAMFA/wLVDdYasFk06YVWXLR6tyWlBG/ WoJrvznLH9uP26vYvEfBWjMAReHyOaiIpnKgDPtgWenb2RHaq1WmUfWh483IXB5m oiO2ZluIJpPixxRVn/cu5hvGAyhQV5GgbiacRW9RSHyaZmi8yZkWu+nS6iNwOx9h PHRUGvzBrGAmuDZiC/8EAQPrJjWxx/pk9qIA78Hm1BGEOtrTuBDDiXmHnTN7vG9T 7F+vQT/JusPW4EJHYO4E2e1J6gyPEGOqrAsLW97WTEN+LW1bdTdY7dhM4jSI+Unv ZqZ71xW06WXE2lxGD4ayXuzP6Q0KQT7YcMnrkqBluRJTfGKdjX0RPXt/5+KWd7H3 VEst836l75/lYfLrbWxaArFjztISiEYEGBECAAYFAjbjs74ACgkQR69LaWHwR4RT 3QCfcsKGxTTd4f5S/liM5MfnCtlAU9QAnia0uQcnuH/aodTQqspKUGN3Z04+lQHO BDbjtDQRBAC9Vf1MkTKc8kSxfdfZ8Y88OJAr6gHsPUg0j1t8gPk0q2ijyrJuK84u jzmLmbtFSITKFfcT2VSD1u4qa0iFqzSwnywtRGYKd0gq1eMhaDcp3SmaMTyrbPJ3 sKFDd98nbTzvnA1tHgZCFI7VZO7HBGgvnd+370lNQsnGRBF/vUDObwCgllBimEp4 tasu0WNvZYptjGy3ni0EAJLsL9W7jR64h6+nZNkdO1jRT45sW8mvyMOt1BkyRQVK 6G2Lut879t/upPCYK+/ohWaf3TkAKH1ucrBm9xHlPXJHZvoIA3brt/OuJmG7r8Ub 70N2vrZmdXas/w5ru7EBcKeii9pp8pi6mim8dXTPS1R/b7BqytB0dlO9zSl9j7no A/9Y5UnQobM/qT1tiNhJEnUwlvvTB1UWId2UiUR3k/eNCxc7IdUytanqofXSxAu2 jyDB5Ymv1od6bRCNM1JNWnOnqVoEd/u2csTAIkZ5fl/kE6HztqRGPB+H0n3Nb4MG u2mpLq+OUNhTnLpEZsZGXqd21eFXkWkThxstrH+kYVYSrf8EAQMsrHk/oVe3Xf3i 4RPIB3bwsBoWGrA4kRK7mm5a6M/pBLavd6wy89rv/SYjOkRTQV9mYWN0b3I6AACv ehBH0gU1mDQlnrZJH1j9rE7y0RQQ7f0mIzpEU0FfZmFjdG9yOgAAr0wMh+wQ/T3L 5WOeVMHnGH1mSba/DcX9JiM6RFNBX2ZhY3RvcjoAAK9nFbd0J8gWcTtZNckFwvKi KKj15fB9tCtXaGlza3kgVGVzdCAoZGVtbyBrZXkpIDx3aGlza3lAZXhhbXBsZS5u ZXQ+iFUEExECABUFAjbjtDQDCwoDAxUDAgMWAgECF4AACgkQ3vD3uOxn296iagCf SizgYr94GzIrMWbc6H1ha7gFOX4An2oeiUql9DoXgvph82AUGtmv9TuRnQGlBDbj tFYQBADPV+xDMQ8NzkqoJyO+lriAUrCNIBf1Kbc6U/IPAGOoED1YVPX4EB27u3K/ EmRVd3clFS085Dau5rFIr3d/xXnLn++wqSgQq0Jc7LflMpIj0P209/oKt6MBovTA Qn3lNpecmWd8oxiKoPP158Zgm7iLcOvRTcs+/p0KAzNvHIvQdwADBQP8CQS48V16 lhWOSXV6u3JOukMeWBw6Tx+7M1CqyBihmR8ZNlF6FPBvVkX0NFVUH2qJn5yr6Pmx QxSRnC3yCEyPBa48xqIditzynMbEIkNUrFZTE915rr0k9MrwzPGuLfaPtr/Miy4B I0dnZ/5U4hoxPwDbp0aPUwRqb8+T9POTZs7/BAEDLKx5P6FXt1394uETyAd28LN6 Abjx+ozpGMN36+SHvBm1QBbee0EWJ9LYnatmavOGPgEn7HZFbgk/QaUQiMRMNQIE ykHjoKU1C5uWEDR+P/wuEYX0+pQ1UhUUZ8v+/wZjAC+X5WymJmjKW2l4LXfq0RpO U3DedzHl5+zcuhfZN03MhxX4mcTHdGNSLqWzikj/1HWl3ohGBBgRAgAGBQI247RW AAoJEN7w97jsZ9ve/yAAnROeKraABkL+JUAzQwMcNm+0JCezAJ0Uz6p+tN5wt6yw yH09JfENI3F77ZUBzgQ247TcEQQArUqUbiVTMxJhp8bA4vMXAzCuLjys4A44DE+u RFb9AGsZTmw/FTPETO7iU/3frlyYyTgIvI2zDF1SwHXG06KF3yIu8LF6OCM0N0k7 KnKpw8M2tkPiT+D8ANrHU5d178evzm40PyNDyKxSGNlIG1N4MIKFtNdMlahLvu91 kG04WesAoLPa5zISvsX+Ew95M1o4Qti8iYHbA/4wr+eYRywP35eb/F5V9bOLWhWm EDzw4KHXQ7V+OJ7JD5n44S5KLPKwIogohDlPmrxDTAJ/YAukApUItd30kr0Uq34Q gFktAsqgCP7C5KEM1TTxU25Tcs4ojUHoDyMj14ECuiTCP0ZFRKUivopgjgRhFTKX VVWTySkQ0g9SDaITSgP/a0FyXMQUYJjuB7GA6r4U6QnIHsxS5xrQgkshb4tp2MVW MhqlhsfOLaj1WZ+oe0DxKw0O3YKTH/EAzmNelKcMbtTcilLaIdI5l+Ylam/bZe7Q vbN2s72Kn2PZjtYqO3Uzqw14bqAJRl0ekleMdZRMMzAsour+iNVPHnlodXnQ2gz/ BAED36GMDF6APjbzsvUK+yk64h67FO9lD4i0FiXAE3DtfiBKzYh3jEV1uv0mIzpE U0FfZmFjdG9yOgAAr3nDQWlricc0AeWTgJNI54Z91WZHkBP9JiM6RFNBX2ZhY3Rv cjoAAK9OjHQxUQz8Wnpik8iZguVXD27lXLi9/SYjOkRTQV9mYWN0b3I6AACvX6xO WYl810CKCu/QJGFZWsNhMV3iibQnWFJheSBUZXN0IChkZW1vIGtleSkgPHhyYXlA ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtNwDCwoDAxUDAgMWAgECF4AACgkQiXmm xVZ/s0q3TwCgnrUiygc8NmP/EDsgHOweLy5+oMUAoJCz7S9Q/1f2X7xXU9Xs2xka KazvnQGlBDbjtQUQBADG4aUG+qgOTGEgOAVnN0ck76AnKb3jOBIYeQGYEgF/lDYb Y7fOQ3tIgQ0jXrKD1zHLvORNsG708yDNR79S5Ci/1nphcrNOPWMujOsZ2WMo5xbl hG+WJujt4pcNSRK9P5fonUE4hV7GXTljg1yZ/ui00Ot7b1B8ryAYE79t1B3svwAE CwP9Hg2r8lBq/j/t3kRO4xl108DFXiQKdj7sXugmAcMomF4nG3j2s219dLEFlSwn 0/peGvjp8JFPfcMPU/xHJSaZLf90mXsf+pHcDWujHgVA9YC6ThYaGx9Je+VmcVYo mELxNnMWKyOJePDU4ViIXhMCvGP0Pt39wcQoiLjeu15+l/7/BAED36GMDF6APjbz svUK+yk64h3k1cEq5Vaa4ZpvzNmxRxEEMST+XLJ7leRFzngFM7CJLENe3+ZTqaS7 d9/a0p9ocVwP2NHOBTLSUiKi8PacU3qtr5A79M2AtUrlnwJca4opneBLJgNGJLyR Gsv6WEWrPZ1PhR7v6SkUfj8jQ/Tzb1lj6DpOApZFH9fHv5btLU+JITTR+ohGBBgR AgAGBQI247UFAAoJEIl5psVWf7NK7JAAnRosvXTK0JTDng87kaiXLAT3t2H8AJ95 wwtp1x0eP4rcO45yUsgGIoWoU5UBzgQ247VREQQA3VAGc4T+vuvVXcka4ETaLaLl L1xOiPIdJMWRWWQ60CZqWXDVpFBw6oG2AyfUZiHhLlmTZssz8UhXLw/URsPSpiGb tpGWKiLs4OCqjslN0lHzcnGqxGWCZJixMgZa5DcWZJjwqdXEbDChgm4ULP/7+iKv IenTQNhFoCXr9MtdoHMAoLpNCmSKlTu1H5GlWmYTK9AndWrfA/47ip0VYgzIvUhI 0iWcG95sNfshApzPL6zPgKBqACogs/5/DfRn9g07BcuMihLJD0PLNPVnOXqQRaN4 Da7jLuJA53XtLgpogxG08M6XUimTucfcovu29/bgjZIKA5c8KJ2lzXSJ9jZxSoy+ O051f7yhXbUmYC1vdNr8GBk69QKy/wQAiHMfU3cbCfTTMmig+zBHCkHjqzqr/zKt R8RT5AwSOIU2aUIiHdV08apCelBw8PbEf077TuWCq2YyDZJmgWRYh5cdaMgdAd7u l1FS1yHPZYshcofWjgXUJHR4I8iPCs5OmdHo2HK3uU2OM36ZQGSpFA5WN1NEm9Gt MSBoYKN2ERD/BAEDE+RZ21hlj9nFUQKkDf2E3ET88XB3l0M1bCxCv2UAfGp+pESW bFZsBv0mIzpEU0FfZmFjdG9yOgAAr1wtpFPolwbaQUa/5Qmzo2/e2AAZMSX9JiM6 RFNBX2ZhY3RvcjoAAK9Sfv2nvtEYMQvNNDd0DvnBNBoxlAS5/SYjOkRTQV9mYWN0 b3I6AACvZ5hJ+Tl0FtvDC+JX0swooQzPDGNCObQrWWFua2VlIFRlc3QgKGRlbW8g a2V5KSA8eWFua2VlQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247VSAwsKAwMVAwID FgIBAheAAAoJEJ7vNM1LEbJfV7EAoJAAKzgeRH40g+m1xX5ZfP6QnCcoAKCbTZMS o0H79g6Zn2wZbdEVGwmj+p0BpQQ247VnEAQAmuK5RcS0zTyXp6SjW2+WeQIpJnJD flL0+iBe//3SADv01qUmw3jWMAuxG+CcCApksl122V9npEHiLC4Q2A69roLRsbxK BPebustfadLJoVYqPsvjnrBlafe5GcrFPnKbE0wV6ZXx/Tp/eSDiQlid4lWz5J+z /mN7KhHANzoRAbsAAwYEAJO5fkCSdNwkisFXzeKslWxm9Yoe1TOouiSV11hex0j9 4Hpz5wGWEXF7z+FbDq+4V0UqGkKxaERsl6HMWNkImj57N/9h1C1YDfiKTimg5tZp KmehXtldpWGCNDZrE0RasrFCKENVhFMhpc4kAnx6rbA0+LhRvJkvkdxY7pKU//aZ /wQBAxPkWdtYZY/ZxVECpA39hNxHnMEofjVNfhE0JAv3KTJRZHOCbzCkO+DxKgcS IsZVSJizzudmVLYbQWMKc0ykAvbJot4k6PgNiWwUyY8HxQs0F+5YYtQkMs8VdIQN ez+5E2RCoB+VflUVq4qhWUxXB737maUEsSc220yeEj04n59OlPILb+A/XvwoCE/F +kCQdlS7BA2IRgQYEQIABgUCNuO1ZwAKCRCe7zTNSxGyX/RcAJ9X3N2PPlX0KeNx UHefqmpPYDF6GgCfZmyC/OlrmmSulJ6NAHxiQNT4D/aVAc4ENuO1yxEEAIEMk4Zf 0L/HEJVk0/o4fPpwvm8zc+KZQCFX70cBVU9BWJOcUquRg9JDJF9bOM5TxE7VOnkI fPvjug5vqP0/vjIfW7LvzIWDhS6FcFaKeG4IoqrgghbAmQIoEWvVTx+7xrpjo1yO qIMDQqYZEmsw+Zd6deQmkUYcbvytS82L0gx/AKC6DM0guH/ddkJlT4FQ9h5cv6dQ AQQAgNdmGPW8VceCL2WaKMoOMmhwQGhqY3+1pDLo7HVFEPoe18A9jlMRHWfvGb2E zMT46/Ugqkf8TzvZGFrWq7W/t45rp5O41YXQ2+ZJH3nl+t5Gw25Hwk0hvpK0jYRH 2nMFR+PKQL2mDbA94LvClAkgX1MX4lrUG8bYj6FrbEnvzoAD+wcRS8A6xznxhs+V sg/KnYl0Qe9dNFPY0hJVG5MxCyDy9X32cxhHYJSHbvS4/LLbFloP+Rhwn3/WeBjs L2lts1ahXvQ+QQw7+qPrs4hWJZU/NSEh1RGitukaG5zegHNTE6CJqXshshI9Ei0O CDahmhjiGrJA3HwKPZlkDMOkza8K/wQBA3GTFCmP28PloZW7fHe9ipQH0TkH+yp2 IXXRWNHjhcbOrwkv7+jedHX9JiM6RFNBX2ZhY3RvcjoAAK9nd2gdDGXr+aS4H9RN o21VL8OsKJBj/SYjOkRTQV9mYWN0b3I6AACvXT7TUKyg8va6X0RToEWg4+feDJFE n/0mIzpEU0FfZmFjdG9yOgAAr0s/BxXRDWjjCqZNI5VKmGD3EQ2CCWO0J1p1bHUg VGVzdCAoZGVtbyBrZXkpIDx6dWx1QGV4YW1wbGUubmV0PohVBBMRAgAVBQI247XL AwsKAwMVAwIDFgIBAheAAAoJEGvEd4BUrNJGQOsAnjgUjTj9/yeCyzBgwu2Fs1Z2 HB9aAKCYdUx3OscN3QmqVVre3pwZY5GmSJ0BpQQ247XyEAQAzHzwwUKDM7+djJo2 /EnWmCijc6g3fStaGNoXDEovi3B2oPiiRTsigX90qB5nFP7whDfi8k4JY2Eig5hH +MGdvni36hYEnQSadsZueYofvQh14N3V8fUmx4hiQiMXyWiLJzc91ZiRjww4wZWn /4Y5f+0mb0fjCaVSxTxo4+7joU8AAwUD/0oL9Gm3gl1XVV8BhJoXVdFQ6PN9yEEX UbtcrfkC51kTBk2NaEGqbB+kC8GEmXwyZcW7AQN7X6ikraUUm3RjTU7CvkSHobBn XYt7FhqZURpuV7eSqZGP5nP7SxWmCTTKgIH1kHCpWRwaexKFjIIkYgyVFqtEx9cE Q6D2kXPh+Rna/wQBA3GTFCmP28PloZW7fHe9ipQEjson+R8J0cZFxO8B2k6Fas1C pLvP8P0NdTIyitaiBUatIGDI8N22I6mqelpWZpTKZZymrDKe0n8h+rTNqb0uIt8F R+6/1qFnL1k3E/+QxqS7VGkRz6xnT+la7OVrexXz18ynbpvzJMPe2SAPyqY+RSzW wf5Z/bgM+A/ftNFfEencn7KIRgQYEQIABgUCNuO18gAKCRBrxHeAVKzSRn1jAJsF 3zuwZ09o7T0yZNm4zWcRGZvteACgroLrVdUuNxbdEllH4BbcvFB06zA= =P9+G -----END PGP PRIVATE KEY BLOCK----- gnupg-1.4.20/checks/armencrypt.test0000755000175000017500000000035412635262326014200 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking armored encryption for i in $plain_files $data_files ; do $GPG --always-trust -ea -o x --yes -r "$usrname2" $i $GPG -o y --yes x cmp $i y || error "$i: mismatch" done gnupg-1.4.20/checks/pubring.asc0000644000175000017500000013273412635262326013256 00000000000000-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.3.5-cvs (GNU/Linux) mQGiBD/yNQgRBAC/KSfe6uVfDgA3BrGpNLhVxT/ytwXMpBI8pEdTiY0jWnYrb/Yu 8wtCeZ9GAux/ZA/ted+7pdibHXfX5PzDfgUTZwrIJa57OUpWwI878AzZxNsnVv1I P6ufGyESKME4PUQO5heKhwAb0gQwFwArS3v4oeYrEljhJ79kpt319JEAEwCg+hTk nylYwYGT/PEVQ4JlLPoWmqUEAJn1HX1Od5tyoK4OEAM5G+wHz3SBj4FMonZNWs1I t03JKHoM5ulQ2FgEWmBVIPTKSDm/jQXPYApz5DpxpoGYbTCaEo6zfE32AEzoXDmG AZE90Xhq/wcEN+JcHpHytAA/n+hYaR3sYegQ52mWMR+vdd99KO0V0jLRcckgBA7Z 2jlFA/98cyy2nYt0QI5Tf+t/d4WBeib2yNWVtZH/j7XpDqHLZDgVAYkazCA6ZF7B vLddBEqVAh1X5tqua4AXX9L4SGYb7B0LRV72alhYiWWHez126KjVgwRTUxtEJ4En HmYJRReLlXosPIRhXSz7HFAqalPXJ0DvC9kzTQnnjPOylyMPTbQjVGVzdCBvbmUg KHBwPWRlZikgPG9uZUBleGFtcGxlLmNvbT6IWgQTEQIAGgUCP/I1CAIbAwILAgMV AgMDFgIBAh4BAheAAAoJEA73cJbXTF8iUO4AnA8wHb3erMrfWV3ij0d/cEiSJAYF AJ9fcbShgTXDN1dIVZvLSW5E93TfC4haBBMRAgAaBQI/8jUIAhsDAgsCAxUCAwMW AgECHgECF4AACgkQDvdwltdMXyJQ7gCfcOplS9yv3a1gj4TCPiNybMWs0owAnjJh NmPvm3h3taFS/VaO0OAmSQCbuQENBD/yNQ0QBADoAktaeO83HXnNFL1QtKYXsGpR 1FOn+5rpVq9I9GWNUVNCDj9fBwHk+yDXMD3FGlLwvSmHp15mG7ztYu7DTVAjrClG psIPqEjTHGzNwMDcMZYIE8iUtTelsyF+zI0S1JVKrWy0YTwxpQpbbesngI0tKWU+ uOkwDWgQ4kSIJPeAAwADBQP/Rodl9UsvuCKf0bTCQz2TmPmOrFlDezojNgZHVJgi zpmjlX4K7BHrynUgQY9KFVjfNVNNou40M4YQCN7WTBSZj/4ZRewJUuR0mi49vrdZ xwCisu9EIbJCDUeNQgr/bBwHOYDdVq2OTQ6XiNdhpqrFjD0FT1B7E03tELE+l2x8 7wuISQQYEQIACQUCP/I1DQIbDAAKCRAO93CW10xfInB4AKDKD5BulHRXb04ynP6Y Wel6I2g3fQCgqJEJLoUNcIF3tp2jF2jBr80WmM2ZAaIEP/JSaxEEAKxxqlg9Kz9D Z/3N52BC0w+JtYKke39vpdWVDHR3MHmMJ/31Y2iSpm0fvRs3h1j9/fBVmLOZglNQ yH62SxdJyZwCelkZzfUy/qLm9Qaqi7wpg0p4EbmWdoFF/A1Zg/MU7D5w5xu+EA1J 77Z6QyALN9rIOXZ7rLLa64lw/MV4LdIPAKC449htJbbp5rkJHvBDs4YxEIkk5wP/ X4hPGlIw5PlHrsG7hdahhTudV5hRGlvosnwsrYJXvKAQLAV1EV26SIYUH5pM/ycX rG25dqVoG56uQqnhBdUqo4iSnsxY3ZMA46D14REc9P//CGvJ/j2Z41gw8u8oB7rS 50djvoaWb5myj7bhacTBdfah3U8dVXcIi1ZFvtiaGAYD+gIF7eNIdpaYiB0427un 4ggc26+Y9nkF93DaMnZEaYSeum6g/g7D1vwINFgQkMYEWi4DK3W+uH0E/n8o20wS 2wvMrbeYaQm5v6ucd001wwFDY6AdwpwP7UCLQcu6qqvwNHdxWYK6+gIsSufLmeMG rsvC0WQqYeu1GfGpHIMCZJlZtCJUZXN0IHR3byAobm8gcHApIDx0d29AZXhhbXBs ZS5jb20+iF8EExECAB8FAj/yUmsCGwMHCwkIBwMCAQMVAgMDFgIBAh4BAheAAAoJ EJc9UOHED97PgEMAn0F8RGDrnmXv7rqM2+pic2oDz1kpAJ0SWPHxdjJHWzoGMrHq ocAy/3wFi7kBDQQ/8lJvEAQAzNix+drHTYCMxS8NiUZNpVTGnWfzMjxCqVyZYt9C Em7A4JcfSbgRUppqKunwreuDmmNGFc1W+lT1oLfvJaDi/oQ/oubgIcq0EZ5gOUyd aj961PV3ltNmaaUSZsJ6jRxaa0FB1cgx6EVB88gR6JB4mAM4KV+Ct/f9QzPv2TMS 8qsAAwYD/jdzptnsiJ124yTW5ewhvUVpmDGuT9CuA3ggW65bjOhfravX5rfHMCXL PXMNXFgpA012vghVwun/ekkj7/rxapZmlE28YpSDj8Pwn/lkqNAjy466My+wUeoC gg7mEg/75is2ogKzx1L52nay7BGmfS415m7BBjWHsiUA6KRtFXt1iEkEGBECAAkF Aj/yUm8CGwwACgkQlz1Q4cQP3s8svgCgmWcpVwvtDN3nAVT1dMFTvCz0hfwAoI4V szJBesG/8GyLW+e2E+LiQXVqmIwEP/JTvQEEAKhSVnbs5Ndf5tAHPyv5mm9JM869 1FKK9W5MYeL3MSRzk2Rd2vWOrdVlKcJTl3gjZGPfLUWFIOgONMBYJCs/+I3Tmog7 R1tmzqq7yZif8B/+c3Zg6bYbudyRIF1Cj//o9nX672E2WMctptdQwOvECvYj0gZp LIJRTEBNiCWrcBABAAkBAbQmVGVzdCB0aHJlZSAobm8gcHApIDx0aHJlZUBleGFt cGxlLmNvbT6ItQQTAQIAHwUCP/JTvQIbAwcLCQgHAwIBAxUCAwMWAgECHgECF4AA CgkQ0SC2Juyr9R1qQwP/bCDX1WGk1u0zkKJWJ/VXnuH3jk6ZevkuHZICwjlqAxv1 de5P3Jeya/4kPmEQTotEv3xcDAZ+9pBL3TrZolAKhxkBZ08l4QSy76kyf8hB0eoZ 2Svs7LrGPBJr6CHX0kyDiapHgAhBKQq9GhNKpIAZuL6DK2dOaQDtoRSW2iB1h4mZ AaIENuOOnhEEALZlsUNfTCYkjzIsNhB0iJl4C4cuZ/IeypdosZQxm1aIC+f+E2ly 3BqGbMqbmheKcdS9SQs5DSzys6W7XmeHDhrNzfStM/UuwiSfnM5E2cV2BgLpErKE 56Kb/rf7/Ia12dObj2VV9oKrCwSYEISRdp5YMar6J7Vvz0nz1Pqf8mq7AKChCSNV 5UYb4H9LMnr7KJ90dZBWRwP9FcPItdfj5YcY/Zp63nVeUqiNYbCxmZz0s89iHBT9 FxQ7tx7VBBvRcWVRUUGFjQlCkz+3L+Q2L5oZYXOKBtD4cBZmRS8Dz5UgBWd436n5 IeEYjItNcqkBhOrjoDC+WVnkKm9/TYKn/5bVpXIDSqcFYzJ4jFeZH0c6LqXHGfly NqMD/1Vm585daoJeQG/Pg7LdDkVuNBDT/63LysOfw5NqI+LjUXJScSLos76rIFLT 0WOdmP74+RxFxdb31I3GYQlFjsy40e3nAi8QfaM0Q4n2WzPNkUENu7CyNccrfn6U 9sYTLr3EI/bqIRp/KwoptFcmETUL62TxKcr4abrayK+Yr/lqtClBbHBoYSBUZXN0 IChkZW1vIGtleSkgPGFscGhhQGV4YW1wbGUubmV0PohdBBMRAgAVBQI2446eAwsK AwMVAwIDFgIBAheAABIJEC1yfMdoaXc0B2VHUEcAAQE5eACggS5kaZb//GX0qnqe SI6hALml71sAoJejRM0/v1nsD0xnMGWPqS5MnC79tBBBbGljZSAoZGVtbyBrZXkp iF0EExECABUFAjbjtqsDCwoDAxUDAgMWAgECF4AAEgkQLXJ8x2hpdzQHZUdQRwAB ASeMAJ9MeUVrago5Jc6PdwdeN5OMwby37QCghW65cZTQlD1bBlIq/QM8bz9AN4G0 J0FsZmEgVGVzdCAoZGVtbyBrZXkpIDxhbGZhQGV4YW1wbGUubmV0PohdBBMRAgAV BQI247hYAwsKAwMVAwIDFgIBAheAABIJEC1yfMdoaXc0B2VHUEcAAQG3wgCgk/Br qP5WblWLc2+6jwlmuLg8n8MAn12puZol0HwV0mcd8aHWtcrfL8lyuQENBDbjjw8Q BACcjdcfV/S7I319mfDvbOwczDvTqDsRbb2cPhQNAbg7NFlWJKtRrmff14jtCt9M 77WZ5W+zTLwX8+8Wy3mMfrys8ucZKtfPixOXVPhyinUUGSq68IArA8vLSUTuOO0L Ii05LAg6jzGhN9jgkQReZyqxub4oe/3JhIX9grgJ/tsjNwADBwP9GeXmMrGi5wMD 3qkPbzb1MqwsVBJq75eLLxu85JIN2XIAGw6Q0FJp4o7d4BAQqAMzt3ONU1OcCWlD QRDxj1nynE5ZgRBiVoyudEELgNnYhp3MSEuUg7PkFWn+N+GuvyhVUHApleyvP09k vP57hif6yJRS+V6L1ugP0vZmBI4dqQ+ITgQYEQIABgUCNuOPDwASCRAtcnzHaGl3 NAdlR1BHAAEBIKkAn3A15g/LjVXSoPwvb6iNyUp3apJ7AJ0cc1Xh4v4ie9zgirbx ax21fRqIKpkBogQ245BnEQQAvwwkLp4Dtoie4/fvandnK4wVPCvgJkIbNuyQZCar QGwv8RapBwbANT4vGW+ky2vzgptj21xYjOcdNMIhJ1Sjc7hjs1PLhwepMFrS4/Pl e1TljpEgxLZ5UxertMvSTr7OxsA76jjOQt0B+y2vs5zXgLtedux4+pdFxkgM8r6f jZMAoJ5LVNdVRaSkiHaKZWQWsjfTs0/LA/wMHP/PdH4kjFmDRqOPp+iB8YYwQTPZ S/gwHtUbQhLcFEljaxrCMRZw0ZDMbzKWk+BrrBvgz4Wk3XawwUshYgi8SgwWIDG0 jusEPYOs1hBIdWTEzFVP2pK/NQzhAqJV5/390OLEY8SN4bts/LY1XsADzU7lhE0O ohx6FanaZCuGgAQAn2zK53yuk7o8UrPdTHygVn2McsPYYzOvlVfHCSXQ14oXjCs1 nK1XnMIGGM7pJjYpzv/wUZkHLNcHX4uVHXxyzRQ4oMPekncmaR8fu/YIQ9zag5s2 GpKESKAynGQCKwI4H5eYn+ryIgOHNS44UnXFUwbEsonP5pJNNRIM7VimNGm0LUNo YXJsaWUgVGVzdCAoZGVtbyBrZXkpIDxjaGFybGllQGV4YW1wbGUubmV0PohdBBMR AgAVBQI245BnAwsKAwMVAwIDFgIBAheAABIJEEE/SvMa/atsB2VHUEcAAQE+RACf X3AwFwPu5+mr/f1Sa/Wv0m9T57gAn1TBIoUErMqJehQZu73N0u93fqSKuQENBDbj kIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8FmfdIXnaNLOo yi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//EGIZK0zTgW13t QwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwADBwP/R009s61X /FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqkswV17bJG81czCR E5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD81VP+6zBhhTUb pazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2GaITgQYEQIABgUCNuOQggASCRBBP0rz Gv2rbAdlR1BHAAEBta0AnA21IY9iNt6wtJN5HAoYDl99mIUOAJ9M8Loj5fIZq+Mc mtodOBL9tII3Q5kBogQ245HNEQQAis7GTDqtEM6luop6eWsxFi9+qhUVp9N6S+xl bwzQZVA4FjCqf1VR9JX8fwjLecmxT5xThQVcRqgeFVaCyky2Nge/FcFMPZQeaP5j v5GRWc5PvH9Sw8pvGOTB56V4ZeR4cQLDBm5CF5tKu1BCWWq2MLHfct7TXe6QCzZK cjzdw8sAoN9VvrKN+EbQC+THzdWaUWpdcfWnBACFWEyLVPTpI1jNsoCZ00F8Fau/ 2baXk8mdROlJZS6bq54ksfOQQzReBWce35h0W7NeBRp+yeoSf7Y3i0jTO4mrOiL/ 0NCcS8qKNnGKG1irdLes3pQhDZpcUe2G9W3FnGhxl6W5hpYc9550mUj2H3I5tmfS YsVcVjpNSIdBizxE2AP/SI1t6q7LHMQp0h3MPQ2z7daMhUGViXnVl2+rKjb5T7bv SFdV0iyyuyoqvUPBGWwJFLAxj6esHRlQ6W8togHuoJCR7cL2bK798mgYOExk5gBe xq1VHQQZN1edK4LGo2ESKrCVtkYwBzAU76hYFKAbKMU8dMxI7DRdLjZ3vdQ3FNq0 J0VjaG8gVGVzdCAoZGVtbyBrZXkpIDxlY2hvQGV4YW1wbGUubmV0PohdBBMRAgAV BQI246R/AwsKAwMVAwIDFgIBAheAABIJEDGMH676720bB2VHUEcAAQFnAwCgs2ha IgJu/UEpmCEnojO1zCoaBwwAmgPAlNY/PttAu6zYqTh2M9yn1DIXtA5FdmUgKGRl bW8ga2V5KYhdBBMRAgAVBQI247gAAwsKAwMVAwIDFgIBAheAABIJEDGMH676720b B2VHUEcAAQEg3QCeOMf0g3znbc8IBiTrIPUgUz9p3WoAoJ6eRZTZk7z+hTyx4JDc eReQbYlGtBJFY2hlbG9uIChkZW1vIGtleSmIXQQTEQIAFQUCNuO4HwMLCgMDFQMC AxYCAQIXgAASCRAxjB+u+u9tGwdlR1BHAAEBXqYAnjqVBua1ZFlSV1C2nhmc6m0/ tkm1AJ9x5gxl8wCepQomIeTa0yG/AO8CHbkBDQQ245H/EAQAtKXtJo0R/yZii95r m0k0TChnHe+/pfKbJeBrXAOoqjY94OudENscYFvkG9Yi/UnoiCT/CrhH4+r3z1Sm RypEQH7I56W4TfM8+1kGtsvJJJqqIx6BiIecAA9zROqMftQ9lr58kplNSTrgEJRA 30QuQvYUq0AZDtE1Ali9sKrg79cAAwUEAJd07hrdkgrmEl6OEdnTWaQdrpKqhzo+ 5500Lu2VaItTrYGWMaK/8O/Nxsyye+T33UDEnek/hm8qvkIKWogb5ZlrXOa3Bd2Y J8YlvZ9s1JUPjOnXp7myU+vwKn5+8i/b9LK/Cu5E6z6gDNJW+gwDMAZKTfKPmdPm iKRuf4zrZ8LkiE4EGBECAAYFAjbjkf8AEgkQMYwfrvrvbRsHZUdQRwABAY+QAJ0R /tZntf4hw50uZbV8rDnZduPwTACgj04QKUO5SXvC2K+tfpV1FMK9UymZAaIENuOS 0REEALm1DndAe3BcyRxeb6OTcIjGdSVz48jai9jlhP132niYgeeaDJlRD5itSRev cFO2QaaNZeDxCFnD+1kTKrwRBZfvC53pUZElveZMBa9w/E0Z2q2ct5H4gRdbd93Z 5FU2mWMQgyjgXWf2Ykby2uoGfyh4SE382ku4d+htjGwJRpY/AKCkDxbBD4wcimHc e9puf9ibv+HeIwP6AjQCmiR+zfGNxy4rNUoYacrST9cgvRiY7XnN7oM2Egu0Sldz SXAXgl+KJtyoYg0jemGFSAn+MHas+kwKHKKj80drexc+vrqcSIIeVhp5wrNnu7jt Xl1AklzjX4gxA80Shk0I5Hb8BaPvPNA5IhpZ/6pka3CCwOevHcDZzqwYqOUD/3W5 KVAYahg69i3IaZKGMkJas271KVydcZX2YptY365nX7JPN3RN4gc75k/AciGXDKKg xB4pfeS5iad6sNclXgKT/2VkftF4gSxBfRoXADnOYoR9gAkly1okV6cjJitv3q07 0190JAHKqENXBVgsDTQq5YMnAfOB3ZuRl3Wo6e3AtCdHb2xmIFRlc3QgKGRlbW8g a2V5KSA8Z29sZkBleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuOS0QMLCgMDFQMCAxYC AQIXgAASCRAWhBCkj8KC5gdlR1BHAAEBIuMAn222gK7ibwOXzIKd/gZP09JC/3+e AKCOelaqqYqNNbku0gA84+O7d1kMqrkBDQQ245L8EAQAtsGp/UnA1y4AqjewlkkT OQevLwtzwm3pmLLjl2Y3TfGn8Ni0h8Wd27kV32MUZyTaNaZuDxpDEO2aUIpGWVQm WvlqCFV2F0Z2AI8R4bx1tC2kD758hUvR+S2hn9lK7E1lQPuvec2LEml+uvVxW/Vm 4iDBgeMlIlz70MFC9LUnfpMAAwUD/At7Clo7D4dNk43BMvhQ8VgJ+INy37Dj8PHX 2sCZZ/tIfSwNIU3m2ygSVreTlDKo406v6Qmefs/m9dH9lsBE/8QL40Ek3SY6xV/Q zTVN44QgnpRKWpfaMbGzWJVXeczlNkTeIZZo/nhDm+aMucMu/e7EKbG64BnrQk7L z6LSKb2xiE4EGBECAAYFAjbjkvwAEgkQFoQQpI/CguYHZUdQRwABAffsAKCJwKTp e9OoS/fhFdVKSF/4RwMc4wCfeSuo9zll5IkZrtF9FxWGblC1y/KZAaIENuOUsREE AMhuJkVEGWoIw4JdMQJ2kmywkOcCamKv7J8ApfiGw5V3KB6l0DTvUCazysCkAFL9 zb5O5qmVp3zD6LJCzgEq7Op5Ar9haPQMOrJjYszuolu8V3qcL8Y4aOIS5xNNKBjw g4VJwFNOSztqUwaMcB1bNKOr7WmlYl5NLOnThQqFXX/TAKC44hpSv9wxVqFK6iIr hN2i34JHXQQAq6dbJydQbYhoZio7ewJ+kKHOS1Z1ONSf0RIkCMorVBQLz1/n4qsw 8hN1Q/Kl/770y6YGQmL7xHQZUnzPCHAp9f0IeGsPSR87rykIPFnJb50PM6v+0VfS e4f2kvyiIQySKRoYumH4343Uiny2GH690uE1SvcQ9GWtwB+/5a06lvID/36SlrvH ycifZKh8mKyP4+MpLeUCgY97R46gr+xUG+BWPLcZzd3y8wbb2v7ZZEikbC6G4sY2 VBhfrkEdXUwr9ONi8WemhFKq1MrcalHNOaQkgLxGVfG19h/+frpUsHcShM7NYdjb 0kwImeeM8yhoxzZhIrXQGjw//bucXQIqjxcRtClJbmRpYSBUZXN0IChkZW1vIGtl eSkgPGluZGlhQGV4YW1wbGUubmV0PohdBBMRAgAVBQI245SxAwsKAwMVAwIDFgIB AheAABIJEB/o/G8EJZZ3B2VHUEcAAQFaWACglWew3yvov2GRshLtfA51qtIsZYoA oIRsA6DBoC53p0o8koTGftRHHpImuQENBDbjlRIQBACDDIJP3vJbFfyhJHeP4zSu MhY+YsvxWqJ/NNCNxlMxE7kANgE94HrUfhrleKW2VhP/NG/YZzVudFCRoj9fkl31 bWOb0/Kf4DRcJ+XdDv6at26YBUSZqGsE88fEhQ8AlTxxHMDhxNo+S73670QTsilN 9ra/e+q4vlKMLdPvdi7gOwADBQP9GKPXQ6oY0dlKDXGHxGcFoUR2miXpz9890G84 yZAEm+R/OMQkxKb9HahLVUyVKCKPC4eVY24gsKJOEDy1Um0BXh6kym+zfej43r5G dQqOjqywjTnD0b18YAsEhm7rizJECRLrZ1y7tAziqrmPeCl14e/S2u5U4I0XhP9V s24HNfqITgQYEQIABgUCNuOVEgASCRAf6PxvBCWWdwdlR1BHAAEBCXgAoI5oimsZ s8ZKmLb5sPB4AZzngCyzAJ9og9spt3EYXAB95XmfzqgJBRv04ZkBogQ245UlEQQA nKdAaILozJ04V6Z+FIwQEY/aF4EFrJJIc+uewF7ukZl/7uUZqSxqmzZjbqigyMFG ybJSMa6TpwN0BKG5CJe04R/mVCIRsz1Jx5YXezN3UFsNVNE36R8l8dxWG+wgj2m6 0gu4VlodcpVMc/kRiSUgKUfg/xmPnRe3SJZSlG2lBm8AoNc/r5DW86om3MHWK8Ao yhvVXhWvA/wOcjx6gfTTKftzpQBhOF0U0fC3npQC6bvjLjTBhQjC3WX5rfwJqMmr udRbEO1sFqzTOQPtb9xatMeVqTcOi6+x2zfXes4nTfi9Lgq1z8HhE/LnktwxZxyP eOXqXu9N023IyQTv7mC59C1xMZk4POOv9WZUGz4C85s2/9iTJCfkMwP+MRW0S9mH misruCY6TDVFc12KIFMIPSmWav6gW6bCAA+wIHfmcSyR6MHiLV2gtJ0vQuqgyWfe TiaxPof07dg9pZsV7Hk1ZUhEmloeOcfZmwtHkRhWGEbEsd89IWMDJlwNJ7Y9JZ3Q vK7vB42bQVvyhdFQdEXH0slvlvsgKtCcaOa0J0tpbG8gVGVzdCAoZGVtbyBrZXkp IDxraWxvQGV4YW1wbGUubmV0PohdBBMRAgAVBQI245UlAwsKAwMVAwIDFgIBAheA ABIJEK0bD61DwtDHB2VHUEcAAQHVEgCfWTFa7EbAJLX6LsWnVwXPNkIfJwsAnAmr 5Ebu7H2xASainZXaYp2MFmaSuQENBDbjlUgQBAC5mWLT+9huzqHUeEX0du9EcUx4 +ND31KTyH91PHs8jt5KowddiHQ9mCFyGVusxI+d6bF/AxsmuZ0r1Y3RaH0ElR7bJ wfx+1RwZGjkJ0RKCJx7OIXpWDg9DP0WXG0SG+uXurxHrLs76PTdAAkpQbAF23njS hnxhgqIO+BlRnGeh5wADBwP/VvZ9jMCe5atBleFdBDhw1XEwFUUodJwfbigVVu4R YuAz+12AX4I/DZW3NtrzJJHUrzRVKCxB+zqfbDIJV34gjyUodNlP+l8gIVw8mUcq ziB74k2fUhzEECKrRBE1bmEZM70p0nwwVatafYFunmTfaugDO4JqCiJ6UWjgxUVl Ow2ITgQYEQIABgUCNuOVSAASCRCtGw+tQ8LQxwdlR1BHAAEBjv0An2hrfDXgptM2 7LJjq12er/cxZPMRAJ490qYy08qnpp4h0ifShMyCiQnYg5kBogQ246LiEQQAip3H OFHnnO3VmlQEctkpjVbn3knp2LOALCDz9L+fYxJeySNK2/uCWyCaAM1v4XJtuhkv 1G26UMIoPPz4DFFeUHwUk+AhDpX+/8dmuBypPbQ1eAJ+6tmja9W3lvrcMX1Bllle SNKNW/4ilZPy4kEYmjK/KSV2Nuupuv9j5/S5g7cAoPiKn8fILCtj2Qlr/O7hCgDi 8x17A/9XkcS6grdYU/fIHQy8pEU5SN5DKuhCtyPs//KQyDA7jyCatXjOvGHRWa/L O4tcntUKQ5bT2B4Fp1Au997owCgDXcsm5tx6wN00gYxAITX3LvJ5K1aK7wEkFAwi yWrVkViU1Fazx/hlyFzAPzouiw7IDQziWp8M87wwgpvIVkKlvQP+MWAGeDVRa0Kv ILUDyVrjCH0hUr6WVjYEIGGZ7Yl0lBmDlbNvE//O0aEcdNrbFQ8NjwPM+vKv10bj PTXXrcW1F0BwfXrMxS4t1tYnbF4XfwuEsok4BBVxvGPLPeBGnYJNTwGBzehnd0mO 45nr6mBlS5gae6n4+WPV0jOUhNE4fny0KUJyYXZvIFRlc3QgKGRlbW8ga2V5KSA8 YnJhdm9AZXhhbXBsZS5uZXQ+iF0EExECABUFAjbjouIDCwoDAxUDAgMWAgECF4AA EgkQ/hgLHanjsLIHZUdQRwABAfruAJ4iU4M5s1xsZiXa0wLnX4FBBl9abgCfflNp wyEp6KEhKCPWwPRG9WJc0qi0DkJvYiAoZGVtbyBrZXkpiF0EExECABUFAjbjtzsD CwoDAxUDAgMWAgECF4AAEgkQ/hgLHanjsLIHZUdQRwABARrhAKCK3IrzNqME6oA3 RllOrx87OCIRggCfVkR+Nf6N59lS5j7jMXOuk799fQ65AQ0ENuOjBxAEAJVJ1fFR aXPzUWOoeBHhvUS2aGZbz0Kamwd8qVLCVi8G1sH/LtMUh+8CvhkVum6p7Dom+2Mg Rmhe+iVNbAdU8QWS4bQsBrTeiVpinMLpkEO4uRvT1G6QIPjN1jrHBsAxGw7NmC/n 3stle04ssueY7JOmyNEMvO1ay42CWbmt985PAAMHA/9LJVm8UR0RWfn91BOnt4C1 d2ttkQzfv1y0InbrrdFtNl3nmUgF6/V9OcpCS8NNjZ7nzIhDgT43Ov32qD0LJ/p7 c6EStNSoQE6G6wGB7j/sTkushUy+joAVT2qCfRKCye7/DDa3FXDdcSOovweCX7hD /nthG8k576rb1h70svx5qIhOBBgRAgAGBQI246MHABIJEP4YCx2p47CyB2VHUEcA AQEyuQCfaXpOx+srd2RwCfu55+7BpsWMW+QAoNSDRTeADM6hFI22edSk1XQL8ipU mQGiBDbjo4cRBADeZztXPNYwpoIf6BfqepImZqhVd2qXuZBJnEvwaFoAl7er42pX XLZhWIu7/gWODfcyNxsUKgMbeQ+nWO2jdcZQtt+gmRAGl1F5LbxsP6aRw43W7PAk bmYgPY5tY/dhgFGP5puoV9mhijpFcK/cjeg6wNgmjuEsCv8BF5FX4/p2swCgwmgc x88EpJF3/EDrTk4/8Xr6Z88EAL99JWgnl0w2TNiP9T3c5mtVdcYs32ntJH82TiQQ 0LR0A7zRY5ruojNZC9LsTht5K69AJakrDA/Fu5mr2xYoFJcW4b7rpeKUy/wYifeO hYY5T2NDYvaZnQJXZ6O8lGLFgAxCmnZEN4IRFahKs/gAmG86d6fCvuSrohSZvQ+L sr06BACFT4tjfuL6MZ0VhsClxeBPny2AM10+bDDM5eOl5ODLN9Nxf+SRu5AdIojz 2OqD9Jd55WobpUXGzTI+0g23636IuJuH7VGCF92nFwkjdIDblRoqYPAsJRkMiC4F kRaeqF0DpgJacYSBnHdY3Yd7I+cvgkK7oBjzTiU/Zs5hZAeK8bQpRGVsdGEgVGVz dCAoZGVtbyBrZXkpIDxkZWx0YUBleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuOjhwML CgMDFQMCAxYCAQIXgAASCRDrqfJA653J5gdlR1BHAAEBriYAoJdBwMXGVRTFlfw1 u4XimCRPVFRNAJ9WFXysx0ugWaIaLJ3tyNZQHWoARrkBDQQ246OqEAQAj7WdaOJj zJNs2G8rvrDZvD/uaALQ9PtdvYAp/Drp7xMH5T62+KKTlKdO3s8IQBPiuFocJNir 5st/nm8Xl+gcOZOvtr45c/cl54fGO1gOjBZOfgbkdBVK/LMwuQWIebK4qCZnAOlD LYNGVUguGLnEQBSfnhhkgh0WA0kqt7fYvpcAAwUD/3cOEqPlMdYeLnGEG4wPxtyV IchwGOv0YRW5apbz2fdO7otj1AFUN5WzFw0A5+WHza1OIUhg50Zco6HnwKx6F+Lb Z5aOc37EAvaFgPuMxBfkaWYagCof3jBF0CbTWUXV/D5/dFmIeuGTuUMNsGVH+OSM W2hBN/7+aJK5LLHL+hzpiE4EGBECAAYFAjbjo6oAEgkQ66nyQOudyeYHZUdQRwAB AXNNAKCaviZP/A83ammDnHvkTdxefqoHbwCfaE7+GAg+R/+tJLJ0DvZllz8xYzqZ AaIENuOlJhEEAN1bOV3WXINYOoY9LMY6x6FfJNJrSk59VMtySkmkOkStyfyNLxwq teRVSjAjtKVmE9GZgj7mmoZobkVnlUl3VN8paKFzs74kMegrfJqY6eHo4VAU9lQX X5aUAaIVctz5Y4PNuA5IzL/zJcDqfTN76/d63mf0rOJvewMaPDkMyaJjAKCZTCeh +qyQdW/VLq0ODTyZcAsoowQAhUbJ/2KPcHM1vR9VgZQ4tTTuepDdGk1A9oq09CkG htGSdD9lJ3O6IAtwIH5Drrh/VwoYD46C2bQv9/XFSYpFbetP2XMy1wLLqRy50IjY 4eb+A5w/MqqOPmiekPzh+BHgF1ux6FPz66ubEWIr9sUUjp4LUvl50FBxEuztMXaN jdIEAJ1fL3IeDqINMmHKy9HtS4tYT/Wz3KyKuFmA9vS/IgXAd9HMz3oBgg+ktmv+ O+SsNrBPFgZ8YhmuPtTIZ4+7tEJ4VFVVfnkHp682/d8CpubBDUYdNftYcI10CQ/T vJPFn/Cdm508DNDBGQR9nf1N1xxs6Ed8e9u/dE1DRXFta1BStC1Gb3h0cm90IFRl c3QgKGRlbW8ga2V5KSA8Zm94dHJvdEBleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuOl JgMLCgMDFQMCAxYCAQIXgAASCRDUv1fzc3LiQwdlR1BHAAEBdy0An2YZaL/VMei6 H3kreYNoVYow3V9IAJ0XO2nYsUNoaaa7+LzaCr5rphfw+LkBDQQ246VQEAQA31Qj 2MGefTCoF0x+D+9UMxZ6RuBPzI6gzX1tzcUPWYy38NIq+lNYBg7hLFkUfn0uTsAm 33h2Q8z4/DGT7jmQWpoIg7yNTr6681L/gYo5FhhC+qERZ1iPMyfMwwD7rrz9bthU GTqChV2h6NiPUPM7ic/D9rxJICXy8dsoj0dQ6dsAAwUD/0ggimQTUCGmNHHypor/ GY0XAAL4Vy8jAsC0FH1UaqDVTrTDH1qWLRnS9uxEsOJIGSLMSdxC0FZEYq4jCm7C YjTOHTHvvYDbhs9QhvW9r4VD2efbERFSEYMiH69ASQLGDp/O5kOZTgQOvl5oxzvs rOMaRFSWcn66uUAMORmHKz1giE4EGBECAAYFAjbjpVAAEgkQ1L9X83Ny4kMHZUdQ RwABAY75AKCVZupUbMXq9yw03M34RS9YT9MzKQCfUgFd+Fn89xqU4Owg/MQzYlLr eUmZAaIENuOl2hEEAKeOL2pIdZ+zQtehxdL9l/uDBFSTuN9rLb8DgLiw8Z9j8U5C EH/M38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT83lq+Ad0lgaZTR4z6nrd5ViOlHPl fqo4RPZPzPe+uF7EfDl792sJerXGAasLosmKnxKAyJyVjh7eZcjTS/hUhO9zAKDV yLHJ/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlxsXpcrCQIoKeDXgKNVv9L+0Pebspz r2WOah8iBN1QOkbtexIKCbb9mmviEnJU0FFx5MIw4mipvY4EpCaH3McGwJpCzWmd zID8Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RDtfbIlbwotfbiOT9Tr3IPbH+tHAZB yMRyvxID/RN90WOPSpODxr9AH9btmeJD0BfNt99116+qdwvWrTofcbkBgzvB34vL LDaMKVIyinxz2lYyC7aSpA3uzjZvoPvPrQJFLE0dx7DSkUTtWbQGByRabpyrXYdK ZzsFXLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq/A0jgztaZVWa37IYtClIb3RlbCBU ZXN0IChkZW1vIGtleSkgPGhvdGVsQGV4YW1wbGUubmV0PohdBBMRAgAVBQI246Xa AwsKAwMVAwIDFgIBAheAABIJEBPbllU0xuPxB2VHUEcAAQHs1ACgyFQrt3yZbUXj lCnC2luf8R1K6o0An3j4ZVjoau0xsDzKtkd4PzNIB52uuQENBDbjph0QBADOk7pS 4JZak/26nkZWEs+hIIF9IgD0labkCnr+GNDmGJrsJxLwTjU+NoaXo+SHmWPaqRJQ Frz3ZJfJAxioyoSr+Hv4Fbv6frZIJEy1g4dFhk8DiG+zR3uPOcZCUyyW3HupqahU 0/RcX7CzXAcuPJCXeoyeSsBDyUAk/6ODs/kerwADBwP8DrWpAtFexIWvsswGdpRJ HSjr7j8cJ2Hy36acB5AEMCSd7kNM+LCrOqyOhh6RfokrvCT6ZuwlN39nDnkmSr3F WbqcRSj8khs3tw+Uyp8ItqhL621vFn180I7dZM11bECv+YZlmIF/L3JNzFR+jmpO DR99bLjQI0dpUqT6IhyS0bOITgQYEQIABgUCNuOmHQASCRAT25ZVNMbj8QdlR1BH AAEBJmgAn1Pl0Ya/1IL4AnzJTrYWN9u75SN9AKCcqVnhi7qdg6qLmSBpGPG5qQ68 /ZkBogQ246f/EQQAl65ub9rEKS7XsXwNkvGtj1K7gnql2H1bJ5GF9bGCWhWmB8WF tsAy9XUeC3WbrcuWFgTsbtTfXZ5I7j7HSG6ukf6Ycusb+bA1IoT+GAQGWpFeWoXe 16wXZFl0pEc2iUnx9ThtoQF0fO5YlbvHJPEQ3kvoqcdb52WOOfOuCAJxc6sAoNqo 5w0YxgJ9jkj7J4cmR+OFUEKXA/wO0jrvYE7eiZeFUjGNiRotxzhTzh53rxtz2/DW G3D+IBFOt4qqxxp3WCSNO5SnBZWUW50hDkhTxS7jSmsfPBmCinmQ6EF5FaFPyLQB q0uKwhMaWficdrQS9syXFlPuzQ5jOS3kVAxOmtDd7CMTC8892dj02qzAE46QNNUI 91kZXAP+PINfoJ8hV2zvlGZ9tVlo+Lgsl1BOvxvEgmYV14gyTmMWga5sNq7TdMdW i8Fz0Vy7sI4S+RMJ96rMws2iTzWLi2jGO44itoWttCwqmGJmlSWurRsvYhSBgvNC LXFGGaQn5ncO1tqKnWSDf625UnAipsgW8P4Agd5qJZiwXfJ67Hi0K0p1bGlldCBU ZXN0IChkZW1vIGtleSkgPGp1bGlldEBleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuOn /wMLCgMDFQMCAxYCAQIXgAASCRAMggxx0mmTEwdlR1BHAAEBQPYAoKRB8Ey3Ny6T aKaGoL2GNFQEwM1MAJ0WblK0ScSKbm1BN+2hfDmmKRkgvbkBDQQ246gqEAQAkdlS JYfTiZH/CkfV8tnhI6IDz+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdT XBK7MdHAz4RKFnAAXPDBZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsO KVyPTIU5vq6FLmsWmMB55iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZu NKHJgag14bTaBw0niZK0KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//p C1CNQBBO47VUi0y1UVjExtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC00 7l+aonKzj5QEo1XiiMNTFFmPiE4EGBECAAYFAjbjqCoAEgkQDIIMcdJpkxMHZUdQ RwABAY+uAKC+sJk79PGOrcXpT2/F1CqWssOBcgCeJ3lY+tmSH3V/eAz5BdNB+ar1 XhGZAaIENuOo3REEAMFaZuaYHLD67UlMCLHGPk1dFdAn3Mu2TFFDUYfEtA/JDOiN ZacPiQSZ7zK+wVe66Vs9fzNkyeXqpwLzC35vkTx0K1m69Ave9LnXIZ70zvpVEL/U eCuITRiocxNglPgn4dyJ+2V0cWJ36NGcZmkvBW0vGItpYCbpIGLzYVOfiVUbAKC2 Nze79Iyw+DKU9HI39B4fz85nkwP9HbIb9z5kXiRZyCaXOMnFBQ3bAZh4Og5ZQxdL yZ/rIX4Mu3DGjqg6UtosdVNHr6ofZWHPXNqqTUivoUmOS5Qa8dtUW3YGa8vbpK1O MnjMLhQVJZg/eou99s9OFP5GgPh5r5Vw/EYQZ6qzS6YiYnqzSt5LcolL2+Ae0ajX Uizic/UD/0TNXtCRfkS4SeVSkZXarb1oZjHdGlw6ENiLGiA0e5b4r0rByW4EQQGZ Pvg3DFXMjqp0lVVmfmXFPggLkbTP+SJ1/VGSC/wSqPkMiKSCenRqwHwWIdKxv7f1 3hyeTZXR7P8uaSddSXaakqmT99v6pdZOo8NsVQTx3PzPKpEVciPBtCdMaW1hIFRl c3QgKGRlbW8ga2V5KSA8bGltYUBleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuOo3QML CgMDFQMCAxYCAQIXgAASCRA3yrUft5ED+AdlR1BHAAEBilwAoJGWPf8Pesitjoqv zFLPwO+EsydjAJ4kNnkh0+QkOBvDz72Hz2bnjSPT07kBDQQ246j1EAQAp/Ccn5Ez xXIGljKVKZ5Pp0xJA3uBoQBvXzu2pU4HU+vmgwnX1313x+4BsHVEbw7+lfyhKnDD 0TSwIAHj/xeE+jraCTU8X1iwe49eAyTaWF4wTyTzdZKQ9mrfBnFgdWlRjLALcTMJ aOE2Zasn8wgAEHgi4QWyBPS1il+aFE6oizsAAwYD/RpvJnfv8VqfbCxOYt7meLfT LrvcPlGNynv1nEgNgjbYRGIRzbXDDz+jwcLc9MeNuZgtaXvUbsQ8s0X1dP6vq43V mQTQPlU1TQx10o+YYn73ptyhbwOkyIDGmyf6uFhO0+B5/MY0KRLCxo0lwMxvVkYN d6k804pSJPqwusWBm2R0iE4EGBECAAYFAjbjqPUAEgkQN8q1H7eRA/gHZUdQRwAB Af5vAJ9dQMc2nMpcKuH28xwKl8r7MP3pygCfWHGKFHWIDkUt8RfHAB9geauEQSKZ AaIENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6tk2jzeUt6ooNd +c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+Ydxo5Yjm1DQH 7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhVn8zzAKCpx1LU lQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssUp806PQorw/ZO uoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpgSdD79V+oJAFL ATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqTJzc6zUn1Qqag 1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn4aVJ5D0pFB9i zTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqLb7E5LrlxZONU nrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQtCdNaWtlIFRlc3Qg KGRlbW8ga2V5KSA8bWlrZUBleGFtcGxlLm5ldD6IXQQTEQIAFQUCNuOqZAMLCgMD FQMCAxYCAQIXgAASCRC+eUhSvlz4hgdlR1BHAAEB8SMAmwR8MsDEfj2z2V/SeqUX i1x+Wmv/AJ4koI/qJXC+EYh0K74Nu9/rPz+wjrQSTWFsbG9yeSAoZGVtbyBrZXkp iF0EExECABUFAjbjt7cDCwoDAxUDAgMWAgECF4AAEgkQvnlIUr5c+IYHZUdQRwAB AZnVAKCoa3Ps+duJ3n5TKUcCfjRvClcTsQCbBWapu2wbWJZa3XE6jajJOPS3wTm5 AQ0ENuOqfhAEAKZ71o2OazL8PS8vMRS+PaRowGBW/cxYo74BuLTIqyN0/RAS35Si yfJuClqEaE9njZsvyRix8mY73mlYfE3qw1frsWZBBr7+9Np8/DThJUE4x1h6MtJ+ qaHIuhcYXyXdW5zowytpmRLnxEDUp9j4QOOoIwi0UwD7sC6YrUki+bm7AAMGA/4o /SkTuvfycd/lvQ2UMViEAYip2B1a9brNlqXaU1eI6QqiTgjoAf4ZQZgmNQtf7abA I9QN2WWpiUVlWaDaJJEXiLWS13xmnKaxm5po3IPPYBTOVd5xFDQlP5ptgUFqefIe DTgr+tHRq+RgKhw8QErT5N/PM28RHchbOewj0OGSbYhOBBgRAgAGBQI246p+ABIJ EL55SFK+XPiGB2VHUEcAAQGRMgCfdcoqwoaTU7rNH0BWaYUfCrQ6TnIAniN+yQaB bwZHMbSaDTBRndjLglsKmQGiBDbjquMRBACteKaHZ7pcM7Quj8Ec8Sx0fJ3u0NdL so5xn9Ek4FWMLBu6jw7b/5KjB2WtXOZSWKHOzeTfUAx79NMKJrD9jZW/0kEAFVeZ pwZF1l8fBsRELR9cxAajE3RvFkgCYAhXsF1Jno+qiU5TNvadGU4SzmP4vOnnjrIW Ty83mtZiwoFIcwCggaaaClE8Q41NyIfVtjS3f+Nm8x0D/icH9uwM3vpB2QV29IIB qazgaFr7vBoogFoAllaCQbPLiyHX1Mk3kEZg5xewmDS/tU4rGqj7UcL9OlZx1ICD 8cp80yNYfoI7K5XM6sYOMmfJORGOEsqMtoYbo3lluDgDkg26DZNynUeFHZRrIWz2 cKqTuaB3dw09m8sJNus3poEtA/9Q1KDsjKPi8+2kUzJoK3V61QglXAVDlfzK6B5K OEZ6GR/gX9M5uyyLjREybFSSNPlvLR11+mV4GR5AcrVQOmE0QpFyo1Mr+uDsbqwk zERvRq1r5pOyqM5WPXhlXa5oo4na1fBEX76IEzK6xIVG07GnNnaY+dlPgsLq4I8+ A20ZG7QvTm92ZW1iZXIgVGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxl Lm5ldD6IXQQTEQIAFQUCNuOq4wMLCgMDFQMCAxYCAQIXgAASCRAlsA/UMM7GhAdl R1BHAAEBmNgAnj0Q0x8/ArVTURIRhBLli2zdJFwCAJ0brkbdlbR2eGeNACF/++T4 S14x8rkBDQQ246scEAQA4Zx5WDc8LoW2Ctmueh+iHNae6LoVUHN5qLUNnkwwqZ03 r9Ay/V54egw5vfd9t+HADnWf6Q+6FqmvpCpPPHrZEYD+ArWbu+NTY59jFI7rkY3+ tJRc3+QTzeNHse7HgyhxFdn7/yeCovskCPDUtl0nI6eIml5G+tyQ80L9spq5rvsA AwUD/3lWMCMkgBT+A4zC1upOBX5yYd7nYBrUIkRqVXzzIobzqeeoe4vjHFRNNmWP KNtsqV4kP8CHtHUHEGFIQPLxa5O6icRUdXFNwv1iKDiln87Nhl/l+SXV4s1pItvx dkxPQls/TZv/84ykCvb2VxqBrWjVG1a+uVTIhg5ObZFxPGR/iE4EGBECAAYFAjbj qxwAEgkQJbAP1DDOxoQHZUdQRwABASDnAJ47dL2Q5/ft3EzaQrldWSiLtreNdACd GNwpxQVBQTipOs5DiZ2gK8FTd2WZAaIENuOrWxEEAJVonskIQ7KNmZw9sG/oKumq pNa0VIXMHQcAk24hNWiwLJ7jJfJyx+H74Wk89lfwHo6C9NHtvHbgOaK/SYgX5lW5 a6UwCBlrLtAFOrhELFoGcEXbKNzR/ynx/GeZccCbZGf4ZQIhB6IZhqA9/JiTbIJ5 ut0V2nVB++oqzujHL1pXAKDjXh+4tuQHKzKJeDuwWcKhqtuYmwP/SEYSuwBYX4Gk aw08/OD2iLLMadXVimpUa7jCWBkCtiw7hJed0Pnda52AT5Yj241q//RpI8dyuAdA n1lkAtLFJe+2zURaq/BV5I0WXL5AqMcRxuzyBRu+6y3dkokPnkvnaeUIo7rjAvLJ JL0LrsUuniJNIPo4xpTYY7rve2GusXkD/2cXpN+6fD9bvU05je5z7Zcxlxq3ylYv Q7Sd9RPNOa7lxak7qBX3DgUa7X2Pgznm1/EcSMEFf0xJsscKF3ZpL9NxGMA+gCUp sd1rlYuf63r3B/Z30hBw8u7BQvAgaeGmrwBUUDa4aJkgfZUpuXJRi2Yg+J5YxdRB QAcEBXIex4ZTtClPc2NhciBUZXN0IChkZW1vIGtleSkgPG9zY2FyQGV4YW1wbGUu bmV0PohdBBMRAgAVBQI246tbAwsKAwMVAwIDFgIBAheAABIJEF9jVrptlzKsB2VH UEcAAQGwLwCbBT6UT+lNWMh/jxFu/m5Dy2qMwpMAmwePBu7USi6TWKaXYRSL2yyw JR0HuQENBDbjq44QBACdC1XRPM9CMFrgVUvioU7SShffLnjgWBZ3hqbOYrsgtXfu Qdv6lAixnNPdnk/k4mjL8w1pqbjUmfmbppVDxzsiiUQlJatzGDfU1gDc7ksnXpF/ vzghbucy8HNO0SHi3uM/GXC574iZ1oxa/A14fKnCVYT1ThqUa1usC5YQXHm4IwAD BQP/f4LZgN3dbL4jLqXHDNpAIEjiTbKXxDKHOnAof//4SE0mpaNVHLu3nxI57CtX fSI2kMQSm/3pqpTKzaBlM/CbMAJUanhmlLPARDcJ/hQcDtBsF5nFG7zfLfe0SBwg sM1HxL968Vva7WsbYpSa98+3HSDuy9VwphFp7i4HbnCbSK6ITgQYEQIABgUCNuOr jgASCRBfY1a6bZcyrAdlR1BHAAEBDeEAnR6sKjEq2lzXziIuSnmSldBqQMYeAJ4r ZZcDmBM5Qt+2Vp1dmfy02hczoJkBogQ246xDEQQAhBGYmGwmeI2L9tF9/9gatn1o Va3zUb3dbxaFXnWqr6e1QeBQ1jnljKizhcs5ra1L4rzM/pfXkV6xUE9ghBrkEgLX SYCwt8n7WtucYk+40EDZTYygRpHGj8m1dD//mOJNGVjAsNGcHO5owI92yKu9674k HDnfK1HCPB7ub8PU8+8AoKnZ2PUW0OO5tM3uQIXSjYrM/ATTA/sGKZDFfI/BLMao toddIQGyHzg5BPE8j3wFeCrTX3n8DUHX+k+zfnp64qWqh59RMdiFuOIxhuNlP4Dq O651/sDZRzLTcbwcNniTV/W+bOuPbj7rKAYFzFNWvQFrB6ILUPAbcuNCgnVy4XFF DwFgkMYjA+tRbkl2WfNbZslZ93Jc6gP/RLuIRU323GRIqKV054/VhwMIPwwzeG8X 2RRz7WFuaKvxI5n8hgkDJA36P6Zhawu4q1n8X2mqIE1NcfaNYJOqV04P9ljEdUkA BGeSJUbrJyQwuzEeLYs88ErzFpyTTL3aYp7vNr/t+FWAJFKzsz+vNRvNSHIicdLL GvZJhv7yVu60J1BhcGEgdGVzdCAoZGVtbyBrZXkpIDxwYXBhQGV4YW1wbGUubmV0 PohdBBMRAgAVBQI246xDAwsKAwMVAwIDFgIBAheAABIJEF0V4B0/8TIGB2VHUEcA AQEG+gCbBDRkJiuJ1K8HG7We/mr+Rg0Nk+MAn2CWldqwbU0fWlk0UH2TkKCJDRfP uQENBDbjrHEQBADeYTvnxIaltqV+9aElKlv00R1km8mzXOW60Nbc4E24Xh4hvy0C dZR47WaGULMltx/3nxLjQEcK8qOCI7ytJ5okLKmVEde/eV0yG6P8GjzdPELowtur lmy9aWC+ckGq8GyjqMgLLeI4BNTaWVXP69fllKezbhGqYnFY7xTc5IlQiwADBgQA lkCWK/odKM6+yUPwaiPL0yrlV2/gyAUI7kszey72oiKjKm/WXXzTZmdQLb5JaNgn tlTMpYkM1Uk2bhyUG36w0wVwX/kPgCDYh3WRAKHcwbw7+qe77E56D/gNm0vJesa1 jmyrdysvfhlA5Klt1rmoHFCqIEIBG/xSnnPhnoMEoFGITgQYEQIABgUCNuOscQAS CRBdFeAdP/EyBgdlR1BHAAEBk4cAn1I/jmu7FSgglh9aPmVYAw7HWQMAAJ9PAPPX fqtwza6I8ttGPLYNvEAmAZkBogQ246zREQQAgcIj/Eo8PrIhEaxKcjc9dNb9/0BZ 3BxBk7x9a7HKm6o0/vcfLH2XFjFxB4Ddfe+O1PC9KNUqIi6GTafGbyqS47XsnOJs 5nvsrgmVpUUzAd7p0dxcc2tJodwhkH4GtOP4i4P9XBrxngQrWQ0ju333EPF6wLWi 7qkVyGENCfsvktMAoKYgM+XYh9UQe7/HX0GiCnk3ExVnA/4ryBxdyBihj02i6s8v Ae5mlTrwv85ugouSB95XEX8GPfvaWIW/TpUWQ6a7o8YzU/kIPa7YzETYX8e/FVr2 Zd33HAfeLUNp3OS0NvEbYJlGDfW7/X7qLVv1o5WCjCHUhK8DCf9Ax9b4z7CbRHpt xSE4U79NCCOsXQsObV28qlGsFQP+IIaCh7dTqADw/nBmfuXxepPKXS6Xdi0to79L fQtr+TUtJOEVGIbqqQBsgESFiT5qR0W7qhOnl47TIQyPQnt/V994QwyAGtIgtM5q YFRW70g1FkyDRX57PzTMuU2BjVI6mHkaUkLaLujbRXiQFm8IXJ4rf297GppKuSgv Ncr7Rmq0K1F1ZWJlYyBUZXN0IChkZW1vIGtleSkgPHF1ZWJlY0BleGFtcGxlLm5l dD6IXQQTEQIAFQUCNuOs0QMLCgMDFQMCAxYCAQIXgAASCRAcZ+wTPGYchAdlR1BH AAEB0bgAn3zNLK9DdG35j4BV9rDISiiwUbkrAKCYzKPhFiFGVcpYI85EHEB8I5gy 1bkBDQQ246zkEAQAkaLhP+OtjkG1FMzSmwCd5DK3PMWAfj4uKBRcABvRAMA6TIY1 9Yet8ckhLsDc1z2kxYB06NaBIptjKvOtrRJDvn9KQjn79Ll6/YWmSL4dijtw2BVe dsImshjuTgMAy6eo8n0kJRdzzxbEa8pXlvjmG2oI+dXY+Cr4AQgoPloZ8uMAAwUD /347q21Rt5jZtAdF1OGXgdTFDDiWBg3uy2AZmxscJzTLqWfUcX2+UThOXocj81H/ w5q5Cte3z3zx2HTf1A1mw50B5FZOTg+BK5erpUMblY3DoH1u9E8pd7nJ5WY02Xoo RIHMxyrzuQA1lZnry8onYmKHE8dEDJ/HAavYkqRUXRL5iE4EGBECAAYFAjbjrOQA EgkQHGfsEzxmHIQHZUdQRwABAYiXAKCU8v6RR73fcsQGGQWKe6ixtpVCDgCfUZaW 46Lt8G/NbxPkHr9fhkBqWlWZAaIENuOuOBEEAJTQ6NWgLfYqH91SNc903oci6wSE eF5ikUjNgcdNgmYUESMGP0LCulgaMZSan4FLbAVLn3M7YyWlAYsauaj5gYF2Kjff wfB2bxtp5Jx3Yqiq76haQKgEybZXHFtLczySrSmk27ZDkQQ7+obLBWtWl8EzeyIz eZyyNVofJbL5PUirAKD+WeCA0iv5jPYehT0bALAGL3ffWQP+NFMEC5dOru8AbZsa knRf/OpIwtJFl/CdmPbyHHojRIhPTJlTXGCCsCDNJsHbhedBJLFYxHYFlCa6k90c 7SXzE+fkoJtijgL735mymvEReDT0q1Vww6xXqpOrjQ09I51FE0BWE45OD8YPSpfm v3O0Hnuql5+ang1/Lm2ajdJ6F9ED/2OR0oIutlGwT+QfnuQahPmS3ie8lbZfdPTc Ewq+ylWbdaN2WtHQmLTKLD0/TmwIwmp4Up7hFmt4bqLrToKK1mlEhFumN8wSrzfz OBQO/tUYXvOoJ51i7fqx6l+TPGP+yU3K7oDbUdOAxbGIGuQNegi7Ew8UpjNkYL6c IdeBba6htClSb21lbyBUZXN0IChkZW1vIGtleSkgPHJvbWVvQGV4YW1wbGUubmV0 PohdBBMRAgAVBQI24644AwsKAwMVAwIDFgIBAheAABIJEDvb7bF3f77TB2VHUEcA AQGr4ACgllMIBb4leDKz61LQiA4TGWQp9+QAn0gF7rrvXtHdEc9kFQxgfASZH4RZ uQENBDbjrmYQBACJ5res4tXRZj36s7P4KZWUf0YC8mtLxxeNEXe5ckAtn8gMfcSQ J4Mei4O1EBvrKZ9Dz28Emv0FmDd66DUd4ybRIk1PN8kWry9UuGLAf/VBAkMIyXhY CEnB7wRsNj4kF5DhYiytep2wekPocZO2GAUoIyY2yMNb2m2g2K8UnK2QBwADBQP+ Ixih3o+++i02Xwi4wOe7aro2xSeBmH9b8nEaJ8v8RVLRO0AgoR4GLzKeTOfv57FU 48tlY7sxth6FOxeJaQkS1nD1LRpb3GUDZr7qM/yOGYp0WhdRgGW+c0eYa32g5ajq 2zn3+H1L4yrmRSZM4nmZ5ZXe9ijkGs0UNYqmi0gBYxqITgQYEQIABgUCNuOuZgAS CRA72+2xd3++0wdlR1BHAAEBSdEAoJfp/f+ZWcSt5YKCitR1mHyGDUsSAKDsVRYK 2fcdY7CA7DHErM6z+tCb4JkBogQ2468EEQQAxS2TgAmJc/eNoqkiFuLcHvdLZJnr usrMGSJyN6WnBaToud2wKtsuwhawN/x822KHSv0Cz7Zqt8CmQ2XC4IarVmU8YYYR /Xw6o/EW+eCFURsN1yiw/hsibeTobayAVsyXrzEAadO2RLkZ/Pje5O7Oc/N1mcZs iM/S4GY99mToZbsAoOGLiG27Gvdj6532XHVtYz0qpS0DBACJFgebrTlFlUGR3OV9 jHUjCCf+XwKGrcyw+t8EyyVqkGerVqfb+cRA+a4h170LoAs3W3TcMekqifHZeCNh XPymC3LYVTu3FJKbYQT73vl1enei/hN8PUrGSw6XvvQ8DOLEt82E9bWrgDZwSu4a A7vioRff98BrUnSdEoOCYD+aBgP/ZNJkoJoUehzcgdCeTKCYbPNk2lVlXb7WQgHx naE2j1XzU9inOVhXxKUbnVqNbUbd49y2Lsk4g/oyq41RthHhM7NnLUOrj5WqpkIH p854govjQgooCgwwNgU0un3NxP6zr7oNM8fbt4TVYS341CMGCvah8L/iIBT+eYBi ajjGfti0K1NpZXJyYSBUZXN0IChkZW1vIGtleSkgPHNpZXJyYUBleGFtcGxlLm5l dD6IXQQTEQIAFQUCNuOvBAMLCgMDFQMCAxYCAQIXgAASCRCl5n9/o64+oQdlR1BH AAEBr38AoKHr1J9mnwnVtWy8G3EbOZGKzNRsAJ9OGOK9eQO8rWHTtj2sUpEieIJ+ TbkBDQQ246+AEAQAuHHJHT4loEDZBrwJt6vBcc0S6IOvP43374/DL7fvl0ODYpDt FSfHs2JFXfrxt7+UaB0yEsp5jFmWY0+emhQ0g2TzpELNhtKmYABIE6cwlAXZZ1Av Gax0k0kIwp+x7UdnKWAglAZYj7WrQ70tzHtV3UXwYV4m9OEwdHIug68xUJMAAwUE AI3tEdSDZvRpGSgM0xAovpVXou8G15J+CRep/a9Si+aFC1RfGhhzRCdU8I+5Lqtp GnGI3Pw4uCnREkU2TfbM5WZza7rwHfSShyIG3srHp3t8kYcvmBWql5tTLVgncMGg 4g6BwwEqZeeUbbgisc+rlu+6oa2fBOhkQ64SPdkfPA25iE4EGBECAAYFAjbjr4AA EgkQpeZ/f6OuPqEHZUdQRwABAWsJAJ0XijmoDUP1Iu6lhsSlmGOiNO/l4QCff5G6 w6Vkq8d86Ev2IwS9Wf4uNmaZAaIENuOwChEEAJDhTfBph5G51alEDUaIfFvD0K+o XDXqDB7hDg3stVIpZR99d2bo/dPOuVWorwXFBDJeK0c7iJEQrMWKlxdqbRGkH8pa FSnL5XWo4xMjknqnJzYu3gb734ioFHTC4WDM2/voTGuFpLw+eirW+wl12wusHpnN kWxMEIWt2HoGTerfAKD3JUBraePb8gHKnXFzyEu8RLp3swP/XaAKje+NAYeqhcAq xv2SEPUj8EMgtX7SDkkyDv8wuRfcNwMAt4XwHYnnM3bpUwWj2JcDGE9rsNna/HuF Ajz/2lrhUKncH0CywvjhYtt1t92j0cPZaeR3pY8R/bm8Ns20tiP7uxVlj+szI2Pf 5KiUHhiWHJ2RTXGE2pUmT6UFhc0D/juyZvINKwkbUSSwpKvsoi15d6e4Wx5PZ2mA rT5y+ULitBx4WKIsXV6UVVaEBNaBe63k9cFGdPEba/HflSd76kLmcSdy+Fr73d3T MIrmwAKMVdKjRAEc3l87YaPd2/LdT+TWzCQw33EotexJ7yZzZA2SJx27/jyIgXkW twvn5UCMtClUYW5nbyBUZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4YW1wbGUubmV0 PohdBBMRAgAVBQI247AKAwsKAwMVAwIDFgIBAheAABIJEFjLmkyFqB84B2VHUEcA AQEk4gCeL5zcIOEDeTY+nYJaAFIVyxMDn0IAniDLX638/CT/T3nLVPqDevBFsTTN uQENBDbjsJ4QBACevTDY5y+VRfsTy7YLx0kYiPvBFTmoNrPGHS3Dnn/Jsnf8rKEI V+yvZ1nYTtnDpi9zW7dZNN/zacfhL78gkVIj6oGLdOtzBW23xdrc+jtwjM29LRsG Gp+Y45clziKFSUANHYm6Sb9AL5/ps7whkENav/sudPhLAQ+E+hk0wVvrewADBgQA naSI/d7XMz7MSjaLaOQ6fLUiDKfSxGK7DQ5dD0HrnrOnTYbmq0M34heGAt19CqCr JZyQ/gEsMng21CgQz8yvb/uiPeHTVeltTzpHVAVA5eahbDervKoRYjB84GoKVIXQ DXixd2NDBp3JptMWxbibxmfmMtb7Wwfg+tWMeg0TPgKITgQYEQIABgUCNuOwngAS CRBYy5pMhagfOAdlR1BHAAEBCJsAn2CeDRsh/7JwAcaMa8rlXIi9wsrvAKDLSGdt tgPGpeFytA60KiQJyGZRfpkBogQ247GpEQQA3rbWaPIEzk69ZyV25ObCX7lUkGjJ m4C6WaTLN0OwvoAF9F1/kP73Lh6fsFdjatEuL/sOSvrMQxeAPFA3/qvhpjSjAOVN u4ZHA0LxOPBGFIIXHVio1nhcJpiTm9CjKGrXXoeIj0+I/KHBsPotM+qP3tMtDlVr FLyKqeImT91JZzsAoIDquRnzyTKtyt3DQ951OxjkfHtRBADHIB9PaOvB2428KcPn oz7isFRWt+wjl/+uRRfDzjXpXquzK92PMiqmyyLCFg2sa5X5aW8jM/0obg3TVPII fprH8IdPkTc3RD5qSQglSTnWTuOnLnYG8gEK4h+z8rEm4uwG5qZzJe5EK7oQGVly 7Zx9XtZCqLweN2t6YfMBeJKLcgP+OQPGyyhJib6av2pmOlYw5xrMZA448NjqFW7f LC3Ro6YGp49378uSkYVnliyoZrauOLR/e5uGA5hgh1WvyInOGgzzDL1D1nWmOQ8g nnq1Tm9yTdaiwu6OcdhwbfERO3F5zyZeVSsXOKs8rOW6kBGGLdnT+HCaipNzo4wm 5ekyfvG0LVVuaWZvcm0gVGVzdCAoZGVtbyBrZXkpIDx1bmlmb3JtQGV4YW1wbGUu bmV0PohdBBMRAgAVBQI247GpAwsKAwMVAwIDFgIBAheAABIJEKlMD3VlMkTWB2VH UEcAAQEzWwCeMxscN9idLHgH2DP2U6tP0tNR0T0An3lfFgidO+z8ZeHXzuOM9TAS +jz6uQENBDbjscMQBAC1u+09NP46dPnn6RJtczL3LEroyrcPmHOk3FbiNfJ8YMnF BeST+U++chi/kKzm+N4y8TZE8sHwGqnkeIBtJX2YmQJFhKi2RR9AtVn2HV1ZTBYT 1q/P7MpZTPMI9EODlCEPJTvX+MdtP8xh0Gsj1i1wujQOJAiXdrqsPxen4Sch5wAD BQP+NRROzLFq4kBUpgoTyvWzJl96Gdykf+O0AhbTlZ7ix9KtQLfxGrqzgo0hwDjb 2QzeWHfjVhaaaSc5UWNMuIQyHRcsj9x4n25XGE0HUyOVSD46IOAjfZF+beXOa/Nb YcR+zzORfXr1qyW2g4oV8LN4s4uV4dPamQ3l98Lkg8lhWCeITgQYEQIABgUCNuOx wwASCRCpTA91ZTJE1gdlR1BHAAEBzpgAn1mBiOpDetJyYLCFzciHO3YBMA1vAJ0W 5WC8PZiHyWy6JazAsMWs2wOTlZkBogQ247OaEQQAowMahswOo9fdIojf9byb0uY2 C0NR98cYc13WemcYzyZLJV9aMRagSDYY8wSZ1ff+29RRXudPPTYgnBlFWWtsQ91b vp4i0wBjU0HjcumNBOsBH76ZUCyW6VRjprlXmckoRzQio67GRbUtZq+6NfUlG+UF kt4GR2mxU25oYm3BQV8AoN+qhlQJxnGc751ExqUct8Y6fs7hA/9qkyTaZz4YnCkp LFcG+hCRVx+5kEmZcm5QJzgFRTMdfRlIo1uDFj+RVHXE3eSsyA4JHp0Swa6QiyBV ZEOP22j/4TogizpgqEbt8ZxcqETzPyZ/eEMtyaNsIoMJIUFPs8jlOQvOUAQ/XLZG 2Kf9JrvW6cZmE3IR8A9b93V1FxFWowP/ZZxM9RoiNG8CqZvFSl6dGGD+YXmvCYeX zVW9UFtkKhnflzR50Rkql+bJhsq7PsaGMQ/Po79RYZhmkr/uvp/iQVSuE7lq0KWd HIGS+Y2Z19u0zmF3mOHeWCoBPu2Tue08AiHxfz+qbn5RpvreRnBcI+JJH6ITBGnj YZtUvsX9vau0K1ZpY3RvciBUZXN0IChkZW1vIGtleSkgPHZpY3RvckBleGFtcGxl Lm9yZz6IXQQTEQIAFQUCNuOzmgMLCgMDFQMCAxYCAQIXgAASCRBHr0tpYfBHhAdl R1BHAAEBzEkAoMA+KfY9bA8EdfvWwa8zUM1SMs5rAKDS+6X3HVuCaLtVxzXOob+D KbB7b7kBDQQ247O+EAQAh5FAgdvaTJL3jBGcjYiiJosxeTWf3L/dUY99fZN8R39D SVoUKf9Rt/EsS5DywXVnKAeJiUTYw8lbMRVF70VhSDHpMC9KtbB0lk3CcAqULPiy irT5g9ywN24W7k0naWIJisttUh+Hqbm6gc5Pz9Nfd5ll8x4Ehi3lKE6Nze3gUNMA AwUD/AtUN1hqwWTTphVZctHq3JaUEb9agmu/Ocsf24/bq9i8R8FaMwBF4fI5qIim cqAM+2BZ6dvZEdqrVaZR9aHjzchcHmaiI7ZmW4gmk+LHFFWf9y7mG8YDKFBXkaBu JpxFb1FIfJpmaLzJmRa76dLqI3A7H2E8dFQa/MGsYCa4NmILiE0EGBECAAYFAjbj s74AEgkQR69LaWHwR4QHZUdQRwABAVPdAKCcyVECIa28vmUPgZ2jkXQoQ/nNkQCU DpGL1aZn1eKrDlHcGyD4CzywnpkBogQ247Q0EQQAvVX9TJEynPJEsX3X2fGPPDiQ K+oB7D1INI9bfID5NKtoo8qybivOLo85i5m7RUiEyhX3E9lUg9buKmtIhas0sJ8s LURmCndIKtXjIWg3Kd0pmjE8q2zyd7ChQ3ffJ20875wNbR4GQhSO1WTuxwRoL53f t+9JTULJxkQRf71Azm8AoJZQYphKeLWrLtFjb2WKbYxst54tBACS7C/Vu40euIev p2TZHTtY0U+ObFvJr8jDrdQZMkUFSuhti7rfO/bf7qTwmCvv6IVmn905ACh9bnKw ZvcR5T1yR2b6CAN267fzriZhu6/FG+9Ddr62ZnV2rP8Oa7uxAXCnoovaafKYupop vHV0z0tUf2+wasrQdHZTvc0pfY+56AP/WOVJ0KGzP6k9bYjYSRJ1MJb70wdVFiHd lIlEd5P3jQsXOyHVMrWp6qH10sQLto8gweWJr9aHem0QjTNSTVpzp6laBHf7tnLE wCJGeX5f5BOh87akRjwfh9J9zW+DBrtpqS6vjlDYU5y6RGbGRl6ndtXhV5FpE4cb Lax/pGFWEq20K1doaXNreSBUZXN0IChkZW1vIGtleSkgPHdoaXNreUBleGFtcGxl Lm5ldD6IXQQTEQIAFQUCNuO0NAMLCgMDFQMCAxYCAQIXgAASCRDe8Pe47Gfb3gdl R1BHAAEBomoAn0xuW4iqzyqN3WU6SPnzELkrjzZsAKCN5glp0flK1eZskwbDZkPb 3J6/M7kBDQQ247RWEAQAz1fsQzEPDc5KqCcjvpa4gFKwjSAX9Sm3OlPyDwBjqBA9 WFT1+BAdu7tyvxJkVXd3JRUtPOQ2ruaxSK93f8V5y5/vsKkoEKtCXOy35TKSI9D9 tPf6CrejAaL0wEJ95TaXnJlnfKMYiqDz9efGYJu4i3Dr0U3LPv6dCgMzbxyL0HcA AwUD/AkEuPFdepYVjkl1ertyTrpDHlgcOk8fuzNQqsgYoZkfGTZRehTwb1ZF9DRV VB9qiZ+cq+j5sUMUkZwt8ghMjwWuPMaiHYrc8pzGxCJDVKxWUxPdea69JPTK8Mzx ri32j7a/zIsuASNHZ2f+VOIaMT8A26dGj1MEam/Pk/Tzk2bOiE4EGBECAAYFAjbj tFYAEgkQ3vD3uOxn294HZUdQRwABAf8gAJ9fC4NjVwHWOh1tCxLq4dF3L/M5VgCf Xj4izGMaaFuZ7+IOJ7jgFqC/yiyZAaIENuO03BEEAK1KlG4lUzMSYafGwOLzFwMw ri48rOAOOAxPrkRW/QBrGU5sPxUzxEzu4lP9365cmMk4CLyNswxdUsB1xtOihd8i LvCxejgjNDdJOypyqcPDNrZD4k/g/ADax1OXde/Hr85uND8jQ8isUhjZSBtTeDCC hbTXTJWoS77vdZBtOFnrAKCz2ucyEr7F/hMPeTNaOELYvImB2wP+MK/nmEcsD9+X m/xeVfWzi1oVphA88OCh10O1fjieyQ+Z+OEuSizysCKIKIQ5T5q8Q0wCf2ALpAKV CLXd9JK9FKt+EIBZLQLKoAj+wuShDNU08VNuU3LOKI1B6A8jI9eBArokwj9GRUSl Ir6KYI4EYRUyl1VVk8kpENIPUg2iE0oD/2tBclzEFGCY7gexgOq+FOkJyB7MUuca 0IJLIW+LadjFVjIapYbHzi2o9VmfqHtA8SsNDt2Ckx/xAM5jXpSnDG7U3IpS2iHS OZfmJWpv22Xu0L2zdrO9ip9j2Y7WKjt1M6sNeG6gCUZdHpJXjHWUTDMwLKLq/ojV Tx55aHV50NoMtCdYUmF5IFRlc3QgKGRlbW8ga2V5KSA8eHJheUBleGFtcGxlLm5l dD6IXQQTEQIAFQUCNuO03AMLCgMDFQMCAxYCAQIXgAASCRCJeabFVn+zSgdlR1BH AAEBt08An0PRqhiMzF+L37DyvcaVl+0zSrmbAJ0fL+8D5Frcp1m3YtBMpo+j5dsi eLkBDQQ247UFEAQAxuGlBvqoDkxhIDgFZzdHJO+gJym94zgSGHkBmBIBf5Q2G2O3 zkN7SIENI16yg9cxy7zkTbBu9PMgzUe/UuQov9Z6YXKzTj1jLozrGdljKOcW5YRv libo7eKXDUkSvT+X6J1BOIVexl05Y4Ncmf7otNDre29QfK8gGBO/bdQd7L8ABAsD /R4Nq/JQav4/7d5ETuMZddPAxV4kCnY+7F7oJgHDKJheJxt49rNtfXSxBZUsJ9P6 Xhr46fCRT33DD1P8RyUmmS3/dJl7H/qR3A1rox4FQPWAuk4WGhsfSXvlZnFWKJhC 8TZzFisjiXjw1OFYiF4TArxj9D7d/cHEKIi43rtefpf+iE4EGBECAAYFAjbjtQUA EgkQiXmmxVZ/s0oHZUdQRwABAeyQAJ4oZGFj58YW1ovUlDGgd0M9En7C7wCbBBq7 67mk9lz1SsGvRRX6kY+lj56ZAaIENuO1UREEAN1QBnOE/r7r1V3JGuBE2i2i5S9c TojyHSTFkVlkOtAmallw1aRQcOqBtgMn1GYh4S5Zk2bLM/FIVy8P1EbD0qYhm7aR lioi7ODgqo7JTdJR83JxqsRlgmSYsTIGWuQ3FmSY8KnVxGwwoYJuFCz/+/oiryHp 00DYRaAl6/TLXaBzAKC6TQpkipU7tR+RpVpmEyvQJ3Vq3wP+O4qdFWIMyL1ISNIl nBvebDX7IQKczy+sz4CgagAqILP+fw30Z/YNOwXLjIoSyQ9DyzT1Zzl6kEWjeA2u 4y7iQOd17S4KaIMRtPDOl1Ipk7nH3KL7tvf24I2SCgOXPCidpc10ifY2cUqMvjtO dX+8oV21JmAtb3Ta/BgZOvUCsv8EAIhzH1N3Gwn00zJooPswRwpB46s6q/8yrUfE U+QMEjiFNmlCIh3VdPGqQnpQcPD2xH9O+07lgqtmMg2SZoFkWIeXHWjIHQHe7pdR Utchz2WLIXKH1o4F1CR0eCPIjwrOTpnR6Nhyt7lNjjN+mUBkqRQOVjdTRJvRrTEg aGCjdhEQtCtZYW5rZWUgVGVzdCAoZGVtbyBrZXkpIDx5YW5rZWVAZXhhbXBsZS5u ZXQ+iF0EExECABUFAjbjtVEDCwoDAxUDAgMWAgECF4AAEgkQnu80zUsRsl8HZUdQ RwABAUkEAKCUUXvVByh4l9ohXM16up6769DYSwCffVvyOW9v9kENNcHvItZnEmD1 o+O5AQ0ENuO1ZxAEAJriuUXEtM08l6eko1tvlnkCKSZyQ35S9PogXv/90gA79Nal JsN41jALsRvgnAgKZLJddtlfZ6RB4iwuENgOva6C0bG8SgT3m7rLX2nSyaFWKj7L 456wZWn3uRnKxT5ymxNMFemV8f06f3kg4kJYneJVs+Sfs/5jeyoRwDc6EQG7AAMG BACTuX5AknTcJIrBV83irJVsZvWKHtUzqLoklddYXsdI/eB6c+cBlhFxe8/hWw6v uFdFKhpCsWhEbJehzFjZCJo+ezf/YdQtWA34ik4poObWaSpnoV7ZXaVhgjQ2axNE WrKxQihDVYRTIaXOJAJ8eq2wNPi4UbyZL5HcWO6SlP/2mYhOBBgRAgAGBQI247Vn ABIJEJ7vNM1LEbJfB2VHUEcAAQH0XACfffuI4IS7cgh0PNghr/0v3L/NhncAoJNw utmN7kkv9n/oPqkByzLxvZt4mQGiBDbjtcsRBACBDJOGX9C/xxCVZNP6OHz6cL5v M3PimUAhV+9HAVVPQViTnFKrkYPSQyRfWzjOU8RO1Tp5CHz747oOb6j9P74yH1uy 78yFg4UuhXBWinhuCKKq4IIWwJkCKBFr1U8fu8a6Y6NcjqiDA0KmGRJrMPmXenXk JpFGHG78rUvNi9IMfwCgugzNILh/3XZCZU+BUPYeXL+nUAEEAIDXZhj1vFXHgi9l mijKDjJocEBoamN/taQy6Ox1RRD6HtfAPY5TER1n7xm9hMzE+Ov1IKpH/E872Rha 1qu1v7eOa6eTuNWF0NvmSR955freRsNuR8JNIb6StI2ER9pzBUfjykC9pg2wPeC7 wpQJIF9TF+Ja1BvG2I+ha2xJ786AA/sHEUvAOsc58YbPlbIPyp2JdEHvXTRT2NIS VRuTMQsg8vV99nMYR2CUh270uPyy2xZaD/kYcJ9/1ngY7C9pbbNWoV70PkEMO/qj 67OIViWVPzUhIdURorbpGhuc3oBzUxOgial7IbISPRItDgg2oZoY4hqyQNx8Cj2Z ZAzDpM2vCrQnWnVsdSBUZXN0IChkZW1vIGtleSkgPHp1bHVAZXhhbXBsZS5uZXQ+ iF0EExECABUFAjbjtcsDCwoDAxUDAgMWAgECF4AAEgkQa8R3gFSs0kYHZUdQRwAB AUDrAJ4lTJHO4VuxnS5C6W+mA4hFMtMqxwCgt3cidUSPbSl5NRDlvY06KZJecrG5 AQ0ENuO18hAEAMx88MFCgzO/nYyaNvxJ1pgoo3OoN30rWhjaFwxKL4twdqD4okU7 IoF/dKgeZxT+8IQ34vJOCWNhIoOYR/jBnb54t+oWBJ0EmnbGbnmKH70IdeDd1fH1 JseIYkIjF8loiyc3PdWYkY8MOMGVp/+GOX/tJm9H4wmlUsU8aOPu46FPAAMFA/9K C/Rpt4JdV1VfAYSaF1XRUOjzfchBF1G7XK35AudZEwZNjWhBqmwfpAvBhJl8MmXF uwEDe1+opK2lFJt0Y01Owr5Eh6GwZ12LexYamVEable3kqmRj+Zz+0sVpgk0yoCB 9ZBwqVkcGnsShYyCJGIMlRarRMfXBEOg9pFz4fkZ2ohOBBgRAgAGBQI247XyABIJ EGvEd4BUrNJGB2VHUEcAAQF9YwCguRqebBzPbFnWXjOqn7ueBdjsDEAAn042F36T AKQETj5I4YRTah9HfMeRmQGiBDunE88RBADJ7pHJpvdSqmL2oVUHWGiPxr//5+GA 1i+wRzXQK1NzANMY3Jopsp0euyiF3bCrv5BFXECbx+q5ci9ifgb0aKcR0Zk/ieBS nUI829AXSTKCs8QXf792cIp1tH45b012m53J20Ttyn7A+gXeRRb/tBzhX1CU0AoG uWLTWK0GcSM+YwCg60xV3gtAAUYUDQQf8pto4iasw0UD/2Svbe7Sl9hipq3Z/LBX nN4/YdUDZw6D//Nsa12UESAjbrDARIT8w+zgBKNFYoKc9k7vvsFnIu4ISowgjKpo GEAxiVZlWyYK6jPuFoD0L+4w9kP8kVIZZH+/3adEjRV36HR8Tjg93eRY9MwTH6ay pXuerx4yA36TcGs/JNl42TMOA/4tb9FsnEi620lnAmGr6lRHmbZCeFDB3I7I0M9F ayO0/wzJjHmKGqrPK8x5QyRrk9jc+EN5MfKWP5Uy6ZOp+mmKux071x2Ul+SdPgJ/ +1YI91Ch/CrO/zf3Tee2SWOefupZZkJKYPz1dHHUDQ0mynlWJHgOLSaw41Yho3vO oemU1LQiSGFycnkgSC4gKHRlc3Qga2V5KSA8aGhAQGRkb3JmLmRlPohgBBMRAgAg BQI7pxPPBQkAAVGABQsHCgMEAxUDAgMWAgECHgECF4AACgkQf/Iwv51WPlYg/QCb B3/W8gBLgzhAhEevTQJtfDdlnaQAnA4mjmgN4HdNTJHRM+eLaChSKTxGuQENBDun E9gQBADtzp5/lES7jzbBVc+q6yFnpyW6cxmE3TX+5/ZABSF3xQCi/Jz7XZ3uMy+l EHBwAAQzgHeIAiPbUEjx0619bUpcwxdsSS+bGxRcZGjdYrwfaIePk6DFxBjThwGf UkYpxanQaLc6/OM4P6xlRU84UrjJDwjFLvtTQihieAesCCevywADBQP9HuyaJunf cD0Pi2Q0QSu3B/8hvmJauYsZfOgC9xEWS/yVLlHuAdolT8d99bGOBuaQwt7Kr/BX JiLXYrXxTvBWCRTFg9g303W7RlOF0cIHegUN9fdgGi3MMo86bhDK6ZQhUI01dDnx BaIEXIT+MeVBseoHcl0Q4uZ+9wqkJRkuHq+ITAQYEQIADAUCO6cT2AUJAAFRgAAK CRB/8jC/nVY+VjuDAJ0QtU4XC3frnCt7jNDr2qi+CAdeBgCcDbwQ5jxDq17hEv8R Yrg2uWkc28iYiwQ7pxPZAQP/Z7JX/e7utktjH8j7Q7WkbcnaAff7PCkJWGpHE1mo 1UnqCl6kssgTZli9RJZMdKtJpvTqBLxUS41QRz5+MQjtjOb2UIJ8VPEiXB61bCZx WLtX0kLGvi0R6k6Il9y2O7ymiif+aPYE2FqW7F/2Q5EulMbkWtQUaBWGXQkvANv0 EhkABRG0JkhhcnJ5IEEuIChSU0EgdGVzdCBrZXkpIDxoaEBAZGRvcmYuZGU+iLkE EwEBACMFAjunE9kCGw8FCQACowAFCwcKAwQDFQMCAxYCAQIeAQIXgAAKCRCenBCg zthU/wHfA/9PWfdy0flvORRc6/s7z4ZKdKCfTFXJ7jnHhMzYU+7j8mn/WWLYMh3Y zJ0TDD6mWZz/H8KMq5EqAf7w8vzPbfR9kRxm3VNBJRUXaklsDJBls6QNXMTMOULq s5xy6x4+lbDpENo6RpmN8gUMCQWxdfXhqt1eYyS1tC88p/RzN+06EZkBoQQ7qKLe EQQA2u7cgrIxZf9s7zUK/6/hh/2gn9dsJcbJlRNXLPxnZDuJ72YMwdJuUSj37ExH 9fDqeMGYesuK0CRwlBcVZBuzGzw9nf2lGstZ1O7wqLerxvPb5FDLbnm2WN7VzUH8 Fa7fJaPOw5wfxgNHSj0tEkM239PB4WocOBFEAxFiN7r3/+MAoKJmzdJ/HKVFT2qA zGZMiVlznfOfA/sGM5pCGx5PedXbDNcDi0L+2rYQ8A+2B4v7N+Fda1qGVZrk9lNx GYi7rGCeXP24LEbvfgN2Oqw5od1y+XfYKadiRLFoCTCOFO/fwLcs44sIDt4cN0Ll qKIflQdde6jPEsPV8hYZZkg9KI8YLZ64dmFuDsP2AfclOIi78D+Imgrh/AP3SKhP MTm25AItzW8g3sIui02Epy0JB71EIQbjASVHwSxyjb3dvP2ObnUuOKkL8/KBENcw JqNP8vpB1sX8Yd3hR0IjC+DEt+bKzwYrAlzqSRqCdHSfHOMvWvbK83oOmSRm08KB UEGW2gCMXHIkbrOzb5wjhKciiRG2tJcYclUwn7QiSGFycnkgSC4gKHRlc3Qga2V5 KSA8aGhAQGRkb3JmLmRlPohgBBMRAgAgBQI7qKLeBQkAAVGABQsHCgMEAxUDAgMW AgECHgECF4AACgkQQjc2NGP7UxG5sQCePWDnb3MYe7QjwFT3C1hMWEvgXrIAn0EI UNaloyri8vclg3xikvuUJbKpuQENBDuoougQBACh6YePGIeo3sz5tU29hfVDn4Cw BCh128L+Rd5852HN/3Iwhy1yTSEqpavmX5UTLvJaVFn9h0C81RWF7Q1qAa7o5TpX WMtSFijr72DwUSFa23uq+LZ5JUTf9g2PA1VkkhaL7TYVrclBm4pfsAwEKA21kF4Y 536+Mzr/oCSIzGG81wADBQP/d1frnzRuI6pujq3DMH+hNRh9KQZckjsLtTukKy18 f2JSvnDEKj8sv6GelI/DKlBSCRAW0MHu28rmx5WCmyRum7OHnDlIIAE19wZ28ux8 Af8Y0COhAqYY8Zqxqrb23sBvCxkmTYZn68eOC9IC6PG6e+4/KQGgnNbMkvBzbnv9 ytSISwQYEQIADAUCO6ii6AUJAAFRgAAKCRBCNzY0Y/tTEW9ZAJ0XMOG6SmjO8MlK DiuKybmrPoDnzACWLKDApr6MxgHnkyRO5PAFpvaS2ZiLBDuooukBA/9r69N1QdSQ M40Ic4n2Nrnh8ntF/wXI7UhVoTeoyEMxx50R/KEmjTKdHeNoL8TaeWsqRLO9khTu FufNA7MWzXbUiYWguoZ6Z3AIPMgLGSKNyMe7+9/GJIeMzgf+ES8JmSc5toBvrKIk AAE0zgb5w9CCbplNOqQkVB0AydHWh7MK0QAFEbQmSGFycnkgQS4gKFJTQSB0ZXN0 IGtleSkgPGhoQEBkZG9yZi5kZT6IuQQTAQEAIwUCO6ii6QIbDwUJAAKjAAULBwoD BAMVAwIDFgIBAh4BAheAAAoJEIOptNOKdysIOsQD/1YIs0R0vtkcYf5FSiNfz0UK VRghJfbhwefKXjHT5d2gF8QXDqDvu+HH293Hvqw9AxBoY1ynFw5dncC5f5UgDnVM Bz3S4ujIr+CL6DMjLAssRSIBp6+6mVBTsxLnrPR9CG1W8Er+qSTAoMnNGjp0cghX 095vZVy/YSCFFb2sGrZ6mQGiBDuzYioRBADJT2TyxVZwVJ3PSdpWUXVZpx1oGAkX NpGIH3izKmO0PZfzXdUsbgrfA6bncFbP/MPuqDSB/oh9ZOKnGWDre2n8OQuVZ/Cx DfTX3E05L8BKm/c/BTXikwKhivJaZduTYADcKrcapYCvW2VLsczSIs7HPxqoJI8C +U4COr6YnHRaFwCg1sgnVPENxCusaBVsT0eQ/fFahqcD/RXQqxagvzbd6yRwKvTz QliVrUzv04ivC0vD8pu2EaGyi8xgAONbgWhHFMYSQDiSnlvJuI6vZn5kIsRiKA1p taAWzOaKE8klAcHiWVIddyCZqHDmBPvisSO0Vxpq7mhXAhtKbrByyaGp8s4einlG 8vUvz7WPQaN73PCNt/RD4Y9PA/4vZfnHVwhoRsDlkMbAjlHFy1fM23/pS9AMP23M La+vgkgrFvg3Z0bCc3MirCs/xHsyRPPS1LJhamV5x2knV0PlHTAHoGaGPoapZyDs YZDNkZRqjtnoHCfEya83rhxB7GJIsEKM8oSJ515kHYbQ50Pj67WIK9AWOZ4sMAer fDQhjrQiSGFycnkgSC4gKHRlc3Qga2V5KSA8aGhAQGRkb3JmLmRlPohgBBMRAgAg BQI7s2IqBQkAAVGABQsHCgMEAxUDAgMWAgECHgECF4AACgkQyECct8vKuumUcwCc DNsPEKSgDH2bDiDyjoiSiAgl5WMAn2CmmieSzs+pqpEm1YA1baXgGSSVuQENBDuz YjUQBACJygT7QnMtfDnFUnixXdXu/vOCqTbXvmysKnnI4OeDW9QxTr+ugf+f6ROy kJFF75zq/53jgDD2cQkUjU2OWbrrqWF/aYHpYM21TDtIRfRe0llF1kSHPnYW2rjn Y4/AeWvPjToevxursEn1J3Ijd6NentxE/FWhetTEHSWE784/NwAECwP/fpxILkyJ UfPdNY5HqN4Aag1g0ZWjVfaWrebZDt0BIHJpQd8RvUtQnOzCOZ29KOQKS9LHOJOB 2EjysCKTwBDYK5ZonQUtmhdwNZeoLYlLrH1PQ9WuhddjT6dJWMl2yJ+zchmDRFaj f+4AvrbYGnMbMdjCllnDcygSlzUt7KGcjuuITAQYEQIADAUCO7NiNQUJAAFRgAAK CRDIQJy3y8q66b5jAJ9ROwHyPzvGq/vgztzs4972gMuDIQCfeQq3q4tW3qoWyC/T OkvTSeUuzwSYiwQ7s2I3AQP/ZLwvhFPpbGgF04i7p6pLQxyZk7sgO32sOxe2kYbQ K5cdqMiCJKAS5jFfu4wew29u9XYlDKc/dnIqHKbnFhyPC3+m7YSk3T1lpOy1evIM zalaXQPZtJ+RuMRrQO6YD5pmkNeLHk2O5axpDUpk8VZ6t8kqsoKNEt7U4MGS8qWA BWkABRO0JkhhcnJ5IEEuIChSU0EgdGVzdCBrZXkpIDxoaEBAZGRvcmYuZGU+iLkE EwEBACMFAjuzYjcCGw8FCQACowAFCwcKAwQDFQMCAxYCAQIeAQIXgAAKCRCfk5C+ NXBwN1wvA/4oc01t7KIltGdDyU3XYwzA9Sfma6RZhv3MedM0XxHnEW6L1lIhHM46 KXDsORumgiUXPVbCT1N85Ay1gPZT5Oy7/ZraPEMm7FLza6BjYuOxmlRj0dnrHu/v FmljrjGlYPzzNyoit6cxZOsbWlT/Gv6YJDLCT10UBGyh5GtlYft8cpkBogQ7tCnL EQQA/fmXfM8N93cmPNBu6nAWQ5MOev//CfIr8R9hGRH3FV8bO758gFLkHX2Rf/uR cyo8ZHeLw1cI0UfzC3A7TJr62MAoLBS2fn9wgAzd7KsnJFcKmpKVQqUX0EN0i+k4 qnp1jyMCLNAVdTwVXuMTpBKEgYAI5xXNK6FnlmK4RAQ42M8AoKRDGHjijja3HLp/ +4P8/hwHYd8RA/9GjrsMfy9xynS2o99o7LkIaE4skJ7OYeJVfuZ9G6F7Q7JRIoTd d4OqHMeIvLIModiT0prmqRUdwEQS6Qi8HVwAsiUdNL9odleWOb380Ft6Qujn4zhs uvyt7S5/ctU4JPpOCokih/2D0jHzSMO5RPBKq7wQjkU/C3XSm09vsWou6wP/aSdB 6Im2y47qiG9mHoUsCKl9CaJX6W+hl5Pto9OLW6QkYPofMs61hmzXKEZEl6Gbqhu+ 1rUd/35xahvh+hgjtRsW3XHcd7VrAPwkEruFgOM01q++sZg/4JXPDLVhAHYi7Xin vBsKAvOXvMGqhgByvyM9VS6bcIF7kgkIvSuodYy0IkhhcnJ5IEguICh0ZXN0IGtl eSkgPGhoQEBkZG9yZi5kZT6IYAQTEQIAIAUCO7QpywUJAAFRgAULBwoDBAMVAwID FgIBAh4BAheAAAoJEAQMJpyCUltmKsIAoJ5uxGMJtPAAGEBFidTybQ44Lk/AAJ9p h2WUiJFTUeNYbZa9YHcg1gk2+7kBDQQ7tCnREAQAvkwf0DiD1zbcqiBajDGZhDvE 0cb5BUbMcuJvSH0FBXopIIniYcmnfu5q393y8WPc/rVrJVHrAU2RyHTAoX8vI14H vc4HUFDdnoj6Wk/xSiuYP8C4VN0NX3G+S+C4Pa1Er2s/m4X9PRz/YA0bMVynp7f9 QM18aN++OpWV2jVBRd8AAwUD/3cuV7jHchUeZ7h6Upagzj7quky9o6o5lB///Pk9 QZ5HEBQTCJDvmu13xCaaO9II4XFwjYntYbPOxOTJ1aEBKQubkUo0SIj8i5rhLTeD kkHB5M/rO40gS/MFNMVWqFCvUIQk7yBkum+MFcJFSEz7OMpL3K5X93W9twllqtUZ qjvuiEwEGBECAAwFAju0KdEFCQABUYAACgkQBAwmnIJSW2YNEwCfbPwQzlrLRCUu JM2inVLcz/3jijIAoJWggcMT69FfppDw3sA2h2PtAdOAmIsEO7Qp0gEEAMuvaXje qJDz2mAbPWARryInKsu+SJiOBsyNPdX2WIJTABcRh7FckP07IodeDPFGh4EgS/FE lDZRsMlL5SWf6Fj80JUXuyrbLNmvv0qUlDNVw1uJoeYulIypU1ZbuGSq+sDVyYur PDkXTlBfptMGII7Yuu+Q5Xk3CXymvDsQNbslAAURtCZIYXJyeSBBLiAoUlNBIHRl c3Qga2V5KSA8aGhAQGRkb3JmLmRlPoi5BBMBAQAjBQI7tCnSAhsPBQkAAqMABQsH CgMEAxUDAgMWAgECHgECF4AACgkQmwfivFMU1yHXHQP/ZZwHatqc12l6Pn9iawmU mFru8jnOhMJAzCQ/H+gUldmN9qsSQV0pFj+fP7NkNXEPOvkO4DS+ME/mHcm7JxDC 4Z0MZbt4Xlkhffie0J6kwuiEuSoQ70lZQxbME3f+lBcNJTIhsTupJEsqqf3MaC+y tvHu/CcE8UkT9DPSBES5Qn2ZAaIEO7Qs+REEALaiacuS+YqTQ9Xrl462vSA6Ahvo hm6PUW8dg3kMOthEMVn0+fiQi7MvfDrgws51geKklPoHPwHKZs9/T7him2dcrHzN suh7e8i6kVGSXyLPLJUCnhklzxDnBEEjnXUG1uZQz306L/wE9oX/b76Yt08gbkPa 33lYeep0bwvO4oBHAKCYAha4i/nB5MdV03XppOeOtp5UbwQAsCzn7IWSX6H9oYIN nyYBKOp1BpnidmsR878tzRHdM06A2lBGqF9O+Jt7H7vlqogX24LRuE7yw9aUTWKx iw/6UP+QEKHAR3RAbPv9Tg4rqyMDwHhzkebkc17VJyVSaLIEEo6TSkOl+tCqBvV1 T5qq+z5lGzcaWqRYCkXEJu3Y32gEAKY2nu/lrMzBCHXRunNuMbhSkcIb8OplbWc4 IDfrxw740iCsg5wh2GNzmEtPzwy3ay6sQhkGruV6pYpUii5Ms24e8ztSn85x7muL i1EhdqpExKt547wXz8ShXShP2Fst6bVfsaGbFU5a3kX/7BEMzzRrcSd6g85aCGWx a/Td6F8DtCJIYXJyeSBILiAodGVzdCBrZXkpIDxoaEBAZGRvcmYuZGU+iGAEExEC ACAFAju0LPkFCQABUYAFCwcKAwQDFQMCAxYCAQIeAQIXgAAKCRAM8Ubp5JhAg8/T AJ9PKJJLVr4KwCetNM2FWR+0Ldug/wCfbgPT1B7WtvQMztTsJom49sc1rGi5AQ0E O7QtABAEAM1AVhC7V3EnU5XF7M7OPozDnk9fOgGpCh4HeD8Emuqh4TRVWSmCSA+Y qWt5r1L4TpV4QQX+vUDHet2i/IieIFKOrowuwiONln+YGToxXSB8tOKKr4p0qJ/w 4ozijJZ6NVBmsGeXZIpu5LB2Ar4K3z3HZmwNSlDznVNwXJXNpfIXAAMHA/48d7y3 W9y7jHD6QatVl68EelxV/x7BWHQF0JEltwHCKN65H5yV6IhUn84VNJazS5jVwYUv bmbQu09Ndm7iKX/Gfwo5EyPxGzbLl/W5fA3vn1USXJFX2Tk7wALQ5SAZHHbrluIp /660zvXn3E+466KchiRCdOfqFpCd3Rxgrv/hAohMBBgRAgAMBQI7tC0ABQkAAVGA AAoJEAzxRunkmECDFXwAn0NXK//V3U3k1LNXeU0mz6GYmaPRAJ9eRstO6/n170QF 3Q7bkGNUvtPVdZiLBDu0LQEBA/933MLSz3/cCubVa6XR94o7mM8DSmT+Jl1wINBZ iqgx+W7Z32Pe8ioU03+2r0kOW9Re11zjXX0+vkyCHulWdJpC1ipuKHx9tiA1RtfU 2uqq2B4jufbxLlb5Ix9H+4sKl0ZJGhyH+C+YrPa7umfJAv9Nybl98w/SCSCM1UZr SiT/UwAFEbQmSGFycnkgQS4gKFJTQSB0ZXN0IGtleSkgPGhoQEBkZG9yZi5kZT6I uQQTAQEAIwUCO7QtAQIbDwUJAAKjAAULBwoDBAMVAwIDFgIBAh4BAheAAAoJEGre QqJ0A/WJWGwD/2r6jQvyWpIQsyK0BwR7yrvi36BqhCA7Mh1ZmnQbgZhrHIdTrFQC 5a3XxYA4l1/VYb6+aXPmRVfg6+VNAWXSh5UR8IS81No4mxSU8RqMHyjdGsrOHGus n6ckZlXtJizsJsXZx+ue4sxne9zTtiUYwDFlTlANNPiwpnSGQQGEarKWmQGiBDu0 L9kRBAD8/PiBfF/3DoGsadZWnzFmpmaBmuyWi7wG7UCWVfCWf9mrtYgF54/wuX+w UvH0JOLhPeJkMunI9UwZDQiRAEQqxkVEN3EjAaxQ/+1ip3lPTi7k2xunLwei0QWb /i2rkotviOzg/tZOFYWa2MiEhiMx0rSQBUHszS3vjHfc5TVa7wCgk9GBkr9m4L5V OA+Pn/S4vttDRjMD/1CmsrzbOh+E8ViYqTDUHqdawzlAyjU8iCVmjwMwO+Zfohbs qwQMN3DeDU7AykXTQgjn5pawttY9Hkg3Is8t41XlwHZCrM0EiygrK2xquMi/mSIB 5X0HS/LJkjCJegtF++OhM/VVPeWnI444b4fFk8Ndo5GyEdUS/Rz/C1+tvq/zA/9Y sYdeqAb7StJfEDla25vx+hcE2bKX+Wy2+RtEUQV9VSWyh+Bgs5S8kN+HwFpdcXp+ j3+W3iT+QjJxtnlmAq0ugJblLiCYKNcPr8eDBr6vTjHSsiWXGC21lJ8ewg2zqP9Z vr2bF4pAPM/hhX0bDi8C/h0nUkFcRGWxuoVifo0TLrQiSGFycnkgSC4gKHRlc3Qg a2V5KSA8aGhAQGRkb3JmLmRlPohgBBMRAgAgBQI7tC/ZBQkAAVGABQsHCgMEAxUD AgMWAgECHgECF4AACgkQcBJ6QSqLCEBA4QCdHAGobRtfv+IDDFpbW4rUqm0zQawA nRFFs5sBFUjq1/5zG74QHo0pY07auQENBDu0L94QBADW/R4I4DMQvkGlvP6jxWLz 6TgkPMAAfEyxIJoZYLJggau4XJYyElmUGVFVH36DPE0453yN7j3gBxVbOCZamUOI NyehuBy8Gxom36Oegzvr/43TcNPTHZnVl9wJVCFmOsAR3L8A617lAguvUzlj4e7G wV5yCwwlNtBGO27Lq/dISwADBgP+JB4l+2Bdx9wMs1zVDGQj0BERtyHmwSVzLn3B G0pAM9wf6Me5/o633rOOQYl1mwmXXjUWZasmjegqWLUFPEkCyFMHR0CWWI9CdBOQ ROBFb6jK9Oq2jYoGxTJ4kCtMGo3z/pNsAGdNtgj5s0AgUIoQHw+L7u6XF8De/Sww 56eyuKOITAQYEQIADAUCO7Qv3gUJAAFRgAAKCRBwEnpBKosIQNT/AJ9z794Z40YO apyZWN3NyQPI1zM0vwCfZIkY3c9J7WVXDqO+FlXWrb9L722YiwQ7tC/gAQP/U1mk j+I4eBCICqWjFBqJe84v1fmFu1c9sUw3wnVL7vxxHEEq1xvPgdfPlXQ6tMpcbtpe 7nbWGuU554CMEWF/ZK99iY+Ln+zpG1CW/br6YtQWCm1fLww1WJoANloUimZs9B9p FtjVGNWDyRI8q3flw5rcOo7aCM1+BtNQhNM5RC8ABRO0JkhhcnJ5IEEuIChSU0Eg dGVzdCBrZXkpIDxoaEBAZGRvcmYuZGU+iLkEEwEBACMFAju0L+ACGw8FCQACowAF CwcKAwQDFQMCAxYCAQIeAQIXgAAKCRBHrPEvKhKYmd/XA/4uJqeH2WLMAtbxuARZ TsDwrof1adVKpVgn/KKFle/yId4co0DmeFS6a/HbHPYVtlQ2TWWASVu6geNobua3 6MnG9vHs2W4YmQGTSO8T3MXP4sOp9oinwtvcgZW+XGfCX4PAZDoxHUwN/UVwGkiU wRjlQVX31vkPxZDR2UBoHjBYDg== =XVtd -----END PGP PUBLIC KEY BLOCK----- gnupg-1.4.20/checks/signencrypt.test0000755000175000017500000000046412635262326014363 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking signing and encryption for i in $plain_files $data_files ; do echo "$usrpass1" | $GPG --passphrase-fd 0 --always-trust \ -se -o x --yes -r "$usrname2" $i $GPG -o y --yes x cmp $i y || error "$i: mismatch" done gnupg-1.4.20/checks/encrypt.test0000755000175000017500000000073012635262326013476 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking encryption for i in $plain_files $data_files ; do $GPG --always-trust -e -o x --yes -r "$usrname2" $i $GPG -o y --yes x cmp $i y || error "$i: mismatch" done for ca in `all_cipher_algos` ; do echo_n "$ca " for i in $plain_files $data_files ; do $GPG --always-trust -e -o x --yes -r "$usrname2" --cipher-algo $ca $i $GPG -o y --yes x cmp $i y || error "$i: mismatch" done done echo_n "| " gnupg-1.4.20/checks/seat.test0000755000175000017500000000036712635262326012754 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 for i in $plain_files ; do echo "$usrpass1" | $GPG --passphrase-fd 0 --always-trust -seat \ -r two -o x --yes $i $GPG -o y --yes x cmp $i y || error "$i: mismatch" done gnupg-1.4.20/checks/options0000644000175000017500000000015012635262553012522 00000000000000no-greeting no-secmem-warning no-permission-warning batch no-auto-check-trustdb allow-weak-digest-algos gnupg-1.4.20/checks/encrypt-dsa.test0000755000175000017500000000103712635262326014244 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking encryption for i in $plain_files $data_files ; do $GPG $dsa_keyrings --always-trust -e -o x --yes -r "$dsa_usrname2" $i $GPG $dsa_keyrings -o y --yes x cmp $i y || error "$i: mismatch" done for ca in `all_cipher_algos` ; do echo_n "$ca " for i in $plain_files $data_files ; do $GPG $dsa_keyrings --always-trust --cipher-algo $ca -e \ -o x --yes -r "$dsa_usrname2" $i $GPG $dsa_keyrings -o y --yes x cmp $i y || error "$i: mismatch" done done echo_n "| " gnupg-1.4.20/checks/sigs-dsa.test0000755000175000017500000000101212635262326013516 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking DSA signatures (default digest algo) for i in $plain_files $data_files; do $GPG $dsa_keyrings -s -o x --yes -u $dsa_usrname1 $i $GPG $dsa_keyrings -o y --yes x cmp $i y || error "$i: mismatch" done for da in ripemd160 sha1; do for i in $plain_files; do $GPG $dsa_keyrings --digest-algo $da \ -s -o x --yes -u $dsa_usrname1 $i $GPG $dsa_keyrings -o y --yes x cmp $i y || error "$i: mismatch" # process only the first one break done done gnupg-1.4.20/checks/plain-2o.asc0000644000175000017500000000440412635262326013221 00000000000000-----BEGIN PGP ARMORED FILE----- Version: GNUPG v0.3.4 (GNU/Linux) Comment: Get GNUPG from ftp://ftp.guug.de/pub/gcrypt/ Comment: Use "gpgm --dearmor" for unpacking Cgo8c2VjdD5Wb3J3b3J0CjxwPgpEZXIgV2VydCBlaW5lciBPcnRzY2hyb25payBpc3Qgb2Zm ZW5iYXIgdW5kIGJlZGFyZiBrZWluZXIgRXL2cnRlcnVuZy4KTWl0IEF1c2JydWNoIGRlcyBX ZWx0a3JpZWdlc18sIGlubWl0dGVuIGRlciBnZXdhbHRpZ2VuIEdlc2NoZWhuaXNzZSwgZvxo bHRlCmRlciBLbGVydXNfIHVuc2VyZXNfIEVpY2hzX2ZlbGRlc18gZGFzXyBtZWhyIHdpZSBm cvxoZXIgdW5kIHNvCmVyc3Rhcmt0ZSBkYXNfIFN0cmViZW4sIGVpbmUgc29sY2hlIE9ydHNf Z2VzY2hpY2h0ZSB6dSBzY2FoZmZlbiwgdW0KdW5zZXJlbiBOYWNoa29tbWVuIHp1IGJlcmlj aHRlbiwgd2FzXyBhdWNoIGRpZSBrbGVpbnN0ZW4gRPZyZmVyIGluCmRlciBncm/fZW4gWmVp dCBnZWxlaXN0ZXQsIGVybGVidCB1bmQgZXJsaXR0ZW4gaGFiZW4uCjxwPgpVbmQgc28gYmVn YW5uIGF1Y2ggaWNoIGltIERlemVtYmVyIDE5MTQsIGRlbiA/Pz8/Pz8/Pz8KU3RvZmYsIHdv IGltbWVyIGljaCBpaG4gYXVjaCBudXIgc28gc3DkcmxpY2ggZmluZGVuIGtvbm50ZSwgenUK c2FtbWVsbiwgaWNoIGJlZnJhZ3RlIHp1buRjaHN0IGVtc2lnIGRpZSDkbHRlc3RlbiBMZXV0 ZSwKZHVyY2hmb3JzY2h0ZSBzb2Rhbm4gZGFzIGdhbnplIFBmYXJyYXJjaGl2LCBkYXMgU2No dWx6ZW5hcmNoaXYKYmVpZGVyIFBmYXJyZPZyZmVyLCBkYXMgS29tbWlzc2FyaWF0c19hcmNo aXYgenUgSGVpbGlnZW5zdGFkdCwKZW5kbGljaCBhdWNoIDE5MTYgZGFzIFN0YWF0c19hcmNo aXYgenUgTWFnZGVidXJnLiBTZWxic3R2ZXJzdORuZGxpY2gKYXJiZWl0ZXRlIGljaCBhdWNo IGRpZSBlaW5zY2hs5GdpZ2UgTGl0ZXJhdHVyIGR1cmNoLiBHYXIgdmllbGUgWmVpdAp1bmQg TfxoZSBoYXQgZXNfIGdla29zdGV0IHVtIG5hY2ggbWVociBhbHMgOCBKYWhyZW4gZGllIE9y dHNjaHJvbmlrIHZvbgpHcm/fYmFydGxvZmYgdW5kIHZvbSBGaWxpYWxkb3JmIFdpbGJpY2gg Z2Vzb25kZXJ0IHp1IHNjaGFmZmVuLgo8cCB2c3BhY2U9IjJleCI+CjxiZj5Hcm/fYmFydGxv ZmYsPC8+IGRlbiAyMy4gTeRyeiAxOTIzLgo8cCB2c3BhY2U9IjNleCIgYWxpZ249cmlnaHQ+ CjxiZi9OaWtvbGF1cyBH9nJpbmcsLyBQZmFycmVyLgo8L3A+Cgo8IS0tIEhpZXIgZm9sZ3Qg ZWluIFN0ZW1wZWwgdm9uIG1laW5lbSBPcGE6CgkgIFJ1ZC4gS29jaAogICAgIEdyb99iYXJ0 bG9mZi9FaWNoc2ZlbGQKCUFuZ2VyIDE2MQotLT4KPCEtLSBGSVhNRTogaGllciBrb21tdCBl aW5lbiBaaWVybGluaWUgLS0+Cgo8cCB2c3BhY2U9ZmlsbD4gPCEtLSBEZXIgUmVzdCBrYW0g YW0gRW5kZSBkZXIgU2VpdGUgLS0+CjxwIGFsaWduPWNlbnRlcj4gTGl0ZXJhdHVyOiA8L3A+ CjEpIEpvaC4gV29sZjogUG9saXRpc2NoZSBHZXNjaGljaHRlIGRlcyBFaWNoc2YuIEf2dHQu IDE3OTIgdW5kCkz2ZmZsZXIgMTkyMS4gMikgSy4gR2VzY2hpY2h0ZSwgV29sZiAxODE2IEf2 dHQuICAzKSBLbmllYjogR2VzY2guCmRlciBSZWYuIHUuIEdlZ2VucmVmPz8/Cgo8IS0tIEZJ WE1FOiBEZXIgUmVzdCBmZWhsdCBub2NoIC0tPgoKCgoKCgoKCjwvc2VjdD4K =9nnj -----END PGP ARMORED FILE----- gnupg-1.4.20/checks/pubdemo.asc0000644000175000017500000010547212635262326013242 0000000000000026 demo keys: pub 1024D/68697734 1999-03-08 Alpha Test (demo key) uid Alice (demo key) uid Alfa Test (demo key) sub 1024g/46A871F8 1999-03-08 pub 1024D/1AFDAB6C 1999-03-08 Charlie Test (demo key) sub 1024g/BC43DA60 1999-03-08 pub 1024D/FAEF6D1B 1999-03-08 Echo Test (demo key) uid Eve (demo key) uid Echelon (demo key) sub 1024g/7272144D 1999-03-08 pub 1024D/8FC282E6 1999-03-08 Golf Test (demo key) sub 1024g/9DCAD354 1999-03-08 pub 1024D/04259677 1999-03-08 India Test (demo key) sub 1024g/61F76C73 1999-03-08 pub 1024D/43C2D0C7 1999-03-08 Kilo Test (demo key) sub 1024g/9AF64D02 1999-03-08 pub 1024D/A9E3B0B2 1999-03-08 Bravo Test (demo key) uid Bob (demo key) sub 1024g/E29BA37F 1999-03-08 pub 1024D/EB9DC9E6 1999-03-08 Delta Test (demo key) sub 1024g/B0C45424 1999-03-08 pub 1024D/7372E243 1999-03-08 Foxtrot Test (demo key) sub 1024g/EE45198E 1999-03-08 pub 1024D/34C6E3F1 1999-03-08 Hotel Test (demo key) sub 1024g/D622AD0A 1999-03-08 pub 1024D/D2699313 1999-03-08 Juliet Test (demo key) sub 1024g/35F8F136 1999-03-08 pub 1024D/B79103F8 1999-03-08 Lima Test (demo key) sub 1024g/FE56350C 1999-03-08 pub 1024D/BE5CF886 1999-03-08 Mike Test (demo key) uid Mallory (demo key) sub 1024g/4F31EAE8 1999-03-08 pub 1024D/30CEC684 1999-03-08 November Test (demo key) sub 1024g/8B70E472 1999-03-08 pub 1024D/6D9732AC 1999-03-08 Oscar Test (demo key) sub 1024g/2681619F 1999-03-08 pub 1024D/3FF13206 1999-03-08 Papa test (demo key) sub 1024g/63330D9C 1999-03-08 pub 1024D/3C661C84 1999-03-08 Quebec Test (demo key) sub 1024g/A029ACF4 1999-03-08 pub 1024D/777FBED3 1999-03-08 Romeo Test (demo key) sub 1024g/11D102EA 1999-03-08 pub 1024D/A3AE3EA1 1999-03-08 Sierra Test (demo key) sub 1024g/0F1B50B4 1999-03-08 pub 1024D/85A81F38 1999-03-08 Tango Test (demo key) sub 1024g/101C0402 1999-03-08 pub 1024D/653244D6 1999-03-08 Uniform Test (demo key) sub 1024g/5522BDB9 1999-03-08 pub 1024D/61F04784 1999-03-08 Victor Test (demo key) sub 1024g/07287134 1999-03-08 pub 1024D/EC67DBDE 1999-03-08 Whisky Test (demo key) sub 1024g/FD6E27F6 1999-03-08 pub 1024D/567FB34A 1999-03-08 XRay Test (demo key) sub 1024g/41E408BE 1999-03-08 pub 1024D/4B11B25F 1999-03-08 Yankee Test (demo key) sub 1024g/F7B080AD 1999-03-08 pub 1024D/54ACD246 1999-03-08 Zulu Test (demo key) sub 1024g/A172C881 1999-03-08 -----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v0.9.3 (GNU/Linux) Comment: For info see http://www.gnupg.org mQGiBDbjjp4RBAC2ZbFDX0wmJI8yLDYQdIiZeAuHLmfyHsqXaLGUMZtWiAvn/hNp ctwahmzKm5oXinHUvUkLOQ0s8rOlu15nhw4azc30rTP1LsIkn5zORNnFdgYC6RKy hOeim/63+/yGtdnTm49lVfaCqwsEmBCEkXaeWDGq+ie1b89J89T6n/JquwCgoQkj VeVGG+B/SzJ6+yifdHWQVkcD/RXDyLXX4+WHGP2aet51XlKojWGwsZmc9LPPYhwU /RcUO7ce1QQb0XFlUVFBhY0JQpM/ty/kNi+aGWFzigbQ+HAWZkUvA8+VIAVneN+p +SHhGIyLTXKpAYTq46AwvllZ5Cpvf02Cp/+W1aVyA0qnBWMyeIxXmR9HOi6lxxn5 cjajA/9VZufOXWqCXkBvz4Oy3Q5FbjQQ0/+ty8rDn8OTaiPi41FyUnEi6LO+qyBS 09FjnZj++PkcRcXW99SNxmEJRY7MuNHt5wIvEH2jNEOJ9lszzZFBDbuwsjXHK35+ lPbGEy69xCP26iEafysKKbRXJhE1C+tk8SnK+Gm62sivmK/5arQpQWxwaGEgVGVz dCAoZGVtbyBrZXkpIDxhbHBoYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOOngML CgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NDl4AKCBLmRplv/8ZfSqep5IjqEAuaXv WwCgl6NEzT+/WewPTGcwZY+pLkycLv20EEFsaWNlIChkZW1vIGtleSmIVQQTEQIA FQUCNuO2qwMLCgMDFQMCAxYCAQIXgAAKCRAtcnzHaGl3NCeMAJ9MeUVrago5Jc6P dwdeN5OMwby37QCghW65cZTQlD1bBlIq/QM8bz9AN4G0J0FsZmEgVGVzdCAoZGVt byBrZXkpIDxhbGZhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247hYAwsKAwMVAwID FgIBAheAAAoJEC1yfMdoaXc0t8IAoJPwa6j+Vm5Vi3Nvuo8JZri4PJ/DAJ9dqbma JdB8FdJnHfGh1rXK3y/JcrkBDQQ2448PEAQAnI3XH1f0uyN9fZnw72zsHMw706g7 EW29nD4UDQG4OzRZViSrUa5n39eI7QrfTO+1meVvs0y8F/PvFst5jH68rPLnGSrX z4sTl1T4cop1FBkquvCAKwPLy0lE7jjtCyItOSwIOo8xoTfY4JEEXmcqsbm+KHv9 yYSF/YK4Cf7bIzcAAwcD/Rnl5jKxoucDA96pD2829TKsLFQSau+Xiy8bvOSSDdly ABsOkNBSaeKO3eAQEKgDM7dzjVNTnAlpQ0EQ8Y9Z8pxOWYEQYlaMrnRBC4DZ2Iad zEhLlIOz5BVp/jfhrr8oVVBwKZXsrz9PZLz+e4Yn+siUUvlei9boD9L2ZgSOHakP iEYEGBECAAYFAjbjjw8ACgkQLXJ8x2hpdzQgqQCfcDXmD8uNVdKg/C9vqI3JSndq knsAnRxzVeHi/iJ73OCKtvFrHbV9GogqmQGiBDbjkGcRBAC/DCQungO2iJ7j9+9q d2crjBU8K+AmQhs27JBkJqtAbC/xFqkHBsA1Pi8Zb6TLa/OCm2PbXFiM5x00wiEn VKNzuGOzU8uHB6kwWtLj8+V7VOWOkSDEtnlTF6u0y9JOvs7GwDvqOM5C3QH7La+z nNeAu1527Hj6l0XGSAzyvp+NkwCgnktU11VFpKSIdoplZBayN9OzT8sD/Awc/890 fiSMWYNGo4+n6IHxhjBBM9lL+DAe1RtCEtwUSWNrGsIxFnDRkMxvMpaT4GusG+DP haTddrDBSyFiCLxKDBYgMbSO6wQ9g6zWEEh1ZMTMVU/akr81DOEColXn/f3Q4sRj xI3hu2z8tjVewAPNTuWETQ6iHHoVqdpkK4aABACfbMrnfK6TujxSs91MfKBWfYxy w9hjM6+VV8cJJdDXiheMKzWcrVecwgYYzukmNinO//BRmQcs1wdfi5UdfHLNFDig w96SdyZpHx+79ghD3NqDmzYakoRIoDKcZAIrAjgfl5if6vIiA4c1LjhSdcVTBsSy ic/mkk01EgztWKY0abQtQ2hhcmxpZSBUZXN0IChkZW1vIGtleSkgPGNoYXJsaWVA ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjkGcDCwoDAxUDAgMWAgECF4AACgkQQT9K 8xr9q2w+RACfX3AwFwPu5+mr/f1Sa/Wv0m9T57gAn1TBIoUErMqJehQZu73N0u93 fqSKuQENBDbjkIIQBAChY8NSvu6sK0p4D0AVBsRz8iVXYqbRlRTZAHS4LCXwx/i8 FmfdIXnaNLOoyi44YruSCnlZdh4YWquCx2mgywG589AzcFhahmqElNbKb7m4F//E GIZK0zTgW13tQwG9hTXOhYeqchnOOaDDwPEK1Gr+2o/5ANqhqrin0TFFBWLgdwAD BwP/R009s61X/FkUUAh8w4Tua6qndN/2GsqXsyPYjdF5E3gErK8jDcDLniOHqksw V17bJG81czCRE5JcVFLLWQJg9cpeoTpP+YcF+m9whtswaOJ/LPrx888i/OmluSD8 1VP+6zBhhTUbpazfLEdt3XczpW7CNdNbyiEcgT+6Cr+W2GaIRgQYEQIABgUCNuOQ ggAKCRBBP0rzGv2rbLWtAJwNtSGPYjbesLSTeRwKGA5ffZiFDgCfTPC6I+XyGavj HJraHTgS/bSCN0OZAaIENuORzREEAIrOxkw6rRDOpbqKenlrMRYvfqoVFafTekvs ZW8M0GVQOBYwqn9VUfSV/H8Iy3nJsU+cU4UFXEaoHhVWgspMtjYHvxXBTD2UHmj+ Y7+RkVnOT7x/UsPKbxjkweeleGXkeHECwwZuQhebSrtQQllqtjCx33Le013ukAs2 SnI83cPLAKDfVb6yjfhG0Avkx83VmlFqXXH1pwQAhVhMi1T06SNYzbKAmdNBfBWr v9m2l5PJnUTpSWUum6ueJLHzkEM0XgVnHt+YdFuzXgUafsnqEn+2N4tI0zuJqzoi /9DQnEvKijZxihtYq3S3rN6UIQ2aXFHthvVtxZxocZeluYaWHPeedJlI9h9yObZn 0mLFXFY6TUiHQYs8RNgD/0iNbequyxzEKdIdzD0Ns+3WjIVBlYl51Zdvqyo2+U+2 70hXVdIssrsqKr1DwRlsCRSwMY+nrB0ZUOlvLaIB7qCQke3C9myu/fJoGDhMZOYA XsatVR0EGTdXnSuCxqNhEiqwlbZGMAcwFO+oWBSgGyjFPHTMSOw0XS42d73UNxTa tCdFY2hvIFRlc3QgKGRlbW8ga2V5KSA8ZWNob0BleGFtcGxlLm5ldD6IVQQTEQIA FQUCNuOkfwMLCgMDFQMCAxYCAQIXgAAKCRAxjB+u+u9tG2cDAKCzaFoiAm79QSmY ISeiM7XMKhoHDACaA8CU1j8+20C7rNipOHYz3KfUMhe0DkV2ZSAoZGVtbyBrZXkp iFUEExECABUFAjbjuAADCwoDAxUDAgMWAgECF4AACgkQMYwfrvrvbRsg3QCeOMf0 g3znbc8IBiTrIPUgUz9p3WoAoJ6eRZTZk7z+hTyx4JDceReQbYlGtBJFY2hlbG9u IChkZW1vIGtleSmIVQQTEQIAFQUCNuO4HwMLCgMDFQMCAxYCAQIXgAAKCRAxjB+u +u9tG16mAJ46lQbmtWRZUldQtp4ZnOptP7ZJtQCfceYMZfMAnqUKJiHk2tMhvwDv Ah25AQ0ENuOR/xAEALSl7SaNEf8mYovea5tJNEwoZx3vv6XymyXga1wDqKo2PeDr nRDbHGBb5BvWIv1J6Igk/wq4R+Pq989UpkcqREB+yOeluE3zPPtZBrbLySSaqiMe gYiHnAAPc0TqjH7UPZa+fJKZTUk64BCUQN9ELkL2FKtAGQ7RNQJYvbCq4O/XAAMF BACXdO4a3ZIK5hJejhHZ01mkHa6Sqoc6PuedNC7tlWiLU62BljGiv/DvzcbMsnvk 991AxJ3pP4ZvKr5CClqIG+WZa1zmtwXdmCfGJb2fbNSVD4zp16e5slPr8Cp+fvIv 2/SyvwruROs+oAzSVvoMAzAGSk3yj5nT5oikbn+M62fC5IhGBBgRAgAGBQI245H/ AAoJEDGMH676720bj5AAnRH+1me1/iHDnS5ltXysOdl24/BMAKCPThApQ7lJe8LY r61+lXUUwr1TKZkBogQ245LREQQAubUOd0B7cFzJHF5vo5NwiMZ1JXPjyNqL2OWE /XfaeJiB55oMmVEPmK1JF69wU7ZBpo1l4PEIWcP7WRMqvBEFl+8LnelRkSW95kwF r3D8TRnarZy3kfiBF1t33dnkVTaZYxCDKOBdZ/ZiRvLa6gZ/KHhITfzaS7h36G2M bAlGlj8AoKQPFsEPjByKYdx72m5/2Ju/4d4jA/oCNAKaJH7N8Y3HLis1ShhpytJP 1yC9GJjtec3ugzYSC7RKV3NJcBeCX4om3KhiDSN6YYVICf4wdqz6TAocoqPzR2t7 Fz6+upxIgh5WGnnCs2e7uO1eXUCSXONfiDEDzRKGTQjkdvwFo+880DkiGln/qmRr cILA568dwNnOrBio5QP/dbkpUBhqGDr2LchpkoYyQlqzbvUpXJ1xlfZim1jfrmdf sk83dE3iBzvmT8ByIZcMoqDEHil95LmJp3qw1yVeApP/ZWR+0XiBLEF9GhcAOc5i hH2ACSXLWiRXpyMmK2/erTvTX3QkAcqoQ1cFWCwNNCrlgycB84Hdm5GXdajp7cC0 J0dvbGYgVGVzdCAoZGVtbyBrZXkpIDxnb2xmQGV4YW1wbGUubmV0PohVBBMRAgAV BQI245LRAwsKAwMVAwIDFgIBAheAAAoJEBaEEKSPwoLmIuMAn222gK7ibwOXzIKd /gZP09JC/3+eAKCOelaqqYqNNbku0gA84+O7d1kMqrkBDQQ245L8EAQAtsGp/UnA 1y4AqjewlkkTOQevLwtzwm3pmLLjl2Y3TfGn8Ni0h8Wd27kV32MUZyTaNaZuDxpD EO2aUIpGWVQmWvlqCFV2F0Z2AI8R4bx1tC2kD758hUvR+S2hn9lK7E1lQPuvec2L Eml+uvVxW/Vm4iDBgeMlIlz70MFC9LUnfpMAAwUD/At7Clo7D4dNk43BMvhQ8VgJ +INy37Dj8PHX2sCZZ/tIfSwNIU3m2ygSVreTlDKo406v6Qmefs/m9dH9lsBE/8QL 40Ek3SY6xV/QzTVN44QgnpRKWpfaMbGzWJVXeczlNkTeIZZo/nhDm+aMucMu/e7E KbG64BnrQk7Lz6LSKb2xiEYEGBECAAYFAjbjkvwACgkQFoQQpI/Cgub37ACgicCk 6XvTqEv34RXVSkhf+EcDHOMAn3krqPc5ZeSJGa7RfRcVhm5QtcvymQGiBDbjlLER BADIbiZFRBlqCMOCXTECdpJssJDnAmpir+yfAKX4hsOVdygepdA071Ams8rApABS /c2+Tuaplad8w+iyQs4BKuzqeQK/YWj0DDqyY2LM7qJbvFd6nC/GOGjiEucTTSgY 8IOFScBTTks7alMGjHAdWzSjq+1ppWJeTSzp04UKhV1/0wCguOIaUr/cMVahSuoi K4Tdot+CR10EAKunWycnUG2IaGYqO3sCfpChzktWdTjUn9ESJAjKK1QUC89f5+Kr MPITdUPypf++9MumBkJi+8R0GVJ8zwhwKfX9CHhrD0kfO68pCDxZyW+dDzOr/tFX 0nuH9pL8oiEMkikaGLph+N+N1Ip8thh+vdLhNUr3EPRlrcAfv+WtOpbyA/9+kpa7 x8nIn2SofJisj+PjKS3lAoGPe0eOoK/sVBvgVjy3Gc3d8vMG29r+2WRIpGwuhuLG NlQYX65BHV1MK/TjYvFnpoRSqtTK3GpRzTmkJIC8RlXxtfYf/n66VLB3EoTOzWHY 29JMCJnnjPMoaMc2YSK10Bo8P/27nF0CKo8XEbQpSW5kaWEgVGVzdCAoZGVtbyBr ZXkpIDxpbmRpYUBleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOUsQMLCgMDFQMCAxYC AQIXgAAKCRAf6PxvBCWWd1pYAKCVZ7DfK+i/YZGyEu18DnWq0ixligCghGwDoMGg LnenSjyShMZ+1Ecekia5AQ0ENuOVEhAEAIMMgk/e8lsV/KEkd4/jNK4yFj5iy/Fa on800I3GUzETuQA2AT3getR+GuV4pbZWE/80b9hnNW50UJGiP1+SXfVtY5vT8p/g NFwn5d0O/pq3bpgFRJmoawTzx8SFDwCVPHEcwOHE2j5LvfrvRBOyKU32tr976ri+ Uowt0+92LuA7AAMFA/0Yo9dDqhjR2UoNcYfEZwWhRHaaJenP3z3QbzjJkASb5H84 xCTEpv0dqEtVTJUoIo8Lh5VjbiCwok4QPLVSbQFeHqTKb7N96PjevkZ1Co6OrLCN OcPRvXxgCwSGbuuLMkQJEutnXLu0DOKquY94KXXh79La7lTgjReE/1Wzbgc1+ohG BBgRAgAGBQI245USAAoJEB/o/G8EJZZ3CXgAoI5oimsZs8ZKmLb5sPB4AZzngCyz AJ9og9spt3EYXAB95XmfzqgJBRv04ZkBogQ245UlEQQAnKdAaILozJ04V6Z+FIwQ EY/aF4EFrJJIc+uewF7ukZl/7uUZqSxqmzZjbqigyMFGybJSMa6TpwN0BKG5CJe0 4R/mVCIRsz1Jx5YXezN3UFsNVNE36R8l8dxWG+wgj2m60gu4VlodcpVMc/kRiSUg KUfg/xmPnRe3SJZSlG2lBm8AoNc/r5DW86om3MHWK8AoyhvVXhWvA/wOcjx6gfTT KftzpQBhOF0U0fC3npQC6bvjLjTBhQjC3WX5rfwJqMmrudRbEO1sFqzTOQPtb9xa tMeVqTcOi6+x2zfXes4nTfi9Lgq1z8HhE/LnktwxZxyPeOXqXu9N023IyQTv7mC5 9C1xMZk4POOv9WZUGz4C85s2/9iTJCfkMwP+MRW0S9mHmisruCY6TDVFc12KIFMI PSmWav6gW6bCAA+wIHfmcSyR6MHiLV2gtJ0vQuqgyWfeTiaxPof07dg9pZsV7Hk1 ZUhEmloeOcfZmwtHkRhWGEbEsd89IWMDJlwNJ7Y9JZ3QvK7vB42bQVvyhdFQdEXH 0slvlvsgKtCcaOa0J0tpbG8gVGVzdCAoZGVtbyBrZXkpIDxraWxvQGV4YW1wbGUu bmV0PohVBBMRAgAVBQI245UlAwsKAwMVAwIDFgIBAheAAAoJEK0bD61DwtDH1RIA n1kxWuxGwCS1+i7Fp1cFzzZCHycLAJwJq+RG7ux9sQEmop2V2mKdjBZmkrkBDQQ2 45VIEAQAuZli0/vYbs6h1HhF9HbvRHFMePjQ99Sk8h/dTx7PI7eSqMHXYh0PZghc hlbrMSPnemxfwMbJrmdK9WN0Wh9BJUe2ycH8ftUcGRo5CdESgiceziF6Vg4PQz9F lxtEhvrl7q8R6y7O+j03QAJKUGwBdt540oZ8YYKiDvgZUZxnoecAAwcD/1b2fYzA nuWrQZXhXQQ4cNVxMBVFKHScH24oFVbuEWLgM/tdgF+CPw2Vtzba8ySR1K80VSgs Qfs6n2wyCVd+II8lKHTZT/pfICFcPJlHKs4ge+JNn1IcxBAiq0QRNW5hGTO9KdJ8 MFWrWn2Bbp5k32roAzuCagoielFo4MVFZTsNiEYEGBECAAYFAjbjlUgACgkQrRsP rUPC0MeO/QCfaGt8NeCm0zbssmOrXZ6v9zFk8xEAnj3SpjLTyqemniHSJ9KEzIKJ CdiDmQGiBDbjouIRBACKncc4Ueec7dWaVARy2SmNVufeSenYs4AsIPP0v59jEl7J I0rb+4JbIJoAzW/hcm26GS/UbbpQwig8/PgMUV5QfBST4CEOlf7/x2a4HKk9tDV4 An7q2aNr1beW+twxfUGWWV5I0o1b/iKVk/LiQRiaMr8pJXY266m6/2Pn9LmDtwCg +Iqfx8gsK2PZCWv87uEKAOLzHXsD/1eRxLqCt1hT98gdDLykRTlI3kMq6EK3I+z/ 8pDIMDuPIJq1eM68YdFZr8s7i1ye1QpDltPYHgWnUC733ujAKANdyybm3HrA3TSB jEAhNfcu8nkrVorvASQUDCLJatWRWJTUVrPH+GXIXMA/Oi6LDsgNDOJanwzzvDCC m8hWQqW9A/4xYAZ4NVFrQq8gtQPJWuMIfSFSvpZWNgQgYZntiXSUGYOVs28T/87R oRx02tsVDw2PA8z68q/XRuM9NdetxbUXQHB9eszFLi3W1idsXhd/C4SyiTgEFXG8 Y8s94Eadgk1PAYHN6Gd3SY7jmevqYGVLmBp7qfj5Y9XSM5SE0Th+fLQpQnJhdm8g VGVzdCAoZGVtbyBrZXkpIDxicmF2b0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOi 4gMLCgMDFQMCAxYCAQIXgAAKCRD+GAsdqeOwsvruAJ4iU4M5s1xsZiXa0wLnX4FB Bl9abgCfflNpwyEp6KEhKCPWwPRG9WJc0qi0DkJvYiAoZGVtbyBrZXkpiFUEExEC ABUFAjbjtzsDCwoDAxUDAgMWAgECF4AACgkQ/hgLHanjsLIa4QCgityK8zajBOqA N0ZZTq8fOzgiEYIAn1ZEfjX+jefZUuY+4zFzrpO/fX0OuQENBDbjowcQBACVSdXx UWlz81FjqHgR4b1EtmhmW89CmpsHfKlSwlYvBtbB/y7TFIfvAr4ZFbpuqew6Jvtj IEZoXvolTWwHVPEFkuG0LAa03olaYpzC6ZBDuLkb09RukCD4zdY6xwbAMRsOzZgv 597LZXtOLLLnmOyTpsjRDLztWsuNglm5rffOTwADBwP/SyVZvFEdEVn5/dQTp7eA tXdrbZEM379ctCJ2663RbTZd55lIBev1fTnKQkvDTY2e58yIQ4E+Nzr99qg9Cyf6 e3OhErTUqEBOhusBge4/7E5LrIVMvo6AFU9qgn0Sgsnu/ww2txVw3XEjqL8Hgl+4 Q/57YRvJOe+q29Ye9LL8eaiIRgQYEQIABgUCNuOjBwAKCRD+GAsdqeOwsjK5AJ9p ek7H6yt3ZHAJ+7nn7sGmxYxb5ACg1INFN4AMzqEUjbZ51KTVdAvyKlSZAaIENuOj hxEEAN5nO1c81jCmgh/oF+p6kiZmqFV3ape5kEmcS/BoWgCXt6vjaldctmFYi7v+ BY4N9zI3GxQqAxt5D6dY7aN1xlC236CZEAaXUXktvGw/ppHDjdbs8CRuZiA9jm1j 92GAUY/mm6hX2aGKOkVwr9yN6DrA2CaO4SwK/wEXkVfj+nazAKDCaBzHzwSkkXf8 QOtOTj/xevpnzwQAv30laCeXTDZM2I/1Pdzma1V1xizfae0kfzZOJBDQtHQDvNFj mu6iM1kL0uxOG3krr0AlqSsMD8W7mavbFigUlxbhvuul4pTL/BiJ946FhjlPY0Ni 9pmdAldno7yUYsWADEKadkQ3ghEVqEqz+ACYbzp3p8K+5KuiFJm9D4uyvToEAIVP i2N+4voxnRWGwKXF4E+fLYAzXT5sMMzl46Xk4Ms303F/5JG7kB0iiPPY6oP0l3nl ahulRcbNMj7SDbfrfoi4m4ftUYIX3acXCSN0gNuVGipg8CwlGQyILgWRFp6oXQOm AlpxhIGcd1jdh3sj5y+CQrugGPNOJT9mzmFkB4rxtClEZWx0YSBUZXN0IChkZW1v IGtleSkgPGRlbHRhQGV4YW1wbGUubmV0PohVBBMRAgAVBQI246OHAwsKAwMVAwID FgIBAheAAAoJEOup8kDrncnmriYAoJdBwMXGVRTFlfw1u4XimCRPVFRNAJ9WFXys x0ugWaIaLJ3tyNZQHWoARrkBDQQ246OqEAQAj7WdaOJjzJNs2G8rvrDZvD/uaALQ 9PtdvYAp/Drp7xMH5T62+KKTlKdO3s8IQBPiuFocJNir5st/nm8Xl+gcOZOvtr45 c/cl54fGO1gOjBZOfgbkdBVK/LMwuQWIebK4qCZnAOlDLYNGVUguGLnEQBSfnhhk gh0WA0kqt7fYvpcAAwUD/3cOEqPlMdYeLnGEG4wPxtyVIchwGOv0YRW5apbz2fdO 7otj1AFUN5WzFw0A5+WHza1OIUhg50Zco6HnwKx6F+LbZ5aOc37EAvaFgPuMxBfk aWYagCof3jBF0CbTWUXV/D5/dFmIeuGTuUMNsGVH+OSMW2hBN/7+aJK5LLHL+hzp iEYEGBECAAYFAjbjo6oACgkQ66nyQOudyeZzTQCgmr4mT/wPN2ppg5x75E3cXn6q B28An2hO/hgIPkf/rSSydA72ZZc/MWM6mQGiBDbjpSYRBADdWzld1lyDWDqGPSzG OsehXyTSa0pOfVTLckpJpDpErcn8jS8cKrXkVUowI7SlZhPRmYI+5pqGaG5FZ5VJ d1TfKWihc7O+JDHoK3yamOnh6OFQFPZUF1+WlAGiFXLc+WODzbgOSMy/8yXA6n0z e+v3et5n9Kzib3sDGjw5DMmiYwCgmUwnofqskHVv1S6tDg08mXALKKMEAIVGyf9i j3BzNb0fVYGUOLU07nqQ3RpNQPaKtPQpBobRknQ/ZSdzuiALcCB+Q664f1cKGA+O gtm0L/f1xUmKRW3rT9lzMtcCy6kcudCI2OHm/gOcPzKqjj5onpD84fgR4BdbsehT 8+urmxFiK/bFFI6eC1L5edBQcRLs7TF2jY3SBACdXy9yHg6iDTJhysvR7UuLWE/1 s9ysirhZgPb0vyIFwHfRzM96AYIPpLZr/jvkrDawTxYGfGIZrj7UyGePu7RCeFRV VX55B6evNv3fAqbmwQ1GHTX7WHCNdAkP07yTxZ/wnZudPAzQwRkEfZ39TdccbOhH fHvbv3RNQ0VxbWtQUrQtRm94dHJvdCBUZXN0IChkZW1vIGtleSkgPGZveHRyb3RA ZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjpSYDCwoDAxUDAgMWAgECF4AACgkQ1L9X 83Ny4kN3LQCfZhlov9Ux6LofeSt5g2hVijDdX0gAnRc7adixQ2hpprv4vNoKvmum F/D4uQENBDbjpVAQBADfVCPYwZ59MKgXTH4P71QzFnpG4E/MjqDNfW3NxQ9ZjLfw 0ir6U1gGDuEsWRR+fS5OwCbfeHZDzPj8MZPuOZBamgiDvI1OvrrzUv+BijkWGEL6 oRFnWI8zJ8zDAPuuvP1u2FQZOoKFXaHo2I9Q8zuJz8P2vEkgJfLx2yiPR1Dp2wAD BQP/SCCKZBNQIaY0cfKmiv8ZjRcAAvhXLyMCwLQUfVRqoNVOtMMfWpYtGdL27ESw 4kgZIsxJ3ELQVkRiriMKbsJiNM4dMe+9gNuGz1CG9b2vhUPZ59sREVIRgyIfr0BJ AsYOn87mQ5lOBA6+XmjHO+ys4xpEVJZyfrq5QAw5GYcrPWCIRgQYEQIABgUCNuOl UAAKCRDUv1fzc3LiQ475AKCVZupUbMXq9yw03M34RS9YT9MzKQCfUgFd+Fn89xqU 4Owg/MQzYlLreUmZAaIENuOl2hEEAKeOL2pIdZ+zQtehxdL9l/uDBFSTuN9rLb8D gLiw8Z9j8U5CEH/M38WzH1nHKKlZKjGVZYiyhRfAG83wvHnT83lq+Ad0lgaZTR4z 6nrd5ViOlHPlfqo4RPZPzPe+uF7EfDl792sJerXGAasLosmKnxKAyJyVjh7eZcjT S/hUhO9zAKDVyLHJ/gQlMYk8vE5XYL7Pw4d28wP/VsKVkjlxsXpcrCQIoKeDXgKN Vv9L+0Pebspzr2WOah8iBN1QOkbtexIKCbb9mmviEnJU0FFx5MIw4mipvY4EpCaH 3McGwJpCzWmdzID8Z6oISUyKsuP7PXjmASbogV6Iqy2m/2RDtfbIlbwotfbiOT9T r3IPbH+tHAZByMRyvxID/RN90WOPSpODxr9AH9btmeJD0BfNt99116+qdwvWrTof cbkBgzvB34vLLDaMKVIyinxz2lYyC7aSpA3uzjZvoPvPrQJFLE0dx7DSkUTtWbQG ByRabpyrXYdKZzsFXLb+LSTWwF3sQLax0C4cYT7OLPlxjDVq/A0jgztaZVWa37IY tClIb3RlbCBUZXN0IChkZW1vIGtleSkgPGhvdGVsQGV4YW1wbGUubmV0PohVBBMR AgAVBQI246XaAwsKAwMVAwIDFgIBAheAAAoJEBPbllU0xuPx7NQAoMhUK7d8mW1F 45Qpwtpbn/EdSuqNAJ94+GVY6GrtMbA8yrZHeD8zSAedrrkBDQQ246YdEAQAzpO6 UuCWWpP9up5GVhLPoSCBfSIA9JWm5Ap6/hjQ5hia7CcS8E41PjaGl6Pkh5lj2qkS UBa892SXyQMYqMqEq/h7+BW7+n62SCRMtYOHRYZPA4hvs0d7jznGQlMsltx7qamo VNP0XF+ws1wHLjyQl3qMnkrAQ8lAJP+jg7P5Hq8AAwcD/A61qQLRXsSFr7LMBnaU SR0o6+4/HCdh8t+mnAeQBDAkne5DTPiwqzqsjoYekX6JK7wk+mbsJTd/Zw55Jkq9 xVm6nEUo/JIbN7cPlMqfCLaoS+ttbxZ9fNCO3WTNdWxAr/mGZZiBfy9yTcxUfo5q Tg0ffWy40CNHaVKk+iIcktGziEYEGBECAAYFAjbjph0ACgkQE9uWVTTG4/EmaACf U+XRhr/UgvgCfMlOthY327vlI30AoJypWeGLup2DqouZIGkY8bmpDrz9mQGiBDbj p/8RBACXrm5v2sQpLtexfA2S8a2PUruCeqXYfVsnkYX1sYJaFaYHxYW2wDL1dR4L dZuty5YWBOxu1N9dnkjuPsdIbq6R/phy6xv5sDUihP4YBAZakV5ahd7XrBdkWXSk RzaJSfH1OG2hAXR87liVu8ck8RDeS+ipx1vnZY45864IAnFzqwCg2qjnDRjGAn2O SPsnhyZH44VQQpcD/A7SOu9gTt6Jl4VSMY2JGi3HOFPOHnevG3Pb8NYbcP4gEU63 iqrHGndYJI07lKcFlZRbnSEOSFPFLuNKax88GYKKeZDoQXkVoU/ItAGrS4rCExpZ +Jx2tBL2zJcWU+7NDmM5LeRUDE6a0N3sIxMLzz3Z2PTarMATjpA01Qj3WRlcA/48 g1+gnyFXbO+UZn21WWj4uCyXUE6/G8SCZhXXiDJOYxaBrmw2rtN0x1aLwXPRXLuw jhL5Ewn3qszCzaJPNYuLaMY7jiK2ha20LCqYYmaVJa6tGy9iFIGC80ItcUYZpCfm dw7W2oqdZIN/rblScCKmyBbw/gCB3molmLBd8nrseLQrSnVsaWV0IFRlc3QgKGRl bW8ga2V5KSA8anVsaWV0QGV4YW1wbGUubmV0PohVBBMRAgAVBQI246f/AwsKAwMV AwIDFgIBAheAAAoJEAyCDHHSaZMTQPYAoKRB8Ey3Ny6TaKaGoL2GNFQEwM1MAJ0W blK0ScSKbm1BN+2hfDmmKRkgvbkBDQQ246gqEAQAkdlSJYfTiZH/CkfV8tnhI6ID z+SgiZKcneEBnO+hAJottARGAojdbURlOIeZqRCgKpdTXBK7MdHAz4RKFnAAXPDB ZgA5q+Coqn580t/O/AKGb8kKn9n52z9lC8A5KnHaRAsOKVyPTIU5vq6FLmsWmMB5 5iz826Dk9kMhV7mmdQcABA0EAI8Jq3Jnqf0HqqaX7CZuNKHJgag14bTaBw0niZK0 KSB6FBpzitEoyst5JBPCl0ayQEw0Hn4jhZAqcZybI//pC1CNQBBO47VUi0y1UVjE xtaNmmWxugzkzWHHx4WmyWsCQwGN4B9riUws4g3dgC007l+aonKzj5QEo1XiiMNT FFmPiEYEGBECAAYFAjbjqCoACgkQDIIMcdJpkxOPrgCgvrCZO/Txjq3F6U9vxdQq lrLDgXIAnid5WPrZkh91f3gM+QXTQfmq9V4RmQGiBDbjqN0RBADBWmbmmByw+u1J TAixxj5NXRXQJ9zLtkxRQ1GHxLQPyQzojWWnD4kEme8yvsFXuulbPX8zZMnl6qcC 8wt+b5E8dCtZuvQL3vS51yGe9M76VRC/1HgriE0YqHMTYJT4J+HciftldHFid+jR nGZpLwVtLxiLaWAm6SBi82FTn4lVGwCgtjc3u/SMsPgylPRyN/QeH8/OZ5MD/R2y G/c+ZF4kWcgmlzjJxQUN2wGYeDoOWUMXS8mf6yF+DLtwxo6oOlLaLHVTR6+qH2Vh z1zaqk1Ir6FJjkuUGvHbVFt2BmvL26StTjJ4zC4UFSWYP3qLvfbPThT+RoD4ea+V cPxGEGeqs0umImJ6s0reS3KJS9vgHtGo11Is4nP1A/9EzV7QkX5EuEnlUpGV2q29 aGYx3RpcOhDYixogNHuW+K9KwcluBEEBmT74NwxVzI6qdJVVZn5lxT4IC5G0z/ki df1Rkgv8Eqj5DIikgnp0asB8FiHSsb+39d4cnk2V0ez/LmknXUl2mpKpk/fb+qXW TqPDbFUE8dz8zyqRFXIjwbQnTGltYSBUZXN0IChkZW1vIGtleSkgPGxpbWFAZXhh bXBsZS5uZXQ+iFUEExECABUFAjbjqN0DCwoDAxUDAgMWAgECF4AACgkQN8q1H7eR A/iKXACgkZY9/w96yK2Oiq/MUs/A74SzJ2MAniQ2eSHT5CQ4G8PPvYfPZueNI9PT uQENBDbjqPUQBACn8JyfkTPFcgaWMpUpnk+nTEkDe4GhAG9fO7alTgdT6+aDCdfX fXfH7gGwdURvDv6V/KEqcMPRNLAgAeP/F4T6OtoJNTxfWLB7j14DJNpYXjBPJPN1 kpD2at8GcWB1aVGMsAtxMwlo4TZlqyfzCAAQeCLhBbIE9LWKX5oUTqiLOwADBgP9 Gm8md+/xWp9sLE5i3uZ4t9Muu9w+UY3Ke/WcSA2CNthEYhHNtcMPP6PBwtz0x425 mC1pe9RuxDyzRfV0/q+rjdWZBNA+VTVNDHXSj5hifvem3KFvA6TIgMabJ/q4WE7T 4Hn8xjQpEsLGjSXAzG9WRg13qTzTilIk+rC6xYGbZHSIRgQYEQIABgUCNuOo9QAK CRA3yrUft5ED+P5vAJ9dQMc2nMpcKuH28xwKl8r7MP3pygCfWHGKFHWIDkUt8RfH AB9geauEQSKZAaIENuOqZBEEAKLUF5GqBMWJQtBs1t1Sp+NIOGuMLgJOhINbMU6t k2jzeUt6ooNd+c8P0TexsbSETwhrU4ntpvIISb7I8Twhcled7bi5KCABJOzz7Fw+ Ydxo5Yjm1DQH7+gEtPx3n4AjZUfRAN0nqcFizDpRYPqVaN1QYiGWn9yPF3pubQhV n8zzAKCpx1LUlQl2e5t1YJhmom2qy38EeQP+IB45FBfDf5KKtyS64alQ0vHYIssU p806PQorw/ZOuoiscUQj/WeZ4vn7rCdu60uR1EuHpGp7n0t7igEgAOcxDjrxJmpg SdD79V+oJAFLATo2msj1IklVvJeI7ZsImyPchIU1lqn/GvpAam9N+FiIB1KUMFqT Jzc6zUn1Qqag1w0EAIiRHPYRW8ojd9Uh4Ed3X0daAnClyMWL82t2bj/bJRmhupQn 4aVJ5D0pFB9izTiJEWciHpqiMdsi/zExYYIDS1Zu94+WFbNIxyMFfHrJ5fUQtAqL b7E5LrlxZONUnrRwshqR4X2TmW2mz1Wop542eUQ1UWp4Gr3VlH6giswY0CnQtCdN aWtlIFRlc3QgKGRlbW8ga2V5KSA8bWlrZUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC NuOqZAMLCgMDFQMCAxYCAQIXgAAKCRC+eUhSvlz4hvEjAJsEfDLAxH49s9lf0nql F4tcflpr/wCeJKCP6iVwvhGIdCu+Dbvf6z8/sI60Ek1hbGxvcnkgKGRlbW8ga2V5 KYhVBBMRAgAVBQI247e3AwsKAwMVAwIDFgIBAheAAAoJEL55SFK+XPiGmdUAoKhr c+z524neflMpRwJ+NG8KVxOxAJsFZqm7bBtYllrdcTqNqMk49LfBObkBDQQ246p+ EAQApnvWjY5rMvw9Ly8xFL49pGjAYFb9zFijvgG4tMirI3T9EBLflKLJ8m4KWoRo T2eNmy/JGLHyZjveaVh8TerDV+uxZkEGvv702nz8NOElQTjHWHoy0n6poci6Fxhf Jd1bnOjDK2mZEufEQNSn2PhA46gjCLRTAPuwLpitSSL5ubsAAwYD/ij9KRO69/Jx 3+W9DZQxWIQBiKnYHVr1us2WpdpTV4jpCqJOCOgB/hlBmCY1C1/tpsAj1A3ZZamJ RWVZoNokkReItZLXfGacprGbmmjcg89gFM5V3nEUNCU/mm2BQWp58h4NOCv60dGr 5GAqHDxAStPk388zbxEdyFs57CPQ4ZJtiEYEGBECAAYFAjbjqn4ACgkQvnlIUr5c +IaRMgCfdcoqwoaTU7rNH0BWaYUfCrQ6TnIAniN+yQaBbwZHMbSaDTBRndjLglsK mQGiBDbjquMRBACteKaHZ7pcM7Quj8Ec8Sx0fJ3u0NdLso5xn9Ek4FWMLBu6jw7b /5KjB2WtXOZSWKHOzeTfUAx79NMKJrD9jZW/0kEAFVeZpwZF1l8fBsRELR9cxAaj E3RvFkgCYAhXsF1Jno+qiU5TNvadGU4SzmP4vOnnjrIWTy83mtZiwoFIcwCggaaa ClE8Q41NyIfVtjS3f+Nm8x0D/icH9uwM3vpB2QV29IIBqazgaFr7vBoogFoAllaC QbPLiyHX1Mk3kEZg5xewmDS/tU4rGqj7UcL9OlZx1ICD8cp80yNYfoI7K5XM6sYO MmfJORGOEsqMtoYbo3lluDgDkg26DZNynUeFHZRrIWz2cKqTuaB3dw09m8sJNus3 poEtA/9Q1KDsjKPi8+2kUzJoK3V61QglXAVDlfzK6B5KOEZ6GR/gX9M5uyyLjREy bFSSNPlvLR11+mV4GR5AcrVQOmE0QpFyo1Mr+uDsbqwkzERvRq1r5pOyqM5WPXhl Xa5oo4na1fBEX76IEzK6xIVG07GnNnaY+dlPgsLq4I8+A20ZG7QvTm92ZW1iZXIg VGVzdCAoZGVtbyBrZXkpIDxub3ZlbWJlckBleGFtcGxlLm5ldD6IVQQTEQIAFQUC NuOq4wMLCgMDFQMCAxYCAQIXgAAKCRAlsA/UMM7GhJjYAJ49ENMfPwK1U1ESEYQS 5Yts3SRcAgCdG65G3ZW0dnhnjQAhf/vk+EteMfK5AQ0ENuOrHBAEAOGceVg3PC6F tgrZrnofohzWnui6FVBzeai1DZ5MMKmdN6/QMv1eeHoMOb33fbfhwA51n+kPuhap r6QqTzx62RGA/gK1m7vjU2OfYxSO65GN/rSUXN/kE83jR7Hux4MocRXZ+/8ngqL7 JAjw1LZdJyOniJpeRvrckPNC/bKaua77AAMFA/95VjAjJIAU/gOMwtbqTgV+cmHe 52Aa1CJEalV88yKG86nnqHuL4xxUTTZljyjbbKleJD/Ah7R1BxBhSEDy8WuTuonE VHVxTcL9Yig4pZ/OzYZf5fkl1eLNaSLb8XZMT0JbP02b//OMpAr29lcaga1o1RtW vrlUyIYOTm2RcTxkf4hGBBgRAgAGBQI246scAAoJECWwD9QwzsaEIOcAnjt0vZDn 9+3cTNpCuV1ZKIu2t410AJ0Y3CnFBUFBOKk6zkOJnaArwVN3ZZkBogQ246tbEQQA lWieyQhDso2ZnD2wb+gq6aqk1rRUhcwdBwCTbiE1aLAsnuMl8nLH4fvhaTz2V/Ae joL00e28duA5or9JiBfmVblrpTAIGWsu0AU6uEQsWgZwRdso3NH/KfH8Z5lxwJtk Z/hlAiEHohmGoD38mJNsgnm63RXadUH76irO6McvWlcAoONeH7i25AcrMol4O7BZ wqGq25ibA/9IRhK7AFhfgaRrDTz84PaIssxp1dWKalRruMJYGQK2LDuEl53Q+d1r nYBPliPbjWr/9Gkjx3K4B0CfWWQC0sUl77bNRFqr8FXkjRZcvkCoxxHG7PIFG77r Ld2SiQ+eS+dp5QijuuMC8skkvQuuxS6eIk0g+jjGlNhjuu97Ya6xeQP/Zxek37p8 P1u9TTmN7nPtlzGXGrfKVi9DtJ31E805ruXFqTuoFfcOBRrtfY+DOebX8RxIwQV/ TEmyxwoXdmkv03EYwD6AJSmx3WuVi5/revcH9nfSEHDy7sFC8CBp4aavAFRQNrho mSB9lSm5clGLZiD4nljF1EFABwQFch7HhlO0KU9zY2FyIFRlc3QgKGRlbW8ga2V5 KSA8b3NjYXJAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjq1sDCwoDAxUDAgMWAgEC F4AACgkQX2NWum2XMqywLwCbBT6UT+lNWMh/jxFu/m5Dy2qMwpMAmwePBu7USi6T WKaXYRSL2yywJR0HuQENBDbjq44QBACdC1XRPM9CMFrgVUvioU7SShffLnjgWBZ3 hqbOYrsgtXfuQdv6lAixnNPdnk/k4mjL8w1pqbjUmfmbppVDxzsiiUQlJatzGDfU 1gDc7ksnXpF/vzghbucy8HNO0SHi3uM/GXC574iZ1oxa/A14fKnCVYT1ThqUa1us C5YQXHm4IwADBQP/f4LZgN3dbL4jLqXHDNpAIEjiTbKXxDKHOnAof//4SE0mpaNV HLu3nxI57CtXfSI2kMQSm/3pqpTKzaBlM/CbMAJUanhmlLPARDcJ/hQcDtBsF5nF G7zfLfe0SBwgsM1HxL968Vva7WsbYpSa98+3HSDuy9VwphFp7i4HbnCbSK6IRgQY EQIABgUCNuOrjgAKCRBfY1a6bZcyrA3hAJ0erCoxKtpc184iLkp5kpXQakDGHgCe K2WXA5gTOULftladXZn8tNoXM6CZAaIENuOsQxEEAIQRmJhsJniNi/bRff/YGrZ9 aFWt81G93W8WhV51qq+ntUHgUNY55Yyos4XLOa2tS+K8zP6X15FesVBPYIQa5BIC 10mAsLfJ+1rbnGJPuNBA2U2MoEaRxo/JtXQ//5jiTRlYwLDRnBzuaMCPdsirveu+ JBw53ytRwjwe7m/D1PPvAKCp2dj1FtDjubTN7kCF0o2KzPwE0wP7BimQxXyPwSzG qLaHXSEBsh84OQTxPI98BXgq0195/A1B1/pPs356euKlqoefUTHYhbjiMYbjZT+A 6juudf7A2Ucy03G8HDZ4k1f1vmzrj24+6ygGBcxTVr0BaweiC1DwG3LjQoJ1cuFx RQ8BYJDGIwPrUW5JdlnzW2bJWfdyXOoD/0S7iEVN9txkSKildOeP1YcDCD8MM3hv F9kUc+1hbmir8SOZ/IYJAyQN+j+mYWsLuKtZ/F9pqiBNTXH2jWCTqldOD/ZYxHVJ AARnkiVG6yckMLsxHi2LPPBK8xack0y92mKe7za/7fhVgCRSs7M/rzUbzUhyInHS yxr2SYb+8lbutCdQYXBhIHRlc3QgKGRlbW8ga2V5KSA8cGFwYUBleGFtcGxlLm5l dD6IVQQTEQIAFQUCNuOsQwMLCgMDFQMCAxYCAQIXgAAKCRBdFeAdP/EyBgb6AJsE NGQmK4nUrwcbtZ7+av5GDQ2T4wCfYJaV2rBtTR9aWTRQfZOQoIkNF8+5AQ0ENuOs cRAEAN5hO+fEhqW2pX71oSUqW/TRHWSbybNc5brQ1tzgTbheHiG/LQJ1lHjtZoZQ syW3H/efEuNARwryo4IjvK0nmiQsqZUR1795XTIbo/waPN08QujC26uWbL1pYL5y QarwbKOoyAst4jgE1NpZVc/r1+WUp7NuEapicVjvFNzkiVCLAAMGBACWQJYr+h0o zr7JQ/BqI8vTKuVXb+DIBQjuSzN7LvaiIqMqb9ZdfNNmZ1Atvklo2Ce2VMyliQzV STZuHJQbfrDTBXBf+Q+AINiHdZEAodzBvDv6p7vsTnoP+A2bS8l6xrWObKt3Ky9+ GUDkqW3WuagcUKogQgEb/FKec+GegwSgUYhGBBgRAgAGBQI246xxAAoJEF0V4B0/ 8TIGk4cAn1I/jmu7FSgglh9aPmVYAw7HWQMAAJ9PAPPXfqtwza6I8ttGPLYNvEAm AZkBogQ246zREQQAgcIj/Eo8PrIhEaxKcjc9dNb9/0BZ3BxBk7x9a7HKm6o0/vcf LH2XFjFxB4Ddfe+O1PC9KNUqIi6GTafGbyqS47XsnOJs5nvsrgmVpUUzAd7p0dxc c2tJodwhkH4GtOP4i4P9XBrxngQrWQ0ju333EPF6wLWi7qkVyGENCfsvktMAoKYg M+XYh9UQe7/HX0GiCnk3ExVnA/4ryBxdyBihj02i6s8vAe5mlTrwv85ugouSB95X EX8GPfvaWIW/TpUWQ6a7o8YzU/kIPa7YzETYX8e/FVr2Zd33HAfeLUNp3OS0NvEb YJlGDfW7/X7qLVv1o5WCjCHUhK8DCf9Ax9b4z7CbRHptxSE4U79NCCOsXQsObV28 qlGsFQP+IIaCh7dTqADw/nBmfuXxepPKXS6Xdi0to79LfQtr+TUtJOEVGIbqqQBs gESFiT5qR0W7qhOnl47TIQyPQnt/V994QwyAGtIgtM5qYFRW70g1FkyDRX57PzTM uU2BjVI6mHkaUkLaLujbRXiQFm8IXJ4rf297GppKuSgvNcr7Rmq0K1F1ZWJlYyBU ZXN0IChkZW1vIGtleSkgPHF1ZWJlY0BleGFtcGxlLm5ldD6IVQQTEQIAFQUCNuOs 0QMLCgMDFQMCAxYCAQIXgAAKCRAcZ+wTPGYchNG4AJ98zSyvQ3Rt+Y+AVfawyEoo sFG5KwCgmMyj4RYhRlXKWCPORBxAfCOYMtW5AQ0ENuOs5BAEAJGi4T/jrY5BtRTM 0psAneQytzzFgH4+LigUXAAb0QDAOkyGNfWHrfHJIS7A3Nc9pMWAdOjWgSKbYyrz ra0SQ75/SkI5+/S5ev2Fpki+HYo7cNgVXnbCJrIY7k4DAMunqPJ9JCUXc88WxGvK V5b45htqCPnV2Pgq+AEIKD5aGfLjAAMFA/9+O6ttUbeY2bQHRdThl4HUxQw4lgYN 7stgGZsbHCc0y6ln1HF9vlE4Tl6HI/NR/8OauQrXt8988dh039QNZsOdAeRWTk4P gSuXq6VDG5WNw6B9bvRPKXe5yeVmNNl6KESBzMcq87kANZWZ68vKJ2JihxPHRAyf xwGr2JKkVF0S+YhGBBgRAgAGBQI246zkAAoJEBxn7BM8ZhyEiJcAoJTy/pFHvd9y xAYZBYp7qLG2lUIOAJ9Rlpbjou3wb81vE+Qev1+GQGpaVZkBogQ24644EQQAlNDo 1aAt9iof3VI1z3TehyLrBIR4XmKRSM2Bx02CZhQRIwY/QsK6WBoxlJqfgUtsBUuf cztjJaUBixq5qPmBgXYqN9/B8HZvG2nknHdiqKrvqFpAqATJtlccW0tzPJKtKaTb tkORBDv6hssFa1aXwTN7IjN5nLI1Wh8lsvk9SKsAoP5Z4IDSK/mM9h6FPRsAsAYv d99ZA/40UwQLl06u7wBtmxqSdF/86kjC0kWX8J2Y9vIceiNEiE9MmVNcYIKwIM0m wduF50EksVjEdgWUJrqT3RztJfMT5+Sgm2KOAvvfmbKa8RF4NPSrVXDDrFeqk6uN DT0jnUUTQFYTjk4Pxg9Kl+a/c7Qee6qXn5qeDX8ubZqN0noX0QP/Y5HSgi62UbBP 5B+e5BqE+ZLeJ7yVtl909NwTCr7KVZt1o3Za0dCYtMosPT9ObAjCanhSnuEWa3hu outOgorWaUSEW6Y3zBKvN/M4FA7+1Rhe86gnnWLt+rHqX5M8Y/7JTcrugNtR04DF sYga5A16CLsTDxSmM2Rgvpwh14FtrqG0KVJvbWVvIFRlc3QgKGRlbW8ga2V5KSA8 cm9tZW9AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjrjgDCwoDAxUDAgMWAgECF4AA CgkQO9vtsXd/vtOr4ACgllMIBb4leDKz61LQiA4TGWQp9+QAn0gF7rrvXtHdEc9k FQxgfASZH4RZuQENBDbjrmYQBACJ5res4tXRZj36s7P4KZWUf0YC8mtLxxeNEXe5 ckAtn8gMfcSQJ4Mei4O1EBvrKZ9Dz28Emv0FmDd66DUd4ybRIk1PN8kWry9UuGLA f/VBAkMIyXhYCEnB7wRsNj4kF5DhYiytep2wekPocZO2GAUoIyY2yMNb2m2g2K8U nK2QBwADBQP+Ixih3o+++i02Xwi4wOe7aro2xSeBmH9b8nEaJ8v8RVLRO0AgoR4G LzKeTOfv57FU48tlY7sxth6FOxeJaQkS1nD1LRpb3GUDZr7qM/yOGYp0WhdRgGW+ c0eYa32g5ajq2zn3+H1L4yrmRSZM4nmZ5ZXe9ijkGs0UNYqmi0gBYxqIRgQYEQIA BgUCNuOuZgAKCRA72+2xd3++00nRAKCX6f3/mVnEreWCgorUdZh8hg1LEgCg7FUW Ctn3HWOwgOwxxKzOs/rQm+CZAaIENuOvBBEEAMUtk4AJiXP3jaKpIhbi3B73S2SZ 67rKzBkicjelpwWk6LndsCrbLsIWsDf8fNtih0r9As+2arfApkNlwuCGq1ZlPGGG Ef18OqPxFvnghVEbDdcosP4bIm3k6G2sgFbMl68xAGnTtkS5Gfz43uTuznPzdZnG bIjP0uBmPfZk6GW7AKDhi4htuxr3Y+ud9lx1bWM9KqUtAwQAiRYHm605RZVBkdzl fYx1Iwgn/l8Chq3MsPrfBMslapBnq1an2/nEQPmuIde9C6ALN1t03DHpKonx2Xgj YVz8pgty2FU7txSSm2EE+975dXp3ov4TfD1KxksOl770PAzixLfNhPW1q4A2cEru GgO74qEX3/fAa1J0nRKDgmA/mgYD/2TSZKCaFHoc3IHQnkygmGzzZNpVZV2+1kIB 8Z2hNo9V81PYpzlYV8SlG51ajW1G3ePcti7JOIP6MquNUbYR4TOzZy1Dq4+VqqZC B6fOeIKL40IKKAoMMDYFNLp9zcT+s6+6DTPH27eE1WEt+NQjBgr2ofC/4iAU/nmA Ymo4xn7YtCtTaWVycmEgVGVzdCAoZGVtbyBrZXkpIDxzaWVycmFAZXhhbXBsZS5u ZXQ+iFUEExECABUFAjbjrwQDCwoDAxUDAgMWAgECF4AACgkQpeZ/f6OuPqGvfwCg oevUn2afCdW1bLwbcRs5kYrM1GwAn04Y4r15A7ytYdO2PaxSkSJ4gn5NuQENBDbj r4AQBAC4cckdPiWgQNkGvAm3q8FxzRLog68/jffvj8Mvt++XQ4NikO0VJ8ezYkVd +vG3v5RoHTISynmMWZZjT56aFDSDZPOkQs2G0qZgAEgTpzCUBdlnUC8ZrHSTSQjC n7HtR2cpYCCUBliPtatDvS3Me1XdRfBhXib04TB0ci6DrzFQkwADBQQAje0R1INm 9GkZKAzTECi+lVei7wbXkn4JF6n9r1KL5oULVF8aGHNEJ1Twj7kuq2kacYjc/Di4 KdESRTZN9szlZnNruvAd9JKHIgbeysene3yRhy+YFaqXm1MtWCdwwaDiDoHDASpl 55RtuCKxz6uW77qhrZ8E6GRDrhI92R88DbmIRgQYEQIABgUCNuOvgAAKCRCl5n9/ o64+oWsJAJ0XijmoDUP1Iu6lhsSlmGOiNO/l4QCff5G6w6Vkq8d86Ev2IwS9Wf4u NmaZAaIENuOwChEEAJDhTfBph5G51alEDUaIfFvD0K+oXDXqDB7hDg3stVIpZR99 d2bo/dPOuVWorwXFBDJeK0c7iJEQrMWKlxdqbRGkH8paFSnL5XWo4xMjknqnJzYu 3gb734ioFHTC4WDM2/voTGuFpLw+eirW+wl12wusHpnNkWxMEIWt2HoGTerfAKD3 JUBraePb8gHKnXFzyEu8RLp3swP/XaAKje+NAYeqhcAqxv2SEPUj8EMgtX7SDkky Dv8wuRfcNwMAt4XwHYnnM3bpUwWj2JcDGE9rsNna/HuFAjz/2lrhUKncH0Cywvjh Ytt1t92j0cPZaeR3pY8R/bm8Ns20tiP7uxVlj+szI2Pf5KiUHhiWHJ2RTXGE2pUm T6UFhc0D/juyZvINKwkbUSSwpKvsoi15d6e4Wx5PZ2mArT5y+ULitBx4WKIsXV6U VVaEBNaBe63k9cFGdPEba/HflSd76kLmcSdy+Fr73d3TMIrmwAKMVdKjRAEc3l87 YaPd2/LdT+TWzCQw33EotexJ7yZzZA2SJx27/jyIgXkWtwvn5UCMtClUYW5nbyBU ZXN0IChkZW1vIGtleSkgPHRhbmdvQGV4YW1wbGUubmV0PohVBBMRAgAVBQI247AK AwsKAwMVAwIDFgIBAheAAAoJEFjLmkyFqB84JOIAni+c3CDhA3k2Pp2CWgBSFcsT A59CAJ4gy1+t/Pwk/095y1T6g3rwRbE0zbkBDQQ247CeEAQAnr0w2OcvlUX7E8u2 C8dJGIj7wRU5qDazxh0tw55/ybJ3/KyhCFfsr2dZ2E7Zw6Yvc1u3WTTf82nH4S+/ IJFSI+qBi3TrcwVtt8Xa3Po7cIzNvS0bBhqfmOOXJc4ihUlADR2Jukm/QC+f6bO8 IZBDWr/7LnT4SwEPhPoZNMFb63sAAwYEAJ2kiP3e1zM+zEo2i2jkOny1Igyn0sRi uw0OXQ9B656zp02G5qtDN+IXhgLdfQqgqyWckP4BLDJ4NtQoEM/Mr2/7oj3h01Xp bU86R1QFQOXmoWw3q7yqEWIwfOBqClSF0A14sXdjQwadyabTFsW4m8Zn5jLW+1sH 4PrVjHoNEz4CiEYEGBECAAYFAjbjsJ4ACgkQWMuaTIWoHzgImwCfYJ4NGyH/snAB xoxryuVciL3Cyu8AoMtIZ222A8al4XK0DrQqJAnIZlF+mQGiBDbjsakRBADettZo 8gTOTr1nJXbk5sJfuVSQaMmbgLpZpMs3Q7C+gAX0XX+Q/vcuHp+wV2Nq0S4v+w5K +sxDF4A8UDf+q+GmNKMA5U27hkcDQvE48EYUghcdWKjWeFwmmJOb0KMoatdeh4iP T4j8ocGw+i0z6o/e0y0OVWsUvIqp4iZP3UlnOwCggOq5GfPJMq3K3cND3nU7GOR8 e1EEAMcgH09o68Hbjbwpw+ejPuKwVFa37COX/65FF8PONeleq7Mr3Y8yKqbLIsIW DaxrlflpbyMz/ShuDdNU8gh+msfwh0+RNzdEPmpJCCVJOdZO46cudgbyAQriH7Py sSbi7AbmpnMl7kQruhAZWXLtnH1e1kKovB43a3ph8wF4kotyA/45A8bLKEmJvpq/ amY6VjDnGsxkDjjw2OoVbt8sLdGjpganj3fvy5KRhWeWLKhmtq44tH97m4YDmGCH Va/Iic4aDPMMvUPWdaY5DyCeerVOb3JN1qLC7o5x2HBt8RE7cXnPJl5VKxc4qzys 5bqQEYYt2dP4cJqKk3OjjCbl6TJ+8bQtVW5pZm9ybSBUZXN0IChkZW1vIGtleSkg PHVuaWZvcm1AZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjsakDCwoDAxUDAgMWAgEC F4AACgkQqUwPdWUyRNYzWwCeMxscN9idLHgH2DP2U6tP0tNR0T0An3lfFgidO+z8 ZeHXzuOM9TAS+jz6uQENBDbjscMQBAC1u+09NP46dPnn6RJtczL3LEroyrcPmHOk 3FbiNfJ8YMnFBeST+U++chi/kKzm+N4y8TZE8sHwGqnkeIBtJX2YmQJFhKi2RR9A tVn2HV1ZTBYT1q/P7MpZTPMI9EODlCEPJTvX+MdtP8xh0Gsj1i1wujQOJAiXdrqs Pxen4Sch5wADBQP+NRROzLFq4kBUpgoTyvWzJl96Gdykf+O0AhbTlZ7ix9KtQLfx Grqzgo0hwDjb2QzeWHfjVhaaaSc5UWNMuIQyHRcsj9x4n25XGE0HUyOVSD46IOAj fZF+beXOa/NbYcR+zzORfXr1qyW2g4oV8LN4s4uV4dPamQ3l98Lkg8lhWCeIRgQY EQIABgUCNuOxwwAKCRCpTA91ZTJE1s6YAJ9ZgYjqQ3rScmCwhc3Ihzt2ATANbwCd FuVgvD2Yh8lsuiWswLDFrNsDk5WZAaIENuOzmhEEAKMDGobMDqPX3SKI3/W8m9Lm NgtDUffHGHNd1npnGM8mSyVfWjEWoEg2GPMEmdX3/tvUUV7nTz02IJwZRVlrbEPd W76eItMAY1NB43LpjQTrAR++mVAslulUY6a5V5nJKEc0IqOuxkW1LWavujX1JRvl BZLeBkdpsVNuaGJtwUFfAKDfqoZUCcZxnO+dRMalHLfGOn7O4QP/apMk2mc+GJwp KSxXBvoQkVcfuZBJmXJuUCc4BUUzHX0ZSKNbgxY/kVR1xN3krMgOCR6dEsGukIsg VWRDj9to/+E6IIs6YKhG7fGcXKhE8z8mf3hDLcmjbCKDCSFBT7PI5TkLzlAEP1y2 Rtin/Sa71unGZhNyEfAPW/d1dRcRVqMD/2WcTPUaIjRvAqmbxUpenRhg/mF5rwmH l81VvVBbZCoZ35c0edEZKpfmyYbKuz7GhjEPz6O/UWGYZpK/7r6f4kFUrhO5atCl nRyBkvmNmdfbtM5hd5jh3lgqAT7tk7ntPAIh8X8/qm5+Uab63kZwXCPiSR+iEwRp 42GbVL7F/b2rtCtWaWN0b3IgVGVzdCAoZGVtbyBrZXkpIDx2aWN0b3JAZXhhbXBs ZS5vcmc+iFUEExECABUFAjbjs5oDCwoDAxUDAgMWAgECF4AACgkQR69LaWHwR4TM SQCgwD4p9j1sDwR1+9bBrzNQzVIyzmsAoNL7pfcdW4Jou1XHNc6hv4MpsHtvuQEN BDbjs74QBACHkUCB29pMkveMEZyNiKImizF5NZ/cv91Rj319k3xHf0NJWhQp/1G3 8SxLkPLBdWcoB4mJRNjDyVsxFUXvRWFIMekwL0q1sHSWTcJwCpQs+LKKtPmD3LA3 bhbuTSdpYgmKy21SH4epubqBzk/P0193mWXzHgSGLeUoTo3N7eBQ0wADBQP8C1Q3 WGrBZNOmFVly0erclpQRv1qCa785yx/bj9ur2LxHwVozAEXh8jmoiKZyoAz7YFnp 29kR2qtVplH1oePNyFweZqIjtmZbiCaT4scUVZ/3LuYbxgMoUFeRoG4mnEVvUUh8 mmZovMmZFrvp0uojcDsfYTx0VBr8waxgJrg2YguIRQQYEQIABgUCNuOzvgAKCRBH r0tpYfBHhFPdAKCcyVECIa28vmUPgZ2jkXQoQ/nNkQCUDpGL1aZn1eKrDlHcGyD4 CzywnpkBogQ247Q0EQQAvVX9TJEynPJEsX3X2fGPPDiQK+oB7D1INI9bfID5NKto o8qybivOLo85i5m7RUiEyhX3E9lUg9buKmtIhas0sJ8sLURmCndIKtXjIWg3Kd0p mjE8q2zyd7ChQ3ffJ20875wNbR4GQhSO1WTuxwRoL53ft+9JTULJxkQRf71Azm8A oJZQYphKeLWrLtFjb2WKbYxst54tBACS7C/Vu40euIevp2TZHTtY0U+ObFvJr8jD rdQZMkUFSuhti7rfO/bf7qTwmCvv6IVmn905ACh9bnKwZvcR5T1yR2b6CAN267fz riZhu6/FG+9Ddr62ZnV2rP8Oa7uxAXCnoovaafKYupopvHV0z0tUf2+wasrQdHZT vc0pfY+56AP/WOVJ0KGzP6k9bYjYSRJ1MJb70wdVFiHdlIlEd5P3jQsXOyHVMrWp 6qH10sQLto8gweWJr9aHem0QjTNSTVpzp6laBHf7tnLEwCJGeX5f5BOh87akRjwf h9J9zW+DBrtpqS6vjlDYU5y6RGbGRl6ndtXhV5FpE4cbLax/pGFWEq20K1doaXNr eSBUZXN0IChkZW1vIGtleSkgPHdoaXNreUBleGFtcGxlLm5ldD6IVQQTEQIAFQUC NuO0NAMLCgMDFQMCAxYCAQIXgAAKCRDe8Pe47Gfb3qJqAJ9MbluIqs8qjd1lOkj5 8xC5K482bACgjeYJadH5StXmbJMGw2ZD29yevzO5AQ0ENuO0VhAEAM9X7EMxDw3O SqgnI76WuIBSsI0gF/UptzpT8g8AY6gQPVhU9fgQHbu7cr8SZFV3dyUVLTzkNq7m sUivd3/Fecuf77CpKBCrQlzst+UykiPQ/bT3+gq3owGi9MBCfeU2l5yZZ3yjGIqg 8/XnxmCbuItw69FNyz7+nQoDM28ci9B3AAMFA/wJBLjxXXqWFY5JdXq7ck66Qx5Y HDpPH7szUKrIGKGZHxk2UXoU8G9WRfQ0VVQfaomfnKvo+bFDFJGcLfIITI8FrjzG oh2K3PKcxsQiQ1SsVlMT3XmuvST0yvDM8a4t9o+2v8yLLgEjR2dn/lTiGjE/ANun Ro9TBGpvz5P085NmzohGBBgRAgAGBQI247RWAAoJEN7w97jsZ9ve/yAAn18Lg2NX AdY6HW0LEurh0Xcv8zlWAJ9ePiLMYxpoW5nv4g4nuOAWoL/KLJkBogQ247TcEQQA rUqUbiVTMxJhp8bA4vMXAzCuLjys4A44DE+uRFb9AGsZTmw/FTPETO7iU/3frlyY yTgIvI2zDF1SwHXG06KF3yIu8LF6OCM0N0k7KnKpw8M2tkPiT+D8ANrHU5d178ev zm40PyNDyKxSGNlIG1N4MIKFtNdMlahLvu91kG04WesAoLPa5zISvsX+Ew95M1o4 Qti8iYHbA/4wr+eYRywP35eb/F5V9bOLWhWmEDzw4KHXQ7V+OJ7JD5n44S5KLPKw IogohDlPmrxDTAJ/YAukApUItd30kr0Uq34QgFktAsqgCP7C5KEM1TTxU25Tcs4o jUHoDyMj14ECuiTCP0ZFRKUivopgjgRhFTKXVVWTySkQ0g9SDaITSgP/a0FyXMQU YJjuB7GA6r4U6QnIHsxS5xrQgkshb4tp2MVWMhqlhsfOLaj1WZ+oe0DxKw0O3YKT H/EAzmNelKcMbtTcilLaIdI5l+Ylam/bZe7QvbN2s72Kn2PZjtYqO3Uzqw14bqAJ Rl0ekleMdZRMMzAsour+iNVPHnlodXnQ2gy0J1hSYXkgVGVzdCAoZGVtbyBrZXkp IDx4cmF5QGV4YW1wbGUubmV0PohVBBMRAgAVBQI247TcAwsKAwMVAwIDFgIBAheA AAoJEIl5psVWf7NKt08An0PRqhiMzF+L37DyvcaVl+0zSrmbAJ0fL+8D5Frcp1m3 YtBMpo+j5dsieLkBDQQ247UFEAQAxuGlBvqoDkxhIDgFZzdHJO+gJym94zgSGHkB mBIBf5Q2G2O3zkN7SIENI16yg9cxy7zkTbBu9PMgzUe/UuQov9Z6YXKzTj1jLozr GdljKOcW5YRvlibo7eKXDUkSvT+X6J1BOIVexl05Y4Ncmf7otNDre29QfK8gGBO/ bdQd7L8ABAsD/R4Nq/JQav4/7d5ETuMZddPAxV4kCnY+7F7oJgHDKJheJxt49rNt fXSxBZUsJ9P6Xhr46fCRT33DD1P8RyUmmS3/dJl7H/qR3A1rox4FQPWAuk4WGhsf SXvlZnFWKJhC8TZzFisjiXjw1OFYiF4TArxj9D7d/cHEKIi43rtefpf+iEYEGBEC AAYFAjbjtQUACgkQiXmmxVZ/s0rskACeKGRhY+fGFtaL1JQxoHdDPRJ+wu8AmwQa u+u5pPZc9UrBr0UV+pGPpY+emQGiBDbjtVERBADdUAZzhP6+69VdyRrgRNotouUv XE6I8h0kxZFZZDrQJmpZcNWkUHDqgbYDJ9RmIeEuWZNmyzPxSFcvD9RGw9KmIZu2 kZYqIuzg4KqOyU3SUfNycarEZYJkmLEyBlrkNxZkmPCp1cRsMKGCbhQs//v6Iq8h 6dNA2EWgJev0y12gcwCguk0KZIqVO7UfkaVaZhMr0Cd1at8D/juKnRViDMi9SEjS JZwb3mw1+yECnM8vrM+AoGoAKiCz/n8N9Gf2DTsFy4yKEskPQ8s09Wc5epBFo3gN ruMu4kDnde0uCmiDEbTwzpdSKZO5x9yi+7b39uCNkgoDlzwonaXNdIn2NnFKjL47 TnV/vKFdtSZgLW902vwYGTr1ArL/BACIcx9TdxsJ9NMyaKD7MEcKQeOrOqv/Mq1H xFPkDBI4hTZpQiId1XTxqkJ6UHDw9sR/TvtO5YKrZjINkmaBZFiHlx1oyB0B3u6X UVLXIc9liyFyh9aOBdQkdHgjyI8Kzk6Z0ejYcre5TY4zfplAZKkUDlY3U0Sb0a0x IGhgo3YRELQrWWFua2VlIFRlc3QgKGRlbW8ga2V5KSA8eWFua2VlQGV4YW1wbGUu bmV0PohVBBMRAgAVBQI247VRAwsKAwMVAwIDFgIBAheAAAoJEJ7vNM1LEbJfSQQA oJRRe9UHKHiX2iFczXq6nrvr0NhLAJ99W/I5b2/2QQ01we8i1mcSYPWj47kBDQQ2 47VnEAQAmuK5RcS0zTyXp6SjW2+WeQIpJnJDflL0+iBe//3SADv01qUmw3jWMAux G+CcCApksl122V9npEHiLC4Q2A69roLRsbxKBPebustfadLJoVYqPsvjnrBlafe5 GcrFPnKbE0wV6ZXx/Tp/eSDiQlid4lWz5J+z/mN7KhHANzoRAbsAAwYEAJO5fkCS dNwkisFXzeKslWxm9Yoe1TOouiSV11hex0j94Hpz5wGWEXF7z+FbDq+4V0UqGkKx aERsl6HMWNkImj57N/9h1C1YDfiKTimg5tZpKmehXtldpWGCNDZrE0RasrFCKENV hFMhpc4kAnx6rbA0+LhRvJkvkdxY7pKU//aZiEYEGBECAAYFAjbjtWcACgkQnu80 zUsRsl/0XACfffuI4IS7cgh0PNghr/0v3L/NhncAoJNwutmN7kkv9n/oPqkByzLx vZt4mQGiBDbjtcsRBACBDJOGX9C/xxCVZNP6OHz6cL5vM3PimUAhV+9HAVVPQViT nFKrkYPSQyRfWzjOU8RO1Tp5CHz747oOb6j9P74yH1uy78yFg4UuhXBWinhuCKKq 4IIWwJkCKBFr1U8fu8a6Y6NcjqiDA0KmGRJrMPmXenXkJpFGHG78rUvNi9IMfwCg ugzNILh/3XZCZU+BUPYeXL+nUAEEAIDXZhj1vFXHgi9lmijKDjJocEBoamN/taQy 6Ox1RRD6HtfAPY5TER1n7xm9hMzE+Ov1IKpH/E872Rha1qu1v7eOa6eTuNWF0Nvm SR955freRsNuR8JNIb6StI2ER9pzBUfjykC9pg2wPeC7wpQJIF9TF+Ja1BvG2I+h a2xJ786AA/sHEUvAOsc58YbPlbIPyp2JdEHvXTRT2NISVRuTMQsg8vV99nMYR2CU h270uPyy2xZaD/kYcJ9/1ngY7C9pbbNWoV70PkEMO/qj67OIViWVPzUhIdURorbp Ghuc3oBzUxOgial7IbISPRItDgg2oZoY4hqyQNx8Cj2ZZAzDpM2vCrQnWnVsdSBU ZXN0IChkZW1vIGtleSkgPHp1bHVAZXhhbXBsZS5uZXQ+iFUEExECABUFAjbjtcsD CwoDAxUDAgMWAgECF4AACgkQa8R3gFSs0kZA6wCeJUyRzuFbsZ0uQulvpgOIRTLT KscAoLd3InVEj20peTUQ5b2NOimSXnKxuQENBDbjtfIQBADMfPDBQoMzv52Mmjb8 SdaYKKNzqDd9K1oY2hcMSi+LcHag+KJFOyKBf3SoHmcU/vCEN+LyTgljYSKDmEf4 wZ2+eLfqFgSdBJp2xm55ih+9CHXg3dXx9SbHiGJCIxfJaIsnNz3VmJGPDDjBlaf/ hjl/7SZvR+MJpVLFPGjj7uOhTwADBQP/Sgv0abeCXVdVXwGEmhdV0VDo833IQRdR u1yt+QLnWRMGTY1oQapsH6QLwYSZfDJlxbsBA3tfqKStpRSbdGNNTsK+RIehsGdd i3sWGplRGm5Xt5KpkY/mc/tLFaYJNMqAgfWQcKlZHBp7EoWMgiRiDJUWq0TH1wRD oPaRc+H5GdqIRgQYEQIABgUCNuO18gAKCRBrxHeAVKzSRn1jAKC5Gp5sHM9sWdZe M6qfu54F2OwMQACfTjYXfpMApAROPkjhhFNqH0d8x5E= =1N8S -----END PGP PUBLIC KEY BLOCK----- gnupg-1.4.20/checks/conventional-mdc.test0000755000175000017500000000114412635262326015252 00000000000000#!/bin/sh . $srcdir/defs.inc || exit 3 #info Checking conventional encryption for ciph in `all_cipher_algos`; do echo_n "$ciph " for i in 0 1 2 3 9 10 11 19 20 21 22 23 39 40 41 8192 32000 ; do # *BSD's dd can't cope with a count of 0 if test "$i" = "0"; then : >z my_chtag z else dd if=data-80000 of=z bs=1 count=$i 2>/dev/null fi echo "Hier spricht HAL" | $GPG --passphrase-fd 0 \ --force-mdc --cipher $ciph -c -o x --yes z echo "Hier spricht HAL" | $GPG --passphrase-fd 0 \ -o y --yes x cmp z y || error "$ciph/$i: mismatch" done done echo_n "| " gnupg-1.4.20/checks/plain-1.asc0000644000175000017500000000264412635262326013045 00000000000000-----BEGIN PGP MESSAGE----- Version: GnuPG v1.3.5-cvs (GNU/Linux) hQEOA6urKKJHvid1EAQA0MchGc7vZsjUgxdII4lo/2jRDesMmLDN4U0uOgExvyhD u1OtQBJF8iHgNdDEf8/R3GWhRE94IpVwLqzKTqfVmyKIFd80/Qe4h37TUPpEf8Ex f7WaIBk/9OSDNKOkCwZ5OH9xGaorhBwYiTNJlEEGv5zcDte9ZoLO7WhWFfHp3b0E AJYk/tf3oV4sJSn8AbUa8UC2tAdpNM1Lx+UEuCtxevYRpWeDVDok7/xuaa/wcb39 lKyhUV+FBUH++k59K4GVqykOz02hmFl97O+4bAldgP6cVTm0Gh7jwMcJANzhLW/O MR5birB+HPKOotMIfhggzxsAt6ESrviIlknkGqwKXWog0ukB/npOqQdu1GmvJqoC k6ElA6xZPY5HTF/JLKlLXFfIIKLeuyckKwGDkVNFE7JYPW+dfxcGH9z1KXaNNllY V4OKGQh3+gMaoJSY2X7PsmjC4fvi3g6rr360ATr5f82Mr8GPa3x21XLdIFZ04vTe yE3kwdcarkiT1QQLnOXk/yRBxJwiA5loL9crVdC2WyOV3B3DG33/yas8krw4BYWw DzAgxNtZR4MQXcj83WwoflMo43dYUq3Pk7ZnzKN04O8m9w0gxVxCpXu4ds9emMdJ WS4eNTPUOnzeWttkfYcd3SarK6COi9iBosFT2QF80FwDSlH3XdEo7rD1j6WJ5GeX RbHDvIm9g0xB23S7jmtfdqIHndvPKLmwW2B1VC1mbjcDUo6pyUb31GBd1zFVhT69 ijhiEwBlr8uWxROdwJd/7IVIB/RYHLr5P3M8p08hdEdS1IMQbNEE4Y25fRdcc6g8 fVEAExbG01K1EJhRLxoHzgnAkxDTV2HSwlqbFvKEzUfE+rMHApmSX2lfMvKgueYz JpA7nxuf79Wk17bjNvuVQwokhXpzw7FyPPdD7h4Z30LW0ozvSVgs2tigWCAysIKB 3ZIolchqBoj0ddJgbPXrx09r1oCckEmdj1KtZsci9m+CFA8d22uxXBec0HkEHZpr EHlqEZfNTmqowoDtJ8KT+S8VPsALEyDnrqm3s4i44OwgvsPiKOST1xwk6lIJ5isu fO76RHTQ2jc8z7+sKyNffVugfjYVRj54/8Gj34QkrVo/42rlvg398tpbAbWuNq8w PM//M6eVD4IRDYEGrGOk7prd9mgdbWnOWpasirhr41kePu2vsrIUkJWHmOgdMQDH cSSzI8C5NpafROHAhMsUymcJ5dKksvPubh5IAdgtH+m6yDnNUJT8s6WV1f1RpSsQ L/n3dhti76l0XtfZ7aST8j46B1JPNDx8+r6Xl9IUbSU= =xK46 -----END PGP MESSAGE----- gnupg-1.4.20/checks/plain-1o.asc0000644000175000017500000000325012635262326013216 00000000000000-----BEGIN PGP ARMORED FILE----- Version: GNUPG v0.3.4 (GNU/Linux) Comment: Get GNUPG from ftp://ftp.guug.de/pub/gcrypt/ Comment: Use "gpgm --dearmor" for unpacking PCEtLSBEaWVzIGlzdCBTZWl0ZSAzLCBkb3J0IGlzdCBrZWluZSBTZWl0ZW56YWhsIGFuZ2Vn ZWJlbiwKICAgICBvYmVuIHJlY2h0cyBpc3Qgd2llZGVyIGRlciBTdGVtcGVsIHZvbiBtZWlu ZW0gT3BhIHp1IGZpbmRlbiAtLT4KCjxzZWN0MT5OYW1lIDxxPkdyb98tQmFydGxvZmY8Lz4K CjxwPgpEZXIgTmFtZSA8cS9CYXJ0bG9mZi8gaXN0IHNjaHdlciB6dSBkZXV0ZW4uIE1hbiBo YXQgdmllbGUgTXV0bWHfdW5nZW4KYW5nZXN0ZWxsdCwgdm9uIGRlbmVuIG1hbiBhYmVyIGJp c2xhbmcga2VpbmUgZWluemlnZSBhbHMgdW5iZWRpbmd0CnJpY2h0aWcgZXJrbORyZW4ga2Fu bi4KPGZvbnRpbmZvIHJlbT0ibWl0IExlZXJ6ZWljaGVuIGdlc2NocmllYmVuIj5Vcmt1bmRs aWNoPC8+IHdpcmQgZGFzCkRvcmYgYmlzIHp1ciBSZWZvcm1hdGlvbiBzdGV0cyA8cS9CYXJ0 b3JmLyAoYW5ubyAxMjUzKSB1bmQKPHEvQmFyZG9yZi8gKDEzMDYsIDEzMTgsIDEzMjksIDE0 MjkpIGdlbmFubnQgdW5kIGRhc18gc293b2hsIEtsZWluLQp3aWUgR3Jv32JhcnRsb2ZmLiBF cnN0IDE1ODYgaW0gQmlzY2hvZnNzdGVpbmVyIEp1cmlzZGlrdGlvbmFsYnVjaApoZWnfdCB1 bnNlciBEb3JmIDxxL0JhcnR0ZWxvZmYvIHVuZCBzbyBhdWNoIGluIGRlciDkbHRlc3RlbiBu b2NoCnZvcmhhbmRlbmVuIEtpcmNoZW5yZWNobnVuZyB2b20gSmFocmUgMTY1MS4gTkFjaCBk ZW0gSmFocmUgMTcwMCB3aXJkCmluIGRlbiBVcmt1bmRlbiBiZWdvbm5lbiwgZGVuIHZvbGxl biBOYW1lbiA8cS9Hcm/fLUJhcnRsb2ZmLyB1bmQKPHEvS2xlaW4tQmFydGxvZmYvIHp1IHNj aHJlaWJlbi4KLS0tLS0tLS0tLS0tLS0tLSBbd2VnZW4gZGFzaGVkIGVzY2FwZWQgdGV4dF0K PHA+Ck5pbW10IG1hbiBhbiwgZGHfIGRpZSB1cmt1bmRsaWNoZSwg5Gx0ZXN0ZSBCZXplaWNo bnVuZyBCYXJ0b3JmIGRpZQp1cnNwcvxuZ2xpY2hlIGlzdCB1bmQgbmljaHQgZGllIG11bmRh cnRsaWNoZSBCYXJ0bG9mZiwgc28ga/ZubnRlIGRlcgpOYW1lIGd1dCBnZWRldXRldCB3ZXJk ZW4gYWxzIERvcmYgYW4gZGVyIDxxL0JvcmRlLyBvZGVyIGFtIFJhbmRlCm9kZXIgYW4gZGVy IEdyZW56ZSBlbnR3ZWRlciBkZXMgV2FsZGVzCg== =m1k/ -----END PGP ARMORED FILE----- gnupg-1.4.20/THANKS0000644000175000017500000002550612635262326010571 00000000000000GnuPG was originally written by Werner Koch. Other people contributed by reporting problems, suggesting various improvements or submitting actual code. Here is a list of those people. Help us keep it complete and free of errors. Adam Mitchell adam@cafe21.org Albert Chin china@thewrittenword.com Alec Habig habig@budoe2.bu.edu Allan Clark allanc@sco.com Anand Kumria wildfire@progsoc.uts.edu.au Andreas Haumer andreas@xss.co.at Anthony Carrico acarrico@memebeam.org Anthony Mulcahy anthony@kcn.ne.jp Ariel T Glenn ariel@columbia.edu Bob Mathews bobmathews@mindspring.com Bodo Moeller Bodo_Moeller@public.uni-hamburg.de Brendan O'Dea bod@debian.org Brenno de Winter brenno@dewinter.com Brian M. Carlson karlsson@hal-pc.org Brian Moore bem@cmc.net Brian Warner warner@lothar.com Bryan Fullerton bryanf@samurai.com Bryce Nichols bryce@bnichols.org Caskey L. Dickson caskey@technocage.com Cees van de Griend cees-list@griend.xs4all.nl Charles Levert charles@comm.polymtl.ca Chip Salzenberg chip@valinux.com Chris Adams cmadams@hiwaay.net Christian Biere christianbiere@gmx.de Christian Kurz shorty@debian.org Christian von Roques roques@pond.sub.org Christopher Oliver oliver@fritz.traverse.net Christian Recktenwald chris@citecs.de Daiki Ueno ueno@unixuser.org Dan Winship danw@helixcode.com Daniel Eisenbud eisenbud@cs.swarthmore.edu Daniel Koening dan@chaosdorf.de Daniel Resare daniel@resare.com Dany Nativel dany@natzo.com Dave Dykstra dwd@bell-labs.com David C Niemi niemi@tuxers.net David Champion dgc@uchicago.edu David D. Scribner dscribner@bigfoot.com David Ellement ellement@sdd.hp.com David Hallinan hallinan@rtd.com David Hollenberg dhollen@ISI.EDU David Mathog MATHOG@seqaxp.bio.caltech.edu David R. Bergstein dbergstein@home.com David Shaw dshaw@jabberwocky.com Detlef Lannert lannert@lannert.rz.uni-duesseldorf.de Dimitri dmitri@advantrix.com Dmitry V. Levin ldv at altlinux dot org Dirk Lattermann dlatt@t-online.de Dirk Meyer dirk.meyer@dinoex.sub.org Disastry Disastry@saiknes.lv Douglas Calvert dfc@anize.org Ed Boraas ecxjo@esperanto.org Edmund GRIMLEY EVANS edmundo@rano.org Edwin Woudt edwin@woudt.nl Enzo Michelangeli em@MailAndNews.com Ernst Molitor ernst.molitor@uni-bonn.de Evgeny Legerov Fabio Coatti cova@ferrara.linux.it Felix von Leitner leitner@amdiv.de fish stiqz fish@analog.org Florian Weimer Florian.Weimer@rus.uni-stuttgart.de Francesco Potorti pot@gnu.org Frank Donahoe fdonahoe@wilkes1.wilkes.edu Frank Heckenbach heckenb@mi.uni-erlangen.de Frank Stajano frank.stajano@cl.cam.ac.uk Frank Tobin ftobin@uiuc.edu Gabriel Rosenkoetter gr@eclipsed.net Gal Quri gael@lautre.net Gene Carter gcarter@lanier.com Geoff Keating geoffk@ozemail.com.au Georg Schwarz georg.schwarz@iname.com Giampaolo Tomassoni g.tomassoni@libero.it Gilbert Fernandes gilbert_fernandes@hotmail.com Greg Louis glouis@dynamicro.on.ca Greg Troxel gdt@ir.bbn.com Gregory Steuck steuck@iname.com Harald Denker harry@hal.westfalen.de Holger Baust Holger.Baust@freenet-ag.de Hendrik Buschkamp buschkamp@rheumanet.org Holger Schurig holger@d.om.org Holger Smolinski smolinsk@de.ibm.com Holger Trapp Holger.Trapp@informatik.tu-chemnitz.de Hugh Daniel hugh@toad.com Huy Le huyle@ugcs.caltech.edu Ian McKellar imckellar@harvestroad.com.au Ingo Klcker kloecker@kde.org Ivo Timmermans itimmermans@bigfoot.com Jan Krueger max@physics.otago.ac.nz Jan Niehusmann jan@gondor.com Janusz A. Urbanowicz alex@bofh.torun.pl James Troup james@nocrew.org Jason Woodward jason dot woodward at timesys dot com Jean-loup Gailly gzip@prep.ai.mit.edu Jeff Long long@kestrel.cc.ukans.edu Jeffery Von Ronne jronne@ics.uci.edu Jens Bachem bachem@rrz.uni-koeln.de Jeroen C. van Gelderen jeroen@vangelderen.org J Horacio MG homega@ciberia.es J. Michael Ashley jashley@acm.org Jim Bauer jfbauer@home.com Jim Small cavenewt@my-deja.com Joachim Backes backes@rhrk.uni-kl.de Joe Rhett jrhett@isite.net Joerg Honegger Joerg.Honegger@hp.com John A. Martin jam@jamux.com John Clizbe JPClizbe@comcast.net John R. Shannon john@johnrshannon.com Johnny Teveen j.tevessen@gmx.de Jrg Schilling schilling@fokus.gmd.de Jos Backus Jos.Backus@nl.origin-it.com Joseph Walton joe@kafsemo.org Juan F. Codagnone juam@arnet.com.ar Jun Kuriyama kuriyama@sky.rim.or.jp Kahil D. Jallad kdj4@cs.columbia.edu Karl Fogel kfogel@guanabana.onshore.com Karsten Thygesen karthy@kom.auc.dk Katsuhiro Kondou kondou@nec.co.jp Kazu Yamamoto kazu@iijlab.net Kazuyoshi Kakihara Keith Clayton keith@claytons.org Kevin Ryde user42@zip.com.au Klaus Singvogel ks@caldera.de Kurt Garloff garloff@suse.de Lars Kellogg-Stedman lars@bu.edu L. Sassaman rabbi@quickie.net M Taylor mctaylor@privacy.nb.ca Marcel Waldvogel mwa@arl.wustl.edu Marco d'Itri md@linux.it Marco Parrone marc0@autistici.org Marcus Brinkmann Marcus.Brinkmann@ruhr-uni-bochum.de Mark Adler madler@alumni.caltech.edu Mark Elbrecht snowball3@bigfoot.com Mark Pettit pettit@yahoo-inc.com Markus Friedl Markus.Friedl@informatik.uni-erlangen.de Martin Kahlert martin.kahlert@provi.de Martin Hamilton Martin Schulte schulte@thp.uni-koeln.de Matt Kraai kraai@alumni.carnegiemellon.edu Matthew Skala mskala@ansuz.sooke.bc.ca Matthew Wilcox matthew@wil.cx Matthias Urlichs smurf@noris.de Max Valianskiy maxcom@maxcom.ml.org Michael Engels michael.engels@uni-duesseldorf.de Michael Fischer v. Mollard mfvm@gmx.de Michael Roth mroth@nessie.de Michael Sobolev mss@despair.transas.com Michael Tokarev mjt@tls.msk.ru Nicolas Graner Nicolas.Graner@cri.u-psud.fr Mike Dowling ML.Dowling at tu-bs.de Mike McEwan mike@lotusland.demon.co.uk Neal H Walfield neal@cs.uml.edu Nelson H. F. Beebe beebe@math.utah.edu NIIBE Yutaka gniibe@chroot.org Niklas Hernaeus Nimrod Zimerman zimerman@forfree.at Norihiko Murase skeleten@shillest.net N J Doye nic@niss.ac.uk Oliver Haakert haakert@hsp.de Oskari Jskelinen f33003a@cc.hut.fi Pascal Scheffers Pascal@scheffers.net Paul D. Smith psmith@baynetworks.com Per Cederqvist ceder@lysator.liu.se Phil Blundell pb@debian.org Philippe Laliberte arsphl@oeil.qc.ca Peter Fales psfales@lucent.com Peter Gutmann pgut001@cs.auckland.ac.nz Peter Marschall Peter.Marschall@gedos.de Peter Valchev pvalchev@openbsd.org Phong Nguyen Phong.Nguyen@ens.fr Piotr Krukowiecki piotr@pingu.ii.uj.edu.pl QingLong qinglong@bolizm.ihep.su Ralph Gillen gillen@theochem.uni-duesseldorf.de Rat ratinox@peorth.gweep.net Reinhard Wobst R.Wobst@ifw-dresden.de Rmi Guyomarch rguyom@mail.dotcom.fr Reuben Sumner rasumner@wisdom.weizmann.ac.il Richard Outerbridge outer@interlog.com Richard Patterson vectro@yahoo.com Robert Joop rj@rainbow.in-berlin.de Roddy Strachan roddy@satlink.com.au Roger Sondermann r.so@bigfoot.com Roland Rosenfeld roland@spinnaker.rhein.de Roman Pavlik rp@tns.cz Ross Golder rossigee@bigfoot.com Russell Coker russell@coker.com.au Ryan Malayter rmalayter@bai.org Sam Roberts sam@cogent.ca Sami Tolvanen sami@tolvanen.com Sascha Kiefer sk@intertivity.com Scott Worley sworley@chkno.net Sean MacLennan seanm@netwinder.org Sebastian Klemke packet@convergence.de Serge Munhoven munhoven@mema.ucl.ac.be SL Baur steve@xemacs.org Stefan Bellon sbellon@sbellon.de Dr.Stefan.Dalibor Dr.Stefan.Dalibor@bfa.de Stefan Karrmann S.Karrmann@gmx.net Stefan Keller dres@cs.tu-berlin.de Steffen Ullrich ccrlphr@xensei.com Steffen Zahn zahn@berlin.snafu.de Steven Bakker steven@icoe.att.com Steven Murdoch sjmurdoch@bigfoot.com Susanne Schultz schultz@hsp.de Tavis Ormandy taviso@gentoo.org Ted Cabeen secabeen@pobox.com Thiago Jung Bauermann jungmann@cwb.matrix.com.br Thijmen Klok thijmen@xs4all.nl Thomas Roessler roessler@guug.de Tim Mooney mooney@dogbert.cc.ndsu.nodak.edu Timo Schulz twoaday@freakmail.de Tobias Winkler tobias.winkler@s1998.tu-chemnitz.de Todd Vierling tv@pobox.com TOGAWA Satoshi Satoshi.Togawa@jp.yokogawa.com Tom Spindler dogcow@home.merit.edu Tom Zerucha tzeruch@ceddec.com Tomas Fasth tomas.fasth@twinspot.net Tommi Komulainen Tommi.Komulainen@iki.fi Thomas Klausner wiz@danbala.ifoer.tuwien.ac.at Tomasz Kozlowski tomek@rentec.com Thomas Mikkelsen tbm@image.dk Ulf Mller 3umoelle@informatik.uni-hamburg.de Urko Lusa ulusa@euskalnet.net Vincent P. Broman broman@spawar.navy.mil Volker Quetschke quetschke@scytek.de W Lewis wiml@hhhh.org Walter Hofmann Walter.Hofmann@physik.stud.uni-erlangen.de Walter Koch koch@hsp.de Wayne Chapeskie waynec@spinnaker.com Werner Koch wk@gnupg.org Wim Vandeputte bunbun@reptile.rug.ac.be Winona Brown win@huh.org Yosiaki IIDA iida@ring.gr.jp Yoshihiro Kajiki kajiki@ylug.org nbecker@hns.com Thanks to the German Unix User Group for sponsoring this project, Martin Hamilton for hosting the first mailing list and OpenIT for cheap hosting conditions. The development of this software has partly been funded by the German Ministry for Economics and Technology under grant VIB3-68553.168-001/1999. Many thanks to my wife Gerlinde for having so much patience with me while hacking late in the evening. Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/autogen.sh0000755000175000017500000000011512635262326011644 00000000000000#!/bin/sh autogen_sh="`dirname $0`/scripts/autogen.sh" exec $autogen_sh $* gnupg-1.4.20/PROJECTS0000644000175000017500000000371712635262326011032 00000000000000 * Change the internal representation of keyid into a struct which can also hold the localid and extend the localid to hold information of the subkey number because two subkeys may have the same keyid. * Add a way to override the current cipher/md implementations by others (using extensions) * Not GnuPG related: What about option completion in bash? Can "--dump-options" be used for this or should we place the options in an ELF note section? * Split key support (n-out-of-m). Use our own protocol or figure out how PGP does it. * add an option to re-create a public key from a secret key; we can do this in trustdb.c:verify_own_keys. (special tool?) Hmmm, we better drop the duplication of the public part and just keep the secrets in the "secring" - this has the additional that we can put those secrets on a hardware token. * write a tool to extract selected keys from a file. * Change the buffering to a mbuf like scheme? See Michael's proposal. * Keep a list of duplicate, faked or unwanted keyids. * The current code has knowledge about the structure of a keyblock. We should add an abstraction layer so that adding support for different certificate structures will become easier. * "Michael T. Babcock" suggested to write an event log so that other software can display a key history or alike with GnuPG results. This should be connected to the keyrings. Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/configure.ac0000644000175000017500000013427512635262326012150 00000000000000# configure.ac script for GnuPG # Copyright (C) 1998-2015 Free Software Foundation, Inc. # Copyright (C) 1998-2015 Werner Koch # # 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 3 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, see . # # (Process this file with autoconf to produce a configure script.) AC_PREREQ(2.61) min_automake_version="1.14" # To build a release you need to create a tag with the version number # (git tag -s gnupg-1.n.m) and run "./autogen.sh --force". Please # bump the version number immediately *after* the release and do # another commit and push so that the git magic is able to work. m4_define([mym4_version], [1.4.20]) # Below is m4 magic to extract and compute the git revision number, # the decimalized short revision number, a beta version string and a # flag indicating a development version (mym4_isgit). Note that the # m4 processing is done by autoconf and not during the configure run. m4_define([mym4_revision], m4_esyscmd([git rev-parse --short HEAD | tr -d '\n\r'])) m4_define([mym4_revision_dec], m4_esyscmd_s([echo $((0x$(echo ]mym4_revision[|head -c 4)))])) m4_define([mym4_betastring], m4_esyscmd_s([git describe --match 'gnupg-1.[0-9].*[0-9]' --long|\ awk -F- '$3!=0{print"-beta"$3}'])) m4_define([mym4_isgit],m4_if(mym4_betastring,[],[no],[yes])) m4_define([mym4_full_version],[mym4_version[]mym4_betastring]) AC_INIT([gnupg],[mym4_full_version], [http://bugs.gnupg.org]) development_version=mym4_isgit AC_CONFIG_AUX_DIR(scripts) AC_CONFIG_SRCDIR(g10/gpg.c) AC_CANONICAL_HOST AM_INIT_AUTOMAKE([serial-tests std-options dist-bzip2 filename-length-max=99]) AB_INIT AC_CONFIG_HEADERS(config.h) AC_GNU_SOURCE dnl dnl Check for random module options dnl AC_MSG_CHECKING([which random module to use]) AC_ARG_ENABLE(static-rnd, AC_HELP_STRING([[--enable-static-rnd=[egd|unix|linux|auto]]], [specify a random number source]), [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 | default ) AC_MSG_RESULT($use_static_rnd) ;; auto ) AC_MSG_RESULT(automagically selected at runtime) ;; * ) AC_MSG_RESULT(invalid argument) AC_MSG_ERROR(there is no random module rnd$use_static_rnd) ;; esac AC_ARG_WITH(egd-socket, AC_HELP_STRING([--with-egd-socket=NAME],[use NAME for the EGD socket]), egd_socket_name="$withval", egd_socket_name="" ) AC_DEFINE_UNQUOTED(EGD_SOCKET_NAME, "$egd_socket_name", [Define if you don't want the default EGD socket name. For details see cipher/rndegd.c]) 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, AC_HELP_STRING([--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 assembler modules are requested]) AC_ARG_ENABLE(asm, AC_HELP_STRING([--disable-asm],[do not use assembler modules]), try_asm_modules=$enableval, try_asm_modules=yes) AC_MSG_RESULT($try_asm_modules) dnl AC_MSG_CHECKING([whether memory guard is requested]) dnl AC_ARG_ENABLE(m-guard, dnl [ --enable-m-guard enable memory guard facility], dnl use_m_guard=$enableval, use_m_guard=no) dnl AC_MSG_RESULT($use_m_guard) dnl if test "$use_m_guard" = yes ; then dnl AC_DEFINE(M_GUARD,1,[Define to use the (obsolete) malloc guarding feature]) dnl fi # SELinux support includes tracking of sensitive files to avoid # leaking their contents through processing these files by gpg itself AC_MSG_CHECKING([whether SELinux support is requested]) AC_ARG_ENABLE(selinux-support, AC_HELP_STRING([--enable-selinux-support], [enable SELinux support]), selinux_support=$enableval, selinux_support=no) AC_MSG_RESULT($selinux_support) AC_MSG_CHECKING([whether the new iconv based code is requested]) AC_ARG_ENABLE(gnupg-iconv, AC_HELP_STRING([--disable-gnupg-iconv], [disable the new iconv code]), gnupg_use_iconv=$enableval, gnupg_use_iconv=yes) AC_MSG_RESULT($gnupg_use_iconv) dnl See if we are disabling any algorithms or features for a smaller dnl binary try_extensions=no try_gettext=yes try_dns=yes use_rsa=yes use_idea=yes use_cast5=yes use_blowfish=yes use_aes=yes use_twofish=yes use_camellia=yes use_sha256=yes use_sha512=yes use_bzip2=yes use_exec=yes card_support=yes agent_support=yes disable_keyserver_path=no large_secmem=no AC_ARG_ENABLE(minimal, AC_HELP_STRING([--enable-minimal],[build the smallest gpg binary possible]), try_dns=no use_rsa=no use_idea=no use_cast5=no use_blowfish=no use_aes=no use_twofish=no use_camellia=no use_sha256=no use_sha512=no use_bzip2=no use_exec=no card_support=no agent_support=no) AC_MSG_CHECKING([whether to allocate extra secure memory]) AC_ARG_ENABLE(large-secmem, AC_HELP_STRING([--enable-large-secmem], [allocate extra secure memory]), large_secmem=$enableval, large_secmem=no) AC_MSG_RESULT($large_secmem) if test "$large_secmem" = yes ; then SECMEM_BUFFER_SIZE=65536 else SECMEM_BUFFER_SIZE=32768 fi AC_DEFINE_UNQUOTED(SECMEM_BUFFER_SIZE,$SECMEM_BUFFER_SIZE, [Size of secure memory buffer]) AC_MSG_CHECKING([whether OpenPGP card support is requested]) AC_ARG_ENABLE(card-support, AC_HELP_STRING([--disable-card-support], [disable OpenPGP card support]), card_support=$enableval) AC_MSG_RESULT($card_support) # Note that we may later disable the agent support based on the platform. AC_MSG_CHECKING([whether gpg-agent support is requested]) AC_ARG_ENABLE(agent-support, AC_HELP_STRING([--disable-agent-support], [disable gpg-agent support]), agent_support=$enableval) AC_MSG_RESULT($agent_support) AC_MSG_CHECKING([whether to enable the RSA public key algorithm]) AC_ARG_ENABLE(rsa, AC_HELP_STRING([--disable-rsa],[disable the RSA public key algorithm]), use_rsa=$enableval) AC_MSG_RESULT($use_rsa) if test x"$use_rsa" = xyes ; then AC_DEFINE(USE_RSA,1,[Define to include the RSA public key algorithm]) fi AC_MSG_CHECKING([whether to enable the IDEA cipher]) AC_ARG_ENABLE(idea, AC_HELP_STRING([--disable-idea],[disable the IDEA cipher]), use_idea=$enableval) AC_MSG_RESULT($use_idea) if test x"$use_idea" = xyes ; then AC_DEFINE(USE_IDEA,1,[Define to include the IDEA cipher]) fi AC_MSG_CHECKING([whether to enable the CAST5 cipher]) AC_ARG_ENABLE(cast5, AC_HELP_STRING([--disable-cast5],[disable the CAST5 cipher]), use_cast5=$enableval) AC_MSG_RESULT($use_cast5) if test x"$use_cast5" = xyes ; then AC_DEFINE(USE_CAST5,1,[Define to include the CAST5 cipher]) fi AC_MSG_CHECKING([whether to enable the BLOWFISH cipher]) AC_ARG_ENABLE(blowfish, AC_HELP_STRING([--disable-blowfish],[disable the BLOWFISH cipher]), use_blowfish=$enableval) AC_MSG_RESULT($use_blowfish) if test x"$use_blowfish" = xyes ; then AC_DEFINE(USE_BLOWFISH,1,[Define to include the BLOWFISH cipher]) fi AC_MSG_CHECKING([whether to enable the AES ciphers]) AC_ARG_ENABLE(aes, AC_HELP_STRING([--disable-aes],[disable the AES, AES192, and AES256 ciphers]), use_aes=$enableval) AC_MSG_RESULT($use_aes) if test x"$use_aes" = xyes ; then AC_DEFINE(USE_AES,1,[Define to include the AES, AES192, and AES256 ciphers]) fi AC_MSG_CHECKING([whether to enable the TWOFISH cipher]) AC_ARG_ENABLE(twofish, AC_HELP_STRING([--disable-twofish],[disable the TWOFISH cipher]), use_twofish=$enableval) AC_MSG_RESULT($use_twofish) if test x"$use_twofish" = xyes ; then AC_DEFINE(USE_TWOFISH,1,[Define to include the TWOFISH cipher]) fi AC_MSG_CHECKING([whether to enable the CAMELLIA cipher]) AC_ARG_ENABLE(camellia, AC_HELP_STRING([--enable-camellia],[enable the CAMELLIA cipher]), use_camellia=$enableval) AC_MSG_RESULT($use_camellia) if test x"$use_camellia" = xyes ; then AC_DEFINE(USE_CAMELLIA,1,[Define to include the CAMELLIA cipher]) fi AC_MSG_CHECKING([whether to enable the SHA-224 and SHA-256 digests]) AC_ARG_ENABLE(sha256, AC_HELP_STRING([--disable-sha256],[disable the SHA-224 and SHA-256 digests]), use_sha256=$enableval) AC_MSG_RESULT($use_sha256) if test x"$use_sha256" = xyes ; then AC_DEFINE(USE_SHA256,1,[Define to include the SHA-224 and SHA-256 digests]) fi dnl SHA512 is defined only after we confirm 64-bit support later AC_MSG_CHECKING([whether to enable the SHA-384 and SHA-512 digests]) AC_ARG_ENABLE(sha512, AC_HELP_STRING([--disable-sha512],[disable the SHA-384 and SHA-512 digests]), use_sha512=$enableval) AC_MSG_RESULT($use_sha512) dnl BZLIB is defined only after we confirm the library is available later AC_MSG_CHECKING([whether to enable the BZIP2 compression algorithm]) AC_ARG_ENABLE(bzip2, AC_HELP_STRING([--disable-bzip2],[disable the BZIP2 compression algorithm]), use_bzip2=$enableval) AC_MSG_RESULT($use_bzip2) AC_MSG_CHECKING([whether to enable external program execution]) AC_ARG_ENABLE(exec, AC_HELP_STRING([--disable-exec],[disable all external program execution]), use_exec=$enableval) AC_MSG_RESULT($use_exec) if test "$use_exec" = no ; then AC_DEFINE(NO_EXEC,1,[Define to disable all external program execution]) fi if test "$use_exec" = yes ; then AC_MSG_CHECKING([whether to enable photo ID viewing]) AC_ARG_ENABLE(photo-viewers, AC_HELP_STRING([--disable-photo-viewers],[disable photo ID viewers]), [if test "$enableval" = no ; then AC_DEFINE(DISABLE_PHOTO_VIEWER,1,[define to disable photo viewing]) fi],enableval=yes) gnupg_cv_enable_photo_viewers=$enableval AC_MSG_RESULT($enableval) if test "$gnupg_cv_enable_photo_viewers" = yes ; then AC_MSG_CHECKING([whether to use a fixed photo ID viewer]) AC_ARG_WITH(photo-viewer, AC_HELP_STRING([--with-photo-viewer=FIXED_VIEWER], [set a fixed photo ID viewer]), [if test "$withval" = yes ; then withval=no elif test "$withval" != no ; then AC_DEFINE_UNQUOTED(FIXED_PHOTO_VIEWER,"$withval", [if set, restrict photo-viewer to this]) fi],withval=no) AC_MSG_RESULT($withval) fi AC_MSG_CHECKING([whether to enable external keyserver helpers]) AC_ARG_ENABLE(keyserver-helpers, AC_HELP_STRING([--disable-keyserver-helpers], [disable all external keyserver support]), [if test "$enableval" = no ; then AC_DEFINE(DISABLE_KEYSERVER_HELPERS,1, [define to disable keyserver helpers]) fi],enableval=yes) gnupg_cv_enable_keyserver_helpers=$enableval AC_MSG_RESULT($enableval) if test "$gnupg_cv_enable_keyserver_helpers" = yes ; then dnl LDAP is defined only after we confirm the library is available later AC_MSG_CHECKING([whether LDAP keyserver support is requested]) AC_ARG_ENABLE(ldap, AC_HELP_STRING([--disable-ldap],[disable LDAP keyserver interface only]), try_ldap=$enableval, try_ldap=yes) AC_MSG_RESULT($try_ldap) AC_MSG_CHECKING([whether HKP keyserver support is requested]) AC_ARG_ENABLE(hkp, AC_HELP_STRING([--disable-hkp],[disable HKP keyserver interface only]), try_hkp=$enableval, try_hkp=yes) AC_MSG_RESULT($try_hkp) AC_MSG_CHECKING([whether finger key fetching support is requested]) AC_ARG_ENABLE(finger, AC_HELP_STRING([--disable-finger], [disable finger key fetching interface only]), try_finger=$enableval, try_finger=yes) AC_MSG_RESULT($try_finger) AC_MSG_CHECKING([whether generic object key fetching support is requested]) AC_ARG_ENABLE(generic, AC_HELP_STRING([--disable-generic], [disable generic object key fetching interface only]), try_generic=$enableval, try_generic=yes) AC_MSG_RESULT($try_generic) AC_MSG_CHECKING([whether email keyserver support is requested]) AC_ARG_ENABLE(mailto, AC_HELP_STRING([--enable-mailto], [enable email keyserver interface only]), try_mailto=$enableval, try_mailto=no) AC_MSG_RESULT($try_mailto) fi AC_MSG_CHECKING([whether keyserver exec-path is enabled]) AC_ARG_ENABLE(keyserver-path, AC_HELP_STRING([--disable-keyserver-path], [disable the exec-path option for keyserver helpers]), [if test "$enableval" = no ; then disable_keyserver_path=yes fi],enableval=yes) AC_MSG_RESULT($enableval) fi AC_MSG_CHECKING([whether the included zlib is requested]) AC_ARG_WITH(included-zlib, AC_HELP_STRING([--with-included-zlib],[use the zlib code included here]), [g10_force_zlib="$withval"], [g10_force_zlib=no] ) AC_MSG_RESULT($g10_force_zlib) dnl dnl Check for the key/uid cache size. This can't be zero, but can be dnl pretty small on embedded systems. dnl AC_MSG_CHECKING([for the size of the key and uid cache]) AC_ARG_ENABLE(key-cache, AC_HELP_STRING([--enable-key-cache=SIZE],[Set key cache to SIZE (default 4096)]),,enableval=4096) if test "$enableval" = "no"; then enableval=5 elif test "$enableval" = "yes" || test "$enableval" = ""; then enableval=4096 fi changequote(,)dnl key_cache_size=`echo "$enableval" | sed 's/[A-Za-z]//g'` changequote([,])dnl if test "$enableval" != "$key_cache_size" || test "$key_cache_size" -lt 5; then AC_MSG_ERROR([invalid key-cache size]) fi AC_MSG_RESULT($key_cache_size) AC_DEFINE_UNQUOTED(PK_UID_CACHE_SIZE,$key_cache_size,[Size of the key and UID caches]) dnl dnl Check whether we want to use Linux capabilities dnl AC_MSG_CHECKING([whether use of capabilities is requested]) AC_ARG_WITH(capabilities, AC_HELP_STRING([--with-capabilities], [use linux capabilities [default=no]]), [use_capabilities="$withval"],[use_capabilities=no]) AC_MSG_RESULT($use_capabilities) # To avoid double inclusion of config.h which might happen at some # places, we add the usual double inclusion protection. AH_TOP([ #ifndef GNUPG_CONFIG_H_INCLUDED #define GNUPG_CONFIG_H_INCLUDED ]) AH_BOTTOM([ /* We didn't define endianness above, so get it from OS macros. This is intended for making fat binary builds on OS X. */ #if !defined(BIG_ENDIAN_HOST) && !defined(LITTLE_ENDIAN_HOST) # if defined(__BIG_ENDIAN__) # define BIG_ENDIAN_HOST 1 # elif defined(__LITTLE_ENDIAN__) # define LITTLE_ENDIAN_HOST 1 # else # error "No endianness found" # endif #endif #if !(defined(HAVE_FORK) && defined(HAVE_PIPE) && defined(HAVE_WAITPID)) # define EXEC_TEMPFILE_ONLY #endif /* A macro to help checking the GCC version. */ #ifdef __GNUC__ # define GNUPG_GCC_VERSION (__GNUC__ * 10000 \ + __GNUC_MINOR__ * 100 \ + __GNUC_PATCHLEVEL__) #endif /*__GNUC__*/ /* Please note that the string version must not contain more than one character because the using code assumes strlen()==1 */ #ifdef HAVE_DOSISH_SYSTEM # define DIRSEP_C '\\' # define EXTSEP_C '.' # define DIRSEP_S "\\" # define EXTSEP_S "." # define PATHSEP_C ';' # define PATHSEP_S ";" #else # define DIRSEP_C '/' # define EXTSEP_C '.' # define DIRSEP_S "/" # define EXTSEP_S "." # define PATHSEP_C ':' # define PATHSEP_S ":" #endif #ifdef __VMS # define GNUPG_BAK_SFX "_bak" # define GNUPG_TMP_SFX "_tmp" #else /*!def __VMS */ # define GNUPG_BAK_SFX "~" # define GNUPG_TMP_SFX EXTSEP_S "tmp" #endif /* def __VMS [else] */ /* For some OSes we need to use fixed strings for certain directories. */ #ifdef HAVE_DRIVE_LETTERS # define LOCALEDIR "c:\\\\lib\\\\gnupg\\\\locale" # define GNUPG_LIBDIR "c:\\\\lib\\\\gnupg" # define GNUPG_LIBEXECDIR "c:\\\\lib\\\\gnupg" # define GNUPG_DATADIR "c:\\\\lib\\\\gnupg" # define GNUPG_HOMEDIR "c:\\\\gnupg" #else # ifdef __VMS # define GNUPG_DATADIR "/SYS$MANAGER/gnupg_share" # define GNUPG_HOMEDIR "/SYS$LOGIN/gnupg" # define GNUPG_LIBDIR "/SYS$MANAGER/gnupg_share" # define GNUPG_LIBEXECDIR "" # else # define GNUPG_HOMEDIR "~/.gnupg" # endif #endif /* Hack used for W32: ldap.m4 also tests for the ASCII version of ldap_start_tls_s because that is the actual symbol used in the library. winldap.h redefines it to our commonly used value, thus we define our usual macro here. */ #ifdef HAVE_LDAP_START_TLS_SA # ifndef HAVE_LDAP_START_TLS_S # define HAVE_LDAP_START_TLS_S 1 # endif #endif /* This is the major version number of GnuPG so that source included files can test for this. */ #define GNUPG_MAJOR_VERSION 1 /* This is the same as VERSION, but should be overridden if the platform cannot handle things like dots'.' in filenames. Set SAFE_VERSION_DOT and SAFE_VERSION_DASH to whatever SAFE_VERSION uses for dots and dashes. */ #define SAFE_VERSION VERSION #define SAFE_VERSION_DOT '.' #define SAFE_VERSION_DASH '-' /* We want to use our memory allocator for estream-printf. */ #define _ESTREAM_PRINTF_MALLOC xtrymalloc #define _ESTREAM_PRINTF_FREE xfree #define _ESTREAM_PRINTF_EXTRA_INCLUDE "memory.h" #endif /*GNUPG_CONFIG_H_INCLUDED*/ ]) AM_MAINTAINER_MODE dnl Checks for programs. 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) AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir) AC_PROG_CC AM_PROG_CC_C_O AC_PROG_CPP AC_PROG_RANLIB AC_CHECK_TOOL(AR, ar, :) AC_PATH_PROG(PERL,"perl") AC_ISC_POSIX AC_SYS_LARGEFILE AC_PROG_INSTALL AC_PROG_AWK GNUPG_CHECK_USTAR # According to a comment by Marcus Brinkman in libgpg-error, the # AC_PROG_CC_FOR_BUILD macro in the AC archive is broken for autoconf # 2.57. Thus we use a simply use "cc" if we are cross-compiling. AC_MSG_CHECKING(for cc for build) if test "$cross_compiling" = "yes"; then CC_FOR_BUILD="${CC_FOR_BUILD-cc}" else CC_FOR_BUILD="${CC_FOR_BUILD-$CC}" fi AC_MSG_RESULT($CC_FOR_BUILD) AC_ARG_VAR(CC_FOR_BUILD,[build system C compiler]) MPI_OPT_FLAGS="" have_dosish_system=no need_dlopen=yes case "${host}" in *-mingw32*) # special stuff for Windoze NT ac_cv_have_dev_random=no AC_DEFINE(USE_ONLY_8DOT3,1, [set this to limit filenames to the 8.3 format]) AC_DEFINE(HAVE_DRIVE_LETTERS,1, [defined if we must run on a stupid file system]) AC_DEFINE(USE_SIMPLE_GETTEXT,1, [because the Unix gettext has too much overhead on MingW32 systems and these systems lack Posix functions, we use a simplified version of gettext]) AC_DEFINE(HAVE_W32_SYSTEM,1, [Defined if we run on a W32 API based system]) disable_keyserver_path=yes have_dosish_system=yes need_dlopen=no try_gettext="no" agent_support=no use_simple_gettext=yes have_w32_system=yes # gcc 4.6 uses by default -fomit-frame-pointer. This # conflicts with mingw runtime's setjmp/longjmp usage. The # actual bug we notice is a segv related to the dlopened # iconv.dll: After returning from set_native_charset the stack # frame is corrupt. if test -n "$GCC" ; then CFLAGS="$CFLAGS -fno-omit-frame-pointer" fi ;; i?86-emx-os2 | i?86-*-os2*emx ) # OS/2 with the EMX environment ac_cv_have_dev_random=no AC_DEFINE(HAVE_DRIVE_LETTERS) have_dosish_system=yes try_gettext="no" agent_support=no ;; i?86-*-msdosdjgpp*) # DOS with the DJGPP environment ac_cv_have_dev_random=no AC_DEFINE(HAVE_DRIVE_LETTERS) have_dosish_system=yes try_gettext="no" agent_support=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 ;; *-dec-osf5*) if test -z "$GCC" ; then # Use the newer compiler `-msg_disable ptrmismatch1' to # get rid of the unsigned/signed char mismatch warnings. # Using this may hide other pointer mismatch warnings, but # it at least lets other warning classes through CFLAGS="$CFLAGS -msg_disable ptrmismatch1" fi ;; m68k-atari-mint) ;; *) ;; esac if test "$have_dosish_system" = yes; then AC_DEFINE(HAVE_DOSISH_SYSTEM,1, [defined if we run on some of the PCDOS like systems (DOS, Windoze. OS/2) with special properties like no file modes]) fi AM_CONDITIONAL(HAVE_DOSISH_SYSTEM, test "$have_dosish_system" = yes) AM_CONDITIONAL(USE_SIMPLE_GETTEXT, test x"$use_simple_gettext" = xyes) AM_CONDITIONAL(HAVE_W32_SYSTEM, test x"$have_w32_system" = xyes) if test "$disable_keyserver_path" = yes; then AC_DEFINE(DISABLE_KEYSERVER_PATH,1, [define to disable exec-path for keyserver helpers]) fi AC_SUBST(MPI_OPT_FLAGS) GNUPG_SYS_SYMBOL_UNDERSCORE dnl These need to go after AC_PROG_CC so that $EXEEXT is defined AC_DEFINE_UNQUOTED(EXEEXT,"$EXEEXT",[The executable file extension, if any]) if test x"$try_hkp" = xyes ; then AC_SUBST(GPGKEYS_HKP,"gpgkeys_hkp$EXEEXT") fi if test x"$try_finger" = xyes ; then AC_SUBST(GPGKEYS_FINGER,"gpgkeys_finger$EXEEXT") fi dnl Must check for network library requirements before doing link tests dnl for ldap, for example. If ldap libs are static (or dynamic and without dnl ELF runtime link paths), then link will fail and LDAP support won't dnl be detected. AC_CHECK_FUNC(gethostbyname, , AC_CHECK_LIB(nsl, gethostbyname, [NETLIBS="-lnsl $NETLIBS"])) AC_CHECK_FUNC(setsockopt, , AC_CHECK_LIB(socket, setsockopt, [NETLIBS="-lsocket $NETLIBS"])) dnl Now try for the resolver functions so we can use DNS for SRV, PKA, dnl and CERT. if test x"$try_dns" = xyes ; then if test x"$try_hkp" = xyes || test x"$try_http" = xyes ; then AC_ARG_ENABLE(dns-srv, AC_HELP_STRING([--disable-dns-srv], [disable the use of DNS SRV in HKP and HTTP]), use_dns_srv=$enableval,use_dns_srv=yes) fi AC_ARG_ENABLE(dns-cert, AC_HELP_STRING([--disable-dns-cert], [disable the use of CERT records in DNS]), use_dns_cert=$enableval,use_dns_cert=yes) fi if test x"$use_dns_srv" = xyes || test x"$use_dns_cert" = xyes; then _dns_save_libs=$LIBS LIBS="" # the double underscore thing is a glibc-ism? AC_SEARCH_LIBS(res_query,resolv bind socket,, AC_SEARCH_LIBS(__res_query,resolv bind socket,,have_resolver=no)) AC_SEARCH_LIBS(dn_expand,resolv bind socket,, AC_SEARCH_LIBS(__dn_expand,resolv bind socket,,have_resolver=no)) AC_SEARCH_LIBS(dn_skipname,resolv bind socket,, AC_SEARCH_LIBS(__dn_skipname,resolv bind socket,,have_resolver=no)) if test x"$have_resolver" != xno ; then # Make sure that the BIND 4 resolver interface is workable before # enabling any code that calls it. At some point I'll rewrite the # code to use the BIND 8 resolver API. AC_MSG_CHECKING([whether the resolver is usable]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include #include #include #include ]], [[unsigned char answer[PACKETSZ]; res_query("foo.bar",C_IN,T_A,answer,PACKETSZ); dn_skipname(0,0); dn_expand(0,0,0,0,0);]])],have_resolver=yes,have_resolver=no) AC_MSG_RESULT($have_resolver) # This is Apple-specific and somewhat bizarre as they changed the # define in bind 8 for some reason. if test x"$have_resolver" != xyes ; then AC_MSG_CHECKING([whether I can make the resolver usable with BIND_8_COMPAT and libresolv]) LIBS="$LIBS -lresolv" AC_LINK_IFELSE([AC_LANG_PROGRAM([[#define BIND_8_COMPAT #include #include #include #include ]], [[unsigned char answer[PACKETSZ]; res_query("foo.bar",C_IN,T_A,answer,PACKETSZ); dn_skipname(0,0); dn_expand(0,0,0,0,0);]])],[have_resolver=yes ; need_compat=yes]) AC_MSG_RESULT($have_resolver) fi fi if test x"$have_resolver" = xyes ; then DNSLIBS=$LIBS if test x"$use_dns_srv" = xyes ; then AC_DEFINE(USE_DNS_SRV,1,[define to use DNS SRV]) fi if test x"$use_dns_cert" = xyes ; then AC_DEFINE(USE_DNS_CERT,1,[define to use DNS CERT]) fi if test x"$need_compat" = xyes ; then AC_DEFINE(BIND_8_COMPAT,1,[an Apple OSXism]) fi else use_dns_srv=no use_dns_cert=no fi LIBS=$_dns_save_libs fi AC_SUBST(DNSLIBS) AM_CONDITIONAL(USE_DNS_SRV, test x"$use_dns_srv" = xyes) # Check for LDAP if test "$try_ldap" = yes ; then GNUPG_CHECK_LDAP($NETLIBS) fi # Check for curl. We fake the curl API if libcurl isn't installed. # We require 7.10 or better as we use curl_version_info(). LIBCURL_CHECK_CONFIG([yes],[7.10],,[fake_curl=yes]) AM_CONDITIONAL(FAKE_CURL,test x"$fake_curl" = xyes) # Generic, for us, means curl if test x"$try_generic" = xyes ; then AC_SUBST(GPGKEYS_CURL,"gpgkeys_curl$EXEEXT") fi dnl This isn't necessarily sendmail itself, but anything that gives a dnl sendmail-ish interface to the outside world. That includes qmail, dnl postfix, etc. Basically, anything that can handle "sendmail -t". if test "$try_mailto" = yes ; then AC_ARG_WITH(mailprog, AC_HELP_STRING([--with-mailprog=NAME], [use "NAME -t" for mail transport]),,with_mailprog=yes) if test "$with_mailprog" = yes ; then AC_PATH_PROG(SENDMAIL,sendmail,,$PATH:/usr/sbin:/usr/libexec:/usr/lib) if test "$ac_cv_path_SENDMAIL" ; then GPGKEYS_MAILTO="gpgkeys_mailto" fi elif test "$with_mailprog" != no ; then AC_MSG_CHECKING([for a mail transport program]) AC_SUBST(SENDMAIL,$with_mailprog) AC_MSG_RESULT($with_mailprog) GPGKEYS_MAILTO="gpgkeys_mailto" fi fi AC_SUBST(GPGKEYS_MAILTO) case "${host}" in *-mingw32*) PRINTABLE_OS_NAME="MingW32" ;; *-*-cygwin*) PRINTABLE_OS_NAME="Cygwin" ;; i?86-emx-os2 | i?86-*-os2*emx ) PRINTABLE_OS_NAME="OS/2" ;; i?86-*-msdosdjgpp*) PRINTABLE_OS_NAME="MSDOS/DJGPP" try_extensions=no ;; *-linux*) PRINTABLE_OS_NAME="GNU/Linux" ;; *) PRINTABLE_OS_NAME=`uname -s || echo "Unknown"` ;; esac AC_DEFINE_UNQUOTED(PRINTABLE_OS_NAME, "$PRINTABLE_OS_NAME", [A human readable text with the name of the OS]) # # 1. Set names of random devices # NAME_OF_DEV_RANDOM="/dev/random" NAME_OF_DEV_URANDOM="/dev/urandom" case "${host}" in *-openbsd*) NAME_OF_DEV_RANDOM="/dev/srandom" NAME_OF_DEV_URANDOM="/dev/urandom" ;; esac AC_DEFINE_UNQUOTED(NAME_OF_DEV_RANDOM, "$NAME_OF_DEV_RANDOM", [defined to the name of the strong random device]) AC_DEFINE_UNQUOTED(NAME_OF_DEV_URANDOM, "$NAME_OF_DEV_URANDOM", [defined to the name of the weaker random device]) AC_SUBST(MPI_OPT_FLAGS) dnl Checks for libraries. # This is "GNU gnupg" - The project-id script from gettext # needs to find this string. Without # it "make distcheck" may fail. AM_PO_SUBDIRS AM_GNU_GETTEXT_VERSION([0.19.3]) if test "$try_gettext" = yes; then AM_GNU_GETTEXT(,[need-ngettext]) # gettext requires some extra checks. These really should be part of # the basic AM_GNU_GETTEXT macro. TODO: move other gettext-specific # function checks to here. AC_CHECK_FUNCS(strchr) else enable_nls=no USE_NLS=no USE_INCLUDED_LIBINTL=no BUILD_INCLUDED_LIBINTL=no POSUB=po AC_SUBST(USE_NLS) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(POSUB) fi if test "$try_extensions" = yes || test x"$card_support" = xyes ; then if test "$need_dlopen" = yes; then _dl_save_libs=$LIBS LIBS="" AC_SEARCH_LIBS(dlopen,dl,found_dlopen=yes) if test x"$found_dlopen" = "xyes" ; then AC_DEFINE(HAVE_DL_DLOPEN,1, [Defined when the dlopen function family is available]) DLLIBS=$LIBS else if test "$try_extensions" = yes ; then AC_MSG_NOTICE([dlopen not found. Disabling extensions.]) try_extensions=no fi if test "$card_support" = yes ; then AC_MSG_WARN([dlopen not found. Disabling OpenPGP card support.]) card_support=no fi fi LIBS=$_dl_save_libs fi fi AC_SUBST(DLLIBS) if test "$card_support" = yes ; then AC_DEFINE(ENABLE_CARD_SUPPORT,1,[Define to include OpenPGP card support]) fi if test "$agent_support" = yes ; then AC_DEFINE(ENABLE_AGENT_SUPPORT,1,[Define to include gpg-agent support]) fi if test "$try_extensions" = yes ; then AC_DEFINE(USE_DYNAMIC_LINKING,1,[Define to enable the use of extensions]) fi if test "$selinux_support" = yes ; then AC_DEFINE(ENABLE_SELINUX_HACKS,1,[Define to enable SELinux support]) fi if test "$gnupg_use_iconv" = yes ; then AC_DEFINE(USE_GNUPG_ICONV,1,[Define to use the new iconv based code]) fi AM_CONDITIONAL(ENABLE_CARD_SUPPORT, test "$card_support" = yes) AM_CONDITIONAL(ENABLE_AGENT_SUPPORT, test "$agent_support" = yes) AM_CONDITIONAL(ENABLE_SELINUX_HACKS, test "$selinux_support" = yes) dnl Checks for header files. AC_HEADER_STDC AC_CHECK_HEADERS([unistd.h langinfo.h termio.h locale.h getopt.h pwd.h \ signal.h]) # Note that we do not check for iconv here because this is done anyway # by the gettext checks and thus it allows us to disable the use of # iconv by using --disable-nls. dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_C_INLINE AC_C_VOLATILE AC_TYPE_SIZE_T AC_TYPE_MODE_T AC_TYPE_SIGNAL AC_DECL_SYS_SIGLIST AC_ARG_ENABLE(endian-check, AC_HELP_STRING([--disable-endian-check], [disable the endian check and trust the OS provided macros]), endiancheck=$enableval,endiancheck=yes) if test x"$endiancheck" = xyes ; then GNUPG_CHECK_ENDIAN fi 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) AC_CHECK_SIZEOF(unsigned int) AC_CHECK_SIZEOF(unsigned long) AC_CHECK_SIZEOF(unsigned long long) AC_HEADER_TIME AC_CHECK_SIZEOF(time_t,,[[ #include #if TIME_WITH_SYS_TIME # include # include #else # if HAVE_SYS_TIME_H # include # else # include # endif #endif ]]) GNUPG_TIME_T_UNSIGNED # Ensure that we have UINT64_C before we bother to check for uint64_t AC_CHECK_HEADERS([inttypes.h]) AC_CACHE_CHECK([for UINT64_C], [gnupg_cv_uint64_c_works], AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include ]],[[ uint64_t foo=UINT64_C(42);]])],gnupg_cv_uint64_c_works=yes,gnupg_cv_uint64_c_works=no)) if test "$gnupg_cv_uint64_c_works" = "yes" ; then AC_CHECK_SIZEOF(uint64_t) fi 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 Do we have any 64-bit data types? if test x"$use_sha512" = xyes \ && test "$ac_cv_sizeof_unsigned_int" != "8" \ && test "$ac_cv_sizeof_unsigned_long" != "8" \ && test "$ac_cv_sizeof_unsigned_long_long" != "8" \ && test x"$ac_cv_sizeof_uint64_t" != "x8"; then AC_MSG_NOTICE([No 64-bit types. Disabling SHA-384 and SHA-512.]) use_sha512=no fi if test x"$use_sha512" = xyes ; then AC_DEFINE(USE_SHA512,1,[Define to include the SHA-384 and SHA-512 digests]) fi AM_CONDITIONAL(USE_SHA512, test x"$use_sha512" = xyes) dnl Checks for library functions. AC_CHECK_DECLS(getpagesize) AC_FUNC_FSEEKO AC_FUNC_VPRINTF AC_FUNC_FORK AC_CHECK_FUNCS(strerror stpcpy strlwr tcgetattr strtoul mmap sysconf) AC_CHECK_FUNCS(strcasecmp strncasecmp ctermid times unsetenv getpwnam getpwuid) AC_CHECK_FUNCS(memmove gettimeofday getrusage setrlimit clock_gettime) AC_CHECK_FUNCS(atexit raise getpagesize strftime nl_langinfo setlocale) AC_CHECK_FUNCS(waitpid wait4 sigaction sigprocmask rand pipe stat getaddrinfo) AC_CHECK_FUNCS(fcntl ftruncate inet_ntop) AC_REPLACE_FUNCS(mkdtemp timegm isascii memrchr strsep) AC_CHECK_TYPES([struct sigaction, sigset_t],,,[#include ]) # See if getopt is in libiberty. This is of course not optimal since # it might be somewhere other than libiberty, but does cover the # mingw32 case. AC_CHECK_FUNC(getopt,,AC_CHECK_LIB(iberty,getopt,AC_SUBST(GETOPT,"-liberty"))) # # check for gethrtime and run a testprogram to see whether # it is broken. It has been reported that some Solaris and HP UX systems # raise an SIGILL # AC_CACHE_CHECK([for gethrtime], [gnupg_cv_func_gethrtime], [AC_TRY_LINK([#include ],[ hrtime_t tv; tv = gethrtime(); ], [gnupg_cv_func_gethrtime=yes], [gnupg_cv_func_gethrtime=no]) ]) if test $gnupg_cv_func_gethrtime = yes; then AC_DEFINE([HAVE_GETHRTIME], 1, [Define if you have the `gethrtime(2)' function.]) AC_CACHE_CHECK([whether gethrtime is broken], [gnupg_cv_func_broken_gethrtime], [AC_TRY_RUN([ #include int main () { hrtime_t tv; tv = gethrtime(); } ], [gnupg_cv_func_broken_gethrtime=no], [gnupg_cv_func_broken_gethrtime=yes], [gnupg_cv_func_broken_gethrtime=assume-no]) ]) if test $gnupg_cv_func_broken_gethrtime = yes; then AC_DEFINE([HAVE_BROKEN_GETHRTIME], 1, [Define if `gethrtime(2)' does not work correctly i.e. issues a SIGILL.]) fi fi GNUPG_CHECK_MLOCK GNUPG_FUNC_MKDIR_TAKES_ONE_ARG # # Prepare building of estream-printf # estream_PRINTF_INIT dnl dnl Check whether we can use Linux capabilities as requested dnl if test "$use_capabilities" = "yes" ; then AC_MSG_WARN([[ *** *** WARNING: using capabilities with GnuPG is experimental code! ***]]) 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,1, [define if capabilities should be used]) AC_SUBST(CAPLIBS,"-lcap") 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,1, [define if the shared memory interface should be made available]) fi AM_CONDITIONAL(HAVE_SHM, test "$ac_cv_header_sys_shm_h" = yes) 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 -r "$NAME_OF_DEV_RANDOM" && test -r "$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,1, [defined if the system supports a random device] ) fi else AC_MSG_CHECKING(for random device) ac_cv_have_dev_random=no AC_MSG_RESULT(has been disabled) fi dnl dnl Figure out the default random module. dnl random_modules="" if test "$use_static_rnd" = default; then if test "$ac_cv_have_dev_random" = yes; then random_modules="rndlinux" else case "${host}" in *-mingw32*|*-*-cygwin*) random_modules="rndw32" ;; i?86-emx-os2|i?86-*-os2*emx) random_modules="rndos2" ;; m68k-atari-mint) random_modules="rndatari" ;; i?86-*-msdosdjgpp*) : ;; *) random_modules="rndlinux rndegd rndunix" AC_DEFINE(USE_ALL_RANDOM_MODULES, 1, [Allow to select random modules at runtime.]) ;; esac fi else if test "$use_static_rnd" = auto; then random_modules="rndlinux rndegd rndunix" AC_DEFINE(USE_ALL_RANDOM_MODULES, 1) else random_modules="rnd$use_static_rnd"; fi fi if test -z "$random_modules"; then AC_MSG_ERROR(no random module available) fi print_egd_warning=no for rndmod in $random_modules "" ; do case "$rndmod" in rndlinux) AC_DEFINE(USE_RNDLINUX,1, [Defined if the /dev/random based RNG should be used.]) use_rndlinux=yes ;; rndunix) AC_DEFINE(USE_RNDUNIX,1, [Defined if the default Unix RNG should be used.]) print_egd_warning=yes use_rndunix=yes ;; rndegd) AC_DEFINE(USE_RNDEGD,1, [Defined if the EGD based RNG should be used.]) use_rndegd=yes ;; rndw32) AC_DEFINE(USE_RNDW32,1, [Defined if the Windows specific RNG should be used.]) use_rndw32=yes ;; esac done AM_CONDITIONAL(USE_RNDLINUX, test "$use_rndlinux" = yes) AM_CONDITIONAL(USE_RNDUNIX, test "$use_rndunix" = yes) AM_CONDITIONAL(USE_RNDEGD, test "$use_rndegd" = yes) AM_CONDITIONAL(USE_RNDW32, test "$use_rndw32" = yes) dnl setup assembler stuff AC_MSG_CHECKING(for mpi assembler functions) if test -f $srcdir/mpi/config.links ; then . $srcdir/mpi/config.links AC_CONFIG_LINKS("$mpi_ln_list") 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="" show_extraasm="" if test "$ac_cv_mpi_extra_asm_modules" != ""; then for i in $ac_cv_mpi_extra_asm_modules; do show_extraasm="$show_extraasm $i" MPI_EXTRA_ASM_OBJS="$MPI_EXTRA_ASM_OBJS $i.o" done fi AC_SUBST(MPI_EXTRA_ASM_OBJS) MPI_SFLAGS="$ac_cv_mpi_sflags" AC_SUBST(MPI_SFLAGS) # Sanity check regex. Tests adapted from mutt. AC_MSG_CHECKING([whether regular expression support is requested]) AC_ARG_ENABLE(regex, AC_HELP_STRING([--disable-regex], [do not handle regular expressions in trust signatures]), use_regex=$enableval, use_regex=yes) AC_MSG_RESULT($use_regex) if test "$use_regex" = yes ; then AC_MSG_CHECKING([whether the included regex lib is requested]) AC_ARG_WITH(included-regex, AC_HELP_STRING([--with-included-regex], [use the included GNU regex library]), [gnupg_cv_included_regex="$withval"],[gnupg_cv_included_regex=no]) AC_MSG_RESULT($gnupg_cv_included_regex) if test $gnupg_cv_included_regex = no ; then # Does the system have regex functions at all? AC_CHECK_FUNC(regcomp,gnupg_cv_included_regex=no, gnupg_cv_included_regex=yes) fi if test $gnupg_cv_included_regex = no ; then AC_CACHE_CHECK([whether your system's regexp library is broken], [gnupg_cv_regex_broken], AC_TRY_RUN([ #include #include main() { regex_t blah ; regmatch_t p; p.rm_eo = p.rm_eo; return regcomp(&blah, "foo.*bar", REG_NOSUB) || regexec (&blah, "foobar", 0, NULL, 0); }], gnupg_cv_regex_broken=no, gnupg_cv_regex_broken=yes, gnupg_cv_regex_broken=yes)) if test $gnupg_cv_regex_broken = yes ; then AC_MSG_WARN(your regex is broken - using the included GNU regex instead.) gnupg_cv_included_regex=yes fi fi if test $gnupg_cv_included_regex = yes; then AC_DEFINE(USE_INTERNAL_REGEX,1,[ Define if you want to use the included regex lib ]) fi else AC_DEFINE(DISABLE_REGEX,1,[ Define to disable regular expression support ]) fi AM_CONDITIONAL(USE_INTERNAL_REGEX, test x"$gnupg_cv_included_regex" = xyes) 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 _cppflags="${CPPFLAGS}" _ldflags="${LDFLAGS}" AC_ARG_WITH(zlib, AC_HELP_STRING([--with-zlib=DIR],[use libz in DIR]),[ if test -d "$withval"; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi ]) AC_CHECK_HEADER(zlib.h, AC_CHECK_LIB(z, deflateInit2_, use_local_zlib=no ZLIBS="-lz", CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}), CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}) fi if test "$use_local_zlib" = yes ; then AC_CONFIG_LINKS(zlib.h:zlib/zlib.h zconf.h:zlib/zconf.h ) ZLIBS="../zlib/libzlib.a" fi AM_CONDITIONAL(ENABLE_LOCAL_ZLIB, test "$use_local_zlib" = yes) # Under W32 we force the use ofthe included bzip2 code. if test x"$have_w32_system" = xyes ; then have_bz2=yes AC_DEFINE(HAVE_BZIP2,1, [Defined if the bz2 compression library is available]) AC_CONFIG_LINKS(bzlib.h:bzlib/bzlib.h) ZLIBS="$ZLIBS ../bzlib/libbz2.a" else if test "$use_bzip2" = yes ; then _cppflags="${CPPFLAGS}" _ldflags="${LDFLAGS}" AC_ARG_WITH(bzip2, AC_HELP_STRING([--with-bzip2=DIR],[look for bzip2 in DIR]), [ if test -d "$withval" ; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi ],withval="") # Checking alongside stdio.h as an early version of bzip2 (1.0) # required stdio.h to be included before bzlib.h, and Solaris 9 is # woefully out of date. if test "$withval" != no ; then AC_CHECK_HEADER(bzlib.h, AC_CHECK_LIB(bz2,BZ2_bzCompressInit, [ have_bz2=yes ZLIBS="$ZLIBS -lbz2" AC_DEFINE(HAVE_BZIP2,1) ], CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags}), CPPFLAGS=${_cppflags} LDFLAGS=${_ldflags},[#include ]) fi fi fi AM_CONDITIONAL(ENABLE_BZIP2_SUPPORT,test x"$have_bz2" = "xyes") AC_SUBST(ZLIBS) # libusb allows us to use the integrated CCID smartcard reader driver. # We don't need it if we don't have card support though. if test "$card_support" = yes ; then GNUPG_CHECK_LIBUSB fi # Check for readline support GNUPG_CHECK_READLINE # Allow users to append something to the version string without # flagging it as development version. The user version parts is # considered everything after a dash. if test "$development_version" != yes; then changequote(,)dnl tmp_pat='[a-zA-Z]' changequote([,])dnl if echo "$VERSION" | sed 's/-.*//' | grep "$tmp_pat" >/dev/null ; then development_version=yes fi fi if test "$development_version" = yes; then AC_DEFINE(IS_DEVELOPMENT_VERSION,1, [Defined if this is not a regular release]) fi AM_CONDITIONAL(CROSS_COMPILING, test x$cross_compiling = xyes) # add some extra libs here so that previous tests don't fail for # mysterious reasons - the final link step should bail out. case "${host}" in *-mingw32*) dnl NETLIBS="$NETLIBS -lwsock32" W32LIBS="-lwsock32" ;; *) ;; esac AC_SUBST(NETLIBS) AC_SUBST(W32LIBS) # Special options used with gcc. if test "$GCC" = yes; then # Note that it is okay to use CFLAGS here because this are just # warning options and the user should have a chance of overriding #them. if test "$USE_MAINTAINER_MODE" = "yes"; then CFLAGS="$CFLAGS -Wall -Wcast-align -Wshadow -Wstrict-prototypes" CFLAGS="$CFLAGS -Wformat-nonliteral" else CFLAGS="$CFLAGS -Wall" fi # This is handy for debugging so the compiler doesn't rearrange # things and eliminate variables. AC_ARG_ENABLE(optimization, AC_HELP_STRING([--disable-optimization], [disable compiler optimization]), [if test $enableval = no ; then CFLAGS=`echo $CFLAGS | sed 's/-O[[0-9]]//'` fi]) AC_MSG_CHECKING([if gcc supports -Wno-pointer-sign]) _gcc_cflags_save=$CFLAGS CFLAGS="-Wno-pointer-sign" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([])],_gcc_psign=yes,_gcc_psign=no) AC_MSG_RESULT($_gcc_psign) CFLAGS=$_gcc_cflags_save; if test x"$_gcc_psign" = xyes ; then CFLAGS="$CFLAGS -Wno-pointer-sign" fi fi CL_AS_NOEXECSTACK if test "$print_egd_warning" = yes; then AC_MSG_WARN([[ *** *** The performance of the UNIX random gatherer module is not very good *** and it does not keep the entropy pool over multiple invocations of *** GnuPG. The suggested way to overcome this problem is to use the *** *** Entropy Gathering Daemon (EGD) *** *** which provides a entropy source for the whole system. It is written *** in Perl and available at the GnuPG FTP servers. For more information *** consult the GnuPG webpages: *** *** http://www.gnupg.org/download/#EGD *** *** You may want to run ./configure with --enable-static-rnd=egd or *** --enable-static-rnd=auto to use it. ***]]) fi AC_CONFIG_FILES([ Makefile m4/Makefile intl/Makefile po/Makefile.in util/Makefile mpi/Makefile cipher/Makefile g10/Makefile keyserver/Makefile keyserver/gpgkeys_mailto keyserver/gpgkeys_test doc/Makefile tools/Makefile tools/gpg-zip zlib/Makefile bzlib/Makefile checks/Makefile ]) AC_OUTPUT # Give some feedback echo echo " Version info: $PACKAGE_STRING" echo " Configured for: $PRINTABLE_OS_NAME ($host)" if test -n "$show_extraasm"; then echo " Extra cpu specific functions:$show_extraasm" fi echo gnupg-1.4.20/po/0000755000175000017500000000000012635457221010344 500000000000000gnupg-1.4.20/po/fr.po0000644000175000017500000060127012635457220011240 00000000000000# GnuPG French translation # Copyright (C) 1998-2009, 2012, 2014 Free Software Foundation, Inc. # # Gaël Quéri , 1998-2009. # David Prévot , 2012, 2014. msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.19\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2014-09-06 15:56-0400\n" "Last-Translator: David Prévot \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8-bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Lokalize 1.5\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "impossible de générer un nombre premier avec pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "impossible de générer un nombre premier avec moins de %d bits\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "aucun module de récupération d'entropie n'a été trouvé\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "impossible de verrouiller « %s » : %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "attente du verrou sur « %s »…\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "impossible d'ouvrir « %s » : %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "impossible d'accéder à « %s » : %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "« %s » n'est pas un fichier régulier — ignoré\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "remarque : le fichier random_seed est vide\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" "Attention : la taille du fichier random_seed est incorrecte.\n" " Il ne sera pas utilisé.\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "impossible de lire « %s » : %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "remarque : le fichier random_seed n'a pas été mis à jour\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "impossible de créer « %s » : %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "impossible d'écrire « %s » : %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "impossible de fermer « %s » : %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "Attention : utilisation d'un générateur de nombres aléatoires non sûr.\n" #: cipher/random.c:894 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/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Veuillez patienter pendant la récupération de l'entropie. Vous devriez\n" "faire autre chose sur la machine pour éviter de vous ennuyer, car cela\n" "améliorera la qualité de l'entropie.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Il n'y a pas suffisamment d'octets aléatoires disponibles. Veuillez faire\n" "autre chose pour que le système d'exploitation puisse rassembler plus\n" "d'entropie (%d octets supplémentaires sont nécessaires).\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "impossible de stocker l'empreinte : %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "impossible de stocker la date de création : %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "échec de lecture de clef publique : %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "la réponse ne contient pas les données de clef publique\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "la réponse ne contient pas le module RSA\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "la réponse ne contient pas l'exposant public RSA\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "utilisation du code personnel par défaut en tant que %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "impossible d'utiliser le code personnel par défaut en tant que %s :\n" "%s — désactivation de la prochaine utilisation par défaut\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Veuillez entrer le code personnel%%0A[signatures faites : %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Veuillez entrer le code personnel" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "le rappel du code personnel a renvoyé une erreur : %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" "le code personnel pour CHV%d est trop court ; la taille minimale\n" "est %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "échec de vérification CHV%d : %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "erreur de récupération de l'état CHV de la carte\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "la carte est irrémédiablement bloquée.\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "il reste %d tentatives de code personnel d'administration\n" "avant que la carte ne soit irrémédiablement bloquée\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" "|A|Veuillez entrer le code personnel d'administration%%0A[tentatives " "restantes : %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Veuillez entrer le code personnel d'administration" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "l'accès aux commandes d'administration n'est pas configuré\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "le code de réinitialisation n'est plus disponible\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Veuillez entrer le code de réinitialisation pour la carte" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" "Le code de réinitialisation est trop court ; la taille minimale\n" "est %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Nouveau code de réinitialisation" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Nouveau code personnel d'administration" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Nouveau code personnel" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "erreur de lecture du nouveau code personnel : %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "erreur de lecture des données d'application\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "erreur de lecture de l'empreinte DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "la clef existe déjà\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "la clef existante sera remplacée\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "génération d'une nouvelle clef\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "écriture d'une nouvelle clef\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "la date de création est manquant\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "le module RSA est manquant ou sa taille n'est pas de %d bits\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "l'exposant public RSA est manquant ou plus grand que %d bits\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" "le nombre premier RSA %s est manquant ou sa taille n'est pas de\n" "%d bits\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "impossible de stocker la clef : %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "veuillez patienter pendant la génération de la clef…\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "échec de génération de la clef\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "la génération de clef est terminé (%d secondes)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "structure de carte OpenPGP incorrecte (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "l'empreinte de la carte ne correspond pas à celle demandée\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "la carte ne gère pas l'algorithme de hachage %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "signatures créées jusqu'à présent : %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "la vérification du code personnel d'administration est actuellement\n" "interdite avec cette commande\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "" "impossible d'accéder à %s — la carte OpenPGP n'est peut-être pas valable\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armure : %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "en-tête d'armure incorrect : " #: g10/armor.c:459 msgid "armor header: " msgstr "en-tête d'armure : " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "en-tête de signature en texte clair incorrect\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "en-tête d'armure inconnu : " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "signatures en texte clair imbriquées\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "armure inattendue : " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "ligne protégée par « - » incorrecte : " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "caractère %02X incorrect en radix64, ignoré\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "fin de fichier prématurée (pas de CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "fin de fichier prématurée (dans le CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC mal défini\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "erreur de CRC ; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "fin de fichier prématurée (dans le pied)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "erreur dans la ligne de pied\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "aucune donnée OpenPGP valable n'a été trouvée.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armure incorrecte : ligne plus longue que %d caractères\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caractère Quoted-Printable dans l'armure provenant sans\n" "doute d'un serveur de courriers électroniques défectueux\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "la carte OpenPGP n'est pas disponible : %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "carte OpenPGP nº %s détectée\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "impossible de faire cela en mode automatique\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Cette commande n'est disponible que pour les cartes en version 2\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Quel est votre choix ? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[non positionné]" #: g10/card-util.c:512 msgid "male" msgstr "masculin" #: g10/card-util.c:513 msgid "female" msgstr "féminin" #: g10/card-util.c:513 msgid "unspecified" msgstr "non indiqué" #: g10/card-util.c:540 msgid "not forced" msgstr "non forcé" #: g10/card-util.c:540 msgid "forced" msgstr "forcé" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Erreur : seul l'ASCII standard est permis pour l'instant.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Erreur : le caractère « < » ne peut pas être utilisé.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Erreur : les espaces doubles ne sont pas permises.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Nom du détenteur de la carte : " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Prénom du détenteur de la carte : " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Erreur : nom combiné trop long (limité à %d caractères).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL pour récupérer la clef publique : %s" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Erreur : URL trop longue (limitée à %d caractères).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "erreur d'allocation de suffisamment de mémoire : %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "erreur de lecture de « %s » : %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "erreur d'écriture de « %s » : %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Données d'identification (nom du compte) : " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" "Erreur : données d'identification trop longues (limitées à\n" "%d caractères).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Données DO privées : " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Erreur : DO privé trop long (limité à %d caractères).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Préférences de langue : " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Erreur : taille incorrecte de la chaîne de préférences.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Erreur : caractères incorrects dans la chaîne de préférences.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Sexe ((M)asculin, (F)éminin ou espace) : " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Erreur : réponse incorrecte.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "empreinte de l'autorité de certification : " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Erreur : formatage incorrect de l'empreinte.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "opération sur la clef impossible : %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "ce n'est pas une carte OpenPGP" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "" "erreur de lecture des renseignements actuellement contenus\n" "dans la clef : %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Faut-il remplacer la clef existante ? (o/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "Remarque : Il n'y a aucune garantie que la carte gère la taille demandée.\n" " En cas d'échec de génération de la clef, veuillez vérifier les\n" " tailles permises dans la documentation de la carte.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Quelle taille de clef désirez-vous pour la clef de signature ? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Quelle taille de clef désirez-vous pour la clef de chiffrement ? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "" "Quelle taille de clef désirez-vous pour la clef d'authentification ? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "arrondie à %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "les tailles de clefs %s doivent être dans l'intervalle %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" "La carte sera maintenant reconfigurée pour générer une clef de %u bits\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "erreur de modification de taille de clef %d en %u bits : %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" "Faut-il faire une sauvegarde hors carte de la clef de chiffrement ? (O/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "Remarque : les clefs sont déjà stockées sur la carte.\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Faut-il remplacer les clefs existantes ? (o/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Veuillez noter que les configurations d'usine des codes personnels sont\n" " code personnel = « %s » code personnel d'admin. = « %s ».\n" "Vous devriez les modifier avec la commande --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Veuillez sélectionner le type de clef à générer :\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Clef de signature\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Clef de chiffrement\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Clef d'authentification\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Choix incorrect.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Veuillez sélectionner l'endroit où stocker la clef :\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "algorithme de protection de clef inconnu\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "Les parties secrètes de la clef ne sont pas disponibles.\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "la clef secrète est déjà stockée sur une carte\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "erreur d'écriture la clef sur la carte : %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "quitter ce menu" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "afficher les commandes d'administration" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "afficher cette aide" #: g10/card-util.c:1687 msgid "list all available data" msgstr "afficher toutes les données disponibles" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "modifier le nom du détenteur de la carte" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "modifier l'URL pour récupérer la clef" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "récupérer la clef indiquée dans l'URL de la carte" #: g10/card-util.c:1693 msgid "change the login name" msgstr "modifier l'identifiant de connexion" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "modifier les préférences de langue" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "modifier le sexe du détenteur de la carte" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "modifier une empreinte d'autorité de certification" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" "inverser le paramètre obligeant à entrer le code personnel pour les\n" "signatures" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "générer de nouvelles clefs" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "menu pour modifier ou déverrouiller le code personnel" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "vérifier le code personnel et afficher toutes les données" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "débloquer le code personnel en utilisant un code de réinitialisation" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/carte> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "La commande n'est utilisable qu'en mode administration\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Les commandes d'administration sont permises\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Les commandes d'administration ne sont pas permises\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Commande incorrecte (essayez « help »)\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "lecteur de cartes indisponible\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" "Veuillez insérer la carte et appuyer sur entrée ou entrer « c » pour\n" "annuler : " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "échec de sélection d'openpgp : %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Veuillez retirer la carte présente et insérer celle de numéro de série :\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Appuyez sur entrée un fois prêt ou entrez « c » pour annuler : " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Entrez le nouveau code personnel d'administration : " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Entrez le nouveau code personnel : " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Entrez le code personnel d'administration : " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Entrez le code personnel : " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Répétez ce code personnel : " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "les codes personnels ne correspondent pas ; veuillez réessayer" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "impossible d'ouvrir « %s »\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output n'est pas compatible avec cette commande\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "clef « %s » introuvable : %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "erreur de lecture du bloc de clef : %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(à moins d'indiquer la clef par son empreinte)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "impossible de faire cela en mode automatique sans « --yes »\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Faut-il supprimer cette clef du porte-clefs ? (o/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "C'est une clef secrète — faut-il vraiment la supprimer ? (o/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "échec de suppression du bloc de clef : %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "les renseignements de confiance du propriétaire ont été effacées\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "il y a une clef secrète pour la clef publique « %s ».\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" "utiliser d'abord l'option « --delete-secret-keys » pour la supprimer.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "erreur de création de la phrase secrète : %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "impossible d'utiliser un paquet ESK symétrique en mode S2K\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "utilisation de l'algorithme de chiffrement %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "« %s » est déjà compressé\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "Attention : « %s » est un fichier vide\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "le chiffrement RSA n'est possible qu'avec des clefs d'au plus 2048 bits\n" "en mode --pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "lecture de « %s »\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "impossible d'utiliser le chiffrement IDEA avec toutes les clefs\n" "utilisés pour chiffrer.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "Attention : forcer le chiffrement symétrique %s (%d) est en\n" " désaccord avec les préférences du destinataire\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "Attention : forcer l'algorithme de compression %s (%d) est en\n" " désaccord avec les préférences du destinataire\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "forcer le chiffrement symétrique %s (%d) est en désaccord\n" "avec les préférences du destinataire\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "impossible d'utiliser %s en mode %s.\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s chiffré pour : « %s »\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "données chiffrées avec %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "chiffré avec l'algorithme inconnu %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "Attention : le message a été chiffré avec une clef faible pendant le\n" " chiffrement symétrique.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problème de gestion des paquets chiffrés\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "aucun programme d'exécution à distance n'est pris en charge\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "impossible de créer le répertoire « %s » : %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "les appels aux programmes externes sont désactivés car les droits\n" "du fichier d'options ne sont pas sûrs\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "cette plateforme a besoin de fichiers temporaires pour appeler des\n" "programmes externes\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "impossible d'exécuter le programme « %s » : %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "impossible d'exécuter l'interpréteur de commandes « %s » : %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "erreur système pendant l'appel du programme externe : %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "sortie non naturelle du programme externe\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "impossible d'exécuter le programme externe\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "impossible de lire la réponse du programme externe : %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" "Attention : impossible de supprimer le fichier temporaire\n" " (%s) « %s » : %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "" "Attention : impossible de supprimer le répertoire temporaire « %s » :\n" " %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "exporter les signatures marquées comme locales seulement" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "exporter les attributs d'identité (en général les photos d'identité)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "exporter les clefs de révocation marquées comme « sensibles »" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "supprimer la phrase secrète des sous-clefs exportées" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "supprimer les parties inutilisables de la clef pendant l'exportation" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "supprimer autant que possible de la clef pendant l'exportation" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "il est interdit d'exporter les clefs secrètes\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "clef %s : non protégée — ignorée\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "clef %s : clef de type PGP 2.x — ignorée\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "clef %s : matériel de clef sur la carte — ignorée\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "sur le point d'exporter une sous-clef non protégée\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "échec de déprotection de la sous-clef : %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" "Attention : la clef secrète %s n'a pas de somme de contrôle SK simple\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "Attention : rien n'a été exporté\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Commandes :\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[fichier]|faire une signature" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[fichier]|faire une signature en texte clair" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "faire une signature détachée" #: g10/gpg.c:393 msgid "encrypt data" msgstr "chiffrer les données" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "chiffrement symétrique seulement" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "déchiffrer les données (défaut)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "vérifier une signature" #: g10/gpg.c:401 msgid "list keys" msgstr "afficher les clefs" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "afficher les clefs et les signatures" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "afficher et vérifier les signatures de clefs" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "afficher les clefs et les empreintes" #: g10/gpg.c:406 msgid "list secret keys" msgstr "afficher les clefs secrètes" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "générer une nouvelle paire de clefs" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "supprimer les clefs du porte-clefs public" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "supprimer les clefs du porte-clefs secret" #: g10/gpg.c:411 msgid "sign a key" msgstr "signer une clef" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "signer une clef localement" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "signer ou éditer une clef" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "générer un certificat de révocation" #: g10/gpg.c:416 msgid "export keys" msgstr "exporter les clefs" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exporter les clefs vers un serveur de clefs" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importer les clefs d'un serveur de clefs" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "chercher les clefs avec un serveur de clefs" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "mettre à jour les clefs depuis un serveur" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importer ou fusionner les clefs" #: g10/gpg.c:429 msgid "print the card status" msgstr "afficher l'état de la carte" #: g10/gpg.c:430 msgid "change data on a card" msgstr "modifier les données d'une carte" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "modifier le code personnel d'une carte" #: g10/gpg.c:440 msgid "update the trust database" msgstr "mettre la base de confiance à jour" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|alg. [fich.]|indiquer les fonctions de hachage" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Options :\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "créer une sortie ASCII avec armure" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NOM|chiffrer pour NOM" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "utiliser cet identité pour signer ou déchiffrer" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|niveau de compression N (0 désactive)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "utiliser le mode texte canonique" #: g10/gpg.c:486 msgid "use as output file" msgstr "utiliser comme fichier de sortie" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "bavard" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "ne rien modifier" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "demander avant d'écraser un fichier" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "utiliser le comportement strict d'OpenPGP" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "générer des messages compatibles avec PGP 2.x" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Consultez la page de manuel pour obtenir une liste complète des commandes\n" "et options)\n" #: g10/gpg.c:576 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 [noms] montrer les clefs\n" " --fingerprint [noms] montrer les empreintes\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Veuillez signaler toutes anomalies à (en anglais)\n" "et tout problème de traduction à .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Utilisation : gpg [options] [fichiers] (-h pour l'aide)" #: g10/gpg.c:801 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, chiffrer ou déchiffrer\n" "L'opération par défaut dépend des données entrées\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algorithmes pris en charge :\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Clef publique : " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Chiffrement : " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hachage : " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compression : " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "utilisation : gpg [options] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "commandes en conflit\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "aucun signe = trouvé dans la définition du groupe « %s »\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "" "Attention : le propriétaire du répertoire personnel « %s »\n" " n'est pas sûr\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "" "Attention : le propriétaire du fichier de configuration « %s »\n" " n'est pas sûr\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "" "Attention : les droits du répertoire personnel « %s »\n" " ne sont pas sûrs\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "" "Attention : les droits du fichier de configuration « %s »\n" " ne sont pas sûrs\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "Attention : le propriétaire du répertoire contenant le répertoire personnel\n" " « %s » n'est pas sûr\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "Attention : le propriétaire du répertoire contenant le fichier de\n" " configuration « %s » n'est pas sûr\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "Attention : les droits du répertoire contenant le répertoire personnel\n" " « %s » ne sont pas sûrs\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "Attention : les droits du répertoire contenant le fichier de configuration\n" " « %s » ne sont pas sûrs\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "élément de configuration « %s » inconnu\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "montrer les photos d'identité en affichant les clefs" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "montrer les URL de politique en affichant les signatures" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "montrer toutes les notations en affichant les signatures" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "utiliser les notations aux normes IETF en affichant les signatures" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" "utiliser les notations fournies par l'utilisateur en affichant les signatures" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "" "montrer les URL des serveurs de clefs favoris en affichant les signatures" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "indiquer la validité de l'identité en affichant les clefs" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "montrer les identités révoquées et expirées en affichant les clefs" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "indiquer les sous-clefs révoquées et expirées en affichant les clefs" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "montrer le nom du porte-clefs en affichant les clefs" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "montrer les dates d'expiration en affichant les signatures" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "Remarque : l'ancien fichier d'options par défaut « %s » a été ignoré\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "Remarque : pas de fichier d'options par défaut « %s »\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "fichier d'options « %s » : %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "lecture des options de « %s »\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "Remarque : %s n'est pas pour une utilisation normale.\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "« %s » n'est pas une date d'expiration de signature valable\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "« %s » n'est pas un jeu de caractères valable\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "impossible d'analyser l'URL du serveur de clefs\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s : %d : les options du serveur de clefs sont incorrectes\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "les options du serveur de clefs sont incorrectes\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s : %d : options d'importation incorrectes\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "options d'importation incorrectes\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s : %d : options d'exportation incorrectes\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "options d'exportation incorrectes\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s : %d : options de liste incorrectes\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "options de liste incorrectes\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "montrer les photos d'identité en vérifiant les signatures" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "montrer les URL de politique en vérifiant les signatures" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "montrer toutes les notations en vérifiant les signatures" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "utiliser les notations aux normes IETF en vérifiant les signatures" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" "utiliser les notations fournies par l'utilisateur en vérifiant les signatures" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "" "montrer les URL des serveurs de clefs favoris en vérifiant les signatures" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "indiquer la validité de l'identité en vérifiant les signatures" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" "montrer les identités révoquées et expirées en vérifiant les signatures" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "ne montrer que l'identité principale en vérifiant les signatures" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "valider les signatures avec les données PKA" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "augmenter la confiance des signatures avec des données PKA valables" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s : %d : options de vérification incorrectes\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "options de vérification incorrectes\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "impossible de configurer le chemin d'exécution à %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s : %d : liste de recherche automatique de clef incorrecte\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "liste de recherche automatique de clef incorrecte\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "Attention : le programme pourrait créer un fichier « core ».\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "Attention : %s remplace %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s n'est pas permis avec %s.\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s n'a aucun sens avec %s.\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "Remarque : %s n'est pas disponible dans cette version\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "ne sera pas exécuté avec une mémoire non sécurisée à cause de %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "une signature détachée ou en texte clair n'est possible qu'en mode --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "signer et chiffrer en même temps n'est possible qu'en mode --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "des fichiers (et pas un tube) doivent être utilisés lorsque --pgp2\n" "est activé.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" "chiffrer un message en mode --pgp2 nécessite l'algorithme de chiffrement " "IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "l'algorithme de chiffrement sélectionné est incorrect\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "la fonction de hachage sélectionnée est incorrecte\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "l'algorithme de compression sélectionné est incorrect\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "la fonction de hachage de certification sélectionnée est incorrecte\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "« completes-needed » doit être supérieur à 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "« marginals-needed » doit être supérieur à 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "« max-cert-depth » doit être compris entre 1 et 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "« default-cert-level » incorrect ; doit être 0, 1, 2 ou 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "« min-cert-level » incorrect ; doit être , 1, 2 ou 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "Remarque : le mode S2K simple (0) est fortement déconseillé\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "mode S2K incorrect ; doit être 0, 1 ou 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "préférences par défaut incorrectes\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "préférences personnelles de chiffrement incorrectes\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "préférences personnelles de hachage incorrectes\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "préférences personnelles de compression incorrectes\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s ne fonctionne pas encore avec %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "impossible d'utiliser l'algorithme de chiffrement « %s » en mode %s.\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "impossible d'utiliser l'algorithme de hachage « %s » en mode %s.\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "impossible d'utiliser l'algorithme de compression « %s » en mode %s.\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "impossible d'initialiser la base de confiance : %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "Attention : les destinataires (-r) indiqués n'utilisent pas\n" " de clef publique pour le chiffrement\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [fichier]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [fichier]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "échec du chiffrement symétrique de « %s » : %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [fichier]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [fichier]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "impossible d'utiliser --symmetric --encrypt avec --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "impossible d'utiliser --symmetric --encrypt en mode %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [fichier]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [fichier]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [fichier]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "impossible d'utiliser --symmetric --sign --encrypt avec --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "impossible d'utiliser --symmetric --sign --encrypt en mode %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [fichier]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [fichier]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [fichier]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key identité" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key identité" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key identité [commandes]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [identité] [porte-clefs]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "échec d'envoi vers le serveur de clefs : %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "échec de réception depuis le serveur de clefs : %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "échec d'exportation de la clef : %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "échec de recherche au sein du serveur de clefs : %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "échec de rafraîchissement par le serveur de clefs : %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "échec de déconstruction d'une armure : %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "échec de construction d'une armure : %s \n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algorithme de hachage « %s » incorrect\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[fichier]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Vous pouvez taper votre message…\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "l'URL de politique de certification donnée est incorrecte\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "l'URL de politique de signature donnée est incorrecte\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "l'URL du serveur de clefs favori qui a été donnée est incorrecte\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "trop d'entrées dans le cache de clefs publiques — désactivé\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[identité introuvable]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "clef %s : clef secrète sans clef publique — ignorée\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "« %s » automatiquement récupéré par %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "La clef incorrecte %s a été rendue valable par\n" "--allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "pas de sous-clef secrète pour la sous-clef publique %s — ignorée\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "" "utilisation de la sous-clef %s à la place de la clef\n" "principale %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "devenir beaucoup plus silencieux" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "prendre les clefs dans ce porte-clefs" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "convertir les conflits de date en avertissements" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|écrire l'état sur ce descripteur" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Utilisation : gpgv [options] [fichiers] (-h pour l'aide)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Syntaxe : gpgv [options] [fichiers]\n" "Vérifier des signatures avec des clefs de confiance connues\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Il est de votre responsabilité d'affecter une valeur ici ; cette valeur\n" "ne sera jamais communiquée à autrui. Elle est nécessaire pour créer le\n" "réseau de confiance (web-of-trust) ; cela n'a rien à voir avec le réseau\n" "des certificats (créé implicitement)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Pour mettre en place le réseau de confiance (web-of-trust), GnuPG doit\n" "savoir en quelles clefs votre confiance est ultime — ce sont généralement\n" "les clefs dont vous possédez la clef secrète. Répondez « oui » pour\n" "indiquer que votre confiance en cette clef est ultime\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Si vous voulez utiliser cette clef sans confiance quand même, répondez\n" "« oui »." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Entrez l'identité de la personne à qui vous voulez envoyer le message." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Sélectionnez l'algorithme à utiliser.\n" "\n" "DSA (connu également sous le nom de DSS) est un algorithme de signature\n" "numérique qui ne sert qu'à signer.\n" "\n" "Elgamal est un algorithme qui ne sert qu'à chiffrer.\n" "\n" "RSA permet de signer et chiffrer.\n" "\n" "La première clef (principale) doit toujours permettre de signer." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "En général, il est déconseillé d'utiliser la même clef pour signer\n" "et chiffrer. Cet algorithme ne devrait servir que dans certains cas.\n" "Consultez d'abord votre expert en sécurité." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Entrez la taille de la clef" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Répondez « oui » ou « non »" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Entrez la valeur demandée comme indiqué dans l'invite de commande.\n" "Une date ISO (AAAA-MM-JJ) peut être indiquée mais le message d'erreur sera\n" "inadéquat — le système essaye alors d'interpréter la valeur donnée comme un\n" "intervalle." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Entrez le nom du détenteur de la clef" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" "veuillez entrer une adresse électronique facultative mais\n" "sérieusement recommandée" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Veuillez entrer un commentaire facultatif" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N pour modifier le nom.\n" "C pour modifier le commentaire.\n" "E pour modifier l'adresse électronique.\n" "O pour continuer à générer la clef.\n" "Q pour arrêter de générer de clef." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Répondez « oui » (ou simplement « o ») pour générer la sous-clef." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Quand vous signez une identité de clef, vous devriez d'abord vérifier si\n" "la clef appartient à la personne identifiée. Il est utile aux autres de\n" "savoir avec quel soin vous l'avez vérifié.\n" "\n" "« 0 » signifie que vous êtes sans opinion.\n" "\n" "« 1 » signifie que vous estimez que la clef appartient à la personne qui\n" " prétend la posséder mais vous n'avez pas pu vérifier du tout la\n" " clef. C'est utile pour signer la clef d'un pseudonyme.\n" "\n" "« 2 » signifie que vous avez partiellement vérifié la clef. Par exemple,\n" " cela pourrait être une vérification de l'empreinte et de l'identité\n" " avec la photo d'identité.\n" "\n" "« 3 » signifie que vous avez complètement vérifié la clef. Par exemple,\n" " cela pourrait être une vérification de l'empreinte avec son " "propriétaire\n" " en personne, une vérification d'identité avec un document difficile à\n" " contrefaire contenant une photo (comme un passeport) et une " "vérification\n" " de son adresse électronique (à l'aide d'un échange de courriers).\n" "\n" "Remarquez que les exemples ci-dessus pour les niveaux 2 et 3 ne sont *que*\n" "des exemples. C'est à vous de décider ce que signifie « partiellement » et\n" "« complètement » quand vous signez les clefs d'autres personnes.\n" "\n" "Si vous ne savez pas quoi répondre, utilisez « 0 »." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Répondez « oui » si vous voulez signer TOUTES les identités" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Répondez « oui » si vous voulez vraiment supprimer cette identité.\n" "Tous les certificats seront alors aussi perdus." #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Répondez « oui » pour supprimer la sous-clef" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "C'est une signature valable dans la clef ; vous n'avez normalement pas\n" "intérêt à supprimer cette signature car elle pourrait être importante pour\n" "établir une connexion de confiance vers la clef ou une autre clef certifiée\n" "par cette clef." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Cette signature ne peut pas être vérifiée parce que vous n'avez pas la\n" "clef correspondante. Vous ne devriez pas la supprimer avant de connaître\n" "la clef qui a été utilisée, car cette clef de signature pourrait établir\n" "une connexion de confiance vers une autre clef déjà certifiée." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Cette signature n'est pas valable. Vous devriez la supprimer de votre\n" "porte-clefs." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Cette signature lie l'identité à la clef. Supprimer une telle signature\n" "est généralement déconseillé. En fait GnuPG pourrait ne plus être capable\n" "d'utiliser cette clef. Donc ne faites cela que si cette autosignature est\n" "incorrecte pour une bonne raison et qu'une autre est disponible." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Modifier les préférences de toutes les identités (ou seulement\n" "celles sélectionnées) vers la liste actuelle de préférences.\n" "La date de chaque autosignature affectée sera avancée d'une seconde.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Veuillez entrer la phrase de passe ; c'est une phrase secrète \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Veuillez répéter la dernière phrase secrète pour vous assurer d'avoir\n" "tapé correctement." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Donnez le nom du fichier auquel la signature se rapporte" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Répondez « oui » s'il faut vraiment réécrire le fichier" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Veuillez entrer le nouveau nom de fichier. Si vous appuyez simplement sur\n" "Entrée, le fichier par défaut (indiqué entre crochets) sera utilisé." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Vous devriez indiquer une raison pour la certification. Suivant le " "contexte,\n" "vous pouvez choisir dans cette liste :\n" " « La clef a été compromise »\n" " Utilisez cette option si vous avez une raison de croire que des\n" " personnes ont pu accéder à votre clef secrète sans autorisation.\n" " « La clef a été remplacée »\n" " Utilisez cette option si vous avez remplacé cette clef par une " "nouvelle.\n" " « La clef n'est plus utilisée »\n" " Utilisez cette option si cette clef n'a plus d'utilité.\n" " « L'identité n'est plus valable »\n" " Utilisez cette option si l'identité ne doit plus être utilisé. Cela " "sert\n" " généralement à indiquer qu'une adresse électronique est obsolète.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Si vous le désirez, vous pouvez entrer un texte qui explique pourquoi vous\n" "avez émis ce certificat de révocation. Essayez de garder ce texte concis.\n" "Une ligne vide indique la fin du texte.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Pas d'aide disponible" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Pas d'aide disponible pour « %s »" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "importer des signatures marquées comme locales seulement" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "réparer les données endommagées du serveur pks pendant l'importation" #: g10/import.c:104 #, fuzzy #| msgid "do not update the trustdb after import" msgid "do not clear the ownertrust values during import" msgstr "ne pas mettre à jour la base de confiance après l'importation" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "ne pas mettre à jour la base de confiance après l'importation" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "créer une clef publique en important une clef secrète" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "n'accepter que les mises à jour des clefs existantes" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "nettoyer les parties inutilisables de la clef après l'importation" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "supprimer autant que possible de la clef après l'importation" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "un bloc de type %d a été ignoré\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu clefs traitées jusqu'à présent\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr " Quantité totale traitée : %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " nouvelles clefs ignorées : %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sans identité : %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importées : %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " non modifiées : %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nouvelles identités : %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nouvelles sous-clefs : %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nouvelles signatures : %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr "nouvelles révocations de clef : %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " clefs secrètes lues : %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " clefs secrètes importées : %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " clefs secrètes non modifiées : %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " non importées : %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " signatures nettoyées : %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " identités nettoyées : %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "Attention : la clef %s contient des préférences pour des\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algorithmes indisponibles pour ces identités :\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " « %s » : préférence pour l'algorithme de chiffrement %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " « %s » : préférence pour l'algorithme de hachage %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " « %s » : préférence pour l'algorithme de compression %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "vous devriez mettre à jour vos préférences et redistribuer cette\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "clef pour éviter d'éventuels problèmes d'algorithmes non appropriés\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" "vous pouvez mettre à jour vos préférences avec :\n" "gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "clef %s : pas d'identité\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "clef %s : %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "rejetée par le filtre d’importation" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "clef %s : corruption de sous-clef PKS réparée\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "clef %s : identité « %s » non autosignée acceptée\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "clef %s : pas d'identité valable\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "cela pourrait provenir d'une autosignature manquante\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "clef %s : clef publique introuvable : %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "clef %s : nouvelle clef — ignorée\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "aucun porte-clefs accessible en écriture n'a été trouvé : %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "écriture de « %s »\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "erreur d'écriture du porte-clefs « %s » : %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "clef %s : clef publique « %s » importée\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "clef %s : ne correspond pas à notre copie\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "clef %s : impossible de trouver le bloc de clef d'origine : %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "clef %s : impossible de lire le bloc de clef d'origine : %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clef %s : « %s » 1 nouvelle identité\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "clef %s : « %s » %d nouvelles identités\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "clef %s : « %s » 1 nouvelle signature\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "clef %s : « %s » %d nouvelles signatures\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "clef %s : « %s » 1 nouvelle sous-clef\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "clef %s : « %s » %d nouvelles sous-clefs\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "clef %s : « %s » %d signature nettoyée\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "clef %s : « %s » %d signatures nettoyées\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "clef %s : « %s » %d identité nettoyée\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "clef %s : « %s » %d identités nettoyées\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "clef %s : « %s » n'est pas modifiée\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "clef secrète %s : %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "impossible d'importer des clefs secrètes\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "clef %s : clef secrète avec chiffrement %d incorrect — ignorée\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "pas de porte-clefs par défaut : %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "clef %s : clef secrète importée\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "clef %s : déjà dans le porte-clefs secret\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "clef %s : clef secrète introuvable : %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "clef %s : pas de clef publique — impossible d'appliquer le certificat\n" " de révocation\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "clef %s : certificat de révocation incorrect : %s — rejeté\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "clef %s : « %s » certificat de révocation importé\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "clef %s : pas d'identité pour la signature\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "clef %s : algorithme à clef publique non géré avec l'identité « %s »\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "clef %s : autosignature de l'identité « %s » incorrecte\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "clef %s : algorithme à clef publique non pris en charge\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "clef %s : signature directe de clef incorrecte\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "clef %s : pas de sous-clef pour relier la clef\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "clef %s : lien à la sous-clef incorrect\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "clef %s : suppression de lien multiple aux sous-clefs\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "clef %s : pas de sous-clef pour révoquer la clef\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "clef %s : révocation de sous-clef incorrecte\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "clef %s : suppression de la révocation de sous-clefs multiples\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "clef %s : identité « %s » ignorée\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "clef %s : sous-clef ignorée\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "clef %s : signature non exportable (classe 0x%02X) — ignorée\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "clef %s : certificat de révocation au mauvais endroit — ignoré\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "clef %s : certificat de révocation incorrect : %s — ignoré\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "clef %s : signature de sous-clef au mauvais endroit — ignorée\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "clef %s : classe de signature inattendue (0x%02X) — ignorée\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "clef %s : identités en double détectées — fusionnées\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "Attention : la clef %s est peut-être révoquée :\n" " récupération de la clef de révocation %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "Attention : la clef %s est peut-être révoquée :\n" " la clef de révocation %s est absente.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "clef %s : ajout du certificat de révocation « %s »\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "clef %s : ajout de la signature directe de clef\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" "Remarque : le numéro de série d'une clef ne correspond pas à celui de la " "carte\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "Remarque : la clef principale est en ligne et stockée sur la carte\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "Remarque : la clef secondaire est en ligne et stockée sur la carte\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "erreur de création du porte-clefs « %s » : %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "le porte-clefs « %s » a été créé\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "ressource de bloc de clef « %s » : %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "échec de reconstruction du cache de porte-clefs : %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[révocation]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[autosignature]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 mauvaise signature\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d mauvaises signatures\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 signature non vérifiée à cause d'une clef manquante\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signatures non vérifiées à cause de clefs manquantes\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 signature non vérifiée à cause d'une erreur\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, 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:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 identité sans autosignature valable détecté\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d identités sans autosignature valable détecté\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Décidez maintenant de la confiance que vous portez en cet utilisateur pour\n" "vérifier les clefs des autres utilisateurs (en regardant les passeports, en\n" "vérifiant les empreintes depuis diverses sources, etc.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = je fais très légèrement confiance\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = je fais entièrement confiance\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Veuillez entrer la profondeur de cette signature de confiance.\n" "Une profondeur supérieure à 1 permet à la clef que vous signez de faire\n" "des signatures de confiance de votre part.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Veuillez entrer un domaine pour restreindre cette signature, ou appuyer\n" "sur la touche entrée pour aucun domaine.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "L'identité « %s » est révoquée." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Voulez-vous vraiment toujours la signer ? (o/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Impossible de signer.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "L'identité « %s » est expiré." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "L'identité « %s » n'est pas autosignée." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "L'identité « %s » peut être signé. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "La signer vraiment ? (o/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "L'autosignature de « %s »\n" "est une signature de type PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Voulez-vous la modifier en autosignature OpenPGP ? (o/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Votre signature actuelle de « %s »\n" "a expiré.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Voulez-vous créer une nouvelle signature pour remplacer celle qui a\n" "expiré ? (o/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Votre signature actuelle de « %s »\n" "est locale.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Voulez-vous la rendre complètement exportable ? (o/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "« %s » a déjà été signée localement par la clef %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "« %s » a déjà été signée par la clef %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Voulez-vous vraiment la signer encore ? (o/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Rien à signer avec la clef %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Cette clef a expiré." #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Cette clef va expirer le %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Voulez-vous que votre signature expire en même temps ? (O/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Impossible de faire une signature OpenPGP d'une clef PGP 2.x en mode --" "pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Cela rendrait la clef inutilisable par PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Avec quel soin avez-vous vérifié que la clef à signer appartient bien à\n" "la personne sus-nommée ? Si vous ne savez quoi répondre, entrez « 0 ».\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Je ne répondrai pas.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Je n'ai pas vérifié du tout.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) J'ai partiellement vérifié.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) J'ai complètement vérifié.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Quel est votre choix ? (Entrez « ? » pour plus de renseignements) : " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Voulez-vous vraiment signer cette clef avec votre\n" "clef « %s » (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Ce sera une autosignature.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "Attention : la signature ne sera pas marquée comme non exportable.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "Attention : La signature ne sera pas marquée comme non révocable.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "La signature sera marquée comme non exportable.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "La signature sera marquée comme non révocable.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Je n'ai pas du tout vérifié cette clef.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "J'ai partiellement vérifié cette clef.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "J'ai complètement vérifié cette clef.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Voulez-vous vraiment signer ? (o/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "échec de la signature : %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "La clef ne possède que des items partiels ou stockés sur carte\n" "— pas de phrase secrète à modifier.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Cette clef n'est pas protégée.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Les parties secrètes de la clef principale ne sont pas disponibles.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "" "Les parties secrètes de la clef principale sont stockées sur la carte.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "La clef est protégée.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossible d'éditer cette clef : %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Entrez la nouvelle phrase secrète pour cette clef secrète.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "" "la phrase secrète n'a pas été correctement répétée ; veuillez réessayer." #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Vous ne voulez pas de phrase secrète — c'est sans doute une *mauvaise* " "idée.\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Voulez-vous vraiment faire cela ? (o/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "déplacement d'une signature de clef au bon endroit\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "enregistrer et quitter" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "afficher l'empreinte de la clef" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "afficher la clef et les identités" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "sélectionner l'identité N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "sélectionner la sous-clef N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "vérifier les signatures" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "signer les identités sélectionnées [* voir ci-dessous les commandes " "similaires]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "signer les identités sélectionnées localement" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "signer les identités sélectionnées avec une signature de confiance" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "signer les identités sélectionnées avec une signature non révocable" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "ajouter une identité" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "ajouter une photo d'identité" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "supprimer les identités sélectionnées" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "ajouter une sous-clef" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "ajouter une clef à une carte à puce" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "déplacer une clef vers une carte à puce" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "déplacer une clef de sauvegarde vers une carte à puce" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "supprimer les sous-clefs sélectionnées" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "ajouter une clef de révocation" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "supprimer les signatures des identités sélectionnées" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "" "modifier la date d'expiration de la clef ou des sous-clefs sélectionnées" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "marquer l'identité sélectionnée comme principale" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "" "passer de la liste des clefs secrètes à celle des clefs privées ou vice versa" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "afficher les préférences (expert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "afficher les préférences (bavard)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "définir la liste des préférences pour les identités sélectionnées" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "définir le serveur de clefs favori pour les identités sélectionnées" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "définir une notation pour les identités sélectionnées" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "modifier la phrase secrète" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "modifier la confiance du propriétaire" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "révoquer les signatures des identités sélectionnées" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "révoquer les identités sélectionnées" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "révoquer la clef ou des sous-clefs sélectionnées" #: g10/keyedit.c:1439 msgid "enable key" msgstr "activer la clef" #: g10/keyedit.c:1440 msgid "disable key" msgstr "désactiver la clef" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "montrer les photos d'identité sélectionnées" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "compacter les identités inutilisables et supprimer les\n" " signatures inutilisables de la clef" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" "compacter les identités inutilisables et supprimer toutes\n" " les signatures de la clef" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "erreur de lecture du bloc de clef secrète « %s » : %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "La clef secrète est disponible.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "La clef secrète est nécessaire pour faire cela.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Veuillez d'abord utiliser la commande « toggle ».\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* La commande « sign » peut être précédée du caractère « l » pour\n" " les signatures locales (lsign), « t » pour les signatures de\n" " confiance (tsign), « nr » pour les signatures non révocables\n" " (nrsign), ou toute combinaison possible (ltsign, tnrsign, etc.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "La clef est révoquée." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Voulez-vous vraiment signer toutes les identités ? (o/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Conseil : sélectionner les identités à signer\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Type de signature « %s » inconnu\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Cette commande n'est pas permise en mode %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Vous devez sélectionner au moins une identité.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Vous ne pouvez pas supprimer la dernière identité.\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Faut-il vraiment supprimer toutes les identités sélectionnées ? (o/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Faut-il vraiment supprimer cette identité ? (o/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Faut-il vraiment déplacer la clef principale ? (o/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Vous devez sélectionner exactement une clef.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "La commande attend un nom de fichier comme argument\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Impossible d'ouvrir « %s » : %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Erreur de lecture de la clef de sauvegarde sur « %s » : %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Vous devez sélectionner au moins une clef.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Voulez-vous vraiment supprimer les clefs sélectionnées ? (o/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Voulez-vous vraiment supprimer cette clef ? (o/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "" "Voulez-vous vraiment révoquer toutes les identités sélectionnées ? (o/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Voulez-vous vraiment révoquer cette identité ? (o/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Voulez-vous vraiment révoquer toute la clef ? (o/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Voulez-vous vraiment révoquer les sous-clefs sélectionnées ? (o/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Voulez-vous vraiment révoquer cette sous-clef ? (o/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "La confiance du propriétaire pourrait ne pas être définie à partir de\n" "la base de confiance d'un tiers\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Définir la liste de préférences en :\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Faut-il vraiment mettre à jour les préférences pour les\n" "identités sélectionnées ? (o/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Faut-il vraiment mettre à jour les préférences ? (o/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Faut-il enregistrer les modifications ? (o/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Faut-il quitter sans enregistrer ? (o/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "échec de la mise à jour : %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "échec de la mise à jour de la clef secrète : %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "La clef n'a pas été modifiée donc la mise à jour est inutile.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Hachage : " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Fonctionnalités : " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Serveur de clefs sans modification" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Serveur de clefs favori : " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notations : " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Il n'y a pas de préférences dans une identité de type PGP 2.x.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Cette clef a été révoquée le %s par la clef %s %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Cette clef peut être révoquée par la clef %s %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(sensible)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "créé : %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "révoquée : %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "expirée : %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "expire : %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "utilisation : %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "confiance : %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "validité : %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Cette clef a été désactivée" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "nº de carte : " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Veuillez remarquer que la validité affichée pour la clef n'est pas\n" "forcément correcte avant d'avoir relancé le programme.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "révoquée" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "expirée" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "Attention : aucune identité n'a été définie comme principale. Cette " "commande\n" " risque de rendre une autre identité principale par défaut.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Vous ne pouvez pas modifier la date d'expiration d'une clef v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "Attention : c'est une clef de type PGP 2. Ajouter une photo d'identité\n" " peut forcer certaines versions de PGP à rejeter cette clef.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Voulez-vous vraiment toujours l'ajouter ? (o/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" "Vous ne devriez pas ajouter de photo d'identité à une clef de type PGP 2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Faut-il supprimer cette bonne signature ? (o/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Faut-il supprimer cette signature incorrecte ? (o/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Faut-il supprimer cette signature inconnue ? (o/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Faut-il vraiment supprimer cette autosignature ? (o/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d signature supprimée.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d signatures supprimées\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Rien n'a été supprimé.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "incorrecte" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Identité « %s » compactée : %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Identité « %s » : %d signature supprimée\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Identité « %s » : %d signatures supprimées\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Identité « %s » : déjà minimisée\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "Identité « %s » : déjà nettoyée\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "Attention : c'est une clef de type PGP 2.x. Ajouter un révocateur désigné\n" " peut forcer certaines versions de PGP à rejeter cette clef.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" "Vous ne pouvez pas ajouter de révocateur désigné à une clef de type PGP 2." "x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Entrez l'identité du révocateur désigné : " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" "impossible d'utiliser une clef de type PGP 2.x comme révocateur désigné.\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" "vous ne pouvez pas utiliser une clef comme son propre révocateur désigné\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "cette clef à déjà été désignée comme un révocateur\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "Attention : l'établissement d'une clef comme révocateur désigné\n" " est irréversible.\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Voulez-vous vraiment rendre cette clef comme révocateur désigné ? (o/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Veuillez supprimer les sélections des clefs secrètes.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Veuillez sélectionner au plus une sous-clef.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Modification de la date d'expiration d'une sous-clef.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Modification de la date d'expiration de la clef principale.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Vous ne pouvez pas modifier la date d'expiration d'une clef v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Pas de signature correspondante dans le porte-clefs secret\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "la sous-clef de signature %s a déjà une certification croisée\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" "la sous-clef %s ne signe pas et n'a donc pas besoin de certification " "croisée\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Veuillez sélectionner exactement une identité.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "l'autosignature v3 de l'identité « %s » a été ignorée\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Entrez l'URL de votre serveur de clefs favori : " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Voulez-vous vraiment le remplacer ? (o/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Voulez-vous vraiment le supprimer ? (o/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Entrez la notation : " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Faut-il continuer ? (o/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Pas d'identité d'indice %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Pas d'identité avec le hachage %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Pas de sous-clef d'indice %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "identité : « %s »\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "signée par votre clef %s le %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (non exportable)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Cette signature a expiré le %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Voulez-vous vraiment toujours la révoquer ? (o/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "" "Faut-il créer un certificat de révocation pour cette signature ? (o/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Non signée par vous.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Vous avez signé ces identités sur la clef %s :\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (non révocable)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "révoquée par votre clef %s le %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Vous êtes sur le point de révoquer ces signatures :\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Faut-il vraiment créer les certificats de révocation ? (o/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "pas de clef secrète\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "l'identité « %s »\" est déjà révoquée.\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "Attention : une signature d'identité date de %d secondes dans le futur\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "La clef %s est déjà révoqué.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "La sous-clef %s est déjà révoquée.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "Affichage de la photo d'identité %s de taille %ld pour la clef\n" "%s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "préférence « %s » en double\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "trop de préférences de chiffrement\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "trop de préférences de hachage\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "trop de préférences de compression\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "élément « %s » incorrect dans la chaîne de préférences\n" # g10/keygen.c:123 ??? #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "écriture de la signature directe\n" # g10/keygen.c:123 ??? #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "écriture de l'autosignature\n" # g10/keygen.c:161 ??? #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "écriture de la signature de lien à la clef\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "taille incorrecte ; utilisation de %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "taille arrondie à %u bits\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Signer" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certifier" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Chiffrer" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Authentifier" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsCcAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Actions possibles pour une clef %s : " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Actions actuellement permises : " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Inverser la capacité de signature\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Inverser la capacité de chiffrement\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Inverser la capacité d'authentification\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Terminé\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Sélectionnez le type de clef désiré :\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA et RSA (par défaut)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA et Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (signature seule)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (signature seule)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (chiffrement seul)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (chiffrement seul)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (indiquez vous-même les capacités)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (indiquez vous-même les capacités)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "les clefs %s peuvent faire une taille comprise entre %u et %u bits.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Quelle taille de clef désirez-vous pour la sous-clef ? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Quelle taille de clef désirez-vous ? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "La taille demandée est %u bits\n" #: g10/keygen.c:1722 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 "" "Veuillez indiquer le temps pendant lequel cette clef devrait être valable.\n" " 0 = la clef n'expire pas\n" " = la clef expire dans n jours\n" " w = la clef expire dans n semaines\n" " m = la clef expire dans n mois\n" " y = la clef expire dans n ans\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Veuillez indiquer le temps pendant lequel cette signature devrait\n" "être valable.\n" " 0 = la signature n'expire pas\n" " = la signature expire dans n jours\n" " w = la signature expire dans n semaines\n" " m = la signature expire dans n mois\n" " y = la signature expire dans n ans\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Pendant combien de temps la clef est-elle valable ? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Pendant combien de temps la signature est-elle valable ? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "valeur incorrecte\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "La clef n'expire pas du tout\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "La signature n'expire pas du tout\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "La clef expire le %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "La signature expire le %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Le système ne peut pas afficher les dates au-delà de 2038.\n" "Cependant, la gestion des dates sera correcte jusqu'en 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Est-ce correct ? (o/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Une identité est nécessaire à la clef ; le programme la construit à partir\n" "du nom réel, d'un commentaire et d'une adresse électronique de cette " "façon :\n" " « Heinrich Heine (le poète)  »\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Nom réel : " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Caractère incorrect dans le nom\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Le nom ne doit pas commencer par un chiffre\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Le nom doit contenir au moins cinq caractères\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Adresse électronique : " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Ce n'est pas une adresse électronique valable\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Commentaire : " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Caractère incorrect dans le commentaire\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Vous utilisez le jeu de caractères « %s ».\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Vous avez sélectionné cette identité :\n" " « %s »\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Ne mettez pas d'adresse électronique dans le nom réel ou dans le " "commentaire\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcAaOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "" "Faut-il modifier le (N)om, le (C)ommentaire, l'(A)dresse électronique\n" "ou (Q)uitter ? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "Faut-il modifier le (N)om, le (C)ommentaire, l'(A)dresse électronique\n" "ou (O)ui/(Q)uitter ? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Veuillez d'abord corriger l'erreur\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Une phrase secrète est nécessaire pour protéger votre clef secrète.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 phrase secrète — c'est sans doute une *mauvaise*\n" "idée. C'est possible quand même. Vous pouvez modifier la phrase secrète\n" "à tout moment en utilisant ce programme avec l'option « --edit-key ».\n" "\n" #: g10/keygen.c:2034 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 "" "De nombreux octets aléatoires doivent être générés. 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'obtenir suffisamment d'entropie.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "La génération de clef a été annulée.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "écriture de la clef publique dans « %s »\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "écriture de la clef secrète partielle dans « %s »\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "écriture de la clef secrète dans « %s »\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "aucun porte-clefs public accessible en écriture n'a été trouvé : %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "aucun porte-clefs secret accessible en écriture n'a été trouvé : %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "erreur d'écriture du porte-clefs public « %s » : %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "erreur d'écriture du porte-clefs secret « %s » : %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "les clefs publique et secrète ont été créées et signées.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Remarquez que cette clef ne peut pas être utilisée pour chiffrer. Vous " "pouvez\n" "utiliser la commande « --edit-key » pour générer une sous-clef à cette fin.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Échec de génération de la clef : %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "la clef a été créée %lu seconde dans le futur (faille temporelle ou\n" "problème d'horloge)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "la clef a été créée %lu secondes dans le futur (faille temporelle ou\n" "problème d'horloge)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" "Remarque : la création de sous-clefs pour des clefs v3 n'est pas compatible\n" " avec OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Faut-il vraiment la créer ? (o/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "impossible de stocker la clef sur la carte : %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "impossible de créer le fichier de sauvegarde « %s » : %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "Remarque : sauvegarde de la clef de la carte dans « %s »\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "jamais " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Politique de signature critique : " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Politique de signature : " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Serveur de clefs critique favori : " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Notation de signature critique : " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Notation de signature : " #: g10/keylist.c:471 msgid "Keyring" msgstr "Porte-clefs" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Empreinte de clef principale :" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Empreinte de la sous-clef :" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "Empreinte clef princip. :" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Empreinte de sous-clef :" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Empreinte de la clef =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Nº de série de carte =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "impossible de renommer « %s » en « %s » : %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "" "Attention : deux fichiers existent avec des informations confidentielles.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s est le fichier d'origine\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s est le nouveau\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Veuillez corriger cet éventuel problème de sécurité\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "mise en cache du porte-clefs « %s »\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu clefs mises en cache pour l'instant (%lu signatures)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu clefs mises en cache (%lu signatures)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s : porte-clefs créé\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "inclure les clefs révoquées dans les résultats de recherche" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "inclure les sous-clefs en cherchant par identifiant de clef" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "utiliser des fichiers temporaires pour passer les données aux assistants de\n" "serveurs de clefs" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "ne pas supprimer les fichiers temporaires après les avoir utilisés" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "récupérer les clefs automatiquement en vérifiant les signatures" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "respecter l'URL de serveur de clefs favori indiqué dans la clef" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" "respecter l'enregistrement PKA positionné sur une clef en récupérant les " "clefs" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "Attention : l'option de serveur de clefs « %s » n'est pas\n" " utilisée sur cette plateforme\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "désactivée" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Entrez le ou les nombres, (S)uivant, ou (Q)uitter > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "protocole de serveur de clefs incorrect (nous %d!=gestionnaire %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "clef « %s » introuvable sur le serveur de clefs\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "clef introuvable sur le serveur de clefs\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "demande de la clef %s sur le serveur %s %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "requête de la clef %s sur %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "recherche de noms sur le serveur %s %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "recherche de noms sur %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "envoi de la clef %s au serveur %s %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "envoi de la clef %s à %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "recherche de « %s » sur le serveur %s %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "recherche de « %s » sur %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "pas d'action pour le serveur de clefs.\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" "Attention : le gestionnaire de serveurs de clefs provient d'une\n" " version différente de GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "le serveurs de clefs n'a pas envoyé sa VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "erreur de communication avec le serveur de clefs : %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "pas de serveur de clefs connu (utilisez l'option --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" "les appels externes à un serveur de clef ne sont pas pris en charge dans\n" "cette compilation\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "pas de gestionnaire pour le type de serveurs de clefs « %s »\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" "l'action « %s » n'est pas prise en charge avec le type de serveurs\n" "de clefs « %s »\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s ne prend pas en charge pas le gestionnaire de version %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "le délai d'attente du serveur de clefs a expiré\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "erreur interne du serveur de clefs\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "« %s » n'est pas un identifiant de clef : ignoré\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "" "Attention : impossible de rafraîchir la clef %s\n" " avec %s : %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "rafraîchissement d'une clef à partir de %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "rafraîchissement de %d clefs à partir de %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "Attention : impossible de récupérer l'URI %s : %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "Attention : impossible d'analyser l'URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "taille étonnante pour une clef de session chiffrée (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "clef de session chiffrée %s\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "phrase secrète générée avec l'algorithme de hachage %d inconnu\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "la clef publique est %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "" "données chiffrées par clef publique : bonne clef de chiffrement (DEK)\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "" "chiffré avec une clef %2$s de %1$u bits, identifiant %3$s, créée le %4$s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " « %s »\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "chiffré avec une clef %s, identifiant %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "échec du déchiffrement par clef publique : %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "chiffré avec %lu phrases secrètes\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "chiffré avec 1 phrase secrète\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "les données sont supposées chiffrées avec %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "L'algorithme IDEA n'est pas disponible, essai avec %s\n" "qui fonctionnera peut-être avec un peu de chance\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "le déchiffrement a réussi\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "Attention : l'intégrité du message n'était pas protégée\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "Attention : le message chiffré a été manipulé.\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "échec du déchiffrement : %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "Remarque : l'expéditeur a demandé « à votre seule attention »\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "nom de fichier original : « %.*s »\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "Attention : plusieurs textes en clair ont été vus\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "révocation autonome — utilisez « gpg --import » pour l'appliquer\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "aucune signature trouvée\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "vérification de signature supprimée\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "impossible de traiter ces données ambiguës de signature\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Signature faite le %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " avec la clef %s %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Signature faite le %s avec la clef %s d'identifiant %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Clef disponible sur : " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "MAUVAISE signature de « %s »" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Signature expirée de « %s »" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Bonne signature de « %s »" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[doute]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " alias « %s »" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "La signature a expiré le %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "La signature expire le %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "signature %s, algorithme de hachage %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binaire" #: g10/mainproc.c:1947 msgid "textmode" msgstr "mode texte" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "inconnu" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossible de vérifier la signature : %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "la signature n'est pas détachée\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "Attention : plusieurs signatures ont été détectées.\n" " Seule la première sera vérifiée.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "signature autonome de classe 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "signature d'un ancien type (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "paquet racine incorrect détecté dans proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossible d'empêcher la génération de fichiers « core » : %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "échec du fstat de « %s » dans %s : %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "échec de fstat(%d) dans %s : %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "" "Attention : utilisation de l'algorithme expérimental à clef publique %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "Attention : Les clefs de signature et chiffrement Elgamal sont " "déconseillées\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "" "Attention : utilisation de l'algorithme expérimental de chiffrement %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "Attention : utilisation de l'algorithme expérimental de hachage %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "Attention : l'algorithme de hachage %s est déconseillé\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "veuillez consulter %s pour plus de renseignements\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "Remarque : cette fonctionnalité n'est pas disponible dans %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s : %d : option « %s » déconseillée\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "Attention : « %s » est une option déconseillée\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "veuillez plutôt utiliser « %s%s »\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "Attention : « %s » est une commande déconseillée — ne l'utilisez pas\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Non compressé" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "non compressé|non|sans" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "ce message ne sera pas utilisable par %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "option « %s » ambiguë\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "option « %s » inconnue\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Type de signature « %s » inconnu\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Le fichier « %s » existe. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Réécrire par-dessus ? (o/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s : suffixe inconnu\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Entrez le nouveau nom de fichier" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "écriture vers la sortie standard\n" #: g10/openfile.c:357 #, 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:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "nouveau fichier de configuration « %s » créé\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "Attention : les options de « %s » ne sont pas encore actives cette fois\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "répertoire « %s » créé\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossible de gérer l'algorithme à clef publique %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "Attention : la clef de session chiffrée de manière symétrique risque\n" " de ne pas être sécurisée\n" #: g10/parse-packet.c:1227 #, 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:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent n'est pas disponible dans cette session\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "la variable d'environnement GPG_AGENT_INFO est mal définie\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "le protocole gpg-agent version %d n'est pas pris en charge\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "impossible de se connecter à « %s » : %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problème avec l'agent — arrêt d'utilisation de l'agent\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (identifiant de clef principale %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Une phrase secrète est nécessaire pour déverrouiller la clef secrète de\n" "l'utilisateur :\n" "« %2$.*1$s »\n" "clef %4$s de %3$u bits, identifiant %5$s, créée le %6$s%7$s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Répétez la phrase secrète\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Entrez la phrase secrète\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "annulé par l'utilisateur\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "impossible de demander la phrase secrète en mode automatique\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Entrez la phrase secrète : " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Une phrase secrète est nécessaire pour déverrouiller la clef secrète de\n" "l'utilisateur : « %s »\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "clef %2$s de %1$u bits, identifiant %3$s, créée le %4$s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (sous-clef de la clef principale d'identifiant %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Répétez la phrase secrète : " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Choisissez une image pour votre photo d'identité. L'image doit être\n" "un fichier JPEG. Rappelez-vous que cette image est stockée dans la\n" "clef publique. Si l'image est très grosse, la clef le sera aussi.\n" "Une taille de l'ordre de 240x288 est conseillée.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Entrez le nom du fichier JPEG pour la photo d'identité : " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "impossible d'ouvrir le fichier JPEG « %s » : %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Ce JPEG est vraiment très grand (%d octets).\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Voulez-vous vraiment l'utiliser ? (o/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "« %s » n'est pas un fichier JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Cette photo est-elle correcte (o/N/q) ? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "aucun afficheur de photos n'a été choisi\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "impossible d'afficher la photo d'identité.\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Aucune raison indiquée" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "La clef a été remplacée" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "La clef a été compromise" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "La clef n'est plus utilisée" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "L'identité n'est plus valable" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "cause de révocation : " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "commentaire de révocation : " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "rRmMqQiI" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Pas de valeur de confiance définie pour :\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " alias « %s »\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Quelle confiance portez-vous au fait que cette\n" "clef appartienne bien à l'utilisateur nommé ?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = je ne sais pas ou n'ai pas d'avis\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = je ne fais PAS confiance\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = j'attribue une confiance ultime\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = retour au menu principal\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " i = ignorer cette clef\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = quitter\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Le niveau de confiance minimal pour cette clef est : %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Quelle est votre décision ? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "" "Voulez-vous vraiment attribuer une confiance ultime à cette clef ? (o/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificats conduisant vers une clef de confiance ultime :\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s : aucune assurance que la clef appartienne vraiment à l'utilisateur " "nommé.\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s : faible assurance que la clef appartienne vraiment à l'utilisateur " "nommé.\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Cette clef appartient sans doute à l'utilisateur nommé\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Cette clef nous appartient\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "La clef n'appartient PAS forcément à la personne nommée\n" "dans l'identité. Si vous savez *vraiment* ce que vous\n" "faites, vous pouvez répondre oui à la prochaine question.\n" "\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Faut-il quand même utiliser cette clef ? (o/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "Attention : utilisation d'une clef sans confiance.\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "Attention : cette clef est peut-être révoquée (clef de révocation absente)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "Attention : cette clef a été révoquée par son révocateur désigné.\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "Attention : cette clef à été révoquée par son propriétaire.\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr "" " Cela pourrait signifier que la signature est contrefaite.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "Attention : cette sous-clef à été révoquée par son propriétaire.\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Remarque : cette clef a été désactivée.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Remarque : l'adresse vérifiée du signataire est « %s »\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" "Remarque : l'adresse du signataire « %s » ne correspond pas à l'entrée DNS\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "confiance ajustée à TOTALE car les renseignements PKA sont conformes\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "confiance ajustée à JAMAIS à cause de mauvais renseignements PKA\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Remarque : cette clef a expiré.\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "Attention : cette clef n'est pas certifiée avec une signature de confiance.\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Rien n'indique que la signature appartient à son propriétaire.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "Attention : nous n'avons PAS confiance en cette clef.\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " La signature est sans doute CONTREFAITE.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "Attention : cette clef n'a pas suffisamment de signatures de confiance.\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Aucune certitude que la signature appartienne à son " "propriétaire.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s : ignoré : %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s : ignoré : clef publique déjà présente\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Vous n'avez pas indiqué d'identité (vous pouvez utiliser « -r »).\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Destinataires actuels :\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Entrez l'identité, en terminant par une ligne vide : " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Cette identité n'existe pas.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" "ignoré : la clef publique est déjà définie en destinataire par défaut\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "La clef publique est désactivée.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "ignoré : clef publique déjà activée\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "destinataire par défaut « %s » inconnu\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s : ignoré : la clef publique est désactivée\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "pas de destinataire valable\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "les données ne sont pas enregistrées ; utilisez l'option « --output » pour\n" "les enregistrer\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "erreur pendant la création de « %s » : %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Signature détachée.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Entrez le nom du fichier de données : " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "lecture de l'entrée standard…\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "pas de données signées\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossible d'ouvrir les données signées « %s »\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "destinataire anonyme ; essai avec clef secrète %s…\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "d'accord, nous sommes le destinataire anonyme.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "" "l'ancien encodage de la clef de chiffrement (DEK) n'est pas pris en charge\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "l'algorithme de chiffrement %d%s est inconnu ou désactivé\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" "Attention : l'algorithme de chiffrement %s est introuvable\n" " dans les préférences du destinataire\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "Remarque : la clef secrète %s a expiré le %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "Remarque : la clef a été révoquée" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "échec de build_packet : %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "la clef %s n'a pas d'identité\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "À révoquer par :\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(c'est une clef de révocation sensible)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "" "Faut-il créer un certificat de révocation désigné pour cette clef ? (o/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "sortie forcée avec armure ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "échec de make_keysig_packet : %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Certificat de révocation créé.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "aucune clef de révocation trouvée pour « %s »\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "clef secrète « %s » introuvable : %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "pas de clef publique correspondante : %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "la clef publique ne correspond pas à la clef secrète.\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Faut-il créer un certificat de révocation pour cette clef ? (o/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "algorithme de protection inconnu\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "Remarque : cette clef n'est pas protégée.\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Certificat de révocation créé.\n" "\n" "Veuillez le déplacer sur un support que vous pouvez cacher ; toute personne\n" "accédant à ce certificat peut l'utiliser pour rendre votre clef " "inutilisable.\n" "Imprimer ce certificat et le stocker ailleurs est une bonne idée, au cas où " "le\n" "support devienne illisible. Attention quand même : le système d'impression\n" "utilisé pourrait stocker ces données et les rendre accessibles à d'autres.\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "choisissez la cause de la révocation :\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Annuler" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Vous devriez sûrement sélectionner %d ici)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" "Entrez une description facultative, en terminant par une ligne vide :\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Cause de révocation : %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Aucune description donnée)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Est-ce d'accord ? (o/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "des parties de la clef secrète ne sont pas disponibles\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "l'algorithme de protection %d%s n'est pas pris en charge\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "le hachage de protection %d n'est pas pris en charge\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Phrase secrète incorrecte ; veuillez réessayer" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s…\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "Attention : clef faible détectée — modifiez encore la phrase secrète.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "génération de la somme de contrôle de 16 bits (obsolète) pour protéger\n" "la clef secrète\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "clef faible générée — nouvel essai\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "impossible d'éviter une clef faible pour le chiffrement symétrique :\n" "%d essais ont eu lieu.\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA nécessite que la taille du hachage soit un multiple de 8 bits\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "la clef DSA %s utilise un hachage non sûr (%u bits)\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "la clef DSA %s nécessite un hachage d'au moins %u bits\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "Attention : conflit de hachage de signature dans le message\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" "Attention : la sous-clef de signature %s n'a pas de certificat croisé\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "Attention : la sous-clef de signature %s a un certificat croisé incorrect\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "la clef publique %s est plus récente de %lu seconde que la signature\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "" "la clef publique %s est plus récente de %lu secondes que la signature\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "la clef %s a été créée %lu seconde dans le futur\n" "(faille temporelle ou problème d'horloge)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "la clef %s a été créée %lu secondes dans le futur\n" "(faille temporelle ou problème d'horloge)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "Remarque : la clef de signature %s a expiré le %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "signature %s, algorithme de hachage %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "la signature de la clef %s est supposée être fausse car un bit\n" "critique est inconnu\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" "clef %s : pas de sous-clef pour la signature de révocation de sous-clef\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "clef %s : pas de sous-clef pour la signature de lien à la sous-clef\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "Attention : impossible de faire une expansion à base de %% de\n" " la notation (chaîne trop grande).\n" " Utilisation de la version non expansée.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "Attention : impossible de faire une expansion à base de %% de\n" " l'URL de politique (chaîne trop grande).\n" " Utilisation de la version non expansée.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "Attention : impossible de faire une expansion à base de %% de\n" " l'URL du serveur de clef favori (chaîne trop grande).\n" " Utilisation de la version non expansée.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "échec de vérification de la signature créée : %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s signature de : « %s »\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "une signature détachée avec des clefs de type\n" "PGP 2.x n'est possible qu'en mode --pgp2\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "Attention : forcer l'algorithme de hachage %s (%d) est en\n" " désaccord avec les préférences du destinataire\n" #: g10/sign.c:960 msgid "signing:" msgstr "signature :" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "une signature en texte clair avec des clefs de type\n" "PGP 2.x n'est possible qu'en mode --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "le chiffrement %s sera utilisé\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "la clef n'est pas marquée comme non sécurisée — elle ne peut pas être\n" "utilisée avec le soi-disant générateur de nombres aléatoires.\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "« %s » a été ignorée : en double\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "« %s » a été ignorée : %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "ignoré : clef secrète déjà présente\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "c'est une clef Elgamal générée par PGP qui n'est pas sûre pour les " "signatures." #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "enregistrement de confiance %lu, type %d : échec d'écriture : %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Liste des valeurs de confiance définies, créée le %s\n" "# (utilisez « gpg --import-ownertrust » pour les restaurer)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "erreur dans « %s » : %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "ligne trop longue" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "deux-points manquant" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "empreinte incorrecte" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "valeur de confiance au propriétaire manquante" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "impossible de trouver l'enregistrement de confiance dans « %s » : %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "erreur de lecture dans « %s » : %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de confiance : échec de synchronisation : %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "impossible de créer un verrou pour « %s »\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "impossible de verrouiller « %s »\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "enregistrement de base de confiance %lu : échec de lseek : %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "enregistrement de base de confiance %lu : échec d'écriture (n=%d) : %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transaction de base de confiance trop grande\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "impossible d'accéder à « %s » : %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s : le répertoire n'existe pas.\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s : impossible de créer un enregistrement de version : %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s : base de confiance incorrecte créée\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s : base de confiance créée\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "Remarque : la base de confiance n'est pas accessible en écriture\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s : base de confiance incorrecte\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s : échec de création de la table de hachage : %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s : erreur de mise à jour de l'enregistrement de version : %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s : erreur de lecture d'enregistrement de version : %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s : erreur d'écriture de l'enregistrement de version : %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de confiance : échec de lseek : %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de confiance : échec de lecture (n=%d) : %s\n" #: g10/tdbio.c:1202 #, 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:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s : enregistrement de version avec le numéro %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s : version %d du fichier incorrecte\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s : erreur de lecture d'enregistrement libre : %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s : erreur d'écriture de l'enregistrement de répertoire: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s : échec de mise à zéro d'un enregistrement : %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s : impossible d'ajouter un enregistrement : %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Erreur : la base de confiance est corrompue\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "impossible de traiter les lignes plus longues que %d caractères\n" #: g10/textfilter.c:246 #, 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/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "« %s » n'est pas un identifiant valable de clef longue\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "clef %s : acceptée comme clef de confiance\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "la clef %s apparaît plusieurs fois dans la base de confiance\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "clef %s : pas de clef publique pour la clef de confiance — ignorée\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "clef %s marquée de confiance ultime.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" "enregistrement de confiance %lu, type de requête %d : échec de lecture : %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "l'enregistrement de confiance %lu n'est pas du type %d demandé\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" "Vous pourriez essayer de recréer la base de confiance avec les commandes :\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Si cela ne fonctionne pas, veuillez consulter le mode d'emploi\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "impossible d'utiliser ce modèle de confiance inconnu (%d) —\n" " utilisation du modèle de confiance %s à la place\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "utilisation du modèle de confiance %s\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "11 le traducteur a bien lu ce qu'il fallait :)" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ révoquée]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ expirée ]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ inconnue]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[indéfinie]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[marginale]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ totale ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ ultime ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "indéfinie" #: g10/trustdb.c:554 msgid "never" msgstr "jamais" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginale" #: g10/trustdb.c:556 msgid "full" msgstr "totale" #: g10/trustdb.c:557 msgid "ultimate" msgstr "ultime" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "inutile de vérifier la base de confiance\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "la prochaine vérification de la base de confiance aura lieu le %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" "inutile de vérifier la base de confiance avec le modèle de\n" " confiance « %s »\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" "inutile de mettre à jour la base de confiance avec le modèle de\n" " confiance « %s »\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "clef publique %s introuvable : %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "veuillez faire un --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "vérification de la base de confiance\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d clefs traitées (%d comptes de validité réinitialisés)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "aucune clef de confiance ultime n'a été trouvée\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "la clef publique de la clef de confiance ultime %s est introuvable\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" "%d marginale(s) nécessaire(s), %d complète(s) nécessaire(s),\n" " modèle de confiance %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "profondeur : %d valables : %3d signées : %3d\n" " confiance : %d i., %d n.d., %d j., %d m., %d t., %d u.\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "impossible de mettre à jour l'enregistrement de version de la\n" "base de confiance : échec d'écriture : %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "impossible de vérifier la signature.\n" "Veuillez vérifier que le fichier de signature (.sig ou .asc)\n" "est bien le premier fichier indiqué sur la ligne de commande.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "" "la ligne d'entrée %u est trop longue ou un caractère de changement de\n" "ligne manque\n" #: util/errors.c:53 msgid "general error" msgstr "erreur générale" #: util/errors.c:54 msgid "unknown packet type" msgstr "type de paquet inconnu" #: util/errors.c:55 msgid "unknown version" msgstr "version inconnue" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "algorithme de clef publique inconnu" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "algorithme de hachage inconnu" #: util/errors.c:58 msgid "bad public key" msgstr "mauvaise clef publique" #: util/errors.c:59 msgid "bad secret key" msgstr "mauvaise clef secrète" #: util/errors.c:60 msgid "bad signature" msgstr "mauvaise signature" #: util/errors.c:61 msgid "checksum error" msgstr "erreur de somme de contrôle" #: util/errors.c:62 msgid "bad passphrase" msgstr "mauvaise phrase secrète" #: util/errors.c:63 msgid "public key not found" msgstr "clef publique introuvable" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "algorithme de chiffrement inconnu" #: util/errors.c:65 msgid "can't open the keyring" msgstr "impossible d'ouvrir le porte-clefs" #: util/errors.c:66 msgid "invalid packet" msgstr "paquet incorrect" #: util/errors.c:67 msgid "invalid armor" msgstr "armure incorrecte" #: util/errors.c:68 msgid "no such user id" msgstr "cette identité n'existe pas" #: util/errors.c:69 msgid "secret key not available" msgstr "la clef secrète n'est pas disponible" #: util/errors.c:70 msgid "wrong secret key used" msgstr "mauvaise clef secrète utilisée" #: util/errors.c:71 msgid "not supported" msgstr "non pris en charge" #: util/errors.c:72 msgid "bad key" msgstr "mauvaise clef" #: util/errors.c:73 msgid "file read error" msgstr "erreur de lecture de fichier" #: util/errors.c:74 msgid "file write error" msgstr "erreur d'écriture de fichier" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "algorithme de compression inconnu" #: util/errors.c:76 msgid "file open error" msgstr "erreur d'ouverture de fichier" #: util/errors.c:77 msgid "file create error" msgstr "erreur de création de fichier" #: util/errors.c:78 msgid "invalid passphrase" msgstr "phrase secrète incorrecte" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algorithme de clef publique non implémenté" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algorithme de chiffrement non implémenté" #: util/errors.c:81 msgid "unknown signature class" msgstr "classe de signature inconnue" #: util/errors.c:82 msgid "trust database error" msgstr "erreur de base de confiance" #: util/errors.c:83 msgid "bad MPI" msgstr "mauvais entier en précision multiple (MPI)" #: util/errors.c:84 msgid "resource limit" msgstr "limite de ressources atteinte" #: util/errors.c:85 msgid "invalid keyring" msgstr "porte-clefs incorrect" #: util/errors.c:86 msgid "bad certificate" msgstr "mauvais certificat" #: util/errors.c:87 msgid "malformed user id" msgstr "identité mal définie" #: util/errors.c:88 msgid "file close error" msgstr "erreur de fermeture du fichier" #: util/errors.c:89 msgid "file rename error" msgstr "erreur de modification du nom du fichier" #: util/errors.c:90 msgid "file delete error" msgstr "erreur de suppression du fichier" #: util/errors.c:91 msgid "unexpected data" msgstr "données inattendues" #: util/errors.c:92 msgid "timestamp conflict" msgstr "conflit de date" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "algorithme de clef publique inutilisable" #: util/errors.c:94 msgid "file exists" msgstr "le fichier existe" #: util/errors.c:95 msgid "weak key" msgstr "clef faible" #: util/errors.c:96 msgid "invalid argument" msgstr "argument incorrect" #: util/errors.c:97 msgid "bad URI" msgstr "mauvais URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI non pris en charge" #: util/errors.c:99 msgid "network error" msgstr "erreur de réseau" #: util/errors.c:101 msgid "not encrypted" msgstr "non chiffré" #: util/errors.c:102 msgid "not processed" msgstr "non traité" #: util/errors.c:104 msgid "unusable public key" msgstr "clef publique inutilisable" #: util/errors.c:105 msgid "unusable secret key" msgstr "clef secrète inutilisable" #: util/errors.c:106 msgid "keyserver error" msgstr "erreur du serveur de clefs" #: util/errors.c:107 msgid "canceled" msgstr "annulé" #: util/errors.c:108 msgid "no card" msgstr "pas de carte" #: util/errors.c:109 msgid "no data" msgstr "pas de données" #: util/logger.c:183 msgid "ERROR: " msgstr "Erreur : " #: util/logger.c:186 msgid "WARNING: " msgstr "Attention : " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "… c'est un bogue (%s : %d : %s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "vous avez trouvé un bogue… (%s : %d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "oui" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "oO" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "non" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quitter" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "ok|ok" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "annuler|annuler" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "aA" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "Attention : utilisation de mémoire non sécurisée.\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "veuillez consulter pour\n" "de plus amples renseignements\n" #: util/secmem.c:359 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:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(vous avez peut-être utilisé un programme non adapté à cette fin)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "" #~ "Attention : le propriétaire de l'extension « %s »\n" #~ " n'est pas sûr\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "" #~ "Attention : les droits de l'extension « %s »\n" #~ " ne sont pas sûrs\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "Attention : le propriétaire du répertoire contenant l'extension\n" #~ " « %s » n'est pas sûr\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "Attention : les droits du répertoire contenant l'extension\n" #~ " « %s » ne sont pas sûrs\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "l'extension de chiffrement « %s » n'a pas été chargée car ses\n" #~ "droits ne sont pas sûrs\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "le module de chiffrement IDEA n'est pas présent\n" gnupg-1.4.20/po/fi.po0000644000175000017500000061747012635457220011240 00000000000000# GnuPG finnish translation # Copyright © 1998, 1999, 2000, 2001, 2003-2004 Free Software Foundation, Inc. # Jouni Hiltunen , 2003. # Tommi Vainikainen , 2003-2004. # # Suomennoksia: # compress algorithm = pakkausalgoritmi # digest, hash = tiiviste # digest, hash algorithm = tiivistealgoritmi # cipher (algorithm) = salain, salausalgoritmi # pub key algorithm = julkisen avaimen algoritmi # # revocation = mitätöinti- # certificate = varmeen # revocation list = sulkulista # # - policy = -käytäntö (esim. tietoturvakäytäntö, allekirjoituskäytäntö) # key ring = avainrengas # # armor = ascii-koodaus (saa ehdottaa jos keksii näppärämmän käännöksen) msgid "" msgstr "" "Project-Id-Version: gnupg 1.2.2\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:23+0200\n" "Last-Translator: Tommi Vainikainen \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, fuzzy, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "alkulukua, jossa on alle %d bittiä, ei voi luoda\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "alkulukua, jossa on alle %d bittiä, ei voi luoda\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "entropian keräysmoduulia ei havaittu\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "tiedostoa \"%s\" ei voi avata\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "tiedostoa \"%s\" ei voi avata: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "tiedoston \"%s\" tilaa ei voi lukea: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "\"%s\" on erikoistiedosto - ohitettiin\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "huom: random_seed-tiedosto on tyhjä\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" "VAROITUS: random_seed-tiedosto on väärän kokoinen - tiedostoa ei käytetä\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "tiedostoa \"%s\" ei voi lukea: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "huom: random_seed-tiedostoa ei päivitetty\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "tiedostoa \"%s\" ei voi luoda: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "tiedostoon \"%s\" ei voi kirjoittaa: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "tiedostoa \"%s\" ei voi sulkea: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "VAROITUS: käytetty satunnaislukugeneraattori ei ole turvallinen.\n" #: cipher/random.c:894 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 "" "Satunnaislukugeneraattori on pelkkä kulissi, joka mahdollistaa\n" "ohjelman ajamisen - se ei ole vahvasti satunnainen!\n" "\n" "ÄLÄ KÄYTÄ OHJELMAN TUOTTAMAA DATAA!!\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Ole hyvä ja odota, entropiaa kerätään. Tee jotain työtä, jos se vaikka \n" "estäisi sinua pitkästymästä. Se nimittäin samalla parantaa entropian " "laatua.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Satunnaislukuja ei ole vielä tarpeeksi. Ole hyvä ja jatka työskentelyä \n" "antaaksesi käyttöjärjestelmälle mahdollisuuden kerätä lisää entropiaa! \n" "(Vielä tarvitaan %d tavua)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "TrustDB:n alustaminen ei onnistu: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "avainrenkaan välimuistin uudelleenluominen epäonnistui: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "avainlohkojen poisto epäonnistui: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "avainpalvelimelle lähettäminen epäonnistui: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "salaisen avaimen osat eivät ole käytettävissä\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Valitse mitätöinnin syy:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "virhe luotaessa salasanaa: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "virhe luettaessa avainlohkoa: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: virhe luettaessa vapaata tietuetta: %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "\"%s\" on jo pakattu\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "luo uusi avainpari" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "luo uusi avainpari" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "TrustDB:n alustaminen ei onnistu: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "avainlohkojen poisto epäonnistui: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "Avaimen luonti epäonnistui: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" # Ensimmäinen %s on binary, textmode tai unknown, ks. alla #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "%sallekirjoitus, tiivistealgoritmi %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "kelvollista OpenPGP-dataa ei löytynyt.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "ascii-koodaus: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "epäkelpo ascii-koodausotsake: " #: g10/armor.c:459 msgid "armor header: " msgstr "ascii-koodausotsake: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "epäkelpo selkotekstisen allekirjoituksen otsikko\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "ascii-koodausotsake: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "sisäkkäisiä tekstimuotoisia allekirjoituksia\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "odottamaton ascii-koodaus:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "epäkelpo viiva rivin lopussa: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "epäkelpo radix64-merkki %02x ohitettu\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "ennenaikainen tiedoston loppu (ei CRC:tä)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "ennenaikainen tiedoston loppu (CRC:ssä)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "väärinmuotoiltu CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC-virhe; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "Ennenaikainen tiedoston loppu (Trailerissa)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "virhe trailer-rivissä\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "kelvollista OpenPGP-dataa ei löytynyt.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "epäkelpo ascii-koodaus: yli %d merkkiä pitkä rivi\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "quoted printable -koodattu merkki ascii-koodauksessa - luultavasti " "viallista\n" "MTA:ta on käytetty\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "salaista avainta ei löydy" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "tätä ei voi tehdä eräajossa\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Tätä komentoa ei sallita %s-tilassa.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Valintasi? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr "Ei eriteltyä syytä" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "ei käsitelty" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "ei vastaavaa julkista avainta: %s\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "virhe luotaessa avainrengasta \"%s\": %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "virhe luettaessa tiedostoa \"%s\": %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "virhe luotaessa \"%s\": %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "päivitä valinnat" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "Valinnassa on luvaton merkki\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "Valinnassa on luvaton merkki\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "virhe: sormenjälki on väärä\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "näytä sormenjälki" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "virhe: sormenjälki on väärä\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "Avaimen luonti epäonnistui: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "kelvollista OpenPGP-dataa ei löytynyt.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "virhe kirjoitettaessa salaiseen avainrenkaaseen \"%s\": %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Minkä kokoisen avaimen haluat? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Minkä kokoisen avaimen haluat? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Minkä kokoisen avaimen haluat? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "pyöristetty %u bittiin\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "virhe luettaessa salaista avainlohkoa \"%s\": %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "ohitetaan: salainen avain on jo paikalla\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Valitse millaisen avaimen haluat:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "Allekirjoitus vanheni %s\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (vain salaus)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Valinta ei kelpaa.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Valitse mitätöinnin syy:\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "tuntematon suojausalgoritmi\n" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "Ensisijaisen avaimen salaiset osat eivät ole saatavilla.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "ohitetaan: salainen avain on jo paikalla\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "virhe kirjoitettaessa avainrenkaaseen \"%s\": %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "ulos tästä valikosta" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "ristiriitainen komento\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "näytä tämä ohje" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Avain saatavilla kohteessa: " #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "muuta voimassoloaikaa" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "muuta luottamusastetta" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "näytä sormenjälki" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "luo uusi avainpari" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "ristiriitainen komento\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "ristiriitainen komento\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Komento ei kelpaa (kirjoita \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "salaista avainta ei löydy" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "avainlohkojen poisto epäonnistui: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Toista salasana: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "salasanaa ei toistettu oikein, yritä uudestaan." #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "tiedostoa \"%s\" ei voi avata\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output ei toimi yhdessä tämän komennon kanssa\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "avainta \"%s\" ei löydy: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "virhe luettaessa avainlohkoa: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(ellet määritä avainta sormenjäljen perusteella)\n" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "ei onnistu eräajossa ilman \"--yes\"-valitsinta\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Poista tämä avain avainrenkaasta? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "Tämä on salainen avain! - poista varmasti? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "avainlohkojen poisto epäonnistui: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "luottamustiedot pyyhitty\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "julkiselle avaimelle \"%s\" löytyy vastaava salainen avain!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "käytä valitsinta \"--delete-secret-keys\" poistaaksesi se ensin.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "virhe luotaessa salasanaa: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "symmetristä ESK-pakettia ei voi käyttää S2K-tilan vuoksi\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "käytetään salakirjoitusalgoritmia %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "\"%s\" on jo pakattu\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "VAROITUS: \"%s\" on tyhjä tiedosto\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "--pgp2-tilassa voidaan salata korkeintaan 2048-bittisillä RSA-avaimilla\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "luetaan kohteesta \"%s\"\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "kaikille salattaville avaimille ei voi käyttää IDEA-salainta.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "valittu symmetrinen salain %s (%d) ei ole vastaanottajan suosima\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "valittu pakkausalgoritmi %s (%d) ei ole vastaanottajan suosima\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "valittu symmetrinen salain %s (%d) ei ole vastaanottajan suosima\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "valitsinta %s ei voi käyttää %s-tilassa\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s salattu vastaanottajalle: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s salattua dataa\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "salattu tuntemattomalla algoritmilla %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "VAROITUS: viesti salattiin symmetrisessä salaimessa \n" "esiintyvällä heikolla avaimella.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "ongelma käsiteltäessä salattua pakettia\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "etäohjelman suorittamista ei tueta\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "hakemiston \"%s\" luominen ei onnistu: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "ulkoisen ohjelman kutsuminen poistettu käytöstä johtuen turvattomista \n" "asetustiedoston oikeuksista\n" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "" "tämä ympäristö vaatii väliaikaistiedoston kutsuttaessa ulkoisia ohjelmia\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "komentoa %s \"%s\" ei voi suorittaa: %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "komentoa %s \"%s\" ei voi suorittaa: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "järjestelmävirhe kutsuttaessa ulkoista ohjelmaa: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "ulkoisen ohjelman luonnoton päättyminen\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "ulkoista ohjelmaa ei voi suorittaa\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "ulkoisen ohjelman vastausta ei voi lukea: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "VAROITUS: tilapäistiedostoa (%s) \"%s\" ei voi poistaa: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "VAROITUS: väliaikaishakemistoa \"%s\" ei voi poistaa: %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "Tämä allekirjoitus määritellään mitätöimättömäksi.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr "mitätöintiavainta ei löydy avaimelle \"%s\"\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "mitätöi toissijainen avain" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "salaista avainta ei voi käyttää" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "avain %08lX: ei suojattu - ohitetaan\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "avain %08lX: PGP 2.x -muodon avain - ohitetaan\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "avain %08lX: aliavaimen allekirjoitus väärässä paikassa - ohitetaan\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "TrustDB:n alustaminen ei onnistu: %s\n" #: g10/export.c:563 #, fuzzy, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" "VAROITUS: salaisella avaimella %08lX ei ole yksinkertaista SK-" "tarkistussummaa\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "VAROITUS: mitään ei viety\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Komennot:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[tiedosto]|tee allekirjoitus" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[tiedosto]|tee selkokielinen allekirjoitus" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "tee erillinen allekirjoitus" #: g10/gpg.c:393 msgid "encrypt data" msgstr "salaa tiedot" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "salaa vain symmetrisellä salaimella" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "avaa tiedot (oletus)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "tarkista allekirjoitus" #: g10/gpg.c:401 msgid "list keys" msgstr "näytä avaimet" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "näytä avaimet allekirjoituksineen" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "tarkista avainten allekirjoitukset" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "näytä avaimet sormenjälkineen" #: g10/gpg.c:406 msgid "list secret keys" msgstr "näytä salaiset avaimet" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "luo uusi avainpari" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "poista avaimet julkisten avainten renkaasta" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "poista avaimet salaisten avainten renkaasta" #: g10/gpg.c:411 msgid "sign a key" msgstr "allekirjoita avain" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "allekirjoita avain paikallisesti" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "allekirjoita tai muokkaa avainta" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "luo mitätöintivarmenne" #: g10/gpg.c:416 msgid "export keys" msgstr "vie avaimia" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "vie avaimia palvelimelle" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "nouda avaimia avainpalvelimelta" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "etsi avaimia avainpalvelimelta" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "päivitä kaikki avaimet avainpalvelimelta" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "nouda/liitä avaimia" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "päivitä luottamustietokanta" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [tiedostot]|tulosta viestien tiivisteet" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Valitsimet:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "tuota ascii-koodattu tuloste" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NIMI|salaa vastaanottajalle NIMI" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "käytä tätä käyttäjätunnusta allekirjoittamiseen ja avaamiseen" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|aseta pakkausaste N (0 poistaa käytöstä)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "käytä tekstimuotoa" #: g10/gpg.c:486 msgid "use as output file" msgstr "käytä tulostustiedostona" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "monisanainen" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "älä tee muutoksia" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "kysy ennen ylikirjoittamista" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Katso täydellinen luettelo kaikista komennoista ja valitsimista man-" "sivuilta)\n" #: g10/gpg.c:576 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" "Esim:\n" " -se -r Pekka [tiedosto] allekirjoita ja salaa Pekalle\n" " --clearsign [tiedosto] tee tekstimuotoinen allekirjoitus\n" " --detach-sign [tiedosto] tee erillinen allekirjoitus\n" " --list-keys [nimet] näytä avaimet\n" " --fingerprint [nimet] näytä sormenjäljet\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Ilmoita ohjelmistovioista (englanniksi) osoitteeseen .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Käyttö: gpg [valitsimet] [tiedostot] (-h näyttää ohjeen)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Syntaksi: gpg [valitsimet] [tiedostot]\n" "allekirjoita, tarkista, salaa tai avaa\n" "oletustoiminto riippuu syötteestä\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Tuetut algoritmit:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "JulkAvain: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Salaus: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Tiiviste: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Pakkaus: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "käyttö: gpg [valitsimet] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "ristiriitainen komento\n" #: g10/gpg.c:1078 #, fuzzy, c-format msgid "no = sign found in group definition `%s'\n" msgstr "=-merkkiä ei löytynyt ryhmämäärityksessä \"%s\"\n" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "VAROITUS: omistussuhde kohteessa %s \"%s\" ei ole turvallinen\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "VAROITUS: omistussuhde kohteessa %s \"%s\" ei ole turvallinen\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "VAROITUS: oikeudet kohteessa %s \"%s\" eivät ole turvallisia\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "VAROITUS: oikeudet kohteessa %s \"%s\" eivät ole turvallisia\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "VAROITUS: %s \"%s\" hakemiston oikeudet eivät ole turvallisia\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "VAROITUS: %s \"%s\" hakemiston oikeudet eivät ole turvallisia\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "VAROITUS: Hakemiston %s \"%s\" oikeudet eivät ole turvallisia\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "VAROITUS: Hakemiston %s \"%s\" oikeudet eivät ole turvallisia\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "tuntematon asetus \"%s\"\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Salaisesta avainrenkaasta ei löydy vastaavaa allekirjoitusta\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "annettu allekirjoituskäytännön URL on virheellinen\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "näytä mihin avainrenkaaseen tulostettu avain kuuluu" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Salaisesta avainrenkaasta ei löydy vastaavaa allekirjoitusta\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "HUOM: Vanhat oletusarvoiset asetukset löytyvät tiedostosta \"%s\"\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "HUOM: Ei oletusasetustiedostoa \"%s\"\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "asetustiedosto \"%s\": %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "luetaan asetukset tiedostosta \"%s\"\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "HUOM: %s ei ole normaaliin käyttöön!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s ei kelpaa merkistöksi\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s ei kelpaa merkistöksi\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "avainpalvelimen URI:iä ei voi jäsentää\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: virheelliset vientivalitsimet\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "virheelliset vientivalitsimet\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: virheelliset tuontivalitsimet\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "virheelliset tuontivalitsimet\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: virheelliset vientivalitsimet\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "virheelliset vientivalitsimet\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: virheelliset tuontivalitsimet\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "virheelliset tuontivalitsimet\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s ei kelpaa merkistöksi\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "annettu allekirjoituskäytännön URL on virheellinen\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s ei kelpaa merkistöksi\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s ei kelpaa merkistöksi\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: virheelliset vientivalitsimet\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "virheelliset vientivalitsimet\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "exec-polkua kohteeseen %s ei voi asettaa\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: virheelliset vientivalitsimet\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "VAROITUS: ohjelma voi luoda core-tiedoston!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "VAROITUS: %s korvaa %s:n\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s ja %s eivät ole sallittuja yhdessä!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s ja %s yhdessä on järjetöntä!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "gpg-agent ei ole käytettävissä tässä istunnossa\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "erillisen allekirjoituksen voi luoda vain --pgp2-tilassa\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "--pgp2-tilassa ei voi allekirjoittaa ja salata samanaikaisesti\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "sinun tulee käyttää tiedostoja (eikä putkitusta) kun --pgp2 on käytössä.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "viestin salaaaminen --pgp2-tilassa vaatii IDEA-salaimen\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "valittu salausalgoritmi ei kelpaa\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "valittu tiivistealgoritmi ei kelpaa\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "valittu salausalgoritmi ei kelpaa\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "valittu varmenteen tiivistealgoritmi ei kelpaa\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed täytyy olla suurempi kuin 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed täytyy olla suurempi kuin 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth tulee olla välillä 1-255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "default-cert-level ei kelpaa; täytyy olla 0, 1, 2 tai 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "min-cert-level ei kelpaa; täytyy olla 1, 2 tai 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "" "HUOM: yksinkertaista S2K-tilaa (0) ei todellakaan suositella käytettäväksi\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "virheellinen S2K-tila; täytyy olla 0, 1 tai 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "virheelliset oletusarvoiset valinnat\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "virheelliset henkilökohtaisen salaimen valinnat\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "virheelliset henkilökohtaiset tiivisteen valinnat\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "virheelliset henkilökohtaiset pakkausvalinnat\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s ja %s eivät vielä toimi yhdessä\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "salausalgoritmia \"%s\" ei voi käyttää %s-tilassa\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "tiivistealgoritmia \"%s\" ei voi käyttää %s-tilassa\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "pakkausalgoritmia \"%s\" ei voi käyttää %s-tilassa\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "TrustDB:n alustaminen ei onnistu: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "VAROITUS: vastaanottajia (-r) annettu käyttämättä julkisen avaimen salausta\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [tiedostonimi]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [tiedostonimi]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "avaus epäonnistui: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [tiedostonimi]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [tiedostonimi]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "valitsinta %s ei voi käyttää %s-tilassa\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--allekirjoita [tiedostonimi]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [tiedostonimi]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [tiedostonimi]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "valitsinta %s ei voi käyttää %s-tilassa\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [tiedostonimi]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [tiedostonimi]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [tiedostonimi]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key käyttäjätunnus" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key käyttäjätunnus" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key käyttäjätunnus [komennot]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [käyttäjätunnus] [avainrengas]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "avainpalvelimelle lähettäminen epäonnistui: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "avainpalvelimelta vastaanotto epäonnistui: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "avaimen vienti epäonnistui: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "avainpalvelimelta etsiminen epäonnistui: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "avainpalvelimen päivitys epäonnistui: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "ascii-koodauksen purku epäonnistui: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "ascii-koodaaminen epäonnistui: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "virheellinen tiivistealgoritmi \"%s\"\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[tiedostonimi]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Kirjoita viestisi...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "annettu varmennekäytännön URL on virheellinen\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "annettu allekirjoituskäytännön URL on virheellinen\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "annettu allekirjoituskäytännön URL on virheellinen\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "pk-välimuistissa on liian monta kohdetta - poistettu käytöstä\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[Käyttäjätunnusta ei löytynyt]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "" "avain %08lX: salaisella avaimella ei ole vastaavaa \n" "julkista avainta - ohitetaan\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Epäkelpo avain %08lX hyväksytty valitsimella --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "ei salaista aliavainta julkiselle aliavaimelle %08lX - ohitetaan\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "" "käytetään toissijaista avainta %08lX ensisijaisen avaimen %08lX sijasta\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "ole jonkinverran hiljaisempi" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "ota avaimet tästä avainrenkaasta" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "käsittele aikaleimakonfliktit pelkkinä varoituksina" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|tilatiedot kirjoitetaan FD:iin" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Käyttö: gpgv [valitsimet] [tiedostot] (-h näyttää ohjeen)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Käyttö: gpg [valitsimet] [tiedostot]\n" "Tarkista allekirjoituksia tunnetuille luotetuille avaimille\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Tämän arvon määrittäminen on sinun tehtäväsi, tätä arvoa ei koskaan \n" "kerrota kolmansille osapuolille. Tarvitsemme sitä toteuttamaan \n" "luottamusverkko eikä sillä ei ole mitään tekemistä (epäsuorasti luotujen) \n" "varmenneverkkojen kanssa." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Rakentaakseen luottamusverkon, GnuPG:n täytyy tietää mihin avaimiin \n" "luotetaan ehdottomasti - nämä ovat tavallisesti ne avaimet, joiden " "salainen \n" "pari on sinulla. Vastaa \"kyllä\" luottaaksesi tähän avaimeen ehdoitta\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Vastaa \"kyllä\" jos haluat kaikesta huolimatta käyttää tätä epäluotettavaa\n" "avainta." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Syötä vastaanottajan, jolle haluat lähettää viestin, käyttäjätunnus." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Yleensä ei ole järkevää käyttää samaa avainta allekirjoitukseen\n" "ja salaamiseen. Tätä algorimiä tulisi käyttää vain määrätyissä " "ympäristöissä.\n" "Ole hyvä ja kysy tietoturva-asiantuntijaltasi ensin" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Syötä avaimen koko" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Vastaa \"kyllä\" tai \" ei\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Syötä pyydetty arvo kuten näkyy kehotteessa.\n" "On mahdollista syöttää ISO-muotoinen päivä (VVVV-KK-PP),\n" "mutta sen seurauksena et saa kunnollista virheilmoitusta \n" "vaan järjestelmä yrittää tulkita arvon aikajaksona." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Anna avaimen haltijan nimi" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "anna vapaaehtoinen, mutta erittäin suositeltava sähköpostiosoite" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Kirjoita vapaaehtoinen huomautus" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N muuta nimeä\n" "C muuta kommenttia\n" "E muuta sähköpostiosoitetta\n" "O jatka avaimen luomista\n" "L lopeta" #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Vastaa \"kyllä\" (tai vain \"k\") jos haluat luoda aliavaimen." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Allekirjoittaessasi avaimen käyttäjätunnuksen sinun tulisi varmista, että \n" "avain todella kuuluu henkilölle, joka mainitaan käyttäjätunnuksessa. " "Muiden \n" "on hyvä tietää kuinka huolellisesti olet varmistanut tämän. \n" "\n" "\"0\" tarkoittaa, että et väitä mitään siitä, kuinka huolellisesti olet\n" " varmistanut avaimen.\n" "\n" "\"1\" tarkoittaa, että uskot avaimen kuuluvan henkilölle, joka väittää \n" " hallitsevan sitä, mutta et voinut varmistaa tai et varmistanut avainta \n" " lainkaan. Tämä on hyödyllinen \"persoonan\" varmistamiseen, jossa \n" " allekirjoitat pseudonyymin käyttäjän avaimen.\n" "\n" "\"2\" tarkoittaa arkista varmistusta. Esimerkiksi olet varmistanut \n" " avaimen sormenjäljen ja tarkistanut käyttäjätunnuksen ja \n" " valokuvatunnisteen täsmäävän.\n" "\n" "\"3\" tarkoittaa syvällistä henkilöllisyyden varmistamista. Esimerkiksi \n" " tämä voi tarkoittaa avaimen sormenjäljen tarkistamista avaimen " "haltijan \n" " kanssa henkilökohtaisesti, ja että tarkistit nimen avaimessa täsmäävän \n" " vaikeasti väärennettävän kuvallisen henkilöllisyystodistuksen (kuten \n" " passi) kanssa, ja lopuksi varmistit (sähköpostin vaihtamisella), että \n" " sähköpostiosoite kuuluu avaimen haltijalle.\n" "\n" "Huomaa, että yllä annetut esimerkit tasoille 2 ja 3 ovat todellakin *vain* \n" "esimerkkejä. Lopullisesti se on sinun päätöksesi mitä \"arkinen\" ja \n" "\"syvällinen\" tarkoittaa allekirjoittaessasi muita avaimia.\n" "\n" "Jos et tiedä mikä olisi sopiva vastaus, vastaa \"0\"." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Vastaa \"kyllä\" jos haluat allekirjoittaa KAIKKI käyttäjätunnukset" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Vastaa \"kyllä\", jos haluat poistaa tämän käyttäjätunnuksen.\n" "Menetät samalla kaikki siihen liittyvät varmenteet!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Vastaa \"kyllä\", jos aliavaimen voi poistaa" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Tämä on voimassa oleva allekirjoitus tälle avaimelle, tavallisesti ei \n" "kannata poistaa tätä allekirjoitusta koska se saattaa olla tarpeen\n" "luottamussuhteen luomiseksi avaimeen tai johonkin toiseen tämän avaimen\n" "varmentamaan avaimeen." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Allekirjoitusta ei voida tarkistaa koska sinulla ei ole \n" "siihen liittyvää avainta. Lykkää sen poistamista kunnes\n" " tiedät mitä avainta on käytetty, koska allekirjoitus \n" "avain saattaa luoda luottamusketjun toisen, jo ennalta \n" "varmennetun avaimen kautta." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Allekirjoitus ei ole pätevä. Järkevintä olisi poistaa se \n" "avainrenkaastasi." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Tämä allekirjoitus takaa avaimen haltijan henkilöllisyyden. \n" "Tällaisen allekirjoituksen poistaminen on tavallisesti huono \n" "ajatus. GnuPG ei kenties voi käyttää avainta enää. Poista \n" "allekirjoitus vain, jos se ei ole jostain syystä pätevä, ja \n" "avaimella on jo toinen allekirjoitus." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Muuta valinnat kaikille käyttäjätunnuksille (tai vain valituille)\n" "nykyiseen luetteloon valinnoista. Kaikkien muutettujen\n" "oma-allekirjoitusten aikaleima siirretään yhdellä sekunnilla eteenpäin.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Ole hyvä ja syötä salasana, tämän on salainen lause \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Toista edellinen salasanasi varmistuaksesi siitä, mitä kirjoitit." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Anna allekirjoitetun tiedoston nimi" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Vastaa \"kyllä\", jos tiedoston voi ylikirjoittaa" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Syötä uusi tiedostonimi. Jos painat vain RETURN, käytetään\n" "oletustiedostoa (joka näkyy sulkeissa)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Sinun tulisi määrittää syy varmenteelle. Riippuen asiayhteydestä\n" "voit valita tästä listasta:\n" " \"Avain on paljastunut\"\n" " Käytä tätä, jos sinulla on syytä uskoa, että luvattomat henkilöt \n" " ovat saaneet salaisen avaimesi käsiinsä.\n" " \"Avain on korvattu\"\n" " Käytä tätä, jos olet korvannut tämän uudemmalla avaimella.\n" " \"Avain ei ole enää käytössä\"\n" " Käytä tätä, jost ole lopettanut tämän avaimen käytön.\n" " \"Käyttäjätunnus ei ole enää voimassa\"\n" " Käytä tätä ilmoittamaan, että käyttäjätunnusta ei pitäisi käyttää;\n" " tätä normaalisti käytetään merkitsemään sähköpostiosoite " "vanhenneeksi.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Halutessasi voit kirjoittaa tähän kuvauksen miksi julkaiset tämän\n" "mitätöintivarmenteen. Kirjoita lyhyesti.\n" "Tyhjä rivi päättää tekstin.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Ei ohjeita saatavilla" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Ei ohjetta aiheesta \"%s\"" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "päivitä luottamustietokanta" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "päivitä luottamustietokanta" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "julkinen avain ei täsmää salaiseen avaimeen!\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "salaista avainta ei voi käyttää" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "ohitetaan tyypin %d lohko\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "tähän mennessä käsitelty %lu avainta\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Kaikkiaan käsitelty: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " ohitetaan uudet avaimet: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " ilman käyttäjätunnuksia: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " tuotu: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " muuttamatonta: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " uusia käyttäjätunnuksia: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " uusia aliavaimia: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " uusia allekirjoituksia: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " uusia avainten mitätöintejä: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " luettuja salaisia avaimia: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " tuotuja salaisia avaimia: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " muuttamattomia salaisia avaimia: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " ei tuotu: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " uusia allekirjoituksia: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " luettuja salaisia avaimia: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Olet allekirjoittanut seuraavat käyttäjätunnukset:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" # Ensimmäinen %s on binary, textmode tai unknown, ks. alla #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "%sallekirjoitus, tiivistealgoritmi %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "avain %08lX: ei käyttäjätunnusta\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "ohitetaan \"%s\": %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "avain %08lX: HKP-aliavainvirhe korjattu\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "" "avain %08lX: käyttäjätunnus \"%s\" hyväksytty ilman omaa allekirjoitusta\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "avain %08lX: ei voimassaolevia käyttäjätunnuksia\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "tämän voi aiheuttaa puuttuva oma-allekirjoitus\n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "avain %08lX: julkista avainta ei löydetty: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "avain %08lX: uusi avain - ohitetaan\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "kirjoitettavissa olevaa avainrengasta ei löydy: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "kirjoitetaan kohteeseen \"%s\"\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "virhe kirjoitettaessa avainrenkaaseen \"%s\": %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "avain %08lX: julkinen avain \"%s\" tuotu\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "avain %08lX: ei vastaa omaa kopiotamme\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "avain %08lX: alkuperäistä avainlohkoa ei löydy: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "avain %08lX. alkuperäisen avainlohko lukeminen ei onnistu: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "avain %08lX: \"%s\" 1 uusi käyttäjätunnus\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "avain %08lX: \"%s\" %d uutta käyttäjätunnusta\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "avain %08lX: \"%s\" 1 uusi allekirjoitus\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "avain %08lX: \"%s\" %d uutta allekirjoitusta\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "avain %08lX: \"%s\" 1 uusi aliavain\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "avain %08lX: \"%s\" %d uutta aliavainta\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "avain %08lX: \"%s\" %d uutta allekirjoitusta\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "avain %08lX: \"%s\" %d uutta allekirjoitusta\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "avain %08lX: \"%s\" %d uutta käyttäjätunnusta\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "avain %08lX: \"%s\" %d uutta käyttäjätunnusta\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "avain %08lX: \"%s\" ei muutoksia\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "salaista avainta \"%s\" ei löydy: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "avain %08lX: avaimella on epäkelpo salain %d - ohitetaan\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "salaiselle avainrenkaalle ei ole asetettu oletusarvoa: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "avain %08lX: salainen avain tuotu\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "avain %08lX: avain on jo avainrenkaassa\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "avain %08lX: salaista avainta ei löydy: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "avain %08lX: ei julkista avainta - mitätöintivarmennetta ei voida käyttää\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "avain %08lX: pätemätön mitätöintivarmenne: %s - hylätty\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "avain %08lX: mitätöintivarmenne \"%s\" tuotu\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "avain %08lX: allekirjoitukselle ei ole käyttäjätunnusta\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "avain %08lX: julkisen avaimen algoritmia \"%s\" ei tueta\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "avain %08lX: epäkelpo oma-allekirjoitus käyttäjätunnuksella \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "avain %08lX: julkisen avaimen algoritmia ei tueta\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "avain %08lX: lisättiin suora avainallekirjoitus\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "avain %08lX: ei aliavainta avainten riippuvuuksiin\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "avain %08lX: pätemätön aliavainriippuvuus\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "avain %08lX: moninkertainen aliavainriippuvuus poistettu\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "avain %08lX: ei aliavainta avainten mitätöintiä varten\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "avain %08lX: epäkelpo aliavaimen mitätöinti\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "avain %08lX: useiden aliavainten mitätöinti poistettu\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "avain %08lX: käyttäjätunnus ohitettu '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "avain %08lX: aliavain ohitettu\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "" "avain %08lX: allekirjoitusta ei voida viedä (luokka %02x) - ohitetaan\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "avain %08lX: mitätöintivarmenne väärässä paikassa - ohitetaan\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "avain %08lX: epäkelpo mitätöintivarmenne: %s - ohitetaan\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "avain %08lX: aliavaimen allekirjoitus väärässä paikassa - ohitetaan\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "avain %08lX: odottamaton allekirjoitusluokka (0x%02X) - ohitetaan\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "avain %08lX: käyttäjätunnuksen kaksoiskappale havaittu - liitetty\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "VAROITUS: avain %08lX saattaa olla mitätöity: haetaan mitätöintiavain %08lX\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "VAROITUS: avain %08lX saattaa olla mitätöity: mitätöintiavainta %08lX \n" "ei saatavilla.\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "avain %08lX: \"%s\"-mitätöintivarmenne lisätty\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "avain %08lX: lisättiin suora avainallekirjoitus\n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "julkinen avain ei täsmää salaiseen avaimeen!\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "ohitetaan: salainen avain on jo paikalla\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "ohitetaan: salainen avain on jo paikalla\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "virhe luotaessa avainrengasta \"%s\": %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "avainrengas \"%s\" luotu\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "virhe luotaessa \"%s\": %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "avainrenkaan välimuistin uudelleenluominen epäonnistui: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[mitätöinti]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[oma-allekirjoitus]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 väärä allekirjoitus\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d väärää allekirjoitusta\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 allekirjoitus jätetty tarkistamatta puuttuvan avaimen vuoksi\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d allekirjoitusta jätetty tarkistamatta puuttuvien avainten vuoksi\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 allekirjoitus jätetty tarkistamatta virheen vuoksi\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d allekirjoitusta jätetty tarkistamatta virheiden vuoksi\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "havaittiin 1 käyttäjätunnus ilman voimassaolevaa oma-allekirjoitusta\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "" "havaittiin %d käyttäjätunnusta ilman voimassaolevaa oma-allekirjoitusta\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Miten paljon luotat tämän käyttäjän varmistamiin muiden käyttäjien \n" "avaimiin (tarkistaako hän henkilöllisyydet, vertaako sormenjälkiä eri \n" "lähteistä...)?\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = Luotan osittain\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = Luotan täysin\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Käyttäjätunnus \"%s\" on mitätöity." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Haluatko varmasti edelleen allekirjoittaa? (k/E) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Allekirjoittaminen ei onnistu.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Käyttäjätunnus \"%s\" on vanhentunut." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Käyttäjätunnuksella \"%s\" ei ole oma-allekirjoitusta." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "Käyttäjätunnuksella \"%s\" ei ole oma-allekirjoitusta." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Varmastiko allekirjoita? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Oma-allekirjoitus kohteessa \"%s\"\n" "on PGP 2.x -muodon allekirjoitus.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "" "Haluatko vahventaa sen täysin vientikelpoiseksi OpenPGP-allekirjoitukseksi? " "(k/E) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Nykyinen allekirjoituksesi kohteessa \"%s\"\n" "on vanhentunut.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Haluatko tehdä uuden allekirjoituksen korvaamaan vanhentuneen? (k/E) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Nykyinen allekirjoituksesi kohteessa \"%s\"\n" "on paikallinen allekirjoitus.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Haluatko vahventaa sen täysin vientikelpoiseksi allekirjoitukseksi? (k/E) " #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" on jo allekirjoitettu paikallisesti avaimella %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" on jo allekirjoitettu avaimella %08lX\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Haluatko allekirjoittaa uudelleen joka tapauksessa? (k/E) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Avaimelle %08lX ei löydy mitään mitä allekirjoittaa\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Tämä avain on vanhentunut!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Avain vanhenee %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Haluatko allekirjoituksesi vanhenevan samaan aikaan? (K/e) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Et voi luoda OpenPGP-allekirjoitusta PGP 2.x -avaimella --pgp2-tilassa.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Tämä tekisi avaimesta käyttökelvottoman PGP 2.x:lle.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Kuinka huolellisesti olet vahvistanut avaimen haltijan henkilöllisyyden?\n" "Jos et tiedä vastausta, syötä \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) En vastaa.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) En ole tarkistanut lainkaan.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Olen suorittanut arkisen tarkistuksen.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Olen suorittanut huolellisen tarkistuksen.%s\n" #: g10/keyedit.c:926 #, fuzzy msgid "Your selection? (enter `?' for more information): " msgstr "Valintasi? (syöttämällä \"?\" saat lisätietoja): " #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Haluatko varmasti allekirjoittaa tämän avaimen\n" "omalla avaimellasi: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" "Tämä tulee olemaan oma-allekirjoitus.\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "VAROITUS: Tätä allekirjoitusta ei määritellä vientikelvottomaksi.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "VAROITUS: Tätä allekirjoitusta ei määritellä mitätöimättömäksi.\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "Tämä allekirjoitus määritellään vientikelvottomaksi.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "Tämä allekirjoitus määritellään mitätöimättömäksi.\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "En ole tarkistanut tätä avainta lainkaan.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "Olen tarkistanut avaimen arkisesti.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "Olen tarkistanut avaimen erittäin huolellisesti.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Varmastiko allekirjoita? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "allekirjoitus epäonnistui: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Avainta ei ole suojattu.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Ensisijaisen avaimen salaiset osat eivät ole saatavilla.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "Ensisijaisen avaimen salaiset osat eivät ole saatavilla.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Avain on suojattu.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Ei voi muokata avainta: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Syötä uusi salasana salaiselle avaimelle.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "salasanaa ei toistettu oikein, yritä uudestaan." #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Et halua salasanaa - tämä on todennäköisesti *huono* ajatus!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Haluatko varmasti tehdä tämän? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "siirretään avaimen allekirjoitus oikealle paikalle\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "tallenna ja lopeta" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "näytä sormenjälki" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "näytä avaimet ja käyttäjätunnukset" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "valitse käyttäjätunnus N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "valitse käyttäjätunnus N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "mitätöi allekirjoitus" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "allekirjoita avain paikallisesti" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Vihje: Valitse allekirjoitettavat käyttäjätunnukset\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "lisää käyttäjätunnus" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "lisää valokuva" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "poista käyttäjätunnus" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "poista toissijainen avain" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "lisää mitätöintiavain" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "Varmastiko päivitä valinnat näille käyttäjätunnuksille? " #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "Et voi muuttaa v3-avainten vanhentumispäivää\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "merkitse käyttäjätunnus ensisijaiseksi" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "vaihda salaisten ja julkisten avainten luettelon välillä" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "näytä valinnat (asiantuntija)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "näytä valinnat (monisanaisesti)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "Varmastiko päivitä valinnat näille käyttäjätunnuksille? " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "avainpalvelimen URI:iä ei voi jäsentää\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "Varmastiko päivitä valinnat näille käyttäjätunnuksille? " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "muuta salasanaa" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "muuta luottamusastetta" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Varmastiko mitätöi kaikki valitut käyttäjätunnukset? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "mitätöi käyttäjätunnus" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "mitätöi toissijainen avain" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "ota avain käyttöön" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "poista avain käytöstä" #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "näytä valokuvatunniste" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "virhe luettaessa salaista avainlohkoa \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Salainen avain on saatavilla.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Tähän tarvitaan salainen avain.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Käytä ensin komentoa \"toggle\".\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Avain on mitätöity." #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Varmastiko allekirjoita kaikki käyttäjätunnukset?" #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Vihje: Valitse allekirjoitettavat käyttäjätunnukset\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "tuntematon allekirjoitusluokka" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Tätä komentoa ei sallita %s-tilassa.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Sinun täytyy valita ainakin yksi käyttäjätunnus.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Et voi poistaa viimeistä käyttäjätunnusta!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Varmastiko poista kaikki valitut käyttäjätunnukset? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Varmastiko poista tämä käyttäjätunnus? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Varmastiko poista tämä käyttäjätunnus? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Sinun täytyy valita ainakin yksi avain.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "tiedostoa \"%s\" ei voi avata: %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "virhe luotaessa avainrengasta \"%s\": %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Sinun täytyy valita ainakin yksi avain.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Haluatko varmasti poistaa valitut avaimet? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Haluatko varmasti poistaa tämän avaimen? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Varmastiko mitätöi kaikki valitut käyttäjätunnukset? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Varmastiko mitätöi tämä käyttäjätunnus? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Haluatko varmasti mitätöidä tämän avaimen? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Haluatko varmasti mitätöidä valitut avaimet? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Haluatko varmasti mitätöidä tämän avaimen? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "näytä valinnat" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Varmastiko päivitä valinnat näille käyttäjätunnuksille? " #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Varmastiko päivitä valinnat? " #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Tallenna muutokset? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Lopeta tallentamatta muutoksia?" #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "päivitys epäonnistui: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "salaisen päivitys epäonnistui: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Päivitystä ei tarvita, koska avain ei ole muuttunut.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Tiiviste: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Ominaisuudet: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Notaatio: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "PGP 2.x -muodon käyttäjätunnukselle ei ole valintoja.\n" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Tämä avain voidaan mitätöidä %s-avaimella " #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "Tämä avain voidaan mitätöidä %s-avaimella " #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " (luottamuksellinen)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "ei voida luoda kohdetta %s: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "[mitätöity] " #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [vanhenee: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [vanhenee: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " luottamus: %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " luottamus: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Tämä avain on poistettu käytöstä" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Huomioi, että tässä näytetty voimassaolo ei ole välttämättä\n" "ajan tasalla jollet käynnistä ohjelmaa uudelleen\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "[mitätöity] " #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "VAROITUS: mitään käyttäjätunnusta ei ole merkitty ensisijaiseksi. Tämän \n" "komennon johdosta eri käyttäjätunnus voi tulla oletetuksi ensisijaiseksi.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Et voi muuttaa v3-avainten vanhentumispäivää\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "VAROITUS: Tämä on PGP2-muodon avain. Valokuvan lisääminen voi\n" " saada jotkin PGP:n versiot hylkäämään avaimen.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Haluatko edelleen varmasti lisätä sen? (k/E) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Et voi lisätä valokuvaa PGP2-muodon avaimeen.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Poistetaanko tämä kelvollinen allekirjoitus? (k/E/l)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Poistetaanko tämä epäkelpo allekirjoitus? (k/E/l)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Poistetaanko tämä tuntematon allekirjoitus? (k/E/l)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Varmastiko poista oma-allekirjoitus? (k/E)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d allekirjoitus poistettu.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d allekirjoitusta poistettu.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Mitään ei poistettu.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "virheellinen ascii-koodaus" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Käyttäjätunnus \"%s\" on mitätöity." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Käyttäjätunnus \"%s\" on mitätöity." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Käyttäjätunnus \"%s\" on mitätöity." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "käyttäjätunnus \"%s\" on jo mitätöity\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "käyttäjätunnus \"%s\" on jo mitätöity\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "VAROITUS: Tämä on PGP 2.x -muodon avain. Määrätyn mitätöijän lisääminen " "voi\n" " saada jotkin PGP:n versiot hylkäämään avaimen.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Et voi lisätä määrättyä mitätöijää PGP 2.x -muodon avaimeen.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Syötä määrätyn mitätöijän käyttäjätunnus: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "PGP 2.x -avainta ei voi nimetä määrätyksi mitätöijäksi\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "et voi nimittää avainta sen omaksi määrätyksi mitätöijäksi\n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "VAROITUS: Tämän avaimen nimetty mitätöijä on mitätöinyt avaimen!\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "VAROITUS: avaimen nimittämistä määrätyksi mitätöijäksi ei voi perua!\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Haluatko varmasti nimittää tämän avaimen määrätyksi mitätöijäksi? (k/E): " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Poista salaisten avainten valinnat, kiitos.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Valitse korkeintaan yksi toissijainen avain, kiitos.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "Muutetaan toissijaisen avaimen vanhentumisaikaa.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Muutetaan ensisijaisen avaimen vanhentumisaikaa.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Et voi muuttaa v3-avainten vanhentumispäivää\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Salaisesta avainrenkaasta ei löydy vastaavaa allekirjoitusta\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "VAROITUS: allekirjoitusaliavain %08lX ei ole ristiinvarmennettu\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Valitse tasan yksi käyttäjätunnus!\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "ohitetaan v3-muodon oma-allekirjoitus käyttäjätunnukselle \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Haluatko varmasti käyttää sitä (k/E)? " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Haluatko varmasti käyttää sitä (k/E)? " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Allekirjoitusnotaatio: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Ylikirjoita (k/E)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Indeksillä %d ei löydy käyttäjätunnusta\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Indeksillä %d ei löydy käyttäjätunnusta\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Indeksillä %d ei löydy käyttäjätunnusta\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "käyttäjätunnus: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " %08lX allekirjoitti tämän %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (vientiin kelpaamaton)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Tämä allekirjoitus vanheni %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Haluatko varmasti mitätöidä sen? (k/E) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Luodaanko tälle alekirjoitukselle mitätöintivarmenne? (k/E) " #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " %08lX allekirjoitti tämän %s%s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Olet allekirjoittanut seuraavat käyttäjätunnukset:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (vientiin kelpaamaton)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " %08lX mitätöi tämän %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Olet mitätöimässä seuraavat allekirjoitukset:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Varmastiko luo mitätöintivarmenteet? (k/E) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "salainen avain ei ole saatavilla\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "käyttäjätunnus \"%s\" on jo mitätöity\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "VAROITUS: käyttäjätunnuksen allekirjoitus on päivätty %d sekuntin päähän " "tulevaisuuteen\n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "käyttäjätunnus \"%s\" on jo mitätöity\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "käyttäjätunnus \"%s\" on jo mitätöity\n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "Näytetään valokuva %s, kokoa %ld avaimelle 0x%08lX\n" "(käyttäjätunnus %d)\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "valinta %c%lu on kopio\n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "liian monta \"%c\" valintaa\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "liian monta \"%c\" valintaa\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "liian monta \"%c\" valintaa\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "Valinnassa on luvaton merkki\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "kirjoitetaan suora allekirjoitus\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "kirjoitetaan oma-allekirjoitus\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "kirjoitetaan avaimen varmentava allekirjoitus\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "avaimen koko on virheellinen, käytetään %u bittiä\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "avaimen koko on pyöristetty %u bittiin\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "salaa tiedot" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (vain salaus)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Valitse millaisen avaimen haluat:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA ja ElGamal (oletus)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA ja ElGamal (oletus)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (vain allekirjoitus)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (vain allekirjoitus)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (vain salaus)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (vain salaus)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA (vain salaus)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (vain salaus)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Minkä kokoisen avaimen haluat? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Minkä kokoisen avaimen haluat? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Halutun avaimen koko on %u bittiä\n" #: g10/keygen.c:1722 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 "" "Kuinka kauan avaimen tulee olla voimassa.\n" " 0 = Avain ei vanhene koskaan\n" " = Avain vanhenee n päivän kuluttua\n" " w = Avain vanhenee n viikon kuluttua\n" " m = Avain vanhenee n kuukauden kuluttua\n" " y = Avain vanhenee n vuoden kuluttua\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Kuinka kauan allekirjoituksen tulee olla voimassa.\n" " 0 = Allekirjoitus ei vanhene koskaan\n" " = Allekirjoitus vanhenee n päivän kuluttua\n" " w = Allekirjoitus vanhenee n viikon kuluttua\n" " m = Allekirjoitus vanhenee n kuukauden kuluttua\n" " y = Allekirjoitus vanhenee n vuoden kuluttua\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Avain on voimassa? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "Allekirjoitus on voimassa? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "arvo ei kelpaa\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "%s ei vanhene koskaan\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "%s ei vanhene koskaan\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "%s vanhenee %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Allekirjoitus vanhenee %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Järjestelmäsi ei osaa näyttää päiväyksiä kuin vuoteen 2038.\n" "Se kuitenkin käsittelee päiväykset oikein vuoteen 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "Onko tämä oikein (k/e) " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Tarviset käyttäjätunnuksen avaimesi tunnistamiseen; ohjelma muodostaa \n" "käyttäjätunnuksen oikeasta nimestä, huomautuksesta ja " "sähköpostiosoitteesta \n" "muodossa:\n" " \"Matti Meikäläinen (nuorempi) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Oikea nimi: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Nimessä on epäkelpo merkki\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Nimi ei voi alkaa numerolla\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Nimen täytyy olla vähintään 5 merkkiä pitkä\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Sähköpostiosoite: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Sähköpostiosoite ei kelpaa\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Huomautus: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Huomautuksessa on epäkelpo merkki\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Käytät merkistöä \"%s\".\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Valitsit seuraavan käyttäjätunnuksen:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Älä syötä sähköpostiosoitetta nimen tai huomautuksen paikalle\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnHhSsOoLl" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Muuta (N)imi, (H)uomautus, (S)ähköposti vai (L)opeta?" #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Muuta (N)imi, (H)uomautus, (S)ähköposti vai (O)k/(L)opeta?" #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Ole hyvä ja korjaa ensin virhe\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Tarvitset salasanan suojaamaan salaista avaintasi.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Et halunnut salasanaa - tämä on luultavasti *huono* ajatus!\n" "Jatketaan silti. Voit vaihtaa salasanaa milloin tahansa\n" "tämän ohjelman valitsimella \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Tarvitaan paljon satunnaislukuja. Voit suorittaa muita toimintoja\n" "(kirjoittaa näppäimistöllä, liikuttaa hiirtä, käyttää levyjä)\n" "alkulukujen luomisen aikana, tämä antaa satunnaislukugeneraattorille\n" "paremmat mahdollisuudet kerätä riittävästi entropiaa.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Avaimen luonti keskeytetty.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "kirjoitan julkisen avaimen kohteeseen \"%s\"\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "kirjoitan salaisen avaimen kohteeseen \"%s\"\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "kirjoitettavissa olevaa julkista avainrengasta ei löydy: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "kirjoitettavissa olevaa salaista avainrengasta ei löydy: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "virhe kirjoitettaessa julkiseen avainrenkaaseen \"%s\": %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "virhe kirjoitettaessa salaiseen avainrenkaaseen \"%s\": %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "julkinen ja salainen avain on luotu ja allekirjoitettu.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Huomaa, että tätä avainta ei voida käyttää salaamiseen. Käytä komentoa\n" "\"--edit-key\" luodaksesi toissijaisen avaimen salaustarkoitukseen.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Avaimen luonti epäonnistui: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "avain on luotu %lu sekunti tulevaisuudessa (on tapahtunut aikahyppy tai\n" "kellon kanssa on ongelmia)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "avain on luotu %lu sekuntia tulevaisuudessa (on tapahtunut aikahyppy tai\n" "kellon kanssa on ongelmia)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "HUOM: v3-aliavainten luonti ei ole OpenPGP:n mukaista\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Haluatko varmasti luoda? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "avainlohkojen poisto epäonnistui: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "tiedostoa \"%s\" ei voi luoda: %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "HUOM: salainen avain %08lX vanheni %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "ei koskaan" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kriittinen allekirjoituskäytäntö: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Allekirjoituskäytäntö: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kriittinen allekirjoitusnotaatio: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Allekirjoitusnotaatio: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Avainrengas" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Ensisijaisen avaimen sormenjälki:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Aliavaimen sormenjälki:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Ensisijaisen avaimen sormenjälki:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Aliavaimen sormenjälki:" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Avaimen sormenjälki =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "ascii-koodaaminen epäonnistui: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "VAROITUS: löytyi 2 tiedostoa, joissa on luottamuksellisia tietoja.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s säilyi muuttumattomana\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s on uusi\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Ole hyvä ja korjaa tämä mahdollinen tietoturvareikä\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "tarkistetaan avainrengasta \"%s\"\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "käsiteltiin %lu avainta (%lu allekirjoitusta)\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "käsiteltiin %lu avainta (%lu allekirjoitusta)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: avainrengas luotu\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "annettu allekirjoituskäytännön URL on virheellinen\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "VAROITUS: asetukset tiedostossa \"%s\" eivät ole käytössä vielä tässä " "ajossa\n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "virheelliset vientivalitsimet\n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "avainta \"%s\" ei löydy: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "avainta \"%s\" ei löydy: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "pyydetään avainta %08lX kohteesta %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "pyydetään avainta %08lX kohteesta %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "etsitään \"%s\" HKP-palvelimelta %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "etsitään \"%s\" HKP-palvelimelta %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "etsitään \"%s\" HKP-palvelimelta %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "allekirjoitettu avaimellasi %08lX %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "etsitään \"%s\" HKP-palvelimelta %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "etsitään \"%s\" HKP-palvelimelta %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "virheelliset vientivalitsimet\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "avainpalvelimelta vastaanotto epäonnistui: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "avainpalvelinvirhe" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "avainpalvelinvirhe" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "VAROITUS: tilapäistiedostoa (%s) \"%s\" ei voi poistaa: %s\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "pyydetään avainta %08lX kohteesta %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "pyydetään avainta %08lX kohteesta %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "VAROITUS: tilapäistiedostoa (%s) \"%s\" ei voi poistaa: %s\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "VAROITUS: tilapäistiedostoa (%s) \"%s\" ei voi poistaa: %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "outo koko salatulle istuntoavaimelle (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s-salattu istuntoavain\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "salattu tuntemattomalla algoritmilla %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "julkinen avain on %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "julkisella avaimella salattu data: DEK kelpaa\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "salattu %u-bittisella %s-avaimella, tunnus %08lX, luotu %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " aka \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "salattu %s-avaimella, tunnus %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "julkisen avaimen avaus epäonnistui: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "salattu %lu salasanalla\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "salattu yhdellä salasanalla\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "oletettavasti %s-salattua dataa\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "IDEA-salain ei käytettävissä, yritetään optimistisesti \n" "käyttää sen sijaan salainta %s\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "avaus onnistui\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "VAROITUS: viestin eheyttä ei oltu suojattu\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "VAROITUS: salattua viestiä on muokattu!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "avaus epäonnistui: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "HUOM: lähettäjä määrittää \"vain-sinun-silmillesi\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "alkuperäisen tiedoston nimi=\"%.*s\"\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "itsenäinen mitätöinti - käytä \"gpg --import\" ottaaksesi käyttöön\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Allekirjoitus täsmää lähettäjään \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "allekirjoituksen varmistus vaiennetaan\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "näitä allekirjoituksia ei voi käsitellä\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Allekirjoitus vanheni %s\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " aka \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "" "Allekirjoitus tehty %.*s käyttämällä %s-algoritmia avaintunnuksella %08lX\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Avain saatavilla kohteessa: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "VÄÄRÄ allekirjoitus lähettäjältä \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Vanhentunut allekirjoitus lähettäjältä \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Allekirjoitus täsmää lähettäjään \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[ei tiedossa]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " aka \"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Allekirjoitus vanheni %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Allekirjoitus vanhenee %s\n" # Ensimmäinen %s on binary, textmode tai unknown, ks. alla #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%sallekirjoitus, tiivistealgoritmi %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binääri" #: g10/mainproc.c:1947 msgid "textmode" msgstr "teksti" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "tuntematon " #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Allekirjoitusta ei voi tarkistaa: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "allekirjoitus ei ole erillinen\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "VAROITUS: useita allekirjoituksia havaittu. Vain ensimmäisen voi " "tarkistaa.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "itsenäinen allekirjoitus luokkaa 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "vanhan tyylin (PGP 2.x) allekirjoitus\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "epäkelpo juuripaketti havaittu proc_tree():ssä\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "core-tiedostojen luontia ei voi estää: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "ei voi avata tiedostoa: %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "trustdb: luku epäonnistui (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "julkisen avaimen algorimin %d käsittely ei onnistu\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "valittua tiivistesalgoritmia %s (%d) ei löydy vastaanottajan valinnoista\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "salausalgoritmi ei ole käytössä" # Ensimmäinen %s on binary, textmode tai unknown, ks. alla #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "%sallekirjoitus, tiivistealgoritmi %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" "valittua tiivistesalgoritmia %s (%d) ei löydy vastaanottajan valinnoista\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = näytä lisätietoja\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "gpg-agent ei ole käytettävissä tässä istunnossa\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: paheksuttava valitsin \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "VAROITUS: \"%s\" on paheksuttu valitsin\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "käytä valitsinta \"%s%s\" sen sijaan\n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "VAROITUS: \"%s\" on paheksuttu valitsin\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "pakkaamaton" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "pakkaamaton" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "%s ei kenties voi käsitellä tätä viestiä\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "luetaan asetukset tiedostosta \"%s\"\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "tuntematon oletusvastaanottaja \"%s\"\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "tuntematon allekirjoitusluokka" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Tiedosto \"%s\" on olemassa." #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Ylikirjoita (k/E)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: tuntematon pääte\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Syötä uusi tiedostonimi" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "kirjoitetaan vakiotulosteeseen\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "data kohteessa \"%s\" oletetaan allekirjoitetuksi\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "uusi asetustiedosto \"%s\" luotu\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "VAROITUS: asetukset tiedostossa \"%s\" eivät ole käytössä vielä tässä " "ajossa\n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: hakemisto luotu\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "julkisen avaimen algorimin %d käsittely ei onnistu\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "VAROITUS: mahdollisesti turvaton symmetrisesti salattu istuntoavain\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "tyypin %d alipaketilla on kriittinen bitti asetettuna\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent ei ole käytettävissä tässä istunnossa\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "GPG_AGENT_INFO-ympäristömuuttuja on väärin muotoiltu\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent-protokollaversio %d ei ole tuettu\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "yhteys kohteeseen \"%s\" ei onnistu: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "agentin käytössä on ongelmia - agenttia ei käytetä\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (pääavaimen tunnus %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Tarvitset salasanan avataksesi salaisen avaimen käyttäjälle:\n" "\"%.*s\"\n" "%u-bittinen %s-avain, tunnus %08lX, luotu %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Toista salasana\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Syötä salasana\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "käyttäjän peruma\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "salasanan kysyminen ei onnistu eräajossa\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Syötä salasana: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Tarvitset salasanan avataksesi salaisen avaimen käyttäjälle: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bittinen %s-avain, tunnus %08lX, luotu %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Toista salasana: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Valitse kuva, jota haluat käyttää valokuvatunnisteenasi. Kuvan täytyy " "olla \n" "JPEG-tiedosto. Muista, että kuva tallennetaan julkiseen avaimeesi. Jos \n" "käytät erittäin suurta kuvaa, myös avaimesta tulee erittäin suuri!\n" "Kuvan koon ollessa suunnilleen 240x288, on koko sopiva käyttöön.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Syötä JPEG-tiedostonimi valokuvatunnisteelle: " #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "ei voi avata tiedostoa: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Haluatko varmasti käyttää sitä (k/E)? " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\" ei ole JPEG-tiedosto\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Onko tämä oikein (k/E/l)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "valokuvatunnistetta ei voi näyttää!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Ei eriteltyä syytä" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Avain on uusittu" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Avain on murrettu" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Avain ei ole enää käytössä" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Käyttäjätunnus ei ole enää käytössä" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "mitätöinnin syy: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "mitätöintikommentti: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMlLoO" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Luottamusarvoa ei ole asetettu seuraavalle:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " aka \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Tämä avain todennäköisesti kuuluu haltijalle\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = En tiedä\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = EN luota\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Luotan ehdottomasti\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = takaisin päävalikkoon\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " o = ohita tämä avain\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " l = lopeta\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Valintasi? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Haluatko varmasti luottaa tähän avaimeen ehdottomasti? " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Varmennepolku ehdottomasti luotettuun julkiseen avaimeen:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lX: Mikään ei takaa sitä, että allekirjoitus todella kuuluu " "haltijalleen.\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lX: Mikään ei takaa sitä, että allekirjoitus todella kuuluu " "haltijalleen.\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "Tämä avain todennäköisesti kuuluu haltijalle\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Tämä on oma avain\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Avaimen kuulumista nimetylle käyttäjätunnukselle EI voida varmistaa.\n" "Jos *todella* tiedät mitä olet tekemässä, vastaa seuraavaan\n" "kysymykseen kyllä\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Haluatko käyttää tätä avainta kaikesta huolimatta? " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "VAROITUS: Käytettyyn avaimeen ei luoteta!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "VAROITUS: tämä avain saattaa olla mitätöity (mitätöintiavainta ei " "saatavilla)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "VAROITUS: Tämän avaimen nimetty mitätöijä on mitätöinyt avaimen!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "VAROITUS: Tämän avaimen haltija on mitätöinyt avaimen!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " Tämä voi merkitä sitä, että allekirjoitus on väärennös.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "VAROITUS: Haltija on mitätöinyt tämän aliavaimen!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Huom: Tämä avain on poistettu käytöstä\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Huom: Tämä avain on vanhentunut!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "VAROITUS: Tätä avainta ei ole varmennettu luotettavalla allekirjoituksella!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Mikään ei takaa sitä, että allekirjoitus todella kuuluu " "haltijalleen.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "VAROITUS: Tähän avaimeen EI luoteta!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Allekirjoitus on luultavasti VÄÄRENNÖS.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "VAROITUS: Tätä avainta ei ole varmennettu tarpeeksi luotettavalla \n" "allekirjoituksella!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Ei ole varmaa, että allekirjoitus kuuluu haltijalle.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ohitettu: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ohitettu: julkinen avain on jo olemassa\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Et määritellyt käyttäjätunnusta. (voit käyttää valitsinta \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Syötä käyttäjätunnus. Lopeta tyhjällä rivillä: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Käyttäjätunnusta ei löydy.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "ohitettu: julkinen avain on jo asetettu oletusvastaanottajaksi\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Julkinen avain on poistettu käytöstä\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "ohitettu: julkinen avain on jo asetettu\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "tuntematon oletusvastaanottaja \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s ohitettu: julkinen avain on poistettu käytöstä\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "ei kelvollisia vastaanottajia\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "dataa ei ole tallennettu, käytä valitsinta \"--output\" tallentaaksesi\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "virhe luotaessa \"%s\": %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Erillinen allekirjoitus.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Anna datatiedoston nimi: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "luetaan vakiosyötettä ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "ei allekirjoitettua dataa\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "allekirjoitetun datan \"%s\" avaaminen ei onnistu\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "nimetön vastaanottaja; yritän käyttää salaista avainta %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "ok, nimetön vastaanottaja olet sinä.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "vanhaa DEK-koodaus ei tueta\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "salausalgoritmi %d%s on tuntematon tai poistettu käytöstä\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "HUOM: salausalgoritmia %d ei löydy valinnoista\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "HUOM: salainen avain %08lX vanheni %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "HUOM: avain on mitätöity!" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet epäonnistui: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "avain %08lX: ei käyttäjätunnusta\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Mitätöinnin tekee:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Tämä on arkaluonteinen mitätöintiavain)\n" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Luo tälle avaimelle mitätöintivarmenne? " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "ASCII-koodattu tuloste määritetty.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet epäonnistui: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Mitätöintivarmenne luotu.\n" #: g10/revoke.c:411 #, fuzzy, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "mitätöintiavainta ei löydy avaimelle \"%s\"\n" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "salaista avainta \"%s\" ei löydy: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "ei vastaavaa julkista avainta: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "julkinen avain ei täsmää salaiseen avaimeen!\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Luo tälle avaimelle mitätöintivarmenne? " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "tuntematon suojausalgoritmi\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "HUOM: Tätä avainta ei ole suojattu!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Mitätöintivarmenne luotu.\n" "\n" "Ole hyvä ja siirrä se medialle, jonka voit piilottaa; jos Mallory saa \n" "käsiinsä tämän varmenteen, hän voi tehdä sillä avaimesta " "käyttökelvottoman. \n" "On järkevää tulostaa tämä varmenne ja tallentaa se siltä varalta, että \n" "mediastasi tulee lukukelvoton. Mutta varoituksen sanana: Tietokoneesi \n" "tulostusjärjestelmä saattaa tallentaa datan ja saattaa sen muiden " "saataville!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Valitse mitätöinnin syy:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Peru" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Todennäköisesti haluat valita %d tässä)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Syötä vapaaehtoinen kuvaus; lopeta tyhjään riviin:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Mitätöinnin syy: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Kuvausta ei annettu)\n" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "Kelpaako tämä? " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "salaisen avaimen osat eivät ole käytettävissä\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "suojausalgoritmi %d%s ei ole käytettävissä\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "suojausalgoritmi %d%s ei ole käytettävissä\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Salasana ei kelpaa; yritä uudestaan" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "VAROITUS: Havaittiin heikko avain - vaihda salasanaa uudestaan.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "luodaan paheksuttava 16-bittinen tarkistussumma salaisen avaimen suojaksi\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "luotu avain on heikko - yritän uudestaan\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "heikon avaimen luomista symmetriselle salaimelle ei voitu välttää; \n" "yritettiin %d kertaa!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "VAROITUS: allekirjoitustiiviste ei täsmää viestin kanssa\n" #: g10/sig-check.c:99 #, fuzzy, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "VAROITUS: allekirjoitusaliavain %08lX ei ole ristiinvarmennettu\n" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "VAROITUS: allekirjoitusaliavaimella %08lX on epäkelpo ristiinvarmennus\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "julkinen avain %08lX on %lu sekuntia uudempi kuin allekirjoitus\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "avain on luotu %lu sekunti tulevaisuudessa (on tapahtunut aikahyppy tai\n" "kellon kanssa on ongelmia)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "avain on luotu %lu sekuntia tulevaisuudessa (on tapahtunut aikahyppy tai\n" "kellon kanssa on ongelmia)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "HUOM: allekirjoitusavain %08lX vanheni %s\n" # Ensimmäinen %s on binary, textmode tai unknown, ks. alla #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%sallekirjoitus, tiivistealgoritmi %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "Epäkelpo allekirjoitus avaimelta %08lX oletettavasti johtuen tuntemattomasta " "\"critical bit\":istä\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "avain %08lX: ei vastaavaa aliavainta aliavaimen mitätöintipaketille\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "avain %08lX: ei aliavainta aliavaimen liitosallekirjoitukselle\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "VAROITUS: %%-laajennus ei onnistu (liian suuri). Käytetään " "laajentamatonta.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "VAROITUS: käytäntö-url:n %%-laajennus ei onnistu (liian suuri). \n" "Käytetään laajentamatonta.\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "VAROITUS: käytäntö-url:n %%-laajennus ei onnistu (liian suuri). \n" "Käytetään laajentamatonta.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "luodun allekirjoituksen tarkistus epäonnistui: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s-allekirjoitus lähettäjältä: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "voit tehdä erillisiä allekirjoituksia PGP 2.x -muodon avaimilla \n" "vain --pgp2-tilassa\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "valittua tiivistesalgoritmia %s (%d) ei löydy vastaanottajan valinnoista\n" #: g10/sign.c:960 msgid "signing:" msgstr "allekirjoitetaan:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "PGP 2.x -muodon avaimilla voi allekirjoittaa tekstimuotoon \n" "vain --pgp2-tilassa\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "käytetään %s-salausta\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "avainta ei ole merkitty turvattomaksi - sitä ei voida käyttää jäljitellyn\n" "satunnaislukugeneraattorin kanssa!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "ohitetaan \"%s\": kopio\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "ohitetaan \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "ohitetaan: salainen avain on jo paikalla\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "ohitetaan \"%s\": tämä on PGP:n luoma ElGamal-avain, jolla ei voi " "allekirjoittaa turvallisesti!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "luottamustietue %lu, tyyppi %d: kirjoittaminen epäonnistui: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Luettelo annettuista luottamusarvoista, luotu %s\n" "# (Käytä \"gpg --import-ownertrust\" palauttaaksesi ne)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "virhe luettaessa tiedostoa \"%s\": %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "rivi on liian pitkä\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "virhe: sormenjälki on väärä\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "tuo luottamusasteet" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "virhe etsittäessä luottamustietuetta: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "lukuvirhe: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: synkronointi epäonnistui: %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "tiedostoa \"%s\" ei voi luoda: %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "tiedostoa \"%s\" ei voi avata\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek epäonnistui: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: kirjoittaminen epäonnistuin (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "trustdb-tapahtuma on liian suuri\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "tiedostoa \"%s\" ei voi sulkea: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: hakemistoa ei ole olemassa!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: versiotietueen luonti epäonnistui: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: luotu trustdb ei kelpaa\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trustdb luotu\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "HUOM: trustdb:n ei voida kirjoittaa\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: trustdb ei kelpaa\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: hajautustaulukon luonti ei onnistu: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: virhe päivitettäessä versiotietuetta: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: virhe luettaessa versiotietuetta: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: virhe kirjoitettaessa versiotietuetta: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek epäonnistui: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: luku epäonnistui (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: ei ole trustdb-tiedosto\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versiotietue tietuenumerolla %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: tiedostoversio %d ei kelpaa\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: virhe luettaessa vapaata tietuetta: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: virhe kirjoitettaessa hakemistotietuetta: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: tietueen nollaaminen epäonnistui: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: tietueeseen lisääminen epäonnistui: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: trustdb luotu\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "yli %d merkkiä pitkiä tekstirivejä ei voi käsitellä\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "syöterivi on yli %d merkkiä pitkä\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "\"%s\" ei kelpaa pitkänä avaintunnuksena\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "avain %08lX: hyväksytty luotettuna avaimena\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "avain %08lX esiintyy trustdb:ssä useammin kuin kerran\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" "avain %08lX: luotetulle avaimelle ei löydy julkista avainta - ohitetaan\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "Avain on määritelty ehdottoman luotettavaksi.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "luottamustietue %lu, pyyntötyyppi %d: luku epäonnistui: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "luottamustietue %lu ei ole pyydettyä tyyppiä %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "[mitätöity] " #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "[vanhentunut] " #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "tuntematon " #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 #, fuzzy msgid "never" msgstr "ei koskaan" #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "trustdb:n tarkistusta ei tarvita\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "seuraava trustdb tarkistus %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "trustdb:n tarkistusta ei tarvita\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "trustdb:n tarkistusta ei tarvita\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "julkista avainta %08lX ei löydy: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "tee --check-trustdb, kiitos\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "tarkistetaan trustdb:tä\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d avainta käsitelty (%d kelpoisuuslaskuria tyhjätty)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "ehdottomasti luotettavia avaimia ei löytynyt\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "ehdottomasti luotettu julkinen avain %08lX ei löytynyt\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "luottamustietue %lu, tyyppi %d: kirjoittaminen epäonnistui: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "allekirjoitusta ei voi varmistaa.\n" "Muista, että allekirjoitustiedosto (.sig tai .asc)\n" "tulee antaa komentorivillä ensimmäisenä.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "syöterivi %u on liian pitkä tai rivinvaihto puutuu\n" #: util/errors.c:53 msgid "general error" msgstr "yleinen virhe" #: util/errors.c:54 msgid "unknown packet type" msgstr "tuntematon pakettityyppi" #: util/errors.c:55 msgid "unknown version" msgstr "tuntematon versio" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "tuntematon julkisen avaimen algoritmi" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "tuntematon tiivistealgoritmi" #: util/errors.c:58 msgid "bad public key" msgstr "julkinen avain ei kelpaa" #: util/errors.c:59 msgid "bad secret key" msgstr "salainen avain ei kelpaa" #: util/errors.c:60 msgid "bad signature" msgstr "allekirjoitus ei täsmää" #: util/errors.c:61 msgid "checksum error" msgstr "tarkistussumma ei täsmää" #: util/errors.c:62 msgid "bad passphrase" msgstr "väärä salasana" #: util/errors.c:63 msgid "public key not found" msgstr "julkista avainta ei löydy" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "tuntematon salausalgoritmi" #: util/errors.c:65 msgid "can't open the keyring" msgstr "avainrenkaan avaaminen ei onnistu" #: util/errors.c:66 msgid "invalid packet" msgstr "virheellinen paketti" #: util/errors.c:67 msgid "invalid armor" msgstr "virheellinen ascii-koodaus" #: util/errors.c:68 msgid "no such user id" msgstr "käyttäjätunnusta ei löydy" #: util/errors.c:69 msgid "secret key not available" msgstr "salaista avainta ei löydy" #: util/errors.c:70 msgid "wrong secret key used" msgstr "käytetty salainen avain on väärä" #: util/errors.c:71 msgid "not supported" msgstr "ei tuettu" #: util/errors.c:72 msgid "bad key" msgstr "avain ei kelpaa" #: util/errors.c:73 msgid "file read error" msgstr "virhe tiedostoa luettaessa" #: util/errors.c:74 msgid "file write error" msgstr "virhe tiedostoon kirjoitettaessa" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "tuntematon pakkausalgoritmi" #: util/errors.c:76 msgid "file open error" msgstr "virhe tiedostoa avattaessa" #: util/errors.c:77 msgid "file create error" msgstr "virhe tiedostoa luotaessa" #: util/errors.c:78 msgid "invalid passphrase" msgstr "väärä salasana" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "julkisen avaimen algoritmi ei ole käytössä" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "salausalgoritmi ei ole käytössä" #: util/errors.c:81 msgid "unknown signature class" msgstr "tuntematon allekirjoitusluokka" #: util/errors.c:82 msgid "trust database error" msgstr "luottamustietokantavirhe" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI ei kelpaa" #: util/errors.c:84 msgid "resource limit" msgstr "resurssiraja" #: util/errors.c:85 msgid "invalid keyring" msgstr "virheellinen avainrengas" #: util/errors.c:86 msgid "bad certificate" msgstr "virheellinen varmenne" #: util/errors.c:87 msgid "malformed user id" msgstr "väärin muotoiltu käyttäjätunnus" #: util/errors.c:88 msgid "file close error" msgstr "virhe tiedostoa suljettaessa" #: util/errors.c:89 msgid "file rename error" msgstr "virhe nimettäessä tiedostoa uudelleen" #: util/errors.c:90 msgid "file delete error" msgstr "virhe tiedostoa poistettaessa" #: util/errors.c:91 msgid "unexpected data" msgstr "odottamatonta dataa" #: util/errors.c:92 msgid "timestamp conflict" msgstr "aikaleima ei täsmää" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "käyttökelvoton julkisen avaimen algoritmi" #: util/errors.c:94 msgid "file exists" msgstr "tiedosto on olemassa" #: util/errors.c:95 msgid "weak key" msgstr "heikko avain" #: util/errors.c:96 msgid "invalid argument" msgstr "virheellinen argumentti" #: util/errors.c:97 msgid "bad URI" msgstr "URI ei kelpaa" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI-muotoa ei tueta" #: util/errors.c:99 msgid "network error" msgstr "verkkovirhe" #: util/errors.c:101 msgid "not encrypted" msgstr "salaamaton" #: util/errors.c:102 msgid "not processed" msgstr "ei käsitelty" #: util/errors.c:104 msgid "unusable public key" msgstr "julkista avainta ei voi käyttää" #: util/errors.c:105 msgid "unusable secret key" msgstr "salaista avainta ei voi käyttää" #: util/errors.c:106 msgid "keyserver error" msgstr "avainpalvelinvirhe" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "Peru" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "salaamaton" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "ei allekirjoitettua dataa\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "...tämä on ohjelmistovika (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "olet löytänyt ohjelmistovian ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "kyllä|kylla|joo" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "kK" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "ei" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "eE" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "lopeta|sulje" #: util/miscutil.c:443 msgid "qQ" msgstr "lLsS" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "VAROITUS: käytetään suojaamatonta muistia!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "lisätietoja osoitteesta http://www.gnupg.org/documentation/faqs.html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "toiminto on mahdollinen vain, jos suojattu muisti alustetaan\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(olet ehkä käyttänyt tehtävään väärää ohjelmaa)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "VAROITUS: omistussuhde kohteessa %s \"%s\" ei ole turvallinen\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "VAROITUS: oikeudet kohteessa %s \"%s\" eivät ole turvallisia\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "VAROITUS: %s \"%s\" hakemiston oikeudet eivät ole turvallisia\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "VAROITUS: Hakemiston %s \"%s\" oikeudet eivät ole turvallisia\"\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "Oikeudet eivät ole turvallisia, salainlaajennuksia \"%s\" ei ladattu\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "IDEA-salaimen liitännäinen ei käytettävissä\n" #~ msgid "Command> " #~ msgstr "Komento> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA-avainparissa on 1024 bittiä.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "trustdb on turmeltunut; suorita \"gpg --fix-trustdb\"\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "notaatiodataa ei voi laittaa v3-allekirjoituksiin (PGP 2.x -tyyliset)\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "notaatiodataa ei voi laittaa v3-avainallekirjoituksiin (PGP 2.x -" #~ "tyyliset)\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "käytäntö-URL:ia ei voi laittaa v3-allekirjoituksiin (PGP 2.x -tyyliset)\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ "käytäntö-URL:ia ei voi laittaa v3-avainallekirjoituksiin (PGP 2.x -" #~ "tyyliset)\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA vaatii 160-bittisen tiivistealgoritmin käyttöä\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "lue lisätietoja osoitteesta http://www.gnupg.org/why-not-idea.html\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "notaation nimen täytyy sisältää vain tulostettavia merkkejä tai " #~ "välilyöntejä, ja sen täytyy loppua merkkiin \"=\"\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "käyttäjänotaatin täytyy sisältää \"@\"-merkki\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "käyttäjänotaatin täytyy sisältää \"@\"-merkki\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "notaatiosssa ei saa olla erikoismerkkejä\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "VAROITUS: löydettiin väärin muotoiltua notaatiodataa\n" #~ msgid "not human readable" #~ msgstr "ei ihmisten luettavissa" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "lue asetukset tiedostosta" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "lue asetukset tiedostosta" #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [vanhenee: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "avain %08lX: odottamaton allekirjoitusluokka (0x%02X) - ohitetaan\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "komentoa %s \"%s\" ei voi suorittaa: %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "käyttäjätunnus \"%s\" on jo mitätöity\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "virhe luotaessa salasanaa: %s\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "väärä salasana tai tuntematon salausalgoritmi (%d)\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "agentille ei voida asettaa pid:tä\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "palvelin ei lue agentin FD:tä\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "palvelin ei kirjoita agentille FD:tä\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "gpg-agentin kanssa yhteysongelma\n" #~ msgid "passphrase too long\n" #~ msgstr "salasana on liian pitkä\n" #~ msgid "invalid response from agent\n" #~ msgstr "agentin lähettämä vastaus ei kelpaa\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "agentin käytössä on ongelmia: agentti vastaa 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "valitse toissijainen avain N" #~ msgid "list signatures" #~ msgstr "näytä allekirjoitukset" #~ msgid "sign the key" #~ msgstr "allekirjoita avain" #~ msgid "add a secondary key" #~ msgstr "lisää toissijainen avain" #~ msgid "delete signatures" #~ msgstr "poista allekirjoitus" #~ msgid "change the expire date" #~ msgstr "muuta voimassoloaikaa" #~ msgid "set preference list" #~ msgstr "näytä valinnat" #~ msgid "updated preferences" #~ msgstr "päivitä valinnat" #~ msgid "No secondary key with index %d\n" #~ msgstr "Indeksillä %d ei löydy toissijaista avainta\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrlsign-key käyttäjätunnus" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key käyttäjätunnus" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "tee erillinen allekirjoitus" #~ msgid "sign the key non-revocably" #~ msgstr "allekirjoita avain mitätöimättömästi" #~ msgid "sign the key locally and non-revocably" #~ msgstr "allekirjoita avain paikallisesti ja mitätöimättömästi" #~ msgid "q" #~ msgstr "q" #~ msgid "help" #~ msgstr "apua" #~ msgid "list" #~ msgstr "list" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "debug" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "yleinen virhe" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "tallenna" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "key" #~ msgid "check" #~ msgstr "check" #~ msgid "c" #~ msgstr "c" #~ msgid "sign" #~ msgstr "sign" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "sign" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "primary" #~ msgstr "primary" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #, fuzzy #~ msgid "keyserver" #~ msgstr "avainpalvelinvirhe" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "" #~ "tiivistealgoritmia \"%s\" voidaan ainoastaan lukea tässä julkaisussa\n" #~ 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 "" #~ "Luomassa uutta %s-avainparia.\n" #~ " pienin sallittu avainkoko on 768 bittiä\n" #~ " oletusavainkoko on 1024 bittiä\n" #~ " suurin suositeltava avainkoko on 2048 bittiä\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA sallii avaimen koot vain väliltä 512-1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "avainkoko on liian pieni; RSA vaatii vähintään 1024.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "avainkoko on liian pieni; pienin sallittu arvo on 768.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "avainkoko on liian suuri; suurin sallittu arvo on %d.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "2048 bittiä suurempia avaimia ei suositella, koska\n" #~ "laskenta kestää TODELLA pitkään!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "Haluatko varmasti tämän kokoisen avaimen? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Hyvä on, mutta muista että näyttösi ja näppäimistösi säteily on myös " #~ "alttiina salakuuntelulle!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Kokeellisia algoritmeja ei pitäisi käyttää!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "tämän salausalgoritmin käyttöä paheksutaan; ole hyvä ja käytä " #~ "standardimpaa!\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "kirjoitetaan kohteeseen \"%s\"\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "valitan, tätä ei voi tehdä eräajossa\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr "avainta \"%s\" ei löydy: %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "tiedostoa \"%s\" ei voi luoda: %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "ei voi avata tiedostoa: %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " aka \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "Avain %08lX: avain on mitätöity!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "avain %08lX: aliavain on mitätöity!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: avain on vanhentunut\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Avaimeen EI luoteta\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (salaus ja allekirjoitus)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA (vain allekirjoitus)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA (salaus ja allekirjoitus)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA (vain salaus)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA (salaus ja allekirjoitus)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: ei voida avata kohdetta: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: VAROITUS: tiedosto on tyhjä\n" #~ msgid "can't open %s: %s\n" #~ msgstr "tiedostoa %s ei voi avata: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = Luotan osittain\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = Luotan täysin\n" #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "allekirjoitettu paikallisesti avaimellasi %08lX %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: kohteeseen ei päästä: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: ei voi luoda lukitusta\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: ei voi tehdä lukkoa\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: ei voi luoda: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: hakemistoa ei voi luoda: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Vastaa \"kyllä\" jos haluat kaikesta huolimatta käyttää tätä mitätöityä " #~ "avainta." #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "Valokuvaa \"%s\" ei voi avata: %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "ei voi avata tiedostoa: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "virhe: kaksoispiste puuttuu\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "virhe: ei luottamusarvoa\n" #~ msgid " (main key ID %08lX)" #~ msgstr " (pääavaimen tunnus %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! aliavain on mitätöity: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- väärennetty mitätöinti löydetty\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? mitätöinnin tarkistuksessa ongelmia: %s\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr " [vanhenee: %s]" #~ msgid " [expires: %s]" #~ msgstr " [vanhenee: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "[mitätöity] " #~ msgid "can't create %s: %s\n" #~ msgstr "ei voida luoda kohdetta %s: %s\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "VAROITUS: tiiviste \"%s\" ei ole osa OpenPGP:tä. Käytä omalla " #~ "vastuullasi!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[tiedostot]|salaa tiedostot" #~ msgid "store only" #~ msgstr "vain tallennus" #~ msgid "|[files]|decrypt files" #~ msgstr "|[tiedostot]|avaa tiedostot" #~ msgid "sign a key non-revocably" #~ msgstr "allekirjoita avain mitätöimättömästi" #~ msgid "sign a key locally and non-revocably" #~ msgstr "allekirjoita avain paikallisesti ja mitätöimättömästi" #~ msgid "list only the sequence of packets" #~ msgstr "luettele vain sarja paketteja" #~ msgid "export the ownertrust values" #~ msgstr "vie luottamusasteet" #~ msgid "unattended trust database update" #~ msgstr "automaattinen luottamustietokannan päivitys" #~ msgid "fix a corrupted trust database" #~ msgstr "korjaa turmeltunut luottamustietokanta" #~ msgid "De-Armor a file or stdin" #~ msgstr "Pura ascii-koodaus tiedostosta tai vakiosyötteestä" #~ msgid "En-Armor a file or stdin" #~ msgstr "Ascii-koodaa tekstitiedosto tai vakiosyöte" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NIMI|käytä NIMI oletusvastaanottajana" #~ msgid "use the default key as default recipient" #~ msgstr "käytä oletusavainta oletusvastaanottajana" #~ msgid "don't use the terminal at all" #~ msgstr "älä käytä lainkaan päätettä" #~ msgid "force v3 signatures" #~ msgstr "käytä aina v3-allekirjoituksia" #~ msgid "do not force v3 signatures" #~ msgstr "älä käytä aina v3-allekirjoituksia" #~ msgid "force v4 key signatures" #~ msgstr "käytä aina v4-allekirjoituksia" #~ msgid "do not force v4 key signatures" #~ msgstr "älä käytä aina v3-allekirjoituksia" #~ msgid "always use a MDC for encryption" #~ msgstr "käytä aina MDC:tä salaamiseen" #~ msgid "never use a MDC for encryption" #~ msgstr "älä koskaan käytä MDC:tä salaamiseen" #~ msgid "use the gpg-agent" #~ msgstr "käytä gpg-agentia" #~ msgid "batch mode: never ask" #~ msgstr "eräajo: älä kysy mitään" #~ msgid "assume yes on most questions" #~ msgstr "oleta myönteinen vastaust useimpiin kysymyksiin" #~ msgid "assume no on most questions" #~ msgstr "oleta kielteinen vastaust useimpiin kysymyksiin" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "lisää tämä avainrengas avainrenkaiden luetteloon" #~ msgid "add this secret keyring to the list" #~ msgstr "lisää tämä salainen avainrengas luetteloon" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NIMI|käytä oletusarvoisesti salaista avainta NIMI" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|PALVELIN|käytä tätä palvelinta avainten etsimiseen" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NIMI|aseta päätteen merkistöksi NIMI" #~ msgid "|[file]|write status info to file" #~ msgstr "|[tiedosto]|kirjoita tilatiedot tiedostoon" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|AVAIN_ID|luota ehdottomasti tähän avaimeen" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|TIEDOSTO|lataa laajennusmoduuli TIEDOSTO" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "jäljittele RFC1991:ssä kuvattua toimintamuotoa" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "" #~ "aseta kaikki paketti-, salain- ja tiivistevaihtoehdot OpenPGP-muotoon" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ "aseta kaikki paketti-, salain- ja tiivistevaihtoehdot PGP 2.x -muotoon" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|käytä salasanoissa toimintatapaa N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "|NIMI|käytä salasanoihin viestintiivistealgoritmia NIMI" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NIMI|käytä salasanoihin salausalgoritmia NIMI" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NIMI|käytä salausalgoritmia NIMI" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NIMI|käytä viestintiivistealgoritmia NIMI" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|käytä pakkausalgoritmia N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "jätä avaintunnistekenttä pois salatuista paketeista" #~ msgid "Show Photo IDs" #~ msgstr "Näytä valokuvatunnisteet" #~ msgid "Don't show Photo IDs" #~ msgstr "Älä näytä valokuvatunnisteita" #~ msgid "Set command line to view Photo IDs" #~ msgstr "Aseta valokuvatunnisteiden katsomiskomento" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "" #~ "tiivistealgoritmia \"%s\" voidaan ainoastaan lukea tässä julkaisussa\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "pakkausalgoritmin täytyy olla väliltä %d..%d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Ei ole varmaa, että tämä avain todella kuuluu haltijalleen, " #~ "mutta \n" #~ "avain hyväksytään siitä huolimatta\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "valinta %c%lu ei ole pätevä\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "avain %08lX: ei ole rfc2440-avain - ohitetaan\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "HUOM: Elgamal-ensisijainen avain havaittu - tämän tuominen voi kestää " #~ "hetken\n" #~ msgid " (default)" #~ msgstr " (oletusarvo)" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX luotu: %s vanhenee: %s" #~ msgid "Policy: " #~ msgstr "Käytäntö: " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "avainpalvelimelta ei saa avainta: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "virhe lähettäessä kohteeseen \"%s\": %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "kohteeseen \"%s\" lähettäminen onnistui (tila=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "virhe lähettäessä kohteeseen \"%s\": tila=%u\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "tämä avainpalvelin ei tue valitsinta --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr " avainpalvelimelta ei pysty etsimään: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "avain %08lX: tämä on PGP:n luoma ElGamal-avain, jota EI ole turvallista \n" #~ "käyttää allekirjoituksiin!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "avain %08lX on luotu %lu sekuntia tulevaisuudessa (on tapahtunu aikahyppy " #~ "tai\n" #~ "kellon kanssa on ongelmia\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "avain %08lX on luotu %lu sekuntia tulevaisuudessa (on tapahtunut " #~ "aikahyppy tai\n" #~ "kellon kanssa on ongelmia)\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "avain %08lX on määritelty ehdottoman luotettavaksi:\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "" #~ "allekirjoitus Elgamal-allekirjoitusavaimella %08lX avaimelle %08lX " #~ "ohitettu\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "" #~ "allekirjoitus avaimelta %08lX Elgamal-allekirjoitusavaimelle %08lX " #~ "ohitettu\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "tarkistetaan syvyyteen %d allekirjoitettu=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/" #~ "%d/%d\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Valitse käytettävä algoritmi.\n" #~ "\n" #~ "DSA (eli DSS) on digitaalinen allekirjoitusalgoritmi, jota voidaan \n" #~ "käyttää vain allekirjoituksiin. DSA:ta suositellaan, koska sillä " #~ "tuotetut \n" #~ "allekirjoitukset voidaan varmistaa paljon nopeammin verrattuna ElGamal:" #~ "iin.\n" #~ "\n" #~ "ElGamal-algoritmia voidaan käyttää sekä allekirjoituksiin että \n" #~ "salaamiseen. OpenPGP erottaa seuraavat kaksi toimintatapaa toisistaan:\n" #~ "pelkkä allekirjoitus ja allekirjoitus+salaus. Toimintatavat ovat\n" #~ "itseasiassa samanlaiset, mutta joitakin parametrejä täytyy valita " #~ "erityisellä\n" #~ "tavalla luotaessa turvallista allekirjoitusavainta. Tämä ohjelma " #~ "pystyy \n" #~ "siihen, mutta toiset OpenPGP-sovellukset eivät välttämättä pysty \n" #~ "tulkitsemaan allekirjoitus+salaus-muotoa.\n" #~ "\n" #~ "Ensisijainen avain täytyy aina olla allekirjoittamiseen sopiva avain; \n" #~ "tämä on syy, miksi vain salaus-ElGamal-avain ei ole tässä valittavissa \n" #~ "tässä valikossa." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Vaikka nämä avaintyypit on määritelty RFC2440:ssa, niitä ei \n" #~ "suositella, koska kaikki ohjelmat eivät tue niitä, ja niillä \n" #~ "tuotetut allekirjoitukset ovat melko suuria ja näin ollen hitaita \n" #~ "tarkistaa." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "tähän mennessä käsitelty %lu avainta (%lu allekirjoitusta)\n" #~ msgid "key incomplete\n" #~ msgstr "avain vaillinainen\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "avain %08lX on vaillinainen\n" gnupg-1.4.20/po/it.po0000644000175000017500000055764212635457220011262 00000000000000# GnuPG italian translation # Copyright (C) 1998, 1999, 2001, 2002, 2012, 2013, 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gnupg package. # Marco d'Itri , 1998, 1999, 2001, 2002. # Gruppo traduzione italiano di Ubuntu , 2012, 2013 # Milo Casagrande , 2013, 2014. # msgid "" msgstr "" "Project-Id-Version: gnupg\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2014-11-16 16:08+0100\n" "Last-Translator: Milo Casagrande \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2013-12-26 14:41+0000\n" "X-Generator: Poedit 1.6.10\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "impossibile generare un numero primo con pbits=%u e qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "impossibile generare un numero primo con meno di %d bit\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "modulo di raccolta entropia non rilevato\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "impossibile bloccare \"%s\": %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "attesa del blocco su \"%s\"...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "impossibile aprire \"%s\": %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "impossibile eseguire stat su \"%s\": %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "\"%s\" non è un file regolare - ignorato\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "nota: il file random_seed è vuoto\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "ATTENZIONE: dimensioni del file random_seed non valide - non usato\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "impossibile leggere \"%s\": %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "nota: il file random_seed non è stato aggiornato\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "impossibile creare \"%s\": %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "impossibile scrivere su \"%s\": %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "impossibile chiudere \"%s\": %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "ATTENZIONE: in uso generatore di numeri casuali non sicuro.\n" #: cipher/random.c:894 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 una soluzione improvvisata\n" "per fare funzionare il programma - non è assolutamente un RNG forte!\n" "\n" "NON USARE ALCUN DATO GENERATO DA QUESTO PROGRAMMA!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Attendere, raccolta dell'entropia. Durante l'attesa è possibile svolgere \n" "qualche altro lavoro, questo migliorerà la qualità dell'entropia.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Non ci sono abbastanza byte casuali disponibili. Svolgere qualche altro\n" "lavoro per dare al SO la possibilità di raccogliere altra entropia\n" "(sono necessari altri %d byte)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "archiviazione dell'impronta digitale non riuscita: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "archiviazione della data di creazione non riuscita: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "lettura della chiave pubblica non riuscita: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "la risposta non contiene i dati della chiave pubblica\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "la risposta non contiene il modulo RSA\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "la risposta non contiene l'esponente pubblico RSA\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "viene utilizzato come PIN predefinito %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "impossibile usare come PIN predefinito %s: %s - l'utilizzo di altre " "impostazioni predefinite sta per essere disabilitato\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Inserire il PIN%%0A [firme create:%lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Inserire il PIN" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN callback ha restituito l'errore: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "Il PIN per CHV%d è troppo corto; la lunghezza minima è %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "verifica di CHV%d non riuscita: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "errore nel recuperare lo stato del CHV dalla scheda\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "la scheda è bloccata in modo permanente.\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "%d tentativi rimanenti per il PIN amministrativo prima che la scheda sia " "bloccata permanentemente\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Inserire il PIN di Amministratore%%0A[tentativi rimasti: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Inserire il PIN di amministratore" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "l'accesso ai comandi di amministrazione non è configurato\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Codice di ripristino non disponibile o non più disponibile\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Inserire il codice di ripristino per la scheda" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Il codice di ripristino è troppo corto; la lunghezza minima è %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Nuovo codice di ripristino" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Nuovo PIN amministrativo" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Nuovo PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "errore nell'ottenere il nuovo PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "errore nel leggere i dati dell'applicazione\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "errore nel leggere il DO dell'impronta digitale\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "la chiave esiste già\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "la chiave esistente verrà sostituita\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "generazione di una nuova chiave\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "scrittura della nuova chiave\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "timestamp di creazione mancante\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "modulo RSA mancante o non della dimensione di %d bit\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "esponente RSA pubblico mancante o più grande di %d bit\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "numero primo RSA %s mancante o non della dimensione di %d bit\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "archiviazione della chiave non riuscita: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "attendere mentre la chiave viene generata...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "generazione della chiave non riuscita\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "generazione della chiave completata (%d secondi)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "struttura della scheda OpenPGP non valida (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "l'impronta digitale sulla scheda non corrisponde a quella richiesta\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "la scheda non supporta l'algoritmo di digest %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "firme create finora: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "la verifica del PIN amministratore è momentaneamente proibita tramite questo " "comando\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "impossibile accedere a %s - scheda OpenPGP non valida?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armatura: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "header dell'armatura non valido: " #: g10/armor.c:459 msgid "armor header: " msgstr "header dell'armatura: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "header della firma in chiaro non valido\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "header dell'armatura sconosciuto: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "firme in chiaro annidate\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "armatura inattesa: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "riga protetta con il trattino non valida: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "carattere radix64 non valido %02x saltato\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "eof prematura (nessun CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "eof prematura (nel CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC malformato\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "errore nel CRC; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "eof prematura (nel trailer)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "errore nella riga del trailer\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "non sono stati trovati dati OpenPGP validi.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armatura non valida: riga più lunga di %d caratteri\n" #: g10/armor.c:1296 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 con qualche bug\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "scheda OpenPGP non disponibile: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "rilevata scheda OpenPGP n. %s\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "impossibile eseguire in modalità batch\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Questo comando è disponibile solo per schede di versione 2\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Selezione? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[non impostato]" #: g10/card-util.c:512 msgid "male" msgstr "maschio" #: g10/card-util.c:513 msgid "female" msgstr "femmina" #: g10/card-util.c:513 msgid "unspecified" msgstr "non specificato" # ??? (Md) #: g10/card-util.c:540 msgid "not forced" msgstr "non forzato" #: g10/card-util.c:540 msgid "forced" msgstr "forzato" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Errore: attualmente è permesso solo ASCII semplice.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Errore: Il carattere \"<\" non può essere usato.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Errore: non sono ammessi doppi spazi.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Cognome del proprietario della scheda: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Nome del proprietario della scheda: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Errore: nome combinato troppo lungo (il limite è %d caratteri).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL per recuperare la chiave pubblica: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Errore: URL troppo lungo (il limite è %d caratteri).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "errore nell'allocare sufficiente memoria: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "errore nel leggere \"%s\": %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "errore nella scrivere \"%s\": %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Dati login (nome account): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Errore: dati login troppo lunghi (il limite è %d caratteri).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Dati DO privati: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Errore: dati DO privati troppo lunghi (il limite è %d caratteri).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Preferenze della lingua: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Errore: lunghezza della stringa di preferenze non valida.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Errore: carattere non valido nella stringa di preferenze.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Sesso ((m)aschile, (f)emminile o spazio): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Errore: risposta non valida.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "Impronta digitale CA: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Errore: impronta non valida.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "operazione su chiave non possibile: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "non è una scheda OpenPGP" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "errore nell'ottenere informazioni sulla chiave corrente: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Sostituire la chiave esistente? (s/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "Nota: non c'è alcuna garanzia che la scheda supporti la dimensione " "richiesta.\n" " Se la generazione della chiave non dovesse funzionare, controllare\n" " la documentazione della scheda per verificare quali dimensioni sono " "consentite.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Quale dimensione impostare per la chiave di firma? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Quale dimensione impostare per la chiave di cifratura? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Quale dimensione impostare per la chiave di autenticazione? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "arrotondata per eccesso a %u bit\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "Le dimensioni delle chiavi %s devono essere nell'intervallo %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "La scheda verrà ora riconfigurata per generare una chiave di %u bit\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "errore nella modifica della chiave %d in %u bit: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" "Effettuare il backup della chiave di cifratura al di fuori della scheda? (S/" "n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "Nota: le chiavi sono già memorizzate sulla scheda.\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Sostituire le chiavi esistenti? (s/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Le impostazioni di fabbrica dei PIN sono\n" " PIN = \"%s\" PIN amministrativo \"%s\"\n" "Per cambiarle usare il comando --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Selezionare il tipo di chiave da generare:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Chiave di firma\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Chiave di cifratura\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Chiave di autenticazione\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Selezione non valida.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Selezionare dove archiviare la chiave:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "algoritmo di protezione chiave sconosciuto\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "le parti segrete della chiave non sono disponibili\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "chiave segreta già archiviata su una scheda\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "errore nello scrivere la chiave sulla scheda: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "Abbandona questo menù" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "Mostra comandi amministrativi" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "Mostra questo aiuto" #: g10/card-util.c:1687 msgid "list all available data" msgstr "Elenca tutti i dati disponibili" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "Cambia il nome del proprietario della scheda" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "Cambia l'URL per recuperare la chiave" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "Preleva la chiave specificata nell'URL della scheda" #: g10/card-util.c:1693 msgid "change the login name" msgstr "Cambia il nome di login" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "Cambia le preferenze della lingua" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "Cambia il sesso del proprietario della scheda" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "Cambia l'impronta digitale di un CA" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "Commuta il flag del PIN per forzare la firma" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "Genera nuove chiavi" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "Menù per cambiare o sbloccare il PIN" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "Verifica il PIN ed elenca tutti i dati" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "Sblocca il PIN usando un codice di ripristino" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/scheda> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Solo comandi amministrativi\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "I comandi amministrativi sono permessi\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "I comandi amministrativi non sono permessi\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Comando non valido (provare \"help\")\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "lettore di schede non disponibile\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Inserire la scheda e premere Invio o \"c\" per annullare: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "selezione di openpgp non riuscita: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Rimuovere la scheda attuale e inserire quella con numero di serie:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Premere Invio quando pronto oppure inserire \"c\" per annullare: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Inserire nuovo PIN amministrativo: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Inerire nuovo PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Inserire PIN amministrativo: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Inserire PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Ripetere questo PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN ripetuto non correttamente; provare di nuovo" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "impossibile aprire \"%s\"\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output non funziona con questo comando\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "chiave \"%s\" non trovata: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "errore nel leggere il keyblock: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(a meno di non specificare la chiave tramite l'impronta digitale)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "impossibile eseguire in modalità batch senza \"--yes\"\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Eliminare questa chiave dal portachiavi? (s/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Questa è una chiave segreta: eliminarla veramente? (s/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "eliminazione del keyblock non riuscita: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "informazioni di fiducia del possessore cancellate\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "è presente una chiave segreta per la chiave pubblica \"%s\".\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "usare prima l'opzione \"--delete-secret-keys\" per eliminarla.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "errore nel creare la passhprase: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "" "impossibile usare un pacchetto ESK simmetrico a causa della modalità S2K\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "utilizzo del cifrario %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "\"%s\" è già compresso\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ATTENZIONE: \"%s\" è un file vuoto\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "in modalità --pgp2 è possibile cifrare solo su chiavi RSA lunghe al massimo " "2048 bit\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "lettura da \"%s\"\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "impossibile usare il cifrario IDEA per tutte le chiavi che si stanno " "cifrando.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "ATTENZIONE: forzare il cifrario simmetrico %s (%d) viola le preferenze del " "destinatario\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "ATTENZIONE: forzare l'algoritmo di compressione %s (%d) viola le preferenze " "del destinatario\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "forzare il cifrario simmetrico %s (%d) viola le preferenze del destinatario\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "non è possibile usare %s mentre si è in modalità %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s cifrato per: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "dati cifrati con %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "cifrato con l'algoritmo sconosciuto %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATTENZIONE: il messaggio è stato cifrato con una chiave debole nel cifrario " "simmetrico.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problema nel gestire il pacchetto cifrato\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "non è supportata l'esecuzione remota dei programmi\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "impossibile creare la directory \"%s\": %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "le chiamate a programmi esterni sono disabilitate a causa dei permessi non " "sicuri del file delle opzioni\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "questa piattaforma richiede file temporanei quando si chiamano programmi " "esterni\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "impossibile eseguire il programma \"%s\": %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "impossibile eseguire la shell \"%s\": %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "errore di sistema durante la chiamata del programma esterno: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "uscita anormale del programma esterno\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "impossibile eseguire il programma esterno\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "impossibile leggere la risposta del programma esterno: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "ATTENZIONE: impossibile rimuovere il file temporaneo (%s) \"%s\": %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "ATTENZIONE: impossibile rimuovere la directory temporanea \"%s\": %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "esporta le firme contrassegnate come solo locali" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "esporta gli attributi degli ID utente (generalmente ID fotografici)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "esporta le chiavi revocate impostate come \"sensibili\"" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "rimuove la passphrase dalle sottochiavi esportate" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "rimuove le parti non utilizzabili dalla chiave durante l'esportazione" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "rimuove quanto più possibile dalla chiave durante l'esportazione" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "esportazione delle chiavi segrete non consentita\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "chiave %s: non protetta - saltata\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "chiave %s: chiave in stile PGP 2.x - saltata\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "chiave %s: materiale della chiave sulla scheda - saltata\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "in procinto di esportare una sottochiave non protetta\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "rimozione della protezione alla sottochiave non riuscita: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" "ATTENZIONE: la chiave segreta %s non ha un codice di controllo SK semplice\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "ATTENZIONE: non è stato esportato nulla\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Comandi:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[FILE]|Crea una firma" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[FILE]|Crea una firma con testo in chiaro" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "Crea una firma separata" #: g10/gpg.c:393 msgid "encrypt data" msgstr "Cifra i dati" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "Cifratura solo con cifrario simmetrico" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "Decifra i dati (predefinito)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "Verifica una firma" #: g10/gpg.c:401 msgid "list keys" msgstr "Elenca le chiavi" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "Elenca le chiavi e le firme" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "Elenca e controlla le firme delle chiavi" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "Elenca le chiavi e le impronte digitali" #: g10/gpg.c:406 msgid "list secret keys" msgstr "Elenca le chiavi segrete" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "Genera una nuova coppia di chiavi" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "Rimuove le chiavi dal portachiavi pubblico" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "Rimuove le chiavi dal portachiavi privato" #: g10/gpg.c:411 msgid "sign a key" msgstr "Firma una chiave" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "Firma una chiave localmente" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "Firma o modifica una chiave" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "Genera un certificato di revoca" #: g10/gpg.c:416 msgid "export keys" msgstr "Esporta le chiavi" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "Esporta le chiavi su un server di chiavi" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "Importa le chiavi da un server di chiavi" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "Cerca le chiavi su un server di chiavi" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "Aggiorna tutte le chiavi da un server di chiavi" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "Importa/Incorpora delle chiavi" #: g10/gpg.c:429 msgid "print the card status" msgstr "Stampa lo stato della scheda" #: g10/gpg.c:430 msgid "change data on a card" msgstr "Modifica i dati su una scheda" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "Modifica il PIN di una scheda" #: g10/gpg.c:440 msgid "update the trust database" msgstr "Aggiorna il database della fiducia" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|ALGO [FILE...]|Stampa tutti i messaggi di digest" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opzioni:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "Crea un output ascii con armatura" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NOME|Cifra per NOME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "Usa questo ID utente per firmare o decifrare" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|Imposta a N il livello di compressione (0 disab.)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "Usa la modalità testo canonico" #: g10/gpg.c:486 msgid "use as output file" msgstr "Usa come file di output" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "Prolisso" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "Non esegue alcuna modifica" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "Chiede conferma prima di sovrascrivere" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "Utilizza un rigido comportamento OpenGPG" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "Genera messaggi compatibili con PGP 2.x" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Consultare la pagina man per un elenco completo di tutti i comandi e " "opzioni)\n" #: g10/gpg.c:576 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 Mario [FILE] Firma e cifra per l'utente Mario\n" " --clearsign [FILE] Crea una firma con testo in chiaro\n" " --detach-sign [FILE] Crea una firma separata\n" " --list-keys [FILE] Mostra le chiavi\n" " --fingerprint [FILE] Mostra le impronte digitali\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Segnalare eventuali bug a .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [OPZIONE...] [FILE...] (-h per l'aiuto)" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmi supportati:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "A chiave pubblica: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cifrari: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compressione: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "Uso: gpg [OPZIONE...] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "comandi in conflitto\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "nessun segno \"=\" trovato nella definizione del gruppo \"%s\"\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "ATTENZIONE: proprietario della directory home \"%s\" non sicuro\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "" "ATTENZIONE: proprietario del file di configurazione \"%s\" non sicuro\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "ATTENZIONE: permessi non sicuri per la directory home \"%s\"\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "ATTENZIONE: permessi non sicuri per il file di configurazione \"%s\"\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "ATTENZIONE: l'inclusione della proprietà nella directory home '%s' non è " "sicura\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "ATTENZIONE: l'inclusione della proprietà nel file di configurazione \"%s\" " "non è sicura\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "ATTENZIONE: i permessi della directory correlata alla directory home \"%s\" " "non sono sicuri\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "ATTENZIONE: i permessi della directory correlata al file di configurazione " "\"%s\" non sono sicuri\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "elemento di configurazione \"%s\" sconosciuto\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "Mostra ID fotografici nell'elencare le chiavi" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "Mostra gli URL delle politiche nell'elencare le firme" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "Mostra tutte le annotazioni nell'elencare le firme" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "Mostra le annotazioni standard IETF nell'elencare le firme" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "Mostra le annotazioni fornite dall'utente nell'elencare le firme" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "Mostra gli URL dei server di chiavi preferiti nell'elencare le firme" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "Mostra la validità dell'ID utente nell'elencare le chiavi" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "Mostra gli ID utenti revocati e scaduti nell'elencare le chiavi" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "Mostra le sottochiavi revocate e scadute nell'elencare le chiavi" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "Mostra il nome del portachiavi nell'elencare le chiavi" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "Mostra le date di scadenza nell'elencare le firme" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "Nota: ignorato il vecchio file \"%s\" delle opzioni predefinite\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "Nota: nessun file \"%s\" delle opzioni predefinite\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "file delle opzioni \"%s\": %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "lettura delle opzioni da \"%s\"\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "Nota: normalmente %s non deve essere usato.\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "\"%s\" non è una data di scadenza firma valida\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "\"%s\" non è un set di caratteri valido\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "impossibile analizzare l'URL del server di chiavi\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: opzioni del server di chiavi non valide\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "opzioni del server di chiavi non valide\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: opzioni di importazione non valide\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "opzioni di importazione non valide\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: opzioni di esportazione non valide\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "opzioni di esportazione non valide\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: opzioni di elenco non valide\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "opzioni di elenco non valide\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "Mostra ID fotografici nel verificare le firme" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "Mostra gli URL delle politiche nel verificare le firme" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "Mostra tutte le annotazioni nel verificare le firme" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "Mostra l'annotazione standard IETF nel verificare le firme" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "Mostra le annotatazioni fornite dall'utente nel verificare le firme" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "Mostra gli URL dei server di chiavi preferiti nel verificare le firme" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "Mostra la validità dell'ID nel verificare le firme" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "Mostra gli ID utenti revocati o scaduti nel verificare le firme" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "Mostra solo l'ID utente primario nel verificare le firme" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "Convalida le firme con dati PKA" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "Innalza la fiducia delle firme con dati PKA validi" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: opzioni di verifica non valide\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "opzioni di verifica non valide\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "impossibile impostare exec-path a %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: elenco auto-key-locate non valido\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "elenco auto-key-locate non valido\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "ATTENZIONE: il programma potrebbe creare un file core.\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "ATTENZIONE: %s prevale su %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s non consentito assieme a %s.\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s non ha senso usato assieme a %s.\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "Nota: %s non è disponibile in questa versione\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "non verrà eseguito con la memoria insicura a causa di %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "nella modalità --pgp2 è possibile creare solo firme in chiaro o separate\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "" "nella modalità --pgp2 non è possibile firmare e cifrare contemporaneamente\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "è necessario usare dei file (e non una pipe) quando si opera con --pgp2 " "abilitato.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" "nella modalità --pgp2 è richiesto il cifrario IDEA per cifrare un messaggio\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "l'algoritmo di cifratura selezionato non è valido\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "l'algoritmo di digest selezionato non è valido\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "l'algoritmo di compressione selezionato non è valido\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "l'algoritmo di certificazione digest selezionato non è valido\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve essere maggiore di 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve essere maggiore di 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth deve essere compreso tra 1 e 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "default-cert-level non valido; deve essere 0, 1, 2 o 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "min-cert-level non valido; deve essere 1, 2 o 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "Nota: l'uso della modalità S2K semplice (0) è fortemente scoraggiato\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modalità S2K non valido; deve essere 0, 1 o 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "preferenze predefinite non valide\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "preferenze personali del cifrario non valide\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "preferenze personali del digest non valide\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "preferenze personali di compressione non valide\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s non funziona ancora con %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "non è possibile usare l'algoritmo di cifratura \"%s\" in modalità %s\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "non è possibile usare l'algoritmo di digest \"%s\" in modalità %s\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "" "non è possibile usare l'algoritmo di compressione \"%s\" in modalità %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "inizializzazione del TrustDB non riuscita: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "ATTENZIONE: indicati destinatari (-r) senza usare la crittografia a chiave " "pubblica\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [NOMEFILE]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [NOMEFILE]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "cifratura simmetrica di \"%s\" non riuscita: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [NOMEFILE]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [NOMEFILE]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "non è possibile usare --symmetric --encrypt con --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "non è possibile usare --symmetric --encrypt in modalità %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [NOMEFILE]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [NOMEFILE]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [NOMEFILE]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "non è possibile usare --symmetric --sign --encrypt con --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "non è possibile usare --symmetric --sign --encrypt in modalità %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [NOMEFILE]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [NOMEFILE]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [NOMEFILE]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key user-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key user-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key user-id [COMANDI]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [ID_UTENTE] [PORTACHIAVI]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "invio al server di chiavi non riuscito: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "ricezione dal server di chiavi non riuscita: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "esportazione della chiave non riuscita: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "ricerca nel server di chiavi non riuscita: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "aggiornamento dal server di chiavi non riuscito: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "rimozione dell'armatura non riuscita: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "creazione dell'armatura non riuscita: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo di hash \"%s\" non valido\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[NOMEFILE]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Procedere e digitare il proprio messaggio...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "l'URL della politica di certificazione indicato non è valido\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "l'URL della politica di firma indicato non è valido\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "l'URL fornito per il server di chiavi principale non è valido\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "troppe voci nella pk cache - disabilitata\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[ID utente non trovato]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "chiave %s: chiave segreta senza chiave pubblica - omessa\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "recuperato automaticamente \"%s\" attraverso %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Chiave %s non valida resa valida da --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "" "nessuna sottochiave segreta per la sottochiave pubblica %s - ignorata\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "usata la sottochiave %s invece della chiave primaria %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "Meno prolisso" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "Prende le chiavi da questo portachiavi" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "Segnala i conflitti di data solo con un avviso" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|Scrive le informazioni di stato sul FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Uso: gpgv [OPZIONE...] [FILE...] (-h per l'aiuto)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Sintassi: gpgv [opzioni][file]\n" "Controlla le firme confrontandole con chiavi affidabili\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "È necessario assegnare un valore; questo valore non sarà mai esportato a\n" "terzi. Serve per implementare il web-of-trust; non ha nulla a che fare\n" "con il web-of-certificates (creato implicitamente)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Per costruire il web-of-trust, GnuPG ha bisogno di sapere quali chiavi sono\n" "completamente affidabili - di solito quelle per cui è disponibile la chiave\n" "segreta. Rispondere \"sì\" per impostare questa chiave come affidabile.\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Per usare comunque questa chiave non fidata, rispondere \"sì\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Inserire l'user ID del destinatario a cui mandare il messaggio." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Selezionare l'algoritmo da usare.\n" "\n" "DSA (Digital Signature Algorithm, o anche DSS) può essere usato solo per " "firmare.\n" "\n" "Elgamal è un algoritmo usato solo per cifrare.\n" "\n" "RSA può essere usato per firmare e per cifrare.\n" "\n" "La prima chiave (primaria) deve sempre essere una chiave con capacità di " "firma." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "In generale non è una buona idea usare la stessa chiave per le firme e la\n" "cifratura. Questo algoritmo dovrebbe solo essere usato in determinati " "campi.\n" "Consultare un esperto di sicurezza." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Inserire la dimensione della chiave" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Rispondere \"sì\" o \"no\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Inserire il valore richiesto come indicato nel prompt.\n" "È possibile inserire una data in formato ISO (AAAA-MM-GG), ma non\n" "sarà fornito un messaggio di errore corretto: il sistema cerca di\n" "interpretare il valore fornito come un intervallo." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Inserire il nome del proprietario della chiave" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "inserire un indirizzo email opzionale (ma fortemente suggerito)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Inserire un commento opzionale" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N per cambiare il nome.\n" "C per cambiare il commento.\n" "E per cambiare l'indirizzo email.\n" "O per continuare con la generazione della chiave.\n" "Q per abbandonare il processo di generazione della chiave." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Rispondere \"sì\" (o \"s\") per generare la sottochiave." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Quando viene firmato l'ID utente di una chiave, accertarsi che questa\n" "appartenga alla persona indicata. È utile agli altri sapere con quanta\n" "attenzione sia stata verificata la chiave.\n" "\n" "\"0\" significa che non si può affermare di aver posto molta attenzione " "nella\n" " verifica della chiave.\n" "\n" "\"1\" significa che si crede che la chiave appartenga alla persona che dice " "di\n" " possederla, ma non è stato possibile o non è stata verificata per nulla\n" " la chiave stessa.\n" "\n" "\"2\" significa che è stata fatta una verifica superficiale della chiave. " "Per\n" " esempio potrebbe significare che è stata fatta una verifica " "dell'impronta\n" " digitale e confrontato l'ID utente della chiave con un documento " "d'identità\n" " con fotografia.\n" "\n" "\"3\" significa che è stata fatta una verifica approfondita della chiave. " "Per\n" " esempio potrebbe significare che è stata fatta una verifica " "dell'impronta\n" " digitale con il possessore della chiave ed è stato controllato, " "attraverso\n" " un documento d'identità con fotografia difficile da falsificare (come\n" " un passaporto), che il nome del proprietario della chiave corrispondesse " "a\n" " quello dell'ID utente della chiave e per finire, è stato verificato\n" " (scambiando dei messaggi) che l'indirizzo email sulla chiave appartiene\n" " al proprietario.\n" "\n" "Notare che gli esempi indicati per i livelli 2 e 3 sono solo esempi. Il\n" "significato posto su \"superficiale\" o \"approfindita\" quando vengono " "firmate\n" "le chiave è lasciato alla discrezione dell'utente.\n" "\n" "In caso di dubbio, rispondere \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Rispondere \"sì\" per firmare tutti gli ID utente" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Rispondere \"sì\" per eliminare veramente questo ID utente.\n" "Tutti i certificati saranno persi." #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Rispondere \"sì\" per eliminare la sottochiave" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Questa è una firma valida per la chiave: normalmente non dovrebbe essere\n" "cancellata perchè potrebbe essere importante per stabilire una connessione " "di\n" "fiducia alla chiave o a un'altra chiave certificata tramite essa." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Questa firma non può essere verificata perché non si dispone della chiave\n" "corrispondente. Rimandare l'eliminazione finché non si saprà quale chiave è\n" "stata usata, poiché questa chiave potrebbe stabilire una connessione di " "fiducia\n" "attraverso una chiave già certificata." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "La firma non è valida: ha senso rimuoverla dal proprio portachiavi." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Questa è una firma che collega l'ID utente alla chiave. Solitamente non è " "una\n" "buona idea rimuovere questo tipo di firma: GnuPG potrebbe non essere più in\n" "grado di usare questa chiave. Rimuoverla solo se questa auto-firma non è\n" "valida per qualche ragione e ne è disponibile un'altra." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Cambia le preferenze di tutti gli ID utente (o solo di quelli selezionati) " "con\n" "l'elenco di preferenze attuale. L'orario di tutte le auto-firme coinvolte\n" "sarà incrementato di un secondo.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Inserire la passphrase (una frase segreta) \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Ripetere l'ultima passphrase, per essere sicuri di cosa si è digitato." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Fornire il nome del file a cui si riferisce la firma." #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Rispondere \"sì\" per sovrascrivere il file" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Inserire un nuovo nome di file. Se invece si preme INVIO\n" "sarà usato il file predefinito (che è mostrato tra parentesi)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Specificare un motivo per questa certificazione. A seconda del\n" "contesto è possibile scegliere tra queste opzioni:\n" " \"Key has been compromised\"\n" " Usare questo nel caso in cui una persona non autorizzata\n" " abbia avuto accesso alla chiave segreta.\n" " \"Key is superseded\"\n" " Usare questo se la chiave è stata sostituita con una più\n" " recente.\n" " \"Key is no longer used\"\n" " Usare questo se la chiave non è più utilizzata.\n" " \"User ID is no longer valid\"\n" " Usare questo se l'ID utente di questa chiave non dovrebbe\n" " più essere utilizzato; solitamente usato per indicare un\n" " indirizzo email non valido.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "È possibile inserire una descrizione per questo certificato di revoca: " "cercare\n" "di essere concisi. Una riga vuota termina il testo.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Non è disponibile un aiuto" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Non è disponibile un aiuto per \"%s\"" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "Importa le firme che sono contrassegnate come solo-locale" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" "Ripara gli errori causati dal server delle chiavi pks durante l'importazione" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "" "Non rimuove i valori di fiducia del proprietario durante l'importazione" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "Non aggiorna il trustdb dopo l'importazione" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "Crea una chiave pubblica quando si importa una chiave segreta" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "Accetta solo aggiornamenti alle chiavi esistenti" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "Rimuove le parti non usabili dalla chiave dopo l'importazione" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "Rimuove quanto più possibile dalla chiave dopo l'importazione" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "saltato blocco di tipo %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "esaminate finora %lu chiavi\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Numero totale esaminato: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " nuove chiavi saltate: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " senza ID utente: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importate: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " non modificate: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nuovi ID utente: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nuove sottochiavi: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nuove firme: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " nuove revoche di chiavi: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " chiavi segrete lette: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " chiavi segrete importate: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " chiavi segrete non modificate: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " non importate: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " firme pulite: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " ID utente puliti: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "ATTENZIONE: la chiave %s contiene delle preferenze per\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algoritmi non disponibili su questi ID utente:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": preferenza per l'algoritmo di cifratura %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": preferenza per l'algoritmo di digest %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": preferenze per l'algoritmo di compressione %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "è consigliato aggiornare le proprie preferenze e\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "ridistribuire la chiave per prevenire potenziali problemi con l'algoritmo\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" "è possibile aggiornare le proprie preferenze con: gpg --edit-key %s updpref " "save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "chiave %s: nessun ID utente\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "chiave %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "rifiutata dal filtro d'importazione" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "chiave %s: riparato errore per sottochiave PKS\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "chiave %s: accettato l'ID utente \"%s\" non auto-firmato\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "chiave %s: nessun ID utente valido\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "questo può essere causato da un'auto-firma mancante\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "chiave %s: chiave pubblica non trovata: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "chiave %s: nuova chiave - saltata\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "non è stato trovato un portachiavi scrivibile: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "scrittura in \"%s\"\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "errore nello scrivere il portachiavi \"%s\": %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "chiave %s: chiave pubblica \"%s\" importata\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "chiave %s: non corrisponde alla copia presente\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "chiave %s: impossibile individuare il keyblock originale: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "chiave %s: impossibile leggere il keyblock originale: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chiave %s: \"%s\" 1 nuovo ID utente\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "chiave %s: \"%s\" %d nuovi ID utente\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "chiave %s: \"%s\" 1 nuova firma\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "chiave %s: \"%s\" %d nuove firme\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "chiave %s: \"%s\" 1 nuova sottochiave\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "chiave %s: \"%s\" %d nuove sottochiavi\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "chiave %s: \"%s\" %d firma pulita\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "chiave %s: \"%s\" %d firme pulite\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "chiave %s: \"%s\" %d ID utente pulito\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "chiave %s: \"%s\" %d ID utente puliti\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "chiave %s: \"%s\" non cambiata\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "chiave segreta %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "importazione delle chiavi segrete non consentita\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "chiave %s: chiave segreta con cifrario %d non valido - saltata\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "nessun portachiavi segreto predefinito: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "chiave %s: chiave segreta importata\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "chiave %s: già presente nel portachiavi segreto\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "chiave %s: chiave segreta non trovata: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "chiave %s: nessuna chiave pubblica - impossibile applicare il certificato di " "revoca\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "chiave %s: certificato di revoca non valido: %s - rifiutato\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "chiave %s: importato certificato di revoca \"%s\"\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "chiave %s: nessun ID utente per la firma\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "chiave %s: algoritmo a chiave pubblica non supportato sull'ID utente \"%s\"\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "chiave %s: auto-firma non valida sull'ID utente \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "chiave %s: algoritmo a chiave pubblica non supportato\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "chiave %s: firma diretta della chiave non valida\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "chiave %s: non ci sono sottochiavi per il collegamento con la chiave\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "chiave %s: collegamento con la sottochiave non valido\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "chiave %s: rimossi i collegamenti con sottochiave multipla\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "chiave %s: nessuna sottochiave per la revoca della chiave\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "chiave %s: revoca della sottochiave non valida\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "chiave %s: rimosse le revoche per le sottochiavi multiple\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "chiave %s: saltato l'ID utente \"%s\"\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "chiave %s: saltata la sottochiave\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "chiave %s: firma non esportabile (classe 0x%02X) - saltata\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "chiave %s: certificato di revoca nel posto errato - saltata\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "chiave %s: certificato di revoca non valido: %s - saltata\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "chiave %s: firma della sottochiave nel posto sbagliato - saltata\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "chiave %s: classe della firma inaspettata (0x%02X) - saltata\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "chiave %s: trovato un ID utente duplicato - unito\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "ATTENZIONE: la chiave %s può essere stata revocata: acquisizione della " "chiave di revoca %s.\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "ATTENZIONE: la chiave %s può essere stata revocata: chiave di revoca %s non " "presente.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "chiave %s: certificato di revoca \"%s\" aggiunto\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "chiave %s: aggiunta una firma alla chiave diretta\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "Nota: il S/N della chiave non corrisponde con quello della scheda\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "Nota: la chiave primaria è in rete e memorizzata sulla scheda\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "Nota: la chiave secondaria è in rete e memorizzata sulla scheda\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "errore nel creare il portachiavi \"%s\": %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "portachiavi \"%s\" creato\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "risorsa keyblock \"%s\": %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "ricostruzione della cache del portachiavi non riuscita: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revoca]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[auto-firma]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 firma errata\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d firme errate\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 firma non controllata a causa di una chiave mancate\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d firme non controllate a causa di chiavi mancati\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 firma non controllata a causa di un errore\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d firme non controllate a causa di errori\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "Trovato 1 ID utente senza auto-firma valida\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "Trovati %d ID utenti senza auto-firme valide\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Decidere quanta fiducia riporre nella capacità di questo utente di " "verificare\n" "le chiavi di altri utenti (consultando passaporti, controllando le impronte\n" "digitali da diverse sorgenti, ecc)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = fiducia marginale\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = fiducia piena\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Inserire il livello di affidabilità di questa firma.\n" "Un livello superiore a 1 consente alla chiave che si sta firmando\n" "di creare firme affidabili a vostro nome.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Inserire un dominio per limitare questa firma, oppure Invio per nessuno.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "L'ID utente \"%s\" è stato revocato." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Firmare comunque? (s/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Impossibile firmare.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "L'ID utente \"%s\" è scaduto." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "L'ID utente \"%s\" non è auto-firmato." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "L'ID utente \"%s\" è firmabile. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Firmare? (s/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "L'auto-firma su \"%s\"\n" "è una firma in stile PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Promuoverla a un'auto-firma OpenPGP? (s/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "La propria firma attuale su \"%s\"\n" "è scaduta.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Emettere una nuova firma per sostituire quella scaduta? (s/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "La propria firma attuale su \"%s\"\n" "è una firma locale.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Promuoverla a una firma completa esportabile? (s/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" era già stata firmata localmente dalla chiave %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" era già stata firmata dalla chiave %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Firmare nuovamente? (s/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Niente da firmare con la chiave %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Questa chiave è scaduta." #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Questa chiave scadrà il %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Fare in modo che la propria firma scada nello stesso momento? (S/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "In modalità --pgp2 non è possibile fare firme OpenPGP su chiavi in stile PGP " "2.x.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Questo renderebbe la chiave non utilizzabile da PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Con quanta attenzione è stato verificato che la chiave da firmare\n" "appartiene veramente alla persona indicata sopra?\n" "In casa di dubbio, digitare \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Nessuna risposta.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Nessun controllo effettuato.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Controllo superficiale.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Controllo approfondito.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Selezione? (inserire \"?\" per ulteriori informazioni): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Firmare veramente questa chiave con la propria\n" "chiave \"%s\" (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Questa sarà un'auto-firma.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "ATTENZIONE: la firma non sarà contrassegnata come non esportabile.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "ATTENZIONE: la firma non sarà contrassegnata come non revocabile.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "La firma verrà contrassegnata come non esportabile.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "La firma verrà contrassegnata come non revocabile.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Nessuna verifica eseguita su questa firma.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Verifica di questa firma eseguita in modo noncurante.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Verifica di questa firma eseguita in modo molto accurato.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Firmare veramente? (s/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "firma non riuscita: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "La chiave ha solo voci incomplete o su scheda - nessuna passphrase da " "modificare.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Questa chiave non è protetta.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Le parti segrete della chiave primaria non sono disponibili.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Le parti segrete della chiave primaria sono archiviate su scheda.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "La chiave è protetta.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossibile modificare questa chiave: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Inserire la nuova passphrase per questa chiave segreta.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "passphrase ripetuta non correttamente; provare ancora" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "È stato scelto di non usare una passphrase - questa è probabilmente una " "*cattiva* idea.\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Procedere veramente in questo modo? (s/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "spostamento della firma di una chiave nel posto corretto\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "Salva ed esci" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "Mostra l'impronta digitale della chiave" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "Elenca le chiavi e gli ID utente" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "Seleziona l'ID utente N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "Seleziona la sottochiave N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "Verifica le firme" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "Firma gli ID utente selezionati [* controllare più sotto per i relativi " "comandi]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "Firma localmente gli ID utente selezionati" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "Firma gli ID utente selezionati con un firma fidata" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "Firma gli ID utente selezionati con una firma non revocabile" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "Aggiunge un ID utente" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "Aggiunge un ID fotografico" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "Elimina gli ID utente selezionati" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "Aggiunge una sottochiave" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "Aggiunge una chiave a una smartcard" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "Sposta una chiave su una smartcard" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "Sposta una chiave di backup su una smartcard" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "Elimina le sottochiavi selezionate" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "Aggiunge una chiave di revoca" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "Elimina le firme dagli ID utente selezionati" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "" "Modifica la data di scadenza per la chiave o le sottochiavi selezionate" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "Imposta l'ID utente selezionato come primario" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "Commuta tra elencare le chiavi segrete e pubbliche" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "Elenca le preferenze (per esperti)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "Elenca le preferenze (prolisso)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "Imposta l'elenco di preferenze per gli ID utente selezionati" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "Imposta l'URL del server di chiavi preferito per gli ID utente selezionati" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "Imposta un'annotazione per gli ID utente selezionati" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "Cambia la passphrase" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "Cambia il valore di fiducia" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "Revoca le firme sugli ID utente selezionati" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "Revoca l'ID utente selezionato" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "Revoca la chiave o le sottochiavi selezionate" #: g10/keyedit.c:1439 msgid "enable key" msgstr "Abilita la chiave" #: g10/keyedit.c:1440 msgid "disable key" msgstr "Disabilita la chiave" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "Mostra gli ID fotografici selezionati" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "Compatta gli ID utente non utilizzabili e rimuove le firme non utilizzabili " "dalla chiave" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" "Compatta gli ID utente non utilizzabili e rimuove tutte le firme dalla chiave" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "errore nel leggere il keyblock segreto \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "La chiave segreta è disponibile.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Per questa azione è necessaria la chiave segreta.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Usare come prima cosa il comando \"toggle\".\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* Il comando \"sign\" può essere preceduto da una \"l\" per firme locali " "(lsign),\n" " da una \"t\" per firme fidate (tsign), da \"nr\" per firme non revocabili " "(nrsign)\n" " o da una qualsiasi combinazione degli stessi (ltsign, tnrsign, ecc...).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "La chiave è revocata." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Firmare veramente tutti gli ID utente? (s/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Suggerimento: selezionare gli ID utente da firmare\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Tipo di firma \"%s\" sconosciuto\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Questo comando non è permesso in modalità %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "È necessario selezionare almeno un ID utente.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Non è possibile eliminare l'ultimo ID utente.\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Rimuovere veramente tutti gli ID utente selezionati? (s/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Rimuovere veramente questo ID utente? (s/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Spostare veramente la chiave primaria? (s/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "È necessario selezionare esattamente una chiave.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Il comando richiede un nome di file come argomento\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Impossibile aprire \"%s\": %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Errore nel leggere la chiave di backup da \"%s\": %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "È necessario selezionare almeno una chiave.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Eliminare veramente le chiavi selezionate? (s/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Eliminare veramente questa chiave? (s/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Revocare veramente tutti gli ID utente selezionati? (s/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Revocare veramente questo ID utente? (s/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Revocare veramente l'intera chiave? (s/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Revocare veramente le sottochiavi selezionate? (s/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Revocare veramente questa sottochiave? (s/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Non è possibile impostare l'affidabilità del proprietario usando un database " "di fiducia fornito dall'utente\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Impostare l'elenco delle preferenze a:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Aggiornare veramente le preferenze per gli ID utente selezionati? (s/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Aggiornare veramente le preferenze? (s/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Salvare le modifiche? (s/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Uscire senza salvare? (s/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "aggiornamento non riuscito: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "aggiornamento della chiave segreta non riuscito: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "" "La chiave non è stata modificata quindi non sono necessari aggiornamenti.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Digest: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Caratteristiche: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Server delle chiavi: nessuna modifica." #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Server di chiavi preferito: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Annotazioni: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Non esistono preferenze su un ID utente in stile PGP 2.x.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Questa chiave è stata revocata il %s dalla chiave %s %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Questa chiave può essere revocata da %s chiave %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(confidenziale)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "creata: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "revocata: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "scaduta: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "scadenza: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "uso: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "fiducia: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "validità: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Questa chiave è stata disabilitata" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "num-scheda: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Notare che la validità della chiave mostrata non è necessariamente corretta\n" "finché non si riavvia il programma.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "revocata" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "scaduta" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "ATTENZIONE: nessun user ID è stato indicato come primario. Questo comando\n" " potrebbe far diventare un altro ID utente quello primario\n" " predefinito.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Non è possibile modificare la data di scadenza di una chiave v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "ATTENZIONE: questa è una chiave in stile PGP2. Aggiungere un ID fotografico\n" " può causarne il rifiuto da parte di alcune versioni di PGP.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Aggiungerlo comunque? (s/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" "Non è possibile aggiungere un ID fotografico a una chiave in stile PGP2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Eliminare questa firma corretta? (s/N/e)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Eliminare questa firma non valida? (s/N/e)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Eliminare questa firma sconosciuta? (s/N/e)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Eliminare veramente questa auto-firma? (s/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Eliminata %d firma.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Eliminate %d firme.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Non è stato eliminato nulla.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "non valida" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "ID utente \"%s\" compattato: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "ID utente \"%s\": %d firma rimossa\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "ID utente \"%s\": %d firme rimosse\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "ID utente \"%s\": già minimizzato\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "ID utente \"%s\": già pulito\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "ATTENZIONE: questa è una chiave in stile PGP 2.x. Aggiungere un revocatore\n" " designato può causarne il rifiuto da parte di alcune versioni " "di\n" " PGP.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" "Non è possibile aggiungere un revocatore designato a una chiave in stile\n" "PGP 2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Inserire l'ID utente del revocatore designato: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" "impossibile nominare come revocatore designato una chiave in stile PGP 2.x\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" "impossibile nominare una chiave come revocatore designato di se stessa\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "questa chiave è stata già designata come revocatore\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "ATTENZIONE: la nomina di una chiave come revocatore designato non può " "essere\n" " annullata.\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "Nominare veramente questa chiave come un revocatore designato? (s/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Rimuovere le selezioni dalle chiavi segrete.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Selezionare almeno una sottochiave.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Modifica della data di scadenza per una sottochiave.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Modifica della data di scadenza per la chiave primaria.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Non è possibile modificare la data di scadenza di una chiave v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Nessuna firma corrispondente nel portachiavi segreto\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "" "la sottochiave di firma %s ha già ricevuto una certificazione incrociata\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" "la sottochiave %s non firma e perciò non è necessario che abbia una\n" "certificazione incrociata\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Selezionare esattamente un ID utente.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "omessa auto-firma v3 sull'ID utente \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Inserire l'URL del server di chiavi preferito: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Sostituire veramente? (s/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Eliminare veramente? (s/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Inserire l'annotazione: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Procedere? (s/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Nessun ID utente con indice %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Nessun ID utente con hash %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Nessuna sottochiave con indice %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "ID utente: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "firmato dalla propria chiave %s su %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (non esportabile)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Questa chiave è scaduta il %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Procedere veramente con la revoca? (s/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Creare un certificato di revoca per questa firma? (s/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Non firmato dalla propria chiave.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Questi ID utente sono stati firmati sulla chiave %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (non-revocabile)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "revocato dalla propria chiave %s il %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Si è in procinto di revocare queste firme:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Creare veramente i certificati di revoca? (s/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "nessuna chiave segreta\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "l'ID utente \"%s\" è già revocato\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "ATTENZIONE: una firma dell'ID utente è datata %d secondi nel futuro\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "La chiave %s è già revocata.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "La sottochiave %s è già revocata.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "Visualizzazione ID fotografico %s di dimensione %ld per la chiave %s (UID " "%d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "preferenza \"%s\" duplicata\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "troppe preferenze di cifrario\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "troppe preferenze di digest\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "troppe preferenze di compressione\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "oggetto \"%s\" nella stringa delle preferenze non valido\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "scrittura della firma diretta\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "scrittura dell'auto-firma\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "scrittura della firma di collegamento alla chiave\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "dimensione chiave non valida; usati %u bit\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "dimensione chiave arrotondata per eccesso a %u bit\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Firma" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certifica" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Cifra" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Autentica" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "FfCcAaEe" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Azioni possibili per una chiave %s: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Azioni attualmente permesse: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Commuta la funzione di firma\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Commuta la funzione di cifratura\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Commuta la funzione di autenticazione\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Esce\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Selezionare il tipo di chiave:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA e RSA (predefinito)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA ed Elgaman\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (solo firma)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (solo firma)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (solo cifratura)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (solo cifratura)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (imposta funzioni personalizzate)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (imposta funzioni personalizzate)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "La lunghezza delle chiavi %s è compresa tra %u e %u bit.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Quale dimensione impostare per la sottochiave? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Quale dimensione impostare per la chiave? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "La dimensione chiave richiesta è %u bit\n" #: g10/keygen.c:1722 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 "" "Specificare la durata di validità della chiave.\n" " 0 = la chiave non scade\n" " = la chiave scade dopo N giorni\n" " w = la chiave scade dopo N settimane\n" " m = la chiave scade dopo N mesi\n" " y = la chiave scade dopo N anni\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Specificare la durata di validità della firma.\n" " 0 = la firma non scade\n" " = la firma scade dopo N giorni\n" " w = la firma scade dopo N settimane\n" " m = la firma scade dopo N mesi\n" " y = la firma scade dopo N anni\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Per quanto tempo deve essere valida la chiave? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Per quanto tempo deve essere valida la firma? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "valore non valido\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "La chiave non scade\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "La firma non scade\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "La chiave scade il %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "La firma scade il %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Il sistema in uso non può mostrare date oltre il 2038.\n" "Comunque, sarà gestita correttamente fino al 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "È tutto corretto? (s/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "È necessario un ID utente per identificare la propria chiave; il software\n" "costruisce l'ID utente a partire da nome reale, commento e indirizzo email\n" "in questa forma:\n" " \"Mario Rossi (commento) mario.rossi@example.net\"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Nome reale: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Carattere non valido nel nome\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Il nome non può iniziare con una cifra\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Il nome deve essere lungo almeno 5 caratteri\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Indirizzo email: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "L'indirizzo email non è valido\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Commento: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Carattere non valido nel commento\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "È in uso il set di caratteri \"%s\".\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "È stato selezionato questo USER-ID:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Non inserire l'indirizzo email nel nome reale o nel commento\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoUu" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Modificare (n)ome, (c)ommento, (e)mail oppure (u)scire? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Modificare (n)ome, (c)ommento, (e)mail oppure (o)k/(u)scire? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "In primo luogo correggere l'errore\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "È necessaria una passphrase per proteggere la proprio chiave segreta.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 è stata specificata una passphrase: questa è probabilmente una " "*cattiva*\n" "idea. Verrà impostata automaticamente: per modificarla, usare questo\n" "programma con l'opzione \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "È necessario generare molti dati casuali: per fare ciò è utile eseguire\n" "qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i\n" "dischi) durante la generazione dei numeri primi; questo fornisce al\n" "generatore di numeri casuali migliori possibilità di raccogliere abbastanza\n" "entropia.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Generazione della chiave annullata.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "scrittura della chiave pubblica su \"%s\"\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "scrittura dello stub della chiave segreta su \"%s\"\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "scrittura della chiave segreta su \"%s\"\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "non è stato trovato alcun portachiavi pubblico scrivibile: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "non è stato trovato alcun portachiavi segreto scrivibile: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "errore nello scrivere il portachiavi pubblico \"%s\": %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "errore nello scrivere il portachiavi segreto \"%s\": %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "chiavi pubbliche e segrete create e firmate.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Notare che questa chiave non può essere usata per cifrare. È possibile\n" "usare il comando \"--edit-key\" per generare una sottochiave atta a tale " "scopo.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Generazione della chiave non riuscita: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, 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:3386 g10/keygen.c:3516 g10/sign.c:244 #, 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:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" "Nota: la creazione di sottochiavi per chiavi v3 non è conforme a OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Creare veramente? (s/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "memorizzazione della chiave su scheda non riuscita: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "impossibile creare il file di backup \"%s\": %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "Nota: backup della chiave scheda salvato su \"%s\"\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "mai " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Politica critica di firma: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Politica di firma: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Server delle chiavi critico preferito: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Annotazione critica della firma: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Annotazione della firma: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Portachiavi" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Impronta digitale chiave primaria:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Impronta digitale della sottochiave:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Impronta digitale chiave primaria:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Impronta digitale della sottochiave:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Impronta digitale della chiave =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Numero di serie della scheda=" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "cambio di nome di \"%s\" in \"%s\" non riuscito: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "ATTENZIONE: esistono due file con informazioni confidenziali.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s è quello non modificato\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s è quello nuovo\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Correggere questa possibile falla di sicurezza\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "caricamento del portachiavi \"%s\" nella cache\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu chiavi in cache finora (%lu firme)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu chiavi in cache (%lu firme)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: portachiavi creato\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "Include chiavi di revoca nei risultati di ricerca" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "Include sottochiavi nella ricerca per ID di chiave" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "Usare file temporanei per passare dati agli helper dei server di chiavi" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "Non elimina i file temponanei dopo averli usati" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "Recupera automaticamente le chiavi durante la verifica delle firme" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "Rispetta l'URL del server di chiavi preferito impostato sulla chiave" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" "Rispetta il record PKA impostato su una chiave durante il recupero delle " "chiavi" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "ATTENZIONE: l'opzione \"%s\" per il server di chiavi non è usata su questa " "piattaforma\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "disabilitato" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Digitare numero/i, s)uccessivo o e)sci > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "protocollo del server di chiavi non valido (nostro %d != handler %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "chiave \"%s\" non trovata sul server di chiavi\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "chiave non trovata sul server di chiavi\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "richiesta della chiave %s dal server %s %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "richiesta della chiave %s da %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "ricerca dei nomi da %s nel server %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "ricerca dei nomi da %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "invio della chiave %s al server %s %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "invio della chiave %s a %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "ricerca di \"%s\" dal server %s %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "ricerca di \"%s\" da %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "nessuna azione dal server di chiavi.\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" "ATTENZIONE: gestore del server di chiavi da una versione diversa di GnuPG " "(%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "il server di chiavi non ha inviato la VERSIONE\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "errore di comunicazione con server di chiavi: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "nessun server di chiavi conosciuto (usare l'opzione --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" "chiamate esterne al server di chiavi non sono supportare in questa versione\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "nessun gestore per lo schema \"%s\" del server di chiavi\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" "l'azione \"%s\" non è supportata con la schema del server di chiavi \"%s\"\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s non supporta il gestore della versione %d↵\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "time out del server di chiavi\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "errore interno del server di chiavi\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" non è ID di chiave: ignorato\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "ATTENZIONE: impossibile aggiornare la chiave %s attraverso %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "aggiornamento della chiave 1 da %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "aggiornamento delle chiavi %d da %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "ATTENZIONE: impossibile recuperare l'URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "ATTENZIONE: impossibile analizzare l'URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "la chiave di sessione cifrata ha dimensioni strane (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "chiave di sessione cifrata con %s\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "passphrase generata con un algoritmo di digest %d sconosciuto\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "la chiave pubblica è %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "dati cifrati con la chiave pubblica: DEK corretto\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "cifrato con chiave %2$s a %1$u-bit, ID %3$s, creato il %4$s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "cifrato con la chiave %s con ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "de-cifratura della chiave pubblica non riuscita: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "cifrato con %lu passphrase\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "cifrato con 1 passphrase\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "i dati sono probabilmente cifrati con %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "cifrario IDEA non disponibile, tentativo di usare %s al suo posto\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "de-cifratura corretta\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "ATTENZIONE: l'integrità del messaggio non era protetta\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATTENZIONE: il messaggio cifrato è stato manipolato.\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "de-cifratura non riuscita: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "Nota: il mittente ha fatto richiesta di \"riservatezza\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "nome del file originale=\"%.*s\"\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "ATTENZIONE: rilevate molte parti di testo in chiaro\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revoca solitaria - usare \"gpg --import\" per applicarla\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "nessuna firma trovata\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "verifica della firma soppressa\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "impossibile gestire i dati ambigui di questa firma\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Firma eseguita %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " con %s chiave %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Firma eseguita in data %s usando %s, ID chiave %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Chiave disponibile presso: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "Firma non corretta di \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Firma scaduta da \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Firma valida da \"%s\"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[incerta]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " conosciuto anche come \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Firma scaduta il %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Questa firma scadrà il %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "Firma %s, algoritmo di digest %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binario" #: g10/mainproc.c:1947 msgid "textmode" msgstr "modo testo" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "sconosciuto" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" "Attenzione: non una firma separata; il file \"%s\" NON è stato verificato.\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossibile controllare la firma: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "non è una firma separata\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "ATTENZIONE: trovate firme multiple, sarà controllata solo la prima.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "firma solitaria di classe 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "firma vecchio stile (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "individuato un pacchetto radice non valido in proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossibile disabilitare i core dump: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat di \"%s\" non riuscita in %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) non riuscita in %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "" "ATTENZIONE: utilizzo dell'algoritmo a chiave pubblica sperimentale %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "ATTENZIONE: le chiavi Elgaman di firma+cifratura sono deprecate\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "ATTENZIONE: utilizzo dell'algoritmo di cifratura sperimentale %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "ATTENZIONE: utilizzo dell'algoritmo di digest sperimentale %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "ATTENZIONE: l'algoritmo di digest %s è deprecato\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "consultare %s per maggiori informazioni\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "Nota: questa caratteristica non è disponibile in %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d \"%s\" è un'opzione deprecata\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "ATTENZIONE: \"%s\" è un'opzione deprecata\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "usare \"%s%s\" al suo posto\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "ATTENZIONE: \"%s\" è un comando deprecato - non usarlo\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Non compresso" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "non compresso|nessuno" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "questo messaggio può non essere utilizzabile da %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "opzione \"%s\" ambigua\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "opzione \"%s\" sconosciuta\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Tipo di firma \"%s\" sconosciuto\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Il file \"%s\" esiste. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Sovrascrivere? (s/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: suffisso sconosciuto\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Inserire il nuovo nome del file" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "scrittura su stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "i dati sono probabilmente firmati in \"%s\"\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "creato un nuovo file di configurazione \"%s\"\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "ATTENZIONE: le opzioni in \"%s\" non sono ancora attive durante questa " "esecuzione del programma\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "directory \"%s\" creata\n" #: g10/parse-packet.c:149 #, 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:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "ATTENZIONE: la chiave di sessione cifrata simmetricamente è potenzialmente " "non sicura\n" #: g10/parse-packet.c:1227 #, 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:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent non è disponibile in questa sessione\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "variabile di ambiente GPG_AGENT_INFO malformata\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "la versione %d del protocollo di gpg-agent non è gestita\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "impossibile connettersi a \"%s\": %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problema con l'agent - uso dell'agent disattivato\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (ID chiave principale %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "È necessaria una passphrase per sbloccare la chiave segreta dell'utente:\n" "\"%.*s\"\n" "%u-bit chiave %s, ID %s, creata %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Ripetere la passphrase\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Digitare la passphrase\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "annullato dall'utente\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "impossibile interrogare la passphrase in modalità batch\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Inserire la passphrase: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "È necessaria una passphrase per sbloccare la chiave segreta\n" "dell'utente: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bit chiave %s, ID %s, creata %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (sottochiave sull'ID della chiave primaria %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Ripetere la passphrase: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Scegliere un'immagine da usare per l'identificazione fotografica: deve " "essere\n" "un file JPEG. L'immagine viene salvata nella propria chiave pubblica, se " "viene\n" "usata un'immagine molto grande, anche la tua chiave lo diventerà.\n" "Dimensioni vicine a 240x288 sono una buona scelta.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Inserire il nome del file JPEG per l'ID fotografico: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "impossibile aprire il file JPEG \"%s\": %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Questo JPEG è troppo grande (%d byte).\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Usarlo veramente? (s/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\" non è un file JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Questa foto è giusta? (s/N/q) " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "visualizzatore d'immagini non impostato\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "impossibile mostrare l'ID fotografico\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Nessun motivo specificato" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "La chiave è stata sostituita" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "La chiave è stata compromessa" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "La chiave non è più usata" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "L'user ID non è più valido" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "ragione della revoca: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "commento alla revoca: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMuUsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Nessun valore affidabile assegnato a:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " conosciuto anche come \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Quanta fiducia si ha nel fatto che questa chiave appartenga realmente " "all'utente indicato?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = non si sa o non si vuol dire\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = nessuna fiducia\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = fiducia completa\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = torna al menù principale\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = salta questa chiave\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " u = uscire\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Il livello minimo di fiducia per questa chiave è: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Cosa fare? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Impostare questa chiave come completamente affidabile? (S/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificati che portano a chiavi completamente affidabili:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: non c'è alcuna sicurezza che la chiave appartenga all'utente indicato\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: c'è poca sicurezza che questa chiave appartenga all'utente indicato\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Questa chiave probabilmente appartiene all'utente indicato\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Questa chiave ci appartiene\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NON è sicuro che la chiave appartenga all'utente indicato\n" "nell'ID utente. Se si è *davvero* sicuri di cosa si sta facendo,\n" "rispondere sì alla prossima domanda.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Usare comunque questa chiave? (s/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "ATTENZIONE: uso di una chiave non fidata.\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "ATTENZIONE: questa chiave può essere stata revocata (la chiave di revoca non " "è presente).\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "" "ATTENZIONE: questa chiave è stata revocata dal suo revocatore designato.\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATTENZIONE: questa chiave è stata revocata dal suo proprietario.\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Questo può significare che la chiave è stata falsificata.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ATTENZIONE: questa sottochiave è stata revocata dal proprietario.\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Nota: questa chiave è stata disabilitata.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Nota: l'indirizzo verificato del firmatario è \"%s\"\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" "Nota: l'indirizzo \"%s\" del firmatario non corrisponde alla voce del DNS\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" "livello di fiducia regolato su FULL in base alle informazioni PKA valide\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" "livello di fiducia regolato su NEVER in basa alle informazioni PKA non " "valide\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Nota: questa chiave è scaduta.\n" #: g10/pkclist.c:604 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:606 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:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATTENZIONE: impossibile fidarsi di questa chiave.\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " La firma è probabilmente una falsificazione.\n" #: g10/pkclist.c:623 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:625 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:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: saltata: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: saltata: chiave pubblica già presente\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Non è stato specificato un ID utente (è possibile usare \"-r\").\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Destinatari attuali:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Inserire l'ID utente, termina con una riga vuota: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "ID utente inesistente.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "saltata: chiave pubblica già impostata come destinatario predefinito\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "La chiave pubblica è disabilitata.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "saltata: chiave pubblica già impostata\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "destinatario predefinito \"%s\" sconosciuto\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: saltata: chiave pubblica disabilitata\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "nessun indirizzo valido\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "i dati non sono stati salvati; usare l'opzione \"--output\" per salvarli\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "errore nel creare \"%s\": %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Firma separata.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Inserire il nome del file di dati: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "viene letto lo stdin...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "non ci sono dati firmati\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossibile aprire i dati firmati \"%s\"\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "destinatario sconosciuto; viene provata la chiave segreta %s...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "siamo il destinatario anonimo.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "la vecchia codifica del DEK non è gestita\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "l'algoritmo di cifratura %d%s è sconosciuto o disattivato\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" "ATTENZIONE: algoritmo di cifratura %s non trovato nelle preferenze del " "destinatario\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "Nota: chiave segreta %s scaduta il %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "Nota: la chiave è stata revocata" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet non riuscita: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "la chiave %s non ha ID utente\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Revocabile da:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Questa è una chiave di revoca confidenziale)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Creare un certificato di revoca assegnato a questa chiave? (s/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Forzato l'output con armatura ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet non riuscita: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Certificato di revoca creato.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "nessuna chiave di revoca trovata per \"%s\"\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "chiave segreta \"%s\" non trovata: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "non c'è una chiave pubblica corrispondente: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "la chiave pubblica non corrisponde alla chiave segreta.\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Creare un certificato di revoca per questa chiave? (s/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "algoritmo di protezione sconosciuto\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "Nota: questa chiave non è protetta.\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Creato un certificato di revoca.\n" "\n" "Spostarlo su un dispositivo che può essere nascosto con sicurezza. Se\n" "qualcuno entrasse in possesso di questo certificato potrebbe usarlo\n" "per rendere inutilizzabile la chiave. È inoltre una buona idea stamparlo\n" "e archiviarlo, nel caso il dispositivo diventasse illeggibile.\n" "Attenzione: il sistema di stampa potrebbe salvare i dati e renderli " "disponibili\n" "ad altri.\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Scegliere il motivo della revoca:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Annulla" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Probabilmente la scelta era %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Inserire una descrizione opzionale; terminare con una riga vuota:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Motivo della revoca: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Non è stata data una descrizione)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "È esatto? (s/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "parti della chiave segreta non sono disponibili\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "l'algoritmo di protezione %d%s non è gestito\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "l'algoritmo di protezione %d non è gestito\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Passphrase non valida; riprovare" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "ATTENZIONE: individuata una chiave debole - cambiare ancora la passphrase.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "generazione del checksum 16-bit deprecato per la protezione della chiave " "segreta\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "creata una chiave debole - nuovo tentativo\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "Impossibile evitare una chiave debole per il cifrario simmetrico: %d " "tentativi.\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA richiede che la lunghezza dello hash sia un multiplo di 8 bit\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "la chiave %s utilizza un hash non sicuro (%u bit)\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "la chiave DSA %s richiede un hash di %u bit o più grande\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "ATTENZIONE: conflitto del digest delle firme nel messaggio\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" "ATTENZIONE: la sottochiave per la firma %s non ha una certificazione " "incrociata\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "ATTENZIONE: la sottochiave per la firma %s ha una certificazione incrociata " "non valida\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "la chiave pubblica %s è più recente della firma di %lu secondo\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "la chiave pubblica %s è più recente della firma di %lu secondi\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "la chiave %s è stata creata %lu secondo nel futuro (salto nel tempo o " "problema con l'orologio)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "la chiave %s è stata creata %lu secondi nel futuro (salto nel tempo o " "problema con l'orologio)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "Nota: chiave per firmare %s scaduta il %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "Firma %s, algoritmo di digest %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "la firma della chiave %s non viene considerata valida a causa di un bit " "critico sconosciuto\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" "chiave %s: non c'è una sottochiave per la revoca della firma della " "sottochiave\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "" "chiave %s: non c'è una sottochiave per il collegamento della firma della " "sottochiave\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "ATTENZIONE: impossibile espandere i %% nell'URL (troppo grande), usato non " "espanso\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "ATTENZIONE: impossibile espandere i %% nell'URL della politica (troppo " "grande), usato non espanso.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "ATTENZIONE: impossibile espandere i %% nell'URL del server di chiavi " "preferito (troppo grande), usato non espanso\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "controllo della firma creata non riuscito: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "Firma %s/%s da: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "nella modalità --pgp2 è possibile creare firme separate solo con chiavi in " "stile PGP 2.x\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "ATTENZIONE: forzare l'algoritmo di digest %s (%d) viola le preferenze del " "destinatario\n" #: g10/sign.c:960 msgid "signing:" msgstr "firma:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "in modalità -pgp2 è possibile firmare in chiaro solo con chiavi in stile PGP " "2.x\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "sarà usato il cifrario %s\n" #: g10/skclist.c:126 g10/skclist.c:190 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:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "saltato \"%s\": duplicato\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "saltato \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "saltata: chiave pubblica già presente\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "questa è una chiave Elgamal generata da PGP: non è sicura per le firme." #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "record fiducia %lu, tipo %d: scrittura non riuscita: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Elenco dei valori di fiducia assegnati, creato il %s\n" "# (Usare \"gpg --import-ownertrust\" per ripristinarli)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "errore in \"%s\": %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "riga troppo lunga" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "due punti (:) mancanti" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "impronta digitale non valida" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "valore di fiducia del proprietario mancante" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "errore nella ricerca del record della fiducia in \"%s\": %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "errore di lettura in \"%s\": %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sincronizzazione non riuscita: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "impossibile creare il blocco per \"%s\"\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "impossibile bloccare \"%s\"\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek non riuscita: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: scrittura non riuscita (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transazione del trustdb troppo grande\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "impossibile accedere a \"%s\": %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: la directory non esiste.\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: creazione del record della versione non riuscita: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: è stato creato un trustdb non valido\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: creato il trustdb\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "Nota: non è possibile scrivere sul trustdb\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: trustdb non valido\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: creazione della tabella hash non riuscita: %s\n" #: g10/tdbio.c:656 #, 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:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, 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:733 #, 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:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek non riuscita: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read non riuscita (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: non è un file di trustdb\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: record di versione con recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versione %d del file non valida\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: errore durante la lettura del record libero: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: errore durante la scrittura del record dir: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: azzeramento di un record non riuscito: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: aggiunta in coda a un record non riuscita: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Errore: Il trustdb è danneggiato.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "impossibile gestire righe di testo più lunghe di %d caratteri\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "riga di input più lunga di %d caratteri\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "\"%s\" non è un ID di chiave lungo valido\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "chiave %s: accettata come chiave fidata\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "la chiave %s è ripetuta più volte nel database della fiducia\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "chiave %s: nessuna chiave pubblica per la chiave fidata - saltata\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "chiave %s contrassegnata come completamente affidabile\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "record fiducia %lu, tipo %d: lettura non riuscita: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "il record di fiducia %lu non è del tipo %d richiesto\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "È possibile provare a ricreare il trustdb usando i comandi:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Se non funziona, consultare il manuale\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "impossibile utilizzare un modello di fiducia sconosciuto (%d) - viene " "assunto %s come modello di fiducia\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "modello di fiducia %s in uso\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "14 translator see trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ revocata ]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ scaduta ]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ non nota ]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ indefinita ]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[ marginale ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ piena ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ completa ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "non definita" #: g10/trustdb.c:554 msgid "never" msgstr "mai" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginale" #: g10/trustdb.c:556 msgid "full" msgstr "piena" #: g10/trustdb.c:557 msgid "ultimate" msgstr "completa" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "non è necessario un controllo del trustdb\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "il prossimo controllo del trustdb sarà eseguito il %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" "non è necessario un controllo del trustdb con il modello di fiducia \"%s\"\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" "non è necessario un aggiornamento del trustdb con il modello di fiducia \"%s" "\"\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "chiave pubblica %s non trovata: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "eseguire un --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "controllo del trustdb\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d chiavi analizzate (%d conteggi di validità azzerati)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "non è stata trovata alcuna chiave completamente affidabile\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "chiave pubblica della chiave completamente affidabile %s non trovata\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "necessari: %d marginali, %d completi, modello di fiducia %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "livello: %d valido: %3d firmato: %3d fiducia: %d-, %dq, %dn, %dm, %df, " "%du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "impossibile aggiornare la versione del record del trustdb: scrittura non " "riuscita: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "non è possibile verificare la firma.\n" "Ricordare che il file di firma (.sig or .asc) deve\n" "essere il primo file indicato sulla riga di comando.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "riga di input %u troppo lunga o LF mancante\n" #: util/errors.c:53 msgid "general error" msgstr "errore generale" #: util/errors.c:54 msgid "unknown packet type" msgstr "pacchetto di tipo sconosciuto" #: util/errors.c:55 msgid "unknown version" msgstr "versione sconosciuta" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "algoritmo della chiave pubblica sconosciuto" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "algoritmo di digest sconosciuto" #: util/errors.c:58 msgid "bad public key" msgstr "chiave pubblica errata" #: util/errors.c:59 msgid "bad secret key" msgstr "chiave segreta errata" #: util/errors.c:60 msgid "bad signature" msgstr "firma errata" #: util/errors.c:61 msgid "checksum error" msgstr "codice di controllo errato" #: util/errors.c:62 msgid "bad passphrase" msgstr "passphrase errata" #: util/errors.c:63 msgid "public key not found" msgstr "chiave pubblica non trovata" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "algoritmo di cifratura sconosciuto" #: util/errors.c:65 msgid "can't open the keyring" msgstr "impossibile aprire il portachiavi" #: util/errors.c:66 msgid "invalid packet" msgstr "pacchetto non valido" #: util/errors.c:67 msgid "invalid armor" msgstr "armatura non valida" #: util/errors.c:68 msgid "no such user id" msgstr "l'ID utente non esiste" #: util/errors.c:69 msgid "secret key not available" msgstr "la chiave segreta non è disponibile" #: util/errors.c:70 msgid "wrong secret key used" msgstr "è stata usata la chiave segreta sbagliata" #: util/errors.c:71 msgid "not supported" msgstr "non supportato" #: util/errors.c:72 msgid "bad key" msgstr "chiave errata" #: util/errors.c:73 msgid "file read error" msgstr "errore durante la lettura del file" #: util/errors.c:74 msgid "file write error" msgstr "errore durante la scrittura del file" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "algoritmo di compressione sconosciuto" #: util/errors.c:76 msgid "file open error" msgstr "errore durante l'apertura del file" #: util/errors.c:77 msgid "file create error" msgstr "errore durante la creazione del file" #: util/errors.c:78 msgid "invalid passphrase" msgstr "passphrase non valida" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritmo della chiave pubblica non implementato" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algoritmo di cifratura non implementato" #: util/errors.c:81 msgid "unknown signature class" msgstr "classe della firma sconosciuta" #: util/errors.c:82 msgid "trust database error" msgstr "errore nel database della fiducia" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI danneggiato" #: util/errors.c:84 msgid "resource limit" msgstr "limite della risorsa" #: util/errors.c:85 msgid "invalid keyring" msgstr "portachiavi non valido" #: util/errors.c:86 msgid "bad certificate" msgstr "certificato danneggiato" #: util/errors.c:87 msgid "malformed user id" msgstr "ID utente malformato" #: util/errors.c:88 msgid "file close error" msgstr "errore nel chiudere il file" #: util/errors.c:89 msgid "file rename error" msgstr "errore nel rinominare il file" #: util/errors.c:90 msgid "file delete error" msgstr "errore nell'eliminare il file" #: util/errors.c:91 msgid "unexpected data" msgstr "dati inattesi" #: util/errors.c:92 msgid "timestamp conflict" msgstr "marcatura temporale in conflitto" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "algoritmo della chiave pubblica non utilizzabile" #: util/errors.c:94 msgid "file exists" msgstr "il file esiste" #: util/errors.c:95 msgid "weak key" msgstr "chiave debole" #: util/errors.c:96 msgid "invalid argument" msgstr "argomento non valido" #: util/errors.c:97 msgid "bad URI" msgstr "URI non valido" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI non gestito" #: util/errors.c:99 msgid "network error" msgstr "errore di rete" #: util/errors.c:101 msgid "not encrypted" msgstr "non cifrato" #: util/errors.c:102 msgid "not processed" msgstr "non analizzato" #: util/errors.c:104 msgid "unusable public key" msgstr "chiave pubblica inutilizzabile" #: util/errors.c:105 msgid "unusable secret key" msgstr "chiave segreta inutilizzabile" #: util/errors.c:106 msgid "keyserver error" msgstr "errore del server di chiavi" #: util/errors.c:107 msgid "canceled" msgstr "annullato" #: util/errors.c:108 msgid "no card" msgstr "nessuna scheda" #: util/errors.c:109 msgid "no data" msgstr "nessun dato" #: util/logger.c:183 msgid "ERROR: " msgstr "ERRORE: " #: util/logger.c:186 msgid "WARNING: " msgstr "ATTENZIONE: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... questo è un bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "trovato un bug... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "si|sì" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "sS" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "esci" #: util/miscutil.c:443 msgid "qQ" msgstr "eE" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|ok" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "annulla" #: util/miscutil.c:479 msgid "oO" msgstr "oO" # ANNULLA #: util/miscutil.c:480 msgid "cC" msgstr "aA" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "ATTENZIONE: memoria non sicura in uso.\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "per ulteriori informazioni, consultare http://www.gnupg.org/faq.html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "l'operazione non è possibile senza memoria sicura inizializzata\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "" "(potrebbe essere stato usato il programma sbagliato per questa funzione)\n" gnupg-1.4.20/po/ja.po0000644000175000017500000057702212635457220011232 00000000000000# Japanese messages for GnuPG # Copyright (C) 1999, 2000, 2002, 2003, 2004, 2013 Free Software Foundation, Inc. # IIDA Yosiaki , 1999, 2000, 2002, 2003, 2004. # Yoshihiro Kajiki , 1999. # This file is distributed under the same license as the GnuPG package. # Special thanks to "Takashi P.KATOH". # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.19\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2015-09-17 17:02+0900\n" "Last-Translator: NIIBE Yutaka \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "pbits=%u qbits=%uの素数は生成できません\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "%d ビット未満の素数は生成できません\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "エントロピー収集モジュールが、検出されていません\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "「%s」がロックできません: %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "「%s」のロックを待ちます...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "「%s」が開けません: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "「%s」を調べることができません: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "「%s」は普通のファイルではありません - 無視\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "注意: random_seed ファイルは空です\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "*警告*: 無効な長さの random_seed ファイル - 使いません\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "「%s」を読めません: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "注意: random_seed ファイルの更新をしません\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "「%s」が作成できません: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "「%s」に書き込めません: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "「%s」をクローズできません: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "*警告*: セキュアでない乱数生成器を使っています!!\n" #: cipher/random.c:894 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 "" "この乱数生成器は実行するための間に合わせです - 強力なRNG\n" "では決してありません!\n" "\n" "このプログラムの生成したデータを使わないでください!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "エントロピーを収集していますので、お待ちください。エントロピーの質が向上\n" "しますので、もし飽きたら何か作業してください。\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "十分な量の乱数が得られません。OSがもっとエントロピーを収集できるよう、\n" "何かほかの作業をしてください! (あと%dバイト要ります)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "フィンガー・プリントの保管に失敗しました: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "生成日の保管に失敗しました: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "公開鍵の読み込みに失敗しました: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "応答に公開鍵データが含まれていません\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "応答にRSAのモジュラスが含まれていません\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "応答にRSA公開指数が含まれていません\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "デフォルトPINを%sとして使います\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "デフォルトのPIN %s を使うのに失敗しました: %s - これ以上デフォルトとしての使" "用を無効とします\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||PINを入力してください%%0A[署名数: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||PINを入力してください" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PINコールバックがエラーを返しました: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "CHV%dのPINが短すぎます。最短で%dです\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "CHV%dの検証に失敗しました: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "カードからCHVステイタスの取得でエラー\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "カードが永久にロックされてます!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "カードの永久ロック前に%d回の管理者PINの試行が残っています\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|管理者PINを入力してください%%0A[残り回数: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|管理者PINを入力してください" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "管理コマンドへのアクセスが設定されていません\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "リセット・コードが(もはや)利用可能ではありません\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||カードのリセット・コードを入力してください" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "リセット・コードが短すぎます。最短の長さは%dです。\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|新しいリセット・コード" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|新しい管理者PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|新しいPIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "新しいPINの取得エラー: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "アプリケーション・データの読み込みエラー\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "フィンガー・プリントのデータ・オブジェクトの読み込みエラー\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "鍵はもうあります\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "既存の鍵は置き換えられます\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "新しい鍵を生成\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "新しい鍵を書き込み\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "作成時刻スタンプがありません\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSAモジュラスがありません、または%dビットのものではありません\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "RSA公開指数がないか %d ビットより大きすぎます\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "RSA素数 %s がありません、または%dビットのものではありません\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "鍵の保管に失敗しました: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "鍵生成の間、お待ちください ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "鍵の生成に失敗しました\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "鍵の生成が完了しました (%d秒)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "OpenPGPカードに無効な構造 (データ・オブジェクト 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "カードのフィンガー・プリントが要求されたものと一致しません\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "カードはダイジェスト・アルゴリズム %s をサポートしていません\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "これまでに作成された署名: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "管理者PINの確認はこのコマンドでは今のところ禁止されています\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "%sにアクセスできません - 無効なOpenPGPカード?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "外装: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "無効な外装ヘッダー: " #: g10/armor.c:459 msgid "armor header: " msgstr "外装ヘッダー: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "無効なクリア・テクスト署名ヘッダー\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "不明の外装ヘッダー: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "入れ子のクリア・テクスト署名\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "予期せぬ外装: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "無効なダッシュでエスケープされた行: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "無効な64進文字%02Xをスキップしました\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "ファイル末尾が早すぎます (CRCがありません)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "ファイル末尾が早すぎます (CRCの途中)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRCの書式が正しくありません\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRCエラー。%06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "ファイル末尾が早すぎます (後尾部の中にあります)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "後尾の行にエラーがあります\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "有効なOpenPGPデータが見つかりません。\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "無効な外装: 行の長さが%d文字を超えています\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "外装の中にquoted printable文字があります。おそらくバグのあるMTAを使われたたの" "でしょう\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGPカードが利用できません: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "OpenPGPカードno. %sを検出\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "これはバッチ・モードではできません\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "このコマンドが使えるのはバージョン2のカードだけです\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "選択は? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[未設定]" #: g10/card-util.c:512 msgid "male" msgstr "男" #: g10/card-util.c:513 msgid "female" msgstr "女" #: g10/card-util.c:513 msgid "unspecified" msgstr "無指定" #: g10/card-util.c:540 msgid "not forced" msgstr "強制なし" #: g10/card-util.c:540 msgid "forced" msgstr "強制" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "エラー: 普通のASCIIだけが今、許可されています。\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "エラー: \"<\"文字は使えません。\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "エラー: 二重の空白は禁止です。\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "カード所有者の姓 (surname): " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "カード所有者の名 (given name): " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "エラー: つないだ名前が長すぎます (上限%d文字)。\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "公開鍵を取得するURL: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "エラー: URLが長すぎます (上限%d文字)。\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "十分なメモリの確保のエラー: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "「%s」の読み込みエラー: %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "「%s」の書き込みエラー: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "ログイン・データ (アカウント名): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "エラー: ログイン・データが長すぎます (上限%d文字)。\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "プライベート DO データ: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "エラー: プライベート DOが長すぎます (上限%d文字)。\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "言語の優先指定: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "エラー: 優先指定の文字列の長さが無効です。\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "エラー: 優先指定の文字列に無効な文字があります。\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "性別 ((M)男、(F)女、または空白): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "エラー: 無効な応答。\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CAのフィンガー・プリント: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "エラー: 無効な形式のフィンガー・プリント。\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "鍵は操作できません: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "OpenPGPカードでありません" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "現行鍵情報の取得エラー: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "既存の鍵を置き換えしますか? (y/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "*注意*: カードが要求された鍵長をサポートしているという保証はありません。\n" " 鍵生成が成功しない場合、あなたのカードに関する技術文書を確認し、\n" " 利用できる鍵長について確認ください。\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "署名鍵の鍵長は? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "暗号化鍵の鍵長は? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "認証鍵の鍵長は? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "%uビットに丸めます\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s 鍵長は %u-%u の範囲でなければなりません\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "今、%uビットの鍵を生成するようにカードは再コンフィグされました\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "鍵%dの長さを%u bit に変更する際にエラー: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "暗号化鍵をカード外にバックアップしますか? (Y/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "*注意*: 秘密鍵はもうカードに保管してあります!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "既存の鍵を置き換えますか? (y/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "工場設定のPINは下記のとおり\n" " PIN = `%s' 管理者PIN = `%s'\n" "次のコマンドを使って変更すべきです --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "生成する鍵の型を選択してください:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) 署名鍵\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) 暗号化鍵\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) 認証鍵\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "無効な選択です。\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "鍵の保管場所を選択してください:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "未知の鍵保護アルゴリズムです\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "鍵の秘密部分が利用できません\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "秘密鍵はもうカードに保管してあります\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "鍵のカード書き込みエラー: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "このメニューを終了" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "管理コマンドを表示" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "このヘルプを表示" #: g10/card-util.c:1687 msgid "list all available data" msgstr "全有効データを表示" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "カード所有者の名前の変更" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "鍵を取得するURLの変更" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "カードURLで指定された鍵の取得" #: g10/card-util.c:1693 msgid "change the login name" msgstr "ログイン名の変更" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "言語優先指定の変更" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "カード所有者の性別の変更" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "CAフィンガー・プリントの変更" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "署名強制PINフラグを反転" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "新しい鍵を生成" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "PINブロックの解除や変更のメニュー" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "PINを確認しすべてのデータを表示する" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "PINをリセット・コードでブロックを解除する" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/card> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "管理者専用コマンド\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "管理コマンドが許可されています\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "管理コマンドは禁止されています\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "無効なコマンド (\"help\"を参照)\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "カードリーダが利用できません\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "カードを挿入しreturnを打つか、'c'で取消し: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "openpgpの選択に失敗しました: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "今のカードを抜き、以下のシリアル番号のカードを入れてください:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "準備できたらreturnを打つか、'c'で取消し: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "新しい管理者PINの入力: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "新しいPINの入力: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "管理者PINの入力: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "PINの入力: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "このPINをもう一度入力してください: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PINが正しく繰り返されていません。もう一度" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "「%s」が開けません\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "このコマンドで--outputは機能しません\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "鍵\"%s\"が見つかりません: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "鍵ブロックの読み込みエラー: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(フィンガー・プリントで鍵を指定してない限り)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "\"--yes\"のないバッチ・モードではできません\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "この鍵を鍵リングから削除しますか? (y/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "これは秘密鍵です! 本当に削除しますか? (y/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "鍵ブロックの削除に失敗しました: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "所有者信用情報をクリアしました\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "この公開鍵にたいする秘密鍵\"%s\"があります!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "まず\"--delete-secret-keys\"オプションでこれを削除してください。\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "パスフレーズの作成エラー: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "S2Kモードのため、共通鍵ESKパケットを使えません\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "%s暗号方式を使います\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "「%s」はもう圧縮済みです\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "*警告*: 「%s」は空のファイルです\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "--pgp2モードでは2048ビット以下のRSA鍵で暗号化しかできません\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "「%s」から読み出します\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "暗号化しようとしている鍵は全部IDEA暗号を使えません。\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "*警告*: 共通鍵暗号方式 %s (%d) の強制が、受取人の優先指定をそむきます\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "*警告*: 圧縮アルゴリズム %s (%d) の強制が、受取人の優先指定をそむきます\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "共通鍵暗号方式 %s (%d) の強制が、受取人の優先指定をそむきます\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "%sを%sモードで使うことはできません\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s暗号化 受信者:\"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s暗号化済みデータ\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "未知のアルゴリズム%dによる暗号化\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "*警告*: メッセージは共通鍵暗号方式の弱い鍵で暗号化されています。\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "暗号化パケットの取扱いで障害\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "遠隔プログラムの実行は、サポートしていません\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "ディレクトリ「%s」が作成できません: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "オプション・ファイルの許可モードが安全ではないので、外部プログラムの呼出しは" "禁止となります。\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "このプラットホームだと、外部プログラムの呼出しには、一時ファイルが必要です\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "「%s」を実行できません: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "シェル「%s」を実行できません: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "外部プログラムの呼出しでシステム・エラー: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "外部プログラムが、不自然に終了\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "外部プログラムを実行できません\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "外部プログラムの応答を読み出せません: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "*警告*: 一時ファイルを削除できません (%s) 「%s」: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "*警告*: 一時ディレクトリ「%s」を削除できません: %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "ローカルのみと指定された署名をエクスポートします" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "ユーザIDの属性(通常フォトID)をエクスポートします" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "\"sensitive\"(機密)と指定された失効鍵をエクスポートします" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "エクスポートされた副鍵からパスフレーズを除去する" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "エクスポートの際、利用できない部分を除去する" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "エクスポートの際、できるだけ除去する" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "秘密鍵のエクスポートは認められません\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "鍵%s: 保護されていません - スキップします\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "鍵%s: PGP 2.x形式の鍵です - スキップします\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "鍵%s: 鍵はカード上にあります - スキップします\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "保護されていない副鍵を、エクスポートしようとしています\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "副鍵の保護を解除するのに失敗しました: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "*警告*: 秘密鍵%sには、単純なSKチェックサムがありません\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "*警告*: 何もエクスポートされていません\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@コマンド:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[ファイル]|署名を作成" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[ファイル]|クリア・テクスト署名を作成" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "分遣署名を作成" #: g10/gpg.c:393 msgid "encrypt data" msgstr "データを暗号化" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "暗号化には共通鍵暗号方式のみを使用" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "データを復号 (デフォルト)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "署名を検証" #: g10/gpg.c:401 msgid "list keys" msgstr "鍵の一覧" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "鍵と署名の一覧" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "鍵署名の検査と一覧" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "鍵とフィンガー・プリントの一覧" #: g10/gpg.c:406 msgid "list secret keys" msgstr "秘密鍵の一覧" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "新しい鍵ペアを生成" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "公開鍵リングから鍵を削除" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "秘密鍵リングから鍵を削除" #: g10/gpg.c:411 msgid "sign a key" msgstr "鍵に署名" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "鍵へローカルに署名" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "鍵への署名や編集" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "失効証明書を生成" #: g10/gpg.c:416 msgid "export keys" msgstr "鍵をエクスポートする" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "鍵サーバに鍵をエクスポートする" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "鍵サーバから鍵をインポートする" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "鍵サーバの鍵を検索する" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "鍵サーバから鍵を全部更新する" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "鍵のインポート/マージ" #: g10/gpg.c:429 msgid "print the card status" msgstr "カード・ステイタスを表示" #: g10/gpg.c:430 msgid "change data on a card" msgstr "カードのデータを変更" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "カードのPINを変更" #: g10/gpg.c:440 msgid "update the trust database" msgstr "信用データベースを更新" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|アルゴリズム [ファイル]|メッセージ・ダイジェストを表示" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "オプション:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "ASCII形式の外装を作成" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|名前|「名前」用に暗号化" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "署名や復号にこのユーザidを使用" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|圧縮レベルをNに設定 (0は非圧縮)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "正準テキスト・モードを使用" #: g10/gpg.c:486 msgid "use as output file" msgstr "出力ファイルとして使用" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "冗長" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "無変更" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "上書き前に確認" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "厳密なOpenPGPの振舞を採用" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "PGP 2.x互換のメッセージを生成" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(コマンドとオプション全部の一覧は、マニュアル・ページをご覧ください)\n" #: g10/gpg.c:576 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 [ファイル] 署名とユーザBobへの暗号化\n" " --clearsign [ファイル] クリア署名を作成\n" " --detach-sign [ファイル] 分遣署名を作成\n" " --list-keys [名前] 鍵を表示\n" " --fingerprint [名前] フィンガー・プリントを表示\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "バグは までご報告ください。\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "使い方: gpg [オプション] [ファイル] (ヘルプは -h)" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "サポートしているアルゴリズム:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "公開鍵: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "暗号方式: " #: g10/gpg.c:827 msgid "Hash: " msgstr "ハッシュ: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "圧縮: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "使い方: gpg [オプション] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "対立するコマンド\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "=記号が、グループ定義「%s」内に見つかりません\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "*警告*: homedir 「%s」の安全でない所有\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "*警告*: 構成ファイル「%s」の安全でない所有\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "*警告*: homedir 「%s」の安全でない許可\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "*警告*: 構成ファイル「%s」の安全でない許可\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "*警告*: homedir 「%s」の安全でない上位ディレクトリ所有者\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "*警告*: 構成ファイル「%s」の安全でない上位ディレクトリ所有者\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "*警告*: homedir 「%s」の安全でない上位ディレクトリ許可\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "*警告*: 構成ファイル「%s」の安全でない上位ディレクトリ許可\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "未知の構成項目「%s」\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "鍵の一覧時にフォトIDを表示する" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "署名の一覧時にポリシーURLを表示する" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "署名の一覧時にすべての注釈を表示する" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "署名の一覧時にIETF標準注釈を表示する" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "署名の一覧時にユーザの注釈を表示する" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "署名の一覧時に優先鍵サーバURLを表示する" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "鍵の一覧時にユーザIDの有効性を表示する" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "鍵の一覧に失効したユーザID、期限切れとなったユーザIDを表示する" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "鍵の一覧に失効した副鍵、期限切れとなった副鍵を表示する" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "鍵の一覧に鍵リングの名前を表示する" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "署名の一覧時に有効期限の日付を表示する" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "" "*注意*: 以前デフォルトだったオプション・ファイル「%s」は、無視されます\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "*注意*: デフォルトのオプション・ファイル「%s」がありません\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "オプション・ファイル「%s」: %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "「%s」からオプションを読み込みます\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "*注意*: 普通%sは使いません!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "「%s」は、有効な署名期限ではありません\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "「%s」は、有効な文字集合ではありません\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "鍵サーバのURLを解析不能\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: 無効な鍵サーバ・オプションです\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "無効な鍵サーバ・オプションです\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: 無効なインポート・オプションです\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "無効なインポート・オプションです\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: 無効なエクスポート・オプションです\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "無効なエクスポート・オプションです\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: 無効な一覧オプションです\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "無効な一覧オプションです\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "署名の検証時にフォトIDを表示する" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "署名の検証時にポリシーURLを表示する" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "署名の検証時にすべての注釈を表示する" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "署名の検証時にIETF標準注釈を表示する" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "署名の検証時にユーザの注釈を表示する" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "署名の検証時に優先鍵サーバURLを表示する" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "署名の検証時にユーザIDの有効性を表示する" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "署名の検証時に失効したユーザID、期限切れとなったユーザIDを表示する" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "署名の検証時に主なユーザIDだけをを表示する" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "PKAデータで署名を検証する" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "有効なPKAデータで署名の信用度を上昇させる" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: 無効な検証オプションです\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "無効な検証オプションです\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "exec-pathを%sに設定不能\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: 無効な auto-key-locate リストです\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "無効な auto-key-locate リストです\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "*警告*: プログラムはcoreファイルを作成することがあります!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "*警告*: %sは%sより優先\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%sは%sとともに使うことはできません!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%sは%sとともに使っても無意味です!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "*注意*: このバージョンで%sは利用できません\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "%s のため、セキュアでないメモリで実行しません\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "--pgp2モードでは分遣署名かクリア署名だけしかできません\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "--pgp2モードでは署名と暗号化を同時にできません\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "--pgp2を指定したら、(パイプでなく) ファイルを指定せねばなりません。\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "--pgp2モードのメッセージ暗号化では、IDEA暗号方式が必要です\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "選択された暗号アルゴリズムは、無効です\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "選択されたダイジェスト・アルゴリズムは、無効です\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "選択された圧縮アルゴリズムは、無効です\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "選択された証明書ダイジェスト・アルゴリズムは、無効です\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-neededは正の値が必要です\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-neededは1より大きな値が必要です\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depthは1から255の範囲でなければなりません\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "無効なdefault-cert-level。0か1か2か3でなければなりません\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "無効なmin-cert-level。0か1か2か3でなければなりません\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "*注意*: 単純なS2Kモード(0)の使用には強く反対します\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "無効なS2Kモード。0か1か3でなければなりません\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "無効なデフォルトの優先指定\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "無効な個人用暗号方式の優先指定\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "無効な個人用ダイジェストの優先指定\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "無効な個人用圧縮の優先指定\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%sは%sで機能しません\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "暗号アルゴリズム「%s」を%sモードで使うことはできません\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "ダイジェスト・アルゴリズム「%s」を%sモードで使うことはできません\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "圧縮アルゴリズム「%s」を%sモードで使うことはできません\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "信用データベースの初期化に失敗しました: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "*警告*: 公開鍵暗号を使わずに、受取人 (-r) を指定しています\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [ファイル名]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [ファイル名]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "「%s」の共通鍵暗号に失敗しました: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [ファイル名]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [ファイル名]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "--symmetric --encryptを--s2k-mode 0で使うことはできません\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "--symmetric --encryptを%sモードで使うことはできません\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [ファイル名]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [ファイル名]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [ファイル名]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "--symmetric --sign --encryptを--s2k-mode 0で使うことはできません\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "--symmetric --sign --encryptを%sモードで使うことはできません\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [ファイル名]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [ファイル名]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [ファイル名]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key ユーザid" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key ユーザid" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key ユーザid [コマンド]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [ユーザid] [鍵リング]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "鍵サーバへの送信に失敗しました: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "鍵サーバからの受信に失敗しました: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "鍵の書出しに失敗しました: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "鍵サーバの検索に失敗しました: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "鍵サーバの更新に失敗しました: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "外装除去に失敗しました: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "外装に失敗しました: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "無効なハッシュ・アルゴリズム「%s」です\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[ファイル名]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "開始します。メッセージを打ってください ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "あたえられた証明書ポリシーURLは無効です\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "あたえられた署名ポリシーURLは無効です\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "指定された優先指定鍵サーバURLは無効です\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "pkキャッシュのエントリーが多すぎます - 使用禁止\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[ユーザIDが見つかりません]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "鍵%s: 公開鍵のない秘密鍵です - スキップします\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "「%s」を %s から自動取得\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "--allow-non-selfsigned-uidで有効にされた無効な鍵%sです\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "公開副鍵%sに対する秘密副鍵がありません - 無視\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "副鍵%s(主鍵%sではなく)を用います\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "いくらかおとなしく" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "この鍵を鍵リングから使います" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "日時の矛盾を警告だけにします" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|このFDに状態を書き込む" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "使い方: gpgv [オプション] [ファイル] (ヘルプは -h)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "構文: gpgv [オプション] [ファイル]\n" "既知の信用した鍵で署名を検査\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "この値の指定は、あなた次第です。この値は、第三者に決して提供されません。これ" "は、\n" "web-of-trust の実装に必要で、(暗黙的にできた) web-of-certificates とは無関係" "です。" #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Web-of-Trustを構築するためGnuPGは、どの鍵を究極的に信用する\n" "のかを知る必要があります。それはふつう、秘密鍵にアクセスでき\n" "る鍵のことです。この鍵を絶対的に信用することにするなら、\n" "\"yes\"と答えてください。\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "この信用されてない鍵をなんにしろ使いたければ、\"yes\"と答えてください。" #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "このメッセージを送りたい宛先のユーザIDを入力してください。" #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "使用するアルゴリズムを選択してください。\n" "\n" "DSA (別名DSS) は、署名専用の電子署名アルゴリズムです。\n" "\n" "Elgamalは、暗号化のみのアルゴリズムです。\n" "\n" "RSAは、署名にも暗号化にも使えます。\n" "\n" "第一の鍵(主鍵)は、署名に使用できる鍵でなければなりません。" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "一般に、署名と暗号化に同じ鍵を使うのは、よろしくありません。\n" "このアルゴリズムは、一定の範囲内だけで使われるべきです。\n" "まず、セキュリティーの専門家にご相談ください。" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "鍵の長さを入力してください" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "\"yes\"か\"no\"で答えてください" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "プロンプトで表示される必要な値を入力してください。\n" "ISOの日付の書式 (YYYY-MM-DD) でも入力できますが、正しいエラーは\n" "表示されないでしょう。その代わり、システムは入力値を期間へ変換\n" "するように試みます。" #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "鍵所有者の名前を入力してください" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "オプションですが、電子メールのアドレスを入力することを強く推奨します" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "オプションのコメントを入力してください" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N 名前の変更。\n" "C コメントの変更。\n" "E 電子メール・アドレスの変更。\n" "O 鍵生成に進む。\n" "Q 鍵生成しないで終了。" #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "副鍵を生成してよければ、\"yes\"(または、単に\"y\") と答えてください。" #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "鍵のユーザIDに署名するときには、その鍵がユーザIDの名前の人に属している\n" "ことを確認するべきです。あなたがどの程度注意深く確認したのかを他の人たちに\n" "知らせることは有用です。\n" "\n" "\"0\" は、あなたがどの程度注意深く確認したのかを、特に主張しないという\n" " 意味です。\n" "\n" "\"1\" は、鍵の所有者と主張している人がその鍵を所有している、とあなたは\n" " 信じてはいるものの、検証は全然してなかった、またはできなかった、と\n" " いう意味です。これは、ペンネームを使うユーザの鍵に署名する場合の、\n" " 「ペルソナ」確認に有用です。\n" "\n" "\"2\" は、通常の鍵の確認をした、という意味です。たとえば鍵のフィンガー・\n" " プリントを検証し、写真付のIDにたいして鍵のユーザIDを検査した場合\n" " がそうです。\n" "\n" "\"3\" は、かなりしっかり鍵を検証した、という意味です。たとえば、鍵の所\n" " 有者本人と対面で、鍵のフィンガー・プリントを検証し、(パスポートのよ\n" " うな) 偽造のむつかしい写真付のIDの文書の手段で、鍵の所有者の名前が、\n" " 鍵のユーザIDの名前と一致することを検査して、(電子メールの交換など\n" " で) 鍵の電子メール・アドレスが鍵の所有者に属していることを検証した場\n" " 合がそうです。\n" "\n" "上記2と3の例は、*単なる*例にすぎない、ということを念頭においてください。\n" "他の鍵に署名する際、『通常』や『しっかり』が何を意味するかを最終的に決める\n" "のは、あなたです。\n" "\n" "正しい答のわからない場合は、「0」で答えてください。" #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "全てのユーザIDに署名したければ、\"yes\"と答えてください" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "このユーザIDを本当に削除したければ、\"yes\"と答えてください。\n" "証明書も全部同時に消去されます!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "この副鍵を削除してよければ、\"yes\"と答えてください" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "これは鍵に対する有効な署名です。ふつうは、この署名を削除するべきでは\n" "ないでしょう。なぜなら、この署名は、この鍵への信用の接続の確立や、こ\n" "の鍵によって証明される鍵への信用の接続の確立にとって重要だからです。" #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "この署名と一致する鍵を保有していないので、この署名は検査できません。\n" "どの鍵が使用されたかわかるまでは、あなたはこの署名の削除を保留するべ\n" "きです。なぜなら、この署名の鍵が既に証明された他の鍵を通じて信用の接\n" "続を確立するかもしれないからです。" #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "この署名は有効ではありません。このことは、あなたの鍵リングから削除す\n" "る意味があります。" #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "これは、鍵とユーザIDを結びつける署名です。通常、この署名を削除する\n" "のはいい考えではありません。実際には、GnuPGはもはやこの鍵を使えないの\n" "かもしれません。よって、この自己署名が何らかの理由により有効ではなく\n" "て、代替となる自己署名がある場合にのみ、削除を実行してください。" #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "全部 (または選択した) ユーザIDの優先指定を、今の優先指定一覧に変更\n" "します。関係する自己署名の日時は、1秒すすみます。\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "パスフレーズを入力してください。これは秘密の文のことです \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "入力したパスフレーズの確認のため、再入力してください。" #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "署名を行うファイルの名前を指定してください" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "上書きしてよければ、\"yes\"と答えてください" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "新しいファイル名を入力してください。単にRETURNを打つと、\n" "(括弧で示した) デフォルトのファイルを使用します。" #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "証明理由を指定すべきです。文脈に応じて、以下の一覧から選ぶことが\n" "できます。\n" " 「鍵がコンプロマイズされました」\n" " 証認されていない人が秘密鍵へのアクセスを得た、と信ずる\n" " に足る理由のあるときに、これを使います。\n" " 「鍵がとりかわっています」\n" " この鍵を自分で新しい鍵と交換したときに使います。\n" " 「鍵はもう使われていません」\n" " この鍵を使うのをやめたときに使います。\n" " 「ユーザIDがもう無効です」\n" " もうそのユーザIDは使うべきでない、というときに使い\n" " ます。これは普通、電子メールのアドレスが無効になったと\n" " きに使います。\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "もしそうしたければ、なぜ失効証明書を発行するのかを説明する\n" "文章を入力することができます。文章は簡潔にしてください。\n" "空行で終わりになります。\n" #: g10/helptext.c:285 msgid "No help available" msgstr "ヘルプはありません" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "「%s」のヘルプはありません" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "ローカルだけとマークされた署名をインポートします" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "インポートの際、にpksキーサーバからのダメージを修正します" #: g10/import.c:104 #, fuzzy #| msgid "do not update the trustdb after import" msgid "do not clear the ownertrust values during import" msgstr "インポート後、信用データベースを更新しない" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "インポート後、信用データベースを更新しない" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "秘密鍵をインポートしたときに公開鍵を作成します" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "既存の鍵に対する更新のみ認めます" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "インポート後、利用できない部分を鍵から除去します" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "インポート後、できるだけ除去します" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "型%dのブロックをスキップします\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "これまで%lu個の鍵を処理\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr " 処理数の合計: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " スキップした新しい鍵: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " ユーザIDなし: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " インポート: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " 変更なし: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " 新しいユーザID: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " 新しい副鍵: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " 新しい署名: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " 新しい鍵の失効: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " 秘密鍵の読み込み: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " 秘密鍵のインポート: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " 無変更の秘密鍵: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " 未インポート: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " 掃除された署名: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " 掃除されたユーザID: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "*警告*: 鍵%sには、これらのユーザIDに対して使用不可の\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " アルゴリズムの優先指定があります:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": 暗号アルゴリズムの優先指定 %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": ダイジェスト・アルゴリズムの優先指定 %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": 圧縮アルゴリズムの優先指定 %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "あなたの優先指定を更新し、この鍵を再配布することが強く推奨されます\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "それによって、潜在的なアルゴリズム不一致の問題を避けられます\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "以下で、優先指定が更新できます: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "鍵%s: ユーザIDがありません\n" #: g10/import.c:819 #, fuzzy, c-format #| msgid "skipped \"%s\": %s\n" msgid "key %s: %s\n" msgstr "\"%s\"をスキップします: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "鍵%s: PKSの副鍵変造を修復\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "鍵%s: 受理した未自己署名のユーザID\"%s\"\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "鍵%s: 有効なユーザIDがありません\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "自己署名のないせいでしょう\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "鍵%s: 公開鍵が見つかりません: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "鍵%s: 新しい鍵です - スキップします\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "書き込み可能な鍵リングが見つかりません: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "「%s」への書き込み\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "鍵リング「%s」の書き込みエラー: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "鍵%s: 公開鍵\"%s\"をインポートしました\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "鍵%s: こちらの複製と合いません\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "鍵%s: 元の鍵ブロックに位置づけできません: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "鍵%s: 元の鍵ブロックを読み出せません: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "鍵%s:\"%s\"新しいユーザIDを1個\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "鍵%s:\"%s\"新しいユーザIDを%d個\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "鍵%s:\"%s\"新しい署名を1個\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "鍵%s:\"%s\"新しい署名を%d個\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "鍵%s:\"%s\"新しい副鍵を1個\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "鍵%s:\"%s\"新しい副鍵を%d個\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "鍵%s: \"%s\" %d個の署名をきれいにしました\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "鍵%s: \"%s\" %d個の署名をきれいにしました\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "鍵%s: \"%s\" %d個のユーザIDをきれいにしました\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "鍵%s: \"%s\" %d個のユーザIDをきれいにしました\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "鍵%s:\"%s\"変更なし\n" #: g10/import.c:1211 #, fuzzy, c-format #| msgid "secret key \"%s\" not found: %s\n" msgid "secret key %s: %s\n" msgstr "秘密鍵\"%s\"が見つかりません: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "秘密鍵のインポートは禁止です\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "鍵%s: 無効な暗号方式%dの秘密鍵です - スキップします\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "デフォルトの秘密鍵リングがありません: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "鍵%s: 秘密鍵をインポートしました\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "鍵%s: もう秘密鍵リングにあります\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "鍵%s: 秘密鍵が見つかりません: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "鍵%s: 公開鍵がありません - 失効証明書を適用できません\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "鍵%s: 無効な失効証明書: %s - 拒否\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "鍵%s:\"%s\"失効証明書をインポートしました\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "鍵%s: 署名に対応するユーザIDがありません\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "鍵%s: ユーザID\"%s\"のサポートしていない公開鍵アルゴリズムです\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "鍵%s: ユーザID\"%s\"の自己署名が、無効です\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "鍵%s: サポートしていない公開鍵アルゴリズムです\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "鍵%s: 無効な直接鍵署名\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "鍵%s: 鍵に対応する副鍵がありません\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "鍵%s: 無効な副鍵の対応です\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "鍵%s: 多重副鍵の対応を削除します\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "鍵%s: 鍵失効にたいする副鍵がありません\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "鍵%s: 無効な副鍵失効です\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "鍵%s: 無効な副鍵の多重失効を削除します\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "鍵%s: スキップしたユーザID\"%s\"\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "鍵%s: スキップした副鍵\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "鍵%s: エクスポート不可な署名 (クラス0x%02X) - スキップします\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "鍵%s: 失効証明書が誤って設定されています - スキップします\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "鍵%s: 無効な失効証明書: %s - スキップします\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "鍵%s: 副鍵署名の場所が、誤っています - スキップします\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "鍵%s: 予期せぬ署名クラス (0x%02X) - スキップします\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "鍵%s: 重複したユーザIDの検出 - マージ\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "*警告*: 鍵%sは失効されたかもしれません: 失効鍵%sを取ってきます\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "*警告*: 鍵%sは失効されたかもしれません: 失効鍵%sが存在しません。\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "鍵%s:\"%s\"失効証明書の追加\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "鍵%s: 直接鍵署名を追加\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "*注意*: 鍵のシリアル番号がカードのものと一致しません\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "*注意*: 主鍵はもうカードに保管してあります\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "*注意*: 二次鍵はもうカードに保管してあります\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "鍵リング「%s」の作成エラー: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "鍵リング「%s」ができました\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "keyblock リソース「%s」: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "鍵リングキャッシュの再構築に失敗しました: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[失効]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[自己署名]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "不正な署名1個\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "不正な署名%d個\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "鍵がないため1個の署名を検査しません\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "鍵がないため%d個の署名を検査しません\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "エラーのため1個の署名を検査しません\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "エラーのため%d個の署名を検査しません\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "有効な自己署名のないユーザIDを1個検出\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "有効な自己署名のないユーザIDを%d個検出\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "他のユーザの鍵を正しく検証するために、このユーザの信用度を決めてください\n" "(パスポートを見せてもらったり、他から得たフィンガー・プリントを検査したり、な" "どなど)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = まぁまぁ信用する\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = 充分に信用する\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "信用署名の深さを入力してください。\n" "深さが1より大きいと、署名しようとしている鍵で信用署名を作れます。\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "署名を制限するドメインか、それのない場合はenterを入力してください。\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "ユーザID\"%s\"は、失効されています。" #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "それでもこの鍵に署名したいですか? (y/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " 署名不能。\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "ユーザID\"%s\"は、期限切れです。" #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "ユーザID\"%s\"は、自己署名されていません。" #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "ユーザID \"%s\"は署名可能です。 " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "署名しますか? (y/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "\"%s\"に対する自己署名は、\n" "PGP 2.x形式の署名です。\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "OpenPGPの自己署名に格上げしたいですか? (y/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "\"%s\"に対するあなたの今の署名\n" "は期限切れです。\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "新しい署名を発行し、期限切れ署名と交換したいですか? (y/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "\"%s\"にたいするあなたの今の署名\n" "はローカルな署名です。\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "書出し可能な署名に格上げしたいですか? (y/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\"は鍵%sでもうローカルに署名してあります\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\"は鍵%sでもう署名してあります\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "それでも再署名したいですか? (y/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "鍵%sで署名すべきものはありません\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "この鍵は期限切れです!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "この鍵は%sで期限切れします。\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "同時に署名も期限切れにしたいですか? (Y/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "--pgp2モードではPGP 2.x鍵でOpenPGP署名ができません。\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "この鍵はPGP 2.xで使用できなくなります。\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "署名しようとしている鍵が実際に上記の名前の人のものかどうか、どの程度\n" "注意して検証しましたか? 答がわからなければ、\"0\"を入力してください。\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) 答えません。%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) 全然、検査していません。%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) 通常の検査をしました。%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) かなり注意して検査しました。%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "選択は? (詳細は '?' で): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "本当にこの鍵にあなたの鍵\"%s\"で署名してよいですか\n" "(%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "自己署名になるでしょう。\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "*警告*: 署名は、エクスポート不可に設定されません。\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "*警告*: 署名は、失効不可に設定されません。\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "署名は、エクスポート不可に設定されます。\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "署名は、失効不可に設定されます。\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "この鍵は全然、検査していません。\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "この鍵は通常の検査をしました。\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "この鍵は、かなり注意して検査しました。\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "本当に署名しますか? (y/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "署名に失敗しました: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "鍵にはスタブあるいはカード上の項目しかありません - パスフレーズは変更されませ" "ん。\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "この鍵は保護されていません。\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "主鍵の秘密部分が得られません。\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "主鍵の秘密部分はカード上に保存されています。\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "鍵は保護されています。\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "この鍵は編集できません: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "この秘密鍵の新しいパスフレーズを入力してください。\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "パスフレーズをちゃんと繰り返していません。再入力してください" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "パスフレーズが不必要なようですが、おそらくそれは良くない考えです!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "本当に実行しますか? (y/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "鍵の署名を正しい場所に移動します\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "保存して終了" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "フィンガー・プリントを表示" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "鍵とユーザIDの一覧" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "ユーザID Nの選択" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "副鍵Nの選択" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "署名の確認" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "選択したユーザIDに署名する [* 以下の関連コマンドを参照 ]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "選択したユーザIDにローカルに署名" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "選択したユーザIDに信用署名を署名する" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "選択したユーザIDに失効不可の署名をする" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "ユーザIDの追加" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "フォトIDの追加" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "選択したユーザIDの削除" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "副鍵を追加" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "スマートカードへ鍵の追加" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "スマートカードの鍵への移動" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "バックアップ鍵をスマートカードへ移動" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "選択した副鍵の削除" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "失効鍵の追加" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "選択したユーザIDから署名を削除する" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "鍵または選択した副鍵の有効期限を変更する" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "ユーザIDを主にする" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "秘密鍵と公開鍵の一覧の反転" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "優先指定の一覧 (エキスパート)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "優先指定の一覧 (冗長)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "選択したユーザIDに優先指定リストを設定" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "選択したユーザIDに優先鍵サーバのURLを設定" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "選択したユーザIDに注釈を設定する" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "パスフレーズの変更" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "所有者信用の変更" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "選択したユーザIDの署名を失効" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "選択したユーザIDの失効" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "鍵の失効または選択した副鍵の失効" #: g10/keyedit.c:1439 msgid "enable key" msgstr "鍵を有効にする" #: g10/keyedit.c:1440 msgid "disable key" msgstr "鍵を無効にする" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "選択したフォトIDを表示" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "使えないユーザIDをコンパクトにし、使えない署名を鍵から除去" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "使えないユーザIDをコンパクトにし、すべての署名を鍵から除去" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "秘密鍵ブロック\"%s\"の読み込みエラー: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "秘密鍵が使用できます。\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "この実行には秘密鍵がいります。\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "まず\"toggle\"コマンドを使ってください。\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* `sign' コマンドは `l' で始まると、ローカルの署名で (lsign)、\n" " `t' で始まると信用署名 (tsign)、`nr' で始まると失効不可署名\n" " (nrsign)、もしくはこれらの組み合わせ (ltsign, tnrsign, など)となります。\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "鍵は、失効されています。" #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "本当に全ユーザIDに署名しますか? (y/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "ヒント: まず署名するユーザIDを選択します\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "不明の署名タイプ「%s」\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "%sモードでこのコマンドは禁止です。\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "ユーザIDを少なくともひとつ選択してください。\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "最後のユーザIDは削除できません!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "選択した全ユーザIDを本当に削除しますか? (y/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "このユーザIDを本当に削除しますか? (y/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "この主鍵を本当に削除しますか? (y/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "鍵をきっかり1本選択してください。\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "コマンドはファイル名の引数を期待します\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "「%s」が開けません: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "バックアップ鍵を「%s」から読み込みする際のエラー: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "鍵を少なくとも1本選択してください。\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "選択した鍵を本当に削除しますか? (y/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "この鍵を本当に削除しますか? (y/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "選択した全ユーザIDを本当に失効しますか? (y/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "このユーザIDを本当に失効しますか? (y/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "この鍵全体を本当に失効しますか? (y/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "選択した副鍵を本当に失効しますか? (y/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "この副鍵を本当に失効しますか? (y/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "ユーザが指定した信用データベースを利用中、所有者信用は設定できません。\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "優先指定の一覧を設定:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "選択したユーザIDの優先指定を本当に更新しますか? (y/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "優先指定を本当に更新しますか? (y/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "変更を保存しますか? (y/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "保存せずに終了しますか? (y/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "更新に失敗しました: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "秘密の更新に失敗しました: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "鍵は無変更なので更新は不要です。\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "ダイジェスト: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "機能: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "鍵サーバ 修正しない" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "優先鍵サーバ: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "注釈: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "PGP 2.x形式ユーザIDの優先指定が、ありません。\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "この鍵は%sに%sによって鍵%sで失効されました\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "この鍵は、%s鍵%sによって失効可能です" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(機密指定)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "作成: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "失効: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "期限切れ: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "有効期限: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "利用法: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "信用: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "有効性: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "この鍵は使用禁止に設定されています" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "カード番号: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、\n" "ということを念頭においてください。\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "失効" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "期限切れ" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "*警告*: 主たるユーザIDがありません。このコマンドは、別な\n" " ユーザIDが主になると仮定する場合があります。\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "v3鍵の有効期限は変更できません\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "*警告*: これはPGP2形式の鍵です。フォトIDの追加で、一部の版のPGPは、\n" " この鍵を拒否するかもしれません。\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "それでも追加したいですか? (y/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "PGP2形式の鍵にはフォトIDを追加できません。\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "この正しい署名を削除しますか? (y/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "この無効な署名を削除しますか? (y/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "この未知の署名を削除しますか? (y/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "この自己署名を本当に削除しますか? (y/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d個の署名を削除しました。\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d個の署名を削除しました。\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "何も削除していません。\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "無効" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "ユーザID\"%s\" はコンパクトになりました: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "ユーザID \"%s\": %d の署名が除去されました\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "ユーザID \"%s\": %d の署名が除去されました\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "ユーザID \"%s\": 既に最小化されています\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "ユーザID \"%s\": 既にクリーンとなっています\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "*警告*: これはPGP 2.x形式の鍵です。指名失効者の追加で、一部の版のPGPは、\n" " この鍵を拒否するかもしれません。\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "PGP 2.x形式の鍵には指名失効者を追加できません。\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "指名失効者のユーザIDを入力してください: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "PGP 2.x形式の鍵は、指名失効者に任命できません\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "指名失効者には、その鍵自体を任命できません\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "この鍵は失効者としてもう指名されています\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "*警告*: ある鍵を指名失効者に設定すると、元に戻せません!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "本当にこの鍵を指名失効者に任命しますか? (y/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "秘密鍵の選択をといてください。\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "高々1個の副鍵を選択してください。\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "副鍵の有効期限を変更します。\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "主鍵の有効期限を変更します。\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "v3鍵の有効期限は変更できません\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "秘密鍵リングに対応する署名がありません\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "署名する副鍵%sはすでに相互証明されています\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "副鍵 %s は署名をしないので、相互証明の必要はありません\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "ユーザIDをきっかりひとつ選択してください。\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "ユーザID\"%s\"のv3自己署名をスキップします\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "優先鍵サーバURLを入力してください: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "本当に交換したいですか? (y/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "本当に削除したいですか? (y/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "注釈を入力: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "進みますか? (y/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "%d番のユーザIDはありません\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "ハッシュ%sのユーザIDはありません\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "%d番の副鍵はありません\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "ユーザID:\"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "%sで%s%s%sに署名されています\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (エクスポート不可)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "この署名は%sで期限切れです。\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "それでも本当に失効したいですか? (y/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "この署名にたいする失効証明書を作成しますか? (y/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "あなたによって署名されていません。\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "これらのユーザIDに鍵%sで署名しました:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (失効不可)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "あなたの鍵%sで%sに失効されています\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "これらの署名を失効しようとしています:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "失効証明書を本当に作成しますか? (y/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "秘密鍵がありません\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "ユーザID\"%s\"は、もう失効されています\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "*警告*: ユーザID署名が、%d秒未来です\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "鍵 %s は、もう失効されています。\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "副鍵 %s は、もう失効されています。\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "%s (大きさ%ld) の鍵%s (uid %d) のフォトIDとして表示\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "優先指定「%s」の重複\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "暗号方式の優先指定が多すぎます\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "ダイジェストの優先指定が多すぎます\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "圧縮の優先指定が多すぎます\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "優先指定文字列に無効な項目「%s」があります\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "直接署名を書き込みます\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "自己署名を書き込みます\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "鍵対応への署名を書き込みます\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "無効な鍵長。%uビットにします\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "鍵長を%uビットに丸めます\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certify" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Encrypt" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Authenticate" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsEeAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "鍵%sに可能な操作: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "今、可能な操作: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) 署名機能の反転\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) 暗号機能の反転\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) 認証機能の反転\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) 完了\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "ご希望の鍵の種類を選択してください:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA と RSA (デフォルト)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA と Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (署名のみ)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (署名のみ)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (暗号化のみ)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (暗号化のみ)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (機能をあなた自身で設定)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (機能をあなた自身で設定)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s 鍵は %u から %u ビットの長さで可能です。\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "副鍵の鍵長は? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "鍵長は? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "要求された鍵長は%uビット\n" #: g10/keygen.c:1722 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "署名の有効期限を指定してください。\n" " 0 = 署名は無期限\n" " = 署名は n 日間で満了\n" " w = 署名は n 週間で満了\n" " m = 署名は n か月間で満了\n" " y = 署名は n 年間で満了\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "鍵の有効期間は? (0)" #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "署名の有効期間は? (%s)" #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "無効な値\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "%sは無期限です\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "%署名は無期限です\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "鍵は%sで期限切れとなります\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "署名は%sで期限切れとなります\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "このシステムでは、2038年以降の日付を表示できませんが、\n" "2106年までなら正しく取り扱えます。\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "これで正しいですか? (y/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "あなたの鍵を同定するためにユーザIDが必要です。\n" "このソフトは本名、コメント、電子メール・アドレスから\n" "次の書式でユーザIDを構成します:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "本名: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "名前に無効な文字があります\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "名前を数字で始めてはいけません\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "名前は5文字以上でなければなりません\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "電子メール・アドレス: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "有効な電子メール・アドレスではありません\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "コメント: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "コメントに無効な文字があります\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "あなたは文字集合「%s」を使っています。\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "次のユーザIDを選択しました:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "電子メールのアドレスを本名やコメントに入れないように\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "名前(N)、コメント(C)、電子メール(E)の変更、または終了(Q)? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "まずエラーを修正してください\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "秘密鍵を保護するためにパスフレーズがいります。\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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:2034 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" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "鍵の生成が取り消されました。\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "「%s」へ公開鍵を書き込みます\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "「%s」へ秘密鍵スタブを書き込みます\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "「%s」へ秘密鍵を書き込みます\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "書き込み可能な公開鍵リングが見つかりません: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "書き込み可能な秘密鍵リングが見つかりません: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "公開鍵リング「%s」の書き込みエラー: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "秘密鍵リング「%s」の書き込みエラー: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "公開鍵と秘密鍵を作成し、署名しました。\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "この鍵は暗号化には使用できないことに注意してください。暗号化を行うには、\n" "\"--edit-key\"コマンドを使って副鍵を生成してください。\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "鍵の生成に失敗しました: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "鍵は%lu秒未来にできました (時間旅行か時計の障害でしょう)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "鍵は%lu秒未来にできました (時間旅行か時計の障害でしょう)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "*注意*: v3鍵に対する副鍵の作成は、OpenPGPに適合しません\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "本当に作成しますか? (y/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "カードへの鍵の保管に失敗しました: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "バックアップ・ファイル「%s」が作成できません: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "*注意*: カード鍵のバックアップが「%s」へ保存されます\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "無期限 " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "クリティカルな署名ポリシー: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "署名ポリシー: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "クリティカルな優先鍵サーバ: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "クリティカルな署名注釈: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "署名注釈: " #: g10/keylist.c:471 msgid "Keyring" msgstr "鍵リング" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "主鍵フィンガー・プリント:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr "副鍵フィンガー・プリント:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "主鍵フィンガー・プリント:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr "副鍵フィンガー・プリント:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " フィンガー・プリント =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " カードの通番 =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "「%s」から「%s」への移動に失敗: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "*警告*: 信用情報をもった2つのファイルが存在します。\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%sは変更のない方です\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%sは新しい方です\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "この潜在的な安全上の欠陥を修正してください\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "鍵リング「%s」をキャッシュします\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu個の鍵までキャッシュ済 (%lu個の署名)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu個の鍵をキャッシュ済 (%lu個の署名)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: 鍵リングができました\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "失効した鍵を検索結果に含める" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "key IDによる検索に副鍵も含める" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "キーサーバ・ヘルパーにデータを与える際、一時ファイルを使う" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "一時ファイルを使用後、それを削除しない" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "署名の検証時に自動的に鍵を取得する" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "鍵に設定される優先鍵サーバURLを与える" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "鍵に設定されたPKAレコードを鍵の取得時に与える" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "*警告*: 鍵サーバのオプション「%s」は、このプラットホームでは使われません\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "使用禁止" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "番号(s)、N)次、またはQ)中止を入力してください >" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "無効な鍵サーバ・プロトコルです (us %d!=handler %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "鍵\"%s\"が鍵サーバに見つかりません\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "鍵が鍵サーバに見つかりません\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "鍵%sを%sからサーバ%sに要求\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "鍵%sを%sに要求\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "%sからサーバ%sで名前を検索\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "%sから名前を検索\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "鍵%sを%sサーバ%sへ送信\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "鍵%sを%sへ送信\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "\"%s\"を%sサーバ%sから検索\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "\"%s\"をサーバ%sから検索\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "鍵サーバ・アクションがありません!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "*警告*: 別バージョンのGnuPGの鍵サーバ・ハンドラ (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "鍵サーバはVERSIONを送信しませんでした\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "鍵サーバ通信エラー: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "既知の鍵サーバがありません (オプション--keyserverを使いましょう)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "この構築では、外部鍵サーバの呼出しはサポートしていません\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "鍵サーバ・スキーム「%s」用のハンドラがありません\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "操作「%s」は、鍵サーバ・スキーム「%s」でサポートされていません\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%sはハンドラ・バージョン%dをサポートしません\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "鍵サーバのタイムアウト\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "鍵サーバの内部エラー\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\"鍵IDではありません: スキップします\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "*警告*: 鍵%sを%s経由で更新できません: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "1本の鍵を%sから更新\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "%d本の鍵を%sから更新\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "*警告*: URI %s からデータを取れません: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "*警告*: URI %s を解析できません\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "変な長さの暗号化済みセッション鍵 (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s 暗号化済みセッション鍵\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "未知のダイジェスト・アルゴリズムで生成されたパスフレーズ %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "公開鍵は%sです\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "公開鍵による暗号化済みデータ: 正しいDEKです\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "%u-ビット%s鍵, ID %s, 日付%sに暗号化されました\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "%s鍵, ID %sで暗号化されました\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "公開鍵の復号に失敗しました: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "%lu 個のパスフレーズで暗号化\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "1 個のパスフレーズで暗号化\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "%s暗号化済みデータを仮定\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "IDEA暗号方式は利用不能なので、楽天的ですが%sで代用しようとしています\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "復号に成功\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "*警告*: メッセージの完全性は保護されていません\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "*警告*: 暗号化されたメッセージは改竄されています!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "復号に失敗しました: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "*注意*: 送信者は\"極秘とする\"ように求めています\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "元のファイル名='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "*警告*: 複数のプレインテクストが見られます\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "スタンドアロン失効。\"gpg --import\"を使って適用してください\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "署名が見つかりません\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "署名の検証を省略\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "このあいまいな署名データは取り扱えません\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "%sに施された署名\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " %s鍵%sを使用\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "%sに%s鍵ID %sで施された署名\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "以下に鍵があります: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "\"%s\"からの 不正な 署名" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "\"%s\"からの期限切れの署名" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "\"%s\"からの正しい署名" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[不確定]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " 別名\"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "期限切れの署名 %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "この署名は%sで期限切れです\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s署名、ダイジェスト・アルゴリズム %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "バイナリー" #: g10/mainproc.c:1947 msgid "textmode" msgstr "テキストモード" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "未知の" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "署名を検査できません: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "分遣署名でありません\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "*警告*: 多重署名の検出。最初のものだけ検査します。\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "クラス0x%02xの独立署名\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "古い形式 (PGP 2.x) の署名\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "proc_tree() の中に無効なルート・パケットを検出しました\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "コア・ダンプを使用禁止にできません: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "「%s」のfstatが%sで失敗しました: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d)が%sで失敗しました: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "*警告*: 実験的公開鍵アルゴリズム%sを使用します\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "*警告*: Elgamal署名+暗号化鍵は廃止されています\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "*警告*: 実験的暗号アルゴリズム %s を使用します\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "*警告*: 実験的ダイジェスト・アルゴリズム %sを使用\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "*警告*: ダイジェスト・アルゴリズム %s は廃止されています\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "詳細は%sをご覧ください\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "*注意*: この機能は%sで利用できません\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: 廃止されているオプション\"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "*警告*:\"%s\"は、廃止されているオプションです\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "\"%s%s\"を代わりに使ってください\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "*警告*:\"%s\"は、廃止されているコマンドです。使わないでください\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "無圧縮" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "無圧縮|なし" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "このメッセージは、%sでは使用できません\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "あいまいなオプション「%s」\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "未知のオプション「%s」\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "不明の署名タイプ「%s」\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "ファイル「%s」は既に存在します。" #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "上書きしますか? (y/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: 未知の拡張子\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "新しいファイル名を入力してください" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "標準出力に書き込みます\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "署名されたデータが'%s'にあると想定します\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "新しい構成ファイル「%s」ができました\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "*警告*: 「%s」のオプションは起動している間、有効になりません\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "ディレクトリ「%s」ができました\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "公開鍵のアルゴリズム%dは、取り扱えません\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "*警告*: 潜在的にセキュアでない共通鍵暗号方式セッション鍵です\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "型%dの下位パケットにクリティカル・ビットを発見\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "このセッションでgpg-agentは無効です\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "GPG_AGENT_INFO環境変数の書式が正しくありません\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agentプロトコル・バージョン%dはサポートしていません\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "「%s」へ接続できません: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "エージェントに障害: エージェント利用禁止\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (主鍵ID %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "次のユーザの秘密鍵のロックを解除するにはパスフレーズがいります:\n" "\"%.*s\"\n" "%uビット%s鍵, ID %s作成日付は%s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "パスフレーズを再入力\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "パスフレーズを入力\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "ユーザによる取消し\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "バッチ・モードでパスフレーズは問合せできません\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "パスフレーズを入力: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "次のユーザの秘密鍵のロックを解除するには\n" "パスフレーズがいります:\"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%uビット%s鍵, ID %s作成日付は%s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (主鍵ID %s の副鍵)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "パスフレーズを再入力: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "あなたのフォトIDに使う画像を決めてください。画像はJPEGファイルである必\n" "要があります。画像は公開鍵といっしょに格納される、ということを念頭にお\n" "いておきましょう。もし大きな写真を使うと、あなたの鍵も同様に大きくなり\n" "ます! 240x288くらいにおさまる大きさの画像は、使いよいでしょう。\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "フォトID用のJPEGファイル名を入力してください: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "JPEGファイル「%s」が開けません: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "このJPEGは、本当に大きい (%dバイト) !\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "本当に使いたいですか? (y/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "「%s」は、JPEGファイルではありません\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "この写真は正しいですか (y/N/q)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "フォト・ビューアが設定されてません\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "フォトIDが表示不能!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "理由は指定されていません" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "鍵がとりかわっています" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "鍵(の信頼性)が損なわれています" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "鍵はもはや使われていません" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "ユーザIDがもう有効でありません" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "失効理由: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "失効のコメント: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "信用度が指定されていません:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " 別名\"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "この鍵がこのユーザをなのる本人のものかどうか、どれくらい信用できますか?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = 知らない、または何とも言えない\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = 信用し ない\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = 究極的に信用する\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = メーン・メニューに戻る\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = この鍵はとばす\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = 終了\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "この鍵の最小信用レベル: %s\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "あなたの決定は? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "本当にこの鍵を究極的に信用しますか? (y/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "究極的に信用した鍵への証明書:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%s: この鍵が本当に本人のものである、という兆候が、ありません\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "%s: この鍵が本当に本人のものである、という兆候が、少ししかありません\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "この鍵はたぶん本人のものです\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "この鍵は自分のものです\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "この鍵は、このユーザIDをなのる本人のものかどうか確信でき\n" "ません。今から行うことを*本当に*理解していない場合には、\n" "次の質問にはnoと答えてください。\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "それでもこの鍵を使いますか? (y/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "*警告*: 信用できない鍵を使っています!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "*警告*: この鍵は失効されたようです (失効鍵は不在)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "*警告*: この鍵は指名失効者によって失効されています!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "*警告*: この鍵は所有者によって失効されています!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " 署名が偽物なこともある、ということです。\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "*警告*: この副鍵は所有者によって失効されています!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "注意: この鍵は使用禁止に設定されています。\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "注意: 確認された署名者のアドレスは「%s」です\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "注意: 署名者のアドレス「%s」がDNSのエントリと一致しません\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "PKA情報が有効のため、信用レベルがFULLに調整されました\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "PKA情報が無効のため、信用レベルがNEVERに調整されました\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "注意: この鍵は期限切れです!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "*警告*: この鍵は信用できる署名で証明されていません!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " この署名が所有者のものかどうかの検証手段がありません。\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "*警告*: この鍵は信用できま せん!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " この署名はおそらく 偽物 です。\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "*警告*: この鍵は十分に信用できる署名で証明されていません!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " この署名が所有者のものかどうか確信できません。\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: スキップ: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: スキップ: 公開鍵はもうあります\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "ユーザIDを指定していません (\"-r\"を使いましょう) 。\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "今の受取人:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "ユーザIDを入力。空行で終了: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "そのユーザIDはありません。\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "スキップ: 公開鍵はデフォルトの受取人としてもう設定済みです\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "公開鍵は使用禁止です。\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "スキップ: 公開鍵はもう設定済みです\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "デフォルトの受取人\"%s\"が見つかりません\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: スキップ: 公開鍵は使用禁止です\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "有効な宛先がありません\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "データは保存されていません。\n" "保存するには\"--output\"オプションを使ってください\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "「%s」の作成エラー: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "分遣署名。\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "データ・ファイルの名前を入力: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "標準入力より読み込み中 ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "署名されたデータがありません\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "署名されたデータ「%s」が開けません\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "匿名の受取人用です。秘密鍵%sを試します ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "終了。匿名の受取人用です。\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "旧式のDEK符号は、サポートしていません\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "暗号アルゴリズム%d%sは未知か使用禁止です\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "*警告*: 暗号アルゴリズム%sは受取人の優先指定に入っていません\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "注意: 秘密鍵%sは%sで期限切れです\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "注意: 鍵は失効済みです" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet に失敗しました: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "鍵%sにはユーザIDがありません\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "失効者:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(これは、デリケートな失効鍵です)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "この鍵にたいする指名失効証明書を作成しますか? (y/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "ASCII外装出力を強制します。\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet に失敗しました: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "失効証明書を作成。\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "\"%s\"用の失効鍵が見つかりません\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "秘密鍵\"%s\"が見つかりません: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "対応する公開鍵がありません: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "公開鍵と秘密鍵が照合しません!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "この鍵にたいする失効証明書を作成しますか? (y/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "未知の保護アルゴリズムです\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "注意: この鍵は保護されていません!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "失効証明書を作成しました。\n" "\n" "見つからないような媒体に移動してください。もしワルがこの証明書への\n" "アクセスを得ると、そいつはあなたの鍵を使えなくすることができます。\n" "媒体が読み込み不能になった場合に備えて、この証明書を印刷して保管するの\n" "が賢明です。しかし、ご注意ください。あなたのマシンの印字システムは、\n" "だれでも見える場所にデータをおくことがあります!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "失効の理由を選択してください:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "キャンセル" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(ここではたぶん%dを選びます)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "予備の説明を入力。空行で終了:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "失効理由: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(説明はありません)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "よろしいですか? (y/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "秘密部分が得られません\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "保護アルゴリズム%d%sはサポートしていません\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "保護ダイジェスト%dはサポートしていません\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "無効なパスフレーズです。再入力してください" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "*警告*: 弱い鍵を検出しました。パスフレーズを変更してください。\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "問題視された16ビットのチェックサムを秘密鍵の保護に生成\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "弱い鍵ができました - 再実行\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "共通鍵暗号方式の弱い鍵を回避することができません。%d回試みました!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSAは8ビットの倍数のハッシュ長を必要とします\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA鍵 %sは安全でない(%uビット)ハッシュを用います\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA鍵 %s は%u ビット以上のハッシュを必要とします\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "*警告*: 署名のダイジェストが、メッセージと矛盾します\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "*警告*: 署名副鍵%sは、相互証明でありません\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "*警告*: 無効な相互証明が、署名副鍵%sにあります\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "公開鍵%sは、署名の%lu秒前です\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "公開鍵%sは、署名の%lu秒前です\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "鍵%sは%lu秒未来にできました (時間旅行か時計の障害でしょう)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "鍵%sは%lu秒未来にできました (時間旅行か時計の障害でしょう)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "注意: 署名鍵%sは%sに期限切れです\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s署名、ダイジェスト・アルゴリズム %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "未知のクリティカル・ビットにより、鍵%sの署名を不正とみなします\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "鍵%s: 副鍵失効署名にたいする副鍵がありません\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "鍵%s: 副鍵対応への署名にたいする副鍵がありません\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "*警告*: 表記を%%拡張不能 (大きすぎ)。非拡張を使用。\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "*警告*: ポリシーURLを%%拡張不能 (大きすぎ)。非拡張を使用。\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "*警告*: 優先指定鍵サーバURLを%%拡張不能 (大きすぎ)。非拡張を使用。\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "作成された署名の検査に失敗しました: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s署名。署名者:\"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "--pgp2モードでは、PGP 2.x形式の鍵で分離署名できるだけです\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "*警告*: ダイジェスト・アルゴリズム %s (%d) の強制が、受取人の優先指定と対立し" "ます\n" #: g10/sign.c:960 msgid "signing:" msgstr "署名:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "--pgp2モードではPGP 2.x形式の鍵でクリア署名しかできません\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s暗号化を使用します\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "セキュアでないというフラグが鍵には設定されていません。\n" "偽物乱数生成器とはいっしょに使えません!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "\"%s\"をスキップします: 重複\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "\"%s\"をスキップします: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "スキップ: 秘密鍵はもうあります\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "これはPGPの生成したElgamal鍵で、署名用には安全ではありません!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "信用レコード%lu, 型%d: 書き込みに失敗しました: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Sitei sareta sin'youdo itiran %s\n" "# (\"gpg --import-ownertrust\" wo tukatte hukkyuu dekimasu)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "「%s」でエラー: %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "行が長すぎます" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "コロンがありません" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "無効なフィンガー・プリント" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "所有者信用度がありません" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "「%s」で信用レコードの検索エラー: %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "「%s」で読み込みエラー: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "信用データベース: 同期に失敗しました: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "「%s」のロックを作成できません\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "「%s」がロックできません\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "信用データベース レコード%lu: シークに失敗しました: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "信用データベース レコード%lu: 書き込みに失敗しました (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "信用データベースのトランザクションが大きすぎます\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "「%s」にアクセスできません: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: ディレクトリがありません!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: バージョン・レコードの作成に失敗しました: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: 無効な信用データベースを作成\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: 信用データベースができました\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "注意: 信用データベースが、書き込み不能です\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: 無効な信用データベース\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: ハッシュ表の作成に失敗しました: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: バージョン・レコードの更新エラー: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: バージョン・レコードの読み込みエラー: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: バージョン・レコードの書き込みエラー: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "信用データベース: シークに失敗しました: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "信用データベース: 読み込みに失敗しました (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: 信用データベース・ファイルではありません\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: レコード番号%lu番のバージョン・レコード\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: 無効なファイル・バージョン%d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: 空きレコードの読み込みエラー: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: ディレクトリ・レコードの書き込みエラー: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: レコードの初期化に失敗しました: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: レコードの追加に失敗しました: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "エラー: 信用データベースが壊れています。\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "%d文字以上の長さのテキスト行は、取り扱えません\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "入力行の長さが%d文字を超えています\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "「%s」は、有効な大型鍵IDでありません\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "鍵%s: 信用する鍵として受理しました\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "鍵%sが信用データベースに複数あります\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "鍵%s: 信用される鍵の公開鍵がありません - スキップします\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "鍵%sを究極的に信用するよう記録しました\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "信用レコード%lu, リクエスト型%d: 読み込みに失敗しました: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "信用レコード%luが要求された型%dではありません\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "trustdbを下記のコマンドで再生成することを試すことができます:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "もし、それがうまくいかなかったら、マニュアルをご覧ください\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "未知の信用モデル (%d) は使えません - %s信用モデルを仮定\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "%s信用モデルを使用\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ 失効 ]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[期限切れ]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ 未知 ]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ 未定 ]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[まぁまぁ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ 充分 ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ 究極 ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "未定義" #: g10/trustdb.c:554 msgid "never" msgstr "断じてなし" #: g10/trustdb.c:555 msgid "marginal" msgstr "まぁまぁ" #: g10/trustdb.c:556 msgid "full" msgstr "充分" #: g10/trustdb.c:557 msgid "ultimate" msgstr "究極" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "信用データベースの検査は、不要です\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "次回の信用データベース検査は、%sです\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "信用モデル「%s」で信用データベースの検査は、不要です\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "信用モデル「%s」で信用データベースの更新は、不要です\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "公開鍵%sが見つかりません: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "--check-trustdbを実行してください\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "信用データベースの検査\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d本の鍵を処理 (うち%d本の有効性数をクリア)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "究極的に信用する鍵が見つかりません\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "究極的に信用する鍵%sの公開鍵が見つかりません\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "最小の「ある程度の信用」%d、最小の「全面的信用」%d、%s信用モデル\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "深さ: %d 有効性: %3d 署名: %3d 信用: %d-, %dq, %dn, %dm, %df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "信用データベースのバージョン・レコードが更新できません: 書き込みに失敗しまし" "た: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "署名を検証できませんでした。署名ファイル\n" "(.sigや.asc)がコマンド行の最初でなければ\n" "ならないことを念頭においてください。\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "入力の%u行目が長すぎるか、LFがないようです\n" #: util/errors.c:53 msgid "general error" msgstr "一般的なエラー" #: util/errors.c:54 msgid "unknown packet type" msgstr "未知のパケット型です" #: util/errors.c:55 msgid "unknown version" msgstr "未知のバージョンです" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "未知の公開鍵アルゴリズムです" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "未知のダイジェスト・アルゴリズムです" #: util/errors.c:58 msgid "bad public key" msgstr "公開鍵が不正です" #: util/errors.c:59 msgid "bad secret key" msgstr "秘密鍵が不正です" #: util/errors.c:60 msgid "bad signature" msgstr "署名が不正です" #: util/errors.c:61 msgid "checksum error" msgstr "チェックサム・エラー" #: util/errors.c:62 msgid "bad passphrase" msgstr "パスフレーズが不正です" #: util/errors.c:63 msgid "public key not found" msgstr "公開鍵が見つかりません" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "未知の暗号方式アルゴリズムです" #: util/errors.c:65 msgid "can't open the keyring" msgstr "鍵リングが開けません" #: util/errors.c:66 msgid "invalid packet" msgstr "無効なパケットです" #: util/errors.c:67 msgid "invalid armor" msgstr "無効な外装です" #: util/errors.c:68 msgid "no such user id" msgstr "そのユーザIDはありません" #: util/errors.c:69 msgid "secret key not available" msgstr "秘密鍵が利用できません" #: util/errors.c:70 msgid "wrong secret key used" msgstr "誤った秘密鍵が使われています" #: util/errors.c:71 msgid "not supported" msgstr "サポートされていません" #: util/errors.c:72 msgid "bad key" msgstr "鍵が不正です" #: util/errors.c:73 msgid "file read error" msgstr "ファイル読み込みエラー" #: util/errors.c:74 msgid "file write error" msgstr "ファイルの書き込みエラー" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "未知の圧縮アルゴリズムです" #: util/errors.c:76 msgid "file open error" msgstr "ファイルのオープン・エラー" #: util/errors.c:77 msgid "file create error" msgstr "ファイルの作成エラー" #: util/errors.c:78 msgid "invalid passphrase" msgstr "パスフレーズが不正です" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "未実装の公開鍵アルゴリズムです" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "未実装の暗号アルゴリズムです" #: util/errors.c:81 msgid "unknown signature class" msgstr "未知の署名クラスです" #: util/errors.c:82 msgid "trust database error" msgstr "信用データベースのエラーです" #: util/errors.c:83 msgid "bad MPI" msgstr "不正なMPIです" #: util/errors.c:84 msgid "resource limit" msgstr "リソースが限界です" #: util/errors.c:85 msgid "invalid keyring" msgstr "無効な鍵リングです" #: util/errors.c:86 msgid "bad certificate" msgstr "不正な証明書です" #: util/errors.c:87 msgid "malformed user id" msgstr "ユーザIDの書式が正しくありません" #: util/errors.c:88 msgid "file close error" msgstr "ファイルのクローズ・エラー" #: util/errors.c:89 msgid "file rename error" msgstr "ファイル名の変更エラー" #: util/errors.c:90 msgid "file delete error" msgstr "ファイルの削除エラー" #: util/errors.c:91 msgid "unexpected data" msgstr "予期せぬデータです" #: util/errors.c:92 msgid "timestamp conflict" msgstr "日時が矛盾しています" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "使用できない公開鍵アルゴリズムです" #: util/errors.c:94 msgid "file exists" msgstr "ファイルが存在しています" #: util/errors.c:95 msgid "weak key" msgstr "弱い鍵です" #: util/errors.c:96 msgid "invalid argument" msgstr "無効な指定です" #: util/errors.c:97 msgid "bad URI" msgstr "URIが不正です" #: util/errors.c:98 msgid "unsupported URI" msgstr "そのURIはサポートしていません" #: util/errors.c:99 msgid "network error" msgstr "ネットワーク・エラー" #: util/errors.c:101 msgid "not encrypted" msgstr "暗号化されていません" #: util/errors.c:102 msgid "not processed" msgstr "未処理" #: util/errors.c:104 msgid "unusable public key" msgstr "使用できない公開鍵です" #: util/errors.c:105 msgid "unusable secret key" msgstr "使用できない秘密鍵です" #: util/errors.c:106 msgid "keyserver error" msgstr "鍵サーバのエラー" #: util/errors.c:107 msgid "canceled" msgstr "キャンセルされました" #: util/errors.c:108 msgid "no card" msgstr "カードがありません" #: util/errors.c:109 msgid "no data" msgstr "データがありません" #: util/logger.c:183 msgid "ERROR: " msgstr "エラー: " #: util/logger.c:186 msgid "WARNING: " msgstr "*警告*: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... バグです (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "バグを発見 ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "yes" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|okay" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancel|cancel" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "*警告*: セキュアでないメモリーを使用しています!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "詳細はhttp://www.gnupg.org/documentation/faq.htmlをご覧ください\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "初期化済みの安全なメモリーがない場合には操作できません\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(この目的には誤ったプログラムを使ったのでしょう)\n" gnupg-1.4.20/po/ca.po0000644000175000017500000065533512635457217011235 00000000000000# Missatges de gnupg en català. # Copyright © 2001, 2002, 2003, 2005 Free Software Foundation, Inc. # Carles Sadurní Anguita , 2001. # Jordi Mallach , 2001, 2002, 2003, 2005. # # Coses (jm): # ID d'usuari és masculí? Hi ha una mescla... # (ivb: ID == identificador -> masculí) # Canviar ID -> ID d'usuari # Xifratge vs. Xifrat # (ivb: xifratge -> acció, xifrat -> adjectiu) # + coses (ivb): # - Algunes frases incompletes «x desconegut» -> «x és desconegut». # - «algoritme» o «algorisme»? (ambdós són correctes) # - digest -> resum # - «anell» o «clauer»? (key ring -> clauer) # - bug -> error? (del recull) # - Crec q uses més «signatura» q «firma»; unifique. # - Usar majúscules x ressaltar (com original)? # - Hi ha cert desordre en les cometes ;) # - Frases índies completades. # - Algunes incoherències: error {en la lectura,en llegir,mentre es llegia} # - Probablement he clavat la pota en tots els Photo ID :P # - Només es maneja amb les mans. # - sapigueu -> sapieu? (x coherència) msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:20+0200\n" "Last-Translator: Jordi Mallach \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "no s'ha pogut generar un prim amb pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "no s'ha pogut generar un prim amb menys de %d bits\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "no s'ha trobat cap mòdul d'acumulació d'entropia\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "no s'ha pogut obrir «%s»\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "s'està escrivint la clau secreta a «%s»\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "no s'ha pogut obrir «%s»: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "no es pot fer stat de «%s»: %s\n" # Descartar, deixar passar... ignorar és un anglicisme. ivb #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "«%s» no és un fitxer regular: es descarta\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "nota: el fitxer random_seed és buit\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "AVÍS: el tamany del fitxer random_seed no és vàlid - no s'usarà\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "no s'ha pogut llegir «%s»: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "nota: el fitxer random_seed no s'ha actualitzat\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "no s'ha pogut crear «%s»: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "no s'ha pogut escriure «%s»: %s\n" # No em passe! ;) ivb #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "no s'ha pogut tancar «%s»: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVÍS: esteu usant un generador de nombres aleatoris insegur!!\n" #: cipher/random.c:894 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 nombres aleatoris és només un pedaç\n" "per a que funcioni - de cap manera és un GNA fort!\n" "\n" "NO UTILITZEU CAP DADA GENERADA PER AQUEST PROGRAMA!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Si us plau, espereu mentre es genera entropia. Feu alguna tasca si\n" "vos ajuda no avorrir-vos, ja que ajudarà a la qualitat de la entropia.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "No hi ha prou bytes aleatoris. Per favor, feu alguna altra cosa per que el\n" "sistema tinga oportunitat de recollir més entropia. (Calen %d bytes més)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "no s'ha pogut emmagatzemar l'empremta digital: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "no s'ha pogut reconstruir la memòria cau de l'anell: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "no s'ha pogut eliminar el bloc de claus: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "l'enviament al servidor de claus ha fallat: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 #, fuzzy msgid "|A|Please enter the Admin PIN" msgstr "Introduïu el nom d'usuari: " #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" # Parts? Peces? ivb #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "parts de la clau secreta no estan disponbles\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Seleccioneu la raó de la revocació:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "error en crear «%s»: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "s'ha produït un error en llegir el bloc de claus: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "error: l'empremta digital és invàlida\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "«%s» ja està comprimida\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "genera un nou parell de claus" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "genera un nou parell de claus" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "no s'ha pogut inicialitzar la base de dades de confiança: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "La generació de claus ha fallat: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "La generació de claus ha fallat: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "signatura %s, algorisme de resum %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "la capçalera d'armadura és invàlida: " #: g10/armor.c:459 msgid "armor header: " msgstr "capçalera d'armadura: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "la capçalera de signatura clara és invàlida\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "capçalera d'armadura: " # És un missatge d'error? ivb # «Anidada» és un castellanisme. Niuades? Imbricades (SC)?? ivb #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "signatures en text pla imbricades\n" # FIXME: un-indiar. jm #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "armadura inesperada:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "la línia escapada amb guió és invàlida: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "el caràcter radix64 %02x invàlid s'ha omés\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "fi de fitxer prematur (no CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "fi de fitxer prematur (en CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC malformat\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "error de CRC; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "fí de fitxer prematur (al final)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "error en l'última línia\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "no s'han trobat dades OpenPGP vàlides.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "l'armadura és invàlida: la línia és més llarga que %d caràcters\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "hi ha un caràcter «quoted printable» en l'armadura - probablement s'ha " "utilitzat un MTA amb errors\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "la clau secreta no està disponible" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" # Destès? ivb # Desatès, sí. jm #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "no es pot fet això en mode desatès\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Aquesta ordre no està permesa mentre s'està en mode %s.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "La vostra selecció? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[no establert]" #: g10/card-util.c:512 msgid "male" msgstr "home" #: g10/card-util.c:513 msgid "female" msgstr "dóna" #: g10/card-util.c:513 msgid "unspecified" msgstr "no especificat" # Gènere? Nombre? Passat, futur? ivb # Probablement és una clau, femení. jm # Werner FIXME: please add translator comment saying *what* is # uncompressed so we know the gender. jm #: g10/card-util.c:540 msgid "not forced" msgstr "no forçat" #: g10/card-util.c:540 msgid "forced" msgstr "forçat" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "no hi ha cap clau pública corresponent: %s\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "error en crear l'anell «%s»: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "error en la lectura de «%s»: %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "error en crear «%s»: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "preferències actualitzades" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "hi ha un caràcter invàlid en la cadena de preferència\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "hi ha un caràcter invàlid en la cadena de preferència\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "error: l'empremta digital és invàlida\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "Empremta digital:" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "error: l'empremta digital és invàlida\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "La generació de claus ha fallat: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "no s'han trobat dades OpenPGP vàlides.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "s'ha produït un error mentre s'escrivia l'anell secret «%s»: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Quina grandària voleu? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Quina grandària voleu? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Quina grandària voleu? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "arrodonida fins a %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "error en llegir el bloc de claus secretes «%s»: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "es descarta: la clau secreta ja és present\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Seleccioneu quin tipus de clau voleu:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr "" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (només xifrar)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "La selecció és invàlida.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Seleccioneu la raó de la revocació:\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "l'algorisme de protecció és desconegut\n" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "Les parts secretes de la clau primària no estan disponibles.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "es descarta: la clau secreta ja és present\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "error mentre s'escrivia l'anell «%s»: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "ix del menú" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "les ordres entren en conflicte\n" # «pantalla» o «ajuda»? ivb # «ajuda», evidentment. jm #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "mostra aquesta ajuda" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "La clau és disponible en: " #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "canvia la data de caducitat" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "canvia la confiança" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "mostra empremta" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "genera un nou parell de claus" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "les ordres entren en conflicte\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "L'ordre no és vàlida (proveu «help»)\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "la clau secreta no està disponible" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "no s'ha pogut eliminar el bloc de claus: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 #, fuzzy msgid "Enter New Admin PIN: " msgstr "Introduïu el nom d'usuari: " #: g10/cardglue.c:1014 #, fuzzy msgid "Enter New PIN: " msgstr "Introduïu el nom d'usuari: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 #, fuzzy msgid "Enter PIN: " msgstr "Introduïu el nom d'usuari: " #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Repetiu la contrasenya: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "la contrasenya no s'ha repetit correctament; torneu a intentar-ho" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "no s'ha pogut obrir «%s»\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output no funciona per a aquesta ordre\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "no s'ha trobat la clau «%s»: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "s'ha produït un error en llegir el bloc de claus: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(a no ser que especifiqueu la clau per la empremta digital)\n" # Ahà! Abans «batch» està tal qual. Cal unificar. ivb # Fet. jm #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "no es pot fer això en el mode desatès sense «--yes»\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Voleu esborrar aquesta clau de l'anell? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "És una clau secreta! Voleu esborrar-la? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "no s'ha pogut eliminar el bloc de claus: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "s'ha netejat la informació de la confiança\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "hi ha una clau secreta per a la clau pública «%s»!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "utilitzeu l'opció «--delete-secret-keys» per a eliminar-la primer.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "error en la creació de la contrasenya: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "no es pot usar un paquet asimètric ESK al estar en mode S2K\n" #: g10/encode.c:229 #, fuzzy, c-format msgid "using cipher %s\n" msgstr "Ha fallat el procés de signatura: %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "«%s» ja està comprimida\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "AVÍS: «%s» és un fitxer buit\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "només podeu xifrar a claus RSA de 2048 bits o menys en el mode --pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "s'està llegint des de «%s»\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "no s'ha pogut utilitzar el xifratge IDEA per a totes les claus per a les que " "esteu xifrant.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "forçar el xifrat asimètric %s (%d) viola les preferències del destinatari\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "forçar l'algoritme de compressió %s (%d) viola les preferències del " "destinatari\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "forçar el xifrat asimètric %s (%d) viola les preferències del destinatari\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "no podeu usar %s mentre esteu en mode %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s xifrat per a: «%s»\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "dades xifrades amb %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "xifrat amb l'algoritme %d (desconegut)\n" # És no-wrap? ivb # Com? jm #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATENCIÓ: el missatge s'ha xifrat amb una clau feble durant el xifratge\n" "simètric.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problema en tractar amb un paquet xifrat\n" # Execució de programes remots, o execució remota de programes? jm #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "no hi ha suport per a l'execució remota de programes\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "no es pot crear el directori «%s»: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "les crides a programes externs estan inhabilitades per tindre el fitxer " "d'opcions permissos insegurs\n" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "" "aquesta plataforma necessita fitxers temporals quan es crida a programes " "externs\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "no s'ha pogut executar %s «%s»: %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "no s'ha pogut executar %s «%s»: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "s'ha produït un error del sistema en cridar el programa extern: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "s'ha produït una eixida no natural del programa extern\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "no s'ha pogut executar el programa extern\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "no s'ha pogut llegir la resposta del programa extern: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "AVÍS: no s'ha pogut eliminar el fitxer temporal (%s) «%s»: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "AVÍS: no s'ha pogut eliminar el directori temporal «%s»: %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "La signatura es marcarà com a irrevocable.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr "no s'han ttrobat claus de revocació per a «%s»\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "revoca una clau secundària" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "la clau secreta és inusable" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "s'està escrivint la clau secreta a «%s»\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "clau %08lX: no està protegida - es descarta\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "clau %08lX: clau d'estil PGP 2.x - es descarta\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "" "clau %08lX: la signatura de la subclau és en el lloc equivocat - es " "descarta\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "no s'ha pogut inicialitzar la base de dades de confiança: %s\n" #: g10/export.c:563 #, fuzzy, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "AVÍS: la clau secreta %08lX no te una simple suma de comprovació SK\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "AVÍS: no s'ha exportat res\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Ordres:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[fitxer]|crea una signatura" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[fitxer]|crea una signatura en text clar" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "crea una signatura separada" #: g10/gpg.c:393 msgid "encrypt data" msgstr "xifra dades" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "xifra només amb xifratge simètric" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "desxifra dades (predeterminat)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verifica una signatura" #: g10/gpg.c:401 msgid "list keys" msgstr "llista claus" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "llista claus i signatures" # «de les claus» o «de la clau»? ivb #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "comprova les signatures de la claus" # «dactilars» o «digitals»? ivb #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "llista claus i empremtes digitals" #: g10/gpg.c:406 msgid "list secret keys" msgstr "llista claus secretes" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "genera un nou parell de claus" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "elimina claus de l'anell públic" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "elimina claus de l'anell secret" #: g10/gpg.c:411 msgid "sign a key" msgstr "signa una clau" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "signa una clau localment" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "signa o edita una clau" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "genera un certificat de revocació" #: g10/gpg.c:416 msgid "export keys" msgstr "exporta claus" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exporta claus a un servidor de claus" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importa claus d'un servidor de claus" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "cerca claus en un servidor de claus" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "actualitza totes les claus des d'un servidor de claus" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importa/fon claus" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "actualitza la base de dades de confiança" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [fitxers]|imprimeix resums de missatges" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opcions:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "crea eixida amb armadura ascii" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NOM|xifra per a NOM" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "usa aquest id per a signar o desxifrar" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|nivell de compressió N (0 no comprimeix)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "usa el mode de text canònic" #: g10/gpg.c:486 msgid "use as output file" msgstr "fitxer d'eixida" # Un dels dos és en la llista d'opcions amb --help. Urgh. jm #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "detall" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "no fa cap canvi" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "pregunta abans de sobreescriure" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(En la pàgina del man hi ha una llista completa d'ordres i d'opcions)\n" # Crec q (A)lice (orig.), (B)ob (dest.), etc. són noms usats pel Zimmerman # en el manual original de PGP. A, B, C... ivb # En efecte. Idem per a Mallory més endavant. Els deixe com a l'original. jm #: g10/gpg.c:576 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 Bob [fitxer] signa i xifra per a l'usuari Bob\n" " --clearsign [fitxer] crea una signatura en text clar\n" " --detach-sign [fitxer] crea una signatura separada\n" " --list-keys [noms] mostra claus\n" " --fingerprint [noms] mostra empremtes digitals\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Si us plau, informeu sobre els errors a .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Forma d'ús: gpg [opcions] [fitxers] (-h per a veure l'ajuda)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Sintaxi: gpg [opcions] [fitxers]\n" "signa, comprova, xifra o desxifra\n" "l'operació predeterminada depén de les dades introduïdes\n" # Suportats? ivb # A Softcatalà diuen molt «implementat». jm # Precissament acabem de parlar d'«implementat a la llista del GNOME # i s'ha dit que és erroni, igual que «suportat» :) Les alternatives # encara no m'agraden massa... jm #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmes suportats:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Clau pública: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Xifratge: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Dispersió: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compressió: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "forma d'ús: gpg [opcions] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "les ordres entren en conflicte\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "no s'ha trobat cap signe = a la definició de grup «%s»\n" # Indi. ivb #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "AVÍS: el propietari és insegur en %s «%s»\n" # Indi. ivb #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "AVÍS: el propietari és insegur en %s «%s»\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "AVÍS: els permissos són insegurs en %s «%s»\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "AVÍS: els permissos són insegurs en %s «%s»\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "AVÍS: el propietari del directori envoltant és insegur en %s «%s»\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "AVÍS: el propietari del directori envoltant és insegur en %s «%s»\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "AVÍS: els permissos del directori envoltant són insegurs en %s «%s»\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "AVÍS: els permissos del directori envoltant són insegurs en %s «%s»\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "s'ha creat el nou fitxer d'opcions «%s»\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "No hi ha cap signatura corresponent en l'anell secret\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "la URL de política de signatura donada no és vàlida\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "mostra en quin anell de claus està una clau llistada" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "No hi ha cap signatura corresponent en l'anell secret\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTA: es descarta el fitxer d'opcions predeterminades antic «%s»\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: no existeix el fitxer d'opcions predeterminades «%s»\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "fitxer d'opcions «%s»: %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "s'estan llegint opcions de «%s»\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: %s no és per a ús normal!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s no és un joc de caràcters vàlid\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s no és un joc de caràcters vàlid\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "no s'ha pogut analitzar sintàcticament la URI del servidor de claus\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d opcions d'exportació no vàlides\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "opcions d'exportació no vàlides\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: opcions d'importanció no vàlides\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "opcions d'importació no vàlides\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d opcions d'exportació no vàlides\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "opcions d'exportació no vàlides\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: opcions d'importanció no vàlides\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "opcions d'importació no vàlides\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s no és un joc de caràcters vàlid\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "la URL de política de signatura donada no és vàlida\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s no és un joc de caràcters vàlid\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s no és un joc de caràcters vàlid\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d opcions d'exportació no vàlides\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "opcions d'exportació no vàlides\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "no s'ha pogut fixar l'exec-path a %s\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d opcions d'exportació no vàlides\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "AVÍS: el programa podria crear un fitxer core!\n" # FIXME: preferència? jm # Ho discutírem en la llista, segur. Deu ser als arxius. ivb #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "AVÍS: %s té preferència sobre %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s no és permés amb %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s no té sentit amb %s!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "gpg-agent no està disponible en aquesta sessió\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "s'està escrivint la clau secreta a «%s»\n" # clares -> en clar? ivb #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "només podeu fer signatures separades o en clar en el mode --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "no podeu signar i xifrar al mateix temps en el mode --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "heu d'utilitzar fitxers (i no un conducte) mentre treballeu amb --pgp2 " "habilitat.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "xifrar un missatge en mode --pgp2 requereix el xifratge IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "l'algorisme de xifratge triat no és vàlid\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "l'algorisme de resum seleccionat no és vàlid\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "l'algorisme de xifratge triat no és vàlid\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "l'algorisme de resum de certificació seleccionat no és vàlid\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed ha de ser major que 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed ha de ser major que 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth ha d'estar en el rang 1 a 255\n" #: g10/gpg.c:3130 #, fuzzy msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "default-check-level és invàlid; ha de ser 0, 1, 2 o 3\n" #: g10/gpg.c:3132 #, fuzzy msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "default-check-level és invàlid; ha de ser 0, 1, 2 o 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: el mode S2K simple (0) no és gens recomanable\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "el mode S2K és invàlid; ha de ser 0, 1 o 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "les preferències per defecte són invàlides\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "les preferències personals de xifrat són invàlides\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "les preferències personals de digest són invàlides\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "les preferències personals de compressió són invàlides\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s encara no funciona amb %s\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "no podeu usar l'algorisme de xifratge «%s» mentre esteu en mode %s\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "no podeu usar l'algorisme de resum %s mentre esteu en mode %s\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "no podeu usar l'algorisme de compressió %s mentre esteu en mode %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "no s'ha pogut inicialitzar la base de dades de confiança: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "AVÍS: s'han donat destinataris (-r) sense usar xifratge de clau pública\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [nom_del_fitxer]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [nom_del_fitxer]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "ha fallat el desxifratge: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [nom_del_fitxer]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [nom_del_fitxer]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "no podeu usar %s mentre esteu en mode %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [nom_del_fitxer]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nom_del_fitxer]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [nom_del_fitxer]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "no podeu usar %s mentre esteu en mode %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [nom_del_fitxer]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [nom_del_fitxer]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [nom_del_fitxer]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key user-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key user-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key user-id [ordres]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [user-id] [anell]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "l'enviament al servidor de claus ha fallat: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "la recepció des del servidor de claus ha fallat: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "l'exportació de la clau ha fallat: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "ha fallat la cerca al servidor de claus: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "ha fallat el refresc des del servidor de claus: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "no s'ha pogut llevar l'armadura: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "no s'ha pogut crear l'armadura: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "l'algoritme de dispersió és invàlid «%s»\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[nom_del_fitxer]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Endavant, escriviu el missatge...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "la URL de política de certificació donada no és vàlida\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "la URL de política de signatura donada no és vàlida\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "la URL de política de signatura donada no és vàlida\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "" "hi ha massa entrades en la memòria cau de claus públiques - desactivada\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[No s'ha trobat l'id d'usuari]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "clau %08lX: clau secreta sense clau pública - es descarta\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "La clau invàlida %08lX s'ha fet vàlida amb --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "" "no hi ha una clau secreta per a la subclau pública %08lX - es descarta\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "s'usarà la clau secundària %08lX en lloc de la primària %08lX\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "una mica més silenciós" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "pren les claus d'aquest anell" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "fes els conflictes de marques de temps només un avís" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|escriu informació d'estat en aquest FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Forma d'ús: gpgv [opcions] [fitxers] (-h per a veure l'ajuda)" # Werner FIXME: should it use «Usage»? #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Sintaxi: gpg [opcions] [fitxers]\n" "Comprova signatures amb claus conegudes amb confiança\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "L'assignació d'un valor ací és cosa vostra; aquest valor mai s'exportarà\n" "a cap tercer. Ho necessitem per a implementar la xarxa de confiança; no té\n" "res a veure amb la xarxa de certificats (creada implícitament)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Per a construir la xarxa de confiança, GnuPG necessita saber quines claus\n" "tenen confiança absoluta - aquestes són normalment les claus per a les que\n" "teniu accés a la clau secreta. Contesteu «sí» per a donar a aquesta clau\n" "confiança absoluta\n" # "clau no confiable"? jm # No fiable, no de confiança, no de fiar... ivb #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Si voleu utilitzar aquesta clau no de confiança de totes maneres, dieu «sí»." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Introduïu l'ID d'usuari de la persona a qui voleu enviar el missatge." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "En general no és bona idea utilitzar la mateixa clau per a signar i\n" "xifrar. Aquest algoritme només s'hauria d'usar en tasques concretes.\n" "Si us plau, consulteu al vostre expert en seguretat primer." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Introduïu la grandària de la clau" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Contesteu «sí» o «no»" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Introduïu el valor requerit tal i com es mostra en l'indicatiu.\n" "És possible introduir una data ISO (AAAA-MM-DD) però no rebreu\n" "una bona resposta d'error - en canvi, el sistema tractarà d'interpretar\n" "el valor donat com un interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Introduïu el nom del propietari de la clau" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "introduïu una adreça de correu (opcional però molt recomanable)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Introduïu un comentari opcional" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N canvia el nom.\n" "C canvia el comentari.\n" "E canvia l'adreça de correu electrònic.\n" "O continua la generació de les claus.\n" "Q ix." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Contesteu «sí» (o només «s») si és correcte generar la subclau." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Quan signeu un ID d'usuari d'una clau, primer hauríeu de verificar que la " "clau\n" "pertany a la persona esmentada en l'ID d'usuari. És útil per a altres " "saber\n" "amb quanta cura heu verificat açò.\n" "\n" "«0» significa que no feu cap declaració de amb quanta cura heu verificat\n" " la clau.\n" "\n" "«1» significa que creieu que la clau és de la persona que diu que és la\n" " propietària, però no heu pogut, o no heu verificat la clau de cap " "manera.\n" " Açò és útil per a la verificació d'un «rol», quan signeu la clau d'un\n" " usuari amb pseudònim.\n" "\n" "«2» significa que heu fet algunes comprovacions de la clau. Per exemple, " "açò\n" " pot significar que heu verificat la emprenta digital de la clau i " "verificat\n" " l'ID d'usuari en la clau amb el photo ID.\n" "\n" "«3» significa que heu fet una verificació exhaustiva de la clau. Per " "exemple,\n" " açò pot significar que heu verificat la emprenta digital amb el " "propietari\n" " de la clau en persona, i que heu comprovat, mitjançant un document " "difícil\n" " de falsificar amb photo ID (com un passaport) que el nom del propietari\n" " coincideix amb el nom de l'ID d'usuari en la clau, i finalment que heu\n" " verificat (per intercanvi de correu) que l'adreça de correu en la clau\n" " pertany al propietari de la clau.\n" "\n" "Teniu en compte que els exemples donats anteriorment per als nivels 2 i 3 " "són\n" "*només* exemples. Al final, és cosa vostra decidir què significa «alguna» i\n" "«exhaustiva» per a vosaltres quan voleu signar altres claus.\n" "\n" "Si no sabeu quina és la resposta correcta, contesteu «0»." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Contesteu «sí» si voleu signar TOTS els ID d'usuari" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Contesteu «sí» si realment voleu eliminar aquest ID d'usuari.\n" "Tots els certificats també es perdran!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Contesteu «sí» si és correcte eliminar la subclau" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Aquesta és una signatura vàlida en la clau; normalment no voldreu\n" "eliminar aquesta signatura perquè pot ser important per a establir\n" "una connexió de confiança a la clau o a un altra clau certificada\n" "per aquesta clau." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Aquesta signatura no es pot comprovar perquè no teniu la clau\n" "corresponent. Hauríeu de posposar la seua eliminació fins que\n" "sapieu quina clau es va utilitzar ja que aquesta clau de signatura\n" "podria establir una connexió de confiança a través d'una altra clau ja\n" "certificada." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "La signatura no és vàlida. Té sentit que l'elimineu de l'anell\n" "de claus." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Aquesta és una signatura que enllaça l'ID de l'usuari amb la clau.\n" "Normalment no és una bona idea eliminar una signatura com aquesta.\n" "Actualment, GnuPG podria no poder utilitzar aquesta clau de nou, així\n" "que feu açò només si l'autosignatura no és vàlida per alguna raó i\n" "hi ha una segona disponible." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Canvia les preferències de tots els ID d'usuari (o només els dels " "seleccionats)\n" "a la llista actual de preferències. Les marques de temps de totes les\n" "autosignatures afectades s'avançaran un segon.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Introduïu la contrasenya; aquesta ha de ser una frase secreta \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Per favor, repetiu l'última contrasenya per confirmar-la." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Doneu el nom del fitxer al qual s'aplica la signatura" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Contesteu «sí» si és correcte sobreescriure el fitxer" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Introduïu un nom de fitxer. Si premeu RETORN s'hi usarà el fitxer\n" "predeterminat (apareix entre claudàtors)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Hauríeu d'especificar una raó per a la certificació. Depenent del\n" "context teniu l'habilitat de triar d'aquesta llista:\n" " «La clau ha estat compromesa»\n" " Utilitzeu açò si teniu alguna raó per creure que persones no\n" " autoritzades han tingut accés a la vostra clau secreta.\n" " «La clau ha estat reemplaçada»\n" " Utilitzeu açò si heu reemplaçat aquesta clau amb una més nova.\n" " «La clau ja no està en ús»\n" " Utilitzeu açò si heu retirat aquesta clau.\n" " «L'ID de l'usuari ja no és vàlid»\n" " Utilitzeu açò per a constatar que l'ID de l'usuari no s'hauria\n" " d'utilitzar més; açò s'utilitza normalment per a marcar una adreça\n" " de correu com a invàlida.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Si voleu podeu introduir un text que descriga per què expediu aquest\n" "certificat de revocació. Per favor, sigueu concisos.\n" "Una línia buida indica el final del text.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "No hi ha ajuda disponible" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "No hi ha ajuda disponible per a `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "actualitza la base de dades de confiança" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "actualitza la base de dades de confiança" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "la clau pública no coincideix amb la clau secreta!\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "la clau secreta és inusable" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "es descarta un bloc de tipus %d\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "fins ara s'han processat %lu claus\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Nombre total processat: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " claus noves descartades: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sense ID: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importades: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " no modificades: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " ID d'usuaris nous: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " subclaus noves: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " signatures noves: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " noves revocacions: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " claus privades llegides: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr "claus privades importades: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "claus privades no canviades: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " importades: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " signatures noves: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " claus privades llegides: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Heu signat els següents ID d'usuari:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "signatura %s, algorisme de resum %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "clau %08lX: sense ID\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "es descarta «%s»: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "clau %08lX: corrupció de la subclau HKP reparada\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "clau %08lX: s'ha acceptat la ID d'usuari no autosignada «%s»\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "clau %08lX: l'ID no és vàlid\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "açò pot ser causat per l'absència d'autosignatura\n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "clau %08lX: no s'ha trobat la clau pública: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "clau %08lX: clau nova - es descarta \n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "no s'ha trobat cap anell escrivible: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "s'està escrivint en «%s»\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "error mentre s'escrivia l'anell «%s»: %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "clau %08lX: s'ha importat la clau pública «%s»\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "clau %08lX: no correspon a la nostra còpia\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "clau %08lX: no s'ha trobat el bloc de claus original: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "clau %08lX: no s'ha pogut llegir el bloc de claus original: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clau %08lX: «%s» 1 ID d'usuari nou\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "clau %08lX: «%s» %d ID d'usuari nous\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "clau %08lX: «%s» 1 signatura nova\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "clau %08lX: «%s» %d signatures noves\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "clau %08lX: «%s» 1 subclau nova\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "clau %08lX: «%s» %d subclaus noves\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "clau %08lX: «%s» %d signatures noves\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "clau %08lX: «%s» %d signatures noves\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "clau %08lX: «%s» %d ID d'usuari nous\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "clau %08lX: «%s» %d ID d'usuari nous\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "clau %08lX: «%s» no ha estat modificada\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "no s'ha trobat la clau secreta «%s»: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "s'està escrivint la clau secreta a «%s»\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "clau %08lX: clau secreta amb xifrat %d no vàlid - es descarta\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "no hi ha anell secret predeterminat: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "clau %08lX: s'ha importat la clau secreta\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "clau %08lX: ja es troba en l'anell privat\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "clau %08lX: no s'ha trobat la clau secreta: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "clau %08lX: falta la clau pública: no es pot aplicar el certificat\n" "de revocació\n" # O «rebutjara»? ivb # Per tots els canvis d'anglicisme «ignorat» -> «es descarta», # «es rebutja» està bé. jm #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "clau %08lX: el certificat de revocació és invàlid: %s: es rebutja\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "clau %08lX: s'ha importat el certificat de revocació «%s»\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "clau %08lX: no hi ha ID per a la signatura\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "clau %08lX: l'algoritme de clau pública no es suporta sobre l'id d'usuari " "«%s»\n" "\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "clau %08lX: l'autosignatura no és vàlida en l'id d'usuari «%s»\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "clau %08lX: l'algoritme de clau pública no és suportat\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "clau %08lX: s'ha afegit la signatura de clau directa\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "clau %08lX: no hi ha una subclau per a l'enllaç de la clau\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "clau %08lX: l'enllaç de subclau és invàlid\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "clau %08lX: s'ha eliminat un enllaç de subclau múltiple\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "clau %08lX: no hi ha una subclau per a la clau de revocació\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "clau %08lX: Subclau de revocació no vàlida\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "clau %08lX: s'han eliminat subclaus de revocació múltiples\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "clau %08lX: es descarta l'ID d'usuari '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "clau %08lX: es descarta la subclau\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "clau %08lX: la signatura és inexportable (classe %02x) - es descarta\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "" "clau %08lX: el certificat de revocació és en el lloc equivocat - es " "descarta\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "clau %08lX: el certificat de revocació és invàlid: %s - es descarta\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "" "clau %08lX: la signatura de la subclau és en el lloc equivocat - es " "descarta\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "" "clau %08lX: la classe de signatura és inesperada (0x%02x) - es descarta\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "clau %08lX: s'ha detectat un ID d'usuari duplicat - es fusiona\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "AVÍS: la clau %08lX pot estar revocada: s'adquireix la clau de revocació " "%08lX\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "AVÍS: la clau %08lX pot estar revocada: la clau de revocació %08lX no està " "present.\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "clau %08lX: s'hi ha afegit el certificat de revocació «%s»\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "clau %08lX: s'ha afegit la signatura de clau directa\n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "la clau pública no coincideix amb la clau secreta!\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "es descarta: la clau secreta ja és present\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "es descarta: la clau secreta ja és present\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "error en crear l'anell «%s»: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "s'ha creat l'anell «%s»\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "error en crear «%s»: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "no s'ha pogut reconstruir la memòria cau de l'anell: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revocació]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[autosignatura]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 signatura errònia\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d signatures errònies\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 signatura no comprovada per falta de clau\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signatures no comprovades per falta de clau\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 signatura no comprovada a causa d'un error\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signatures no comprovades a causa d'errors\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "Ha estat detectat 1 ID sense autosignatura vàlida\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "Han estat detectats %d IDs sense autosignatura vàlida\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Decidiu fins a quin punt confieu en aquest usuari per a\n" "verificar les claus d'altres usuaris (mirant passaports,\n" "comprovant empremtes de diferents fonts...)?\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = Hi confie marginalment\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = Hi confie plenament\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "L'ID d'usuari «%s» està revocat." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Segur que encara voleu signarla? (s/N) " # O no s'ha pogut? ivb # FIXME: comprovar context. jm #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " No es pot signar.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "L'ID d'usuari «%s» ha caducat." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "L'ID d'usuari «%s» no està autosignat." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "L'ID d'usuari «%s» no està autosignat." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Signar realment? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "La vostra signatura en «%s»\n" "és una signatura d'estil PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Voleu ascendir-la a una autosignatura OpenPGP? (s/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "La vostra signatura actual en «%s»\n" "ha caducat.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Voleu crear una nova signatura per a reemplaçar la caducada? (s/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "La vostra signatura en «%s»\n" "és una signatura local.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Voleu ascendir-la a una signatura completament exportable? (s/N) " #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "«%s» ja estava signada localment amb la clau %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "«%s» ja estava signada amb la clau %08lX\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Voleu signarla un altre cop, de tota manera? (s/N) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "No hi ha res que signar amb la clau %08lX\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "La clau ha caducat!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Aquesta clau caducarà el %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Voleu que la vostra signatura caduque alhora? (S/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "No podeu fer una signatura OpenPGP en una clau PGP 2.x en el mode --pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Açò inutilitzaria la clau en PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Amb quanta cura heu verificat que la clau que esteu a punt de signar \n" "pertany realment a la persona esmentada anteriorment? Si no sabeu què \n" "contestar, entreu «0».\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) No vaig a contestar.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) No ho he comprovat en absolut.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) He fet algunes comprovacions.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) He fet comprovacions molt acurades.%s\n" #: g10/keyedit.c:926 #, fuzzy msgid "Your selection? (enter `?' for more information): " msgstr "Seleccioneu una opció (introduïu «?» per obtindre més informació):" #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Esteu segur que voleu signar aquesta clau\n" "amb la vostra clau: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" "Açò serà una autosignatura.\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "AVÍS: la signatura no es marcarà com a inexportable.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "AVÍS: la signatura no es marcarà com a irrevocable.\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "La signatura es marcarà com a inexportable.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "La signatura es marcarà com a irrevocable.\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "No he comprovat aquesta clau en absolut.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "He fet algunes comprovacions a aquesta clau.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "He comprovat aquesta clau amb molta cura.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Signar realment? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "Ha fallat el procés de signatura: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Aquesta clau no està protegida.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Les parts secretes de la clau primària no estan disponibles.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "Les parts secretes de la clau primària no estan disponibles.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "La clau està protegida.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "No es pot editar aquesta clau: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Introduïu la nova contrasenya per a la clau secreta.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "la contrasenya no s'ha repetit correctament; torneu a intentar-ho" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "No voleu contrasenya: açò és probablement una *mala* idea!\n" "\n" # No abusis dels pronoms! (Rowan Atkinson @ Llei i Desordre) ivb #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Esteu segur de voler fer açò? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "s'està posant la signatura al lloc correcte\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "desa i ix" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "mostra empremta" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "llista claus i ID" # Per aquesta zona (keyedit) hi ha un cacau d'infinitius i presents... ivb # Yeah, els vaig corregir abans de que enviares la teua correcció. jm #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "tria l'ID d'usuari N" # Per aquesta zona (keyedit) hi ha un cacau d'infinitius i presents... ivb # Yeah, els vaig corregir abans de que enviares la teua correcció. jm #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "tria l'ID d'usuari N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "revoca signatures" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "signa la clau localment" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Pista: Trieu els ID d'usuari que voleu signar\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "afegeix un ID d'usuari" # Com estava escrit abans. ivb # Si et refereixes a Photo vs. photo, ho deixe en minúscules, que en tot # el menú està tot en minúscules. Tb hi ha molts ID vs. id en els msgids # i no hem unificat en català. Potser li ho diré a Werner. jm. #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "afegeix un photo ID" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "esborra un ID d'usuari" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "esborra una clau secundària" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "afegeix una clau de revocació" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "" "Voleu actualitzar les preferències per a les ID d'usuaris seleccionades?" #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "No podeu canviar la data de caducitat de les claus v3\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "marca l'ID d'usuari com a primari" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "canvia entre el llistat de claus secretes i públiques" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "llista les preferències (expert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "llista les preferències (detallat)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "" "Voleu actualitzar les preferències per a les ID d'usuaris seleccionades?" #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "no s'ha pogut analitzar sintàcticament la URI del servidor de claus\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "" "Voleu actualitzar les preferències per a les ID d'usuaris seleccionades?" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "canvia la contrasenya" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "canvia la confiança" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Realment voleu revocar tots els ID d'usuari seleccionats? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "revoca un ID d'usuari" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "revoca una clau secundària" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "activa una clau" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "desactiva una clau" # Igual que dalt. ivb # Idem :) jm #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "mostra el photo ID" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "error en llegir el bloc de claus secretes «%s»: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "La clau secreta està disponible.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Cal la clau secreta per a fer açò.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Useu l'ordre «toggle» abans.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "La clau està revocada." #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Realment voleu signar tots els ID d'usuari? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Pista: Trieu els ID d'usuari que voleu signar\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "la classe de signatura és desconeguda" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Aquesta ordre no està permesa mentre s'està en mode %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Heu de seleccionar al menys un ID d'usuari.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "No podeu esborrar l'últim ID d'usuari!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Realment voleu eliminar tots els ID d'usuari seleccionats? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Realment voleu eliminar aquest ID d'usuari? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Realment voleu esborrar aquesta autosignatura? (s/N)" #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Heu de seleccionar, si més no, una clau.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "no s'ha pogut obrir «%s»: %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "error en crear l'anell «%s»: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Heu de seleccionar, si més no, una clau.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Realment voleu eliminar les claus seleccionades? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Realment voleu eliminar aquesta clau? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Realment voleu revocar tots els ID d'usuari seleccionats? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Realment voleu eliminar aquest ID d'usuari? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Realment voleu revocar aquesta clau? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Realment voleu revocar les claus seleccionades? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Realment voleu revocar aquesta clau? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "estableix la llista de preferències" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Voleu actualitzar les preferències per a les ID d'usuaris seleccionades?" #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Realment voleu actualitzar les preferències? " #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Voleu desar els canvis? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Voleu eixir sense desar? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "ha fallat l'actualització: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "ha fallat l'actualització de la clau secreta: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "La clau no ha canviat, per tant no cal actualització.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Resum: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Funcionalitats: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Notació: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "No hi ha preferències en un ID d'usuari d'estil PGP 2.x.\n" # Potser %s haja d'anar darrere de «clau». ivb # És cert. Nova funcionalitat de 1.2.0, IIRC. jm #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Aquesta clau pot ser revocada per la clau %s " # Potser %s haja d'anar darrere de «clau». ivb # És cert. Nova funcionalitat de 1.2.0, IIRC. jm #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "Aquesta clau pot ser revocada per la clau %s " #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " (sensible)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "no s'ha pogut creat %s: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "[revocada]" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [caduca: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [caduca: %s]" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " confiança: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Aquesta clau ha estat desactivada" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Teniu en compte que la validesa de la clau mostrada no és necessàriament\n" "correcta a no ser que torneu a executar el programa.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "[revocada]" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "AVÍS: no s'ha marcat cap ID d'usuari com primària. Aquesta ordre pot\n" " causar que una ID d'usuari diferent esdevinga en la primària " "assumida.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "No podeu canviar la data de caducitat de les claus v3\n" # Photo ID com abans. ivb #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "AVÍS: Aquesta és una clau d'estil PGP2. Afegir un photo ID pot fer que " "algunes versions de PGP rebutgen aquesta clau.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Esteu segur que encara voleu afegir-lo? (s/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "No podeu afegir un photo ID a una clau d'estil PGP2.\n" # Aquesta i les següents no haurien de portar (s/N/q) i no (y/N/q)? ivb # Hmm. Sí... (s/N/x) jm #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Voleu esborrar aquesta signatura correcta? (s/N/x)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Voleu esborrar aquesta signatura invàlida? (s/N/x)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Voleu esborrar aquesta signatura desconeguda? (s/N/x)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Realment voleu esborrar aquesta autosignatura? (s/N)" # Werner FIXME: use ngettext. jm #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "S'ha esborrat %d signatura.\n" # Werner FIXME: use ngettext. jm #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "S'han esborrat %d signatures.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "No s'hi ha eliminat res.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "invàlida" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "L'ID d'usuari «%s» està revocat." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "L'ID d'usuari «%s» està revocat." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "L'ID d'usuari «%s» està revocat." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "l'ID d'usuari «%s» ja està revocat\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "l'ID d'usuari «%s» ja està revocat\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "AVÍS: Aquesta és una clau d'estil PGP 2.x. Afegir un revocador designat pot\n" "fer que algunes versions de PGP rebutjen aquesta clau.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "No podeu afegir un revocador designat a una clau d'estil PGP 2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Introduïu l'ID d'usuari del revocador designat: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" "no es pot nominar a una clau d'estil PGP 2.x com a revocador designat\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "no podeu nominar una clau com el seu propi revocador designat\n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "no podeu nominar una clau com el seu propi revocador designat\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "AVÍS: no es pot desfer la nominació d'una clau com a revocador designat!\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Esteu segur que voleu nominar aquesta clau com a revocador designat? (s/N): " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Per favor, elimineu les seleccions de les claus secretes.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Per favor, seleccioneu com a molt una clau secundària.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "S'està canviant la data de caducitat per a una clau secundària.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "S'està canviant la data de caducitat per a una clau primària.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "No podeu canviar la data de caducitat de les claus v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "No hi ha cap signatura corresponent en l'anell secret\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "" "AVÍS: no es pot desfer la nominació d'una clau com a revocador designat!\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Heu de seleccionar exactament un ID.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "es descarta l'autosignatura v3 en l'id d'usuari «%s»\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Esteu segur que encara voleu utilitzarla (s/N)? " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Esteu segur que encara voleu utilitzarla (s/N)? " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Notació de signatura: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Voleu sobreescriure? (s/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "No hi ha cap ID amb l'índex %d\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "No hi ha cap ID amb l'índex %d\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "No hi ha cap ID amb l'índex %d\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "ID d'usuari: «" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "" "»\n" "signat amb la vostra clau %08lX el %s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (no-exportable)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Aquesta signatura va caducar el %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Esteu segur de que encara voleu revocarla? (s/N) " # (s/N) ivb # S! jm #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Voleu crear un certificat de revocació per a aquesta signatura? (s/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Heu signat els següents ID d'usuari:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (no-exportable)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " revocat per %08lX el %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Esteu a punt de revocar aquestes signatures:\n" # (s/N)? ivb #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Realment voleu crear els certificats de revocació? (s/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "ho hi ha clau secreta\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "l'ID d'usuari «%s» ja està revocat\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "AVÍS: una signatura d'ID d'usuari està datada %d segons en el futur\n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "l'ID d'usuari «%s» ja està revocat\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "l'ID d'usuari «%s» ja està revocat\n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "S'està mostrant el photo ID %s de mida %ld per a la clau 0x%08lX (uid %d)\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "la preferència %c%lu és duplicada\n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "hi ha massa preferències «%c»\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "hi ha massa preferències «%c»\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "hi ha massa preferències «%c»\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "hi ha un caràcter invàlid en la cadena de preferència\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "s'està escrivint una signatura directa\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "s'està escrivint l'autosignatura\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "s'està escrivint la signatura de comprovació de la clau\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "la mida de la clau és invàlida; s'hi usaran %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "la mida de la clau ha estat arrodonida fins a %u bits\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "xifra dades" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr "" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Seleccioneu quin tipus de clau voleu:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA i ElGamal (predeterminat)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA i ElGamal (predeterminat)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (només signar)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (només signar)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (només xifrar)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (només xifrar)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (només signar)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (només xifrar)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Quina grandària voleu? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Quina grandària voleu? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "La grandària sol·licitada és %u bits\n" #: g10/keygen.c:1722 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 "" "Especifiqueu el temps de validesa de la clau.\n" " 0 = la clau no caduca\n" " = la clau caduca als n dies\n" " w = la clau caduca a les n setmanes\n" " m = la clau caduca als n mesos\n" " y = la clau caduca als n anys\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Especifiqueu el temps de validesa de la signatura.\n" " 0 = la signatura no caduca\n" " = la signatura caduca als n dies\n" " w = la signatura caduca a les n setmanes\n" " m = la signatura caduca als n mesos\n" " y = la signatura caduca als n anys\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Indiqueu la validesa de la clau (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "Indiqueu la validesa de la signatura (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "el valor no és vàlid\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "%s no caduca en absolut\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "%s no caduca en absolut\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "%s caduca el %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Aquesta signatura caduca el %s\n" # Amb «it» es refereix a les dates? ivb # Això vaig entendre jo. jm #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "El vostre sistema no pot representar dates posteriors a l'any 2038.\n" "Tanmateix, les tractarà bé fins l'any 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "És correcte? (s/n)" #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Necessiteu un ID d'usuari per a identificar la vostra clau; el programa\n" "construeix l'id de l'usuari amb el Nom, Comentari i Adreça electrònica\n" "d'aquesta forma:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Nom i cognoms: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Hi ha un caràcter invàlid en el camp *nom*\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "El nom no pot començar amb un dígit\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "El nom ha de tenir, si més no, 5 caràcters\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Adreça electrònica: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "No és una adreça vàlida\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Comentari: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Hi ha un caràcter invàlid en el camp *comentari*\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Esteu usant el joc de caràcters `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Heu triat l'identificador d'usuari:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "No inclogueu l'adreça ni en el camp *nom* ni en el camp *comentari*\n" # xX? ivb # Hmm... sí. jm #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoXx" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Canvia (N)om, (C)omentari, (E)mail o (X) ix " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Canvia (N)om, (C)omentari, (E)mail o (O) d'acord / (X) ix" #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Corregiu l'error primer\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Cal una contrasenya per a protegir la clau secreta.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 voleu contrasenya: és una mala idea!\n" "Bé. Si voleu canviar-la més endavant,\n" "useu aquest programa amb l'opció \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Cal generar molts bits aleatòriament. És bona idea fer alguna altra cosa\n" "(teclejar, moure el ratolí, usar els discos) durant la generació de\n" "nombres primers; açò dóna oportunitat al generador de nombres aleatoris\n" "d'aconseguir prou entropia.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "La generació de claus ha estat cancel·lada.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "s'està escrivint la clau pública a «%s»\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "s'està escrivint la clau secreta a «%s»\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "s'està escrivint la clau secreta a «%s»\n" # Potser no hi haja cap anell! ivb #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "no s'ha trobat cap anell públic escrivible: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "" "no s'ha trobat cap anell secret de escrivible: %s\n" "\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "s'ha produït un error mentre s'escrivia l'anell públic «%s»: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "s'ha produït un error mentre s'escrivia l'anell secret «%s»: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "s'han creat i signat les claus pública i secreta.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Noteu que aquesta clau no serveix per a xifrar. Potser vulgueu usar l'ordre\n" "\"--edit-key\" per a generar una clau secundària per a tal propòsit.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "La generació de claus ha fallat: %s\n" # Werner FIXME: Use ngettext. jm #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "la clau s'ha creat %lu segon en el futur (salt en el temps o problemes\n" "amb el rellotge)\n" # Werner FIXME: use ngettext. jm #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "la clau s'ha creat %lu segons en el futur (salt en el temps o problemes\n" "amb el rellotge)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "NOTA: crear subclaus per a claus v3 no és conforme amb OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Crear realment? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "no s'ha pogut eliminar el bloc de claus: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "no s'ha pogut crear «%s»: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "mai " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Política de signatura crítica: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Política de signatura: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Notació de signatura crítica: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Notació de signatura: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Anell" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Empremtes digital de la clau primària:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Empremta digital de la subclau:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Empremta digital de la clau primària:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Empremta digital de la subclau:" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Empremta digital =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "no s'ha pogut crear l'armadura: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "AVÍS: hi ha 2 fitxers amb informació confidencial.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s és el que no ha canviat\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s és el nou\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Per favor, solucioneu aquest possible problema de seguretat\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "s'està comprovant l'anell «%s»\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "s'han comprovat %lu claus (%lu signatures)\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "s'han comprovat %lu claus (%lu signatures)\n" # Fitxer indi fins final. Hau! ivb # Grrr. Com em tracten els esclaus ja... jm #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: s'ha creat l'anell\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "la URL de política de signatura donada no és vàlida\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "AVÍS: les opcions en «%s» encara no estan actives durant aquesta execució\n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "no s'ha trobat la clau «%s»: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "no s'ha trobat la clau «%s»: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "s'està sol·licitant la clau %08lX de %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "s'està sol·licitant la clau %08lX de %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "s'està cercant «%s» al servidor HKP %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "s'està cercant «%s» al servidor HKP %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "s'està cercant «%s» al servidor HKP %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "s'està sol·licitant la clau %08lX de %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "s'està cercant «%s» al servidor HKP %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "s'està cercant «%s» al servidor HKP %s\n" # «del servidor», «en el servidor»? ivb #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "error de servidor de claus" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "la recepció des del servidor de claus ha fallat: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "no es coneix cap servidor de claus (useu l'opció \"--keyserver\")\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" # «del servidor», «en el servidor»? ivb #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "error de servidor de claus" # «del servidor», «en el servidor»? ivb #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "error de servidor de claus" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, fuzzy, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "%s: no és un ID vàlid\n" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "AVÍS: no s'ha pogut eliminar el fitxer temporal (%s) «%s»: %s\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "s'està sol·licitant la clau %08lX de %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "s'està sol·licitant la clau %08lX de %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "AVÍS: no s'ha pogut eliminar el fitxer temporal (%s) «%s»: %s\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "AVÍS: no s'ha pogut eliminar el fitxer temporal (%s) «%s»: %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "mida extranya per a una clau de sessió xifrada (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "clau de sessió xifrada amb %s\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "xifrat amb l'algoritme %d (desconegut)\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "la clau pública és %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "dades xifrades amb clau pública: bona clau de xifratge (DEK)\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "xifrat amb una clau %2$s de %1$u bits, ID %3$08lX, creada en %4$s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr "" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "xifrat amb una clau %s, ID %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "ha fallat el desxifratge amb la clau pública: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "xifrat amb %lu contrasenyes\n" # FIXME WK: Use ngettext #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "xifrat amb 1 contrasenya\n" # I no serà «dades xifrades amb %s»? ivb # Sembla que sí, ho marque per a mirar-ho més endavant. jm #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "s'assumeixen dades xifrades amb %s\n" # L'optimístic és aquell que té una Fe Cega en que Tot Anirà Bé! ivb #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "El xifratge IDEA no està disponible, s'intentarà utilitzar optimistament %s " "en el seu lloc\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "desxifratge correcte\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "AVÍS: el missatge no tenia protecció d'integritat\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "AVÍS: el missatge xifrat ha estat manipulat!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "ha fallat el desxifratge: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: el remitent ha sol·licitat \"alt secret\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "nom del fitxer original='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revocació autònoma: useu \"gpg --import\" per a aplicar-la\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Signatura correcta de \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "s'ha eliminat la verificació de signatura\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "no es poden tractar aquestes signatures múltiples\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Aquesta signatura va caducar el %s\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " alias \"" # «%.*s» no serà una data? Caldrà «el» al davant. ivb #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Signatura creada el %.*s usant una clau %s ID %08lX\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "La clau és disponible en: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "Signatura INCORRECTA de \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Signatura caducada de \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Signatura correcta de \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[incert]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " alias \"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Aquesta signatura va caducar el %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Aquesta signatura caduca el %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "signatura %s, algorisme de resum %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binari" #: g10/mainproc.c:1947 msgid "textmode" msgstr "mode text" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "desconeguda" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "No s'ha pogut comprovar la signatura: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "no és una signatura separada\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "AVÍS: s'han detectat múltiples signatures. Només es comprovarà la primera.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "signatura autònoma de classe 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "signatura de l'estil antic (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "s'ha detectat un paquet arrel invàlid en proc_tree()\n" # bolcats de memòria? ivb #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "no s'han pogut desactivar els bolcats de memòria: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "ha fallat l'actualització de la base de dades de confiança: %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "base de dades de confiança: ha fallat la lectura (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "no es pot treballar amb l'algoritme de clau pública %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "AVÍS: %s és una opció desaconsellada.\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "l'algoritme de xifratge no és implementat" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "signatura %s, algorisme de resum %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "AVÍS: %s és una opció desaconsellada.\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = mostra més informació\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "gpg-agent no està disponible en aquesta sessió\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: l'opció «%s» està desaconsellada.\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "AVÍS: %s és una opció desaconsellada.\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "si us plau, utilitzeu «%s%s» en el seu lloc\n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "AVÍS: %s és una opció desaconsellada.\n" # Gènere? Nombre? Passat, futur? ivb # Werner FIXME: please add translator comment saying *what* is # uncompressed so we know the gender. jm #: g10/misc.c:755 msgid "Uncompressed" msgstr "No comprimit" # Gènere? Nombre? Passat, futur? ivb # Werner FIXME: please add translator comment saying *what* is # uncompressed so we know the gender. jm #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "No comprimit" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "aquest missatge pot no ser usable per %s\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "s'estan llegint opcions de «%s»\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "el destinatari predeterminat és desconegut «%s»\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "la classe de signatura és desconeguda" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "El fitxer «%s» existeix. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Voleu sobreescriure? (s/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: el sufix és desconegut\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Introduïu el nou nom del fitxer" # Indi? ivb #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "s'està escrivint en stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "s'asumeix que hi ha dades signades en «%s»\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "s'ha creat el nou fitxer d'opcions «%s»\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "AVÍS: les opcions en «%s» encara no estan actives durant aquesta execució\n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: s'ha creat el directori\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "no es pot treballar amb l'algoritme de clau pública %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "AVÍS: la clau de sessió pot estar xifrada simètricament de forma insegura\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "el subpaquet de tipus %d té el bit crític activat\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent no està disponible en aquesta sessió\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "la variable d'entorn GPG_AGENT_INFO és malformada\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "la versió %d del protocol de gpg-agent no està suportada\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "no s'ha pogut connectar amb «%s»: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "hi ha un problema amb l'agent: es deshabilitarà el seu ús\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (ID de la clau principal %08lX)" # Com es canvia l'ordre dels arguments? jm # Ah, bingo! jm # Uh, ara torna a donar error. FIXME # La idea és ficar: # "Necessiteu la contrasenya per desblocar la clau secreta de l'usuari:\n" # "«%1$.*s»\n" # "clau %3$s de %2$u bits, ID %4$08lX, creada en %5$s%6$s\n" # jm # Se't passava l'argument «*». printf(3), hieroglyph(7). ivb # Ah! Prova-ho, no casque alguna cosa :P ivb # Ah, ja veig! Moltes gràcies! Aquest msgstr ha quedat curiós :) jm #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Necessiteu la contrasenya per desblocar la clau secreta de l'usuari:\n" "«%2$.*1$s»\n" "clau %4$s de %3$u bits, ID %5$08lX, creada en %6$s%7$s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Repetiu la contrasenya\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Introduïu la contrasenya\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "s'ha cancel·lat per l'usuari\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "no es pot demanar la contrasenya en mode desatès\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Introduïu la contrasenya: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Necessiteu la contrasenya per desblocar la clau secreta de\n" "l'usuari: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "clau %2$s de %1$u bits, ID %3$08lX, creada en %4$s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repetiu la contrasenya: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Seleccioneu una imatge per a utilitzarla en el vostre photo ID. La imatge\n" "ha de ser un fitxer JPEG. Recordeu que la imatge es desa dins de la vostra\n" "clau pública. Si utilitzeu una foto molt gran, la vostra clau també es farà\n" "molt gran!\n" "Es recomana una imatge amb una mida aproximada de 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Introduïu el nom del fitxer JPEG per al photo ID: " #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "No s'ha pogut obrir la foto «%s»: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Esteu segur que encara voleu utilitzarla (s/N)? " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "«%s» no és un fitxer JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "És aquesta foto correcta (s/N/x)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "no s'ha pogut mostrar el photo ID!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "No s'ha especificat cap raó" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "La clau ha estat substituïda" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "La clau ha estat compromesa" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "La clau ja no s'usa" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "L'ID d'usuari ja no és vàlid" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "raó de la revocació: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "comentari de la revocació: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMxXoO" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "No hi ha cap valor de confiança assignat a:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr "" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "%08lX: No hi ha res que indique que la signatura pertany al seu propietari.\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = No ho sé\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = NO confie\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Hi confie absolutament\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = torna al menú principal\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " o = omet aquesta clau\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " x = ix\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "La vostra decisió? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Realment voleu assignar confiança absoluta a aquesta clau? " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificats que duen a una clau de confiança absoluta:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lX: No hi ha res que indique que la signatura pertany al seu propietari.\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lX: No hi ha res que indique que la signatura pertany al seu propietari.\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "Aquesta clau pertany probablement al seu propietari\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Aquesta clau és nostra\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NO és segur que la clau pertanya a la persona esmentada en\n" "l'ID d'usuari. Si *realment* sabeu què feu, podeu respondre\n" "«sí» a la següent pregunta\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Voleu usar de tota manera aquesta clau?" #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "AVÍS: S'està usant una clau no fiable!\n" #: g10/pkclist.c:511 #, fuzzy msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "AVÍS: la clau %08lX pot estar revocada: la clau de revocació %08lX no està " "present.\n" #: g10/pkclist.c:520 #, fuzzy msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "AVÍS: Aquesta clau ha estat revocada pel propietari!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVÍS: Aquesta clau ha estat revocada pel propietari!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " Açò podria significar que la signatura és falsificada.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVÍS: Aquesta subclau ha estat revocada pel propietari!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Nota: Aquesta clau ha estat desactivada.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Nota: La clau ha caducat!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVÍS: Aquesta clau no ve certificada per una signatura de confiança!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " No hi ha res que indique que la signatura pertany al seu propietari.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVÍS: La clau NO és de confiança!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Probablement la signatura és FALSA.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "AVÍS: Aquesta clau no ve certificada per signatures prou fiables!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "No és segur que la signatura pertanya al seu propietari.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: es descarta: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: es descarta: la clau pública ja està present\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "No heu especificat un ID d'usuari. (podeu usar «-r»)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Introduïu l'ID d'usuari. Finalitzeu amb una línia en blanc: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Usuari inexistent.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "es descarta: la clau pública ja s'ha especificat com a destinatari\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "La clau pública està desactivada.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "es descarta: la clau pública ja està establida\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "el destinatari predeterminat és desconegut «%s»\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: es descarta: la clau pública està desactivada\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "no hi ha adreces vàlides\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "les dades no s'han desat; useu l'opció \"--output\" per desar-les\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "error en crear «%s»: %s\n" # Indi? ivb # Em pense que no. jm #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Signatura separada.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Introduïu el nom del fitxer de dades: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "s'està llegint d'stdin...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "no hi ha dades signades\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "no s'han pogut obrir les dades signades `%s'\n" # Indi? ivb # Yeh... jm #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "el destinatari és anònim; es provarà la clau secreta %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "d'acord, som el destinatari anònim.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "la codificació antiga del DEK no està suportada\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "l'algoritme de xifratge %d%s és desconegut o està desactivat\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "NOTA: no s'ha trobat l'algoritme de xifratge %d en les preferències\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTA: la clau secreta %08lX caduca el %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "NOTA: aquesta clau ha estat revocada!" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "ha fallat build_packet: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "clau %08lX: sense ID\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "A ser revocada per:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Aquesta és una clau de revocació sensible)\n" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Voleu crear un certificat de revocació per a aquesta clau? " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "s'ha forçat l'eixida d'armadura ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "ha fallat make_keysig_packet: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "S'ha creat el certificat de revocació.\n" #: g10/revoke.c:411 #, fuzzy, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "no s'han ttrobat claus de revocació per a «%s»\n" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "no s'ha trobat la clau secreta «%s»: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "no hi ha cap clau pública corresponent: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "la clau pública no coincideix amb la clau secreta!\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Voleu crear un certificat de revocació per a aquesta clau? " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "l'algorisme de protecció és desconegut\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "NOTA: Aquesta clau no està protegida!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "S'ha creat un certificat de revocació.\n" "\n" "Si us plau, mogueu-lo a un medi que pugueu amagar; si Mallory aconsegueix\n" "accés a aquest certificat pot utilitzar-lo per a fer la vostra clau\n" "inservible. És intel·ligent imprimir aquest certificat i amagar-lo, per\n" "si el vostre medi es torna illegible. Però aneu amb compte: el sistema\n" "d'impressió de la vostra màquina podria emmagatzemar les dades i fer-les\n" "disponibles a altres!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Seleccioneu la raó de la revocació:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Cancel·la" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Segurament voleu seleccionar %d ací)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" "Introduïu una descripció opcional; finalitzeu amb una línia en blanc:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Raó de la revocació: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(No es va donar una descripció)\n" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "És açò correcte? " # Parts? Peces? ivb #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "parts de la clau secreta no estan disponbles\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "l'algoritme de protecció %d%s no està suportat\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "l'algoritme de protecció %d%s no està suportat\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "La contrasenya no és vàlida; torneu a intentar-ho" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "AVÍS: la clau és feble; per favor, canvieu la contrasenya.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "s'està generant la suma de comprovació desaconsellada de 16-bits per a la " "protecció de la clau secreta\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "s'hi ha creat una clau feble - reintent\n" # És no-wrap? ivb #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "no s'ha pogut evitar una clau feble per a xifratge simètric;\n" "hi ha hagut %d intents!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "AVÍS: conflicte de signatures digest en el missatge\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "AVÍS: no es pot desfer la nominació d'una clau com a revocador designat!\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "la clau pública %08lX és %lu segons anterior a la signatura\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "la clau pública %08lX és %lu segons anterior a la signatura\n" # Werner FIXME: Use ngettext. jm #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "la clau s'ha creat %lu segon en el futur (salt en el temps o problemes\n" "amb el rellotge)\n" # Werner FIXME: use ngettext. jm #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "la clau s'ha creat %lu segons en el futur (salt en el temps o problemes\n" "amb el rellotge)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTA: la clau de signatura %08lX va caducar el %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "signatura %s, algorisme de resum %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "es supossa una signatura incorrecta de la clau %08lX a causa d'un bit crític " "desconegut\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" "clau %08lX: no hi ha una subclau per al paquet de la subclau de revocació\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "" "clau %08lX: no hi ha una subclau per a la signatura de l'enllaç de la " "subclau\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "AVÍS: no s'ha pogut %%-expandir la notació (massa gran). S'utilitza no " "expandida.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "AVÍS: no s'ha pogut %%-expandir l'url de política (massa gran). S'utilitza " "no expandida.\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "AVÍS: no s'ha pogut %%-expandir l'url de política (massa gran). S'utilitza " "no expandida.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "no s'ha pogut comprovar la signatura creada: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s signatura de: «%s»\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "només podeu fer signatures separades amb claus d'estil PGP 2.x mentre esteu " "en mode --pgp2\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "forçar l'algoritme de digest %s (%d) viola les preferències del destinatari\n" #: g10/sign.c:960 msgid "signing:" msgstr "signatura:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "només podeu signar en clar amb claus d'estil PGP 2.x en el mode --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "s'utilitzarà xifratge %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "la clau no està marcada com a insegura - no es pot utilitzar amb el GNA " "fals!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "es descarta «%s»: duplicat\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "es descarta «%s»: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "es descarta: la clau secreta ja és present\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "es descarta «%s»: és una clau ElGamal generada per PGP que no és segura per " "a signatures!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "registre de confiança %lu, tipus %d: no s'ha pogut escriure: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Llista de valors de confiança assignats, creat el %s\n" "# (Utilitzeu «gpg --import-ownertrust» per a restaurar-les)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "error en la lectura de «%s»: %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "la línia és massa llarga\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "error: l'empremta digital és invàlida\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "importa els valors de confiança" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "error en trobar el registre de confiança: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "error de lectura: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de dades de confiança: no s'ha pogut sincronitzar: %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "no es pot crear el directori «%s»: %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "no s'ha pogut obrir «%s»\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "reg de la base de dades de confiança %lu: ha fallat lseek: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "reg de la base de dades de confiança %lu: ha fallat la escriptura (n=%d): " "%s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "la transacció de la base de dades de confiança és massa gran\n" # No em passe! ;) ivb #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "no s'ha pogut tancar «%s»: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: el directori no existeix!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: no s'ha pogut crear un registre de versió: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: s'ha creat una base de dades de confiança invàlida\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: s'ha creat la base de dades de confiança\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "NOTA: no es pot escriure en la base de dades de confiança\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: la base de dades de confiança és invàlida\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: no s'ha pogut crear la taula de dispersió: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: error en actualitzar el registre de la versió: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: error en llegir el registre de la versió: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: error en escriure el registre de la versió: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de dades de confiança: ha fallat lseek: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de dades de confiança: ha fallat la lectura (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s no és un fitxer de base de dades de confiança\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: registre de versió amb número de registre %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: la versió de fitxer %d és invàlida\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: error en llegir el registre lliure: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: error en escriure el registre de directoris: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: no s'ha pogut posar a zero un registre: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: no s'ha pogut afegir un registre: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: s'ha creat la base de dades de confiança\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "no es poden tractar línies més llargues de %d caràcters\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "la línia d'entrada és superior a %d caràcters\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "«%s» no és un ID de clau llarg vàlid\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "clau %08lX: s'accepta com a clau fiable\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "" "la clau %08lX apareix més d'una vegada en la base de dades de confiança\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" "clau %08lX: no hi ha una clau pública per a la clau fiable - es descarta\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "s'ha marcat la clau com a de confiança absoluta.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "registre de confiança %lu, tipus %d: no s'ha pogut llegir: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "el registre de confiança %lu no és del tipus demanat %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "[revocada]" #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "[caducada]" #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "desconeguda" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 #, fuzzy msgid "never" msgstr "mai " #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "" "no és necessària una comprovació de la base de dades de confiança\n" "\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "la pròxima comprovació de la base de dades de confiança serà el %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" "no és necessària una comprovació de la base de dades de confiança\n" "\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" "no és necessària una comprovació de la base de dades de confiança\n" "\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "no s'ha trobat la clau pública %08lX: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "si us plau, feu un --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "s'està comprovant la base de dades de confiança\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "s'han processat %d claus (s'han netejat %d comptes de validesa)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "no s'han trobat claus amb confiança absoluta\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "" "no s'ha trobat la clau pública de la clau amb confiança absoluta %08lX\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "registre de confiança %lu, tipus %d: no s'ha pogut escriure: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "no s'ha pogut verificar la signatura.\n" "Recordeu que el fitxer de signatura (.sig o .asc)\n" "ha de ser el primer que figure en la línia d'ordres.\n" # LF -> fi de línia? ivb #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "la línia d'entrada %u és massa llarga o hi falta un fí de línia\n" #: util/errors.c:53 msgid "general error" msgstr "error general" #: util/errors.c:54 msgid "unknown packet type" msgstr "el tipus de paquet és desconegut" #: util/errors.c:55 msgid "unknown version" msgstr "la versió és desconeguda" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "l'algoritme de clau pública és desconegut" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "l'algoritme de resum és desconegut" #: util/errors.c:58 msgid "bad public key" msgstr "la clau pública és errònia" #: util/errors.c:59 msgid "bad secret key" msgstr "la clau secreta és errònia" #: util/errors.c:60 msgid "bad signature" msgstr "la signatura és errònia" #: util/errors.c:61 msgid "checksum error" msgstr "la suma de control és errònia" #: util/errors.c:62 msgid "bad passphrase" msgstr "la contrasenya és errònia" #: util/errors.c:63 msgid "public key not found" msgstr "no s'ha trobat la clau pública" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "l'algoritme de xifratge és desconegut" #: util/errors.c:65 msgid "can't open the keyring" msgstr "no s'ha pogut obrir l'anell" #: util/errors.c:66 msgid "invalid packet" msgstr "el paquet és invàlid" #: util/errors.c:67 msgid "invalid armor" msgstr "l'armadura és invàlida" #: util/errors.c:68 msgid "no such user id" msgstr "no s'ha trobat l'id de l'usuari" #: util/errors.c:69 msgid "secret key not available" msgstr "la clau secreta no està disponible" #: util/errors.c:70 msgid "wrong secret key used" msgstr "s'ha utilitzat una clau secreta incorrecta" # Gènere? Nombre? ivb # Werner FIXME: please add translator comment saying *what* is # uncompressed so we know the gender. jm #: util/errors.c:71 msgid "not supported" msgstr "no és suportat" #: util/errors.c:72 msgid "bad key" msgstr "la clau és incorrecta" #: util/errors.c:73 msgid "file read error" msgstr "error de lectura" #: util/errors.c:74 msgid "file write error" msgstr "error d'escriptura" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "l'algoritme de compressió és desconegut" #: util/errors.c:76 msgid "file open error" msgstr "error en l'obertura del fitxer" #: util/errors.c:77 msgid "file create error" msgstr "error en la creació del fitxer" #: util/errors.c:78 msgid "invalid passphrase" msgstr "la contrasenya és invàlida" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "l'algoritme de clau pública no és implementat" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "l'algoritme de xifratge no és implementat" #: util/errors.c:81 msgid "unknown signature class" msgstr "la classe de signatura és desconeguda" #: util/errors.c:82 msgid "trust database error" msgstr "error de la base de dades de confiança" #: util/errors.c:83 msgid "bad MPI" msgstr "l'MPI és erroni" #: util/errors.c:84 msgid "resource limit" msgstr "límit de recursos" #: util/errors.c:85 msgid "invalid keyring" msgstr "l'anell no és vàlid" #: util/errors.c:86 msgid "bad certificate" msgstr "el certificat és incorrecte" #: util/errors.c:87 msgid "malformed user id" msgstr "l'id d'usuari és malformat" #: util/errors.c:88 msgid "file close error" msgstr "error en el tancament del fitxer" #: util/errors.c:89 msgid "file rename error" msgstr "error en el reanomenament del fitxer" #: util/errors.c:90 msgid "file delete error" msgstr "error en l'eliminació del fitxer" #: util/errors.c:91 msgid "unexpected data" msgstr "dades inesperades" #: util/errors.c:92 msgid "timestamp conflict" msgstr "conflicte de data" # Ací veus pq jo pose «no és vàlid» en comptes de «és invàlid». ivb #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "l'algoritme de clau pública és inusable" #: util/errors.c:94 msgid "file exists" msgstr "el fitxer existeix" # Segons context: la clau és feble? ivb #: util/errors.c:95 msgid "weak key" msgstr "clau feble" #: util/errors.c:96 msgid "invalid argument" msgstr "l'argument és invàlid" # La «U» és masculina o femenina? ivb #: util/errors.c:97 msgid "bad URI" msgstr "l'URI és errònia" # Ídem. ivb #: util/errors.c:98 msgid "unsupported URI" msgstr "l'URI no és suportada" #: util/errors.c:99 msgid "network error" msgstr "error de la xarxa" # Gènere? Nombre? ivb # Werner FIXME: please add translator comment saying *what* is # uncompressed so we know the gender. jm #: util/errors.c:101 msgid "not encrypted" msgstr "no és xifrat" # Gènere? Nombre? Passat, futur? ivb # Probablement és una clau, femení. jm # Werner FIXME: please add translator comment saying *what* is # uncompressed so we know the gender. jm #: util/errors.c:102 msgid "not processed" msgstr "no processat" #: util/errors.c:104 msgid "unusable public key" msgstr "ls clau pública és inusable" #: util/errors.c:105 msgid "unusable secret key" msgstr "la clau secreta és inusable" # «del servidor», «en el servidor»? ivb #: util/errors.c:106 msgid "keyserver error" msgstr "error de servidor de claus" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "Cancel·la" # Gènere? Nombre? ivb # Werner FIXME: please add translator comment saying *what* is # uncompressed so we know the gender. jm #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "no és xifrat" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "no hi ha dades signades\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... açò és un bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "heu trobat un bug... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "sí|si" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "sS" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "ix" # «xX»? ivb #: util/miscutil.c:443 msgid "qQ" msgstr "xX" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "AVÍS: esteu usant memòria insegura!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "si us plau, visiteu http://www.gnupg.org/documentation/faqs.html per a més " "informació\n" # Últimament pense si «iniciar» no serà millor que «inicialitzar»? ivb # Segons SC, hi ha diferència. jm #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "l'operació no és possible sense memòria segura inicialitzada\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(potser heu utilitzat el programa erroni per a aquesta tasca)\n" # Indi. ivb #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "AVÍS: el propietari és insegur en %s «%s»\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "AVÍS: els permissos són insegurs en %s «%s»\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "AVÍS: el propietari del directori envoltant és insegur en %s «%s»\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "AVÍS: els permissos del directori envoltant són insegurs en %s «%s»\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "la extensió de xifrat «%s» no s'ha carregat per tindre permissos " #~ "insegurs\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "el mòdul de xifratge IDEA no està present\n" #~ msgid "Command> " #~ msgstr "Ordre> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "La parella de claus DSA ha de tenir 1024 bits.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "la base de dades de confiança està corrompuda; per favor, executeu «gpg --" #~ "fix-trustdb».\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "no es poden ficar dades de notació dins de signatures v3 (estil PGP 2.x)\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "no es poden ficar dades de notació dins de signatures de clau v3 (estil " #~ "PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "no es pot ficar una URL de política dins de signatures v3 (estil PGP 2." #~ "x)\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ "no es pot ficar una URL de política dins de signatures de clau v3 (estil " #~ "PGP 2.x)\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA requereix l'ús d'un algoritme de dispersió de 160 bits\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "vegeu http://www.gnupg.org/why-not-idea.html per a més informació\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "un nom de notació només pot tenir caràcters imprimibles o espais i acabar " #~ "amb el signe «=»\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "un nom de notació d'usuari no pot contenir el caràcter «@»\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "un nom de notació d'usuari no pot contenir el caràcter «@»\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "un valor de notació no pot utilitzar cap caràcter de control\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "AVÍS: s'hi han trobat dades de notació invàlides\n" #~ msgid "not human readable" #~ msgstr "no llegible per humans" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "llig opcions del fitxer" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "llig opcions del fitxer" #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [caduca: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "" #~ "clau %08lX: la classe de signatura és inesperada (0x%02x) - es descarta\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "no s'ha pogut executar %s «%s»: %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "No hi ha usuari per a la clau\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "error en la creació de la contrasenya: %s\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "" #~ "la contrasenya és incorrecta o l'algoritme de xifratge (%d) és " #~ "desconegut\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "no es pot establir el pid del client per l'agent\n" # llija/llegisca/llegesca. ivb #~ msgid "can't get server read FD for the agent\n" #~ msgstr "no es pot fer que el servidor llegesca el DF per a l'agent\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "no es pot fer que el servidor escriga el DF per a l'agent\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "hi ha un problema de comunicació amb el gpg-agent\n" #~ msgid "passphrase too long\n" #~ msgstr "la contrasenya és massa llarga\n" #~ msgid "invalid response from agent\n" #~ msgstr "la resposta de l'agent és invàlida\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "hi ha un problema amb l'agent: l'agent ha tornat 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "tria la clau secundària N" #~ msgid "list signatures" #~ msgstr "llista les signatures" #~ msgid "sign the key" #~ msgstr "signa la clau" #~ msgid "add a secondary key" #~ msgstr "afegeix una clau secundària" #~ msgid "delete signatures" #~ msgstr "esborra signatures" #~ msgid "change the expire date" #~ msgstr "canvia la data de caducitat" #~ msgid "set preference list" #~ msgstr "estableix la llista de preferències" #~ msgid "updated preferences" #~ msgstr "preferències actualitzades" #~ msgid "No secondary key with index %d\n" #~ msgstr "No hi ha cap clau secundària amb l'índex %d\n" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "l'algorisme de resum «%s» es de només lectura en aquesta versió\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "AVÍS: el resum «%s» no és part d'OpenPGP. Utilitzeu-lo assumint el risc!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[fitxers]|xifra fitxers" #~ msgid "store only" #~ msgstr "només emmagatzema" #~ msgid "|[files]|decrypt files" #~ msgstr "|[fitxers]|desxifra fitxers" #~ msgid "sign a key non-revocably" #~ msgstr "signa una clau irrevocablement" # D'altres formes o no queda clar o és massa literari :P ivb #~ msgid "sign a key locally and non-revocably" #~ msgstr "signa una clau de forma local i irrevocable" #~ msgid "list only the sequence of packets" #~ msgstr "llista només la seqüència de paquets" #~ msgid "export the ownertrust values" #~ msgstr "exporta els valors de confiança" #~ msgid "unattended trust database update" #~ msgstr "actualització no atesa de la base de dades de confiança" #~ msgid "fix a corrupted trust database" #~ msgstr "arregla una base de dades de confiança corrompuda" #~ msgid "De-Armor a file or stdin" #~ msgstr "lleva l'armadura a un fitxer o a stdin" #~ msgid "En-Armor a file or stdin" #~ msgstr "crea l'armadura d'un fitxer o d'stdin" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NOM|usa NOM com a destinatari predeterminat" #~ msgid "use the default key as default recipient" #~ msgstr "usa la clau predeterminada com a destinatari predeterminat" #~ msgid "don't use the terminal at all" #~ msgstr "no usa el terminal en absolut" #~ msgid "force v3 signatures" #~ msgstr "força signatures v3" #~ msgid "do not force v3 signatures" #~ msgstr "no força signatures v3" #~ msgid "force v4 key signatures" #~ msgstr "força signatures de clau v4" #~ msgid "do not force v4 key signatures" #~ msgstr "no força signatures de clau v4" #~ msgid "always use a MDC for encryption" #~ msgstr "sempre utilitza un MDC per a xifrar" #~ msgid "never use a MDC for encryption" #~ msgstr "mai utilitza un MDC per a xifrar" #~ msgid "use the gpg-agent" #~ msgstr "utilitza el gpg-agent" # Mode desatès (SC) ivb #~ msgid "batch mode: never ask" #~ msgstr "mode desatès: no pregunta mai" #~ msgid "assume yes on most questions" #~ msgstr "suposa «sí» en la majoria de les preguntes" #~ msgid "assume no on most questions" #~ msgstr "suposa «no» en la majoria de les preguntes" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "afegeix aquest anell a la llista" #~ msgid "add this secret keyring to the list" #~ msgstr "afegeix aquest anell secret a la llista" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NOM|usa NOM com a clau secreta predeterminada" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|HOST|usa aquest servidor per a cercar claus" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NOM|el joc de caràcters serà NOM" #~ msgid "|[file]|write status info to file" #~ msgstr "|fitxer|escriu informació d'estat en un fitxer" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|IDCLAU|confia absolutament en aquesta clau" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|FITXER|carrega el mòdul d'extensió especificat" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emula el mode descrit en RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "" #~ "estableix totes les opcions de paquets, xifratge i resum al comportament " #~ "d'OpenPGP" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ "estableix totes les opcions de paquets, xifratge i resum al comportament " #~ "de PGP 2.x" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|usa el mode de contrasenya especificat" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "" #~ "|NOM|usa l'algoritme de resum de missatges NOM per a les contrasenyes" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NOM|usa l'algoritme de xifratge NOM per a les contrasenyes" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NOM|usa l'algoritme de xifratge NOM" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NOM|usa l'algoritme de resum de missatges NOM" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|usa l'algoritme de compressió N" # elimina o descarta? jm #~ msgid "throw keyid field of encrypted packets" #~ msgstr "descarta el camp keyid dels paquets xifrats" # Werner FIXME: uncapitalize #~ msgid "Show Photo IDs" #~ msgstr "mostra els Photo ID" # Werner FIXME: uncapitalize #~ msgid "Don't show Photo IDs" #~ msgstr "no mostra els Photo ID" # Werner FIXME: uncapitalize #~ msgid "Set command line to view Photo IDs" #~ msgstr "fixa l'ordre per a veure Photo ID" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "" #~ "l'algorisme de compressió «%s» es de només lectura en aquesta versió\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "l'algoritme de compressió ha d'estar en l'interval %d..%d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key user-id" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key user-id" #~ msgid "can't open %s: %s\n" #~ msgstr "no s'ha pogut obrir %s: %s\n" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "clau %08lX: aquesta clau ha estat revocada!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "clau %08lX: aquesta subclau ha estat revocada!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: la clau ha caducat\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: La clau NO és de confiança\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: No hi ha garanties que aquesta clau pertanya realment al seu\n" #~ "propietari però s'accepta de tota manera\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "la preferència %c%lu no és vàlida\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (signar i xifrar)\n" #~ 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 "" #~ "Preparat per a generar un nou parell de claus %s.\n" #~ " grandària mínima: 768 bits\n" #~ " grandària predeterminada: 1024 bits\n" #~ " grandària màxima aconsellada: 2048 bits\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA només permet claus entre 512 i 1024 bits\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "" #~ "la clau és massa petita; 1024 bits és el mínim permés per a claus RSA.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "la clau és massa petita; 768 bits és el mínim permés.\n" # Jo tinc Deep Thought MMX a casa i m'ho fa en 42 segons. ivb #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "la clau és massa llarga; %d és el màxim permés.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "No es recomanen claus més llargues de 2048 bits perquè\n" #~ "els càlculs són VERITABLEMENT llargs!\n" #~ msgid "Are you sure that you want this keysize? " #~ msgstr "Segur que voleu aquesta grandària? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "D'acord, però sapieu que la radiació del monitor i del teclat també son " #~ "molt vulnerables als atacs!\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: no s'ha pogut obrir: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: AVÍS: el fitxer és buit\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "clau %08lX: no és una clau rfc2440 - es descarta\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "NOTA: s'ha detectat una clau primària Elgamal - açò pot trigar un temps " #~ "en importar-se\n" #~ msgid " (default)" #~ msgstr " (predeterminat)" #~ msgid "q" #~ msgstr "q" #~ msgid "save" #~ msgstr "desa" #~ msgid "help" #~ msgstr "ajuda" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "list" #~ msgstr "llista" #~ msgid "l" #~ msgstr "l" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "clau" #~ msgid "check" #~ msgstr "comprova" #~ msgid "s" #~ msgstr "s" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "sign the key non-revocably" #~ msgstr "signa la clau irrevocablement" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "sign the key locally and non-revocably" #~ msgstr "signa la clau localment i irrevocablement" #~ msgid "debug" #~ msgstr "depura" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "primary" #~ msgstr "primari" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX creada: %s caduca: %s" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! la subclau ha estat revocada: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- s'ha trobat una revocació falsa\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? hi ha problemes en la comprovació de la revocació: %s\n" #~ msgid "" #~ "\"\n" #~ "locally signed with your key %08lX at %s\n" #~ msgstr "" #~ "»\n" #~ "signat localment amb la vostra clau %08lX el %s\n" #~ msgid " signed by %08lX at %s%s%s\n" #~ msgstr " signat per %08lX el %s%s%s\n" #~ msgid " signed by %08lX at %s%s\n" #~ msgstr " signat per %08lX el %s%s\n" #~ msgid "Policy: " #~ msgstr "Política: " #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "No hauríeu d'usar algoritmes experimentals!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "aquest algoritme de xifratge està desaconsellat; useu-ne un de més " #~ "estàndard!\n" #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "no s'ha pogut obtenir del servidor la clau: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "error mentre s'enviava a «%s»: %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "l'enviament a «%s» ha tingut èxit (status=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "l'enviament a «%s» ha fallat: status=%u\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "aquest servidor de claus no suporta --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "no es pot cercar el servidor de claus: %s\n" # Werner FIXME: Settle on Elgamal or ElGamal. jm #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "clau %08lX: aquesta és una clau ElGamal que NO és segura per a " #~ "signatures!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "la clau %08lX s'ha creat %lu segon en el futur (salt en el temps o " #~ "problemes\n" #~ "amb el rellotge)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "la clau %08lX s'ha creat %lu segons en el futur (salt en el temps o " #~ "problemes\n" #~ "amb el rellotge)\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: no s'ha pogut accedir: %s\n" # blocatge? ivb # yep. jm #~ msgid "%s: can't create lock\n" #~ msgstr "%s: no s'ha pogut crear el blocatge\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: no s'ha pogut crear el blocatge\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: no s'ha pogut crear: %s\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "s'ha marcat la clau %08lX com confiada absolutament\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "s'omet la signatura de la clau de signatura Elgamal %08lX a %08lX\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "s'omet la signatura de %08lX a la clau de signatura Elgamal %08lX\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "s'està comprovant en profunditat %d signat=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/" #~ "%d/%d\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: no s'ha pogut crear el directori: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Si voleu utilitzar aquesta clau revocada de totes maneres, dieu «sí»." #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Seleccioneu l'algoritme a utilitzar.\n" #~ "\n" #~ "DSA (també conegut com a DSS) és el algorisme de signatura digital que " #~ "només\n" #~ "pot ser utilitzat per a signatures. Aquest és el algoritme suggerit " #~ "perquè\n" #~ "la comprovació de signatures DSA és molt més ràpida que les d'ElGamal.\n" #~ "\n" #~ "ElGamal és un algorisme que es pot utilitzar per a signatures i " #~ "xifratge.\n" #~ "OpenPGP distingueix entre 2 variants d'aquest algorisme: una de només " #~ "xifratge\n" #~ "i una de signatura+xifratge; en veritat és el mateix, però alguns " #~ "paràmetres\n" #~ "han de seleccionar-se d'una manera especial per a crear claus més " #~ "segures\n" #~ "per a signatures: aquest programa fa açò, però altres implementacions\n" #~ "d'OpenPGP no estan obligades a entendre la variant signatura+xifratge.\n" #~ "\n" #~ "La primera clau (primària) ha de ser sempre una clau que siga capaç de " #~ "signar;\n" #~ "aquesta és la raó per la qual la clau de només xifratge ElGamal no està\n" #~ "disponible en aquest menú." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Encara que aquestes claus estan definides en RFC2440, no es recomanen\n" #~ "perquè no tots els programes hi poden treballar i perquè les\n" #~ "signatures que generen són molt llargues i lentes de verificar." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "fins ara s'han comprovat %lu claus (%lu signature)\n" #~ msgid "key incomplete\n" #~ msgstr "clau incompleta\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "la clau %08lX és incompleta\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "no es pot fet això en mode desatès\n" #~ msgid "can't open file: %s\n" #~ msgstr "no es pot obrir el fitxer: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "error: falten dos punts\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "error: no hi ha cap valor de confiança\n" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (signar i xifrar)\n" #~ msgid "" #~ "The use of this algorithm is only supported by GnuPG. You will not be\n" #~ "able to use this key to communicate with PGP users. This algorithm is " #~ "also\n" #~ "very slow, and may not be as secure as the other choices.\n" #~ msgstr "" #~ "L'ús d'aquest algorisme només està suportat per GnuPG. No podreu " #~ "utilitzar aquesta clau per a comunicar-vos amb usuaris de PGP. Aquest " #~ "algorisme també és molt lent, i potser no és tan segur com les altres " #~ "alternatives.\n" #~ msgid "Create anyway? " #~ msgstr "Voleu crear la clau de tota manera? " #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "algoritme de clau simètric invàlid detectat (%d)\n" #~ msgid "this keyserver is not fully HKP compatible\n" #~ msgstr "aquest servidor de clau no és completament compatible amb HKP\n" #~ msgid "The use of this algorithm is deprecated - create anyway? " #~ msgstr "" #~ "L'ús d'aquest algoritme està desaconsellat - el voleu crear igualment? " #~ msgid "|NAME=VALUE|use this notation data" #~ msgstr "|NOM=VALOR|usa aquesta notació de dades" #~ msgid "" #~ "the first character of a notation name must be a letter or an underscore\n" #~ msgstr "" #~ "el primer caràcter de la notació ha de ser una lletra o un subratllat\n" #~ msgid "dots in a notation name must be surrounded by other characters\n" #~ msgstr "els punts han d'estar envoltats per altres caràcters\n" #~ msgid "" #~ "WARNING: This key already has a photo ID.\n" #~ " Adding another photo ID may confuse some versions of PGP.\n" #~ msgstr "" #~ "AVÍS: Aquesta clau ja te un photo ID.\n" #~ " Afegir un altre photo ID pot confondre algunes versions de PGP.\n" #~ msgid "You may only have one photo ID on a key.\n" #~ msgstr "Només podeu tenir un photo ID en una clau.\n" #~ msgid " Fingerprint:" #~ msgstr " Empremta digital:" #~ msgid "you have to start GnuPG again, so it can read the new options file\n" #~ msgstr "" #~ "heu d'executar GnuPG de nou per que puga llegir el nou fitxer d'opcions\n" #~ msgid "changing permission of `%s' failed: %s\n" #~ msgstr "no s'han pogut canviar els permissos de «%s»: %s\n" #~ msgid "too many random bits requested; the limit is %d\n" #~ msgstr "massa bits aleatoris sol·licitats; el límit és %d\n" #~ msgid "|[NAMES]|check the trust database" #~ msgstr "|[NOMS]|comprova la base de dades de confiança" #~ msgid "--delete-secret-key user-id" #~ msgstr "--delete-secret-key user-id" #~ msgid "--delete-key user-id" #~ msgstr "--delete-key user-id" #~ msgid "--delete-secret-and-public-key user-id" #~ msgstr "--delete-secret-and-public-key user-id" #~ msgid "For info see http://www.gnupg.org" #~ msgstr "Si voleu més informació vegeu http://www.gnupg.org" #~ msgid "sSmMqQ" #~ msgstr "sSmMqQ" #~ 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 s'ha trobat un camí de confiança vàlid a la clau. Vegem si podem\n" #~ "assignar valors de confiança no assignats.\n" #~ "\n" #~ msgid "" #~ "No path leading to one of our keys found.\n" #~ "\n" #~ msgstr "" #~ "No s'ha trobat un camí que condueixe a una de les nostres claus.\n" #~ "\n" #~ msgid "" #~ "No certificates with undefined trust found.\n" #~ "\n" #~ msgstr "" #~ "No s'han trobat certificats amb confiança no definida.\n" #~ "\n" #~ msgid "" #~ "No trust values changed.\n" #~ "\n" #~ msgstr "" #~ "No s'ha canviat cap valor de confiança.\n" #~ "\n" #~ msgid "%08lX: no info to calculate a trust probability\n" #~ msgstr "" #~ "%08lX: no hi ha informació per a calcular una probabilitat de confiança\n" #~ msgid "skipped: public key already set with --encrypt-to\n" #~ msgstr "es descarta: la clau pública ja s'ha especificat amb --encrypt-to\n" #~ msgid "%s: error checking key: %s\n" #~ msgstr "%s: error en la comprovació de la clau: %s\n" #~ msgid "Do you really want to create a sign and encrypt key? " #~ msgstr "Segur que voleu crear una clau de signatura i xifratge? " #~ msgid "Do you really need such a large keysize? " #~ msgstr "Realment necessiteu una clau tan llarga? " #~ msgid "%s: user not found: %s\n" #~ msgstr "%s: no s'ha trobat l'usuari: %s\n" #~ msgid "certificate read problem: %s\n" #~ msgstr "problema en la lectura del certificat: %s\n" #~ msgid "too many entries in unk cache - disabled\n" #~ msgstr "" #~ "massa entrades en la memòria cau de claus desconegudes - desactivada\n" #~ msgid "secret key %08lX not imported (use %s to allow for it)\n" #~ msgstr "clau secreta %08lX no importada (utilitzeu %s per a permitir-ho)\n" #~ msgid "key %08lX: our copy has no self-signature\n" #~ msgstr "clau %08lX: la nostra còpia no té autosignatura\n" #~ msgid "%s: user not found\n" #~ msgstr "%s: no s'ha trobat l'usuari\n" #~ msgid "assuming bad MDC due to an unknown critical bit\n" #~ msgstr "es suposa MDC erroni a causa d'un bit crític desconegut\n" #~ msgid "error reading dir record for LID %lu: %s\n" #~ msgstr "error al llegir el registre de directori per al LID %lu: %s\n" #~ msgid "lid %lu: expected dir record, got type %d\n" #~ msgstr "lid %lu: s'esperava registre de directori, s'ha obtingut %d\n" #~ msgid "no primary key for LID %lu\n" #~ msgstr "no hi ha una clau primària per al LID %lu\n" #~ msgid "error reading primary key for LID %lu: %s\n" #~ msgstr "error al llegir clau primària per al LID %lu: %s\n" #~ msgid "key %08lX: query record failed\n" #~ msgstr "clau %08lX: la consulta del registre ha fallat\n" #~ msgid "key %08lX: already in trusted key table\n" #~ msgstr "clau %08lX: ja es troba en la taula de claus de confiança\n" #~ msgid "NOTE: secret key %08lX is NOT protected.\n" #~ msgstr "NOTE: la clau secreta %08lX no està protegida.\n" #~ msgid "key %08lX: secret and public key don't match\n" #~ msgstr "clau %08lX: les claus pública i secreta no coincideixen\n" #~ msgid "key %08lX.%lu: Good subkey binding\n" #~ msgstr "clau %08lX.%lu: Enllaç de subclau correcta\n" #~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" #~ msgstr "clau %08lX.%lu: Enllaç de subclau invàlid: %s\n" #~ msgid "key %08lX.%lu: Valid key revocation\n" #~ msgstr "clau %08lX.%lu: Revocació de clau vàlida\n" #~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" #~ msgstr "clau %08lX.%lu: Revocació de clau invàlida: %s\n" #~ msgid "Good self-signature" #~ msgstr "Auto-signatura correcta" #~ msgid "Invalid self-signature" #~ msgstr "Auto-signatura invàlida" #~ msgid "Valid user ID revocation skipped due to a newer self signature" #~ msgstr "" #~ "Es descarta una revocació d'ID d'usuari vàlida degut a una autosignatura " #~ "més recent" #~ msgid "Valid user ID revocation" #~ msgstr "Revocació d'ID d'usuari vàlida" #~ msgid "Invalid user ID revocation" #~ msgstr "Revocació d'ID d'usuari invàlida" #~ msgid "Valid certificate revocation" #~ msgstr "Certificat de revocació vàlid" #~ msgid "Good certificate" #~ msgstr "Certificat correcte" #~ msgid "Invalid certificate revocation" #~ msgstr "Certificat de revocació invàlid" #~ msgid "Invalid certificate" #~ msgstr "Certificat invàlid" #~ msgid "sig record %lu[%d] points to wrong record.\n" #~ msgstr "el registre de signatura %lu[%d] apunta a un registre incorrecte.\n" #~ msgid "duplicated certificate - deleted" #~ msgstr "certificat duplicat: esborrat" #~ msgid "tdbio_search_dir failed: %s\n" #~ msgstr "tdbio_search_dir ha fallat: %s\n" #~ msgid "lid ?: insert failed: %s\n" #~ msgstr "lid ?: la inserció ha fallat: %s\n" #~ msgid "lid %lu: insert failed: %s\n" #~ msgstr "lid %lu: la inserció ha fallat: %s\n" #~ msgid "lid %lu: inserted\n" #~ msgstr "lid %lu: inserit\n" #~ msgid "\t%lu keys with errors\n" #~ msgstr "\t%lu claus amb errors\n" #~ msgid "\t%lu keys inserted\n" #~ msgstr "\t%lu claus inserides\n" #~ msgid "lid %lu: dir record w/o key - skipped\n" #~ msgstr "lid %lu: registre de directori sense clau - es descarta\n" #~ msgid "\t%lu due to new pubkeys\n" #~ msgstr "\\t%lu degut a noves claus públiques\n" #~ msgid "\t%lu keys skipped\n" #~ msgstr "\t%lu claus es descarta\n" #~ msgid "\t%lu keys updated\n" #~ msgstr "\t%lu clau actualitzades\n" #~ msgid "Ooops, no keys\n" #~ msgstr "Ooops, no hi ha claus\n" #~ msgid "Ooops, no user IDs\n" #~ msgstr "Ooops, no hi ha IDs\n" #~ msgid "check_trust: search dir record failed: %s\n" #~ msgstr "check_trust: ha fallat la cerca en el registre de directori: %s\n" #~ msgid "key %08lX: insert trust record failed: %s\n" #~ msgstr "" #~ "clau %08lX: ha fallat la inserció en la base de dades de confiança: %s\n" #~ msgid "key %08lX.%lu: inserted into trustdb\n" #~ msgstr "clau %08lX.%lu: inserida en la base de dades de confiança\n" #~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" #~ msgstr "" #~ "clau %08lX.%lu: creada en el futur (salt en el temps o problema de\n" #~ "rellotge)\n" #~ msgid "key %08lX.%lu: expired at %s\n" #~ msgstr "clau %08lX.%lu: caducada el %s\n" #~ msgid "key %08lX.%lu: trust check failed: %s\n" #~ msgstr "clau %08lX.%lu: ha fallat la verificació de confiança: %s\n" #~ msgid "problem finding '%s' in trustdb: %s\n" #~ msgstr "problema al cercar «%s» en la base de dades de confiança: %s\n" #~ msgid "user '%s' not in trustdb - inserting\n" #~ msgstr "" #~ "l'usuari «%s» no està en la base de dades de confiança - inserint-lo\n" #~ msgid "failed to put '%s' into trustdb: %s\n" #~ msgstr "no s'ha pogut posar «%s» en la base de dades de confiança - %s\n" #~ msgid "WARNING: can't yet handle long pref records\n" #~ msgstr "AVÍS: encara no es poden manejar registres de prefències llargs\n" #~ msgid "%s: can't create keyring: %s\n" #~ msgstr "%s: no s'ha creat l'anell: %s\n" #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "No es poden usar claus RSA en aquesta versió\n" #~ msgid "No key for user ID\n" #~ msgstr "No hi ha clau per a l'usuari\n" #~ msgid "no secret key for decryption available\n" #~ msgstr "no hi ha clau secreta disponible per al desxifratge\n" gnupg-1.4.20/po/es.po0000644000175000017500000067435312635457220011254 00000000000000# Mensajes en español para GnuPG. # Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc. # Urko Lusa , 1998, 1999. # I've tried to mantain the terminology used by Armando Ramos # in his PGP 2.3.6i translation. # I also got inspiration from it.po by Marco d'Itri # Jaime Suárez , 2001-2004. # Manuel "Venturi" Porras Peralta , 2014. # msgid "" msgstr "" "Project-Id-Version: GnuPG 1.4.1\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2014-11-23 01:52+0100\n" "Last-Translator: Manuel \"Venturi\" Porras Peralta \n" "Language-Team: Español; Castellano \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Gtranslator 2.91.6\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "no se puede generar un primo con pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "no se puede generar un primo con menos de %d bits\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "no se ha detectado módulo acumulador de entropía\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "no se puede bloquear `%s': %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "esperando que se bloquee `%s'...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "no se puede abrir `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "no se puede obtener información de `%s': %s\n" # ignore no es ignorar, es no tener en cuenta, ignorar es not to know. # Sugerencia: descartar. # Sugerencia a la sugerencia: ¿qué tal omitido? (pasar en silencio una # cosa; excluirla de lo que se habla o escribe) dice el diccionario. # Bien. También se puede poner "descartado". #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' no es un fichero regular - omitido\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "nota: el fichero «random_seed» está vacío\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" "ATENCIÓN: tamaño incorrecto del fichero «random_seed» - no se utilizó\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "no se puede leer `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "nota: no se ha actualizado el fichero «random_seed»\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "no se puede crear %s: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "no se puede escribir `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "no se puede cerrar `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "ATENCIÓN: ¡está usando un generador de números aleatorios no seguro!\n" #: cipher/random.c:894 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 que pueda ejecutarse. ¡No es en absoluto un generador seguro!\n" "\n" "¡NO USE DATOS GENERADOS POR ESTE PROGRAMA!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Espere, se está reuniendo entropía. Haga alguna otra cosa con\n" "el ordenador mientras tanto si eso hace que no se aburra, porque eso\n" "mejorará la calidad de la entropía.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "No hay suficientes bytes aleatorios disponibles. 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/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "fallo al almacenar la huella digital: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "fallo guardando la fecha de creación: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "falló la lectura de la clave: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "la respuesta no incluye la clave pública\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "la respuesta no incluye el módulo RSA\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "la respuesta no incluye el exponente público RSA\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "usando PIN predeterminado %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "fallo al usar el PIN predeterminado %s: %s - en adelante desactivado\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "Introduzca el PIN%%0A[firmas hechas: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "Introduzca el PIN" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "la función de manejo del PIN devolvió un error: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "El PIN para CHV%d es demasiado corto; la longitud mínima es %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "la verificación CHV%d falló: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "error recuperando el estatus CHV de la tarjeta\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "¡la tarjeta se ha bloqueado permanentemente!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "Quedan %d intentos de PIN de administrador antes de que se bloquee " "permanentemente la clave\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Introduzca el PIN de Administrador%%0A[intentos restantes: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Introduzca el PIN de Administrador" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "el acceso a las órdenes de administrador no está configurado\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "El Código de Reinicio no está o ya no está disponible\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Introduzca el Código de Reinicio para la tarjeta" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "El Código de Reinicio es demasiado corto; el tamaño mínimo es %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Nuevo Código de Reinicio" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Nuevo PIN Administrador" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Nuevo PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "error obteniendo el nuevo PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "error leyendo datos de la aplicación\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "error leyendo huella digital DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "la clave ya existe\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "se reemplazará la clave existente\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "generando nueva clave\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "escribiendo nueva clave\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "falta marca de tiempo de creación\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "falta el módulo RSA o no es de %d bits\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "falta exponente público o es mayor de %d bits\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "falta el primo RSA %s o no es de %d bits\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "fallo al almacenar la clave: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "espere mientras se genera la clave ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "la generación de la clave falló\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "generación de clave completada (%d segundos)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "estructura de la tarjeta OpenPGP inválida (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "la huella digital en la tarjeta no coincide con la solicitada\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "la tarjeta no admite el algoritmo %s de resumen\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "firmas creadas hasta ahora: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "actualmente se prohíbe verificar el PIN de Administrador con esta orden\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "no se puede acceder a %s - ¿tarjeta OpenPGP inválida?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "cabecera de armadura inválida: " #: g10/armor.c:459 msgid "armor header: " msgstr "cabecera de armadura: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "cabecera de firma clara inválida\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "cabecera de armadura desconocida: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "firmas en texto claro anidadas\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "armadura inesperada: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "línea con guiones inválida: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "omitido carácter radix64 inválido %02X\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "fin de fichero prematuro (falta suma de comprobación CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "fin de fichero prematuro (en suma de comprobación CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "suma de comprobación CRC mal creada\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "error de redundancia cíclica: %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "fin de fichero prematuro (en el cierre)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "error en la línea de cierre\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "no se han encontrado datos OpenPGP válidos\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura incorrecta: línea mayor de %d caracteres\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "carácter entrecomillado imprimible en la armadura - probablemente se " "utilizó\n" "un MTA defectuoso\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "tarjeta OpenPGP no disponible: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "tarjeta OpenPGP núm. %s detectada\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "imposible hacer esto en modo de proceso por lotes\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Esta orden está disponible solo para tarjetas versión 2.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "¿Su elección?" #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[no establecido]" #: g10/card-util.c:512 msgid "male" msgstr "hombre" #: g10/card-util.c:513 msgid "female" msgstr "mujer" #: g10/card-util.c:513 msgid "unspecified" msgstr "no especificado" #: g10/card-util.c:540 msgid "not forced" msgstr "no forzado" #: g10/card-util.c:540 msgid "forced" msgstr "forzado" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Error: actualmente solo se permite ASCII sin formato.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Error: No se puede utilizar el carácter «<».\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Error: no se permiten dobles espacios.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Apellido del titular de la tarjeta: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Nombre del titular de la tarjeta: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Error: nombre combinado demasiado largo (máximo %d caracteres).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL de donde recuperar la clave pública: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Error: URL demasiado larga (el máximo son %d caracteres).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "error reservando memoria suficiente: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "error leyendo `%s': %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "error escribiendo `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Datos de ingreso (nombre de la cuenta): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" "Error: los datos de ingreso son demasiado largos (límite de %d caracteres).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Datos privados: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" "Error: los datos privados son demasiado largos (límite de %d caracteres).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Preferencias de idioma: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Error: longitud de la cadena de preferencias inválida.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Error: caracteres inválidos en cadena de preferencias.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Sexo ((H)ombre, (M)mujer o espacio): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Error: respuesta inválida.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "Huella digital CA:" #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Error: huella digital formateada inválida.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "la operación con la clave no es posible: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "no es una tarjeta OpenPGP" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "error obteniendo la información de la clave actual: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "¿Desea reemplazar la clave existente? (s/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "NOTA: No hay garantía de que la tarjeta permita el uso del tamaño\n" " requerido. Si la generación de clave fracasa, compruebe\n" " la documentación de su tarjeta para ver los tamaños posibles.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "¿De qué tamaño desea la clave de Firmado? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "¿De qué tamaño desea la clave de Cifrado? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "¿De qué tamaño desea la clave de Autenticación? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "redondeados a %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "los tamaños de claves %s deben estar en el rango %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" "Ahora se reconfigurará la tarjeta para que genere una clave de %u bits\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "error al cambiar el tamaño de la clave de %d a %u bits: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" "¿Desea hacer una copia de seguridad externa a la tarjeta de la clave de " "cifrado? (S/n)" #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "NOTA: ¡las claves ya estaban almacenadas en la tarjeta!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "¿Desea reemplazar las claves existentes? (s/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Observe que los valores de fábrica de los PIN son\n" " PIN = `%s' PIN Administrador = `%s'\n" "Debería cambiarlos usando la orden --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Seleccione el tipo de clave a generar:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Clave de firmado\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Clave de cifrado\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Clave de autenticación\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Elección inválida.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Elija dónde guardar la clave:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "algoritmo de protección de clave desconocido\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "las partes secretas de la clave no están disponibles\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "clave secreta ya almacenada en una tarjeta\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "error escribiendo la clave en la tarjeta: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "salir de este menú" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "ver órdenes de administrador" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "mostrar esta ayuda" #: g10/card-util.c:1687 msgid "list all available data" msgstr "listar todos los datos disponibles" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "cambia el nombre del titular de la tarjeta" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "cambiar URL de donde obtener la clave" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "recuperar la clave especificada en la URL de la tarjeta" #: g10/card-util.c:1693 msgid "change the login name" msgstr "cambiar el nombre de usuario" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "cambiar preferencias de idioma" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "cambiar sexo del titular de la tarjeta" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "cambiar huella digital de una CA" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "cambiar estado de la opción forzar firma del PIN" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "generar nuevas claves" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "menú para cambiar o desbloquear el PIN" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "verificar PIN y listar todos los datos" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "desbloquear PIN usando Código de Reinicio" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/tarjeta> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Órdenes exclusivas de administrador\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Se permiten órdenes de administrador\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "No se permiten órdenes de administrador\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Orden inválida (pruebe «help»)\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "lector de tarjeta no disponible\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Inserte la tarjeta y pulse Intro o escriba «c» para cancelar: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "fallo al elegir openpgp: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Retire la tarjeta actual e inserte la del número de serie:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Pulse Intro cuando esté listo o «c» para cancelar: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Introduzca Nuevo PIN de Administrador: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Introduzca el Nuevo PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Introduzca PIN de Administrador: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Introduzca PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Repita este PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN repetido incorrectamente; inténtelo de nuevo" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "no se puede abrir `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output no funciona con esta orden\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "clave \"%s\" no encontrada: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "error leyendo bloque de claves: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(excepto si especifica la clave dando su huella digital)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "imposible hacer esto en modo de proceso por lotes sin \"--yes\"\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "¿Eliminar esta clave del almacén de claves? (s/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "¡Es una clave secreta! ¿Eliminar realmente? (s/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "fallo borrando el bloque de claves: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "eliminada información de la confianza en propietarios\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "¡hay una clave secreta para esta clave pública! \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "use antes la opción \"--delete-secret-key\" para borrarla.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "error creando contraseña: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "no puede usar un paquete ESK simétrico debido al modo S2K\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "usando cifrado %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' ya está comprimido\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ATENCIÓN `%s' es un fichero vacío\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "solo puede cifrar con claves RSA de 2048 bits o menos en modo --pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "leyendo desde `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "no se puede usar el algoritmo IDEA para todas las claves a las que cifra.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "ATENCIÓN: forzar el cifrado simétrico %s (%d) viola las preferencias\n" "del destinatario\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "ATENCIÓN: forzar el algoritmo de compresión %s (%d) va en contra\n" "de las preferencias del destinatario\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "forzar el cifrado simétrico %s (%d) viola las preferencias\n" "del destinatario\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "no puede usar %s en modo %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s cifrado para: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "datos cifrados %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "cifrado con algoritmo desconocido %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ATENCIÓN: el mensaje se cifró con una clave débil en el cifrado simétrico.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problema trabajando con un paquete cifrado\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "no es posible ejecutar programas remotos\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "no se puede crear el directorio `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "llamadas a programas externos desactivadas debido a permisos no seguros " "sobre ficheros.\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "esta plataforma necesita ficheros temporales para llamar a programas " "externos\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "no se puede ejecutar el programa `%s': %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "no se puede ejecutar el intérprete de órdenes `%s': %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "error del sistema llamando al programa externo: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "el programa externo finalizó anormalmente\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "no se puede ejecutar el programa externo\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "no se puede leer la respuesta del programa externo: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "ATENCIÓN: no se puede borrar el fichero temporal (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "ATENCIÓN: no se puede borrar el directorio temporal `%s': %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "exporta firmas que están marcadas como solo locales" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" "exporta el atributo de los identificadores de usuario (normalmente retratos)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "exporta claves de revocación que están marcadas como «sensibles»" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "elimina la contraseña de las subclaves exportadas" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "elimina las partes sin usar de la clave durante la exportación" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "borra tanto como sea posible de la clave al exportar" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "no se permite exportar claves secretas\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "clave %s: no protegida - omitida\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "clave %s: clave estilo PGP 2.x - omitida\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "clave %s: material de la clave ya en la tarjeta - omitida\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "a punto de exportar una subclave desprotegida\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "fallo al desproteger la subclave: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" "ATENCIÓN: la clave secreta %s no tiene una suma de comprobación simple SK\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "ATENCIÓN: no se ha exportado nada\n" # Órdenes, please... # Sí, este no he podido ser yo :-) Por cierto, ¿por qué la O no se # puede acentuar? ¿demasiado alta? # ¿Quién dice que no se puede? :-) #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Órdenes:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[file]|crea una firma" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[file]|crea una firma en texto claro" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "crea una firma separada" #: g10/gpg.c:393 msgid "encrypt data" msgstr "cifra datos" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "cifra solo con un cifrado simétrico" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "descifra datos (predeterminado)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verifica una firma" #: g10/gpg.c:401 msgid "list keys" msgstr "lista claves" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "lista claves y firmas" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "lista y comprueba firmas de las claves" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "lista claves y huellas digitales" #: g10/gpg.c:406 msgid "list secret keys" msgstr "lista claves secretas" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "genera un nuevo par de claves" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "elimina claves del almacén público" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "elimina claves del almacén privado" #: g10/gpg.c:411 msgid "sign a key" msgstr "firma una clave" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "firma localmente una clave" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "firma o modifica una clave" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "genera un certificado de revocación" #: g10/gpg.c:416 msgid "export keys" msgstr "exporta claves" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exporta claves a un servidor de claves" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importa claves desde un servidor de claves" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "busca claves en un servidor de claves" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "actualiza todas las claves desde un servidor de claves" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importa/fusiona claves" #: g10/gpg.c:429 msgid "print the card status" msgstr "escribe el estado de la tarjeta" #: g10/gpg.c:430 msgid "change data on a card" msgstr "cambia datos en la tarjeta" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "cambia el PIN de la tarjeta" #: g10/gpg.c:440 msgid "update the trust database" msgstr "actualiza la base de datos de confianza" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [files]|imprime resúmenes de mensaje" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opciones:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "crear una salida ascii con armadura" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NOMBRE|cifrado para NOMBRE" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "usa este usuario para firmar o descifrar" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|establece nivel N de compresión (0 no comprime)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "usa modo de texto canónico" #: g10/gpg.c:486 msgid "use as output file" msgstr "usa como fichero de salida" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "detallar" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "no realizar ningún cambio" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "preguntar antes de sobreescribir" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "usar estilo OpenPGP estricto" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "generar mensajes compatibles con PGP 2.x" # ordenes -> órdenes # página man -> página de manual # Vale. ¿del manual mejor? # Hmm, no sé, en man-db se usa "de". La verdad es que no lo he pensado. #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Véase en la página del manual la lista completa de órdenes y opciones)\n" #: g10/gpg.c:576 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 para texto sin cifrar\n" " --detach-sign [fichero] hace una firma separada\n" " --list-keys [nombres] muestra las claves\n" " --fingerprint [nombres] muestra las huellas digitales\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Informe de posibles «bugs» a .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opciones] [ficheros] (-h para ayuda)" #: g10/gpg.c:801 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 predeterminada depende de los datos de entrada\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmos admitidos:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Clave pública: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cifrado: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Resumen: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compresión: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "uso: gpg [opciones] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "órdenes conflictivas\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "no se encontró el signo = en la definición de grupo `%s'\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "ATENCIÓN: titularidad no segura del directorio personal `%s'\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "ATENCIÓN: titularidad no segura del fichero de configuración `%s'\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "ATENCIÓN: permisos no seguros sobre el directorio personal `%s'\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "ATENCIÓN: permisos no seguros sobre el fichero de configuración `%s'\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "ATENCIÓN: titularidad no segura del directorio contenedor de `%s'\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "ATENCIÓN: titularidad no segura del directorio contenedor del fichero de\n" "configuración `%s'\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "ATENCIÓN: permisos no seguros del directorio contenedor del directorio " "personal `%s'\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "ATENCIÓN: permisos no seguros del directorio contenedor del fichero de\n" "configuración `%s'\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "artículo de configuración desconocido `%s'\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "mostrar foto IDs al listar claves" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "mostrar URLs de directrices al listar firmas" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "mostrar todas las notaciones al listar firmas" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "mostrar notaciones estándar IETF al listar firmas" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "mostrar notaciones personalizadas al listar firmas" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "mostrar URLs del servidor de claves favorito al listar firmas" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "mostrar validez del identificador de usuario al listar claves" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "mostrar IDs de usuario revocados y caducados al listar claves" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "mostrar subclaves revocadas y caducadas al listar claves" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "mostrar nombre del almacén al listar claves" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "mostrar fechas de caducidad al listar firmas" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTA: se omite el antiguo fichero de opciones predeterminadas `%s'\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: no existe el fichero de opciones predeterminado `%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "fichero de opciones `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "leyendo opciones desde `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: ¡%s no es para uso normal!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "`%s' no es una fecha de caducación de firma válida\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "`%s' no es un juego de caracteres válido\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "no se puede interpretar la URL del servidor de claves\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: opciones del servidor de claves inválidas\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "opciones del servidor de claves inválidas\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: opciones de importación inválidas\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "opciones de importación inválidas\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: opciones de exportación inválidas\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "opciones de exportación inválidas\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: lista de opciones inválida\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "lista de opciones inválida\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "mostrar foto IDs al verificar firmas" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "mostrar URLs de directrices al verificar firmas" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "mostrar todas las notaciones al verificar firmas" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "mostrar notaciones estándar IETF al verificar firmas" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "mostrar notaciones personalizadas al verificar firmas" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "mostrar URLs del servidor de claves favorito al verificar firmas" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "mostrar validez del identificador de usuario al verificar firmas" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "mostrar IDs de usuario revocados y caducados al verificar firmas" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "mostrar solo la ID principal del usuario al verificar firmas" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "validar firmas con datos PKA" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "aumentar la confianza en las firmas con datos PKA válidos" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: opciones de verificación inválidas\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "opciones de verificación inválidas\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "imposible establecer %s como ruta de ejecución\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: lista inválida de auto-localización de claves\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "lista inválida de auto-localización de claves\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "" "ATENCIÓN: ¡el programa podría crear un fichero de volcado de memoria!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "ATENCIÓN: %s sustituye a %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "¡%s no permitido con %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "¡%s no tiene sentido con %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "NOTA: %s no disponible en esta versión\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "no se ejecutará con memoria no segura debido a %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "solo puede hacer firmas separadas o en claro en modo --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "no puede firmar y cifrar a la vez en modo --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "debe usar ficheros (y no tuberías) si trabaja con --pgp2 activo.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "cifrar un mensaje en modo --pgp2 requiere el algoritmo IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "el algoritmo de cifrado seleccionado es inválido\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "el algoritmo de resumen seleccionado no inválido\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "el algoritmo de compresión seleccionado es inválido\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "el algoritmo de certificación por resumen elegido es inválido\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed debe ser mayor que 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed debe ser mayor que 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth debe estar en el rango de 1 a 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "default-cert-level inválido; debe ser 0, 1, 2 o 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "min-cert-level inválido; debe ser 0, 1, 2 o 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: no se recomienda en absoluto el modo S2K simple (0)\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K incorrecto; debe ser 0, 1 o 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "preferencias predeterminadas inválidas\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "preferencias personales de cifrado inválidas\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "preferencias personales de algoritmo de resumen inválidas\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "preferencias personales de compresión inválidas\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s aún no funciona con %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "no puede usar el cifrado `%s' en modo %s\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "no puede usar el resumen `%s' en modo %s\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "no puede usar la compresión `%s' en modo %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "fallida la inicialización de la base de datos de confianza: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "ATENCIÓN: se indicaron destinatarios (-r) sin clave pública de cifrado\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [nombre_fichero]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [nombre_fichero]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "el cifrado simétrico de `%s' falló: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [nombre_fichero]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [nombre_fichero]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "no puede usar --symetric --encrypt con --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "no puede usar --symetric --encrypt en modo %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [nombre_fichero]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nombre_fichero]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [nombre_fichero]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "no puede usar --symetric --sign --encrypt con --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "no puede usar --symmetric --sign --encrypt en modo %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [nombre_fichero]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [nombre_fichero]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [nombre_fichero]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key id-usuario" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key id-usuario" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-usuario [órdenes]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-usuario] [almacén]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "envío al servidor de claves fallido: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "recepción del servidor de claves fallida: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "exportación de clave fallida: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "búsqueda en el servidor de claves fallida: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "actualización al servidor de claves fallida: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "eliminación de armadura fallida: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "creación de armadura fallida: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo de resumen de cifrado inválido `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[nombre_fichero]" # Falta un espacio. # En español no se deja espacio antes de los puntos suspensivos # (Real Academia dixit) :) # Tomo nota :-). Este comentario déjalo siempre. #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Adelante, teclee su mensaje...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "la URL de política de certificación suministrada no es válida\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "la URL de política de firmas suministrada no es válida\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "la URL del servidor de claves preferido suministrada no es válida\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "demasiados registros en la cache pk - anulada\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[Identificador de usuario no encontrado]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "clave %s: clave secreta sin clave pública - omitida\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "`%s' recuperado automáticamente vía %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Clave %s inválida convertida en válida mediante --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "no hay subclave secreta para la subclave pública %s - omitida\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "usando subclave %s en vez de la clave primaria %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "algo más discreto" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "tomar las claves de este almacén" # o tal vez "en el sello..." # Creo que es mejor "con el sello de fecha", no es un conflicto # del sello en si mismo sino en relación con el mensaje. # Ok. #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "hacer que los conflictos de marca de tiempo sean sólo un aviso" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|DF|escribe la información de estado en este descriptor de fichero" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Uso: gpgv [opciones] [ficheros] (-h para ayuda)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Sintaxis: gpgv [opciones] [ficheros]\n" "Coteja las firmas con claves de confianza conocidas\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Está en su mano asignar un valor aquí. Dicho valor no se exportará nunca a\n" "terceros. Este valor se necesita para implementar la red de confianza, no " "tiene nada\n" "que ver con la red de certificados (creada implícitamente)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Para construir la Red-de-Confianza, GnuPG necesita saber qué claves\n" "tienen confianza absoluta - normalmente son las claves con las que usted\n" "puede acceder a la clave secreta. Conteste \"sí\" para hacer que esta\n" "clave se considere como de total confianza\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Si desea usar esta clave no fiable de todos modos, conteste \"sí\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Introduzca el identificador de usuario al que quiere enviar el mensaje." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Seleccione el algoritmo que utilizará.\n" "\n" "DSA (alias DSS) es el Algoritmo de Firma Digital y solo puede usarse para " "firmas.\n" "\n" "Elgamal es un algoritmo solo para cifrar.\n" "\n" "RSA sirve tanto para firmar como para cifrar.\n" "\n" "La primera clave (primaria) debe ser siempre de tipo capaz de firmar." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Normalmente no es una buena idea usar la misma clave para firmar y\n" "cifrar. Este algoritmo debería usarse solo en ciertos contextos.\n" "Consulte primero a su experto en seguridad." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Introduzca la longitud de la clave" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Responda \"sí\" o \"no\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Introduzca el valor requerido conforme se muestra.\n" "Es posible introducir una fecha ISO (AAAA-MM-DD), pero no se obtendrá una\n" "buena respuesta a los errores; por el contrario, el sistema intentará " "interpretar\n" "el valor introducido como un intervalo." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Introduzca el nombre del dueño de la clave" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" "introduzca una dirección de correo electrónico (opcional pero muy\n" "recomendable)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Introduzca un comentario opcional" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N para cambiar el nombre.\n" "C para cambiar el comentario.\n" "E para cambiar la dirección de correo electrónico.\n" "O para continuar con la generación de clave.\n" "S para interrumpir la generación de clave." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" "Responda \"sí\" (o sólo \"s\") si está de acuerdo con todo para generar la " "subclave." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Cuando firme un identificador de usuario en una clave, debería verificar que " "la clave\n" "pertenece a la persona que se nombra en el identificador de usuario. Es " "útil para\n" "otros saber cómo de cuidadosamente lo ha verificado.\n" "\n" "\"0\" significa que no hace ninguna declaración concreta sobre como ha\n" " comprobado la validez de la clave.\n" "\n" "\"1\" significa que cree que la clave pertenece a la persona que declara\n" " poseerla pero usted no pudo o no verificó la clave en absoluto. Esto " "es útil\n" " para una verificación \"en persona\" cuando firmas la clave de un " "usuario\n" " pseudo-anónimo.\n" "\n" "\"2\" significa que hizo una comprobación informal de la clave. Por ejemplo\n" " podría querer decir que comprobó la huella digital de la clave y\n" " comprobó el identificador de usuario en la clave con un ID " "fotográfico.\n" "\n" "\"3\" significa que hizo una comprobación exhaustiva de la clave. Por\n" " ejemplo, esto puede referirse a que verificó la huella digital de la " "clave\n" " con el propietario de la clave, y que comprobó, mediante un documento " "difícil de falsificar\n" " con una identificación fotográfica(como un pasaporte) que el nombre " "del poseedor de la\n" " clave coincide con el identificador de usuario en la clave y que " "verificó finalmente\n" " (intercambiando la dirección) que la dirección de correo electrónico " "en la clave pertenece\n" " al poseedor de la clave.\n" "\n" "Observe que los ejemplos dados en los niveles 2 y 3 son *solo* ejemplos.\n" "En definitiva, usted decide lo que significa \"informal\" y \"exhaustivo\"\n" "para usted cuando firma las claves de otros.\n" "\n" "Si no sabe qué contestar, conteste \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Responda \"sí\" si quiere firmar TODOS los IDs de usuario" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Responda \"sí\" si desea realmente eliminar este identificador de usuario.\n" "¡También se perderán todos los certificados!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Responda \"sí\" si está de acuerdo en borrar esta subclave" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Esta es una firma válida en esta clave. Normalmente no desea\n" "borrar esta firma ya que puede ser importante para establecer una conexión\n" "de confianza con la clave o con otra clave certificada por ésta." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "No se puede comprobar esta firma porque usted no posee la clave\n" "correspondiente. Debería aplazar su eliminación hasta que sepa la clave\n" "se utilizó, ya que dicha clave podría establecer una conexión de confianza\n" "a través de otra clave ya certificada." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "Esta firma no es válida. Tiene sentido borrarla de su almacén." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Esta es una firma que une el identificador de usuario a la clave. No suele " "ser una\n" "buena idea borrar este tipo de firmas. De hecho, GnuPG podría no ser capaz " "de\n" "volver a usar esta clave. Por ello, elimínela tan solo si esta auto-firma " "no\n" "es válida por alguna razón y dispone de una firma alternativa." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Cambiar las preferencias de todos los identificadores de usuario (o sólo " "los \n" "seleccionados) por la lista actual de preferencias. La marca de tiempo\n" "de todas las auto-firmas afectadas se avanzará en un segundo.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Introduzca la contraseña: esta es una frase secreta \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Repita la última contraseña para asegurarse de lo que tecleó." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Introduzca el nombre del fichero al que se le aplica la firma" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Responda \"sí\" si está de acuerdo en sobreescribir el fichero" # Sugerencia: ENTER -> INTRO. # Aceptada. #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Introduzca un nuevo nombre de fichero. Si pulsa INTRO se usará el fichero\n" "por omisión (mostrado entre corchetes)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Debería especificar un motivo para la certificación. Elija una opción de " "esta lista \n" "según sea el caso:\n" " \"La clave se ha comprometido\"\n" " Use esto si tiene razones para pensar que personas no autorizadas\n" " tuvieron acceso a su clave secreta.\n" " \"La clave se ha sustituido\"\n" " Use esto si ha reemplazado la clave por otra más nueva.\n" " \"La clave ya no se utiliza\"\n" " Use esto si ha dejado de usar esta clave.\n" " \"La identificación de usuario ya no es válida\"\n" " Use esto para señalar que la identificación de usuario no debería\n" " seguir utilizándose; esto se emplea normalmente para marcar una\n" " dirección de correo electrónico como inválida.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Si lo desea puede introducir un texto explicando por qué emite\n" "este certificado de revocación. Sea conciso con este texto.\n" "Una línea vacía pone fin al texto.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Ayuda no disponible" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "No hay ayuda disponible para `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "importar firmas marcadas como solo locales" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "reparar daño del servidor de claves públicas al importar" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "no eliminar los valores de confianza en el propietario al importar" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "no actualizar la base de datos de confianza tras importar" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "crear una clave pública al importar una clave secreta" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "aceptar solo actualizaciones de claves ya existentes" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "eliminar partes inútiles de la clave tras importar" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "eliminar tanto como sea posible de la clave tras importar" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "omitiendo bloque de tipo %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu claves procesadas hasta ahora\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Cantidad total procesada: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " omitidas claves nuevas: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sin identificador de usuario: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importadas: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " sin cambios: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nuevos identificadores de usuario: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nuevas subclaves: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nuevas firmas: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " nuevas revocaciones de claves: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " claves secretas leídas: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " claves secretas importadas: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "claves secretas sin cambios: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " no importadas: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr "firmas limpiadas: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " identificadores de usuario limpiados: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "ATENCIÓN: la clave %s contiene preferencias para no disponible\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr "algoritmos en estos identificadores de usuario:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": algoritmo de cifrado preferido %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": algoritmo de resumen preferido %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": algoritmo de compresión preferido %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "se recomienda encarecidamente que actualice sus preferencias y\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "vuelva a distribuir esta clave para evitar problemas potenciales de\n" "diferencias entre algoritmos.\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" "puede actualizar sus preferencias con: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "clave %s: sin identificador de usuario\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "clave %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "rechazada por el filtro de importación" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "clave %s: reparada la subclave PKS corrupta\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "clave %s: aceptado identificador de usuario \"%s\" sin auto-firma\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "clave %s: sin identificadores de usuario válidos\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "esto puede ser debido a la ausencia de auto-firma\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "clave %s: clave pública no encontrada: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "clave %s: clave nueva - omitida\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "almacén editable no encontrado: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "escribiendo en `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "error escribiendo en el almacén `%s': %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "clave %s: clave pública \"%s\" importada\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "clave %s: no coincide con nuestra copia\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "clave %s: no se puede localizar el bloque de claves original: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "clave %s: no se puede leer el bloque de claves original: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "clave %s: \"%s\" 1 nuevo identificador de usuario\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "clave %s: \"%s\" %d nuevos identificadores de usuario\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "clave %s: \"%s\" 1 firma nueva\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "clave %s: \"%s\" %d firmas nuevas\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "clave %s: \"%s\" 1 subclave nueva\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "clave %s: \"%s\" %d subclaves nuevas\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "clave %s: \"%s\" %d firma limpiada\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "clave %s: \"%s\" %d firmas limpiadas\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "clave %s: \"%s\" limpiado %d nuevo identificador de usuario\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "clave %s: \"%s\" limpiados %d nuevos identificadores de usuario\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "clave %s: \"%s\" sin cambios\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "clave secreta %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "no se permite importar claves secretas\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "clave %s: clave secreta con cifrado inválido %d - omitida\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "ningún almacén secreto de claves predeterminado: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "clave %s: clave secreta importada\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "clave %s: ya estaba en el almacén secreto\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "clave %s: clave secreta no encontrada: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "clave %s: no es una clave pública - imposible emplear el\n" "certificado de revocación\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "clave %s: certificado de revocación inválido: %s - rechazado\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "clave %s: \"%s\" certificado de revocación importado\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "clave %s: no hay identificador de usuario para la firma\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "clave %s: algoritmo de clave pública no admitido para el identificador de " "usuario \"%s\"\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "clave %s: autofirma inválida para el identificador de usuario \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "clave %s: algoritmo de clave pública no admitido\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "clave %s: firma directa de clave inválida\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "clave %s: no hay subclave que unir a la clave\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "clave %s: unión de subclave inválida\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "clave %s: eliminado el enlace de subclave múltiple\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "clave %s: no hay subclave para la revocación de clave\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "clave %s: revocación de subclave inválida\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "clave %s: eliminada múltiple revocación de subclave\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "clave %s: omitido identificador de usuario \"%s\"\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "clave %s: subclave omitida\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "clave %s: firma no exportable (clase 0x%02x) - omitida\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "clave %s: certificado de revocación en lugar equivocado - omitido\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "clave %s: certificado de revocación no valido: %s - omitido\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "clave %s: firma de subclave en lugar equivocado - omitida\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "clave %s: firma de clase (0x%02x) inesperada - omitida\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "clave %s: detectado identificador de usuario duplicado - fusionado\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "ATENCIÓN: la clave %s puede estar revocada: recuperando clave de revocación " "%s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "ATENCIÓN: la clave %s puede estar revocada: falta clave de revocación %s.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "clave %s: \"%s\" certificado de revocación añadido\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "clave %s: firma directa de clave añadida\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "NOTA: un S/N de la clave no coincide con el de la tarjeta\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "NOTA: clave primaria en línea y almacenada en la tarjeta\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "NOTA: clave secundaria en línea y almacenada en la tarjeta\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "error creando el almacén `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "almacén `%s' creado\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "recurso de bloque de clave `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "fallo al reconstruir la caché del almacén de claves: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revocación]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[autofirma]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 firma incorrecta\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d firmas incorrectas\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 firma no comprobada al faltar su clave\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d firmas no comprobadas al faltar sus claves\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 firma no comprobada por causa de un error\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d firmas no comprobadas por varios errores\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "Detectado 1 identificador de usuario sin autofirma válida\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "Detectados %d identificadores de usuario sin autofirmas válidas\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Decida su nivel de confianza en que este usuario pueda verificar\n" "correctamente las claves de otros usuarios (mirando\n" "pasaportes, comprobando huellas digitales de diferentes fuentes...)\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Confío un poco\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Confío totalmente\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Introduzca el nivel de esta firma de confianza.\n" "Un nivel mayor que 1 permite que la clave que está firmando pueda\n" "hacer firmas de confianza en su nombre.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Introduzca un dominio para restringir esta firma, o intro para ninguno.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Identificador \"%s\" revocado." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "¿Seguro que todavía quiere firmarlo? (s/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Imposible firmar.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Identificador de usuario \"%s\" caducado." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Identificador de usuario \"%s\" no autofirmado." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "Se puede firmar el identificador de usuario \"%s\"." #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "¿Desea firmarlo? (s/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "La autofirma en \"%s\"\n" "es una firma de tipo PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "¿Desea convertirla en una autofirma OpenPGP? (s/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Su firma actual en \"%s\"\n" "ha caducado.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "¿Desea producir una nueva firma que reemplace a la caducada? (s/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Su firma actual en \"%s\"\n" "es una firma local.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "¿Desea convertirla en una clave totalmente exportable? (s/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" ya estaba firmada localmente por la clave %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" ya estaba firmada por la clave %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "¿Desea firmarla de nuevo de todas formas? (s/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Nada que firmar con la clave %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "¡Esta clave ha caducado!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Esta clave caducará el %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "¿Desea que su firma caduque al mismo tiempo? (S/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "No puede crear una firma OpenPGP de una clave PGP 2.x estando en modo --" "pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Esto inutilizaría la clave en PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "¿Cómo de cuidadosamente ha verificado que la clave que está a punto de\n" "firmar pertenece realmente a la persona arriba nombrada? Si no sabe qué\n" "contestar, introduzca \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) No contesto.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) No lo he comprobado en absoluto.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) He hecho una comprobación informal.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Lo he comprobado meticulosamente.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "¿Qué elige? (escriba '?' si desea más información): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "¿Está realmente seguro de querer firmar esta clave\n" "con su clave: \"%s\" (%s)?\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Esto será una autofirma.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "ATENCIÓN: la firma no se marcará como no exportable.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "ATENCIÓN: la firma no se marcará como no revocable.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "La firma se marcará como no exportable.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "La firma se marcará como no revocable.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "No he comprobado esta clave en absoluto.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "He comprobado esta clave informalmente.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "He comprobado esta clave meticulosamente.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "¿Firmar entonces? (s/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "firma fallida: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "La clave tiene sólo un apuntador u objetos de clave en la propia tarjeta\n" "- no hay contraseña que cambiar.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Esta clave no está protegida.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Las partes secretas de la clave primaria no están disponibles.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Las partes secretas de la clave primaria se guardan en la tarjeta.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "La clave está protegida.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "No se puede editar esta clave: %s\n" #: g10/keyedit.c:1178 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:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "contraseña repetida incorrectamente; inténtelo de nuevo" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "No ha especificado contraseña. ¡Es posible que sea una *mala* idea!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "¿Realmente desea hacer esto? (s/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "moviendo la firma de la clave al lugar correcto\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "guarda y sale" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "muestra huella digital de la clave" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "lista clave e identificadores de usuario" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "selecciona identificador de usuario N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "selecciona subclave N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "comprueba firmas" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "firmar identificadores de usuario seleccionados [* ver órdenes relacionadas " "más abajo]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "firma localmente los identificadores de usuario seleccionados" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "" "firmar con una firma de confianza los identificadores de usuario " "seleccionados" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" "firmar con una firma no revocable los identificadores de usuario " "seleccionados" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "añadir un identificador de usuario" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "añadir un retrato" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "eliminar identificadores de usuario seleccionados" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "añadir una subclave" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "añadir clave a tarjeta" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "mover una clave a la tarjeta" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "mover una clave de respaldo a la tarjeta" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "borrar clave secundaria" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "añadir una clave de revocación" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "eliminar firmas de los identificadores de usuario seleccionados" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "cambiar la fecha de caducidad para la clave o subclaves seleccionadas" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "marcar identificador de usuario seleccionado como primario" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "cambiar entre las listas de claves secretas y públicas" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "mostrar preferencias (experto)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "mostrar preferencias (detallado)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "" "establecer preferencias para los identificadores de usuario seleccionados" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "establecer URL del servidor de claves preferido para los identificadores de " "usuario seleccionados" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "establecer notación para los identificadores de usuario seleccionados" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "cambiar la contraseña" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "cambiar confianza en el propietario" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "revocar firmas de los identificadores de usuario seleccionados" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "revocar los identificadores de usuario seleccionados" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "revocar clave o subclaves seleccionadas" #: g10/keyedit.c:1439 msgid "enable key" msgstr "habilitar clave" #: g10/keyedit.c:1440 msgid "disable key" msgstr "desactivar clave" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "mostrar retratos seleccionados" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "compactar IDs inutilizables y borrar firmas inutilizables de la clave" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "compactar IDs inutilizables y borrar todas las firmas de la clave" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "error leyendo bloque de clave secreta \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Clave secreta disponible.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Se necesita la clave secreta para hacer esto.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Utilice la orden \"cambia\" primero.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* La orden `sign' (firmar) puede estar precedida por una 'l' para firmas\n" "locales (lsign), una 't' para firmas fiables (tsign), `nr' para firmas no\n" "revocables (nrsign) o cualquier combinación de ellas (ltsign, tnrsign, etc)\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "La clave está revocada." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "¿Firmar realmente todos los IDs de usuario? (s/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Sugerencia: seleccione los identificadores de usuario que firmar\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Clase de firma desconocida `%s'\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Esta orden no se permite en modo %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Debe seleccionar por lo menos un identificador de usuario.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "¡No puede borrar el último identificador de usuario!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "¿Borrar realmente todos los identificadores seleccionados? (s/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "¿Borrar realmente este identificador de usuario? (s/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "¿Borrar realmente la clave primaria? (s/N)" #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Debe seleccionar exactamente una clave.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "La orden espera un nombre de fichero como argumento\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "No se puede abrir `%s': %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Error leyendo clave de respaldo desde `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Debe seleccionar por lo menos una clave.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "¿De verdad quiere borrar las claves seleccionadas? (s/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "¿De verdad quiere borrar esta clave? (s/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "¿Revocar realmente todos los identificadores seleccionados? (s/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "¿Revocar realmente este identificador de usuario? (s/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "¿De verdad quiere revocar la clave completa? (s/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "¿De verdad quiere revocar las subclaves seleccionadas? (s/N)" #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "¿De verdad quiere revocar esta subclave? (s/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "La confianza del propietario no puede establecerse si se está usando\n" "una base de datos de confianza propocionada por el usuario\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Establecer lista de preferencias a:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "¿Actualizar realmente las preferencias para los ID seleccionados? (s/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "¿Actualizar realmente las preferencias? (s/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "¿Grabar cambios? (s/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "¿Salir sin grabar? (s/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "actualización fallida: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "actualización de la clave secreta fallida: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Clave sin cambios, no se necesita actualización.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Resumen: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Características: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Sevidor de claves no-modificar" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Servidor de claves preferido: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notación: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "No hay preferencias en un identificador de usuario estilo PGP 2.x\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Esta clave fue revocada en %s por %s clave %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Esta clave puede ser revocada por %s clave %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(confidencial)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "creado: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "revocada: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "caducó: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "caduca: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "uso: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "confianza: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "validez: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Esta clave está desactivada" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "num. tarjeta: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Tenga en cuenta que la validez de clave mostrada no será correcta\n" "necesariamente hasta que reinicie el programa.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "revocada" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "caducada" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "ATENCIÓN: no se ha marcado como principal ningún identificador de usuario. " "Esta orden puede\n" " causar que se tome como principal otro identificador de usuario " "distinto.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "No puede cambiar la fecha de caducidad de una clave v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "ATENCIÓN: esta es una clave de tipo PGP2. Añadir un retrato puede\n" "hacer que algunas versiones de PGP rechacen esta clave.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "¿Está seguro de querer añadirla? (s/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "No puede añadir un ID fotográfico a una clave tipo PGP2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "¿Borrar esta firma correcta? (s/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "¿Borrar esta firma inválida? (s/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "¿Borrar esta firma desconocida? (s/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "¿Borrar realmente esta autofirma? (s/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d firmas borradas.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d firmas borradas\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "No se borró nada\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "Armadura inválida" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Identificador de usuario \"%s\" compactado: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Identificador de usuario \"%s\": %d firma eliminada\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Identificador de usuario \"%s\": %d firmas eliminadas\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Identificador de usuario \"%s\": ya está minimizado\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "Identificador de usuario \"%s\": ya está limpio\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "ATENCIÓN: esta es una clave tipo PGP2. Añadir un revocador designado puede\n" " hacer que algunas versiones de PGP rechacen esta clave.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "No puede añadir un revocador designado a una clave tipo PGP2.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Introduzca el identificador de usuario del revocador asignado: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "no se puede elegir una clave tipo PGP 2.x como revocador designado\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "no puede elegir una clave como su propio revocador designado\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "esta clave ya ha sido designada como revocadora\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "ATENCIÓN: ¡no podrá deshacer la asignación de una clave como revocador " "designado!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "¿Está seguro de querer elegir esta clave como revocador designado? (s/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Quite las selecciones de las claves secretas.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Seleccione como máximo una clave secundaria.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Cambiando fecha de caducidad de subclave.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Cambiando caducidad de clave primaria.\n" #: g10/keyedit.c:3646 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:3662 msgid "No corresponding signature in secret ring\n" msgstr "No existe la firma correspondiente en el almacén secreto\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "ATENCIÓN: la subclave de firmado %s no tiene certificado cruzado\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "la subclave %s no firma y así no necesita ser certificada en cruz\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Seleccione exactamente un identificador de usuario.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "omitiendo autofirma V3 para el id \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Introduzca la URL de su servidor de claves preferido: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "¿Seguro que quiere reemplazarlo? (s/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "¿Seguro que quiere borrarlo? (s/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Notación de firma: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "¿Sobreescribir? (s/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "No hay ningún identificador de usuario con el índice %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "No hay ningún identificador de usuario con la suma %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "No existe una subclave con índice %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "identificador de usuario: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "firmada con su clave %s el %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (no exportable)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Esta firma caducó el %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "¿De verdad quiere revocarla? (s/N) " #: g10/keyedit.c:4719 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:4770 msgid "Not signed by you.\n" msgstr "No está firmado por usted.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Ha firmado estos IDs de usuario con la clave %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (no revocable)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "revocada por la clave %s el %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Va a revocar las siguientes firmas:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "¿Crear los certificados de revocación realmente? (s/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "no hay clave secreta\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "identificador de usuario \"%s\" ya ha sido revocado\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "ATENCIÓN: una firma de identificador de usuario tiene fecha %d segundos en " "el futuro\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "La clave %s ya ha sido revocada.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "La subclave %s ya ha sido revocada.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Mostrando ID fotográfico %s de tamaño %ld para la clave %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "preferencia `%s' duplicada\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "demasiadas preferencias de cifrado\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "demasiadas preferencias de resumen\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "demasiadas preferencias de compresión\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "caracter inválido `%s' en cadena de preferencias\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "escribiendo firma directa\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "escribiendo autofirma\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "escribiendo la firma de comprobación de clave\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "tamaño de clave incorrecto; se usarán %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "tamaño de clave redondeado a %u bits\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Firma" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certificar" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Cifrado" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Autentificación" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "FfCcAaSs" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Posibles accriones para una %s clave: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Acciones permitidas actualmente: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Conmutar la capacidad de firmar\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Conmutar la capacidad de cifrado\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Conmutar la capacidad de autentificación\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Acabado\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Seleccione el tipo de clave deseado:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA y RSA (por defecto)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA y ElGamal (por defecto)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (sólo firmar)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (sólo firmar)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (sólo cifrar)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (sólo cifrar)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (permite elegir capacidades)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (permite elegir capacidades)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "las claves %s pueden tener entre %u y %u bits de longitud.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "¿De qué tamaño quiere la clave? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "¿De qué tamaño quiere la clave? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "El tamaño requerido es de %u bits\n" #: g10/keygen.c:1722 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 "" "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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "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:1754 msgid "Key is valid for? (0) " msgstr "¿Validez de la clave (0)? " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "¿Firma válida para? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "valor inválido\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "La clave nunca caduca\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "La firma nunca caduca\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "La clave caduca %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "La firma caduca el %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Su sistema no puede mostrar fechas más allá del 2038.\n" "Sin embargo funcionará correctamente hasta el 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "¿Es correcto? (s/n) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Necesita un identificador de usuario para identificar su clave. El programa\n" "construye el identificador de usuario 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:1836 msgid "Real name: " msgstr "Nombre y apellidos: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Carácter inválido en el nombre\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "El nombre no puede empezar con un número\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "El nombre debe tener al menos 5 caracteres\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Dirección de correo electrónico: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Dirección inválida\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Comentario: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Caracter inválido en el comentario\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Está usando el juego de caracteres `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Ha seleccionado este identificador de usuario:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "No ponga la dirección de correo-e en el nombre real o en el comentario\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcDdVvSs" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "¿Cambia (N)ombre, (C)omentario, (D)irección o (S)alir? " #: g10/keygen.c:1937 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:1956 msgid "Please correct the error first\n" msgstr "Corrija primero el error.\n" #: g10/keygen.c:1996 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/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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:2034 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:2899 msgid "Key generation canceled.\n" msgstr "Creación de claves cancelada.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "escribiendo clave pública en `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "escribiendo apuntador de la clave privada en `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "escribiendo clave privada en `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "almacén público de claves no escribible encontrado: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "almacén privado de claves no escribible encontrado: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "error escribiendo almacén público `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "error escribiendo almacén privado `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "claves pública y secreta creadas y firmadas.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Tenga en cuenta que esta clave no puede ser usada para cifrar. Puede usar\n" "la orden \"--edit-key\" para crear una subclave con este propósito.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Creación de la clave fallida: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, 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:3386 g10/keygen.c:3516 g10/sign.c:244 #, 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:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "NOTA: crear subclaves para claves V3 no sigue el estándar OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "¿Crear de verdad? (s/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "almacenado de clave en la tarjeta fallido: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "no se puede crear fichero de respaldo `%s': %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOTA: copia de seguridad de la clave guardada en `%s'\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "nunca " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Política de firmas críticas: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Política de firmas: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Servidor de claves crítico preferido: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Notación de firmas críticas: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Notación de firma: " #: g10/keylist.c:471 msgid "Keyring" msgstr "almacén de claves" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Huellas digitales de la clave primaria:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Huella de subclave:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Huella de clave primaria:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Huella de subclave:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Huella de clave =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Número de serie de la tarjeta =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "renombrando `%s' en `%s' fallo: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "ATENCIÓN: existen 2 ficheros con información confidencial.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s es el que no se ha modificado\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s es el nuevo\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Arregle este posible fallo de seguridad\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "memorizando almacén `%s'\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu claves memorizadas hasta ahora (%lu firmas)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu claves memorizadas (%lu firmas)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: almacén creado\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "incluir claves revocadas en resultados de la búsqueda" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "incluir subclaves al buscar por identificador de clave" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "usar ficheros temporales para pasar datos a los ayudantes delservidor de " "claves" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "no borrar ficheros temporales tras usarlos" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "recuperar automáticamente claves al verificar firmas" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "Introduzca la URL de su servidor de claves preferido: " #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "usar el registro PKA presente en una clave al recuperar claves" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "ATENCIÓN: las opciones de servidor de claves `%s' no se usan en esta " "plataforma\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "desactivado" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Introduzca número(s), O)tro, o F)in >" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "protocolo del servidor de claves inválido (us %d!=handler %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "clave \"%s\" no encontrada en el servidor\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "clave no encontrada en el servidor\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "solicitando clave %s de %s servidor %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "solicitando clave %s de %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "buscando nombres desde %s servidor %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "buscando nombres desde %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "enviando clave %s a %s servidor %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "enviando clave %s a %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "buscando \"%s\" de %s servidor %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "buscando \"%s\" de %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "¡no se solicita ninguna acción al servidor de claves!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" "ATENCIÓN: el manejador del servidor de claves procede de una versión " "diferente de GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "el servidor de claves no envió VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "error de comunicación con el servidor de claves: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "no hay servidores de claves conocidos (use opción --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" "no se pueden realizar llamadas a un servidor externo de claves tal y\n" "como está compilado el programa\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "no hay un manejador para ese esquema de servidor de claves `%s'\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" "la acción `%s' no es posible con este esquema de servidor de claves `%s'\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "gpgkeys_%s no permite usar la versión %d del manejador\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "agotado el tiempo de espera para el servidor de claves\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "error interno del servidor de claves\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" no es un identificador de clave válido: omitido\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "ATENCIÓN: no se puede renovar la clave %s a través de %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "renovando 1 clave de %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "renovando %d claves desde %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "ATENCIÓN: imposible obtener URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "ATENCIÓN: imposible analizar URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "tamaño anormal para una clave de sesión cifrada (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s clave de sesión cifrada\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "contraseña generada con algoritmo de resumen desconocido %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "la clave pública es %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "datos cifrados con la clave pública: DEK correcta\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "cifrado con clave %2$s de %1$u bits, ID %3$s, creada el %4$s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "cifrado con clave %s, ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "descifrado de la clave pública fallido: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "cifrado con %lu frases contraseña\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "cifrado con 1 contraseña\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "suponiendo %s datos cifrados\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "cifrado IDEA no disponible, confiadamente intentamos usar %s en su lugar\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "descifrado correcto\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "ATENCIÓN: la integridad del mensaje no está protegida\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ATENCIÓN: ¡el mensaje cifrado ha sido manipulado!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "descifrado fallido: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: el remitente solicitó \"sólo-para-tus-ojos\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "nombre fichero original='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "ATENCIÓN: se observan varios textos en claro\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revocación independiente - use \"gpg --import\" para aplicarla\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "ninguna firma encontrada\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "suprimida la verificación de la firma\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "no se puede trabajar con firmas múltiples\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Firmado el %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " usando %s clave %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Firmado el %s usando clave %s ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Clave disponible en: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "Firma INCORRECTA de \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Firma caducada de \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Firma correcta de \"%s\"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[incierto]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " alias \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Firma caducada en %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "La firma caduca el %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "firma %s, algoritmo de resumen %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binaria" #: g10/mainproc.c:1947 msgid "textmode" msgstr "modo texto" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "desconocido" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" "ATENCIÓN: no es una firma separada. ¡El fichero «%s» NO se ha verificado!\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Imposible comprobar la firma: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "no es una firma separada\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "ATENCIÓN: detectadas múltiples firmas. Sólo la primera se comprueba.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "firma independiente de clase 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "firma al viejo estilo (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "paquete raíz inválido detectado en proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "no se pueden desactivar los volcados de memoria: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat de `%s' falló en %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) falló en %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "ATENCIÓN: usando un algoritmo experimental %s de clave pública\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "ATENCIÓN: las claves firmadas+cifradas con Elgamal están desfasadas\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "ATENCIÓN: usando algoritmo %s de cifrado experimental\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "ATENCIÓN: usando algoritmo %s de resumen experimental\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "ATENCIÓN: el algoritmo de resumen %s está desfasado\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "vea %s para más información\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "NOTA: Esta funcionalidad no está disponible en %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: opción desfasada \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "ATENCIÓN: \"%s\" es una opción desfasada\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "use \"%s%s\" en su lugar\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "ATENCIÓN: \"%s\" es una orden desfasada - no utilizar\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Sin comprimir" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "sin_comprimir|ninguno" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "este mensaje podría no ser utilizable por %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "opción ambigua `%s'\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "opción desconocida `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Clase de firma desconocida `%s'\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "El fichero `%s' ya existe. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "¿Sobreescribir? (s/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: sufijo desconocido\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Introduzca nuevo nombre de fichero" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "escribiendo en stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "asumiendo que hay datos firmados en `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "creado un nuevo fichero de configuración `%s'\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "ATENCIÓN: aún no se han activado en esta ejecución las opciones en `%s'\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "directorio `%s' creado\n" #: g10/parse-packet.c:149 #, 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:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "ATENCIÓN: clave de sesión cifrada simétricamente potencialmente insegura\n" #: g10/parse-packet.c:1227 #, 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:319 msgid "gpg-agent is not available in this session\n" msgstr "el agente gpg no esta disponible en esta sesión\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "variable de entorno GPG_AGENT_INFO malformada\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "el programa no permite usar el protocolo agente gpg versión %d\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "no se puede conectar con `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problema con el agente - desactivando el uso del agente\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr "(identificador de clave primaria %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Necesita una contraseña para desbloquear la clave secreta\n" "del usuario: \"%.*s\"\n" "%u bits, clave %s, ID %s, creada el %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Repita contraseña\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Introduzca contraseña\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "cancelado por el usuario\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "imposible pedir contraseña en modo de proceso por lotes\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Introduzca contraseña: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Necesita una contraseña para desbloquear la clave secreta\n" "del usuario: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "clave %2$s de %1$u bits, ID %3$s, creada el %4$s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (subclave en clave principal ID %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repita contraseña: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Escoja una imagen para usar como retrato. La imagen debe ser un\n" "fichero JPEG. Recuerde que la imagen se almacena en su clave pública.\n" "Si usa una foto muy grande, ¡su clave será también muy grande!\n" "Una imagen cercana a 240x288 tiene un tamaño adecuado.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Introduzca nombre del fichero JPEG para el retrato: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "Imposible abrir fichero JPEG `%s': %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "¡Este JPEG es realmente grande (%d bytes)!\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "¿Seguro que quiere usarlo? (s/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "`%s' no es un fichero JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "¿Es correcta la foto? (s/N/a) " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "no se ha establecido un visor de fotos\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "¡imposible mostrar el retrato!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "No se dio ninguna razón" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "La clave ha sido reemplazada." #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "La clave ha sido comprometida" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "La clave ya no está en uso" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "El identificador de usuario ya no es válido" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "razón para la revocación: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "comentario a la revocación: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "No hay confianza definida para:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " alias \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "¿Qué seguridad tiene de que esta clave pertenece realmente al usuario\n" "que se nombra?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = No lo sé o prefiero no decirlo\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = NO tengo confianza\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = confío absolutamente\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = volver al menú principal\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = saltar esta clave\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = salir\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "El mínimo nivel de confianza para esta clave es: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "¿Su decisión? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "¿De verdad quiere asignar absoluta confianza a esta clave? (s/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que llevan a una clave de confianza absoluta:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: No hay seguridad de que esta clave pertenezca realmente\n" "al usuario que se nombra\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Hay poca seguridad de que esta clave pertenezca realmente\n" "al usuario que se nombra\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Esta clave probablemente pertenece al usuario que se nombra\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Esta clave nos pertenece\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "No es seguro que la clave pertenezca a la persona que se nombra en el\n" "identificador de usuario. Si *realmente* sabe lo que está haciendo,\n" "puede contestar sí a la siguiente pregunta.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "¿Usar esta clave de todas formas? (s/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "ATENCIÓN: ¡Usando una clave no fiable!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "ATENCIÓN: la clave puede estar revocada (falta clave de revocación)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "ATENCIÓN: ¡El revocador asignado ha revocado esta clave!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ATENCIÓN: ¡El propietario ha revocado esta clave!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Esto puede significar que la firma está falsificada.\n" #: g10/pkclist.c:530 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:535 msgid "Note: This key has been disabled.\n" msgstr "Nota: Esta clave está desactivada.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Nota: la dirección del firmante verificado es `%s'\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Nota: la dirección del firmante `%s' no coincide con la entrada DNS\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "nivel de confianza puesto a TOTAL (información PKA válida)\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "nivel de confianza puesto a NUNCA (información PKA inválida)\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Nota: ¡Esta clave ha caducado!\n" #: g10/pkclist.c:604 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:606 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:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "ATENCIÓN: ¡Esta clave NO es de confianza!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " La firma es probablemente una FALSIFICACIÓN.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ATENCIÓN: ¡Esta clave no está certificada con firmas de suficiente " "confianza!\n" #: g10/pkclist.c:625 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:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: omitido: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: omitida: clave pública ya presente\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "No ha especificado un identificador de usuario (puede usar \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Destinatarios actuales:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Introduzca identificador de usuario. Acabe con una línea vacía: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "identificador de usuario inexistente.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "omitida: clave pública ya designada como destinataria por defecto\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Clave pública desactivada.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "omitida: clave pública ya establecida\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "desconocido el destinatario predefinido \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: omitida: clave pública desactivada\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "no hay direcciones válidas\n" #: g10/plaintext.c:102 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:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "error creando `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Firma separada.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Introduzca el nombre del fichero de datos: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "leyendo stdin...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "no hay datos firmados\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "imposible abrir datos firmados `%s'\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "destinatario anónimo; probando clave secreta %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "de acuerdo, somos el destinatario anónimo.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "la antigua codificación de la DEK no puede usarse\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "algoritmo de cifrado %d%s desconocido o desactivado\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "NOTA: el cifrado %s no aparece en las preferencias del receptor\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTA: clave secreta %s caducó el %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "NOTA: la clave ha sido revocada" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "construcción del paquete fallida: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "clave %s: sin identificador de usuario\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Será revocado por:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Este es una clave de revocación confidencial)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "¿Crear un certificado de revocación para esta clave? (s/N)" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "se fuerza salida con armadura ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet falló: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Certificado de revocación creado.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "no se encuetran claves de revocación para \"%s\"\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "clave secreta \"%s\" no encontrada: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "no existe la clave pública correspondiente: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "¡la clave pública y la secreta no se corresponden!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "¿Crear un certificado de revocación para esta clave? (s/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "algoritmo de protección desconocido\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "NOTA: ¡Esta clave no está protegida!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Certificado de revocación creado.\n" "\n" "Consérvelo en un medio que pueda esconder; si alguien consigue\n" "acceso a este certificado podrá usarlo para inutilizar su clave.\n" "Se recomienda imprimir este certificado y guardarlo en otro lugar, por\n" "si acaso su soporte resulta imposible de leer. Pero cuidado: ¡el sistema\n" "de impresión de su máquina podría almacenar los datos y hacerlos accesibles\n" "a otras personas!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Elija una razón para la revocación:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Cancelar" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Aquí seguramente desee elegir %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Introduzca una descripción opcional; finalice con una línea vacía:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Razón para la revocación: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(No se dio descripción)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "¿Es correcto? (s/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "las partes de la clave privada no están disponibles\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "no se admite el algoritmo de protección %d%s\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "no se admite el resumen protector %d\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "contraseña incorrecta; inténtelo de nuevo." #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ... \n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "ATENCIÓN: detectada clave débil - cambie la contraseña.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "generando la suma de comprobación de 16 bits (desfasada) para \n" "proteger la clave secreta.\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "creada clave débil - reintentando\n" #: g10/seskey.c:56 #, 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" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA necesita un resumen cuya longitud sea múltiplo de 8 bits\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "la clave DSA %s usa un resumen no seguro (%u bits)\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "la clave DSA %s requiere un resumen de al menos %u bits\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "ATENCIÓN: conflicto con el resumen de la firma del mensaje\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "ATENCIÓN: la subclave firmante %s no tiene certificado cruzado\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "ATENCIÓN: la subclave firmante %s tiene un certificado cruzado inválido\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "la clave pública %s es %lu segundos más nueva que la firma\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "la clave pública %s es %lu segundos más nueva que la firma\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "la clave %s se creó %lu segundo en el futuro (viaje en el tiempo\n" "o problemas con el reloj)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "la clave %s se creó %lu segundos en el futuro (salto en el tiempo\n" "o problemas con el reloj)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTA: clave de la firma %s caducada el %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "firma %s, algoritmo de resumen %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "asumiendo firma incorrecta de la clave %s por un bit imprescindible " "desconocido\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "clave %s: no hay subclave para la firma de revocación de subclave\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "clave %s: no hay subclave para firma de subclave de enlace\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "ATENCIÓN: imposible expandir el %% de la url de política . Se usa sin " "expandir.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "ATENCIÓN: imposible expandir el %% de la URL de política (demasiado larga).\n" "Se usa sin expandir.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "ATENCIÓN: imposible expandir el %% de la URL del servidor de claves\n" "preferido. Se usa sin expandir.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "la comprobación de la firma creada falló: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s firma de: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "sólo puede hacer firmas separadas con claves tipo PGP 2.x estando enmodo --" "pgp2\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "ATENCIÓN: forzar el algoritmo de resumen %s (%d) va en contra de las\n" "preferencias del destinatario\n" #: g10/sign.c:960 msgid "signing:" msgstr "firmando:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "sólo puede firmar en claro con claves PGP 2.x estando en modo --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "se usará un cifrado %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "clave no marcada como no segura - no puede usarse con el pseudo RNG\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "\"%s\" omitido: duplicado\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "omitido \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "omitido: clave secreta ya presente\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "¡esta es una clave ElGamal generada por PGP que NO es segura para firmar!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "registro de confianza %lu, tipo %d: fallo escritura: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Lista de valores de confianza asignados, creada %s\n" "# (Use \"gpg --import-ownertrust\" para restablecerlos)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "error en `%s': %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "línea demasiado larga" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "falta una coma" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "huella digital inválida" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "falta el valor de confianza en el propietario" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "error econtrando registro de confianza en `%s': %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "error de lectura `%s': %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de datos de confianza: sincronización fallida: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "no se puede crear el bloqueo para `%s'\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "no se puede bloquear `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, 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:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "registro base de datos de confianza %lu: escritura fallida (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transacción en la base de datos de confianza demasiado grande\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "no se puede acceder a `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: ¡el directorio no existe!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: fallo al crear el registro de versión: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: se ha creado base de datos de confianza inválida\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: se ha creado base de datos de confianza\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "NOTA: no se puede escribir base de datos de confianza\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: base de datos de confianza inválida\n" #: g10/tdbio.c:648 #, 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:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: error actualizando el registro de versión: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: error leyendo registro de versión: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: error escribiendo registro de versión: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de datos de confianza: fallo lseek: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de datos de confianza: lectura fallida (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: no es un fichero de base de datos de confianza\n" #: g10/tdbio.c:1221 #, 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:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versión inválida del fichero %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: error leyendo registro libre: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: error escribiendo registro de directorio: %s\n" #: g10/tdbio.c:1430 #, 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:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: fallo al añadir un registro: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Error: La base de datos de confianza está corrupta\n" #: g10/textfilter.c:147 #, 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:246 #, c-format msgid "input line longer than %d characters\n" msgstr "línea introducida de longitud superior a %d caracteres\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "'%s' no es un identificador largo de clave válido\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "clave %s: aceptada como clave fiable\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "la clave %s aparece más de una vez en la base de datos de confianza\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "clave %s: clave fiable sin clave pública - omitida\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "clave %s marcada como de confianza absoluta\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "registro de confianza %lu, tipo solicitado %d: fallo lectura: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "el registro de confianza %lu no es del tipo solicitado %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" "Puede intentar recrear la base de datos de confianza usando las órdenes:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Si eso no funciona, consulte el manual\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "imposible usar modelo de confianza (%d) - asumiendo el modelo %s\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "usando %s como modelo de confianza\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "13 no apto para supersticiosos" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ revocada ]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ caducada ]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[desconocida]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[no definida]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[ dudosa ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ total ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ absoluta ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "no definido" #: g10/trustdb.c:554 msgid "never" msgstr "nunca" #: g10/trustdb.c:555 msgid "marginal" msgstr "dudosa" #: g10/trustdb.c:556 msgid "full" msgstr "total" #: g10/trustdb.c:557 msgid "ultimate" msgstr "absoluta" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "no es necesaria una comprobación de la base de datos de confianza\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "siguiente comprobación de base de datos de confianza el: %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" "no es necesaria una comprobación de la base de datos de confianza\n" "con el modelo de confianza `%s'\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" "no es necesario comprobar la base de datos de confianza\n" "con el modelo `%s'\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "clave pública %s no encontrada: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "haga un --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "comprobando base de datos de confianza\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d claves procesadas (%d validaciones superadas)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "no se encontraron claves absolutamente fiables\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "clave pública de la clave absolutamente fiable %s no encontrada\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" "%d dudosa(s) necesaria(s), %d completa(s) necesaria(s),\n" "modelo de confianza %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "nivel: %d validez: %3d firmada: %3d confianza: %d-, %dq, %dn, %dm, %df, " "%du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "no se puede actualizar el registro de la versión de la base de datos\n" "de confianza: fallo de escritura: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "la firma no se pudo verificar.\n" "Recuerde que el fichero de firma (.sig o .asc)\n" "debería ser el primero que se da en la línea de órdenes.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "la línea %u es demasiado larga o no tiene avance de línea (LF)\n" #: util/errors.c:53 msgid "general error" msgstr "error general" #: util/errors.c:54 msgid "unknown packet type" msgstr "tipo de paquete desconocido" #: util/errors.c:55 msgid "unknown version" msgstr "versión desconocida" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "algoritmo de clave pública desconocido" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "algoritmo desconocido de resumen de mensaje" #: util/errors.c:58 msgid "bad public key" msgstr "clave pública incorrecta" #: util/errors.c:59 msgid "bad secret key" msgstr "clave secreta incorrecta" #: util/errors.c:60 msgid "bad signature" msgstr "firma incorrecta" #: util/errors.c:61 msgid "checksum error" msgstr "error en la suma de comprobación" # ¿Por qué no frase de paso? # Porque todo el mundo sabe lo que es una contraseña # y una "frase de paso" no. Soy consciente de que se # traduce igual password y passphrase pero el contexto # permite saber de lo que se está hablando. # No sé, no sé. # ¿Por qué los ingleses entonces sí que saben lo que es un "passphrase"? # ¿Es que son más listos? :-) # #: util/errors.c:62 msgid "bad passphrase" msgstr "contraseña incorrecta" #: util/errors.c:63 msgid "public key not found" msgstr "clave pública no encontrada" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "algoritmo de cifrado desconocido" # ¿y llavero? # Hombre... las claves son parecidas a las llaves pero no lo mismo # toda la literatura en castellano usa "anillos de claves" si un # programa nos habla del llavero ¿no puedo abrir el llavero? nos # miraremos en el bolsillo bastante desconcertados. No creo que se # trate de establecer una nomenclatura propia. # A lo mejor toda esa literatura está producida por gente que no sabía # cómo se dice llavero en inglés... # Si los ingleses dicen llavero en su idioma ¿por qué no vamos a poder # nosotros decir lo mismo en el nuestro? #: util/errors.c:65 msgid "can't open the keyring" msgstr "no se puede abrir el almacén de claves" #: util/errors.c:66 msgid "invalid packet" msgstr "paquete inválido" #: util/errors.c:67 msgid "invalid armor" msgstr "armadura inválida" #: util/errors.c:68 msgid "no such user id" msgstr "no existe el identificador de usuario" #: util/errors.c:69 msgid "secret key not available" msgstr "clave secreta no disponible" #: util/errors.c:70 msgid "wrong secret key used" msgstr "clave secreta incorrecta" #: util/errors.c:71 msgid "not supported" msgstr "no disponible" #: util/errors.c:72 msgid "bad key" msgstr "clave incorrecta" #: util/errors.c:73 msgid "file read error" msgstr "error de lectura" #: util/errors.c:74 msgid "file write error" msgstr "error de escritura" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "algoritmo de compresión desconocido" #: util/errors.c:76 msgid "file open error" msgstr "error al abrir fichero" #: util/errors.c:77 msgid "file create error" msgstr "error al crear fichero" #: util/errors.c:78 msgid "invalid passphrase" msgstr "contraseña incorrecta" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritmo de clave pública no implementado" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algoritmo de cifrado no implementado" #: util/errors.c:81 msgid "unknown signature class" msgstr "clase de firma desconocida" #: util/errors.c:82 msgid "trust database error" msgstr "error en la base de datos de confianza" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI incorrecto" #: util/errors.c:84 msgid "resource limit" msgstr "límite de recurso" #: util/errors.c:85 msgid "invalid keyring" msgstr "almacén inválido" #: util/errors.c:86 msgid "bad certificate" msgstr "certificado incorrecto" #: util/errors.c:87 msgid "malformed user id" msgstr "identificador de usuario mal formado" #: util/errors.c:88 msgid "file close error" msgstr "error al cerrar fichero" #: util/errors.c:89 msgid "file rename error" msgstr "error al renombrar fichero" #: util/errors.c:90 msgid "file delete error" msgstr "error al borrar fichero" #: util/errors.c:91 msgid "unexpected data" msgstr "datos inesperados" # o tal vez "en el sello..." # Creo que es mejor "con el sello de fecha", no es un conflicto # del sello en si mismo sino en relación con el mensaje. # Ok. #: util/errors.c:92 msgid "timestamp conflict" msgstr "conflicto con la marca de tiempo" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "algoritmo de clave pública no utilizable" #: util/errors.c:94 msgid "file exists" msgstr "el fichero ya existe" #: util/errors.c:95 msgid "weak key" msgstr "clave débil" #: util/errors.c:96 msgid "invalid argument" msgstr "argumento inválido" #: util/errors.c:97 msgid "bad URI" msgstr "URI incorrecto" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI no admitido" #: util/errors.c:99 msgid "network error" msgstr "error de red" #: util/errors.c:101 msgid "not encrypted" msgstr "no cifrado" #: util/errors.c:102 msgid "not processed" msgstr "no procesado" #: util/errors.c:104 msgid "unusable public key" msgstr "clave pública inutilizable" #: util/errors.c:105 msgid "unusable secret key" msgstr "clave secreta inutilizable" #: util/errors.c:106 msgid "keyserver error" msgstr "error del servidor de claves" #: util/errors.c:107 msgid "canceled" msgstr "cancelado" #: util/errors.c:108 msgid "no card" msgstr "no hay tarjeta" #: util/errors.c:109 msgid "no data" msgstr "no hay datos" #: util/logger.c:183 msgid "ERROR: " msgstr "ERROR: " #: util/logger.c:186 msgid "WARNING: " msgstr "ATENCIÓN: " # bicho :-) # ¿Error simplemente? # Uf, preferiría bug, si leo "error" voy a pensar en otra cosa distinta... #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... esto es un error (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "ha encontrado un error... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "sí" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "sS" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "fin" #: util/miscutil.c:443 msgid "qQ" msgstr "fF" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "vale|Vale" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancelar|Cancelar" #: util/miscutil.c:479 msgid "oO" msgstr "vV" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "ATENCIÓN: ¡se está usando memoria no segura!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "para más información vea http://www.gnupg.org/documentation/faqs.html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "operación imposible sin inicializar la memoria segura\n" #: util/secmem.c:360 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" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "AVISO: propiedad insegura de la extensión `%s'\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "AVISO: permisos inseguros de la extensión `%s'\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "AVISO: propiedad insegura del directorio contenedor de la extensión `%s'\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "AVISO: permisos inseguros del directorio contenedor de la extensión `%s'\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "no se carga el cifrado de ampliación `%s' por permisos inseguros\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "el plugin para el cifrado IDEA no está presente\n" #~ msgid "Command> " #~ msgstr "Orden> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "El par de claves DSA tendrá %u bits.\n" #~ 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" #~ "\"gpg --fix-trust-db\".\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|PIN Administrador" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "no uede poner datos de notación en claves v3 (estilo PGP 2.x)\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "no se puede elegir una clave tipo PGP 2.x como revocador designado\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "no puede poner URL de política en firmas v3 (estilo PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ "no puede poner URL de política en firmas de claves v3 (estilo PGP 2.x)\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA necesita un algoritmo de hash de 160 bits.\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "por favor vea http://www.gnupg.org/why-not-idea.html para más " #~ "información\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "un nombre de notación debe tener sólo caracteres imprimibles o espacios, " #~ "y acabar con un '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "un nombre de notación de usuario debe contener el caracter '@'\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "un nombre de notación de usuario debe contener el caracter '@'\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "un valor de notación no debe usar ningún caracter de control\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "ATENCIÓN: encontrados datos de notación inválidos\n" #~ msgid "not human readable" #~ msgstr "ilegible" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "lee opciones del fichero" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "lee opciones del fichero" #~ msgid "expired: %s)" #~ msgstr "caducó: %s)" #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "clave %s: firma caducada con la clave %s - omitida\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "no se puede ejecutar el programa `%s': %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "No hay clave secreta para tal usuario\n" #~ msgid "error getting serial number: %s\n" #~ msgstr "error obteniendo el número de serie: %s\n" #~ msgid "length of RSA modulus is not %d\n" #~ msgstr "la longitud del módulo RSA no es %d\n" #~ msgid "length of an RSA prime is not %d\n" #~ msgstr "la longitud del primo RSA no es %d\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "frase de paso mala o algoritmo de cifrado desconocido (%d)\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "no puedo establecer pid para el agente\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "no puedo conseguir el FD de lectura para el agente\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "no puedo conseguir el FD de escritura para el agente\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "problema de comunicación con el agente gpg\n" #~ msgid "passphrase too long\n" #~ msgstr "frase contraseña demasiado larga\n" #~ msgid "invalid response from agent\n" #~ msgstr "respuesta del agente inválida\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "problema con el agente: el agente devuelve 0x%lx\n" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "el algoritmo de resumen `%s' es de sólo lectura en esta versión\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "AVISO: el resumen `%s' no es parte de OpenPGP. ¡Úselo bajo su " #~ "responsabilidad!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[ficheros]|cifra ficheros" #~ msgid "store only" #~ msgstr "sólo almacenar" #~ msgid "|[files]|decrypt files" #~ msgstr "|[ficheros]|descifra ficheros" #~ msgid "sign a key non-revocably" #~ msgstr "firma la clave no revocablemente" #~ msgid "sign a key locally and non-revocably" #~ msgstr "firma la clave localmente y no revocablemente" #~ msgid "list only the sequence of packets" #~ msgstr "lista sólo la secuencia de paquetes" #~ msgid "export the ownertrust values" #~ msgstr "exporta los valores de confianza" #~ msgid "unattended trust database update" #~ msgstr "actualiza la base de datos de confianza" #~ msgid "fix a corrupted trust database" #~ msgstr "arregla una base de datos de confianza dañada" #~ msgid "De-Armor a file or stdin" #~ msgstr "quita la armadura de un fichero o de la entrada estándar" #~ msgid "En-Armor a file or stdin" #~ msgstr "crea la armadura a un fichero o a la entrada estándar" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NOMBRE|usa NOMBRE como destinatario por defecto" #~ msgid "use the default key as default recipient" #~ msgstr "usa la clave por defecto como destinatario" #~ msgid "don't use the terminal at all" #~ msgstr "no usa la terminal en absoluto" #~ msgid "force v3 signatures" #~ msgstr "fuerza firmas v3" #~ msgid "do not force v3 signatures" #~ msgstr "no fuerza firmas v3" #~ msgid "force v4 key signatures" #~ msgstr "fuerza firmas v4" #~ msgid "do not force v4 key signatures" #~ msgstr "no fuerza firmas v4" #~ msgid "always use a MDC for encryption" #~ msgstr "siempre usa un MDC para cifrar" #~ msgid "never use a MDC for encryption" #~ msgstr "nunca usa un MDC para cifrar" # usa # Vale. #~ msgid "use the gpg-agent" #~ msgstr "usa el agente gpg" #~ msgid "batch mode: never ask" #~ msgstr "proceso por lotes: nunca preguntar" # assume -> suponer, no asumir # No estoy seguro. El diccionario Collins en la acepción b) de asumir # dice "b) (suponer) to assume, suppose..." # Además una de las acepciones de asumir es "aceptar algo" y suponer # viene a ser asumir una idea como propia. Suponer "sí" en casi todas las # preguntas no me acaba de gustar. #~ msgid "assume yes on most questions" #~ msgstr "asume \"sí\" en casi todas las preguntas" #~ msgid "assume no on most questions" #~ msgstr "asume \"no\" en casi todas las preguntas" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "añade este anillo a la lista de anillos" #~ msgid "add this secret keyring to the list" #~ msgstr "añade este anillo secreto a la lista" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NOMBRE|usa NOMBRE como clave secreta por defecto" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|SERVIDOR|usa este servidor de claves" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NOMBRE|usa el juego de caracteres NOMBRE" #~ msgid "|[file]|write status info to file" #~ msgstr "|[fichero]|escribe información de estado en el fichero" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|ID-CLAVE|confía plenamente en esta clave" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|FICHERO|carga módulo de extensiones FICHERO" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emula el modo descrito en la RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "todas las opciones de paquete, cifrado y resumen tipo OpenPGP" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "todas las opciones de paquete, cifrado y resumen tipo PGP 2.x" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|usa modo de contraseña N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "" #~ "|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE para las contraseñas" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NOMBRE|usa el algoritmo de cifrado NOMBRE para las contraseñas" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NOMBRE|usa el algoritmo de cifrado NOMBRE" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NOMBRE|usa algoritmo de resumen de mensaje NOMBRE" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|usa el algoritmo de compresión N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "elimina campo keyid de los paquetes cifrados" #~ msgid "Show Photo IDs" #~ msgstr "Muestra IDs fotográficos" #~ msgid "Don't show Photo IDs" #~ msgstr "No muestra IDs fotográficos" #~ msgid "Set command line to view Photo IDs" #~ msgstr "Ajusta linea de comandos para ver IDs fotográficos" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "" #~ "el algoritmo de compresión `%s' es de sólo lectura en esta versión\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "el algoritmo de compresión debe estar en el rango %d-%d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key id-usuario" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key id-usuario" #~ msgid "can't open %s: %s\n" #~ msgstr "no se puede abrir `%s': %s\n" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "clave %08lX: ¡esta clave ha sido revocada!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "clave %08lX: ¡esta subclave ha sido revocada!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: clave caducada\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: ¡Esta clave NO es de confianza!\n" #~ 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 \n" #~ "proprietario pero se acepta igualmente\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "la preferencia %c%lu no es válida\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (firmar y cifrar)\n" #~ 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" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA sólo permite tamaños desde 512 a 1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "" #~ "tamaño de clave insuficiente; 1024 es el mínimo permitido para RSA.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "tamaño insuficiente; 768 es el valor mínimo permitido\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "tamaño excesivo; %d es el máximo valor permitido.\n" #~ 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 cálculo es REALMENTE largo!\n" #~ msgid "Are you sure that you want this keysize? " #~ msgstr "¿Seguro que quiere una clave de este tamaño? " #~ 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\n" #~ "teclado también son vulnerables a un ataque!\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: no se puede abrir: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: ATENCIÓN: fichero vacío\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "clave %08lX: no es conforme a rfc2440 - omitida\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "NOTA: detectada clave primaria Elgamal - puede llevar algo de tiempo " #~ "importarla\n" #~ msgid " (default)" #~ msgstr "(por defecto)" #~ msgid "Really sign? " #~ msgstr "¿Firmar de verdad? " #~ msgid "q" #~ msgstr "s" #~ msgid "save" #~ msgstr "graba" #~ msgid "help" #~ msgstr "ayuda" #~ msgid "fpr" #~ msgstr "hdac" #~ msgid "list" #~ msgstr "lista" #~ msgid "l" #~ msgstr "l" #~ msgid "uid" #~ msgstr "idu" #~ msgid "key" #~ msgstr "clave" #~ msgid "select secondary key N" #~ msgstr "selecciona clave secundaria N" #~ msgid "check" #~ msgstr "comprueba" #~ msgid "list signatures" #~ msgstr "lista firmas" #~ msgid "sign the key" #~ msgstr "firma la clave" #~ msgid "s" #~ msgstr "s" #~ msgid "lsign" #~ msgstr "firmal" #~ msgid "nrsign" #~ msgstr "firmanr" #~ msgid "sign the key non-revocably" #~ msgstr "firma la clave irrevocablemente" #~ msgid "nrlsign" #~ msgstr "firmanrl" #~ msgid "sign the key locally and non-revocably" #~ msgstr "firma la clave local e irrevocablemente" #~ msgid "debug" #~ msgstr "depura" #~ msgid "adduid" #~ msgstr "añaidu" #~ msgid "addphoto" #~ msgstr "añadirfoto" #~ msgid "deluid" #~ msgstr "borridu" #~ msgid "delphoto" #~ msgstr "borfoto" #~ msgid "add a secondary key" #~ msgstr "añade una clave secundaria" #~ msgid "delkey" #~ msgstr "borrcla" #~ msgid "addrevoker" #~ msgstr "añarevoc" #~ msgid "delsig" #~ msgstr "borrfir" #~ msgid "delete signatures" #~ msgstr "borra firmas" #~ msgid "primary" #~ msgstr "primaria" #~ msgid "toggle" #~ msgstr "cambia" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "verpref" #~ msgid "setpref" #~ msgstr "estpref" #~ msgid "updpref" #~ msgstr "actpref" #~ msgid "passwd" #~ msgstr "contr" #~ msgid "trust" #~ msgstr "conf" #~ msgid "revsig" #~ msgstr "revfir" #~ msgid "revoke signatures" #~ msgstr "revoca firmas" #~ msgid "revuid" #~ msgstr "revidu" #~ msgid "revoke a user ID" #~ msgstr "revocar un identificador de usuario" #~ msgid "revkey" #~ msgstr "revcla" #~ msgid "showphoto" #~ msgstr "verfoto" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX creada: %s expira: %s" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! ¡esta subclave ha sido revocada! %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- se encontró una revocación falsificada\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? problema comprobando la revocación: %s\n" #~ msgid "" #~ "\"\n" #~ "locally signed with your key %08lX at %s\n" #~ msgstr "" #~ "\"\n" #~ "firmada localmente con su clave %08lX el %s\n" #~ msgid " signed by %08lX at %s%s%s\n" #~ msgstr " firmada por %08lX el %s%s%s\n" #~ msgid " signed by %08lX at %s%s\n" #~ msgstr " firmada por %08lX el %s%s\n" #~ msgid "Policy: " #~ msgstr "Política: " #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "¡No se deberían usar algoritmos experimentales!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "ese algoritmo de cifrado está desacreditado;¡por favor use uno más " #~ "estándar!\n" #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "no puede obtenerse la clave en el servidor: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "error enviando a `%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "envió correcto a `%s` (estado=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "falló el envio a `%s': status=%u\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "este servidor de clave no proporciona --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "no puede buscarse en el servidor: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "clave %08lX: clave ElGamal generada por PGP que NO es segura para " #~ "firmar!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "clave %08lX creada %lu segundos en el futuro (salto en el tiempo o\n" #~ "problemas con el reloj)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "clave %08lX creada %lu segundos en el futuro (salto en el tiempo o\n" #~ "problemas con el reloj)\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: no se puede abrir: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: no se puede crear bloqueo\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: no se puede crear bloqueo\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: no se puede crear: %s\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "clave %08lX marcada como de confianza absoluta\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "firma de clave Elgamal %08lX a %08lX descartada\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "firma de %08lX a la clave de firmado Elgamal %08lX descartada\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "comprobando en profundidad %d firmado=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/" #~ "%d\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: no se puede crear el directorio: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "Si quiere usar esta clave revocada de todos modos, conteste \"sí\"." #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Seleccione el algoritmo que usará.\n" #~ "\n" #~ "DSA (también conocido como DSS) es un algoritmo de firma digital que " #~ "sólo\n" #~ "puede usarse para firmas. Es el algoritmo sugerido porque la " #~ "verificación\n" #~ "de firmas DSA es mucho más rápida que la de firmas ElGamal.\n" #~ "\n" #~ "ElGamal es un algoritmo que puede ser usado para firma y cifrado. " #~ "OpenPGP\n" #~ "distingue entre dos tipos de estos algoritmos: sólo para cifrado y para\n" #~ "firma y cifrado. En realidad es lo mismo, pero se deben seleccionar " #~ "ciertos\n" #~ "parámetros de una forma particular para crear una clave segura para " #~ "firmas:\n" #~ "este programa lo hace así, pero otras implementaciones de OpenPGP no " #~ "tienen\n" #~ "por qué entender el tipo de firma y cifrado.\n" #~ "\n" #~ "La clave primaria debe ser una clave capaz de firmar, es por ello que la\n" #~ "opción de clave ElGamal sólo para cifrado no está disponible en este menú." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Aunque estas claves están definidas en RFC2440, no se aconseja su uso,\n" #~ "ya que no todos los programas pueden utilizarlas y las firmas creadas\n" #~ "con ellas son bastante grandes y lentas de verificar." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "hasta ahora procesadas %lu claves (%lu firmas)\n" #~ msgid "key incomplete\n" #~ msgstr "clave incompleta\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "clave %08lX incompleta\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "lo siento, no puede hacerse en modo de proceso por lotes\n" #~ msgid "can't open file: %s\n" #~ msgstr "no puede abrirse el fichero: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "error: falta ':'\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "error: no hay valor de confianza del propietario\n" #, fuzzy #~ msgid "quit|quit" #~ msgstr "salir" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (firmar y cifrar)\n" #~ msgid "" #~ "The use of this algorithm is only supported by GnuPG. You will not be\n" #~ "able to use this key to communicate with PGP users. This algorithm is " #~ "also\n" #~ "very slow, and may not be as secure as the other choices.\n" #~ msgstr "" #~ "El uso de este algoritmo sólo es posible con GnuPG. No será posible\n" #~ "comunicarse mediante esta clave con usuarios de PGP. Este algoritmo\n" #~ "es además muy lento, y podría no ser tan seguro como otros.\n" #~ msgid "Create anyway? " #~ msgstr "¿Crear de todas formas?" #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "detectado algoritmo simétrico inválido (%d)\n" #~ msgid "this keyserver is not fully HKP compatible\n" #~ msgstr "este servidor de claves no es totalmente compatible con HKP\n" #~ msgid "The use of this algorithm is deprecated - create anyway? " #~ msgstr "" #~ "El uso de este algoritmo está desaconsejado - ¿crear de todas formas?" #~ msgid "|NAME=VALUE|use this notation data" #~ msgstr "|NOMBRE=VALOR|usa estos datos de notación" #~ msgid "" #~ "the first character of a notation name must be a letter or an underscore\n" #~ msgstr "" #~ "El primer carácter de una notación debe ser una letra o un subrayado\n" #~ msgid "dots in a notation name must be surrounded by other characters\n" #~ msgstr "" #~ "los puntos en una notación deben estar rodeados por otros caracteres\n" #~ msgid "" #~ "WARNING: This key already has a photo ID.\n" #~ " Adding another photo ID may confuse some versions of PGP.\n" #~ msgstr "" #~ "AVISO: Esta clave ya tiene identificador fotográfico.\n" #~ " Añadir otro ID puede confundir a algunas versiones de PGP.\n" #~ msgid "You may only have one photo ID on a key.\n" #~ msgstr "Solo puede tener un ID fotográfico en una clave.\n" #~ msgid " Fingerprint:" #~ msgstr " Huella dactilar:" #~ msgid "you have to start GnuPG again, so it can read the new options file\n" #~ msgstr "reinicie GnuPG otra vez para que lea el nuevo fichero de opciones\n" #~ msgid "changing permission of `%s' failed: %s\n" #~ msgstr "al cambiar permisos de `%s' ocurrió el fallo: %s\n" #, fuzzy #~ msgid "Are you sure you still want to sign it?\n" #~ msgstr "¿Seguro que quiere una clave de este tamaño? " #, fuzzy #~ msgid " Are you sure you still want to sign it?\n" #~ msgstr "¿Seguro que quiere una clave de este tamaño? " #~ msgid "too many random bits requested; the limit is %d\n" #~ msgstr "se solicitan demasiados bits aleatorios; el límite es %d\n" #~ msgid "|[NAMES]|check the trust database" #~ msgstr "|[NOMBRES]|comprueba la base de datos de confianza" #~ msgid "--delete-secret-key user-id" #~ msgstr "--delete-secret-key id-usuario" #~ msgid "--delete-key user-id" #~ msgstr "--delete-key id-usuario" #~ msgid "--delete-secret-and-public-key user-id" #~ msgstr "--delete-secret-and-public-key id-usuario" #~ msgid "For info see http://www.gnupg.org" #~ msgstr "Información en http://www.gnupg.org" #~ msgid "sSmMqQ" #~ msgstr "iImMqQ" #~ 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" #~ 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" #~ msgid "" #~ "No certificates with undefined trust found.\n" #~ "\n" #~ msgstr "" #~ "No se ha encontrado ningún certificado sin valor de confianza.\n" #~ "\n" #~ msgid "" #~ "No trust values changed.\n" #~ "\n" #~ msgstr "" #~ "No se cambió ningún valor de confianza.\n" #~ "\n" #~ msgid "%08lX: no info to calculate a trust probability\n" #~ msgstr "" #~ "%08lX: no hay información para calcular la probabilidad de confianza\n" #~ msgid "skipped: public key already set with --encrypt-to\n" #~ msgstr "omitida: clave pública ya designada con --encrypt-to\n" #~ msgid "%s: error checking key: %s\n" #~ msgstr "%s: error comprobando la clave: %s\n" #~ msgid "Do you really want to create a sign and encrypt key? " #~ msgstr "¿De verdad quiere crear una clave de firma y cifrado? " #~ msgid "Do you really need such a large keysize? " #~ msgstr "¿De verdad necesita una clave tan grande? " #~ msgid "%s: user not found: %s\n" #~ msgstr "%s: usuario no encontrado: %s\n" #~ msgid "certificate read problem: %s\n" #~ msgstr "problema en la lectura del certificado: %s\n" #~ msgid "too many entries in unk cache - disabled\n" #~ msgstr "demasiados registros en la cache unk - anulada\n" #~ msgid "no default public keyring\n" #~ msgstr "no hay anillo público por defecto\n" #~ msgid "secret key %08lX not imported (use %s to allow for it)\n" #~ msgstr "clave secreta %08lX no importada (use %s para permitirlo)\n" #~ msgid "key %08lX: our copy has no self-signature\n" #~ msgstr "clave %08lX: nuestra copia no tiene autofirma\n" #~ msgid "%s: user not found\n" #~ msgstr "%s: usuario no encontrado\n" #~ msgid "assuming bad MDC due to an unknown critical bit\n" #~ msgstr "asumiendo MDC incorrecto debido a un bit crítico desconocido\n" #~ msgid "error reading dir record for LID %lu: %s\n" #~ msgstr "error leyendo registro de directorio del LID %lu: %s\n" #~ msgid "lid %lu: expected dir record, got type %d\n" #~ msgstr "lid %lu: esperaba registro directorio, encontrado tipo %d\n" #~ msgid "no primary key for LID %lu\n" #~ msgstr "no hay clave primaria para el LID %lu\n" #~ msgid "error reading primary key for LID %lu: %s\n" #~ msgstr "error leyendo clave primaria para el LID %lu: %s\n" #~ msgid "key %08lX: query record failed\n" #~ msgstr "clave %08lX: petición de registro fallida\n" #~ msgid "key %08lX: already in trusted key table\n" #~ msgstr "clave %08lX: ya está en la tabla de confianza\n" #~ msgid "NOTE: secret key %08lX is NOT protected.\n" #~ msgstr "NOTA: la clave secreta %08lX NO está protegida.\n" #~ msgid "key %08lX: secret and public key don't match\n" #~ msgstr "clave %08lX: las claves pública y secreta no se corresponden\n" #~ msgid "key %08lX.%lu: Good subkey binding\n" #~ msgstr "clave %08lX.%lu: unión de subclave válida\n" #~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" #~ msgstr "clave %08lX.%lu: unión de subclave inválida: %s\n" #~ msgid "key %08lX.%lu: Valid key revocation\n" #~ msgstr "clave %08lX.%lu: revocación de clave válida\n" #~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" #~ msgstr "clave %08lX.%lu: revocación de clave inválida: %s\n" #~ msgid "Good self-signature" #~ msgstr "Autofirma válida" #~ msgid "Invalid self-signature" #~ msgstr "Autofirma inválida" #~ msgid "Valid user ID revocation skipped due to a newer self signature" #~ msgstr "" #~ "Revocación válida de ID de usuario omitida, existe autofirma más reciente" #~ msgid "Valid user ID revocation" #~ msgstr "Revocación de ID de usuario válida" #~ msgid "Invalid user ID revocation" #~ msgstr "Revocación de ID de usuario inválida." #~ msgid "Valid certificate revocation" #~ msgstr "Revocación de certificado válida" #~ msgid "Good certificate" #~ msgstr "Certificado correcto" #~ msgid "Invalid certificate revocation" #~ msgstr "Certificado de revocación incorrecto" #~ msgid "Invalid certificate" #~ msgstr "Certificado incorrecto" #~ msgid "sig record %lu[%d] points to wrong record.\n" #~ msgstr "registro de firma %lu[%d] apunta al registro equivocado.\n" #~ msgid "duplicated certificate - deleted" #~ msgstr "certificado duplicado - eliminado" #~ msgid "tdbio_search_dir failed: %s\n" #~ msgstr "tdbio_search_dir fallida: %s\n" #~ msgid "lid ?: insert failed: %s\n" #~ msgstr "lid ?: inserción fallida: %s\n" #~ msgid "lid %lu: insert failed: %s\n" #~ msgstr "lid %lu: inserción fallida: %s\n" #~ msgid "lid %lu: inserted\n" #~ msgstr "lid %lu: insertada\n" #~ msgid "\t%lu keys with errors\n" #~ msgstr "\t%lu claves con errores\n" #~ msgid "\t%lu keys inserted\n" #~ msgstr "\t%lu claves insertadas\n" #~ msgid "lid %lu: dir record w/o key - skipped\n" #~ msgstr "lid %lu: registro de directiorio sin clave - omitido\n" #~ msgid "\t%lu due to new pubkeys\n" #~ msgstr "\t%lu debido a las nuevas claves públicas\n" # msgstr "clave %08lX: %d nuevas subclaves\n" #~ msgid "\t%lu keys skipped\n" #~ msgstr "\t%lu claves omitidas\n" #~ msgid "\t%lu keys updated\n" #~ msgstr "\t%lu claves actualizadas\n" #~ msgid "Ooops, no keys\n" #~ msgstr "Oh oh, no hay claves\n" #~ msgid "Ooops, no user IDs\n" #~ msgstr "Oh oh, no hay ningún ID de usuario\n" #~ msgid "check_trust: search dir record failed: %s\n" #~ msgstr "check_trust: búsqueda registro directorio fallida: %s\n" #~ msgid "key %08lX: insert trust record failed: %s\n" #~ msgstr "clave %08lX: inserción del registro de confianza fallida: %s\n" #~ msgid "key %08lX.%lu: inserted into trustdb\n" #~ msgstr "clave %08lX.%lu: incluida en la base de datos de confianza\n" #~ 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" #~ msgid "key %08lX.%lu: expired at %s\n" #~ msgstr "clave %08lX.%lu: caducada el %s\n" #~ msgid "key %08lX.%lu: trust check failed: %s\n" #~ msgstr "clave %08lX.%lu: comprobación de confianza fallida: %s\n" #~ msgid "problem finding '%s' in trustdb: %s\n" #~ msgstr "problema buscando '%s' en la tabla de confianza: %s\n" #~ msgid "user '%s' not in trustdb - inserting\n" #~ msgstr "usuario '%s' no está en la tabla de confianza - insertando\n" #~ msgid "failed to put '%s' into trustdb: %s\n" #~ msgstr "fallo al poner '%s' en la tabla de confianza: %s\n" #~ msgid "WARNING: can't yet handle long pref records\n" #~ msgstr "" #~ "ATENCÍON: todavía no puedo tratar registros de preferencias largos\n" #~ msgid "%s: can't create keyring: %s\n" #~ msgstr "%s: no se puede crear el anillo: %s\n" #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "No puede usarse clave RSA en esta versión\n" #~ msgid "No key for user ID\n" #~ msgstr "No hay clave para tal usuario\n" #~ msgid "no secret key for decryption available\n" #~ msgstr "clave secreta para descifrado no disponible\n" #~ 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" #~ msgid "set debugging flags" #~ msgstr "establece los parámetros de depuración" #~ msgid "enable full debugging" #~ msgstr "habilita depuración completa" #~ msgid "do not write comment packets" #~ msgstr "no escribe paquetes de comentario" #~ msgid "(default is 3)" #~ msgstr "(por defecto es 3)" #~ msgid " (%d) ElGamal in a v3 packet\n" #~ msgstr " (%d) ElGamal en un paquete v3\n" #~ 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" #, fuzzy #~ msgid "tdbio_search_sdir failed: %s\n" #~ msgstr "tdbio_search_dir fallida: %s\n" #~ msgid "print all message digests" #~ msgstr "imprime todos los resúmenes de mensaje" #~ 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: 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: can't get keyblock: %s\n" #~ msgstr "lid %lu: no puedo obtener el bloque de clave: %s\n" #~ msgid "Too many preference items" #~ msgstr "Demasiados ítems de preferencias" #~ 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: 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 "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" #, 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 "usage: gpgm [options] " #~ msgstr "uso: gpgm [opciones] " #~ msgid "chained sigrec %lu has a wrong owner\n" #~ msgstr "registro de firma encadenado %lu tiene el propietario equivocado\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 "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 "directory record w/o primary key\n" #~ msgstr "registro de directorio sin clave primaria\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 "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" gnupg-1.4.20/po/nl.gmo0000644000175000017500000045024312635457221011411 00000000000000(Pl-l?llmmnnno"o?o\oyo2o7o2p#4pDXp.pIp7q'Nqvq qqqqqr#r@rYrvr+r&r#r(r(sAsZszs(ssss$t9tOt&ftt,ttt! u+uAu\uwu uu uuuuvv&v@v]v*zv"v]vB&wiw/|w=w(w.x3Bx!vx(xxx'x y*y=yWysyy,y'yyz")zLzQzlzBz=z {"({%K{&q{!{%{"{#|''| O|p||||||(|$&}K}`}#t}}$}}}!~<~Y~ x~~&~%~ ~, 47lG^s'.A T'u"ׁ-(40]2H   !.LhA/ބ0\?1΅D-(0V.I*++'W χ93P4-'.щ$ . 8?F4:3Oi,~(8ԋ# &1(X&׌76--d%390&<WG@܎>+\=ƏΏޏ"1 A:M#ѐ /5JH5-~$'ђ8&25Y.5*!.A0p&,Ȕ +68I#"ƕ.H"($FEk1;yi8$3K`! :MgBޜ)%@fn.*x Ğ*!0؟' <1n+",ؠ/15"g,"2ڡ )(J s *ʢܢ $6Sl 5I"(5UFg 1ϥ%'GEE,or $8'>Tc/HNxEǪ, ":#]-+)۫&,'>Ѯ 2BKd+,3ٯ 1K(a#+"ڰ+") Lm?%);Xv.(ò } /00!Ikp!ζ%>SfojK@E-9AO{0˹/5,'b.3-,#!9[$w,(ɽ-&Tg7T q~*+* Cd}#$  ;6E%|72'r>1Y=I4H#g=?D)@n+1N I\I55&;\?B<HX-"H;?< B])C:.I>x2=<(@eFHU6$ -213Ie>K@:5{*7,0A0r4 2,:-6h5.h$*&1#25>h*Y=0M9A"{&!3>cZ%D,)5V2_ @ K V a lw  %"8[){&+5.GV k x. BE5c$ !8?X[(q" =Yw,'.%2>+q%CX5m ;<*\ *C:Y&.D-S <A(7M/l 1)@Wh,H- EQ%Z/0.&(3O  0!$>=c%#- 2S'r#;Y'u&&&Bi / ,/-"]9K%$,&Q$x#D#'*Rcu 1$-@4u $!#5LD`+/ 6 0Ct}/"&('%P%v$ ..Le2'2Zj/+$&>$e',, >3 r$,IJ_"#( L!m*-) W$c' ."+#)O#y-%65H/~"';40p"%/2M!a: !!(>+g8!4 0@q26)9;u&GH BX     # - M ] w        ? M e         '7 _ ~  .   ( 2 !8  Z { ,      $'E)Hr z%%,$Q2n3&"41Cu!%%Ci     #& ;)Eo$<!A6Z,;#M;-":"P-s+&*596o!&$ 1C2XIF3K^y01D#v#++,!C2e$*2.Et*  5Cc%&$@#Y&}3%*%Jp(-96U:,0 /9 i 7~ * . 7!;H!0!1!;!#"%;"a")p"3"6":# @#K#^#9q##5#-$".$Q$ q$$-$$$$ %5*%$`%%+%4%%&!'&CI&*&(&0&'2'.;'-j'*''+T(G(2(/(%+)FQ))1)#)*!*@*(]**-*/*,* &+"0+)S+}++ ++2+1%,W,`,#},#,!,",- -8-:W-I-A-".A. S.].p....... /2/R/!k//////0#0 90E0U0o00 0000 0 11216J1151#1 12'2=2N2*g2!2 22G23*3 =3^3{33-3,33454F4 b44444444D4F=5E5D5E6AU6766677=>7>|77$777<587r8F8899!9 [9|9 9$99#99#:7:*N:*y::7b<<E;=>>#?!?&?&@&9@&`@'@&@8@4A.DA,sACA;AG B=hB.B&B B#C#,C&PC&wC&C&C%C&D9DAHD@D>D+ E"6EYE&qE"E+E"E F'*F1RFFF7FF3G&DGkG*G G&G,G!(HJHaHHH'HHHI&I&;I&bI1I*IzInaJJAJA.K;pKIK>K75LBmL!LL5LM*MDM%cMMM3M6M$N$CN"hNNNNMNEOaO1xO<O@O@(P=iP5P-P0 Q7o` `A`:`8a3b8Bb{b1b bbEb:1cClc!c&ccd6d3Kd4dAd,d0#e3Te0eeee fTf4of'ff2f:g-WgBgMgQhDhh,hBhi $i 2i&?i;fi-iiiEiDj4djjj!j<j'k pZp;jp9ppYq0q3#r1Wrlr?r6sKs t!u&u$AuFfu(uuuuv2v+v!x*xCxcx+zx xxxbyyyy*y<y 0zzz,{/{{5|&}FF}=}K}~.7~,f~:~;~= 'HHp-5M*k*& C7Mm#)3Ё%&*Qj M<%!<҃+" N&o*:>e4مQʆq2%)X1c1;lj~NJ4FG{KË.&>%e07(1OH0e&Pw%̐ݐ$<4Eq=9A/\3@2@40u.ՓJ$:_y#$#6,+c( =ڗD]' 9F%[1ۚ 1*\z$aGQ=9K[S???/+o-<ɟ6S=آ" 467k5K٣&%&L2sť&˦.!%40Z1#( 5+"a,/1&*:#e@+٩&G,NtêJ?>eɬl/G;/ hP'kkMg,!6Nlx|kR@;M|TʲVJvm@/<pj`ܵ*=HhHDt?F?R;f`RVlVA 9OFAмIn\f˽h2`K@HI>ӿMC`f3 T?I?;@Z4!89 2GLz@8NGRml*u0'FZ@5"X.>I  +] * 5 @ K Va    .I/h5=3 D@%<5 r +k:$D_"0 '=Vn+; %F'c*!8+JDv45<&=c7+.Et4)C O o{Hv/s  8+H#h(F4)Lv9::4oV](=f.H(D@&&'>F+L )07>hL0%E;G+ %"C8f &\>D2G#2",UBA3;M c+*+84@'u;1; :G* J)1@[D7OsiF:$+_+&=i;$%(<#L"p&*<2" Un`83< E2S##Y#2}8 RSH(C328f9*!&)/Ym}2=34:o4,'Tj?-@6<w6),3Bv7/ &*.QLde2+'+.0G.x0(%(' P3q686%-\H6: 9E4.@A$<f?@-$0R5*NL382PV=2)W*i0/:80Di*.S C\ $ , M E@ 7 O  "( 9K j k \ * - : T 1t 0  % *-B*p,#2#CT)s    &B!X7z":# ;(E+n5/(G)q't  *E*31 e*p 4/7F<eEhjQ0=6+bCx(+(Js@DCZz "0'&*QDa#5CD[*z0;<3OQF):.d(/* 67J>#2+<D@A&1+;]9B M  R _ aq q E![!k!1!&!!$!""A";`"@"."- #<:#<w#D#0#W*$$%$ $#$1$8%%^%2~%(%=% &%$&J&Z&q&'&&"&&&''D'(\'&';'3'(3(8M()(%((&(!)+?)9k)E)R)M>*C**D*:/+2j+#+L+4,<C,I,Q,F-Ic-X-'.9..h.Aw.P.^ /Ti/// /W0/l0]0L0)G1+q1(11P142L2$c232J2-3(53M^3A3.3,4JJ49434;5(?5 h5<s5<5<5*686\75s7I767X*88?8P81&9$X9'}9.9-9>:BA:@::F:T ;;u;9;@;?,<Nl<K<=2=5B=&x="=&=E=4/>jd>o>f??3???@@--@8[@@@ @@ @"A7A&NAuAAA*AA B-BHB\B-rBBB/B C.#C3RC CCC#CEC.DRND?D(D E(E*HE+sE?E,E F FV)F"FF+F(FGE$G8jG0G*G@G @H/aH@H.H'I)I FI.gIIItIqJXJdJCGKEKEK8LCPL?LJLM';M>cM:M4M>N$QN3vNEN)NO5O+GOsO1O!O5OP=2P2pPXYxBN @W/G ^fXK23#,Vyj @wjfK=w8nAu;DK  FvT}dj9 buq_h}\9N@:d>]SRDEMar',9g%^ "swn8%b# Pr4eaC|=] &J"C64.DJ5gd)1p^7U|$H]9LGR]= i}c.a:z(-O<yAmQLxZY#[,!3[' p#$EL}z@ n)?6UBL#;Yj~+z~?"ive50,Q}xo?_Ntl7tj>SA4+y Uc36^ 2E>~erdh$|)6K yeuwD?g1sR.W{<OtBk7*XTX, \h2H!: qBm%&o"? 7;h -I)m>{ET P'kB-`<1rQ]/*T=zI`n<%obIO8;{ZqVFeMXs8+J^R|U/.NH*IF@):`4M[4[c$mt`d/5q\V {&F~["ohY  1'_\ vZ3MITn6-D~27k.(pO fC+*rugHvC!YMfWp :\mlaUi<!SJEz>0u-SAxocc+l l0iGsvZ|Q/ 08QxHW`a=5iZJ &wC_b10PLA$5! F( W  SO9V_K'Pfgl%k2qb3yV;tGR N (pP{*sG(&k Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg 1.4.6 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2014-11-24 12:23+0100 Last-Translator: Frans Spiesschaert Language-Team: Debian Dutch l10n Team Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Voer het gebruikers-ID in. Eindig met een lege regel: Er zijn niet genoeg willekeurige bytes beschikbaar. Doe wat ander werk om het OS de gelegenheid te geven meer entropie te verzamelen! (heb nog %d bytes nodig) Kies een afbeelding om als uw identiteitsfoto te gebruiken. De afbeelding moet een bestand in JPEG-formaat zijn. Onthoud dat de afbeelding opgeslagen wordt in uw publieke sleutel. Als u een erg grote afbeelding gebruikt, zal uw publieke sleutel ook erg groot worden, Een goed formaat voor de afbeelding is ongeveer 240x288. Ondersteunde algoritmes: U heeft een gebruikers-ID nodig om uw sleutel te identificeren; de software construeert het gebruikers-ID aan de hand van de werkelijke naam, de toelichting en het e-mailadres in het volgende formaat: "Heinrich Heine (De dichter) " ook bekend als "%s" met %s sleutel %s geïmporteerd: %lu onveranderd: %lu nieuwe subsleutels: %lu nieuwe gebruikers-ID's: %lu niet geïmporteerd: %lu zonder gebruikers-ID: %lu "%s": voorkeur voor versleutelingsalgoritme %s "%s": voorkeur voor compressiealgoritme %s "%s": voorkeur voor hashalgoritme %s (subsleutel bij hoofdsleutel-ID %s) Het is niet zeker dat de handtekening van de eigenaar is. De handtekening is waarschijnlijk een VERVALSING. Er is geen aanwijzing dat de handtekening van de eigenaar is. Dit kan betekenen dat de ondertekening vervalst is. algoritmes bij deze gebruikers-ID's: nieuwe handtekeningen: %lu "%s" Serienummer van de kaart = Vingerafdruk van de sleutel = Vingerafdruk van de subsleutel: gelezen geheime sleutels: %lu overgeslagen nieuwe sleutels: %lu opgeschoonde gebruikers-ID's: %lu Vingerafdruk van de subsleutel: opgeschoonde handtekeningen: %lu (%c) Klaar (%c) De bekwaamheid om te authenticeren activeren/deactiveren (%c) De bekwaamheid om te versleutelen activeren/deactiveren (%c) De bekwaamheid om te onderteken activeren/deactiveren (%d) DSA (eigen bekwaamheden instellen) (%d) DSA (alleen ondertekenen) (%d) DSA en Elgamal (%d) Elgamal (alleen versleutelen) (%d) RSA (alleen versleutelen) (%d) RSA (eigen bekwaamheden instellen) (%d) RSA (alleen ondertekenen) (%d) RSA en RSA (standaard) (0) Hierop geef ik geen antwoord.%s (1) Ik heb dit helemaal niet gecontroleerd.%s (1) Ondertekeningssleutel (2) Encryptiesleutel (2) Ik heb een oppervlakkige controle uitgevoerd.%s (3) Authenticatiesleutel (3) Ik heb dit zeer zorgvuldig gecontroleerd.%s nieuwe intrekkingen van sleutels: %lu %d = Ik vertrouw het NIET %d = Weet ik niet of zal ik niet zeggen %d = Ik vertrouw het volledig %d = Ik vertrouw het maar marginaal %d = Ik heb er het uiterste vertrouwen in Ondertekenen is niet mogelijk. ook bekend als "%s" m = terug naar het hoofdmenu s = stoppen o = sla deze sleutel over geïmporteerde geheime sleutels: %lu (hoofdsleutel-ID %s) (niet exporteerbaar) (niet intrekbaar) Vingerafdruk van de primaire sleutel: ongewijzigde geheime sleutels: %lu "%s" is geen sleutel-ID: overgeslagen "%s" was reeds lokaal ondertekend met sleutel %s "%s" was reeds ondertekend met sleutel %s # Lijst van toegekende betrouwbaarheidswaarden, aangemaakt op %s # (Gebruik "gpg --import-ownertrust" om ze te repareren) beheerder heeft %d resterende pogingen om de pincode in te geven voordat de kaart permanent vergrendeld wordt %d slechte ondertekeningen %d sleutels werden verwerkt (%d geldigheidstellers op nul gezet) %d marginale nodig, %d volledige nodig, betrouwbaarheidsmodel %s %d ondertekeningen werden niet gecontroleerd wegens fouten %d ondertekeningen werden niet gecontroleerd wegens ontbrekende sleutels %d gebruikers-ID's gevonden zonder geldige eigen handtekening %lu sleutels in de cache geladen (%lu ondertekeningen) %lu sleutels tot dusver in de cache geladen (%lu ondertekeningen) %lu sleutels verwerkt tot dusver %s ... %s ondersteunt verwerkingsroutine met versie %d niet %s werkt nog niet met %s %s versleutelde gegevens %s versleutelde sessiesleutel %s-versleuteling zal gebruikt worden %s is het nieuwe %s is het ongewijzigde %s-sleutels moeten tussen %u en %u bits lang zijn. %s sleutelgrootte moet vallen binnen het bereik %u-%u %s is zinloos in combinatie met %s! %s mag niet gebruikt worden met %s! %s handtekening, hashalgoritme %s %s. %s/%s versleuteld voor: "%s" %s/%s ondertekening van: "%s" %s: Er is een beperkte zekerheid dat deze sleutel van de genoemde persoon is %s: Er is geen zekerheid dat deze sleutel van de genoemde persoon is %s: map bestaat niet! %s: fout bij het lezen van vrije registratie: %s %s: fout bij het lezen van de registratie van de versie: %s %s: fout bij het bijwerken van de registratie van de versie: %s %s: fout bij het wegschrijven van de registratie van de map: %s %s: fout bij het maken van een registratie van de versie: %s %s: het toevoegen van een registratie is mislukt: %s %s: aanmaken van de hashtabel is mislukt: %s %s: het registreren van de versie is mislukt: %s%s: fout bij het op nul zetten van een registratie: %s %s: ongeldige bestandsversie %d %s: ongeldige betrouwbaarheidsdatabank (trustdb) %s: ongeldige betrouwbaarheidsdatabank (trustdb) aangemaakt %s: sleutelring aangemaakt %s: bestand is geen betrouwbaarheidsdatabank (trustdb) %s: overgeslagen: %s %s: overgeslagen: publieke sleutel is al aanwezig %s: overgeslagen: publieke sleutel is uitgeschakeld %s: betrouwbaarheidsdatabank (trustdb) aangemaakt %s: onbekend achtervoegsel %s: versieregistratie met nummer %lu %s:%d: verouderde optie "%s" %s:%d: lijst voor het automatisch opzoeken van sleutels is ongeldig %s:%d: ongeldige exportopties %s:%d: ongeldige importopties %s:%d: ongeldige sleutelserveropties %s:%d: ongeldige lijstopties %s:%d: ongeldige controleopties %u bit %s-sleutel, ID %s, aangemaakt op %s(Geen beschrijving gegeven) (Wellicht wilt u hier %d kiezen) (Dit is een gevoelige intekkingssleutel) (gevoelig)(tenzij u de sleutel via de vingerafdruk opgeeft) (misschien heeft u voor deze taak het verkeerde programma gebruikt) * Het commando `sign' (ondertekenen) kan worden voorafgegaan door een `l' (lsign) om een lokale ondertekening te maken, een `t' (tsign) om een handtekening van vertrouwen te plaatsen, een `nr' (nrsign) om een niet-intrekbare handtekening te zetten, of om het even welke combinatie hiervan (ltsign, tnrsign, enz.). --clearsign [bestandsnaam]--decrypt [bestandsnaam]--edit-key gebruikers-id [commando's]--encrypt [bestandsnaam]--lsign-key gebruikers-id--output werkt niet voor dit commando --sign --encrypt [bestandsnaam]--sign --symmetric [bestandsnaam]--sign [bestandsnaam]--sign-key gebruikers-id--store [bestandsnaam]--symmetric --encrypt [bestandsnaam]--symmetric --sign --encrypt [bestandsnaam]--symmetric [bestandsnaam]-k[v][v][v][c] [gebruikers-id] [sleutelring]... dit is een bug (%s:%d:%s) 1 slechte ondertekening 1 ondertekening werd niet gecontroleerd wegens een ontbrekende sleutel 1 ondertekening werd niet gecontroleerd wegens een fout 1 gebruikers-ID gevonden zonder geldige eigen handtekening 11 translator see trustdb.c:uid_trust_string_fixed: werd gelezen door vertaler@ (zie de man-pagina voor een complete lijst van alle commando's en opties) @ Voorbeelden: -se -r Bob [bestand] onderteken en versleutel voor gebruiker Bob --clearsign [bestand] maak een ondertekening in klare tekst --detach-sign [bestand] maak een ontkoppelde ondertekening --list-keys [namen] toon sleutels --fingerprint [namen] toon vingerafdrukken @ Opties: @Commando's: gedwongen uitvoer in ASCII-harnas. Beheerderscommando's zijn toegestaan Beheerderscommando's zijn niet toegestaan Enkel de beheerder kan dit commando uitvoeren Antwoord "yes" (of alleen "y") als het oké is om de subsleutel te maken.Antwoord "yes" als het oké is om de subsleutel te wissenAntwoord "yes" als het oké is om bestand te overschrijvenAntwoord "yes" als u werkelijk deze gebruikers-ID wilt wissen. Alle bijbehorende certificaten worden ook gewist!Antwoord "yes" als U ALLE gebruikers-ID's wilt tekenen.Antwoord "yes" (Ja) of "no" (nee)Weet u zeker dat u deze sleutel wilt ondertekenen met uw sleutel "%s" (%s) Weet U zeker dat u die nog steeds wilt toevoegen? (j/N) Weet u zeker dat u die nog altijd wilt intrekken? (j/N) Weet U zeker dat U die nog steeds wilt ondertekenen? (j/N) Weet u zeker dat u deze sleutel wilt aanstellen als bevoegde intrekker? (j/N) Weet u zeker dat u die wilt verwijderen? (j/N) Weet u zeker dat u die wilt vervangen? (j/N) Weet U zeker dat u het wilt gebruiken? (j/N) AuthenticerenSLECHTE handtekening van "%s"CA-vingerafdruk: CRC-fout; %06lX - %06lX Kan ondertekening niet controleren: %s Deze sleutel kan niet bewerkt worden: %s Kan `%s' niet openen: %s AnnulerenVoornaam van de kaarthouder: Achternaam van de kaarthouder: Certificaten die leiden naar een uiterst betrouwbare sleutel: CertificerenWijzig (N)aam, (T)oelichting, (E)-mailadres of (O)ké/(S)toppen? Wijzig (N)aam, (T)oelichting, (E)-mailadres of (S)toppen? Vervang de voorkeuren van alle (of alleen de gekozen) gebruikers-ID's door de huidige lijst van voorkeuren. De tijdsindicatie van alle betrokken zelf geplaatste handtekeningen zal met een seconde worden verhoogd. De vervaldatum van een subsleutel wordt veranderd. De vervaldatum van de primaire sleutel wordt veranderd. Versleutelingsalgoritme: Commando verwacht een bestandsnaam als parameter Toelichting: Compressiealgoritme: Een bevoegd intrekkingscertificaat aanmaken voor deze sleutel? (j/N) Een intrekkingscertificaat voor deze sleutel maken? (j/N) Een intrekkingscertificaat voor deze ondertekening aanmaken? (j/N) Kritieke voorkeurssleutelserver: Kritieke notatie van de handtekening: Kritiek ondertekeningsbeleid: Momenteel toegestane acties: Huidige ontvangers: DSA-sleutel %s vereist een hash van %u bit of meer DSA-sleutel %s gebruikt een onveilige (%u bit) hash DSA vereist dat de lengte van de hash een veelvoud van 8 bits is Deze goede handtekening verwijderen? (j/N/s)Deze ongeldige handtekening verwijderen? (j/N/s)Deze sleutel uit de sleutelring verwijderen? (j/N) Deze onbekende handtekening verwijderen? (j/N/s)Handtekening %d verwijderd. %d handtekeningen verwijderd. Ontkoppelde handtekening. Hashing: %s identiteitsfoto van formaat %ld voor sleutel %s (gebruikers-ID %d) wordt getoond Wilt u de geselecteerde sleutels echt wissen? (j/N) Wilt u deze sleutel echt wissen? (j/N) Wilt u dit echt doen? (j/N) Wilt u echt de volledige sleutel intrekken? (j/N) Wilt U de geselecteerde subsleutels echt intrekken? (j/N) Wilt U deze subsleutel echt intrekken? (j/N) Wilt u deze sleutel echt instellen als uiterst betrouwbaar? (j/N) Wilt U een nieuwe handtekening uitgeven om de vervallen te vervangen ? (j/N) Wilt u ze opwaarderen naar een handtekening die volledig exporteerbaar is? (j/N) Wilt u ze opwaarderen tot een eigen handtekening van OpenPGP? (j/N) Wilt u die toch opnieuw ondertekenen? (j/N) Wilt u uw handtekening op hetzelfde moment laten vervallen? (J/n) FOUT: E-mailadres: VersleutelenVoer de pincode voor de beheerder in: Geef de naam van het JPEG-bestand voor de identiteitsfoto: Voer de nieuwe pincode voor de beheerder in: Voer nieuwe pincode in: Voer de pincode in: Voer een facultatieve beschrijving in; beëindig met een lege regel: Voer een nieuwe bestandsnaam inVoer (een) getal(len) in, V)olgende , of S)toppen > Voer wachtwoordzin in Voer wachtwoordzin in: Geef de naam van de sleutelhouderVoer de nieuwe wachtwoordzin voor deze geheime sleutel in. Voer de notatie in: Geef de vereiste waarde op, zoals getoond in de vraag. Het is mogelijk om een datum in ISO-formaat (JJJJ-MM-DD) in te voeren, maar u zult geen passende foutmelding krijgen - het systeem zal daarentegen proberen om de ingevoerde waarde te interpreteren als een interval.Voer de lengte van de sleutel inVoer het gebruikers-ID in van de ontvanger van dit bericht.Geef de gebruikers-ID van de bevoegde intrekker: Geef de URL van de sleutelserver van uw voorkeur: Fout bij het lezen van reservesleutel van `%s': %s Fout: Volledige naam is te lang (de limiet is %d tekens). Fout: Dubbele spaties gebruiken is niet toegestaan. Fout: Aanmeldgegevens zijn te lang (de limiet is %d tekens). Fout: Alleen platte ASCII is momenteel toegestaan. Fout: Geheime DO is te lang (de limiet is %d tekens). Fout: U mag het teken "<" niet gebruiken. Fout: de betrouwbaarheidsdatabank (trustdb) is beschadigd. Fout: URL is te lang (de limiet is %d tekens). Fout: ongeldige tekens in voorkeursinformatie. Fout: ongeldig opgemaakte vingerafdruk. Fout: ongeldige lengte van de voorkeursinformatie. Fout: Ongeldig antwoord. Vervallen handtekening van "%s"Functies: Bestand `%s' bestaat. Geef de naam van het bestand waarop deze handtekening van toepassing isU kunt uw bericht typen ... Goede handtekening van "%s"Hashalgoritme: Hint: Selecteer de gebruikers-ID's die U wilt ondertekenen Druk op enter als u klaar bent of op 'c' om te cancelen: Hoe zorgvuldig heeft u gecontroleerd dat de sleutel die u gaat ondertekenen werkelijk van de hierboven genoemde persoon is? Indien u niet goed weet wat te antwoorden, geef dan "0" op In hoeverre vertrouwt U erop dat deze sleutel werkelijk bij de genoemde gebruiker hoort? Ik heb deze sleutel oppervlakkig gecontroleerd. Ik heb deze sleutel zeer zorgvuldig gecontroleerd. Ik heb deze sleutel helemaal niet gecontroleerd. IDEA-versleutelingsalgoritme is niet beschikbaar, maar we gaan in plaats daarvan met goede moed %s proberen Indien dit niet lukt, gelieve dan de handleiding te raadplegen Als U wilt kunt U een tekst intypen met uitleg waarom u dit certificaat van intrekking maakt. Hou deze tekst beknopt. Beëindig de tekst met een lege regel. Als u deze niet-vertrouwde sleutel toch wilt gebruiken, antwoord dan "yes".In het algemeen is het geen goed idee om dezelfde sleutel te gebruiken om te ondertekenen en te versleutelen. Dit algoritme zou enkel in bepaalde domeinen gebruikt mogen worden. Vraag eerst een beveiligingsspecialist om advies.Ongeldig teken in de toelichting Ongeldig teken in de naam Ongeldig commando (probeer "help") Ongeldige sleutel %s is geldig gemaakt met --allow-non-selfsigned-uid Ongeldige wachtwoordzin; probeer opnieuwOngeldige keuze. Is dit correct? (j/N) Is dit oké? (j/N) Is deze foto correct (j/N/s)? Het is NIET zeker dat deze sleutel van de is die genoemd wordt in de gebruikers-ID. Als u echter HEEL zeker weet wat u doet, mag u op de volgende vraag Ja beantwoorden. Het is aan u om hier een waarde toe te kennen; deze waarde zal nooit naar een derde partij geëxporteerd worden. We hebben ze nodig om het netwerk-van-vertrouwen (web-of-trust) te implementeren. Dit heeft niets te maken met het (impliciet aangemaakte) netwerk-van-certificaten (web-of-certificates).Sleutel %s is reeds ingetrokken. Sleutel beschikbaar op: Sleutel verloopt helemaal niet Sleutel vervalt op %s Het aanmaken van de sleutel is afgebroken. Sleutel aanmaken is mislukt: %s Sleutel is gecompromiteerdDeze sleutel bevat slechts partiële of op de kaart opgeslagen elementen - er is geen wachtwoordzin die veranderd kan worden. Sleutel is niet meer in gebruikSleutel is beveiligd. Sleutel werd ingetrokken.Sleutel is vervangenHoe lang moet de sleutel geldig zijn? (0) Sleutel is niet aangepast, dus er is geen bijwerking nodig. SleutelringSleutelserver zonder wijzigingTaalvoorkeuren: Aanmeldgegevens (accountnaam): Een externe reservekopie maken van de encryptiesleutel? (J/n) N om de de naam te veranderen. C om de toelichting te veranderen. E om het e-mailadres te veranderen. O om door te gaan met het aanmaken van de sleutel. Q om het aanmaken van de sleutel af te breken.NOOT: %s is niet beschikbaar in deze versie NOOT: %s is niet bedoeld voor normaal gebruik! NOOT: Het kan niet gegarandeerd worden dat de kaart de gevraagde grootte ondersteunt. Indien het aanmaken van de sleutel niet lukt, moet u de documentatie bij uw kaart raadplegen om na te gaan welke groottes toegelaten zijn. NOOT: Deze functionaliteit is niet beschikbaar in %s NOOT: Deze sleutel is niet beschermd! NOOT: een serienummer van een sleutel klopt niet met die van de kaart NOOT: reservebestand met de kaartsleutel opgeslagen als `%s' NOOT: subsleutels aanmaken voor v3-sleutels is niet compatibel met OpenPGP NOOT: sleutel werd ingetreokkenNOOT: sleutels worden al op de kaart bewaard! NOOT: geen bestand `%s' met standaardopties NOOT: oud bestand `%s' met standaardopties werd genegeerd NOOT: primaire sleutel is online en opgeslagen op de kaart NOOT: secundaire sleutel is online en opgeslagen op de kaart NOOT: geheime sleutel %s verviel op %s NOOT: afzender heeft het volgende verzocht: "alleen-voor-u-persoonlijk" NOOT: ondertekeningssleutel %s verviel op %s NOOT: eenvoudige S2K-modus (0) wordt sterk afgeraden NOOT: er kan niet geschreven worden in de betrouwbaarheidsdatabank (trustdb) Een naam mag niet met een cijfer beginnen Een naam moet minimaal 5 tekens lang zijn Hiervoor is de geheime sleutel nodig. NnTtEeOoSsEr is geen overeenkomstige ondertekening in de geheime sleutelring Geen hulp beschikbaarGeen hulp beschikbaar voor `%s'Geen reden opgegevenEr is geen subsleutel met index %d Een dergelijke gebruikers-ID is er niet. Er werd geen betrouwbaarheidswaarde toegekend aan: Er is geen gebruikers-ID met hash %s Er is geen gebruikers-ID met index %d Geen geldig e-mailadres Niet door u ondertekend. Notaties: Noteer dat deze sleutel niet gebruikt kan worden voor versleuteling. Misschien wenst u het commando "--edit-key" te gebruiken om voor dit doel een subsleutel aan te maken. Noot: Het adres `%s' van de ondertekenaar komt niet overeen met een DNS-veld Noot: Deze sleutel is uitgeschakeld. Noot: Deze sleutel is vervallen! Noot: Het gecontroleerde adres van de ondertekenaar is `%s' Niets verwijderd. Er is niets te ondertekenen met sleutel %s OpenPGP-kaartnummer %s gevonden OpenPGP-kaart is niet beschikbaar: %s Overschrijven? (j/N) Betrouwbaarheid van de eigenaar kan niet ingesteld worden door gebruik te maken van een door de gebruiker zelf aangeleverde vertrouwenslijst Terugoproep door de code gaf een fout: %s pincode voor CHV%d is te kort; die moet minimaal %d lang zijn Pincode was niet tweemaal hetzelfde; probeer opnieuwVerbeter eerst de fout Geef aan in welke mate u er op vertrouwt dat deze gebruiker de sleutels van andere gebruikers op correcte wijze controleert (door het paspoort te bekijken, vingerafdrukken uit verschillende bronnen te checken, enz.) Plaats het e-mailadres alstublieft niet bij de werkelijke naam of de toelichting Voer een domein in als u de geldigheid van de handtekening daartoe wilt beperken, laat leeg voor geen beperking. Geef alstublieft een nieuwe bestandsnaam. Als U gewoon op Enter drukt zal het standaardbestand (u ziet zijn naam tussen de blokhaken) gebruikt worden.Geef eventueel een toelichting. Dit is facultatiefGeef de naam in van het gegevensbestand: Geef aan hoe groot het vertrouwen mag zijn in deze betrouwbare handtekening. Als de waarde groter dan 1 is, stelt u de sleutel die u ondertekent, in de mogelijkheid om in uw plaats handtekeningen van vertrouwen te plaatsen. Geef de wachtwoordzin in; dit is een geheime zin Los dit mogelijk veiligheidseuvel alstublieft op Plaats de kaart en druk op enter of op 'c' om te cancelen: Gelieve te noteren dat de fabrieksinstellingen voor de pincodes de volgende zijn: pincode = `%s' Beheerderspincode = `%s' U wordt aangeraden deze te wijzigen met het commando --change-pin Houd er rekening mee dat de getoonde geldigheid van de sleutel niet noodzakelijk correct is, tenzij u de applicatie herstart. Haal de gekozen onderdelen uit de geheime sleutels. Verwijder de huidige kaart en plaats de kaart met serienummer: %.*s Herhaal de laatste wachtwoordzin, om zeker te zijn dat u die juist intypte.Fouten graag melden aan . Selecteer hoogstens één subsleutel. Selecteer exact één gebruikers-ID. Gelieve een reden te kiezen voor de intrekking: Selecteer het type sleutel dat aangemaakt moet worden: Selecteer het soort sleutel dat u wilt: Geef aan waar de sleutel moet opgeslagen worden: Geef aan hoe lang de sleutel geldig moet zijn. 0 = sleutel verloopt nooit = sleutel verloopt na n dagen w = sleutel verloopt na n weken m = sleutel verloopt na n maanden y = sleutel verloopt na n jaar Geef aan hoe lang de ondertekening geldig moet zijn. 0 = ondertekening verloopt nooit = ondertekening verloopt na n dagen w = ondertekening verloopt na n weken m = ondertekening verloopt na n maanden y = ondertekening verloopt na n jaar Gebruik eerst het commando "toggle" (wisselen). Ogenblik geduld, entropie wordt verzameld. Werk intussen wat. Het zal er niet enkel voor zorgen dat u zich niet gaat vervelen, het zal tegelijk de kwaliteit van de entropie verbeteren. Mogelijke acties voor een %s-sleutel: Voorkeurssleutelserver: Vingerafdruk van de primaire sleutel:Geheime DO-gegevens: Doorgaan? (j/N) Publieke sleutel: Publieke sleutel werd uitgeschakeld Stoppen zonder opslaan? (j/N) RSA-modulus ontbreekt of heeft niet een grootte van %d bits priemgetal %s van RSA ontbreekt of heeft niet de grootte van %d bits publieke exponent van RSA ontbreekt of is groter dan %d bits Werkelijke naam: Wilt u deze intrekkingscertificaten echt aanmaken? (j/N) Werkelijk aanmaken? (j/N) Deze eigen handtekening echt verwijderen? (j/N)Wilt u echt de primaire sleutel verplaatsen? (j/N) Werkelijk alle geselecteerde gebruikers-ID's verwijderen? (j/N) Wilt u deze gebruikers-ID echt verwijderen? (j/N) Wilt u alle geselecteerde gebruikers-ID's echt intrekken? (j/N) Wilt u deze gebruikers-ID echt intrekken? (j/N) Echt alle gebruikers-ID's ondertekenen? (j/N) Echt ondertekenen? (j/N) De voorkeuren voor de geselecteerde gebruikers-ID's echt aanpassen? (j/N) De voorkeuren echt aanpassen? (j/N) Reden van intrekking: %s Herhaal wachtwoordzin Herhaal wachtwoordzin: Herhaal deze pincode: Bestaande sleutel vervangen? (j/N) Bestaande sleutels vervangen? (j/N) Gevraagde sleutellengte is %u bits Reset-Code is te kort; die moet minimaal %d lang zijn Reset-Code niet of niet langer beschikbaar Intrekkingscertificaat werd aangemaakt. Intrekkingscertificaat aangemaakt. Gelieve het naar een medium te verplaatsen dat u kunt wegstoppen; indien iemand dit certificaat in handen krijgt, kan hij het gebruiken om uw sleutel onbruikbaar te maken. Het is verstandig om dit certificaat af te drukken en het weg te bergen, voor het geval uw media onleesbaar zouden worden. Maar neem wat voorzichtigheid in acht: het printersysteem van uw computer kan de gegevens opslaan, waardoor ze voor anderen toegankelijk kunnen worden! Aanpassingen opslaan? (j/N) Geheime sleutel is beschikbaar. Geheime delen van de primaire sleutel zijn niet beschikbaar. Geheime delen van de primaire sleutel staan opgeslagen op de kaart. Selecteer het te gebruiken algoritme. DSA (ook bekend als DSS) is het algoritme voor digitale handtekeningen (Digital Signature Algorithm) dat enkel voor ondertekeningen kan gebruikt worden. Elgamal is een algoritme enkel bedoeld voor versleuteling. RSA kan gebruikt worden voor ondertekeningen en versleuteling. De eerste (primaire) sleutel moet altijd een sleutel zijn waarmee ondertekend kan worden.Stel voorkeurenlijst in op: Geslacht ((M)Man, (F)Vrouw of spatie): OndertekenenOndertekenen? (j/N) Ondertekening verloopt helemaal niet Ondertekening vervallen op %s Ondertekening verloopt op %s Ondertekening vervalt op %s Hoe lang moet de ondertekening geldig zijn? (%s) Ondertekening gemaakt op %s Ondertekening gemaakt op %s met %s sleutel-ID %s Notatie van de handtekening: Ondertekeningsbeleid: OoVvAaSsSubsleutel %s is reeds ingetrokken. Syntaxis: gpg [opties] [bestanden] Onderteken, controleer, versleutel of ontcijfer Standaardactie is afhankelijk van de gegevensinvoer Syntaxis: gpg [opties] [bestanden] Controleer ondertekeningen via gekende en vertrouwde sleutels De kaart zal nu opnieuw ingesteld worden om een sleutel van %u bits aan te maken Het minimale betrouwbaarheidsniveau van deze sleutel is: %s De generator van willekeurige getallen is alleen maar een zootje ongeregeld om iets te hebben dat werkt - het is niet echt een sterk programma! GEBRUIK DE DOOR DIT PROGRAMMA GEGENEREERDE GEGEVENS NIET!! De eigen ondertekening van "%s" is een ondertekening van het type PGP 2.x. De ondertekening is niet geldig. Het is een goed idee om ze van uw sleutelring af te halen.De ondertekening zal als niet-exporteerbaar gemarkeerd worden. De ondertekening zal als niet in te trekken gemarkeerd worden. Een gebruikers-ID in een formaat PGP 2.x kent geen voorkeuren. Dit JPEG-bestand is erg groot (%d bytes) ! Dit commando is niet toegestaan in %s-modus. Dit commando is enkel beschikbaar voor kaarten van versie 2 Dit is een geheime sleutel! - echt verwijderen? (j/N) Dit is een ondertekening die de gebruikers-ID aan de sleutel koppelt. Het is meestal niet goed om een dergelijke handtekening te verwijderen. Waarschijnlijk zal GnuPG deze sleutel dan niet meer kunnen gebruiken. Doe dit dus alleen als deze zelf geplaatste handtekening om een of andere reden niet geldig is en er een andere beschikbaar is.Dit is een geldige ondertekening van de sleutel; normaal gezien wilt U deze ondertekening niet wissen. omdat ze belangrijk kan zijn voor het opzetten van een betrouwbare relatie met behulp van deze sleutel of met een andere sleutel die met deze sleutel gecertificeerd werd.Deze sleutel is van ons Deze sleutel is niet actiefDeze sleutel is verlopen!Deze sleutel zal vervallen op %s. Deze sleutel is niet beveiligd. Deze sleutel kan ingetrokken zijn door %s-sleutel %sDeze sleutel is waarschijnlijk van de genoemde persoon Deze sleutel is ingetrokken op %s door %s sleutel %s Deze ondertekening kan niet worden gecontroleerd omdat u de bijbehorende sleutel niet heeft. U wordt aangeraden om het verwijderen ervan uit te stellen totdat u weet welke sleutel gebruikt geweest is, omdat deze ondertekenende sleutel misschien een betrouwbare relatie tot stand brengt via een andere reeds gecertificeerde sleutel.Deze ondertekening is verlopen op %s. Dit zal een eigen ondertekening zijn. Dit zou de sleutel onbruikbaar maken met PGP 2.x. Moet worden ingetrokken door: Om het netwerk-van-vertrouwen op te bouwen, moet GnuPG weten welke sleutels volledig vertrouwd worden. Dit zijn gewoonlijk de sleutels waarvoor u ook toegang tot de geheime sleutel heeft. Antwoord "yes" om deze sleutel in te stellen als volledig te vertrouwen. Totaal aantal verwerkt: %lu URL voor het ophalen van de publieke sleutel: Niet gecomprimeerdOnbekend ondertekeningstype ‘%s’ Gebruik: gpg [opties] [bestanden] (-h voor hulp)Gebruik: gpgv [opties] [bestanden] (-h voor hulp)Deze sleutel toch gebruiken? (j/N) Gebruikers-ID "%s" is gecomprimeerd: %s Gebruikers-ID "%s" is vervallen.Gebruikers-ID "%s" is niet door zichzelf ondertekend.Gebruikers-ID "%s" is ingetrokken.Gebruikers-ID "%s" kan ondertekend worden. Gebruikers-ID "%s": %d handtekening verwijderd Gebruikers-ID "%s": %d handtekeningen verwijderd Gebruikers-ID "%s": reeds opgeschoond Gebruikers-ID "%s": reeds geminimaliseerd Gebruikers-ID is niet langer geldigWAARSCHUWING: WAARSCHUWING: "%s" is een verouderd commando - gebruik het niet WAARSCHUWING: "%s" is een verouderde optie WAARSCHUWING: %s heeft voorrang op %s WAARSCHUWING: er bestaan twee bestanden met vertrouwelijke informatie. WAARSCHUWING: Elgamal-sleutels die ondertekenen + versleutelen zijn verouderd WAARSCHUWING: Dit is een sleutel van het type PGP 2.x. Het toevoegen van een bevoegde intrekker kan er voor zorgen dat sommige PGP-versies deze sleutel verwerpen. WAARSCHUWING: Dit is een sleutel in PGP2-formaat. Het toevoegen van een identiteitsfoto kan er voor zorgen dat sommige versies van PGP deze sleutel verwerpen. WAARSCHUWING: Deze sleutel werd ingetrokken door zijn bevoegde intrekker! WAARSCHUWING: Deze sleutel werd ingetrokken door de eigenaar! WAARSCHUWING: Deze sleutel werd niet gecertificeerd door een betrouwbare handtekening! WAARSCHUWING: Deze sleutel werd niet met voldoende betrouwbare handtekeningen gecertificeerd! WAARSCHUWING: Deze subsleutel werd ingetrokken door de eigenaar ervan! WAARSCHUWING: er wordt een onbetrouwbare sleutel gebruikt! WAARSCHUWING: We vertrouwen deze sleutel NIET! WAARSCHUWING: Een zwakke sleutel gevonden - gelieve de wachtwoordzin opnieuw te wijzigen. WAARSCHUWING: `%s' is een leeg bestand WAARSCHUWING: de ondertekening van een gebruikers-ID is %d seconden in de toekomst gedateerd WAARSCHUWING: een sleutel aanstellen als bevoegde intrekker kan niet ongedaan gemaakt worden! WAARSCHUWING: versleutelingsalgoritme %s niet gevonden in de voorkeuren van de ontvanger WAARSCHUWING: hashalgoritme %s is verouderd WAARSCHUWING: versleuteld bericht werd gemanipuleerd! WAARSCHUWING: het forceren van het compressiealgoritme %s (%d) gaat in tegen de voorkeuren van de ontvanger WAARSCHUWING: het hashalgoritme %s (%d) dwingend opleggen is in strijd met de voorkeuren van de ontvanger WAARSCHUWING: het forceren van het symmetrisch versleutelingsalgoritme %s (%d) gaat in tegen de voorkeuren van de ontvanger WAARSCHUWING: ongeldige grootte van het bestand random_seed - wordt niet gebruikt WAARSCHUWING: sleutel %s bevat voorkeuren voor niet-beschikbare WAARSCHUWING: sleutel %s kan ingetrokken zijn: ophalen intrekkingssleutel %s WAARSCHUWING: sleutel %s kan ingetrokken zijn: intrekkingssleutel %s niet aanwezig. WAARSCHUWING: verwerkingsroutine van sleutelserver heeft een andere GnuPG-versie (%s) WAARSCHUWING: sleutelserveroptie `%s' wordt niet gebruikt op dit platform WAARSCHUWING: het bericht is versleuteld met een zwakke sleutel in het symmetrische versleutelingsalgoritme. WAARSCHUWING: de integriteit van het bericht was niet beschermd WAARSCHUWING: er werd meerdere keren een klare tekst gezien WAARSCHUWING: meerdere ondertekeningen gevonden. Alleen de eerste zal gecontroleerd worden. WAARSCHUWING: Er werd geen gebruikers-ID als primair gemarkeerd. Door dit programma te gebruiken kan er een andere gebruikers-ID de veronderstelde primaire ID worden. WAARSCHUWING: geen ontkoppelde handtekening; bestand '%s' werd NIET geverifieerd! WAARSCHUWING: er werd niets geëxporteerd WAARSCHUWING: opties in `%s' zijn tijdens deze doorloop nog niet actief WAARSCHUWING: mogelijk onveilige symmetrisch versleutelde sessiesleutel WAARSCHUWING: het programma zou een core-dump-bestand kunnen maken! WAARSCHUWING: er werden ontvangers (-r) opgegeven zonder dat versleuteling met een publieke sleutel toegepast wordt WAARSCHUWING: geheime sleutel %s heeft geen eenvoudige SK-controlesom WAARSCHUWING: conflicterende ondertekeningshash in het bericht WAARSCHUWING: ondertekenende subsleutel %s heeft een ongeldige kruiscertificering WAARSCHUWING: er is geen kruiscertificering gebeurd van de ondertekenende subsleutel %s WAARSCHUWING: de ondertekening zal niet als niet-exporteerbaar worden gemarkeerd. WAARSCHUWING: de ondertekening zal niet als niet in te trekken worden gemarkeerd. WAARSCHUWING: deze sleutel kan ingetrokken zijn (maar de intrekkingssleutel is niet aanwezig) WAARSCHUWING: kan geen expansie maken van %% op basis van de notatie (te groot). De niet-geëxpandeerde versie wordt gebruikt. WAARSCHUWING: kan geen expansie maken van %% op basis van de richtlijn-URL (te groot). De niet-geëxpandeerde versie wordt gebruikt. WAARSCHUWING: kan geen expansie maken van %% op basis van de URL van de voorkeurssleutelsserver (te groot). De niet-geëxpandeerde versie wordt gebruikt. WAARSCHUWING: het is niet mogelijk om URI %s binnen te halen: %s WAARSCHUWING: het is niet mogelijk om URI %s te ontleden WAARSCHUWING: het is niet mogelijk sleutel %s via %s te verversen: %s WAARSCHUWING: tijdelijke map `%s' kan niet verwijderd worden: %s WAARSCHUWING: tijdelijk bestand (%s) `%s' kan niet verwijderd worden: %s WAARSCHUWING: de eigendomsinstellingen van de map waarin configuratiebestand `%s' zich bevindt, zijn onveilig WAARSCHUWING: de eigendomsinstellingen van de map waarin de thuismap `%s' zich bevindt, zijn onveilig WAARSCHUWING: de toegangsrechten van de map waarin configuratiebestand `%s' zich bevindt, zijn onveilig WAARSCHUWING: de toegangsrechten van de map waarin de thuismap `%s' zich bevindt, zijn onveilig WAARSCHUWING: onveilige eigendomsinstellingen van configuratiebestand `%s' WAARSCHUWING: onveilige eigendomsinstellingen van thuismap `%s' WAARSCHUWING: toegangsrechten van configuratiebestand `%s' zijn onveilig WAARSCHUWING: toegangsrechten van thuismap `%s' zijn onveilig WAARSCHUWING: er wordt een experimenteel versleutelingsalgoritme %s gebruikt WAARSCHUWING: er wordt een experimenteel hashalgoritme %s gebruikt WAARSCHUWING: er wordt een experimenteel algoritme %s gebruikt voor de publieke sleutel WAARSCHUWING: er wordt onveilig geheugen gebruikt! WAARSCHUWING: er wordt een onveilige generator van willekeurige getallen gebruikt!! We moeten een hele hoop willekeurige bytes genereren. U doet er goed aan om een andere activiteit te ondernemen (tikken op het toetsenbord, de muis bewegen, de schijven gebruiken) tijdens het genereren van het priemgetal. Dit geeft het programma dat het willekeurig getal genereert meer kans om voldoende entropie te verzamelen. Welke sleutelgrootte wilt u voor de Authenticatiesleutel? (%u) Welke sleutelgrootte wilt u voor de Encryptiesleutel? (%u) Welke sleutelgrootte wilt u voor de Ondertekeningssleutel? (%u) Welke sleutellengte wilt u voor de subsleutel? (%u) Welke sleutellengte wilt u? (%u) Als U een gebruikers-ID koppelt aan een sleutel, moet U eerst nagaan of de sleutel echt van de persoon is die in het gebruikers-ID genoemd wordt. Voor anderen is het van belang te weten dat U dit grondig gecontroleerd heeft. "0" betekent dat U zich niet uitspreekt over hoe grondig U deze sleutel heeft gecontroleerd "1" betekent dat U gelooft dat de sleutel eigendom is van de persoon die beweert er eigenaar van te zijn, maar dat u de sleutel niet controleerde of dit niet kon doen. Dit is zinvol in geval van een "persona"-verificatie bij het ondertekenen van de sleutel van het pseudoniem van een gebruiker. "2" betekent dat U de sleutel vluchtig gecontroleerd heeft. Dit kan bijvoorbeeld betekenen dat u de vingerafdruk van de sleutel gecontroleerd heeft en de gebruikers-ID getoetst heeft aan een identiteitsfoto. "3" betekent dat u de sleutel uitvoerig heeft gecontroleerd. Dit kan bijvoorbeeld betekenen dat U de vingerafdruk van de sleutel persoonlijk gecontroleerd heeft bij de eigenaar van de sleutel, en dat u gecontroleerd heeft aan de hand van een foto op een moeilijk te vervalsen document (zoals een paspoort) dat de naam van de eigenaar van de sleutel overeenkomt met de naam in de gebruikers-ID op de sleutel, en dat u tenslotte gecontroleerd heeft (via het uitwisselen van e-mail) dat het e-mailadres op de sleutel effectief van de eigenaar van de sleutel is. Noteer dat de gegeven voorbeelden voor de niveaus 2 en 3 *slechts* voorbeelden zijn. Uiteindelijk moet U zelf uitmaken wat voor u de betekenis is van "vluchtig" en "uitvoerig" bij het ondertekenen van sleutels van anderen. Indien u twijfelt over wat het correcte antwoord is, antwoord dan "0".U staat op het punt deze ondertekeningen in te trekken: U gebruikt tekenset `%s'. U kunt de vervaldatum van een v3-sleutel niet veranderen U kunt de laatste gebruikers-ID niet verwijderen! U heeft geen gebruikers-ID gespecificeerd. (u kunt de optie "-r" gebruiken) U wilt geen wachtwoordzin - Dit is wellicht een *slecht* idee! U wilt geen wachtwoordzin - dit is waarschijnlijk een *slecht* idee! Ik ga het toch doen. U kunt uw wachtwoordzin op elk moment wijzigen met behulp van dit programma en de optie "--edit-key". U heeft deze gebruikers-ID's op sleutel %s ondertekend: U mag geen bevoegde intrekker toevoegen aan een sleutel van het type PGP 2.x. U kunt geen identiteitsfoto toevoegen aan een sleutel in PGP2-formaat. U mag geen OpenPGP-ondertekening zetten bij een sleutel van het type PGP 2.x als U de optie --pgp2 gebruikt. U kunt proberen om de betrouwbaarheidsdatabank (trustdb) opnieuw aan te maken met behulp van de commando's: U moet minimaal één sleutel selecteren. U moet minimaal één gebruikers-ID selecteren. U moet exact één sleutel selecteren. U heeft een wachtwoordzin nodig om uw geheime sleutel te beschermen. U heeft een wachtwoordzin nodig om de geheime sleutel te ontgrendelen van gebruiker: "%s" U heeft een wachtwoordzin nodig om de geheime sleutel te ontgrendelen van gebruiker: "%.*s" %u bit %s-sleutel, ID %s, gemaakt op %s%s U heeft de volgende GEBRUIKERS-ID gekozen: "%s" Geef hier een reden voor de certificering. Afhankelijk van de context kunt U een omschrijving kiezen uit deze lijst: "Sleutel is gecompromitteerd" Gebruik dit indien u redenen heeft om aan te nemen dat onbevoegde personen uw geheime sleutel in handen gekregen hebben. "Sleutel is vervangen" Gebruik dit als u deze sleutel door een nieuwe vervangen heeft. "Sleutel wordt niet langer gebruikt" Gebruik dit indien u deze sleutel ingetrokken heeft. "Gebruikers-ID is niet langer geldig" Gebruik dit om te stellen dat deze gebruikers-ID niet langer gebruikt zou moeten worden. Gewoonlijk gebruikt men dit om een e-mailadres als niet langer geldig te markeren. Uw huidige ondertekening op "%s" is verlopen. Uw huidige ondertekening op "%s" is een lokale ondertekening. Uw besluit? Uw keuze? Uw keuze? (type `?' voor meer informatie): Uw systeem kan geen datum weergeven na 2038. Data worden echter wel juist verwerkt tot 2106. [volledig][ ongedef][vervalln][ingetrok][onbekend][Gebruikers-ID niet gevonden][bestandsnaam][marginal][niet ingesteld][intrekking][eigen ondertekening][ uiterst][onzeker]`%s' is reeds gecomprimeerd `%s' is geen JPEG-bestand `%s' is geen gewoon bestand - wordt genegeerd `%s' is geen geldige tekenset `%s' is geen geldige ID voor een lange sleutel `%s' is geen geldige vervaldatum voor handtekeningen sta op het punt om een onbeveiligde subsleutel te exporteren toegang tot beheerderscommando's is niet ingesteld de actie `%s' wordt niet ondersteund door sleutelserverstelsel `%s' voeg een sleutel toe op een chipkaartvoeg een identiteitsfoto toevoeg een intrekkingssleutel toevoeg een subsleutel toevoeg een gebruikers-ID toedubbelzinnige optie `%s' anonieme ontvanger; geheime sleutel %s wordt geprobeerd ... harnasintro: harnas: %s gegevens waarschijnlijk versleuteld met %s er wordt verondersteld dat de ondertekening van sleutel %s slecht is, omdat de kritieke bit niet gekend is gegevens in `%s' worden verondersteld ondertekend te zijn sleutels automatisch ophalen bij het controleren van ondertekeningen`%s' automatisch opgehaald via %s slecht MPI (geheel getal van multipele precisie)slechte URIslecht certificaatslechte sleutelslechte wachtwoordzinslechte publieke sleutelslechte geheime sleutelslechte handtekeningwees wat stillerbinairbuild_packet is mislukt: %s cCaAsleutelring `%s' wordt in de cache geladen kan geen toegang krijgen tot %s - ongeldige OpenPGP-kaart? krijg geen toegang tot `%s': %s kan `%s' niet afsluiten: %s kan geen verbinding maken met `%s': %s kan `%s' niet aanmaken: %s kan reservebestand `%s' niet aanmaken: %s kan map `%s' niet maken: %s kan geen grendel maken voor `%s' het is niet mogelijk om core-dumps uit te schakelen: %s dit is niet mogelijk in automatische modus dit is onmogelijk in automatische modus zonder de parameter "--yes" kan geen priemgetal genereren met pbits=%u qbits=%u kan geen priemgetal genereren van minder dan %d bits kan het algoritme %d van de publieke sleutel niet verwerken kan geen tekstregels verwerken die groter zijn dan %d tekens kan deze ambigue ondertekeningsgegevens niet verwerken kan `%s' niet vergrendelen kan `%s' niet vergrendelen: %s kan `%s' niet openen kan `%s' niet openen: %s kan de ondertekende gegevens `%s' niet openen kan de sleutelring niet openenkan geen wachtwoordzin vragen in automatische modus kan `%s' niet lezen: %s kan status van `%s' niet vaststellen: %s kan geen symmetrisch ESK-pakket gebruiken omwille van de S2K-modus kan `%s' niet wegschrijven: %s geannuleerdafgebroken door de gebruiker cancel|cancelen|annulerenkan geen sleutel van het type PGP 2.x aanstellen als bevoegde intrekker een zwakke sleutel voor het symmetrisch versleutelingsalgoritme kan niet vermeden worden; er werd %d maal geprobeerd! de kaart ondersteunt het hashalgoritme %s niet kaart is permanent vergrendeld! kaartlezer is niet beschikbaar kaartnummer: verander de URL waarvan de sleutel opgehaald moet wordenverander een CA-vingerafdrukwijzig de pincode van een kaartverander de naam van de kaarthouderverander het geslacht van de kaarthouderwijzig gegevens op een kaartverander de vervaldatum van de sleutel of de geselecteerde subsleutelsverander de taalvoorkeurenverander de aanmeldnaamwijzig de betrouwbaarheid van de eigenaarwijzig de wachtwoordzincontroleer handtekeningencontrole van de aangemaakte ondertekening is mislukt: %s de betrouwbaarheidsdatabank (trustdb) wordt gecontroleerd fout in de controlesomversleutelingsalgoritme %d%s is onbekend of uitgeschakeld ontbrekende dubbele puntcomprimeer onbruikbare gebruikers-ID's en verwijder alle handtekeningen van de sleutelcomprimeer onbruikbare gebruikers-ID's en verwijder onbruikbare handtekeningen van de sleutelcompletes-needed moet groter zijn dan 0 conflicterende commando's kon de URL van de sleutelserver niet ontleden maak een publieke sleutel aan bij het importeren van een geheime sleutelcreëer uitvoer in ascii-harnasaangemaakt: %saanmaakdatum ontbreekt gegevens niet bewaard; gebruik de optie "--output" om ze te bewaren ontmantelen van harnas is mislukt: %s ontcijfer gegevens (standaard)ontcijferen mislukt: %s ontcijfering oké verwijder de geselecteerde subsleutelsverwijder geselecteerde gebruikers-ID'sverwijder ondertekeningen van de geselecteerde gebruikers-ID'sverwijderen van sleutelblok is mislukt: %s diepte: %d geldig: %3d ondert.: %3d vertr.: %d-, %dq, %dn, %dm, %df, %du map `%s' aangemaakt deactiveer de sleuteluitgeschakeldtoon identiteitsfoto's bij de lijst van sleutelstoon identiteitsfoto's bij het controleren van de handtekeningzet de waarden in verband met betrouwbaarheid bij het importeren niet op nultijdelijke bestanden na gebruik niet verwijderenmaak geen wijzigingenwerk de betrouwbaarheidsdatabank (trustdb) niet bij na het importerenverhoog de betrouwbaarheid van ondertekeningen met geldige PKA-gegevensactiveer de sleutelopnieuw aanmaken van harnas is mislukt: %s versleutel gegevensversleuteld met %lu wachtwoordzinnen versleuteld met %s-sleutel, ID %s versleuteld met %u bit %s-sleutel, ID %s, gemaakt op %s versleuteld met 1 wachtwoordzin versleuteld met onbekend algoritme %d om een bericht te versleutelen in de modus --pgp2 is het IDEA-versleutelingsalgoritme nodig enkel versleutelen met een symmetrisch versleutelingsalgoritmefout bij het toewijzen van voldoende geheugen: %s fout bij het veranderen van de grootte van sleutel %d naar %u bits: %s fout bij het aanmaken van `%s': %s fout bij het aanmaken van de sleutelring `%s': %s fout bij het maken van de wachtwoordzin: %s fout bij het zoeken naar de staat van betrouwbaarheid in `%s': %s fout bij het ophalen van de gegevens over de huidige sleutel: %s fout bij het verkrijgen van een nieuwe pincode: %s fout in `%s': %s fout in epiloogregel fout bij het lezen van `%s': %s fout bij het lezen van toepassingsgegevens fout bij het lezen van de vingerafdruk DO fout tijdens het lezen van sleutelblok: %s fout bij het lezen van het geheime sleutelblok "%s": %s fout bij het ophalen van de CHV-status uit de kaart fout bij het wegschrijven van `%s': %s fout bij het wegschrijven van de sleutel naar de kaart: %s fout bij het schrijven naar sleutelring `%s': %s fout bij het schrijven in de publieke sleutelring `%s': %s fout bij het schrijven in de geheime sleutelring `%s': %s de bestaande sleutel zal vervangen worden verlopenverlopen: %svervaldatum: %sexporteer identiteitsattributen van gebruikers (meestal identiteitsfoto's)exporteer sleutelsexporteer sleutels naar een sleutelserverexporteer intrekkingssleutels die als "gevoelig" gemarkeerd zijnexporteer handtekeningen die gemarkeerd staan als uitsluitend lokaalhet exporteren van geheime sleutels is niet toegestaan het aanroepen van externe sleutelservers wordt in deze versie niet ondersteund het aanroepen van externe programma's is uitgeschakeld omdat de toegangsrechten van het optiebestand onveilig zijn initialiseren van de TrustDB (database van vertrouwen) is mislukt: %s de cache van de sleutelring opnieuw bouwen is mislukt: %s opslaan van de aanmaakdatum is mislukt: %s opslaan van de vingerafdruk is mislukt: %s opslaan van de sleutel is mislukt: %s wegnemen van de beveiliging van de subsleutel is mislukt: %s de standaardpincode gebruiken voor %s is mislukt: %s - standaard wordt in het vervolg niet meer gebruikt vrouwhaal de sleutel op van de URL die op de kaart vermeld staatfout bij het sluiten van het bestandfout bij het aanmaken van het bestandfout bij het verwijderen van het bestandbestand bestaatfout bij het openen van het bestandfout bij het lezen van het bestandfout bij het hernoemen van het bestandfout bij het wegschrijven naar het bestandvingerafdruk op de kaart komt niet overeen met de gevraagde markeer de geselecteerde gebruikers-ID als primairgeforceerdhet forceren van het symmetrisch versleutelingsalgoritme %s (%d) gaat in tegen de voorkeuren van de ontvanger opvragen van status (fstat) van `%s' mislukte in %s: %s opvragen van status (fstat(%d)) mislukte in %s: %s volledigalgemene foutberichten aanmaken die compatibel zijn met PGP 2.xmaak een nieuw sleutelpaar aanmaak een intrekkingscertificaat aanmaak nieuwe sleutels aanaanmaken van de sleutel is mislukt aanmaken van nieuwe sleutel de verouderde 16-bit controlesom ter bescherming van de geheime sleutel wordt aangemaakt gpg-agens is niet beschikbaar tijdens deze sessie protocolversie %d voor gpg-agens wordt niet ondersteund gpg/kaart> honoreer bij het ophalen van de sleutel de PKA-registratie die in de sleutel staathonoreer de URL van de voorkeurssleutelserver zoals die in de sleutel vermeld staatiImMsSoOimporteer sleutels van een sleutelserverimporteer handtekeningen die als uitsluitend lokaal zijn gemarkeerdsleutels importeren/samenvoegenimporteren van geheime sleutels is niet toegestaan ingetrokken sleutels ook weergeven bij de zoekresultatenook zoeken op subsleutels als gezocht wordt op sleutel-IDinvoerregel %u is te lang of LF ontbreekt invoerregel groter dan %d tekens ongeldigongeldige S2K-modus; moet 0, 1 of 3 zijn ongeldige parameterongeldig harnasongeldige harnasintro: ongeldig harnas: de regel is langer dan %d tekens lijst voor het automatisch opzoeken van sleutels is ongeldig ongeldige intro van de handtekening in klare tekst door liggend streepje beschermde regel is ongeldig: ongeldige standaardvoorkeuren ongeldig default-cert-level; moet 0, 1, 2 of 3 zijn ongeldige exportopties ongeldige vingerafdrukongeldig hashalgoritme `%s' ongeldige importopties ongeldig item `%s' in voorkeursinstellingen ongeldige sleutelringongeldige sleutelserveropties ongeldig sleutelserverprotocol (wij %d!=verwerkingsroutine %d) ongeldige lijstopties ongeldig min-cert-level; moet 1, 2 of 3 zijn ongeldig pakketongeldige wachtwoordzinongeldige voorkeuren in het persoonlijk versleutelingsalgoritme ongeldige voorkeuren in het persoonlijk compressiealgoritme ongeldige voorkeuren in het persoonlijk hashalgoritme ongeldig radix64-teken %02X overgeslagen ongeldig stampakket gevonden in proc_tree() ongeldige structuur van de OpenPGP-kaart (DO 0x93) ongeldige waarde ongeldige controleopties we raden u sterk aan om uw voorkeuren aan te passen en sleutel "%s" niet gevonden op de sleutelserver sleutel "%s" niet gevonden: %s sleutel %s heeft geen gebruikers-ID's sleutel %s gemarkeerd als uiterst betrouwbaar sleutel %s komt meer dan eens voor in de betrouwbaarheidsdatabank (trustdb) sleutel %s werd %lu seconde in de toekomst aangemaakt (afwijkende tijd of een probleem met de klok) sleutel %s werd %lu seconden in de toekomst aangemaakt (afwijkende tijd of een probleem met de klok) sleutel %s: "%s" %d nieuwe ondertekeningen sleutel %s: "%s" %d nieuwe subsleutels sleutel %s: "%s" %d nieuwe gebruikers-ID's sleutel %s: "%s" %d ondertekening opgeschoond sleutel %s: "%s" %d ondertekeningen opgeschoond sleutel %s: "%s" %d gebruikers-ID opgeschoond sleutel %s: "%s" %d gebruikers-ID's opgeschoond sleutel %s: "%s" 1 nieuwe ondertekening sleutel %s: "%s" 1 nieuwe subsleutel sleutel %s: "%s" 1 nieuwe gebruikers-ID sleutel %s: "%s" niet veranderd sleutel %s: "%s" intrekkingscertificaat toegevoegd sleutel %s: "%s" intrekkingscertificaat geïmporteerd sleutel %s: %s sleutel %s: sleutel van het type PGP 2.x - overgeslagen sleutel %s: beschadigingen in PKS-subsleutel hersteld sleutel %s: aanvaard als betrouwbare sleutel sleutel %s: niet door zichzelf ondertekende gebruikers-ID "%s" aanvaard sleutel %s: reeds in sleutelring van geheime sleutels sleutel %s: kan het originele sleutelblok niet vinden: %s sleutel %s: kan het originele sleutelblok niet lezen: %s sleutel %s: directe sleutelondertekening toegevoegd sleutel %s: stemt niet overeen met onze kopie sleutel %s: duplicaat van gebruikers-ID gevonden - samengevoegd sleutel %s: ongeldige rechtstreekse ondertekening van de sleutel sleutel %s: ongeldig intrekkingscertificaat: %s - afgewezen sleutel %s: ongeldig intrekkingscertificaat: %s - overgeslagen sleutel %s: ongeldige eigen handtekening bij gebruikers-ID "%s" sleutel %s: ongeldige band met de subsleutel sleutel %s: ongeldige intrekking van subsleutel sleutel %s: sleutelmateriaal op kaart - overgeslagen sleutel %s: nieuwe sleutel - overgeslagen sleutel %s: geen publieke sleutel - kan intrekkingscertificaat niet toepassen sleutel %s: geen publieke sleutel voor de vertrouwde sleutel - overgeslagen sleutel %s: geen subsleutel voor de band met de sleutel sleutel %s: geen subsleutel bij sleutelintrekking sleutel %s: geen subsleutel voor de ondertekening van de band met de subsleutel sleutel %s: geen subsleutel voor de ondertekening van de intrekking van de subsleutel sleutel %s: geen gebruikers-ID sleutel %s: geen gebruikers-ID voor ondertekening sleutel %s: geen geldige gebruikers-ID's sleutel %s: ondertekening (klasse 0x%02X) kan niet geëxporteerd worden - overgeslagen sleutel %s: niet beveiligd - overgeslagen sleutel %s: publieke sleutel "%s" geïmporteerd sleutel %s: publieke sleutel niet gevonden: %s sleutel %s: meervoudige band met de subsleutel verwijderd sleutel %s: meervoudige subsleutelintrekking verwijderd sleutel %s: intrekkingscertificaat op verkeerde plek - overgeslagen sleutel %s: geheime sleutel geïmporteerd sleutel %s: geheime sleutel niet gevonden: %s sleutel %s: geheime sleutel met ongeldig versleutelingsalgoritme %d - overgeslagen sleutel %s: geheime sleutel zonder publieke sleutel - overgeslagen sleutel %s: subsleutel overgeslagen sleutel %s: gebruikers-ID "%s" overgeslagen sleutel %s: ondertekening van subsleutel op de verkeerde plek - overgeslagen sleutel %s: onverwachte ondertekening klasse (0x%02X) - overgeslagen sleutel %s: niet ondersteund publieke-sleutelalgoritme sleutel %s: niet ondersteund publieke-sleutelalgoritme voor gebruikers-ID "%s" de sleutel bestaat reeds sleutel exporteren is mislukt: %s het aanmaken van de sleutel is voltooid (in %d seconden) de sleutel werd %lu seconde in de toekomst aangemaakt (afwijkende tijd of er is een probleem met de klok) de sleutel werd %lu seconden in de toekomst aangemaakt (afwijkende tijd of er is een probleem met de klok) sleutel staat niet als onveilig gemarkeerd - kan hem niet gebruiken met een gesimuleerde generator van willekeurige getallen (RNG)! sleutel niet gevonden op de sleutelserver bewerking op de sleutel is niet mogelijk: %s sleutelblokbron `%s': %s sleutelring `%s' is aangemaakt fout in de communicatie met de sleutelserver: %s sleutelserver verstuurde geen versie-informatie fout van de sleutelserversleutelserver geeft een interne fout opvragen van sleutelserver is mislukt: %s verversen vanaf sleutelserver is mislukt: %s opzoeking op sleutelserver is mislukt: %s verzenden naar sleutelserver is mislukt: %s sleutelserver reageert te langzaam sleutelgrootte is ongeldig; %u bit wordt gebruikt sleutelgrootte afgerond op %u bits regel is te langtoon alle beschikbare gegevenstoon en controleer sleutelondertekeningentoon sleutel en gebruikers-ID'stoon sleutelstoon sleutels en vingerafdrukkentoon sleutels en ondertekeningentoon voorkeuren (expert)toon voorkeuren (uitvoerig)toon geheime sleutelsmaak een ontkoppelde handtekeningmaak dateringsconflicten slechts een waarschuwing waardmake_keysig_packet is mislukt: %s manongeldige CRC ongeldig formaat van de omgevingsvariabele GPG_AGENT_INFO ongeldige gebruikers-idmarginaalmarginals-needed moet groter zijn dan 1 max-cert-depth moet liggen tussen 1 en 255 menu voor het wijzigen of ontgrendelen van de pincodeverplaats een reservesleutel naar een chipkaartverplaats een sleutel naar een chipkaartde ondertekening van de sleutel wordt naar de juiste plaats verplaatst nNgeneste ondertekeningen in klare tekst netwerkfoutnooitnooit nieuw configuratiebestand `%s' aangemaakt volgende controle van de betrouwbaarheidsdatabank (trustdb) is op %s no|neegeen '='-teken gevonden in de groepsdefinitie `%s' geen kaartgeen overeenkomstige publieke sleutel: %s geen gegevensgeen standaardsleutelring voor geheime sleutels: %s geen module gevonden om entropie te verzamelen geen verwerkingsroutine voor sleutelserverstelsel `%s' geen sleutelserveractiviteit! er is geen sleutelserver bekend (gebruik optie --keyserver) een controle van de betrouwbaarheidsdatabank (trustdb) is niet nodig een controle van de betrouwbaarheidsdatabank (trustdb) is niet nodig bij het betrouwbaarheidsmodel `%s' een bijwerking van de betrouwbaarheidsdatabank (trustdb) is niet nodig bij het betrouwbaarheidsmodel `%s' geen programma ingesteld om de foto te bekijken het uitvoeren van externe programma's wordt niet ondersteund er werden geen intrekkingssleutels gevonden voor "%s" geen geheime sleutel geen geheime subsleutel voor publieke subsleutel %s - overgeslagen geen ondertekening gevonden geen ondertekende gegevens een dergelijk gebruikers-id bestaat nietgeen uiterst betrouwbare sleutels gevonden geen geldige OpenPGP-gegevens gevonden. geen geldige geadresseerden geen sleutelring gevonden waarnaartoe geschreven kan worden: %s geen publieke sleutelring gevonden waarin geschreven kan worden: %s geen geheime sleutelring gevonden waarin geschreven kan worden: %s geen ontkoppelde ondertekening geen OpenPGP-kaartniet versleuteldniet geforceerdniet verwerktwordt niet ondersteundnoot: bestand random_seed is leeg noot: bestand random_seed wordt niet bijgewerkt oOoké, wij zijn de anonieme ontvanger. okay|oké|ok|OKde oude codering van de encryptiesleutel DEK wordt niet ondersteund ondertekening oude stijl (PGP 2.x) accepteer alleen het bijwerken van bestaande sleutelsbewerking is niet mogelijk zonder geïnitialiseerd veilig geheugen optiebestand `%s': %s originele bestandsnaam='%.*s' de betrouwbaarheidsgegevens werden gewist ontbrekende waarde voor mate van betrouwbaarheidwachtwoordzin is gemaakt met een onbekend hashalgoritme %d de wachtwoordzin is niet twee keer dezelfde; probeer opnieuwgelieve het commando --check-trustdb uit te voeren geef alstublieft een e-mailadres, dit is niet verplicht maar wel sterk aangeradenlees %s voor meer informatie zie http://www.gnupg.org/documentation/faqs.html voor meer informatie gelieve in de plaats "%s%s" te gebruiken wacht terwijl de sleutel wordt aangemaakt ... voorkeur `%s' heeft duplicaat voortijdig bestandseinde (eof) (in CRC) voortijdig bestandseinde (eof) (in de epiloog) voortijdig bestandseinde (eof) (geen CRC) toon de kaartstatusprobleem met het verwerken van het versleutelde pakket problemen met het agens - gebruik van het agens uitgeschakeld niet overschrijven zonder te vragenbeschermingsalgoritme %d%s wordt niet ondersteund beschermingshash %d wordt niet ondersteund publieke en geheime sleutel zijn aangemaakt en ondertekend. publieke sleutel %s is %lu seconde recenter dan de handtekening publieke sleutel %s is %lu seconden recenter dan de handtekening publieke sleutel %s niet gevonden: %s ontcijferen van publieke sleutel is mislukt : %s publieke sleutel komt niet overeen met de geheime sleutel! met de publieke sleutel versleutelde gegevens: goede DEK publieke sleutel is %s publieke sleutel niet gevondenpublieke sleutel van uiterst betrouwbare sleutel %s niet gevonden qQsSquit|stoppendit menu verlatenharnas bevat een 'quoted printable'-teken - wellicht werd een defecte MTA (mail-server) gebruikt om deze sleutel opnieuw te distribueren om mogelijke problemen met niet-overeenstemmende algoritmes te voorkomen leesfout in `%s': %s lezen van `%s' lezen van opties uit `%s' het lezen van de publieke sleutel is mislukt: %s lezen van standaardinvoer (stdin) ... reden van de intrekking: verversen van %d sleutels vanuit %s verversen van 1 sleutel vanuit %s verworpen door de importfilterverwijder zo veel mogelijk van de sleutel na het importerenverwijder zo veel mogelijk van de sleutel tijdens het exporterenverwijder sleutels uit de publieke sleutelringverwijder sleutels uit de geheime sleutelringverwijder de wachtwoordzin van de geëxporteerde subsleutelsverwijder onbruikbare delen van de sleutel na het importerenverwijder de onbruikbare delen van de sleutel tijdens het exporterenhet hernoemen van `%s' naar `%s' is mislukt: %s herstel beschadigingen die ontstaan zijn bij het importeren vanuit de pks-sleutelserveropvragen sleutel %s van %s opvragen sleutel %s van %s server %s bronlimietantwoord bevat de RSA-modulus niet antwoord bevat de publieke exponent van RSA niet antwoord bevat de gegevens van de publieke sleutel niet toelichting bij de intrekking: trek de sleutel of de geselecteerde subsleutels intrek de geselecteerde gebruikers-ID's intrek de handtekeningen op de geselecteerde gebruikers-ID's iningetrokkeningetrokken door uw sleutel %s op %s ingetrokken: %safgerond naar %u bits opslaan en stoppenzoek naar sleutels op een sleutelserverzoeken naar "%s" van %s zoeken naar "%s" van %s server %s namen zoeken van %s namen zoeken van %s server %s geheime sleutel "%s" niet gevonden: %s geheime sleutel %s: %s geheime sleutel staat reeds op de kaart de geheime sleutel is niet beschikbaarde onderdelen van de geheime sleutel zijn niet beschikbaar geheime delen van de sleutel zijn niet beschikbaar selecteer subsleutel Nselecteer gebruikers-ID Nhet gekozen hashalgoritme voor certificatie is ongeldig ongeldig versleutelingsalgoritme gekozen ongeldig compressiealgoritme gekozen ongeldig hashalgoritme gekozen Selecteren van openpgp is mislukt: %s versturen van sleutel %s naar %s versturen van sleutel %s naar %s server %s stel een notatie in voor de geselecteerde gebruikers-ID'sstel de lijst met voorkeuren in voor de geselecteerde gebruikers-ID'sstel de URL in van de voorkeurssleutelserver voor de geselecteerde gebruikers-ID'stoon IETF-standaardnotaties bij het weergeven van de lijst van handtekeningentoon IETF-standaardnotaties bij het controleren van de handtekeningtoon beheerderscommando'stoon alle notaties bij het weergeven van de lijst van handtekeningentoon alle notaties bij het controleren van de handtekeningtoon de vervaldata bij de lijst van handtekeningentoon de vingerafdruk van de sleuteltoon enkel de primaire gebruikers-ID bij het controleren van de handtekeningtoon richtlijn-URL's bij de lijst van handtekeningentoon richtlijn-URL's bij het controleren van de handtekeningtoon de URL van de voorkeurssleutelserver bij de lijst van handtekeningentoon de URL van de voorkeurssleutelserver bij het controleren van de handtekeningtoon de ingetrokken en vervallen subsleutels bij de lijst van sleutelstoon de ingetrokken en verlopen gebruikers-ID's bij de lijst van sleutelstoon de ingetrokken en vervallen gebruikers-ID's bij het controleren van de handtekeningtoon de geselecteerde identiteitsfoto'stoon de naam van de sleutelring bij de lijst van sleutelstoon deze hulptoon de geldigheid van de gebruikers-ID bij de lijst van sleutelstoon de geldigheid van het gebruikers-ID bij het controleren van de handtekeningtoon door de gebruiker aangeleverde notaties bij het weergeven van de lijst van handtekeningentoon door de gebruiker aangeleverde notaties bij het controleren van de handtekeningonderteken een sleutelonderteken een sleutel lokaalonderteken of bewerk een sleutelonderteken geselecteerde gebruikers-ID's [* zie hieronder voor gerelateerde commando's]onderteken geselecteerde gebruikers-ID's lokaalonderteken geselecteerde gebruikers-ID's met een handtekening die niet ingetrokken kan wordenonderteken geselecteerde gebruikers-ID's met een handtekening van vertrouwencontrole van de ondertekening onderdrukt momenteel gegenereerde handtekeningen: %lu ondertekend met uw sleutel %s op %s%s%s ondertekenen is mislukt: %s er gebeurde reeds een kruiscertificering van de ondertekening van subsleutel %s bezig met ondertekenen:"%s" overgeslagen: %s "%s" overgeslagen: waren duplicaten overgeslagen: publieke sleutel was reeds ingesteld overgeslagen: publieke sleutel was reeds als standaardontvanger ingesteld overgeslagen: geheime sleutel is al aanwezig blok van het type %d wordt overgeslagen de eigen ondertekening in v3-stijl van gebruikers-ID "%s" wordt overgeslagen autonome intrekking - gebruik "gpg --import" om ze toe te passen alleenstaande ondertekening van klasse 0x%02x sleutel opslaan op kaart is niet gelukt: %s subsleutel %s ondertekent niet en heeft dus geen kruiscertificering nodig de kritieke bit staat aan voor het subpakket van type %d symmetrische versleuteling van `%s' is mislukt: %s systeemfout bij het aanroepen van een extern programma: %s gebruik de sleutels van deze sleutelringtekstmodusde opgegeven URL voor certificeringsrichtlijnen is ongeldig de opgegeven URL voor de voorkeurssleutelserver is ongeldig de opgegeven URL voor ondertekeningsrichtlijnen is ongeldig de ondertekening kon niet geverifieerd worden. Denk eraan dat het bestand met handtekeningen (.sig of .asc) het eerste bestand moet zijn dat aan de commandolijn ingevoerd wordt. een geheime sleutel fungeert als publieke sleutel "%s"! dit is een Elgamal-sleutel aangemaakt met PGP. Het is niet veilig om er mee te ondertekenen!deze sleutel is al aangesteld als bevoegde intrekker dit kan veroorzaakt worden door het ontbreken van een eigen handtekening dit bericht kan mogelijk niet gebruikt worden door %s dit platform heeft tijdelijke bestanden nodig bij het aanroepen van externe programma's dateringsconflictwissel tussen de lijst met geheime en die met publieke sleutelsverander de parameter die al dan niet om een pincode vraagt bij het ondertekenente veel voorkeuren voor versleutelingsalgoritmes te veel voorkeuren voor compressies te veel voorkeuren voor hashalgoritmes te veel regels in de pk-cache - gedeactiveerd fout in de betrouwbaarheidsdatabank (trustdb)staat van betrouwbaarheid %lu is niet va het vereiste type %d staat van betrouwbaarheid %lu, vereist type %d: lezen mislukt: %s staat van betrouwbaarheid %lu, type %d: registreren mislukt: %s betrouwbaarheid: %sbetrouwbaarheidsdatabank (trustdb): element %lu: lseek is mislukt: %s betrouwbaarheidsdatabank (trustdb): element %lu: wegschrijven is mislukt (n=%d): %s betrouwbaarheidsdatabank (trustdb): transactie is te groot betrouwbaarheidsdatabank (trustdb): lseek is mislukt: %s betrouwbaarheidsdatabank (trustdb): lezen is mislukt (n=%d): %s betrouwbaarheidsdatabank (trustdb): synchronisatie mislukt: %s betrouwbaarheidsniveau bijgesteld naar VOLLEDIG op basis van geldige PKA-info betrouwbaarheidsniveau bijgesteld naar NOOIT op basis van slechte PKA-info uitersthet is niet mogelijk de identiteitsfoto te tonen! niet in staat om het externe programma uit te voeren kan programma `%s' niet uitvoeren: %s kan shell `%s' niet uitvoeren: %s kan JPEG-bestand `%s' niet openen: %s niet in staat om het antwoord van het externe programma te lezen: %s kon het pad naar het programma niet instellen op %s bijwerken van de versieregistratie van de betrouwbaarheidsdatabank (trustdb): wegschrijven is mislukt: %s het is onmogelijk om het IDEA-versleutelingsalgoritme te gebruiken voor al de sleutels waarnaar u versleutelt. kan onbekend betrouwbaarheidsmodel (%d) niet gebruiken - betrouwbaarheidsmodel %s wordt verondersteld ontgrendel de pincode met behulp van een Reset-Codeniet gecomprimeerd|geenniet gedefinieerdonverwacht harnas: onverwachte gegevensniet geïmplementeerd versleutelingsalgoritmeniet geïmplementeerd algoritme voor de publieke sleutelonbekendonbekende harnasintro: onbekend versleutelingsalgoritmeonbekend compressiealgoritmeonbekend configuratie-item `%s' onbekende standaardontvanger "%s" onbekend hashalgoritmeonbekend sleutelbeveiligingsalgoritme onbekende optie `%s' onbekend pakkettypeonbekend beschermingsalgoritme onbekend algoritme van de publieke sleutelonbekende handtekeningenklasseonbekende versieonnatuurlijk einde van het externe programma niet gespecificeerdniet ondersteunde URIonbruikbaar algoritme van de publieke sleutelonbruikbare publieke sleutelonbruikbare geheime sleutelalle sleutels bijwerken vanaf een sleutelserverbijwerken is mislukt: %s bijwerken van geheime gedeelte is mislukt: %s werk de database met betrouwbaarheidsinformatie bijgebruik: %sgebruik: gpg [opties] gebruik als uitvoerbestandgebruik de gebruikelijke tekstmodusgebruik de optie "--delete-secret-keys" om hem eerst te verwijderen. strikt OpenPGP-gedrag toepassengebruik tijdelijke bestanden om gegevens door te geven aan de sleutelserverhelpersgebruik deze gebruikers-ID om te ondertekenen of te ontcijferengebruikers-ID "%s" is reeds ingetrokken gebruikers-ID: "%s" betrouwbaarheidsmodel %s wordt gebruikt versleutelingsalgoritme %s wordt gebruikt de standaardpincode wordt gebruikt voor %s subsleutel %s wordt gebruikt in plaats van primaire sleutel %s valideereer ondertekeningen met PKA-gegevensgeldigheid: %sgedetailleerdcontroleren van de pincode van de beheerder wordt momenteel verboden met dit commando controle van CHV%d is mislukt: %s controleer een ondertekeningcontroleer de pincode en toon alle gegevenswachten op het vergrendelen van `%s'... zwakke sleuteler werd een zwakke sleutel aangemaakt - er wordt nogmaals geprobeerd vreemde lengte voor een versleutelde sessiesleutel (%d) zal met onveilig geheugen niet werken wegens %s directe ondertekening wordt weggeschreven de ondertekening van de band met de sleutel wordt weggeschreven wegschrijven van nieuwe sleutel publieke sleutel wordt weggeschreven naar `%s' een stukje van de geheime sleutel wordt weggeschreven naar `%s' geheime sleutel wordt weggeschreven naar `%s' eigen handtekening wordt weggeschreven aan het schrijven naar `%s' schrijven naar standaarduitvoer er werd een verkeerde geheime sleutel gebruiktyYjJyes|jau kunt enkel een ondertekening in klare tekst maken met een sleutel van het type PGP 2.x als u in modus --pgp2 bent u kunt enkel een ontkoppelde ondertekening maken met een sleutel van het type PGP 2.x als u in modus --pgp2 bent U kunt enkel versleutelen naar RSA-sleutels van 2048 bits of minder in de --pgp2-modus enkel ontkoppelde ondertekeningen of handtekeningen in klare tekst zijn mogelijk in de modus --pgp2 U kunt uw voorkeuren bijwerken met: gpg --edit-key %s updpref save u kunt miet tegelijk ondertekenen en versleutelen in de modus --pgp2 u kunt een sleutel niet aanstellen als zijn eigen bevoegde intrekker u kunt --symmetric --encrypt niet in %s-modus gebruiken u kunt --symmetric --encrypt niet gebruiken samen met --s2k-mode 0 u kunt --symmetric --sign --encrypt niet in %s-modus gebruiken u kunt --symmetric --sign --encrypt niet gebruiken samen met --s2k-mode 0 u vond een bug ... (%s:%d) u mag %s niet gebruiken in de %s-modus u mag versleutelingsalgoritme `%s' niet gebruiken in %s-modus u mag compressiealgoritme `%s' niet gebruiken in %s-modus u mag hashalgoritme `%s' niet gebruiken in %s-modus U moet bestanden (en geen pipe) gebruiken in de modus --pgp2. |AN|Nieuwe pincode voor de beheerder|A|Gelieve de pincode van de beheerder in te voeren|A|Graag invoer van de beheerderspincode%%0A[resterende pogingen: %d]|FD|schrijf statusinformatie naar deze FD|NAAM|versleutel voor NAAM|N|Nieuwe pincode|N|stel compressieniveau N in (0 voor geen)|RN|Nieuwe Reset-Code|[bestand]|maak een ondertekening in klare tekst |[bestand]|maak een ondertekening|algo [bestanden]|hashwaarden voor de bestanden tonen||Gelieve de code in te voeren||Graag invoer van de code%%0A[gemaakte ondertekeningen: %lu]||Gelieve de Reset-Code voor de kaart in te voerengnupg-1.4.20/po/nl.po0000644000175000017500000060333512635457220011246 00000000000000# Dutch translations for gnupg package. # Copyright (C) 2006 Free Software Foundation, Inc. # This file is distributed under the same license as the gnupg package. # Automatically generated, 2006. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # Frans Spiesschaert , 2014. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.6\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2014-11-24 12:23+0100\n" "Last-Translator: Frans Spiesschaert \n" "Language-Team: Debian Dutch l10n Team \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "kan geen priemgetal genereren met pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "kan geen priemgetal genereren van minder dan %d bits\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "geen module gevonden om entropie te verzamelen\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "kan `%s' niet vergrendelen: %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "wachten op het vergrendelen van `%s'...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "kan `%s' niet openen: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "kan status van `%s' niet vaststellen: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' is geen gewoon bestand - wordt genegeerd\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "noot: bestand random_seed is leeg\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" "WAARSCHUWING: ongeldige grootte van het bestand random_seed - wordt\n" "niet gebruikt\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "kan `%s' niet lezen: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "noot: bestand random_seed wordt niet bijgewerkt\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "kan `%s' niet aanmaken: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "kan `%s' niet wegschrijven: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "kan `%s' niet afsluiten: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "WAARSCHUWING: er wordt een onveilige generator van willekeurige getallen " "gebruikt!!\n" #: cipher/random.c:894 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 "" "De generator van willekeurige getallen is alleen maar een zootje ongeregeld\n" "om iets te hebben dat werkt - het is niet echt een sterk programma!\n" "\n" "GEBRUIK DE DOOR DIT PROGRAMMA GEGENEREERDE GEGEVENS NIET!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Ogenblik geduld, entropie wordt verzameld. Werk intussen wat.\n" "Het zal er niet enkel voor zorgen dat u zich niet gaat vervelen, het\n" "zal tegelijk de kwaliteit van de entropie verbeteren.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Er zijn niet genoeg willekeurige bytes beschikbaar. Doe wat ander\n" "werk om het OS de gelegenheid te geven meer entropie te verzamelen!\n" "(heb nog %d bytes nodig)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "opslaan van de vingerafdruk is mislukt: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "opslaan van de aanmaakdatum is mislukt: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "het lezen van de publieke sleutel is mislukt: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "antwoord bevat de gegevens van de publieke sleutel niet\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "antwoord bevat de RSA-modulus niet\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "antwoord bevat de publieke exponent van RSA niet\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "de standaardpincode wordt gebruikt voor %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "de standaardpincode gebruiken voor %s is mislukt: %s - standaard\n" "wordt in het vervolg niet meer gebruikt\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Graag invoer van de code%%0A[gemaakte ondertekeningen: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Gelieve de code in te voeren" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "Terugoproep door de code gaf een fout: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "pincode voor CHV%d is te kort; die moet minimaal %d lang zijn\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "controle van CHV%d is mislukt: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "fout bij het ophalen van de CHV-status uit de kaart\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "kaart is permanent vergrendeld!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "beheerder heeft %d resterende pogingen om de pincode in te geven\n" "voordat de kaart permanent vergrendeld wordt\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Graag invoer van de beheerderspincode%%0A[resterende pogingen: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Gelieve de pincode van de beheerder in te voeren" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "toegang tot beheerderscommando's is niet ingesteld\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Reset-Code niet of niet langer beschikbaar\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Gelieve de Reset-Code voor de kaart in te voeren" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Reset-Code is te kort; die moet minimaal %d lang zijn\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Nieuwe Reset-Code" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Nieuwe pincode voor de beheerder" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Nieuwe pincode" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "fout bij het verkrijgen van een nieuwe pincode: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "fout bij het lezen van toepassingsgegevens\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "fout bij het lezen van de vingerafdruk DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "de sleutel bestaat reeds\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "de bestaande sleutel zal vervangen worden\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "aanmaken van nieuwe sleutel\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "wegschrijven van nieuwe sleutel\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "aanmaakdatum ontbreekt\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSA-modulus ontbreekt of heeft niet een grootte van %d bits\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "publieke exponent van RSA ontbreekt of is groter dan %d bits\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "priemgetal %s van RSA ontbreekt of heeft niet de grootte van %d bits\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "opslaan van de sleutel is mislukt: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "wacht terwijl de sleutel wordt aangemaakt ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "aanmaken van de sleutel is mislukt\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "het aanmaken van de sleutel is voltooid (in %d seconden)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "ongeldige structuur van de OpenPGP-kaart (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "vingerafdruk op de kaart komt niet overeen met de gevraagde\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "de kaart ondersteunt het hashalgoritme %s niet\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "momenteel gegenereerde handtekeningen: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "controleren van de pincode van de beheerder wordt momenteel\n" "verboden met dit commando\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "kan geen toegang krijgen tot %s - ongeldige OpenPGP-kaart?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "harnas: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "ongeldige harnasintro: " #: g10/armor.c:459 msgid "armor header: " msgstr "harnasintro: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "ongeldige intro van de handtekening in klare tekst\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "onbekende harnasintro: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "geneste ondertekeningen in klare tekst\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "onverwacht harnas: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "door liggend streepje beschermde regel is ongeldig: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "ongeldig radix64-teken %02X overgeslagen\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "voortijdig bestandseinde (eof) (geen CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "voortijdig bestandseinde (eof) (in CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "ongeldige CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC-fout; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "voortijdig bestandseinde (eof) (in de epiloog)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "fout in epiloogregel\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "geen geldige OpenPGP-gegevens gevonden.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "ongeldig harnas: de regel is langer dan %d tekens\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "harnas bevat een 'quoted printable'-teken - wellicht werd\n" "een defecte MTA (mail-server) gebruikt\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP-kaart is niet beschikbaar: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "OpenPGP-kaartnummer %s gevonden\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "dit is niet mogelijk in automatische modus\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Dit commando is enkel beschikbaar voor kaarten van versie 2\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Uw keuze? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[niet ingesteld]" #: g10/card-util.c:512 msgid "male" msgstr "man" #: g10/card-util.c:513 msgid "female" msgstr "vrouw" #: g10/card-util.c:513 msgid "unspecified" msgstr "niet gespecificeerd" #: g10/card-util.c:540 msgid "not forced" msgstr "niet geforceerd" #: g10/card-util.c:540 msgid "forced" msgstr "geforceerd" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Fout: Alleen platte ASCII is momenteel toegestaan.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Fout: U mag het teken \"<\" niet gebruiken.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Fout: Dubbele spaties gebruiken is niet toegestaan.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Achternaam van de kaarthouder: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Voornaam van de kaarthouder: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Fout: Volledige naam is te lang (de limiet is %d tekens).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL voor het ophalen van de publieke sleutel: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Fout: URL is te lang (de limiet is %d tekens).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "fout bij het toewijzen van voldoende geheugen: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "fout bij het lezen van `%s': %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "fout bij het wegschrijven van `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Aanmeldgegevens (accountnaam): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Fout: Aanmeldgegevens zijn te lang (de limiet is %d tekens).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Geheime DO-gegevens: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Fout: Geheime DO is te lang (de limiet is %d tekens).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Taalvoorkeuren: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Fout: ongeldige lengte van de voorkeursinformatie.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Fout: ongeldige tekens in voorkeursinformatie.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Geslacht ((M)Man, (F)Vrouw of spatie): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Fout: Ongeldig antwoord.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA-vingerafdruk: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Fout: ongeldig opgemaakte vingerafdruk.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "bewerking op de sleutel is niet mogelijk: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "geen OpenPGP-kaart" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "fout bij het ophalen van de gegevens over de huidige sleutel: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Bestaande sleutel vervangen? (j/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "NOOT: Het kan niet gegarandeerd worden dat de kaart de gevraagde grootte\n" " ondersteunt. Indien het aanmaken van de sleutel niet lukt, moet u de\n" " documentatie bij uw kaart raadplegen om na te gaan welke groottes\n" " toegelaten zijn.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Welke sleutelgrootte wilt u voor de Ondertekeningssleutel? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Welke sleutelgrootte wilt u voor de Encryptiesleutel? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Welke sleutelgrootte wilt u voor de Authenticatiesleutel? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "afgerond naar %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s sleutelgrootte moet vallen binnen het bereik %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" "De kaart zal nu opnieuw ingesteld worden om een sleutel van %u bits\n" "aan te maken\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "" "fout bij het veranderen van de grootte van sleutel %d naar %u bits: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Een externe reservekopie maken van de encryptiesleutel? (J/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "NOOT: sleutels worden al op de kaart bewaard!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Bestaande sleutels vervangen? (j/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Gelieve te noteren dat de fabrieksinstellingen voor de pincodes\n" "de volgende zijn:\n" " pincode = `%s' Beheerderspincode = `%s'\n" "U wordt aangeraden deze te wijzigen met het commando --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Selecteer het type sleutel dat aangemaakt moet worden:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Ondertekeningssleutel\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Encryptiesleutel\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Authenticatiesleutel\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Ongeldige keuze.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Geef aan waar de sleutel moet opgeslagen worden:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "onbekend sleutelbeveiligingsalgoritme\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "geheime delen van de sleutel zijn niet beschikbaar\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "geheime sleutel staat reeds op de kaart\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "fout bij het wegschrijven van de sleutel naar de kaart: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "dit menu verlaten" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "toon beheerderscommando's" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "toon deze hulp" #: g10/card-util.c:1687 msgid "list all available data" msgstr "toon alle beschikbare gegevens" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "verander de naam van de kaarthouder" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "verander de URL waarvan de sleutel opgehaald moet worden" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "haal de sleutel op van de URL die op de kaart vermeld staat" #: g10/card-util.c:1693 msgid "change the login name" msgstr "verander de aanmeldnaam" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "verander de taalvoorkeuren" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "verander het geslacht van de kaarthouder" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "verander een CA-vingerafdruk" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" "verander de parameter die al dan niet om een pincode vraagt\n" "bij het ondertekenen" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "maak nieuwe sleutels aan" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "menu voor het wijzigen of ontgrendelen van de pincode" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "controleer de pincode en toon alle gegevens" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "ontgrendel de pincode met behulp van een Reset-Code" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/kaart> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Enkel de beheerder kan dit commando uitvoeren\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Beheerderscommando's zijn toegestaan\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Beheerderscommando's zijn niet toegestaan\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Ongeldig commando (probeer \"help\")\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "kaartlezer is niet beschikbaar\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Plaats de kaart en druk op enter of op 'c' om te cancelen: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "Selecteren van openpgp is mislukt: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Verwijder de huidige kaart en plaats de kaart met serienummer:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Druk op enter als u klaar bent of op 'c' om te cancelen: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Voer de nieuwe pincode voor de beheerder in: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Voer nieuwe pincode in: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Voer de pincode voor de beheerder in: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Voer de pincode in: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Herhaal deze pincode: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "Pincode was niet tweemaal hetzelfde; probeer opnieuw" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "kan `%s' niet openen\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output werkt niet voor dit commando\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "sleutel \"%s\" niet gevonden: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "fout tijdens het lezen van sleutelblok: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(tenzij u de sleutel via de vingerafdruk opgeeft)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "" "dit is onmogelijk in automatische modus zonder de parameter \"--yes\"\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Deze sleutel uit de sleutelring verwijderen? (j/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Dit is een geheime sleutel! - echt verwijderen? (j/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "verwijderen van sleutelblok is mislukt: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "de betrouwbaarheidsgegevens werden gewist\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "een geheime sleutel fungeert als publieke sleutel \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" "gebruik de optie \"--delete-secret-keys\" om hem eerst te verwijderen.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "fout bij het maken van de wachtwoordzin: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "kan geen symmetrisch ESK-pakket gebruiken omwille van de S2K-modus\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "versleutelingsalgoritme %s wordt gebruikt\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' is reeds gecomprimeerd\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "WAARSCHUWING: `%s' is een leeg bestand\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "U kunt enkel versleutelen naar RSA-sleutels van 2048 bits\n" "of minder in de --pgp2-modus \n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "lezen van `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "het is onmogelijk om het IDEA-versleutelingsalgoritme te gebruiken\n" "voor al de sleutels waarnaar u versleutelt.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "WAARSCHUWING: het forceren van het symmetrisch versleutelingsalgoritme %s " "(%d)\n" "gaat in tegen de voorkeuren van de ontvanger\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "WAARSCHUWING: het forceren van het compressiealgoritme %s (%d) gaat in\n" "tegen de voorkeuren van de ontvanger\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "het forceren van het symmetrisch versleutelingsalgoritme %s (%d)\n" "gaat in tegen de voorkeuren van de ontvanger\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "u mag %s niet gebruiken in de %s-modus\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s versleuteld voor: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s versleutelde gegevens\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "versleuteld met onbekend algoritme %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "WAARSCHUWING: het bericht is versleuteld met een zwakke sleutel in het\n" "symmetrische versleutelingsalgoritme.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "probleem met het verwerken van het versleutelde pakket\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "het uitvoeren van externe programma's wordt niet ondersteund\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "kan map `%s' niet maken: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "het aanroepen van externe programma's is uitgeschakeld\n" "omdat de toegangsrechten van het optiebestand onveilig zijn\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "dit platform heeft tijdelijke bestanden nodig\n" "bij het aanroepen van externe programma's\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "kan programma `%s' niet uitvoeren: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "kan shell `%s' niet uitvoeren: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "systeemfout bij het aanroepen van een extern programma: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "onnatuurlijk einde van het externe programma\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "niet in staat om het externe programma uit te voeren\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "niet in staat om het antwoord van het externe programma te lezen: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" "WAARSCHUWING: tijdelijk bestand (%s) `%s' kan niet verwijderd worden: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "WAARSCHUWING: tijdelijke map `%s' kan niet verwijderd worden: %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "exporteer handtekeningen die gemarkeerd staan als uitsluitend lokaal" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" "exporteer identiteitsattributen van gebruikers (meestal identiteitsfoto's)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "exporteer intrekkingssleutels die als \"gevoelig\" gemarkeerd zijn" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "verwijder de wachtwoordzin van de geëxporteerde subsleutels" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "verwijder de onbruikbare delen van de sleutel tijdens het exporteren" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "verwijder zo veel mogelijk van de sleutel tijdens het exporteren" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "het exporteren van geheime sleutels is niet toegestaan\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "sleutel %s: niet beveiligd - overgeslagen\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "sleutel %s: sleutel van het type PGP 2.x - overgeslagen\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "sleutel %s: sleutelmateriaal op kaart - overgeslagen\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "sta op het punt om een onbeveiligde subsleutel te exporteren\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "wegnemen van de beveiliging van de subsleutel is mislukt: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" "WAARSCHUWING: geheime sleutel %s heeft geen eenvoudige SK-controlesom\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "WAARSCHUWING: er werd niets geëxporteerd\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Commando's:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[bestand]|maak een ondertekening" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[bestand]|maak een ondertekening in klare tekst " #: g10/gpg.c:392 msgid "make a detached signature" msgstr "maak een ontkoppelde handtekening" #: g10/gpg.c:393 msgid "encrypt data" msgstr "versleutel gegevens" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "enkel versleutelen met een symmetrisch versleutelingsalgoritme" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "ontcijfer gegevens (standaard)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "controleer een ondertekening" #: g10/gpg.c:401 msgid "list keys" msgstr "toon sleutels" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "toon sleutels en ondertekeningen" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "toon en controleer sleutelondertekeningen" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "toon sleutels en vingerafdrukken" #: g10/gpg.c:406 msgid "list secret keys" msgstr "toon geheime sleutels" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "maak een nieuw sleutelpaar aan" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "verwijder sleutels uit de publieke sleutelring" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "verwijder sleutels uit de geheime sleutelring" #: g10/gpg.c:411 msgid "sign a key" msgstr "onderteken een sleutel" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "onderteken een sleutel lokaal" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "onderteken of bewerk een sleutel" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "maak een intrekkingscertificaat aan" #: g10/gpg.c:416 msgid "export keys" msgstr "exporteer sleutels" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exporteer sleutels naar een sleutelserver" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importeer sleutels van een sleutelserver" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "zoek naar sleutels op een sleutelserver" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "alle sleutels bijwerken vanaf een sleutelserver" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "sleutels importeren/samenvoegen" #: g10/gpg.c:429 msgid "print the card status" msgstr "toon de kaartstatus" #: g10/gpg.c:430 msgid "change data on a card" msgstr "wijzig gegevens op een kaart" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "wijzig de pincode van een kaart" #: g10/gpg.c:440 msgid "update the trust database" msgstr "werk de database met betrouwbaarheidsinformatie bij" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [bestanden]|hashwaarden voor de bestanden tonen" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opties:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "creëer uitvoer in ascii-harnas" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAAM|versleutel voor NAAM" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "gebruik deze gebruikers-ID om te ondertekenen of te ontcijferen" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|stel compressieniveau N in (0 voor geen)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "gebruik de gebruikelijke tekstmodus" #: g10/gpg.c:486 msgid "use as output file" msgstr "gebruik als uitvoerbestand" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "gedetailleerd" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "maak geen wijzigingen" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "niet overschrijven zonder te vragen" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "strikt OpenPGP-gedrag toepassen" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "berichten aanmaken die compatibel zijn met PGP 2.x" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(zie de man-pagina voor een complete lijst van alle commando's en opties)\n" #: g10/gpg.c:576 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" "Voorbeelden:\n" "\n" " -se -r Bob [bestand] onderteken en versleutel voor gebruiker Bob\n" " --clearsign [bestand] maak een ondertekening in klare tekst\n" " --detach-sign [bestand] maak een ontkoppelde ondertekening\n" " --list-keys [namen] toon sleutels\n" " --fingerprint [namen] toon vingerafdrukken\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Fouten graag melden aan .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Gebruik: gpg [opties] [bestanden] (-h voor hulp)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Syntaxis: gpg [opties] [bestanden]\n" "Onderteken, controleer, versleutel of ontcijfer\n" "Standaardactie is afhankelijk van de gegevensinvoer\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Ondersteunde algoritmes:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Publieke sleutel: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Versleutelingsalgoritme: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hashalgoritme: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compressiealgoritme: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "gebruik: gpg [opties] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "conflicterende commando's\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "geen '='-teken gevonden in de groepsdefinitie `%s'\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "WAARSCHUWING: onveilige eigendomsinstellingen van thuismap `%s'\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "" "WAARSCHUWING: onveilige eigendomsinstellingen van configuratiebestand `%s'\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "WAARSCHUWING: toegangsrechten van thuismap `%s' zijn onveilig\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "" "WAARSCHUWING: toegangsrechten van configuratiebestand `%s' zijn onveilig\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "WAARSCHUWING: de eigendomsinstellingen van de map\n" "waarin de thuismap `%s' zich bevindt, zijn onveilig\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "WAARSCHUWING: de eigendomsinstellingen van de map waarin\n" "configuratiebestand `%s' zich bevindt, zijn onveilig\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "WAARSCHUWING: de toegangsrechten van de map waarin\n" "de thuismap `%s' zich bevindt, zijn onveilig\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "WAARSCHUWING: de toegangsrechten van de map waarin\n" "configuratiebestand `%s' zich bevindt, zijn onveilig\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "onbekend configuratie-item `%s'\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "toon identiteitsfoto's bij de lijst van sleutels" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "toon richtlijn-URL's bij de lijst van handtekeningen" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "toon alle notaties bij het weergeven van de lijst van handtekeningen" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" "toon IETF-standaardnotaties bij het weergeven van de lijst van handtekeningen" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" "toon door de gebruiker aangeleverde notaties\n" "bij het weergeven van de lijst van handtekeningen" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "" "toon de URL van de voorkeurssleutelserver bij de lijst van handtekeningen" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "toon de geldigheid van de gebruikers-ID bij de lijst van sleutels" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" "toon de ingetrokken en verlopen gebruikers-ID's bij de lijst van sleutels" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "toon de ingetrokken en vervallen subsleutels bij de lijst van sleutels" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "toon de naam van de sleutelring bij de lijst van sleutels" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "toon de vervaldata bij de lijst van handtekeningen" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOOT: oud bestand `%s' met standaardopties werd genegeerd\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOOT: geen bestand `%s' met standaardopties\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "optiebestand `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "lezen van opties uit `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOOT: %s is niet bedoeld voor normaal gebruik!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "`%s' is geen geldige vervaldatum voor handtekeningen\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "`%s' is geen geldige tekenset\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "kon de URL van de sleutelserver niet ontleden\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: ongeldige sleutelserveropties\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "ongeldige sleutelserveropties\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: ongeldige importopties\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "ongeldige importopties\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: ongeldige exportopties\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "ongeldige exportopties\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: ongeldige lijstopties\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "ongeldige lijstopties\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "toon identiteitsfoto's bij het controleren van de handtekening" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "toon richtlijn-URL's bij het controleren van de handtekening" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "toon alle notaties bij het controleren van de handtekening" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "toon IETF-standaardnotaties bij het controleren van de handtekening" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" "toon door de gebruiker aangeleverde notaties bij het controleren van de " "handtekening" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "" "toon de URL van de voorkeurssleutelserver bij het controleren van de " "handtekening" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "" "toon de geldigheid van het gebruikers-ID bij het controleren van de " "handtekening" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" "toon de ingetrokken en vervallen gebruikers-ID's\n" "bij het controleren van de handtekening" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "" "toon enkel de primaire gebruikers-ID bij het controleren van de handtekening" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "valideereer ondertekeningen met PKA-gegevens" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" "verhoog de betrouwbaarheid van ondertekeningen met geldige PKA-gegevens" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: ongeldige controleopties\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "ongeldige controleopties\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "kon het pad naar het programma niet instellen op %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: lijst voor het automatisch opzoeken van sleutels is ongeldig\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "lijst voor het automatisch opzoeken van sleutels is ongeldig\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "WAARSCHUWING: het programma zou een core-dump-bestand kunnen maken!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "WAARSCHUWING: %s heeft voorrang op %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s mag niet gebruikt worden met %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s is zinloos in combinatie met %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "NOOT: %s is niet beschikbaar in deze versie\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "zal met onveilig geheugen niet werken wegens %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "enkel ontkoppelde ondertekeningen of handtekeningen in klare tekst\n" "zijn mogelijk in de modus --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "u kunt miet tegelijk ondertekenen en versleutelen in de modus --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "U moet bestanden (en geen pipe) gebruiken in de modus --pgp2.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" "om een bericht te versleutelen in de modus --pgp2\n" "is het IDEA-versleutelingsalgoritme nodig\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "ongeldig versleutelingsalgoritme gekozen\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "ongeldig hashalgoritme gekozen\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "ongeldig compressiealgoritme gekozen\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "het gekozen hashalgoritme voor certificatie is ongeldig\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed moet groter zijn dan 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed moet groter zijn dan 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth moet liggen tussen 1 en 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "ongeldig default-cert-level; moet 0, 1, 2 of 3 zijn\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "ongeldig min-cert-level; moet 1, 2 of 3 zijn\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOOT: eenvoudige S2K-modus (0) wordt sterk afgeraden\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ongeldige S2K-modus; moet 0, 1 of 3 zijn\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "ongeldige standaardvoorkeuren\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "ongeldige voorkeuren in het persoonlijk versleutelingsalgoritme\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "ongeldige voorkeuren in het persoonlijk hashalgoritme\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "ongeldige voorkeuren in het persoonlijk compressiealgoritme\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s werkt nog niet met %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "u mag versleutelingsalgoritme `%s' niet gebruiken in %s-modus\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "u mag hashalgoritme `%s' niet gebruiken in %s-modus\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "u mag compressiealgoritme `%s' niet gebruiken in %s-modus\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "" "initialiseren van de TrustDB (database van vertrouwen) is mislukt: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "WAARSCHUWING: er werden ontvangers (-r) opgegeven\n" "zonder dat versleuteling met een publieke sleutel toegepast wordt\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [bestandsnaam]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [bestandsnaam]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "symmetrische versleuteling van `%s' is mislukt: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [bestandsnaam]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [bestandsnaam]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "u kunt --symmetric --encrypt niet gebruiken samen met --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "u kunt --symmetric --encrypt niet in %s-modus gebruiken\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [bestandsnaam]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [bestandsnaam]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [bestandsnaam]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" "u kunt --symmetric --sign --encrypt niet gebruiken samen met --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "u kunt --symmetric --sign --encrypt niet in %s-modus gebruiken\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [bestandsnaam]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [bestandsnaam]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [bestandsnaam]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key gebruikers-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key gebruikers-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key gebruikers-id [commando's]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [gebruikers-id] [sleutelring]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "verzenden naar sleutelserver is mislukt: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "opvragen van sleutelserver is mislukt: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "sleutel exporteren is mislukt: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "opzoeking op sleutelserver is mislukt: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "verversen vanaf sleutelserver is mislukt: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "ontmantelen van harnas is mislukt: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "opnieuw aanmaken van harnas is mislukt: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "ongeldig hashalgoritme `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[bestandsnaam]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "U kunt uw bericht typen ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "de opgegeven URL voor certificeringsrichtlijnen is ongeldig\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "de opgegeven URL voor ondertekeningsrichtlijnen is ongeldig\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "de opgegeven URL voor de voorkeurssleutelserver is ongeldig\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "te veel regels in de pk-cache - gedeactiveerd\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[Gebruikers-ID niet gevonden]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "sleutel %s: geheime sleutel zonder publieke sleutel - overgeslagen\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "`%s' automatisch opgehaald via %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Ongeldige sleutel %s is geldig gemaakt met --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "geen geheime subsleutel voor publieke subsleutel %s - overgeslagen\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "subsleutel %s wordt gebruikt in plaats van primaire sleutel %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "wees wat stiller" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "gebruik de sleutels van deze sleutelring" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "maak dateringsconflicten slechts een waarschuwing waard" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|schrijf statusinformatie naar deze FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Gebruik: gpgv [opties] [bestanden] (-h voor hulp)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Syntaxis: gpg [opties] [bestanden]\n" "Controleer ondertekeningen via gekende en vertrouwde sleutels\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Het is aan u om hier een waarde toe te kennen; deze waarde zal nooit\n" "naar een derde partij geëxporteerd worden. We hebben ze nodig om het\n" "netwerk-van-vertrouwen (web-of-trust) te implementeren.\n" "Dit heeft niets te maken met het (impliciet aangemaakte)\n" "netwerk-van-certificaten (web-of-certificates)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Om het netwerk-van-vertrouwen op te bouwen, moet GnuPG weten welke sleutels\n" "volledig vertrouwd worden. Dit zijn gewoonlijk de sleutels waarvoor u ook\n" "toegang tot de geheime sleutel heeft. Antwoord \"yes\" om deze sleutel in " "te\n" "stellen als volledig te vertrouwen.\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Als u deze niet-vertrouwde sleutel toch wilt gebruiken, antwoord dan \"yes\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Voer het gebruikers-ID in van de ontvanger van dit bericht." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Selecteer het te gebruiken algoritme.\n" "\n" "DSA (ook bekend als DSS) is het algoritme voor digitale handtekeningen\n" "(Digital Signature Algorithm) dat enkel voor ondertekeningen kan gebruikt\n" "worden.\n" "\n" "Elgamal is een algoritme enkel bedoeld voor versleuteling.\n" "\n" "RSA kan gebruikt worden voor ondertekeningen en versleuteling.\n" "\n" "De eerste (primaire) sleutel moet altijd een sleutel zijn waarmee\n" "ondertekend kan worden." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "In het algemeen is het geen goed idee om dezelfde sleutel te gebruiken\n" "om te ondertekenen en te versleutelen. Dit algoritme zou enkel in bepaalde\n" "domeinen gebruikt mogen worden. Vraag eerst een beveiligingsspecialist om\n" "advies." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Voer de lengte van de sleutel in" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Antwoord \"yes\" (Ja) of \"no\" (nee)" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Geef de vereiste waarde op, zoals getoond in de vraag.\n" "Het is mogelijk om een datum in ISO-formaat (JJJJ-MM-DD) in te voeren, maar " "u\n" "zult geen passende foutmelding krijgen - het systeem zal daarentegen " "proberen\n" "om de ingevoerde waarde te interpreteren als een interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Geef de naam van de sleutelhouder" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" "geef alstublieft een e-mailadres, dit is niet verplicht maar wel\n" "sterk aangeraden" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Geef eventueel een toelichting. Dit is facultatief" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N om de de naam te veranderen.\n" "C om de toelichting te veranderen.\n" "E om het e-mailadres te veranderen.\n" "O om door te gaan met het aanmaken van de sleutel.\n" "Q om het aanmaken van de sleutel af te breken." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" "Antwoord \"yes\" (of alleen \"y\") als het oké is om de subsleutel te maken." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Als U een gebruikers-ID koppelt aan een sleutel, moet U eerst nagaan of de\n" "sleutel echt van de persoon is die in het gebruikers-ID genoemd wordt.\n" "Voor anderen is het van belang te weten dat U dit grondig gecontroleerd " "heeft.\n" "\n" "\"0\" betekent dat U zich niet uitspreekt over hoe grondig U deze sleutel\n" " heeft gecontroleerd\n" "\n" "\"1\" betekent dat U gelooft dat de sleutel eigendom is van de persoon die\n" " beweert er eigenaar van te zijn, maar dat u de sleutel niet " "controleerde\n" " of dit niet kon doen. Dit is zinvol in geval van een\n" " \"persona\"-verificatie bij het ondertekenen van de sleutel van het\n" " pseudoniem van een gebruiker.\n" "\n" "\"2\" betekent dat U de sleutel vluchtig gecontroleerd heeft. Dit kan\n" " bijvoorbeeld betekenen dat u de vingerafdruk van de sleutel " "gecontroleerd\n" " heeft en de gebruikers-ID getoetst heeft aan een identiteitsfoto.\n" "\n" "\"3\" betekent dat u de sleutel uitvoerig heeft gecontroleerd. Dit kan\n" " bijvoorbeeld betekenen dat U de vingerafdruk van de sleutel persoonlijk\n" " gecontroleerd heeft bij de eigenaar van de sleutel, en dat u\n" " gecontroleerd heeft aan de hand van een foto op een moeilijk te " "vervalsen\n" " document (zoals een paspoort) dat de naam van de eigenaar van de " "sleutel\n" " overeenkomt met de naam in de gebruikers-ID op de sleutel, en dat u\n" " tenslotte gecontroleerd heeft (via het uitwisselen van e-mail) dat het\n" " e-mailadres op de sleutel effectief van de eigenaar van de sleutel is.\n" "\n" "Noteer dat de gegeven voorbeelden voor de niveaus 2 en 3 *slechts*\n" "voorbeelden zijn. Uiteindelijk moet U zelf uitmaken wat voor u de betekenis\n" "is van \"vluchtig\" en \"uitvoerig\" bij het ondertekenen van sleutels van\n" "anderen.\n" "\n" "Indien u twijfelt over wat het correcte antwoord is, antwoord dan \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Antwoord \"yes\" als U ALLE gebruikers-ID's wilt tekenen." #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Antwoord \"yes\" als u werkelijk deze gebruikers-ID wilt wissen.\n" "Alle bijbehorende certificaten worden ook gewist!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Antwoord \"yes\" als het oké is om de subsleutel te wissen" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Dit is een geldige ondertekening van de sleutel; normaal gezien wilt U deze\n" "ondertekening niet wissen. omdat ze belangrijk kan zijn voor het opzetten " "van\n" "een betrouwbare relatie met behulp van deze sleutel of met een andere " "sleutel\n" "die met deze sleutel gecertificeerd werd." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Deze ondertekening kan niet worden gecontroleerd omdat u de bijbehorende\n" "sleutel niet heeft. U wordt aangeraden om het verwijderen ervan uit te " "stellen\n" "totdat u weet welke sleutel gebruikt geweest is, omdat deze ondertekenende\n" "sleutel misschien een betrouwbare relatie tot stand brengt via\n" "een andere reeds gecertificeerde sleutel." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "De ondertekening is niet geldig. Het is een goed idee om ze van uw " "sleutelring\n" "af te halen." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Dit is een ondertekening die de gebruikers-ID aan de sleutel koppelt. Het\n" "is meestal niet goed om een dergelijke handtekening te verwijderen.\n" "Waarschijnlijk zal GnuPG deze sleutel dan niet meer kunnen gebruiken. Doe " "dit\n" "dus alleen als deze zelf geplaatste handtekening om een of andere reden " "niet\n" "geldig is en er een andere beschikbaar is." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Vervang de voorkeuren van alle (of alleen de gekozen) gebruikers-ID's\n" "door de huidige lijst van voorkeuren. De tijdsindicatie van alle betrokken\n" "zelf geplaatste handtekeningen zal met een seconde worden verhoogd.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Geef de wachtwoordzin in; dit is een geheime zin\n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Herhaal de laatste wachtwoordzin, om zeker te zijn dat u die juist intypte." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "" "Geef de naam van het bestand waarop deze handtekening van toepassing is" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Antwoord \"yes\" als het oké is om bestand te overschrijven" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Geef alstublieft een nieuwe bestandsnaam. Als U gewoon op Enter drukt zal " "het\n" "standaardbestand (u ziet zijn naam tussen de blokhaken) gebruikt worden." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Geef hier een reden voor de certificering. Afhankelijk van de context kunt " "U\n" "een omschrijving kiezen uit deze lijst:\n" " \"Sleutel is gecompromitteerd\"\n" " Gebruik dit indien u redenen heeft om aan te nemen dat onbevoegde\n" " personen uw geheime sleutel in handen gekregen hebben.\n" " \"Sleutel is vervangen\"\n" " Gebruik dit als u deze sleutel door een nieuwe vervangen heeft.\n" " \"Sleutel wordt niet langer gebruikt\"\n" " Gebruik dit indien u deze sleutel ingetrokken heeft.\n" " \"Gebruikers-ID is niet langer geldig\"\n" " Gebruik dit om te stellen dat deze gebruikers-ID niet langer gebruikt\n" " zou moeten worden. Gewoonlijk gebruikt men dit om een e-mailadres als\n" " niet langer geldig te markeren.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Als U wilt kunt U een tekst intypen met uitleg waarom u dit\n" "certificaat van intrekking maakt. Hou deze tekst beknopt.\n" "Beëindig de tekst met een lege regel.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Geen hulp beschikbaar" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Geen hulp beschikbaar voor `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "importeer handtekeningen die als uitsluitend lokaal zijn gemarkeerd" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" "herstel beschadigingen die ontstaan zijn\n" "bij het importeren vanuit de pks-sleutelserver" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "" "zet de waarden in verband met betrouwbaarheid bij het importeren niet op nul" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "werk de betrouwbaarheidsdatabank (trustdb) niet bij na het importeren" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "" "maak een publieke sleutel aan bij het importeren van een geheime sleutel" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "accepteer alleen het bijwerken van bestaande sleutels" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "verwijder onbruikbare delen van de sleutel na het importeren" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "verwijder zo veel mogelijk van de sleutel na het importeren" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "blok van het type %d wordt overgeslagen\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu sleutels verwerkt tot dusver\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr " Totaal aantal verwerkt: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " overgeslagen nieuwe sleutels: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " zonder gebruikers-ID: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " geïmporteerd: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " onveranderd: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nieuwe gebruikers-ID's: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nieuwe subsleutels: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nieuwe handtekeningen: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr "nieuwe intrekkingen van sleutels: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " gelezen geheime sleutels: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " geïmporteerde geheime sleutels: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " ongewijzigde geheime sleutels: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " niet geïmporteerd: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " opgeschoonde handtekeningen: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " opgeschoonde gebruikers-ID's: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "WAARSCHUWING: sleutel %s bevat voorkeuren voor niet-beschikbare\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algoritmes bij deze gebruikers-ID's:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": voorkeur voor versleutelingsalgoritme %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": voorkeur voor hashalgoritme %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": voorkeur voor compressiealgoritme %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "we raden u sterk aan om uw voorkeuren aan te passen en\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "om deze sleutel opnieuw te distribueren om mogelijke problemen met\n" "niet-overeenstemmende algoritmes te voorkomen\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "U kunt uw voorkeuren bijwerken met: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "sleutel %s: geen gebruikers-ID\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "sleutel %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "verworpen door de importfilter" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "sleutel %s: beschadigingen in PKS-subsleutel hersteld\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "" "sleutel %s: niet door zichzelf ondertekende gebruikers-ID \"%s\" aanvaard\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "sleutel %s: geen geldige gebruikers-ID's\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "" "dit kan veroorzaakt worden door het ontbreken van een eigen handtekening\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "sleutel %s: publieke sleutel niet gevonden: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "sleutel %s: nieuwe sleutel - overgeslagen\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "geen sleutelring gevonden waarnaartoe geschreven kan worden: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "aan het schrijven naar `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "fout bij het schrijven naar sleutelring `%s': %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "sleutel %s: publieke sleutel \"%s\" geïmporteerd\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "sleutel %s: stemt niet overeen met onze kopie\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "sleutel %s: kan het originele sleutelblok niet vinden: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "sleutel %s: kan het originele sleutelblok niet lezen: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "sleutel %s: \"%s\" 1 nieuwe gebruikers-ID\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "sleutel %s: \"%s\" %d nieuwe gebruikers-ID's\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "sleutel %s: \"%s\" 1 nieuwe ondertekening\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "sleutel %s: \"%s\" %d nieuwe ondertekeningen\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "sleutel %s: \"%s\" 1 nieuwe subsleutel\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "sleutel %s: \"%s\" %d nieuwe subsleutels\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "sleutel %s: \"%s\" %d ondertekening opgeschoond\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "sleutel %s: \"%s\" %d ondertekeningen opgeschoond\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "sleutel %s: \"%s\" %d gebruikers-ID opgeschoond\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "sleutel %s: \"%s\" %d gebruikers-ID's opgeschoond\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "sleutel %s: \"%s\" niet veranderd\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "geheime sleutel %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "importeren van geheime sleutels is niet toegestaan\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "" "sleutel %s: geheime sleutel met ongeldig\n" "versleutelingsalgoritme %d - overgeslagen\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "geen standaardsleutelring voor geheime sleutels: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "sleutel %s: geheime sleutel geïmporteerd\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "sleutel %s: reeds in sleutelring van geheime sleutels\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "sleutel %s: geheime sleutel niet gevonden: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "sleutel %s: geen publieke sleutel - kan intrekkingscertificaat niet " "toepassen\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "sleutel %s: ongeldig intrekkingscertificaat: %s - afgewezen\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "sleutel %s: \"%s\" intrekkingscertificaat geïmporteerd\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "sleutel %s: geen gebruikers-ID voor ondertekening\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "sleutel %s: niet ondersteund publieke-sleutelalgoritme voor gebruikers-ID " "\"%s\"\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "sleutel %s: ongeldige eigen handtekening bij gebruikers-ID \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "sleutel %s: niet ondersteund publieke-sleutelalgoritme\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "sleutel %s: ongeldige rechtstreekse ondertekening van de sleutel\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "sleutel %s: geen subsleutel voor de band met de sleutel\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "sleutel %s: ongeldige band met de subsleutel\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "sleutel %s: meervoudige band met de subsleutel verwijderd\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "sleutel %s: geen subsleutel bij sleutelintrekking\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "sleutel %s: ongeldige intrekking van subsleutel\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "sleutel %s: meervoudige subsleutelintrekking verwijderd\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "sleutel %s: gebruikers-ID \"%s\" overgeslagen\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "sleutel %s: subsleutel overgeslagen\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "" "sleutel %s: ondertekening (klasse 0x%02X) kan\n" "niet geëxporteerd worden - overgeslagen\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "sleutel %s: intrekkingscertificaat op verkeerde plek - overgeslagen\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "sleutel %s: ongeldig intrekkingscertificaat: %s - overgeslagen\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "" "sleutel %s: ondertekening van subsleutel op de verkeerde plek - " "overgeslagen\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "sleutel %s: onverwachte ondertekening klasse (0x%02X) - overgeslagen\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "sleutel %s: duplicaat van gebruikers-ID gevonden - samengevoegd\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "WAARSCHUWING: sleutel %s kan ingetrokken zijn: ophalen intrekkingssleutel " "%s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "WAARSCHUWING: sleutel %s kan ingetrokken zijn:\n" "intrekkingssleutel %s niet aanwezig.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "sleutel %s: \"%s\" intrekkingscertificaat toegevoegd\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "sleutel %s: directe sleutelondertekening toegevoegd\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" "NOOT: een serienummer van een sleutel klopt niet met die van de kaart\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "NOOT: primaire sleutel is online en opgeslagen op de kaart\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "NOOT: secundaire sleutel is online en opgeslagen op de kaart\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "fout bij het aanmaken van de sleutelring `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "sleutelring `%s' is aangemaakt\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "sleutelblokbron `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "de cache van de sleutelring opnieuw bouwen is mislukt: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[intrekking]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[eigen ondertekening]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 slechte ondertekening\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d slechte ondertekeningen\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "" "1 ondertekening werd niet gecontroleerd wegens een ontbrekende sleutel\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "" "%d ondertekeningen werden niet gecontroleerd wegens ontbrekende sleutels\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 ondertekening werd niet gecontroleerd wegens een fout\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d ondertekeningen werden niet gecontroleerd wegens fouten\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 gebruikers-ID gevonden zonder geldige eigen handtekening\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d gebruikers-ID's gevonden zonder geldige eigen handtekening\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Geef aan in welke mate u er op vertrouwt dat deze gebruiker de sleutels van\n" "andere gebruikers op correcte wijze controleert (door het paspoort te\n" "bekijken, vingerafdrukken uit verschillende bronnen te checken, enz.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Ik vertrouw het maar marginaal\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Ik vertrouw het volledig\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Geef aan hoe groot het vertrouwen mag zijn in deze betrouwbare " "handtekening.\n" "Als de waarde groter dan 1 is, stelt u de sleutel die u ondertekent, in de\n" "mogelijkheid om in uw plaats handtekeningen van vertrouwen te plaatsen.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Voer een domein in als u de geldigheid van de handtekening daartoe\n" "wilt beperken, laat leeg voor geen beperking.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Gebruikers-ID \"%s\" is ingetrokken." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Weet U zeker dat U die nog steeds wilt ondertekenen? (j/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Ondertekenen is niet mogelijk.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Gebruikers-ID \"%s\" is vervallen." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Gebruikers-ID \"%s\" is niet door zichzelf ondertekend." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "Gebruikers-ID \"%s\" kan ondertekend worden. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Ondertekenen? (j/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "De eigen ondertekening van \"%s\"\n" "is een ondertekening van het type PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Wilt u ze opwaarderen tot een eigen handtekening van OpenPGP? (j/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Uw huidige ondertekening op \"%s\"\n" "is verlopen.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Wilt U een nieuwe handtekening uitgeven om de vervallen te vervangen ? (j/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Uw huidige ondertekening op \"%s\"\n" "is een lokale ondertekening.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Wilt u ze opwaarderen naar een handtekening\n" "die volledig exporteerbaar is? (j/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" was reeds lokaal ondertekend met sleutel %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" was reeds ondertekend met sleutel %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Wilt u die toch opnieuw ondertekenen? (j/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Er is niets te ondertekenen met sleutel %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Deze sleutel is verlopen!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Deze sleutel zal vervallen op %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Wilt u uw handtekening op hetzelfde moment laten vervallen? (J/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "U mag geen OpenPGP-ondertekening zetten bij een sleutel\n" "van het type PGP 2.x als U de optie --pgp2 gebruikt.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Dit zou de sleutel onbruikbaar maken met PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Hoe zorgvuldig heeft u gecontroleerd dat de sleutel die u gaat ondertekenen\n" "werkelijk van de hierboven genoemde persoon is? Indien u niet goed weet wat\n" "te antwoorden, geef dan \"0\" op\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Hierop geef ik geen antwoord.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Ik heb dit helemaal niet gecontroleerd.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Ik heb een oppervlakkige controle uitgevoerd.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Ik heb dit zeer zorgvuldig gecontroleerd.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Uw keuze? (type `?' voor meer informatie): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Weet u zeker dat u deze sleutel wilt ondertekenen met uw\n" "sleutel \"%s\" (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Dit zal een eigen ondertekening zijn.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "WAARSCHUWING: de ondertekening zal niet als niet-exporteerbaar\n" " worden gemarkeerd.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "WAARSCHUWING: de ondertekening zal niet als niet in te trekken\n" "worden gemarkeerd.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "De ondertekening zal als niet-exporteerbaar gemarkeerd worden.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "De ondertekening zal als niet in te trekken gemarkeerd worden.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Ik heb deze sleutel helemaal niet gecontroleerd.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Ik heb deze sleutel oppervlakkig gecontroleerd.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Ik heb deze sleutel zeer zorgvuldig gecontroleerd.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Echt ondertekenen? (j/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "ondertekenen is mislukt: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "Deze sleutel bevat slechts partiële of op de kaart opgeslagen elementen - \n" "er is geen wachtwoordzin die veranderd kan worden.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Deze sleutel is niet beveiligd.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Geheime delen van de primaire sleutel zijn niet beschikbaar.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Geheime delen van de primaire sleutel staan opgeslagen op de kaart.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Sleutel is beveiligd.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Deze sleutel kan niet bewerkt worden: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Voer de nieuwe wachtwoordzin voor deze geheime sleutel in.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "de wachtwoordzin is niet twee keer dezelfde; probeer opnieuw" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "U wilt geen wachtwoordzin - Dit is wellicht een *slecht* idee!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Wilt u dit echt doen? (j/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "" "de ondertekening van de sleutel wordt naar de juiste plaats verplaatst\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "opslaan en stoppen" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "toon de vingerafdruk van de sleutel" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "toon sleutel en gebruikers-ID's" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "selecteer gebruikers-ID N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "selecteer subsleutel N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "controleer handtekeningen" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "onderteken geselecteerde gebruikers-ID's\n" "[* zie hieronder voor gerelateerde commando's]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "onderteken geselecteerde gebruikers-ID's lokaal" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "" "onderteken geselecteerde gebruikers-ID's met een handtekening van vertrouwen" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" "onderteken geselecteerde gebruikers-ID's met een handtekening\n" "die niet ingetrokken kan worden" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "voeg een gebruikers-ID toe" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "voeg een identiteitsfoto toe" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "verwijder geselecteerde gebruikers-ID's" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "voeg een subsleutel toe" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "voeg een sleutel toe op een chipkaart" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "verplaats een sleutel naar een chipkaart" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "verplaats een reservesleutel naar een chipkaart" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "verwijder de geselecteerde subsleutels" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "voeg een intrekkingssleutel toe" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "verwijder ondertekeningen van de geselecteerde gebruikers-ID's" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "verander de vervaldatum van de sleutel of de geselecteerde subsleutels" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "markeer de geselecteerde gebruikers-ID als primair" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "wissel tussen de lijst met geheime en die met publieke sleutels" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "toon voorkeuren (expert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "toon voorkeuren (uitvoerig)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "stel de lijst met voorkeuren in voor de geselecteerde gebruikers-ID's" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "stel de URL in van de voorkeurssleutelserver\n" "voor de geselecteerde gebruikers-ID's" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "stel een notatie in voor de geselecteerde gebruikers-ID's" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "wijzig de wachtwoordzin" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "wijzig de betrouwbaarheid van de eigenaar" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "trek de handtekeningen op de geselecteerde gebruikers-ID's in" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "trek de geselecteerde gebruikers-ID's in" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "trek de sleutel of de geselecteerde subsleutels in" #: g10/keyedit.c:1439 msgid "enable key" msgstr "activeer de sleutel" #: g10/keyedit.c:1440 msgid "disable key" msgstr "deactiveer de sleutel" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "toon de geselecteerde identiteitsfoto's" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "comprimeer onbruikbare gebruikers-ID's en verwijder\n" "onbruikbare handtekeningen van de sleutel" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" "comprimeer onbruikbare gebruikers-ID's en verwijder\n" "alle handtekeningen van de sleutel" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "fout bij het lezen van het geheime sleutelblok \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Geheime sleutel is beschikbaar.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Hiervoor is de geheime sleutel nodig.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Gebruik eerst het commando \"toggle\" (wisselen).\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* Het commando `sign' (ondertekenen) kan worden voorafgegaan door een\n" " `l' (lsign) om een lokale ondertekening te maken, een `t' (tsign) om een\n" " handtekening van vertrouwen te plaatsen, een `nr' (nrsign) om een\n" " niet-intrekbare handtekening te zetten, of om het even welke combinatie\n" " hiervan (ltsign, tnrsign, enz.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Sleutel werd ingetrokken." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Echt alle gebruikers-ID's ondertekenen? (j/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Hint: Selecteer de gebruikers-ID's die U wilt ondertekenen\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Onbekend ondertekeningstype ‘%s’\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Dit commando is niet toegestaan in %s-modus.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "U moet minimaal één gebruikers-ID selecteren.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "U kunt de laatste gebruikers-ID niet verwijderen!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Werkelijk alle geselecteerde gebruikers-ID's verwijderen? (j/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Wilt u deze gebruikers-ID echt verwijderen? (j/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Wilt u echt de primaire sleutel verplaatsen? (j/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "U moet exact één sleutel selecteren.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Commando verwacht een bestandsnaam als parameter\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Kan `%s' niet openen: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Fout bij het lezen van reservesleutel van `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "U moet minimaal één sleutel selecteren.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Wilt u de geselecteerde sleutels echt wissen? (j/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Wilt u deze sleutel echt wissen? (j/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Wilt u alle geselecteerde gebruikers-ID's echt intrekken? (j/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Wilt u deze gebruikers-ID echt intrekken? (j/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Wilt u echt de volledige sleutel intrekken? (j/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Wilt U de geselecteerde subsleutels echt intrekken? (j/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Wilt U deze subsleutel echt intrekken? (j/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Betrouwbaarheid van de eigenaar kan niet ingesteld worden door gebruik\n" "te maken van een door de gebruiker zelf aangeleverde vertrouwenslijst\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Stel voorkeurenlijst in op:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "De voorkeuren voor de geselecteerde gebruikers-ID's echt aanpassen? (j/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "De voorkeuren echt aanpassen? (j/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Aanpassingen opslaan? (j/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Stoppen zonder opslaan? (j/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "bijwerken is mislukt: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "bijwerken van geheime gedeelte is mislukt: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Sleutel is niet aangepast, dus er is geen bijwerking nodig.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Hashing: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Functies: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Sleutelserver zonder wijziging" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Voorkeurssleutelserver: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notaties: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Een gebruikers-ID in een formaat PGP 2.x kent geen voorkeuren.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Deze sleutel is ingetrokken op %s door %s sleutel %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Deze sleutel kan ingetrokken zijn door %s-sleutel %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(gevoelig)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "aangemaakt: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "ingetrokken: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "verlopen: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "vervaldatum: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "gebruik: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "betrouwbaarheid: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "geldigheid: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Deze sleutel is niet actief" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "kaartnummer: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Houd er rekening mee dat de getoonde geldigheid van de sleutel niet\n" "noodzakelijk correct is, tenzij u de applicatie herstart.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "ingetrokken" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "verlopen" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "WAARSCHUWING: Er werd geen gebruikers-ID als primair gemarkeerd.\n" " Door dit programma te gebruiken kan er een andere gebruikers-" "ID\n" " de veronderstelde primaire ID worden.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "U kunt de vervaldatum van een v3-sleutel niet veranderen\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "WAARSCHUWING: Dit is een sleutel in PGP2-formaat. Het toevoegen van een\n" " identiteitsfoto kan er voor zorgen dat sommige versies van " "PGP\n" " deze sleutel verwerpen.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Weet U zeker dat u die nog steeds wilt toevoegen? (j/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" "U kunt geen identiteitsfoto toevoegen aan een sleutel in PGP2-formaat.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Deze goede handtekening verwijderen? (j/N/s)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Deze ongeldige handtekening verwijderen? (j/N/s)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Deze onbekende handtekening verwijderen? (j/N/s)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Deze eigen handtekening echt verwijderen? (j/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Handtekening %d verwijderd.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d handtekeningen verwijderd.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Niets verwijderd.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "ongeldig" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Gebruikers-ID \"%s\" is gecomprimeerd: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Gebruikers-ID \"%s\": %d handtekening verwijderd\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Gebruikers-ID \"%s\": %d handtekeningen verwijderd\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Gebruikers-ID \"%s\": reeds geminimaliseerd\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "Gebruikers-ID \"%s\": reeds opgeschoond\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "WAARSCHUWING: Dit is een sleutel van het type PGP 2.x. Het toevoegen van " "een\n" " bevoegde intrekker kan er voor zorgen dat sommige PGP-versies\n" " deze sleutel verwerpen.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" "U mag geen bevoegde intrekker toevoegen aan een sleutel van het type PGP 2." "x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Geef de gebruikers-ID van de bevoegde intrekker: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" "kan geen sleutel van het type PGP 2.x aanstellen als bevoegde intrekker\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "u kunt een sleutel niet aanstellen als zijn eigen bevoegde intrekker\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "deze sleutel is al aangesteld als bevoegde intrekker\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "WAARSCHUWING: een sleutel aanstellen als bevoegde intrekker kan niet " "ongedaan\n" " gemaakt worden!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Weet u zeker dat u deze sleutel wilt aanstellen als bevoegde intrekker? (j/" "N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Haal de gekozen onderdelen uit de geheime sleutels.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Selecteer hoogstens één subsleutel.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "De vervaldatum van een subsleutel wordt veranderd.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "De vervaldatum van de primaire sleutel wordt veranderd.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "U kunt de vervaldatum van een v3-sleutel niet veranderen\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Er is geen overeenkomstige ondertekening in de geheime sleutelring\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "" "er gebeurde reeds een kruiscertificering van de ondertekening\n" "van subsleutel %s\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" "subsleutel %s ondertekent niet en heeft dus geen kruiscertificering nodig\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Selecteer exact één gebruikers-ID.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "" "de eigen ondertekening in v3-stijl van gebruikers-ID \"%s\" wordt " "overgeslagen\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Geef de URL van de sleutelserver van uw voorkeur: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Weet u zeker dat u die wilt vervangen? (j/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Weet u zeker dat u die wilt verwijderen? (j/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Voer de notatie in: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Doorgaan? (j/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Er is geen gebruikers-ID met index %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Er is geen gebruikers-ID met hash %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Er is geen subsleutel met index %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "gebruikers-ID: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "ondertekend met uw sleutel %s op %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (niet exporteerbaar)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Deze ondertekening is verlopen op %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Weet u zeker dat u die nog altijd wilt intrekken? (j/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Een intrekkingscertificaat voor deze ondertekening aanmaken? (j/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Niet door u ondertekend.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "U heeft deze gebruikers-ID's op sleutel %s ondertekend:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (niet intrekbaar)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "ingetrokken door uw sleutel %s op %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "U staat op het punt deze ondertekeningen in te trekken:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Wilt u deze intrekkingscertificaten echt aanmaken? (j/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "geen geheime sleutel\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "gebruikers-ID \"%s\" is reeds ingetrokken\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "WAARSCHUWING: de ondertekening van een gebruikers-ID\n" " is %d seconden in de toekomst gedateerd\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Sleutel %s is reeds ingetrokken.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Subsleutel %s is reeds ingetrokken.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "%s identiteitsfoto van formaat %ld voor sleutel %s\n" "(gebruikers-ID %d) wordt getoond\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "voorkeur `%s' heeft duplicaat\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "te veel voorkeuren voor versleutelingsalgoritmes\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "te veel voorkeuren voor hashalgoritmes\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "te veel voorkeuren voor compressies\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "ongeldig item `%s' in voorkeursinstellingen\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "directe ondertekening wordt weggeschreven\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "eigen handtekening wordt weggeschreven\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "de ondertekening van de band met de sleutel wordt weggeschreven\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "sleutelgrootte is ongeldig; %u bit wordt gebruikt\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "sleutelgrootte afgerond op %u bits\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Ondertekenen" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certificeren" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Versleutelen" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Authenticeren" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "OoVvAaSs" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Mogelijke acties voor een %s-sleutel: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Momenteel toegestane acties: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) De bekwaamheid om te onderteken activeren/deactiveren\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) De bekwaamheid om te versleutelen activeren/deactiveren\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) De bekwaamheid om te authenticeren activeren/deactiveren\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Klaar\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Selecteer het soort sleutel dat u wilt:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA en RSA (standaard)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA en Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (alleen ondertekenen)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (alleen ondertekenen)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (alleen versleutelen)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (alleen versleutelen)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (eigen bekwaamheden instellen)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (eigen bekwaamheden instellen)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s-sleutels moeten tussen %u en %u bits lang zijn.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Welke sleutellengte wilt u voor de subsleutel? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Welke sleutellengte wilt u? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Gevraagde sleutellengte is %u bits\n" #: g10/keygen.c:1722 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 "" "Geef aan hoe lang de sleutel geldig moet zijn.\n" " 0 = sleutel verloopt nooit\n" " = sleutel verloopt na n dagen\n" " w = sleutel verloopt na n weken\n" " m = sleutel verloopt na n maanden\n" " y = sleutel verloopt na n jaar\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Geef aan hoe lang de ondertekening geldig moet zijn.\n" " 0 = ondertekening verloopt nooit\n" " = ondertekening verloopt na n dagen\n" " w = ondertekening verloopt na n weken\n" " m = ondertekening verloopt na n maanden\n" " y = ondertekening verloopt na n jaar\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Hoe lang moet de sleutel geldig zijn? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Hoe lang moet de ondertekening geldig zijn? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "ongeldige waarde\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Sleutel verloopt helemaal niet\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Ondertekening verloopt helemaal niet\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Sleutel vervalt op %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Ondertekening vervalt op %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Uw systeem kan geen datum weergeven na 2038.\n" "Data worden echter wel juist verwerkt tot 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Is dit correct? (j/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "U heeft een gebruikers-ID nodig om uw sleutel te identificeren; de software\n" "construeert het gebruikers-ID aan de hand van de werkelijke naam, de\n" "toelichting en het e-mailadres in het volgende formaat:\n" " \"Heinrich Heine (De dichter) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Werkelijke naam: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Ongeldig teken in de naam\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Een naam mag niet met een cijfer beginnen\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Een naam moet minimaal 5 tekens lang zijn\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "E-mailadres: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Geen geldig e-mailadres\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Toelichting: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Ongeldig teken in de toelichting\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "U gebruikt tekenset `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "U heeft de volgende GEBRUIKERS-ID gekozen:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Plaats het e-mailadres alstublieft niet bij de werkelijke naam\n" "of de toelichting\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnTtEeOoSs" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Wijzig (N)aam, (T)oelichting, (E)-mailadres of (S)toppen? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Wijzig (N)aam, (T)oelichting, (E)-mailadres of (O)ké/(S)toppen? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Verbeter eerst de fout\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "U heeft een wachtwoordzin nodig om uw geheime sleutel te beschermen.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "U wilt geen wachtwoordzin - dit is waarschijnlijk een *slecht* idee!\n" "Ik ga het toch doen. U kunt uw wachtwoordzin op elk moment wijzigen\n" "met behulp van dit programma en de optie \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "We moeten een hele hoop willekeurige bytes genereren. U doet er goed aan om\n" "een andere activiteit te ondernemen (tikken op het toetsenbord, de muis\n" "bewegen, de schijven gebruiken) tijdens het genereren van het priemgetal.\n" "Dit geeft het programma dat het willekeurig getal genereert meer kans om\n" "voldoende entropie te verzamelen.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Het aanmaken van de sleutel is afgebroken.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "publieke sleutel wordt weggeschreven naar `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "een stukje van de geheime sleutel wordt weggeschreven naar `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "geheime sleutel wordt weggeschreven naar `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "geen publieke sleutelring gevonden waarin geschreven kan worden: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "geen geheime sleutelring gevonden waarin geschreven kan worden: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "fout bij het schrijven in de publieke sleutelring `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "fout bij het schrijven in de geheime sleutelring `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "publieke en geheime sleutel zijn aangemaakt en ondertekend.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Noteer dat deze sleutel niet gebruikt kan worden voor versleuteling. " "Misschien\n" "wenst u het commando \"--edit-key\" te gebruiken om voor dit doel een " "subsleutel\n" "aan te maken.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Sleutel aanmaken is mislukt: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "de sleutel werd %lu seconde in de toekomst aangemaakt\n" "(afwijkende tijd of er is een probleem met de klok)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "de sleutel werd %lu seconden in de toekomst aangemaakt\n" "(afwijkende tijd of er is een probleem met de klok)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" "NOOT: subsleutels aanmaken voor v3-sleutels is niet compatibel met OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Werkelijk aanmaken? (j/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "sleutel opslaan op kaart is niet gelukt: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "kan reservebestand `%s' niet aanmaken: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOOT: reservebestand met de kaartsleutel opgeslagen als `%s'\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "nooit " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kritiek ondertekeningsbeleid: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Ondertekeningsbeleid: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Kritieke voorkeurssleutelserver: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kritieke notatie van de handtekening: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Notatie van de handtekening: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Sleutelring" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Vingerafdruk van de primaire sleutel:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Vingerafdruk van de subsleutel:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Vingerafdruk van de primaire sleutel:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Vingerafdruk van de subsleutel:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Vingerafdruk van de sleutel =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Serienummer van de kaart =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "het hernoemen van `%s' naar `%s' is mislukt: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "" "WAARSCHUWING: er bestaan twee bestanden met vertrouwelijke informatie.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s is het ongewijzigde\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s is het nieuwe\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Los dit mogelijk veiligheidseuvel alstublieft op\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "sleutelring `%s' wordt in de cache geladen\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu sleutels tot dusver in de cache geladen (%lu ondertekeningen)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu sleutels in de cache geladen (%lu ondertekeningen)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: sleutelring aangemaakt\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "ingetrokken sleutels ook weergeven bij de zoekresultaten" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "ook zoeken op subsleutels als gezocht wordt op sleutel-ID" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "gebruik tijdelijke bestanden om gegevens door te geven\n" "aan de sleutelserverhelpers" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "tijdelijke bestanden na gebruik niet verwijderen" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "sleutels automatisch ophalen bij het controleren van ondertekeningen" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "" "honoreer de URL van de voorkeurssleutelserver\n" "zoals die in de sleutel vermeld staat" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" "honoreer bij het ophalen van de sleutel\n" "de PKA-registratie die in de sleutel staat" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "WAARSCHUWING: sleutelserveroptie `%s' wordt niet gebruikt op dit platform\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "uitgeschakeld" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Voer (een) getal(len) in, V)olgende , of S)toppen > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "ongeldig sleutelserverprotocol (wij %d!=verwerkingsroutine %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "sleutel \"%s\" niet gevonden op de sleutelserver\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "sleutel niet gevonden op de sleutelserver\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "opvragen sleutel %s van %s server %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "opvragen sleutel %s van %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "namen zoeken van %s server %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "namen zoeken van %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "versturen van sleutel %s naar %s server %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "versturen van sleutel %s naar %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "zoeken naar \"%s\" van %s server %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "zoeken naar \"%s\" van %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "geen sleutelserveractiviteit!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" "WAARSCHUWING: verwerkingsroutine van sleutelserver\n" "heeft een andere GnuPG-versie (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "sleutelserver verstuurde geen versie-informatie\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "fout in de communicatie met de sleutelserver: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "er is geen sleutelserver bekend (gebruik optie --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" "het aanroepen van externe sleutelservers wordt in deze versie niet " "ondersteund\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "geen verwerkingsroutine voor sleutelserverstelsel `%s'\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "de actie `%s' wordt niet ondersteund door sleutelserverstelsel `%s'\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s ondersteunt verwerkingsroutine met versie %d niet\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "sleutelserver reageert te langzaam\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "sleutelserver geeft een interne fout\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" is geen sleutel-ID: overgeslagen\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "" "WAARSCHUWING: het is niet mogelijk sleutel %s via %s te verversen: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "verversen van 1 sleutel vanuit %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "verversen van %d sleutels vanuit %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "WAARSCHUWING: het is niet mogelijk om URI %s binnen te halen: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "WAARSCHUWING: het is niet mogelijk om URI %s te ontleden\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "vreemde lengte voor een versleutelde sessiesleutel (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s versleutelde sessiesleutel\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "wachtwoordzin is gemaakt met een onbekend hashalgoritme %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "publieke sleutel is %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "met de publieke sleutel versleutelde gegevens: goede DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "versleuteld met %u bit %s-sleutel, ID %s, gemaakt op %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "versleuteld met %s-sleutel, ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "ontcijferen van publieke sleutel is mislukt : %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "versleuteld met %lu wachtwoordzinnen\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "versleuteld met 1 wachtwoordzin\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "gegevens waarschijnlijk versleuteld met %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "IDEA-versleutelingsalgoritme is niet beschikbaar, maar we gaan\n" "in plaats daarvan met goede moed %s proberen\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "ontcijfering oké\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "WAARSCHUWING: de integriteit van het bericht was niet beschermd\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "WAARSCHUWING: versleuteld bericht werd gemanipuleerd!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "ontcijferen mislukt: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" "NOOT: afzender heeft het volgende verzocht: \"alleen-voor-u-persoonlijk\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "originele bestandsnaam='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "WAARSCHUWING: er werd meerdere keren een klare tekst gezien\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "autonome intrekking - gebruik \"gpg --import\" om ze toe te passen\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "geen ondertekening gevonden\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "controle van de ondertekening onderdrukt\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "kan deze ambigue ondertekeningsgegevens niet verwerken\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Ondertekening gemaakt op %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " met %s sleutel %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Ondertekening gemaakt op %s met %s sleutel-ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Sleutel beschikbaar op: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "SLECHTE handtekening van \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Vervallen handtekening van \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Goede handtekening van \"%s\"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[onzeker]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " ook bekend als \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Ondertekening vervallen op %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Ondertekening verloopt op %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s handtekening, hashalgoritme %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binair" #: g10/mainproc.c:1947 msgid "textmode" msgstr "tekstmodus" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "onbekend" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" "WAARSCHUWING: geen ontkoppelde handtekening;\n" " bestand '%s' werd NIET geverifieerd!\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Kan ondertekening niet controleren: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "geen ontkoppelde ondertekening\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "WAARSCHUWING: meerdere ondertekeningen gevonden.\n" " Alleen de eerste zal gecontroleerd worden.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "alleenstaande ondertekening van klasse 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "ondertekening oude stijl (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "ongeldig stampakket gevonden in proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "het is niet mogelijk om core-dumps uit te schakelen: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "opvragen van status (fstat) van `%s' mislukte in %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "opvragen van status (fstat(%d)) mislukte in %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "" "WAARSCHUWING: er wordt een experimenteel algoritme %s\n" " gebruikt voor de publieke sleutel\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "WAARSCHUWING: Elgamal-sleutels die ondertekenen + versleutelen zijn " "verouderd\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "" "WAARSCHUWING: er wordt een experimenteel versleutelingsalgoritme %s " "gebruikt\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "WAARSCHUWING: er wordt een experimenteel hashalgoritme %s gebruikt\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "WAARSCHUWING: hashalgoritme %s is verouderd\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "lees %s voor meer informatie\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "NOOT: Deze functionaliteit is niet beschikbaar in %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: verouderde optie \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "WAARSCHUWING: \"%s\" is een verouderde optie\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "gelieve in de plaats \"%s%s\" te gebruiken\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "WAARSCHUWING: \"%s\" is een verouderd commando - gebruik het niet\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Niet gecomprimeerd" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "niet gecomprimeerd|geen" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "dit bericht kan mogelijk niet gebruikt worden door %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "dubbelzinnige optie `%s'\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "onbekende optie `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Onbekend ondertekeningstype ‘%s’\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Bestand `%s' bestaat. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Overschrijven? (j/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: onbekend achtervoegsel\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Voer een nieuwe bestandsnaam in" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "schrijven naar standaarduitvoer\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "gegevens in `%s' worden verondersteld ondertekend te zijn\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "nieuw configuratiebestand `%s' aangemaakt\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "WAARSCHUWING: opties in `%s' zijn tijdens deze doorloop nog niet actief\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "map `%s' aangemaakt\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "kan het algoritme %d van de publieke sleutel niet verwerken\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "WAARSCHUWING: mogelijk onveilige symmetrisch versleutelde sessiesleutel\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "de kritieke bit staat aan voor het subpakket van type %d\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agens is niet beschikbaar tijdens deze sessie\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "ongeldig formaat van de omgevingsvariabele GPG_AGENT_INFO\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "protocolversie %d voor gpg-agens wordt niet ondersteund\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "kan geen verbinding maken met `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problemen met het agens - gebruik van het agens uitgeschakeld\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (hoofdsleutel-ID %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "U heeft een wachtwoordzin nodig om de geheime sleutel\n" "te ontgrendelen van gebruiker:\n" "\"%.*s\"\n" "%u bit %s-sleutel, ID %s, gemaakt op %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Herhaal wachtwoordzin\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Voer wachtwoordzin in\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "afgebroken door de gebruiker\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "kan geen wachtwoordzin vragen in automatische modus\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Voer wachtwoordzin in: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "U heeft een wachtwoordzin nodig om de geheime sleutel te ontgrendelen\n" "van gebruiker: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u bit %s-sleutel, ID %s, aangemaakt op %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (subsleutel bij hoofdsleutel-ID %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Herhaal wachtwoordzin: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Kies een afbeelding om als uw identiteitsfoto te gebruiken. De afbeelding\n" "moet een bestand in JPEG-formaat zijn. Onthoud dat de afbeelding opgeslagen\n" "wordt in uw publieke sleutel. Als u een erg grote afbeelding gebruikt, zal " "uw\n" "publieke sleutel ook erg groot worden, Een goed formaat voor de afbeelding " "is\n" "ongeveer 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Geef de naam van het JPEG-bestand voor de identiteitsfoto: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "kan JPEG-bestand `%s' niet openen: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Dit JPEG-bestand is erg groot (%d bytes) !\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Weet U zeker dat u het wilt gebruiken? (j/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "`%s' is geen JPEG-bestand\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Is deze foto correct (j/N/s)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "geen programma ingesteld om de foto te bekijken\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "het is niet mogelijk de identiteitsfoto te tonen!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Geen reden opgegeven" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Sleutel is vervangen" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Sleutel is gecompromiteerd" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Sleutel is niet meer in gebruik" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Gebruikers-ID is niet langer geldig" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "reden van de intrekking: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "toelichting bij de intrekking: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMsSoO" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Er werd geen betrouwbaarheidswaarde toegekend aan:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " ook bekend als \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "In hoeverre vertrouwt U erop dat deze sleutel werkelijk\n" "bij de genoemde gebruiker hoort?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Weet ik niet of zal ik niet zeggen\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Ik vertrouw het NIET\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Ik heb er het uiterste vertrouwen in\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = terug naar het hoofdmenu\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " o = sla deze sleutel over\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " s = stoppen\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Het minimale betrouwbaarheidsniveau van deze sleutel is: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Uw besluit? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Wilt u deze sleutel echt instellen als uiterst betrouwbaar? (j/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificaten die leiden naar een uiterst betrouwbare sleutel:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%s: Er is geen zekerheid dat deze sleutel van de genoemde persoon is\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Er is een beperkte zekerheid dat deze sleutel van de genoemde persoon " "is\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Deze sleutel is waarschijnlijk van de genoemde persoon\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Deze sleutel is van ons\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Het is NIET zeker dat deze sleutel van de is die genoemd wordt\n" "in de gebruikers-ID. Als u echter HEEL zeker weet wat u doet,\n" "mag u op de volgende vraag Ja beantwoorden.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Deze sleutel toch gebruiken? (j/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "WAARSCHUWING: er wordt een onbetrouwbare sleutel gebruikt!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "WAARSCHUWING: deze sleutel kan ingetrokken zijn\n" " (maar de intrekkingssleutel is niet aanwezig)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "" "WAARSCHUWING: Deze sleutel werd ingetrokken door zijn bevoegde intrekker!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "WAARSCHUWING: Deze sleutel werd ingetrokken door de eigenaar!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Dit kan betekenen dat de ondertekening vervalst is.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "" "WAARSCHUWING: Deze subsleutel werd ingetrokken door de eigenaar ervan!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Noot: Deze sleutel is uitgeschakeld.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Noot: Het gecontroleerde adres van de ondertekenaar is `%s'\n" # TODO #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" "Noot: Het adres `%s' van de ondertekenaar komt niet overeen met een DNS-" "veld\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" "betrouwbaarheidsniveau bijgesteld naar VOLLEDIG op basis van geldige PKA-" "info\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" "betrouwbaarheidsniveau bijgesteld naar NOOIT op basis van slechte PKA-info\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Noot: Deze sleutel is vervallen!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "WAARSCHUWING: Deze sleutel werd niet gecertificeerd\n" " door een betrouwbare handtekening!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Er is geen aanwijzing dat de handtekening van de eigenaar is.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "WAARSCHUWING: We vertrouwen deze sleutel NIET!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " De handtekening is waarschijnlijk een VERVALSING.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "WAARSCHUWING: Deze sleutel werd niet met voldoende\n" " betrouwbare handtekeningen gecertificeerd!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Het is niet zeker dat de handtekening van de eigenaar is.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: overgeslagen: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: overgeslagen: publieke sleutel is al aanwezig\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "U heeft geen gebruikers-ID gespecificeerd. (u kunt de optie \"-r\" " "gebruiken)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Huidige ontvangers:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Voer het gebruikers-ID in. Eindig met een lege regel: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Een dergelijke gebruikers-ID is er niet.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" "overgeslagen: publieke sleutel was reeds als standaardontvanger ingesteld\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Publieke sleutel werd uitgeschakeld\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "overgeslagen: publieke sleutel was reeds ingesteld\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "onbekende standaardontvanger \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: overgeslagen: publieke sleutel is uitgeschakeld\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "geen geldige geadresseerden\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "gegevens niet bewaard; gebruik de optie \"--output\" om ze te bewaren\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "fout bij het aanmaken van `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Ontkoppelde handtekening.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Geef de naam in van het gegevensbestand: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "lezen van standaardinvoer (stdin) ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "geen ondertekende gegevens\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "kan de ondertekende gegevens `%s' niet openen\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonieme ontvanger; geheime sleutel %s wordt geprobeerd ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "oké, wij zijn de anonieme ontvanger.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "de oude codering van de encryptiesleutel DEK wordt niet ondersteund\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "versleutelingsalgoritme %d%s is onbekend of uitgeschakeld\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" "WAARSCHUWING: versleutelingsalgoritme %s niet gevonden\n" " in de voorkeuren van de ontvanger\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOOT: geheime sleutel %s verviel op %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "NOOT: sleutel werd ingetreokken" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet is mislukt: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "sleutel %s heeft geen gebruikers-ID's\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Moet worden ingetrokken door:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Dit is een gevoelige intekkingssleutel)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Een bevoegd intrekkingscertificaat aanmaken voor deze sleutel? (j/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "gedwongen uitvoer in ASCII-harnas.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet is mislukt: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Intrekkingscertificaat werd aangemaakt.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "er werden geen intrekkingssleutels gevonden voor \"%s\"\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "geheime sleutel \"%s\" niet gevonden: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "geen overeenkomstige publieke sleutel: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "publieke sleutel komt niet overeen met de geheime sleutel!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Een intrekkingscertificaat voor deze sleutel maken? (j/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "onbekend beschermingsalgoritme\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "NOOT: Deze sleutel is niet beschermd!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Intrekkingscertificaat aangemaakt.\n" "\n" "Gelieve het naar een medium te verplaatsen dat u kunt wegstoppen; indien\n" "iemand dit certificaat in handen krijgt, kan hij het gebruiken om uw " "sleutel\n" "onbruikbaar te maken. Het is verstandig om dit certificaat af te drukken en\n" "het weg te bergen, voor het geval uw media onleesbaar zouden worden. Maar\n" "neem wat voorzichtigheid in acht: het printersysteem van uw computer kan de\n" "gegevens opslaan, waardoor ze voor anderen toegankelijk kunnen worden!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Gelieve een reden te kiezen voor de intrekking:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Annuleren" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Wellicht wilt u hier %d kiezen)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Voer een facultatieve beschrijving in; beëindig met een lege regel:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Reden van intrekking: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Geen beschrijving gegeven)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Is dit oké? (j/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "de onderdelen van de geheime sleutel zijn niet beschikbaar\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "beschermingsalgoritme %d%s wordt niet ondersteund\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "beschermingshash %d wordt niet ondersteund\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Ongeldige wachtwoordzin; probeer opnieuw" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "WAARSCHUWING: Een zwakke sleutel gevonden - gelieve de\n" " wachtwoordzin opnieuw te wijzigen.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "de verouderde 16-bit controlesom ter bescherming van de\n" "geheime sleutel wordt aangemaakt\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "er werd een zwakke sleutel aangemaakt - er wordt nogmaals geprobeerd\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "een zwakke sleutel voor het symmetrisch versleutelingsalgoritme\n" "kan niet vermeden worden; er werd %d maal geprobeerd!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA vereist dat de lengte van de hash een veelvoud van 8 bits is\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA-sleutel %s gebruikt een onveilige (%u bit) hash\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA-sleutel %s vereist een hash van %u bit of meer\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "WAARSCHUWING: conflicterende ondertekeningshash in het bericht\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" "WAARSCHUWING: er is geen kruiscertificering gebeurd\n" " van de ondertekenende subsleutel %s\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "WAARSCHUWING: ondertekenende subsleutel %s\n" "heeft een ongeldige kruiscertificering\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "publieke sleutel %s is %lu seconde recenter dan de handtekening\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "publieke sleutel %s is %lu seconden recenter dan de handtekening\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "sleutel %s werd %lu seconde in de toekomst aangemaakt\n" "(afwijkende tijd of een probleem met de klok)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "sleutel %s werd %lu seconden in de toekomst aangemaakt\n" "(afwijkende tijd of een probleem met de klok)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOOT: ondertekeningssleutel %s verviel op %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s handtekening, hashalgoritme %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "er wordt verondersteld dat de ondertekening van\n" "sleutel %s slecht is, omdat de kritieke bit niet gekend is\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" "sleutel %s: geen subsleutel voor de ondertekening\n" "van de intrekking van de subsleutel\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "" "sleutel %s: geen subsleutel voor de ondertekening\n" "van de band met de subsleutel\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "WAARSCHUWING: kan geen expansie maken van %% \n" " op basis van de notatie (te groot).\n" " De niet-geëxpandeerde versie wordt gebruikt.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "WAARSCHUWING: kan geen expansie maken van %% \n" " op basis van de richtlijn-URL (te groot).\n" " De niet-geëxpandeerde versie wordt gebruikt.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "WAARSCHUWING: kan geen expansie maken van %% op basis van de\n" " URL van de voorkeurssleutelsserver (te groot).\n" " De niet-geëxpandeerde versie wordt gebruikt.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "controle van de aangemaakte ondertekening is mislukt: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s ondertekening van: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "u kunt enkel een ontkoppelde ondertekening maken met een\n" "sleutel van het type PGP 2.x als u in modus --pgp2 bent\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "WAARSCHUWING: het hashalgoritme %s (%d) dwingend opleggen is in strijd\n" " met de voorkeuren van de ontvanger\n" #: g10/sign.c:960 msgid "signing:" msgstr "bezig met ondertekenen:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "u kunt enkel een ondertekening in klare tekst maken met een\n" "sleutel van het type PGP 2.x als u in modus --pgp2 bent\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s-versleuteling zal gebruikt worden\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "sleutel staat niet als onveilig gemarkeerd - kan hem niet gebruiken\n" "met een gesimuleerde generator van willekeurige getallen (RNG)!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "\"%s\" overgeslagen: waren duplicaten\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "\"%s\" overgeslagen: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "overgeslagen: geheime sleutel is al aanwezig\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "dit is een Elgamal-sleutel aangemaakt met PGP.\n" "Het is niet veilig om er mee te ondertekenen!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "staat van betrouwbaarheid %lu, type %d: registreren mislukt: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Lijst van toegekende betrouwbaarheidswaarden, aangemaakt op %s\n" "# (Gebruik \"gpg --import-ownertrust\" om ze te repareren)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "fout in `%s': %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "regel is te lang" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "ontbrekende dubbele punt" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "ongeldige vingerafdruk" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "ontbrekende waarde voor mate van betrouwbaarheid" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "fout bij het zoeken naar de staat van betrouwbaarheid in `%s': %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "leesfout in `%s': %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "betrouwbaarheidsdatabank (trustdb): synchronisatie mislukt: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "kan geen grendel maken voor `%s'\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "kan `%s' niet vergrendelen\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "" "betrouwbaarheidsdatabank (trustdb): element %lu: lseek is mislukt: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "betrouwbaarheidsdatabank (trustdb): element %lu:\n" "wegschrijven is mislukt (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "betrouwbaarheidsdatabank (trustdb): transactie is te groot\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "krijg geen toegang tot `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: map bestaat niet!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: het registreren van de versie is mislukt: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: ongeldige betrouwbaarheidsdatabank (trustdb) aangemaakt\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: betrouwbaarheidsdatabank (trustdb) aangemaakt\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "" "NOOT: er kan niet geschreven worden in de betrouwbaarheidsdatabank " "(trustdb)\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ongeldige betrouwbaarheidsdatabank (trustdb)\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: aanmaken van de hashtabel is mislukt: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: fout bij het bijwerken van de registratie van de versie: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: fout bij het lezen van de registratie van de versie: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: fout bij het maken van een registratie van de versie: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "betrouwbaarheidsdatabank (trustdb): lseek is mislukt: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "betrouwbaarheidsdatabank (trustdb): lezen is mislukt (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: bestand is geen betrouwbaarheidsdatabank (trustdb)\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versieregistratie met nummer %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: ongeldige bestandsversie %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: fout bij het lezen van vrije registratie: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: fout bij het wegschrijven van de registratie van de map: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: fout bij het op nul zetten van een registratie: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: het toevoegen van een registratie is mislukt: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Fout: de betrouwbaarheidsdatabank (trustdb) is beschadigd.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "kan geen tekstregels verwerken die groter zijn dan %d tekens\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "invoerregel groter dan %d tekens\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' is geen geldige ID voor een lange sleutel\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "sleutel %s: aanvaard als betrouwbare sleutel\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "" "sleutel %s komt meer dan eens voor in de betrouwbaarheidsdatabank (trustdb)\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" "sleutel %s: geen publieke sleutel voor de vertrouwde sleutel - overgeslagen\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "sleutel %s gemarkeerd als uiterst betrouwbaar\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "staat van betrouwbaarheid %lu, vereist type %d: lezen mislukt: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "staat van betrouwbaarheid %lu is niet va het vereiste type %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" "U kunt proberen om de betrouwbaarheidsdatabank (trustdb)\n" "opnieuw aan te maken met behulp van de commando's:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Indien dit niet lukt, gelieve dan de handleiding te raadplegen\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "kan onbekend betrouwbaarheidsmodel (%d) niet\n" "gebruiken - betrouwbaarheidsmodel %s wordt verondersteld\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "betrouwbaarheidsmodel %s wordt gebruikt\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" "11 translator see trustdb.c:uid_trust_string_fixed: werd gelezen door " "vertaler" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ingetrok]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[vervalln]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[onbekend]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ ongedef]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[marginal]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[volledig]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ uiterst]" #: g10/trustdb.c:553 msgid "undefined" msgstr "niet gedefinieerd" #: g10/trustdb.c:554 msgid "never" msgstr "nooit" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginaal" #: g10/trustdb.c:556 msgid "full" msgstr "volledig" #: g10/trustdb.c:557 msgid "ultimate" msgstr "uiterst" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "een controle van de betrouwbaarheidsdatabank (trustdb) is niet nodig\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "volgende controle van de betrouwbaarheidsdatabank (trustdb) is op %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" "een controle van de betrouwbaarheidsdatabank (trustdb)\n" "is niet nodig bij het betrouwbaarheidsmodel `%s'\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" "een bijwerking van de betrouwbaarheidsdatabank (trustdb)\n" "is niet nodig bij het betrouwbaarheidsmodel `%s'\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "publieke sleutel %s niet gevonden: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "gelieve het commando --check-trustdb uit te voeren\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "de betrouwbaarheidsdatabank (trustdb) wordt gecontroleerd\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d sleutels werden verwerkt (%d geldigheidstellers op nul gezet)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "geen uiterst betrouwbare sleutels gevonden\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "publieke sleutel van uiterst betrouwbare sleutel %s niet gevonden\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "%d marginale nodig, %d volledige nodig, betrouwbaarheidsmodel %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "diepte: %d geldig: %3d ondert.: %3d vertr.: %d-, %dq, %dn, %dm, %df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "bijwerken van de versieregistratie van de betrouwbaarheidsdatabank " "(trustdb):\n" "wegschrijven is mislukt: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "de ondertekening kon niet geverifieerd worden.\n" "Denk eraan dat het bestand met handtekeningen (.sig of .asc)\n" "het eerste bestand moet zijn dat aan de commandolijn ingevoerd wordt.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "invoerregel %u is te lang of LF ontbreekt\n" #: util/errors.c:53 msgid "general error" msgstr "algemene fout" #: util/errors.c:54 msgid "unknown packet type" msgstr "onbekend pakkettype" #: util/errors.c:55 msgid "unknown version" msgstr "onbekende versie" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "onbekend algoritme van de publieke sleutel" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "onbekend hashalgoritme" #: util/errors.c:58 msgid "bad public key" msgstr "slechte publieke sleutel" #: util/errors.c:59 msgid "bad secret key" msgstr "slechte geheime sleutel" #: util/errors.c:60 msgid "bad signature" msgstr "slechte handtekening" #: util/errors.c:61 msgid "checksum error" msgstr "fout in de controlesom" #: util/errors.c:62 msgid "bad passphrase" msgstr "slechte wachtwoordzin" #: util/errors.c:63 msgid "public key not found" msgstr "publieke sleutel niet gevonden" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "onbekend versleutelingsalgoritme" #: util/errors.c:65 msgid "can't open the keyring" msgstr "kan de sleutelring niet openen" #: util/errors.c:66 msgid "invalid packet" msgstr "ongeldig pakket" #: util/errors.c:67 msgid "invalid armor" msgstr "ongeldig harnas" #: util/errors.c:68 msgid "no such user id" msgstr "een dergelijk gebruikers-id bestaat niet" #: util/errors.c:69 msgid "secret key not available" msgstr "de geheime sleutel is niet beschikbaar" #: util/errors.c:70 msgid "wrong secret key used" msgstr "er werd een verkeerde geheime sleutel gebruikt" #: util/errors.c:71 msgid "not supported" msgstr "wordt niet ondersteund" #: util/errors.c:72 msgid "bad key" msgstr "slechte sleutel" #: util/errors.c:73 msgid "file read error" msgstr "fout bij het lezen van het bestand" #: util/errors.c:74 msgid "file write error" msgstr "fout bij het wegschrijven naar het bestand" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "onbekend compressiealgoritme" #: util/errors.c:76 msgid "file open error" msgstr "fout bij het openen van het bestand" #: util/errors.c:77 msgid "file create error" msgstr "fout bij het aanmaken van het bestand" #: util/errors.c:78 msgid "invalid passphrase" msgstr "ongeldige wachtwoordzin" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "niet geïmplementeerd algoritme voor de publieke sleutel" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "niet geïmplementeerd versleutelingsalgoritme" #: util/errors.c:81 msgid "unknown signature class" msgstr "onbekende handtekeningenklasse" #: util/errors.c:82 msgid "trust database error" msgstr "fout in de betrouwbaarheidsdatabank (trustdb)" #: util/errors.c:83 msgid "bad MPI" msgstr "slecht MPI (geheel getal van multipele precisie)" #: util/errors.c:84 msgid "resource limit" msgstr "bronlimiet" #: util/errors.c:85 msgid "invalid keyring" msgstr "ongeldige sleutelring" #: util/errors.c:86 msgid "bad certificate" msgstr "slecht certificaat" #: util/errors.c:87 msgid "malformed user id" msgstr "ongeldige gebruikers-id" #: util/errors.c:88 msgid "file close error" msgstr "fout bij het sluiten van het bestand" #: util/errors.c:89 msgid "file rename error" msgstr "fout bij het hernoemen van het bestand" #: util/errors.c:90 msgid "file delete error" msgstr "fout bij het verwijderen van het bestand" #: util/errors.c:91 msgid "unexpected data" msgstr "onverwachte gegevens" #: util/errors.c:92 msgid "timestamp conflict" msgstr "dateringsconflict" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "onbruikbaar algoritme van de publieke sleutel" #: util/errors.c:94 msgid "file exists" msgstr "bestand bestaat" #: util/errors.c:95 msgid "weak key" msgstr "zwakke sleutel" #: util/errors.c:96 msgid "invalid argument" msgstr "ongeldige parameter" #: util/errors.c:97 msgid "bad URI" msgstr "slechte URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "niet ondersteunde URI" #: util/errors.c:99 msgid "network error" msgstr "netwerkfout" #: util/errors.c:101 msgid "not encrypted" msgstr "niet versleuteld" #: util/errors.c:102 msgid "not processed" msgstr "niet verwerkt" #: util/errors.c:104 msgid "unusable public key" msgstr "onbruikbare publieke sleutel" #: util/errors.c:105 msgid "unusable secret key" msgstr "onbruikbare geheime sleutel" #: util/errors.c:106 msgid "keyserver error" msgstr "fout van de sleutelserver" #: util/errors.c:107 msgid "canceled" msgstr "geannuleerd" #: util/errors.c:108 msgid "no card" msgstr "geen kaart" #: util/errors.c:109 msgid "no data" msgstr "geen gegevens" #: util/logger.c:183 msgid "ERROR: " msgstr "FOUT: " #: util/logger.c:186 msgid "WARNING: " msgstr "WAARSCHUWING: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dit is een bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "u vond een bug ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "yes|ja" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yYjJ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no|nee" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit|stoppen" #: util/miscutil.c:443 msgid "qQ" msgstr "qQsS" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|oké|ok|OK" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancel|cancelen|annuleren" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cCaA" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "WAARSCHUWING: er wordt onveilig geheugen gebruikt!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "zie http://www.gnupg.org/documentation/faqs.html voor meer informatie\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "bewerking is niet mogelijk zonder geïnitialiseerd veilig geheugen\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(misschien heeft u voor deze taak het verkeerde programma gebruikt)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "" #~ "Waarschuwing: onveilige eigendomsinstellingen van uitbreiding ‘%s’\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "" #~ "Waarschuwing: onveilige beveiligingsinstellingen van uitbreiding ‘%s’\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "Waarschuwing: onveilige map eigendomsinstellingen van uitbreiding ‘%s’\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "Waarschuwing: onveilige map beveiligingsinstellingen van uitbreiding " #~ "‘%s’\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "versleutelalgoritme uitbreiding ‘%s’ is niet geladen door onveilige\n" #~ "instellingen\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "het IDEA versleutelalgoritme is niet beschikbaar\n" #~ msgid "Command> " #~ msgstr "Commando> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA sleutelpaar krijgt %u bits.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "the trustdb is corrupted; please run “gpg --fix-trustdb”.\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|Beheerders PIN" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" gnupg-1.4.20/po/ChangeLog-20110000644000175000017500000004134612635262326012427 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2010-10-18 Jedi Lin (wk) * zh_TW.po: Update [not in 1.4.11] 2010-10-18 Werner Koch * de.po: Two updates. 2010-10-18 Laurențiu Buzdugan (wk) * ro.po: Update. 2010-10-18 Jakub Bogusz (wk) * pl.po: Update. 2010-09-02 Werner Koch * de.po: Insert missing spaces. Fixes Debian-Bug#594489. 2009-09-03 Jedi Lin (wk) * zh_TW.po: Update. 2009-08-18 Werner Koch * fr.po: Fix regression. See bug#922. * it.po: Translation fix by Sythos. Fixes bug#920. 2009-08-13 Werner Koch * de.po: Update. 2009-07-14 Werner Koch * de.po: s/nicht-exportfähig/unwiderrufbar/. Reported by Simon Richter. 2009-07-13 Werner Koch * nl.po: Applied a small fix by Jeroen Leeuwestein. Fixes bug#1085. 2009-06-17 Gaël Quéri (up) * fr.po: Updated. 2009-06-02 Werner Koch * de.po: Applied a patch from Daniel Leidert to fix a bunch of small typos. See also Debian bug report 314068. Fixes bug#1069. 2008-09-30 David Ammouial (wk) * fr.po: Fix bug #922. 2008-07-21 Daniel Nylander (wk) * sv.po: Update. 2008-06-23 Ludwig Hügelschäfer (wk) * de.po: 3 typo fixes. 2008-05-26 Werner Koch * de.po: Minor fixes submitted by Jan Seidel. Fixes bug#916. 2008-03-27 Jedi (wk) * zh_TW.po: Minor update. 2008-01-02 Jedi (wk) * zh_TW.po: Update. 2007-12-19 Walter Koch (wk) * de.po, de.glo: Update. 2007-12-12 Janusz A. Urbanowicz (wk) * pl.po: Update. 2007-12-12 Meng Jie (wk) * zh_CN.po: Update. 2007-10-23 gettextize * Makefile.in.in: Upgrade to gettext-0.16.1. 2007-03-05 Werner Koch * LINGUAS: Add nl. * nl.po: Revised translation by Ivar Snaaijer. 2007-02-26 Werner Koch * sv.po: Update fron Daniel. * de.po: Converted to UTF-8 2006-12-22 Werner Koch * sv.po: Revised translation by Daniel Nylander. 2006-07-27 Werner Koch * nb.po: New. 2006-07-03 Werner Koch * zh_TW.po: Updated, albeit a copy from last year. * zh_CN.po: Updated. 2006-06-27 Werner Koch * de.po: Fixed misleading translation. Thanks to Olav Seyfarth. 2005-10-06 Werner Koch * POTFILES.in: s/g10.c/gpg.c/. 2005-07-26 Werner Koch * zh_TW.po, fr.po, cs.po: Updated. 2005-07-19 Werner Koch * ru.po: Updated. 2005-06-21 Werner Koch * zh_TW.po: Updated. * ro.po: Updated. 2005-06-15 Werner Koch * de.po: Some Typo fixes. 2005-05-31 Werner Koch * zh_TW.po, zh_CN.po, es.po, ro.po: Updated. * tr.po: Updated from TP. Note: this is an exception in general translations from the Robot are not anymore accepted. 2005-03-30 Werner Koch * de.po: Fixed typo in "|AN|New Admin PIN"; the leading bar was missing. 2005-03-07 Werner Koch * de.po: Updated. Translation is still in the works, though. 2005-02-15 Werner Koch * ca.po: Updated using a patch provided by Jordi Mallach. 2005-02-03 Werner Koch * zh_TW.po, ro.po: Updated. 2004-12-10 Werner Koch * sv.po: Take the update done for 1.2.6. * zh_CN.po, fr.po, cs.po, ja.po: Updated. 2004-10-27 Werner Koch * LINGUAS: Better don't have comments in this file. 2004-10-15 Werner Koch * POTFILES.in: Updated. * sv.po: Updated. 2004-10-12 Werner Koch * es.po: s/intgridad/integridad/. This is bug 275. 2004-07-27 Werner Koch * LINGUAS: Added all languages we supported in 1.2.5. Copied all po files from 1.2.5. 2004-07-27 gettextize * Makefile.in.in: Upgrade to gettext-0.14.1. * Rules-quot: Upgrade to gettext-0.14.1. 2003-11-27 Werner Koch * de.po: Updated some fuzzys. 2003-10-25 Werner Koch * Makevars: New. 2003-10-25 gettextize * Makefile.in.in: New file, from gettext-0.12.1. * Rules-quot: New file, from gettext-0.12.1. * boldquot.sed: New file, from gettext-0.12.1. * en@boldquot.header: New file, from gettext-0.12.1. * en@quot.header: New file, from gettext-0.12.1. * insert-header.sin: New file, from gettext-0.12.1. * quot.sed: New file, from gettext-0.12.1. * remove-potcdate.sin: New file, from gettext-0.12.1. 2003-10-10 Werner Koch * POTFILES.in (cipher/primegen.c): Added. 2003-05-26 David Shaw * POTFILES.in: Added a couple of missing source files. Noted by Pascal Hartig and Walter Koch. (From wk on stable branch) 2002-10-18 Werner Koch * POTFILES.in (hkp.c): Removed. 2002-09-12 Werner Koch * tr.po, el.po: Updated. 2002-08-23 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2002-08-04 Werner Koch * de.po: Fixed fuzzys and translated new strings. * es.po, et.po, fr.po, gl.po, id.po, it.po, ja.po, tr.po: Updated from TP site. * ca.po: New from TP site. 2002-04-30 Werner Koch * ja.po: Updated, also a bit too late for the release. 2002-04-29 Werner Koch * pl.po: Update. * el.po: Updated, removed one entry due to non-matching printf and one removed one printf specifier. Fixed fuzzy entries due to the change of (y/N) to (Y/n) in most files. 2002-04-25 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2002-04-22 Werner Koch * et.po, tr.po, cs.po, it.po, id.po: Updated. 2002-04-19 Werner Koch * de.po: Fixed fuzzies and added a few translations. 2002-04-18 Werner Koch * eo.po: Updated. 2002-04-10 Werner Koch * pl.po: Updated. 2002-04-09 Werner Koch * pt_BR.po: Updated the info entry * es.po: Fixed a c-format problem; for unknown reasons msgfmt -c can't cope with swapped arguments. * de.po: Fuzzy fixes and a few new translations. * id.po: Fixed a format string mismatch. * eo.po, it.po, ja.po, sv.po: Updated with a somewhat newer version from the TP. * es_ES.po: Removed * es.po: and replaced with this updated version from the TP. * cs.po: New. Fixed for format string mismatches. * el.po, gl.po: New from TP. 2002-04-06 Werner Koch * fr.po: Updated. 2002-04-02 Werner Koch * de.po, de.glo: Updated. 2002-03-08 Werner Koch * et.po: Updated. 2002-03-06 Werner Koch * pt_PT.po: Removed. * pt.po: and replaced by this updated one. My machine voted 30 to 2 for just pt. So we go with the crowd. Thanks for Pedro Morais for suggesting this. 2002-03-05 Werner Koch * tr.po, id.po: Updated. 2002-03-03 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2002-03-03 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-10-23 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. 2001-09-07 Werner Koch * POTFILES.in: Added new files. 2001-07-26 gettextize * Makefile.in.in: Upgrade to gettext-0.10.38. 2001-07-05 Werner Koch * id.po: Updated 2001-05-28 Werner Koch * ru.po: Removed - too many format string bugs. 2001-05-27 gettextize * Makefile.in.in: Upgrade to gettext-0.10.38. * cat-id-tbl.c: Remove file. * stamp-cat-id: Remove file. 2001-05-27 Werner Koch * tr.po: New copy from the TP Robot. * da.po, de.po, eo.po, es_ES.po, et.po, id.po, ja.po, nl.po, pt_BR.po, sv.po: Fixes to format string errors by Kurt Garloff. It is not cleare whether they are all correct but at least they won't give segv and minimize the risk of format string exploits. * ru.po: Fixed the header entry. Fixed some fuzzy entries in all files. 2001-05-06 Werner Koch * id.po: Updated 2001-04-27 Werner Koch * de.po: Removed an extra "%s". 2001-04-25 Werner Koch * fr.po: Updated. 2001-04-23 Werner Koch * eo.po: Updated. * it.po: Updated. 2001-04-22 Werner Koch * pl.po: Updated. 2001-04-17 Werner Koch * et.po: New. * de.po: Updated. 2001-04-16 Werner Koch * pt_PT.po: Updated. 2001-04-06 Werner Koch * tr.po: New. 2001-03-18 Werner Koch * de.po, de.glo: Updated. 2001-02-22 Werner Koch * de.po, de.glo: Updated. 2001-01-23 Werner Koch * de.po: Removed superfluous \r. 2001-01-14 Werner Koch * de.po, de.glo: Updated. 2000-12-19 Werner Koch * pl.po: Updated. * ja.po: Justified one message. 2000-10-23 Werner Koch * ja.po: Updated. 2000-10-19 Werner Koch Fixed a typo in all files. 2000-10-16 Werner Koch * de.po, de.glo: Updated. Thu Sep 14 17:45:11 CEST 2000 Werner Koch * eo.po: Updated. Wed Jul 12 13:32:06 CEST 2000 Werner Koch * da.po: New from the TP server * eo.po: Updated from the TP server * pl.po: Ditto. * sv.po: Ditto. Small English spelling correction in all files. Wed Jul 5 13:28:45 CEST 2000 Werner Koch * fr.po: Minor changes by Gael Wed Jun 14 12:27:09 CEST 2000 Werner Koch * de.po, de.glo: Updated. 2000-06-07 18:26:58 Werner Koch (wk@habibti.openit.de) * fr.po: New version from Gaël 2000-05-02 10:44:42 Werner Koch (wk@habibti.openit.de) * fr.po: New version from the TP Robot. 2000-05-01 14:19:52 Werner Koch (wk@habibti.openit.de) * de.po: Updated. * de.glo: Ditto. 2000-03-15 15:37:08 Werner Koch (wk@habibti.openit.de) * de.po: Updated. Wed Feb 23 10:07:57 CET 2000 Werner Koch * nl.po: New. By Ivo Timmermans. Wed Feb 16 16:25:09 CET 2000 Werner Koch * eo.po : New. By Edmund. Wed Feb 16 14:09:00 CET 2000 Werner Koch * ja.po: New. By Yosiaki * sv.po: New. By Daniel. Fri Feb 11 17:44:40 CET 2000 Werner Koch * id.po: Updated. Thu Jan 6 16:56:18 CET 2000 Werner Koch * Makefile.in.in: Is not longer maintained as a symlink because we have a patch to work around a bug in non-gnu Make. Fixed by Dave Dykstra. Thu Dec 16 10:07:58 CET 1999 Werner Koch * pt_PT.po: Updated. * de.po: Updated. * it.po: Updated. Thu Dec 9 10:31:05 CET 1999 Werner Koch * de.po: Updated. * pt_BR.po: Updated. Fri Nov 12 20:33:19 CET 1999 Werner Koch * es_ES.po: Fixed 3 \n mismatches. * de.po: Updated. Thu Oct 28 16:08:20 CEST 1999 Werner Koch * es_ES.po: Updated. * pt_BR.po: Updated. Fri Oct 8 20:32:01 CEST 1999 Werner Koch * fr.po: Updated for 1.0.0d. Mon Oct 4 21:23:04 CEST 1999 Werner Koch * pl.po: New version by Alex. Thu Sep 23 06:26:28 1999 Werner Koch (wk@gnupg.org) * fr.po: Updated by Gaël. Sat Sep 18 11:49:51 1999 Werner Koch (wk@gnupg.org) * id.po: New. Done by Tedi Heriyanto. Wed Sep 15 16:22:17 CEST 1999 Werner Koch * pt_PT.po: New. Done by Pedro Morais. * it.po: Updated by Marco. Tue Sep 7 16:23:36 CEST 1999 Werner Koch * pl.po: Updated. Mon Sep 6 19:59:08 CEST 1999 Werner Koch * fr.po: Imported and fixed a msgid. * de.po: Ditto. * pt_BR.po: Ditto. * POTFILES.in (delkey.c): New. * fr.po: Gaël was the first to update it again. Wed Sep 1 15:30:44 CEST 1999 Werner Koch * de.po: Updated. Mon Aug 30 20:38:33 CEST 1999 Werner Koch * it.po: Updated (Marco). * de.po: Updated (Walter). * pt_BR-po: Update (Thiago). * fr.po: Updated (Gaël). Wed Aug 4 10:34:18 CEST 1999 Werner Koch * de.po: Updated (Walter). Mon Jul 26 09:34:46 CEST 1999 Werner Koch * it.po: Updated (Marco). Tue Jul 13 17:39:25 CEST 1999 Werner Koch * de.po: Updated (Walter) Tue Jun 29 21:44:25 CEST 1999 Werner Koch * it.po: Updated (Marco). Sat Jun 26 12:15:59 CEST 1999 Werner Koch * pt_BR.po: Updated (Thiago). Thu Jun 10 14:18:23 CEST 1999 Werner Koch * it.po: Updated (Marco). * es_ES.po: Updated (Urko). Wed Jun 2 14:17:19 CEST 1999 Werner Koch * es_ES.po: Some patches (Urko Lusa). Mon May 31 19:41:10 CEST 1999 Werner Koch * de.po: New version (Walter). * pl.po: New version (Alex). Tue May 25 19:50:32 CEST 1999 Werner Koch * fr.po: Imported new version. Mon May 17 21:54:43 CEST 1999 Werner Koch * de.po, de.glo: New version from Walter. Wed Apr 7 20:51:39 CEST 1999 Werner Koch * fr.po: Imported new version. Wed Feb 24 11:07:27 CET 1999 Werner Koch * de.po: Imported update for 0.9.3 Wed Feb 10 17:15:39 CET 1999 Werner Koch * pl.po: New version. Wed Jan 20 21:40:21 CET 1999 Werner Koch * es_ES.po: Import of new version. Wed Jan 13 12:49:36 CET 1999 Werner Koch * de.po de.glo: New version imported. Tue Jan 12 11:17:18 CET 1999 Werner Koch * fr.po: Imported new version Tue Dec 29 14:41:47 CET 1998 Werner Koch * pl.po: Janusz A. Urbanowicz contributed this one Thu Dec 17 18:31:15 CET 1998 Werner Koch * fr.po: Imported new version Mon Dec 14 21:18:49 CET 1998 Werner Koch * de.po: Imported new version. Thu Dec 10 20:15:36 CET 1998 Werner Koch * *.po: Changed some english strings. Tue Dec 8 15:09:29 CET 1998 Werner Koch * pt_BR.po: Add translation by Thiago Jung Bauermann. Fri Nov 27 12:39:29 CET 1998 Werner Koch * en.po: Removed Fri Nov 20 11:46:22 1998 Werner Koch (wk@isil.d.shuttle.de) * de.po: Imported new version * de.glo: Glossary used for de.po. Sat Nov 14 10:16:59 1998 Werner Koch (wk@isil.d.shuttle.de) * es_ES.po: New translation by Urko Lusa. Tue Nov 10 10:48:02 1998 Werner Koch (wk@isil.d.shuttle.de) * it.po: Imported new version. Fri Oct 30 20:03:17 1998 Werner Koch (wk@isil.d.shuttle.de) * fr.po: Imported new version Mon Oct 12 09:08:09 1998 Werner Koch (wk@isil.d.shuttle.de) * it.po: Imported new version. * de.po: Imported new version. Sun Oct 11 16:24:27 1998 Werner Koch (wk@isil.d.shuttle.de) * fr.po: Imported new version Wed Oct 7 13:12:00 1998 Werner Koch (wk@isil.d.shuttle.de) * Makefile.in.in: Fixed mkinstalldirs problems Mon Sep 21 15:03:44 1998 Werner Koch (wk@(none)) * it.po: New version from Marco d'Itri Mon Sep 21 09:28:54 1998 Werner Koch (wk@(none)) * fr.po: New version from Gaël Quéri Tue Aug 11 12:28:11 1998 Werner Koch (wk@(none)) * it.po: New file from Marco. Thu Jul 9 21:14:51 1998 Werner Koch (wk@isil.d.shuttle.de) * de.po: Fixed typos and added new translations. Fri Jun 26 11:44:24 1998 Werner Koch (wk@isil.d.shuttle.de) * it.po: New file from Marco. Thu May 28 10:44:25 1998 Werner Koch (wk@isil.d.shuttle.de) * it.po: Add small corrections from Marco Thu Apr 9 10:03:14 1998 Werner Koch (wk@isil.d.shuttle.de) * it.po: New version from Marco Fri Mar 13 09:43:19 1998 Werner Koch (wk@isil.d.shuttle.de) * it.po: New Copyright 1998, 1999, 2000, 2001, 2004, 2005, 2007, 2010 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/po/POTFILES.in0000644000175000017500000000161312635262326012042 00000000000000# List of source files containing translatable strings for GnuPG # Copyright (c) 1998, 2003, 2004 Free Software Foundation, Inc. cipher/cast5.c cipher/md.c cipher/primegen.c cipher/random.c cipher/rndegd.c cipher/rndlinux.c g10/app-openpgp.c g10/armor.c g10/card-util.c g10/cardglue.c g10/dearmor.c g10/decrypt.c g10/delkey.c g10/encode.c g10/encr-data.c g10/exec.c g10/export.c g10/gpg.c g10/getkey.c g10/gpgv.c g10/helptext.c g10/import.c g10/keydb.c g10/keyedit.c g10/keygen.c g10/keyid.c g10/keylist.c g10/keyring.c g10/keyserver.c g10/mainproc.c g10/misc.c g10/openfile.c g10/parse-packet.c g10/passphrase.c g10/photoid.c g10/pkclist.c g10/plaintext.c g10/pubkey-enc.c g10/revoke.c g10/seckey-cert.c g10/seskey.c g10/sig-check.c g10/sign.c g10/skclist.c g10/tdbdump.c g10/tdbio.c g10/textfilter.c g10/trustdb.c g10/verify.c util/argparse.c util/errors.c util/logger.c util/miscutil.c util/secmem.c gnupg-1.4.20/po/en@quot.po0000644000175000017500000053357612635457217012267 00000000000000# English translations for gnupg package. # Copyright (C) 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the gnupg package. # Automatically generated, 2015. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.20\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2015-12-20 08:53+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en@quot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "can't gen prime with pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "can't generate a prime with less than %d bits\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "no entropy gathering module detected\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "can't lock ‘%s’: %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "waiting for lock on ‘%s’...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "can't open ‘%s’: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "can't stat ‘%s’: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "‘%s’ is not a regular file - ignored\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "note: random_seed file is empty\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "WARNING: invalid size of random_seed file - not used\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "can't read ‘%s’: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "note: random_seed file not updated\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "can't create ‘%s’: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "can't write ‘%s’: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "can't close ‘%s’: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "WARNING: using insecure random number generator!!\n" #: cipher/random.c:894 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 "" "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" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "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" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "failed to store the fingerprint: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "failed to store the creation date: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "reading public key failed: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "response does not contain the public key data\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "response does not contain the RSA modulus\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "response does not contain the RSA public exponent\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "using default PIN as %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "failed to use default PIN as %s: %s - disabling further default use\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Please enter the PIN%%0A[sigs done: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Please enter the PIN" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN callback returned error: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN for CHV%d is too short; minimum length is %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "verify CHV%d failed: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "error retrieving CHV status from card\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "card is permanently locked!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "%d Admin PIN attempts remaining before card is permanently locked\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Please enter the Admin PIN" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "access to admin commands is not configured\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Reset Code not or not anymore available\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Please enter the Reset Code for the card" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Reset Code is too short; minimum length is %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|New Reset Code" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|New Admin PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|New PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "error getting new PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "error reading application data\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "error reading fingerprint DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "key already exists\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "existing key will be replaced\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "generating new key\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "writing new key\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "creation timestamp missing\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSA modulus missing or not of size %d bits\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "RSA public exponent missing or larger than %d bits\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "RSA prime %s missing or not of size %d bits\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "failed to store the key: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "please wait while key is being generated ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "generating key failed\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "key generation completed (%d seconds)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "invalid structure of OpenPGP card (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "fingerprint on card does not match requested one\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "card does not support digest algorithm %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "signatures created so far: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "verification of Admin PIN is currently prohibited through this command\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "can't access %s - invalid OpenPGP card?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armor: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "invalid armor header: " #: g10/armor.c:459 msgid "armor header: " msgstr "armor header: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "invalid clearsig header\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "unknown armor header: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "nested clear text signatures\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "unexpected armor: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "invalid dash escaped line: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "invalid radix64 character %02X skipped\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "premature eof (no CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "premature eof (in CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "malformed CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC error; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "premature eof (in trailer)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "error in trailer line\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "no valid OpenPGP data found.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "invalid armor: line longer than %d characters\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "quoted printable character in armor - probably a buggy MTA has been used\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP card not available: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "OpenPGP card no. %s detected\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "can't do this in batch mode\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "This command is only available for version 2 cards\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Your selection? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[not set]" #: g10/card-util.c:512 msgid "male" msgstr "male" #: g10/card-util.c:513 msgid "female" msgstr "female" #: g10/card-util.c:513 msgid "unspecified" msgstr "unspecified" #: g10/card-util.c:540 msgid "not forced" msgstr "not forced" #: g10/card-util.c:540 msgid "forced" msgstr "forced" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Error: Only plain ASCII is currently allowed.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Error: The “<” character may not be used.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Error: Double spaces are not allowed.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Cardholder's surname: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Cardholder's given name: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Error: Combined name too long (limit is %d characters).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL to retrieve public key: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Error: URL too long (limit is %d characters).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "error allocating enough memory: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "error reading ‘%s’: %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "error writing ‘%s’: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Login data (account name): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Error: Login data too long (limit is %d characters).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Private DO data: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Error: Private DO too long (limit is %d characters).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Language preferences: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Error: invalid length of preference string.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Error: invalid characters in preference string.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Sex ((M)ale, (F)emale or space): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Error: invalid response.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA fingerprint: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Error: invalid formatted fingerprint.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "key operation not possible: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "not an OpenPGP card" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "error getting current key info: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Replace existing key? (y/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "What keysize do you want for the Signature key? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "What keysize do you want for the Encryption key? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "What keysize do you want for the Authentication key? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "rounded up to %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s keysizes must be in the range %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "The card will now be re-configured to generate a key of %u bits\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "error changing size of key %d to %u bits: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Make off-card backup of encryption key? (Y/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "NOTE: keys are already stored on the card!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Replace existing keys? (y/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Please note that the factory settings of the PINs are\n" " PIN = ‘%s’ Admin PIN = ‘%s’\n" "You should change them using the command --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Please select the type of key to generate:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Signature key\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Encryption key\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Authentication key\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Invalid selection.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Please select where to store the key:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "unknown key protection algorithm\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "secret parts of key are not available\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "secret key already stored on a card\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "error writing key to card: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "quit this menu" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "show admin commands" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "show this help" #: g10/card-util.c:1687 msgid "list all available data" msgstr "list all available data" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "change card holder's name" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "change URL to retrieve key" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "fetch the key specified in the card URL" #: g10/card-util.c:1693 msgid "change the login name" msgstr "change the login name" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "change the language preferences" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "change card holder's sex" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "change a CA fingerprint" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "toggle the signature force PIN flag" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "generate new keys" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "menu to change or unblock the PIN" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "verify the PIN and list all data" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "unblock the PIN using a Reset Code" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/card> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Admin-only command\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Admin commands are allowed\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Admin commands are not allowed\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Invalid command (try “help”)\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "card reader not available\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Please insert the card and hit return or enter ‘c’ to cancel: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "selecting openpgp failed: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Hit return when ready or enter ‘c’ to cancel: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Enter New Admin PIN: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Enter New PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Enter Admin PIN: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Enter PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Repeat this PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN not correctly repeated; try again" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "can't open ‘%s’\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output doesn't work for this command\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "key “%s” not found: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "error reading keyblock: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(unless you specify the key by fingerprint)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "can't do this in batch mode without “--yes”\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Delete this key from the keyring? (y/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "This is a secret key! - really delete? (y/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "deleting keyblock failed: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "ownertrust information cleared\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "there is a secret key for public key “%s”!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "use option “--delete-secret-keys” to delete it first.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "error creating passphrase: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "can't use a symmetric ESK packet due to the S2K mode\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "using cipher %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "‘%s’ already compressed\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "WARNING: ‘%s’ is an empty file\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "reading from ‘%s’\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "forcing symmetric cipher %s (%d) violates recipient preferences\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "you may not use %s while in %s mode\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s encrypted for: “%s”\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s encrypted data\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "encrypted with unknown algorithm %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problem handling encrypted packet\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "no remote program execution supported\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "can't create directory ‘%s’: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "external program calls are disabled due to unsafe options file permissions\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "this platform requires temporary files when calling external programs\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "unable to execute program ‘%s’: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "unable to execute shell ‘%s’: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "system error while calling external program: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "unnatural exit of external program\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "unable to execute external program\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "unable to read external program response: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "WARNING: unable to remove tempfile (%s) ‘%s’: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "WARNING: unable to remove temp directory ‘%s’: %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "export signatures that are marked as local-only" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "export attribute user IDs (generally photo IDs)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "export revocation keys marked as “sensitive”" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "remove the passphrase from exported subkeys" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "remove unusable parts from key during export" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "remove as much as possible from key during export" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "exporting secret keys not allowed\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "key %s: not protected - skipped\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "key %s: PGP 2.x style key - skipped\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "key %s: key material on-card - skipped\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "about to export an unprotected subkey\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "failed to unprotect the subkey: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "WARNING: secret key %s does not have a simple SK checksum\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "WARNING: nothing exported\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Commands:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[file]|make a signature" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[file]|make a clear text signature" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "make a detached signature" #: g10/gpg.c:393 msgid "encrypt data" msgstr "encrypt data" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "encryption only with symmetric cipher" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "decrypt data (default)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verify a signature" #: g10/gpg.c:401 msgid "list keys" msgstr "list keys" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "list keys and signatures" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "list and check key signatures" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "list keys and fingerprints" #: g10/gpg.c:406 msgid "list secret keys" msgstr "list secret keys" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "generate a new key pair" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "remove keys from the public keyring" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "remove keys from the secret keyring" #: g10/gpg.c:411 msgid "sign a key" msgstr "sign a key" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "sign a key locally" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "sign or edit a key" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "generate a revocation certificate" #: g10/gpg.c:416 msgid "export keys" msgstr "export keys" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "export keys to a key server" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "import keys from a key server" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "search for keys on a key server" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "update all keys from a keyserver" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "import/merge keys" #: g10/gpg.c:429 msgid "print the card status" msgstr "print the card status" #: g10/gpg.c:430 msgid "change data on a card" msgstr "change data on a card" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "change a card's PIN" #: g10/gpg.c:440 msgid "update the trust database" msgstr "update the trust database" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [files]|print message digests" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Options:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "create ascii armored output" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAME|encrypt for NAME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "use this user-id to sign or decrypt" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|set compress level N (0 disables)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "use canonical text mode" #: g10/gpg.c:486 msgid "use as output file" msgstr "use as output file" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "verbose" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "do not make any changes" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "prompt before overwriting" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "use strict OpenPGP behavior" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "generate PGP 2.x compatible messages" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(See the man page for a complete listing of all commands and options)\n" #: g10/gpg.c:576 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" "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" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Please report bugs to .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Usage: gpg [options] [files] (-h for help)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Supported algorithms:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Pubkey: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cipher: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compression: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "usage: gpg [options] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "conflicting commands\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "no = sign found in group definition ‘%s’\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "WARNING: unsafe ownership on homedir ‘%s’\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "WARNING: unsafe ownership on configuration file ‘%s’\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "WARNING: unsafe permissions on homedir ‘%s’\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "WARNING: unsafe permissions on configuration file ‘%s’\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "WARNING: unsafe enclosing directory ownership on homedir ‘%s’\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "WARNING: unsafe enclosing directory ownership on configuration file ‘%s’\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "WARNING: unsafe enclosing directory permissions on homedir ‘%s’\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "WARNING: unsafe enclosing directory permissions on configuration file ‘%s’\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "unknown configuration item ‘%s’\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "display photo IDs during key listings" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "show policy URLs during signature listings" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "show all notations during signature listings" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "show IETF standard notations during signature listings" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "show user-supplied notations during signature listings" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "show preferred keyserver URLs during signature listings" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "show user ID validity during key listings" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "show revoked and expired user IDs in key listings" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "show revoked and expired subkeys in key listings" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "show the keyring name in key listings" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "show expiration dates during signature listings" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTE: old default options file ‘%s’ ignored\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTE: no default option file ‘%s’\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "option file ‘%s’: %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "reading options from ‘%s’\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTE: %s is not for normal use!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "‘%s’ is not a valid signature expiration\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "‘%s’ is not a valid character set\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "could not parse keyserver URL\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: invalid keyserver options\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "invalid keyserver options\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: invalid import options\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "invalid import options\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: invalid export options\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "invalid export options\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: invalid list options\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "invalid list options\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "display photo IDs during signature verification" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "show policy URLs during signature verification" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "show all notations during signature verification" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "show IETF standard notations during signature verification" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "show user-supplied notations during signature verification" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "show preferred keyserver URLs during signature verification" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "show user ID validity during signature verification" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "show revoked and expired user IDs in signature verification" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "show only the primary user ID in signature verification" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "validate signatures with PKA data" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "elevate the trust of signatures with valid PKA data" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: invalid verify options\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "invalid verify options\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "unable to set exec-path to %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: invalid auto-key-locate list\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "invalid auto-key-locate list\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "WARNING: program may create a core file!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "WARNING: %s overrides %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s not allowed with %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s makes no sense with %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "NOTE: %s is not available in this version\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "will not run with insecure memory due to %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "you can only make detached or clear signatures while in --pgp2 mode\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "you can't sign and encrypt at the same time while in --pgp2 mode\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "you must use files (and not a pipe) when working with --pgp2 enabled.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "encrypting a message in --pgp2 mode requires the IDEA cipher\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "selected cipher algorithm is invalid\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "selected digest algorithm is invalid\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "selected compression algorithm is invalid\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "selected certification digest algorithm is invalid\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed must be greater than 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed must be greater than 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth must be in the range from 1 to 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "invalid default-cert-level; must be 0, 1, 2, or 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "invalid min-cert-level; must be 1, 2, or 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTE: simple S2K mode (0) is strongly discouraged\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "invalid S2K mode; must be 0, 1 or 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "invalid default preferences\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "invalid personal cipher preferences\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "invalid personal digest preferences\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "invalid personal compress preferences\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s does not yet work with %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "you may not use cipher algorithm ‘%s’ while in %s mode\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "you may not use digest algorithm ‘%s’ while in %s mode\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "you may not use compression algorithm ‘%s’ while in %s mode\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "failed to initialize the TrustDB: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "WARNING: recipients (-r) given without using public key encryption\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [filename]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [filename]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "symmetric encryption of ‘%s’ failed: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [filename]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [filename]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "you cannot use --symmetric --encrypt with --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "you cannot use --symmetric --encrypt while in %s mode\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [filename]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [filename]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [filename]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "you cannot use --symmetric --sign --encrypt while in %s mode\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [filename]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [filename]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [filename]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key user-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key user-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key user-id [commands]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [user-id] [keyring]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "keyserver send failed: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "keyserver receive failed: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "key export failed: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "keyserver search failed: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "keyserver refresh failed: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "dearmoring failed: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "enarmoring failed: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "invalid hash algorithm ‘%s’\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[filename]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Go ahead and type your message ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "the given certification policy URL is invalid\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "the given signature policy URL is invalid\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "the given preferred keyserver URL is invalid\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "too many entries in pk cache - disabled\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[User ID not found]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "key %s: secret key without public key - skipped\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "automatically retrieved ‘%s’ via %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Invalid key %s made valid by --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "no secret subkey for public subkey %s - ignoring\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "using subkey %s instead of primary key %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "be somewhat more quiet" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "take the keys from this keyring" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "make timestamp conflicts only a warning" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|write status info to this FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Usage: gpgv [options] [files] (-h for help)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "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." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer “yes” to set this key to\n" "ultimately trusted\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "If you want to use this untrusted key anyway, answer “yes”." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Enter the user ID of the addressee to whom you want to send the message." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Enter the size of the key" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Answer “yes” or “no”" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Enter the name of the key holder" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "please enter an optional but highly suggested email address" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Please enter an optional comment" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "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 quit the key generation." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Answer “yes” (or just “y”) if it is okay to generate the sub key." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "“0” means you make no particular claim as to how carefully you verified the\n" " key.\n" "\n" "“1” means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a “persona” verification, where you sign the key of a pseudonymous " "user.\n" "\n" "“2” means you did casual verification of the key. For example, this could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "“3” means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what “casual” and “extensive”\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer “0”." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Answer “yes” if you want to sign ALL the user IDs" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Answer “yes” if you really want to delete this user ID.\n" "All certificates are then also lost!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Answer “yes” if it is okay to delete the subkey" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "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:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Please enter the passphrase; this is a secret sentence \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Please repeat the last passphrase, so you are sure what you typed in." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Give the name of the file to which the signature applies" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Answer “yes” if it is okay to overwrite the file" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " “Key has been compromised”\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " “Key is superseded”\n" " Use this if you have replaced this key with a newer one.\n" " “Key is no longer used”\n" " Use this if you have retired this key.\n" " “User ID is no longer valid”\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "No help available" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "No help available for ‘%s’" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "import signatures that are marked as local-only" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "repair damage from the pks keyserver during import" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "do not clear the ownertrust values during import" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "do not update the trustdb after import" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "create a public key when importing a secret key" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "only accept updates to existing keys" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "remove unusable parts from key after import" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "remove as much as possible from key after import" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "skipping block of type %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu keys processed so far\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Total number processed: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " skipped new keys: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " w/o user IDs: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " imported: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " unchanged: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " new user IDs: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " new subkeys: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " new signatures: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " new key revocations: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " secret keys read: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " secret keys imported: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " secret keys unchanged: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " not imported: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " signatures cleaned: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " user IDs cleaned: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "WARNING: key %s contains preferences for unavailable\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algorithms on these user IDs:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " “%s”: preference for cipher algorithm %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " “%s”: preference for digest algorithm %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " “%s”: preference for compression algorithm %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "it is strongly suggested that you update your preferences and\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "re-distribute this key to avoid potential algorithm mismatch problems\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "you can update your preferences with: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "key %s: no user ID\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "key %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "rejected by import filter" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "key %s: PKS subkey corruption repaired\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "key %s: accepted non self-signed user ID “%s”\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "key %s: no valid user IDs\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "this may be caused by a missing self-signature\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "key %s: public key not found: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "key %s: new key - skipped\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "no writable keyring found: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "writing to ‘%s’\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "error writing keyring ‘%s’: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "key %s: public key “%s” imported\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "key %s: doesn't match our copy\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "key %s: can't locate original keyblock: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "key %s: can't read original keyblock: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "key %s: “%s” 1 new user ID\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "key %s: “%s” %d new user IDs\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "key %s: “%s” 1 new signature\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "key %s: “%s” %d new signatures\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "key %s: “%s” 1 new subkey\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "key %s: “%s” %d new subkeys\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "key %s: “%s” %d signature cleaned\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "key %s: “%s” %d signatures cleaned\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "key %s: “%s” %d user ID cleaned\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "key %s: “%s” %d user IDs cleaned\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "key %s: “%s” not changed\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "secret key %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "importing secret keys not allowed\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "key %s: secret key with invalid cipher %d - skipped\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "no default secret keyring: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "key %s: secret key imported\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "key %s: already in secret keyring\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "key %s: secret key not found: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "key %s: no public key - can't apply revocation certificate\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "key %s: invalid revocation certificate: %s - rejected\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "key %s: “%s” revocation certificate imported\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "key %s: no user ID for signature\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "key %s: unsupported public key algorithm on user ID “%s”\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "key %s: invalid self-signature on user ID “%s”\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "key %s: unsupported public key algorithm\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "key %s: invalid direct key signature\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "key %s: no subkey for key binding\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "key %s: invalid subkey binding\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "key %s: removed multiple subkey binding\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "key %s: no subkey for key revocation\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "key %s: invalid subkey revocation\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "key %s: removed multiple subkey revocation\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "key %s: skipped user ID “%s”\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "key %s: skipped subkey\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "key %s: non exportable signature (class 0x%02X) - skipped\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "key %s: revocation certificate at wrong place - skipped\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "key %s: invalid revocation certificate: %s - skipped\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "key %s: subkey signature in wrong place - skipped\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "key %s: unexpected signature class (0x%02X) - skipped\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "key %s: duplicated user ID detected - merged\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "WARNING: key %s may be revoked: fetching revocation key %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "WARNING: key %s may be revoked: revocation key %s not present.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "key %s: “%s” revocation certificate added\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "key %s: direct key signature added\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "NOTE: a key's S/N does not match the card's one\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "NOTE: primary key is online and stored on card\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "NOTE: secondary key is online and stored on card\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "error creating keyring ‘%s’: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "keyring ‘%s’ created\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "keyblock resource ‘%s’: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "failed to rebuild keyring cache: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revocation]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[self-signature]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 bad signature\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d bad signatures\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 signature not checked due to a missing key\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signatures not checked due to missing keys\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 signature not checked due to an error\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signatures not checked due to errors\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 user ID without valid self-signature detected\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d user IDs without valid self-signatures detected\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = I trust marginally\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = I trust fully\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "Please enter a domain to restrict this signature, or enter for none.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "User ID “%s” is revoked." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Are you sure you still want to sign it? (y/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Unable to sign.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "User ID “%s” is expired." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "User ID “%s” is not self-signed." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "User ID “%s” is signable. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Sign it? (y/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "The self-signature on “%s”\n" "is a PGP 2.x-style signature.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Do you want to promote it to an OpenPGP self-signature? (y/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Your current signature on “%s”\n" "has expired.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Do you want to issue a new signature to replace the expired one? (y/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Your current signature on “%s”\n" "is a local signature.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Do you want to promote it to a full exportable signature? (y/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "“%s” was already locally signed by key %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "“%s” was already signed by key %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Do you want to sign it again anyway? (y/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Nothing to sign with key %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "This key has expired!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "This key is due to expire on %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Do you want your signature to expire at the same time? (Y/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "This would make the key unusable in PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter “0”.\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) I will not answer.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) I have not checked at all.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) I have done casual checking.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) I have done very careful checking.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Your selection? (enter ‘?’ for more information): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Are you sure that you want to sign this key with your\n" "key “%s” (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "This will be a self-signature.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "WARNING: the signature will not be marked as non-exportable.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "WARNING: the signature will not be marked as non-revocable.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "The signature will be marked as non-exportable.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "The signature will be marked as non-revocable.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "I have not checked this key at all.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "I have checked this key casually.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "I have checked this key very carefully.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Really sign? (y/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "signing failed: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "Key has only stub or on-card key items - no passphrase to change.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "This key is not protected.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Secret parts of primary key are not available.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Secret parts of primary key are stored on-card.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Key is protected.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Can't edit this key: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Enter the new passphrase for this secret key.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "passphrase not correctly repeated; try again" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Do you really want to do this? (y/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "moving a key signature to the correct place\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "save and quit" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "show key fingerprint" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "list key and user IDs" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "select user ID N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "select subkey N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "check signatures" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "sign selected user IDs [* see below for related commands]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "sign selected user IDs locally" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "sign selected user IDs with a trust signature" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "sign selected user IDs with a non-revocable signature" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "add a user ID" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "add a photo ID" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "delete selected user IDs" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "add a subkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "add a key to a smartcard" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "move a key to a smartcard" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "move a backup key to a smartcard" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "delete selected subkeys" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "add a revocation key" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "delete signatures from the selected user IDs" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "change the expiration date for the key or selected subkeys" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "flag the selected user ID as primary" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "toggle between the secret and public key listings" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "list preferences (expert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "list preferences (verbose)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "set preference list for the selected user IDs" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "set the preferred keyserver URL for the selected user IDs" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "set a notation for the selected user IDs" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "change the passphrase" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "change the ownertrust" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "revoke signatures on the selected user IDs" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "revoke selected user IDs" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "revoke key or selected subkeys" #: g10/keyedit.c:1439 msgid "enable key" msgstr "enable key" #: g10/keyedit.c:1440 msgid "disable key" msgstr "disable key" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "show selected photo IDs" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "compact unusable user IDs and remove unusable signatures from key" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "compact unusable user IDs and remove all signatures from key" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "error reading secret keyblock “%s”: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Secret key is available.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Need the secret key to do this.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Please use the command “toggle” first.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* The ‘sign’ command may be prefixed with an ‘l’ for local signatures " "(lsign),\n" " a ‘t’ for trust signatures (tsign), an ‘nr’ for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Key is revoked." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Really sign all user IDs? (y/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Hint: Select the user IDs to sign\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Unknown signature type ‘%s’\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "This command is not allowed while in %s mode.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "You must select at least one user ID.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "You can't delete the last user ID!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Really remove all selected user IDs? (y/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Really remove this user ID? (y/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Really move the primary key? (y/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "You must select exactly one key.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Command expects a filename argument\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Can't open ‘%s’: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Error reading backup key from ‘%s’: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "You must select at least one key.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Do you really want to delete the selected keys? (y/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Do you really want to delete this key? (y/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Really revoke all selected user IDs? (y/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Really revoke this user ID? (y/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Do you really want to revoke the entire key? (y/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Do you really want to revoke the selected subkeys? (y/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Do you really want to revoke this subkey? (y/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Owner trust may not be set while using a user provided trust database\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Set preference list to:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Really update the preferences for the selected user IDs? (y/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Really update the preferences? (y/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Save changes? (y/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Quit without saving? (y/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "update failed: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "update secret failed: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Key not changed so no update needed.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Digest: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Features: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Keyserver no-modify" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Preferred keyserver: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notations: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "There are no preferences on a PGP 2.x-style user ID.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "This key was revoked on %s by %s key %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "This key may be revoked by %s key %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(sensitive)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "created: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "revoked: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "expired: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "expires: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "usage: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "trust: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "validity: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "This key has been disabled" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "card-no: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "revoked" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "expired" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "WARNING: Your encryption subkey expires soon.\n" #: g10/keyedit.c:3008 msgid "You may want to change its expiration date too.\n" msgstr "You may want to change its expiration date too.\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Are you sure you still want to add it? (y/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "You may not add a photo ID to a PGP2-style key.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Delete this good signature? (y/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Delete this invalid signature? (y/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Delete this unknown signature? (y/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Really delete this self-signature? (y/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Deleted %d signature.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Deleted %d signatures.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nothing deleted.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "invalid" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "User ID “%s” compacted: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "User ID “%s”: %d signature removed\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "User ID “%s”: %d signatures removed\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "User ID “%s”: already minimized\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "User ID “%s”: already clean\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "You may not add a designated revoker to a PGP 2.x-style key.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Enter the user ID of the designated revoker: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "cannot appoint a PGP 2.x style key as a designated revoker\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "you cannot appoint a key as its own designated revoker\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "this key has already been designated as a revoker\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "WARNING: appointing a key as a designated revoker cannot be undone!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Please remove selections from the secret keys.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Please select at most one subkey.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Changing expiration time for a subkey.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Changing expiration time for the primary key.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "You can't change the expiration date of a v3 key\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "No corresponding signature in secret ring\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "signing subkey %s is already cross-certified\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "subkey %s does not sign and so does not need to be cross-certified\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Please select exactly one user ID.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "skipping v3 self-signature on user ID “%s”\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Enter your preferred keyserver URL: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Are you sure you want to replace it? (y/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Are you sure you want to delete it? (y/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Enter the notation: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Proceed? (y/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "No user ID with index %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "No user ID with hash %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "No subkey with index %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "user ID: “%s”\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "signed by your key %s on %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (non-exportable)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "This signature expired on %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Are you sure you still want to revoke it? (y/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Create a revocation certificate for this signature? (y/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Not signed by you.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "You have signed these user IDs on key %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (non-revocable)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "revoked by your key %s on %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "You are about to revoke these signatures:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Really create the revocation certificates? (y/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "no secret key\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "user ID “%s” is already revoked\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "WARNING: a user ID signature is dated %d seconds in the future\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Key %s is already revoked.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Subkey %s is already revoked.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Displaying %s photo ID of size %ld for key %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "preference ‘%s’ duplicated\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "too many cipher preferences\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "too many digest preferences\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "too many compression preferences\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "invalid item ‘%s’ in preference string\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "writing direct signature\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "writing self signature\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "writing key binding signature\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "keysize invalid; using %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "keysize rounded up to %u bits\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certify" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Encrypt" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Authenticate" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsEeAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Possible actions for a %s key: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Current allowed actions: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Toggle the sign capability\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Toggle the encrypt capability\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Toggle the authenticate capability\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Finished\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Please select what kind of key you want:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA and RSA (default)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA and Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (sign only)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (sign only)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (encrypt only)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (encrypt only)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (set your own capabilities)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (set your own capabilities)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s keys may be between %u and %u bits long.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "What keysize do you want for the subkey? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "What keysize do you want? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Requested keysize is %u bits\n" #: g10/keygen.c:1722 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 "" "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" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Key is valid for? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Signature is valid for? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "invalid value\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Key does not expire at all\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Signature does not expire at all\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Key expires at %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Signature expires at %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Is this correct? (y/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " “Heinrich Heine (Der Dichter) ”\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Real name: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Invalid character in name\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Name may not start with a digit\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Name must be at least 5 characters long\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Email address: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Not a valid email address\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Comment: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Invalid character in comment\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "You are using the ‘%s’ character set.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "You selected this USER-ID:\n" " “%s”\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Please don't put the email address into the real name or the comment\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Change (N)ame, (C)omment, (E)mail or (Q)uit? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Please correct the error first\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "You need a Passphrase to protect your secret key.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "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" #: g10/keygen.c:2034 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 "" "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" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Key generation canceled.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "writing public key to ‘%s’\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "writing secret key stub to ‘%s’\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "writing secret key to ‘%s’\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "no writable public keyring found: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "no writable secret keyring found: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "error writing public keyring ‘%s’: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "error writing secret keyring ‘%s’: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "public and secret key created and signed.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Note that this key cannot be used for encryption. You may want to use\n" "the command “--edit-key” to generate a subkey for this purpose.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Key generation failed: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "key has been created %lu second in future (time warp or clock problem)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "key has been created %lu seconds in future (time warp or clock problem)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Really create? (y/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "storing key onto card failed: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "can't create backup file ‘%s’: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOTE: backup of card key saved to ‘%s’\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "never " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Critical signature policy: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Signature policy: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Critical preferred keyserver: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Critical signature notation: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Signature notation: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Keyring" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Primary key fingerprint:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Subkey fingerprint:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Primary key fingerprint:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Subkey fingerprint:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Key fingerprint =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Card serial no. =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "renaming ‘%s’ to ‘%s’ failed: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "WARNING: 2 files with confidential information exists.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s is the unchanged one\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s is the new one\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Please fix this possible security flaw\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "caching keyring ‘%s’\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu keys cached so far (%lu signatures)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu keys cached (%lu signatures)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: keyring created\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "include revoked keys in search results" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "include subkeys when searching by key ID" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "use temporary files to pass data to keyserver helpers" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "do not delete temporary files after using them" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "automatically retrieve keys when verifying signatures" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "honor the preferred keyserver URL set on the key" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "honor the PKA record set on a key when retrieving keys" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "WARNING: keyserver option ‘%s’ is not used on this platform\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "disabled" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Enter number(s), N)ext, or Q)uit > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "invalid keyserver protocol (us %d!=handler %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "key “%s” not found on keyserver\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "key not found on keyserver\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "requesting key %s from %s server %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "requesting key %s from %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "searching for names from %s server %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "searching for names from %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "sending key %s to %s server %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "sending key %s to %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "searching for “%s” from %s server %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "searching for “%s” from %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "no keyserver action!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "WARNING: keyserver handler from a different version of GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "keyserver did not send VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "keyserver communications error: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "no keyserver known (use option --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "external keyserver calls are not supported in this build\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "no handler for keyserver scheme ‘%s’\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "action ‘%s’ not supported with keyserver scheme ‘%s’\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s does not support handler version %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "keyserver timed out\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "keyserver internal error\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "“%s” not a key ID: skipping\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "WARNING: unable to refresh key %s via %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "refreshing 1 key from %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "refreshing %d keys from %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "WARNING: unable to fetch URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "WARNING: unable to parse URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "weird size for an encrypted session key (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s encrypted session key\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "passphrase generated with unknown digest algorithm %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "public key is %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "public key encrypted data: good DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "encrypted with %u-bit %s key, ID %s, created %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " “%s”\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "encrypted with %s key, ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "public key decryption failed: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "encrypted with %lu passphrases\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "encrypted with 1 passphrase\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "assuming %s encrypted data\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "IDEA cipher unavailable, optimistically attempting to use %s instead\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "decryption okay\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "WARNING: message was not integrity protected\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "WARNING: encrypted message has been manipulated!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "decryption failed: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTE: sender requested “for-your-eyes-only”\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "original file name='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "WARNING: multiple plaintexts seen\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "standalone revocation - use “gpg --import” to apply\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "no signature found\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "signature verification suppressed\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "can't handle this ambiguous signature data\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Signature made %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " using %s key %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Signature made %s using %s key ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Key available at: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "BAD signature from “%s”" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Expired signature from “%s”" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Good signature from “%s”" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[uncertain]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " aka “%s”" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Signature expired %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Signature expires %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s signature, digest algorithm %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binary" #: g10/mainproc.c:1947 msgid "textmode" msgstr "textmode" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "unknown" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "WARNING: not a detached signature; file ‘%s’ was NOT verified!\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Can't check signature: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "not a detached signature\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "WARNING: multiple signatures detected. Only the first will be checked.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "standalone signature of class 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "old style (PGP 2.x) signature\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "invalid root packet detected in proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "can't disable core dumps: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat of ‘%s’ failed in %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) failed in %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "WARNING: using experimental public key algorithm %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "WARNING: Elgamal sign+encrypt keys are deprecated\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "WARNING: using experimental cipher algorithm %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "WARNING: using experimental digest algorithm %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "WARNING: digest algorithm %s is deprecated\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "please see %s for more information\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "NOTE: This feature is not available in %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: deprecated option “%s”\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "WARNING: “%s” is a deprecated option\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "please use “%s%s” instead\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "WARNING: “%s” is a deprecated command - do not use it\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Uncompressed" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "uncompressed|none" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "this message may not be usable by %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "ambiguous option ‘%s’\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "unknown option ‘%s’\n" #: g10/misc.c:1331 #, c-format msgid "Unknown weak digest '%s'\n" msgstr "Unknown weak digest ‘%s’\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "File ‘%s’ exists. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Overwrite? (y/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: unknown suffix\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Enter new filename" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "writing to stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "assuming signed data in ‘%s’\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "new configuration file ‘%s’ created\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "WARNING: options in ‘%s’ are not yet active during this run\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "directory ‘%s’ created\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "can't handle public key algorithm %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "WARNING: potentially insecure symmetrically encrypted session key\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpacket of type %d has critical bit set\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent is not available in this session\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "malformed GPG_AGENT_INFO environment variable\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent protocol version %d is not supported\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "can't connect to ‘%s’: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problem with the agent - disabling agent use\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (main key ID %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "You need a passphrase to unlock the secret key for user:\n" "“%.*s”\n" "%u-bit %s key, ID %s, created %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Repeat passphrase\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Enter passphrase\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "cancelled by user\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "can't query passphrase in batch mode\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Enter passphrase: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "You need a passphrase to unlock the secret key for\n" "user: “%s”\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bit %s key, ID %s, created %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (subkey on main key ID %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repeat passphrase: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Enter JPEG filename for photo ID: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "unable to open JPEG file ‘%s’: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "This JPEG is really large (%d bytes) !\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Are you sure you want to use it? (y/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "‘%s’ is not a JPEG file\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Is this photo correct (y/N/q)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "no photo viewer set\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "unable to display photo ID!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "No reason specified" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Key is superseded" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Key has been compromised" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Key is no longer used" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "User ID is no longer valid" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "reason for revocation: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "revocation comment: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "No trust value assigned to:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " aka “%s”\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "How much do you trust that this key actually belongs to the named user?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = I don't know or won't say\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = I do NOT trust\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = I trust ultimately\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = back to the main menu\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = skip this key\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = quit\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "The minimum trust level for this key is: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Your decision? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Do you really want to set this key to ultimate trust? (y/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificates leading to an ultimately trusted key:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%s: There is no assurance this key belongs to the named user\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "%s: There is limited assurance this key belongs to the named user\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "This key probably belongs to the named user\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "This key belongs to us\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Use this key anyway? (y/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "WARNING: Using untrusted key!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "WARNING: this key might be revoked (revocation key not present)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "WARNING: This key has been revoked by its designated revoker!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "WARNING: This key has been revoked by its owner!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " This could mean that the signature is forged.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "WARNING: This subkey has been revoked by its owner!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Note: This key has been disabled.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Note: Verified signer's address is ‘%s’\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Note: Signer's address ‘%s’ does not match DNS entry\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "trustlevel adjusted to FULL due to valid PKA info\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "trustlevel adjusted to NEVER due to bad PKA info\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Note: This key has expired!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "WARNING: This key is not certified with a trusted signature!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " There is no indication that the signature belongs to the owner.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "WARNING: We do NOT trust this key!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " The signature is probably a FORGERY.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " It is not certain that the signature belongs to the owner.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: skipped: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: skipped: public key already present\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "You did not specify a user ID. (you may use “-r”)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Current recipients:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Enter the user ID. End with an empty line: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "No such user ID.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "skipped: public key already set as default recipient\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Public key is disabled.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "skipped: public key already set\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "unknown default recipient “%s”\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: skipped: public key is disabled\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "no valid addressees\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "data not saved; use option “--output” to save it\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "error creating ‘%s’: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Detached signature.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Please enter name of data file: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "reading stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "no signed data\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "can't open signed data ‘%s’\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonymous recipient; trying secret key %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "okay, we are the anonymous recipient.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "old encoding of the DEK is not supported\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "cipher algorithm %d%s is unknown or disabled\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "WARNING: cipher algorithm %s not found in recipient preferences\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTE: secret key %s expired at %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "NOTE: key has been revoked" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet failed: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "key %s has no user IDs\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "To be revoked by:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(This is a sensitive revocation key)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Create a designated revocation certificate for this key? (y/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "ASCII armored output forced.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet failed: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Revocation certificate created.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "no revocation keys found for “%s”\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "secret key “%s” not found: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "no corresponding public key: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "public key does not match secret key!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Create a revocation certificate for this key? (y/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "unknown protection algorithm\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "NOTE: This key is not protected!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Please select the reason for the revocation:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Cancel" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Probably you want to select %d here)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Enter an optional description; end it with an empty line:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Reason for revocation: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(No description given)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Is this okay? (y/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "secret key parts are not available\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "protection algorithm %d%s is not supported\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "protection digest %d is not supported\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Invalid passphrase; please try again" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "WARNING: Weak key detected - please change passphrase again.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "generating the deprecated 16-bit checksum for secret key protection\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "weak key created - retrying\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "cannot avoid weak key for symmetric cipher; tried %d times!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA requires the hash length to be a multiple of 8 bits\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA key %s uses an unsafe (%u bit) hash\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA key %s requires a %u bit or larger hash\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "WARNING: signature digest conflict in message\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "WARNING: signing subkey %s is not cross-certified\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "WARNING: signing subkey %s has an invalid cross-certification\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "public key %s is %lu second newer than the signature\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "public key %s is %lu seconds newer than the signature\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "key %s was created %lu second in the future (time warp or clock problem)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTE: signature key %s expired %s\n" #: g10/sig-check.c:254 #, c-format msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "Note: signatures using the %s algorithm are rejected\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "assuming bad signature from key %s due to an unknown critical bit\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "key %s: no subkey for subkey revocation signature\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "key %s: no subkey for subkey binding signature\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "checking created signature failed: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s signature from: “%s”\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" #: g10/sign.c:960 msgid "signing:" msgstr "signing:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s encryption will be used\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "key is not flagged as insecure - can't use it with the faked RNG!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "skipped “%s”: duplicated\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "skipped “%s”: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "skipped: secret key already present\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "this is a PGP generated Elgamal key which is not secure for signatures!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "trust record %lu, type %d: write failed: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# List of assigned trustvalues, created %s\n" "# (Use “gpg --import-ownertrust” to restore them)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "error in ‘%s’: %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "line too long" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "colon missing" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "invalid fingerprint" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "ownertrust value missing" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "error finding trust record in ‘%s’: %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "read error in ‘%s’: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sync failed: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "can't create lock for ‘%s’\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "can't lock ‘%s’\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek failed: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: write failed (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "trustdb transaction too large\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "can't access ‘%s’: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: directory does not exist!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: failed to create version record: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: invalid trustdb created\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trustdb created\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "NOTE: trustdb not writable\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: invalid trustdb\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: failed to create hashtable: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: error updating version record: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: error reading version record: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: error writing version record: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek failed: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read failed (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: not a trustdb file\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: version record with recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: invalid file version %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: error reading free record: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: error writing dir record: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: failed to zero a record: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: failed to append a record: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Error: The trustdb is corrupted.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "can't handle text lines longer than %d characters\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "input line longer than %d characters\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "‘%s’ is not a valid long keyID\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "key %s: accepted as trusted key\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "key %s occurs more than once in the trustdb\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "key %s: no public key for trusted key - skipped\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "key %s marked as ultimately trusted\n" #: g10/trustdb.c:344 #, 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:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "trust record %lu is not of requested type %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "You may try to re-create the trustdb using the commands:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "If that does not work, please consult the manual\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "unable to use unknown trust model (%d) - assuming %s trust model\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "using %s trust model\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10 translator see trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ revoked]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ expired]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ unknown]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ undef ]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[marginal]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ full ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ultimate]" #: g10/trustdb.c:553 msgid "undefined" msgstr "undefined" #: g10/trustdb.c:554 msgid "never" msgstr "never" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginal" #: g10/trustdb.c:556 msgid "full" msgstr "full" #: g10/trustdb.c:557 msgid "ultimate" msgstr "ultimate" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "no need for a trustdb check\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "next trustdb check due at %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "no need for a trustdb check with ‘%s’ trust model\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "no need for a trustdb update with ‘%s’ trust model\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "public key %s not found: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "please do a --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "checking the trustdb\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d keys processed (%d validity counts cleared)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "no ultimately trusted keys found\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "public key of ultimately trusted key %s not found\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "unable to update trustdb version record: write failed: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "input line %u too long or missing LF\n" #: util/errors.c:53 msgid "general error" msgstr "general error" #: util/errors.c:54 msgid "unknown packet type" msgstr "unknown packet type" #: util/errors.c:55 msgid "unknown version" msgstr "unknown version" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "unknown pubkey algorithm" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "unknown digest algorithm" #: util/errors.c:58 msgid "bad public key" msgstr "bad public key" #: util/errors.c:59 msgid "bad secret key" msgstr "bad secret key" #: util/errors.c:60 msgid "bad signature" msgstr "bad signature" #: util/errors.c:61 msgid "checksum error" msgstr "checksum error" #: util/errors.c:62 msgid "bad passphrase" msgstr "bad passphrase" #: util/errors.c:63 msgid "public key not found" msgstr "public key not found" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "unknown cipher algorithm" #: util/errors.c:65 msgid "can't open the keyring" msgstr "can't open the keyring" #: util/errors.c:66 msgid "invalid packet" msgstr "invalid packet" #: util/errors.c:67 msgid "invalid armor" msgstr "invalid armor" #: util/errors.c:68 msgid "no such user id" msgstr "no such user id" #: util/errors.c:69 msgid "secret key not available" msgstr "secret key not available" #: util/errors.c:70 msgid "wrong secret key used" msgstr "wrong secret key used" #: util/errors.c:71 msgid "not supported" msgstr "not supported" #: util/errors.c:72 msgid "bad key" msgstr "bad key" #: util/errors.c:73 msgid "file read error" msgstr "file read error" #: util/errors.c:74 msgid "file write error" msgstr "file write error" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "unknown compress algorithm" #: util/errors.c:76 msgid "file open error" msgstr "file open error" #: util/errors.c:77 msgid "file create error" msgstr "file create error" #: util/errors.c:78 msgid "invalid passphrase" msgstr "invalid passphrase" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "unimplemented pubkey algorithm" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "unimplemented cipher algorithm" #: util/errors.c:81 msgid "unknown signature class" msgstr "unknown signature class" #: util/errors.c:82 msgid "trust database error" msgstr "trust database error" #: util/errors.c:83 msgid "bad MPI" msgstr "bad MPI" #: util/errors.c:84 msgid "resource limit" msgstr "resource limit" #: util/errors.c:85 msgid "invalid keyring" msgstr "invalid keyring" #: util/errors.c:86 msgid "bad certificate" msgstr "bad certificate" #: util/errors.c:87 msgid "malformed user id" msgstr "malformed user id" #: util/errors.c:88 msgid "file close error" msgstr "file close error" #: util/errors.c:89 msgid "file rename error" msgstr "file rename error" #: util/errors.c:90 msgid "file delete error" msgstr "file delete error" #: util/errors.c:91 msgid "unexpected data" msgstr "unexpected data" #: util/errors.c:92 msgid "timestamp conflict" msgstr "timestamp conflict" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "unusable pubkey algorithm" #: util/errors.c:94 msgid "file exists" msgstr "file exists" #: util/errors.c:95 msgid "weak key" msgstr "weak key" #: util/errors.c:96 msgid "invalid argument" msgstr "invalid argument" #: util/errors.c:97 msgid "bad URI" msgstr "bad URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "unsupported URI" #: util/errors.c:99 msgid "network error" msgstr "network error" #: util/errors.c:101 msgid "not encrypted" msgstr "not encrypted" #: util/errors.c:102 msgid "not processed" msgstr "not processed" #: util/errors.c:104 msgid "unusable public key" msgstr "unusable public key" #: util/errors.c:105 msgid "unusable secret key" msgstr "unusable secret key" #: util/errors.c:106 msgid "keyserver error" msgstr "keyserver error" #: util/errors.c:107 msgid "canceled" msgstr "canceled" #: util/errors.c:108 msgid "no card" msgstr "no card" #: util/errors.c:109 msgid "no data" msgstr "no data" #: util/logger.c:183 msgid "ERROR: " msgstr "ERROR: " #: util/logger.c:186 msgid "WARNING: " msgstr "WARNING: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... this is a bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "you found a bug ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "yes" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|okay" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancel|cancel" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "WARNING: using insecure memory!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "operation is not possible without initialized secure memory\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(you may have used the wrong program for this task)\n" gnupg-1.4.20/po/pt.po0000644000175000017500000060633512635457220011263 00000000000000# pt messages for gnupg # Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # Pedro Morais # # Based on pt_PT work done by: # Thiago Jung Bauermann # Rafael Caetano dos Santos msgid "" msgstr "" "Project-Id-Version: gnupg\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:25+0200\n" "Last-Translator: Pedro Morais \n" "Language-Team: pt \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "nenhum mdulo de recolha de entropia detectado\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "impossvel abrir `%s'\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "a escrever chave privada para `%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "impossvel 'stat' a `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' no um ficheiro normal - ignorado\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "nota: random_seed est vazia\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" "AVISO: o ficheiro random_seed tem um tamanho invlido - no utilizado\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "impossvel ler `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "nota: ficheiro random_seed no actualizado\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "impossvel criar `%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "impossvel escrever `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "impossvel fechar `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVISO: a utilizar gerador de nmeros aleatrios inseguro!\n" #: cipher/random.c:894 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 nmeros aleatrios apenas um \"remendo\"\n" "para poder funcionar - no de modo algum um bom gerador!\n" "\n" "NO USE NENHUM DADO GERADO POR ESTE PROGRAMA!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "No h bytes aleatrios suficientes. Por favor, faa outro trabalho para\n" "que o sistema possa recolher mais entropia! (So necessrios mais %d bytes)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "falha ao inicializar a base de dados de confiana: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "falha ao criar 'cache' do porta-chaves: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "remoo do bloco de chave falhou: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "partes da chave secreta no disponveis\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "motivo da revocao: " #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "erro na criao da frase secreta: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "erro na leitura do bloco de chave: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: erro ao ler registo livre: %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "%s' j comprimido\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "gerar um novo par de chaves" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "gerar um novo par de chaves" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "falha ao inicializar a base de dados de confiana: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "remoo do bloco de chave falhou: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "assinatura %s de: \"%s\"\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "nenhum dado OpenPGP vlido encontrado.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "cabealho de armadura invlido: " #: g10/armor.c:459 msgid "armor header: " msgstr "cabealho de armadura: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "cabealho de assinatura em texto puro invlido\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "cabealho de armadura: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "assinaturas em texto puro aninhadas\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "armadura inesperada:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "linha com hfen invlida: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "caracter radix64 invlido %02x ignorado\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "fim de ficheiro prematuro (sem CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "fim de ficheiro prematuro (no CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC malformado\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "erro de CRC; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "fim de ficheiro prematuro (no \"Trailer\")\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "erro na ltima linha\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "nenhum dado OpenPGP vlido encontrado.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura invlida: linha maior que %d caracteres\n" #: g10/armor.c:1296 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/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "chave secreta no disponvel" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "impossvel fazer isso em modo no-interativo\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Este comando no permitido no modo %s.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Opo? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr "Nenhum motivo especificado" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "no processado" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "a escrever chave pblica para `%s'\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "erro ao criar porta-chaves `%s': %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "erro ao criar `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "preferncias actualizadas" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "caracter invlido na cadeia de caractres da preferncia\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "caracter invlido na cadeia de caractres da preferncia\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "%s: verso de ficheiro invlida %d\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "mostra impresso digital" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "%s: verso de ficheiro invlida %d\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "nenhum dado OpenPGP vlido encontrado.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "erro ao escrever no porta-chaves secreto `%s': %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Qual o tamanho de chave desejado? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Qual o tamanho de chave desejado? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Qual o tamanho de chave desejado? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "arredondado para %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "erro na leitura do bloco de chave secreto `%s': %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Por favor selecione o tipo de chave desejado:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "Esta assinatura expirou em %s.\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (apenas cifragem)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Opo invlida.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "motivo da revocao: " #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "algoritmo de compresso desconhecido" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "Componentes secretas da chave primria no disponveis.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "erro na escrita do porta-chaves `%s': %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "sair deste menu" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "comandos em conflito\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "mostra esta ajuda" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Nenhuma ajuda disponvel" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "muda a data de validade" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "muda os valores de confiana" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "mostra impresso digital" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "gerar um novo par de chaves" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "comandos em conflito\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "comandos em conflito\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "a escrever chave privada para `%s'\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Comando invlido (tente \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "chave secreta no disponvel" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "remoo do bloco de chave falhou: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Repita a frase secreta: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "a frase secreta no foi repetida corretamente; tente outra vez" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "impossvel abrir `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output no funciona para este comando\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "chave `%s' no encontrada: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "erro na leitura do bloco de chave: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(a no ser que escolha a chave pela sua impresso digital)\n" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "impossvel fazer isso em modo no-interactivo sem utilizar \"--yes\"\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Remover esta chave do porta-chaves?" #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "Esta chave secreta! - apagar de qualquer modo? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "remoo do bloco de chave falhou: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "informaes de 'ownertrust' limpas\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "h uma chave secreta para a chave pblica \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "utilize a opo \"--delete-secret-keys\" para a apagar primeiro.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "erro na criao da frase secreta: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "no possvel utilizar o pacote ESK simtrico devido ao modo S2K\n" #: g10/encode.c:229 #, fuzzy, c-format msgid "using cipher %s\n" msgstr "assinatura falhou: %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "%s' j comprimido\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "AVISO: `%s' um ficheiro vazio\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "no modo --pgp2 s pode cifrar com chaves RSA de 2048 bits ou menos\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "lendo de `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "impossvel utilizar a cifra IDEA para todas as chaves para que est a " "cifrar.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "ao forar a cifra simtrica %s (%d) viola as preferncias do destinatrio\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "ao forar o algoritmo de compresso %s (%d) viola as preferncias do " "destinatrio\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "ao forar a cifra simtrica %s (%d) viola as preferncias do destinatrio\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "no pode utilizar %s enquanto estiver no modo %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s cifrado para: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "dados cifrados com %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "cifrado com algoritmo desconhecido %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "AVISO: A mensagem foi cifrada com uma chave fraca na cifragem simtrica.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problema ao tratar pacote cifrado\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "" #: g10/exec.c:174 g10/openfile.c:468 #, fuzzy, c-format msgid "can't create directory `%s': %s\n" msgstr "%s: impossvel criar directoria: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "%s: erro ao ler registo de verso: %s\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "no foi possvel alterar o exec-path para %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "no foi possvel alterar o exec-path para %s\n" #: g10/exec.c:511 #, fuzzy, c-format msgid "system error while calling external program: %s\n" msgstr "%s: erro ao ler registo de verso: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "" #: g10/exec.c:537 #, fuzzy msgid "unable to execute external program\n" msgstr "no foi possvel alterar o exec-path para %s\n" #: g10/exec.c:553 #, fuzzy, c-format msgid "unable to read external program response: %s\n" msgstr "no foi possvel alterar o exec-path para %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" #: g10/exec.c:611 #, fuzzy, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "A assinatura ser marcada como no-revocvel.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "revoga uma chave secundria" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "chave secreta no utilizvel" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "a escrever chave privada para `%s'\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "chave %08lX: no est protegida - ignorada\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "chave %08lX: tipo PGP 2.x - ignorada\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "chave %08lX: assintura da subchave no local errado - ignorado\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "falha ao inicializar a base de dados de confiana: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "AVISO: nada exportado\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Comandos:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[ficheiro]|fazer uma assinatura" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[ficheiro]|fazer uma assinatura em texto puro" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "fazer uma assinatura separada" #: g10/gpg.c:393 msgid "encrypt data" msgstr "cifrar dados" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "cifrar apenas com cifra simtrica" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "decifrar dados (aco por omisso)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verificar uma assinatura" #: g10/gpg.c:401 msgid "list keys" msgstr "listar as chaves" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "listar as chaves e as assinaturas" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "verificar as assinaturas das chaves" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "listar as chaves e as impresses digitais" #: g10/gpg.c:406 msgid "list secret keys" msgstr "listar as chaves secretas" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "gerar um novo par de chaves" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "remover chaves do porta-chaves pblico" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "remover chaves do porta-chaves secreto" #: g10/gpg.c:411 msgid "sign a key" msgstr "assinar uma chave" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "assinar uma chave localmente" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "assinar ou editar uma chave" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "gerar um certificado de revogao" #: g10/gpg.c:416 msgid "export keys" msgstr "exportar chaves" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exportar chaves para um servidor de chaves" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importar chaves de um servidor de chaves" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "procurar chaves num servidor de chaves" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "actualizar todas as chaves a partir de um servidor de chaves" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importar/fundir chaves" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "actualizar a base de dados de confiana" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [ficheiros]|imprimir \"digests\" de mensagens" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opes:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "criar sada com armadura ascii" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NOME|cifrar para NOME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "" "usar este identificador de utilizador para\n" "assinar ou decifrar" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "" "|N|estabelecer nvel de compresso N\n" "(0 desactiva)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "usar modo de texto cannico" #: g10/gpg.c:486 msgid "use as output file" msgstr "usar como ficheiro de sada" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "detalhado" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "no fazer alteraes" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "perguntar antes de sobrepr" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Veja a pgina man para uma lista completa de comandos e opes)\n" #: g10/gpg.c:576 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 [ficheiro] assinar e cifrar para o utilizador Bob\n" " --clearsign [ficheiro] criar uma assinatura em texto puro\n" " --detach-sign [ficheiro] criar uma assinatura separada\n" " --list-keys [nomes] mostrar chaves\n" " --fingerprint [nomes] mostrar impresses digitais\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Por favor comunique bugs para .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opes] [ficheiros] (-h para ajuda)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Sintaxe: gpg [opes] [ficheiros]\n" "assina, verifica, cifra ou decifra\n" "a operao por omisso depende dos dados de entrada\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmos suportados:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Chave pblica: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cifra: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Disperso: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compresso: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "uso: gpg [opes] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "comandos em conflito\n" #: g10/gpg.c:1078 #, fuzzy, c-format msgid "no = sign found in group definition `%s'\n" msgstr "nenhum sinal = encontrada na definio de grupo \"%s\"\n" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "AVISO: permisses pouco seguras em %s \"%s\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "AVISO: permisses pouco seguras em %s \"%s\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "AVISO: permisses pouco seguras em %s \"%s\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "AVISO: permisses pouco seguras em %s \"%s\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "criado um novo ficheiro de configurao `%s'\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Nenhuma assinatura correspondente no porta-chaves secreto\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "a URL de poltica de assinatura dada invlida\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "mostrar em que porta-chave a chave est" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Nenhuma assinatura correspondente no porta-chaves secreto\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTA: o ficheiro antigo de opes por omisso `%s' foi ignorado\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: ficheiro de opes por omisso `%s' inexistente\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "ficheiro de opes `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "a ler opes de `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: %s no para uso normal!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "no consegui processar a URI do servidor de chaves\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: opes de exportao invlidas\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "opes de exportao invlidas\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: opes de importao invlidas\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "opes de importao invlidas\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: opes de exportao invlidas\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "opes de exportao invlidas\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: opes de importao invlidas\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "opes de importao invlidas\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "a URL de poltica de assinatura dada invlida\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: opes de exportao invlidas\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "opes de exportao invlidas\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "no foi possvel alterar o exec-path para %s\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: opes de exportao invlidas\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "AVISO: O programa pode criar um ficheiro core!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "AVISO: %s sobrepe %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s no permitido com %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s no faz sentido com %s!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "o gpg-agent no est disponvel nesta sesso\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "a escrever chave privada para `%s'\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "s pode fazer assinaturas separadas ou em texto puro no modo --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "no pode assinar e cifrar ao mesmo tempo no modo --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "deve utilizar ficheiros (e no um 'pipe') quando trabalho no modo --pgp2.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "cifrar uma mensagem no modo --pgp2 necessita da cifra IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "o algoritmo de cifragem selecionado invlido\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "o algoritmo de \"digest\" selecionado invlido\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "o algoritmo de cifragem selecionado invlido\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "o algoritmo de \"digest\" de certificao selecionado invlido\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve ser maior que 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve ser maior que 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth deve estar na entre 1 e 255\n" #: g10/gpg.c:3130 #, fuzzy msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "nvel de verificao por omisso invlido: deve ser 0, 1, 2 ou 3\n" #: g10/gpg.c:3132 #, fuzzy msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "nvel de verificao por omisso invlido: deve ser 0, 1, 2 ou 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: o modo S2K simples (0) no recomendvel\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K invlido: deve ser 0, 1 ou 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "preferncias por omisso invlidas\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "preferncias pessoais de cifra invlidas\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "preferncias pessoais de 'digest' invlidas\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "preferncias pessoais de compresso invlidas\n" #: g10/gpg.c:3191 #, fuzzy, c-format msgid "%s does not yet work with %s\n" msgstr "%s no faz sentido com %s!\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "no pode utilizar %s enquanto estiver no modo %s\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "no pode utilizar %s enquanto estiver no modo %s\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "no pode utilizar %s enquanto estiver no modo %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "falha ao inicializar a base de dados de confiana: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "AVISO: destinatrios (-r) dados sem utilizar uma cifra de chave pblica\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [nome_do_ficheiro]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [nome_do_ficheiro]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "decifragem falhou: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [nome_do_ficheiro]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [nome_do_ficheiro]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "no pode utilizar %s enquanto estiver no modo %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [nome_do_ficheiro]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nome_do_ficheiro]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [nome_do_ficheiro]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "no pode utilizar %s enquanto estiver no modo %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [nome_do_ficheiro]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [nome_do_ficheiro]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [nome_do_ficheiro]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key id-utilizador" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key id-utilizador" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-utilizador [comandos]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-utilizador] [porta-chaves]" #: g10/gpg.c:3667 #, fuzzy, c-format msgid "keyserver send failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/gpg.c:3669 #, fuzzy, c-format msgid "keyserver receive failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/gpg.c:3671 #, fuzzy, c-format msgid "key export failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/gpg.c:3682 #, fuzzy, c-format msgid "keyserver search failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/gpg.c:3692 #, fuzzy, c-format msgid "keyserver refresh failed: %s\n" msgstr "actualizao da chave secreta falhou: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "retirada de armadura falhou: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "criao de armadura falhou: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo de disperso invlido `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[nome_do_ficheiro]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Digite a sua mensagem ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "a URL de poltica de certificao dada invlida\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "a URL de poltica de assinatura dada invlida\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "a URL de poltica de assinatura dada invlida\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "entradas demais no cache pk - desactivado\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[Utilizador no encontrado]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "chave %08lX: chave secreta sem chave pblica - ignorada\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Chave invlida %08lX tornada vlida por --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "h uma chave secreta para a chave pblica \"%s\"!\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "usando chave secundria %08lX ao invs de chave primria %08lX\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "ser mais silencioso" #: g10/gpgv.c:73 #, fuzzy msgid "take the keys from this keyring" msgstr "Remover esta chave do porta-chaves?" #: g10/gpgv.c:75 #, fuzzy msgid "make timestamp conflicts only a warning" msgstr "conflito de \"timestamp\"" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "" "|DF|escrever informaes de estado para o\n" "descritor de ficheiro DF" #: g10/gpgv.c:101 #, fuzzy msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Uso: gpg [opes] [ficheiros] (-h para ajuda)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Voc decide que valor usar aqui; este valor nunca ser exportado para\n" "terceiros. Precisamos dele implementar a rede de confiana, que no tem\n" "nada a ver com a rede de certificados (implicitamente criada)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Para construir a Teia-de-Confiana ('Web-of-Trust'), o GnuPG precisa de\n" "saber quais so as chaves em que deposita confiana absoluta - normalmente\n" "estas so as chaves a que tem acesso chave privada. Responda \"sim\" " "para\n" "que esta chave seja de confiana absoluta.\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Se voc quiser usar esta chave, no de confiana, assim mesmo, responda \"sim" "\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Digite o ID de utilizador do destinatrio para quem quer enviar a\n" "mensagem." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Em geral no uma boa ideia utilizar a mesma chave para assinar e para\n" "cifrar. Este algoritmo s deve ser utilizado em alguns domnios.\n" "Por favor consulte primeiro o seu perito em segurana." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Insira o tamanho da chave" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Responda \"sim\" ou \"no\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Digite o valor necessrio conforme pedido.\n" " possvel digitar uma data ISO (AAAA-MM-DD) mas voc no ter uma boa\n" "reaco a erros - o sistema tentar interpretar o valor dado como um " "intervalo." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Digite o nome do possuidor da chave" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "por favor digite um endereo de email (opcional mas recomendado)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Por favor digite um comentrio (opcional)" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N para mudar o nome.\n" "C para mudar o comentrio.\n" "E para mudar o endereo de email\n" "O para continuar a gerao da chave.\n" "S para interromper a gerao da chave." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Responda \"sim\" (ou apenas \"s\") se quiser gerar a subchave." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Quando assina uma chave de identificao de um utilizador, deve primeiro\n" "verificar que a chave pertence realmente pessoa em questo. til para\n" "terceiros saberem com que cuidado que efectuou esta verificao.\n" "\n" "\"0\" significa que no deseja declarar a forma com verificou a chave\n" "\n" "\"1\" significa que acredita que a chave pertence pessoa em questo, mas\n" " no conseguiu ou no tentou verificar. Este grau til para quando\n" " assina a chave de uma utilizador pseudo-annimo.\n" "\n" "\"2\" significa que efectuou uma verificao normal da chave. Por exemplo,\n" " isto pode significar que verificou a impresso digital da chave e\n" " verificou o identificador de utilizador da chave contra uma " "identificao\n" " fotogrfica.\n" "\n" "\"3\" significa que efectuou uma verificao exaustiva da chave. Por " "exemplo,\n" " isto pode significar que efectuou a verificao pessoalmente, e que \n" " utilizou um documento, com fotografia, difcil de falsificar \n" " (como por exemplo um passaporte) que o nome do dono da chave o\n" " mesmo do que o identificador da chave, e que, finalmente, verificou\n" " (atravs de troca de e-mail) que o endereo de email da chave pertence\n" " ao done da chave.\n" "\n" "Ateno: os exemplos dados para os nveis 2 e 3 so *apenas* exemplos.\n" "Compete-lhe a si decidir o que considera, ao assinar chaves, uma " "verificao\n" "\"normal\" e uma verificao \"exaustiva\".\n" "\n" "Se no sabe qual a resposta correcta, responda \"0\"." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Responda \"sim\" se quiser assinar TODOS os IDs de utilizador" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Responda \"sim\" se quiser realmente remover este ID de utilizador.\n" "Todos os certificados tambm sero perdidos!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Responda \"sim\" se quiser remover a subchave" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Esta uma assinatura vlida na chave; normalmente no desejvel\n" "remover esta assinatura porque ela pode ser importante para estabelecer\n" "uma conexo de confiana chave ou a outra chave certificada por esta." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Esta assinatura no pode ser verificada porque voc no tem a chave\n" "correspondente. Voc deve adiar sua remoo at saber que chave foi usada\n" "porque a chave desta assinatura pode estabelecer uma conexo de confiana\n" "atravs de outra chave j certificada." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "A assinatura no vlida. Faz sentido remov-la do seu porta-chaves." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Esta uma assinatura que liga o ID de utilizador chave. Geralmente\n" "no uma boa idia remover tal assinatura. possvel que o GnuPG\n" "no consiga mais usar esta chave. Faa isto apenas se por alguma\n" "razo esta auto-assinatura no for vlida e h uma segunda disponvel." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Muda as preferncias de todos os identificadores de utilizadores\n" "(ou apenas dos seleccionados) para a lista actual de preferncias.\n" "O 'timestamp' de todas as auto-assinaturas afectuadas ser avanado\n" "em um segundo.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Por favor digite a frase secreta \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Por favor repita a frase secreta, para ter certeza do que digitou." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "D o nome para o ficheiro ao qual a assinatura se aplica" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Responda \"sim\" se quiser escrever por cima do ficheiro" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Por favor digite um novo nome de ficheiro. Se voc apenas carregar em " "RETURN\n" "o ficheiro por omisso (que mostrado entre parnteses) ser utilizado." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Deve especificar uma razo para a emisso do certificado. Dependendo no\n" "contexto, pode escolher as seguintes opes desta lista:\n" " \"A chave foi comprometida\"\n" " Utilize esta opo se tem razes para acreditar que indivduos no\n" " autorizados obtiveram acesso sua chave secreta.\n" " \"A chave foi substituida\"\n" " Utilize esta opo se substituiu esta chave com uma mais recente.\n" " \"A chave j no utilizada\"\n" " Utilize esta opo se j no utiliza a chave.\n" " \"O identificador do utilizador j no vlido\"\n" " Utilize esta opo para comunicar que o identificador do utilizador\n" " no deve ser mais utilizado; normalmente utilizada para indicar\n" " que um endereo de email invlido.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Se desejar, pode inserir uma texto descrevendo a razo pela qual criou\n" "este certificado de revogao. Por favor mantenha este texto conciso.\n" "Uma linha vazia termina o texto.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Nenhuma ajuda disponvel" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Nenhuma ajuda disponvel para `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "actualizar a base de dados de confiana" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "actualizar a base de dados de confiana" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "chave secreta no utilizvel" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "ignorando bloco do tipo %d\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "%lu chaves processadas at agora\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Nmero total processado: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " ignorei novas chaves: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sem IDs de utilizadores: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importados: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " no modificados: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " novos IDs de utilizadores: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " novas subchaves: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " novas assinaturas: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " novas revogaes de chaves: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " chaves secretas lidas: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " chaves secretas importadas: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " chaves secretas no modificadas: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " no importadas: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " novas assinaturas: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " chaves secretas lidas: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Assinou estes identificadores de utilizadores:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "assinatura %s de: \"%s\"\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "chave %08lX: sem ID de utilizador\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "ignorado `%s': %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "chave %08lX: subchave HKP corrompida foi reparada\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "chave %08lX: aceite ID de utilizador sem auto-assinatura '%s'\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "chave %08lX: sem IDs de utilizadores vlidos\n" #: g10/import.c:872 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:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "chave %08lX: chave pblica no encontrada: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "chave %08lX: chave nova - ignorada\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "no foi encontrada nenhum porta-chaves onde escrever: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "a escrever para `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "erro na escrita do porta-chaves `%s': %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "chave %08lX: chave pblica \"%s\" importada\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "chave %08lX: no corresponde nossa cpia\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "chave %08lX: impossvel localizar bloco de chaves original: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "chave %08lX: impossvel ler bloco de chaves original: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chave %8lX: \"%s\" 1 novo ID de utilizador\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "chave %08lX: \"%s\" %d novos IDs de utilizadores\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "chave %08lX: \"%s\" 1 nova assinatura\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "chave %08lX: \"%s\" %d novas assinaturas\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "chave %08lX: \"%s\" 1 nova subchave\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "chave %08lX: \"%s\" %d novas subchaves\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "chave %08lX: \"%s\" %d novas assinaturas\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "chave %08lX: \"%s\" %d novas assinaturas\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "chave %08lX: \"%s\" %d novos IDs de utilizadores\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "chave %08lX: \"%s\" %d novos IDs de utilizadores\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "chave %08lX: \"%s\" no modificada\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "chave `%s' no encontrada: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "a escrever chave privada para `%s'\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "chave %08lX: chave secreta com cifra invlida %d - ignorada\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "sem porta-chaves pblico por omisso: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "chave %08lX: chave secreta importada\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "chave %08lX: j est no porta-chaves secreto\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "chave %08lX: chave secreta no encontrada: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "chave %08lX: sem chave pblica - impossvel aplicar certificado\n" "de revogao\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "chave %08lX: certificado de revogao invlido: %s - rejeitado\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "chave %08lX: \"%s\" certificado de revogao importado\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "chave %08lX: nenhum ID de utilizador para assinatura\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "chave %08lX: algoritmo de chave pblica no suportado no utilizador \"%s\"\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "chave %08lX: auto-assinatura invlida do utilizador \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "chave %08lX: algoritmo de chave pblica no suportado\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "chave %08lX: assinatura directa de chave adicionada\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "chave %08lX: sem subchave para ligao de chaves\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "chave %08lX: ligao de subchave invlida\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "chave %08lX: apagada ligao mltipla de subchave \n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "chave %08lX: sem subchave para revocao de chave\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "chave %08lX: revocao de subchave invlida\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "chave %08lX: removida revogao mltiplace de subchaves\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "chave %08lX: ignorado ID de utilizador '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "chave %08lX: subchave ignorada\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "chave %08lX: assinatura no exportvel (classe %02x) - ignorada\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "chave %08lX: certificado de revogao no local errado - ignorado\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "chave %08lX: certificado de revogao invlido: %s - ignorado\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "chave %08lX: assintura da subchave no local errado - ignorado\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "chave %08lX: classe de assinatura inesperada (%02x) - ignorada\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "chave %08lX: detectado ID de utilizador duplicado - fundido\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "AVISO: a chave %08lX pode estar revocada: a transferir a chave de revocao " "%08lX\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "AVISO: a chave %08lX pode estar revocada: chave de revocao %08lX no " "presente.\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "chave %08lX: certificado de revogao \"%s\" adicionado\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "chave %08lX: assinatura directa de chave adicionada\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "erro ao criar porta-chaves `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "porta-chaves `%s' criado\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "erro ao criar `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "falha ao criar 'cache' do porta-chaves: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revogao]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[auto-assinatura]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 assinatura incorrecta\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d assinaturas incorrectas\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 assinatura no verificada por falta de chave\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d assinaturas no verificadas por falta de chaves\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 assinatura no verificada devido a um erro\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d assinaturas no verificadas devido a erros\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 ID de utilizador sem auto-assinatura vlida detectado\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d IDs de utilizadores sem auto-assinaturas vlidas detectados\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Por favor decida quanto confia neste utilizador para\n" "verificar correctamente as chaves de outros utilizadores\n" "(vendo passaportes, verificando impresses digitais...)?\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = Confio moderadamente\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = Confio plenamente\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Utilizador \"%s\" est revocado." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Voc tem certeza de que quer adicion-la de qualquer forma? (s/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " No foi possvel assinar.\n" #: g10/keyedit.c:627 #, fuzzy, c-format msgid "User ID \"%s\" is expired." msgstr "Utilizador \"%s\" est revocado." #: g10/keyedit.c:655 #, fuzzy, c-format msgid "User ID \"%s\" is not self-signed." msgstr "AVISO: o ID do utilizador \"%s\" no auto-assinado.\n" #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "AVISO: o ID do utilizador \"%s\" no auto-assinado.\n" #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Realmente assinar? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "A sua auto-assinatura em \"%s\"\n" " uma assinatura do tipo PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Quer promov-la a uma auto-assinatura OpenPGP? (s/N) " #: g10/keyedit.c:730 #, fuzzy, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "A sua assinatura actual em \"%s\"\n" " uma assinatura local.\n" #: g10/keyedit.c:734 #, fuzzy msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Quer que a sua assinatura expire na mesma altura? (S/n) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "A sua assinatura actual em \"%s\"\n" " uma assinatura local.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Quer promov-la a uma assinatura exportvel? (s/N)" #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" j foi assinado localmente pela chave %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" j foi assinado pela chave %08lX\n" #: g10/keyedit.c:788 #, fuzzy msgid "Do you want to sign it again anyway? (y/N) " msgstr "Voc tem certeza de que quer adicion-la de qualquer forma? (s/N) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Nada para assinar com a chave %08lX\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Esta chave expirou!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Esta chave vai expirar em %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Quer que a sua assinatura expire na mesma altura? (S/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "No pode criar uma assinatura OpenPGP numa chave PGP 2.x no modo --pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Isto tornaria a chave inutilizvel no PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Com que cuidado que verificou que chave que est prestes a assinar " "pertence\n" " pessoa correcta? Se no sabe o que responder, escolha \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) No vou responder.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) No verifiquei.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Verifiquei por alto.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Verifiquei com bastante cuidado.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "" #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Voc tem certeza de que quer assinar esta chave com\n" "a sua chave: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" "Isto ser uma auto-assinatura.\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "AVISO: a assinatura no ser marcada como no-exportvel.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "AVISO: a assinatura no ser marcada como no-revocvel.\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "A assinatura ser marcada como no-exportvel.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "A assinatura ser marcada como no-revocvel.\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "No verifiquei esta chave.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "Verifiquei por alto esta chave.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "Verifiquei esta chave com muito cuidado.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Realmente assinar? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "assinatura falhou: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Esta chave no protegida.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Componentes secretas da chave primria no disponveis.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "Componentes secretas da chave primria no disponveis.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossvel editar esta chave: %s\n" #: g10/keyedit.c:1178 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:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "a frase secreta no foi repetida corretamente; tente outra vez" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Voc no quer uma frase secreta - provavelmente isto uma *m* idia!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Voc quer realmente fazer isso? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "a mover a assinatura da chave para o local correcto\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "gravar e sair" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "mostra impresso digital" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "lista chave e identificadores de utilizadores" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "seleciona ID de utilizador N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "seleciona ID de utilizador N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "revoga assinaturas" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "assina a chave localmente" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Sugesto: Selecione os IDs de utilizador para assinar\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "adiciona um novo ID de utilizador" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "adiciona um identificador fotogrfico" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "remove ID de utilizador" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "remove uma chave secundria" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "adiciona uma chave de revocao" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "" "Realmente actualizar as preferncias para os utilizadores seleccionados?" #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "Voc no pode modificar a data de validade de uma chave v3\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "seleccionar o identificador do utilizador como primrio" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "alterna entre listagem de chave secreta e pblica" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "lista preferncias (perito)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "lista preferncias (detalhadamente)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "" "Realmente actualizar as preferncias para os utilizadores seleccionados?" #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "no consegui processar a URI do servidor de chaves\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "" "Realmente actualizar as preferncias para os utilizadores seleccionados?" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "muda a frase secreta" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "muda os valores de confiana" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Realmente revocar todos os IDs de utilizador seleccionados? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "revocar um ID de utilizador" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "revoga uma chave secundria" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "activa uma chave" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "desactiva uma chave" #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "mostrar identificador fotogrfico" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "erro na leitura do bloco de chave secreto `%s': %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Chave secreta disponvel.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "A chave secreta necessria para fazer isto.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Por favor utilize o comando \"toggle\" primeiro.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "A chave est revogada." #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Realmente assinar todos os IDs de utilizador? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Sugesto: Selecione os IDs de utilizador para assinar\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "classe de assinatura desconhecida" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Este comando no permitido no modo %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Voc precisa selecionar pelo menos um ID de utilizador.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Voc no pode remover o ltimo ID de utilizador!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Realmente remover todos os IDs de utilizador seleccionados? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Realmente remover este ID de utilizador? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Realmente remover este ID de utilizador? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Voc deve selecionar pelo menos uma chave.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "erro ao criar porta-chaves `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Voc deve selecionar pelo menos uma chave.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Voc quer realmente remover as chaves selecionadas? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Voc quer realmente remover esta chave? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Realmente revocar todos os IDs de utilizador seleccionados? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Realmente revocar este ID de utilizador? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Voc quer realmente revogar esta chave? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Voc quer realmente revogar as chaves selecionadas? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Voc quer realmente revogar esta chave? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "configurar lista de preferncias" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Realmente actualizar as preferncias para os utilizadores seleccionados?" #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Realmente actualizar as preferncias?" #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Gravar alteraes? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Sair sem gravar? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "actualizao falhou: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "actualizao da chave secreta falhou: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Chave no alterada, nenhuma actualizao necessria.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "'Digest': " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Caractersticas: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Notao: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "No h preferncias no ID de utilizador tipo PGP 2.x.\n" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Esta chave pode ser revogada pela chave %s " #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "Esta chave pode ser revogada pela chave %s " #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " (sensvel)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "impossvel criar %s: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "revkey" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr "[expira: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr "[expira: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " confiana: %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " confiana: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Esta chave foi desactivada" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "No se esquea que a validade de chave mostrada no necessriamente a\n" "correcta a no ser que reinicie o programa.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "revkey" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Voc no pode modificar a data de validade de uma chave v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "AVISO: Esta chave do tipo PGP2. Se adicionar um identificador fotogrfico\n" " algumas verso do PGP podem rejeit-la.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Tem a certeza de que quer adicion-la de qualquer forma? (s/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" "No pode adicionar um identificador fotogrfico a uma chave tipo PGP2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Apagar esta assinatura vlida? (s/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Apagar esta assinatura invlida? (s/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Apagar esta assinatura desconhecida? (s/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Realmente remover esta auto-assinatura? (s/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d assinatura removida.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d assinaturas removidas.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nada removido.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "armadura invlida" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Utilizador \"%s\" est revocado." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Utilizador \"%s\" est revocado." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Utilizador \"%s\" est revocado." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "o utilizador com o id \"%s\" j est revocado\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "o utilizador com o id \"%s\" j est revocado\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "AVISO: Esta chave do tipo PGP 2.x. Se adicionar um revogador designado\n" " algumas verso do PGP podem rejeit-la.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "No pode adicionar um revogador designado a uma chave tipo PGP 2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Insira o ID de utilizador do revogador escolhido: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "no pode escolher uma chave do tipo PGP 2.x como revogadora\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "no pode escolher uma chave como revogadora de si mesmo\n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/keyedit.c:3516 #, fuzzy msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "no pode escolher uma chave como revogadora de si mesmo\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "no pode escolher uma chave como revogadora de si mesmo\n" #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Por favor remova as seleces das chaves secretas.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Por favor seleccione no mximo uma chave secundria.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "A modificar a data de validade para uma chave secundria.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Modificar a data de validade para uma chave primria.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Voc no pode modificar a data de validade de uma chave v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Nenhuma assinatura correspondente no porta-chaves secreto\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "no pode escolher uma chave como revogadora de si mesmo\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Seleccione exactamente um identificador de utilizador.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "a ignorar auto-assinatura v3 no utilizar com o id \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Voc tem certeza de que quer adicion-la de qualquer forma? (s/N) " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Voc tem certeza de que quer adicion-la de qualquer forma? (s/N) " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Notao de assinatura: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Escrever por cima (s/N)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Nenhum ID de utilizador com ndice %d\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Nenhum ID de utilizador com ndice %d\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Nenhum ID de utilizador com ndice %d\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "ID de utilizador: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " assinado por %08lX em %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (no-exportvel)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Esta assinatura expirou em %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Tem a certeza de que quer revog-la de qualquer forma? (s/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Gerar um certificado de revogao para esta assinatura? (s/N)" #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " assinado por %08lX em %s%s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Assinou estes identificadores de utilizadores:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (no-exportvel)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " revogado por %08lX em %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Est prestes a revogar estas assinaturas:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Realmente criar os certificados de revogao? (s/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "nenhuma chave secreta\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "o utilizador com o id \"%s\" j est revocado\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "AVISO: a assintura do ID do utilizador tem data %d segundos no futuro\n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "o utilizador com o id \"%s\" j est revocado\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "o utilizador com o id \"%s\" j est revocado\n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "A mostrar a fotografia %s com o tamanho %ld da chave 0x%08lX (uid %d)\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "preferncia %c%lu duplicada\n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "demasiadas preferncias `%c'\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "demasiadas preferncias `%c'\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "demasiadas preferncias `%c'\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "caracter invlido na cadeia de caractres da preferncia\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "a escrever a assinatura directa\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "a escrever a auto-assinatura\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "a escrever a assinatura ligada a uma chave\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "tamanho de chave invlido; a utilizar %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "tamanho da chave arredondado para %u bits\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "cifrar dados" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (apenas cifragem)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Por favor selecione o tipo de chave desejado:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA e ElGamal (por omisso)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA e ElGamal (por omisso)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (apenas assinatura)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (apenas assinatura)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (apenas cifragem)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (apenas cifragem)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA (apenas cifragem)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (apenas cifragem)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Qual o tamanho de chave desejado? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Qual o tamanho de chave desejado? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "O tamanho de chave pedido %u bits\n" #: g10/keygen.c:1722 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 vlida.\n" " 0 = chave no 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Por favor especifique por quanto tempo a assinatura deve ser vlida.\n" " 0 = assinatura no expira\n" " = assinatura expira em n dias\n" " w = assinatura expira em n semanas\n" " m = assinatura expira em n meses\n" " y = assinatura expira em n anos\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "A chave valida por? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "A assinatura valida por? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "valor invlido\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "A %s no expira nunca\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "A %s no expira nunca\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "%s expira em %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Esta assinatura expirou em %s.\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "O seu sistema no consegue mostrar datas para alm de 2038.\n" "No entanto, estas vo ser tratadas correctamente at 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "Est correto (s/n)? " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Voc precisa de um identificador de utilizador para identificar sua chave; " "o\n" "programa constri o identificador a partir do Nome Completo, Comentrio e\n" "Endereo Eletrnico desta forma:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Nome completo: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Caracter invlido no nome\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "O nome no pode comear com um dgito\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "O nome deve ter pelo menos 5 caracteres\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Endereo de correio eletrnico: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Endereo eletrnico invlido\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Comentrio: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Caracter invlido no comentrio\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Voc est usando o conjunto de caracteres `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Voc selecionou este identificador de utilizador:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Por favor no coloque o endereo de email no nome verdadeiro ou no " "comentrio\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoSs" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Mudar (N)ome, (C)omentrio, (E)mail ou (S)air? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Mudar (N)ome, (C)omentrio, (E)ndereo ou (O)k/(S)air? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Por favor corrija primeiro o erro\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Voc precisa de uma frase secreta para proteger a sua chave.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 no quer uma frase secreta - provavelmente isto uma *m* idia!\n" "Vou continuar assim mesmo. Voc pode mudar sua frase secreta a\n" "qualquer hora, usando este programa com a opo \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 aleatrios. uma boa ideia realizar outra\n" "actividade (escrever no teclado, mover o rato, usar os discos) durante a\n" "gerao dos nmeros primos; isso d ao gerador de nmeros aleatrios\n" "uma hiptese maior de ganhar entropia suficiente.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Gerao de chave cancelada.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "a escrever chave pblica para `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "a escrever chave privada para `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "a escrever chave privada para `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "nenhum porta-chaves pblico com permisses de escrita encontrado: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "nenhum porta-chaves secreto com permisses de escrita encontrado: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "erro ao escrever no porta-chaves pblico `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "erro ao escrever no porta-chaves secreto `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "chaves pblica e privada criadas e assinadas.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Note que esta chave no pode ser usada para cifragem. Voc pode usar\n" "o comando \"--edit-key\" para gerar uma chave secundria para esse fim.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "a chave foi criada %lu segundo no futuro\n" "(viagem no tempo ou problema no relgio)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, 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 relgio)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "NOTA: a criao de sub-chave para chaves v3 no respeito o OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Realmente criar? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "remoo do bloco de chave falhou: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "impossvel criar `%s': %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOTA: chave secreta %08lX expirou em %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Politica de assinatura crtica: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Politica de assinatura: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Notao de assinatura crtica: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Notao de assinatura: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Porta-chaves" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Impresso da chave primria:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Impresso da subchave:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "Impresso da chave primria:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Impresso da subchave:" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Impresso da chave =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "criao de armadura falhou: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "AVISO: existem 2 ficheiros com informaes confidenciais.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s o no modificado\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s o novo\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Por favor conserte esta possvel falha de segurana\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "a verificar o porta chaves `%s'\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu chave verificadas (%lu assinaturas)\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu chave verificadas (%lu assinaturas)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: porta-chaves criado\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "a URL de poltica de assinatura dada invlida\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "AVISO: opes em `%s' ainda no esto activas nesta execuo\n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "opes de exportao invlidas\n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "chave `%s' no encontrada: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "chave `%s' no encontrada: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "a pedir a chave %08lX de %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "a pedir a chave %08lX de %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "a procurar por \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "a procurar por \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "a procurar por \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "assinado com a sua chave %08lX em %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "a procurar por \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "a procurar por \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "opes de exportao invlidas\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "erro do servidor de chaves" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "erro do servidor de chaves" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "a pedir a chave %08lX de %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "a pedir a chave %08lX de %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "tamanho estranho para uma chave de sesso cifrada (%d)\n" #: g10/mainproc.c:294 #, fuzzy, c-format msgid "%s encrypted session key\n" msgstr "tamanho estranho para uma chave de sesso cifrada (%d)\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "cifrado com algoritmo desconhecido %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "a chave pblica %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "dados cifrados com chave pblica: DEK vlido\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "cifrado com chave %u-bit %s, ID %08lX, criada em %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " ou \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "cifrado com chave %s, ID %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "decifragem de chave pblica falhou: %s\n" #: g10/mainproc.c:526 #, fuzzy, c-format msgid "encrypted with %lu passphrases\n" msgstr "Repita a frase secreta\n" #: g10/mainproc.c:528 #, fuzzy msgid "encrypted with 1 passphrase\n" msgstr "Repita a frase secreta\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "a assumir dados cifrados %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "Cifra IDEO no disponvel, a tentar utilizar %s em substituio\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "decifragem correcta\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "AVISO: a mensagem no tinha a sua integridade protegida\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "CUIDADO: a mensagem cifrada foi manipulada!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "decifragem falhou: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: o remetente solicitou \"apenas-para-seus-olhos\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "nome do ficheiro original='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revocao solitria - utilize \"gpg --import\" para aplicar\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Assinatura correcta de \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "verificao de assinatura suprimida\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "no consigo tratar estas assinaturas mltiplas\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Esta assinatura expirou em %s.\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " ou \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Assinatura feita em %.*s usando %s, ID da chave %08lX\n" #: g10/mainproc.c:1616 #, fuzzy msgid "Key available at: " msgstr "Nenhuma ajuda disponvel" #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "Assinatura INCORRECTA de \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Assinatura expirada de \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Assinatura correcta de \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[incerto]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " ou \"" #: g10/mainproc.c:1937 #, fuzzy, c-format msgid "Signature expired %s\n" msgstr "Esta assinatura expirou em %s.\n" #: g10/mainproc.c:1942 #, fuzzy, c-format msgid "Signature expires %s\n" msgstr "Esta assinatura expirou em %s.\n" #: g10/mainproc.c:1945 #, fuzzy, c-format msgid "%s signature, digest algorithm %s\n" msgstr "assinatura %s de: \"%s\"\n" #: g10/mainproc.c:1946 #, fuzzy msgid "binary" msgstr "primary" #: g10/mainproc.c:1947 msgid "textmode" msgstr "" #: g10/mainproc.c:1947 g10/trustdb.c:551 #, fuzzy msgid "unknown" msgstr "verso desconhecida" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossvel verificar assinatura: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "no uma assinatura separada\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "AVISO: vrias assinaturas detectadas. Apenas a primeira ser verificada.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "assinatura de classe 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "formato de assinatura antigo (PGP2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "pacote raiz invlido detectado em proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossvel desactivar core dumps: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "impossvel abrir %s: %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "base de dados de confiana: leitura falhou (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "impossvel manipular algoritmo de chave pblica %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "forar o algoritmo de 'digest' %s (%d) viola as preferncias do " "destinatrio\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "algoritmo de criptografia no implementado" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "assinatura %s de: \"%s\"\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" "forar o algoritmo de 'digest' %s (%d) viola as preferncias do " "destinatrio\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = mostrar mais informaes\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "o gpg-agent no est disponvel nesta sesso\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: opo depreciada \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "AVISO: \"%s\" uma opo depreciada\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "por favor utilize \"%s%s\" em vez dela\n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "AVISO: \"%s\" uma opo depreciada\n" #: g10/misc.c:755 #, fuzzy msgid "Uncompressed" msgstr "no processado" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "no processado" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "esta mensagem poder no ser utilizvel pelo %s\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "a ler opes de `%s'\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "destinatrio por omisso desconhecido `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "classe de assinatura desconhecida" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Arquivo `%s' j existe. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Escrever por cima (s/N)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: sufixo desconhecido\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Digite novo nome de ficheiro" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "a escrever em \"stdout\"\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "a assumir dados assinados em `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "criado um novo ficheiro de configurao `%s'\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "AVISO: opes em `%s' ainda no esto activas nesta execuo\n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: directoria criada\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossvel manipular algoritmo de chave pblica %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpacote do tipo %d tem bit crtico ligado\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "o gpg-agent no est disponvel nesta sesso\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "varivel de ambiente GPG_AGENT_INFO invlida\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "a verso %d do protocolo gpg-agent no suportada\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "impossvel ligar a `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problema com o agente - a desactivar a utilizao deste\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (ID principal da chave %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Precisa de uma frase secreta para desbloquear a chave secreta do " "utilizador:\n" "\n" "\"%.*s\"\n" "chave %u bits %s, ID %08lx, criada %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Repita a frase secreta\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Insira a frase secreta\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "cancelado pelo utilizador\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "impossvel pedir senha em modo no-interactivo\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Digite a frase secreta: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Voc precisa de uma frase secreta para desbloquear a chave secreta do\n" "utilizador: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "chave de %u-bit/%s, ID %08lX, criada em %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repita a frase secreta: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "" #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "impossvel abrir %s: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Voc tem certeza de que quer adicion-la de qualquer forma? (s/N) " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "%s: no um base de dados de confiana\n" #: g10/photoid.c:163 #, fuzzy msgid "Is this photo correct (y/N/q)? " msgstr "Est correto (s/n)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 #, fuzzy msgid "unable to display photo ID!\n" msgstr "no foi possvel alterar o exec-path para %s\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Nenhum motivo especificado" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "A chave foi substituda" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "A chave foi comprometida" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "A chave j no utilizada" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "O identificador do utilizador j no vlido" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "motivo da revocao: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "comentrio da revocao: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Nenhum valor de confiana designado para:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " ou \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Esta chave provavelmente pertence ao dono\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = No sei\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Eu NO confio\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Confio de forma total\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = voltar ao menu principal\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " s = saltar esta chave\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " q = sair\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Deciso? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Tem a certeza que quer confiar totalmente nesta chave?" #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que levam a uma chave confiada plenamente:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lx: No h indicao de que a assinatura pertence realmente ao dono.\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lx: No h indicao de que a assinatura pertence realmente ao dono.\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "Esta chave provavelmente pertence ao dono\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Esta chave pertence-nos\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NO se tem certeza de que esta chave pertence ao seu dono.\n" "Se voc *realmente* sabe o que est a fazer, pode responder\n" "sim prxima pergunta\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Usar esta chave de qualquer modo? " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "AVISO: A utilizar uma chave que no de confiana!\n" #: g10/pkclist.c:511 #, fuzzy msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "AVISO: a chave %08lX pode estar revocada: chave de revocao %08lX no " "presente.\n" #: g10/pkclist.c:520 #, fuzzy msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " Isto pode significar que a assinatura falsificada.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVISO: Esta subchave foi revogada pelo seu dono!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Nota: Esta chave foi desactivada.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Nota: Esta chave expirou!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVISO: Esta chave no est certificada com uma assinatura confivel!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " No h indicao de que a assinatura pertence ao dono.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVISO: Ns NO confiamos nesta chave!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " A assinatura provavelmente uma FALSIFICAO.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVISO: Esta chave no est certificada com assinaturas suficientemente\n" " confiveis!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " No se tem certeza de que a assinatura pertence ao dono.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignorado: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ignorado: a chave pblica j est presente\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "No especificou um identificador de utilizador. (pode usar \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Insira o identificador do utilizador. Termine com uma linha vazia: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Identificador de utilizador inexistente.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "ignorado: chave pblica j colocada como destinatrio por omisso\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "A chave pblica est desativada.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "ignorado: a chave pblica j est presente\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "destinatrio por omisso desconhecido `%s'\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: ignorado: a chave pblica est desactivada\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "nenhum endereo vlido\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "dados no gravados; use a opo \"--output\" para grav-los\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "erro ao criar `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Assinatura separada.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Por favor digite o nome do ficheiro de dados: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "lendo do \"stdin\" ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "no h dados assinados\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossvel abrir dados assinados `%s'\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "destinatrio annimo; a tentar chave secreta %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "certo, ns somos o destinatrio annimo.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "codificao antiga do DEK no suportada\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "algoritmo de cifra %d%s desconhecido ou foi desactivado\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "NOTA: algoritmo de cifragem %d no encontrado nas preferncias\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTA: chave secreta %08lX expirou em %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "NOTA: a chave foi revogada" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, fuzzy, c-format msgid "build_packet failed: %s\n" msgstr "actualizao falhou: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "chave %08lX: sem ID de utilizador\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Gerar um certificado de revogao para esta assinatura? (s/N)" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "" #: g10/revoke.c:342 g10/revoke.c:564 #, fuzzy, c-format msgid "make_keysig_packet failed: %s\n" msgstr "actualizao da chave secreta falhou: %s\n" #: g10/revoke.c:405 #, fuzzy msgid "Revocation certificate created.\n" msgstr "chave %08lX: certificado de revogao \"%s\" adicionado\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "chave `%s' no encontrada: %s\n" #: g10/revoke.c:496 #, fuzzy, c-format msgid "no corresponding public key: %s\n" msgstr "a escrever chave pblica para `%s'\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Gerar um certificado de revogao para esta assinatura? (s/N)" #: g10/revoke.c:531 #, fuzzy msgid "unknown protection algorithm\n" msgstr "algoritmo de compresso desconhecido" #: g10/revoke.c:539 #, fuzzy msgid "NOTE: This key is not protected!\n" msgstr "Esta chave no protegida.\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" #: g10/revoke.c:631 #, fuzzy msgid "Please select the reason for the revocation:\n" msgstr "motivo da revocao: " #: g10/revoke.c:641 msgid "Cancel" msgstr "" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "" #: g10/revoke.c:684 #, fuzzy msgid "Enter an optional description; end it with an empty line:\n" msgstr "" "\n" "Insira o identificador do utilizador. Termine com uma linha vazia: " #: g10/revoke.c:712 #, fuzzy, c-format msgid "Reason for revocation: %s\n" msgstr "motivo da revocao: " #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "Usar esta chave de qualquer modo? " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "partes da chave secreta no disponveis\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "algoritmo de proteco %d%s no suportado\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "algoritmo de proteco %d%s no suportado\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Frase secreta invlida; por favor tente novamente" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVISO: Chave fraca detectada - por favor mude a frase secreta novamente.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "a gerar a 'checksum' (depreciada) de 16-bit para proteco da chave secreta\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "chave fraca criada - tentando novamente\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "impossvel evitar chave fraca para criptografia simtrica;\n" "tentei %d vezes!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "AVISO: conflito no 'digest' de assinatura da mensagem\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "no pode escolher uma chave como revogadora de si mesmo\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "a chave pblica %08lX %lu segundo mais nova que a assinatura\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "a chave pblica %08lX %lu segundos mais nova que a assinatura\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "a chave foi criada %lu segundo no futuro\n" "(viagem no tempo ou problema no relgio)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "a chave foi criada %lu segundos no futuro\n" "(viagem no tempo ou problema no relgio)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTA: chave de assinatura %08lx expirou %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "assinatura %s de: \"%s\"\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "assumindo assinatura incorrecta na chave %08lX devido a um bit crtico " "desconhecido\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "chave %08lX: sem subchave para o pacote revocao de subchave\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "chave %08lX: sem subchave para ligao de chaves\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "AVISO: impossvel expandir-%% a url de poltica (demasiado grande). A " "utilizar no expandida.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "AVISO: impossvel expandir-%% a url de poltica (demasiado grande).\n" "A utilizar no expandida.\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "AVISO: impossvel expandir-%% a url de poltica (demasiado grande).\n" "A utilizar no expandida.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "verificao da assinatura criada falhou: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "assinatura %s de: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "s pode assinar-desligar com chaves do tipo PGP 2.x no modo --pgp2\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "forar o algoritmo de 'digest' %s (%d) viola as preferncias do " "destinatrio\n" #: g10/sign.c:960 msgid "signing:" msgstr "a assinar:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "s pode assinar vista com chaves do tipo PGP 2.x no modo --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "ser utilizada a cifragem %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "a chave no est marcada insegura - impossvel us-la com o RNG falso!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "ignorado `%s': duplicada\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "ignorado `%s': %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "ignorado `%s': esta uma chave ElGamal gerada pelo PGP que no segura " "para assinaturas!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "registo de confiana %lu, tipo %d: escrita falhou: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "frase secreta demasiado longa\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "%s: verso de ficheiro invlida %d\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "importar os valores de confiana" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "%s: erro ao escrever registo de diretrio: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "armadura: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de dados de confiana: sincronizao falhou: %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "impossvel criar `%s': %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "impossvel abrir `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "base de dados de confiana rec %lu: lseek falhou: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "base de dados de confiana rec %lu: escrita falhou (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transao de base de dados de confiana muito grande\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "impossvel fechar `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: diretoria inexistente!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: falha ao criar registo de verso: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: base de dados de confiana invlida criada\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: base de dados de confiana criada\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "NOTA: no possvel escrever na trustdb\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: base de dados de confiana invlida\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: falha ao criar tabela de disperso: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: erro a actualizar registo de verso: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: erro ao ler registo de verso: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: erro ao escrever registo de verso: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de dados de confiana: lseek falhou: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de dados de confiana: leitura falhou (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: no um base de dados de confiana\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: registo de verso com recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: verso de ficheiro invlida %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: erro ao ler registo livre: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: erro ao escrever registo de diretrio: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: falha ao zerar um registo: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: falha ao anexar um registo: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: base de dados de confiana criada\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "impossvel manipular linhas de texto maiores que %d caracteres\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "linha de entrada maior que %d caracteres\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' no um identificador longo de chave vlido\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "chave %08lX: aceite como chave de confiana\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "chave %08lX ocrreu mais do que uma vez na base de dados de confiana\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" "chave %08lX: nenhuma chave pblica para chave de confiana - ignorada\n" "\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "chave marcada como de confiana absoluta\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "registo de confiana %lu, tipo req %d: falha na leitura: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "registo de confiana %lu no do tipo pedido %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "revkey" #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "expire" #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "verso desconhecida" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 msgid "never" msgstr "" #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "no necessria uma verificao da base de dados de confiana\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "proxima verificao da base de dados de confiana a %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "no necessria uma verificao da base de dados de confiana\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "no necessria uma verificao da base de dados de confiana\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "chave pblica %08lX no encontrada: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "a verificar a base de dados de confiana\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "" #: g10/trustdb.c:2321 #, fuzzy msgid "no ultimately trusted keys found\n" msgstr "" "chave pblica da chave absolutamente de confiana %08lX no encontrada\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "" "chave pblica da chave absolutamente de confiana %08lX no encontrada\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "registo de confiana %lu, tipo %d: escrita falhou: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "a assinatura no pode ser verificada.\n" "No se esquea que o ficheiro com a assinatura (.sig ou .asc)\n" "deve ser o primeiro a ser dado na linha de comando.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "linha de entrada %u demasiado longa ou falta o LF\n" #: util/errors.c:53 msgid "general error" msgstr "erro geral" #: util/errors.c:54 msgid "unknown packet type" msgstr "formato de pacote desconhecido" #: util/errors.c:55 msgid "unknown version" msgstr "verso desconhecida" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "algoritmo de chave pblica desconhecido" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "algoritmo de \"digest\" desconhecido" #: util/errors.c:58 msgid "bad public key" msgstr "chave pblica incorrecta" #: util/errors.c:59 msgid "bad secret key" msgstr "chave secreta incorrecta" #: util/errors.c:60 msgid "bad signature" msgstr "assinatura incorrecta" #: util/errors.c:61 msgid "checksum error" msgstr "erro de \"checksum\"" #: util/errors.c:62 msgid "bad passphrase" msgstr "frase secreta incorrecta" #: util/errors.c:63 msgid "public key not found" msgstr "chave pblica no encontrada" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "algoritmo de criptografia desconhecido" #: util/errors.c:65 msgid "can't open the keyring" msgstr "no possvel abrir o porta-chaves" #: util/errors.c:66 msgid "invalid packet" msgstr "pacote invlido" #: util/errors.c:67 msgid "invalid armor" msgstr "armadura invlida" #: util/errors.c:68 msgid "no such user id" msgstr "identificador de utilizador inexistente" #: util/errors.c:69 msgid "secret key not available" msgstr "chave secreta no disponvel" #: util/errors.c:70 msgid "wrong secret key used" msgstr "chave secreta incorrecta" #: util/errors.c:71 msgid "not supported" msgstr "no suportado" #: util/errors.c:72 msgid "bad key" msgstr "chave incorrecta" #: util/errors.c:73 msgid "file read error" msgstr "erro de leitura" #: util/errors.c:74 msgid "file write error" msgstr "erro de escrita" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "algoritmo de compresso desconhecido" #: util/errors.c:76 msgid "file open error" msgstr "erro na abertura do ficheiro" #: util/errors.c:77 msgid "file create error" msgstr "erro na criao do ficheiro" #: util/errors.c:78 msgid "invalid passphrase" msgstr "frase-secreta invlida" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritmo de chave pblica no implementado" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algoritmo de criptografia no implementado" #: util/errors.c:81 msgid "unknown signature class" msgstr "classe de assinatura desconhecida" #: util/errors.c:82 msgid "trust database error" msgstr "erro na base de dados de confiana" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI incorreto" #: util/errors.c:84 msgid "resource limit" msgstr "limite de recursos" #: util/errors.c:85 msgid "invalid keyring" msgstr "porta-chaves invlido" #: util/errors.c:86 msgid "bad certificate" msgstr "certificado incorrecto" #: util/errors.c:87 msgid "malformed user id" msgstr "identificador de utilizador malformado" #: util/errors.c:88 msgid "file close error" msgstr "erro ao fechar ficheiro" #: util/errors.c:89 msgid "file rename error" msgstr "erro na renomeao do ficheiro" #: util/errors.c:90 msgid "file delete error" msgstr "erro na remoo do ficheiro" #: util/errors.c:91 msgid "unexpected data" msgstr "dados inesperados" #: util/errors.c:92 msgid "timestamp conflict" msgstr "conflito de \"timestamp\"" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "algoritmo de chave pblica inutilizvel" #: util/errors.c:94 msgid "file exists" msgstr "o ficheiro j existe" #: util/errors.c:95 msgid "weak key" msgstr "chave fraca" #: util/errors.c:96 msgid "invalid argument" msgstr "argumento invlido" #: util/errors.c:97 msgid "bad URI" msgstr "URI incorrecto" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI no suportado" #: util/errors.c:99 msgid "network error" msgstr "erro na rede" #: util/errors.c:101 msgid "not encrypted" msgstr "no cifrado" #: util/errors.c:102 msgid "not processed" msgstr "no processado" #: util/errors.c:104 msgid "unusable public key" msgstr "chave pblica no utilizvel" #: util/errors.c:105 msgid "unusable secret key" msgstr "chave secreta no utilizvel" #: util/errors.c:106 msgid "keyserver error" msgstr "erro do servidor de chaves" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "cancelado pelo utilizador\n" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "no cifrado" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "no h dados assinados\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... isto um bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "voc encontrou um bug ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 #, fuzzy msgid "yes" msgstr "sim" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "sS" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "sair" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "AVISO: a utilizar memria insegura!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "por favor veja http://www.gnupg.org/documentation/faqs.html para mais " "informaes\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "a operao no possvel sem memria segura inicializada\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(voc pode ter usado o programa errado para esta tarefa)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "AVISO: permisses pouco seguras em %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "AVISO: dono pouco seguro em %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "AVISO: permisses pouco seguras em %s \"%s\"\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "a extenso de cifra \"%s\" no foi carregada devido s suas permisses " #~ "inseguras\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "o 'plugin' com a cifra IDEA no est presente\n" #~ msgid "Command> " #~ msgstr "Comando> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "O par de chaves DSA ter 1024 bits.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "A base de dados de confiana est danificada; por favor execute\n" #~ "\"gpg --fix-trustdb\".\n" #, fuzzy #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "no pode escolher uma chave do tipo PGP 2.x como revogadora\n" #, fuzzy #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "no pode escolher uma chave do tipo PGP 2.x como revogadora\n" #, fuzzy #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "no pode escolher uma chave do tipo PGP 2.x como revogadora\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "" #~ "DSA necessita de utilizao de uma algoritmo de disperso de 160 bit\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "veja http://www.gnupg.org/why-not-idea.html para mais informaes\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "um nome de notao deve ter apenas caracteres imprimveis ou espaos, e " #~ "terminar com um '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "um valor de notao de utilizador no deve conter o caracter '@'\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "um valor de notao de utilizador no deve conter o caracter '@'\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "um valor de notao no deve usar caracteres de controle\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "AVISO: dados de notao invlidos encontrados\n" #~ msgid "not human readable" #~ msgstr "no legvel por humanos" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "ler opes do ficheiro" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "ler opes do ficheiro" #, fuzzy #~ msgid "expired: %s)" #~ msgstr "[expira: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "chave %08lX: classe de assinatura inesperada (%02x) - ignorada\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "no foi possvel alterar o exec-path para %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "o utilizador com o id \"%s\" j est revocado\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "erro na criao da frase secreta: %s\n" #, fuzzy #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "algoritmo de criptografia desconhecido" #~ msgid "can't set client pid for the agent\n" #~ msgstr "no consegui colocar o pid do cliente no agente\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "no consigo obter FD de leitura no servidor para o agente\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "no consigo obter FD de escrita no servidor para o agente\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "problemas na comunicao com o gpg-agent\n" #~ msgid "passphrase too long\n" #~ msgstr "frase secreta demasiado longa\n" #~ msgid "invalid response from agent\n" #~ msgstr "resposta do agente invlida\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "problema com o agente: o agente returnou 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "seleciona chave secundria N" #~ msgid "list signatures" #~ msgstr "lista assinaturas" #~ msgid "sign the key" #~ msgstr "assina a chave" #~ msgid "add a secondary key" #~ msgstr "adiciona nova chave secundria" #~ msgid "delete signatures" #~ msgstr "remove assinaturas" #~ msgid "change the expire date" #~ msgstr "muda a data de validade" #~ msgid "set preference list" #~ msgstr "configurar lista de preferncias" #~ msgid "updated preferences" #~ msgstr "preferncias actualizadas" #~ msgid "No secondary key with index %d\n" #~ msgstr "Nenhuma chave secundria com ndice %d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key id-utilizador" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key id-utilizador" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "fazer uma assinatura separada" #~ msgid "sign the key non-revocably" #~ msgstr "assina a chave de forma no-revogvel" #~ msgid "sign the key locally and non-revocably" #~ msgstr "assinar a chave localmente e de forma no revogvel" #~ msgid "q" #~ msgstr "q" #~ msgid "help" #~ msgstr "help" #~ msgid "list" #~ msgstr "list" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "debug" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "erro geral" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "save" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "key" #~ msgid "check" #~ msgstr "check" #~ msgid "c" #~ msgstr "c" #~ msgid "sign" #~ msgstr "sign" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "sign" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "primary" #~ msgstr "primary" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #, fuzzy #~ msgid "keyserver" #~ msgstr "erro do servidor de chaves" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ msgid "showphoto" #~ msgstr "showphoto" #~ 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 um novo par de chaves %s.\n" #~ " tamanho mnimo 768 bits\n" #~ " tamanho por omisso 1024 bits\n" #~ " tamanho mximo sugerido 2048 bits\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA permite apenas tamanhos de 512 a 1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "tamanho muito pequeno; 1024 o valor mnimo permitido para RSA.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "tamanho muito pequeno; 768 o valor mnimo permitido.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "tamanho muito grande; %d o valor mximo permitido.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "Tamanhos de chave maiores que 2048 no so recomendados\n" #~ "porque o tempo de computao REALMENTE longo!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "Voc tem certeza de que quer este tamanho de chave? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Tudo bem, mas no se esquea que a radiao do seu monitor e teclado " #~ "tambm extremamente vulnervel a ataques!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Algoritmos experimentais no devem ser usados!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "este algoritmo de criptografia est desctualizado; por favor use um " #~ "algoritmo mais standard!x\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "a escrever para `%s'\n" #, fuzzy #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "impossvel fazer isso em modo no-interativo\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr "chave `%s' no encontrada: %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "impossvel criar `%s': %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "impossvel abrir %s: %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " ou \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "chave %08lX: a chave foi revogada!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "chave %08lX: a subchave foi revogada!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: a chave expirou\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Ns NO confiamos nesta chave\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (assinatura e cifragem)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA (apenas assinatura)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA (assinatura e cifragem)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA (apenas cifragem)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA (assinatura e cifragem)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: impossvel abrir: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: AVISO: ficheiro vazio\n" #~ msgid "can't open %s: %s\n" #~ msgstr "impossvel abrir %s: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = Confio moderadamente\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = Confio plenamente\n" #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "assinada localmente com a sua chave %08lX em %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: impossvel aceder: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: impossvel criar tranca\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: impossvel criar tranca\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: impossvel criar: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: impossvel criar directoria: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Se voc quiser usar esta chave revogada assim mesmo, responda \"sim\"." #, fuzzy #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "no foi possvel alterar o exec-path para %s\n" #, fuzzy #~ msgid "can't open file: %s\n" #~ msgstr "impossvel abrir %s: %s\n" #, fuzzy #~ msgid "error: no ownertrust value\n" #~ msgstr "exportar os valores de confiana" #~ msgid " (main key ID %08lX)" #~ msgstr " (ID principal da chave %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! subchave foi revogada: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- revogao falsa encontrada\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? problema ao verificar revogao: %s\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr "[expira: %s]" #~ msgid " [expires: %s]" #~ msgstr "[expira: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "revkey" #~ msgid "can't create %s: %s\n" #~ msgstr "impossvel criar %s: %s\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[ficheiros]|cifrar ficheiros" #~ msgid "store only" #~ msgstr "apenas armazenar" #~ msgid "|[files]|decrypt files" #~ msgstr "|[ficheiros]|decifrar ficheiros" #~ msgid "sign a key non-revocably" #~ msgstr "assinar uma chave de forma no revocvel" #~ msgid "sign a key locally and non-revocably" #~ msgstr "assinar uma chave localmente e de forma no revocvel" #~ msgid "list only the sequence of packets" #~ msgstr "listar apenas as sequncias de pacotes" #~ msgid "export the ownertrust values" #~ msgstr "exportar os valores de confiana" #~ msgid "unattended trust database update" #~ msgstr "actualizar automaticamente a base de dados de confiana" #~ msgid "fix a corrupted trust database" #~ msgstr "consertar uma base de dados de confiana" #~ msgid "De-Armor a file or stdin" #~ msgstr "retirar armadura de um ficheiro ou do \"stdin\"" #~ msgid "En-Armor a file or stdin" #~ msgstr "criar armadura para um ficheiro ou \"stdin\"" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NOME|usar NOME como destinatrio por omisso" #~ msgid "use the default key as default recipient" #~ msgstr "usar a chave por omisso como destinatrio por omisso" #~ msgid "don't use the terminal at all" #~ msgstr "nunca usar o terminal" #~ msgid "force v3 signatures" #~ msgstr "forar assinaturas v3" #~ msgid "do not force v3 signatures" #~ msgstr "no forar assinaturas v3" #~ msgid "force v4 key signatures" #~ msgstr "forar assinaturas v4" #~ msgid "do not force v4 key signatures" #~ msgstr "no forar assinaturas v4" #~ msgid "always use a MDC for encryption" #~ msgstr "sempre usar um MDC para cifrar" #~ msgid "never use a MDC for encryption" #~ msgstr "nunca usar um MDC para cifrar" #~ msgid "use the gpg-agent" #~ msgstr "utilizar o gpg-agent" #~ msgid "batch mode: never ask" #~ msgstr "modo no-interactivo: nunca perguntar" #~ msgid "assume yes on most questions" #~ msgstr "assumir sim para a maioria das perguntas" #~ msgid "assume no on most questions" #~ msgstr "assumir no para a maioria das perguntas" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "" #~ "adicionar este porta-chaves\n" #~ " lista de porta-chaves" #~ msgid "add this secret keyring to the list" #~ msgstr "adicionar este porta-chaves secreto lista" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NOME|usar NOME como chave secreta por omisso" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|ENDEREO|usar este servidor para buscar chaves" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "" #~ "|NOME|definir mapa de caracteres do terminal como\n" #~ "NOME" #~ msgid "|[file]|write status info to file" #~ msgstr "|[ficheiro]|escrever ifnroames de estado para o ficheiro" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|KEYID|confiar totalmente nesta chave" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|FICHEIRO|carregar mdulo de extenso FICHEIRO" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emular o modo descrito no RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "" #~ "configurar todas as opes de pacote, cifragem e \"digest\"\n" #~ "para comportamento OpenPGP" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ "configurar todas as opes de pacote, cifragem e \"digest\"\n" #~ "para comportamento PGP 2.x" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|usar mode de frase secreta N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "" #~ "|NOME|usar algoritmo de \"digest\" de mensagens NOME\n" #~ "para frases secretas" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "" #~ "|NOME|usar algoritmo de criptografia NOME para\n" #~ "frases secretas" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NOME|usar algoritmo de criptografia NOME" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NOME|usar algoritmo de \"digest\" de mensagens NOME" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|usar algoritmo de compresso N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "eliminar campo keyid dos pacotes cifrados" #~ msgid "Show Photo IDs" #~ msgstr "Mostrar IDs Fotogrficos" #~ msgid "Don't show Photo IDs" #~ msgstr "No mostrar IDs Fotogrficos" #~ msgid "Set command line to view Photo IDs" #~ msgstr "Configurar linha de comandos para ver fotografias" #, fuzzy #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "o algoritmo de compresso deve estar na faixa %d..%d\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "o algoritmo de compresso deve estar na faixa %d..%d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: No se tem certeza de que esta chave realmente pertence ao dono,\n" #~ "mas aceite de qualquer modo\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "preferncia %c%lu no vlida\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "chave %08lX: no uma chave rfc2440 - ignorada\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "NOTA: Chave primria Elgamal detectada - pode demorar algum tempo a " #~ "importar\n" #~ msgid " (default)" #~ msgstr " (por omisso)" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX criada: %s expira: %s" #~ msgid "Policy: " #~ msgstr "Poltica: " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "no consigo obter chave do servidor: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "erro ao enviar para `%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "sucesso ao enviar para `%s' (estado=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "erro ao enviar para `%s': estado=%u\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "no consigo procurar no servidor de chaves: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "chave: %08lX: esta uma chave ElGamal gerada pelo PGP que NO segura " #~ "para assinaturas!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "a chave %08lX foi criada %lu segundo no futuro\n" #~ "(viagem no tempo ou problema no relgio)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "a chave %08lX foi criada %lu segundos no futuro\n" #~ "(viagem no tempo ou problema no relgio)\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "chave %08lX marcada como de confiana absoluta\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "a verificar profundidade %d assinado=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/" #~ "%d\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Seleccione o algoritmo a ser usado.\n" #~ "\n" #~ "DSA (ou DSS) o algoritmo de assinatura digital que pode ser usado " #~ "apenas\n" #~ "para assinaturas. Este o algoritmo recomendado porque a verificao de\n" #~ "assinaturas DSA muito mais rpida que a verificao de ElGamal.\n" #~ "\n" #~ "ElGamal um algoritmo que pode ser usado para assinatura e cifragem.\n" #~ "O OpenPGP distingue dois tipos deste algoritmo: um apenas para cifragem\n" #~ "e outro para assinatura+cifragem; na verdade so iguais, mas alguns\n" #~ "parmetros precisam ser escolhidos de modo especial para criar uma chave\n" #~ "segura para assinatura: este programa faz isso, mas algumas outras\n" #~ "implementaes do OpenPGP no vo necessariamente entender o tipo\n" #~ "assinatura+cifragem.\n" #~ "\n" #~ "A chave primria precisa sempre ser uma chave capaz de fazer " #~ "assinaturas;\n" #~ "este o motivo pelo qual a chave ElGamal apenas para cifragem no est\n" #~ "disponvel neste menu." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Apesar de estas chaves estarem definidas no RFC2440, elas no so " #~ "recomendadas\n" #~ "porque no so suportadas por todos os programas e assinaturas criadas " #~ "com\n" #~ "elas so grandes e sua verificao lenta." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu chaves verificadas at agora (%lu assinaturas)\n" #, fuzzy #~ msgid "key %08lX incomplete\n" #~ msgstr "chave %08lX: sem ID de utilizador\n" #, fuzzy #~ msgid "quit|quit" #~ msgstr "sair" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (assinatura e cifragem)\n" #~ msgid "" #~ "The use of this algorithm is only supported by GnuPG. You will not be\n" #~ "able to use this key to communicate with PGP users. This algorithm is " #~ "also\n" #~ "very slow, and may not be as secure as the other choices.\n" #~ msgstr "" #~ "A utilizao deste algoritmo s suportada pelo GnuPG. No poder " #~ "utilizar\n" #~ "esta chave para comunicar com utilizadores do PGP. Este algoritmo " #~ "para\n" #~ "alm disto muito lento, e pode no ser to seguro como as outras opes.\n" #~ msgid "Create anyway? " #~ msgstr "Criar mesmo assim?" #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "algoritmo de 'symkey' invlido detectado (%d)\n" #~ msgid "this keyserver is not fully HKP compatible\n" #~ msgstr "o servidor de chaves no totalmente compatvel com HKP\n" gnupg-1.4.20/po/pt_BR.po0000644000175000017500000061057612635457220011650 00000000000000# Portuguese (Brazilian) messages for gnupg # Copyright (C) 1999, 2002 Free Software Foundation, Inc. # Thiago Jung Bauermann , 1999. # Revised by Rafael Caetano dos Santos . # I tried to make this one close to es_ES by Urko Lusa # # Rafael Caetano dos Santos used to be # the last translator but he can't continue his work. # # Designated-Translator: none # msgid "" msgstr "" "Project-Id-Version: GnuPG 1.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:14+0200\n" "Last-Translator:\n" "Language-Team: ?\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "impossvel abrir `%s'\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "escrevendo certificado privado para `%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: cipher/random.c:484 #, fuzzy, c-format msgid "can't stat `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "" #: cipher/random.c:500 cipher/random.c:532 #, fuzzy msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "AVISO: dados de notao invlidos encontrados\n" #: cipher/random.c:520 cipher/random.c:527 #, fuzzy, c-format msgid "can't read `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, fuzzy, c-format msgid "can't create `%s': %s\n" msgstr "impossvel criar %s: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, fuzzy, c-format msgid "can't write `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: cipher/random.c:648 #, fuzzy, c-format msgid "can't close `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVISO: usando gerador de nmeros aleatrios inseguro!\n" #: cipher/random.c:894 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 nmeros aleatrios apenas um \"remendo\"\n" "para poder funcionar - no de modo algum um bom gerador!\n" "\n" "NO USE NENHUM DADO GERADO POR ESTE PROGRAMA!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "No h bytes aleatrios suficientes. Por favor, faa algum outro trabalho\n" "para que o sistema possa coletar mais entropia!\n" "(So necessrios mais %d bytes)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "falha ao inicializar o banco de dados de confiabilidade: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "%s: falha ao criar tabela de \"hash\": %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "enumerao de blocos de chaves falhou: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 #, fuzzy msgid "|A|Please enter the Admin PIN" msgstr "Digite o identificador de usurio: " #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "a chave pblica no est mais disponvel" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "rev- revogaes de chaves incorreta\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "erro na criao da frase secreta: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "erro na leitura de `%s': %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: erro lendo registro livre: %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "%lu chaves processadas\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "gerar um novo par de chaves" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "gerar um novo par de chaves" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "falha ao inicializar o banco de dados de confiabilidade: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "enumerao de blocos de chaves falhou: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "assinatura %s de: %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "nenhum dado OpenPGP vlido encontrado.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "cabealho de armadura invlido: " #: g10/armor.c:459 msgid "armor header: " msgstr "cabealho de armadura: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "cabealho de assinatura em texto puro invlido\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "cabealho de armadura: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "assinaturas em texto puro aninhadas\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "armadura inesperada:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "linha com hfen invlida: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "caractere radix64 invlido %02x ignorado\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "fim de arquivo prematuro (sem CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "fim de arquivo prematuro (no CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC malformado\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "erro de CRC; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "fim de arquivo prematuro (no \"Trailer\")\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "erro na linha \"trailer\"\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "nenhum dado OpenPGP vlido encontrado.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura invlida: linha maior que %d caracteres\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caractere \"quoted printable\" na armadura - provavelmente um MTA com bugs " "foi usado\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "chave secreta no disponvel" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "impossvel fazer isso em modo no-interativo\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Sua opo? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 msgid "unspecified" msgstr "" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "no processado(s)" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "escrevendo certificado pblico para `%s'\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "erro na escrita do chaveiro `%s': %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "lista preferncias" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "Caractere invlido no nome\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "Caractere invlido no nome\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "erro: impresso digital invlida\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "Impresso digital:" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "erro: impresso digital invlida\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "nenhum dado OpenPGP vlido encontrado.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "erro na escrita do chaveiro `%s': %s\n" #: g10/card-util.c:1254 #, fuzzy msgid "Replace existing key? (y/N) " msgstr "Realmente assinar? " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Que tamanho de chave voc quer? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Que tamanho de chave voc quer? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Que tamanho de chave voc quer? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "arredondado para %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/card-util.c:1381 #, fuzzy msgid "Replace existing keys? (y/N) " msgstr "Realmente assinar? " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Por favor selecione o tipo de chave desejado:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "Esta chave no protegida.\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) ElGamal (apenas criptografia)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Opo invlida.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "rev- revogaes de chaves incorreta\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "algoritmo de compresso desconhecido" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "chave secreta no disponvel" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "erro na escrita do chaveiro `%': %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "sair deste menu" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "comandos conflitantes\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "mostra esta ajuda" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Nenhuma ajuda disponvel" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "muda a data de validade" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "muda os valores de confiana" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "mostra impresso digital" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "gerar um novo par de chaves" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "comandos conflitantes\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "comandos conflitantes\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "escrevendo certificado privado para `%s'\n" # help ou ajuda ??? #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Comando invlido (tente \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "chave secreta no disponvel" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "enumerao de blocos de chaves falhou: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 #, fuzzy msgid "Enter New Admin PIN: " msgstr "Digite o identificador de usurio: " #: g10/cardglue.c:1014 #, fuzzy msgid "Enter New PIN: " msgstr "Digite o identificador de usurio: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 #, fuzzy msgid "Enter PIN: " msgstr "Digite o identificador de usurio: " #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Repita a frase secreta: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "A frase secreta no foi repetida corretamente; tente outra vez.\n" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "impossvel abrir `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "usurio `%s' no encontrado: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, fuzzy, c-format msgid "error reading keyblock: %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "impossvel fazer isso em modo no-interativo sem \"--yes\"\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Deletar esta chave do chaveiro? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "Esta uma chave secreta! - realmente deletar? " #: g10/delkey.c:163 #, fuzzy, c-format msgid "deleting keyblock failed: %s\n" msgstr "enumerao de blocos de chaves falhou: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "" #: g10/delkey.c:204 #, fuzzy, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "h uma chave secreta para esta chave pblica!\n" #: g10/delkey.c:206 #, fuzzy msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "use a opo \"--delete-secret-key\" para delet-la antes.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "erro na criao da frase secreta: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "" #: g10/encode.c:229 #, fuzzy, c-format msgid "using cipher %s\n" msgstr "assinatura falhou: %s\n" #: g10/encode.c:239 g10/encode.c:534 #, fuzzy, c-format msgid "`%s' already compressed\n" msgstr "%lu chaves processadas\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "lendo de `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "NOTA: algoritmo de criptografia %d no encontrado nas preferncias\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "NOTA: algoritmo de criptografia %d no encontrado nas preferncias\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "" #: g10/encode.c:796 #, fuzzy, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s criptografado para: %s\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "dados criptografados com %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "criptografado com algoritmo desconhecido %d\n" #: g10/encr-data.c:134 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" "simtrica.\n" #: g10/encr-data.c:145 #, fuzzy msgid "problem handling encrypted packet\n" msgstr "eliminar o campo keyid dos pacotes criptografados\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "" #: g10/exec.c:174 g10/openfile.c:468 #, fuzzy, c-format msgid "can't create directory `%s': %s\n" msgstr "%s: impossvel criar diretrio: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "%s: erro lendo registro de verso: %s\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "impossvel abrir %s: %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "impossvel abrir %s: %s\n" #: g10/exec.c:511 #, fuzzy, c-format msgid "system error while calling external program: %s\n" msgstr "%s: erro lendo registro de verso: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "A assinatura ser marcada como no-exportvel.\n" "\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "revoga uma chave secundria" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "chave secreta incorreta" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "escrevendo certificado privado para `%s'\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "chave %08lX: no uma chave rfc2440 - ignorada\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "chave %08lX: no uma chave rfc2440 - ignorada\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "chave %08lX: certificado de revogao no local errado - ignorada\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "falha ao inicializar o banco de dados de confiabilidade: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "AVISO: nada exportado\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Comandos:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[arquivo]|fazer uma assinatura" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[arquivo]|fazer uma assinatura em texto puro" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "fazer uma assinatura separada" #: g10/gpg.c:393 msgid "encrypt data" msgstr "criptografar dados" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "" "criptografar apenas com criptografia\n" "simtrica" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "descriptografar dados (padro)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verificar uma assinatura" #: g10/gpg.c:401 msgid "list keys" msgstr "listar as chaves" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "listar as chaves e as assinaturas" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "verificar as assinaturas das chaves" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "listar as chaves e as impresses digitais" #: g10/gpg.c:406 msgid "list secret keys" msgstr "listar as chaves secretas" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "gerar um novo par de chaves" #: g10/gpg.c:408 #, fuzzy msgid "remove keys from the public keyring" msgstr "remover a chave do chaveiro pblico" #: g10/gpg.c:410 #, fuzzy msgid "remove keys from the secret keyring" msgstr "remover a chave do chaveiro secreto" #: g10/gpg.c:411 msgid "sign a key" msgstr "assinar uma chave" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "assinar uma chave localmente" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "assinar ou editar uma chave" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "gerar um certificado de revogao" #: g10/gpg.c:416 msgid "export keys" msgstr "exportar chaves" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exportar chaves para um servidor" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importar chaves de um servidor" #: g10/gpg.c:420 #, fuzzy msgid "search for keys on a key server" msgstr "exportar chaves para um servidor" #: g10/gpg.c:422 #, fuzzy msgid "update all keys from a keyserver" msgstr "importar chaves de um servidor" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importar/fundir chaves" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "atualizar o banco de dados de confiabilidade" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [arquivos]|imprimir \"digests\" de mensagens" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opes:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "criar sada com armadura ascii" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NOME|criptografar para NOME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "" "usar este identificador de usurio para\n" "assinar ou descriptografar" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "" "|N|estabelecer nvel de compresso N\n" "(0 desabilita)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "usar modo de texto cannico" #: g10/gpg.c:486 msgid "use as output file" msgstr "usar como arquivo de sada" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "detalhado" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "no fazer alteraes" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" #: g10/gpg.c:576 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] assinar e criptografar para usurio Bob\n" " --clearsign [arquivo] criar uma assinatura em texto puro\n" " --detach-sign [arquivo] criar uma assinatura separada\n" " --list-keys [nomes] mostrar chaves\n" " --fingerprint [nomes] mostrar impresses digitais\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Por favor comunique bugs para .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opes] [arquivos] (-h para ajuda)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Sintaxe: gpg [opes] [arquivos]\n" "assina, verifica, criptografa ou descriptografa\n" "a operao padro depende dos dados de entrada\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmos suportados:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "" #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "" #: g10/gpg.c:827 msgid "Hash: " msgstr "" #: g10/gpg.c:833 g10/keyedit.c:2369 #, fuzzy msgid "Compression: " msgstr "Comentrio: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "uso: gpg [opes] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "comandos conflitantes\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Nenhuma assinatura correspondente no chaveiro secreto\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "a URL de poltica dada invlida\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "alterna entre listagem de chave secreta e pblica" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Nenhuma assinatura correspondente no chaveiro secreto\n" #: g10/gpg.c:1786 #, fuzzy, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTA: arquivo de opes padro `%s' inexistente\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: arquivo de opes padro `%s' inexistente\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "arquivo de opes `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "lendo opes de `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: %s no para uso normal!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "impossvel escrever para o chaveiro: %s\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "chaveiro invlido" #: g10/gpg.c:2615 #, fuzzy, c-format msgid "%s:%d: invalid import options\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/gpg.c:2618 #, fuzzy msgid "invalid import options\n" msgstr "armadura invlida" #: g10/gpg.c:2625 #, fuzzy, c-format msgid "%s:%d: invalid export options\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/gpg.c:2628 #, fuzzy msgid "invalid export options\n" msgstr "chaveiro invlido" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "armadura invlida" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "a URL de poltica dada invlida\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s no um conjunto de caracteres vlido\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "chaveiro invlido" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "AVISO: O programa pode criar um arquivo core!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s no permitido com %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s no faz sentido com %s!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "chave RSA no pode ser usada nesta verso\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "escrevendo certificado privado para `%s'\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "o algoritmo de criptografia selecionado no vlido\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "o algoritmo de \"digest\" selecionado no vlido\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "o algoritmo de criptografia selecionado no vlido\n" #: g10/gpg.c:3109 #, fuzzy msgid "selected certification digest algorithm is invalid\n" msgstr "o algoritmo de \"digest\" selecionado no vlido\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed deve ser maior que 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed deve ser maior que 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth deve estar na entre 1 e 255\n" #: g10/gpg.c:3130 #, fuzzy msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "modo S2K invlido: deve ser 0, 1 ou 3\n" #: g10/gpg.c:3132 #, fuzzy msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "modo S2K invlido: deve ser 0, 1 ou 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: o modo S2K simples (0) no recomendvel\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K invlido: deve ser 0, 1 ou 3\n" #: g10/gpg.c:3146 #, fuzzy msgid "invalid default preferences\n" msgstr "lista preferncias" #: g10/gpg.c:3150 #, fuzzy msgid "invalid personal cipher preferences\n" msgstr "lista preferncias" #: g10/gpg.c:3154 #, fuzzy msgid "invalid personal digest preferences\n" msgstr "lista preferncias" #: g10/gpg.c:3158 #, fuzzy msgid "invalid personal compress preferences\n" msgstr "lista preferncias" #: g10/gpg.c:3191 #, fuzzy, c-format msgid "%s does not yet work with %s\n" msgstr "%s no faz sentido com %s!\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "o algoritmo de criptografia selecionado no vlido\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "falha ao inicializar o banco de dados de confiabilidade: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [nome_do_arquivo]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [nome_do_arquivo]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "descriptografia falhou: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [nome_do_arquivo]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [nome_do_arquivo]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [nome_do_arquivo]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nome_do_arquivo]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [nome_do_arquivo]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "" #: g10/gpg.c:3487 #, fuzzy msgid "--sign --symmetric [filename]" msgstr "--symmetric [nome_do_arquivo]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [nome_do_arquivo]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [nome_do_arquivo]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key id-usurio" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key id-usurio" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-usurio [comandos]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-usurio] [chaveiro]" #: g10/gpg.c:3667 #, fuzzy, c-format msgid "keyserver send failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/gpg.c:3669 #, fuzzy, c-format msgid "keyserver receive failed: %s\n" msgstr "enumerao de chaves secretas falhou: %s\n" #: g10/gpg.c:3671 #, fuzzy, c-format msgid "key export failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/gpg.c:3682 #, fuzzy, c-format msgid "keyserver search failed: %s\n" msgstr "get_dir_record: search_record falhou: %s\n" #: g10/gpg.c:3692 #, fuzzy, c-format msgid "keyserver refresh failed: %s\n" msgstr "enumerao de chaves secretas falhou: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "retirada de armadura falhou: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "criao de armadura falhou: %s\n" # "hash" poderia ser "espalhamento", mas no fica claro #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo de hash invlido `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[nome_do_arquivo]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "V em frente e digite sua mensagem ...\n" #: g10/gpg.c:4267 #, fuzzy msgid "the given certification policy URL is invalid\n" msgstr "a URL de poltica dada invlida\n" #: g10/gpg.c:4269 #, fuzzy msgid "the given signature policy URL is invalid\n" msgstr "a URL de poltica dada invlida\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "a URL de poltica dada invlida\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "entradas demais no cache pk - desativado\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[usurio no encontrado]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "chave %08lX: chave secreta sem chave pblica - ignorada\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "h uma chave secreta para esta chave pblica!\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "usando chave secundria %08lX ao invs de chave primria %08lX\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "ser mais silencioso" #: g10/gpgv.c:73 #, fuzzy msgid "take the keys from this keyring" msgstr "Deletar esta chave do chaveiro? " #: g10/gpgv.c:75 #, fuzzy msgid "make timestamp conflicts only a warning" msgstr "conflito de \"timestamp\"" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "" "|DA|escrever informaes de estado para o\n" "descritor de arquivo DA" #: g10/gpgv.c:101 #, fuzzy msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Uso: gpg [opes] [arquivos] (-h para ajuda)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Sintaxe: gpgm [opes] [arquivos]\n" "Utilitrio de manuteno do GnuPG\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Voc decide que valor usar aqui; este valor nunca ser exportado para\n" "terceiros. Precisamos dele implementar a rede de confiana, que no tem\n" "nada a ver com a rede de certificados (implicitamente criada)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Se voc quiser usar esta chave no confivel assim mesmo, responda \"sim\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Digite o ID de usurio do destinatrio para o qual voc quer enviar a\n" "mensagem." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Digite o tamanho da chave" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Responda \"sim\" ou \"no\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Digite o valor necessrio conforme pedido.\n" " possvel digitar uma data ISO (AAAA-MM-DD) mas voc no ter uma boa\n" "reao a erros - o sistema tentar interpretar o valor dado como um " "intervalo." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Digite o nome do possuidor da chave" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "por favor digite um endereo de email (opcional mas recomendado)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Por favor digite um comentrio (opcional)" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N para mudar o nome.\n" "C para mudar o comentrio.\n" "E para mudar o endereo de correio eletrnico.\n" "O para continuar a gerao da chave.\n" "S para interromper a gerao da chave." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Responda \"sim\" (ou apenas \"s\") se quiser gerar a subchave." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Responda \"sim\" se quiser assinar TODOS os IDs de usurio" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Responda \"sim\" se quiser realmente remover este ID de usurio.\n" "Todos os certificados tambm sero perdidos!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Responda \"sim\" se quiser remover a subchave" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Esta uma assinatura vlida na chave; normalmente no desejvel\n" "remover esta assinatura porque ela pode ser importante para estabelecer\n" "uma conexo de confiana chave ou a outra chave certificada por esta." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Esta assinatura no pode ser verificada porque voc no tem a chave\n" "correspondente. Voc deve adiar sua remoo at saber que chave foi usada\n" "porque a chave desta assinatura pode estabelecer uma conexo de confiana\n" "atravs de outra chave j certificada." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "A assinatura no vlida. Faz sentido remov-la de seu chaveiro." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Esta uma assinatura que liga o ID de usurio chave. Geralmente\n" "no uma boa idia remover tal assinatura. possvel que o GnuPG\n" "no consiga mais usar esta chave. Faa isto apenas se por alguma\n" "razo esta auto-assinatura no for vlida e h uma segunda disponvel." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" #: g10/helptext.c:228 #, fuzzy msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Por favor digite a frase secreta" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Por favor repita a ltima frase secreta, para ter certeza do que voc " "digitou." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "D o nome para o arquivo ao qual a assinatura se aplica" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Responda \"sim\" se quiser sobrescrever o arquivo" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Por favor digite um novo nome de arquivo. Se voc apenas apertar RETURN o\n" "arquivo padro (que mostrado em colchetes) ser usado." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" #: g10/helptext.c:285 msgid "No help available" msgstr "Nenhuma ajuda disponvel" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Nenhuma ajuda disponvel para `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "atualizar o banco de dados de confiabilidade" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "atualizar o banco de dados de confiabilidade" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "lid %lu no tem chave\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "chave secreta incorreta" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "ignorando bloco do tipo %d\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "%lu chaves processadas at agora\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Nmero total processado: %lu\n" #: g10/import.c:326 #, fuzzy, c-format msgid " skipped new keys: %lu\n" msgstr " novas subchaves: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sem IDs de usurios: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importados: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " no modificados: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " novos IDs de usurios: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " novas subchaves: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " novas assinaturas: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " novas revogaes de chaves: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " chaves secretas lidas: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " chaves secretas importadas: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " chaves secretas no modificadas: %lu\n" #: g10/import.c:353 #, fuzzy, c-format msgid " not imported: %lu\n" msgstr " importados: %lu" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " novas assinaturas: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " chaves secretas lidas: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Voc assinou estes IDs de usurio:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "assinatura %s de: %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "chave %08lX: sem ID de usurio\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "ignorado `%s': %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "chave %08lX: sem subchave para ligao de chaves\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "chave %08lX: aceito ID de usurio sem auto-assinatura '" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "chave %08lX: sem IDs de usurios vlidos\n" #: g10/import.c:872 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:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "chave %08lX: chave pblica no encontrada: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "chave %08lX: no uma chave rfc2440 - ignorada\n" #: g10/import.c:897 #, fuzzy, c-format msgid "no writable keyring found: %s\n" msgstr "impossvel escrever chaveiro: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "escrevendo para `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "erro na escrita do chaveiro `%s': %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "chave %08lX: chave pblica importada\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "chave %08lX: no corresponde nossa cpia\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "chave %08lX: impossvel localizar bloco de chaves original: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "chave %08lX: impossvel ler bloco de chaves original: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chave %8lX: 1 novo ID de usurio\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "chave %08lX: %d novos IDs de usurios\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "chave %08lX: 1 nova assinatura\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "chave %08lX: %d novas assinaturas\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "chave %08lX: 1 nova subchave\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "chave %08lX: %d novas subchaves\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "chave %08lX: %d novas assinaturas\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "chave %08lX: %d novas assinaturas\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "chave %08lX: %d novos IDs de usurios\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "chave %08lX: %d novos IDs de usurios\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "chave %08lX: no modificada\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "usurio `%s' no encontrado: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "escrevendo certificado privado para `%s'\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "chave %08lX: chave secreta sem chave pblica - ignorada\n" #: g10/import.c:1271 g10/import.c:2541 #, fuzzy, c-format msgid "no default secret keyring: %s\n" msgstr "impossvel bloquear chaveiro secreto: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "chave %08lX: chave secreta importada\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "chave %08lX: j est no chaveiro secreto\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "chave %08lX: chave secreta no encontrada: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "chave %08lX: sem chave pblica - impossvel aplicar certificado\n" "de revogao\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "chave %08lX: certificado de revogao invlido: %s - rejeitado\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "chave %08lX: certificado de revogao importado\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "chave %08lX: nenhum ID de usurio para assinatura\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "chave %08lX: algoritmo de chave pblica no suportado\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "chave %08lX: auto-assinatura invlida\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "chave %08lX: algoritmo de chave pblica no suportado\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "chave %08lX: %d novas assinaturas\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "chave %08lX: sem subchave para ligao de chaves\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "chave %08lX: ligao de subchave invlida\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "chave %08lX: ligao de subchave invlida\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "chave %08lX: sem subchave para ligao de chaves\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "chave %08lX.%lu: Revogao de subchave vlida\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "chave %08lX: ligao de subchave invlida\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "chave %08lX: ignorado ID de usurio '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "chave %08lX: subchave ignorada\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "chave %08lX: assinatura no exportvel (classe %02x) - ignorada\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "chave %08lX: certificado de revogao no local errado - ignorada\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "chave %08lX: certificado de revogao invlido: %s - ignorada\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "chave %08lX: certificado de revogao no local errado - ignorada\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "chave %08lX: assinatura no exportvel (classe %02x) - ignorada\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "chave %08lX: detectado ID de usurio duplicado - unido\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "chave %08lX: certificado de revogao adicionado\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "chave %08lX: %d novas assinaturas\n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "lid %lu no tem chave\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/keydb.c:166 #, fuzzy, c-format msgid "error creating keyring `%s': %s\n" msgstr "erro na escrita do chaveiro `%s': %s\n" #: g10/keydb.c:173 #, fuzzy, c-format msgid "keyring `%s' created\n" msgstr "%s: chaveiro criado\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "%s: erro de leitura de bloco de chaves: %s\n" #: g10/keydb.c:703 #, fuzzy, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "%s: falha ao criar tabela de \"hash\": %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revogao]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[auto-assinatura]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 assinatura incorreta\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d assinaturas incorretas\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 assinatura no verificada por falta de chave\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d assinaturas no verificadas por falta de chaves\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 assinatura no verificada devido a um erro\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d assinaturas no verificadas devido a erros\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 ID de usurio sem auto-assinatura vlida detectado\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d IDs de usurios sem auto-assinaturas vlidas detectados\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Por favor decida quanto voc confia neste usurio para\n" "verificar corretamente as chaves de outros usurios\n" "(olhando em passaportes, checando impresses digitais\n" "de outras fontes...)?\n" "\n" " 1 = No sei\n" " 2 = Eu NO confio\n" " 3 = Eu confio moderadamente\n" " 4 = Eu confio completamente\n" " s = Mostrar mais informaes\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr "%s: no um banco de dados de confiabilidade\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr "%s: no um banco de dados de confiabilidade\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, fuzzy, c-format msgid "User ID \"%s\" is revoked." msgstr "A chave protegida.\n" #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 #, fuzzy msgid "Are you sure you still want to sign it? (y/N) " msgstr "Voc tem certeza de que quer este tamanho de chave? " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr "" #: g10/keyedit.c:627 #, fuzzy, c-format msgid "User ID \"%s\" is expired." msgstr "A chave protegida.\n" #: g10/keyedit.c:655 #, fuzzy, c-format msgid "User ID \"%s\" is not self-signed." msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Realmente assinar? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "" #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "J assinado pela chave %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "J assinado pela chave %08lX\n" #: g10/keyedit.c:788 #, fuzzy msgid "Do you want to sign it again anyway? (y/N) " msgstr "Voc tem certeza de que quer este tamanho de chave? " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Nada para assinar com a chave %08lX\n" #: g10/keyedit.c:823 #, fuzzy msgid "This key has expired!" msgstr "Nota: Esta chave expirou!\n" #: g10/keyedit.c:841 #, fuzzy, c-format msgid "This key is due to expire on %s.\n" msgstr "Esta chave no protegida.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "" #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr "" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr "" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr "" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr "" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "" #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Voc tem certeza de que quer assinar esta chave com\n" "sua chave: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "isto pode ser causado por falta de auto-assinatura\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "A assinatura ser marcada como no-exportvel.\n" "\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "A assinatura ser marcada como no-exportvel.\n" "\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "A assinatura ser marcada como no-exportvel.\n" "\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "A assinatura ser marcada como no-exportvel.\n" "\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Realmente assinar? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "assinatura falhou: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Esta chave no protegida.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 #, fuzzy msgid "Secret parts of primary key are not available.\n" msgstr "chave secreta no disponvel" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "chave secreta no disponvel" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Impossvel editar esta chave: %s\n" #: g10/keyedit.c:1178 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:1187 g10/keygen.c:2005 #, fuzzy msgid "passphrase not correctly repeated; try again" msgstr "A frase secreta no foi repetida corretamente; tente outra vez.\n" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Voc no quer uma frase secreta - provavelmente isto uma *m* idia!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Voc realmente quer fazer isso? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "movendo a assinatura da chave para o local correto\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "gravar e sair" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "mostra impresso digital" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "lista chave e identificadores de usurios" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "seleciona ID de usurio N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "seleciona ID de usurio N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "revoga assinaturas" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "assina a chave localmente" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "lid %lu: id de usurio sem assinatura\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "adiciona um novo ID de usurio" #: g10/keyedit.c:1380 #, fuzzy msgid "add a photo ID" msgstr "adiciona um novo ID de usurio" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "remove ID de usurio" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "remove uma chave secundria" #: g10/keyedit.c:1401 #, fuzzy msgid "add a revocation key" msgstr "adiciona nova chave secundria" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "Realmente remover todos os IDs de usurio selecionados? " #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "Voc no pode modificar a data de validade de uma chave v3\n" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "alterna entre listagem de chave secreta e pblica" #: g10/keyedit.c:1412 #, fuzzy msgid "list preferences (expert)" msgstr "lista preferncias" #: g10/keyedit.c:1414 #, fuzzy msgid "list preferences (verbose)" msgstr "lista preferncias" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "Realmente remover todos os IDs de usurio selecionados? " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "Realmente remover todos os IDs de usurio selecionados? " #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "Realmente remover todos os IDs de usurio selecionados? " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "muda a frase secreta" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "muda os valores de confiana" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Realmente remover todos os IDs de usurio selecionados? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "adiciona um novo ID de usurio" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "revoga uma chave secundria" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "ativa uma chave" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "desativa uma chave" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Chave secreta disponvel.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "A chave secreta necessria para fazer isto.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 #, fuzzy msgid "Key is revoked." msgstr "A chave protegida.\n" #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Realmente assinar todos os IDs de usurio? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Sugesto: Selecione os IDs de usurio para assinar\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "classe de assinatura desconhecida" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Voc precisa selecionar pelo menos um ID de usurio.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Voc no pode remover o ltimo ID de usurio!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Realmente remover todos os IDs de usurio selecionados? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Realmente remover este ID de usurio? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Realmente remover este ID de usurio? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Voc deve selecionar pelo menos uma chave.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "erro na escrita do chaveiro `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Voc deve selecionar pelo menos uma chave.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Voc realmente quer remover as chaves selecionadas? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Voc realmente quer remover esta chave? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Realmente remover todos os IDs de usurio selecionados? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Realmente remover este ID de usurio? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Voc realmente quer revogar esta chave? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Voc realmente quer revogar as chaves selecionadas? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Voc realmente quer revogar esta chave? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "lista preferncias" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Realmente remover todos os IDs de usurio selecionados? " #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Realmente gerar os certificados de revogao? (s/N)" #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Salvar alteraes? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Sair sem salvar? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "atualizao falhou: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "atualizao da chave secreta falhou: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Chave no alterada, nenhuma atualizao necessria.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "" #: g10/keyedit.c:2398 msgid "Features: " msgstr "" #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Notao: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "impossvel criar %s: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "revkey" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr "A chave expira em %s\n" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr "A chave expira em %s\n" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr "trust" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr "trust" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Esta chave foi desativada" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "revkey" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Voc no pode modificar a data de validade de uma chave v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" #: g10/keyedit.c:3074 g10/keyedit.c:3409 #, fuzzy msgid "Are you sure you still want to add it? (y/N) " msgstr "Voc tem certeza de que quer este tamanho de chave? " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Deletar esta assinatura vlida? (s/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Deletar esta assinatura invlida? (s/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Deletar esta assinatura desconhecida? (s/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Realmente remover esta auto-assinatura? (s/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d assinatura removida.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d assinaturas removidas.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nada removido.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "armadura invlida" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" #: g10/keyedit.c:3435 #, fuzzy msgid "Enter the user ID of the designated revoker: " msgstr "Digite o tamanho da chave" #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "Voc tem certeza de que quer este tamanho de chave? " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Por favor remova as selees das chaves secretas.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Por favor selecione no mximo uma chave secundria.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "Modificando a data de validade para uma chave secundria.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Modificando a data de validade para uma chave primria.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Voc no pode modificar a data de validade de uma chave v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Nenhuma assinatura correspondente no chaveiro secreto\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 #, fuzzy msgid "Please select exactly one user ID.\n" msgstr "Voc precisa selecionar pelo menos um ID de usurio.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "chave %08lX: auto-assinatura invlida\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Voc tem certeza de que quer este tamanho de chave? " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Voc tem certeza de que quer este tamanho de chave? " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Notao: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Sobrescrever (s/N)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Nenhum ID de usurio com ndice %d\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Nenhum ID de usurio com ndice %d\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Nenhum ID de usurio com ndice %d\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "ID de usurio: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " assinado por %08lX em %s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr "" #: g10/keyedit.c:4711 #, fuzzy, c-format msgid "This signature expired on %s.\n" msgstr "Esta chave no protegida.\n" #: g10/keyedit.c:4715 #, fuzzy msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Voc tem certeza de que quer este tamanho de chave? " #: g10/keyedit.c:4719 #, fuzzy msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Gerar um certificado de revogao para esta assinatura? (s/N)" #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " assinado por %08lX em %s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Voc assinou estes IDs de usurio:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr "assinar uma chave localmente" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " revogado por %08lX em %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Voc est prestes a revogar estas assinaturas:\n" #: g10/keyedit.c:4851 #, fuzzy msgid "Really create the revocation certificates? (y/N) " msgstr "Realmente gerar os certificados de revogao? (s/N)" #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "nenhuma chave secreta\n" #: g10/keyedit.c:4951 #, fuzzy, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "A chave protegida.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "ignorado `%s': duplicado\n" # muitas ou demais ??? #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "Preferncias demais" # muitas ou demais ??? #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "Preferncias demais" # muitas ou demais ??? #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "Preferncias demais" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "Caractere invlido no nome\n" #: g10/keygen.c:888 #, fuzzy msgid "writing direct signature\n" msgstr "escrevendo auto-assinatura\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "escrevendo auto-assinatura\n" # key binding ??? #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "escrevendo assinatura ligada a uma chave\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, fuzzy, c-format msgid "keysize invalid; using %u bits\n" msgstr "O tamanho de chave pedido %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, fuzzy, c-format msgid "keysize rounded up to %u bits\n" msgstr "arredondado para %u bits\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "criptografar dados" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (apenas criptografia)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Por favor selecione o tipo de chave desejado:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA e ElGamal (padro)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA e ElGamal (padro)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (apenas assinatura)\n" #: g10/keygen.c:1496 #, fuzzy, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) DSA (apenas assinatura)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (apenas criptografia)\n" #: g10/keygen.c:1501 #, fuzzy, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) ElGamal (apenas criptografia)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) ElGamal (apenas criptografia)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) ElGamal (apenas criptografia)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Que tamanho de chave voc quer? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Que tamanho de chave voc quer? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "O tamanho de chave pedido %u bits\n" #: g10/keygen.c:1722 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 vlida.\n" " 0 = chave no 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:1733 #, fuzzy msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Por favor especifique por quanto tempo a chave deve ser vlida.\n" " 0 = chave no 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:1754 msgid "Key is valid for? (0) " msgstr "A chave valida por? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "A chave valida por? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "valor invlido\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "A chave no expira nunca\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "A chave no expira nunca\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "A chave expira em %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Esta chave no protegida.\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Seu sistema no consegue mostrar datas alm de 2038.\n" "Apesar disso, elas sero corretamente manipuladas at 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "Est correto (s/n)? " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Voc precisa de um identificador de usurio para identificar sua chave; o\n" "programa constri o identificador a partir do Nome Completo, Comentrio e\n" "Endereo Eletrnico desta forma:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Nome completo: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Caractere invlido no nome\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "O nome no pode comear com um dgito\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "O nome deve ter pelo menos 5 caracteres\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Endereo de correio eletrnico: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Endereo eletrnico invlido\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Comentrio: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Caractere invlido no comentrio\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Voc est usando o conjunto de caracteres `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Voc selecionou este identificador de usurio:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoSs" #: g10/keygen.c:1936 #, fuzzy msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Muda (N)ome, (C)omentrio, (E)ndereo ou (O)k/(S)air? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Muda (N)ome, (C)omentrio, (E)ndereo ou (O)k/(S)air? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "" #: g10/keygen.c:1996 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/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "" #: g10/keygen.c:2012 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 no quer uma frase secreta - provavelmente isto uma *m* idia!\n" "Vou continuar assim mesmo. Voc pode mudar sua frase secreta a\n" "qualquer hora, usando este programa com a opo \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 aleatrios. uma boa idia realizar outra\n" "atividade (digitar no teclado, mover o mouse, usar os discos) durante a\n" "gerao dos nmeros primos; isso d ao gerador de nmeros aleatrios\n" "uma chance melhor de conseguir entropia suficiente.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Gerao de chave cancelada.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, fuzzy, c-format msgid "writing public key to `%s'\n" msgstr "escrevendo certificado pblico para `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "escrevendo certificado privado para `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, fuzzy, c-format msgid "writing secret key to `%s'\n" msgstr "escrevendo certificado privado para `%s'\n" #: g10/keygen.c:3255 #, fuzzy, c-format msgid "no writable public keyring found: %s\n" msgstr "chave %08lX: chave pblica no encontrada: %s\n" #: g10/keygen.c:3261 #, fuzzy, c-format msgid "no writable secret keyring found: %s\n" msgstr "impossvel bloquear chaveiro secreto: %s\n" #: g10/keygen.c:3279 #, fuzzy, c-format msgid "error writing public keyring `%s': %s\n" msgstr "erro na escrita do chaveiro `%s': %s\n" #: g10/keygen.c:3286 #, fuzzy, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "erro na escrita do chaveiro `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "chaves pblica e privada criadas e assinadas.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Note que esta chave no pode ser usada para criptografia. Voc pode usar\n" "o comando \"--edit-key\" para gerar uma chave secundria para esse fim.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "A gerao de chaves falhou: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "a chave foi criada %lu segundo no futuro\n" "(viagem no tempo ou problema no relgio)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, 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 relgio)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Realmente criar? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "enumerao de blocos de chaves falhou: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "impossvel criar %s: %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOTA: chave secreta %08lX expirou %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "" #: g10/keylist.c:265 #, fuzzy msgid "Critical signature policy: " msgstr "assinatura %s de: %s\n" #: g10/keylist.c:267 #, fuzzy msgid "Signature policy: " msgstr "assinatura %s de: %s\n" #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 #, fuzzy msgid "Critical signature notation: " msgstr "Notao: " #: g10/keylist.c:361 #, fuzzy msgid "Signature notation: " msgstr "Notao: " #: g10/keylist.c:471 msgid "Keyring" msgstr "" #: g10/keylist.c:1516 #, fuzzy msgid "Primary key fingerprint:" msgstr "listar as chaves e as impresses digitais" #: g10/keylist.c:1518 #, fuzzy msgid " Subkey fingerprint:" msgstr " Impresso digital:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 #, fuzzy msgid " Primary key fingerprint:" msgstr " Impresso digital:" #: g10/keylist.c:1527 #, fuzzy msgid " Subkey fingerprint:" msgstr " Impresso digital:" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Impresso digital:" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "criao de armadura falhou: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "AVISO: existem 2 arquivos com informaes confidenciais.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s o no modificado\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s o novo\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Por favor conserte este possvel furo de segurana\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "erro na escrita do chaveiro `%s': %s\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "listar as chaves e as assinaturas" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "listar as chaves e as assinaturas" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: chaveiro criado\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "a URL de poltica dada invlida\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "chaveiro invlido" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "usurio `%s' no encontrado: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "usurio `%s' no encontrado: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "impossvel escrever para o chaveiro: %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "impossvel escrever para o chaveiro: %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "exportar chaves para um servidor" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "lendo opes de `%s'\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "assinado com sua chave %08lX em %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "exportar chaves para um servidor" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "lendo opes de `%s'\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "chaveiro invlido" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "enumerao de chaves secretas falhou: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "erro geral" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "erro geral" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, fuzzy, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "%s no um mapa de caracteres vlido\n" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "impossvel escrever para o chaveiro: %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "impossvel escrever para o chaveiro: %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "" #: g10/mainproc.c:294 #, fuzzy, c-format msgid "%s encrypted session key\n" msgstr "dados criptografados com %s\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "criptografado com algoritmo desconhecido %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "a chave pblica %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "dados criptografados com chave pblica: DEK vlido\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "criptografado com chave %u-bit %s, ID %08lX, criada em %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " ou \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "criptografado com chave %s, ID %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "descriptografia de chave pblica falhou: %s\n" #: g10/mainproc.c:526 #, fuzzy, c-format msgid "encrypted with %lu passphrases\n" msgstr "Repita a frase secreta: " #: g10/mainproc.c:528 #, fuzzy msgid "encrypted with 1 passphrase\n" msgstr "Repita a frase secreta: " #: g10/mainproc.c:561 g10/mainproc.c:582 #, fuzzy, c-format msgid "assuming %s encrypted data\n" msgstr "dados criptografados com %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "descriptografia correta\n" #: g10/mainproc.c:609 #, fuzzy msgid "WARNING: message was not integrity protected\n" msgstr "AVISO: nada exportado\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "CUIDADO: a mensagem criptografada foi manipulada!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "descriptografia falhou: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: o remetente solicitou \"apenas-para-seus-olhos\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "nome de arquivo original='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revogao isolada - use \"gpg --import\" para aplic-la\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Assinatura correta de \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "verificao de assinatura suprimida\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "fazer uma assinatura separada" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Esta chave no protegida.\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " ou \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Assinatura feita em %.*s usando %s, ID da chave %08lX\n" #: g10/mainproc.c:1616 #, fuzzy msgid "Key available at: " msgstr "Nenhuma ajuda disponvel" #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "Assinatura INCORRETA de \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Assinatura correta de \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Assinatura correta de \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " ou \"" #: g10/mainproc.c:1937 #, fuzzy, c-format msgid "Signature expired %s\n" msgstr "Esta chave no protegida.\n" #: g10/mainproc.c:1942 #, fuzzy, c-format msgid "Signature expires %s\n" msgstr "Esta chave no protegida.\n" #: g10/mainproc.c:1945 #, fuzzy, c-format msgid "%s signature, digest algorithm %s\n" msgstr "assinatura %s de: %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "" #: g10/mainproc.c:1947 msgid "textmode" msgstr "" #: g10/mainproc.c:1947 g10/trustdb.c:551 #, fuzzy msgid "unknown" msgstr "verso desconhecida" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Impossvel verificar assinatura: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 #, fuzzy msgid "not a detached signature\n" msgstr "fazer uma assinatura separada" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "assinatura isolada da classe 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "formato de assinatura antigo (PGP2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "pacote raiz invlido detectado em proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "impossvel desativar core dumps: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "atualizao do banco de dados de confiabilidade falhou: %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "banco de dados de confiabilidade: leitura falhou (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "impossvel manipular algoritmo de chave pblica %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "NOTA: algoritmo de criptografia %d no encontrado nas preferncias\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "algoritmo de criptografia no implementado" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "assinatura %s de: %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "NOTA: algoritmo de criptografia %d no encontrado nas preferncias\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr "rev- revogaes de chaves incorreta\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "chave RSA no pode ser usada nesta verso\n" #: g10/misc.c:729 #, fuzzy, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/misc.c:733 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "AVISO: `%s' um arquivo vazio\n" #: g10/misc.c:755 #, fuzzy msgid "Uncompressed" msgstr "no processado(s)" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "no processado(s)" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "lendo opes de `%s'\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "destinatrio padro desconhecido `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "classe de assinatura desconhecida" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Arquivo `%s' j existe. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Sobrescrever (s/N)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: sufixo desconhecido\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Digite novo nome de arquivo" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "escrevendo em \"stdout\"\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "assumindo dados assinados em `%s'\n" #: g10/openfile.c:437 #, fuzzy, c-format msgid "new configuration file `%s' created\n" msgstr "%s: novo arquivo de opes criado\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: diretrio criado\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "impossvel manipular algoritmo de chave pblica %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpacote do tipo %d tem bit crtico ligado\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "" #: g10/passphrase.c:354 #, fuzzy, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "algoritmo de proteo %d no suportado\n" #: g10/passphrase.c:371 #, fuzzy, c-format msgid "can't connect to `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (ID principal da chave %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "\n" "Voc precisa de uma frase secreta para desbloquear a chave secreta do\n" "usurio: \"%.*s\"\n" "%u-bit %s chave, ID %08lX, criada %s%s\n" #: g10/passphrase.c:580 #, fuzzy msgid "Repeat passphrase\n" msgstr "Repita a frase secreta: " #: g10/passphrase.c:582 #, fuzzy msgid "Enter passphrase\n" msgstr "Digite a frase secreta: " #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "impossvel pedir senha em modo no-interativo\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Digite a frase secreta: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Voc precisa de uma frase secreta para desbloquear a chave secreta do\n" "usurio: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "chave de %u-bit/%s, ID %08lX, criada em %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repita a frase secreta: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "" #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "impossvel abrir arquivo: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Voc tem certeza de que quer este tamanho de chave? " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "%s: no um banco de dados de confiabilidade\n" #: g10/photoid.c:163 #, fuzzy msgid "Is this photo correct (y/N/q)? " msgstr "Est correto (s/n)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 #, fuzzy msgid "unable to display photo ID!\n" msgstr "impossvel abrir %s: %s\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "" #: g10/pkclist.c:65 g10/revoke.c:621 #, fuzzy msgid "Key is superseded" msgstr "A chave protegida.\n" #: g10/pkclist.c:67 g10/revoke.c:620 #, fuzzy msgid "Key has been compromised" msgstr "Esta chave foi desativada" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "" #: g10/pkclist.c:75 #, fuzzy msgid "reason for revocation: " msgstr "rev- revogaes de chaves incorreta\n" #: g10/pkclist.c:92 #, fuzzy msgid "revocation comment: " msgstr "[revogao]" #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Nenhum valor de confiana designado para %lu:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " ou \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Esta chave provavelmente pertence ao dono\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr "" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr "%08lX: Ns NO confiamos nesta chave\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr "%s: no um banco de dados de confiabilidade\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = voltar ao menu principal\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr "chave %08lX: subchave ignorada\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " q = sair\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Sua deciso? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Voc realmente quer remover esta chave? " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que levam a uma chave confiada plenamente:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr " No h indicao de que a assinatura pertence ao dono.\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr " No h indicao de que a assinatura pertence ao dono.\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "Esta chave provavelmente pertence ao dono\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Esta chave pertence a ns\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "No se tem certeza de que esta chave pertence a seu dono.\n" "Se voc *realmente* sabe o que est fazendo, pode responder\n" "sim prxima pergunta\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Usa esta chave de qualquer modo? " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "AVISO: Usando chave no confivel!\n" #: g10/pkclist.c:511 #, fuzzy msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/pkclist.c:520 #, fuzzy msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVISO: Esta chave foi revogada pelo seu dono!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " Isto pode significar que a assinatura falsificada.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVISO: Esta subchave foi revogada pelo seu dono!\n" #: g10/pkclist.c:535 #, fuzzy msgid "Note: This key has been disabled.\n" msgstr "Esta chave foi desativada" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Nota: Esta chave expirou!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVISO: Esta chave no est certificada com uma assinatura confivel!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " No h indicao de que a assinatura pertence ao dono.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVISO: Ns NO confiamos nesta chave!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " A assinatura provavelmente uma FALSIFICAO.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVISO: Esta chave no est certificada com assinaturas suficientemente\n" " confiveis!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " No se tem certeza de que a assinatura pertence ao dono.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignorado: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ignorado: a chave pblica j est presente\n" #: g10/pkclist.c:892 #, fuzzy msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Voc no especificou um identificador de usurio. (pode-se usar \"-r\")\n" "\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Identificador de usurio inexistente.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "ignorado: chave pblica j marcada como destinatrio padro\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "A chave pblica est desativada.\n" #: g10/pkclist.c:1006 #, fuzzy msgid "skipped: public key already set\n" msgstr "%s: ignorado: a chave pblica j est presente\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "destinatrio padro desconhecido `%s'\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: ignorado: a chave pblica est desativada\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "nenhum endereo vlido\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "dados no salvos; use a opo \"--output\" para salv-los\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, fuzzy, c-format msgid "error creating `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Assinatura separada.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Por favor digite o nome do arquivo de dados: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "lendo de \"stdin\" ...\n" #: g10/plaintext.c:555 #, fuzzy msgid "no signed data\n" msgstr "no dados assinados\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "impossvel abrir dados assinados `%s'\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "destinatrio annimo; tentando chave secreta %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "certo, ns somos o destinatrio annimo.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "codificao antiga do DEK no suportada\n" #: g10/pubkey-enc.c:240 #, fuzzy, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "algoritmo de proteo %d no suportado\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "NOTA: algoritmo de criptografia %d no encontrado nas preferncias\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTA: chave secreta %08lX expirou %s\n" #: g10/pubkey-enc.c:302 #, fuzzy msgid "NOTE: key has been revoked" msgstr "chave %08lX: a chave foi revogada!\n" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, fuzzy, c-format msgid "build_packet failed: %s\n" msgstr "atualizao falhou: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "chave %08lX: sem ID de usurio\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Gerar um certificado de revogao para esta assinatura? (s/N)" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "" #: g10/revoke.c:342 g10/revoke.c:564 #, fuzzy, c-format msgid "make_keysig_packet failed: %s\n" msgstr "enumerao de blocos de chaves falhou: %s\n" #: g10/revoke.c:405 #, fuzzy msgid "Revocation certificate created.\n" msgstr "chave %08lX: certificado de revogao adicionado\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "usurio `%s' no encontrado: %s\n" #: g10/revoke.c:496 #, fuzzy, c-format msgid "no corresponding public key: %s\n" msgstr "escrevendo certificado pblico para `%s'\n" #: g10/revoke.c:507 #, fuzzy msgid "public key does not match secret key!\n" msgstr "lid %lu no tem chave\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Gerar um certificado de revogao para esta assinatura? (s/N)" #: g10/revoke.c:531 #, fuzzy msgid "unknown protection algorithm\n" msgstr "algoritmo de compresso desconhecido" #: g10/revoke.c:539 #, fuzzy msgid "NOTE: This key is not protected!\n" msgstr "Esta chave no protegida.\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" #: g10/revoke.c:631 #, fuzzy msgid "Please select the reason for the revocation:\n" msgstr "rev- revogaes de chaves incorreta\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" #: g10/revoke.c:712 #, fuzzy, c-format msgid "Reason for revocation: %s\n" msgstr "rev- revogaes de chaves incorreta\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "Usa esta chave de qualquer modo? " #: g10/seckey-cert.c:53 #, fuzzy msgid "secret key parts are not available\n" msgstr "chave secreta no disponvel" #: g10/seckey-cert.c:59 #, fuzzy, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "algoritmo de proteo %d no suportado\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "algoritmo de proteo %d no suportado\n" #: g10/seckey-cert.c:266 #, fuzzy msgid "Invalid passphrase; please try again" msgstr "Frase secreta invlida; por favor tente novamente ...\n" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVISO: Chave fraca detectada - por favor mude a frase secreta novamente.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "chave fraca criada - tentando novamente\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "impossvel evitar chave fraca para criptografia simtrica;\n" "%d tentativas!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "a chave pblica %lu segundo mais nova que a assinatura\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "a chave pblica %lu segundos mais nova que a assinatura\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "a chave foi criada %lu segundo no futuro\n" "(viagem no tempo ou problema no relgio)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "a chave foi criada %lu segundos no futuro\n" "(viagem no tempo ou problema no relgio)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTA: chave de assinatura %08lX expirou %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "assinatura %s de: %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "assumindo assinatura incorreta devido a um bit crtico desconhecido\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "chave %08lX: sem subchave para ligao de chaves\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "chave %08lX: sem subchave para ligao de chaves\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" #: g10/sign.c:313 #, fuzzy, c-format msgid "checking created signature failed: %s\n" msgstr "leitura de registro de assinatura falhou: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "assinatura %s de: %s\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "NOTA: algoritmo de criptografia %d no encontrado nas preferncias\n" #: g10/sign.c:960 msgid "signing:" msgstr "assinando:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" #: g10/sign.c:1252 #, fuzzy, c-format msgid "%s encryption will be used\n" msgstr "descriptografia falhou: %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "a chave no est marcada como insegura - impossvel us-la com o pseudo " "RNG!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "ignorado `%s': duplicado\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "ignorado `%s': %s\n" #: g10/skclist.c:170 #, fuzzy msgid "skipped: secret key already present\n" msgstr "ignorado: a chave secreta j est presente\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "ignorado `%s': esta uma chave ElGamal gerada pelo PGP que no segura " "para assinaturas!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "registro de confiana %lu, tipo %d: escrita falhou: %s\n" #: g10/tdbdump.c:103 #, fuzzy, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Lista de valores de confiana designados, criada em %s\n" "# (Use \"gpgm --import-ownertrust\" para restaur-los)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "erro na leitura de `%s': %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "linha muito longa\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "erro: impresso digital invlida\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "importar os valores de confiana" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "erro lendo registro de diretrio: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "erro de leitura: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "banco de dados de confiabilidade: sincronizao falhou: %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "impossvel criar %s: %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "impossvel abrir `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, 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:159 g10/tdbio.c:1453 #, 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:269 msgid "trustdb transaction too large\n" msgstr "transao de banco de dados de confiabilidade muito grande\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "impossvel abrir `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: diretrio inexistente!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: falha ao criar registro de verso: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: banco de dados de confiabilidade invlido criado\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: banco de dados de confiabilidade criado\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: banco de dados de confiabilidade invlido\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: falha ao criar tabela de \"hash\": %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: erro atualizando registro de verso: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: erro lendo registro de verso: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: erro escrevendo registro de verso: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "banco de dados de confiabilidade: lseek falhou: %s\n" #: g10/tdbio.c:1181 #, 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:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: no um banco de dados de confiabilidade\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: registro de verso com recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: verso de arquivo invlida %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: erro lendo registro livre: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: erro escrevendo registro de diretrio: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: falha ao zerar um registro: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: falha ao anexar um registro: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: banco de dados de confiabilidade criado\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "impossvel manipular linhas de texto maiores que %d caracteres\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "linha de entrada maior que %d caracteres\n" #: g10/trustdb.c:226 #, fuzzy, c-format msgid "`%s' is not a valid long keyID\n" msgstr "%s no um mapa de caracteres vlido\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "chave %08lX: aceita como chave confivel.\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "" "chave %08lX: impossvel coloc-la no banco de dados de confiabilidade\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "chave %08lX: chave secreta sem chave pblica - ignorada\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "Certificados que levam a uma chave confiada plenamente:\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "registro de confiana %lu, tipo req %d: falha na leitura: %s\n" #: g10/trustdb.c:350 #, fuzzy, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "registro de confiana %lu: remoo falhou: %s\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "revkey" #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "expire" #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "verso desconhecida" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 msgid "never" msgstr "" #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 #, fuzzy msgid "no need for a trustdb check\n" msgstr "%s: no um banco de dados de confiabilidade\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, fuzzy, c-format msgid "next trustdb check due at %s\n" msgstr "insero de registro de confiana falhou: %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "%s: no um banco de dados de confiabilidade\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "%s: no um banco de dados de confiabilidade\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "chave pblica no encontrada" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "" #: g10/trustdb.c:1088 #, fuzzy msgid "checking the trustdb\n" msgstr "muda os valores de confiana" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "" #: g10/trustdb.c:2321 #, fuzzy msgid "no ultimately trusted keys found\n" msgstr "Certificados que levam a uma chave confiada plenamente:\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "Certificados que levam a uma chave confiada plenamente:\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "registro de confiana %lu, tipo %d: escrita falhou: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "a assinatura no pde ser verificada.\n" "Por favor lembre-se de que o arquivo com a assinatura (.sig ou .asc)\n" "deve ser o primeiro arquivo dado na linha de comando.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "linha %u muito longa ou sem LF\n" #: util/errors.c:53 msgid "general error" msgstr "erro geral" #: util/errors.c:54 msgid "unknown packet type" msgstr "formato de pacote desconhecido" #: util/errors.c:55 msgid "unknown version" msgstr "verso desconhecida" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "algoritmo de chave pblica desconhecido" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "algoritmo de \"digest\" desconhecido" #: util/errors.c:58 msgid "bad public key" msgstr "chave pblica incorreta" #: util/errors.c:59 msgid "bad secret key" msgstr "chave secreta incorreta" #: util/errors.c:60 msgid "bad signature" msgstr "assinatura incorreta" #: util/errors.c:61 msgid "checksum error" msgstr "erro de \"checksum\"" #: util/errors.c:62 msgid "bad passphrase" msgstr "frase secreta incorreta" #: util/errors.c:63 msgid "public key not found" msgstr "chave pblica no encontrada" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "algoritmo de criptografia desconhecido" #: util/errors.c:65 msgid "can't open the keyring" msgstr "no possvel abrir o chaveiro" #: util/errors.c:66 msgid "invalid packet" msgstr "pacote invlido" #: util/errors.c:67 msgid "invalid armor" msgstr "armadura invlida" #: util/errors.c:68 msgid "no such user id" msgstr "identificador de usurio inexistente" #: util/errors.c:69 msgid "secret key not available" msgstr "chave secreta no disponvel" #: util/errors.c:70 msgid "wrong secret key used" msgstr "chave secreta incorreta" # suportado ??? #: util/errors.c:71 msgid "not supported" msgstr "no suportado" #: util/errors.c:72 msgid "bad key" msgstr "chave incorreta" #: util/errors.c:73 msgid "file read error" msgstr "erro de leitura" #: util/errors.c:74 msgid "file write error" msgstr "erro de escrita" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "algoritmo de compresso desconhecido" #: util/errors.c:76 msgid "file open error" msgstr "erro na abertura de arquivo" #: util/errors.c:77 msgid "file create error" msgstr "erro na criao de arquivo" #: util/errors.c:78 msgid "invalid passphrase" msgstr "frase secreta invlida" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritmo de chave pblica no implementado" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algoritmo de criptografia no implementado" #: util/errors.c:81 msgid "unknown signature class" msgstr "classe de assinatura desconhecida" #: util/errors.c:82 msgid "trust database error" msgstr "erro no banco de dados de confiabilidade" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI incorreto" #: util/errors.c:84 msgid "resource limit" msgstr "limite de recurso" #: util/errors.c:85 msgid "invalid keyring" msgstr "chaveiro invlido" #: util/errors.c:86 msgid "bad certificate" msgstr "certificado incorreto" #: util/errors.c:87 msgid "malformed user id" msgstr "identificador de usurio malformado" #: util/errors.c:88 msgid "file close error" msgstr "erro no fechamento de arquivo" #: util/errors.c:89 msgid "file rename error" msgstr "erro na renomeao de arquivo" #: util/errors.c:90 msgid "file delete error" msgstr "erro na remoo de arquivo" #: util/errors.c:91 msgid "unexpected data" msgstr "dados inesperados" #: util/errors.c:92 msgid "timestamp conflict" msgstr "conflito de \"timestamp\"" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "algoritmo de chave pblica inutilizvel" #: util/errors.c:94 msgid "file exists" msgstr "o arquivo j existe" #: util/errors.c:95 msgid "weak key" msgstr "chave fraca" #: util/errors.c:96 msgid "invalid argument" msgstr "argumento invlido" #: util/errors.c:97 msgid "bad URI" msgstr "URI incorreto" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI no suportado" #: util/errors.c:99 msgid "network error" msgstr "erro na rede" #: util/errors.c:101 msgid "not encrypted" msgstr "no criptografado" #: util/errors.c:102 msgid "not processed" msgstr "no processado(s)" #: util/errors.c:104 #, fuzzy msgid "unusable public key" msgstr "chave pblica incorreta" #: util/errors.c:105 #, fuzzy msgid "unusable secret key" msgstr "chave secreta incorreta" #: util/errors.c:106 #, fuzzy msgid "keyserver error" msgstr "erro geral" #: util/errors.c:107 msgid "canceled" msgstr "" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "no criptografado" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "no dados assinados\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... isto um bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "voc encontrou um bug ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 #, fuzzy msgid "yes" msgstr "sim" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "sS" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" # INICIO MENU #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "sair" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 #, fuzzy msgid "WARNING: using insecure memory!\n" msgstr "Aviso: usando memria insegura!\n" #: util/secmem.c:97 #, fuzzy msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "rev- revogaes de chaves incorreta\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "a operao no possvel sem memria segura inicializada\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(voc pode ter usado o programa errado para esta tarefa)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "%s: novo arquivo de opes criado\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "%s: novo arquivo de opes criado\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "%s: novo arquivo de opes criado\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "%s: novo arquivo de opes criado\n" #~ msgid "Command> " #~ msgstr "Comando> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "O par de chaves DSA ter 1024 bits.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "O banco de dados de confiabilidade est danificado; por favor rode\n" #~ "\"gpg --fix-trust-db\".\n" #, fuzzy #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "um nome de notao deve ter apenas letras, dgitos, pontos ou sublinhados " #~ "e terminar com '='\n" #, fuzzy #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "um valor de notao no deve usar caracteres de controle\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "um valor de notao no deve usar caracteres de controle\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "um valor de notao no deve usar caracteres de controle\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "AVISO: dados de notao invlidos encontrados\n" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "ler opes do arquivo" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "ler opes do arquivo" #, fuzzy #~ msgid "expired: %s)" #~ msgstr "A chave expira em %s\n" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "chave %08lX: assinatura no exportvel (classe %02x) - ignorada\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "impossvel abrir %s: %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "Nenhum identificador de usurio para chave\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "erro na criao da frase secreta: %s\n" #, fuzzy #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "algoritmo de criptografia desconhecido" #, fuzzy #~ msgid "passphrase too long\n" #~ msgstr "linha muito longa\n" #~ msgid "select secondary key N" #~ msgstr "seleciona chave secundria N" #~ msgid "list signatures" #~ msgstr "lista assinaturas" #~ msgid "sign the key" #~ msgstr "assina a chave" #~ msgid "add a secondary key" #~ msgstr "adiciona nova chave secundria" #~ msgid "delete signatures" #~ msgstr "remove assinaturas" #~ msgid "change the expire date" #~ msgstr "muda a data de validade" #, fuzzy #~ msgid "set preference list" #~ msgstr "lista preferncias" #, fuzzy #~ msgid "updated preferences" #~ msgstr "lista preferncias" #~ msgid "No secondary key with index %d\n" #~ msgstr "Nenhuma chave secundria com ndice %d\n" #, fuzzy #~ msgid "--nrsign-key user-id" #~ msgstr "--sign-key id-usurio" #, fuzzy #~ msgid "--nrlsign-key user-id" #~ msgstr "--sign-key id-usurio" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "fazer uma assinatura separada" #, fuzzy #~ msgid "sign the key non-revocably" #~ msgstr "assina a chave localmente" #, fuzzy #~ msgid "sign the key locally and non-revocably" #~ msgstr "assina a chave localmente" #~ msgid "q" #~ msgstr "q" #~ msgid "help" #~ msgstr "help" #~ msgid "list" #~ msgstr "list" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "debug" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "erro geral" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "save" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "key" #~ msgid "check" #~ msgstr "check" #~ msgid "c" #~ msgstr "c" #~ msgid "sign" #~ msgstr "sign" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "sign" #~ msgid "lsign" #~ msgstr "lsign" #, fuzzy #~ msgid "nrsign" #~ msgstr "sign" #, fuzzy #~ msgid "nrlsign" #~ msgstr "sign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "deluid" #~ msgstr "deluid" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #, fuzzy #~ msgid "addrevoker" #~ msgstr "revkey" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #, fuzzy #~ msgid "showpref" #~ msgstr "showpref" #, fuzzy #~ msgid "setpref" #~ msgstr "pref" #, fuzzy #~ msgid "updpref" #~ msgstr "pref" #, fuzzy #~ msgid "keyserver" #~ msgstr "erro geral" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #, fuzzy #~ msgid "revuid" #~ msgstr "revsig" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ 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 mnimo 768 bits\n" #~ " tamanho padro 1024 bits\n" #~ " tamanho mximo sugerido 2048 bits\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA permite apenas tamanhos de 512 a 1024\n" #, fuzzy #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "tamanho muito pequeno; 768 o valor mnimo permitido.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "tamanho muito pequeno; 768 o valor mnimo permitido.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "tamanho muito grande; %d o valor mximo permitido.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "Tamanhos de chave maiores que 2048 no so recomendados\n" #~ "porque o tempo de computao REALMENTE longo!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "Voc tem certeza de que quer este tamanho de chave? " #~ 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 radiao de seu monitor e teclado " #~ "tambm vulnervel a ataques!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Algoritmos experimentais no devem ser usados!\n" #, fuzzy #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "este algoritmo de criptografia depreciado; por favor use algum\n" #~ "algoritmo padro!\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "escrevendo para `%s'\n" #, fuzzy #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "impossvel fazer isso em modo no-interativo\n" #, fuzzy #~ msgid "key `%s' not found: %s\n" #~ msgstr "usurio `%s' no encontrado: %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "impossvel criar %s: %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "impossvel abrir arquivo: %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " ou \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "chave %08lX: a chave foi revogada!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "chave %08lX: a subchave foi revogada!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: a chave expirou\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Ns NO confiamos nesta chave\n" #, fuzzy #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (assinatura e criptografia)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) DSA (apenas assinatura)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) ElGamal (assinatura e criptografia)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) ElGamal (apenas criptografia)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) ElGamal (assinatura e criptografia)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: impossvel abrir: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: AVISO: arquivo vazio\n" #~ msgid "can't open %s: %s\n" #~ msgstr "impossvel abrir %s: %s\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr "%s: no um banco de dados de confiabilidade\n" #~ msgid "Really sign? " #~ msgstr "Realmente assinar? " #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "assinado com sua chave %08lX em %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: impossvel acessar: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: impossvel criar trava\n" #, fuzzy #~ msgid "%s: can't make lock\n" #~ msgstr "%s: impossvel criar trava\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: impossvel criar: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: impossvel criar diretrio: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Se voc quiser usar esta chave revogada assim mesmo, responda \"sim\"." #, fuzzy #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "impossvel abrir %s: %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "impossvel abrir arquivo: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "erro: falta dois pontos\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "erro: nenhum valor de confiana\n" #~ msgid " (main key ID %08lX)" #~ msgstr " (ID principal da chave %08lX)" #, fuzzy #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! a subchave foi revogada: %s\n" #, fuzzy #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- revogaes de chaves incorreta\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr "A chave expira em %s\n" #, fuzzy #~ msgid " [expires: %s]" #~ msgstr "A chave expira em %s\n" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "revkey" #~ msgid "can't create %s: %s\n" #~ msgstr "impossvel criar %s: %s\n" #~ msgid "store only" #~ msgstr "apenas armazenar" #, fuzzy #~ msgid "sign a key locally and non-revocably" #~ msgstr "assinar uma chave localmente" #~ msgid "list only the sequence of packets" #~ msgstr "listar apenas as seqncias de pacotes" # ownertrust ??? #~ msgid "export the ownertrust values" #~ msgstr "exportar os valores de confiana" #, fuzzy #~ msgid "unattended trust database update" #~ msgstr "atualizar o banco de dados de confiabilidade" #~ msgid "fix a corrupted trust database" #~ msgstr "" #~ "consertar um banco de dados de confiabilidade\n" #~ "danificado" #~ msgid "De-Armor a file or stdin" #~ msgstr "retirar a armadura de um arquivo ou de \"stdin\"" #~ msgid "En-Armor a file or stdin" #~ msgstr "criar armadura para um arquivo ou \"stdin\"" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NOME|usar NOME como destinatrio padro" #~ msgid "use the default key as default recipient" #~ msgstr "usar a chave padro como destinatrio padro" #~ msgid "don't use the terminal at all" #~ msgstr "nunca usar o terminal" #~ msgid "force v3 signatures" #~ msgstr "forar assinaturas v3" #, fuzzy #~ msgid "do not force v3 signatures" #~ msgstr "forar assinaturas v3" #, fuzzy #~ msgid "force v4 key signatures" #~ msgstr "forar assinaturas v3" #, fuzzy #~ msgid "do not force v4 key signatures" #~ msgstr "forar assinaturas v3" #~ msgid "always use a MDC for encryption" #~ msgstr "sempre usar um MDC para criptografar" #, fuzzy #~ msgid "never use a MDC for encryption" #~ msgstr "sempre usar um MDC para criptografar" #~ msgid "batch mode: never ask" #~ msgstr "modo no-interativo: nunca perguntar" #~ msgid "assume yes on most questions" #~ msgstr "assumir sim para a maioria das perguntas" #~ msgid "assume no on most questions" #~ msgstr "assumir no para a maioria das perguntas" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "adicionar este chaveiro lista de chaveiros" #~ msgid "add this secret keyring to the list" #~ msgstr "adicionar este chaveiro secreto lista" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NOME|usar NOME como chave secreta padro" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|ENDEREO|usar este servidor para buscar chaves" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "" #~ "|NOME|definir mapa de caracteres do terminal como\n" #~ "NOME" #, fuzzy #~ msgid "|[file]|write status info to file" #~ msgstr "" #~ "|DA|escrever informaes de estado para o\n" #~ "descritor de arquivo DA" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|ARQUIVO|carregar mdulo de extenso ARQUIVO" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emular o modo descrito no RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "" #~ "configurar todas as opes de pacote,\n" #~ "criptografia e \"digest\" para comportamento\n" #~ "OpenPGP" #, fuzzy #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ "configurar todas as opes de pacote,\n" #~ "criptografia e \"digest\" para comportamento\n" #~ "OpenPGP" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|usar frase secreta modo N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "" #~ "|NOME|usar algoritmo de \"digest\" de mensagens NOME\n" #~ "para frases secretas" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "" #~ "|NOME|usar algoritmo de criptografia NOME para\n" #~ "frases secretas" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NOME|usar algoritmo de criptografia NOME" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NOME|usar algoritmo de \"digest\" de mensagens NOME" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|usar algoritmo de compresso N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "" #~ "eliminar o campo keyid dos pacotes\n" #~ "criptografados" #, fuzzy #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "o algoritmo de compresso deve estar na faixa %d..%d\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "o algoritmo de compresso deve estar na faixa %d..%d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: No se tem certeza de que esta chave realmente pertence ao dono,\n" #~ "mas aceita de qualquer modo\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "chave %08lX: no uma chave rfc2440 - ignorada\n" #, fuzzy #~ msgid " (default)" #~ msgstr "(o padro 1)" #~ msgid "Policy: " #~ msgstr "Poltica: " #, fuzzy #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "impossvel escrever para o chaveiro: %s\n" #, fuzzy #~ msgid "error sending to `%s': %s\n" #~ msgstr "erro na leitura de `%s': %s\n" #, fuzzy #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "esta uma chave ElGamal gerada pelo PGP que NO segura para " #~ "assinaturas!\n" #, fuzzy #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "a chave foi criada %lu segundo no futuro\n" #~ "(viagem no tempo ou problema no relgio)\n" #, fuzzy #~ msgid "" #~ "key %08lX 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 relgio)\n" #, fuzzy #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "Certificados que levam a uma chave confiada plenamente:\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Selecione o algoritmo a ser usado.\n" #~ "\n" #~ "DSA (ou DSS) o algoritmo de assinatura digital que pode ser usado " #~ "apenas\n" #~ "para assinaturas. Este o algoritmo recomendado porque a verificao de\n" #~ "assinaturas DSA muito mais rpida que a verificao de ElGamal.\n" #~ "\n" #~ "ElGamal um algoritmo que pode ser usado para assinatura e " #~ "criptografia.\n" #~ "O OpenPGP distingue dois tipos deste algoritmo: um apenas para " #~ "criptografia\n" #~ "e outro para assinatura+criptografia; na verdade so iguais, mas alguns\n" #~ "parmetros precisam ser escolhidos de modo especial para criar uma chave\n" #~ "segura para asssinatura: este programa faz isso, mas algumas outras\n" #~ "implementaes do OpenPGP no vo necessariamente entender o tipo\n" #~ "assinatura+criptografia.\n" #~ "\n" #~ "A chave primria precisa sempre ser uma chave capaz de fazer " #~ "assinaturas;\n" #~ "este o motivo pelo qual a chave ElGamal apenas para criptografia no " #~ "est\n" #~ "disponvel neste menu." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Apesar de estas chaves estarem definidas no RFC2440, elas no so " #~ "recomendadas\n" #~ "porque no so suportadas por todos os programas e assinaturas criadas " #~ "com\n" #~ "elas so grandes e sua verificao lenta." #, fuzzy #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu chaves processadas at agora\n" #, fuzzy #~ msgid "key %08lX incomplete\n" #~ msgstr "chave %08lX: sem ID de usurio\n" # INICIO MENU #, fuzzy #~ msgid "quit|quit" #~ msgstr "sair" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (assinatura e criptografia)\n" #, fuzzy #~ msgid "Create anyway? " #~ msgstr "Usa esta chave de qualquer modo? " # "hash" poderia ser "espalhamento", mas no fica claro #, fuzzy #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "algoritmo de hash invlido `%s'\n" #, fuzzy #~ msgid "" #~ "you have to start GnuPG again, so it can read the new configuration file\n" #~ msgstr "" #~ "voc deve reiniciar o GnuPG, para que ele possa ler o novo arquivo\n" #~ "de opes\n" #~ msgid " Fingerprint:" #~ msgstr " Impresso digital:" #~ msgid "|NAME=VALUE|use this notation data" #~ msgstr "|NOME=VALOR|usar estes dados de notao" #~ msgid "" #~ "the first character of a notation name must be a letter or an underscore\n" #~ msgstr "" #~ "o primeiro caractere de um nome de notao deve ser uma letra ou um " #~ "sublinhado\n" #~ msgid "dots in a notation name must be surrounded by other characters\n" #~ msgstr "" #~ "pontos em um nome de notao devem estar cercados por outros caracteres\n" #, fuzzy #~ msgid "Are you sure you still want to sign it?\n" #~ msgstr "Voc tem certeza de que quer este tamanho de chave? " #, fuzzy #~ msgid " Are you sure you still want to sign it?\n" #~ msgstr "Voc tem certeza de que quer este tamanho de chave? " #~ msgid "key %08lX: our copy has no self-signature\n" #~ msgstr "chave %08lX: nossa cpia no tem auto-assinatura\n" #~ msgid "Do you really need such a large keysize? " #~ msgstr "Voc realmente precisa de uma chave to grande? " #~ msgid " signed by %08lX at %s\n" #~ msgstr " assinado por %08lX em %s\n" #~ msgid "--delete-secret-key user-id" #~ msgstr "--delete-secret-key id-usurio" #~ msgid "--delete-key user-id" #~ msgstr "--delete-key id-usurio" #, fuzzy #~ msgid "--delete-secret-and-public-key user-id" #~ msgstr "--delete-secret-and-public-key id-usurio" #~ msgid "skipped: public key already set with --encrypt-to\n" #~ msgstr "ignorado: chave pblica j marcada com --encrypt-to\n" #, fuzzy #~ msgid "" #~ "\n" #~ "WARNING: This is a PGP2-style key\n" #~ msgstr "AVISO: `%s' um arquivo vazio\n" #~ msgid "sSmMqQ" #~ msgstr "sSmMqQ" #, fuzzy #~ msgid "duplicate (short) key ID %08lX\n" #~ msgstr "a chave pblica %08lX\n" #, fuzzy #~ msgid "%lu key(s) to refresh\n" #~ msgstr "\t%lu chaves com erros\n" #~ msgid "|[NAMES]|check the trust database" #~ msgstr "|[NOMES]|verificar o banco de dados de confiabilidade" #~ 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 foi possvel encontrar uma rota de confiana vlida para a chave.\n" #~ "Vamos ver se possvel designar alguns valores de confiana ausentes.\n" #~ "\n" #~ msgid "" #~ "No path leading to one of our keys found.\n" #~ "\n" #~ msgstr "Nenhuma rota encontrada que leve a uma de nossas chaves.\n" #~ msgid "" #~ "No certificates with undefined trust found.\n" #~ "\n" #~ msgstr "" #~ "Nenhum certificado com confiana indefinida encontrado.\n" #~ "\n" #~ msgid "" #~ "No trust values changed.\n" #~ "\n" #~ msgstr "" #~ "Nenhum valor de confiana modificado.\n" #~ "\n" #~ msgid "%08lX: no info to calculate a trust probability\n" #~ msgstr "%08lX: sem informao para calcular probabilidade de confiana\n" #~ msgid "%s: error checking key: %s\n" #~ msgstr "%s: erro na verificao da chave: %s\n" #~ msgid "too many entries in unk cache - disabled\n" #~ msgstr "entradas demais no cache unk - desativado\n" #~ msgid "assuming bad MDC due to an unknown critical bit\n" #~ msgstr "assumindo MDC incorreto devido a um bit crtico desconhecido\n" #~ msgid "error reading dir record for LID %lu: %s\n" #~ msgstr "erro lendo registro de diretrio para LID %lu: %s\n" #~ msgid "lid %lu: expected dir record, got type %d\n" #~ msgstr "lid %lu: registro de diretrio esperado, tipo %d recebido\n" #~ msgid "no primary key for LID %lu\n" #~ msgstr "nenhuma chave primria para LID %lu\n" #~ msgid "error reading primary key for LID %lu: %s\n" #~ msgstr "erro lendo chave primria para LID %lu: %s\n" #~ msgid "key %08lX: query record failed\n" #~ msgstr "chave %08lX: pedido de registro falhou\n" #~ msgid "key %08lX: already in trusted key table\n" #~ msgstr "chave %08lX: j est na tabela de chaves confiveis\n" #~ msgid "NOTE: secret key %08lX is NOT protected.\n" #~ msgstr "NOTA: a chave secreta %08lX NO est protegida.\n" #~ msgid "key %08lX: secret and public key don't match\n" #~ msgstr "chave %08lX: chaves secreta e pblica no so correspondentes\n" #~ msgid "key %08lX.%lu: Good subkey binding\n" #~ msgstr "chave %08lX.%lu: Ligao de subchave vlida\n" #~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" #~ msgstr "chave %08lX.%lu: Ligao de subchave invlida: %s\n" #~ msgid "key %08lX.%lu: Valid key revocation\n" #~ msgstr "chave %08lX.%lu: Revogao de chave vlida\n" #~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" #~ msgstr "chave %08lX.%lu: Revogao de chave invlida: %s\n" #~ msgid "Good self-signature" #~ msgstr "Auto-assinatura vlida" #~ msgid "Invalid self-signature" #~ msgstr "Auto-assinatura invlida" #~ msgid "Valid user ID revocation skipped due to a newer self signature" #~ msgstr "" #~ "Revogao vlida de ID de usurio ignorada devido a nova auto-assinatura" #~ msgid "Valid user ID revocation" #~ msgstr "Revogao de ID de usurio vlida" #~ msgid "Invalid user ID revocation" #~ msgstr "Revogao de ID de usurio invlida" #~ msgid "Valid certificate revocation" #~ msgstr "Certificado de revogao vlido" #~ msgid "Good certificate" #~ msgstr "Certificado correto" #~ msgid "Invalid certificate revocation" #~ msgstr "Certificado de revogao invlido" #~ msgid "Invalid certificate" #~ msgstr "Certificado invlido" #~ msgid "sig record %lu[%d] points to wrong record.\n" #~ msgstr "registro de assinatura %lu[%d] aponta para registro errado.\n" #~ msgid "duplicated certificate - deleted" #~ msgstr "certificado duplicado - removido" #~ msgid "tdbio_search_dir failed: %s\n" #~ msgstr "tdbio_search_dir falhou: %s\n" #~ msgid "lid ?: insert failed: %s\n" #~ msgstr "lid ?: insero falhou: %s\n" #~ msgid "lid %lu: insert failed: %s\n" #~ msgstr "lid %lu: insero falhou: %s\n" #~ msgid "lid %lu: inserted\n" #~ msgstr "lid %lu: inserido\n" #~ msgid "\t%lu keys inserted\n" #~ msgstr "\t%lu chaves inseridas\n" #~ msgid "lid %lu: dir record w/o key - skipped\n" #~ msgstr "lid %lu: registro de diretrio sem chave - ignorado\n" #~ msgid "\t%lu due to new pubkeys\n" #~ msgstr "\t%lu devido a novas chaves pblicas\n" #~ msgid "\t%lu keys skipped\n" #~ msgstr "\t%lu chaves ignoradas\n" #~ msgid "\t%lu keys updated\n" #~ msgstr "\t%lu chaves atualizadas\n" #~ msgid "Ooops, no keys\n" #~ msgstr "Ooops, nenhuma chave\n" #~ msgid "Ooops, no user IDs\n" #~ msgstr "Ooops, nenhum ID de usurio\n" #~ msgid "check_trust: search dir record failed: %s\n" #~ msgstr "check_trust: busca de registro de diretrio falhou: %s\n" #~ msgid "key %08lX: insert trust record failed: %s\n" #~ msgstr "chave %08lX: insero de registro de confiana falhou: %s\n" #~ msgid "key %08lX.%lu: inserted into trustdb\n" #~ msgstr "chave %08lX.%lu: inserida no banco de dados de confiabilidade\n" #~ 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" #~ msgid "key %08lX.%lu: expired at %s\n" #~ msgstr "chave %08lX.%lu: expirou em %s\n" #~ msgid "key %08lX.%lu: trust check failed: %s\n" #~ msgstr "chave %08lX.%lu: verificao de confiana falhou: %s\n" #~ msgid "user '%s' not found: %s\n" #~ msgstr "usurio `%s' no encontrado: %s\n" #~ msgid "problem finding '%s' in trustdb: %s\n" #~ msgstr "" #~ "problemas na procura de `%s' no banco de dados de confiabilidade: %s\n" #~ msgid "user '%s' not in trustdb - inserting\n" #~ msgstr "" #~ "usurio `%s' no encontrado no banco de dados de confiabilidade - " #~ "inserindo\n" #~ msgid "failed to put '%s' into trustdb: %s\n" #~ msgstr "falha ao colocar `%s' no banco de dados de confiabilidade: %s\n" #~ msgid "Do you really want to create a sign and encrypt key? " #~ msgstr "" #~ "Voc realmente quer criar uma chave para assinatura e criptografia? " #~ msgid "%s: user not found: %s\n" #~ msgstr "%s: usurio no encontrado: %s\n" #~ msgid "certificate read problem: %s\n" #~ msgstr "erro de leitura do certificado: %s\n" #~ msgid "no default public keyring\n" #~ msgstr "sem chaveiro pblico padro\n" #~ msgid "can't lock keyring `%s': %s\n" #~ msgstr "impossvel bloquear chaveiro `%s': %s\n" #~ msgid "%s: user not found\n" #~ msgstr "%s: usurio no encontrado\n" #~ msgid "WARNING: can't yet handle long pref records\n" #~ msgstr "" #~ "AVISO: ainda impossvel manipular registros de preferncias longos\n" #~ msgid "%s: can't create keyring: %s\n" #~ msgstr "%s: impossvel criar chaveiro: %s\n" #~ msgid "No key for user ID\n" #~ msgstr "Nenhuma chave para identificador de usurio\n" #~ msgid "no secret key for decryption available\n" #~ msgstr "nenhuma chave secreta para descriptografia disponvel\n" #~ msgid "" #~ "RSA keys are deprecated; please consider creating a new key and use this " #~ "key in the future\n" #~ msgstr "" #~ "Chaves RSA no so recomendveis; por favor considere criar uma nova " #~ "chave e us-la no futuro\n" #~ msgid "set debugging flags" #~ msgstr "definir parmetros de depurao" #~ msgid "enable full debugging" #~ msgstr "habilitar depurao completa" #~ msgid "do not write comment packets" #~ msgstr "no escrever pacotes de comentrio" #~ msgid "(default is 3)" #~ msgstr "(o padro 3)" #~ msgid " (%d) ElGamal in a v3 packet\n" #~ msgstr " (%d) ElGamal em um pacote v3\n" #~ msgid "Key generation can only be used in interactive mode\n" #~ msgstr "A gerao de chaves s pode ser feita em modo interativo\n" #, fuzzy #~ msgid "tdbio_search_sdir failed: %s\n" #~ msgstr "tdbio_search_dir falhou: %s\n" #~ msgid "print all message digests" #~ msgstr "imprime todos os \"digests\" de mensagens" #~ 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 sugestes 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 sugestes de %lu mas no " #~ "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 sugestes de %lu no aponta para\n" #~ "um registro de diretrio\n" #~ msgid "lid %lu: no primary key\n" #~ msgstr "lid %lu: nenhuma chave primria\n" #~ msgid "lid %lu: user id not found in keyblock\n" #~ msgstr "lid %lu: id de usurio no encontrado no bloco de chaves\n" #~ msgid "lid %lu: self-signature in hintlist\n" #~ msgstr "lid %lu: auto-assinatura na lista de sugestes\n" #~ msgid "very strange: no public key\n" #~ msgstr "muito estranho: nenhuma chave pblica\n" #~ msgid "hintlist %lu[%d] of %lu does not point to a dir record\n" #~ msgstr "" #~ "lista de sugestes %lu[%d] de %lu no aponta para registro de diretrio\n" #~ msgid "lid %lu: can't get keyblock: %s\n" #~ msgstr "lid %lu: impossvel pegar bloco de chaves: %s\n" #~ msgid "Too many preference items" #~ msgstr "Muitos itens de preferncia" # 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 diretrio \"shadow\" %lu mas ainda no est\n" #~ "marcado\n" #~ msgid "insert_trust_record: keyblock not found: %s\n" #~ msgstr "insert_trust_record: bloco de chaves no encontrado: %s\n" #~ msgid "lid %lu: update failed: %s\n" #~ msgstr "lid %lu: atualizao 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: update failed: %s\n" #~ msgstr "%s: atualizao 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 no encontrado: %s\n" #~ msgid "can't lock keyring `%': %s\n" #~ msgstr "impossvel bloquear chaveiro `%': %s\n" #~ msgid "writing keyblock\n" #~ msgstr "escrevendo bloco de chaves\n" #~ msgid "can't write keyblock: %s\n" #~ msgstr "impossvel escrever bloco de chaves: %s\n" #, fuzzy #~ msgid "encrypted message is valid\n" #~ msgstr "algoritmo de \"digest\" selecionado no vlido\n" #, fuzzy #~ msgid "Can't check MDC: %s\n" #~ msgstr "Impossvel verificar assinatura: %s\n" #~ msgid "Usage: gpgm [options] [files] (-h for help)" #~ msgstr "Uso: gpgm [opes] [arquivos] (-h para ajuda)" #~ msgid "usage: gpgm [options] " #~ msgstr "Uso: gpgm [opes] " #, fuzzy #~ msgid "chained sigrec %lu has a wrong owner\n" #~ msgstr "sigrec em cadeia %lu possui dono errado\n" #, fuzzy #~ msgid "lid %lu: read dir record failed: %s\n" #~ msgstr "lid %lu: leitura de registro de diretrio 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 preferncias falhou: %s\n" #, fuzzy #~ msgid "user '%s' read problem: %s\n" #~ msgstr "erro de leitura do usurio `%s': %s\n" #, fuzzy #~ msgid "user '%s' list problem: %s\n" #~ msgstr "erro de listagem do usurio `%s': %s\n" #, fuzzy #~ msgid "user '%s' not in trustdb\n" #~ msgstr "usurio `%s' no est no banco de dados de confiabilidade\n" #~ msgid "directory record w/o primary key\n" #~ msgstr "registro de diretrio sem chave primria\n" #~ msgid "key not in trustdb, searching ring.\n" #~ msgstr "" #~ "chave no encontrada no banco de dados de confiabilidade, procurando no " #~ "chaveiro\n" #~ msgid "key not in ring: %s\n" #~ msgstr "chave no 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 "Hmmm, public key lost?" #~ msgstr "Hmmm, chave pblica perdida?" #~ msgid "did not use primary key for insert_trust_record()\n" #~ msgstr "voc usou a chave primria para insert_trust_record()\n" #~ msgid "invalid clear text header: " #~ msgstr "cabealho de texto puro invlido: " #~ msgid "LID %lu: changing trust from %u to %u\n" #~ msgstr "LID %lu: mudando confiana de %u para %u\n" #~ msgid "LID %lu: setting trust to %u\n" #~ msgstr "LID %lu: estabelecendo confiana para %u\n" gnupg-1.4.20/po/el.gmo0000644000175000017500000022062112635457221011373 00000000000000}U'@5-A5o556727O7l777D7.8I7888888 9$9@9Y9$v9&9,99 ::<:N:h:]::/:(&;.O;3~;;;;;<!<4<M<i<"<<<<"<%=&-=!T=%v="=#='= >,>I>^>{>>>(>$>??#0?T?s???&?%?,@4C@x@@@@@'@A/AMA_ArAA"AAA-A(B0EBHvB B C CCAD/CD0sD\DE-E0DE.uEEEE3E4F-HFvF.0G_G hG rG:GGG#G&H&@HgH~HHHGH@H>=I+|I=II"I:JTJgJyJ J/JJKHK-L ?LJL8]L#LL"LLE}MM;YNNIOgOO$OOOOPPPQ)Q?QRQbQtQ%QQQ MR!nR<RR"R, S,8S2eSS S(S S T**TUTgTTTTT"TUU/UEOUoU V &V8GV'VcV/ WEf1g=BgIg4gg#h=Bhh?hDh1%i5WiHi-iHjMjj<jB/k)rkCk.k@lFPl2l1l l2mPmhQn*s&s1 t#>t2bt>tt=u0uMu"Cv&fv3v%vDv,,y5Yyyy_y z z(z 9zEz%^zzzz zz zz {*{2{:{J{R{a{p{ {{{{{{{ |-|.K|%z|2||||}-}B}5W}}};}<}/~E~&[~~~-~(~~10by 2$O=t%؀ 1H`|&&Á K%^$̂ ނ @- n|!D+/'W`~%%$܄  .7f2 8+Ht$&$,4CGZHB.DTrȈ 'B[u'.@(R,{ Ɋ ׊$% (I%h&ҋ!#AV%u% ی #&&J)q< (,Hu;MΎ7O"g-+ҏ*!)&K$rIÐ  ;N#f#ґ #0T3e%% "%H\ e5$4%1*W0Ӕ.ܔ* 6+Ǖ/%#I(\-/Ȗ,"%)Hr ͗#-(VIuϘ .Ibvř#ՙ #7 Klɚܚ6#+ Op-› )EayDFEFDAѝ7K$hF Ԟ$ #1U#nk76 :Xvѣ@/0C`'ޤ)0 L%m "ʥ&&!;]"t!Ŧya=u+2ߧ5H(Py$#ߨ, 5%V| 023".V1-'2 .@ o$̫1:P"$$%+Q+i,3­<3Oi, "%<Og%ȯ/ٯ- 17AiR *LC;:̲i q-,-#,?l?tA6-2- 6EA+ö0. Oi J=:.1i0̸2޸E$W| )A)& K04| ;ۻ.F+MyPhN8!e %&ο' 1 "$"Gj" 5 EP.,2R_"1B6J9(710N 7&!<^/y%$D R.%@.5op8=O1).4MP4S 4(Aj:z0/2'b#P9t ;)Ne749![<#[*"/"Rf*] /07H!d6'?%HfDNWCG12DH+JW9\JZ<<Iy(TK}D;TJ8Oh(>9) >4s(.'?1N49LBZ1,-E -~N1@@Pl`  +"Dg ~ &*-6? R^p ""(;+d:7BF c1! +E%kGX!Eg6D2!T$kA+5$Jo'"(K+2w'.,.&I0p+00/+@Sl'04OhzT 5%C(iW58 Y-b7,2EV!i:;Z!x72.7a7: [:[ZMl *1/'a>, 5'U*}?7*Q2|-*  '$.L{$*+*7*b$y")% %* ,P ,}     , 3, (` .  @  3 .P 5 # ; S +i ! # / < H /c A , /52h Y :R/f/ !-%I2oE:55k$ .$HS' B"(0K=|+<76n73;8o9'6%2\/$+/!Km#/A%WD), "6Tr%+"08!i!6!)I`#xJD#,P oy5@%3'Y' KT^NLPOL. D9 -~  4 7!#8!4\!^@!,%TBVz !@S1K0"R4`Zl(h;<Fuat|WhxtQh5^N =}\-]<AJk8>|' law]syQ_:B/Hq K2pe3g$CvHEk\"gSW"l+1)FLm`F*w>YyDVMws SfPP*B{I ;4yoX[+A0:dXgzx2iar7%.67 NU{;d?@9 }_3?<pbmRcH&9GsCj.ZCrzT&K$^_f.Zfi| x?ve' n1m Luo+ (8Y~{%vOQiUA/#>-~M*qP'N}8Ir)k`M9oVbnp&OJGYX6E:[W6t 5qjIcbJG jR0)7#dn=/$ UO]\L,!Te245 , =#3DEu[cD- ( Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d bad signatures %d keys processed (%d validity counts cleared) %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s CancelCertificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter JPEG filename for photo ID: Enter an optional description; end it with an empty line: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. Is this photo correct (y/N/q)? It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key available at: Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select the reason for the revocation: Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Reason for revocation: %s Repeat passphrase Repeat passphrase: Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Secret key is available. Secret parts of primary key are not available. Signature expired %s Signature expires %s Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu UncompressedUsage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create directory `%s': %s can't disable core dumps: %s can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverexternal program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key export failed: %s key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornever new configuration file `%s' created next trustdb check due at %s nono corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no need for a trustdb check no remote program execution supported no secret key no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to display photo ID! unable to execute external program unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked using cipher %s verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg-1.1.92 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:21+0200 Last-Translator: Dokianakis Theofanis Language-Team: Greek Language: el MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-7 Content-Transfer-Encoding: 8bit user ID. : bytes. ! ( %d bytes) photo ID. JPEG. . ! 240x288. : : %lu : %lu : %lu user ID: %lu : %lu user ID: %lu . . . : %lu : : %lu : %lu : (%d) DSA ( ) (%d) RSA ( ) (%d) RSA ( ) (0) .%s (1) .%s (2) .%s (3) .%s : %lu . : %lu (-) : : %lu # , %s # ( "gpg --import-ownertrust" ) %d %d (%d ) %d %d %d user ID - %s ... %s %s %s %s %s %s %s %s %s! %s %s! %s , %s %s. %s/%s : "%s" %s: ! %s: free : %s %s: : %s %s: : %s %s: dir : %s %s: : %s %s: : %s %s: hashtable: %s %s: : %s%s: : %s %s: %d %s: trustdb %s: trustdb %s: %s: trustdb %s: : %s %s: : %s: : . %s: trustdb %s: %s: recnum %lu %s:%d: "%s" %s:%d: %s:%d: ( ) ( %d ) ( ) ( ) ( ) --clearsign [ ]--decrypt [ ]--edit-key user-id []--encrypt [ ]--lsign-key user-id--output --sign --encrypt [ ]--sign --symmetric [ ]--sign [ ]--sign-key user-id--store [ ]--symmetric [ ]-k[v][v][v][c] [user-id] []... bug (%s:%d:%s) 1 1 1 1 user ID - @ ( man ) @ : -se -r Bob [] Bob --clearsign [] --detach-sign [] --list-keys [] --fingerprint [] (fingerprints) @ : @: ASCII. "yes" ( "y") . "yes" "yes" "yes" user ID. ! "yes"() "no"() ; (y/N) ; ; (y/N) : %s :%s : (N), (C), (E)mail (O)/(Q); (N), (C), (E)mail (Q); user ID ( ) . - 1 . . : : : ; (y/N) : : ; (y/N/q) ; (y/N/q) ; (y/N/q) %d . %d . . : ; (y/N) ; (y/N) OpenPGP -; (y/N) ; (y/N) ; (Y/n) Email: photo ID: ޷ : : . . ISO (YYYY-MM-DD) - . user ID . user ID : : `%s' . ... Hash: : user ID ; "0". IDEA , %s , . . . , "yes"., . . . ( "help") , . (y/N/q); . . -, ( ) -. : . : %s . . ; (0) . N . C . E email. O . Q .: %s ! : ! : v3 OpenPGP : : `%s' : `%s' : "----" : S2K (0) : trustdb 5 . NnCcEeOoQq `%s' user ID. user ID %d Email : . : ! . , email . RETURN ' ( ) . : ߷ "" . . , . user ID. : : . 0 = = n w = n m = n y = n . 0 = = n w = n m = n y = n "toggle" . , . , . :: . : ; (y/N) -; (y/N) : %s : %u bits . . Mallory . , . ! . . %s. %s. : : : gpg [] [] , , !! - "%s" PGP 2.x. . . user ID PGP 2.x. %s. user ID . . GnuPG . - . . . ! %s. . . , . %s. PGP 2.x. : -, GnuPG - . "yes" () : %lu : gpg [] [] (-h ): gpgv [] [] (-h ) user ID "%s" .: user ID "%s" -. user ID "%s" . User ID : "%s" : %s %s : 2 . : PGP 2.x. PGP . : PGP2. photo ID PGP . : ! : ! : ! : ! : ! : ! : ! : - : `%s' : user ID %d : ! : ! : random_seed - : . : : . . : ID . ID . : : `%s' : : core! : (-r) : : ( ) : %%- ( ). . : `%s': %s : tempfile (%s) `%s': %s : ! : !! bytes. (, , ) . . user ID , user ID. , . "0" . "1" , . "" . "2" . user ID photo ID. "3" . , "" photo ID .. , , . "" 2 3 ** . "" "" . , "0". : `%s' . v3 user ID! user ID. ( "-r") - ** ! - ** ! . , "--edit-key". PGP2.x. photo ID PGP2. OpenPGP PGP 2.x --pgp2. . user ID. . USER-ID: "%s" . , : " " . " " . " " . " user ID " user ID . email. "%s" . "%s" . ; ; 2038. , 2106. [ ][][-][]`%s' `%s' - `%s' keyID photo ID user ID : : %s %s `%s' MPI URI build_packet : %s `%s': %s `%s': %s `%s': %s `%s': %s core dump: %s %d bits %d %d `%s' `%s': %s `%s' `%s': %s `%s': %s ESK S2K `%s': %s PGP 2.x, , %d ! : %s trustdb checksum %d%s completes-needed 0 ascii . "--output" : %s () : %s OK block : %s : %s %lu 1 %d --pgp2 . IDEA `%s': %s `%s': %s : %s trailer `%s': %s : %s `%s': %s `%s': %s `%s': %s TrustDB: %s cache : %s %s (%d) 16-bit checksum gpg-agent %d gpg-agent iImMqQsS / %u LF %d S2K; 0, 1 3 : : %d clearsig dash escaped : default-cert-level 0, 1, 2, 3 hash `%s' min-cert-level 0, 1, 2, 3 (root) proc_tree() : %s %lu ( ) %lu ( ) - RNG! `%s' keyserver : %s keyserver : %s keyserver : %s keyserver : %s , %u bits %u bits user ID (fingerprints) () () (timestamp) make_keysig_packet : %s CRC GPG_AGENT_INFO (user id)marginals-needed 1 nN `%s' trustdb %s | : %s : %s trustdb (user id) OpenPGP . : %s : %s : %s : random_seed : random_seed , . DEK (PGP 2.x) `%s': %s ='%.*s' - . --check-trustdb email () http://www.gnupg.org/documentation/faqs.html "%s%s" ( CRC) ( CRC) agent - agent %d%s . : %s ! : DEK qQ , , - MTA `%s' `%s' stdin ... : : %u bits user ID N : %s :: : : %d - "gpg --import" 0x%02x %d bit : %s - URL URL . (.sig or .asc) . "%s"! %s (timestamp) pk cache - trust %lu %d trust %lu, req %d: read : %s trust %lu, %d: write : %s trustdb rec %lu: lseek: %s trustdb rec %lu: write (n=%d): %s trustdb trustdb: lseek: %s trustdb: read (n=%d): %s trustdb: sync : %s photo ID! : %s exec-path %s IDEA . URI : %s : %s : gpg [] "--delete-secret-key" . (user id) user ID "%s" : %s - (%d) "" `%s' `%s' - `%s' stdout yY| PGP 2.x --pgp2 - PGP 2.x --pgp2 RSA 2048 bit --pgp2 --pgp2 --pgp2 bug ... (%s:%d) %s %s. ( pipes) --pgp2. |FD| FD|| |N| N (0 )|[]| |[]| | []| gnupg-1.4.20/po/gl.gmo0000644000175000017500000021561512635457221011404 00000000000000yU'5-5/556667,7I7f7D7.7I7A8^8x8888899$69&[9,99999:(:]E::/:(:.;3>;r;z;;;;;; <)<"B<e<j<<"<%<&<!=%6="\=#='= == >>;>P>h>(y>$>>>#>?3?R?q?&?%?,?4@8@O@d@@@'@@@ AA2AEA"\AAA-A(A0BH6B B C CCAC/D03D\dDD-D0E.5EdEEE3E4E-F6F.FG (G 2G:@G{GG#G&G&H'H>HVHkHGtH@H>H+st=t0uM5u"u&u3u%vD'v,lx5xxx_x Py [yhy yyy%yyyy zz %z0zLzjzrzzzzzzz zzzz{{5{ L{m{.{%{2{|$|9|V|m||5|||;|<2}o}}&}}}-}(~>~T~1p~~~~~~. ERr$=% 1Rq&܀& *6KR%$ā *:J\@m !ԂD+;/g%Ѓ%$A R`.wۄ-EUd$w&$Å,$G;HB̆%5Sqɇ #<Vq'Ĉ.!(3,\ $É *%I,o&!1Od%%ϋ  #4&X)<Ȍ6,V;M܍*E]"u-Ǝ+* !7&Y$Iя.I\#t#ː %#>b3s%%͑   "3Vj s5$ʒ4 %?*e0.*D+Ք/%1W(j-/֕,"3)V ۖ#-6dI͗ݗ#<WpӘ#1E Yzי6#9 ]~-&B^vDFECDAΜ7H$eF ѝ$ #.R#kv9@4Ok@ۢ4JQ"ޣ"9Rk&'Ȥ."B Yz"!oѥA9X,86/7Wn (ͧ$6;U&t*1ƨ3/,)\'0,ߩ& *37^4.. )Oy3ū**;+Y+68!8#Mq'ȭ-@)W8+3EM* ˰(ذ<0>3og *"*M)x)"̲>=75u2d > !';)c*εA9H528$#9B]!·۷(7VSEo2:Ql6sC1uB`"9"V1y½!վ/H_'r8ӿܿ!&@8*=c';9#?&c( :"5R$n## G0x-2-?`2l4@Iut&4+[1 ."u "=1 <Zp(%!a< "5Y;7'#+O6Rg6  4 5A#w3#&:<Z)3EO065'P"fJ]*2B]B4HaBFV2H2PL<= ?9y)E'o5)77/gH*NsI& ,3<`'7'5%[mg  )3']'  '. Vbq$ 0!Mo(566!?X- ':Ab!FP% v-)>'V~!C#=V)k" %@<}" #*%N-t-'j;s.1Fc"G "/MR+:&7HP/("6>*u&%#"#4Xl.1-1%W"iNOe+-10")S/}%*!2!T%v1* 50Fw'+"  0#1T.,5G 6h/-'Fn7??A _ ky*.(/"??b!$:'BFjQ#!(E&n624)Q1{/  P i x   ! !   3  I $W #| ,  A 1- 0_     #   ( &2 KY * & ? '7 1_ 4   6 2'Z372,j>"8EL;=J ;W-8823*f4'M<%N+t  #$-&Ry&,.0K|&'@34t& .:*!e*!!'%EknAuNA=H7D#PC.2. <0\^>*"T?Sz  =Q1H0"R4\Wj%d;<Du]pxWfttOh3\K ;}\-Z:?Gk6<z% l_u[swQ]7@-Hq~/pe1cIAvEBiZ!gPTh)/) CJm^F'w>VyDVKo SfNM*B{I 91umXY+A-:dUexv0[gan5%+34LUy8`=@9y0?9n^kP_F#6Eq@h,XCrvR&K$s_d.Zbe| x<rc$ l.i Lqo(&8W|w#tLNiS>/ ;+~ M(mP'N{5Gp'g`J7kT`jl$MJGYV6E8XU4r  2}ojFcbHDfO.&7#bn=,!R O]YI)!Qa225 , :"3BCs[aA* ( Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d bad signatures %d keys processed (%d validity counts cleared) %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s CancelCertificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter JPEG filename for photo ID: Enter an optional description; end it with an empty line: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. Is this photo correct (y/N/q)? It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key available at: Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select the reason for the revocation: Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Reason for revocation: %s Repeat passphrase Repeat passphrase: Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Secret key is available. Secret parts of primary key are not available. Signature expired %s Signature expires %s Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu UncompressedUsage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create directory `%s': %s can't disable core dumps: %s can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverexternal program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key export failed: %s key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornever new configuration file `%s' created next trustdb check due at %s nono corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no keyserver known (use option --keyserver) no need for a trustdb check no remote program execution supported no secret key no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to display photo ID! unable to execute external program unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg 1.2.4 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:23+0200 Last-Translator: Jacobo Tarrio Language-Team: Galician Language: gl MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Introduza o ID de usuario. Remate cunha lia en branco: Non hai suficientes bytes aleatorios dispoibles. Por favor, faga outro traballo para lle dar ao sistema operativo unha oportunidade de acumular mis entropa (Precsanse %d bytes mis) Escolla unha imaxe a empregar coma identificacin fotogrfica. A imaxe ten que ser un ficheiro JPEG. Lembre que a imaxe armacnase coa sa chave pblica. Se emprega unha imaxe moi grande, a sa chave tamn se ha volver moi grande. Un bo tamao para empregar un semellante a 240x288. Algoritmos soportados: importadas: %lu sin cambios: %lu novas sub-chaves: %lu novos IDs de usuario: %lu non importadas: %lu sin IDs de usuario: %lu Non seguro que a sinatura pertenza ao seu propietario. Probablemente, a sinatura estea FALSIFICADA. Non hai indicacins de que a sinatura pertenza ao seu propietario. novas sinaturas: %lu Pegada dactilar da sub-chave:chaves secretas lidas: %lu novas chaves omitidas: %lu Pegada dactilar da sub-chave: (%d) DSA (s asinar) (%d) RSA (s cifrar) (%d) RSA (s asinar) (0) Non hei respostar.%s (1) Non o comprobei en absoluto.%s (2) Fixen algunhas comprobacins.%s (3) Fixen comprobacins moi exhaustivas.%s novas revocacins de chaves: %lu Non se puido asinar. chaves secretas importadas: %lu (non exportable)Pegada dactilar da chave primaria:chaves secretas sin cambios: %lu # Lista de valores de confianza asignados, creada o %s # (Empregue "gpg --import-ownertrust" para restauralos) %d sinaturas errneas procesronse %d chaves (marcronse %d contas de validez) %d sinaturas non verificadas debido a erros %d sinaturas non verificadas debido a chaves que faltan detectados %d IDs de usuario sin auto-sinatura vlida %s ... %s anda non traballa con %s! datos cifrados con %s chave de sesin cifrada con %s hase empregar cifrado %s %s o novo %s o que non cambiou %s non ten sentido empregndoo con %s! %s non se admite con %s! Sinatura %s, algoritmo de resumo %s %s. %s/%s cifrado para: "%s" %s: o directorio non existe! %s: erro ao ler un rexistro libre: %s %s: erro ao le-lo rexistro de versin: %s %s: erro ao actualiza-lo rexistro de versin: %s %s: erro ao escribi-lo rexistro de directorios: %s %s: erro ao escribi-lo rexistro de versin: %s %s: non se puido engadir un rexistro: %s %s: fallo ao crear unha tboa hash: %s %s: non se puido crea-lo rexistro de versin: %s%s: non se puido pr a cero un rexistro: %s %s: versin do ficheiro incorrecta %d %s: base de datos de confianza non vlida %s: creouse unha base de datos de confianza incorrecta %s: chaveiro creado %s: non un ficheiro de base de datos de confianza %s: omitido: %s %s: omitido: a chave pblica xa est presente %s: omitido: a chave pblica est desactivada %s: creouse a base de datos de confianza %s: sufixo descoecido %s: rexistro de versin con nmero de rexistro %lu %s:%d: opcin a extinguir "%s" %s:%d: opcins de exportacin non vlidas %s:%d: opcins de importacin non vlidas (Non se deu unha descricin) (probablemente queira seleccionar %d aqu) (Esta unha chave de revocacin sensible) (a menos que especifique a chave por pegada dactilar) (pode que usara o programa equivocado para esta tarefa) --clearsign [ficheiro]--decrypt [ficheiro]--edit-key id-de-usuario [comandos]--encrypt [ficheiro]--lsign-key id-de-usuario--output non traballa con este comando --sign --encrypt [ficheiro]--sign --symmetric [ficheiro]--sign [ficheiro]--sign-key id-de-usuario--store [ficheiro]--symmetric [ficheiro]-k[v][v][v][c] [id-de-usuario] [chaveiro]... isto un erro (%s:%d:%s) 1 sinatura errnea 1 sinatura non verificada debido a unha chave que falta 1 sinatura non verificada debido a un erro detectado 1 ID de usuario sin auto-sinatura vlida @ (Vexa a pxina man para un listado completo de comandos e opcins) @ Exemplos: -se -r Bob [ficheiro] asinar e cifrar para o usuario Bob --clearsgn [ficheiro] facer unha sinatura en texto claro --detach-sign [ficheiro] facer unha sinatura separada --list-keys [nomes] amosa-las chaves --fingerprint [nomes] amosa-las pegadas dactilares @ Opcins: @Comandos: Forzouse unha sada con armadura ASCII. Conteste "si" (ou s "s") se correcto xerar esta subchave.Conteste "si" se correcto borrar esta subchaveConteste "si" se correcto sobrescribi-lo ficheiroConteste "si" se realmente desexa borrar este ID de usuario. Tamn se han perder tdolos certificados!Conteste "si" ou "non"Est seguro de que quere engadila? (s/N) Est seguro de que quere revocala? (s/N) Est seguro de que quere asinalo? (s/N) Non foi posible verifica-la sinatura: %s Non se pode editar esta chave: %s CancelarCertificados que conducen a unha chave de confianza absoluta: Cambiar (N)ome, (C)omentario, (E)-mail ou (A)ceptar/(S)ar? Cambia-lo (N)ome, (C)omentario, (E)-mail ou (S)ar? Cambia-las preferencias de tdolos IDs de usuario (ou s dos seleccionados) lista actual de preferencias. A marca de tempo de tdalas auto-sinaturas afectadas ha avanzar un segundo. Cambiando a data de expiracin da chave primaria. Cifra: Comentario: Compresin: Crear un certificado de revocacin para esta sinatura? (s/N) Notacin de sinaturas crticas: Normativa de sinaturas crticas: Borrar esta sinatura correcta? (s/N/q)Borrar esta sinatura incorrecta? (s/N/q)Borrar esta sinatura descoecida? (s/N/q)Borrada %d sinatura. Borradas %d sinaturas. Sinatura non adxunta. Resumo: Quere emitir unha nova sinatura que substita caducada? (s/N) Quere promovela a sinatura totalmente exportable? (s/N) Quere promovela a unha auto-sinatura OpenPGP? (s/N) Quere asinalo outra vez de tdolos xeitos? (s/N) Quere que a sa sinatura caduque ao mesmo tempo? (S/n) Enderezo de E-mail: Introduza o nome do ficheiro JPEG: Introduza unha descricin opcional; remtea cunha lia en branco: Introduza o novo nome de ficheiroIntroduza o contrasinal Introduza o contrasinal: Introduza o nome do propietario da chaveIntroduza o novo contrasinal para esta chave secreta. Introduza o valor requerido tal como se amosa no indicativo. posible introducir unha data ISO (AAA-MM-DD) pero non ha obter unha boa resposta de erro - no canto diso, o sistema ha tratar de interpreta-lo valor proporcionado coma se fora un intervalo.Introduza o tamao da chaveIntroduza o ID de usuario da persoa que lle quere manda-la mensaxe.Introduza o ID de usuario do revocador designado: Caractersticas: O ficheiro `%s' xa existe. Introduza o nome do ficheiro ao que corresponde a sinaturaEscriba a sa mensaxe ... Hash: Pista: seleccione os IDs de usuario que desexa asinar Con canto tino comprobou que a chave que vai asinar realmente pertence persoa de enriba? Se non sabe que respostar, introduza "0". A cifra IDEA non est dispoible, tntase empregar %s no seu canto Se quere, pode introducir un texto que describa por que emite este certificado de revocacin. Por favor, mantea este texto breve. Unha lia en branco remata o texto. Se desexa empregar esta clave na que non se confa, conteste "si".En xeral non unha boa idea emprega-la mesma chave para asinar e cifrar. Este algoritmo debera empregarse s en determinados dominios. Consulte antes co seu experto en seguridade.Carcter non vlido no comentario Caracter non vlido no nome Comando incorrecto (tente "help") Contrasinal non vlido; por favor, tnteo de novoSeleccin non vlida. esta foto correcta (s/N/q)? A asignacin dun valor aqu cousa sa; este valor nunca se ha exportar a ningn terceiro. Precsase para implementa-la rede de confianza; non ten nada que ver coa rede de certificados.Chave dispoible en: Cancelouse a xeracin de chaves. A xeracin da chave fallou: %s Esta chave quedou descobertaXa non se emprega esta chaveA chave est protexida. A chave est revocada.A chave obsoletaPor canto tempo vlida a chave? (0) A chave non cambiou, polo que non fai falla actualizar. ChaveiroN para cambia-lo nome. C para cambia-lo comentario. E para cambia-lo enderezo de e-mail. O para continuar coa xeracin da chave. S para sar da xeracin da chave.NOTA: %s non para uso normal! NOTA: Esta chave non est protexida! NOTA: a creacin de subchaves para chaves v3 non cumpre OpenPGP NOTA: a chave est revocadaNOTA: non existe o ficheiro de opcins por defecto `%s' NOTA: ignrase o antigo ficheiro de opcins por defecto `%s' NOTA: o remitente pediu "confidencial" NOTA: desaconsllase encarecidamente o modo S2K simple (0) NOTA: non se pode escribir na base de datos de confianza O nome non pode comezar cun dxito O nome debe ter alomenos 5 caracteres Cmpre a chave secreta para facer isto. NnCcEeAaSsNon hai unha sinatura correspondiente no chaveiro secreto Non hai axuda dispoibleNon hai axuda dispoible para `%s'Non se especificou un motivoNon hai tal ID de usuario. Non hai ID de usuario con ndice %d Non un enderezo de e-mail vlido Nota: Esta chave est desactivada. Nota: Esta chave xa caducou! Non se borrou nada. Por favor, corrixa antes o erro Por favor, non poa o enderezo de correo no nome real ou no comentario Por favor, introduza un novo nome de ficheiro. Se s preme ENTER, hase emprega-lo ficheiro por defecto (que se amosa entre corchetes).Por favor, introduza un comentario (opcional)Por favor, introduza o nome do ficheiro de datos: Por favor, introduza o contrasinal; esta unha frase secreta Por favor, amae este posible fallo de seguridade Tea en conta que a validez da chave amosada non necesariamente correcta a menos que reinicie o programa. Por favor, quite as seleccins das chaves secretas. Por favor, repita o ltimo contrasinal, para estar seguro do que tecleou.Por favor, informe dos erros no programa a , e dos erros na traduccin a . Escolla exactamente un ID de usuario. Por favor, escolla o motivo da revocacin: Por favor, seleccione o tipo de chave que quere: Por favor, indique canto tempo debera ser vlida a chave. 0 = a chave non caduca = a chave caduca en n das w = a chave caduca en n semanas m = a chave caduca en n meses y = a chave caduca en n anos Por favor, indique canto tempo debera ser vlida a sinatura. 0 = a sinatura non caduca = a sinatura caduca en n das w = a sinatura caduca en n semanas m = a sinatura caduca en n meses y = a sinatura caduca en n anos Por favor, empregue o comando "toggle" antes. Agarde, por favor; estase a colleitar entropa. Traballe un pouco se iso evita que se aburra, que iso ha aumenta-la calidade da entropa. Pegada dactilar da chave primaria:Pblica: A chave pblica est desactivada. Nome: Realmente desexa crea-los certificados de revocacin? (s/N) Realmente quere borrar esta auto-sinatura? (s/N)Motivo para a revocacin: %s Repita o contrasinal Repita o contrasinal: O tamao de chave requerido son %u bits Creouse o certificado de revocacin. Creouse o certificado de revocacin. Por favor, trasldeo a un soporte que poida agochar; se Mallory consegue acceso a este certificado pode empregalo para inutiliza-la sa chave. unha boa idea imprimir este certificado e armacenalo, por se o soporte se volve ilexible. Pero tea coidado: o sistema de impresin da sa mquina podera armacena-los datos e deixrllelos dispoibles a outros. A chave secreta est disponible. as partes secretas da chave primaria non estn dispoibles. A sinatura caducou o %s A sinatura caduca o %s Notacin de sinaturas: Normativa de sinaturas: Sintaxe: gpg [opcins] [ficheiros] asinar, verificar, cifrar ou descifrar a operacin por defecto depende dos datos de entrada O xerador de nmeros aleatorios s un truco para poder executalo - non de ningn xeito un xerador de nmeros aleatorios seguro! NON USE NINGUN DATO XERADO POR ESTE PROGRAMA! A auto-sinatura de "%s" unha sinatura tipo PGP 2.x A sinatura non correcta. Ten sentido borrala do chaveiro.Non hai preferencias nun ID de usuario estilo PGP 2.x. Non se admite este comando no modo %s. Esta unha sinatura que liga o ID de usuario chave. Normalmente non unha boa idea borrar unha sinatura como esta. De feito, GnuPG pode non ser capaz de usar mis esta chave. As que faga isto s se esta auto-sinatura non correcta por algun motivo e hai unha segunda sa disposicin.Esta unha sinatura vlida na chave; normalmente non ha borrar esta sinatura porque pode ser importante para estabrecer unha conexin de confianza na chave ou noutra chave certificada por esta chave.Esta chave pertncenos a ns Esta chave est desactivadaEsta chave caducou!Esta chave ha caducar o %s. Esta chave non est protexida. Non se pode verificar esta sinatura porque non pose a chave correspondente. Debera retrasa-lo borrado ata que saiba que chave se empregou porque esta chave de sinatura podera estabrecer unha conexin de confianza mediante outra chave xa certificada.Esta sinatura caducou o %s. Isto podera face-la chave non utilizable en PGP 2.x. Ha ser revocada por: Para constru-la Rede-de-Confianza, GnuPG precisa saber que chaves teen confianza absoluta - esas adoitan se-las chaves das que ten acceso chave secreta. Responda "si" para lle dar confianza total a esta chave Nmero total procesado: %lu Sen comprimirUso: gpg [opcins] [ficheiros] (-h para ve-la axuda)Uso: gpgv [opcins] [ficheiros] (-h para ve-la axuda)O ID de usuario "%s" est caducado.O ID de usuario "%s" non est asinado por el mesmo.O ID de usuario "%s" est revocado.O ID de usuario xa non vlidoAVISO: "%s" unha opcin a extinguir AVISO: %s fai que se ignore %s AVISO: existen dous ficheiros con informacin confidencial. AVISO: Esta unha chave de estilo PGP 2.x. Se engade un revocador designado pode facer que algunhas versins de PGP rexeiten esta chave. AVISO: Esta unha chave de estilo PGP2. Se engade unha identificacin fotogrfica algunhas versins de PGP han rexeitar esta chave. AVISO: Esta chave est revocada polo propietario! AVISO: Esta chave non est certificada cunha sinatura de confianza! AVISO: Esta chave non est certificada con sinaturas de suficiente confianza! AVISO: Esta subchave est revocada polo propietario! AVISO: Emprgase unha chave que non de confianza! AVISO: Esta chave NON de confianza! AVISO: Detectouse unha chave feble - por favor, cambie o contrasinal outra vez. AVISO: `%s' un ficheiro baleiro AVISO: unha sinatura de ID de usuario ten unha data %d segundos no futuro AVISO: o nomeamento dunha chave coma o seu propio revocador designado non se pode desfacer! AVISO: a mensaxe cifrada foi manipulada! AVISO: tamao do ficheiro random_seed non vlido - non se emprega AVISO: cifrouse a mensaxe cunha chave feble no cifrado simtrico. AVISO: a mensaxe non tia proteccin de integridade AVISO: detectronse sinaturas mltiples. S se ha comproba-la primeira. AVISO: non se marcou ningn ID de usuario coma primario. Esta orde pode facer que un ID de usuario diferente se converta no primario. AVISO: non se exportou nada AVISO: as opcins de `%s' anda non estn activas nesta execucin AVISO: chave de sesin cifrada simetricamente potencialmente insegura AVISO: o programa pode crear un ficheiro 'core'! AVISO: deronse destinatarios (-r) sen empregar cifrado de chave pblica AVISO: conflicto de resumo de sinatura na mensaxe AVISO: non se pode expandir-%% a notacin (grande de mis). sase sen expandir. AVISO: non se puido elimina-lo directorio temporal `%s': %s AVISO: non se puido borra-lo ficheiro temporal (%s) `%s': %s AVISO: sase memoria insegura! AVISO: emprgase un xerador de nmeros aleatorios inseguro!! Cmpre xerar unha morea de bytes aleatorios. E unha boa idea facer outras cousas (premer teclas no teclado, move-lo rato, usa-los discos duros) mentres se xeran os nmeros primos; isto proporcinalle ao xerador de nmeros aleatorios unha opoertunidade de acumular entropa de abondo. Cando asina un ID de usuario dunha chave, debera comprobar antes que a chave pertence persoa que aparece no identificador. til para os demais saber con canto tino comprobou isto. "0" significa que non di nada do coidado co que comprobou a chave. "1" significa que cre que a chave pertence persoa que o afirma, pero non puido ou non quixo verifica-la chave. til para verificacins de "personaxes", nas que asina a chave dun usuario pseudnimo. "2" significa que fixo unha comprobacin informal da chave. Por exemplo, pode significar que comprobou a pegada dixital da chave e comprobou a identidade do usuario na chave contra unha identificacin fotogrfica. "3" significa que fixo unha comprobacin extensiva da chave. Por exemplo, pode significar que comprobou a pegada dixital da chave co propietario da chave en persoa, e que comprobou, cun documento difcil de falsificar cunha identificacin fotogrfica (coma o carnet de identidade ou pasaporte) que o nome do propietario da chave coincide co do identificador de usuario da chave, e que comprobou (por intercambio de correo electrnico) que o enderezo de e-mail da chave pertence ao propietario da chave. Tea en conta que os exemplos de enriba para os niveis 2 e 3 son *s* exemplos. final, depende de vostede decidir que significan "informal" e "extensivo" ao asinar outras chaves. Se non sabe cal a resposta correcta, resposte "0".Est a punto de revocar estas sinaturas: Est a usa-lo xogo de caracteres `%s'. Non pode cambia-la data de expiracin dunha chave v3 Non pode borra-lo ltimo ID de usuario! Non especificou un ID de usuario. (pode empregar "-r") Non desexa un contrainal - o que unha *mala* idea! Non quere empregar un contrasinal - unha idea *moi* mala! Hase facer as de tdolos xeitos; pode cambia-lo contrasinal en calquera momento, empregando este programa coa opcin "--edit-key". Non pode engadir un revocador designado a unha chave de estilo PGP 2.x. Non pode engadir unha identificacin fotogrfica a unha chave de estilo PGP2. Non pode facer unha sinatura OpenPGP nunha chave PGP 2.x no modo --pgp2. Debe seleccionar alomenos unha chave. Debe seleccionar alomenos un ID de usuario. Necesita un contrasinal para protexe-la sa chave secreta. Escolleu este ID de usuario: "%s" Debera especificar un motivo para o certificado. Dependendo do contexto pode escoller desta lista: "Descobreuse a chave" Emprgueo se ten motivos para crer que algunha persoa non autorizada obtivo acceso sa chave secreta. "A chave obsoleta" Emprgueo se cambiou esta chave cunha mis recente. "Xa non se emprega a chave" Emprgueo se retirou esta chave. "O ID de usuario xa non vlido" Emprgueo para indicar que o ID de usuario xa non se debera empregar; adoita empregarse para marcar un enderezo de correo non vlido. A sa sinatura actual en "%s" caducou. A sa sinatura actual en "%s" unha sinatura local. A sa decisin? A sa seleccin? O seu sistema non pode amosar datas mis al do 2038. Anda as, hase tratar correctamente ata o 2106. [ficheiro][revocacin][auto-sinatura][incerto]`%s' xa est comprimido `%s' non un ficheiro normal - ignrase `%s' non un ID longo de chave vlido engadir unha identificacin fotogrficaengadir unha chave de revocacinengadir un ID de usuariocabeceira de armadura: armadura: %s supoendo datos cifrados con %s suponse que hai datos asinados en `%s' MPI errneoURI incorrectocertificado errneochave incorrectacontrasinal errneochave pblica errneachave secreta errneasinatura errneaser un pouquio mis caladobinarioa chamada a build_packet fallou: %s non se pode pechar `%s': %s non se puido conectar a `%s': %s non se pode crear `%s': %s non se pode crea-lo directorio `%s': %s non posible deshabilita-los volcados de 'core': %s non se pode xerar un nmero primo de menos de %d bits non posible manexa-lo algoritmo de chave pblica %d non posible manexar lias de texto maiores que %d caracteres non se puido abrir `%s' non se puido abrir `%s': %s non foi posible abri-los datos asinados `%s' non foi posible abri-lo chaveironon se pode ler de `%s': %s non se puido facer stat sobre `%s': %s non se pode empregar un paquete simtrico ESK debido ao modo S2K non se pode escribir en `%s': %s cancelado polo usuario non se pode nomear unha chave estilo PGP 2.x coma revocador designado non se pode evitar unha chave feble para o cifrado simtrico; tentouse %d veces cambia-la confianza sobre o donocambia-lo contrasinalfallou a comprobacin da sinatura creada: %s comprobando a base de datos de confianza error de checksumo algoritmo de cifrado %d%s descoecido ou est desactivado completes-needed debe ser superior a 0 comandos conflictivos crear sada con armadura en asciios datos non foron gardados; use a opcin "--output" para gardalos non se puido quita-la armadura: %s descifrar datos (por defecto)o descifrado fallou: %s descifrado correcto fallou o borrado do bloque de chaves: %s non facer ningn cambionon se puido poe-la armadura: %s cifrar datoscifrado con %lu contrasinais cifrado con 1 contrasinal cifrado cun algoritmo descoecido %d para cifrar unha mensaxe en modo --pgp2 precsase da cifra IDEA cifrar s con cifrado simtricoerro ao crear `%s': %s erro ao crea-lo chaveiro `%s': %s erro ao crea-lo contrasinal: %s error nunha lia adicional erro lendo `%s': %s erro ao le-lo bloque de chaves: %s erro escribindo no chaveiro `%s': %s erro escribindo no chaveiro pblico `%s': %s erro escribindo no chaveiro secreto `%s': %s exportar chavesexportar chaves a un servidor de chavesas chamadas a programas externos estn desactivadas debido a opcins de permisos de ficheiros non seguras non se puido inicializa-la base de datos de confianzas: %s fallo ao reconstru-la cach de chaveiros: %s erro de peche de ficheiroerro de creacin de ficheiroerro de borrado de ficheiroo ficheiro xa existeerro de apertura de ficheiroerro de lectura de ficheiroerro de cambio de nome de ficheiroerro de escritura de ficheiroforza-la cifra simtrica %s (%d) viola as preferencias do destinatario erro xeralxerar un novo par de chavesxerar un certificado de revocacinxerando o checksum de 16-bits a extinguir para a proteccin da chave secreta gpg-agent non est dispoible nesta sesin a versin %d do protocolo de gpg-agent non est soportada iImMsSoOimportar chaves dun servidor de chavesimportar/mesturar chavesa lia de entrada %u longa de mis ou fltalle a marca de fin de lia a lia de entrada contn mis de %d caracteres modo S2K non vlido; debe ser 0, 1 ou 3 argumento non vlidoarmadura non vlidacabeceira de armadura non vlida: armadura incorrecta: lia mis longa ca %d caracteres cabeceira de sinatura en claro non vlida lia escapada cunha barra non vlida: preferencias por defecto non vlidas opcins de exportacin non vlidas algoritmo de hash non vlido `%s' opcins de importacin non vlidas chaveiro incorrectopaquete non vlidocontrasinal incorrectopreferencias de cifrado personais non vlidas preferencias de compresin personais non vlidas preferencias de resumo personais non vlidas paquete raz incorrecto detectado en proc_tree() valor non vlido a exportacin da chave fallou: %s creouse a chave %lu segundo no futuro (salto no tempo ou problemas co reloxo) creouse a chave %lu segundos no futuro (salto no tempo ou problemas co reloxo) a chave non est marcada coma insegura - non se pode empregar co xerador de nmeros aleatorios falso chaveiro `%s' creado erro do servidor de chavesa recepcin do servidor de chaves fallou: %s a actualizacin no servidor de chaves fallou: %s a busca no servidor de chaves fallou fallou: %s o envo ao servidor de chaves fallou: %s tamao de chave non vlido; empregando %u bits tamao de chave redondeado a %u bits listar chave e IDs de usuariove-la lista de chavesve-la lista de chaves e pegadas dactilaresve-la lista de chaves e sinaturaslista-las preferencias (expertos)lista-las preferencias (moitos datos)ve-la lista de chaves secretasfacer unha sinatura separadaconverte-los conflictos de selo de data nun avisoa chamada a make_keysig_packet fallou: %s CRC mal formado variable de ambiente GPG_AGENT_INFO mal formada id de usuario mal formadomarginals-needed debe ser superior a 1 movendo a sinatura dunha chave seu sitio nNsinaturas en texto claro aniadas erro de redenunca creouse un novo ficheiro de configuracin `%s' hase comproba-la base de datos de confianza o %s non|nomnon hai unha chave pblica correspondente: %s non hai un chaveiro privado por defecto: %s non se detectou un mdulo de acumulacin de entropa non hai un servidor de chaves coecido (empregue a opcin --keyserver) non se precisa comproba-la base de datos de confianza non se soporta a execucin remota de programas non hai chave secreta non hai datos asinados non hai tal id de usuarionon se atoparon chaves de confianza absoluta non se atoparon datos OpenPGP vlidos. non hai enderezos vlidos non se atopou un chaveiro no que se poida escribir: %s non se atopou un chaveiro pblico no que se poida escribir: %s non se atopou un chaveiro privado no que se poida escribir: %s non unha sinatura separada non cifradonon procesadonon est soportadonota: o ficheiro random_seed est baleiro nota: o ficheiro random_seed non se actualiza vale, ns somo-lo destinatario annimo. a codificacin vella do DEK non est soportada Sinatura vello estilo (PGP 2.x) a operacin non posible sen memoria inicializada como segura ficheiro de opcins `%s': %s nome do ficheiro orixinal='%.*s' borrouse a informacin de confianza o contrasinal non se repetiu correctamente; tnteo de novopor favor, execute con --check-trustdb por favor, introduza un enderezo de e-mail (opcional pero recomendado)mire en http://www.gnupg.org/documentation/faqs.html para obter mis informacin empregue "%s%s" no seu canto fin de ficheiro prematura (no CRC) fin de ficheiro prematura (non hai CRC) problema ao manexa-lo paquete cifrado problema co axente - desactivando o emprego do axente avisar antes de sobrescribiro algoritmo de proteccin %d%s non est soportado creronse e asinronse as chaves pblica e secreta. fallou o descifrado de chave pblica: %s a chave pblica con coincide coa chave secreta! datos cifrados coa chave pblica: DEK correcto non se atopou a chave pblicaaAabandonarsar deste mencarcter quoted-printable na armadura - seguramente empregouse un MTA con erros lendo de `%s' lendo as opcins de `%s' lendo de stdin ... motivo para a revocacin: borrar chaves do chaveiro pblicoborrar chaves do chaveiro secretolmite de recursoscomentario de revocacin: redondeado a %u bits gardar e sarbuscar chaves nun servidor de chavesa chave secreta non est dispoiblehai partes da chave secreta non dispoibles selecciona-lo ID de usuario No algoritmo de resumo de certificacin seleccionado non vlido o algoritmo de cifrado seleccionado non vlido o algoritmo de resumo seleccionado non vlido amosar esta axudaasinar unha chaveasinar unha chave localmenteasinar ou editar unha chaveverificacin de sinatura suprimida fallou a sinatura: %s asinando:omitido: chave pblica xa estabrecida omitido: a chave pblica xa est estabrecida coma destinatario por defecto omtese: a chave secreta xa est presente pasando por alto un bloque de tipo %d revocacin independente - empregue "gpg --import" para aplicar sinatura independiente de clase 0x%02x un subpaquete de tipo %d ten o bit crtico posto erro do sistema ao chamar a un programa externo: %s toma-las chaves deste chaveiromodo textoo URL de normativa de certificacin dado non vlido o URL de normativa de sinaturas dado non vlido non se puido verifica-la sinatura. Por favor, lembre que o ficheiro de sinatura (.sig ou .asc) debera se-lo primeiro ficheiro que se indique na lia de comandos. hai unha chave secreta para a chave pblica "%s"! isto pode ser causado por unha auto-sinatura que falta esta mensaxe pode non ser utilizable por %s conflicto de selo de datademasiadas entradas na cach de chaves pblicas - desactivada erro da base de datos de confianzao rexistro de confianza %lu non do tipo %d solicitado rexistro de confianza %lu, tipo da peticin %d: fallou a lectura: %s rexistro de confianza %lu, tipo %d: fallou a escritura: %s rexistro da base de datos de confianza %lu: lseek fallou: %s rexistro da base de datos de confianza %lu: fallou a escritura (n=%d): %s transaccin da base de datos de confianza demasiado grande base de datos de confianza: lseek fallou: %s base de datos de confianza: fallou a lectura (n=%d): %s base de datos de confianza: fallou a sincronizacin: %s non se pode amosa-la identificacin fotogrfica! non se puido executar un programa externo non se puido le-la resposta do programa externo: %s non se puido estabrecer exec-path a %s non se puido emprega-la cifra IDEA para tdalas chaves s que est a cifrar. datos inesperadosalgoritmo de cifrado non implementadoalgoritmo de chave pblica non implementadodescoecidoalgoritmo de cifrado descoecidoalgoritmo de compresin descoecidoalgoritmo de resumo descoecidotipo de paquete descoecidoalgoritmo de proteccin descoecido algoritmo de chave pblica descoecidoclase de sinatura descoecidaversin descoecidasada non natural do programa externo URI non soportadoalgoritmo de chave pblica imposible de usarchave pblica non utilizablechave secreta non utilizableactualizar tdalas chaves dun servidor de chavesa actualizacin fallou: %s o segredo da actualizacin fallou: %s actualiza-la base de datos de confianzauso: gpg [opcins] usar coma ficheiro de sadausar modo de texto cannicoempregue a opcin "--delete-secret-keys" para borrala primeiro. empregar este id de usuario para asinar ou descifraro ID de usuario "%s" xa est revocado laretoverificar unha sinaturachave feblecreouse unha chave feble - volvendo a tentalo tamao moi estrao para unha chave de sesin cifrada (%d) escribindo unha sinatura directa escribindo unha sinatura que liga a chave gravando a chave pblica en `%s' gravando a chave secreta en `%s' escribindo a propia sinatura escribindo a `%s' escribindo na sada estndar empregouse unha chave secreta errneasSsi|sims pode asinar en claro con chaves estilo PGP 2.x no modo --pgp2 s pode asinar nun ficheiro separado con chaves estilo PGP 2.x no modo --pgp2 s pode cifrar a chaves RSA de 2048 bits ou menos en modo --pgp2 s pode crear sinaturas separadas ou en claro no modo --pgp2 non pode asinar e cifrar ao mesmo tempo no modo --pgp2 non se pode nomear unha chave coma o seu propio revocador designado atopou un erro ... (%s:%d) non se pode empregar %s no modo %s debe empregar ficheiros (e non canalizacins) ao traballar con --pgp2 activado. |DF|escribi-la informacin de estado a este DF|NOME|cifrar para NOME|N|axusta-lo nivel de compresin a N (0 desactiva)|[ficheiro]|facer unha sinatura en texto claro|[ficheiro]|facer unha sinatura|algo [ficheiros]|visualizar resumos de mensaxesgnupg-1.4.20/po/stamp-po0000644000175000017500000000001212635457221011740 00000000000000timestamp gnupg-1.4.20/po/da.po0000644000175000017500000055166212635457217011234 00000000000000# Dansk oversættelse af: / Danish translation of: GnuPG # Copyright (C) 2012 Free Software Foundation, Inc. # Birger Langkjer, , 2000. # Kenneth Christiansen, kenneth@ripen.dk, 2000. # Joe Hansen, , 2012. # # deadlock -> baglås # ownertrust -> ejertroværdighed (pålidelighed, tillid) # record -> post # trust -> troværdig (pålidelig, tillid) # trustlist -> troværdig liste (betroet liste) # user-id -> bruger-id'et # 2012-06-05 msgid "" msgstr "" "Project-Id-Version: gnupg\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-11-04 20:27+0200\n" "Last-Translator: Joe Hansen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "kan ikke oprette primtal med pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "kan ikke oprette et primtal med mindre end %d bit\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "intet modul for indsamling af entropi detekteret\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "kan ikke låse »%s«: %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "venter på lås på »%s« ...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "kan ikke åbne »%s«: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "kan ikke køre »%s«: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "»%s« er ikke en regulær fil - ignoreret\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "bemærk: filen random_seed er tom\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "ADVARSEL: ugyldig størrelse på filen random_seed - bruges ikke\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "kan ikke læse »%s«: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "bemærk: filen random_seed er ikke opdateret\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "kan ikke oprette »%s«: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "kan ikke skrive »%s«: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "kan ikke lukke »%s«: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "ADVARSEL: brug af usikkert vilkårligt taloprettelsesprogram!!\n" #: cipher/random.c:894 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 "" "Oprettelsesprogrammet for vilkårlige tal er kun en\n" "midlertidig løsning - det er på ingen måde en stærk RNG!\n" "\n" "BRUG IKKE DATA OPRETTET MED DETTE PROGRAM!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Vent venligst, der indsamles entropi. Lav noget andet hvis du\n" "keder dig imens, da det vil forbedre kvaliteten på entropien.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Ikke nok vilkårlige byte tilgængelig. Lav noget andet, så programmet\n" "har en chance for at indsamle mere entropi! (har brug for yderligere %d " "byte)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "kunne ikke gemme fingeraftrykket: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "kunne ikke gemme oprettelsesdatoen: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "læsning af offentlig nøgle mislykkedes: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "svar indeholder ikke data for offentlig nøgle\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "svar indeholder ikke RSA modulus'erne\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "svar indeholder ikke den RSA-offentlige eksponent\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "bruger standard-PIN som %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "kunne ikke bruge standard-PIN som %s: %s - deaktiverer yderligere " "standardbrug\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Indtast venligst PIN%%0A[sigs færdig: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Indtast venligst PIN'en" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN-tilbagekald returnerede fejl: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN for CHV%d er for kort; minimumlængde er %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "verificering af CHV%d mislykkedes: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "fejl ved indhentelse af CHV-status fra kort\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "kort er permanent låst!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "%d PIN-forsøg for administrator før kort permanent låses\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Ændr venligst administrator-PIN%%0A[tilbageværende forsøg: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Indtast venligst administrator-PIN'en" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "adgang til administratorkommandoer er ikke konfigureret\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Nulstillingskode er ikke eller ikke mere tilgængelig\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Indtast venligst nulstillingskoden for kortet" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Nulstillingskode er for kort; minimumlængde er %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Ny nulstillingskode" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Ny administrator-PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Ny PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "fejl ved indhentelse af ny PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "fejl ved læsning af programdata\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "fejl ved læsning af fingeraftryk DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "nøgle findes allerede\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "eksisterende nøgle vil blive erstattet\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "opretter ny nøgle\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "skriver ny nøgle\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "oprettelsestidsstempel mangler\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSA-modulus mangler eller har ikke størrelsen %d bit\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "RSA offentlig eksponent mangler eller større end %d bit\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "RSA-primtal %s mangler eller har ikke størrelsen %d bit\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "kunne ikke gemme nøglen: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "vent venligst mens nøglen bliver oprettet ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "oprettelse af nøgle mislykkedes\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "nøgleoprettelse færdig (%d sekunder)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "ugyldig struktur for OpenPGP-kort (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "fingeraftryk på kort matcher ikke den anmodte\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "kort understøtter ikke sammendragsalgoritme %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "underskrifter oprettet indtil videre: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "verifikation af administrator-PIN er i øjeblikket forbudt via denne " "kommando\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "kan ikke tilgå %s - ugyldig OpenPGP-kort?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "panser: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "ugyldigt panserhoved: " #: g10/armor.c:459 msgid "armor header: " msgstr "panserhoved: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "ugyldigt clearsig-hoved\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "ukendt panserhoved: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "indlejrede underskrifter i klartekst\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "uventet panser: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "ugyldig striplet undvegen linje: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "ugyldigt radix64-tegn %02x udeladt\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "for tidlig eof (ingen CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "for tidlig eof (i CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "ugyldig udformet CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC-fejl; %06lx - %06lx\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "for tidlig eof (i trailer)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "fejl i trailerlinje\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "ingen gyldige OpenPGP-data fundet.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "ugyldigt panser: linje længere end %d tegn\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "citeret udskrivingstegn i panser - måske på grund af en fejlbehæftet MTA\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP-kort er ikke tilgængeligt: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "OpenPGP-kortnr. %s detekteret\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "kan ikke udføre dette i jobtilstand\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Denne kommando er kun tilgængelig for version 2-kort\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Dit valg? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[ikke indstillet]" #: g10/card-util.c:512 msgid "male" msgstr "mand" #: g10/card-util.c:513 msgid "female" msgstr "kvinde" #: g10/card-util.c:513 msgid "unspecified" msgstr "ikke angivet" #: g10/card-util.c:540 msgid "not forced" msgstr "ikke tvunget" #: g10/card-util.c:540 msgid "forced" msgstr "tvunget" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Fejl: Kun ren ASCII er tilladt i øjeblikket.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Fejl: Tegnet »<« må ikke bruges.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Fejl: Dobbelt mellemrum er ikke tilladt.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Kortholders efternavn: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Kortholders fornavn: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Fejl: Kombineret navn er for langt (begrænsningen er på %d tegn).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "Adresse hvor offentlig nøgle skal hentes: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Fejl: Adresse er for lang (begrænsningen er %d tegn).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "fejl ved allokering af nok hukommelse: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "fejl ved læsning af »%s«: %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "fejl ved skrivning af »%s«: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Loginddata (kontonavn): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Fejl: Loginddata er for lange (begrænsningen er %d tegn).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Private DO-data: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Fejl: Privat DO er for lang (begrænsningen er %d tegn).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Sprogpræferencer: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Fejl: ugyldig længde for præferencestreng.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Fejl: ugyldige tegn i præferencestreng.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Køn ((M)and, Kvinde(F) eller mellemrum): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Fejl: ugyldigt svar.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA-fingeraftryk: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Fejl: Ugyldigt formateret fingeraftryk.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "nøglehandling er ikke mulig: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "ikke et OpenPGP-kort" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "fejl ved indhentelse af aktuel nøgleinformation: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Erstat eksisterende nøgle? (j/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "BEMÆRK: Der er ingen garanti for at kortet understøtter den ønskede\n" " størrelse. Hvis nøgleoprettelsen ikke lykkes, så kontroller\n" " dokumentationen for dit kort for at se hvilke størrelser, der\n" " er tilladt.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Hvilken nøglestørrelse ønsker du for underskriftsnøglen (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Hvilken nøglestørrelse ønsker du for krypteringsnøglen? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Hvilken nøglestørrelse ønsker du for godkendelsesnøglen? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "afrundet op til %u bit\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s nøglestørrelser skal være i intervallet %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "Kortet vil nu blive omkonfigureret til at oprette en nøgle på %u bit\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "fejl ved ændring af størrelsen på nøglen %d til %u bit: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" "Lav sikkerhedskopi et andet sted end på kortet for krypteringsnøglen? (J/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "BEMÆRK: Nøgler er allerede gemt på kortet!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Erstat eksisterende nøgler (j/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Bemærk venligst at fabriksindstillingerne for PIN'erne er\n" " PIN = »%s« Admin-PIN = »%s«\n" "Du bør ændre dem med kommandoen --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Vælg venligst hvilken slags nøgle der skal oprettes:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Underskriftsnøgle\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Krypteringsnøgle\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Godkendelsesnøgle\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Ugyldigt valg.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Vælg venligst hvor nøglen skal gemmes:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "ukendt nøglebeskyttelsessalgoritme\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "hemmelige dele af nøglen er ikke tilgængelige\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "hemmelig nøgle er allerede gemt på et kort\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "fejl ved skrivning af nøgle til kort: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "afslut denne menu" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "vis administratorkommandoer" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "vis denne hjælpetekst" #: g10/card-util.c:1687 msgid "list all available data" msgstr "vis alle tilgængelige data" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "ændr kortholders navn" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "ændr adresse for at indhente nøgle" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "hent nøglen angivet i kortadressen" #: g10/card-util.c:1693 msgid "change the login name" msgstr "ændr logindnavnet" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "ændr sprogpræferencerne" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "ændr kortholders køn" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "ændr et CA-fingeraftryk" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "skift force PIN-flag for underskriften" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "opret nye nøgler" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "menu til at ændre eller fjerne blokering for PIN'en" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "verificer PIN'en og vis alle data" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "fjern blokering for PIN'en med en nulstillingskode" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/card> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Kommandoer kun for administratoren\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Administratorkommandoer er tilladt\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Administratorkommandoer er ikke tilladt\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Ugyldig kommando (prøv »help«)\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "kortlæser er ikke tilgængelig\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" "Indsæt venligst kortet og tryk på retur eller indtast »c« for at afbryde: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "valg af openpgp mislykkedes: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Fjern venligst det aktuelle kort og indsæt det med serielnummeret:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Tryk retur når klar eller indtast »c« for at afbryde: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Indtast ny administrator-PIN: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Indtast ny PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Indtast administrator-PIN: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Indtast PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Gentag denne PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN er ikke korrekt gentaget; prøv igen" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "kan ikke åbne »%s«\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output virker ikke for denne kommando\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "nøglen »%s« blev ikke fundet: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "fejl ved læsning af nøgleblok: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(med mindre du angiver nøglen med fingeraftryk)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "kan ikke udføre dette i jobtilstand uden »--yes«\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Slet denne nøgle fra nøgleringen? (j/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Dette er en hemmelig nøgle! - Slet? (j/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "sletning af nøgleblok mislykkedes: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "information om ejertroværdighed ryddet\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "der er en hemmelig nøgle for offentlig nøgle »%s«!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "brug tilvalget »--delete-secret-keys« for at slette den først.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "fejl ved oprettelse af adgangsfrase: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "kan ikke bruge en symmetrisk ESK-pakke på grund af S2K-tilstanden\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "bruger chiffer %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "»%s« allerede komprimeret\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ADVARSEL: »%s« er en tom fil\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "du kan kun kryptere til RSA-nøgler for 2048 bit eller mindre i tilstanden --" "pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "læser fra »%s«\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "kan ikke bruge IDEA-chifferen for alle nøglerne du krypterer til.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "ADVARSEL: Tvang for symmetrisk chiffer %s (%d) overtræder modtagerens " "præferencer\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "ADVARSEL: Tvang for komprimeringsalgoritme %s (%d) overtræder modtagerens " "præferencer\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "tvang for symmetrisk chiffer %s (%d) overtræder modtagerens præferencer\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "du kan ikke bruge %s i tilstanden %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s krypteret for: »%s«\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s krypterede data\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "krypteret med ukendt algoritme %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ADVARSEL: Besked blev krypteret med en svag nøgle i den symmetriske " "chiffer.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problem ved håndtering af krypteret pakke\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "kørsel via eksternt program er ikke understøttet\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "kan ikke oprette mappe »%s«: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "kald fra eksterne programmer er deaktiveret på grund af usikre rettigheder " "for indstillingsfil\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "denne platform kræver midlertidige filer når der kaldes eksterne programmer\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "kan ikke køre program »%s«: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "kan ikke køre skal »%s«: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "systemfejl under kald af eksternt program: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "unaturlig afslutning på eksternt program\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "kan ikke køre eksternt program\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "kan ikke læse svar fra eksternt program: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "ADVARSEL: kan ikke fjerne midlertidig fil (%s) »%s«: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "ADVARSEL: kan ikke fjerne midlertidig mappe »%s«: %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "eksportunderskrifter som er markeret som kun lokale" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "bruger-id'er for eksportattributter (normalt billed-id'er)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "tilbagekaldsnøgler for eksport markeret som »sensitive«" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "fjern adgangsfrasen fra eksporterede undernøgler" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "fjern nøgledele der ikke kan bruges under eksport" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "fjern så meget som muligt fra nøglen under eksport" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "eksport af hemmelige nøgler er ikke tilladt\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "nøgle %s: ikke beskyttet - udeladt\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "nøgle %s: nøgle i PGP 2.x-stil - udeladt\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "nøgle %s: nøglemateriale på kort - udeladt\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "eksporterer en ubeskyttet undernøgle\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "kunne ikke fjerne beskyttelse på undernøgle: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "ADVARSEL: hemmelig nøgle %s har ikke en simpel SK-kontrolsum\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "ADVARSEL: intet blev eksporteret\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Kommandoer:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[file]|opret en underskrift" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[file]|opret en underskrift i klartekst" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "opret en separat underskrift" #: g10/gpg.c:393 msgid "encrypt data" msgstr "krypter data" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "krypter kun med symmetrisk chiffer" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "afkrypter data (standard)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "godkend en underskrift" #: g10/gpg.c:401 msgid "list keys" msgstr "vis nøgler" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "vis nøgler og underskrifter" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "vis og kontroller nøgleunderskrifter" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "vis nøgler og fingeraftryk" #: g10/gpg.c:406 msgid "list secret keys" msgstr "vis hemmelige nøgler" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "opret et nyt nøglepar" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "fjern nøgler fra den offentlige nøglering" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "fjern nøgler fra den hemmelige nøglering" #: g10/gpg.c:411 msgid "sign a key" msgstr "underskriv en nøgle" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "underskriv en nøgle lokalt" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "underskriv eller rediger en nøgle" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "opret et tilbagekaldscertifikat" #: g10/gpg.c:416 msgid "export keys" msgstr "eksporter nøgler" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "eksporter nøgler til en nøgletjener" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importer nøgler fra en nøgleserver" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "søg efter nøgler på en nøgleserver" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "opdater alle nøgler fra en nøgleserver" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importer/sammenføj nøgler" #: g10/gpg.c:429 msgid "print the card status" msgstr "udskriv kortstatus" #: g10/gpg.c:430 msgid "change data on a card" msgstr "ændr data på et kort" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "ændr et korts PIN" #: g10/gpg.c:440 msgid "update the trust database" msgstr "opdater troværdighedsdatabasen" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [files]|vis beskedsammendrag" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Tilvalg:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "opret ascii-pansrede uddata" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAME|krypter for NAVN" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "brug dette bruger-id til at underskrive eller afkryptere" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|sæt komprimeringsniveauet til N (0 deaktiverer)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "brug kanonisk teksttilstand" #: g10/gpg.c:486 msgid "use as output file" msgstr "brug som uddatafil" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "uddybende" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "lav ingen ændringer" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "spørg før overskrivning" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "brug streng OpenPGP-opførsel" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "opret PGP 2.x-kompatible beskeder" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Se manualsiden for en fuldstændig liste over alle kommandoer og tilvalg)\n" #: g10/gpg.c:576 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" "Eksempler:\n" "\n" " -se -r Mikael [fil] underskriv og krypter for bruger Mikael\n" " --clearsign [fil] lav en ren tekstunderskrift\n" " --detach-sign [fil] lav en separat underskrift\n" " --list-keys [navne] vis nøgler\n" " --fingerprint [navne] vis fingeraftryk\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Rapporter venligst fejl til .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Brug: gpg [flag] [filer] (-h for hjælp)" # Skal alt dette oversættes eller er det tilvalgene? #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Syntaks: gpg [tilvalg] [filer]\n" "Sign, check, encrypt eller decrypt\n" "standardhandling afhænger af inddata\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Understøttede algoritmer:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Pubkey: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Chiffer: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Komprimering: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "brug: gpg [tilvalg] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "kommandoer er i konflikt\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "ingen = tegn fundet i gruppedefinition »%s«\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "ADVARSEL: Usikker ejerskab af hjemmemappe »%s«\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "ADVARSEL: Usikker ejerskab på konfigurationsfil »%s«\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "ADVARSEL: Usikre rettigheder på hjemmemappe »%s«\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "ADVARSEL: Usikre rettigheder på konfigurationsfil »%s«\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "ADVARSEL: Usikkert indelukket mappeejerskab på hjemmemappe »%s«\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "ADVARSEL: Usikkert indelukket mappeejerskab på konfigurationsfil »%s«\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "ADVARSEL: Usikre indelukkede mapperettigheder på hjemmemappe »%s«\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "ADVARSEL: Usikre indelukkede mapperettigheder på konfigurationsfil »%s«\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "ukendt konfigurationspunkt »%s«\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "vis billed-id'er under nøglevisninger" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "vil politikadresser under underskriftvisninger" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "vis alle notationer under underskriftvisninger" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "vis IETF-standardnotationer under underskriftvisninger" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "vis brugerangivne notationer under underskriftvisninger" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "vis foretrukne nøgleserveradresser under underskriftvisninger" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "vis bruger-id-validitet under nøglevisninger" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "vis tilbagekaldte og udløbne bruger-id'er i nøglevisninger" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "vis tilbagekaldte og udløbne undernøgler i nøglevisninger" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "vis nøgleringsnavnet i nøglevisninger" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "vis udløbsdatoer under underskriftvisninger" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "BEMÆRK: Gammel standardfil for tilvalg »%s« blev ignoreret\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "BEMÆRK: Ingen standardfil for tilvalg »%s«\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "tilvalgsfil »%s«: %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "læser tilvalg fra »%s«\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "BEMÆRK: %s er ikke til normal brug!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "»%s« er ikke et gyldigt underskriftudløb\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "»%s« er ikke et gyldigt tegnsæt\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "kunne ikke fortolke nøgleserveradresse\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: ugyldige indstillinger for nøgleserver\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "ugyldige indstillinger for nøgleserver\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: ugyldige importindstillinger\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "ugyldige importindstillinger\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: ugyldige eksportindstillinger\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "ugyldige eksportindstillinger\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: ugyldige listeindstillinger\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "ugyldige listeindstillinger\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "vis billed-id'er under underskriftverificering" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "vis politikadresser under underskriftverificering" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "vis alle notationer under underskriftverificering" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "vis IETF-standardnotationer under underskriftverificering" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "vis brugerangivne notationer under underskriftverificering" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "vis foretrukne nøgleserveradresser under underskriftverificering" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "vis bruger-id-validitet under underskriftverificering" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "vis tilbagekaldte og udløbne bruger-id'er i underskriftverificering" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "vis kun den primære bruger-id i underskriftverificering" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "valider underskrifter med PKA-data" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "hæv troværdigheden for underskrifter med gyldige PKA-data" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: ugyldige verificeringsindstillinger\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "ugyldige verificeringsindstillinger\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "kunne ikke angive kørselssti til %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: ugyldig liste for auto-key-locate\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "ugyldig liste for auto-key-locate\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "ADVARSEL: program kan oprette en kernefil!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "ADVARSEL: %s overskriver %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s ikke tilladt med %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s er meningsløs sammen med %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "BEMÆRK: %s er ikke tilgængelig i denne session\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "vil ikke køre med usikker hukommelse på grund af %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "du kan kun lave frakoblede eller rydde underskrifter i tilstanden --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "du kan ikke underskrive og kryptere på samme tid i tilstanden --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "du skal bruge filer (og ikke en datakanal) når du arbejder med --pgp2 " "aktiveret\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "kryptering af en besked i tilstanden --pgp2 kræver IDEA-chifret\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "valgt chifferalgoritme er ugyldig\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "valgt sammendragsalgoritme er ugyldig\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "valgt komprimeringsalgoritme er ugyldig\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "valgt algoritme for certifikationssammendrag er ugyldig\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed skal være større end 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed skal være større end 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth skal være i intervallet fra 1 til 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "ugyldigt default-cert-level; skal være 0, 1, 2 eller 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "ugyldigt min-cert-level; skal være 1, 2 eller 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "BEMÆRK: simpel S2K-tilstand (0) frarådes på det skarpeste\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ugyldig S2K-tilstand; skal være 0, 1 eller 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "ugyldige standardpræferencer\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "ugyldige præferencer for personlig chiffer\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "ugyldige præferencer for personlig sammendrag\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "ugyldige præferencer for personlig komprimering\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s virker endnu ikke med %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "du må ikke bruge chifferalgoritmen »%s« i tilstanden %s\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "du må ikke bruge sammendragsalgoritmen »%s« i tilstanden %s\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "du må ikke bruge komprimeringsalgoritmen »%s« i tilstanden %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "kunne ikke initialisere TrustDB: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "ADVARSEL: modtagere (-r) angivet uden brug af offentlig nøglekryptering\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [filnavn]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [filnavn]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "symmetrisk kryptering af »%s« mislykkedes: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [filnavn]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [filnavn]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "du kan ikke bruge --symmetric --encrypt med --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "du kan ikke bruge --symmetric --encrypt i tilstanden %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [filnavn]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [filnavn]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [filnavn]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "du kan ikke bruge --symmetric --sign --encrypt med --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "du kan ikke bruge --symmetric --sign --encrypt i tilstanden %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [filnavn]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [filnavn]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [filnavn]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key bruger-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key bruger-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key bruger-id [kommandoer]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [bruger-id] [nøglering]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "nøgleserver send mislykkedes: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "nøgleserver modtag mislykkedes: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "nøgleeksport mislykkedes: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "nøgleserver søg mislykkedes: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "nøgleserver opdater mislykkedes: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "fjernelse af panser mislykkedes: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "påklædning af panser mislykkedes: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "ugyldig hash-algoritme »%s«\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[filnavn]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Gå til sagen og skriv meddelelsen ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "den angivne adresse for certifikatpolitik er ugyldig\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "den angivne adresse for underskriftpolitik er ugyldig\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "den angivne adresse for foretrukken nøgleserver er ugyldig\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "for mange punkter i pk-mellemlager - deaktiveret\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[Bruger-id blev ikke fundet]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "nøgle %s: hemmelig nøgle uden offentlig nøgle - udeladt\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "hentede automatisk »%s« via %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Ugyldig nøgle %s gjort gyldig med --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "ingen hemmelig undernøgle for offentlig undernøgle %s - ignorerer\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "bruger undernøgle %s i stedet for primær nøgle %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "vær mindre uddybende" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "tag nøglerne fra denne nøglering" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "giv kun tidsstempelkonflikter en advarsel" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|skriv statusinformation til denne FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Brug: gpgv [tilvalg] [filer] (-h for hjælp)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Syntaks: gpgv [tilvalg] [filer]\n" "Kontroller underskrifter mod kendte troværdige nøgler\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Det er op til dig at tildele en værdi her; denne værdi vil aldrig blive\n" "eksporteret til tredjepart. Vi har brug for at implementere web-of-trust;\n" "det har intet at gøre med (oprettet underforstået) web-of-certificates." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "For at bygge Web-of-Trust, skal GnuPG vide hvilke nøgler der\n" "stoles fuldt ud på - det er normalt de nøgler, som du har adgang\n" "til via den hemmelige nøgle. Svar »Yes« for at sætte denne nøgle\n" "til fuldt ud troværdig\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Hvis du alligevel ønsker at bruge denne utroværdige nøgle, så svar »yes«." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Indtast bruger-id'et for adressen til dem du ønsker at sende beskeden." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Vælg algoritme.\n" "\n" "DSA (aka DSS) er Digital Signature Algorithm og kan kun bruges for\n" "underskrifter.\n" "\n" "Elgamal er en krypter kun algoritme.\n" "\n" "RSA kan bruges for underskrifter eller kryptering.\n" "\n" "Den første (primære) nøgle skal altid være en nøgle, som kan underskrive." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Det er generelt en god ide at bruge den samme nøgle for underskrift\n" "og kryptering. Denne algoritme bør kun bruges i bestemte domæner.\n" "Konsulter din sikkerhedsekspert først." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Indtast størrelsen for nøglen" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Svar »yes« eller »no«" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Indtast den krævede værdi som vist i prompten.\n" "Det er muligt at indtaste en ISO-dato (ÅÅÅÅ-MM-DD), men du\n" "får ikke et godt fejlsvar - i stedet for forsøger systemet at\n" "fortolke den givne værdi som et interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Indtast navnet for nøgleindehaveren" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "indtast venligst en valgfri men stærkt anbefalet e-post-adresse" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Indtast venligst en valgfri kommentar" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N for at ændre navnet.\n" "C for at ændre kommentaren.\n" "E for at ændre e-post-adressen.\n" "O for at fortsætte med nøgleoprettelse.\n" "Q for at afslutte nøgleoprettelsen." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Svar »yes« (eller bare »y«) hvis det er okay at oprette undernøglen." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Når du underskriver et bruger-id på en nøgle, så skal du først verificere\n" "at nøglen tilhører personen navngivet i bruger-id'et. Det er nyttigt for " "andre,\n" "at de ved hvor omhyggeligt, du har verificeret dette.\n" "\n" "»0« betyder at du ikke gjorde noget specielt for for at verificere denne " "nøgle\n" "\n" "»1« betyder at du tror at nøglen er ejet af den person, som hævder at eje " "den\n" " men du kunne ikke, eller verificerede ikke nøglen overhovedet. Dette er\n" " nyttigt for en »persona«-verifikation, hvor du underskriver nøglen for " "en\n" " pseudonymous bruger.\n" "\n" "»2« betyder at du udførte lemfældig verifikation af nøglen. For eksempel " "kan\n" " dette betyde, at du verificerede fingeraftrykket for nøglen og " "kontrollerede\n" " bruger-id'et på nøglen mod et billed-id.\n" "\n" "»3« betyder at du udførte omfattende verifikation af nøglen. For eksempel, " "kan\n" " dette betyde, at du verificerede fingeraftrykket for nøglen med ejeren " "af\n" " nøglen personligt, og at du kontrollerede, via et dokument der er svært " "at\n" " forfalske med et billed-id (såsom et pas) at navnet for nøgleejeren " "matcher\n" " navnet i bruger-id'et på nøglen, og endelig at du verificerede (med " "udveksling\n" " af e-post) at e-post-adressen på nøglen tilhører nøgleejeren.\n" "\n" "Bemærk at eksemplerne angivet ovenfor for niveau 2 og 3 kun er eksempler.\n" "Det er op til dig at beslutte hvad »vilkårlig« og »omfattende« betyder, når\n" "du underskriver andre nøgler.\n" "\n" "Hvis du ikke kender det korrekte svar, så svar »0«." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Svar »yes« hvis du ønsker at underskrive ALLE bruger-id'erne" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Svar »yes« hvis du virkelig ønsker at slette denne bruger-id.\n" "Alle certifikater går så også tabt!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Svar »ja« hvis det er okay at slette undernøglen" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Dette er en gyldig underskrift på nøglen; du vil normalt ikke\n" "slette denne underskrift, da det kan være vigtigt at\n" "etablere en sikker forbindelse til nøglen eller en anden nøgle\n" "certificeret af denne nøgle." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Denne underskrift kan ikke kontrolleres, da du ikke har den\n" "tilsvarende nøgle. Du bør udsætte dets sletning indtil du\n" "ved hvilken nøgle, der blev brugt, da denne underskriftsnøgle\n" "kan etablere en troværdighedsforbindelse via en anden allerede\n" "certificeret nøgle." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Underskriften er ikke gyldig. Det giver mening at fjerne den fra\n" "din nøglering." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Dette er en underskrift, som binder bruger-id'et til nøglen.\n" "Det er normalt ikke en god ide at fjerne sådan en underskrift.\n" "Faktisk kan GnuPG måske ikke bruge denne nøgle igen. Så gør\n" "kun dette hvis denne egenunderskrift er for en ugyldig årsag\n" "og en anden er tilgængelig." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Ændr præferencerne for alle bruger-id'er (eller kun de valgte)\n" "til den aktuelle præferenceliste. Tidsstemplet for alle påvirkede\n" "egenunderskrifter vil blive fremrykket med et sekund.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Indtast venligst adgangsfrasen; dette er en hemmelig sætning \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Gentag venligst den sidste adgangsfrase, så du er sikker på det indtastede." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Angiv navnet på filen som underskriften gælder for" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Svar »yes« hvis det er okay at overskrive filen" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Indtast et nyt filnavn. Hvis du bare taster RETUR, så vil\n" "standardfilen (som vises i parenteser) blive brugt." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Du skal angive en årsag for certifikationen. Afhængig af konteksten\n" "har du mulighed for at vælge fra denne liste:\n" " »Nøgle er blevet komprimeret«\n" " Brug denne hvis du har en grund til at tro, at uautoriserede personer\n" " har fået adgang til din hemmelige nøgle.\n" " »Nøgle er afløst«\n" " Brug denne hvis du har erstattet denne nøgle med en nyere.\n" " »Nøgle er ikke længere i anvendelse«\n" " Brug denne hvis du har tilbagetrukket denne nøgle.\n" " »Bruger-id er ikke længere gyldig«\n" " Brug denne for at angive at bruger-id'et ikke længere skal bruges;\n" " Denne bruges normalt til at markere en e-post-adresse som ugyldig.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Hvis du ønsker det, så kan du indtaste en tekst, der beskriver\n" "hvorfor du udsteder dette tilbagekaldscertifikat. Hold teksten\n" "kort og præcis. En tom linje afslutter teksten.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Ingen hjælp tilgængelig" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Ingen hjælp tilgængelig for »%s«" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "importer underskrifter som er markeret som local-only" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "reparer skade fra pks-nøgleserveren under import" #: g10/import.c:104 #, fuzzy #| msgid "do not update the trustdb after import" msgid "do not clear the ownertrust values during import" msgstr "opdater ikke trustdb efter import" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "opdater ikke trustdb efter import" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "opret en offentlig nøgle under import af en hemmelig nøgle" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "accepter kun opdateringer til eksisterende nøgler" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "fjern ubrugelige dele fra nøgle efter import" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "fjern så meget som muligt fra nøgle efter import" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr " udelader bloktype %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr " %lu-nøgler behandlet\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr " Totalt antal behandl.: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " udeladte nye nøgler: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " w/o bruger-id'er: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importerede: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " uændrede: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nye bruger-id'er: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nye undernøgler: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nye underskrifter: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " nye nøgletilbagekald: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " hemmelige nøgler læst: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " hemmel. nøgler import: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "hemmel. nøgler uændret: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " ikke importerede: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " underskrifter ryddet: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " bruger-id'er ryddet: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "ADVARSEL: nøgle %s indeholder præferencer for utilgængelige\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algoritmer på disse bruger-id'er:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " »%s«: præference for chifferalgoritme %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " »%s«: præference for sammendragsalgortime %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " »%s«: præference for komprimeringsalgortime %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "det anbefales på det stærkeste, at du opdaterer dine præferencer og\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "gendistribuerer denne nøgle for at undgå potentielle problemer med rod i\n" "algoritmen\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "du kan opdatere dine præferencer med: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "nøgle %s: ingen bruger-id\n" #: g10/import.c:819 #, fuzzy, c-format #| msgid "skipped \"%s\": %s\n" msgid "key %s: %s\n" msgstr "udelod »%s«: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "nøgle %s: korruption af PKS-undernøgle er repareret!\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "nøgle %s: accepteret ikke egenunderskrevet bruger-id »%s«\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "nøgle %s: ingen gyldige bruger-id'er\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "dette kan skyldes en manglende egenunderskrift\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "nøgle %s: offentlig nøgle blev ikke fundet: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "nøgle %s: ny nøgle - udeladt\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "ingen skrivbar nøglering fundet: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "skriver til »%s«\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "fejl ved skrivning af nøglering »%s«: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "nøgle %s: offentlig nøgle »%s« importeret\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "nøgle %s: stemmer ikke med vores kopi\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "nøgle %s: kan ikke lokalisere original nøgleblok: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "nøgle %s: kan ikke læse original nøgleblok: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nøgle %s: »%s« 1 ny bruger-id\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "nøgle %s: »%s« %d nye bruger-id'er\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "nøgle %s: »%s« 1 ny underskrift\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "nøgle %s: »%s« %d nye underskrifter\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "nøgle %s: »%s« 1 ny undernøgle\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "nøgle %s: »%s« %d nye undernøgler\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "nøgle %s: »%s« %d underskrift renset\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "nøgle %s: »%s« %d underskrifter renset\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "nøgle %s: »%s« %d bruger-id renset\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "nøgle %s: »%s« %d bruger-id'er renset\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "nøgle %s: »%s« ikke ændret\n" #: g10/import.c:1211 #, fuzzy, c-format #| msgid "secret key \"%s\" not found: %s\n" msgid "secret key %s: %s\n" msgstr "hemmelig nøgle »%s« blev ikke fundet: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "import af hemmelige nøgler er ikke tilladt\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "nøgle %s: hemmelig nøgle med ugyldig chiffer %d - udeladt\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "ingen hemmelig standardnøglering: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "nøgle %s: hemmelig nøgle importeret\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "nøgle %s: allerede i hemmelig nøglering\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "nøgle %s: hemmelig nøgle blev ikke fundet: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "nøgle %s: ingen offentlig nøgle - kan ikke anvende tilbagekaldscertifikat\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nøgle %s: ugyldigt tilbagekaldscertifikat: %s - afvist\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "nøgle %s: »%s« tilbagekaldscertifikat importeret\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "nøgle %s: ingen bruger-id for underskrift\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "nøgle %s: ikke understøttet offentlig nøglealgoritme på bruger-id »%s«\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "nøgle %s: ugyldig egenunderskrift på bruger-id »%s«\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "nøgle %s: ikke understøttet offentlig nøglealgoritme\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "nøgle %s: ugyldig direkte nøgleunderskrift\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "nøgle %s: ingen undernøgle for nøglebinding\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "nøgle %s: ugyldig undernøglebinding\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "nøgle %s: fjernet flerundernøglebinding\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "nøgle %s: ingen undernøgle for nøgletilbagekald\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "nøgle %s: ugyldig undernøgletilbagekald\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "nøgle %s: fjernet flerundernøgletilbagekald\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "nøgle %s: udeladt bruger-id »%s«\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "nøgle %s: udeladt undernøgle\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "" "nøgle %s: underskrift der ikke kan eksporteres (klasse 0x%02X) - udeladt\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "nøgle %s: tilbagekaldscertifikat på forkert sted - udeladt\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "nøgle %s: ugyldigt tilbagekaldscertifikat: %s - udeladt\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "nøgle %s: undernøgleunderskrift på forkert sted - udeladt\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "nøgle %s: uventet underskriftklasse (0x%02X) - udeladt\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "nøgle %s: duplikeret bruger-id detekteret - sammenføjet\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "ADVARSEL: nøgle %s kan tilbagekaldes: henter tilbagekaldsnøgle %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "ADVARSEL: nøgle %s kan tilbagekaldes: tilbagekaldsnøgle %s er ikke til " "stede.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "nøgle %s: »%s« tilbagekaldscertifikat tilføjet\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "nøgle %s: direkte nøgleunderskrift tilføjet\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "BEMÆRK: en nøgles S/N matcher ikke kortets\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "BEMÆRK: primær nøgle er på nettet og lagret på kort\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "BEMÆRK: sekundær nøgle er på nettet og lagret på kort\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "fejl ved oprettelse af nøglering »%s«: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "nøglering »%s« oprettet\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "nøgleblokressource »%s«: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "kunne ikke genbygge nøgleringsmellemlager: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[tilbagekald]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[egenunderskrift]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 ugyldig underskrift\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d ugyldige underskrifter\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 underskrift er ikke kontrolleret på grund af en manglende nøgle\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d underskrifter er ikke kontrolleret på grund af manglende nøgler\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 underskrift er ikke kontrolleret på grund af en fejl\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d underskrifter er ikke kontrolleret på grund af fejl\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 bruger-id uden gyldig egenunderskrift detekteret\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d bruger-id'er uden gyldige egenunderskrifter detekteret\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Beslut dig for hvor meget du stoler på at denne bruger korrekt verificerer " "andre brugers nøgler\n" "(ved at kigge på pas, kontrollere fingeraftryk fra andre kilder etc.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Marginal troværdighed\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Fuld troværdighed\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Indtast venligst dybden på denne troværdighedsunderskrift.\n" "En dybde større end 1 giver nøglen du underskriver mulighed for\n" "at lavet troværdighedsunderskrifter på dine vegne.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Indtast venligst et domæne for at begrænse denne underskrift, eller retur " "for ingen.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Bruger-id »%s« er tilbagekaldt." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Er du sikker på, at du stadig vil underskrive (j/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Kunne ikke underskrive.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Bruger-id »%s« er udløbet." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Bruger-id »%s« er ikke egenunderskrevet." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "Bruger-id »%s« kan underskrives. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Underskriv? (j/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Egenunderskriften på »%s«\n" "er en underskrift i PGP 2.x-stil.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Ønsker du at forfremme den til en OpenPGP-egenunderskrift? (j/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Din aktuelle underskrift på »%s«\n" "er udløbet.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Ønsker du at udstede en ny underskrift for at erstatte den udløbne? (j/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Din aktuelle underskrift på »%s«\n" "er en lokal underskrift.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Ønsker du at forfremme den til en fuld underskrift, der kan eksporteres (j/" "N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "»%s« var allerede underskrevet lokalt af nøgle %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "»%s« var allerede underskrevet af nøgle %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Ønsker du at underskrive den igen alligevel? (j/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Intet at underskrive med nøgle %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Denne nøgle er udløbet!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Denne nøgle er ved at udløbe på %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Ønsker du at dine underskrifter skal udløbe på samme tidspunkt? (J/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Du kan ikke lave en OpenPGP-underskrift på en PGP 2.x-nøgle i tilstanden --" "pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Dette vil gøre nøglen ubrugelig i PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Hvor omhyggeligt har du verificeret, at nøglen du er ved at underskrive " "rent\n" "faktisk tilhører personen navngivet ovenfor? Hvis du ikke kender svaret, så " "indtast »0«.\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Jeg vil ikke svare.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Jeg har ingen kontrol udført.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Jeg har udført en overfladisk kontrol.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Jeg har foretaget en meget omhyggelig kontrol.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Dit valg? (indtast »?« for yderligere information): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Er du sikker på, at du ønsker at underskrive denne nøgle\n" "med din nøgle »%s« (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Dette vil være en egenunderskrift.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "ADVARSEL: Underskriften vil ikke blive markeret som ikke at kunne " "eksporteres.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "ADVARSEL: Underskriften vil ikke blive markereret som ikke at kunne " "tilbagekaldes.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Underskriften vil blive markeret som ikke at kunne eksporteres.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Underskriften vil blive markeret som ikke at kunne tilbagekaldes.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Jeg har overhovedet ikke kontrolleret denne nøgle.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Jeg har overfladisk kontrolleret denne nøgle.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Jeg har omhyggeligt kontrolleret denne nøgle.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Underskriv? (j/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "underskrift mislykkedes: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "Nøgle har kun stump eller ikkekort nøgleposter - ingen adgangsfrase at " "ændre.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Denne nøgle er ikke beskyttet.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Hemmelige dele for primær nøgle er ikke tilgængelige.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Hemmelige dele for primær nøgle gemmes på kortet.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Nøglen er beskyttet.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Kan ikke redigere denne nøgle: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "Indtast den nye adgangsfrase for denne hemmelige nøgle.\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "adgangsfrasen er ikke korrekt gentaget; prøv igen" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Du ønsker ikke en adgangsfrase - dette er en *dårlig* ide!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Vil du virkelig gerne gøre dette? (j/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "flytter en nøgleunderskrift til det korrekte sted\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "gem og afslut" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "vis nøglefingeraftryk" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "vis nøgle og bruger-id'er" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "vælg bruger-id N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "vælg undernøgle N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "kontroller underskrifter" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "underskriv valgte bruger-id'er [* se nedenfor for relaterede kommandoer]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "underskriv valgte bruger-id'er lokalt" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "underskriv valgte bruger-id'er med en troværdighedsunderskrift" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "underskriv bruger-id'er md en underskrift der ikke kan kaldes tilbage" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "tilføj bruger-id" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "tilføj billed-id" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "slet valgte bruger-id'er" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "tilføj en undernøgle" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "tilføj en nøgle til et smartkort" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "flyt en nøgle til et smartkort" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "flyt en sikkerhedskopinøgle til et smartkort" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "slet valgte undernøgler" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "tilføj en tilbagekaldsnøgle" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "slet underskrifter fra de valgte bruger-id'er" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "ændr udløbsdatoen for nøglen eller valgte undernøgler" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "marker den valgte bruger-id som primær" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "skift mellem hemmelig og offentlig nøglevisning" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "vis præferencer (ekspert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "vis præferencer (uddybende)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "angiv præferenceliste for de valgte bruger-id'er" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "angiv den foretrukne nøgleserveradresse for de valgte bruger-id'er" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "angiv en notation for de valgte bruger-id'er" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "ændr adgangsfrasen" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "ændr ejertroværdigheden" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "tilbagekald underskrifter på de valgte bruger-id'er" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "tilbagekald valgte bruger-id'er" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "tilbagekald nøgle eller valgte undernøgler" #: g10/keyedit.c:1439 msgid "enable key" msgstr "aktiver nøgle" #: g10/keyedit.c:1440 msgid "disable key" msgstr "deaktiver nøgle" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "vis valgte billed-id'er" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "komprimer ubrugelige bruger-id'er og fjern ubrugelige underskrifter fra nøgle" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" "komprimer ubrugelige bruger-id'er og fjern alle underskrifter fra nøgle" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "fejl ved læsning af hemmelig nøgleblok »%s«: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Hemmelig nøgle er tilgængelig.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Har brug for den hemmelige nøgle for dette.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Brug venligst kommandoen »toggle« først.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* Kommandoen »sign« kan have præfikset »l« for lokale underskrifter " "(lsign),\n" " et »t« for troværdighedsunderskrifter (tsign), et »nr« for underskrifter\n" " der ikke kan tilbagekaldes (nrsign), eller en kombination (ltsign, " "tnrsign\n" " etc.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Nøglen er tilbagekaldt." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Vil du gerne underskrive alle bruger-id'er (j/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Fif: Vælg bruger-id'erne at underskrive\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Ukendt underskrifttype »%s«\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Denne kommando er ikke tilladt i tilstanden %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Du skal vælge mindst et bruger-id.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Du kan ikke slette det sidste bruger-id!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Vil du virkelig fjerne alle valgte bruger-id'er? (j/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Vil du virkelig fjerne denne bruger-id? (j/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Vil du virkelig flytte den primære nøgle? (j/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Du skal vælge præcis en nøgle.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Kommando forventer en filnavnsparameter\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Kan ikke åbne »%s«: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Fejl ved læsning af sikkerhedskopinøgle fra »%s«: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Du skal vælge mindst en nøgle.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Vil du virkelig slette de valgte nøgler? (j/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Vil du virkelig slette denne nøgle? (j/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Vil du virkelig tilbagekalde alle valgte bruger-id'er? (j/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Vil du virkelig tilbagekalde dette bruger-id? (j/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Vil du virkelig tilbagekalde hele nøglen? (j/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Vil du virkelig tilbagekalde de valgte undernøgler? (j/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Vil du virkelig tilbagekalde denne undernøgle? (j/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Ejertroværdighed kan ikke indstilles, når der bruges en brugerleveret " "troværdighedsdatabase\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Angiv præferenceliste til:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Opdater præferencerne for de valgte bruger-id'er (j/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Opdater præferencerne? (j/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Gem ændringer? (j/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Afslut uden at gemme? (j/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "opdatering mislykkedes: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "opdatering af hemmelighed mislykkedes: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Nøgle ikke ændret så ingen opdatering krævet.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Sammendrag: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Funktioner: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Nøgleserver no-modify" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Fortrukken nøgleserver: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notationer: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Der er ingen præferencer på et bruger-id i PGP 2.x-stil.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Denne nøgle blev tilbagekaldt den %s af %s nøgle %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Denne nøgle er tilbagekaldt af %s nøgle %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(sensitiv)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "oprettet: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "tilbagekaldt: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "udløbet: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "udløber: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "brug: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "troværdighed: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "validitet: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Denne nøgle er blevet deaktiveret" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "kortnr.: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Bemærk venligst at den viste nøglevaliditet ikke nødvendigvis er\n" "korrekt med mindre du genstarter programmet.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "tilbagekaldt" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "udløbet" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "ADVARSEL: Intet bruger-id er blevet markeret som primær. Denne kommando\n" " kan medføre at et anden bruger-id bliver den formodede primære.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Du kan ikke ændre udløbsdatoen for en v3-nøgle\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "ADVARSEL: Dette er en nøgle i PGP2-stil. Tilføjelse af et billed-id kan " "medføre at\n" " nogle version af PGP afviser denne nøgle.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Er du sikker på, at du stadig ønsker at tilføje den? (j/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Du må ikke tilføje et billed-id til en nøgle i PGP2-stil.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Slet denne gode underskrift? (j/N/a)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Slet denne ugyldige underskrift? (j/N/a)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Slet denne ukendte underskrift? (j/n/a)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Virkelig slette denne egenunderskrift? (j/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Slettede %d underskrift.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Slettede %d underskrifter.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Intet slettet.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "ugyldig" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Bruger-id »%s« komprimeret: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Bruger-id »%s«: %d underskrift fjernet\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Bruger-id »%s«: %d underskrifter fjernet\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Bruger-id »%s«: allerede minimeret\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "Bruger-id »%s«: allerede ryddet\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "ADVARSEL: Dette er en nøgle i PGP 2.x-stil. Tilføjelse af en dedikeret " "tilbagekalder\n" " kan medføre at nogle versioner af PGP afviser denne nøgle.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" "Du må ikke tilføje en dedikeret tilbagekalder til en nøgle i PGP 2.x-stil.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Indtast bruger'id for den dedikerede tilbagekalder: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "kan ikke udpege en nøgle i PGP 2.x-stil som dedikeret tilbagekalder\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "du kan ikke udpege en nøgle som dets egen dedikerede tilbagekalder\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "denne nøgle er allerede blevet dedikeret som en tilbagekalder\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "ADVARSEL: Udpegning af en nøgle som en dedikeret tilbagekalder kan ikke " "fortrydes!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Er du sikker på, at du ønsker at udpege denne nøgle som en dedikeret " "tilbagekalder? (j/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Fjern venligst markeringer fra de hemmelige nøgler.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Vælg venligst højst en undernøgle.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Ændrer udløbstidspunkt for en undernøgle.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Ændrer udløbstidspunkt for den primære nøgle.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Du kan ikke ændre udløbsdatoen for en v3-nøgle\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Ingen tilsvarende underskrift i hemmelig ring\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "underskriftsundernøgle %s er allerede krydscertificeret\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" "undernøgle %s underskriver ikke og skal derfor ikke være krydscertificeret\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Vælg venligst præcis et bruger-id.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "udelader v3 egenunderskrift på bruger-id »%s«\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Indtast din foretrukne nøglerserveradresse: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Er du sikker på, at du ønsker at erstatte den? (j/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Er du sikker på, at du ønsker at slette den? (j/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Indtast notationen: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Fortsæt? (j/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Ingen bruger-id med indeks %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Ingen bruger-id med hash %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Ingen undernøgle med indeks %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "bruger-id: »%s«\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "underskrevet af din nøgle %s den %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (kan ikke eksporteres)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Denne underskrift udløb den %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Er du sikker på, at du ønsker at tilbagekalde den? (j/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Opret et tilbagekaldscertifikat for denne underskrift? (j/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Ikke underskrevet af dig.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Du har underskrevet disse bruger-id'er på nøgle %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (kan ikke tilbagekaldes)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "tilbagekaldt af din nøgle %s på %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Du er i gang med at tilbagekalde disse underskrifter:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Opret tilbagekaldscertifikaterne? (j/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "ingen hemmelig nøgle\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "bruger-id »%s« er allerede tilbagekaldt\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "ADVARSEL: En bruger-id-underskrift er dateret %d sekunder inde i fremtiden\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Nøgle %s er allerede tilbagekaldt.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Undernøgle %s er allerede tilbagekaldt.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Viser %s billed'id med størrelse %ld for nøgle %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "præference »%s« duplikeret\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "for mange chifferpræferencer\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "for mange sammendragpræferencer\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "for mange komprimeringspræferencer\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "ugyldigt punkt »%s« i præferencestreng\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "skriver direkte underskrift\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "skriver egenunderskrift\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "skriver underskrift for nøglebinding\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "nøglestørrelse er ugyldig; bruger %u bit\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "nøglestørrelse afrundet op til %u bit\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Underskriv" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certificer" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Krypter" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Godkend" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "UuKkGfAa" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Mulige handligner for en %s-nøgle: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Aktuelt tilladte handlinger: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Skift evnen til at underskrive\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Skift evnen til at kryptere\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Skift evnen til at godkende\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Afsluttet\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Vælg venligst hvilken slags nøgle du vil have:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA og RSA (standard)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA og Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (kun underskriv)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (kun underskriv)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (kun krypter)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (kun krypter)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (angiv dine egne evner)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (angiv dine egne evner)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s nøgler kan være mellem %u og %u bit lange.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Hvilken nøglestørrelse ønsker du for undernøglen? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Hvilken nøglestørrelse ønsker du? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Ønsket nøglestørrelse er %u bit\n" #: g10/keygen.c:1722 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 "" "Angiv i hvor lang tid nøglen skal være gyldig.\n" " 0 = nøgle udløber ikke\n" " = nøgle udløber om n dage\n" " w = nøgle udløber om n uger\n" " m = nøgle udløber om n måneder\n" " y = nøgle udløber om n år\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Angiv i hvor lang tid underskriften skal være gyldig.\n" " 0 = underskriften udløber ikke\n" " = underskriften udløber om n dage\n" " w = underskriften udløber om n uger\n" " m = underskriften udløber om n måneder\n" " y = underskriften udløber om n år\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Nøgle er gyldig for? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Underskrift er gyldig for? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "ugyldig værdi\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Nøglen udløber aldrig\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Underskriften udløber aldrig\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Nøglen udløber den %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Underskriften udløber den %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Dit system kan ikke vise datoer efter 2038.\n" "Det vil dog blive korrekt håndteret op til 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Er dette korrekt? (j/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Du skal bruge et bruger-id for at identificere din nøgle; programmet " "konstruerer bruger-id'et\n" "fra fødselsnavn, kommentar og e-post-adresse i dette format:\n" " »Heinrich Heine (digteren) «\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Fødselsnavn: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Ugyldige bogstaver i navn\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Navn må ikke starte med et tal\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Navn skal være mindst 5 bogstaver langt\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "E-post-adresse: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Ikke en gyldig e-post-adresse\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Kommentar: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Ugyldigt tegn i kommentar\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Du bruger tegnsættet »%s«.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Du valgte denne BRUGER-ID:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Placer ikke e-post-adressen i fødselsnavnet eller kommentaren\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Ændr (N)avn, (K)ommentar, (E)-post eller afslut(Q)? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Ændr (N)avn, (K)ommentar, (E)post eller (O)kay/afslut(Q)? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Ret venligst fejlen først\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Du skal bruge en adgangsfrase til at beskytte din hemmelige nøgle.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Du ønsker ikke en adgangsfrase - dette er en *dårlig* ide!\n" "Jeg giver dig en alligevel. Du kan ændre din adgangsfrase på\n" "ethvert tidspunkt ved at bruge dette program med tilvalget\n" "»--edit-key«.\n" #: g10/keygen.c:2034 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 "" "Vi skal oprette en masse tilfældige byte. Det er en god ide at udføre\n" "nogle andre handlinger (tryk på tastaturet, flyt musen, brug diskene)\n" "under oprettelse af primtallet; dette giver det vilkårlig\n" "taloprettelsesprogram en bedre mulighed for at opnå nok entropi.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Nøgleoprettelse annulleret.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "skriver offentlig nøgle til »%s«\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "skriver hemmelig nøglestump til »%s«\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "skriver hemmelig nøgle til »%s«\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "ingen skrivbar offentlig nøglering fundet: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "ingen skrivbar hemmelig nøglering fundet: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "fejl ved skrivning af offentlig nøglering »%s«: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "fejl ved skrivning af hemmelig nøglering »%s«: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "offentlig og hemmelig nøgle oprettet og underskrevet.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Bemærk at denne nøgle ikke kan bruges til kryptering. Du kan bruge\n" "kommandoen »--edit-key« til at oprette en undernøgle til dette formål.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Nøgleoprettelse mislykkedes: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "nøgle er blevet oprettet %lu sekund i fremtiden (tidsforskydning eller " "urproblem)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "nøgle er blevet oprettet %lu sekunder i fremtiden (tidsforskydning eller " "urproblem)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" "BEMÆRK: Oprettelse af undernøgler for v3-nøgler overholder ikke OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Vil du virkelig oprette? (j/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "lagring af nøgle på kort mislykkedes: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "kan ikke oprette sikkerhedskopifil »%s«: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "BEMÆRK: sikkerhedskopi af kortnøgle gemt på »%s«\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "aldrig " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kritisk underskriftspolitik: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Underskriftspolitik: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Kritisk foretrukken nøgleserver: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kritisk underskriftnotation: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Underskriftsnotation: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Nøglering" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Primær nøglefingeraftryk:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Undernøglefingeraftryk:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "Primær nøglefingeraftryk:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Undernøglefingeraftryk:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Nøglefingeraftryk =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Serielnr. for kort =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "omdøbelse af »%s« til »%s« mislykkedes: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "ADVARSEL: 2 filer med fortrolig information findes.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s er den uændrede\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s er den nye\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Ret venligst denne mulige sikkerhedsrisiko\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "mellemlagrer nøglering »%s«\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu nøgler mellemlagret indtil nu (%lu underskrifter)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu nøgler mellemlagret (%lu underskrifter)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: nøglering oprettet\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "inkluder tilbagekaldte nøgler i søgeresultater" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "inkluder undernøgler når der søges efter nøgle-id" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "brug midlertidige filer til at sende data til nøgleserverhjælpere" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "slet ikke midlertidige filer efter at de er blevet brugt" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "hent automatisk nøgler når der verificeres underskrifter" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "overhold den foretrukne nøglerserveradresse angivet på nøglen" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "overhold PKA-posten angivet på en nøgle når der hentes nøgler" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "ADVARSEL: nøgleserverindstilling »%s« bruges ikke på denne platform\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "deaktiveret" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Indtal tal, N)æste eller Q) for Afslut > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "ugyldig nøgleserverprotokol (os %d!=håndtag %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "nøgle »%s« blev ikke fundet på nøgleserver\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "nøgle blev ikke fundet på nøgleserver\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "anmoder om nøgle %s fra %s server %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "anmoder om nøgle %s fra %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "søger efter navne fra %s server %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "søger efter navne fra %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "sender nøgle %s til %s server %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "sender nøgle %s til %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "søger efter »%s« fra %s server %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "søger efter »%s« fra %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "ingen nøgleserverhandling!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "ADVARSEL: nøgleserverhåndtering fra en anden version af GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "nøgleserver sendte ikke VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "kommunikationsfejl for nøgleserver: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "ingen kendt nøgleserver (brug tilvalget --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "eksterne nøgleserverkald er ikke understøttet i denne bygning\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "ingen håndtering for nøgleserverskema »%s«\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "handling »%s« er ikke understøttet med nøgleserverskema »%s«\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s understøtter ikke håndteringsversion %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "nøgleserver fik tidsudløb\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "nøgleserver fik intern fejl\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "»%s« er ikke et nøgle-id: udelader\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "ADVARSEL: Kan ikke opdatere nøgle %s via %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "opdaterer 1 nøgle fra %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "opdaterer %d nøgler fra %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "ADVARSEL: kan ikke hente URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "ADVARSEL: kan ikke fortolke URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "underlig størrelse for en krypteret sessionsnøgle (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s krypteret sessionsnøgle\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "adgangsfrase oprettet med ukendt sammendragsalgoritme %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "offentlig nøgle er %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "krypterede data for offentlig nøgle: god DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "krypteret med %u-bit %s nøgle, id %s, oprettet %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " »%s«\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "krypteret med %s nøgle, id %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "afkryptering af offentlig nøgle mislykkedes: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "krypteret med %lu adgangsfraser\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "krypteret med 1 adgangsfrase\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "antager %s krypterede data\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "IDEA-chiffer utilgængelig, forsøger optimistisk at bruge %s i stedet for\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "afkryptering okay\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "ADVARSEL: besked var ikke integritetsbeskyttet\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ADVARSEL: krypteret besked er blevet manipuleret!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "afkryptering mislykkedes: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "BEMÆRK: afsender anmodte om »for-your-eyes-only«\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "oprindeligt filnavn=»%.*s«\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "ADVARSEL: flere klartekster set\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "uafhængig tilbagekald - brug »gpg --import« for at anvende\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "ingen underskrift fundet\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "underskriftverificering undertrykt\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "kan ikke håndtere disse tvetydige underskriftdata\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Underskrift lavet %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " bruger %s nøgle %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Underskrift lavet %s med %s nøgle-id %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Nøgle tilgængelig på: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "UGYLDIG underskrift fra »%s«" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Udløbet underskrift fra »%s«" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "God underskrift fra »%s«" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[usikker]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " også kendt som »%s«" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Underskrift udløbet %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Underskrift udløber %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s underskrift, sammendragsalgoritme %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binær" #: g10/mainproc.c:1947 msgid "textmode" msgstr "tekstilstand" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "ukendt" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Kan ikke kontrollere underskrift: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "ikke en frakoblet underskrift\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "ADVARSEL: flere underskrifter detekteret. Kun den første vil blive " "kontrolleret.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "uafhængig underskrift for klasse 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "gammeldags (PGP 2.x) underskrift\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "ugyldig rodpakke detekteret i proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "kan ikke slå kernedump fra: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat for »%s« mislykkedes i %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) mislykkedes i %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "ADVARSEL: bruger eksperimentel offentlig nøglealgoritme %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "ADVARSEL: Elgamalnøgler for underskriv+krypter er forældede\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "ADVARSEL: bruger eksperimentel chifferalgoritme %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "ADVARSEL: bruger eksperimentel sammendragsalgoritme %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "ADVARSEL: sammendragsalgoritme %s er forældet\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "se venligst %s for yderligere information\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "BEMÆRK: Denne funktion er ikke tilgængelig i %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: forældet indstilling »%s«\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "ADVARSEL: »%s« er en forældet indstilling\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "brug venligst »%s%s« i stedet for\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "ADVARSEL: »%s« er en forældet kommando - brug den ikke\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Ukomprimeret" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "ukomprimeret|ingen" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "denne besked kan nok ikke bruges af %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "tvetydigt tilvalg »%s«\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "ukendt tilvalg »%s«\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Ukendt underskrifttype »%s«\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Filen »%s« findes. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Overskriv? (j/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: ukendt suffiks\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Indtast nyt filnavn" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "skriver til stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "antager underskrevne data i »%s«\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "ny konfigurationsfil »%s« oprettet\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "ADVARSEL: indstillinger i »%s« er endnu ikke aktive under denne kørsel\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "mappe »%s« oprettet\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "kan ikke håndtere offentlig nøglealgoritme %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "ADVARSEL: potentiel usikker symmetrisk krypteret sessionsnøgle\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "underpakke af typen %d har kritiske bitsæt\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent er ikke tilgængelig i denne session\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "forkert udformet GPG_AGENT_INFO-miljøvariabel\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent-protokolversion %d er ikke understøttet\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "kan ikke forbinde til »%s«: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problem med agenten - deaktiverer agentbrug\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (hovednøgle-id %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Du skal bruge en adgangsfrase for at låse den hemmelige\n" "nøgle op for brugeren:\n" "»%.*s«\n" "%u-bit %s nøgle, id %s, oprettet %s%s.\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Gentag adgangsfrase\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Indtast adgangsfrase\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "afbrudt af bruger\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "kan ikke forespørge adgangsfrase i jobtilstand\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Indtast adgangsfrase: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Du skal bruge en adgangsfrase til at åbne den hemmelige\n" "nøgle for bruger: »%s«\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bit %s nøgle, id %s, oprettet %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (undernøgle på hovednøgle-id %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Gentag adgangsfrase: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Vælg et billede til brug for dit billed-id. Billedet skal være en JPEG-fil.\n" "Husk at billedet gemmes i din offentlige nøgle. Hvis du bruger et meget\n" "stort billede, vil din nøgle også blive meget stor!\n" "En billede på 240x288 er en god størrelse.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Indtast JPEG-filnavn for billed-id: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "kan ikke åbne JPEG-fil »%s«: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Denne JPEG er virkelig stor (%d byte) !\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Er du sikker på, at du vil benytte billedet (j/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "»%s« er ikke en JPEG-fil\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Er dette billede korrekt (j/N/a)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "ingen billedfremviser angivet\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "kan ikke vise billed-id!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Ingen årsag angivet" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Nøglen er blevet afløst" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Nøglen er blevet komprimeret" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Nøglen bruges ikke længere" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Bruger-id er ikke længere gyldigt" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "årsag for tilbagekald: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "tilbagekaldskommentar: " # ikke helt klart hvad de her forkortelser står for #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Ingen tillidsværdi tildelt til:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " også kendt som »%s«\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Hvor stor er din tillid til at denne nøgle rent faktisk tilhører den " "navngivne ejer?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Jeg ved det ikke eller vil ikke sige det\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Jeg stoler IKKE på denne nøgle\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Jeg stoler fuldstændig på denne nøgle\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " h = tilbage til hovedmenuen\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = udelad denne nøgle\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " a = afslut\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Minimumstroværdighedsniveau for denne nøgle er: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Dit valg? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Vil du virkelig gerne give denne nøgle ultimativ troværdighed? (j/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certifikater der fører til en ultimativ troværdig nøgle:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: Der er ingen garanti for, at denne nøgle tilhører den navngivne bruger\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Der er begrænset garanti for, at denne nøgle tilhører den navngivne " "bruger\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Denne nøgle tilhører sikkert den navngivne bruger\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Denne nøgle tilhører os\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Det er IKKE sikkert, at nøglen tilhører personen navngivet\n" "i bruger-id'et. Hvis du *virkelig* ved hvad du gør,\n" "så kan du besvare det næste spørgsmål med ja.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Brug denne nøgle alligevel? (j/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "ADVARSEL: Bruger nøgle uden troværdighed!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "ADVARSEL: Denne nøgle kan tilbagekaldes (tilbagekaldsnøgle er ikke til " "stede)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "" "ADVARSEL: Denne nøgle er blevet tilbagekaldt af dens designmæssige " "tilbagekalder!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ADVARSEL: Denne nøgle er blevet tilbagekaldt af dets ejer!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Dette kan betyde at underskriften er forfalsket.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ADVARSEL: Denne undernøgle er blevet tilbagekaldt af dens ejer!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Bemærk: Denne nøgle er blevet deaktiveret.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Bemærk: Verificeret underskriftsejers adresse er »%s«\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Bemærk: Underskriftejers adresse »%s« matcher ikke DNS-post\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" "troværdighedsniveau justeret til FULL på grund af gyldig PKA-information\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" "troværdighedsniveau justeret til NEVER på grund af ugyldig PKA-information\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Bemærk: Denne nøgle er forældet!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "ADVARSEL: Denne nøgle er ikke certificeret med en troværdig underskrift!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Intet tyder på at denne signatur tilhører ejeren.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "ADVARSEL: Vi tror IKKE på denne nøgle!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Signaturen er formentlig FORFALSKET.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ADVARSEL: Denne nøgle er ikke certificeret med tilstrækkelig troværdige " "underskrifter!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Det er ikke sikkert at signaturen tilhører ejeren.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: udelod: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: udelod: offentlig nøgle er allerede til stede\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Du angav ikke et bruger-id. (du kan bruge »-r«)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Aktuelle modtagere:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Indtast bruger-id'et. Slut med en tom linje: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Ingen sådan bruger-id.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "udeladt: offentlig nøgle er allerede valgt som standardmodtager\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Offentlig nøgle er slået fra.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "udelod: offentlig nøgle er allerede angivet\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "ukendt standardmodtager »%s«\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: udelod: offentlig nøgle er slået fra\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "ingen gyldige adresser\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "data ej gemt; brug tilvalg »--output« for at gemme\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "fejl ved oprettelse af »%s«: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Frakoblet underskrift.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Indtast navn for datafil: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "læser stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "ingen underskrevne data\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "kan ikke åbne underskrevne data »%s«\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonym modtager; prøver hemmelig nøgle %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "okay, vi er den anonyme modtager.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "gammel kodning for DEK'en er ikke understøttet\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "chifferalgoritme %d%s er ukendt eller deaktiveret\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "ADVARSEL: chifferalgoritme %s ikke fundet i modtagerpræferencer\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "BEMÆRK: hemmelig nøgle %s udløb den %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "BEMÆRK: nøgle er blevet tilbagekaldt" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet mislykkedes: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "nøgle %s har ingen bruger-id'er\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Tilbagekaldes af:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Dette er en sensitiv tilbagekaldsnøgle)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Opret et designet tilbagekaldscertifikat for denne nøgle? (j/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "ASCII-pansret resultat er tvunget.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet mislykkedes: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Tilbagekaldscertifikat oprettet.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "ingen tilbagekaldsnøgler fundet for »%s«\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "hemmelig nøgle »%s« blev ikke fundet: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "ingen tilsvarende offentlig nøgle: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "offentlig nøgle matcher ikke hemmelig nøgle!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Opret et tilbagekaldscertifikat for denne nøgle? (j/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "ukendt beskyttelsesalgoritme\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "BEMÆRK: Denne nøgle er ikke beskyttet.\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Tilbagekaldscertifikat oprettet.\n" "\n" "Flyt den venligst til et medie som du kan gemme væk; hvis Mallory får\n" "adgang til dette certifikat, kan han bruge den til at gøre din nøgle\n" "ubrugelig. Det er en god ide at udskrive dette certifikat og gemme det\n" "væk, i tilfælde af at dit medie pludselig ikke kan læses. Men vær\n" "forsigtig: Dit udskrivningssystem kan gemme dataene og gøre dem\n" "tilgængelige for andre!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Vælg venligst årsagen for tilbagekaldet:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Afbryd" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Du vil sikkert vælge %d her)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Indtast en valgfri beskrivelse; afslut den med en tom linje:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Årsag for tilbagekald: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Ingen beskrivelse angivet)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Er dette okay? (j/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "hemmelige nøgledele er ikke tilgængelige\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "beskyttelsesalgoritme %d%s er ikke understøttet\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "beskyttelsessammendrag %d er ikke understøttet\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Ugyldig adgangsfrase; prøv igen" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "ADVARSEL: svag nøgle detekteret - vælg venligst adgangsfrase igen.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "opretter den forældede 16-bit-kontrolsum for beskyttelse af hemmelig nøgle\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "svag nøgle oprettet - prøver igen\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "kan ikke undgå svag nøgle for symmetrisk chiffer: prøvede %d gange!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA kræver at hashlængden skal gå op i 8 bit\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA-nøgle %s bruger en usikker (%u bit) hash\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA-nøgle %s kræver en %u bit eller større hash\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "ADVARSEL: konflikt for underskriftssammendrag i besked\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "ADVARSEL: underskriftsundernøgle %s er ikke krydscertificeret\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "ADVARSEL: underskriftsundernøgle %s har en ugyldig krydscertificering\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "offentlig nøgle %s er %lu sekund nyere end underskrift\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "offentlig nøgle %s er %lu sekunder nyere end underskrift\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "nøgle %s blev oprettet %lu sekund inde i fremtiden (tidsforskydning eller et " "problem med uret)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "nøgle %s blev oprettet %lu sekunder inde i fremtiden (tidsforskydning eller " "et problem med uret)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "BEMÆRK: underskriftnøgle %s udløb %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s underskrift, sammendragsalgoritme %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "antager ugyldig underskrift fra nøgle %s på grund af en ukendt kritisk del\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" "nøgle %s: ingen undernøgle til tilbagekaldsunderskrift for undernøgle\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "nøgle %s: ingen undernøgle til bindingsunderskrift for undernøgle\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "ADVARSEL: kan ikke %%-udvide notation (for stor). Bruger uden udvidelse.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "ADVARSEL: kan ikke %%-udvide politikadresse (for stor). Bruger uden " "udvidelse.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "ADVARSEL: kan ikke %%-udvide foretrukken nøgleserveradresse (for stor). " "Bruger uden udvidelse.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "kontrol af oprettet underskrift mislykkedes: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s-underskrift fra: »%s«\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "du kan kun vedhæfteunderskrive med nøgler i PGTP 2.x-stil når i tilstanden --" "pgp2\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "ADVARSEL: tvang af sammendragsalgoritme %s (%d) overtræder " "modtagerpræferencer\n" #: g10/sign.c:960 msgid "signing:" msgstr "underskriver:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "du kan kun clearsign med nøgler i PGP 2.x-stil mens du er i tilstanden --" "pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s-kryptering vil blive brugt\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "nøgle er ikke markeret som usikker - kan ikke bruge den med falsk RNG!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "udelod »%s«: duplikeret\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "udelod »%s«: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "udelod: hemmelig nøgle er allerede til stede\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "dette er en PGP-oprettet Elgamalnøgle som ikke er sikker for underskrifter!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "stol på post %lu, type %d: skrivning mislykkedes: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Liste over tildelte troværdige værdier, oprettede %s\n" "# (Brug »gpg --import-ownertrust« for at gendanne dem)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "fejl i »%s«: %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "linje for lang" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "kolon mangler" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "ugyldig fingeraftryk" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "værdi for ejertroværdighed mangler" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "fejl under forsøg på at finde troværdighedspost i »%s«: %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "læsefejl i »%s«: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: synkronisering mislykkedes: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "kan ikke oprette lås for »%s«\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "kan ikke låse »%s«\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek mislykkedes: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: skrivning mislykkedes (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transaktion for trustdb er for stor\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "kan ikke tilgå »%s«: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: mappe findes ikke!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: kunne ikke oprette versionspost: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: ugyldig trustdb oprettet\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trustdb oprettet\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "BEMÆRK: trustdb ikke skrivbar\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ugyldig trustdb\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: kunne ikke oprette hashtabel: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: fejl ved opdatering af versionspost: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: fejl ved læsning af versionspost: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: fejl ved skrivning af versionspost: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek mislykkedes: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: læsning mislykkedes (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: ikke en trustdb-fil\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versionspost med recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: ugyldig filversion %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: fejl ved læsning af fri post: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: fejl ved skrivning af mappepost: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: mislykkedes med at nulle en post: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: mislykkedes med at vedhæfte en post: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Fejl: trustdb er ødelagt.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "kan ikke håndtere tekstlinjer længere end %d tegn\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "inddatalinje er længere end %d tegn\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "»%s« er ikke et gyldigt nøgle-id\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "nøgle %s: accepteret som troværdig nøgle\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "nøgle %s fremgår mere end en gang i trustdb\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "nøgle %s: ingen offentlig nøgle for troværdig nøgle - udeladt\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "nøgle %s markeret som ultimativ troværdig\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "troværdighedspost %lu, req-type %d: læsning mislykkedes: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "troværdighedspost %lu er ikke af den anmodne type %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "Du kan forsøge at genskabe trustdb med kommandoerne:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Hvis det ikke virker, så se venligst manualen\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "kan ikke bruge ukendt troværdighedsmodel (%d) - antager %s " "troværdighedsmodel\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "bruger %s troværdighedsmodel\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10 oversætter se trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ tilb.]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ udløbet]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ ukendt]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ ej def]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[marginal]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ fuld ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ ultim. ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "ej defineret" #: g10/trustdb.c:554 msgid "never" msgstr "aldrig" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginal" #: g10/trustdb.c:556 msgid "full" msgstr "fuld" #: g10/trustdb.c:557 msgid "ultimate" msgstr "ultimativ" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "intet behov for kontrol af trustdb\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "næste kontrol af trustdb sker den %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "intet behov for kontrol af trustdb med troværdighedsmodellen »%s«\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" "intet behov for en opdatering af trustdb med troværdighedsmodellen »%s«\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "offentlig nøgle %s blev ikke fundet: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "udfør venligst en --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "kontrollerer trustdb\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d nøgler behandlet (%d validiteter ryddet)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "ingen ultimativ troværdige nøgler fundet\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "offentlig nøgle for ultimativ troværdig nøgle %s blev ikke fundet\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "%d marginaler krævet, %d færdiggjorte krævet, %s troværdighedsmodel\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "dybde: %d gyldig: %3d underskrevet: %3d troværdighed: %d-, %dq, %dn, %dm, " "%df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "kan ikke opdatere trustdb-versionspost: skrivning mislykkedes: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "underskriften kunne ikke verificeres.\n" "Husk at underskriftfilen (.sig eller .asc)\n" "skal være den første fil på kommandolinjen.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "inddatalinje %u er for lang eller mangler LF\n" #: util/errors.c:53 msgid "general error" msgstr "generel fejl" #: util/errors.c:54 msgid "unknown packet type" msgstr "ukendt pakketype" #: util/errors.c:55 msgid "unknown version" msgstr "ukendt version" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "ukendt pubkey-algoritme" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "ukendt sammendragsalgoritme" #: util/errors.c:58 msgid "bad public key" msgstr "ugyldig offentlig nøgle" #: util/errors.c:59 msgid "bad secret key" msgstr "ugyldig hemmelig nøgle" #: util/errors.c:60 msgid "bad signature" msgstr "ugyldig underskrift" #: util/errors.c:61 msgid "checksum error" msgstr "kontrolsumfejl" #: util/errors.c:62 msgid "bad passphrase" msgstr "ugyldig adgangsfrase" #: util/errors.c:63 msgid "public key not found" msgstr "offentlig nøgle blev ikke fundet" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "ukendt cifferalgoritme" #: util/errors.c:65 msgid "can't open the keyring" msgstr "kan ikke åbne nøglering" #: util/errors.c:66 msgid "invalid packet" msgstr "ugyldig pakke" #: util/errors.c:67 msgid "invalid armor" msgstr "ugyldigt panser" #: util/errors.c:68 msgid "no such user id" msgstr "intet sådant bruger-id" #: util/errors.c:69 msgid "secret key not available" msgstr "hemmelig nøgle er ikke tilgængelig" #: util/errors.c:70 msgid "wrong secret key used" msgstr "forkert hemmelig nøgle brugt" #: util/errors.c:71 msgid "not supported" msgstr "ikke understøttet" #: util/errors.c:72 msgid "bad key" msgstr "ugyldig nøgle" #: util/errors.c:73 msgid "file read error" msgstr "fillæsefejl" #: util/errors.c:74 msgid "file write error" msgstr "filskrivefejl" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "ukendt komprimeringsalgoritme" #: util/errors.c:76 msgid "file open error" msgstr "fejl under filåbning" #: util/errors.c:77 msgid "file create error" msgstr "fejl under filoprettelse" #: util/errors.c:78 msgid "invalid passphrase" msgstr "ugyldig adgangsfrase" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "ej implementeret pubkey-algoritme" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "ej implementeret chifferalgoritme" #: util/errors.c:81 msgid "unknown signature class" msgstr "ukendt underskriftklasse" #: util/errors.c:82 msgid "trust database error" msgstr "fejl ved troværdighedsdatabasen" #: util/errors.c:83 msgid "bad MPI" msgstr "ugyldig MPI" #: util/errors.c:84 msgid "resource limit" msgstr "ressourcebegrænsning" #: util/errors.c:85 msgid "invalid keyring" msgstr "ugyldig nøglering" #: util/errors.c:86 msgid "bad certificate" msgstr "ugyldigt certifikat" #: util/errors.c:87 msgid "malformed user id" msgstr "forkert udformet bruger-id" #: util/errors.c:88 msgid "file close error" msgstr "fejl under fillukning" #: util/errors.c:89 msgid "file rename error" msgstr "fejl under filomdøbning" #: util/errors.c:90 msgid "file delete error" msgstr "fejl under filsletning" #: util/errors.c:91 msgid "unexpected data" msgstr "uventede data" #: util/errors.c:92 msgid "timestamp conflict" msgstr "tidsstempelkonflikt" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "ubrugelig offentlig nøglealgoritme" #: util/errors.c:94 msgid "file exists" msgstr "filen findes" #: util/errors.c:95 msgid "weak key" msgstr "svag nøgle" #: util/errors.c:96 msgid "invalid argument" msgstr "ugyldig parameter" #: util/errors.c:97 msgid "bad URI" msgstr "ugyldig URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "ej understøttet URI" #: util/errors.c:99 msgid "network error" msgstr "netværksfejl" #: util/errors.c:101 msgid "not encrypted" msgstr "ikke krypteret" #: util/errors.c:102 msgid "not processed" msgstr "ikke behandlet" #: util/errors.c:104 msgid "unusable public key" msgstr "ubrugelig offentlig nøgle" #: util/errors.c:105 msgid "unusable secret key" msgstr "ubrugelig hemmelig nøgle" #: util/errors.c:106 msgid "keyserver error" msgstr "nøgleserverfejl" #: util/errors.c:107 msgid "canceled" msgstr "afbrudt" #: util/errors.c:108 msgid "no card" msgstr "intet kort" #: util/errors.c:109 msgid "no data" msgstr "ingen data" #: util/logger.c:183 msgid "ERROR: " msgstr "FEJL: " #: util/logger.c:186 msgid "WARNING: " msgstr "ADVARSEL: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dette er en fejl (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "du fandt en fejl ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "ja" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "jJ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "n" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "afslut" #: util/miscutil.c:443 msgid "qQ" msgstr "aA" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|okay|ok" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "afbryd|stop" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "ADVARSEL: bruger usikker hukommelse!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "se venligst http://www.gnupg.org/documentation/faqs.html for yderligere " "information\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "handling er ikke mulig uden initialiseret sikker hukommelse\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(du kan have brugt det forkerte program for denne opgave)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "ADVARSEL: Usikker ejerskab på udvidelse »%s«\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "ADVARSEL: Usikre rettigheder på udvidelse »%s«\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "ADVARSEL: Usikkert indelukket mappeejerskab på udvidelse »%s«\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "ADVARSEL: Usikkert indelukket mapperettigheder på udvidelse »%s«\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "chifferudvidelse »%s« er ikke indlæst på grund af usikre rettigheder\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "udvidelsesmodulet for IDEA-chifret er ikke til stede\n" gnupg-1.4.20/po/ca.gmo0000644000175000017500000022126612635457220011363 000000000000004YL(5-55e6n7777778D38.x8I889(9E9b9{9999$9& :,2:_:|:::::]:S;/f;(;.;3;"<*<H<[<u<<<<<"<==5="T=%w=&=!=%=" >#/>'S> {>>>>>??()?$R?w??#???@!@&9@%`@,@4@@@A2AGA'[AAAAAAA" B/BMB-^B(B0BHB /C 9D FDSDAqD/D0D\EqE-E0E.EF/FHF3OF4F-FF.GG G G:G+HIH#eH&H&HHHIIG$I@lI>I+I=JVJ"fJ:JJJJ J/KMKLH8L-L LL8L#M*M"1MTMEM3N;NOOOO$P6PJPjP8QKQeQQQQQQQ%Q!R)R R!R<S=S"XS,{S,S2ST $T(ET nT T*TTTTUU2U"MUpUUUEUoV uV V8V'VcW/|WEW,W#X-CX)qXX~Y'ZZ@[Y[b[ {[1[([[[\$\ B\}c\]/]+^A^W^l^j^^9w_O_5`.7`f`wa;bSbnb!bbbc-cddd e*e+tt=vu0uMu"3v&Vv3}v%vDv,y5Iyyy_y z z z"z 3z?z%Xz~zzz zz zz{${,{4{D{L{[{j{ y{{{{{{{ |'|'E|.m|%|2||}}8}O}d}5y}}};}<~Q~g~&}~~~-~(~ 61R '4T$q=%Ԁ 4Sj&& K4%$$˂ ,8HXj{@ Ãу!D +P/|ӄ%% 1$9^ o}.Å܅-Jbr$&$,2AGXHB,BRpƈ %@Ys'.C(U,~ ̊ ڊ$ ()+ Uv%,&,;K![}%ό% 5 C N \ j#&)֍<\r,ڎ;M3"̏-+7*c!&$אI(r#ˑ#"7 N\|#3ʒ%%$J Ydw" ʓ5$!F4a%*08.A*p+,/X%(-/-,]")ח 2L#i-Iژ$4SrzǙۙ*#: ^jz ݚ $:M6e# -"PjٜDF_EDA17s$ȞF 4U$l##ΟZ?M+%Qiţ:"/]Iפ%;$Z֥('-FtȦ'٦!v#@./#7SȨ/I$d+ɩ27(4`4)ʪ32(/[*19"3:n34.48-m(*ĭ!'.9<h>8S)g!#ׯ 8 Yz,-3Ii (FȲ59Eh.12'd)" ٴ89,W@N G !2?3r5ܷ-D5Az534&[3rI ,+H7t#F14E5a" .Ǽ]P3-)3H|#.% %9Sk$7"p'@%="C`/5; &F-m% 6$B_ s)E(nn '@&<g:%:`>%&&'N?Nn'"$2W:g4 (#(Lu"!>D#xAK]::5U3!Ln!$(*?: W=d> )#,P)o$5xz6G*Cr9)%=@!~FK.3DbS4O0N3M0J5LT?A&Y?-'6!(X7?B|5J*@,k5.17'<rR  -')U #-ARe #* F'g(643D8x; -)W s!="F6V}020c?' A*$l,#! EQn'=#"-+P|"6+DCb $e>?9~2 !2Tg$M %3"Qjt1;M$V{D1 -<T(mF/, .:"i." 6(;_66 '!XIYOLg53,/6I6 !!#4Xn6!3+'G-o" *G S:V,(3AG]6 ., ([  ( 0 3 -  L  Z  e r % 0 % 2 %2 @X   - A #F Bj X . 5 U )u <  1 3.2b4> ), /f<" :Zm ##-%@:,{/+,&X 1D, .;O%4D+ I;S76V5)J'J:r?A?/No@1=1<o#*9%5\[*/ %&1)X#!)+&E8`)5$Z2z)F &g& (5(=:f,+":*WH\G2 Bz ; > 8!)V!R!+!!,")A"k"-"C/wf2Elx63>;`zH(eSrc+,P, \?"DyaEv)lGDj(kg&v1no C9v."t$tT<fKoZY2mYJ'A|"Q2auOu$*b 6Bm+B8ol}b&Zs_Y'^/OU0;XiGZ/w3T)!'7\UdgqLxz]~0.kh+9 BEhWI?]])?q[4V~j5eF; # ,fq8$QgVO&AJP Dry{\mzs PuH7M@w 1S 4R:|np=0N>e[X{M(AcG.=^`p^HN!%7-is!R9 cp#<<~:WdST4>LK@UQI F_b8Ld}`_{% kxK*=FaIVMWy r%3*6 XR nJ55|iN1-:#t @ Cj}[h- Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d bad signatures %d keys processed (%d validity counts cleared) %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s CancelCertificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter JPEG filename for photo ID: Enter an optional description; end it with an empty line: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. Is this photo correct (y/N/q)? It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key available at: Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select the reason for the revocation: Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Reason for revocation: %s Repeat passphrase Repeat passphrase: Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Secret key is available. Secret parts of primary key are not available. Signature expired %s Signature expires %s Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu UncompressedUsage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][not set][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create directory `%s': %s can't disable core dumps: %s can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverexternal program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the fingerprint: %s femalefile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcedforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key export failed: %s key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no keyserver known (use option --keyserver) no need for a trustdb check no remote program execution supported no secret key no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to display photo ID! unable to execute external program unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg 1.4.0 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:20+0200 Last-Translator: Jordi Mallach Language-Team: Catalan Language: ca MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Introduïu l'ID d'usuari. Finalitzeu amb una línia en blanc: No hi ha prou bytes aleatoris. Per favor, feu alguna altra cosa per que el sistema tinga oportunitat de recollir més entropia. (Calen %d bytes més) Seleccioneu una imatge per a utilitzarla en el vostre photo ID. La imatge ha de ser un fitxer JPEG. Recordeu que la imatge es desa dins de la vostra clau pública. Si utilitzeu una foto molt gran, la vostra clau també es farà molt gran! Es recomana una imatge amb una mida aproximada de 240x288. Algoritmes suportats: importades: %lu no modificades: %lu subclaus noves: %lu ID d'usuaris nous: %lu importades: %lu sense ID: %lu No és segur que la signatura pertanya al seu propietari. Probablement la signatura és FALSA. No hi ha res que indique que la signatura pertany al seu propietari. signatures noves: %lu Empremta digital de la subclau: claus privades llegides: %lu claus noves descartades: %lu Empremta digital de la subclau: (%d) DSA (només signar) (%d) RSA (només xifrar) (%d) RSA (només signar) (0) No vaig a contestar.%s (1) No ho he comprovat en absolut.%s (2) He fet algunes comprovacions.%s (3) He fet comprovacions molt acurades.%s noves revocacions: %lu No es pot signar. claus privades importades: %lu (no-exportable) Empremta digital de la clau primària:claus privades no canviades: %lu # Llista de valors de confiança assignats, creat el %s # (Utilitzeu «gpg --import-ownertrust» per a restaurar-les) %d signatures errònies s'han processat %d claus (s'han netejat %d comptes de validesa) %d signatures no comprovades a causa d'errors %d signatures no comprovades per falta de clau Han estat detectats %d IDs sense autosignatura vàlida %s ... %s encara no funciona amb %s dades xifrades amb %s clau de sessió xifrada amb %s s'utilitzarà xifratge %s %s és el nou %s és el que no ha canviat %s no té sentit amb %s! %s no és permés amb %s! signatura %s, algorisme de resum %s %s. %s/%s xifrat per a: «%s» %s: el directori no existeix! %s: error en llegir el registre lliure: %s %s: error en llegir el registre de la versió: %s %s: error en actualitzar el registre de la versió: %s %s: error en escriure el registre de directoris: %s %s: error en escriure el registre de la versió: %s %s: no s'ha pogut afegir un registre: %s %s: no s'ha pogut crear la taula de dispersió: %s %s: no s'ha pogut crear un registre de versió: %s%s: no s'ha pogut posar a zero un registre: %s %s: la versió de fitxer %d és invàlida %s: la base de dades de confiança és invàlida %s: s'ha creat una base de dades de confiança invàlida %s: s'ha creat l'anell %s no és un fitxer de base de dades de confiança %s: es descarta: %s %s: es descarta: la clau pública ja està present %s: es descarta: la clau pública està desactivada %s: s'ha creat la base de dades de confiança %s: el sufix és desconegut %s: registre de versió amb número de registre %lu %s:%d: l'opció «%s» està desaconsellada. %s:%d opcions d'exportació no vàlides %s:%d: opcions d'importanció no vàlides (No es va donar una descripció) (Segurament voleu seleccionar %d ací) (Aquesta és una clau de revocació sensible) (a no ser que especifiqueu la clau per la empremta digital) (potser heu utilitzat el programa erroni per a aquesta tasca) --clearsign [nom_del_fitxer]--decrypt [nom_del_fitxer]--edit-key user-id [ordres]--encrypt [nom_del_fitxer]--lsign-key user-id--output no funciona per a aquesta ordre --sign --encrypt [nom_del_fitxer]--sign --symmetric [nom_del_fitxer]--sign [nom_del_fitxer]--sign-key user-id--store [nom_del_fitxer]--symmetric [nom_del_fitxer]-k[v][v][v][c] [user-id] [anell]... açò és un bug (%s:%d:%s) 1 signatura errònia 1 signatura no comprovada per falta de clau 1 signatura no comprovada a causa d'un error Ha estat detectat 1 ID sense autosignatura vàlida @ (En la pàgina del man hi ha una llista completa d'ordres i d'opcions) @ Exemples: -se -r Bob [fitxer] signa i xifra per a l'usuari Bob --clearsign [fitxer] crea una signatura en text clar --detach-sign [fitxer] crea una signatura separada --list-keys [noms] mostra claus --fingerprint [noms] mostra empremtes digitals @ Opcions: @Ordres: s'ha forçat l'eixida d'armadura ASCII. Contesteu «sí» (o només «s») si és correcte generar la subclau.Contesteu «sí» si és correcte eliminar la subclauContesteu «sí» si és correcte sobreescriure el fitxerContesteu «sí» si realment voleu eliminar aquest ID d'usuari. Tots els certificats també es perdran!Contesteu «sí» o «no»Esteu segur que encara voleu afegir-lo? (s/N) Esteu segur de que encara voleu revocarla? (s/N) Segur que encara voleu signarla? (s/N) No s'ha pogut comprovar la signatura: %s No es pot editar aquesta clau: %s Cancel·laCertificats que duen a una clau de confiança absoluta: Canvia (N)om, (C)omentari, (E)mail o (O) d'acord / (X) ixCanvia (N)om, (C)omentari, (E)mail o (X) ix Canvia les preferències de tots els ID d'usuari (o només els dels seleccionats) a la llista actual de preferències. Les marques de temps de totes les autosignatures afectades s'avançaran un segon. S'està canviant la data de caducitat per a una clau primària. Xifratge: Comentari: Compressió: Voleu crear un certificat de revocació per a aquesta signatura? (s/N) Notació de signatura crítica: Política de signatura crítica: Voleu esborrar aquesta signatura correcta? (s/N/x)Voleu esborrar aquesta signatura invàlida? (s/N/x)Voleu esborrar aquesta signatura desconeguda? (s/N/x)S'ha esborrat %d signatura. S'han esborrat %d signatures. Signatura separada. Resum: Voleu crear una nova signatura per a reemplaçar la caducada? (s/N) Voleu ascendir-la a una signatura completament exportable? (s/N) Voleu ascendir-la a una autosignatura OpenPGP? (s/N) Voleu signarla un altre cop, de tota manera? (s/N) Voleu que la vostra signatura caduque alhora? (S/n) Adreça electrònica: Introduïu el nom del fitxer JPEG per al photo ID: Introduïu una descripció opcional; finalitzeu amb una línia en blanc: Introduïu el nou nom del fitxerIntroduïu la contrasenya Introduïu la contrasenya: Introduïu el nom del propietari de la clauIntroduïu la nova contrasenya per a la clau secreta. Introduïu el valor requerit tal i com es mostra en l'indicatiu. És possible introduir una data ISO (AAAA-MM-DD) però no rebreu una bona resposta d'error - en canvi, el sistema tractarà d'interpretar el valor donat com un interval.Introduïu la grandària de la clauIntroduïu l'ID d'usuari de la persona a qui voleu enviar el missatge.Introduïu l'ID d'usuari del revocador designat: Funcionalitats: El fitxer «%s» existeix. Doneu el nom del fitxer al qual s'aplica la signaturaEndavant, escriviu el missatge... Dispersió: Pista: Trieu els ID d'usuari que voleu signar Amb quanta cura heu verificat que la clau que esteu a punt de signar pertany realment a la persona esmentada anteriorment? Si no sabeu què contestar, entreu «0». El xifratge IDEA no està disponible, s'intentarà utilitzar optimistament %s en el seu lloc Si voleu podeu introduir un text que descriga per què expediu aquest certificat de revocació. Per favor, sigueu concisos. Una línia buida indica el final del text. Si voleu utilitzar aquesta clau no de confiança de totes maneres, dieu «sí».En general no és bona idea utilitzar la mateixa clau per a signar i xifrar. Aquest algoritme només s'hauria d'usar en tasques concretes. Si us plau, consulteu al vostre expert en seguretat primer.Hi ha un caràcter invàlid en el camp *comentari* Hi ha un caràcter invàlid en el camp *nom* L'ordre no és vàlida (proveu «help») La contrasenya no és vàlida; torneu a intentar-hoLa selecció és invàlida. És aquesta foto correcta (s/N/x)? L'assignació d'un valor ací és cosa vostra; aquest valor mai s'exportarà a cap tercer. Ho necessitem per a implementar la xarxa de confiança; no té res a veure amb la xarxa de certificats (creada implícitament).La clau és disponible en: La generació de claus ha estat cancel·lada. La generació de claus ha fallat: %s La clau ha estat compromesaLa clau ja no s'usaLa clau està protegida. La clau està revocada.La clau ha estat substituïdaIndiqueu la validesa de la clau (0) La clau no ha canviat, per tant no cal actualització. AnellN canvia el nom. C canvia el comentari. E canvia l'adreça de correu electrònic. O continua la generació de les claus. Q ix.NOTA: %s no és per a ús normal! NOTA: Aquesta clau no està protegida! NOTA: crear subclaus per a claus v3 no és conforme amb OpenPGP NOTA: aquesta clau ha estat revocada!NOTA: no existeix el fitxer d'opcions predeterminades «%s» NOTA: es descarta el fitxer d'opcions predeterminades antic «%s» NOTA: el remitent ha sol·licitat "alt secret" NOTA: el mode S2K simple (0) no és gens recomanable NOTA: no es pot escriure en la base de dades de confiança El nom no pot començar amb un dígit El nom ha de tenir, si més no, 5 caràcters Cal la clau secreta per a fer açò. NnCcEeOoXxNo hi ha cap signatura corresponent en l'anell secret No hi ha ajuda disponibleNo hi ha ajuda disponible per a `%s'No s'ha especificat cap raóUsuari inexistent. No hi ha cap ID amb l'índex %d No és una adreça vàlida Nota: Aquesta clau ha estat desactivada. Nota: La clau ha caducat! No s'hi ha eliminat res. Corregiu l'error primer No inclogueu l'adreça ni en el camp *nom* ni en el camp *comentari* Introduïu un nom de fitxer. Si premeu RETORN s'hi usarà el fitxer predeterminat (apareix entre claudàtors).Introduïu un comentari opcionalIntroduïu el nom del fitxer de dades: Introduïu la contrasenya; aquesta ha de ser una frase secreta Per favor, solucioneu aquest possible problema de seguretat Teniu en compte que la validesa de la clau mostrada no és necessàriament correcta a no ser que torneu a executar el programa. Per favor, elimineu les seleccions de les claus secretes. Per favor, repetiu l'última contrasenya per confirmar-la.Si us plau, informeu sobre els errors a . Heu de seleccionar exactament un ID. Seleccioneu la raó de la revocació: Seleccioneu quin tipus de clau voleu: Especifiqueu el temps de validesa de la clau. 0 = la clau no caduca = la clau caduca als n dies w = la clau caduca a les n setmanes m = la clau caduca als n mesos y = la clau caduca als n anys Especifiqueu el temps de validesa de la signatura. 0 = la signatura no caduca = la signatura caduca als n dies w = la signatura caduca a les n setmanes m = la signatura caduca als n mesos y = la signatura caduca als n anys Useu l'ordre «toggle» abans. Si us plau, espereu mentre es genera entropia. Feu alguna tasca si vos ajuda no avorrir-vos, ja que ajudarà a la qualitat de la entropia. Empremtes digital de la clau primària:Clau pública: La clau pública està desactivada. Nom i cognoms: Realment voleu crear els certificats de revocació? (s/N) Realment voleu esborrar aquesta autosignatura? (s/N)Raó de la revocació: %s Repetiu la contrasenya Repetiu la contrasenya: La grandària sol·licitada és %u bits S'ha creat el certificat de revocació. S'ha creat un certificat de revocació. Si us plau, mogueu-lo a un medi que pugueu amagar; si Mallory aconsegueix accés a aquest certificat pot utilitzar-lo per a fer la vostra clau inservible. És intel·ligent imprimir aquest certificat i amagar-lo, per si el vostre medi es torna illegible. Però aneu amb compte: el sistema d'impressió de la vostra màquina podria emmagatzemar les dades i fer-les disponibles a altres! La clau secreta està disponible. Les parts secretes de la clau primària no estan disponibles. Aquesta signatura va caducar el %s Aquesta signatura caduca el %s Notació de signatura: Política de signatura: Sintaxi: gpg [opcions] [fitxers] signa, comprova, xifra o desxifra l'operació predeterminada depén de les dades introduïdes El generador de nombres aleatoris és només un pedaç per a que funcioni - de cap manera és un GNA fort! NO UTILITZEU CAP DADA GENERADA PER AQUEST PROGRAMA!! La vostra signatura en «%s» és una signatura d'estil PGP 2.x. La signatura no és vàlida. Té sentit que l'elimineu de l'anell de claus.No hi ha preferències en un ID d'usuari d'estil PGP 2.x. Aquesta ordre no està permesa mentre s'està en mode %s. Aquesta és una signatura que enllaça l'ID de l'usuari amb la clau. Normalment no és una bona idea eliminar una signatura com aquesta. Actualment, GnuPG podria no poder utilitzar aquesta clau de nou, així que feu açò només si l'autosignatura no és vàlida per alguna raó i hi ha una segona disponible.Aquesta és una signatura vàlida en la clau; normalment no voldreu eliminar aquesta signatura perquè pot ser important per a establir una connexió de confiança a la clau o a un altra clau certificada per aquesta clau.Aquesta clau és nostra Aquesta clau ha estat desactivadaLa clau ha caducat!Aquesta clau caducarà el %s. Aquesta clau no està protegida. Aquesta signatura no es pot comprovar perquè no teniu la clau corresponent. Hauríeu de posposar la seua eliminació fins que sapieu quina clau es va utilitzar ja que aquesta clau de signatura podria establir una connexió de confiança a través d'una altra clau ja certificada.Aquesta signatura va caducar el %s. Açò inutilitzaria la clau en PGP 2.x. A ser revocada per: Per a construir la xarxa de confiança, GnuPG necessita saber quines claus tenen confiança absoluta - aquestes són normalment les claus per a les que teniu accés a la clau secreta. Contesteu «sí» per a donar a aquesta clau confiança absoluta Nombre total processat: %lu No comprimitForma d'ús: gpg [opcions] [fitxers] (-h per a veure l'ajuda)Forma d'ús: gpgv [opcions] [fitxers] (-h per a veure l'ajuda)L'ID d'usuari «%s» ha caducat.L'ID d'usuari «%s» no està autosignat.L'ID d'usuari «%s» està revocat.L'ID d'usuari ja no és vàlidAVÍS: %s és una opció desaconsellada. AVÍS: %s té preferència sobre %s AVÍS: hi ha 2 fitxers amb informació confidencial. AVÍS: Aquesta és una clau d'estil PGP 2.x. Afegir un revocador designat pot fer que algunes versions de PGP rebutjen aquesta clau. AVÍS: Aquesta és una clau d'estil PGP2. Afegir un photo ID pot fer que algunes versions de PGP rebutgen aquesta clau. AVÍS: Aquesta clau ha estat revocada pel propietari! AVÍS: Aquesta clau no ve certificada per una signatura de confiança! AVÍS: Aquesta clau no ve certificada per signatures prou fiables! AVÍS: Aquesta subclau ha estat revocada pel propietari! AVÍS: S'està usant una clau no fiable! AVÍS: La clau NO és de confiança! AVÍS: la clau és feble; per favor, canvieu la contrasenya. AVÍS: «%s» és un fitxer buit AVÍS: una signatura d'ID d'usuari està datada %d segons en el futur AVÍS: no es pot desfer la nominació d'una clau com a revocador designat! AVÍS: el missatge xifrat ha estat manipulat! AVÍS: el tamany del fitxer random_seed no és vàlid - no s'usarà ATENCIÓ: el missatge s'ha xifrat amb una clau feble durant el xifratge simètric. AVÍS: el missatge no tenia protecció d'integritat AVÍS: s'han detectat múltiples signatures. Només es comprovarà la primera. AVÍS: no s'ha marcat cap ID d'usuari com primària. Aquesta ordre pot causar que una ID d'usuari diferent esdevinga en la primària assumida. AVÍS: no s'ha exportat res AVÍS: les opcions en «%s» encara no estan actives durant aquesta execució AVÍS: la clau de sessió pot estar xifrada simètricament de forma insegura AVÍS: el programa podria crear un fitxer core! AVÍS: s'han donat destinataris (-r) sense usar xifratge de clau pública AVÍS: conflicte de signatures digest en el missatge AVÍS: no s'ha pogut %%-expandir la notació (massa gran). S'utilitza no expandida. AVÍS: no s'ha pogut eliminar el directori temporal «%s»: %s AVÍS: no s'ha pogut eliminar el fitxer temporal (%s) «%s»: %s AVÍS: esteu usant memòria insegura! AVÍS: esteu usant un generador de nombres aleatoris insegur!! Cal generar molts bits aleatòriament. És bona idea fer alguna altra cosa (teclejar, moure el ratolí, usar els discos) durant la generació de nombres primers; açò dóna oportunitat al generador de nombres aleatoris d'aconseguir prou entropia. Quan signeu un ID d'usuari d'una clau, primer hauríeu de verificar que la clau pertany a la persona esmentada en l'ID d'usuari. És útil per a altres saber amb quanta cura heu verificat açò. «0» significa que no feu cap declaració de amb quanta cura heu verificat la clau. «1» significa que creieu que la clau és de la persona que diu que és la propietària, però no heu pogut, o no heu verificat la clau de cap manera. Açò és útil per a la verificació d'un «rol», quan signeu la clau d'un usuari amb pseudònim. «2» significa que heu fet algunes comprovacions de la clau. Per exemple, açò pot significar que heu verificat la emprenta digital de la clau i verificat l'ID d'usuari en la clau amb el photo ID. «3» significa que heu fet una verificació exhaustiva de la clau. Per exemple, açò pot significar que heu verificat la emprenta digital amb el propietari de la clau en persona, i que heu comprovat, mitjançant un document difícil de falsificar amb photo ID (com un passaport) que el nom del propietari coincideix amb el nom de l'ID d'usuari en la clau, i finalment que heu verificat (per intercanvi de correu) que l'adreça de correu en la clau pertany al propietari de la clau. Teniu en compte que els exemples donats anteriorment per als nivels 2 i 3 són *només* exemples. Al final, és cosa vostra decidir què significa «alguna» i «exhaustiva» per a vosaltres quan voleu signar altres claus. Si no sabeu quina és la resposta correcta, contesteu «0».Esteu a punt de revocar aquestes signatures: Esteu usant el joc de caràcters `%s'. No podeu canviar la data de caducitat de les claus v3 No podeu esborrar l'últim ID d'usuari! No heu especificat un ID d'usuari. (podeu usar «-r») No voleu contrasenya: açò és probablement una *mala* idea! No voleu contrasenya: és una mala idea! Bé. Si voleu canviar-la més endavant, useu aquest programa amb l'opció "--edit-key". No podeu afegir un revocador designat a una clau d'estil PGP 2.x. No podeu afegir un photo ID a una clau d'estil PGP2. No podeu fer una signatura OpenPGP en una clau PGP 2.x en el mode --pgp2. Heu de seleccionar, si més no, una clau. Heu de seleccionar al menys un ID d'usuari. Cal una contrasenya per a protegir la clau secreta. Heu triat l'identificador d'usuari: "%s" Hauríeu d'especificar una raó per a la certificació. Depenent del context teniu l'habilitat de triar d'aquesta llista: «La clau ha estat compromesa» Utilitzeu açò si teniu alguna raó per creure que persones no autoritzades han tingut accés a la vostra clau secreta. «La clau ha estat reemplaçada» Utilitzeu açò si heu reemplaçat aquesta clau amb una més nova. «La clau ja no està en ús» Utilitzeu açò si heu retirat aquesta clau. «L'ID de l'usuari ja no és vàlid» Utilitzeu açò per a constatar que l'ID de l'usuari no s'hauria d'utilitzar més; açò s'utilitza normalment per a marcar una adreça de correu com a invàlida. La vostra signatura actual en «%s» ha caducat. La vostra signatura en «%s» és una signatura local. La vostra decisió? La vostra selecció? El vostre sistema no pot representar dates posteriors a l'any 2038. Tanmateix, les tractarà bé fins l'any 2106. [nom_del_fitxer][no establert][revocació][autosignatura][incert]«%s» ja està comprimida «%s» no és un fitxer regular: es descarta «%s» no és un ID de clau llarg vàlid afegeix un photo IDafegeix una clau de revocacióafegeix un ID d'usuaricapçalera d'armadura: armadura: %s s'assumeixen dades xifrades amb %s s'asumeix que hi ha dades signades en «%s» l'MPI és erronil'URI és erròniael certificat és incorrectela clau és incorrectala contrasenya és erròniala clau pública és erròniala clau secreta és erròniala signatura és erròniauna mica més silenciósbinariha fallat build_packet: %s no s'ha pogut tancar «%s»: %s no s'ha pogut connectar amb «%s»: %s no s'ha pogut crear «%s»: %s no es pot crear el directori «%s»: %s no s'han pogut desactivar els bolcats de memòria: %s no s'ha pogut generar un prim amb pbits=%u qbits=%u no s'ha pogut generar un prim amb menys de %d bits no es pot treballar amb l'algoritme de clau pública %d no es poden tractar línies més llargues de %d caràcters no s'ha pogut obrir «%s» no s'ha pogut obrir «%s»: %s no s'han pogut obrir les dades signades `%s' no s'ha pogut obrir l'anellno s'ha pogut llegir «%s»: %s no es pot fer stat de «%s»: %s no es pot usar un paquet asimètric ESK al estar en mode S2K no s'ha pogut escriure «%s»: %s s'ha cancel·lat per l'usuari no es pot nominar a una clau d'estil PGP 2.x com a revocador designat no s'ha pogut evitar una clau feble per a xifratge simètric; hi ha hagut %d intents! canvia la confiançacanvia la contrasenyano s'ha pogut comprovar la signatura creada: %s s'està comprovant la base de dades de confiança la suma de control és errònial'algoritme de xifratge %d%s és desconegut o està desactivat completes-needed ha de ser major que 0 les ordres entren en conflicte crea eixida amb armadura asciiles dades no s'han desat; useu l'opció "--output" per desar-les no s'ha pogut llevar l'armadura: %s desxifra dades (predeterminat)ha fallat el desxifratge: %s desxifratge correcte no s'ha pogut eliminar el bloc de claus: %s no fa cap canvino s'ha pogut crear l'armadura: %s xifra dadesxifrat amb %lu contrasenyes xifrat amb 1 contrasenya xifrat amb l'algoritme %d (desconegut) xifrar un missatge en mode --pgp2 requereix el xifratge IDEA xifra només amb xifratge simètricerror en crear «%s»: %s error en crear l'anell «%s»: %s error en la creació de la contrasenya: %s error en l'última línia error en la lectura de «%s»: %s s'ha produït un error en llegir el bloc de claus: %s error mentre s'escrivia l'anell «%s»: %s s'ha produït un error mentre s'escrivia l'anell públic «%s»: %s s'ha produït un error mentre s'escrivia l'anell secret «%s»: %s exporta clausexporta claus a un servidor de clausles crides a programes externs estan inhabilitades per tindre el fitxer d'opcions permissos insegurs no s'ha pogut inicialitzar la base de dades de confiança: %s no s'ha pogut reconstruir la memòria cau de l'anell: %s no s'ha pogut emmagatzemar l'empremta digital: %s dónaerror en el tancament del fitxererror en la creació del fitxererror en l'eliminació del fitxerel fitxer existeixerror en l'obertura del fitxererror de lecturaerror en el reanomenament del fitxererror d'escripturaforçatforçar el xifrat asimètric %s (%d) viola les preferències del destinatari error generalgenera un nou parell de clausgenera un certificat de revocaciós'està generant la suma de comprovació desaconsellada de 16-bits per a la protecció de la clau secreta gpg-agent no està disponible en aquesta sessió la versió %d del protocol de gpg-agent no està suportada iImMxXoOimporta claus d'un servidor de clausimporta/fon clausla línia d'entrada %u és massa llarga o hi falta un fí de línia la línia d'entrada és superior a %d caràcters invàlidael mode S2K és invàlid; ha de ser 0, 1 o 3 l'argument és invàlidl'armadura és invàlidala capçalera d'armadura és invàlida: l'armadura és invàlida: la línia és més llarga que %d caràcters la capçalera de signatura clara és invàlida la línia escapada amb guió és invàlida: les preferències per defecte són invàlides opcions d'exportació no vàlides l'algoritme de dispersió és invàlid «%s» opcions d'importació no vàlides l'anell no és vàlidel paquet és invàlidla contrasenya és invàlidales preferències personals de xifrat són invàlides les preferències personals de compressió són invàlides les preferències personals de digest són invàlides s'ha detectat un paquet arrel invàlid en proc_tree() el valor no és vàlid l'exportació de la clau ha fallat: %s la clau s'ha creat %lu segon en el futur (salt en el temps o problemes amb el rellotge) la clau s'ha creat %lu segons en el futur (salt en el temps o problemes amb el rellotge) la clau no està marcada com a insegura - no es pot utilitzar amb el GNA fals! s'ha creat l'anell «%s» error de servidor de clausla recepció des del servidor de claus ha fallat: %s ha fallat el refresc des del servidor de claus: %s ha fallat la cerca al servidor de claus: %s l'enviament al servidor de claus ha fallat: %s la mida de la clau és invàlida; s'hi usaran %u bits la mida de la clau ha estat arrodonida fins a %u bits llista claus i IDllista clausllista claus i empremtes digitalsllista claus i signaturesllista les preferències (expert)llista les preferències (detallat)llista claus secretescrea una signatura separadafes els conflictes de marques de temps només un avísha fallat make_keysig_packet: %s homeCRC malformat la variable d'entorn GPG_AGENT_INFO és malformada l'id d'usuari és malformatmarginals-needed ha de ser major que 1 s'està posant la signatura al lloc correcte nNsignatures en text pla imbricades error de la xarxamai s'ha creat el nou fitxer d'opcions «%s» la pròxima comprovació de la base de dades de confiança serà el %s nono s'ha trobat cap signe = a la definició de grup «%s» no hi ha cap clau pública corresponent: %s no hi ha anell secret predeterminat: %s no s'ha trobat cap mòdul d'acumulació d'entropia no es coneix cap servidor de claus (useu l'opció "--keyserver") no és necessària una comprovació de la base de dades de confiança no hi ha suport per a l'execució remota de programes ho hi ha clau secreta no hi ha dades signades no s'ha trobat l'id de l'usuarino s'han trobat claus amb confiança absoluta no s'han trobat dades OpenPGP vàlides. no hi ha adreces vàlides no s'ha trobat cap anell escrivible: %s no s'ha trobat cap anell públic escrivible: %s no s'ha trobat cap anell secret de escrivible: %s no és una signatura separada no és xifratno forçatno processatno és suportatnota: el fitxer random_seed és buit nota: el fitxer random_seed no s'ha actualitzat d'acord, som el destinatari anònim. la codificació antiga del DEK no està suportada signatura de l'estil antic (PGP 2.x) l'operació no és possible sense memòria segura inicialitzada fitxer d'opcions «%s»: %s nom del fitxer original='%.*s' s'ha netejat la informació de la confiança la contrasenya no s'ha repetit correctament; torneu a intentar-hosi us plau, feu un --check-trustdb introduïu una adreça de correu (opcional però molt recomanable)si us plau, visiteu http://www.gnupg.org/documentation/faqs.html per a més informació si us plau, utilitzeu «%s%s» en el seu lloc fi de fitxer prematur (en CRC) fi de fitxer prematur (no CRC) problema en tractar amb un paquet xifrat hi ha un problema amb l'agent: es deshabilitarà el seu ús pregunta abans de sobreescriurel'algoritme de protecció %d%s no està suportat s'han creat i signat les claus pública i secreta. ha fallat el desxifratge amb la clau pública: %s la clau pública no coincideix amb la clau secreta! dades xifrades amb clau pública: bona clau de xifratge (DEK) no s'ha trobat la clau públicaxXixix del menúhi ha un caràcter «quoted printable» en l'armadura - probablement s'ha utilitzat un MTA amb errors s'està llegint des de «%s» s'estan llegint opcions de «%s» s'està llegint d'stdin... raó de la revocació: elimina claus de l'anell públicelimina claus de l'anell secretlímit de recursoscomentari de la revocació: arrodonida fins a %u bits desa i ixcerca claus en un servidor de clausla clau secreta no està disponibleparts de la clau secreta no estan disponbles tria l'ID d'usuari Nl'algorisme de resum de certificació seleccionat no és vàlid l'algorisme de xifratge triat no és vàlid l'algorisme de resum seleccionat no és vàlid mostra aquesta ajudasigna una clausigna una clau localmentsigna o edita una claus'ha eliminat la verificació de signatura Ha fallat el procés de signatura: %s signatura:es descarta: la clau pública ja està establida es descarta: la clau pública ja s'ha especificat com a destinatari es descarta: la clau secreta ja és present es descarta un bloc de tipus %d revocació autònoma: useu "gpg --import" per a aplicar-la signatura autònoma de classe 0x%02x el subpaquet de tipus %d té el bit crític activat s'ha produït un error del sistema en cridar el programa extern: %s pren les claus d'aquest anellmode textla URL de política de certificació donada no és vàlida la URL de política de signatura donada no és vàlida no s'ha pogut verificar la signatura. Recordeu que el fitxer de signatura (.sig o .asc) ha de ser el primer que figure en la línia d'ordres. hi ha una clau secreta per a la clau pública «%s»! açò pot ser causat per l'absència d'autosignatura aquest missatge pot no ser usable per %s conflicte de datahi ha massa entrades en la memòria cau de claus públiques - desactivada error de la base de dades de confiançael registre de confiança %lu no és del tipus demanat %d registre de confiança %lu, tipus %d: no s'ha pogut llegir: %s registre de confiança %lu, tipus %d: no s'ha pogut escriure: %s reg de la base de dades de confiança %lu: ha fallat lseek: %s reg de la base de dades de confiança %lu: ha fallat la escriptura (n=%d): %s la transacció de la base de dades de confiança és massa gran base de dades de confiança: ha fallat lseek: %s base de dades de confiança: ha fallat la lectura (n=%d): %s base de dades de confiança: no s'ha pogut sincronitzar: %s no s'ha pogut mostrar el photo ID! no s'ha pogut executar el programa extern no s'ha pogut llegir la resposta del programa extern: %s no s'ha pogut fixar l'exec-path a %s no s'ha pogut utilitzar el xifratge IDEA per a totes les claus per a les que esteu xifrant. dades inesperadesl'algoritme de xifratge no és implementatl'algoritme de clau pública no és implementatdesconegudal'algoritme de xifratge és desconegutl'algoritme de compressió és desconegutl'algoritme de resum és desconegutel tipus de paquet és desconegutl'algorisme de protecció és desconegut l'algoritme de clau pública és desconegutla classe de signatura és desconegudala versió és desconegudas'ha produït una eixida no natural del programa extern no especificatl'URI no és suportadal'algoritme de clau pública és inusablels clau pública és inusablela clau secreta és inusableactualitza totes les claus des d'un servidor de clausha fallat l'actualització: %s ha fallat l'actualització de la clau secreta: %s actualitza la base de dades de confiançaforma d'ús: gpg [opcions] fitxer d'eixidausa el mode de text canònicutilitzeu l'opció «--delete-secret-keys» per a eliminar-la primer. usa aquest id per a signar o desxifrarl'ID d'usuari «%s» ja està revocat detallverifica una signaturaclau febles'hi ha creat una clau feble - reintent mida extranya per a una clau de sessió xifrada (%d) s'està escrivint una signatura directa s'està escrivint la signatura de comprovació de la clau s'està escrivint la clau pública a «%s» s'està escrivint la clau secreta a «%s» s'està escrivint l'autosignatura s'està escrivint en «%s» s'està escrivint en stdout s'ha utilitzat una clau secreta incorrectasSsí|sinomés podeu signar en clar amb claus d'estil PGP 2.x en el mode --pgp2 només podeu fer signatures separades amb claus d'estil PGP 2.x mentre esteu en mode --pgp2 només podeu xifrar a claus RSA de 2048 bits o menys en el mode --pgp2 només podeu fer signatures separades o en clar en el mode --pgp2 no podeu signar i xifrar al mateix temps en el mode --pgp2 no podeu nominar una clau com el seu propi revocador designat heu trobat un bug... (%s:%d) no podeu usar %s mentre esteu en mode %s heu d'utilitzar fitxers (i no un conducte) mentre treballeu amb --pgp2 habilitat. |FD|escriu informació d'estat en aquest FD|NOM|xifra per a NOM|N|nivell de compressió N (0 no comprimeix)|[fitxer]|crea una signatura en text clar|[fitxer]|crea una signatura|algo [fitxers]|imprimeix resums de missatgesgnupg-1.4.20/po/eo.po0000644000175000017500000061150612635457217011245 00000000000000# Mesaoj por la programo GnuPG # Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc. # Edmund GRIMLEY EVANS , 2000-2002. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.0.6d\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:22+0200\n" "Last-Translator: Edmund GRIMLEY EVANS \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-3\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "ne povas malfermi '%s'\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "skribas sekretan losilon al '%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "ne povas malfermi '%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "ne povas stat-i '%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "'%s' ne estas normala dosiero - ignorita\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "noto: dosiero random_seed estas malplena\n" #: cipher/random.c:500 cipher/random.c:532 #, fuzzy msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "averto: nevalida grando de la dosiero random_seen - ne uzita\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "ne povas legi '%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "noto: dosiero random_seed ne aktualigita\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "ne povas krei '%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "ne povas skribi '%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "ne povas fermi '%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVERTO: uzas malsekuran stokastilon!!\n" #: cipher/random.c:894 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 "" "La kvazastokastilo estas nur simpla protezo, por ke la\n" "programo entute ruliu; i neniel estas forta stokastilo!\n" "\n" "NE UZU DATENOJN KREITAJN DE I TIU PROGRAMO!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Nesufie da stokastaj datenoj. Bonvolu fari ion por ebligi al la\n" "mastruma sistemo kolekti pli da entropio! (Mankas %d bitokoj)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "malsukcesis doni komencajn valorojn al fido-datenaro: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "malsukcesis rekonstrui losilaran staplon: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "forvio de losilbloko malsukcesis: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "Kreado de losiloj malsukcesis: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 #, fuzzy msgid "|A|Please enter the Admin PIN" msgstr "Donu la uzantidentigilon: " #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "sekretaj losilpartoj ne estas disponataj\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Kialo por revoko: " #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "eraro dum kreado de pasfrazo: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "eraro dum legado de losilbloko: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: eraro dum legado de libera registro: %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "'%s' jam densigita\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "krei novan losilparon" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "krei novan losilparon" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "malsukcesis doni komencajn valorojn al fido-datenaro: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "forvio de losilbloko malsukcesis: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "Kreado de losiloj malsukcesis: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "%s-subskribo de: %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "validaj OpenPGP-datenoj ne trovitaj.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "kiraso: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "nevalida kirasoapo: " #: g10/armor.c:459 msgid "armor header: " msgstr "kirasoapo: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "nevalida apo de klarteksta subskribo\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "kirasoapo: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "ingitaj klartekstaj subskriboj\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "neatendita kiraso:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "nevalida strek-eskapita linio: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "nevalida signo %02x en bazo 64 ignorita\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "tro frua dosierfino (nenia CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "tro frua dosierfino (en CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "misformita CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC-eraro; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "tro frua dosierfino (en vosto)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "eraro en vostolinio\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "validaj OpenPGP-datenoj ne trovitaj.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "nevalida kiraso: linio pli longa ol %d signojn\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "quoted-printable-signo en kiraso - verajne cima pototransendilo estis " "uzata\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "sekreta losilo ne havebla" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "ne povas fari tion en neinteraga reimo\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Tiu komando ne eblas en la reimo %s.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Via elekto? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "en" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "en" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr "Nenia kialo specifita" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "ne traktita" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "skribas publikan losilon al '%s'\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "eraro dum kreado de losilaro '%s': %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "eraro dum legado de '%s': %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "eraro dum kreado de '%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "aktualigitaj preferoj" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "nevalida signo en signoeno\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "nevalida signo en signoeno\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "%s: nevalida dosiero-versio %d\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "Fingrospuro:" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "%s: nevalida dosiero-versio %d\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "Kreado de losiloj malsukcesis: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "validaj OpenPGP-datenoj ne trovitaj.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "eraro dum skribado de sekreta losilaro '%s': %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Kiun losilgrandon vi deziras? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Kiun losilgrandon vi deziras? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Kiun losilgrandon vi deziras? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "rondigita is %u bitoj\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "eraro dum legado de sekreta losilbloko '%s': %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "ignorita: sekreta losilo jam eestas\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Bonvolu elekti, kian losilon vi deziras:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "i tiu losilo eksvalidios je %s.\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (nur ifri)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Nevalida elekto.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Kialo por revoko: " #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "nekonata densig-metodo" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "Sekretaj partoj de efa losilo ne estas disponataj.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "ignorita: sekreta losilo jam eestas\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "eraro dum skribado de losilaro '%s': %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "forlasi i tiun menuon" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "malkongruaj komandoj\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "montri i tiun helpon" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Nenia helpo disponata" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "ani la daton de eksvalidio" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "ani la posedantofidon" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "montri fingrospuron" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "krei novan losilparon" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "malkongruaj komandoj\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "malkongruaj komandoj\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "skribas sekretan losilon al '%s'\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Nevalida komando (provu per \"helpo\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "sekreta losilo ne havebla" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "forvio de losilbloko malsukcesis: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 #, fuzzy msgid "Enter New Admin PIN: " msgstr "Donu la uzantidentigilon: " #: g10/cardglue.c:1014 #, fuzzy msgid "Enter New PIN: " msgstr "Donu la uzantidentigilon: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 #, fuzzy msgid "Enter PIN: " msgstr "Donu la uzantidentigilon: " #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Ripetu pasfrazon: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "la pasfrazo ne estis uste ripetita; provu denove" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "ne povas malfermi '%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output ne funkcias por i tiu komando\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "losilo '%s' ne trovita: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "eraro dum legado de losilbloko: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "ne povas fari tion en neinteraga reimo sen \"--yes\"\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "u forvii i tiun losilon de la losilaro? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "Tio estas sekreta losilo! u vere forvii in? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "forvio de losilbloko malsukcesis: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "estas sekreta losilo por la publika losilo \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "uzu la opcion \"--delete-secret-key\" por forvii in unue.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "eraro dum kreado de pasfrazo: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "" #: g10/encode.c:229 #, fuzzy, c-format msgid "using cipher %s\n" msgstr "subskribado malsukcesis: %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "'%s' jam densigita\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "eblas ifri nur per RSA-losiloj de maksimume 2048 bitoj kun --pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "legas el '%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "ne povas uzi la ifron IDEA por iuj losiloj, al kiuj vi ifras.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "NOTO: ifrad-metodo %d ne trovita en preferoj\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "NOTO: ifrad-metodo %d ne trovita en preferoj\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, fuzzy, c-format msgid "you may not use %s while in %s mode\n" msgstr "Tiu komando ne eblas en la reimo %s.\n" #: g10/encode.c:796 #, fuzzy, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s-ifrita por: %s\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s-ifritaj datenoj\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "ifrita per nekonata metodo %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "AVERTO: mesao estis ifrita per malforta losilo en la simetria ifro.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problemo e traktado de ifrita paketo\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "" #: g10/exec.c:174 g10/openfile.c:468 #, fuzzy, c-format msgid "can't create directory `%s': %s\n" msgstr "%s: ne povas krei dosierujon: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "%s: eraro dum legado de versiregistro: %s\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "ne povas malfermi %s: %s\n" #: g10/exec.c:511 #, fuzzy, c-format msgid "system error while calling external program: %s\n" msgstr "%s: eraro dum legado de versiregistro: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" #: g10/exec.c:611 #, fuzzy, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "La subskribo estos markita kiel nerevokebla.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "revoki flankan losilon" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "neuzebla sekreta losilo" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "skribas sekretan losilon al '%s'\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "losilo %08lX: ne protektita - ignorita\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "losilo %08lX: PGP-2.x-stila losilo - ignorita\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "losilo %08lX: revokatestilo en malusta loko - ignorita\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "malsukcesis doni komencajn valorojn al fido-datenaro: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "AVERTO: nenio estis eksportita\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Komandoj:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[dosiero]|fari subskribon" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[dosiero]|fari klartekstan subskribon" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "fari apartan subskribon" #: g10/gpg.c:393 msgid "encrypt data" msgstr "ifri datenojn" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "ifri nur kun simetria ifro" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "malifri datenojn (implicita elekto)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "kontroli subskribon" #: g10/gpg.c:401 msgid "list keys" msgstr "listigi losilojn" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "listigi losilojn kaj subskribojn" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "kontroli losilsubskribojn" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "listigi losilojn kaj fingropurojn" #: g10/gpg.c:406 msgid "list secret keys" msgstr "listigi sekretajn losilojn" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "krei novan losilparon" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "forigi losilojn de la publika losilaro" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "forigi losilojn de la sekreta losilaro" #: g10/gpg.c:411 msgid "sign a key" msgstr "subskribi losilon" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "subskribi losilon loke" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "subskribi a redakti losilon" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "krei revokatestilon" #: g10/gpg.c:416 msgid "export keys" msgstr "eksporti losilojn" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "eksporti losilojn al losilservilo" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importi losilojn de losilservilo" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "seri losilojn e losilservilo" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "aktualigi iujn losilojn de losilservilo" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importi/kunfandi losilojn" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "aktualigi la fido-datenaron" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|metodo [dosieroj]|presi mesao-kompendiojn" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opcioj:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "krei eligon en askia kiraso" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NOMO|ifri por NOMO" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "uzi i tiun uzantidentigilon por subskribi a malifri" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|difini densig-nivelon N (0=nenia)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "uzi tekstan reimon" #: g10/gpg.c:486 msgid "use as output file" msgstr "uzi dosieron por eligo" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "detala eligo" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "fari neniajn anojn" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Vidu la manpaon por kompleta listo de iuj komandoj kaj opcioj)\n" #: g10/gpg.c:576 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" "Ekzemploj:\n" "\n" " -se -r Bob [dosiero] subskribi kaj ifri por uzanto Bob\n" " --clearsign [dosiero] fari klartekstan subskribon\n" " --detach-sign [dosiero] fari apartan subskribon\n" " --list-keys [nomoj] montri losilojn\n" " --fingerprint [nomoj] montri fingropurojn\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Bonvolu raporti cimojn al .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uzado: gpg [opcioj] [dosieroj] (-h por helpo)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Sintakso: gpg [opcioj] [dosieroj]\n" "subskribi, kontroli, ifri a malifri\n" "implicita operacio dependas de la enigataj datenoj\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Realigitaj metodoj:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "" #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "" #: g10/gpg.c:827 msgid "Hash: " msgstr "" #: g10/gpg.c:833 g10/keyedit.c:2369 #, fuzzy msgid "Compression: " msgstr "Komento: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "uzado: gpg [opcioj] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "malkongruaj komandoj\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "%s: nova opcio-dosiero kreita\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Mankas responda subskribo en sekreta losilaro\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "la donita gvidlinia URL por subskriboj ne validas\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "montri, en kiu losilaro estas listigita losilo" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Mankas responda subskribo en sekreta losilaro\n" #: g10/gpg.c:1786 #, fuzzy, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTO: mankas implicita opcio-dosiero '%s'\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTO: mankas implicita opcio-dosiero '%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "opcio-dosiero '%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "legas opciojn el '%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTO: %s ne estas por normala uzado!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s ne estas valida signaro\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s ne estas valida signaro\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "ne povis analizi URI de losilservilo\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "nevalida losilaro" #: g10/gpg.c:2615 #, fuzzy, c-format msgid "%s:%d: invalid import options\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/gpg.c:2618 #, fuzzy msgid "invalid import options\n" msgstr "nevalida kiraso" #: g10/gpg.c:2625 #, fuzzy, c-format msgid "%s:%d: invalid export options\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/gpg.c:2628 #, fuzzy msgid "invalid export options\n" msgstr "nevalida losilaro" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "nevalida kiraso" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s ne estas valida signaro\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "la donita gvidlinia URL por subskriboj ne validas\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s ne estas valida signaro\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s ne estas valida signaro\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "nevalida losilaro" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "AVERTO: programo povas krei core-dosieron!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "AVERTO: %s nuligas %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s ne eblas kun %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s ne havas sencon kun %s!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "gpg-agent ne estas disponata en i tiu sesio\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "skribas sekretan losilon al '%s'\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "eblas fari nur apartajn kaj klartekstajn subskribojn kun --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "ne eblas samtempe subskribi kaj ifri kun --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "necesas uzi dosierojn (kaj ne tubon) kun --pgp2\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "ifri mesaon kun --pgp2 postulas la ifron IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "elektita ifrad-metodo ne validas\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "elektita kompendi-metodo ne validas\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "elektita ifrad-metodo ne validas\n" #: g10/gpg.c:3109 #, fuzzy msgid "selected certification digest algorithm is invalid\n" msgstr "elektita kompendi-metodo ne validas\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed devas esti pli granda ol 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed devas esti pli granda ol 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth devas esti inter 1 kaj 255\n" #: g10/gpg.c:3130 #, fuzzy msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "nevalida default-check-level; devas esti 0, 1, 2 a 3\n" #: g10/gpg.c:3132 #, fuzzy msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "nevalida default-check-level; devas esti 0, 1, 2 a 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTO: simpla S2K-reimo (0) estas forte malrekomendata\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "nevalida S2K-reimo; devas esti 0, 1 a 3\n" #: g10/gpg.c:3146 #, fuzzy msgid "invalid default preferences\n" msgstr "nevalidaj preferoj\n" #: g10/gpg.c:3150 #, fuzzy msgid "invalid personal cipher preferences\n" msgstr "nevalidaj preferoj\n" #: g10/gpg.c:3154 #, fuzzy msgid "invalid personal digest preferences\n" msgstr "nevalidaj preferoj\n" #: g10/gpg.c:3158 #, fuzzy msgid "invalid personal compress preferences\n" msgstr "nevalidaj preferoj\n" #: g10/gpg.c:3191 #, fuzzy, c-format msgid "%s does not yet work with %s\n" msgstr "%s ne havas sencon kun %s!\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "Tiu komando ne eblas en la reimo %s.\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "Tiu komando ne eblas en la reimo %s.\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "Tiu komando ne eblas en la reimo %s.\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "malsukcesis doni komencajn valorojn al fido-datenaro: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [dosiero]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [dosiero]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "malifrado malsukcesis: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [dosiero]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [dosiero]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "Tiu komando ne eblas en la reimo %s.\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [dosiero]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [dosiero]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [dosiero]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "Tiu komando ne eblas en la reimo %s.\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [dosiero]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [dosiero]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [dosiero]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key uzantidentigilo" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key uzantidentigilo" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key uzantidentigilo [komandoj]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [uzantidentigilo] [losilaro]" #: g10/gpg.c:3667 #, fuzzy, c-format msgid "keyserver send failed: %s\n" msgstr "Kreado de losiloj malsukcesis: %s\n" #: g10/gpg.c:3669 #, fuzzy, c-format msgid "keyserver receive failed: %s\n" msgstr "listigo de sekretaj losiloj malsukcesis: %s\n" #: g10/gpg.c:3671 #, fuzzy, c-format msgid "key export failed: %s\n" msgstr "Kreado de losiloj malsukcesis: %s\n" #: g10/gpg.c:3682 #, fuzzy, c-format msgid "keyserver search failed: %s\n" msgstr "get_dir_record: search_record malsukcesis: %s\n" #: g10/gpg.c:3692 #, fuzzy, c-format msgid "keyserver refresh failed: %s\n" msgstr "listigo de sekretaj losiloj malsukcesis: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "elkirasigo malsukcesis: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "enkirasigo malsukcesis: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "nevalida kompendi-metodo '%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[dosiero]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Ektajpu vian mesaon ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "la donita gvidlinia URL por atestado ne validas\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "la donita gvidlinia URL por subskriboj ne validas\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "la donita gvidlinia URL por subskriboj ne validas\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "tro da registroj en pk-staplo - malaltas\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[Uzantidentigilo ne trovita]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "losilo %08lX: sekreta losilo sen publika losilo - ignorita\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Nevalida losilo %08lX validigita per --always-trust\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "estas sekreta losilo por la publika losilo \"%s\"!\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "uzas flankan losilon %08lX anstata la efa losilo %08lX\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "iom malpli da informoj" #: g10/gpgv.c:73 #, fuzzy msgid "take the keys from this keyring" msgstr "u forvii i tiun losilon de la losilaro? " #: g10/gpgv.c:75 #, fuzzy msgid "make timestamp conflicts only a warning" msgstr "malkongruo de tempostampoj" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|skribi statusinformojn al FD (dosierpriskribilo)" #: g10/gpgv.c:101 #, fuzzy msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Uzado: gpg [opcioj] [dosieroj] (-h por helpo)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Vi devas mem doni valoron i tie; la valoro neniam estos eksportita\n" "al alia persono. Ni bezonas in por realigi la fido-reton; i neniel\n" "rilatas al la (implicite kreita) atestilo-reto." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Por konstrui la fido-reton, GnuPG devas scii, kiuj losiloj estas\n" "absolute fidataj; normale tiuj estas la losiloj, por kiuj vi havas\n" "aliron al la sekreta losilo. Respondu \"jes\" por igi i tiun losilon\n" "absolute fidata\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Se vi tamen volas uzi i tiun nefidatan losilon, respondu per \"jes\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Donu la uzantidentigilon de la adresito, al kiu vi volas sendi la mesaon." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Donu la losilgrandon" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Respondu per \"jes\" a \"ne\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Donu la bezonatan valoron, kiel montrite en la invito.\n" "Eblas doni ISO-forman daton (JJJJ-MM-TT), sed vi ne ricevos\n" "bonan eraromesaon; anstatae la sistemo provas interpreti\n" "la donitan valoron kiel gamon." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Donu la nomon de la losilposedanto" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "bonvolu doni retadreson (ne devige, sed tre rekomendate)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Bonvolu doni nedevigan komenton" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N por ani la nomon.\n" "K por ani la komenton.\n" "A por ani la retadreson.\n" "B por darigi kun la losilkreado.\n" "F por interrompi la losilkreadon kaj fini." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Respondu per \"jes\" (a nur \"j\"), se la sublosilo estu kreita." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Kiam vi subskribas uzantidentigilon sur losilo, vi devas unue kontroli,\n" "ke la losilo apartenas al la persono nomita en la identigilo. Estas\n" "utile por aliaj homoj scii, kiom zorge vi kontrolis tion.\n" "\n" "\"0\" signifas, ke vi faras nenian specifan aserton pri tio, kiel zorge vi\n" " kontrolis la losilon.\n" "\n" "\"1\" signifas, ke vi kredas, ke la losilo apartenas al la homo, kiu\n" " pretendas posedi in, sed vi ne povis kontroli, a simple ne\n" " kontrolis la losilon. Tio estas utila, kiam oni subskribas la\n" " losilon de psedonoma uzanto.\n" "\n" "\"2\" signifas, ke vi malzorge kontrolis la losilon. Ekzemple, povas esti,\n" " ke vi kontrolis la fingropuron de la losilo kaj komparis la\n" " uzantidentigilon sur la losilo kun foto-identigilo.\n" "\n" "\"3\" signifas, ke vi zorge kontrolis la losilon. Ekzemple, povas esti,\n" " ke vi kontrolis la fingropuron persone e la posedanto de la\n" " losilo, kaj vi kontrolis, per malfacile falsebla dokumento kun\n" " foto-identigilo (ekzemple pasporto), ke la nomo de losilposedanto\n" " kongruas kun la nomo en la uzantidentigilo sur la losilo, kaj fine\n" " vi kontrolis (per interano de retmesaoj), ke la retadreso sur\n" " la losilo apartenas al la posedanto de la losilo.\n" "\n" "Notu, ke la ekzemploj donitaj supre por la niveloj 2 kaj 3 estas nur\n" "ekzemploj. Vi devas fine mem decidi, kion precize signifas \"malzorga\"\n" "kaj \"zorga\", kiam vi subskribas aliajn losilojn.\n" "\n" "Se vi ne scias la ustan respondon, respondu per \"0\"." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Respondu per \"jes\", se vi volas subskribi iujn uzantidentigilojn" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Respondu per \"jes\", se vi vere volas forvii la uzantidentigilon.\n" "Tiam anka iuj atestiloj perdios!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Respondu per \"jes\", se la sublosilo estu forviita" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "i tio estas valida losilsubskribo; normale vi ne volas forvii\n" "i tiun subskribon, ar eble i estos grava por establi fido-ligon\n" "al la losilo a al alia losilo atestita per i tiu losilo." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "La subskribo ne estas kontrolebla, ar vi ne havas la respondan\n" "losilon. Vi devus prokrasti ian forvion, is vi scios, kiu\n" "losilo estis uzita, ar la subskribanta losilo eble establos\n" "fido-ligon tra alia jam atestita losilo." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "La subskribo ne estas valida. Estas prudente forigi in de\n" "via losilaro." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "i tio estas subskribo, kiu ligas la uzantidentigilon al la losilo.\n" "Normale ne estas konsilinde forigi tian subskribon. Efektive, GnuPG\n" "eble ne povus uzi la losilon poste. Do, faru i tion, nur se la\n" "mem-subskribo estas ial nevalida, kaj dua mem-subskribo estas\n" "havebla." #: g10/helptext.c:221 #, fuzzy msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "ani la preferojn de iuj uzantidentigiloj (a nur la elektitaj)\n" "al la aktuala listo de preferoj. La dato de iuj trafitaj\n" "mem-subskriboj estos antaenigitaj je unu sekundo.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Bonvolu doni la pasfrazon; tio estas sekreta frazo \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Bonvolu ripeti la pasfrazon, por kontroli, ke vi bone scias, kion vi tajpis." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Donu la nomon de la dosiero, al kiu la subskribo aplikias" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Respondu per \"jes\", se la dosiero estu surskribita" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Bonvolu doni novan dosiernomon. Se vi premas nur ENEN, la implicita\n" "dosiero (montrita en parentezo) estos uzata." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Vi devus doni kialon por i tiu atestilo. Depende de la kunteksto, vi\n" "povas elekti el i tiu listo:\n" " \"losilo estas kompromitita\"\n" " Uzu i tion, se vi pensas, ke nerajtigita homo havis aliron al\n" " via sekreta losilo.\n" " \"losilo estas anstataigita\"\n" " Uzu i tion, se vi anstataigis la losilon per pli nova.\n" " \"losilo estas ne plu uzata\"\n" " Uzu i tion, se vi retiris i tiun losilon.\n" " \"Uzantidentigilo ne plu validas\"\n" " Uzu i tion por aserti, ke la uzantidentigilo ne plu estu uzata;\n" " normale oni uzas i tion por marki retadreson kiel nevalidan.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Se vi volas, vi povas doni tekston por priskribi, kial vi faras\n" "i tiun revokatestilon. Bonvolu fari i tiun tekston konciza.\n" "Malplena linio finas la tekston.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Nenia helpo disponata" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Nenia helpo disponata por '%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "aktualigi la fido-datenaron" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "aktualigi la fido-datenaron" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "neuzebla sekreta losilo" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "ignoras blokon de speco %d\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "%lu losiloj jam traktitaj\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr " Nombro traktita entute: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " ignoritaj novaj losiloj: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sen uzantidentigilo: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importitaj: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " neanitaj: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " novaj uzantidentigiloj: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " novaj sublosiloj: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " novaj subskriboj: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " novaj losilrevokoj: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " sekretaj losiloj legitaj: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr "sekretaj losiloj importitaj: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "sekretaj losiloj neanitaj: %lu\n" #: g10/import.c:353 #, fuzzy, c-format msgid " not imported: %lu\n" msgstr " importitaj: %lu" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " novaj subskriboj: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " sekretaj losiloj legitaj: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Vi subskribis la sekvajn uzantidentigilojn:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "%s-subskribo de: %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "losilo %08lX: mankas uzantidentigilo\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "ignoris '%s': %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "losilo %08lX: mankas sublosilo por losilbindado\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "losilo %08lX: akceptis ne-mem-subskribitan uzantidentigilon '" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "losilo %08lX: mankas valida uzantidentigilo\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "tio povas esti kazata de mankanta mem-subskribo\n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "losilo %08lX: publika losilo ne trovita: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "losilo %08lX: nova losilo - ignorita\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "neniu skribebla losilaro trovita: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "skribas al '%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "eraro dum skribado de losilaro '%s': %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "losilo %08lX: publika losilo importita\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "losilo %08lX: diferencas de nia kopio\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "losilo %08lX: ne povas trovi originalan losilblokon: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "losilo %08lX: ne povas legi originalan losilblokon: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "losilo %08lX: 1 nova uzantidentigilo\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "losilo %08lX: %d novaj uzantidentigiloj\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "losilo %08lX: 1 nova subskribo\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "losilo %08lX: %d novaj subskriboj\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "losilo %08lX: 1 nova sublosilo\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "losilo %08lX: %d novaj sublosiloj\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "losilo %08lX: %d novaj subskriboj\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "losilo %08lX: %d novaj subskriboj\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "losilo %08lX: %d novaj uzantidentigiloj\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "losilo %08lX: %d novaj uzantidentigiloj\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "losilo %08lX: ne anita\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "losilo '%s' ne trovita: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "skribas sekretan losilon al '%s'\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "losilo %08lX: sekreta losilo sen publika losilo - ignorita\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "mankas implicita sekreta losilaro: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "losilo %08lX: sekreta losilo importita\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "losilo %08lX: jam en sekreta losilaro\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "losilo %08lX: sekreta losilo ne trovita: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "losilo %08lX: publika losilo mankas - ne povas apliki revokatestilon\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "losilo %08lX: nevalida revokatestilo: %s - malakceptita\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "losilo %08lX: revokatestilo importita\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "losilo %08lX: mankas uzantidentigilo por subskribo\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "losilo %08lX: nerealigita publiklosila metodo\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "losilo %08lX: nevalida mem-subskribo\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "losilo %08lX: nerealigita publiklosila metodo\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "losilo %08lX: rekta losilsubskribo aldonita\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "losilo %08lX: mankas sublosilo por losilbindado\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "losilo %08lX: nevalida sublosila bindado\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "losilo %08lX: nevalida sublosila bindado\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "losilo %08lX: mankas sublosilo por losilbindado\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "losilo %08lX.%lu: Valida sublosilrevoko\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "losilo %08lX: nevalida sublosila bindado\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "losilo %08lX: ignoris uzantidentigilon '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "losilo %08lX: ignoris sublosilon\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "losilo %08lX: neeksportebla subskribo (klaso %02x) - ignorita\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "losilo %08lX: revokatestilo en malusta loko - ignorita\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "losilo %08lX: nevalida revokatestilo: %s - ignorita\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "losilo %08lX: revokatestilo en malusta loko - ignorita\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "losilo %08lX: neeksportebla subskribo (klaso %02x) - ignorita\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "losilo %08lX: trovis ripetitan uzantidentigilon - kunfandita\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "AVERTO: i tiu losilo estas revokita de sia posedanto!\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "AVERTO: i tiu losilo estas revokita de sia posedanto!\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "losilo %08lX: revokatestilo aldonita\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "losilo %08lX: rekta losilsubskribo aldonita\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "ignorita: sekreta losilo jam eestas\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "ignorita: sekreta losilo jam eestas\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "eraro dum kreado de losilaro '%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "losilaro '%s' kreita\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "eraro dum kreado de '%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "malsukcesis rekonstrui losilaran staplon: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revoko]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[mem-subskribo]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 malbona subskribo\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d malbonaj subskriboj\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 subskribo ne kontrolita pro manko de losilo\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d subskriboj ne kontrolitaj pro manko de losiloj\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 subskribo ne kontrolita pro eraro\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d subskriboj ne kontrolitaj pro eraroj\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 uzantidentigilo sen valida mem-subskribo estis trovita\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d uzantidentigiloj sen valida mem-subskribo estis trovitaj\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Bonvolu decidi, kiagrade vi fidas al i tiu uzanto uste\n" "kontroli la losilojn de aliaj uzantoj (rigardante pasportojn,\n" "kontrolante fingrospurojn el diversaj fontoj ...)?\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = Mi fidas iomete\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = Mi plene fidas\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, fuzzy, c-format msgid "User ID \"%s\" is revoked." msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 #, fuzzy msgid "Are you sure you still want to sign it? (y/N) " msgstr "u vi estas certa, ke vi ankora volas subskribi in?\n" #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr "" #: g10/keyedit.c:627 #, fuzzy, c-format msgid "User ID \"%s\" is expired." msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:655 #, fuzzy, c-format msgid "User ID \"%s\" is not self-signed." msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "u vere subskribi? " #: g10/keyedit.c:707 #, fuzzy, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Via aktuala subskribo sur \"%s\"\n" "estas loka subskribo.\n" "\n" "u vi volas igi in plena eksportebla subskribo?\n" #: g10/keyedit.c:716 #, fuzzy msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "" "Via aktuala subskribo sur \"%s\"\n" "estas loka subskribo.\n" "\n" "u vi volas igi in plena eksportebla subskribo?\n" #: g10/keyedit.c:730 #, fuzzy, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Via aktuala subskribo sur \"%s\"\n" "estas loka subskribo.\n" "\n" "u vi volas igi in plena eksportebla subskribo?\n" #: g10/keyedit.c:734 #, fuzzy msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "u vi volas, ke via subskribo eksvalidiu je la sama tempo? (j/n) " #: g10/keyedit.c:755 #, fuzzy, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Via aktuala subskribo sur \"%s\"\n" "estas loka subskribo.\n" "\n" "u vi volas igi in plena eksportebla subskribo?\n" #: g10/keyedit.c:759 #, fuzzy msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Via aktuala subskribo sur \"%s\"\n" "estas loka subskribo.\n" "\n" "u vi volas igi in plena eksportebla subskribo?\n" #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" jam estis %ssubskribita per losilo %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" jam estis %ssubskribita per losilo %08lX\n" #: g10/keyedit.c:788 #, fuzzy msgid "Do you want to sign it again anyway? (y/N) " msgstr "u vi estas certa, ke vi ankora volas subskribi in?\n" #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Nenio por subskribi per losilo %08lX\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "i tiu losilo eksvalidiis!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "i tiu losilo eksvalidios je %s.\n" #: g10/keyedit.c:847 #, fuzzy msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "u vi volas, ke via subskribo eksvalidiu je la sama tempo? (j/n) " #: g10/keyedit.c:882 #, fuzzy msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "eblas subskribi nur per PGP-2.x-stilaj losiloj kun --pgp2\n" #: g10/keyedit.c:884 #, fuzzy msgid "This would make the key unusable in PGP 2.x.\n" msgstr "i tiu mesao povas ne esti uzebla de PGP 2.x\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Kiom zorge vi kontrolis, ke la losilo, kiun vi subskribos, vere apartenas\n" "al la supre nomita persono? Se vi ne scias la respondon, donu \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Mi ne respondas.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Mi tute ne kontrolis.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Mi malzorge kontrolis.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Mi tre zorge kontrolis.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "" #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "u vi estas tute certa, ke vi volas subskribi i tiun losilon\n" "per via losilo: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "tio povas esti kazata de mankanta mem-subskribo\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "La subskribo estos markita kiel neeksportebla.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "La subskribo estos markita kiel nerevokebla.\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "La subskribo estos markita kiel neeksportebla.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "La subskribo estos markita kiel nerevokebla.\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "Mi tute ne kontrolis i tiun losilon.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "Mi malzorge kontrolis i tiun losilon.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "Mi tre zorge kontrolis i tiun losilon.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "u vere subskribi? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "subskribado malsukcesis: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "i tiu losilo ne estas protektita.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Sekretaj partoj de efa losilo ne estas disponataj.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "Sekretaj partoj de efa losilo ne estas disponataj.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "losilo estas protektita.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Ne povas redakti i tiun losilon: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Donu la novan pasfrazon por i tiu sekreta losilo.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "la pasfrazo ne estis uste ripetita; provu denove" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Vi ne deziras pasfrazon - tio verajne estas *malbona* ideo!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "u vi vere volas fari tion? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "movas losilsubskribon al la usta loko\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "skribi kaj fini" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "montri fingrospuron" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "listigi losilojn kaj uzantidentigilojn" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "elekti uzantidentigilon N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "elekti uzantidentigilon N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "revoki subskribojn" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "subskribi la losilon loke" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Sugesto: Elekti la uzantidentigilojn por subskribi\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "aldoni uzantidentigilon" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "aldoni foto-identigilon" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "forvii uzantidentigilon" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "al" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "forvii flankan losilon" #: g10/keyedit.c:1401 #, fuzzy msgid "add a revocation key" msgstr "aldoni flankan losilon" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "u vere aktualigi la preferojn por la elektitaj uzantidentigiloj? " #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "Vi ne povas ani la daton de eksvalidio de v3-losilo\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "marku uzantidentigilon kiel efan" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "de sekreta a publika listo iri al la alia" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "listigi preferojn (spertula)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "listigi preferojn (detale)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "u vere aktualigi la preferojn por la elektitaj uzantidentigiloj? " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "ne povis analizi URI de losilservilo\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "u vere aktualigi la preferojn por la elektitaj uzantidentigiloj? " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "ani la pasfrazon" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "ani la posedantofidon" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "u vere forigi iujn elektitajn uzantidentigilojn? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "aldoni uzantidentigilon" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "revoki flankan losilon" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "alti losilon" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "malalti losilon" #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "montri foto-identigilon" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "eraro dum legado de sekreta losilbloko '%s': %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Sekreta losilo estas havebla.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Bezonas la sekretan losilon por fari tion.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Bonvolu uzi la komandon \"toggle\" unue.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 #, fuzzy msgid "Key is revoked." msgstr "losilo estas revokita.\n" #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "u vere subskribi iujn uzantidentigilojn? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Sugesto: Elekti la uzantidentigilojn por subskribi\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "nekonata klaso de subskribo" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Tiu komando ne eblas en la reimo %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Vi devas elekti almena unu uzantidentigilon.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Vi ne povas forvii la lastan uzantidentigilon!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "u vere forigi iujn elektitajn uzantidentigilojn? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "u vere forigi i tiun uzantidentigilon? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "u vere forigi i tiun uzantidentigilon? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Vi devas elekti almena unu losilon.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "ne povas malfermi '%s': %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "eraro dum kreado de losilaro '%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Vi devas elekti almena unu losilon.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "u vi vere volas forvii la elektitajn losilojn? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "u vi vere volas forvii i tiun losilon? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "u vere forigi iujn elektitajn uzantidentigilojn? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "u vere forigi i tiun uzantidentigilon? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "u vi vere volas revoki i tiun losilon? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "u vi vere volas revoki la elektitajn losilojn? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "u vi vere volas revoki i tiun losilon? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "agordi liston de preferoj" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "u vere aktualigi la preferojn por la elektitaj uzantidentigiloj? " #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "u vere aktualigi la preferojn? " #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "u skribi anojn? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "u fini sen skribi anojn? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "aktualigo malsukcesis: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "aktualigo de sekreto malsukcesis: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "losilo ne anita, do aktualigo ne necesas.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "" #: g10/keyedit.c:2398 msgid "Features: " msgstr "" #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Notacio: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "i tiu losilo estas revokebla per %s losilo %s%s\n" #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "i tiu losilo estas revokebla per %s losilo %s%s\n" #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " (sentema)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "ne povas krei %s: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "rev" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [eksvalidios: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [eksvalidios: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " fido: %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " fido: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "i tiu losilo estas malaltita" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "rev" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "eksval" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Vi ne povas ani la daton de eksvalidio de v3-losilo\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "AVERTO: i tiu estas PGP2-stila losilo. Aldono de foto-identigilo eble\n" " kazos, ke iuj versioj de PGP malakceptos la losilon.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 #, fuzzy msgid "Are you sure you still want to add it? (y/N) " msgstr "u vi estas certa, ke vi ankora volas aldoni in? (j/n) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Ne eblas aldoni foto-identigilon al PGP2-stila losilo.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "u forvii i tiun bonan subskribon? (j/N/f)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "u forvii i tiun nevalidan subskribon? (j/N/f)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "u forvii i tiun nekonatan subskribon? (j/N/f)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "u vere forvii i tiun mem-subskribon? (j/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Forviis %d subskribon.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Forviis %d subskribojn.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nenio estis forviita.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "nevalida" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:3404 #, fuzzy msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "AVERTO: i tiu estas PGP2-stila losilo. Aldono de foto-identigilo eble\n" " kazos, ke iuj versioj de PGP malakceptos la losilon.\n" #: g10/keyedit.c:3415 #, fuzzy msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Ne eblas aldoni foto-identigilon al PGP2-stila losilo.\n" #: g10/keyedit.c:3435 #, fuzzy msgid "Enter the user ID of the designated revoker: " msgstr "Donu la losilgrandon" #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "AVERTO: i tiu losilo estas revokita de sia posedanto!\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "u vi estas certa, ke vi ankora volas subskribi in?\n" #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Bonvolu malelekti la sekretajn losilojn.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Bonvolu elekti maksimume unu flankan losilon.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "anas la daton de eksvalidio de flanka losilo.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "anas la daton de eksvalidio de la efa losilo.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Vi ne povas ani la daton de eksvalidio de v3-losilo\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Mankas responda subskribo en sekreta losilaro\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Bonvolu elekti precize unu uzantidentigilon.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "losilo %08lX: nevalida mem-subskribo\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "u vi estas certa, ke vi ankora volas subskribi in?\n" #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "u vi estas certa, ke vi ankora volas subskribi in?\n" #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Subskribo-notacio: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "u surskribi (j/N)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Mankas uzantidentigilo kun indekso %d\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Mankas uzantidentigilo kun indekso %d\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Mankas uzantidentigilo kun indekso %d\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "uzantidentigilo: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " subskribita per %08lX je %s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr "" #: g10/keyedit.c:4711 #, fuzzy, c-format msgid "This signature expired on %s.\n" msgstr "i tiu losilo eksvalidios je %s.\n" #: g10/keyedit.c:4715 #, fuzzy msgid "Are you sure you still want to revoke it? (y/N) " msgstr "u vi estas certa, ke vi ankora volas aldoni in? (j/n) " #: g10/keyedit.c:4719 #, fuzzy msgid "Create a revocation certificate for this signature? (y/N) " msgstr "u krei revokatestilon por i tiu subskribo? (j/N)" #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " subskribita per %08lX je %s%s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Vi subskribis la sekvajn uzantidentigilojn:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr "subskribi losilon nerevokeble" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " revokita de %08lX je %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Vi revokos la sekvajn subskribojn:\n" #: g10/keyedit.c:4851 #, fuzzy msgid "Really create the revocation certificates? (y/N) " msgstr "u vere krei la revokatestilojn? (j/N)" #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "mankas sekreta losilo\n" #: g10/keyedit.c:4951 #, fuzzy, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "Uzantidentigilo \"%s\" estas revokita.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "prefero %c%lu ripetita\n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "tro da '%c'-preferoj\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "tro da '%c'-preferoj\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "tro da '%c'-preferoj\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "nevalida signo en signoeno\n" #: g10/keygen.c:888 #, fuzzy msgid "writing direct signature\n" msgstr "skribas mem-subskribon\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "skribas mem-subskribon\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "skribas losilbindan subskribon\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "losilgrando nevalida; uzas %u bitojn\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "losilgrando rondigita is %u bitoj\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "subskribi" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "ifri datenojn" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (nur ifri)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Bonvolu elekti, kian losilon vi deziras:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA kaj ElGamal (implicita elekto)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA kaj ElGamal (implicita elekto)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (nur subskribi)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (nur subskribi)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (nur ifri)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (nur ifri)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA (nur ifri)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (nur ifri)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Kiun losilgrandon vi deziras? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Kiun losilgrandon vi deziras? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Petita losilgrando estas %u bitoj\n" #: g10/keygen.c:1722 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 "" "Bonvolu specifi, kiom longe la losilo validu.\n" " 0 = losilo neniam eksvalidios\n" " = losilo eksvalidios post n tagoj\n" " w = losilo eksvalidios post n semajnoj\n" " m = losilo eksvalidios post n monatoj\n" " y = losilo eksvalidios post n jaroj\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Bonvolu specifi, kiom longe la losilo validu.\n" " 0 = losilo neniam eksvalidios\n" " = losilo eksvalidios post n tagoj\n" " w = losilo eksvalidios post n semajnoj\n" " m = losilo eksvalidios post n monatoj\n" " y = losilo eksvalidios post n jaroj\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "losilo validu ...? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "losilo validu por ...? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "nevalida valoro\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "%s neniam eksvalidios\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "%s neniam eksvalidios\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "%s eksvalidios je %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "i tiu losilo eksvalidios je %s.\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Via sistemo ne povas montri datojn post 2038.\n" "Tamen, i estos uste traktata is 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "u tio estas usta (j/n)? " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Vi bezonas uzantidentigilon por identigi vian losilon; la programo\n" "konstruas la uzantidentigilon el Vera Nomo, Komento kaj Retadreso, jene:\n" " \"Heinrich Heine (la poeto) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Vera nomo: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Nevalida signo en nomo\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Nomo ne povas komencii per cifero\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Nomo devas havi almena 5 signojn\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Retadreso: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Nevalida retadreso\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Komento: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Nevalida signo en komento\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Vi uzas la signaron '%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Vi elektis i tiun uzantidentigilon:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Bonvolu ne meti la retadreson en la veran nomon a la komenton\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnKkAaBbFf" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "anu (N)omon, (K)omenton, (A)adreson, a (F)ini? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "anu (N)omon, (K)omenton, (A)adreson, a (B)one/(F)ini? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Bonvolu korekti la eraron unue\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Vi bezonas pasfrazon por protekti vian sekretan losilon.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Vi ne deziras pasfrazon; tio verajne estas *malbona* ideo!\n" "Mi tamen faros tiel. Vi povos iam ajn ani vian pasfrazon,\n" "uzante i tiun programon kun la opcio \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Ne devas krei multe da stokastaj datenoj. Estas konsilinde fari ion\n" "alian (tajpi e la klavaro, movi la muson, uzi la diskojn) dum la\n" "kreado de la primoj; tio donas al la stokastilo pli bonan ancon\n" "akiri sufie da entropio.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Kreado de losiloj nuligita.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "skribas publikan losilon al '%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "skribas sekretan losilon al '%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "skribas sekretan losilon al '%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "neniu skribebla publika losilaro trovita: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "neniu skribebla sekreta losilaro trovita: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "eraro dum skribado de publika losilaro '%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "eraro dum skribado de sekreta losilaro '%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "publika kaj sekreta losiloj kreitaj kaj subskribitaj.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Notu, ke i tiu losilo ne estas uzebla por ifrado. Vi eble volos\n" "uzi la komandon \"--edit-key\" por krei flankan losilon por tiu celo.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Kreado de losiloj malsukcesis: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "losilo estis kreita %lu sekundon en la estonteco (tempotordo a " "horloeraro)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "losilo estis kreita %lu sekundojn en la estonteco (tempotordo a " "horloeraro)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "NOTO: krei sublosilojn por v3-losiloj ne estas OpenPGP-kongrue\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "u vere krei? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "forvio de losilbloko malsukcesis: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "ne povas krei '%s': %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOTO: sekreta losilo %08lX eksvalidiis je %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "" #: g10/keylist.c:265 #, fuzzy msgid "Critical signature policy: " msgstr "Subskribo-gvidlinioj: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Subskribo-gvidlinioj: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 #, fuzzy msgid "Critical signature notation: " msgstr "Subskribo-notacio: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Subskribo-notacio: " #: g10/keylist.c:471 msgid "Keyring" msgstr "losilaro" #: g10/keylist.c:1516 #, fuzzy msgid "Primary key fingerprint:" msgstr "listigi losilojn kaj fingropurojn" #: g10/keylist.c:1518 #, fuzzy msgid " Subkey fingerprint:" msgstr " losilo-fingrospuro =" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 #, fuzzy msgid " Primary key fingerprint:" msgstr " losilo-fingrospuro =" #: g10/keylist.c:1527 #, fuzzy msgid " Subkey fingerprint:" msgstr " losilo-fingrospuro =" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " losilo-fingrospuro =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "enkirasigo malsukcesis: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "AVERTO: ekzistas 2 dosieroj kun sekretaj informoj.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s estas la neanita\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s estas la nova\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Bonvolu ripari i tiun eblan sekurecproblemon\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "kontrolas losilaron '%s'\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu losiloj kontrolitaj (%lu subskriboj)\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu losiloj kontrolitaj (%lu subskriboj)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: losilaro kreita\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "la donita gvidlinia URL por subskriboj ne validas\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "el" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "nevalida losilaro" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "losilo '%s' ne trovita: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "losilo '%s' ne trovita: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "petas la losilon %08lX de HKP-losilservilo %s ...\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "petas la losilon %08lX de HKP-losilservilo %s ...\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "seras pri \"%s\" e HKP-servilo %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "seras pri \"%s\" e HKP-servilo %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "seras pri \"%s\" e HKP-servilo %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "subskribita per via losilo %08lX je %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "seras pri \"%s\" e HKP-servilo %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "seras pri \"%s\" e HKP-servilo %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "nevalida losilaro" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "listigo de sekretaj losiloj malsukcesis: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "neniu losilservilo konata (uzu la opcion --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "losilservila eraro" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "losilservila eraro" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, fuzzy, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "%s: ne valida losilidentigilo\n" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "petas la losilon %08lX de HKP-losilservilo %s ...\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "petas la losilon %08lX de HKP-losilservilo %s ...\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "" #: g10/mainproc.c:294 #, fuzzy, c-format msgid "%s encrypted session key\n" msgstr "%s-ifritaj datenoj\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "ifrita per nekonata metodo %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "publika losilo estas %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "publiklosile ifritaj datenoj: bona DEK\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "ifrita per %u-bita %s-losilo, %08lX, kreita je %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " alinome \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "ifrita per %s-losilo, %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "publiklosila malifrado malsukcesis: %s\n" #: g10/mainproc.c:526 #, fuzzy, c-format msgid "encrypted with %lu passphrases\n" msgstr "Ripetu pasfrazon\n" #: g10/mainproc.c:528 #, fuzzy msgid "encrypted with 1 passphrase\n" msgstr "Ripetu pasfrazon\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "supozas %s ifritajn datenojn\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "ifro IDEA ne disponata, optimisme provas uzi %s anstatae\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "malifrado sukcesis\n" #: g10/mainproc.c:609 #, fuzzy msgid "WARNING: message was not integrity protected\n" msgstr "AVERTO: nenio estis eksportita\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "AVERTO: ifrita mesao estis manipulita!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "malifrado malsukcesis: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTO: sendinto petis konfidencon (\"for-your-eyes-only\")\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "originala dosiernomo='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "memstara revoko - uzu \"gpg --import\" por apliki in\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Bona subskribo de \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "kontrolo de subskribo estas malaltita\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "ne povas trakti i tiujn pluroblajn subskribojn\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "i tiu losilo eksvalidios je %s.\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " alinome \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Subskribo farita je %.*s per %s, losilo %08lX\n" #: g10/mainproc.c:1616 #, fuzzy msgid "Key available at: " msgstr "Nenia helpo disponata" #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "MALBONA subskribo de \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Eksvalidiinta subskribo de \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Bona subskribo de \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[malcerta]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " alinome \"" #: g10/mainproc.c:1937 #, fuzzy, c-format msgid "Signature expired %s\n" msgstr "i tiu losilo eksvalidios je %s.\n" #: g10/mainproc.c:1942 #, fuzzy, c-format msgid "Signature expires %s\n" msgstr "i tiu losilo eksvalidios je %s.\n" #: g10/mainproc.c:1945 #, fuzzy, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s-subskribo de: %s\n" #: g10/mainproc.c:1946 #, fuzzy msgid "binary" msgstr "efa" #: g10/mainproc.c:1947 msgid "textmode" msgstr "" #: g10/mainproc.c:1947 g10/trustdb.c:551 #, fuzzy msgid "unknown" msgstr "nekonata versio" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Ne povas kontroli subskribon: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "ne aparta subskribo\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "memstara subskribo de klaso 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "malnovstila subskribo (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "nevalida radikpaketo trovita en proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "ne povas malalti kreadon de core-dosieroj: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "aktualigo de fido-datenaro malsukcesis: %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fido-datenaro: lego malsukcesis (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "ne povas trakti publiklosilan metodon %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "NOTO: ifrad-metodo %d ne trovita en preferoj\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "nerealigita ifrad-metodo" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "%s-subskribo de: %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "NOTO: ifrad-metodo %d ne trovita en preferoj\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = bonvolu montri pli da informoj\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "gpg-agent ne estas disponata en i tiu sesio\n" #: g10/misc.c:729 #, fuzzy, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/misc.c:733 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "AVERTO: '%s' estas malplena dosiero\n" #: g10/misc.c:755 #, fuzzy msgid "Uncompressed" msgstr "ne traktita" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "ne traktita" #: g10/misc.c:907 #, fuzzy, c-format msgid "this message may not be usable by %s\n" msgstr "i tiu mesao povas ne esti uzebla de PGP 2.x\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "legas opciojn el '%s'\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "nekonata implicita ricevonto '%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "nekonata klaso de subskribo" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Dosiero '%s' ekzistas. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "u surskribi (j/N)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: nekonata sufikso\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Donu novan dosiernomon" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "skribas al la normala eligo\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "supozas subskribitajn datenojn en '%s'\n" #: g10/openfile.c:437 #, fuzzy, c-format msgid "new configuration file `%s' created\n" msgstr "%s: nova opcio-dosiero kreita\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: dosierujo kreita\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "ne povas trakti publiklosilan metodon %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpaketo de speco %d havas altitan \"critical bit\"\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent ne estas disponata en i tiu sesio\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "malbona valoro de la media variablo GPG_AGENT_INFO\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "protokolversio %d de gpg-agent ne estas uzebla\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "ne povas konektii al '%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problemo kun agento - malaltas uzadon de agento\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (eflosilo %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Vi bezonas pasfrazon por mallosi la sekretan losilon por la uzanto:\n" "\"%.*s\"\n" "%u-bita %s losilo, ID %08lX, kreita je %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Ripetu pasfrazon\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Donu pasfrazon\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "nuligita de uzanto\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "ne povas kontroli pasvorton en neinteraga reimo\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Donu pasfrazon: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Vi bezonas pasfrazon por mallosi la sekretan losilon\n" "por la uzanto: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bita %s-losilo, %08lX, kreita je %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Ripetu pasfrazon: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "" #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "ne povas malfermi %s: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "u vi estas certa, ke vi ankora volas subskribi in?\n" #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "%s: ne estas fido-datenaro\n" #: g10/photoid.c:163 #, fuzzy msgid "Is this photo correct (y/N/q)? " msgstr "u tio estas usta (j/n)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 #, fuzzy msgid "unable to display photo ID!\n" msgstr "ne povas malfermi %s: %s\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Nenia kialo specifita" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "losilo estas anstataigita." #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "losilo estas kompromitita" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "losilo estas ne plu uzata" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Uzantidentigilo ne plu validas" #: g10/pkclist.c:75 #, fuzzy msgid "reason for revocation: " msgstr "Kialo por revoko: " #: g10/pkclist.c:92 #, fuzzy msgid "revocation comment: " msgstr "Komento pri revoko: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMfFsS" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Nenia fidovaloro atribuita al:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " alinome \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "i tiu losilo verajne apartenas al la posedanto\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Ne scias\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Ni NE fidas i tiun losilon\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Mi fidas absolute\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = reen al la efmenuo\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " s = supersalti i tiun losilon\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " f = fini\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Via decido? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "u vi vere volas ani i tiun losilon al absoluta fido? " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Atestiloj, kiuj kondukas al absolute fidata losilo:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lX: Estas nenia indiko, ke i tiu losilo vere apartenas al la posedanto\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lX: Estas nenia indiko, ke i tiu losilo vere apartenas al la posedanto\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "i tiu losilo verajne apartenas al la posedanto\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "i tiu losilo apartenas al ni\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NE estas certe, ke la losilo apartenas al sia posedanto.\n" "Se vi *vere* scias, kion vi faras, vi povas respondi al\n" "la sekva demando per \"jes\"\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "u tamen uzi i tiun losilon? " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "AVERTO: Uzas nefidatan losilon!\n" #: g10/pkclist.c:511 #, fuzzy msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "AVERTO: i tiu losilo estas revokita de sia posedanto!\n" #: g10/pkclist.c:520 #, fuzzy msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "AVERTO: i tiu losilo estas revokita de sia posedanto!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVERTO: i tiu losilo estas revokita de sia posedanto!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " Tio povas signifi, ke la subskribo estas falsa.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVERTO: i tiu sublosilo estas revokita de sia posedanto!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Noto: i tiu losilo estas malaltita.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Noto: i tiu losilo eksvalidiis!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVERTO: i tiu losilo ne estas atestita kun fidata subskribo!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Estas nenia indiko, ke la subskribo apartenas al la posedanto.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVERTO: Ni NE fidas i tiun losilon!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " La subskribo verajne estas FALSA.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVERTO: i tiu losilo ne estas atestita kun sufie fidataj subskriboj!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Ne estas certe, ke la subskribo apartenas al la posedanto.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: ignorita: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: ignorita: publika losilo jam eestas\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Vi ne specifis uzantidentigilon. (Vi povas uzi \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Donu la uzantidentigilon. Finu per malplena linio: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Uzantidentigilo ne ekzistas.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "ignorita: publika losilo jam difinita kiel implicita ricevonto\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Publika losilo estas malaltita.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "ignorita: publika losilo jam agordita\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "nekonata implicita ricevonto '%s'\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: ignorita: publika losilo estas malaltita\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "mankas validaj adresitoj\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "datenoj ne savitaj; uzu la opcion \"--output\" por savi ilin\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "eraro dum kreado de '%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Aparta subskribo.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Bonvolu doni la nomon de la dosiero: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "legas la normalan enigon ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "mankas subskribitaj datenoj\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "ne povas malfermi subskribitan dosieron '%s'\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "nenomita ricevonto; provas per sekreta losilo %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "bone; ni estas la nenomita ricevonto.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "malnova kodado de DEK ne estas realigita\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "ifrad-metodo %d%s estas nekonata a malaltita\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "NOTO: ifrad-metodo %d ne trovita en preferoj\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTO: sekreta losilo %08lX eksvalidiis je %s\n" #: g10/pubkey-enc.c:302 #, fuzzy msgid "NOTE: key has been revoked" msgstr "losilo %08lX: losilo estas revokita!\n" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, fuzzy, c-format msgid "build_packet failed: %s\n" msgstr "aktualigo malsukcesis: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "losilo %08lX: mankas uzantidentigilo\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "u krei revokatestilon por i tiu subskribo? (j/N)" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "" #: g10/revoke.c:342 g10/revoke.c:564 #, fuzzy, c-format msgid "make_keysig_packet failed: %s\n" msgstr "listigo de losilblokoj malsukcesis: %s\n" #: g10/revoke.c:405 #, fuzzy msgid "Revocation certificate created.\n" msgstr "losilo %08lX: revokatestilo aldonita\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "losilo '%s' ne trovita: %s\n" #: g10/revoke.c:496 #, fuzzy, c-format msgid "no corresponding public key: %s\n" msgstr "skribas publikan losilon al '%s'\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "u krei revokatestilon por i tiu subskribo? (j/N)" #: g10/revoke.c:531 #, fuzzy msgid "unknown protection algorithm\n" msgstr "nekonata densig-metodo" #: g10/revoke.c:539 #, fuzzy msgid "NOTE: This key is not protected!\n" msgstr "i tiu losilo ne estas protektita.\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" #: g10/revoke.c:631 #, fuzzy msgid "Please select the reason for the revocation:\n" msgstr "Kialo por revoko: " #: g10/revoke.c:641 msgid "Cancel" msgstr "" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "" #: g10/revoke.c:684 #, fuzzy msgid "Enter an optional description; end it with an empty line:\n" msgstr "" "\n" "Donu la uzantidentigilon. Finu per malplena linio: " #: g10/revoke.c:712 #, fuzzy, c-format msgid "Reason for revocation: %s\n" msgstr "Kialo por revoko: " #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "u tamen uzi i tiun losilon? " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "sekretaj losilpartoj ne estas disponataj\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "protekto-metodo %d%s ne estas realigita\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "protekto-metodo %d%s ne estas realigita\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Nevalida pasfrazo; bonvolu provi denove" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVERTO: Malforta losilo trovita - bonvolu ani la pasfrazon denove.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "malforta losilo kreita - provas denove\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "ne povas eviti malfortajn losilojn por simetria ifro; provis %d fojojn!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "la publika losilo estas %lu sekundon pli nova ol la subskribo\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "la publika losilo estas %lu sekundojn pli nova ol la subskribo\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "losilo estis kreita %lu sekundon en la estonteco (tempotordo a " "horloeraro)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "losilo estis kreita %lu sekundojn en la estonteco (tempotordo a " "horloeraro)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTO: subskribo-losilo %08lX eksvalidiis je %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s-subskribo de: %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "supozas malbonan subskribon pro nekonata \"critical bit\"\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "losilo %08lX: mankas sublosilo por losilbindado\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "losilo %08lX: mankas sublosilo por losilbindado\n" #: g10/sign.c:90 #, fuzzy, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "AVERTO: ne povas %%-kompletigi gvidlinian URL (tro granda); uzas sen " "kompletigo.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "AVERTO: ne povas %%-kompletigi gvidlinian URL (tro granda); uzas sen " "kompletigo.\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "AVERTO: ne povas %%-kompletigi gvidlinian URL (tro granda); uzas sen " "kompletigo.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "kontrolo de kreita subskribo malsukcesis: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s-subskribo de: %s\n" #: g10/sign.c:760 #, fuzzy msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "eblas subskribi nur per PGP-2.x-stilaj losiloj kun --pgp2\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "NOTO: ifrad-metodo %d ne trovita en preferoj\n" #: g10/sign.c:960 msgid "signing:" msgstr "subskribas:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "eblas klartekste subskribi nur per PGP-2.x-stilaj losiloj kun --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s ifrado estos aplikata\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "losilo ne estas markita kiel malsekura - ne povas uzi in kun falsa " "stokastilo!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "ignoris '%s': ripetita\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "ignoris '%s': %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "ignorita: sekreta losilo jam eestas\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "ignoris '%s': i tio estas PGP-kreita ElGamal-losilo, kiu ne estas sekura " "por subskribado!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "fido-datenaro %lu, speco %d: skribo malsukcesis: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "eraro dum legado de '%s': %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "pasfrazo estas tro longa\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "%s: nevalida dosiero-versio %d\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "importi posedantofido-valorojn" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "eraro dum legado de dosieruja registro: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "kiraso: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "fido-datenaro: sync malsukcesis: %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "ne povas krei '%s': %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "ne povas malfermi '%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "fido-datenaro loko %lu: lseek malsukcesis: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "fido-datenaro loko %lu: skribo malsukcesis (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "fido-datenaro-transakcio tro granda\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "ne povas fermi '%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: dosierujo ne ekzistas!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: malsukcesis krei versiregistron: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: nevalida fido-datenaro kreita\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: fido-datenaro kreita\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: nevalida fido-datenaro\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: malsukcesis krei haktabelon: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: eraro dum aktualigo de versiregistro: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: eraro dum legado de versiregistro: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: eraro dum skribado de versiregistro: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "fido-datenaro: lseek malsukcesis: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "fido-datenaro: lego malsukcesis (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: ne estas fido-datenaro\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versiregistro kun registronumero %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: nevalida dosiero-versio %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: eraro dum legado de libera registro: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: eraro dum skribo de dosieruja registro: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: malsukcesis nuligi registron: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: malsukcesis aldoni registron: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: fido-datenaro kreita\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "ne povas trakti tekstliniojn pli longajn ol %d signojn\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "enigata linio pli longa ol %d signojn\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "'%s' ne estas valida longa losilidentigilo\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "losilo %08lX: akceptita kiel fidata losilo\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "losilo %08lX aperas pli ol unufoje en la fido-datenaro\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "losilo %08lX: mankas publika losilo por fidata losilo - ignorita\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "losilo markita kiel absolute fidata.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "fido-datenaro loko %lu, petospeco %d: lego malsukcesis: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "fido-registro %lu ne havas petitan specon %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "rev" #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "eksval" #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "nekonata versio" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 msgid "never" msgstr "" #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "kontrolo de fido-datenaro ne estas bezonata\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "sekva kontrolo de fido-datenaro je %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "kontrolo de fido-datenaro ne estas bezonata\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "kontrolo de fido-datenaro ne estas bezonata\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "publika losilo %08lX ne trovita: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "kontrolas la fido-datenaron\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "" #: g10/trustdb.c:2321 #, fuzzy msgid "no ultimately trusted keys found\n" msgstr "publika losilo de absolute fidata losilo %08lX ne trovita\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "publika losilo de absolute fidata losilo %08lX ne trovita\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "fido-datenaro %lu, speco %d: skribo malsukcesis: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "ne eblis kontroli la subskribon.\n" "Bonvolu memori, ke la subskribodosiero (.sig a .asc)\n" "devas esti la unua dosiero donita en la komandlinio.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "enigata linio %u tro longa, a mankas linifino\n" #: util/errors.c:53 msgid "general error" msgstr "enerala eraro" #: util/errors.c:54 msgid "unknown packet type" msgstr "nekonata paketo-speco" #: util/errors.c:55 msgid "unknown version" msgstr "nekonata versio" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "nekonata publiklosila metodo" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "nekonata kompendi-metodo" #: util/errors.c:58 msgid "bad public key" msgstr "malbona publika losilo" #: util/errors.c:59 msgid "bad secret key" msgstr "malbona sekreta losilo" #: util/errors.c:60 msgid "bad signature" msgstr "malbona subskribo" #: util/errors.c:61 msgid "checksum error" msgstr "eraro en kontrolsumo" #: util/errors.c:62 msgid "bad passphrase" msgstr "malbona pasfrazo" #: util/errors.c:63 msgid "public key not found" msgstr "publika losilo ne trovita" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "nekonata ifrad-metodo" #: util/errors.c:65 msgid "can't open the keyring" msgstr "ne povas malfermi la losilaron" #: util/errors.c:66 msgid "invalid packet" msgstr "nevalida paketo" #: util/errors.c:67 msgid "invalid armor" msgstr "nevalida kiraso" #: util/errors.c:68 msgid "no such user id" msgstr "uzantidentigilo ne ekzistas" #: util/errors.c:69 msgid "secret key not available" msgstr "sekreta losilo ne havebla" #: util/errors.c:70 msgid "wrong secret key used" msgstr "malusta sekreta losilo uzata" #: util/errors.c:71 msgid "not supported" msgstr "ne realigita" #: util/errors.c:72 msgid "bad key" msgstr "malbona losilo" #: util/errors.c:73 msgid "file read error" msgstr "legeraro e dosiero" #: util/errors.c:74 msgid "file write error" msgstr "skriberaro e dosiero" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "nekonata densig-metodo" #: util/errors.c:76 msgid "file open error" msgstr "eraro e malfermo de dosiero" #: util/errors.c:77 msgid "file create error" msgstr "eraro e kreo de dosiero" #: util/errors.c:78 msgid "invalid passphrase" msgstr "nevalida pasfrazo" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "nerealigita publiklosila metodo" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "nerealigita ifrad-metodo" #: util/errors.c:81 msgid "unknown signature class" msgstr "nekonata klaso de subskribo" #: util/errors.c:82 msgid "trust database error" msgstr "eraro en fido-datenaro" #: util/errors.c:83 msgid "bad MPI" msgstr "malbona MPI" #: util/errors.c:84 msgid "resource limit" msgstr "trafis rimedolimon" #: util/errors.c:85 msgid "invalid keyring" msgstr "nevalida losilaro" #: util/errors.c:86 msgid "bad certificate" msgstr "malbona atestilo" #: util/errors.c:87 msgid "malformed user id" msgstr "misformita uzantidentigilo" #: util/errors.c:88 msgid "file close error" msgstr "eraro e fermo de dosiero" #: util/errors.c:89 msgid "file rename error" msgstr "eraro e renomado de dosiero" #: util/errors.c:90 msgid "file delete error" msgstr "eraro e forvio de dosiero" #: util/errors.c:91 msgid "unexpected data" msgstr "neatendita dateno" #: util/errors.c:92 msgid "timestamp conflict" msgstr "malkongruo de tempostampoj" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "neuzebla publiklosila metodo" #: util/errors.c:94 msgid "file exists" msgstr "dosiero ekzistas" #: util/errors.c:95 msgid "weak key" msgstr "malforta losilo" #: util/errors.c:96 msgid "invalid argument" msgstr "nevalida argumento" #: util/errors.c:97 msgid "bad URI" msgstr "malbona URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "nerealigita URI" #: util/errors.c:99 msgid "network error" msgstr "reteraro" #: util/errors.c:101 msgid "not encrypted" msgstr "ne ifrita" #: util/errors.c:102 msgid "not processed" msgstr "ne traktita" #: util/errors.c:104 msgid "unusable public key" msgstr "neuzebla publika losilo" #: util/errors.c:105 msgid "unusable secret key" msgstr "neuzebla sekreta losilo" #: util/errors.c:106 msgid "keyserver error" msgstr "losilservila eraro" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "nuligita de uzanto\n" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "ne ifrita" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "mankas subskribitaj datenoj\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... i tio estas cimo (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "vi trovis cimon ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 #, fuzzy msgid "yes" msgstr "jes" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "jJ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "ne" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "fini" #: util/miscutil.c:443 msgid "qQ" msgstr "fF" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "k" #: util/secmem.c:96 #, fuzzy msgid "WARNING: using insecure memory!\n" msgstr "Averto: uzas malsekuran memoron!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "bonvolu vidi http://www.gnupg.org/documentation/faqs.html por pliaj " "informoj\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "operacio ne eblas sen sekura memoro kun komenca valoro\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(eble vi uzis la malustan programon por i tiu tasko)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "Averto: malsekuraj permesoj sur %s \"%s\"\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "la aldonao por la ifro IDEA en eestas\n" #~ msgid "Command> " #~ msgstr "Komando> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA-losilparo havos 1024 bitojn.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "la fido-datenaro estas fuita; bonvolu ruli \"gpg --fix-trustdb\".\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "bonvolu vidi http://www.gnupg.org/why-not-idea.html por pliaj informoj\n" #, fuzzy #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "notacia nomo devas enhavi nur literojn, ciferojn, punktojn a substrekojn " #~ "kaj fini per '='\n" #, fuzzy #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "notacia valoro ne povas enhavi stirsignojn\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "notacia valoro ne povas enhavi stirsignojn\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "notacia valoro ne povas enhavi stirsignojn\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "AVERTO: nevalida notacia dateno trovita\n" #~ msgid "not human readable" #~ msgstr "ne homlegebla" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "legi la opciojn el dosiero" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "legi la opciojn el dosiero" #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [eksvalidios: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "losilo %08lX: neeksportebla subskribo (klaso %02x) - ignorita\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "Averto: malsekura posedeco sur %s \"%s\"\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "Mankas uzantidentigilo por losilo\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "eraro dum kreado de pasfrazo: %s\n" #, fuzzy #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "nekonata ifrad-metodo" #~ msgid "can't set client pid for the agent\n" #~ msgstr "ne povas agordi kliento-PID por la agento\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "ne povas akiri lego-FD de servilo por la agento\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "ne povas akiri skribo-FD de servilo por la agento\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "komunikproblemo kun gpg-agent\n" #~ msgid "passphrase too long\n" #~ msgstr "pasfrazo estas tro longa\n" #~ msgid "invalid response from agent\n" #~ msgstr "nevalida respondo de agento\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "problemo kun agento: agento redonas 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "elekti flankan losilon N" #~ msgid "list signatures" #~ msgstr "listigi subskribojn" #~ msgid "sign the key" #~ msgstr "subskribi la losilon" #~ msgid "add a secondary key" #~ msgstr "aldoni flankan losilon" #~ msgid "delete signatures" #~ msgstr "forvii subskribojn" #~ msgid "change the expire date" #~ msgstr "ani la daton de eksvalidio" #~ msgid "set preference list" #~ msgstr "agordi liston de preferoj" #~ msgid "updated preferences" #~ msgstr "aktualigitaj preferoj" #~ msgid "No secondary key with index %d\n" #~ msgstr "Mankas flanka losilo kun indekso %d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key uzantidentigilo" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key uzantidentigilo" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "fari apartan subskribon" #~ msgid "sign the key non-revocably" #~ msgstr "subskribi la losilon nerevokeble" #~ msgid "sign the key locally and non-revocably" #~ msgstr "subskribi la losilon loke kaj nerevokeble" #~ msgid "q" #~ msgstr "f" #~ msgid "help" #~ msgstr "helpo" #~ msgid "list" #~ msgstr "listo" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "spuri" #, fuzzy #~ msgid "name" #~ msgstr "en" #, fuzzy #~ msgid "login" #~ msgstr "lsub" #, fuzzy #~ msgid "cafpr" #~ msgstr "fsp" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "enerala eraro" #~ msgid "passwd" #~ msgstr "pasf" #~ msgid "save" #~ msgstr "skribi" #~ msgid "fpr" #~ msgstr "fsp" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "losilo" #~ msgid "check" #~ msgstr "kontroli" #~ msgid "c" #~ msgstr "k" #~ msgid "sign" #~ msgstr "subskribi" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "subskribi" #~ msgid "lsign" #~ msgstr "lsub" #~ msgid "nrsign" #~ msgstr "nrsub" #~ msgid "nrlsign" #~ msgstr "nrlsub" #~ msgid "adduid" #~ msgstr "aluid" #~ msgid "addphoto" #~ msgstr "alfoto" #~ msgid "deluid" #~ msgstr "foruid" #~ msgid "delphoto" #~ msgstr "forfoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "al" #~ msgid "delkey" #~ msgstr "for" #, fuzzy #~ msgid "addrevoker" #~ msgstr "revokita" #~ msgid "delsig" #~ msgstr "forsig" #~ msgid "expire" #~ msgstr "eksval" #~ msgid "primary" #~ msgstr "efa" #~ msgid "toggle" #~ msgstr "alia" #~ msgid "t" #~ msgstr "a" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "monpref" #~ msgid "setpref" #~ msgstr "agpref" #~ msgid "updpref" #~ msgstr "aktpref" #, fuzzy #~ msgid "keyserver" #~ msgstr "losilservila eraro" #~ msgid "trust" #~ msgstr "fido" #~ msgid "revsig" #~ msgstr "revsig" #, fuzzy #~ msgid "revuid" #~ msgstr "revsig" #~ msgid "revkey" #~ msgstr "rev" #~ msgid "disable" #~ msgstr "el" #~ msgid "enable" #~ msgstr "en" #~ msgid "showphoto" #~ msgstr "monfoto" #~ 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 "" #~ "Kreos novan %s-losilparon.\n" #~ " minimuma losilgrando estas 768 bitoj\n" #~ " implicita losilgrando estas 1024 bitoj\n" #~ " plej granda rekomendata losilgrando estas 2048 bitoj\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA permesas losilgrandon nur inter 512 kaj 1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "losilgrando tro malgranda; 1024 estas plej eta valoro por RSA.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "losilgrando tro malgranda; 768 estas plej eta permesata valoro.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "losilgrando tro granda; %d estas plej granda permesata valoro.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "losilgrandoj pli grandaj ol 2048 ne estas rekomendataj,\n" #~ "ar la komputado daras TRE longe!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "u vi estas certa, ke vi deziras i tiun losilgrandon? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Bone, sed pripensu, ke la elradiado de viaj ekrano kaj klavaro estas tre " #~ "facile kaptebla!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Eksperimentaj metodoj ne estu uzataj!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "i tiu ifrad-metodo estas malrekomendata; bonvolu uzi pli normalan!\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "skribas al '%s'\n" #, fuzzy #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "ne povas fari tion en neinteraga reimo\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr "losilo '%s' ne trovita: %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "ne povas krei '%s': %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "ne povas malfermi %s: %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " alinome \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "losilo %08lX: losilo estas revokita!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "losilo %08lX: sublosilo estas revokita!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: losilo eksvalidiis\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Ni NE fidas i tiun losilon\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (subskribi kaj ifri)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA (nur subskribi)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA (subskribi kaj ifri)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA (nur ifri)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA (subskribi kaj ifri)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: ne povas malfermi: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: AVERTO: malplena dosiero\n" #~ msgid "can't open %s: %s\n" #~ msgstr "ne povas malfermi %s: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = Mi fidas iomete\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = Mi plene fidas\n" #, fuzzy #~ msgid "expires" #~ msgstr "eksval" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "subskribita per via losilo %08lX je %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: ne povas aliri: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: ne povas krei loson\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: ne povas krei loson\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: ne povas krei: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: ne povas krei dosierujon: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Se vi tamen volas uzi i tiun revokitan losilon, respondu per \"jes\"." #, fuzzy #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "ne povas malfermi %s: %s\n" #, fuzzy #~ msgid "can't open file: %s\n" #~ msgstr "ne povas malfermi %s: %s\n" #, fuzzy #~ msgid "error: no ownertrust value\n" #~ msgstr "eksporti la posedantofido-valorojn" #~ msgid " (main key ID %08lX)" #~ msgstr " (eflosilo %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! sublosilo estas revokita: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- falsita revoko trovita\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? problemo en kontrolo de revoko: %s\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr " [eksvalidios: %s]" #~ msgid " [expires: %s]" #~ msgstr " [eksvalidios: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "rev" #~ msgid "can't create %s: %s\n" #~ msgstr "ne povas krei %s: %s\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[dosieroj]|ifri dosierojn" #~ msgid "store only" #~ msgstr "nur skribi" #~ msgid "|[files]|decrypt files" #~ msgstr "|[dosieroj]|malifri dosierojn" #~ msgid "sign a key locally and non-revocably" #~ msgstr "subskribi losilon loke kaj nerevokeble" #~ msgid "list only the sequence of packets" #~ msgstr "listigi nur la sinsekvon de paketoj" #~ msgid "export the ownertrust values" #~ msgstr "eksporti la posedantofido-valorojn" #~ msgid "unattended trust database update" #~ msgstr "senintervena aktualigo de fido-datenaro" #~ msgid "fix a corrupted trust database" #~ msgstr "ripari fuitan fido-datenaron" #~ msgid "De-Armor a file or stdin" #~ msgstr "elkirasigi dosieron a la normalan enigon" #~ msgid "En-Armor a file or stdin" #~ msgstr "enkirasigi dosieron a la normalan enigon" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NOMO|uzi NOMOn kiel implicitan ricevonton" #~ msgid "use the default key as default recipient" #~ msgstr "uzi la implicitan losilon kiel implicitan ricevonton" #~ msgid "don't use the terminal at all" #~ msgstr "tute ne uzi la terminalon" #~ msgid "force v3 signatures" #~ msgstr "devigi v3-subskribojn" #~ msgid "do not force v3 signatures" #~ msgstr "ne devigi v3-subskribojn" #~ msgid "force v4 key signatures" #~ msgstr "devigi v4-subskribojn" #~ msgid "do not force v4 key signatures" #~ msgstr "ne devigi v4-losilsubskribojn" #~ msgid "always use a MDC for encryption" #~ msgstr "iam uzi sigelon (MDC) por ifrado" #~ msgid "never use a MDC for encryption" #~ msgstr "neniam uzi MDC por ifrado" #~ msgid "use the gpg-agent" #~ msgstr "uzi gpg-agent" #~ msgid "batch mode: never ask" #~ msgstr "neinteraga reimo: neniam demandi" #~ msgid "assume yes on most questions" #~ msgstr "supozi \"jes\" e la plej multaj demandoj" #~ msgid "assume no on most questions" #~ msgstr "supozi \"ne\" e la plej multaj demandoj" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "aldoni i tiun losilaron al la listo de losilaroj" #~ msgid "add this secret keyring to the list" #~ msgstr "aldoni i tiun sekretan losilaron al la listo" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NOMO|uzi NOMOn kiel la implicitan sekretan losilon" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|SERVILO|uzi i tiun losilservilon por seri losilojn" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NOMO|difini NOMOn kiel la signaron de la terminalo" #~ msgid "|[file]|write status info to file" #~ msgstr "|[dosiero]|skribi statusinformojn al dosiero" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|KEYID|fidi i tiun losilon absolute" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|DOSIERO|legi aldonan bibliotekon DOSIERO" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "imiti la reimon priskribitan en RFC 1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "alti iujn paket-, ifrad- kaj kompendi-opciojn al OpenPGP-konduto" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "alti iujn paket-, ifrad- kaj kompendi-opciojn al PGP-2.x-konduto" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|uzi pasfraz-reimon N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "|NOMO|uzi kompendi-metodon NOMO por pasfrazoj" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NOMO|uzi ifrad-metodon NOMO por pasfrazoj" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NOMO|uzi ifrad-metodon NOMO" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NOMO|uzi kompendi-metodon NOMO" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|uzi densig-metodon N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "forigi la losilidentigilon de ifritaj paketoj" #~ msgid "Show Photo IDs" #~ msgstr "Montri Foto-Identigilojn" #~ msgid "Don't show Photo IDs" #~ msgstr "Ne montri Foto-Identigilojn" #~ msgid "Set command line to view Photo IDs" #~ msgstr "Agordi komandlinion por montri Foto-Identigilojn" #, fuzzy #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "la densig-metodo devas esti inter %d kaj %d\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "la densig-metodo devas esti inter %d kaj %d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Ne estas certe, ke i tiu losilo vere apartenas al la posedanto,\n" #~ "sed i tamen estas akceptita\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "prefero %c%lu ne estas valida\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "losilo %08lX: ne estas RFC-2440-losilo - ignorita\n" #, fuzzy #~ msgid " (default)" #~ msgstr "malifri datenojn (implicita elekto)" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX kreita: %s eksvalidios: %s" #~ msgid "Policy: " #~ msgstr "Gvidlinio: " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "ne povas akiri losilon de losilservilo: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "eraro dum sendo al '%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "sukceso dum sendo al '%s' (statuso=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "malsukceso dum sendo al '%s': statuso=%u\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "ne povas seri e losilservilo: %s\n" #, fuzzy #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "i tio estas PGP-kreita ElGamal-losilo, kiu NE estas sekura por " #~ "subskribado!\n" #, fuzzy #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "losilo estis kreita %lu sekundon en la estonteco (tempotordo a " #~ "horloeraro)\n" #, fuzzy #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "losilo estis kreita %lu sekundojn en la estonteco (tempotordo a " #~ "horloeraro)\n" #, fuzzy #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "losilo markita kiel absolute fidata.\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "kontrolas e profundo %d subskribita=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/" #~ "%d\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Elektu la uzotan metodon.\n" #~ "\n" #~ "DSA (alinome DSS) estas la subskrib-metodo uzebla nur por subskribado.\n" #~ "i tio estas la rekomendata metodo, ar kontrolado e DSA-subskriboj\n" #~ "estas multe pli rapida ol e ElGamal.\n" #~ "\n" #~ "ElGamal estas metodo uzebla kaj por subskribado kaj por ifrado.\n" #~ "OpenPGP distingas inter du specoj de i tiu metodo: nurifra, kaj\n" #~ "subskriba-kaj-ifra; efektive temas pri la sama, sed iuj parametroj\n" #~ "devas esti elektitaj en speciala maniero por krei sekuran losilon\n" #~ "por subskribado: i tiu programo faras tion, sed aliaj OpenPGP-\n" #~ "programoj ne devas kompreni la subskriban-kaj-ifran specon.\n" #~ "\n" #~ "La unua (efa) losilo devas esti losilo uzebla por subskribado;\n" #~ "tial la nurifra ElGamal-losilo ne estas proponata en i tiu menuo." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Kvankam i tiuj losiloj estas difinitaj en RFC 2440, ili ne estas\n" #~ "rekomendataj, ar ili ne estas komprenataj de iuj programoj, kaj\n" #~ "subskriboj kreitaj per ili etas iom grandaj kaj malrapide kontroleblaj." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu losiloj jam kontrolitaj (%lu subskriboj)\n" #, fuzzy #~ msgid "key %08lX incomplete\n" #~ msgstr "losilo %08lX: mankas uzantidentigilo\n" #, fuzzy #~ msgid "quit|quit" #~ msgstr "fini" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (subskribi kaj ifri)\n" #, fuzzy #~ msgid "Create anyway? " #~ msgstr "u tamen uzi i tiun losilon? " #, fuzzy #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "nevalida kompendi-metodo '%s'\n" #~ msgid "The use of this algorithm is deprecated - create anyway? " #~ msgstr "Uzado de i tiu algoritmo estas malrekomendata - u tamen krei? " #, fuzzy #~ msgid "" #~ "you have to start GnuPG again, so it can read the new configuration file\n" #~ msgstr "" #~ "vi devas restartigi GnuPG, por ke i povu legi la novan opcio-dosieron\n" #~ msgid "changing permission of `%s' failed: %s\n" #~ msgstr "ano de permesoj de '%s' malsukcesis: %s\n" #~ msgid " Fingerprint:" #~ msgstr " Fingrospuro:" #~ msgid "|NAME=VALUE|use this notation data" #~ msgstr "|NOMO=VALORO|uzi i tiun notacian datenon" #~ msgid "" #~ "the first character of a notation name must be a letter or an underscore\n" #~ msgstr "la unua signo de notacia nomo devas esti litero a substreko\n" #~ msgid "dots in a notation name must be surrounded by other characters\n" #~ msgstr "punktoj en notacia nomo devas esti inter aliaj signoj\n" #~ msgid "" #~ "WARNING: This key already has a photo ID.\n" #~ " Adding another photo ID may confuse some versions of PGP.\n" #~ msgstr "" #~ "AVERTO: i tiu losilo jam havas foto-identigilon.\n" #~ " Aldono de alia foto-identigilo eble konfuzos iujn versiojn de " #~ "PGP.\n" #~ msgid "You may only have one photo ID on a key.\n" #~ msgstr "Eblas havi nur unu foto-identigilon sur losilo.\n" #~ msgid "Do you really need such a large keysize? " #~ msgstr "u vi vere bezonas tiom grandan losilgrandon? " #~ msgid "key %08lX: our copy has no self-signature\n" #~ msgstr "losilo %08lX: nia kopio ne havas mem-subskribon\n" #~ msgid " Are you sure you still want to sign it?\n" #~ msgstr " u vi estas certa, ke vi ankora volas subskribi in?\n" #~ msgid " signed by %08lX at %s\n" #~ msgstr " subskribita per %08lX je %s\n" #~ msgid "--delete-secret-key user-id" #~ msgstr "--delete-secret-key uzantidentigilo" #~ msgid "--delete-key user-id" #~ msgstr "--delete-key uzantidentigilo" #~ msgid "skipped: public key already set with --encrypt-to\n" #~ msgstr "ignorita: publika losilo jam difinita per --encrypt-to\n" #~ msgid "sSmMqQ" #~ msgstr "iImMfF" #~ msgid "|[NAMES]|check the trust database" #~ msgstr "|[NOMOJ]|kontroli la fido-datenaron" #~ 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 "" #~ "Ne povis trovi validan fidovojon al la losilo. Ni vidu, u eblas\n" #~ "atribui iujn mankantajn posedantofido-valorojn.\n" #~ "\n" #~ msgid "" #~ "No path leading to one of our keys found.\n" #~ "\n" #~ msgstr "" #~ "Nenia vojo trovita, kiu kondukas al unu el niaj losiloj.\n" #~ "\n" #~ msgid "" #~ "No certificates with undefined trust found.\n" #~ "\n" #~ msgstr "" #~ "Neniom da atestiloj trovitaj kun nedifinita fidovaloro.\n" #~ "\n" #~ msgid "" #~ "No trust values changed.\n" #~ "\n" #~ msgstr "" #~ "Neniuj fidovaloroj anitaj.\n" #~ "\n" #~ msgid "%08lX: no info to calculate a trust probability\n" #~ msgstr "%08lX: mankas informoj por kalkuli fidovaloron\n" #~ msgid "%s: error checking key: %s\n" #~ msgstr "%s: eraro dum kontrolo de losilo: %s\n" #~ msgid "too many entries in unk cache - disabled\n" #~ msgstr "tro da registroj en unk-staplo - malaltas\n" #~ msgid "assuming bad MDC due to an unknown critical bit\n" #~ msgstr "supozas malbonan sigelon (MDC) pro nekonata \"critical bit\"\n" #~ msgid "error reading dir record for LID %lu: %s\n" #~ msgstr "eraro dum legado de dosieruja registro por LID %lu: %s\n" #~ msgid "lid %lu: expected dir record, got type %d\n" #~ msgstr "lid %lu: atendis dosierujan registron, trovis specon %d\n" #~ msgid "no primary key for LID %lu\n" #~ msgstr "mankas efa losilo por LID %lu\n" #~ msgid "error reading primary key for LID %lu: %s\n" #~ msgstr "eraro dum legado de efa losilo por LID %lu: %s\n" #~ msgid "key %08lX: query record failed\n" #~ msgstr "losilo %08lX: peto-registro malsukcesis\n" #~ msgid "key %08lX: already in trusted key table\n" #~ msgstr "losilo %08lX: jam en tabelo de fidataj losiloj\n" #~ msgid "NOTE: secret key %08lX is NOT protected.\n" #~ msgstr "NOTO: sekreta losilo %08lX NE estas protektita.\n" #~ msgid "key %08lX: secret and public key don't match\n" #~ msgstr "losilo %08lX: sekreta kaj publika losiloj ne kongruas\n" #~ msgid "key %08lX.%lu: Good subkey binding\n" #~ msgstr "losilo %08lX.%lu: Bona sublosila bindado\n" #~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" #~ msgstr "losilo %08lX.%lu: Nevalida sublosila bindado: %s\n" #~ msgid "key %08lX.%lu: Valid key revocation\n" #~ msgstr "losilo %08lX.%lu: Valida losilrevoko\n" #~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" #~ msgstr "losilo %08lX.%lu: Nevalida losilrevoko: %s\n" #~ msgid "Good self-signature" #~ msgstr "Bona mem-subskribo" #~ msgid "Invalid self-signature" #~ msgstr "Nevalida mem-subskribo" #~ msgid "Valid user ID revocation skipped due to a newer self signature" #~ msgstr "Valida uzantidentigil-revoko ignorita pro pli nova mem-subskribo" #~ msgid "Valid user ID revocation" #~ msgstr "Valida uzantidentigil-revoko" #~ msgid "Invalid user ID revocation" #~ msgstr "Nevalida uzantidentigil-revoko" #~ msgid "Valid certificate revocation" #~ msgstr "Valida atestilrevoko" #~ msgid "Good certificate" #~ msgstr "Bona atestilo" #~ msgid "Invalid certificate revocation" #~ msgstr "Nevalida atestilrevoko" #~ msgid "Invalid certificate" #~ msgstr "Nevalida atestilo" #~ msgid "sig record %lu[%d] points to wrong record.\n" #~ msgstr "subskribo-registro %lu[%d] montras al malusta registro.\n" #~ msgid "duplicated certificate - deleted" #~ msgstr "ripetita atestilo - forviita" #~ msgid "tdbio_search_dir failed: %s\n" #~ msgstr "tdbio_search_dir malsukcesis: %s\n" #~ msgid "lid ?: insert failed: %s\n" #~ msgstr "lid ?: enovo malsukcesis: %s\n" #~ msgid "lid %lu: insert failed: %s\n" #~ msgstr "lid %lu: enovo malsukcesis: %s\n" #~ msgid "lid %lu: inserted\n" #~ msgstr "lid %lu: enovita\n" #~ msgid "\t%lu keys inserted\n" #~ msgstr "\t%lu losiloj enovitaj\n" #~ msgid "lid %lu: dir record w/o key - skipped\n" #~ msgstr "lid %lu: dosieruja registro sen losilo - ignorita\n" #~ msgid "\t%lu due to new pubkeys\n" #~ msgstr "\t%lu pro novaj publikaj losiloj\n" #~ msgid "\t%lu keys skipped\n" #~ msgstr "\t%lu losiloj ignoritaj\n" #~ msgid "\t%lu keys updated\n" #~ msgstr "\t%lu losiloj aktualigitaj\n" #~ msgid "Ooops, no keys\n" #~ msgstr "Hu, mankas losiloj\n" #~ msgid "Ooops, no user IDs\n" #~ msgstr "Hu, mankas uzantidentigiloj\n" #~ msgid "check_trust: search dir record failed: %s\n" #~ msgstr "check_trust: sero pri dosieruja registro malsukcesis: %s\n" #~ msgid "key %08lX: insert trust record failed: %s\n" #~ msgstr "losilo %08lX: enovo de fidoregistro malsukcesis: %s\n" #~ msgid "key %08lX.%lu: inserted into trustdb\n" #~ msgstr "losilo %08lX.%lu: enovis en fido-datenaron\n" #~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" #~ msgstr "" #~ "losilo %08lX.%lu: kreita en la estonteco (tempotordo a horloeraro)\n" #~ msgid "key %08lX.%lu: expired at %s\n" #~ msgstr "losilo %08lX.%lu: eksvalidiis je %s\n" #~ msgid "key %08lX.%lu: trust check failed: %s\n" #~ msgstr "losilo %08lX.%lu: fido-kontrolo malsukcesis: %s\n" #~ msgid "user '%s' not found: %s\n" #~ msgstr "uzanto '%s' ne trovita: %s\n" #~ msgid "problem finding '%s' in trustdb: %s\n" #~ msgstr "problemo dum trovo de '%s' en fido-datenaro: %s\n" #~ msgid "user '%s' not in trustdb - inserting\n" #~ msgstr "uzanto '%s' ne estas en fido-datenaro - enovas\n" #~ msgid "failed to put '%s' into trustdb: %s\n" #~ msgstr "malsukcesis meti '%s' en fido-datenaron: %s\n" #~ msgid "too many random bits requested; the limit is %d\n" #~ msgstr "tro da stokastaj bitoj petitaj; la limo estas %d\n" #~ msgid "For info see http://www.gnupg.org" #~ msgstr "Por informoj vidu http://www.gnupg.org" #~ msgid "Do you really want to create a sign and encrypt key? " #~ msgstr "u vi vere volas krei subskriban kaj ifran losilon? " #~ msgid "%s: user not found: %s\n" #~ msgstr "%s: uzanto ne trovita: %s\n" #~ msgid "certificate read problem: %s\n" #~ msgstr "problemo e legado de atestilo: %s\n" #~ msgid "can't lock keyring `%s': %s\n" #~ msgstr "ne povas losi la losilaron '%s': %s\n" #~ msgid "%s: user not found\n" #~ msgstr "%s: uzanto ne trovita\n" #~ msgid "WARNING: can't yet handle long pref records\n" #~ msgstr "AVERTO: ne povas trakti longajn preferoregistrojn\n" #~ msgid "%s: can't create keyring: %s\n" #~ msgstr "%s: ne povas krei losilaron: %s\n" #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "RSA-losilo ne estas uzebla kun i tiu versio\n" #~ msgid "No key for user ID\n" #~ msgstr "Mankas losilo por uzantidentigilo\n" #~ msgid "no secret key for decryption available\n" #~ msgstr "mankas sekreta losilo por malifrado\n" gnupg-1.4.20/po/gnupg.pot0000644000175000017500000035704412635457217012152 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.20\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "" #: cipher/random.c:894 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 "" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "" #: g10/armor.c:459 msgid "armor header: " msgstr "" #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "" #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "" #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "" #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 msgid "male" msgstr "" #: g10/card-util.c:513 msgid "female" msgstr "" #: g10/card-util.c:513 msgid "unspecified" msgstr "" #: g10/card-util.c:540 msgid "not forced" msgstr "" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "" #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "" #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "" #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "" #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "" #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr "" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr "" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "" #: g10/card-util.c:1687 msgid "list all available data" msgstr "" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 msgid "change the login name" msgstr "" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "" #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "" #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "" #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "" #: g10/gpg.c:393 msgid "encrypt data" msgstr "" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "" #: g10/gpg.c:399 msgid "verify a signature" msgstr "" #: g10/gpg.c:401 msgid "list keys" msgstr "" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "" #: g10/gpg.c:406 msgid "list secret keys" msgstr "" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "" #: g10/gpg.c:411 msgid "sign a key" msgstr "" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "" #: g10/gpg.c:416 msgid "export keys" msgstr "" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "" #: g10/gpg.c:486 msgid "use as output file" msgstr "" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" #: g10/gpg.c:576 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 "" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "" #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "" #: g10/gpg.c:827 msgid "Hash: " msgstr "" #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "" #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "" #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "" #: g10/gpg.c:3959 msgid "[filename]" msgstr "" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" #: g10/helptext.c:285 msgid "No help available" msgstr "" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr "" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr "" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr "" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr "" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr "" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr "" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr "" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr "" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr "" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr "" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr "" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr "" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr "" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr "" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr "" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr "" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "" #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "" #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr "" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "" #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "" #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "" #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "" #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "" #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "" #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "" #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr "" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr "" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr "" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr "" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "" #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "" #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "" #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "" #: g10/keyedit.c:1439 msgid "enable key" msgstr "" #: g10/keyedit.c:1440 msgid "disable key" msgstr "" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "" #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "" #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "" #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "" #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "" #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "" #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "" #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "" #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "" #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "" #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "" #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "" #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "" #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "" #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "" #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "" #: g10/keyedit.c:2398 msgid "Features: " msgstr "" #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "" #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 msgid "You may want to change its expiration date too.\n" msgstr "" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "" #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "" #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "" #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "" #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "" #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "" #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr "" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "" #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "" #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr "" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "" #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "" #: g10/keygen.c:1362 msgid "Sign" msgstr "" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr "" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr "" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr "" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr "" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr "" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr "" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr "" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr "" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr "" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "" #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "" #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "" #: g10/keygen.c:1722 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 "" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "" #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "" #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "" #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" #: g10/keygen.c:1836 msgid "Real name: " msgstr "" #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "" #: g10/keygen.c:1856 msgid "Email address: " msgstr "" #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "" #: g10/keygen.c:1870 msgid "Comment: " msgstr "" #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "" #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "" #: g10/keygen.c:2012 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 "" #: g10/keygen.c:2034 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 "" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "" #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "" #: g10/keylist.c:267 msgid "Signature policy: " msgstr "" #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "" #: g10/keylist.c:361 msgid "Signature notation: " msgstr "" #: g10/keylist.c:471 msgid "Keyring" msgstr "" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr "" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr "" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr "" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" #: g10/keyserver.c:538 msgid "disabled" msgstr "" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr "" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr "" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "" #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr "" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "" #: g10/mainproc.c:1946 msgid "binary" msgstr "" #: g10/mainproc.c:1947 msgid "textmode" msgstr "" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "" #: g10/misc.c:755 msgid "Uncompressed" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "" #: g10/misc.c:1331 #, c-format msgid "Unknown weak digest '%s'\n" msgstr "" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "" #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "" #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr "" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "" #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "" #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "" #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "" #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "" #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "" #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "" #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr "" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr "" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr "" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr "" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr "" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr "" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr "" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "" #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "" #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "" #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr "" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr "" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "" #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "" #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "" #: g10/revoke.c:641 msgid "Cancel" msgstr "" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "" #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "" #: g10/sig-check.c:254 #, c-format msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" #: g10/sign.c:960 msgid "signing:" msgstr "" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "" #: g10/tdbdump.c:158 msgid "line too long" msgstr "" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 msgid "never" msgstr "" #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "" #: util/errors.c:53 msgid "general error" msgstr "" #: util/errors.c:54 msgid "unknown packet type" msgstr "" #: util/errors.c:55 msgid "unknown version" msgstr "" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "" #: util/errors.c:58 msgid "bad public key" msgstr "" #: util/errors.c:59 msgid "bad secret key" msgstr "" #: util/errors.c:60 msgid "bad signature" msgstr "" #: util/errors.c:61 msgid "checksum error" msgstr "" #: util/errors.c:62 msgid "bad passphrase" msgstr "" #: util/errors.c:63 msgid "public key not found" msgstr "" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "" #: util/errors.c:65 msgid "can't open the keyring" msgstr "" #: util/errors.c:66 msgid "invalid packet" msgstr "" #: util/errors.c:67 msgid "invalid armor" msgstr "" #: util/errors.c:68 msgid "no such user id" msgstr "" #: util/errors.c:69 msgid "secret key not available" msgstr "" #: util/errors.c:70 msgid "wrong secret key used" msgstr "" #: util/errors.c:71 msgid "not supported" msgstr "" #: util/errors.c:72 msgid "bad key" msgstr "" #: util/errors.c:73 msgid "file read error" msgstr "" #: util/errors.c:74 msgid "file write error" msgstr "" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "" #: util/errors.c:76 msgid "file open error" msgstr "" #: util/errors.c:77 msgid "file create error" msgstr "" #: util/errors.c:78 msgid "invalid passphrase" msgstr "" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "" #: util/errors.c:81 msgid "unknown signature class" msgstr "" #: util/errors.c:82 msgid "trust database error" msgstr "" #: util/errors.c:83 msgid "bad MPI" msgstr "" #: util/errors.c:84 msgid "resource limit" msgstr "" #: util/errors.c:85 msgid "invalid keyring" msgstr "" #: util/errors.c:86 msgid "bad certificate" msgstr "" #: util/errors.c:87 msgid "malformed user id" msgstr "" #: util/errors.c:88 msgid "file close error" msgstr "" #: util/errors.c:89 msgid "file rename error" msgstr "" #: util/errors.c:90 msgid "file delete error" msgstr "" #: util/errors.c:91 msgid "unexpected data" msgstr "" #: util/errors.c:92 msgid "timestamp conflict" msgstr "" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "" #: util/errors.c:94 msgid "file exists" msgstr "" #: util/errors.c:95 msgid "weak key" msgstr "" #: util/errors.c:96 msgid "invalid argument" msgstr "" #: util/errors.c:97 msgid "bad URI" msgstr "" #: util/errors.c:98 msgid "unsupported URI" msgstr "" #: util/errors.c:99 msgid "network error" msgstr "" #: util/errors.c:101 msgid "not encrypted" msgstr "" #: util/errors.c:102 msgid "not processed" msgstr "" #: util/errors.c:104 msgid "unusable public key" msgstr "" #: util/errors.c:105 msgid "unusable secret key" msgstr "" #: util/errors.c:106 msgid "keyserver error" msgstr "" #: util/errors.c:107 msgid "canceled" msgstr "" #: util/errors.c:108 msgid "no card" msgstr "" #: util/errors.c:109 msgid "no data" msgstr "" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "" #: util/miscutil.c:443 msgid "qQ" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 msgid "cC" msgstr "" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "" gnupg-1.4.20/po/et.gmo0000644000175000017500000021026212635457221011403 00000000000000}U'@5-A5o556727O7l777D7.8I7888888 9$9@9Y9$v9&9,99 ::<:N:h:]::/:(&;.O;3~;;;;;<!<4<M<i<"<<<<"<%=&-=!T=%v="=#='= >,>I>^>{>>>(>$>??#0?T?s???&?%?,@4C@x@@@@@'@A/AMA_ArAA"AAA-A(B0EBHvB B C CCAD/CD0sD\DE-E0DE.uEEEE3E4F-HFvF.0G_G hG rG:GGG#G&H&@HgH~HHHGH@H>=I+|I=II"I:JTJgJyJ J/JJKHK-L ?LJL8]L#LL"LLE}MM;YNNIOgOO$OOOOPPPQ)Q?QRQbQtQ%QQQ MR!nR<RR"R, S,8S2eSS S(S S T**TUTgTTTTT"TUU/UEOUoU V &V8GV'VcV/ WEf1g=BgIg4gg#h=Bhh?hDh1%i5WiHi-iHjMjj<jB/k)rkCk.k@lFPl2l1l l2mPmhQn*s&s1 t#>t2bt>tt=u0uMu"Cv&fv3v%vDv,,y5Yyyy_y z z(z 9zEz%^zzzz zz zz {*{2{:{J{R{a{p{ {{{{{{{ |-|.K|%z|2||||}-}B}5W}}};}<}/~E~&[~~~-~(~~10by 2$O=t%؀ 1H`|&&Á K%^$̂ ނ @- n|!D+/'W`~%%$܄  .7f2 8+Ht$&$,4CGZHB.DTrȈ 'B[u'.@(R,{ Ɋ ׊$% (I%h&ҋ!#AV%u% ی #&&J)q< (,Hu;MΎ7O"g-+ҏ*!)&K$rIÐ  ;N#f#ґ #0T3e%% "%H\ e5$4%1*W0Ӕ.ܔ* 6+Ǖ/%#I(\-/Ȗ,"%)Hr ͗#-(VIuϘ .Ibvř#ՙ #7 Klɚܚ6#+ Op-› )EayDFEFDAѝ7K$hF Ԟ$ #1U#nj/-ˢ"?5\+B8!Wy'%''1G.yť"ޥ 2eS-̦+0&6W˧ (E&d!"ɨ&()<)f#()ݩ$,J$^.Ϊ.,C&Yݫ&"*>7iϬ$A^}*ӭ**&U6|D   /?I1+dL1c48ʱ $$I*R8}3&ͳ ֳ 8!(J*j') />=H|>ŵ82=p)<&2At4BJ* ø-ٸ%),V;5JҺ!$8]l '$HmȽڽ/ $0-"@F+a5.ÿ2 %F%b) 1 &=']! CxA#!/+0|\/= 7G&!-*}B ]k 11!!3#Uy9<Vw[1B4,w&+ ( ;" ^jf |23+ 6V+u4}}:/6CfM3),"V?yAB*Z5?,?(h8OK1J/@HN96$I8n&%& 928l:L%<$*3:)no'00 a nk{  '5 ] ~ *!* ; EQb u, ##1G/y->-0Hy%:3;OU +2L0_*A!-O#n' #A%]53#)DYr*89/?]_+44H`oF  !8FZ-2 )2>%q' .""Be5, D R"`&$, =+?iJ("(K$t(&& ,:Vp/# +'7_*r$" !"@!C3e!#/$A'Z&.0 < Y dq!'$%@5v!*DEW#!!'0-^%w53&-.\sv|K ''<)d 0 Q5d&(+I f *3*A>%1/! *)5%_y+7+2c;,>-9l))$)?i&/)@" c t %      " ; [ s $  %    8 *T     ; ! $: _  s   ! 3   ", #O s      L I3L}F:6L4-!'5]{"^@!,%TBVz !@S1K0"R4`Zl(h;<Fuat|WhxtQh5^N =}\-]<AJk8>|' law]syQ_:B/Hq K2pe3g$CvHEk\"gSW"l+1)FLm`F*w>YyDVMws SfPP*B{I ;4yoX[+A0:dXgzx2iar7%.67 NU{;d?@9 }_3?<pbmRcH&9GsCj.ZCrzT&K$^_f.Zfi| x?ve' n1m Luo+ (8Y~{%vOQiUA/#>-~M*qP'N}8Ir)k`M9oVbnp&OJGYX6E:[W6t 5qjIcbJG jR0)7#dn=/$ UO]\L,!Te245 , =#3DEu[cD- ( Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d bad signatures %d keys processed (%d validity counts cleared) %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s CancelCertificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter JPEG filename for photo ID: Enter an optional description; end it with an empty line: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. Is this photo correct (y/N/q)? It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key available at: Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select the reason for the revocation: Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Reason for revocation: %s Repeat passphrase Repeat passphrase: Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Secret key is available. Secret parts of primary key are not available. Signature expired %s Signature expires %s Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu UncompressedUsage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create directory `%s': %s can't disable core dumps: %s can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverexternal program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key export failed: %s key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornever new configuration file `%s' created next trustdb check due at %s nono corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no need for a trustdb check no remote program execution supported no secret key no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to display photo ID! unable to execute external program unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked using cipher %s verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg 1.2.2 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:22+0200 Last-Translator: Toomas Soome Language-Team: Estonian Language: et MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 8-bit Sisestage kasutaja ID. Lpetage thja reaga: Juhuslikke baite ei ole piisavalt. Palun tehke arvutiga muid tid, et anda masinal vimalust koguda enam entroopiat! (Vajatakse %d baiti) Valige foto ID'na kasutatav pilt. Pilt peab olema JPEG fail. Pidage meeles, et pilt salvestatakse teie avalikus vtmes. Kui kasutate vga suurt pilti, on ka kti vha suur! Mistlik pildi suurus viks olla umbes 240x288. Toetatud algoritmid: imporditud: %lu muutmata: %lu uusi alamvtmeid: %lu uusi kasutajaid: %lu pole imporditud: %lu puudub kasutaja ID: %lu Ei ole kindel, et allkiri kuulub omanikule. Allkiri on tenoliselt VLTSING. Ei ole midagi, mis nitaks, et allkiri kuulub omanikule. uusi allkirju: %lu Alamvtme srmejlg: loetud salajasi vtmeid: %lu vahele jetud uusi vtmeid: %lu Alamvtme srmejlg: (%d) DSA (ainult allkirjastamiseks) (%d) RSA (ainult krpteerimiseks) (%d) RSA (ainult allkirjastamiseks) (0) Ma ei vasta.%s (1) Ma ei ole ldse kontrollinud.%s (2) Ma olen teinud pealiskaudset kontrolli.%s (3) Ma olen kontrollinud vga hoolikalt.%s uusi thistamisi: %lu Ei saa allkirjastada. salajasi vtmeid imporditud: %lu (mitte-eksporditav) Primaarse vtme srmejlg: muutmata salajasi vtmeid: %lu # Omistatud usalduse vrtuste loend, loodud: %s # (Taastamiseks kasutage "gpg --import-ownertrust") %d halba allkirja %d vtit tdeldud (%d kehtivust puhastatud) %d allkirja ji vigade tttu kontrollimata %d allkirja ji testimata, kuna vtmed puuduvad tuvastasin %d kehtiva iseenda allkirjata kasutaja IDd %s ... %s ei tta veel koos %s-ga %s krpteeritud andmed %s krpteeritud sessiooni vti kasutatakse %s krpteerimist %s on uus %s ei ole muudetud %s ja %s ei oma koos mtet! %s ja %s ei ole koos lubatud! %s allkiri, snumilhendi algoritm %s %s. %s/%s krptitud kasutajale: "%s" %s: kataloogi ei ole! %s: viga vaba kirje lugemisel: %s %s: viga versioonikirje lugemisel: %s %s: viga versioonikirje uuendamisel: %s %s: viga kataloogikirje kirjutamisel: %s %s: viga versioonikirje kirjutamisel: %s %s: kirje lisamine ebannestus: %s %s: paisktabeli loomine ebannestus: %s %s: versioonikirje loomine ei nnestu: %s%s: kirje nullimine ebannestus: %s %s: vigane faili versioon %d %s: vigane trustdb %s: loodi vigane usalduse andmebaas %s: vtmehoidla on loodud %s: ei ole trustdb fail %s: jtsin vahele: %s %s: jtsin vahele: avalik vti on juba olemas %s: jtsin vahele: avalik vti on blokeeritud %s: trustdb on loodud %s: tundmatu suffiks %s: versioonikirje kirje numbriga %lu %s:%d: ebasoovitav vti "%s" %s:%d: vigased ekspordi vtmed %s:%d: vigased impordi vtmed (Kirjeldust ei antud) (Tenoliselt soovite siin valida %d) (See on tundlik thistamise vti) (kui te just ei mra vtit srmejljega) (te kasutasite vahest selle t jaoks valet programmi) --clearsign [failinimi]--decrypt [failinimi]--edit-key kasutaja-id [ksud]--encrypt [failinimi]--lsign-key kasutaja-idvti --output ei tta selle ksuga --sign --encrypt [failinimi]--sign --symmetric [failinimi]--sign [failinimi]--sign-key kasutaja-id--store [failinimi]--symmetric [failinimi]-k[v][v][v][c] [kasutaja-id] [vtmehoidla]... see on viga (%s:%d:%s) 1 halb allkiri 1 allkiri ji testimata, kuna vti puudub 1 allkiri ji vea tttu kontrollimata tuvastasin he kehtiva iseenda allkirjata kasutaja ID @ (Kikide kskude ja vtmete tieliku kirjelduse leiate manualist) @ Nited: -se -r Bob [fail] allkirjasta ja krpti kasutajale Bob --clearsign [fail] loo avateksti allkiri --detach-sign [fail] loo eraldiseisev allkiri --list-keys [nimed] nita vtmeid --fingerprint [nimed] nita srmejlgi @ Vtmed: @Ksud: Vljundis sunnitakse kasutama ASCII vormingut. Vastake "jah" (vi "j"), kui vib alustada alamvtme loomisega.Kui selle alamvtme vib kustutada, vastake "jah"Vastake "jah", kui faili vib le kirjutadaKui te testi soovite seda kasutaja IDd kustutada, vastake "jah". Sertifikaadid kustutatakse samuti!Vastake "jah" vi "ei"Olete kindel, et soovite seda ikka lisada? (j/E) Olete kindel, et soovite seda ikka thistada? (j/E) Olete kindel, et soovite seda ikka allkirjastada? (j/e) Allkirja ei saa kontrollida: %s Seda vtit ei nnestu toimetada: %s KatkestaSertifikaadid tiesti usaldatava vtmeni: Muuda (N)ime, (K)ommentaari, (E)posti vi (O)k/(V)lju? Muuda (N)ime, (K)ommentaari, (E)posti vi (V)lju? Muuda kikide kasutaja ID-de seaded (vi ainult valitud) vastavaks hetkel mratud seadetele. Kikide asjasse puutuvate ise loodud allkirjade ajatempleid suurendatakse he sekundi vrra. Muudan primaarse vtme aegumise aega. iffer: Kommentaar: Pakkimine: Loon sellele allkirjale thistamise sertifikaadi? (j/E) Kriitiline allkirja noteerimine: Kriitiline allkirja poliitika: Kustutan selle korrektse allkirja? (j/E/v)Kustutan selle vigase allkirja? (j/E/v)Kustutan selle tundmatu allkirja? (j/E/v)Kustutatud %d allkiri. Kustutatud %d allkirja. Eraldiseisev allkiri. Teatelhend: Kas soovite luua uut allkirja et asendada vana aegunud? (j/E) Kas te soovite seda edutada tielikuks eksporditavaks allkirjaks? (j/E) Kas te soovite seda edutada OpenPGP iseenda allkirjaks? (j/E) Olete kindel, et soovite seda ikka allkirjastada? (j/E) Soovite, et teie allkiri aeguks samal ajal? (J/e) E-posti aadress: Sisestage foto ID jaoks JPEG faili nimi: Sisestage mittekohustuslik kirjeldus. Lpetage thja reaga: Sisestage uus failinimiSisestage parool Sisestage parool: Sisestage vtmehoidja nimiSisestage sellele salajasele vtmele uus parool. Sisestage nutav vrtus, nagu viibal nidati. Vimalik on ka sisestada ISO kuupev (AAAA-KK-PP), aga te ei saa korrektset veateadet, kuna ssteem ritab antud vrtust tlgendada vahemikuna.Sisestage vtmepikkusSisestage kasutaja ID aadressile, kellele te soovite teadet saata.Sisestage mratud thistaja kasutaja ID: Omadused: Fail `%s' on olemas. Sisestage palun failinimi, mida allkirjastadaKirjutage nd oma teade ... Rsi: Vihje: Valige allkirjastamiseks kasutaja Kui hoolikalt te olete kontrollinud et vti, mida te asute allkirjastama, kuulub ka tegelikult lal mainitud isikule? Kui te ei tea, mida vastata, sisestage "0". IDEA iffer pole saadaval, loodan kasutada selle asemel %s Kui te soovite, vite nd sisestada phjenduse, miks te soovite seda thistamise sertifikaati esitada. Palun kirjutage lhidalt. Thi rida lpetab teksti. Kui te ikkagi soovite kasutada seda mitteusaldatavat vtit, vastake "jah".ldiselt ei ole hea mte kasutada sama vtit allkirjastamiseks ja krpteerimiseks. Seda algoritmi tuleks kasutada ainult teatud piirides. Enne kasutamist konsulteerige palun oma turva eksperdiga.Lubamatu smbol kommentaaris Lubamatu smbol nimes Vigane ksklus (proovige "help") Vigane parool; palun proovige uuestiVigane valik. On see foto ige (j/E/v)? Teie lesanne on sisestada nd vrtus; seda vrtust ei avalikustata kolmandatele pooltele. Seda vrtust on vaja et realiseerida usaldusvrk.Vtme leiate: Vtme genereerimine katkestati. Vtme genereerimine ebannestus: %s Vti on kompromiteeritudVti ei ole enam kasutuselVti on kaitstud. Vti on thistatud.Vti on asendatudVti on kehtiv kuni? (0) Vtit ei muudetud, seega pole uuendamist vaja. VtmehoidlaN et muuta nime. K et muuta kommentaari. E et muuta e-posti aadressi. O et jtkata vtme loomist. V et lpetada vtme loomine.MRKUS: %s ei ole tavapraseks kasutamiseks! MRKUS: See vti ei ole kaitstud! MRKUS: v3 vtmetele alamvtmete loomine ei ole OpenPGP hilduv MRKUS: vti on thistatudMRKUS: vaikimisi vtmete fail `%s' puudub MRKUS: ignoreerin vana vaikimisi vtmete faili `%s' MRKUS: saatja nudis "ainult-teie-silmadele" MRKUS: lihtne S2K mood (0) ei soovitata kasutada MRKUS: trustdb pole kirjutatav Nimi ei vi alata numbriga Nimes peab olema vhemalt 5 smbolit Selle tegamiseks on vaja salajast vtit. NnKkEeOoVvVastavat allkirja salajaste vtmete hoidlas pole Abiinfo puudub`%s' kohta abiinfo puudubPhjus puudubTundmatu kasutaja ID. Kasutaja ID numbriga %d puudub Selline e-posti aadress ei ole lubatud Mrkus: See vti on blokeeritud. Mrkus: See vti on aegunud! Midagi ei kustutatud. Palun parandage kigepealt viga rge palun kirjutage e-posti aadressi prisnimesse ega kommentaari Palun sisestage uus failinimi. Kui te vajutate lihtsalt reavahetust, kasutatakse vaikimisi faili (nimi on nurksulgudes).Te vite nd sisestada kommentaariPalun sisestage andmefaili nimi: Palun sisestage parool; see on salajane tekst Palun parandage see vimalik turvaprobleem Tuleb thele panna et kuni te pole programmi uuesti kivitanud, ei pruugi nidatud vtme kehtivus olla tingimata korrektne. Palun eemaldage salajastelt vtmetelt valikud. Palun korrake parooli, siis saate oma kirjutatus kindel olla.Palun saatke veateated aadressil . Palun valige tpselt ks kasutaja ID. Palun valige thistamise phjus: Palun valige, millist vtmetpi te soovite: Palun mrake, kui kaua on vti kehtiv. 0 = vti ei aegu = vti aegub n pevaga w = vti aegub n ndalaga m = vti aegub n kuuga y = vti aegub n aastaga Palun mrake, kui kaua allkiri kehtib. 0 = allkiri ei aegu = allkiri aegub n pevaga w = allkiri aegub n ndalaga m = allkiri aegub n kuuga y = allkiri aegub n aastaga Palun kasutage kigepealt ksku "toggle". Palun oodake, kogutakse entroopiat. Igavuse vltimiseks vite teha arvutiga mingit td, see tstab ka entroopia kvaliteeti. Primaarse vtme srmejlg:Avalik vti: Avalik vti on blokeeritud. Prisnimi: Kas testi loon thistamise sertifikaadid? (j/E) Kas testi kustutan selle iseenda allkirja? (j/E)Thistamise phjus: %s Korrake parooli Korrake parooli: Soovitud vtmepikkus on %u bitti Thistamise sertifikaat on loodud. Thistamise sertifikaat on loodud. Palun salvestage see andmekandjale, mida saate kindlasse kohta ra panna. Kui mallory saab sellele sertifikaadile juurdepsu, vib ta seda kasutades muuta kik teie vtmed kasutamisklbmatuks. Samuti on mistlik trkkida see sertifikaat paberile ja panna hoiule juhuks, kui meedia muutub loetamatuks. Aga olge ettevaatlik: teie arvuti trkissteem vib salvestada need andmed ja teha teistele kttesaadavaks! Salajane vti on kasutatav. Primaarse vtme salajased komponendid ei ole kttesaadavad. Allkiri aegus %s Allkiri aegub %s Allkirja noteerimine: Allkirja poliitika: Sntaks: gpg [vtmed] [failid] allkirjasta, kontrolli, krpti ja dekrpti vaikimisi operatsioon sltub sisendandmetest Juhuarvude generaator on ainult thi kest, et programmid kiks - see EI OLE tugev juhuarvude generaator! RGE KASUTAGE SELLE PROGRAMMI POOLT GENEREERITUD ANDMEID!! Iseenda allkiri "%s" on PGP 2.x stiilis allkiri. Allkiri ei ole kehtiv. Oleks mistlik see vtmehoidlast kustutada.PGP 2.x stiilis kasutaja ID ei oma seadeid. See ksklus ei ole %s moodis lubatud. See allkiri seob kasutaja ID vtmega. Sellist allkirja ei ole ldiselt soovitatav eemaldada. Peale selle kustutamist ei pruugi GnuPG enam olla vimeline seda vtit leidma. Kustutada viks vaid siis, kui see allkiri ei ole miskiprast kehtiv ja on olemas ka teine allkiri, mis kasutajat vtmega seob.See on vtme kehtiv allkiri; tavaliselt seda ei soovita kustutada, kuna see allkiri vib olla vajalik, et kirjeldada antud vtme vi antud vtmega sertifitseeritud teise vtme usaldatavust.See vti kuulub meile See vti on blokeeritudSee vti on aegunud!See vti aegub %s. See vti ei ole kaitstud. Seda allkirja ei saa kontrollida, kuna puudub allkirjale vastav vti. Te peaksite peatama kustutamise, kuni on teada, millist vtit see kasutab, sest see vti vib moodustada usaldussuhte lbi mne juba sertifitseeritud vtme.See allkiri aegub %s. See muudab vtme PGP 2.x programmidega mitte-kasutatavaks. Thistaja: Usalduse vrgu loomiseks peab GnuPG teadma, millised vtmed on absoluutselt usaldatavad. Need on tavaliselt vtmed, mille puhul on teil juurdeps ka nende salajastele vtmetele. Kui soovite mrata seda vtit absoluutselt usaldatavaks, vastake "jah" Tdeldud kokku: %lu PakkimataKasuta: gpg [vtmed] [failid] (-h nitab abiinfot)Kasuta: gpgv [vtmed] [failid] (-h nitab abiinfot)Kasutaja ID "%s" on aegunud.Kasutaja ID "%s" ei ole ise allkirjastatud.Kasutaja ID "%s" on thistatud.Kasutaja ID ei ole enam kehtivHOIATUS: vtit "%s" ei soovitata kasutada. HOIATUS: %s mrab le %s HOIATUS: on olemas 2 faili konfidentsiaalse infoga. HOIATUS: See on PGP2-stiilis vti. Mratud thistaja lisamine vib phjustada mningaid PGP versioone seda vtit tagasi lkkama. HOIATUS: See on PGP2-stiilis vti. Foto ID lisamine vib sundida mningaid PGP versioone seda vtit tagasi lkkama. HOIATUS: See vti on mratud thistaja poolt thistatud! HOIATUS: See vti on omaniku poolt thistatud! HOIATUS: Seda vtit ei ole sertifitseeritud usaldatava allkirjaga! HOIATUS: Seda vtit ei ole sertifitseeritud piisavalt usaldatava allkirjaga! HOIATUS: See alamvti on omaniku poolt thistatud! HOIATUS: Kasutan mitteusaldatavat vtit! HOIATUS: Me EI usalda seda vtit! HOIATUS: Tuvastasin nrga vtme - palun muutke uuesti parooli. HOIATUS: `%s' on thi fail HOIATUS: kasutaja ID allkirja ajatempel on %d sekundit tulevikus HOIATUS: vtme seadmist mratud thistajaks ei saa tagasi vtta! HOIATUS: krpteeritud teadet on muudetud! HOIATUS: vigane random_seed faili suurus - ei kasuta HOIATUS: teade on krptitud smmeetrilise ifri nrga vtmega. HOIATUS: teate koosklalisus ei ole tagatud HOIATUS: leidsin mitu allkirja. Kontrollitakse ainult esimest. HOIATUS: htegi kasutaja ID pole mrgitud primaarseks. See ksklus vib phjustada muu kasutaja ID primaarseks mramist. HOIATUS: midagi ei eksporditud HOIATUS: seaded failis `%s' pole seekord veel aktiivsed HOIATUS: tenoliselt ebaturvaline smmeetriliselt krpteeritud sessiooni vti HOIATUS: programm vib salvestada oma mlupildi! HOIATUS: mrati saajad (-r) aga ei kasutata avaliku vtme krptograafiat HOIATUS: allkirja lhend on teatega konfliktne HOIATUS: see vti vib olla thistatud (thistamise vtit pole) HOIATUS: noteerimise %%-asendus ebannestus (liiga suur). Kasutan kompaktset. HOIATUS: ei nnestu eemaldada ajutist kataloogi `%s': %s HOIATUS: ei saa kustutada ajutist faili (%s) `%s': %s HOIATUS: kasutan ebaturvalist mlu! HOIATUS: kasutan ebaturvalist juhuarvude generaatorit!! Me peame genereerima palju juhuslikke baite. Praegu oleks hea teostada arvutil mingeid teisi tegevusi (kirjutada klaviatuuril, liigutada hiirt, kasutada kettaid jne), see annaks juhuarvude generaatorile vimaluse koguda paremat entroopiat. Kui te allkirjastate vtme kasutaja ID, kontrollige kigepealt, kas vti ikka kuulub antud ID-ga nidatud isikule. Teistel inimestel on hea teada, kui hoolikalt te seda kontrolli olete teostanud. "0" thendab, et te ei vida oma kontrollimise kohta midagi. "1" thendab, et te usute, et vtit omab isik, kes seda vidab omavat, kuid te ei saanud vi ei soovinud seda videt tiendavalt kontrollida. See on kasulik "persooni" kontrolliks, kui te allkirjastate isiku pseudo- nmi vtit. "2" thendab, et te teostasite vtme pealiskaudset kontrolli. See vib niteks thendada, et te kontrollisite vtme srmejlge ja kontrollisite vtme kasutaja ID foto ID vastu. "3" thendab, et te teostasite vtme phjalikku kontrolli. See vib niteks thendada, et vrdlesite vtme srmejlge vrme omanikuga otse suheldes ja et te kontrollisite raskesti vltsitavast allikast (nt. pass) et vtme omaniku nimi vastab vtmel nidatud kasutaja IDle ja te kontrol- lisite, et vtmel nidatud e-posti aadress kuulub vtme omanikule. pange thele, et nited tasemete 2 ja 3 juures on *ainult* nited. Sltub ainult teist, milline on "pealiskaudse" ja "phjaliku" kontrolli thendus, kui te allkirjastate teisi vtmeid. Kui te ei tea iget vastust, vastake "0".Te asute thistama jrgmisi allkirju: Te kasutate kooditabelit `%s'. v3 vtme aegumise aega ei saa muuta. Viimast kasutaja ID ei saa kustutada! Te ei mranud kasutaja IDd. (vite kasutada vtit "-r") Te ei soovi parooli - see on tenoliselt *halb* idee! Te ei soovi parooli - see on tenoliselt *halb* idee! Ma siiski tidan teie soovi. Te saate oma parooli alati muuta, kasutades seda programmi vtmega "--edit-key". PGP 2.x-stiili vtmele ei saa mratud thistajat lisada. Foto IDd ei saa PGP2 vtmele lisada. --pgp2 moodis ei saa PGP 2.x vtmele OpenPGP allkirja anda. Te peata valima vhemalt he vtme. Te peate valima vhemalt he kasutaja ID. Te vajate oma salajase vtme kaitsmiseks parooli. Te valisite selle KASUTAJA-ID: "%s" Te peate mrama sertifitseerimise phjuse. Sltuvalt kontekstist on teil vimalus valida ks jrgnevaist: "Vti on kompromiteeritud" Kasutage seda, kui teil on phjust uskuda, et autoriseerimata isikud on saanud juurdepsu teie salajasele vtmele. "Vti on asendatud" Kasutage seda, kui te olete selle vtme asendanud uuemaga. "Vti ei ole enam kasutusel" Kasutage seda, kui te ei kasuta enam seda vtit. "Kasutaja ID ei ole enam kehtiv" Kasutage seda mrkimaks, et konkreetset kasutaja ID ei peaks enam kasutama; seda kasutatakse tavaliselt mrkimaks vigast e-posti aadressi. Teie praegune allkiri "%s" on aegunud. Teie praegune allkiri "%s" on lokaalne allkiri. Teie otsus? Teie valik? Teie ssteem ei saa esitada kuupevi peale aastat 2038. Siiski ksitletakse neid korrektselt aastani 2106. [failinimi][thistamine][iseenda allkiri][ebakindel]`%s' on juba pakitud `%s' ei ole tavaline fail - ignoreerin `%s' ei ole kehtiv pikk vtmeID lisa foto IDlisa thistamise vtilisa kasutaja IDpakendi pis: pakend: %s eeldan %s krpteeritud andmeid eeldan allkirjastatud andmeid failis `%s' halb MPIhalb URIhalb sertifikaathalb vtihalb paroolhalb avalik vtihalb salajane vtihalb allkiriole mnevrra vaiksembinaarnebuild_packet ebannestus: %s `%s' ei nnestu sulgeda: %s ei nnestu luua hendust serveriga `%s': %s `%s' ei nnestu luua: %s kataloogi `%s' ei nnestu luua: %s ei nnestu blokeerida mlupildi salvestamist: %s vhem kui %d bitiga ei saa algarvu genereerida ei oska ksitleda avaliku vtme algoritmi %d ei suuda ksitleda tekstiridu mis on pikemad, kui %d smbolit `%s' ei nnestu avada `%s' ei nnestu avada: %s allkirjastatud andmete avamine ebannestus `%s' vtmehoidlat ei nnestu avada`%s' ei nnestu lugeda: %s ei nnestu lugeda `%s' atribuute: %s S2K moodi tttu ei saa smmeetrilist ESK paketti kasutada `%s' ei nnestu kirjutada: %s katkestatud kasutaja poolt PGP 2.x stiilis vtit ei saa nimetada mratud thistajaks smmeetrilises ifris ei nnestu vltida nrga vtme kasutamist; proovisin %d korda! muuda omaniku usaldustmuuda parooliLoodud allkirja ei nnestu kontrollida: %s kontrollin trustdb faili kontrollsumma vigaifri algoritm %d%s on tundmatu vi blokeeritud completes-needed peab olema suurem, kui 0 vastuolulised ksud loo ascii pakendis vljundandmeid ei salvestatud; salvestamiseks kasutage vtit "--output" lahtipakendamine ebannestus: %s dekrpteeri andmed (vaikimisi)lahtikrpteerimine ebannestus: %s lahtikrpteerimine nnestus vtmebloki kustutamine ebannestus: %s ra tee mingeid muutusipakendamine ebannestus: %s krpteeri andmedkrpteeritud kasutades %lu parooli krpteeritud he parooliga krpteeritud tundmatu algoritmiga %d teate krpteerimine --pgp2 moodis nuab IDEA iffrit krpteerimine kasutades ainult smmeetrilist ifritviga `%s' loomisel: %s viga vtmehoidla `%s' loomisel: %s viga parooli loomisel: %s viga lpetaval real viga `%s' lugemisel: %s viga vtmebloki lugemisel: %s viga vtmehoidlasse `%s' kirjutamisel: %s viga avaliku vtme vtmehoidlasse `%s' kirjutamisel: %s viga salajase vtme vtmehoidlasse `%s' kirjutamisel: %s ekspordi vtmedekspordi vtmed vtmeserverissevliste programmide kivitamine on blokeeritud, kuna seadete failil on ebaturvalised igused TrustDB initsialiseerimine ebannestus: %s vtmehoidla vahemlu uuesti loomine ebannestus: %s viga faili sulgemiselviga faili loomiselviga faili kustutamiselfail on olemasviga faili avamiselviga faili lugemiselviga faili mber nimetamiselviga faili kirjutamiselsmmetrilise ifri %s (%d) kasutamine on vastuolus saaja eelistustega ldine vigagenereeri uus vtmepaargenereeri thistamise sertifikaatloon salajase vtme kaitseks mittesoovitavat 16 bitist kontrollsummat gpg-agent ei ole sesses sessioonis kasutatav gpg-agendi protokolli versioon %d ei ole toetatud iItTvVjJimpordi vtmed vtmeserveristimpordi/mesti vtmedsisendrida %u on liiga pikk vi seavahetus puudub sisendrida on pikem, kui %d smbolit vigane S2K mood; peab olema 0, 1 vi 3 vigane argumentvigane pakendvigane pakendi pis: vigane pakend: rida on pikem, kui %d smbolit vigane avateksti allkirja pis vigane kriipsudega mrgitud rida: vigased vaikimisi eelistused vigane vaikimisi-sert-tase; peab olema 0, 1, 2 vi 3 vigased ekspordi vtmed vigane rsialgoritm `%s' vigased impordi vtmed vigane vtmehoidlavigane min-sert-tase; peab olema 1, 2 vi 3 vigane pakettvigane paroolvigased isikliku ifri eelistused vigased isikliku pakkimise eelistused vigased isikliku lhendi eelistused proc_tree() tuvastas vigase juurmise paketi vigane vrtus vtme eksport ebannestus: %s vti loodi %lu sekund tulevikus (ajahpe vi kella probleem) vti loodi %lu sekundit tulevikus (ajahpe vi kella probleem) vti ei ole mrgitud ebaturvaliseks - sellega ei saa vlts RNGd kasutada! vtmehoidla `%s' on loodud vtmeserveri vigavtmeserverilt lugemine ebannestus: %s vtmeserveri uuendamine ebannestus: %s vtmeserveri otsing ebannestus: %s vtmeserverile saatmine ebannestus: %s vigane vtme suurus; kasutan %u bitti vtme suurus mardatud les %u bitini nita vtit ja kasutaja IDdnita vtmeidnita vtmeid ja srmejlginita vtmeid ja allkirjunita eelistusi (ekspert)nita eelistusi (detailsena)nita salajasi vtmeidloo eraldiseisev allkiriteata ajatemplite konfliktist ainult hoiatusegamake_keysig_packet ebannestus: %s vigane CRC vigane GPG_AGENT_INFO keskkonnamuutuja vigane kasutaja idmarginals-needed peab olema suurem, kui 1 tstan vtme allkirja igesse kohta eEavateksti allkirjad ksteise sees vrgu vigamitte kunagiuus omaduste fail `%s' on loodud trustdb jrgmine kontroll %s eivastavat avalikku vtit pole: %s puudub salajaste vtmete vaikimisi vtmehoidla: %s entroopia kogumise moodul puudub trustdb kontrolliks puudub vajadus mittelokaalse programmi kivitamist ei toetata salajast vtit pole allkirjastatud andmeid pole sellist kasutaja id poleabsoluutselt usaldatavaid vtmeid pole ei leia OpenPGP andmeid. kehtivaid aadresse pole ei leia kirjutatavat vtmehoidlat: %s kirjutatavat avalike vtmete hoidlat pole: %s kirjutatavat salajaste vtmete hoidlat pole: %s ei ole eraldiseisev allkiri krptimataei tdeldudei ole toetatudmrkus: random_seed fail on thi mrkus: random_seed faili ei uuendatud ok, me oleme anonmne teate saaja. vana DEK kodeerimine ei ole toetatud vana stiili (PGP 2.x) allkiri initsialiseerimata turvalise mluta ei ole operatsioon vimalik vtmete fail `%s': %s algne failinimi on='%.*s' omaniku usalduse info puhastatud parooli ei korratud ieti; proovige uuestipalun tehke --check-trustdb palun e-posti aadress, aadress ei ole kohustuslik, aga vga soovitavLisainfot leiate lehelt http://www.gnupg.org/documentation/faqs.html palun kasutage selle asemel "%s%s" enneaegne faililpp (poolik CRC) enneaegne faililpp (puudub CRC) probleem krptitud paketi ksitlemisel probleem agendiga - blokeerin agendi kasutamise ksi enne lekirjutamistkaitse algoritm %d%s ei ole toetatud avalik ja salajane vti on loodud ja allkirjastatud. avaliku vtmega lahtikrpteerimine ebannestus: %s avalik vti ei sobi salajase vtmega! avaliku vtmega krpteeritud andmed: hea DEK ei leia avalikku vtitvVvljuvlju sellest menstkvooditud smbol pakendis - tenoliselt on kasutatud vigast MTA programmi loen failist `%s' loen vtmeid failist `%s' loen standardsisendit ... thistamise phjus: eemalda vtmed avalike vtmete hoidlasteemalda vtmed salajaste vtmete hoidlastressursi limiitthistamise kommentaar: mardatud les %u bitini salvesta ja vljuotsi vtmeid vtmeserveristsalajane vti ei ole kttesaadavsalajase vtme komponendid ei ole kttesaadavad vali kasutaja ID Nvalitud sertifikaadi lhendi algoritm ei ole lubatud valitud ifri algoritm ei ole lubatud valitud lhendi algoritm ei ole lubatud nita seda abiinfotallkirjasta vtiallkirjasta vti lokaalseltallkirjasta vi toimeta vtitallkirja kontroll jeti ra allkirjastamine ebannestus: %s allkirjastan:jtsin vahele: avalik vti on juba olemas jtsin vahele: avalik vti on juba vaikimisi saaja jtsin vahele: avalik vti on juba olemas jtan bloki tbiga %d vahele eraldiseisev thistus - realiseerimiseks kasutage "gpg --import" eraldiseisev allkiri klassiga 0x%02x alampaketil tbiga %d on kriitiline bitt seatud ssteemi viga vlise programmi kasutamisel: %s vta vtmed sellest vtmehoidlasttekstimoodantud sertifikaadi poliisi URL on vigane antud allkirja poliisi URL on vigane allkirja ei nnestu kontrollida. Palun pidage meeles, et allkirja fail (.sig vi .asc) peab olema ksureal esimene fail. avaliku vtme "%s" jaoks on salajane vti! see vib olla phjustatud puuduvast iseenda allkirjast see teade ei pruugi olla programmiga %s kasutatav ajatemplite konfliktavalike vtmete puhvris on liiga palju vtmeid - blokeerin usalduse andmebaasi vigausalduse kirje %lu ei oma soovitud tpi %d usalduse kirje %lu, pringu tp %d: lugemine ebannestus: %s usalduse kirje %lu, tp %d: kirjutamine ebannestus: %s trustdb kirje %lu: lseek ebannestus: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaktsioon on liiga suur trustdb: lseek ebannestus: %s trustdb: lugemine ebannestus (n=%d): %s trustdb: sync ebannestus: %s foto ID ei saa nidata! vlist programmi ei nnestu kivitada ei nnestu lugeda vlise programmi vastust: %s exec-path vrtuseks ei nnestu seada %s kikide krpteeritavate vtmetega ei saa IDEA iffrit kasutada. ootamatud andmedrealiseerimata ifri algoritmrealiseerimata avaliku vtme algoritmtundmatutundmatu ifri algoritmtundmatu pakkimisalgoritmtundmatu lhendi algoritmtundmatu paketi tptundmatu kaitsealgoritm tundmatu avaliku vtme algoritmtundmatu allkirja klasstundmatu versioonvline programm lpetas erandlikult mittetoetatud URImittekasutatav avaliku vtme algoritmmittekasutatav avalik vtimittekasutatav salajane vtiuuenda vtmeid vtmeserveristuuendamine ebannestus: %s salajase vtme uuendamine ebannestus: %s uuenda usalduse andmebaasikasuta: gpg [vtmed] kasuta vljundfailinakasuta kanoonilist tekstimoodiselle kustutamiseks kasutage vtit "--delete-secret-keys". kasuta seda kasutaja IDdkasutaja ID "%s" on juba thistatud kasutan iffrit %s ole jutukaskontrolli allkirjanrk vtiloodi nrk vti - proovin uuesti veider suurus krptitud sessiooni vtme jaoks (%d) kirjutan otsese allkirja kirjutan vtit siduva allkirja kirjutan avaliku vtme faili `%s' kirjutan salajase vtme faili `%s' kirjutan iseenda allkirja kirjutan faili `%s' kirjutan standardvljundisse kasutati valet salajast vtitjJjahPGP 2.x stiilis vtmetega saab avateksti allkirjastada ainult --pgp2 moodis PGP 2.x stiilis vtmetega saab eraldi-allkirjastada ainult --pgp2 moodis RSA vtmeid pikkusega kuni 2048 bitti saab krpteerida ainult --pgp2 moodis --pgp2 moodis saate luua ainult eraldiseisvaid vi avateksti allkirju --pgp2 moodis ei saa korraga allkirjastada ja krpteerida te ei saa nimetada vtit iseenda mratud thistajaks te leidsite vea ... (%s:%d) %s ei ole moodis %s lubatud. --pgp2 moodis peate kasutama faile (ja mitte toru). |FP|kirjuta olekuinfo sellesse failipidemesse|NIMI|krpti NIMEle|N|mra pakkimise tase N (0 blokeerib)|[fail]|loo avateksti allkiri|[fail]|loo allkiri|algo [failid]|trki teatelhendidgnupg-1.4.20/po/id.gmo0000644000175000017500000021234312635457221011371 00000000000000}U'@5-A5o556727O7l777D7.8I7888888 9$9@9Y9$v9&9,99 ::<:N:h:]::/:(&;.O;3~;;;;;<!<4<M<i<"<<<<"<%=&-=!T=%v="=#='= >,>I>^>{>>>(>$>??#0?T?s???&?%?,@4C@x@@@@@'@A/AMA_ArAA"AAA-A(B0EBHvB B C CCAD/CD0sD\DE-E0DE.uEEEE3E4F-HFvF.0G_G hG rG:GGG#G&H&@HgH~HHHGH@H>=I+|I=II"I:JTJgJyJ J/JJKHK-L ?LJL8]L#LL"LLE}MM;YNNIOgOO$OOOOPPPQ)Q?QRQbQtQ%QQQ MR!nR<RR"R, S,8S2eSS S(S S T**TUTgTTTTT"TUU/UEOUoU V &V8GV'VcV/ WEf1g=BgIg4gg#h=Bhh?hDh1%i5WiHi-iHjMjj<jB/k)rkCk.k@lFPl2l1l l2mPmhQn*s&s1 t#>t2bt>tt=u0uMu"Cv&fv3v%vDv,,y5Yyyy_y z z(z 9zEz%^zzzz zz zz {*{2{:{J{R{a{p{ {{{{{{{ |-|.K|%z|2||||}-}B}5W}}};}<}/~E~&[~~~-~(~~10by 2$O=t%؀ 1H`|&&Á K%^$̂ ނ @- n|!D+/'W`~%%$܄  .7f2 8+Ht$&$,4CGZHB.DTrȈ 'B[u'.@(R,{ Ɋ ׊$% (I%h&ҋ!#AV%u% ی #&&J)q< (,Hu;MΎ7O"g-+ҏ*!)&K$rIÐ  ;N#f#ґ #0T3e%% "%H\ e5$4%1*W0Ӕ.ܔ* 6+Ǖ/%#I(\-/Ȗ,"%)Hr ͗#-(VIuϘ .Ibvř#ՙ #7 Klɚܚ6#+ Op-› )EayDFEFDAѝ7K$hF Ԟ$ #1U#n0$U4Tp-ɣ!.Hdܤ#3"W1z57O"o]2 2<4o6ۧ!2Nc"'(G.p%(ũ! #1"Ux!Ҫ%%8^t$&ګ(6'_:>¬-K`,tۭ"*Mg3-5BZ b p}5&Ѱ*b#''Ʊ1$ #Ei,o5/Ҳ(ճ ޳ 8-G!d(*ڴ "Y+E>˵* A5w)G%;3X  .Ѹ*&Cj'qCAC!e$4 Y#z)ȼ޼׽"@[n6޾*%Dܿ!*A/l/1&&%(L-u 0!3"Ps$#$Cv]"!11Kj}*K&_)'((:*-/X#  ,<Oje;WW32#Rv;Ql# #@6M <2M0(F6a1A8F7F~9/*/CZ$@V2[@G/KG$?BE/Q1JF|g:+:f0B%$.-(@V4=D\'u)C" u.7:(r7  $'CZr '.D\u #'%9=_08!(?h):%I;L*04C$xC&>Rc !-=*&h #$4#P*t+ MA(a>(gvC(+AJf.y#- .;j6 5M2a')'47lJJR2 (+!Tv3/K{0$1KNh{$' '# ).X0w2)$N0k78 '8G!V)x#!>G^y0?X$}$/'4.\ // ) ,7ZN >Rg$6*7*b % #!9E"B,8I 53 0 6 0 A 3S  3 . - !1 )S  }    " + 4A #v J  ( (!  J X  w   !  //Cs& !!)E]w:+5LR g!s.:Rc"vOQRCNQM7$4N.N'h^@!,%TBVz !@S1K0"R4`Zl(h;<Fuat|WhxtQh5^N =}\-]<AJk8>|' law]syQ_:B/Hq K2pe3g$CvHEk\"gSW"l+1)FLm`F*w>YyDVMws SfPP*B{I ;4yoX[+A0:dXgzx2iar7%.67 NU{;d?@9 }_3?<pbmRcH&9GsCj.ZCrzT&K$^_f.Zfi| x?ve' n1m Luo+ (8Y~{%vOQiUA/#>-~M*qP'N}8Ir)k`M9oVbnp&OJGYX6E:[W6t 5qjIcbJG jR0)7#dn=/$ UO]\L,!Te245 , =#3DEu[cD- ( Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d bad signatures %d keys processed (%d validity counts cleared) %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s CancelCertificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter JPEG filename for photo ID: Enter an optional description; end it with an empty line: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. Is this photo correct (y/N/q)? It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key available at: Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select the reason for the revocation: Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Reason for revocation: %s Repeat passphrase Repeat passphrase: Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Secret key is available. Secret parts of primary key are not available. Signature expired %s Signature expires %s Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu UncompressedUsage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create directory `%s': %s can't disable core dumps: %s can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverexternal program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key export failed: %s key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornever new configuration file `%s' created next trustdb check due at %s nono corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no need for a trustdb check no remote program execution supported no secret key no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to display photo ID! unable to execute external program unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked using cipher %s verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg-id Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:24+0200 Last-Translator: Tedi Heriyanto Language-Team: Indonesian Language: id MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.3 Masukkan user ID. Akhiri dengan baris kosong: Tidak tersedia cukup byte random. Silakan melakukan aktivitas lain agar memungkinkan SO mengumpulkan lebih banyak entropi! (Perlu %d byte lagi) Silakan pilih sebuah gambar sebagai ID foto anda. Gambar haruslah file JPEG. Ingat bahwa gambar disimpan dalam kunci publik anda.. Jika anda menggunakan sebuah gambar yang sangat besar, kunci anda akan menjadi semakin besar pula! Jagalah agar gambar mendekati ukuran 240x288. Algoritma yang didukung: diimpor: %lu tidak berubah: %lu subkey baru: %lu ID user baru: %lu tidak diimpor: %lu tanpa ID user: %lu Tidak pasti signature milik pemilik. Signature mungkin palsu. Tidak ada indikasi signature milik pemilik. signature baru: %lu Fingerprint subkunci = kunci rahasia dibaca: %lu lewati kunci baru: %lu Fingerprint subkunci = (%d) DSA (hanya menandai) (%d) RSA (hanya enkripsi) (%d) RSA (hanya menandai) (0) Saya tidak akan menjawab.%s (1) Saya belum memeriksanya.%s (2) Saya telah melakukan pemeriksaan biasa.%s (3) Saya telah melakukan pemeriksaan hati-hati.%s pembatalan kunci baru: %lu ..Tidak dapat menandai. kunci rahasia diimpor: %lu (tidak dapat diekspor) Fingerprint kunci primer = kunci rahasia tidak berubah: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d signature yang buruk %d kunci diproses (%d hitungan validitas dihapus) %d signature tidak diperiksa karena ada kesalahan %d signature tidak diperiksa karena tidak ada kunci terdeteksi ID %d user tanpa self-signature yang valid %s ... %s belum dapat dipakai dengan %s %s data terenkripsi %s kunci sesi enkripsi %s enkripsi akan digunakan %s adalah yang baru %s adalah yang tidak berubah %s tidak masuk akal dengan %s! %s tidak dibolehkan dengan %s! %s signature, algoritma digest %s %s. %s/%s dienkripsi untuk: %s %s: direktori tidak ada! %s: kesalahan membaca record bebas: %s %s: kesalahan membaca catatan versi: %s %s: kesalahan memperbaharui catatan versi: %s %s: kesalahan menulis dir record: %s %s: kesalahan menulis catatan versi: %s %s: gagal menambahkan record: %s %s: gagal membuat hashtable: %s %s: gagal membuat catatan versi: %s%s: gagal mengosongkan record: %s %s: versi file %d tidak valid %s: trustdb tidak valid %s: tercipta trustdb tidak valid %s: keyring tercipta %s: bukan file trustdb %s: dilewati: %s %s: dilewati: kunci publik telah ada %s: dilewati: kunci publik dimatikan %s: tercipta trustdb %s: suffix tidak dikenal %s: catatan versi dengan recnum %lu %s:%d: opsi tidak digunakan lagi "%s" %s:%d: opsi ekspor tidak valid %s:%d: opsi impor tidak valid (Tidak diberikan deskripsi) (Mungkin anda ingin memilih %d di sini) (Ini adalah kunci pembatalan sensitif) (kecuali anda menspesifikasikan kunci dengan fingerprint) (anda mungkin menggunakan program yang salah untuk tugas ini) --clearsign [namafile]--decrypt [namafile]--edit-key id-user [perintah]--encrypt [namafile]--lsign-key id-user--output tidak berfungsi untuk perintah ini --sign --encrypt [namafile]--sign --symmetric [namafile]--sign [namafile]--sign-key id-user--store [namafile]--symmetric [namafile]-k[v][v][v][c] [id-user] [keyring]... kesalahan (%s:%d:%s) 1 signature yang buruk 1 signature tidak diperiksa karena tidak ada kunci 1 signature tidak diperiksa karena kesalahan terdeteksi 1 ID user tanpa self-signature yang valid @ (Lihat man page untuk daftar lengkap semua perintah dan option) @ Contoh: -se -r Bob [file] tandai dan enkripsi untuk user Bob --clearsign [file] buat signature berbentuk teks --detach-sign [file] buat signature detached --list-keys [nama] tampilkan kunci --fingerprint [nama] tampilkan fingerprint @ Pilihan: @Perintah: Pemaksaan output mode ASCII. Jawab "ya" (atau "y") jika telah siap membuat subkey.Jawab "ya" jika ingin menghapus subkeyJawab "ya" jika tidak apa-apa menimpa fileJawab "ya" jika anda benar-benar ingin menghapus ID user ini. Seluruh sertifikat juga akan hilang!Jawab "ya" atau "tidak"Anda tetap ingin menambahkannya? (y/n) Anda tetap ingin membatalkannya? (y/n) Apakah anda yakin masih ingin menandainya? (y/N) Tidak dapat memeriksa signature: %s Tidak dapat mengedit kunci ini: %s BatalSertifikat mengarahkan ke kunci terpercaya: Ganti (N)ama, (K)omentar, (E)mail atau (O)ke/(Q)uit? Ganti (N)ama, (K)omentar, (E)mail atau (Q)uit? Rubah preferensi seluruh user ID (atau hanya yang terpilih) ke daftar preferensi saat ini. Timestamp seluruh self-signature yang terpengaruh akan bertambah satu detik. Merubah batas waktu untuk kunci primer. Cipher: Komentar: Kompresi: Membuat sertifikat pembatalan untuk signature ini? (y/N)Notasi signature kritis: Kebijakan signature kritis: Hapus signature baik ini? (y/T/q)Hapus signature tidak valid ini? (y/T/q)Hapus signature tidak dikenal ini? (y/T/q)Menghapus %d signature. Menghapus %d signature. Menghapus signature. Digest: Anda ingin mengeluarkan signature baru untuk menggantikan yang telah habis berlaku? (y/N)Apakah anda ingin menjadikannya signature yang full exportable? (y/N)Anda ingin mempromosikannya ke self-signature OpenPGP ? (y/N) Apakah anda ingin menandainya lagi? (y/N) Anda ingin signature anda kadaluarsa pada waktu yang sama? (y/n) Alamat email: Masukkan nama file JPEG sebagai ID foto: Masukkan sebuah deskripsi opsional; akhiri dengan sebuah baris kosong: Masukkan nama file baruMasukkan passphrase Masukkan passphrase: Masukkan nama pemegang kunciMasukkan passphrase baru untuk kunci rahasia ini. Masukkan nilai yang diperlukan seperti pada prompt. Dapat digunakan format (YYYY-MM-DD) untuk mengisi tanggal ISO tetapi anda tidak akan mendapat respon kesalahan yang baik - sebaiknya sistem akan berusaha menginterprestasi nilai yang diberikan sebagai sebuah interval.Masukkan ukuran kunciMasukkan ID user penerima pesan.Masukkan user ID pihak yang ingin dibatalkan: Fitur: File `%s' ada. Beri nama file tempat berlakunya signatureTeruskan dan ketikkan pesan anda .... Hash: Petunjuk: Pilih ID user untuk ditandai Sudah seberapa teliti anda memverifikasi kunci yang akan anda gunakan untuk menandai benar benar milik orang tersebut? Jika anda tidak tahu jawabannya. masukkan "0". Cipher IDEA tidak tersedia, secara optimis berusaha menggunakan %s Jika anda suka, anda dapat memasukkan teks menjelaskan mengapa anda mengeluarkan sertifikat pembatalan ini. Buatlah ringkas. Baris kosong mengakhiri teks. Jika anda ingin menggunakan kunci tidak terpercaya ini, jawab "ya".Secara umum bukan ide baik untuk menggunakan kunci yang sama untuk menandai dan mengenkripsi. Algoritma ini seharusnya digunakan dalam domain tertentu. Silakan berkonsultasi dulu dengan ahli keamanan anda.Karakter tidak valid dalam komentar Karakter tidak valid dalam nama Perintah tidak valid (coba "help") Passphrase tidak valid; silakan coba lagiPilihan tidak valid. Apakah foto ini benar (y/N/q)? Terserah anda untuk memberi nilai baru di sini; nilai ini tidak akan diekspor ke pihak ketiga. Kami perlu untuk mengimplementasikan web-of-trust; tidak ada kaitan dengan (membuat secara implisit) web-of-certificates.Kunci tersedia di:Pembuatan kunci dibatalkan. Pembuatan kunci gagal: %s Kunci ini telah dikompromikanKunci tidak lagi digunakanKunci diproteksi. Kunci dibatalkanKunci dilampauiKunci valid untuk? (0) Kunci tidak berubah sehingga tidak perlu pembaharuan. KeyringN untuk merubah nama. K untuk merubah komentar. E untuk merubah alamat email. O untuk melanjutkan dengan pembuatan kunci. K untuk menghentikan pembuatan kunci.CATATAN: %s tidak untuk pemakaian normal! CATATAN: Kunci ini tidak diproteksi! CATATAN: membuat subkey bagi kunci-kunci v3 tidak OpenPGP compliant CATATAN: kunci telah dibatalkanCATATAN: tidak ada file pilihan baku `%s' CATATAN: file pilihan baku lama `%s' diabaikan CATATAN: pengirim meminta "for-your-eyes-only" CATATAN: mode S2K sederhana (0) tidak dianjurkan CATATAN: trustdb tidak dapat ditulisi Nama tidak boleh dimulai dengan digit Nama harus berukuran minimum 5 karakter Perlu kunci rahasia untuk melakukan hal ini. NnKkEeOoQqTidak ada signature koresponden di ring rahasia Tidak tersedia bantuanTidak tersedia bantuan untuk `%s'Tidak ada alasan diberikanTidak ada ID user tersebut. Tidak ada ID user dengan index %d Bukan alamat email yang valid Catatan: Kunci ini telah ditiadakan Catatan: Kunci ini telah berakhir! Tidak ada yang dihapus. Silakan perbaiki kesalahan ini dulu Jangan menaruh alamat email ke dalam nama sebenarnya atau komentar Silakan masukan nama file baru. Jika anda hanya menekan RETURN nama file baku (yang diapit tanda kurung) akan dipakai.Silakan masukkan komentar tambahanSilakan masukkan nama file data: Silakan masukkan passphrase; ini kalimat rahasia Silakan perbaiki kemungkinan lubang keamanan ini Perhatikan bahwa validitas kunci yang ditampilkan belum tentu benar kecuali anda memulai kembali program. Silakan hapus pilihan dari kunci rahasia. Silakan ulangi passphrase terakhir, sehingga anda yakin yang anda ketikkan.Laporkan bug ke . Anda harus memilih minimum satu ID user. Silakan pilih alasan untuk pembatalan: Silakan pilih kunci yang anda inginkan: Silakan spesifikasikan lama kunci tetap valid. 0 = kunci tidak pernah berakhir = kunci berakhir dalam n hari w = kunci berakhir dalam n minggu m = kunci berakhir dalam n bulan y = kunci berakhir dalam n tahun Silakan spesifikasikan lama signature tetap valid. 0 = signature tidak pernah berakhir = signature berakhir dalam n hari w = signature berakhir dalam n minggu m = signature berakhir dalam n bulan y = signature berakhir dalam n tahun Silakan gunakan dulu perintah "toogle". Silakan tunggu, entropi sedang dikumpulkan. Lakukan beberapa pekerjaan bila itu tidak akan membosankan anda, karena hal tersebut akan memperbaiki kualitas entropi. Fingerprint kunci primer:Pubkey: Kunci publik dimatikan. Nama sebenarnya: Ingin membuat sertifikat pembatalan? (y/T)Yakin ingin menghapus self-signature ini? (y/T)Alasan pembatalan: %s Ulangi passphrase Ulangi passphrase: Keysize yang diminta adalah %u bit Sertifikat pembatalan tercipta. Sertifikat pembatalan tercipta. Pindahkanlah ke media yang dapat anda sembunyikan; jika Mallory memperoleh akses ke sertifikat ini ia dapat menggunakannya untuk membuat kunci anda tidak dapat digunakan. Adalah hal cerdas untuk mencetak sertifikat ini dan menyimpannya, bila sewaktu-waktu media anda tidak dapat dibaca. Namun berhati-hatilah: Sistem pencetakan mesin anda mungkin menyimpan data dan menyediakannya untuk yang lain! Kunci rahasia tersedia. Bagian rahasia kunci primer tidak tersedia. Signature kadaluwarsa %s Signature kadaluarsa pada %s Notasi signature: Kebijakan signature: Sintaks: gpg [pilihan] [file] tandai, cek, enkripsi atau dekripsi operasi baku tergantung pada data input Random number generator yang digunakan tidak aman, ia bukanlah RNG yang kuat! JANGAN MENGGUNAKAN DATA YANG DIHASILKAN PROGRAM INI!! Self-signature pada "%s" adalah signature bergaya PGP 2.x. Signature tidak valid. Adalah hal yang masuk akal untuk menghapusnya dari keyring andaTidak ada preferensi pada user ID bergaya PGP 2.x. Perintah ini tidak dibolehkan saat dalam mode %s. Ini adalah signature yang menghubungkan ID pemakai ke kunci. Biasanya bukan ide yang baik untuk menghapus signature semacam itu. Umumnya GnuPG tidak akan dapat menggunakan kunci ini lagi. Sehingga lakukan hal ini bila self-signature untuk beberapa alasan tidak valid dan tersedia yang kedua.Ini adalah signature valid untuk kunci; anda normalnya tdk ingin menghapus signature ini karena mungkin penting membangun koneksi trust ke kunci atau ke kunci tersertifikasi lain dengan kunci ini.Kunci ini milik kita Kunci ini telah ditiadakanKunci ini telah berakhir!Kunci ini akan kadaluarsa pada %s Kunci ini tidak diproteksi. Signature ini tidak dapat diperiksa karena anda tidak memiliki kunci korespondennya. Anda perlu menunda penghapusannya hingga anda tahu kunci yang digunakan karena kunci penanda ini mungkin membangun suatu koneksi trust melalui kunci yang telah tersertifikasi lain.Kunci ini akan kadaluarsa pada %s Hal ini akan membuat kunci tidak dapat digunakan dalam PGP 2.x. Akan dibatalkan oleh: Untuk membuat Web-of-Trust, GnuPG perlu tahu kunci mana yang sangat dipercaya - mereka biasanya adalah kunci yang anda punya akses ke kunci rahasia. Jawab "yes" untuk menset kunci ini ke sangat dipercaya Jumlah yang telah diproses: %lu Tidak dikompresiPemakaian: gpg [pilihan] [file] (-h untuk bantuan)Pemakaian: gpgv [opsi] [file] (-h untuk bantuan)User ID "%s" kadaluwarsa.User ID "%s" bukan self-signed.User ID "%s" dibatalkan.ID User tidak lagi validWARNING: "%s" adalah opsi terdepresiasi PERINGATAN: %s menimpa %s PERINGATAN: terdapat 2 file dengan informasi penting. PERINGATAN: Ini adalah kunci bergaya PGP2.x. Menambahkan sebuah revoker designated dapat ............menyebabkan beberapa versi PGP menolak kunci ini. PERINGATAN: Ini adalah kunci bergaya PGP2. Menambahkan sebuah photo ID dapat menyebabkan beberapa versi PGP menolak kunci ini. PERINGATAN: Kunci ini telah dibatalkan oleh pihak yang berwenang PERINGATAN: Kunci ini telah dibatalkan oleh pemiliknya! PERINGATAN: Kunci ini tidak disertifikasi dengan sig yang terpercaya! PERINGATAN: Kunci tdk disertifikasi dg signature terpercaya yg cukup! PERINGATAN: Subkey ini telah dibatalkan oleh pemiliknya! PERINGATAN: Menggunakan kunci tidak dipercaya! PERINGATAN: Kita tidak percaya kunci ini! PERINGATAN: terdeteksi kunci lemah - silakan ubah passphrase lagi. PERINGATAN: `%s' adalah file kosong PERINGATAN: signature user ID bertanggal %d detik di masa depan PERINGATAN: menunjuk sebuah kunci sebagai pihak yang dibatalkan tidak dapat dilakukan PERINGATAN: pesan terenkripsi telah dimanipulasi! peringatan: ukuran file random_seed tidak valid - tidak dipakai PERINGATAN: pesan dienkripsi dengan kunci lemah dalam cipher simetrik. PERINGATAN: integritas pesan tidak terlindungi PERINGATAN: multi signature terdeteksi. Hanya yang pertama akan diperiksa. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. PERINGATAN: tidak ada yang diekspor PERINGATAN: opsi dalam `%s' belum aktif selama pelaksanaan ini PERINGATAN: kunci sesi mungkin dienkripsi simetris secara tidak aman PERINGATAN: program mungkin membuat file core! Peringatan: penerima yang disebutkan (-r) tanpa menggunakan enkripsi public key Peringatan: konflik digest signature dalam pesan Peringatan: kunci ini mungkin dibatalkan:(kunci pembatalan tidak ada) PERINGATAN: tidak dapat melakukan %%-expand notasi (terlalu besar). Menggunakan yang tidak di-expand. PERINGATAN: tidak dapat menghapus direktori temp `%s': %s PERINGATAN: tidak dapat menghapus file temp (%s) `%s': %s Peringatan: menggunakan memori yang tidak aman! PERINGATAN: menggunakan random number generator yang tidak aman!! Kita perlu membuat banyak byte random. Adalah ide yang baik untuk melakukan aksi lain (mengetik pada keyboard, menggerakkan mouse, memakai disk) selama pembuatan prima; ini akan memberi random number generator kesempatan yang baik untuk memperoleh entropi. Ketika anda menandai user ID pada kunci, anda perlu memverifikasi bahwa kunci milik orang yang disebut dalam user ID. Ini penting bagi orang lain untuk tahu seberapa cermat anda memverifikasi ini. "0" berarti anda tidak melakukan klaim tentang betapa cermat anda memverifikasi kunci. "1" berarti anda percaya bahwa kunci dimiliki oleh orang yang mengklaim memilikinya namun anda tidak dapat, atau tidak memverifikasi kunci sama sekali. Hal ini bergunabagi verifikasi "persona", yaitu anda menandai kunci user pseudonymous "2" berarti anda melakukan verifikasi kasual atas kunci. Sebagai contoh, halini dapat berarti bahwa anda memverifikasi fingerprint kunci dan memeriksa user ID pada kunci dengan photo ID. "3" berarti anda melakukan verifikasi ekstensif atas kunci. Sebagai contoh, hal ini dapat berarti anda memverifikasi fingerprint kunci dengan pemilik kunci secara personal, dan anda memeriksa, dengan menggunakan dokumen yang sulit dipalsukan yang memiliki photo ID (seperti paspor) bahwa nama pemilik kunci cocok dengan nama user ID kunci, dan bahwa anda telah memverifikasi (dengan pertukaran email) bahwa alamat email pada kunci milik pemilik kunci. Contoh-contoh pada level 2 dan 3 hanyalah contoh. Pada akhirnya, terserah anda untuk memutuskan apa arti "kasual" dan "ekstensif" bagi anda ketika menandai kunci lain. Jika anda tidak tahu jawaban yang tepat, jawab "0".Anda akan membatalkan signature ini: Anda menggunakan set karakter `%s'. Anda tidak dapat merubah batas waktu kunci v3 Anda tidak dapat menghapus ID user terakhir! Anda tidak menspesifikasikan ID user. (anda dapat gunakan "-r") Anda tidak ingin passphrase - bukan ide yang baik! Anda tidak ingin sebuah passphrase - ini mungkin ide yang *buruk*! Namun saya akan tetap lakukan. Anda dapat merubah passphrase anda setiap saat, menggunakan program ini dengan pilihan "--edit-key". Anda tidak boleh revoker designated ke kunci bergaya PGP2.x. Anda tidak boleh menambahkan sebuah photo ID ke kunci bergaya PGP2 Anda tidak boleh membuat signature OpenPGP pada sebuah kunci PGP 2.x saat dalam mode --pgp2 Anda harus memilih minimum satu kunci. Anda harus memilih minimum satu ID user. Anda perlu sebuah passphrase untuk melindungi kunci rahasia anda. Anda memilih USER-ID ini: "%s" Anda harus menspesifikasikan alasan pembatalan. Semua ini tergantung konteks, anda dapat memilih dari daftar berikut: "Key has been compromised" Gunakan ini jika anda punya alasan untuk percaya bahwa orang yang tidak berhak memiliki akses ke kunci pribadi anda. "Key is superseded" Gunakan ini bila anda mengganti kunci anda dengan yang baru. "Key is no longer used" Gunakan ini bila anda telah mempensiunkan kunci ini. "User ID is no longer valid" Gunakan ini untuk menyatakan user ID tidak boleh digunakan lagi; normalnya digunakan untuk menandai bahwa alamat email tidak valid lagi. Signature anda saat ini pada "%s" telah habis berlaku. Signature anda saat ini pada "%s" adalah signature.lokal Keputusan anda? Pilihan anda? Sistem anda tidak dapat menampilkan tanggal melebihi 2038. Namun, ia dapat menanganinya secara benar hingga 2106. [namafile][pembatalan][self-signature][uncertain]`%s' sudah dikompresi '%s' bukan file reguler - diabaikan '%s' bukanlah keyID panjang yang valid tambah sebuah photo IDtambah kunci pembatalantambah sebuah ID userheader armor: armor: %s asumsikan %s data terenkripsi mengasumsikan data bertanda dalam `%s' MPI yang burukURI yang buruksertifikat yang burukkunci yang burukpassphrase yang burukkunci publik yang burukkunci rahasia yang buruksignature yang buruklebih diambinerbuild_packet gagal: %s tidak dapat menutup `%s': %s tidak dapat terkoneksi ke `%s': %s tidak dapat membuat %s: %s tidak dapat membuat direktori `%s': %s tidak dapat meniadakan core dump: %s tidak dapat membuat bilangan prima dengan bit kurang dari %d tidak dapat menangani algoritma kunci publik %d tidak dapat menangani baris teks lebih dari %d karakter tidak dapat membuka `%s' tidak dapat membuka `%s': %s tidak dapat membuka data tertandai `%s' tidak dapat membuka keyringtidak dapat membaca `%s': %s tidak dapat melakukan statistik `%s': %s tidak dapat menggunakan paket simetri ESK karena mode S2K tidak dapat menulis `%s': %s dibatalkan oleh user tidak dapat menunjuk kunci bergaya PGP 2.x sebagai pihak yang dibatalkan tidak dapat menghindari kunci lemah untuk cipher simetrik; mencoba %d kali! ubah ownertrustubah passphraseGagal memeriksa signature yang dibuat: %s memeriksa trustdb kesalahan checksumalgoritma cipher %d%s tidak dikenal atau ditiadakan completes-needed harus lebih dari 0 perintah saling konflik ciptakan output asciidata tidak disimpan; gunakan pilihan "--output" untuk menyimpannya gagal dearmoring: %s dekripsi data (default)dekripsi gagal: %s dekripsi lancar gagal menghapus keyblok: %s jangan buat perubahangagal enarmoring: %s enkripsi datadienkripsi dengan passphrase %lu dienkripsi dengan 1 passphrase dienkripsi dengan algoritma tidak dikenal %d mengenkripsi pesan dalam mode --pgp2 membutuhkan cipher IDEA enkripsi hanya dengan symmetric cipherkesalahan penciptaan : `%s': %s kesalahan menulis keyring `%s': %s kesalahan penciptaan passphrase: %s kesalahan dalam garis trailer kesalahan membaca `%s': %s gagal membaca keyblock: %s kesalahan menulis keyring `%s': %s kesalahan menulis keyring publik `%s': %s kesalahan menulis keyring rahasia `%s': %s ekspor kunciekspor kunci ke key serverpemanggilan program eksternal ditiadakan karena permisi opsi file tidak aman gagal inisialisasi TrustDB: %s gagal membuat kembali cache keyring: %s kesalahan tutup filekesalahan buat filekesalahan hapus filefile adakesalahan buka filekesalahan baca filekesalahan ganti nama filekesalahan tulis filememaksa cipher simetrik %s (%d) melanggar preferensi penerima Kesalahan umumbuat sepasang kunci barubuat sertifikat revokasimembuat checksum 16-bit terdepresiasi untuk proteksi kunci rahasia gpg-agent tidak tersedia untuk sesi ini protokol gpg-agent versi %d tidak didukung iImMqQsSimpor kunci dari key serverimpor/gabung kuncibaris input %u terlalu panjang atau hilang LF baris input lebih dari %d karakter mode S2K yang tidak valid; harus 0, 1 atau 3 argumen tidak validarmor tidak validheader armor tidak valid: armor tidak valid: baris melebihi %d karakter header clearsig tidak valid dash escaped line tidak valid: preferensi baku tidak valid level cert default tidak valid; harus 0, 1, 2, atau 3 opsi ekspor tidak valid algoritma hash tidak valid `%s' opsi impor tidak valid keyring tidak validlevel cert min tidak valid; harus 0, 1, 2, atau 3 paket tidak validpassphrase tidak validpreferensi cipher personal tidak valid preferensi kompresi personal tidak valid preferensi digest personal tidak valid terdeteksi root paket tidak valid dalam proc_tree() nilai yang tidak valid Ekspor kunci gagal: %s kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam) kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam) kunci tidak dianggap sebagai tidak aman - tidak dapat digunakan dengan RNG palsu! %s: keyring tercipta kesalahan keyserverPenerimaan keyserver gagal: %s Refresh keyserver gagal: %s Pencarian keyserver gagal: %s Pengiriman keyserver gagal: %s keysize tidak valid; menggunakan %u bit keysize dibulatkan hingga %u bit tampilkan kunci dan ID usertampilkan kuncitampilkan kunci dan fingerprinttampilkan kunci dan signaturetampilkan preferensi (ahli)tampilkan preferensi (verbose)tampilkan kunci rahasiabuat detached signaturebuat timestamp konflik hanya sebagai peringatangagal make_keysig_packet: %s CRC tidak tepat variabel lingkungan GPG_AGENT_INFO salah bentuk user id yang tidak benarmarginals-needed harus lebih dari 1 memindahkan signature kunci ke tempat yang tepat tTsignature teks bersarang kesalahan jaringantidak pernah...file konfigurasi baru `%s' tercipta pemeriksaan trustdb berikutnya pada %s n|t|tidaktidak ada kunci publik yang sesuai: %s tidak ada keyring rahasia baku: %s modul entropi gathering tidak terdeteksi tidak perlu memeriksa trustdb tidak ada eksekusi program remote yang didukung tidak ada kunci rahasia tidak ada data tertandai tidak ada user id tsbtidak ditemukan kunci yang benar-benar terpercaya tidak ditemukan data OpenPGP yang valid. tidak ada alamat yang valid tidak ditemukan keyring yang dapat ditulisi: %s tidak ditemukan keyring publik yang dapat ditulisi: %s tidak ditemukan keyring rahasia yang dapat ditulisi: %s bukan detached signature tidak dienkripsitidak diprosestidak didukungcatatan: file random_seed kosong catatan: file random_seed tidak diupdate baik, kita adalah penerima anonim. encoding lama DEK tidak didukung signature model lama (PGP 2.X) operasi tidak mungkin tanpa menginisialisasi memori yang aman file pilihan `%s': %s original file name='%.*s' informasi ownertrust dihapus passphrase tidak diulang dengan benar; coba lagilakukanlah --check-trustdb silakan masukkan alamat email (pilihan namun sangat dianjurkan)silakan lihat http://www.gnupg.org/documentation/faqs.html untuk informasi lebih lanjut silakan gunakan "%s%s" eof prematur (dalam CRC) eof prematur (tanpa CRC) masalah menangani paket terenkripsi masalah dengan agen - tiadakan penggunaan agen tanya sebelum menimpaalgoritma proteksi %d%s tidak didukung kunci publik dan rahasia dibuat dan ditandai. gagal dekripsi kunci publik: %s kunci publik tidak cocok dengan kunci rahasia! data terenkripsi dengan kunci publik: DEK baik kunci publik tidak ditemukankKq|k|keluarberhenti dari menu inikarakter yang dapat dicetak dalam armor - mungkin telah digunakan MTA yang mengandung bug Membaca dari `%s' membaca pilihan dari `%s' membaca stdin ... Alasan pembatalan:hapus kunci dari keyring publikhapus kunci dari keyring pribadibatasan sumber dayaKomentar pembatalan:dibulatkan hingga %u bit simpan dan berhenticari kunci di key serverkunci rahasia tidak tersediabagian kunci rahasia tidak tersedia pilih ID user Nalgoritma sertifikasi digest yang dipilih tidak valid algoritma cipher yang dipilih tidak valid algoritma digest yang dipilih tidak valid tampilkan bantuantandai kuncitandai kunci secara lokaltandai atau edit kunciverifikasi signature tidak diabaikan gagal menandai: %s menandai:dilewati: kunci publik telah diset dilewati: kunci publik telah diset sebagai penerima baku dilewati: kunci pribadi telah ada melewati blok tipe %d pembatalan mandiri - gunakan "gpg --import" untuk mengaplikasikan kelas signature mandiri 0x%02x subpaket tipe %d memiliki bit kritis terset kesalahan sistem ketika memanggil program eksternal: %s mengambil kunci ini dari keyringmodeteksURL sertifikasi kebijakan yang diberikan tidak valid URL signature kebijakan yang diberikan tidak valid signature tidak dapat diverifikasi. Tolong ingat bahwa file signature (.sig atau .asc) haruslah file pertama yang diberikan pada perintah baris. terdapat kunci rahasia untuk kunci publik "%s"! mungkin disebabkan oleh self-signature yang tidak ada pesan ini mungkin tidak dapat digunakan oleh %s konflik timestampterlalu banyak masukan dalam pk cache - ditiadakan kesalahan database trusttrust record %lu tidak dalam jenis yang diminta %d trust record %lu, req tipe %d: gagal baca: %s trust record %lu, tipe %d: gagal menulis: %s trustdb rec %lu: lseek gagal: %s trustdb rec %lu: write failed (n=%d): %s transaksi trustdb terlalu besar trustdb: lseek gagal: %s trustdb: read failed (n=%d): %s trustdb: gagal sync: %s tidak dapat menampilkan photo ID! tidak dapat mengeksekusi program eksternal tidak dapat membaca tanggapan program eksternal: %s tidak dapat menset path exec ke %s tidak dapat menggunakan cipher IDEA untuk semua kunci yang anda enkripsi. data tidak terdugaalgoritma cipher belum diimplementasikanalgoritma pubkey belum diimplementasikantidak dikenalalgoritma cipher tidak dikenalalgoritma kompresi tidak dikenalalgoritma digest tidak dikenaltipe paket tidak dikenalalgoritma proteksi tidak dikenal algoritma pubkey tidak dikenalkelas signature tidak dikenalversi tidak dikenalprogram eksternal berhenti secara tidak natual URI tidak didukungalgoritma pubkey tidak dapat digunakankunci publik tidak dapat dipakaikunci rahasia tidak dapat dipakaiupdate semua kunci dari keyservergagal memperbarui: %s gagal perbarui rahasia: %s perbarui database trustpemakaian: gpg [pilihan] gunakan sebagai file outputgunakan mode teks kanonikalgunakan pilihan "--delete-secret-key" untuk menghapusnya. gunakan id-user ini untuk menandai/dekripsiUser ID "%s" telah dibatalkan menggunakan cipher %s detilverifikasi signaturekunci lemahkunci lemah tercipta - mengulang ukuran aneh untuk kunci sesi terenkripsi (%d) menulis signature direct menulis key binding signature menulis kunci publik ke `%s' menulis kunci rahasia ke `%s' menulis self signature menulis ke `%s' menulis ke stdout digunakan kunci rahasia yang salahyYy|yaanda hanya dapat clearsign dengan kunci bergaya PGP 2.x saat dalam mode --pgp2 anda hanya dapat detach-sign dengan kunci bergaya PGP 2.x saat dalam mode --pgp2 anda hanya dapat mengenkripsi ke kunci RSA 2048 bit atau kurang dalam mode --pgp2 anda hanya dapat membuat signature detached atau clear saat dalam mode --pgp2 anda tidak dapat menandai dan mengenkripsi pada saat bersamaan dalam mode --pgp2 anda tidak dapat menunjuk sebuah kunci sebagai pihak yang dibatalkan sendiri anda menemukan kesalahan ...(%s:%d) anda tidak boleh menggunakan %s saat dalam mode %s. anda harus menggunakan file (dan bukan pipe) saat bekerja dengan opsi --pgpg2 |FD|tulis info status ke FD ini|NAMA|enkripsi untuk NAMA|N|set tingkat kompresi N (0 tidak ada)|[file]|buat signature teks|[file]|buat signature|algo [file]|cetak digest pesangnupg-1.4.20/po/gl.po0000644000175000017500000064243112635457220011237 00000000000000# Galician translation of GnuPG # Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. # Jacobo Tarrio , 2001, 2002, 2003. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.2.4\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:23+0200\n" "Last-Translator: Jacobo Tarrio \n" "Language-Team: Galician \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, fuzzy, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "non se pode xerar un nmero primo de menos de %d bits\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "non se pode xerar un nmero primo de menos de %d bits\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "non se detectou un mdulo de acumulacin de entropa\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "non se puido abrir `%s'\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "gravando a chave secreta en `%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "non se puido abrir `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "non se puido facer stat sobre `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' non un ficheiro normal - ignrase\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "nota: o ficheiro random_seed est baleiro\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "AVISO: tamao do ficheiro random_seed non vlido - non se emprega\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "non se pode ler de `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "nota: o ficheiro random_seed non se actualiza\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "non se pode crear `%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "non se pode escribir en `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "non se pode pechar `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "AVISO: emprgase un xerador de nmeros aleatorios inseguro!!\n" #: cipher/random.c:894 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 xerador de nmeros aleatorios s un truco para poder\n" "executalo - non de ningn xeito un xerador de nmeros\n" "aleatorios seguro!\n" "\n" "NON USE NINGUN DATO XERADO POR ESTE PROGRAMA!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Agarde, por favor; estase a colleitar entropa. Traballe un\n" "pouco se iso evita que se aburra, que iso ha aumenta-la\n" "calidade da entropa.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Non hai suficientes bytes aleatorios dispoibles. Por favor, faga outro\n" "traballo para lle dar ao sistema operativo unha oportunidade de acumular\n" "mis entropa (Precsanse %d bytes mis)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "non se puido inicializa-la base de datos de confianzas: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "fallo ao reconstru-la cach de chaveiros: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "fallou o borrado do bloque de chaves: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "o envo ao servidor de chaves fallou: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 #, fuzzy msgid "|A|Please enter the Admin PIN" msgstr "Introduza o ID de usuario: " #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "hai partes da chave secreta non dispoibles\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Por favor, escolla o motivo da revocacin:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "erro ao crea-lo contrasinal: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "erro ao le-lo bloque de chaves: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: erro ao ler un rexistro libre: %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "`%s' xa est comprimido\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "xerar un novo par de chaves" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "xerar un novo par de chaves" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "non se puido inicializa-la base de datos de confianzas: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "fallou o borrado do bloque de chaves: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "A xeracin da chave fallou: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "Sinatura %s, algoritmo de resumo %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "non se atoparon datos OpenPGP vlidos.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armadura: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "cabeceira de armadura non vlida: " #: g10/armor.c:459 msgid "armor header: " msgstr "cabeceira de armadura: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "cabeceira de sinatura en claro non vlida\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "cabeceira de armadura: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "sinaturas en texto claro aniadas\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "armadura inesperada:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "lia escapada cunha barra non vlida: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "carcter radix64 non vlido %02x omitido\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "fin de ficheiro prematura (non hai CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "fin de ficheiro prematura (no CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC mal formado\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "Erro de CRC; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "fin de ficheiro prematura (nas lias adicionais)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "error nunha lia adicional\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "non se atoparon datos OpenPGP vlidos.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armadura incorrecta: lia mis longa ca %d caracteres\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "carcter quoted-printable na armadura - seguramente empregouse un MTA con " "erros\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "a chave secreta non est dispoible" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "non se pode facer iso no modo por lotes\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Non se admite este comando no modo %s.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "A sa seleccin? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr "Non se especificou un motivo" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "non procesado" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "non hai unha chave pblica correspondente: %s\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "erro ao crea-lo chaveiro `%s': %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "erro lendo `%s': %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "erro ao crear `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "preferencias actualizadas" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "caracter non vlido na cadea de preferencias\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "caracter non vlido na cadea de preferencias\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "erro: pegada dactilar non vlida\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "Pegada dactilar:" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "erro: pegada dactilar non vlida\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "A xeracin da chave fallou: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "non se atoparon datos OpenPGP vlidos.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "erro escribindo no chaveiro secreto `%s': %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Qu tamao de chave quere? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Qu tamao de chave quere? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Qu tamao de chave quere? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "redondeado a %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "erro ao le-lo bloque de chave secreta `%s': %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "omtese: a chave secreta xa est presente\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Por favor, seleccione o tipo de chave que quere:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "A sinatura caducou o %s\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (s cifrar)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Seleccin non vlida.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Por favor, escolla o motivo da revocacin:\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "algoritmo de proteccin descoecido\n" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "as partes secretas da chave primaria non estn dispoibles.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "omtese: a chave secreta xa est presente\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "erro escribindo no chaveiro `%s': %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "sar deste men" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "comandos conflictivos\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "amosar esta axuda" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Chave dispoible en: " #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "cambia-la fecha de expiracin" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "cambia-la confianza sobre o dono" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "amosar fingerprint" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "xerar un novo par de chaves" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "comandos conflictivos\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "comandos conflictivos\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "gravando a chave secreta en `%s'\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Comando incorrecto (tente \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "a chave secreta non est dispoible" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "fallou o borrado do bloque de chaves: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 #, fuzzy msgid "Enter New Admin PIN: " msgstr "Introduza o ID de usuario: " #: g10/cardglue.c:1014 #, fuzzy msgid "Enter New PIN: " msgstr "Introduza o ID de usuario: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 #, fuzzy msgid "Enter PIN: " msgstr "Introduza o ID de usuario: " #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Repita o contrasinal: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "o contrasinal non se repetiu correctamente; tnteo de novo" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "non se puido abrir `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output non traballa con este comando\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "non se atopou a chave `%s': %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "erro ao le-lo bloque de chaves: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(a menos que especifique a chave por pegada dactilar)\n" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "" "iso non se pode facer no modo de procesamento por lotes sen \"--yes\"\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Borrar esta chave do chaveiro? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "Esta unha chave secreta! - est seguro de que quere borrala? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "fallou o borrado do bloque de chaves: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "borrouse a informacin de confianza\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "hai unha chave secreta para a chave pblica \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "empregue a opcin \"--delete-secret-keys\" para borrala primeiro.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "erro ao crea-lo contrasinal: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "non se pode empregar un paquete simtrico ESK debido ao modo S2K\n" #: g10/encode.c:229 #, fuzzy, c-format msgid "using cipher %s\n" msgstr "fallou a sinatura: %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' xa est comprimido\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "AVISO: `%s' un ficheiro baleiro\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "s pode cifrar a chaves RSA de 2048 bits ou menos en modo --pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "lendo de `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "non se puido emprega-la cifra IDEA para tdalas chaves s que est a " "cifrar.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "forza-la cifra simtrica %s (%d) viola as preferencias do destinatario\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "forza-lo algoritmo de compresin %s (%d) viola as preferencias do " "destinatario\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "forza-la cifra simtrica %s (%d) viola as preferencias do destinatario\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "non se pode empregar %s no modo %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s cifrado para: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "datos cifrados con %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "cifrado cun algoritmo descoecido %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "AVISO: cifrouse a mensaxe cunha chave feble no cifrado simtrico.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problema ao manexa-lo paquete cifrado\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "non se soporta a execucin remota de programas\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "non se pode crea-lo directorio `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "as chamadas a programas externos estn desactivadas debido a opcins de " "permisos de ficheiros non seguras\n" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "" "esta plataforma precisa de ficheiros temporais ao chamar a programas " "externos\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "non se puido executar %s \"%s\": %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "non se puido executar %s \"%s\": %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "erro do sistema ao chamar a un programa externo: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "sada non natural do programa externo\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "non se puido executar un programa externo\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "non se puido le-la resposta do programa externo: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "AVISO: non se puido borra-lo ficheiro temporal (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "AVISO: non se puido elimina-lo directorio temporal `%s': %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "A sinatura hase marcar coma non revocable.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr "non se atoparon chaves de revocacin para `%s'\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "revocar unha chave secundaria" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "chave secreta non utilizable" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "gravando a chave secreta en `%s'\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "chave %08lX: non est protexida - omitida\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "chave %08lX: chave estilo PGP 2.x - omitida\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "chave %08lX: sinatura da sub-chave nun lugar incorrecto - omitida\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "non se puido inicializa-la base de datos de confianzas: %s\n" #: g10/export.c:563 #, fuzzy, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" "AVISO: a chave secreta %08lX non ten unha suma de comprobacin SK simple\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "AVISO: non se exportou nada\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Comandos:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[ficheiro]|facer unha sinatura" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[ficheiro]|facer unha sinatura en texto claro" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "facer unha sinatura separada" #: g10/gpg.c:393 msgid "encrypt data" msgstr "cifrar datos" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "cifrar s con cifrado simtrico" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "descifrar datos (por defecto)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verificar unha sinatura" #: g10/gpg.c:401 msgid "list keys" msgstr "ve-la lista de chaves" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "ve-la lista de chaves e sinaturas" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "verifica-las sinaturas das chaves" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "ve-la lista de chaves e pegadas dactilares" #: g10/gpg.c:406 msgid "list secret keys" msgstr "ve-la lista de chaves secretas" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "xerar un novo par de chaves" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "borrar chaves do chaveiro pblico" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "borrar chaves do chaveiro secreto" #: g10/gpg.c:411 msgid "sign a key" msgstr "asinar unha chave" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "asinar unha chave localmente" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "asinar ou editar unha chave" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "xerar un certificado de revocacin" #: g10/gpg.c:416 msgid "export keys" msgstr "exportar chaves" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exportar chaves a un servidor de chaves" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importar chaves dun servidor de chaves" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "buscar chaves nun servidor de chaves" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "actualizar tdalas chaves dun servidor de chaves" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importar/mesturar chaves" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "actualiza-la base de datos de confianza" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [ficheiros]|visualizar resumos de mensaxes" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opcins:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "crear sada con armadura en ascii" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NOME|cifrar para NOME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "empregar este id de usuario para asinar ou descifrar" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|axusta-lo nivel de compresin a N (0 desactiva)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "usar modo de texto cannico" #: g10/gpg.c:486 msgid "use as output file" msgstr "usar coma ficheiro de sada" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "lareto" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "non facer ningn cambio" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "avisar antes de sobrescribir" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Vexa a pxina man para un listado completo de comandos e opcins)\n" #: g10/gpg.c:576 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 [ficheiro] asinar e cifrar para o usuario Bob\n" " --clearsgn [ficheiro] facer unha sinatura en texto claro\n" " --detach-sign [ficheiro] facer unha sinatura separada\n" " --list-keys [nomes] amosa-las chaves\n" " --fingerprint [nomes] amosa-las pegadas dactilares\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Por favor, informe dos erros no programa a ,\n" "e dos erros na traduccin a .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Uso: gpg [opcins] [ficheiros] (-h para ve-la axuda)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Sintaxe: gpg [opcins] [ficheiros]\n" "asinar, verificar, cifrar ou descifrar\n" "a operacin por defecto depende dos datos de entrada\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmos soportados:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Pblica: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cifra: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compresin: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "uso: gpg [opcins] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "comandos conflictivos\n" #: g10/gpg.c:1078 #, fuzzy, c-format msgid "no = sign found in group definition `%s'\n" msgstr "non se atopou un signo = na definicin do grupo \"%s\"\n" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "AVISO: propiedade insegura en %s \"%s\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "AVISO: propiedade insegura en %s \"%s\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "AVISO: permisos inseguros en %s \"%s\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "AVISO: permisos inseguros en %s \"%s\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "AVISO: propiedade do directorio contedor insegura en %s \"%s\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "AVISO: propiedade do directorio contedor insegura en %s \"%s\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "AVISO: permisos do directorio contedor inseguros en %s \"%s\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "AVISO: permisos do directorio contedor inseguros en %s \"%s\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr " creouse un novo ficheiro de configuracin `%s'\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Non hai unha sinatura correspondiente no chaveiro secreto\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "o URL de normativa de sinaturas dado non vlido\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "amosar en que chaveiro est unha chave listada" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Non hai unha sinatura correspondiente no chaveiro secreto\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTA: ignrase o antigo ficheiro de opcins por defecto `%s'\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTA: non existe o ficheiro de opcins por defecto `%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "ficheiro de opcins `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "lendo as opcins de `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTA: %s non para uso normal!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s non un xogo de caracteres vlido\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s non un xogo de caracteres vlido\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "non se puido analisa-lo URI do servidor de chaves\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: opcins de exportacin non vlidas\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "opcins de exportacin non vlidas\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: opcins de importacin non vlidas\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "opcins de importacin non vlidas\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: opcins de exportacin non vlidas\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "opcins de exportacin non vlidas\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: opcins de importacin non vlidas\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "opcins de importacin non vlidas\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s non un xogo de caracteres vlido\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "o URL de normativa de sinaturas dado non vlido\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s non un xogo de caracteres vlido\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s non un xogo de caracteres vlido\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: opcins de exportacin non vlidas\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "opcins de exportacin non vlidas\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "non se puido estabrecer exec-path a %s\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: opcins de exportacin non vlidas\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "AVISO: o programa pode crear un ficheiro 'core'!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "AVISO: %s fai que se ignore %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s non se admite con %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s non ten sentido empregndoo con %s!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "gpg-agent non est dispoible nesta sesin\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "gravando a chave secreta en `%s'\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "s pode crear sinaturas separadas ou en claro no modo --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "non pode asinar e cifrar ao mesmo tempo no modo --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "debe empregar ficheiros (e non canalizacins) ao traballar con --pgp2 " "activado.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "para cifrar unha mensaxe en modo --pgp2 precsase da cifra IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "o algoritmo de cifrado seleccionado non vlido\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "o algoritmo de resumo seleccionado non vlido\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "o algoritmo de cifrado seleccionado non vlido\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "o algoritmo de resumo de certificacin seleccionado non vlido\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed debe ser superior a 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed debe ser superior a 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth debe valer entre 1 e 255\n" #: g10/gpg.c:3130 #, fuzzy msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "nivel de comprobacin por defecto non vlido; debe ser 0, 1, 2 ou 3\n" #: g10/gpg.c:3132 #, fuzzy msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "nivel de comprobacin por defecto non vlido; debe ser 0, 1, 2 ou 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTA: desaconsllase encarecidamente o modo S2K simple (0)\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "modo S2K non vlido; debe ser 0, 1 ou 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "preferencias por defecto non vlidas\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "preferencias de cifrado personais non vlidas\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "preferencias de resumo personais non vlidas\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "preferencias de compresin personais non vlidas\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s anda non traballa con %s!\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "non se pode empregar o algoritmo de cifrado \"%s\" no modo %s\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "non se pode empregar o algoritmo de resumo \"%s\" no modo %s\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "non se pode empregar o algoritmo de compresin \"%s\" no modo %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "non se puido inicializa-la base de datos de confianzas: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "AVISO: deronse destinatarios (-r) sen empregar cifrado de chave pblica\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [ficheiro]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [ficheiro]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "o descifrado fallou: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [ficheiro]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [ficheiro]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "non se pode empregar %s no modo %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [ficheiro]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [ficheiro]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [ficheiro]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "non se pode empregar %s no modo %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [ficheiro]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [ficheiro]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [ficheiro]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key id-de-usuario" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key id-de-usuario" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-de-usuario [comandos]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-de-usuario] [chaveiro]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "o envo ao servidor de chaves fallou: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "a recepcin do servidor de chaves fallou: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "a exportacin da chave fallou: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "a busca no servidor de chaves fallou fallou: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "a actualizacin no servidor de chaves fallou: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "non se puido quita-la armadura: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "non se puido poe-la armadura: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritmo de hash non vlido `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[ficheiro]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Escriba a sa mensaxe ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "o URL de normativa de certificacin dado non vlido\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "o URL de normativa de sinaturas dado non vlido\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "o URL de normativa de sinaturas dado non vlido\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "demasiadas entradas na cach de chaves pblicas - desactivada\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[Non se atopou o id de usuario]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "chave %08lX: chave secreta sen chave pblica - omitida\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Chave %08lX non vlida convertida en vlida por --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "" "non hai unha sub-chave secreta para a sub-chave pblica %08lX - ignrase\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "emprgase a chave secundaria %08lX no canto da primaria %08lX\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "ser un pouquio mis calado" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "toma-las chaves deste chaveiro" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "converte-los conflictos de selo de data nun aviso" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|DF|escribi-la informacin de estado a este DF" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Uso: gpgv [opcins] [ficheiros] (-h para ve-la axuda)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Sintaxe: gpg [opcins] [ficheiros]\n" "Comproba as sinaturas contra chaves de confianza coecidas\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "A asignacin dun valor aqu cousa sa; este valor nunca se ha exportar\n" "a ningn terceiro. Precsase para implementa-la rede de confianza; non ten\n" "nada que ver coa rede de certificados." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Para constru-la Rede-de-Confianza, GnuPG precisa saber que chaves teen\n" "confianza absoluta - esas adoitan se-las chaves das que ten acceso chave\n" "secreta. Responda \"si\" para lle dar confianza total a esta chave\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Se desexa empregar esta clave na que non se confa, conteste \"si\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Introduza o ID de usuario da persoa que lle quere manda-la mensaxe." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "En xeral non unha boa idea emprega-la mesma chave para asinar e cifrar.\n" "Este algoritmo debera empregarse s en determinados dominios.\n" "Consulte antes co seu experto en seguridade." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Introduza o tamao da chave" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Conteste \"si\" ou \"non\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Introduza o valor requerido tal como se amosa no indicativo.\n" " posible introducir unha data ISO (AAA-MM-DD) pero non ha obter unha\n" "boa resposta de erro - no canto diso, o sistema ha tratar de interpreta-lo\n" "valor proporcionado coma se fora un intervalo." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Introduza o nome do propietario da chave" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "por favor, introduza un enderezo de e-mail (opcional pero recomendado)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Por favor, introduza un comentario (opcional)" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N para cambia-lo nome.\n" "C para cambia-lo comentario.\n" "E para cambia-lo enderezo de e-mail.\n" "O para continuar coa xeracin da chave.\n" "S para sar da xeracin da chave." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Conteste \"si\" (ou s \"s\") se correcto xerar esta subchave." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Cando asina un ID de usuario dunha chave, debera comprobar antes\n" "que a chave pertence persoa que aparece no identificador. til para os\n" "demais saber con canto tino comprobou isto.\n" "\n" "\"0\" significa que non di nada do coidado co que comprobou a chave.\n" "\n" "\"1\" significa que cre que a chave pertence persoa que o afirma, pero " "non\n" " puido ou non quixo verifica-la chave. til para verificacins de\n" " \"personaxes\", nas que asina a chave dun usuario pseudnimo.\n" "\n" "\"2\" significa que fixo unha comprobacin informal da chave. Por exemplo,\n" " pode significar que comprobou a pegada dixital da chave e comprobou\n" " a identidade do usuario na chave contra unha identificacin " "fotogrfica.\n" "\n" "\"3\" significa que fixo unha comprobacin extensiva da chave. Por exemplo,\n" " pode significar que comprobou a pegada dixital da chave co propietario\n" " da chave en persoa, e que comprobou, cun documento difcil de " "falsificar\n" " cunha identificacin fotogrfica (coma o carnet de identidade ou\n" " pasaporte) que o nome do propietario da chave coincide co do " "identificador\n" " de usuario da chave, e que comprobou (por intercambio de correo\n" " electrnico) que o enderezo de e-mail da chave pertence ao propietario\n" " da chave.\n" "\n" "Tea en conta que os exemplos de enriba para os niveis 2 e 3 son *s*\n" "exemplos. final, depende de vostede decidir que significan \"informal\" e\n" "\"extensivo\" ao asinar outras chaves.\n" "\n" "Se non sabe cal a resposta correcta, resposte \"0\"." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Conteste \"si\" se quere asinar TDOLOS IDs de usuario" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Conteste \"si\" se realmente desexa borrar este ID de usuario.\n" "Tamn se han perder tdolos certificados!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Conteste \"si\" se correcto borrar esta subchave" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Esta unha sinatura vlida na chave; normalmente non ha borrar esta\n" "sinatura porque pode ser importante para estabrecer unha conexin de\n" "confianza na chave ou noutra chave certificada por esta chave." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Non se pode verificar esta sinatura porque non pose a chave\n" "correspondente. Debera retrasa-lo borrado ata que saiba que chave\n" "se empregou porque esta chave de sinatura podera estabrecer unha\n" "conexin de confianza mediante outra chave xa certificada." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "A sinatura non correcta. Ten sentido borrala do chaveiro." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Esta unha sinatura que liga o ID de usuario chave. Normalmente\n" "non unha boa idea borrar unha sinatura como esta. De feito,\n" "GnuPG pode non ser capaz de usar mis esta chave. As que faga isto\n" "s se esta auto-sinatura non correcta por algun motivo e hai\n" "unha segunda sa disposicin." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Cambia-las preferencias de tdolos IDs de usuario (ou s dos seleccionados)\n" " lista actual de preferencias. A marca de tempo de tdalas auto-sinaturas\n" "afectadas ha avanzar un segundo.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Por favor, introduza o contrasinal; esta unha frase secreta \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Por favor, repita o ltimo contrasinal, para estar seguro do que tecleou." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Introduza o nome do ficheiro ao que corresponde a sinatura" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Conteste \"si\" se correcto sobrescribi-lo ficheiro" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Por favor, introduza un novo nome de ficheiro. Se s preme ENTER, hase\n" "emprega-lo ficheiro por defecto (que se amosa entre corchetes)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Debera especificar un motivo para o certificado. Dependendo do contexto\n" "pode escoller desta lista:\n" " \"Descobreuse a chave\"\n" " Emprgueo se ten motivos para crer que algunha persoa non autorizada\n" " obtivo acceso sa chave secreta.\n" " \"A chave obsoleta\"\n" " Emprgueo se cambiou esta chave cunha mis recente.\n" " \"Xa non se emprega a chave\"\n" " Emprgueo se retirou esta chave.\n" " \"O ID de usuario xa non vlido\"\n" " Emprgueo para indicar que o ID de usuario xa non se debera empregar;\n" " adoita empregarse para marcar un enderezo de correo non vlido.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Se quere, pode introducir un texto que describa por que emite este\n" "certificado de revocacin. Por favor, mantea este texto breve.\n" "Unha lia en branco remata o texto.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Non hai axuda dispoible" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Non hai axuda dispoible para `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "actualiza-la base de datos de confianza" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "actualiza-la base de datos de confianza" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "a chave pblica con coincide coa chave secreta!\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "chave secreta non utilizable" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "pasando por alto un bloque de tipo %d\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "%lu chaves procesadas hasta polo momento\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Nmero total procesado: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr "novas chaves omitidas: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " sin IDs de usuario: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importadas: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " sin cambios: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " novos IDs de usuario: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " novas sub-chaves: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " novas sinaturas: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " novas revocacins de chaves: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr "chaves secretas lidas: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr "chaves secretas importadas: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "chaves secretas sin cambios: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " non importadas: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " novas sinaturas: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr "chaves secretas lidas: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Asinou estes IDs de usuario: \n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "Sinatura %s, algoritmo de resumo %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "chave %08lX: non hai ID de usuario\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "omtese `%s': %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "chave %08lX: arranxouse a corrupcin da sub-chave HKP\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "chave %08lX: aceptouse o ID de usuario '%s' sen auto-sinatura\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "chave %08lX: non hai IDs de usuario vlidos\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "isto pode ser causado por unha auto-sinatura que falta\n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "chave %08lX: chave pblica non atopada: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "chave %08lX: nova chave - omitida\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "non se atopou un chaveiro no que se poida escribir: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "escribindo a `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "erro escribindo no chaveiro `%s': %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "chave %08lX: chave pblica \"%s\" importada\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "chave %08lX: non coincide coa nosa copia\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "" "chave %08lX: non foi posible localiza-lo bloque de chaves original:\n" "%s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "" "chave %08lX: non foi posible le-lo bloque de chaves original:\n" "%s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "chave %08lX: \"%s\" 1 novo ID de usuario\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "chave %08lX: \"%s\" %d novos IDs de usuario\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "chave %08lX: \"%s\" 1 nova sinatura\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "chave %08lX: \"%s\" %d novas sinaturas\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "chave %08lX: \"%s\" 1 nova sub-chave\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "chave %08lX: \"%s\" %d novas sub-chaves\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "chave %08lX: \"%s\" %d novas sinaturas\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "chave %08lX: \"%s\" %d novas sinaturas\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "chave %08lX: \"%s\" %d novos IDs de usuario\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "chave %08lX: \"%s\" %d novos IDs de usuario\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "chave %08lX: \"%s\" sen cambios\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "non se atopou a chave secreta `%s': %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "gravando a chave secreta en `%s'\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "chave %08lX: chave secreta cunha cifra %d non vlida - omitida\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "non hai un chaveiro privado por defecto: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "chave %08lX: chave secreta importada\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "chave %08lX: xa estaba no chaveiro secreto\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "chave %08lX: chave secreta non atopada: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "chave %08lX: non hai chave pblica - non se pode aplica-lo\n" "certificado de revocacin\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "" "chave %08lX: certificado de revocacin incorrecto:\n" "%s - rechazado\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "chave %08lX: \"%s\" certificado de revocacin importado\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "chave %08lX: non hai ID de usuario para a sinatura\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "chave %08lX: algoritmo de chave pblica non soportado no ID de usuario \"%s" "\"\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "" "chave %08lX: auto-sinatura non vlida no identificadr de usuario \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "chave %08lX: algoritmo de chave pblica non soportado\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "chave %08lX: engadiuse unha sinatura de chave directa\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "chave %08lX: non hai sub-chave para a ligazn da chave\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "chave %08lX: ligazn de sub-chave incorrecta\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "chave %08lX: eliminouse unha ligazn de sub-chave mltiple\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "chave %08lX: non hai unha sub-chave para a revocacin da chave\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "chave %08lX: revocacin de sub-chave non vlida\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "chave %08lX: eliminouse a revocacin de sub-chaves mltiples\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "chave %08lX: omitido o ID de usuario '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "chave %08lX: omitida a sub-chave\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "chave %08lX: sinatura non exportable (clase %02x) - omitida\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "chave %08lX: certificado de revocacin no lugar errneo - omitido\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "chave %08lX: certificado de revocacin incorrecto: %s - omitido\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "chave %08lX: sinatura da sub-chave nun lugar incorrecto - omitida\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "chave %08lX: clase de sinatura non esperada (0x%02X) - omitida\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "chave %08lX: ID de usuario duplicado detectado - mesturado\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "AVISO: a chave %08lX pode estar revocada: obtendo a chave de revocacin " "%08lX\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "AVISO: a chave %08lX pode estar revocada: chave de revocacin %08lX " "ausente.\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "chave %08lX: \"%s\" certificado de revocacin engadido\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "chave %08lX: engadiuse unha sinatura de chave directa\n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "a chave pblica con coincide coa chave secreta!\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "omtese: a chave secreta xa est presente\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "omtese: a chave secreta xa est presente\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "erro ao crea-lo chaveiro `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "chaveiro `%s' creado\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "erro ao crear `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "fallo ao reconstru-la cach de chaveiros: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revocacin]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[auto-sinatura]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 sinatura errnea\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d sinaturas errneas\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 sinatura non verificada debido a unha chave que falta\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d sinaturas non verificadas debido a chaves que faltan\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 sinatura non verificada debido a un erro\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d sinaturas non verificadas debido a erros\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "detectado 1 ID de usuario sin auto-sinatura vlida\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "detectados %d IDs de usuario sin auto-sinatura vlida\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Por favor, decida canto confa en que este usuario verifique\n" "correctamente as chaves de outros usuarios (mirando nos pasaportes,\n" "comprobando pegadas dactilares de varias fontes...).\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = Confo marxinalmente\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = Confo totalmente\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "O ID de usuario \"%s\" est revocado." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Est seguro de que quere asinalo? (s/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Non se puido asinar.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "O ID de usuario \"%s\" est caducado." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "O ID de usuario \"%s\" non est asinado por el mesmo." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "O ID de usuario \"%s\" non est asinado por el mesmo." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Asinar de verdade? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "A auto-sinatura de \"%s\"\n" " unha sinatura tipo PGP 2.x\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Quere promovela a unha auto-sinatura OpenPGP? (s/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "A sa sinatura actual en \"%s\"\n" "caducou.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Quere emitir unha nova sinatura que substita caducada? (s/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "A sa sinatura actual en \"%s\"\n" " unha sinatura local.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Quere promovela a sinatura totalmente exportable? (s/N) " #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" xa estaba asinado localmente coa chave %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" xa estaba asinado coa chave %08lX\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Quere asinalo outra vez de tdolos xeitos? (s/N) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Nada que asinar coa chave %08lX\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Esta chave caducou!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Esta chave ha caducar o %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Quere que a sa sinatura caduque ao mesmo tempo? (S/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Non pode facer unha sinatura OpenPGP nunha chave PGP 2.x no modo --pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Isto podera face-la chave non utilizable en PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Con canto tino comprobou que a chave que vai asinar realmente pertence \n" "persoa de enriba? Se non sabe que respostar, introduza \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Non hei respostar.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Non o comprobei en absoluto.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Fixen algunhas comprobacins.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Fixen comprobacins moi exhaustivas.%s\n" #: g10/keyedit.c:926 #, fuzzy msgid "Your selection? (enter `?' for more information): " msgstr "A sa eleccin? (introduza '?' para ter mis informacin): " #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Esta seguro de que quere asinar esta chave\n" "coa sa chave: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" "Esta ha ser unha auto-sinatura.\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "AVISO: a sinatura non se ha marcar coma non exportable.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "AVISO: A sinatura non se ha marcar coma non revocable.\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "A sinatura hase marcar coma non exportable.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "A sinatura hase marcar coma non revocable.\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "Non se comprobou esta chave en absoluto.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "Comprobouse esta chave de xeito informal.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "Comprobouse esta chave con moito tino.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Asinar de verdade? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "fallou a sinatura: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Esta chave non est protexida.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "as partes secretas da chave primaria non estn dispoibles.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "as partes secretas da chave primaria non estn dispoibles.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "A chave est protexida.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Non se pode editar esta chave: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Introduza o novo contrasinal para esta chave secreta.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "o contrasinal non se repetiu correctamente; tnteo de novo" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Non desexa un contrainal - o que unha *mala* idea!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Seguro que quere facer esto? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "movendo a sinatura dunha chave seu sitio\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "gardar e sar" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "amosar fingerprint" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "listar chave e IDs de usuario" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "selecciona-lo ID de usuario N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "selecciona-lo ID de usuario N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "revocar sinaturas" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "asina-la chave localmente" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Pista: seleccione os IDs de usuario que desexa asinar\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "engadir un ID de usuario" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "engadir unha identificacin fotogrfica" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "borrar un ID de usuario" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "borrar unha chave secundaria" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "engadir unha chave de revocacin" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "" "Seguro que quere actualiza-las preferencias dos IDs de usuario " "seleccionados? " #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "Non pode cambia-la data de expiracin dunha chave v3\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "marcar un ID de usuario coma primario" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "cambiar entre o listado de chaves pblicas e secretas" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "lista-las preferencias (expertos)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "lista-las preferencias (moitos datos)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "" "Seguro que quere actualiza-las preferencias dos IDs de usuario " "seleccionados? " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "non se puido analisa-lo URI do servidor de chaves\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "" "Seguro que quere actualiza-las preferencias dos IDs de usuario " "seleccionados? " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "cambia-lo contrasinal" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "cambia-la confianza sobre o dono" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Seguro de que quere revocar tdolos IDs de usuario seleccionados? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "revocar un ID de usuario" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "revocar unha chave secundaria" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "habilitar unha chave" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "deshabilitar unha chave" #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "amosa-la identificacin fotogrfica" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "erro ao le-lo bloque de chave secreta `%s': %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "A chave secreta est disponible.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Cmpre a chave secreta para facer isto.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Por favor, empregue o comando \"toggle\" antes.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "A chave est revocada." #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Seguro de que quere asinar tdolos IDs de usuario? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Pista: seleccione os IDs de usuario que desexa asinar\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "clase de sinatura descoecida" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Non se admite este comando no modo %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Debe seleccionar alomenos un ID de usuario.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Non pode borra-lo ltimo ID de usuario!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Seguro de que quere borrar tdolos IDs de usuario seleccionados? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Seguro de que quere borrar este ID de usuario? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Seguro de que quere borrar este ID de usuario? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Debe seleccionar alomenos unha chave.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "non se puido abrir `%s': %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "erro ao crea-lo chaveiro `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Debe seleccionar alomenos unha chave.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Seguro de que quere borra-las chaves seleccionadas? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Seguro de que quere borrar esta chave? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Seguro de que quere revocar tdolos IDs de usuario seleccionados? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Seguro de que quere revocar este ID de usuario? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Realmente quere revocar esta chave? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Realmente quere revoca-las chaves seleccionadas? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Realmente quere revocar esta chave? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "estabrece-la lista de preferencias" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Seguro que quere actualiza-las preferencias dos IDs de usuario " "seleccionados? " #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Realmente desexa actualiza-las preferencias? " #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Garda-los cambios? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Sar sin gardar? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "a actualizacin fallou: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "o segredo da actualizacin fallou: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "A chave non cambiou, polo que non fai falla actualizar.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Resumo: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Caractersticas: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Notacin: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Non hai preferencias nun ID de usuario estilo PGP 2.x.\n" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Esta chave pode estar revocada por %s chave " #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "Esta chave pode estar revocada por %s chave " #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " (sensible)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "non foi posible crear %s: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "[revocada] " #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [caduca: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [caduca: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " confianza: %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " confianza: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Esta chave est desactivada" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Tea en conta que a validez da chave amosada non necesariamente\n" "correcta a menos que reinicie o programa.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "[revocada] " #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "AVISO: non se marcou ningn ID de usuario coma primario. Esta orde pode\n" " facer que un ID de usuario diferente se converta no primario.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Non pode cambia-la data de expiracin dunha chave v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "AVISO: Esta unha chave de estilo PGP2. Se engade unha identificacin\n" " fotogrfica algunhas versins de PGP han rexeitar esta chave.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Est seguro de que quere engadila? (s/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" "Non pode engadir unha identificacin fotogrfica a unha chave de estilo " "PGP2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Borrar esta sinatura correcta? (s/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Borrar esta sinatura incorrecta? (s/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Borrar esta sinatura descoecida? (s/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Realmente quere borrar esta auto-sinatura? (s/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Borrada %d sinatura.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Borradas %d sinaturas.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Non se borrou nada.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "armadura non vlida" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "O ID de usuario \"%s\" est revocado." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "O ID de usuario \"%s\" est revocado." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "O ID de usuario \"%s\" est revocado." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "o ID de usuario \"%s\" xa est revocado\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "o ID de usuario \"%s\" xa est revocado\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "AVISO: Esta unha chave de estilo PGP 2.x. Se engade un revocador " "designado\n" " pode facer que algunhas versins de PGP rexeiten esta chave.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" "Non pode engadir un revocador designado a unha chave de estilo PGP 2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Introduza o ID de usuario do revocador designado: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" "non se pode nomear unha chave estilo PGP 2.x coma revocador designado\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "non se pode nomear unha chave coma o seu propio revocador designado\n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "AVISO: Esta chave est revocada polo propietario!\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "AVISO: o nomeamento dunha chave coma o seu propio revocador designado non " "se pode desfacer!\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Est seguro de que quere nomear esta chave coma revocador designado? (s/N): " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Por favor, quite as seleccins das chaves secretas.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Por favor, seleccione como mximo unha chave secundaria.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "Cambiando a data de expiracin para a chave secundaria.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Cambiando a data de expiracin da chave primaria.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Non pode cambia-la data de expiracin dunha chave v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Non hai unha sinatura correspondiente no chaveiro secreto\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "" "AVISO: o nomeamento dunha chave coma o seu propio revocador designado non " "se pode desfacer!\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Escolla exactamente un ID de usuario.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "omitindo a auto-sinatura v3 do id de usuario \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Est seguro de que quere empregala (s/N)? " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Est seguro de que quere empregala (s/N)? " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Notacin de sinaturas: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Sobrescribir? (s/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Non hai ID de usuario con ndice %d\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Non hai ID de usuario con ndice %d\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Non hai ID de usuario con ndice %d\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "ID de usuario: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " asinada por %08lX no %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (non exportable)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Esta sinatura caducou o %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Est seguro de que quere revocala? (s/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Crear un certificado de revocacin para esta sinatura? (s/N) " #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " asinada por %08lX no %s%s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Asinou estes IDs de usuario: \n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (non exportable)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " revocada por %08lX no %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Est a punto de revocar estas sinaturas:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Realmente desexa crea-los certificados de revocacin? (s/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "non hai chave secreta\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "o ID de usuario \"%s\" xa est revocado\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "AVISO: unha sinatura de ID de usuario ten unha data %d segundos no futuro\n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "o ID de usuario \"%s\" xa est revocado\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "o ID de usuario \"%s\" xa est revocado\n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "Amosando a id. fotogrfica %s de tamao %ld da chave 0x%08lX (uid %d)\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "preferencia %c%lu duplicada\n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "demasiadas preferencias `%c'\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "demasiadas preferencias `%c'\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "demasiadas preferencias `%c'\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "caracter non vlido na cadea de preferencias\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "escribindo unha sinatura directa\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "escribindo a propia sinatura\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "escribindo unha sinatura que liga a chave\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "tamao de chave non vlido; empregando %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "tamao de chave redondeado a %u bits\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "cifrar datos" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (s cifrar)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Por favor, seleccione o tipo de chave que quere:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA e ElGamal (por defecto)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA e ElGamal (por defecto)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (s asinar)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (s asinar)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (s cifrar)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (s cifrar)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA (s cifrar)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (s cifrar)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Qu tamao de chave quere? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Qu tamao de chave quere? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "O tamao de chave requerido son %u bits\n" #: g10/keygen.c:1722 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, indique canto tempo debera ser vlida a chave.\n" " 0 = a chave non caduca\n" " = a chave caduca en n das\n" " w = a chave caduca en n semanas\n" " m = a chave caduca en n meses\n" " y = a chave caduca en n anos\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Por favor, indique canto tempo debera ser vlida a sinatura.\n" " 0 = a sinatura non caduca\n" " = a sinatura caduca en n das\n" " w = a sinatura caduca en n semanas\n" " m = a sinatura caduca en n meses\n" " y = a sinatura caduca en n anos\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Por canto tempo vlida a chave? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "Por canto tempo vlida a sinatura? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "valor non vlido\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "%s non caduca nunca\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "%s non caduca nunca\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "%s caduca o %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "A sinatura caduca o %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "O seu sistema non pode amosar datas mis al do 2038.\n" "Anda as, hase tratar correctamente ata o 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "Isto correcto? (s/n) " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Precisa un ID de usuario para identifica-la sa chave; o software constre " "o\n" "id de usuario co Nome, un Comentario e un Enderezo de E-mail deste xeito:\n" " \"Heinrich Heime (Der Dichter) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Nome: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Caracter non vlido no nome\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "O nome non pode comezar cun dxito\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "O nome debe ter alomenos 5 caracteres\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Enderezo de E-mail: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Non un enderezo de e-mail vlido\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Comentario: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Carcter non vlido no comentario\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Est a usa-lo xogo de caracteres `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Escolleu este ID de usuario:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Por favor, non poa o enderezo de correo no nome real ou no comentario\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeAaSs" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Cambia-lo (N)ome, (C)omentario, (E)-mail ou (S)ar? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Cambiar (N)ome, (C)omentario, (E)-mail ou (A)ceptar/(S)ar? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Por favor, corrixa antes o erro\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Necesita un contrasinal para protexe-la sa chave secreta.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 quere empregar un contrasinal - unha idea *moi* mala!\n" "Hase facer as de tdolos xeitos; pode cambia-lo contrasinal en calquera\n" "momento, empregando este programa coa opcin \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Cmpre xerar unha morea de bytes aleatorios. E unha boa idea facer outras\n" "cousas (premer teclas no teclado, move-lo rato, usa-los discos duros)\n" "mentres se xeran os nmeros primos; isto proporcinalle ao xerador de\n" "nmeros aleatorios unha opoertunidade de acumular entropa de abondo.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Cancelouse a xeracin de chaves.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "gravando a chave pblica en `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "gravando a chave secreta en `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "gravando a chave secreta en `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "non se atopou un chaveiro pblico no que se poida escribir: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "non se atopou un chaveiro privado no que se poida escribir: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "erro escribindo no chaveiro pblico `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "erro escribindo no chaveiro secreto `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "creronse e asinronse as chaves pblica e secreta.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Tea en conta que non se pode empregar esta chave para cifrar. Pode que\n" "queira emprega-lo comando \"--edit-key\" para xerar unha chave secundaria\n" "con esa finalidade.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "A xeracin da chave fallou: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "creouse a chave %lu segundo no futuro (salto no tempo ou problemas co " "reloxo)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "creouse a chave %lu segundos no futuro (salto no tempo ou problemas co " "reloxo)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "NOTA: a creacin de subchaves para chaves v3 non cumpre OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Crear realmente? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "fallou o borrado do bloque de chaves: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "non se pode crear `%s': %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOTA: a chave secreta %08lX caducou o %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "nunca " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Normativa de sinaturas crticas: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Normativa de sinaturas: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Notacin de sinaturas crticas: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Notacin de sinaturas: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Chaveiro" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Pegada dactilar da chave primaria:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Pegada dactilar da sub-chave:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "Pegada dactilar da chave primaria:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Pegada dactilar da sub-chave:" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Pegada dactilar =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "non se puido poe-la armadura: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "AVISO: existen dous ficheiros con informacin confidencial.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s o que non cambiou\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s o novo\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Por favor, amae este posible fallo de seguridade\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "comprobando o chaveiro `%s'\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu chaves comprobadas (%lu sinaturas)\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu chaves comprobadas (%lu sinaturas)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: chaveiro creado\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "o URL de normativa de sinaturas dado non vlido\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "AVISO: as opcins de `%s' anda non estn activas nesta execucin\n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "opcins de exportacin non vlidas\n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "non se atopou a chave `%s': %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "non se atopou a chave `%s': %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "solicitando a chave %08lX de %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "solicitando a chave %08lX de %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "buscando \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "buscando \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "buscando \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "asinado coa sa chave %08lX no %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "buscando \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "buscando \"%s\" no servidor HKP %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "opcins de exportacin non vlidas\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "a recepcin do servidor de chaves fallou: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" "non hai un servidor de chaves coecido (empregue a opcin --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "erro do servidor de chaves" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "erro do servidor de chaves" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, fuzzy, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "%s: non un ID de chave vlido\n" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "AVISO: non se puido borra-lo ficheiro temporal (%s) `%s': %s\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "solicitando a chave %08lX de %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "solicitando a chave %08lX de %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "AVISO: non se puido borra-lo ficheiro temporal (%s) `%s': %s\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "AVISO: non se puido borra-lo ficheiro temporal (%s) `%s': %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "tamao moi estrao para unha chave de sesin cifrada (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "chave de sesin cifrada con %s\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "cifrado cun algoritmo descoecido %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "a chave pblica %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "datos cifrados coa chave pblica: DEK correcto\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "cifrado cunha chave de %u bits, %s, ID %08lX, creado o %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " alias \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "cifrado cunha chave %s, ID %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "fallou o descifrado de chave pblica: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "cifrado con %lu contrasinais\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "cifrado con 1 contrasinal\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "supoendo datos cifrados con %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "A cifra IDEA non est dispoible, tntase empregar %s no seu canto\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "descifrado correcto\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "AVISO: a mensaxe non tia proteccin de integridade\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "AVISO: a mensaxe cifrada foi manipulada!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "o descifrado fallou: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTA: o remitente pediu \"confidencial\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "nome do ficheiro orixinal='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revocacin independente - empregue \"gpg --import\" para aplicar\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Sinatura correcta de \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "verificacin de sinatura suprimida\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "non se poden manexar estas sinaturas mltiples\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "A sinatura caducou o %s\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " alias \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Sinatura feita o %.*s usando %s coa chave de ID %08lX\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Chave dispoible en: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "Sinatura INCORRECTA de\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Sinatura caducada de \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Sinatura correcta de \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[incerto]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " alias \"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "A sinatura caducou o %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "A sinatura caduca o %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "Sinatura %s, algoritmo de resumo %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binario" #: g10/mainproc.c:1947 msgid "textmode" msgstr "modo texto" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "descoecido" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Non foi posible verifica-la sinatura: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "non unha sinatura separada\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "AVISO: detectronse sinaturas mltiples. S se ha comproba-la primeira.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "sinatura independiente de clase 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "Sinatura vello estilo (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "paquete raz incorrecto detectado en proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "non posible deshabilita-los volcados de 'core': %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "" "a actualizacin da base de datos de confianza fallou:\n" "%s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "base de datos de confianza: fallou a lectura (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "non posible manexa-lo algoritmo de chave pblica %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "forza-lo algoritmo de resumo %s (%d) viola as preferencias do destinatario\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "algoritmo de cifrado non implementado" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "Sinatura %s, algoritmo de resumo %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" "forza-lo algoritmo de resumo %s (%d) viola as preferencias do destinatario\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = amosar mis informacin\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "gpg-agent non est dispoible nesta sesin\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: opcin a extinguir \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "AVISO: \"%s\" unha opcin a extinguir\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "empregue \"%s%s\" no seu canto\n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "AVISO: \"%s\" unha opcin a extinguir\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Sen comprimir" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "Sen comprimir" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "esta mensaxe pode non ser utilizable por %s\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "lendo as opcins de `%s'\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "destinatario por defecto `%s' descoecido\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "clase de sinatura descoecida" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "O ficheiro `%s' xa existe. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Sobrescribir? (s/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: sufixo descoecido\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Introduza o novo nome de ficheiro" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "escribindo na sada estndar\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "suponse que hai datos asinados en `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr " creouse un novo ficheiro de configuracin `%s'\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "AVISO: as opcins de `%s' anda non estn activas nesta execucin\n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: directorio creado\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "non posible manexa-lo algoritmo de chave pblica %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "AVISO: chave de sesin cifrada simetricamente potencialmente insegura\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "un subpaquete de tipo %d ten o bit crtico posto\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent non est dispoible nesta sesin\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "variable de ambiente GPG_AGENT_INFO mal formada\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "a versin %d do protocolo de gpg-agent non est soportada\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "non se puido conectar a `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problema co axente - desactivando o emprego do axente\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (ID principal da chave %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Precisa un contrasinal para desbloquea-la chave secreta do usuario:\n" "\"%.*s\"\n" "Chave de %u bits, %s, ID %08lX, creada o %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Repita o contrasinal\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Introduza o contrasinal\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "cancelado polo usuario\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "non se pode consulta-lo contrasinal en modo de proceso por lotes\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Introduza o contrasinal: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Necesita un contrasinal para desbloquea-la chave secreta para\n" "o usuario \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bits, chave %s, ID %08lX, creada %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repita o contrasinal: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Escolla unha imaxe a empregar coma identificacin fotogrfica. A imaxe ten\n" "que ser un ficheiro JPEG. Lembre que a imaxe armacnase coa sa chave\n" "pblica. Se emprega unha imaxe moi grande, a sa chave tamn se ha volver\n" "moi grande. Un bo tamao para empregar un semellante a 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Introduza o nome do ficheiro JPEG: " #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "non se puido abrir un ficheiro: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Est seguro de que quere empregala (s/N)? " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\" non un ficheiro JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr " esta foto correcta (s/N/q)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "non se pode amosa-la identificacin fotogrfica!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Non se especificou un motivo" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "A chave obsoleta" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Esta chave quedou descoberta" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Xa non se emprega esta chave" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "O ID de usuario xa non vlido" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "motivo para a revocacin: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "comentario de revocacin: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMsSoO" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Non se asignou un valor de confianza a:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " alias \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Esta chave probablemente pertenza ao propietario\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Non sei\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = NON confo\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Confo absolutamente\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = voltar ao men principal\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " o = omitir esta chave\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " s = sar\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "A sa decisin? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Est seguro de querer dar confianza absoluta a esta chave? " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificados que conducen a unha chave de confianza absoluta:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lX: Non hai indicacins de que a sinatura pertenza ao seu propietario.\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lX: Non hai indicacins de que a sinatura pertenza ao seu propietario.\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "Esta chave probablemente pertenza ao propietario\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Esta chave pertncenos a ns\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NON seguro que a chave pertenza persoa indicada no ID de\n" "usuario. Se *de verdade* sabe o que est a facer, pode\n" "respostar seguinte pregunta cun \"si\"\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Empregar esta chave de tdolos xeitos?" #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "AVISO: Emprgase unha chave que non de confianza!\n" #: g10/pkclist.c:511 #, fuzzy msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "AVISO: a chave %08lX pode estar revocada: chave de revocacin %08lX " "ausente.\n" #: g10/pkclist.c:520 #, fuzzy msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "AVISO: Esta chave est revocada polo propietario!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVISO: Esta chave est revocada polo propietario!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " Isto pode significar que a sinatura est falsificada.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVISO: Esta subchave est revocada polo propietario!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Nota: Esta chave est desactivada.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Nota: Esta chave xa caducou!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "AVISO: Esta chave non est certificada cunha sinatura de confianza!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Non hai indicacins de que a sinatura pertenza ao seu propietario.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVISO: Esta chave NON de confianza!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Probablemente, a sinatura estea FALSIFICADA.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVISO: Esta chave non est certificada con sinaturas de suficiente " "confianza!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Non seguro que a sinatura pertenza ao seu propietario.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: omitido: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: omitido: a chave pblica xa est presente\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Non especificou un ID de usuario. (pode empregar \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Introduza o ID de usuario. Remate cunha lia en branco: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Non hai tal ID de usuario.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" "omitido: a chave pblica xa est estabrecida coma destinatario por defecto\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "A chave pblica est desactivada.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "omitido: chave pblica xa estabrecida\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "destinatario por defecto `%s' descoecido\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: omitido: a chave pblica est desactivada\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "non hai enderezos vlidos\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "os datos non foron gardados; use a opcin \"--output\" para gardalos\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "erro ao crear `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Sinatura non adxunta.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Por favor, introduza o nome do ficheiro de datos: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "lendo de stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "non hai datos asinados\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "non foi posible abri-los datos asinados `%s'\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "destinatario annimo; tentando a chave secreta %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "vale, ns somo-lo destinatario annimo.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "a codificacin vella do DEK non est soportada\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "o algoritmo de cifrado %d%s descoecido ou est desactivado\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "NOTA: o algoritmo de cifrado %d non foi atopado nas preferencias\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTA: a chave secreta %08lX caducou o %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "NOTA: a chave est revocada" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "a chamada a build_packet fallou: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "chave %08lX: non hai ID de usuario\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Ha ser revocada por:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Esta unha chave de revocacin sensible)\n" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Crear un certificado de revocacin para esta sinatura? " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Forzouse unha sada con armadura ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "a chamada a make_keysig_packet fallou: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Creouse o certificado de revocacin.\n" #: g10/revoke.c:411 #, fuzzy, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "non se atoparon chaves de revocacin para `%s'\n" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "non se atopou a chave secreta `%s': %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "non hai unha chave pblica correspondente: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "a chave pblica con coincide coa chave secreta!\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Crear un certificado de revocacin para esta sinatura? " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "algoritmo de proteccin descoecido\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "NOTA: Esta chave non est protexida!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Creouse o certificado de revocacin.\n" "\n" "Por favor, trasldeo a un soporte que poida agochar; se Mallory consegue\n" "acceso a este certificado pode empregalo para inutiliza-la sa chave.\n" " unha boa idea imprimir este certificado e armacenalo, por se o soporte\n" "se volve ilexible. Pero tea coidado: o sistema de impresin da sa\n" "mquina podera armacena-los datos e deixrllelos dispoibles a outros.\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Por favor, escolla o motivo da revocacin:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Cancelar" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(probablemente queira seleccionar %d aqu)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Introduza unha descricin opcional; remtea cunha lia en branco:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Motivo para a revocacin: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Non se deu unha descricin)\n" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr " correcto? " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "hai partes da chave secreta non dispoibles\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "o algoritmo de proteccin %d%s non est soportado\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "o algoritmo de proteccin %d%s non est soportado\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Contrasinal non vlido; por favor, tnteo de novo" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVISO: Detectouse unha chave feble - por favor, cambie o contrasinal outra " "vez.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "xerando o checksum de 16-bits a extinguir para a proteccin da chave " "secreta\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "creouse unha chave feble - volvendo a tentalo\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "non se pode evitar unha chave feble para o cifrado simtrico; tentouse %d " "veces\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "AVISO: conflicto de resumo de sinatura na mensaxe\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "AVISO: o nomeamento dunha chave coma o seu propio revocador designado non " "se pode desfacer!\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "a chave pblica %08lX %lu segundo mis nova c sinatura\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "a chave pblica %08lX %lu segundos mis nova c sinatura\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "creouse a chave %lu segundo no futuro (salto no tempo ou problemas co " "reloxo)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "creouse a chave %lu segundos no futuro (salto no tempo ou problemas co " "reloxo)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTA: a chave de sinatura %08lX caducou o %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "Sinatura %s, algoritmo de resumo %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "asumindo unha sinatura incorrecta da chave %08lX debido a un bit crtico " "descoecido\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" "chave %08lX: non hai unha sub-chave para o paquete de a revocacin de " "subchave\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "chave %08lX: non hai sub-chave para a sinatura da ligazn da chave\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "AVISO: non se pode expandir-%% a notacin (grande de mis). sase sen " "expandir.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "AVISO: non se pode expandir-%% o url de normativa (grande de mis).\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "AVISO: non se pode expandir-%% o url de normativa (grande de mis).\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "fallou a comprobacin da sinatura creada: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "Sinatura %s de: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "s pode asinar nun ficheiro separado con chaves estilo PGP 2.x no modo --" "pgp2\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "forza-lo algoritmo de resumo %s (%d) viola as preferencias do destinatario\n" #: g10/sign.c:960 msgid "signing:" msgstr "asinando:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "s pode asinar en claro con chaves estilo PGP 2.x no modo --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "hase empregar cifrado %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "a chave non est marcada coma insegura - non se pode empregar co xerador de " "nmeros aleatorios falso\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "omtese `%s': duplicada\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "omtese `%s': %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "omtese: a chave secreta xa est presente\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "omtese `%s': esta unha chave ElGamal xerada por PGP que non segura " "para sinaturas!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "rexistro de confianza %lu, tipo %d: fallou a escritura: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Lista de valores de confianza asignados, creada o %s\n" "# (Empregue \"gpg --import-ownertrust\" para restauralos)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "erro lendo `%s': %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "lia longa de mis\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "erro: pegada dactilar non vlida\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "importa-los valores de confianza no propietario" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "erro ao buscar un rexistro de confianza: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "erro de lectura: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "base de datos de confianza: fallou a sincronizacin: %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "non se pode crear `%s': %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "non se puido abrir `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "rexistro da base de datos de confianza %lu: lseek fallou: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" "rexistro da base de datos de confianza %lu: fallou a escritura (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transaccin da base de datos de confianza demasiado grande\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "non se pode pechar `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: o directorio non existe!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: non se puido crea-lo rexistro de versin: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: creouse unha base de datos de confianza incorrecta\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: creouse a base de datos de confianza\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "NOTA: non se pode escribir na base de datos de confianza\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: base de datos de confianza non vlida\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: fallo ao crear unha tboa hash: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: erro ao actualiza-lo rexistro de versin: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: erro ao le-lo rexistro de versin: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: erro ao escribi-lo rexistro de versin: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "base de datos de confianza: lseek fallou: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "base de datos de confianza: fallou a lectura (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: non un ficheiro de base de datos de confianza\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: rexistro de versin con nmero de rexistro %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versin do ficheiro incorrecta %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: erro ao ler un rexistro libre: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: erro ao escribi-lo rexistro de directorios: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: non se puido pr a cero un rexistro: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: non se puido engadir un rexistro: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: creouse a base de datos de confianza\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "non posible manexar lias de texto maiores que %d caracteres\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "a lia de entrada contn mis de %d caracteres\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' non un ID longo de chave vlido\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "chave %08lX: aceptada como chave de confianza\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "a chave %08lX aparece mis dunha vez na base de datos de confianza\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" "chave %08lX: non hai unha chave pblica para a chave de confianza - omitida\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "chave marcada coma de confianza absoluta.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "rexistro de confianza %lu, tipo da peticin %d: fallou a lectura: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "o rexistro de confianza %lu non do tipo %d solicitado\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "[revocada] " #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "[caducada ]" #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "descoecido" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 #, fuzzy msgid "never" msgstr "nunca " #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "non se precisa comproba-la base de datos de confianza\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "hase comproba-la base de datos de confianza o %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "non se precisa comproba-la base de datos de confianza\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "non se precisa comproba-la base de datos de confianza\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "non se atopou a chave pblica %08lX: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "por favor, execute con --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "comprobando a base de datos de confianza\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "procesronse %d chaves (marcronse %d contas de validez)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "non se atoparon chaves de confianza absoluta\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "non se atopou a chave pblica da clave de confianza absoluta %08lX\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "rexistro de confianza %lu, tipo %d: fallou a escritura: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "non se puido verifica-la sinatura.\n" "Por favor, lembre que o ficheiro de sinatura (.sig ou .asc) debera\n" "se-lo primeiro ficheiro que se indique na lia de comandos.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "" "a lia de entrada %u longa de mis ou fltalle a marca de fin de lia\n" #: util/errors.c:53 msgid "general error" msgstr "erro xeral" #: util/errors.c:54 msgid "unknown packet type" msgstr "tipo de paquete descoecido" #: util/errors.c:55 msgid "unknown version" msgstr "versin descoecida" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "algoritmo de chave pblica descoecido" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "algoritmo de resumo descoecido" #: util/errors.c:58 msgid "bad public key" msgstr "chave pblica errnea" #: util/errors.c:59 msgid "bad secret key" msgstr "chave secreta errnea" #: util/errors.c:60 msgid "bad signature" msgstr "sinatura errnea" #: util/errors.c:61 msgid "checksum error" msgstr "error de checksum" #: util/errors.c:62 msgid "bad passphrase" msgstr "contrasinal errneo" #: util/errors.c:63 msgid "public key not found" msgstr "non se atopou a chave pblica" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "algoritmo de cifrado descoecido" #: util/errors.c:65 msgid "can't open the keyring" msgstr "non foi posible abri-lo chaveiro" #: util/errors.c:66 msgid "invalid packet" msgstr "paquete non vlido" #: util/errors.c:67 msgid "invalid armor" msgstr "armadura non vlida" #: util/errors.c:68 msgid "no such user id" msgstr "non hai tal id de usuario" #: util/errors.c:69 msgid "secret key not available" msgstr "a chave secreta non est dispoible" #: util/errors.c:70 msgid "wrong secret key used" msgstr "empregouse unha chave secreta errnea" #: util/errors.c:71 msgid "not supported" msgstr "non est soportado" #: util/errors.c:72 msgid "bad key" msgstr "chave incorrecta" #: util/errors.c:73 msgid "file read error" msgstr "erro de lectura de ficheiro" #: util/errors.c:74 msgid "file write error" msgstr "erro de escritura de ficheiro" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "algoritmo de compresin descoecido" #: util/errors.c:76 msgid "file open error" msgstr "erro de apertura de ficheiro" #: util/errors.c:77 msgid "file create error" msgstr "erro de creacin de ficheiro" #: util/errors.c:78 msgid "invalid passphrase" msgstr "contrasinal incorrecto" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritmo de chave pblica non implementado" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algoritmo de cifrado non implementado" #: util/errors.c:81 msgid "unknown signature class" msgstr "clase de sinatura descoecida" #: util/errors.c:82 msgid "trust database error" msgstr "erro da base de datos de confianza" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI errneo" #: util/errors.c:84 msgid "resource limit" msgstr "lmite de recursos" #: util/errors.c:85 msgid "invalid keyring" msgstr "chaveiro incorrecto" #: util/errors.c:86 msgid "bad certificate" msgstr "certificado errneo" #: util/errors.c:87 msgid "malformed user id" msgstr "id de usuario mal formado" #: util/errors.c:88 msgid "file close error" msgstr "erro de peche de ficheiro" #: util/errors.c:89 msgid "file rename error" msgstr "erro de cambio de nome de ficheiro" #: util/errors.c:90 msgid "file delete error" msgstr "erro de borrado de ficheiro" #: util/errors.c:91 msgid "unexpected data" msgstr "datos inesperados" #: util/errors.c:92 msgid "timestamp conflict" msgstr "conflicto de selo de data" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "algoritmo de chave pblica imposible de usar" #: util/errors.c:94 msgid "file exists" msgstr "o ficheiro xa existe" #: util/errors.c:95 msgid "weak key" msgstr "chave feble" #: util/errors.c:96 msgid "invalid argument" msgstr "argumento non vlido" #: util/errors.c:97 msgid "bad URI" msgstr "URI incorrecto" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI non soportado" #: util/errors.c:99 msgid "network error" msgstr "erro de rede" #: util/errors.c:101 msgid "not encrypted" msgstr "non cifrado" #: util/errors.c:102 msgid "not processed" msgstr "non procesado" #: util/errors.c:104 msgid "unusable public key" msgstr "chave pblica non utilizable" #: util/errors.c:105 msgid "unusable secret key" msgstr "chave secreta non utilizable" #: util/errors.c:106 msgid "keyserver error" msgstr "erro do servidor de chaves" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "Cancelar" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "non cifrado" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "non hai datos asinados\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... isto un erro (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "atopou un erro ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "si|sim" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "sS" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "non|nom" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "abandonar" #: util/miscutil.c:443 msgid "qQ" msgstr "aA" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "v" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "AVISO: sase memoria insegura!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "mire en http://www.gnupg.org/documentation/faqs.html para obter mis " "informacin\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "a operacin non posible sen memoria inicializada como segura\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(pode que usara o programa equivocado para esta tarefa)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "AVISO: propiedade insegura en %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "AVISO: permisos inseguros en %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "AVISO: propiedade do directorio contedor insegura en %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "AVISO: permisos do directorio contedor inseguros en %s \"%s\"\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "non se cargou a extensin de cifrado \"%s\" debido a permisos inseguros\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "o plugin de cifra IDEA non est presente\n" #~ msgid "Command> " #~ msgstr "Comando> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "O par de chaves DSA ha ter 1024 bits.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "a base de datos de confianza est corrompida; execute \"gpg --fix-trustdb" #~ "\".\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "non se pode poer datos de notacin nas sinaturas v3 (estilo PGP 2.x)\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "non se pode poer datos de notacin nas sinaturas de chave v3 (estilo PGP " #~ "2.x)\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "non se pode poer un URL de poltica nas sinaturas v3 (estilo PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ "non se pode poer un URL de poltica nas sinaturas de chave v3 (estilo " #~ "PGP 2.x)\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA require o emprego dun algoritmo hash de 160 bits\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "mire en http://www.gnupg.org/why-not-idea.html para obter mis " #~ "informacin\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "un nome de notacin s debe ter caracteres imprimibles ou espacios, e " #~ "debe rematar en '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "un nome de notacin de usuario debe conte-lo carcter '@'\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "un nome de notacin de usuario debe conte-lo carcter '@'\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "un valor de notacin non pode empregar ningn carcter de control\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "AVISO: atopronse datos de notacin non vlidos\n" #~ msgid "not human readable" #~ msgstr "non lexible por humanos" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "le-las opcins dun ficheiro" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "le-las opcins dun ficheiro" #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [caduca: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "chave %08lX: clase de sinatura non esperada (0x%02X) - omitida\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "non se puido executar %s \"%s\": %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "Non hai un ID de usuario para a chave\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "erro ao crea-lo contrasinal: %s\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "contrasinal incorrecto ou algoritmo de cifrado descoecido (%d)\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "non se pode estabrece-lo pid do cliente para o axente\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "non se pode obte-lo FD de lectura do servidor para o axente\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "non se pode obte-lo FD de escritura do servidor para o axente\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "problema de comunicacin con gpg-agent\n" #~ msgid "passphrase too long\n" #~ msgstr "contrasinal demasiado longo\n" #~ msgid "invalid response from agent\n" #~ msgstr "resposta do axente non vlida\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "problema co axente: o axente voltou coa resposta 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "selecciona-la chave secundaria N" #~ msgid "list signatures" #~ msgstr "listar sinaturas" #~ msgid "sign the key" #~ msgstr "asina-la chave" #~ msgid "add a secondary key" #~ msgstr "engadir unha chave secundaria" #~ msgid "delete signatures" #~ msgstr "borrar sinaturas" #~ msgid "change the expire date" #~ msgstr "cambia-la fecha de expiracin" #~ msgid "set preference list" #~ msgstr "estabrece-la lista de preferencias" #~ msgid "updated preferences" #~ msgstr "preferencias actualizadas" #~ msgid "No secondary key with index %d\n" #~ msgstr "Non hai chave secundaria con ndice %d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key id-de-usuario" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key id-de-usuario" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "facer unha sinatura separada" #~ msgid "sign the key non-revocably" #~ msgstr "asina-la chave de xeito non revocable" #~ msgid "sign the key locally and non-revocably" #~ msgstr "asina-la chave localmente e de xeito non revocable" #~ msgid "q" #~ msgstr "s" #~ msgid "help" #~ msgstr "axuda" #~ msgid "list" #~ msgstr "listar" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "depurar" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "erro xeral" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "gardar" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "chave" #~ msgid "check" #~ msgstr "verificar" #~ msgid "c" #~ msgstr "v" #~ msgid "sign" #~ msgstr "sign" #~ msgid "s" #~ msgstr "f" #, fuzzy #~ msgid "tsign" #~ msgstr "sign" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "primary" #~ msgstr "primary" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "c" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #, fuzzy #~ msgid "keyserver" #~ msgstr "erro do servidor de chaves" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "o algoritmo de resumo `%s' de s lectura nesta versin\n" #~ 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 "" #~ "Hase crear unh novo par de chaves %s.\n" #~ " tamao de chave mnimo: 768 bits\n" #~ " tamao de chave por defecto: 1024 bits\n" #~ " tamao de chave mximo recomendado: 2048 bits\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA s admite tamaos entre 512 e 1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "chave pequena de mis; 1024 o menor valor admitido para RSA.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "chave pequena de mis; 768 o menor valor admitido\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "chave grande de mis; %d o maior tamao admitido.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "As chaves maiores de 2048 bits non se aconsellan porque\n" #~ "os clculos levan MOITO tempo!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "Est seguro de que quere este tamao de chave? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "De acordo, pero tea en conta que a radiacin do monitor e o teclado " #~ "tamn son vulnerables a ataques!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Os algoritmos experimentais non deberan ser usados!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "este algoritmo de cifrado est obsoleto; por favor, empregue un mis " #~ "estndar!\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "escribindo a `%s'\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "sentmolo, non se pode facer isto no modo por lotes\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr "non se atopou a chave `%s': %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "non se pode crear `%s': %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "non se puido abrir un ficheiro: %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " alias \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "chave %08lX: esta chave est revocada!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "chave %08lX: unha subchave est revocada!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: a chave caducou\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Esta chave NON de confianza\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (asinar e cifrar)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA (s asinar)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA (asinar e cifrar)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA (s cifrar)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA (asinar e cifrar)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: non se pode abrir: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: AVISO: ficheiro baleiro\n" #~ msgid "can't open %s: %s\n" #~ msgstr "non se puido abrir %s: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = Confo marxinalmente\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = Confo totalmente\n" #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "asinado localmente coa sa chave %08lX no %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: non posible acceder: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: non se pode crea-lo bloqueo\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: non se pode bloquear\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: non se pode crear: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: non foi posible crear un directorio: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "Se desexa empregar esta chave revocada, conteste \"si\"." #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "Non se puido abri-la foto \"%s\": %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "non se puido abrir un ficheiro: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "erro: falla un signo de dous puntos\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "erro: non hai un valor de confianza no propietario\n" #~ msgid " (main key ID %08lX)" #~ msgstr " (ID principal da chave %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! revocouse a subchave: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- atopouse unha revocacin falsa\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? problema ao comproba-la revocacin: %s\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr " [caduca: %s]" #~ msgid " [expires: %s]" #~ msgstr " [caduca: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "[revocada] " #~ msgid "can't create %s: %s\n" #~ msgstr "non foi posible crear %s: %s\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "AVISO: o resumo `%s' non forma parte de OpenPGP.\n" #~ " Emprgueo baixo a sa propia responsabilidade.\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[ficheiros]|cifrar ficheiros" #~ msgid "store only" #~ msgstr "s armacenar" #~ msgid "|[files]|decrypt files" #~ msgstr "|[ficheiros]|descifrar ficheiros" #~ msgid "sign a key non-revocably" #~ msgstr "asinar unha chave de xeito non revocable" #~ msgid "sign a key locally and non-revocably" #~ msgstr "asinar unha chave localmente e de xeito non revocable" #~ msgid "list only the sequence of packets" #~ msgstr "listar s a secuencia de paquetes" #~ msgid "export the ownertrust values" #~ msgstr "exporta-los valores de confianza no propietario" #~ msgid "unattended trust database update" #~ msgstr "actualizacin inatendida da base de datos de confianza" #~ msgid "fix a corrupted trust database" #~ msgstr "amaar unha base de datos de confianza corrompida" #~ msgid "De-Armor a file or stdin" #~ msgstr "Quita-la armadura a un ficheiro ou entrada estndar" #~ msgid "En-Armor a file or stdin" #~ msgstr "Pr armadura a un ficheiro ou entrada estndar" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NOME|empregar NOME como valor por defecto do destinatario" #~ msgid "use the default key as default recipient" #~ msgstr "usa-la chave por defecto coma o destinatario por defecto" #~ msgid "don't use the terminal at all" #~ msgstr "non usa-la terminal en absoluto" #~ msgid "force v3 signatures" #~ msgstr "forzar sinaturas v3" #~ msgid "do not force v3 signatures" #~ msgstr "non forzar sinaturas v3" #~ msgid "force v4 key signatures" #~ msgstr "forzar sinaturas de chave v4" #~ msgid "do not force v4 key signatures" #~ msgstr "non forzar sinaturas de chave v4" #~ msgid "always use a MDC for encryption" #~ msgstr "sempre usar un MDC para cifrar" #~ msgid "never use a MDC for encryption" #~ msgstr "nunca usar un MDC para cifrar" #~ msgid "use the gpg-agent" #~ msgstr "emprega-lo gpg-agent" #~ msgid "batch mode: never ask" #~ msgstr "modo por lotes: non preguntar nunca" #~ msgid "assume yes on most questions" #~ msgstr "asumir `si' na maiora das preguntas" #~ msgid "assume no on most questions" #~ msgstr "asumir `non' na maiora das preguntas" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "engadir este chaveiro lista de chaveiros" #~ msgid "add this secret keyring to the list" #~ msgstr "engadir este chaveiro secreto lista" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NOME|empregar NOME coma chave secreta por defecto" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|HOST|empregar este servidor de chaves para buscar chaves" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NAME|axusta-lo xogo de caracteres do terminal a NOME" #~ msgid "|[file]|write status info to file" #~ msgstr "|[ficheiro]|escribi-la informacin de estado no ficheiro" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|IDCHAVE|confiar absolutamente nesta chave" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|FICHEIRO|carga-lo mdulo de extensin FICHEIRO" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emula-lo modo descrito no RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "" #~ "axustar tdalas opcins de paquetes, cifrado e resumo ao comportamento " #~ "OpenPGP" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ "axustar tdalas opcins de paquetes, cifrado e resumo ao comportamento " #~ "PGP 2.x" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|emprega-lo modo de contrasinal N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "|NOME|emprega-lo algoritmo para resumos NOME para os contrasinais" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NOME|emprega-lo algoritmo de cifrado NOME para os contrasinais" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NOME|emprega-lo algoritmo de cifrado NOME" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NOME|emprega-lo algoritmo de resumos de mensaxes NOME" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|emprega-lo algoritmo de compresin N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "descarta-lo campo de id de chave dos paquetes cifrados" #~ msgid "Show Photo IDs" #~ msgstr "Amosar Identificacins Fotogrficas" #~ msgid "Don't show Photo IDs" #~ msgstr "Non amosar Identificacins Fotogrficas" #~ msgid "Set command line to view Photo IDs" #~ msgstr "" #~ "Estabrece-la lia de comando para ve-las Identificacins Fotogrficas" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "o algoritmo de compresin `%s' de s lectura nesta versin\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "o algoritmo de compresin debe estar entre %d e %d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Non seguro que esta chave pertenza de verdade ao seu " #~ "propietario\n" #~ "pero acptase de tdolos xeitos\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "a preferencia %c%lu non vlida\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "chave %08lX: non unha chave rfc2440 - omitida\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "NOTA: Detectouse unha clave primaria Elgamal - ha tomar algn tempo " #~ "importala\n" #~ msgid " (default)" #~ msgstr " (por defecto)" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX creada: %s caduca: %s" #~ msgid "Policy: " #~ msgstr "Normativa: " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "non se pode obte-la chave do servidor de chaves: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "erro ao enviar a `%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "xito ao enviar a `%s' (estado=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "fallo ao enviar a `%s': estado=%u\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "este servidor de chaves non soporta --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "non se pode buscar no servidor de chaves: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "chave %08lX: esta unha chave ElGamal xerada por PGP que NON xegura " #~ "para sinaturas!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "creouse a chave %08lX %lu segundo no futuro (salto no tempo ou problemas " #~ "co reloxo)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "creouse a chave %08lX %lu segundos no futuro (salto no tempo ou problemas " #~ "co reloxo)\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "chave %08lX marcada coma de confianza absoluta\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "" #~ "omitiuse dende a sinatura da chave de sinatura Elgamal %08lX ata %08lX\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "" #~ "omitiuse dende %08lX ata a sinatura da chave de sinatura Elgamal %08lX\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "comprobando con profundidade %d asinadas=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/" #~ "%d/%d\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Seleccione o algoritmo a usar.\n" #~ "\n" #~ "DSA (tamn chamado DSS) un algoritmo de sinatura dixital, que s se " #~ "pode\n" #~ "empregar para asinar. o algoritmo aconsellado porque moito mis " #~ "rpido\n" #~ "verificar unha sinatura DSA que unha sinatura ElGamal.\n" #~ "\n" #~ "ElGamal un algoritmo que se pode empregar para asinar e cifrar. " #~ "OpenPGP\n" #~ "distingue entre das variantes do algoritmo: un que s cifra e outro que\n" #~ "asina e cifra; realmente o mesmo, pero hai que escoller algns " #~ "parmetros\n" #~ "dun xeito especial para crear unha clave que sexa segura para asinar: " #~ "este\n" #~ "programa faino, pero outras implementacins de OpenPGP non teen por que\n" #~ "entende-la variante de asinado+cifrado.\n" #~ "\n" #~ "A primeira clave (a primaria) debe ser sempre unha clave capaz de " #~ "asinar;\n" #~ "este o motivo polo que a clave ElGamal que s cifra non est " #~ "dispoible\n" #~ "neste men." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Anda que estas chaves estn definidas no RFC2440, non se aconsellan\n" #~ "porque non estn soportadas por tdolos programas, e as sinaturas\n" #~ "creadas con elas son moi grandes e lentas de comprobar." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu chaves comprobadas ata o momento (%lu sinaturas)\n" #~ msgid "key incomplete\n" #~ msgstr "chave incompleta\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "chave %08lX incompleta\n" #, fuzzy #~ msgid "quit|quit" #~ msgstr "quit|sar" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (asinar e cifrar)\n" #~ msgid "" #~ "The use of this algorithm is only supported by GnuPG. You will not be\n" #~ "able to use this key to communicate with PGP users. This algorithm is " #~ "also\n" #~ "very slow, and may not be as secure as the other choices.\n" #~ msgstr "" #~ "O emprego deste algoritmo s est soportado en GnuPG. Non ha poder " #~ "empregar\n" #~ "esta clave para se comunicar con usuarios de PGP. Este algoritmo tamn \n" #~ "moi lento, e pode non ser tan seguro coma as outras opcins.\n" #~ msgid "Create anyway? " #~ msgstr "Crear de tdolos xeitos? " #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "detectouse un algoritmo de chave simtrica non vlido (%d)\n" #~ msgid "this keyserver is not fully HKP compatible\n" #~ msgstr "este servidor de chaves non totalmente compatible con HKP\n" #~ msgid "The use of this algorithm is deprecated - create anyway? " #~ msgstr "Este algoritmo est obsoleto - crear de tdolos xeitos? " #~ msgid "" #~ "you have to start GnuPG again, so it can read the new configuration file\n" #~ msgstr "" #~ "ten que iniciar GnuPG outra vez para que lea o novo ficheiro de " #~ "configuracin\n" #~ msgid "changing permission of `%s' failed: %s\n" #~ msgstr "o cambio de permisos de `%s' fallou: %s\n" #~ msgid "|NAME=VALUE|use this notation data" #~ msgstr "|NOME=VALOR|usar estes datos de notacin" #~ msgid "" #~ "the first character of a notation name must be a letter or an underscore\n" #~ msgstr "" #~ "o primeiro carcter dun nome de notacin debe ser unha letra ou guin " #~ "baixo\n" #~ msgid "dots in a notation name must be surrounded by other characters\n" #~ msgstr "" #~ "os puntos dun nome de notacin deben estar rodeados por outros " #~ "caracteres\n" #~ msgid "" #~ "WARNING: This key already has a photo ID.\n" #~ " Adding another photo ID may confuse some versions of PGP.\n" #~ msgstr "" #~ "AVISO: Esta chave xa ten unha identificacin fotogrfica.\n" #~ " Se engade outra pode confundir a algunhas versins de PGP.\n" #~ msgid "You may only have one photo ID on a key.\n" #~ msgstr "S pode ter unha identificacin fotogrfica nunha chave.\n" #~ msgid " Fingerprint:" #~ msgstr " Pegada dactilar:" #~ msgid "too many random bits requested; the limit is %d\n" #~ msgstr "pedronse demasiados bits aleatorios; o lmite %d\n" #~ msgid "|[NAMES]|check the trust database" #~ msgstr "|[NOMES]|verifica-la base de datos de confianza" #~ msgid "--delete-secret-key user-id" #~ msgstr "--delete-secret-key id-de-usuario" #~ msgid "--delete-key user-id" #~ msgstr "--delete-key id de usuario" #~ msgid "--delete-secret-and-public-key user-id" #~ msgstr "--delete-secret-key-and-public-key id-de-usuario" #~ msgid "For info see http://www.gnupg.org" #~ msgstr "Para obter mis informacin vexa http://www.gnupg.org" #~ msgid "sSmMqQ" #~ msgstr "iImMsS" #~ 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 "" #~ "Non se puido atopar unha ruta de confianza vlida ata a chave. Hase ver " #~ "se\n" #~ "se pode asignar algn valor de confianza non asignado.\n" #~ msgid "" #~ "No path leading to one of our keys found.\n" #~ "\n" #~ msgstr "" #~ "Non se atopou unha ruta que conduza a unha das nosas chaves.\n" #~ "\n" #~ msgid "" #~ "No certificates with undefined trust found.\n" #~ "\n" #~ msgstr "" #~ "Non se atoparon certificados con confianza non definida.\n" #~ "\n" #~ msgid "" #~ "No trust values changed.\n" #~ "\n" #~ msgstr "" #~ "Non se cambiou ningn valor de confianza.\n" #~ "\n" #~ msgid "%08lX: no info to calculate a trust probability\n" #~ msgstr "" #~ "%08lX: non hai informacin para calcular unha probabilidade de confianza\n" #~ msgid "skipped: public key already set with --encrypt-to\n" #~ msgstr "omitida: a chave pblica xa est estabrecida con --encrypt-to\n" #~ msgid "%s: error checking key: %s\n" #~ msgstr "%s: erro ao verifica-la chave: %s\n" #~ msgid "Do you really want to create a sign and encrypt key? " #~ msgstr "Seguro que quere crear unha chave para asinar e cifrar? " #~ msgid "Do you really need such a large keysize? " #~ msgstr "Est seguro de precisar un tamao de chave tan grande? " #~ msgid "%s: user not found: %s\n" #~ msgstr "%s: non se atopou o usuario: %s\n" #~ msgid "certificate read problem: %s\n" #~ msgstr "problema de lectura do certificado: %s\n" #~ msgid "too many entries in unk cache - disabled\n" #~ msgstr "demasiadas entradas na cach de chaves descoecidas - desactivada\n" #~ msgid "secret key %08lX not imported (use %s to allow for it)\n" #~ msgstr "" #~ "non se importou a chave secreta %08lX (empregue %s para permitilo)\n" #~ msgid "key %08lX: our copy has no self-signature\n" #~ msgstr "chave %08lX: a nosa copia non ten auto-sinatura\n" #~ msgid "%s: user not found\n" #~ msgstr "%s: usuario non atopado\n" #~ msgid "assuming bad MDC due to an unknown critical bit\n" #~ msgstr "asumindo un MDC incorrecto debido a un bit crtico\n" #~ msgid "error reading dir record for LID %lu: %s\n" #~ msgstr "erro ao le-lo rexistro de directorio para o LID %lu: %s\n" #~ msgid "lid %lu: expected dir record, got type %d\n" #~ msgstr "" #~ "lid %lu: esperbase un rexistro de directorio, obtvose un tipo %d\n" #~ msgid "no primary key for LID %lu\n" #~ msgstr "non hai unha chave primaria para o LID %lu\n" #~ msgid "error reading primary key for LID %lu: %s\n" #~ msgstr "erro ao le-la chave primaria para o LID %lu: %s\n" #~ msgid "key %08lX: query record failed\n" #~ msgstr "chave %08lX: a consulta do rexistro fallou\n" #~ msgid "key %08lX: already in trusted key table\n" #~ msgstr "chave %08lX: xa est na tabla de chaves de confianza\n" #~ msgid "NOTE: secret key %08lX is NOT protected.\n" #~ msgstr "NOTA: a chave secreta %08lX NON est protexida.\n" #~ msgid "key %08lX: secret and public key don't match\n" #~ msgstr "chave %08lX: as chaves secreta e pblica non coinciden\n" #~ msgid "key %08lX.%lu: Good subkey binding\n" #~ msgstr "chave %08lX.%lu: Ligadura de subchave correcta\n" #~ msgid "key %08lX.%lu: Invalid subkey binding: %s\n" #~ msgstr "chave %08lX.%lu: Ligadura de subchave non vlida: %s\n" #~ msgid "key %08lX.%lu: Valid key revocation\n" #~ msgstr "chave %08lX.%lu: Revocacin de chave vlida\n" #~ msgid "key %08lX.%lu: Invalid key revocation: %s\n" #~ msgstr "chave %08lX.%lu: Revocacin de chave non vlida: %s\n" #~ msgid "Good self-signature" #~ msgstr "Auto-sinatura correcta" #~ msgid "Invalid self-signature" #~ msgstr "Auto-sinatura non vlida" #~ msgid "Valid user ID revocation skipped due to a newer self signature" #~ msgstr "" #~ "Omtese unha revocacin de ID de usuario vlida debido a unha auto-" #~ "sinatura mis recente" #~ msgid "Valid user ID revocation" #~ msgstr "Revocacin de ID de usuario vlida" #~ msgid "Invalid user ID revocation" #~ msgstr "Revocacin de ID de usuario non vlida" #~ msgid "Valid certificate revocation" #~ msgstr "Revocacin de certificado vlida" #~ msgid "Good certificate" #~ msgstr "Certificado correcto" #~ msgid "Invalid certificate revocation" #~ msgstr "Revocacin de certificado non vlida" #~ msgid "Invalid certificate" #~ msgstr "Certificado non vlido" #~ msgid "sig record %lu[%d] points to wrong record.\n" #~ msgstr "o rexistro de sinatura %lu[%d] apunta a un rexistro incorrecto.\n" #~ msgid "duplicated certificate - deleted" #~ msgstr "certificado duplicado - borrado" #~ msgid "tdbio_search_dir failed: %s\n" #~ msgstr "tdbio_search_dir fallou: %s\n" #~ msgid "lid ?: insert failed: %s\n" #~ msgstr "lid ?: a insercin fallou: %s\n" #~ msgid "lid %lu: insert failed: %s\n" #~ msgstr "lid %lu: a insercin fallou: %s\n" #~ msgid "lid %lu: inserted\n" #~ msgstr "lid %lu: inserido\n" #~ msgid "\t%lu keys with errors\n" #~ msgstr "\t%lu chaves con erros\n" #~ msgid "\t%lu keys inserted\n" #~ msgstr "\t%lu chaves inseridas\n" #~ msgid "lid %lu: dir record w/o key - skipped\n" #~ msgstr "lid %lu: rexistro de directorio sen chave - ignorado\n" #~ msgid "\t%lu due to new pubkeys\n" #~ msgstr "\t%lu debidos a novas chaves pblicas\n" #~ msgid "\t%lu keys skipped\n" #~ msgstr "\t%lu chaves omitidas\n" #~ msgid "\t%lu keys updated\n" #~ msgstr "\t%lu chaves actualizadas\n" #~ msgid "Ooops, no keys\n" #~ msgstr "Ooops, non hai chaves\n" #~ msgid "Ooops, no user IDs\n" #~ msgstr "Ooops, non hai IDs de usuario\n" #~ msgid "check_trust: search dir record failed: %s\n" #~ msgstr "" #~ "check_trust:\n" #~ "a bsqueda de rexistro de directorio fallou: %s\n" #~ msgid "key %08lX: insert trust record failed: %s\n" #~ msgstr "" #~ "chave %08lX:\n" #~ "a insercin na base de datos de confianza fallou: %s\n" #~ msgid "key %08lX.%lu: inserted into trustdb\n" #~ msgstr "chave %08lX.%lu: inserida na base de datos de confianza\n" #~ msgid "key %08lX.%lu: created in future (time warp or clock problem)\n" #~ msgstr "" #~ "chave %08lX.%lu: creada no futuro (salto no tempo ou problema de reloxo)\n" #~ msgid "key %08lX.%lu: expired at %s\n" #~ msgstr "chave %08lX.%lu: caducou o %s\n" #~ msgid "key %08lX.%lu: trust check failed: %s\n" #~ msgstr "chave %08lX.%lu: a verificacin de confianza fallou: %s\n" #~ msgid "problem finding '%s' in trustdb: %s\n" #~ msgstr "problema ao buscar '%s' na base de datos de confianza: %s\n" #~ msgid "user '%s' not in trustdb - inserting\n" #~ msgstr "o usuario '%s' non est na base de datos de confianza - inserindo\n" #~ msgid "failed to put '%s' into trustdb: %s\n" #~ msgstr "erro ao pr '%s' na base de datos de confianza: %s\n" #~ msgid "WARNING: can't yet handle long pref records\n" #~ msgstr "" #~ "AVISO: anda non se poden manexar rexistros de preferencias longos\n" #~ msgid "%s: can't create keyring: %s\n" #~ msgstr "%s: non se pode crea-lo chaveiro: %s\n" #~ msgid "set debugging flags" #~ msgstr "axusta-los valores de depuracin" #~ msgid "enable full debugging" #~ msgstr "habilitar depuracin total" #~ msgid "do not write comment packets" #~ msgstr "non escribir paquetes de comentario" #~ msgid "(default is 3)" #~ msgstr "(por defecto 3)" #~ msgid " (%d) ElGamal in a v3 packet\n" #~ msgstr " (%d) ElGamal nun paquete v3\n" #~ msgid "Key generation can only be used in interactive mode\n" #~ msgstr "A xeracin de chaves somentes pode ser usada no modo interactivo\n" #~ msgid "RSA key cannot be used in this version\n" #~ msgstr "A chave RSA non pode user usada nesta version\n" #~ msgid "No key for user ID\n" #~ msgstr "Non hay unha chave para o ID de usuario\n" #~ msgid "no secret key for decryption available\n" #~ msgstr "non hai chave secreta disponible para desencriptar\n" #~ msgid "" #~ "RSA keys are deprecated; please consider creating a new key and use this " #~ "key in the future\n" #~ msgstr "" #~ "As chaves RSA estn obsoletas; por favor, considere a opcin de crear " #~ "unha\n" #~ "chave nova e usa-la no futuro.\n" gnupg-1.4.20/po/pl.po0000644000175000017500000056134612635457220011255 00000000000000# Gnu Privacy Guard. # Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. # Janusz A. Urbanowicz , 1999, 2000, 2001, 2002, 2003, 2004, 2007. # fixes and updates by Jakub Bogusz , 2003-2014. # msgid "" msgstr "" "Project-Id-Version: gnupg-1.4.18\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2014-11-21 20:41+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "nie można wygenerować liczby pierwszej o pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "nie można wygenerować liczby pierwszej krótszej od %d bitów\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "moduł gromadzenia entropii nie został wykryty\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "nie można zablokować ,,%s'': %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "oczekiwanie na blokadę ,,%s''...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "nie można otworzyć ,,%s'': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "nie można sprawdzić ,,%s'': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr ",,%s'' nie jest zwykłym plikiem - zostaje pominięty\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "uwaga: plik random_seed jest pusty\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" "OSTRZEŻENIE: niewłaściwy rozmiar pliku random_seed - nie zostanie użyty\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "nie można odczytać ,,%s'': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "uwaga: plik random_seed nie jest uaktualniony\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "nie można utworzyć ,,%s'': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "nie można zapisać ,,%s'': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "nie można zamknąć ,,%s'': %s\n" #: cipher/random.c:893 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:894 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/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Proszę czekać, prowadzona jest zbiórka losowości. Żeby się nie nudzić, " "możesz\n" "popracować w systemie, przy okazji dostarczy to systemowi więcej entropii " "do\n" "tworzenia liczb losowych.\n" "\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "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/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "nie można zapisać odcisku: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "nie można zapisać daty utworzenia: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "nie można odczytać klucza publicznego: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "odpowiedź nie zawiera klucza publicznego\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "odpowiedź nie zawiera współczynnika RSA\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "odpowiedź nie zawiera publicznego wykładnika RSA\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "użycie domyślnego PIN-u jako %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "nie udało się użyć domyślnego PIN-u jako %s: %s - wyłączanie dalszego " "domyślnego użycia\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Proszę podać PIN%%0A[podpisano: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Proszę podać PIN" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "wywołanie zwrotne PIN zwróciło błąd: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN CHV%d zbyt krótki; minimalna długość to %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "sprawdzenie CHV%d nie powiodło się: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "błąd przy pobieraniu statusu CHV z karty\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "karta jest nieodwracalnie zablokowana!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "pozostało %d prób(y/a) wprowadzenia PIN-u administracyjnego przed\n" "nieodwracalną blokadą karty\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Proszę podać PIN administracyjny%%0A[pozostało prób: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Proszę podać PIN administracyjny" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "dostęp do komend administracyjnych nie jest skonfigurowany\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "kod resetujący nie jest już (lub w ogóle) dostępny\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Proszę podać kod resetujący dla karty" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Kod resetujący zbyt krótki; minimalna długość to %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Nowy kod resetujący" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Nowy PIN administracyjny" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Nowy PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "błąd podczas pobierania PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "błąd odczytu danych aplikacji karty\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "błąd odczytu DO odcisku\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "klucz już istnieje\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "istniejący klucz zostanie zastąpiony\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "tworzenie nowego klucza\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "zapisywanie nowego klucza\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "brak znacznika czasu utworzenia\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "brak współczynnika RSA lub nie jest długości %d bitów\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "brak publicznego wykładnika RSA lub jest dłuższy niż %d bitów\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "brak liczby pierwszej %s dla RSA lub nie jest długości %d bitów\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "zapis klucza nie powiódł sie: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "proszę czekać na stworzenie klucza...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "tworzenie klucza nie powiodło się\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "tworzenie klucza zakończone (trwało %d s)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "niepoprawna struktura karty OpenPGP (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "odcisk na karcie nie pasuje do żądanego\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "karta nie obsługuje algorytmu skrótu %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "podpisów złożonych do tej chwili: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "w tej chwili nie wolno sprawdzać PIN-u administracyjnego tym poleceniem\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "nie ma dostępu do %s - niepoprawna karta OpenPGP?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "opakowanie: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "niepoprawny nagłówek opakowania: " #: g10/armor.c:459 msgid "armor header: " msgstr "nagłówek opakowania: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "niewłaściwy nagłówek dokumentu z podpisem na końcu\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "nieznany nagłówek opakowania: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "zagnieżdżone podpisy na końcu dokumentu\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "nieoczekiwane opakowanie: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "niepoprawne oznaczenie linii minusami: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "niewłaściwy znak formatu radix64: %02X, został pominięty\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "przedwczesny koniec pliku (brak CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "przedwczesny koniec pliku (w CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "błąd formatu CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "Błąd sumy CRC; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "przedwczesny koniec pliku (w linii kończącej)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "błąd w linii kończącej\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "nie odnaleziono poprawnych danych w formacie OpenPGP.\n" #: g10/armor.c:1292 #, 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:1296 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 serwer pocztowy\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "brak karty w standardzie OpenPGP: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "Karta OpenPGP numer %s\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "nie działa w trybie wsadowym\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "To polecenie jest dostępne tylko dla kart w wersji 2\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Twój wybór? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[brak]" #: g10/card-util.c:512 msgid "male" msgstr "mężczyzna" #: g10/card-util.c:513 msgid "female" msgstr "kobieta" #: g10/card-util.c:513 msgid "unspecified" msgstr "bez odpowiedzi" #: g10/card-util.c:540 msgid "not forced" msgstr "nie wymuszone" #: g10/card-util.c:540 msgid "forced" msgstr "wymuszone" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Błąd: dozwolone są tylko znaki z zestawu ASCII.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Błąd: nie można użyć znaku ,,<''.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Błąd: podwójne spacje są niedozwolone.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Nazwisko właściciela karty: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Imię właściciela karty: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Błąd: pełne dane (imię + nazwisko) zbyt długie (limit %d znaków).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL źródła klucza publicznego: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Błąd: URL zbyt długi (maksymalnie %d znaków).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "błąd przydzielania pamięci: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "błąd odczytu ,,%s'': %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "błąd zapisu ,,%s'': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Dane do autoryzacji (nazwa konta): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Błąd: dane autoryzacyjne zbyt długie (maksymalnie %d znaków).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Prywatne dane DO: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Błąd: prywatne dane DO zbyt długie (maksymalnie %d znaków).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Ustawienia języka: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Błąd: niepoprawna długość tekstu ustawień.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Błąd: niewłaściwe znaki w tekście ustawień.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Płeć: M - mężczyzna, F - kobieta, lub spacja: " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Błąd: niepoprawna odpowiedź.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "Odcisk klucza Centrum Certyfikacji: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Błąd: niewłaściwy format odcisku klucza.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "użycie klucza niemożliwe: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "nie jest kartą OpenPGP" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "błąd przy pobieraniu opisu klucza: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Zastąpić istniejący klucz? (t/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "UWAGA: Nie ma gwarancji, że karta obsługuje żądany rozmiar.\n" " Jeśli tworzenie klucza nie powiedzie się, proszę sprawdzić\n" " dokumentację karty, aby poznać dozwolone rozmiary.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Jakiej długości klucz do podpisywania wygenerować? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Jakiej długości klucz do szyfrowania wygenerować? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Jakiej długości klucz do uwierzytelniania wygenerować? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrąglono do %u bitów\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "Klucze %s mogą mieć długość w zakresie %u-%u bitów.\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "Karta zostanie przekonfigurowana do tworzenia klucza %u-bitowego\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "błąd podczas zmiany rozmiaru klucza %d na %u bitów: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Utworzyć poza kartą kopię zapasową klucza? (T/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "UWAGA: klucze są już zapisane na karcie!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Zastąpić istniejące klucze? (t/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Uwaga: fabryczne ustawienia PIN-ów:\n" " PIN = ,,%s'' PIN administacyjny = ,,%s''\n" "Należy je zmienić komendą --change--pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Proszę wybrać rodzaj klucza:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Klucz do podpisywania\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Klucz do szyfrowania\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Klucz do uwierzytelniania\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Niewłaściwy wybór.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Proszę wybrać gdzie zapisać klucz:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "nieznany algorytm ochrony klucza\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "części tajne klucza są niedostępne\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "klucz tajny już jest zapisany na karcie\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "błąd zapisu klucza na karcie: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "wyjście z tego menu" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "polecenia administracyjne" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "ten tekst pomocy" #: g10/card-util.c:1687 msgid "list all available data" msgstr "wszystkie dostępne dane" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "zmiana nazwiska właściciela karty" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "zmiana URL-a klucza" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "pobranie klucza z URL-a na karcie" #: g10/card-util.c:1693 msgid "change the login name" msgstr "zmiana nazwy konta" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "zmiana ustawień języka" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "zmiana płci właściciela karty" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "zmiana odcisku centrum certyfikacji" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "przełączenie wymuszania PIN przy podpisywaniu" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "tworzenie nowych kluczy" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "menu zmiany lub odblokowania PIN" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "sprawdzenie PIN-u i okazanie wszystkich danych" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "odblokowanie PIN-u przy użyciu kodu resetującego" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/karta> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Polecenie dostępne tylko w trybie administracyjnym\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Polecenia administracyjne są dozwolone\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Polecenia administracyjne są niedozwolone\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Niepoprawna komenda (spróbuj ,,help'')\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "czytnik niedostępny\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" "Proszę włożyć kartę do czytnika i nacisnąć ENTER,\n" "lub wprowadzić ,,a'' aby anulować operację: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "wybór ustawień openpgp nie powiódł się: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "Proszę zmienić kartę w czytniku na kartę o numerze %.*s.\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Wciśnij ENTER kiedy karta jest gotowa lub wpisz ,,a'' aby anulować: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Wprowadź nowy PIN administracyjny: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Wprowadź nowy PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Wprowadź PIN administracyjny: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Wprowadź PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Powtórz PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN nie został poprawnie powtórzony; jeszcze jedna próba" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "nie można otworzyć ,,%s''\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "opcja --output nie działa z tym poleceniem\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "klucz ,,%s'' nie został odnaleziony: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "błąd odczytu bloku kluczy: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(chyba, że klucz zostaje wybrany przez podanie odcisku)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "bez opcji ,,--yes'' nie działa w trybie wsadowym\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Usunąć ten klucz ze zbioru? (t/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "To jest klucz tajny! - czy na pewno go usunąć? (t/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "usunięcie bloku klucza nie powiodło się: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "informacja o zaufaniu dla właściciela klucza została wymazana\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "dla klucza publicznego ,,%s'' istnieje klucz prywatny!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "aby go usunąć należy najpierw użyć opcji ,,--delete-secret-key''.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "błąd podczas tworzenia hasła: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "" "ustawiony tryb S2K nie pozwala użyć pakietu ESK dla szyfru symetrycznego\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "szyfrem %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr ",,%s'' już jest skompresowany\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "OSTRZEŻENIE: plik ,,%s'' jest pusty\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "w trybie --pgp2 można szyfrować dla kluczy RSA krótszych od 2048 bitów\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "odczyt z ,,%s''\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "nie można użyć szyfru IDEA z wszystkimi kluczami dla których szyfrujesz.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "OSTRZEŻENIE: wymuszenie użycia szyfru %s (%d) kłóci się z ustawieniami " "adresata\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "OSTRZEŻENIE: wymuszenie użycia kompresji %s (%d) kłóci się z ustawieniami " "adresata\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "wymuszone użycie szyfru %s (%d) kłóci się z ustawieniami adresata\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "%s nie jest dostępne w trybie %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s zaszyfrowany dla: ,,%s''\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "dane zaszyfrowano za pomocą %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "dane zaszyfrowano nieznanym algorytmem numer %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "OSTRZEŻENIE: wiadomość była szyfrowana kluczem słabym szyfru symetrycznego.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problem podczas obróbki pakietu szyfrowego\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "odwołania do zewnętrznych programów są wyłączone\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "nie można utworzyć katalogu ,,%s'': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "nieszczelne uprawnienia ustawień - wołanie zewnętrznych programów wyłączone\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "system wymaga użycia plików tymczasowych do wołania zewnętrznych programów\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "nie można wykonać ,,%s'': %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "nie można uruchomić powłoki ,,%s'': %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "błąd systemu podczas wołania programu zewnętrznego: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "nienaturalne zakończenie pracy zewnętrznego programu\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "nie można uruchomić zewnętrznego programu\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "nie można odczytać odpowiedzi programu zewnętrznego: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "OSTRZEŻENIE: nie można skasować pliku tymczasowego (%s) ,,%s'': %s.\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "OSTRZEŻENIE: nie można skasować tymczasowego katalogu ,,%s'': %s.\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "eksport podpisów oznaczonych jako lokalne" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "eksport specjalnych identyfikatorów (zwykle zdjęć)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "eksport kluczy unieważniających, oznaczonych jako ,,wrażliwe''" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "zdjęcie hasła z eksportowanych podkluczy" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "usunięcie nieużytecznych części z klucza w trakcie eksportu" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "usunięcie jak najwięcej części klucza w trakcie eksportu" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "eksport kluczy tajnych jest niedozwolony\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "klucz %s: nie jest chroniony - pominięty\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "klucz %s: klucz PGP 2.x - pominięty\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "klucz %s: pominięto - klucz właściwy znajduje się na karcie\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "klucz eksportowany nie będzie chroniony\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "zdejmowanie ochrony z klucza nie powiodło się: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "OSTRZEŻENIE: klucz prywatny %s nie ma prostej sumy kontrolnej SK.\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "OSTRZEŻENIE: nic nie zostało wyeksportowane!\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Polecenia:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[plik]|złożenie podpisu" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[plik]|złożenie podpisu pod dokumentem" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "złożenie podpisu oddzielonego od dokumentu" #: g10/gpg.c:393 msgid "encrypt data" msgstr "szyfrowanie danych" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "szyfrowanie tylko szyfrem symetrycznym" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "odszyfrowywanie danych (domyślne)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "sprawdzenie podpisu" #: g10/gpg.c:401 msgid "list keys" msgstr "lista kluczy" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "lista kluczy i podpisów" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "lista kluczy ze sprawdzaniem podpisów" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "lista kluczy i ich odcisków" #: g10/gpg.c:406 msgid "list secret keys" msgstr "lista kluczy prywatnych" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "generacja nowej pary kluczy" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "usunięcie klucza ze zbioru kluczy publicznych" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "usunięcie klucza ze zbioru kluczy prywatnych" #: g10/gpg.c:411 msgid "sign a key" msgstr "złożenie podpisu na kluczu" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "złożenie prywatnego podpisu na kluczu" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "podpisanie lub modyfikacja klucza" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "tworzenie certyfikatu unieważnienia klucza" #: g10/gpg.c:416 msgid "export keys" msgstr "eksport kluczy do pliku" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "eksport kluczy do serwera kluczy" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "import kluczy z serwera kluczy" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "szukanie kluczy na serwerze" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "odświeżenie wszystkich kluczy z serwera" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "import/dołączenie kluczy" #: g10/gpg.c:429 msgid "print the card status" msgstr "status karty" #: g10/gpg.c:430 msgid "change data on a card" msgstr "zmiana danych na karcie" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "zmiana PIN karty" #: g10/gpg.c:440 msgid "update the trust database" msgstr "uaktualnienie bazy zaufania" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [pliki]|skróty wiadomości" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opcje:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "opakowanie ASCII pliku wynikowego" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAZWA|szyfrowanie dla odbiorcy NAZWA" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "identyfikator do podpisania lub odszyfrowania" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|poziom kompresji N (0 - bez)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "kanoniczny format tekstowy" #: g10/gpg.c:486 msgid "use as output file" msgstr "plik wyjściowy" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "z dodatkowymi informacjami" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "pozostawienie bez zmian" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "pytanie przed nadpisaniem plików" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "wymuszenie całkowitej zgodności z OpenPGP" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "tworzenie wiadomości zgodnych z PGP 2.x" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Pełną listę poleceń i opcji można znaleźć w podręczniku systemowym.)\n" #: g10/gpg.c:576 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] podpisanie i zaszyfrowanie kluczem Boba\n" " --clearsign [plik] podpisanie z pozostawieniem czytelności " "dokumentu\n" " --detach-sign [plik] podpisanie z umieszczeniem podpisu w osobnym " "pliku\n" " --list-keys [nazwy] pokazanie kluczy\n" " --fingerprint [nazwy] pokazanie odcisków kluczy\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Błędy prosimy zgłaszać na adres .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Wywołanie: gpg [opcje] [pliki] (-h podaje pomoc)" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Obsługiwane algorytmy:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Asymetryczne: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Symetryczne: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Skrótów: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Kompresji: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "wywołanie: gpg [opcje]" #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "sprzeczne polecenia\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "w definicji grupy ,,%s'' brak znaku ,,=''\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "OSTRZEŻENIE: niebezpieczne prawa własności katalogu domowego ,,%s''.\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "" "OSTRZEŻENIE: niebezpieczne prawa własności do pliku konfiguracji ,,%s''.\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "OSTRZEŻENIE: niebezpieczne prawa dostępu do katalogu domowego ,,%s''\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "" "OSTRZEŻENIE: niebezpieczne prawa dostępu do pliku konfiguracji ,,%s''.\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "OSTRZEŻENIE: niebezpieczne prawa własności do katalogu nadrzędnego do\n" " domowego ,,%s''\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "OSTRZEŻENIE: niebezpieczne prawa własności do katalogu\n" " zawierającego plik konfiguracji ,,%s''\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "OSTRZEŻENIE: niebezpieczne prawa dostępu do katalogu nadrzędnego do\n" " domowego ,,%s''\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "OSTRZEŻENIE: niebezpieczne prawa dostępu do katalogu\n" " zawierającego plik konfiguracji ,,%s''\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "nieznana opcja konfiguracji ,,%s''\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "okazywanie zdjęć w liście kluczy" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "pokazywanie URL-i regulaminów w liście podpisów" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "pokazywanie wszystkich adnotacji w liście podpisów" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "pokazywanie adnotacji standardu IETF w liście podpisów" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "pokazywanie adnotacji użytkownika w liście podpisów" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "pokazywanie URL-i preferowanych serwerów kluczy w liście podpisów" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "pokazywanie poziomu ważności identyfikatora w liście kluczy" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "pokazywanie unieważnionych i wygasłych identyfikatorów w liście kluczy" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "pokazywanie unieważnionych i wygasłych podkluczy w liście" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "pokazywanie nazwy zbioru kluczy w liście kluczy" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "pokazywanie dat wygaśnięcia w liście podpisów" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "UWAGA: stary domyślny plik opcji ,,%s'' został zignorowany\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "UWAGA: brak domyślnego pliku opcji ,,%s''\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "plik opcji ,,%s'': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "odczyt opcji z ,,%s''\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "UWAGA: %s nie jest do normalnego użytku!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr ",,%s'' nie jest poprawną datą wygasania ważności podpisu\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr ",,%s'' nie jest poprawną nazwą zestawu znaków\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "niezrozumiały URI serwera kluczy\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d niepoprawne opcje serwera kluczy\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "niepoprawne opcje serwera kluczy\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: niepoprawne opcje wczytania kluczy\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "niepoprawne opcje wczytania kluczy\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d niepoprawne opcje eksportu kluczy\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "niepoprawne opcje eksportu kluczy\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: niepoprawne opcje listy kluczy\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "niepoprawne opcje listy kluczy\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "okazywanie zdjęć podczas sprawdzania podpisu" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "okazywanie URL-i do regulaminów podczas sprawdzania podpisu" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "pokazywanie wszystkich adnotacji przy sprawdzaniu podpisu" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "pokazywanie adnotacji standardu IETF przy sprawdzaniu podpisu" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "pokazywanie adnotacji użytkownika przy sprawdzaniu podpisu" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "pokazywanie URL-i wybranych serwerów kluczy" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "pokazywanie poziomów zaufania przy sprawdzaniu podpisu" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" "okazywanie unieważnionych i wygasłych identyfikatorów przy sprawdzaniu " "podpisu" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "pokazywanie tylko głównego identyfikatora przy sprawdzaniu podpisu" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "sprawdzanie podpisów z użyciem danych PKA" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "podnoszenie zaufania do podpisów na podstawie danych PKA" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d niepoprawne opcje sprawdzania\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "niepoprawne opcje sprawdzania\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "nie można ustawić ścieżki programów wykonywalnych na %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d niepoprawna lista auto-key-locate\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "niepoprawna lista auto-key-locate\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "OSTRZEŻENIE: program może stworzyć plik zrzutu pamięci!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "OSTRZEŻENIE: %s powoduje obejście %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "Nie wolno używać %s z %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s nie ma sensu w połączeniu z %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "UWAGA: %s nie jest dostępny w tej wersji\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "z powodu %s nie będzie wykonane w niezabezpieczonej pamięci\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "w trybie --pgp2 można składać tylko podpisy oddzielne lub dołączone do " "tekstu\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "w trybie --pgp2 nie można jednocześnie szyfrować i podpisywać\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "w trybie --pgp2 trzeba używać plików a nie potoków.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "szyfrowanie wiadomości w trybie --pgp2 wymaga modułu szyfru IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "wybrany algorytm szyfrujący jest niepoprawny\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "wybrany algorytm skrótów wiadomości jest niepoprawny\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "wybrany algorytm kompresji jest niepoprawny\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "wybrany algorytm skrótów poświadczeń jest niepoprawny\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "wartość completes-needed musi być większa od 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "wartość marginals-needed musi być większa od 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "wartość max-cert-depth musi mieścić się w zakresie od 1 do 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "" "niewłaściwy domyślny poziom sprawdzania; musi mieć wartość 0, 1, 2 lub 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "" "niewłaściwy minimalny poziom sprawdzania; musi mieć wartość 0, 1, 2 lub 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "UWAGA: prosty tryb S2K (0) jest stanowczo odradzany\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "niepoprawny tryb S2K; musi mieć wartość 0, 1 lub 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "niewłaściwe domyślne ustawienia\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "niewłaściwe ustawienia szyfrów\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "niewłaściwe ustawienia skrótów\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "niewłaściwe ustawienia algorytmów kompresji\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s jeszcze nie działa z %s!\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "szyfr ,,%s'' nie jest dostępny w trybie %s\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "skrót ,,%s'' nie jest dostępny w trybie %s\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "kompresja ,,%s'' nie jest dostępna w trybie %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "inicjowanie Bazy Zaufania nie powiodło się: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "OSTRZEŻENIE: podano adresatów (-r) w działaniu które ich nie dotyczy\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [plik]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [plik]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "błąd szyfrowania symetrycznego ,,%s'': %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [plik]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [plik]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "w trybie --s2k-mode 0 nie można użyć --symmetric --encrypt\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "w trybie %s nie można użyć --symmetric --encrypt\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [plik]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [plik]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [plik]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "w trybie --s2k-mode 0 nie można użyć --symmetric --sign --encrypt\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "w trybie %s nie można użyć --symmetric --sign --encrypt\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [plik]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [plik]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [plik]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key nazwa użytkownika" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key nazwa użytkownika" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key nazwa użytkownika [polecenia]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [identyfikator] [zbiór kluczy]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "wysyłka do serwera kluczy nie powiodła się: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "odbiór z serwera kluczy nie powiódł się: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "eksport kluczy nie powiódł się: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "szukanie w serwerze kluczy nie powiodło się: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "odświeżenie kluczy z serwera nie powiodło się: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "zdjęcie opakowania ASCII nie powiodło się: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "opakowywanie ASCII nie powiodło się: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "niewłaściwy algorytm skrótu ,,%s''\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[nazwa pliku]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Wpisz tutaj swoją wiadomość ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "podany URL regulaminu poświadczania jest niepoprawny\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "podany URL regulaminu podpisów jest niepoprawny\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "podany URL serwera klucza jest niepoprawny\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "zbyt wiele wpisów w buforze kluczy publicznych - wyłączony\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[brak identyfikatora użytkownika]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "klucz %s: klucz tajny bez klucza jawnego - pominięty\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "automatycznie pobrano ,,%s'' za pomocą %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Opcja --allow-non-selfsigned-uid wymusiła uznanie za poprawny klucza %s\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "brak prywatnego odpowiednika podklucza publicznego %s - zignorowany\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "używany jest podklucz %s zamiast klucza głównego %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "mniej komunikatów" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "pobieranie kluczy z tego zbioru" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "nie traktować konfliktu datowników jako błędu" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|pisanie opisu stanu do deskryptora FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Wywołanie: gpgv [opcje] [pliki] (-h podaje pomoc)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Składnia: gpgv [opcje] [pliki]\n" "Sprawdzanie podpisów ze znanych zaufanych kluczy\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Te wartości użytkownik przydziela wg swojego uznania; nie będą nigdy\n" "eksportowane poza ten system. Potrzebne są one do zbudowania sieci\n" "zaufania, i nie ma to nic wspólnego z tworzoną automatycznie siecią\n" "certyfikatów." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Aby zbudować Sieć Zaufania, GnuPG potrzebuje znać klucze do których\n" "masz absolutne zaufanie. Zwykle są to klucze do których masz klucze\n" "tajne. Odpowiedz ,,tak'', jeśli chcesz określić ten klucz jako klucz\n" "do którego masz absolutne zaufanie.\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Jeśli mimo wszystko chcesz użyć tego klucza, klucza, co do którego nie ma\n" "żadnej pewności do kogo należy, odpowiedz ,,tak''." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Podaj adresatów tej wiadomości." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Wybierz algorytm.\n" "\n" "DSA (nazywany też DSS) to Algorytm Podpisu Cyfrowego i może być\n" "używany tylko do podpisywania.\n" "\n" "ElGamal jest algorytmem tylko do szyfrowania.\n" "\n" "RSA może być używany do szyfrowania i podpisywania.\n" "\n" "Pierwszy (główny) klucz zawsze musi być kluczem którym można podpisywać." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Używanie tego samego klucza do podpisywania i szyfrowania nie jest dobrym\n" "pomysłem. Można tak postępować tylko w niektórych zastosowaniach. Proszę " "się\n" "najpierw skonsultować z ekspertem od bezpieczeństwa. " #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Podaj rozmiar klucza" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Odpowiedz \"tak\" lub \"nie\"." #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Wprowadź żądaną wartość (jak w znaku zachęty).\n" "Można tu podać datę w formacie ISO (RRRR-MM-DD) ale nie da to\n" "właściwej obsługi błędów - system próbuje interpretować podaną wartość\n" "jako okres." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Nazwa właściciela klucza." #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "proszę wprowadzić opcjonalny ale wysoce doradzany adres e-mail" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Proszę wprowadzić opcjonalny komentarz" # OSTRZEŻENIE: nic nie zostało wyeksportowane! #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N aby zmienić nazwę (nazwisko).\n" "C aby zmienić komentarz.<\n" "E aby zmienić adres e-mail.\n" "O aby kontynuować tworzenie klucza.\n" "Q aby zrezygnować z tworzenia klucza." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Jeśli ma zostać wygenerowany podklucz, należy odpowiedzieć \"tak\"." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Przy podpisywaniu identyfikatora użytkownika na kluczu należy sprawdzić,\n" "czy tożsamość użytkownika odpowiada temu, co jest wpisane w " "identyfikatorze.\n" "Innym użytkownikom przyda się informacja, jak dogłębnie zostało to przez\n" "Ciebie sprawdzone.\n" "\n" "\"0\" oznacza, że nie podajesz żadnych informacji na temat tego jak " "dogłębnie\n" " tożsamość użytkownika została przez Ciebie potwierdzona.\n" "\n" "\"1\" oznacza, że masz przekonanie, że tożsamość użytkownika odpowiada\n" " identyfikatorowi klucza, ale nie było możliwości sprawdzenia tego.\n" " Taka sytuacja występuje też kiedy podpisujesz identyfikator będący\n" " pseudonimem.\n" "\n" "\"2\" oznacza, że tożsamość użytkownika została przez Ciebie potwierdzona\n" " pobieżnie - sprawdziliście odcisk klucza, sprawdziłaś/eś tożsamość\n" " na okazanym dokumencie ze zdjęciem.\n" "\n" "\"3\" to dogłębna weryfikacja tożsamości. Na przykład sprawdzenie odcisku\n" " klucza, sprawdzenie tożsamości z okazanego oficjalnego dokumentu ze\n" " zdjęciem (np paszportu) i weryfikacja poprawności adresu poczty\n" " elektronicznej przez wymianę poczty z tym adresem.\n" "\n" "Zauważ, że podane powyżej przykłady dla poziomów \"2\" i \"3\" to *tylko*\n" "przykłady. Do Ciebie należy decyzja co oznacza \"pobieżny\" i \"dogłębny\" " "w\n" "kontekście poświadczania i podpisywania kluczy.\n" "\n" "Jeśli nie wiesz co odpowiedzieć, podaj \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Odpowiedz ,,tak'', aby podpisać WSZYSTKIE identyfikatory użytkownika" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Aby skasować ten identyfikator użytkownika (co wiąże się ze utratą\n" "wszystkich jego poświadczeń!) należy odpowiedzieć ,,tak''." #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Aby skasować podklucz należy odpowiedzieć \"tak\"." #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "To jest poprawny podpis na tym kluczu; normalnie nie należy go usuwać\n" "ponieważ może być ważny dla zestawienia połączenia zaufania do klucza\n" "którym go złożono lub do innego klucza nim poświadczonego." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Ten podpis nie może zostać potwierdzony ponieważ nie ma\n" "odpowiadającego mu klucza publicznego. Należy odłożyć usunięcie tego\n" "podpisu do czasu, kiedy okaże się który klucz został użyty, ponieważ\n" "w momencie uzyskania tego klucza może pojawić się ścieżka zaufania\n" "pomiędzy tym a innym, już poświadczonym kluczem." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "Ten podpis jest niepoprawny. Można usunąć go ze zbioru kluczy." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "To jest podpis wiążący identyfikator użytkownika z kluczem. Nie należy\n" "go usuwać - GnuPG może nie móc posługiwać się dalej kluczem bez\n" "takiego podpisu. Bezpiecznie można go usunąć tylko jeśli ten podpis\n" "klucza nim samym z jakichś przyczyn nie jest poprawny, i klucz jest\n" "drugi raz podpisany w ten sam sposób." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Przestawienie wszystkich (lub tylko wybranych) identyfikatorów na aktualne\n" "ustawienia. Data na odpowiednich podpisach zostanie przesunięta do przodu o\n" "jedną sekundę.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Podaj długie, skomplikowane hasło, np. całe zdanie.\n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Proszę powtórzyć hasło, aby upewnić się że nie było pomyłki." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Podaj nazwę pliku którego dotyczy ten podpis" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Jeśli można nadpisać ten plik, należy odpowiedzieć ,,tak''" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Nazwa pliku. Naciśnięcie ENTER potwierdzi nazwę domyślną (w nawiasach)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Nalezy podać powód unieważnienia klucza. W zależności od kontekstu można\n" "go wybrać z listy:\n" " \"Klucz został skompromitowany\"\n" " Masz powody uważać że twój klucz tajny dostał się w niepowołane ręce.\n" " \"Klucz został zastąpiony\"\n" " Klucz został zastąpiony nowym.\n" " \"Klucz nie jest już używany\"\n" " Klucz został wycofany z użycia.\n" " \"Identyfikator użytkownika przestał być poprawny\"\n" " Identyfikator użytkownika (najczęściej adres e-mail przestał być\n" " poprawny.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Jeśli chcesz, możesz podać opis powodu wystawienia certyfikatu\n" "unieważnienia. Opis powinien być zwięzły.\n" "Pusta linia kończy wprowadzanie tekstu.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Pomoc niedostępna" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Brak pomocy o ,,%s''" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "wczytywanie podpisów oznaczonych jako lokalne" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "naprawa uszkodzeń poczynionych przez serwer pks" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "bez czyszczenia wartości zaufania właściciela przy imporcie" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "bez uaktualniania bazy zaufania po imporcie" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "" "tworzenie odpowiadającego klucza publicznego przy imporcie klucza tajnego" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "tylko aktualizacja już znanych kluczy" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "usuwanie bezużytecznych części klucza po imporcie" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "usunięcie jak najwięcej części klucza po imporcie" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "blok typu %d zostaje pominięty\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu kluczy przetworzonych do tej chwili\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Ogółem przetworzonych kluczy: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " pominiętych nowych kluczy: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " bez identyfikatora: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " dołączono do zbioru: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " bez zmian: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nowych identyfikatorów: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nowych podkluczy: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nowych podpisów: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " nowych unieważnień kluczy: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " tajnych kluczy wczytanych: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " tajnych kluczy dodanych: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " tajnych kluczy bez zmian: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " nie włączono do zbioru: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " podpisów oczyszczonych: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " identyfikatorów użytkownika oczyszczonych: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "OSTRZEŻENIE: klucz %s zawiera ustawienia niedostępnych\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algorytmów na identyfikatorach:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": preferowany szyfr %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": preferowany algorytm skrótu %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": preferowany algorytm kompresji %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "sugerowana jest aktualizacja ustawień i ponowne rozgłoszenie klucza,\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "w celu uniknięcia potencjalnych problemów z niedopasowaniem algorytmów\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "ustawienia można zaktualizować przez: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "klucz %s: brak identyfikatora użytkownika\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "klucz %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "odrzucony przez filtr importu" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "klucz %s: podklucz uszkodzony przez serwer PKS został naprawiony\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "klucz %s: przyjęto identyfikator nie podpisany nim samym ,,%s''\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "klucz %s: brak poprawnych identyfikatorów użytkownika\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "to może być spowodowane brakiem podpisu klucza nim samym\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "klucz %s: brak klucza publicznego: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "klucz %s: nowy klucz - pominięty\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "brak zapisywalnego zbioru kluczy: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "zapis do ,,%s''\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "błąd zapisu zbioru kluczy ,,%s'': %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "klucz %s: klucz publiczny ,,%s'' wczytano do zbioru\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "klucz %s: nie zgadza się z lokalną kopią\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "klucz %s: brak oryginalnego bloku klucza; %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "klucz %s: nie można odczytać oryginalnego bloku klucza; %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "klucz %s: ,,%s'' 1 nowy identyfikator użytkownika\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "klucz %s: ,,%s'' %d nowych identyfikatorów użytkownika\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "klucz %s: ,,%s'' 1 nowy podpis\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "klucz %s: ,,%s'' %d nowych podpisów\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "klucz %s: ,,%s'' 1 nowy podklucz\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "klucz %s: ,,%s'' %d nowych podkluczy\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "klucz %s: ,,%s'' %d podpis oczyszczony\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "klucz %s: ,,%s'' %d podpisów oczyszczonych\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "klucz %s: ,,%s'' %d identyfikator użytkownika oczyszczony\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "klucz %s: ,,%s'' %d oczyszczonych identyfikatorów\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "klucz %s: ,,%s'' bez zmian\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "klucz prywatny %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "wczytywanie kluczy tajnych nie jest dozwolone\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "klucz %s: klucz tajny z ustawionym błędnym szyfrem %d - pominięty\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "brak domyślnego zbioru kluczy tajnych: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "Klucz %s: klucz tajny wczytany do zbioru\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "klucz %s: ten klucz tajny już znajduje się w zbiorze\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "klucz %s: brak klucza tajnego: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "klucz %s: brak klucza którego dotyczy certyfikat unieważnienia\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "klucz %s: niepoprawny certyfikat unieważnienia: %s - odrzucony\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "klucz %s: ,,%s'' wczytano certyfikat unieważnienia\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "klucz %s: brak identyfikatora użytkownika do podpisu\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "klucz %s: algorytm asymetryczny dla ,,%s'' nie jest obsługiwany\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "" "klucz %s: niepoprawny podpis własnym kluczem na identyfikatorze ,,%s''\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "klucz %s: nie obsługiwany algorytm asymetryczny\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "klucz %s: błędny podpis bezpośredni\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "klucz %s: brak podklucza do dowiązania\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "klucz %s: niepoprawne dowiązanie podklucza\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "klucz %s: usunięto wielokrotne dowiązanie podklucza\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "klucz %s: brak podklucza, którego dotyczy unieważnienie\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "klucz %s: nieoprawne unieważnienie podklucza\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "klucz %s: usunięto wielokrotne unieważnienie podklucza\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "klucz %s: pominięto identyfikator użytkownika ,,%s''\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "klucz %s: podklucz pominięty\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "klucz %s: podpis nieeksportowalny (klasy 0x%02X) - pominięty\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "" "klucz %s: pominięto certyfikat unieważnienia umieszczony \n" " w niewłaściwym miejscu\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "klucz %s: pominięto niepoprawny certyfikat unieważnienia: %s\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "klucz %s: pominięto podpis na podkluczu w niewłaściwym miejscu\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "klucz %s: pominięto podpis nieoczekiwanej klasy (0x%02X)\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "key %s: dołączono powtórzony identyfikator użytkownika\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "OSTRZEŻENIE: klucz %s mógł zostać unieważniony:\n" " zapytanie o unieważniający klucz %s w serwerze kluczy\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "OSTRZEŻENIE: klucz %s mógł zostać unieważniony,\n" " brak klucza unieważniającego %s.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "klucz %s: ,,%s'' dodano certyfikat unieważnienia\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "klucz %s: dodano bezpośredni podpis\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "UWAGA: numer seryjny klucza nie pasuje do numeru karty\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "UWAGA: klucz główny jest dostępny z karty\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "UWAGA: klucz jest dostępny z karty\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "błąd tworzenia zbioru kluczy `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "zbiór kluczy ,,%s'' został utworzony\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "blok klucza ,,%s'': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "nie powiodła się odbudowa bufora bazy: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[unieważnienie]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[podpis klucza nim samym]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 niepoprawny podpis\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d niepoprawnych podpisów\n" #: g10/keyedit.c:348 g10/keylist.c:394 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:350 g10/keylist.c:396 #, 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:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 podpis nie został sprawdzony z powodu błędu\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, 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:356 msgid "1 user ID without valid self-signature detected\n" msgstr "wykryto 1 identyfikator użytkownika niepodpisany tym samym kluczem\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "" "wykryto %d identyfikatorów użytkownika niepodpisanych tym samym kluczem\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Zastanów się jak bardzo ufasz temu użytkownikowi w kwestii sprawdzania\n" "tożsamości innych użytkowników (czy sprawdzi on odciski kluczy pobrane\n" "z różnych źródeł, dokumenty potwierdzające tożsamość, itd.).\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = mam ograniczone zaufanie\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = mam pełne zaufanie\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Podaj głębokość podpisu zaufania. Głębokość większa niż 1 pozwala\n" "w twoim imieniu składać podpisy kluczem, który teraz podpisujesz.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Podaj domenę do której ma ograniczać się podpis zaufania, lub Enter\n" "jeśli nie ma być ograniczeń.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Identyfikator użytkownika ,,%s'' został unieważniony." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Czy na pewno chcesz podpisać? (t/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Nie da się złożyć podpisu.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Identyfikator użytkownika ,,%s'' przekroczył swój termin ważności." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Identyfikator ,,%s'' nie jest podpisany swoim kluczem." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "Można podpisać identyfikator ,,%s''. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Czy na pewno podpisać? (t/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Podpis klucza nim samym na ,,%s''\n" "jest podpisem złożonym przez PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Czy chcesz zamienić go na podpis OpenPGP? (t/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Twój podpis na ,,%s''\n" "przekroczył datę ważności.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Czy chcesz zastąpić przeterminowany podpis nowym? (t/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Twój podpis na ,,%s''\n" "jest podpisem prywatnym (lokalnym).\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Czy chcesz zamienić go na pełny, publiczny, eksportowalny podpis? (t/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr ",,%s'' jest już lokalnie podpisany kluczem %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr ",,%s'' jest już podpisany kluczem %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Czy na pewno chcesz to podpisać ponownie? (t/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Nie ma nic do podpisania kluczem %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Data ważności tego klucza upłynęła!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Ważność tego klucza wygasa %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "" "Czy chcesz żeby ważność Twojego podpisu wygasała w tej samej chwili? (T/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "W trybie --pgp2 nie można podpisywać kluczy PGP 2.x podpisami OpenPGP.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "To uczyni ten klucz nieużytecznym dla PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Jak dokładnie została przez Ciebie sprawdzona tożsamość tej osoby?\n" "Jeśli nie wiesz co odpowiedzieć, podaj ,,0''.\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Nie odpowiem na to pytanie. %s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) W ogóle nie.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Pobieżnie.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Bardzo dokładnie.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Twój wybór (,,?'' podaje więcej informacji): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Czy jesteś naprawdę pewien że chcesz podpisać ten klucz\n" "swoim kluczem ,,%s'' (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "To będzie podpis klucza nim samym.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "OSTRZEŻENIE: podpis nie zostanie oznaczony jako prywatny " "(nieeksportowalny).\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "OSTRZEŻENIE: podpis nie zostanie oznaczony jako nie podlegający " "unieważnieniu.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Podpis zostanie oznaczony jako prywatny (nieeksportowalny).\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Podpis zostanie oznaczony jako nie podlegający unieważnieniu.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Tożsamość użytkownika nie została w ogóle sprawdzona.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Tożsamość użytkownika została sprawdzona pobieżnie.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Tożsamość użytkownika została dokładnie sprawdzona.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Czy na pewno podpisać? (t/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "złożenie podpisu nie powiodło się: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "Atrapa klucza lub szkielet klucza z karty - brak hasła które można by " "zmienić.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Ten klucz nie jest chroniony.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Część tajna głównego klucza jest niedostępna.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Części tajne głównego klucza znajdują się na karcie.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Klucz jest chroniony.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Tego klucza nie można modyfikować: %s.\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Wprowadź nowe długie, skomplikowane hasło dla tego klucza tajnego.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "hasło nie zostało poprawnie powtórzone; jeszcze jedna próba" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Nie chcesz hasła - to *zły* pomysł!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Czy na pewno chcesz to zrobić? (t/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "przenoszę podpis klucza na właściwe miejsce\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "zapis zmian i wyjście" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "okazanie odcisku klucza" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "lista kluczy i identyfikatorów użytkownika" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "wybór identyfikatora użytkownika N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "wybór podklucza N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "sprawdzenie podpisów" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "złożenie podpisu na wybranych identyfikatorach [* podobne polecenia poniżej]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "złożenie podpisu lokalnego na wybranych identyfikatorach" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "złożenie podpisu zaufania na wybranych identyfikatorach" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "złożenie niewycofywalnego podpisu na wybranych identyfikatorach" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "dodanie nowego identyfikatora użytkownika" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "dodanie zdjęcia użytkownika do klucza" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "usunięcie wybranych identyfikatorów" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "dodanie podklucza" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "dodanie klucza do karty" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "przeniesienie klucza na kartę" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "przeniesienie kopii klucza na kartę" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "usunięcie wybranych podkluczy" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "wyznaczenie klucza unieważniającego" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "usunięcie podpisów z wybranych identyfikatorów użytkownika" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "zmiana daty wygaśnięcia ważności klucza lub wybranych podkluczy" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "oznaczenie wybranego identyfikatora użytkownika jako głównego" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "przełączenie pomiędzy listą kluczy publicznych i prywatnych" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "ustawienia (zaawansowane)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "rozbudowana lista ustawień" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "ustawienie preferencji dla wybranych identyfikatorów" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "ustawienie URL-a wybranego serwera kluczy dla zaznaczonych identyfikatorów" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "ustawienie adnotacji do identyfikatora użytkownika" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "zmiana hasła klucza" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "zmiana zaufania właściciela" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "unieważnienie podpisów na wybranych identyfikatorach" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "unieważnienie wybranych identyfikatorów" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "unieważnienie klucza lub wybranych podkluczy" #: g10/keyedit.c:1439 msgid "enable key" msgstr "włączenie klucza do użycia" #: g10/keyedit.c:1440 msgid "disable key" msgstr "wyłączenie klucza z użycia" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "okazanie wybranych zdjęć" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "usuwanie nieużytecznych identyfikatorów i podkluczy" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "usuwanie nieużytecznych identyfikatorów i wszystkich podkluczy" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "błąd odczytu bloku klucza tajnego ,,%s'': %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Dostępny jest klucz tajny.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Do wykonania tej operacji potrzebny jest klucz tajny.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Najpierw trzeba użyć polecenia \"przeł\".\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* Komenda ,,sign'' może być poprzedzona ,,l'' dla podpisów lokalnych " "(lsign), \n" " ,,t'' dla podpisów zaufania (tsign), ,,nr'' dla podpisów nie " "podlegających \n" " unieważnieniu (nrsign), lub ich dowolną kombinacją (ltsign, tnrsign " "itd.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Klucz unieważniony." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "" "Na pewno podpisać wszystkie identyfikatory użytkownika na tym kluczu? (t/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Podpowiedź: wybierz identyfikatory użytkownika do podpisania.\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Nieznany typ podpisu ,,%s''\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "To polecenie nie jest dostępne w trybie %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Musisz wybrać co najmniej jeden identyfikator użytkownika.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Nie możesz usunąć ostatniego identyfikatora użytkownika!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "" "Czy na pewno usunąć wszystkie wybrane identyfikatory użytkownika? (t/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Czy na pewno usunąć ten identyfikator użytkownika? (t/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Czy na pewno przenieść klucz główny? (t/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Musisz wybrać dokładnie jeden klucz.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Polecenie oczekuje nazwy pliku jako argumentu.\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Nie można otworzyć ,,%s'': %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Błąd tworzenia klucza zapasowego z ,,%s'': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Musisz wybrać co najmniej jeden klucz.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Czy na pewno chcesz usunąć wybrane klucze? (t/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Czy na pewno chcesz usunąć ten klucz? (t/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "" "Czy na pewno unieważnić wszystkie wybrane identyfikatory użytkownika? (t/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Czy na pewno unieważnić ten identyfikator użytkownika? (t/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Czy na pewno chcesz unieważnić cały klucz? (t/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Czy na pewno chcesz unieważnić wybrane podklucze? (t/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Czy na pewno chcesz unieważnić ten podklucz? (t/N>) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Nie można ustawić poziomu zaufania do właściciela klucza w czasie\n" "używania bazy zaufania dostarczonej przez użytkownika.\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Ustawienie opcji klucza na:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Czy na pewno zaktualizować ustawienia dla wybranych identyfikatorów? (t/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Czy na pewno uaktualnić ustawienia? (t/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Zapisać zmiany? (t/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Wyjść bez zapisania zmian? (t/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "zapis zmian nie powiódł się: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "zapis zmian na kluczu prywatnym nie powiódł się: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Klucz nie został zmieniony więc zapis zmian nie jest konieczny.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Skrót: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Ustawienia: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Klucz nie będzie modyfikowany na serwerze" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Domyślny serwer kluczy: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Adnotacje: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Klucze PGP 2.x nie zawierają opisu ustawień.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Klucz został unieważniony %s przez %s kluczem %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Klucz może zostać unieważniony przez %s kluczem %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr " (poufne)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "utworzony: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "unieważniony: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "wygasł: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "wygasa: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "wykorzystanie: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "zaufanie: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "wiarygodność: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Ten klucz został wyłączony z użytku" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "numer karty: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Pokazana wartość wiarygodności klucza może być niepoprawna,\n" "dopóki program nie zostanie uruchomiony ponownie.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "unieważniony" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "wygasły" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "OSTRZEŻENIE: żaden identyfikator użytkownika nie został oznaczony explicite\n" " jako główny. Wykonanie tego polecenie może więc spowodować\n" " wyświetlanie innego identyfikatora jako domyślnego głównego.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Nie można zmienić daty ważności klucza w wersji 3.\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "OSTRZEŻENIE: To jest klucz PGP wersji 2. Dodanie zdjęcia spowoduje, że\n" " niektóre wersje przestaną go rozumieć.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Czy dalej chcesz je dodać? (t/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Do klucza dla PGP 2.x nie można dodać zdjęcia.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Usunąć ten poprawny podpis? (t/N/w) " #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Usunąć ten niepoprawny podpis? (t/N/w) " #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Usunąć ten nieznany podpis? (t/N/w) " #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Na pewno usunąć ten podpis klucza nim samym? (t/N) " #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d podpis usunięty.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d podpisów usuniętych.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nic nie zostało usunięte.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "niepoprawny" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Identyfikator użytkownika ,,%s'' został upakowany: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Identyfikator użytkownika ,,%s'': %d podpis usunięty\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Identyfikator użytkownika ,,%s'': %d podpisy(ów) usunięte(ych)\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Identyfikator użytkownika ,,%s'': już jest upakowany\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "Identyfikator użytkownika ,,%s'': jest już oczyszczony\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "OSTRZEŻENIE: To jest klucz PGP wersji 2.x. Wyznaczenie mu klucza\n" " unieważniającego spowoduje, że niektóre wersje PGP przestaną\n" " go rozumieć.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Do klucza dla PGP 2.x nie można wyznaczyć klucza unieważniającego.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Podaj identyfikator klucza unieważniającego: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "klucza PGP 2.x nie można wyznaczyć jako unieważniającego\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "nie można wyznaczyć klucza do unieważniania jego samego\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "klucz został już ustawiony jako unieważniający\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "OSTRZEŻENIE: nie można cofnąć wyznaczenia klucza jako unieważniającego!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "Czy na pewno chcesz wyznaczyć ten klucz jako unieważniający? (t/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Proszę usunąć znacznik wyboru z kluczy prywatnych.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Proszę wybrać tylko jeden podklucz.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Zmiana daty ważności podklucza.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Zmiana daty ważności głównego klucza.\n" #: g10/keyedit.c:3646 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:3662 msgid "No corresponding signature in secret ring\n" msgstr "Brak odpowiadającego podpisu w zbiorze kluczy prywatnych\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "podklucz podpisujący %s jest już skrośnie podpisany\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" "podklucz %s nie służy do podpisywania, więc nie trzeba go podpisywać " "skrośnie\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Proszę wybrać dokładnie jeden identyfikator użytkownika.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "podpis w wersji 3 na identyfikatorze ,,%s'' zostaje pominięty\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Podaj URL preferowanego serwera kluczy: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Czy na pewno chcesz go zastąpić? (t/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Czy na pewno chcesz go usunąć? (t/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Adnotacje podpisu: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Kontynuować? (t/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Brak identyfikatora użytkownika o numerze %d.\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Brak identyfikatora użytkownika ze skrótem %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Brak podklucza o numerze %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "Identyfikator użytkownika ,,%s''\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "podpisany Twoim kluczem %s w %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (podpis nieeksportowalny) " #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Ważność tego klucza wygasła %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Czy dalej chcesz go unieważnić? (t/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Stworzyć certyfikat unieważnienia tego podpisu? (t/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Nie podpisane przez ciebie.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Te identyfikatory klucza %s są podpisane przez Ciebie:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (podpis nieunieważnialny) " #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "unieważniony przez Twój klucz %s w %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Czy na pewno chcesz unieważnić te podpisy:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Na pewno utworzyć certyfikaty unieważnienia ? (t/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "brak klucza tajnego\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "identyfikator użytkownika ,,%s'' został już unieważniony\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "OSTRZEŻENIE: identyfikator użytkownika podpisany za %d sekund (w " "przyszłości)\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Klucz %s został już unieważniony\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Podklucz %s został już unieważniony\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Zdjęcie w formacie %s, rozmiar %ld bajtów, klucz %s (id %d).\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "ustawienie %s powtarza się\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "zbyt wiele ustawień szyfrów\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "zbyt wiele ustawień skrótów\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "zbyt wiele ustawień kompresji\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "niepoprawny napis ,,%s'' w tekście ustawień\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "zapis podpisu bezpośredniego\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "zapis podpisu klucza nim samym\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "zapis podpisu wiążącego klucz\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "niewłaściwa długość klucza; wykorzystano %u bitów\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "rozmiar klucza zaokrąglony w górę do %u bitów\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Podpisywanie" #: g10/keygen.c:1365 msgid "Certify" msgstr "Poświadczanie" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Szyfrowanie" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Uwierzytelnianie" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "PpSsUuKk" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Moźliwe wykorzystanie klucza %s: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Dozwolone działania: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Przełączenie możliwości podpisywania\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Przełączenie możliwości szyfrowania\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Przełączenie możliwości uwierzytelniania\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Koniec\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Proszę wybrać rodzaj klucza:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA i RSA (domyślne)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA i ElGamala\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (tylko do podpisywania)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (tylko do podpisywania)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Klucz dla algorytmu ElGamala (tylko do szyfrowania)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (tylko do szyfrowania)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (z dowolnie wybranymi funkcjami)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (z dowolnie wybranymi funkcjami)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "Klucze %s mogą mieć długość od %u do %u bitów.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Jakiej długości podklucz wygenerować? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Jakiej długości klucz wygenerować? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Żądana długość klucza to %u bitów.\n" #: g10/keygen.c:1722 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ści 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Okres ważności podpisu.\n" " 0 = klucz nie ma określonego terminu ważności\n" " = termin ważności podpisu upływa za n dni\n" " w = termin ważności podpisu upływa za n tygodni\n" " m = termin ważności podpisu upływa za n miesięcy\n" " y = termin ważności podpisu upływa za n lat\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Okres ważności klucza ? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Okres ważności podpisu? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "niepoprawna wartość\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Klucz bez daty wygasania\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Podpis bez daty wygasania\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Klucz wygasa %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Ważność podpisu wygasa %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Twój system nie potrafi pokazać daty po roku 2038.\n" "Niemniej daty do roku 2106 będą poprawnie obsługiwane.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Czy wszystko się zgadza? (t/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Musisz podać identyfikator użytkownika aby można było rozpoznać twój klucz;\n" "program złoży go z twojego imienia i nazwiska, komentarza i adresu poczty\n" "elektronicznej. Będzie on miał, na przykład, taką postać:\n" " ,,Tadeusz Żeleński (Boy) ''\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Imię i nazwisko: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Niewłaściwy znak w imieniu lub nazwisku\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Imię lub nazwisko nie może zaczynać się od cyfry\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Imię i nazwisko muszą mieć co najmniej 5 znaków długości.\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Adres poczty elektronicznej: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "To nie jest poprawny adres poczty elektronicznej\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Komentarz: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Niewłaściwy znak w komentarzu\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Używasz zestawu znaków %s.\n" #: g10/keygen.c:1905 #, 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:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Nie należy umieszczać adresu poczty elektronicznej w polu nazwiska czy\n" "komentarza.\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "IiKkEeDdWw" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Zmienić (I)mię/nazwisko, (K)omentarz, adres (E)mail, czy (W)yjść? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "Zmienić (I)mię/nazwisko, (K)omentarz, adres (E)mail, przejść (D)alej,\n" "czy (W)yjść z programu? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Najpierw trzeba poprawić ten błąd\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Musisz podać długie, skomplikowane hasło aby ochronić swój klucz tajny.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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ć hasła - to *zły* pomysł!\n" "W każdej chwili możesz ustawić hasło używając tego programu i opcji\n" "\"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 aby pomóc " "komputerowi\n" "podczas generowania liczb pierwszych jest wykonywanie w tym czasie innych\n" "działań (pisanie na klawiaturze, poruszanie myszką, odwołanie się do " "dysków);\n" "dzięki temu generator liczb losowych ma możliwość zebrania odpowiedniej " "ilości\n" "entropii.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Procedura generacji klucza została anulowana.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "zapisuję klucz publiczny w ,,%s''\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "zapisuję szkielet klucza tajnego w ,,%s''\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "zapisuję klucz tajny w '%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "brak zapisywalnego zbioru kluczy publicznych: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "brak zapisywalnego zbioru kluczy tajnych: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "błąd podczas zapisu zbioru kluczy publicznych ,,%s'': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "błąd podczas zapisu zbioru kluczy tajnych ,,%s'': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "klucz publiczny i prywatny (tajny) zostały utworzone i podpisane.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Ten klucz nie może być wykorzystany do szyfrowania. Komendą \"--edit-key\"\n" "można dodać do niego podklucz szyfrujący.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Generacja klucza nie powiodła się: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, 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:3386 g10/keygen.c:3516 g10/sign.c:244 #, 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:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" "UWAGA: tworzenie podkluczy dla kluczy wersji 3 jest niezgodne z OpenPGP.\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Czy na pewno utworzyć? (t/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "zapis klucza na karcie nie powiódł się: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "nie można utworzyć kopii zapasowej ,,%s'': %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "UWAGA: kopia klucza z karty została zapisana w ,,%s''\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "nigdy " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Krytyczny regulamin podpisu: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Regulamin podpisu: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Krytyczny wybrany serwer kluczy: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Krytyczne adnotacje podpisu: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Adnotacje podpisu: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Zbiór kluczy" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Odcisk klucza głównego:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Odcisk podklucza:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Odcisk klucza głównego:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Odcisk podklucza:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Odcisk klucza =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "Numer seryjny karty =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "zmiana nazwy ,,%s'' na ,,%s'' nie powiodła się: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "OSTRZEŻENIE: Istnieją dwa pliki z poufnymi informacjami.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s pozostał bez zmian\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s został utworzony\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Proszę usunąć to naruszenie zasad bezpieczeństwa\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "buforowanie zbioru kluczy ,,%s''\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu kluczy zbuforowanych (%lu podpisów)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu kluczy zbuforowano (%lu podpisów)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: zbiór kluczy utworzony\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "włączenie unieważnionych kluczy do wyników wyszukiwania" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "uwzględnienie podkluczy przy wyszukiwaniu po numerze klucza" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "wykorzystanie plików tymczasowych do komunikacji z programami pomocniczymi" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "bez kasowania plików tymczasowych po użyciu" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "automatyczne pobieranie brakujących kluczy przy sprawdzaniu podpisów" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "uwzględnienie ustawienia serwera kluczy na kluczu przy jego pobieraniu" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "uwzględnienie ustawienia PKA na kluczu przy jego pobieraniu" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "OSTRZEŻENIE: opcja serwera ,,%s'' nie działa na tym systemie\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "wyłączone" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Podaj numer opcji, (N)Dalej lub (Q)Wyjście > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "" "niepoprawny protokół dostępu do serwera kluczy (nasz %d != %d modułu)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "brak klucza ,,%s'' w serwerze\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "brak klucza w serwerze\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "zapytanie o klucz %s w serwerze %s %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "zapytanie o klucz %s w %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "szukanie nazw w serwerze %s %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "szukanie nazw w serwerze %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "wysyłanie klucza %s do serwera %s %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "wysyłanie klucza %s do %s\"\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "zapytanie o ,,%s'' w serwerze %s %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "zapytanie o ,,%s'' w %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "brak polecenia dla serwera kluczy!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" "OSTRZEŻENIE: program obsługi serwera kluczy pochodzi z innej wersji GnuPG " "(%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "serwer kluczy nie wysłał VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "błąd łączności z serwerem kluczy: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "brak znanyk serwerów kluczy (użyj opcji --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" "ta kompilacja nie obsługuje zewnętrznych programów do komunikacji z " "serwerami\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "brak programu obsługującego protokół ,,%s''\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "nie można zrobić ,,%s'' przy połączeniu protokołem ,,%s''\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s nie obsługuje programu pomocniczego w wersji %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "przekroczenie limitu czasu połączenia z serwerem kluczy\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "błąd serwera kluczy\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr ",,%s'' nie jest poprawnym identyfikatorem klucza, pominięty\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "OSTRZEŻENIE: nie można odświeżyć klucza %s przez %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "odświeżanie klucza z %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "odświeżanie %d kluczy z %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "OSTRZEŻENIE: nie można pobrać URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "OSTRZEŻENIE: niezrozumiały URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "dziwny rozmiar jak na zaszyfrowany klucz sesyjny (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "klucz sesyjny zaszyfrowany %s\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "hasło stworzone z użyciem nieznanego algorytmu skrótu %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "klucz publiczny jest %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "dane zaszyfrowane kluczem publicznym: poprawny klucz sesyjny\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "zaszyfrowano %u-bitowym kluczem %s, numer %s, stworzonym %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " ,,%s''\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "zaszyfrowano kluczem %s o numerze %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "błąd odszyfrowywania kluczem publicznym: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "zaszyfrowane za pomocą %lu haseł\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "zaszyfrowane jednym hasłem\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "przyjmując że dane zostały zaszyfrowane za pomocą %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "szyfr IDEA nie jest dostępny, próba użycia %s zamiast niego\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "odszyfrowanie poprawne\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "OSTRZEŻENIE: wiadomość nie była zabezpieczona przed manipulacją\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "OSTRZEŻENIE: zaszyfrowana wiadomość była manipulowana!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "błąd odszyfrowywania: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "UWAGA: nadawca zaznaczył że wiadomość nie powinna być zapisywana\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "pierwotna nazwa pliku='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "OSTRZEŻENIE: wielokrotne teksty jawne\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "osobny certyfikat unieważnienia, aby go wczytać użyj ,,gpg --import''\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "nie znaleziono podpisu\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "wymuszono pominięcie sprawdzenia podpisu\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "nie można obsłużyć niejednoznacznych danych podpisu\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Podpis złożono %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " kluczem %s %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Podpisano w %s kluczem %s o numerze %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Klucz dostępny w: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "NIEPOPRAWNY podpis złożony przez ,,%s''" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Przeterminowany podpis złożony przez ,,%s''" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Poprawny podpis złożony przez ,,%s''" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[niepewne]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " alias ,,%s''" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Ważność podpisu wygasła %s.\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Ważność podpisu wygasa %s.\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "podpis %s, skrót %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binarny" #: g10/mainproc.c:1947 msgid "textmode" msgstr "tekstowy" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "nieznany" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" "UWAGA: to nie jest podpis oddzielony; plik ,,%s'' NIE został sprawdzony!\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Nie można sprawdzić podpisu: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "nie jest oddzielonym podpisem.\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "OSTRZEŻENIE: wielokrotne podpisy. Tylko pierwszy zostanie sprawdzony.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "oddzielony podpis klasy 0x%02x.\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "podpis starego typu (PGP 2.x).\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "wykryto niepoprawny pakiet pierwotny w proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "nie można wyłączyć zrzutów pamięci: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "błąd fstat na ,,%s'' w %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "błąd fstat(%d) w %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "OSTRZEŻENIE: używany jest eksperymentalny algorytm asymetryczny %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "OSTRZEŻENIE: klucze Elgamala do podpisywania i szyfrowania są przestarzałe\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "OSTRZEŻENIE: używany jest eksperymentalny algorytm szyfrujący %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "OSTRZEŻENIE: używany jest eksperymentalny algorytm skrótu %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "OSTRZEŻENIE: algorytm skrótu %s jest przestarzały\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "więcej informacji można znaleźć w %s\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "UWAGA: Ta opcja nie jest dostępna w %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: przestarzała opcja ,,%s''\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "OSTRZEŻENIE: ,,%s'' jest przestarzałą opcją.\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "w jej miejsce należy użyć ,,%s%s''\"\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "" "OSTRZEŻENIE: ,,%s'' jest przestarzałą komendą -- nie należy jej używać\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Nieskompresowany" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "nieskompresowany|brak" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "ta wiadomość może nie dać się odczytać za pomocą %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "niejednoznaczna opcja ,,%s''\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "nieznana opcja ,,%s''\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Nieznany typ podpisu ,,%s''\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Plik ,,%s'' już istnieje. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Nadpisać? (t/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: nieznana końcówka nazwy\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Nazwa pliku" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "zapisywanie na wyjście standardowe\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "przyjęto obecność podpisanych danych w '%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "nowy plik ustawień ,,%s'' został utworzony\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "OSTRZEŻENIE: opcje w ,,%s'' nie są jeszcze uwzględnione.\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "katalog ,,%s'' utworzony\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "nie można obsłużyć tego algorytmu klucza publicznego: %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "OSTRZEŻENIE: symetrycznie zaszyfrowany klucz sesyjny może nie być " "bezpieczny\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "podpakiet typu %d ma ustawiony krytyczny bit\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent nie jest dostępny w tej sesji\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "zły format zmiennej środowiskowej GPG_AGENT_INFO\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "wersja %d protokołu agenta nie jest obsługiwana\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "nie można się połączyć z ,,%s'': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problem z agentem - zostaje wyłączony\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (klucz główny %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Musisz podać hasło aby odbezpieczyć klucz tajny użytkownika:\n" ",,%.*s''.\n" "Klucz o długości %u bitów, typ %s, numer %s, stworzony %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Powtórzone hasło\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Hasło\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "anulowano przez użytkownika\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "pytanie o hasło nie działa w trybie wsadowym\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Podaj hasło: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Musisz podać hasło aby odbezpieczyć klucz tajny\n" "użytkownika ,,%s''\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "długość %u bitów, typ %s, numer %s, stworzony %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (podklucz na kluczu głównym %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Powtórz hasło: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Wybierz zdjęcie które chcesz dołączyć do swojego klucza jako identyfikator.\n" "Musi to być plik w formacie JPEG. Zostanie on zapisany w Twoim kluczu\n" "publicznym. Jeśli będzie duży, powiększy to także rozmiar Twojego klucza!\n" "Dobry rozmiar to około 240 na 288 pikseli.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Nazwa pliku ze zdjęciem w formacie JPEG: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "nie można otworzyć pliku JPEG ,,%s'': %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Bardzo duży plik JPEG (%d bajtów)!\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Czy na pewno chcesz go użyć? (t/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr ",,%s'' nie jest plikiem JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Czy zdjęcie jest w porządku? (t/N/w) " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "brak ustawienia przeglądarki do zdjęć\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "nie można wyświetlić zdjęcia!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Nie podano przyczyny" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Klucz został zastąpiony" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Klucz został skompromitowany" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "klucz nie jest już używany" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Identyfikator użytkownika przestał być poprawny" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "powód unieważnienia: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "komentarz do unieważnienia: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMwWpP" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Brak wartości zaufania dla:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " alias ,,%s''\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Jak bardzo ufasz, że ten klucz należy do tej osoby?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = nie wiem, albo nie powiem\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = NIE ufam mu\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = ufam absolutnie\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = powrót do głównego menu\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " p = pominięcie klucza\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " w = wyjście\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Minimalny poziom zaufania do tego klucza wynosi %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Twoja decyzja? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Czy na pewno chcesz obdarzyć ten klucz absolutnym zaufaniem? (t/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certyfikaty prowadzące do ostatecznie zaufanego klucza:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%s: Nie ma pewności co do tożsamości właściciela klucza.\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "%s: Jest ograniczona pewność co do tożsamości właściciela klucza.\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Ten klucz prawdopodobnie należy do tej osoby.\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Ten klucz należy do nas\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NIE MA pewności, czy klucz należy do osoby wymienionej w identyfikatorze.\n" "Jeśli nie masz co do tego żadnych wątpliwości i *naprawdę* wiesz co robisz,\n" "możesz odpowiedzieć ,,tak'' na następne pytanie.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Użyć tego klucza pomimo to? (t/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "OSTRZEŻENIE: używany jest klucz nie obdarzony zaufaniem!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "OSTRZEŻENIE: ten klucz mógł zostać unieważniony\n" " (brak klucza unieważniającego aby to sprawdzić)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "OSTRZEŻENIE: Ten klucz został unieważniony kluczem unieważniającym!\n" #: g10/pkclist.c:523 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:524 msgid " This could mean that the signature is forged.\n" msgstr " To może oznaczać, że podpis jest fałszerstwem.\n" #: g10/pkclist.c:530 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:535 msgid "Note: This key has been disabled.\n" msgstr "Uwaga: Ten klucz został wyłączony z użytku\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Uwaga: sprawdzony adres sygnatariusza to ,,%s''\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Uwaga: adres sygnatariusza ,,%s'' nie zgadza się z DNS\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "poziom zaufania zmieniony na PEŁEN z powodu poprawnego PKA\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "poziom zaufania zmieniony na NIGDY z powodu niepoprawnego PKA\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Uwaga: ważność tego klucza wygasła!\n" #: g10/pkclist.c:604 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:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Nie ma pewności co do tożsamości osoby która złożyła podpis.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "OSTRZEŻENIE: NIE UFAMY temu kluczowi!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Ten podpis prawdopodobnie jest FAŁSZYWY.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "OSTRZEŻENIE: Tego klucza nie poświadczają wystarczająco zaufane podpisy!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" " Nie ma pewności co do tożsamości osoby która złożyła ten " "podpis.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: pominięty: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: pominięty: został już wybrany w innej opcji\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Nie został podany identyfikatora użytkownika (np. za pomocą ,,-r'')\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Obecnie wybrani adresaci:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Identyfikator użytkownika (pusta linia oznacza koniec): " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Brak takiego identyfikatora użytkownika.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "pominięty: klucz publiczny już jest domyślnym adresatem\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Klucz publiczny wyłączony z użycia.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "pominięty: został już wybrany w innej opcji\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "nieznany domyślny adresat ,,%s''\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: pominięty: klucz publiczny wyłączony z użytku\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "brak poprawnych adresatów\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "dane nie zostały zapisane; aby to zrobić, należy użyć opcji \"--output\"\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "błąd tworzenia `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Podpis oddzielony od danych.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Nazwa pliku danych: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "czytam strumień standardowego wejścia\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "brak podpisanych danych\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "nie można otworzyć podpisanego pliku ,,%s''\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "adresat anonimowy; próba odszyfrowania kluczem %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "OK, to my jesteśmy adresatem anonimowym.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "stary, nie obsługiwany algorytm szyfrowania klucza sesyjnego\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "algorytm szyfrujący %d%s jest nieznany lub został wyłączony\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "OSTRZEŻENIE: brak szyfru %s w ustawieniach odbiorcy\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "UWAGA: ważność klucza tajnego %s wygasła %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "UWAGA: klucz został unieważniony" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "wywołanie funkcji build_packet nie powiodło się: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "klucz %s nie ma identyfikatora użytkownika\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Zostanie unieważniony przez:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(to jest czuły klucz unieważniający)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Stworzyć certyfikat unieważnienia tego klucza? (t/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "wymuszono opakowanie ASCII wyniku.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "wywołanie funkcji make_keysig_packet nie powiodło się: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Certyfikat unieważnienia został utworzony.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "brak kluczy unieważniających dla ,,%s''\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "klucz prywatny ,,%s'' nie został odnaleziony: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "brak odpowiadającego klucza publicznego: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "klucz publiczny nie pasuje do klucza prywatnego!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Utworzyć certyfikat unieważnienia tego klucza? (t/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "nieznany algorytm ochrony\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "UWAGA: Ten klucz nie jest chroniony!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Certyfikat unieważnienia został utworzony.\n" "\n" "Należy przenieść go na nośnik który można bezpiecznie ukryć; jeśli źli " "ludzie\n" "dostaną ten certyfikat w swoje ręce, mogą użyć go do uczynienia klucza\n" "nieużytecznym.\n" "\n" "Niezłym pomysłem jest wydrukowanie certyfikatu unieważnienia i schowanie\n" "wydruku w bezpiecznym miejscu, na wypadek gdyby nośnik z certyfikatem stał " "się\n" "nieczytelny. Ale należy zachować ostrożność, systemy drukowania różnych\n" "komputerów mogą zachować treść wydruku i udostępnić ją osobom " "nieupoważnionym.\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Proszę wybrać powód unieważnienia:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Anuluj" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Prawdopodobnie chcesz tu wybrać %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Wprowadź opis (nieobowiązkowy) i zakończ go pustą linią:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Powód unieważnienia: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(nie podano)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Informacje poprawne? (t/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "tajne części klucza są niedostępne\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "algorytm ochrony %d%s nie jest obsługiwany\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "skrót ochrony %d nie jest obsługiwany\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Niepoprawne hasło; proszę spróbować ponownie" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "OSTRZEŻENIE: Wykryto słaby klucz - należy ponownie zmienić hasło.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "tworzenie przestarzałej 16-bitowej sumy kontrolnej dla ochrony klucza\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "wygenerowano słaby klucz - operacja zostaje powtórzona\n" #: g10/seskey.c:56 #, 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" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA wymaga aby skrót miał długość będącą wielokrotnością 8 bitów\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" "Klucz DSA %s używa niewystarczająco bezpiecznego skrótu o długości %u bitów\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "Klucz DSA %s wymaga skrótu %u-bitowego lub dłuższego\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "OSTRZEŻENIE: konflikt skrótów podpisów w wiadomości\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "OSTRZEŻENIE: podklucz podpisujący %s nie jest skrośnie podpisany\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "OSTRZEŻENIE: podklucz podpisujący %s jest niepoprawnie skrośnie podpisany\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "klucz publiczny %s jest o %lu sekundę młodszy od podpisu\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "klucz publiczny %s jest o %lu sekund(y) młodszy od podpisu\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "klucz %s został stworzony %lu sekundę w przyszłości (zaburzenia\n" "czasoprzestrzeni lub źle ustawiony zegar systemowy)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "klucz %s został stworzony %lu sekund w przyszłości (zaburzenia\n" "czasoprzestrzeni lub źle ustawiony zegar systemowy)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "UWAGA: klucz podpisujący %s przekroczył datę ważności %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "podpis %s, skrót %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "podpis złożony kluczem %s uznany za nieważny z powodu nieznanego bitu " "krytycznego\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "klucz %s: brak podklucza, którego dotyczy unieważnienie\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "klucz %s: brak podklucza dowiązywanego podpisem\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "OSTRZEŻENIE: nie można rozwinąć %% w URL adnotacji (jest zbyt długi).\n" " Użyty zostanie nie rozwinięty.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "OSTRZEŻENIE: nie można rozwinąć znaczników %% w URL regulaminu\n" " (jest zbyt długi). Użyty zostanie nie rozwinięty.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "OSTRZEŻENIE: nie można rozwinąć znaczników %% w URL regulaminu\n" " (jest zbyt długi). Użyty zostanie nie rozwinięty.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "sprawdzenie złożonego podpisu nie powiodło się: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "podpis %s/%s złożony przez: ,,%s''\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "kluczami PGP 2 w trybie --pgp2 można podpisywać tylko do oddzielonych " "podpisów\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "wymuszone użycie skrótu %s (%d) kłóci się z ustawieniami adresata\n" #: g10/sign.c:960 msgid "signing:" msgstr "podpis:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "w trybie --pgp2 można podpisywać tylko za pomocą kluczy z wersji 2.x\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "zostanie użyty szyfr %s\n" #: g10/skclist.c:126 g10/skclist.c:190 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:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "pominięty ,,%s'': duplikat\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "pominięty ,,%s'': %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "pominięty: klucz prywatny jest już wpisany\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "wygenerowany przez PGP klucz dla algorytmu ElGamala,\n" "podpisy składane tym kluczem nie zapewniają bezpieczeństwa!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, 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/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Lista przypisanych wartości zaufania, stworzona %s\n" "# (użyj \"gpg --import-ownertrust\" aby ją wczytać)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "błąd w ,,%s'': %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "zbyt długa linia" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "brak dwukropka" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "niepoprawny odcisk klucza" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "brak wartości zaufania" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "błąd podczas szukania wartości zaufania ,,%s'': %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "błąd odczytu w ,,%s'': %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "baza zaufania: synchronizacja nie powiodła się %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "nie można utworzyć blokady ,,%s''\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "nie można zablokować ,,%s''\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "baza zaufania, wpis %lu: funkcja lseek() nie powiodła się: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, 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:269 msgid "trustdb transaction too large\n" msgstr "zbyt duże zlecenie dla bazy zaufania\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "nie ma dostępu do ,,%s'': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: katalog nie istnieje!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: stworzenie zapisu o wersji nie powiodło się: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: stworzony niepoprawny plik bazy zaufania\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: baza zaufania utworzona\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "UWAGA: nie można zapisywać bazy zaufania\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: niepoprawny plik bazy zaufania\n" #: g10/tdbio.c:648 #, 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:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: błąd przy uaktualnianiu numeru wersji: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: błąd odczytu numeru wersji: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: błąd zapisu numeru wersji: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "baza zaufania: funkcja lseek() zawiodła: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "baza zaufania: funkcja read() (n=%d) zawiodła: %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: to nie jest plik bazy zaufania\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: wpis wersji z numerem %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: niewłaściwa wersja pliku %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: błąd odczytu pustego wpisu: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: błąd zapisu wpisu katalogowego: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: zerowanie rekordu nie powiodło się: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: dopisanie rekordu nie powiodło się: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Błąd: uszkodzona baza zaufania.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "nie można obsłużyć linii tekstu dłuższej niż %d znaków\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "linia dłuższa niż %d znaków\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr ",,%s'' nie jest poprawnym długim numerem klucza\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "klucz %s: zaakceptowany jako klucz zaufany\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "klucz %s jest wpisany więcej niż raz w bazie zaufania\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "klucz %s: brak klucza publicznego dla zaufanego klucza - pominięty\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "klucz %s został oznaczony jako obdarzony absolutnym zaufaniem.\n" #: g10/trustdb.c:344 #, 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:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "wpis zaufania %lu jest typu innego niż poszukiwany %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "Można próbować odtworzyć bazę zaufania przy użyciu poleceń:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Jeśli to nie działa, należy poradzić się instrukcji\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "nie można użyć nieznanego modelu zaufania %d, zostaje przyjęty %s\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "model zaufania %s\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "17" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ unieważniony ]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ wygasły ]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ nieznany ]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[niezdefiniowany]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[ marginalny ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ pełny ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ ostateczny ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "niezdefiniowany" #: g10/trustdb.c:554 msgid "never" msgstr "nigdy" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginalny" #: g10/trustdb.c:556 msgid "full" msgstr "pełny" #: g10/trustdb.c:557 msgid "ultimate" msgstr "ostateczny" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "sprawdzanie bazy jest niepotrzebne\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "następne sprawdzanie bazy odbędzie się %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "sprawdzanie bazy jest niepotrzebne przy modelu ,,%s''\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "aktualizacja bazy jest niepotrzebna przy modelu ,,%s''\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "klucz publiczny %s nie odnaleziony: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "należy uruchomić gpg z opcją ,,--check-trustdb''\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "sprawdzanie bazy zaufania\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "przetworzono %d kluczy (rozwiązano %d przeliczeń zaufania)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "brak absolutnie zaufanych kluczy\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "klucz publiczny absolutnie zaufanego klucza %s nie odnaleziony\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "potrzeba %d marginalny(ch), %d zupełny(ch), model zaufania %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "głębokość: %d ważnych: %3d podpisanych %3d zaufanych %d-, %dq, %dn, %dm, " "%df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "zapis aktualizacji bazy zaufania nie powiódł się: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "nie można sprawdzić podpisu.\n" "Należy pamiętać o podawaniu pliku podpisu (.sig lub .asc) jako pierwszego\n" "argumentu linii poleceń.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "linia wejścia %u zbyt długa lub brak znaku LF\n" #: util/errors.c:53 msgid "general error" msgstr "błąd ogólny" #: util/errors.c:54 msgid "unknown packet type" msgstr "nieznany typ pakietu" #: util/errors.c:55 msgid "unknown version" msgstr "nieznana wersja" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "nieznany algorytm asymetryczny" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "nieznany algorytm skrótu" #: util/errors.c:58 msgid "bad public key" msgstr "niepoprawny klucz publiczny" #: util/errors.c:59 msgid "bad secret key" msgstr "niepoprawny klucz prywatny" #: util/errors.c:60 msgid "bad signature" msgstr "niepoprawny podpis" #: util/errors.c:61 msgid "checksum error" msgstr "błąd sumy kontrolnej" #: util/errors.c:62 msgid "bad passphrase" msgstr "niepoprawne hasło" #: util/errors.c:63 msgid "public key not found" msgstr "brak klucza publicznego" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "nieznany algorytm szyfrujący" #: util/errors.c:65 msgid "can't open the keyring" msgstr "otwarcie zbioru kluczy jest niemożliwe" #: util/errors.c:66 msgid "invalid packet" msgstr "niepoprawny pakiet" #: util/errors.c:67 msgid "invalid armor" msgstr "błąd w opakowaniu ASCII" #: util/errors.c:68 msgid "no such user id" msgstr "brak takiego identyfikatora użytkownika" #: util/errors.c:69 msgid "secret key not available" msgstr "brak klucza prywatnego" #: util/errors.c:70 msgid "wrong secret key used" msgstr "został użyty niewłaściwy klucz prywatny" #: util/errors.c:71 msgid "not supported" msgstr "nie jest obsługiwany" #: util/errors.c:72 msgid "bad key" msgstr "niepoprawny klucz" #: util/errors.c:73 msgid "file read error" msgstr "błąd przy odczycie pliku" #: util/errors.c:74 msgid "file write error" msgstr "błąd przy zapisie pliku" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "nieznany algorytm kompresji" #: util/errors.c:76 msgid "file open error" msgstr "błąd przy otwieraniu pliku" #: util/errors.c:77 msgid "file create error" msgstr "błąd przy tworzeniu pliku" #: util/errors.c:78 msgid "invalid passphrase" msgstr "niepoprawne długie hasło" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algorytm szyfrowania z kluczem publicznym nie jest zaimplementowany" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algorytm szyfrujący nie jest zaimplementowany" #: util/errors.c:81 msgid "unknown signature class" msgstr "nieznana klasa podpisu" #: util/errors.c:82 msgid "trust database error" msgstr "błąd w bazie zaufania" #: util/errors.c:83 msgid "bad MPI" msgstr "błąd MPI" #: util/errors.c:84 msgid "resource limit" msgstr "ograniczenie zasobów" #: util/errors.c:85 msgid "invalid keyring" msgstr "błąd w zbiorze kluczy" #: util/errors.c:86 msgid "bad certificate" msgstr "niepoprawny certyfikat" #: util/errors.c:87 msgid "malformed user id" msgstr "błąd formatu identyfikatora użytkownika" #: util/errors.c:88 msgid "file close error" msgstr "błąd przy zamykaniu pliku" #: util/errors.c:89 msgid "file rename error" msgstr "błąd przy zmianie nazwy pliku" #: util/errors.c:90 msgid "file delete error" msgstr "błąd przy usuwaniu pliku" #: util/errors.c:91 msgid "unexpected data" msgstr "nieoczekiwane dane" #: util/errors.c:92 msgid "timestamp conflict" msgstr "konflikt datowników" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "nieużyteczny algorytm asymetryczny" #: util/errors.c:94 msgid "file exists" msgstr "plik już istnieje" #: util/errors.c:95 msgid "weak key" msgstr "klucz słaby" #: util/errors.c:96 msgid "invalid argument" msgstr "błędny argument" #: util/errors.c:97 msgid "bad URI" msgstr "niepoprawny URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI nie jest obsługiwany" #: util/errors.c:99 msgid "network error" msgstr "błąd sieci" #: util/errors.c:101 msgid "not encrypted" msgstr "nie zaszyfrowany" #: util/errors.c:102 msgid "not processed" msgstr "nie został przetworzony" #: util/errors.c:104 msgid "unusable public key" msgstr "bezużyteczny klucz publiczny" #: util/errors.c:105 msgid "unusable secret key" msgstr "bezużyteczny klucz prywatny" #: util/errors.c:106 msgid "keyserver error" msgstr "błąd serwera kluczy" #: util/errors.c:107 msgid "canceled" msgstr "anulowane" #: util/errors.c:108 msgid "no card" msgstr "brak karty" #: util/errors.c:109 msgid "no data" msgstr "brak danych" #: util/logger.c:183 msgid "ERROR: " msgstr "BŁĄD: " #: util/logger.c:186 msgid "WARNING: " msgstr "OSTRZEŻENIE: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... to jest błąd programu (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "znalazłeś(aś) błąd w programie ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "tak" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "tT" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "nie" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "wyjście" #: util/miscutil.c:443 msgid "qQ" msgstr "wW" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "ok|OK" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "anuluj|Anuluj" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "aA" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "OSTRZEŻENIE: nie można zabezpieczyć używanej pamięci!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "objaśnienie można przeczytać tutaj: http://www.gnupg.org/documentation/faqs." "html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "bez zabezpieczenia pamięci nie można wykonać tej operacji\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(prawdopodobnie używany program jest niewłaściwy dlatego zadania)\n" gnupg-1.4.20/po/es.gmo0000644000175000017500000043272112635457221011410 00000000000000(Pl-l?llmmnnno"o?o\oyo2o7o2p#4pDXp.pIp7q'Nqvq qqqqqr#r@rYrvr+r&r#r(r(sAsZszs(ssss$t9tOt&ftt,ttt! u+uAu\uwu uu uuuuvv&v@v]v*zv"v]vB&wiw/|w=w(w.x3Bx!vx(xxx'x y*y=yWysyy,y'yyz")zLzQzlzBz=z {"({%K{&q{!{%{"{#|''| O|p||||||(|$&}K}`}#t}}$}}}!~<~Y~ x~~&~%~ ~, 47lG^s'.A T'u"ׁ-(40]2H   !.LhA/ބ0\?1΅D-(0V.I*++'W χ93P4-'.щ$ . 8?F4:3Oi,~(8ԋ# &1(X&׌76--d%390&<WG@܎>+\=ƏΏޏ"1 A:M#ѐ /5JH5-~$'ђ8&25Y.5*!.A0p&,Ȕ +68I#"ƕ.H"($FEk1;yi8$3K`! :MgBޜ)%@fn.*x Ğ*!0؟' <1n+",ؠ/15"g,"2ڡ )(J s *ʢܢ $6Sl 5I"(5UFg 1ϥ%'GEE,or $8'>Tc/HNxEǪ, ":#]-+)۫&,'>Ѯ 2BKd+,3ٯ 1K(a#+"ڰ+") Lm?%);Xv.(ò } /00!Ikp!ζ%>SfojK@E-9AO{0˹/5,'b.3-,#!9[$w,(ɽ-&Tg7T q~*+* Cd}#$  ;6E%|72'r>1Y=I4H#g=?D)@n+1N I\I55&;\?B<HX-"H;?< B])C:.I>x2=<(@eFHU6$ -213Ie>K@:5{*7,0A0r4 2,:-6h5.h$*&1#25>h*Y=0M9A"{&!3>cZ%D,)5V2_ @ K V a lw  %"8[){&+5.GV k x. BE5c$ !8?X[(q" =Yw,'.%2>+q%CX5m ;<*\ *C:Y&.D-S <A(7M/l 1)@Wh,H- EQ%Z/0.&(3O  0!$>=c%#- 2S'r#;Y'u&&&Bi / ,/-"]9K%$,&Q$x#D#'*Rcu 1$-@4u $!#5LD`+/ 6 0Ct}/"&('%P%v$ ..Le2'2Zj/+$&>$e',, >3 r$,IJ_"#( L!m*-) W$c' ."+#)O#y-%65H/~"';40p"%/2M!a: !!(>+g8!4 0@q26)9;u&GH BX     # - M ] w        ? M e         '7 _ ~  .   ( 2 !8  Z { ,      $'E)Hr z%%,$Q2n3&"41Cu!%%Ci     #& ;)Eo$<!A6Z,;#M;-":"P-s+&*596o!&$ 1C2XIF3K^y01D#v#++,!C2e$*2.Et*  5Cc%&$@#Y&}3%*%Jp(-96U:,0 /9 i 7~ * . 7!;H!0!1!;!#"%;"a")p"3"6":# @#K#^#9q##5#-$".$Q$ q$$-$$$$ %5*%$`%%+%4%%&!'&CI&*&(&0&'2'.;'-j'*''+T(G(2(/(%+)FQ))1)#)*!*@*(]**-*/*,* &+"0+)S+}++ ++2+1%,W,`,#},#,!,",- -8-:W-I-A-".A. S.].p....... /2/R/!k//////0#0 90E0U0o00 0000 0 11216J1151#1 12'2=2N2*g2!2 22G23*3 =3^3{33-3,33454F4 b44444444D4F=5E5D5E6AU6766677=>7>|77$777<587r8F8899!9 [9|9 9$99#99#:7:*N:*y::C<<m=p> >?"???!@,0@]@,{@1@5@1A,BA?oA8AEA?.B0nB!B B&BB C"&C"IC/lCCCC2C)D(:D)cDD$DDD) E4E PEqE*EEE.EF+5F+aFF&FFFFG 1G ?G `GmG!G$GGGG! H6+H2bH'HkH\)II1IOI,J.LJA{J$J0J"K6K8?KxKKKKK!K;L8KLLL"LLLMWMUnMM%M+ N36N1jN/N%N/N."O*QO&|O)O6OP3PMP(^P(P,PP5P+Q7JQ+Q+Q2Q# R,1R0^RR$R0RR9SCHSSmTT TTT$T!U#?UcU{UU&U-UU&V CVdV)xV,V;V WM*W)xW X X%X&X) Y%4YSZY:Y>Yy(Z8ZZNZ*@[$k[-[K[$ \(/\"X\{\\\-\!\"]+]G]"P]$s];] ]@]9 ^Z^*0_'[_ _4_ _ _<_=`<X`'```!`a88a3qa>a%a& b41b(fbbbb bFb:c,Uc$c4c=c0dBKdDd>d4e1Ge4yee#ee!e4f'9faf{fFf"f&fg5g+Ng:zggg"hGh?.i6ni/iAi'jM?j6jKj0k4Ak;vk8k,k8lQlnlll=llm )mA3m6ummW[n(n*n)oI1o'{ooBFpp$:q!_q"qMq,qr5rKrarr:s!t(@g^C\KVD>DGA˲7 7EA}0I3:9n22۵((7[`$*7 7DA|G1?;#N_J);#(_:Mx9%l,8m     (  & 4 @ NYs(*35.M?|J 2S#h5 P)l5)+<Sm&80P"m/)'4,2a>323:?n+,$H'm9-;T s}CQ0?.p % *2&]E#!E\/m'!4A+Em&66(#_ #<%5Mb1z?'Od| !$B*#N9i:" #A=^%<$(?<h#384"m& #!/E/u-*-,H#u  L&D<4'fXE@:*)E o%E7:Ri>:+fMn ( 5$Sx"[1$@V >6*$*Oz'66A'8i' 3%0Y"(3$)N/g$2+?.n/.2;F)15%%?K(',E'\m] (#I4m!#:>#b 034" W)e,%@+#AO<*(C"+f?=D'U,}: U4\.7;C4'x827 !D(f+46C'"k*;5+0G:x72Xw".^^<D#-$2W5m(%.1>/p)70&3Z"q&(  ( Gh~?%."$Qv&}1'('0Dux  /=$;'c0r 63@8\@CcK~')0M?c%/,*W$t98 & @ K V c.q6, 3 E4f77-I=w9QZHy'8(W;+8  A .b % . = =$ $b , 5 3  7 AT    a b v   "    2 'K 9s 4 $ #2+3^?#:1'Mu'2*',4T>  %#I ^&%+)5E6{%@2/6b2#F%Ila25K-0,"+<N,/=@&8g=@,>k=~@250fvX=NCN' "*MB` 'C#Dh'>$.C@8)3! =AHC98J0 2H .{ N  7!1R!#!'!#!.!&#":J"A"8" #;#FJ#?#,#7#86$=o$?$$ $)%*A%9l%&%7%0&k6&J&A&*/'Z' p'|''$'+' '"( $($E(-j(-(+(.(!);)%W)'})))+)**)!*K*g*6**/*'+-+5+J+e+:++O+(),2R,,#,,,2,-- J-V-I_-"--&-!. (.#5.7Y.3.././#)/2M/"//////0F0QM0E0<0F"11i1=1.1426=2;t2"22)2-3)H3Br33%3A3C94}4 4344%45+55a5)s535XYxBN @W/G ^fXK23#,Vyj @wjfK=w8nAu;DK  FvT}dj9 buq_h}\9N@:d>]SRDEMar',9g%^ "swn8%b# Pr4eaC|=] &J"C64.DJ5gd)1p^7U|$H]9LGR]= i}c.a:z(-O<yAmQLxZY#[,!3[' p#$EL}z@ n)?6UBL#;Yj~+z~?"ive50,Q}xo?_Ntl7tj>SA4+y Uc36^ 2E>~erdh$|)6K yeuwD?g1sR.W{<OtBk7*XTX, \h2H!: qBm%&o"? 7;h -I)m>{ET P'kB-`<1rQ]/*T=zI`n<%obIO8;{ZqVFeMXs8+J^R|U/.NH*IF@):`4M[4[c$mt`d/5q\V {&F~["ohY  1'_\ vZ3MITn6-D~27k.(pO fC+*rugHvC!YMfWp :\mlaUi<!SJEz>0u-SAxocc+l l0iGsvZ|Q/ 08QxHW`a=5iZJ &wC_b10PLA$5! F( W  SO9V_K'Pfgl%k2qb3yV;tGR N (pP{*sG(&k Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: GnuPG 1.4.1 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2014-11-23 01:52+0100 Last-Translator: Manuel "Venturi" Porras Peralta Language-Team: Español; Castellano Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Gtranslator 2.91.6 Introduzca identificador de usuario. Acabe con una línea vacía: No hay suficientes bytes aleatorios disponibles. Haga algún otro trabajo para que el sistema pueda recolectar más entropía (se necesitan %d bytes más). Escoja una imagen para usar como retrato. La imagen debe ser un fichero JPEG. Recuerde que la imagen se almacena en su clave pública. Si usa una foto muy grande, ¡su clave será también muy grande! Una imagen cercana a 240x288 tiene un tamaño adecuado. Algoritmos admitidos: Necesita un identificador de usuario para identificar su clave. El programa construye el identificador de usuario a partir del Nombre Real, Comentario y Dirección de Correo Electrónico de esta forma: "Heinrich Heine (Der Dichter) " alias "%s" usando %s clave %s importadas: %lu sin cambios: %lu nuevas subclaves: %lu nuevos identificadores de usuario: %lu no importadas: %lu sin identificador de usuario: %lu "%s": algoritmo de cifrado preferido %s "%s": algoritmo de compresión preferido %s "%s": algoritmo de resumen preferido %s (subclave en clave principal ID %s) No es seguro que la firma pertenezca al propietario. La firma es probablemente una FALSIFICACIÓN. No hay indicios de que la firma pertenezca al propietario. Esto puede significar que la firma está falsificada. algoritmos en estos identificadores de usuario: nuevas firmas: %lu "%s" Número de serie de la tarjeta = Huella de clave = Huella de subclave: claves secretas leídas: %lu omitidas claves nuevas: %lu identificadores de usuario limpiados: %lu Huella de subclave:firmas limpiadas: %lu (%c) Acabado (%c) Conmutar la capacidad de autentificación (%c) Conmutar la capacidad de cifrado (%c) Conmutar la capacidad de firmar (%d) DSA (permite elegir capacidades) (%d) DSA (sólo firmar) (%d) DSA y ElGamal (por defecto) (%d) ElGamal (sólo cifrar) (%d) RSA (sólo cifrar) (%d) RSA (permite elegir capacidades) (%d) RSA (sólo firmar) (%d) RSA y RSA (por defecto) (0) No contesto.%s (1) No lo he comprobado en absoluto.%s (1) Clave de firmado (2) Clave de cifrado (2) He hecho una comprobación informal.%s (3) Clave de autenticación (3) Lo he comprobado meticulosamente.%s nuevas revocaciones de claves: %lu %d = NO tengo confianza %d = No lo sé o prefiero no decirlo %d = Confío totalmente %d = Confío un poco %d = confío absolutamente Imposible firmar. alias "%s" m = volver al menú principal q = salir s = saltar esta clave claves secretas importadas: %lu (identificador de clave primaria %s) (no exportable) (no revocable) Huella de clave primaria:claves secretas sin cambios: %lu "%s" no es un identificador de clave válido: omitido "%s" ya estaba firmada localmente por la clave %s "%s" ya estaba firmada por la clave %s # Lista de valores de confianza asignados, creada %s # (Use "gpg --import-ownertrust" para restablecerlos) Quedan %d intentos de PIN de administrador antes de que se bloquee permanentemente la clave %d firmas incorrectas %d claves procesadas (%d validaciones superadas) %d dudosa(s) necesaria(s), %d completa(s) necesaria(s), modelo de confianza %s %d firmas no comprobadas por varios errores %d firmas no comprobadas al faltar sus claves Detectados %d identificadores de usuario sin autofirmas válidas %lu claves memorizadas (%lu firmas) %lu claves memorizadas hasta ahora (%lu firmas) %lu claves procesadas hasta ahora %s ... gpgkeys_%s no permite usar la versión %d del manejador %s aún no funciona con %s datos cifrados %s %s clave de sesión cifrada se usará un cifrado %s %s es el nuevo %s es el que no se ha modificado las claves %s pueden tener entre %u y %u bits de longitud. los tamaños de claves %s deben estar en el rango %u-%u ¡%s no tiene sentido con %s! ¡%s no permitido con %s! firma %s, algoritmo de resumen %s %s. %s/%s cifrado para: "%s" %s/%s firma de: "%s" %s: Hay poca seguridad de que esta clave pertenezca realmente al usuario que se nombra %s: No hay seguridad de que esta clave pertenezca realmente al usuario que se nombra %s: ¡el directorio no existe! %s: error leyendo registro libre: %s %s: error leyendo registro de versión: %s %s: error actualizando el registro de versión: %s %s: error escribiendo registro de directorio: %s %s: error escribiendo registro de versión: %s %s: fallo al añadir un registro: %s %s: fallo en la creación de la tabla hash: %s %s: fallo al crear el registro de versión: %s%s: fallo en poner a cero un registro: %s %s: versión inválida del fichero %d %s: base de datos de confianza inválida %s: se ha creado base de datos de confianza inválida %s: almacén creado %s: no es un fichero de base de datos de confianza %s: omitido: %s %s: omitida: clave pública ya presente %s: omitida: clave pública desactivada %s: se ha creado base de datos de confianza %s: sufijo desconocido %s: registro de versión con número de registro %lu %s:%d: opción desfasada "%s" %s:%d: lista inválida de auto-localización de claves %s:%d: opciones de exportación inválidas %s:%d: opciones de importación inválidas %s:%d: opciones del servidor de claves inválidas %s:%d: lista de opciones inválida %s:%d: opciones de verificación inválidas clave %2$s de %1$u bits, ID %3$s, creada el %4$s(No se dio descripción) (Aquí seguramente desee elegir %d) (Este es una clave de revocación confidencial) (confidencial)(excepto si especifica la clave dando su huella digital) (es posible que haya usado el programa incorrecto para esta tarea) * La orden `sign' (firmar) puede estar precedida por una 'l' para firmas locales (lsign), una 't' para firmas fiables (tsign), `nr' para firmas no revocables (nrsign) o cualquier combinación de ellas (ltsign, tnrsign, etc) --clearsign [nombre_fichero]--decrypt [nombre_fichero]--edit-key id-usuario [órdenes]--encrypt [nombre_fichero]--lsign-key id-usuario--output no funciona con esta orden --sign --encrypt [nombre_fichero]--sign --symmetric [nombre_fichero]--sign [nombre_fichero]--sign-key id-usuario--store [nombre_fichero]--symmetric --encrypt [nombre_fichero]--symmetric --sign --encrypt [nombre_fichero]--symmetric [nombre_fichero]-k[v][v][v][c] [id-usuario] [almacén]... esto es un error (%s:%d:%s) 1 firma incorrecta 1 firma no comprobada al faltar su clave 1 firma no comprobada por causa de un error Detectado 1 identificador de usuario sin autofirma válida 13 no apto para supersticiosos@ (Véase en la página del manual la lista completa de órdenes y opciones) @ Ejemplos: -se -r Bob [fichero] firma y cifra para el usuario Bob --clearsign [fichero] hace una firma para texto sin cifrar --detach-sign [fichero] hace una firma separada --list-keys [nombres] muestra las claves --fingerprint [nombres] muestra las huellas digitales @ Opciones: @Órdenes: se fuerza salida con armadura ASCII. Se permiten órdenes de administrador No se permiten órdenes de administrador Órdenes exclusivas de administrador Responda "sí" (o sólo "s") si está de acuerdo con todo para generar la subclave.Responda "sí" si está de acuerdo en borrar esta subclaveResponda "sí" si está de acuerdo en sobreescribir el ficheroResponda "sí" si desea realmente eliminar este identificador de usuario. ¡También se perderán todos los certificados!Responda "sí" si quiere firmar TODOS los IDs de usuarioResponda "sí" o "no"¿Está realmente seguro de querer firmar esta clave con su clave: "%s" (%s)? ¿Está seguro de querer añadirla? (s/N) ¿De verdad quiere revocarla? (s/N) ¿Seguro que todavía quiere firmarlo? (s/N) ¿Está seguro de querer elegir esta clave como revocador designado? (s/N) ¿Seguro que quiere borrarlo? (s/N) ¿Seguro que quiere reemplazarlo? (s/N) ¿Seguro que quiere usarlo? (s/N) AutentificaciónFirma INCORRECTA de "%s"Huella digital CA:error de redundancia cíclica: %06lX - %06lX Imposible comprobar la firma: %s No se puede editar esta clave: %s No se puede abrir `%s': %s CancelarNombre del titular de la tarjeta: Apellido del titular de la tarjeta: Certificados que llevan a una clave de confianza absoluta: Certificar¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? ¿Cambia (N)ombre, (C)omentario, (D)irección o (S)alir? Cambiar las preferencias de todos los identificadores de usuario (o sólo los seleccionados) por la lista actual de preferencias. La marca de tiempo de todas las auto-firmas afectadas se avanzará en un segundo. Cambiando fecha de caducidad de subclave. Cambiando caducidad de clave primaria. Cifrado: La orden espera un nombre de fichero como argumento Comentario: Compresión: ¿Crear un certificado de revocación para esta clave? (s/N)¿Crear un certificado de revocación para esta clave? (s/N) ¿Crear un certificado de revocación para esta clave? (s/N)Servidor de claves crítico preferido: Notación de firmas críticas: Política de firmas críticas: Acciones permitidas actualmente: Destinatarios actuales: la clave DSA %s requiere un resumen de al menos %u bits la clave DSA %s usa un resumen no seguro (%u bits) DSA necesita un resumen cuya longitud sea múltiplo de 8 bits ¿Borrar esta firma correcta? (s/N/q)¿Borrar esta firma inválida? (s/N/q)¿Eliminar esta clave del almacén de claves? (s/N) ¿Borrar esta firma desconocida? (s/N/q)%d firmas borradas. %d firmas borradas Firma separada. Resumen: Mostrando ID fotográfico %s de tamaño %ld para la clave %s (uid %d) ¿De verdad quiere borrar las claves seleccionadas? (s/N) ¿De verdad quiere borrar esta clave? (s/N) ¿Realmente desea hacer esto? (s/N) ¿De verdad quiere revocar la clave completa? (s/N) ¿De verdad quiere revocar las subclaves seleccionadas? (s/N)¿De verdad quiere revocar esta subclave? (s/N) ¿De verdad quiere asignar absoluta confianza a esta clave? (s/N) ¿Desea producir una nueva firma que reemplace a la caducada? (s/N) ¿Desea convertirla en una clave totalmente exportable? (s/N) ¿Desea convertirla en una autofirma OpenPGP? (s/N) ¿Desea firmarla de nuevo de todas formas? (s/N) ¿Desea que su firma caduque al mismo tiempo? (S/n) ERROR: Dirección de correo electrónico: CifradoIntroduzca PIN de Administrador: Introduzca nombre del fichero JPEG para el retrato: Introduzca Nuevo PIN de Administrador: Introduzca el Nuevo PIN: Introduzca PIN: Introduzca una descripción opcional; finalice con una línea vacía: Introduzca nuevo nombre de ficheroIntroduzca número(s), O)tro, o F)in >Introduzca contraseña Introduzca contraseña: Introduzca el nombre del dueño de la claveIntroduzca la nueva contraseña para esta clave secreta. Notación de firma: Introduzca el valor requerido conforme se muestra. Es posible introducir una fecha ISO (AAAA-MM-DD), pero no se obtendrá una buena respuesta a los errores; por el contrario, el sistema intentará interpretar el valor introducido como un intervalo.Introduzca la longitud de la claveIntroduzca el identificador de usuario al que quiere enviar el mensaje.Introduzca el identificador de usuario del revocador asignado: Introduzca la URL de su servidor de claves preferido: Error leyendo clave de respaldo desde `%s': %s Error: nombre combinado demasiado largo (máximo %d caracteres). Error: no se permiten dobles espacios. Error: los datos de ingreso son demasiado largos (límite de %d caracteres). Error: actualmente solo se permite ASCII sin formato. Error: los datos privados son demasiado largos (límite de %d caracteres). Error: No se puede utilizar el carácter «<». Error: La base de datos de confianza está corrupta Error: URL demasiado larga (el máximo son %d caracteres). Error: caracteres inválidos en cadena de preferencias. Error: huella digital formateada inválida. Error: longitud de la cadena de preferencias inválida. Error: respuesta inválida. Firma caducada de "%s"Características: El fichero `%s' ya existe. Introduzca el nombre del fichero al que se le aplica la firmaAdelante, teclee su mensaje... Firma correcta de "%s"Resumen: Sugerencia: seleccione los identificadores de usuario que firmar Pulse Intro cuando esté listo o «c» para cancelar: ¿Cómo de cuidadosamente ha verificado que la clave que está a punto de firmar pertenece realmente a la persona arriba nombrada? Si no sabe qué contestar, introduzca "0". ¿Qué seguridad tiene de que esta clave pertenece realmente al usuario que se nombra? He comprobado esta clave informalmente. He comprobado esta clave meticulosamente. No he comprobado esta clave en absoluto. cifrado IDEA no disponible, confiadamente intentamos usar %s en su lugar Si eso no funciona, consulte el manual Si lo desea puede introducir un texto explicando por qué emite este certificado de revocación. Sea conciso con este texto. Una línea vacía pone fin al texto. Si desea usar esta clave no fiable de todos modos, conteste "sí".Normalmente no es una buena idea usar la misma clave para firmar y cifrar. Este algoritmo debería usarse solo en ciertos contextos. Consulte primero a su experto en seguridad.Caracter inválido en el comentario Carácter inválido en el nombre Orden inválida (pruebe «help») Clave %s inválida convertida en válida mediante --allow-non-selfsigned-uid contraseña incorrecta; inténtelo de nuevo.Elección inválida. ¿Es correcto? (s/n) ¿Es correcto? (s/N) ¿Es correcta la foto? (s/N/a) No es seguro que la clave pertenezca a la persona que se nombra en el identificador de usuario. Si *realmente* sabe lo que está haciendo, puede contestar sí a la siguiente pregunta. Está en su mano asignar un valor aquí. Dicho valor no se exportará nunca a terceros. Este valor se necesita para implementar la red de confianza, no tiene nada que ver con la red de certificados (creada implícitamente).La clave %s ya ha sido revocada. Clave disponible en: La clave nunca caduca La clave caduca %s Creación de claves cancelada. Creación de la clave fallida: %s La clave ha sido comprometidaLa clave tiene sólo un apuntador u objetos de clave en la propia tarjeta - no hay contraseña que cambiar. La clave ya no está en usoLa clave está protegida. La clave está revocada.La clave ha sido reemplazada.¿Validez de la clave (0)? Clave sin cambios, no se necesita actualización. almacén de clavesSevidor de claves no-modificarPreferencias de idioma: Datos de ingreso (nombre de la cuenta): ¿Desea hacer una copia de seguridad externa a la tarjeta de la clave de cifrado? (S/n)N para cambiar el nombre. C para cambiar el comentario. E para cambiar la dirección de correo electrónico. O para continuar con la generación de clave. S para interrumpir la generación de clave.NOTA: %s no disponible en esta versión NOTA: ¡%s no es para uso normal! NOTA: No hay garantía de que la tarjeta permita el uso del tamaño requerido. Si la generación de clave fracasa, compruebe la documentación de su tarjeta para ver los tamaños posibles. NOTA: Esta funcionalidad no está disponible en %s NOTA: ¡Esta clave no está protegida! NOTA: un S/N de la clave no coincide con el de la tarjeta NOTA: copia de seguridad de la clave guardada en `%s' NOTA: crear subclaves para claves V3 no sigue el estándar OpenPGP NOTA: la clave ha sido revocadaNOTA: ¡las claves ya estaban almacenadas en la tarjeta! NOTA: no existe el fichero de opciones predeterminado `%s' NOTA: se omite el antiguo fichero de opciones predeterminadas `%s' NOTA: clave primaria en línea y almacenada en la tarjeta NOTA: clave secundaria en línea y almacenada en la tarjeta NOTA: clave secreta %s caducó el %s NOTA: el remitente solicitó "sólo-para-tus-ojos" NOTA: clave de la firma %s caducada el %s NOTA: no se recomienda en absoluto el modo S2K simple (0) NOTA: no se puede escribir base de datos de confianza El nombre no puede empezar con un número El nombre debe tener al menos 5 caracteres Se necesita la clave secreta para hacer esto. NnCcDdVvSsNo existe la firma correspondiente en el almacén secreto Ayuda no disponibleNo hay ayuda disponible para `%s'No se dio ninguna razónNo existe una subclave con índice %d identificador de usuario inexistente. No hay confianza definida para: No hay ningún identificador de usuario con la suma %s No hay ningún identificador de usuario con el índice %d Dirección inválida No está firmado por usted. Notación: Tenga en cuenta que esta clave no puede ser usada para cifrar. Puede usar la orden "--edit-key" para crear una subclave con este propósito. Nota: la dirección del firmante `%s' no coincide con la entrada DNS Nota: Esta clave está desactivada. Nota: ¡Esta clave ha caducado! Nota: la dirección del firmante verificado es `%s' No se borró nada Nada que firmar con la clave %s tarjeta OpenPGP núm. %s detectada tarjeta OpenPGP no disponible: %s ¿Sobreescribir? (s/N) La confianza del propietario no puede establecerse si se está usando una base de datos de confianza propocionada por el usuario la función de manejo del PIN devolvió un error: %s El PIN para CHV%d es demasiado corto; la longitud mínima es %d PIN repetido incorrectamente; inténtelo de nuevoCorrija primero el error. Decida su nivel de confianza en que este usuario pueda verificar correctamente las claves de otros usuarios (mirando pasaportes, comprobando huellas digitales de diferentes fuentes...) No ponga la dirección de correo-e en el nombre real o en el comentario Introduzca un dominio para restringir esta firma, o intro para ninguno. Introduzca un nuevo nombre de fichero. Si pulsa INTRO se usará el fichero por omisión (mostrado entre corchetes).Introduzca un comentario opcionalIntroduzca el nombre del fichero de datos: Introduzca el nivel de esta firma de confianza. Un nivel mayor que 1 permite que la clave que está firmando pueda hacer firmas de confianza en su nombre. Introduzca la contraseña: esta es una frase secreta Arregle este posible fallo de seguridad Inserte la tarjeta y pulse Intro o escriba «c» para cancelar: Observe que los valores de fábrica de los PIN son PIN = `%s' PIN Administrador = `%s' Debería cambiarlos usando la orden --change-pin Tenga en cuenta que la validez de clave mostrada no será correcta necesariamente hasta que reinicie el programa. Quite las selecciones de las claves secretas. Retire la tarjeta actual e inserte la del número de serie: %.*s Repita la última contraseña para asegurarse de lo que tecleó.Informe de posibles «bugs» a . Seleccione como máximo una clave secundaria. Seleccione exactamente un identificador de usuario. Elija una razón para la revocación: Seleccione el tipo de clave a generar: Seleccione el tipo de clave deseado: Elija dónde guardar la clave: Especifique el período de validez de la clave. 0 = la clave nunca caduca = la clave caduca en n días w = la clave caduca en n semanas m = la clave caduca en n meses y = la clave caduca en n años Especifique el período de validez de la clave. 0 = la clave nunca caduca = la clave caduca en n días w = la clave caduca en n semanas m = la clave caduca en n meses y = la clave caduca en n años Utilice la orden "cambia" primero. Espere, se está reuniendo entropía. Haga alguna otra cosa con el ordenador mientras tanto si eso hace que no se aburra, porque eso mejorará la calidad de la entropía. Posibles accriones para una %s clave: Servidor de claves preferido: Huellas digitales de la clave primaria:Datos privados: ¿Sobreescribir? (s/N) Clave pública: Clave pública desactivada. ¿Salir sin grabar? (s/N) falta el módulo RSA o no es de %d bits falta el primo RSA %s o no es de %d bits falta exponente público o es mayor de %d bits Nombre y apellidos: ¿Crear los certificados de revocación realmente? (s/N) ¿Crear de verdad? (s/N) ¿Borrar realmente esta autofirma? (s/N)¿Borrar realmente la clave primaria? (s/N)¿Borrar realmente todos los identificadores seleccionados? (s/N) ¿Borrar realmente este identificador de usuario? (s/N) ¿Revocar realmente todos los identificadores seleccionados? (s/N) ¿Revocar realmente este identificador de usuario? (s/N) ¿Firmar realmente todos los IDs de usuario? (s/N) ¿Firmar entonces? (s/N) ¿Actualizar realmente las preferencias para los ID seleccionados? (s/N) ¿Actualizar realmente las preferencias? (s/N) Razón para la revocación: %s Repita contraseña Repita contraseña: Repita este PIN: ¿Desea reemplazar la clave existente? (s/N) ¿Desea reemplazar las claves existentes? (s/N) El tamaño requerido es de %u bits El Código de Reinicio es demasiado corto; el tamaño mínimo es %d El Código de Reinicio no está o ya no está disponible Certificado de revocación creado. Certificado de revocación creado. Consérvelo en un medio que pueda esconder; si alguien consigue acceso a este certificado podrá usarlo para inutilizar su clave. Se recomienda imprimir este certificado y guardarlo en otro lugar, por si acaso su soporte resulta imposible de leer. Pero cuidado: ¡el sistema de impresión de su máquina podría almacenar los datos y hacerlos accesibles a otras personas! ¿Grabar cambios? (s/N) Clave secreta disponible. Las partes secretas de la clave primaria no están disponibles. Las partes secretas de la clave primaria se guardan en la tarjeta. Seleccione el algoritmo que utilizará. DSA (alias DSS) es el Algoritmo de Firma Digital y solo puede usarse para firmas. Elgamal es un algoritmo solo para cifrar. RSA sirve tanto para firmar como para cifrar. La primera clave (primaria) debe ser siempre de tipo capaz de firmar.Establecer lista de preferencias a: Sexo ((H)ombre, (M)mujer o espacio): Firma¿Desea firmarlo? (s/N) La firma nunca caduca Firma caducada en %s La firma caduca el %s La firma caduca el %s ¿Firma válida para? (%s) Firmado el %s Firmado el %s usando clave %s ID %s Notación de firma: Política de firmas: FfCcAaSsLa subclave %s ya ha sido revocada. Sintaxis: gpg [opciones] [ficheros] Firma, comprueba, cifra o descifra La operación predeterminada depende de los datos de entrada Sintaxis: gpgv [opciones] [ficheros] Coteja las firmas con claves de confianza conocidas Ahora se reconfigurará la tarjeta para que genere una clave de %u bits El mínimo nivel de confianza para esta clave es: %s El generador de números aleatorios es sólo un apaño para que pueda ejecutarse. ¡No es en absoluto un generador seguro! ¡NO USE DATOS GENERADOS POR ESTE PROGRAMA! La autofirma en "%s" es una firma de tipo PGP 2.x. Esta firma no es válida. Tiene sentido borrarla de su almacén.La firma se marcará como no exportable. La firma se marcará como no revocable. No hay preferencias en un identificador de usuario estilo PGP 2.x ¡Este JPEG es realmente grande (%d bytes)! Esta orden no se permite en modo %s. Esta orden está disponible solo para tarjetas versión 2. ¡Es una clave secreta! ¿Eliminar realmente? (s/N) Esta es una firma que une el identificador de usuario a la clave. No suele ser una buena idea borrar este tipo de firmas. De hecho, GnuPG podría no ser capaz de volver a usar esta clave. Por ello, elimínela tan solo si esta auto-firma no es válida por alguna razón y dispone de una firma alternativa.Esta es una firma válida en esta clave. Normalmente no desea borrar esta firma ya que puede ser importante para establecer una conexión de confianza con la clave o con otra clave certificada por ésta.Esta clave nos pertenece Esta clave está desactivada¡Esta clave ha caducado!Esta clave caducará el %s. Esta clave no está protegida. Esta clave puede ser revocada por %s clave %sEsta clave probablemente pertenece al usuario que se nombra Esta clave fue revocada en %s por %s clave %s No se puede comprobar esta firma porque usted no posee la clave correspondiente. Debería aplazar su eliminación hasta que sepa la clave se utilizó, ya que dicha clave podría establecer una conexión de confianza a través de otra clave ya certificada.Esta firma caducó el %s. Esto será una autofirma. Esto inutilizaría la clave en PGP 2.x. Será revocado por: Para construir la Red-de-Confianza, GnuPG necesita saber qué claves tienen confianza absoluta - normalmente son las claves con las que usted puede acceder a la clave secreta. Conteste "sí" para hacer que esta clave se considere como de total confianza Cantidad total procesada: %lu URL de donde recuperar la clave pública: Sin comprimirClase de firma desconocida `%s' Uso: gpg [opciones] [ficheros] (-h para ayuda)Uso: gpgv [opciones] [ficheros] (-h para ayuda)¿Usar esta clave de todas formas? (s/N) Identificador de usuario "%s" compactado: %s Identificador de usuario "%s" caducado.Identificador de usuario "%s" no autofirmado.Identificador "%s" revocado.Se puede firmar el identificador de usuario "%s".Identificador de usuario "%s": %d firma eliminada Identificador de usuario "%s": %d firmas eliminadas Identificador de usuario "%s": ya está limpio Identificador de usuario "%s": ya está minimizado El identificador de usuario ya no es válidoATENCIÓN: ATENCIÓN: "%s" es una orden desfasada - no utilizar ATENCIÓN: "%s" es una opción desfasada ATENCIÓN: %s sustituye a %s ATENCIÓN: existen 2 ficheros con información confidencial. ATENCIÓN: las claves firmadas+cifradas con Elgamal están desfasadas ATENCIÓN: esta es una clave tipo PGP2. Añadir un revocador designado puede hacer que algunas versiones de PGP rechacen esta clave. ATENCIÓN: esta es una clave de tipo PGP2. Añadir un retrato puede hacer que algunas versiones de PGP rechacen esta clave. ATENCIÓN: ¡El revocador asignado ha revocado esta clave! ATENCIÓN: ¡El propietario ha revocado esta clave! ATENCIÓN: ¡Esta clave no está certificada por una firma de confianza! ATENCIÓN: ¡Esta clave no está certificada con firmas de suficiente confianza! ATENCIÓN: ¡Esta clave ha sido revocada por su propietario! ATENCIÓN: ¡Usando una clave no fiable! ATENCIÓN: ¡Esta clave NO es de confianza! ATENCIÓN: detectada clave débil - cambie la contraseña. ATENCIÓN `%s' es un fichero vacío ATENCIÓN: una firma de identificador de usuario tiene fecha %d segundos en el futuro ATENCIÓN: ¡no podrá deshacer la asignación de una clave como revocador designado! NOTA: el cifrado %s no aparece en las preferencias del receptor ATENCIÓN: el algoritmo de resumen %s está desfasado ATENCIÓN: ¡el mensaje cifrado ha sido manipulado! ATENCIÓN: forzar el algoritmo de compresión %s (%d) va en contra de las preferencias del destinatario ATENCIÓN: forzar el algoritmo de resumen %s (%d) va en contra de las preferencias del destinatario ATENCIÓN: forzar el cifrado simétrico %s (%d) viola las preferencias del destinatario ATENCIÓN: tamaño incorrecto del fichero «random_seed» - no se utilizó ATENCIÓN: la clave %s contiene preferencias para no disponible ATENCIÓN: la clave %s puede estar revocada: recuperando clave de revocación %s ATENCIÓN: la clave %s puede estar revocada: falta clave de revocación %s. ATENCIÓN: el manejador del servidor de claves procede de una versión diferente de GnuPG (%s) ATENCIÓN: las opciones de servidor de claves `%s' no se usan en esta plataforma ATENCIÓN: el mensaje se cifró con una clave débil en el cifrado simétrico. ATENCIÓN: la integridad del mensaje no está protegida ATENCIÓN: se observan varios textos en claro ATENCIÓN: detectadas múltiples firmas. Sólo la primera se comprueba. ATENCIÓN: no se ha marcado como principal ningún identificador de usuario. Esta orden puede causar que se tome como principal otro identificador de usuario distinto. ATENCIÓN: no es una firma separada. ¡El fichero «%s» NO se ha verificado! ATENCIÓN: no se ha exportado nada ATENCIÓN: aún no se han activado en esta ejecución las opciones en `%s' ATENCIÓN: clave de sesión cifrada simétricamente potencialmente insegura ATENCIÓN: ¡el programa podría crear un fichero de volcado de memoria! ATENCIÓN: se indicaron destinatarios (-r) sin clave pública de cifrado ATENCIÓN: la clave secreta %s no tiene una suma de comprobación simple SK ATENCIÓN: conflicto con el resumen de la firma del mensaje ATENCIÓN: la subclave firmante %s tiene un certificado cruzado inválido ATENCIÓN: la subclave firmante %s no tiene certificado cruzado ATENCIÓN: la firma no se marcará como no exportable. ATENCIÓN: la firma no se marcará como no revocable. ATENCIÓN: la clave puede estar revocada (falta clave de revocación) ATENCIÓN: imposible expandir el %% de la url de política . Se usa sin expandir. ATENCIÓN: imposible expandir el %% de la URL de política (demasiado larga). Se usa sin expandir. ATENCIÓN: imposible expandir el %% de la URL del servidor de claves preferido. Se usa sin expandir. ATENCIÓN: imposible obtener URI %s: %s ATENCIÓN: imposible analizar URI %s ATENCIÓN: no se puede renovar la clave %s a través de %s: %s ATENCIÓN: no se puede borrar el directorio temporal `%s': %s ATENCIÓN: no se puede borrar el fichero temporal (%s) `%s': %s ATENCIÓN: titularidad no segura del directorio contenedor del fichero de configuración `%s' ATENCIÓN: titularidad no segura del directorio contenedor de `%s' ATENCIÓN: permisos no seguros del directorio contenedor del fichero de configuración `%s' ATENCIÓN: permisos no seguros del directorio contenedor del directorio personal `%s' ATENCIÓN: titularidad no segura del fichero de configuración `%s' ATENCIÓN: titularidad no segura del directorio personal `%s' ATENCIÓN: permisos no seguros sobre el fichero de configuración `%s' ATENCIÓN: permisos no seguros sobre el directorio personal `%s' ATENCIÓN: usando algoritmo %s de cifrado experimental ATENCIÓN: usando algoritmo %s de resumen experimental ATENCIÓN: usando un algoritmo experimental %s de clave pública ATENCIÓN: ¡se está usando memoria no segura! ATENCIÓN: ¡está usando un generador de números aleatorios no seguro! Es necesario generar muchos bytes aleatorios. Es una buena idea realizar alguna otra tarea (trabajar en otra ventana/consola, mover el ratón, usar la red y los discos) durante la generación de números primos. Esto da al generador de números aleatorios mayor oportunidad de recoger suficiente entropía. ¿De qué tamaño desea la clave de Autenticación? (%u) ¿De qué tamaño desea la clave de Cifrado? (%u) ¿De qué tamaño desea la clave de Firmado? (%u) ¿De qué tamaño quiere la clave? (%u) ¿De qué tamaño quiere la clave? (%u) Cuando firme un identificador de usuario en una clave, debería verificar que la clave pertenece a la persona que se nombra en el identificador de usuario. Es útil para otros saber cómo de cuidadosamente lo ha verificado. "0" significa que no hace ninguna declaración concreta sobre como ha comprobado la validez de la clave. "1" significa que cree que la clave pertenece a la persona que declara poseerla pero usted no pudo o no verificó la clave en absoluto. Esto es útil para una verificación "en persona" cuando firmas la clave de un usuario pseudo-anónimo. "2" significa que hizo una comprobación informal de la clave. Por ejemplo podría querer decir que comprobó la huella digital de la clave y comprobó el identificador de usuario en la clave con un ID fotográfico. "3" significa que hizo una comprobación exhaustiva de la clave. Por ejemplo, esto puede referirse a que verificó la huella digital de la clave con el propietario de la clave, y que comprobó, mediante un documento difícil de falsificar con una identificación fotográfica(como un pasaporte) que el nombre del poseedor de la clave coincide con el identificador de usuario en la clave y que verificó finalmente (intercambiando la dirección) que la dirección de correo electrónico en la clave pertenece al poseedor de la clave. Observe que los ejemplos dados en los niveles 2 y 3 son *solo* ejemplos. En definitiva, usted decide lo que significa "informal" y "exhaustivo" para usted cuando firma las claves de otros. Si no sabe qué contestar, conteste "0".Va a revocar las siguientes firmas: Está usando el juego de caracteres `%s'. No puede cambiar la fecha de caducidad de una clave v3 ¡No puede borrar el último identificador de usuario! No ha especificado un identificador de usuario (puede usar "-r") No ha especificado contraseña. ¡Es posible que sea una *mala* idea! No ha especificado contraseña. Esto es probablemente una *mala* idea. Si más tarde quiere añadir una, puede hacerlo usando este programa con la opción "--edit-key". Ha firmado estos IDs de usuario con la clave %s: No puede añadir un revocador designado a una clave tipo PGP2. No puede añadir un ID fotográfico a una clave tipo PGP2. No puede crear una firma OpenPGP de una clave PGP 2.x estando en modo --pgp2. Puede intentar recrear la base de datos de confianza usando las órdenes: Debe seleccionar por lo menos una clave. Debe seleccionar por lo menos un identificador de usuario. Debe seleccionar exactamente una clave. Necesita una contraseña para proteger su clave secreta. Necesita una contraseña para desbloquear la clave secreta del usuario: "%s" Necesita una contraseña para desbloquear la clave secreta del usuario: "%.*s" %u bits, clave %s, ID %s, creada el %s%s Ha seleccionado este identificador de usuario: "%s" Debería especificar un motivo para la certificación. Elija una opción de esta lista según sea el caso: "La clave se ha comprometido" Use esto si tiene razones para pensar que personas no autorizadas tuvieron acceso a su clave secreta. "La clave se ha sustituido" Use esto si ha reemplazado la clave por otra más nueva. "La clave ya no se utiliza" Use esto si ha dejado de usar esta clave. "La identificación de usuario ya no es válida" Use esto para señalar que la identificación de usuario no debería seguir utilizándose; esto se emplea normalmente para marcar una dirección de correo electrónico como inválida. Su firma actual en "%s" ha caducado. Su firma actual en "%s" es una firma local. ¿Su decisión? ¿Su elección?¿Qué elige? (escriba '?' si desea más información): Su sistema no puede mostrar fechas más allá del 2038. Sin embargo funcionará correctamente hasta el 2106. [ total ][no definida][ caducada ][ revocada ][desconocida][Identificador de usuario no encontrado][nombre_fichero][ dudosa ][no establecido][revocación][autofirma][ absoluta ][incierto]`%s' ya está comprimido `%s' no es un fichero JPEG `%s' no es un fichero regular - omitido `%s' no es un juego de caracteres válido '%s' no es un identificador largo de clave válido `%s' no es una fecha de caducación de firma válida a punto de exportar una subclave desprotegida el acceso a las órdenes de administrador no está configurado la acción `%s' no es posible con este esquema de servidor de claves `%s' añadir clave a tarjetaañadir un retratoañadir una clave de revocaciónañadir una subclaveañadir un identificador de usuarioopción ambigua `%s' destinatario anónimo; probando clave secreta %s ... cabecera de armadura: armadura: %s suponiendo %s datos cifrados asumiendo firma incorrecta de la clave %s por un bit imprescindible desconocido asumiendo que hay datos firmados en `%s' recuperar automáticamente claves al verificar firmas`%s' recuperado automáticamente vía %s MPI incorrectoURI incorrectocertificado incorrectoclave incorrectacontraseña incorrectaclave pública incorrectaclave secreta incorrectafirma incorrectaalgo más discretobinariaconstrucción del paquete fallida: %s cCmemorizando almacén `%s' no se puede acceder a %s - ¿tarjeta OpenPGP inválida? no se puede acceder a `%s': %s no se puede cerrar `%s': %s no se puede conectar con `%s': %s no se puede crear %s: %s no se puede crear fichero de respaldo `%s': %s no se puede crear el directorio `%s': %s no se puede crear el bloqueo para `%s' no se pueden desactivar los volcados de memoria: %s imposible hacer esto en modo de proceso por lotes imposible hacer esto en modo de proceso por lotes sin "--yes" no se puede generar un primo con pbits=%u qbits=%u no se puede generar un primo con menos de %d bits no puedo manejar el algoritmo de clave pública %d no se pueden manejar líneas de texto de más de %d caracteres no se puede trabajar con firmas múltiples no se puede bloquear `%s' no se puede bloquear `%s': %s no se puede abrir `%s' no se puede abrir `%s': %s imposible abrir datos firmados `%s' no se puede abrir el almacén de clavesimposible pedir contraseña en modo de proceso por lotes no se puede leer `%s': %s no se puede obtener información de `%s': %s no puede usar un paquete ESK simétrico debido al modo S2K no se puede escribir `%s': %s canceladocancelado por el usuario cancelar|Cancelarno se puede elegir una clave tipo PGP 2.x como revocador designado ¡imposible evitar clave débil para cifrado simétrico después de %d intentos! la tarjeta no admite el algoritmo %s de resumen ¡la tarjeta se ha bloqueado permanentemente! lector de tarjeta no disponible num. tarjeta: cambiar URL de donde obtener la clavecambiar huella digital de una CAcambia el PIN de la tarjetacambia el nombre del titular de la tarjetacambiar sexo del titular de la tarjetacambia datos en la tarjetacambiar la fecha de caducidad para la clave o subclaves seleccionadascambiar preferencias de idiomacambiar el nombre de usuariocambiar confianza en el propietariocambiar la contraseñacomprueba firmasla comprobación de la firma creada falló: %s comprobando base de datos de confianza error en la suma de comprobaciónalgoritmo de cifrado %d%s desconocido o desactivado falta una comacompactar IDs inutilizables y borrar todas las firmas de la clavecompactar IDs inutilizables y borrar firmas inutilizables de la clavecompletes-needed debe ser mayor que 0 órdenes conflictivas no se puede interpretar la URL del servidor de claves crear una clave pública al importar una clave secretacrear una salida ascii con armaduracreado: %sfalta marca de tiempo de creación datos no grabados; use la opción "--output" para grabarlos eliminación de armadura fallida: %s descifra datos (predeterminado)descifrado fallido: %s descifrado correcto borrar clave secundariaeliminar identificadores de usuario seleccionadoseliminar firmas de los identificadores de usuario seleccionadosfallo borrando el bloque de claves: %s nivel: %d validez: %3d firmada: %3d confianza: %d-, %dq, %dn, %dm, %df, %du directorio `%s' creado desactivar clavedesactivadomostrar foto IDs al listar clavesmostrar foto IDs al verificar firmasno eliminar los valores de confianza en el propietario al importarno borrar ficheros temporales tras usarlosno realizar ningún cambiono actualizar la base de datos de confianza tras importaraumentar la confianza en las firmas con datos PKA válidoshabilitar clavecreación de armadura fallida: %s cifra datoscifrado con %lu frases contraseña cifrado con clave %s, ID %s cifrado con clave %2$s de %1$u bits, ID %3$s, creada el %4$s cifrado con 1 contraseña cifrado con algoritmo desconocido %d cifrar un mensaje en modo --pgp2 requiere el algoritmo IDEA cifra solo con un cifrado simétricoerror reservando memoria suficiente: %s error al cambiar el tamaño de la clave de %d a %u bits: %s error creando `%s': %s error creando el almacén `%s': %s error creando contraseña: %s error econtrando registro de confianza en `%s': %s error obteniendo la información de la clave actual: %s error obteniendo el nuevo PIN: %s error en `%s': %s error en la línea de cierre error leyendo `%s': %s error leyendo datos de la aplicación error leyendo huella digital DO error leyendo bloque de claves: %s error leyendo bloque de clave secreta "%s": %s error recuperando el estatus CHV de la tarjeta error escribiendo `%s': %s error escribiendo la clave en la tarjeta: %s error escribiendo en el almacén `%s': %s error escribiendo almacén público `%s': %s error escribiendo almacén privado `%s': %s se reemplazará la clave existente caducadacaducó: %scaduca: %sexporta el atributo de los identificadores de usuario (normalmente retratos)exporta clavesexporta claves a un servidor de clavesexporta claves de revocación que están marcadas como «sensibles»exporta firmas que están marcadas como solo localesno se permite exportar claves secretas no se pueden realizar llamadas a un servidor externo de claves tal y como está compilado el programa llamadas a programas externos desactivadas debido a permisos no seguros sobre ficheros. fallida la inicialización de la base de datos de confianza: %s fallo al reconstruir la caché del almacén de claves: %s fallo guardando la fecha de creación: %s fallo al almacenar la huella digital: %s fallo al almacenar la clave: %s fallo al desproteger la subclave: %s fallo al usar el PIN predeterminado %s: %s - en adelante desactivado mujerrecuperar la clave especificada en la URL de la tarjetaerror al cerrar ficheroerror al crear ficheroerror al borrar ficheroel fichero ya existeerror al abrir ficheroerror de lecturaerror al renombrar ficheroerror de escriturala huella digital en la tarjeta no coincide con la solicitada marcar identificador de usuario seleccionado como primarioforzadoforzar el cifrado simétrico %s (%d) viola las preferencias del destinatario fstat de `%s' falló en %s: %s fstat(%d) falló en %s: %s totalerror generalgenerar mensajes compatibles con PGP 2.xgenera un nuevo par de clavesgenera un certificado de revocacióngenerar nuevas clavesla generación de la clave falló generando nueva clave generando la suma de comprobación de 16 bits (desfasada) para proteger la clave secreta. el agente gpg no esta disponible en esta sesión el programa no permite usar el protocolo agente gpg versión %d gpg/tarjeta> usar el registro PKA presente en una clave al recuperar clavesIntroduzca la URL de su servidor de claves preferido: iImMqQsSimporta claves desde un servidor de clavesimportar firmas marcadas como solo localesimporta/fusiona clavesno se permite importar claves secretas incluir claves revocadas en resultados de la búsquedaincluir subclaves al buscar por identificador de clavela línea %u es demasiado larga o no tiene avance de línea (LF) línea introducida de longitud superior a %d caracteres Armadura inválidamodo S2K incorrecto; debe ser 0, 1 o 3 argumento inválidoarmadura inválidacabecera de armadura inválida: armadura incorrecta: línea mayor de %d caracteres lista inválida de auto-localización de claves cabecera de firma clara inválida línea con guiones inválida: preferencias predeterminadas inválidas default-cert-level inválido; debe ser 0, 1, 2 o 3 opciones de exportación inválidas huella digital inválidaalgoritmo de resumen de cifrado inválido `%s' opciones de importación inválidas caracter inválido `%s' en cadena de preferencias almacén inválidoopciones del servidor de claves inválidas protocolo del servidor de claves inválido (us %d!=handler %d) lista de opciones inválida min-cert-level inválido; debe ser 0, 1, 2 o 3 paquete inválidocontraseña incorrectapreferencias personales de cifrado inválidas preferencias personales de compresión inválidas preferencias personales de algoritmo de resumen inválidas omitido carácter radix64 inválido %02X paquete raíz inválido detectado en proc_tree() estructura de la tarjeta OpenPGP inválida (DO 0x93) valor inválido opciones de verificación inválidas se recomienda encarecidamente que actualice sus preferencias y clave "%s" no encontrada en el servidor clave "%s" no encontrada: %s clave %s: sin identificador de usuario clave %s marcada como de confianza absoluta la clave %s aparece más de una vez en la base de datos de confianza la clave %s se creó %lu segundo en el futuro (viaje en el tiempo o problemas con el reloj) la clave %s se creó %lu segundos en el futuro (salto en el tiempo o problemas con el reloj) clave %s: "%s" %d firmas nuevas clave %s: "%s" %d subclaves nuevas clave %s: "%s" %d nuevos identificadores de usuario clave %s: "%s" %d firma limpiada clave %s: "%s" %d firmas limpiadas clave %s: "%s" limpiado %d nuevo identificador de usuario clave %s: "%s" limpiados %d nuevos identificadores de usuario clave %s: "%s" 1 firma nueva clave %s: "%s" 1 subclave nueva clave %s: "%s" 1 nuevo identificador de usuario clave %s: "%s" sin cambios clave %s: "%s" certificado de revocación añadido clave %s: "%s" certificado de revocación importado clave %s: %s clave %s: clave estilo PGP 2.x - omitida clave %s: reparada la subclave PKS corrupta clave %s: aceptada como clave fiable clave %s: aceptado identificador de usuario "%s" sin auto-firma clave %s: ya estaba en el almacén secreto clave %s: no se puede localizar el bloque de claves original: %s clave %s: no se puede leer el bloque de claves original: %s clave %s: firma directa de clave añadida clave %s: no coincide con nuestra copia clave %s: detectado identificador de usuario duplicado - fusionado clave %s: firma directa de clave inválida clave %s: certificado de revocación inválido: %s - rechazado clave %s: certificado de revocación no valido: %s - omitido clave %s: autofirma inválida para el identificador de usuario "%s" clave %s: unión de subclave inválida clave %s: revocación de subclave inválida clave %s: material de la clave ya en la tarjeta - omitida clave %s: clave nueva - omitida clave %s: no es una clave pública - imposible emplear el certificado de revocación clave %s: clave fiable sin clave pública - omitida clave %s: no hay subclave que unir a la clave clave %s: no hay subclave para la revocación de clave clave %s: no hay subclave para firma de subclave de enlace clave %s: no hay subclave para la firma de revocación de subclave clave %s: sin identificador de usuario clave %s: no hay identificador de usuario para la firma clave %s: sin identificadores de usuario válidos clave %s: firma no exportable (clase 0x%02x) - omitida clave %s: no protegida - omitida clave %s: clave pública "%s" importada clave %s: clave pública no encontrada: %s clave %s: eliminado el enlace de subclave múltiple clave %s: eliminada múltiple revocación de subclave clave %s: certificado de revocación en lugar equivocado - omitido clave %s: clave secreta importada clave %s: clave secreta no encontrada: %s clave %s: clave secreta con cifrado inválido %d - omitida clave %s: clave secreta sin clave pública - omitida clave %s: subclave omitida clave %s: omitido identificador de usuario "%s" clave %s: firma de subclave en lugar equivocado - omitida clave %s: firma de clase (0x%02x) inesperada - omitida clave %s: algoritmo de clave pública no admitido clave %s: algoritmo de clave pública no admitido para el identificador de usuario "%s" la clave ya existe exportación de clave fallida: %s generación de clave completada (%d segundos) clave pública creada %lu segundos en el futuro (salto en el tiempo o problemas con el reloj) clave pública creada %lu segundos en el futuro (salto en el tiempo o problemas con el reloj) clave no marcada como no segura - no puede usarse con el pseudo RNG clave no encontrada en el servidor la operación con la clave no es posible: %s recurso de bloque de clave `%s': %s almacén `%s' creado error de comunicación con el servidor de claves: %s el servidor de claves no envió VERSION error del servidor de claveserror interno del servidor de claves recepción del servidor de claves fallida: %s actualización al servidor de claves fallida: %s búsqueda en el servidor de claves fallida: %s envío al servidor de claves fallido: %s agotado el tiempo de espera para el servidor de claves tamaño de clave incorrecto; se usarán %u bits tamaño de clave redondeado a %u bits línea demasiado largalistar todos los datos disponibleslista y comprueba firmas de las claveslista clave e identificadores de usuariolista claveslista claves y huellas digitaleslista claves y firmasmostrar preferencias (experto)mostrar preferencias (detallado)lista claves secretascrea una firma separadahacer que los conflictos de marca de tiempo sean sólo un avisomake_keysig_packet falló: %s hombresuma de comprobación CRC mal creada variable de entorno GPG_AGENT_INFO malformada identificador de usuario mal formadodudosamarginals-needed debe ser mayor que 1 max-cert-depth debe estar en el rango de 1 a 255 menú para cambiar o desbloquear el PINmover una clave de respaldo a la tarjetamover una clave a la tarjetamoviendo la firma de la clave al lugar correcto nNfirmas en texto claro anidadas error de rednuncanunca creado un nuevo fichero de configuración `%s' siguiente comprobación de base de datos de confianza el: %s nono se encontró el signo = en la definición de grupo `%s' no hay tarjetano existe la clave pública correspondiente: %s no hay datosningún almacén secreto de claves predeterminado: %s no se ha detectado módulo acumulador de entropía no hay un manejador para ese esquema de servidor de claves `%s' ¡no se solicita ninguna acción al servidor de claves! no hay servidores de claves conocidos (use opción --keyserver) no es necesaria una comprobación de la base de datos de confianza no es necesaria una comprobación de la base de datos de confianza con el modelo de confianza `%s' no es necesario comprobar la base de datos de confianza con el modelo `%s' no se ha establecido un visor de fotos no es posible ejecutar programas remotos no se encuetran claves de revocación para "%s" no hay clave secreta no hay subclave secreta para la subclave pública %s - omitida ninguna firma encontrada no hay datos firmados no existe el identificador de usuariono se encontraron claves absolutamente fiables no se han encontrado datos OpenPGP válidos no hay direcciones válidas almacén editable no encontrado: %s almacén público de claves no escribible encontrado: %s almacén privado de claves no escribible encontrado: %s no es una firma separada no es una tarjeta OpenPGPno cifradono forzadono procesadono disponiblenota: el fichero «random_seed» está vacío nota: no se ha actualizado el fichero «random_seed» vVde acuerdo, somos el destinatario anónimo. vale|Valela antigua codificación de la DEK no puede usarse firma al viejo estilo (PGP 2.x) aceptar solo actualizaciones de claves ya existentesoperación imposible sin inicializar la memoria segura fichero de opciones `%s': %s nombre fichero original='%.*s' eliminada información de la confianza en propietarios falta el valor de confianza en el propietariocontraseña generada con algoritmo de resumen desconocido %d contraseña repetida incorrectamente; inténtelo de nuevohaga un --check-trustdb introduzca una dirección de correo electrónico (opcional pero muy recomendable)vea %s para más información para más información vea http://www.gnupg.org/documentation/faqs.html use "%s%s" en su lugar espere mientras se genera la clave ... preferencia `%s' duplicada fin de fichero prematuro (en suma de comprobación CRC) fin de fichero prematuro (en el cierre) fin de fichero prematuro (falta suma de comprobación CRC) escribe el estado de la tarjetaproblema trabajando con un paquete cifrado problema con el agente - desactivando el uso del agente preguntar antes de sobreescribirno se admite el algoritmo de protección %d%s no se admite el resumen protector %d claves pública y secreta creadas y firmadas. la clave pública %s es %lu segundos más nueva que la firma la clave pública %s es %lu segundos más nueva que la firma clave pública %s no encontrada: %s descifrado de la clave pública fallido: %s ¡la clave pública y la secreta no se corresponden! datos cifrados con la clave pública: DEK correcta la clave pública es %s clave pública no encontradaclave pública de la clave absolutamente fiable %s no encontrada fFfinsalir de este menúcarácter entrecomillado imprimible en la armadura - probablemente se utilizó un MTA defectuoso vuelva a distribuir esta clave para evitar problemas potenciales de diferencias entre algoritmos. error de lectura `%s': %s leyendo desde `%s' leyendo opciones desde `%s' falló la lectura de la clave: %s leyendo stdin... razón para la revocación: renovando %d claves desde %s renovando 1 clave de %s rechazada por el filtro de importacióneliminar tanto como sea posible de la clave tras importarborra tanto como sea posible de la clave al exportarelimina claves del almacén públicoelimina claves del almacén privadoelimina la contraseña de las subclaves exportadaseliminar partes inútiles de la clave tras importarelimina las partes sin usar de la clave durante la exportaciónrenombrando `%s' en `%s' fallo: %s reparar daño del servidor de claves públicas al importarsolicitando clave %s de %s solicitando clave %s de %s servidor %s límite de recursola respuesta no incluye el módulo RSA la respuesta no incluye el exponente público RSA la respuesta no incluye la clave pública comentario a la revocación: revocar clave o subclaves seleccionadasrevocar los identificadores de usuario seleccionadosrevocar firmas de los identificadores de usuario seleccionadosrevocadarevocada por la clave %s el %s revocada: %sredondeados a %u bits guarda y salebusca claves en un servidor de clavesbuscando "%s" de %s buscando "%s" de %s servidor %s buscando nombres desde %s buscando nombres desde %s servidor %s clave secreta "%s" no encontrada: %s clave secreta %s: %s clave secreta ya almacenada en una tarjeta clave secreta no disponiblelas partes de la clave privada no están disponibles las partes secretas de la clave no están disponibles selecciona subclave Nselecciona identificador de usuario Nel algoritmo de certificación por resumen elegido es inválido el algoritmo de cifrado seleccionado es inválido el algoritmo de compresión seleccionado es inválido el algoritmo de resumen seleccionado no inválido fallo al elegir openpgp: %s enviando clave %s a %s enviando clave %s a %s servidor %s establecer notación para los identificadores de usuario seleccionadosestablecer preferencias para los identificadores de usuario seleccionadosestablecer URL del servidor de claves preferido para los identificadores de usuario seleccionadosmostrar notaciones estándar IETF al listar firmasmostrar notaciones estándar IETF al verificar firmasver órdenes de administradormostrar todas las notaciones al listar firmasmostrar todas las notaciones al verificar firmasmostrar fechas de caducidad al listar firmasmuestra huella digital de la clavemostrar solo la ID principal del usuario al verificar firmasmostrar URLs de directrices al listar firmasmostrar URLs de directrices al verificar firmasmostrar URLs del servidor de claves favorito al listar firmasmostrar URLs del servidor de claves favorito al verificar firmasmostrar subclaves revocadas y caducadas al listar clavesmostrar IDs de usuario revocados y caducados al listar clavesmostrar IDs de usuario revocados y caducados al verificar firmasmostrar retratos seleccionadosmostrar nombre del almacén al listar clavesmostrar esta ayudamostrar validez del identificador de usuario al listar clavesmostrar validez del identificador de usuario al verificar firmasmostrar notaciones personalizadas al listar firmasmostrar notaciones personalizadas al verificar firmasfirma una clavefirma localmente una clavefirma o modifica una clavefirmar identificadores de usuario seleccionados [* ver órdenes relacionadas más abajo]firma localmente los identificadores de usuario seleccionadosfirmar con una firma no revocable los identificadores de usuario seleccionadosfirmar con una firma de confianza los identificadores de usuario seleccionadossuprimida la verificación de la firma firmas creadas hasta ahora: %lu firmada con su clave %s el %s%s%s firma fallida: %s ATENCIÓN: la subclave de firmado %s no tiene certificado cruzado firmando:omitido "%s": %s "%s" omitido: duplicado omitida: clave pública ya establecida omitida: clave pública ya designada como destinataria por defecto omitido: clave secreta ya presente omitiendo bloque de tipo %d omitiendo autofirma V3 para el id "%s" revocación independiente - use "gpg --import" para aplicarla firma independiente de clase 0x%02x almacenado de clave en la tarjeta fallido: %s la subclave %s no firma y así no necesita ser certificada en cruz el subpaquete de tipo %d tiene el bit crítico activado el cifrado simétrico de `%s' falló: %s error del sistema llamando al programa externo: %s tomar las claves de este almacénmodo textola URL de política de certificación suministrada no es válida la URL del servidor de claves preferido suministrada no es válida la URL de política de firmas suministrada no es válida la firma no se pudo verificar. Recuerde que el fichero de firma (.sig o .asc) debería ser el primero que se da en la línea de órdenes. ¡hay una clave secreta para esta clave pública! "%s"! ¡esta es una clave ElGamal generada por PGP que NO es segura para firmar!esta clave ya ha sido designada como revocadora esto puede ser debido a la ausencia de auto-firma este mensaje podría no ser utilizable por %s esta plataforma necesita ficheros temporales para llamar a programas externos conflicto con la marca de tiempocambiar entre las listas de claves secretas y públicascambiar estado de la opción forzar firma del PINdemasiadas preferencias de cifrado demasiadas preferencias de compresión demasiadas preferencias de resumen demasiados registros en la cache pk - anulada error en la base de datos de confianzael registro de confianza %lu no es del tipo solicitado %d registro de confianza %lu, tipo solicitado %d: fallo lectura: %s registro de confianza %lu, tipo %d: fallo escritura: %s confianza: %sregistro base de datos de confianza %lu: lseek fallido: %s registro base de datos de confianza %lu: escritura fallida (n=%d): %s transacción en la base de datos de confianza demasiado grande base de datos de confianza: fallo lseek: %s base de datos de confianza: lectura fallida (n=%d): %s base de datos de confianza: sincronización fallida: %s nivel de confianza puesto a TOTAL (información PKA válida) nivel de confianza puesto a NUNCA (información PKA inválida) absoluta¡imposible mostrar el retrato! no se puede ejecutar el programa externo no se puede ejecutar el programa `%s': %s no se puede ejecutar el intérprete de órdenes `%s': %s Imposible abrir fichero JPEG `%s': %s no se puede leer la respuesta del programa externo: %s imposible establecer %s como ruta de ejecución no se puede actualizar el registro de la versión de la base de datos de confianza: fallo de escritura: %s no se puede usar el algoritmo IDEA para todas las claves a las que cifra. imposible usar modelo de confianza (%d) - asumiendo el modelo %s desbloquear PIN usando Código de Reiniciosin_comprimir|ningunono definidoarmadura inesperada: datos inesperadosalgoritmo de cifrado no implementadoalgoritmo de clave pública no implementadodesconocidocabecera de armadura desconocida: algoritmo de cifrado desconocidoalgoritmo de compresión desconocidoartículo de configuración desconocido `%s' desconocido el destinatario predefinido "%s" algoritmo desconocido de resumen de mensajealgoritmo de protección de clave desconocido opción desconocida `%s' tipo de paquete desconocidoalgoritmo de protección desconocido algoritmo de clave pública desconocidoclase de firma desconocidaversión desconocidael programa externo finalizó anormalmente no especificadoURI no admitidoalgoritmo de clave pública no utilizableclave pública inutilizableclave secreta inutilizableactualiza todas las claves desde un servidor de clavesactualización fallida: %s actualización de la clave secreta fallida: %s actualiza la base de datos de confianzauso: %suso: gpg [opciones] usa como fichero de salidausa modo de texto canónicouse antes la opción "--delete-secret-key" para borrarla. usar estilo OpenPGP estrictousar ficheros temporales para pasar datos a los ayudantes delservidor de clavesusa este usuario para firmar o descifraridentificador de usuario "%s" ya ha sido revocado identificador de usuario: "%s" usando %s como modelo de confianza usando cifrado %s usando PIN predeterminado %s usando subclave %s en vez de la clave primaria %s validar firmas con datos PKAvalidez: %sdetallaractualmente se prohíbe verificar el PIN de Administrador con esta orden la verificación CHV%d falló: %s verifica una firmaverificar PIN y listar todos los datosesperando que se bloquee `%s'... clave débilcreada clave débil - reintentando tamaño anormal para una clave de sesión cifrada (%d) no se ejecutará con memoria no segura debido a %s escribiendo firma directa escribiendo la firma de comprobación de clave escribiendo nueva clave escribiendo clave pública en `%s' escribiendo apuntador de la clave privada en `%s' escribiendo clave privada en `%s' escribiendo autofirma escribiendo en `%s' escribiendo en stdout clave secreta incorrectasSsísólo puede firmar en claro con claves PGP 2.x estando en modo --pgp2 sólo puede hacer firmas separadas con claves tipo PGP 2.x estando enmodo --pgp2 solo puede cifrar con claves RSA de 2048 bits o menos en modo --pgp2 solo puede hacer firmas separadas o en claro en modo --pgp2 puede actualizar sus preferencias con: gpg --edit-key %s updpref save no puede firmar y cifrar a la vez en modo --pgp2 no puede elegir una clave como su propio revocador designado no puede usar --symetric --encrypt en modo %s no puede usar --symetric --encrypt con --s2k-mode 0 no puede usar --symmetric --sign --encrypt en modo %s no puede usar --symetric --sign --encrypt con --s2k-mode 0 ha encontrado un error... (%s:%d) no puede usar %s en modo %s no puede usar el cifrado `%s' en modo %s no puede usar la compresión `%s' en modo %s no puede usar el resumen `%s' en modo %s debe usar ficheros (y no tuberías) si trabaja con --pgp2 activo. |AN|Nuevo PIN Administrador|A|Introduzca el PIN de Administrador|A|Introduzca el PIN de Administrador%%0A[intentos restantes: %d]|DF|escribe la información de estado en este descriptor de fichero|NOMBRE|cifrado para NOMBRE|N|Nuevo PIN|N|establece nivel N de compresión (0 no comprime)|RN|Nuevo Código de Reinicio|[file]|crea una firma en texto claro|[file]|crea una firma|algo [files]|imprime resúmenes de mensajeIntroduzca el PINIntroduzca el PIN%%0A[firmas hechas: %lu]||Introduzca el Código de Reinicio para la tarjetagnupg-1.4.20/po/en@boldquot.header0000644000175000017500000000247112516175025013713 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # gnupg-1.4.20/po/pt.gmo0000644000175000017500000017523112635457221011424 000000000000006|#P/-Q//0090V0s000D0.1I>1111112+2G2`2$}2&2,223&3C3U3o33(3.333+434F4b4u444444"5%%5&K5!r5%5"5#5'6 )6J6g6|6666(6$7%7:7#N7r777,74718H8]8{88'88899+9>9"U9x99-9(909H/: x: ; ;A;/;0<\?<<-<0<.=?=Z=3s=4=-= >.>> > ?:?O?m?#?&?&??@*@?@@H@>@=@AA)A;A NA/oAApBHB-B C C8C#XC|C"CCE?DD;EWE F)FDF$cFFFjGGGGGGGH%H@HHH H<H:I"UI,xI,I2IJ !J(BJ kJ J*JJJJKK/K"JKmKKKEKoL rL L8L'LcM/yMEM,M#N)@NjNMO'TP|PPP P1P(PQ1QEQcQ/}QQQjQ@R9ROS5WS.SSTUUU!UUV W-,WZW*X*GXrXX%XX7XYrY1Z=CZIZ4Z[#[=C[[?[1[5\HI\-\H\ ]<$])a]C].]F] E^2f^^h_*e&.e1Ue#e2e>ef=f0 gM>g"g&g3g% hD0h5ujjj_j ,k 7kDk Ukak%zkkkk kk l l(lFlNlVlflnl}ll lllllm%&m2Lmmmmmmm5n9nOn;bn<nnn&o.oDo-So(ooo1op%p{ X{ f{ t{ {#{&{){|<7|t|||,|;|M.}|}}}"}-}~+2~*^~!~$~~~~~I~FYt## "0P#i3%Ҁ% -8K"^ 5$45%j*.*+/҃%((;d-y/,ׄ")'Qp ƅI/?^}ʆކ/I] qه6#Q u-׈>ZvȉDˉFEWDA7$\$yF $#Bf#VD?֎" 0)Q{'B8@<}! ܐ ; Z{*ё# "=`s&.Ӓ3?6v~ ד."J&m,.+#+@(l"#(ܕ/5(Nw//&%)O&m&;91P#m(Ș#%;Un-֙/ -=8kC,  !:.+i6n̜;?S=Bѝ$!98[7/̞6ԟ  =-k &(Ӡ,)B] s2~58 A^v#.K2 =O8h 6Ȥ@̥N{ʦ  ǧ1+5Ni7ɩ  CѪ60@g50ޫ)&9(`. :ì":)U&"ĭ"N5).D"s4t˯3@Bt47.$SF/W!ֳ4-Ia$z8 y$@@E6Ƕ)(9 %@Ts/ ߺ-5-T#:x{q.EZb14&$IK F,F*Iq8J?=V/H6 _D$: *0;11AcHDGIA+8></l8) blwt  '):2d%! %"B es ;X%s3? $&?#fB"<=Lz,)&P:c&: 5"Vy% & ;4!p$% &()O2y2*6+Q}.J> !L-3M(2)&'Na s1/#5%U{).,1.^RSGD.*-I)Z!#-.&\&4$ -7Bz)~/?/'G'o9EE/u  +)(1&Z:!#>@^R%#$<"a8,.'5-]R"8N&d& &.(Kt?//1CUr$ +B+Dp:,20Du03?0s*"1 <<6y5>5%-[65-N$s*+&$"(K'j!'<<y)'?/>o,  ( 73 k+##4LeBhCCD38x8"1 J?B2. F1gJjo1Czy/ 4-Cc "mxY0g+/7( 66aP4B\O!'2i$>g?"d]Tjpo#F~=c<b>#YUHM2.I)#rtP+EU& XN hQ9}G] y n, 5 r+q3&t[$||)9p<*M@%O 'lQ08Fa%X6;$m-2[vi!SK*8Z4&?(eH,^5h*DBlA^V;{ :A'7qDJ.Z`!\G b{RRS`Wkks5=3. w}N/zf(%1-n_0" L3Wv_ udf)V~wxTe LIu,sE1 K@: Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu %d bad signatures %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s encrypted data %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s Certificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Repeat passphrase Repeat passphrase: Requested keysize is %u bits Secret key is available. Secret parts of primary key are not available. Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu Usage: gpg [options] [files] (-h for help)User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietcan't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't disable core dumps: %s can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverfailed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornew configuration file `%s' created next trustdb check due at %s nono default secret keyring: %s no entropy gathering module detected no need for a trustdb check no secret key no signed data no such user idno valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set the given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown pubkey algorithmunknown signature classunknown versionunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:25+0200 Last-Translator: Pedro Morais Language-Team: pt Language: pt MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Insira o identificador do utilizador. Termine com uma linha vazia: No h bytes aleatrios suficientes. Por favor, faa outro trabalho para que o sistema possa recolher mais entropia! (So necessrios mais %d bytes) Algoritmos suportados: importados: %lu no modificados: %lu novas subchaves: %lu novos IDs de utilizadores: %lu no importadas: %lu sem IDs de utilizadores: %lu No se tem certeza de que a assinatura pertence ao dono. A assinatura provavelmente uma FALSIFICAO. No h indicao de que a assinatura pertence ao dono. novas assinaturas: %lu Impresso da subchave: chaves secretas lidas: %lu ignorei novas chaves: %lu Impresso da subchave: (%d) DSA (apenas assinatura) (%d) RSA (apenas cifragem) (%d) RSA (apenas assinatura) (0) No vou responder.%s (1) No verifiquei.%s (2) Verifiquei por alto.%s (3) Verifiquei com bastante cuidado.%s novas revogaes de chaves: %lu No foi possvel assinar. chaves secretas importadas: %lu (no-exportvel)Impresso da chave primria: chaves secretas no modificadas: %lu %d assinaturas incorrectas %d assinaturas no verificadas devido a erros %d assinaturas no verificadas por falta de chaves %d IDs de utilizadores sem auto-assinaturas vlidas detectados %s ... dados cifrados com %s ser utilizada a cifragem %s %s o novo %s o no modificado %s no faz sentido com %s! %s no permitido com %s! %s. %s/%s cifrado para: "%s" %s: diretoria inexistente! %s: erro ao ler registo livre: %s %s: erro ao ler registo de verso: %s %s: erro a actualizar registo de verso: %s %s: erro ao escrever registo de diretrio: %s %s: erro ao escrever registo de verso: %s %s: falha ao anexar um registo: %s %s: falha ao criar tabela de disperso: %s %s: falha ao criar registo de verso: %s%s: falha ao zerar um registo: %s %s: verso de ficheiro invlida %d %s: base de dados de confiana invlida %s: base de dados de confiana invlida criada %s: porta-chaves criado %s: no um base de dados de confiana %s: ignorado: %s %s: ignorado: a chave pblica j est presente %s: ignorado: a chave pblica est desactivada %s: base de dados de confiana criada %s: sufixo desconhecido %s: registo de verso com recnum %lu %s:%d: opo depreciada "%s" %s:%d: opes de exportao invlidas %s:%d: opes de importao invlidas (a no ser que escolha a chave pela sua impresso digital) (voc pode ter usado o programa errado para esta tarefa) --clearsign [nome_do_ficheiro]--decrypt [nome_do_ficheiro]--edit-key id-utilizador [comandos]--encrypt [nome_do_ficheiro]--lsign-key id-utilizador--output no funciona para este comando --sign --encrypt [nome_do_ficheiro]--sign --symmetric [nome_do_ficheiro]--sign [nome_do_ficheiro]--sign-key id-utilizador--store [nome_do_ficheiro]--symmetric [nome_do_ficheiro]-k[v][v][v][c] [id-utilizador] [porta-chaves]... isto um bug (%s:%d:%s) 1 assinatura incorrecta 1 assinatura no verificada por falta de chave 1 assinatura no verificada devido a um erro 1 ID de utilizador sem auto-assinatura vlida detectado @ (Veja a pgina man para uma lista completa de comandos e opes) @ Exemplos: -se -r Bob [ficheiro] assinar e cifrar para o utilizador Bob --clearsign [ficheiro] criar uma assinatura em texto puro --detach-sign [ficheiro] criar uma assinatura separada --list-keys [nomes] mostrar chaves --fingerprint [nomes] mostrar impresses digitais @ Opes: @Comandos: Responda "sim" (ou apenas "s") se quiser gerar a subchave.Responda "sim" se quiser remover a subchaveResponda "sim" se quiser escrever por cima do ficheiroResponda "sim" se quiser realmente remover este ID de utilizador. Todos os certificados tambm sero perdidos!Responda "sim" ou "no"Tem a certeza de que quer adicion-la de qualquer forma? (s/N) Tem a certeza de que quer revog-la de qualquer forma? (s/N) Voc tem certeza de que quer adicion-la de qualquer forma? (s/N) Impossvel verificar assinatura: %s Impossvel editar esta chave: %s Certificados que levam a uma chave confiada plenamente: Mudar (N)ome, (C)omentrio, (E)ndereo ou (O)k/(S)air? Mudar (N)ome, (C)omentrio, (E)mail ou (S)air? Muda as preferncias de todos os identificadores de utilizadores (ou apenas dos seleccionados) para a lista actual de preferncias. O 'timestamp' de todas as auto-assinaturas afectuadas ser avanado em um segundo. Modificar a data de validade para uma chave primria. Cifra: Comentrio: Compresso: Gerar um certificado de revogao para esta assinatura? (s/N)Notao de assinatura crtica: Politica de assinatura crtica: Apagar esta assinatura vlida? (s/N/q)Apagar esta assinatura invlida? (s/N/q)Apagar esta assinatura desconhecida? (s/N/q)%d assinatura removida. %d assinaturas removidas. Assinatura separada. 'Digest': Quer promov-la a uma assinatura exportvel? (s/N)Quer promov-la a uma auto-assinatura OpenPGP? (s/N) Quer que a sua assinatura expire na mesma altura? (S/n) Endereo de correio eletrnico: Digite novo nome de ficheiroInsira a frase secreta Digite a frase secreta: Digite o nome do possuidor da chaveDigite a nova frase para esta chave secreta. Digite o valor necessrio conforme pedido. possvel digitar uma data ISO (AAAA-MM-DD) mas voc no ter uma boa reaco a erros - o sistema tentar interpretar o valor dado como um intervalo.Insira o tamanho da chaveDigite o ID de utilizador do destinatrio para quem quer enviar a mensagem.Insira o ID de utilizador do revogador escolhido: Caractersticas: Arquivo `%s' j existe. D o nome para o ficheiro ao qual a assinatura se aplicaDigite a sua mensagem ... Disperso: Sugesto: Selecione os IDs de utilizador para assinar Com que cuidado que verificou que chave que est prestes a assinar pertence pessoa correcta? Se no sabe o que responder, escolha "0". Cifra IDEO no disponvel, a tentar utilizar %s em substituio Se desejar, pode inserir uma texto descrevendo a razo pela qual criou este certificado de revogao. Por favor mantenha este texto conciso. Uma linha vazia termina o texto. Se voc quiser usar esta chave, no de confiana, assim mesmo, responda "sim".Em geral no uma boa ideia utilizar a mesma chave para assinar e para cifrar. Este algoritmo s deve ser utilizado em alguns domnios. Por favor consulte primeiro o seu perito em segurana.Caracter invlido no comentrio Caracter invlido no nome Comando invlido (tente "help") Frase secreta invlida; por favor tente novamenteOpo invlida. Voc decide que valor usar aqui; este valor nunca ser exportado para terceiros. Precisamos dele implementar a rede de confiana, que no tem nada a ver com a rede de certificados (implicitamente criada).Gerao de chave cancelada. A gerao de chaves falhou: %s A chave foi comprometidaA chave j no utilizadaA chave protegida. A chave est revogada.A chave foi substitudaA chave valida por? (0) Chave no alterada, nenhuma actualizao necessria. Porta-chavesN para mudar o nome. C para mudar o comentrio. E para mudar o endereo de email O para continuar a gerao da chave. S para interromper a gerao da chave.NOTA: %s no para uso normal! NOTA: a criao de sub-chave para chaves v3 no respeito o OpenPGP NOTA: a chave foi revogadaNOTA: ficheiro de opes por omisso `%s' inexistente NOTA: o ficheiro antigo de opes por omisso `%s' foi ignorado NOTA: o remetente solicitou "apenas-para-seus-olhos" NOTA: o modo S2K simples (0) no recomendvel NOTA: no possvel escrever na trustdb O nome no pode comear com um dgito O nome deve ter pelo menos 5 caracteres A chave secreta necessria para fazer isto. NnCcEeOoSsNenhuma assinatura correspondente no porta-chaves secreto Nenhuma ajuda disponvelNenhuma ajuda disponvel para `%s'Nenhum motivo especificadoIdentificador de utilizador inexistente. Nenhum ID de utilizador com ndice %d Endereo eletrnico invlido Nota: Esta chave foi desactivada. Nota: Esta chave expirou! Nada removido. Por favor corrija primeiro o erro Por favor no coloque o endereo de email no nome verdadeiro ou no comentrio Por favor digite um novo nome de ficheiro. Se voc apenas carregar em RETURN o ficheiro por omisso (que mostrado entre parnteses) ser utilizado.Por favor digite um comentrio (opcional)Por favor digite o nome do ficheiro de dados: Por favor digite a frase secreta Por favor conserte esta possvel falha de segurana No se esquea que a validade de chave mostrada no necessriamente a correcta a no ser que reinicie o programa. Por favor remova as seleces das chaves secretas. Por favor repita a frase secreta, para ter certeza do que digitou.Por favor comunique bugs para . Seleccione exactamente um identificador de utilizador. Por favor selecione o tipo de chave desejado: Por favor especifique por quanto tempo a chave deve ser vlida. 0 = chave no expira = chave expira em n dias w = chave expira em n semanas m = chave expira em n meses y = chave expira em n anos Por favor especifique por quanto tempo a assinatura deve ser vlida. 0 = assinatura no expira = assinatura expira em n dias w = assinatura expira em n semanas m = assinatura expira em n meses y = assinatura expira em n anos Por favor utilize o comando "toggle" primeiro. Impresso da chave primria:Chave pblica: A chave pblica est desativada. Nome completo: Realmente criar os certificados de revogao? (s/N) Realmente remover esta auto-assinatura? (s/N)Repita a frase secreta Repita a frase secreta: O tamanho de chave pedido %u bits Chave secreta disponvel. Componentes secretas da chave primria no disponveis. Notao de assinatura: Politica de assinatura: Sintaxe: gpg [opes] [ficheiros] assina, verifica, cifra ou decifra a operao por omisso depende dos dados de entrada O gerador de nmeros aleatrios apenas um "remendo" para poder funcionar - no de modo algum um bom gerador! NO USE NENHUM DADO GERADO POR ESTE PROGRAMA! A sua auto-assinatura em "%s" uma assinatura do tipo PGP 2.x. A assinatura no vlida. Faz sentido remov-la do seu porta-chaves.No h preferncias no ID de utilizador tipo PGP 2.x. Este comando no permitido no modo %s. Esta uma assinatura que liga o ID de utilizador chave. Geralmente no uma boa idia remover tal assinatura. possvel que o GnuPG no consiga mais usar esta chave. Faa isto apenas se por alguma razo esta auto-assinatura no for vlida e h uma segunda disponvel.Esta uma assinatura vlida na chave; normalmente no desejvel remover esta assinatura porque ela pode ser importante para estabelecer uma conexo de confiana chave ou a outra chave certificada por esta.Esta chave pertence-nos Esta chave foi desactivadaEsta chave expirou!Esta chave vai expirar em %s. Esta chave no protegida. Esta assinatura no pode ser verificada porque voc no tem a chave correspondente. Voc deve adiar sua remoo at saber que chave foi usada porque a chave desta assinatura pode estabelecer uma conexo de confiana atravs de outra chave j certificada.Esta assinatura expirou em %s. Isto tornaria a chave inutilizvel no PGP 2.x. Para construir a Teia-de-Confiana ('Web-of-Trust'), o GnuPG precisa de saber quais so as chaves em que deposita confiana absoluta - normalmente estas so as chaves a que tem acesso chave privada. Responda "sim" para que esta chave seja de confiana absoluta. Nmero total processado: %lu Uso: gpg [opes] [ficheiros] (-h para ajuda)Utilizador "%s" est revocado.O identificador do utilizador j no vlidoAVISO: "%s" uma opo depreciada AVISO: %s sobrepe %s AVISO: existem 2 ficheiros com informaes confidenciais. AVISO: Esta chave do tipo PGP 2.x. Se adicionar um revogador designado algumas verso do PGP podem rejeit-la. AVISO: Esta chave do tipo PGP2. Se adicionar um identificador fotogrfico algumas verso do PGP podem rejeit-la. AVISO: Esta chave foi revogada pelo seu dono! AVISO: Esta chave no est certificada com uma assinatura confivel! AVISO: Esta chave no est certificada com assinaturas suficientemente confiveis! AVISO: Esta subchave foi revogada pelo seu dono! AVISO: A utilizar uma chave que no de confiana! AVISO: Ns NO confiamos nesta chave! AVISO: Chave fraca detectada - por favor mude a frase secreta novamente. AVISO: `%s' um ficheiro vazio AVISO: a assintura do ID do utilizador tem data %d segundos no futuro CUIDADO: a mensagem cifrada foi manipulada! AVISO: o ficheiro random_seed tem um tamanho invlido - no utilizado AVISO: A mensagem foi cifrada com uma chave fraca na cifragem simtrica. AVISO: a mensagem no tinha a sua integridade protegida AVISO: vrias assinaturas detectadas. Apenas a primeira ser verificada. AVISO: nada exportado AVISO: opes em `%s' ainda no esto activas nesta execuo AVISO: O programa pode criar um ficheiro core! AVISO: destinatrios (-r) dados sem utilizar uma cifra de chave pblica AVISO: conflito no 'digest' de assinatura da mensagem AVISO: impossvel expandir-%% a url de poltica (demasiado grande). A utilizar no expandida. AVISO: a utilizar memria insegura! AVISO: a utilizar gerador de nmeros aleatrios inseguro! Precisamos gerar muitos bytes aleatrios. uma boa ideia realizar outra actividade (escrever no teclado, mover o rato, usar os discos) durante a gerao dos nmeros primos; isso d ao gerador de nmeros aleatrios uma hiptese maior de ganhar entropia suficiente. Quando assina uma chave de identificao de um utilizador, deve primeiro verificar que a chave pertence realmente pessoa em questo. til para terceiros saberem com que cuidado que efectuou esta verificao. "0" significa que no deseja declarar a forma com verificou a chave "1" significa que acredita que a chave pertence pessoa em questo, mas no conseguiu ou no tentou verificar. Este grau til para quando assina a chave de uma utilizador pseudo-annimo. "2" significa que efectuou uma verificao normal da chave. Por exemplo, isto pode significar que verificou a impresso digital da chave e verificou o identificador de utilizador da chave contra uma identificao fotogrfica. "3" significa que efectuou uma verificao exaustiva da chave. Por exemplo, isto pode significar que efectuou a verificao pessoalmente, e que utilizou um documento, com fotografia, difcil de falsificar (como por exemplo um passaporte) que o nome do dono da chave o mesmo do que o identificador da chave, e que, finalmente, verificou (atravs de troca de e-mail) que o endereo de email da chave pertence ao done da chave. Ateno: os exemplos dados para os nveis 2 e 3 so *apenas* exemplos. Compete-lhe a si decidir o que considera, ao assinar chaves, uma verificao "normal" e uma verificao "exaustiva". Se no sabe qual a resposta correcta, responda "0".Est prestes a revogar estas assinaturas: Voc est usando o conjunto de caracteres `%s'. Voc no pode modificar a data de validade de uma chave v3 Voc no pode remover o ltimo ID de utilizador! No especificou um identificador de utilizador. (pode usar "-r") Voc no quer uma frase secreta - provavelmente isto uma *m* idia! Voc no quer uma frase secreta - provavelmente isto uma *m* idia! Vou continuar assim mesmo. Voc pode mudar sua frase secreta a qualquer hora, usando este programa com a opo "--edit-key". No pode adicionar um revogador designado a uma chave tipo PGP 2.x. No pode adicionar um identificador fotogrfico a uma chave tipo PGP2. No pode criar uma assinatura OpenPGP numa chave PGP 2.x no modo --pgp2. Voc deve selecionar pelo menos uma chave. Voc precisa selecionar pelo menos um ID de utilizador. Voc precisa de uma frase secreta para proteger a sua chave. Voc selecionou este identificador de utilizador: "%s" Deve especificar uma razo para a emisso do certificado. Dependendo no contexto, pode escolher as seguintes opes desta lista: "A chave foi comprometida" Utilize esta opo se tem razes para acreditar que indivduos no autorizados obtiveram acesso sua chave secreta. "A chave foi substituida" Utilize esta opo se substituiu esta chave com uma mais recente. "A chave j no utilizada" Utilize esta opo se j no utiliza a chave. "O identificador do utilizador j no vlido" Utilize esta opo para comunicar que o identificador do utilizador no deve ser mais utilizado; normalmente utilizada para indicar que um endereo de email invlido. A sua assinatura actual em "%s" uma assinatura local. Deciso? Opo? O seu sistema no consegue mostrar datas para alm de 2038. No entanto, estas vo ser tratadas correctamente at 2106. [nome_do_ficheiro][revogao][auto-assinatura][incerto]%s' j comprimido `%s' no um ficheiro normal - ignorado `%s' no um identificador longo de chave vlido adiciona um identificador fotogrficoadiciona uma chave de revocaoadiciona um novo ID de utilizadorcabealho de armadura: armadura: %s a assumir dados cifrados %s a assumir dados assinados em `%s' MPI incorretoURI incorrectocertificado incorrectochave incorrectafrase secreta incorrectachave pblica incorrectachave secreta incorrectaassinatura incorrectaser mais silenciosoimpossvel fechar `%s': %s impossvel ligar a `%s': %s impossvel criar `%s': %s impossvel desactivar core dumps: %s impossvel manipular algoritmo de chave pblica %d impossvel manipular linhas de texto maiores que %d caracteres impossvel abrir `%s' impossvel abrir `%s': %s impossvel abrir dados assinados `%s' no possvel abrir o porta-chavesimpossvel ler `%s': %s impossvel 'stat' a `%s': %s no possvel utilizar o pacote ESK simtrico devido ao modo S2K impossvel escrever `%s': %s cancelado pelo utilizador no pode escolher uma chave do tipo PGP 2.x como revogadora impossvel evitar chave fraca para criptografia simtrica; tentei %d vezes! muda os valores de confianamuda a frase secretaverificao da assinatura criada falhou: %s a verificar a base de dados de confiana erro de "checksum"algoritmo de cifra %d%s desconhecido ou foi desactivado completes-needed deve ser maior que 0 comandos em conflito criar sada com armadura asciidados no gravados; use a opo "--output" para grav-los retirada de armadura falhou: %s decifrar dados (aco por omisso)decifragem falhou: %s decifragem correcta remoo do bloco de chave falhou: %s no fazer alteraescriao de armadura falhou: %s cifrar dadoscifrado com algoritmo desconhecido %d cifrar uma mensagem no modo --pgp2 necessita da cifra IDEA cifrar apenas com cifra simtricaerro ao criar `%s': %s erro ao criar porta-chaves `%s': %s erro na criao da frase secreta: %s erro na ltima linha erro na leitura de `%s': %s erro na leitura do bloco de chave: %s erro na escrita do porta-chaves `%s': %s erro ao escrever no porta-chaves pblico `%s': %s erro ao escrever no porta-chaves secreto `%s': %s exportar chavesexportar chaves para um servidor de chavesfalha ao inicializar a base de dados de confiana: %s falha ao criar 'cache' do porta-chaves: %s erro ao fechar ficheiroerro na criao do ficheiroerro na remoo do ficheiroo ficheiro j existeerro na abertura do ficheiroerro de leituraerro na renomeao do ficheiroerro de escritaao forar a cifra simtrica %s (%d) viola as preferncias do destinatrio erro geralgerar um novo par de chavesgerar um certificado de revogaoa gerar a 'checksum' (depreciada) de 16-bit para proteco da chave secreta o gpg-agent no est disponvel nesta sesso a verso %d do protocolo gpg-agent no suportada iImMqQsSimportar chaves de um servidor de chavesimportar/fundir chaveslinha de entrada %u demasiado longa ou falta o LF linha de entrada maior que %d caracteres modo S2K invlido: deve ser 0, 1 ou 3 argumento invlidoarmadura invlidacabealho de armadura invlido: armadura invlida: linha maior que %d caracteres cabealho de assinatura em texto puro invlido linha com hfen invlida: preferncias por omisso invlidas opes de exportao invlidas algoritmo de disperso invlido `%s' opes de importao invlidas porta-chaves invlidopacote invlidofrase-secreta invlidapreferncias pessoais de cifra invlidas preferncias pessoais de compresso invlidas preferncias pessoais de 'digest' invlidas pacote raiz invlido detectado em proc_tree() valor invlido a chave foi criada %lu segundo no futuro (viagem no tempo ou problema no relgio) a chave foi criada %lu segundos no futuro (viagem no tempo ou problema no relgio) a chave no est marcada insegura - impossvel us-la com o RNG falso! porta-chaves `%s' criado erro do servidor de chavestamanho de chave invlido; a utilizar %u bits tamanho da chave arredondado para %u bits lista chave e identificadores de utilizadoreslistar as chaveslistar as chaves e as impresses digitaislistar as chaves e as assinaturaslista preferncias (perito)lista preferncias (detalhadamente)listar as chaves secretasfazer uma assinatura separadaCRC malformado varivel de ambiente GPG_AGENT_INFO invlida identificador de utilizador malformadomarginals-needed deve ser maior que 1 a mover a assinatura da chave para o local correcto nNassinaturas em texto puro aninhadas erro na redecriado um novo ficheiro de configurao `%s' proxima verificao da base de dados de confiana a %s nosem porta-chaves pblico por omisso: %s nenhum mdulo de recolha de entropia detectado no necessria uma verificao da base de dados de confiana nenhuma chave secreta no h dados assinados identificador de utilizador inexistentenenhum dado OpenPGP vlido encontrado. nenhum endereo vlido no foi encontrada nenhum porta-chaves onde escrever: %s nenhum porta-chaves pblico com permisses de escrita encontrado: %s nenhum porta-chaves secreto com permisses de escrita encontrado: %s no uma assinatura separada no cifradono processadono suportadonota: random_seed est vazia nota: ficheiro random_seed no actualizado certo, ns somos o destinatrio annimo. codificao antiga do DEK no suportada formato de assinatura antigo (PGP2.x) a operao no possvel sem memria segura inicializada ficheiro de opes `%s': %s nome do ficheiro original='%.*s' informaes de 'ownertrust' limpas a frase secreta no foi repetida corretamente; tente outra vezpor favor digite um endereo de email (opcional mas recomendado)por favor veja http://www.gnupg.org/documentation/faqs.html para mais informaes por favor utilize "%s%s" em vez dela fim de ficheiro prematuro (no CRC) fim de ficheiro prematuro (sem CRC) problema ao tratar pacote cifrado problema com o agente - a desactivar a utilizao deste perguntar antes de sobrepralgoritmo de proteco %d%s no suportado chaves pblica e privada criadas e assinadas. decifragem de chave pblica falhou: %s dados cifrados com chave pblica: DEK vlido chave pblica no encontradaqQsairsair deste menucaracter "quoted printable" na armadura - provavelmente um MTA com bugs foi usado lendo de `%s' a ler opes de `%s' lendo do "stdin" ... motivo da revocao: remover chaves do porta-chaves pblicoremover chaves do porta-chaves secretolimite de recursoscomentrio da revocao: arredondado para %u bits gravar e sairprocurar chaves num servidor de chaveschave secreta no disponvelpartes da chave secreta no disponveis seleciona ID de utilizador No algoritmo de "digest" de certificao selecionado invlido o algoritmo de cifragem selecionado invlido o algoritmo de "digest" selecionado invlido mostra esta ajudaassinar uma chaveassinar uma chave localmenteassinar ou editar uma chaveverificao de assinatura suprimida assinatura falhou: %s a assinar:ignorado: a chave pblica j est presente ignorado: chave pblica j colocada como destinatrio por omisso ignorado: a chave secreta j est presente ignorando bloco do tipo %d revocao solitria - utilize "gpg --import" para aplicar assinatura de classe 0x%02x subpacote do tipo %d tem bit crtico ligado a URL de poltica de certificao dada invlida a URL de poltica de assinatura dada invlida a assinatura no pode ser verificada. No se esquea que o ficheiro com a assinatura (.sig ou .asc) deve ser o primeiro a ser dado na linha de comando. h uma chave secreta para a chave pblica "%s"! isto pode ser causado por falta de auto-assinatura esta mensagem poder no ser utilizvel pelo %s conflito de "timestamp"entradas demais no cache pk - desactivado erro na base de dados de confianaregisto de confiana %lu no do tipo pedido %d registo de confiana %lu, tipo req %d: falha na leitura: %s registo de confiana %lu, tipo %d: escrita falhou: %s base de dados de confiana rec %lu: lseek falhou: %s base de dados de confiana rec %lu: escrita falhou (n=%d): %s transao de base de dados de confiana muito grande base de dados de confiana: lseek falhou: %s base de dados de confiana: leitura falhou (n=%d): %s base de dados de confiana: sincronizao falhou: %s no foi possvel alterar o exec-path para %s impossvel utilizar a cifra IDEA para todas as chaves para que est a cifrar. dados inesperadosalgoritmo de criptografia no implementadoalgoritmo de chave pblica no implementadoalgoritmo de criptografia desconhecidoalgoritmo de compresso desconhecidoalgoritmo de "digest" desconhecidoformato de pacote desconhecidoalgoritmo de chave pblica desconhecidoclasse de assinatura desconhecidaverso desconhecidaURI no suportadoalgoritmo de chave pblica inutilizvelchave pblica no utilizvelchave secreta no utilizvelactualizar todas as chaves a partir de um servidor de chavesactualizao falhou: %s actualizao da chave secreta falhou: %s actualizar a base de dados de confianauso: gpg [opes] usar como ficheiro de sadausar modo de texto cannicoutilize a opo "--delete-secret-keys" para a apagar primeiro. usar este identificador de utilizador para assinar ou decifraro utilizador com o id "%s" j est revocado detalhadoverificar uma assinaturachave fracachave fraca criada - tentando novamente tamanho estranho para uma chave de sesso cifrada (%d) a escrever a assinatura directa a escrever a assinatura ligada a uma chave a escrever chave pblica para `%s' a escrever chave privada para `%s' a escrever a auto-assinatura a escrever para `%s' a escrever em "stdout" chave secreta incorrectasSs pode assinar vista com chaves do tipo PGP 2.x no modo --pgp2 s pode assinar-desligar com chaves do tipo PGP 2.x no modo --pgp2 no modo --pgp2 s pode cifrar com chaves RSA de 2048 bits ou menos s pode fazer assinaturas separadas ou em texto puro no modo --pgp2 no pode assinar e cifrar ao mesmo tempo no modo --pgp2 no pode escolher uma chave como revogadora de si mesmo voc encontrou um bug ... (%s:%d) no pode utilizar %s enquanto estiver no modo %s deve utilizar ficheiros (e no um 'pipe') quando trabalho no modo --pgp2. |DF|escrever informaes de estado para o descritor de ficheiro DF|NOME|cifrar para NOME|N|estabelecer nvel de compresso N (0 desactiva)|[ficheiro]|fazer uma assinatura em texto puro|[ficheiro]|fazer uma assinatura|algo [ficheiros]|imprimir "digests" de mensagensgnupg-1.4.20/po/pt_BR.gmo0000644000175000017500000011075112635457221012003 00000000000000m 'C`}D.I+ u     !!(2!.[!3!!!!!"2""Q"%t"&"!"%"" ##,#'P# x######$(&$$O$t$$#$4$$ %"%@%U%i%%%%%"%%&-&&(T&0}& & ' 'A'/(0D(\u((()3)4O).) )#)&)&*/*F*^*s*** */**+H+.,8A,#z,",;,,-6-U-i-7.Q.l..%.. P/"q/,/2/ /(0 >0 _0*j000000 1&1o81 1 1'1/2EB2,2)223 3(34$4B4j\44OT556y77778*8791=9=o9I949,:#K:=o::1:H:H;)c;2;;*<&<1=#E=>i=="Z>&}>3>%>>?_? ? ?? ?? ?????@@%@4@ C@Q@h@%@2@@@A"A<9AvAAA(AAA1 B>BUBlBBBB B$B%BC:CQCiC CC%CCCC DD(D8DJD [DiD!DDD%D%D$EDE UEcE.zEEEEE FF,-FZFGiFHFBF=G SG]GxGGGGG(G,H3H6H THbHeHtHHH H H H&H)I2I<QIII;IIJ*+J!VJ$xJJJJJIJK&KAKTKcK zKKK%K%KK LL+L">LaLuL5~LL4L%M**MUM/MN()NRN/gN,N"N)NO0O KOlOOOOOOP!P5PNPfPvPPPPPPPQ#(QLQTQgQpQQQQQQQR R?R$VR#{RR#R-R TTT"T U%!U#GU@kU6U>U"V!BV dV#V"V&VV.W3=W;qWW WWW X&X"BX&eX,X.X+X$Y(9Y)bY#Y"Y.Y5Z8Z.MZ|Z/Z.Z,Z[&3[9Z[[[ [[ \""\E\^\t\\&\\\/ ]-9]5g]-] ^ ^:^+_/K_k{__$_!$`8F`6`8` `'`)$a-Na|aaa aab#b.@bob0cOJcc7c'c3dIGd!dd ddeee f!f6X Kx2b<`T[ "H:s6fBhVW])O'b+/&Te=gWl>KA!@qaIm$;}PSJPGR0FNIvn^jr{\aB&4MV: tcL U,-C| 8 dE` 31"e.%kO$Yw5?_2p~GXkiN,8ugc _(/A% 7!<Qj^ ;FJ-*0(l93iZhD]D#z)?Q@y1.5o79H =6L\ZYC#+4UR Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu secret keys read: %lu (%d) DSA (sign only) new key revocations: %lu secret keys imported: %lu secret keys unchanged: %lu %d bad signatures %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s encrypted data %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--sign --encrypt [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Can't check signature: %s Can't edit this key: %s Certificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Changing expiration time for the primary key. Comment: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Email address: Enter new filenameEnter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hint: Select the user IDs to sign If you want to use this untrusted key anyway, answer "yes".Invalid character in comment Invalid character in name Invalid command (try "help") Invalid selection. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key generation canceled. Key generation failed: %s Key is protected. Key is valid for? (0) Key not changed so no update needed. N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: no default option file `%s' NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No such user ID. No user ID with index %d Not a valid email address Note: This key has expired! Nothing deleted. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please fix this possible security flaw Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Public key is disabled. Real name: Really delete this self-signature? (y/N)Repeat passphrase: Requested keysize is %u bits Secret key is available. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The signature is not valid. It does make sense to remove it from your keyring.This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.Total number processed: %lu Usage: gpg [options] [files] (-h for help)WARNING: 2 files with confidential information exists. WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: encrypted message has been manipulated! WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: nothing exported WARNING: program may create a core file! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature]add a user IDarmor header: armor: %s assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietcan't disable core dumps: %s can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecksum errorcompletes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay do not make any changesenarmoring failed: %s encrypt dataencrypted with unknown algorithm %d encryption only with symmetric ciphererror creating passphrase: %s error in trailer line error reading `%s': %s error writing keyring `%s': %s export keysexport keys to a key serverfailed to initialize the TrustDB: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorgeneral errorgenerate a new key pairgenerate a revocation certificateimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid hash algorithm `%s' invalid keyringinvalid packetinvalid passphraseinvalid root packet detected in proc_tree() invalid value key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist secret keysmake a detached signaturemalformed CRC malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornono secret key no such user idno valid OpenPGP data found. no valid addressees not encryptednot processednot supportedokay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' please enter an optional but highly suggested email addresspremature eof (in CRC) premature eof (no CRC) public and secret key created and signed. public key decryption failed: %s public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... resource limitrounded up to %u bits save and quitsecret key not availableselect user ID Nselected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set as default recipient skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. this may be caused by a missing self-signature timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown pubkey algorithmunknown signature classunknown versionunsupported URIunusable pubkey algorithmupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse this user-id to sign or decryptverboseverify a signatureweak keyweak key created - retrying writing key binding signature writing self signature writing to `%s' writing to stdout wrong secret key usedyYyou found a bug ... (%s:%d) |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: GnuPG 1.0 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:14+0200 Last-Translator: Language-Team: ? Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit No h bytes aleatrios suficientes. Por favor, faa algum outro trabalho para que o sistema possa coletar mais entropia! (So necessrios mais %d bytes) Algoritmos suportados: importados: %lu no modificados: %lu novas subchaves: %lu novos IDs de usurios: %lu sem IDs de usurios: %lu No se tem certeza de que a assinatura pertence ao dono. A assinatura provavelmente uma FALSIFICAO. No h indicao de que a assinatura pertence ao dono. novas assinaturas: %lu chaves secretas lidas: %lu (%d) DSA (apenas assinatura) novas revogaes de chaves: %lu chaves secretas importadas: %lu chaves secretas no modificadas: %lu %d assinaturas incorretas %d assinaturas no verificadas devido a erros %d assinaturas no verificadas por falta de chaves %d IDs de usurios sem auto-assinaturas vlidas detectados dados criptografados com %s %s o novo %s o no modificado %s no faz sentido com %s! %s no permitido com %s! %s: diretrio inexistente! %s: erro lendo registro livre: %s %s: erro lendo registro de verso: %s %s: erro atualizando registro de verso: %s %s: erro escrevendo registro de diretrio: %s %s: erro escrevendo registro de verso: %s %s: falha ao anexar um registro: %s %s: falha ao criar tabela de "hash": %s %s: falha ao criar registro de verso: %s%s: falha ao zerar um registro: %s %s: verso de arquivo invlida %d %s: banco de dados de confiabilidade invlido %s: banco de dados de confiabilidade invlido criado %s: chaveiro criado %s: no um banco de dados de confiabilidade %s: ignorado: %s %s: ignorado: a chave pblica j est presente %s: ignorado: a chave pblica est desativada %s: banco de dados de confiabilidade criado %s: sufixo desconhecido %s: registro de verso com recnum %lu (voc pode ter usado o programa errado para esta tarefa) --clearsign [nome_do_arquivo]--decrypt [nome_do_arquivo]--edit-key id-usurio [comandos]--encrypt [nome_do_arquivo]--lsign-key id-usurio--sign --encrypt [nome_do_arquivo]--sign [nome_do_arquivo]--sign-key id-usurio--store [nome_do_arquivo]--symmetric [nome_do_arquivo]-k[v][v][v][c] [id-usurio] [chaveiro]... isto um bug (%s:%d:%s) 1 assinatura incorreta 1 assinatura no verificada por falta de chave 1 assinatura no verificada devido a um erro 1 ID de usurio sem auto-assinatura vlida detectado @ Exemplos: -se -r Bob [arquivo] assinar e criptografar para usurio Bob --clearsign [arquivo] criar uma assinatura em texto puro --detach-sign [arquivo] criar uma assinatura separada --list-keys [nomes] mostrar chaves --fingerprint [nomes] mostrar impresses digitais @ Opes: @Comandos: Responda "sim" (ou apenas "s") se quiser gerar a subchave.Responda "sim" se quiser remover a subchaveResponda "sim" se quiser sobrescrever o arquivoResponda "sim" se quiser realmente remover este ID de usurio. Todos os certificados tambm sero perdidos!Responda "sim" ou "no"Impossvel verificar assinatura: %s Impossvel editar esta chave: %s Certificados que levam a uma chave confiada plenamente: Muda (N)ome, (C)omentrio, (E)ndereo ou (O)k/(S)air? Modificando a data de validade para uma chave primria. Comentrio: Deletar esta assinatura vlida? (s/N/q)Deletar esta assinatura invlida? (s/N/q)Deletar esta assinatura desconhecida? (s/N/q)%d assinatura removida. %d assinaturas removidas. Assinatura separada. Endereo de correio eletrnico: Digite novo nome de arquivoDigite a frase secreta: Digite o nome do possuidor da chaveDigite a nova frase para esta chave secreta. Digite o valor necessrio conforme pedido. possvel digitar uma data ISO (AAAA-MM-DD) mas voc no ter uma boa reao a erros - o sistema tentar interpretar o valor dado como um intervalo.Digite o tamanho da chaveDigite o ID de usurio do destinatrio para o qual voc quer enviar a mensagem.Arquivo `%s' j existe. D o nome para o arquivo ao qual a assinatura se aplicaV em frente e digite sua mensagem ... Sugesto: Selecione os IDs de usurio para assinar Se voc quiser usar esta chave no confivel assim mesmo, responda "sim".Caractere invlido no comentrio Caractere invlido no nome Comando invlido (tente "help") Opo invlida. Voc decide que valor usar aqui; este valor nunca ser exportado para terceiros. Precisamos dele implementar a rede de confiana, que no tem nada a ver com a rede de certificados (implicitamente criada).Gerao de chave cancelada. A gerao de chaves falhou: %s A chave protegida. A chave valida por? (0) Chave no alterada, nenhuma atualizao necessria. N para mudar o nome. C para mudar o comentrio. E para mudar o endereo de correio eletrnico. O para continuar a gerao da chave. S para interromper a gerao da chave.NOTA: %s no para uso normal! NOTA: arquivo de opes padro `%s' inexistente NOTA: o remetente solicitou "apenas-para-seus-olhos" NOTA: o modo S2K simples (0) no recomendvel O nome no pode comear com um dgito O nome deve ter pelo menos 5 caracteres A chave secreta necessria para fazer isto. NnCcEeOoSsNenhuma assinatura correspondente no chaveiro secreto Nenhuma ajuda disponvelNenhuma ajuda disponvel para `%s'Identificador de usurio inexistente. Nenhum ID de usurio com ndice %d Endereo eletrnico invlido Nota: Esta chave expirou! Nada removido. Por favor digite um novo nome de arquivo. Se voc apenas apertar RETURN o arquivo padro (que mostrado em colchetes) ser usado.Por favor digite um comentrio (opcional)Por favor digite o nome do arquivo de dados: Por favor conserte este possvel furo de segurana Por favor remova as selees das chaves secretas. Por favor repita a ltima frase secreta, para ter certeza do que voc digitou.Por favor comunique bugs para . Por favor selecione o tipo de chave desejado: Por favor especifique por quanto tempo a chave deve ser vlida. 0 = chave no expira = chave expira em n dias w = chave expira em n semanas m = chave expira em n meses y = chave expira em n anos A chave pblica est desativada. Nome completo: Realmente remover esta auto-assinatura? (s/N)Repita a frase secreta: O tamanho de chave pedido %u bits Chave secreta disponvel. Sintaxe: gpg [opes] [arquivos] assina, verifica, criptografa ou descriptografa a operao padro depende dos dados de entrada O gerador de nmeros aleatrios apenas um "remendo" para poder funcionar - no de modo algum um bom gerador! NO USE NENHUM DADO GERADO POR ESTE PROGRAMA! A assinatura no vlida. Faz sentido remov-la de seu chaveiro.Esta uma assinatura que liga o ID de usurio chave. Geralmente no uma boa idia remover tal assinatura. possvel que o GnuPG no consiga mais usar esta chave. Faa isto apenas se por alguma razo esta auto-assinatura no for vlida e h uma segunda disponvel.Esta uma assinatura vlida na chave; normalmente no desejvel remover esta assinatura porque ela pode ser importante para estabelecer uma conexo de confiana chave ou a outra chave certificada por esta.Esta chave pertence a ns Esta chave foi desativadaEsta chave no protegida. Esta assinatura no pode ser verificada porque voc no tem a chave correspondente. Voc deve adiar sua remoo at saber que chave foi usada porque a chave desta assinatura pode estabelecer uma conexo de confiana atravs de outra chave j certificada.Nmero total processado: %lu Uso: gpg [opes] [arquivos] (-h para ajuda)AVISO: existem 2 arquivos com informaes confidenciais. AVISO: Esta chave foi revogada pelo seu dono! AVISO: Esta chave no est certificada com uma assinatura confivel! AVISO: Esta chave no est certificada com assinaturas suficientemente confiveis! AVISO: Esta subchave foi revogada pelo seu dono! AVISO: Usando chave no confivel! AVISO: Ns NO confiamos nesta chave! AVISO: Chave fraca detectada - por favor mude a frase secreta novamente. AVISO: `%s' um arquivo vazio CUIDADO: a mensagem criptografada foi manipulada! AVISO: A mensagem foi criptografada com uma chave fraca na criptografia simtrica. AVISO: nada exportado AVISO: O programa pode criar um arquivo core! AVISO: usando gerador de nmeros aleatrios inseguro! Precisamos gerar muitos bytes aleatrios. uma boa idia realizar outra atividade (digitar no teclado, mover o mouse, usar os discos) durante a gerao dos nmeros primos; isso d ao gerador de nmeros aleatrios uma chance melhor de conseguir entropia suficiente. Voc est prestes a revogar estas assinaturas: Voc est usando o conjunto de caracteres `%s'. Voc no pode modificar a data de validade de uma chave v3 Voc no pode remover o ltimo ID de usurio! Voc no quer uma frase secreta - provavelmente isto uma *m* idia! Voc no quer uma frase secreta - provavelmente isto uma *m* idia! Vou continuar assim mesmo. Voc pode mudar sua frase secreta a qualquer hora, usando este programa com a opo "--edit-key". Voc deve selecionar pelo menos uma chave. Voc precisa selecionar pelo menos um ID de usurio. Voc precisa de uma frase secreta para proteger sua chave. Voc selecionou este identificador de usurio: "%s" Sua deciso? Sua opo? Seu sistema no consegue mostrar datas alm de 2038. Apesar disso, elas sero corretamente manipuladas at 2106. [nome_do_arquivo][revogao][auto-assinatura]adiciona um novo ID de usuriocabealho de armadura: armadura: %s assumindo dados assinados em `%s' MPI incorretoURI incorretocertificado incorretochave incorretafrase secreta incorretachave pblica incorretachave secreta incorretaassinatura incorretaser mais silenciosoimpossvel desativar core dumps: %s impossvel manipular algoritmo de chave pblica %d impossvel manipular linhas de texto maiores que %d caracteres impossvel abrir `%s' impossvel abrir `%s': %s impossvel abrir dados assinados `%s' no possvel abrir o chaveiroimpossvel evitar chave fraca para criptografia simtrica; %d tentativas! muda os valores de confianamuda a frase secretaerro de "checksum"completes-needed deve ser maior que 0 comandos conflitantes criar sada com armadura asciidados no salvos; use a opo "--output" para salv-los retirada de armadura falhou: %s descriptografar dados (padro)descriptografia falhou: %s descriptografia correta no fazer alteraescriao de armadura falhou: %s criptografar dadoscriptografado com algoritmo desconhecido %d criptografar apenas com criptografia simtricaerro na criao da frase secreta: %s erro na linha "trailer" erro na leitura de `%s': %s erro na escrita do chaveiro `%s': %s exportar chavesexportar chaves para um servidorfalha ao inicializar o banco de dados de confiabilidade: %s erro no fechamento de arquivoerro na criao de arquivoerro na remoo de arquivoo arquivo j existeerro na abertura de arquivoerro de leituraerro na renomeao de arquivoerro de escritaerro geralgerar um novo par de chavesgerar um certificado de revogaoimportar chaves de um servidorimportar/fundir chaveslinha %u muito longa ou sem LF linha de entrada maior que %d caracteres modo S2K invlido: deve ser 0, 1 ou 3 argumento invlidoarmadura invlidacabealho de armadura invlido: armadura invlida: linha maior que %d caracteres cabealho de assinatura em texto puro invlido linha com hfen invlida: algoritmo de hash invlido `%s' chaveiro invlidopacote invlidofrase secreta invlidapacote raiz invlido detectado em proc_tree() valor invlido a chave foi criada %lu segundo no futuro (viagem no tempo ou problema no relgio) a chave foi criada %lu segundos no futuro (viagem no tempo ou problema no relgio) a chave no est marcada como insegura - impossvel us-la com o pseudo RNG! lista chave e identificadores de usurioslistar as chaveslistar as chaves e as impresses digitaislistar as chaves e as assinaturaslistar as chaves secretasfazer uma assinatura separadaCRC malformado identificador de usurio malformadomarginals-needed deve ser maior que 1 movendo a assinatura da chave para o local correto nNassinaturas em texto puro aninhadas erro na redenonenhuma chave secreta identificador de usurio inexistentenenhum dado OpenPGP vlido encontrado. nenhum endereo vlido no criptografadono processado(s)no suportadocerto, ns somos o destinatrio annimo. codificao antiga do DEK no suportada formato de assinatura antigo (PGP2.x) a operao no possvel sem memria segura inicializada arquivo de opes `%s': %s nome de arquivo original='%.*s' por favor digite um endereo de email (opcional mas recomendado)fim de arquivo prematuro (no CRC) fim de arquivo prematuro (sem CRC) chaves pblica e privada criadas e assinadas. descriptografia de chave pblica falhou: %s dados criptografados com chave pblica: DEK vlido chave pblica no encontradaqQsairsair deste menucaractere "quoted printable" na armadura - provavelmente um MTA com bugs foi usado lendo de `%s' lendo opes de `%s' lendo de "stdin" ... limite de recursoarredondado para %u bits gravar e sairchave secreta no disponvelseleciona ID de usurio No algoritmo de criptografia selecionado no vlido o algoritmo de "digest" selecionado no vlido mostra esta ajudaassinar uma chaveassinar uma chave localmenteassinar ou editar uma chaveverificao de assinatura suprimida assinatura falhou: %s assinando:ignorado: chave pblica j marcada como destinatrio padro ignorando bloco do tipo %d revogao isolada - use "gpg --import" para aplic-la assinatura isolada da classe 0x%02x subpacote do tipo %d tem bit crtico ligado a assinatura no pde ser verificada. Por favor lembre-se de que o arquivo com a assinatura (.sig ou .asc) deve ser o primeiro arquivo dado na linha de comando. isto pode ser causado por falta de auto-assinatura conflito de "timestamp"entradas demais no cache pk - desativado erro no banco de dados de confiabilidaderegistro de confiana %lu, tipo req %d: falha na leitura: %s registro de confiana %lu, tipo %d: escrita falhou: %s banco de dados de confiabilidade rec %lu: lseek falhou: %s banco de dados de confiabilidade rec %lu: escrita falhou (n=%d): %s transao de banco de dados de confiabilidade muito grande banco de dados de confiabilidade: lseek falhou: %s banco de dados de confiabilidade: leitura falhou (n=%d): %s banco de dados de confiabilidade: sincronizao falhou: %s dados inesperadosalgoritmo de criptografia no implementadoalgoritmo de chave pblica no implementadoalgoritmo de criptografia desconhecidoalgoritmo de compresso desconhecidoalgoritmo de "digest" desconhecidoformato de pacote desconhecidoalgoritmo de chave pblica desconhecidoclasse de assinatura desconhecidaverso desconhecidaURI no suportadoalgoritmo de chave pblica inutilizvelatualizao falhou: %s atualizao da chave secreta falhou: %s atualizar o banco de dados de confiabilidadeuso: gpg [opes] usar como arquivo de sadausar modo de texto cannicousar este identificador de usurio para assinar ou descriptografardetalhadoverificar uma assinaturachave fracachave fraca criada - tentando novamente escrevendo assinatura ligada a uma chave escrevendo auto-assinatura escrevendo para `%s' escrevendo em "stdout" chave secreta incorretasSvoc encontrou um bug ... (%s:%d) |DA|escrever informaes de estado para o descritor de arquivo DA|NOME|criptografar para NOME|N|estabelecer nvel de compresso N (0 desabilita)|[arquivo]|fazer uma assinatura em texto puro|[arquivo]|fazer uma assinatura|algo [arquivos]|imprimir "digests" de mensagensgnupg-1.4.20/po/hu.gmo0000644000175000017500000021602512635457221011412 00000000000000}U'@5-A5o556727O7l777D7.8I7888888 9$9@9Y9$v9&9,99 ::<:N:h:]::/:(&;.O;3~;;;;;<!<4<M<i<"<<<<"<%=&-=!T=%v="=#='= >,>I>^>{>>>(>$>??#0?T?s???&?%?,@4C@x@@@@@'@A/AMA_ArAA"AAA-A(B0EBHvB B C CCAD/CD0sD\DE-E0DE.uEEEE3E4F-HFvF.0G_G hG rG:GGG#G&H&@HgH~HHHGH@H>=I+|I=II"I:JTJgJyJ J/JJKHK-L ?LJL8]L#LL"LLE}MM;YNNIOgOO$OOOOPPPQ)Q?QRQbQtQ%QQQ MR!nR<RR"R, S,8S2eSS S(S S T**TUTgTTTTT"TUU/UEOUoU V &V8GV'VcV/ WEf1g=BgIg4gg#h=Bhh?hDh1%i5WiHi-iHjMjj<jB/k)rkCk.k@lFPl2l1l l2mPmhQn*s&s1 t#>t2bt>tt=u0uMu"Cv&fv3v%vDv,,y5Yyyy_y z z(z 9zEz%^zzzz zz zz {*{2{:{J{R{a{p{ {{{{{{{ |-|.K|%z|2||||}-}B}5W}}};}<}/~E~&[~~~-~(~~10by 2$O=t%؀ 1H`|&&Á K%^$̂ ނ @- n|!D+/'W`~%%$܄  .7f2 8+Ht$&$,4CGZHB.DTrȈ 'B[u'.@(R,{ Ɋ ׊$% (I%h&ҋ!#AV%u% ی #&&J)q< (,Hu;MΎ7O"g-+ҏ*!)&K$rIÐ  ;N#f#ґ #0T3e%% "%H\ e5$4%1*W0Ӕ.ܔ* 6+Ǖ/%#I(\-/Ȗ,"%)Hr ͗#-(VIuϘ .Ibvř#ՙ #7 Klɚܚ6#+ Op-› )EayDFEFDAѝ7K$hF Ԟ$ #1U#n=Uڢ  6 W x ?(I# m ̤ &Ea&{-'Х  /Pd u;+)g2=ħ* 4"J m!ը&#B(])+&ܩ&,**W/+%ު#.(Wv+2Ы!%#?c""Ŭ7֬$33?g%ѭ 2&Ytή-!41F(x<Hޯ' A M'[R0ֱ3t;'%ز,6+'b)2H>7v10b x?޵ *9)d жFڶ;!0]#4 1<&c(0ий-7 P\8t κA$\T&߽1&!Xzڿ#;R2p +1#]G#4:"5]6*)'$G l/w,$&+R'o!D4,'3 8={v97,;d8'')-}I$ %22&e  1  2H!F:*3-^Dbv$2 .  @/M0}#+**)T"s<j;36>jG62('[K#GF;/BH:>Dy"NDqJ1F32zDa;TD/?EC+'I6q/E5TI@/Kp*8M >nR3:4 o }q   !/5E-{! $<@ }    +*+V.,)4?=9}--".+Q?}?()&>P[,2*!]6,!%HA%#% /Ol}*;*C.a""%3,0`"[2$2W #?6vI2-:h#q;+(F]p1*6 W&s2/',W.?I'Iqc?'P+x(','".Jy"!"+0G"x9$,,;h-k  -/(-=%k1(",8&e%/,.FVgIv4'$ B5c1440AeS&"B+b3%9 -= 1k -     I ^ ({ "  / , 6 E c {  " - & ?% 2e 2     * H ` /i J '  H)#r0*+ 4)3^0'%X7~B+&;R35;)4)^22*,1F;xD '-/] m &,F1X+'.,Iv!7-!/O  '3&; U'vJ LXID64:k#-:/3c/!)^@!,%TBVz !@S1K0"R4`Zl(h;<Fuat|WhxtQh5^N =}\-]<AJk8>|' law]syQ_:B/Hq K2pe3g$CvHEk\"gSW"l+1)FLm`F*w>YyDVMws SfPP*B{I ;4yoX[+A0:dXgzx2iar7%.67 NU{;d?@9 }_3?<pbmRcH&9GsCj.ZCrzT&K$^_f.Zfi| x?ve' n1m Luo+ (8Y~{%vOQiUA/#>-~M*qP'N}8Ir)k`M9oVbnp&OJGYX6E:[W6t 5qjIcbJG jR0)7#dn=/$ UO]\L,!Te245 , =#3DEu[cD- ( Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d bad signatures %d keys processed (%d validity counts cleared) %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s CancelCertificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter JPEG filename for photo ID: Enter an optional description; end it with an empty line: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. Is this photo correct (y/N/q)? It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key available at: Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select the reason for the revocation: Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Reason for revocation: %s Repeat passphrase Repeat passphrase: Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Secret key is available. Secret parts of primary key are not available. Signature expired %s Signature expires %s Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu UncompressedUsage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create directory `%s': %s can't disable core dumps: %s can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverexternal program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key export failed: %s key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornever new configuration file `%s' created next trustdb check due at %s nono corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no need for a trustdb check no remote program execution supported no secret key no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to display photo ID! unable to execute external program unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked using cipher %s verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg 1.2.5 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:24+0200 Last-Translator: Nagy Ferenc Lszl Language-Team: Hungarian Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 8bit Adja meg a felhasznli azonostt! res sorral fejezze be: Nem ll rendelkezsre elg vletlen bjt. Krem, csinljon most valami mst, hogy az opercis rendszer entrpit gyjthessen! (Mg %d bjt szksges.) Vlasszon egy kpet a fotazonostjhoz! A kp JPEG formtum legyen! Emlkeztetjk, hogy a kp a nyilvnos kulcsban troldik. Ha nagyon nagy kpet hasznl, a kulcsa is nagyon nagy lesz! A 240x288 krli kpmret jl hasznlhat. Tmogatott algoritmusok: importlva: %lu vltozatlan: %lu j alkulcsok: %lu j felh. azonostk: %lu nem importlt: %lu felh. azonost nlkl: %lu Nem biztos, hogy az alrs a tulajdonoshoz tartozik. Az alrs valsznleg HAMIS. Semmi jele, hogy ez a kulcs a megadott tulajdonoshoz tartozik. j alrsok: %lu Alkulcsujjlenyomat: olvasott titkos kulcsok: %lu j kulcsok kihagyva: %lu Alkulcsujjlenyomat: (%d) DSA (csak alrs) (%d) RSA (csak titkosts) (%d) RSA (csak alrs) (0) Nem vlaszolok.%s (1) Egyltaln nem ellenriztem.%s (2) A szoksos ellenrzseket vgeztem.%s (3) Nagyon alaposan ellenriztem.%s j kulcsvisszavonsok: %lu Nem tudom alrni. importlt titkos kulcsok: %lu (nem exportlhat)Elsdlegeskulcs-ujjlenyomat:vltozatlan titkos kulcsok: %lu # Meghatrozott bizalmi rtkek listja, %s. # (Hasznlja a "gpg --import-ownertrust" parancsot a visszalltshoz!) %d rossz alrs. %d kulcsot feldolgoztam (%d rvnyessgszmllt trltem) %d alrst nem ellenriztem hiba miatt. %d alrst nem ellenriztem hinyz kulcs miatt. %d felhasznlazonostt talltam rvnyes nalrs nlkl. %s... %s s %s egyelre nem hasznlhat egytt! %s titkostott adat. %s titkostott munkafolyamatkulcs %s titkostst fogok hasznlni. %s az j pldny. %s az eredeti pldny. %s rtelmetlen %s mellett! %s s %s nem hasznlhat egytt! %s alrs, %s kivonatol algoritmus. %s. %s/%s titkostva "%s" szmra %s: Knyvtr nem ltezik! %s: Hiba szabad rekord olvassakor: %s. %s: Hiba a verzirekord olvassakor: %s. %s: Hiba a verzirekord frisstsekor: %s. %s: Hiba knyvtrrekord rsakor: %s. %s: Hiba a verzirekord rsakor: %s. %s: Nem sikerlt egy rekord hozzadsa: %s. %s: Hashtbla ltrehozsa sikertelen: %s. %s: Nem sikerlt verzirekordot ltrehoznom: %s%s: Nem sikerlt egy rekord nullzsa: %s. %s: rvnytelen llomnyverzi (%d). %s: rvnytelen bizalmi adatbzis. %s: rvnytelen bizalmi adatbzis jtt ltre. %s: Kulcskarikt ltrehoztam. %s: Nem bizalmi adatbzis. %s: kihagyva: %s %s: kihagyva: nyilvnos kulcs mr szerepel %s: Kihagyva: Nyilvnos kulcs nincs engedlyezve. %s: Bizalmi adatbzis ltrejtt. %s: ismeretlen vgzds. %s: Verzirekord, rekordszm: %lu. %s:%d: Elavult opci: "%s" %s:%d: rvnytelen export opcik! %s:%d: rvnytelen import opcik! (Nincs lers.) (Valsznleg a(z) %d. lehetsget akarja vlasztani.) (Ez egy rzkeny visszavon kulcs.) (Kivve, ha megad egy kulcsot az ujjlenyomatval.) (Lehet, hogy nem a megfelel programot hasznlja a feladatra.) --clearsign [fjlnv]--decrypt [fjlnv]--edit-key felh-azonost [parancsok]--encrypt [fjlnv]--lsign-key felh-azonostAz --output opci nem mkdik ehhez a parancshoz. --sign --encrypt [fjlnv]--sign --symmetric [fjlnv]--sign [fjlnv]--sign-key felh-azonost--store [fjlnv]--symmetric [fjlnv]-k[v][v][v][c] [felh-azonost] [kulcskarika]Ez egy programhiba... (%s:%d:%s) 1 rossz alrs. 1 alrst nem ellenriztem hinyz kulcs miatt. 1 alrst nem ellenriztem hiba miatt. 1 felhasznlazonostt talltam rvnyes nalrs nlkl. @ (A parancsok s opcik teljes listjt a man oldalon tekintheti meg.) @ Pldk: -se -r Bob [fjl] titkosts s alrs Bob rszre --clearsign [fjl] olvashat szveg alrsa --detach-sign [fjl] klnll alrs ksztse --list-keys [nevek] kulcsok kiratsa --fingerprint [nevek] ujjlenyomatok kiratsa @ Opcik: @Parancsok: ASCII-pnclozott kimenet kivlasztva. Vlaszoljon "igen"-nel (vagy csak "i"-vel), ha kezdhetjk az alkulcs ltrehozst!Vlaszoljon "igen"-nel, ha az alkulcs trlhet.Vlaszoljon "igen"-nel, ha fellrhat az llomny!Vlaszoljon "igen"-nel, ha valban trlni akarja ezt a felhasznlazonostt! Minden igazols trldik vele egytt!Krem, adjon "igen" vagy "nem" vlaszt!Tovbbra is hozz akarja adni? (i/N) Biztos benne, hogy mgis visszavonja? (i/N) Biztos abban, hogy tovbbra is al akarja rni? (i/N) Nem tudom ellenrizni az alrst: %s. Nem tudom szerkeszteni ezt a kulcsot: %s MgsemAlapveten megbzhat kulcshoz vezet igazolsok: (N)v, (M)egjegyzs, (E)-mail megvltoztatsa vagy (R)endben/(K)ilps? (N)v, (M)egjegyzs, (E)-mail megvltoztatsa vagy (K)ilps? Lecserli az sszes felhasznlazonosthoz (vagy csak a kijelltekhez) tartoz preferencikat az aktulis preferencikra. Minden rintett nalrs idpontjt egy msodperccel nveli. Elsdleges kulcs lejrati idejnek vltoztatsa. Rejtjelez (cipher): Megjegyzs: Tmrt (compression): Csinljunk egy visszavon igazolst ehhez az alrshoz? (i/N) Kritikus alrs-jells: Kritikus alrsi eljrsmd: Trli ezt a j alrst? (i/N/k)Trli ezt az rvnytelen alrst? (i/N/k)Trli ezt az ismeretlen alrst? (i/N/k)Trltem %d alrst. Trltem %d alrst. Klnll alrs. Kivonat: Szeretne kiadni egy j alrst, amellyel lecserli a lejrtat? (i/N) Szeretn talaktani teljes, exportlhat alrss? (i/N) Szeretn talaktani OpenPGP nalrss? (i/N) Mg egyszer al akarja rni? (i/N) Szeretn, ha az alrsa ugyanekkor jrna le? (I/n) E-mail cm: Adja meg egy JPEG fjl nevt a fotazonosthoz: Adjon meg egy nem ktelez lerst! res sorral fejezze be: rja be az j llomnynevetrja be a jelszt! rja be a jelszt: Adja meg a kulcs tulajdonosnak a nevt!rja be az j jelszt ehhez a titkos kulcshoz! Adja meg a szksges rtket, ahogy a prompt mutatja! Lehetsges ISO dtumot is berni (-HH-NN), de nem fog rendes hibazenetet kapni, hanem a rendszer megprblja az rtket intervallumknt rtelmezni.Adja meg a kulcs mrett!Adja meg a cmzett felhasznli azonostjt!rja be a kijellt visszavon felhasznlazonostjt: Jellemzk: "%s" llomny ltezik. Adja meg az llomny nevt, melyhez az alrs tartozik!Kezdheti gpelni az zenetet... Kivonatol (hash): Javaslat: Vlassza ki az alrni kvnt felhasznlazonostkat! Mennyire gondosan ellenrizte, hogy a kulcs, melyet alrni kszl, valban a fent nevezett szemlyhez tartozik? Ha nem tudja a vlaszt, rjon "0"-t! IDEA rejtjelez nem ll rendelkezsre, optimista mdon megprblok %s-t hasznlni helyette. Ha akarja, megadhat egy szveget, melyben megindokolja, hogy mirt adta ki ezt a visszavon igazolst. Krem, fogalmazzon tmren! Egy res sor jelzi a szveg vgt. Ha mgis hasznlni akarja ezt a kulcsot, melyben nem bzunk, vlaszoljon "igen"-nel!ltalban nem j tlet ugyanazt a kulcsot hasznlni alrshoz s titkostshoz. Ezt az algoritmust csak bizonyos terleteken ajnlatos hasznlni. Krem, elszr konzultljon a biztonsgi szakrtjvel!rvnytelen karakter a megjegyzsben! rvnytelen karakter a nvben! rvnytelen parancs! (Prblja a sgt: "help".) rvnytelen jelsz. Prblja jrarvnytelen vlaszts. Ez a fot megfelel (i/N/k)? Az n dntsn mlik, hogy milyen rtket ad meg itt. Ezt az rtket soha nem exportljuk msok rszre. Ez a bizalmak hlzathoz (web-of-trust) szksges, semmi kze az igazolsok hlzathoz (web-of-certificates).Kulcs tallhat: Kulcs ltrehozsa megszaktva. Kulcsgenerls sikertelen: %s A kulcs kompromittldott.A kulcs mr nem hasznlatos.A kulcs vdett. A kulcsot visszavontk.A kulcsot lecserltk.Meddig rvnyes a kulcs? (0) A kulcs nem vltozott, nincs szksg frisstsre. KulcskarikaN nv vltoztatsa M megjegyzs vltoztatsa E e-mail vltoztatsa R kulcsgenerls folytatsa Q kilps a kulcsgenerlsblMEGJEGYZS: %s nem norml hasznlatra van! MEGJEGYZS: Ez a kulcs nem vdett. MEGJEGYZS: Alkulcsok ltrehozsa v3 kulcsokhoz nem OpenPGP-megfelel. MEGJEGYZS: A kulcsot visszavontk.MEGJEGYZS: Nincs alaprtelmezett opcis fjl (%s). MEGJEGYZS: Figyelmen kvl hagytam a rgi opcikat (%s). MEGJEGYZS: A felad krse: "csak az n szemeinek". MEGJEGYZS: Egyszer S2K md (0) ersen ellenjavallt! MEGJEGYZS: Bizalmi adatbzis nem rhat. A nv lehet, hogy nem kezddhet szmmal! A nv legalbb 5 karakter kell legyen! Ehhez szksg van a titkos kulcsra. NnMmEeRrKkNincs megfelel alrs a titkoskulcs-karikn. Nem ll rendelkezsre segtsg.Nem ll rendelkezsre segtsg "%s" tmhoz.Nincs megadva ok.Nincs ilyen felhasznli azonost. Nincs %d index felhasznlazonost! Ez nem rvnyes e-mail cm. Megjegyzs: Ez a kulcs le lett tiltva. Megjegyzs: Ez a kulcs lejrt! Nem trltem semmit. Krem, elbb javtsa ki a hibt! Krem, ne rakja az e-mail cmet a teljes nvbe vagy a megjegyzsbe! Krem, adjon meg egy j fjlnevet! Ha RETURN-t/ENTER-t nyom, akkor a szgletes zrjelben lev alaprtelmezett nevet hasznlom.Krem, adjon meg egy opcionlis megjegyzst!Krem, adja meg az adatllomny nevt: Krem, adja meg a jelszt! Ezt egy titkos mondat. Krem, oldja meg ezt a lehetsges biztonsgi problmt! Krem, vegye figyelembe, hogy az itt lthat kulcs rvnyessge nem felttlenl helyes, amg jra nem indtja a programot! Krem, tvoltsa el a kijellseket a titkos kulcsokrl! Krem, ismtelje meg az elz jelszt ellenrzskppen!A hibkat (angolul) a cmre rja meg! Krem, vlasszon ki pontosan egy felhasznlazonostt! Krem, vlassza ki a visszavons okt: Krem, adja meg, milyen kulcsot kvn: Krem, adja meg, meddig legyen rvnyes a kulcs! 0 = a kulcs soha nem jr le = a kulcs n napig rvnyes w = a kulcs n htig rvnyes m = a kulcs n hnapig rvnyes y = a kulcs n vig rvnyes Krem, adja meg, meddig legyen rvnyes az alrs! 0 = az alrs soha nem jr le = az alrs n napig rvnyes w = az alrs n htig rvnyes m = az alrs n hnapig rvnyes y = az alrs n vig rvnyes Krem, hasznlja elbb a "toggle" parancsot! Krem, vrjon, entrpit gyjtk! Vagy inkbb csinljon kzben valamit a gpen, az az entrpim minsgt is javtani fogja! Elsdlegeskulcs-ujjlenyomat:Nyilvnos kulcs (pubkey): Nyilvnos kulcs nincs engedlyezve. Teljes nv: Valban ltrehozzam a visszavon igazolst? (i/N) Valban trli ezt az nalrst? (i/N)Visszavons oka: %s Ismtelje meg a jelszt! Ismtelje meg a jelszt: A kvnt kulcsmret %u bit. Visszavon igazols ltrehozva. A visszavon igazolst ltrehoztam. Krem, tegye olyan helyre, ahol ms nem fr hozz! Ha valaki megszerzi ezt az igazolst, hasznlhatatlann teheti vele az n kulcst. Okos dolog kinyomtatni s megrizni ezt az igazolst, arra az esetre, ha az adathordoz olvashatatlann vlik. De vigyzat: az n gpnek nyomtatsi rendszere is trolhatja az adatot, s msok esetleg hozzfrhetnek ehhez! Titkos kulcs rendelkezsre ll. Az elsdleges kulcs titkos rszei nem elrhetk. Az alrs lejrt: %s. Az alrs lejr: %s. Alrs-jells: Alrsi eljrsmd: Szintaxis: gpg [opcik] [fjlok] Alrs, ellenrzs, titkosts vagy visszafejts. Az alaprtelmezett mvelet a bemeneti adattl fgg. A vletlenszm-genertor csak egy szksgmegolds, hogy a program elinduljon, semmikppen nem egy ers vletlenszm-genertor! NE HASZNLJON SEMMILYEN ADATOT, AMIT EZ A PROGRAM ELLLT! "%s" nalrsa PGP 2.x stlus. Ez az alrs nem rvnyes. rtelmetlen eltvoltani a kulcskarikrl.Nincsenek preferencik egy PGP 2.x felhasznlazonostn! Ez a parancs %s mdban nem engedlyezett. Ez egy olyan alrs, amely sszekti a felhasznlazonostt a kulccsal. ltalban nem j tlet egy ilyen alrst eltvoltani. Az is lehetsges, hogy a GnuPG tbb nem tudja hasznlni ezt a kulcsot. Csak akkor tegye ezt, ha valami okbl ez az nalrs nem rvnyes, s rendelkezsre ll egy msik!Ez egy rvnyes alrs a kulcson. Norml esetben nincs rtelme trlni, mert fontos lehet ahhoz, hogy rvnyestse ezt a kulcsot, vagy egy msikat, melyet ezzel a kulccsal igazolnak.Ez a kulcs hozznk tartozik. Ez a kulcs tiltott.Ez a kulcs lejrt!Ez a kulcs lejr: %s. Ez a kulcs nem vdett. Ezt az alrst nem tudom ellenrizni, mert nincs meg a hozz tartoz kulcs. Ajnlatos lenne elhalasztani a trlst addig, amg meg nem tudja, hogy melyik kulcsot hasznltk, mert ez az alr kulcs bizalmi kapcsolatot hozhat ltre egy mr hitelestett kulcson keresztl.Ez az alrs lejrt %s idpontban. Ez hasznlhatatlann tenn a kulcsot PGP 2.x-ben. Visszavonja: Hogy a bizalmak hlzatt felptsk, a GnuPG-nek tudnia kell, hogy mely kulcsok alapveten megbzhatak - ltalban ezek azok a kulcsok, melyek titkos kulcshoz hozzfr. Vlaszoljon "igen"-nel, ha kulcsot alapveten megbzhatnak jelli! sszesen feldolgoztam: %lu tmrtetlenHasznlat: gpg [opcik] [fjlok] (-h a sghoz)Hasznlat: gpgv [opcik] [fjlok] (-h a sghoz)"%s" felhasznli azonost lejrt."%s" felhasznlazonostn nincs nalrs."%s" felhasznli azonostt visszavontk.A felhasznli azonost mr nem rvnyes.FIGYELEM: "%s" elavult opci! FIGYELEM: %s hatstalantja %s-t! FIGYELEM: 2 bizalmas informcikat tartalmaz llomny van! FIGYELEM: Ez egy PGP 2.x stlus kulcs. Kijellt visszavon hozzadsa azt okozhatja, hogy egyes PGP verzik visszautastjk ezt a kulcsot! FIGYELEM: Ez egy PGP2 stlus kulcs. Fotazonost hozzadsa azt okozhatja, hogy a PGP egyes verzii visszautastjk ezt a kulcsot. FIGYELEM: Ezt a kulcsot a kijellt visszavon visszavonta! FIGYELEM: Ezt a kulcsot a tulajdonosa visszavonta! FIGYELEM: Ez a kulcs nincs hitelestve megbzhat alrssal! FIGYELEM: Ez a kulcs nincs igazolva kellkppen megbzhat alrssal! FIGYELEM: Ezt az alkulcsot a tulajdonosa visszavonta! FIGYELEM: Nem bzunk a kulcsban, amit hasznlunk! FIGYELEM: NEM bzunk ebben a kulcsban! FIGYELEM: Gyenge kulcsot talltam. Krem, vltoztassa meg ismt a jelszt! FIGYELEM: A(z) "%s" llomny res. FIGYELEM: A felhasznlazonostt %d msodperccel a jvben rtk al. FIGYELEM: A kijellt visszavon kulcs megadsa nem csinlhat vissza! FIGYELEM: A titkostott zenetet manipulltk! FIGYELEM: rvnytelen mret random_seed llomny. Nem hasznlom. FIGYELEM: Az zenet szimmetrikus titkostst gyenge kulccsal vgeztk. FIGYELEM: Az zenetet nem lttk el integritsvdelemmel. FIGYELEM: Tbbszrs alrst rzkeltem. Csak az elst ellenrzm. FIGYELEM: Nincs kijellt elsdleges felhasznlazonost. Ez a parancs azt okozhatja, hogy egy msik azonost lesz elsdlegesknt hasznlva. FIGYELEM: Semmit sem exportltam. FIGYELEM: "%s" opcii csak a kvetkez futskor lesznek rvnyesek! FIGYELEM: A rejtjelezett munkafolyamat-kulcs lehet, hogy nem biztonsgos! FIGYELEM: A program core llomnyt hozhat ltre! FIGYELEM: Cmzett megadva (-r), de nincs nyilvnos kulcs titkosts! FIGYELEM: Alrskivonat-konfliktus az zenetben. FIGYELEM: a kulcsot visszavonhattk (visszavon kulcs nincs jelen). FIGYELEM: Nem tudom kifejteni a %% jeleket a jellsben (tl hossz). Kifejts nlkl hasznlom. FIGYELEM: nem tudom trlni a "%s" tmeneti knyvtrat: %s FIGYELEM: Nem tudom trlni az ("%s") tmeneti llomnyt: "%s": %s. FIGYELEM: Nem biztonsgos memrit hasznlunk! FIGYELEM: Nem biztonsgos vletlenszm-genertort hasznlok!!! Nagyon sok vletlen bjtra van szksgnk. J tlet, ha csinl valami egyb mveletet (gpel a billentyzeten, mozgatja az egeret, hasznlja a lemezeket) a prmszm generlsa alatt. Ez segti a vletlenszm- genertort, hogy entrpit tudjon gyjteni. Mieltt alr egy felhasznli azonostt egy kulcson, ellenriznie kell, hogy a kulcs a felhasznli azonostban megnevezett szemlyhez tartozik. Msok szmra hasznos lehet, ha tudjk, hogy milyen gondosan ellenrizte n ezt. "0" azt jelenti, hogy nem tesz az ellenrzs gondossgra vonatkoz kijelentst. "1" azt jelenti, hogy n hiszi, hogy a kulcs annak a szemlynek a tulajdona, aki azt lltja, hogy az v, de n nem tudta ezt ellenrizni, vagy egyszeren nem ellenrizte ezt. Ez hasznos egy "persona" tpus ellenrzshez, mikor n egy pszeudonim felhasznl kulcst rja al. "2" azt jelenti, hogy n a kulcsot htkznapi alapossggal ellenrizte. Pldul ez azt jelentheti, hogy ellenrizte a kulcs ujjlenyomatt, s sszevetette a kulcson szerepl felhasznlazonostt egy fnykpes igazolvnnyal. "3" azt jelenti, hogy alaposan ellenrizte a kulcsot. Pldul ez azt jelentheti, hogy a kulcs ujjlenyomatt a tulajdonossal szemlyesen tallkozva ellenrizte, egy nehezen hamisthat, fnykpes igazolvnnyal (mint az tlevl) meggyzdtt arrl, hogy a szemly neve egyezik a kulcson levvel, s vgl (e-mail vltssal) ellenrizte, hogy a kulcson szerepl e-mail cm a kulcs tulajdonoshoz tartozik. A 2-es s 3-as szintekhez adott pldk *csak* pldk. Vgs soron n dnti el, hogy mit jelentenek nnek a "htkznapi" s "alapos" kifejezsek, amikor msok kulcst alrja. Ha nem tudja, hogy mit vlaszoljon, rjon "0"-t!A kvetkez alrsokat fogja visszavonni: n a(z) %s karakterkdolst hasznlja. Nem vltoztathatja meg egy v3 kulcs lejrati dtumt! Nem trlheti az utols felhasznlazonostt! Nem adott meg felhasznli azonostt! (Hasznlhatja a "-r" opcit.) n nem akar jelszt. Ez valsznleg *rossz* tlet! n nem akar jelszt. Ez valsznleg egy *rossz* tlet! De azrt megcsinlom. Brmikor megvltoztathatja a jelszavt az "--edit-key" opcival. Lehet, hogy nem adhat kijellt visszavont egy PGP 2.x-stlus kulcshoz. Lehet, hogy nem adhat fotazonostt egy PGP2 stlus kulcshoz! Lehet, hogy nem rakhat OpenPGP alrst egy PGP 2.x kulcsra --pgp2 mdban. Legalbb egy kulcsot ki kell vlasztania! Legalbb egy felhasznlazonostt ki kell vlasztania! Most szksg van egy jelszra (vagy mondatra), amely a titkos kulcst vdi. n a kvetkez felhasznli azonostt vlasztotta: "%s" Ajnlatos megadni a visszavons okt. A helyzettl fggen vlasszon a kvetkez listbl: "A kulcs kompromittldott." Hasznlja ezt akkor, ha oka van azt hinni, hogy titkos kulcsa illetktelen kezekbe kerlt! "A kulcsot lecserltk." Hasznlja ezt akkor, ha a kulcsot lecserlte egy jabbra! "A kulcs mr nem hasznlatos." Hasznlja ezt akkor, ha mr nem hasznlja a kulcsot! "A felhasznlazonost mr nem rvnyes." Hasznlja ezt akkor, ha azt lltja, hogy a felhasznlazonost mr nem hasznlatos! ltalban rvnytelen e-mail cmet jelent. Az n jelenlegi alrsa a(z) "%s" kulcson lejrt. Az n jelenlegi alrsa a(z) "%s" kulcson helyi alrs. Mit vlaszt? Mit vlaszt? Az n rendszere nem tud megjelenteni 2038 utni dtumokat. Azonban kezelni helyesen tudja ket egszen 2106-ig. [fjlnv][visszavons][nalrs][bizonytalan]"%s" mr tmrtett. "%s" nem szablyos llomny. Figyelmen kvl hagyom. "%s" nem egy rvnyes hossz kulcsazonost. fotazonost hozzadsavisszavon kulcs hozzadsafelhasznli azonost hozzadsaPnclfejlc: Pncl: %s %s titkostott adatot felttelezek. Azt felttelezem, hogy az alrt adat a %s llomnyban van. hibs MPIrossz URIrossz igazolsrossz kulcsrossz jelszrossz nyilvnos kulcsrossz titkos kulcsrossz alrsmg szkszavbb mdBinrisbuild_packet sikertelen: %s. Nem tudom bezrni a(z) "%s" llomnyt: %s. Nem tudok kapcsoldni "%s" objektumhoz: %s Nem tudom ltrehozni a(z) "%s" llomnyt: %s. Nem tudom a "%s" knyvtrat ltrehozni: %s. Nem tudom letiltani a core fjlokat: %s. Nem tudok ltrehozni %d bitesnl kisebb prmszmot. Nem tudom kezelni a(z) %d. szm nyilvnos kulcs algoritmust! Nem tudok %d karakternl hosszabb szvegsorokat kezelni! Nem tudom megnyitni %s-t! Nem tudom megnyitni a(z) "%s" llomnyt: %s. Nem tudom megnyitni a(z) "%s" alrt adatot! nem lehet megnyitni a kulcskariktNem tudom olvasni a(z) "%s" llomnyt: %s. Nem tudom a stat mveletet elvgezni a(z) "%s" llomnyon: %s. Nem tudok szimmetrikus ESK csomagot hasznlni a S2K md miatt! Nem tudom rni a(z) "%s" llomnyt: %s. A felhasznl megszaktotta a mveletet. Nem adhat meg PGP 2.x stlus kulcsot kijellt visszavonnak! Nem tudom elkerlni a gyenge kulcsot a szimmetrikus titkosthoz. %d alkalommal prbltam! kulcstulajdonos megbzhatsgnak belltsajelszvltoztatsA ltrehozott alrs ellenrzse sikertelen: %s. Ellenrzm a bizalmi adatbzist. hibs ellenrzsszegA %d%s rejtjelez algoritmus ismeretlen vagy tiltott. completes-needed nagyobb kell legyen 0-nl! Egymsnak ellentmond parancsok! ascii pnclozott kimenet ltrehozsaAz adatot nem mentettem el. Hasznlja az "--output" opcit a mentshez! Pncl eltvoltsa nem sikerlt: %s adat visszafejtse (alaprtelmezs)Visszafejts sikertelen: %s. Visszafejts rendben. A kulcsblokk trlse sikertelen: %s. ne csinljon semmi vltoztatstPnclozs nem sikerlt: %s adat titkostsa%lu jelszval rejtjelezve 1 jelszval rejtjelezve Ismeretlen algoritmussal (%d) titkostva. zenet titkostsa --pgp2 mdban IDEA rejtjelezt ignyel! titkosts csak szimmetrikus rejtjelezvelHiba "%s" ltrehozsakor: %s Hiba a(z) "%s" kulcskarika ltrehozsakor: %s Hiba a jelsz ltrehozsakor: %s. Hiba a zr sorban! Hiba "%s" olvassakor: %s Hiba a kulcsblokk olvassakor: %s Hiba a "%s" kulcskarika rsakor: %s Hiba a(z) "%s" nyilvnoskulcs-karika rsakor: %s. Hiba a(z) "%s" titkoskulcs-karika rsakor: %s. kulcsok exportlsakulcsok exportlsa kulcsszerverreA kls programok hvsa tiltott, mert az "options" llomny engedlyei nem biztonsgosak. Bizalmi adatbzis (%s) inicializlsa sikertelen! Nem tudtam jrapteni a kulcskarika cache-t: %s llomnyzrsi hiballomnyltrehozsi hiballomnytrlsi hiballomny ltezikllomnymegnyitsi hiballomnyolvassi hiballomnytnevezsi hiballomnyrsi hibaA %s (%d) rejtjelez hasznlata srti a cmzett preferenciit! ltalnos hibaj kulcspr ltrehozsavisszavonsi igazols ksztseElavult, 16 bites ellenrzsszeget hozok ltre titkos kulcs vdelmhez. GPG gynk nem elrhet ebben a munkafolyamatban. %d gpg-agent protokollverzi nem tmogatott! iIfFkKhHkulcsok importlsa kulcsszerverrlkulcsok importlsa/sszefzseA bemeneti sor (%u) tl hossz, vagy hinyzik a soremels. A bemeneti sor hosszabb, mint %d karakter. rvnytelen S2K md; 0, 1 vagy 3 lehet. rvnytelen argumentumrvnytelen pnclrvnytelen pnclfejlc: rvnytelen pncl: %d karakternl hosszabb sor. rvnytelen alrsfejlc! rvnytelen ktjeles sor: rvnytelen alaprtelmezett preferencik! rvnytelen default-cert-level; 0, 1, 2 vagy 3 lehet. rvnytelen export opcik! rvnytelen kivonatol algoritmus: %s rvnytelen import opcik! rvnytelen kulcskarikarvnytelen min-cert-level; 0, 1, 2 vagy 3 lehet. rvnytelen csomagrvnytelen jelszrvnytelen szemlyes rejtjelez-preferencik! rvnytelen szemlyes tmrtpreferencik! rvnytelen szemlyes kivonatolpreferencik! rvnytelen gykrcsomagot talltam a proc_tree() fggvnyben! rvnytelen rtk! Kulcsexportls sikertelen: %s A kulcs %lu msodperccel a jvben kszlt. (Idugrs vagy raproblma.) A kulcs %lu msodperccel a jvben kszlt. (Idugrs vagy raproblma.) A kulcs nincs "nem biztonsgosnak" jellve, nem tudom a ptl vletlenszm-genertorral hasznlni! "%s" kulcskarikt ltrehoztam. kulcsszerverhibaVtel a kulcsszerverrl sikertelen: %s Frissts a kulcsszerverrl sikertelen: %s Keress a kulcsszerveren sikertelen: %s Klds a kulcsszerverre sikertelen: %s Kulcsmret rvnytelen; %u bitet hasznlok. Kulcsmretet felkerektettem %u bitre. kilistzza a kulcs- s felhasznlazonostkatkulcsok listzsakulcsok s ujjlenyomatok listzsakulcsok s alrsok listzsapreferencik listzsa (szakrt)preferencik listzsa (rszletes)titkos kulcsok listzsaklnll alrs ksztseidblyeg-konfliktus esetn csak figyelmeztessenmake_keysig_packet sikertelen: %s Hibs formj CRC. Nem megfelel formj GPG_AGENT_INFO krnyezeti vltoz! rossz formj felhasznli azonostmarginals-needed nagyobb kell legyen 1-nl! trakom a kulcsalrst a megfelel helyre. nNEgymsba gyazott olvashatszveg-alrsok! hlzati hibasoha "%s" j konfigurcis llomnyt ltrehoztam. A bizalmi adatbzis kvetkez ellenrzse: %s. nemNincs hozz tartoz nyilvnos kulcs: %s Nincs alaprtelmezett titkoskulcs-karika: %s Nem szleltem entrpiagyjt modult. Nincs szksg a bizalmi adatbzis ellenrzsre. Kls program meghvsa nem tmogatott. Nincs titkos kulcs. Nincs alrt adat. nincs ilyen felhasznli azonostNem talltam alapveten megbzhat kulcsot. Nem talltam rvnyes OpenPGP adatot. Nincsenek rvnyes cmzettek! Nem rhat kulcskarikt talltam: %s Nem rhat nyilvnoskulcs-karikt talltam: %s Nem rhat titkoskulcs-karikt talltam: %s Nem klnll alrs. nem titkostottnem feldolgozottnem tmogatottMegjegyzs: random_seed llomny (vletlenszm-genertor llapota) res. Megjegyzs: random_seed llomnyt nem frisstettem. Rendben, mi vagyunk az anonim cmzett. A DEK rgi kdolsa nem tmogatott. Rgi stlus (PGP 2.x) alrs. A mvelet nem lehetsges biztonsgos memria nlkl. "%s" opcis fjl: %s Eredeti fjlnv: '%.*s'. Kulcstulajdonos megbzhatsgi adatait trltem. Nem ismtelte meg helyesen a jelszt! Prblja jra!Krem, hajtson vgre egy --check-trustdb parancsot! Krem, adjon meg egy opcionlis, de nagyon ajnlott e-mail cmet!Tovbbi informci a http://www.gnupg.org/documentation/faqs.html cmen tallhat. Krem, ezt hasznlja helyette: "%s%s" Korai llomnyvg (a CRC-ben). Korai llomnyvg (nincs CRC). Problma a titkostott csomag kezelsekor! Problma van az gynkkel. Letiltom a hasznlatt. fellrs eltt rkrdezs%d%s vd algoritmus nem tmogatott. A nyilvnos s titkos kulcsokat ltrehoztam s alrtam. Nyilvnos kulcs visszafejts sikertelen: %s A nyilvnos kulcs nem passzol a titkos kulcshoz! Nyilvnos kulccsal titkostott adat: j DEK. nyilvnos kulcs nem tallhatkKkilps|kilepeskilps ebbl a menblquoted printable karakter a pnclban - valsznleg egy bugos MTA bne. Olvasok a "%s" llomnybl. Az opcikat a "%s" llomnybl olvasom. Olvasom a szabvnyos bemenetet... Visszavons oka: kulcsok eltvoltsa a nyilvnoskulcs-karikrlkulcsok eltvoltsa a titkoskulcs-karikrlerforrshatrMegjegyzs a visszavonshoz: Felkerektve %u bitre. ments s kilpskulcsok keresse kulcsszerverentitkos kulcs nem ll rendelkezsreTitkos kulcsrszek nem llnak rendelkezsre. N. felhasznli azonost kivlasztsaAz igazolshoz kivlasztott kivonatol algoritmus rvnytelen! A kivlasztott rejtjelez algoritmus rvnytelen! A kivlasztott kivonatol algoritmus rvnytelen! megmutatja ezt a sgtkulcs alrsakulcs alrsa helyilegkulcs alrsa vagy szerkesztseAlrs-ellenrzs elnyomva. Alrs sikertelen: %s Alrom:Kihagyva: Nyilvnos kulcs mr be lett lltva. Kihagyva: Nyilvnos kulcs mr be lett lltva alaprtelmezett cmzettnek. Kihagytam: titkos kulcs mr jelen van. %d tpus blokkot kihagyom. Klnll visszavons. Hasznlja a "gpg --import"-ot az alkalmazshoz! 0x%02x osztly klnll alrs. A %d tpus alcsomag kritikus bitje belltott. Rendszerhiba kls program hvsakor: %s. a megadott kulcskarikrl vegye a kulcsokatSzvegmdA megadott igazolsi eljrsmd URL-je rvnytelen! A megadott alrsi eljrsmd URL-je rvnytelen! Nem tudom ellenrizni az alrst. Ne felejtse el, hogy az alrst tartalmaz llomnyt (.sig vagy .asc) kell az els helyre rni a parancssorban! Van egy titkos kulcs a "%s" nyilvnos kulcshoz! Ezt okozhatja egy hinyz nalrs. Lehet, hogy ez az zenet hasznlhatatlan a %s szmra! idblyeg-konfliktusTl sok bejegyzs van a nyilvnoskulcs-gyorsttrban - letiltom. hibs bizalmi adatbzis%lu bizalmi rekord nem a krt tpus (%d). %lu bizalmi rekord, %d krstpus: olvass sikertelen: %s. %lu bizalmi rekord, %d tpus: rs sikertelen: %s. Bizalmi adatbzis %lu. rekord: lseek sikertelen: %s. Bizalmi adatbzis %lu. rekord: rs sikertelen (n=%d): %s. Bizalmi adatbzis tranzakcija tl nagy. Bizalmi adatbzis: lseek sikertelen: %s. Bizalmi adatbzis: olvass sikertelen (n=%d): %s. Bizalmi adatbzis: szinkronizci sikertelen: %s. Nem tudom megjelenteni a fotazonostt! Nem tudom a vgrehajtani a kls programot. Nem tudom beolvasni a kls program vlaszt: %s Nem tudom a vgrehajtsi elrsi utat %s rtkre lltani! Nem tudom az IDEA rejtjelezt hasznlni az sszes cmzett kulcshoz. nem vrt adatnem megvalstott rejtjelez algoritmusnem megvalstott nyilvnos kulcs algoritmusIsmeretlen mdismeretlen rejtjelez algoritmusismeretlen tmrt algoritmusismeretlen kivonatol algoritmusismeretlen csomagtpusIsmeretlen vdelmi algoritmus! ismeretlen nyilvnos kulcs algoritmusismeretlen alrsosztlyismeretlen verziA kls program nem termszetes mdon rt vget. nem tmogatott URIhasznlhatatlan nyilvnos kulcs algoritmushasznlhatatlan nyilvnos kulcshasznlhatatlan titkos kulcsminden kulcs frisstse kulcsszerverrlFrissts sikertelen: %s. Titkoskulcs-blokk frisstse sikertelen: %s bizalmi adatbzis frisstseHasznlat: gpg [opcik] kimeneti llomny megadsakanonikus szveges md hasznlataElszr azt trlje a "--delete-secret-keys" opcival! felh. azonost alrshoz s visszafejtshez"%s" felhasznli azonostt mr visszavontk. %s rejtjelezst hasznlok. bbeszd mdalrs ellenrzsegyenge kulcsGyenge kulcs jtt ltre. jraprblom. Furcsa mret (%d) titkostott munkafolyamatkulcs. Sima alrst rok. sszefz alrst rok. rom a kulcsot a %s llomnyba. rom a titkos kulcsot a %s llomnyba. nalrst rok. rok a "%s" llomnyba. rok a szabvnyos kimenetre. rossz titkos kulcs hasznlataiIigenOlvashat szveget PGP 2.x stlus kulccsal csak --pgp2 mdban rhat al! Klnll alrst PGP 2.x stlus kulcsokkal csak --pgp2 mdban kszthet! Csak 2048 bites, vagy rvidebb RSA kulcsokkal titkosthat --pgp2 mdban! Csak klnll s olvashatszveg-alrst kszthet --pgp2 mdban! Nem rhat al s titkosthat egyszerre --pgp2 mdban! Nem adhat meg egy kulcsot sajt kijellt visszavonjnak! Tallt egy programhibt... (%s:%d) Lehet, hogy nem hasznlhatja %s-t %s mdban! Csak llomnyokat (pipe-ot nem) hasznlhat --pgp2 mdban! |L|llapotinformcik rsa L llomnylerra|NV|titkosts NV rszre|N|tmrtsi szint belltsa N-re (0: tilts)|[fjl]|olvashat szveg alrsa|[fjl]|alrs ksztse|algo [fjlok]|zenet kivonatnak kirsagnupg-1.4.20/po/it.gmo0000644000175000017500000043277312635457221011424 00000000000000(Pl-l?llmmnnno"o?o\oyo2o7o2p#4pDXp.pIp7q'Nqvq qqqqqr#r@rYrvr+r&r#r(r(sAsZszs(ssss$t9tOt&ftt,ttt! u+uAu\uwu uu uuuuvv&v@v]v*zv"v]vB&wiw/|w=w(w.x3Bx!vx(xxx'x y*y=yWysyy,y'yyz")zLzQzlzBz=z {"({%K{&q{!{%{"{#|''| O|p||||||(|$&}K}`}#t}}$}}}!~<~Y~ x~~&~%~ ~, 47lG^s'.A T'u"ׁ-(40]2H   !.LhA/ބ0\?1΅D-(0V.I*++'W χ93P4-'.щ$ . 8?F4:3Oi,~(8ԋ# &1(X&׌76--d%390&<WG@܎>+\=ƏΏޏ"1 A:M#ѐ /5JH5-~$'ђ8&25Y.5*!.A0p&,Ȕ +68I#"ƕ.H"($FEk1;yi8$3K`! :MgBޜ)%@fn.*x Ğ*!0؟' <1n+",ؠ/15"g,"2ڡ )(J s *ʢܢ $6Sl 5I"(5UFg 1ϥ%'GEE,or $8'>Tc/HNxEǪ, ":#]-+)۫&,'>Ѯ 2BKd+,3ٯ 1K(a#+"ڰ+") Lm?%);Xv.(ò } /00!Ikp!ζ%>SfojK@E-9AO{0˹/5,'b.3-,#!9[$w,(ɽ-&Tg7T q~*+* Cd}#$  ;6E%|72'r>1Y=I4H#g=?D)@n+1N I\I55&;\?B<HX-"H;?< B])C:.I>x2=<(@eFHU6$ -213Ie>K@:5{*7,0A0r4 2,:-6h5.h$*&1#25>h*Y=0M9A"{&!3>cZ%D,)5V2_ @ K V a lw  %"8[){&+5.GV k x. BE5c$ !8?X[(q" =Yw,'.%2>+q%CX5m ;<*\ *C:Y&.D-S <A(7M/l 1)@Wh,H- EQ%Z/0.&(3O  0!$>=c%#- 2S'r#;Y'u&&&Bi / ,/-"]9K%$,&Q$x#D#'*Rcu 1$-@4u $!#5LD`+/ 6 0Ct}/"&('%P%v$ ..Le2'2Zj/+$&>$e',, >3 r$,IJ_"#( L!m*-) W$c' ."+#)O#y-%65H/~"';40p"%/2M!a: !!(>+g8!4 0@q26)9;u&GH BX     # - M ] w        ? M e         '7 _ ~  .   ( 2 !8  Z { ,      $'E)Hr z%%,$Q2n3&"41Cu!%%Ci     #& ;)Eo$<!A6Z,;#M;-":"P-s+&*596o!&$ 1C2XIF3K^y01D#v#++,!C2e$*2.Et*  5Cc%&$@#Y&}3%*%Jp(-96U:,0 /9 i 7~ * . 7!;H!0!1!;!#"%;"a")p"3"6":# @#K#^#9q##5#-$".$Q$ q$$-$$$$ %5*%$`%%+%4%%&!'&CI&*&(&0&'2'.;'-j'*''+T(G(2(/(%+)FQ))1)#)*!*@*(]**-*/*,* &+"0+)S+}++ ++2+1%,W,`,#},#,!,",- -8-:W-I-A-".A. S.].p....... /2/R/!k//////0#0 90E0U0o00 0000 0 11216J1151#1 12'2=2N2*g2!2 22G23*3 =3^3{33-3,33454F4 b44444444D4F=5E5D5E6AU6766677=>7>|77$777<587r8F8899!9 [9|9 9$99#99#:7:*N:*y::3t<<U=j>>*a? ??!?"?@/@M@:m@=@7@7A@VA7AJAEB8`BB B#B&B* C 5C VCwC)CC C.C)D%H,vHmHbItI9I<I+I3(J-\J J'JJJ0J(KGK"\KKKK:KBL$JL oL!LLLLILK0M|M4M9M> N3HN;|N2N2N8O.WO$OO*OOP%P+6P*bPPP&P#P) Q*3Q*^Q/Q$Q&Q"R$(R!MR/oRRBRIRTSTpTT)TTTTU"U 5U'VU~U(U UU6U-&V,TV2VQV W 'X 4X%@X'fX+XX5X- Y*;Y]fY0YY@ ZNZ)kZZEZZ[-[ F[P[k[[%[)[[\$\';\;c\ \=\8\ ]5]8^ K^3U^ ^^A^9^8_'X_!____:_2-`B``(`*`/`+'aSaha}aaNa1a)b*Bb*mb5b-b=b>:c4yc+ccDc:dCdUd[d5yd#dddBd9e)Yeee.e9ef6f#&g?Jg/g/g3gAh&`h>h5hCh0@i#qi6i:ij:%j`j~jjj5j-j k5k31npn",oOo%no?o oo p&p8pXppqqqr$*r*OrzrRrrs s7s3UsKs s&st"tO>tt/Vu,uu5v%vBv1AwJsw!w4w1x>Gx?xAx&y7/y*gyGy,y(z-0z3^z z5zz$z{".{Q{&i{{{ {"{ | |H|+} -}4N}}#}}#} ~n~(~<~0~#%I=IFy #)M,/8M{s-vKG08$i&"+؄'$LJ+Bn$#"@cu$5݈>8R 0ɉ,-;=,y:+- ;HU*ɋ&)&P)wC<"AҎ"=BP*'*';Pl32ɑ*$3vXWϒE'7m4dD5ޔ4:I(0<ޕ:VvQ#nʘ2;9Y Ț9/'. Vd01$ +%H#n !!՝!6 S6`)>ߞ@_ JBC0JtC*2.Ka"EТeT|2ѣ6];WXCJ7]ƥW$O|V̦Y#8}4E1Jܨ)'^QW7T@K;WPuDƫC \OScrd0׭,B5CxCXRY`Z Dh>C;0Al>F'4<\/Aɳ< 8H4/,ں$A,/nA[<5S/JTν=#-a/2HO;v/w2-6  6'l^ .9HX an }(') .46c;H#C^|@ )'\Q*B.K[j   -7B z#.)*&T){(6=8C5|?3&A`y'!9&8J_! KPA0*" %#Dh,-G!Gi. ;%aMxX+K2a=!  G )h"!,*+WN - -9Gg/+2&Y)k #= ':Nb&-4;*W$:<&FZy,0#04I~1.767&n  C( 550k1Li.;76(,_=yD3L$""4$RDw-L%?!e'!& BQc0: !O.D~(9/1N12,) </Gw!5"(*D"o7#" #.7R(E0._t-0+*:@4{2-Da7?``Y%# $ E$f$$"/50e-/(7,1d=92/A2q1<:5N6/9"%THBE:&VaP )&#P;t"*+;*:f<$*?.9n"$A=26pJ+ 15]g]O#(s'1/*Z$v04.+0\+{3(  6W'h". $Ot|0 +0%9,_"9,"7O;0 +)>7h%A+J4N(4*,WFo<,;h3?>4O i u#2+!M0lA2+O>{5? (MEv- 9Vr*2&.,C-pAA#" 4F 8{ 2   E c f k _ J - L ] /|   $ # #% >I A * ) 1 =Q E 0 L S+t'26G-^+' ! 7&El!%$-$M0r3? 3J6~0& &)4P<J: :H231':8b56DEM@??%T6z:3@4CuQ*T<3**UJm(F'Z)7!7!`Y9.@#&d >?5K<I6a54Q  U 2v ,  " !*5!!`!6!6!8! )"(5"3^"&" "&"+#I-#Nw##&#*#+!$'M$)u$:$%$V%OW%i%-&?& U&b& v&'&0& &"&" '%/',U'*''+''($1(+V(((&(((0(.)M)/k))4)")**2*J*=j*(*G*,+"F+i+z++)+8+, 5,C,VL,#,,&,- -+--8Y-:--2-.(=.2f.'....*///2/S9/[/W/KA0R0M0G.1=v1>1D1E82~272E2H3B`3T33$4?:4*z44 4444*5F51]55(505XYxBN @W/G ^fXK23#,Vyj @wjfK=w8nAu;DK  FvT}dj9 buq_h}\9N@:d>]SRDEMar',9g%^ "swn8%b# Pr4eaC|=] &J"C64.DJ5gd)1p^7U|$H]9LGR]= i}c.a:z(-O<yAmQLxZY#[,!3[' p#$EL}z@ n)?6UBL#;Yj~+z~?"ive50,Q}xo?_Ntl7tj>SA4+y Uc36^ 2E>~erdh$|)6K yeuwD?g1sR.W{<OtBk7*XTX, \h2H!: qBm%&o"? 7;h -I)m>{ET P'kB-`<1rQ]/*T=zI`n<%obIO8;{ZqVFeMXs8+J^R|U/.NH*IF@):`4M[4[c$mt`d/5q\V {&F~["ohY  1'_\ vZ3MITn6-D~27k.(pO fC+*rugHvC!YMfWp :\mlaUi<!SJEz>0u-SAxocc+l l0iGsvZ|Q/ 08QxHW`a=5iZJ &wC_b10PLA$5! F( W  SO9V_K'Pfgl%k2qb3yV;tGR N (pP{*sG(&k Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2014-11-16 16:08+0100 Last-Translator: Milo Casagrande Language-Team: Italian Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2013-12-26 14:41+0000 X-Generator: Poedit 1.6.10 Plural-Forms: nplurals=2; plural=(n!=1); Inserire l'ID utente, termina con una riga vuota: Non ci sono abbastanza byte casuali disponibili. Svolgere qualche altro lavoro per dare al SO la possibilità di raccogliere altra entropia (sono necessari altri %d byte) Scegliere un'immagine da usare per l'identificazione fotografica: deve essere un file JPEG. L'immagine viene salvata nella propria chiave pubblica, se viene usata un'immagine molto grande, anche la tua chiave lo diventerà. Dimensioni vicine a 240x288 sono una buona scelta. Algoritmi supportati: È necessario un ID utente per identificare la propria chiave; il software costruisce l'ID utente a partire da nome reale, commento e indirizzo email in questa forma: "Mario Rossi (commento) mario.rossi@example.net" conosciuto anche come "%s" con %s chiave %s importate: %lu non modificate: %lu nuove sottochiavi: %lu nuovi ID utente: %lu non importate: %lu senza ID utente: %lu "%s": preferenza per l'algoritmo di cifratura %s "%s": preferenze per l'algoritmo di compressione %s "%s": preferenza per l'algoritmo di digest %s (sottochiave sull'ID della chiave primaria %s) Non è sicuro che la firma appartenga al proprietario. La firma è probabilmente una falsificazione. Non ci sono indicazioni che la firma appartenga al proprietario. Questo può significare che la chiave è stata falsificata. algoritmi non disponibili su questi ID utente: nuove firme: %lu "%s" Numero di serie della scheda= Impronta digitale della chiave = Impronta digitale della sottochiave: chiavi segrete lette: %lu nuove chiavi saltate: %lu ID utente puliti: %lu Impronta digitale della sottochiave: firme pulite: %lu (%c) Esce (%c) Commuta la funzione di autenticazione (%c) Commuta la funzione di cifratura (%c) Commuta la funzione di firma (%d) DSA (imposta funzioni personalizzate) (%d) DSA (solo firma) (%d) DSA ed Elgaman (%d) Elgamal (solo cifratura) (%d) RSA (solo cifratura) (%d) RSA (imposta funzioni personalizzate) (%d) RSA (solo firma) (%d) RSA e RSA (predefinito) (0) Nessuna risposta.%s (1) Nessun controllo effettuato.%s (1) Chiave di firma (2) Chiave di cifratura (2) Controllo superficiale.%s (3) Chiave di autenticazione (3) Controllo approfondito.%s nuove revoche di chiavi: %lu %d = nessuna fiducia %d = non si sa o non si vuol dire %d = fiducia piena %d = fiducia marginale %d = fiducia completa Impossibile firmare. conosciuto anche come "%s" m = torna al menù principale u = uscire s = salta questa chiave chiavi segrete importate: %lu (ID chiave principale %s) (non esportabile) (non-revocabile) Impronta digitale chiave primaria: chiavi segrete non modificate: %lu "%s" non è ID di chiave: ignorato "%s" era già stata firmata localmente dalla chiave %s "%s" era già stata firmata dalla chiave %s # Elenco dei valori di fiducia assegnati, creato il %s # (Usare "gpg --import-ownertrust" per ripristinarli) %d tentativi rimanenti per il PIN amministrativo prima che la scheda sia bloccata permanentemente %d firme errate %d chiavi analizzate (%d conteggi di validità azzerati) necessari: %d marginali, %d completi, modello di fiducia %s %d firme non controllate a causa di errori %d firme non controllate a causa di chiavi mancati Trovati %d ID utenti senza auto-firme valide %lu chiavi in cache (%lu firme) %lu chiavi in cache finora (%lu firme) esaminate finora %lu chiavi %s... %s non supporta il gestore della versione %d↵ %s non funziona ancora con %s dati cifrati con %s chiave di sessione cifrata con %s sarà usato il cifrario %s %s è quello nuovo %s è quello non modificato La lunghezza delle chiavi %s è compresa tra %u e %u bit. Le dimensioni delle chiavi %s devono essere nell'intervallo %u-%u %s non ha senso usato assieme a %s. %s non consentito assieme a %s. Firma %s, algoritmo di digest %s %s. %s/%s cifrato per: "%s" Firma %s/%s da: "%s" %s: c'è poca sicurezza che questa chiave appartenga all'utente indicato %s: non c'è alcuna sicurezza che la chiave appartenga all'utente indicato %s: la directory non esiste. %s: errore durante la lettura del record libero: %s %s: errore durante la lettura del record di versione: %s %s: errore durante l'aggiornamento del record di versione: %s %s: errore durante la scrittura del record dir: %s %s: errore durante la scrittura del record di versione: %s %s: aggiunta in coda a un record non riuscita: %s %s: creazione della tabella hash non riuscita: %s %s: creazione del record della versione non riuscita: %s%s: azzeramento di un record non riuscito: %s %s: versione %d del file non valida %s: trustdb non valido %s: è stato creato un trustdb non valido %s: portachiavi creato %s: non è un file di trustdb %s: saltata: %s %s: saltata: chiave pubblica già presente %s: saltata: chiave pubblica disabilitata %s: creato il trustdb %s: suffisso sconosciuto %s: record di versione con recnum %lu %s:%d "%s" è un'opzione deprecata %s:%d: elenco auto-key-locate non valido %s:%d: opzioni di esportazione non valide %s:%d: opzioni di importazione non valide %s:%d: opzioni del server di chiavi non valide %s:%d: opzioni di elenco non valide %s:%d: opzioni di verifica non valide %u-bit chiave %s, ID %s, creata %s(Non è stata data una descrizione) (Probabilmente la scelta era %d) (Questa è una chiave di revoca confidenziale) (confidenziale)(a meno di non specificare la chiave tramite l'impronta digitale) (potrebbe essere stato usato il programma sbagliato per questa funzione) * Il comando "sign" può essere preceduto da una "l" per firme locali (lsign), da una "t" per firme fidate (tsign), da "nr" per firme non revocabili (nrsign) o da una qualsiasi combinazione degli stessi (ltsign, tnrsign, ecc...). --clearsign [NOMEFILE]--decrypt [NOMEFILE]--edit-key user-id [COMANDI]--encrypt [NOMEFILE]--lsign-key user-id--output non funziona con questo comando --sign --encrypt [NOMEFILE]--sign --symmetric [NOMEFILE]--sign [NOMEFILE]--sign-key user-id--store [NOMEFILE]--symmetric --encrypt [NOMEFILE]--symmetric --sign --encrypt [NOMEFILE]--symmetric [NOMEFILE]-k[v][v][v][c] [ID_UTENTE] [PORTACHIAVI]... questo è un bug (%s:%d:%s) 1 firma errata 1 firma non controllata a causa di una chiave mancate 1 firma non controllata a causa di un errore Trovato 1 ID utente senza auto-firma valida 14 translator see trustdb.c:uid_trust_string_fixed@ (Consultare la pagina man per un elenco completo di tutti i comandi e opzioni) @ Esempi: -se -r Mario [FILE] Firma e cifra per l'utente Mario --clearsign [FILE] Crea una firma con testo in chiaro --detach-sign [FILE] Crea una firma separata --list-keys [FILE] Mostra le chiavi --fingerprint [FILE] Mostra le impronte digitali @ Opzioni: @Comandi: Forzato l'output con armatura ASCII. I comandi amministrativi sono permessi I comandi amministrativi non sono permessi Solo comandi amministrativi Rispondere "sì" (o "s") per generare la sottochiave.Rispondere "sì" per eliminare la sottochiaveRispondere "sì" per sovrascrivere il fileRispondere "sì" per eliminare veramente questo ID utente. Tutti i certificati saranno persi.Rispondere "sì" per firmare tutti gli ID utenteRispondere "sì" o "no"Firmare veramente questa chiave con la propria chiave "%s" (%s) Aggiungerlo comunque? (s/N) Procedere veramente con la revoca? (s/N) Firmare comunque? (s/N) Nominare veramente questa chiave come un revocatore designato? (s/N) Eliminare veramente? (s/N) Sostituire veramente? (s/N) Usarlo veramente? (s/N) AutenticaFirma non corretta di "%s"Impronta digitale CA: errore nel CRC; %06lX - %06lX Impossibile controllare la firma: %s Impossibile modificare questa chiave: %s Impossibile aprire "%s": %s AnnullaNome del proprietario della scheda: Cognome del proprietario della scheda: Certificati che portano a chiavi completamente affidabili: CertificaModificare (n)ome, (c)ommento, (e)mail oppure (o)k/(u)scire? Modificare (n)ome, (c)ommento, (e)mail oppure (u)scire? Cambia le preferenze di tutti gli ID utente (o solo di quelli selezionati) con l'elenco di preferenze attuale. L'orario di tutte le auto-firme coinvolte sarà incrementato di un secondo. Modifica della data di scadenza per una sottochiave. Modifica della data di scadenza per la chiave primaria. Cifrari: Il comando richiede un nome di file come argomento Commento: Compressione: Creare un certificato di revoca assegnato a questa chiave? (s/N) Creare un certificato di revoca per questa chiave? (s/N) Creare un certificato di revoca per questa firma? (s/N) Server delle chiavi critico preferito: Annotazione critica della firma: Politica critica di firma: Azioni attualmente permesse: Destinatari attuali: la chiave DSA %s richiede un hash di %u bit o più grande la chiave %s utilizza un hash non sicuro (%u bit) DSA richiede che la lunghezza dello hash sia un multiplo di 8 bit Eliminare questa firma corretta? (s/N/e)Eliminare questa firma non valida? (s/N/e)Eliminare questa chiave dal portachiavi? (s/N) Eliminare questa firma sconosciuta? (s/N/e)Eliminata %d firma. Eliminate %d firme. Firma separata. Digest: Visualizzazione ID fotografico %s di dimensione %ld per la chiave %s (UID %d) Eliminare veramente le chiavi selezionate? (s/N) Eliminare veramente questa chiave? (s/N) Procedere veramente in questo modo? (s/N) Revocare veramente l'intera chiave? (s/N) Revocare veramente le sottochiavi selezionate? (s/N) Revocare veramente questa sottochiave? (s/N) Impostare questa chiave come completamente affidabile? (S/N) Emettere una nuova firma per sostituire quella scaduta? (s/N) Promuoverla a una firma completa esportabile? (s/N) Promuoverla a un'auto-firma OpenPGP? (s/N) Firmare nuovamente? (s/N) Fare in modo che la propria firma scada nello stesso momento? (S/n) ERRORE: Indirizzo email: CifraInserire PIN amministrativo: Inserire il nome del file JPEG per l'ID fotografico: Inserire nuovo PIN amministrativo: Inerire nuovo PIN: Inserire PIN: Inserire una descrizione opzionale; terminare con una riga vuota: Inserire il nuovo nome del fileDigitare numero/i, s)uccessivo o e)sci > Digitare la passphrase Inserire la passphrase: Inserire il nome del proprietario della chiaveInserire la nuova passphrase per questa chiave segreta. Inserire l'annotazione: Inserire il valore richiesto come indicato nel prompt. È possibile inserire una data in formato ISO (AAAA-MM-GG), ma non sarà fornito un messaggio di errore corretto: il sistema cerca di interpretare il valore fornito come un intervallo.Inserire la dimensione della chiaveInserire l'user ID del destinatario a cui mandare il messaggio.Inserire l'ID utente del revocatore designato: Inserire l'URL del server di chiavi preferito: Errore nel leggere la chiave di backup da "%s": %s Errore: nome combinato troppo lungo (il limite è %d caratteri). Errore: non sono ammessi doppi spazi. Errore: dati login troppo lunghi (il limite è %d caratteri). Errore: attualmente è permesso solo ASCII semplice. Errore: dati DO privati troppo lunghi (il limite è %d caratteri). Errore: Il carattere "<" non può essere usato. Errore: Il trustdb è danneggiato. Errore: URL troppo lungo (il limite è %d caratteri). Errore: carattere non valido nella stringa di preferenze. Errore: impronta non valida. Errore: lunghezza della stringa di preferenze non valida. Errore: risposta non valida. Firma scaduta da "%s"Caratteristiche: Il file "%s" esiste. Fornire il nome del file a cui si riferisce la firma.Procedere e digitare il proprio messaggio... Firma valida da "%s"Hash: Suggerimento: selezionare gli ID utente da firmare Premere Invio quando pronto oppure inserire "c" per annullare: Con quanta attenzione è stato verificato che la chiave da firmare appartiene veramente alla persona indicata sopra? In casa di dubbio, digitare "0". Quanta fiducia si ha nel fatto che questa chiave appartenga realmente all'utente indicato? Verifica di questa firma eseguita in modo noncurante. Verifica di questa firma eseguita in modo molto accurato. Nessuna verifica eseguita su questa firma. cifrario IDEA non disponibile, tentativo di usare %s al suo posto Se non funziona, consultare il manuale È possibile inserire una descrizione per questo certificato di revoca: cercare di essere concisi. Una riga vuota termina il testo. Per usare comunque questa chiave non fidata, rispondere "sì".In generale non è una buona idea usare la stessa chiave per le firme e la cifratura. Questo algoritmo dovrebbe solo essere usato in determinati campi. Consultare un esperto di sicurezza.Carattere non valido nel commento Carattere non valido nel nome Comando non valido (provare "help") Chiave %s non valida resa valida da --allow-non-selfsigned-uid Passphrase non valida; riprovareSelezione non valida. È tutto corretto? (s/N) È esatto? (s/N) Questa foto è giusta? (s/N/q) NON è sicuro che la chiave appartenga all'utente indicato nell'ID utente. Se si è *davvero* sicuri di cosa si sta facendo, rispondere sì alla prossima domanda. È necessario assegnare un valore; questo valore non sarà mai esportato a terzi. Serve per implementare il web-of-trust; non ha nulla a che fare con il web-of-certificates (creato implicitamente).La chiave %s è già revocata. Chiave disponibile presso: La chiave non scade La chiave scade il %s Generazione della chiave annullata. Generazione della chiave non riuscita: %s La chiave è stata compromessaLa chiave ha solo voci incomplete o su scheda - nessuna passphrase da modificare. La chiave non è più usataLa chiave è protetta. La chiave è revocata.La chiave è stata sostituitaPer quanto tempo deve essere valida la chiave? (0) La chiave non è stata modificata quindi non sono necessari aggiornamenti. PortachiaviServer delle chiavi: nessuna modifica.Preferenze della lingua: Dati login (nome account): Effettuare il backup della chiave di cifratura al di fuori della scheda? (S/n) N per cambiare il nome. C per cambiare il commento. E per cambiare l'indirizzo email. O per continuare con la generazione della chiave. Q per abbandonare il processo di generazione della chiave.Nota: %s non è disponibile in questa versione Nota: normalmente %s non deve essere usato. Nota: non c'è alcuna garanzia che la scheda supporti la dimensione richiesta. Se la generazione della chiave non dovesse funzionare, controllare la documentazione della scheda per verificare quali dimensioni sono consentite. Nota: questa caratteristica non è disponibile in %s Nota: questa chiave non è protetta. Nota: il S/N della chiave non corrisponde con quello della scheda Nota: backup della chiave scheda salvato su "%s" Nota: la creazione di sottochiavi per chiavi v3 non è conforme a OpenPGP Nota: la chiave è stata revocataNota: le chiavi sono già memorizzate sulla scheda. Nota: nessun file "%s" delle opzioni predefinite Nota: ignorato il vecchio file "%s" delle opzioni predefinite Nota: la chiave primaria è in rete e memorizzata sulla scheda Nota: la chiave secondaria è in rete e memorizzata sulla scheda Nota: chiave segreta %s scaduta il %s Nota: il mittente ha fatto richiesta di "riservatezza" Nota: chiave per firmare %s scaduta il %s Nota: l'uso della modalità S2K semplice (0) è fortemente scoraggiato Nota: non è possibile scrivere sul trustdb Il nome non può iniziare con una cifra Il nome deve essere lungo almeno 5 caratteri Per questa azione è necessaria la chiave segreta. NnCcEeOoUuNessuna firma corrispondente nel portachiavi segreto Non è disponibile un aiutoNon è disponibile un aiuto per "%s"Nessun motivo specificatoNessuna sottochiave con indice %d ID utente inesistente. Nessun valore affidabile assegnato a: Nessun ID utente con hash %s Nessun ID utente con indice %d L'indirizzo email non è valido Non firmato dalla propria chiave. Annotazioni: Notare che questa chiave non può essere usata per cifrare. È possibile usare il comando "--edit-key" per generare una sottochiave atta a tale scopo. Nota: l'indirizzo "%s" del firmatario non corrisponde alla voce del DNS Nota: questa chiave è stata disabilitata. Nota: questa chiave è scaduta. Nota: l'indirizzo verificato del firmatario è "%s" Non è stato eliminato nulla. Niente da firmare con la chiave %s rilevata scheda OpenPGP n. %s scheda OpenPGP non disponibile: %s Sovrascrivere? (s/N) Non è possibile impostare l'affidabilità del proprietario usando un database di fiducia fornito dall'utente PIN callback ha restituito l'errore: %s Il PIN per CHV%d è troppo corto; la lunghezza minima è %d PIN ripetuto non correttamente; provare di nuovoIn primo luogo correggere l'errore Decidere quanta fiducia riporre nella capacità di questo utente di verificare le chiavi di altri utenti (consultando passaporti, controllando le impronte digitali da diverse sorgenti, ecc) Non inserire l'indirizzo email nel nome reale o nel commento Inserire un dominio per limitare questa firma, oppure Invio per nessuno. Inserire un nuovo nome di file. Se invece si preme INVIO sarà usato il file predefinito (che è mostrato tra parentesi).Inserire un commento opzionaleInserire il nome del file di dati: Inserire il livello di affidabilità di questa firma. Un livello superiore a 1 consente alla chiave che si sta firmando di creare firme affidabili a vostro nome. Inserire la passphrase (una frase segreta) Correggere questa possibile falla di sicurezza Inserire la scheda e premere Invio o "c" per annullare: Le impostazioni di fabbrica dei PIN sono PIN = "%s" PIN amministrativo "%s" Per cambiarle usare il comando --change-pin Notare che la validità della chiave mostrata non è necessariamente corretta finché non si riavvia il programma. Rimuovere le selezioni dalle chiavi segrete. Rimuovere la scheda attuale e inserire quella con numero di serie: %.*s Ripetere l'ultima passphrase, per essere sicuri di cosa si è digitato.Segnalare eventuali bug a . Selezionare almeno una sottochiave. Selezionare esattamente un ID utente. Scegliere il motivo della revoca: Selezionare il tipo di chiave da generare: Selezionare il tipo di chiave: Selezionare dove archiviare la chiave: Specificare la durata di validità della chiave. 0 = la chiave non scade = la chiave scade dopo N giorni w = la chiave scade dopo N settimane m = la chiave scade dopo N mesi y = la chiave scade dopo N anni Specificare la durata di validità della firma. 0 = la firma non scade = la firma scade dopo N giorni w = la firma scade dopo N settimane m = la firma scade dopo N mesi y = la firma scade dopo N anni Usare come prima cosa il comando "toggle". Attendere, raccolta dell'entropia. Durante l'attesa è possibile svolgere qualche altro lavoro, questo migliorerà la qualità dell'entropia. Azioni possibili per una chiave %s: Server di chiavi preferito: Impronta digitale chiave primaria:Dati DO privati: Procedere? (s/N) A chiave pubblica: La chiave pubblica è disabilitata. Uscire senza salvare? (s/N) modulo RSA mancante o non della dimensione di %d bit numero primo RSA %s mancante o non della dimensione di %d bit esponente RSA pubblico mancante o più grande di %d bit Nome reale: Creare veramente i certificati di revoca? (s/N) Creare veramente? (s/N) Eliminare veramente questa auto-firma? (s/N)Spostare veramente la chiave primaria? (s/N) Rimuovere veramente tutti gli ID utente selezionati? (s/N) Rimuovere veramente questo ID utente? (s/N) Revocare veramente tutti gli ID utente selezionati? (s/N) Revocare veramente questo ID utente? (s/N) Firmare veramente tutti gli ID utente? (s/N) Firmare veramente? (s/N) Aggiornare veramente le preferenze per gli ID utente selezionati? (s/N) Aggiornare veramente le preferenze? (s/N) Motivo della revoca: %s Ripetere la passphrase Ripetere la passphrase: Ripetere questo PIN: Sostituire la chiave esistente? (s/N) Sostituire le chiavi esistenti? (s/N) La dimensione chiave richiesta è %u bit Il codice di ripristino è troppo corto; la lunghezza minima è %d Codice di ripristino non disponibile o non più disponibile Certificato di revoca creato. Creato un certificato di revoca. Spostarlo su un dispositivo che può essere nascosto con sicurezza. Se qualcuno entrasse in possesso di questo certificato potrebbe usarlo per rendere inutilizzabile la chiave. È inoltre una buona idea stamparlo e archiviarlo, nel caso il dispositivo diventasse illeggibile. Attenzione: il sistema di stampa potrebbe salvare i dati e renderli disponibili ad altri. Salvare le modifiche? (s/N) La chiave segreta è disponibile. Le parti segrete della chiave primaria non sono disponibili. Le parti segrete della chiave primaria sono archiviate su scheda. Selezionare l'algoritmo da usare. DSA (Digital Signature Algorithm, o anche DSS) può essere usato solo per firmare. Elgamal è un algoritmo usato solo per cifrare. RSA può essere usato per firmare e per cifrare. La prima chiave (primaria) deve sempre essere una chiave con capacità di firma.Impostare l'elenco delle preferenze a: Sesso ((m)aschile, (f)emminile o spazio): FirmaFirmare? (s/N) La firma non scade Firma scaduta il %s Questa firma scadrà il %s La firma scade il %s Per quanto tempo deve essere valida la firma? (%s) Firma eseguita %s Firma eseguita in data %s usando %s, ID chiave %s Annotazione della firma: Politica di firma: FfCcAaEeLa sottochiave %s è già revocata. Sintassi: gpg [OPZIONI] [FILE] Firma, controlla, cifra o decifra. L'operazione predefinita dipende dai dati di input. Sintassi: gpgv [opzioni][file] Controlla le firme confrontandole con chiavi affidabili La scheda verrà ora riconfigurata per generare una chiave di %u bit Il livello minimo di fiducia per questa chiave è: %s Il generatore di numeri casuali è solo una soluzione improvvisata per fare funzionare il programma - non è assolutamente un RNG forte! NON USARE ALCUN DATO GENERATO DA QUESTO PROGRAMMA! L'auto-firma su "%s" è una firma in stile PGP 2.x. La firma non è valida: ha senso rimuoverla dal proprio portachiavi.La firma verrà contrassegnata come non esportabile. La firma verrà contrassegnata come non revocabile. Non esistono preferenze su un ID utente in stile PGP 2.x. Questo JPEG è troppo grande (%d byte). Questo comando non è permesso in modalità %s. Questo comando è disponibile solo per schede di versione 2 Questa è una chiave segreta: eliminarla veramente? (s/N) Questa è una firma che collega l'ID utente alla chiave. Solitamente non è una buona idea rimuovere questo tipo di firma: GnuPG potrebbe non essere più in grado di usare questa chiave. Rimuoverla solo se questa auto-firma non è valida per qualche ragione e ne è disponibile un'altra.Questa è una firma valida per la chiave: normalmente non dovrebbe essere cancellata perchè potrebbe essere importante per stabilire una connessione di fiducia alla chiave o a un'altra chiave certificata tramite essa.Questa chiave ci appartiene Questa chiave è stata disabilitataQuesta chiave è scaduta.Questa chiave scadrà il %s. Questa chiave non è protetta. Questa chiave può essere revocata da %s chiave %sQuesta chiave probabilmente appartiene all'utente indicato Questa chiave è stata revocata il %s dalla chiave %s %s Questa firma non può essere verificata perché non si dispone della chiave corrispondente. Rimandare l'eliminazione finché non si saprà quale chiave è stata usata, poiché questa chiave potrebbe stabilire una connessione di fiducia attraverso una chiave già certificata.Questa chiave è scaduta il %s. Questa sarà un'auto-firma. Questo renderebbe la chiave non utilizzabile da PGP 2.x. Revocabile da: Per costruire il web-of-trust, GnuPG ha bisogno di sapere quali chiavi sono completamente affidabili - di solito quelle per cui è disponibile la chiave segreta. Rispondere "sì" per impostare questa chiave come affidabile. Numero totale esaminato: %lu URL per recuperare la chiave pubblica: Non compressoTipo di firma "%s" sconosciuto Uso: gpg [OPZIONE...] [FILE...] (-h per l'aiuto)Uso: gpgv [OPZIONE...] [FILE...] (-h per l'aiuto)Usare comunque questa chiave? (s/N) ID utente "%s" compattato: %s L'ID utente "%s" è scaduto.L'ID utente "%s" non è auto-firmato.L'ID utente "%s" è stato revocato.L'ID utente "%s" è firmabile. ID utente "%s": %d firma rimossa ID utente "%s": %d firme rimosse ID utente "%s": già pulito ID utente "%s": già minimizzato L'user ID non è più validoATTENZIONE: ATTENZIONE: "%s" è un comando deprecato - non usarlo ATTENZIONE: "%s" è un'opzione deprecata ATTENZIONE: %s prevale su %s ATTENZIONE: esistono due file con informazioni confidenziali. ATTENZIONE: le chiavi Elgaman di firma+cifratura sono deprecate ATTENZIONE: questa è una chiave in stile PGP 2.x. Aggiungere un revocatore designato può causarne il rifiuto da parte di alcune versioni di PGP. ATTENZIONE: questa è una chiave in stile PGP2. Aggiungere un ID fotografico può causarne il rifiuto da parte di alcune versioni di PGP. ATTENZIONE: questa chiave è stata revocata dal suo revocatore designato. ATTENZIONE: questa chiave è stata revocata dal suo proprietario. ATTENZIONE: questa chiave non è certificata con una firma fidata. ATTENZIONE: questa chiave non è certificata con firme abbastanza fidate. ATTENZIONE: questa sottochiave è stata revocata dal proprietario. ATTENZIONE: uso di una chiave non fidata. ATTENZIONE: impossibile fidarsi di questa chiave. ATTENZIONE: individuata una chiave debole - cambiare ancora la passphrase. ATTENZIONE: "%s" è un file vuoto ATTENZIONE: una firma dell'ID utente è datata %d secondi nel futuro ATTENZIONE: la nomina di una chiave come revocatore designato non può essere annullata. ATTENZIONE: algoritmo di cifratura %s non trovato nelle preferenze del destinatario ATTENZIONE: l'algoritmo di digest %s è deprecato ATTENZIONE: il messaggio cifrato è stato manipolato. ATTENZIONE: forzare l'algoritmo di compressione %s (%d) viola le preferenze del destinatario ATTENZIONE: forzare l'algoritmo di digest %s (%d) viola le preferenze del destinatario ATTENZIONE: forzare il cifrario simmetrico %s (%d) viola le preferenze del destinatario ATTENZIONE: dimensioni del file random_seed non valide - non usato ATTENZIONE: la chiave %s contiene delle preferenze per ATTENZIONE: la chiave %s può essere stata revocata: acquisizione della chiave di revoca %s. ATTENZIONE: la chiave %s può essere stata revocata: chiave di revoca %s non presente. ATTENZIONE: gestore del server di chiavi da una versione diversa di GnuPG (%s) ATTENZIONE: l'opzione "%s" per il server di chiavi non è usata su questa piattaforma ATTENZIONE: il messaggio è stato cifrato con una chiave debole nel cifrario simmetrico. ATTENZIONE: l'integrità del messaggio non era protetta ATTENZIONE: rilevate molte parti di testo in chiaro ATTENZIONE: trovate firme multiple, sarà controllata solo la prima. ATTENZIONE: nessun user ID è stato indicato come primario. Questo comando potrebbe far diventare un altro ID utente quello primario predefinito. Attenzione: non una firma separata; il file "%s" NON è stato verificato. ATTENZIONE: non è stato esportato nulla ATTENZIONE: le opzioni in "%s" non sono ancora attive durante questa esecuzione del programma ATTENZIONE: la chiave di sessione cifrata simmetricamente è potenzialmente non sicura ATTENZIONE: il programma potrebbe creare un file core. ATTENZIONE: indicati destinatari (-r) senza usare la crittografia a chiave pubblica ATTENZIONE: la chiave segreta %s non ha un codice di controllo SK semplice ATTENZIONE: conflitto del digest delle firme nel messaggio ATTENZIONE: la sottochiave per la firma %s ha una certificazione incrociata non valida ATTENZIONE: la sottochiave per la firma %s non ha una certificazione incrociata ATTENZIONE: la firma non sarà contrassegnata come non esportabile. ATTENZIONE: la firma non sarà contrassegnata come non revocabile. ATTENZIONE: questa chiave può essere stata revocata (la chiave di revoca non è presente). ATTENZIONE: impossibile espandere i %% nell'URL (troppo grande), usato non espanso ATTENZIONE: impossibile espandere i %% nell'URL della politica (troppo grande), usato non espanso. ATTENZIONE: impossibile espandere i %% nell'URL del server di chiavi preferito (troppo grande), usato non espanso ATTENZIONE: impossibile recuperare l'URI %s: %s ATTENZIONE: impossibile analizzare l'URI %s ATTENZIONE: impossibile aggiornare la chiave %s attraverso %s: %s ATTENZIONE: impossibile rimuovere la directory temporanea "%s": %s ATTENZIONE: impossibile rimuovere il file temporaneo (%s) "%s": %s ATTENZIONE: l'inclusione della proprietà nel file di configurazione "%s" non è sicura ATTENZIONE: l'inclusione della proprietà nella directory home '%s' non è sicura ATTENZIONE: i permessi della directory correlata al file di configurazione "%s" non sono sicuri ATTENZIONE: i permessi della directory correlata alla directory home "%s" non sono sicuri ATTENZIONE: proprietario del file di configurazione "%s" non sicuro ATTENZIONE: proprietario della directory home "%s" non sicuro ATTENZIONE: permessi non sicuri per il file di configurazione "%s" ATTENZIONE: permessi non sicuri per la directory home "%s" ATTENZIONE: utilizzo dell'algoritmo di cifratura sperimentale %s ATTENZIONE: utilizzo dell'algoritmo di digest sperimentale %s ATTENZIONE: utilizzo dell'algoritmo a chiave pubblica sperimentale %s ATTENZIONE: memoria non sicura in uso. ATTENZIONE: in uso generatore di numeri casuali non sicuro. È necessario generare molti dati casuali: per fare ciò è utile eseguire qualche altra azione (scrivere sulla tastiera, muovere il mouse, usare i dischi) durante la generazione dei numeri primi; questo fornisce al generatore di numeri casuali migliori possibilità di raccogliere abbastanza entropia. Quale dimensione impostare per la chiave di autenticazione? (%u) Quale dimensione impostare per la chiave di cifratura? (%u) Quale dimensione impostare per la chiave di firma? (%u) Quale dimensione impostare per la sottochiave? (%u) Quale dimensione impostare per la chiave? (%u) Quando viene firmato l'ID utente di una chiave, accertarsi che questa appartenga alla persona indicata. È utile agli altri sapere con quanta attenzione sia stata verificata la chiave. "0" significa che non si può affermare di aver posto molta attenzione nella verifica della chiave. "1" significa che si crede che la chiave appartenga alla persona che dice di possederla, ma non è stato possibile o non è stata verificata per nulla la chiave stessa. "2" significa che è stata fatta una verifica superficiale della chiave. Per esempio potrebbe significare che è stata fatta una verifica dell'impronta digitale e confrontato l'ID utente della chiave con un documento d'identità con fotografia. "3" significa che è stata fatta una verifica approfondita della chiave. Per esempio potrebbe significare che è stata fatta una verifica dell'impronta digitale con il possessore della chiave ed è stato controllato, attraverso un documento d'identità con fotografia difficile da falsificare (come un passaporto), che il nome del proprietario della chiave corrispondesse a quello dell'ID utente della chiave e per finire, è stato verificato (scambiando dei messaggi) che l'indirizzo email sulla chiave appartiene al proprietario. Notare che gli esempi indicati per i livelli 2 e 3 sono solo esempi. Il significato posto su "superficiale" o "approfindita" quando vengono firmate le chiave è lasciato alla discrezione dell'utente. In caso di dubbio, rispondere "0".Si è in procinto di revocare queste firme: È in uso il set di caratteri "%s". Non è possibile modificare la data di scadenza di una chiave v3 Non è possibile eliminare l'ultimo ID utente. Non è stato specificato un ID utente (è possibile usare "-r"). È stato scelto di non usare una passphrase - questa è probabilmente una *cattiva* idea. Non è stata specificata una passphrase: questa è probabilmente una *cattiva* idea. Verrà impostata automaticamente: per modificarla, usare questo programma con l'opzione "--edit-key". Questi ID utente sono stati firmati sulla chiave %s: Non è possibile aggiungere un revocatore designato a una chiave in stile PGP 2.x. Non è possibile aggiungere un ID fotografico a una chiave in stile PGP2. In modalità --pgp2 non è possibile fare firme OpenPGP su chiavi in stile PGP 2.x. È possibile provare a ricreare il trustdb usando i comandi: È necessario selezionare almeno una chiave. È necessario selezionare almeno un ID utente. È necessario selezionare esattamente una chiave. È necessaria una passphrase per proteggere la proprio chiave segreta. È necessaria una passphrase per sbloccare la chiave segreta dell'utente: "%s" È necessaria una passphrase per sbloccare la chiave segreta dell'utente: "%.*s" %u-bit chiave %s, ID %s, creata %s%s È stato selezionato questo USER-ID: "%s" Specificare un motivo per questa certificazione. A seconda del contesto è possibile scegliere tra queste opzioni: "Key has been compromised" Usare questo nel caso in cui una persona non autorizzata abbia avuto accesso alla chiave segreta. "Key is superseded" Usare questo se la chiave è stata sostituita con una più recente. "Key is no longer used" Usare questo se la chiave non è più utilizzata. "User ID is no longer valid" Usare questo se l'ID utente di questa chiave non dovrebbe più essere utilizzato; solitamente usato per indicare un indirizzo email non valido. La propria firma attuale su "%s" è scaduta. La propria firma attuale su "%s" è una firma locale. Cosa fare? Selezione? Selezione? (inserire "?" per ulteriori informazioni): Il sistema in uso non può mostrare date oltre il 2038. Comunque, sarà gestita correttamente fino al 2106. [ piena ][ indefinita ][ scaduta ][ revocata ][ non nota ][ID utente non trovato][NOMEFILE][ marginale ][non impostato][revoca][auto-firma][ completa ][incerta]"%s" è già compresso "%s" non è un file JPEG "%s" non è un file regolare - ignorato "%s" non è un set di caratteri valido "%s" non è un ID di chiave lungo valido "%s" non è una data di scadenza firma valida in procinto di esportare una sottochiave non protetta l'accesso ai comandi di amministrazione non è configurato l'azione "%s" non è supportata con la schema del server di chiavi "%s" Aggiunge una chiave a una smartcardAggiunge un ID fotograficoAggiunge una chiave di revocaAggiunge una sottochiaveAggiunge un ID utenteopzione "%s" ambigua destinatario sconosciuto; viene provata la chiave segreta %s... header dell'armatura: armatura: %s i dati sono probabilmente cifrati con %s la firma della chiave %s non viene considerata valida a causa di un bit critico sconosciuto i dati sono probabilmente firmati in "%s" Recupera automaticamente le chiavi durante la verifica delle firmerecuperato automaticamente "%s" attraverso %s MPI danneggiatoURI non validocertificato danneggiatochiave erratapassphrase erratachiave pubblica erratachiave segreta erratafirma errataMeno prolissobinariobuild_packet non riuscita: %s aAcaricamento del portachiavi "%s" nella cache impossibile accedere a %s - scheda OpenPGP non valida? impossibile accedere a "%s": %s impossibile chiudere "%s": %s impossibile connettersi a "%s": %s impossibile creare "%s": %s impossibile creare il file di backup "%s": %s impossibile creare la directory "%s": %s impossibile creare il blocco per "%s" impossibile disabilitare i core dump: %s impossibile eseguire in modalità batch impossibile eseguire in modalità batch senza "--yes" impossibile generare un numero primo con pbits=%u e qbits=%u impossibile generare un numero primo con meno di %d bit impossibile gestire l'algoritmo a chiave pubblica %d impossibile gestire righe di testo più lunghe di %d caratteri impossibile gestire i dati ambigui di questa firma impossibile bloccare "%s" impossibile bloccare "%s": %s impossibile aprire "%s" impossibile aprire "%s": %s impossibile aprire i dati firmati "%s" impossibile aprire il portachiaviimpossibile interrogare la passphrase in modalità batch impossibile leggere "%s": %s impossibile eseguire stat su "%s": %s impossibile usare un pacchetto ESK simmetrico a causa della modalità S2K impossibile scrivere su "%s": %s annullatoannullato dall'utente annullaimpossibile nominare come revocatore designato una chiave in stile PGP 2.x Impossibile evitare una chiave debole per il cifrario simmetrico: %d tentativi. la scheda non supporta l'algoritmo di digest %s la scheda è bloccata in modo permanente. lettore di schede non disponibile num-scheda: Cambia l'URL per recuperare la chiaveCambia l'impronta digitale di un CAModifica il PIN di una schedaCambia il nome del proprietario della schedaCambia il sesso del proprietario della schedaModifica i dati su una schedaModifica la data di scadenza per la chiave o le sottochiavi selezionateCambia le preferenze della linguaCambia il nome di loginCambia il valore di fiduciaCambia la passphraseVerifica le firmecontrollo della firma creata non riuscito: %s controllo del trustdb codice di controllo erratol'algoritmo di cifratura %d%s è sconosciuto o disattivato due punti (:) mancantiCompatta gli ID utente non utilizzabili e rimuove tutte le firme dalla chiaveCompatta gli ID utente non utilizzabili e rimuove le firme non utilizzabili dalla chiavecompletes-needed deve essere maggiore di 0 comandi in conflitto impossibile analizzare l'URL del server di chiavi Crea una chiave pubblica quando si importa una chiave segretaCrea un output ascii con armaturacreata: %stimestamp di creazione mancante i dati non sono stati salvati; usare l'opzione "--output" per salvarli rimozione dell'armatura non riuscita: %s Decifra i dati (predefinito)de-cifratura non riuscita: %s de-cifratura corretta Elimina le sottochiavi selezionateElimina gli ID utente selezionatiElimina le firme dagli ID utente selezionatieliminazione del keyblock non riuscita: %s livello: %d valido: %3d firmato: %3d fiducia: %d-, %dq, %dn, %dm, %df, %du directory "%s" creata Disabilita la chiavedisabilitatoMostra ID fotografici nell'elencare le chiaviMostra ID fotografici nel verificare le firmeNon rimuove i valori di fiducia del proprietario durante l'importazioneNon elimina i file temponanei dopo averli usatiNon esegue alcuna modificaNon aggiorna il trustdb dopo l'importazioneInnalza la fiducia delle firme con dati PKA validiAbilita la chiavecreazione dell'armatura non riuscita: %s Cifra i daticifrato con %lu passphrase cifrato con la chiave %s con ID %s cifrato con chiave %2$s a %1$u-bit, ID %3$s, creato il %4$s cifrato con 1 passphrase cifrato con l'algoritmo sconosciuto %d nella modalità --pgp2 è richiesto il cifrario IDEA per cifrare un messaggio Cifratura solo con cifrario simmetricoerrore nell'allocare sufficiente memoria: %s errore nella modifica della chiave %d in %u bit: %s errore nel creare "%s": %s errore nel creare il portachiavi "%s": %s errore nel creare la passhprase: %s errore nella ricerca del record della fiducia in "%s": %s errore nell'ottenere informazioni sulla chiave corrente: %s errore nell'ottenere il nuovo PIN: %s errore in "%s": %s errore nella riga del trailer errore nel leggere "%s": %s errore nel leggere i dati dell'applicazione errore nel leggere il DO dell'impronta digitale errore nel leggere il keyblock: %s errore nel leggere il keyblock segreto "%s": %s errore nel recuperare lo stato del CHV dalla scheda errore nella scrivere "%s": %s errore nello scrivere la chiave sulla scheda: %s errore nello scrivere il portachiavi "%s": %s errore nello scrivere il portachiavi pubblico "%s": %s errore nello scrivere il portachiavi segreto "%s": %s la chiave esistente verrà sostituita scadutascaduta: %sscadenza: %sesporta gli attributi degli ID utente (generalmente ID fotografici)Esporta le chiaviEsporta le chiavi su un server di chiaviesporta le chiavi revocate impostate come "sensibili"esporta le firme contrassegnate come solo localiesportazione delle chiavi segrete non consentita chiamate esterne al server di chiavi non sono supportare in questa versione le chiamate a programmi esterni sono disabilitate a causa dei permessi non sicuri del file delle opzioni inizializzazione del TrustDB non riuscita: %s ricostruzione della cache del portachiavi non riuscita: %s archiviazione della data di creazione non riuscita: %s archiviazione dell'impronta digitale non riuscita: %s archiviazione della chiave non riuscita: %s rimozione della protezione alla sottochiave non riuscita: %s impossibile usare come PIN predefinito %s: %s - l'utilizzo di altre impostazioni predefinite sta per essere disabilitato femminaPreleva la chiave specificata nell'URL della schedaerrore nel chiudere il fileerrore durante la creazione del fileerrore nell'eliminare il fileil file esisteerrore durante l'apertura del fileerrore durante la lettura del fileerrore nel rinominare il fileerrore durante la scrittura del filel'impronta digitale sulla scheda non corrisponde a quella richiesta Imposta l'ID utente selezionato come primarioforzatoforzare il cifrario simmetrico %s (%d) viola le preferenze del destinatario fstat di "%s" non riuscita in %s: %s fstat(%d) non riuscita in %s: %s pienaerrore generaleGenera messaggi compatibili con PGP 2.xGenera una nuova coppia di chiaviGenera un certificato di revocaGenera nuove chiavigenerazione della chiave non riuscita generazione di una nuova chiave generazione del checksum 16-bit deprecato per la protezione della chiave segreta gpg-agent non è disponibile in questa sessione la versione %d del protocollo di gpg-agent non è gestita gpg/scheda> Rispetta il record PKA impostato su una chiave durante il recupero delle chiaviRispetta l'URL del server di chiavi preferito impostato sulla chiaveiImMuUsSImporta le chiavi da un server di chiaviImporta le firme che sono contrassegnate come solo-localeImporta/Incorpora delle chiaviimportazione delle chiavi segrete non consentita Include chiavi di revoca nei risultati di ricercaInclude sottochiavi nella ricerca per ID di chiaveriga di input %u troppo lunga o LF mancante riga di input più lunga di %d caratteri non validamodalità S2K non valido; deve essere 0, 1 o 3 argomento non validoarmatura non validaheader dell'armatura non valido: armatura non valida: riga più lunga di %d caratteri elenco auto-key-locate non valido header della firma in chiaro non valido riga protetta con il trattino non valida: preferenze predefinite non valide default-cert-level non valido; deve essere 0, 1, 2 o 3 opzioni di esportazione non valide impronta digitale non validaalgoritmo di hash "%s" non valido opzioni di importazione non valide oggetto "%s" nella stringa delle preferenze non valido portachiavi non validoopzioni del server di chiavi non valide protocollo del server di chiavi non valido (nostro %d != handler %d) opzioni di elenco non valide min-cert-level non valido; deve essere 1, 2 o 3 pacchetto non validopassphrase non validapreferenze personali del cifrario non valide preferenze personali di compressione non valide preferenze personali del digest non valide carattere radix64 non valido %02x saltato individuato un pacchetto radice non valido in proc_tree() struttura della scheda OpenPGP non valida (DO 0x93) valore non valido opzioni di verifica non valide è consigliato aggiornare le proprie preferenze e chiave "%s" non trovata sul server di chiavi chiave "%s" non trovata: %s la chiave %s non ha ID utente chiave %s contrassegnata come completamente affidabile la chiave %s è ripetuta più volte nel database della fiducia la chiave %s è stata creata %lu secondo nel futuro (salto nel tempo o problema con l'orologio) la chiave %s è stata creata %lu secondi nel futuro (salto nel tempo o problema con l'orologio) chiave %s: "%s" %d nuove firme chiave %s: "%s" %d nuove sottochiavi chiave %s: "%s" %d nuovi ID utente chiave %s: "%s" %d firma pulita chiave %s: "%s" %d firme pulite chiave %s: "%s" %d ID utente pulito chiave %s: "%s" %d ID utente puliti chiave %s: "%s" 1 nuova firma chiave %s: "%s" 1 nuova sottochiave chiave %s: "%s" 1 nuovo ID utente chiave %s: "%s" non cambiata chiave %s: certificato di revoca "%s" aggiunto chiave %s: importato certificato di revoca "%s" chiave %s: %s chiave %s: chiave in stile PGP 2.x - saltata chiave %s: riparato errore per sottochiave PKS chiave %s: accettata come chiave fidata chiave %s: accettato l'ID utente "%s" non auto-firmato chiave %s: già presente nel portachiavi segreto chiave %s: impossibile individuare il keyblock originale: %s chiave %s: impossibile leggere il keyblock originale: %s chiave %s: aggiunta una firma alla chiave diretta chiave %s: non corrisponde alla copia presente chiave %s: trovato un ID utente duplicato - unito chiave %s: firma diretta della chiave non valida chiave %s: certificato di revoca non valido: %s - rifiutato chiave %s: certificato di revoca non valido: %s - saltata chiave %s: auto-firma non valida sull'ID utente "%s" chiave %s: collegamento con la sottochiave non valido chiave %s: revoca della sottochiave non valida chiave %s: materiale della chiave sulla scheda - saltata chiave %s: nuova chiave - saltata chiave %s: nessuna chiave pubblica - impossibile applicare il certificato di revoca chiave %s: nessuna chiave pubblica per la chiave fidata - saltata chiave %s: non ci sono sottochiavi per il collegamento con la chiave chiave %s: nessuna sottochiave per la revoca della chiave chiave %s: non c'è una sottochiave per il collegamento della firma della sottochiave chiave %s: non c'è una sottochiave per la revoca della firma della sottochiave chiave %s: nessun ID utente chiave %s: nessun ID utente per la firma chiave %s: nessun ID utente valido chiave %s: firma non esportabile (classe 0x%02X) - saltata chiave %s: non protetta - saltata chiave %s: chiave pubblica "%s" importata chiave %s: chiave pubblica non trovata: %s chiave %s: rimossi i collegamenti con sottochiave multipla chiave %s: rimosse le revoche per le sottochiavi multiple chiave %s: certificato di revoca nel posto errato - saltata chiave %s: chiave segreta importata chiave %s: chiave segreta non trovata: %s chiave %s: chiave segreta con cifrario %d non valido - saltata chiave %s: chiave segreta senza chiave pubblica - omessa chiave %s: saltata la sottochiave chiave %s: saltato l'ID utente "%s" chiave %s: firma della sottochiave nel posto sbagliato - saltata chiave %s: classe della firma inaspettata (0x%02X) - saltata chiave %s: algoritmo a chiave pubblica non supportato chiave %s: algoritmo a chiave pubblica non supportato sull'ID utente "%s" la chiave esiste già esportazione della chiave non riuscita: %s generazione della chiave completata (%d secondi) la chiave è stata creata %lu secondo nel futuro (salto nel tempo o problema con l'orologio) la chiave è stata creata %lu secondi nel futuro (salto nel tempo o problema con l'orologio) la chiave non è indicata come insicura - impossibile usarla con il RNG finto. chiave non trovata sul server di chiavi operazione su chiave non possibile: %s risorsa keyblock "%s": %s portachiavi "%s" creato errore di comunicazione con server di chiavi: %s il server di chiavi non ha inviato la VERSIONE errore del server di chiavierrore interno del server di chiavi ricezione dal server di chiavi non riuscita: %s aggiornamento dal server di chiavi non riuscito: %s ricerca nel server di chiavi non riuscita: %s invio al server di chiavi non riuscito: %s time out del server di chiavi dimensione chiave non valida; usati %u bit dimensione chiave arrotondata per eccesso a %u bit riga troppo lungaElenca tutti i dati disponibiliElenca e controlla le firme delle chiaviElenca le chiavi e gli ID utenteElenca le chiaviElenca le chiavi e le impronte digitaliElenca le chiavi e le firmeElenca le preferenze (per esperti)Elenca le preferenze (prolisso)Elenca le chiavi segreteCrea una firma separataSegnala i conflitti di data solo con un avvisomake_keysig_packet non riuscita: %s maschioCRC malformato variabile di ambiente GPG_AGENT_INFO malformata ID utente malformatomarginalemarginals-needed deve essere maggiore di 1 max-cert-depth deve essere compreso tra 1 e 255 Menù per cambiare o sbloccare il PINSposta una chiave di backup su una smartcardSposta una chiave su una smartcardspostamento della firma di una chiave nel posto corretto nNfirme in chiaro annidate errore di retemaimai creato un nuovo file di configurazione "%s" il prossimo controllo del trustdb sarà eseguito il %s nonessun segno "=" trovato nella definizione del gruppo "%s" nessuna schedanon c'è una chiave pubblica corrispondente: %s nessun datonessun portachiavi segreto predefinito: %s modulo di raccolta entropia non rilevato nessun gestore per lo schema "%s" del server di chiavi nessuna azione dal server di chiavi. nessun server di chiavi conosciuto (usare l'opzione --keyserver) non è necessario un controllo del trustdb non è necessario un controllo del trustdb con il modello di fiducia "%s" non è necessario un aggiornamento del trustdb con il modello di fiducia "%s" visualizzatore d'immagini non impostato non è supportata l'esecuzione remota dei programmi nessuna chiave di revoca trovata per "%s" nessuna chiave segreta nessuna sottochiave segreta per la sottochiave pubblica %s - ignorata nessuna firma trovata non ci sono dati firmati l'ID utente non esistenon è stata trovata alcuna chiave completamente affidabile non sono stati trovati dati OpenPGP validi. nessun indirizzo valido non è stato trovato un portachiavi scrivibile: %s non è stato trovato alcun portachiavi pubblico scrivibile: %s non è stato trovato alcun portachiavi segreto scrivibile: %s non è una firma separata non è una scheda OpenPGPnon cifratonon forzatonon analizzatonon supportatonota: il file random_seed è vuoto nota: il file random_seed non è stato aggiornato oOsiamo il destinatario anonimo. okay|okla vecchia codifica del DEK non è gestita firma vecchio stile (PGP 2.x) Accetta solo aggiornamenti alle chiavi esistentil'operazione non è possibile senza memoria sicura inizializzata file delle opzioni "%s": %s nome del file originale="%.*s" informazioni di fiducia del possessore cancellate valore di fiducia del proprietario mancantepassphrase generata con un algoritmo di digest %d sconosciuto passphrase ripetuta non correttamente; provare ancoraeseguire un --check-trustdb inserire un indirizzo email opzionale (ma fortemente suggerito)consultare %s per maggiori informazioni per ulteriori informazioni, consultare http://www.gnupg.org/faq.html usare "%s%s" al suo posto attendere mentre la chiave viene generata... preferenza "%s" duplicata eof prematura (nel CRC) eof prematura (nel trailer) eof prematura (nessun CRC) Stampa lo stato della schedaproblema nel gestire il pacchetto cifrato problema con l'agent - uso dell'agent disattivato Chiede conferma prima di sovrascriverel'algoritmo di protezione %d%s non è gestito l'algoritmo di protezione %d non è gestito chiavi pubbliche e segrete create e firmate. la chiave pubblica %s è più recente della firma di %lu secondo la chiave pubblica %s è più recente della firma di %lu secondi chiave pubblica %s non trovata: %s de-cifratura della chiave pubblica non riuscita: %s la chiave pubblica non corrisponde alla chiave segreta. dati cifrati con la chiave pubblica: DEK corretto la chiave pubblica è %s chiave pubblica non trovatachiave pubblica della chiave completamente affidabile %s non trovata eEesciAbbandona questo menùcarattere quoted printable nell'armatura - probabilmente è stato usato un MTA con qualche bug ridistribuire la chiave per prevenire potenziali problemi con l'algoritmo errore di lettura in "%s": %s lettura da "%s" lettura delle opzioni da "%s" lettura della chiave pubblica non riuscita: %s viene letto lo stdin... ragione della revoca: aggiornamento delle chiavi %d da %s aggiornamento della chiave 1 da %s rifiutata dal filtro d'importazioneRimuove quanto più possibile dalla chiave dopo l'importazionerimuove quanto più possibile dalla chiave durante l'esportazioneRimuove le chiavi dal portachiavi pubblicoRimuove le chiavi dal portachiavi privatorimuove la passphrase dalle sottochiavi esportateRimuove le parti non usabili dalla chiave dopo l'importazionerimuove le parti non utilizzabili dalla chiave durante l'esportazionecambio di nome di "%s" in "%s" non riuscito: %s Ripara gli errori causati dal server delle chiavi pks durante l'importazionerichiesta della chiave %s da %s richiesta della chiave %s dal server %s %s limite della risorsala risposta non contiene il modulo RSA la risposta non contiene l'esponente pubblico RSA la risposta non contiene i dati della chiave pubblica commento alla revoca: Revoca la chiave o le sottochiavi selezionateRevoca l'ID utente selezionatoRevoca le firme sugli ID utente selezionatirevocatarevocato dalla propria chiave %s il %s revocata: %sarrotondata per eccesso a %u bit Salva ed esciCerca le chiavi su un server di chiaviricerca di "%s" da %s ricerca di "%s" dal server %s %s ricerca dei nomi da %s ricerca dei nomi da %s nel server %s chiave segreta "%s" non trovata: %s chiave segreta %s: %s chiave segreta già archiviata su una scheda la chiave segreta non è disponibileparti della chiave segreta non sono disponibili le parti segrete della chiave non sono disponibili Seleziona la sottochiave NSeleziona l'ID utente Nl'algoritmo di certificazione digest selezionato non è valido l'algoritmo di cifratura selezionato non è valido l'algoritmo di compressione selezionato non è valido l'algoritmo di digest selezionato non è valido selezione di openpgp non riuscita: %s invio della chiave %s a %s invio della chiave %s al server %s %s Imposta un'annotazione per gli ID utente selezionatiImposta l'elenco di preferenze per gli ID utente selezionatiImposta l'URL del server di chiavi preferito per gli ID utente selezionatiMostra le annotazioni standard IETF nell'elencare le firmeMostra l'annotazione standard IETF nel verificare le firmeMostra comandi amministrativiMostra tutte le annotazioni nell'elencare le firmeMostra tutte le annotazioni nel verificare le firmeMostra le date di scadenza nell'elencare le firmeMostra l'impronta digitale della chiaveMostra solo l'ID utente primario nel verificare le firmeMostra gli URL delle politiche nell'elencare le firmeMostra gli URL delle politiche nel verificare le firmeMostra gli URL dei server di chiavi preferiti nell'elencare le firmeMostra gli URL dei server di chiavi preferiti nel verificare le firmeMostra le sottochiavi revocate e scadute nell'elencare le chiaviMostra gli ID utenti revocati e scaduti nell'elencare le chiaviMostra gli ID utenti revocati o scaduti nel verificare le firmeMostra gli ID fotografici selezionatiMostra il nome del portachiavi nell'elencare le chiaviMostra questo aiutoMostra la validità dell'ID utente nell'elencare le chiaviMostra la validità dell'ID nel verificare le firmeMostra le annotazioni fornite dall'utente nell'elencare le firmeMostra le annotatazioni fornite dall'utente nel verificare le firmeFirma una chiaveFirma una chiave localmenteFirma o modifica una chiaveFirma gli ID utente selezionati [* controllare più sotto per i relativi comandi]Firma localmente gli ID utente selezionatiFirma gli ID utente selezionati con una firma non revocabileFirma gli ID utente selezionati con un firma fidataverifica della firma soppressa firme create finora: %lu firmato dalla propria chiave %s su %s%s%s firma non riuscita: %s la sottochiave di firma %s ha già ricevuto una certificazione incrociata firma:saltato "%s": %s saltato "%s": duplicato saltata: chiave pubblica già impostata saltata: chiave pubblica già impostata come destinatario predefinito saltata: chiave pubblica già presente saltato blocco di tipo %d omessa auto-firma v3 sull'ID utente "%s" revoca solitaria - usare "gpg --import" per applicarla firma solitaria di classe 0x%02x memorizzazione della chiave su scheda non riuscita: %s la sottochiave %s non firma e perciò non è necessario che abbia una certificazione incrociata il sottopacchetto di tipo %d ha un bit critico impostato cifratura simmetrica di "%s" non riuscita: %s errore di sistema durante la chiamata del programma esterno: %s Prende le chiavi da questo portachiavimodo testol'URL della politica di certificazione indicato non è valido l'URL fornito per il server di chiavi principale non è valido l'URL della politica di firma indicato non è valido non è possibile verificare la firma. Ricordare che il file di firma (.sig or .asc) deve essere il primo file indicato sulla riga di comando. è presente una chiave segreta per la chiave pubblica "%s". questa è una chiave Elgamal generata da PGP: non è sicura per le firme.questa chiave è stata già designata come revocatore questo può essere causato da un'auto-firma mancante questo messaggio può non essere utilizzabile da %s questa piattaforma richiede file temporanei quando si chiamano programmi esterni marcatura temporale in conflittoCommuta tra elencare le chiavi segrete e pubblicheCommuta il flag del PIN per forzare la firmatroppe preferenze di cifrario troppe preferenze di compressione troppe preferenze di digest troppe voci nella pk cache - disabilitata errore nel database della fiduciail record di fiducia %lu non è del tipo %d richiesto record fiducia %lu, tipo %d: lettura non riuscita: %s record fiducia %lu, tipo %d: scrittura non riuscita: %s fiducia: %strustdb rec %lu: lseek non riuscita: %s trustdb rec %lu: scrittura non riuscita (n=%d): %s transazione del trustdb troppo grande trustdb: lseek non riuscita: %s trustdb: read non riuscita (n=%d): %s trustdb: sincronizzazione non riuscita: %s livello di fiducia regolato su FULL in base alle informazioni PKA valide livello di fiducia regolato su NEVER in basa alle informazioni PKA non valide completaimpossibile mostrare l'ID fotografico impossibile eseguire il programma esterno impossibile eseguire il programma "%s": %s impossibile eseguire la shell "%s": %s impossibile aprire il file JPEG "%s": %s impossibile leggere la risposta del programma esterno: %s impossibile impostare exec-path a %s impossibile aggiornare la versione del record del trustdb: scrittura non riuscita: %s impossibile usare il cifrario IDEA per tutte le chiavi che si stanno cifrando. impossibile utilizzare un modello di fiducia sconosciuto (%d) - viene assunto %s come modello di fiducia Sblocca il PIN usando un codice di ripristinonon compresso|nessunonon definitaarmatura inattesa: dati inattesialgoritmo di cifratura non implementatoalgoritmo della chiave pubblica non implementatosconosciutoheader dell'armatura sconosciuto: algoritmo di cifratura sconosciutoalgoritmo di compressione sconosciutoelemento di configurazione "%s" sconosciuto destinatario predefinito "%s" sconosciuto algoritmo di digest sconosciutoalgoritmo di protezione chiave sconosciuto opzione "%s" sconosciuta pacchetto di tipo sconosciutoalgoritmo di protezione sconosciuto algoritmo della chiave pubblica sconosciutoclasse della firma sconosciutaversione sconosciutauscita anormale del programma esterno non specificatoURI non gestitoalgoritmo della chiave pubblica non utilizzabilechiave pubblica inutilizzabilechiave segreta inutilizzabileAggiorna tutte le chiavi da un server di chiaviaggiornamento non riuscito: %s aggiornamento della chiave segreta non riuscito: %s Aggiorna il database della fiduciauso: %sUso: gpg [OPZIONE...] Usa come file di outputUsa la modalità testo canonicousare prima l'opzione "--delete-secret-keys" per eliminarla. Utilizza un rigido comportamento OpenGPGUsare file temporanei per passare dati agli helper dei server di chiaviUsa questo ID utente per firmare o decifrarel'ID utente "%s" è già revocato ID utente: "%s" modello di fiducia %s in uso utilizzo del cifrario %s viene utilizzato come PIN predefinito %s usata la sottochiave %s invece della chiave primaria %s Convalida le firme con dati PKAvalidità: %sProlissola verifica del PIN amministratore è momentaneamente proibita tramite questo comando verifica di CHV%d non riuscita: %s Verifica una firmaVerifica il PIN ed elenca tutti i datiattesa del blocco su "%s"... chiave debolecreata una chiave debole - nuovo tentativo la chiave di sessione cifrata ha dimensioni strane (%d) non verrà eseguito con la memoria insicura a causa di %s scrittura della firma diretta scrittura della firma di collegamento alla chiave scrittura della nuova chiave scrittura della chiave pubblica su "%s" scrittura dello stub della chiave segreta su "%s" scrittura della chiave segreta su "%s" scrittura dell'auto-firma scrittura in "%s" scrittura su stdout è stata usata la chiave segreta sbagliatasSsi|sìin modalità -pgp2 è possibile firmare in chiaro solo con chiavi in stile PGP 2.x nella modalità --pgp2 è possibile creare firme separate solo con chiavi in stile PGP 2.x in modalità --pgp2 è possibile cifrare solo su chiavi RSA lunghe al massimo 2048 bit nella modalità --pgp2 è possibile creare solo firme in chiaro o separate è possibile aggiornare le proprie preferenze con: gpg --edit-key %s updpref save nella modalità --pgp2 non è possibile firmare e cifrare contemporaneamente impossibile nominare una chiave come revocatore designato di se stessa non è possibile usare --symmetric --encrypt in modalità %s non è possibile usare --symmetric --encrypt con --s2k-mode 0 non è possibile usare --symmetric --sign --encrypt in modalità %s non è possibile usare --symmetric --sign --encrypt con --s2k-mode 0 trovato un bug... (%s:%d) non è possibile usare %s mentre si è in modalità %s non è possibile usare l'algoritmo di cifratura "%s" in modalità %s non è possibile usare l'algoritmo di compressione "%s" in modalità %s non è possibile usare l'algoritmo di digest "%s" in modalità %s è necessario usare dei file (e non una pipe) quando si opera con --pgp2 abilitato. |AN|Nuovo PIN amministrativo|A|Inserire il PIN di amministratore|A|Inserire il PIN di Amministratore%%0A[tentativi rimasti: %d]|FD|Scrive le informazioni di stato sul FD|NOME|Cifra per NOME|N|Nuovo PIN|N|Imposta a N il livello di compressione (0 disab.)|RN|Nuovo codice di ripristino|[FILE]|Crea una firma con testo in chiaro|[FILE]|Crea una firma|ALGO [FILE...]|Stampa tutti i messaggi di digest||Inserire il PIN||Inserire il PIN%%0A [firme create:%lu]||Inserire il codice di ripristino per la schedagnupg-1.4.20/po/tr.po0000644000175000017500000063502012635457220011256 00000000000000# Turkish translations for GnuPG messages. # Copyright (C) 2005 Free Software Foundation, Inc. # Nilgün Belma Bugüner , 2001, ..., 2005. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.1\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:17+0200\n" "Last-Translator: Nilgün Belma Bugüner \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.0\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "pbits=%u qbits=%u ile bir asal sayı üretilemez\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "%d bitten daha küçük bir asal sayı ürtilemez\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "rasgele bayt elde etme modülü bulunamadı\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "`%s' kiltlenemedi\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "gizli anahtarı `%s'e yazıyor\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "`%s' açılamıyor: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "`%s' durumlanamıyor: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' düzenli bir dosya değil - görülmedi\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "not: \"random_seed\" dosyası boş\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "UYARI: random_seed dosyasının boyu hatalı - kullanılmadı\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "\"%s\" okunamıyor: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "bilgi: \"random_seed\" dosyası güncel değil\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "\"%s\" oluşturulamıyor: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "\"%s\" yazılamıyor: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "\"%s\" kapatılamıyor: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "UYARI: kullanılan rasgele sayı üreteci güvenli değil!!\n" #: cipher/random.c:894 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 "" "Rasgele sayı üreteci kendi halinde çalışan\n" "bir kukla - güvenilir bir RSÜ değil!\n" "\n" "BU PROGRAMLA ÜRETİLMİŞ HİÇBİR VERİYİ KULLANMAYIN!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Lütfen bekleyin rasgele baytlar toplanıyor. Bu işlem sırasında başka\n" "işlere bakın, çünkü bu anahtarınızın daha kaliteli olmasını sağlayacak.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Rasgele üretilen baytlar yetersiz. Lütfen bazı işlemler yaparak\n" "daha fazla rasgele bayt toplayabilmesi için işletim sistemine\n" "yardımcı olun! (%d bayt daha gerekiyor)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "parmakizinin saklanması başarısız oldu: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "oluşturma tarihinin saklanması başarısız oldu: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "anahtar okuması başarısız\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "yanıt genel anahtar verisi içermiyor\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "yanıt RSA modülü içermiyor\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "yanıt RSA genel bileşenini içermiyor\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, fuzzy, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "PIN [yapılan imza: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 #, fuzzy msgid "||Please enter the PIN" msgstr "PIN [yapılan imza: %lu]" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN eylemcisi hata döndürdü: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "CHV%d için PIN çok kısa; asgari uzunluk: %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "CHV%d doğrulaması başarısız oldu: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "karttan CHV durumu alınırken hata\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "kart kalıcı olarak kilitli!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "kart kalıcı olarak kilitlenmeden önce %d Yönetici PIN kalmasına çalışılıyor\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, fuzzy, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "PIN [yapılan imza: %lu]" #: g10/app-openpgp.c:1674 #, fuzzy msgid "|A|Please enter the Admin PIN" msgstr "PIN [yapılan imza: %lu]" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "yönetici komutlarına erişim yapılandırılmamış\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "gizli anahtar parçaları kullanım dışı\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Lütfen bir yürürlükten kaldırma sebebi seçiniz:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, fuzzy, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "CHV%d için PIN çok kısa; asgari uzunluk: %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Yeni Yönetici PIN'i" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Yeni PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "yeni PIN alınırken hata: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "uygulama verisi okunurken hata\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "parmakizi DO okunurken hata\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "anahtar zaten mevcut\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "mevcut anahtar konulacak\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "yeni anahtar üretiliyor\n" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "yeni anahtar üretiliyor\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, fuzzy, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "genel üs çok büyük (32 bitten fazla)\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "anahtarın saklanması başarısız: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "anahtar üretilene kadar lütfen bekleyiniz ....\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "anahtar üretimi başarısızlığa uğradı\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "anahtar üretimi tamamlandı (%d saniye)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "OpenPGP kartının yapısı geçersiz (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "%s imzası, %s özümleme algoritması\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "şu ana kadar oluşturulan imzalar: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "%s erişilebilir değil - OpenPGP kartı geçersiz olabilir mi?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "zırh: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "zırh başlığı geçersiz: " #: g10/armor.c:459 msgid "armor header: " msgstr "zırh başlığı: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "açıkça okunabilen imza başlığı geçersiz\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "zırh başlığı: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "açıkça okunabilen imzalar dahil edildi\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "beklenmeyen zırh: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "araçizgisi escape'lı satır geçersiz: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "geçersiz radix64 karakteri %02X atlandı\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "dosya sonu belirsiz (CRC yok)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "dosya sonu belirsiz (CRC içinde)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC bozulmuş\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC hatası; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "dosya sonu belirsiz (kuyruk içinde)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "kuyruk satırında hata\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "geçerli OpenPGP verisi yok\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "geçersiz zırh: satır %d karakterden uzun\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "zırh içinde uluslararası karakterler - büyük olasılıkla hatalı bir e-posta " "sunucusu kullanılmış\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP anahtarı kullanılabilir değil: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "%s numaralı OpenPGP kartı saptandı\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "bu önceden betik kipinde yapılamaz\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "%s kipindeyken bu komut kullanılamaz.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Seçiminiz? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[belirtilmedi]" #: g10/card-util.c:512 msgid "male" msgstr "erkek" #: g10/card-util.c:513 msgid "female" msgstr "dişi" #: g10/card-util.c:513 msgid "unspecified" msgstr "belirtilmemiş" #: g10/card-util.c:540 msgid "not forced" msgstr "zorlanmadı" #: g10/card-util.c:540 msgid "forced" msgstr "zorlandı" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Hata: Şimdilik sadece US-ASCII mümkün.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Hata: \"<\" karakteri kullanılmamalı.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Hata: Çift boşluğa izin verilmez.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Kart sahibinin soyadı: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Kart sahibinin adı: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Hata: İsimler birlikte çok uzun oluyor (sınır: %d karakter).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "genel anahtarın alınacağı URL: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Hata: URL çok uzun (sınır: %d karakter).\n" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "`%s' anahtar zinciri oluşturulurken hata: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "\"%s\" okunurken hata: %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "`%s' oluşturulurken hata: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Oturum açma verisi (hesap adı): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Hata: Oturum açma verisi çok uzun (sınır: %d karakter).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Özel DO verisi: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Hata: Özel DO çok uzun (sınır: %d karakter).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Dil tercihleri: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Hata: tercih dizgesinin uzunluğu geçersiz.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Hata: tercih dizgesindeki karakterler geçersiz.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Cinsiyet ((E)rkek, (D)işi veya boşluk): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Hata: yanıt geçersiz.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA parmak izi: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Hata: biçimli parmakizi geçersiz\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "anahtar işlemi mümkün değil: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "bir OpenPGP kartı değil" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "geçerli anahtar bilgisi alınırken hata: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Mevcut anahtar değiştirilsin mi? (e/H ya da y/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "İstediğiniz anahtar uzunluğu nedir? (%u) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "İstediğiniz anahtar uzunluğu nedir? (%u) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "İstediğiniz anahtar uzunluğu nedir? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "%u bite yuvarlandı\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s anahtar uzunlukları %u-%u aralığında olmalı\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "gizli anahtar bloğu \"%s\" okunurken hata oluştu: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Şifreli anahtarın kartsız yedeği yapılsın mı? (E/h ya da Y/n) " #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "gizli anahtar zaten bir kartın üzerinde saklı\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Mevcut anahtarlar değiştirilsin mi? (e/H ya da y/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Lütfen dikkat edin, PIN'lerin öntanımlı ayarları böyledir:\n" " PIN = `%s' Admin PIN = `%s'\n" "Bunları --change-pin komutunu kullanarak değiştirmelisiniz\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Lütfen üretilecek anahtar türünü seçiniz:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) İmzalama anahtarı\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Şifreleme anahtarı\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Kimlik kanıtlama anahtarı\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Seçim geçersiz.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Lütfen anahtarın saklanacağı yeri seçiniz:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "bilinmeyen anahtar koruma algoritması\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "anahtarın gizli parçaları kullanılabilir değil\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "gizli anahtar zaten bir kartın üzerinde saklı\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "\"%s\" anahtar zincirine yazarken hata oluştu: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "bu menüden çık" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "yönetici komutlarını gösterir" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "bunu gösterir" #: g10/card-util.c:1687 msgid "list all available data" msgstr "tüm kullanılabilir veriyi listeler" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "kart sahibinin ismini değiştirir" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "anahtarın alınacağı URL değiştirilir" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "kart URL'sinde belirtilmiş anahtarı alır" #: g10/card-util.c:1693 msgid "change the login name" msgstr "oturum açma ismini değiştirir" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "dil tercihlerini değiştirir" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "kart sahibinin cinsiyetini değiştirir" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "bir CA parmakizini değiştirir" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "imza zorlama PIN'i bayrağını değiştirir" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "yeni anahtarlar üretir" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "PIN değiştirmek için menü" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Yöneticiye özel komut\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Yönetici komutlarına izin verilir\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Yönetici komutlarına izin verilmez\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Komut geçersiz (\"help\" komutunu deneyin)\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "gizli anahtar kullanışsız" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" "Lüthen kartı yerleştirdikten sonra ya ya da iptal için 'c' tuşlayın: " #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "anahtar bloğu silinemedi: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Mevcut kartı kaldırdıktan sonra lütfen seri numarası\n" " %.*s\n" "olan kartı yerleştirin.\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Hazır olunca ya da iptal etmek için 'c' tuşlayın: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Yeni Yönetici PIN'ini girin: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Yeni PIN'i girin: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Yönetici PIN'ini girin: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "PIN'i girin: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Bu PIN'i tekrarlayın: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN doğru tekrarlanmadı; tekrar deneyin" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "`%s' açılamadı\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output seçeneği bu komutla çalışmaz\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "anahtar \"%s\" yok: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "anahtar bloğu okunurken hata: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(anahtarı parmak izi ile belirtmedikçe)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "betik kipinde \"--yes\" olmaksızın bu yapılamaz\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Bu anahtar, anahtar zincirinden silinsin mi? (e/H ya da y/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Bu bir gizli anahtar! - gerçekten silinecek mi? (e/H veya y/N)" #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "anahtar bloğu silinemedi: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "sahibinin güvencesi bilgisi temizlendi\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "genel anahtar \"%s\" için bir gizli anahtar var!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "onu önce \"--delete-secret-keys\" ile silmelisiniz.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "anahtar parolası oluşturulurken hata: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "S2K kipi sayesinde bir simetrik ESK paketi kullanılamıyor\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "%s şifrelemesi kullanılıyor\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' zaten sıkıştırılmış\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "UYARI: \"%s\" dosyası boş\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "--pgp2 kipinde sadece 2048 bitlik RSA anahtarları ile şifreleme " "yapabilirsiniz\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "`%s'den okunuyor\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "tüm anahtarları şifrelemek için IDEA şifresi kullanılamaz.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "UYARI: alıcının tercihleriyle çelişen %s (%d) simetrik şifre kullanımı " "zorlanıyor\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "UYARI: alıcının tercihleriyle çelişen %s (%d) sıkıştırma algoritması " "kullanılmak isteniyor\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "alıcının tercihleriyle çelişen %s (%d) simetrik şifre kullanımı zorlanıyor\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "%2$s kipindeyken %1$s kullanılamayabilir.\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s \"%s\" için şifrelendi\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s şifreli veri\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "bilinmeyen algoritma %d ile şifrelenmiş\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "UYARI: ileti simetrik şifre içindeki zayıf bir anahtarla şifrelendi.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "şifreli paketin elde edilmesinde sorun var\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "uzaktan uygulama çalıştırılması desteklenmiyor\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "`%s' dizini oluşturulamıyor: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "güvensiz options dosyası yetkilerinden dolayı dış program çağrıları iptal\n" "edildi\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "bu platformda, dış uygulamalar çalıştırılırken geçici dosyalar gerekiyor\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr " '%s' çalıştırılamıyor: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "'%s' kabuğu çalıştırılamıyor: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "dış uygulama çalıştırılırken sistem hatası: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "Dış uygulamamnın doğal olmayan çıkışı\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "dış uygulama çalıştırılamıyor\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "dış uygulamanın yanıtı okunamıyor: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "UYARI: geçici dosya silinemiyor (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "UYARI: %s geçici dizini silinemiyor: %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "İmza yürürlükten kaldırılamaz olarak imlenecek.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr "\"%s\" için yürürlükten kaldırma anahtarları yok\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "anahtarı ya da seçili yardımcı anahtarları yürürlükten kaldırır" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "gizli anahtar kullanımdışı" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "gizli anahtarların ihracına izin verilmez\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "anahtar %s: korunmamış - atlandı\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "anahtar %s: PGP 2.x tarzı bir anahtar - atlandı\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "anahtar %s: yardımcı anahtar imzası yanlış yerde - atlandı\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "anahtarın saklanması başarısız: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "UYARI: gizli anahtar %s basit bir SK sağlamasına sahip değil\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "UYARI: hiçbir şey dışarı aktarılmadı\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Komutlar:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[dosya]|bir imza yapar" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[dosya]|açıkça okunabilen bir imza yapar" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "bağımsız bir imza yapar" #: g10/gpg.c:393 msgid "encrypt data" msgstr "veriyi şifreler" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "sadece simetrik şifre ile şifreler" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "veri şifresini açar (öntanımlı)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "bir imzayı doğrular" #: g10/gpg.c:401 msgid "list keys" msgstr "anahtarları listeler" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "anahtarları ve imzaları listeler" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "anahtar imzalarını listeler ve sınar" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "anahtarları ve parmak izlerini listeler" #: g10/gpg.c:406 msgid "list secret keys" msgstr "gizli anahtarları listeler" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "yeni bir anahtar çifti üretir" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "anahtarları genel anahtar zincirinden siler" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "anahtarları gizli anahtar zincirinden siler" #: g10/gpg.c:411 msgid "sign a key" msgstr "bir anahtarı imzalar" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "bir anahtarı yerel olarak imzalar" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "bir anahtarı düzenler ve imzalar" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "bir yürürlükten kaldırma sertifikası üretir" #: g10/gpg.c:416 msgid "export keys" msgstr "anahtarları gönderir" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "anahtarları bir anahtar sunucusuna gönderir" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "anahtarları bir anahtar sunucusundan indirir" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "bir anahtar sunucusunda anahtarları arar" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "anahtarları bir anahtar sunucusundan günceller" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "anahtarları indirir/katıştırır" #: g10/gpg.c:429 msgid "print the card status" msgstr "kart durumunu basar" #: g10/gpg.c:430 msgid "change data on a card" msgstr "kart üzerindeki veriyi değiştirir" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "bir kartın PIN'ini değiştirir" #: g10/gpg.c:440 msgid "update the trust database" msgstr "güvence veritabanını günceller" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [dosyalar]|ileti özümlemelerini gösterir" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Seçenekler:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "ascii zırhlı çıktı oluşturur" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|İSİM|İSİM için şifreleme yapar" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "imzalamak ya da şifre çözmek için bu kullanıcı kimliği kullanılır" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|sıkıştırma seviyesi N olarak ayarlanır (0 ise sıkıştırma yapılmaz)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "kurallı metin kipini kullanır" #: g10/gpg.c:486 msgid "use as output file" msgstr "çıktı dosyası olarak kullanılır" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "çok detaylı" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "hiçbir değişiklik yapmaz" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "üzerine yazmadan önce sorar" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "kesin OpenPGP davranışı etkin olur" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "PGP 2.x uyumlu iletiler üretilir" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Tüm komut ve seçeneklerin komple listesi için man sayfalarına bakın)\n" #: g10/gpg.c:576 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" "Örnekler:\n" "\n" " -se -r Ali [dosya] kullanıcı Ali için imzalar ve şifreler\n" " --clearsign [dosya] açıkça okunabilir bir imza yapar\n" " --detach-sign [dosya] bağımsız bir imza yapar\n" " --list-keys [isimler] anahtarları listeler\n" " --fingerprint [isimler] parmak izlerini gösterir\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Yazılım hatalarını lütfen adresine,\n" "çeviri hatalarını ise adresine bildiriniz.\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Kullanımı: gpg [seçenekler] [dosyalar] (yardım için -h)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Yazılışı: gpg [seçenekler] [dosyalar]\n" "imzalama, kontrol, şifreleme veya çözme\n" "öntanımlı işlem girilen veriye bağımlıdır\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Desteklenen algoritmalar:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "GenAnah: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Şifre: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Sıkıştırma: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "kullanımı: gpg [seçenekler] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "çelişen komutlar\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "grup tanımı '%s' içinde = işareti yok\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "UYARI: '%s' evdizininde güvensiz iyelik\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "UYARI: '%s' yapılandırma dosyasında güvensiz iyelik\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "UYARI: UYARI: '%s' evdizininde güvensiz izinler\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "UYARI: '%s' yapılandırma dosyasında güvensiz izinler\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "UYARI: '%s' evdizinindeki ilgili dizinin iyeliği güvensiz\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "UYARI: '%s' yapılandırma dosyasını içeren dizinin iyeliği güvensiz\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "UYARI: '%s' evdizinindeki ilgili dizinin izinleri güvensiz\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "UYARI: '%s' yapılandırma dosyasını içeren dizinin izinleri güvensiz\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "yapılandırma öğesi '%s' bilinmiyor\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Gizli anahtar demetinde uygun/benzer imza yok\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "belirtilen anahtar sunucusu adresi geçersiz\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "listedeki bir anahtarın hangi anahtar zincirinde olduğunu gösterir" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Gizli anahtar demetinde uygun/benzer imza yok\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "BİLGİ: eski öntanımlı seçenekler dosyası `%s' yoksayıldı\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "BİLGİ: \"%s\" öntanımlı seçenek dosyası yok\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "seçenek dosyası \"%s\": %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "\"%s\"den seçenekler okunuyor\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "BİLGİ: %s normal kullanım için değil!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "'%s' geçerli bir karakter kümesi değil\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "'%s' geçerli bir karakter kümesi değil\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "anahtar sunucusunun adresi çözümlenemedi\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: anahtar sunucusu seçenekleri geçersiz\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "anahtar sunucusu seçenekleri geçersiz\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: geçersiz içselleştirme seçenekleri\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "içselleştirme seçenekleri geçersiz\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d geçersiz dışsallaştırma seçenekleri\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "dışsallaştırma seçenekleri geçersiz\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: liste seçenekleri geçersiz\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "liste seçenekleri geçersiz\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "'%s' geçerli bir karakter kümesi değil\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "belirtilen anahtar sunucusu adresi geçersiz\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "'%s' geçerli bir karakter kümesi değil\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "'%s' geçerli bir karakter kümesi değil\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d doğrulama seçenekleri geçersiz\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "doğrulama seçenekleri geçersiz\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "çalıştırılabilirlerin patikası %s yapılamıyor\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d doğrulama seçenekleri geçersiz\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "UYARI: program bir \"core\" dosyası oluşturabilir!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "UYARI: %s %s'i aşıyor\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s ile %s birlikte kullanılmaz!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s, %s ile etkisiz olur!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "gpg-agent bu oturumda kullanılamaz\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "%s olmasından dolayı güvensiz bellekle çalıştırılmayacak\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "--pgp2 kipindeyken sadece ayrık veya sade imzalar yapabilirsiniz\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "--pgp2 kipinde aynı anda hem imzalama hem de şifreleme yapamazsınız\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "--pgp2 ile çalışırken veri yolu yerine dosyaları kullanmalısınız.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "--pgp2 kipinde ileti şifrelemesi IDEA şifresi gerektirir\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "seçilen şifre algoritması geçersiz\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "seçilen özümleme algoritması geçersiz\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "seçilen şifre algoritması geçersiz\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "seçilen sertifikalama özümleme algoritması geçersiz\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "\"completes-needed\" 0 dan büyük olmalı\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "\"marginals-needed\" 1 den büyük olmalı\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "\"max-cert-depth\" 1 ile 255 arasında olmalı\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "öntanımlı sertifika seviyesi geçersiz; 0, 1, 2, ya da 3 olabilir\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "asgari sertifika seviyesi geçersiz; 1, 2, ya da 3 olabilir\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "BİLGİ: basit S2K kipi (0) kesinlikle tavsiye edilmez\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "S2K kipi geçersiz; 0, 1 veya 3 olmalı\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "öntanımlı tercihler geçersiz\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "kişisel şifre tercihleri geçersiz\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "kişisel özümleme tercihleri geçersiz\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "kişisel sıkıştırma tercihleri geçersiz\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s, %s ile henüz çalışmıyor\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "%2$s kipindeyken '%1$s' şifreleme algoritması kullanılamaz\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "%2$s kipindeyken '%1$s' özümleme algoritması kullanılamaz\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "%2$s kipindeyken '%1$s' sıkıştırma algoritması kullanılamaz\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "\"TrustDB\" güvence veritabanı başlangıç aşamasında başarısız: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "UYARI: alıcılar (-r) genel anahtar şifrelemesi kullanılmadan belirtilmiş\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [dosyaismi]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [dosyaismi]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "`%s' için simetrik şifreleme başarısız: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [dosyaismi]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [dosyaismi]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "--s2k-mode 0 ile --symmetric --encrypt kullanamazsınız\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "%s kipindeyken --symmetric --encrypt kullanamazsınız\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [dosyaismi]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [dosyaismi]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [dosyaismi]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "--s2k-mode 0 ile --symmetric --sign --encrypt kullanamazsınız\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "%s kipindeyken --symmetric --sign --encrypt kullanamazsınız.\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [DOSYA]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [dosyaismi]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [dosyaismi]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key kullanıcı-kimliği" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key kullanıcı-kimliği" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key kullanıcı-kimliği [komutlar]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [kullanıcı-kimliği] [anahtar-zinciri]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "anahtar sunucusuna gönderim başarısızlığa uğradı: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "anahtar sunucusundan alım başarısızlığa uğradı: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "anahtar ihracı başarısızlığa uğradı: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "anahtar sunucusunda arama başarısız: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "anahtar sunucusunda tazeleme başarısız: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "zırhın kaldırılması başarısız: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "zırhlama başarısız: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "`%s' hash algoritması geçersiz\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[dosyaismi]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "İletinizi yazın ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "belirtilen sertifika güvence adresi geçersiz\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "belirtilen imza güvence adresi geçersiz\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "belirtilen anahtar sunucusu adresi geçersiz\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "pk belleğinde çok fazla girdi - iptal edildi\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[Kullanıcı kimliği yok]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "anahtar %s: genel anahtarsız gizli anahtar - atlandı\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Geçersiz %s anahtarı --allow-non-selfsigned-uid kullanılarak geçerli oldu\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "" "yardımcı genel anahtar %s için gizli yardımcı anahtar yok - yoksayılıyor\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "yardımcı anahtar %s, asıl anahtar %s yerine kullanılıyor\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "daha az detaylı" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "anahtarlar bu anahtarlıktan alınır" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "zaman damgası çelişkilerini uyarı olarak bildirir" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|durum bilgisini bu FD'ye yazar" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Kullanımı: gpgv [seçenekler] [dosyalar] (yardım için -h)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Kullanımı: gpg [seçenekler] [dosyalar]\n" "Bilinen güvenli anahtarlara göre imzaları kontrol eder\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Bir değeri buraya işaretlemek size kalmış; bu değer herhangi bir 3. şahsa\n" "gönderilmeyecek. Bir güvence ağı sağlamak için bizim buna ihtiyacımız var;\n" "bunun (açıkça belirtilmeden oluşturulmuş) sertifikalar ağıyla\n" "hiçbir alakası yok." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Web-of-Trust oluşturulabilmesi için GnuPG'ye hangi anahtarların son derece\n" "güvenli (bunlar gizli anahtarlarına erişiminiz olan anahtarlardır) " "olduğunun\n" "bildirilmesi gerekir. \"evet\" yanıtı bu anahtarın son derece güvenli\n" "olduğunun belirtilmesi için yeterlidir.\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Bu güvencesiz anahtarı yine de kullanmak istiyorsanız cevap olarak\n" " \"evet\" yazın." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Bu iletiyi göndereceğiniz adresin kullanıcı kimliğini giriniz." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Kullanılacak algoritmayı seçiniz.\n" "\n" "DSA (nam-ı diğer DSS) Sayısal İmza Algortimasıdır ve\n" "sadece imzalar için kullanılabilir.\n" "\n" "Elgamal sadece şifreleme amacıyla kullanılabilen bir algoritmadır.\n" "\n" "RSA hem imzalamak hem de şifrelemek amacıyla kullanılabilir.\n" "\n" "İlk (asıl) anahtar daima imzalama yeteneğine sahip bir anahtar olmalıdır." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Genelde imzalama ve şifreleme için aynı anahtarı kullanmak iyi bir fikir\n" "değildir. Bu algoritma sadece belli alanlarda kullanılabilir.\n" "Lütfen güvenlik uzmanınıza danışın." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Anahtar uzunluğunu giriniz" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Cevap \"evet\" ya da \"hayır\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "İstenen değeri girin. ISO tarihi (YYYY-AA-GG) girmeniz mümkündür fakat\n" "iyi bir hata cevabı alamazsınız -- onun yerine sistem verilen değeri\n" "bir zaman aralığı olarak çözümlemeyi dener." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Anahtar tutucunun ismini giriniz" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" "lütfen bir E-posta adresi girin (isteğe bağlı ancak kuvvetle tavsiye edilir)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Lütfen önbilgi girin (isteğe bağlı)" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "S iSim değiştirmek için.\n" "B önBilgiyi değiştirmek için.\n" "P e-Posta adresini değiştirmek için.\n" "D anahtar üretimine Devam etmek için.\n" "K anahtar üretiminden çıKmak için." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Yardımcı anahtarı üretmek istiyorsanız \"evet\" ya da \"e\" girin." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Bir anahtarı bir kullanıcı kimlikle imzalamadan önce kullanıcı kimliğin\n" "içindeki ismin, anahtarın sahibine ait olup olmadığını kontrol etmelisiniz.\n" "\n" "\"0\" bu kontrolu yapmadığınız ve yapmayı da bilmediğiniz anlamındadır.\n" "\"1\" anahtar size sahibi tarafından gönderildi ama siz bu anahtarı başka\n" " kaynaklardan doğrulamadınız anlamındadır. Bu kişisel doğrulama için\n" " yeterlidir. En azında yarı anonim bir anahtar imzalaması yapmış\n" " olursunuz.\n" "\"2\" ayrıntılı bir inceleme yapıldığı anlamındadır. Örneğin parmakizi ve\n" " bir anahtarın foto kimliğiyle kullanıcı kimliğini karşılaştırmak\n" " gibi denetimleri yapmışsınızdır.\n" "\"3\" inceden inceye bir doğrulama anlatır. Örneğin, şahıstaki anahtarın\n" " sahibi ile anahtar parmak izini karşılaştırmışsınızdır ve anahtardaki\n" " kullanıcı kimlikte belirtilen isme ait bir basılı kimlik belgesindeki\n" " bir fotoğrafla şahsı karşılaştırmışsınızdır ve son olarak anahtar\n" " sahibinin e-posta adresini kendisinin kullanmakta olduğunu da\n" " denetlemişsinizdir.\n" "Burada 2 ve 3 için verilen örnekler *sadece* örnektir.\n" "Eninde sonunda bir anahtarı imzalarken \"ayrıntılı\" ve \"inceden inceye\" " "kontroller arasındaki ayrıma siz karar vereceksiniz.\n" "Bu kararı verebilecek durumda değilseniz \"0\" cevabını verin." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "" "Kullanıcı kimliklerinin TÜMünü imzalamak istiyorsanız \"evet\" ya da \"yes\" " "yazın" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Bu kullanıcı kimliğini gerçekten silmek istiyorsanız \"evet\" girin.\n" "Böylece bütün sertifikaları kaybedeceksiniz!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Bu yardımcı anahtarı silme izni vermek istiyorsanız \"evet\" girin" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Bu, anahtar üzerinde geçerli bir imzadır; anahtara ya da bu anahtarla\n" "sertifikalanmış bir diğer anahtara bir güvence bağlantısı sağlamakta\n" "önemli olabileceğinden normalde bu imzayı silmek istemezsiniz." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Bu imza, anahtarına sahip olmadığınızdan, kontrol edilemez. Bu imzanın\n" "silinmesini hangi anahtarın kullanıldığını bilene kadar\n" "ertelemelisiniz çünkü bu imzalama anahtarı başka bir sertifikalı\n" "anahtar vasıtası ile bir güvence bağlantısı sağlayabilir." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "İmza geçersiz. Onu anahtar zincirinizden kaldırmak uygun olacak." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Bu imza kullanıcı kimliğini anahtara bağlar. Öz-imzayı silmek hiç iyi\n" "bir fikir değil. GnuPG bu anahtarı bir daha hiç kullanamayabilir.\n" "Bunu sadece, eğer bu öz-imza bazı durumlarda geçerli değilse ya da\n" "kullanılabilir bir ikincisi var ise yapın." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Tüm kullanıcı kimlik tercihlerini (ya da seçilen birini) mevcut tercihler\n" "listesine çevirir. Tüm etkilenen öz-imzaların zaman damgaları bir sonraki\n" "tarafından öne alınacaktır.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Lütfen bir anahtar parolası giriniz; yazdıklarınız görünmeyecek\n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Lütfen son parolayı tekrarlayarak ne yazdığınızdan emin olun." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "İmzanın uygulanacağı dosyanın ismini verin" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Dosyanın üzerine yazılacaksa lütfen \"evet\" yazın" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Lütfen yeni dosya ismini girin. Dosya ismini yazmadan RETURN tuşlarsanız\n" "parantez içinde gösterilen öntanımlı dosya kullanılacak." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Sertifikalama için bir sebep belirtmelisiniz. İçeriğine bağlı olarak\n" "bu listeden seçebilirsiniz:\n" " \"Anahtar tehlikede\"\n" "\tYetkisiz kişilerin gizli anahtarınıza erişebildiğine inanıyorsanız\n" "\tbunu seçin.\n" " \"Anahtar geçici\"\n" "\tMevcut anahtarı daha yeni bir anahtar ile değiştirmişseniz bunu seçin.\n" " \"Anahtar artık kullanılmayacak\"\n" "\tAnahtarı emekliye ayıracaksanız bunu seçin.\n" " \"Kullanıcı kimliği artık geçersiz\"\n" "\tKullanıcı kimliği artık kullanılamayacak durumdaysa bunu\n" "\tseçin; genelde Eposta adresi geçersiz olduğunda kullanılır.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "İsterseniz, neden bu yürürlükten kaldırma sertifikasını\n" "verdiğinizi açıklayan bir metin girebilirsiniz.\n" "Lütfen bu metin kısa olsun. Bir boş satır metni bitirir.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "yardım mevcut değil" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "\"%s\" için yardım mevcut değil" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "güvence veritabanını günceller" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "güvence veritabanını günceller" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "genel anahtar gizli anahtarla uyuşmuyor!\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "gizli anahtar kullanımdışı" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "%d. tür blok atlandı\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "şu ana kadar %lu anahtar işlendi\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "İşlenmiş toplam miktar: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " yeni anahtarlar atlandı: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " kullanıcı kimliksiz: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " alınan: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " değişmedi: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " yeni kullanıcı kimliği: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " yeni yardımcı anahtarlar: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " yeni imzalar: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " yeni anahtar iptalleri: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " gizli anahtarlar okundu: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " gizli anahtarlar indirildi: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " gizli anahtarlar değişmedi: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " alınamadı: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr "şu ana kadar oluşturulan imzalar: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " gizli anahtarlar okundu: %lu\n" #: g10/import.c:659 #, fuzzy, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "UYARI: anahtar %s kullanılabilir olmayan tercihler içeriyor\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Bu kullanıcı kimlikler için algoritmalar:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": şifreleme algoritması %s için tercih edilir\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": özümleme algoritması %s için tercih edilir\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" " \"%s\": sıkıştırma algoritması %s için tercih edilir\n" "\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "tercihlerinizi güncellemenizi ve\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "olası algoritma uyuşmazlığı sorunlarından kaçınmak için bu anahtarı\n" "tekrar dağıtmanızı şiddetle öneririz.\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" "tercihlerinizi böyle güncelleyemezsiniz: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "anahtar %s: kullanıcı kimliği yok\n" #: g10/import.c:819 #, fuzzy, c-format #| msgid "skipped \"%s\": %s\n" msgid "key %s: %s\n" msgstr "\"%s\" atlandı: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "anahtar %s: PKS yardımcı anahtar bozulması giderildi\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "anahtar %s: öz-imzalı olmayan kullanıcı kimliği \"%s\" kabul edildi\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "anahtar %s: geçerli kullanıcı kimliği yok\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "bu kayıp bir öz-imza yüzünden meydana gelebilir\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "anahtar %s: genel anahtar yok: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "anahtar %s: yeni anahtar - atlandı\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "yazılabilir bir anahtar zinciri yok: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "\"%s\"e yazıyor\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "\"%s\" anahtar zincirine yazarken hata oluştu: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "anahtar %s: genel anahtar \"%s\" alındı\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "anahtar %s: bizim kopyamızla eşleşmiyor\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "anahtar %s: özgün anahtar bloku bulunamadı: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "anahtar %s: özgün anahtar bloku okunamadı: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "anahtar %s: \"%s\" 1 yeni kullanıcı kimliği\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "anahtar %s: \"%s\" %d yeni kullanıcı kimliği\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "anahtar %s: \"%s\" 1 yeni imza\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "anahtar %s: \"%s\" %d yeni imza\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "anahtar %s: %s 1 yeni yardımcı anahtar\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "anahtar %s: \"%s\" %d yeni yardımcı anahtar\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "anahtar %s: \"%s\" %d yeni imza\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "anahtar %s: \"%s\" %d yeni imza\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "anahtar %s: \"%s\" %d yeni kullanıcı kimliği\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "anahtar %s: \"%s\" %d yeni kullanıcı kimliği\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "anahtar %s: \"%s\" değişmedi\n" #: g10/import.c:1211 #, fuzzy, c-format #| msgid "secret key \"%s\" not found: %s\n" msgid "secret key %s: %s\n" msgstr "gizli anahtar \"%s\" yok: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "gizli anahtarı alımına izin verilmez\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "anahtar %s: geçersiz şifreli (%d) gizli anahtar - atlandı\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "öntanımlı gizli anahtar zinciri yok: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "anahtar %s: gizli anahtar alındı\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "anahtar %s: zaten gizli anahtar zincirinde\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "anahtar %s: gizli anahtar yok: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "anahtar %s: genel anahtar değil - yürürlükten kaldırma sertifikası " "uygulanamaz\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "" "anahtar %s: yürürlükten kaldırma sertifikası geçersiz: %s - reddedildi\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "anahtar %s: \"%s\" yürürlükten kaldırma sertifikası alındı\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "anahtar %s: imza için kullanıcı kimliği yok\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "anahtar %s: genel anahtar algoritması, kullanıcı kimliği \"%s\" için " "desteklenmiyor\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "anahtar %s: kullanıcı kimliği \"%s\" için öz-imza geçersiz\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "anahtar %s: genel anahtar algoritması desteklenmiyor\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "anahtar %s: doğrudan anahtar imzası eklendi\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "anahtar %s: anahtarı garantilemek için yardımcı anahtar yok\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "anahtar %s: yardımcı anahtar garantileme geçersiz\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "anahtar %s: çok sayıda yardımcı anahtar bağlantısı silindi\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "anahtar %s: anahtarı yürürlükten kaldırılacak yardımcı anahtar yok\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "anahtar %s: yardımcı anahtar yürürlükten kaldırması geçersiz\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "" "anahtar %s: çok sayıda yardımcı anahtar yürürlükten kaldırması silindi\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "anahtar %s: kullanıcı kimliği \"%s\" atlandı\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "anahtar %s: yardımcı anahtar atlandı\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "anahtar %s: imza gönderilebilir değil (0x%02X sınıfı) - atlandı\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "anahtar %s: yürürlükten kaldırma sertifikası yanlış yerde - atlandı\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "anahtar %s: yürürlükten kaldırma sertifikası geçersiz: %s - atlandı\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "anahtar %s: yardımcı anahtar imzası yanlış yerde - atlandı\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "anahtar %s: umulmayan imza sınıfı (0x%02X) - atlandı\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "anahtar %s: çift kullanıcı kimliği saptandı - birleştirildi\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "UYARI: anahtar %s yürürlükten kaldırılmış olmalı: yürürlükten kaldırma " "anahtarı %s alınıyor\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "UYARI: anahtar %s yürürlükten kaldırılmış olabilir: yürürlükten kaldırma " "anahtarı %s mevcut değil.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "anahtar %s: \"%s\" yürürlükten kaldırma sertifikası eklendi\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "anahtar %s: doğrudan anahtar imzası eklendi\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "BİLGİ: bir anahtarın seri numarası kartlardan biriyle uyuşmuyor\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "BİLGİ: asıl anahtar kart üzerinde saklı ve kullanılabilir\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "BİLGİ: ikincil anahtar kart üzerinde saklı ve kullanılabilir\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "`%s' anahtar zinciri oluşturulurken hata: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "`%s' anahtar zinciri oluşturuldu\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "`%s' oluşturulurken hata: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "anahtar zinciri belleği yeniden oluşturulurken hata: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[yürürlükten kaldırma]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[öz-imza]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 kötü imza\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d kötü imza\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 imza kayıp bir anahtar yüzünden kontrol edilmedi\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d imza kayıp bir anahtar yüzünden kontrol edilmedi\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 imza bir hata yüzünden kontrol edilmedi\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d imza hatalardan dolayı kontrol edilmedi\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 öz-imzası geçersiz kullanıcı kimliği saptandı\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d öz-imzası geçersiz kullanıcı kimliği saptandı\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Diğer kullanıcıların anahtarlarını doğrulayacak bu kullanıcının güven\n" "derecesine lütfen karar verin. (pasportuna mı bakarsınız yoksa farklı\n" "kaynaklardan parmakizlerini mi kontrol edersiniz...) kararınızı verin\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Şöyle böyle güveniyorum\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Tamamen güveniyorum\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Lütfen bu güvence imzasının derinliğini belirtin.\n" "1'den büyük bir derinlik, imzaladığınız anhatarın kendi yararınıza\n" "güvence imzaları yapmayı mümkün kılar.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "Bu imzayı kısıtlayacak bir etki alanı girin, yoksa tuşlayın.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Kullanıcı kimliği \"%s\" yürürlükten kaldırıldı." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Onu yine de imzalamak istiyor musunuz? (e/H) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " İmzalanamıyor.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Kullanıcı kimliği \"%s\" zamanaşımına uğradı." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Kullanıcı kimliği \"%s\" öz-imzalı değil." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "Kullanıcı kimliği \"%s\" öz-imzalı değil." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Gerçekten imzalayacak mısınız? (e/H) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "\"%s\" üzerindeki öz-imza\n" "bir PGP 2.x tarzı imza.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Bir OpenPGP öz-imzası haline getirilmesini istiyor musunuz? (e/H) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "\"%s\" üzerindeki imzanızın\n" "kullanım süresi dolmuş.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Yeni imzanızın süresi dolmuş biriyle değiştirilmesini ister misiniz? (e/H) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "\"%s\" üzerindeki imzanız\n" "dahili bir imza.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Bu imzanın dışarda da geçerli hale getirilmesini istiyor musunuz? (e/H) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" zaten %s anahtarıyla yerel olarak imzalanmış\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" zaten %s anahtarıyla imzalanmış\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Onu yine de imzalamak istiyor musunuz? (e/H) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "%s anahtarı ile imzalanacak hiçbir şey yok\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Bu anahtarın kullanım süresi dolmuş!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Bu anahtarın geçerliliği %s de bitiyor.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "İmzanızın da bu kadar süre geçerli olmasını ister misiniz? (E/h) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "--pgp2 kipinde bir PGP 2.x anahtarlara bir OpenPGP imzası " "uygulanamayabilir.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Bu, anahtarı PGP 2.x için kullanışsız yapacak.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Bu anahtarın ismi yukarda yazılı kişiye ait olduğunu ne kadar dikkatli\n" "doğruladınız? Bu sorunun cevabını bilmiyorsanız \"0\" yazın.\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Cevabı bilmiyorum. %s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Tamamen kontrol edildi.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) İlişkisel denetim yaptım.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Çok dikkatli bir denetim yaptım.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Seçiminiz? (daha fazla bilgi için: '?'): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Bu anahtarı kendi \"%s\" (%s) anahtarınızla imzalamak istediğinize " "gerçekten\n" "emin misiniz?\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Bu bir öz-imza olacak.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "UYARI: imza dışarı gönderilemez olarak imlenmeyecek.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "UYARI: imza yürürlükten kaldırılamaz olarak imlenmeyecek.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "İmza dışarı gönderilemez olarak imlenecek.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "İmza yürürlükten kaldırılamaz olarak imlenecek.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Her şeyiyle bu anahtarı sınayamadım.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Bu anahtarı karşılaştırmalı olarak sınadım.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Bu anahtarı çok dikkatle sınadım.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Gerçekten imzalayacak mısınız? (e/H) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "imzalama başarısız: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "Anahtar sadece kısa veya karta özel öğeler içeriyor,\n" "değiştirilecek bir anahtar parolası yok.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Bu anahtar korunmamış.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Asıl anahtarın gizli parçaları kullanılamaz.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Asıl anahtarın gizli parçaları kart üzerinde saklı.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Anahtar korunmuş.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Bu anahtar üzerinde düzenleme yapılamaz: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Bu gizli anahtar için yeni anahtar parolasını giriniz.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "" "ikinci kez yazdığınız anahtar parolası ilkiyle aynı değil; işlem " "tekrarlanacak" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Bir anahtar parolası vermediniz - bu çok *kötü* bir fikir!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Gerçekten bunu yapmak istiyor musunuz? (e/H ya da y/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "bir anahtar imzası doğru yere taşınıyor\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "kaydet ve çık" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "parmakizini gösterir" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "anahtarı ve kullanıcı kimliğini gösterir" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "N kullanıcı kimliğini seçer" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "N yardımcı anahtarını" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "imzaları sınar" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "seçilen kullanıcı kimliği imzalar [* ilgili komutlar için aşağıya bakın]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "kullanıcı kimlikleri yerel olarak imzalar" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "seçili kullanıcı kimlikleri bir güvence imzasıyla imzalar" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" "seçili kullanıcı kimlikleri yürürlükten kaldırılamayan bir imzayla imzalar" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "bir kullanıcı kimliği ekler" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "bir foto kimliği ekler" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "seçili kullanıcı kimlikleri siler" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "bir yardımcı anahtar ekler" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "bir akıllı karta bir anahtar ekler" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "bir akıllı karttan bir anahtarı taşır" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "bir akıllı karttan bir yedekleme anahtarını taşır" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "seçili yardımcı anahtarları siler" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "bir yürürlükten kaldırma anahtarı ekler" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "seçili kullanıcı kimliklerden imzaları siler" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "" "anahtar için ya da seçili yardımcı anahtarlar için zamanaşımı tarihini " "değiştirir" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "seçili kullanıcı kimliğini asıl olarak imler" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "genel ve gizli anahtar listeleri arasında yer değiştirir" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "tercihleri listeler (uzman)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "tercihleri listeler (ayrıntılı)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "Seçili kullanıcı kimlikler için tercih listesini belirler " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "Seçili kullanıcı kimlikler için tercih edilen anahtar sunucu adresini " "belirler" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "Seçili kullanıcı kimlikler için tercih listesini belirler " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "anahtar parolasını değiştirir" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "sahibiningüvencesini değiştirir" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "Seçili tüm kullanıcı kimliklerdeki imzaları yürürlükten kaldırır" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "Seçili tüm kullanıcı kimlikleri yürürlükten kaldırır" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "anahtarı ya da seçili yardımcı anahtarları yürürlükten kaldırır" #: g10/keyedit.c:1439 msgid "enable key" msgstr "anahtarı kullanıma sokar" #: g10/keyedit.c:1440 msgid "disable key" msgstr "anahtarı iptal eder" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "seçili foto kimlikleri gösterir" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "gizli anahtar bloğu \"%s\" okunurken hata oluştu: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Gizli anahtar mevcut.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Bunu yapmak için gizli anahtar gerekli.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "lütfen önce \"seçmece\" komutunu kullanın.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* `sign' komutu şu harflerden bir veya birkaçı ile başlayabilir:\n" " güvence imzaları için 't' (tsign), yürürlükten kaldırılmayan imzalar\n" " için 'nr', yerel imzalar için 'l' (lsign) veya buların karışımı olarak " "(ltsign, tnrsign gibi).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Anahtar yürürlükten kaldırıldı." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Tüm kullanıcı kimlikler gerçekten imzalanacak mı? (e/H ya da y/N)" #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "İpucu: İmzalamak için bir kullanıcı kimliği seçiniz\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "imza türü `%s' bilinmiyor\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "%s kipindeyken bu komut kullanılamaz.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "En az bir kullanıcı kimliği seçmelisiniz.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Son kullanıcı kimliğini silemezsiniz!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "" "Seçilen tüm kullanıcı kimlikler gerçekten silinecek mi? (e/H ya da y/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Bu kullanıcı kimliği gerçekten silinecek mi? (e/H ya da y/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Bu öz-imza gerçekten taşınacak mı? (e/H ya da y/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Sadece ve sadece bir anahtar seçmelisiniz.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Komut argüman olarak bir dosya ismi gerektiriyor\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "`%s' açılamıyor: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "yedekleme anahtarı `%s' den okunurken hata oluştu: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "En az bir anahtar seçmelisiniz.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Seçilen anahtarları gerçekten silmek istiyor musunuz? (e/H ya da y/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Bu anahtarı gerçekten silmek istiyor musunuz? (e/H ya da y/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "" "Seçilen tüm kullanıcı kimlikleri gerçekten yürülükten kaldırılacak mı? (e/H " "ya da y/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "" "Bu kullanıcı kimliği gerçekten yürürlükten kaldırılacak mı? (e/H ya da y/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "" "Anahtarın tamamını yürürlükten kaldırmayı gerçekten istiyor musunuz? (e/H ya " "da y/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "" "Seçili yardımcı anahtarları gerçekten yürürlükten kaldırmak istiyor musunuz? " "(e/H ya da y/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "" "Bu yardımcı anahtarı gerçekten yürürlükten kaldırmak istiyor musunuz? (e/H " "ya da y/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Kullanıcı taraından sağlanmış bir güvence veritabanı kullanılarak " "sahibiningüvencesi belirlenemez\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Belirlenecek tercih listesi:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Seçili kullanıcı kimlikler için tercihleri gerçekten güncellemek istiyor " "musunuz? (e/H ya da y/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Tercihleri gerçekten güncellemek istiyor musunuz? (e/H ya da y/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Değişiklikler kaydedilecek mi? (e/H ya da y/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Kaydetmeden çıkılsın mı? (e/H ya da y/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "güncelleme başarısız: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "gizliyi güncelleme başarısız: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Güncelleme gereği olmadığından anahtar değişmedi.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Özümlenen: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Özellikler: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Anahtar sunucusu değişmez" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Tercih edilen anahtar sunucusu: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Niteleme: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Bir PGP 2.x tarzı kullanıcı kimliğine uygun tercih yok.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "" "Bu anahtar %2$s tarafından %3$s anahtarıyla %1$s üzerinde yürürlükten " "kaldırılmış\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "" "Bu anahtar %s tarafından %s anahtarıyla yürürlükten kaldırılmış olabilir" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(duyarlı)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "oluşturuldu: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "yürürlükten kaldırıldı: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "son kullanma tarihi: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "son kullanma tarihi: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "kullanımı: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "güvencesi: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "geçerliliği: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Bu anahtar iptal edilmişti" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "kart-no: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Gösterilen anahtarın, uygulamayı yeniden başlatıncaya kadar, gerekli\n" "doğrulukta olmayacağını lütfen gözönüne alınız.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "yürürlükten kaldırıldı" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "zamanaşımına uğradı" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "UYARI: birincil olarak imlenmiş bir kullanıcı kimlik yok. Bu komutla\n" " farklı bir kullanıcı kimliğin birincil kullanıcı kimlik olarak\n" " kabul edilmesini sağlayabilirsiniz.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Bir v3 anahtarının son kullanma tarihini değiştiremezsiniz\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "UYARI: Bu PGP-2 tarzı bir anahtar. Bir foto kimliği eklenmesi bu anahtarın\n" " bazı PGP sürümleri tarafından reddedilmesi ile sonuçlanabilir.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Onu yine de eklemek istiyor musunuz? (e/H) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "PGP2 tarzı bir anahtara bir foto kimliği ekleyemeyebilirsiniz.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Bu doğru imza silinsin mi? (e/H/k)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Bu geçersiz imza silinsin mi? (e/H/k)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Bu bilinmeyen imza silinsin mi? (e/H/k)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Bu öz-imza gerçekten silinecek mi? (e/H)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d imza silindi.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d imza silindi.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Hiçbir şey silinmedi.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "geçersiz zırh" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Kullanıcı kimliği \"%s\" yürürlükten kaldırıldı." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Kullanıcı kimliği \"%s\" yürürlükten kaldırıldı." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Kullanıcı kimliği \"%s\" yürürlükten kaldırıldı." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "kullanıcı kimliği \"%s\" zaten iptal edilmişti\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "kullanıcı kimliği \"%s\" zaten iptal edilmişti\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "UYARI: Bu PGP-2 tarzı bir anahtar. Tasarlanmış bir yürürlükten kaldırıcı\n" " eklenmesi bu anahtarın bazı PGP sürümleri tarafından reddedilmesi\n" " ile sonuçlanabilir.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" "PGP2 tarzı bir anahtara tasarlanmış bir yürürlükten kaldırıcı " "ekleyemeyebilirsiniz.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "" "Tasarlanmış yürürlükten kaldırma anahtarının kullanıcı kimliğini giriniz: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" "bir PGP 2.x tarzı anahtar bir tasarlanmış yürürlükten kaldırma anahtarı " "olarak atanamaz\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" "bir anahtarı kendisini yürürlükten kaldıracak anahtar olarak " "kullanamazsınız\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "bu anahtar zaten onu üreten tarafından yürürlükten kaldırılmıştı\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "UYARI: yürürlükten kaldıran olarak tasarlanmış bir anahtar başka amaçla\n" " kullanılamaz!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "bir anahtarın, yürürlükten kaldıran anahtar olmasını istediğinizden emin " "misiniz? (e/H ya da y/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Lütfen gizli anahtarlardan seçilenleri silin.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Lütfen en fazla bir yardımcı anahtar seçin.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Bir yardımcı anahtar için son kullanma tarihi değiştiriliyor.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Asıl anahtar için son kullanma tarihi değiştiriliyor.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Bir v3 anahtarının son kullanma tarihini değiştiremezsiniz\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Gizli anahtar demetinde uygun/benzer imza yok\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "UYARI: yardımcı imzalama anahtarı %s çapraz sertifikalı değil\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Lütfen sadece ve sadece bir kullanıcı kimlik seçiniz.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "kullanıcı kimliği \"%s\" için v3 öz-imzası atlanıyor\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Tercih ettiğiniz sunucunun adresini girin: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Onu değiştirmek istediğinizden emin misiniz? (e/H ya da y/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Onu silmek istediğinizden emin misiniz? (e/H ya da y/N) " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "imza niteleyici: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Üzerine yazılsın mı? (e/H ya da y/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "%d endeksine sahip kullanıcı kimliği yok\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "%d endeksine sahip kullanıcı kimliği yok\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "%d indisli bir yardımcı anahtar yok\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "Kullanıcı kimliği: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "%s anahtarınızla %s%s%s de imzalandı\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (dışarda geçersiz)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Bu anahtarın geçerliliği %s de bitti.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Onu yine de yürürlükten kaldırmak istiyor musunuz? (e/H) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "" "Bu imza için bir yürürlükten kaldırma sertifikası oluşturulsun mu? (e/H) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Bu kullanıcı kimliklerini %s anahtarı üzerinde imzalamışsınız:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (yürülükten kaldırılmaz)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "%s tarafından %s de yürürlükten kaldırılmış\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Bu imzaları yürürlükten kaldırmak üzeresiniz:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "" "Bu yürürlükten kaldırma sertifikalarını gerçekten oluşturacak mısınız? (e/H) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "gizli anahtar yok\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "kullanıcı kimliği \"%s\" zaten iptal edilmişti\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "UYARI: bir kullanıcı kimliği imzası %d saniye gelecekte oluşturuldu\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Anahtar %s zaten yürürlükten kaldırılmış.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Yardımcı anahtar %s zaten yürürlükten kaldırılmış.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "Anahtar 0x%3$s (kull-kiml %4$d) için %2$ld uzunluktaki %1$s foto kimliği " "gösteriliyor\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "'%s' tercihi yinelendi\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "çok fazla şifreleme tercihi\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "çok fazla özümleme tercihi\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "çok fazla sıkıştırma tercihi\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "tercih dizgesindeki '%s' öğesi geçersiz\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "doğrudan imza yazılıyor\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "öz-imza yazılıyor\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "anahtarı garantileyen imzayı yazıyor\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "anahtar uzunluğu geçersiz; %u bit kullanılıyor\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "anahtar uzunluğu %u bite yuvarlandı\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "İmzalama" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Şifreleme" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Kimlik kanıtlama" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "İiŞşKkçÇ" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "bir %s anahtarı için olası eylemler: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Şimdilik mümkün eylemler: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) İmzalama yeteneğini açar/kapar\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Şifreleme yeteneğini açar/kapar\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Kimlik kanıtlama yeteneğini açar/kapar\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Bitti\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Lütfen istediğiniz anahtarı seçiniz:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA ve ElGamal (öntanımlı)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA ve ElGamal (öntanımlı)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (yalnız imzalamak için)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (sadece imzalamak için)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (yalnız şifrelemek için)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (sadece şifrelemek için)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (yeteneklerini belirtin)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (yeteneklerini belirtin)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s anahtarları %u bit ile %u bit arasında olmalı.\n" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "İstediğiniz anahtar uzunluğu nedir? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "İstediğiniz anahtar uzunluğu nedir? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "İstenen anahtar uzunluğu: %u bit\n" #: g10/keygen.c:1722 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 "" "Lütfen anahtarın ne kadar süreyle geçerli olacağını belirtin.\n" " 0 = anahtar süresiz geçerli\n" " = anahtar n gün geçerli\n" " w = anahtar n hafta geçerli\n" " m = anahtar n ay geçerli\n" " y = anahtar n yıl geçerli\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Lütfen imzanınn ne kadar süreyle geçerli olacağını belirtin.\n" " 0 = imza süresiz geçerli\n" " = imza n gün geçerli\n" " w = imza n hafta geçerli\n" " m = imza n ay geçerli\n" " y = imza n yıl geçerli\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Anahtar ne kadar geçerli olacak? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "İmza ne kadar geçerli olacak? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "değer hatalı\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Anahtar hep geçerli olacak\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "İmza hep geçerli olacak\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Anahtarın geçerliliği %s de bitecek.\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "İmzanın geçerliliği %s de bitecek.\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Sisteminiz 2038 yılından sonraki tarihleri gösteremiyor.\n" "Ama emin olun ki 2106 yılına kadar elde edilebilecek.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Bu doğru mu? (e/H ya da y/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Anahtarınızın size ait olduğunu belirten bir Kullanıcı-Kimliği olmalı;\n" "Kullanıcı-Kimliği, Gerçek İsminiz, Bir Önbilgi ve e-Posta Adresiniz\n" "alanlarının birleşiminden oluşur. Örneğin:\n" "\t\"Fatih Sultan Mehmed (Padisah) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Adınız ve Soyadınız: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Ad ve soyadınızda geçersiz karakter var\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Ad ve soyadınız bir rakamla başlamamalı\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Ad ve soyadınız en az 5 harfli olmalı\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "E-posta adresiniz: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "geçerli bir E-posta adresi değil\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Önbilgi: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Önbilgi alanında geçersiz karakter var\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "`%s' karakter kümesini kullanıyorsunuz.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Seçtiğiniz KULLANICI-KİMLİĞİ:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Lütfen E-posta adresinizi Adı ve Soyadı veya Açıklama alanı içine koymayın\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "AaYyEeTtKk" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "(A)dı ve Soyadı, (Y)orum, (E)posta alanlarını değiştir ya da Çı(k)? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "(A)dı ve Soyadı, (Y)orum, (E)posta alanlarını değiştir ya da (T)amam/Çı(k)? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Lütfen önce hatayı düzeltin\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Gizli anahtarınızı korumak için bir Anahtar Parolanız olmalı.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Bir anahtar parolası istemediniz - bu *kötü* bir fikir!\n" "Nasıl isterseniz. Anahtar parolanızı bu programı \"--edit-key\"\n" "seçeneği ile kullanarak her zaman değiştirebilirsiniz.\n" "\n" #: g10/keygen.c:2034 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 "" "Bir miktar rasgele bayt üretilmesi gerekiyor. İlk üretim sırasında biraz\n" "hareket (klavyeyi kullanmak, fareyi hareket ettirmek, disklerden " "yararlanmak)\n" "iyi olacaktır; bu yeterli rasgele bayt kazanmak için rasgele sayı\n" "üretecine yardımcı olur. \n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Anahtar üretimi durduruldu.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "genel anahtarı `%s'e yazıyor\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "gizli anahtar koçanı `%s'e yazılıyor\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "gizli anahtarı `%s'e yazıyor\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "yazılabilir bir genel anahtar zinciri yok: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "yazılabilir bir gizli anahtar zinciri yok: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "`%s' genel anahtar zincirine yazılırken hata oluştu: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "`%s' gixli anahtar zincirine yazılırken hata oluştu: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "genel ve gizli anahtar üretildi ve imzalandı.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Bu anahtar şifreleme için kullanılamaz. Şifreleme için yardımcı anahtarı\n" "\"--edit-key\" seçeneğini kullanarak üretebilirsiniz.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Anahtar üretimi başarısızlığa uğradı: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "anahtar %lu saniye sonra üretilmiş (zaman sapması veya saat problemi)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "anahtar bundan %lu saniye sonra üretilmiş (zaman sapması veya saat " "problemi)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" "BİLGİ: v3 anahtarları için yardımcı anahtar üretimi OpenPGP uyumlu değildir\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Gerçekten oluşturulsun mu? (e/H ya da y/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "anahtarın kart üzerinde saklanması başarısız: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "'%s' yedek dosyası oluşturulamıyor: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "BİLGİ: kart anahtarının yedeklemesi '%s' e kaydedildi\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "asla " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kritik imza guvencesi: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "imza guvencesi: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Kritik tercihli anahtar sunucusu: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kritik imza niteleyici: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "imza niteleyici: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Anahtar Zinciri" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Birincil anahtar parmak izi:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr "Yardımcı anahtar parmak izi:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "Birincil anahtar parmak izi:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr "Yardımcı anahtar parmak izi:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Anahtar parmakizi =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Kart seri no. =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "`%s' > `%s' isim değişikliği başarısız: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "UYARI: gizli bilgi içeren 2 dosya mevcut.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s değişmeyenlerden\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s yenilerden\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Lütfen bu güvenlik çatlağını giderin\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "%s' anahtar zinciri arabellekleniyor\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "şimdiye kadar %lu anahtar arabelleklendi (%lu imza)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu anahtar arabelleklendi (%lu imza)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: anahtar zinciri oluşturuldu\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "Tercih ettiğiniz sunucunun adresini girin: " #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "UYARI: anahtar sunucusu seçeneği `%s' bu platformda kullanımda değil\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "iptal edildi" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Sayıyı/sayıları girin veya S)onraki ya da Ç)ık >" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "anahtar sunucu protokolü geçersiz (bizimki %d!=eylemci %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "anahtar \"%s\" anahtar sunucusunda yok\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "anahtar, anahtar sunucusunda yok\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "%1$s anahtarı %3$s sunucusunun %2$s adresinden isteniyor\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "%s anahtarı %s adresinden isteniyor\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "%3$s sunucusunun %2$s adresinde \"%1$s\" aranıyor\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "%2$s adresinde \"%1$s\" aranıyor\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "anahtar %1$s, %3$s sunucusunun %2$s adresine gönderiliyor\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "%s anahtarı %s adresine gönderiliyor\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "%3$s sunucusunun %2$s adresinde \"%1$s\" aranıyor\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "%2$s adresinde \"%1$s\" aranıyor\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "bir anahtar sunucusu eylemi yok!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "UYARI: GnuPG'nin başka bir sürümünün anahtar sunucusu eylemcisi (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "anahtar sunucusu VERSION göndermiyor\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "anahtar sunucusuyla iletişim hatası: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "bilinen bir anahtar sunucusu yok (--keyserver seçeneğini kullanın)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "harici anahtar sunucusu çağrıları bu kurulumda desteklenmiyor\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "`%s' anahtar sunucusu şeması için eylemci yok\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "`%s' eylemi `%s' anahtar sunucusu şeması ile desteklenmiyor\n" #: g10/keyserver.c:1712 #, fuzzy, c-format msgid "%s does not support handler version %d\n" msgstr "gpgkeys_%s %d sürümü eylemciyi desteklemiyor\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "anahtar sunucusu zamanaşımına uğradı\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "anahtar sunucusu iç hatası\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" bir anahtar kimliği değil: atlanıyor\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "UYARI: %s anahtarı %s üzerinden tazelenemiyor: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "1 anahtar %s adresinden tazeleniyor\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "%d anahtar %s adresinden tazeleniyor\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "UYARI: %s anahtarı %s üzerinden tazelenemiyor: %s\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "UYARI: %s anahtarı %s üzerinden tazelenemiyor: %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "bir şifreli oturum anahtarı (%d) için tuhaf uzunluk\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s şifreli oturum anahtarı\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "bilinmeyen özümleme algoritması ile üretilmiş anahtar parolası %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "genel anahtar: %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "genel anahtarla şifreli veri: doğru DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "" "%u bitlik %s anahtarı ve %s kullanıcı kimliği ile şifrelendi, %s tarihinde " "oluşturuldu\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "%s anahtarı ve %s kullanıcı kimliği ile şifrelenmiş\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "genel anahtar şifre çözümü başarısız: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "%lu anahtar parolası ile şifrelenmiş\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "1 anahtar parolası ile şifrelenmiş\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "%s şifreli veri varsayılıyor\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "IDEA şifre kullanışsız, iyimserlikle yerine %s kullanılmaya çalışılıyor\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "Şifre çözme tamam\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "UYARI: ileti bütünlük korumalı değildi\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "UYARI: şifreli ileti tahrip edilmiş!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "şifre çözme başarısız: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "BİLGİ: gönderen \"yalnız-gözleriniz-için\" ricasında bulundu\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "özgün dosya adı = '%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "tek başına yürürlükten kaldırma - uygulamak için \"gpg --import\" kullanın\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "\"%s\" deki imza iyi" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "imza doğrulama engellendi\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "bu çoklu imzalar elde edilemiyor\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "İmza %s de\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " %s kullanılarak anahtar %s ile yapılmış\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "%s imzası, %s anahtarı ve %s kullanıcı kimliği ile yapılmış\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Anahtar burada:" #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "\"%s\" deki imza KÖTÜ" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "\"%s\" deki imza zamanaşımına uğramış" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "\"%s\" deki imza iyi" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[şüpheli]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " nam-ı diğer \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Bu imzanın geçerliliği %s de bitti.\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Bu imzanın geçerliliği %s de bitecek.\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s imzası, %s özümleme algoritması\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "ikili" #: g10/mainproc.c:1947 msgid "textmode" msgstr "metinkipi" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "bilinmeyen" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "İmza kontrol edilemedi: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "bir bağımsız imza değil\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "UYARI: çoklu imzalar saptandı. Sadece ilki denetlenecek.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "0x%02x sınıfı tek başına imza\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "eski stil (PGP 2.x) imza\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "proc_tree() içinde geçersiz kök paket saptandı\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "\"core\" oluşumu iptal edilemedi: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "`%s' için %s de durum bilgisi alınamıyor: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) %s de başarısız: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "UYARI: deneysel %s genel anahtar algoritması kullanılıyor\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "UYARI: %s özümleme algoritması artık önerilmiyor.\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "UYARI: deneysel %s şifreleme algoritması kullanılıyor\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "UYARI: deneysel %s özümleme algoritması kullanılıyor\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "UYARI: %s özümleme algoritması artık önerilmiyor.\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " b = Daha fazla bilgi gerekli\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "gpg-agent bu oturumda kullanılamaz\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: \"%s\" seçeneği kullanımdan kaldırılmak üzere.\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "UYARI: %s seçeneği kullanımdan kaldırılmak üzere.\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "lütfen yerine \"%s%s\" kullanınız\n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "UYARI: %s seçeneği kullanımdan kaldırılmak üzere.\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Sıkıştırılmamış" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "Sıkıştırılmamış|yok" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "bu ileti %s tarafından kullanılamayabilir\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "`%s' seçeneği belirsiz\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "`%s' seçeneği bilinmiyor\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "imza türü `%s' bilinmiyor\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "\"%s\" dosyası var. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Üzerine yazılsın mı? (e/H ya da y/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: bilinmeyen sonek\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Yeni dosya ismini giriniz" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "standart çıktıya yazıyor\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "\"%s\" içindeki veri imzalı kabul ediliyor\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "yeni yapılandırma dosyası `%s' oluşturuldu\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "UYARI: `%s' deki seçenekler bu çalıştırma sırasında henüz etkin değil\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "dizin `%s' oluşturuldu\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "%d genel anahtar algoritması kullanılamadı\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "UYARI: simetrik şifreli oturum anahtarı potansiyel olarak güvensiz\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "%d tipi alt paket kritik bit kümesine sahip\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent bu oturumda kullanılamaz\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "GPG_AGENT_INFO çevre değişkeni hatalı\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent protokolü sürüm %d desteklenmiyor\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "\"%s\" sunucusuna bağlanılamadı: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "vekil ile problem - vekil kullanımı iptal ediliyor\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (asıl anahtar kimliği %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "\"%.*s\"\n" "kullanıcısının gizli anahtarını açacak bir anahtar parolasına ihtiyaç var.\n" "%u bitlik %s anahtarı, kimlik %s, oluşturma tarihi %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Parolayı tekrar yazınız\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Anahtar parolasını giriniz\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "kullanıcı tarafından durduruldu\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "betik kipinde parola sorgulanamaz\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Anahtar parolasını girin: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Gizli anahtarın kilidini açmak için bir anahtar parolasına ihtiyacınız var.\n" "Anahtarın sahibi: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u bitlik %s anahtarı, %s kimliği ile %s tarihinde üretilmiş" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (asıl anahtar kimliği %s üzerinde yardımcı anahtar)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Tekrar: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Foto kimliği olarak kullanılmak üzere bir resim seçiniz. Resim bir JPEG\n" "dosyası olmalıdır. Bu resim genel anahtarınızda saklanacağından, çok büyük\n" "bir resim kullanırsanız genel anahtarınız da çok büyük olacaktır. Resim\n" "boyutlarının 240x288 civarında seçilmesi uygun olacaktır.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Foto kimliği için JPEG dosya ismini giriniz: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "JPEG dosyası `%s' açılamıyor: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Bu JPEG gerçekten büyük (%d bayt)!\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Onu kullanmak istediğinizden emin misiniz? (e/H ya da y/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "'%s' bir JPEG dosyası değil\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Bu foto doğru mu? (e/H/ç)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "foto kimliği gösterilemiyor!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Belirtilmiş bir neden yok" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Anahtarın yerine başkası konulmuş ve iptal edilmiştir" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Anahtar tehlikede" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Anahtar artık kullanılmayacak" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Kullanıcı kimliği artık geçersiz" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "yürürlükten kaldırma sebebi: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "yürürlükten kaldırma açıklaması: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "bBmMaAkK" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Güven değeri belirtilmemiş:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " namı-diğer \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "%s: Bu anahtarın gerçekten sahibine ait olduğuna dair bir belirti yok\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = bilmiyorum, kem küm\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = güvence vermem\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Son derece güveniyorum\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = ana menüye dön\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " a = bu anahtarı atla\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " ç = çık\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Bu anahtar için asgari güvence seviyesi: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Kararınız? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "" "Bu anahtarı gerçekten son derece güvenli yapmak istiyor musunuz? (e/H ya da " "y/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Son derece güvenli bir anahtarla sonuçlanan sertifikalar:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: Bu anahtarın gerçekten ismi belirtilen şahsa ait olduğuna dair bir " "belirti yok\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Bu anahtarın gerçekten ismi belirtilen şahsa ait olduğuna dair sınırlı " "bir belirti var\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Bu anahtarın ismi belirtilen şahsa ait olduğu umuluyor\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Bu anahtar bizim\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Bu anahtarın kullanıcı kimliğinde ismi belirtilen şahsa ait\n" "olduğu kesin DEĞİL. *Gerçekten* ne yaptığınızı biliyorsanız,\n" "sonraki soruya da evet cevabı verebilirsiniz.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Bu anahtar yine de kullanılsın mı? (e/H ya da y/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "UYARI: Güven derecesiz anahtar kullanılıyor!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "UYARI: bu anahtar yürürlükten kaldırılmamış olabilir (yürürlükten kaldırma " "anahtarı mevcut değil)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "UYARI: Bu anahtar onu üreten tarafından yürürlükten kaldırılmıştı!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "UYARI: Bu anahtar sahibi tarafından yürürlükten kaldırılmıştı!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Bu imza sahte anlamına gelebilir.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "" "UYARI: Bu yardımcı anahtar sahibi tarafından yürürlükten kaldırılmıştı!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Bilgi: Bu anahtar iptal edildi.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Bilgi: Bu anahtarın kullanım süresi dolmuştu!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "UYARI: Bu anahtar güven dereceli bir imza ile sertifikalanmamış!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Bu imzanın sahibine ait olduğuna dair bir belirti yok.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "UYARI: Bu anahtara güven-mi-yoruz!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Bu imza SAHTE olabilir.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "UYARI: Bu anahtar yeterli güven derecesine sahip imzalarla " "sertifikalanmamış!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Bu imzanın sahibine ait olduğu kesin değil.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: atlandı: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: atlandı: genel anahtar zaten var\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Bir kullanıcı kimliği belirtmediniz. (\"-r\" kullanabilirsiniz)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Şimdiki alıcılar:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Kullanıcı kimliğini girin. Boş bir satır işlemi sonlandırır:" #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Böyle bir kullanıcı kimliği yok.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "atlandı: genel anahtar zaten öntanımlı alıcı olarak ayarlanmış\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Genel anahtar iptal edildi.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "atlandı: genel anahtar zaten belirtilmiş\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "öntanımlı alıcı \"%s\" bilinmiyor\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: atlandı: genel anahtar iptal edildi\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "geçerli adresler yok\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "veri kaydedilmedi; kaydetmek için \"--output\" seçeneğini kullanın\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "`%s' oluşturulurken hata: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Bağımsız imza.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Lütfen veri dosyasının ismini girin: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "standart girdiden okuyor ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "imzalı veri yok\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "imzalı veri '%s' açılamadı\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonim alıcı: %s gizli anahtarı deneniyor ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "tamam, biz anonim alıcıyız.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "DEK'in eski kodlaması desteklenmiyor\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "şifre algoritması %d%s bilinmiyor ya da iptal edilmiş\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "UYARI: %s şifre algoritması alıcı tercihlerinde yok\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "BİLGİ: %s gizli anahtarının %s tarihinde kullanım süresi doldu\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "BİLGİ: anahtar yürürlükten kaldırılmıştı" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet başarısız: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "anahtar %s: kullanıcı kimliği yok\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Yürürlükten kaldıran:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Bu bir duyarlı yürürlükten kaldırma anahtarı)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "" "Bu imza için bir yürürlükten kaldırma sertifikası oluşturulsun mu? (e/H ya " "da y/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "ASCII zırhlı çıktı istendi.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet başarısız: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Yürürlükten kaldırma sertifikası üretildi.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "\"%s\" için yürürlükten kaldırma anahtarları yok\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "gizli anahtar \"%s\" yok: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "karşılığı olan genel anahtar yok: `%s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "genel anahtar gizli anahtarla uyuşmuyor!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "" "Bu anahtar için bir yürürlükten kaldırma sertifikası oluşturulsun mu? (e/H " "ya da y/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "bilinmeyen sıkıştırma algoritması\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "BİLGİ: Bu anahtar korunmamış!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Yürürlükten kaldırma sertifikası üretildi.\n" "\n" "Sertifika başkalarının kolayca erişebileceği yerlerde saklanmamalıdır.\n" "Aksi takdirde, yürürlükten kaldırma sertifikanız bilginiz dışında\n" "yayınlandığında geçerli olan genel anahtarınızın geçersiz hale gelebilir.\n" "Sertifika kısa olacağından isterseniz, bir yazıcı çıktısı olarak alıp\n" "bir kasada da muhafaza edebilirsiniz.\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Lütfen bir yürürlükten kaldırma sebebi seçiniz:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "İptal" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Burada %d seçtiğiniz varsayılıyor)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" "İsteğe bağlı açıklamayı girebilirsiniz; Boş bir satır işlemi sonlandırır:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Yürürlükten kaldırma sebebi: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(açıklama verilmedi)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Bu tamam mı? (e/H ya da y/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "gizli anahtar parçaları kullanım dışı\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "koruma algoritması %d%s desteklenmiyor\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "koruma algoritması %d desteklenmiyor\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Anahtar parolası geçersiz; lütfen tekrar deneyin" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "UYARI: Zayıf anahtar saptandı - lütfen anahtar parolasını tekrar " "değiştirin.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "gizli anahtarın güvenliği için eski tarz 16 bitlik sağlama toplamı " "üretiliyor\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "zayıf anahtar oluşturuldu - yeniden deneniyor\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "simetrik şifre için zayıf anahtarın önlenmesi mümkün olamadı: %d kere " "denendi!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "UYARI: iletideki imza özümlemesi çelişkili\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "UYARI: yardımcı imzalama anahtarı %s çapraz sertifikalı değil\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "UYARI: yardımcı imzalama anahtarı %s geçersiz çapraz sertifikalamaya sahip\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "genel anahtar %s imzadan %lu saniye daha yeni\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "genel anahtar %s imzadan %lu saniye daha yeni.\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "anahtar %s %lu saniye sonra üretilmiş (zaman sapması veya saat problemi)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "anahtar %s bundan %lu saniye sonra üretilmiş (zaman sapması veya saat " "problemi)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "BİLGİ: %s imza anahtarının kullanım süresi %s sularında dolmuş\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s imzası, %s özümleme algoritması\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "hatalı imzanın bilinmeyen bir kritik bitten dolayı %s anahtarından " "kaynaklandığı sanılıyor\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" "anahtar %s: anahtarı yürürlükten kaldırma imzası için yardımcı anahtar yok\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "" "anahtar %s: yardımcı anahtarı garantileme imzası için yardımcı anahtar yok\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "UYARI: %%-genişletmesi imkansız (çok büyük).\n" "Uzatılmadan kullanılıyor.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "UYARI: güvence adresi için %%lik uzatma imkansız (çok büyük).\n" "Uzatılmadan kullanılıyor.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "UYARI: tercih edilen anahtar sunucu adresi için %%lik uzatma imkansız\n" "(çok büyük). Uzatılmadan kullanılıyor.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "oluşturulan imzanın denetimi başarısız: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s imza: \"%s\" den\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "--pgp2 kipinde sadece PGP 2.x tarzı anahtarlarla ayrık imza yapabilirsiniz\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "UYARI: alıcının tercihleriyle çelişen %s (%d) özümleme algoritması " "kullanılmak isteniyor\n" #: g10/sign.c:960 msgid "signing:" msgstr "imzalanıyor:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "--pgp2 kipinde sadece PGP 2.x tarzı anahtarlarla açık imzalama " "yapabilirsiniz\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s şifrelemesi kullanılmayacak\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "anahtar güvenli olarak imlenmemiş - onu sahte RSÜ ile kullanmayın!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "\"%s\" atlandı: tekrarlanmış\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "\"%s\" atlandı: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "atlandı: gizli anahtar zaten var\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "bu, imzalar için güvenli olmayan PGP üretimi bir ElGamal anahtarı!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "güvence veritabanının %lu. kaydı, %d türünde: yazma başarısız: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Atanan güvencedeğerlerinin listesi %s oluşturuldu\n" "# (Eski haline getirmek için \"gpg --import-ownertrust\" kullanın\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "'%s' de hata: %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "satır çok uzun" #: g10/tdbdump.c:166 msgid "colon missing" msgstr ": imi eksik" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "parmakizi geçersiz" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "sahibiningüvencesi değeri kayıp" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "`%s' deki güvence kaydını ararken hata: %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "`%s' için okuma hatası: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "güvence veritabanı: eşzamanlama başarısız: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "`%s' için kilit oluşturulamıyor\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "`%s' kiltlenemedi\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "güvence veritabanı %lu kaydı: erişim başarısız: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "güvence veritabanı %lu kaydı: yazma başarısız (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "güvence veritabanı işlemi çok uzun\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "'%s' erişilemiyor: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: dizin yok!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: sürüm kaydı oluşturmada başarısız: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: geçersiz güvence veritabanı oluşturuldu\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: güvence veritabanı oluşturuldu\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "BİLGİ: güvence veritabanına yazılamıyor\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: güvence veritabanı geçersiz\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: nitelemeli tablo oluşturulamadı: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: sürüm kaydının güncellenmesinde hata: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: sürüm kaydının okunmasında hata: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: sürüm kaydının yazılmasında hata: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "güvence veritabanı: erişim başarısız: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "güvence veritabanı: okuma başarısız (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: bir güvence veritabanı dosyası değil\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: %lu kayıt numarası ile sürüm kaydı\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: dosya sürümü %d geçersiz\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: serbest kaydı okuma hatası: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: dizin kaydını yazma hatası: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: kayıt sıfırlama başarısız: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: kayıt ekleme başarısız: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: güvence veritabanı oluşturuldu\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "%d karakterden daha uzun metin satırları okunamıyor\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "girdi satırı %d karakterden daha uzun\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' geçerli bir anahtar kimliği değil\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "anahtar %s: güvenli anahtar olarak kabul edildi\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "anahtar %s güvence veritabanında birden fazla görünüyor\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "anahtar %s: güvenli anahtar için genel anahtar yok - atlandı\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "anahtar %s son derece güvenli olarak imlendi.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "güvence veritabanı kaydı %lu, istek tipi %d: okuma başarısız: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "güvence veritabanının %lu. kaydı %d istek türünde değil\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "bilinmeyen güvence modeli (%d) kullanılamıyor - %s güvence modeli " "varsayılıyor\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "%s güvence modeli kullanılıyor\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[yürürlükten kaldırıldı] " #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[süresi doldu] " #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[bilinmeyen]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[tanımsız]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[şöyle böyle]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[tamamen]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[son derece]" #: g10/trustdb.c:553 msgid "undefined" msgstr "tanımsız" #: g10/trustdb.c:554 msgid "never" msgstr "asla " #: g10/trustdb.c:555 msgid "marginal" msgstr "şöyle böyle" #: g10/trustdb.c:556 msgid "full" msgstr "tamamen" #: g10/trustdb.c:557 msgid "ultimate" msgstr "son derece" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "bir güvence veritabanı denetimi gereksiz\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "sonraki güvence veritabanı denetimi %s de\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "`%s' güvence modelli güvence veritabanı sınaması için gereksiz\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "`%s' güvence modelli güvence veritabanı güncellemesi için gereksiz\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "genel anahtar %s yok: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "lütfen bir --check-trustdb yapın\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "güvence veritabanı denetleniyor\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d anahtar işlendi (%d doğrulama temizlendi)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "son derece güvenli bir anahtar yok\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "son derece güvenli %s için genel anahtar yok\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "%d şöyle böyle gerekli, %d tamamen gerekli, %s güvence modeli\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "derinlik: %d geçerli: %3d imzalı: %3d güvenilir: %d-, %dq, %dn, %dm, %df, " "%du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "güvence veritabanının sürüm kaydı güncellenemedi: yazma başarısız: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "imza doğrulanamadı.\n" "İmza dosyasının (.sig veya .asc) komut satırında verilecek\n" "ilk dosya olması gerektiğini lütfen hatırlayın.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "girdi satırı %u ya çok uzun ya da sonunda satırsonu karakteri yok\n" #: util/errors.c:53 msgid "general error" msgstr "genel hata" #: util/errors.c:54 msgid "unknown packet type" msgstr "bilinmeyen paket tipi" #: util/errors.c:55 msgid "unknown version" msgstr "bilinmeyen sürüm" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "bilinmeyen genel anahtar algoritması" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "bilinmeyen özümleme algoritması" #: util/errors.c:58 msgid "bad public key" msgstr "genel anahtar hatalı" #: util/errors.c:59 msgid "bad secret key" msgstr "gizli anahtar hatalı" #: util/errors.c:60 msgid "bad signature" msgstr "imza hatalı" #: util/errors.c:61 msgid "checksum error" msgstr "\"checksum\" hatası" #: util/errors.c:62 msgid "bad passphrase" msgstr "anahtar parolası hatalı" #: util/errors.c:63 msgid "public key not found" msgstr "genel anahtar bulunamadı" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "bilinmeyen şifre algoritması" #: util/errors.c:65 msgid "can't open the keyring" msgstr "anahtar zinciri açılamadı" #: util/errors.c:66 msgid "invalid packet" msgstr "geçersiz paket" #: util/errors.c:67 msgid "invalid armor" msgstr "geçersiz zırh" #: util/errors.c:68 msgid "no such user id" msgstr "böyle bir kullanıcı kimliği yok" #: util/errors.c:69 msgid "secret key not available" msgstr "gizli anahtar kullanışsız" #: util/errors.c:70 msgid "wrong secret key used" msgstr "yanlış gizli anahtar kullanılmış" #: util/errors.c:71 msgid "not supported" msgstr "desteklenmiyor" #: util/errors.c:72 msgid "bad key" msgstr "anahtar hatalı" #: util/errors.c:73 msgid "file read error" msgstr "dosya okuma hatası" #: util/errors.c:74 msgid "file write error" msgstr "dosya yazma hatası" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "bilinmeyen sıkıştırma algoritması" #: util/errors.c:76 msgid "file open error" msgstr "dosya açma hatası" #: util/errors.c:77 msgid "file create error" msgstr "dosya oluşturma hatası" #: util/errors.c:78 msgid "invalid passphrase" msgstr "anahtar parolası geçersiz" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "tamamlanmamış genel anahtar algoritması" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "tamamlanmamış şifre algoritması" #: util/errors.c:81 msgid "unknown signature class" msgstr "bilinmeyen imza sınıfı" #: util/errors.c:82 msgid "trust database error" msgstr "güvence veritabanı hatası" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI hatalı" #: util/errors.c:84 msgid "resource limit" msgstr "iç kaynak sınırı" #: util/errors.c:85 msgid "invalid keyring" msgstr "anahtar zinciri geçersiz" #: util/errors.c:86 msgid "bad certificate" msgstr "sertifika hatalı" #: util/errors.c:87 msgid "malformed user id" msgstr "kullanıcı kimliği bozuk" #: util/errors.c:88 msgid "file close error" msgstr "dosya kapama hatası" #: util/errors.c:89 msgid "file rename error" msgstr "dosya isim değiştirme hatası" #: util/errors.c:90 msgid "file delete error" msgstr "dosya silme hatası" #: util/errors.c:91 msgid "unexpected data" msgstr "beklenmeyen veri" #: util/errors.c:92 msgid "timestamp conflict" msgstr "zaman damgası çelişkili" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "genel anahtar algoritması kullanışsız" #: util/errors.c:94 msgid "file exists" msgstr "dosya mevcut" #: util/errors.c:95 msgid "weak key" msgstr "anahtar zayıf" #: util/errors.c:96 msgid "invalid argument" msgstr "geçersiz argüman" #: util/errors.c:97 msgid "bad URI" msgstr "URI hatalı" #: util/errors.c:98 msgid "unsupported URI" msgstr "desteklenmeyen URI" #: util/errors.c:99 msgid "network error" msgstr "ağ hatası" #: util/errors.c:101 msgid "not encrypted" msgstr "şifrelenemedi" #: util/errors.c:102 msgid "not processed" msgstr "işlenemedi" #: util/errors.c:104 msgid "unusable public key" msgstr "genel anahtar kullanımdışı" #: util/errors.c:105 msgid "unusable secret key" msgstr "gizli anahtar kullanımdışı" #: util/errors.c:106 msgid "keyserver error" msgstr "anahtar sunucusu hatası" #: util/errors.c:107 msgid "canceled" msgstr "iptal edildi" #: util/errors.c:108 msgid "no card" msgstr "kat yok" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "imzalı veri yok\n" #: util/logger.c:183 msgid "ERROR: " msgstr "HATA: " #: util/logger.c:186 msgid "WARNING: " msgstr "UYARI: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... bu bir yazılım hatası (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "bir yazılım hatası buldunuz ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "evet" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "eE" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "hayır" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "hH" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "çık" #: util/miscutil.c:443 msgid "qQ" msgstr "çÇ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "tamam|tamam" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "iptal|iptal" #: util/miscutil.c:479 msgid "oO" msgstr "tT" #: util/miscutil.c:480 msgid "cC" msgstr "iİ" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "UYARI: kullanılan bellek güvenli değil!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "Daha geniş bilgi edinmek için http://www.gnupg.org/documentation/faqs.html " "adresine bakınız\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "güvenli bellek hazırlanmadan işlem yapmak mümkün değil\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(bu görev için yanlış program kullanmış olabilirsiniz)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "UYARI: '%s' eklentisinde güvensiz iyelik\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "UYARI: '%s' eklentisinde güvensiz izinler\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "UYARI: '%s' eklentisini içeren dizinin iyeliği güvensiz\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "UYARI: '%s' eklentisini içeren dizinin izinleri güvensiz\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "şifre eklentisi '%s' güvensiz izinlerden dolayı yüklenmedi\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "IDEA şifre eklentisi yok\n" #~ msgid "Command> " #~ msgstr "Komut> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA anahtar çifti %u bit olacak.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "güvence veritabanı bozulmuş; lütfen \"gpg --fix-trustdb\" çalıştırın.\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|Yönetici PIN'i" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "niteleme verisi v3 (PGP 2.x tarzı) imzalara konulamaz\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "niteleme verisi v3 (PGP 2.x tarzı) anahtar imzalarına konulamaz\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "poliçe URL'si v3 (PGP 2.x tarzı) imzalara konulamaz\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "poliçe URL'si v3 (PGP 2.x tarzı) anahtar imzalarına konulamaz\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA, 160 bitlik bir hash algoritması kullanılmasını gerektiriyor\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "Daha fazla bilgi için lütfen http://www.gnupg.org/why-not-idea.html " #~ "adresine\n" #~ "bakınız.\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "bir niteleme ismi sadece harfler, rakamlar ve altçizgiler içerebilir ve " #~ "sonuna bir '=' gelir.\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "bir kullanıcı niteleme ismi '@' karakteri içermeli\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "bir kullanıcı niteleme ismi '@' karakteri içermeli\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "bir niteleme değerinde kontrol karakterleri kullanılamaz\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "UYARI: geçersiz niteleme verisi bulundu\n" #~ msgid "not human readable" #~ msgstr "insan okuyabilir değil" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "seçenekleri dosyadan okur" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "seçenekleri dosyadan okur" #~ msgid "expired: %s)" #~ msgstr "[son kullanma tarihi: %s]" #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "anahtar %s: %s anahatarındaki imza zamanaşımına uğramış - atlandı\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr " '%s' çalıştırılamıyor: %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "kullanıcı kimliği \"%s\" zaten iptal edilmişti\n" #~ msgid "error getting serial number: %s\n" #~ msgstr "seri numarası alınırken hata: %s\n" #~ msgid "length of RSA modulus is not %d\n" #~ msgstr "RSA modülünün uzunluğu %d değildir\n" #~ msgid "length of an RSA prime is not %d\n" #~ msgstr "bir RSA asal sayısının uzunluğu %d değildir\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "ya anahtar parosı yanlış ya da şifre algoritması bilinmiyor (%d)\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "istemci pid'i belirlenemiyor\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "sunucu okuma dosya tanıtıcısı alınamadı\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "sunucu yazma dosya tanıtıcısı alınamadı\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "gpg-agent ile haberleşme problemi\n" #~ msgid "passphrase too long\n" #~ msgstr "Parola çok uzun\n" #~ msgid "invalid response from agent\n" #~ msgstr "yanıt geçersiz\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "vekil ile sorun var: vekil 0x%lx ile sonuçlandı\n" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "bu dağıtımda özümleme algoritması %s salt-okunurdur\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "UYARI: `%s' özümleyici OpenPGP'ye ait değil. Kullanmak riskli olabilir!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[dosyalar]|dosyalar şifrelenir" #~ msgid "store only" #~ msgstr "sadece saklar" #~ msgid "|[files]|decrypt files" #~ msgstr "|[dosyalar]|dosyaların şifresi açılır" #~ msgid "sign a key non-revocably" #~ msgstr "bir anahtarı iptal edilemez olarak imzalar" #~ msgid "sign a key locally and non-revocably" #~ msgstr "bir anahtarı yerel ve iptal edilemez olarak imzalar" #~ msgid "list only the sequence of packets" #~ msgstr "sadece paketlerin silsilesini listeler" #~ msgid "export the ownertrust values" #~ msgstr "sahibiningüvencesi değerlerini gönderir" #~ msgid "unattended trust database update" #~ msgstr "bakımsız güvence veritabanının güncellemesi" #~ msgid "fix a corrupted trust database" #~ msgstr "bozulan güvence veritabanını onarır" #~ msgid "De-Armor a file or stdin" #~ msgstr "Bir dosya veya standart girdinin zırhını kaldırır" #~ msgid "En-Armor a file or stdin" #~ msgstr "Bir dosya veya standart girdiyi zırhlar" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|İSİM|öntanımlı alıcı olarak İSİM kullanılır" #~ msgid "use the default key as default recipient" #~ msgstr "öntanımlı alıcı olarak öntanımlı anahtar kullanılır" #~ msgid "don't use the terminal at all" #~ msgstr "terminali hiç kullanma" #~ msgid "force v3 signatures" #~ msgstr "v3 imzalarına zorlar" #~ msgid "do not force v3 signatures" #~ msgstr "v3 imzalara zorlamaz" #~ msgid "force v4 key signatures" #~ msgstr "v4 imzalara zorlar" #~ msgid "do not force v4 key signatures" #~ msgstr "v4 imzalara zorlamaz" #~ msgid "always use a MDC for encryption" #~ msgstr "şifreleme için daima bir MDC kullanılır" #~ msgid "never use a MDC for encryption" #~ msgstr "şifreleme için asla bir MDC kullanılmaz" #~ msgid "use the gpg-agent" #~ msgstr "gpg-agent kullan" #~ msgid "batch mode: never ask" #~ msgstr "önceden belirlenmiş işlemler kipi: hiç sormaz" #~ msgid "assume yes on most questions" #~ msgstr "soruların çoğunda cevap evet farzedilir" #~ msgid "assume no on most questions" #~ msgstr "soruların çoğunda cevap hayır farzedilir" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "bu anahtar zincirini anahtar zincirleri listesine ekler" #~ msgid "add this secret keyring to the list" #~ msgstr "bu gizli anahtar zincirini listeye ekler" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|İSİM|öntanımlı gizli anahtar olarak İSİM kullanılır" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|MAKİNA|anahtarları aramak için bu anahtar sunucusu kullanılır" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|İSİM|terminal karakter setini İSİM olarak ayarlar" #~ msgid "|[file]|write status info to file" #~ msgstr "|[DOSYA]|durum bilgisini DOSYAya yazar" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|ANHKİML|bu anahtar son derece güvenli" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|DOSYA|genişletme modülü olarak DOSYA yüklenir" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "RFC1991 de açıklanan kipi uygular" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "tüm paket, şifre ve özümleme seçeneklerini OpenPGP tarzında ayarlar" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "tüm paket, şifre ve özümleme seçeneklerini PGP 2.x'e göre ayarlar" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|anahtar parolası kipi olarak N kullanılır" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "" #~ "|İSİM|anahtar parolaları için ileti özümleme algoritması olarak İSİM " #~ "kullanılır" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "" #~ "|İSİM|anahtar parolaları için şifre algoritması olarak İSİM kullanılır" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|İSİM|şifre algoritması olarak İSİM kullanılır" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|İSİM|özümleme algoritması olarak İSİM kullanılır" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|sıkıştırma algoritması olarak N kullanılır" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "şifreli paketlerin anahtar-kimlik alanlarını atar" #~ msgid "Show Photo IDs" #~ msgstr "Foto kimliklerini gösterir" #~ msgid "Don't show Photo IDs" #~ msgstr "Foto kimliklerini göstermez" #~ msgid "Set command line to view Photo IDs" #~ msgstr "Komut satırını foto kimliklerini göstermeye ayarlar" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "bu dağıtımda sıkıştırma algoritması %s salt-okunurdur\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "sıkıştırma algoritması %d..%d aralığında olmalı\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key KULL-KML" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key KULL-KML" #~ msgid "can't open %s: %s\n" #~ msgstr "%s açılamadı: %s\n" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "anahtar %08lX: anahtar yürürlükten kaldırılmıştı!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "anahtar %08lX: yardımcı anahtar yürürlükten kaldırılmıştı!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: anahtarın kullanım süresi dolmuş\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Bu anahtara güven-mi-yoruz\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Bu anahtarın gerçekten sahibine ait olup olmadığından emin\n" #~ "olunamadı fakat yine de kabul edildi.\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "%c%lu tercihi geçersiz\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (imzalamak ve şifrelemek için)\n" #~ 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 "" #~ "Yeni bir %s anahtar çifti üretmek üzeresiniz.\n" #~ " en küçük anahtar uzunluğu: 768 bit\n" #~ " öntanımlı anahtar uzunluğu: 1024 bit\n" #~ " önerilebilecek en büyük anahtar uzunluğu: 2048 bit\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA anahtarının uzunluğu 512 ile 1024 bit arasında olabilir\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "" #~ "anahtar uzunluğu çok küçük; RSA anahtarı için en küçük uzunluk: 1024 bit\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "" #~ "anahtar uzunluğu çok küçük; en küçük anahtar uzunluğu 768 bit'tir.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "anahtar uzunluğu çok büyük; izin verilen en büyük değer: %d bit\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "Hesaplama EPEYCE UZUN zaman alacağından anahtar uzunluklarında\n" #~ "2048 bitten fazlası tavsiye edilmez.\n" #~ msgid "Are you sure that you want this keysize? " #~ msgstr "Bu anahtar uzunluğunu istediğinizden emin misiniz? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Tamam, ama saldırılara çok duyarlı olan monitör ve klavye ışınımlarından " #~ "kendinizi uzak tutun! (ne demekse...)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: açılamıyor: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: UYARI: dosya boş\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "%08lX anahtarı: bir RFC2440 anahtarı değil - atlandı\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "BİLGİ: Elgamal birincil anahtarı saptandı - alınması biraz zaman alacak\n" #~ msgid " (default)" #~ msgstr " (öntanımlı)" #~ msgid "Really sign? " #~ msgstr "Gerçekten imzalayacak mısınız? " #~ msgid "q" #~ msgstr "k" #~ msgid "save" #~ msgstr "save" #~ msgid "help" #~ msgstr "help" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "list" #~ msgstr "list" #~ msgid "l" #~ msgstr "l" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "key" #~ msgid "select secondary key N" #~ msgstr "N yardımcı anahtarını seçer" #~ msgid "check" #~ msgstr "check" #~ msgid "list signatures" #~ msgstr "imzaları listeler" #~ msgid "sign the key" #~ msgstr "anahtarı imzalar" #~ msgid "s" #~ msgstr "i" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "sign the key non-revocably" #~ msgstr "yürürlükten kaldırılamayan imza yapar" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "sign the key locally and non-revocably" #~ msgstr "yürürlükten kaldırılamayan yerel imza yapar" #~ msgid "debug" #~ msgstr "debug" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #~ msgid "add a secondary key" #~ msgstr "bir yardımcı anahtar ekler" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "delete signatures" #~ msgstr "imzaları siler" #~ msgid "primary" #~ msgstr "primary" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "b" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revoke signatures" #~ msgstr "imzaları yürürlükten kaldırır" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revoke a user ID" #~ msgstr "bir kullanıcı kimliği yürürlükten kaldırır" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX üretildi: %s zamanaşımı: %s" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "yürkal! yardımcı anahtar yürürlülükten kaldırıldı: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "yürkal- sahte yürürlükten kaldırma sertifikası bulundu\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "yürkal? Yürürlükten kaldırma denetlenirken problem: %s\n" #~ msgid "" #~ "\"\n" #~ "locally signed with your key %08lX at %s\n" #~ msgstr "" #~ "\"\n" #~ "%08lX anahtarınızla %s de yerel olarak imzalı\n" #~ msgid " signed by %08lX at %s%s%s\n" #~ msgstr " %08lX ile %s%s%s de imzalanmış\n" #~ msgid " signed by %08lX at %s%s\n" #~ msgstr " %08lX ile %s%s de imzalanmış\n" #~ msgid "Policy: " #~ msgstr "Güvence: " #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Deneysel algoritmalar kullanılmamalı!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "bu şifre algoritması standart dışı; lütfen daha standart birini " #~ "kullanın!\n" #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "anahtar sunucusunun %s adresinden anahtar alınamadı\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "\"%s\" adresine gönderme hatası: %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "\"%s\" adresine gönderme işlemi başarılı (durum=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "\"%s\" adresine gönderme işlemi başarısız (durum=%u)\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "bu anahtar sunucusu --search-keys işlemini desteklemiyor\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "anahtar sunucusu aranamıyor: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "anahtar %08lX: Bu, imzalar için güvenli olmayan PGP üretimi bir ElGamal " #~ "anahtarı!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "%08lX anahtarı %lu saniye gelecekte üretilmiş (zaman sapması veya saat " #~ "problemi)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "%08lX anahtarı %lu saniye gelecekte üretilmiş (zaman sapması veya saat " #~ "problemi)\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: erişilemedi: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: kilit oluşturulamadı\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: kilitleme yapılamadı\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: oluşturulamadı: %s\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "anahtar %08lX son derece güvenli olarak imlendi.\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "" #~ "%08lX Elgamal imzalama anahtarından %08lX anahtarına imzalama atlandı\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "" #~ "%08lX anahtarından %08lX Elgamal imzalama anahtarına imzalama atlandı\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "denetim %d derinlikte yapılıyor: signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/" #~ "%d\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: dizin oluşturulamıyor: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Bu yürürlükten kaldırılmış anahtarı yine de kullanmak istiyorsanız\n" #~ "cevap olarak \"evet\" yazın." #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Kullanılacak algoritmayı seçiniz.\n" #~ "\n" #~ "DSA (DSS olarak da bilinir) sadece imzalar için kullanılan bir sayısal\n" #~ "imza algoritmasıdır. Bu algoritma ElGamal algoritmasından çok daha hızlı\n" #~ "doğrulandığı için önerilmektedir.\n" #~ "\n" #~ "ElGamal imzalar ve şifreleme için kullanılan bir algoritmadır.\n" #~ "OpenPGP bu algoritmanın bu iki kullanımını birbirinden ayırır:\n" #~ "sadece şifreleme ve imza+şifreleme; esas olarak aynı gibi görünmekle " #~ "beraber\n" #~ "imzalar için kullanılacak anahtarı oluşturacak bazı özel parametrelerin\n" #~ "seçilmesini gerektirir: bu program bunu yapar ama diğer OpenPGP\n" #~ "gerçeklemelerinin imza+şifreleme olayını anlaması gerekmiyorsa kullanmak\n" #~ "anlamlı olur.\n" #~ "\n" #~ "İlk (asıl) anahtar imzalama yeteneğine sahip bir anahtar olmalıdır;\n" #~ "bu durum, sadece şifreleme yapabilen ElGamal anahtarlarının neden menüde\n" #~ "bulunmadığını açıklar." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Bu anahtarlar tüm programlar tarafından desteklenmediği için ve\n" #~ "onlarla oluşturulan imzalar gereğinden büyük ve doğrulanması çok yavaş\n" #~ "olduğundan RFC2440 standardında tanımlı olmalarına rağmen tavsiye\n" #~ "edilmezler." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "şimdiye dek %lu anahtar denetlendi (%lu imza)\n" #~ msgid "key incomplete\n" #~ msgstr "anahtarın içi boş\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "anahtar %08lX: içi boş\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "pardon, bu betik kipinde yapılamaz\n" #~ msgid "can't open file: %s\n" #~ msgstr "dosya açılamadı: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "hata: \":\" eksik\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "hata: hiç sahibiningüvencesi değeri yok\n" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (imzalamak ve şifrelemek için)\n" #~ msgid "" #~ "The use of this algorithm is only supported by GnuPG. You will not be\n" #~ "able to use this key to communicate with PGP users. This algorithm is " #~ "also\n" #~ "very slow, and may not be as secure as the other choices.\n" #~ msgstr "" #~ "Bu algoritmanın kullanımı sadece GnuPG tarafından desteklenmektedir.\n" #~ "Bu anahtarı PGP kullanıcıları ile haberleşmek için kullanamayacaksınız\n" #~ "Bu algoritma ayrıca çok yavaş ve diğer seçimler kadar güvenli " #~ "olmayabilir.\n" #~ msgid "Create anyway? " #~ msgstr "Yine de oluşturulsun mu? " #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "geçersiz symkey algoritması saptandı (%d)\n" #~ msgid "this keyserver is not fully HKP compatible\n" #~ msgstr "bu anahtar sunucusu tamamen HKP uyumlu değil\n" #~ msgid "The use of this algorithm is deprecated - create anyway? " #~ msgstr "Bu algoritmanın kullanımı uygun değil - Yine de oluşturulsun mu?" #~ msgid "|NAME=VALUE|use this notation data" #~ msgstr "|İSİM=DEĞER|veri bu nitelemeyle kullanılır" #~ msgid "" #~ "the first character of a notation name must be a letter or an underscore\n" #~ msgstr "bir niteleme isminin ilk karakteri bir harf ya da altçizgi olmalı\n" #~ msgid "dots in a notation name must be surrounded by other characters\n" #~ msgstr "" #~ "bir niteleme isminde noktalar diğer karakterler tarafından kuşatılmış " #~ "olmalıdır\n" #~ msgid "" #~ "WARNING: This key already has a photo ID.\n" #~ " Adding another photo ID may confuse some versions of PGP.\n" #~ msgstr "" #~ "UYARI: Bu anahtarın zaten bir foto kimliği var.\n" #~ " Başka bir foto kimliği eklemek PGP'in bazı sürümleriyle uyumsuz " #~ "olabilir.\n" #~ msgid "You may only have one photo ID on a key.\n" #~ msgstr "Bir anahtarın sadece bir foto kimliği olabilir.\n" #~ msgid " Fingerprint:" #~ msgstr " Parmak izi:" #~ msgid "you have to start GnuPG again, so it can read the new options file\n" #~ msgstr "" #~ "Yeni seçenekler dosyasının okunabilmesi için GnuPG yeniden " #~ "başlatılmalıdır\n" #~ msgid "changing permission of `%s' failed: %s\n" #~ msgstr "`%s' izinleri değiştirilemedi: %s\n" #~ msgid "Are you sure you still want to sign it?\n" #~ msgstr "Onu yine de imzalamak istiyor musunuz?\n" #~ msgid " Are you sure you still want to sign it?\n" #~ msgstr " Onu yine de imzalamak istiyor musunuz?\n" #~ msgid "key %08lX: our copy has no self-signature\n" #~ msgstr "anahtar %08lX: bizim kopyanın öz-imzası yok\n" #~ msgid "Do you really need such a large keysize? " #~ msgstr "Bu kadar büyük anahtar uzunluğuna gerçekten ihtiyacınız var mı?" #~ msgid " signed by %08lX at %s\n" #~ msgstr " %08lX tarafından %s de imzalanmış\n" gnupg-1.4.20/po/eo.gmo0000644000175000017500000014772212635457221011410 00000000000000L|(-((e)})))))D *.R*I***+"+;+W+p+$+&+,+,#,@,],(p,.,3,,--3-F-_-{---"-%-&.!(.%J."p.#.'. .//2/O/d/|/(/$///#04(0]0t0000'00121D1W1j1"111-1(20*2H[2 2 3 3A3/ 40:4\k4444354E5-z5.5 5#5&6&,6S6j666666 6/7078H8d88w8#8"88E99;l::::$;%;9;<!<<<U<k<~<<%<<< i=<="=,=2> J>(k> > >*>>>?,?>?X?"s????E?o+@ @ @8@'A/>AEnA,A#A)B/BC'DAD ZD(fDDDDD/DE3EjFEEO>F.FFGHHH!HHIJJ*J&KAK7[KrK1L=8LIvL4LL#M=8MvM1MHMN),N2VNNhO*T&U1EU#wU2U>U V0V"V&W3:W%nWDWYY_Y ZZ eZrZ ZZ%ZZZ Z [ [%[A[_[g[o[[[[[ [[[[ \!\%?\2e\\\\\\]]2]<E]]]&]]]-]((^Q^g^1^^^^^ _)_A_ X_$e_=_%__ `(`G`^`v``&`&` a a%(a$Nasaaa aaaaa ab!b+?b/kbbbb%b%b c$(cMc ^clc.ccccdd#d,6dcdGrdHdBeFe\eleee eeeef4fEf_f.nff(f,fgg &g4gRgUg,tgggggg h h%?h%ehh h h h h#h&i);iei<iii,i;jM[jjj"j-j+*k*Vk!k$kkkkkIk>lQlll#l#lll llm#4mXm%im%mm mmm"mn,n 5n5Vn$nn4n%o*'o.Ro*oo+=p/ipp(pp-p/q,Hq"uq)qqq qrI7rrrrrrss0sIsasqssss ssst+tAtTt6lt#tttttu'uCu_uwuuuuDuEuD?vAvvFv *wKw$bw#ww#ww4ryy(z!>z"`z"z"z"zDz,1{H^{"{"{"{|-|F|c|~| |!|"|"}"'}J}(b}3}<}}~~4~F~]~y~~~,~*~-/5,e%$'%+K"g*΀/)C)Y7с% (;dȂڂ,!?/T$9D( @ L>Y32̅ee!&5Ɇ9293l ,0ׇ09Rl #È5JK:c3;{EW%Ќ'0#+Fa|- %A*87T#",Ӑ / ;Qp&ˑ'ߑ#+C?cp%44Z.*L06-g*ڕ'" ?-Ky#—5,|CIc&ԙǛ#$(M4"-4b3̞8T?H͟;!R&tF$)H1z+&ơϢ#}805&>\8J&.;٪/CE W  ))=,g Į Ѯݮ' $ 0<M]nǯ/*H7sð-߰ -E_yJر-1N0c,ײ;/$Kp'ɳ޳ 1)[x'!$)81b1Ƶ#ٵ9.7fƶ*9P-d/·"˷/ &9`*i/͸&$Dcv,ŹNֹO%QuǺ޺&$'>f#x!ۻ*3:n,(߼& 2'57],½ڽ%9&S.z.ؾ ));&e) 7׿'1D8vM '<1d(7))!KfinN((Aj} * "&$In' '@F&4#4#0X23I1}*- ;:4v.6$%6+\$B =Tk+*Do%: 6G ~( ""@XiFD@41u04*$?&d+- kREh`J @ 6E|tnmh}S)]f#ua_B|plFC!`tU4?Gd2c)3s{,H5N sI+y 7YGM^Qv~o&%JSM~&,Xe<I[kBPx]u{wz!y0e<2}TNc"LjZ7$5D9=ZWvHg3ql@;T0bYfiU /$i;zm9A aw=^q/Ox *Kr 4Rb( L>r6>' :V8OnP\DoC8K_-\"V+Q1pA1%*d(W'g [.F#:?.jX Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu secret keys read: %lu skipped new keys: %lu (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu secret keys imported: %lu secret keys unchanged: %lu %d bad signatures %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s encrypted data %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s. %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Can't check signature: %s Can't edit this key: %s Certificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Changing expiration time for the primary key. Comment: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Email address: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: no default option file `%s' NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Public key is disabled. Real name: Really delete this self-signature? (y/N)Repeat passphrase Repeat passphrase: Requested keysize is %u bits Secret key is available. Secret parts of primary key are not available. Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The signature is not valid. It does make sense to remove it from your keyring.This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu Usage: gpg [options] [files] (-h for help)User ID is no longer validWARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: encrypted message has been manipulated! WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: nothing exported WARNING: program may create a core file! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a photo ID to a PGP2-style key. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietcan't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't disable core dumps: %s can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't write `%s': %s cancelled by user cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverfailed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorgeneral errorgenerate a new key pairgenerate a revocation certificategpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid hash algorithm `%s' invalid keyringinvalid packetinvalid passphraseinvalid root packet detected in proc_tree() invalid value key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornext trustdb check due at %s nono default secret keyring: %s no keyserver known (use option --keyserver) no need for a trustdb check no secret key no signed data no such user idno valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' passphrase not correctly repeated; try againplease enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use protection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... remove keys from the public keyringremove keys from the secret keyringresource limitrounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set the given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown pubkey algorithmunknown signature classunknown versionunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptverboseverify a signatureweak keyweak key created - retrying writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you found a bug ... (%s:%d) you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg 1.0.6d Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:22+0200 Last-Translator: Edmund GRIMLEY EVANS Language-Team: Esperanto Language: eo MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-3 Content-Transfer-Encoding: 8bit Donu la uzantidentigilon. Finu per malplena linio: Nesufie da stokastaj datenoj. Bonvolu fari ion por ebligi al la mastruma sistemo kolekti pli da entropio! (Mankas %d bitokoj) Realigitaj metodoj: importitaj: %lu neanitaj: %lu novaj sublosiloj: %lu novaj uzantidentigiloj: %lu sen uzantidentigilo: %lu Ne estas certe, ke la subskribo apartenas al la posedanto. La subskribo verajne estas FALSA. Estas nenia indiko, ke la subskribo apartenas al la posedanto. novaj subskriboj: %lu sekretaj losiloj legitaj: %lu ignoritaj novaj losiloj: %lu (%d) DSA (nur subskribi) (%d) RSA (nur ifri) (%d) RSA (nur subskribi) (0) Mi ne respondas.%s (1) Mi tute ne kontrolis.%s (2) Mi malzorge kontrolis.%s (3) Mi tre zorge kontrolis.%s novaj losilrevokoj: %lu sekretaj losiloj importitaj: %lu sekretaj losiloj neanitaj: %lu %d malbonaj subskriboj %d subskriboj ne kontrolitaj pro eraroj %d subskriboj ne kontrolitaj pro manko de losiloj %d uzantidentigiloj sen valida mem-subskribo estis trovitaj %s ... %s-ifritaj datenoj %s ifrado estos aplikata %s estas la nova %s estas la neanita %s ne havas sencon kun %s! %s ne eblas kun %s! %s. %s: dosierujo ne ekzistas! %s: eraro dum legado de libera registro: %s %s: eraro dum legado de versiregistro: %s %s: eraro dum aktualigo de versiregistro: %s %s: eraro dum skribo de dosieruja registro: %s %s: eraro dum skribado de versiregistro: %s %s: malsukcesis aldoni registron: %s %s: malsukcesis krei haktabelon: %s %s: malsukcesis krei versiregistron: %s%s: malsukcesis nuligi registron: %s %s: nevalida dosiero-versio %d %s: nevalida fido-datenaro %s: nevalida fido-datenaro kreita %s: losilaro kreita %s: ne estas fido-datenaro %s: ignorita: %s %s: ignorita: publika losilo jam eestas %s: ignorita: publika losilo estas malaltita %s: fido-datenaro kreita %s: nekonata sufikso %s: versiregistro kun registronumero %lu (eble vi uzis la malustan programon por i tiu tasko) --clearsign [dosiero]--decrypt [dosiero]--edit-key uzantidentigilo [komandoj]--encrypt [dosiero]--lsign-key uzantidentigilo--output ne funkcias por i tiu komando --sign --encrypt [dosiero]--sign --symmetric [dosiero]--sign [dosiero]--sign-key uzantidentigilo--store [dosiero]--symmetric [dosiero]-k[v][v][v][c] [uzantidentigilo] [losilaro]... i tio estas cimo (%s:%d:%s) 1 malbona subskribo 1 subskribo ne kontrolita pro manko de losilo 1 subskribo ne kontrolita pro eraro 1 uzantidentigilo sen valida mem-subskribo estis trovita @ (Vidu la manpaon por kompleta listo de iuj komandoj kaj opcioj) @ Ekzemploj: -se -r Bob [dosiero] subskribi kaj ifri por uzanto Bob --clearsign [dosiero] fari klartekstan subskribon --detach-sign [dosiero] fari apartan subskribon --list-keys [nomoj] montri losilojn --fingerprint [nomoj] montri fingropurojn @ Opcioj: @Komandoj: Respondu per "jes" (a nur "j"), se la sublosilo estu kreita.Respondu per "jes", se la sublosilo estu forviitaRespondu per "jes", se la dosiero estu surskribitaRespondu per "jes", se vi vere volas forvii la uzantidentigilon. Tiam anka iuj atestiloj perdios!Respondu per "jes" a "ne"Ne povas kontroli subskribon: %s Ne povas redakti i tiun losilon: %s Atestiloj, kiuj kondukas al absolute fidata losilo: anu (N)omon, (K)omenton, (A)adreson, a (B)one/(F)ini? anu (N)omon, (K)omenton, (A)adreson, a (F)ini? anas la daton de eksvalidio de la efa losilo. Komento: u forvii i tiun bonan subskribon? (j/N/f)u forvii i tiun nevalidan subskribon? (j/N/f)u forvii i tiun nekonatan subskribon? (j/N/f)Forviis %d subskribon. Forviis %d subskribojn. Aparta subskribo. Retadreso: Donu novan dosiernomonDonu pasfrazon Donu pasfrazon: Donu la nomon de la losilposedantoDonu la novan pasfrazon por i tiu sekreta losilo. Donu la bezonatan valoron, kiel montrite en la invito. Eblas doni ISO-forman daton (JJJJ-MM-TT), sed vi ne ricevos bonan eraromesaon; anstatae la sistemo provas interpreti la donitan valoron kiel gamon.Donu la losilgrandonDonu la uzantidentigilon de la adresito, al kiu vi volas sendi la mesaon.Dosiero '%s' ekzistas. Donu la nomon de la dosiero, al kiu la subskribo aplikiasEktajpu vian mesaon ... Sugesto: Elekti la uzantidentigilojn por subskribi Kiom zorge vi kontrolis, ke la losilo, kiun vi subskribos, vere apartenas al la supre nomita persono? Se vi ne scias la respondon, donu "0". ifro IDEA ne disponata, optimisme provas uzi %s anstatae Se vi volas, vi povas doni tekston por priskribi, kial vi faras i tiun revokatestilon. Bonvolu fari i tiun tekston konciza. Malplena linio finas la tekston. Se vi tamen volas uzi i tiun nefidatan losilon, respondu per "jes".Nevalida signo en komento Nevalida signo en nomo Nevalida komando (provu per "helpo") Nevalida pasfrazo; bonvolu provi denoveNevalida elekto. Vi devas mem doni valoron i tie; la valoro neniam estos eksportita al alia persono. Ni bezonas in por realigi la fido-reton; i neniel rilatas al la (implicite kreita) atestilo-reto.Kreado de losiloj nuligita. Kreado de losiloj malsukcesis: %s losilo estas kompromititalosilo estas ne plu uzatalosilo estas protektita. losilo estas anstataigita.losilo validu ...? (0) losilo ne anita, do aktualigo ne necesas. losilaroN por ani la nomon. K por ani la komenton. A por ani la retadreson. B por darigi kun la losilkreado. F por interrompi la losilkreadon kaj fini.NOTO: %s ne estas por normala uzado! NOTO: krei sublosilojn por v3-losiloj ne estas OpenPGP-kongrue NOTO: mankas implicita opcio-dosiero '%s' NOTO: sendinto petis konfidencon ("for-your-eyes-only") NOTO: simpla S2K-reimo (0) estas forte malrekomendata Nomo ne povas komencii per cifero Nomo devas havi almena 5 signojn Bezonas la sekretan losilon por fari tion. NnKkAaBbFfMankas responda subskribo en sekreta losilaro Nenia helpo disponataNenia helpo disponata por '%s'Nenia kialo specifitaUzantidentigilo ne ekzistas. Mankas uzantidentigilo kun indekso %d Nevalida retadreso Noto: i tiu losilo estas malaltita. Noto: i tiu losilo eksvalidiis! Nenio estis forviita. Bonvolu korekti la eraron unue Bonvolu ne meti la retadreson en la veran nomon a la komenton Bonvolu doni novan dosiernomon. Se vi premas nur ENEN, la implicita dosiero (montrita en parentezo) estos uzata.Bonvolu doni nedevigan komentonBonvolu doni la nomon de la dosiero: Bonvolu doni la pasfrazon; tio estas sekreta frazo Bonvolu ripari i tiun eblan sekurecproblemon Bonvolu malelekti la sekretajn losilojn. Bonvolu ripeti la pasfrazon, por kontroli, ke vi bone scias, kion vi tajpis.Bonvolu raporti cimojn al . Bonvolu elekti precize unu uzantidentigilon. Bonvolu elekti, kian losilon vi deziras: Bonvolu specifi, kiom longe la losilo validu. 0 = losilo neniam eksvalidios = losilo eksvalidios post n tagoj w = losilo eksvalidios post n semajnoj m = losilo eksvalidios post n monatoj y = losilo eksvalidios post n jaroj Bonvolu specifi, kiom longe la losilo validu. 0 = losilo neniam eksvalidios = losilo eksvalidios post n tagoj w = losilo eksvalidios post n semajnoj m = losilo eksvalidios post n monatoj y = losilo eksvalidios post n jaroj Bonvolu uzi la komandon "toggle" unue. Publika losilo estas malaltita. Vera nomo: u vere forvii i tiun mem-subskribon? (j/N)Ripetu pasfrazon Ripetu pasfrazon: Petita losilgrando estas %u bitoj Sekreta losilo estas havebla. Sekretaj partoj de efa losilo ne estas disponataj. Subskribo-notacio: Subskribo-gvidlinioj: Sintakso: gpg [opcioj] [dosieroj] subskribi, kontroli, ifri a malifri implicita operacio dependas de la enigataj datenoj La kvazastokastilo estas nur simpla protezo, por ke la programo entute ruliu; i neniel estas forta stokastilo! NE UZU DATENOJN KREITAJN DE I TIU PROGRAMO!! La subskribo ne estas valida. Estas prudente forigi in de via losilaro.Tiu komando ne eblas en la reimo %s. i tio estas subskribo, kiu ligas la uzantidentigilon al la losilo. Normale ne estas konsilinde forigi tian subskribon. Efektive, GnuPG eble ne povus uzi la losilon poste. Do, faru i tion, nur se la mem-subskribo estas ial nevalida, kaj dua mem-subskribo estas havebla.i tio estas valida losilsubskribo; normale vi ne volas forvii i tiun subskribon, ar eble i estos grava por establi fido-ligon al la losilo a al alia losilo atestita per i tiu losilo.i tiu losilo apartenas al ni i tiu losilo estas malaltitai tiu losilo eksvalidiis!i tiu losilo eksvalidios je %s. i tiu losilo ne estas protektita. La subskribo ne estas kontrolebla, ar vi ne havas la respondan losilon. Vi devus prokrasti ian forvion, is vi scios, kiu losilo estis uzita, ar la subskribanta losilo eble establos fido-ligon tra alia jam atestita losilo.Por konstrui la fido-reton, GnuPG devas scii, kiuj losiloj estas absolute fidataj; normale tiuj estas la losiloj, por kiuj vi havas aliron al la sekreta losilo. Respondu "jes" por igi i tiun losilon absolute fidata Nombro traktita entute: %lu Uzado: gpg [opcioj] [dosieroj] (-h por helpo)Uzantidentigilo ne plu validasAVERTO: %s nuligas %s AVERTO: ekzistas 2 dosieroj kun sekretaj informoj. AVERTO: i tiu estas PGP2-stila losilo. Aldono de foto-identigilo eble kazos, ke iuj versioj de PGP malakceptos la losilon. AVERTO: i tiu losilo estas revokita de sia posedanto! AVERTO: i tiu losilo ne estas atestita kun fidata subskribo! AVERTO: i tiu losilo ne estas atestita kun sufie fidataj subskriboj! AVERTO: i tiu sublosilo estas revokita de sia posedanto! AVERTO: Uzas nefidatan losilon! AVERTO: Ni NE fidas i tiun losilon! AVERTO: Malforta losilo trovita - bonvolu ani la pasfrazon denove. AVERTO: '%s' estas malplena dosiero AVERTO: ifrita mesao estis manipulita! AVERTO: mesao estis ifrita per malforta losilo en la simetria ifro. AVERTO: nenio estis eksportita AVERTO: programo povas krei core-dosieron! AVERTO: uzas malsekuran stokastilon!! Ne devas krei multe da stokastaj datenoj. Estas konsilinde fari ion alian (tajpi e la klavaro, movi la muson, uzi la diskojn) dum la kreado de la primoj; tio donas al la stokastilo pli bonan ancon akiri sufie da entropio. Kiam vi subskribas uzantidentigilon sur losilo, vi devas unue kontroli, ke la losilo apartenas al la persono nomita en la identigilo. Estas utile por aliaj homoj scii, kiom zorge vi kontrolis tion. "0" signifas, ke vi faras nenian specifan aserton pri tio, kiel zorge vi kontrolis la losilon. "1" signifas, ke vi kredas, ke la losilo apartenas al la homo, kiu pretendas posedi in, sed vi ne povis kontroli, a simple ne kontrolis la losilon. Tio estas utila, kiam oni subskribas la losilon de psedonoma uzanto. "2" signifas, ke vi malzorge kontrolis la losilon. Ekzemple, povas esti, ke vi kontrolis la fingropuron de la losilo kaj komparis la uzantidentigilon sur la losilo kun foto-identigilo. "3" signifas, ke vi zorge kontrolis la losilon. Ekzemple, povas esti, ke vi kontrolis la fingropuron persone e la posedanto de la losilo, kaj vi kontrolis, per malfacile falsebla dokumento kun foto-identigilo (ekzemple pasporto), ke la nomo de losilposedanto kongruas kun la nomo en la uzantidentigilo sur la losilo, kaj fine vi kontrolis (per interano de retmesaoj), ke la retadreso sur la losilo apartenas al la posedanto de la losilo. Notu, ke la ekzemploj donitaj supre por la niveloj 2 kaj 3 estas nur ekzemploj. Vi devas fine mem decidi, kion precize signifas "malzorga" kaj "zorga", kiam vi subskribas aliajn losilojn. Se vi ne scias la ustan respondon, respondu per "0".Vi revokos la sekvajn subskribojn: Vi uzas la signaron '%s'. Vi ne povas ani la daton de eksvalidio de v3-losilo Vi ne povas forvii la lastan uzantidentigilon! Vi ne specifis uzantidentigilon. (Vi povas uzi "-r") Vi ne deziras pasfrazon - tio verajne estas *malbona* ideo! Vi ne deziras pasfrazon; tio verajne estas *malbona* ideo! Mi tamen faros tiel. Vi povos iam ajn ani vian pasfrazon, uzante i tiun programon kun la opcio "--edit-key". Ne eblas aldoni foto-identigilon al PGP2-stila losilo. Vi devas elekti almena unu losilon. Vi devas elekti almena unu uzantidentigilon. Vi bezonas pasfrazon por protekti vian sekretan losilon. Vi elektis i tiun uzantidentigilon: "%s" Vi devus doni kialon por i tiu atestilo. Depende de la kunteksto, vi povas elekti el i tiu listo: "losilo estas kompromitita" Uzu i tion, se vi pensas, ke nerajtigita homo havis aliron al via sekreta losilo. "losilo estas anstataigita" Uzu i tion, se vi anstataigis la losilon per pli nova. "losilo estas ne plu uzata" Uzu i tion, se vi retiris i tiun losilon. "Uzantidentigilo ne plu validas" Uzu i tion por aserti, ke la uzantidentigilo ne plu estu uzata; normale oni uzas i tion por marki retadreson kiel nevalidan. Via decido? Via elekto? Via sistemo ne povas montri datojn post 2038. Tamen, i estos uste traktata is 2106. [dosiero][revoko][mem-subskribo][malcerta]'%s' jam densigita '%s' ne estas normala dosiero - ignorita '%s' ne estas valida longa losilidentigilo aldoni foto-identigilonaldoni uzantidentigilonkirasoapo: kiraso: %s supozas %s ifritajn datenojn supozas subskribitajn datenojn en '%s' malbona MPImalbona URImalbona atestilomalbona losilomalbona pasfrazomalbona publika losilomalbona sekreta losilomalbona subskriboiom malpli da informojne povas fermi '%s': %s ne povas konektii al '%s': %s ne povas krei '%s': %s ne povas malalti kreadon de core-dosieroj: %s ne povas trakti publiklosilan metodon %d ne povas trakti tekstliniojn pli longajn ol %d signojn ne povas malfermi '%s' ne povas malfermi '%s': %s ne povas malfermi subskribitan dosieron '%s' ne povas malfermi la losilaronne povas legi '%s': %s ne povas stat-i '%s': %s ne povas skribi '%s': %s nuligita de uzanto ne povas eviti malfortajn losilojn por simetria ifro; provis %d fojojn! ani la posedantofidonani la pasfrazonkontrolo de kreita subskribo malsukcesis: %s kontrolas la fido-datenaron eraro en kontrolsumoifrad-metodo %d%s estas nekonata a malaltita completes-needed devas esti pli granda ol 0 malkongruaj komandoj krei eligon en askia kirasodatenoj ne savitaj; uzu la opcion "--output" por savi ilin elkirasigo malsukcesis: %s malifri datenojn (implicita elekto)malifrado malsukcesis: %s malifrado sukcesis forvio de losilbloko malsukcesis: %s fari neniajn anojnenkirasigo malsukcesis: %s ifri datenojnifrita per nekonata metodo %d ifri mesaon kun --pgp2 postulas la ifron IDEA ifri nur kun simetria ifroeraro dum kreado de '%s': %s eraro dum kreado de losilaro '%s': %s eraro dum kreado de pasfrazo: %s eraro en vostolinio eraro dum legado de '%s': %s eraro dum legado de losilbloko: %s eraro dum skribado de losilaro '%s': %s eraro dum skribado de publika losilaro '%s': %s eraro dum skribado de sekreta losilaro '%s': %s eksporti losilojneksporti losilojn al losilservilomalsukcesis doni komencajn valorojn al fido-datenaro: %s malsukcesis rekonstrui losilaran staplon: %s eraro e fermo de dosieroeraro e kreo de dosieroeraro e forvio de dosierodosiero ekzistaseraro e malfermo de dosierolegeraro e dosieroeraro e renomado de dosieroskriberaro e dosieroenerala erarokrei novan losilparonkrei revokatestilongpg-agent ne estas disponata en i tiu sesio protokolversio %d de gpg-agent ne estas uzebla iImMfFsSimporti losilojn de losilserviloimporti/kunfandi losilojnenigata linio %u tro longa, a mankas linifino enigata linio pli longa ol %d signojn nevalidanevalida S2K-reimo; devas esti 0, 1 a 3 nevalida argumentonevalida kirasonevalida kirasoapo: nevalida kiraso: linio pli longa ol %d signojn nevalida apo de klarteksta subskribo nevalida strek-eskapita linio: nevalida kompendi-metodo '%s' nevalida losilaronevalida paketonevalida pasfrazonevalida radikpaketo trovita en proc_tree() nevalida valoro losilo estis kreita %lu sekundon en la estonteco (tempotordo a horloeraro) losilo estis kreita %lu sekundojn en la estonteco (tempotordo a horloeraro) losilo ne estas markita kiel malsekura - ne povas uzi in kun falsa stokastilo! losilaro '%s' kreita losilservila erarolosilgrando nevalida; uzas %u bitojn losilgrando rondigita is %u bitoj listigi losilojn kaj uzantidentigilojnlistigi losilojnlistigi losilojn kaj fingropurojnlistigi losilojn kaj subskribojnlistigi preferojn (spertula)listigi preferojn (detale)listigi sekretajn losilojnfari apartan subskribonmisformita CRC malbona valoro de la media variablo GPG_AGENT_INFO misformita uzantidentigilomarginals-needed devas esti pli granda ol 1 movas losilsubskribon al la usta loko nNingitaj klartekstaj subskriboj reterarosekva kontrolo de fido-datenaro je %s nemankas implicita sekreta losilaro: %s neniu losilservilo konata (uzu la opcion --keyserver) kontrolo de fido-datenaro ne estas bezonata mankas sekreta losilo mankas subskribitaj datenoj uzantidentigilo ne ekzistasvalidaj OpenPGP-datenoj ne trovitaj. mankas validaj adresitoj neniu skribebla losilaro trovita: %s neniu skribebla publika losilaro trovita: %s neniu skribebla sekreta losilaro trovita: %s ne aparta subskribo ne ifritane traktitane realigitanoto: dosiero random_seed estas malplena noto: dosiero random_seed ne aktualigita bone; ni estas la nenomita ricevonto. malnova kodado de DEK ne estas realigita malnovstila subskribo (PGP 2.x) operacio ne eblas sen sekura memoro kun komenca valoro opcio-dosiero '%s': %s originala dosiernomo='%.*s' la pasfrazo ne estis uste ripetita; provu denovebonvolu doni retadreson (ne devige, sed tre rekomendate)bonvolu vidi http://www.gnupg.org/documentation/faqs.html por pliaj informoj tro frua dosierfino (en CRC) tro frua dosierfino (nenia CRC) problemo e traktado de ifrita paketo problemo kun agento - malaltas uzadon de agento protekto-metodo %d%s ne estas realigita publika kaj sekreta losiloj kreitaj kaj subskribitaj. publiklosila malifrado malsukcesis: %s publiklosile ifritaj datenoj: bona DEK publika losilo ne trovitafFfiniforlasi i tiun menuonquoted-printable-signo en kiraso - verajne cima pototransendilo estis uzata legas el '%s' legas opciojn el '%s' legas la normalan enigon ... forigi losilojn de la publika losilaroforigi losilojn de la sekreta losilarotrafis rimedolimonrondigita is %u bitoj skribi kaj finiseri losilojn e losilservilosekreta losilo ne haveblasekretaj losilpartoj ne estas disponataj elekti uzantidentigilon Nelektita ifrad-metodo ne validas elektita kompendi-metodo ne validas montri i tiun helponsubskribi losilonsubskribi losilon lokesubskribi a redakti losilonkontrolo de subskribo estas malaltita subskribado malsukcesis: %s subskribas:ignorita: publika losilo jam agordita ignorita: publika losilo jam difinita kiel implicita ricevonto ignorita: sekreta losilo jam eestas ignoras blokon de speco %d memstara revoko - uzu "gpg --import" por apliki in memstara subskribo de klaso 0x%02x subpaketo de speco %d havas altitan "critical bit" la donita gvidlinia URL por atestado ne validas la donita gvidlinia URL por subskriboj ne validas ne eblis kontroli la subskribon. Bonvolu memori, ke la subskribodosiero (.sig a .asc) devas esti la unua dosiero donita en la komandlinio. estas sekreta losilo por la publika losilo "%s"! tio povas esti kazata de mankanta mem-subskribo malkongruo de tempostampojtro da registroj en pk-staplo - malaltas eraro en fido-datenarofido-registro %lu ne havas petitan specon %d fido-datenaro loko %lu, petospeco %d: lego malsukcesis: %s fido-datenaro %lu, speco %d: skribo malsukcesis: %s fido-datenaro loko %lu: lseek malsukcesis: %s fido-datenaro loko %lu: skribo malsukcesis (n=%d): %s fido-datenaro-transakcio tro granda fido-datenaro: lseek malsukcesis: %s fido-datenaro: lego malsukcesis (n=%d): %s fido-datenaro: sync malsukcesis: %s ne povas uzi la ifron IDEA por iuj losiloj, al kiuj vi ifras. neatendita datenonerealigita ifrad-metodonerealigita publiklosila metodonekonata ifrad-metodonekonata densig-metodonekonata kompendi-metodonekonata paketo-speconekonata publiklosila metodonekonata klaso de subskribonekonata versionerealigita URIneuzebla publiklosila metodoneuzebla publika losiloneuzebla sekreta losiloaktualigi iujn losilojn de losilserviloaktualigo malsukcesis: %s aktualigo de sekreto malsukcesis: %s aktualigi la fido-datenaronuzado: gpg [opcioj] uzi dosieron por eligouzi tekstan reimonuzu la opcion "--delete-secret-key" por forvii in unue. uzi i tiun uzantidentigilon por subskribi a malifridetala eligokontroli subskribonmalforta losilomalforta losilo kreita - provas denove skribas losilbindan subskribon skribas publikan losilon al '%s' skribas sekretan losilon al '%s' skribas mem-subskribon skribas al '%s' skribas al la normala eligo malusta sekreta losilo uzatajJeblas klartekste subskribi nur per PGP-2.x-stilaj losiloj kun --pgp2 eblas ifri nur per RSA-losiloj de maksimume 2048 bitoj kun --pgp2 eblas fari nur apartajn kaj klartekstajn subskribojn kun --pgp2 ne eblas samtempe subskribi kaj ifri kun --pgp2 vi trovis cimon ... (%s:%d) necesas uzi dosierojn (kaj ne tubon) kun --pgp2 |FD|skribi statusinformojn al FD (dosierpriskribilo)|NOMO|ifri por NOMO|N|difini densig-nivelon N (0=nenia)|[dosiero]|fari klartekstan subskribon|[dosiero]|fari subskribon|metodo [dosieroj]|presi mesao-kompendiojngnupg-1.4.20/po/quot.sed0000644000175000017500000000023112516175025011742 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g gnupg-1.4.20/po/cs.gmo0000644000175000017500000043501112635457220011400 00000000000000 t(Pk-kkelnmmPninnnnnno26o7io2o#oDo.=pIlp7p'pq 3q?qWqoqqqqqqr+(r&Tr#{r(rrrrs(6s_sxss$sss&t-t,Htutt!ttttu *u6u Su_utuuuuuuu*v"Ev]hvBv w/w=Lw(w.w3w!x(8xax|x'xxxxxy&y,?y'lyyy"yyy zB(z=kzz"z%z&{!8{%Z{"{#{'{ {|-|B|_|t||(|$||}#}8}$W}|}}!}}} ~9~&Q~%x~ ~,~4~ 1F'Z΀ '="Tw-(ԁ02.Ha  ΃(A</~0\߄1<nD-ȅ0.'IV*+ˆ' ,DUoه3$4,-a'I.q$ Ή ؉?4&:[ӊ ,(K8t#&ы(&!H_w76͌-%23X90ƍ<G4@|>+=(fn~"я :(#;_q /ՐHՑ-$L'q8&Ғ5./5^*!.0&A,h ˔֔8#"F_"f.HQ"($E 1Q;U 'B8a$ә ڛ"B;~ɜ%"9.U* Cd*+!V0x'<џ+)"U,x/1ՠ",*"W2z ɡ(  4*?j|Ģ֢ &A Ua5"B(_դF N1o%ǥEE̦o ħ8T'>c/NEg,"ڪ#-!+O){&̫'ޭqҮ+ ,L3y 1(#*+N"z+"ɰ  ?!%aɱ۱.4(c }+@/Z0е! ! BXn%޶j.K@-&T9O0k/5̹'.*3Y-̻ü!ټ$,<(i-ƾ׿ *;+f #9$]  6%B7\2rG>1=+Ii4#=+i?D@+O1{NIIF55;?8Bx<H-A"oHe<B)C*:n.>2=J<@FHMU$ -22`1I>KN@5*7<,t004 82Y:65.5dh*&1?#q2>*=0"MS9"&!%3G>{c%DD,52 _@    ) 4@Y%r")&+,5X ., ;FBb5$&.>FUd s('B"Y |,'!.I%x2+#4If%}5" 5;C<* )D\p:*@V&g- <A,(n/ $1@r,&HD %/0.Ap&3  20P$=%#'-Ky '#9Lc{'&$<[&{& / 8D,`/"9K%f$&$#D>' %16$h@ $$I!aD+/1 a6l0/+"=&`(%%$) :H._21I]z'/++Wf$y&$',,?l{>  $#,HIuJ *G"e# ! (D*^- $' .1"`+)#-%K6q5/".'Qy;0"%$/J2z!: 9!Z!|(+8,!I4k026:)q9&G'HoB 7 S #i       0 K `         7 Q l } '    . ! 3 (< 2e !   , " %  C Q  W $b   )    %"%Hn,23&5"\1!4I%h%     #8\&_ )$<;Ql6, ;&#bM-9Qm"-+&2*Y56!&0$W|2IF7~*D0^1##+ +5,a!2$#*22].* 7? ]i %& 4S$f#&3%D*j%(-89f6:,&0S/7* ., 7[ ; 0 1!;2!n!%!!)!6!:" W"b"u"9""5"-#"E#h# ##-###$ $5A$$w$$+$4$%%!>%C`%*%(%0%)&I&.R&-&*&&+k'G'2'/(%B(Fh((1(#()!5)W)(t))-)/),* =*"G*)j*** **2 +1<+n+w+#+#+!+"+-!,O,:n,I,A,"5-X- j-t------- . (.I.i.!.....//#,/ P/\/l/// //// 0 060I06a0050#0 1/1>1T1e1*~1!1 11G1(2A2 T2u222-2,23-3L3]3 y3333334 4D4FT4E4D4E&5Al5756576=U6>66$677<L777F788988 r88 8$88#89#*9N9*e9*9`9N;k;$; =:=>'7>"_>!>#>#>!>!?80?:i?:?.?>@5M@O@7@9 A!EA gAsAAA&A%A$B>B#[BB/B,B.B-CHChC)C%C-CC D>D)TD~DD+DD.E$/ETEiEEEEE EEF,F$KFpFFF F%F$F-G#KGmoGTG2H/JHFzH3H3HJ)I-tI2I%II"J&JEJ \J}J JJ:J1J)K#BK$fKKKKRKJLbL-}L*L.L4M*:M$eM4M.M&MN!5N,WN(N$NN@N;)O"eOO!O1O(O%P%DP.jP%P)P2PQ';Q&cQQ-QDQRS S$;S`S{S*S!S#STT7T&PT-wTT;T(T'U,:U,gUFUNUX*V.VW W%W+W-!X#OXFsX/X7Xz"YLYYNZ5TZ7ZCZC[1J[3|[3[ [[\\3\(O\x\\$\\>\]V-]:]]"^,^^1^ *_ 7_EB_:_9_!_ `"@`c``;`7`7 a#Ca&ga/a&aaa b1bE8b.~b*b!b-b4(c0]cDcTc@(d2id,dFdee ,e9e1We#ee e?ef?,flf{f f;fffgA h;Lh'h3hGh#,i8Pi:i@i j)&j6Pj1j0j1jk&9k `kmk6k!kkk0kU+llPm)`m,m$mVm;3nonN oYo(pFp#apLp)ppq,(q&Uq|q6r#sBs"Zs}s$s'ssctittttt?tu9uRuiu:uu,bv.vv6w+w.x42xKgx x(x;xB9y>|y@y5y92z9lzAz'z%{,6{8c{ {:{{{|"4|.W|-|(|2|}-} B}O}J}@1~.r~:~~~""4Wfh)>/8"hERo&+.7ԃL Y1{FU^J,/ֆ!8(.a/HH =R-Jc*239>m2Ì:,K9x-9-/HxB'׎$5$J%o)F@#Gk.E6b<L֒#G@"˔(E:Zŕ!Ε[uJі5R<IR-:ʘ<*B,m4/ϙ,,B14f 3œ=+4*`(4Ӟ  ,!(Nw33٠% !3+U0%,ء++1,]-' N:<w:TУ%LH;GѥT>n0,ަD %PEvPK 7Y:\̨Y)V>ک9VSO7O2OGҫ-HH&=LdP2Y5H/خMGV;HگO#Us\ɰm&%#Bޱ6!8Xa^jRhR&PyRʴQCoBK3BHvA>@:*{'Dθ%!92[+P, 8@B <cSO&D-k%;KG: -42&yY$?Pc t #(! !B)d$B?6Ng!3%0ZV':( = JWl|.'*5G}*$"=.`"<45$4Z25 &<&W ~-*1B`i2[+Jf"* 5:L* 27V=qOU5f%8* =%KQq+*?Z.x+W+(En1w4/-<,Y2%* !5>W'=)-D:r!;" :.;i'%#4%X3~"(8<T9#?/o%:5.?He,5/Q)'XF)Lv">.Y2 J0K Q*_!# V**. <?$d&m;'17FF~+ +'&:'a?!2( G[h%3>r'8W dt423,"1O,"@.%T,o3>ss$'7D(|(--*"J2m14#)2/\2I/ 797qF%EG\>?I#&m+,&NPc75>"8a,/4F,,s-*47.Hf%'?@=!~6BE9`T!,'pTp^6)%)*-!Xz .+* *8,c,(&"'Iq&!&$(=3fD72 Q5^:,%".=l(o  +),?0N 781'0CX,;<3B3vB" :8[67C@`* +%2Q" *7F7 ~  : - E& 2l " I ! Q.  4  * ( *C n # 2 ' , *0 8[ ; ; & /30c6HGLUahP :G.^,.B0q-1578/p8$!),K&x)#2 8%Cix$ #')!Qs#(&#/,S-/," .$I7n7J>)<h#04-/]Ex,/?C[>BH!!j.6=;C M,=E;('=@ ~0M/>nDV"( -K Ky . / 8$!)]!!5!8!4"<"8"p#+#E#,#h$$$>$A$,+%*X%,%B%%2&8A&0z& &<&B&58'2n'8'-'B(HK( (((((%)3=)q)H)L)T'**|** ***+*3(+\+n+ +"+'+$+,);,e,{, ,(,,,)- .-8-/T---1--) .6. V.d.}.!.G.*/L2/A/+//0 0$608[00 00[0#81\1!o11 1*1914#27X222"223%13W3#i3!333T3b 4Rp4]4@!58b5-505?57:6Fr6&6'6;7=D7:7377)8B98)|88 8=891.9`9{99,9-9Lp<Y %M7f$!liH"Dbv5OR6g.3OF&:J{jVZ$uo HdP eE =_^*x/X=WTU! Sb9{)5c\ wPy >32NjO]va& `9YhVCm q[X)-kR&gQP*8N?1e3b4,r568W?vF%Iy>U~8|HwVHle+iQEhlN#1%;"brYcCRp)m;?"o)J~.hI^ (`k5rZ1'd<^CK`q $Acd3'hN g7*p\sHBQzf`~LN yff^WF |n}{e!anmKX`+#CEB@}k0\>RY]\}g)x, e _AA /UzTM9m5?VF !T-;SsyT B9 xf (Xq#bU'MXWBpv@^TLj>iD%[t4$zZc>~8*-Ea+|:?suih@#4Gl"8+ (.t_A qn6(0:2=&K_@O[-k1R/J[U0:zQG|*=%Cm}D<jas1xGM + 9twwd2'' AKj$J{P]O/r " g-w,]o~ 20L<cYE3; 7yKrnpQI2<4GZZ.#q;ISIo|z[u&D]4F,L!l:uW0it/.BMVsk6{Dd7@S=x_}, \nv(S7 o6JP Guat Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg-1.3.92 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:20+0200 Last-Translator: Roman Pavlik Language-Team: Czech Language: cs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Napište identifikátor uživatele (user ID). Ukončete prázdným řádkem: Nedostatek náhodných bajtů. Prosím, pracujte s operačním systémem, abyste mu umožnili získat více entropie (je potřeba %d bajtů). Vyberte obrázek, který bude použit jako Vaše fotografické ID. Obrázek musí být ve formátu JPEG. Nezapomeňtě, že obrázek bude uložen ve Vašem veřejném klíči - velký obrázek bude mít za následek velmi velký veřejný klíč ! Vhodná velikost obrázku je asi 240x288. Podporované algoritmy: Aby bylo možné rozpoznat Váš klíč, musíte znát identifikátor uživatele; program jej složí z Vašeho jména a příjmení, komentáře a e-mailu v tomto tvaru: "Magda Prochazkova (student) " alias "%s" použití %s klíče %s importováno: %lu beze změn: %lu nové podklíče: %lu nové ID uživatelů: %lu neimportováno: %lu bez ID uživatele: %lu "%s": preference pro šifrovací algortimus %s "%s": preference pro komprimační algoritmus %s "%s": preference pro podepisovací algoritmus %s (podklíč na hlavním klíči ID %s) Není jisté, zda tento podpis patří vlastníkovi. Tento podpis je pravděpodobně PADĚLANÝ. Nic nenaznačuje tomu, že tento podpis patří vlastníkovi klíče. To může znamenat, že podpis je padělaný. které nesjou k dispozici. Táká se to těchto user ID: nové podpisy: %lu "%s" Seriové číslo karty = Fingerprint klíče = Fingerprint podklíče: přečtené tajné klíče: %lu přeskočeny nové klíče: %lu odstraněné uživatelské ID: %lu Fingerprint podklíče: odstraněné podpisy: %lu (%c) Konec (%c) Zapnout/vypnout schopnost autentizovat (%c) Zapnout/vypnout schopnost šifrovat (%c) Zapnout/vypnout schopnost podepisovat (%d) DSA (nastavit si vlastní použití) (%d) DSA (pouze pro podpis) (%d) DSA a ElGamal (%d) ElGamal (pouze pro šifrování) (%d) RSA (pouze pro šifrování) (%d) RSA (nastavit si vlastní použití) (%d) RSA (pouze pro podpis) (%d) RSA a RSA (implicitní) (0) Neodpovím.%s (1) Nijak jsem to nekontroloval(a).%s (1) Podepisovací klíč (2) Šifrovací klíč (2) Částečně jsem to ověřil(a).%s (3) Autentizační klíč (3) Velmi pečlivě jsem to ověřil(a).%s nové revokace klíčů: %lu %d = Nedůvěřuji %d = Nevím nebo neřeknu %d = Důvěřuji úplně %d = Důvěřuji částečně %d = Důvěřuji absolutně Nelze podepsat. alias "%s" m = zpět do hlavního menu u = ukončit s = přeskočit tento klíč importované tajné klíče: %lu (hlavní ID klíče %s) (neexportovatelné) (nerevokovatelné) Primární fingerprint klíče: tajné klíče nezměněny: %lu "%s" není ID klíče: přeskočeno "%s" je již lokálně podepsán klíčem %s "%s" je již podepsán klíčem %s # Seznam přidělených hodnot důvěry, vytvořen %s # (Použijte "gpg --import-ownertrust" k jeho obnově) Do trvalého uzamčení karty zůstává %d pokusů o zadání PINu administrátora %d špatných podpisů zpracováno %d klíčů (%d validit vymazáno) požadováno %d částečné důvěry a %d úplné důvěry, model %s %d podpisů neověřených, protože vznikly chyby %d podpisů neověřených, protože chybí klíč objeveno %d identifikátorů uživatele bez platného podpisu jím samým %lu klíčů uloženo v cache (%lu podpisů) %lu klíčů již uloženo v cache (%lu podpisů) %lu klíče byly doposud zpracovány %s ... %s nepodporuje protokol verze %d %s dosud není funkční s %s %s zašifrovaná data %s zašifrovaný klíč sezení bude použito šifrování %s %s je nový %s je beze změny klíč %s může mít délku v intervalu %u až %u bitů. velikost klíče %s musí být v intervalu %u-%u %s nedává s %s smysl! Není dovoleno používat %s s %s! podpis %s, hashovací algoritmus %s %s. %s/%s zašifrovaný pro: %s %s/%s podpis od: "%s" %s: Je zde částečná důvěra, že tento klíč patří uvedenému uvživateli %s: Nic nenaznačuje tomu, že tento klíč patří uvedenému uživateli %s: adresář neexistuje! %s: chyba při čtení volného záznamu: %s %s: chyba při čtení záznamu verze: %s %s: chyba při aktualizaci záznamu verze: %s %s: chyba při zápisu adresářového záznamu: %s %s: chyba při zápisu záznamu verze: %s %s: přidání záznamu selhalo: %s %s: nepodařilo se vytvořit hashovací tabulku: %s %s: nepodařilo se vytvořit záznam verze: %s%s: vynulování záznamu selhalo: %s %s: neplatná verze souboru %d %s: neplatná databáze důvěry %s: vytvořena neplatná databáze důvěry %s: soubor klíčů (keyring) vytvořen %s: není soubor databáze důvěry %s: přeskočeno: %s %s: přeskočeno: veřejný klíč je již obsažen v databázi %s: přeskočeno: veřejný klíč je neplatný (disabled) %s: databáze důvěry vytvořena %s: neznámá přípona %s: záznam verze s číslem %lu %s:%d: použití parametru "%s" se nedoporučuje %s:%d: neplatný seznam auto-key-locate %s:%d: neplatný parametr pro export %s:%d: neplatný parametr pro import %s:%d: neplatný parametr pro server klíčů %s:%d: neplatný parametr pro výpis %s:%d: neplatný parametr pro ověření délka %u bitů, typ %s, klíč %s, vytvořený %s(Nebyl zadán Žádný popis) (Pravděpodobně zda chcete vybrat %d) (Toto je citlivý revokační klíč) (citlivá informace)(dokud neurčíte klíč jeho fingerprintem) (pravděpodobně jste pro tento úkol použili nesprávný program) * Příkaz `sign' může být použit s prefixem `l' pro lokální podpis (lsign), s prefixem `t' pro důvěryhodný podpis (tsign) nebo `nr' pro neodvolatený podpis (nrsign) nebo libovolnou jejich kombinací (ltsign, tnrsign, atd.). --clearsign [jméno souboru]--decrypt [jméno souboru]--edit-key id uživatele [příkazy]--encrypt [jméno souboru]--lsign-key id uživatele--output pro tento příkaz není platný --sign --encrypt [jméno souboru]--sign --symmetric [jméno souboru]--sign [jméno souboru]--sign-key id uživatele--store [jméno souboru]--symmetric --encrypt [jméno souboru]--symmetric --sign --encrypt [jméno souboru]--symmetric [jméno souboru]-k[v][v][v][c] [id uživatele] [soubor s klíči (keyring)]... toto je chyba v programu (%s:%d:%s) 1 špatný podpis 1 podpis neověřen, protože chybí klíč 1 podpis neověřen, protože vznikla chyba objeven 1 identifikátor uživatele bez platného podpisu jím samým 14 fixní délka na kterou se překládá see trustdb.c:uid_trust_string_fixed@ (Použijte manuálové stránky pro kompletní seznam všech příkazů a možností) @ -se -r Bob [soubor] podepsat a zašifrovat pro uživatele Bob --clearsign [soubor] vytvořit podpis čitelného dokumentu --detach-sign [soubor] vytvořit podpis oddělený od dokumentu --list-keys [jména] vypsat klíče --fingerprint [jména] vypsat fingerprinty @ Možnosti: @Příkazy: nařízen výstup do formátu ASCII. administrátorské příkazy jsou povoleny administrátorské příkazy nejsou povoleny pouze administrátorské příkazy Jestliže chcete generovat podklíč, odpovězte "ano" (nebo jen "a").Odpovězte "ano", pokud chcete smazat podklíčPokud si přejete přepsání souboru, odpovězte "ano"Pokud opravdu chcete smazat tento identifikátor uživatele, odpovězte "ano". Všechny certifikáty budou také ztraceny!Pokud chcete podepsat VŠECHNY identifikátory uživatelů, odpovězte "ano"Odpovězte "ano" nebo "ne"Jste si jistý(á), že chcete podepsat tento klíč svým klíčem "%s" (%s) Jste si jistý, že jej chcete stále přidat? (a/N) Jste si jistý, že jej chcete stále revokovat? (a/N) Jste si jistý(á), že stále chcete podepsat tento klíč? (a/N) Jste si jistí, že tento klíč chcete pověřit revokací? (a/N) Jste si jistý(á), že jej chcete smazat? (a/N) Jste si jistý(á), že jej chcete přepsat? (a/N) Jste si jistý(á), že jej chcete použít? (a/N) AutentizaceŠPATNÝ podpis od "%s"CA fingerprint: Chyba CRC; %06lX - %06lX Nemohu ověřit podpis: %s Není možné editovat tento klíč: %s Nemohu otevřít `%s': %s ZrušitJméno (křestní) držitele karty: Příjmení držitele karty: Certifikáty vedoucí k finálnímu důvěryhodnému klíči: CertifikováníZměnit (J)méno, (K)omentář, (E)-mail, (P)okračovat dál nebo (U)končit program? Změnit (J)méno, (K)omentář, (E)-mail nebo (U)končit? Změnit předvolby pro všechny uživatelské ID (nebo pouze pro označené) na aktuální seznam předvoleb. Časová razítka všech dotčených podpisů klíčů jimi samotnými budou posunuty o jednu vteřinu dopředu. Měním dobu expirace podklíče. Měním dobu expirace primárního klíče. Šifra: Příkaz očekává jméno souboru jako argument Komentář: Komprese: Vytvořit pro tento klíč pověřený revokační certifikát? (a/N)Vytvořit pro tento klíč revokační certifikát? (a/N) Vytvořit pro tento podpis revokační certifikát? (a/N)Kriticky preferovaný keyserver: Kritická podepisovací notace: Kritická podepisovací politika: Aktuálně povolené akce: Aktuální příjemci: DSA klíč %s vyžaduje hash o délce %u nebo více bitů DSA klíč %s používá nebezpečný (%ubitový) hash DSA vyžaduje, aby délka hashe byla násobkem 8 bitů Smazat tento dobrý podpis? (a/N/u)Smazat tento neplatný podpis? (a/N/u)Smazat tento klíč ze souboru klíčů? (a/N) Smazat tento neznámý podpis? (a/N/u)Smazán %d podpis. Smazáno %d podpisů. Podpis oddělený od dokumentu. Hash: Zobrazuji %s fotografický ID o velikosti %ld pro klíč %s (uid %d) Opravdu chcete smazat vybrané klíče? (a/N) Opravdu chcete smazat tento klíč? (a/N) Opravdu to chcete udělat? (a/N) Opravdu chcete revokovat celý klíč? (a/N) Opravdu chcete revokovat vybrané podklíče? (a/N) Opravdu chcete revokovat tento podklíč? (a/N) Opravdu chcete nastavit pro tento klíč absolutní důvěru? (a/N) Chcete vytvořit nový podpis a nahradit jím ten, jehož platnost vypršela? (a/N) Přejete si jej změnit na plně exportovatelný podpise? (a/N) Přejete si jej změnit na formát OpenPGP? (a/N) Chcete klíč přesto znova podepsat? (a/N) Chcete, aby platnost Vašeho podpisu vypršela ve stejnou dobu? (A/n) CHYBA: E-mailová adresa: ŠifrováníVložte PIN administrátora: Vložte jméno JPEG souboru s fotografickým ID: Vložte nový PIN administrátora: Vložte nový PIN: Vložte PIN: Můžete vložit další popis. Ukončete prázdným řádkem: Vložte nový název souboruVložte číslo (čísla), 'N' pro další nebo 'Q' pro konec> Vložit heslo Vložte heslo: Vložte jméno držitele klíčeVložte nové heslo (passphrase) pro tento tajný klíč. Vložte poznámky: Vložte požadovanou hodnotu tak, jak je uvedeno v příkazovém řádku. Je možné vložit datum ve formátu ISO (RRRR-MM-DD), ale nedostanete správnou chybovou hlášku - místo toho systém zkusí interpretovat zadanou hodnotu jako interval.Vložte délku klíčeVložte identifikátor adresáta, kterému chcete poslat zprávu.Vložte identifikátor uživatele pověřeného revokací: Vložte URL preferovaného keyserveru: Chyba při čtení záložního klíče z `%s': %s Chyba: jméno a příjmení je příliš dlouhé (limit je %d znaků). Chyba: Více mezer není povoleno. Chyba: Login je příliš dlouhý (limit je %d znaků). Chyba: V současné verzi je povolenou pouze plain ASCII. Chyba: Privátní DO je příliš dlouhé (limit je %d znaků). Chyba: Znak "<" nelze použít. Chyba: Databáze důvěry je poškozena. Chyba: URL je příliš dlouhé (limit je %d znaků). Chyba: neplatný znak v řetězci s předvolbami Chyba: nesprávně naformátovaný fingerprint. Chyba: neplatná délka řetezce s předvolbami. Chyba: neplatná odpověď. Podpis s vypršenou platností od "%s"Vlastnosti: Soubor `%s' existuje. Zadejte název souboru, ke kterému se podpis vztahujeZačněte psát svou zprávu ... Dobrý podpis od "%s"Hash: Nápověda: Vyberte id uživatele k podepsání Je-li nová karta připravena, stiskněte enter. Operaci zrušíte stisknutím 'z': S jakou jistotou jste prověřili, že klíč, který chcete podepsat patří výše uvedené osobě. Pokud neznáte odpověď, zadejte "0". Nakolik důvěřujete tvrzení, že tento klíč patří uvedenému uživateli? Částečně jsem ověřil tento klíč. Velmi pečlivě jsem ověřil tento klíč. Nijak jsem tento klíč neověřil. algoritmus IDEA není dostupný; optimisticky se jej pokusíme nahradit algoritmem %s Pokud to nebude fungovat, prosím, nahlédněte do návodu Pokud chcete, můžete vložit text popisující původ vzniku tohoto revokačního ceritifikátu. Prosím, stručně. Text končí prázdným řádkem. Pokud přesto chcete použít tento nedůvěryhodný klíč, odpovězte "ano".Obecně nelze doporučit používat stejný klíč pro šifrování a podepisování Tento algoritmus je vhodné použít jen za jistých podmínek. Kontaktujte prosím nejprve bezpečnostního specialistu.Neplatný znak v komentáři Neplatný znak ve jméně Neplatný příkaz (zkuste "help") Neplatný klíč %s změněn na platný pomocí --always-non-selfsigned-uid Neplatné heslo; prosím, zkuste to znovuNeplatný výběr. Je to správně (a/N)? Je důvod revokace vybrán správně? (a/N) Je tato fotografie správná (a/N/u)? NENÍ jisté, zda tento klíč patří osobě, jejíž jméno je uvedeno v uživatelském ID. Pokud *skutečně* víte, co děláte, můžete na následující otázku odpovědět ano Je na Vás, abyste zde přiřadil(a) hodnotu; tato hodnota nebude nikdy exportována třetí straně. Potřebujeme ji k implementaci "pavučiny důvěry"; nemá to nic společného s (implicitně vytvořenou) "pavučinou certifikátů".Klíč %s je již revokován. Klíč k dispozici na: Platnost klíče nikdy neskončí Platnost klíče skončí v %s Vytváření klíče bylo zrušeno. Vytvoření klíče se nepodařilo: %s Klíč byl zkompromitovánK dispozici je jen kontrolní součet klíče nebo je klíč na kartě - passphrase nelze změnit. Klíč se již nepoužíváKlíč je chráněný. Klíč revokován.Klíč je nahrazenKlíč je platný pro? (0) Klíč nebyl změněn, takže není potřeba jej aktualizovat. soubor klíčů (keyring)Keyserver bez modifikaceJazykové předvolby: Login (jménu účtu): Vytvořit zálohu šifrovacího klíče mimo kartu? (A/n) N pro změnu názvu. C pro změnu komentáře. E pro změnu e-mailové adresy. O pro pokračování generování klíče. Q pro ukončení generování klíče.POZNÁMKA: %s není v této verzi dostupné POZNÁMKA: %s není pro normální použití! POZNÁMKA: Nelze zaručit, že karta podporuje požadovanou velikost. Pokud generování klíče neuspěje, prosím, nahlédněte do dokumentace své karty, kde se dozvíte, jaké velikosti jsou dovoleny. POZNÁMKA: Vlastnost %s není v této verzi dostupná POZNÁMKA: Tento klíč není chráněný! POZNÁMKA: S/N klíče neodpovídá S/N karty POZNÁMKA: záloha klíče z karty uložena do `%s' POZNÁMKA: vytvoření podklíče pro klíče v3 není v souladu s OpenPGP POZNÁMKA: klíč byl revokovánPOZN: klíč je již na kartě uložen! POZNÁMKA: neexistuje implicitní soubor s možnostmi `%s' POZNÁMKA: starý implicitní soubor s možnostmi `%s ignorován' POZNÁMKA: primární klíč je online a je uložen na kartě POZNÁMKA: sekundární klíč je online a je uložen na kartě POZNÁMKA: platnost tajného klíče %s skončila %s POZNÁMKA: odesílatel požadoval ("for-your-eyes-only") POZNÁMKA: podpisovému klíči %s skončila platnost %s POZNÁMKA: jednoduchý mód S2K (0) je důrazně nedoporučován POZNÁMKA: do trustedb nezle zapisovat Jméno nemůže začínat číslicí Jméno musí být dlouhé alespoň 5 znaků Pro provedení této operace je potřeba tajný klíč. jJkKeEPpUuV souboru tajných klíčů chybí odpovídající podpis Pomoc není k dispoziciPomoc není dostupná pro '%s'Důvod nebyl specifikovánNeexistuje podklíč s indexem %d Takový identifikátor uživatele neexistuje. Není přiřazena žádná hodnota důvěry: Neexistuje uživatelské ID s hashem %s Neexistuje identifikátor uživatele s indexem %d Neplatná e-mailová adresa Nepodepsáno vámi. Možnosti: Tento klíč nemůže být použitý pro šifrování. K vytvoření sekundárního klíče pro tento účel můžete použít příkaz "--edit-key". Poznámka: Podepisovatelova adresa „%s“ se neshoduje s DNS záznamem Poznámka: Tento klíč byl označen jako neplatný (disabled). Poznámka: Skončila platnost tohoto klíče! Poznámka: Podepisovatelova ověřená adresa je „%s“ Nic nebylo smazáno. Nic k podepsání klíčem %s Nalezena OpenPGP karta číslo %s OpenPGp karta není dostupná: %s Přepsat (a/N)? Důvěryhodnost vlastníka nelze měnit je-li používána databáze důvěry poskytnutá uživatelem funkce PIN callback zkončila chybou: %s PIN pro CHV%d je příliš krátký; minimální délka je %d PIN není zopakován správně; zkuste to znovuNejdřív, prosím, opravte chybu Prosím rozhodněte, nakolik důvěřete tomuto uživateli, že správně verifikuje klíče jiných uživatelů (prohlédnutím cestovních pasů, kontrolou fingerprintů z různých zdrojů...)? Do pole jméno nebo komentář nepište, prosím, e-mailovou adresu. Prosím vložte doménu, pro kterou je podpis omezen nebo stiskněte enter pro podpis bez omezení na doménu. Prosím, vložte nový název souboru. Pokud pouze stisknete RETURN, bude použit implicitní soubor (který je ukázán v závorkách).Prosím, vložte nepovinný komentářProsím, vložte název datového souboru: Prosím vložte hloubku důvěry (depth trust) k tomuto podpisu. Hloubka větší než 1 umožňuje klíčům, které jste podepsal podepsat jiný klíč, který bude pro Vás důvěryhodný. Prosím, vložte heslo; toto je tajná věta Prosím, opravte tento možný bezpečnostní problém Prosím vožte kartu a stiskněte enter. Operaci zrušíte stisknutím 'z': Prosím nezapomeňte, že tovární nastavení PINu je PIN = `%s' PIN administrátora = `%s' Toto nastavení můžete změnit příkazem --change-pin Prosím nezapomeňte, že zobrazované údaje o platnosti klíčů nemusí být nutně správné, dokud znova nespustíte program. Prosím, odstraňte výběr z tajných klíčů. Prosím vyjměte kartu a vložte jinou se seriovým číslem: %.*s Prosím, zopakujte poslední heslo, abyste si byl(a) jistý(á), co jste napsal(a).Chyby oznamte, prosím, na adresu . Připomínky k překladu . Prosím, vyberte nejvýše jeden podklíč. Prosím, vyberte právě jeden id uživatele . Prosím vyberte důvod revokace: Prosím, vyberte druh klíče, který chcete generovat: Prosím, vyberte druh klíče, který chcete: Prosím vyberte místo pro uchování klíče: Prosím určete, jak dlouho by klíč měl platit. 0 = doba platnosti klíče není omezena = doba platnosti klíče skončí za n dní w = doba platnosti klíče skončí za n týdnů m = doba platnosti klíče skončí za n měsíců y = doba platnosti klíče skončí za n let Prosím určete, jak dlouho by měl podpis platit. 0 = doba platnosti podpisu není omezena = doba platnosti podpisu skončí za n dní w = doba platnosti podpisu skončí za n týdnů m = doba platnosti podpisu skončí za n měsíců y = doba platnosti podpisu skončí za n let Prosím, nejdříve použijte příkaz "toggle" (přepnout). Prosím čekejte, je nutné získat dostatek entropie. Aby jste se nenudili, můžete na počítači dělat něco jiného, zvýšíte tak kvalitu entropie. Pro klíč %s lze provést: Preferovaný keyserver: Primární fingerprint klíče:Privátní DO data: Provést? (a/N) Veřejný klíč: Veřejný klíč je neplatný (disabled). Ukončit bez uložení? (a/N) schází RSA modulus nebo nemá velikost %d bitů schází RSA prime %s nebo nemá velikost %d bitů schází veřejný RSA exponent nebo je delší než %d bitů Jméno a příjmení: Opravdu vytvořit revokační certifikáty? (a/N) Opravdu vytvořit? (a/N) Opravdu smazat tento podpis podepsaný sebou samým? (a/N)Opravdu přesunout primární klíč? (a/N) Opravdu odstranit všechny vybrané id uživatele? (a/N) Opravdu odstranit tento id uživatele? (a/N) Opravdu revokovat všechny vybrané id uživatele? (a/N) Opravdu revokovat tento id uživatele? (a/N) Opravdu podepsat všechny id uživatele? (a/N) Skutečně podepsat? (a/N) Opravdu aktualizovat předvolby pro vybraný id uživatele? (a/N) Opravdu aktualizovat předvolby? (a/N) Důvod revokace: %s Opakovat heslo Opakujte heslo: Opakujte tento PIN: Přepsat existující klíč? (a/N) Přepsat existující klíče? (a/N) Požadovaná délka klíče je %u bitů. Kód pro resetování je příliš krátký; minimální délka je %d Kód pro resetování není nastaven nebo již není dostupný Revokační certifikát vytvořen. Revokační certifikát byl vytvořen. Prosím přeneste jej na médium, které můžete dobře schovat. Pokud se k tomuto certifikátu dostane nepovolaná osoba, může zneplatnit Váš klíč. Je rozumné tento certifikát vytisknout a schovat jej pro případ, že medium s certifikátem přestane být čitelné. Ale pozor: Tiskový subsystém na Vašem počítači může ukládat data určená k tisku a zpřístupnist je jiným uživatelům! Uložit změny? (a/N) Tajný klíč je dostupný. Tajné části primárního klíče nejsou dostupné. Tajná část primárního klíče jsou uloženy na kartě. Vyberte algoritmus, který chcete použít. DSA (alias DSS) je Digital Signature Algorithm a může být použit pouze pro podepisování. Elgamal je pouze šifrovací algoritmus. RSA může být použit pro šifrování anebo podepisování. První (primární) klíč musí být vždy klíč, pomocí kterého lze podepisovat.Nastavit seznam předvoleb: Zadejte pohlaví: M - mužské, F - ženské nebo stisněte mezerník: PodepisováníPodepsat? (a/N) Platnost podpisu nikdy neskončí Platnost podpisu skončila %s Platnost podpisu skončí %s Platnost podpisu skončí v %s Podpis je platný pro? (%s) Podpis vytvořen %s Podpis vytvořen %s pomocí klíče %s s ID uživatele %s Podepisovací notace: Podepisovací politika: SsEeAaQqPodklíč %s je již revokován. Syntaxe: gpg [možnosti] [soubory] podepsat, ověřit, šifrovat nebo dešifrovat implicitní operace závisí na vstupních datech Syntaxe: gpgv [volby] [souboru] Ověří podpisy proti známým, důvěryhodným klíčům Karta bude nyní přenastavena na generování klíče dlouhého %u bitů Minimální úroveň důvěry tohoto klíče je: %s Generátor náhodných čísel je pouze atrapa, aby program mohl běžet, v žádném případě není kryptograficky bezpečný! NEPOUŽÍVEJTE JAKÁKOLIV DATA VYTVOŘENÁ TÍMTO PROGRAMEM!! Podpis klíče "%s" jím samým je podpis formátu PGP 2.x. Podpis je neplatný. Je rozumné ho odstranit z Vašeho souboru klíčů.Podpis bude označen jako neexportovatelný. Podpis bude označen jako neodvolatelný (non-revocable). Uživatelský ID formátu PGP 2.x nemá žádné předvolby Tento JPEG je opravdu velký (%d bajtů)! Tento příkaz není v módů %s dovolený. Tento příkaz je dostupný pouze pro kraty verze 2 Toto je tajný klíč! - opravdu smazat? (a/N) Toto je podpis, který váže identifikátor uživatele ke klíči. Obvykle není dobré takový podpis odstranit. GnuPG nemůže tento klíč nadále používat. Udělejte to jenom v případě, kdy je tento podpis klíče jím samým z nějakého důvodu neplatný a kdy je k dipozici klíč jiný.Toto je platný podpis klíče; normálně nechcete tento podpis smazat, protože může být důležitý při vytváření důvěry klíče nebo jiného klíče ceritifikovaného tímto klíčem.Tento klíč náleží nám (máme odpovídající tajný klíč) Tento klíč byl označen za neplatný (disabled)Platnost klíče vypršela!Platnost klíče vyprší %s. Tento klíč není chráněný. Tento klíč může být revokován %s klíčem %s Tento klíč pravděpodobně náleží uvedenému uživateli V %s tento klíč revokoval %s klíčem %s Tento podpis nemůže být ověřen, protože nemáte odpovídající veřejný klíč. Jeho smazání byste měl(a) odložit do doby, než budete znát, který klíč byl použit, protože tento podpisovací klíč může vytvořit důvěru prostřednictvím jiného již certifikovaného klíče.Platnost podpisu vyprší %s. Jedná se o podpis klíče jím samým. To by způsobilo nepoužitelnost klíče v PGP 2.x. Revokován: Aby bylo možné vybudovat pavučinu důvěry, musí GnuPG vědět, kterým klíčům důvěřujete absolutně - obvykle to jsou ty klíče, pro něž máte přístup k tajným klíčům. Odpovězte "ano", abyste nastavili tyto klíče jako absolutně důvěryhodné Celkový počet zpracovaných klíčů: %lu URL pro získání veřejného klíče: NezakomprimovánoNeznámý typ podpisu `%s' Použití: gpg [možnosti] [soubory] (-h pro pomoc)Použití: gpg [možnosti] [soubory] (-h pro pomoc)Použít přesto tento klíč? (a/N) Uživatel ID "%s": zkráceno: %s Vypršela platnost uživatelského ID "%s".ID uživatele "%s" není podepsáno jím samým.Uživatelské ID "%s" je revokováno.ID uživatele "%s" je připraveno k podpisu.Uživatel ID "%s": %d podpisů odstraněno Uživatel ID "%s": %d podpisů odstraněno Uživatelské ID "%s": je již vyčištěno Uživatelské ID "%s": je již minimizováno Identifikátor uživatele již neplatíVAROVÁNÍ: VAROVÁNÍ: používání příkaz "%s" se nedoporučuje - nepoužívejte jej VAROVÁNÍ: používání parametru "%s" se nedoporučuje VAROVÁNÍ: %s přepíše %s VAROVÁNÍ: Existují dva soubory s tajnými informacemi. VAROVÁNÍ: Elgamal klíče pro podepisování a šifrování se už nepoužívají VAROVÁNÍ: Toto je PGP2 klíč. Přidání 'pověření revokace' může v některých verzích PGP vést k odmítnutí tohoto klíče. VAROVÁNÍ: Toto je PGP2 klíč. Přidání fotografického ID může v některých verzích PGP vést k odmítnutí tohoto klíče. VAROVÁNÍ: Tento klíč byl revokován klíčem s pověřením k revokaci! VAROVÁNÍ: Tento klíč byl revokován svým vlastníkem! VAROVÁNÍ: Tento klíč není certifikován důvěryhodným podpisem! VAROVÁNÍ: Tento klíč není certifikován dostatečně důvěryhodnými podpisy! VAROVÁNÍ: Tento podklíč byl revokován svým vlastníkem! VAROVÁNÍ: Je použit nedůvěryhodný klíč! VAROVÁNÍ: NEdůvěřujeme tomuto klíči! VAROVÁNÍ: Objeven slabý klíč - změňte, prosím, znovu heslo. VAROVÁNÍ: soubor `%s' je prázdný VAROVÁNÍ: podpis ID uživatele je datován %d sekund v budoucnosti VAROVÁNÍ: ustanovení klíče 'povřeným revokátorem' je nevratná operace! VAROVÁNÍ: v předvolbách příjemce nenalezen šifrovací algoritmus %s VAROVÁNÍ: vyžádaný algoritmus %s není doporučen VAROVÁNÍ: se zašifrovanou zprávou bylo manipulováno! VAROVÁNÍ: vyžádaný komprimační algoritmus %s (%d) nevyhovuje předvolbám příjemce VAROVÁNÍ: vyžádaný hashovací algoritmus %s (%d) nevyhovuje předvolbám příjemce VAROVÁNÍ: vyžádaná symetrická šifra %s (%d) nevyhovuje předvolbám příjemce VAROVÁNÍ: neplatná velikost random_seed - soubor nepoužit VAROVÁNÍ: klíč %s obsahuje preference pro algoritmy, VAROVÁNÍ: klíč %s může být revokován: zkouším získat revokační klíč %s VAROVÁNÍ: klíč %s může být revokován: revokační klíč %s nenalezen. VAROVÁNÍ: keyserver handler z jiné verze GnuPG (%s) VAROVÁNÍ: volba `%s' pro server klíčů není na této platformě účinná VAROVÁNÍ: zpráva byla zašifrována slabým klíčem v symetrické šifře. VAROVÁNÍ: zpráva nebyla chráněna proti porušení její integrity VAROVÁNÍ: zachyceno více prostých textů VAROVÁNÍ: detekováno více podpisů. Kontrolován bude pouze první. VAROVÁNÍ: žádné uživatelské ID nebylo označeno jako primární. Tento příkaz může způsobit, že za primární bude považováno jiné user ID. VAROVÁNÍ: nebylo nic vyexportováno VAROVÁNÍ: nastavení z `%s' nejsou při tomto spuštění zatím aktivní VAROVÁNÍ: potencionálně nebezpečně symetricky zašifrován klíč sezení VAROVÁNÍ: program může vytvořit soubor core! VAROVÁNÍ: specifikován adresát (-r) bez použití šifrování s veřejným klíčem VAROVÁNÍ: tajný klíč %s není chráněn pomocí simple SK checksum VAROVÁNÍ: konflikt hashe podpisu ve zprávě VAROVÁNÍ: podepisovací podklíč %s má neplatnou křížovou certifikaci VAROVÁNÍ: podepisovací podklíč %s není křížově certifikován VAROVÁNÍ: podpis nebude označen jako neexportovatelný. VAROVÁNÍ: podpis nebude označen jako neodvolatelný (non-revocable). VAROVÁNÍ: tento klíč může být revokován (revokační klíč nenalezen) VAROVÁNÍ: nelze %%-expandovat notaci (příliš dlouhé). Použity neexpandované. VAROVÁNÍ: nemohu %%-expandovat URL politiky (příliš dlouhé). Použity neexpandované. VAROVÁNÍ: nemohu %%-expandovat URL preferovaného keyservery (příliš dlouhé). Použity neexpandované. VAROVÁNÍ: nelze zíslat URI %s: %s VAROVÁNÍ: nelze zpracovat URI %s VAROVÁNÍ: nelze aktualizovat klíč %s prostřednictvím %s: %s VAROVÁNÍ: nelze smazat dočasný adresář `%s': %s VAROVÁNÍ: nelze smazat dočasný soubor (%s) `%s': %s VAROVÁNÍ: vlastnictví adresáře s konfiguračním souborem není nastaveno nebezpečně `%s' VAROVÁNÍ: vlastnictví adresáře s domovkým adresářem není nastaveno nebezpečně `%s' VAROVÁNÍ: přístupová práva k adersáři s konfiguračním souborem nejsou nastavena bezpečně `%s' VAROVÁNÍ: přístupová práva k adresáři s domovským adresářem nejsou nastavena bezpečně `%s' VAROVÁNÍ: vlastnictví konfiguračního souboru není nastaveno bezpečně `%s' VAROVÁNÍ: vlastnictví domovského adresáře není nastaveno bezpečně `%s' VAROVÁNÍ: přístupová práva pro konfigurační soubor nejsou bezpečná `%s' VAROVÁNÍ: přístupová práva pro domovský adresáře nejsou bezpečná `%s' VAROVÁNÍ: používám experimentální šifrovací algoritmus %s VAROVÁNÍ: používám experimentální hashovací algoritmus %s VAROVÁNÍ: používám experimentální algoritmus veřejného klíče %s VAROVÁNÍ: Používaná paměť není bezpečná! VAROVÁNÍ: použitý generátor náhodných čísel není bezpečný!! Musíme vytvořit mnoho náhodných bajtů. Během vytváření můžete provádět nějakou jinou práci na počítači (psát na klávesnici, pohybovat myší, používat disky); díky tomu má generátor lepší šanci získat dostatek entropie. Jakou délku klíče si přejete pro autentizační klíč? (%u) Jakou délku klíče si přejete pro šifrovací klíč? (%u) Jakou délku klíče si přejete pro podepisovací klíč? (%u) Jakou délku podklíče si přejete? (%u) Jakou délku klíče si přejete? (%u) Než podepíšete id uživatele, měli byste nejprve ověřit, zda klíč patří osobě, jejíž jméno je uvedeno v identifikátoru uživatele. Je velmi užitečné, když ostatní vědí, jak důsledně jste provedl(a) takové ověření. "0" znamená, že neuvádíte, jak důsledně jste pravost klíče ověřil(a) "1" znamená, že věříte tomu, že klíč patří osobě, která je uvedena, v uživatelském ID, ale nemohl jste nebo jste neprověřil tuto skutečnost. To je užitečné pro "osobní" verifikaci, když podepisujete klíče, které používají pseudonym uživatele. "2" znamená, že jste částečně ověřil pravost klíče. Např. jste ověřil fingerprint klíče a zkontroloval identifikátor uživatele uvedený na klíči s fotografickým id. "3" Znamená, že jste provedl velmi pečlivě ověření pravosti klíče. To může například znamenat, že jste ověřil fingerprint klíče jeho vlastníka osobně a dále jste pomocí obtížně padělatelného dokumentu s fotografií (například pasu) ověřil, že jméno majitele klíče se shoduje se jménem uvedeným v uživatelském ID a dále jste ověřil (výměnou elektronických dopisů), že elektronické adresa uvedená v ID uživatele patří majiteli klíče. Prosím nezapomeňte, že příklady uvedené pro úroveň 2 a 3 jsou *pouze* příklady. Je jen na Vašem rozhodnutí co "částečné" a "pečlivé" ověření znamená když budete podepisovat klíče jiným uživatelům. Pokud nevíte, jaká je správná odpověď, odpovězte "0".Chystáte se revokovat tyto podpisy: Používáte znakovou sadu `%s'. Nemůžete změnit dobu platnosti klíče verze 3 Nemůžete smazat poslední id uživatele! Nespecifikoval jste identifikátor uživatele (user ID). Můžete použít "-r" Nechcete heslo - to *není* dobrý nápad! Nechcete heslo - to *není* dobrý nápad! Dobře, budu pokračovat bez hesla. Kdykoliv můžete heslo změnit použitím tohoto programu s parametrem "--edit-key". Podepsal(a) jste následující identifikátory uživatele: %s: Neměli by jste přidávat 'pověření revokace' k PGP2 klíči. Neměli by jste přidávat fotografický ID k PGP2 klíči. Nemůžete udělat OpenPGP podpis klíče typu PGP 2.x, když jste v --pgp2 módu. Databázi důvěry můžete zkusit znovu vytvořit pomocí těchto příkazů: Musíte vybrat alespoň jeden klíč. Musíte vybrat alespoň jeden id uživatele. Musíte vybrat právě jeden klíč. Pro ochranu Vašeho tajného klíče musíte zadat heslo. Musíte znát heslo, abyste odemknul(a) tajný klíč pro uživatele: "%s" Potřebujete heslo, abyste odemknul(a) tajný klíč pro uživatele: "%.*s" Klíč o délce %u bitů, typ %s, ID %s, vytvořený %s%s Zvolil(a) jste tento identifikátor uživatele: "%s" Měl(a) byste specifikovat důvod certifikace. V závislosti na kontextu máte možnost si vybrat ze seznamu: "Klíč byl kompromitován" Toto použijte, pokud si myslíte, že k Vašemu tajnému klíči získaly přístup neoprávněné osoby. "Klíč je nahrazen" Toto použijte, pokud jste tento klíč nahradil(a) novějším klíčem. "Klíč se již nepoužívá" Toto použijte, pokud tento klíč již nepoužíváte. "Identifikátor uživatele už není platný" Toto použijte, pokud by se identifikátor uživatele už neměl používat; normálně se používá k označení neplatné e-mailové adresy. Platnost Vašeho podpisu na "%s" vypršela. Vaš současný podpis na "%s" je pouze lokální. Vaše rozhodnutí? Váš výběr? Vaš výběr? (pro více informací vložte '?'): Váš systém neumí zobrazit data po roce 2038. V každém případě budou data korektně zpracovávána do roku 2106. [ plná ][nedefinovaná][ expirován ][ revokován ][ neznámá ][ID uživatele nenalezeno][jméno souboru][ částečná ][není nastaven][revokace][podpis klíče jím samým][ absolutní ][nejistý]`%s' je již zkomprimován `%s' není soubor ve formátu JPEG `%s' není normální soubor - ignoruji `%s' není platná znaková sada `%s' není platný dlouhý keyID `%s' není platná doba expirace podpisu exportovat nechráněné podklíče přístup k administrátorským příkazům není nakonfigurován akce `%s' není podporována v protokolu `%s' serveru klíčů přidat klíč na kartupřidat fotografický IDpřidat revokační klíčpřidat podklíčypřidat identifikátor uživatelenejednoznačné volby `%s' anonymní adresát; zkouším tajný klíč %s ... ASCII hlavička: ASCII kódování: %s předpokládám %s šifrovaných dat předpokládám špatný podpis klíčem %s, protože je nastaven neznámý kritický bit předpokládám podepsaná data v `%s' automaticky získávat klíče při ověřování podpisů„%s“ automaticky získáno přes %s špatné MPIšpatné URIšpatný certifikátšpatný klíčšpatné heslošpatný veřejný klíčšpatný tajný klíčšpatný podpisbýt o trochu víc tichýbinární formátselhalo vytvoření paketu (build_packet): %s zZcache souboru klíčů `%s' přístup na %s se nezdařil - vadná OpenPGP karta? nemohu otevřít `%s': %s nemohu zavřít `%s': %s nemohu se připojit k `%s': %s nemohu vytvořit `%s': %s nemohu vytvořit zálohu souboru `%s': %s nemohu vytvořit adresář `%s': %s nemohu vytvořit zámek pro `%s' nemohu vypnout vytváření core souborů: %s nelze provést v dávkovém módu bez parametru "--yes" to nemohu v dávkovém módu provést nemohu vygenerovat prvočíslo s pbits=%u qbits=%u nemohu vygenerovat prvočíslo s méně než %d bity nemohu pracovat s algoritmem veřejného klíče %d nelze pracovat s řádky delšími než %d znaků nelze zpracovat tyto nejednoznačné podpisové data nelze zamčít `%s' nelze zamčít `%s': %s nelze otevřít `%s' nemohu otevřít `%s': %s nemohu otevřít podepsaná data '%s' nemohu otevřít soubor klíčův dávkovém režimu se nelze ptát na heslo nemohu číst `%s': %s nemohu použít příkaz stat na `%s': %s v módu S2K nelze použít symetrický ESK paket nemohu zapisovat do `%s': %s zrušenozrušeno uživatelem zrušit|zrušitklíč formátu PGP 2.x nelze pověřit revokací nemohu se vyvarovat slabého klíče pro symetrickou šifru; operaci jsem zkusil %d krát! karta nepodporuje hashovací algoritmus %s karta je trvale uzamčena! čtečka karet není dostupná číslo karty: změní URL pro záskání klíčevypsat fingerprint certifikační autorityzměnit PIN kartyzmění jméno majitele kartyzmění pohlaví držitele kartyzměnit data na kartězměnit datum expirace pro klíč nebo vybrané podklíčezměnit jazykové předvolbyzměnit login namezměnit důvěryhodnost vlastníka klíčezměnit heslokontrolovat podpisykontrola vytvořeného podpisu se nepodařila: %s kontroluji databázi důvěry chyba kontrolního součtušifrovací algoritmus %d%s je neznámý nebo je zneplatněn sloupec scházísměstnat nepoužitelná ID uživatelů a odstranit z klíče všechny podpisysměstnat nepoužitelná ID uživatelů a odstranit z klíče nepoužitelné podpisypoložka completes-needed musí být větší než 0 konfliktní příkazy nelze zpracovat URL serveru klíčů při importu tajného klíče vytvořit veřejný klíčvytvoř výstup zakódovaný pomocí ASCIIvytvořen: %schybí časové razítko vytvoření data nebyla uložena; k jejich uložení použijte parametr příkazu "--output" dekódování z ASCII formátu selhalo: %s dešifrovat data (implicitně)dešifrování selhalo: %s dešifrování o.k. smazat vybrané podklíčesmazat vybrané ID uživatelesmazat podpisy z vybraných uživatelských IDsmazání bloku klíče se nezdařilo: %s hloubka: %d platných: %3d podepsaných: %3d důvěra: %d-, %dq, %dn, %dm, %df, %du adresář `%s' vytvořen nastavit klíč jako neplatný (disable)disabledzobrazovat ID fotografií během výpisu klíčůzobrazovat ID fotografií při ověřování podpisuběhem importu nesmazat důvěry k vlastníkůmnemazat dočasné soubory po jejich použitíneprovádět žádné změnypo importu neaktualizovat databázi důvěryvyzvednout důvěru podpisů s platnými daty PKAnastavit klíč jako platný (enable)kódování do ASCII formátu selhalo: %s šifrovat datazašifrováno s heslem %lu zašifrováno %s klíčem, ID %s zašifrována %u-bitovým %s klíčem, ID %s, vytvořeným %s zašifrováno jedním heslem zašifrováno neznámým algoritmem %d šifrování zpráv v módu --pgp2 vyžaduje algoritmus IDEA šifrování pouze se symetrickou šifrounepodařilo se alokovat dostatek paměti: %s chyba při změně velikosti klíče z %d na %u bitů: %s chyba při vytváření `%s': %s chyba při vytváření souboru klíčů (keyring)`%s': %s chyba při vytváření hesla: %s chyba při hledání záznamu důvěryhodnosti v `%s': %s chyba při získání informací o aktuálním klíči: %s chyba při získání nového PINu: %s chyba v `%s': %s chyba v patičce chyba při čtení `%s': %s chyba při čtení aplikačních dat chyba při čtení fingerpritnu DO chyba při čtení bloku klíče: %s chyba při čtení bloku tajného klíče "%s": %s chyba při získání CHV z karty chyba při zápisu `%s': %s chyba při zápisu klíče na kartu: %s chyba při zápisu souboru klíčů (keyring) `%s': %s chyba při zápisu do souboru veřejných klíčů `%s': %s chyba při zápisu do souboru tajných klíčů `%s': %s existující klíč bude přepsán platnost skončilaplatnost skončila: %splatnost skončí: %sexportovat atributy uživatelských ID (obecně ID fotografií)exportovat klíčeexportovat klíče na server klíčůexport revokačních klíčů označených jako "citlivé"export podpisů, které jsou označeny jako lokálníexportování tajného klíče není povoleno volání externího keyserver není v této verzi podporováno volání externích programů je zakázáno, protože file permissions nejsou nastaveny nebezpečně nemohu inicializovat databázi důvěry: %s selhalo obnovení vyrovnávací paměti klíčů: %s uložení datumu vytvoření se nezdařilo: %s uložení fingerprintu se nezdařilo: %s nelze uložit klíč: %s nelze odstranit ochranu podklíče: %s použití implicitního PINu jako %s selhalo: %s – vypínám jeho budoucí použití ženazíská klíč specifikovaný v URL kartychyba při zavírání souboruchyba při vytváření souboruchyba při mazání souborusoubor existujechyba při otvírání souboruchyba při čtení souboruchyba při přejmenování souboruchyba při zápisu souboruotisk na kartě se neshoduje s požadovaným označit vybrané uživatelské ID jako primárnívyžadovánovyžádaná symetrická šifra %s (%d) nevyhovuje předvolbám příjemce fstat `%s' selhal na %s: %s fstat(%d) selhal v %s: %s plnáobecná chybagenerovat zprávu komplatibilní s PGP 2.xvytvořit nový pár klíčůvytvořit revokační certifikátvytvořit nový pár klíčůhenerování klíče se nezdařilo generování nového klíče generuji _nevhodný_ 16-ti bitový kontrolní součet pro ochranu soukromého klíče gpg-agent není v tomto sezení dostupný gpg-agent protokol verze %d není podporován gpg/karta> respektovat PKA záznamy klíče při získávání klíčůrespektovat URL preferovaného keyserveru nastavené na klíčiiImMuUsSimportovat klíče ze serveru klíčůimportovat podpisy, které jsou označeny jen jako místníimportovat/sloučit klíčeimport tajných klíčů není povolen zahrnout do výsledku hledání odvolané klíčezahrnout podklíče, když se hledá podle ID klíčevstupní řádek %u je příliš dlouhý nebo na konci chybí znak LF vstupní řádek je delší než %d znaků neplatnýneplatný mód S2K; musí být 0, 1 nebo 3 neplatný argumentneplatný způsob reprezentace v ASCIIneplatná hlavička ASCII kódování: neplatné kódování ASCII: řádek je delší než %d znaků neplatný seznam auto-key-locate neplatná hlavička podpisu v čitelném formátu nesprávné označení řádku mínusy: neplatné defaultní předvolby neplatná implicitní úroveň certifikace (default-cert-level); musí být 0, 1, 2 nebo 3 neplatný parametr pro export neplatný fingerprintneplatný hashovací algoritmus `%s' neplatný parametr pro import neplatná položka `%s' v řetězci s předvolbami neplatný soubor klíčůneplatný parametr pro server klíčů neplatný protokol serveru klíčů (us %d!=handler %d) neplatný parametr pro výpis neplatná minimální úroveň certifikace (min-cert-level); musí být 0, 1, 2 nebo 3 neplatný paketnesprávné hesloneplatné uživatelské předvolby pro šifrování neplatné uživatelské předvolby pro komprimaci neplatné uživatelské předvolby pro hashování neplatný radix64 znak %02X byl přeskočen nalezen neplatný kořenový paket v proc_tree() neplatná struktura OpenPGP kraty (DO 0x93) neplatná hodnota neplatný parametr pro ověření velmi doporučujeme aktualiaci nastavení vašich preferencí a klíč "%s" nebyl na serveru klíčů nalezen klíč "%s" nenalezen: %s klíč %s: chybí identifikátor uživatele klíč %s označen jako absolutně důvěryhodný. klíč %s se v databázi důvěry vyskytuje více než jednou klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo je problém se systémovým časem) klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo je problém se systémovým časem) klíč %s: "%s" %d nových podpisů klíč %s: "%s" %d nových podklíčů klíč %s: "%s" %d nových identifikátorů uživatele klíč %s: "%s" %d podpisů odstraněno klíč %s: "%s" %d podpisů odstraněno klíč %s: "%s" %d ID uživatele odstraněno klíč %s: "%s" %d ID uživatele odstraněno klíč %s: "%s" 1 nový podpis klíč %s: "%s" 1 nový podklíč klíč %s: "%s" 1 nový identifikátor uživatele klíč %s: "%s" beze změn klíč %s: "%s" přidán revokační certifikát klíč %s: "%s" revokační certifikát importován klíč %s: %s klíč %s: PGP 2.x klíč - přeskočeno klíč %s: PKS poškození podklíče opraveno klíč %s: akceptován jako důvěryhodný klíč klíč %s: přijat id uživatele "%s",který není podepsán jím samým klíč %s: je již v souboru tajných klíčů klíč %s: nemohu najít originální blok klíče: %s klíč %s: nemohu číst originální blok klíče: %s klíč %s: podpis klíče jím samým (direct key signature) přidán klíč %s: neodpovídá naší kopii klíč %s: objeven duplikovaný identifikátor uživatele - sloučen klíč %s: neplatný podpis klíče jím samým (direct key signature) klíč %s: neplatný revokační certifikát: %s - zamítnuto klíč %s: neplatný revokační certifikát: %s - přeskočen klíč %s neplatný podpis klíče jím samým u uživatelského id "%s" klíč %s: neplatná vazba podklíče klíč %s: neplatný revokační podklíč klíč %s: klíč na kartě - přeskočeno klíč %s: nový klíč - přeskočen klíč %s: chybí veřejný klíč - nemohu aplikovat revokační certifikát klíč %s: nenalezen veřejný klíč k důvěryhodnému klíči - přeskočeno klíč %s: neexistuje podklíč pro vázání klíčů klíč %s: neexistuje podklíč pro revokaci klíče klíč %s: podklíč který je svázán s podpisem neexistuje klíč %s: neexistuje podklíč pro revokaci podklíče klíč %s: chybí identifikátor uživatele klíč %s: neexistuje id uživatele pro podpis klíč %s: chybí platný identifikátor uživatele klíč %s: podpis není exportovatelný (třída %02X) - přeskočeno klíč %s: není chráněný - přeskočeno klíč %s: veřejný klíč "%s" importován klíč %s: veřejný klíč nenalezen: %s klíč %s: smazána vícenásobná vazba podklíče klíč %s: smazána vícenásobná revokace podklíče klíč %s: revokační certifikát na špatném místě - přeskočeno klíč %s: tajný klíč importován klíč %s: nenalezen tajný klíč: %s klíč %s: tajný klíč s neplatnou šifrou %d - přeskočeno klíč %s: tajný klíč bez klíče veřejného - přeskočeno klíč %s: podklíč přeskočen klíč %s: přeskočen identifikátor uživatele "%s" klíč %s: podpis podklíče na špatném místě - přeskočeno klíč %s: neočekávaná podpisová třída (0x%02X) - přeskočeno klíč %s: nepodporovaný algoritmus veřejného klíče klíč %s: nepodporovaný algoritmus veřejného klíče u uživatelského id "%s" klíč již existuje export klíče se nepodařil: %s generování klíče dokončeno (%d sekund) klíč byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo je problém se systémovým časem) klíč byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo je problém se systémovým časem) klíč není označen jako nedostatečně bezpečný - nemohu jej použít s padělaným RNG! klíč nebyl na serveru klíčů nalezen operace s klíčem není možná: %s zdroj bloku klíče `%s': %s soubor klíčů (keyring) `%s' vytvořen chyba komunikace se serverem klíčů: %s server klíčů neposlal VERSION chyba serveru klíčůinterní chyba serveru klíčů získání dat z keyserveru se nezdařilo: %s refresh dat na keyserveru se nezdařil: %s hledání na keyserveru se nezdařilo: %s odeslání na keyserver se nezdařilo: %s časový limit pro server klíčů vypršel neplatná délka klíče; použiji %u bitů délka klíče zaokrouhlena na %u bitů řádek je příliš dlouhývypiš všechna dostupná datavypsat a zkontrolovat podpisy klíčůvypsat seznam klíčů a id uživatelůvypsat seznam klíčůvypsat seznam klíčů a fingerprintůvypsat seznam klíčů a podpisůvypsat seznam předvoleb (pro experty)vypsat seznam předvoleb (podrobně)vypsat seznam tajných klíčůvytvořit podpis oddělený od dokumentupouze varování při konfliktu časového razítkavytvoření podepisovacího paketu (make_keysig_packet) selhalo: %s mužšpatný formát CRC špatný formát proměnné prostředí GPG_AGENT_INFO špatný formát id uživatelečástečnápoložka marginals-needed musí být větší než 1 položka max-cert-depth musí být v rozmezí od 1 do 255 nabídka pro změnu anebo odblokování PINupřesunout záložní klíč na kartupřesunout klíč na kartupřesunuji podpis klíče na správné místo nNvnořené podpisy v čitelném formátu chyba sítěžádnánikdy vytvořen nový konfigurační soubor `%s' další kontrola databáze důvěry v %s neno = podpis nalezen v definici skupiny `%s' žádná kartaneexistuje odpovídající veřejný klíč: %s žádná datanení nastaven implicitní soubor tajných klíčů %s nebyl detekován žádný modul pro získání entropie protokol serveru klíčů `%s' není podporován žádná operace se serverem klíčů! žadný server klíčů není znám (použíjte volbu --keyserver) není nutné kontrolovat databázi důvěry není nutné kontrolovat databázi důvěry s modelem `%s' není nutné aktualizovat databázi důvěry s modelem `%s' spuštění externího programu není podporováno pro "%s" nebyl nalezen žádný revokační klíč neexistuje tajný klíč neexistuje tajný podklíč pro veřejný klíč %s - ignorováno nenalezen žádný podpis chybí podepsaná data neexistuje uživatel s tímto idžádný absolutně důvěryhodný klíč nebyl nalezen nenalezena žádná platná data ve formátu OpenPGP. žádné platné adresy nenalezen zapisovatelný soubor klíčů (keyring): %s nenalezen zapisovatelný soubor veřejných klíčů (pubring): %s nenalezen zapisovatelný soubor tajných klíčů (secring): %s toto není podpis oddělený od dokumentu toto není OpenPGP kartanezašifrovánonení vyžadovánonezpracovánonepodporovánopoznámka: soubor random_seed je prázdný poznámka: soubor random_seed není aktualizován oOo.k., my jsme anonymní adresát. okey|okeystaré kódování DEK není podporováno podpis starého typu (PGP 2.x) přijímat aktualizace pouze u existujících klíčůprovést operaci není možné bez inicializované bezpečné paměti soubor s možnostmi `%s': %s původní jméno souboru='%.*s' informace o důvěryhodnosti vlastníka klíče vymazány schází hodnota důvěryhosdnosti vlastníkaheslo (passphraze) generováno s použitím neznámého algoritmu %d heslo není zopakováno správně; zkuste to znovuprosím proveďte --check-trustdb prosím, vložte e-mailovou adresu (nepovinné, ale velmi doporučované)Více informací naleznete na %s Více informací naleznete na adrese http://www.gnupg.org/documentation/faq.html použijte místo něj "%s%s" prosím počkejte než bude klíč vygenerován ... duplicita předvolby `%s' předčasný konec souboru (žádné CRC) předčasný konec souboru (v patičce) předčasný konec souboru (žádné CRC) vytisknout stav kartyproblém se zašifrovaným paketem problém s agentem - používání agenta vypnuto vyžádat potvrzení před přepsánímochranný algoritmus %d%s není podporován ochranný algoritmus %d není podporován veřejný a tajný klíč byly vytvořeny a podepsány. veřejný klíč %s je o %lu sekund novější než podpis veřejný klíč %s je o %lu sekund novější než podpis veřejný klíč %s nebyl nalezen: %s dešifrování veřejným klíčem selhalo: %s veřejný klíč neodpovídá tajnému klíči! data zašifrována veřejným klíčem: správný DEK veřejný klíč je %s veřejný klíč nenalezenveřejný klíč k absolutně důvěryhodnému klíči %s nebyl nalezen uUqQukončitukončit toto menuneplatný znak (quoted-printable) v ASCII kódování - pravděpodobně byl použit špatný MTA distribuci tohoto klíče aby jste předešel problémům s neshodou algoritmů chyba při čtení v `%s': %s čtu z `%s' čtu možnosti z `%s' čtení veřejného klíče se nezdařilo: %s čtu standardní vstup ... důvod pro revokaci: aktualizuji %d klíčů z %s aktualizuji 1 klíč z %s odmítnut filtrem pro importpo importu odstranit z klíče vše, co lzeodstranit při exportu z klíče vše, co lzeodstranit klíč ze souboru veřejných klíčůodstranit klíč ze souboru tajných klíčůodstranit passphrase z exportovaných podklíčůpo importu odstranit nepoužitelné části z klíčeodstranit při exportu nepoužitelné části z klíčepřejmenování `%s' na `%s' se nezdařilo: %s opravit poškození vzniklá při importu z PKS serverupožaduji klíč %s z %s požaduji klíč %s ze %s server %s omezení zdrojůodpověď neobsahuje RSA modulus odpověď neobsahuje veřejný RSA exponent odpověď neobsahuje veřejný klíč revokační poznámka: revokovat klíč nebo vybrané podklíčerevokovat vybrané uživatelské IDrevokovat podpisu na vybraných uživatelských IDrevokovánrevokováno vaším klíčem %s v %s revokován: %szaokrouhleno na %u bitů uložit a ukončitvyhledat klíče na serveru klíčůvyhledávám "%s" na serveru %s vyhledávám "%s" na %s serveru %s vyhledávám jména z %s vyhledávám jména z %s na serveru %s tajný klíč "%s" nenalezen: %s tajný klíč %s: %s tajný klíč je na kartě uložen tajný klíč není dostupnýtajné části klíče nejsou dostupné tajné části klče nejsou dostupné vyberte podklíč Nvyberte identifikátor uživatele Nvybraný hashovací algoritmus je neplatný vybraný šifrovací algoritmus je neplatný vybraný komprimovací algoritmus je neplatný vybraný hashovací algoritmus je neplatný výběr openpgp se nezdařil: %s posílám klíč %s na %s posílám klíč %s na %s server %s nastavit sadu preferencí pro vybrané uživatelské IDnastavit sadu preferencí pro vybrané uživatelské IDnastavit URL preferovaného serveru klíčů pro vybrané uživatelské IDukazovat poznámky IETF standardu během vypisování podpisůukazovat poznámky IETF standardu při ověřování podpisuzobraz administrátorské příkazyukazovat všechny údaje během výpisu klíčůukazovat všechnz údaje při ověřování podpisůukazovat datum expirace při výpisu podpisůvypsat fingerprint klíčeukazovat pouze primární užvatelské ID při ověřování podpisůukazovat URL politik během výpisu podpisůukazovat URL politik při ověřování podpisuukazovat URL preferovaných keyserverů během výpisu podpisůukazovat URL preferovaných keyserverů při ověřování podpisůukazovat odvolané a prošlé podklíče při výpisu klíčůukazovat odvolané a prošlé ID uživatelů při výpisu klíčůukazovat odvolané a prošlé ID uživatelů při ověřování podpisůukázat vybrané fotografické IDukazovat jméno keyringu při výpisu klíčůukázat tuto pomocukazovat platnost ID uživatelů při výpisu klíčůukazovat uživatelem vložené údaje během výpisu podpisůukazovat uživatelské poznámky při ověřování podpisupodepsat klíčpodepsat klíč lokálněpodepsat nebo modifikovat klíčpodepsat vybrané ID uživatele [* níže jsou uvedeny relevantní příkazy]podepsat vybrané uživatelské ID lokálněpodepsat vybrané uživatelské ID nerevokovatelným podpisempodepsat vybrané uživatelské ID důvěryhodným podpisemverifikace podpisu potlačena dosud vytvořené podpisy: %lu podepsáno vaším klíčem %s v %s%s%s podepsání selhalo: %s podepisovací podklíč %s již je křížově certifikován podepisuji:přeskočen "%s": %s přeskočen "%s": duplikován přeskočeno: veřejný klíč je již nastaven přeskočeno: veřejný klíč je už nastaven podle implicitního adresáta přeskočeno: tajný klíč je už v databázi blok typu %d byl přeskočen přeskočen v3 podpis klíče jím samým u uživatelského id "%s" samostatný revokační certifikát - použijte "gpg --import", chcete-li jej užít samostatný podpis třídy 0x%02x uložení klíče na kartu se nezdařilo: %s podklíč %s nepodepisuje, a tak není třeba jej křížově certifikovat podpaket typu %d má nastavený kritický bit symetrické šifrování `%s' se nepovedlo: %s systémová chyba při volání externího programu: %s ber klíče z této klíčenky (keyringu)textový formátzadané URL pro certifikační politiku je neplatné zadané URL preferovaného serveru klíčů je neplaté zadané URL pro podepisovací politiku je neplatné podpis nebylo možné ověřit. Prosím, nezapomeňte, že soubor s podpisem (.sig nebo .asc) by měl být prvním souborem zadaným na příkazové řádce. existuje tajný klíč pro tento veřejný klíč "%s"! toto je PGP klíč vygenerovaný podle algoritmu ElGamal, podpisy vytvořené tímto klíčem nejsou bezpečné!tento klíč již bykl pověřen revokací může to být způsobeno chybějícím podpisem klíče jím samým tato zpráva nemusí být s %s použitelná na této platformě jsou při volání externích programů vyžadovány dočasné soubory (temp files) konflikt časového razítkapřepnout mezi vypisem seznamu tajných a veřejných klíčůzapnout/vypnout požadování PINu při každé self-sign operacipříliš mnoho předvoleb pro šifrování příliš mnoho předvoleb pro komprimaci příliš mnoho předvoleb pro vzorkování příliš mnoho položek v bufferu veřejných klíčů - vypnuto chyba v databázi důvěryzáznam důvěry %lu není požadovaného typu %d záznam důvěry %lu, typ pož. %d: čtení selhalo: %s záznam důvěry %lu, typ %d: zápis selhal: %s důvěra: %száznam v databázi důvěry %lu: lseek() se nepodařil: %s záznam v databázi důvěry %lu: zápis se nepodařil (n=%d): %s transakce s databází důvěry je příliš dlouhá databáze důvěry: procedura lseek() selhala: %s databáze důvěry: procedura read() (n=%d) selhala: %s databáze důvěry: synchronizace selhala %s úroveň důvěry opravena na PLNOU, kvůli platné PKA informaci úroveň důvěry opravena na ŽÁDNOU, kvůli špatné PKA informaci absolutnínelze zobrazit photo ID! nelze spustit externí program nelze spustit program `%s': %s nelze spustit shell `%s': %s nelze otevřít JPEG soubor `%s': %s nelze přečíst odpověď externího programu: %s nelze nastavit exec-path na %s nelze aktualizovat záznam v databázi důvěry: chyba při zápisu: %s algoritmus IDEA nelze použít pro všechny klíče, pro které šifrujete. nelze použít neznámý model důvěry (%d) - předpokládáme použití modelu %s odblokovat PIN pomocí resetačního kódunezakomprimováno|nicnedefinovánaneočekávaný ASCII armor: neočekávaná datašifrovací algoritmus není implementovánalgoritmus veřejného klíče není implementovánneznámý formátneznámá ASCII hlavička: neznámý šifrovací algoritmusneznámý komprimační algoritmusneznámá konfigurační položka "%s" neznámý implicitní adresát "%s" neznámý hashovací algoritmusneznámý algoritmus pro ochranu klíče neznámá volba `%s' neznámý typ paketuneznámý kompresní algoritmus neznámý algoritmus veřejného klíčeneznámá třída podpisuneznámá verzeneočekávaný konec externího programu neuvedenototo URI není podporovánonepoužitelný algoritmus s veřejným klíčemnepoužitelný veřejný klíčnepoužitelný tajný klíčaktualizovat všechny klíče ze serveru klíčůaktualizace selhala: %s aktualizace tajného klíče selhala: %s aktualizovat databázi důvěrypoužití: %sužití: gpg [možnosti]použít jako výstupní souborpoužít kanonický textový módabyste ho smazal(a), použijte nejprve parametr "--delete-secret-key". použít chování striktně podle OpenPGPpoužívat dočasné soubory na přenos dat k modulům pro servery klíčůpoužít tento id uživatele pro podepsání nebo dešifrováníUživatelské ID "%s" je již revokováno. id uživatele:"%s" pouižití modelu důvěry %s použití šifry: %s používám implicitní PIN jako %s používám podklíč %s místo primárního klíče %s ověřovat podpisy s daty PKAplatnost: %ss dodatečnými informacemiověření administrátorského PIN je nyní prostřednictvím tohoto příkazu zakázáno verifikace CHV%d se nezdařila: %s verifikovat podpisověř PIN a vypiš všechna datačekám na zámek pro `%s'... slabý klíčvytvořen slabý klíč - zkouším znovu podivná velikost šifrovacího klíče pro sezení (%d) nelze spustit s nebezpečnou pamětí vzhledem k %s zapisuji podpis klíče jím samým (direct signature) zapisuji "key-binding" podpis zápisování nového klíče zapisuji veřejný klíč do `%s' zapisuji tajný klíč do `%s' zapisuji tajný klíč do `%s' zapisuji podpis klíče sebou samým zapisuji do '%s' zapisuji do standardního výstupu je použit špatný tajný klíčaAyYanov módu --pgp2 můžete vytvářet jen čitelné podpisy s klíči formátu PGP-2.x v módu --pgp2 můžete vytvořit pouze oddělený podpis (detach-sign)s klíči formátu PGP-2.x v módu --pgp2 můžete šifrovat pouze RSA klíčem o délce 2048 bitů a méně v módu --pgp2 můžete vytvářet pouze oddělené podpisy nebo podpisy čitelné jako text nelze aktualizovat preference s: gpg --edit-key %s updpref save v módu --pgp2 nelze současně šifrovat a podepisovat klíč nelze pověřit revokací jím samým nelze použít --symmetric --encrypt v módu %s nelze použít --symmetric --encrypt s příkazem --s2k-mode 0 nelze použít --symmetric --sign --encrypt v módu %s nelze použít --symmetric --sign --encrypt s příkazem --s2k-mode 0 nalezena chyba v programu ... (%s:%d) použití %s není v módu %s dovoleno použití šifrovacího algoritmu `%s' v módu %s dovoleno použití komprimačního algoritmu `%s' v módu %s dovoleno použití hashovacího algoritmu `%s' v módu %s dovoleno v módu --pgp2 musíte použít soubor (ne rouru). |AN|Nový PIN administrátora|A|Prosím vložte administrátorský PIN|A|Prosím vložte administrátorský PIN%%0A[zbývá pokusů: %d]|FD|zapsat informace o stavu do tohoto FD|JMÉNO|šifrovat pro JMÉNO|N|Nový PIN|N|nastavit úrověň komprimace N (0 - žádná komprimace)|RN|Nový kód pro resetování|[soubor]|vytvořit podpis v čitelném dokumentu|[soubor]|vytvořit podpis|algo [soubory] vypiš hash||Prosím vložte PIN||Prosím vložte PIN%%0A[podpis hotov: %lu]||Prosím vločte kód pro resetování kartygnupg-1.4.20/po/LINGUAS0000644000175000017500000000016412635262326011312 00000000000000en@quot en@boldquot be ca cs da de eo el es et fi fr gl hu id it ja nb nl pl pt_BR pt ro ru sk sv tr uk zh_TW zh_CN gnupg-1.4.20/po/uk.po0000644000175000017500000071600212635457220011250 00000000000000# Ukrainian translation for gnupg # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the GnuPG package. # # Yuri Chornoivan , 2011, 2014. msgid "" msgstr "" "Project-Id-Version: gnupg\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2014-11-15 18:41+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Lokalize 1.5\n" "Plural-Forms: nplurals=1; plural=0;\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "не вдалося визначити просте число з pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "неможливо створити просте число, що складається з менше за %d бітів\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "не виявлено модуля збирання ентропії\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "не вдалося заблокувати «%s»: %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "очікуємо на блокування «%s»…\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "не вдалося відкрити «%s»: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "не вдалося обробити «%s»: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "«%s» не є звичайним файлом — проігноровано\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "зауваження: файл random_seed є порожнім\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "УВАГА: некоректний розмір файла random_seed — не використано\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "не вдалося прочитати «%s»: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "зауваження: файл random_seed не оновлено\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "не вдалося створити «%s»: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "не вдалося записати «%s»: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "не вдалося закрити «%s»: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "УВАГА: використовуємо незахищений засіб генерації псевдовипадкових чисел!\n" #: cipher/random.c:894 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" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Зачекайте, накопичуємо ентропію. Виконуйте якісь дії, щоб не\n" "сумувати, оскільки виконання таких дій покращить випадковість\n" "накопичених даних.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Отримано недостатньо псевдовипадкових байтів. Виконуйте якісь\n" "дії, щоб надати ОС змогу покращити дані. (Потрібно ще %d байтів)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "не вдалося зберегти відбиток: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "не вдалося зберегти дату створення: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "помилка читання відкритого ключа: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "відповідь не містить даних відкритого ключа\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "відповідь не містить основи числення RSA\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "відповідь не містить відкритого показника RSA\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "використовуємо типовий пінкод як %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "не вдалося використати типовий пінкод як %s: %s — вимикаємо подальше типове " "використання\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Будь ласка, вкажіть пінкод%%0A[підписів: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Вкажіть пінкод" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "Зворотний виклик пінкоду повернув повідомлення про помилку: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "Пінкод для CHV%d занадто короткий; мінімальна довжина — %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "помилка перевірки CHV%d: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "помилка отримання стану CHV з картки\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "картку заблоковано!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "залишилося %d спроб визначення адміністративного пінкоду перед тим, як " "картку буде остаточно заблоковано\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" "|A|Будь ласка, вкажіть адміністративний пінкод%%0A[залишилося спроб: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Вкажіть адміністративний пінкод" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "доступ до адміністративних команд не налаштовано\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Немає коду скидання або код скидання вже недоступний\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Вкажіть код скидання коду картки" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Занадто короткий код скидання; мінімальна довжина — %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Новий код скидання" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Новий адміністративний пінкод" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Новий пінкод" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "помилка під час отримання нового пінкоду: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "помилка читання даних програми\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "помилка читання відбитка DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "ключ вже існує\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "вже створений ключ буде замінено\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "створення нового ключа\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "записування нового ключа\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "не вказано часової позначки створення\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "Не знайдено модуля RSA або модуль не належить до %d-бітових\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" "Не вистачає відкритого показника RSA або розмірність показника перевищує %d " "бітів\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" "Не знайдено простого числа RSA %s або число не належить до %d-бітових\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "не вдалося зберегти ключ: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "зачекайте на завершення створення ключа...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "помилка під час створення ключа\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "створення ключа завершено (за %d секунд)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "некоректна структура картки OpenPGP (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "відбиток на картці не відповідає запитаному\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "карткою не підтримується алгоритм контрольних сум %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "вже створено підписів: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "перевірку адміністративного пінкоду заборонено цією командою\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "не вдалося отримати доступ до %s — некоректна картка OpenPGP?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "формат ASCII: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "некоректний заголовок ASCII: " #: g10/armor.c:459 msgid "armor header: " msgstr "заголовок ASCII: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "некоректний заголовок прозорого підпису\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "некоректний заголовок ASCII: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "вкладені підписи нешифрованим текстом\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "неочікуваний формат ASCII: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "некоректний екранований дефісами рядок: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "пропущено некоректний символ radix64 %02X\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "завчасний кінець файла (немає CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "завчасний кінець файла (у CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "помилкове форматування CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "помилка CRC; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "завчасний кінець файла (у додатку)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "помилка у рядку доповнення\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "не виявлено коректних даних OpenPGP.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "некоректний формат ASCII: рядок є довшим за %d символів\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "символи quoted printable у кодуванні ASCII — ймовірно, використано " "помилковий MTA\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "Не вдалося отримати доступ до картки OpenPGP: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "Виявлено картку OpenPGP з номером %s\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "це не можна робити у пакетному режимі\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Цією командою можна користуватися лише для карток версії 2\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Ваш вибір? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[не встановлено]" #: g10/card-util.c:512 msgid "male" msgstr "чоловіча" #: g10/card-util.c:513 msgid "female" msgstr "жіноча" #: g10/card-util.c:513 msgid "unspecified" msgstr "не вказано" #: g10/card-util.c:540 msgid "not forced" msgstr "не увімкнено" #: g10/card-util.c:540 msgid "forced" msgstr "увімкнено" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" "Помилка: у поточній версії можна використовувати лише звичайний ASCII.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Помилка: символ «<» не можна використовувати.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Помилка: не можна використовувати подвійні пробіли.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Прізвище власника картки: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Ім’я власника картки: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Помилка: складена назва є занадто довгою (максимум — %d символів).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "Адреса для отримання відкритого ключа: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Помилка: адреса є занадто довгою (максимум — %d символів).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "помилка під час спроби розподілу пам’яті: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "помилка під час спроби читання «%s»: %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "помилка під час спроби читання «%s»: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Дані користувача (назва запису): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" "Помилка: дані користувача є занадто довгими (максимум — %d символів).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Особисті дані DO: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" "Помилка: особисті дані D0 є занадто довгими (максимум — %d символів).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Основна мова: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Помилка: некоректна довжина рядка основної мови.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Помилка: некоректні символи у рядку основної мови.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Стать (чоловіча (M), жіноча (F) або пробіл): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Помилка: некоректна відповідь.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "Відбиток CA: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Помилка: некоректне форматування відбитка.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "дія над ключем неможлива: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "не є карткою OpenPGP" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "помилка під час отримання даних поточного ключа: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Замінити вже створений ключ? (y/N або т/Н) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "ЗАУВАЖЕННЯ: не можна гарантувати підтримку карткою бажаного\n" " розміру. Якщо ключ не вдасться створити, будь ласка,\n" " ознайомтеся з документацією до вашої картки, щоб\n" " визначити дозволені розміри.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Якому розміру ключа підписування ви надаєте перевагу? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Яким має бути розмір ключа для шифрування? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Якому розміру ключа для розпізнавання ви надаєте перевагу? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "округлено до %u бітів\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "Розміри ключів %s мають перебувати у діапазоні %u—%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" "Зараз налаштування картки буде змінено для створення %u-бітового ключа\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "помилка під час спроби зміни розміру ключа з %d на %u: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Створити резервну копію ключа шифрування поза карткою? (Y/n або Т/н) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "ЗАУВАЖЕННЯ: ключі вже збережено на картці!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Замірити вже створені ключі? (y/N або т/Н) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Зауважте, що типовими параметрами пінкоду є\n" " PIN = «%s» Адміністративний PIN = «%s»\n" "Вам слід змінити параметри за допомогою команди --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Виберіть тип ключа, який слід створити:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Ключ підписування\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Ключ шифрування\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Ключ розпізнавання\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Некоректний вибір.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Виберіть сховище для зберігання ключа:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "невідомий алгоритм захисту ключа\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "закриті частини ключа недоступні\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "закритий ключ вже збережено на картці\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "помилка під час спроби запису ключа на картку: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "вийти з цього меню" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "показати керівні команди" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "показати цю довідкову інформацію" #: g10/card-util.c:1687 msgid "list all available data" msgstr "показати всі доступні дані" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "змінити ім’я власника картки" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "змінити адресу для отримання ключа" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "отримати ключ, вказаний у полі адреси картки" #: g10/card-util.c:1693 msgid "change the login name" msgstr "змінити ім’я користувача" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "змінити основну мову" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "змінити поле статі власника картки" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "змінити відбиток CA" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "увімкнути або вимкнути позначку примусового пінкоду підпису" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "створити ключі" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "меню зміни або розблокування пінкоду" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "перевірити пінкод і показати список всіх даних" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "розблокувати під коду за допомогою коду скидання" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/картка> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Команда адміністратора\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Команди адміністрування дозволено\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Команди адміністрування заборонено\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Некоректна команда (скористайтеся командою «help»)\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "засіб читання карток недоступний\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Вставте картку і натисніть Enter або «c», щоб скасувати: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "помилка вибору openpgp: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Будь ласка, вийміть поточну картку і вставте картку з серійним номером:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Натисніть Enter, коли будете готові, або введіть «c», щоб скасувати: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Вкажіть новий адміністративний пінкод: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Вкажіть новий пінкод: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Вкажіть адміністративний пінкод: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Вкажіть пінкод: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Повторіть введення цього пінкоду: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "Помилка під час повторного введення пінкоду, повторіть спробу" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "не вдалося відкрити «%s»\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output не працює з цією командою\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "ключ «%s» не знайдено: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "помилка під час спроби читання блокування ключа: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(якщо ключ не задано відбитком)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "цього не можна робити у пакетному режимі без «--yes»\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Вилучити цей ключ зі сховища? (y/N або т/Н) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Цей ключ є закритим! Вилучити його? (y/N або т/Н) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "не вдалося вилучити блокування ключа: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "дані щодо довіри до власника вилучено\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "маємо закритий ключ для відкритого ключа «%s»!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" "спершу скористайтеся параметром «--delete-secret-keys» для його вилучення.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "помилка під час спроби створення пароля: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "не можна використовувати симетричний пакет ESK через режим S2K\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "використано шифр %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "«%s» вже стиснено\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "УВАГА: файл «%s» є порожнім\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "шифрувати ключами RSA з розміром у 2048 бітів або менше лише у режимі --" "pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "читання з «%s»\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "не можна використовувати шифр IDEA для всіх ключів, якими виконується " "шифрування.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "УВАГА: примусове використання симетричного шифру %s (%d) не відповідає " "параметрам отримувача\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "УВАГА: примусове використання алгоритму стиснення %s (%d) не відповідає " "параметрам отримувача\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "примусове використання симетричного шифру %s (%d) не відповідає параметрам " "отримувача\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "не можна використовувати %s у режимі %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s зашифровано для «%s»\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "Дані, зашифровані за алгоритмом %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "зашифровано за допомогою невідомого алгоритму %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "УВАГА: повідомлення зашифровано слабким ключем з симетричним шифруванням.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "проблема з обробкою зашифрованого пакета\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "виконання віддалених програм не передбачено\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "не вдалося створити каталог «%s»: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "виклик зовнішніх програм вимкнено через невідповідність прав доступу до " "файла параметрами безпеки\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "на цій платформі слід використовувати тимчасові файли під час виклику " "зовнішніх програм\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "не вдалося виконати програму «%s»: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "не вдалося виконати оболонку «%s»: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "системна помилка під час спроби виклику зовнішньої програми: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "неприродний вихід з зовнішньої програми\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "не вдалося виконати зовнішню програму\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "не вдалося прочитати відповідь зовнішньої програми: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "УВАГА: не вдалося вилучити тимчасовий файл (%s) «%s»: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "УВАГА: не вдалося вилучити тимчасовий каталог «%s»: %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "" "експортувати підписи, які позначено як придатні лише для локального " "використання" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" "експортувати ідентифікатори користувача атрибута (типово фотоідентифікатори)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "експортувати ключі відкликання, позначені як «важливі»" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "вилучити пароль з експортованих підключів" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "вилучити невикористовувані частини ключа під час експортування" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "вилучити максимум частин з ключа під час експортування" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "експортування закритих ключів заборонено\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "ключ %s: не захищено — пропущено\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "ключ %s: ключ у стилі PGP 2.x — пропущено\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "ключ %s: матеріал ключа на карті — пропущено\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "спроба експортування незахищеного підключа\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "не вдалося зняти захист з підключа: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "УВАГА: закритий ключ %s не має простої контрольної суми ЗК\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "УВАГА: нічого не експортовано\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Команди:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[file]|створити підпис" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[file]|створити текстовий підпис" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "створити від’єднаний підпис" #: g10/gpg.c:393 msgid "encrypt data" msgstr "зашифрувати дані" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "шифрувати лише за допомогою симетричного шифру" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "розшифрувати дані (типова дія)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "перевірити підпис" #: g10/gpg.c:401 msgid "list keys" msgstr "показати список ключів" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "показати список ключів і підписів" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "показати список і перевірити підписи ключів" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "показати список ключів і відбитків" #: g10/gpg.c:406 msgid "list secret keys" msgstr "показати список закритих ключів" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "створити пару ключів" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "вилучити ключі з відкритого сховища ключів" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "вилучити ключів з закритого сховища ключів" #: g10/gpg.c:411 msgid "sign a key" msgstr "підписати ключ" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "підписати ключ локально" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "підписати або редагувати ключ" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "створити сертифікат відкликання" #: g10/gpg.c:416 msgid "export keys" msgstr "експортувати ключі" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "експортувати ключі на сервер ключів" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "імпортувати ключі з сервера ключів" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "шукати ключі на сервері ключів" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "оновити всі ключів з сервера ключів" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "імпортувати/об’єднати ключі" #: g10/gpg.c:429 msgid "print the card status" msgstr "показати дані про стан картки" #: g10/gpg.c:430 msgid "change data on a card" msgstr "змінити дані на картці" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "змінити пінкод картки" #: g10/gpg.c:440 msgid "update the trust database" msgstr "оновити базу даних довіри" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [files]|вивести контрольні суми повідомлень" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Параметри:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "створити дані у форматі ASCII" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAME|зашифрувати для вказаного імені" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "" "використовувати для створення підписів або розшифрування вказаний " "ідентифікатор" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|встановити рівень стискання (0 — вимкнути стискання)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "використовувати канонічний текстовий режим" #: g10/gpg.c:486 msgid "use as output file" msgstr "використати файл для виведення даних" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "докладність" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "не вносити змін" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "запитувати перед перезаписом" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "строго використовувати стандарт OpenPGP" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "створити сумісні з PGP 2.x повідомлення" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Щоб ознайомитися зі списком команд і параметрів, скористайтеся сторінкою " "довідника (man))\n" #: g10/gpg.c:576 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 [файл] підписати і зашифрувати дані для користувача " "Bob\n" " --clearsign [файл] створити текстовий підпис\n" " --detach-sign [файл] створити від’єднаний підпис\n" " --list-keys [назви] показати ключі\n" " --fingerprint [назви] показати відбитки\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Будь ласка, надсилайте повідомлення про помилки на адресу .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Використання: gpg [параметри] [файли] (-h — довідка)" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Підтримувані алгоритми:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Відкритий ключ: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Шифр: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Хеш: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Стиснення: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "використання: gpg [параметри] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "несумісні команди\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "у визначенні групи «%s» немає знаку «=»\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "УВАГА: визначення власника домашнього каталогу «%s» не є безпечним\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "УВАГА: визначення власника у файлі налаштувань «%s» не є безпечним\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "" "УВАГА: визначення прав доступу до домашнього каталогу «%s» не є безпечним\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "" "УВАГА: визначення прав доступу до файла налаштувань «%s» не є безпечним\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "УВАГА: визначення власника підлеглого каталогу домашнього каталогу «%s» не є " "безпечним\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "УВАГА: визначення власника у підлеглому каталозі, визначеному файлом " "налаштувань «%s», не є безпечним\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "УВАГА: визначення прав доступу до підлеглого каталогу домашнього каталогу " "«%s» не є безпечним\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "УВАГА: визначення прав доступу до підлеглого каталогу, визначеного файлом " "налаштувань «%s», не є безпечним\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "невідомий пункт налаштувань «%s»\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "показувати фотоідентифікатори у списках ключів" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "показувати адреси правил у списках підписів" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "показувати всі примітки у списках підписів" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "показувати стандартні примітки IETF у списках підписів" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "показувати примітки користувача у списках підписів" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "показувати адреси основних серверів ключів у списках підписів" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "показувати чинність ідентифікаторів користувачів у списках ключів" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" "показувати відкликані та застарілі ідентифікатори користувачів у списках " "ключів" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "показувати відкликані та застарілі підключі у списках ключів" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "показувати назву сховища ключів у списках ключів" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "показувати дати завершення строків дії у списку підписів" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "ЗАУВАЖЕННЯ: застарілий файл типових параметрів «%s» проігноровано\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "ЗАУВАЖЕННЯ: не виявлено файла типових параметрів «%s»\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "файл параметрів «%s»: %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "прочитати параметри з «%s»\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "ЗАУВАЖЕННЯ: %s не призначено для звичайного використання!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "«%s» не є коректним записом завершення строку дії підпису\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "«%s» не є коректним набором символів\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "не вдалося обробити адресу сервера ключів\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: некоректні параметри сервера ключів\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "некоректні параметри сервера ключів\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: некоректні параметри імпортування\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "некоректні параметри імпортування\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: некоректні параметри експортування\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "некоректні параметри експортування\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: некоректні параметри побудови списку\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "некоректні параметри побудови списку\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "показувати фотоідентифікатори під час перевірки підписів" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "показувати адреси правил під час перевірки підписів" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "показувати всі примітки під час перевірки підписів" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "показувати стандартні примітки IETF під час перевірки підписів" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "показувати вказані користувачем примітки під час перевірки підписів" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "" "показувати адреси основних серверів ключів у списках перевірки підписів" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "" "показувати чинність ідентифікаторів користувача під час перевірки підписів" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" "показувати відкликані та застарілі ідентифікатори користувачів у списках " "перевірки підписів" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "" "показувати лише основний ідентифікатор користувача під час перевірки підписів" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "перевірити підписи за допомогою даних PKA" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "підняти рівень довіри до підписів з коректними даними PKA" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: некоректні параметри перевірки\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "некоректні параметри перевірки\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "не вдалося встановити шлях для запуску у значення %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: некоректний список auto-key-locate\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "некоректний список auto-key-locate\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "УВАГА: можливе створення дампу пам’яті програми!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "УВАГА: %s перевизначає %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s не можна використовувати разом з %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s є зайвим, якщо використано %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "ЗАУВАЖЕННЯ: %s недоступні у цій версії\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "не буде запущено з помилками у захисті пам’яті через %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "від’єднані та текстові підписи можна створювати лише у режимі --pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "у режимі --pgp2 не можна одночасно підписувати і зашифровувати дані\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "вам слід використовувати файли (не канали даних) під час роботи з увімкненим " "--pgp2.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" "шифрування повідомлень у режимі --pgp2 потребує використання шифру IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "вибраний алгоритм шифрування є некоректним\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "вибраний алгоритм побудови контрольних сум є некоректним\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "вибраний алгоритм стискання є некоректним\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "" "вибраний алгоритм створення контрольних сум для сертифікації є некоректним\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "значення completes-needed має бути більшим за 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "значення marginals-needed має перевищувати 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "значення max-cert-depth має перебувати у діапазоні від 1 до 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "некоректне значення default-cert-level; має бути 0, 1, 2 або 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "некоректне значення min-cert-level; має бути 1, 2 або 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "" "ЗАУВАЖЕННЯ: наполегливо не рекомендуємо вам користуватися простим режимом " "S2K (0)\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "некоректний режим S2K; мало бути вказано 0, 1 або 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "некоректні типові параметри\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "некоректні особисті параметри шифрування\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "некоректні особисті параметри контрольної суми\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "некоректні особисті параметри стискання\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s ще не може працювати разом з %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "не можна використовувати алгоритм шифрування «%s» у режимі %s\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "" "не можна використовувати алгоритм створення контрольних сум «%s» у режимі " "%s\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "не можна використовувати алгоритм стискання «%s» у режимі %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "не вдалося ініціалізувати базу даних надійності (TrustDB): %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "УВАГА: отримувачів (-r) вказано без використання шифрування відкритим " "ключем\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [назва файла]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [назва файла]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "помилка під час спроби симетричного шифрування «%s»: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [назва файла]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [назва файла]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" "не можна використовувати комбінацію --symmetric --encrypt у режимі --s2k-" "mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "" "не можна використовувати комбінацію --symmetric --encrypt у режимі %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [назва файла]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [назва файла]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [назва файла]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" "не можна використовувати комбінацію --symmetric --sign --encrypt у режимі --" "s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "" "не можна використовувати комбінацію --symmetric --sign --encrypt у режимі " "%s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [назва файла]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [назва файла]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [назва файла]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key user-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key user-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key user-id [команди]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [ідентифікатор користувача] [сховище ключів]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "помилка під час надсилання даних на сервер ключів: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "помилка під час спроби отримання даних з сервера ключів: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "помилка під час спроби експортування ключа: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "помилка пошуку на сервері ключів: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "помилка оновлення з сервера ключів: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "помилка перетворення з формату ASCII: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "помилка перетворення у формат ASCII: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "некоректний алгоритм хешування «%s»\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[назва файла]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Почніть вводити ваше повідомлення...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "вказана адреса правил сертифікації є некоректною\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "вказана адреса правил підписування є некоректною\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "вказана адреса основного сервера ключів є некоректною\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "занадто багато записів у кеші pk — вимкнено\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[Ідентифікатор не знайдено]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "ключ %s: закритий ключ без відкритого ключа — пропущено\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "автоматично отримано «%s» за допомогою %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Некоректний ключ %s визнано чинним через параметр --allow-non-selfsigned-" "uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "немає закритого підключа для відкритого підключа %s — пропускаємо\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "використовуємо підключ %s замість основного ключа %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "дещо зменшити кількість повідомлень" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "взяти ключі з цього сховища ключів" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "супроводжувати конфлікти часових позначок лише попередженнями" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "записувати до дескриптора файла дані щодо стану" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Використання: gpgv [параметри] [файли] (-h — довідка)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Синтаксис: gpgv [параметри] [файли]\n" "Перевірити підписи за допомогою відомих надійних ключів\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Це значення має бути вказано вами, його ніколи не буде показано\n" "стороннім особам. Це значення потрібне для формування мережі довіри;\n" "воно не має нічого спільного з автоматично створеною мережею сертифікації." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Для створення мережі довіри GnuPG потрібно знати, яким з ключів\n" "ви довіряєте необмежено. Зазвичай такими ключами є ключі, у яких ви\n" "маєте доступ до закритої частини. Дайте відповідь «так» (yes), щоб\n" "встановити необмежену довіру до цього ключа.\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Якщо вам хочеться використати ненадійний ключ, дайте відповідь «yes»." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Вкажіть ідентифікатор користувача-отримувача, якому буде надіслано " "повідомлення." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Виберіть алгоритм, яким слід скористатися.\n" "\n" "DSA (або DSS) — алгоритм цифрового підпису, ним можна користуватися лише\n" "для підписування.\n" "\n" "Elgamal — алгоритм, призначений лише для шифрування.\n" "\n" "RSA можна використовувати для підписування і шифрування.\n" "\n" "Першим (основним) ключем завжди має бути ключ, яким можна підписувати." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Зазвичай, не варто використовувати один ключ для підписування і\n" "шифрування. Цей алгоритм варто використовувати лише у певних областях.\n" "Перш ніж використовувати його, порадьтеся з вашим фахівцем з безпеки." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Вкажіть розмір ключа" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Дайте відповідь \"yes\" (так) або \"no\" (ні)" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Вкажіть потрібне значення, як це показано у підказці.\n" "Можна вказати дату у форматі ISO (РРРР-ММ-ДД), але у програмі не\n" "передбачено повідомлено про помилки, система просто спробує\n" "обробити вказане значення як діапазон значень." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Вкажіть ім’я власника ключа" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" "вкажіть необов’язкову, але рекомендовану до визначення адресу електронної " "пошти" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Будь ласка, вкажіть додатковий коментар" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N — змінити ім’я.\n" "C — змінити коментар.\n" "E — змінити адресу електронної пошти.\n" "O — продовжити створення ключа.\n" "Q — перервати створення ключа." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" "Дайте відповідь \"yes\" (або просто \"y\"), якщо можна створювати підключ." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Якщо ви підписуєте ідентифікатор користувача ключа, вам слід перевірити,\n" "чи належить ключ особі, на яку вказує ідентифікатор. Іншим користувачам\n" "важливо знати, наскільки ретельно було виконано цю перевірку.\n" "\n" "«0» означає, що ви не бажаєте оприлюднювати дані щодо якості перевірки\n" " ключа.\n" "\n" "«1» означає, що ви вважаєте, що ключ належить відповідній особі, але вам\n" " не вдалося або ви не виконували перевірки. Корисно для розпізнавання\n" " особи під час підписування ключа псевдоанонімного користувача.\n" "\n" "«2» означає, що було виконано часткову перевірку ключа. Наприклад, ви могли\n" " перевірити відбиток ключа і ідентифікатор користувача за\n" " фотоідентифікатором.\n" "\n" "«3» означає, що ви виконали розширену перевірку ключа. Наприклад, це може\n" " означати перевірку відбитка ключа особисто з власником ключа,\n" " перевірили за документом з фотографією, який важко підробити " "(паспортом),\n" " що ім’я власника збігається з ім’ям у ідентифікаторі ключа, і нарешті\n" " ви перевірили (обміном повідомленнями електронної пошти), що адреса\n" " електронної пошти належить власникові ключа.\n" "\n" "Зауважте, що для рівнів 2 і 3 вказано *лише* приклади.\n" "Нарешті, визначення термінів «часткова» та «розширена» покладається\n" "на вас. Ви маєте самі встановити рівень перевірки під час підписування\n" "ключів.\n" "\n" "Якщо ви не можете дати правильної відповіді, дайте відповідь «0»." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "" "Дайте відповідь \"yes\", якщо ви хочете підписати ВСІ ідентифікатори " "користувача" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Дайте відповідь \"yes\", якщо ви справді хочете вилучити цей ідентифікатор " "користувача.\n" "У разі вилучення всі пов’язані з ним сертифікати буде втрачено!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Дайте відповідь \"yes\", якщо можна вилучити підключ" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Цей підпис ключа є коректним. Зазвичай, потреби у вилученні такого\n" "підпису не виникає, оскільки важливо встановити зв’язок довіри з\n" "цим ключем або іншим ключем, сертифікованим цим ключем." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Цей підпис не можна перевірити, оскільки у вас немає відповідного ключа\n" "Вам слід відкласти його вилучення до визначення потрібного ключа,\n" "оскільки цей ключ підписування може встановити зв’язок довіри\n" "на основі іншого вже сертифікованого ключа." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Підпис не є коректним. Немає сенсу вилучати його з\n" "вашого сховища ключів." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Це підпис, який пов’язує ідентифікатор користувача з ключем.\n" "Не варто вилучати такі підписи. GnuPG може втратити можливість\n" "використання цього ключа, тому вилучайте цей самопідпис, лише\n" "якщо з певної причини він втратив чинність і у вас є інший\n" "самопідпис." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Заміна переваг для всіх ідентифікаторів користувачів (або лише вибраних)\n" "на поточний список переваг. Часову позначку всіх змінених самопідписів\n" "буде посунуто на одну секунду вперед.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Вкажіть пароль. Паролем має бути невідома стороннім група символів \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Повторіть введення пароля, щоб переконатися, що комп’ютер зберігатиме його " "правильно." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Вкажіть назву файла, до якого буде застосовано підписування" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Дайте відповідь \"yes\", якщо файл можна перезаписати" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Вкажіть назву нового файла. Якщо ви просто натиснете Enter, буде " "використано\n" "типову (показану у дужках) назву." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Вам слід вказати причину сертифікації. Залежно від ситуації,\n" "ви можете вбрати одну з таких причин:\n" " \"Key has been compromised\"\n" " Цією причиною слід користуватися, якщо у вас є підозра, що\n" " доступ до вашого закритого ключа отримали сторонні особи.\n" " \"Key is superseded\"\n" " Цією причиною слід користуватися, якщо ви замінили цей ключ\n" " новішим.\n" " \"Key is no longer used\"\n" " Цією причиною слід користуватися, що ви вже не використовуєте\n" " ключ.\n" " \"User ID is no longer valid\"\n" " Цією причиною слід користуватися, що ви вже не використовуєте\n" " відповідний ідентифікатор користувача. Використовується, якщо\n" " втратила чинність адреса електронної пошти.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Якщо хочете, можете ввести опис причин видання цього сертифіката\n" "відкликання. Опис має бути доволі коротким.\n" "Завершити опис слід порожнім рядком.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Довідки не передбачено" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Довідки щодо %s не виявлено" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "імпортувати підписи, позначені як лише локальні" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "відновлювати пошкодження сервером ключів pks під час імпортування" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "не спорожняти дані щодо довіри власнику під час імпортування" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "не оновлювати базу даних довіри після імпортування" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "створити відкритий ключ під час імпортування закритого ключа" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "приймати оновлення лише вже створених ключів" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "вилучити невикористані частини ключа після імпортування" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "вилучити максимум частин з ключа після імпортування" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "пропускаємо блок типу %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "оброблено %lu ключів\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Загалом оброблено: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " пропущено нових ключів: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " без ід. користувача: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " імпортовано: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " без змін: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " нових ід. користувачів: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " нових підключів: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " нових підписів: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " відкликань нових ключів: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " прочитано закритих ключів: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " імпортовано закр. ключів: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " закр. ключів без змін: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " не імпортовано: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " вилучених підписів: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " вилучених ід. корист.: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "УВАГА: у ключі %s містяться записи надання переваги\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " недоступним алгоритмам для таких ід. користувачів:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " «%s»: перевага алгоритму шифрування %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " «%s»: перевага алгоритму контрольних сум %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " «%s»: перевага алгоритму стискання %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "наполегливо рекомендуємо вам оновити записи переваг і\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "повторно поширити цей ключ, щоб уникнути потенційних проблем з алгоритмами\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" "оновити записи перевад можна за допомогою команди: gpg --edit-key %s updpref " "save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "ключ %s: немає ідентифікатор користувача\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "ключ %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "відкинуто фільтром імпортування" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "ключ %s: відновлено пошкоджений підключ PKS\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "ключ %s: прийнято несамопідписаний ідентифікатор користувача «%s»\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "ключ %s: немає чинних ідентифікаторів користувача\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "причиною цього може бути те, що немає самопідпису\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "ключ %s: не знайдено відкритий ключ: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "ключ %s: новий ключ — пропущено\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "не виявлено придатного до запису сховища ключів: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "записуємо до «%s»\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "помилка під час спроби запису сховища ключів «%s»: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "ключ %s: імпортовано відкритий ключ «%s»\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "ключ %s: не відповідає нашій копії\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "ключ %s: не вдалося знайти початковий блок ключів: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "ключ %s: не вдалося прочитати початковий блок ключів: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "ключ %s: «%s» 1 новий ідентифікатор користувача\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "ключ %s: «%s» %d нових ідентифікаторів користувачів\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "ключ %s: «%s» 1 новий підпис\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "ключ %s: «%s» %d нових підписів\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "ключ %s: «%s» 1 новий підключ\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "ключ %s: «%s» %d нових підключів\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "ключ %s: «%s» вилучено %d підпис\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "ключ %s: «%s» вилучено %d підписів\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "ключ %s: «%s» спорожнено %d ідентифікатор користувача\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "ключ %s: «%s» спорожнено %d ідентифікаторів користувачів\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "ключ %s: «%s» не змінено\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "закритий ключ «%s»: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "імпортування закритих ключів заборонено\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "ключ %s: закритий ключ з некоректним шифром %d — пропущено\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "немає типового сховища закритих ключів: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "ключ %s: імпортовано закритий ключ\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "ключ %s: вже у сховищі закритих ключів\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "ключ %s: закритий ключ не знайдено: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "ключ %s: немає відкритого ключа — не можна застосовувати сертифікат " "відкликання\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "ключ %s: некоректний сертифікат відкликання: %s — відкинуто\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "ключ %s: імпортовано сертифікат відкликання «%s»\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "ключ %s: немає ідентифікатор користувача для підпису\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "ключ %s: непідтримуваний алгоритм створення відкритого ключа для " "ідентифікатора користувача «%s»\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "ключ %s: некоректний самопідпис для ідентифікатора користувача «%s»\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "ключ %s: непідтримуваний алгоритм створення відкритого ключа\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "ключ %s: некоректний безпосередній підпис ключа\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "ключ %s: немає підключа для зв’язування ключів\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "ключ %s: некоректне зв’язування підключів\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "ключ %s: вилучено кратне зв’язування підключів\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "ключ %s: немає підключа для відкликання ключа\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "ключ %s: некоректне відкликання підключа\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "ключ %s: вилучено кратне відкликання підключа\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "ключ %s: пропущено ідентифікатор користувача «%s»\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "ключ %s: пропущено підключ\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "ключ %s: непридатний до експорту підпис (клас 0x%02X) — пропущено\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "ключ %s: сертифікат відкликання у помилковому місці — пропущено\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "ключ %s: некоректний сертифікат відкликання: %s — пропущено\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "ключ %s: підпис підключа у помилковому місці — пропущено\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "ключ %s: неочікуваний клас підпису (0x%02X) — пропущено\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "ключ %s: виявлено дублювання ідентифікаторів користувача — об’єднано\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "УВАГА: ключ %s могло бути відкликано: отримуємо ключ відкликання %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "УВАГА: ключ %s могло бути відкликано: ключа відкликання %s немає.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "ключ %s: додано сертифікат відкликання «%s»\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "ключ %s: додано безпосередній підпис ключа\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" "ЗАУВАЖЕННЯ: серійний номер ключа не збігається з серійним номером ключа на " "картці\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "ЗАУВАЖЕННЯ: основний ключ використано і збережено на картці\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "ЗАУВАЖЕННЯ: вторинний ключ використано і збережено на картці\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "помилка під час спроби створення сховища ключів «%s»: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "створено сховище ключів «%s»\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "ресурс блоку ключів «%s»: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "не вдалося перебудувати кеш сховища ключів: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[відкликання]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[самопідпис]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 помилковий підпис\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d помилкових підписів\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 підпис не перевірено через те, що немає ключа\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d підписів не перевірено через те, що немає ключів\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 підпис не перевірено через помилку\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d підписів не перевірено через помилки\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "виявлено 1 ідентифікатор користувача без коректного самопідпису\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "виявлено %d ідентифікаторів користувачів без коректних самопідписів\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Визначтеся щодо рівня довіри до цього користувача для належної перевірки " "ключів інших\n" "користувачів (за паспортами, відбитками з інших джерел тощо)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Я довіряю не повністю\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Я довіряю повністю\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Будь ласка, вкажіть глибину довіри до цього підпису.\n" "Глибина, більша за 1, дозволяє ключу, який ви підписуєте, створювати\n" "надійні підписи від вашого імені.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Будь ласка, вкажіть домен обмеження цього підпису або натисніть Enter, якщо " "такого домену немає.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Ідентифікатор користувача «%s» відкликано." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Ви певні, що все ще бажаєте підписати його? (y/N або т/Н) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Неможливо підписати.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Строк дії ідентифікатор користувача «%s» сплив." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Ідентифікатор користувача «%s» не є самопідписаним." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "Ідентифікатор користувача «%s» можна підписувати. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Підписати його? (y/N або т/Н) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Самопідпис «%s»\n" "є підписом у форматі PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "" "Бажаєте розширити сферу використання до самопідпису OpenPGP? (y/N або т/Н) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Строк дії вашого поточного підпису «%s»\n" "завершено.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Бажаєте видати новий підпис для заміни застарілого? (y/N або т/Н) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Ваш поточний підпис «%s»\n" "є локальним підписом.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Бажаєте розширити сферу використання до повністю експортованого підпису? (y/" "N або т/Н) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "«%s» вже було локально підписано ключем %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "«%s» вже було підписано ключем %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Бажаєте підписати його попри все? (y/N або т/Н) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Нічого підписувати ключем %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Строк дії цього ключа вичерпано!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Строк дії цього ключа завершиться %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Бажаєте, щоб строк дії вашого підпису був таким самим? (Y/n або Т/н) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "Не можна створювати підпис OpenPGP ключа PGP 2.x у режимі --pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Це може зробити ключ непридатним до використання у PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Наскільки ретельно ви перевірили те, що ключ, який ви маєте намір " "підписати,\n" "справді належить особі, ім’я якої вказано вище? Якщо ви не знаєте відповіді, " "введіть «0».\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Не буду відповідати.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Мною не виконувалося ніяких перевірок.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Мною виконано часткову перевірку.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Мною виконано ретельну перевірку.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Ваш вибір? (введіть «?», щоб дізнатися більше): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "Ви справді бажаєте підписати цей ключ вашим ключем «%s» (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Це буде самопідпис.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "УВАГА: підпис не буде позначено як непридатний до експортування.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "УВАГА: підпис не буде позначено як непридатний до відкликання.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Підпис буде позначено як непридатний до експортування.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Підпис буде позначено як непридатний до відкликання.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Цей ключ не перевірявся мною.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Цей ключ перевірено мною частково.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Цей ключ ретельно перевірено мною.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Підписати? (y/N або т/Н) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "помилка під час спроби підписування: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "До ключа включено лише типовий заповнювач або записи ключа з картки — ніяких " "паролів не потрібно змінювати.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Цей ключ не захищено.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Закриті частини основного ключа недоступні.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Закриті частини основного ключа зберігаються на картці.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Ключ захищено.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Редагування цього ключа неможливе: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Вкажіть новий пароль для цього закритого ключа.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "помилка під час повторного введення пароля, повторіть спробу" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Ви не використовуєте пароля — дуже погана робота!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Ви справді цього бажаєте? (y/N або т/Н) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "пересування підпису ключа у належне місце\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "зберегти і вийти" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "показати відбиток ключа" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "показати список ключів та ідентифікаторів користувача" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "вибрати вказаний ідентифікатор користувача" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "вибрати вказаний підключ" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "перевірити підписи" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "підписати вибрані ідентифікатори користувачів [* нижче наведено відповідні " "команди]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "підписати вибрані ідентифікатори користувача локально" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "підписати вибрані ідентифікатори користувача підписом надійності" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" "підписати вибрані ідентифікатори користувача підписом, який не можна " "відкликати" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "додати ідентифікатор користувача" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "додати фотоідентифікатор" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "вилучити вибрані ідентифікатори користувача" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "додати підключ" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "додати ключ на картку пам’яті" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "пересунути ключ на картку пам’яті" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "пересунути резервний ключ на картку пам’яті" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "вилучити вибрані підключі" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "додати ключ відкликання" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "вилучити підписи з вибраних ідентифікаторів користувача" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "змінити дату завершення строку дії ключа або вибраних ключів" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "позначити вибраний ідентифікатор користувача як основний" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "перемкнутися між списками закритих і відкритих ключів" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "список переваг (експертний)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "список переваг (докладний)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "встановити список параметрів для вибраних ідентифікаторів користувачів" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "встановити адресу основного сервера ключів для вибраних ідентифікаторів " "користувачів" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "встановити примітку для вибраного ідентифікатора користувача" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "змінити пароль" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "змінити рівень довіри до власника" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "відкликати підписи для вибраних ідентифікаторів користувачів" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "відкликати вибрані ідентифікатори користувачів" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "відкликати ключ або вибрані підключі" #: g10/keyedit.c:1439 msgid "enable key" msgstr "увімкнути ключ" #: g10/keyedit.c:1440 msgid "disable key" msgstr "вимкнути ключ" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "показати вибрані фотоідентифікатори" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "ущільнити непридатні до використання ідентифікатори користувачів і вилучити " "невикористані підписи з ключа" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" "ущільнити непридатні до використання ідентифікатори користувачів і вилучити " "всі підписи з ключа" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "помилка під час читання блоку ключів «%s»: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Доступний закритий ключ.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Для цього потрібен закритий ключ.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Скористайтеся спочатку командою «toggle».\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* До команди «sign» можна додати «l» для локальних підписів (lsign),\n" " «t» для надійних підписів (tsign), «nr» для підписів без відкликання\n" " (nrsign) або будь-яку комбінацію (ltsign, tnrsign тощо).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Ключ відкликано." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Підписати всі ідентифікатори користувача? (y/N або т/Н) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Підказка: виберіть ідентифікатори користувача для підписування\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Невідомий тип підпису «%s»\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Цією командою не можна користуватися у режимі %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Вам слід вибрати принаймні один ідентифікатор користувача.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Не можна вилучати останній ідентифікатор користувача!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Вилучити всі вибрані ідентифікатори користувачів? (y/N або т/Н) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Вилучити цей ідентифікатор користувача? (y/N або т/Н) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Вилучити основний ключ? (y/N або т/Н) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Вам слід вибрати лише один ключ.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Для команди слід вказати аргумент з назвою файла\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Не вдалося відкрити «%s»: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Помилка читання резервного ключа з «%s»: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Вам слід вибрати принаймні один ключ.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Справді бажаєте вилучити вибрані ключі? (y/N або т/Н) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Справді бажаєте вилучити цей ключ? (y/N або т/Н) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Відкликати всі вибрані ідентифікатори користувачів? (y/N або т/Н) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Відкликати цей ідентифікатор користувача? (y/N або т/Н) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Ви справді бажаєте відкликати весь ключ? (y/N або т/Н) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Ви справді бажаєте відкликати позначені підключі? (y/N або т/Н) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Ви справді бажаєте відкликати цей підключ? (y/N або т/Н) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Не можна встановлювати довіру до власника, якщо використовується вказана " "користувачем база даних довіри\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Встановити список переваг:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Оновити переваги для вибраних ідентифікаторів користувачів? (y/N або т/Н) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Оновити параметри? (y/N або т/Н) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Зберегти зміни? (y/N або т/Н) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Вийти без збереження? (y/N або т/Н) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "помилка оновлення: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "спроба оновлення пароля зазнала невдачі: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Ключ не змінено, отже оновлення непотрібне.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Контрольна сума: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Можливості: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Сервер ключів без можливості зміни" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Основний сервер ключів: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Примітки: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "" "Переваг для ідентифікаторів користувачів у форматі PGP 2.x не передбачено.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Цей ключ було відкликано %s, %s, ключем %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Цей ключ може бути відкликано %s ключем %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(важливий)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "створено: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "відкликано: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "не діє з: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "діє до: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "використання: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "надійність: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "чинність: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Цей ключ було вимкнено" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "номер картки: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Зауважте, що показані дані щодо чинності ключів не обов’язково є коректними\n" "до перезапуску програми.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "відкликано" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "збіг строк дії" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "УВАГА: жоден з ідентифікаторів користувача не позначено як основний. За " "допомогою\n" " цієї команди можна зробити основним інший ідентифікатор " "користувача.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Не можна змінювати дату завершення строку дії ключа v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "УВАГА: це ключ у форматі PGP2. Додавання фотоідентифікатора може призвести " "до відмови\n" " у використанні цього ключа деякими версіями PGP.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Ви справді бажаєте додати його? (y/N або т/Н) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Не можна додавати фотоідентифікатор до ключа у форматі PGP2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Вилучити цей дійсний підпис? (y/N/q або т/Н/в)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Вилучити цей некоректний підпис? (y/N/q або т/Н/в)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Вилучити цей невідомий підпис? (y/N/q або т/Н/в)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Вилучити цей самопідпис? (y/N або т/Н)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Вилучено %d підпис.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Вилучено %d підписів.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Нічого не вилучено.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "некоректний" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Ідентифікатор користувача «%s» ущільнено: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Ідентифікатор користувача «%s»: вилучено %d підпис\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Ідентифікатор користувача «%s»: вилучено %d підписів\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Ідентифікатор користувача «%s»: вже мінімізовано\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "Ідентифікатор користувача «%s»: вже очищено\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "УВАГА: це ключ у форматі PGP 2. Додавання підписаного відкликання може " "призвести до відмови\n" " у використанні цього ключа деякими версіями PGP.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Не можна додавати підписане відкликання до ключа у форматі PGP 2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Вкажіть ідентифікатор користувача підписаного відкликання: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "не можна призначати ключ у форматі PGP 2.x підписаним відкликанням\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "не можна призначати ключ власним підписаним відкликанням\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "цей ключ вже було позначено як призначений для відкликання\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "УВАГА: призначення ключа як підписаного відкликання не можна скасовувати!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Ви справді бажаєте призначити цей ключ як підписане відкликання? (y/N або т/" "Н) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Будь ласка, вилучіть вказане з закритих ключів.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Будь ласка, виберіть не більше одного ключа.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Зміна часу завершення строку дії для підключа.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Зміна часу завершення строку дії для основного ключа.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Не можна змінювати дату завершення строку дії ключа v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Немає відповідного підпису у сховищі закритих ключів\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "підписування підключа %s вже перехресно сертифіковано\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" "підключ %s не призначено для підписування, отже його не потрібно перехресно " "сертифікувати\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Будь ласка, виберіть лише один ідентифікатор користувача.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "пропускаємо самопідпис v3 для ідентифікатора користувача «%s»\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Вкажіть адресу вашого основного сервера ключів: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Ви справді бажаєте замінити його? (y/N або т/Н) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Ви справді бажаєте вилучити його? (y/N або т/Н) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Вкажіть примітку: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Продовжувати? (y/N або т/Н) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Ідентифікатора користувача з індексом %d не існує\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Ідентифікатора користувача з хешем %s не існує\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Підключа з індексом %d не існує\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "Ідентифікатор користувача: «%s»\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "підписано вашим ключем %s %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (неекспортовний)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Строк дії цього підпису завершується %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Ви справді бажаєте відкликати його? (y/N або т/Н) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Створити сертифікат відкликання для цього підпису? (y/N або т/Н) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Не підписано вами.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Вами підписано ці ідентифікатори користувачів у ключі %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (невідкликуваний)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "відкликано вашим ключем %s у %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Ви маєте намір відкликати ці підписи:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Справді створити сертифікати відкликання? (y/N або т/Н) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "немає закритого ключа\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "ідентифікатор користувача «%s» вже відкликано\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "УВАГА: підпис ідентифікатора користувача позначено датою на %d секунд у " "майбутньому\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Ключ %s вже відкликано.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Підключ %s вже відкликано.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Показ фотоідентифікатора %s розміру %ld для ключа %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "запис переваги «%s» продубльовано\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "занадто багато записів переваг шифрів\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "занадто багато записів переваг контрольних сум\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "занадто багато записів переваг стискання\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "некоректний запис «%s» у рядку переваг\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "записування безпосереднього підпису\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "записування самопідпису\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "записування підпису прив’язування ключа\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "некоректний розмір ключа; використовуємо %u-бітовий\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "розмір ключа округлено до %u-бітового\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Підписати" #: g10/keygen.c:1365 msgid "Certify" msgstr "Сертифікувати" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Зашифрувати" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Пройти розпізнавання" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsEeAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Можливі дії з ключем %s: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Поточні дозволені дії: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) увімкнути або вимкнути можливість підписування\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) увімкнути або вимкнути можливість шифрування\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" " (%c) увімкнути або вимкнути можливість використання для розпізнавання\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) вийти\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Вкажіть потрібний вам тип ключа:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA і RSA (типовий)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA і Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (лише підписування)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (лише підписування)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (лише шифрування)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (лише шифрування)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (із визначенням можливостей власноруч)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (із визначенням можливостей власноруч)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "ключі %s можуть мати довжину від %u до %u бітів.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Якою має бути довжина підключа? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Якою має бути довжина ключа? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Запитана довжина ключа — %u бітів\n" #: g10/keygen.c:1722 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Вкажіть строк чинності підпису.\n" " 0 = строк чинності підпису не обмежено\n" " = строк чинності підпису у n днів\n" " w = строк чинності підпису у n тижнів\n" " m = строк чинності підпису у n місяців\n" " y = строк чинності підпису у n років\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Яким є строк чинності ключа? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Яким є строк чинності підпису? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "некоректне значення\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Ключ не має обмеження строку дії\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Підпис не має обмеження строку дії\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Ключ діє до %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Підпис діє до %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "У вашій системі неможливий показ дат після 2038 року.\n" "Але програма коректно оброблятиме ці дати до 2106 року.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Все правильно? (y/N або т/Н) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Вам потрібен ідентифікатор користувача для ідентифікації вашого ключа; " "програма створити ідентифікатор користувача\n" "на основі справжнього імені, коментаря і адреси електронної пошти у такому " "форматі:\n" " \"Ivan Ivanenko (farmer) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Справжнє ім’я: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Некоректний символ у імені\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Ім’я не може починатися з цифри\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Ім’я має бути не коротшим за 5 літер\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Адреса ел. пошти: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Некоректна адреса електронної пошти\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Коментар: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Некоректний символ у коментарі\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Вами використано таблицю символів «%s».\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Вами вибрано такий ідентифікатор (USER-ID):\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Будь ласка, не використовуйте адресу електронної пошти у полях справжнього " "імені або коментаря\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Змінити назву (N), коментар (C), ел. пошту (E) або вийти (Q)? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "Змінити назву (N), коментар (C), ел. пошту (E) або гаразд (O) чи вийти (Q)? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Спочатку виправте помилку\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Вам потрібен пароль для захисту вашого закритого ключа.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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:2034 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:2899 msgid "Key generation canceled.\n" msgstr "Створення ключа скасовано.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "записуємо відкритий ключ до «%s»\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "спроба запису заглушки закритого ключа до «%s»\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "спроба запису закритого ключа до «%s»\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "не знайдено придатного до запису сховища відкритих ключів: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "не виявлено придатного до запису сховища закритих ключів: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "помилка під час спроби запису до сховища відкритих ключів «%s»: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "помилка під час спроби запису до сховища закритих ключів «%s»: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "відкритий і закритий ключі створено і підписано.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Зауважте, що цей ключ не може бути використано для шифрування. Ви можете\n" "скористатися командою «--edit-key» для створення підключа з цією метою.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Помилка під час спроби створення ключа: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "ключ було створено з позначкою на %lu секунд у майбутньому (часова петля або " "проблема з годинником)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "ключ було створено з позначкою на %lu секунду у майбутньому (часова петля " "або проблема з годинником)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "ЗАУВАЖЕННЯ: створення підключів для ключів v3 несумісне з OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Створити? (y/N або т/Н) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "спроба зберігання ключа на картці зазнала невдачі: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "не вдалося створити файл резервної копії «%s»: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "ЗАУВАЖЕННЯ: резервну копію ключа на картці збережено до «%s»\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "ніколи " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Критичні правила підпису: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Правила підпису: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Критичний основний сервер ключів: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Критична примітка підпису: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Примітка підпису: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Сховище ключів" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Основний відбиток ключа:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Відбиток підключа:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Відбиток основного ключа:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Відбиток підключа:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Відбиток ключа =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Серійний номер картки =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "спроба перейменування «%s» на «%s» зазнала невдачі: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "УВАГА: існує 2 файли з конфіденційними даними.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s є незмінним\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s є новим\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Будь ласка, виправте цю можливу ваду захисту\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "кешування сховища ключів «%s»\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "зараз кешовано %lu ключів (%lu підписів)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "кешовано %lu ключів (%lu підписів)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: створено сховище ключів\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "включити до результатів пошуку відкликані ключі" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "включити підключі до пошуку за ідентифікатором ключа" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "використовувати тимчасові файли для передавання даних до допоміжних програм " "сервера ключів" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "не вилучати тимчасові файли після їхнього використання" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "автоматично отримувати ключі під час перевірки підписів" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "брати до уваги адресу основного сервера ключів, встановлену у ключі" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" "брати до уваги запис PKA, встановлений у ключі під час отримання ключів" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "УВАГА: параметр сервера ключів «%s» не використовується на цій платформі\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "вимкнено" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Вкажіть номер, далі (N) чи вийти (Q) > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "некоректний протокол сервера ключів (наш %d!=%d обробника)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "ключ «%s» не знайдено на сервері ключів\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "ключ не знайдено на сервері ключів\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "надсилаємо запит щодо ключа %s до %s сервера %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "надсилаємо запит щодо ключа %s з %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "шукаємо назви з %s сервера %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "шукаємо назви на %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "надсилаємо ключ %s до %s сервера %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "надсилаємо ключ %s на %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "шукаємо «%s» на %s сервера %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "шукаємо «%s» з %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "немає дії щодо сервера ключів!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" "УВАГА: засіб обробки даних сервера ключів взято з іншої версії GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "сервер ключів не надіслав значення VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "помилка під час обміну даними з сервером ключів: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" "не вказано жодного сервера ключів (скористайтеся параметром --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "викликів зовнішнього сервера ключів у цій збірці не передбачено\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "немає обробника схеми сервера ключів «%s»\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "дії «%s» не передбачено для схеми сервера ключів «%s»\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "у %s не передбачено підтримки обробника версії %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "перевищення часу очікування даних від сервера ключів\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "внутрішня помилка сервера ключів\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "«%s» не є ідентифікатором ключа: пропускаємо\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "УВАГА: не вдалося оновити ключ %s за допомогою %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "оновлюємо 1 ключ з %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "оновлюємо %d ключів з %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "УВАГА: не вдалося отримати адресу %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "УВАГА: не вдалося обробити адресу %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "дивний розмір для зашифрованого ключа сеансу (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "зашифрований %s ключ сеансу\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "" "пароль створено за допомогою невідомого алгоритму створення контрольних сум " "%d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "відкритий ключ — %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "зашифровані відкритим ключем дані: належний DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "" "зашифровано за допомогою %u-бітового %s ключа, ідентифікатор %s, створено " "%s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " «%s»\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "зашифровано ключем %s, ідентифікатор %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "невдала спроба розшифровування відкритим ключем: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "зашифровано за допомогою %lu паролів\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "зашифровано за допомогою 1 пароля\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "припускаємо, що дані зашифровано %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "Шифр IDEA недоступний, спробуємо скористатися замість нього %s\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "розшифровано\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "УВАГА: цілісність повідомлення не захищено\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "УВАГА: зашифроване повідомлення було змінено!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "невдала спроба розшифрування: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "ЗАУВАЖЕННЯ: вимога відправника: «лише для Вас»\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "початкова назва файла=«%.*s»\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "УВАГА: виявлено декілька фрагментів нешифрованого тексту\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "окреме відкликання — скористайтеся командою «gpg --import» для застосування\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "підпису не знайдено\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "перевірку підписів придушено\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "не вдалося обробити ці дані з неоднозначним підписом\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Підпис створено %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " за допомогою %s ключа %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Підпис створено %s ключем %s з ідентифікатором %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Ключ доступний на: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "ПОМИЛКОВИЙ підпис від «%s»" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Прострочений підпис від «%s»" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Належний підпис від «%s»" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[непевний]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " або «%s»" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Строк дії підпису вичерпано %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Підпис діє до %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s підпис, алгоритм контрольної суми %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "двійковий" #: g10/mainproc.c:1947 msgid "textmode" msgstr "текстовий" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "невідомо" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "УВАГА: підпис не є від’єднаним; перевірку файла «%s» не виконано!\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Не вдалося перевірити підпис: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "не є від’єднаним підписом\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "УВАГА: виявлено кратні підписи. Буде перевірено лише перший.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "окремий підпис класу 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "підпис у застарілому форматі (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "виявлено некоректний кореневий пакет у proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "не вдалося вимкнути створення дампів образів у пам’яті: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "помилка fstat щодо «%s» у %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "помилка fstat(%d) у %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "" "УВАГА: використовуємо експериментальний алгоритм створення відкритого ключа " "%s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "УВАГА: ключі підписування і шифрування Elgamal вважаються застарілими\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "УВАГА: використовуємо експериментальний алгоритм шифрування %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "" "УВАГА: використовуємо експериментальний алгоритм обчислення контрольних сум " "%s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "УВАГА: алгоритм обчислення контрольних сум %s вважається застарілим\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "будь ласка, ознайомтеся з %s, щоб дізнатися більше\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "ЗАУВАЖЕННЯ: ця можливість є недоступною у %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: застарілий параметр «%s»\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "УВАГА: «%s» вважається застарілим параметром\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "будь ласка, скористайтеся «%s%s»\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "УВАГА: «%s» вважається застарілою командою — не користуйтеся нею\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Нестиснений" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "uncompressed|немає" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "використання цього повідомлення щодо %s може бути неможливим\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "неоднозначний параметр «%s»\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "невідомий параметр «%s»\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Невідомий тип підпису «%s»\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Файл «%s» існує. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Перезаписати? (y/N або т/Н) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: невідомий суфікс\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Введіть нову назву файла" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "записуємо до stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "припускаємо підписані дані у «%s»\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "створено новий файл налаштувань «%s»\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "УВАГА: параметри у «%s» ще не є активними під час цього запуску\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "створено каталог «%s»\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "робота з алгоритмом створення відкритого ключа %d неможлива\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "УВАГА: потенційно небезпечний зашифрований симетричним алгоритмом ключ " "сеансу\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "підпакет типу %d містить критичний набір бітів\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent недоступний у цьому сеансі\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "помилкове форматування змінної середовища GPG_AGENT_INFO\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "підтримки версії протоколу gpg-agent %d не передбачено\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "не вдалося встановити з’єднання з «%s»: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "проблема з агентом — вимикаємо використання агента\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (ідентифікатор основного ключа %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Вам слід вказати пароль для розблокування закритого ключа для користувача:\n" "«%.*s»\n" "%u-бітовий ключ %s, ідентифікатор %s, створено %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Повторіть пароль\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Вкажіть пароль\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "скасовано користувачем\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "не можна надсилати запити щодо паролів у пакетному режимі\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Введіть пароль: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Вам потрібен пароль для розблокування закритого ключа\n" "для користувача: «%s»\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-бітовий ключ %s, ідентифікатор %s, створено %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (підключ у ідентифікаторі основного ключа %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Повторіть пароль: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Виберіть зображення, яке буде використано як ваш фотоідентифікатор.\n" "Дані мають зберігатися у форматі JPEG. Пам’ятайте, що зображення\n" "зберігатиметься у вашому відкритому ключі. Якщо ви використаєте\n" "дуже велике зображення, ваш ключ також стане дуже великим!\n" "Варто дотримуватися розмірів, близьких до 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Вкажіть назву файла JPEG для фотоідентифікатора: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "не вдалося відкрити файл JPEG «%s»: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Цей файл JPEG є дуже великим (%d байтів)!\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Вам справді хочеться ним скористатися? (y/N або т/Н) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "«%s» не є файлом JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Це потрібна вам фотографія (y/N/q)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "не встановлено програми для перегляду фотографій\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "показ фотоідентифікатора неможливий!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Причину не вказано" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Ключ замінено" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Ключ скомпрометовано" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Ключ більше не використовується" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Ідентифікатор користувача втратив чинність" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "причина відкликання: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "коментар щодо відкликання: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Не вказано значення довіри до:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " або «%s»\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Наскільки ви певні, що цей ключ справді належить користувачеві з вказаним " "іменем?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = не знаю або не скажу\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = НЕ довіряю\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = довіряю без обмежень\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = повернутися до головного меню\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = пропустити цей ключ\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = вийти\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Мінімальним рівнем довіри до цього ключа є %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Ваше рішення? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "" "Ви справді хочете встановити необмежену довіру до цього ключа? (y/N або т/Н) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Сертифікати, що призводять до необмеженої довіри до ключа:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: немає певності щодо належності цього ключа користувачеві з вказаним " "іменем\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: є певні свідчення належності цього ключа користувачеві з вказаним " "іменем\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Ймовірно, цей ключ належить користувачеві з вказаним іменем\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Цей ключ належить нам\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Не можна з певністю вважати, що ключ належить особі,\n" "вказаній у ідентифікаторі користувача. Якщо вам *точно*\n" "відомі наслідки ваших дій, можете ствердно відповісти\n" "на наступне питання.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Попри все використовувати цей ключ? (y/N або т/Н) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "УВАГА: використовуємо ненадійний ключ!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "УВАГА: цей ключ могло бути відкликано (немає ключа відкликання)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "УВАГА: цей ключ було відкликано відповідною особою!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "УВАГА: цей ключ було відкликано власником!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Це може означати, що підпис було підроблено.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "УВАГА: цей підключ було відкликано його власником!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Зауваження: цей ключ було вимкнено.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Зауваження: перевіреною адресою автора підпису є «%s»\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Зауваження: адреса автора підпису «%s» не збігається з записом DNS\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "рівень довіри змінено на FULL (повна) через коректність даних PKA\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "рівень довіри змінено на NEVER (ніколи) через помилки у даних PKA\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Зауваження: строк дії цього ключа вичерпано!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "УВАГА: цей ключ не сертифіковано за допомогою надійного підпису!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Немає підтверджень належності підпису його власнику.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "УВАГА: ми НЕ довіряємо цьому ключу!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Підпис, ймовірно, є ПІДРОБКОЮ.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "УВАГА: цей ключ не сертифіковано достатньо надійними підписами!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Певності у належності підпису його власнику немає.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: пропущено: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: пропущено: відкритий ключ вже існує\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Вами не вказано ідентифікатора користувача. (можете скористатися «-r»)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Поточні отримувачі:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Вкажіть ідентифікатор користувача. Дані слід завершити порожнім рядком: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Немає такого ідентифікатора користувача.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "пропущено: відкритий ключ вже встановлено для типового отримувача\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Відкритий ключ вимкнено.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "пропущено: відкритий ключ вже встановлено\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "невідомий типовий отримувач «%s»\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: пропущено: відкритий ключ вимкнено\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "немає коректних адрес\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "дані не збережено; скористайтеся для їхнього збереження параметром «--" "output»\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "помилка створення «%s»: %s.\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Від’єднаний підпис.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Будь ласка, вкажіть назву файла даних: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "читаємо дані з stdin...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "немає підписаних даних\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "не вдалося відкрити підписані дані «%s»\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "анонімний отримувач; спробуємо закритий ключ %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "добре, ми є анонімним отримувачем.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "застаріле кодування DEK не підтримується\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "алгоритм шифрування %d%s є невідомим або вимкненим\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "УВАГА: не виявлено алгоритму шифрування %s у перевагах отримувача\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "ЗАУВАЖЕННЯ: строк дії закритого ключа %s завершився %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "ЗАУВАЖЕННЯ: ключ було відкликано" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "помилка build_packet: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "у ключа %s немає ідентифікатора користувача\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Буде відкликано:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Це критичний ключ відкликання)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "" "Створити підписаний сертифікат відкликання для цього ключа? (y/N або т/Н) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Призначено виведення у форматі ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "помилка make_keysig_packet: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Створено сертифікат відкликання.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "для «%s» не знайдено ключів відкликання\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "закритий ключ «%s» не знайдено: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "немає відповідного відкритого ключа: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "відкритий ключ не відповідає закритому ключу!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Створити сертифікат відкликання для цього ключа? (y/N або т/Н) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "невідомий алгоритм захисту\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "ЗАУВАЖЕННЯ: цей ключ не захищено!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Створено сертифікат відкликання.\n" "\n" "Пересуньте його на носій, який можна сховати. Якщо хтось сторонній\n" "отримає доступ до цього сертифіката, він зможе зробити ваш ключ\n" "непридатним до використання. Варто надрукувати цей сертифікат і\n" "зберігати його у конфіденційному місці, якщо дані з носія не\n" "можна буде прочитати. Але зауважте: система друку вашого комп’ютера\n" "може зберігати дані друку, доступ до яких зможуть отримати\n" "сторонні люди!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Будь ласка, вкажіть причину відкликання:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Скасувати" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Ймовірно, вам варто тут вибрати %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Вкажіть необов’язковий опис; завершіть його порожнім рядком:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Причина відкликання: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Опису не надано)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Все правильно? (y/N або т/Н) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "закриті частини ключа недоступні\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "підтримки алгоритму захисту %d%s не передбачено\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "підтримки контрольної суми захисту %d не передбачено\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Некоректний пароль; повторіть спробу" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s…\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "УВАГА: виявлено слабкий ключ — будь ласка, змініть пароль.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "створюємо застарілу 16-бітову контрольну суму для захисту закритого ключа\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "створено слабкий ключ — повторюємо спробу\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "не вдалося створити стійкий ключ для симетричного шифрування; спроба " "виконувалася %d разів!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "Для DSA довжина хешу має бути кратною до 8 бітів\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "Ключ DSA %s використовує небезпечне (%u-бітове) хешування\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "Ключ DSA %s потребує хешу з %u або більшої кількості бітів\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "УВАГА: конфлікт контрольних сум підписів у повідомленні\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "УВАГА: підписування підключа %s не є перехресно сертифікованим\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "УВАГА: підписування підключа %s містить некоректну перехресну сертифікацію\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "відкритий ключ %s є на %lu секунду новішим за підпис\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "відкритий ключ %s є на %lu секунд новішим за підпис\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "ключ %s було створено з позначкою на %lu секунду у майбутньому (часова петля " "або проблема з годинником)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "ключ %s було створено з позначкою на %lu секунд у майбутньому (часова петля " "або проблема з годинником)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "ЗАУВАЖЕННЯ: строк дії ключа підпису %s завершився %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s підпис, алгоритм контрольної суми %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "припускаємо помилковий підпису від ключа %s через невідомий критичний біт\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "ключ %s: немає підключа для підпису відкликання підключа\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "ключ %s: немає підключа для підпису прив’язування підключа\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "УВАГА: не вдалося виконати %%-розгортання примітки (занадто велика). " "Використовуємо нерозгорнутою.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "УВАГА: не вдалося виконати %%-розгортання адреси правил (занадто велика). " "Використовуємо нерозгорнутою.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "УВАГА: не вдалося виконати %%-розгортання адреси основного сервера ключів " "(занадто велика). Використовуємо нерозгорнутою.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "невдала спроба перевірити створений підпис: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s підпис від: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "підписування від’єднаним ключем можливе лише за допомогою ключів у форматі " "PGP 2.x у режимі --pgp2\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "УВАГА: примусове використання алгоритму контрольних сум %s (%d) не " "відповідає параметрам отримувача\n" #: g10/sign.c:960 msgid "signing:" msgstr "підписування:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "підписування текстовим ключем можливе лише за допомогою ключів у форматі PGP " "2.x у режимі --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "Буде використано шифрування %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "ключ не було позначено як ненадійний — не можна використовувати його з " "фіктивним RNG!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "пропущено «%s»: дублювання\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "пропущено «%s»: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "пропущено: закритий ключ вже існує\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "це ключ Elgamal створений за допомогою PGP, цей ключ недостатньо безпечний " "для підписування!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "запис щодо довіри %lu, тип %d: помилка записування: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Список призначених значень довіри, створено %s\n" "# (Скористайтеся «gpg --import-ownertrust» для їхнього відновлення)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "помилка у «%s»: %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "занадто довгий рядок" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "не вистачає двокрапки" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "некоректний відбиток" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "пропущено значення довіри до власника" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "не вдалося знайти запис довіри у «%s»: %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "помилка читання у «%s»: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: помилка синхронізації: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "не вдалося створити блокування для «%s»\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "не вдалося заблокувати «%s»\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "запис trustdb %lu: помилка lseek: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "запис trustdb %lu: помилка запису (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "занадто велика операція trustdb\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "немає доступу до «%s»: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: каталогу не існує!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: не вдалося створити запис щодо версії: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: створено некоректну trustdb\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: створено trustdb\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "ЗАУВАЖЕННЯ: запис до trustdb заборонено\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: некоректна trustdb\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: не вдалося створити таблицю хешів: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: помилка оновлення запису версії: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: помилка читання запису версії: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: помилка записування запису версії: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: помилка lseek: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: помилка читання (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: не є файлом trustdb\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: запис версії з номером запису %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: некоректна версія файла %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: помилка під час спроби читання вільного запису: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: помилка записування запису каталогу (dir): %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: не вдалося обнулити запис: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: не вдалося додати запис: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Помилка: trustdb пошкоджено.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "" "обробка текстових рядків з довжиною, що перевищує %d символів, неможлива\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "рядок вхідних даних довший за %d символів\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "«%s» не є коректним довгим ідентифікатором ключа\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "ключ %s: прийнято як надійний ключ\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "ключ %s зустрічається у trustdb декілька разів\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "ключ %s: немає відкритого ключа для надійного ключа — пропущено\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "ключ %s позначено як ключ з необмеженою довірою\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "запис довіри %lu, тип запиту %d: помилка читання: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "запис довіри %lu не належить до вказаного типу %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "Ви можете спробувати повторно створити trustdb за допомогою команд:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" "Якщо результат буде незадовільним, будь ласка, зверніться до підручника\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "використання невідомої моделі довіри (%d) неможливе — припускаємо модель " "довіри %s\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "використовуємо модель довіри %s\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10 translator see trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[відклик.]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[застаріл]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[невідома]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[не визн.]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[неповна ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ повна ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[безмежна]" #: g10/trustdb.c:553 msgid "undefined" msgstr "не визначено" #: g10/trustdb.c:554 msgid "never" msgstr "ніколи" #: g10/trustdb.c:555 msgid "marginal" msgstr "неповна" #: g10/trustdb.c:556 msgid "full" msgstr "повна" #: g10/trustdb.c:557 msgid "ultimate" msgstr "безмежна" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "потреби у перевірці trustdb немає\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "наступну перевірку trustdb призначено на %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "потреби у перевірці trustdb на основі моделі довіри «%s» немає\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "потреби у оновленні trustdb на основі моделі довіри «%s» немає\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "відкритий ключ %s не знайдено: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "будь ласка, скористайтеся параметром --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "перевірка trustdb\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "Оброблено %d ключів (очищено %d значень чинності)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "не знайдено ключів з необмеженою довірою\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "не знайдено відкритий ключ ключа з необмеженою довірою %s\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "потрібно %d обмежених, потрібно %d повних, модель довіри %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "глибина: %d чинність: %3d підписано: %3d надійність: %d-, %dq, %dn, %dm, " "%df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "не вдалося оновити запис версії trustdb: помилка запису: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "не вдалося перевірити підпис.\n" "Будь ласка, пам’ятайте, що файл підпису (.sig або .asc)\n" "має бути першим файлом, вказаним у командному рядку.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "у рядку вхідних даних %u занадто багато символів або не вказано LF\n" #: util/errors.c:53 msgid "general error" msgstr "загальна помилка" #: util/errors.c:54 msgid "unknown packet type" msgstr "невідомий тип пакета" #: util/errors.c:55 msgid "unknown version" msgstr "невідома версія" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "невідомий алгоритм відкритого ключа" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "невідомий алгоритм контрольних сум" #: util/errors.c:58 msgid "bad public key" msgstr "помилковий відкритий ключ" #: util/errors.c:59 msgid "bad secret key" msgstr "помилковий закритий ключ" #: util/errors.c:60 msgid "bad signature" msgstr "некоректний підпис" #: util/errors.c:61 msgid "checksum error" msgstr "помилка у контрольній сумі" #: util/errors.c:62 msgid "bad passphrase" msgstr "помилковий пароль" #: util/errors.c:63 msgid "public key not found" msgstr "відкритий ключ не знайдено" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "невідомий алгоритм шифрування" #: util/errors.c:65 msgid "can't open the keyring" msgstr "не вдалося відкрити сховище ключів" #: util/errors.c:66 msgid "invalid packet" msgstr "некоректний пакет" #: util/errors.c:67 msgid "invalid armor" msgstr "некоректний код ASCII" #: util/errors.c:68 msgid "no such user id" msgstr "немає такого ідентифікатора користувача" #: util/errors.c:69 msgid "secret key not available" msgstr "закритий ключ недоступний" #: util/errors.c:70 msgid "wrong secret key used" msgstr "використано помилковий закритий код" #: util/errors.c:71 msgid "not supported" msgstr "не підтримується" #: util/errors.c:72 msgid "bad key" msgstr "помилковий ключ" #: util/errors.c:73 msgid "file read error" msgstr "помилка читання файла" #: util/errors.c:74 msgid "file write error" msgstr "помилка запису до файла" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "невідомий алгоритм стиснення" #: util/errors.c:76 msgid "file open error" msgstr "помилка відкриття файла" #: util/errors.c:77 msgid "file create error" msgstr "помилка створення файла" #: util/errors.c:78 msgid "invalid passphrase" msgstr "некоректний пароль" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "нереалізований алгоритм відкритих ключів" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "нереалізований алгоритм шифрування" #: util/errors.c:81 msgid "unknown signature class" msgstr "невідомий клас підписів" #: util/errors.c:82 msgid "trust database error" msgstr "помилка бази даних довіри" #: util/errors.c:83 msgid "bad MPI" msgstr "помилковий MPI" #: util/errors.c:84 msgid "resource limit" msgstr "обмеження на ресурси" #: util/errors.c:85 msgid "invalid keyring" msgstr "некоректне сховище ключів" #: util/errors.c:86 msgid "bad certificate" msgstr "помилковий сертифікат" #: util/errors.c:87 msgid "malformed user id" msgstr "помилкове форматування ідентифікатора користувача" #: util/errors.c:88 msgid "file close error" msgstr "помилка закриття файла" #: util/errors.c:89 msgid "file rename error" msgstr "помилка перейменування файла" #: util/errors.c:90 msgid "file delete error" msgstr "помилка вилучення файла" #: util/errors.c:91 msgid "unexpected data" msgstr "неочікувані дані" #: util/errors.c:92 msgid "timestamp conflict" msgstr "конфлікт часових позначок" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "непридатний до використання алгоритм відкритого ключа" #: util/errors.c:94 msgid "file exists" msgstr "файл існує" #: util/errors.c:95 msgid "weak key" msgstr "слабкий ключ" #: util/errors.c:96 msgid "invalid argument" msgstr "некоректний аргумент" #: util/errors.c:97 msgid "bad URI" msgstr "помилкова адреса" #: util/errors.c:98 msgid "unsupported URI" msgstr "непідтримувана адреса" #: util/errors.c:99 msgid "network error" msgstr "помилка мережі" #: util/errors.c:101 msgid "not encrypted" msgstr "не зашифровано" #: util/errors.c:102 msgid "not processed" msgstr "не оброблено" #: util/errors.c:104 msgid "unusable public key" msgstr "непридатний до використання відкрити ключ" #: util/errors.c:105 msgid "unusable secret key" msgstr "непридатний до використання закритий ключ" #: util/errors.c:106 msgid "keyserver error" msgstr "помилка сервера ключів" #: util/errors.c:107 msgid "canceled" msgstr "скасовано" #: util/errors.c:108 msgid "no card" msgstr "немає картки" #: util/errors.c:109 msgid "no data" msgstr "немає даних" #: util/logger.c:183 msgid "ERROR: " msgstr "ПОМИЛКА: " #: util/logger.c:186 msgid "WARNING: " msgstr "УВАГА: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "…це вада (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "ви виявили ваду… (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "yes|так" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yYтТ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no|ні" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nNнН" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit|вийти" #: util/miscutil.c:443 msgid "qQ" msgstr "qQвВ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|гаразд" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancel|скасувати" #: util/miscutil.c:479 msgid "oO" msgstr "oOгГ" #: util/miscutil.c:480 msgid "cC" msgstr "cCсС" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "УВАГА: використовуємо незахищену область пам’яті!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "докладніші дані можна знайти на сторінці http://www.gnupg.org/documentation/" "faqs.html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "дію не можна виконувати без ініціалізації захищеної області пам’яті\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(ймовірно, ви скористалися помилковою програмою для цього завдання)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "УВАГА: визначення власника додатка «%s» не є безпечним\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "УВАГА: визначення прав доступу до додатка «%s» не є безпечним\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "УВАГА: визначення власника підлеглого каталогу у додатку «%s» не є " #~ "безпечним\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "УВАГА: визначення прав доступу до підлеглого каталогу у додатку «%s» не є " #~ "безпечним\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "додаток шифрування «%s» не завантажено через небезпечні права доступу\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "не виявлено додатка шифрування IDEA\n" gnupg-1.4.20/po/sv.gmo0000644000175000017500000042016212635457221011425 00000000000000T'Ni-i/iijjkkkkl/lLlil2l7l2l#$mDHm.mIm7n'>nfn nnnnnno0oIofo+xo&o#o(op1pQp(mppp$ppq&qEq,`qqq!qqqr/r BrNr krwrrrrrrrs*2s"]s]sBs!t/4t=dt(t.t3t!.u(Puyuu'uuuuv+v>v,Wv'vvv"vw w$wB@w=ww"w%x&)x!Px%rx"x#x'x y(yEyZywyyy(y$yzz#,zPz$ozzz!zz{ 0{Q{&i{%{ {,{4{$||}+}I}^}'r}}}}}} ~'-~U~"l~~~-~(~02FHy  ̀ ـ @AT/0Ɓ\1TD-0.?In*+' 7D\mЄׄ3<4D-y'a.$ ?4>:s͇!,6(c8#ň&(&9`w76-%J3p90ފ<GL@>Ջ+=@~"ӌ :@#Sw /ӎH-6$d'8&5.G5v*.א0&7,^ ̑8ߑ#<U"\.HG"($ܓEG;ݔ͕8%$^ĖSo˘BBXk{%ʙҙ.H*ܚ !(0J'{<",/K1{",М"2 S o( ڝ*"=Qj|̞ 5{"ԟ(,IgF 1%3YyEE^o  5V8'>Gc/zNE,?"l#-+) &7^A'Hp#9Rdt}+,ު3 ?1K}(#+" +/"[ ~?%4G[m ƭ}ez/0į !#EJ!Z|߱%-@Ijh-Ӳ9Oȳ0/I5y'.״-4E !<!Rt$,( -?mPm *+ߺ 'C \}#$ֻ 9 T6^%7ռ2 @r>31r=I4,a#=?DB@+1N&IuI5 5?;u?B<4Hq-"H T<B6)yC:.">Q2=<@>FHU$e -21 I>>K@5T*7,00K4| 2h&*&1#27>j*[=0M"C&f!3>c"%D,5Td2u_    ) 4? S ^ i s %"#)C&m+5 3 @N.e B 5+$a  #(9by" !?,\'.%2+9ev%  55k ;<*$Ol  :!\|& - I<WA(/4d 10H,aH %"/H.x&3 % <Ii0$=%8^ w'#1H`'& &)&Pw / ,/;"k9K%$:&_$#',> P\l|$@ ,H M$[!D+</h60 /'W"i&(%%($0U ft. 2*]u'/A+W$&$',>,k> 7$O,tIJ6Vs"# !9Tp*-$' 0.Q"+)#-=6k5/"('Ks;0"%/D2t!: 3!T!v(+8&!C4e0264)k9&G!HiB1M#c *EZz  1Kfw'.-(62_! , =K Q$\) %%Bh,~23/&D"k1!%CX%w%      & #G k &n  )  $ < J ` {  6 ,  ;5 #q M  - , H ` |  " -  + &A *h 5 6 !&?$f2IFF90S1##++*,V!2$*'2R.*,4 R^ u%&)$Hm#&3%&*L%w(-9H6:,05/f7*.7=;u01;P%h)36:2 mx95--"[~ -  65W$+4%.!TCv*(0?_.h-*+G2/( %X F~  1 # !.!!K!m!(!!-!/!,&" S""]")""" "#2#1R#######!#"$-7$e$:$I$A %K% ]%g%z%%%%%%& &<&\&!u&&&&&&'#' C'O'_'y'' '''' (()(<(6T((5(#( )")1)G)*X)!) ))G)** .*O*l*u*-*,**+&+ B+c+++++++D+F,Ed,D,E,A5-7w-6-7-=.>\..$.7.</7R/F// /0 0$&0#K0o0#0*0j05B2x2#3>4W4L5g5$5'5%5&5%!6&G66n6<6:607?N747H7: 8,G8%t8 8888&8&9&F9m9%99(9%9$:-8:f:$: :-::;)9;c;|;&;;-;&</<0F<w<<#<<<#='=6=%V=|=== ='=&>..>&]>r>J>B?3[?F?4?9 @?E@+@:@&@A,AHAhA{A%AAA3A6B9SB*B$BBBBOCLjCC'C)C,$D(QD*zD1D7D/E1?EqEE"EE(E F."F8QFFF$F)F%G-G$LG*qGG(G%GH"%H%HH nH9zH:HHII)I%J9J0XJJJJJJK&"KIK0_K$KK6K5L97LqLOtLL M M'M"&N'IN%qNBN/N( Ol3O7OOVO5FP<|P0POP1:Q2lQ'Q QQQR$R#@RdR~RRRGR S:S5LSS)\T1T T+T TT4 U4>U=sU"UUU'V/V:EV4V4V/V/W/JW.zWWWW W<X4?X.tX%X.X9X32YGfYRYDZBFZ/ZNZ[[[&[#;[_[w[[:[[.[\'\9\9Y\\\]L]. ^'8^=`^>^%^=_1A_5s_&_5_/`(6`/_``` ``*` a-aIa8Ya=aaOcb-b4b-cRDccESdd`ee(eIe! f.f=fTf iff2g#hCh^hvhh$h hYhJihi~ii0i<i j j7jNjBljj9bk*k kLk:5l?pl l$l5l;,m=hm)m3m)n-.n4\n&n/n2n o@&o#go-oo!o!o$p'?p(gpp pp=Vq#q5q5q$r+8r#dr(rrcr#)s7Ms/sss2tJtr u}uuu/Hv)xv<vvayw1wG xCUxmxy$'y/Ly.|y'yyy,{#=|a|'| } ;}\}m}}%}}0}/~65~l~2s~~-~-~92T923(TB4̀"2#U/ylÁ0(ICr>Y#O)s0ԅ+1'Hp(І$نz0y:SU5<RW3:މ;XU/Ȍ,%2E>x6( 26i%# ߐ349'n*<2'1*Y13&+,= j>t-&:DC:3ԕFeO83)":LVAG>22USBU?B,?o?EI5T6ԛ# U/!J@B9ΝK=T:B͞<CM<>ΟV Qdh(#H4l40֡SL[UN9M2;47+;cC#3;&[.!5֬4 :AK|ȭ?A׮AW[(4ܯ">4Xs̰1OC17u,ϴpm~$ + >Ie(#(Ͷ9/0=`9'ط2 Lm8 ʸڸL+E7q! ˹ ع 5L^qx/ $D)])ƻ!,0?6p46ܼ/CXq#Ž*  &6G~ >ȾS4[# ѿ!޿9Vs</4F{8 V^LH' 73k #B., Gh"3,K l #-1*/\* 4 J$k?( !2-T1" (<$e1++33H&|   >&0?6p(:[ 7g54/ ':7b%  8Ph*L& ( I V'c P8a+B; E'N8v(,3#3W&-"52h%) NGf#}+#5RIh:;<K,)- !?@-1:<;VxX"($K,p#&-0G!f(,,2)/\)F.=,<j+/G3K9@')"6L%GF183jCA$$4I-~D)-+I0u2:&*;Af=%3 B@<7WP#e-su+f(&1Xt'#/>3,r.)*.#Rg&& "!Acy9$1 G h7r=/(#A2e, !;A.E t$ 1-.>;[/HK\'x&E";P7p#6..K0z  %1P#S w1&69Ni#7557CmE1-._#-&+7G""?;!=]%0:.-\rGi!'+Iu?=-.k.3:88/q6&'.3V+'"1E!N p}&&&5'\(%016J8g('% 8%T5z<K393m++)AB]))A@6<wDF@*U;=7 7D| I)A<9~!%4= r|.+M)=g=K' 29 @l E / -# $Q  v ? 7 9 2 6 Q 6? 4v 1 F $ 3< .p " ( & -@.W:0 1</$l'10;>X(%!&17X(QD IP  &.-4Ne "4Wl%{ )4Q/q!C&jMB-Ic=   Q%a& )89P%&' 9Qd~VdX\VI :V57<J<C/0E,KrI8A)V ?  %! *G  2*kO<Zy#>/a6 _V!3K[isS=pL~KbOn##(1k&Z^_ko^'7?f8_>:y](p9!jl,UI, !{5&TD -ScMo@%:HXk  Q~Y km 'z1KDL Yt7$\I R<E&jf'34Ewe+?N\m K[h-{ZbdsT7n/+@])E0s$;:w# )=CH=Hl(R+<["u8G Gv&z4MMyXr-. ?{ HW!"2Z NxdL@Xajxmm`l>5vA8siUR'DJ,\w/LNAn0[-$gEJlnbCfG1VIu?G{` j.)BW G_tq^y:C4*|2| B OE0~|U*r!R3WL'? vJ}5a}+or(^h2<cHmJ;`|S9%^d8tvRw P pwlU9.tYJ$x ]{0D=MIp YP"xbWBPipTc(SVQ*]vOK1/b}@Q4A\[hx:g;cuAi~I]q.fF%DNzd6`) -&X/VX51<jzrou;e.P@tizgM=}T9_gOZ7*;cn>\`TuB3earFhN9V  ,)85$qSF06}~h4q"Q2|PFa%">%YdeFQ#fCUqeC 3 Bos7W6Agy,6+ Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorflag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s remove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model uncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN%%0A[sigs done: %lu]Project-Id-Version: gnupg 2.0 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:17+0200 Last-Translator: Daniel Nylander Language-Team: Swedish Language: sv MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Ange användaridentiteten. Avsluta med en tom rad: Inte tillräckligt med slumpmässiga byte tillgängliga. Utför lite arbete för att ge operativsystemet en chans att samla in mer entropidata! (behöver %d fler byte) Välj en bild att använda som ditt foto-id. Bilden måste vara en JPEG-fil. Kom ihåg att bilden sparas inuti din publika nyckel: Om du väljer en mycket stor bild, så blir din nyckel också väldigt stor! Försök att använda en bild som har ungefär formatet 240x288 pixlar. Algoritmer som stöds: Du behöver en användaridentitet för att identifiera din nyckel; programvaran konstruerar en användaridentitet från verkligt namn, kommentar och e-postadress enligt följande format: "Gustav Vasa (Brutal kung) " även känd som "%s" med %s-nyckeln %s importerade: %lu oförändrade: %lu nya undernycklar: %lu nya användaridentiteter: %lu inte importerade: %lu utan användaridentiteter: %lu "%s": inställning för chifferalgoritmen %s "%s": inställning för komprimeringsalgoritmen %s "%s": inställning för sammandragsalgoritmen %s (undernyckel på primärt nyckel-id %s) Det är inte säkert att signaturen tillhör ägaren. Signaturen är sannolikt en FÖRFALSKNING. Det finns inget som indikerar att signaturen tillhör ägaren. Detta kan betyda att signaturen är förfalskad. algoritmer på dessa användaridentiteter: nya signaturer: %lu "%s" Kortets serienr =Nyckelns fingeravtryck = Undernyckelns fingeravtryck: antal lästa hemliga nycklar: %lu överhoppade nya nycklar: %lu användaridentiteter rensade: %lu Undernyckelns fingeravtryck: signaturer rensade: %lu (%c) Färdig (%c) Växla autentiseringsförmågan (%c) Växla krypteringsförmågan (%c) Växla signeringsförmågan (%d) DSA (ställ in dina egna förmågor) (%d) DSA (endast signering) (%d) Elgamal (endast kryptering) (%d) RSA (endast kryptering) (%d) RSA (ställ in dina egna förmågor) (%d) RSA (endast signering) (0) Jag vill inte svara.%s (1) Jag har inte kontrollerat alls.%s (1) Signeringsnyckel (2) Krypteringsnyckel (2) Jag har gjort viss kontroll.%s (3) Autentiseringsnyckel (3) Jag har gjort en noggrann kontroll.%s nya nyckelspärrningar: %lu %d = Jag litar INTE %d = Jag vet inte eller kan inte säga något %d = Jag litar fullständigt %d = Jag litar marginellt %d = Jag litar förbehållslöst Kan inte signera. även känd som "%s" h = gå tillbaka till huvudmenyn a = avsluta s = hoppa över denna nyckel importerade hemliga nycklar: %lu (primära nyckelns id %s) (icke exporterbar) (inte spärrbar)Primära nyckelns fingeravtryck: oförändrade hemliga nycklar: %lu "%s" inte ett nyckel-id: hoppar över "%s" var redan lokalt signerad med nyckeln %s "%s" var redan signerad av nyckeln %s # Skapat lista över tilldelade tillitsvärden %s # (Använd "gpg --import-ownertrust" för att återställa dem) %d försök för Admin PIN-koden återstår innan kortet låses permanent %d felaktiga signaturer %d nycklar behandlade (%d validity counts rensade) %d marginal(er) behövs, %d fullständig(a) behövs, tillitsmodell %s %d signaturer validerades inte eftersom fel uppstod %d signaturer validerades inte eftersom nycklar saknades %d användaridentiteter utan giltiga självsignaturer hittades %lu nycklar mellanlagrade (%lu signaturer) %lu nycklar mellanlagrade än så länge (%lu signaturer) %lu nycklar behandlade än så länge %s ... %s har inte stöd för hanterarversionen %d %s fungerar ännu inte med %s %s-krypterad data %s krypterad sessionsnyckel krypteringen %s kommer att användas %s är den nya %s är den oförändrade %s-nycklar kan vara mellan %u och %u bitar långa. %s nyckelstorlekar måste vara inom intervallet %u-%u det är ingen poäng att använda %s tillsammans med %s! %s är inte tillåten tillsammans med %s! %s signatur, sammandragsalgoritm %s %s. %s/%s krypterad för: "%s" %s/%s signatur från: "%s" %s: Det finns viss information om att nyckeln tillhör den angivna användaren %s: Det finns inget som säger att nyckeln tillhör den angivna användaren %s: katalogen finns inte! %s: fel vid läsning av ledig post: %s %s: fel vid läsning av versionspost: %s %s: fel vid uppdatering av versionspost: %s %s: fel vid läsning av katalogpost: %s %s: fel vid skrivning av versionspost: %s %s: misslyckades med att lägga till en post: %s %s: misslyckades med att skapa kontrollsummetabell: %s %s: misslyckades med att skapa versionspost: %s%s: misslyckades med att nollställa en post: %s %s: ogiltig filversion %d %s: ogiltig tillitsdatabas %s: ogiltig tillitsdatabas skapad %s: nyckelring skapad %s: detta är inte en tillitsdatabasfil %s: hoppade över: %s %s: hoppades över: publik nyckel finns redan %s: hoppades över: den publika nyckeln är inaktiverad %s: tillitsdatabas skapad %s: okänt suffix %s: versionspost med postnummer %lu %s:%d: alternativet är föråldrat "%s" %s:%d: ogiltig auto-key-locate-lista %s:%d: ogiltiga exportflaggor %s:%d: ogiltiga importeringsflaggor %s:%d: ogiltiga flaggor för nyckelserver %s:%d: ogiltiga listflaggor %s:%d: ogiltiga flaggor för validering %u-bitars %s-nyckel, id %s, skapad %s(Ingen beskrivning angiven) (Troligen vill du välja %d här) (Detta är en känslig spärrnyckel) (känsligt)(om du inte anger nyckeln med hjälp av fingeravtrycket) (du kanske använder fel program för den här uppgiften) * Kommandot "sign" kan inledas med ett "l" för lokal signaturer (lsign), ett "t" för tillitssignaturer (tsign), ett "nr" för icke-sprärrbara signaturer (nrsign), eller en kombination av dessa (ltsign, tnrsign, etc.). --clearsign [filnamn]--decrypt [filnamn]--edit-key användaridentitet [kommandon]--encrypt [filnamn]--lsign-key användaridentitet--output kan inte användas för detta kommando --sign --encrypt [filnamn]--sign --symmetric [filnamn]--sign [filnamn]--sign-key användaridentitet--store [filnamn]--symmetric --encrypt [filnamn]--symmetric --sign --encrypt [filnamn]--symmetric [filnamn]-k[v][v][v][c] [användaridentitet] [nyckelring]... det här är ett fel (%s:%d:%s) 1 felaktig signatur 1 signatur validerades inte eftersom nyckeln saknades 1 signatur validerades inte eftersom ett fel uppstod 1 användaridentitet utan giltig självsignatur hittades 15@ (Se manualsidan för en fullständig lista över alla kommandon och flaggor) @ Exempel: -se -r Bosse [fil] signera och kryptera för användaren Bosse --clearsign [fil] skapa en klartextsignatur --detach-sign [fil] skapa signatur i en separat fil --list-keys [namn] visa nycklar --fingerprint [namn] visa fingeravtryck @ Flaggor: @Kommandon: utdata med ett ascii-skal genomdrivet. Administrationskommandon tillåts Administrationskommandon tillåts inte Kommandon endast för administratör Svara "ja" (eller bara "j") om du vill generera denna undernyckel.Svara "ja" om du vill ta bort denna undernyckelSvara "ja" om du vill skriva över filenSvara "ja" om du verkligen vill ta bort denna användaridentitet. Alla certifikat kommer att gå förlorade!Svara "ja" om du vill signera ALLA användaridentiteterSvara "ja" eller "nej"Är du verkligen säker på att du vill signera denna nyckel med din nyckel "%s" (%s) Vill du verkligen fortfarande lägga till den? (j/N) Är du säker på att du fortfarande vill spärra den? (j/N)Vill du verkligen fortfarande signera den? (j/N)Är du säker på att du vill använda den här nyckeln för spärrning? (j/N) Är du säker på att du vill ta bort det? (j/N) Är du säker på att du vill ersätta det? (j/N) Vill du verkligen använda den? (j/N)? AutentiseraFELAKTIG signatur från "%s"CA-fingeravtryck: CRC-fel; %06lX - %06lX Kan inte kontrollera signaturen: %s Kan inte redigera denna nyckel: %s Kan inte öppna "%s": %s AvbrytKortinnehavarens förnamn: Kortinnehavarens efternamn: Certifikat som leder till en nyckel med förbehållslöst förtroende: CertifieraÄndra (N)amn, (K)ommentar, (E)post eller (O)k/(A)vsluta? Ändra (N)amn, (K)ommentar, (E)post eller (A)vsluta? Ändra dina inställningar för alla användaridentiteter (eller enbart de valda) till den aktuella listan på inställningar. Tidsstämplingen för alla påverkade självsignaturer kommer att flyttas fram en sekund. Ändrar utgångstid för en undernyckel. Ändrar giltighetstid för den primära nyckeln. Chiffer: Kommandot förväntar ett filnamnsargument Kommentar: Komprimering: Skapa ett spärrcertifikat för denna nyckel? (j/N) Skapa ett spärrcertifikat för denna nyckel? (j/N) Vill du skapa ett spärrcertifikat för denna signatur? (j/N)Föredragen kritisk nyckelserver: Kritisk signaturnotation: Viktig signaturpolicy: För närvarande tillåtna åtgärder: Nuvarande mottagare: DSA-nyckeln %s kräver en hash med %u bitar eller större DSA-nyckeln %s använder en osäker hash (%u bitar) DSA kräver att hashlängden är delbar med 8 bitar Vill du radera denna korrekta signatur? (j/N/a)Vill du radera denna ogiltiga signatur? (j/N/a)Ta bort denna nyckel från nyckelringen? (j/N) Vill du radera denna okända signatur? (j/N/a)Raderade %d signatur. Raderade %d signaturer. Signatur i en separat fil. Sammandrag: Visar %s foto-id med storleken %ld för nyckeln %s (uid %d) Vill du verkligen ta bort de valda nycklarna? (j/N) Vill du verkligen ta bort denna nyckel? (j/N) Vill du verkligen göra detta? (j/N) Vill du verkligen spärra hela nyckeln? (j/N) Vill du verkligen spärra de valda undernycklarna? (j/N) Vill du verkligen spärra denna undernyckel? (j/N) Vill du verkligen ge denna nyckel förbehållslöst förtroende? (j/N) Vill du skapa en ny signatur som ersätter den vars giltighetstid gått ut? (J/n) Vill du ändra den till en fullständig exporterbar signatur? (j/N) Vill du göra om den till en självsignatur av OpenPGP-typ? (j/N) Vill du verkligen signera den igen ändå?(j/N)Vill du att giltighetstiden för signaturen ska upphöra vid samma tid? (J/n) FEL: E-postadress: KrypteraAnge Admin PIN-kod: Skriv JPEG-filnamnet för foto-id: Ange ny Admin PIN-kod: Ange ny PIN-kod: Ange PIN-kod: Ange en beskrivning (frivilligt); avsluta med en tom rad: Ange nytt filnamnAnge nummer, N)ästa, eller Q) för Avsluta > Ange lösenfrasen Ange lösenfras: Ange namnet på nyckelns ägareSkriv in den nya lösenfrasen för den hemliga nyckeln. Ange notationen: Ange värdet som krävs som det visas vid prompten. Det är möjligt att ange ett ISO-datum (ÅÅÅÅ-MM-DD) men du kommer inte att få något vettigt felmeddelande - istället kommer systemet att försöka tolka det angivna värdet som ett intervall.Ange storleken på nyckelnAnge användaridentiteten för den adressat du vill skicka meddelandet till.Ange användaridentiteten för spärrnyckeln: Ange din föredragna nyckelserver-url: Fel vid läsning av säkerhetskopierad nyckel från "%s": %s Fel: Fullständigt namn för långt (gränsen är %d tecken). Fel: Dubbla blanksteg tillåts inte. Fel: Inloggningsdata är för långt (gräns är %d tecken). Fel: Endast ren ASCII tillåts för närvarande. Fel: Privat DO för långt (gränsen är %d tecken). Fel: Tecknet "<" får inte användas. Fel: URL:en är för lång (gränsen är %d tecken). Fel: ogiltiga tecken i inställningssträngen. Fel: ogiltigt formaterat fingeravtryck. Fel: ogiltig längd på inställningssträngen Fel: ogiltigt svar. Utgången signatur från "%s"Funktioner: Filen "%s" finns. Ange namnet på den fil signaturen gällerSkriv ditt meddelande här ... Korrekt signatur från "%s"Kontrollsumma: Tips: Välj de användaridentiteter som du vill signera Tryck Return när du är färdig eller "c" för att avbryta: Hur noga har du kontrollerat att nyckeln du ska signera verkligen tillhör personen som nämns ovan? Om du inte vet vad du ska svara, svara "0". Hur mycket litar du på att nyckeln faktiskt tillhör den angivna användaren? Jag har gjort viss kontroll av denna nyckel. Jag har gjort en noggrann kontroll av denna nyckel. Jag har inte kontrollerat denna nyckel alls. IDEA-kryptering inte installerad. Optimistiskt försök att använda %s istället Om du vill kan du ange en text som beskriver varför du utfärdar detta spärrcertifikat (revocation certificate). Försök att hålla texten kort och koncis. En tom rad avslutar texten. Om du vill använda denna otillförlitliga nyckel ändå, svara "ja".Som regel är det ingen bra idé att använda samma nyckel för signering och kryptering. Denna algoritm ska endast användas inom särskilda områden. Rådgör med din egen säkerhetsexpert först!Ogiltigt tecken i kommentaren Ogiltigt tecken i namnet Ogiltigt kommando (försök med "help") Ogiltiga nyckeln %s tvingades till giltig med --allow-non-selfsigned-uid Ogiltig lösenfras; försök igenOgiltigt val. Stämmer detta? (j/N) Är detta OK? (j/N) Är detta foto korrekt (j/N/a)? Det är INTE säkert att nyckeln tillhör den namngivna personen i. användaridentiteten. Om du *verkligen* vet vad du gör, kan du svara ja på nästkommande fråga. Det är upp till dig att ange ett värde här. Detta värde kommer aldrig att exporteras till någon tredje part. Vi behöver det för att implementera "Web of trust". Det har inget att göra med det (implicit skapade) nätet av certifikat.Nyckeln %s är redan spärrad. Nyckeln tillgänglig hos: Nyckeln går aldrig ut Nyckeln går ut %s Skapandet av nycklar avbröts. Nyckelgenereringen misslyckades: %s Nyckeln har tappat sin säkerhetNyckeln har endast en stump eller nyckelobjekt på kortet - ingen lösenfras att ändra. Nyckeln används inte längreNyckeln är skyddad. Nyckeln är spärrad.Nyckeln är ersattFör hur lång tid ska nyckeln vara giltig? (0) Nyckeln är oförändrad så det behövs ingen uppdatering. NyckelringNyckelserver no-modifySpråkinställningar: Inloggningsdata (kontonamn): Skapa säkerhetskopia av krypteringsnyckel utanför kortet? (J/n) N för att ändra namnet. C för att ändra kommentaren. E för att ändra e-postadressen. O för att fortsätta med nyckelgenerering. Q för att avsluta nyckelgenereringen.OBSERVERA: %s är inte tillgänglig i den här versionen OBS: %s är inte för normal användning! OBS: Denna nyckel är oskyddad! OBSERVERA: serienumret för en nyckel stämmer inte med kortets serienummer OBSERVERA: säkerhetskopia av kortnyckeln sparades i "%s" OBS: att skapa undernycklar till v3-nycklar bryter mot OpenPGP OBSERVERA: nyckeln har spärratsOBS: inställningsfilen "%s" saknas OBS: den gamla inställningsfilen "%s" används inte OBSERVERA: primärnyckeln är ansluten och lagrad på kort OBSERVERA: sekundärnyckeln är ansluten och lagrad på kort OBSERVERA: hemliga nyckeln %s gick ut %s OBS: avsändaren begärde "endast-för-dina-ögon" OBSERVERA: signaturnyckeln %s gick ut %s OBS: enkelt S2K-läge (0) rekommenderas inte OBS: det går inte att skriva till tillitsdatabasen Namnet får inte börja med en siffra Namnet måste vara åtminstone 5 tecken långt Den hemliga nyckeln behövs för att göra detta. NnKkEeOoAaDet finns ingen motsvarande signatur i den hemliga nyckelringen Det finns ingen hjälp tillgängligDet finns ingen hjälp tillgänglig för "%s"Ingen anledning har angivitsIngen undernyckel med indexet %d Inget sådan användaridentitet. Inget tillitsvärde tilldelat till: Inget användaridentitet med hashen %s Inget användaridentitet med indexet %d E-postadressen är ogiltig Notationer: Observera att denna nyckel inte kan användas för kryptering. Du kanske vill använda flaggan "--edit-key" för att skapa en undernyckel för detta syfte. Observera: Signerarens adress "%s" matchar inte DNS-objektet Obs: Denna nyckel har stängts av. Obs: Giltighetstiden för denna nyckel har gått ut! Observera: Validerad adress för signeraren är "%s" Ingenting raderat. Det finns inget att signera med nyckeln %s OpenPGP-kort nr. %s identifierades OpenPGP-kort är inte tillgängligt: %s Skriv över? (j/N) Ägartillit får inte ställas in när en tillitsdatabas används som användaren tillhandahåller PIN-återanrop returnerade fel: %s PIN-kod för CHV%d är för kort; minimumlängd är %d PIN-kod repeterades inte korrekt; försök igenRätta först felet Bestäm hur mycket du litar på denna användare när det gäller att korrekt validera andra användares nycklar (genom att undersöka pass, undersöka fingeravtryck från olika källor, etc.) Ange inte e-postadressen som namn eller kommentar Ange en domän för att begränsa denna signatur. eller Enter för ingen. Ange ett nytt filnamn. Om du bara trycker RETUR kommer standarfilnamnet (som anges i hakparenteser) att användas.Ange en kommentar (frivilligt)Ange namnet på datafilen: Ange djupet för den här tillitssignaturen. Ett djup större än 1 tillåter att nyckeln som du signerar kan skapa tillitssignaturer åt dig. Ange en lösenfras. Detta är en hemlig mening Lös detta potentiella säkerhetsproblem Mata in kortet och tryck Return eller "c" för att avbryta: Observera dock att fabriksinställningarna för PIN-koderna är PIN-kod = "%s" Admin PIN-kod = "%s" Du bör ändra dem med kommandot --change-pin Observera! Den visade nyckelgiltigheten kan vara felaktig såvida inte du startar om programmet. Tag bort markeringar från de hemliga nycklarna. Ersätt det nuvarande kortet med det kort som har serienumret: %.*s Repetera sista lösenfrasen, så du är säker på vad du skrev in.Rapportera fel till Skicka synpunkter på översättningen till Välj som mest en undernyckel. Välj endast en användaridentitet. Välj anledning till varför nyckeln spärras: Välj vilken typ av nyckel som ska genereras: Välj vilken typ av nyckel du vill ha: Välj var nyckeln ska sparas: Specificera hur länge nyckeln skall vara giltig. 0 = nyckeln blir aldrig ogiltig = nyckeln blir ogiltig efter n dagar w = nyckeln blir ogiltig efter n veckor m = nyckeln blir ogiltig efter n månader y = nyckeln blir ogiltig efter n år Specificera hur länge nyckeln skall vara giltig. 0 = signaturen blir aldrig ogiltig = signaturen blir ogiltig efter n dagar w = signaturen blir ogiltig efter n veckor m = signaturen blir ogiltig efter n månader y = signaturen blir ogiltig efter n år Använd kommandot "toggle" först. Var god vänta, entropidata samlas in. Arbeta lite om det hjälper dig från att bli uttråkad, det förbättrar kvaliteten på insamlat entropidata. Möjliga åtgärder för en %s-nyckel: Föredragen nyckelserver: Primära nyckelns fingeravtryck:Privat DO-data: Fortsätt? (j/N) Publik nyckel: Den publika nyckeln är inaktiverad. Avsluta utan att spara? (j/N) RSA modulus saknas eller är inte %d bitar stor RSA-primtal %s saknas eller inte %d bitar stor Publik RSA-exponent saknas eller större än %d bitar Namn: Vill du verkligen skapa spärrcertifikatet? (j/N) Verkligen skapa? (j/N) Verkligen ta bort denna självsignatur? (j/N)Verkligen flytta den primära nyckeln? (j/N) Verkligen ta bort alla valda användaridentiteter? (j/N) Verkligen ta bort denna användaridentitet? (j/N) Verkligen spärra alla valda användaridentiteter? (j/N) Verkligen spärra denna användaridentitet? (j/N) Verkligen signera alla användaridentiteter? (j/N) Verkligen signera? (j/N) Vill du verkligen uppdatera inställningarna för valda användaridentiteter? (j/N) Vill du verkligen uppdatera inställningarna? (j/N) Anledning för spärrning: %s Repetera lösenfrasen Repetera lösenfrasen: Upprepa denna PIN-kod: Ersätt existerande nyckel? (j/N) Ersätt existerande nycklar? (j/N) Den efterfrågade nyckelstorleken är %u bitar Spärrcertifikat skapat. Spärrcertifikat skapat. Var vänlig flytta det till ett media du kan gömma; om Mallory får tillgång till detta certifikatet kan han göra din nyckel oanvändbar. Det är klokt att skriva ut detta certifikat och gömma det, ifall ditt media blir oläsligt. Men se upp: Utskriftsfunktionen på din dator kan spara data så att det blir åtkomligt för andra! Spara ändringar? (j/N) Den hemliga nyckeln finns tillgänglig. De hemliga delarna av den primära nyckeln är inte tillgängliga. Hemliga delar av den primära nyckeln är lagrade på kortet. Välj vilken algoritm som ska användas. DSA (även känd som DSS) är Digital Signature Algorithm och kan endast användas för signaturer. Elgamal är en algoritm som endast kan användas för kryptering. RSA kan användas för signaturer eller kryptering. Första (primär) nyckel måste alltid vara en nyckel som är kapabel att signera.Ställ in inställningslista till: Kön ((M)an, Kvinna(F) eller blanksteg): SigneraSignera den? (j/N) Signaturen går aldrig ut Giltighetstiden för signaturen har upphört %s Giltighetstiden för signaturen går ut %s Signaturen går ut %s Signaturen är giltig hur länge? (%s) Signatur gjord %s Signatur gjordes %s med %s nyckel-id %s Signaturnotation: Signaturpolicy: SsKkAaQqUndernyckeln %s är redan spärrad. Syntax: gpg [flaggor] [filer] signera, kontrollera, kryptera eller dekryptera standardåtgärden beror på inmatningsdata Minimum tillitsnivå för denna nyckel är: %s Slumptalsgeneratorn är endast en temporär lösning - den är inte på något sätt en stark slumptalsgenerator! ANVÄND INTE DATA SOM GENERERATS AV DETTA PROGRAM!! Självsignaturen på "%s" är en signatur av PGP 2.x-typ. Denna signatur är inte giltig. Det är rimligt att ta bort den från din nyckelring.Signaturen kommer att markeras som icke-exporterbar. Signaturen kommer att märkas som icke möjlig att spärra. Du kan inte ange några inställningar för en användaridentitet av PGP 2.x-typ. Den här JPEG-bilden är verkligen stor (%d byte)! Detta kommando är inte tillåtet när du är i %s-läge. Detta är en hemlig nyckel! - verkligen ta bort den? (j/N) Detta är en signatur som knyter användaridentiteten till denna nyckel. Det är oftast inte en bra idé att ta bort en sådan signatur. Till och med kan det bli så att GnuPG kanske inte kan använda denna nyckel mer. Så gör bara detta om denna självsignatur av någon anledning är ogiltig och det finns en andra signatur som tillgänglig.Detta är en giltig signatur på nyckeln. Normalt sett vill du inte ta bort denna signatur eftersom den kan vara viktig för att skapa en tillitskoppling till nyckeln eller en annan nyckel som är certifierad av denna nyckel.Denna nyckel tillhör oss Denna nyckel har stängts avGiltighetstiden för denna nyckel har gått ut!Denna nyckels giltighetstid går ut vid %s. Denna nyckel är inte skyddad. Den här nyckeln kan vara spärrad av %s nyckel %sDen här nyckel tillhör antagligen den namngivna användaren Den här nyckeln blev spärrad den %s av %s nyckel %s Denna signatur kan inte valideras eftersom du inte har den motsvarande nyckeln. Du bör vänta med att ta bort den tills du vet vilken nyckel som användes eftersom den nyckeln kanske upprättar en tillitskoppling genom en annan redan certifierad nyckel.Denna signatur gick ut den %s. Detta kommer att bli en självsignatur. Detta skulle göra nyckeln oanvändbar i PGP 2.x. Kommer att spärras av: För att kunna bygga förtroendeväven "Web-of-Trust", måste GnuPG veta vilka nycklar som du litar förbehållslöst på - det är vanligen de nycklar som du disponerar den hemliga nyckeln för. Svara "ja" för att markera att du litar förbehållslöst på denna nyckel. Totalt antal behandlade enheter: %lu Url för att hämta publik nyckel: OkomprimeradOkänd signaturtyp "%s" Användning: gpg [flaggor] [filer] (-h för hjälp)Användning: gpgv [flaggor] [filer] (-h för hjälp)Vill du använda nyckeln ändå? (j/N) Användaridentiteten "%s" komprimerad: %s Giltighetstiden för användaridentiteten "%s" har gått ut.Användaridentiteten "%s" är inte självsignerad.Användaridentiteten "%s" är spärrad.Användaridentiteten "%s" är signerbar. Användaridentiteten "%s": %d signatur borttagen Användaridentiteten "%s": %d signaturer borttagna Användaridentitet "%s": redan rensad Användaridentiteten "%s": redan minimerad Användaridentiteten är inte längre giltigVARNING: VARNING: "%s" är ett föråldrat kommando - använd det inte VARNING: inställningen "%s" är föråldrad VARNING: %s gäller istället för %s VARNING: det finns 2 filer med konfidentiell information. VARNING: Elgamal-nycklar för signering/kryptering är föråldrade VARNING: Detta är en PGP 2.x-nyckel. Om du lägger till en spärrnyckel kan denna nyckel inte användas i vissa versioner av PGP. VARNING: Detta är en nyckel av PGP2-typ. Om du lägger till ett foto-id kan vissa versioner av PGP avvisa denna nyckel. VARNING: Denna nyckel har spärrats med sin spärrnyckel! VARNING: Denna nyckel har spärrats av sin ägare! VARNING: Denna nyckel är inte certifierad med en pålitlig signatur! VARNING: Denna nyckel är inte certifierad med signaturer med ett tillräckligt högt tillitsvärde! VARNING: Denna undernyckel har spärrats av sin ägare! VARNING: Använder en nyckel som inte är betrodd! VARNING: Vi litar INTE på denna nyckel! VARNING: Upptäckte en svag nyckel - byt lösenfras igen. VARNING: "%s" är en tom fil VARNING: en signatur på en användaridentitet är daterad %d sekunder in i framtiden VARNING: det går aldrig att ångra om du utser en spärrnyckel! VARNING: chifferalgoritmen %s hittades inte i mottagarinställningarna VARNING: sammandragsalgoritmen %s är föråldrad VARNING: det krypterade meddelandet har ändrats! VARNING: tvinga komprimeringsalgoritmen %s (%d) strider mot mottagarinställningarna VARNING: tvinga sammandragsalgoritmen %s (%d) strider mot mottagarinställningarna VARNING: tvinga symmetriskt chiffer med %s (%d) strider mot mottagarinställningarna VARNING: ogiltig storlek på filen random_seed - används inte VARNING: nyckeln %s innehåller inställningar för otillgänglig VARNING: nyckeln %s kan ha spärrats: hämtar spärrnyckeln %s VARNING: nyckeln %s kan ha spärrats: spärrnyckeln %s saknas. VARNING: nyckelserverhanteraren från en annan version av GnuPG (%s) VARNING: nyckelserverflaggan "%s" används inte på den här plattformen VARNING: meddelandet krypterades med en svag nyckel i den symmetriska krypteringen. VARNING: detta meddelande var inte integritetsskyddat VARNING: multipla klartexter sedda VARNING: multipla signaturer upptäckta. Endast den första kommer att kontrolleras. VARNING: ingen användaridentitet har markerats som primär. Detta kommando kan göra att en annan användaridentitet antas vara den primära identiteten. VARNING: ingenting exporterat VARNING: inställningar i "%s" är ännu inte aktiva under denna körning VARNING: potentiellt osäker symmetriskt krypterad sessionsnyckel VARNING: programmet kan komma att skapa en minnesavbild! VARNING: mottagare (-r) angivna utan att använda publik nyckel-kryptering VARNING: hemliga nyckeln %s har ingen enkel SK-kontrollsumma VARNING: konflikt mellan signatursammandrag i meddelandet VARNING signeringsundernyckel %s har en ogiltig korscertifiering VARNING: signeringsundernyckeln %s är inte korscertifierad VARNING: signaturen kommer inte att markeras som icke-exporterbar. VARNING: signaturen kommer att markeras som icke-spärrbar. VARNING: denna nyckel kan ha spärrats (spärrnyckeln saknas) VARNING: kan inte %%-expandera anteckning (för stor). Använder den utan expansion. VARNING: kunde inte %%-expandera policy-url (för stor). Använder oexpanderad. VARNING: kunde inte %%-expandera url för föredragen nyckelserver (för stor). Använder oexpanderad. VARNING: kunde inte hämta uri:n %s: %s VARNING: kunde inte tolka uri:n %s VARNING: kunde inte uppdatera nyckeln %s via %s: %s VARNING: kunde inte ta bort temp-katalogen "%s": %s VARNING: kan inte ta bort tempfil (%s) "%s": %s VARNING: osäkert ägarskap på inneslutande katalog för konfigurationsfilen "%s" VARNING: osäkert ägarskap på inneslutande katalog för hemkatalogen "%s" VARNING: osäkra rättigheter på inneslutande katalog för konfigurationsfilen "%s" VARNING: osäkra rättigheter på inneslutande katalog för hemkatalogen "%s" VARNING: osäkert ägarskap på konfigurationsfilen "%s" VARNING: osäkert ägarskap på hemkatalogen "%s" VARNING: osäkra rättigheter på konfigurationsfilen "%s" VARNING: osäkra rättigheter på hemkatalogen "%s" VARNING: använder experimentella chifferalgoritmen %s VARNING: använder experimentella sammandragsalgoritmen %s VARNING: använder experimentella algoritmen %s för publik nyckel VARNING: använder osäkert minne! VARNING: använder en osäker slumptalsgenerator!! Vi behöver generera ett stor mängd slumpmässig data. Det är en bra idé att göra något annat (skriva på tangentbordet, röra musen, använda hårddisken) under primtalsgenereringen; detta ger slumptalsgeneratorn en större chans att samla ihop en tillräcklig mängd entropidata. Vilken nyckelstorlek vill du ha? (%u) När du signerar en användaridentitet på en nyckel, måste du först kontrollera att nyckeln verkligen tillhör den person som nämns i användaridentiteten. Det är viktigt för andra att få veta hur noga du har kontrollerat detta. "0" betyder att du inte påstår någonting om hur noga du kontrollerat nyckeln. "1" betyder att du tror att nyckeln tillhör den person som påstår sig göra det men du kunde inte, eller ville inte kontrollera nyckeln alls. Detta är användbart för en "persona"-kontroll, där du signerar nyckeln för en användare med pseudonym. "2" betyder att du gjorde viss kontroll av nyckeln. Det kan t.ex. betyda att du kontrollerade fingeravtrycket och kontrollerade användaridentiteten för nyckeln mot en fotolegitimation. "3" betyder att du gjorde en noggrann och uttömmande kontroll av nyckeln. Detta kan t.ex. betyda att du kontrollerade nyckelns fingeravtryck direkt med nyckelinnehavaren och att du kontrollerade, med hjälp av svårförfalskade identitetsdokument a med foto (t.ex. ett körkort) att namnet på innehavaren stämmer med namnet i användaridentiteten på nyckeln, och slutligen att du kontrollerade att (genom att utväxla e-postmeddelanden) att e-postadressen på nyckeln tillhör nyckelinnehavaren. Observera! Ovanstående exempel för nivåerna 2 och 3 är bara förslag. Slutligen är det bara du själv som avgör vad "viss" and "noggrann" betyder när du signerar andras nycklar. Om du inte vet vad du ska svara, så svara "0".Du är på väg att spärra dessa signaturer: Du använder teckentabellen "%s" Du kan inte ändra giltighetsdatum för en v3-nyckel Du kan inte ta bort den sista användaridentiteten! Du angav ingen användaridentitet. (du kan använda "-r") Du vill inte ha någon lösenfras - detta är möjligen en *dålig* idé! Du vill inte ha någon lösenfras - det är möjligen en *dålig* idé! Jag kommer att göra det ändå. Du kan ändra din lösenfras när som helst om du använder detta program med flaggan "--edit-key". Du har signerat följande användaridentiteter med nyckeln %s: Du får inte lägga till en spärrnyckel för en PGP 2.x-nyckel. Du kan inte lägga till ett foto-id till en nyckel av PGP 2-typ. Du kan inte göra en OpenPGP-signatur på en PGP 2.x-nyckel när du är i --pgp2-läge Du måste välja åtminstone en nyckel. Du måste välja åtminstone en användaridentitet. Du måste välja exakt en nyckel. Du behöver en lösenfras för att skydda din hemliga nyckel Du behöver en lösenfras för att låsa upp den hemliga nyckeln för användaren: "%s" Du behöver en lösenfras för att låsa upp den hemliga nyckeln för användaren: "%.*s" %u-bitars %s-nyckel, id %s, skapad %s%s Du valde följande användaridentitet: "%s" Du borde ange en anledning till spärrningen. Beroende på sammanhanget har du möjlighet att välja från följande lista: "Nyckeln har tappat sin säkerhet" Använd denna om du har anledning att tro att icke-auktoriserade personer har fått tillgång till din hemliga nyckel. "Nyckeln har ersatts" Använd denna om du har ersatt denna nyckel med en nyare. "Nyckeln används inte längre" Använd denna om du har pensionerat denna nyckel. "Användaridentiteten är inte längre giltig" Använd denna för att visa att denna användaridentitet inte längre skall användas. Detta används normalt för att visa att en e-postadress är ogiltig. Giltighetstiden för din nuvarande signatur på "%s" har gått ut. Din nuvarande signatur på "%s" är en lokal signatur. Vad väljer du? Vad väljer du? Ditt val? (skriv "?" för mer information): Ditt system kan inte visa datum senare än år 2038. Datum fram till år 2106 kommer dock att hanteras korrekt. [ fullständig ][ odefinierad ][ utgånget ][ spärrad ][ okänt ][Användaridentiteten hittades inte][filnamn][ marginell ][inte inställt][spärr][självsignatur][förbehållslös][osäkert]"%s" är redan komprimerad "%s" är inte en JPEG-fil "%s" är inte en vanlig fil - ignoreras "%s" är ingen giltig teckentabell "%s" är inget giltigt långt nyckel-id "%s" är inte ett giltigt utgångsdatum för en signatur på väg att exportera en oskyddad undernyckel åtkomst till administrationskommandon är inte konfigurerat åtgärden "%s" stöds inte med nyckelserverschemat "%s" lägg till en nyckel till ett smartkortlägg till ett foto-idlägg till en spärrnyckellägg till en undernyckellägg till en användaridentitettvetydlig flagga "%s" anonym mottagare; provar med den hemliga nyckeln %s ... ASCII-skal: ASCII-skal: %s antar att %s krypterade data antar felaktig signatur från nyckeln %s på grund av en okänd kritisk bit antar att signerad data finns i filen "%s" hämta automatiskt nycklar vid validering av signaturerhämtade "%s" automatiskt via %s felaktig MPIfelaktig urifelaktigt certifikatfelaktig nyckelfelaktig lösenfrasfelaktig publik nyckelfelaktig hemlig nyckelfelaktig signaturvar något tystarebinärbuild_packet misslyckades: %s aAsSmellanlagrar nyckelringen "%s" kan inte komma åt %s - ogiltigt OpenPGP-kort? kan inte komma åt "%s": %s kan inte stänga "%s": %s kan inte ansluta till "%s": %s kan inte skapa "%s": %s kan inte skapa säkerhetskopian "%s": %s %s: kan inte skapa katalog: %s kan inte skapa lås för "%s" kan inte stänga av minnesutskrifter: %s kan inte göra detta i satsläge kan inte göra så i satsläge utan "--yes" kan inte generera primtal med pbits=%u qbits=%u kan inte generera ett primtal med mindre än %d bitar kan inte hantera algoritmen %d för publika nycklar kan inte hantera text med rader längre än %d tecken kan inte hantera detta tvetydliga signaturdata kan inte låsa "%s" kan inte låsa "%s": %s kan inte öppna "%s" kan inte öppna "%s": %s kan inte öppna signerat data "%s" kan inte öppna nyckelringenkan inte fråga om lösenfras i satsläge kan inte läsa "%s": %s kan inte ta status på "%s": %s kan inte använda symmetriska ESK-paket pga S2K-läge kan inte skriva "%s": %s avbrutenavbruten av användaren avbryt|stoppadet går inte att använda en PGP 2.x-nyckel som spärrnyckel kan inte undvika en svag nyckel för symmetrisk kryptering; försökte %d gånger! kortet har inte stöd för sammandragsalgoritmen %s kortet är permanent låst! kortläsaren är inte tillgänglig kortnummer: ändra url för att hämta nyckeländra ett CA-fingeravtryckändra PIN-kod för ett kortändra kortinnehavarens namnändra kortinnehavarens könändra data på ett kortändra utgångsdatumet för nyckeln eller valda undernycklarändra språkinställningarnaändra inloggningsnamnetändra ägartillitsvärdetändra lösenfrasenkontrollera signaturerkontroll av den skapade signaturen misslyckades: %s kontrollerar tillitsdatabasen fel i kontrollsummakrypteringsalgoritmen %d%s är okänd eller inaktiverad kolon saknaskomprimera oanvändbara användaridentiteter och ta bort alla signaturer från nyckelnkomprimera oanvändbara användaridentiteter och ta bort oanvändbara signaturer från nyckelnvariabeln "completes-needed" måste ha ett värde som är större än 0 motstridiga kommandon kunde inte tolka url till nyckelserver skapa en publik nyckel när en hemlig nyckel importerasskapa utdata med ett ascii-skalskapat: %stidsstämpel för skapandet saknas data sparades inte, använd flaggan "--output" för att spara det misslyckades med att ta bort ASCII-skalet: %s dekryptera data (standard)dekrypteringen misslyckades: %s dekrypteringen lyckades ta bort valda undernycklarta bort valda användaridentiteterta bort signaturer från valda användaridentitetermisslyckades med att radera nyckelblock: %s djup: %d giltig: %3d signerad: %3d tillit: %d-, %dq, %dn, %dm, %df, %du katalogen "%s" skapades inaktivera nyckelinaktiveradvisa foto-id vid nyckellistningvisa foto-id vid signaturvalideringta inte bort temporärfiler efter de använtsgör inga ändringaruppdatera inte tillitsdatabasen efter importeringöka tillit på signaturer med giltigt PKA-dataaktivera nyckelmisslyckades med att skapa ASCII-skal: %s kryptera datakrypterad med %lu lösenfraser krypterad med %s-nyckel, id %s krypterad med %u-bitars %s-nyckel, id %s, skapad %s krypterad med with 1 lösenfras krypterad med en okänd algoritm %d kryptering av meddelanden i --pgp2-läge kräver IDEA-chiffret endast symmetrisk krypteringFel när "%s" skapades: %s fel när nyckelringen "%s" skapades: %s fel när lösenfras skapades: %s fel vid sökning av tillitsvärde i "%s": %s fel när aktuell nyckelinformation hämtades: %s fel när ny PIN-kod hämtades: %s fel i "%s": %s fel i avslutande rad fel vid läsning av "%s": %s fel vid läsning av programdata fel vid läsning av fingeravtryckets DO fel vid läsning av nyckelblock: %s fel vid läsning av hemligt nyckelblock "%s": %s fel när CHV-status hämtades från kortet fel vid skrivning av nyckelringen "%s": %s fel vid skrivning av publika nyckelringen "%s": %s fel vid skrivning av hemliga nyckelringen "%s": %s befintlig nyckel kommer att ersättas utgångetutgånget: %sgår ut: %sexportera attribut i användaridentiteter (vanligtvis foto-id)exportera nycklarexportera nycklar till en nyckelserverexportera spärrnycklar markerade som "känslig"exportera signaturer som är märkta som endast lokalaexport av hemliga nycklar tillåts inte externa anrop till nyckelserver stöds inte i detta bygge anrop av externa program är inaktiverat pga osäkra behörigheter för inställningsfilen misslyckades med att initialisera tillitsdatabasen: %s misslyckades med att återskapa nyckelringscache: %s misslyckades med att lagra datum för skapandet: %s misslyckades med att lagra fingeravtrycket: %s misslyckades med att lagra nyckeln: %s misslyckades med att ta bort skydd på undernyckel: %s kvinnahämta nyckel som anges i kortets urlfel vid stängning av filfel när filen skapadesfel vid borttagning av filfilen finnsfel vid öppning av filfel vid läsning av filfel vid namnbyte av filfel vid skrivning av filflagga vald användaridentitet som primärtvingadtvinga symmetriskt chiffer med %s (%d) strider mot mottagarinställningarna fstat för "%s" misslyckades i %s: %s fstat(%d) misslyckades i %s: %s fullständigallmänt felgenerera PGP 2.x-kompatibla meddelandengenerera ett nytt nyckelpargenerera ett spärrcertifikatgenerera nya nycklarnyckelgenereringen misslyckades genererar ny nyckel skapar den föråldrade 16-bit kontrollsumman för skydd av den hemliga nyckeln kunde inte få tillgång till GPG-Agent i denna session GPG-Agent protokoll version %d stöds inte respektera PKA-posten inställd på en nyckel när nycklar hämtasrespektera föredragen nyckelserver-url inställd i nyckelniImHhAsSimportera nycklar från en nyckelserverimportera signaturer som är markerade som endast lokalaimportera/slå samman nycklarimport av hemliga nycklar tillåts inte inkludera spärrade nycklar i sökresultatetinkludera undernycklar vid sökning efter nyckel-idraden %u är för lång, eller saknar nyradstecken indataraden är längre än %d tecken ogiltigtogiltigt S2K-läge; måste vara 0, 1 eller 3 ogiltigt argumentogiltigt ascii-skalogiltig rubrikrad i ASCII-skalet: ogiltigt ASCII-skal: raden är längre än %d tecken ogiltig auto-key-locate-lista ogiltig rubrikrad i klartextsignatur ogiltig rad som börjar med bindestreck: ogiltiga standardinställningar ogiltigt standardvärde för certifieringsnivån; måste vara 0, 1, 2 eller 3 ogiltiga exportinställningar ogiltigt fingeravtryckogiltig kontrollsummealgoritm "%s" ogiltiga importflaggor ogiltig post "%s" i inställningssträngen ogiltig nyckelringogiltiga flaggor för nyckelserver ogiltigt nyckelserverprotokoll (vi %d!=hanterare %d) ogiltiga listflaggor ogiltigt minimivärde för certifieringsnivån; måste vara 1, 2 eller 3 ogiltigt paketogiltig lösenfrasogiltig inställning av föredragna krypteringsalgoritmer ogiltig inställning av föredragna kompressionsalgoritmer ogiltig inställning av föredragna kontrollsummealgoritmer ogiltigt radix64-tecken %02X hoppades över ogiltigt rotpaket hittades i proc_tree() ogiltig struktur för OpenPGP-kort (DO 0x93) ogiltigt värde ogiltiga flaggor för validering det rekommenderas starkt att du uppdaterar dina inställningar nyckeln "%s" hittades inte på nyckelservern nyckeln "%s" hittades inte: %s nyckeln %s innehåller inga användaridentiteter nyckeln %s är markerad med förbehållslöst förtroende nyckeln %s förekommer fler än en gång i tillitsdatabasen nyckeln %s skapades %lu sekund in i framtiden (tidsresande eller felinställd klocka) nyckeln %s skapades %lu sekunder in i framtiden (tidsresande eller felinställd klocka) nyckel %s: "%s" %d nya signaturer nyckel %s: "%s" %d nya undernycklar nyckel %s: "%s" %d nya användaridentiteter nyckel %s: "%s" %d signatur rensad nyckel %s: "%s" %d signaturer rensade nyckel %s: "%s" %d användaridentitet rensat nyckel %s: "%s" %d användaridentiteter rensade nyckel %s: "%s" 1 ny signatur nyckel %s: "%s" 1 ny undernyckel nyckel %s: "%s" 1 ny användaridentitet nyckel %s: "%s" inte ändrad nyckel %s: "%s" spärrcertifikat lades till nyckel %s: "%s" spärrcertifikat importerat nyckeln %s: nyckel av PGP 2.x-typ - hoppade över nyckeln %s: PKS-skadad undernyckel reparerades nyckel %s: accepterad som betrodd nyckel nyckel %s: accepterade icke-självsignerade användaridentiteten "%s" nyckel %s: finns redan i hemliga nyckelringen nyckel %s: kan inte hitta det ursprungliga nyckelblocket: %s nyckel %s: kan inte läsa det ursprungliga nyckelblocket %s nyckel %s: lade till direkt nyckelsignatur nyckel %s: stämmer inte mot vår lokala kopia nyckel %s: dubblett av användaridentiteten hittades - slog samman dem nyckel %s: ogiltigt spärrcertifikat: %s - avvisat nyckel %s: ogiltigt spärrcertifikat: %s - hoppade över nyckel %s: ogiltig självsignatur på användaridentiteten "%s" nyckel %s: ogiltig undernyckelbindning nyckel %s: ogiltig spärr av undernyckel nyckeln %s: nyckelmaterial på kortet - hoppade över nyckel %s: ny nyckel - hoppade över nyckel %s: ingen publik nyckel - kan inte verkställa spärrcertifikat nyckel %s: ingen publik nyckel för pålitlig nyckel - hoppades över nyckel %s: ingen undernyckel för nyckelbindning nyckel %s: ingen undernyckel för nyckelspärrning nyckeln %s: ingen undernyckel för signaturbindning av undernyckel nyckel %s: ingen undernyckel med spärrsignatur för undernyckel nyckel %s: ingen användaridentitet nyckel %s: ingen användaridentitet för signaturen nyckel %s: inga giltiga användaridentiteter nyckel %s: icke-exporterbar signatur (klass 0x%02X) - hoppade över nyckeln %s: inte skyddad - hoppade över nyckel %s: publika nyckeln "%s" importerades nyckel %s: hittade ingen publik nyckel: %s nyckel %s: tog bort flera undernyckelbindningar nyckel %s: tog bort flera spärrar av undernyckel nyckel %s: spärrcertifikat på fel plats - hoppade över nyckel %s: hemlig nyckel importerades nyckel %s: hittade inte hemlig nyckel: %s nyckel %s: hemlig nyckel med ogiltigt chiffer %d - hoppade över nyckel %s: hemlig nyckel utan publik nyckel - hoppades över nyckel %s: hoppade över undernyckel nyckel %s: hoppade över användaridentiteten "%s" nyckel %s: signatur på undernyckel på fel plats - hoppade över nyckel %s: oväntad signaturklass (0x%02X) - hoppade över nyckel %s: algoritmen för publika nycklar stöds inte nyckel %s: algoritmen för publika nycklar stöds inte för användaridentiteten "%s" nyckeln finns redan export av nyckeln misslyckades: %s nyckelgenereringen är färdig (%d sekunder) nyckeln är skapad %lu sekund in i framtiden (problemet är relaterat till tidsresande eller en felställd klocka) nyckeln är skapad %lu sekunder in i framtiden (problemet är relaterat till tidsresande eller en felställd klocka) nyckeln är inte markerad som osäker - det går inte att använda den med fejkad slumptalsgenerator! nyckeln hittades inte på nyckelservern nyckelåtgärden är inte möjlig: %s nyckelblockresurs "%s": %s %s: nyckelring skapad kommunikationsfel mot nyckelserver: %s nyckelserver skickade inte VERSION nyckelserverfelinternt fel i nyckelserver hämtning från nyckelservern misslyckades: %s uppdatering av nyckeln från en nyckelserver misslyckades: %s sökning på nyckelservern misslyckades: %s sändning till nyckelservern misslyckades: %s tidsgräns överstigen för nyckelserver ogiltig nyckelstorlek; använder %u bitar nyckelstorleken avrundad uppåt till %u bitar raden är för långlista allt tillgängligt datalista och kontrollera nyckelsignaturerlista nycklar och användaridentiteterlista nycklarlista nycklar och fingeravtrycklista nycklar och signaturerlista inställningar (expertläge)lista inställningar (utförligt)lista hemliga nycklarskapa signatur i en separat filutfärda enbart en varning när tidsstämpeln är orimligmake_keysig_packet misslyckades: %s manfelformaterad CRC-summa miljövariabeln GPG_AGENT_INFO är felformaterad felformaterad användaridentitetmarginellvariabeln "marginals-needed" måste vara större än 1 max-cert-depth måste vara inom intervallet från 1 till 255 meny för att ändra eller avblockera PIN-kodenflytta en nyckelkopia till ett smartkortflytta en nyckel till ett smartkortflyttar en nyckelsignatur till den rätta platsen nNflera klartextsignaturer går in i varandra nätverksfelaldrigaldrigny konfigurationsfil "%s" skapad nästa kontroll av tillitsdatabasen kommer att äga rum %s nejno = signatur hittad i gruppdefinitionen "%s" inget kortingen motsvarande publik nyckel: %s inget dataingen hemlig nyckelring angiven som standard: %s ingen entropi-insamlingsmodul identifierades ingen hanterare för nyckelserverschemat "%s" ingen nyckelserveråtgärd! ingen nyckelserver är känd (använd flaggan --keyserver) det behövs ingen kontroll av tillitsdatabasen det behövs ingen kontroll av tillitsdatabasen med tillitsmodellen "%s" det behövs ingen uppdatering av tillitsdatabasen med tillitsmodellen "%s" ingen fotovisare inställd ingen körning av fjärrprogram stöds inga spärrnycklar hittades för "%s" ingen hemlig nyckel ingen hemlig undernyckel för publika undernyckeln %s - hoppar över ingen signatur hittades ingen signerad data inget sådan användaridentitethittade inga nycklar med förbehållslöst förtroende hittade ingen giltig OpenPGP-data. inga giltiga adressater hittade ingen nyckelring som gick att skriva till: %s ingen skrivbar publik nyckelring hittades: %s ingen skrivbar hemlig nyckelring hittades: %s detta är inte någon signatur i en separat fil inte ett OpenPGP-kortinte krypteradinte tvingadinte behandladstöds inteobservera: filen random_seed är tom observera: filen random_seed är inte uppdaterad oOok, vi är den anonyma mottagaren. okay|okej|okgammal kodning av krypteringsnyckeln stöds inte signatur av den gamla (PGP 2.x) typen acceptera endast uppdateringar till befintliga nycklaråtgärden är inte möjlig utan initierat säkert minne inställningsfil "%s": %s ursprungligt filnamn="%.*s" raderat information om ägartillit värde för ägartillit saknaslösenfras genererad med okänd sammandragsalgoritm %d lösenfrasen repeterades inte korrekt; försök igen.gör en kontroll av tillitsdatabasen --check-trustdb ange en e-postadress. Detta är frivilligt, men rekommenderas varmtse %s för mer information se http://www.gnupg.org/documentation/faqs.html för mer information Använd "%s%s" istället var god vänta under tiden nyckeln genereras ... inställningen "%s" förekommer flera gånger för tidigt filslut (i CRC-summan) för tidigt filslut (i den avslutande raden) för tidigt filslut (ingen CRC-summa) skriv ut kortstatusproblem vid hanteringen av krypterat paket problem med agenten - inaktiverar användning av agent fråga innan överskrivningskyddsalgoritmen %d%s stöds inte skyddssammandraget %d stöds inte den publika och den hemliga nyckeln är skapade och signerade. den publika nyckeln %s är %lu sekund nyare än signaturen den publika nyckeln %s är %lu sekunder nyare än signaturen publika nyckeln %s hittades inte: %s dekryptering med publik nyckel misslyckades: %s publika nyckeln passar inte ihop med den hemliga nyckeln! Data krypterat med publik nyckel: korrekt DEK publik nyckel är %s publika nyckeln hittades intepublik nyckel för förbehållslöst betrodda nyckeln %s hittades inte aAavslutaavsluta denna menytecken kodade enligt "quoted printable"-standarden hittades i skalet - detta beror sannolikt på att en felaktig e-postserver eller e-postklient har använts och distribuerar denna nyckel igen för att undvika tänkbara problem med att algoritmerna inte stämmer läsfel i "%s": %s läser från "%s" läser inställningar från "%s" läsning av publik nyckel misslyckades: %s läser från standard in ... anledning för spärrning: uppdaterar %d nycklar från %s uppdaterar 1 nyckel från %s ta bort så mycket som möjligt från nyckeln efter importeringta bort så mycket som möjligt från nyckeln vid exporteringta bort nycklar från den publika nyckelringenta bort nycklar från den hemliga nyckelringenta bort lösenfrasen från exporterade undernycklarta bort oanvändbara delar från nyckeln efter importeringta bort oanvändbara delar från nyckeln vid exporteringnamnbyte från "%s" till "%s" misslyckades: %s reparera skada från pks-nyckelservern vid importeringbegär nyckeln %s från %s begär nyckeln %s från %s-servern %s resursbegränsningsvaret innehåller inte en RSA-modulus svaret innehåller inte den publika RSA-exponenten svaret innehåller inte publikt nyckeldata spärrkommentar: spärra nyckel eller valda undernycklarspärra valda användaridentiteterspärra signaturer på valda användaridentiteterspärradspärrad av din nyckel %s den %s spärrad: %savrundade uppåt till %u bitar spara och avslutasök efter nycklar hos en nyckelserversöker efter "%s" från %s söker efter "%s" från %s-servern %s söker efter namn från %s söker efter namn från %s-servern %s hemliga nyckeln "%s" hittades inte: %s hemlig nyckel redan lagrad på ett kort hemliga nyckeln är inte tillgängligde hemliga nyckeldelarna är inte tillgängliga hemliga delar av nyckeln är inte tillgängliga. välj undernyckel Nvälj användaridentiteten Nvald algoritm för certifieringssammandrag är felaktig den valda chifferalgoritmen är ogiltig vald komprimeringsalgoritm är ogiltig vald sammandragsalgoritm är ogiltig val av openpgp misslyckades: %s skickar nyckeln %s till %s skickar nycken %s till %s-servern %s ställ in en notation för valda användaridentiteterställ in inställningslista för valda användaridentiteterställ in url till föredragen nyckelserver för valda användaridentitetervisa IETF-standardnotationer vid signaturlistningarvisa IETF-standardnotationer vid signaturvalideringvisa administratörskommandonvisa alla notationer vid signaturlistningarvisa alla notationer vid signaturvalideringvisa utgångsdatum vid signaturlistningarvisa nyckelns fingeravtryckvisa endast den primära användaridentiteten i signaturvalideringvisa policy-url:er vid signaturlistningarvisa policy-url:er vid signaturvalideringvisa url:er till föredragna nyckelservrar vid signaturlistningarvisa url:er till föredragna nyckelserver vid signaturvalideringvisa spärrade och utgångna undernycklar i nyckellistningarvisa spärrade och utgångna användaridentiteter i nyckellistningarvisa spärrade och utgångna användaridentiteter i signaturvalideringvisa valda foto-id:nvisa nyckelringens namn i nyckellistningarvisa denna hjälpvisa giltighet för användaridentitet vid nyckellistningarvisa giltighet för användaridentitet vid signaturvalideringvisa användarangivna notationer vid signaturlistningarvisa användarangivna notationer vid signaturvalideringsignera en nyckelsignera en nyckel lokaltsignera eller redigera en nyckelsignera valda användaridentiteter [* se nedan för relaterade kommandon]signera valda användaridentiteter lokaltsignera valda användaridentiteter med en icke-spärrbar signatursignera valda användaridentiteter med en tillitssignatursignaturvalidering utelämnad signaturer skapade hittills: %lu signerat av din nyckel %s den %s%s%s signeringen misslyckades: %s signeringsundernyckeln %s är redan korscertifierad signerar:hoppade över "%s": %s hoppade över "%s": förekommer flera gånger hoppade över: publik nyckel redan angiven hoppade över: den publika nyckeln är redan inställd som standardmottagare hoppade över: hemlig nyckel finns redan hoppar över block av typen %d hoppar över v3-självsignatur på användaridentiteten "%s" fristående spärrcertifikat - använd "gpg --import" för att verkställa fristående signatur av klassen 0x%02x misslyckades med att lagra nyckeln på kortet: %s undernyckeln %s signerar inte och behöver inte korscertifieras underpaket av typen %d har den bit satt som markerar den som kritisk symmetrisk kryptering av "%s" misslyckades: %s systemfel när externa program anropades: %s ta nycklarna från denna nyckelring textlägeden angivna URL som beskriver certifieringsspolicy är ogiltig den angivna föredragna nyckelserver-url:n är ogiltig den angivna URL som beskriver signaturpolicy är ogiltig signaturen kunde inte valideras. Kom ihåg att signaturfilen (.sig eller .asc) ska vara den först angivna filen på kommandoraden det finns en hemlig nyckel för publika nyckeln "%s"! det här är en PGP-genererad Elgamal-nyckel som inte är säker för signaturer!den här nyckeln har redan markerats som spärrnyckel detta kan bero på att det saknas en självsignatur detta meddelande kanske inte kan användas av %s denna plattform kräver temporärfiler vid anrop till externa program konflikt i tidsstämpelväxla mellan att lista hemliga och publika nycklarväxla flagga för att tvinga signatur-PIN-kodför många chifferinställningar för många komprimeringsinställningar för många sammandragsinställningar för många poster i pk-cachen - inaktiverad fel i tillitsdatabasentillitsvärdet %lu är inte av begärd typ %d tillitspost %lu, begäran av typ %d: kunde inte läsa: %s tillitspost: %lu, typ %d: kunde inte skriva: %s tillit: %stillitsdatabasposten %lu: lseek misslyckades: %s tillitsdatabasposten %lu: skrivning misslyckades (n=%d): %s tillitsdatabastransaktion för stor tillitsdatabas: lseek misslyckades: %s tillitsdatabas: läsning misslyckades (n=%d): %s tillitsdatabas: synkronisering misslyckades: %s trustlevel justerad till FULL på grund av giltig PKA-info trustlevel justerad till NEVER på grund av felaktig PKA-info förbehållslöskan inte visa foto-id! kunde inte köra det externa programmet kunde inte köra programmet "%s": %s kunde inte köra skalet "%s": %s kunde inte öppna JPEG-filen "%s": %s kan inte läsa svaret från det externa programmet: %s kunde inte ställa in exec-path till %s kunde inte uppdatera versionspost i tillitsdatabasen: skrivning misslyckades: %s kan inte använda IDEA-chiffer för alla nycklar du krypterar till. kunde inte använda okänd tillitsmodell (%d) - antar tillitsmodellen %s okomprimerad|ingenodefinieradoväntat skal: oväntat dataej implementerad algoritm för chifferej implementerad algoritm för publika nycklarokändokänd ASCII-skalrubrik: okänd chifferalgoritmokänd komprimeringsalgoritmokänd konfigurationspost "%s" okänd standardmottagare "%s" okänd sammandragsalgoritmokänd nyckelskyddsalgoritm okänd flagga "%s" okänd pakettypokänd skyddsalgoritm okänd algoritm för publik nyckelokänd signaturklassokänd versionexternt program avslutades felaktigt ej angivenuri:n stöds inteoanvändbar algoritm för publika nycklaroanvändbar publik nyckeloanvändbar hemlig nyckeluppdatera alla nycklar nycklar från en nyckelserveruppdateringen misslyckades: %s misslyckades med att uppdatera hemligheten: %s uppdatera tillitsdatabasenanvändning: %sanvändning: gpg [flaggor] använd som fil för utdataanvänd "ursprunglig text"-lägetanvänd flaggan "--delete-secret-keys"för att ta bort den först. använd strikt OpenPGP-beteendeanvänd temporärfiler för att skicka data till nyckelserverns hjälpprogramanvänd denna användaridentitet för att signera eller dekrypteraanvändaridentiteten "%s" är redan spärrat användaridentitet: "%s" använder tillitsmodellen %s använder chiffret %s använder undernyckeln %s istället för primära nyckeln %s validera signaturer med PKA-datagiltighet: %sutförligvalidering av Admin PIN-kod är för närvarande förbjudet genom detta kommando validering av CHV%d misslyckades: %s validera en signaturvalidera PIN-koden och lista allt dataväntar på lås på "%s"... svag nyckelskapade en svag nyckel - försöker igen egendomlig storlek på en krypterad sessionsnyckel (%d) kommer inte att köra med osäkert minne på grund av %s skriver direkt signatur skriver signatur knuten till nyckeln skriver den publika nyckeln till "%s" skrier hemliga nyckelstumpen till "%s" skriver hemlig nyckel till "%s" skriver självsignatur skriver till "%s" skriver till standard ut fel hemlig nyckel användesjJjadu kan bara göra klartextsignaturer med en PGP 2.x-nyckel när du är i --pgp2-läge du kan bara skapa signaturer i en separat fil med nycklar av PGP 2.x-typ när du är i --pgp2-läge du kan endast kryptera till RSA-nycklar som är högst 2048 bitar långa i --pgp2-läge du kan bara göra signaturer i en separat fil eller klartextsignaturer i --pgp2-läge du kan uppdatera dina inställningar med: gpg --edit-key %s updpref save du kan inte signera och kryptera samtidigt i --pgp2-läge du kan inte ange en nyckel som sin egen spärrnyckel du kan inte använda --symmetric --encrypt i %s-läget du kan inte använda --symmetric --encrypt med --s2k-mode 0 du kan inte använda --symmetric --sign --encrypt när du är i %s-läget du kan inte använda --symmetric --sign --encrypt med --s2k-mode 0 du har hittat ett fel i programmet ... (%s:%d) du kan inte använda %s när du är i %s-läget du får inte använda chifferalgoritmen "%s" när du är i %s-läget du får inte använda komprimeringsalgoritmen "%s" när du är i %s-läget du får inte använda sammandragsalgoritmen "%s" när du är i %s-läget du måste använda filer (och inte rör) i --pgp2-läge |AN|Ny Admin PIN-kod|FD|skriv statusinformation till denna FD|NAMN|kryptera för NAMN|N|Ny PIN-kod|N|ställ in komprimeringsnivån till N (0 för att inaktivera)|[fil]|skapa en klartextsignatur|[fil]|skapa en signatur|algo [filer]|skriv ut kontrollsummor||Ange PIN-koden%%0A[signaturer kvar: %lu]gnupg-1.4.20/po/ja.gmo0000644000175000017500000045256212635457221011400 00000000000000 d(Pk-kkElNmfm0nIninnnnnn2o7Io2o#oDo.pILp7p'pp qq7qOqiqqqqqq+r&4r#[r(rrrrr(s?sXsws$sss&s t,(tUtrt!ttttt uu 3u?uTuquuuuuu*u"%v]HvBvv/v=,w(jw.w3w!w(xAx\x'dxxxxxxy,y'Lytyy"yyyyBz=Kzz"z%z&z!{%:{"`{#{'{ {{ |"|?|T|l|(}|$|||#|}$7}\}{}!}}} }~&1~%X~ ~~,~4~~&':b~ Ԁ'"4Wu-(0݁2HA  ̃A/^0\1NDc-0օ.I6*+'׆  $5Oj3Ї4 -Ao').Q$ ?Ɖ4:;vϊ,(+8T#&(؋&(?Wl7u6-%389l0<׍G@\>+܎=FN^f"x :͏#?Q d/ʐH-$,'Q8y&5ْ.5>*t!.0&!,Hu 8ɔ#&?"F.iH1"z($ƖE11c;5"8A$z˙o͛B^t%.5d* #D* !60X'<+ "5,X/1", "72Z (ʡ *J\wӢ! 5A5ɣ""(?hzդF .1O%ǥEfEo b 84'm>Ԩcd/ȩNEG,"#ݪ-+/)[&'Qq®ˮ+,,3Y 1˯(# +."Z+}" ̰?%Agر.(C l}  /:0j!ɵ!"8Ng%ӶjKy@ŷ-49O0K/|5'. 39-mp!ۼ$,(Irg-ԾԿ *+Fr #$=b  6%"7<2tr'>1= II4#= I?iD@+/1[NII&5p5;?BX<H-!"OHrE<`B)C :N.>2=*<h@FH-Uv$ -2@1sI>K.@z5*7,T004 29l:m65.Dhd*&1#Q2u>*=0M39"&!3'>[c%D$,i52_    9%R"x)&+ 58n . &BB5$&5D Sax(""9 \},'.)%X2~+)F%]5 ;#<_*  $<Pj:  6&Gn- <A (Nw/ 1 Ri,H$m %/.&73^  00$M=r%#-( Ab'#*Jh'& &*&Qx / ,/<"l9K%$;&`$#D2'9ar 1$<@C $!2D[Do+/ 60R/"&(6%_%$ .=[t2 )'Aiy/+$(&M$t',,*>B $,I$Jn"#7 [!|* -8$f' ."+&)R#|-%65K/"';70s"%/2P!d: !!(A+j8!40Ct26)9>x&GHB[# 0 P ` z      #  B P h         ': b   .   ( 2 !;  ] ~ ,      $ * H )K u  }   % % ,'T2q3&"71Fx!% %Fl     #& >)Hr$< $D6],;#M>- %="S-v+&*5<6r!&$4F2[IF6Na|01-#_#++,!,2N$*2..]r*  ,L%h&$#/&Sz3%*% Fdz(-96+:b,0/?7T*.7; 0Z 1 ;  %!7!)F!3p!6!:! "!"4"9G""5"-""#'# G#h#-|#### #5$$6$[$+v$4$%$!$C%*c%(%0%%&.&-@&*n&&+*'GV'2'/'%(F'(n(1(#((!()(3)\)-q)/),) )"*))*S*r* **2*1*-+6+#S+#w+!+"+-+,:-,Ih,A,",- )-3-F-V-u----- -.(.!A.c.x.....#. //+/E/Y/ m//// ///06 0W05s0#0 0001$1*=1!h1 11G112 242Q2Z2-w2,222 33 83Y3u333333D3F4EZ4D4E4A+57m56575=6>R66$676< 77H7F77797 18R8 i8$t88#88#8 9*$9*O9z9);C;;-==> > > ?!A?"c?"?!?:?:@IA@ @L@3@X-ACA7A!B $B0B!NB%pB$B&B$B%C#-CQCaCCC0CC D"$DGD0fDD&DD.D&E8E+MEyE4E#EE5E3F QF rFF F(F FF%G.G=GYG%iG#G6G=G.(H]WHTH I> I^_I6I6I8,J4eJ7J"JJAJ?K]K%yKKKK<K;3L0oL3L6L MM/MeMMYM* N38N?lN9NBN?)O3iO6ODO6P.PP&P/P#PAPQ0=R1nR;R8R5S,KS,xS(SS)S0TETBTTHTTUV%"VHVdV3|V"V$VVW(W'BW.jWW+WWX5X5KX7XXhX-%YSZhZ'yZ.Z.ZZ\[Gy[;[[L\$\L\,A]5n]8]A])^)I^&s^ ^^%^^# _&._U_u_'_$_,__X`P```+]a+aa:aabJbDbbGb)b#c)=cgccDcDcAd3]d3d8d3d'2e'ZeeeBe5e/!f#Qf5uf8f2f;gSSg>g<g/#h;Sh h hhhAh i?iWi,fi3iBi j'j0EjMvjjj'kVl:ul2lLlD0m-umJmFmG5n*}n<n5nHo?do?oo"p&p//p?_p>ppp; q8FqqkJr.r:r1 sdRsXstetIu.?v(nv(vDv?wEw#_ww+wwx/yyy'y+z&Ez,lzyz'{";{$^{!{{1{ {{|/4|Dd||=D}&}}4~1~M$LrM B.Uqgǀ>/An.C߁.#GR?.ڂ5 .? n:y&Ѓ$!'>)f/&=4%ZcS?n(A׆"0< m-jڇ8E2~<+OcV9U,VS@;'.\dQ>B2?,2!5T/6%ғ! 2">)aZUA<~5#72@L7@Ŗ74>#sL2) I2j/,͘$KHk љ#ۛ"."CQS , 7<Wr'*ߞ%=La2jY']&ߠCɡ =1΢@3A3uM=54ƥ"3R*r+4ɧ+=*hh*ѩ%8" ["g" ˫!իAB9/|9*90K)|77ޭ:4Q, Y>WKv@¯K<EKαTHo6.\.{3Q޳X0QH۴e$tbHbKY\QHj_bD¸>JF84XmYƺR SsNǻMCd=J>1GpIR^U7*7GOGX߿N8UK=)3g=3B GPCEF">i%-8S9-.G#ck+6D2=wEW5SB2GdG2>qBN / ;\    %!GY ht}  $4?9?5y9RC<\$*:'O=w $];Y3"+!>`y'0>0+o+%%F7Z-84;.3j4<E=V$(3RFq1C %Nt AaYb/+*)Is$$<2Ng8";'cVV,-Z"tE +o2&$   <2]2N-@ V,c/9 ?<D )(>!'`0S3 ,A;n+)4 &U#|(%= XG,67%<)b177(. WduE-LHf7U=>A,JAw&;*'$6'[!!$XE`Xg/( (6_{"Q16Nh B6<-EHs+**3>^3@/E>c*45(8Ja4'9 1C?u.B%CFi!.(4F4{LI G%Ud{/$)59_6TT%"z"'66;V;!!&9#Q8u9#2 5?/u?9 ,@4m -<8.&g#A2M' Pu 2 8 G2 Az % : . SL ; 3 - /> 8n S / -+ IY A  )M0D~DV_)y*RR!t+ ."O'r 5 5*/`/2"*$Af| - * Kj}*-(?/Y 6C06B'y1+! 16?6vC,=;YIH2(Z[4NN:4C,/BL+#454"j>DDV"v  !-9Y(\ 7!0R+m.$X Zd + f !R!Jt!+!,!"47"Fl"="$"+#<B##>#<#:$*L$*w$($,$,$?%%e%!{%B%%%%w&[|&%&!&3 '2T'&''''3'6,($c($(H(H(B?)0)T)*%*C*:_*4*7*+0+ P+)q++2+ +++!,1,!Q,s,&,*,7,!-"8-+[---R-:.:=.Ix.*..//"/8R/;/4/4/106M06090'0>13\1319191Q82[2a2 H33i3383;36+46b4 444P4/,58\5555*5'6 86?Y66!6%636W7-u7-797Q 8]85}8P8E94J9A9*99:::=:7x::<];V;=;(/<9X<p<='"=!J=.l=(=4=E=*?>Bj>S>D? F?MQ?W?I?=A@G@:@MANPAAA.A%A.B/GB;wBByBMLCNC<C&D 7DADVD*rD-D DD-D'!EIE8hE6E+E!F&F(EF*nFFF.F G*G3;G!oG!G*G G)G!)H KH!YH!{H'HSH"IWQY]\{g)x,e \>A/UzTJ9k3>VC !T-9R~swQ B9vd (Xq#bR&LWWBpv@]SLj>iD%[r2$zWa>~7*-Da+|: ?qsif?"3Fj"8+ (.t_A qn6(0:1=%K_@LX+k1R/J~[T.8xNG|*=%Bk}Dnh`s1vGM +9rwud2'' AJj#GyP\N/r" e-w*]m~ 00I<cYE3: 6yKplnQF2<4GYZ.#q;ISHo|z[u$CZ4E,Ll9uW0gt-.AMUqi5{Dd7=S<x_}, \nt&S5 o4JM Duat Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s remove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg 1.4.19 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2015-09-17 17:02+0900 Last-Translator: NIIBE Yutaka Language-Team: Japanese Language: ja MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; ユーザIDを入力。空行で終了: 十分な量の乱数が得られません。OSがもっとエントロピーを収集できるよう、 何かほかの作業をしてください! (あと%dバイト要ります) あなたのフォトIDに使う画像を決めてください。画像はJPEGファイルである必 要があります。画像は公開鍵といっしょに格納される、ということを念頭にお いておきましょう。もし大きな写真を使うと、あなたの鍵も同様に大きくなり ます! 240x288くらいにおさまる大きさの画像は、使いよいでしょう。 サポートしているアルゴリズム: あなたの鍵を同定するためにユーザIDが必要です。 このソフトは本名、コメント、電子メール・アドレスから 次の書式でユーザIDを構成します: "Heinrich Heine (Der Dichter) " 別名"%s" %s鍵%sを使用 インポート: %lu 変更なし: %lu 新しい副鍵: %lu 新しいユーザID: %lu 未インポート: %lu ユーザIDなし: %lu "%s": 暗号アルゴリズムの優先指定 %s "%s": 圧縮アルゴリズムの優先指定 %s "%s": ダイジェスト・アルゴリズムの優先指定 %s (主鍵ID %s の副鍵) この署名が所有者のものかどうか確信できません。 この署名はおそらく 偽物 です。 この署名が所有者のものかどうかの検証手段がありません。 署名が偽物なこともある、ということです。 アルゴリズムの優先指定があります: 新しい署名: %lu "%s" カードの通番 = フィンガー・プリント =副鍵フィンガー・プリント: 秘密鍵の読み込み: %lu スキップした新しい鍵: %lu 掃除されたユーザID: %lu 副鍵フィンガー・プリント: 掃除された署名: %lu (%c) 完了 (%c) 認証機能の反転 (%c) 暗号機能の反転 (%c) 署名機能の反転 (%d) DSA (機能をあなた自身で設定) (%d) DSA (署名のみ) (%d) DSA と Elgamal (%d) Elgamal (暗号化のみ) (%d) RSA (暗号化のみ) (%d) RSA (機能をあなた自身で設定) (%d) RSA (署名のみ) (%d) RSA と RSA (デフォルト) (0) 答えません。%s (1) 全然、検査していません。%s (1) 署名鍵 (2) 暗号化鍵 (2) 通常の検査をしました。%s (3) 認証鍵 (3) かなり注意して検査しました。%s 新しい鍵の失効: %lu %d = 信用し ない %d = 知らない、または何とも言えない %d = 充分に信用する %d = まぁまぁ信用する %d = 究極的に信用する 署名不能。 別名"%s" m = メーン・メニューに戻る q = 終了 s = この鍵はとばす 秘密鍵のインポート: %lu (主鍵ID %s) (エクスポート不可) (失効不可)主鍵フィンガー・プリント: 無変更の秘密鍵: %lu "%s"鍵IDではありません: スキップします "%s"は鍵%sでもうローカルに署名してあります "%s"は鍵%sでもう署名してあります # Sitei sareta sin'youdo itiran %s # ("gpg --import-ownertrust" wo tukatte hukkyuu dekimasu) カードの永久ロック前に%d回の管理者PINの試行が残っています 不正な署名%d個 %d本の鍵を処理 (うち%d本の有効性数をクリア) 最小の「ある程度の信用」%d、最小の「全面的信用」%d、%s信用モデル エラーのため%d個の署名を検査しません 鍵がないため%d個の署名を検査しません 有効な自己署名のないユーザIDを%d個検出 %lu個の鍵をキャッシュ済 (%lu個の署名) %lu個の鍵までキャッシュ済 (%lu個の署名) これまで%lu個の鍵を処理 %s ... %sはハンドラ・バージョン%dをサポートしません %sは%sで機能しません %s暗号化済みデータ %s 暗号化済みセッション鍵 %s暗号化を使用します %sは新しい方です %sは変更のない方です %s 鍵は %u から %u ビットの長さで可能です。 %s 鍵長は %u-%u の範囲でなければなりません %sは%sとともに使っても無意味です! %sは%sとともに使うことはできません! %s署名、ダイジェスト・アルゴリズム %s %s. %s/%s暗号化 受信者:"%s" %s/%s署名。署名者:"%s" %s: この鍵が本当に本人のものである、という兆候が、少ししかありません %s: この鍵が本当に本人のものである、という兆候が、ありません %s: ディレクトリがありません! %s: 空きレコードの読み込みエラー: %s %s: バージョン・レコードの読み込みエラー: %s %s: バージョン・レコードの更新エラー: %s %s: ディレクトリ・レコードの書き込みエラー: %s %s: バージョン・レコードの書き込みエラー: %s %s: レコードの追加に失敗しました: %s %s: ハッシュ表の作成に失敗しました: %s %s: バージョン・レコードの作成に失敗しました: %s%s: レコードの初期化に失敗しました: %s %s: 無効なファイル・バージョン%d %s: 無効な信用データベース %s: 無効な信用データベースを作成 %s: 鍵リングができました %s: 信用データベース・ファイルではありません %s: スキップ: %s %s: スキップ: 公開鍵はもうあります %s: スキップ: 公開鍵は使用禁止です %s: 信用データベースができました %s: 未知の拡張子 %s: レコード番号%lu番のバージョン・レコード %s:%d: 廃止されているオプション"%s" %s:%d: 無効な auto-key-locate リストです %s:%d: 無効なエクスポート・オプションです %s:%d: 無効なインポート・オプションです %s:%d: 無効な鍵サーバ・オプションです %s:%d: 無効な一覧オプションです %s:%d: 無効な検証オプションです %uビット%s鍵, ID %s作成日付は%s(説明はありません) (ここではたぶん%dを選びます) (これは、デリケートな失効鍵です) (機密指定)(フィンガー・プリントで鍵を指定してない限り) (この目的には誤ったプログラムを使ったのでしょう) * `sign' コマンドは `l' で始まると、ローカルの署名で (lsign)、 `t' で始まると信用署名 (tsign)、`nr' で始まると失効不可署名 (nrsign)、もしくはこれらの組み合わせ (ltsign, tnrsign, など)となります。 --clearsign [ファイル名]--decrypt [ファイル名]--edit-key ユーザid [コマンド]--encrypt [ファイル名]--lsign-key ユーザidこのコマンドで--outputは機能しません --sign --encrypt [ファイル名]--sign --symmetric [ファイル名]--sign [ファイル名]--sign-key ユーザid--store [ファイル名]--symmetric --encrypt [ファイル名]--symmetric --sign --encrypt [ファイル名]--symmetric [ファイル名]-k[v][v][v][c] [ユーザid] [鍵リング]... バグです (%s:%d:%s) 不正な署名1個 鍵がないため1個の署名を検査しません エラーのため1個の署名を検査しません 有効な自己署名のないユーザIDを1個検出 10@ (コマンドとオプション全部の一覧は、マニュアル・ページをご覧ください) @ 例: -se -r Bob [ファイル] 署名とユーザBobへの暗号化 --clearsign [ファイル] クリア署名を作成 --detach-sign [ファイル] 分遣署名を作成 --list-keys [名前] 鍵を表示 --fingerprint [名前] フィンガー・プリントを表示 @ オプション: @コマンド: ASCII外装出力を強制します。 管理コマンドが許可されています 管理コマンドは禁止されています 管理者専用コマンド 副鍵を生成してよければ、"yes"(または、単に"y") と答えてください。この副鍵を削除してよければ、"yes"と答えてください上書きしてよければ、"yes"と答えてくださいこのユーザIDを本当に削除したければ、"yes"と答えてください。 証明書も全部同時に消去されます!全てのユーザIDに署名したければ、"yes"と答えてください"yes"か"no"で答えてください本当にこの鍵にあなたの鍵"%s"で署名してよいですか (%s) それでも追加したいですか? (y/N) それでも本当に失効したいですか? (y/N) それでもこの鍵に署名したいですか? (y/N) 本当にこの鍵を指名失効者に任命しますか? (y/N) 本当に削除したいですか? (y/N) 本当に交換したいですか? (y/N) 本当に使いたいですか? (y/N) Authenticate"%s"からの 不正な 署名CAのフィンガー・プリント: CRCエラー。%06lX - %06lX 署名を検査できません: %s この鍵は編集できません: %s 「%s」が開けません: %s キャンセルカード所有者の名 (given name): カード所有者の姓 (surname): 究極的に信用した鍵への証明書: Certify名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? 名前(N)、コメント(C)、電子メール(E)の変更、または終了(Q)? 全部 (または選択した) ユーザIDの優先指定を、今の優先指定一覧に変更 します。関係する自己署名の日時は、1秒すすみます。 副鍵の有効期限を変更します。 主鍵の有効期限を変更します。 暗号方式: コマンドはファイル名の引数を期待します コメント: 圧縮: この鍵にたいする指名失効証明書を作成しますか? (y/N) この鍵にたいする失効証明書を作成しますか? (y/N) この署名にたいする失効証明書を作成しますか? (y/N) クリティカルな優先鍵サーバ: クリティカルな署名注釈: クリティカルな署名ポリシー: 今、可能な操作: 今の受取人: DSA鍵 %s は%u ビット以上のハッシュを必要とします DSA鍵 %sは安全でない(%uビット)ハッシュを用います DSAは8ビットの倍数のハッシュ長を必要とします この正しい署名を削除しますか? (y/N/q)この無効な署名を削除しますか? (y/N/q)この鍵を鍵リングから削除しますか? (y/N) この未知の署名を削除しますか? (y/N/q)%d個の署名を削除しました。 %d個の署名を削除しました。 分遣署名。 ダイジェスト: %s (大きさ%ld) の鍵%s (uid %d) のフォトIDとして表示 選択した鍵を本当に削除しますか? (y/N) この鍵を本当に削除しますか? (y/N) 本当に実行しますか? (y/N) この鍵全体を本当に失効しますか? (y/N) 選択した副鍵を本当に失効しますか? (y/N) この副鍵を本当に失効しますか? (y/N) 本当にこの鍵を究極的に信用しますか? (y/N) 新しい署名を発行し、期限切れ署名と交換したいですか? (y/N) 書出し可能な署名に格上げしたいですか? (y/N) OpenPGPの自己署名に格上げしたいですか? (y/N) それでも再署名したいですか? (y/N) 同時に署名も期限切れにしたいですか? (Y/n) エラー: 電子メール・アドレス: Encrypt管理者PINの入力: フォトID用のJPEGファイル名を入力してください: 新しい管理者PINの入力: 新しいPINの入力: PINの入力: 予備の説明を入力。空行で終了: 新しいファイル名を入力してください番号(s)、N)次、またはQ)中止を入力してください >パスフレーズを入力 パスフレーズを入力: 鍵所有者の名前を入力してくださいこの秘密鍵の新しいパスフレーズを入力してください。 注釈を入力: プロンプトで表示される必要な値を入力してください。 ISOの日付の書式 (YYYY-MM-DD) でも入力できますが、正しいエラーは 表示されないでしょう。その代わり、システムは入力値を期間へ変換 するように試みます。鍵の長さを入力してくださいこのメッセージを送りたい宛先のユーザIDを入力してください。指名失効者のユーザIDを入力してください: 優先鍵サーバURLを入力してください: バックアップ鍵を「%s」から読み込みする際のエラー: %s エラー: つないだ名前が長すぎます (上限%d文字)。 エラー: 二重の空白は禁止です。 エラー: ログイン・データが長すぎます (上限%d文字)。 エラー: 普通のASCIIだけが今、許可されています。 エラー: プライベート DOが長すぎます (上限%d文字)。 エラー: "<"文字は使えません。 エラー: 信用データベースが壊れています。 エラー: URLが長すぎます (上限%d文字)。 エラー: 優先指定の文字列に無効な文字があります。 エラー: 無効な形式のフィンガー・プリント。 エラー: 優先指定の文字列の長さが無効です。 エラー: 無効な応答。 "%s"からの期限切れの署名機能: ファイル「%s」は既に存在します。署名を行うファイルの名前を指定してください開始します。メッセージを打ってください ... "%s"からの正しい署名ハッシュ: ヒント: まず署名するユーザIDを選択します 準備できたらreturnを打つか、'c'で取消し: 署名しようとしている鍵が実際に上記の名前の人のものかどうか、どの程度 注意して検証しましたか? 答がわからなければ、"0"を入力してください。 この鍵がこのユーザをなのる本人のものかどうか、どれくらい信用できますか? この鍵は通常の検査をしました。 この鍵は、かなり注意して検査しました。 この鍵は全然、検査していません。 IDEA暗号方式は利用不能なので、楽天的ですが%sで代用しようとしています もし、それがうまくいかなかったら、マニュアルをご覧ください もしそうしたければ、なぜ失効証明書を発行するのかを説明する 文章を入力することができます。文章は簡潔にしてください。 空行で終わりになります。 この信用されてない鍵をなんにしろ使いたければ、"yes"と答えてください。一般に、署名と暗号化に同じ鍵を使うのは、よろしくありません。 このアルゴリズムは、一定の範囲内だけで使われるべきです。 まず、セキュリティーの専門家にご相談ください。コメントに無効な文字があります 名前に無効な文字があります 無効なコマンド ("help"を参照) --allow-non-selfsigned-uidで有効にされた無効な鍵%sです 無効なパスフレーズです。再入力してください無効な選択です。 これで正しいですか? (y/N) よろしいですか? (y/N) この写真は正しいですか (y/N/q)? この鍵は、このユーザIDをなのる本人のものかどうか確信でき ません。今から行うことを*本当に*理解していない場合には、 次の質問にはnoと答えてください。 この値の指定は、あなた次第です。この値は、第三者に決して提供されません。これは、 web-of-trust の実装に必要で、(暗黙的にできた) web-of-certificates とは無関係です。鍵 %s は、もう失効されています。 以下に鍵があります: %sは無期限です 鍵は%sで期限切れとなります 鍵の生成が取り消されました。 鍵の生成に失敗しました: %s 鍵(の信頼性)が損なわれています鍵にはスタブあるいはカード上の項目しかありません - パスフレーズは変更されません。 鍵はもはや使われていません鍵は保護されています。 鍵は、失効されています。鍵がとりかわっています鍵の有効期間は? (0)鍵は無変更なので更新は不要です。 鍵リング鍵サーバ 修正しない言語の優先指定: ログイン・データ (アカウント名): 暗号化鍵をカード外にバックアップしますか? (Y/n) N 名前の変更。 C コメントの変更。 E 電子メール・アドレスの変更。 O 鍵生成に進む。 Q 鍵生成しないで終了。*注意*: このバージョンで%sは利用できません *注意*: 普通%sは使いません! *注意*: カードが要求された鍵長をサポートしているという保証はありません。 鍵生成が成功しない場合、あなたのカードに関する技術文書を確認し、 利用できる鍵長について確認ください。 *注意*: この機能は%sで利用できません 注意: この鍵は保護されていません! *注意*: 鍵のシリアル番号がカードのものと一致しません *注意*: カード鍵のバックアップが「%s」へ保存されます *注意*: v3鍵に対する副鍵の作成は、OpenPGPに適合しません 注意: 鍵は失効済みです*注意*: 秘密鍵はもうカードに保管してあります! *注意*: デフォルトのオプション・ファイル「%s」がありません *注意*: 以前デフォルトだったオプション・ファイル「%s」は、無視されます *注意*: 主鍵はもうカードに保管してあります *注意*: 二次鍵はもうカードに保管してあります 注意: 秘密鍵%sは%sで期限切れです *注意*: 送信者は"極秘とする"ように求めています 注意: 署名鍵%sは%sに期限切れです *注意*: 単純なS2Kモード(0)の使用には強く反対します 注意: 信用データベースが、書き込み不能です 名前を数字で始めてはいけません 名前は5文字以上でなければなりません この実行には秘密鍵がいります。 NnCcEeOoQq秘密鍵リングに対応する署名がありません ヘルプはありません「%s」のヘルプはありません理由は指定されていません%d番の副鍵はありません そのユーザIDはありません。 信用度が指定されていません: ハッシュ%sのユーザIDはありません %d番のユーザIDはありません 有効な電子メール・アドレスではありません あなたによって署名されていません。 注釈: この鍵は暗号化には使用できないことに注意してください。暗号化を行うには、 "--edit-key"コマンドを使って副鍵を生成してください。 注意: 署名者のアドレス「%s」がDNSのエントリと一致しません 注意: この鍵は使用禁止に設定されています。 注意: この鍵は期限切れです! 注意: 確認された署名者のアドレスは「%s」です 何も削除していません。 鍵%sで署名すべきものはありません OpenPGPカードno. %sを検出 OpenPGPカードが利用できません: %s 上書きしますか? (y/N) ユーザが指定した信用データベースを利用中、所有者信用は設定できません。 PINコールバックがエラーを返しました: %s CHV%dのPINが短すぎます。最短で%dです PINが正しく繰り返されていません。もう一度まずエラーを修正してください 他のユーザの鍵を正しく検証するために、このユーザの信用度を決めてください (パスポートを見せてもらったり、他から得たフィンガー・プリントを検査したり、などなど) 電子メールのアドレスを本名やコメントに入れないように 署名を制限するドメインか、それのない場合はenterを入力してください。 新しいファイル名を入力してください。単にRETURNを打つと、 (括弧で示した) デフォルトのファイルを使用します。オプションのコメントを入力してくださいデータ・ファイルの名前を入力: 信用署名の深さを入力してください。 深さが1より大きいと、署名しようとしている鍵で信用署名を作れます。 パスフレーズを入力してください。これは秘密の文のことです この潜在的な安全上の欠陥を修正してください カードを挿入しreturnを打つか、'c'で取消し: 工場設定のPINは下記のとおり PIN = `%s' 管理者PIN = `%s' 次のコマンドを使って変更すべきです --change-pin プログラムを再起動するまで、表示された鍵の有効性は正しくないかもしれない、 ということを念頭においてください。 秘密鍵の選択をといてください。 今のカードを抜き、以下のシリアル番号のカードを入れてください: %.*s 入力したパスフレーズの確認のため、再入力してください。バグは までご報告ください。 高々1個の副鍵を選択してください。 ユーザIDをきっかりひとつ選択してください。 失効の理由を選択してください: 生成する鍵の型を選択してください: ご希望の鍵の種類を選択してください: 鍵の保管場所を選択してください: 鍵の有効期限を指定してください。 0 = 鍵は無期限 = 鍵は n 日間で期限切れ w = 鍵は n 週間で期限切れ m = 鍵は n か月間で期限切れ y = 鍵は n 年間で期限切れ 署名の有効期限を指定してください。 0 = 署名は無期限 = 署名は n 日間で満了 w = 署名は n 週間で満了 m = 署名は n か月間で満了 y = 署名は n 年間で満了 まず"toggle"コマンドを使ってください。 エントロピーを収集していますので、お待ちください。エントロピーの質が向上 しますので、もし飽きたら何か作業してください。 鍵%sに可能な操作: 優先鍵サーバ: 主鍵フィンガー・プリント:プライベート DO データ: 進みますか? (y/N) 公開鍵: 公開鍵は使用禁止です。 保存せずに終了しますか? (y/N) RSAモジュラスがありません、または%dビットのものではありません RSA素数 %s がありません、または%dビットのものではありません RSA公開指数がないか %d ビットより大きすぎます 本名: 失効証明書を本当に作成しますか? (y/N) 本当に作成しますか? (y/N) この自己署名を本当に削除しますか? (y/N)この主鍵を本当に削除しますか? (y/N) 選択した全ユーザIDを本当に削除しますか? (y/N) このユーザIDを本当に削除しますか? (y/N) 選択した全ユーザIDを本当に失効しますか? (y/N) このユーザIDを本当に失効しますか? (y/N) 本当に全ユーザIDに署名しますか? (y/N) 本当に署名しますか? (y/N) 選択したユーザIDの優先指定を本当に更新しますか? (y/N) 優先指定を本当に更新しますか? (y/N) 失効理由: %s パスフレーズを再入力 パスフレーズを再入力: このPINをもう一度入力してください: 既存の鍵を置き換えしますか? (y/N) 既存の鍵を置き換えますか? (y/N) 要求された鍵長は%uビット リセット・コードが短すぎます。最短の長さは%dです。 リセット・コードが(もはや)利用可能ではありません 失効証明書を作成。 失効証明書を作成しました。 見つからないような媒体に移動してください。もしワルがこの証明書への アクセスを得ると、そいつはあなたの鍵を使えなくすることができます。 媒体が読み込み不能になった場合に備えて、この証明書を印刷して保管するの が賢明です。しかし、ご注意ください。あなたのマシンの印字システムは、 だれでも見える場所にデータをおくことがあります! 変更を保存しますか? (y/N) 秘密鍵が使用できます。 主鍵の秘密部分が得られません。 主鍵の秘密部分はカード上に保存されています。 使用するアルゴリズムを選択してください。 DSA (別名DSS) は、署名専用の電子署名アルゴリズムです。 Elgamalは、暗号化のみのアルゴリズムです。 RSAは、署名にも暗号化にも使えます。 第一の鍵(主鍵)は、署名に使用できる鍵でなければなりません。優先指定の一覧を設定: 性別 ((M)男、(F)女、または空白): Sign署名しますか? (y/N) %署名は無期限です 期限切れの署名 %s この署名は%sで期限切れです 署名は%sで期限切れとなります 署名の有効期間は? (%s)%sに施された署名 %sに%s鍵ID %sで施された署名 署名注釈: 署名ポリシー: SsEeAaQq副鍵 %s は、もう失効されています。 書式: gpg [オプション] [ファイル] 署名、検査、暗号化や復号 デフォルトの操作は、入力データに依存 構文: gpgv [オプション] [ファイル] 既知の信用した鍵で署名を検査 今、%uビットの鍵を生成するようにカードは再コンフィグされました この鍵の最小信用レベル: %s この乱数生成器は実行するための間に合わせです - 強力なRNG では決してありません! このプログラムの生成したデータを使わないでください!! "%s"に対する自己署名は、 PGP 2.x形式の署名です。 この署名は有効ではありません。このことは、あなたの鍵リングから削除す る意味があります。署名は、エクスポート不可に設定されます。 署名は、失効不可に設定されます。 PGP 2.x形式ユーザIDの優先指定が、ありません。 このJPEGは、本当に大きい (%dバイト) ! %sモードでこのコマンドは禁止です。 このコマンドが使えるのはバージョン2のカードだけです これは秘密鍵です! 本当に削除しますか? (y/N) これは、鍵とユーザIDを結びつける署名です。通常、この署名を削除する のはいい考えではありません。実際には、GnuPGはもはやこの鍵を使えないの かもしれません。よって、この自己署名が何らかの理由により有効ではなく て、代替となる自己署名がある場合にのみ、削除を実行してください。これは鍵に対する有効な署名です。ふつうは、この署名を削除するべきでは ないでしょう。なぜなら、この署名は、この鍵への信用の接続の確立や、こ の鍵によって証明される鍵への信用の接続の確立にとって重要だからです。この鍵は自分のものです この鍵は使用禁止に設定されていますこの鍵は期限切れです!この鍵は%sで期限切れします。 この鍵は保護されていません。 この鍵は、%s鍵%sによって失効可能ですこの鍵はたぶん本人のものです この鍵は%sに%sによって鍵%sで失効されました この署名と一致する鍵を保有していないので、この署名は検査できません。 どの鍵が使用されたかわかるまでは、あなたはこの署名の削除を保留するべ きです。なぜなら、この署名の鍵が既に証明された他の鍵を通じて信用の接 続を確立するかもしれないからです。この署名は%sで期限切れです。 自己署名になるでしょう。 この鍵はPGP 2.xで使用できなくなります。 失効者: Web-of-Trustを構築するためGnuPGは、どの鍵を究極的に信用する のかを知る必要があります。それはふつう、秘密鍵にアクセスでき る鍵のことです。この鍵を絶対的に信用することにするなら、 "yes"と答えてください。 処理数の合計: %lu 公開鍵を取得するURL: 無圧縮不明の署名タイプ「%s」 使い方: gpg [オプション] [ファイル] (ヘルプは -h)使い方: gpgv [オプション] [ファイル] (ヘルプは -h)それでもこの鍵を使いますか? (y/N) ユーザID"%s" はコンパクトになりました: %s ユーザID"%s"は、期限切れです。ユーザID"%s"は、自己署名されていません。ユーザID"%s"は、失効されています。ユーザID "%s"は署名可能です。 ユーザID "%s": %d の署名が除去されました ユーザID "%s": %d の署名が除去されました ユーザID "%s": 既にクリーンとなっています ユーザID "%s": 既に最小化されています ユーザIDがもう有効でありません*警告*: *警告*:"%s"は、廃止されているコマンドです。使わないでください *警告*:"%s"は、廃止されているオプションです *警告*: %sは%sより優先 *警告*: 信用情報をもった2つのファイルが存在します。 *警告*: Elgamal署名+暗号化鍵は廃止されています *警告*: これはPGP 2.x形式の鍵です。指名失効者の追加で、一部の版のPGPは、 この鍵を拒否するかもしれません。 *警告*: これはPGP2形式の鍵です。フォトIDの追加で、一部の版のPGPは、 この鍵を拒否するかもしれません。 *警告*: この鍵は指名失効者によって失効されています! *警告*: この鍵は所有者によって失効されています! *警告*: この鍵は信用できる署名で証明されていません! *警告*: この鍵は十分に信用できる署名で証明されていません! *警告*: この副鍵は所有者によって失効されています! *警告*: 信用できない鍵を使っています! *警告*: この鍵は信用できま せん! *警告*: 弱い鍵を検出しました。パスフレーズを変更してください。 *警告*: 「%s」は空のファイルです *警告*: ユーザID署名が、%d秒未来です *警告*: ある鍵を指名失効者に設定すると、元に戻せません! *警告*: 暗号アルゴリズム%sは受取人の優先指定に入っていません *警告*: ダイジェスト・アルゴリズム %s は廃止されています *警告*: 暗号化されたメッセージは改竄されています! *警告*: 圧縮アルゴリズム %s (%d) の強制が、受取人の優先指定をそむきます *警告*: ダイジェスト・アルゴリズム %s (%d) の強制が、受取人の優先指定と対立します *警告*: 共通鍵暗号方式 %s (%d) の強制が、受取人の優先指定をそむきます *警告*: 無効な長さの random_seed ファイル - 使いません *警告*: 鍵%sには、これらのユーザIDに対して使用不可の *警告*: 鍵%sは失効されたかもしれません: 失効鍵%sを取ってきます *警告*: 鍵%sは失効されたかもしれません: 失効鍵%sが存在しません。 *警告*: 別バージョンのGnuPGの鍵サーバ・ハンドラ (%s) *警告*: 鍵サーバのオプション「%s」は、このプラットホームでは使われません *警告*: メッセージは共通鍵暗号方式の弱い鍵で暗号化されています。 *警告*: メッセージの完全性は保護されていません *警告*: 複数のプレインテクストが見られます *警告*: 多重署名の検出。最初のものだけ検査します。 *警告*: 主たるユーザIDがありません。このコマンドは、別な ユーザIDが主になると仮定する場合があります。 *警告*: 何もエクスポートされていません *警告*: 「%s」のオプションは起動している間、有効になりません *警告*: 潜在的にセキュアでない共通鍵暗号方式セッション鍵です *警告*: プログラムはcoreファイルを作成することがあります! *警告*: 公開鍵暗号を使わずに、受取人 (-r) を指定しています *警告*: 秘密鍵%sには、単純なSKチェックサムがありません *警告*: 署名のダイジェストが、メッセージと矛盾します *警告*: 無効な相互証明が、署名副鍵%sにあります *警告*: 署名副鍵%sは、相互証明でありません *警告*: 署名は、エクスポート不可に設定されません。 *警告*: 署名は、失効不可に設定されません。 *警告*: この鍵は失効されたようです (失効鍵は不在) *警告*: 表記を%%拡張不能 (大きすぎ)。非拡張を使用。 *警告*: ポリシーURLを%%拡張不能 (大きすぎ)。非拡張を使用。 *警告*: 優先指定鍵サーバURLを%%拡張不能 (大きすぎ)。非拡張を使用。 *警告*: URI %s からデータを取れません: %s *警告*: URI %s を解析できません *警告*: 鍵%sを%s経由で更新できません: %s *警告*: 一時ディレクトリ「%s」を削除できません: %s *警告*: 一時ファイルを削除できません (%s) 「%s」: %s *警告*: 構成ファイル「%s」の安全でない上位ディレクトリ所有者 *警告*: homedir 「%s」の安全でない上位ディレクトリ所有者 *警告*: 構成ファイル「%s」の安全でない上位ディレクトリ許可 *警告*: homedir 「%s」の安全でない上位ディレクトリ許可 *警告*: 構成ファイル「%s」の安全でない所有 *警告*: homedir 「%s」の安全でない所有 *警告*: 構成ファイル「%s」の安全でない許可 *警告*: homedir 「%s」の安全でない許可 *警告*: 実験的暗号アルゴリズム %s を使用します *警告*: 実験的ダイジェスト・アルゴリズム %sを使用 *警告*: 実験的公開鍵アルゴリズム%sを使用します *警告*: セキュアでないメモリーを使用しています! *警告*: セキュアでない乱数生成器を使っています!! たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動か す、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生 成器に十分なエントロピーを供給する機会を与えることができます。 認証鍵の鍵長は? (%u) 暗号化鍵の鍵長は? (%u) 署名鍵の鍵長は? (%u) 副鍵の鍵長は? (%u) 鍵長は? (%u) 鍵のユーザIDに署名するときには、その鍵がユーザIDの名前の人に属している ことを確認するべきです。あなたがどの程度注意深く確認したのかを他の人たちに 知らせることは有用です。 "0" は、あなたがどの程度注意深く確認したのかを、特に主張しないという 意味です。 "1" は、鍵の所有者と主張している人がその鍵を所有している、とあなたは 信じてはいるものの、検証は全然してなかった、またはできなかった、と いう意味です。これは、ペンネームを使うユーザの鍵に署名する場合の、 「ペルソナ」確認に有用です。 "2" は、通常の鍵の確認をした、という意味です。たとえば鍵のフィンガー・ プリントを検証し、写真付のIDにたいして鍵のユーザIDを検査した場合 がそうです。 "3" は、かなりしっかり鍵を検証した、という意味です。たとえば、鍵の所 有者本人と対面で、鍵のフィンガー・プリントを検証し、(パスポートのよ うな) 偽造のむつかしい写真付のIDの文書の手段で、鍵の所有者の名前が、 鍵のユーザIDの名前と一致することを検査して、(電子メールの交換など で) 鍵の電子メール・アドレスが鍵の所有者に属していることを検証した場 合がそうです。 上記2と3の例は、*単なる*例にすぎない、ということを念頭においてください。 他の鍵に署名する際、『通常』や『しっかり』が何を意味するかを最終的に決める のは、あなたです。 正しい答のわからない場合は、「0」で答えてください。これらの署名を失効しようとしています: あなたは文字集合「%s」を使っています。 v3鍵の有効期限は変更できません 最後のユーザIDは削除できません! ユーザIDを指定していません ("-r"を使いましょう) 。 パスフレーズが不必要なようですが、おそらくそれは良くない考えです! パスフレーズを必要としないようですが、おそらくそれは良くない考えです! 続けますが、パスフレーズを設定することを検討ください。パスフレーズは、 このプログラムの"--edit-key"オプションでいつでも変更できます。 これらのユーザIDに鍵%sで署名しました: PGP 2.x形式の鍵には指名失効者を追加できません。 PGP2形式の鍵にはフォトIDを追加できません。 --pgp2モードではPGP 2.x鍵でOpenPGP署名ができません。 trustdbを下記のコマンドで再生成することを試すことができます: 鍵を少なくとも1本選択してください。 ユーザIDを少なくともひとつ選択してください。 鍵をきっかり1本選択してください。 秘密鍵を保護するためにパスフレーズがいります。 次のユーザの秘密鍵のロックを解除するには パスフレーズがいります:"%s" 次のユーザの秘密鍵のロックを解除するにはパスフレーズがいります: "%.*s" %uビット%s鍵, ID %s作成日付は%s%s 次のユーザIDを選択しました: "%s" 証明理由を指定すべきです。文脈に応じて、以下の一覧から選ぶことが できます。 「鍵がコンプロマイズされました」 証認されていない人が秘密鍵へのアクセスを得た、と信ずる に足る理由のあるときに、これを使います。 「鍵がとりかわっています」 この鍵を自分で新しい鍵と交換したときに使います。 「鍵はもう使われていません」 この鍵を使うのをやめたときに使います。 「ユーザIDがもう無効です」 もうそのユーザIDは使うべきでない、というときに使い ます。これは普通、電子メールのアドレスが無効になったと きに使います。 "%s"に対するあなたの今の署名 は期限切れです。 "%s"にたいするあなたの今の署名 はローカルな署名です。 あなたの決定は? 選択は? 選択は? (詳細は '?' で): このシステムでは、2038年以降の日付を表示できませんが、 2106年までなら正しく取り扱えます。 [ 充分 ][ 未定 ][期限切れ][ 失効 ][ 未知 ][ユーザIDが見つかりません][ファイル名][まぁまぁ][未設定][失効][自己署名][ 究極 ][不確定]「%s」はもう圧縮済みです 「%s」は、JPEGファイルではありません 「%s」は普通のファイルではありません - 無視 「%s」は、有効な文字集合ではありません 「%s」は、有効な大型鍵IDでありません 「%s」は、有効な署名期限ではありません 保護されていない副鍵を、エクスポートしようとしています 管理コマンドへのアクセスが設定されていません 操作「%s」は、鍵サーバ・スキーム「%s」でサポートされていません スマートカードへ鍵の追加フォトIDの追加失効鍵の追加副鍵を追加ユーザIDの追加あいまいなオプション「%s」 匿名の受取人用です。秘密鍵%sを試します ... 外装ヘッダー: 外装: %s %s暗号化済みデータを仮定 未知のクリティカル・ビットにより、鍵%sの署名を不正とみなします 署名されたデータが'%s'にあると想定します 署名の検証時に自動的に鍵を取得する「%s」を %s から自動取得 不正なMPIですURIが不正です不正な証明書です鍵が不正ですパスフレーズが不正です公開鍵が不正です秘密鍵が不正です署名が不正ですいくらかおとなしくバイナリーbuild_packet に失敗しました: %s cC鍵リング「%s」をキャッシュします %sにアクセスできません - 無効なOpenPGPカード? 「%s」にアクセスできません: %s 「%s」をクローズできません: %s 「%s」へ接続できません: %s 「%s」が作成できません: %s バックアップ・ファイル「%s」が作成できません: %s ディレクトリ「%s」が作成できません: %s 「%s」のロックを作成できません コア・ダンプを使用禁止にできません: %s これはバッチ・モードではできません "--yes"のないバッチ・モードではできません pbits=%u qbits=%uの素数は生成できません %d ビット未満の素数は生成できません 公開鍵のアルゴリズム%dは、取り扱えません %d文字以上の長さのテキスト行は、取り扱えません このあいまいな署名データは取り扱えません 「%s」がロックできません 「%s」がロックできません: %s 「%s」が開けません 「%s」が開けません: %s 署名されたデータ「%s」が開けません 鍵リングが開けませんバッチ・モードでパスフレーズは問合せできません 「%s」を読めません: %s 「%s」を調べることができません: %s S2Kモードのため、共通鍵ESKパケットを使えません 「%s」に書き込めません: %s キャンセルされましたユーザによる取消し cancel|cancelPGP 2.x形式の鍵は、指名失効者に任命できません 共通鍵暗号方式の弱い鍵を回避することができません。%d回試みました! カードはダイジェスト・アルゴリズム %s をサポートしていません カードが永久にロックされてます! カードリーダが利用できません カード番号: 鍵を取得するURLの変更CAフィンガー・プリントの変更カードのPINを変更カード所有者の名前の変更カード所有者の性別の変更カードのデータを変更鍵または選択した副鍵の有効期限を変更する言語優先指定の変更ログイン名の変更所有者信用の変更パスフレーズの変更署名の確認作成された署名の検査に失敗しました: %s 信用データベースの検査 チェックサム・エラー暗号アルゴリズム%d%sは未知か使用禁止です コロンがありません使えないユーザIDをコンパクトにし、すべての署名を鍵から除去使えないユーザIDをコンパクトにし、使えない署名を鍵から除去completes-neededは正の値が必要です 対立するコマンド 鍵サーバのURLを解析不能 秘密鍵をインポートしたときに公開鍵を作成しますASCII形式の外装を作成作成: %s作成時刻スタンプがありません データは保存されていません。 保存するには"--output"オプションを使ってください 外装除去に失敗しました: %s データを復号 (デフォルト)復号に失敗しました: %s 復号に成功 選択した副鍵の削除選択したユーザIDの削除選択したユーザIDから署名を削除する鍵ブロックの削除に失敗しました: %s 深さ: %d 有効性: %3d 署名: %3d 信用: %d-, %dq, %dn, %dm, %df, %du ディレクトリ「%s」ができました 鍵を無効にする使用禁止鍵の一覧時にフォトIDを表示する署名の検証時にフォトIDを表示する一時ファイルを使用後、それを削除しない無変更インポート後、信用データベースを更新しない有効なPKAデータで署名の信用度を上昇させる鍵を有効にする外装に失敗しました: %s データを暗号化%lu 個のパスフレーズで暗号化 %s鍵, ID %sで暗号化されました %u-ビット%s鍵, ID %s, 日付%sに暗号化されました 1 個のパスフレーズで暗号化 未知のアルゴリズム%dによる暗号化 --pgp2モードのメッセージ暗号化では、IDEA暗号方式が必要です 暗号化には共通鍵暗号方式のみを使用十分なメモリの確保のエラー: %s 鍵%dの長さを%u bit に変更する際にエラー: %s 「%s」の作成エラー: %s 鍵リング「%s」の作成エラー: %s パスフレーズの作成エラー: %s 「%s」で信用レコードの検索エラー: %s 現行鍵情報の取得エラー: %s 新しいPINの取得エラー: %s 「%s」でエラー: %s 後尾の行にエラーがあります 「%s」の読み込みエラー: %s アプリケーション・データの読み込みエラー フィンガー・プリントのデータ・オブジェクトの読み込みエラー 鍵ブロックの読み込みエラー: %s 秘密鍵ブロック"%s"の読み込みエラー: %s カードからCHVステイタスの取得でエラー 「%s」の書き込みエラー: %s 鍵のカード書き込みエラー: %s 鍵リング「%s」の書き込みエラー: %s 公開鍵リング「%s」の書き込みエラー: %s 秘密鍵リング「%s」の書き込みエラー: %s 既存の鍵は置き換えられます 期限切れ期限切れ: %s有効期限: %sユーザIDの属性(通常フォトID)をエクスポートします鍵をエクスポートする鍵サーバに鍵をエクスポートする"sensitive"(機密)と指定された失効鍵をエクスポートしますローカルのみと指定された署名をエクスポートします秘密鍵のエクスポートは認められません この構築では、外部鍵サーバの呼出しはサポートしていません オプション・ファイルの許可モードが安全ではないので、外部プログラムの呼出しは禁止となります。 信用データベースの初期化に失敗しました: %s 鍵リングキャッシュの再構築に失敗しました: %s 生成日の保管に失敗しました: %s フィンガー・プリントの保管に失敗しました: %s 鍵の保管に失敗しました: %s 副鍵の保護を解除するのに失敗しました: %s デフォルトのPIN %s を使うのに失敗しました: %s - これ以上デフォルトとしての使用を無効とします 女カードURLで指定された鍵の取得ファイルのクローズ・エラーファイルの作成エラーファイルの削除エラーファイルが存在していますファイルのオープン・エラーファイル読み込みエラーファイル名の変更エラーファイルの書き込みエラーカードのフィンガー・プリントが要求されたものと一致しません ユーザIDを主にする強制共通鍵暗号方式 %s (%d) の強制が、受取人の優先指定をそむきます 「%s」のfstatが%sで失敗しました: %s fstat(%d)が%sで失敗しました: %s 充分一般的なエラーPGP 2.x互換のメッセージを生成新しい鍵ペアを生成失効証明書を生成新しい鍵を生成鍵の生成に失敗しました 新しい鍵を生成 問題視された16ビットのチェックサムを秘密鍵の保護に生成 このセッションでgpg-agentは無効です gpg-agentプロトコル・バージョン%dはサポートしていません gpg/card> 鍵に設定されたPKAレコードを鍵の取得時に与える鍵に設定される優先鍵サーバURLを与えるiImMqQsS鍵サーバから鍵をインポートするローカルだけとマークされた署名をインポートします鍵のインポート/マージ秘密鍵のインポートは禁止です 失効した鍵を検索結果に含めるkey IDによる検索に副鍵も含める入力の%u行目が長すぎるか、LFがないようです 入力行の長さが%d文字を超えています 無効無効なS2Kモード。0か1か3でなければなりません 無効な指定です無効な外装です無効な外装ヘッダー: 無効な外装: 行の長さが%d文字を超えています 無効な auto-key-locate リストです 無効なクリア・テクスト署名ヘッダー 無効なダッシュでエスケープされた行: 無効なデフォルトの優先指定 無効なdefault-cert-level。0か1か2か3でなければなりません 無効なエクスポート・オプションです 無効なフィンガー・プリント無効なハッシュ・アルゴリズム「%s」です 無効なインポート・オプションです 優先指定文字列に無効な項目「%s」があります 無効な鍵リングです無効な鍵サーバ・オプションです 無効な鍵サーバ・プロトコルです (us %d!=handler %d) 無効な一覧オプションです 無効なmin-cert-level。0か1か2か3でなければなりません 無効なパケットですパスフレーズが不正です無効な個人用暗号方式の優先指定 無効な個人用圧縮の優先指定 無効な個人用ダイジェストの優先指定 無効な64進文字%02Xをスキップしました proc_tree() の中に無効なルート・パケットを検出しました OpenPGPカードに無効な構造 (データ・オブジェクト 0x93) 無効な値 無効な検証オプションです あなたの優先指定を更新し、この鍵を再配布することが強く推奨されます 鍵"%s"が鍵サーバに見つかりません 鍵"%s"が見つかりません: %s 鍵%sにはユーザIDがありません 鍵%sを究極的に信用するよう記録しました 鍵%sが信用データベースに複数あります 鍵%sは%lu秒未来にできました (時間旅行か時計の障害でしょう) 鍵%sは%lu秒未来にできました (時間旅行か時計の障害でしょう) 鍵%s:"%s"新しい署名を%d個 鍵%s:"%s"新しい副鍵を%d個 鍵%s:"%s"新しいユーザIDを%d個 鍵%s: "%s" %d個の署名をきれいにしました 鍵%s: "%s" %d個の署名をきれいにしました 鍵%s: "%s" %d個のユーザIDをきれいにしました 鍵%s: "%s" %d個のユーザIDをきれいにしました 鍵%s:"%s"新しい署名を1個 鍵%s:"%s"新しい副鍵を1個 鍵%s:"%s"新しいユーザIDを1個 鍵%s:"%s"変更なし 鍵%s:"%s"失効証明書の追加 鍵%s:"%s"失効証明書をインポートしました 鍵%s: PGP 2.x形式の鍵です - スキップします 鍵%s: PKSの副鍵変造を修復 鍵%s: 信用する鍵として受理しました 鍵%s: 受理した未自己署名のユーザID"%s" 鍵%s: もう秘密鍵リングにあります 鍵%s: 元の鍵ブロックに位置づけできません: %s 鍵%s: 元の鍵ブロックを読み出せません: %s 鍵%s: 直接鍵署名を追加 鍵%s: こちらの複製と合いません 鍵%s: 重複したユーザIDの検出 - マージ 鍵%s: 無効な直接鍵署名 鍵%s: 無効な失効証明書: %s - 拒否 鍵%s: 無効な失効証明書: %s - スキップします 鍵%s: ユーザID"%s"の自己署名が、無効です 鍵%s: 無効な副鍵の対応です 鍵%s: 無効な副鍵失効です 鍵%s: 鍵はカード上にあります - スキップします 鍵%s: 新しい鍵です - スキップします 鍵%s: 公開鍵がありません - 失効証明書を適用できません 鍵%s: 信用される鍵の公開鍵がありません - スキップします 鍵%s: 鍵に対応する副鍵がありません 鍵%s: 鍵失効にたいする副鍵がありません 鍵%s: 副鍵対応への署名にたいする副鍵がありません 鍵%s: 副鍵失効署名にたいする副鍵がありません 鍵%s: ユーザIDがありません 鍵%s: 署名に対応するユーザIDがありません 鍵%s: 有効なユーザIDがありません 鍵%s: エクスポート不可な署名 (クラス0x%02X) - スキップします 鍵%s: 保護されていません - スキップします 鍵%s: 公開鍵"%s"をインポートしました 鍵%s: 公開鍵が見つかりません: %s 鍵%s: 多重副鍵の対応を削除します 鍵%s: 無効な副鍵の多重失効を削除します 鍵%s: 失効証明書が誤って設定されています - スキップします 鍵%s: 秘密鍵をインポートしました 鍵%s: 秘密鍵が見つかりません: %s 鍵%s: 無効な暗号方式%dの秘密鍵です - スキップします 鍵%s: 公開鍵のない秘密鍵です - スキップします 鍵%s: スキップした副鍵 鍵%s: スキップしたユーザID"%s" 鍵%s: 副鍵署名の場所が、誤っています - スキップします 鍵%s: 予期せぬ署名クラス (0x%02X) - スキップします 鍵%s: サポートしていない公開鍵アルゴリズムです 鍵%s: ユーザID"%s"のサポートしていない公開鍵アルゴリズムです 鍵はもうあります 鍵の書出しに失敗しました: %s 鍵の生成が完了しました (%d秒) 鍵は%lu秒未来にできました (時間旅行か時計の障害でしょう) 鍵は%lu秒未来にできました (時間旅行か時計の障害でしょう) セキュアでないというフラグが鍵には設定されていません。 偽物乱数生成器とはいっしょに使えません! 鍵が鍵サーバに見つかりません 鍵は操作できません: %s keyblock リソース「%s」: %s 鍵リング「%s」ができました 鍵サーバ通信エラー: %s 鍵サーバはVERSIONを送信しませんでした 鍵サーバのエラー鍵サーバの内部エラー 鍵サーバからの受信に失敗しました: %s 鍵サーバの更新に失敗しました: %s 鍵サーバの検索に失敗しました: %s 鍵サーバへの送信に失敗しました: %s 鍵サーバのタイムアウト 無効な鍵長。%uビットにします 鍵長を%uビットに丸めます 行が長すぎます全有効データを表示鍵署名の検査と一覧鍵とユーザIDの一覧鍵の一覧鍵とフィンガー・プリントの一覧鍵と署名の一覧優先指定の一覧 (エキスパート)優先指定の一覧 (冗長)秘密鍵の一覧分遣署名を作成日時の矛盾を警告だけにしますmake_keysig_packet に失敗しました: %s 男CRCの書式が正しくありません GPG_AGENT_INFO環境変数の書式が正しくありません ユーザIDの書式が正しくありませんまぁまぁmarginals-neededは1より大きな値が必要です max-cert-depthは1から255の範囲でなければなりません PINブロックの解除や変更のメニューバックアップ鍵をスマートカードへ移動スマートカードの鍵への移動鍵の署名を正しい場所に移動します nN入れ子のクリア・テクスト署名 ネットワーク・エラー断じてなし無期限 新しい構成ファイル「%s」ができました 次回の信用データベース検査は、%sです no=記号が、グループ定義「%s」内に見つかりません カードがありません対応する公開鍵がありません: %s データがありませんデフォルトの秘密鍵リングがありません: %s エントロピー収集モジュールが、検出されていません 鍵サーバ・スキーム「%s」用のハンドラがありません 鍵サーバ・アクションがありません! 既知の鍵サーバがありません (オプション--keyserverを使いましょう) 信用データベースの検査は、不要です 信用モデル「%s」で信用データベースの検査は、不要です 信用モデル「%s」で信用データベースの更新は、不要です フォト・ビューアが設定されてません 遠隔プログラムの実行は、サポートしていません "%s"用の失効鍵が見つかりません 秘密鍵がありません 公開副鍵%sに対する秘密副鍵がありません - 無視 署名が見つかりません 署名されたデータがありません そのユーザIDはありません究極的に信用する鍵が見つかりません 有効なOpenPGPデータが見つかりません。 有効な宛先がありません 書き込み可能な鍵リングが見つかりません: %s 書き込み可能な公開鍵リングが見つかりません: %s 書き込み可能な秘密鍵リングが見つかりません: %s 分遣署名でありません OpenPGPカードでありません暗号化されていません強制なし未処理サポートされていません注意: random_seed ファイルは空です 注意: random_seed ファイルの更新をしません oO終了。匿名の受取人用です。 okay|okay旧式のDEK符号は、サポートしていません 古い形式 (PGP 2.x) の署名 既存の鍵に対する更新のみ認めます初期化済みの安全なメモリーがない場合には操作できません オプション・ファイル「%s」: %s 元のファイル名='%.*s' 所有者信用情報をクリアしました 所有者信用度がありません未知のダイジェスト・アルゴリズムで生成されたパスフレーズ %d パスフレーズをちゃんと繰り返していません。再入力してください--check-trustdbを実行してください オプションですが、電子メールのアドレスを入力することを強く推奨します詳細は%sをご覧ください 詳細はhttp://www.gnupg.org/documentation/faq.htmlをご覧ください "%s%s"を代わりに使ってください 鍵生成の間、お待ちください ... 優先指定「%s」の重複 ファイル末尾が早すぎます (CRCの途中) ファイル末尾が早すぎます (後尾部の中にあります) ファイル末尾が早すぎます (CRCがありません) カード・ステイタスを表示暗号化パケットの取扱いで障害 エージェントに障害: エージェント利用禁止 上書き前に確認保護アルゴリズム%d%sはサポートしていません 保護ダイジェスト%dはサポートしていません 公開鍵と秘密鍵を作成し、署名しました。 公開鍵%sは、署名の%lu秒前です 公開鍵%sは、署名の%lu秒前です 公開鍵%sが見つかりません: %s 公開鍵の復号に失敗しました: %s 公開鍵と秘密鍵が照合しません! 公開鍵による暗号化済みデータ: 正しいDEKです 公開鍵は%sです 公開鍵が見つかりません究極的に信用する鍵%sの公開鍵が見つかりません qQquitこのメニューを終了外装の中にquoted printable文字があります。おそらくバグのあるMTAを使われたたのでしょう それによって、潜在的なアルゴリズム不一致の問題を避けられます 「%s」で読み込みエラー: %s 「%s」から読み出します 「%s」からオプションを読み込みます 公開鍵の読み込みに失敗しました: %s 標準入力より読み込み中 ... 失効理由: %d本の鍵を%sから更新 1本の鍵を%sから更新 インポート後、できるだけ除去しますエクスポートの際、できるだけ除去する公開鍵リングから鍵を削除秘密鍵リングから鍵を削除エクスポートされた副鍵からパスフレーズを除去するインポート後、利用できない部分を鍵から除去しますエクスポートの際、利用できない部分を除去する「%s」から「%s」への移動に失敗: %s インポートの際、にpksキーサーバからのダメージを修正します鍵%sを%sに要求 鍵%sを%sからサーバ%sに要求 リソースが限界です応答にRSAのモジュラスが含まれていません 応答にRSA公開指数が含まれていません 応答に公開鍵データが含まれていません 失効のコメント: 鍵の失効または選択した副鍵の失効選択したユーザIDの失効選択したユーザIDの署名を失効失効あなたの鍵%sで%sに失効されています 失効: %s%uビットに丸めます 保存して終了鍵サーバの鍵を検索する"%s"をサーバ%sから検索 "%s"を%sサーバ%sから検索 %sから名前を検索 %sからサーバ%sで名前を検索 秘密鍵"%s"が見つかりません: %s 秘密鍵はもうカードに保管してあります 秘密鍵が利用できません秘密部分が得られません 鍵の秘密部分が利用できません 副鍵Nの選択ユーザID Nの選択選択された証明書ダイジェスト・アルゴリズムは、無効です 選択された暗号アルゴリズムは、無効です 選択された圧縮アルゴリズムは、無効です 選択されたダイジェスト・アルゴリズムは、無効です openpgpの選択に失敗しました: %s 鍵%sを%sへ送信 鍵%sを%sサーバ%sへ送信 選択したユーザIDに注釈を設定する選択したユーザIDに優先指定リストを設定選択したユーザIDに優先鍵サーバのURLを設定署名の一覧時にIETF標準注釈を表示する署名の検証時にIETF標準注釈を表示する管理コマンドを表示署名の一覧時にすべての注釈を表示する署名の検証時にすべての注釈を表示する署名の一覧時に有効期限の日付を表示するフィンガー・プリントを表示署名の検証時に主なユーザIDだけをを表示する署名の一覧時にポリシーURLを表示する署名の検証時にポリシーURLを表示する署名の一覧時に優先鍵サーバURLを表示する署名の検証時に優先鍵サーバURLを表示する鍵の一覧に失効した副鍵、期限切れとなった副鍵を表示する鍵の一覧に失効したユーザID、期限切れとなったユーザIDを表示する署名の検証時に失効したユーザID、期限切れとなったユーザIDを表示する選択したフォトIDを表示鍵の一覧に鍵リングの名前を表示するこのヘルプを表示鍵の一覧時にユーザIDの有効性を表示する署名の検証時にユーザIDの有効性を表示する署名の一覧時にユーザの注釈を表示する署名の検証時にユーザの注釈を表示する鍵に署名鍵へローカルに署名鍵への署名や編集選択したユーザIDに署名する [* 以下の関連コマンドを参照 ]選択したユーザIDにローカルに署名選択したユーザIDに失効不可の署名をする選択したユーザIDに信用署名を署名する署名の検証を省略 これまでに作成された署名: %lu %sで%s%s%sに署名されています 署名に失敗しました: %s 署名する副鍵%sはすでに相互証明されています 署名:"%s"をスキップします: %s "%s"をスキップします: 重複 スキップ: 公開鍵はもう設定済みです スキップ: 公開鍵はデフォルトの受取人としてもう設定済みです スキップ: 秘密鍵はもうあります 型%dのブロックをスキップします ユーザID"%s"のv3自己署名をスキップします スタンドアロン失効。"gpg --import"を使って適用してください クラス0x%02xの独立署名 カードへの鍵の保管に失敗しました: %s 副鍵 %s は署名をしないので、相互証明の必要はありません 型%dの下位パケットにクリティカル・ビットを発見 「%s」の共通鍵暗号に失敗しました: %s 外部プログラムの呼出しでシステム・エラー: %s この鍵を鍵リングから使いますテキストモードあたえられた証明書ポリシーURLは無効です 指定された優先指定鍵サーバURLは無効です あたえられた署名ポリシーURLは無効です 署名を検証できませんでした。署名ファイル (.sigや.asc)がコマンド行の最初でなければ ならないことを念頭においてください。 この公開鍵にたいする秘密鍵"%s"があります! これはPGPの生成したElgamal鍵で、署名用には安全ではありません!この鍵は失効者としてもう指名されています 自己署名のないせいでしょう このメッセージは、%sでは使用できません このプラットホームだと、外部プログラムの呼出しには、一時ファイルが必要です 日時が矛盾しています秘密鍵と公開鍵の一覧の反転署名強制PINフラグを反転暗号方式の優先指定が多すぎます 圧縮の優先指定が多すぎます ダイジェストの優先指定が多すぎます pkキャッシュのエントリーが多すぎます - 使用禁止 信用データベースのエラーです信用レコード%luが要求された型%dではありません 信用レコード%lu, リクエスト型%d: 読み込みに失敗しました: %s 信用レコード%lu, 型%d: 書き込みに失敗しました: %s 信用: %s信用データベース レコード%lu: シークに失敗しました: %s 信用データベース レコード%lu: 書き込みに失敗しました (n=%d): %s 信用データベースのトランザクションが大きすぎます 信用データベース: シークに失敗しました: %s 信用データベース: 読み込みに失敗しました (n=%d): %s 信用データベース: 同期に失敗しました: %s PKA情報が有効のため、信用レベルがFULLに調整されました PKA情報が無効のため、信用レベルがNEVERに調整されました 究極フォトIDが表示不能! 外部プログラムを実行できません 「%s」を実行できません: %s シェル「%s」を実行できません: %s JPEGファイル「%s」が開けません: %s 外部プログラムの応答を読み出せません: %s exec-pathを%sに設定不能 信用データベースのバージョン・レコードが更新できません: 書き込みに失敗しました: %s 暗号化しようとしている鍵は全部IDEA暗号を使えません。 未知の信用モデル (%d) は使えません - %s信用モデルを仮定 PINをリセット・コードでブロックを解除する無圧縮|なし未定義予期せぬ外装: 予期せぬデータです未実装の暗号アルゴリズムです未実装の公開鍵アルゴリズムです未知の不明の外装ヘッダー: 未知の暗号方式アルゴリズムです未知の圧縮アルゴリズムです未知の構成項目「%s」 デフォルトの受取人"%s"が見つかりません 未知のダイジェスト・アルゴリズムです未知の鍵保護アルゴリズムです 未知のオプション「%s」 未知のパケット型です未知の保護アルゴリズムです 未知の公開鍵アルゴリズムです未知の署名クラスです未知のバージョンです外部プログラムが、不自然に終了 無指定そのURIはサポートしていません使用できない公開鍵アルゴリズムです使用できない公開鍵です使用できない秘密鍵です鍵サーバから鍵を全部更新する更新に失敗しました: %s 秘密の更新に失敗しました: %s 信用データベースを更新利用法: %s使い方: gpg [オプション] 出力ファイルとして使用正準テキスト・モードを使用まず"--delete-secret-keys"オプションでこれを削除してください。 厳密なOpenPGPの振舞を採用キーサーバ・ヘルパーにデータを与える際、一時ファイルを使う署名や復号にこのユーザidを使用ユーザID"%s"は、もう失効されています ユーザID:"%s" %s信用モデルを使用 %s暗号方式を使います デフォルトPINを%sとして使います 副鍵%s(主鍵%sではなく)を用います PKAデータで署名を検証する有効性: %s冗長管理者PINの確認はこのコマンドでは今のところ禁止されています CHV%dの検証に失敗しました: %s 署名を検証PINを確認しすべてのデータを表示する「%s」のロックを待ちます... 弱い鍵です弱い鍵ができました - 再実行 変な長さの暗号化済みセッション鍵 (%d) %s のため、セキュアでないメモリで実行しません 直接署名を書き込みます 鍵対応への署名を書き込みます 新しい鍵を書き込み 「%s」へ公開鍵を書き込みます 「%s」へ秘密鍵スタブを書き込みます 「%s」へ秘密鍵を書き込みます 自己署名を書き込みます 「%s」への書き込み 標準出力に書き込みます 誤った秘密鍵が使われていますyYyes--pgp2モードではPGP 2.x形式の鍵でクリア署名しかできません --pgp2モードでは、PGP 2.x形式の鍵で分離署名できるだけです --pgp2モードでは2048ビット以下のRSA鍵で暗号化しかできません --pgp2モードでは分遣署名かクリア署名だけしかできません 以下で、優先指定が更新できます: gpg --edit-key %s updpref save --pgp2モードでは署名と暗号化を同時にできません 指名失効者には、その鍵自体を任命できません --symmetric --encryptを%sモードで使うことはできません --symmetric --encryptを--s2k-mode 0で使うことはできません --symmetric --sign --encryptを%sモードで使うことはできません --symmetric --sign --encryptを--s2k-mode 0で使うことはできません バグを発見 ... (%s:%d) %sを%sモードで使うことはできません 暗号アルゴリズム「%s」を%sモードで使うことはできません 圧縮アルゴリズム「%s」を%sモードで使うことはできません ダイジェスト・アルゴリズム「%s」を%sモードで使うことはできません --pgp2を指定したら、(パイプでなく) ファイルを指定せねばなりません。 |AN|新しい管理者PIN|A|管理者PINを入力してください|A|管理者PINを入力してください%%0A[残り回数: %d]|FD|このFDに状態を書き込む|名前|「名前」用に暗号化|N|新しいPIN|N|圧縮レベルをNに設定 (0は非圧縮)|RN|新しいリセット・コード|[ファイル]|クリア・テクスト署名を作成|[ファイル]|署名を作成|アルゴリズム [ファイル]|メッセージ・ダイジェストを表示||PINを入力してください||PINを入力してください%%0A[署名数: %lu]||カードのリセット・コードを入力してくださいgnupg-1.4.20/po/sk.po0000644000175000017500000060750612635457220011256 00000000000000# GnuPG Slovak translation # Copyright (C) 1998 - 2004 Free Software Foundation, Inc. # Michal Majer , 2002 - 2004 msgid "" msgstr "" "Project-Id-Version: gnupg 1.2.5\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:16+0200\n" "Last-Translator: Michal Majer \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, fuzzy, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "nemem vytvori prvoslo s dkou menej ako %d bitov\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "nemem vytvori prvoslo s dkou menej ako %d bitov\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "nebol detekovan iadny modul na zskanie entropie\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "nemono otvori `%s'\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "zapisujem tajn k do `%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "nemem otvori `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "nemem poui prkaz stat na `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' nie je normlny sbor - ignorovan\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "poznmka: sbor random_seed je przdny\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "varovanie: neplatn vekos random_seed - sbor nepouit\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "nemem ta `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "poznmka: sbor random_seed nie je aktualizovan\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "nemem vytvori `%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "nemem zapisova do `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "nemem zavrie `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "VAROVANIE: pouit genertor nhodnch sel nie je bezpen!!\n" #: cipher/random.c:894 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 "" "Genertor nhodnch sel je len atrapa, aby program mohol bea,\n" "v iadnom prpade nie je kryptograficky bezpen!\n" "\n" "NEPOUVAJTE IADNE DTA VYTVOREN TMTO PROGRAMOM!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Prosm akajte, zskava sa entropia. Robte zatia nejak in prcu\n" "aby ste sa nenudili a zvite tm kvalitu entropie.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Nedostatok nhodnch bajtov. Prosm, pracujte s operanm systmom, aby\n" "ste mu umonili zska viac entropie (je potrebnch %d bajtov).\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "nemem inicializova databzu dvery: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "zlyhalo obnovenie vyrovnvacej pamti kov: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "zmazanie bloku ka sa nepodarilo: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "nepodarilo posla k na server: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "tajn asti ka nie s dostupn\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Prosm vberte dvod na revokciu:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "chyba pri vytvran hesla: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "chyba pri tan bloku ka: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: chyba pri tan vonho zznamu: %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "`%s' je u skomprimovan\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "vytvori nov pr kov" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "vytvori nov pr kov" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "nemem inicializova databzu dvery: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "zmazanie bloku ka sa nepodarilo: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "Vytvorenie ka sa nepodarilo: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "%s podpis, hashovac algoritmus %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "nenjden iadne platn dta vo formte OpenPGP.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "ASCII kdovanie: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "neplatn hlavika ASCII kdovania: " #: g10/armor.c:459 msgid "armor header: " msgstr "ASCII hlavika: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "neplatn hlavika podpisu v itatenom formte\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "ASCII hlavika: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "vnoren podpisy v itatenom formtu\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "neoakvan kdovanie ASCII:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "nesprvne oznaenie riadku mnusmi: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "neplatn znak vo formte radix64 %02x bol preskoen\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "predasn koniec sboru (iadne CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "predasn koniec sboru (v CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "nesprvny formt CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "Chyba CRC; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "predasn koniec sboru (v ptike)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "chyba v ptike\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "nenjden iadne platn dta vo formte OpenPGP.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "neplatn kdovanie ASCII: riadok je dlh ako %d znakov\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "neplatn znak (quoted-printable) v ASCII kdovan - pravdepodobne bol " "pouit nesprvny MTA\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "tajn k nie je dostupn" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "nemono previes v dvkovom mde\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Tento prkaz nie je v mdoch %s dovolen.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "V vber? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr "Dvod nebol pecifikovan" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "nespracovan" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "iadny zodpovedajci verejn k: %s\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "chyba pri vytvran sboru kov (keyring)`%s': %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "chyba pri tan `%s': %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "chyba pri vytvran `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "aktualizova predvoby" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "neplatn znak v reazci s predvobami\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "neplatn znak v reazci s predvobami\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "chyba: neplatn odtlaok\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "vypsa fingerprint" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "chyba: neplatn odtlaok\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "Vytvorenie ka sa nepodarilo: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "nenjden iadne platn dta vo formte OpenPGP.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "chyba pri zpise do sboru tajnch kov `%s': %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Ak vekos ka si prajete? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Ak vekos ka si prajete? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Ak vekos ka si prajete? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrhlen na %u bitov\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "chyba pri tan bloku tajnho ka `%s': %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "preskoen: tajn k je u v databze\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Prosm, vyberte druh ka, ktor chcete:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "Platnos podpisu vyprala %s\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (len na ifrovanie)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Neplatn vber.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Prosm vberte dvod na revokciu:\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "neznmy ochrann algoritmus\n" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "Tajn asti primrneho ka nie s dostupn.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "preskoen: tajn k je u v databze\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "chyba pri zpise sboru kov (keyring) `%s': %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "ukoni toto menu" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "konfliktn prkazy\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "ukza tto pomoc" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "K k dispozcii na: " #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "zmeni dobu platnosti" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "zmeni dveryhodnos vlastnka ka" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "vypsa fingerprint" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "vytvori nov pr kov" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "konfliktn prkazy\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "konfliktn prkazy\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "zapisujem tajn k do `%s'\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Neplatn prkaz (skste \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "tajn k nie je dostupn" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "zmazanie bloku ka sa nepodarilo: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Opakujte heslo: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "heslo nie je zopakovan sprvne; skste to znovu" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "nemono otvori `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output pre tento prkaz nefunguje\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "k `%s' nebol njden: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "chyba pri tan bloku ka: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(pokia neurte k jeho fingerprintom)\n" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "bez parametra \"--yes\" to nemono v dvkovom mde previes\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Zmaza tento k zo sboru kov? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "Toto je tajn k! - skutone zmaza? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "zmazanie bloku ka sa nepodarilo: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "informcie o dveryhodnosti vlastnka ka vymazan\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "existuje tajn k pre tento verejn k \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "aby ste ho zmazali, pouite najprv prepna \"--delete-secret-key\".\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "chyba pri vytvran hesla: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "v mde S2K nemono poui symetrick ESK paket\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "pouit ifra %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' je u skomprimovan\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "VAROVANIE: sbor `%s' je przdny\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "v mde --pgp2 mete ifrova len RSA kom s dkou 2048 bitov a menej\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "tam z `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "algoritmus IDEA nemono poui na vetky ke, pre ktor ifrujete.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "vyiadan symetrick ifra %s (%d) nevyhovuje predvobm prjemcu\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "vyiadan kompresn algoritmus %s (%d) nevyhovuje predvobm prjemcu\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "vyiadan symetrick ifra %s (%d) nevyhovuje predvobm prjemcu\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "" "pouitie %s nie je v mde %s dovolen\n" "\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s zaifrovan pre: %s\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s zaifrovan dta\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "zaifrovan neznmym algoritmom %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "VAROVANIE: sprva bola zaifrovan slabm kom v symetrickej ifre.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problm so zaifrovanm paketom\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "iadne vzialen vykonvanie programu nie je podporovan\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "nemem vytvori adresr `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "volanie externho programu zruen kvli nebezpenm prvam sboru " "nastaven\n" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "" "tto platforma potrebuje doasn sbory na spustenie externho programu\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "nemono spusti %s \"%s\": %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "nemono spusti %s \"%s\": %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "systmov chyba pri volan externho programu: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "nekorektn ukonenie externho programu\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "nemono spusti extern program\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "nemono cta odozvu externho programu: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "VAROVANIE: nemem vymaza doasn sbor (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "VAROVANIE: nemem vymaza doasn adresr `%s': %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "Podpis bude oznaen ako neodvolaten (non-revocable).\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr "iadne revokan ke pre `%s' nenjden\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "revokova sekundrny k" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "nepouiten tajn k" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "zapisujem tajn k do `%s'\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "k %08lX: nie je chrnen - preskoen\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "k %08lX: PGP 2.x k - preskoen\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "k %08lX: podpis subka na zlom mieste - preskoen \n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "nemem inicializova databzu dvery: %s\n" #: g10/export.c:563 #, fuzzy, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "VAROVANIE: tajn k %08lX nem jednoduch SK kontroln set\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "VAROVANIE: ni nebolo vyexportovan\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Prkazy:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[sbor]|vytvori podpis" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[sbor]|vytvori podpis v itatenom dokumente" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "vytvori podpis oddelen od dokumentu" #: g10/gpg.c:393 msgid "encrypt data" msgstr "ifrova dta" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "ifrovanie len so symetrickou ifrou" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "deifrova dta (implicitne)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verifikova podpis" #: g10/gpg.c:401 msgid "list keys" msgstr "vypsa zoznam kov" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "vypsa zoznam kov a podpisov" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "skontrolova podpisy kov" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "vypsa zoznam kov a fingerprintov" #: g10/gpg.c:406 msgid "list secret keys" msgstr "vypsa zoznam tajnch kov" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "vytvori nov pr kov" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "odstrni k zo sboru verejnch kov" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "odstrni k zo sboru tajnch kov" #: g10/gpg.c:411 msgid "sign a key" msgstr "podpsa k" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "podpsa k loklne" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "podpsa alebo modifikova k" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "vytvori revokan certifikt" #: g10/gpg.c:416 msgid "export keys" msgstr "exportova ke" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exportova ke na server kov" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importova ke zo servera kov" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "vyhada ke na serveri kov" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "aktualizova vetky ke zo servera kov" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importova/zli ke" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "aktualizova databzu dvery" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [sbory]|vyp hash" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Monosti:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "vytvor vstup zakdovan pomocou ASCII" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|MENO|ifrova pre MENO" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "" "poui toto id uvatea na podpsanie\n" " alebo deifrovanie" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "" "|N|nastavi rove komprimcie N (0 - iadna\n" " komprimcia)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "poui knonick textov md" #: g10/gpg.c:486 msgid "use as output file" msgstr "poui ako vstupn sbor" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "s dodatonmi informciami" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "nevykona iadne zmeny" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "vyiada potvrdenie pred prepsanm" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Pouite manulov strnky pre kompletn zoznam vetkch prkazov a " "monost)\n" #: g10/gpg.c:576 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" "Prklady:\n" "\n" " -se -r Bob [sbor] podpsa a zaifrova pre uvatea Bob\n" " --clearsign [sbor] vytvori podpis itatenho dokumentu\n" " --detach-sign [sbor] vytvori podpis oddelen od dokumentu\n" " --list-keys [men] vypsa ke\n" " --fingerprint [men] vypsa fingerprinty\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Chyby oznmte, prosm, na adresu .\n" "Pripomienky k prekladu .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Pouitie: gpg [monosti] [sbory] (-h pre pomoc)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Syntax: gpg [monosti] [sbory]\n" "podpsa, overi, ifrova alebo deifrova\n" "implicitn opercie zvisia od vstupnch dt\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Podporovan algoritmy:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Verejn ke: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "ifry: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Kompresia: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "pouitie: gpg [monosti] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "konfliktn prkazy\n" #: g10/gpg.c:1078 #, fuzzy, c-format msgid "no = sign found in group definition `%s'\n" msgstr "no = podpis njden v defincii skupiny \"%s\"\n" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "VAROVANIE: vlastnctvo pre %s nastaven nebezpene \"%s\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "VAROVANIE: vlastnctvo pre %s nastaven nebezpene \"%s\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "VAROVANIE: prstupov prva pre %s nie s nastaven bezpene \"%s\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "VAROVANIE: prstupov prva pre %s nie s nastaven bezpene \"%s\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "VAROVANIE: vlastnctvo adresra %s nastaven nebezpene \"%s\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "VAROVANIE: vlastnctvo adresra %s nastaven nebezpene \"%s\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "VAROVANIE: prstupov prva adresra %s nie s nastaven bezpene \"%s\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "VAROVANIE: prstupov prva adresra %s nie s nastaven bezpene \"%s\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "neznma poloka konfigurcie \"%s\"\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "V sbore tajnch kov chba zodpovedajci podpis\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "zadan URL pre podpisov politiku je neplatn\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "uk v ktorom sbore kov je vypsan k" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "V sbore tajnch kov chba zodpovedajci podpis\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "POZNMKA: star implicitn sbor s monosami `%s ignorovan'\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "POZNMKA: neexistuje implicitn sbor s monosami `%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "sbor s monosami `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "tam monosti z `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "POZNMKA: %s nie je pre normlne pouitie!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s nie je platn znakov sada\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s nie je platn znakov sada\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "nemono poui URI servera kov - chyba analzy URI\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: neplatn parameter pre export\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "neplatn parameter pre export\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: neplatn parameter pre import\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "neplatn parameter pre import\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: neplatn parameter pre export\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "neplatn parameter pre export\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: neplatn parameter pre import\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "neplatn parameter pre import\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s nie je platn znakov sada\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "zadan URL pre podpisov politiku je neplatn\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s nie je platn znakov sada\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s nie je platn znakov sada\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: neplatn parameter pre export\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "neplatn parameter pre export\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "nemono nastavi exec-path na %s\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: neplatn parameter pre export\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "VAROVANIE: program me vytvori sbor core!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "VAROVANIE: %s prepe %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "Nie je dovolen pouva %s s %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s nedva s %s zmysel!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "gpg-agent nie je v tomto seden dostupn\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "zapisujem tajn k do `%s'\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "v mde --pgp2 mete vytvra len oddelen podpisy alebo podpisy itaten " "ako text\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "v mde --pgp2 nemono sasne ifrova a podpisova\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "v mde --pgp2 muste poui sbor (nie rru).\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "ifrovanie sprv v mde --pgp2 vyaduje algoritmus IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "vybran ifrovac algoritmus je neplatn\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "vybran hashovac algoritmus je neplatn\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "vybran ifrovac algoritmus je neplatn\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "vybran hashovac algoritmus je neplatn\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "poloka completes-needed mus by via ako 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "poloka marginals-needed mus by via ako 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "poloka max-cert-depth mus by v rozmedz od 1 do 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "neplatn implicitn rove certifikcie; mus by 0, 1, 2 alebo 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "neplatn minimlna rove certifikcie; mus by 0, 1, 2 alebo 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "POZNMKA: jednoduch md S2K (0) je drazne nedoporuovan\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "neplatn md S2K; mus by 0, 1 alebo 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "neplatn defaultn predvoby\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "neplatn uvatesk predvoby pre ifrovanie\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "neplatn uvatesk predvoby pre hashovanie\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "neplatn uvatesk predvoby pre kompresiu\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s ete nepracuje s %s\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "nemete poui ifrovac algoritmus \"%s\" v mde %s\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "nemete poui hashovac algoritmus \"%s\" v mde %s\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "nemete poui kompresn algoritmus \"%s\" v mde %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "nemem inicializova databzu dvery: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "VAROVANIE: dan adrest (-r) bez pouitia ifrovania s verejnm kom\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [meno sboru]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [meno sboru]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "deifrovanie zlyhalo: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [meno sboru]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [meno sboru]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "" "pouitie %s nie je v mde %s dovolen\n" "\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [meno sboru]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [meno sboru]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [meno sboru]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "" "pouitie %s nie je v mde %s dovolen\n" "\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [meno sboru]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [meno sboru]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [meno sboru]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key id uvatea" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key id uvatea" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key id uvatea [prkazy]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id uvatea] [sbor s kmi (keyring)]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "nepodarilo posla k na server: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "nepodarilo sa prija k zo servera: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "nepodaril sa export ka: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "nepodarilo sa njs server: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "aktualizcia servera zlyhala: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "dekdovanie z ASCII formtu zlyhalo: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "kdovanie do ASCII formtu zlyhalo: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "neplatn hashovac algoritmus `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[meno sboru]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Zanite psa svoju sprvu ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "zadan URL pre certifikan politiku je neplatn\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "zadan URL pre podpisov politiku je neplatn\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "zadan URL pre podpisov politiku je neplatn\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "prli vea poloiek v bufferi verejnch kov - vypnut\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[User id not found]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "k %08lX: tajn k bez verejnho ka - preskoen\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" # c-format #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Neplatn k %08lX zmenen na platn pomocou --always-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "existuje tajn k pre tento verejn k %08lX!\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "pouvam sekundrny k %08lX namiesto primrneho ka %08lX\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "by o trochu tich" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "Zmaza tento k zo sboru kov? " #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "konflikt asovho raztka" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|zapsa informcie o stave do tohto FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Pouitie: gpgv [monosti] [sbory] (-h pre pomoc)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Syntax: gpg [nastavenia] [sbory]\n" "Skontroluje podpisy oproti znmym dveryhodnm kom\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Je na Vs, aby ste sem priradili hodnotu; tto hodnota nebude nikdy\n" "exportovan tretej strane. Potrebujeme ju k implementcii \"pavuiny\n" "dvery\"; nem to ni spolon s (implicitne vytvorenou) \"pavuinou\n" "certifiktov\"." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Aby bolo mon vybudova pavuinu dvery, mus GnuPG vedie, ktorm kom\n" "dverujete absoltne - obyajne s to tie ke, pre ktor mte prstup\n" "k tajnm kom. Odpovedzte \"ano\", aby ste nastavili tieto ke\n" "ako absoltne dveryhodn\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Pokia aj tak chcete poui tento nedveryhodn k, odpovedzte \"ano\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Vlote identifiktor adresta, ktormu chcete posla sprvu." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Vebecne nemono odpora pouva rovnak k na ifrovanie a " "podeisovanie\n" "Tento algoritmus je vhodn poui len za uritch podmienok.\n" "Kontaktujte prosm najprv bezpenostnho pecialistu." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Vlote dku ka" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Odpovedzte \"ano\" alebo \"nie\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Vlote poadovan hodnotu tak, ako je uveden v prkazovom riadku.\n" "Je mon vloi dtum vo formte ISO (RRRR-MM-DD), ale nedostanete\n" "sprvnu chybov hlku - miesto toho systm sksi interpretova\n" "zadan hodnotu ako interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Vlote meno dritea ka" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "prosm, vlote e-mailov adresu (nepovinn, ale vemi odporan)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Prosm, vlote nepovinn komentr" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N pre zmenu nzvu.\n" "C pre zmenu komentra.\n" "E pre zmenu e-mailovej adresy.\n" "O pre pokraovanie generovania ka.\n" "Q pre ukonenie generovania ka." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Ak chcete generova podk, odpovedzte \"ano\" (alebo len \"a\")." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Skr ako podpete id uvatea, mali by ste najprv overi, i k\n" "patr osobe, ktorej meno je uveden v identifiktore uvatea.\n" "Je vemi uiton, ke ostatn vedia, ako dsledne ste previedli\n" "takto overenie.\n" "\n" "\"0\" znamen, e neuvdzate, ako dsledne ste pravos ka overili\n" "\n" "\"1\" znamen, e verte tomu, e k patr osobe, ktor je uveden,\n" " v uvateskom ID, ale nemohli ste alebo jste nepreverili tto " "skutonos.\n" " To je uiton pre \"osobn\" verifikciu, ke podpisujete ke, ktor\n" " pouvaj pseudonym uvatea.\n" "\n" "\"2\" znamen, e ste iastone overili pravos ka. Napr. ste overili\n" " fingerprint ka a skontrolovali identifiktor uvatea\n" " uveden na ki s fotografickm id.\n" "\n" "\"3\" Znamen, e ste vykonali vemi dkladn overenie pravosti ka.\n" " To me naprklad znamena, e ste overili fingerprint ka \n" " jeho vlastnka osobne a alej ste pomocou tako falovatenho \n" " dokumentu s fotografiou (naprklad pasu) overili, e meno majitea\n" " ka sa zhoduje s menom uvedenm v uvateskom ID a alej ste \n" " overili (vmenou elektronickch dopisov), e elektronick adresa " "uveden \n" " v ID uvatea patr majiteovi ka.\n" "\n" "Prosm nezabdajte, e prklady uveden pre rove 2 a 3 s *len*\n" "prklady.\n" "Je len na Vaom rozhodnut, o \"iaston\" a \"dkladn\" overenie " "znamen\n" "ke budete podpisova ke inm uvateom.\n" "\n" "Pokia neviete, ak je sprvna odpove, odpovedzte \"0\"." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "" "Pokia chcete podpsa VETKY identifiktory uvateov, odpovedzte \"ano\"" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Pokia skutone chcete zmaza tento identifiktor uvatea, odpovedzte \"ano" "\".\n" "Vetky certifikty bud tie straten!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Odpovedzte \"ano\", pokia chcete zmaza podk" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Toto je platn podpis ka; normlne nechcete tento podpis zmaza,\n" "pretoe me by dleit pri vytvran dvery ka alebo inho ka\n" "ceritifikovanho tmto kom." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Tento podpis neme by overen, pretoe nemte zodpovedajci verejn k.\n" "Jeho zmazanie by ste mali odloi do asu, ke budete vedie, ktor k\n" "bol pouit, pretoe tento podpisovac k me vytvori dveru\n" "prostrednctvom inho u certifikovanho ka." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "Podpis je neplatn. Je rozumn ho odstrni z Vho sboru kov." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Toto je podpis, ktor viae identifiktor uvatea ku ku. Zvyajne\n" "nie je dobr takto podpis odstrni. GnuPG neme tento k naalej\n" "pouva. Urobte to len v prpade, ke je tento podpis ka\n" "nm samm z nejakho dvodu neplatn a ke je k dispozcii in k." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Zmeni predvoby pre vetky uvatesk ID (alebo len pre oznaen)\n" "na aktulny zoznam predvolieb. asov raztka vetkch dotknutch podpisov\n" "kov nimi samotnmi bud posunut o jednu sekundu dopredu.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Prosm, vlote heslo; toto je tajn veta \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Prosm, zopakujte posledn heslo, aby ste si boli ist, o ste napsali." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Zadajte nzov sboru, ku ktormu sa podpis vzahuje" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Ak si prajete prepsanie sboru, odpovedzte \"ano\"" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Prosm, vlote nov nzov sboru. Ak len stlate RETURN, bude\n" "pouit implicitn sbor (ktor je zobrazen v ztvorkch)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Mali by ste pecifikova dvod certifikcie. V zvislosti na kontexte\n" "mte monos si vybra zo zoznamu:\n" " \"k bol kompromitovan\"\n" " Toto pouite, pokia si myslte, e k Vmu tajnmu ku zskali\n" " prstup neoprvnen osoby.\n" " \"k je nahraden\"\n" " Toto pouite, pokia ste tento k nahradili novm kom.\n" " \"k sa u nepouva\"\n" " Toto pouite, pokia tento k u nepouvate.\n" " \"Identifiktor uvatea u nie je platn\"\n" " Toto pouite, pokia by sa identifiktor uvatea u nemal pouva;\n" " normlne sa pouva na oznaenie neplatnej e-mailov adresy.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Ak chcete, mete vloi text popisujc pvod vzniku tohto revokanho\n" "ceritifiktu. Prosm, strune. \n" "Text kon przdnym riadkom.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Pomoc nie je k dispozcii" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Pomoc nie je dostupn pre '%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "aktualizova databzu dvery" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "aktualizova databzu dvery" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "verejn k neshlas s tajnm!\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "nepouiten tajn k" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "blok typu %d bol preskoen\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "%lu ke boli doteraz spracovan\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Celkovo spracovanch kov: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " preskoen nov ke: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " bez identifiktorov: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importovan: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " bez zmien: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nov id uvateov: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nov podke: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nov podpisy: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " nov revokcie kov: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " pretan tajn ke: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " importovan tajn ke: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " tajn ke nezmenen: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " neimportovan: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " nov podpisy: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " pretan tajn ke: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Podpsali ste nasledujce identifiktory uvatea:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "%s podpis, hashovac algoritmus %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "k %08lX: chyba identifiktor uvatea\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "preskoen `%s': %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "k %08lX: HKP pokodenie podka opraven\n" # c-format #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "" "k %08lX: prijat id uvatea '%s', ktor nie je podpsan nm samm\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "k %08lX: chba platn identifiktor uvatea\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "me to by spsoben chbajcim podpisom ka nm samm\n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "k %08lX: verejn k nenjden: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "k %08lX: nov k - preskoen\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "nenjden zapisovaten sbor kov (keyring): %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "zapisujem do '%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "chyba pri zpise sboru kov (keyring) `%s': %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "k %08lX: verejn k \"%s\" importovan\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "k %08lX: nezodpoved naej kpii\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "k %08lX: nemem njs originlny blok ka: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "k %08lX: nemem ta originlny blok ka: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "k %08lX: \"%s\" 1 nov identifiktor uvatea\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "k %08lX: \"%s\" %d novch identifiktorov uvatea\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "k %08lX: \"%s\" 1 nov podpis\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "k %08lX: \"%s\" %d novch podpisov\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "k %08lX: \"%s\" 1 nov podk\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "k %08lX: \"%s\" %d novch podkov\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "k %08lX: \"%s\" %d novch podpisov\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "k %08lX: \"%s\" %d novch podpisov\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "k %08lX: \"%s\" %d novch identifiktorov uvatea\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "k %08lX: \"%s\" %d novch identifiktorov uvatea\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "k %08lX: \"%s\" bez zmeny\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "tajn k `%s' nebol njden: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "zapisujem tajn k do `%s'\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "k %08lX: tajn k bez verejnho ka %d - preskoen\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "nie je nastaven implicitn sbor tajnch kov %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "k %08lX: tajn k importovan\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "k %08lX: je u v sbore tajnch kov\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "k %08lX: nebol njden tajn k: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "k %08lX: chba verejn k - nemem aplikova revokan certifikt\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "k %08lX: neplatn revokan certifikt: %s - zamietnut\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "k %08lX: \"%s\" revokan certifikt importovan\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "k %08lX: neexistuje id uvatea pre podpis\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "k %08lX: nepodporovan algoritmus verejnho ka u uvateskho id \"%s" "\"\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "" "k %08lX: neplatn podpis ka nm samm u uvateskho id \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "k %08lX: nepodporovan algoritmus verejnho ka\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "k %08lX: podpis ka nm samm (direct key signature)\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "k %08lX: neexistuje podk pre viazanie kov\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "k %08lX: neplatn vzba podka\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "k %08lX: zmazan viacnsobn vzba podka\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "k %08lX: neexistuje podk na revokciu ka\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "k %08lX: neplatn revokan podk\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "k %08lX: zmazan viacnsobn revokcia podka\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "k %08lX: identifiktor uvatea preskoen '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "k %08lX: podk preskoen\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "k %08lX: podpis nie je exportovaten (trieda %02x) - preskoen\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "k %08lX: revokan certifikt na zlom mieste - preskoen \n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "k %08lX: neplatn revokan certifikt: %s - preskoen\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "k %08lX: podpis subka na zlom mieste - preskoen \n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "k %08lX: neoakvan podpisov trieda (0x%02X) - preskoen\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "k %08lX: zisten duplikovan identifiktor uvatea - zlen\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "VAROVANIE: k %08lX me by revokovan: skam zska revokan k " "%08lX\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "VAROVANIE: k %08lX me by revokovan: revokan k %08lX nenjden.\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "k %08lX: pridan revokan certifikt \"%s\"\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "k %08lX: podpis ka nm samm (direct key signature)\n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "verejn k neshlas s tajnm!\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "preskoen: tajn k je u v databze\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "preskoen: tajn k je u v databze\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "chyba pri vytvran sboru kov (keyring)`%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "sbor kov (keyring) `%s' vytvoren\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "chyba pri vytvran `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "zlyhalo obnovenie vyrovnvacej pamti kov: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revokcia]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[podpis ka nm samm]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 zl podpis\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d zlch podpisov\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 podpis neoveren, pretoe chba k\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d podpisov neoverench, pretoe chba k\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 podpis neoveren, pretoe vznikla chyba\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d podpisov neoverench, pretoe vznikli chyby\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "zisten 1 identifiktor uvatea bez platnho podpisu nm samm\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "" "zistench %d identifiktorov uvatea bez platnho podpisu nm samm\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Prosm rozhodnite, nakoko dverujete tomuto uvateovi, e sprvne\n" "verifikuje ke inch uvateov (prezretm cestovnch pasov,\n" "kontrolou fingerprintov z rznych zdrojov...)?\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = Dverujem iastone\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = Dverujem plne\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Uvatesk ID \"%s\" je revokovan." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Ste si ist, e stle chcete podpsa tento k? (a/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Nemono podpsa.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Uvatesk ID \"%s\" je revokovan." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "ID uvatea \"%s\" nie je podpsan nm samm." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "ID uvatea \"%s\" nie je podpsan nm samm." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Skutone podpsa? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Podpis ka \"%s\" nm samm je\n" "podpis vo formte PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Prajete si ho zmeni na formt OpenPGP? (a/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "V sasn podpis na \"%s\"\n" "je len loklny.\n" "\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Chcete, aby platnos Vho podpisu vyprala v rovnakom ase? (A/n) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "V sasn podpis na \"%s\"\n" "je len loklny.\n" "\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Prajete si ho zmeni na plne exportovaten podpis? (a/N) " #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" je u loklne podpsan kom %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" je u podpsan kom %08lX\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Ste si ist, e stle chcete podpsa tento k? (a/N) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Ni na podpsanie kom %08lX\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Platnos ka vyprala!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Platnos ka vypr %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Chcete, aby platnos Vho podpisu vyprala v rovnakom ase? (A/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Nemete vytvori OpenPGP podpis ka typu PGP 2.x, ke ste v --pgp2 mde.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "To by spsobilo nepouitelnos ka v PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "S akou istotou ste preverili, e k, ktor chcete podpsa\n" "patr vyie uvedenej osobe?\n" "Pokia nepoznte odpove, zadajte \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Neodpoviem.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Vbec som to nekontroloval(a).%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) iastone som to overil(a).%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Vemi dkladne som to overil(a).%s\n" #: g10/keyedit.c:926 #, fuzzy msgid "Your selection? (enter `?' for more information): " msgstr "V vber? ('?' - viac informci): " #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Ste si ist, e chcete podpsa tento k\n" "svojm kom: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" "Ide o podpis ka nm samm\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "VAROVANIE: podpis nebude oznaen ako neexportovaten.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "VAROVANIE: podpis nebude oznaen ako neodvolaten (non-revocable).\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "Podpis bude oznaen ako neexportovaten.\n" "\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "Podpis bude oznaen ako neodvolaten (non-revocable).\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "Vbec som tento k neoveril.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "iastone som overil tento k.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "Velmi dkladne som overil tento k.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Skutone podpsa? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "podpisovanie zlyhalo: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Tento k nie je chrnen.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Tajn asti primrneho ka nie s dostupn.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "Tajn asti primrneho ka nie s dostupn.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "k je chrnen.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Nie je mon editova tento k: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Vlote nov heslo (passphrase) pre tento tajn k.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "heslo nie je zopakovan sprvne; skste to znovu" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Nechcete heslo - to je *zl* npad!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Skutone to chcete urobi? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "presvam podpis ka na sprvne miesto\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "uloi a ukoni" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "vypsa fingerprint" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "vypsa zoznam kov a id uvateov" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "vyberte identifiktor uvatea N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "vyberte identifiktor uvatea N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "revokova podpisy" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "podpsa k loklne" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Npoveda: Vyberte id uvatea na podpsanie\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "prida identifiktor uvatea" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "prida fotografick ID" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "zmaza identifiktor uvatea" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "zmaza sekundrny k" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "prida revokan k" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "Skutone aktualizova predvoby pre vybran id uvatea? " #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "Nemete zmeni dobu platnosti ka verzie 3\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "oznai uvatesk ID ako primrne" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "prepn medzi vypsanm zoznamu tajnch a verejnch kov" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "vypsa zoznam predvolieb (pre expertov)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "vypsa zoznam predvolieb (podrobne)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "Skutone aktualizova predvoby pre vybran id uvatea? " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "nemono poui URI servera kov - chyba analzy URI\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "Skutone aktualizova predvoby pre vybran id uvatea? " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "zmeni heslo" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "zmeni dveryhodnos vlastnka ka" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Skutone revokova vetky vybran id uvatea? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "revokova identifiktor uvatea" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "revokova sekundrny k" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "nastavi k ako platn (enable)" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "nastavi k ako neplatn (disable)" #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "ukza fotografick ID" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "chyba pri tan bloku tajnho ka `%s': %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Tajn k je dostupn.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Na vykonanie tejto opercie je potrebn tajn k.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Prosm, najskr pouite prkaz \"toggle\" (prepn).\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "K revokovan." #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Skutone podpsa vetky id uvatea? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Npoveda: Vyberte id uvatea na podpsanie\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "neznma trieda podpisu" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Tento prkaz nie je v mdoch %s dovolen.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Muste vybra aspo jedno id uvatea.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Nemete zmaza posledn id uvatea!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Skutone odstrni vetky vybran id uvatea? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Skutone odstrni toto id uvatea? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Skutone odstrni toto id uvatea? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Muste vybra aspo jeden k.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "nemem otvori `%s': %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "chyba pri vytvran sboru kov (keyring)`%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Muste vybra aspo jeden k.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Skutone chcete zmaza vybran ke? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Skutone chcete zmaza tento k? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Skutone revokova vetky vybran id uvatea? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Skutone revokova toto id uvatea? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Skutone chcete revokova tento k? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Skutone chcete revokova vybran ke? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Skutone chcete revokova tento k? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "nastavi zoznam predvolieb" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Skutone aktualizova predvoby pre vybran id uvatea? " #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Skutone aktualizova predvoby? " #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Uloi zmeny? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Ukoni bez uloenia? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "aktualizcia zlyhala: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "aktualizcia tajnho ka zlyhala: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "k nebol zmenen, take nie je potrebn ho aktualizova.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Digest: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Charakteristiky: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Notcie: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Uvatesk ID vo formte PGP 2.x nem iadne predvoby\n" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Tento k me by revokovan kom %s " #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "Tento k me by revokovan kom %s " #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr "(citliv informcia)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "%s: nemem vytvori: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "[revokovan]" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [platnos skon: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [platnos skon: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " dvera: %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " dvera: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Tento k bol oznaen za neplatn (disabled)" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Prosm nezabdajte, e zobrazovan daje o platnosti kov nemusia\n" "by sprvne, pokia znovu nespustte program.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "[revokovan]" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "VAROVANIE: iadne ID uvatea nebolo oznaen ako primrne. Tento prkaz\n" "spsob, e in ID uvatea sa bude povaova primrne.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Nemete zmeni dobu platnosti ka verzie 3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "VAROVANIE: Toto je PGP2 k. Pridanie fotografickho ID me v niektorch\n" " verzich PGP vies k odmietnutiu tohto ka.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Ste si ist, e ho chcete stle prida? (a/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Nemali by ste pridva fotografick ID k PGP2 ku.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Zmaza tento dobr podpis? (a/N/u)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Zmaza tento neplatn podpis? (a/N/u)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Zmaza tento neznmy podpis? (a/N/u)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Skutone zmaza tento podpis podpsan sebou samm? (a/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Zmazan %d podpis.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Zmazanch %d podpisov.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Ni nebolo zmaznan.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "neplatn spsob reprezentcie v ASCII" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Uvatesk ID \"%s\" je revokovan." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Uvatesk ID \"%s\" je revokovan." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Uvatesk ID \"%s\" je revokovan." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "uvatesk ID \"%s\" je u revokovan\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "uvatesk ID \"%s\" je u revokovan\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "VAROVANIE: Toto je PGP2 k. Pridanie fotografickho ID me v niektorch\n" " verzich PGP vies k odmietnutiu tohoto ka.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Nemali by ste pridva fotografick ID k PGP2 ku.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Vlote identifiktor uvatea poverenho revokciou: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "k vo formte PGP 2.x nemono poveri revokciou\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "k nemono poveri revokciou nm samm\n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "VAROVANIE: Tento k bol revokovan jeho urenm revoktorom/!\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "VAROVANIE: oznaenie ka ako revokovac u neme by zruen!\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "Ste si ist, e chcete oznai tento k ako revokovac? (a/N): " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Prosm, odstrte vber z tajnch kov.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Prosm, vyberte najviac jeden sekundrny k.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "Menm dobu platnosti sekundrneho ka.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Menm dobu platnosti primrneho ka.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Nemete zmeni dobu platnosti ka verzie 3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "V sbore tajnch kov chba zodpovedajci podpis\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "VAROVANIE: podpisovac podk %08lX nie je krovo certifikovan\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Prosm, vyberte prve jedno id uvatea.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "preskoen v3 podpis ka nm samm u uvateskho id \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Ste si ist, e ho chcete poui? (a/N) " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Ste si ist, e ho chcete poui? (a/N) " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Podpisov notcia: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Prepsa (a/N)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Neexistuje identifiktor uvatea s indexom %d\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Neexistuje identifiktor uvatea s indexom %d\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Neexistuje identifiktor uvatea s indexom %d\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "id uvatea: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " podpsan %08lX v %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (nexeportovaten)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Platnos podpisu vypr %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Ste si ist, e ho chcete stle revokova? (a/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Vytvori pre tento podpis revokan certifikt? (a/N)" #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " podpsan %08lX v %s%s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Podpsali ste nasledujce identifiktory uvatea:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (nexeportovaten)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " revokovan %08lX v %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Chystte sa revokova tieto podpisy:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Skutone vytvori revokan certifikty? (a/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "neexistuje tajn k\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "uvatesk ID \"%s\" je u revokovan\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "VAROVANIE: podpis pouivatekho ID vznikol %d sekund v budcnosti\n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "uvatesk ID \"%s\" je u revokovan\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "uvatesk ID \"%s\" je u revokovan\n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" "Zobrazujem %s fotografick ID s vekosou %ld pre k 0x%08lX (uid %d)\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "duplicita predvoby %c%lu\n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "prli vea `%c' predvolieb\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "prli vea `%c' predvolieb\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "prli vea `%c' predvolieb\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "neplatn znak v reazci s predvobami\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "zapisujem podpis ka nm samm (direct signature)\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "zapisujem podpis ka sebou samm\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "zapisujem \"key-binding\" podpis\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "neplatn dka ka; pouijem %u bitov\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "dka ka zaokrhlen na %u bitov\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "ifrova dta" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (len na ifrovanie)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Prosm, vyberte druh ka, ktor chcete:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA a ElGamal (implicitn)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA a ElGamal (implicitn)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (len na podpis)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (len na podpis)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (len na ifrovanie)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (len na ifrovanie)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA (len na ifrovanie)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (len na ifrovanie)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Ak vekos ka si prajete? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Ak vekos ka si prajete? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Poadovan dka ka je %u bitov.\n" #: g10/keygen.c:1722 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 "" "Prosm urte, ako dlho by mal k platit.\n" " 0 = doba platnosti ka nie je obmedzen\n" " = doba platnosti ka skon za n dn\n" " w = doba platnosti ka skon za n tdov\n" " m = doba platnosti ka skon za n mesiacov\n" " y = doba platnosti ka skon za n rokov\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Prosm urte, ako dlho by mal podpis platit.\n" " 0 = doba platnosti podpisu nie je onmedzen\n" " = doba platnosti podpisu skon za n dn\n" " w = doba platnosti podpisu skon za n tdov\n" " m = doba platnosti podpisu skon za n mesiacov\n" " y = doba platnosti podpisu skon za n rokov\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "K je platn na? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "Podpis je platn na? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "neplatn hodnota\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "platnos %s neskon\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "platnos %s neskon\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "platnos %s skon %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Platnos podpisu vypr %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "V systm nevie zobrazi dtumy po roku 2038.\n" "V kadom prpade bud dtumy korektne spracovvan do roku 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "Je to sprvne (a/n)? " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Aby bolo mon rozpozna V k, muste pozna identifiktor uvatea;\n" "program ho zlo z Vho mena a priezviska, komentra a e-mailu v tomto " "tvare:\n" " \"Jozko Mrkvicka (student) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Meno a priezvisko: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Neplatn znak ve mene\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Meno neme zana slicou\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Meno mus by dlh aspo 5 znakov\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "E-mailov adresa: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Neplatn e-mailov adresa\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Komentr: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Neplatn znak v komentri\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Pouvate znakov sadu `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Zvolili ste tento identifiktor uvatea:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Do poa meno alebo komentr nepte, prosm, e-mailov adresu.\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "mMkKeEPpUu" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Zmeni (M)eno, (K)omentr, (E)-mail alebo (U)koni? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Zmeni (M)eno, (K)omentr, (E)-mail alebo (P)okraova/(U)koni? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Najskr, prosm, opravte chybu\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Na ochranu Vho tajnho ka muste zada heslo.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Nechcete heslo - to *nie je* dobr npad!\n" "Dobre, budem pokraova bez hesla. Kedykovek mete heslo zmeni pouitm\n" "tohto programu s parametrom \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Je potrebn vytvori vea nhodnch bajtov. Poas vytvrania mete\n" "vykonva in prcu na potai (psa na klvesnici, pohybova myou,\n" "pouva disky); vaka tomu m genertor lepiu ancu zska dostatok " "entropie.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Vytvranie ka bolo zruen.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "zapisujem verejn k do `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "zapisujem tajn k do `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "zapisujem tajn k do `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "nenjden zapisovaten sbor verejnch kov (pubring): %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "nenjden zapisovaten sbor tajnch kov (secring): %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "chyba pri zpise do sboru verejnch kov `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "chyba pri zpise do sboru tajnch kov `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "verejn a tajn k boli vytvoren a podpsan.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Tento k neme by pouit na ifrovanie. Pre vytvorenie\n" "sekundrneho ka na tento el mete poui prkaz \"--edit-key\".\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Vytvorenie ka sa nepodarilo: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "k bol vytvoren %lu sekund v budcnosti (dolo k zmene asu alebo\n" "je problm so systmovm asom)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "k bol vytvoren %lu sekund v budcnosti (dolo k zmene asu alebo\n" "je problm so systmovm asom)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "POZNMKA: vytvorenie podka pre ke v3 nie je v slade s OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Skutone vytvori? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "zmazanie bloku ka sa nepodarilo: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "nemem vytvori `%s': %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "POZNMKA: platnos tajnho ka %08lX skonila %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "nikdy " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kritick podpisov politika: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Podpisov politika: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kritick podpisov notcia: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Podpisov notcia: " #: g10/keylist.c:471 msgid "Keyring" msgstr "sbor kov (keyring)" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Primrny fingerprint ka:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Fingerprint podka:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Primrny fingerprint ka:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Fingerprint podka:" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Fingerprint ka =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "kdovanie do ASCII formtu zlyhalo: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "VAROVANIE: Existuj dva sbory s tajnmi informciami.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s je bez zmeny\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s je nov\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Prosm, opravte tento mon bezpenostn problm\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "kontrolujem sbor kov (keyring) `%s'\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu kov skontrolovanch (%lu podpisov)\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu kov skontrolovanch (%lu podpisov)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: sbor kov (keyring) vytvoren\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "zadan URL pre podpisov politiku je neplatn\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "VAROVANIE: nastavenie v `%s' ete nie je aktvne\n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "neplatn parameter pre export\n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "k `%s' nebol njden: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "k `%s' nebol njden: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "poadujem k %08lX z %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "poadujem k %08lX z %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "vyhadvam \"%s\" na HKP serveri %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "vyhadvam \"%s\" na HKP serveri %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "vyhadvam \"%s\" na HKP serveri %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "podpsan Vam kom %08lX v %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "vyhadvam \"%s\" na HKP serveri %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "vyhadvam \"%s\" na HKP serveri %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "neplatn parameter pre export\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "nepodarilo sa prija k zo servera: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "chyba servera kov" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "chyba servera kov" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "VAROVANIE: nemem vymaza doasn sbor (%s) `%s': %s\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "poadujem k %08lX z %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "poadujem k %08lX z %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "VAROVANIE: nemem vymaza doasn sbor (%s) `%s': %s\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "VAROVANIE: nemem vymaza doasn sbor (%s) `%s': %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "zvltna vekos ifrovacieho ka pre sedenie (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s k ifrovanho sedenia\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "zaifrovan neznmym algoritmom %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "verejn k je %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "dta zaifrovan verejnm kom: sprvny DEK\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "zaifrovan %u-bitovm %s kom, ID %08lX, vytvorenm %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " alias \"" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen mu "ID" rein :-( # [kw] #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "zaifrovan %s kom, ID %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "deifrovanie verejnm kom zlyhalo: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "zaifrovan s %lu heslami\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "zaifrovan jednm heslom\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "predpokladm %s ifrovanch dt\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "algoritmus IDEA nie je dostupn; optimisticky sa ho poksime nahradi " "algoritmom %s\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "deifrovanie o.k.\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "VAROVANIE: sprva nem ochranu integrity\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "VAROVANIE: so zaifrovanou sprvou bolo manipulovan!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "deifrovanie zlyhalo: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "POZNMKA: odosielate poadoval (\"for-your-eyes-only\")\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "pvodn meno sboru='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "samostatn revokan certifikt - pouite \"gpg --import\", ak ho chcete " "vyui\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Dobr podpis od \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "verifikcia podpisu potlaen\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "neviem pracova s tmito nsobnmi podpismi\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Platnos podpisu vyprala %s\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " alias \"" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen mu "ID" rein :-( #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Podpis vytvoren %.*s pomocou %s ka ID %08lX\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "K k dispozcii na: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "ZL podpis od \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Podpis s vypranou platnosou od \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Dobr podpis od \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[neist] " #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " alias \"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Platnos podpisu vyprala %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Platnos podpisu vypr %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s podpis, hashovac algoritmus %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binrne" #: g10/mainproc.c:1947 msgid "textmode" msgstr "textov md" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "neznme" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Nemem overi podpis: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "toto nie je podpis oddelen od dokumentu\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "VAROVANIE: Njden viacnsobne podpisy. Skontrolovan bude len prv.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "samostatn podpis triedy 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "podpis starho typu (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "njden neplatn koreov paket v proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "nemem vypn vytvranie core sborov: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "nemono otvori sbor: %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "databza dvery: procedra read() (n=%d) zlyhala: %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "nemem pracova s algoritmom verejnho ka %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "vyiadan hashovac algoritmus %s (%d) nevyhovuje predvobm prjemcu\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "ifrovac algoritmus nie je implementovan" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "%s podpis, hashovac algoritmus %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" "vyiadan hashovac algoritmus %s (%d) nevyhovuje predvobm prjemcu\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = prosm o viac informci\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "gpg-agent nie je v tomto seden dostupn\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: pouitie parametra \"%s\" sa neodpora\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "VAROVN: pouitie parametra \"%s\" sa neodpora\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "pouite namiesto neho \"%s%s\" \n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "VAROVN: pouitie parametra \"%s\" sa neodpora\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Nekomprimovan" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "Nekomprimovan" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "tto sprva nemus pouiten s %s\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "tam monosti z `%s'\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "neznmy implicitn adrest `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "neznma trieda podpisu" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Sbor `%s' existuje. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Prepsa (a/N)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: neznma prpona\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Vlote nov nzov sboru" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "zapisujem na tandardn vstup (stdout)\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "predpokladm podpsan dta v `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "vytvoren nov konfiguran sbor `%s'\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "VAROVANIE: nastavenie v `%s' ete nie je aktvne\n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: adresr vytvoren\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "nemem pracova s algoritmom verejnho ka %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "VAROVANIE: pravdepodobne nebezpen symetricky ifrovan k sedenia\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "podpaket typu %d m nastaven kritick bit\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent nie je v tomto seden dostupn\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "zl formt premennej prostredia GPG_AGENT_INFO\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent protokol verzie %d nie je podporovan\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "nemem sa pripoji k `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problm s agentom - pouvanie agenta vypnut\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (hlavn ID ka %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Potrebujete heslo, aby ste odomkli tajn k pre uvatea:\n" "\"%.*s\"\n" "k s dkou %u bitov, typ %s, ID %08lX, vytvoren %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Opakova heslo\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Vloi heslo\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "zruen uvateom\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "v dvkovom reime sa nemem pta na heslo\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Vlote heslo: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Muste pozna heslo, aby ste odomkli tajn k pre\n" "uvatea: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "dka %u bitov, typ %s, ID %08lX, vytvoren %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Opakujte heslo: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Vyberte si obrzok, ktor bude pouit ako fotografick ID. Tento obrzok\n" "mus by vo formte JPEG. Pamtajte, e bude uloen vo Vaom verejnom " "ki.\n" "Ak pouijete vemi vek obrzok, k bude tie vek! Odporan vekos\n" "obrzka je okolo 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Meno sbor s fotografiou vo formte JPEG: " #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "nemono otvori sbor: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Ste si ist, e ho chcete poui? (a/N) " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\" nie je sbor JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Je tto fotografia sprvna (a/N/u)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "nemono nastavi exec-path na %s\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Dvod nebol pecifikovan" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "K je nahraden" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "K bol skompromitovan" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "K sa u nepouva" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Identifiktor uvatea u neplat" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "dvod na revokciu: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "revokan poznmka: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMuUsS" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Nie je priraden iadna hodnota dvery k:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " alias \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Tento k pravdepodobne patr jeho majiteovi\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Neviem\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Nedverujem\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Dverujem absoltne\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = sp do hlavnho menu\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " s = preskoi tento k\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " u = ukoni\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Vae rozhodnutie? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Skutone chcete nastavi pre tento k absoltnu dveru? " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certifikty vedce k finlnemu dveryhodnmu ku:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lX: Ni nenaznauje tomu, e tento podpis patr vlastnkovi ka.\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lX: Ni nenaznauje tomu, e tento podpis patr vlastnkovi ka.\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "Tento k pravdepodobne patr jeho majiteovi\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Tento k patr nm (mme zodpovedajci tajn k)\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NIE JE ist, e tento k patr osobe, ktor sa vydva za jeho\n" "vlastnka. Pokia *skutone* viete, o robte, mete na otzku\n" "odpoveda no\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Poui napriek tomu tento k? " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "VAROVANIE: Je pouit nedveryhodn k!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "VAROVANIE: k me by revokovan (revokan k neexistuje)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "VAROVANIE: Tento k bol revokovan jeho urenm revoktorom/!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "VAROVANIE: Tento k bol revokovan jeho vlastnkom!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " To me znamena, e podpis je falon.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "VAROVANIE: Tento podk bol revokovan jeho vlastnkom!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Poznmka: Tento k bol oznaen ako neplatn (disabled).\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Poznmka: Skonila platnos tohto ka!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "VAROVANIE: Tento k nie certifikovan dveryhodnm podpisom!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Ni nenaznauje tomu, e tento podpis patr vlastnkovi ka.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "VAROVANIE: NEdverujeme tomuto ku!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Tento podpis je pravdepodobne FALON.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "VAROVANIE: Tento k nie je certifikovan dostatone dveryhodnmi " "podpismi!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Nie je ist, e tento podpis patr vlastnkovi.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: preskoen: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: preskoen: verejn k je u obsiahnut v databze\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Nepecifikovali ste identifiktor uvatea (user ID). Mete poui \"-r\"\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Napte identifiktor uvatea (user ID). Ukonite przdnym riadkom: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Takto identifiktor uvatea neexistuje.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "preskoen: verejn k je u nastaven poda implicitnho adresta\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Verejn k je neplatn (disabled).\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "preskoen: verejn k je u nastaven\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "neznmy implicitn adrest `%s'\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: preskoen: verejn k je neplatn (disabled)\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "iadne platn adresy\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "dta neboli uloen; na ich uloenie pouite prepna \"--output\"\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "chyba pri vytvran `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Podpis oddelen od dokumentu.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Prosm, vlote nzov dtovho sboru: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "tam tandardn vstup (stdin) ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "chbaj podpsan dta\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "nemem otvori podpsan dta '%s'\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonymn adrest; skam tajn k %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "o.k., my sme anonymn adrest.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "star kdovanie DEK nie je podporovn\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "ifrovac algoritmus %d%s je neznam alebo je zakzan\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "POZNMKA: v predvobch nenjden ifrovac algoritmus %d\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "POZNMKA: platnos tajnho ka %08lX skonila %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "POZNMKA: k bol revokovan" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet zlyhala: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "k %08lX: chyba identifiktor uvatea\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Bude revokovan:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Toto je citliv revokan k)\n" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Vytvori pre tento podpis revokan certifikt? " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Vynten ASCII textov vstup.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet zlyhala: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Revokan certifikt bol vytvoren.\n" #: g10/revoke.c:411 #, fuzzy, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "iadne revokan ke pre `%s' nenjden\n" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "tajn k `%s' nebol njden: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "iadny zodpovedajci verejn k: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "verejn k neshlas s tajnm!\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Vytvori pre tento podpis revokan certifikt? " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "neznmy ochrann algoritmus\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "POZNMKA: Tento k nie je chrnen!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Bol vytvoren revokan certifikt.\n" "\n" "Presute ho na mdium, ktor mete schova; ak Mallory zska k\n" "tomuto certifiktu prstup, me znefunkni V k. Jednoduch je\n" "vytlai certifikt a schova ho, pre prpad e by mdium bolo neitaten.\n" "Ale hroz nebezpeenstvo: Tlaov systm Vho potaa me uklada dta a\n" "sprstupni ich inm!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Prosm vberte dvod na revokciu:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Zrui" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Pravdepodobne ste chceli vybra %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Ak chcete, napte popis; ukonite przdnym riadkom:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Dvod na revokciu: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(iadny popis)\n" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "Je to v poriadku? " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "tajn asti ka nie s dostupn\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "ochrann algoritmus %d%s nie je podporovn\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "ochrann algoritmus %d%s nie je podporovn\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Neplatn heslo; prosm, skste to znovu" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "VAROVANIE: Zisten slab k - zmete, prosm, znovu heslo.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "generujem zastaral 16 bitov kontroln set na ochranu tajnho ka\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "vytvoren slab k - skam znovu\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "nemem sa vyvarova slabho ka pre symetrick ifru; operciu som sksil " "%d krt!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "VAROVANIE: konflikt hashu podpisu v sprve\n" #: g10/sig-check.c:99 #, fuzzy, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "VAROVANIE: podpisovac podk %08lX nie je krovo certifikovan\n" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "VAROVANIE: podpisovac podk %08lX m neplatn krov certifikciu\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "verejn k %08lX je o %lu sekund nov ne podpis\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "verejn k %08lX je o %lu sekund nov ne podpis\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "k bol vytvoren %lu sekund v budcnosti (dolo k zmene asu alebo\n" "je problm so systmovm asom)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "k bol vytvoren %lu sekund v budcnosti (dolo k zmene asu alebo\n" "je problm so systmovm asom)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "POZNMKA: podpisovmu ku %08lX skonila platnos %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s podpis, hashovac algoritmus %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "predpokladm neplatn podpis kom %08lX, pretoe je nastaven neznmy " "kritick bit\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "k %08lX: neexistuje podk pre revokciu ka\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "k %08lX: neexistuje podk pre viazanie podkov\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "VAROVANIE: nemono %%-expandova notcie (prli dlh). Pouit " "neexpandovan.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "VAROVANIE: nemem %%-expandova URL politiky (prli dlh). Pouit " "neexpandovan.\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "VAROVANIE: nemem %%-expandova URL politiky (prli dlh). Pouit " "neexpandovan.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "kontrola vytvorenho podpisu sa nepodarila: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s podpis od: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "v mde --pgp2 mete vytvori len oddelen podpis ka vo formte PGP-2.x\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "vyiadan hashovac algoritmus %s (%d) nevyhovuje predvobm prjemcu\n" #: g10/sign.c:960 msgid "signing:" msgstr "podpisujem:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "v mde --pgp2 mete vytvra itaten podpisy len s kmi formtu PGP-2." "x\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "bude pouit ifrovanie %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "k nie je oznaen ako nedostatone bezpen - nemem ho poui s " "falonm RNG!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "preskoen `%s': duplikovan\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "preskoen `%s': %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "preskoen: tajn k je u v databze\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "preskoen `%s': toto je vygenerovan PGP k poda algoritmu ElGamal,\n" "podpisy vytvoren tmto kom nie s bezpen!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "zznam dvery %lu, typ %d: zpis zlyhal: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Zoznam pridelench hodnt dveryhodnosti, vytvoren %s\n" "# (Pouite \"gpg --import-ownertrust\" na obnovenie)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "chyba pri tan `%s': %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "riadok je prli dlh\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "chyba: neplatn odtlaok\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "" "importova hodnoty dveryhodnosti\n" " vlastnka ka" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "chyba pri hadan zznamu dvery: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "chyba pri tan: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "databza dvery: synchronizcia zlyhala %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "nemem vytvori `%s': %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "nemono otvori `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "zznam v databze dvery %lu: lseek() sa nepodaril: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "zznam v databze dvery %lu: zpis sa nepodaril (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transakcia s databzou dvery je prli dlh\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "nemem zavrie `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: adresr neexistuje!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: nepodarilo sa vytvori zznam verzie: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: vytvoren neplatn databza dvery\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: databza dvery vytvoren\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "POZNMKA: do trustdb nemono zapisova\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: neplatn databze dvery\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: nepodarilo sa vytvori hashovaciu tabuku: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: chyba pri aktualizcii zznamu verzie: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: chyba pri tan zznamu verzie: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: chyba pri zpise zznamu verzie: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "databze dvery: procedra lseek() zlyhala: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "databza dvery: procedra read() (n=%d) zlyhala: %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: nie je sbor databzy dvery\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: zznam verzie s slom %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: neplatn verzia sboru %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: chyba pri tan vonho zznamu: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: chyba pri zpise adresrovho zznamu: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: vynulovanie zznamu zlyhalo: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: pridanie zznamu zlyhalo: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: databza dvery vytvoren\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "nemem pracova s riadkami dlhmi ako %d znakov\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "vstupn riadok je dlh ako %d znakov\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' nie je platn dlh keyID\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "k %08lX: akceptovan ako dveryhodn k\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "k %08lX sa v databze dvery vyskytuje viac ako raz\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" "k %08lX: nenjden verejn k k dveryhodnmu ku - preskoen\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "k oznaen ako absoltne dveryhodn.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "zznam dvery %lu, typ po. %d: tanie zlyhalo: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "zznam dvery %lu nie je poadovanho typu %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "[revokovan]" #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "[expirovan]" #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "neznme" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 #, fuzzy msgid "never" msgstr "nikdy " #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "nie je nutn kontrolova databzu dvery\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "dalia kontrola databzy dvery %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "nie je nutn kontrolova databzu dvery\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "nie je nutn kontrolova databzu dvery\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "verejn k %08lX nebol njden: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "prosm vykonajte --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "kontrolujem databzu dvery\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d kov spracovanch (%d potov platnosti vymazanch)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "neboli njden iadne absoltne dveryhodn ke\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "verejn k k absoltne dveryhodnmu ku %08lX nebol njden\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "zznam dvery %lu, typ %d: zpis zlyhal: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "podpis nebolo mon overi.\n" "Prosm, nezabdajte, e sbor s podpisom (.sig alebo .asc)\n" "by mal by prvm sborom zadanm na prkazovom riadku.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "vstupn riadok %u je prli dlh alebo na konci chba znak LF\n" #: util/errors.c:53 msgid "general error" msgstr "veobecn chyba" #: util/errors.c:54 msgid "unknown packet type" msgstr "neznmy typ paketu" #: util/errors.c:55 msgid "unknown version" msgstr "neznma verzia" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "neznmy algoritmus verejnho ka" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "neznmy hashovac algoritmus" #: util/errors.c:58 msgid "bad public key" msgstr "neplatn verejn k" #: util/errors.c:59 msgid "bad secret key" msgstr "neplatn tajn k" #: util/errors.c:60 msgid "bad signature" msgstr "neplatn podpis" #: util/errors.c:61 msgid "checksum error" msgstr "chyba kontrolnho stu" #: util/errors.c:62 msgid "bad passphrase" msgstr "nesprvne heslo" #: util/errors.c:63 msgid "public key not found" msgstr "verejn k nenjden" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "neznmy ifrovac algoritmus" #: util/errors.c:65 msgid "can't open the keyring" msgstr "nemem otvori sbor kov" #: util/errors.c:66 msgid "invalid packet" msgstr "neplatn paket" #: util/errors.c:67 msgid "invalid armor" msgstr "neplatn spsob reprezentcie v ASCII" #: util/errors.c:68 msgid "no such user id" msgstr "uvate s tmto id neexistuje" #: util/errors.c:69 msgid "secret key not available" msgstr "tajn k nie je dostupn" #: util/errors.c:70 msgid "wrong secret key used" msgstr "bol pouit nesprvny tajn k" #: util/errors.c:71 msgid "not supported" msgstr "nepodporovan" #: util/errors.c:72 msgid "bad key" msgstr "nesprvny k" #: util/errors.c:73 msgid "file read error" msgstr "chyba pri tan sboru" #: util/errors.c:74 msgid "file write error" msgstr "chyba pri zpise sboru" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "neznmy kompresn algoritmus" #: util/errors.c:76 msgid "file open error" msgstr "chyba pri otvran sboru" #: util/errors.c:77 msgid "file create error" msgstr "chyba pri vytvran sboru" #: util/errors.c:78 msgid "invalid passphrase" msgstr "nesprvne heslo" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritmus verejnho ka nie je implementovan" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "ifrovac algoritmus nie je implementovan" #: util/errors.c:81 msgid "unknown signature class" msgstr "neznma trieda podpisu" #: util/errors.c:82 msgid "trust database error" msgstr "chyba v databze dvery" #: util/errors.c:83 msgid "bad MPI" msgstr "nesprvne MPI" #: util/errors.c:84 msgid "resource limit" msgstr "obmedzenie zdrojov" #: util/errors.c:85 msgid "invalid keyring" msgstr "neplatn sbor kov" #: util/errors.c:86 msgid "bad certificate" msgstr "nesprvny certifikt" #: util/errors.c:87 msgid "malformed user id" msgstr "nesprvny formt id uvatea" #: util/errors.c:88 msgid "file close error" msgstr "chyba pri zatvran sboru" #: util/errors.c:89 msgid "file rename error" msgstr "chyba pri premenovvan sboru" #: util/errors.c:90 msgid "file delete error" msgstr "chyba pri mazan sboru" #: util/errors.c:91 msgid "unexpected data" msgstr "neoakvan dta" #: util/errors.c:92 msgid "timestamp conflict" msgstr "konflikt asovho raztka" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "nepouiten algoritmus s verejnm kom" #: util/errors.c:94 msgid "file exists" msgstr "sbor existuje" #: util/errors.c:95 msgid "weak key" msgstr "slab k" #: util/errors.c:96 msgid "invalid argument" msgstr "neplatn argument" #: util/errors.c:97 msgid "bad URI" msgstr "nesprvne URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "toto URI nie je podporovan" #: util/errors.c:99 msgid "network error" msgstr "chyba siete" #: util/errors.c:101 msgid "not encrypted" msgstr "nezaifrovan" #: util/errors.c:102 msgid "not processed" msgstr "nespracovan" #: util/errors.c:104 msgid "unusable public key" msgstr "nepouiten verejn k" #: util/errors.c:105 msgid "unusable secret key" msgstr "nepouiten tajn k" #: util/errors.c:106 msgid "keyserver error" msgstr "chyba servera kov" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "Zrui" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "nezaifrovan" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "chbaj podpsan dta\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... toto je chyba v programe (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "njden chyba v programe ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "ano" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "aAyY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "nie" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "ukoni" #: util/miscutil.c:443 msgid "qQ" msgstr "uUqQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "VAROVANIE: Pouvan pam nie je bezpen!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "Viac informci njdete na adrese http://www.gnupg.org/documentation/faqs." "html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "vykonanie opercie nie je mon bez inicializovanej bezpenej pamte\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(pravdepodobne ste na tto lohu pouili nesprvny program)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "VAROVANIE: vlastnctvo pre %s nastaven nebezpene \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "" #~ "VAROVANIE: prstupov prva pre %s nie s nastaven bezpene \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "VAROVANIE: vlastnctvo adresra %s nastaven nebezpene \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "VAROVANIE: prstupov prva adresra %s nie s nastaven bezpene \"%s\"\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "ifra \"%s\" nebola nahran, pretoe prstupov prva nie s nastaven " #~ "bezpene\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "IDEA modul pre GnuPG nenjden\n" #~ msgid "Command> " #~ msgstr "Prkaz> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "Pr kov DSA bude ma dku 1024 bitov.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "databza dvery je pokoden; prosm spustite \"gpg --fix-trustdb\".\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "nemem prida dodaton daje do v3 (PGP 2.x tl) podpisov\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "nemem prida dodaton daje do v3 (PGP 2.x tl) podpisov kov\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "nemem prida politiku URL do v3 (PGP 2.x tl) podpisov\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "nemem prida politiku URL do v3 (PGP 2.x tl) podpisov kov\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA poaduje pouitie 160 bitovho hashovacieho algoritmu\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "viac informci njdete v dokumente http://www.gnupg.cz/why-not-idea." #~ "html\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "meno me obsahova len psmen, slice, bodky, podiarnky alebo " #~ "medzery a koni s '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "hodnota mus obsahova znak '@'\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "hodnota mus obsahova znak '@'\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "hodnota nesmie obsahova iadne kontroln znaky\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "VAROVANIE: njden neplatn formt zpisu dtumu\n" #~ msgid "not human readable" #~ msgstr "nie je v priamo itatenom formte" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "ta nastavenia zo sboru" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "ta nastavenia zo sboru" #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [platnos skon: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "k %08lX: neoakvan podpisov trieda (0x%02X) - preskoen\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "nemono spusti %s \"%s\": %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "uvatesk ID \"%s\" je u revokovan\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "chyba pri vytvran hesla: %s\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "nesprvne heslo alebo neznmy ifrovac algoritmus (%d)\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "nemem nastavi PID klienta pre gpg-agenta\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "nemono zska server read file descriptor pre agenta\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "nemono zska server write file descriptor pre agenta\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "problm v komunikcii s gpg-agentom\n" #~ msgid "passphrase too long\n" #~ msgstr "heslo je prli dlh\n" #~ msgid "invalid response from agent\n" #~ msgstr "neplatn reakcia od agenta\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "problm s agentom: agent vracia 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "vyberte sekundrny k N" #~ msgid "list signatures" #~ msgstr "vypsa zoznam podpisov" #~ msgid "sign the key" #~ msgstr "podpsa k" #~ msgid "add a secondary key" #~ msgstr "prida sekundrny k" #~ msgid "delete signatures" #~ msgstr "zmaza podpisy" #~ msgid "change the expire date" #~ msgstr "zmeni dobu platnosti" #~ msgid "set preference list" #~ msgstr "nastavi zoznam predvolieb" #~ msgid "updated preferences" #~ msgstr "aktualizova predvoby" #~ msgid "No secondary key with index %d\n" #~ msgstr "Neexistuje sekundrny k s indexom %d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key id uvatea" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key id uvatea" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "vytvori podpis oddelen od dokumentu" #~ msgid "sign the key non-revocably" #~ msgstr "podpsa k bez monosti odvola podpis (non-revocably)" #~ msgid "sign the key locally and non-revocably" #~ msgstr "podpsa k loklne a bez monosti odvola podpis (non-revocably)" #~ msgid "q" #~ msgstr "u" #~ msgid "help" #~ msgstr "help" #~ msgid "list" #~ msgstr "list" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "debug" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "veobecn chyba" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "uloi" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "key" #~ msgid "check" #~ msgstr "check" #~ msgid "c" #~ msgstr "c" #~ msgid "sign" #~ msgstr "sign" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "sign" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "primary" #~ msgstr "primary" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #, fuzzy #~ msgid "keyserver" #~ msgstr "chyba servera kov" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revsig" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "hashovac algoritmus `%s' je len na tanie v tejto verzii\n" #~ 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 "" #~ "Chystm sa vytvori nov pr kov %s.\n" #~ " minimlna vekos ka je 768 bitov\n" #~ " implicitn vekos ka je 1024 bitov\n" #~ " najvyia navrhovan vekos ka je 2048 bitov\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "k DSA mus ma vekos od 512 do 1024 bitov.\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "" #~ "vekos ka je prli mal; minimlna povolen vekos pre RSA je 1024 " #~ "bitov.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "" #~ "vekos ka je prli mal; minimlna povolen vekos je 768 bitov.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "vekos ka je prli vek; maximlna povolen hodnota je %d.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "Vekosti kov vie ako 2048 bitov se neodporaj, pretoe\n" #~ "vpoty potom trvaj VEMI dlho!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "Skutone chcete vytvori k tejto dky? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Dobre, ale nezabdajte, e informcie mu by vyzraden z potaa aj " #~ "elektromagnetickm vyarovanm monitora alebo klvesnice!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Experimentlne algoritmy by sa nemali pouva!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "tento ifrovac algoritmus je zastaral; prosm, pouite nejak " #~ "tandardnej!\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "zapisujem do '%s'\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "nemono previes v dvkovom mde\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr "k `%s' nebol njden: %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "nemem vytvori `%s': %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "nemono otvori sbor: %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " alias \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "k %08lX: k bol revokovan\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "k %08lX: podk bol revokovan!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: skonila platnos ka\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: NEdverujeme tomuto ku!\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (pro ifrovn a podpis)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA (len na podpis)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA (pro ifrovn a podpis)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA (len na ifrovanie)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA (pro ifrovn a podpis)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: nemem otvori: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: VAROVANIE: sbor je przdny\n" #~ msgid "can't open %s: %s\n" #~ msgstr "nemono otvori %s: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = Dverujem iastone\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = Dverujem plne\n" #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "loklne podpsan Vam kom %08lX v %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: nemem pristupova k: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: nemem vytvori zmok\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: nemem zamkn\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: nemem vytvori: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: nemem vytvori adresr: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Pokia aj tak chcete poui tento revokovan k, odpovedzte \"ano\"." #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "Nemono otvori fotografiu \"%s\": %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "nemono otvori sbor: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "chyba: chba iarka\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "chyba: iadna rove dveryhodnosti\n" #~ msgid " (main key ID %08lX)" #~ msgstr " (hlavn ID ka %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! podk bol revokovan: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- njden falon revokcia\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? problm overenia revokcie: %s\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr " [platnos skon: %s]" #~ msgid " [expires: %s]" #~ msgstr " [platnos skon: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "[revokovan]" #~ msgid "can't create %s: %s\n" #~ msgstr "%s: nemem vytvori: %s\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "VAROVANIE: hash `%s' nie je sasou OpenPGP. Pouitie na vlastn " #~ "nebezpeie!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[sbor]|ifrova sbor" #~ msgid "store only" #~ msgstr "len uloenie" #~ msgid "|[files]|decrypt files" #~ msgstr "|[sbor]|deifrova sbor" #~ msgid "sign a key non-revocably" #~ msgstr "podpsa k bez monosti revokcie podpisu" #~ msgid "sign a key locally and non-revocably" #~ msgstr "" #~ "podpsa k loklne a bez monosti\n" #~ " revokcie podpisu" #~ msgid "list only the sequence of packets" #~ msgstr "vypsa len poradie paketov" #~ msgid "export the ownertrust values" #~ msgstr "" #~ "exportova hodnoty dveryhodnosti\n" #~ " vlastnka ka" #~ msgid "unattended trust database update" #~ msgstr "neinteraktvna aktualizcia databzy dvery" #~ msgid "fix a corrupted trust database" #~ msgstr "opravi naruen databzu dvery" #~ msgid "De-Armor a file or stdin" #~ msgstr "Dekdova ASCII sbor alebo std. vstup" #~ msgid "En-Armor a file or stdin" #~ msgstr "Zakdova sbor alebo std. vstup do ASCII" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|MENO|poui MENO ako implicitnho adresta" #~ msgid "use the default key as default recipient" #~ msgstr "" #~ "poui implicitn k ako implicitnho\n" #~ " adresta" #~ msgid "don't use the terminal at all" #~ msgstr "vbec nepouva terminl" #~ msgid "force v3 signatures" #~ msgstr "vynti podpisy verzie 3" #~ msgid "do not force v3 signatures" #~ msgstr "nevynucova podpisy verzie 3" #~ msgid "force v4 key signatures" #~ msgstr "vynti podpisy verzie 4" #~ msgid "do not force v4 key signatures" #~ msgstr "nevynucova podpisy verzie 4" #~ msgid "always use a MDC for encryption" #~ msgstr "na ifrovanie vdy poui MDC" #~ msgid "never use a MDC for encryption" #~ msgstr "na ifrovanie nikdy nepoui MDC" #~ msgid "use the gpg-agent" #~ msgstr "pouite gpg-agenta" #~ msgid "batch mode: never ask" #~ msgstr "dvkov reim: nikdy sa na ni nepta" #~ msgid "assume yes on most questions" #~ msgstr "automaticky odpoveda no na vinu otzok" #~ msgid "assume no on most questions" #~ msgstr "automaticky odpoveda NIE na vinu otzok" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "" #~ "prida tento sbor kov do zoznamu\n" #~ " pouvanch sborov kov" #~ msgid "add this secret keyring to the list" #~ msgstr "prida tento sbor tajnch kov do zoznamu" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|MENO|poui MENO ako implicitn tajn k" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "" #~ "|POTA|poui tento server kov na vyhadvanie\n" #~ " kov" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|MENO|nastav znakov sadu terminlu na MENO" #~ msgid "|[file]|write status info to file" #~ msgstr "|[sbor]|zap informciu o stave do sboru" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|k|plne dverova tomuto ku" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|SBOR|nahra rozirujci modul SBOR" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emulova md popsan v RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "" #~ "nastav vetky vlastnosti paketov, ifier\n" #~ " a hashov ako v OpenPGP" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ "nastav vetky vlastnosti paketov, ifier\n" #~ " a hashov ako v PGP 2.x" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|poui md hesla N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "|ALG|poui hashovac algoritmus ALG pre hesl" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|ALG|poui ifrovac algoritmus ALG pre hesl" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|ALG|poui ifrovac algoritmus ALG" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|ALG|poui hashovac algoritmus ALG" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|poui kompresn algoritmus N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "" #~ "zahodi identifiktor ka zo ifrovanch\n" #~ " paketov" #~ msgid "Show Photo IDs" #~ msgstr "Zobrazi fotografick ID" #~ msgid "Don't show Photo IDs" #~ msgstr "Nezobrazova fotografick ID" #~ msgid "Set command line to view Photo IDs" #~ msgstr "" #~ "Nastavi prkazov riadok na prehliadanie\n" #~ " fotografickho ID" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "hashovac algoritmus `%s' je len na tanie v tejto verzii\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "kompresn algoritmus mus by v rozmedz %d..%d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Nie je ist, i tento podpis patr vlastnkovi, napriek\n" #~ "tomu je akceptovan\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "predvoba %c%lu nie je platn\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "k %08lX: nie je vo formte RFC 2440 - preskoen\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "POZNMKA: Njden primrny k Elgamal - import me chvu trva\n" #~ msgid " (default)" #~ msgstr "deifrova dta (implicitne)" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX vytvoren: %s platnos do: %s" #~ msgid "Policy: " #~ msgstr "Politika: " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "nemem dosta k zo servera kov: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "chyba pri posielan na `%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "spen odoslanie na `%s' (status=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "zlyhalo posielanie na `%s': (status=%u)\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "tento server kov nepodporuje --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "nemem prehadva server kov: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "k %08lX: toto je k algoritmu ElGamal vygenerovan v PGP - podpisy " #~ "nm vytvoren NIE S bezpen!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "k %08lX bol vytvoren %lu sekund v budcnosti (dolo ku zmene asu " #~ "alebo\n" #~ "je problm so systmovm asom)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "k %08lX bol vytvoren %lu sekund v budcnosti (dolo ke zmene asu " #~ "alebo\n" #~ "je problm so systmovm asom)\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "k %08lX oznaen ako absoltne dveryhodn.\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "podpis od podpisovho ka Elgamal %08lX po %08lX preskoen\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "podpis od %08lX po podpisov k Elgamal %08lX preskoen\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "kontrola v hbke %d podpsan=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Vyberte algoritmus.\n" #~ "\n" #~ "DSA (nazvan tie DSS) je algoritmus digitlneho podpisu, ktor me " #~ "by\n" #~ "pouit len pre podpisy. Je to odporan algoritmus, pretoe overenie\n" #~ "DSA podpisov je ovea rchlej ako v algoritme ElGamal.\n" #~ "\n" #~ "Algoritmus ElGamal me by pouvan ako na podpisy tak na ifrovanie.\n" #~ "tandard OpenPGP rozliuje medzi dvoma reimami tohto algoritmu:\n" #~ "len ifrovanie a ifrovanie+podpis; v podstate je to rovnak, ale " #~ "niekoko\n" #~ "parametrov mus by vybranch pecilnym spsobom pre vytvorenie " #~ "bezpenho ka\n" #~ "pre podpisy: tento program to vie, ale nie je vyadovan, aby aj in\n" #~ "implementcie OpenPGP pracovali v reime podpis+ifrovanie.\n" #~ "\n" #~ "Prv (primrny) k mus by vdy k, ktor je schopn podpisova;\n" #~ "to je dvod, preo v tomto menu nie je k dispozcii k algoritmu " #~ "ElGamal\n" #~ "uren len na ifrovanie." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Hoci s tieto ke definovan v RFC2440, nie s odporan,\n" #~ "pretoe nie s podporovn vetkmi programami a podpisy nimi vytvoren\n" #~ "s dos vek a na overenie vemi pomal." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu kov u skontrolovanch (%lu podpisov)\n" #~ msgid "key incomplete\n" #~ msgstr "k nekompletn\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "k %08lX: nekompletn\n" gnupg-1.4.20/po/nb.po0000644000175000017500000047663712635457220011251 00000000000000# Norwegian translation (bokml dialect) of GnuPG. # Copyright (C) 2004 Free Software Foundation, Inc. # This file is distributed under the same license as the GnuPG package. # Trond Endrestl , 2004. # # Send this file to: # translations@gnupg.org # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.3\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:11+0200\n" "Last-Translator: Trond Endrestl \n" "Language-Team: Norwegian Bokml \n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-1\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "kan ikke generere et primtall med pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "kan ikke generere et primtall med mindre enn %d bit\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "ingen entropy-innsamlingsmodul ble oppdaget\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "kan ikke lse %s: %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "venter p lsing av %s ...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "kan ikke pne %s: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "kan ikke stat() %s: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "%s er ikke en vanlig fil - ignorert\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "merk: random_seed-fila er tom\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "ADVARSEL: ugyldig strrelse p random_seed-fila - ikke brukt\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "kan ikke lese %s: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "merk: random_seed-fila ble ikke oppdatert\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "kan ikke opprette %s: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "kan ikke skrive %s: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "kan ikke lukke %s: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "ADVARSEL: bruke usikker tilfeldig-tall-generator!!\n" #: cipher/random.c:894 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 "" "Denne tilfeldig-tall-generatoren er bare en omvei for f programmet\n" "til kjre - den er p ingen mte en sterk RNG!\n" "\n" "IKKE BRUK NOE DATA GENERERT AV DETTE PROGRAMMET!!\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Vennligst vent, entropy blir innsamlet. Gjr noe arbeid dersom det\n" "hindrer deg fra kjede deg, fordi arbeidet vil forbedre kvaliteten p\n" "entropyen.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Ikke nok tilfeldige byter tilgjengelig. Vennligst gjr noe annet\n" "arbeid for gi operativsystemet en sjanse til samle mer entropy!\n" "(Trenger %d flere byter)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "klarte ikke lagre fingeravtrykket: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "klarte ikke lagre opprettelsesdatoen: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "lesing av offentlig nkkel mislyktes: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "respons inneholder ikke data om offentlig nkkel\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "respons inneholder ikke RSA-modulus\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "respons inneholder ikke den offentlige RSA-eksponenten\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Vennligst tast inn PIN%%0A[signaturer utfrt: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 #, fuzzy msgid "||Please enter the PIN" msgstr "||Vennligst tast inn PIN%%0A[signaturer utfrt: %lu]" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN-callback returnerte en feil: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN for CHV%d er for kort; minum lengde er %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "bekreftelse av CHV%d mislyktes: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "feil ved henting av CHV-status fra kort\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "kort er permanent lst!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "%d Admin PIN-forsk fr kortet blir lst permanent\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, fuzzy, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "||Vennligst tast inn PIN%%0A[signaturer utfrt: %lu]" #: g10/app-openpgp.c:1674 #, fuzzy msgid "|A|Please enter the Admin PIN" msgstr "||Vennligst tast inn PIN%%0A[signaturer utfrt: %lu]" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "tilgang til admin-kommandoer er ikke konfigurert\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, fuzzy, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "PIN for CHV%d er for kort; minum lengde er %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Ny Admin PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Ny PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "feil ved henting av ny PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "feil ved lesing av applikasjonsdata\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "feil ved lesing av fingeravtrykk DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "nkkel finnes allerede\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "eksisterende nkkel vil bli erstattet\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "generere en ny nkkel\n" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "generere en ny nkkel\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "tidsstempel for opprettelse mangler\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSA-modulus mangler eller har ikke en strrelse p %d bits\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "offentlig RSA-eksponent mangler eller er strre enn %d bits\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "RSA-primtall %s mangler eller har ikke en strrelse p %d bits\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "klarte ikke lagre nkkelen: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "vennligst vent mens nkkel blir generert ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "nkkelgenerering mislyktes\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "nkkelgenerering fullfrt (%d sekunder)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "ugyldig struktur i OpenPGP-kort (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "kortet sttter ikke digestalgoritme %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "signaturer opprettet s langt: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "bekrefting av Admin PIN er forelpig nektet gjennom denne kommandoen\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "kan ikke aksere %s - ugyldig OpenPGP-kort?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armor: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "ugyldig armorheader: " #: g10/armor.c:459 msgid "armor header: " msgstr "armorheader: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "ugyldig clearsigheader\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "armorheader: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "nstede klartekstsignaturer\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "uforventet armering:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "ugyldig bindestrekbeskyttet linje: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "hoppet over ugyldig radix64-tegn %02x\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "for tidlig eof (ingen CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "for tidlig eof (i CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "misdannet CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC-feil; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "for tidlig eof (i trailer)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "feil i trailerlinje\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "ingen gyldig OpenPGP-data funnet.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "ugyldig armor: linje lengre enn %d tegn\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "quoted printable-tegn i armor - antakelig har en MTA med feil blitt brukt\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP-kort er ikke tilgjengelig: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "OpenPGP-kortnummer %s oppdaget\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "kan ikke gjre dette i batchmodus\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Denne kommandoen er ikke tillatt i %s-modus.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Ditt valg? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[ikke satt]" #: g10/card-util.c:512 msgid "male" msgstr "mann" #: g10/card-util.c:513 msgid "female" msgstr "dame" #: g10/card-util.c:513 msgid "unspecified" msgstr "uspesifisert" #: g10/card-util.c:540 msgid "not forced" msgstr "ikke tvunget" #: g10/card-util.c:540 msgid "forced" msgstr "tvunget" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Feil: Bare ren ASCII er forelpig tillatt.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Feil: Tegnet < kan ikke brukes.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Feil: Doble mellomrom er ikke tillatt.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Kortholders etternavn: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Kortholders fornavn: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Feil: Det kombinerte navnet er for langt (grensa gr ved %d tegn).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL for hente offentlig nkkel: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Feil: URL er for lang (grensa gr ved %d tegn).\n" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "feil ved opprettelse av nkkelknippet %s: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "feil ved lesing av %s: %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "feil med %s: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Logindata (kontonavn): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Feil: Logindata er for langt (grensa gr ved %d tegn).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Privat DO-data: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Feil: Privat DO for lang (grensa gr ved %d tegn).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Sprkpreferanser:" #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Feil: ugyldig lengde p preferansestrengen.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Feil: ugyldig tegn i preferansestrengen.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Kjnn ((M)ale, (F)emale eller mellomrom): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Feil: ugyldig respons.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA-fingeravtrykk: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Feil: ugyldig formattert fingeravtrykk.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "nkkeloperasjonen er umulig: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "ikke et OpenPGP-kort" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "feil ved henting av nvrende nkkelinfo: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Erstatte eksisterende nkkel? (j/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Hvilken nkkelstrrelse vil du ha? (%u) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Hvilken nkkelstrrelse vil du ha? (%u) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Hvilken nkkelstrrelse vil du ha? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "rundet opp til %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "feil ved lesing av hemmelig nkkelblokk %s: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Lage sikkerhetskopi av krypteringsnkler utenfor kortet? (J/n) " #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "hemmelig nkkel er allerede lagret p et kort\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Erstatte eksisterende nkler? (j/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Vr obs p at fabrikkinnstilingene for PIN-kodene er\n" " PIN = %s Admin PIN = %s\n" "Du br endre dem med kommandoen --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Vennligst velg hvilken type nkkel du vil generere:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Signaturnkkel\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Krypteringsnkkel\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Autentiseringsnkkel\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Ugyldig valg.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Vennligst velg hvor nkkelen skal lagres:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "ukjent nkkelbeskyttelsesalgoritme\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "hemmelige deler av nkkelen er ikke tilgjengelig.\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "hemmelig nkkel er allerede lagret p et kort\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "feil ved skriving av nkkelknippet %s: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "avslutte denne menyen" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "vise admin-kommandoer" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "vise denne hjelpen" #: g10/card-util.c:1687 msgid "list all available data" msgstr "vis alle tilgjengelige data" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "endre kortholders navn" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "endre URL for hente nkkel" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "hente nkkelen angitt i URL som er lagret i kortet" #: g10/card-util.c:1693 msgid "change the login name" msgstr "endre loginnavnet" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "endre sprkpreferansene" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "endre kortholders kjnn" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "vise et CA-fingeravtrykk" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "veksle tving-signatur-PIN-flagget" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "generere nye nkler" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "meny for endre eller fjerne blokkering av PIN" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "bekrefte PIN og vise alle data" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Admin-reservert kommando\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Admin-kommandoer er tillatt\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Admin-kommandoer er ikke tillatt\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Ugyldig kommando (prv help)\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "hemmelig nkkel er ikke tilgjengelig" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" "Vennligst sett inn kortet og trykk p enter eller tast inn c for " "avbryte: " #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "sleting av nkkelblokk mislyktes: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Vennligst fjern det nvrende kortet og sett inn kortet med serienummeret:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Trykk p enter nr du er klar eller tast c for avbryte: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Tast inn ny Admin-PIN: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Tast inn ny PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Tast inn Admin-PIN: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Tast inn PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Gjenta denne PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN ble ikke gjentatt korrekt; prv igjen" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "kan ikke pne %s\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output virker ikke for denne kommandoen\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "nkkelen %s ble ikke funnet: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "feil ved lesing av nkkelblokk: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(med mindre du angir nkkelen ved hjelp av fingeravtrykk)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "kan ikke gjre dette i batchmode uten --yes\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Slette denne nkkelen fra nkkelknippet? (j/N)" #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Dette er en hemmelig nkkel! - virkelig slette den? (j/N)" #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "sleting av nkkelblokk mislyktes: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "nullstilt informasjon om eiertillit\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "det finnes en hemmelig nkkel for offentlig nkkel %s!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "bruk valget --delete-secret-keys for slette den frst.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "feil ved opprettelse av passfrase: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "kan ikke bruke en symmetrisk ESK-pakke p grunn av S2K-modusen\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "bruker cipher %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "%s er allerede komprimert\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ADVARSEL: %s er en tom fil\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "du kan bare kryptere med RSA-nkler med lengder p 2048 bits eller mindre i " "--pgp2-modus\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "leser fra %s\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "klarte ikke bruke IDEA-algoritmen for alle nklene du krypterer til.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "ADVARSEL: ptvinging av symmetrisk cipher %s (%d) bryter med mottakerens " "preferanser\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "ADVARSEL: tvang av kompresjonsalgoritme %s (%d) bryter med mottakerens " "preferanser\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "ptvinging av symmetrisk cipher %s (%d) bryter med mottakerens preferanser\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "du kan ikke bruke %s i %s modus\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s kryptert for: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s krypterte data\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "kryptert med en ukjent algoritme %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ADVARSEL: meldingen er kryptert med en svak nkkel for den symmetriske " "cipher.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problem ved hndtering av kryptert pakke\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "fjernutfring av programmer er ikke stttet\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "kan ikke opprette katalogen %s: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "eksterne programkall er utkoblet p grunn av utrygge rettigheter p " "konfigurasjonsfila\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "denne plattformen krever midlertidige filer ved kall p eksterne programmer\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "kunne ikke utfre program %s: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "kunne ikke utfre skallet %s: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "systemfeil under kall p eksternt program: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "unaturlig avslutning av eksternt program\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "klarte ikke kjre eksternt program\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "klarte ikke lese reponsen fra eksternt program: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "ADVARSEL: klarte ikke fjerne midlertidig fil (%s) %s: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "ADVARSEL: klarte ikke fjerne midlertidig katalog %s: %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "eksportere signaturer som er markert som bare-lokale" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "eksportering av hemmelige nkler er ikke tillatt\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "nkkel %s: ikke beskyttet - hoppet over\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "nkkel %s: PGP 2.x-aktig nkkel - hoppet over\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "nkkel %s: nkkelmateriell p kort - hoppet over\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "klarte ikke fjerne beskyttelsen p undernkkelen: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "ADVARSEL: hemmelig nkkel %s har ikke en enkel SK-sjekksum\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "ADVARSEL: ingenting eksportert\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Kommandoer:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[fil]|lage en signatur" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[fil]|lage en klartekstsignatur" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "lage en adskilt signatur" #: g10/gpg.c:393 msgid "encrypt data" msgstr "kryptere data" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "kryptering med bare symmetrisk cipher" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "dekryptere data (standard)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "bekrefte en signatur" #: g10/gpg.c:401 msgid "list keys" msgstr "liste nkler" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "liste nkler og signaturer" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "vise og sjekke nkkelsignaturer" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "liste nkler og fingeravtrykk" #: g10/gpg.c:406 msgid "list secret keys" msgstr "liste hemmelige nkler" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "generere et nytt nkkelpar" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "fjerne nkler fra det offentlige nkkelknippet" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "fjerne nkler fra det hemmelige nkkelknippet" #: g10/gpg.c:411 msgid "sign a key" msgstr "signere en nkkel" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "signere en nkkel lokalt" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "signere eller redigere en nkkel" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "generere et opphevingssertifikat" #: g10/gpg.c:416 msgid "export keys" msgstr "eksportere nkler" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "eksportere nkler til en nkkelserver" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importere nkler fra en nkkelserver" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "ske etter nkler p en nkkelserver" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "oppdatere alle nklene fra en nkkelserver" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importere/flette nkler" #: g10/gpg.c:429 msgid "print the card status" msgstr "vis kortets status" #: g10/gpg.c:430 msgid "change data on a card" msgstr "endre data p et kort" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "endre PIN p et kort" #: g10/gpg.c:440 msgid "update the trust database" msgstr "oppdatere tillitsdatabasen" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [filer]|skrive meldingsdigester" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Valg:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "lage ASCII-beskyttet output" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAVN|kryptere for NAVN" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "bruke denne brukeriden for signering eller dekryptering" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|sette kompresjonsniv til N (0 slr av kompresjon)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "bruk kanonisk tekstmodus" #: g10/gpg.c:486 msgid "use as output file" msgstr "bruk som outputfil" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "fyldig output" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "ikke gjr noen endringer" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "spr fr overskriving" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "bruk streng OpenPGP-oppfrsel" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "generere PGP 2.x-kompatible meldinger" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Se mansiden for en komplett liste over alle kommandoene og valgene)\n" #: g10/gpg.c:576 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" "Eksempler:\n" "\n" " -se -r Bob [fil] signere og kryptere for brukeren Bob\n" " --clearsign [fil] lage en klartekstsignatur\n" " --detach-sign [fil] lage en adskilt signatur\n" " --list-keys [navn] vise nkler\n" " --fingerprint [navn] vise fingeravtrykk\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Vennligst rapporter feil til .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Bruksmte: gpg [valg] [filer] (-h for hjelp)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Bruksmte: gpg [valg] [filer]\n" "signere, sjekke, kryptere eller dekryptere\n" "standard operasjon avhenger av inputdata\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Stttede algoritmer:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Offentlig nkkel: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cipher: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Kompresjon: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "bruksmte: gpg [valg] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "motstridende kommandoer\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "fant ingen =-tegn i gruppedefinisjonen %s\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "ADVARSEL: utrygt eierskap p hjemmekatalogen %s\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "ADVARSEL: utrygt eierskap p konfigurasjonsfilen %s\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "ADVARSEL: utrygge rettigheter p hjemmekatalogen %s\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "ADVARSEL: utrygge rettigheter p konfigurasjonsfilen %s\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "ADVARSEL: utrygt eierskap p katalogene p nivene over hjemmekatalogen " "%s\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "ADVARSEL: utrygt eierskap p katalogene p nivene over konfigurasjonsfilen " "%s\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "ADVARSEL: utrygge rettigheter p katalogene p nivene over hjemmekatalogen " "%s\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "ADVARSEL: utrygge rettigheter p katalogene p nivene over " "konfigurasjonsfilen %s\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "ukjent konfigurasjonspunkt %s\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "vise navnet til nkkelknippene i nkkellister" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "MERK: den gamle valgfila %s ble ignorert\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "MERK: ingen standard valgfil %s\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "valgfil %s: %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "leser valg fra %s\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "MERK: %s er ikke for vanlig bruk!\n" # Tenk litt p denne du, Trond. #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s er ikke en gyldig signaturutgelse\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "%s er ikke et gyldig tegnsett\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "kunne ikke parse nkkelserverens URL\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: ugyldige valg for nkkelserver\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "ugyldige valg for nkkelserver\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: ugyldige importvalg\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "ugyldige importvalg\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: ugyldige eksportvalg\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "ugyldige eksportvalg\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: ugyldige listevalg\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "ugyldige listevalg\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: ugyldige valg for bekreftelse\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "ugyldige valg for bekreftelse\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "kunne ikke sette exec-path til %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: ugyldig auto-key-locate-liste\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "ADVARSEL: programmet kan opprette en corefil!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "ADVARSEL: %s overstyrere %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s er ikke tillatt sammen med %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s er ikke fornuftig med %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "du kan bare lage adskilte eller klare signaturer i --pgp2-modus\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "du kan ikke signere og kryptere samtidig i --pgp2-modus\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "du m bruke filer (og ikke en pipe) nr --pgp2 er psltt\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "kryptering en melding i --pgp2-modus krever IDEA-algoritmen\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "valgt krypteringsalgoritme er ugyldig\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "valg digestalgoritme er ugyldig\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "valgt kompresjonsalgoritme er ugyldig\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "valgt sertifikasjondigestalgoritme er ugyldig\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed m vre strre enn 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-neede m vre strre enn 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth m vre i intervallet fra 1 til 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "ugyldig default-cert-level; m vre 0, 1, 2 eller 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "ugyldig min-cert-level; m vre 0, 1, 2 eller 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "MERK: enkel S2K-modus (0) er sterkt frardet\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ugyldig S2K-modus; m vre 0, 1 eller 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "ugyldig standard preferanser\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "ugyldig personlig cipherpreferanser\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "ugyldig personlig digestpreferanser\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "ugyldig personlig kompresjonspreferanser\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s virker ikke enn med %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "du kan ikke bruke cipheralgoritmen %s i %s-modus\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "du kan ikke bruke digestalgoritmen %s i %s-modus\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "du kan ikke bruke kompresjonsalgoritmen %s i %s-modus\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "klarte ikke initialisere tillitsdatabasen: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "ADVARSEL: mottakere (-r) angitt uten bruke offentlig nkkelkryptering\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [filnavn]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [filnavn]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "symmetrisk kryptering av %s mislyktes: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [filnavn]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [filnavn]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "du kan ikke bruke --symmtric --encrypt i %s-modus\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [filnavn]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [filnavn]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [filnavn]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "du kan ikke bruke --symmetric --sign --encrypt i %s-modus\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [filnavn]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [filnavn]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [filnavn]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key brukerid" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key brukerid" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key brukerid [kommandoer]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [brukerid] [nkkelknippe]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "sending til nkkelserver mislyktes: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "mottak fra nkkelserver mislyktes: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "nkkeleksport mislyktes: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "sk p nkkelserver mislyktes: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "refresh p nkkelserver mislyktes: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "dearmoring failed: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "enarmoring failed: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "ugyldig hashalgoritme %s\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[filnavn]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Sett i gang og tast inn meldingen din ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "den angitte URLen for sertifikasjonspolicyen er ugyldig\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "den angitte URLen for signaturpolicy er ugyldig\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "den angitte URLen for den foretrukkede nkkelserveren er ugyldig\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "for mange innslag i pk-cachen - utkoblet\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[Brukerid ikke funnet]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "nkkel %s: hemmelig nkkel uten offentlig nkkel - hoppet over\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Ugyldig nkkel %s gjort gyldig av --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "ingen hemmelig undernkkel for offentlig undernkkel %s - ignorerer\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "bruker undernkkel %s i stedet for primrnkkel %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "vre noenlunde stille" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "hent nklene fra dette nkkelknippet" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "la konflikter mellom tidsstempler bare vre en advarsel" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|skrive statusinfo til denne FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Bruksmte: gpgv [valg] [filer] (-h for hjelp)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Bruksmte: gpgv [valg] [filer]\n" "Sjekke signaturer mot kjente betrodde nkler\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Nr du signerer en brukerid p en nkkel, br du frst bekrefte at\n" "nkkelen tilhrer den personen som er angitt i brukeriden. Det er\n" "nyttig for andre vite hvor nyaktig du bekreftet dette.\n" "\n" "\"0\" betyr at du forteller hvor nye du bekreftet nkkelen.\n" "\n" "\"1\" betyr at du tror at nkkelen eies av den personen som pstr eie\n" " nkkelen, men du kunne ikke eller bekreftet ikke nkkelen i det hele\n" " tatt. Dette er nyttig for en identitetskontroll hvor du signerer\n" " nkkelen til et pseudonym.\n" "\n" "\"2\" betyr at du gjorde en vanlig bekreftelse av nkkelen. For eksempel,\n" " dette kunne bety at du bekreftet nkkelens fingeravtrykk og sjekket\n" " brukeriden mot et fotografisk id.\n" "\n" "\"3\" betyr at du gjorde en utfyllende bekreftelse av nkkelen. For\n" " eksempel, dette kunne bety at du og eieren av nkkelen bekreftet\n" " personlig nkkelens fingeravtrykk og at du sjekket ved hjelp av et\n" " dokument med fotografi som er vanskelig forfalske at navnet p\n" " nkkeleieren stemmer med navnet i brukeriden til nkkelen og til slutt\n" " at du bekreftet at epostadressen i nkkelen tilhrer nkkelens eier.\n" "\n" "Vr obs p at eksemplene gitt over for nivene 2 og 3 *bare* er\n" "eksempler. Alt i alt er det opp til deg bestemme hva vanlig og\n" "utfyllende betyr nr du signerer andres nkler.\n" "\n" "Svar 0 dersom du ikke vet hva det riktige svaret er." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" #: g10/helptext.c:228 #, fuzzy #| msgid "" #| "Enter the new passphrase for this secret key.\n" #| "\n" msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Tast inn den nye passfrasen for denne hemmelige nkklen.\n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" #: g10/helptext.c:285 msgid "No help available" msgstr "" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy #| msgid "do not update the trustdb after import" msgid "do not clear the ownertrust values during import" msgstr "ikke oppdatr tillitsdatabasen etter import" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "ikke oppdatr tillitsdatabasen etter import" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "hopper over blokk av typen %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu nkler behandlet hittil\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Totalt antall behandlet: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr "nye nkler som ble hoppet over: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " uten brukerider: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importert: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " uendret: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nye brukerider: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nye undernkler: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nye signaturer: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " nye nkkelopphevinger: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " leste hemmelige nkler: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " importerte hemmelige nkler: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " uforandrede hemmelige nkler: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " ikke importert: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " oppryddete signaturer: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " oppryddete brukerider: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr " nye brukerider: %lu\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " %s preferanse for digestalgoritme %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "nkkel %s: ingen brukerid\n" #: g10/import.c:819 #, fuzzy, c-format #| msgid "skipped \"%s\": %s\n" msgid "key %s: %s\n" msgstr "hoppet over %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "nkkel %s: PKS-undernkkel reparert\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "nkkel %s: akseptert ikke-selvsignert brukerid %s\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "nkkel %s: ingen gyldig brukerid\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "dette kan skyldes en manglende selvsignatur\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "nkkel %s: offentlig nkkel ikke funnet: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "nkkel %s: ny nkkel - hoppet over\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "ingen skrivbart nkkelknippe funnet: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "skriver til %s\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "feil ved skriving av nkkelknippet %s: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "nkkel %s: offentlig nkkel %s importert\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "nkkel %s: stemmer ikke med vr kopi\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "nkkel %s: kan ikke finne original nkkelblokk: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "nkkel %s: kan ikke lese original nkkelblokk: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nkkel %s: %s 1 ny brukerid\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "nkkel %s: %s %d nye brukerider\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "nkkel %s: %s 1 ny signatur\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "nkkel: %s: %s %d nye signaturer\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "nkkel %s: %s 1 ny undernkkel\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "nkkel %s: %s %d nye undernkler\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "nkkel: %s: %s %d nye signaturer\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "nkkel: %s: %s %d nye signaturer\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "nkkel %s: %s %d nye brukerider\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "nkkel %s: %s %d nye brukerider\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "nkkel %s: %s ikke endret\n" #: g10/import.c:1211 #, fuzzy, c-format #| msgid "secret key \"%s\" not found: %s\n" msgid "secret key %s: %s\n" msgstr "hemmelig nkkel %s ble ikke funnet: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "import av hemmelig nkkel er ikke tillatt\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "nkkel %s: hemmelig nkkel med ugyldig cipher %d - hoppet over\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "ingen standard hemmelig nkkelknippe: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "nkkel %s: hemmelig nkkel importert\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "nkkel %s: finnes allerede i hemmelig nkkelknippe\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "nkkel %s: hemmelig nkkel ikke funnet: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "nkkel %s: ingen offentlig nkkel - kan ikke anvende opphevingssertifikat\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nkkel %s: ugyldig opphevingssertifikat: %s - avvist\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "nkkel %s: %s opphevingssertifikat importert\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "nkkel %s: ingen brukerid for signatur\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "nkkel %s: ustttet offentlig nkkelalgoritme for brukerid %s\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "nkkel %s: ugyldig selvsignatur for brukerid %s\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "nkkel %s: ustttet offentlig nkkelalgoritme\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "nkkel %s: direkte nkkelsignatur lagt til\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "nkkel %s: ingen undernkkel for nkkelbinding\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "nkkel %s: ugyldig undernkkelbinding\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "nkkel %s: fjernet flere undernkkelbindinger\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "nkkel %s: ingen undernkkel for nkkeloppheving\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "nkkel %s: ugyldig undernkkeloppheving\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "nkkel %s: fjernet flere undernkkelopphevinger\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "nkkel %s: hoppet over brukerid %s\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "nkkel %s: hoppet over undernkkel\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "nkkel %s: ikke-eksporterbar signatur (klasse 0x%02X) - hoppet over\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "nkkel %s: opphevingssertifikat p feil plass - hoppet over\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "nkkel %s: ugyldig opphevingssertifikat: %s - hoppet over\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "nkkel %s: undernkkelsignatur p feil plass - hoppet over\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "nkkel %s: uforventet signaturklasse (0x%02X) - hoppet over\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "nkkel %s: duplikert brukerid oppdaget - flettet sammen\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "ADVARSEL: nkkel %s kan vre opphevet: henter opphevingsnkkel %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "ADVARSEL: nkkel %s kan vre opphevet: opphevingsnkkel %s ikke tilstede.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "nkkel %s: %s opphevingssertifikat lagt til\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "nkkel %s: direkte nkkelsignatur lagt til\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "feil ved opprettelse av nkkelknippet %s: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "nkkelknippet %s ble opprettet\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "nkkelblokkressurs %s: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[oppheving]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[selvsignatur]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 ubrukelig signatur\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d ubrukelige signaturer\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 signatur ble ikke sjekket p grunn av en manglende nkkel\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signaturer ble ikke sjekket p grunn av manglende nkler\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 signatur ble ikke sjekket p grunn av en feil\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signaturer ble ikke sjekket p grunn av feil\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 brukerid uten gyldig selvsignatur ble oppdaget\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d brukerider uten gyldige selvsignaturer ble oppdaget\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Vennligst bestem hvor mye du tiltror denne brukeren korrekt bekrefte\n" "andre brukeres nkler (ved se p pass, sjekke fingeravtrykk fra\n" "forskjellige kilder, osv.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Jeg stoler marginalt\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Jeg stoler fullt\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Brukerid %s er opphevet." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Er du fortsatt sikker p at du vil signerere den? (j/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Kunne ikke signere.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Brukerid %s er utgtt." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Brukeriden %s er ikke selvsignert." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "Brukeriden %s er signerbar." #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Signere den? (j/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Selvsignaturen p %s\n" "er en PGP 2.x-aktig signatur.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Vil du forfremme den til en OpenPGP-selvsignatur? (j/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Din nvrende signatur p %s\n" "er utgtt.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Vil du utstede en ny signatur for erstatte den som er utgtt? (j/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Din nvrede signatur p %s\n" "er en lokal signatur.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Vil du forfremme den til en fullt eksporterbar signatur? (j/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "%s var allerede lokalt signert av nkkelen %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "%s var allerede signert av nkkelen %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Vil du likevel signere den igjen? (j/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Ingenting signere med nkkelen %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Denne nkkelen er utgtt!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Denne nkkelen utgr den %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Vil du at signaturen skal utg p samme tidspunkt? (J/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Du kan ikke lage en OpenPGP-signatur p en PGP-2.x-nkkel i --pgp2-modus.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Dette ville gjre nkkelen ubrukelig i PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Hvor nyaktig har du bekreftet at nkkelen du skal signere faktisk\n" "tilhrer den overnevnte personen? Tast inn 0 dersom du ikke vet\n" "svaret.\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Jeg vil ikke svare.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Jeg har ikke sjekket i det hele tatt.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Jeg har gjort en vanlig sjekk.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Jeg har sjekket veldig nye.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Ditt valg? (angi ? for mer informasjon): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Er du virkelig sikker p at du vil signerere denne nkkelen med din\n" "nkkel %s (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Dette vil vre en selvsignatur.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "ADVARSEL: signaturen vil ikke bli markert som ikke-eksporterbar.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "ADVARSEL: signaturen vil ikke bli markert som ikke-opphevbar.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Signaturen vil bli markert som ikke-eksporterbar.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Signaturen vil bli markert som ikke-opphevbar.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Jeg har ikke sjekket denne nkkelen i det hele tatt.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Jeg har sjekket denne nkkelen p vanlig mte.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Jeg har sjekket denne nkkelen veldig nye.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Virkelig signere? (j/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "signering mislyktes: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Denne nkkelen er ikke beskyttet.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Hemmelige deler av primrnkkelen er ikke tilgjengelig.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Hemmelige deler av primrnkkelen er lagret p kort.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Nkkelen er beskyttet.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Kan ikke redigere denne nkkelen: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "Tast inn den nye passfrasen for denne hemmelige nkklen.\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "passfrasen ble ikke gjentatt korrekt; prv igjen" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "Du nsker ikke en passfrase - dette er sannsynligvis en *dum* id!\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Vil du virkelig gjre dette? (j/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "flytter en nkkelsignatur til den rette plassen\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "lagre og avslutte" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "vise nkkelens fingeravtrykk" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "liste nkler og brukerider" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "velger brukerid N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "velger brukerid N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "sjekke signaturer" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "signerere utvalgte brukerider lokalt" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "signere utvalgte brukerider med en tillitssignatur" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "legge til en brukerid" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "legge til en fotoid" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "slette utvalgte brukerider" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "legge til en undernkkel" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "slette utvalgte undernkler" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "legge til en opphevingsnkkel" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "slette signaturene fra de utvalgte brukeridene" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "markere den valgte brukeriden som den primre" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "veksle mellom hemmelig og offentlig nkkellisting" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "liste preferanser (ekspert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "liste preferanser (fyldig)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "sette preferanseliste for de valgte brukeridene" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "sette URL for foretrukket nkkelserver for de valgte brukeridene" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "sette en notasjon for de valgte brukeridene" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "endre passfrasen" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "endre eiertilliten" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "oppheve signaturene p de valgte brukeridene" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "oppheve utvalgte brukerider" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "oppheve nkkel eller utvalgte undernkler" #: g10/keyedit.c:1439 msgid "enable key" msgstr "innkoble en nkkel" #: g10/keyedit.c:1440 msgid "disable key" msgstr "utkoble en nkkel" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "vise utvalgte fotoider" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "feil ved lesing av hemmelig nkkelblokk %s: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Hemmelig nkkel er tilgjengelig\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Trenger den hemmelige nkkelen for gjre dette.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Vennligst bruk kommandoen toggle frst.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Nkkelen er opphevet." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Virkelig signerere alle brukerider? (j/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Tips: Velg brukeriden som skal signeres\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Ukjent signaturtype %s\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Denne kommandoen er ikke tillatt i %s-modus.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Du m velge minst en brukerid.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Du kan ikke slette den siste brukeriden!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Virkelig fjerne alle valgte brukerider? (j/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Virkelig fjerne denne brukeriden? (j/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Virkelig flytte primrnkkelen? (j/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Du m velge minst en nkkel.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Kan ikke pne %s: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Feil ved lesing av sikkerhetskopiert nkkel %s: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Du m velge minst en nkkel.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Vil du virkelig slette den valgte nkkelen? (j/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Vil du virkelig slette denne nkkelen? (j/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Virkelig oppheve alle de valgte brukeridene? (j/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Virkelig oppheve denne brukeriden? (j/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Vil du virkelig oppheve hele nkkelen? (j/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Vil du virkelig oppheve de valgte undernklene? (j/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Vil du virkelig oppheve denne undernkkelen? (j/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "sette preferanseliste til:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Virkelig oppdatere preferansene for de valgte brukeridene? (j/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Virkelig oppdatere preferansene? (j/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Lagre endringene? (j/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Avslutte uten lagre? (j/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "oppdatering mislyktes: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "oppdatering av hemmelig mislyktes: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Nkkelen ble ikke endret, s ingen oppdatering er ndvendig.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Digest: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Srtrekk: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notasjoner: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Det er ingen preferanser for en PGP 2.x-aktig brukerid.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Denne nkkelen ble opphevet den %s av %s med nkkelen %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Denne nkkelen kan bli opphevet av %s med nkkelen %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(sensitiv)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "opprettet: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "opphevet: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "utgikk: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "utgr: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "bruksmte: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "tillit: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "gyldighet: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Denne nkkelen har blitt utkoblet" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "opphevet" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "utgtt" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 msgid "You may want to change its expiration date too.\n" msgstr "" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Er du sikker p at du vil legge den til? (j/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Slette denne gode signaturen? (j/N/a)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Slettet %d signatur.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Slettet %d signaturer.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Ingen ble slettet.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "ugyldig" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "brukerid %s: allerede renset\n" #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "nkkel: %s: %s %d nye signaturer\n" #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "nkkel: %s: %s %d nye signaturer\n" #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "brukerid %s: allerede renset\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "brukerid %s: allerede renset\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "" #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Er du fortsatt sikker p at du vil gjre denne nkkelen til en opphever? (j/" "N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Vennligst velg minst en undernkkel.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "Undernkkel %s er allerede opphevet.\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "hopper over v3 selvsignatur for brukerid %s\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Er du sikker p at du vil erstatte den? (j/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Er du sikker p at du vil slette den? (j/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "" #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "" #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (ikke-eksporterbar)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Denne signaturen utgikk den %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "" #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "" #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (ikke-opphevbar)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "" #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "ingen hemmelig nkkel\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "brukerid %s er allerede opphevet\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "ADVARSEL: en brukeridsignatur er datert %d sekunder i fremtiden\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Nkkelen %s er allerede opphevet.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Undernkkel %s er allerede opphevet.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "preferansen %s er duplisert\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "for mange cipher-preferanser\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "for mange digest-preferanser\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "for mange kompresjons-preferanser\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "ugyldig oppfring %s i preferansestreng\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "skriver direkte signatur\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "skriver selvsignatur\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "skriver nkkelbindende signatur\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "nkkelstrrelsen er ugyldig; bruker %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "nkkelstrrelsen ble rundet opp til %u bits\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Signere" #: g10/keygen.c:1365 msgid "Certify" msgstr "Bekrefte" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Kryptere data" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Autentisere" # S og s for signering # K og k for kryptering # A og a for autentisering # Q og q for avslutte #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsKkAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr "" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Vennligst velg hvilken type nkkel du vil ha:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA og ElGamal (standard)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA og ElGamal (standard)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (bare signering)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (bare signering)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (bare kryptering)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (bare kryptering)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (sette dine egne muligheter)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (sette dine egne muligheter)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Hvilken nkkelstrrelse vil du ha? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Hvilken nkkelstrrelse vil du ha? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "nsket nkkelstrrelse er %u bits\n" #: g10/keygen.c:1722 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 "" "Vennligst angi hvor lenge nkkelen skal vre gyldig.\n" " 0 = nkkelen utgr ikke\n" " = nkkelen utgr om n days\n" " w = nkkelen utgr om n weeks\n" " m = nkkelen utgr om n months\n" " y = nkkelen utgr om n years\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Vennligst angi hvor lenge signaturen skal vre gyldig.\n" " 0 = signaturen utgr ikke\n" " = signaturen utgr om n days\n" " w = signaturen utgr om n weeks\n" " m = signaturen utgr om n months\n" " y = signaturen utgr om n years\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Nkkelen er gyldig for? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Signaturen er gyldig for? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "ugyldig verdi\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Nkkel utgr ikke i det hele tatt\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Signaturen utgr ikke i det hele tatt\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Nkkel utgr den %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Signaturen utgr den %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Systemet ditt kan ikke vise datoer etter 2038.\n" "Likevel vil det bli hndtert korrekt opp til 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Er dette korrekt (j/N)? " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Du trenger en brukerid for identifisere nkkelen din;\n" "programvaren konstruerer brukeriden ut fra fullt navn, kommentar og\n" "epostadresse til denne formen:\n" " Heinrich Heine (Der Dichter) \n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Fullt navn: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Ugyldig tegn i navn\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Navnet kan ikke starte med et siffer\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Navnet m vre minst 5 tegn langt\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Epostadresse: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Ikke en gyldig epostadresse\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Kommentar: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Ugyldig tegn i kommentar\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Du bruker tegnsettet %s.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Du valgte denne brukeriden:\n" " %s\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Vennligst ikke putt epostadressen inn i fullt navn eller i kommentaren\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnKeEeRrAa" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Endre (N)avn, (K)ommentar, (E)postadresse eller (A)vslutt? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Endre (N)avn, (K)ommentar, (E)postadresse eller (R)iktig/(A)vslutt? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Vennligst korriger feilen frst\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Du trenger en passfrase for beskytte din hemmelige nkkel.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Du vil ikke ha en passfrase - dette er sannsynligvis en *dum* id!\n" "Jeg fortsetter likevel. Du kan endre passfrasen din nr som helst ved\n" "hjelp av dette programmet og valget --edit-key.\n" "\n" #: g10/keygen.c:2034 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 "" "Vi trenger generere ganske mange tilfeldige byter. Det er en god id\n" " utfre andre oppgaver (skrive p tastaturet, flytte p musa, la\n" "diskene jobbe) under primtallgenereringen; dette gir\n" "tilfeldig-tall-generatoren en bedre sjanse til samle nok entropy.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Nkkelgenereringen ble avbrutt.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "skriver offentlig nkkel til %s\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "skriver forelpig hemmelig nkkel til %s\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "skriver hemmelig nkkel til %s\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "ingen skrivbart offentlig nkkelknippe ble funnet: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "ingen skrivbart hemmelig nkkelknippe ble funnet: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "feil ved skriving av offentlig nkkelknippe %s: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "feil ved skriving av hemmelig nkkelknippe %s: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "offentlig og hemmelig nkkel opprettet og signert.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Merk at denne nkkelen ikke kan brukes for kryptering. Du nsker\n" "kanskje bruke kommandoen --edit-key for generere en\n" "sekundrnkkel for dette formlet.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Nkkelgenerering mislyktes: %s\n" # Er dette entallsformen av denne strengen? #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "nkkel har blitt opprettet %lu sekund i fremtiden (time warp eller " "klokkeproblem)\n" # Er dette flertallsformen av denne og den forrige strengen? #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "nkkel har blitt opprettet %lu sekunder i fremtiden (time warp eller " "klokkeproblem)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" "MERK: opprettelse av undernkler for v3-nkler er ikke i samsvar med " "OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Virkelig opprette? (j/N)" #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "lagring av nkkel p kort mislyktes: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "kan ikke opprette sikkerhetskopifil %s: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "" #: g10/keylist.c:267 msgid "Signature policy: " msgstr "" #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "" #: g10/keylist.c:361 msgid "Signature notation: " msgstr "" #: g10/keylist.c:471 msgid "Keyring" msgstr "Nkkelknippe" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Fingeravtrykk for primrnkkel:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Fingeravtrykk for undernkkel:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Fingeravtrykk for primrnkkel:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Fingeravstrykk for undernkkel:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Nkkelfingeravtrykk =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Serienummer for kort =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "omdping fra %s til %s mislyktes: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "ADVARSEL: 2 filer med konfidensiell informasjon finnes.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "cacher nkkelknippet %s\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu nkler cachet s langt (%lu signaturer)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu nkler cachet (%lu signaturer)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "ADVARSEL: nkkelserver-valget %s er ikke i bruk p denne plattformen\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "utkoblet" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "nkkelen %s ble ikke funnet p nkkelserveren\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "nkkelen ble ikke funnet p nkkelserver\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "ber om nkkelen %s fra %s server %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "ber om nkkel %s fra %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "ske etter navn fra %s server %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "sker etter navn fra %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "ske etter %s fra %s server %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "sker etter %s fra %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "ingen handling for nkkelserver!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "nkkelserver sendte ikke VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "kommunikasjonsfeil med nkkelserver: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "nkkelserver svarte ikke tidsnok\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "intern feil ved nkkelserver\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "ADVARSEL: klarte ikke oppfriske nkkel %s via %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "oppfrisker 1 nkkel fra %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "oppfrisker %d nkler fra %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "ADVARSEL: klarte ikke fange URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "ADVARSEL: klarte ikke parse URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "merkelig strrelse for en kryptert sesjonsnkkel (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "passfrase er generert med en ukjent digest-algoritme %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "offentlig nkkel er %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "offentlig nkkel-kryptert data: god DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "kryptert med %u-bit %s-nkkel, ID %s, opprettet %s\n" # Do we really need to translate this string. # The must some bug in the code. #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " %s\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "kryptert med %s-nkkel, ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "offentlig nkkel-dekryptering mislyktes: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "dekryptering mislyktes: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "opprinnelig filnavn=%.*s\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "ingen signatur ble funnet\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Signatur opprettet %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " bruker %s nkkel %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Signatur laget %s ved hjelp av %s-nkkel ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Nkkel tilgjengelig ved: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "DRLIG signatur fra %s" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Utgtt signatur fra %s" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "God signatur fra %s" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[usikker]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " aka %s" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Signatur utgtt %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Signatur utgr %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s signatur, digestalgoritme %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binr" #: g10/mainproc.c:1947 msgid "textmode" msgstr "tekstmodus" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "ukjent" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) mislyktes in %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "ADVARSEL: bruker eksperimentell offentlig nkkel-algoritme %s\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "ADVARSEL: digestalgoritmen %s er avlegs\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "ADVARSEL: bruker eksperimentell cipheralgoritme %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "ADVARSEL: bruker eksperimentell digest-algoritme %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "ADVARSEL: digestalgoritmen %s er avlegs\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "vennligst se %s for mer informasjon\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "OpenPGP-kort er ikke tilgjengelig: %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "" #: g10/misc.c:755 msgid "Uncompressed" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "flertydig valg %s\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "ukjent valg %s\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Ukjent signaturtype %s\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Fila %s finnes. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Overskrive (j/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Tast inn nytt filnavn" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "skriver til stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "antar at signert data er i %s\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "ny konfigurasjonsfil %s ble opprettet\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "ADVARSEL: valgene i %s er ikke aktive under denne kjringen\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "katalogen %s ble opprettet\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (hovednkkelid %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Du trenger en passfrase for lse opp den hemmelige nkkelen for brukeren:\n" "%.*s\n" "%u-bit %s nkkel, ID %s, opprettet %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Gjenta passfrase\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Tast inn passfrase\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "kan ikke sprre om passfrase i batchmodus\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Tast inn passfrase: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Du trenger en passfrase for lse opp den hemmelige nkkelen for\n" "brukeren: %s\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bit %s-nkkel, ID %s, opprettet %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Gjenta passfrase: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "" #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "kan ikke pne JPEG-fil %s: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Er du sikker p at du vil bruke den? (j/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "%s er ikke et JPEG-fil\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "" #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Ingen grunn er angitt" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Nkkelen er overgtt" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Nkkelen har blitt kompromittert" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Nkkelen er ikke lengre i bruk" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Brukerid er ikke lengre gyldig" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "grunnen for opphevelse: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "kommentar til opphevelse: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Ingen tillitsverdi tilordnet til:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " aka %s\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Hvor mye stoler du p at denne nkkelen faktisk tilhrer den angitte " "brukeren?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Jeg vet ikke eller vil ikke uttale meg\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Jeg stoler IKKE p den\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Jeg stoler fullstendig p den\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = tilbake til hovedmenyen\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = hopp over denne nkkelen\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = avslutt\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Valget ditt? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Vil du virkelig sette denne nkkelen til fullstendig tillit? (j/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Sertifikater som frer til en fullstendig betrodd nkkel:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: Det finnes ingen indikasjon p at denne nkkelen faktisk tilhrer den " "angitte eieren\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Det er begrenset indikasjon p at denne nkkelen faktisk tilhrer den " "angitte eieren\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Denne nkkelen tilhrer sannsynligvis den angitte eieren\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "denne nkkelen tilhrer oss\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Det er IKKE sikkert at nkkelen tilhrer personen som er angitt i\n" "brukeriden. Dersom du *virkelig* vet hva du gjr, kan du besvare det\n" "neste sprsmlet med ja.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Bruke denne nkkelen likevel? (j/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "ADVARSEL: Bruker ubetrodd nkkel!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "ADVARSEL: nkkel %s kan vre opphevet: opphevingsnkkel %s ikke tilstede.\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "" "ADVARSEL: Denne nkkelen har blitt opphevet av den utpekte oppheveren!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ADVARSEL: Denne nkkelen har blitt opphevet av dens eier!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Dette kan bety at signaturen er falsk.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ADVARSEL: Denne undernkkelen har blitt opphevet av eieren!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Merk: Denne nkkelen har blitt utkoblet.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Merk: Denne nkkelen er utgtt!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "ADVARSEL: Denne nkkelen er ikke sertifisert med en betrodd signatur!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Det er ingen indikasjon p at signaturen tilhrer eieren.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "ADVARSEL: Vi stoler IKKE p denne nkkelen!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Signaturen er sannsynligvis et FALSKNERI.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ADVARSEL: Denne nkkelen er ikke sertifisert med tilstrekkelige betrodde " "signaturer!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Det er ikke sikkert at signaturen tilhrer brukeren.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: hoppet over: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: hoppet over: offentlig nkkel er allerede tilstede\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Du oppga ikke en brukerid. (Du kan bruke -r)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Tast inn brukeriden. Avslutt med en blank linje: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Det finnes ingen slik brukerid.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "hoppet over: offentlig nkkel allerede satt som standard mottaker\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Offentlig nkkel er utkoblet.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "hoppet over: offentlig nkkel er allerede satt\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "ukjent standardmottaker %s\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: hoppet over: offentlig nkkel er utkoblet\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "ingen gyldige adressater\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "" #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" "ptvinging av kompresjonsalgoritme %s bryter med mottakerens preferanser\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTIS: hemmelig nkkel %s utgikk den %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "nkkel %s: ingen brukerid\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Lage et utpekt opphevingssertifikat for denne nkkelen? (j/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "hemmelig nkkel %s ble ikke funnet: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Lage et opphevingssertifikat for denne nkkelen? (j/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "" #: g10/revoke.c:641 msgid "Cancel" msgstr "" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Er dette i orden? (j/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Ugyldig passfrase; vennligst prv igjen" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "svak nkkel ble opprettet - prver p nytt\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "kan ikke unng svak nkkel for symmetrisk krypteringsalgorime; prvde %d " "ganger!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "" # Er dette entallsformen av denne strengen? #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "nkkel %s ble opprettet %lu sekund i fremtiden (time warp eller " "klokkeproblem)\n" # Er dette flertallsformen av denne og den forrige strengen? #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "nkkel %s ble opprettet %lu sekunder i fremtiden (time warp eller " "klokkeproblem)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTIS: signaturnkkelen %s utgikk %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s signatur, digestalgoritme %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "nkkel %s: ingen undernkkel for undernkkelopphevingssignatur\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "nkkel %s: ingen undernkkel for undernkkelbindingssignatur\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s-signatur fra: %s\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "ADVARSEL: ptvinging av kompresjonsalgoritme %s (%d) bryter med mottakerens " "preferanser\n" #: g10/sign.c:960 msgid "signing:" msgstr "" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "hoppet over %s: er duplikat\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "hoppet over %s: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "feil med %s: %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "for lang linje" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "ugyldig fingeravtrykk" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "verdi for eiertillit mangler" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "feil ved sking etter tillitspost i %s: %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "lesefeil ved %s: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "kan ikke opprette ls for %s\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "kan ikke lse %s\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "kan ikke aksere %s: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "nkkel %s: godtatt som betrodd nkkel\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "nkkel %s: ingen offentlig nkkel for betrodd nkkel - hoppet over\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "nkkel %s markert som endelig betrodd.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ opphevet]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ utgtt]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ ukjent]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ udef ]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 msgid "never" msgstr "" #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "fant ikke offentlig nkkel %s: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "" #: util/errors.c:53 msgid "general error" msgstr "generell feil" #: util/errors.c:54 msgid "unknown packet type" msgstr "ukjent pakketype" #: util/errors.c:55 msgid "unknown version" msgstr "ukjent versjon" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "ukjent pubkey-algoritme" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "ukjent digest-algoritme" #: util/errors.c:58 msgid "bad public key" msgstr "ugyldig offentlig nkkel" #: util/errors.c:59 msgid "bad secret key" msgstr "ugyldig hemmelig nkkel" #: util/errors.c:60 msgid "bad signature" msgstr "ugyldig signatur" #: util/errors.c:61 msgid "checksum error" msgstr "sjekksumfeil" #: util/errors.c:62 msgid "bad passphrase" msgstr "ugyldig passfrase" #: util/errors.c:63 msgid "public key not found" msgstr "fant ikke offentlig nkkel" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "ukjent kryptoalgoritme" #: util/errors.c:65 msgid "can't open the keyring" msgstr "kan ikke pne nkkelknippet" #: util/errors.c:66 msgid "invalid packet" msgstr "ugyldig pakke" #: util/errors.c:67 msgid "invalid armor" msgstr "ugyldig beskyttelse" #: util/errors.c:68 msgid "no such user id" msgstr "det finnes ingen slik brukerid" #: util/errors.c:69 msgid "secret key not available" msgstr "hemmelig nkkel er ikke tilgjengelig" #: util/errors.c:70 msgid "wrong secret key used" msgstr "feil hemmelig nkkel ble brukt" #: util/errors.c:71 msgid "not supported" msgstr "ikke stttet" #: util/errors.c:72 msgid "bad key" msgstr "ugyldig nkkel" #: util/errors.c:73 msgid "file read error" msgstr "feil ved lesing av fil" #: util/errors.c:74 msgid "file write error" msgstr "feil ved skriving av fil" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "ukjent kompresjonsalgoritme" #: util/errors.c:76 msgid "file open error" msgstr "feil ved pning av fil" #: util/errors.c:77 msgid "file create error" msgstr "feil ved opprettelse av fil" #: util/errors.c:78 msgid "invalid passphrase" msgstr "ugyldig passfrase" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "uimplementert pubkey-algoritme" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "uimplementert kryptoalgoritme" #: util/errors.c:81 msgid "unknown signature class" msgstr "ukjent signaturklasse" #: util/errors.c:82 msgid "trust database error" msgstr "feil med tillitsdatabasen" #: util/errors.c:83 msgid "bad MPI" msgstr "ugyldig MPI" #: util/errors.c:84 msgid "resource limit" msgstr "ressursgrense" #: util/errors.c:85 msgid "invalid keyring" msgstr "ugyldig nkkelknippe" #: util/errors.c:86 msgid "bad certificate" msgstr "ugyldig sertifikat" #: util/errors.c:87 msgid "malformed user id" msgstr "vansired brukerid" #: util/errors.c:88 msgid "file close error" msgstr "feil ved lukking av fil" #: util/errors.c:89 msgid "file rename error" msgstr "feil ved omdping av fil" #: util/errors.c:90 msgid "file delete error" msgstr "feil ved sletting av fil" #: util/errors.c:91 msgid "unexpected data" msgstr "uforventet data" #: util/errors.c:92 msgid "timestamp conflict" msgstr "konflikt mellom tidsstempler" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "ubrukelig pubkey algoritme" #: util/errors.c:94 msgid "file exists" msgstr "fila finnes fra fr av" #: util/errors.c:95 msgid "weak key" msgstr "svak nkkel" #: util/errors.c:96 msgid "invalid argument" msgstr "ugydig argument" #: util/errors.c:97 msgid "bad URI" msgstr "ugyldig URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "ustttet URI" #: util/errors.c:99 msgid "network error" msgstr "nettverksfeil" #: util/errors.c:101 msgid "not encrypted" msgstr "ikke kryptert" #: util/errors.c:102 msgid "not processed" msgstr "ikke behandlet" #: util/errors.c:104 msgid "unusable public key" msgstr "ubrukelig offentlig nkkel" #: util/errors.c:105 msgid "unusable secret key" msgstr "ubrukelig hemmelig nkkel" #: util/errors.c:106 msgid "keyserver error" msgstr "feil med nkkelserver" #: util/errors.c:107 msgid "canceled" msgstr "" #: util/errors.c:108 msgid "no card" msgstr "" #: util/errors.c:109 msgid "no data" msgstr "ingen data" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dette er en feil (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "du fant en feil ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "ja" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "jJ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "nei" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "avslutt" #: util/miscutil.c:443 msgid "qQ" msgstr "aA" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|okay" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancel|cancel" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "ADVARSEL: bruker usikkert minne!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "vennligst se http://www.gnupg.org/documentation/faq.html for mere " "informasjon\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "operasjonen er ikke mulig uten initialisert sikkert minne\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(du kan ha brukt feil program for denne oppgaven)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "ADVARSEL: utrygt eierskap p utvidelsen %s\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "ADVARSEL: utrygge rettigheter p utvidelsen %s\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "ADVARSEL: utrygt eierskap p katalogene p nivene over utvidelsen %s\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "ADVARSEL: utrygge rettigheter p katalogene p nivene over utvidelsen " #~ "%s\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "cipherutvidelse %s ble ikke lastet p grunn av utrygge rettigheter\n" #~ msgid "Command> " #~ msgstr "Kommando> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA-nkkelpar vil ha %u bits.\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|Admin PIN" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA krever bruk av en 160-bit hashalgoritme\n" gnupg-1.4.20/po/en@boldquot.gmo0000644000175000017500000041276712635457220013264 00000000000000(,J4wр'">\n '݁"5-F(t02΂H J T anȄA܄/0N\1܅D#-h0.džI*@+k' ̇*CX_y3Ĉ4̈-/'.@$I n x?4Ɗ:6Us,(8#M&q(&,756m-%ҍ39,0f<GԎ@>]+=ȏ&"8[q :Ȑ#ې $/Eu[Hu-$'89&r5.ϓ5*4!_.0&,5O kv8#•".)XH":(]$E1#;Ǚ8$:_sa/K^zœBۜ4GWi%ٝ.$* *˟!0'I<q+ɠ",/E1u",ʡ"2M i( Ԣ*ߢ 7Kdvƣ 5"(5(^p˥Fݥ $1E%wE\Eo X y8*'c>ʩcZ/NE=,"#ӫ-+%)Q&{'Gg}گ+,"3O 1(װ#+$"P+s" ±?%7]xβ. (9 b}/00`!!.D]{%ɷܷjKo@-*9O0A/r5'غ.3/-cf~!ѽ$,(?h]|-ʿݿ *++V  #)$Mr  6% 27L2r7>1=IY4#=.Y?D@-+n1NIIe55;?WB<H-`"H?<B)_C:.>72v=<@$FeHU$K p-21I$>nK@5:*p7,0014b 2:6'5^.h*L&w1#2>'f*=C0M90:"k&!3> cJ%D,5F|2_ 0 ; F Q \g {  %"(K)k&+57F [ hv. B55S$ (/HK(a" -Ig,'.%2.+a% 3H5] ;<*Lw 3:I&4-C q<A('=/\ 10GXp,H 5A%J/p0.&3? s~ 0$.=S%#- "C'b# +I'e&& &2Yx / ,/"M9pK%$&A$h#D'BSe w1$@$e $!%<DP+/ 603dm/"&(%@%f$ .<Uq2 '"JZ/u+$ &.$U'z,, ># b$,IJO"# <!]*- G$S'x ."+)?#i-%658/n"' ;$0`"%/2 =!Qs: !! (.+W8!400ay26) 9+ e y & G H BH     #  = M g        / = U s        '' O n s .   ( 2 !( Jk,  $5)8b j%%,A2^3&"$13ey!% %3Ys     #& +)5_$~<16J,;#M+y-*"@-c+&*5)6_!&$!32H{~IF#;Ni014#f#++,!32U$*2.5dy*  %3S%o&$ 0#I&m3%*%:`~(-9 6E :|  , 0 /)!Y!7n!*!.!7";8"0t"1";"#%+#Q#)`#3#6#:# 0$;$N$9a$$5$-$"%A% a%%-%%%% %5&$P&u&+&4&%&!'C9'*}'('0'("(.+(-Z(*((+D)Gp)2)/)%*FA**1*#**!+0+(M+v+-+/+,+ ," ,)C,m,, ,,2,1-G-P-#m-#-!-"---(.:G.I.A."/1/ C/M/`/p////// 0"0B0![0}000000#1 )151E1_1s1 1111 112"26:2q252#2 233-3>3*W3!3 33G344 -4N4k4t4-4,445%565 R5s5555555D5F-6Et6D6E6AE7776777=.8>l88$878<%97b9F9999: K:l: :$::#::#;';*>;*i;w;- =:==>>$???@5@R@o@@>@C@>,A#kADA.AIB7MB'BBBBBC,CICfCCCC+C&C#D(BDkDDDD(DEE:E$WE|EE&EE,EF5F!LFnFFFFFF GG#G@GRGdGuGG(G6G. Hi;HBHH/H=+I(iI.I3I!I(J@J[J'cJJJJJJK,K'KKsKK"KK&K'KBL=bLL"L%L&M!/M%QM"wM#M'M MN$N9NVNkNN(N$NNN# O*/O$ZOOO!OOO Pta+a=ab%b5b=b"Obrbb b:bb#bc(c ;c/\cccrdHd-d$e3(e8\e&e5e.e5!f6Wf!f.f0f&g,7gdg'~g gg8g# h$-hRh"Yh:|hhH\i"i(i$iEj1\jjG$klk l>l*Yl8l$lllm#mCmmnnnno*oEoB^oooooo%p)p1pEp\p.xpp*;q fqq*Nr!yr0r3r<s=s+Xs.s8s/s1t"Nt8qt"t2tu u(=u fu u*uu&uu v#v5vRvkvvv vvATw"ww4w5 xAxSxpxxxFx y1(y%ZyyyE?zEzoz ;{ \{}{8 |'F|Jn||ca}/}N}ED~,~"~#~-~+,)X&3ǁZz˂Ԃ+ ,53b 1ԃ(#+7"c+" Մ? %Jpą.(L u})/C0s!҉! +AWp%NJ܊jK@΋-=EʌO0`/5'.3N-!ΐ$ ,1(^|-ؓ (%H*n+Ŕ'$ ,.$['/0ؕ( ,2_ zB1ǖ72K~r>q1=I 4j#=. +O?{D@+A1mNII855;?*BjHH-?"mHٞKcHʟB)VC:Ġ.>.2m=<ޡ@F\HU$B g->=U3JWԤL,Ay6C860o04Ѧ 2'Z:[65ͨ.2R*2F1y#>ϯ>M* =60tM90-"^&!3ʲJoI1t8`A۶>_;     Ƿҷ     $ /$;$`1.+5&H+oM & 3"A.d Bɺ) 560lŻԻ 7!:(\"!&ʼ".,C'p8ӽ' .4%c2+ & C(d% ʿ 5 !Bdm ;<*2O jt:?_u&- ,<:Aw(/G co=7,P}H# %/C0s.&3 FQ hu0$=&%d#-$,.3M##:X3t&#+2>2q  / 8;/t"9K%M$s&$#D%j'q  1$Ot@{+ $<!TvD+/$ T6_0/"0&S(z%%$ -;.R2$<(Py3/ +6bq$&$',,Jw>,# .$F,kIJ+-(Y)./, -8)f&'%69< v$' :"++N)z#-%6<5s;"'(P;k0"%/!2Q!: -1!_(+8!,4N0)26))`E&G"HjB'2!Z#|&C^s  1Jd'.4F(O2x! ,58 Vd j0u5 &.%M1s,>?D&.10DT!d%%$> R ` k y #& )*$I<n!6!,X;#M&P-w'"/-R+&*56N!&$"27jmrIF#6&U|01G#y#++,9F2$*2-.`* -9 P^'~1&*G$Z#&3%8*^%(-,9Z6:,0G/x7*. 7O;01;&b%z)36 :D 95 -?"m -%: `5$7@/%p!C*4'0\.-*>7G2O/%F12#d!( -"/P, ")# >_2y1#/(-X.-:I=A"   + J i q   , +  !.  P q     #    $ > R  f        B \ 5x # ,   0 A *Z !   G  0(Qz-,4'E,m'  #D'FlEDE>A7675=m>$C,HpCFDV9t  $#)M#f**XY|FRD[/K ^j\O67#,"V}k#@{nfK ={<nAy?DK  IzThn9fyucl~!`<R@>h>]WRGIQav'09k%b "swo8( f' Tr4eeFAa" &N&C: 8.HN9hd-4pb7U}$Ha=PJVaA$mc2e=~(-S@yDqUP| Z]&[,%3  [*t#'IP}~Cr)C:UFL'; ]j+zC%mzi940U|pB_Rxp7xn>SA7f+} Yc76^ 2EB~ivdl (,9Oziv{H?k5tR!2W?OtBk:L.\X\/ `i6L! :uEq%*o&?;>h 1 I-mA {HT P'oB0d<1sQ]3*X=~Mdr<)sbMO<?^rZFeQXw8/JbV|Y/.NK-IFD)>`4M_8_g$nx`h38u\V )J_"sl]  5+c\zZ6Q MXr#61D5;o1(tS jG/*vukHvC!YMgWt$:`qleYm@%WNE{B3y-SEysgg.mp0jGww^"Q2!4;UxL[da@5 i^J * xGcb10PLE(5$ J+[  WS=Z_O+Tjgp)l2q#f3}Z;uKV N ,qT|.wG,&o Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Note: signatures using the %s algorithm are rejected Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Unknown weak digest '%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: Your encryption subkey expires soon. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You may want to change its expiration date too. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg 1.4.20 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2015-12-20 08:53+0100 Last-Translator: Automatically generated Language-Team: none Language: en@boldquot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: “Heinrich Heine (Der Dichter) ” aka “%s” using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu “%s”: preference for cipher algorithm %s “%s”: preference for compression algorithm %s “%s”: preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu “%s” Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka “%s” m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu “%s” not a key ID: skipping “%s” was already locally signed by key %s “%s” was already signed by key %s # List of assigned trustvalues, created %s # (Use “gpg --import-ownertrust” to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: “%s” %s/%s signature from: “%s” %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option “%s” %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The ‘sign’ command may be prefixed with an ‘l’ for local signatures (lsign), a ‘t’ for trust signatures (tsign), an ‘nr’ for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer “yes” (or just “y”) if it is okay to generate the sub key.Answer “yes” if it is okay to delete the subkeyAnswer “yes” if it is okay to overwrite the fileAnswer “yes” if you really want to delete this user ID. All certificates are then also lost!Answer “yes” if you want to sign ALL the user IDsAnswer “yes” or “no”Are you sure that you want to sign this key with your key “%s” (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from “%s”CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open ‘%s’: %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from ‘%s’: %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The “<” character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from “%s”Features: File ‘%s’ exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from “%s”Hash: Hint: Select the user IDs to sign Hit return when ready or enter ‘c’ to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter “0”. How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer “yes”.In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try “help”) Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to ‘%s’ NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file ‘%s’ NOTE: old default options file ‘%s’ ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested “for-your-eyes-only” NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for ‘%s’No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command “--edit-key” to generate a subkey for this purpose. Note: Signer's address ‘%s’ does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is ‘%s’ Note: signatures using the %s algorithm are rejected Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter ‘c’ to cancel: Please note that the factory settings of the PINs are PIN = ‘%s’ Admin PIN = ‘%s’ You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command “toggle” first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on “%s” is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer “yes” to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type ‘%s’ Unknown weak digest ‘%s’ Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID “%s” compacted: %s User ID “%s” is expired.User ID “%s” is not self-signed.User ID “%s” is revoked.User ID “%s” is signable. User ID “%s”: %d signature removed User ID “%s”: %d signatures removed User ID “%s”: already clean User ID “%s”: already minimized User ID is no longer validWARNING: WARNING: “%s” is a deprecated command - do not use it WARNING: “%s” is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: Your encryption subkey expires soon. WARNING: ‘%s’ is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option ‘%s’ is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file ‘%s’ was NOT verified! WARNING: nothing exported WARNING: options in ‘%s’ are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory ‘%s’: %s WARNING: unable to remove tempfile (%s) ‘%s’: %s WARNING: unsafe enclosing directory ownership on configuration file ‘%s’ WARNING: unsafe enclosing directory ownership on homedir ‘%s’ WARNING: unsafe enclosing directory permissions on configuration file ‘%s’ WARNING: unsafe enclosing directory permissions on homedir ‘%s’ WARNING: unsafe ownership on configuration file ‘%s’ WARNING: unsafe ownership on homedir ‘%s’ WARNING: unsafe permissions on configuration file ‘%s’ WARNING: unsafe permissions on homedir ‘%s’ WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. “0” means you make no particular claim as to how carefully you verified the key. “1” means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a “persona” verification, where you sign the key of a pseudonymous user. “2” means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. “3” means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what “casual” and “extensive” mean to you when you sign other keys. If you don't know what the right answer is, answer “0”.You are about to revoke these signatures: You are using the ‘%s’ character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use “-r”) You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option “--edit-key”. You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You may want to change its expiration date too. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: “%s” You need a passphrase to unlock the secret key for user: “%.*s” %u-bit %s key, ID %s, created %s%s You selected this USER-ID: “%s” You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: “Key has been compromised” Use this if you have a reason to believe that unauthorized persons got access to your secret key. “Key is superseded” Use this if you have replaced this key with a newer one. “Key is no longer used” Use this if you have retired this key. “User ID is no longer valid” Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on “%s” has expired. Your current signature on “%s” is a local signature. Your decision? Your selection? Your selection? (enter ‘?’ for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]‘%s’ already compressed ‘%s’ is not a JPEG file ‘%s’ is not a regular file - ignored ‘%s’ is not a valid character set ‘%s’ is not a valid long keyID ‘%s’ is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action ‘%s’ not supported with keyserver scheme ‘%s’ add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option ‘%s’ anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in ‘%s’ automatically retrieve keys when verifying signaturesautomatically retrieved ‘%s’ via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring ‘%s’ can't access %s - invalid OpenPGP card? can't access ‘%s’: %s can't close ‘%s’: %s can't connect to ‘%s’: %s can't create ‘%s’: %s can't create backup file ‘%s’: %s can't create directory ‘%s’: %s can't create lock for ‘%s’ can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without “--yes” can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock ‘%s’ can't lock ‘%s’: %s can't open ‘%s’ can't open ‘%s’: %s can't open signed data ‘%s’ can't open the keyringcan't query passphrase in batch mode can't read ‘%s’: %s can't stat ‘%s’: %s can't use a symmetric ESK packet due to the S2K mode can't write ‘%s’: %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option “--output” to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory ‘%s’ created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating ‘%s’: %s error creating keyring ‘%s’: %s error creating passphrase: %s error finding trust record in ‘%s’: %s error getting current key info: %s error getting new PIN: %s error in ‘%s’: %s error in trailer line error reading ‘%s’: %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock “%s”: %s error retrieving CHV status from card error writing ‘%s’: %s error writing key to card: %s error writing keyring ‘%s’: %s error writing public keyring ‘%s’: %s error writing secret keyring ‘%s’: %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as “sensitive”export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of ‘%s’ failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm ‘%s’ invalid import options invalid item ‘%s’ in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key “%s” not found on keyserver key “%s” not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: “%s” %d new signatures key %s: “%s” %d new subkeys key %s: “%s” %d new user IDs key %s: “%s” %d signature cleaned key %s: “%s” %d signatures cleaned key %s: “%s” %d user ID cleaned key %s: “%s” %d user IDs cleaned key %s: “%s” 1 new signature key %s: “%s” 1 new subkey key %s: “%s” 1 new user ID key %s: “%s” not changed key %s: “%s” revocation certificate added key %s: “%s” revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID “%s” key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID “%s” key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key “%s” imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID “%s” key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID “%s” key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource ‘%s’: %s keyring ‘%s’ created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file ‘%s’ created next trustdb check due at %s nono = sign found in group definition ‘%s’ no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme ‘%s’ no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with ‘%s’ trust model no need for a trustdb update with ‘%s’ trust model no photo viewer set no remote program execution supported no revocation keys found for “%s” no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file ‘%s’: %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use “%s%s” instead please wait while key is being generated ... preference ‘%s’ duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in ‘%s’: %s reading from ‘%s’ reading options from ‘%s’ reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming ‘%s’ to ‘%s’ failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for “%s” from %s searching for “%s” from %s server %s searching for names from %s searching for names from %s server %s secret key “%s” not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped “%s”: %s skipped “%s”: duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID “%s” standalone revocation - use “gpg --import” to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of ‘%s’ failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key “%s”! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program ‘%s’: %s unable to execute shell ‘%s’: %s unable to open JPEG file ‘%s’: %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item ‘%s’ unknown default recipient “%s” unknown digest algorithmunknown key protection algorithm unknown option ‘%s’ unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option “--delete-secret-keys” to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID “%s” is already revoked user ID: “%s” using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on ‘%s’... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to ‘%s’ writing secret key stub to ‘%s’ writing secret key to ‘%s’ writing self signature writing to ‘%s’ writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm ‘%s’ while in %s mode you may not use compression algorithm ‘%s’ while in %s mode you may not use digest algorithm ‘%s’ while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardgnupg-1.4.20/po/sk.gmo0000644000175000017500000021413612635457221011414 00000000000000}U'@5-A5o556727O7l777D7.8I7888888 9$9@9Y9$v9&9,99 ::<:N:h:]::/:(&;.O;3~;;;;;<!<4<M<i<"<<<<"<%=&-=!T=%v="=#='= >,>I>^>{>>>(>$>??#0?T?s???&?%?,@4C@x@@@@@'@A/AMA_ArAA"AAA-A(B0EBHvB B C CCAD/CD0sD\DE-E0DE.uEEEE3E4F-HFvF.0G_G hG rG:GGG#G&H&@HgH~HHHGH@H>=I+|I=II"I:JTJgJyJ J/JJKHK-L ?LJL8]L#LL"LLE}MM;YNNIOgOO$OOOOPPPQ)Q?QRQbQtQ%QQQ MR!nR<RR"R, S,8S2eSS S(S S T**TUTgTTTTT"TUU/UEOUoU V &V8GV'VcV/ WEf1g=BgIg4gg#h=Bhh?hDh1%i5WiHi-iHjMjj<jB/k)rkCk.k@lFPl2l1l l2mPmhQn*s&s1 t#>t2bt>tt=u0uMu"Cv&fv3v%vDv,,y5Yyyy_y z z(z 9zEz%^zzzz zz zz {*{2{:{J{R{a{p{ {{{{{{{ |-|.K|%z|2||||}-}B}5W}}};}<}/~E~&[~~~-~(~~10by 2$O=t%؀ 1H`|&&Á K%^$̂ ނ @- n|!D+/'W`~%%$܄  .7f2 8+Ht$&$,4CGZHB.DTrȈ 'B[u'.@(R,{ Ɋ ׊$% (I%h&ҋ!#AV%u% ی #&&J)q< (,Hu;MΎ7O"g-+ҏ*!)&K$rIÐ  ;N#f#ґ #0T3e%% "%H\ e5$4%1*W0Ӕ.ܔ* 6+Ǖ/%#I(\-/Ȗ,"%)Hr ͗#-(VIuϘ .Ibvř#ՙ #7 Klɚܚ6#+ Op-› )EayDFEFDAѝ7K$hF Ԟ$ #1U#nlGGѡТ ! !,!Np!90H!e!!Ť @](s%*¥!!$FZ!wl8/R,F+H dp"#)(C.l.(ʩ!2,H$u'ת%!%G9[4ʫ-%L%r%!ά*<Xr!ĭ$ݭ !BWo8(خ '*7AbP+ ! /;>[.1ɱuq.18(%Ci4pB5'  &52h"%Ƶ$%=\Ce:.8CL*5η +:6Uo<63Rr-yT)~GL ( ?'`$#Ͼ !4EW;o¿+Y&E8>I7;'$"B4e 3+,0X;)  ?@z!&*D1or*H?h*#*@1k=3w%/9Wo$$X3.L{yX:B?8*5.8U[0x!01 ">-a""07 X@c6?N9j*&=!4CVA6:FN)E$1F-'GU+@O 4Z7,?4%.'JB%5T5L (.4W5S,,Cp p  3>(X #3 W es1Q"l+712%Xn$'/ :Y3mV$ /*Zw7/& A2(t('' O]x#8$43h!35 3?s!M*1QlBZjG)0D"Mp>&(%)#O8s/$Bb#A+.;-j..e'eS&Gn)!%($>%c% ($4%Rx//(Fo%r '#&4&3[)8 !2@1s3=;-)i   '1'6^E}502!cAO 6%W }.#,1)P!z.\ ^l#)'!6O `"!)) )5 _  q      ) E$ (j  O  +! 2M $  1 .  1 : # 2 :L  . 4 ,70<h-/5+9!e ,!E=*N0y "9\s() +#O'iC:C%~ $54J#( =^cMgKITK4*%'&.N*}:/+D^@!,%TBVz !@S1K0"R4`Zl(h;<Fuat|WhxtQh5^N =}\-]<AJk8>|' law]syQ_:B/Hq K2pe3g$CvHEk\"gSW"l+1)FLm`F*w>YyDVMws SfPP*B{I ;4yoX[+A0:dXgzx2iar7%.67 NU{;d?@9 }_3?<pbmRcH&9GsCj.ZCrzT&K$^_f.Zfi| x?ve' n1m Luo+ (8Y~{%vOQiUA/#>-~M*qP'N}8Ir)k`M9oVbnp&OJGYX6E:[W6t 5qjIcbJG jR0)7#dn=/$ UO]\L,!Te245 , =#3DEu[cD- ( Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d bad signatures %d keys processed (%d validity counts cleared) %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s CancelCertificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter JPEG filename for photo ID: Enter an optional description; end it with an empty line: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. Is this photo correct (y/N/q)? It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key available at: Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select the reason for the revocation: Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Reason for revocation: %s Repeat passphrase Repeat passphrase: Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Secret key is available. Secret parts of primary key are not available. Signature expired %s Signature expires %s Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu UncompressedUsage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create directory `%s': %s can't disable core dumps: %s can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverexternal program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key export failed: %s key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornever new configuration file `%s' created next trustdb check due at %s nono corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no need for a trustdb check no remote program execution supported no secret key no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to display photo ID! unable to execute external program unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked using cipher %s verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg 1.2.5 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:16+0200 Last-Translator: Michal Majer Language-Team: Slovak Language: sk MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-2 Content-Transfer-Encoding: 8bit Napte identifiktor uvatea (user ID). Ukonite przdnym riadkom: Nedostatok nhodnch bajtov. Prosm, pracujte s operanm systmom, aby ste mu umonili zska viac entropie (je potrebnch %d bajtov). Vyberte si obrzok, ktor bude pouit ako fotografick ID. Tento obrzok mus by vo formte JPEG. Pamtajte, e bude uloen vo Vaom verejnom ki. Ak pouijete vemi vek obrzok, k bude tie vek! Odporan vekos obrzka je okolo 240x288. Podporovan algoritmy: importovan: %lu bez zmien: %lu nov podke: %lu nov id uvateov: %lu neimportovan: %lu bez identifiktorov: %lu Nie je ist, e tento podpis patr vlastnkovi. Tento podpis je pravdepodobne FALON. Ni nenaznauje tomu, e tento podpis patr vlastnkovi ka. nov podpisy: %lu Fingerprint podka: pretan tajn ke: %lu preskoen nov ke: %lu Fingerprint podka: (%d) DSA (len na podpis) (%d) RSA (len na ifrovanie) (%d) RSA (len na podpis) (0) Neodpoviem.%s (1) Vbec som to nekontroloval(a).%s (2) iastone som to overil(a).%s (3) Vemi dkladne som to overil(a).%s nov revokcie kov: %lu Nemono podpsa. importovan tajn ke: %lu (nexeportovaten) Primrny fingerprint ka: tajn ke nezmenen: %lu # Zoznam pridelench hodnt dveryhodnosti, vytvoren %s # (Pouite "gpg --import-ownertrust" na obnovenie) %d zlch podpisov %d kov spracovanch (%d potov platnosti vymazanch) %d podpisov neoverench, pretoe vznikli chyby %d podpisov neoverench, pretoe chba k zistench %d identifiktorov uvatea bez platnho podpisu nm samm %s ... %s ete nepracuje s %s %s zaifrovan dta %s k ifrovanho sedenia bude pouit ifrovanie %s %s je nov %s je bez zmeny %s nedva s %s zmysel! Nie je dovolen pouva %s s %s! %s podpis, hashovac algoritmus %s %s. %s/%s zaifrovan pre: %s %s: adresr neexistuje! %s: chyba pri tan vonho zznamu: %s %s: chyba pri tan zznamu verzie: %s %s: chyba pri aktualizcii zznamu verzie: %s %s: chyba pri zpise adresrovho zznamu: %s %s: chyba pri zpise zznamu verzie: %s %s: pridanie zznamu zlyhalo: %s %s: nepodarilo sa vytvori hashovaciu tabuku: %s %s: nepodarilo sa vytvori zznam verzie: %s%s: vynulovanie zznamu zlyhalo: %s %s: neplatn verzia sboru %d %s: neplatn databze dvery %s: vytvoren neplatn databza dvery %s: sbor kov (keyring) vytvoren %s: nie je sbor databzy dvery %s: preskoen: %s %s: preskoen: verejn k je u obsiahnut v databze %s: preskoen: verejn k je neplatn (disabled) %s: databza dvery vytvoren %s: neznma prpona %s: zznam verzie s slom %lu %s:%d: pouitie parametra "%s" sa neodpora %s:%d: neplatn parameter pre export %s:%d: neplatn parameter pre import (iadny popis) (Pravdepodobne ste chceli vybra %d) (Toto je citliv revokan k) (pokia neurte k jeho fingerprintom) (pravdepodobne ste na tto lohu pouili nesprvny program) --clearsign [meno sboru]--decrypt [meno sboru]--edit-key id uvatea [prkazy]--encrypt [meno sboru]--lsign-key id uvatea--output pre tento prkaz nefunguje --sign --encrypt [meno sboru]--sign --symmetric [meno sboru]--sign [meno sboru]--sign-key id uvatea--store [meno sboru]--symmetric [meno sboru]-k[v][v][v][c] [id uvatea] [sbor s kmi (keyring)]... toto je chyba v programe (%s:%d:%s) 1 zl podpis 1 podpis neoveren, pretoe chba k 1 podpis neoveren, pretoe vznikla chyba zisten 1 identifiktor uvatea bez platnho podpisu nm samm @ (Pouite manulov strnky pre kompletn zoznam vetkch prkazov a monost) @ Prklady: -se -r Bob [sbor] podpsa a zaifrova pre uvatea Bob --clearsign [sbor] vytvori podpis itatenho dokumentu --detach-sign [sbor] vytvori podpis oddelen od dokumentu --list-keys [men] vypsa ke --fingerprint [men] vypsa fingerprinty @ Monosti: @Prkazy: Vynten ASCII textov vstup. Ak chcete generova podk, odpovedzte "ano" (alebo len "a").Odpovedzte "ano", pokia chcete zmaza podkAk si prajete prepsanie sboru, odpovedzte "ano"Pokia skutone chcete zmaza tento identifiktor uvatea, odpovedzte "ano". Vetky certifikty bud tie straten!Odpovedzte "ano" alebo "nie"Ste si ist, e ho chcete stle prida? (a/N) Ste si ist, e ho chcete stle revokova? (a/N) Ste si ist, e stle chcete podpsa tento k? (a/N) Nemem overi podpis: %s Nie je mon editova tento k: %s ZruiCertifikty vedce k finlnemu dveryhodnmu ku: Zmeni (M)eno, (K)omentr, (E)-mail alebo (P)okraova/(U)koni? Zmeni (M)eno, (K)omentr, (E)-mail alebo (U)koni? Zmeni predvoby pre vetky uvatesk ID (alebo len pre oznaen) na aktulny zoznam predvolieb. asov raztka vetkch dotknutch podpisov kov nimi samotnmi bud posunut o jednu sekundu dopredu. Menm dobu platnosti primrneho ka. ifry: Komentr: Kompresia: Vytvori pre tento podpis revokan certifikt? (a/N)Kritick podpisov notcia: Kritick podpisov politika: Zmaza tento dobr podpis? (a/N/u)Zmaza tento neplatn podpis? (a/N/u)Zmaza tento neznmy podpis? (a/N/u)Zmazan %d podpis. Zmazanch %d podpisov. Podpis oddelen od dokumentu. Digest: Chcete, aby platnos Vho podpisu vyprala v rovnakom ase? (A/n) Prajete si ho zmeni na plne exportovaten podpis? (a/N) Prajete si ho zmeni na formt OpenPGP? (a/N) Ste si ist, e stle chcete podpsa tento k? (a/N) Chcete, aby platnos Vho podpisu vyprala v rovnakom ase? (A/n) E-mailov adresa: Meno sbor s fotografiou vo formte JPEG: Ak chcete, napte popis; ukonite przdnym riadkom: Vlote nov nzov sboruVloi heslo Vlote heslo: Vlote meno dritea kaVlote nov heslo (passphrase) pre tento tajn k. Vlote poadovan hodnotu tak, ako je uveden v prkazovom riadku. Je mon vloi dtum vo formte ISO (RRRR-MM-DD), ale nedostanete sprvnu chybov hlku - miesto toho systm sksi interpretova zadan hodnotu ako interval.Vlote dku kaVlote identifiktor adresta, ktormu chcete posla sprvu.Vlote identifiktor uvatea poverenho revokciou: Charakteristiky: Sbor `%s' existuje. Zadajte nzov sboru, ku ktormu sa podpis vzahujeZanite psa svoju sprvu ... Hash: Npoveda: Vyberte id uvatea na podpsanie S akou istotou ste preverili, e k, ktor chcete podpsa patr vyie uvedenej osobe? Pokia nepoznte odpove, zadajte "0". algoritmus IDEA nie je dostupn; optimisticky sa ho poksime nahradi algoritmom %s Ak chcete, mete vloi text popisujc pvod vzniku tohto revokanho ceritifiktu. Prosm, strune. Text kon przdnym riadkom. Pokia aj tak chcete poui tento nedveryhodn k, odpovedzte "ano".Vebecne nemono odpora pouva rovnak k na ifrovanie a podeisovanie Tento algoritmus je vhodn poui len za uritch podmienok. Kontaktujte prosm najprv bezpenostnho pecialistu.Neplatn znak v komentri Neplatn znak ve mene Neplatn prkaz (skste "help") Neplatn heslo; prosm, skste to znovuNeplatn vber. Je tto fotografia sprvna (a/N/u)? Je na Vs, aby ste sem priradili hodnotu; tto hodnota nebude nikdy exportovan tretej strane. Potrebujeme ju k implementcii "pavuiny dvery"; nem to ni spolon s (implicitne vytvorenou) "pavuinou certifiktov".K k dispozcii na: Vytvranie ka bolo zruen. Vytvorenie ka sa nepodarilo: %s K bol skompromitovanK sa u nepouvak je chrnen. K revokovan.K je nahradenK je platn na? (0) k nebol zmenen, take nie je potrebn ho aktualizova. sbor kov (keyring)N pre zmenu nzvu. C pre zmenu komentra. E pre zmenu e-mailovej adresy. O pre pokraovanie generovania ka. Q pre ukonenie generovania ka.POZNMKA: %s nie je pre normlne pouitie! POZNMKA: Tento k nie je chrnen! POZNMKA: vytvorenie podka pre ke v3 nie je v slade s OpenPGP POZNMKA: k bol revokovanPOZNMKA: neexistuje implicitn sbor s monosami `%s' POZNMKA: star implicitn sbor s monosami `%s ignorovan' POZNMKA: odosielate poadoval ("for-your-eyes-only") POZNMKA: jednoduch md S2K (0) je drazne nedoporuovan POZNMKA: do trustdb nemono zapisova Meno neme zana slicou Meno mus by dlh aspo 5 znakov Na vykonanie tejto opercie je potrebn tajn k. mMkKeEPpUuV sbore tajnch kov chba zodpovedajci podpis Pomoc nie je k dispozciiPomoc nie je dostupn pre '%s'Dvod nebol pecifikovanTakto identifiktor uvatea neexistuje. Neexistuje identifiktor uvatea s indexom %d Neplatn e-mailov adresa Poznmka: Tento k bol oznaen ako neplatn (disabled). Poznmka: Skonila platnos tohto ka! Ni nebolo zmaznan. Najskr, prosm, opravte chybu Do poa meno alebo komentr nepte, prosm, e-mailov adresu. Prosm, vlote nov nzov sboru. Ak len stlate RETURN, bude pouit implicitn sbor (ktor je zobrazen v ztvorkch).Prosm, vlote nepovinn komentrProsm, vlote nzov dtovho sboru: Prosm, vlote heslo; toto je tajn veta Prosm, opravte tento mon bezpenostn problm Prosm nezabdajte, e zobrazovan daje o platnosti kov nemusia by sprvne, pokia znovu nespustte program. Prosm, odstrte vber z tajnch kov. Prosm, zopakujte posledn heslo, aby ste si boli ist, o ste napsali.Chyby oznmte, prosm, na adresu . Pripomienky k prekladu . Prosm, vyberte prve jedno id uvatea. Prosm vberte dvod na revokciu: Prosm, vyberte druh ka, ktor chcete: Prosm urte, ako dlho by mal k platit. 0 = doba platnosti ka nie je obmedzen = doba platnosti ka skon za n dn w = doba platnosti ka skon za n tdov m = doba platnosti ka skon za n mesiacov y = doba platnosti ka skon za n rokov Prosm urte, ako dlho by mal podpis platit. 0 = doba platnosti podpisu nie je onmedzen = doba platnosti podpisu skon za n dn w = doba platnosti podpisu skon za n tdov m = doba platnosti podpisu skon za n mesiacov y = doba platnosti podpisu skon za n rokov Prosm, najskr pouite prkaz "toggle" (prepn). Prosm akajte, zskava sa entropia. Robte zatia nejak in prcu aby ste sa nenudili a zvite tm kvalitu entropie. Primrny fingerprint ka:Verejn ke: Verejn k je neplatn (disabled). Meno a priezvisko: Skutone vytvori revokan certifikty? (a/N) Skutone zmaza tento podpis podpsan sebou samm? (a/N)Dvod na revokciu: %s Opakova heslo Opakujte heslo: Poadovan dka ka je %u bitov. Revokan certifikt bol vytvoren. Bol vytvoren revokan certifikt. Presute ho na mdium, ktor mete schova; ak Mallory zska k tomuto certifiktu prstup, me znefunkni V k. Jednoduch je vytlai certifikt a schova ho, pre prpad e by mdium bolo neitaten. Ale hroz nebezpeenstvo: Tlaov systm Vho potaa me uklada dta a sprstupni ich inm! Tajn k je dostupn. Tajn asti primrneho ka nie s dostupn. Platnos podpisu vyprala %s Platnos podpisu vypr %s Podpisov notcia: Podpisov politika: Syntax: gpg [monosti] [sbory] podpsa, overi, ifrova alebo deifrova implicitn opercie zvisia od vstupnch dt Genertor nhodnch sel je len atrapa, aby program mohol bea, v iadnom prpade nie je kryptograficky bezpen! NEPOUVAJTE IADNE DTA VYTVOREN TMTO PROGRAMOM!! Podpis ka "%s" nm samm je podpis vo formte PGP 2.x. Podpis je neplatn. Je rozumn ho odstrni z Vho sboru kov.Uvatesk ID vo formte PGP 2.x nem iadne predvoby Tento prkaz nie je v mdoch %s dovolen. Toto je podpis, ktor viae identifiktor uvatea ku ku. Zvyajne nie je dobr takto podpis odstrni. GnuPG neme tento k naalej pouva. Urobte to len v prpade, ke je tento podpis ka nm samm z nejakho dvodu neplatn a ke je k dispozcii in k.Toto je platn podpis ka; normlne nechcete tento podpis zmaza, pretoe me by dleit pri vytvran dvery ka alebo inho ka ceritifikovanho tmto kom.Tento k patr nm (mme zodpovedajci tajn k) Tento k bol oznaen za neplatn (disabled)Platnos ka vyprala!Platnos ka vypr %s. Tento k nie je chrnen. Tento podpis neme by overen, pretoe nemte zodpovedajci verejn k. Jeho zmazanie by ste mali odloi do asu, ke budete vedie, ktor k bol pouit, pretoe tento podpisovac k me vytvori dveru prostrednctvom inho u certifikovanho ka.Platnos podpisu vypr %s. To by spsobilo nepouitelnos ka v PGP 2.x. Bude revokovan: Aby bolo mon vybudova pavuinu dvery, mus GnuPG vedie, ktorm kom dverujete absoltne - obyajne s to tie ke, pre ktor mte prstup k tajnm kom. Odpovedzte "ano", aby ste nastavili tieto ke ako absoltne dveryhodn Celkovo spracovanch kov: %lu NekomprimovanPouitie: gpg [monosti] [sbory] (-h pre pomoc)Pouitie: gpgv [monosti] [sbory] (-h pre pomoc)Uvatesk ID "%s" je revokovan.ID uvatea "%s" nie je podpsan nm samm.Uvatesk ID "%s" je revokovan.Identifiktor uvatea u neplatVAROVN: pouitie parametra "%s" sa neodpora VAROVANIE: %s prepe %s VAROVANIE: Existuj dva sbory s tajnmi informciami. VAROVANIE: Toto je PGP2 k. Pridanie fotografickho ID me v niektorch verzich PGP vies k odmietnutiu tohoto ka. VAROVANIE: Toto je PGP2 k. Pridanie fotografickho ID me v niektorch verzich PGP vies k odmietnutiu tohto ka. VAROVANIE: Tento k bol revokovan jeho urenm revoktorom/! VAROVANIE: Tento k bol revokovan jeho vlastnkom! VAROVANIE: Tento k nie certifikovan dveryhodnm podpisom! VAROVANIE: Tento k nie je certifikovan dostatone dveryhodnmi podpismi! VAROVANIE: Tento podk bol revokovan jeho vlastnkom! VAROVANIE: Je pouit nedveryhodn k! VAROVANIE: NEdverujeme tomuto ku! VAROVANIE: Zisten slab k - zmete, prosm, znovu heslo. VAROVANIE: sbor `%s' je przdny VAROVANIE: podpis pouivatekho ID vznikol %d sekund v budcnosti VAROVANIE: oznaenie ka ako revokovac u neme by zruen! VAROVANIE: so zaifrovanou sprvou bolo manipulovan! varovanie: neplatn vekos random_seed - sbor nepouit VAROVANIE: sprva bola zaifrovan slabm kom v symetrickej ifre. VAROVANIE: sprva nem ochranu integrity VAROVANIE: Njden viacnsobne podpisy. Skontrolovan bude len prv. VAROVANIE: iadne ID uvatea nebolo oznaen ako primrne. Tento prkaz spsob, e in ID uvatea sa bude povaova primrne. VAROVANIE: ni nebolo vyexportovan VAROVANIE: nastavenie v `%s' ete nie je aktvne VAROVANIE: pravdepodobne nebezpen symetricky ifrovan k sedenia VAROVANIE: program me vytvori sbor core! VAROVANIE: dan adrest (-r) bez pouitia ifrovania s verejnm kom VAROVANIE: konflikt hashu podpisu v sprve VAROVANIE: k me by revokovan (revokan k neexistuje) VAROVANIE: nemono %%-expandova notcie (prli dlh). Pouit neexpandovan. VAROVANIE: nemem vymaza doasn adresr `%s': %s VAROVANIE: nemem vymaza doasn sbor (%s) `%s': %s VAROVANIE: Pouvan pam nie je bezpen! VAROVANIE: pouit genertor nhodnch sel nie je bezpen!! Je potrebn vytvori vea nhodnch bajtov. Poas vytvrania mete vykonva in prcu na potai (psa na klvesnici, pohybova myou, pouva disky); vaka tomu m genertor lepiu ancu zska dostatok entropie. Skr ako podpete id uvatea, mali by ste najprv overi, i k patr osobe, ktorej meno je uveden v identifiktore uvatea. Je vemi uiton, ke ostatn vedia, ako dsledne ste previedli takto overenie. "0" znamen, e neuvdzate, ako dsledne ste pravos ka overili "1" znamen, e verte tomu, e k patr osobe, ktor je uveden, v uvateskom ID, ale nemohli ste alebo jste nepreverili tto skutonos. To je uiton pre "osobn" verifikciu, ke podpisujete ke, ktor pouvaj pseudonym uvatea. "2" znamen, e ste iastone overili pravos ka. Napr. ste overili fingerprint ka a skontrolovali identifiktor uvatea uveden na ki s fotografickm id. "3" Znamen, e ste vykonali vemi dkladn overenie pravosti ka. To me naprklad znamena, e ste overili fingerprint ka jeho vlastnka osobne a alej ste pomocou tako falovatenho dokumentu s fotografiou (naprklad pasu) overili, e meno majitea ka sa zhoduje s menom uvedenm v uvateskom ID a alej ste overili (vmenou elektronickch dopisov), e elektronick adresa uveden v ID uvatea patr majiteovi ka. Prosm nezabdajte, e prklady uveden pre rove 2 a 3 s *len* prklady. Je len na Vaom rozhodnut, o "iaston" a "dkladn" overenie znamen ke budete podpisova ke inm uvateom. Pokia neviete, ak je sprvna odpove, odpovedzte "0".Chystte sa revokova tieto podpisy: Pouvate znakov sadu `%s'. Nemete zmeni dobu platnosti ka verzie 3 Nemete zmaza posledn id uvatea! Nepecifikovali ste identifiktor uvatea (user ID). Mete poui "-r" Nechcete heslo - to je *zl* npad! Nechcete heslo - to *nie je* dobr npad! Dobre, budem pokraova bez hesla. Kedykovek mete heslo zmeni pouitm tohto programu s parametrom "--edit-key". Nemali by ste pridva fotografick ID k PGP2 ku. Nemali by ste pridva fotografick ID k PGP2 ku. Nemete vytvori OpenPGP podpis ka typu PGP 2.x, ke ste v --pgp2 mde. Muste vybra aspo jeden k. Muste vybra aspo jedno id uvatea. Na ochranu Vho tajnho ka muste zada heslo. Zvolili ste tento identifiktor uvatea: "%s" Mali by ste pecifikova dvod certifikcie. V zvislosti na kontexte mte monos si vybra zo zoznamu: "k bol kompromitovan" Toto pouite, pokia si myslte, e k Vmu tajnmu ku zskali prstup neoprvnen osoby. "k je nahraden" Toto pouite, pokia ste tento k nahradili novm kom. "k sa u nepouva" Toto pouite, pokia tento k u nepouvate. "Identifiktor uvatea u nie je platn" Toto pouite, pokia by sa identifiktor uvatea u nemal pouva; normlne sa pouva na oznaenie neplatnej e-mailov adresy. V sasn podpis na "%s" je len loklny. V sasn podpis na "%s" je len loklny. Vae rozhodnutie? V vber? V systm nevie zobrazi dtumy po roku 2038. V kadom prpade bud dtumy korektne spracovvan do roku 2106. [meno sboru][revokcia][podpis ka nm samm][neist] `%s' je u skomprimovan `%s' nie je normlny sbor - ignorovan `%s' nie je platn dlh keyID prida fotografick IDprida revokan kprida identifiktor uvateaASCII hlavika: ASCII kdovanie: %s predpokladm %s ifrovanch dt predpokladm podpsan dta v `%s' nesprvne MPInesprvne URInesprvny certifiktnesprvny knesprvne hesloneplatn verejn kneplatn tajn kneplatn podpisby o trochu tichbinrnebuild_packet zlyhala: %s nemem zavrie `%s': %s nemem sa pripoji k `%s': %s nemem vytvori `%s': %s nemem vytvori adresr `%s': %s nemem vypn vytvranie core sborov: %s nemem vytvori prvoslo s dkou menej ako %d bitov nemem pracova s algoritmom verejnho ka %d nemem pracova s riadkami dlhmi ako %d znakov nemono otvori `%s' nemem otvori `%s': %s nemem otvori podpsan dta '%s' nemem otvori sbor kovnemem ta `%s': %s nemem poui prkaz stat na `%s': %s v mde S2K nemono poui symetrick ESK paket nemem zapisova do `%s': %s zruen uvateom k vo formte PGP 2.x nemono poveri revokciou nemem sa vyvarova slabho ka pre symetrick ifru; operciu som sksil %d krt! zmeni dveryhodnos vlastnka kazmeni heslokontrola vytvorenho podpisu sa nepodarila: %s kontrolujem databzu dvery chyba kontrolnho stuifrovac algoritmus %d%s je neznam alebo je zakzan poloka completes-needed mus by via ako 0 konfliktn prkazy vytvor vstup zakdovan pomocou ASCIIdta neboli uloen; na ich uloenie pouite prepna "--output" dekdovanie z ASCII formtu zlyhalo: %s deifrova dta (implicitne)deifrovanie zlyhalo: %s deifrovanie o.k. zmazanie bloku ka sa nepodarilo: %s nevykona iadne zmenykdovanie do ASCII formtu zlyhalo: %s ifrova dtazaifrovan s %lu heslami zaifrovan jednm heslom zaifrovan neznmym algoritmom %d ifrovanie sprv v mde --pgp2 vyaduje algoritmus IDEA ifrovanie len so symetrickou ifrouchyba pri vytvran `%s': %s chyba pri vytvran sboru kov (keyring)`%s': %s chyba pri vytvran hesla: %s chyba v ptike chyba pri tan `%s': %s chyba pri tan bloku ka: %s chyba pri zpise sboru kov (keyring) `%s': %s chyba pri zpise do sboru verejnch kov `%s': %s chyba pri zpise do sboru tajnch kov `%s': %s exportova keexportova ke na server kovvolanie externho programu zruen kvli nebezpenm prvam sboru nastaven nemem inicializova databzu dvery: %s zlyhalo obnovenie vyrovnvacej pamti kov: %s chyba pri zatvran sboruchyba pri vytvran sboruchyba pri mazan sborusbor existujechyba pri otvran sboruchyba pri tan sboruchyba pri premenovvan sboruchyba pri zpise sboruvyiadan symetrick ifra %s (%d) nevyhovuje predvobm prjemcu veobecn chybavytvori nov pr kovvytvori revokan certifiktgenerujem zastaral 16 bitov kontroln set na ochranu tajnho ka gpg-agent nie je v tomto seden dostupn gpg-agent protokol verzie %d nie je podporovan iImMuUsSimportova ke zo servera kovimportova/zli kevstupn riadok %u je prli dlh alebo na konci chba znak LF vstupn riadok je dlh ako %d znakov neplatn md S2K; mus by 0, 1 alebo 3 neplatn argumentneplatn spsob reprezentcie v ASCIIneplatn hlavika ASCII kdovania: neplatn kdovanie ASCII: riadok je dlh ako %d znakov neplatn hlavika podpisu v itatenom formte nesprvne oznaenie riadku mnusmi: neplatn defaultn predvoby neplatn implicitn rove certifikcie; mus by 0, 1, 2 alebo 3 neplatn parameter pre export neplatn hashovac algoritmus `%s' neplatn parameter pre import neplatn sbor kovneplatn minimlna rove certifikcie; mus by 0, 1, 2 alebo 3 neplatn paketnesprvne hesloneplatn uvatesk predvoby pre ifrovanie neplatn uvatesk predvoby pre kompresiu neplatn uvatesk predvoby pre hashovanie njden neplatn koreov paket v proc_tree() neplatn hodnota nepodaril sa export ka: %s k bol vytvoren %lu sekund v budcnosti (dolo k zmene asu alebo je problm so systmovm asom) k bol vytvoren %lu sekund v budcnosti (dolo k zmene asu alebo je problm so systmovm asom) k nie je oznaen ako nedostatone bezpen - nemem ho poui s falonm RNG! sbor kov (keyring) `%s' vytvoren chyba servera kovnepodarilo sa prija k zo servera: %s aktualizcia servera zlyhala: %s nepodarilo sa njs server: %s nepodarilo posla k na server: %s neplatn dka ka; pouijem %u bitov dka ka zaokrhlen na %u bitov vypsa zoznam kov a id uvateovvypsa zoznam kovvypsa zoznam kov a fingerprintovvypsa zoznam kov a podpisovvypsa zoznam predvolieb (pre expertov)vypsa zoznam predvolieb (podrobne)vypsa zoznam tajnch kovvytvori podpis oddelen od dokumentukonflikt asovho raztkamake_keysig_packet zlyhala: %s nesprvny formt CRC zl formt premennej prostredia GPG_AGENT_INFO nesprvny formt id uvateapoloka marginals-needed mus by via ako 1 presvam podpis ka na sprvne miesto nNvnoren podpisy v itatenom formtu chyba sietenikdy vytvoren nov konfiguran sbor `%s' dalia kontrola databzy dvery %s nieiadny zodpovedajci verejn k: %s nie je nastaven implicitn sbor tajnch kov %s nebol detekovan iadny modul na zskanie entropie nie je nutn kontrolova databzu dvery iadne vzialen vykonvanie programu nie je podporovan neexistuje tajn k chbaj podpsan dta uvate s tmto id neexistujeneboli njden iadne absoltne dveryhodn ke nenjden iadne platn dta vo formte OpenPGP. iadne platn adresy nenjden zapisovaten sbor kov (keyring): %s nenjden zapisovaten sbor verejnch kov (pubring): %s nenjden zapisovaten sbor tajnch kov (secring): %s toto nie je podpis oddelen od dokumentu nezaifrovannespracovannepodporovanpoznmka: sbor random_seed je przdny poznmka: sbor random_seed nie je aktualizovan o.k., my sme anonymn adrest. star kdovanie DEK nie je podporovn podpis starho typu (PGP 2.x) vykonanie opercie nie je mon bez inicializovanej bezpenej pamte sbor s monosami `%s': %s pvodn meno sboru='%.*s' informcie o dveryhodnosti vlastnka ka vymazan heslo nie je zopakovan sprvne; skste to znovuprosm vykonajte --check-trustdb prosm, vlote e-mailov adresu (nepovinn, ale vemi odporan)Viac informci njdete na adrese http://www.gnupg.org/documentation/faqs.html pouite namiesto neho "%s%s" predasn koniec sboru (v CRC) predasn koniec sboru (iadne CRC) problm so zaifrovanm paketom problm s agentom - pouvanie agenta vypnut vyiada potvrdenie pred prepsanmochrann algoritmus %d%s nie je podporovn verejn a tajn k boli vytvoren a podpsan. deifrovanie verejnm kom zlyhalo: %s verejn k neshlas s tajnm! dta zaifrovan verejnm kom: sprvny DEK verejn k nenjdenuUqQukoniukoni toto menuneplatn znak (quoted-printable) v ASCII kdovan - pravdepodobne bol pouit nesprvny MTA tam z `%s' tam monosti z `%s' tam tandardn vstup (stdin) ... dvod na revokciu: odstrni k zo sboru verejnch kovodstrni k zo sboru tajnch kovobmedzenie zdrojovrevokan poznmka: zaokrhlen na %u bitov uloi a ukonivyhada ke na serveri kovtajn k nie je dostupntajn asti ka nie s dostupn vyberte identifiktor uvatea Nvybran hashovac algoritmus je neplatn vybran ifrovac algoritmus je neplatn vybran hashovac algoritmus je neplatn ukza tto pomocpodpsa kpodpsa k loklnepodpsa alebo modifikova kverifikcia podpisu potlaen podpisovanie zlyhalo: %s podpisujem:preskoen: verejn k je u nastaven preskoen: verejn k je u nastaven poda implicitnho adresta preskoen: tajn k je u v databze blok typu %d bol preskoen samostatn revokan certifikt - pouite "gpg --import", ak ho chcete vyui samostatn podpis triedy 0x%02x podpaket typu %d m nastaven kritick bit systmov chyba pri volan externho programu: %s Zmaza tento k zo sboru kov? textov mdzadan URL pre certifikan politiku je neplatn zadan URL pre podpisov politiku je neplatn podpis nebolo mon overi. Prosm, nezabdajte, e sbor s podpisom (.sig alebo .asc) by mal by prvm sborom zadanm na prkazovom riadku. existuje tajn k pre tento verejn k "%s"! me to by spsoben chbajcim podpisom ka nm samm tto sprva nemus pouiten s %s konflikt asovho raztkaprli vea poloiek v bufferi verejnch kov - vypnut chyba v databze dveryzznam dvery %lu nie je poadovanho typu %d zznam dvery %lu, typ po. %d: tanie zlyhalo: %s zznam dvery %lu, typ %d: zpis zlyhal: %s zznam v databze dvery %lu: lseek() sa nepodaril: %s zznam v databze dvery %lu: zpis sa nepodaril (n=%d): %s transakcia s databzou dvery je prli dlh databze dvery: procedra lseek() zlyhala: %s databza dvery: procedra read() (n=%d) zlyhala: %s databza dvery: synchronizcia zlyhala %s nemono nastavi exec-path na %s nemono spusti extern program nemono cta odozvu externho programu: %s nemono nastavi exec-path na %s algoritmus IDEA nemono poui na vetky ke, pre ktor ifrujete. neoakvan dtaifrovac algoritmus nie je implementovanalgoritmus verejnho ka nie je implementovanneznmeneznmy ifrovac algoritmusneznmy kompresn algoritmusneznmy hashovac algoritmusneznmy typ paketuneznmy ochrann algoritmus neznmy algoritmus verejnho kaneznma trieda podpisuneznma verzianekorektn ukonenie externho programu toto URI nie je podporovannepouiten algoritmus s verejnm komnepouiten verejn knepouiten tajn kaktualizova vetky ke zo servera kovaktualizcia zlyhala: %s aktualizcia tajnho ka zlyhala: %s aktualizova databzu dverypouitie: gpg [monosti] poui ako vstupn sborpoui knonick textov mdaby ste ho zmazali, pouite najprv prepna "--delete-secret-key". poui toto id uvatea na podpsanie alebo deifrovanieuvatesk ID "%s" je u revokovan pouit ifra %s s dodatonmi informciamiverifikova podpisslab kvytvoren slab k - skam znovu zvltna vekos ifrovacieho ka pre sedenie (%d) zapisujem podpis ka nm samm (direct signature) zapisujem "key-binding" podpis zapisujem verejn k do `%s' zapisujem tajn k do `%s' zapisujem podpis ka sebou samm zapisujem do '%s' zapisujem na tandardn vstup (stdout) bol pouit nesprvny tajn kaAyYanov mde --pgp2 mete vytvra itaten podpisy len s kmi formtu PGP-2.x v mde --pgp2 mete vytvori len oddelen podpis ka vo formte PGP-2.x v mde --pgp2 mete ifrova len RSA kom s dkou 2048 bitov a menej v mde --pgp2 mete vytvra len oddelen podpisy alebo podpisy itaten ako text v mde --pgp2 nemono sasne ifrova a podpisova k nemono poveri revokciou nm samm njden chyba v programe ... (%s:%d) pouitie %s nie je v mde %s dovolen v mde --pgp2 muste poui sbor (nie rru). |FD|zapsa informcie o stave do tohto FD|MENO|ifrova pre MENO|N|nastavi rove komprimcie N (0 - iadna komprimcia)|[sbor]|vytvori podpis v itatenom dokumente|[sbor]|vytvori podpis|algo [sbory]|vyp hashgnupg-1.4.20/po/el.po0000644000175000017500000062135212635457217011242 00000000000000# Greek Translation of GnuPG. # Copyright (C) 2002 Free Software Foundation, Inc. # Dokianakis Theofanis , 2002. # msgid "" msgstr "" "Project-Id-Version: gnupg-1.1.92\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:21+0200\n" "Last-Translator: Dokianakis Theofanis \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-7\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, fuzzy, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr " %d bits\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr " %d bits\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr " \n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr " `%s'\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr " `%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr " `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr " `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' - \n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr ": random_seed \n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" ": random_seed - \n" "\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr " `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr ": random_seed\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr " `%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr " `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr " `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr ": !!\n" #: cipher/random.c:894 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" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" " , . \n" " , .\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" " bytes. \n" " \n" " ! ( %d bytes)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr " TrustDB: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr " cache : %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr " block : %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "keyserver : %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr " \n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr " :\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr " : %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr " : %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: free : %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "`%s' \n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr " " #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr " " #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr " TrustDB: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr " block : %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr " : %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "%s , %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr " OpenPGP .\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr ": %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr " : " #: g10/armor.c:459 msgid "armor header: " msgstr " : " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr " clearsig\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr " : " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr " \n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr " :" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr " dash escaped : " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr " radix64 %02x \n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr " ( CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr " ( CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr " CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr " CRC: %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr " ( railer)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr " trailer\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr " OpenPGP .\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr " : %d \n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" ", , - " " MTA\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr " " #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr " (batchmode)\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr " %s.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr " ; " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr " " #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr " " #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr " : %s\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr " `%s': %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr " `%s': %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr " `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr " " #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr " \"\" \n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr " \"\" \n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr ": \n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr " fingerprint" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr ": \n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr " : %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr " OpenPGP .\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr " `%s': %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr " ; (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr " ; (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr " ; (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr " %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr " `%s': %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr ": \n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr " :\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr " %s.\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA ( )\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr " .\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr " :\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr " \n" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr " .\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr ": \n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr " `%s': %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr " " #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr " \n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr " " #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr " : " #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr " " #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr " " #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr " fingerprint" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr " " #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr " \n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr " \n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr " `%s'\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr " ( \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr " " #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr " block : %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr " : " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr " . " #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr " `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output \n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr " '%s' : %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr " : %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "( )\n" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr " \"--yes\"\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr " ; " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr " ! - ; " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr " block : %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr " -\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr " \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" " \"--delete-secret-key\" .\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr " : %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr " ESK S2K\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr " : %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' \n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr ": `%s' \n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" " RSA 2048 bit --" "pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr " `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" " IDEA " ".\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" " %s (%d) \n" " \n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" " %s (%d) \n" " \n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" " %s (%d) \n" " \n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr " %s %s.\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s : \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s \n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr " %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" ": \n" " .\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr " \n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr " \n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr " `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" " \n" "\n" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "" " . \n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr " %s \"%s\": %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr " %s \"%s\": %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr " : %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr " \n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr " \n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr " : %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr ": tempfile (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr ": `%s': %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" " -.\n" "\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr " `%s'\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr " " #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr " " #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr " `%s'\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr " %08lX: - \n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr " %08lX: PGP 2.x - \n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "" " %08lX: - \n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr " TrustDB: %s\n" #: g10/export.c:563 #, fuzzy, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr ": %08lX SK checksum\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr ": \n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[]| " #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[]| " #: g10/gpg.c:392 msgid "make a detached signature" msgstr " " #: g10/gpg.c:393 msgid "encrypt data" msgstr " " #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr " " #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr " ()" #: g10/gpg.c:399 msgid "verify a signature" msgstr " " #: g10/gpg.c:401 msgid "list keys" msgstr " " #: g10/gpg.c:403 msgid "list keys and signatures" msgstr " " #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr " " #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr " (fingerprints)" #: g10/gpg.c:406 msgid "list secret keys" msgstr " " #: g10/gpg.c:407 msgid "generate a new key pair" msgstr " " #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr " " #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr " " #: g10/gpg.c:411 msgid "sign a key" msgstr " " #: g10/gpg.c:412 msgid "sign a key locally" msgstr " " #: g10/gpg.c:413 msgid "sign or edit a key" msgstr " " #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr " " #: g10/gpg.c:416 msgid "export keys" msgstr " " #: g10/gpg.c:417 msgid "export keys to a key server" msgstr " " #: g10/gpg.c:418 msgid "import keys from a key server" msgstr " " #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr " " #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr " " #: g10/gpg.c:426 msgid "import/merge keys" msgstr "/ " #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr " " #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "| []| " #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" ":\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr " ascii " #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|| " #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr " (user id) " #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N| N (0 )" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr " " #: g10/gpg.c:486 msgid "use as output file" msgstr " " #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "" #: g10/gpg.c:499 msgid "do not make any changes" msgstr " " #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr " " #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "( man )\n" #: g10/gpg.c:576 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 [] Bob\n" " --clearsign [] \n" " --detach-sign [] \n" " --list-keys [] \n" " --fingerprint [] (fingerprints)\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr " \n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr ": gpg [] [] (-h )" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" " :\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr ":" #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr ": " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr ": " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr ": gpg [] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr " \n" #: g10/gpg.c:1078 #, fuzzy, c-format msgid "no = sign found in group definition `%s'\n" msgstr " = \"%s\"\n" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr ": %s \"%s\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr ": %s \"%s\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr ": %s \"%s\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr ": %s \"%s\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" ": %s \"%s\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" ": %s \"%s\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr ": %s \"%s\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr ": %s \"%s\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr " \"%s\"\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr " \n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr " URL \n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr " " #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr " \n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr ": `%s'\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr ": `%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr " `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr " `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr ": %s !\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr " %s \n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr " %s \n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr " URI \n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: \n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr " \n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: \n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr " \n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: \n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr " \n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: \n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr " \n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr " %s \n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr " URL \n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr " %s \n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr " %s \n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: \n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr " \n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr " exec-path %s\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: \n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr ": core!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr ": %s %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr " %s %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr " %s %s!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr " gpg-agent \n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr " `%s'\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" " --pgp2 \n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "" " --pgp2 " "\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr " ( pipes) --pgp2.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" " --pgp2 . IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr " \n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr " \n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr " \n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "" " \n" " \n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth 1 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr " default-cert-level 0, 1, 2, 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr " min-cert-level 0, 1, 2, 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr ": S2K (0) \n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr " S2K; 0, 1 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr " \n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr " \n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr " \n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr " \n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr " %s %s\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr " \"%s\" %s\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "" " \"%s\" %s\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "" " \"%s\" %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr " TrustDB: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" ": (-r) \n" " \n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [ ]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [ ]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr " : %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [ ]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [ ]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr " %s %s.\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [ ]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [ ]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [ ]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr " %s %s.\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [ ]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [ ]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [ ]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key user-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key user-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key user-id []" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [user-id] []" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "keyserver : %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "keyserver : %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr " : %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "keyserver : %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "keyserver : %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr " : %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr " : %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr " hash `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[ ]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr " ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr " URL \n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr " URL \n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr " URL \n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr " pk cache - \n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[User id ]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr " %08lX: - \n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" " %08lX --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr " %08lX - \n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr " %08lX %08lX\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr " " #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr " " #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr " (timestamp) " #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD| FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr ": gpgv [] [] (-h )" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" ": gpg [] []\n" " \n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" " . \n" " . -" ",\n" " ( ) -." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" " -, GnuPG " "\n" " - \n" " . \"yes\" () " "\n" " \n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" " , \"yes" "\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" " user ID ." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" ", \n" " . \n" " . ." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr " " #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr " \"yes\"() \"no\"()" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" " .\n" " ISO (YYYY-MM-DD) \n" " - \n" " ." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr " " #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr " email ()" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr " " #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N .\n" "C .\n" "E email.\n" "O .\n" "Q ." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" " \"yes\" ( \"y\") " "." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" " user ID , \n" " user ID. " " , .\n" "\n" "\"0\" " ".\n" "\"1\" " "\n" " , . \n" " \"\" .\n" "\n" "\"2\" . " "\n" " \n" " user ID photo ID.\n" "\n" "\"3\" . , " "\n" " \n" " \"\" photo ID " "\n" " ." ".\n" " , , .\n" "\n" " \"\" 2 3 \n" "** . \n" " \"\" \"\" " ".\n" "\n" " , \"0\"." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr " \"yes\" user ID" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" " \"yes\" \n" " user ID. !" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr " \"yes\" " #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" " . \n" " \n" " \n" " ." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" " \n" ". , \n" " \n" " ." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" " . \n" " ." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" " user ID . \n" " . \n" " GnuPG \n" " . - \n" " ." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" " user ID ( )\n" " . \n" "- 1 .\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr " ߷ \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr " , ." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr " " #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr " \"yes\" " #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" " . RETURN\n" " ' ( ) ." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" " . \n" ", :\n" " \" \"\n" " \n" " .\n" " \" \"\n" " .\n" " \" \"\n" " .\n" " \" user ID \"\n" " user ID \n" " . email.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" " , \n" " .\n" " . \n" " .\n" #: g10/helptext.c:285 msgid "No help available" msgstr " " #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr " `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr " " #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr " " #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr " !\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr " " #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr " %d\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "%lu \n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr " : %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " : %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " user ID: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " : %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " : %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " user ID: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " : %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " : %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " : %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " : %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " : %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " : %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " : %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " : %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " : %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr " user ID:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "%s , %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr " %08lX: user ID\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr " `%s': %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr " %08lX: HKP\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr " %08lX: - user ID '%s'\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr " %08lX: user ID\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr " \n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr " %08lX: : %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr " %08lX: - \n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr " : %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr " `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr " `%s': %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr " %08lX: \"%s\" \n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr " %08lX: \n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr " %08lX: : %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr " %08lX: : %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr " %08lX: \"%s\" 1 user ID\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr " %08lX: \"%s\" %d user ID\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr " %08lX: \"%s\" 1 \n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr " %08lX: \"%s\" %d \n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr " %08lX: \"%s\" 1 \n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr " %08lX: \"%s\" %d \n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr " %08lX: \"%s\" %d \n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr " %08lX: \"%s\" %d \n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr " %08lX: \"%s\" %d user ID\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr " %08lX: \"%s\" %d user ID\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr " %08lX: \"%s\" \n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr " `%s' : %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr " `%s'\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr " %08lX: . %d - \n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr " : %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr " %08lX: \n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr " %08lX: \n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr " %08lX: : %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" " %08lX: - " "\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr " %08lX: : %s - \n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr " %08lX: \"%s\" \n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr " %08lX: user ID \n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" " %08lX: user id " "\"%s\"\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr " %08lX: - user id \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr " %08lX: \n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr " %08lX: \n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr " %08lX: \n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr " %08lX: \n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr " %08lX: \n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr " %08lX: \n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr " %08lX: \n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr " %08lX: \n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr " %08lX: user ID '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr " %08lX: \n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr " %08lX: ( %02x) - \n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "" " %08lX: - \n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr " %08lX: : %s - \n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "" " %08lX: - \n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr " %08lX: (0x%02x) - \n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr " %08lX: user ID - \n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" ": %08lX : " "%08lX\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" ": %08lX : %08lX\n" " .\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr " %08lX: \"%s\" \n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr " %08lX: \n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr " !\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr ": \n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr ": \n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr " `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr " `%s' \n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr " `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr " cache : %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[-]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 \n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d \n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 \n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d \n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 \n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d \n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 user ID -\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d user ID -\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" " \n" ", ( \n" " passports fingerprints ...);\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = \n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = \n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr " user ID \"%s\" ." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr " ; (y/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " .\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr " user ID \"%s\" ." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr ": user ID \"%s\" -." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr ": user ID \"%s\" -." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr " ; " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" " - \"%s\"\n" " PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr " OpenPGP -; (y/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" " \"%s\"\n" " .\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" " ; (y/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" " \"%s\"\n" " .\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr " ; (y/N) " #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" %08lX\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr " ; (y/N) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr " %08lX\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr " !" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr " %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr " ; (Y/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" " OpenPGP PGP 2.x " " --pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr " PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" " \n" " ; " "\"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) .%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) .%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) .%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) .%s\n" #: g10/keyedit.c:926 #, fuzzy msgid "Your selection? (enter `?' for more information): " msgstr " ; ( ? ): " #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" " \n" " : \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" " -.\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" ": -.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" ": -.\n" "\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" " -.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" " -.\n" "\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" " .\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" " .\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" " .\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr " ; " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr " : %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr " .\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr " .\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr " .\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr " .\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr " :%s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" " .\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr " . " #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr " - ** !\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr " ; " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr " \n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr " " #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr " fingerprint" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr " user ID" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr " user ID N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr " user ID N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr " " #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr " " #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr ": user ID \n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr " user ID" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr " photo ID" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr " user ID" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr " " #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr " " #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "" " user ID; " #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr " v3 \n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr " user ID " #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr " " #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr " ()" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr " ()" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "" " user ID; " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr " URI \n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "" " user ID; " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr " " #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr " " #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr " user ID; " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr " user ID" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr " " #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr " " #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr " " #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr " photo ID" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr " `%s': %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr " .\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr " .\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr " \"toggle\" .\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr " ." #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr " user ID; " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr ": user ID \n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr " " #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr " %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr " user ID.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr " user ID!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr " user ID; " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr " user ID; " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr " user ID; " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr " .\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr " `%s': %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr " `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr " .\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr " ; " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr " ; " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr " user ID; " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr " user ID; " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr " ; " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr " ; " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr " ; " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr " " #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" " user ID; " #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr " ;" #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr " ; " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr " ; " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr " : %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr " : %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr " .\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr ": " #: g10/keyedit.c:2398 msgid "Features: " msgstr ": " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr ": " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr " user ID PGP 2.x.\n" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr " %s " #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr " %s " #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " ()" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr " %s: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "[]" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " : %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " : %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr " " #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" " \n" " .\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "[]" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" ": ID . \n" " ID .\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr " v3 \n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" ": PGP2. photo ID\n" " PGP .\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr " ; (y/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr " photo ID PGP2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr " ; (y/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr " ; (y/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr " ; (y/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr " -; (y/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr " %d .\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr " %d .\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr " .\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr " " #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr " user ID \"%s\" ." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr " user ID \"%s\" ." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr " user ID \"%s\" ." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr " user ID \"%s\" \n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr " user ID \"%s\" \n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" ": PGP 2.x. \n" " PGP\n" " .\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" " PGP2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr " user ID : " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" " PGP 2.x, \n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" " \n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "" ": !\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" ": " "!\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" " ; (y/" "N): " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr " .\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr " .\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr " .\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr " .\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr " v3 \n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr " \n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "" ": %08lX ' " "\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr " user ID.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr " v3 - user id \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr " ; (y/N) " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr " ; (y/N) " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr " : " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr " (y/N); " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr " user ID %d\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr " user ID %d\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr " user ID %d\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "user ID: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " %08lX %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (-)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr " %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr " ; " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr " ; (y/N)" #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " %08lX %s%s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr " user ID:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (-)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " %08lX %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr " :\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr " ; (y/N)" #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr " \n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr " user ID \"%s\" \n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" ": user ID %d \n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr " user ID \"%s\" \n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr " user ID \"%s\" \n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr " %s photo ID %ld 0x%08lX (uid %d)\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr " %c%lu \n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr " `%c' \n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr " `%c' \n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr " `%c' \n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr " \"\" \n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr " \n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr " -\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr " \"\" \n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr " , %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr " %u bits\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr " " #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal ( )\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr " :\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA ElGamal ()\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA ElGamal ()\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA ( )\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA ( )\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal ( )\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA ( )\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA ( )\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA ( )\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr " ; (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr " ; (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr " %u bits\n" #: g10/keygen.c:1722 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" " .\n" " 0 = \n" " = n \n" " w = n \n" " m = n \n" " y = n \n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr " ; (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr " ; (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr " \n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr " %s \n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr " %s \n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr " %s %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr " %s.\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" " 2038.\n" ", 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr " (y/n); " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" " User-ID . " "\n" " user-id , Email :\n" " \"Nikolaoy Nikos (toy Ioanni) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr " : " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr " \n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr " \n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr " 5 \n" #: g10/keygen.c:1856 msgid "Email address: " msgstr " Email: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr " Email\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr ": " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr " \n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr " `%s' .\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" " USER-ID:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr " email \n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr " (N), (C), (E)mail (Q); " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr " (N), (C), (E)mail (O)/(Q); " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr ", \n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" " .\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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:2034 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 "" " bytes. \n" " (, , \n" " ) . \n" " .\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr " .\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr " `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr " `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr " `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr " : %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr " : %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr " `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr " `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr " .\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" " " ".\n" " \"--edit-key\" \n" " .\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr " : %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" " %lu ( \n" " )\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" " %lu ( \n" " )\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" ": v3 \n" " OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr " ; " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr " block : %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr " `%s': %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr ": %08lX %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr " " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr " : " #: g10/keylist.c:267 msgid "Signature policy: " msgstr " : " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr " : " #: g10/keylist.c:361 msgid "Signature notation: " msgstr " : " #: g10/keylist.c:471 msgid "Keyring" msgstr "" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr " :" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " :" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " :" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " :" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr " : %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr ": 2 .\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s \n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s \n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr " \"\" \n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr " `%s'\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu (%lu )\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu (%lu )\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: \n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr " URL \n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" ": `%s' \n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr " \n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr " '%s' : %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr " '%s' : %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr " %08lX %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr " %08lX %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr " \"%s\" HKP %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr " \"%s\" HKP %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr " \"%s\" HKP %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" " %08lX %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr " \"%s\" HKP %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr " \"%s\" HKP %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr " \n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "keyserver : %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr " " #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr " " #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr ": tempfile (%s) `%s': %s\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr " %08lX %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr " %08lX %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr ": tempfile (%s) `%s': %s\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr ": tempfile (%s) `%s': %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr " (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s \n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr " %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr " %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr " : DEK\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr " %u-bit %s , ID %08lX, %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr " %s key, ID %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr " : %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr " %lu \n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr " 1 \n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr " %s \n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" " IDEA , \n" "%s \n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr " OK\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr ": \n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr ": !\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr " : %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr ": \"----\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr " ='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr " - \"gpg --import\" \n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr " \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr " \n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr " \n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr " %s.\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr " %.*s %s ID %08lX\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr " : " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr " \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr " \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr " \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " \"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr " %s.\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr " %s.\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s , %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "" #: g10/mainproc.c:1947 msgid "textmode" msgstr "-" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr " : %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr " \n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" ": . .\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr " 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr " (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr " (root) proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr " core dump: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr " : %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "trustdb: read (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr " %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" " %s (%d) \n" " \n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr " " #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "%s , %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" " %s (%d) \n" " \n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = \n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr " gpg-agent \n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr ": \"%s\" \n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr " \"%s%s\" \n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr ": \"%s\" \n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr " %s\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr " `%s'\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr " `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr " " #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr " `%s' . " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr " (y/N); " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: \n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr " " #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr " stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr " `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr " `%s'\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" ": `%s' \n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: \n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr " %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr ": \n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr " %d bit\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr " gpg-agent \n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr " GPG_AGENT_INFO\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr " %d gpg-agent\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr " `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr " agent - agent\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " ( , ID %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" " " ":\n" "\"%.*s\"\n" "%u-bit %s , ID %08lX, %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr " \n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr " \n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr " \n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr " \n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr " : " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" " \n" " : \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bit %s , ID %08lX, %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr " : " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" " photo ID. \n" "JPEG. . \n" " !\n" " 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr " photo ID: " #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr " : %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr " ; (y/N) " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\" JPEG \n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr " (y/N/q); " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr " photo ID!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr " " #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr " " #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr " " #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr " " #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr " User ID " #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr " :" #: g10/pkclist.c:92 msgid "revocation comment: " msgstr " :" #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" " :\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr " \n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = \n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = \n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = \n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = \n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " s = \n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " q = \n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr " ; " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr " ; " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr " :\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lX: .\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lX: .\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr " \n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr " \n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" " \n" " user ID. ** , \n" " \n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr " ; " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr ": !\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" ": ( " ")\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "" ": !\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr ": !\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " .\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "" ": !\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr ": .\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr ": !\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" ": " "!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " .\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr ": !\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " .\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" ": \n" " !\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " .\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: : %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: : \n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr " user ID. ( \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" " user ID. : " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr " user ID.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" ": \n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr " .\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr ": \n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr " `%s'\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: : .\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr " \n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr " . \"--output\"\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr " `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr " .\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr " : " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr " stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr " \n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr " `%s'\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr " %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr ", .\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr " DEK \n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr " %d%s \n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr ": %d \n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr ": %08lX %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr ": " #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet : %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr " %08lX: user ID\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr " :\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "( )\n" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr " ; " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr " ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet : %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr " .\n" #: g10/revoke.c:411 #, fuzzy, c-format msgid "no revocation keys found for \"%s\"\n" msgstr " `%s'\n" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr " `%s' : %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr " : %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr " !\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr " ; " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr " \n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr ": !\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" " .\n" "\n" " \n" "Mallory \n" " . \n" " , . \n" " \n" " !\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr " :\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "( %d )\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr " ޷ :\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr " : %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "( )\n" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr " ; " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr " \n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr " %d%s\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr " %d%s\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr " , " #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr ": - \n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" " 16-bit checksum \n" " \n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr " - \n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" " , " " %d !\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr ": \n" #: g10/sig-check.c:99 #, fuzzy, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" ": %08lX ' " "\n" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" ": %08lX ' " "\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "" " %08lX %lu \n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "" " %08lX %lu \n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" " %lu ( \n" " )\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" " %lu ( \n" " )\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr ": %08lX %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s , %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr " %08lX bit\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr " %08lX: \n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr " %08lX: \n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" ": %%- ( ).\n" " .\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" ": %%- url ( ).\n" " .\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" ": %%- url ( ).\n" " .\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr " : %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s : \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" " - PGP 2.x \n" "--pgp2 \n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" " %s (%d) \n" " \n" #: g10/sign.c:960 msgid "signing:" msgstr ":" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" " PGP 2.x --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s \n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" " - " " RNG!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr " `%s': \n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr " `%s': %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr ": \n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" " `%s': PGP ElGamal " " !\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr " trust %lu, %d: write : %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# , %s\n" "# ( \"gpg --import-ownertrust\" )\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr " `%s': %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr " \n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr ": \n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr " " #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr " : %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr " : %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sync : %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr " `%s': %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr " `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: write (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr " trustdb\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr " `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: !\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: : %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: trustdb\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trustdb\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr ": trustdb \n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: trustdb\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: hashtable: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: : %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: : %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: : %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: trustdb \n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: free : %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: dir : %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: : %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: : %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: trustdb\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr " %d \n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr " %d \n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' keyID\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr " %08lX: \n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr " %08lX trustdb\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" " %08lX: - " "\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr " .\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr " trust %lu, req %d: read : %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr " trust %lu %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "[]" #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "[]" #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 #, fuzzy msgid "never" msgstr " " #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr " trustdb\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr " trustdb %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr " trustdb\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr " trustdb\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr " %08lX : %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr " --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr " trustdb\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d (%d )\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr " \n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "" " %08lX\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr " trust %lu, %d: write : %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" " .\n" " (.sig or .asc)\n" " .\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr " %u LF\n" #: util/errors.c:53 msgid "general error" msgstr " " #: util/errors.c:54 msgid "unknown packet type" msgstr " " #: util/errors.c:55 msgid "unknown version" msgstr " " #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr " " #: util/errors.c:57 msgid "unknown digest algorithm" msgstr " " #: util/errors.c:58 msgid "bad public key" msgstr " " #: util/errors.c:59 msgid "bad secret key" msgstr " " #: util/errors.c:60 msgid "bad signature" msgstr " " #: util/errors.c:61 msgid "checksum error" msgstr " checksum" #: util/errors.c:62 msgid "bad passphrase" msgstr " " #: util/errors.c:63 msgid "public key not found" msgstr " " #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr " " #: util/errors.c:65 msgid "can't open the keyring" msgstr " " #: util/errors.c:66 msgid "invalid packet" msgstr " " #: util/errors.c:67 msgid "invalid armor" msgstr " " #: util/errors.c:68 msgid "no such user id" msgstr " (user id)" #: util/errors.c:69 msgid "secret key not available" msgstr " " #: util/errors.c:70 msgid "wrong secret key used" msgstr " " #: util/errors.c:71 msgid "not supported" msgstr " " #: util/errors.c:72 msgid "bad key" msgstr " " #: util/errors.c:73 msgid "file read error" msgstr " " #: util/errors.c:74 msgid "file write error" msgstr " " #: util/errors.c:75 msgid "unknown compress algorithm" msgstr " " #: util/errors.c:76 msgid "file open error" msgstr " " #: util/errors.c:77 msgid "file create error" msgstr " " #: util/errors.c:78 msgid "invalid passphrase" msgstr " " #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr " " #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr " " #: util/errors.c:81 msgid "unknown signature class" msgstr " " #: util/errors.c:82 msgid "trust database error" msgstr " " #: util/errors.c:83 msgid "bad MPI" msgstr " MPI" #: util/errors.c:84 msgid "resource limit" msgstr " " #: util/errors.c:85 msgid "invalid keyring" msgstr " " #: util/errors.c:86 msgid "bad certificate" msgstr " " #: util/errors.c:87 msgid "malformed user id" msgstr " (user id)" #: util/errors.c:88 msgid "file close error" msgstr " " #: util/errors.c:89 msgid "file rename error" msgstr " " #: util/errors.c:90 msgid "file delete error" msgstr " " #: util/errors.c:91 msgid "unexpected data" msgstr " " #: util/errors.c:92 msgid "timestamp conflict" msgstr " (timestamp)" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr " " #: util/errors.c:94 msgid "file exists" msgstr " " #: util/errors.c:95 msgid "weak key" msgstr " " #: util/errors.c:96 msgid "invalid argument" msgstr " " #: util/errors.c:97 msgid "bad URI" msgstr " URI" #: util/errors.c:98 msgid "unsupported URI" msgstr " URI" #: util/errors.c:99 msgid "network error" msgstr " " #: util/errors.c:101 msgid "not encrypted" msgstr " " #: util/errors.c:102 msgid "not processed" msgstr " " #: util/errors.c:104 msgid "unusable public key" msgstr " " #: util/errors.c:105 msgid "unusable secret key" msgstr " " #: util/errors.c:106 msgid "keyserver error" msgstr " " #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr " " #: util/errors.c:109 #, fuzzy msgid "no data" msgstr " \n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr " bug ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "|" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "|" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr ": !\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" " http://www.gnupg.org/documentation/faqs.html " "\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr " \n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "( )\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr ": %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr ": %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ ": %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ ": %s \"%s\"\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ " \"%s\" \n" #~ " \n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr " IDEA \n" #~ msgid "Command> " #~ msgstr "> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr " DSA 1024 bits.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ " trustdb - \"gpg --fix-trustdb\".\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ " v3 (PGP 2.x )\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ " v3 (PGP 2.x " #~ ")\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr " URL v3 (PGP 2.x )\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ " URL v3 (PGP 2.x " #~ ")\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr " DSA 160 bit hash\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ " http://www.gnupg.org/why-not-idea.html " #~ "\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ " " #~ " '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr " '@' \n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr " '@' \n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr " control\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr ": \n" #~ msgid "not human readable" #~ msgstr " " #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr " " #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr " " #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "" #~ " %08lX: (0x%02x) - \n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr " %s \"%s\": %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr " user ID \"%s\" \n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr " : %s\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr " (%d)\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr " pid agent\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr " FD agent\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr " FD agent\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr " gpg-agent\n" #~ msgid "passphrase too long\n" #~ msgstr " \n" #~ msgid "invalid response from agent\n" #~ msgstr " agent\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr " agent: agent 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr " N" #~ msgid "list signatures" #~ msgstr " " #~ msgid "sign the key" #~ msgstr " " #~ msgid "add a secondary key" #~ msgstr " " #~ msgid "delete signatures" #~ msgstr " " #~ msgid "change the expire date" #~ msgstr " " #~ msgid "set preference list" #~ msgstr " " #~ msgid "updated preferences" #~ msgstr " " #~ msgid "No secondary key with index %d\n" #~ msgstr " %d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key user-id" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key user-id" #, fuzzy #~ msgid "make a trust signature" #~ msgstr " " #~ msgid "sign the key non-revocably" #~ msgstr " -" #~ msgid "sign the key locally and non-revocably" #~ msgstr " -" #~ msgid "q" #~ msgstr "q" #~ msgid "help" #~ msgstr "help" #~ msgid "list" #~ msgstr "list" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "debug" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr " " #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "save" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "key" #~ msgid "check" #~ msgstr "check" #~ msgid "c" #~ msgstr "c" #~ msgid "sign" #~ msgstr "sign" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "sign" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "primary" #~ msgstr "" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #, fuzzy #~ msgid "keyserver" #~ msgstr " " #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "" #~ " `%s' \n" #~ 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 keypair.\n" #~ " 768 bits\n" #~ " 1024 bits\n" #~ " 2048 bits\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr " DSA 512 1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "" #~ " , 1024 " #~ "RSA.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "" #~ " , 768 " #~ ".\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "" #~ " , %d " #~ ".\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ " 2048 \n" #~ " !\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr " ; " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ ", ' \n" #~ " !\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr " !\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ " . " #~ " !\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr " `%s'\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr ", (batchmode)\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr " '%s' : %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr " `%s': %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr " : %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr " %08lX: !\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr " %08lX: !\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: \n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: \n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA ( )\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA ( )\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA ( )\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA ( )\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA ( )\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: : %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: : \n" #~ msgid "can't open %s: %s\n" #~ msgstr " %s: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = \n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = \n" #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ " %08lX %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: : %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: (lock)\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: (lock)\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: : %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: : %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ " , \"yes\"." #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr " \"%s\": %s\n" #~ msgid "can't open file: %s\n" #~ msgstr " : %s\n" #~ msgid "error: missing colon\n" #~ msgstr ": \n" #~ msgid "error: no ownertrust value\n" #~ msgstr ": \n" #~ msgid " (main key ID %08lX)" #~ msgstr " ( , ID %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! : %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- \n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? : %s\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr " [: %s]" #~ msgid " [expires: %s]" #~ msgstr " [: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "[]" #~ msgid "can't create %s: %s\n" #~ msgstr " %s: %s\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ ": `%s' OpenPGP. " #~ " !\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[]| " #~ msgid "store only" #~ msgstr " " #~ msgid "|[files]|decrypt files" #~ msgstr "|[]| " #~ msgid "sign a key non-revocably" #~ msgstr " -" #~ msgid "sign a key locally and non-revocably" #~ msgstr " -" #~ msgid "list only the sequence of packets" #~ msgstr " " #~ msgid "export the ownertrust values" #~ msgstr " " #~ msgid "unattended trust database update" #~ msgstr " " #~ msgid "fix a corrupted trust database" #~ msgstr " " #~ msgid "De-Armor a file or stdin" #~ msgstr "- stdin" #~ msgid "En-Armor a file or stdin" #~ msgstr "- stdin" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|| " #~ msgid "use the default key as default recipient" #~ msgstr " " #~ msgid "don't use the terminal at all" #~ msgstr " " #~ msgid "force v3 signatures" #~ msgstr " v3 " #~ msgid "do not force v3 signatures" #~ msgstr " v3 " #~ msgid "force v4 key signatures" #~ msgstr " v4 " #~ msgid "do not force v4 key signatures" #~ msgstr " v4 " #~ msgid "always use a MDC for encryption" #~ msgstr " MDC " #~ msgid "never use a MDC for encryption" #~ msgstr " MDC " #~ msgid "use the gpg-agent" #~ msgstr " gpg-agent" #~ msgid "batch mode: never ask" #~ msgstr " batch: " #~ msgid "assume yes on most questions" #~ msgstr " " #~ msgid "assume no on most questions" #~ msgstr " " #~ msgid "add this keyring to the list of keyrings" #~ msgstr " " #~ msgid "add this secret keyring to the list" #~ msgstr " " #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|| " #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|| " #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|| " #~ msgid "|[file]|write status info to file" #~ msgstr "|[]| " #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|KEYID| " #~ msgid "|FILE|load extension module FILE" #~ msgstr "|| " #~ msgid "emulate the mode described in RFC1991" #~ msgstr " RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "" #~ " , OPENPGP" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ " ,, PGP 2.x " #~ "" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N| N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "" #~ "|ONOMA| " #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|| " #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|| " #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|| " #~ msgid "|N|use compress algorithm N" #~ msgstr "|N| N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr " keyid " #~ msgid "Show Photo IDs" #~ msgstr " Photo ID" #~ msgid "Don't show Photo IDs" #~ msgstr " Photo ID" #~ msgid "Set command line to view Photo IDs" #~ msgstr " Photo ID" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "" #~ " `%s' \n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr " %d..%d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: \n" #~ " \n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr " %c%lu \n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr " %08lX: rfc2440 - \n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ ": Elgamal - " #~ "\n" #~ " \n" #~ msgid " (default)" #~ msgstr " ()" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX : %s : %s" #~ msgid "Policy: " #~ msgstr ": " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr " : %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr " `%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr " `%s' (=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr " `%s': =%u\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr " keyserver --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr " : %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ " %08lX: PGP ElGamal \n" #~ " !\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ " %08lX %lu ( \n" #~ " )\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ " %08lX %lu ( \n" #~ " )\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr " %08lX .\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr " Elgamal %08lX %08lX \n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr " %08lX Elgamal %08lX \n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ " %d =%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ " .\n" #~ "\n" #~ "DSA ( DSS) \n" #~ " . \n" #~ " DSA \n" #~ " ElGamal.\n" #~ "\n" #~ "ElGamal -\n" #~ ". OpenPGP \"\" :\n" #~ " - --, \n" #~ " , " #~ "\n" #~ " " #~ ".\n" #~ " , OpenPGP \n" #~ " ().\n" #~ "\n" #~ " () \n" #~ ". -\n" #~ " ElGamal ." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ " RFC2440 \n" #~ " \n" #~ " ." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu (%lu )\n" #~ msgid "key incomplete\n" #~ msgstr " \n" #~ msgid "key %08lX incomplete\n" #~ msgstr " %08lX \n" gnupg-1.4.20/po/uk.gmo0000644000175000017500000056756312635457221011435 00000000000000(Pl-l?llmmnnno"o?o\oyo2o7o2p#4pDXp.pIp7q'Nqvq qqqqqr#r@rYrvr+r&r#r(r(sAsZszs(ssss$t9tOt&ftt,ttt! u+uAu\uwu uu uuuuvv&v@v]v*zv"v]vB&wiw/|w=w(w.x3Bx!vx(xxx'x y*y=yWysyy,y'yyz")zLzQzlzBz=z {"({%K{&q{!{%{"{#|''| O|p||||||(|$&}K}`}#t}}$}}}!~<~Y~ x~~&~%~ ~, 47lG^s'.A T'u"ׁ-(40]2H   !.LhA/ބ0\?1΅D-(0V.I*++'W χ93P4-'.щ$ . 8?F4:3Oi,~(8ԋ# &1(X&׌76--d%390&<WG@܎>+\=ƏΏޏ"1 A:M#ѐ /5JH5-~$'ђ8&25Y.5*!.A0p&,Ȕ +68I#"ƕ.H"($FEk1;yi8$3K`! :MgBޜ)%@fn.*x Ğ*!0؟' <1n+",ؠ/15"g,"2ڡ )(J s *ʢܢ $6Sl 5I"(5UFg 1ϥ%'GEE,or $8'>Tc/HNxEǪ, ":#]-+)۫&,'>Ѯ 2BKd+,3ٯ 1K(a#+"ڰ+") Lm?%);Xv.(ò } /00!Ikp!ζ%>SfojK@E-9AO{0˹/5,'b.3-,#!9[$w,(ɽ-&Tg7T q~*+* Cd}#$  ;6E%|72'r>1Y=I4H#g=?D)@n+1N I\I55&;\?B<HX-"H;?< B])C:.I>x2=<(@eFHU6$ -213Ie>K@:5{*7,0A0r4 2,:-6h5.h$*&1#25>h*Y=0M9A"{&!3>cZ%D,)5V2_ @ K V a lw  %"8[){&+5.GV k x. BE5c$ !8?X[(q" =Yw,'.%2>+q%CX5m ;<*\ *C:Y&.D-S <A(7M/l 1)@Wh,H- EQ%Z/0.&(3O  0!$>=c%#- 2S'r#;Y'u&&&Bi / ,/-"]9K%$,&Q$x#D#'*Rcu 1$-@4u $!#5LD`+/ 6 0Ct}/"&('%P%v$ ..Le2'2Zj/+$&>$e',, >3 r$,IJ_"#( L!m*-) W$c' ."+#)O#y-%65H/~"';40p"%/2M!a: !!(>+g8!4 0@q26)9;u&GH BX     # - M ] w        ? M e         '7 _ ~  .   ( 2 !8  Z { ,      $'E)Hr z%%,$Q2n3&"41Cu!%%Ci     #& ;)Eo$<!A6Z,;#M;-":"P-s+&*596o!&$ 1C2XIF3K^y01D#v#++,!C2e$*2.Et*  5Cc%&$@#Y&}3%*%Jp(-96U:,0 /9 i 7~ * . 7!;H!0!1!;!#"%;"a")p"3"6":# @#K#^#9q##5#-$".$Q$ q$$-$$$$ %5*%$`%%+%4%%&!'&CI&*&(&0&'2'.;'-j'*''+T(G(2(/(%+)FQ))1)#)*!*@*(]**-*/*,* &+"0+)S+}++ ++2+1%,W,`,#},#,!,",- -8-:W-I-A-".A. S.].p....... /2/R/!k//////0#0 90E0U0o00 0000 0 11216J1151#1 12'2=2N2*g2!2 22G23*3 =3^3{33-3,33454F4 b44444444D4F=5E5D5E6AU6766677=>7>|77$777<587r8F8899!9 [9|9 9$99#99#:7:*N:*y::D<<,=.?@A8A)B"MN+$N5PN>NN!N0O-8OQfOKO:P?PP)QWQgDRHR\RRS9SD T$QTvTX}T:T>U2PU8UUUQU]:V8VDVEW\W+aW WW;X&X_X@SYDYRYH,Z4uZGZMZ8@[4y[![2[1\!5\W\Fs\E\]$]?C]4];]J]H?^K^M^B"_Qe__?_:`R`9e`}`;a#Yb!}b#b!bb8b(2c*[cccc-c4d#;d`_dd$dUeCXexe2fHffhhAhAiCRi,iwiX;jZjjk?ljlM8mUmam>nQnQo[no'o/o"p"8p:[pDp0p q)q0IqlzqqwrazrPrV-tct tZtNuauvunuriv?v2w0Ow*w%wdwc6xTxLxTsWI (T}r-><{4Y!Eg&&pY/Lwֆ`N}~-zS'.{h]PqZŠ93WnC.+rwv-Ď@[@6ݏo  }x:2I\|vٔDP#..;OS})!"K<n2ęL'Dl;4p8śPO@k;Ɯy|EiŞq/P=0nȡq7<Nb5zoqaVW] C;B >c c*0<"m8Mɨ8UP[D"Gj}v~AR7b$4;GP-ԭsŮf9r1EUIwF}"RaUOW cQkcKϺH<dH^IIA*H,s--.9;hhx b8%@?qB^ubb'Ow6*3 ^!?HH*=sdb>y0.R2h42#IV0@7%]z=!V!Np/iS@K!fbqCY;lSVX(();C'TI|oF6}IA$g8'H]0tWXUVPV^TN][`_PZmQ w'R+T|s_NPwv]H@5kv0x8}U/0g]xUs~BGPk#o&v&7qG[7ih.s#wstkEKAZ`._Kyz64u1  ^Y  D r. S i ?_9 E[HceN]6.iv-lewwEn5;hIS ^!\q%T%#&=&SQ&&f'v''''2'' ((:(S(j(}((!(N(B!)Yd)i)R(*\{*_*78+/p+,++>+3(,[\,,,@,,-=-h-J\...). /!(/0J/.{/#/C/0 %0F06M0i0*0.1KH101W1?2H]2k2E3\X3T3z 4n44by52566,F60s6H6@6k.72707o70n88,88v8p9a:%{:>::@:";;(^;6;@;);p)<&</<><0=#L=Up==1=[>(p>>M?H@"^@N@q@1BAtAGAAD\B7B;BC0/CS`CiCIDwhD'DE"EX3EkEpEfiFF^FgLGGBGHB3HFvHH>CIZI}IW[JQJaK.gKdKNKGJL]LPLAM2_MDM:M2N]ENONAND5OXzO^Ov2PtP=Q\QwQQQ#,RBPRfRRNSwSXThUTzUEU:V2PVDVV jWQwW*W,W,!XNX,bX(X6X+XRYknYYY/Z#Z ZZC [&M[<t[[;[+ \5\<\\\X]k]|]h^@q^X^5 _LA_Y_b_vK`K`aV%a'|a#a1a_a4ZbLbKb5(c[^cCc'cB&dAidFd0dD#egheFeTf!lf#fNfLgYNgDgUgGCh&h;hehGTi*iPiVjNojjwk3.l5blZl5l9)m^cmdm.'n0VnSn(nMoWRooCoLo=LpxpDq]HqcqM r=XrrWskpsks{HtMtJuP]u8uut{vUvRFwlwgxJnx`x[ypvy:yG"zCjzVzS{uY{>{A|hP|e|/}YO}g}^~pp~~THN@T20Ȃ4\.I*Ճ>k?EA`3c_DX&1ĆQeH*@ه>2Y0;5u/&̉0݉__nΊD݊d"DR̋?N_H 'C9I}ǍFύH.wMEێL!8n}8%k^kʐ\6SH)0zZ%Ւ+K'Ls=)](pn1fӕ?#Ac?J@ISޗ)_2FFJpݙUNZ;y9NJ>4؜? <M6M`6pVaZ`[Y9q_U Va#1ܡix!4,0B8${')Ȥ$<`TeOOkNi vt_xK=ĨQ&TI{SũR2lDYs>6ǫ&>8]0"2;:%vF0>>S.QQOkC()ذ;s>9bڲq=.O޳^.i,$Q` sj޶qe׷nDZa=|w_e,7.ffi{7{.5Gd`ſ߿0N/{~@,;qh.`aUctQ?\ev\9T-m#[p^0d4pG MRXO/IVyW[(1?5"E2h7qoEFG AUA>d_}dBZm-&BFM186S<<A>F+&3C ,P}K)e%NNA)&kO/3/DcQzDueU:S:#A_/Jt,{!V5!WOoYeEM/;CUD.IiC 4{}0xk'mwty~(mEomLF<?}XXA/qc&8%PQvM>4XYxBN @W/G ^fXK23#,Vyj @wjfK=w8nAu;DK  FvT}dj9 buq_h}\9N@:d>]SRDEMar',9g%^ "swn8%b# Pr4eaC|=] &J"C64.DJ5gd)1p^7U|$H]9LGR]= i}c.a:z(-O<yAmQLxZY#[,!3[' p#$EL}z@ n)?6UBL#;Yj~+z~?"ive50,Q}xo?_Ntl7tj>SA4+y Uc36^ 2E>~erdh$|)6K yeuwD?g1sR.W{<OtBk7*XTX, \h2H!: qBm%&o"? 7;h -I)m>{ET P'kB-`<1rQ]/*T=zI`n<%obIO8;{ZqVFeMXs8+J^R|U/.NH*IF@):`4M[4[c$mt`d/5q\V {&F~["ohY  1'_\ vZ3MITn6-D~27k.(pO fC+*rugHvC!YMfWp :\mlaUi<!SJEz>0u-SAxocc+l l0iGsvZ|Q/ 08QxHW`a=5iZJ &wC_b10PLA$5! F( W  SO9V_K'Pfgl%k2qb3yV;tGR N (pP{*sG(&k Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2014-11-15 18:41+0200 Last-Translator: Yuri Chornoivan Language-Team: Ukrainian Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Lokalize 1.5 Plural-Forms: nplurals=1; plural=0; Вкажіть ідентифікатор користувача. Дані слід завершити порожнім рядком: Отримано недостатньо псевдовипадкових байтів. Виконуйте якісь дії, щоб надати ОС змогу покращити дані. (Потрібно ще %d байтів) Виберіть зображення, яке буде використано як ваш фотоідентифікатор. Дані мають зберігатися у форматі JPEG. Пам’ятайте, що зображення зберігатиметься у вашому відкритому ключі. Якщо ви використаєте дуже велике зображення, ваш ключ також стане дуже великим! Варто дотримуватися розмірів, близьких до 240x288. Підтримувані алгоритми: Вам потрібен ідентифікатор користувача для ідентифікації вашого ключа; програма створити ідентифікатор користувача на основі справжнього імені, коментаря і адреси електронної пошти у такому форматі: "Ivan Ivanenko (farmer) " або «%s» за допомогою %s ключа %s імпортовано: %lu без змін: %lu нових підключів: %lu нових ід. користувачів: %lu не імпортовано: %lu без ід. користувача: %lu «%s»: перевага алгоритму шифрування %s «%s»: перевага алгоритму стискання %s «%s»: перевага алгоритму контрольних сум %s (підключ у ідентифікаторі основного ключа %s) Певності у належності підпису його власнику немає. Підпис, ймовірно, є ПІДРОБКОЮ. Немає підтверджень належності підпису його власнику. Це може означати, що підпис було підроблено. недоступним алгоритмам для таких ід. користувачів: нових підписів: %lu «%s» Серійний номер картки = Відбиток ключа = Відбиток підключа: прочитано закритих ключів: %lu пропущено нових ключів: %lu вилучених ід. корист.: %lu Відбиток підключа: вилучених підписів: %lu (%c) вийти (%c) увімкнути або вимкнути можливість використання для розпізнавання (%c) увімкнути або вимкнути можливість шифрування (%c) увімкнути або вимкнути можливість підписування (%d) DSA (із визначенням можливостей власноруч) (%d) DSA (лише підписування) (%d) DSA і Elgamal (%d) Elgamal (лише шифрування) (%d) RSA (лише шифрування) (%d) RSA (із визначенням можливостей власноруч) (%d) RSA (лише підписування) (%d) RSA і RSA (типовий) (0) Не буду відповідати.%s (1) Мною не виконувалося ніяких перевірок.%s (1) Ключ підписування (2) Ключ шифрування (2) Мною виконано часткову перевірку.%s (3) Ключ розпізнавання (3) Мною виконано ретельну перевірку.%s відкликань нових ключів: %lu %d = НЕ довіряю %d = не знаю або не скажу %d = Я довіряю повністю %d = Я довіряю не повністю %d = довіряю без обмежень Неможливо підписати. або «%s» m = повернутися до головного меню q = вийти s = пропустити цей ключ імпортовано закр. ключів: %lu (ідентифікатор основного ключа %s) (неекспортовний) (невідкликуваний) Відбиток основного ключа: закр. ключів без змін: %lu «%s» не є ідентифікатором ключа: пропускаємо «%s» вже було локально підписано ключем %s «%s» вже було підписано ключем %s # Список призначених значень довіри, створено %s # (Скористайтеся «gpg --import-ownertrust» для їхнього відновлення) залишилося %d спроб визначення адміністративного пінкоду перед тим, як картку буде остаточно заблоковано %d помилкових підписів Оброблено %d ключів (очищено %d значень чинності) потрібно %d обмежених, потрібно %d повних, модель довіри %s %d підписів не перевірено через помилки %d підписів не перевірено через те, що немає ключів виявлено %d ідентифікаторів користувачів без коректних самопідписів кешовано %lu ключів (%lu підписів) зараз кешовано %lu ключів (%lu підписів) оброблено %lu ключів %s… у %s не передбачено підтримки обробника версії %d %s ще не може працювати разом з %s Дані, зашифровані за алгоритмом %s зашифрований %s ключ сеансу Буде використано шифрування %s %s є новим %s є незмінним ключі %s можуть мати довжину від %u до %u бітів. Розміри ключів %s мають перебувати у діапазоні %u—%u %s є зайвим, якщо використано %s! %s не можна використовувати разом з %s! %s підпис, алгоритм контрольної суми %s %s. %s/%s зашифровано для «%s» %s/%s підпис від: "%s" %s: є певні свідчення належності цього ключа користувачеві з вказаним іменем %s: немає певності щодо належності цього ключа користувачеві з вказаним іменем %s: каталогу не існує! %s: помилка під час спроби читання вільного запису: %s %s: помилка читання запису версії: %s %s: помилка оновлення запису версії: %s %s: помилка записування запису каталогу (dir): %s %s: помилка записування запису версії: %s %s: не вдалося додати запис: %s %s: не вдалося створити таблицю хешів: %s %s: не вдалося створити запис щодо версії: %s%s: не вдалося обнулити запис: %s %s: некоректна версія файла %d %s: некоректна trustdb %s: створено некоректну trustdb %s: створено сховище ключів %s: не є файлом trustdb %s: пропущено: %s %s: пропущено: відкритий ключ вже існує %s: пропущено: відкритий ключ вимкнено %s: створено trustdb %s: невідомий суфікс %s: запис версії з номером запису %lu %s:%d: застарілий параметр «%s» %s:%d: некоректний список auto-key-locate %s:%d: некоректні параметри експортування %s:%d: некоректні параметри імпортування %s:%d: некоректні параметри сервера ключів %s:%d: некоректні параметри побудови списку %s:%d: некоректні параметри перевірки %u-бітовий ключ %s, ідентифікатор %s, створено %s(Опису не надано) (Ймовірно, вам варто тут вибрати %d) (Це критичний ключ відкликання) (важливий)(якщо ключ не задано відбитком) (ймовірно, ви скористалися помилковою програмою для цього завдання) * До команди «sign» можна додати «l» для локальних підписів (lsign), «t» для надійних підписів (tsign), «nr» для підписів без відкликання (nrsign) або будь-яку комбінацію (ltsign, tnrsign тощо). --clearsign [назва файла]--decrypt [назва файла]--edit-key user-id [команди]--encrypt [назва файла]--lsign-key user-id--output не працює з цією командою --sign --encrypt [назва файла]--sign --symmetric [назва файла]--sign [назва файла]--sign-key user-id--store [назва файла]--symmetric --encrypt [назва файла]--symmetric --sign --encrypt [назва файла]--symmetric [назва файла]-k[v][v][v][c] [ідентифікатор користувача] [сховище ключів]…це вада (%s:%d:%s) 1 помилковий підпис 1 підпис не перевірено через те, що немає ключа 1 підпис не перевірено через помилку виявлено 1 ідентифікатор користувача без коректного самопідпису 10 translator see trustdb.c:uid_trust_string_fixed@ (Щоб ознайомитися зі списком команд і параметрів, скористайтеся сторінкою довідника (man)) @ Приклади: -se -r Bob [файл] підписати і зашифрувати дані для користувача Bob --clearsign [файл] створити текстовий підпис --detach-sign [файл] створити від’єднаний підпис --list-keys [назви] показати ключі --fingerprint [назви] показати відбитки @ Параметри: @Команди: Призначено виведення у форматі ASCII. Команди адміністрування дозволено Команди адміністрування заборонено Команда адміністратора Дайте відповідь "yes" (або просто "y"), якщо можна створювати підключ.Дайте відповідь "yes", якщо можна вилучити підключДайте відповідь "yes", якщо файл можна перезаписатиДайте відповідь "yes", якщо ви справді хочете вилучити цей ідентифікатор користувача. У разі вилучення всі пов’язані з ним сертифікати буде втрачено!Дайте відповідь "yes", якщо ви хочете підписати ВСІ ідентифікатори користувачаДайте відповідь "yes" (так) або "no" (ні)Ви справді бажаєте підписати цей ключ вашим ключем «%s» (%s) Ви справді бажаєте додати його? (y/N або т/Н) Ви справді бажаєте відкликати його? (y/N або т/Н) Ви певні, що все ще бажаєте підписати його? (y/N або т/Н) Ви справді бажаєте призначити цей ключ як підписане відкликання? (y/N або т/Н) Ви справді бажаєте вилучити його? (y/N або т/Н) Ви справді бажаєте замінити його? (y/N або т/Н) Вам справді хочеться ним скористатися? (y/N або т/Н) Пройти розпізнаванняПОМИЛКОВИЙ підпис від «%s»Відбиток CA: помилка CRC; %06lX - %06lX Не вдалося перевірити підпис: %s Редагування цього ключа неможливе: %s Не вдалося відкрити «%s»: %s СкасуватиІм’я власника картки: Прізвище власника картки: Сертифікати, що призводять до необмеженої довіри до ключа: СертифікуватиЗмінити назву (N), коментар (C), ел. пошту (E) або гаразд (O) чи вийти (Q)? Змінити назву (N), коментар (C), ел. пошту (E) або вийти (Q)? Заміна переваг для всіх ідентифікаторів користувачів (або лише вибраних) на поточний список переваг. Часову позначку всіх змінених самопідписів буде посунуто на одну секунду вперед. Зміна часу завершення строку дії для підключа. Зміна часу завершення строку дії для основного ключа. Шифр: Для команди слід вказати аргумент з назвою файла Коментар: Стиснення: Створити підписаний сертифікат відкликання для цього ключа? (y/N або т/Н) Створити сертифікат відкликання для цього ключа? (y/N або т/Н) Створити сертифікат відкликання для цього підпису? (y/N або т/Н) Критичний основний сервер ключів: Критична примітка підпису: Критичні правила підпису: Поточні дозволені дії: Поточні отримувачі: Ключ DSA %s потребує хешу з %u або більшої кількості бітів Ключ DSA %s використовує небезпечне (%u-бітове) хешування Для DSA довжина хешу має бути кратною до 8 бітів Вилучити цей дійсний підпис? (y/N/q або т/Н/в)Вилучити цей некоректний підпис? (y/N/q або т/Н/в)Вилучити цей ключ зі сховища? (y/N або т/Н) Вилучити цей невідомий підпис? (y/N/q або т/Н/в)Вилучено %d підпис. Вилучено %d підписів. Від’єднаний підпис. Контрольна сума: Показ фотоідентифікатора %s розміру %ld для ключа %s (uid %d) Справді бажаєте вилучити вибрані ключі? (y/N або т/Н) Справді бажаєте вилучити цей ключ? (y/N або т/Н) Ви справді цього бажаєте? (y/N або т/Н) Ви справді бажаєте відкликати весь ключ? (y/N або т/Н) Ви справді бажаєте відкликати позначені підключі? (y/N або т/Н) Ви справді бажаєте відкликати цей підключ? (y/N або т/Н) Ви справді хочете встановити необмежену довіру до цього ключа? (y/N або т/Н) Бажаєте видати новий підпис для заміни застарілого? (y/N або т/Н) Бажаєте розширити сферу використання до повністю експортованого підпису? (y/N або т/Н) Бажаєте розширити сферу використання до самопідпису OpenPGP? (y/N або т/Н) Бажаєте підписати його попри все? (y/N або т/Н) Бажаєте, щоб строк дії вашого підпису був таким самим? (Y/n або Т/н) ПОМИЛКА: Адреса ел. пошти: ЗашифруватиВкажіть адміністративний пінкод: Вкажіть назву файла JPEG для фотоідентифікатора: Вкажіть новий адміністративний пінкод: Вкажіть новий пінкод: Вкажіть пінкод: Вкажіть необов’язковий опис; завершіть його порожнім рядком: Введіть нову назву файлаВкажіть номер, далі (N) чи вийти (Q) > Вкажіть пароль Введіть пароль: Вкажіть ім’я власника ключаВкажіть новий пароль для цього закритого ключа. Вкажіть примітку: Вкажіть потрібне значення, як це показано у підказці. Можна вказати дату у форматі ISO (РРРР-ММ-ДД), але у програмі не передбачено повідомлено про помилки, система просто спробує обробити вказане значення як діапазон значень.Вкажіть розмір ключаВкажіть ідентифікатор користувача-отримувача, якому буде надіслано повідомлення.Вкажіть ідентифікатор користувача підписаного відкликання: Вкажіть адресу вашого основного сервера ключів: Помилка читання резервного ключа з «%s»: %s Помилка: складена назва є занадто довгою (максимум — %d символів). Помилка: не можна використовувати подвійні пробіли. Помилка: дані користувача є занадто довгими (максимум — %d символів). Помилка: у поточній версії можна використовувати лише звичайний ASCII. Помилка: особисті дані D0 є занадто довгими (максимум — %d символів). Помилка: символ «<» не можна використовувати. Помилка: trustdb пошкоджено. Помилка: адреса є занадто довгою (максимум — %d символів). Помилка: некоректні символи у рядку основної мови. Помилка: некоректне форматування відбитка. Помилка: некоректна довжина рядка основної мови. Помилка: некоректна відповідь. Прострочений підпис від «%s»Можливості: Файл «%s» існує. Вкажіть назву файла, до якого буде застосовано підписуванняПочніть вводити ваше повідомлення... Належний підпис від «%s»Хеш: Підказка: виберіть ідентифікатори користувача для підписування Натисніть Enter, коли будете готові, або введіть «c», щоб скасувати: Наскільки ретельно ви перевірили те, що ключ, який ви маєте намір підписати, справді належить особі, ім’я якої вказано вище? Якщо ви не знаєте відповіді, введіть «0». Наскільки ви певні, що цей ключ справді належить користувачеві з вказаним іменем? Цей ключ перевірено мною частково. Цей ключ ретельно перевірено мною. Цей ключ не перевірявся мною. Шифр IDEA недоступний, спробуємо скористатися замість нього %s Якщо результат буде незадовільним, будь ласка, зверніться до підручника Якщо хочете, можете ввести опис причин видання цього сертифіката відкликання. Опис має бути доволі коротким. Завершити опис слід порожнім рядком. Якщо вам хочеться використати ненадійний ключ, дайте відповідь «yes».Зазвичай, не варто використовувати один ключ для підписування і шифрування. Цей алгоритм варто використовувати лише у певних областях. Перш ніж використовувати його, порадьтеся з вашим фахівцем з безпеки.Некоректний символ у коментарі Некоректний символ у імені Некоректна команда (скористайтеся командою «help») Некоректний ключ %s визнано чинним через параметр --allow-non-selfsigned-uid Некоректний пароль; повторіть спробуНекоректний вибір. Все правильно? (y/N або т/Н) Все правильно? (y/N або т/Н) Це потрібна вам фотографія (y/N/q)? Не можна з певністю вважати, що ключ належить особі, вказаній у ідентифікаторі користувача. Якщо вам *точно* відомі наслідки ваших дій, можете ствердно відповісти на наступне питання. Це значення має бути вказано вами, його ніколи не буде показано стороннім особам. Це значення потрібне для формування мережі довіри; воно не має нічого спільного з автоматично створеною мережею сертифікації.Ключ %s вже відкликано. Ключ доступний на: Ключ не має обмеження строку дії Ключ діє до %s Створення ключа скасовано. Помилка під час спроби створення ключа: %s Ключ скомпрометованоДо ключа включено лише типовий заповнювач або записи ключа з картки — ніяких паролів не потрібно змінювати. Ключ більше не використовуєтьсяКлюч захищено. Ключ відкликано.Ключ заміненоЯким є строк чинності ключа? (0) Ключ не змінено, отже оновлення непотрібне. Сховище ключівСервер ключів без можливості зміниОсновна мова: Дані користувача (назва запису): Створити резервну копію ключа шифрування поза карткою? (Y/n або Т/н) N — змінити ім’я. C — змінити коментар. E — змінити адресу електронної пошти. O — продовжити створення ключа. Q — перервати створення ключа.ЗАУВАЖЕННЯ: %s недоступні у цій версії ЗАУВАЖЕННЯ: %s не призначено для звичайного використання! ЗАУВАЖЕННЯ: не можна гарантувати підтримку карткою бажаного розміру. Якщо ключ не вдасться створити, будь ласка, ознайомтеся з документацією до вашої картки, щоб визначити дозволені розміри. ЗАУВАЖЕННЯ: ця можливість є недоступною у %s ЗАУВАЖЕННЯ: цей ключ не захищено! ЗАУВАЖЕННЯ: серійний номер ключа не збігається з серійним номером ключа на картці ЗАУВАЖЕННЯ: резервну копію ключа на картці збережено до «%s» ЗАУВАЖЕННЯ: створення підключів для ключів v3 несумісне з OpenPGP ЗАУВАЖЕННЯ: ключ було відкликаноЗАУВАЖЕННЯ: ключі вже збережено на картці! ЗАУВАЖЕННЯ: не виявлено файла типових параметрів «%s» ЗАУВАЖЕННЯ: застарілий файл типових параметрів «%s» проігноровано ЗАУВАЖЕННЯ: основний ключ використано і збережено на картці ЗАУВАЖЕННЯ: вторинний ключ використано і збережено на картці ЗАУВАЖЕННЯ: строк дії закритого ключа %s завершився %s ЗАУВАЖЕННЯ: вимога відправника: «лише для Вас» ЗАУВАЖЕННЯ: строк дії ключа підпису %s завершився %s ЗАУВАЖЕННЯ: наполегливо не рекомендуємо вам користуватися простим режимом S2K (0) ЗАУВАЖЕННЯ: запис до trustdb заборонено Ім’я не може починатися з цифри Ім’я має бути не коротшим за 5 літер Для цього потрібен закритий ключ. NnCcEeOoQqНемає відповідного підпису у сховищі закритих ключів Довідки не передбаченоДовідки щодо %s не виявленоПричину не вказаноПідключа з індексом %d не існує Немає такого ідентифікатора користувача. Не вказано значення довіри до: Ідентифікатора користувача з хешем %s не існує Ідентифікатора користувача з індексом %d не існує Некоректна адреса електронної пошти Не підписано вами. Примітки: Зауважте, що цей ключ не може бути використано для шифрування. Ви можете скористатися командою «--edit-key» для створення підключа з цією метою. Зауваження: адреса автора підпису «%s» не збігається з записом DNS Зауваження: цей ключ було вимкнено. Зауваження: строк дії цього ключа вичерпано! Зауваження: перевіреною адресою автора підпису є «%s» Нічого не вилучено. Нічого підписувати ключем %s Виявлено картку OpenPGP з номером %s Не вдалося отримати доступ до картки OpenPGP: %s Перезаписати? (y/N або т/Н) Не можна встановлювати довіру до власника, якщо використовується вказана користувачем база даних довіри Зворотний виклик пінкоду повернув повідомлення про помилку: %s Пінкод для CHV%d занадто короткий; мінімальна довжина — %d Помилка під час повторного введення пінкоду, повторіть спробуСпочатку виправте помилку Визначтеся щодо рівня довіри до цього користувача для належної перевірки ключів інших користувачів (за паспортами, відбитками з інших джерел тощо) Будь ласка, не використовуйте адресу електронної пошти у полях справжнього імені або коментаря Будь ласка, вкажіть домен обмеження цього підпису або натисніть Enter, якщо такого домену немає. Вкажіть назву нового файла. Якщо ви просто натиснете Enter, буде використано типову (показану у дужках) назву.Будь ласка, вкажіть додатковий коментарБудь ласка, вкажіть назву файла даних: Будь ласка, вкажіть глибину довіри до цього підпису. Глибина, більша за 1, дозволяє ключу, який ви підписуєте, створювати надійні підписи від вашого імені. Вкажіть пароль. Паролем має бути невідома стороннім група символів Будь ласка, виправте цю можливу ваду захисту Вставте картку і натисніть Enter або «c», щоб скасувати: Зауважте, що типовими параметрами пінкоду є PIN = «%s» Адміністративний PIN = «%s» Вам слід змінити параметри за допомогою команди --change-pin Зауважте, що показані дані щодо чинності ключів не обов’язково є коректними до перезапуску програми. Будь ласка, вилучіть вказане з закритих ключів. Будь ласка, вийміть поточну картку і вставте картку з серійним номером: %.*s Повторіть введення пароля, щоб переконатися, що комп’ютер зберігатиме його правильно.Будь ласка, надсилайте повідомлення про помилки на адресу . Будь ласка, виберіть не більше одного ключа. Будь ласка, виберіть лише один ідентифікатор користувача. Будь ласка, вкажіть причину відкликання: Виберіть тип ключа, який слід створити: Вкажіть потрібний вам тип ключа: Виберіть сховище для зберігання ключа: Вкажіть строк чинності ключа. 0 = строк чинності не обмежено = строк чинності у n днів w = строк чинності у n тижнів m = строк чинності у n місяців y = строк чинності у n років Вкажіть строк чинності підпису. 0 = строк чинності підпису не обмежено = строк чинності підпису у n днів w = строк чинності підпису у n тижнів m = строк чинності підпису у n місяців y = строк чинності підпису у n років Скористайтеся спочатку командою «toggle». Зачекайте, накопичуємо ентропію. Виконуйте якісь дії, щоб не сумувати, оскільки виконання таких дій покращить випадковість накопичених даних. Можливі дії з ключем %s: Основний сервер ключів: Основний відбиток ключа:Особисті дані DO: Продовжувати? (y/N або т/Н) Відкритий ключ: Відкритий ключ вимкнено. Вийти без збереження? (y/N або т/Н) Не знайдено модуля RSA або модуль не належить до %d-бітових Не знайдено простого числа RSA %s або число не належить до %d-бітових Не вистачає відкритого показника RSA або розмірність показника перевищує %d бітів Справжнє ім’я: Справді створити сертифікати відкликання? (y/N або т/Н) Створити? (y/N або т/Н) Вилучити цей самопідпис? (y/N або т/Н)Вилучити основний ключ? (y/N або т/Н) Вилучити всі вибрані ідентифікатори користувачів? (y/N або т/Н) Вилучити цей ідентифікатор користувача? (y/N або т/Н) Відкликати всі вибрані ідентифікатори користувачів? (y/N або т/Н) Відкликати цей ідентифікатор користувача? (y/N або т/Н) Підписати всі ідентифікатори користувача? (y/N або т/Н) Підписати? (y/N або т/Н) Оновити переваги для вибраних ідентифікаторів користувачів? (y/N або т/Н) Оновити параметри? (y/N або т/Н) Причина відкликання: %s Повторіть пароль Повторіть пароль: Повторіть введення цього пінкоду: Замінити вже створений ключ? (y/N або т/Н) Замірити вже створені ключі? (y/N або т/Н) Запитана довжина ключа — %u бітів Занадто короткий код скидання; мінімальна довжина — %d Немає коду скидання або код скидання вже недоступний Створено сертифікат відкликання. Створено сертифікат відкликання. Пересуньте його на носій, який можна сховати. Якщо хтось сторонній отримає доступ до цього сертифіката, він зможе зробити ваш ключ непридатним до використання. Варто надрукувати цей сертифікат і зберігати його у конфіденційному місці, якщо дані з носія не можна буде прочитати. Але зауважте: система друку вашого комп’ютера може зберігати дані друку, доступ до яких зможуть отримати сторонні люди! Зберегти зміни? (y/N або т/Н) Доступний закритий ключ. Закриті частини основного ключа недоступні. Закриті частини основного ключа зберігаються на картці. Виберіть алгоритм, яким слід скористатися. DSA (або DSS) — алгоритм цифрового підпису, ним можна користуватися лише для підписування. Elgamal — алгоритм, призначений лише для шифрування. RSA можна використовувати для підписування і шифрування. Першим (основним) ключем завжди має бути ключ, яким можна підписувати.Встановити список переваг: Стать (чоловіча (M), жіноча (F) або пробіл): ПідписатиПідписати його? (y/N або т/Н) Підпис не має обмеження строку дії Строк дії підпису вичерпано %s Підпис діє до %s Підпис діє до %s Яким є строк чинності підпису? (%s) Підпис створено %s Підпис створено %s ключем %s з ідентифікатором %s Примітка підпису: Правила підпису: SsEeAaQqПідключ %s вже відкликано. Синтаксис: gpg [параметри] [файли] Підписування, перевірка підписів, шифрування або розшифрування Типова дія залежатиме від вхідних даних Синтаксис: gpgv [параметри] [файли] Перевірити підписи за допомогою відомих надійних ключів Зараз налаштування картки буде змінено для створення %u-бітового ключа Мінімальним рівнем довіри до цього ключа є %s Генератор псевдовипадкових чисел — лише обхідний маневр, який надає змогу запустити програму. Створені ним прості числа не забезпечать можливості стійкого шифрування! НЕ ПОКЛАДАЙТЕСЯ НА ДАНІ, СТВОРЕНІ ЦІЄЮ ПРОГРАМОЮ! Самопідпис «%s» є підписом у форматі PGP 2.x. Підпис не є коректним. Немає сенсу вилучати його з вашого сховища ключів.Підпис буде позначено як непридатний до експортування. Підпис буде позначено як непридатний до відкликання. Переваг для ідентифікаторів користувачів у форматі PGP 2.x не передбачено. Цей файл JPEG є дуже великим (%d байтів)! Цією командою не можна користуватися у режимі %s. Цією командою можна користуватися лише для карток версії 2 Цей ключ є закритим! Вилучити його? (y/N або т/Н) Це підпис, який пов’язує ідентифікатор користувача з ключем. Не варто вилучати такі підписи. GnuPG може втратити можливість використання цього ключа, тому вилучайте цей самопідпис, лише якщо з певної причини він втратив чинність і у вас є інший самопідпис.Цей підпис ключа є коректним. Зазвичай, потреби у вилученні такого підпису не виникає, оскільки важливо встановити зв’язок довіри з цим ключем або іншим ключем, сертифікованим цим ключем.Цей ключ належить нам Цей ключ було вимкненоСтрок дії цього ключа вичерпано!Строк дії цього ключа завершиться %s. Цей ключ не захищено. Цей ключ може бути відкликано %s ключем %sЙмовірно, цей ключ належить користувачеві з вказаним іменем Цей ключ було відкликано %s, %s, ключем %s Цей підпис не можна перевірити, оскільки у вас немає відповідного ключа Вам слід відкласти його вилучення до визначення потрібного ключа, оскільки цей ключ підписування може встановити зв’язок довіри на основі іншого вже сертифікованого ключа.Строк дії цього підпису завершується %s. Це буде самопідпис. Це може зробити ключ непридатним до використання у PGP 2.x. Буде відкликано: Для створення мережі довіри GnuPG потрібно знати, яким з ключів ви довіряєте необмежено. Зазвичай такими ключами є ключі, у яких ви маєте доступ до закритої частини. Дайте відповідь «так» (yes), щоб встановити необмежену довіру до цього ключа. Загалом оброблено: %lu Адреса для отримання відкритого ключа: НестисненийНевідомий тип підпису «%s» Використання: gpg [параметри] [файли] (-h — довідка)Використання: gpgv [параметри] [файли] (-h — довідка)Попри все використовувати цей ключ? (y/N або т/Н) Ідентифікатор користувача «%s» ущільнено: %s Строк дії ідентифікатор користувача «%s» сплив.Ідентифікатор користувача «%s» не є самопідписаним.Ідентифікатор користувача «%s» відкликано.Ідентифікатор користувача «%s» можна підписувати. Ідентифікатор користувача «%s»: вилучено %d підпис Ідентифікатор користувача «%s»: вилучено %d підписів Ідентифікатор користувача «%s»: вже очищено Ідентифікатор користувача «%s»: вже мінімізовано Ідентифікатор користувача втратив чинністьУВАГА: УВАГА: «%s» вважається застарілою командою — не користуйтеся нею УВАГА: «%s» вважається застарілим параметром УВАГА: %s перевизначає %s УВАГА: існує 2 файли з конфіденційними даними. УВАГА: ключі підписування і шифрування Elgamal вважаються застарілими УВАГА: це ключ у форматі PGP 2. Додавання підписаного відкликання може призвести до відмови у використанні цього ключа деякими версіями PGP. УВАГА: це ключ у форматі PGP2. Додавання фотоідентифікатора може призвести до відмови у використанні цього ключа деякими версіями PGP. УВАГА: цей ключ було відкликано відповідною особою! УВАГА: цей ключ було відкликано власником! УВАГА: цей ключ не сертифіковано за допомогою надійного підпису! УВАГА: цей ключ не сертифіковано достатньо надійними підписами! УВАГА: цей підключ було відкликано його власником! УВАГА: використовуємо ненадійний ключ! УВАГА: ми НЕ довіряємо цьому ключу! УВАГА: виявлено слабкий ключ — будь ласка, змініть пароль. УВАГА: файл «%s» є порожнім УВАГА: підпис ідентифікатора користувача позначено датою на %d секунд у майбутньому УВАГА: призначення ключа як підписаного відкликання не можна скасовувати! УВАГА: не виявлено алгоритму шифрування %s у перевагах отримувача УВАГА: алгоритм обчислення контрольних сум %s вважається застарілим УВАГА: зашифроване повідомлення було змінено! УВАГА: примусове використання алгоритму стиснення %s (%d) не відповідає параметрам отримувача УВАГА: примусове використання алгоритму контрольних сум %s (%d) не відповідає параметрам отримувача УВАГА: примусове використання симетричного шифру %s (%d) не відповідає параметрам отримувача УВАГА: некоректний розмір файла random_seed — не використано УВАГА: у ключі %s містяться записи надання переваги УВАГА: ключ %s могло бути відкликано: отримуємо ключ відкликання %s УВАГА: ключ %s могло бути відкликано: ключа відкликання %s немає. УВАГА: засіб обробки даних сервера ключів взято з іншої версії GnuPG (%s) УВАГА: параметр сервера ключів «%s» не використовується на цій платформі УВАГА: повідомлення зашифровано слабким ключем з симетричним шифруванням. УВАГА: цілісність повідомлення не захищено УВАГА: виявлено декілька фрагментів нешифрованого тексту УВАГА: виявлено кратні підписи. Буде перевірено лише перший. УВАГА: жоден з ідентифікаторів користувача не позначено як основний. За допомогою цієї команди можна зробити основним інший ідентифікатор користувача. УВАГА: підпис не є від’єднаним; перевірку файла «%s» не виконано! УВАГА: нічого не експортовано УВАГА: параметри у «%s» ще не є активними під час цього запуску УВАГА: потенційно небезпечний зашифрований симетричним алгоритмом ключ сеансу УВАГА: можливе створення дампу пам’яті програми! УВАГА: отримувачів (-r) вказано без використання шифрування відкритим ключем УВАГА: закритий ключ %s не має простої контрольної суми ЗК УВАГА: конфлікт контрольних сум підписів у повідомленні УВАГА: підписування підключа %s містить некоректну перехресну сертифікацію УВАГА: підписування підключа %s не є перехресно сертифікованим УВАГА: підпис не буде позначено як непридатний до експортування. УВАГА: підпис не буде позначено як непридатний до відкликання. УВАГА: цей ключ могло бути відкликано (немає ключа відкликання) УВАГА: не вдалося виконати %%-розгортання примітки (занадто велика). Використовуємо нерозгорнутою. УВАГА: не вдалося виконати %%-розгортання адреси правил (занадто велика). Використовуємо нерозгорнутою. УВАГА: не вдалося виконати %%-розгортання адреси основного сервера ключів (занадто велика). Використовуємо нерозгорнутою. УВАГА: не вдалося отримати адресу %s: %s УВАГА: не вдалося обробити адресу %s УВАГА: не вдалося оновити ключ %s за допомогою %s: %s УВАГА: не вдалося вилучити тимчасовий каталог «%s»: %s УВАГА: не вдалося вилучити тимчасовий файл (%s) «%s»: %s УВАГА: визначення власника у підлеглому каталозі, визначеному файлом налаштувань «%s», не є безпечним УВАГА: визначення власника підлеглого каталогу домашнього каталогу «%s» не є безпечним УВАГА: визначення прав доступу до підлеглого каталогу, визначеного файлом налаштувань «%s», не є безпечним УВАГА: визначення прав доступу до підлеглого каталогу домашнього каталогу «%s» не є безпечним УВАГА: визначення власника у файлі налаштувань «%s» не є безпечним УВАГА: визначення власника домашнього каталогу «%s» не є безпечним УВАГА: визначення прав доступу до файла налаштувань «%s» не є безпечним УВАГА: визначення прав доступу до домашнього каталогу «%s» не є безпечним УВАГА: використовуємо експериментальний алгоритм шифрування %s УВАГА: використовуємо експериментальний алгоритм обчислення контрольних сум %s УВАГА: використовуємо експериментальний алгоритм створення відкритого ключа %s УВАГА: використовуємо незахищену область пам’яті! УВАГА: використовуємо незахищений засіб генерації псевдовипадкових чисел! Потрібно буде створити багато псевдовипадкових байтів. Варто виконувати якісь інші дії (натискати клавіші, пересувати мишу, використовувати диски) під час створення простого числа. Це надасть змогу генератору псевдовипадкових чисел створити краще випадкове число. Якому розміру ключа для розпізнавання ви надаєте перевагу? (%u) Яким має бути розмір ключа для шифрування? (%u) Якому розміру ключа підписування ви надаєте перевагу? (%u) Якою має бути довжина підключа? (%u) Якою має бути довжина ключа? (%u) Якщо ви підписуєте ідентифікатор користувача ключа, вам слід перевірити, чи належить ключ особі, на яку вказує ідентифікатор. Іншим користувачам важливо знати, наскільки ретельно було виконано цю перевірку. «0» означає, що ви не бажаєте оприлюднювати дані щодо якості перевірки ключа. «1» означає, що ви вважаєте, що ключ належить відповідній особі, але вам не вдалося або ви не виконували перевірки. Корисно для розпізнавання особи під час підписування ключа псевдоанонімного користувача. «2» означає, що було виконано часткову перевірку ключа. Наприклад, ви могли перевірити відбиток ключа і ідентифікатор користувача за фотоідентифікатором. «3» означає, що ви виконали розширену перевірку ключа. Наприклад, це може означати перевірку відбитка ключа особисто з власником ключа, перевірили за документом з фотографією, який важко підробити (паспортом), що ім’я власника збігається з ім’ям у ідентифікаторі ключа, і нарешті ви перевірили (обміном повідомленнями електронної пошти), що адреса електронної пошти належить власникові ключа. Зауважте, що для рівнів 2 і 3 вказано *лише* приклади. Нарешті, визначення термінів «часткова» та «розширена» покладається на вас. Ви маєте самі встановити рівень перевірки під час підписування ключів. Якщо ви не можете дати правильної відповіді, дайте відповідь «0».Ви маєте намір відкликати ці підписи: Вами використано таблицю символів «%s». Не можна змінювати дату завершення строку дії ключа v3 Не можна вилучати останній ідентифікатор користувача! Вами не вказано ідентифікатора користувача. (можете скористатися «-r») Ви не використовуєте пароля — дуже погана робота! Ви не використовуєте пароля — дуже погана робота! Вашу забаганку буде виконано. Пізніше ви зможете змінити пароль, за допомогою цієї програми з параметром «--edit-key». Вами підписано ці ідентифікатори користувачів у ключі %s: Не можна додавати підписане відкликання до ключа у форматі PGP 2.x. Не можна додавати фотоідентифікатор до ключа у форматі PGP2. Не можна створювати підпис OpenPGP ключа PGP 2.x у режимі --pgp2. Ви можете спробувати повторно створити trustdb за допомогою команд: Вам слід вибрати принаймні один ключ. Вам слід вибрати принаймні один ідентифікатор користувача. Вам слід вибрати лише один ключ. Вам потрібен пароль для захисту вашого закритого ключа. Вам потрібен пароль для розблокування закритого ключа для користувача: «%s» Вам слід вказати пароль для розблокування закритого ключа для користувача: «%.*s» %u-бітовий ключ %s, ідентифікатор %s, створено %s%s Вами вибрано такий ідентифікатор (USER-ID): "%s" Вам слід вказати причину сертифікації. Залежно від ситуації, ви можете вбрати одну з таких причин: "Key has been compromised" Цією причиною слід користуватися, якщо у вас є підозра, що доступ до вашого закритого ключа отримали сторонні особи. "Key is superseded" Цією причиною слід користуватися, якщо ви замінили цей ключ новішим. "Key is no longer used" Цією причиною слід користуватися, що ви вже не використовуєте ключ. "User ID is no longer valid" Цією причиною слід користуватися, що ви вже не використовуєте відповідний ідентифікатор користувача. Використовується, якщо втратила чинність адреса електронної пошти. Строк дії вашого поточного підпису «%s» завершено. Ваш поточний підпис «%s» є локальним підписом. Ваше рішення? Ваш вибір? Ваш вибір? (введіть «?», щоб дізнатися більше): У вашій системі неможливий показ дат після 2038 року. Але програма коректно оброблятиме ці дати до 2106 року. [ повна ][не визн.][застаріл][відклик.][невідома][Ідентифікатор не знайдено][назва файла][неповна ][не встановлено][відкликання][самопідпис][безмежна][непевний]«%s» вже стиснено «%s» не є файлом JPEG «%s» не є звичайним файлом — проігноровано «%s» не є коректним набором символів «%s» не є коректним довгим ідентифікатором ключа «%s» не є коректним записом завершення строку дії підпису спроба експортування незахищеного підключа доступ до адміністративних команд не налаштовано дії «%s» не передбачено для схеми сервера ключів «%s» додати ключ на картку пам’ятідодати фотоідентифікатордодати ключ відкликаннядодати підключдодати ідентифікатор користувачанеоднозначний параметр «%s» анонімний отримувач; спробуємо закритий ключ %s ... заголовок ASCII: формат ASCII: %s припускаємо, що дані зашифровано %s припускаємо помилковий підпису від ключа %s через невідомий критичний біт припускаємо підписані дані у «%s» автоматично отримувати ключі під час перевірки підписівавтоматично отримано «%s» за допомогою %s помилковий MPIпомилкова адресапомилковий сертифікатпомилковий ключпомилковий парольпомилковий відкритий ключпомилковий закритий ключнекоректний підписдещо зменшити кількість повідомленьдвійковийпомилка build_packet: %s cCсСкешування сховища ключів «%s» не вдалося отримати доступ до %s — некоректна картка OpenPGP? немає доступу до «%s»: %s не вдалося закрити «%s»: %s не вдалося встановити з’єднання з «%s»: %s не вдалося створити «%s»: %s не вдалося створити файл резервної копії «%s»: %s не вдалося створити каталог «%s»: %s не вдалося створити блокування для «%s» не вдалося вимкнути створення дампів образів у пам’яті: %s це не можна робити у пакетному режимі цього не можна робити у пакетному режимі без «--yes» не вдалося визначити просте число з pbits=%u qbits=%u неможливо створити просте число, що складається з менше за %d бітів робота з алгоритмом створення відкритого ключа %d неможлива обробка текстових рядків з довжиною, що перевищує %d символів, неможлива не вдалося обробити ці дані з неоднозначним підписом не вдалося заблокувати «%s» не вдалося заблокувати «%s»: %s не вдалося відкрити «%s» не вдалося відкрити «%s»: %s не вдалося відкрити підписані дані «%s» не вдалося відкрити сховище ключівне можна надсилати запити щодо паролів у пакетному режимі не вдалося прочитати «%s»: %s не вдалося обробити «%s»: %s не можна використовувати симетричний пакет ESK через режим S2K не вдалося записати «%s»: %s скасованоскасовано користувачем cancel|скасуватине можна призначати ключ у форматі PGP 2.x підписаним відкликанням не вдалося створити стійкий ключ для симетричного шифрування; спроба виконувалася %d разів! карткою не підтримується алгоритм контрольних сум %s картку заблоковано! засіб читання карток недоступний номер картки: змінити адресу для отримання ключазмінити відбиток CAзмінити пінкод карткизмінити ім’я власника карткизмінити поле статі власника карткизмінити дані на картцізмінити дату завершення строку дії ключа або вибраних ключівзмінити основну мовузмінити ім’я користувачазмінити рівень довіри до власниказмінити парольперевірити підписиневдала спроба перевірити створений підпис: %s перевірка trustdb помилка у контрольній суміалгоритм шифрування %d%s є невідомим або вимкненим не вистачає двокрапкиущільнити непридатні до використання ідентифікатори користувачів і вилучити всі підписи з ключаущільнити непридатні до використання ідентифікатори користувачів і вилучити невикористані підписи з ключазначення completes-needed має бути більшим за 0 несумісні команди не вдалося обробити адресу сервера ключів створити відкритий ключ під час імпортування закритого ключастворити дані у форматі ASCIIстворено: %sне вказано часової позначки створення дані не збережено; скористайтеся для їхнього збереження параметром «--output» помилка перетворення з формату ASCII: %s розшифрувати дані (типова дія)невдала спроба розшифрування: %s розшифровано вилучити вибрані підключівилучити вибрані ідентифікатори користувачавилучити підписи з вибраних ідентифікаторів користувачане вдалося вилучити блокування ключа: %s глибина: %d чинність: %3d підписано: %3d надійність: %d-, %dq, %dn, %dm, %df, %du створено каталог «%s» вимкнути ключвимкненопоказувати фотоідентифікатори у списках ключівпоказувати фотоідентифікатори під час перевірки підписівне спорожняти дані щодо довіри власнику під час імпортуванняне вилучати тимчасові файли після їхнього використанняне вносити змінне оновлювати базу даних довіри після імпортуванняпідняти рівень довіри до підписів з коректними даними PKAувімкнути ключпомилка перетворення у формат ASCII: %s зашифрувати данізашифровано за допомогою %lu паролів зашифровано ключем %s, ідентифікатор %s зашифровано за допомогою %u-бітового %s ключа, ідентифікатор %s, створено %s зашифровано за допомогою 1 пароля зашифровано за допомогою невідомого алгоритму %d шифрування повідомлень у режимі --pgp2 потребує використання шифру IDEA шифрувати лише за допомогою симетричного шифрупомилка під час спроби розподілу пам’яті: %s помилка під час спроби зміни розміру ключа з %d на %u: %s помилка створення «%s»: %s. помилка під час спроби створення сховища ключів «%s»: %s помилка під час спроби створення пароля: %s не вдалося знайти запис довіри у «%s»: %s помилка під час отримання даних поточного ключа: %s помилка під час отримання нового пінкоду: %s помилка у «%s»: %s помилка у рядку доповнення помилка під час спроби читання «%s»: %s помилка читання даних програми помилка читання відбитка DO помилка під час спроби читання блокування ключа: %s помилка під час читання блоку ключів «%s»: %s помилка отримання стану CHV з картки помилка під час спроби читання «%s»: %s помилка під час спроби запису ключа на картку: %s помилка під час спроби запису сховища ключів «%s»: %s помилка під час спроби запису до сховища відкритих ключів «%s»: %s помилка під час спроби запису до сховища закритих ключів «%s»: %s вже створений ключ буде замінено збіг строк діїне діє з: %sдіє до: %sекспортувати ідентифікатори користувача атрибута (типово фотоідентифікатори)експортувати ключіекспортувати ключі на сервер ключівекспортувати ключі відкликання, позначені як «важливі»експортувати підписи, які позначено як придатні лише для локального використанняекспортування закритих ключів заборонено викликів зовнішнього сервера ключів у цій збірці не передбачено виклик зовнішніх програм вимкнено через невідповідність прав доступу до файла параметрами безпеки не вдалося ініціалізувати базу даних надійності (TrustDB): %s не вдалося перебудувати кеш сховища ключів: %s не вдалося зберегти дату створення: %s не вдалося зберегти відбиток: %s не вдалося зберегти ключ: %s не вдалося зняти захист з підключа: %s не вдалося використати типовий пінкод як %s: %s — вимикаємо подальше типове використання жіночаотримати ключ, вказаний у полі адреси карткипомилка закриття файлапомилка створення файлапомилка вилучення файлафайл існуєпомилка відкриття файлапомилка читання файлапомилка перейменування файлапомилка запису до файлавідбиток на картці не відповідає запитаному позначити вибраний ідентифікатор користувача як основнийувімкненопримусове використання симетричного шифру %s (%d) не відповідає параметрам отримувача помилка fstat щодо «%s» у %s: %s помилка fstat(%d) у %s: %s повназагальна помилкастворити сумісні з PGP 2.x повідомленнястворити пару ключівстворити сертифікат відкликаннястворити ключіпомилка під час створення ключа створення нового ключа створюємо застарілу 16-бітову контрольну суму для захисту закритого ключа gpg-agent недоступний у цьому сеансі підтримки версії протоколу gpg-agent %d не передбачено gpg/картка> брати до уваги запис PKA, встановлений у ключі під час отримання ключівбрати до уваги адресу основного сервера ключів, встановлену у ключіiImMqQsSімпортувати ключі з сервера ключівімпортувати підписи, позначені як лише локальніімпортувати/об’єднати ключіімпортування закритих ключів заборонено включити до результатів пошуку відкликані ключівключити підключі до пошуку за ідентифікатором ключау рядку вхідних даних %u занадто багато символів або не вказано LF рядок вхідних даних довший за %d символів некоректнийнекоректний режим S2K; мало бути вказано 0, 1 або 3 некоректний аргументнекоректний код ASCIIнекоректний заголовок ASCII: некоректний формат ASCII: рядок є довшим за %d символів некоректний список auto-key-locate некоректний заголовок прозорого підпису некоректний екранований дефісами рядок: некоректні типові параметри некоректне значення default-cert-level; має бути 0, 1, 2 або 3 некоректні параметри експортування некоректний відбитокнекоректний алгоритм хешування «%s» некоректні параметри імпортування некоректний запис «%s» у рядку переваг некоректне сховище ключівнекоректні параметри сервера ключів некоректний протокол сервера ключів (наш %d!=%d обробника) некоректні параметри побудови списку некоректне значення min-cert-level; має бути 1, 2 або 3 некоректний пакетнекоректний парольнекоректні особисті параметри шифрування некоректні особисті параметри стискання некоректні особисті параметри контрольної суми пропущено некоректний символ radix64 %02X виявлено некоректний кореневий пакет у proc_tree() некоректна структура картки OpenPGP (DO 0x93) некоректне значення некоректні параметри перевірки наполегливо рекомендуємо вам оновити записи переваг і ключ «%s» не знайдено на сервері ключів ключ «%s» не знайдено: %s у ключа %s немає ідентифікатора користувача ключ %s позначено як ключ з необмеженою довірою ключ %s зустрічається у trustdb декілька разів ключ %s було створено з позначкою на %lu секунду у майбутньому (часова петля або проблема з годинником) ключ %s було створено з позначкою на %lu секунд у майбутньому (часова петля або проблема з годинником) ключ %s: «%s» %d нових підписів ключ %s: «%s» %d нових підключів ключ %s: «%s» %d нових ідентифікаторів користувачів ключ %s: «%s» вилучено %d підпис ключ %s: «%s» вилучено %d підписів ключ %s: «%s» спорожнено %d ідентифікатор користувача ключ %s: «%s» спорожнено %d ідентифікаторів користувачів ключ %s: «%s» 1 новий підпис ключ %s: «%s» 1 новий підключ ключ %s: «%s» 1 новий ідентифікатор користувача ключ %s: «%s» не змінено ключ %s: додано сертифікат відкликання «%s» ключ %s: імпортовано сертифікат відкликання «%s» ключ %s: %s ключ %s: ключ у стилі PGP 2.x — пропущено ключ %s: відновлено пошкоджений підключ PKS ключ %s: прийнято як надійний ключ ключ %s: прийнято несамопідписаний ідентифікатор користувача «%s» ключ %s: вже у сховищі закритих ключів ключ %s: не вдалося знайти початковий блок ключів: %s ключ %s: не вдалося прочитати початковий блок ключів: %s ключ %s: додано безпосередній підпис ключа ключ %s: не відповідає нашій копії ключ %s: виявлено дублювання ідентифікаторів користувача — об’єднано ключ %s: некоректний безпосередній підпис ключа ключ %s: некоректний сертифікат відкликання: %s — відкинуто ключ %s: некоректний сертифікат відкликання: %s — пропущено ключ %s: некоректний самопідпис для ідентифікатора користувача «%s» ключ %s: некоректне зв’язування підключів ключ %s: некоректне відкликання підключа ключ %s: матеріал ключа на карті — пропущено ключ %s: новий ключ — пропущено ключ %s: немає відкритого ключа — не можна застосовувати сертифікат відкликання ключ %s: немає відкритого ключа для надійного ключа — пропущено ключ %s: немає підключа для зв’язування ключів ключ %s: немає підключа для відкликання ключа ключ %s: немає підключа для підпису прив’язування підключа ключ %s: немає підключа для підпису відкликання підключа ключ %s: немає ідентифікатор користувача ключ %s: немає ідентифікатор користувача для підпису ключ %s: немає чинних ідентифікаторів користувача ключ %s: непридатний до експорту підпис (клас 0x%02X) — пропущено ключ %s: не захищено — пропущено ключ %s: імпортовано відкритий ключ «%s» ключ %s: не знайдено відкритий ключ: %s ключ %s: вилучено кратне зв’язування підключів ключ %s: вилучено кратне відкликання підключа ключ %s: сертифікат відкликання у помилковому місці — пропущено ключ %s: імпортовано закритий ключ ключ %s: закритий ключ не знайдено: %s ключ %s: закритий ключ з некоректним шифром %d — пропущено ключ %s: закритий ключ без відкритого ключа — пропущено ключ %s: пропущено підключ ключ %s: пропущено ідентифікатор користувача «%s» ключ %s: підпис підключа у помилковому місці — пропущено ключ %s: неочікуваний клас підпису (0x%02X) — пропущено ключ %s: непідтримуваний алгоритм створення відкритого ключа ключ %s: непідтримуваний алгоритм створення відкритого ключа для ідентифікатора користувача «%s» ключ вже існує помилка під час спроби експортування ключа: %s створення ключа завершено (за %d секунд) ключ було створено з позначкою на %lu секунд у майбутньому (часова петля або проблема з годинником) ключ було створено з позначкою на %lu секунду у майбутньому (часова петля або проблема з годинником) ключ не було позначено як ненадійний — не можна використовувати його з фіктивним RNG! ключ не знайдено на сервері ключів дія над ключем неможлива: %s ресурс блоку ключів «%s»: %s створено сховище ключів «%s» помилка під час обміну даними з сервером ключів: %s сервер ключів не надіслав значення VERSION помилка сервера ключіввнутрішня помилка сервера ключів помилка під час спроби отримання даних з сервера ключів: %s помилка оновлення з сервера ключів: %s помилка пошуку на сервері ключів: %s помилка під час надсилання даних на сервер ключів: %s перевищення часу очікування даних від сервера ключів некоректний розмір ключа; використовуємо %u-бітовий розмір ключа округлено до %u-бітового занадто довгий рядокпоказати всі доступні даніпоказати список і перевірити підписи ключівпоказати список ключів та ідентифікаторів користувачапоказати список ключівпоказати список ключів і відбитківпоказати список ключів і підписівсписок переваг (експертний)список переваг (докладний)показати список закритих ключівстворити від’єднаний підписсупроводжувати конфлікти часових позначок лише попередженнямипомилка make_keysig_packet: %s чоловічапомилкове форматування CRC помилкове форматування змінної середовища GPG_AGENT_INFO помилкове форматування ідентифікатора користувачанеповназначення marginals-needed має перевищувати 1 значення max-cert-depth має перебувати у діапазоні від 1 до 255 меню зміни або розблокування пінкодупересунути резервний ключ на картку пам’ятіпересунути ключ на картку пам’ятіпересування підпису ключа у належне місце nNнНвкладені підписи нешифрованим текстом помилка мережініколиніколи створено новий файл налаштувань «%s» наступну перевірку trustdb призначено на %s no|ніу визначенні групи «%s» немає знаку «=» немає карткинемає відповідного відкритого ключа: %s немає данихнемає типового сховища закритих ключів: %s не виявлено модуля збирання ентропії немає обробника схеми сервера ключів «%s» немає дії щодо сервера ключів! не вказано жодного сервера ключів (скористайтеся параметром --keyserver) потреби у перевірці trustdb немає потреби у перевірці trustdb на основі моделі довіри «%s» немає потреби у оновленні trustdb на основі моделі довіри «%s» немає не встановлено програми для перегляду фотографій виконання віддалених програм не передбачено для «%s» не знайдено ключів відкликання немає закритого ключа немає закритого підключа для відкритого підключа %s — пропускаємо підпису не знайдено немає підписаних даних немає такого ідентифікатора користувачане знайдено ключів з необмеженою довірою не виявлено коректних даних OpenPGP. немає коректних адрес не виявлено придатного до запису сховища ключів: %s не знайдено придатного до запису сховища відкритих ключів: %s не виявлено придатного до запису сховища закритих ключів: %s не є від’єднаним підписом не є карткою OpenPGPне зашифрованоне увімкненоне обробленоне підтримуєтьсязауваження: файл random_seed є порожнім зауваження: файл random_seed не оновлено oOгГдобре, ми є анонімним отримувачем. okay|гараздзастаріле кодування DEK не підтримується підпис у застарілому форматі (PGP 2.x) приймати оновлення лише вже створених ключівдію не можна виконувати без ініціалізації захищеної області пам’яті файл параметрів «%s»: %s початкова назва файла=«%.*s» дані щодо довіри до власника вилучено пропущено значення довіри до власникапароль створено за допомогою невідомого алгоритму створення контрольних сум %d помилка під час повторного введення пароля, повторіть спробубудь ласка, скористайтеся параметром --check-trustdb вкажіть необов’язкову, але рекомендовану до визначення адресу електронної поштибудь ласка, ознайомтеся з %s, щоб дізнатися більше докладніші дані можна знайти на сторінці http://www.gnupg.org/documentation/faqs.html будь ласка, скористайтеся «%s%s» зачекайте на завершення створення ключа... запис переваги «%s» продубльовано завчасний кінець файла (у CRC) завчасний кінець файла (у додатку) завчасний кінець файла (немає CRC) показати дані про стан карткипроблема з обробкою зашифрованого пакета проблема з агентом — вимикаємо використання агента запитувати перед перезаписомпідтримки алгоритму захисту %d%s не передбачено підтримки контрольної суми захисту %d не передбачено відкритий і закритий ключі створено і підписано. відкритий ключ %s є на %lu секунду новішим за підпис відкритий ключ %s є на %lu секунд новішим за підпис відкритий ключ %s не знайдено: %s невдала спроба розшифровування відкритим ключем: %s відкритий ключ не відповідає закритому ключу! зашифровані відкритим ключем дані: належний DEK відкритий ключ — %s відкритий ключ не знайденоне знайдено відкритий ключ ключа з необмеженою довірою %s qQвВquit|вийтивийти з цього менюсимволи quoted printable у кодуванні ASCII — ймовірно, використано помилковий MTA повторно поширити цей ключ, щоб уникнути потенційних проблем з алгоритмами помилка читання у «%s»: %s читання з «%s» прочитати параметри з «%s» помилка читання відкритого ключа: %s читаємо дані з stdin... причина відкликання: оновлюємо %d ключів з %s оновлюємо 1 ключ з %s відкинуто фільтром імпортуваннявилучити максимум частин з ключа після імпортуваннявилучити максимум частин з ключа під час експортуваннявилучити ключі з відкритого сховища ключіввилучити ключів з закритого сховища ключіввилучити пароль з експортованих підключіввилучити невикористані частини ключа після імпортуваннявилучити невикористовувані частини ключа під час експортуванняспроба перейменування «%s» на «%s» зазнала невдачі: %s відновлювати пошкодження сервером ключів pks під час імпортуваннянадсилаємо запит щодо ключа %s з %s надсилаємо запит щодо ключа %s до %s сервера %s обмеження на ресурсивідповідь не містить основи числення RSA відповідь не містить відкритого показника RSA відповідь не містить даних відкритого ключа коментар щодо відкликання: відкликати ключ або вибрані підключівідкликати вибрані ідентифікатори користувачіввідкликати підписи для вибраних ідентифікаторів користувачіввідкликановідкликано вашим ключем %s у %s відкликано: %sокруглено до %u бітів зберегти і вийтишукати ключі на сервері ключівшукаємо «%s» з %s шукаємо «%s» на %s сервера %s шукаємо назви на %s шукаємо назви з %s сервера %s закритий ключ «%s» не знайдено: %s закритий ключ «%s»: %s закритий ключ вже збережено на картці закритий ключ недоступнийзакриті частини ключа недоступні закриті частини ключа недоступні вибрати вказаний підключвибрати вказаний ідентифікатор користувачавибраний алгоритм створення контрольних сум для сертифікації є некоректним вибраний алгоритм шифрування є некоректним вибраний алгоритм стискання є некоректним вибраний алгоритм побудови контрольних сум є некоректним помилка вибору openpgp: %s надсилаємо ключ %s на %s надсилаємо ключ %s до %s сервера %s встановити примітку для вибраного ідентифікатора користувачавстановити список параметрів для вибраних ідентифікаторів користувачіввстановити адресу основного сервера ключів для вибраних ідентифікаторів користувачівпоказувати стандартні примітки IETF у списках підписівпоказувати стандартні примітки IETF під час перевірки підписівпоказати керівні командипоказувати всі примітки у списках підписівпоказувати всі примітки під час перевірки підписівпоказувати дати завершення строків дії у списку підписівпоказати відбиток ключапоказувати лише основний ідентифікатор користувача під час перевірки підписівпоказувати адреси правил у списках підписівпоказувати адреси правил під час перевірки підписівпоказувати адреси основних серверів ключів у списках підписівпоказувати адреси основних серверів ключів у списках перевірки підписівпоказувати відкликані та застарілі підключі у списках ключівпоказувати відкликані та застарілі ідентифікатори користувачів у списках ключівпоказувати відкликані та застарілі ідентифікатори користувачів у списках перевірки підписівпоказати вибрані фотоідентифікаторипоказувати назву сховища ключів у списках ключівпоказати цю довідкову інформаціюпоказувати чинність ідентифікаторів користувачів у списках ключівпоказувати чинність ідентифікаторів користувача під час перевірки підписівпоказувати примітки користувача у списках підписівпоказувати вказані користувачем примітки під час перевірки підписівпідписати ключпідписати ключ локальнопідписати або редагувати ключпідписати вибрані ідентифікатори користувачів [* нижче наведено відповідні команди]підписати вибрані ідентифікатори користувача локальнопідписати вибрані ідентифікатори користувача підписом, який не можна відкликатипідписати вибрані ідентифікатори користувача підписом надійностіперевірку підписів придушено вже створено підписів: %lu підписано вашим ключем %s %s%s%s помилка під час спроби підписування: %s підписування підключа %s вже перехресно сертифіковано підписування:пропущено «%s»: %s пропущено «%s»: дублювання пропущено: відкритий ключ вже встановлено пропущено: відкритий ключ вже встановлено для типового отримувача пропущено: закритий ключ вже існує пропускаємо блок типу %d пропускаємо самопідпис v3 для ідентифікатора користувача «%s» окреме відкликання — скористайтеся командою «gpg --import» для застосування окремий підпис класу 0x%02x спроба зберігання ключа на картці зазнала невдачі: %s підключ %s не призначено для підписування, отже його не потрібно перехресно сертифікувати підпакет типу %d містить критичний набір бітів помилка під час спроби симетричного шифрування «%s»: %s системна помилка під час спроби виклику зовнішньої програми: %s взяти ключі з цього сховища ключівтекстовийвказана адреса правил сертифікації є некоректною вказана адреса основного сервера ключів є некоректною вказана адреса правил підписування є некоректною не вдалося перевірити підпис. Будь ласка, пам’ятайте, що файл підпису (.sig або .asc) має бути першим файлом, вказаним у командному рядку. маємо закритий ключ для відкритого ключа «%s»! це ключ Elgamal створений за допомогою PGP, цей ключ недостатньо безпечний для підписування!цей ключ вже було позначено як призначений для відкликання причиною цього може бути те, що немає самопідпису використання цього повідомлення щодо %s може бути неможливим на цій платформі слід використовувати тимчасові файли під час виклику зовнішніх програм конфлікт часових позначокперемкнутися між списками закритих і відкритих ключівувімкнути або вимкнути позначку примусового пінкоду підписузанадто багато записів переваг шифрів занадто багато записів переваг стискання занадто багато записів переваг контрольних сум занадто багато записів у кеші pk — вимкнено помилка бази даних довіризапис довіри %lu не належить до вказаного типу %d запис довіри %lu, тип запиту %d: помилка читання: %s запис щодо довіри %lu, тип %d: помилка записування: %s надійність: %sзапис trustdb %lu: помилка lseek: %s запис trustdb %lu: помилка запису (n=%d): %s занадто велика операція trustdb trustdb: помилка lseek: %s trustdb: помилка читання (n=%d): %s trustdb: помилка синхронізації: %s рівень довіри змінено на FULL (повна) через коректність даних PKA рівень довіри змінено на NEVER (ніколи) через помилки у даних PKA безмежнапоказ фотоідентифікатора неможливий! не вдалося виконати зовнішню програму не вдалося виконати програму «%s»: %s не вдалося виконати оболонку «%s»: %s не вдалося відкрити файл JPEG «%s»: %s не вдалося прочитати відповідь зовнішньої програми: %s не вдалося встановити шлях для запуску у значення %s не вдалося оновити запис версії trustdb: помилка запису: %s не можна використовувати шифр IDEA для всіх ключів, якими виконується шифрування. використання невідомої моделі довіри (%d) неможливе — припускаємо модель довіри %s розблокувати під коду за допомогою коду скиданняuncompressed|немаєне визначенонеочікуваний формат ASCII: неочікувані данінереалізований алгоритм шифруваннянереалізований алгоритм відкритих ключівневідомонекоректний заголовок ASCII: невідомий алгоритм шифруванняневідомий алгоритм стисненняневідомий пункт налаштувань «%s» невідомий типовий отримувач «%s» невідомий алгоритм контрольних сумневідомий алгоритм захисту ключа невідомий параметр «%s» невідомий тип пакетаневідомий алгоритм захисту невідомий алгоритм відкритого ключаневідомий клас підписівневідома версіянеприродний вихід з зовнішньої програми не вказанонепідтримувана адресанепридатний до використання алгоритм відкритого ключанепридатний до використання відкрити ключнепридатний до використання закритий ключоновити всі ключів з сервера ключівпомилка оновлення: %s спроба оновлення пароля зазнала невдачі: %s оновити базу даних довіривикористання: %sвикористання: gpg [параметри] використати файл для виведення данихвикористовувати канонічний текстовий режимспершу скористайтеся параметром «--delete-secret-keys» для його вилучення. строго використовувати стандарт OpenPGPвикористовувати тимчасові файли для передавання даних до допоміжних програм сервера ключіввикористовувати для створення підписів або розшифрування вказаний ідентифікаторідентифікатор користувача «%s» вже відкликано Ідентифікатор користувача: «%s» використовуємо модель довіри %s використано шифр %s використовуємо типовий пінкод як %s використовуємо підключ %s замість основного ключа %s перевірити підписи за допомогою даних PKAчинність: %sдокладністьперевірку адміністративного пінкоду заборонено цією командою помилка перевірки CHV%d: %s перевірити підписперевірити пінкод і показати список всіх данихочікуємо на блокування «%s»… слабкий ключстворено слабкий ключ — повторюємо спробу дивний розмір для зашифрованого ключа сеансу (%d) не буде запущено з помилками у захисті пам’яті через %s записування безпосереднього підпису записування підпису прив’язування ключа записування нового ключа записуємо відкритий ключ до «%s» спроба запису заглушки закритого ключа до «%s» спроба запису закритого ключа до «%s» записування самопідпису записуємо до «%s» записуємо до stdout використано помилковий закритий кодyYтТyes|такпідписування текстовим ключем можливе лише за допомогою ключів у форматі PGP 2.x у режимі --pgp2 підписування від’єднаним ключем можливе лише за допомогою ключів у форматі PGP 2.x у режимі --pgp2 шифрувати ключами RSA з розміром у 2048 бітів або менше лише у режимі --pgp2 від’єднані та текстові підписи можна створювати лише у режимі --pgp2 оновити записи перевад можна за допомогою команди: gpg --edit-key %s updpref save у режимі --pgp2 не можна одночасно підписувати і зашифровувати дані не можна призначати ключ власним підписаним відкликанням не можна використовувати комбінацію --symmetric --encrypt у режимі %s не можна використовувати комбінацію --symmetric --encrypt у режимі --s2k-mode 0 не можна використовувати комбінацію --symmetric --sign --encrypt у режимі %s не можна використовувати комбінацію --symmetric --sign --encrypt у режимі --s2k-mode 0 ви виявили ваду… (%s:%d) не можна використовувати %s у режимі %s не можна використовувати алгоритм шифрування «%s» у режимі %s не можна використовувати алгоритм стискання «%s» у режимі %s не можна використовувати алгоритм створення контрольних сум «%s» у режимі %s вам слід використовувати файли (не канали даних) під час роботи з увімкненим --pgp2. |AN|Новий адміністративний пінкод|A|Вкажіть адміністративний пінкод|A|Будь ласка, вкажіть адміністративний пінкод%%0A[залишилося спроб: %d]записувати до дескриптора файла дані щодо стану|NAME|зашифрувати для вказаного імені|N|Новий пінкод|N|встановити рівень стискання (0 — вимкнути стискання)|RN|Новий код скидання|[file]|створити текстовий підпис|[file]|створити підпис|algo [files]|вивести контрольні суми повідомлень||Вкажіть пінкод||Будь ласка, вкажіть пінкод%%0A[підписів: %lu]||Вкажіть код скидання коду карткиgnupg-1.4.20/po/ru.gmo0000644000175000017500000054540012635457221011426 00000000000000(Q0l-1l_llmnnn o%oBo_o|oo2o7o2!p#TpDxp.pIp76q'nqq qqqq r&rCr`ryrr+r&r#r(sHsaszss(ssst$4tYtot&tt,ttu!)uKuau|uu uu uuuv#v5vFv`v}v*v"v]vBFww/w=w( x.3x3bx!x(xxx'y,yJy]ywyyy,y'yz0z"IzlzqzzBz=z){"H{%k{&{!{%{"|##|'G| o|||||| }(}$F}k}}#}}$}}~!:~\~y~ ~~&~%~ ,*4Wg~ƀ'ڀ<Na t'"ԁ-&(T0}2H * 4 ANlA/0.\_1D-H0v.Iֆ* +K'w ćՇ #8?Y3p4-'ɉ. $) N X?f4:ۊ5So,(ˋ8#-&Q(x&Ȍߌ 76M-%3؍9 0F<wG@>=+|=";Q a:m#ߐ /%Uj;HU-$̒'8&R5y.5ޓ*!?.a0&,/ KV8i#ƕߕ". 8Hі"(=$fE1ї;՘™8$?SkA+>ZmB'7I%`.՝* Þ*!֟0')<Q+"ՠ,/%1U","ס2- I(j *+DVs գ5i"¤(ߤ7UuF Υ1%!GgEELo  #D8Ԩ' >5tc/hNE,-"Z#}-+ϫ)&%L/'6^'@Rbk+,̯3 -19k(#+ΰ"+"I l?%"5I[x.( }-/ڴ0 ;P!i!¶ض%%8^sjK@e-Ը9aO0/5L'.3ٺ- ;L(C!Y{$,(&-FtWt *+.J c#$ @ [6e%72Gr>:1y=I43h#=.?8Dx@+1*N\II5?5u;?B'<jH-"HA?T<oB)C:].>2=9<w@FH<U$ -!2O1I>K=@5*7+,c004 '2H{:|65.$Shs*&1.#`2>*=0MB90"&!E3g>c%>Dd,5 2-_`   ! +8 I T`y%")&%+L5x .L [fB5$>FN^fu (1Gb"y ,'A.i%2+.CTi%5#9B U;c<*$ ?Id|:4J`v&- <AL(/ 8D1`,FHd %/00.a&3  %2R0p$=%!#G-k '#>Yl'&D\{&&  /( Xd,/"9K:%$&$#:D^' #3E1V$@1 6$Di!D+%/Q 60/K"]&(%%$$I Zh.2Qi}'/5+Kw$&$' ,2,_> +$C,hIJ*Jg"# !-Hd*~- $' 0.Q"+)#-=%k65/."N'q;0"!%D/j2!: Y!z!(+8L!i40 2'6Z)9 & GG H B  7 W s #      3 P k         # > W q   '    . A S (\ 2 !   ,BE cq w$) #%B%h,23!U&j"1 !)Ki~%%  % 0 > L#m& )$<3p6,>;[#M -$Rn"-!+;&g*56&!C&e$2 I"Fl+C_y01##+>+j,!2$3X*g2. (*Alt  %%&Bi$#&$43E%y*%$(D-m96: G ,[ 0 /  7 *6!.a!7!;!0"15";g""%"")"3#6N#:# ###9#+$5J$-$"$$ $%-&%T%]%o% %5%$%&+ &4L&%&!&C&* '(8'0a'''.'-'*(C(+(G)2H)/{)%)F)*1+*#]**!**(*+-+/I+,y+ +"+)++, 7,X,2r,1,,,#,#!-!E-"g----:-I.A\.".. ...//>/F/]/v/ ///!/ 0"060T0m00#0 00001 181K1e1 111161252#S2 w22222*2!3 43A3GI333 3334-!4,O4|4444 45575H5[5q5t5Dx5F5E6DJ6E6A6776O777=7>7;8$X87}8<878F*9q9999 99 :$:C:#V:z:#::*:*:[$;d<<j=EL?:?@(@/A/BA1rA4A2A2 B4?B8tBAB;Bs+CFCnCYUDDD0D %E)1E%[E+E8E7E7F*VF2FFuFmFGgGAH1^HH;H7HAI1^I-I)I8I!J%AJ7gJ-JDJ5KHK:cK(K,K(K$LBL3QLL,L>L$M#'MKM0gM=MBM>N-XNN;O!OcOwDPCPUQoVQGQ^R&mRRHR<R<"S4_S<SSSGTMJT'T!T:TU*"U MUnUV.VBV?WGDWDWGW3X<MX>X1X8X94YHnY/YEY-ZNIZCZ1Z.[D=[=[=[D[BC\V\B\E ]3f],]?]7^?^MY^j^_%`<`9Q``)`B` a)aGa(Yaa a'aaJa:@b{bPb@bl,c2cec2deeRfEWfJf,fogPgVg-hhh"ciqiHiAAjEjnjJ8kLkTk"%l%Hl:nl>l4l:m&Xm m%m-mfmGnkfnYnU,o9pDp%q='qeq!~qRqRq[FrSr?r66s%ms%s]sWtDotPtTu@ZuJu"u$ v%.vTvdlvavY3w6w]wi"xax}xolypyPMzPzzs{.{{5{S{@R|||p|+9}Ge}'}(}3}h2~%~~&qfSFځx!Dy߂ZYsE(BnV`HiY3 1@r$d$5@vY_H=_ɉK)Au^k|@4ЎMkSL% 2!L:n?W#A e=*ē.0On3,F$_*I)+?&kdIi?hE?Xfr2H)Sr}Ɯ[D_J_Kc`[p<̟B ML e !!"C/f1:ȡ4:8Fs"ݢn<e>V"84[6,ǥ%LUGT/]̧*nB]4իQԬU&c|DZxQ@B1,t=$߱2V7G4|:~</#&J"g,-Wi=e$ S21TI iWVk\X5:pL B+c,!:޽<;VX90%V-L,zP\U2'CZ!A'2=2p/!:(0Yy)$TITjLc 3pGTLA h4&8)_I+fjf]/8*5:`z%2=X2`_>H.F?]0?CER5CFYlH)9pcpE.rTrc+aTCpsx()znFKA[{eiaoaomA7RK] l<^kZsU|kqkZcx*NCONSZYWoeeqqcg^RwJ _W/SIC%m i; @ FT V X xK P Q gg \ a,iRBKUBa' Np-GV=WXk/ )?]n7> M_GQLG])3&Pw,1W'N$vNdm_?2r!$&& ? O]    < F!"`!&!3!&!L"5R"E"f"N5#Q#X#j/$\$`$aX%5%9%"*&&M&Ft&8&X&*M'/x'c'( (5(,F(s(O((BW)')B)*2*GP**5*5*-"+`P+:+3+A ,&b,!,@,/,>-X[-%-w-R.6.*/O60du0W0?21$r1121=1O"2;r2q2! 3B3^3Ro3\3Q4Wq434O4cM55Q5#!6>E606W68 7FF7g7I7H?8P8'8C9AE9L9M9<":_:2y:#:<:0 ;6>;Lu;A;#<9(<?b<P<P<<D====h='0>FX>k>[ ?Cg?w?#@F@MACOA<A-A5A4BBDB(&C(OC(xCC(C$C4 D%BDUhDUDE1E-E,E F"FC:F/~F0F0F.G+?GkG<GM*H xHWH}HYIDbI]I:JG@JUJ@JqK;KKMK)4L8^L@LjL6CMNzMNMJNTcN=N#N4O;OOZO4OOPqkP;PPQ#jQ(QVQmRa|RNRW-SIS*S=Si8TAT$T4 UK>UeUU{V1W38W<lW3W5W>X@RX.X.X;X&-YETYMYY:YH4Z?}ZcZM![Ro[V[G\@a\n\E]aW]_]c^D}^:^L^4J_w_n_Nf`N`Yaa^a0aFaM8bfb4bE"c=hc]cQdiVd@d=ef?e_e-f?4fitf\fa;gg%#h0Ih4zhh9ii<{j:j2j0&k=Wk6k(k>kF4lH{lBlDmKLmMmCm**n5Un@nGn(oE=o<o:o:o96p2ppip q.q;=qPyqOqr63rKjrAr@r/9sLiss5sstt7$tN\t tNtuJuauIuuEuQv8WvSv?vi$wiwMwUFx8x%xpx#ly+y/yIy96z)pzNz_z_I{){{{!|)|!A|2c|?||@|}H,}1u}C}j}+V~6~G~TZV]9I=΀P 6]h5\3O`.ANp]2?P=V΄M%Ms3EN;\+k1#ԇT&و0,Iv-*؉0W4UKK.QzŰS">vd'9B!|8Q׍L)$vD?Q r/ ɏ 8 D*].5Ԑ! B,+o<<ؑ,5VbD<6;)r'7ē_p\͔^[f@!MbUM.TqBH8t|os|`HZ0,jv#gor,=rRlla,3%Ÿ5+ZJ*ҠJ~HDǡ& O3q6=,|jUB=VMפ%J8c@(T٦|.?KS72jICDV=PU-;QiXMbDuRQ 2_@Gӭvw GCg=;4%RZE{tHu޲7#3DWP><C4TI ,T@-µ*5HQ0#˶P@%RGx00A")dG.ָ5")XONҹ:!c\{7<"t2Bʻ= QK7$ռ +!>ܽ+G:]`Y)S3}%;׿N;b$I=@|I~rE|n5j^On_Vfu?<]YU^ l36#_ZT=MS_"F32Q/6XYzDP BY/I^hZM45#, V{j!@ylfK=y:nAw=DK  GxTfl9 dwsaj}^:P@<f>]UREGOat'.9i%` "swn8&d% Rr4ecD~?_  &L$C86.FL7gd+2p`7U|$H_;NHT_?"kc0c;|(-Q>yBoSNzZ[$[,#3 [( r#%GN}|A p)A8UDL%; [j+zA#kxg72.Szo@_Pvn7vl>SA5+{ Wc56^ 2E@~gtdj&~*7MyguyF?i3sR0W}=OtBk8J,ZVZ- ^h4J!: sCo%(o$? 9<h /I+m? {FT P'mB.b<1rQ]1*V=|Kbp<'qbKO:=}\qXFeOXu8-J`T|W/.NI+IFB)<`4M]6]e$mv`f16s\V }'H]"qj[  3)a\xZ4OKVp!6/D~39m/(rQ hE-*tuiHvC!YMfWr":^olcWk>#ULEz@1w-SCxqee,ln0iGuv\ ~Q029SxJYba>5i\J  ( wEab10PLC&5" H)Y  UQ;X_M)Rhgn'k2q!d3{X;tIT N  *pR{,uG*&m Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: Your encryption subkey expires soon. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You may want to change its expiration date too. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: GnuPG 1.4.18 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2015-06-25 17:16+0200 Last-Translator: Ineiev Language-Team: Russian Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Введите ID пользователя. Пустая строка для завершения: Недостаточно случайных чисел. Займитесь какой-нибудь другой работой, чтобы ОС могла получить больше случайных данных! (Нужно еще %d байт) Выберите изображение для Вашего фотоидентификатора. Это должен быть файл JPEG. Помните, что изображение будет храниться в Вашем открытом ключе и увеличит его размер! Рекомендуется размер около 240x288. Поддерживаются следующие алгоритмы: Для идентификации Вашего ключа необходим ID пользователя. Программа создаст его из Вашего имени, комментария и адреса электронной почты в виде: "Baba Yaga (pensioner) " или "%s" ключом %s с ID %s импортировано: %lu неизмененных: %lu новых подключей: %lu новых ID пользователя: %lu не импортировано: %lu без ID пользователя: %lu "%s": предпочитает шифр %s "%s": предпочитает сжатие %s "%s": предпочитает хэш-функцию %s (подключ на главном ключе %s) Нет уверенности в том, что подпись принадлежит владельцу. Возможно, что подпись ПОДДЕЛАНА. Нет указаний на то, что подпись принадлежит владельцу. Это может означать, что подпись поддельная. алгоритмов для этих ID пользователей: новых подписей: %lu "%s" Серийный номер карты = Отпечаток ключа = Отпечаток подключа: считано закрытых ключей: %lu пропущено новых ключей: %lu очищено ID пользователей: %lu Отпечаток подключа: очищено подписей: %lu (%c) Завершено (%c) Переключить возможность использования для аутентификации (%c) Переключить возможность использования для шифрования (%c) Переключить возможность использования для подписи (%d) DSA (с требуемыми возможностями) (%d) DSA (только для подписи) (%d) DSA и Elgamal (%d) Elgamal (только для шифрования) (%d) RSA (только для шифрования) (%d) RSA (с требуемыми возможностями) (%d) RSA (только для подписи) (%d) RSA и RSA (по умолчанию) (0) Не буду отвечать.%s (1) Никакой проверки не было.%s (1) Ключ подписи (2) Ключ шифрования (2) Была частичная проверка.%s (3) Ключ аутентификации (3) Проверка была очень тщательной.%s новых отзывов ключей: %lu %d = НЕ доверяю %d = Не знаю или не буду отвечать %d = Полностью доверяю %d = Доверяю ограниченно %d = Абсолютно доверяю Не могу подписать. или "%s" m = вернуться в главное меню q = выход s = пропустить этот ключ импортировано закрытых ключей: %lu (ID главного ключа %s) (неэкспортируемая) (неотзываемая) Отпечаток главного ключа: неизмененных закрытых ключей: %lu "%s" не идентификатор ключа: пропущен "%s" уже локально подписан ключом %s "%s" уже подписан ключом %s # Список присвоенных значений доверия создан %s # (Используйте "gpg --import-ownertrust" для их восстановления) осталось %d попыток ввода административного PIN перед блокировкой карты %d плохих подписей %d ключей обработано (%d счетчиков пригодности очищено) требуется %d с ограниченным доверием, %d с полным, модель доверия %s %d подписей не проверено из-за ошибок %d подписей не проверено за отсутствием ключей обнаружено %d ID пользователя без действительной самоподписи %lu ключей помещено в буфер (%lu подписей) %lu ключей помещено в буфер за это время (%lu подписей) обработано %lu ключей %s ... %s не поддерживает версию обработчика %d %s пока не работает совместно с %s! данные зашифрованы алгоритмом %s сеансовый ключ зашифрован %s будет использовано шифрование %s %s - новый %s - без изменений длина ключей %s может быть от %u до %u бит. размер ключей %s должен быть в пределах %u-%u %s с %s не имеет смысла! %s с %s недопустимо! подпись в %s форме, хэш-функция %s %s. %s/%s зашифровано для: "%s" %s/%s подпись от: "%s" %s: Мало свидетельств того, что данный ключ принадлежит названному пользователю %s: Нет свидетельств того, что данный ключ принадлежит названному пользователю %s: каталог не существует! %s: ошибка чтения свободной записи: %s %s: ошибка чтения записи о версии: %s %s: ошибка обновления записи о версии: %s %s: ошибка внесения записи каталога: %s %s: ошибка сохранения записи о версии: %s %s: сбой добавления записи: %s %s: сбой создания таблицы хэшей: %s %s: сбой создания записи о версии: %s%s: сбой обнуления записи: %s %s: неправильная версия файла %d %s: непригодная таблица доверия %s: создана непригодная таблица доверия %s: таблица ключей создана %s: не является файлом таблицы доверия %s: пропущено: %s %s: пропущено: открытый ключ уже существует %s: пропущено: открытый ключ отключен %s: создана таблица доверия %s: неизвестное окончание %s: запись о версии с номером записи %lu %s:%d: параметр "%s" не рекомендуется %s:%d: недопустимый список auto-key-locate %s:%d: недопустимые параметры экспорта %s:%d: недопустимые параметры импорта %s:%d: недопустимые параметры для сервера ключей %s:%d: недопустимый список параметров %s:%d: недопустимые параметры проверки %u-битный ключ %s, ID %s, создан %s(Пояснения отсутствуют) (Скорее всего, Вы здесь выберете %d) (Это особо важный ключ отзыва) (особо важный)(если только Вы не задали ключ отпечатком) (возможно, Вы используете для этой задачи не ту программу) * У команды `sign' может быть приставка `l' (локальные подписи, lsign), `t' (подписи доверия, tsign), `nr' (неотзываемые, nrsign) или любое их сочетание (ltsign, tnrsign и т.д.). --clearsign [файл]--decrypt [файл]--edit-key [ID пользователя] [команды]--encrypt [файл]--lsign-key [ID пользователя]--output для данной команды не работает --sign --encrypt [файл]--sign --symmetric [файл]--sign [файл]--sign-key [ID пользователя]--store [файл]--symmetric --encrypt [файл]--symmetric --sign --encrypt [файл]--symmetric [файл]-k[v][v][v][c] [ID пользователя] [таблица ключей] ... это ошибка в программе (%s:%d:%s) 1 плохая подпись 1 подпись не проверена за отсутствием ключа 1 подпись не проверена из-за ошибки обнаружен 1 ID пользователя без действительной самоподписи 12 translator see trustdb.c:uid_trust_string_fixed@ (Полный список команд и параметров см. в документации) @ Примеры: -se -r Bob [файл] подписать и зашифровать для получателя Bob --clearsign [файл] создать текстовую подпись --detach-sign [файл] создать отделенную подпись --list-keys [имена] показать ключи --fingerprint [имена] показать отпечатки @ Параметры: @Команды: Для вывода использован текстовый формат ASCII. Команды администрирования разрешены Команды администрирования не разрешены Команды администратора Ответьте "yes" (или только "y"), если Вы готовы создавать подключ.Ответьте "yes", если Вы готовы удалить подключОтветьте "yes", если хотите записать поверх файлаОтветьте "yes", если Вы действительно хотите удалить данный ID пользователя. Все сертификаты также будут потеряны!Ответьте "yes", если Вы хотите подписать ВСЕ ID пользователяОтветьте "yes" или "no"Вы уверены, что хотите подписать этот ключ своим ключом "%s" (%s)? Вы уверены, что хотите добавить это? (y/N) Вы уверены, что хотите отозвать? (y/N) Вы все равно хотите его подписать? (y/N) Вы уверены, что хотите назначить данный ключ отзывающим? (y/N) Вы действительно хотите удалить его? (y/N) Вы действительно хотите заменить его? (y/N) Вы действительно хотите использовать его? (y/N) АутентифицироватьПЛОХАЯ подпись от "%s"отпечаток центра сертификации: ошибка контрольной суммы; %06lX - %06lX Не могу проверить подпись: %s Данный ключ не редактируется: %s Не могу открыть `%s': %s ОтменаИмя владельца карты:Фамилия владельца карты:Сертификаты, приводящие к абсолютно доверенному ключу: СертифицироватьСменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход? Сменить (N)Имя, (C)Комментарий, (E)адрес или (Q)Выход? Изменение предпочтений для всех ID пользователя (или только для выбранных) на текущий список предпочтений. Метка времени на всех затронутых самоподписях будет увеличена на одну секунду. Смена срока действия подключа. Смена срока действия главного ключа. Симметричные шифры: Команде нужен аргумент-имя файла Комментарий: Алгоритмы сжатия: Создать сертификат отзыва данного ключа? (y/N) Создать сертификат отзыва данного ключа? (y/N) Создать сертификат отзыва для данной подписи? (y/N) Критический предпочтительный сервер ключей: Критическое примечание к подписи: Критические правила подписи: Допустимы действия: Текущие получатели: Ключ DSA %s требует %u-битного или более длинного хэша Ключ DSA %s использует небезопасный (%u-битный) хэш DSA требует длины хэша, кратной 8 битам Удалить данную действительную подпись? (y/N/q)Удалить данную недействительную подпись? (y/N/q)Удалить данный ключ из таблицы? (y/N) Удалить данную неизвестную подпись? (y/N/q)Удалена %d подпись. Удалено %d подписей. Отделенная подпись. Хэш-функции: Показ фотоидентификатора %s размера %ld для ключа %s (uid %d) Вы действительно хотите удалить выбранные ключи? (y/N) Вы действительно хотите удалить данный ключ? (y/N) Вы все равно хотите этого? (y/N) Вы действительно хотите отозвать ключ целиком? (y/N) Вы действительно хотите отозвать выбранные подключи? (y/N) Вы действительно хотите отозвать данный подключ? (y/N) Вы действительно хотите сделать этот ключ абсолютно доверенным? (y/N) Вы хотите сделать новую подпись для замены просроченной? (y/N) Вы хотите сделать это полностью экспортируемой подписью? (y/N) Вы хотите сделать это самоподписью OpenPGP? (y/N) Вы все равно хотите снова подписать его? (y/N) Вы хотите, чтобы Ваша подпись была действительна до того же времени? (Y/n) ОШИБКА: Адрес электронной почты: ЗашифроватьВведите административный PIN: Введите имя файла JPEG для фотоидентификатора: Введите новый административный PIN: Введите новый PIN: Введите PIN: Введите необязательное пояснение; закончите пустой строкой: Введите новое имя файлаВведите числа, N) Следующий или Q) Выход> Введите фразу-пароль Введите фразу-пароль: Введите имя владельца ключаВведите новую фразу-пароль для данного закрытого ключа. Введите примечание: Введите требуемое значение, как показано в подсказке. Можно ввести дату в формате ISO (ГГГГ-ММ-ДД), но Вы не получите уведомление при ошибке в формате - вместо этого система попробует интерпретировать введенное Вами значение как интервал.Введите размер ключаВведите ID пользователя адресата, которому Вы хотите отправить сообщение.Укажите ID пользователя ключа, назначенного отзывающим: Введите URL предпочтительного сервера ключей: Ошибка чтения архивного ключа из `%s': %s Ошибка: Слишком длинное скомбинированное имя (предел %d символов). Ошибка: Двойные пробелы недопустимы. Ошибка: Слишком длинные данные учетной записи (предел %d символов). Ошибка: Сейчас допустим только простой текст ASCII. Ошибка: Слишком длинные секретные данные DO (предел %d символов). Ошибка: Нельзя использовать символ "<" Ошибка: таблица доверия повреждена. Ошибка: URL слишком длинный (предел - %d символов). Ошибка: недопустимые символы в строке предпочтений. Ошибка: недопустимый формат отпечатка. Ошибка: недопустимая длина строки предпочтений. Ошибка: недопустимый ответ. Просроченная подпись от "%s"Характеристики: Файл `%s' существует. Введите имя файла, к которому относится данная подписьПишите сообщение ... Действительная подпись от "%s"Хэш-функции: Подсказка: Выберите ID пользователей для подписи По готовности нажмите Enter, или введите 'c' для отмены: Насколько хорошо Вы проверили, что ключ действительно принадлежит указанному выше человеку? Если не знаете, что ответить, введите "0". Насколько Вы уверены, что данный ключ принадлежит названному пользователю? Мной проведена поверхностная проверка этого ключа. Этот ключ проверен мной очень тщательно. Этот ключ мной никак не проверялся. шифр IDEA недоступен, попробую использовать взамен %s Если это не выйдет, обратитесь к руководству пользователя Если хотите, Вы можете ввести здесь текст с указанием причины создания сертификата отзыва. Будьте кратки. Для завершения введите пустую строку. Если Вы хотите использовать данный недоверенный ключ - ответьте "yes".Обычно не рекомендуется использовать один ключ для подписи и шифрования. Данный алгоритм следует использовать только в определенных случаях. Прежде всего проконсультируйтесь со своим экспертом по безопасности.Недопустимый символ в комментарии Недопустимый символ в имени Недопустимая команда (список команд: "help") Параметр --allow-non-selfsigned-uid сделал дефектный ключ %s пригодным Неверная фраза-пароль; попробуйте еще разНеправильный выбор. Все верно? (y/N) Все правильно? (y/N) Это правильная фотография (y/N/q)? НЕТ уверенности в том, что ключ принадлежит человеку, указанному в ID пользователя ключа. Если Вы ТОЧНО знаете, что делаете, можете ответить на следующий вопрос утвердительно. Вы можете ввести здесь значение; оно никогда не экспортируется на сторону. Оно необходимо для реализации сети доверия и не имеет никакого отношения к (неявно созданной) сети сертификатов.Ключ %s уже отозван. Ключ доступен на: Срок действия ключа не ограничен Ключ действителен до %s Создание ключа прервано. Сбой при создании ключа: %s Ключ был раскрытВ ключе только заготовка или элементы для карты - пароля для изменения нет. Ключ больше не используетсяКлюч защищен. Ключ отозван.Ключ заменен другимСрок действия ключа? (0) Ключ не изменялся - обновление не нужно. Таблица ключейНе изменять на сервереПредпочтительный язык: Учетная запись (имя): Сделать архивную копию ключа шифрования вне карты? (Y/n) N изменить имя. C изменить комментарий. E изменить адрес электронной почты. O продолжить создание ключа. Q выйти и прервать создание ключа.ЗАМЕЧАНИЕ: %s недоступен в данной версии ЗАМЕЧАНИЕ: %s не предназначен для нормального применения! ЗАМЕЧАНИЕ: Нет никакой гарантии, что карта поддерживает запрошенный размер. Если сгенерировать ключ не удастся, сверьтесь с документацией на карту и выясните, какие размеры допустимы. ЗАМЕЧАНИЕ: эта функция недоступна в %s ЗАМЕЧАНИЕ: Данный ключ не защищен! ЗАМЕЧАНИЕ: серийный номер ключа не соответствует номеру ключа на карте ЗАМЕЧАНИЕ: архивная копия ключа на карте сохранена в `%s' ЗАМЕЧАНИЕ: создание подключа для ключей v3 не совместимо с OpenPGP ЗАМЕЧАНИЕ: ключ был отозванЗАМЕЧАНИЕ: ключи уже хранятся на карте! ЗАМЕЧАНИЕ: файл конфигурации `%s' не обнаружен ЗАМЕЧАНИЕ: старый файл конфигурации по умолчанию `%s' проигнорирован ЗАМЕЧАНИЕ: главный ключ готов и сохранен на карте ЗАМЕЧАНИЕ: вторичный ключ готов и сохранен на карте ЗАМЕЧАНИЕ: закрытый ключ %s просрочен с %s ЗАМЕЧАНИЕ: отправитель запросил "только между нами" ЗАМЕЧАНИЕ: срок действия подписавшего ключа %s истек %s ЗАМЕЧАНИЕ: простой режим S2K (0) строго противопоказан ЗАМЕЧАНИЕ: таблица доверия недоступна для записи Имя не должно начинаться с цифры Имя не должно быть короче 5 символов Для данного действия нужен закрытый ключ. NnCcEeOoQqНет соответствующей подписи в таблице закрытых ключей Справки нетНет справки для `%s'Причина не указанаНет подключа с индексом %d Нет такого ID пользователя. Не задано значение доверия для: Нет ID пользователя с хэшем %s Нет ID пользователя с индексом %d Неправильный адрес электронной почты Вами не подписано. Примечания: Учтите, что данный ключ не может использоваться для шифрования. Вы можете воспользоваться командой "--edit-key" и создать подключ для этих целей. Замечание: Адрес подписавшего `%s' не соответствует данным DNS Замечание: Данный ключ отключен. Замечание: Данный ключ просрочен! Замечание: Проверенный адрес подписавшего - `%s' Ничего не удалено. Нечего подписывать ключом %s Обнаружена карта OpenPGP номер %s Карта OpenPGP недоступна: %s Записать поверх (y/N)? Нельзя присваивать степень доверия, когда таблица доверия указана пользователем Функция обработки PIN возвратила ошибку: %s PIN для CHV%d слишком короток, минимальная длина %d PIN повторен неверно; попробуйте еще разСначала исправьте ошибку Укажите, насколько Вы доверяете данному пользователю в вопросах проверки достоверности ключей других пользователей (проверяет паспорт, сверяет отпечатки ключей из разных источников и т.п.) Не вставляйте адрес электронной почты в имя пользователя или комментарий Введите домен, ограничивающий использование данной подписи, или пустую строку, если нет ограничений. Введите новое имя файла. Если Вы нажмете только Enter, будет использован по умолчанию тот файл, который показан в квадратных скобках.Введите необязательный комментарийВведите имя файла с данными: Введите глубину этой подписи доверия. Глубина, большая 1, позволяет ключу, который вы подписываете, делать подписи доверия от вашего имени. Введите фразу-пароль (это секретная строка) Исправьте эту возможную прореху безопасности Вставьте карту и нажмите Enter или введите 'c' для отмены: Обратите внимание: заводские установки PIN PIN = `%s' Admin PIN = `%s' Вам следует изменить их командой --change-pin Учтите, что показанная действительность ключа может быть неверной, пока Вы не перезапустите программу. Снимите выделение с закрытых ключей. Извлеките текущую карту и вставьте карту с серийным номером: %.*s Повторите фразу-пароль, чтобы убедиться в том, что она набрана правильно.О найденных ошибка сообщайте на . Выделите не более одного подключа. Выберите ровно один ID пользователя. Укажите причину отзыва: Выберите тип создаваемого ключа: Выберите тип ключа: Выберите, где хранить ключ: Выберите срок действия ключа. 0 = без ограничения срока действия = срок действия - n дней w = срок действия - n недель m = срок действия - n месяцев y = срок действия - n лет Выберите срок действия подписи. 0 = подпись без ограничения срока действия = срок действия подписи - n дней w = срок действия подписи - n недель m = срок действия подписи - n месяцев y = срок действия подписи - n лет Сначала воспользуйтесь командой "toggle". Программа собирает случайные данные. Это займет какое-то время. Делайте что-нибудь, чтобы не скучать; это повысит качество случайных данных. Возможные действия для ключа %s: Предпочтительный сервер ключей: Отпечаток главного ключа:Секретные данные DO:Продолжить (y/N)? С открытым ключом: Открытый ключ отключен. Выйти без сохранения? (y/N)Модуль RSA пропущен или его размер не равен %d бит Простое число RSA %s пропущено или его размер не равен %d бит отсутствует открытая экспонента RSA или превышает %d бит Ваше настоящее имя: Действительно создать сертификат отзыва? (y/N) Действительно создать? (y/N) Действительно удалить данную самоподпись? (y/N)Действительно удалить главный ключ? (y/N) Действительно удалить все выбранные ID пользователей? (y/N) Действительно удалить этот ID пользователя? (y/N) Действительно отозвать все выбранные ID пользователей? (y/N) Действительно отозвать данный ID пользователя? (y/N) Действительно подписать все ID пользователя? (y/N) Действительно подписать? (y/N) Действительно обновить предпочтения для выбранных ID пользователей? (y/N) Действительно обновить предпочтения? (y/N) Причина отзыва: %s Повторите фразу-пароль Повторите фразу-пароль: Повторите ввод PIN: Заменить существующий ключ? (y/N) Заменить существующие ключи? (y/N) Запрошенный размер ключа - %u бит Код сброса слишком короток; минимальная длина %d Код сброса (больше) не доступен Сертификат отзыва создан. Сертификат отзыва создан. Поместите его в надежное место; если посторонний получит доступ к данному сертификату, он может использовать его, чтобы сделать Ваш ключ непригодным к использованию. Можно распечатать данный сертификат и спрятать подальше на случай, если Ваш основной носитель будет поврежден, но будьте осторожны: система печати Вашей машины может сохранить данные и сделать их доступными для других! Сохранить изменения? (y/N) Закрытый ключ доступен. Закрытые части главного ключа отсутствуют. Закрытые части главного ключа сохранены на карте. Выберите алгоритм. DSA (он же DSS), Digital Signature Algorithm, может использоваться только для подписей. Elgamal - алгоритм, используемый только для шифрования. RSA может использоваться и для подписи, и для шифрования. Первый (главный) ключ всегда должен быть подписывающим.Установить предпочтения в: Пол ((M)Мужской, (F)Женский или пробел): ПодписатьПодписать его? (y/N) Срок действия подписи не ограничен Подпись просрочена %s Подпись действительна до %s Подпись действительна до %s Срок действия подписи? (%s) Подпись сделана %s Подпись создана %s ключом %s с ID %s Примечание к подписи: Правила подписи: 11223300Подключ %s уже отозван. Синтаксис: gpg [параметры] [файлы] подписать, проверить, зашифровать или расшифровать операция по умолчанию зависит от входных данных Синтаксис: gpgv [параметры] [файлы] Проверка подписей по доверенным ключам Теперь карта будет переконфигурирована на генерацию ключа длиной %u бит Минимальный уровень доверия данному ключу: %s Генератор случайных чисел - это только заглушка для того, чтобы программа могла работать. Он не может применяться для генерации надежных случайных чисел! НЕ ПОЛЬЗУЙТЕСЬ НИКАКИМИ ДАННЫМИ, СОЗДАННЫМИ ЭТОЙ ПРОГРАММОЙ!! Самоподпись у "%s" - это подпись типа PGP 2.x. Подпись недействительна. Это дает основания удалить ее из Вашей таблицы ключей.Подпись будет помечена как неэкспортируемая. Подпись будет помечена как неотзываемая. В ID пользователя типа PGP 2.x не может быть предпочтений. Этот JPEG очень велик (%d байт)! Данная команда недопустима в режиме %s. Эта команда доступна только для карт версии 2. Это закрытый ключ! - все равно удалить? (y/N) Данная подпись является самоподписью и привязывает ID пользователя к ключу. Обычно плохая идея удалять такую подпись. На самом деле GnuPG не смог бы больше использовать такой ключ. Делайте это, только если данная самоподпись по каким-то причинам недействительна и есть другая самоподпись.Это действительная подпись на ключе; обычно не желательно удалять такие подписи, потому, что она может быть важна для установления достоверности ключа или других ключей подписанных данным ключом.Данный ключ принадлежит нам Данный ключ отключенДанный ключ просрочен!Срок действия данного ключа истекает %s. Данный ключ не защищен. Данный ключ может быть отозван пользователем %s ключом %sЭтот ключ, вероятно, принадлежит названному пользователю Данный ключ был отозван %s пользователем %s ключом %s Данная подпись не может быть проверена, потому что у Вас нет соответствующего ключа. Вы можете отложить ее удаление, пока не узнаете, какой ключ был использован, т.к. эта подпись может устанавливать достоверность через другие, уже удостоверенные ключи.Срок действия подписи истек %s. Это будет самоподпись. Ключ стал бы несовместим с PGP 2.x. Будет отозван: Для построения Сети доверия GnuPG должен знать, к каким ключам имеется абсолютное доверие - обычно это ключи, для которых у Вас есть закрытый ключ. Ответьте "yes" для присвоения абсолютного доверия данному ключу Всего обработано: %lu URL для получения открытого ключа: Без сжатияНеизвестный тип подписи `%s' Использование: gpg [параметры] [файлы] (-h для подсказки)Использовать: gpgv [параметры] [файлы] (-h для подсказки)Все равно использовать данный ключ? (y/N) ID пользователя "%s" сжат: %s Срок действия ID пользователя "%s" истек.ID пользователя "%s" не самоподписан.ID пользователя "%s" отозван.ID пользователя "%s" можно подписать.ID пользователя "%s": %d подпись удалена ID пользователя "%s": %d подписей удалено ID пользователя "%s" уже очищен ID пользователя "%s" уже минимизирован ID пользователя больше не действителенВНИМАНИЕ: ВНИМАНИЕ: команда "%s" не рекомендуется к употреблению - не применяйте ее ВНИМАНИЕ: параметр "%s" не рекомендуется ВНИМАНИЕ: %s заместит %s ВНИМАНИЕ: Существуют 2 файла с конфиденциальной информацией. ВНИМАНИЕ: Ключи для подписи+шифрования Elgamal не рекомендуются ВНИМАНИЕ: Это ключ типа PGP 2.x. Добавление особого отзывающего ключа может в некоторых версиях PGP вызвать выбраковку ключа. ВНИМАНИЕ: Это ключ PGP2. Добавление фотоидентификатора может в некоторых версиях PGP вызвать отбраковку ключа. ВНИМАНИЕ: Данный ключ отозван ключом, назначенным отзывающим! ВНИМАНИЕ: Данный ключ отозван его владельцем! ВНИМАНИЕ: Данный ключ не заверен доверенной подписью! ВНИМАНИЕ: Этот ключ не заверен достаточным количеством доверенных подписей! ВНИМАНИЕ: Данный подключ был отозван его владельцем! ВНИМАНИЕ: Использование недоверенного ключа! ВНИМАНИЕ: НЕТ ДОВЕРИЯ данному ключу! ВНИМАНИЕ: обнаружен слабый ключ - смените фразу-пароль еще раз. ВНИМАНИЕ: Срок действия Вашего подключа для шифрования истекает. ВНИМАНИЕ: файл `%s' пуст ВНИМАНИЕ: подпись ID пользователя датирована %d секундами в будущем ВНИМАНИЕ: назначение ключа отзывающим невозможно отменить! ВНИМАНИЕ: алгоритм шифрования %s не найден в списке предпочтений получателя ВНИМАНИЕ: хэш-функция %s не рекомендуется ВНИМАНИЕ: зашифрованное сообщение было изменено! ВНИМАНИЕ: сжатие алгоритмом %s (%d) нарушает предпочтения получателя ВНИМАНИЕ: использование хэш-функции %s (%d) нарушает предпочтения получателя ВНИМАНИЕ: использование симметричного шифра %s (%d) нарушает предпочтения получателя ВНИМАНИЕ: недопустимый размер файла random_seed - не использую ВНИМАНИЕ: ключ %s содержит предпочтения недопустимых ВНИМАНИЕ: ключ %s, возможно, отозван: запрашиваю ключ отзыва %s ВНИМАНИЕ: ключ %s, возможно, отозван: ключ отзыва %s не получен. ВНИМАНИЕ: обработчик сервера ключей от другой версии GnuPG (%s) ВНИМАНИЕ: параметр сервера ключей `%s' на данной платформе не используется ВНИМАНИЕ: сообщение было зашифровано слабым ключом симметричного шифра. ВНИМАНИЕ: целостность сообщения не защищена ВНИМАНИЕ: наблюдается несколько текстов ВНИМАНИЕ: обнаружено несколько подписей. Проверена будет только первая. ВНИМАНИЕ: нет ID пользователя, помеченного как главный. Эта команда может привести к тому, что главным станет считаться другой ID пользователя. ВНИМАНИЕ: это не отделенная подпись; файл '%s' НЕ проверялся! ВНИМАНИЕ: нечего экспортировать ВНИМАНИЕ: параметры в `%s' при этом запуске еще не действуют ВНИМАНИЕ: потенциально небезопасный сеансовый ключ, зашифрованный симметричным шифром ВНИМАНИЕ: возможно создание файла образа памяти! ВНИМАНИЕ: получатели (-r) заданы без использования шифрования с открытым ключом ВНИМАНИЕ: закрытый ключ %s не имеет простой контрольной суммы SK ВНИМАНИЕ: конфликт хэшей подписей в сообщении ВНИМАНИЕ: подписывающий подключ %s неправильно перекрестно заверен ВНИМАНИЕ: подписывающий подключ %s не был перекрестно заверен ВНИМАНИЕ: подпись не будет помечена как неэкспортируемая. ВНИМАНИЕ: подпись не будет помечена как неотзываемая. ВНИМАНИЕ: возможно, данный ключ отозван (ключ отзыва отсутствует) ВНИМАНИЕ: не могу развернуть %% в примечании (слишком длинное). Использую неразвернутым. ВНИМАНИЕ: не могу развернуть %% в URL правил (слишком длинный). Использую неразвернутым. ВНИМАНИЕ: невозможно развернуть %% в URL предпочтительного сервера ключей (слишком длинно). Использую неразвернутым. ВНИМАНИЕ: невозможно получить URI %s: %s ВНИМАНИЕ: невозможно интерпретировать URI %s ВНИМАНИЕ: невозможно обновить ключ %s с %s: %s ВНИМАНИЕ: не могу удалить временный каталог `%s': %s ВНИМАНИЕ: не могу удалить временный файл (%s) `%s': %s ВНИМАНИЕ: небезопасный владелец каталога, содержащего файл конфигурации `%s' ВНИМАНИЕ: небезопасный владелец каталога, содержащего домашний каталог `%s' ВНИМАНИЕ: небезопасные права доступа к каталогу, содержащему файл конфигурации `%s' ВНИМАНИЕ: небезопасные права доступа к каталогу, содержащему домашний каталог `%s' ВНИМАНИЕ: небезопасный владелец файла конфигурации `%s' ВНИМАНИЕ: небезопасный владелец домашнего каталога `%s' ВНИМАНИЕ: небезопасные права доступа к файлу конфигурации `%s' ВНИМАНИЕ: небезопасные права доступа к домашнему каталогу `%s' ВНИМАНИЕ: используется экспериментальный алгоритм симметричного шифрования %s ВНИМАНИЕ: используется экспериментальная хэш-функция %s ВНИМАНИЕ: используется экспериментальный алгоритм шифрования с открытым ключом %s ВНИМАНИЕ: используется незащищенная память! ВНИМАНИЕ: используется небезопасный генератор случайных чисел!! Необходимо сгенерировать много случайных чисел. Желательно, чтобы Вы выполняли некоторые другие действия (печать на клавиатуре, движения мыши, обращения к дискам) в процессе генерации; это даст генератору случайных чисел больше возможностей получить достаточное количество энтропии. Какой Вам нужен размер ключа для аутентификации? (%u) Какой Вам нужен размер ключа для шифрования? (%u) Какой Вам нужен размер ключа для подписей? (%u) Какой размер подключа Вам необходим? (%u) Какой размер ключа Вам необходим? (%u) Когда Вы подписываете ID пользователя ключа, Вы должны сначала удостовериться, что ключ принадлежит, человеку указанному в ID пользователя. Это нужно для тех, кто знает, как хорошо Вы проверяете достоверность ID пользователя. "0" означает, что Вы не можете сказать, как хорошо Вы проверили ключ. "1" означает, что Вы полагаете, что ключ принадлежит человеку, который указан в нем, но Вы вообще не проводили проверку ключа. Это полезно, когда Вы подписываете ключ с псевдонимом человека. "2" означает, что Вы проверяли ключ неаккуратно. Например, это может означать, что Вы проверили отпечаток ключа и проверили ID пользователя на ключе по фотоидентификатору. "3" означает, что Вы выполнили всестороннюю проверку ключа. Например, это может означать, что Вы сверили отпечаток ключа с владельцем ключа лично и что Вы сверили все с помощью стойкого к подделке документа с фотографией (таким как паспорт), что имя владельца ключа совпадает с именем в ID пользователя ключа, наконец, что Вы проверили (обменявшись письмами), что адрес электронной почты на ключе принадлежит владельцу ключа. Учтите, что примеры, данные для уровней 2 и 3 - только примеры. В конечном итоге Вам решать, что значит "неаккуратно" и "всесторонне", когда Вы подписываете чужие ключи. Если Вы не можете определиться с правильным ответом, ответьте "0".Вы отзываете следующие подписи: Используется таблица символов: `%s'. Нельзя изменить срок действия ключа v3 Вы не можете удалить последний ID пользователя! Не задан ID пользователя (можно использовать "-r"). Хотите обойтись без фразы-пароля? Скорее всего, это ПЛОХАЯ мысль! Хотите обойтись без фразы-пароля? Скорее всего, это ПЛОХАЯ мысль! Работа будет продолжена. Вы можете сменить фразы-пароль в любое время, запустив данную программу с параметром "--edit-key". Вы подписали эти ID пользователей на ключе %s: Нельзя добавить особый отзывающий ключ в ключ типа PGP 2.x. Нельзя добавить фотоидентификатор в ключ типа PGP2. Подпись OpenPGP на ключе PGP 2.x в режиме --pgp2 делать нельзя. Можно попытаться пересоздать таблицу доверия командами: Возможно, надо поменять также срок действия. Вы должны выбрать хотя бы один ключ. Вы должны выбрать хотя бы один ID пользователя. Вы должны выбрать хотя бы один ключ. Для защиты закрытого ключа необходима фраза-пароль. Необходима фраза-пароль для доступа к закрытому ключу пользователя: "%s" Необходима фраза-пароль для доступа к закрытому ключу пользователя: "%.*s" %u-бит %s ключ, ID %s, создан %s пользователем%s Вы выбрали следующий ID пользователя: "%s" Вы должны указать причину отзыва ключа. В зависимости от ситуации Вы можете выбрать один из следующих вариантов: "Ключ был скомпрометирован" Выберите, если Вы полагаете, что посторонний человек получил доступ к Вашему закрытому ключу. "Ключ заменен другим" Выберите, если Вы заменили данный ключ на другой. "Ключ больше не используется" Выберите, если Вы отказались от использования данного ключа. "ID пользователя больше не действителен" Выберите, если Вы больше не используете данный ID пользователя. Обычно используется для указания, что данный адрес электронной почты больше не используется. Ваша текущая подпись на "%s" просрочена. Ваша текущая подпись на "%s" является локальной. Ваше решение? Ваш выбор? Ваш выбор? (введите '?' для получения информации): Ваша система не может отображать даты после 2038 года. Однако даты до 2106 года будут обрабатываются верно. [ полное ][ неопредел][просрочено][ отозвано][неизвестно][ID пользователя не найден][файл][ ограничен][не установлено][отозван][самоподпись][абсолютное][сомнительно]`%s' уже сжат `%s' - не файл JPEG `%s' не обычный файл - игнорирую `%s' недопустимая таблица символов `%s' не является допустимым длинным ID ключа `%s' недопустимый срок действия подписи перехожу к экспорту незащищенного подключа доступ к командам управления не настроен действие `%s' не поддерживается серверами ключей `%s' добавить ключ на картудобавить фотоидентификатордобавить ключ отзывадобавить подключдобавить ID пользователянеоднозначный параметр `%s' анонимный получатель; пробую закрытый ключ %s ... текстовый заголовок: текстовый формат: %s предполагаются данные, зашифрованные по %s подпись ключа %s считается плохой из-за неизвестного критического бита предполагается, что подписанные данные находятся в `%s' автоматически получать ключи при проверке подписейавтоматически получили `%s' через %s плохой MPIплохой URIплохой сертификатплохой ключплохая фраза-парольплохой открытый ключплохой закрытый ключподпись невернауменьшить количество выводимой информациидвоичнойсбой build_packet: %s cCбуферирование таблицы ключей `%s' нет доступа %s - непригодная карта OpenPGP? нет доступа к `%s': %s не могу закрыть `%s': %s не могу подключиться к `%s': %s не могу создать `%s': %s не могу создать архивную копию, файл `%s': %s не могу создать каталог `%s': %s невозможно создать блокировку для `%s' не могу отключить создание файла копии образа памяти: %s в пакетном режиме это действие невозможно не могу выполнить в пакетном режиме без "--yes" не могу сгенерировать простое число с pbits=%u qbits=%u не могу сгенерировать простое число меньше чем с %d битами не могу использовать алгоритм с открытым ключом %d не могу обработать строки текста длиннее %d символов не могу обработать эти неоднозначные данные подписи невозможно заблокировать `%s' невозможно заблокировать `%s': %s не могу открыть `%s' не могу открыть `%s': %s не могу открыть подписанные данные `%s' не могу открыть таблицу ключейне могу получить фразу-пароль в пакетном режиме не могу прочитать `%s': %s не могу выполнить stat `%s': %s не могу использовать симметричный пакет ESK в режиме S2K не могу записать `%s': %s отмененопрервано пользователем отбой|cancelнельзя назначить отзывающим ключ типа PGP 2.x невозможно избежать слабого ключа для симметричного шифра; %d попыток! карта не поддерживает хэш-функцию %s карта заблокирована! устройства чтения карты недоступно номер карты: изменить URL получения ключасменить отпечаток центра сертификациисменить PIN картыизменить имя владельца картыизменить пол владельца картыизменить данные на картесменить срок действия ключа или выбранных подключейизменить языковые предпочтенияизменить имя учетной записиизменить уровень доверия владельцусменить фразу-парольпроверка подписейсбой проверки созданной подписи: %s проверка таблицы доверия несоответствие контрольной суммеалгоритм шифрования %d%s неизвестен или отключен пропущено двоеточиесжать непригодные ID пользователей и удалить все подписи из ключасжать непригодные ID пользователей и удалить непригодные подписи из ключаcompletes-needed должен быть больше 0 несовместимые команды не могу интерпретировать URL сервера ключей создать открытый ключ при импорте закрытого ключавывод в текстовом формате ASCII создан: %sпропущена метка времени создания данные не сохранены; используйте "--output" для сохранения ошибка преобразования из текстового формата: %s расшифровать данные (по умолчанию)сбой расшифровки: %s расшифровано удалить выбранные подключиудалить выбранные ID пользователяудалить подписи у выбранных ID пользователясбой при удалении блока ключа: %s глубина: %d верных: %3d подписанных: %3d доверие: %d-, %dq, %dn, %dm, %df, %du создан каталог `%s' отключить ключотключенпоказать в списке ключей фотоидентификаторыпоказать при проверке подписи фотоидентификаторыне сбрасывать таблицу доверия после импортане удалять временные файлы после использованияне делать никаких измененийне обновлять таблицу доверия после импортаподнять доверие подписей с действительными данными PKAподключить ключошибка преобразования в текстовый формат: %s зашифровать данныезашифровано с %lu фразами-паролями зашифровано ключом %s с ID %s зашифровано %u-битным ключом %s с ID %s, созданным %s зашифровано с 1 фразой-паролем зашифровано неизвестным алгоритмом %d для шифрования сообщения в режиме --pgp2 требуется шифр IDEA зашифровать только симметричным шифромошибка выделения достаточной памяти: %s ошибка изменения размера ключа %d до %u бит: %s ошибка создания `%s': %s ошибка создания таблицы ключей `%s': %s ошибка при создании фразы-пароля: %s ошибка при поиске записи о доверии в `%s': %s ошибка при считывании информации ключа: %s ошибка при получении нового PIN: %s ошибка в `%s': %s ошибка в строке дополнения ошибка чтения `%s': %s ошибка чтения данных приложения ошибка чтения отпечатка DO ошибка чтения блока ключей: %s ошибка чтения закрытого блока ключа "%s": %s ошибка получения статуса CHV с карты ошибка записи `%s': %s ошибка записи ключа на карту: %s ошибка записи таблицы ключей `%s': %s ошибка записи таблицы открытых ключей `%s': %s ошибка записи таблицы закрытых ключей `%s': %s существующий ключ будет заменен просрочен просрочен с: %s годен до: %sэкспортировать атрибутные ID (обычно фотоидентификаторы)экспортировать ключиэкспортировать ключи на сервер ключейэкспортировать ключи отзыва, помеченные как `особо важные'экспортировать подписи, помеченные как локальныеэкспорт закрытых ключей не разрешен данная сборка не поддерживает внешние вызовы для сервера ключей вызов внешних программ отключен из-за небезопасных прав доступа к файлу настроек сбой инициализации таблицы доверия: %s сбой перестройки буфера таблицы ключей: %s сбой при сохранении даты создания: %s сбой при сохранении отпечатка: %s сбой сохранения ключа: %s сбой снятия защиты с ключа: %s не удалось применить PIN по умолчанию как %s: %s - далее применяться по умолчанию не будет женскийзапросить ключ по заданному картой URLошибка закрытия файлаошибка создания файлаошибка удаления файлафайл существуетошибка открытия файлаошибка чтения файлаошибка переименования файлаошибка записи в файлотпечаток на карте не совпадает с запрошенным пометить выбранный ID пользователя как главныйпринудительныйиспользование симметричного шифра %s (%d) нарушает предпочтения получателя сбой fstat `%s' в функции %s: %s сбой fstat(%d) в функции %s: %s полноеобщая ошибкасоздает сообщение совместимым с PGP 2.xсоздать новую пару ключейсоздать сертификат отзывасгенерировать новые ключисбой при генерации ключа генерация нового ключа создание нерекомендуемой 16-битной контрольной суммы для защиты ключа gpg-agent в данном сеансе недоступен протокол gpg-agent версии %d не поддерживается gpg/card> учитывать набор записей PKA при получении ключейучитывать набор URL предпочтительных серверов ключей для этого ключаiImMqQsSимпортировать ключи с сервера ключейимпортировать подписи, обозначенные как локальныеимпортировать/объединить ключиимпорт закрытого ключа не допускается включить в результаты поиска отозванные ключиискать по ID ключа, включая подключислишком длинная входная строка %u или пропущен перевод строки строка ввода длиннее %d символов недопустимыйнедопустимый режим S2K; должно быть 0, 1 или 3 недопустимый аргументнеправильный текстовый форматнедопустимый текстовый заголовок: недопустимый текстовый формат: строка длиннее %d символов недопустимый список auto-key-locate недопустимый заголовок текстовой подписи недопустимая строка, выделенная дефисами: недопустимые предпочтения по умолчанию недопустимый default-cert-level; должен быть 0, 1, 2 или 3 недопустимые параметры экспорта неверный отпечатокнедопустимая хэш-функция `%s' недопустимые параметры импорта недопустимое вхождение `%s' в строке предпочтений неправильная таблица ключейнедопустимые параметры для сервера ключей непригодный протокол сервера ключей (ожидается %d, получено %d) недопустимый список параметров недопустимый min-cert-level; должен быть 0, 1, 2 или 3 неправильный пакетневерная фраза-парольнедопустимые персональные предпочтения шифра недопустимые персональные предпочтения алгоритмов сжатия недопустимые персональные предпочтения хэш-функции недопустимый символ radix64 %02X (игнорируется) обнаружен недопустимый корневой пакет в proc_tree() недопустимая структура карты OpenPGP (DO 0x93) недопустимое значение недопустимые параметры проверки крайне желательно, чтобы Вы обновили Ваши предпочтения и ключ "%s" не найден на сервере ключей ключ "%s" не найден: %s у ключа %s нет ID пользователя ключ %s помечен как абсолютно доверенный. ключ %s встречается в таблице доверия более одного раза ключ %s создан на %lu секунд в будущем (петля во времени или проблемы с часами) ключ %s создан на %lu секунд в будущем (петля во времени или проблемы с часами) ключ %s: "%s" %d новых подписей ключ %s: "%s" %d новых подключей ключ %s: "%s" %d новых ID пользователя ключ %s: "%s" %d подпись очищена ключ %s: "%s" %d подписей очищено ключ %s: "%s" %d ID пользователя очищен ключ %s: "%s" %d ID пользователя очищено ключ %s: "%s" 1 новая подпись ключ %s: "%s" 1 новый подключ ключ %s: "%s" 1 новый ID пользователя ключ %s: "%s" не изменен ключ %s: добавлен сертификат отзыва "%s" ключ %s: сертификат отзыва "%s" импортирован ключ %s: %s ключ %s: ключ типа PGP 2.x - пропущен ключ %s: повреждение ключа PKS исправлено ключ %s: принят как доверенный ключ ключ %s: принят без самоподписанного ID пользователя "%s" ключ %s: уже есть в таблице закрытых ключей ключ %s: оригинальный блок ключей не найден: %s ключ %s: оригинальный блок ключей не читается: %s ключ %s: добавлена прямая подпись ключа ключ %s: не совпадает с нашей копией ключ %s: обнаружено дублирование ID пользователя - объединены ключ %s: неверная прямая подпись ключа ключ %s: неправильный сертификат отзыва: %s - отвергнут ключ %s: неправильный сертификат отзыва: %s - пропущен ключ %s: неправильная самоподпись на ID пользователя "%s" ключ %s: недопустимая связь подключей ключ %s: неверный отзыв подключа ключ %s: материал ключа на карте - пропущен ключ %s: новый ключ - пропущен ключ %s: нет открытого ключа - не могу применить сертификат отзыва ключ %s: нет открытого ключа для доверенного ключа - пропущен ключ %s: нет подключа для связывания ключей ключ %s: нет подключа для отзывающего ключа ключ %s: нет подключа для подписи связи подключей ключ %s: нет подключа для отзывающей подписи подключа ключ %s: нет ID пользователя ключ %s: нет ID пользователя для подписи ключ %s: нет действительных ID пользователя ключ %s: неэкспортируемая подпись (класс 0x%02X) - пропущена ключ %s: не защищен - пропущен ключ %s: импортирован открытый ключ "%s" ключ %s: не найден открытый ключ: %s ключ %s: удалено многократное связывание подключей ключ %s: удален многократный отзыв подключей ключ %s: сертификат отзыва в неправильном месте - пропущен ключ %s: импортирован закрытый ключ ключ %s: закрытый ключ не найден: %s ключ %s: закрытый ключ с недопустимым шифром %d - пропущен ключ %s: закрытый ключ без открытого ключа - пропущен ключ %s: пропущен подключ ключ %s: пропущен ID пользователя "%s" ключ %s: подпись подключа в неправильном месте - пропущена ключ %s: неожиданный класс подписи (0x%02X) - пропущена ключ %s: алгоритм с открытым ключом не поддерживается ключ %s: алгоритм с открытым ключом у ID пользователя "%s" не поддерживается ключ уже существует сбой при экспорте ключа: %s ключ сгенерирован (%d секунд) ключ создан на %lu секунду в будущем (петля во времени или проблемы с часами) ключ создан на %lu секунд в будущем (петля во времени или проблемы с часами) ключ не помечен как небезопасный - не могу использовать его с фальшивым генератором случайных чисел! ключ не найден на сервере ключей операция с ключом невозможна: %s источник блока ключей `%s': %s создана таблица ключей `%s' ошибка связи с сервером ключей: %s сервер ключей не прислал VERSION ошибка сервера ключейвнутренняя ошибка сервера ключей сбой при получении с сервера ключей: %s сбой при обновлении с сервера ключей: %s сбой при поиске на сервере ключей: %s сбой при отправке на сервер ключей: %s превышено время ожидания сервера ключей неверный размер ключа; используется %u бит размер ключа округлен вверх до %u бит слишком длинная строкавывести все доступные данныевывести и проверить подписи ключейвывести список ключей и ID пользователявывести список ключейвывести список ключей и их отпечатковвывести список ключей и подписейсписок предпочтений (экспертам)список предпочтений (подробный)вывести список закрытых ключейсоздать отделенную подписьпри несоответствии метки времени - только предупреждениесбой make_keysig_packet: %s мужскойповрежденная контрольная сумма неправильная переменная окружения GPG_AGENT_INFO неправильно сформированный ID пользователяограниченноеmarginals-needed должен быть больше 1 max-cert-depth должен быть в диапазоне от 1 до 255 меню изменения или разблокировки PINпереместить архивный ключ на картупереместить ключ на картуперемещение подписи ключа в нужное место nNвложенные текстовые подписи ошибка сетиникогданикогда создан новый файл настроек `%s' срок следующей проверки таблицы доверия %s нет|noотсутствует знак = в определении группы `%s' нет картынет соответствующего открытого ключа: %s нет данныхнет основной таблицы закрытых ключей: %s не найден модуль накопления энтропии нет обработчика для схемы сервера ключей `%s' неизвестное действие сервера! не заданы серверы ключей (используйте --keyserver) проверка таблицы доверия не нужна проверять таблицу доверия при модели доверия `%s' не нужно обновлять таблицу доверия при модели доверия `%s' не нужно программа просмотра фотографий не задана удаленный запуск программы не поддерживается ключи отзыва для "%s" не найдены нет закрытого ключа нет закрытого подключа для открытого подключа %s - игнорируем подпись не найдена нет подписанных данных нет такого ID пользователяне найдено абсолютно доверенных ключей не найдено данных формата OpenPGP. нет пригодных адресов нет доступной для записи таблицы ключей: %s нет доступной для записи таблицы открытых ключей: %s нет доступной для записи таблицы закрытых ключей: %s не отделенная подпись карта не OpenPGPне зашифрованоне принудительныйне выполненоне поддерживаетсязамечание: файл random_seed пуст замечание: файл random_seed не обновлен oOОтлично, мы - анонимный получатель. готово|okayстарое шифрование DEK не поддерживается подпись старого типа (PGP 2.x) обновлять только существующие ключиоперация невозможна без инициализации защищенной памяти файл конфигурации `%s': %s первоначальное имя файла='%.*s' сведения о доверии владельцу сброшены пропущено значение степени доверия владельцуфраза-пароль создана с незнакомой хэш-функцией %d фраза-пароль повторена неверно; попробуйте еще развыполните --check-trustdb, пожалуйста введите необязательный, но очень рекомендуемый адрес электронной почтыза подробностями обращайтесь к %s подробности см. на https://www.gnupg.org/documentation/faqs.html используйте вместо этого "%s%s" пожалуйста, подождите, пока будет генерироваться ключ ... предпочтение `%s' дублируется преждевременный конец файла (в контрольной сумме) преждевременный конец файла (в дополнении) преждевременный конец файла (нет контрольной суммы) показать состояние картыпроблема обработки зашифрованного пакета проблема с агентом - агент использоваться не будет спросить перед перезаписьюметод защиты %d%s не поддерживается метод защиты %d не поддерживается открытый и закрытый ключи созданы и подписаны. открытый ключ %s на %lu секунд новее подписи открытый ключ %s на %lu секунд новее подписи открытый ключ %s не найден: %s сбой расшифровки с открытым ключом: %s открытый ключ не соответствует закрытому! данные зашифрованы открытым ключом: правильный DEK открытый ключ %s открытый ключ не найденоткрытый ключ для абсолютно доверенного ключа %s не найден qQвыход|quitвыйти из этого менюсимвол quoted printable в текстовом формате - испорчено почтовой программой? распространили этот ключ во избежание возможных нестыковок алгоритмов ошибка чтения в `%s': %s чтение из `%s' чтение конфигурации из `%s' сбой при чтении ключа: %s читаю stdin ... причина отзыва: обновление %d ключей из %s обновление 1 ключа из %s исключен фильтром импортаудалить после импорта из ключа как можно большеудалить как можно больше из ключа при экспортеудалить ключи из таблицы открытых ключейудалить ключи из таблицы закрытых ключейудалить фразу-пароль из выбранных подключейудалить после импорта непригодные части ключаудалить при экспорте непригодные части ключасбой при переименовании `%s' в `%s': %s устранить при импорте повреждения от сервера ключей pksполучение ключа %s с %s запрашиваю ключ %s с сервера %s %s нехватка ресурсовв ответе отсутствует модуль RSA в ответе отсутствует открытая экспонента RSA ответ не содержит данных открытого ключа пояснение к отзыву: отозвать ключ или выбранные подключиотозвать выбранные ID пользователяотозвать подписи у выбранных ID пользователяотозванотозвано Вашим ключом %s %s отозван: %sокруглен до %u бит сохранить и выйтиискать ключи на сервере ключейпоиск "%s" на %s поиск "%s" на сервере %s %s поиск имен на %s поиск имен на сервере %s %s закрытый ключ "%s" не найден: %s закрытый ключ %s: %s закрытый ключ уже хранится на карте закрытый ключ не найдензакрытая часть ключа недоступна закрытые части ключа недоступны выбрать подключ Nвыбрать ID пользователя Nвыбрана неверная хэш-функция для сертификации выбран неверный алгоритм шифрования выбран неверный алгоритм сжатия выбрана неверная хэш-функция сбой при выборе openpgp: %s отправка ключа %s на %s отправляю ключ %s на сервер %s %s установить примечание для выбранных ID пользователяустановить список предпочтений для выбранных ID пользователяустановить URL предпочтительного сервера ключей для выбранных ID пользователяпоказать в списке подписей примечания стандарта IETFпоказать при проверке подписей примечания стандарта IETFпоказать административные командыпоказать в списке подписей все примечанияпоказать при проверке подписей все примечанияпоказать в списке подписей сроки действияпоказать отпечаток ключапоказать при проверке подписей только главный ID пользователяпоказать в списке подписей URL правилпоказать при проверке подписи URL правилпоказать в списке подписей URL предпочтительных серверов ключейпоказать при проверке подписей URL предпочтительных серверов ключейпоказать в списке ключей отозванные и просроченные подключипоказать в списке ключей отозванные и просроченные ID пользователейпоказать при проверке подписей отозванные и просроченные ID пользователяпоказать выбранные фотоидентификаторыпоказать в списке ключей название таблицы ключейпоказать данную справкупоказать в списке ключей действительность ID пользователяпоказать при проверке подписей действительность ID пользователяпоказать в списке подписей пользовательские примечанияпоказать при проверке подписей пользовательские примечанияподписать ключподписать ключ локальноподписать или редактировать ключподписать выбранные ID пользователя [* описание команд см. ниже]локально подписать выбранные ID пользователяподписать выбранные ID пользователя без возможности отзываподписать выбранные ID пользователя подписью доверияпроверка подписи подавлена создано подписей: %lu подписано Вашим ключом %s %s%s%s подписать не удалось: %s подписывающий подключ %s уже перекрестно заверен подпись:пропущено "%s": %s пропущено "%s": дубликат пропущено: открытый ключ уже установлен пропущено: открытый ключ уже установлен для получателя по умолчанию пропущено: закрытый ключ уже имеется пропущен блок типа %d пропуск самоподписи v3 на ID пользователя "%s" отдельный сертификат отзыва: задействуется командой "gpg --import" отдельная подпись класса 0x%02x сбой сохранения ключа на карту: %s подключ %s не для подписей, он не нуждается в перекрестном заверении в подпакете типа %d установлен критический бит сбой симметричного шифрования `%s': %s ошибка системы при вызове внешней программы: %s используются ключи из этой таблицы ключейтекстовойзаданный URL правил сертификации неверен заданный URL предпочтительного сервера ключей неверен заданный URL правил подписи неверен Не могу проверить подпись. Файл подписи (.sig или .asc) должен быть указан в командной строке первым. имеется закрытый ключ для открытого ключа "%s"! это ключ Elgamal, созданный PGP, он не обеспечивает безопасность подписи!этот ключ уже назначен отзывающим может быть, из-за отсутствия самоподписи данное сообщение может быть непригодно для %s на данной платформе при вызове внешних программ требуются временные файлы противоречие метке временипереключение между просмотром открытых и закрытых ключейпереключить флаг `подпись требует PIN'слишком много шифровых предпочтений слишком много предпочтений для методов сжатия слишком много предпочтений для хэш-функций слишком много элементов в буфере pk - отключено ошибка в таблице довериязапись о доверии %lu не запрашиваемого типа %d запись о доверии %lu, тип запроса %d: сбой чтения: %s запись о доверии %lu, тип %d: ошибка записи: %s доверие: %sтаблица доверия, запись %lu: сбой lseek: %s таблица доверия, запись %lu: сбой записи (n=%d): %s слишком длинная транзакция таблицы доверия таблица доверия: сбой lseek: %s таблица доверия: сбой чтения (n=%d): %s таблица доверия: сбой синхронизации: %s уровень доверия установлен в ПОЛНЫЙ по действительным данным PKA уровень доверия установлен в НИКОГДА из-за непригодных данных PKA абсолютноене могу отобразить фотоидентификатор! не могу запустить внешнюю программу не могу запустить программу `%s': %s не могу запустить оболочку `%s': %s не могу открыть файл JPEG `%s': %s не могу прочитать ответ внешней программы: %s не могу определить путь запуска для %s невозможно обновить запись о версии таблицы доверия: ошибка записи: %s не могу использовать шифр IDEA для всех ключей, которыми Вы шифруете. не могу использовать неизвестную модель (%d) - использую модель доверия %s разблокировать PIN с помощью кода сбросабез сжатия|без|noneнеопределенноенеожиданный текстовый формат:неожиданные данныенереализованный алгоритм шифрованиянереализованный алгоритм с открытым ключомнеизвестнойнеизвестный текстовый заголовок: неизвестный алгоритм шифрованиянеизвестный алгоритм сжатиянеизвестный параметр в файле конфигурации `%s' неизвестный получатель по умолчанию "%s" неизвестная хэш-функциянеизвестный алгоритм защиты ключа неизвестный параметр `%s' неизвестный тип пакетанеизвестный алгоритм защиты неизвестный алгоритм с открытым ключомнеизвестный класс подписинеизвестная версияненормальное завершение внешней программы не указанURI не поддерживаетсянеприменимый алгоритм открытого ключанепригодный открытый ключнепригодный закрытый ключобновить все ключи с сервера ключейсбой при обновлении: %s сбой при обновлений закрытого ключа: %s обновить таблицу доверияприменимость: %sиспользование: gpg [параметры] вывод в указанный файлиспользовать канонический текстовый режимсначала удалите его командой "--delete-secret-keys". строго следовать стандарту OpenPGPпередавать данные в сервер с помощью временных файловиспользовать данный ID пользователя для подписывания и расшифровкиID пользователя "%s" уже отозван ID пользователя: "%s" использую модель доверия %s используется алгоритм шифрования %s PIN по умолчанию применяется как %s использую подключ %s вместо главного ключа %s проверить подписи по данным PKAдействительность: %sподробнопроверка административного PIN в данный момент запрещена этой командой сбой при проверке CHV%d: %s проверить подписьпроверить PIN и показать все данныеожидание блокировки `%s' слабый ключсоздан слабый ключ - повторение странный размер зашифрованного сеансового ключа (%d) не будет работать с небезопасной памятью из-за %s запись прямой подписи запись связывающей подписи запись нового ключа сохранение открытого ключа в `%s' сохранение заготовки закрытого ключа в `%s' сохранение закрытого ключа в `%s' запись самоподписи сохраняю в `%s' вывод в stdout использован неправильный закрытый ключyYда|yesключом типа PGP 2.x в режиме --pgp2 можно делать только текстовые подписи ключом типа PGP 2.x в режиме --pgp2 можно делать только отделенные подписи в режиме --pgp2 ключ RSA для шифрования должен быть не более 2048 бит в режиме --pgp2 можно сделать только отделенную или текстовую подпись свои предпочтения можно обновить командой gpg --edit-key %s updpref save в режиме --pgp2 нельзя одновременно подписать и зашифровать ключ не может быть назначен отзывающим самого себя нельзя использовать --symmetric --encrypt в режиме %s нельзя использовать --symmetric --encrypt совместно с --s2k-mode 0 нельзя использовать --symmetric --sign --encrypt в режиме %s нельзя использовать --symmetric --sign --encrypt совместно с --s2k-mode 0 Вы нашли ошибку в программе ... (%s:%d) нельзя использовать %s в режиме %s Вы не можете использовать шифрование `%s' в режиме %s Вы не можете использовать сжатие `%s' в режиме %s Вы не можете использовать хэш-функцию `%s' в режиме %s в режиме --pgp2 нужно использовать файлы (а не конвейер командной строки). |AN|Новый административный PIN|A|Введите административный PIN|A|Введите административный PIN%%0A[осталось попыток: %d]|FD|выводить информацию в файл с дескриптором FD|NAME|зашифровать для получателя NAME|N|Новый PIN|N|установить уровень сжатия N (по умолчанию - 0)|RN|Новый код сброса|[file]|создать текстовую подпись к файлу|[file]|создать подпись к файлу|algo [files]|вывести хэши файлов||Введите PIN||Введите PIN%%0A[подписей: %lu]||Введите код сброса для картыgnupg-1.4.20/po/Makevars0000644000175000017500000000676312635262326011774 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = translations@gnupg.org # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = no # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = --previous # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes gnupg-1.4.20/po/ro.gmo0000644000175000017500000043221312635457221011415 00000000000000T(Ppk-qkk%l.mFmn)nInennnnn2n7)o2ao#oDo.oI,p7vp'pp ppq/qIqfqqqqq+q&r#;r(_rrrrr(rs8sWs$tsss&ss,t5tRt!ittttt tt uu4uQucuuuuuu*u"v](vBvv/v= w(Jw.sw3w!w(w!x0n\1.DC-0.I*`+' ߆/Jcx34-!O' .1`$i ?4:VuɊ,ފ( 84#m&(&7L7U6-Č%39L0<G@<>}+=&.>F"X{ :#1 D/e{H-ޑ$ '18Y&5.5*T!.0Г&,(Uo 8#"&.IxH"Z(}$E˖1C;ٗɘ8!$ZOk~ǛB>Tgw%ƜΜ.D*؝ $*!08'i<Ο+",8/e1"Ǡ,"2:m ( ӡ **<Wk̢ !5"ߣ(HZwFǤ 1/%aEFEoҦ B c8'M>ucD/NةE',m"#-+);&eo'v1QgĮ+, 39 m1y(#+":+]" Ͱ?%!Gbuֱ.(# L}m/0J{!˵е!.Ge%xƶ϶jKY@-9O۸0+/\5'¹.3-M{Ph!$׼,()RGf-Ǿ ѿ޿*+&Rn #$B _ 6%72Tr>z1=I)4s#=)?ID@+1;NmII5P5;?B8<{H-"/HR%<@B})C:..i>2= <H@FH UV$ -2 1SI>K@Z5*7,40a04 2L:M65.$hD*&1#12U>*y=0M9a"&!3>;cz%D,I5v2_ ` k v   %2"X{)&+5Ngv . B"e5$$ 3AX_x{(" <]y,'. %82^+ &%=cx5 ;<?*| 0Jc:y&'Nd-s <A(.Wm/ 12I`w,HM eq%z/.&3> r} 0$-=R%#- !B'a# *H'd&& &1Xw  / ,/"L9oK%$&@$g#D'ARd v1$@#d $!$;DO+/60'Xa/"&( %4%Z$ .0Ie2'>N/i+$&"$I'n,,> Vw$,IJC"# 0!Qs*- $;'` ."+)'#Qu-65/0`"';0""S%v/2!5:P !!(+8E~!40#;2Y6)9';&RGyHB Mi# ) G e        5  K U p     '  0 5 .D s  ( 2 !  - ,G t w    $   ) $  , M U %t %  , 2 3S&"1';K![}%%5 I W b p ~#& )!$@<e6 ,Cp;#M;-V"-%S+m&*56!X!u&$2 =@EITF+J]u01##2+V+,!20$Kp*2. !@*Y  %=&Z$#&)93J%~*%)(I-r96:L,`0/7*;.f7;0 1: ;l  %  ) 3!6S!:! !!!9!0"5O"-"""" "#-+#Y#b#t# #5#$# $+%$4Q$%$!$C$*%(=%0f%%%.%-%*&H&+&G'2M'/'%'F'(10(#b((!(((( )- )/N),~) )")))*!* <*]*2w*1***#+#&+!J+"l+-++:+I,Aa,",, ,,,-$-C-K-b-{- ---!-.'.;.Y.r..#. ..../ /=/P/j/ ////6/05"0#X0 |00000*0!1 91F1GN111 112 2-&2,T22222 23$3<3M3`3v3y3D}3F3E 4DO4E4A4756T575=5>6@6$]676<676F/7v7797 78 8$#8H8#[88#88*8*8)9>;B;K;B=[=>>$W>|>>>>> ?:7?9r?7?.?@@+T@O@B@+A?A _AkAAAAA'AB1BQB/cB)B)B/BC4C MCnC/CCCC D5DND2gDD.DDE.!EPE"nEEE E"EEFF=FXFlFFF$F,F& Gr2GHGG3HH;H9H?H=H)W%aWWKW7W;(XdXFX,YgGY>Y=YC,ZapZ6Z6 [8@[ y[[ [[[ [\ *\#4\.X\;\ \=\8 ]E]-^1L^~^2^ ^ ^H^?_E[_ __"_``64`1k`8`.`2a18a5jaaaa a>a=6b;tb5b8b?c=_cOcTcDBd>d-dEd:eCe Ve`e0yeeeeDe 8fEYfff)fAgDg\gIh:eh9h1h/ i?x=ix=xAx'y)Ey.oy5y7y9 z)Fz:pz)z?z%{$;{1`{7{ {6{ |)&|P|i| |-|$|%|##}G} a}k}B~*\~!~3~~~#/Swf!>8?*xEbt.4ЂLǃCYXuY6υUQ\,+ۆ./61f$33;%Ԋ.BT!]"-.Ћ= =CI9,D4WO?܍8)Ua<9Rl$$'̏6%+Qp""A9d89ג")4 ^hՔ%3.bw!zk7C<$9ݗY/q.EИ+1BEtGRUK!h #Ŝ075R#&"Ӟ0'@E#b #67'%!M o*"(ޡ-*5#`& ˢ?٢.!H?jSC)AmQYA[28ЦT &^LQҧS$@x.][FUT?MBRЪQ#XuJΫ7(QNzɬPP6HS<Ӯ;iLT? >KUJY+`'&459j=^ZA^ZLVHJF7<~9C=9Ow.Ƕ@:7>r2"2")3L*;H02B#4fa<+:@f&HZ~r-2< F[Drn & 2 = JV e     )'?,g--:D+p15 FSRo/ / <I]n ")1[s) ,/;(k557.86g0"3V*u#9+4L=^F) ". Q,[&%>  _&,*4:oX_3:n16! !L= %85nN //C9s4@<Mk|-$='!e 7,%*5P<#&0Ww*-% -14_4#   = O&]2,(G lU&:($#M q%d+%Qk5 .C rH~& ('"P$sG2%0XA8% *3^(u201+4 `,l4! ,%Ek:/*Z!o46)'B)j'%-2CVMt2"&0?,pWV!Ln(((//8#h #$41+(]1,@*&0Q/3.<7R6B$))*S!~IF/13a@C 3;&oF%)0-2^3?$0*8[:*?BX0M.,GTtSG-e&(0Ka&(%&<+[%#)#  1?Zw# 2 %F O,\3=))Dn,'   & 10b9e + *6DG)B$BCa#=.6AM 1'@7Z665 > LW$l2$-$ 3ENy-:/=jA&I6[U$@ Nk)6#7-[%9CB- )p + 4 ( $ !< D^    Y O' w   #    + 3J 3~ ( ( - 52 5h & 6  "6#F-j,%%9' a'k "'7K+k( ..?V3r')' A!Y8{BP<H@425JB<7JRH<G#Kk24@6@w=A8JbQ2JKR"#*I'qz&=( 6:M??$P--~,4"1699p55R6 =A6U 2 .R " $ " 0 !7=!?u!<!!$".&"U"t"%"$"?"F#c#l# #"#!#(#.$!B$Hd$K$I$*C%n% %%%%% %&&9&$W&$|&&*&&'"'@'['z')'''''(2.(a(%|((( ((()V.)&)W):*(?*h* }***1*#+$+3+N;+++++ + ,!,<>,<{,,#,, -,*-W-v---+---=-C.Nc.[.G/TV/?/B/8.0Ig0?00/1GA1I1F1X2s2'2>2+23 231=3o3.3 3+3 3:41Y4Jp:Y%M7$!iiF!?`v5OR6g,3O~F&:{H{gVZr qo H`P eE =~]^&A}x-S8RTU  Nb7{%3cW wPu <12NjO]a& `5TdQC{m YX)+kR&dQN*8I:1c3^4*n564U?vF!Iy9Uz8xCsVHle'eOEhlN-$;brWcCM )m;?"k'Jz*hI^ &\g5rZ/'d<^CF^m$?ab/#hNg7(pZsH=Qvf` ~LLyf[fYWF xnywa!]kmKX`)#>@B@}k.\>PY]\yg)x,e Z<A/UzTH9j1=V !}T-7Q|suO B9tb (Xq#bP%KVWBpv@\RLj>iD%[p0$zU_>~6*-Ca+|: ?oqie>"2Eh"8+ (.t_A qn6(0:0=K_@JV)k1R/J|[S,6vLG|*=%Ai}Dlf_s1tGM +9pwsd2'' AIj#EwP[M/r" c-w(]l~ .0G<cYE39 5yKnj mQD2<4GXZ.#q;ISGo|z[u"BX4D,Ll8uW0ft+.@MToh4{Dd7;S;x_}, \nr$S3 o2JK Buat Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s remove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg 1.4.10 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:15+0200 Last-Translator: Laurențiu Buzdugan Language-Team: Romanian Language: ro MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < 20)) ? 1 : 2; Introduceți ID-ul utilizator. Terminați cu o linie nouă: Nu sunt disponibili destui octeți aleatori. Vă rugăm faceți ceva pentru a da sistemului de operare o șansă de a colecta mai multă entropie (Mai sunt necesari %d octeți) Alegeți o imagine pentru a o folosi ca poză ID. Imaginea trebuie să fie un fișier JPEG. Amintiți-vă că imaginea este păstrată în cheia d-voastră publică. Dacă folosiți o imagine foarte largă, cheia d-voastră va deveni de asemenea foarte largă! Încercați să folosiți o imagine de aproximativ 240x288 pixeli. Algoritmuri suportate: Aveți nevoie de un ID utilizator pentru a identifica cheia; software-ul construiește ID-ul utilizator din Numele Real, Comentariul și Adresa de Email în această formă: "Popa Ioan (popică) " aka "%s" folosind cheia %s %s importate: %lu neschimbate: %lu noi subchei: %lu noi ID-uri utilizator: %lu ne importate: %lu fără ID-uri utilizator: %lu "%s": preferință pentru algoritm de cifrare %s "%s": preferință pentru algoritm compresie %s "%s": preferință pentru algoritm rezumat %s (subcheie pe cheia principală ID %s) Nu este sigur că semnătura aparține proprietarului. Semnătura este probabil un FALS. Nu există nici o indicație că semnătura aparține proprietarului. Aceasta ar putea însemna că semnătura e falsificată. algoritmuri pentru aceste ID-uri: noi semnături: %lu "%s" Card nr. serie = Amprentă cheie = Amprentă subcheie: chei secrete citite: %lu chei noi sărite: %lu ID-uri utilizator curățate: %lu Amprentă subcheie: semnături curățate: %lu (%c) Terminat (%c) Comută capabilitatea de autentificare (%c) Comută capabilitatea de cifrare (%c) Comută capabilitatea de semnare (%d) DSA (setează singur capabilitățile) (%d) DSA (numai semnare) (%d) DSA și Elgamal (%d) Elgamal (numai cifrare) (%d) RSA (numai cifrare) (%d) RSA (setează singur capabilitățile) (%d) RSA (numai semnare) (%d) RSA și RSA (implicit) (0) Nu voi răspunde.%s (1) Nu am verificat deloc.%s (1) Cheie de semnare (2) Cheie de cifrare (2) Am făcut ceva verificări superficiale.%s (3) Cheie de autentificare (3) Am făcut verificări foarte atente.%s noi revocări de chei: %lu %d = NU am încredere %d = Nu știu sau nu vreau să mă pronunț %d = Am toată încrederea %d = Am o încredere marginală %d = Am încredere supremă Nu pot semna. aka "%s" m = înapoi la meniul principal t = termină s = sări peste cheia asta chei secrete importate: %lu (ID cheie principală %s) (non-exportabilă) (non-revocabilă) Amprentă cheie primară:chei secrete neschimbate: %lu "%s" nu este un ID de cheie: sărit "%s" a fost deja semnată local de cheia %s "%s" a fost deja semnată de cheia %s # Listă cu valori de încredere atribuite, creată %s # (Folosiți "gpg --import-ownertrust" pentru a le reface) %d încercări PIN Admin rămase înainte de a încuia cardul permanent %d semnături incorecte %d chei procesate (%d numărători valide anulate) %d marginal(e) necesare, %d complet(e) necesare, model de încredere %s %d semnături nu au fost verificate din cauza unor erori %d semnături nu au fost verificate din cauza unor chei lipsă am găsit %d ID-uri utilizator fără auto-semnături valide %lu chei puse în cache (%lu semnături) %lu chei puse în cache până acum (%lu semnături) %lu chei procesate până acum %s ... %s nu suportă versiunea de manipulator (handler) %d %s nu merge încă cu %s! %s date cifrate %s cheie de sesiune cifrată va fi folosită cifrarea %s %s este cel nou %s este cel neschimbat cheile %s pot avea lungimea între %u și %u biți. dimensiunile cheii %s trebuie să fie în intervalul %u-%u %s nu are sens cu %s! %s nu este permis cu %s! semnătură %s, algoritm rezumat %s %s. %s/%s cifrat pentru: "%s" %s/%s semnătură de la: "%s" %s: Nu există nici o indicație că această cheie aparține într-adevăr utilizatorului numit %s: Nu există nici o indicație că această cheie aparține într-adevăr utilizatorului numit %s: directorul nu există! %s: eroare citire înregistrare liberă: %s %s: eroare citire înregistrare versiune: %s %s: eroare actualizare înregistrare versiune: %s %s: eroare scriere înregistrare dir: %s %s: eroare scriere înregistrare versiune: %s %s: adăugarea unei înregistrări a eșuat: %s %s: am eșuat să creez hashtable: %s %s: am eșuat să creez înregistrare versiune: %s%s: eroare setere la zero a înregistrării: %s %s: versiune fișier invalidă %d %s: trustdb invalid %s: a fost creat trustdb invalid %s: inelul de chei creat %s: nu e un fișier trustdb %s: sărită: %s %s: sărită: cheia publică este deja prezentă %s: sărită: cheia publică este deactivată %s: a fost creat trustdb %s: sufix necunoscut %s: înregistrare versiune cu recnum %lu %s:%d: opțiune învechită "%s" %s:%d: listă auto-key-locate invalidă %s:%d: opțiuni export invalide %s:%d: opțiuni import invalide %s:%d: opțiuni server de chei invalide %s:%d: opțiuni enumerare invalide %s:%d: opțiuni verificare invalide cheia %u-bit %s, ID %s, creată %s(Nici o descriere dată) (Probabil doriți să selectați %d aici) (Aceasta este o cheie de revocare senzitivă) (senzitiv)(dacă nu specificați cheia prin amprentă) (ați folosit probabil un program nepotrivit pentru această sarcină) * Comanda `sign' (semnează) poate fi prefixată cu un `l' pentru semnături locale (lsign), un `t' pentru semnături de încredere (tsign), un `nr' pentru semnături irevocabile (nrsign), sau orice combinație a acestora (ltsign, tnrsign, etc.). --clearsign [nume_fișier]--decrypt [nume_fișier]--edit-key id-utilizator [comenzi]--encrypt [nume_fișier]--lsign-key id-utilizator--output nu merge pentru această comandă --sign --encrypt [nume_fișier]--sign --symmetric [nume_fișier]--sign [nume_fișier]--sign-key id-utilizator--store [nume_fișier]--symmetric --encrypt [nume_fișier]--symmetric --sign --encrypt [nume_fișier]--symmetric [nume_fișier]-k[v][v][v][c] [id-utilizator] [inel_chei]... acesta este un bug (%s:%d:%s) 1 semnătură incorectă 1 semnătură nu a fost verificată din cauza unei chei lipsă 1 semnătură nu a fost verificată din cauza unei erori am găsit 1 ID utilizator fără auto-semnătură validă 10 traducător vezi trustdb.c:uid_trust_string_fixed@ (Arată pagina man pentru o listă completă a comenzilor și opțiunilor) @ Exemple: -se -r Dan [fișier] semnează și cifrează pentru utilizatorul Dan --clearsign [fișier] crează o semnătură text în clar --detach-sign [fișier] crează o semnătură detașată --list-keys [nume] arată chei --fingerprint [nume] arată amprente @ Opțiuni: @Comenzi: Ieșire în armură ASCII forțată. Sunt permise comenzi administrare Nu sunt permise comenzi administrare Comandă numai-administrare Răspundeți "da" (sau numai "d") dacă sunteți OK să generați subcheia.Răspundeți "da" dacă este OK să ștergeți subcheiaRăspundeți "da" dacă este OK să suprascrieți fișierulRăspundeți "da" dacă într-adevăr doriți să ștergeți acest ID utilizator. Toate certificatele sunt de asemenea pierdute!Răspundeți "da" dacă doriți să semnați TOATE ID-urile utilizatorRăspundeți "da" sau "nu"Sunteți într-adevăr sigur(ă) că doriți să semnați această cheie cu cheia d-voastră "%s" (%s) Sunteți încă sigur(ă) că doriți să o adăugați? (d/N) Sunteți încă sigur(ă) că doriți să o revocați? (d/N) Sunteți sigur(ă) că doriți să ștergeți permanent "%s"? (d/N)Sunteți sigur(ă) că doriți să desemnați această cheie ca și un revocator desemnat? (d/N) Sunteți sigur(ă) că doriți să o folosiți? (d/N) Sunteți sigur(ă) că doriți să o folosiți? (d/N) Sunteți sigur(ă) că doriți să îl folosiți? (d/N) AutentificăSemnătură INCORECTĂ din "%s"Amprenta CA: eroare CRC; %06lX - %06lX Nu pot verifica semnătura: %s Nu pot edita această cheie: %s Nu pot deschide `%s': %s RenunțăPrenumele proprietarului cardului: Numele de familie al proprietarului cardului: Certificatele ce conduc la o cheie cu încredere supremă: CertificăSchimbă (N)ume, (C)omentariu, (E)mail sau (O)K/(T)Termină? Schimbă (N)ume, (C)omentariu, (E)mail sau (T)Termină? Schimbați toate preferințele ale tuturor ID-urilor utilizator (sau doar cele selectate) conform cu lista curentă de preferințe. Timestamp-urile tuturor auto-semnăturilor afectate vor fi avansate cu o secundă. Schimb timpul de expirare pentru o subcheie. Schimb timpul de expirare pentru cheia primară. Cifru: Comanda așteaptă un nume de fișier ca argument Comentariu: Compresie: Creați un certificat de revocare desemnat pentru această cheie? (d/N) Creați un certificat de revocare pentru această cheie? (d/N) Creați un certificat de revocare pentru această semnătură? (d/N) Server de chei preferat critic: Notare semnătură critică: Politică de semnături critică: Acțiuni permise curent: Destinatari curenți: Cheia DSA %s necesită un hash de %u bit sau mai lung Cheia DSA %s folosește un hash (%u bit) nesigur DSA necesită lungimea hash să fie multiplu de 8 biți Ștergeți această semnătură bună? (d/N/t)Ștergeți această semnătură invalidă? (d/N/t)Șterge această cheie din inelul de chei? (d/N) Ștergeți această semnătură necunoscută? (d/N/t)Am șters %d semnături. Am șters %d semnături. Semnătură detașată. Rezumat: Afișez poza ID %s de dimensiune %ld pentru cheia %s (uid %d) Doriți într-adevăr să ștergeți cheile selectate? (d/N) Doriți într-adevăr să ștergeți această cheie? (d/N) Doriți într-adevăr să faceți acest lucru? (d/N) Doriți într-adevăr să revocați toată cheia? (d/N) Doriți într-adevăr să revocați subcheile selectate? (d/N) Doriți într-adevăr să revocați această subcheie? (d/N) Doriți într-adevăr să setați această cheie cu încredere supremă? (d/N) Doriți să creați o nouă semnătură pentru a o înlocui pe cea expirată? (d/N) Doriți să o promovați la o semnătură total exportabilă? (d/N) Doriți să o promovați la o auto-semnătură OpenPGP? (d/N) Doriți să o semnați oricum din nou? (d/N) Doriți ca semnătura d-voastră să expire în același timp? (D/n) EROARE: Adresă de email: CifreazăIntroduceți PIN Admin: Introduceți nume-fișier JPEG pentru poză ID: Introduceți noul PIN Admin: introduceți noul PIN: Introduceți PIN: Introduceți o descriere opțională; terminați cu o linie goală: Introduceți un nou nume-fișierIntroduceți număr/numere, N)ext (următor), sau Q)uit (termină) > Introduceți fraza-parolă Introduceți fraza-parolă: Introduceți numele deținătorului cheiiIntroduceți noua frază-parolă pentru acestă cheie secretă. Introduceți notația: Introduceți valoarea cerută precum a arătat la prompt. Este posibil să introduceți o dată ISO (AAAA-LL-ZZ) dar nu veți obține un răspuns de eroare bun - în loc sistemul încearcă să interpreteze valoare dată ca un interval.Introduceți lungimea cheiiIntroduceți ID-ul utilizator al destinatarului mesajului.Introduceți ID-ul utilizator al revocatorului desemnat: Introduceți URL-ul serverului de chei preferat: Eroare citind cheia de rezervă de pe `%s': %s Eroare: Nume combinat prea lung (limita este de %d caractere). Eroare: Spațiile duble nu sunt permise. Eroare: datele de login prea lungi (limita este de %d caractere). Eroare: Deocamdată sunt permise numai caractere ASCII. Eroare DO personal pre lung (limita este de %d caractere). Eroare: Caracterul "<" nu poate fi folosit. Eroare: trustdb este coruptă Eroare: URL prea lung (limita este de %d caractere). Eroare: caractere invalide în șir preferințe. Eroare: amprentă formatată invalid. Eroare: lungime invalidă pentru șir preferințe. Eroare: răspuns invalid. Semnătură expirată din "%s"Capabilități: Fișierul `%s' există. Dați numele fișierului la care se aplică semnăturaDați-i drumul și scrieți mesajul ... Semnătură bună din "%s"Hash: Sugestie: Selectați ID-ul utilizator de semnat Apăsați return când sunteți gata sau apăsați 'c' pentru a renunța: Cât de atent ați verificat că cheia pe care sunteți pe cale a o semna aparține într-adevăr persoanei numite deasupra? Dacă nu știți ce să răspundeți, introduceți "0". Cât de mult credeți că această cheie aparține într-adevăr utilizatorului numit? Am verificat această cheie superficial. Am verificat această cheie foarte atent. Nu am verificat această cheie deloc. cifru IDEA indisponibil, vom încerca să folosim %s în loc Dacă nu merge, vă rugăm să consultați manualul Dacă doriți, puteți introduce un text descriind de ce publicați acest certificat de revocare. Vă rugăm fiți concis. O linie goală termină textul. Dacă doriți oricum să folosiți această cheie fără încredere, răspundeți "da".În general nu este o idee bună să folosiți aceeași cheie și pentru semnare și pentru cifrare. Acest algoritm ar trebui folosit numai în anumite domenii. Vă rugăm consultați mai întâi un expert în domeniu.Caracter invalid în comentariu Caracter invalid în nume Comandă invalidă (încercați "help") Cheia invalidă %s făcută validă de --allow-non-selfsigned-uid Frază-parolă invalidă; vă rugăm mai încercați o datăSelecție invalidă. Este aceasta corect? (d/N) Este aceasta OK? (d/N) Este această poză corectă (d/N/t)? NU este sigur că cheia aparține persoanei numite în ID-ul utilizator. Dacă știți *cu adevărat* ce faceți, puteți răspunde cu da la următoarea întrebare. Este sarcina d-voastră să atribuiți o valoare aici; această valoare nu va fi niciodată exportată pentru o terță parte. Trebuie să implementăm rețeaua-de-încredere; aceasta nu are nimic în comun cu certificatele-de-rețea (create implicit).Cheia %s este deja revocată. Cheie disponibilă la: Cheia nu expiră deloc Cheia expiră pe %s Generarea cheii a fost anulată. Generarea cheii a eșuat: %s Cheia a fost compromisăCheia are numai articole de cheie sau talon (stub) pe card - nici o frază parolă de schimbat. Cheia nu mai este folosităCheia este protejată. Cheia este revocată.Cheia este înlocuităCheia este validă pentru? (0) Cheia nu a fost schimbată așa că nici o actualizare a fost necesară. Inel de cheiServer de chei no-modifyPreferințe limbă: Date login (nume cont): Creez copie de rezervă a cheii de cifrare în afara cardului? (d/N) N pentru a schimba numele. C pentru a schimba comentariul. E pentru a schimba adresa de email. O pentru a continua cu generarea cheii. T pentru a termina generarea cheii.NOTĂ: %s nu este disponibil în această sesiune NOTĂ: %s nu este pentru o folosire normală! NOTĂ: Nu există nici o garanție că cardul suportă lungimea cerută. Dacă generarea cheii nu reușește, vă rugăm verificați documentație cardului dvs. pentru a vedea ce lungimi sunt permise. NOTĂ: Această capabilitate nu este disponibil în %s NOTĂ: Această cheie nu este protejată! NOTĂ: S/N-ul unei chei nu se potrivește cu cel al cardului NOTĂ: copia de siguranța a cheii cardului salvată la `%s' NOTĂ: crearea de subchei pentru chei v3 nu este conform OpenPGP NOTĂ: cheia a fost revocatăNOTĂ: cheile sunt deja stocate pe card! NOTĂ: nici un fișier opțiuni implicit `%s' NOTĂ: fișier opțiuni implicite vechi `%s' ignorat NOTĂ: cheia primară este online și stocată pe card NOTĂ: cheia secundară este online și stocată pe card NOTĂ: cheia secretă %s a expirat la %s NOTĂ: expeditorul a cerut "doar-pentru-ochii-d-voastră" NOTĂ: cheia semnăturii %s a expirat %s NOTĂ: modul S2K simplu (0) este contraindicat cu insistență NOTĂ: nu poate fi scris în trustdb Numele nu poate începe cu o cifră Numele trebuie să fie de cel puțin 5 caractere Aveți nevoie de cheia secretă pentru a face aceasta. NnCcEeOoTtNici o semnătură corespunzătoare în inelul secret Nici un ajutor disponibilNici un disponibil disponibil pentru `%s'Nici un motiv specificatNici o subcheie cu indicele %d Nu există acest ID utilizator. Nici o valoare de încredere atribuită lui: Nici un ID utilizator cu hash-ul %s Nici un ID utilizator cu indicele %d Nu este o adresă de email validă Nu este semnată de dvs. Notații:De notat că această cheie nu poate fi folosită pentru cifrare. Poate doriți să folosiți comanda "--edit-key" pentru a genera o subcheie secundară pentru acest scop. Notă: Adresa semnatarului `%s' nu se potrivește cu intrarea DNS Notă: Această cheie a fost deactivată. Notă: Această cheie a expirat! Notă: Adresa verificată a semnatarului este `%s' Nu am șters nimic. Nimic de semnat cu cheia %s cardul OpenPGP nr. %s detectat cardul OpenPGP nu e disponibil: %s Suprascriu? (d/N) Încrederea proprietar nu poate fi setată când este folosită o bază de date de încredere furnizată de utilizator apelul PIN a returnat eroare: %s PIN-ul pentru CHV%d este prea scurt; lungimea minimă este %d PIN-ul nu a fost repetat corect; mai încercați o datăVă rugăm corectați mai întâi eroarea Vă rugăm decideți cât de multă încredere aveți în acest utilizator pentru a verifica cheile altor utilizatori (folosind pașapoarte, verificând amprentele din diferite surse, etc.) Vă rugăm nu puneți adresa de email în numele real sau comentariu Vă rugăm să introduceți domeniul de restricționare al acestei semnături, sau apăsați enter pentru niciunul. Vă rugăm introduceți un nou nume-fișier. Dacă doar apăsați RETURN, va fi folosit fișierul implicit (arătat în paranteze).Vă rugăm introduceți un comentriu opționalVă rugăm introduceți numele fișierului de date: Vă rugăm să introduceți adâncimea acestei semnături de încredere. O adâncime mai mare de 1 permite ca cheia pe care o semnați să facă semnături de încredere în numele d-voastră. Vă rugăm introduceți fraza-parolă; aceasta este o propoziție secretă Vă rugăm reparați această deficiență posibilă de securitate Vă rugăm introduceți cardul și apăsați return sau apăsați 'c' pentru a renunța: Vă rugăm să observați că setările din fabrică ale PIN-urilor sunt PIN = `%s' PIN Admin = `%s' Ar trebui să le schimbați folosind comanda --change-pin Vă rugăm observați că validitatea cheii arătate nu este în mod necesar corectă dacă nu reporniți programul. Vă rugăm ștergeți selecțiile din cheile secrete. Vă rugăm scoateți cardul curent și introducați unul cu număr de serie: %.*s Vă rugăm repetați ultima frază-parolă, pentru a fi sigur(ă) ce ați tastat.Raportați bug-uri la . Vă rugăm selectați cel mult o subcheie. Vă rugăm selectați exact un ID utilizator. Vă rugăm selectați motivul pentru revocare: Vă rugăm selectați tipul de cheie de generat: Selectați ce fel de cheie doriți: Vă rugăm selectați unde să fie stocată cheia: Specificați cât de mult timp doriți să fie validă cheia. 0 = cheia nu expiră = cheia expiră în n zile w = cheia expiră în n săptămâni m = cheia expiră în n luni y = cheia expiră în n ani Specificați cât de mult timp doriți să fie validă semnătura. 0 = semnătura nu expiră = semnătura expiră în n zile w = semnătura expiră în n săptămâni m = semnătura expiră în n luni y = semnătura expiră în n ani Vă rugăm folosiți mai întâi comanda "toggle". Vă rugăm așteptați, este adunată entropia. Faceți ceva dacă vă ajută să nu vă plictisiți, pentru că va îmbunătăți calitatea entropiei. Acțiuni posibile pentru o cheie %s: Server de chei preferat: Amprentă cheie primară:Date DO personale: Continuă? (d/N) Pubkey: Cheia publică este deactivată. Terminați fără a salva? (d/N) modulus-ul RSA lipsește sau nu are %d biți prime-ul RSA %s lipsește sau nu are %d biți Exponentul public RSA lipsește sau are mai mult de %d biți Nume real: Doriți într-adevăr să creați certificatele de revocare? (d/N) Creați într-adevăr? (d/N) Ștergeți într-adevăr această auto-semnătură? (d/N)Mutați într-adevăr cheia primară? (d/N) Ștergeți într-adevăr toate ID-urile utilizator selectate? (d/N) Ștergeți într-adevăr acest ID utilizator? (d/N) Doriți într-adevăr să revocați toate ID-urile utilizator selectate? (d/N) Doriți într-adevăr să revocați acest ID utilizator? (d/N) Semnați într-adevăr toate ID-urile utilizator? (d/N) Doriți cu adevărat să semnați? (d/N) Doriți într-adevăr să actualizați preferințele pentru ID-urile utilizator selectate? (d/N) Doriți într-adevăr să actualizați preferințele? (d/N) Motiv pentru revocare: %s Repetați fraza-parolă Repetați fraza-parolă: Repetați acest PIN: Înlocuiesc cheia existentă? (d/N) Înlocuiesc cheile existente? (d/N) Lungimea cheii necesară este %u biți Codul Reset este prea scurt; lungimea minimă este %d Codul Reset nu (mai) este disponibil Certificat de revocare creat. Certificat de revocare creat. Vă rugăm mutați-l pe un medium pe care îl puteți ascunde; dacă cineva pune mâna pe acest certificat l-ar putea folosi să vă facă cheia inutilizabilă. Este indicat să tipăriți acest certificat și să-l păstrați undeva sigur, în caz că mediumul este deteriorat. Dar fiți atent: sistemul de tipărire al mașinii d-voastră ar putea păstra datele și să le facă accesibile altora! Salvați schimbările? (d/N) Cheia secretă este disponibilă. Părțile secrete ale cheii primare nu sunt disponibile. Părți secrete ale cheii primare sunt stacate pe card. Selectați algoritmul de folosit. DSA (aka DSS) este Digital Signature Algorithm și poate fi folosit numai pentru semnături. Elgamal este un algoritm numai pentru cifrare. RSA poate fi folosit pentru semnături sau cifrare. Prima cheie (primară) trebuie să fie întotdeauna o cheie cu care se poate semna.Setează lista de preferințe ca: Sex ((M)asculin, (F)eminin sau spațiu): SemneazăDoriți să-l semnați? (d/N) Semnătura nu expiră deloc Semnătură expirată %s Semnătura expiră %s Semnătura expiră pe %s Semnătura este validă pentru? (%s) Semnătură făcută %s Semnătură făcută %s folosind cheia %s cu ID %s Notare semnătură: Politică de semnături: SsCcAaTtSubcheia %s este deja revocată. Sintaxă: gpg [opțiuni] [fișiere] sign, check, encrypt sau decrypt operațiunea implicită depinde de datele de intrare Sintaxă: gpgv [opțiuni] [fișiere] Verifică semnături folosind cheile cunoscute ca fiind de încredere Cardul va fi acum reconfigurat pentru a genera chei de %u biți Nivelul minim de încredere pentru această cheie este: %s Generatorul de numere aleatoare este doar ceva temporar pentru a-l face să meargă - nu este nicidecum un GNA sigur (secure)! NU FOLOSIȚI NICI O DATĂ GENERATĂ DE ACEST PROGRAM!! Auto-semnătura pe "%s" este o semnătură stil PGP 2.x. Semnătura nu este validă. Aceasta ar trebui ștearsă de pe inelul d-voastră de chei.Semnătura va fi marcată ca non-exportabilă. Semnătura va fi marcată ca non-revocabilă. Nu există nici o preferință pentru un ID utilizator stil PGP 2.x. Acest JPEG este foarte mare (%d octeți) ! Această comandă nu este permisă în modul %s. Această comandă este disponibilă numai pentru carduri versiunea 2 Aceasta este o cheie secretă! - chiar doriți să o ștergeți? (d/N) Aceasta este o semnătură care leagă ID-ul utilizator de cheie. De obicei nu este o idee bună să ștergeți o asemenea semnătură. De fapt, GnuPG ar putea să nu mai poată folosi această cheie. Așa că faceți acest lucru numai dacă această auto-semnătură este dintr-o oarecare cauză invalidă și o a doua este disponibilă.Aceasta este o semnătură validă pe cheie; în mod normal n-ar trebui să ștergeți această semnătură pentru că aceasta ar putea fi importantăla stabilirea conexiunii de încredere la cheie sau altă cheie certificată de această cheie.Această cheie ne aparține Această cheie a fost deactivatăAceastă cheie a expirat!Această cheie va expira pe %s. Această cheie nu este protejată. Această cheie poate fi revocată de %s cheia %sAceastă cheie aparține probabil utilizatorului numit Această cheie a fost revocată pe %s de %s cheia %s Această semnătură nu poate fi verificată pentru că nu aveți cheia corespunzătoare. Ar trebui să amânați ștergerea sa până știți care cheie a fost folosită pentru că această cheie de semnare ar putea constitui o conexiune de încredere spre o altă cheie deja certificată.Această semnătură a expirat pe %s. Aceasta va fi o auto-semnătură. Aceasta va face cheia de nefolosit în PGP 2.x. Pentru a fi revocat de: Pentru a construi Rețeaua-de-Încredere, GnuPG trebuie să știe care chei au nivel de încredere suprem - acestea de obicei sunt cheile pentru care aveți acces la cheia secretă. Răspundeți "da" pentru a seta această cheie cu nivel de încredere suprem Număr total procesate: %lu URL pentru a aduce cheia publică: NecompresatTip de semnătură necunoscut `%s' Folosire: gpg [opțiuni] [fișiere] (-h pentru ajutor)Folosire: gpgv [opțiuni] [fișiere] (-h pentru ajutor)Folosiți oricum această cheie? (d/N) ID utilizator "%s" compactat: %s ID utilizator "%s" este expirat.ID-ul utilizator "%s" nu este auto-semnat.ID utilizator "%s" a fost revocat.ID-ul utilizator "%s" poate fi semnat. ID utilizator "%s": %d semnătură ștearsă ID utilizator "%s": %d semnături șterse ID-ul utilizator "%s": deja curat. ID-ul utilizator "%s": deja minimizat ID utilizator nu mai este validAVERTISMENT: AVERTISMENT: "%s" este o comandă învechită - nu o folosiți AVERTISMENT: "%s" este o opțiune învechită AVERTISMENT: %s înlocuiește %s AVERTISMENT: există 2 fișiere cu informații confidențiale. AVERTISMENT: cheile Elgamal pentru semnătură și cifrare prea vechi (deprecated) AVERTISMENT: Aceasta este o cheie stil PGP 2.x. Adăugarea unui revocator desemnat poate face ca unele versiuni de PGP să respingă cheia. AVERTISMENT: Aceasta este o cheie stil PGP2. Adăugarea unei poze ID poate cauza unele versiuni de PGP să respingă această cheie. AVERTISMENT: Această cheie a fost revocată revocatorul desemnat! AVERTISMENT: Această cheie a fost revocată de proprietarul ei! AVERTISMENT: Această cheie nu este certificată de o semnătură de încredere! AVERTISMENT: Această cheie nu este certificată cu suficiente semnături de încredere! AVERTISMENT: Această cheie a fost revocată de proprietarul ei! AVERTISMENT: Folosiți o cheie fără încredere! AVERTISMENT: Noi NU avem încredere în această cheie! AVERTISMENT: Cheie slabă detectată - vă rugăm schimbați din nou fraza-parolă. AVERTISMENT: `%s' este un fișier gol AVERTISMENT: o semnătură ID utilizator este datată %d secunde în viitor AVERTISMENT: desemnarea unei chei ca un revocator desemnat nu poate fi anulată! AVERTISMENT: algoritm cifrare %s nu a fost găsit în preferințele destinatarului AVERTISMENT: algoritmul rezumat %s este prea vechi (deprecated) AVERTISMENT: mesajul cifrat a fost manipulat! AVERTISMENT: forțând algoritmul de compresie %s (%d) violați preferințele destinatarului AVERTISMENT: forțarea algoritmului rezumat %s (%d) violează preferințele destinatarului AVERTISMENT: forțând cifrul simetric %s (%d) violați preferințele destinatarului AVERTISMENT: dimensiune invalidă pentru fișierul random_seed - nu va fi folosită AVERTISMENT: cheia %s conține preferințe pentru indisponibil AVERTISMENT: cheia %s poate fi revocată: aduc revocarea cheii %s AVERTISMENT: cheia %s poate fi revocată: cheia de revocare %s nu este prezentă. AVERTISMENT: manipulator server de chei dintr-o versiune diferită de GnuPG (%s) AVERTISMENT: opțiunile serverului de chei `%s' nu sunt folosite pe această platformă AVERTISMENT: mesajul a fost cifrat cu o cheie slabă din cifrul simetric. AVERTISMENT: mesajul nu a avut integritatea protejată AVERTISMENT: multiple plaintext văzute AVERTISMENT: am detectat multiple semnături. Numai prima va fi verificată. AVERTISMENT: nici un ID utilizator nu a fost marcat ca primar. Această comandă poate cauza ca un alt ID utilizator să devină ID-ul utilizator primar presupus. AVERTISMENT: nimic exportat AVERTISMENT: opțiunile din %s nu sunt încă active în timpul acestei rulări AVERTISMENT: cheie de sesiune cifrată simetric potențial nesigură (insecure) AVERTISMENT: programul ar putea crea un fișier core! AVERTISMENT: destinatari (-r) furnizați fără a folosi cifrare cu cheie publică AVERTISMENT: cheia secretă %s nu are un checksum SK simplu AVERTISMENT: conflict pentru rezumat semnătură în mesaj AVERTISMENT: subcheia de semnare %s are o certificare-reciprocă invalidă (invalid cross-certification) AVERTISMENT: subcheia de semnare %s nu este certificată reciproc (cross-certified) AVERTISMENT: semnătura nu va fi marcată ca non-exportabilă. AVERTISMENT: semnătura nu va fi marcată ca non-revocabilă. AVERTISMENT: această cheie poate fi revocată (cheia de revocare nu este prezentă) AVERTISMENT: nu pot %%-expanda notarea (prea mare). Folosesc neexpandat. AVERTISMENT: nu pot %%-expanda URL-ul de politici (prea mare). Îl folosesc neexpandat. AVERTISMENT: nu pot %%-expanda URL-ul serverului de chei (prea mare). Îl folosesc neexpandat. AVERTISMENT: nu pot obține URI %s: %s AVERTISMENT: nu pot interpreta URI %s AVERTISMENT: nu pot reactualiza cheia %s via %s: %s AVERTISMENT: nu pot șterge directorul temporar `%s': %s AVERTISMENT: nu pot șterge fișierul temporar (%s) `%s': %s AVERTISMENT: proprietate director incluziuni nesigur (unsafe) pentru fișier configurare `%s' AVERTISMENT: proprietate director incluziuni nesigur (unsafe) pentru directorul home `%s' AVERTISMENT: permisiuni director incluziuni nesigure (unsafe) pentru fișier configurare `%s' AVERTISMENT: permisiuni director incluziuni nesigure (unsafe) pentru directorul home `%s' AVERTISMENT: proprietate nesigură (unsafe) pentru fișier configurare `%s' AVERTISMENT: proprietate nesigură (unsafe) pentru directorul home `%s' AVERTISMENT: permisiuni nesigure (unsafe) pentru fișier configurare `%s' AVERTISMENT: permisiuni nesigure (unsafe) pentru directorul home `%s' AVERTISMENT: folosesc algoritmul de cifrare experimental %s AVERTISMENT: folosesc algoritmul rezumat experimental %s AVERTISMENT: folosesc algoritmul cu cheie publică experimental %s AVERTISMENT: este folosită memorie neprotejată (insecure)! AVERISMENT: este folosit un generator de numere aleatoare nesigur (insecure)!! Trebuie să generăm o grămadă de octeți aleatori. Este o idee bună să faceți altceva (tastați la tastatură, mișcați mausul, utilizați discurile) în timpul generării numerelor prime; aceasta dă o șansă generatorului de numere aleatoare o șansă mai bună de a aduna destulă entropie. Ce lungime de cheie doriți pentru cheia de autentificare? (%u) Ce lungime de cheie doriți pentru cheia de cifrare? (%u) Ce lungime de cheie doriți pentru cheia de semnătură? (%u) Ce lungime de cheie doriți pentru subcheie? (%u) Ce lungime de cheie doriți? (%u) Când semnați un ID utilizator pe o cheie ar trebui să verificați mai întâi că cheia aparține persoanei numite în ID-ul utilizator. Este util și altora să știe cât de atent ați verificat acest lucru. "0" înseamnă că nu pretindeți nimic despre cât de atent ați verificat cheia "1" înseamnă că credeți că cheia este a persoanei ce pretinde că este proprietarul ei, dar n-ați putut, sau nu ați verificat deloc cheia. Aceasta este utilă pentru verificare "persona", unde semnați cheia unui utilizator pseudonim. "2" înseamnă că ați făcut o verificare supericială a cheii. De exemplu, aceasta ar putea însemna că ați verificat amprenta cheii și ați verificat ID-ul utilizator de pe cheie cu un ID cu poză. "3" înseamnă că ați făcut o verificare extensivă a cheii. De exemplu, aceasta ar putea însemna că ați verificat amprenta cheii cu proprietarul cheii în persoană, că ați verificat folosind un document dificil de falsificat cu poză (cum ar fi un pașaport) că numele proprietarului cheii este același cu numele ID-ului utilizator al cheii și că ați verificat (schimbând emailuri) că adresa de email de pe cheie aparține proprietarului cheii. De notat că exemplele date pentru nivelele 2 și 3 ceva mai sus sunt *numai* exemple. La urma urmei, d-voastră decideți ce înseamnă "superficial" și "extensiv" pentru d-voastră când semnați alte chei. Dacă nu știți care este răspunsul, răspundeți "0".Sunteți pe cale să revocați aceste semnături: Folosiți setul de caractere `%s' Nu puteți schimba data de expirare a unei chei v3 Nu puteți șterge ultimul ID utilizator! Nu ați specificat un ID utilizator. (puteți folosi "-r") Nu doriți o frază-parolă - aceasta este probabil o idee *proastă*! Nu aveți nevoie de o frază-parolă - aceasta este probabil o idee *proastă*! O să o fac oricum. Puteți schimba fraza-parolă oricând, folosind acest program cu opțiunea "--edit-key". Ați semnat aceste ID-uri utilizator pe cheia %s: Nu puteți adăuga un revocator desemnat la o cheie stil PGP 2.x. Nu puteți adăuga o poză ID la o cheie stil PGP2. Nu puteți crea o semnătură OpenPGP pe o cheie PGP 2.x câtă vreme sunteți în modul --pgp2. Puteți încerca să re-creați trustdb folosind comenzile: Trebuie să selectați cel puțin o cheie. Trebuie mai întâi să selectați cel puțin un ID utilizator. Trebuie să selectați exact o cheie. Aveți nevoie de o frază-parolă pentru a vă proteja cheia secretă. Aveți nevoie de o frază-parolă pentru a descuia cheia secretă pentru utilizator: "%s" Aveți nevoie de o frază-parolă pentru a descuia cheia secretă pt. utilizator: "%.*s" cheia %u-bit %s, ID %s, creată %s%s Ați selectat acest ID-UTILIZATOR: "%s" Ar trebui să specificați un motiv pentru certificare. În funcție de context aveți posibilitatea să alegeți din această listă: "Cheia a fost compromisă" Folosiți această opțiune dacă aveți un motiv să credeți că persoane neautorizate au avut acces la cheia d-voastră secretă. "Cheia este înlocuită" Folosiți această opțiune dacă înlocuiți cheia cu una nouă. "Cheia nu mai este folosită" Folosiți această opțiune dacă pensionați cheia. "ID-ul utilizator nu mai este valid" Folosiți această opțiune dacă ID-ul utilizator nu mai trebuie folosit; de obicei folosită pentru a marca o adresă de email ca invalidă. Semnătura d-voastră curentă pe "%s" a expirat. Semnătura d-voastră curentă pe "%s" semnătură locală. Decizia d-voastră? Selecția d-voastră? Selecția dvs.? (introduceți `?' pentru informații suplimentare): Sistemul d-voastră nu poate afișa date după 2038. Totuși, acestea vor fi corect mânuite până în 2106. [ deplină][ nedef ][expirată] [revocată][necunoscută][ID utilizator nu a fost găsit][nume_fișier][marginal][nesetat(ă)][revocare][auto-semnătură][ supremă][nesigur]`%s' deja compresat `%s' nu este un fișier JPEG `%s' nu este un fișier normal - ignorat `%s' nu este un set de carectere valid `%s' nu este un ID-cheie de lungime validă `%s' nu este expirare de semnătură validă pe cale de a exporta o subcheie neprotejată accesul la comenzile de administrare nu este configurată acțiunea `%s' nu este suportată cu schema serverului de chei `%s' adaugă o cheie la un smartcardadaugă o poză IDadaugă o cheie de revocareadaugă o subcheieadaugă un ID utilizatoropțiune ambiguă `%s' destinator anonim; încerc cheia secretă %s ... header armură: armură: %s presupunem date cifrate %s presupun semnătură incorectă din cheia %s datorită unui bit critic necunoscut presupun date semnate în `%s' adu automat cheile la verificarea semnăturiloram adus automat `%s' via %s MPI incorectURI incorectcertificat incorectcheie incorectăfrază-parolă incorectăcheie publică incorectăcheie secretă incorectăsemnătură incorectăfii oarecum mai tăcutbinarbuild_packet a eșuat: %s cCpun în cache inelul de chei `%s' nu pot accesa %s - card OpenPGP invalid? nu pot accesa `%s': %s nu pot închide `%s': %s nu mă pot conecta la `%s': %s nu pot crea `%s': %s nu pot crea fișier de rezervă `%s': %s nu pot crea directorul `%s': %s nu pot crea încuietoare (lock) pentru `%s' nu pot deactiva generarea fișierelor core: %s nu pot face acest lucru în modul batch nu pot face acest lucru în mod batch fără "--yes" nu pot genera un număr prim cu pbiți=%u qbiți=%u nu pot genera un număr prim cu mai puțin de %d biți nu pot mânui algoritmul cu cheie publică %d nu pot mânui linii de text mai lungi de %d caractere nu pot mânui aceste date de semnături ambigue nu pot încuia (lock) `%s' nu pot bloca `%s': %s' nu pot deschide `%s' nu pot deschide `%s': %s nu pot deschide date semnate `%s' nu pot deschide inelul de cheinu pot cere fraza-parolă în modul batch nu pot citi `%s': %s nu pot obține statistici `%s': %s nu pot crea un pachet ESK simetric datorită modului S2K nu pot scrie `%s': %s anulatăanulată de utilizator renunță|renuntanu pot desemna o cheie stil PGP 2.x ca un revocator desemnat nu pot evita cheie slabă pentru cifru simetric; am încercat %d ori! cardul nu suportă algoritmul rezumat %s cardul este încuiat permanent! cititorul de card nu e disponibil nr-card: schimbă URL-ul de unde să fie adusă cheiaschimbă o amprentă CAschimbă PIN-ul unui cardschimbă numele purtătorului carduluischimbă sexul purtătorului carduluischimbă data de pe cardschimbă data de expirare pentru cheia sau subcheile selectateschimbă preferințele de limbăschimbă numele de loginschimbă încrederea pentru proprietarschimbă fraza-parolăverifică semnăturiverificarea semnăturii create a eșuat: %s verific trustdb eroare checksumalgoritm cifrare %d%s este necunoscut sau deactivat caracter : lipsăcompactează ID-urile utilizator nefolosibile și șterge toate semnăturile de pe cheiecompactează ID-urile utilizator nefolosibile și șterge semnăturile nefolosibile de pe cheiecompletes-needed trebuie să fie mai mare decât 0 comenzi în conflict nu am putut interpreta URL-ul serverului de chei crează o cheie publică la importul unei chei secretecrează ieșire în armură asciicreată: %stimestamp-ul de creare lipsește datele nu au fost salvate: folosiți opțiunea "--output" pentru a le salva eliminarea armurii a eșuat: %s decriptează datele (implicit)decriptarea a eșuat: %s decriptare OK șterge subcheile selectateșterge ID-urile utilizator selectateșterge semnăturile de pe ID-urile utilizator selectatestergere keyblock a eșuat: %s adânc: %d valid: %3d semnat: %3d încredere: %d-, %dq, %dn, %dm, %df, %du director `%s' creat deactivează cheiadeactivat(ă)afișează ID-urile photo la enumerarea cheilorarată ID-urile photo la verificare semnăturiinu șterge fișierele temporare după ce au fost folositenu face nici o schimbarenu actualiza baza de date de încredere după importridică nivelul de încredere a semnăturilor cu date PKA valideactivează cheiapunerea armurii a eșuat: %s cifrează datelecifrată cu %lu fraze-parolă cifrat cu cheia %s, ID %s cifrat cu cheia %u-bit %s, ID %s, creată %s cifrată cu 1 frază-parolă cifrat cu un algoritm necunoscut %d cifrarea unui mesaj în modul --pgp2 necesită un cifru IDEA cifrează numai cu cifru simetriceroare la alocarea memoriei: %s eroare la schimbarea lungimii cheii %d la %u biți: %s eroare la creearea `%s': %s eroare la crearea inelului de chei `%s': %s eroare la crearea frazei-parolă: %s eroare găsire înregistrare încredere în `%s': %s eroare la obținerea informației pentru cheia curentă: %s eroare la obținere noului PIN: %s eroare în `%s': %s eroare linia de trailer eroare la citire `%s': %s eroare la citirea datelor aplicației eroare la citirea amprentei DO eroare la citire keyblock: %s eroare la citire keyblock secret "%s": %s eroare la recuperarea stării CHV de pe card eroare la scriere `%s': %s eroare la scrierea cheii pe card: %s eroare la scrierea inelului de chei `%s': %s eroare la scrierea inelului de chei public `%s': %s eroare la scrierea inelului de chei secret `%s': %s cheia existentă va fi înlocuită expiratăexpirată: %sexpiră: %sexportă atribute ID-uri utilizator (în general ID-uri foto)exportă cheiexportă chei pentru un server de cheiexportă cheile de revocare marcate ca "sensitive"exportă semnăturile marcate ca numai-localexportul cheilor secrete nu este permis apeluri către server de chei extern nu este suportat de acest program chemarea programelor externe sunt deactivate datorită opțiunilor nesigure pentru permisiunile fișierului am eșuat să inițializez TrustDB:%s am eșuat să reconstruiesc cache-ul inelului de chei: %s am eșuat să stochez data creării: %s am eșuat să stochez amprenta: %s am eșuat să stochez cheia: %s am eșuat de-protejarea subcheii: %s nu am reușit să foloses PIn-ul implicit ca %s: %s - am deactivat folosirea implicită ulterioară femininadu cheia specificată de URL-ul de pe carderoare închidere fișiereroare creare fișiereroare ștergere fișierfișierul existăeroare deschidere fișiereroare citire fișiereroare redenumire fișiereroare scriere fișieramprenta de pe card nu se potrivește cu cea cerută marchează ID-ul utilizator selectat ca primarforțat(ă)forțând cifrul simetric %s (%d) violați preferințele destinatarului fstat pentru `%s' a eșuat în %s: %s fstat(%d) a eșuat în %s: %s deplinăeroare generalăgenerează mesaje compatibile cu PGP 2.xgenerează o nouă perechi de cheigenerează un certificat de revocaregenerează noi cheigenerarea cheii a eșuat generez o nouă cheie generez învechitul checksum de 16-bit pentru protecția cheii secrete gpg-agent nu este disponibil în această sesiune gpg-agent versiune protocol %d nu este suportat onorează înregistrarea PKA setat pe o cheie la aducerea cheiloronorează URL-ul serverului de chei preferat de pe cheieiImMtTsSimportă chei de la un server de cheiimportă semnături marcate ca numai-localimportă/combină cheiimportul de chei secrete nu este permis include cheile revocate în rezultatele căutăriiinclude subcheile la căutarea după ID-ul cheiilinia de intrare %u prea lungă sau lipsește LF linii de intrare mai lungi de %d caractere invalid(ă)mod S2K invalid; trebuie să fie 0, 1 sau 3 argument invalidarmură invalidăheader armură invalid: armură invalidă: linie mai lungă de %d caractere listă auto-key-locate invalidă header clearsig invalid linie cu liniuță escape invalidă: preferințe implicite invalide default-cert-level invalid; trebuie să fie 0, 1, 2 sau 3 opțiuni export invalide amprentă invalidăalgoritm hash invalid `%s' opțiuni import invalide articol invalid `%s' în șirul de preferințe inel de chei invalidopțiuni server de chei invalide protocol server de chei invalid (us %d!=handler %d) opțiuni enumerare invalide min-cert-level invalid; trebuie să fie 0, 1, 2 sau 3 pachet invalidfrază-parolă invalidăpreferințe cifrare personale invalide preferințe compresie personale invalide preferințe rezumat personale invalide caracter radix64 invalid %02X sărit pachet root invalid detectat în proc_tree() structură invalidă a cardului OpenPGP (DO 0x93) valoare invalidă opțiuni verificare invalide este puternic sugerat să vă actualizați preferințele și re-distribuiți cheia "%s" nu a fost găsită pe serverul de chei cheia "%s" nu a fost găsită: %s cheia %s nu are nici un ID utilizator cheia %s marcată ca având încredere supremă cheia %s apare de mai multe ori în trustdb cheia %s a fost creată %lu secundă în viitor (warp în timp sau probleme cu ceasul) cheia %s a fost creată %lu secunde în viitor (warp în timp sau probleme cu ceasul) cheia %s: "%s" %d noi semnături cheia %s: "%s" %d noi subchei cheia %s: "%s" %d noi ID-uri utilizator cheia %s: "%s" %d semnături curățate cheia %s: "%s" %d semnături curățate cheia %s: "%s" %d ID-uri utilizator curățate cheia %s: "%s" %d ID-uri utilizator curățate cheia %s: "%s" 1 nouă semnătură cheia %s: "%s" 1 nouă subcheie cheia %s: "%s" 1 nou ID utilizator cheia %s: "%s" nu a fost schimbată cheia %s: am adăugat certificatul de revocare "%s" cheia %s: certificatul de revocare "%s" importat cheia %s: cheie stil PGP 2.x - sărită cheia %s: subcheia HPK coruptă a fost reparată cheia %s: acceptată ca cheie de încredere cheia %s: am acceptat ID-ul utilizator ce nu e auto-semnat "%s" cheia %s: deja în inelul de chei secrete cheia %s: nu pot găsi keyblock-ul original: %s cheia %s: nu pot citi keyblock-ul original: %s cheia %s: am adăugat semnătura de cheie directă cheia %s: nu se potrivește cu copia noastră cheia %s: am detectat un ID utilizator duplicat - combinate cheia %s: certificat de revocare invalid: %s - respins cheia %s: certificat de revocare invalid: %s - sărit cheia %s: auto-semnătură invalidă pentru ID-ul utilizator "%s" cheia %s: legare subcheie invalidă cheia %s: revocare de subcheie invalidă cheia %s: material cheie pe card - sărit cheia %s: cheie nouă - sărită cheia %s: nici o cheie publică - nu pot aplica certificatul de revocare cheia %s: nici o cheie publică pentru cheia de încredere - sărită cheia %s: nici o subcheie pentru legarea cheii cheia %s: nici o subcheie pentru revocare de cheie cheia %s: nici o subcheie pentru semnătura legată de subcheie cheia %s: nici o subcheie pentru semnătura de revocare a subcheii cheia %s: nici un ID utilizator cheia %s: nici un ID utilizator pentru semnătură cheia %s: nici un ID utilizator valid cheia %s: semnătura nu poate fi exportată (clasa 0x%02X) - sărită cheia %s: nu e protejată - sărită cheia %s: cheia publică "%s" importată cheia %s: cheia publică nu a fost găsită: %s cheia %s: am șters multiple legături de subchei cheia %s: am șters multiple revocări de subcheie cheia %s: certificat de revocare într-un loc greșit - sărit cheia %s: cheie secretă importată cheia %s: cheia secretă nu a fost găsită: %s cheia %s: cheie secretă cu cifru invalid %d - sărită cheia %s: cheie secretă fără cheie publică - sărită cheia %s: am sărit subcheia cheia %s: am sărit ID-ul utilizator "%s" cheia %s: semnătură subcheie într-un loc greșit - sărită cheia %s: clasă de semnătură neașteptată (0x%02X) - sărită cheia %s: algoritm cu cheie publică nesuportat cheia %s: algoritm cu cheie publică nesuportat pentru ID-ul utilizator "%s" cheia există deja export cheie eșuat: %s generarea cheii este completă (%d secunde) cheia a fost creată %lu secundă în viitor (warp în timp sau probleme cu ceasul) cheia a fost creată %lu secunde în viitor (warp în timp sau probleme cu ceasul) cheia nu este marcată ca sigură - nu o pot folosi cu GNA falsificat! cheia nu a fost găsită pe serverul de chei operația pe cheie nu e posibilă: %s resursă keyblock `%s': %s inelul de chei `%s' creat eroare de comunicare server de chei: %s serverul de chei nu a trimis VERSION (versiune) eroare server de cheieroare internă server de chei recepție server de chei eșuată: %s actualizare server de chei eșuată: %s căutare server de chei eșuată: %s trimitere server de chei eșuată: %s serverul de chei a epuizat timpul de așteptare (timed out) lungime cheie invalidă; folosesc %u biți lungime cheie rotunjită la %u biți linie prea lungăafișează toate datele disponibileenumeră și verifică semnăturile cheiienumeră chei și ID-uri utilizatorenumeră cheienumeră chei și amprenteenumeră chei și semnăturienumeră preferințele (expert)afișează preferințele (detaliat)enumeră chei secretecrează o semnătură detașatădă numai un avertisment la conflicte de timestampmake_keysig_packet a eșuat: %s masculinCRC anormal variabila de mediu GPG_AGENT_INFO anormală id utilizator anormalmarginalmarginals-needed trebuie să fie mai mare decât 1 max-cert-depth trebuie să fie în intervalul de la 1 la 255 meniu pentru a schimba sau debloca PIN-ulmută o cheie de rezervă pe un smartcardmută o cheie pe un smartcardmut o semnătură de cheie în locul corect nNsemnături text în clar încuibărite eroare rețeaniciodatăniciodată fișier de configurare nou `%s' creat următoarea verificare trustdb programată pe %s nunu am găsit nici un semn = în definiția grupului `%s' nici un cardnici o cheie publică corespunzătoare: %s nici o datănici un inel de chei secrete implicit: %s nu a fost găsit nici un modul de adunare a entropiei nici un manipulator (handler) pentru schema serverului de chei `%s' nici o acțiune pentru serverul de chei! nici un server de chei cunoscut (folosiți opțiunea --keyserver) nu e nevoie de o verificare trustdb nu e nevoie de o verificare trustdb cu modelul de încredere `%s' nu e nevoie de o actualizare trustdb cu modelul de încredere `%s' nici un vizualizor foto specificat nu este suportată execuția nici unui program la distanță nici o cheie de revocare găsită pentru "%s" nici o cheie secretă nici o subcheie secretă pentru subcheia publică %s - ignorată nu am găsit nici o semnătură nici o dată semnată nu există acest id utilizatornu am găsit nici o cheie cu încredere supremă nici o dată OpenPGP validă găsită. nici un destinatar valid n-am găsit nici un inel de chei ce poate fi scris: %s nu am găsit nici un inel de chei public de scris: %s nu am găsit nici un inel de chei secret de scris: %s nu o semnătură detașată nu este un card OpenPGPnecifratneforțat(ă)neprocesatnu este suportat(ă)notă: fișier random_seed este gol notă: fișierul random_seed nu a fost actualizat oOOK, noi suntem destinatarul anonim. OK|OKvechea encodare a lui DEK nu este suportată semnătură de stil vechi (PGP 2.x) acceptă numai actualizări pentru cheile existenteoperația nu este posibilă fără memorie protejată (secure) inițializată fișier opțiuni `%s': %s nume fișier original='%.*s' informații încredere-proprietar curățate lipsește valorea încrederii în proprietari (ownertrust)fraza-parolă generată cu un algoritm rezumat necunoscut %d fraza-parolă nu a fost repetată corect; mai încercați o datăvă rugăm faceți un --check-trustdb vă rugăm introduceți o adresă de email (opțională dar recomandată)vă rugăm vedeți %s pentru informații suplimentare vedeți http://www.gnupg.org/documentation/faqs.html pentru informații suplimentare vă rugăm folosiți "%s%s" în loc vă rugăm așteptați câtă vreme este creată noua cheie ... preferința `%s' duplicată eof prematur (în CRC) eof prematur (în trailer) eof prematur (nici un CRC) afișează starea carduluiproblemă cu mânuirea pachetului cifrat problemă cu agentul - deactivez folosirea agentului întreabă înainte de a suprascriealgoritm de protecție %d%s nu este suportat algoritm rezumat %d nu este suportat cheile secretă și publică au fost create și semnate. cheie publică %s este mai nouă cu %lu secundă decât semnătura cheie publică %s este mai nouă cu %lu secunde decât semnătura cheia publică %s nu a fost găsită: %s decriptarea cu cheie publică a eșuat: %s cheia publică nu se potrivește cu cheia secretă! date cigrate cu cheie publică: DEK bun cheia publică este %s cheia publică nu a fost găsităcheia publică a cheii cu încredere supremă %s nu a fost găsită tTtermină|terminaieși din acest meniucaracter printabil în ghilimele în armură - probabil a fost folosit un MTA cu bug-uri această cheie pentru a avita probleme potențiale de ne-potrivire de algoritm eroare citire în `%s': %s citesc din `%s' citesc opțiuni din `%s' citirea cheii publice a eșuat: %s citesc stdin ... motiv pentru revocare: reactualizez %d chei de la %s reactualizez 1 cheie de la %s șterge câtmai mult posibil din cheie după importșterge cât mai mult posibil dincheie la exportareșterge chei de pe inelul de chei publicșterge chei de pe inelul de chei secretșterge fraza-parolă din subcheile exportateșterge părțile nefolosibile din cheie după importșterge părțile de nefolosit din cheie la exportareredenumirea `%s' ca `%s' a eșuat: %s repară defectele de la serverul de chei pks la importcer cheia %s de la %s cer cheia %s de la serverul %s %s limită resurserăspunsul nu conține modulul RSA răspunsul nu conține exponentul public RSA răspunsul nu conține datele cheii publice comentariu revocare: revocă cheia sau subcheile selectaterevocă ID-urile utilizator selectaterevocă semnăturile pentru ID-urile utilizator selectaterevocatărevocată de cheia d-voastră %s pe %s revocată: %srotunjită prin adaos la %u biți salvează și terminăcaută pentru chei pe un server de cheicaut "%s" de pe %s caut "%s" de pe serverul %s %s caut nume de pe %s caut nume de pe serverul %s %s cheia secretă "%s" nu a fost găsită: %s cheia secretă deja stocată pe un card cheia secretă nu e disponibilăpărți ale cheii secrete nu sunt disponibile părți secrete ale cheii nu sunt disponibile selectează subcheia Nselectează ID utilizator Nalgoritm rezumat certificare selectat este invalid algoritm cifrare selectat este invalid algoritm compresie selectat este invalid algoritm rezumat selectat este invalid selectarea openpgp a eșuat: %s trimit cheia %s lui %s trimit cheia %s serverului %s %s setează o notație pentru ID-urile utilizator selectatesetează lista de preferințe pentru ID-urile utilizator selectatesetează URL-ul serverului de chei preferat pentru ID-urile utilizator selectatearată notațiile standard IETF la enumerarea semnăturilorarată toate notațiile standard IETF la verificarea semnăturiiarată comenzi administrarearată toate notațiile la enumerarea semnăturilorarată toate notațiile la verificarea semnăturiiarată datele de expirare la enumerarea semnăturilorafișează amprenta cheiiarată numai ID-ul utilizator principal la verificarea semnăturiiafișează politicile URL-urilor la enumerarea semnăturilorarată URL-urile politicilor la verificarea semnăturiiarată URL-urile serverelor de chei preferate la enumerarea semnăturilorarată URL-urile serverelor de chei preferate la verificarea semnăturiiarată subcheile revocate și expirate la enumerarea cheilorarată ID-urile utilizator revocate și expirate la enumerarea cheilorarată ID-urile utilizator revocate și expirate la verificarea semnăturiiarată pozele pentru ID-urile utilizator selectatearată numele inelului de chei la enumerarea cheilorafișează acest mesajarată validitatea ID-ului utilizatorilor la enumerarea cheilorarată validitatea ID-ului utilizator la verificarea semnăturiiarată notațiile utilizatorilor la enumerarea semnăturilorarată toate notațiile utilizatorului la verificarea semnăturiisemnează o cheiesemnează o cheie localsemnează sau editează o cheiesemnează ID-urile utilizator selectate [* vezi mai jos pentru comenzi relevante]semnează ID-urile utilizatorilor selectați localsemnează ID-urile utilizatorilor selectați cu o semnătură irevocabilăsemnează ID-urile utilizatorilor selectați cu o semnătură de încredereverificare semnătură eliminată semnături create până acum: %lu semnată de cheia d-voastră %s la %s%s%s semnarea a eșuat: %s subcheia de semnare %s este deja certificată reciproc (cross-certified) semnare:sărită "%s": %s sărită "%s": duplicată sărită: cheia publică setată deja sărită: cheia publică setată deja ca destinatar implicit sărită: cheia secretă deja prezentă bloc de tip %d sărit auto-semnătură v3 sărită pentru ID-ul utilizator "%s" revocare standalone - folosiți "gpg --import" pentru a aplica semnătură de sine stătătoare (standalone) de clasă 0x%02x stocarea cheii pe card a eșuat: %s subcheia %s nu semnează și nu trebuie certificată reciproc (cross-certified) subpachetul de tip %d are bitul critic setat cifrarea simetrică a lui `%s' a eșuat: %s eroare de sistem la chemarea programului extern: %s ia cheile de pe acest inel de cheimodtextURL-ul politicii de certificare furnizat este invalid URL-ul serverului de chei preferat furnizat este invalid URL-ul politicii de semnături furnizat este invalid semnătura nu a putut fi verificată. Vă rugăm amintiți-vă că fișierul de semnătură (.sig sau .asc) ar trebui să fie primul dat în linia de comandă. există o cheie secretă pentru cheia publică "%s"! aceasta este o cheie ElGamal generată de PGP care nu e sigură pentru semnături!această cheie a fost deja desemnată ca un revocator aceasta poate fi cauzată de o auto-semnătură ce lipsește acest mesaj s-ar putea să nu poată fi folosit de %s această platformă necesită fișiere temporare când sunt chemate programe externe conflict timestampcomută între listele de chei secrete și publicecomută fanionul PIN de forțare a semnăturiiprea multe preferințe de cifrare prea multe preferințe de compresie prea multe preferințe de rezumat prea multe intrări în cache-ul pk - deactivat eroare bază de date încredereînregistrare încredere %lu nu este de tipul cerut %d înregistrare încredere %lu, tip req %d: citirea a eșuat: %s înregistrare încredere %lu, tip %d: scrierea a eșuat: %s încredere: %strustdb rec %lu: lseek a eșuat: %s trustdb rec %lu: scrierea a eșuat (n=%d): %s tranzacția trustdb prea mare trustdb: lseek a eșuat: %s trustdb: citirea a eșuat (n=%d): %s trustdb: sincronizarea a eșuat: %s trustlevel ajustat la DEPLIN datorită informației PKA valide trustlevel ajustat la NICIODATĂ datorită informației PKA incorecte supremănu pot afișa poza ID! nu pot executa programul extern nu pot executa programul `%s': %s nu pot executa shell-ul `%s': %s nu pot deschide fișierul JPEG `%s': %s nu pot citi răspunsul programului extern: %s nu pot seta cale-execuție ca %s nu pot actualiza înregistrare versiunii trustdb: scrierea a eșuat: %s nu pot folosi cifrul IDEA pentru pentru toate cheile pentru care cifrați. nu pot folosi model de încredere (%d) - presupun model de încredere %s deblocați PIN-ul folosind un Cod Resetarenecompresat|niciunulnedefinităarmură neașteptată: date neașteptatealgoritm cifrare neimplementatalgoritm pubkey neimplementatnecunoscutheader armură necunoscut: algoritm cifrare necunoscutalgoritm compresie necunoscutarticol configurare necunoscut `%s' destinatar implicit necunoscut "%s" algoritm rezumat necunoscutalgoritm de protecție a cheii necunoscut opțiune necunoscută `%s' tip de pachet necunoscutalgoritm de protecție necunoscut algoritm pubkey necunoscutclasă semnături necunoscutăversiune necunoscutăieșire nenaturală a programului extern nespecificat(ă)URI nesuportatalgoritm pubkey nefolosibilcheie publică de nefolositcheie secretă de nefolositactualizează toate cheile de la un server de cheiactualizarea a eșuat: %s actualizarea secretului a eșuat: %s actualizează baza de date de încrederefolosire: %sfolosire: gpg [opțiuni] folosește ca fișier ieșirefolosește modul text canonicfolosiți opțiunea "--delete-secret-keys" pentru a o șterge pe aceasta mai întâi. folosește comportament strict OpenPGPfolosește fișiere temporare pentru a transmite date la serverele de chei ajutătoarefolosește acest id-utilizator pentru a semna sau decriptaID-ul utilizator "%s" este deja revocat ID utilizator: "%s" folosesc model de încredere %s folosesc cifrul %s folosim PIN implicit ca %s folosim subcheia %s în loc de cheia primară %s validează semnăturile cu date PKAvaliditate: %slocvaceverificarea PIN-ului Admin este deocamdată interzisă prin această comandă verificarea CHV%d a eșuat: %s verifică o semnăturăverifică PIN-ul și listează toate dateleaștept blocarea pentru `%s...' cheie slabăcheie slabă creată - reîncerc dimensiune ciudată pentru o cheie de sesiune cifrată (%d) nu va rula cu memorie neprotejată (insecure) pentru că %s scriu semnătură directă scriu semnătură legată de cheie scriu cheia nouă scriu cheia publică în `%s' scriu talonul (stub) cheii secrete în `%s' scriu cheia secretă în `%s' scriu auto semnătură scriu în `%s' scriu la stdout a fost folosită o cheie secretă greșitădDdaputeți semna-în-clar cu chei stil PGP 2.x în modul --pgp2 puteți semna-datașat cu chei stil PGP 2.x numai în modul --pgp2 în modul --pgp2 puteți cifra numai cu chei RSA de 2048 biți sau mai puțin puteți crea doar semnături detașate sau în clar câtă vreme sunteți în modul --pgp2 vă puteți actualiza preferințele cu: gpg --edit-key %s updpref save nu puteți semna și cifra în același timp câtă vreme sunteți în modul --pgp2 nu puteți desemna o cheie ca propriul său revocator desemnat nu puteți folosi --symmetric --encrypt câtă vreme în modul %s nu puteți folosi --symmetric --encrypt cu --s2k-mode 0 nu puteți folosi --symmetric --sign --encrypt câtă vreme în modul %s nu puteți folosi --symmetric --sign --encrypt cu --s2k-mode 0 ați găsit un bug ... (%s:%d) nu puteți folosi %s câtă vreme în modul %s nu puteți folosi algoritmul de cifrare `%s' câtă vreme în modul %s nu puteți folosi algoritmul de compresie `%s' câtă vreme în modul %s nu puteți folosi algorimul de rezumat `%s' câtă vreme în modul %s trebuie să folosiți fișiere (și nu un pipe) când lucrați cu modul --pgp2 activat. |AN|PIN Admin Nou|A|Vă rugăm introduceți PIN-ul Admin|A|Vă rugăm introduceți PIN-ul%%0A[încercări rămase: %d]|FD|scrie informații de stare în acest FD|NUME|cifrare pentru NUME|N|PIN Nou|N|setează nivel de compresie N (0 deactivează)|RN|Cod Reset Nou|[fișier]|crează o semnătură text în clar|[fișier]|crează o semnătură|algo [fișiere]|afișează rezumate mesaje||Vă rugăm introduceți PIN-ul||Vă rugăm introduceți PIN%%0A[semnături făcute: %lu]||Vă rugăm introduceți Codul Reset pentru cardgnupg-1.4.20/po/ro.po0000644000175000017500000063363312635457220011261 00000000000000# Mesajele în limba română pentru gnupg. # Copyright (C) 2003, 2004, 2005 Free Software Foundation, Inc. # Acest fișier este distribuit sub aceeași licență ca și pachetul gnupg. # Laurențiu Buzdugan , 2003, 2004, 2005. # # # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.10\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:15+0200\n" "Last-Translator: Laurențiu Buzdugan \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < " "20)) ? 1 : 2;\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "nu pot genera un număr prim cu pbiți=%u qbiți=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "nu pot genera un număr prim cu mai puțin de %d biți\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "nu a fost găsit nici un modul de adunare a entropiei\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "nu pot bloca `%s': %s'\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "aștept blocarea pentru `%s...'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "nu pot deschide `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "nu pot obține statistici `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' nu este un fișier normal - ignorat\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "notă: fișier random_seed este gol\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" "AVERTISMENT: dimensiune invalidă pentru fișierul random_seed - nu va fi " "folosită\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "nu pot citi `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "notă: fișierul random_seed nu a fost actualizat\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "nu pot crea `%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "nu pot scrie `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "nu pot închide `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "" "AVERISMENT: este folosit un generator de numere aleatoare nesigur " "(insecure)!!\n" #: cipher/random.c:894 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 "" "Generatorul de numere aleatoare este doar ceva temporar pentru\n" "a-l face să meargă - nu este nicidecum un GNA sigur (secure)!\n" "\n" "NU FOLOSIȚI NICI O DATĂ GENERATĂ DE ACEST PROGRAM!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Vă rugăm așteptați, este adunată entropia. Faceți ceva dacă vă ajută să\n" "nu vă plictisiți, pentru că va îmbunătăți calitatea entropiei.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Nu sunt disponibili destui octeți aleatori. Vă rugăm faceți ceva pentru\n" "a da sistemului de operare o șansă de a colecta mai multă entropie\n" "(Mai sunt necesari %d octeți)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "am eșuat să stochez amprenta: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "am eșuat să stochez data creării: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "citirea cheii publice a eșuat: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "răspunsul nu conține datele cheii publice\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "răspunsul nu conține modulul RSA\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "răspunsul nu conține exponentul public RSA\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "folosim PIN implicit ca %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "nu am reușit să foloses PIn-ul implicit ca %s: %s - am deactivat folosirea " "implicită ulterioară\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Vă rugăm introduceți PIN%%0A[semnături făcute: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Vă rugăm introduceți PIN-ul" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "apelul PIN a returnat eroare: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN-ul pentru CHV%d este prea scurt; lungimea minimă este %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "verificarea CHV%d a eșuat: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "eroare la recuperarea stării CHV de pe card\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "cardul este încuiat permanent!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "%d încercări PIN Admin rămase înainte de a încuia cardul permanent\n" # c-format #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Vă rugăm introduceți PIN-ul%%0A[încercări rămase: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Vă rugăm introduceți PIN-ul Admin" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "accesul la comenzile de administrare nu este configurată\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Codul Reset nu (mai) este disponibil\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Vă rugăm introduceți Codul Reset pentru card" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Codul Reset este prea scurt; lungimea minimă este %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Cod Reset Nou" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|PIN Admin Nou" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|PIN Nou" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "eroare la obținere noului PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "eroare la citirea datelor aplicației\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "eroare la citirea amprentei DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "cheia există deja\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "cheia existentă va fi înlocuită\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "generez o nouă cheie\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "scriu cheia nouă\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "timestamp-ul de creare lipsește\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "modulus-ul RSA lipsește sau nu are %d biți\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "Exponentul public RSA lipsește sau are mai mult de %d biți\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "prime-ul RSA %s lipsește sau nu are %d biți\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "am eșuat să stochez cheia: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "vă rugăm așteptați câtă vreme este creată noua cheie ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "generarea cheii a eșuat\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "generarea cheii este completă (%d secunde)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "structură invalidă a cardului OpenPGP (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "amprenta de pe card nu se potrivește cu cea cerută\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "cardul nu suportă algoritmul rezumat %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "semnături create până acum: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "verificarea PIN-ului Admin este deocamdată interzisă prin această comandă\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "nu pot accesa %s - card OpenPGP invalid?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armură: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "header armură invalid: " #: g10/armor.c:459 msgid "armor header: " msgstr "header armură: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "header clearsig invalid\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "header armură necunoscut: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "semnături text în clar încuibărite\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "armură neașteptată: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "linie cu liniuță escape invalidă: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "caracter radix64 invalid %02X sărit\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "eof prematur (nici un CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "eof prematur (în CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC anormal\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "eroare CRC; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "eof prematur (în trailer)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "eroare linia de trailer\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "nici o dată OpenPGP validă găsită.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armură invalidă: linie mai lungă de %d caractere\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "caracter printabil în ghilimele în armură - probabil a fost folosit un MTA " "cu bug-uri\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "cardul OpenPGP nu e disponibil: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "cardul OpenPGP nr. %s detectat\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "nu pot face acest lucru în modul batch\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Această comandă este disponibilă numai pentru carduri versiunea 2\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Selecția d-voastră? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[nesetat(ă)]" #: g10/card-util.c:512 msgid "male" msgstr "masculin" #: g10/card-util.c:513 msgid "female" msgstr "feminin" #: g10/card-util.c:513 msgid "unspecified" msgstr "nespecificat(ă)" #: g10/card-util.c:540 msgid "not forced" msgstr "neforțat(ă)" #: g10/card-util.c:540 msgid "forced" msgstr "forțat(ă)" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Eroare: Deocamdată sunt permise numai caractere ASCII.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Eroare: Caracterul \"<\" nu poate fi folosit.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Eroare: Spațiile duble nu sunt permise.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Numele de familie al proprietarului cardului: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Prenumele proprietarului cardului: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Eroare: Nume combinat prea lung (limita este de %d caractere).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL pentru a aduce cheia publică: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Eroare: URL prea lung (limita este de %d caractere).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "eroare la alocarea memoriei: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "eroare la citire `%s': %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "eroare la scriere `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Date login (nume cont): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Eroare: datele de login prea lungi (limita este de %d caractere).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Date DO personale: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Eroare DO personal pre lung (limita este de %d caractere).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Preferințe limbă: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Eroare: lungime invalidă pentru șir preferințe.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Eroare: caractere invalide în șir preferințe.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Sex ((M)asculin, (F)eminin sau spațiu): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Eroare: răspuns invalid.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "Amprenta CA: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Eroare: amprentă formatată invalid.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "operația pe cheie nu e posibilă: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "nu este un card OpenPGP" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "eroare la obținerea informației pentru cheia curentă: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Înlocuiesc cheia existentă? (d/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "NOTĂ: Nu există nici o garanție că cardul suportă lungimea cerută.\n" " Dacă generarea cheii nu reușește, vă rugăm verificați\n" " documentație cardului dvs. pentru a vedea ce lungimi sunt permise.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Ce lungime de cheie doriți pentru cheia de semnătură? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Ce lungime de cheie doriți pentru cheia de cifrare? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Ce lungime de cheie doriți pentru cheia de autentificare? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "rotunjită prin adaos la %u biți\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "dimensiunile cheii %s trebuie să fie în intervalul %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "Cardul va fi acum reconfigurat pentru a genera chei de %u biți \n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "eroare la schimbarea lungimii cheii %d la %u biți: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Creez copie de rezervă a cheii de cifrare în afara cardului? (d/N) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "NOTĂ: cheile sunt deja stocate pe card!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Înlocuiesc cheile existente? (d/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Vă rugăm să observați că setările din fabrică ale PIN-urilor sunt\n" " PIN = `%s' PIN Admin = `%s'\n" "Ar trebui să le schimbați folosind comanda --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Vă rugăm selectați tipul de cheie de generat:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Cheie de semnare\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Cheie de cifrare\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Cheie de autentificare\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Selecție invalidă.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Vă rugăm selectați unde să fie stocată cheia:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "algoritm de protecție a cheii necunoscut\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "părți secrete ale cheii nu sunt disponibile\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "cheia secretă deja stocată pe un card\n" # c-format #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "eroare la scrierea cheii pe card: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "ieși din acest meniu" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "arată comenzi administrare" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "afișează acest mesaj" #: g10/card-util.c:1687 msgid "list all available data" msgstr "afișează toate datele disponibile" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "schimbă numele purtătorului cardului" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "schimbă URL-ul de unde să fie adusă cheia" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "adu cheia specificată de URL-ul de pe card" #: g10/card-util.c:1693 msgid "change the login name" msgstr "schimbă numele de login" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "schimbă preferințele de limbă" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "schimbă sexul purtătorului cardului" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "schimbă o amprentă CA" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "comută fanionul PIN de forțare a semnăturii" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "generează noi chei" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "meniu pentru a schimba sau debloca PIN-ul" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "verifică PIN-ul și listează toate datele" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "deblocați PIN-ul folosind un Cod Resetare" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Comandă numai-administrare\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Sunt permise comenzi administrare\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Nu sunt permise comenzi administrare\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Comandă invalidă (încercați \"help\")\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "cititorul de card nu e disponibil\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" "Vă rugăm introduceți cardul și apăsați return sau apăsați 'c' pentru a " "renunța: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "selectarea openpgp a eșuat: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Vă rugăm scoateți cardul curent și introducați unul cu număr de serie:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Apăsați return când sunteți gata sau apăsați 'c' pentru a renunța: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Introduceți noul PIN Admin: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "introduceți noul PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Introduceți PIN Admin: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Introduceți PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Repetați acest PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN-ul nu a fost repetat corect; mai încercați o dată" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "nu pot deschide `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output nu merge pentru această comandă\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "cheia \"%s\" nu a fost găsită: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "eroare la citire keyblock: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(dacă nu specificați cheia prin amprentă)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "nu pot face acest lucru în mod batch fără \"--yes\"\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Șterge această cheie din inelul de chei? (d/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Aceasta este o cheie secretă! - chiar doriți să o ștergeți? (d/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "stergere keyblock a eșuat: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "informații încredere-proprietar curățate\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "există o cheie secretă pentru cheia publică \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" "folosiți opțiunea \"--delete-secret-keys\" pentru a o șterge pe aceasta mai " "întâi.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "eroare la crearea frazei-parolă: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "nu pot crea un pachet ESK simetric datorită modului S2K\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "folosesc cifrul %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' deja compresat\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "AVERTISMENT: `%s' este un fișier gol\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "în modul --pgp2 puteți cifra numai cu chei RSA de 2048 biți sau mai puțin\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "citesc din `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "nu pot folosi cifrul IDEA pentru pentru toate cheile pentru care cifrați.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "AVERTISMENT: forțând cifrul simetric %s (%d) violați preferințele " "destinatarului\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "AVERTISMENT: forțând algoritmul de compresie %s (%d) violați preferințele " "destinatarului\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "forțând cifrul simetric %s (%d) violați preferințele destinatarului\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "nu puteți folosi %s câtă vreme în modul %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s cifrat pentru: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s date cifrate\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "cifrat cu un algoritm necunoscut %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "AVERTISMENT: mesajul a fost cifrat cu o cheie slabă din cifrul simetric.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problemă cu mânuirea pachetului cifrat\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "nu este suportată execuția nici unui program la distanță\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "nu pot crea directorul `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "chemarea programelor externe sunt deactivate datorită opțiunilor nesigure " "pentru permisiunile fișierului\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "această platformă necesită fișiere temporare când sunt chemate programe " "externe\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "nu pot executa programul `%s': %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "nu pot executa shell-ul `%s': %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "eroare de sistem la chemarea programului extern: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "ieșire nenaturală a programului extern\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "nu pot executa programul extern\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "nu pot citi răspunsul programului extern: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "AVERTISMENT: nu pot șterge fișierul temporar (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "AVERTISMENT: nu pot șterge directorul temporar `%s': %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "exportă semnăturile marcate ca numai-local" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "exportă atribute ID-uri utilizator (în general ID-uri foto)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "exportă cheile de revocare marcate ca \"sensitive\"" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "șterge fraza-parolă din subcheile exportate" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "șterge părțile de nefolosit din cheie la exportare" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "șterge cât mai mult posibil dincheie la exportare" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "exportul cheilor secrete nu este permis\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "cheia %s: nu e protejată - sărită\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "cheia %s: cheie stil PGP 2.x - sărită\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "cheia %s: material cheie pe card - sărit\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "pe cale de a exporta o subcheie neprotejată\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "am eșuat de-protejarea subcheii: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "AVERTISMENT: cheia secretă %s nu are un checksum SK simplu\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "AVERTISMENT: nimic exportat\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Comenzi:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[fișier]|crează o semnătură" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[fișier]|crează o semnătură text în clar" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "crează o semnătură detașată" #: g10/gpg.c:393 msgid "encrypt data" msgstr "cifrează datele" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "cifrează numai cu cifru simetric" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "decriptează datele (implicit)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verifică o semnătură" #: g10/gpg.c:401 msgid "list keys" msgstr "enumeră chei" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "enumeră chei și semnături" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "enumeră și verifică semnăturile cheii" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "enumeră chei și amprente" #: g10/gpg.c:406 msgid "list secret keys" msgstr "enumeră chei secrete" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "generează o nouă perechi de chei" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "șterge chei de pe inelul de chei public" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "șterge chei de pe inelul de chei secret" #: g10/gpg.c:411 msgid "sign a key" msgstr "semnează o cheie" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "semnează o cheie local" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "semnează sau editează o cheie" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "generează un certificat de revocare" #: g10/gpg.c:416 msgid "export keys" msgstr "exportă chei" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exportă chei pentru un server de chei" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importă chei de la un server de chei" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "caută pentru chei pe un server de chei" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "actualizează toate cheile de la un server de chei" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importă/combină chei" #: g10/gpg.c:429 msgid "print the card status" msgstr "afișează starea cardului" #: g10/gpg.c:430 msgid "change data on a card" msgstr "schimbă data de pe card" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "schimbă PIN-ul unui card" #: g10/gpg.c:440 msgid "update the trust database" msgstr "actualizează baza de date de încredere" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [fișiere]|afișează rezumate mesaje" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opțiuni:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "crează ieșire în armură ascii" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NUME|cifrare pentru NUME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "folosește acest id-utilizator pentru a semna sau decripta" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|setează nivel de compresie N (0 deactivează)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "folosește modul text canonic" #: g10/gpg.c:486 msgid "use as output file" msgstr "folosește ca fișier ieșire" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "locvace" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "nu face nici o schimbare" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "întreabă înainte de a suprascrie" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "folosește comportament strict OpenPGP" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "generează mesaje compatibile cu PGP 2.x" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Arată pagina man pentru o listă completă a comenzilor și opțiunilor)\n" #: g10/gpg.c:576 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" "Exemple:\n" "\n" " -se -r Dan [fișier] semnează și cifrează pentru utilizatorul Dan\n" " --clearsign [fișier] crează o semnătură text în clar\n" " --detach-sign [fișier] crează o semnătură detașată\n" " --list-keys [nume] arată chei\n" " --fingerprint [nume] arată amprente\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Raportați bug-uri la .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Folosire: gpg [opțiuni] [fișiere] (-h pentru ajutor)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Sintaxă: gpg [opțiuni] [fișiere]\n" "sign, check, encrypt sau decrypt\n" "operațiunea implicită depinde de datele de intrare\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmuri suportate:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Pubkey: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cifru: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compresie: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "folosire: gpg [opțiuni] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "comenzi în conflict\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "nu am găsit nici un semn = în definiția grupului `%s'\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "" "AVERTISMENT: proprietate nesigură (unsafe) pentru directorul home `%s'\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "" "AVERTISMENT: proprietate nesigură (unsafe) pentru fișier configurare `%s'\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "" "AVERTISMENT: permisiuni nesigure (unsafe) pentru directorul home `%s'\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "" "AVERTISMENT: permisiuni nesigure (unsafe) pentru fișier configurare `%s'\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "AVERTISMENT: proprietate director incluziuni nesigur (unsafe) pentru " "directorul home `%s'\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "AVERTISMENT: proprietate director incluziuni nesigur (unsafe) pentru fișier " "configurare `%s'\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "AVERTISMENT: permisiuni director incluziuni nesigure (unsafe) pentru " "directorul home `%s'\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "AVERTISMENT: permisiuni director incluziuni nesigure (unsafe) pentru fișier " "configurare `%s'\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "articol configurare necunoscut `%s'\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "afișează ID-urile photo la enumerarea cheilor" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "afișează politicile URL-urilor la enumerarea semnăturilor" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "arată toate notațiile la enumerarea semnăturilor" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "arată notațiile standard IETF la enumerarea semnăturilor" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "arată notațiile utilizatorilor la enumerarea semnăturilor" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "" "arată URL-urile serverelor de chei preferate la enumerarea semnăturilor" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "arată validitatea ID-ului utilizatorilor la enumerarea cheilor" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "arată ID-urile utilizator revocate și expirate la enumerarea cheilor" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "arată subcheile revocate și expirate la enumerarea cheilor" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "arată numele inelului de chei la enumerarea cheilor" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "arată datele de expirare la enumerarea semnăturilor" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTĂ: fișier opțiuni implicite vechi `%s' ignorat\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTĂ: nici un fișier opțiuni implicit `%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "fișier opțiuni `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "citesc opțiuni din `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTĂ: %s nu este pentru o folosire normală!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "`%s' nu este expirare de semnătură validă\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "`%s' nu este un set de carectere valid\n" # #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "nu am putut interpreta URL-ul serverului de chei\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: opțiuni server de chei invalide\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "opțiuni server de chei invalide\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: opțiuni import invalide\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "opțiuni import invalide\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: opțiuni export invalide\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "opțiuni export invalide\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: opțiuni enumerare invalide\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "opțiuni enumerare invalide\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "arată ID-urile photo la verificare semnăturii" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "arată URL-urile politicilor la verificarea semnăturii" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "arată toate notațiile la verificarea semnăturii" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "arată toate notațiile standard IETF la verificarea semnăturii" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "arată toate notațiile utilizatorului la verificarea semnăturii" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "arată URL-urile serverelor de chei preferate la verificarea semnăturii" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "arată validitatea ID-ului utilizator la verificarea semnăturii" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" "arată ID-urile utilizator revocate și expirate la verificarea semnăturii" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "arată numai ID-ul utilizator principal la verificarea semnăturii" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "validează semnăturile cu date PKA" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "ridică nivelul de încredere a semnăturilor cu date PKA valide" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: opțiuni verificare invalide\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "opțiuni verificare invalide\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "nu pot seta cale-execuție ca %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: listă auto-key-locate invalidă\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "listă auto-key-locate invalidă\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "AVERTISMENT: programul ar putea crea un fișier core!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "AVERTISMENT: %s înlocuiește %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s nu este permis cu %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s nu are sens cu %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "NOTĂ: %s nu este disponibil în această sesiune\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "nu va rula cu memorie neprotejată (insecure) pentru că %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "puteți crea doar semnături detașate sau în clar câtă vreme sunteți în modul " "--pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "" "nu puteți semna și cifra în același timp câtă vreme sunteți în modul --pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "trebuie să folosiți fișiere (și nu un pipe) când lucrați cu modul --pgp2 " "activat.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "cifrarea unui mesaj în modul --pgp2 necesită un cifru IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "algoritm cifrare selectat este invalid\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "algoritm rezumat selectat este invalid\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "algoritm compresie selectat este invalid\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "algoritm rezumat certificare selectat este invalid\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed trebuie să fie mai mare decât 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed trebuie să fie mai mare decât 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth trebuie să fie în intervalul de la 1 la 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "default-cert-level invalid; trebuie să fie 0, 1, 2 sau 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "min-cert-level invalid; trebuie să fie 0, 1, 2 sau 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTĂ: modul S2K simplu (0) este contraindicat cu insistență\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "mod S2K invalid; trebuie să fie 0, 1 sau 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "preferințe implicite invalide\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "preferințe cifrare personale invalide\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "preferințe rezumat personale invalide\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "preferințe compresie personale invalide\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s nu merge încă cu %s!\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "nu puteți folosi algoritmul de cifrare `%s' câtă vreme în modul %s\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "nu puteți folosi algorimul de rezumat `%s' câtă vreme în modul %s\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "nu puteți folosi algoritmul de compresie `%s' câtă vreme în modul %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "am eșuat să inițializez TrustDB:%s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "AVERTISMENT: destinatari (-r) furnizați fără a folosi cifrare cu cheie " "publică\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [nume_fișier]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [nume_fișier]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "cifrarea simetrică a lui `%s' a eșuat: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [nume_fișier]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [nume_fișier]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "nu puteți folosi --symmetric --encrypt cu --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "nu puteți folosi --symmetric --encrypt câtă vreme în modul %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [nume_fișier]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [nume_fișier]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [nume_fișier]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "nu puteți folosi --symmetric --sign --encrypt cu --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "nu puteți folosi --symmetric --sign --encrypt câtă vreme în modul %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [nume_fișier]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [nume_fișier]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [nume_fișier]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key id-utilizator" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key id-utilizator" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-utilizator [comenzi]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-utilizator] [inel_chei]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "trimitere server de chei eșuată: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "recepție server de chei eșuată: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "export cheie eșuat: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "căutare server de chei eșuată: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "actualizare server de chei eșuată: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "eliminarea armurii a eșuat: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "punerea armurii a eșuat: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritm hash invalid `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[nume_fișier]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Dați-i drumul și scrieți mesajul ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "URL-ul politicii de certificare furnizat este invalid\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "URL-ul politicii de semnături furnizat este invalid\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "URL-ul serverului de chei preferat furnizat este invalid\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "prea multe intrări în cache-ul pk - deactivat\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[ID utilizator nu a fost găsit]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "cheia %s: cheie secretă fără cheie publică - sărită\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "am adus automat `%s' via %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Cheia invalidă %s făcută validă de --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "nici o subcheie secretă pentru subcheia publică %s - ignorată\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "folosim subcheia %s în loc de cheia primară %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "fii oarecum mai tăcut" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "ia cheile de pe acest inel de chei" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "dă numai un avertisment la conflicte de timestamp" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|scrie informații de stare în acest FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Folosire: gpgv [opțiuni] [fișiere] (-h pentru ajutor)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Sintaxă: gpgv [opțiuni] [fișiere]\n" "Verifică semnături folosind cheile cunoscute ca fiind de încredere\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Este sarcina d-voastră să atribuiți o valoare aici; această valoare\n" "nu va fi niciodată exportată pentru o terță parte. Trebuie să\n" "implementăm rețeaua-de-încredere; aceasta nu are nimic în comun cu\n" "certificatele-de-rețea (create implicit)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Pentru a construi Rețeaua-de-Încredere, GnuPG trebuie să știe care chei\n" "au nivel de încredere suprem - acestea de obicei sunt cheile pentru care\n" "aveți acces la cheia secretă. Răspundeți \"da\" pentru a seta\n" "această cheie cu nivel de încredere suprem\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Dacă doriți oricum să folosiți această cheie fără încredere, răspundeți \"da" "\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Introduceți ID-ul utilizator al destinatarului mesajului." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Selectați algoritmul de folosit.\n" "\n" "DSA (aka DSS) este Digital Signature Algorithm și poate fi folosit numai\n" "pentru semnături.\n" "\n" "Elgamal este un algoritm numai pentru cifrare.\n" "\n" "RSA poate fi folosit pentru semnături sau cifrare.\n" "\n" "Prima cheie (primară) trebuie să fie întotdeauna o cheie cu care se poate " "semna." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "În general nu este o idee bună să folosiți aceeași cheie și pentru\n" "semnare și pentru cifrare. Acest algoritm ar trebui folosit numai\n" "în anumite domenii. Vă rugăm consultați mai întâi un expert în domeniu." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Introduceți lungimea cheii" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Răspundeți \"da\" sau \"nu\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Introduceți valoarea cerută precum a arătat la prompt.\n" "Este posibil să introduceți o dată ISO (AAAA-LL-ZZ) dar nu veți\n" "obține un răspuns de eroare bun - în loc sistemul încearcă să\n" "interpreteze valoare dată ca un interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Introduceți numele deținătorului cheii" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "vă rugăm introduceți o adresă de email (opțională dar recomandată)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Vă rugăm introduceți un comentriu opțional" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N pentru a schimba numele.\n" "C pentru a schimba comentariul.\n" "E pentru a schimba adresa de email.\n" "O pentru a continua cu generarea cheii.\n" "T pentru a termina generarea cheii." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" "Răspundeți \"da\" (sau numai \"d\") dacă sunteți OK să generați subcheia." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Când semnați un ID utilizator pe o cheie ar trebui să verificați mai întâi\n" "că cheia aparține persoanei numite în ID-ul utilizator. Este util și " "altora\n" "să știe cât de atent ați verificat acest lucru.\n" "\n" "\"0\" înseamnă că nu pretindeți nimic despre cât de atent ați verificat " "cheia\n" "\"1\" înseamnă că credeți că cheia este a persoanei ce pretinde că este\n" " proprietarul ei, dar n-ați putut, sau nu ați verificat deloc cheia.\n" " Aceasta este utilă pentru verificare \"persona\", unde semnați cheia\n" " unui utilizator pseudonim.\n" "\n" "\"2\" înseamnă că ați făcut o verificare supericială a cheii. De exemplu,\n" " aceasta ar putea însemna că ați verificat amprenta cheii și ați " "verificat\n" " ID-ul utilizator de pe cheie cu un ID cu poză.\n" "\n" "\"3\" înseamnă că ați făcut o verificare extensivă a cheii. De exemplu,\n" " aceasta ar putea însemna că ați verificat amprenta cheii cu " "proprietarul\n" " cheii în persoană, că ați verificat folosind un document dificil de\n" " falsificat cu poză (cum ar fi un pașaport) că numele proprietarului " "cheii\n" " este același cu numele ID-ului utilizator al cheii și că ați verificat\n" " (schimbând emailuri) că adresa de email de pe cheie aparține " "proprietarului\n" "cheii.\n" "\n" "De notat că exemplele date pentru nivelele 2 și 3 ceva mai sus sunt *numai*\n" "exemple. La urma urmei, d-voastră decideți ce înseamnă \"superficial\" și\n" "\"extensiv\" pentru d-voastră când semnați alte chei.\n" "\n" "Dacă nu știți care este răspunsul, răspundeți \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Răspundeți \"da\" dacă doriți să semnați TOATE ID-urile utilizator" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Răspundeți \"da\" dacă într-adevăr doriți să ștergeți acest ID utilizator.\n" "Toate certificatele sunt de asemenea pierdute!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Răspundeți \"da\" dacă este OK să ștergeți subcheia" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Aceasta este o semnătură validă pe cheie; în mod normal n-ar trebui\n" "să ștergeți această semnătură pentru că aceasta ar putea fi importantăla " "stabilirea conexiunii de încredere la cheie sau altă cheie certificată\n" "de această cheie." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Această semnătură nu poate fi verificată pentru că nu aveți cheia\n" "corespunzătoare. Ar trebui să amânați ștergerea sa până știți care\n" "cheie a fost folosită pentru că această cheie de semnare ar putea\n" "constitui o conexiune de încredere spre o altă cheie deja certificată." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Semnătura nu este validă. Aceasta ar trebui ștearsă de pe inelul\n" "d-voastră de chei." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Aceasta este o semnătură care leagă ID-ul utilizator de cheie.\n" "De obicei nu este o idee bună să ștergeți o asemenea semnătură.\n" "De fapt, GnuPG ar putea să nu mai poată folosi această cheie.\n" "Așa că faceți acest lucru numai dacă această auto-semnătură este\n" "dintr-o oarecare cauză invalidă și o a doua este disponibilă." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Schimbați toate preferințele ale tuturor ID-urilor utilizator (sau doar\n" "cele selectate) conform cu lista curentă de preferințe. Timestamp-urile\n" "tuturor auto-semnăturilor afectate vor fi avansate cu o secundă.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "" "Vă rugăm introduceți fraza-parolă; aceasta este o propoziție secretă \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Vă rugăm repetați ultima frază-parolă, pentru a fi sigur(ă) ce ați tastat." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Dați numele fișierului la care se aplică semnătura" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Răspundeți \"da\" dacă este OK să suprascrieți fișierul" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Vă rugăm introduceți un nou nume-fișier. Dacă doar apăsați RETURN,\n" "va fi folosit fișierul implicit (arătat în paranteze)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Ar trebui să specificați un motiv pentru certificare. În funcție de\n" "context aveți posibilitatea să alegeți din această listă:\n" " \"Cheia a fost compromisă\"\n" " Folosiți această opțiune dacă aveți un motiv să credeți că persoane\n" " neautorizate au avut acces la cheia d-voastră secretă.\n" " \"Cheia este înlocuită\"\n" " Folosiți această opțiune dacă înlocuiți cheia cu una nouă.\n" " \"Cheia nu mai este folosită\"\n" " Folosiți această opțiune dacă pensionați cheia.\n" " \"ID-ul utilizator nu mai este valid\"\n" " Folosiți această opțiune dacă ID-ul utilizator nu mai trebuie " "folosit;\n" " de obicei folosită pentru a marca o adresă de email ca invalidă.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Dacă doriți, puteți introduce un text descriind de ce publicați acest\n" "certificat de revocare. Vă rugăm fiți concis.\n" "O linie goală termină textul.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Nici un ajutor disponibil" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Nici un disponibil disponibil pentru `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "importă semnături marcate ca numai-local" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "repară defectele de la serverul de chei pks la import" #: g10/import.c:104 #, fuzzy #| msgid "do not update the trustdb after import" msgid "do not clear the ownertrust values during import" msgstr "nu actualiza baza de date de încredere după import" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "nu actualiza baza de date de încredere după import" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "crează o cheie publică la importul unei chei secrete" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "acceptă numai actualizări pentru cheile existente" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "șterge părțile nefolosibile din cheie după import" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "șterge câtmai mult posibil din cheie după import" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "bloc de tip %d sărit\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu chei procesate până acum\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Număr total procesate: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " chei noi sărite: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " fără ID-uri utilizator: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importate: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " neschimbate: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " noi ID-uri utilizator: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " noi subchei: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " noi semnături: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " noi revocări de chei: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " chei secrete citite: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " chei secrete importate: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "chei secrete neschimbate: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " ne importate: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " semnături curățate: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " ID-uri utilizator curățate: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "AVERTISMENT: cheia %s conține preferințe pentru indisponibil\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algoritmuri pentru aceste ID-uri:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": preferință pentru algoritm de cifrare %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": preferință pentru algoritm rezumat %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": preferință pentru algoritm compresie %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" "este puternic sugerat să vă actualizați preferințele și re-distribuiți\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "această cheie pentru a avita probleme potențiale de ne-potrivire de " "algoritm\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "vă puteți actualiza preferințele cu: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "cheia %s: nici un ID utilizator\n" #: g10/import.c:819 #, fuzzy, c-format #| msgid "skipped \"%s\": %s\n" msgid "key %s: %s\n" msgstr "sărită \"%s\": %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "cheia %s: subcheia HPK coruptă a fost reparată\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "cheia %s: am acceptat ID-ul utilizator ce nu e auto-semnat \"%s\"\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "cheia %s: nici un ID utilizator valid\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "aceasta poate fi cauzată de o auto-semnătură ce lipsește\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "cheia %s: cheia publică nu a fost găsită: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "cheia %s: cheie nouă - sărită\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "n-am găsit nici un inel de chei ce poate fi scris: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "scriu în `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "eroare la scrierea inelului de chei `%s': %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "cheia %s: cheia publică \"%s\" importată\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "cheia %s: nu se potrivește cu copia noastră\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "cheia %s: nu pot găsi keyblock-ul original: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "cheia %s: nu pot citi keyblock-ul original: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "cheia %s: \"%s\" 1 nou ID utilizator\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "cheia %s: \"%s\" %d noi ID-uri utilizator\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "cheia %s: \"%s\" 1 nouă semnătură\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "cheia %s: \"%s\" %d noi semnături\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "cheia %s: \"%s\" 1 nouă subcheie\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "cheia %s: \"%s\" %d noi subchei\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "cheia %s: \"%s\" %d semnături curățate\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "cheia %s: \"%s\" %d semnături curățate\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "cheia %s: \"%s\" %d ID-uri utilizator curățate\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "cheia %s: \"%s\" %d ID-uri utilizator curățate\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "cheia %s: \"%s\" nu a fost schimbată\n" #: g10/import.c:1211 #, fuzzy, c-format #| msgid "secret key \"%s\" not found: %s\n" msgid "secret key %s: %s\n" msgstr "cheia secretă \"%s\" nu a fost găsită: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "importul de chei secrete nu este permis\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "cheia %s: cheie secretă cu cifru invalid %d - sărită\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "nici un inel de chei secrete implicit: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "cheia %s: cheie secretă importată\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "cheia %s: deja în inelul de chei secrete\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "cheia %s: cheia secretă nu a fost găsită: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "cheia %s: nici o cheie publică - nu pot aplica certificatul de revocare\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "cheia %s: certificat de revocare invalid: %s - respins\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "cheia %s: certificatul de revocare \"%s\" importat\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "cheia %s: nici un ID utilizator pentru semnătură\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "cheia %s: algoritm cu cheie publică nesuportat pentru ID-ul utilizator \"%s" "\"\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "cheia %s: auto-semnătură invalidă pentru ID-ul utilizator \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "cheia %s: algoritm cu cheie publică nesuportat\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "cheia %s: am adăugat semnătura de cheie directă\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "cheia %s: nici o subcheie pentru legarea cheii\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "cheia %s: legare subcheie invalidă\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "cheia %s: am șters multiple legături de subchei\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "cheia %s: nici o subcheie pentru revocare de cheie\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "cheia %s: revocare de subcheie invalidă\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "cheia %s: am șters multiple revocări de subcheie\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "cheia %s: am sărit ID-ul utilizator \"%s\"\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "cheia %s: am sărit subcheia\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "cheia %s: semnătura nu poate fi exportată (clasa 0x%02X) - sărită\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "cheia %s: certificat de revocare într-un loc greșit - sărit\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "cheia %s: certificat de revocare invalid: %s - sărit\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "cheia %s: semnătură subcheie într-un loc greșit - sărită\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "cheia %s: clasă de semnătură neașteptată (0x%02X) - sărită\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "cheia %s: am detectat un ID utilizator duplicat - combinate\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "AVERTISMENT: cheia %s poate fi revocată: aduc revocarea cheii %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "AVERTISMENT: cheia %s poate fi revocată: cheia de revocare %s nu este " "prezentă.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "cheia %s: am adăugat certificatul de revocare \"%s\"\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "cheia %s: am adăugat semnătura de cheie directă\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "NOTĂ: S/N-ul unei chei nu se potrivește cu cel al cardului\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "NOTĂ: cheia primară este online și stocată pe card\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "NOTĂ: cheia secundară este online și stocată pe card\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "eroare la crearea inelului de chei `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "inelul de chei `%s' creat\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "resursă keyblock `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "am eșuat să reconstruiesc cache-ul inelului de chei: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revocare]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[auto-semnătură]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 semnătură incorectă\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d semnături incorecte\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 semnătură nu a fost verificată din cauza unei chei lipsă\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d semnături nu au fost verificate din cauza unor chei lipsă\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 semnătură nu a fost verificată din cauza unei erori\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d semnături nu au fost verificate din cauza unor erori\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "am găsit 1 ID utilizator fără auto-semnătură validă\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "am găsit %d ID-uri utilizator fără auto-semnături valide\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Vă rugăm decideți cât de multă încredere aveți în acest utilizator\n" "pentru a verifica cheile altor utilizatori (folosind pașapoarte,\n" "verificând amprentele din diferite surse, etc.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Am o încredere marginală\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Am toată încrederea\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Vă rugăm să introduceți adâncimea acestei semnături de încredere.\n" "O adâncime mai mare de 1 permite ca cheia pe care o semnați să facă\n" "semnături de încredere în numele d-voastră.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Vă rugăm să introduceți domeniul de restricționare al acestei semnături, sau " "apăsați enter pentru niciunul.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "ID utilizator \"%s\" a fost revocat." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Sunteți sigur(ă) că doriți să ștergeți permanent \"%s\"? (d/N)" #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Nu pot semna.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "ID utilizator \"%s\" este expirat." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "ID-ul utilizator \"%s\" nu este auto-semnat." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "ID-ul utilizator \"%s\" poate fi semnat. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Doriți să-l semnați? (d/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Auto-semnătura pe \"%s\"\n" "este o semnătură stil PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Doriți să o promovați la o auto-semnătură OpenPGP? (d/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Semnătura d-voastră curentă pe \"%s\"\n" "a expirat.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Doriți să creați o nouă semnătură pentru a o înlocui pe cea expirată? (d/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Semnătura d-voastră curentă pe \"%s\"\n" "semnătură locală.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Doriți să o promovați la o semnătură total exportabilă? (d/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" a fost deja semnată local de cheia %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" a fost deja semnată de cheia %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Doriți să o semnați oricum din nou? (d/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Nimic de semnat cu cheia %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Această cheie a expirat!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Această cheie va expira pe %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Doriți ca semnătura d-voastră să expire în același timp? (D/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Nu puteți crea o semnătură OpenPGP pe o cheie PGP 2.x câtă vreme sunteți în " "modul --pgp2.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Aceasta va face cheia de nefolosit în PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Cât de atent ați verificat că cheia pe care sunteți pe cale a o semna " "aparține\n" "într-adevăr persoanei numite deasupra? Dacă nu știți ce să răspundeți,\n" "introduceți \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Nu voi răspunde.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Nu am verificat deloc.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Am făcut ceva verificări superficiale.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Am făcut verificări foarte atente.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Selecția dvs.? (introduceți `?' pentru informații suplimentare): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Sunteți într-adevăr sigur(ă) că doriți să semnați\n" "această cheie cu cheia d-voastră \"%s\" (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Aceasta va fi o auto-semnătură.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "AVERTISMENT: semnătura nu va fi marcată ca non-exportabilă.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "AVERTISMENT: semnătura nu va fi marcată ca non-revocabilă.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Semnătura va fi marcată ca non-exportabilă.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Semnătura va fi marcată ca non-revocabilă.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Nu am verificat această cheie deloc.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Am verificat această cheie superficial.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Am verificat această cheie foarte atent.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Doriți cu adevărat să semnați? (d/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "semnarea a eșuat: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "Cheia are numai articole de cheie sau talon (stub) pe card - nici o frază " "parolă de schimbat.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Această cheie nu este protejată.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Părțile secrete ale cheii primare nu sunt disponibile.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Părți secrete ale cheii primare sunt stacate pe card.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Cheia este protejată.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Nu pot edita această cheie: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Introduceți noua frază-parolă pentru acestă cheie secretă.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "fraza-parolă nu a fost repetată corect; mai încercați o dată" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Nu doriți o frază-parolă - aceasta este probabil o idee *proastă*!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Doriți într-adevăr să faceți acest lucru? (d/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "mut o semnătură de cheie în locul corect\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "salvează și termină" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "afișează amprenta cheii" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "enumeră chei și ID-uri utilizator" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "selectează ID utilizator N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "selectează subcheia N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "verifică semnături" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "semnează ID-urile utilizator selectate [* vezi mai jos pentru comenzi " "relevante]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "semnează ID-urile utilizatorilor selectați local" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "semnează ID-urile utilizatorilor selectați cu o semnătură de încredere" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "semnează ID-urile utilizatorilor selectați cu o semnătură irevocabilă" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "adaugă un ID utilizator" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "adaugă o poză ID" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "șterge ID-urile utilizator selectate" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "adaugă o subcheie" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "adaugă o cheie la un smartcard" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "mută o cheie pe un smartcard" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "mută o cheie de rezervă pe un smartcard" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "șterge subcheile selectate" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "adaugă o cheie de revocare" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "șterge semnăturile de pe ID-urile utilizator selectate" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "schimbă data de expirare pentru cheia sau subcheile selectate" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "marchează ID-ul utilizator selectat ca primar" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "comută între listele de chei secrete și publice" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "enumeră preferințele (expert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "afișează preferințele (detaliat)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "setează lista de preferințe pentru ID-urile utilizator selectate" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "setează URL-ul serverului de chei preferat pentru ID-urile utilizator " "selectate" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "setează o notație pentru ID-urile utilizator selectate" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "schimbă fraza-parolă" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "schimbă încrederea pentru proprietar" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "revocă semnăturile pentru ID-urile utilizator selectate" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "revocă ID-urile utilizator selectate" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "revocă cheia sau subcheile selectate" #: g10/keyedit.c:1439 msgid "enable key" msgstr "activează cheia" #: g10/keyedit.c:1440 msgid "disable key" msgstr "deactivează cheia" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "arată pozele pentru ID-urile utilizator selectate" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "compactează ID-urile utilizator nefolosibile și șterge semnăturile " "nefolosibile de pe cheie" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" "compactează ID-urile utilizator nefolosibile și șterge toate semnăturile de " "pe cheie" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "eroare la citire keyblock secret \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Cheia secretă este disponibilă.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Aveți nevoie de cheia secretă pentru a face aceasta.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Vă rugăm folosiți mai întâi comanda \"toggle\".\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* Comanda `sign' (semnează) poate fi prefixată cu un `l' pentru semnături\n" " locale (lsign), un `t' pentru semnături de încredere (tsign), un `nr'\n" " pentru semnături irevocabile (nrsign), sau orice combinație a acestora\n" " (ltsign, tnrsign, etc.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Cheia este revocată." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Semnați într-adevăr toate ID-urile utilizator? (d/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Sugestie: Selectați ID-ul utilizator de semnat\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Tip de semnătură necunoscut `%s'\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Această comandă nu este permisă în modul %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Trebuie mai întâi să selectați cel puțin un ID utilizator.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Nu puteți șterge ultimul ID utilizator!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Ștergeți într-adevăr toate ID-urile utilizator selectate? (d/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Ștergeți într-adevăr acest ID utilizator? (d/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Mutați într-adevăr cheia primară? (d/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Trebuie să selectați exact o cheie.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Comanda așteaptă un nume de fișier ca argument\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Nu pot deschide `%s': %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Eroare citind cheia de rezervă de pe `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Trebuie să selectați cel puțin o cheie.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Doriți într-adevăr să ștergeți cheile selectate? (d/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Doriți într-adevăr să ștergeți această cheie? (d/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "" "Doriți într-adevăr să revocați toate ID-urile utilizator selectate? (d/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Doriți într-adevăr să revocați acest ID utilizator? (d/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Doriți într-adevăr să revocați toată cheia? (d/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Doriți într-adevăr să revocați subcheile selectate? (d/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Doriți într-adevăr să revocați această subcheie? (d/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Încrederea proprietar nu poate fi setată când este folosită o bază de date " "de încredere furnizată de utilizator\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Setează lista de preferințe ca:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Doriți într-adevăr să actualizați preferințele pentru ID-urile utilizator " "selectate? (d/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Doriți într-adevăr să actualizați preferințele? (d/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Salvați schimbările? (d/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Terminați fără a salva? (d/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "actualizarea a eșuat: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "actualizarea secretului a eșuat: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Cheia nu a fost schimbată așa că nici o actualizare a fost necesară.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Rezumat: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Capabilități: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Server de chei no-modify" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Server de chei preferat: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notații:" #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Nu există nici o preferință pentru un ID utilizator stil PGP 2.x.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Această cheie a fost revocată pe %s de %s cheia %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Această cheie poate fi revocată de %s cheia %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr " (senzitiv)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "creată: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "revocată: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "expirată: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "expiră: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "folosire: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "încredere: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "validitate: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Această cheie a fost deactivată" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "nr-card: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Vă rugăm observați că validitatea cheii arătate nu este în mod necesar\n" "corectă dacă nu reporniți programul.\n" # #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "revocată" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "expirată" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "AVERTISMENT: nici un ID utilizator nu a fost marcat ca primar.\n" " Această comandă poate cauza ca un alt ID utilizator\n" " să devină ID-ul utilizator primar presupus.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Nu puteți schimba data de expirare a unei chei v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "AVERTISMENT: Aceasta este o cheie stil PGP2. Adăugarea unei poze ID poate\n" " cauza unele versiuni de PGP să respingă această cheie.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Sunteți încă sigur(ă) că doriți să o adăugați? (d/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Nu puteți adăuga o poză ID la o cheie stil PGP2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Ștergeți această semnătură bună? (d/N/t)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Ștergeți această semnătură invalidă? (d/N/t)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Ștergeți această semnătură necunoscută? (d/N/t)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Ștergeți într-adevăr această auto-semnătură? (d/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Am șters %d semnături.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Am șters %d semnături.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nu am șters nimic.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "invalid(ă)" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "ID utilizator \"%s\" compactat: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "ID utilizator \"%s\": %d semnătură ștearsă\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "ID utilizator \"%s\": %d semnături șterse\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "ID-ul utilizator \"%s\": deja minimizat\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "ID-ul utilizator \"%s\": deja curat.\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "AVERTISMENT: Aceasta este o cheie stil PGP 2.x. Adăugarea unui revocator\n" " desemnat poate face ca unele versiuni de PGP să respingă " "cheia.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Nu puteți adăuga un revocator desemnat la o cheie stil PGP 2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Introduceți ID-ul utilizator al revocatorului desemnat: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "nu pot desemna o cheie stil PGP 2.x ca un revocator desemnat\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "nu puteți desemna o cheie ca propriul său revocator desemnat\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "această cheie a fost deja desemnată ca un revocator\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "AVERTISMENT: desemnarea unei chei ca un revocator desemnat nu poate fi " "anulată!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Sunteți sigur(ă) că doriți să desemnați această cheie ca și un revocator " "desemnat? (d/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Vă rugăm ștergeți selecțiile din cheile secrete.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Vă rugăm selectați cel mult o subcheie.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Schimb timpul de expirare pentru o subcheie.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Schimb timpul de expirare pentru cheia primară.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Nu puteți schimba data de expirare a unei chei v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Nici o semnătură corespunzătoare în inelul secret\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "" "subcheia de semnare %s este deja certificată reciproc (cross-certified)\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" "subcheia %s nu semnează și nu trebuie certificată reciproc (cross-" "certified)\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Vă rugăm selectați exact un ID utilizator.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "auto-semnătură v3 sărită pentru ID-ul utilizator \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Introduceți URL-ul serverului de chei preferat: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Sunteți sigur(ă) că doriți să o folosiți? (d/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Sunteți sigur(ă) că doriți să o folosiți? (d/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Introduceți notația: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Continuă? (d/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Nici un ID utilizator cu indicele %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Nici un ID utilizator cu hash-ul %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Nici o subcheie cu indicele %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "ID utilizator: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "semnată de cheia d-voastră %s la %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (non-exportabilă)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Această semnătură a expirat pe %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Sunteți încă sigur(ă) că doriți să o revocați? (d/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Creați un certificat de revocare pentru această semnătură? (d/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Nu este semnată de dvs.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Ați semnat aceste ID-uri utilizator pe cheia %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (non-revocabilă)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "revocată de cheia d-voastră %s pe %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Sunteți pe cale să revocați aceste semnături:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Doriți într-adevăr să creați certificatele de revocare? (d/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "nici o cheie secretă\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "ID-ul utilizator \"%s\" este deja revocat\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "AVERTISMENT: o semnătură ID utilizator este datată %d secunde în viitor\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Cheia %s este deja revocată.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Subcheia %s este deja revocată.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Afișez poza ID %s de dimensiune %ld pentru cheia %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "preferința `%s' duplicată\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "prea multe preferințe de cifrare\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "prea multe preferințe de rezumat\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "prea multe preferințe de compresie\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "articol invalid `%s' în șirul de preferințe\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "scriu semnătură directă\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "scriu auto semnătură\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "scriu semnătură legată de cheie\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "lungime cheie invalidă; folosesc %u biți\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "lungime cheie rotunjită la %u biți\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Semnează" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certifică" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Cifrează" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Autentifică" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsCcAaTt" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Acțiuni posibile pentru o cheie %s: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Acțiuni permise curent: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Comută capabilitatea de semnare\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Comută capabilitatea de cifrare\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Comută capabilitatea de autentificare\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Terminat\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Selectați ce fel de cheie doriți:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA și RSA (implicit)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA și Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (numai semnare)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (numai semnare)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (numai cifrare)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (numai cifrare)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (setează singur capabilitățile)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (setează singur capabilitățile)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "cheile %s pot avea lungimea între %u și %u biți.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Ce lungime de cheie doriți pentru subcheie? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Ce lungime de cheie doriți? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Lungimea cheii necesară este %u biți\n" #: g10/keygen.c:1722 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 "" "Specificați cât de mult timp doriți să fie validă cheia.\n" " 0 = cheia nu expiră\n" " = cheia expiră în n zile\n" " w = cheia expiră în n săptămâni\n" " m = cheia expiră în n luni\n" " y = cheia expiră în n ani\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Specificați cât de mult timp doriți să fie validă semnătura.\n" " 0 = semnătura nu expiră\n" " = semnătura expiră în n zile\n" " w = semnătura expiră în n săptămâni\n" " m = semnătura expiră în n luni\n" " y = semnătura expiră în n ani\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Cheia este validă pentru? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Semnătura este validă pentru? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "valoare invalidă\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Cheia nu expiră deloc\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Semnătura nu expiră deloc\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Cheia expiră pe %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Semnătura expiră pe %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Sistemul d-voastră nu poate afișa date după 2038.\n" "Totuși, acestea vor fi corect mânuite până în 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Este aceasta corect? (d/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Aveți nevoie de un ID utilizator pentru a identifica cheia; software-ul\n" "construiește ID-ul utilizator din Numele Real, Comentariul și Adresa de " "Email\n" "în această formă:\n" " \"Popa Ioan (popică) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Nume real: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Caracter invalid în nume\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Numele nu poate începe cu o cifră\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Numele trebuie să fie de cel puțin 5 caractere\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Adresă de email: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Nu este o adresă de email validă\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Comentariu: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Caracter invalid în comentariu\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Folosiți setul de caractere `%s'\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Ați selectat acest ID-UTILIZATOR:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Vă rugăm nu puneți adresa de email în numele real sau comentariu\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoTt" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Schimbă (N)ume, (C)omentariu, (E)mail sau (T)Termină? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Schimbă (N)ume, (C)omentariu, (E)mail sau (O)K/(T)Termină? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Vă rugăm corectați mai întâi eroarea\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Aveți nevoie de o frază-parolă pentru a vă proteja cheia secretă.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Nu aveți nevoie de o frază-parolă - aceasta este probabil o idee *proastă*!\n" "O să o fac oricum. Puteți schimba fraza-parolă oricând, folosind acest\n" "program cu opțiunea \"--edit-key\".\n" #: g10/keygen.c:2034 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 "" "Trebuie să generăm o grămadă de octeți aleatori. Este o idee bună să faceți\n" "altceva (tastați la tastatură, mișcați mausul, utilizați discurile)\n" "în timpul generării numerelor prime; aceasta dă o șansă generatorului de\n" "numere aleatoare o șansă mai bună de a aduna destulă entropie.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Generarea cheii a fost anulată.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "scriu cheia publică în `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "scriu talonul (stub) cheii secrete în `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "scriu cheia secretă în `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "nu am găsit nici un inel de chei public de scris: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "nu am găsit nici un inel de chei secret de scris: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "eroare la scrierea inelului de chei public `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "eroare la scrierea inelului de chei secret `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "cheile secretă și publică au fost create și semnate.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "De notat că această cheie nu poate fi folosită pentru cifrare. Poate " "doriți\n" "să folosiți comanda \"--edit-key\" pentru a genera o subcheie secundară\n" "pentru acest scop.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Generarea cheii a eșuat: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "cheia a fost creată %lu secundă în viitor (warp în timp sau probleme cu " "ceasul)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "cheia a fost creată %lu secunde în viitor (warp în timp sau probleme cu " "ceasul)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "NOTĂ: crearea de subchei pentru chei v3 nu este conform OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Creați într-adevăr? (d/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "stocarea cheii pe card a eșuat: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "nu pot crea fișier de rezervă `%s': %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOTĂ: copia de siguranța a cheii cardului salvată la `%s'\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "niciodată " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Politică de semnături critică: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Politică de semnături: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Server de chei preferat critic: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Notare semnătură critică: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Notare semnătură: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Inel de chei" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Amprentă cheie primară:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Amprentă subcheie:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Amprentă cheie primară:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Amprentă subcheie:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Amprentă cheie =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Card nr. serie =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "redenumirea `%s' ca `%s' a eșuat: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "AVERTISMENT: există 2 fișiere cu informații confidențiale.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s este cel neschimbat\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s este cel nou\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Vă rugăm reparați această deficiență posibilă de securitate\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "pun în cache inelul de chei `%s'\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu chei puse în cache până acum (%lu semnături)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu chei puse în cache (%lu semnături)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: inelul de chei creat\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "include cheile revocate în rezultatele căutării" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "include subcheile la căutarea după ID-ul cheii" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "folosește fișiere temporare pentru a transmite date la serverele de chei " "ajutătoare" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "nu șterge fișierele temporare după ce au fost folosite" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "adu automat cheile la verificarea semnăturilor" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "onorează URL-ul serverului de chei preferat de pe cheie" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "onorează înregistrarea PKA setat pe o cheie la aducerea cheilor" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "AVERTISMENT: opțiunile serverului de chei `%s' nu sunt folosite pe această " "platformă\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "deactivat(ă)" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Introduceți număr/numere, N)ext (următor), sau Q)uit (termină) > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "protocol server de chei invalid (us %d!=handler %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "cheia \"%s\" nu a fost găsită pe serverul de chei\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "cheia nu a fost găsită pe serverul de chei\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "cer cheia %s de la serverul %s %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "cer cheia %s de la %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "caut nume de pe serverul %s %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "caut nume de pe %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "trimit cheia %s serverului %s %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "trimit cheia %s lui %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "caut \"%s\" de pe serverul %s %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "caut \"%s\" de pe %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "nici o acțiune pentru serverul de chei!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" "AVERTISMENT: manipulator server de chei dintr-o versiune diferită de GnuPG " "(%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "serverul de chei nu a trimis VERSION (versiune)\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "eroare de comunicare server de chei: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "nici un server de chei cunoscut (folosiți opțiunea --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" "apeluri către server de chei extern nu este suportat de acest program\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "nici un manipulator (handler) pentru schema serverului de chei `%s'\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "acțiunea `%s' nu este suportată cu schema serverului de chei `%s'\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s nu suportă versiunea de manipulator (handler) %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "serverul de chei a epuizat timpul de așteptare (timed out)\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "eroare internă server de chei\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" nu este un ID de cheie: sărit\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "AVERTISMENT: nu pot reactualiza cheia %s via %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "reactualizez 1 cheie de la %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "reactualizez %d chei de la %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "AVERTISMENT: nu pot obține URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "AVERTISMENT: nu pot interpreta URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "dimensiune ciudată pentru o cheie de sesiune cifrată (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s cheie de sesiune cifrată\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "fraza-parolă generată cu un algoritm rezumat necunoscut %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "cheia publică este %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "date cigrate cu cheie publică: DEK bun\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "cifrat cu cheia %u-bit %s, ID %s, creată %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "cifrat cu cheia %s, ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "decriptarea cu cheie publică a eșuat: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "cifrată cu %lu fraze-parolă\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "cifrată cu 1 frază-parolă\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "presupunem date cifrate %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "cifru IDEA indisponibil, vom încerca să folosim %s în loc\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "decriptare OK\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "AVERTISMENT: mesajul nu a avut integritatea protejată\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "AVERTISMENT: mesajul cifrat a fost manipulat!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "decriptarea a eșuat: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTĂ: expeditorul a cerut \"doar-pentru-ochii-d-voastră\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "nume fișier original='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "AVERTISMENT: multiple plaintext văzute\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "revocare standalone - folosiți \"gpg --import\" pentru a aplica\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "nu am găsit nici o semnătură\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "verificare semnătură eliminată\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "nu pot mânui aceste date de semnături ambigue\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Semnătură făcută %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " folosind cheia %s %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Semnătură făcută %s folosind cheia %s cu ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Cheie disponibilă la: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "Semnătură INCORECTĂ din \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Semnătură expirată din \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Semnătură bună din \"%s\"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[nesigur]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " aka \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Semnătură expirată %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Semnătura expiră %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "semnătură %s, algoritm rezumat %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binar" #: g10/mainproc.c:1947 msgid "textmode" msgstr "modtext" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "necunoscut" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Nu pot verifica semnătura: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "nu o semnătură detașată\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "AVERTISMENT: am detectat multiple semnături. Numai prima va fi verificată.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "semnătură de sine stătătoare (standalone) de clasă 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "semnătură de stil vechi (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "pachet root invalid detectat în proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "nu pot deactiva generarea fișierelor core: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat pentru `%s' a eșuat în %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) a eșuat în %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "AVERTISMENT: folosesc algoritmul cu cheie publică experimental %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "AVERTISMENT: cheile Elgamal pentru semnătură și cifrare prea vechi " "(deprecated)\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "AVERTISMENT: folosesc algoritmul de cifrare experimental %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "AVERTISMENT: folosesc algoritmul rezumat experimental %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "AVERTISMENT: algoritmul rezumat %s este prea vechi (deprecated)\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "vă rugăm vedeți %s pentru informații suplimentare\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "NOTĂ: Această capabilitate nu este disponibil în %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: opțiune învechită \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "AVERTISMENT: \"%s\" este o opțiune învechită\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "vă rugăm folosiți \"%s%s\" în loc\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "AVERTISMENT: \"%s\" este o comandă învechită - nu o folosiți\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Necompresat" # #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "necompresat|niciunul" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "acest mesaj s-ar putea să nu poată fi folosit de %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "opțiune ambiguă `%s'\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "opțiune necunoscută `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Tip de semnătură necunoscut `%s'\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Fișierul `%s' există. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Suprascriu? (d/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: sufix necunoscut\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Introduceți un nou nume-fișier" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "scriu la stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "presupun date semnate în `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "fișier de configurare nou `%s' creat\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "AVERTISMENT: opțiunile din %s nu sunt încă active în timpul acestei rulări\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "director `%s' creat\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "nu pot mânui algoritmul cu cheie publică %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "AVERTISMENT: cheie de sesiune cifrată simetric potențial nesigură " "(insecure)\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpachetul de tip %d are bitul critic setat\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent nu este disponibil în această sesiune\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "variabila de mediu GPG_AGENT_INFO anormală\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent versiune protocol %d nu este suportat\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "nu mă pot conecta la `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problemă cu agentul - deactivez folosirea agentului\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (ID cheie principală %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Aveți nevoie de o frază-parolă pentru a descuia cheia secretă pt. " "utilizator:\n" "\"%.*s\"\n" "cheia %u-bit %s, ID %s, creată %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Repetați fraza-parolă\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Introduceți fraza-parolă\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "anulată de utilizator\n" # #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "nu pot cere fraza-parolă în modul batch\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Introduceți fraza-parolă: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Aveți nevoie de o frază-parolă pentru a descuia cheia secretă pentru\n" "utilizator: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "cheia %u-bit %s, ID %s, creată %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (subcheie pe cheia principală ID %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repetați fraza-parolă: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Alegeți o imagine pentru a o folosi ca poză ID. Imaginea trebuie să fie un\n" "fișier JPEG. Amintiți-vă că imaginea este păstrată în cheia d-voastră " "publică.\n" "Dacă folosiți o imagine foarte largă, cheia d-voastră va deveni de asemenea\n" "foarte largă!\n" "Încercați să folosiți o imagine de aproximativ 240x288 pixeli.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Introduceți nume-fișier JPEG pentru poză ID: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "nu pot deschide fișierul JPEG `%s': %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Acest JPEG este foarte mare (%d octeți) !\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Sunteți sigur(ă) că doriți să îl folosiți? (d/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "`%s' nu este un fișier JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Este această poză corectă (d/N/t)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "nici un vizualizor foto specificat\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "nu pot afișa poza ID!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Nici un motiv specificat" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Cheia este înlocuită" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Cheia a fost compromisă" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Cheia nu mai este folosită" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "ID utilizator nu mai este valid" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "motiv pentru revocare: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "comentariu revocare: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMtTsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Nici o valoare de încredere atribuită lui:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " aka \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Cât de mult credeți că această cheie aparține într-adevăr utilizatorului " "numit?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Nu știu sau nu vreau să mă pronunț\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = NU am încredere\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Am încredere supremă\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = înapoi la meniul principal\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = sări peste cheia asta\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " t = termină\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Nivelul minim de încredere pentru această cheie este: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Decizia d-voastră? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "" "Doriți într-adevăr să setați această cheie cu încredere supremă? (d/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificatele ce conduc la o cheie cu încredere supremă:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: Nu există nici o indicație că această cheie aparține într-adevăr " "utilizatorului numit\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Nu există nici o indicație că această cheie aparține într-adevăr " "utilizatorului numit\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Această cheie aparține probabil utilizatorului numit\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Această cheie ne aparține\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NU este sigur că cheia aparține persoanei numite în ID-ul\n" "utilizator. Dacă știți *cu adevărat* ce faceți, puteți\n" "răspunde cu da la următoarea întrebare.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Folosiți oricum această cheie? (d/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "AVERTISMENT: Folosiți o cheie fără încredere!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "AVERTISMENT: această cheie poate fi revocată (cheia de revocare nu este " "prezentă)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "AVERTISMENT: Această cheie a fost revocată revocatorul desemnat!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "AVERTISMENT: Această cheie a fost revocată de proprietarul ei!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Aceasta ar putea însemna că semnătura e falsificată.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "AVERTISMENT: Această cheie a fost revocată de proprietarul ei!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Notă: Această cheie a fost deactivată.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Notă: Adresa verificată a semnatarului este `%s'\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Notă: Adresa semnatarului `%s' nu se potrivește cu intrarea DNS\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "trustlevel ajustat la DEPLIN datorită informației PKA valide\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "trustlevel ajustat la NICIODATĂ datorită informației PKA incorecte\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Notă: Această cheie a expirat!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "AVERTISMENT: Această cheie nu este certificată de o semnătură de încredere!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Nu există nici o indicație că semnătura aparține proprietarului.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "AVERTISMENT: Noi NU avem încredere în această cheie!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Semnătura este probabil un FALS.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "AVERTISMENT: Această cheie nu este certificată cu suficiente semnături de " "încredere!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Nu este sigur că semnătura aparține proprietarului.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: sărită: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: sărită: cheia publică este deja prezentă\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Nu ați specificat un ID utilizator. (puteți folosi \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Destinatari curenți:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Introduceți ID-ul utilizator. Terminați cu o linie nouă: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Nu există acest ID utilizator.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "sărită: cheia publică setată deja ca destinatar implicit\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Cheia publică este deactivată.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "sărită: cheia publică setată deja\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "destinatar implicit necunoscut \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: sărită: cheia publică este deactivată\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "nici un destinatar valid\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "datele nu au fost salvate: folosiți opțiunea \"--output\" pentru a le salva\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "eroare la creearea `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Semnătură detașată.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Vă rugăm introduceți numele fișierului de date: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "citesc stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "nici o dată semnată\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "nu pot deschide date semnate `%s'\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "destinator anonim; încerc cheia secretă %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "OK, noi suntem destinatarul anonim.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "vechea encodare a lui DEK nu este suportată\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "algoritm cifrare %d%s este necunoscut sau deactivat\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" "AVERTISMENT: algoritm cifrare %s nu a fost găsit în preferințele " "destinatarului\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTĂ: cheia secretă %s a expirat la %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "NOTĂ: cheia a fost revocată" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet a eșuat: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "cheia %s nu are nici un ID utilizator\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Pentru a fi revocat de:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Aceasta este o cheie de revocare senzitivă)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Creați un certificat de revocare desemnat pentru această cheie? (d/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Ieșire în armură ASCII forțată.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet a eșuat: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Certificat de revocare creat.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "nici o cheie de revocare găsită pentru \"%s\"\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "cheia secretă \"%s\" nu a fost găsită: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "nici o cheie publică corespunzătoare: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "cheia publică nu se potrivește cu cheia secretă!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Creați un certificat de revocare pentru această cheie? (d/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "algoritm de protecție necunoscut\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "NOTĂ: Această cheie nu este protejată!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Certificat de revocare creat.\n" "\n" "Vă rugăm mutați-l pe un medium pe care îl puteți ascunde; dacă cineva pune\n" "mâna pe acest certificat l-ar putea folosi să vă facă cheia inutilizabilă.\n" "Este indicat să tipăriți acest certificat și să-l păstrați undeva sigur, în\n" "caz că mediumul este deteriorat. Dar fiți atent: sistemul de tipărire al\n" "mașinii d-voastră ar putea păstra datele și să le facă accesibile altora!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Vă rugăm selectați motivul pentru revocare:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Renunță" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Probabil doriți să selectați %d aici)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Introduceți o descriere opțională; terminați cu o linie goală:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Motiv pentru revocare: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Nici o descriere dată)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Este aceasta OK? (d/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "părți ale cheii secrete nu sunt disponibile\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "algoritm de protecție %d%s nu este suportat\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "algoritm rezumat %d nu este suportat\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Frază-parolă invalidă; vă rugăm mai încercați o dată" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "AVERTISMENT: Cheie slabă detectată - vă rugăm schimbați din nou fraza-" "parolă.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "generez învechitul checksum de 16-bit pentru protecția cheii secrete\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "cheie slabă creată - reîncerc\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "nu pot evita cheie slabă pentru cifru simetric; am încercat %d ori!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA necesită lungimea hash să fie multiplu de 8 biți\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "Cheia DSA %s folosește un hash (%u bit) nesigur\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "Cheia DSA %s necesită un hash de %u bit sau mai lung\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "AVERTISMENT: conflict pentru rezumat semnătură în mesaj\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" "AVERTISMENT: subcheia de semnare %s nu este certificată reciproc (cross-" "certified)\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "AVERTISMENT: subcheia de semnare %s are o certificare-reciprocă invalidă " "(invalid cross-certification)\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "cheie publică %s este mai nouă cu %lu secundă decât semnătura\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "cheie publică %s este mai nouă cu %lu secunde decât semnătura\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "cheia %s a fost creată %lu secundă în viitor (warp în timp sau probleme cu " "ceasul)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "cheia %s a fost creată %lu secunde în viitor (warp în timp sau probleme cu " "ceasul)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTĂ: cheia semnăturii %s a expirat %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "semnătură %s, algoritm rezumat %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "presupun semnătură incorectă din cheia %s datorită unui bit critic " "necunoscut\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "cheia %s: nici o subcheie pentru semnătura de revocare a subcheii\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "cheia %s: nici o subcheie pentru semnătura legată de subcheie\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "AVERTISMENT: nu pot %%-expanda notarea (prea mare). Folosesc neexpandat.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "AVERTISMENT: nu pot %%-expanda URL-ul de politici (prea mare). Îl folosesc " "neexpandat.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "AVERTISMENT: nu pot %%-expanda URL-ul serverului de chei (prea mare). Îl " "folosesc neexpandat.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "verificarea semnăturii create a eșuat: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s semnătură de la: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "puteți semna-datașat cu chei stil PGP 2.x numai în modul --pgp2\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "AVERTISMENT: forțarea algoritmului rezumat %s (%d) violează preferințele " "destinatarului\n" #: g10/sign.c:960 msgid "signing:" msgstr "semnare:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "puteți semna-în-clar cu chei stil PGP 2.x în modul --pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "va fi folosită cifrarea %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "cheia nu este marcată ca sigură - nu o pot folosi cu GNA falsificat!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "sărită \"%s\": duplicată\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "sărită \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "sărită: cheia secretă deja prezentă\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "aceasta este o cheie ElGamal generată de PGP care nu e sigură pentru " "semnături!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "înregistrare încredere %lu, tip %d: scrierea a eșuat: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Listă cu valori de încredere atribuite, creată %s\n" "# (Folosiți \"gpg --import-ownertrust\" pentru a le reface)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "eroare în `%s': %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "linie prea lungă" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "caracter : lipsă" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "amprentă invalidă" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "lipsește valorea încrederii în proprietari (ownertrust)" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "eroare găsire înregistrare încredere în `%s': %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "eroare citire în `%s': %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sincronizarea a eșuat: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "nu pot crea încuietoare (lock) pentru `%s'\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "nu pot încuia (lock) `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek a eșuat: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: scrierea a eșuat (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "tranzacția trustdb prea mare\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "nu pot accesa `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: directorul nu există!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: am eșuat să creez înregistrare versiune: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: a fost creat trustdb invalid\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: a fost creat trustdb\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "NOTĂ: nu poate fi scris în trustdb\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: trustdb invalid\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: am eșuat să creez hashtable: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: eroare actualizare înregistrare versiune: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: eroare citire înregistrare versiune: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: eroare scriere înregistrare versiune: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek a eșuat: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: citirea a eșuat (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: nu e un fișier trustdb\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: înregistrare versiune cu recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versiune fișier invalidă %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: eroare citire înregistrare liberă: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: eroare scriere înregistrare dir: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: eroare setere la zero a înregistrării: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: adăugarea unei înregistrări a eșuat: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Eroare: trustdb este coruptă\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "nu pot mânui linii de text mai lungi de %d caractere\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "linii de intrare mai lungi de %d caractere\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' nu este un ID-cheie de lungime validă\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "cheia %s: acceptată ca cheie de încredere\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "cheia %s apare de mai multe ori în trustdb\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "cheia %s: nici o cheie publică pentru cheia de încredere - sărită\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "cheia %s marcată ca având încredere supremă\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "înregistrare încredere %lu, tip req %d: citirea a eșuat: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "înregistrare încredere %lu nu este de tipul cerut %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "Puteți încerca să re-creați trustdb folosind comenzile:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Dacă nu merge, vă rugăm să consultați manualul\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "nu pot folosi model de încredere (%d) - presupun model de încredere %s\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "folosesc model de încredere %s\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10 traducător vezi trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[revocată]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[expirată] " #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[necunoscută]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ nedef ]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[marginal]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ deplină]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ supremă]" #: g10/trustdb.c:553 msgid "undefined" msgstr "nedefinită" #: g10/trustdb.c:554 msgid "never" msgstr "niciodată" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginal" #: g10/trustdb.c:556 msgid "full" msgstr "deplină" #: g10/trustdb.c:557 msgid "ultimate" msgstr "supremă" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "nu e nevoie de o verificare trustdb\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "următoarea verificare trustdb programată pe %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "nu e nevoie de o verificare trustdb cu modelul de încredere `%s'\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "nu e nevoie de o actualizare trustdb cu modelul de încredere `%s'\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "cheia publică %s nu a fost găsită: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "vă rugăm faceți un --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "verific trustdb\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d chei procesate (%d numărători valide anulate)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "nu am găsit nici o cheie cu încredere supremă\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "cheia publică a cheii cu încredere supremă %s nu a fost găsită\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" "%d marginal(e) necesare, %d complet(e) necesare, model de încredere %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "adânc: %d valid: %3d semnat: %3d încredere: %d-, %dq, %dn, %dm, %df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "nu pot actualiza înregistrare versiunii trustdb: scrierea a eșuat: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "semnătura nu a putut fi verificată.\n" "Vă rugăm amintiți-vă că fișierul de semnătură (.sig sau .asc)\n" "ar trebui să fie primul dat în linia de comandă.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "linia de intrare %u prea lungă sau lipsește LF\n" #: util/errors.c:53 msgid "general error" msgstr "eroare generală" #: util/errors.c:54 msgid "unknown packet type" msgstr "tip de pachet necunoscut" #: util/errors.c:55 msgid "unknown version" msgstr "versiune necunoscută" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "algoritm pubkey necunoscut" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "algoritm rezumat necunoscut" #: util/errors.c:58 msgid "bad public key" msgstr "cheie publică incorectă" #: util/errors.c:59 msgid "bad secret key" msgstr "cheie secretă incorectă" #: util/errors.c:60 msgid "bad signature" msgstr "semnătură incorectă" #: util/errors.c:61 msgid "checksum error" msgstr "eroare checksum" #: util/errors.c:62 msgid "bad passphrase" msgstr "frază-parolă incorectă" #: util/errors.c:63 msgid "public key not found" msgstr "cheia publică nu a fost găsită" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "algoritm cifrare necunoscut" #: util/errors.c:65 msgid "can't open the keyring" msgstr "nu pot deschide inelul de chei" #: util/errors.c:66 msgid "invalid packet" msgstr "pachet invalid" #: util/errors.c:67 msgid "invalid armor" msgstr "armură invalidă" #: util/errors.c:68 msgid "no such user id" msgstr "nu există acest id utilizator" #: util/errors.c:69 msgid "secret key not available" msgstr "cheia secretă nu e disponibilă" #: util/errors.c:70 msgid "wrong secret key used" msgstr "a fost folosită o cheie secretă greșită" #: util/errors.c:71 msgid "not supported" msgstr "nu este suportat(ă)" #: util/errors.c:72 msgid "bad key" msgstr "cheie incorectă" #: util/errors.c:73 msgid "file read error" msgstr "eroare citire fișier" #: util/errors.c:74 msgid "file write error" msgstr "eroare scriere fișier" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "algoritm compresie necunoscut" #: util/errors.c:76 msgid "file open error" msgstr "eroare deschidere fișier" #: util/errors.c:77 msgid "file create error" msgstr "eroare creare fișier" #: util/errors.c:78 msgid "invalid passphrase" msgstr "frază-parolă invalidă" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritm pubkey neimplementat" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algoritm cifrare neimplementat" #: util/errors.c:81 msgid "unknown signature class" msgstr "clasă semnături necunoscută" #: util/errors.c:82 msgid "trust database error" msgstr "eroare bază de date încredere" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI incorect" #: util/errors.c:84 msgid "resource limit" msgstr "limită resurse" #: util/errors.c:85 msgid "invalid keyring" msgstr "inel de chei invalid" #: util/errors.c:86 msgid "bad certificate" msgstr "certificat incorect" #: util/errors.c:87 msgid "malformed user id" msgstr "id utilizator anormal" #: util/errors.c:88 msgid "file close error" msgstr "eroare închidere fișier" #: util/errors.c:89 msgid "file rename error" msgstr "eroare redenumire fișier" #: util/errors.c:90 msgid "file delete error" msgstr "eroare ștergere fișier" #: util/errors.c:91 msgid "unexpected data" msgstr "date neașteptate" #: util/errors.c:92 msgid "timestamp conflict" msgstr "conflict timestamp" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "algoritm pubkey nefolosibil" #: util/errors.c:94 msgid "file exists" msgstr "fișierul există" #: util/errors.c:95 msgid "weak key" msgstr "cheie slabă" #: util/errors.c:96 msgid "invalid argument" msgstr "argument invalid" #: util/errors.c:97 msgid "bad URI" msgstr "URI incorect" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI nesuportat" #: util/errors.c:99 msgid "network error" msgstr "eroare rețea" #: util/errors.c:101 msgid "not encrypted" msgstr "necifrat" #: util/errors.c:102 msgid "not processed" msgstr "neprocesat" #: util/errors.c:104 msgid "unusable public key" msgstr "cheie publică de nefolosit" #: util/errors.c:105 msgid "unusable secret key" msgstr "cheie secretă de nefolosit" #: util/errors.c:106 msgid "keyserver error" msgstr "eroare server de chei" #: util/errors.c:107 msgid "canceled" msgstr "anulată" #: util/errors.c:108 msgid "no card" msgstr "nici un card" #: util/errors.c:109 msgid "no data" msgstr "nici o dată" #: util/logger.c:183 msgid "ERROR: " msgstr "EROARE: " #: util/logger.c:186 msgid "WARNING: " msgstr "AVERTISMENT: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... acesta este un bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "ați găsit un bug ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "da" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "dD" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "nu" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "termină|termina" #: util/miscutil.c:443 msgid "qQ" msgstr "tT" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "OK|OK" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "renunță|renunta" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "AVERTISMENT: este folosită memorie neprotejată (insecure)!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "vedeți http://www.gnupg.org/documentation/faqs.html pentru informații " "suplimentare\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "" "operația nu este posibilă fără memorie protejată (secure) inițializată\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(ați folosit probabil un program nepotrivit pentru această sarcină)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "AVERTISMENT: proprietate nesigură (unsafe) pentru extensia `%s'\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "AVERTISMENT: permisiuni nesigure (unsafe) pentru extensia `%s'\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "AVERTISMENT: proprietate director incluziuni nesigur (unsafe) pentru " #~ "extensia `%s'\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "AVERTISMENT: permisiuni director incluziuni nesigure (unsafe) pentru " #~ "extensia `%s'\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "extensie cifru `%s' nu a fost încărcat din cauza permisiunilor nesigure " #~ "(unsafe)\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "plugin-ul pentru cifrare IDEA nu este prezent\n" #~ msgid "Command> " #~ msgstr "Comandă> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "Perechea de chei DSA va avea %u biți.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "trustdb este coruptă; rulați \"gpg --fix-trustdb\".\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|PIN Admin" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "nu pot pune date notare în semnături v3 (stil PGP 2.x)\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "nu pot pune date notare în semnături de chei v3 (stil PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "nu pot pune un URL de politică în semnături v3 (stil PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ "nu pot pune un URL de politică în semnături de chei v3 (stil PGP 2.x)\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA necesită folosirea unui algoritm cu hash de 160 biți\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "vedeți http://www.gnupg.org/why-not-idea.html pentru informații " #~ "suplimentare\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "un nume de notație trebuie să conțină numai caractere imprimabile sau " #~ "spații și să se termine cu un '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "un nume de notație utilizator trebuie să conțină caracterul '@'\n" #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "" #~ "un nume de notație trebuie să nu conțină mai mult de un caracter '@'\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "" #~ "o valoare de notație trebuie să nu folosească nici un caracter de " #~ "control\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "AVERTISMENT: am găsit date de notare invalide\n" #~ msgid "not human readable" #~ msgstr "ilizibil" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "citește opțiuni din fișier" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "citește opțiuni din fișier" #~ msgid "expired: %s)" #~ msgstr "expirat: %s)" #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "cheia %s: semnătură expirată de la cheia %s - sărită\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "nu pot executa programul `%s': %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "ID-ul utilizator \"%s\" este deja revocat\n" #~ msgid "error getting serial number: %s\n" #~ msgstr "eroare la obținerea numărului serial: %s\n" #~ msgid "length of RSA modulus is not %d\n" #~ msgstr "lungimea modulului RSA nu este %d\n" #~ msgid "length of an RSA prime is not %d\n" #~ msgstr "lungimea unui prim RSA nu este %d\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "frază=parolă greșită sau algoritm cifrare necunoscut (%d)\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "nu pot seta pid-ul client pentru agent\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "nu pot convinge serverul să citească FD pentru agent\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "nu pot convinge serverul să scrie FD pentru agent\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "probleme de comunicare cu gpg-agent\n" #~ msgid "passphrase too long\n" #~ msgstr "frază-parolă prea lungă\n" #~ msgid "invalid response from agent\n" #~ msgstr "răspuns invalid de la agent\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "problemă cu agentul: agentul returnează 0x%lx\n" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "algoritm rezumat `%s' este numai-citire în acestă ediție\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "AVERTISMENT: rezumatul `%s' nu este parte din OpenPGP. Folosiți-l pe " #~ "riscul dvs.!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[fișiere]|cifrează fișiere" #~ msgid "store only" #~ msgstr "doar păstrează" #~ msgid "|[files]|decrypt files" #~ msgstr "|[fișiere]|decriptează fișiere" #~ msgid "sign a key non-revocably" #~ msgstr "semnează o cheie irevocabil" #~ msgid "sign a key locally and non-revocably" #~ msgstr "semnează o cheie local și irevocabil" #~ msgid "list only the sequence of packets" #~ msgstr "enumeră numai secvența de pachete" #~ msgid "export the ownertrust values" #~ msgstr "exportă valorile încrederii în proprietari" #~ msgid "unattended trust database update" #~ msgstr "actualizare fără supraveghere a bazei de date de încredere" #~ msgid "fix a corrupted trust database" #~ msgstr "repară o bază de date de încredere coruptă" #~ msgid "De-Armor a file or stdin" #~ msgstr "Elimină armura unui fișier sau intrării standard (stdin)" #~ msgid "En-Armor a file or stdin" #~ msgstr "Pune armura unui fișier sau intrării standard (stdin)" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NUME|folosește NUME ca destinatar implicit" #~ msgid "use the default key as default recipient" #~ msgstr "folosește cheia implicită ca destinatar implicit" #~ msgid "don't use the terminal at all" #~ msgstr "nu folosi deloc terminalul" #~ msgid "force v3 signatures" #~ msgstr "forțează semnături v3" #~ msgid "do not force v3 signatures" #~ msgstr "nu forța semnături v3" #~ msgid "force v4 key signatures" #~ msgstr "forțează semnături de chei v4" #~ msgid "do not force v4 key signatures" #~ msgstr "nu forța semnături de chei v4" #~ msgid "always use a MDC for encryption" #~ msgstr "folosește întotdeauna un MDC pentru cifrare" #~ msgid "never use a MDC for encryption" #~ msgstr "nu folosi niciodată un MDC pentru cifrare" #~ msgid "use the gpg-agent" #~ msgstr "folosește gpg-agent" #~ msgid "batch mode: never ask" #~ msgstr "modul batch: nu întreba niciodată" #~ msgid "assume yes on most questions" #~ msgstr "presupune da la cele mai multe întrebări" #~ msgid "assume no on most questions" #~ msgstr "presupune nu la cele mai multe întrebări" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "adaugă acest inel de chei la lista inelelor de chei" #~ msgid "add this secret keyring to the list" #~ msgstr "adaugă acest inel de chei secret la listă" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NUME|folosește NUME ca cheie secretă implicită" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|HOST|folosește acest server de chei pentru a căuta chei" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NUME|setează charset-ul pentru terminal ca NUME" #~ msgid "|[file]|write status info to file" #~ msgstr "|[fișier]|scrie informații de stare în fișier" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|IDCHEIE|ai încredere deplină în această cheie" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|FIȘIER|încarcă modulul extensie FIȘIER" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emulează modul descris în RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "" #~ "setează toate opțiunile pentru pachete, cifru și rezumat ca pentru " #~ "comportamentul OpenPGP" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ "setează toate opțiunile pentru pachete, cifru și rezumat ca pentru " #~ "comportamentul PGP 2.x" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|folosește modul frază-parolă N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "|NUME|folosește algoritm rezumat mesaj NUME pentru fraza-parolă" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NUME|folosește algoritm cifrare NUME pentru fraza-parolă" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NUME|folosește algoritm cifrare NUME" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NUME|folosește algoritm rezumat mesaj NUME" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|folosește algoritm compresie N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "ignoră câmp keyid pentru pachete cifrate" #~ msgid "Show Photo IDs" #~ msgstr "Arată poze ID-uri" #~ msgid "Don't show Photo IDs" #~ msgstr "Nu arăta poze ID-uri" #~ msgid "Set command line to view Photo IDs" #~ msgstr "Setează linia de comandă pentru a vedea poze ID-uri" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "algoritm compresie `%s' este numai-citire în acestă ediție\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "algoritm compresie trebuie să fie în intervalul %d..%d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key id-utilizator" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key id-utilizator" #~ msgid "can't open %s: %s\n" #~ msgstr "nu pot deschide %s: %s\n" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "cheia %08lX: cheia a fost revocată!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "cheie %08lX: subcheia a fost revocată!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: cheia a expirat\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Noi NU avem încredere în acestă cheie\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Nu este sigur dacă această cheie aparține într-adevăr\n" #~ "proprietarului, dar este oricum acceptată\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "preferința %c%lu nu este validă\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (semnare și cifrare)\n" #~ 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 "" #~ "Pe cale să generați o nouă pereche de chei %s.\n" #~ " lungimea minimă este 768 bits\n" #~ " lungimea implicită este 1024 bits\n" #~ " cea mai lungă cheie sugerată este 2048 bits\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA permite numai chei de la 512 la 1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "" #~ "lungime cheie prea mică; 1024 este cea mai mică valoare permisă pentru " #~ "RSA.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "lungime cheie prea mică; 768 este cea mai mică valoare permisă.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "lungime cheie prea mare; %d este cea mai mare valoare permisă.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "Lungimi pentru chei mai mari de 2048 nu sunt sugerate\n" #~ "deoarece calculele iau FOARTE MULT timp!\n" #~ msgid "Are you sure that you want this keysize? " #~ msgstr "Sunteți sigur(ă) că doriți această lungime de cheie? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Bine, dar țineți minte că radiația monitorului și tastaturii d-voastră " #~ "este de asemenea vulnerabilă la atacuri!\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: nu pot deschide: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: AVERTISMENT: fișier gol\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "cheia %08lX: nu e o cheie rfc2440 - sărită\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "NOTĂ: cheie primară Elgamal detectată - poate lua ceva timp pentru a " #~ "importa\n" #~ msgid " (default)" #~ msgstr "(implicit)" #~ msgid "q" #~ msgstr "t" #~ msgid "save" #~ msgstr "salvează" #~ msgid "help" #~ msgstr "ajutor" #~ msgid "fpr" #~ msgstr "ampr" #~ msgid "list" #~ msgstr "enumeră" #~ msgid "l" #~ msgstr "l" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "cheie" #~ msgid "select secondary key N" #~ msgstr "selectează cheie secundară N" #~ msgid "check" #~ msgstr "verifică" #~ msgid "list signatures" #~ msgstr "enumeră semnături" #~ msgid "sign the key" #~ msgstr "semnează cheia" #~ msgid "s" #~ msgstr "s" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "sign the key non-revocably" #~ msgstr "semnează cheia irevocabil" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "sign the key locally and non-revocably" #~ msgstr "semnează cheia local și irevocabil" #~ msgid "debug" #~ msgstr "depanare" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #~ msgid "add a secondary key" #~ msgstr "adaugă o cheie secundară" #~ msgid "delkey" #~ msgstr "stecheie" #~ msgid "addrevoker" #~ msgstr "adarev" #~ msgid "delsig" #~ msgstr "stesem" #~ msgid "delete signatures" #~ msgstr "șterge semnături" #~ msgid "primary" #~ msgstr "primar" #~ msgid "toggle" #~ msgstr "comuta" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #~ msgid "passwd" #~ msgstr "parola" #~ msgid "trust" #~ msgstr "încredere" #~ msgid "revsig" #~ msgstr "revsem" #~ msgid "revoke signatures" #~ msgstr "revocă semnături" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revoke a user ID" #~ msgstr "revocă un ID utilizator" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX creată: %s expiră: %s" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! subcheia a fost revocată: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- a fost găsită o revocare falsificată\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? probleme la verificare revocării: %s\n" #~ msgid "" #~ "\"\n" #~ "locally signed with your key %08lX at %s\n" #~ msgstr "" #~ "\"\n" #~ "semnată local cu cheie d-voastră %08lX pe %s\n" #~ msgid " signed by %08lX at %s%s%s\n" #~ msgstr " semnată de %08lX pe %s%s%s\n" #~ msgid " signed by %08lX at %s%s\n" #~ msgstr " semnată de %08lX pe %s%s\n" #~ msgid "Policy: " #~ msgstr "Politica: " #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Algoritme experimentale nu ar trebui folosite!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "acest algoritm de cifrare este învechit; vă rugăm folosiți unul " #~ "standard!\n" #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "nu pot obține cheia de la serverul de chei: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "eroare trimitere la `%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "succes trimitere la `%s' (stare=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "a eșuat trimiterea la `%s': stare=%u\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "acest sercer de chei nu suportă --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "nu pot căuta serverul de chei: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "cheie %08lX: aceasta este o cheie ElGamal generată de PGP care NU este " #~ "sigură pentru semnături!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "cheia %08lX a fost creată %lu secundă în viitor (warp în timp sau " #~ "probleme cu ceasul)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "cheia %08lX a fost creată %lu secunde în viitor (warp în timp sau " #~ "probleme cu ceasul)\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: nu pot accesa: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: nu pot crea încuietoare(lock)\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: nu pot crea încuietoare(lock)\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: nu pot crea: %s\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "cheia %08lX marcată ca având încredere supremă\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "semnătură de la cheia de semnare Elgamal %08lX la %08lX sărită\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "semnătură de la %08lX la cheia de semnare Elgamal %08lX sărită\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "verificare la nivel %d semnat=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: nu pot crea director: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Dacă doriți oricum să folosiți această cheie revocată, răspundeți \"da\"." #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Selectați algoritmul de folosit.\n" #~ "\n" #~ "DSA (sau DSS) este algoritmul de semnătură digitală care poate fi " #~ "folosit\n" #~ "doar pentru semnături. Acesta este algoritmul sugerat pentru că " #~ "verificarea\n" #~ "semnăturilor DSA este mult mai rapidă decât a celor ElGamal.\n" #~ "\n" #~ "ElGamal este un algoritm ce poate fi folosit pentru semnături și " #~ "cifrare.\n" #~ "OpenPGP face distincție între cele două variante ale acestui algoritm: " #~ "cel\n" #~ "numai pentru cifrare și cel pentru semnare+cifrare; algoritmul este " #~ "același\n" #~ "dar câțiva parametrii trebuie selectați într-un mod special pentru a " #~ "crea\n" #~ "o cheie sigură pentru semnături: acest program face acest lucru, dar " #~ "alte\n" #~ "implementări OpenPGP ar putea să nu înțeleagă varianta de semnare" #~ "+cifrare.\n" #~ "\n" #~ "Prima cheie (primară) trebuie să fie întotdeauna capabilă de semnare;\n" #~ "acesta este motivul pentru care cheia ElGamal nu este disponibilă în\n" #~ "acest meniu." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Deșî aceste chei sunt definite în RFC2440 ele nu sunt sugerate pentru\n" #~ "că nu sunt suportate de toate programele și semnăturile create cu ele\n" #~ "sunt destul de lungi și verificarea lor este foarte lentă." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu chei până acum verificate (%lu semnături)\n" #~ msgid "key incomplete\n" #~ msgstr "cheie incompletă\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "cheie %08lX incompletă\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "îmi pare rău, nu pot face acest lucru în modul batch\n" #~ msgid "can't open file: %s\n" #~ msgstr "nu pot deschide fișierul: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "eroare: `:' lipsă\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "eroare: nici o valoare încredere pentru proprietar\n" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (semnare și cifrare)\n" #~ msgid "" #~ "The use of this algorithm is only supported by GnuPG. You will not be\n" #~ "able to use this key to communicate with PGP users. This algorithm is " #~ "also\n" #~ "very slow, and may not be as secure as the other choices.\n" #~ msgstr "" #~ "Folosirea acestui algoritm este suportată numai de GnuPG. Nu veți putea\n" #~ "folosi această cheie pentru a comunica cu alți utilizatori PGP. Mai " #~ "mult,\n" #~ "acest algoritm este foarte lent și ar putea fi mai puțin sigur decât\n" #~ "celelalte opțiuni.\n" #~ msgid "Create anyway? " #~ msgstr "Creați oricum? " #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "am detectat algoritm symkey invalid (%d)\n" #~ msgid "this keyserver is not fully HKP compatible\n" #~ msgstr "acest server de chei nu este în totalitate compatibil cu HKP\n" gnupg-1.4.20/po/pl.gmo0000644000175000017500000043565112635457221011421 00000000000000(Pl-l?llmmnnno"o?o\oyo2o7o2p#4pDXp.pIp7q'Nqvq qqqqqr#r@rYrvr+r&r#r(r(sAsZszs(ssss$t9tOt&ftt,ttt! u+uAu\uwu uu uuuuvv&v@v]v*zv"v]vB&wiw/|w=w(w.x3Bx!vx(xxx'x y*y=yWysyy,y'yyz")zLzQzlzBz=z {"({%K{&q{!{%{"{#|''| O|p||||||(|$&}K}`}#t}}$}}}!~<~Y~ x~~&~%~ ~, 47lG^s'.A T'u"ׁ-(40]2H   !.LhA/ބ0\?1΅D-(0V.I*++'W χ93P4-'.щ$ . 8?F4:3Oi,~(8ԋ# &1(X&׌76--d%390&<WG@܎>+\=ƏΏޏ"1 A:M#ѐ /5JH5-~$'ђ8&25Y.5*!.A0p&,Ȕ +68I#"ƕ.H"($FEk1;yi8$3K`! :MgBޜ)%@fn.*x Ğ*!0؟' <1n+",ؠ/15"g,"2ڡ )(J s *ʢܢ $6Sl 5I"(5UFg 1ϥ%'GEE,or $8'>Tc/HNxEǪ, ":#]-+)۫&,'>Ѯ 2BKd+,3ٯ 1K(a#+"ڰ+") Lm?%);Xv.(ò } /00!Ikp!ζ%>SfojK@E-9AO{0˹/5,'b.3-,#!9[$w,(ɽ-&Tg7T q~*+* Cd}#$  ;6E%|72'r>1Y=I4H#g=?D)@n+1N I\I55&;\?B<HX-"H;?< B])C:.I>x2=<(@eFHU6$ -213Ie>K@:5{*7,0A0r4 2,:-6h5.h$*&1#25>h*Y=0M9A"{&!3>cZ%D,)5V2_ @ K V a lw  %"8[){&+5.GV k x. BE5c$ !8?X[(q" =Yw,'.%2>+q%CX5m ;<*\ *C:Y&.D-S <A(7M/l 1)@Wh,H- EQ%Z/0.&(3O  0!$>=c%#- 2S'r#;Y'u&&&Bi / ,/-"]9K%$,&Q$x#D#'*Rcu 1$-@4u $!#5LD`+/ 6 0Ct}/"&('%P%v$ ..Le2'2Zj/+$&>$e',, >3 r$,IJ_"#( L!m*-) W$c' ."+#)O#y-%65H/~"';40p"%/2M!a: !!(>+g8!4 0@q26)9;u&GH BX     # - M ] w        ? M e         '7 _ ~  .   ( 2 !8  Z { ,      $'E)Hr z%%,$Q2n3&"41Cu!%%Ci     #& ;)Eo$<!A6Z,;#M;-":"P-s+&*596o!&$ 1C2XIF3K^y01D#v#++,!C2e$*2.Et*  5Cc%&$@#Y&}3%*%Jp(-96U:,0 /9 i 7~ * . 7!;H!0!1!;!#"%;"a")p"3"6":# @#K#^#9q##5#-$".$Q$ q$$-$$$$ %5*%$`%%+%4%%&!'&CI&*&(&0&'2'.;'-j'*''+T(G(2(/(%+)FQ))1)#)*!*@*(]**-*/*,* &+"0+)S+}++ ++2+1%,W,`,#},#,!,",- -8-:W-I-A-".A. S.].p....... /2/R/!k//////0#0 90E0U0o00 0000 0 11216J1151#1 12'2=2N2*g2!2 22G23*3 =3^3{33-3,33454F4 b44444444D4F=5E5D5E6AU6766677=>7>|77$777<587r8F8899!9 [9|9 9$99#99#:7:*N:*y:}::"<]<0=E>_>t??#?"?"?#@$,@"Q@$t@1@/@*@U&A7|AQA@B+GB#sB BBBB"B# C71CiC#CC5C0C1D-ND$|DD<D#D-E$HEmE&EEEEF!F>F$[FF FFFF G'G ;G\GkG"GGGGG"H=3H/qH&HkHb4II=I?I11J=cJJJ'J)K(>KgK4oKK KKLL2L5JL:L%LLLMM%9MH_M>MM%N%(N0NN)N$N-N7N54O-jO"O#O-O P#*PNP3bP6PPP Q"(Q(KQ(tQ*Q'Q&Q$R4]_]f]]9]]d]FO^^"A_*d_ _/_ _ _7_7`8U`!````a8aRWaLa&a)b$Hb&mbbbbb?b3,c.`c&c4c:c6&dD]d:dJd1(e1ZePeee ff*0f$[fff>f f.fg'g6gGRgggh!h/h(h0iHDi+iBi3i@0j'qj"j2j2j-"k1Pk k-k kk.k#)l&Ml tl@lFlxm6m:m:m<.n?kn9nnop p*p)&qIPq0qq qr'rGrs$s!t5tOt/`t(ttSt+uHu_utuuBu u*u)v#>v5bvv*>w*iww(Wx%x7x7xIy"`y+y+y=y-z$Gz0lzFz>z4#{+X{5{@{6{ 2|:=|x||||*||0}/L}1|}} }y}8Q~/~(~0~$1V%n-&3T;%ĀUƁhL(҂75ڃhyt6o=E:*&e='ʆ&29Y>+҉")>'M#u;CՋC]6p5ƌ/K,<xO@NFM+.I]o$~%)ɏ97--e'Ӓ4;%,a2 ޔ  %Fe''9RזA*4lJA<5@r/%- 677nE'ٜ("*M5l/3ҝL$S$x0Ο$"1B1_2$ġ8G"6j8(ڢ7B;9~72#N21';ۤNfICߦB#MfF;'7G_%RͨN 5o5;۩XGpUL9[zeQv?ȬQEZ'GȭJ/G<wP<IBC9аM DXNRu?y/,=$j=EʹGo[g˵l3dLHRIGD-@rE;W5P?޺:;Y.+ĻZ-Ky7=G (U~8G?2IC(H=q'NG&nC=68;o0ok~"  #= OZz611=3)q<?'0%X~*7)99Us/F+@ lw  7(`!c3 ) #0D)u$-2=D@=?8Az" .')/Q !K 0: X=fh* '8` v## C*n76@M@53H"]J!  L1i"%>7/vW 6#B.f>-+9F*#%<&c0C&":?z($6("Cf{& /+Eq#';7'Ks | 5 A*D)oQR1>,p( #4 a@!2Oj*@ F a(+$$<aGz)2 <+Gh..";Q<0  6(_q#3"8'?#gO"&#?.c!JO7"/#=,3j.GK)j,@8y;w%-%S9y',;3Dx!32 4= r%B+A7W-=%,!;N'@?H3,|.@"A<D~(:1':Y+68>0*o4&69-cg)"E6^7B:/1jA&,wGud5'*#=aw0622):\82&.,U ,1@=r 3* /3:Dn $/H+K w --* -+ Y+e00#7#O6s7)7 *DoD(!#6E|%1- > V  g u  # .  * % >+ j & =   A$ f <~ ? 4 @0 )q T ' ( A "^ 0 %  , (!;,](C;<3'p.1=7P?htJ>,($<Zu5<.-5*c4?509j&+3*"M-k)6 (1C^u$2 ?)V''$:.Z,80 &=3d5K8=S491LDd2<D,^<JQe0>769;p'!O:cA9* )E $o * 7   !/3!;c!-! !?!J." y"."S"-#,K#;x###6#+$1@$r$7$s1%3%;%;&PQ&&?&/&''F'f'>''7'C(BY( (@(=(&()-O)3})4)<)>#* b*"m*-****+ +;5+=q+8+M+F6,2},,,,,.-C3-w- ---#-"-".!<.^.u.....7.#/2/#L/p//)/#/7/10M0_0w00G0+0K1-b1=1"11 2"2732+k222I2)393.M3"|3 39363>4\4!{44#4+45&5F5$W5+|555H5R5KK6S6G6B37;v747>7;&8Eb808"8,80)9-Z9899%9?:)D:%n: :::):;!;@;(U;*~;XYxBN @W/G ^fXK23#,Vyj @wjfK=w8nAu;DK  FvT}dj9 buq_h}\9N@:d>]SRDEMar',9g%^ "swn8%b# Pr4eaC|=] &J"C64.DJ5gd)1p^7U|$H]9LGR]= i}c.a:z(-O<yAmQLxZY#[,!3[' p#$EL}z@ n)?6UBL#;Yj~+z~?"ive50,Q}xo?_Ntl7tj>SA4+y Uc36^ 2E>~erdh$|)6K yeuwD?g1sR.W{<OtBk7*XTX, \h2H!: qBm%&o"? 7;h -I)m>{ET P'kB-`<1rQ]/*T=zI`n<%obIO8;{ZqVFeMXs8+J^R|U/.NH*IF@):`4M[4[c$mt`d/5q\V {&F~["ohY  1'_\ vZ3MITn6-D~27k.(pO fC+*rugHvC!YMfWp :\mlaUi<!SJEz>0u-SAxocc+l l0iGsvZ|Q/ 08QxHW`a=5iZJ &wC_b10PLA$5! F( W  SO9V_K'Pfgl%k2qb3yV;tGR N (pP{*sG(&k Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg-1.4.18 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2014-11-21 20:41+0100 Last-Translator: Jakub Bogusz Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Identyfikator użytkownika (pusta linia oznacza koniec): Brakuje możliwości wygenerowania odpowiedniej liczby losowych bajtów. Proszę kontynuować inne działania aby system mógł zebrać odpowiednią ilość entropii do ich wygenerowania (brakuje %d bajtów). Wybierz zdjęcie które chcesz dołączyć do swojego klucza jako identyfikator. Musi to być plik w formacie JPEG. Zostanie on zapisany w Twoim kluczu publicznym. Jeśli będzie duży, powiększy to także rozmiar Twojego klucza! Dobry rozmiar to około 240 na 288 pikseli. Obsługiwane algorytmy: Musisz podać identyfikator użytkownika aby można było rozpoznać twój klucz; program złoży go z twojego imienia i nazwiska, komentarza i adresu poczty elektronicznej. Będzie on miał, na przykład, taką postać: ,,Tadeusz Żeleński (Boy) '' alias ,,%s'' kluczem %s %s dołączono do zbioru: %lu bez zmian: %lu nowych podkluczy: %lu nowych identyfikatorów: %lu nie włączono do zbioru: %lu bez identyfikatora: %lu "%s": preferowany szyfr %s "%s": preferowany algorytm kompresji %s "%s": preferowany algorytm skrótu %s (podklucz na kluczu głównym %s) Nie ma pewności co do tożsamości osoby która złożyła ten podpis. Ten podpis prawdopodobnie jest FAŁSZYWY. Nie ma pewności co do tożsamości osoby która złożyła podpis. To może oznaczać, że podpis jest fałszerstwem. algorytmów na identyfikatorach: nowych podpisów: %lu ,,%s'' Numer seryjny karty = Odcisk klucza = Odcisk podklucza: tajnych kluczy wczytanych: %lu pominiętych nowych kluczy: %lu identyfikatorów użytkownika oczyszczonych: %lu Odcisk podklucza: podpisów oczyszczonych: %lu (%c) Koniec (%c) Przełączenie możliwości uwierzytelniania (%c) Przełączenie możliwości szyfrowania (%c) Przełączenie możliwości podpisywania (%d) DSA (z dowolnie wybranymi funkcjami) (%d) DSA (tylko do podpisywania) (%d) DSA i ElGamala (%d) Klucz dla algorytmu ElGamala (tylko do szyfrowania) (%d) RSA (tylko do szyfrowania) (%d) RSA (z dowolnie wybranymi funkcjami) (%d) RSA (tylko do podpisywania) (%d) RSA i RSA (domyślne) (0) Nie odpowiem na to pytanie. %s (1) W ogóle nie.%s (1) Klucz do podpisywania (2) Klucz do szyfrowania (2) Pobieżnie.%s (3) Klucz do uwierzytelniania (3) Bardzo dokładnie.%s nowych unieważnień kluczy: %lu %d = NIE ufam mu %d = nie wiem, albo nie powiem %d = mam pełne zaufanie %d = mam ograniczone zaufanie %d = ufam absolutnie Nie da się złożyć podpisu. alias ,,%s'' m = powrót do głównego menu w = wyjście p = pominięcie klucza tajnych kluczy dodanych: %lu (klucz główny %s) (podpis nieeksportowalny) (podpis nieunieważnialny) Odcisk klucza głównego: tajnych kluczy bez zmian: %lu ,,%s'' nie jest poprawnym identyfikatorem klucza, pominięty ,,%s'' jest już lokalnie podpisany kluczem %s ,,%s'' jest już podpisany kluczem %s # Lista przypisanych wartości zaufania, stworzona %s # (użyj "gpg --import-ownertrust" aby ją wczytać) pozostało %d prób(y/a) wprowadzenia PIN-u administracyjnego przed nieodwracalną blokadą karty %d niepoprawnych podpisów przetworzono %d kluczy (rozwiązano %d przeliczeń zaufania) potrzeba %d marginalny(ch), %d zupełny(ch), model zaufania %s %d podpisów nie sprawdzonych z powodu błędów %d podpisów nie zostało sprawdzonych z powodu braku kluczy wykryto %d identyfikatorów użytkownika niepodpisanych tym samym kluczem %lu kluczy zbuforowano (%lu podpisów) %lu kluczy zbuforowanych (%lu podpisów) %lu kluczy przetworzonych do tej chwili %s ... %s nie obsługuje programu pomocniczego w wersji %d %s jeszcze nie działa z %s! dane zaszyfrowano za pomocą %s klucz sesyjny zaszyfrowany %s zostanie użyty szyfr %s %s został utworzony %s pozostał bez zmian Klucze %s mogą mieć długość od %u do %u bitów. Klucze %s mogą mieć długość w zakresie %u-%u bitów. %s nie ma sensu w połączeniu z %s! Nie wolno używać %s z %s! podpis %s, skrót %s %s. %s/%s zaszyfrowany dla: ,,%s'' podpis %s/%s złożony przez: ,,%s'' %s: Jest ograniczona pewność co do tożsamości właściciela klucza. %s: Nie ma pewności co do tożsamości właściciela klucza. %s: katalog nie istnieje! %s: błąd odczytu pustego wpisu: %s %s: błąd odczytu numeru wersji: %s %s: błąd przy uaktualnianiu numeru wersji: %s %s: błąd zapisu wpisu katalogowego: %s %s: błąd zapisu numeru wersji: %s %s: dopisanie rekordu nie powiodło się: %s %s: tworzenie tablicy skrótów nie powiodło się: %s %s: stworzenie zapisu o wersji nie powiodło się: %s%s: zerowanie rekordu nie powiodło się: %s %s: niewłaściwa wersja pliku %d %s: niepoprawny plik bazy zaufania %s: stworzony niepoprawny plik bazy zaufania %s: zbiór kluczy utworzony %s: to nie jest plik bazy zaufania %s: pominięty: %s %s: pominięty: został już wybrany w innej opcji %s: pominięty: klucz publiczny wyłączony z użytku %s: baza zaufania utworzona %s: nieznana końcówka nazwy %s: wpis wersji z numerem %lu %s:%d: przestarzała opcja ,,%s'' %s:%d niepoprawna lista auto-key-locate %s:%d niepoprawne opcje eksportu kluczy %s:%d: niepoprawne opcje wczytania kluczy %s:%d niepoprawne opcje serwera kluczy %s:%d: niepoprawne opcje listy kluczy %s:%d niepoprawne opcje sprawdzania długość %u bitów, typ %s, numer %s, stworzony %s(nie podano) (Prawdopodobnie chcesz tu wybrać %d) (to jest czuły klucz unieważniający) (poufne)(chyba, że klucz zostaje wybrany przez podanie odcisku) (prawdopodobnie używany program jest niewłaściwy dlatego zadania) * Komenda ,,sign'' może być poprzedzona ,,l'' dla podpisów lokalnych (lsign), ,,t'' dla podpisów zaufania (tsign), ,,nr'' dla podpisów nie podlegających unieważnieniu (nrsign), lub ich dowolną kombinacją (ltsign, tnrsign itd.). --clearsign [plik]--decrypt [plik]--edit-key nazwa użytkownika [polecenia]--encrypt [plik]--lsign-key nazwa użytkownikaopcja --output nie działa z tym poleceniem --sign --encrypt [plik]--sign --symmetric [plik]--sign [plik]--sign-key nazwa użytkownika--store [plik]--symmetric --encrypt [plik]--symmetric --sign --encrypt [plik]--symmetric [plik]-k[v][v][v][c] [identyfikator] [zbiór kluczy]... to jest błąd programu (%s:%d:%s) 1 niepoprawny podpis 1 podpis nie został sprawdzony z powodu braku klucza 1 podpis nie został sprawdzony z powodu błędu wykryto 1 identyfikator użytkownika niepodpisany tym samym kluczem 17@ (Pełną listę poleceń i opcji można znaleźć w podręczniku systemowym.) @ Przykłady: -se -r Bob [plik] podpisanie i zaszyfrowanie kluczem Boba --clearsign [plik] podpisanie z pozostawieniem czytelności dokumentu --detach-sign [plik] podpisanie z umieszczeniem podpisu w osobnym pliku --list-keys [nazwy] pokazanie kluczy --fingerprint [nazwy] pokazanie odcisków kluczy @ Opcje: @Polecenia: wymuszono opakowanie ASCII wyniku. Polecenia administracyjne są dozwolone Polecenia administracyjne są niedozwolone Polecenie dostępne tylko w trybie administracyjnym Jeśli ma zostać wygenerowany podklucz, należy odpowiedzieć "tak".Aby skasować podklucz należy odpowiedzieć "tak".Jeśli można nadpisać ten plik, należy odpowiedzieć ,,tak''Aby skasować ten identyfikator użytkownika (co wiąże się ze utratą wszystkich jego poświadczeń!) należy odpowiedzieć ,,tak''.Odpowiedz ,,tak'', aby podpisać WSZYSTKIE identyfikatory użytkownikaOdpowiedz "tak" lub "nie".Czy jesteś naprawdę pewien że chcesz podpisać ten klucz swoim kluczem ,,%s'' (%s) Czy dalej chcesz je dodać? (t/N) Czy dalej chcesz go unieważnić? (t/N) Czy na pewno chcesz podpisać? (t/N) Czy na pewno chcesz wyznaczyć ten klucz jako unieważniający? (t/N) Czy na pewno chcesz go usunąć? (t/N) Czy na pewno chcesz go zastąpić? (t/N) Czy na pewno chcesz go użyć? (t/N) UwierzytelnianieNIEPOPRAWNY podpis złożony przez ,,%s''Odcisk klucza Centrum Certyfikacji: Błąd sumy CRC; %06lX - %06lX Nie można sprawdzić podpisu: %s Tego klucza nie można modyfikować: %s. Nie można otworzyć ,,%s'': %s AnulujImię właściciela karty: Nazwisko właściciela karty: Certyfikaty prowadzące do ostatecznie zaufanego klucza: PoświadczanieZmienić (I)mię/nazwisko, (K)omentarz, adres (E)mail, przejść (D)alej, czy (W)yjść z programu? Zmienić (I)mię/nazwisko, (K)omentarz, adres (E)mail, czy (W)yjść? Przestawienie wszystkich (lub tylko wybranych) identyfikatorów na aktualne ustawienia. Data na odpowiednich podpisach zostanie przesunięta do przodu o jedną sekundę. Zmiana daty ważności podklucza. Zmiana daty ważności głównego klucza. Symetryczne: Polecenie oczekuje nazwy pliku jako argumentu. Komentarz: Kompresji: Stworzyć certyfikat unieważnienia tego klucza? (t/N) Utworzyć certyfikat unieważnienia tego klucza? (t/N) Stworzyć certyfikat unieważnienia tego podpisu? (t/N) Krytyczny wybrany serwer kluczy: Krytyczne adnotacje podpisu: Krytyczny regulamin podpisu: Dozwolone działania: Obecnie wybrani adresaci: Klucz DSA %s wymaga skrótu %u-bitowego lub dłuższego Klucz DSA %s używa niewystarczająco bezpiecznego skrótu o długości %u bitów DSA wymaga aby skrót miał długość będącą wielokrotnością 8 bitów Usunąć ten poprawny podpis? (t/N/w) Usunąć ten niepoprawny podpis? (t/N/w) Usunąć ten klucz ze zbioru? (t/N) Usunąć ten nieznany podpis? (t/N/w) %d podpis usunięty. %d podpisów usuniętych. Podpis oddzielony od danych. Skrót: Zdjęcie w formacie %s, rozmiar %ld bajtów, klucz %s (id %d). Czy na pewno chcesz usunąć wybrane klucze? (t/N) Czy na pewno chcesz usunąć ten klucz? (t/N) Czy na pewno chcesz to zrobić? (t/N) Czy na pewno chcesz unieważnić cały klucz? (t/N) Czy na pewno chcesz unieważnić wybrane podklucze? (t/N) Czy na pewno chcesz unieważnić ten podklucz? (t/N>) Czy na pewno chcesz obdarzyć ten klucz absolutnym zaufaniem? (t/N) Czy chcesz zastąpić przeterminowany podpis nowym? (t/N) Czy chcesz zamienić go na pełny, publiczny, eksportowalny podpis? (t/N) Czy chcesz zamienić go na podpis OpenPGP? (t/N) Czy na pewno chcesz to podpisać ponownie? (t/N) Czy chcesz żeby ważność Twojego podpisu wygasała w tej samej chwili? (T/n) BŁĄD: Adres poczty elektronicznej: SzyfrowanieWprowadź PIN administracyjny: Nazwa pliku ze zdjęciem w formacie JPEG: Wprowadź nowy PIN administracyjny: Wprowadź nowy PIN: Wprowadź PIN: Wprowadź opis (nieobowiązkowy) i zakończ go pustą linią: Nazwa plikuPodaj numer opcji, (N)Dalej lub (Q)Wyjście > Hasło Podaj hasło: Nazwa właściciela klucza.Wprowadź nowe długie, skomplikowane hasło dla tego klucza tajnego. Adnotacje podpisu: Wprowadź żądaną wartość (jak w znaku zachęty). Można tu podać datę w formacie ISO (RRRR-MM-DD) ale nie da to właściwej obsługi błędów - system próbuje interpretować podaną wartość jako okres.Podaj rozmiar kluczaPodaj adresatów tej wiadomości.Podaj identyfikator klucza unieważniającego: Podaj URL preferowanego serwera kluczy: Błąd tworzenia klucza zapasowego z ,,%s'': %s Błąd: pełne dane (imię + nazwisko) zbyt długie (limit %d znaków). Błąd: podwójne spacje są niedozwolone. Błąd: dane autoryzacyjne zbyt długie (maksymalnie %d znaków). Błąd: dozwolone są tylko znaki z zestawu ASCII. Błąd: prywatne dane DO zbyt długie (maksymalnie %d znaków). Błąd: nie można użyć znaku ,,<''. Błąd: uszkodzona baza zaufania. Błąd: URL zbyt długi (maksymalnie %d znaków). Błąd: niewłaściwe znaki w tekście ustawień. Błąd: niewłaściwy format odcisku klucza. Błąd: niepoprawna długość tekstu ustawień. Błąd: niepoprawna odpowiedź. Przeterminowany podpis złożony przez ,,%s''Ustawienia: Plik ,,%s'' już istnieje. Podaj nazwę pliku którego dotyczy ten podpisWpisz tutaj swoją wiadomość ... Poprawny podpis złożony przez ,,%s''Skrótów: Podpowiedź: wybierz identyfikatory użytkownika do podpisania. Wciśnij ENTER kiedy karta jest gotowa lub wpisz ,,a'' aby anulować: Jak dokładnie została przez Ciebie sprawdzona tożsamość tej osoby? Jeśli nie wiesz co odpowiedzieć, podaj ,,0''. Jak bardzo ufasz, że ten klucz należy do tej osoby? Tożsamość użytkownika została sprawdzona pobieżnie. Tożsamość użytkownika została dokładnie sprawdzona. Tożsamość użytkownika nie została w ogóle sprawdzona. szyfr IDEA nie jest dostępny, próba użycia %s zamiast niego Jeśli to nie działa, należy poradzić się instrukcji Jeśli chcesz, możesz podać opis powodu wystawienia certyfikatu unieważnienia. Opis powinien być zwięzły. Pusta linia kończy wprowadzanie tekstu. Jeśli mimo wszystko chcesz użyć tego klucza, klucza, co do którego nie ma żadnej pewności do kogo należy, odpowiedz ,,tak''.Używanie tego samego klucza do podpisywania i szyfrowania nie jest dobrym pomysłem. Można tak postępować tylko w niektórych zastosowaniach. Proszę się najpierw skonsultować z ekspertem od bezpieczeństwa. Niewłaściwy znak w komentarzu Niewłaściwy znak w imieniu lub nazwisku Niepoprawna komenda (spróbuj ,,help'') Opcja --allow-non-selfsigned-uid wymusiła uznanie za poprawny klucza %s Niepoprawne hasło; proszę spróbować ponownieNiewłaściwy wybór. Czy wszystko się zgadza? (t/N) Informacje poprawne? (t/N) Czy zdjęcie jest w porządku? (t/N/w) NIE MA pewności, czy klucz należy do osoby wymienionej w identyfikatorze. Jeśli nie masz co do tego żadnych wątpliwości i *naprawdę* wiesz co robisz, możesz odpowiedzieć ,,tak'' na następne pytanie. Te wartości użytkownik przydziela wg swojego uznania; nie będą nigdy eksportowane poza ten system. Potrzebne są one do zbudowania sieci zaufania, i nie ma to nic wspólnego z tworzoną automatycznie siecią certyfikatów.Klucz %s został już unieważniony Klucz dostępny w: Klucz bez daty wygasania Klucz wygasa %s Procedura generacji klucza została anulowana. Generacja klucza nie powiodła się: %s Klucz został skompromitowanyAtrapa klucza lub szkielet klucza z karty - brak hasła które można by zmienić. klucz nie jest już używanyKlucz jest chroniony. Klucz unieważniony.Klucz został zastąpionyOkres ważności klucza ? (0) Klucz nie został zmieniony więc zapis zmian nie jest konieczny. Zbiór kluczyKlucz nie będzie modyfikowany na serwerzeUstawienia języka: Dane do autoryzacji (nazwa konta): Utworzyć poza kartą kopię zapasową klucza? (T/n) N aby zmienić nazwę (nazwisko). C aby zmienić komentarz.< E aby zmienić adres e-mail. O aby kontynuować tworzenie klucza. Q aby zrezygnować z tworzenia klucza.UWAGA: %s nie jest dostępny w tej wersji UWAGA: %s nie jest do normalnego użytku! UWAGA: Nie ma gwarancji, że karta obsługuje żądany rozmiar. Jeśli tworzenie klucza nie powiedzie się, proszę sprawdzić dokumentację karty, aby poznać dozwolone rozmiary. UWAGA: Ta opcja nie jest dostępna w %s UWAGA: Ten klucz nie jest chroniony! UWAGA: numer seryjny klucza nie pasuje do numeru karty UWAGA: kopia klucza z karty została zapisana w ,,%s'' UWAGA: tworzenie podkluczy dla kluczy wersji 3 jest niezgodne z OpenPGP. UWAGA: klucz został unieważnionyUWAGA: klucze są już zapisane na karcie! UWAGA: brak domyślnego pliku opcji ,,%s'' UWAGA: stary domyślny plik opcji ,,%s'' został zignorowany UWAGA: klucz główny jest dostępny z karty UWAGA: klucz jest dostępny z karty UWAGA: ważność klucza tajnego %s wygasła %s UWAGA: nadawca zaznaczył że wiadomość nie powinna być zapisywana UWAGA: klucz podpisujący %s przekroczył datę ważności %s UWAGA: prosty tryb S2K (0) jest stanowczo odradzany UWAGA: nie można zapisywać bazy zaufania Imię lub nazwisko nie może zaczynać się od cyfry Imię i nazwisko muszą mieć co najmniej 5 znaków długości. Do wykonania tej operacji potrzebny jest klucz tajny. IiKkEeDdWwBrak odpowiadającego podpisu w zbiorze kluczy prywatnych Pomoc niedostępnaBrak pomocy o ,,%s''Nie podano przyczynyBrak podklucza o numerze %d Brak takiego identyfikatora użytkownika. Brak wartości zaufania dla: Brak identyfikatora użytkownika ze skrótem %s Brak identyfikatora użytkownika o numerze %d. To nie jest poprawny adres poczty elektronicznej Nie podpisane przez ciebie. Adnotacje: Ten klucz nie może być wykorzystany do szyfrowania. Komendą "--edit-key" można dodać do niego podklucz szyfrujący. Uwaga: adres sygnatariusza ,,%s'' nie zgadza się z DNS Uwaga: Ten klucz został wyłączony z użytku Uwaga: ważność tego klucza wygasła! Uwaga: sprawdzony adres sygnatariusza to ,,%s'' Nic nie zostało usunięte. Nie ma nic do podpisania kluczem %s Karta OpenPGP numer %s brak karty w standardzie OpenPGP: %s Nadpisać? (t/N) Nie można ustawić poziomu zaufania do właściciela klucza w czasie używania bazy zaufania dostarczonej przez użytkownika. wywołanie zwrotne PIN zwróciło błąd: %s PIN CHV%d zbyt krótki; minimalna długość to %d PIN nie został poprawnie powtórzony; jeszcze jedna próbaNajpierw trzeba poprawić ten błąd Zastanów się jak bardzo ufasz temu użytkownikowi w kwestii sprawdzania tożsamości innych użytkowników (czy sprawdzi on odciski kluczy pobrane z różnych źródeł, dokumenty potwierdzające tożsamość, itd.). Nie należy umieszczać adresu poczty elektronicznej w polu nazwiska czy komentarza. Podaj domenę do której ma ograniczać się podpis zaufania, lub Enter jeśli nie ma być ograniczeń. Nazwa pliku. Naciśnięcie ENTER potwierdzi nazwę domyślną (w nawiasach).Proszę wprowadzić opcjonalny komentarzNazwa pliku danych: Podaj głębokość podpisu zaufania. Głębokość większa niż 1 pozwala w twoim imieniu składać podpisy kluczem, który teraz podpisujesz. Podaj długie, skomplikowane hasło, np. całe zdanie. Proszę usunąć to naruszenie zasad bezpieczeństwa Proszę włożyć kartę do czytnika i nacisnąć ENTER, lub wprowadzić ,,a'' aby anulować operację: Uwaga: fabryczne ustawienia PIN-ów: PIN = ,,%s'' PIN administacyjny = ,,%s'' Należy je zmienić komendą --change--pin Pokazana wartość wiarygodności klucza może być niepoprawna, dopóki program nie zostanie uruchomiony ponownie. Proszę usunąć znacznik wyboru z kluczy prywatnych. Proszę zmienić kartę w czytniku na kartę o numerze %.*s. Proszę powtórzyć hasło, aby upewnić się że nie było pomyłki.Błędy prosimy zgłaszać na adres . Proszę wybrać tylko jeden podklucz. Proszę wybrać dokładnie jeden identyfikator użytkownika. Proszę wybrać powód unieważnienia: Proszę wybrać rodzaj klucza: Proszę wybrać rodzaj klucza: Proszę wybrać gdzie zapisać klucz: Okres ważności klucza. 0 = klucz nie ma określonego terminu ważności = termin ważności klucza upływa za n dni w = termin ważności klucza upływa za n tygodni m = termin ważności klucza upływa za n miesięcy y = termin ważności klucza upływa za n lat Okres ważności podpisu. 0 = klucz nie ma określonego terminu ważności = termin ważności podpisu upływa za n dni w = termin ważności podpisu upływa za n tygodni m = termin ważności podpisu upływa za n miesięcy y = termin ważności podpisu upływa za n lat Najpierw trzeba użyć polecenia "przeł". Proszę czekać, prowadzona jest zbiórka losowości. Żeby się nie nudzić, możesz popracować w systemie, przy okazji dostarczy to systemowi więcej entropii do tworzenia liczb losowych. Moźliwe wykorzystanie klucza %s: Domyślny serwer kluczy: Odcisk klucza głównego:Prywatne dane DO: Kontynuować? (t/N) Asymetryczne: Klucz publiczny wyłączony z użycia. Wyjść bez zapisania zmian? (t/N) brak współczynnika RSA lub nie jest długości %d bitów brak liczby pierwszej %s dla RSA lub nie jest długości %d bitów brak publicznego wykładnika RSA lub jest dłuższy niż %d bitów Imię i nazwisko: Na pewno utworzyć certyfikaty unieważnienia ? (t/N) Czy na pewno utworzyć? (t/N) Na pewno usunąć ten podpis klucza nim samym? (t/N) Czy na pewno przenieść klucz główny? (t/N) Czy na pewno usunąć wszystkie wybrane identyfikatory użytkownika? (t/N) Czy na pewno usunąć ten identyfikator użytkownika? (t/N) Czy na pewno unieważnić wszystkie wybrane identyfikatory użytkownika? (t/N) Czy na pewno unieważnić ten identyfikator użytkownika? (t/N) Na pewno podpisać wszystkie identyfikatory użytkownika na tym kluczu? (t/N) Czy na pewno podpisać? (t/N) Czy na pewno zaktualizować ustawienia dla wybranych identyfikatorów? (t/N) Czy na pewno uaktualnić ustawienia? (t/N) Powód unieważnienia: %s Powtórzone hasło Powtórz hasło: Powtórz PIN: Zastąpić istniejący klucz? (t/N) Zastąpić istniejące klucze? (t/N) Żądana długość klucza to %u bitów. Kod resetujący zbyt krótki; minimalna długość to %d kod resetujący nie jest już (lub w ogóle) dostępny Certyfikat unieważnienia został utworzony. Certyfikat unieważnienia został utworzony. Należy przenieść go na nośnik który można bezpiecznie ukryć; jeśli źli ludzie dostaną ten certyfikat w swoje ręce, mogą użyć go do uczynienia klucza nieużytecznym. Niezłym pomysłem jest wydrukowanie certyfikatu unieważnienia i schowanie wydruku w bezpiecznym miejscu, na wypadek gdyby nośnik z certyfikatem stał się nieczytelny. Ale należy zachować ostrożność, systemy drukowania różnych komputerów mogą zachować treść wydruku i udostępnić ją osobom nieupoważnionym. Zapisać zmiany? (t/N) Dostępny jest klucz tajny. Część tajna głównego klucza jest niedostępna. Części tajne głównego klucza znajdują się na karcie. Wybierz algorytm. DSA (nazywany też DSS) to Algorytm Podpisu Cyfrowego i może być używany tylko do podpisywania. ElGamal jest algorytmem tylko do szyfrowania. RSA może być używany do szyfrowania i podpisywania. Pierwszy (główny) klucz zawsze musi być kluczem którym można podpisywać.Ustawienie opcji klucza na: Płeć: M - mężczyzna, F - kobieta, lub spacja: PodpisywanieCzy na pewno podpisać? (t/N) Podpis bez daty wygasania Ważność podpisu wygasła %s. Ważność podpisu wygasa %s. Ważność podpisu wygasa %s Okres ważności podpisu? (%s) Podpis złożono %s Podpisano w %s kluczem %s o numerze %s Adnotacje podpisu: Regulamin podpisu: PpSsUuKkPodklucz %s został już unieważniony Składnia: gpg [opcje] [pliki] podpisywanie, sprawdzanie podpisów, szyfrowanie, deszyfrowanie domyślnie wykonywana operacja zależy od danych wejściowych Składnia: gpgv [opcje] [pliki] Sprawdzanie podpisów ze znanych zaufanych kluczy Karta zostanie przekonfigurowana do tworzenia klucza %u-bitowego Minimalny poziom zaufania do tego klucza wynosi %s Używany generator liczb losowych jest atrapą wprowadzoną dla umożliwienia normalnej kompilacji - nie jest kryptograficznie bezpieczny! JAKIEKOLWIEK DANE GENEROWANE PRZEZ TEN PROGRAM NIE NADAJĄ SIĘ DO NORMALNEGO UŻYTKU I NIE ZAPEWNIAJĄ BEZPIECZEŃSTWA!! Podpis klucza nim samym na ,,%s'' jest podpisem złożonym przez PGP 2.x. Ten podpis jest niepoprawny. Można usunąć go ze zbioru kluczy.Podpis zostanie oznaczony jako prywatny (nieeksportowalny). Podpis zostanie oznaczony jako nie podlegający unieważnieniu. Klucze PGP 2.x nie zawierają opisu ustawień. Bardzo duży plik JPEG (%d bajtów)! To polecenie nie jest dostępne w trybie %s. To polecenie jest dostępne tylko dla kart w wersji 2 To jest klucz tajny! - czy na pewno go usunąć? (t/N) To jest podpis wiążący identyfikator użytkownika z kluczem. Nie należy go usuwać - GnuPG może nie móc posługiwać się dalej kluczem bez takiego podpisu. Bezpiecznie można go usunąć tylko jeśli ten podpis klucza nim samym z jakichś przyczyn nie jest poprawny, i klucz jest drugi raz podpisany w ten sam sposób.To jest poprawny podpis na tym kluczu; normalnie nie należy go usuwać ponieważ może być ważny dla zestawienia połączenia zaufania do klucza którym go złożono lub do innego klucza nim poświadczonego.Ten klucz należy do nas Ten klucz został wyłączony z użytkuData ważności tego klucza upłynęła!Ważność tego klucza wygasa %s. Ten klucz nie jest chroniony. Klucz może zostać unieważniony przez %s kluczem %sTen klucz prawdopodobnie należy do tej osoby. Klucz został unieważniony %s przez %s kluczem %s Ten podpis nie może zostać potwierdzony ponieważ nie ma odpowiadającego mu klucza publicznego. Należy odłożyć usunięcie tego podpisu do czasu, kiedy okaże się który klucz został użyty, ponieważ w momencie uzyskania tego klucza może pojawić się ścieżka zaufania pomiędzy tym a innym, już poświadczonym kluczem.Ważność tego klucza wygasła %s. To będzie podpis klucza nim samym. To uczyni ten klucz nieużytecznym dla PGP 2.x. Zostanie unieważniony przez: Aby zbudować Sieć Zaufania, GnuPG potrzebuje znać klucze do których masz absolutne zaufanie. Zwykle są to klucze do których masz klucze tajne. Odpowiedz ,,tak'', jeśli chcesz określić ten klucz jako klucz do którego masz absolutne zaufanie. Ogółem przetworzonych kluczy: %lu URL źródła klucza publicznego: NieskompresowanyNieznany typ podpisu ,,%s'' Wywołanie: gpg [opcje] [pliki] (-h podaje pomoc)Wywołanie: gpgv [opcje] [pliki] (-h podaje pomoc)Użyć tego klucza pomimo to? (t/N) Identyfikator użytkownika ,,%s'' został upakowany: %s Identyfikator użytkownika ,,%s'' przekroczył swój termin ważności.Identyfikator ,,%s'' nie jest podpisany swoim kluczem.Identyfikator użytkownika ,,%s'' został unieważniony.Można podpisać identyfikator ,,%s''. Identyfikator użytkownika ,,%s'': %d podpis usunięty Identyfikator użytkownika ,,%s'': %d podpisy(ów) usunięte(ych) Identyfikator użytkownika ,,%s'': jest już oczyszczony Identyfikator użytkownika ,,%s'': już jest upakowany Identyfikator użytkownika przestał być poprawnyOSTRZEŻENIE: OSTRZEŻENIE: ,,%s'' jest przestarzałą komendą -- nie należy jej używać OSTRZEŻENIE: ,,%s'' jest przestarzałą opcją. OSTRZEŻENIE: %s powoduje obejście %s OSTRZEŻENIE: Istnieją dwa pliki z poufnymi informacjami. OSTRZEŻENIE: klucze Elgamala do podpisywania i szyfrowania są przestarzałe OSTRZEŻENIE: To jest klucz PGP wersji 2.x. Wyznaczenie mu klucza unieważniającego spowoduje, że niektóre wersje PGP przestaną go rozumieć. OSTRZEŻENIE: To jest klucz PGP wersji 2. Dodanie zdjęcia spowoduje, że niektóre wersje przestaną go rozumieć. OSTRZEŻENIE: Ten klucz został unieważniony kluczem unieważniającym! OSTRZEŻENIE: Ten klucz został unieważniony przez właściciela! OSTRZEŻENIE: Ten klucz nie jest poświadczony zaufanym podpisem! OSTRZEŻENIE: Tego klucza nie poświadczają wystarczająco zaufane podpisy! OSTRZEŻENIE: Ten podklucz został unieważniony przez właściciela! OSTRZEŻENIE: używany jest klucz nie obdarzony zaufaniem! OSTRZEŻENIE: NIE UFAMY temu kluczowi! OSTRZEŻENIE: Wykryto słaby klucz - należy ponownie zmienić hasło. OSTRZEŻENIE: plik ,,%s'' jest pusty OSTRZEŻENIE: identyfikator użytkownika podpisany za %d sekund (w przyszłości) OSTRZEŻENIE: nie można cofnąć wyznaczenia klucza jako unieważniającego! OSTRZEŻENIE: brak szyfru %s w ustawieniach odbiorcy OSTRZEŻENIE: algorytm skrótu %s jest przestarzały OSTRZEŻENIE: zaszyfrowana wiadomość była manipulowana! OSTRZEŻENIE: wymuszenie użycia kompresji %s (%d) kłóci się z ustawieniami adresata wymuszone użycie skrótu %s (%d) kłóci się z ustawieniami adresata OSTRZEŻENIE: wymuszenie użycia szyfru %s (%d) kłóci się z ustawieniami adresata OSTRZEŻENIE: niewłaściwy rozmiar pliku random_seed - nie zostanie użyty OSTRZEŻENIE: klucz %s zawiera ustawienia niedostępnych OSTRZEŻENIE: klucz %s mógł zostać unieważniony: zapytanie o unieważniający klucz %s w serwerze kluczy OSTRZEŻENIE: klucz %s mógł zostać unieważniony, brak klucza unieważniającego %s. OSTRZEŻENIE: program obsługi serwera kluczy pochodzi z innej wersji GnuPG (%s) OSTRZEŻENIE: opcja serwera ,,%s'' nie działa na tym systemie OSTRZEŻENIE: wiadomość była szyfrowana kluczem słabym szyfru symetrycznego. OSTRZEŻENIE: wiadomość nie była zabezpieczona przed manipulacją OSTRZEŻENIE: wielokrotne teksty jawne OSTRZEŻENIE: wielokrotne podpisy. Tylko pierwszy zostanie sprawdzony. OSTRZEŻENIE: żaden identyfikator użytkownika nie został oznaczony explicite jako główny. Wykonanie tego polecenie może więc spowodować wyświetlanie innego identyfikatora jako domyślnego głównego. UWAGA: to nie jest podpis oddzielony; plik ,,%s'' NIE został sprawdzony! OSTRZEŻENIE: nic nie zostało wyeksportowane! OSTRZEŻENIE: opcje w ,,%s'' nie są jeszcze uwzględnione. OSTRZEŻENIE: symetrycznie zaszyfrowany klucz sesyjny może nie być bezpieczny OSTRZEŻENIE: program może stworzyć plik zrzutu pamięci! OSTRZEŻENIE: podano adresatów (-r) w działaniu które ich nie dotyczy OSTRZEŻENIE: klucz prywatny %s nie ma prostej sumy kontrolnej SK. OSTRZEŻENIE: konflikt skrótów podpisów w wiadomości OSTRZEŻENIE: podklucz podpisujący %s jest niepoprawnie skrośnie podpisany OSTRZEŻENIE: podklucz podpisujący %s nie jest skrośnie podpisany OSTRZEŻENIE: podpis nie zostanie oznaczony jako prywatny (nieeksportowalny). OSTRZEŻENIE: podpis nie zostanie oznaczony jako nie podlegający unieważnieniu. OSTRZEŻENIE: ten klucz mógł zostać unieważniony (brak klucza unieważniającego aby to sprawdzić) OSTRZEŻENIE: nie można rozwinąć %% w URL adnotacji (jest zbyt długi). Użyty zostanie nie rozwinięty. OSTRZEŻENIE: nie można rozwinąć znaczników %% w URL regulaminu (jest zbyt długi). Użyty zostanie nie rozwinięty. OSTRZEŻENIE: nie można rozwinąć znaczników %% w URL regulaminu (jest zbyt długi). Użyty zostanie nie rozwinięty. OSTRZEŻENIE: nie można pobrać URI %s: %s OSTRZEŻENIE: niezrozumiały URI %s OSTRZEŻENIE: nie można odświeżyć klucza %s przez %s: %s OSTRZEŻENIE: nie można skasować tymczasowego katalogu ,,%s'': %s. OSTRZEŻENIE: nie można skasować pliku tymczasowego (%s) ,,%s'': %s. OSTRZEŻENIE: niebezpieczne prawa własności do katalogu zawierającego plik konfiguracji ,,%s'' OSTRZEŻENIE: niebezpieczne prawa własności do katalogu nadrzędnego do domowego ,,%s'' OSTRZEŻENIE: niebezpieczne prawa dostępu do katalogu zawierającego plik konfiguracji ,,%s'' OSTRZEŻENIE: niebezpieczne prawa dostępu do katalogu nadrzędnego do domowego ,,%s'' OSTRZEŻENIE: niebezpieczne prawa własności do pliku konfiguracji ,,%s''. OSTRZEŻENIE: niebezpieczne prawa własności katalogu domowego ,,%s''. OSTRZEŻENIE: niebezpieczne prawa dostępu do pliku konfiguracji ,,%s''. OSTRZEŻENIE: niebezpieczne prawa dostępu do katalogu domowego ,,%s'' OSTRZEŻENIE: używany jest eksperymentalny algorytm szyfrujący %s OSTRZEŻENIE: używany jest eksperymentalny algorytm skrótu %s OSTRZEŻENIE: używany jest eksperymentalny algorytm asymetryczny %s OSTRZEŻENIE: nie można zabezpieczyć używanej pamięci! OSTRZEŻENIE: używany generator liczb losowych nie jest kryptograficznie bezpieczny!! Musimy wygenerować dużo losowych bajtów. Dobrym pomysłem aby pomóc komputerowi podczas generowania liczb pierwszych jest wykonywanie w tym czasie innych działań (pisanie na klawiaturze, poruszanie myszką, odwołanie się do dysków); dzięki temu generator liczb losowych ma możliwość zebrania odpowiedniej ilości entropii. Jakiej długości klucz do uwierzytelniania wygenerować? (%u) Jakiej długości klucz do szyfrowania wygenerować? (%u) Jakiej długości klucz do podpisywania wygenerować? (%u) Jakiej długości podklucz wygenerować? (%u) Jakiej długości klucz wygenerować? (%u) Przy podpisywaniu identyfikatora użytkownika na kluczu należy sprawdzić, czy tożsamość użytkownika odpowiada temu, co jest wpisane w identyfikatorze. Innym użytkownikom przyda się informacja, jak dogłębnie zostało to przez Ciebie sprawdzone. "0" oznacza, że nie podajesz żadnych informacji na temat tego jak dogłębnie tożsamość użytkownika została przez Ciebie potwierdzona. "1" oznacza, że masz przekonanie, że tożsamość użytkownika odpowiada identyfikatorowi klucza, ale nie było możliwości sprawdzenia tego. Taka sytuacja występuje też kiedy podpisujesz identyfikator będący pseudonimem. "2" oznacza, że tożsamość użytkownika została przez Ciebie potwierdzona pobieżnie - sprawdziliście odcisk klucza, sprawdziłaś/eś tożsamość na okazanym dokumencie ze zdjęciem. "3" to dogłębna weryfikacja tożsamości. Na przykład sprawdzenie odcisku klucza, sprawdzenie tożsamości z okazanego oficjalnego dokumentu ze zdjęciem (np paszportu) i weryfikacja poprawności adresu poczty elektronicznej przez wymianę poczty z tym adresem. Zauważ, że podane powyżej przykłady dla poziomów "2" i "3" to *tylko* przykłady. Do Ciebie należy decyzja co oznacza "pobieżny" i "dogłębny" w kontekście poświadczania i podpisywania kluczy. Jeśli nie wiesz co odpowiedzieć, podaj "0".Czy na pewno chcesz unieważnić te podpisy: Używasz zestawu znaków %s. Nie można zmienić daty ważności klucza w wersji 3. Nie możesz usunąć ostatniego identyfikatora użytkownika! Nie został podany identyfikatora użytkownika (np. za pomocą ,,-r'') Nie chcesz hasła - to *zły* pomysł! Nie chcesz podać hasła - to *zły* pomysł! W każdej chwili możesz ustawić hasło używając tego programu i opcji "--edit-key". Te identyfikatory klucza %s są podpisane przez Ciebie: Do klucza dla PGP 2.x nie można wyznaczyć klucza unieważniającego. Do klucza dla PGP 2.x nie można dodać zdjęcia. W trybie --pgp2 nie można podpisywać kluczy PGP 2.x podpisami OpenPGP. Można próbować odtworzyć bazę zaufania przy użyciu poleceń: Musisz wybrać co najmniej jeden klucz. Musisz wybrać co najmniej jeden identyfikator użytkownika. Musisz wybrać dokładnie jeden klucz. Musisz podać długie, skomplikowane hasło aby ochronić swój klucz tajny. Musisz podać hasło aby odbezpieczyć klucz tajny użytkownika ,,%s'' Musisz podać hasło aby odbezpieczyć klucz tajny użytkownika: ,,%.*s''. Klucz o długości %u bitów, typ %s, numer %s, stworzony %s%s Twój identyfikator użytkownika będzie wyglądał tak: "%s" Nalezy podać powód unieważnienia klucza. W zależności od kontekstu można go wybrać z listy: "Klucz został skompromitowany" Masz powody uważać że twój klucz tajny dostał się w niepowołane ręce. "Klucz został zastąpiony" Klucz został zastąpiony nowym. "Klucz nie jest już używany" Klucz został wycofany z użycia. "Identyfikator użytkownika przestał być poprawny" Identyfikator użytkownika (najczęściej adres e-mail przestał być poprawny. Twój podpis na ,,%s'' przekroczył datę ważności. Twój podpis na ,,%s'' jest podpisem prywatnym (lokalnym). Twoja decyzja? Twój wybór? Twój wybór (,,?'' podaje więcej informacji): Twój system nie potrafi pokazać daty po roku 2038. Niemniej daty do roku 2106 będą poprawnie obsługiwane. [ pełny ][niezdefiniowany][ wygasły ][ unieważniony ][ nieznany ][brak identyfikatora użytkownika][nazwa pliku][ marginalny ][brak][unieważnienie][podpis klucza nim samym][ ostateczny ][niepewne],,%s'' już jest skompresowany ,,%s'' nie jest plikiem JPEG ,,%s'' nie jest zwykłym plikiem - zostaje pominięty ,,%s'' nie jest poprawną nazwą zestawu znaków ,,%s'' nie jest poprawnym długim numerem klucza ,,%s'' nie jest poprawną datą wygasania ważności podpisu klucz eksportowany nie będzie chroniony dostęp do komend administracyjnych nie jest skonfigurowany nie można zrobić ,,%s'' przy połączeniu protokołem ,,%s'' dodanie klucza do kartydodanie zdjęcia użytkownika do kluczawyznaczenie klucza unieważniającegododanie podkluczadodanie nowego identyfikatora użytkownikaniejednoznaczna opcja ,,%s'' adresat anonimowy; próba odszyfrowania kluczem %s ... nagłówek opakowania: opakowanie: %s przyjmując że dane zostały zaszyfrowane za pomocą %s podpis złożony kluczem %s uznany za nieważny z powodu nieznanego bitu krytycznego przyjęto obecność podpisanych danych w '%s' automatyczne pobieranie brakujących kluczy przy sprawdzaniu podpisówautomatycznie pobrano ,,%s'' za pomocą %s błąd MPIniepoprawny URIniepoprawny certyfikatniepoprawny kluczniepoprawne hasłoniepoprawny klucz publicznyniepoprawny klucz prywatnyniepoprawny podpismniej komunikatówbinarnywywołanie funkcji build_packet nie powiodło się: %s aAbuforowanie zbioru kluczy ,,%s'' nie ma dostępu do %s - niepoprawna karta OpenPGP? nie ma dostępu do ,,%s'': %s nie można zamknąć ,,%s'': %s nie można się połączyć z ,,%s'': %s nie można utworzyć ,,%s'': %s nie można utworzyć kopii zapasowej ,,%s'': %s nie można utworzyć katalogu ,,%s'': %s nie można utworzyć blokady ,,%s'' nie można wyłączyć zrzutów pamięci: %s nie działa w trybie wsadowym bez opcji ,,--yes'' nie działa w trybie wsadowym nie można wygenerować liczby pierwszej o pbits=%u qbits=%u nie można wygenerować liczby pierwszej krótszej od %d bitów nie można obsłużyć tego algorytmu klucza publicznego: %d nie można obsłużyć linii tekstu dłuższej niż %d znaków nie można obsłużyć niejednoznacznych danych podpisu nie można zablokować ,,%s'' nie można zablokować ,,%s'': %s nie można otworzyć ,,%s'' nie można otworzyć ,,%s'': %s nie można otworzyć podpisanego pliku ,,%s'' otwarcie zbioru kluczy jest niemożliwepytanie o hasło nie działa w trybie wsadowym nie można odczytać ,,%s'': %s nie można sprawdzić ,,%s'': %s ustawiony tryb S2K nie pozwala użyć pakietu ESK dla szyfru symetrycznego nie można zapisać ,,%s'': %s anulowaneanulowano przez użytkownika anuluj|Anulujklucza PGP 2.x nie można wyznaczyć jako unieważniającego brak możliwości generacji dobrego klucza dla szyfru symetrycznego; operacja była powtarzana %d razy! karta nie obsługuje algorytmu skrótu %s karta jest nieodwracalnie zablokowana! czytnik niedostępny numer karty: zmiana URL-a kluczazmiana odcisku centrum certyfikacjizmiana PIN kartyzmiana nazwiska właściciela kartyzmiana płci właściciela kartyzmiana danych na karciezmiana daty wygaśnięcia ważności klucza lub wybranych podkluczyzmiana ustawień językazmiana nazwy kontazmiana zaufania właścicielazmiana hasła kluczasprawdzenie podpisówsprawdzenie złożonego podpisu nie powiodło się: %s sprawdzanie bazy zaufania błąd sumy kontrolnejalgorytm szyfrujący %d%s jest nieznany lub został wyłączony brak dwukropkausuwanie nieużytecznych identyfikatorów i wszystkich podkluczyusuwanie nieużytecznych identyfikatorów i podkluczywartość completes-needed musi być większa od 0 sprzeczne polecenia niezrozumiały URI serwera kluczy tworzenie odpowiadającego klucza publicznego przy imporcie klucza tajnegoopakowanie ASCII pliku wynikowegoutworzony: %sbrak znacznika czasu utworzenia dane nie zostały zapisane; aby to zrobić, należy użyć opcji "--output" zdjęcie opakowania ASCII nie powiodło się: %s odszyfrowywanie danych (domyślne)błąd odszyfrowywania: %s odszyfrowanie poprawne usunięcie wybranych podkluczyusunięcie wybranych identyfikatorówusunięcie podpisów z wybranych identyfikatorów użytkownikausunięcie bloku klucza nie powiodło się: %s głębokość: %d ważnych: %3d podpisanych %3d zaufanych %d-, %dq, %dn, %dm, %df, %du katalog ,,%s'' utworzony wyłączenie klucza z użyciawyłączoneokazywanie zdjęć w liście kluczyokazywanie zdjęć podczas sprawdzania podpisubez czyszczenia wartości zaufania właściciela przy imporciebez kasowania plików tymczasowych po użyciupozostawienie bez zmianbez uaktualniania bazy zaufania po imporciepodnoszenie zaufania do podpisów na podstawie danych PKAwłączenie klucza do użyciaopakowywanie ASCII nie powiodło się: %s szyfrowanie danychzaszyfrowane za pomocą %lu haseł zaszyfrowano kluczem %s o numerze %s zaszyfrowano %u-bitowym kluczem %s, numer %s, stworzonym %s zaszyfrowane jednym hasłem dane zaszyfrowano nieznanym algorytmem numer %d szyfrowanie wiadomości w trybie --pgp2 wymaga modułu szyfru IDEA szyfrowanie tylko szyfrem symetrycznymbłąd przydzielania pamięci: %s błąd podczas zmiany rozmiaru klucza %d na %u bitów: %s błąd tworzenia `%s': %s błąd tworzenia zbioru kluczy `%s': %s błąd podczas tworzenia hasła: %s błąd podczas szukania wartości zaufania ,,%s'': %s błąd przy pobieraniu opisu klucza: %s błąd podczas pobierania PIN: %s błąd w ,,%s'': %s błąd w linii kończącej błąd odczytu ,,%s'': %s błąd odczytu danych aplikacji karty błąd odczytu DO odcisku błąd odczytu bloku kluczy: %s błąd odczytu bloku klucza tajnego ,,%s'': %s błąd przy pobieraniu statusu CHV z karty błąd zapisu ,,%s'': %s błąd zapisu klucza na karcie: %s błąd zapisu zbioru kluczy ,,%s'': %s błąd podczas zapisu zbioru kluczy publicznych ,,%s'': %s błąd podczas zapisu zbioru kluczy tajnych ,,%s'': %s istniejący klucz zostanie zastąpiony wygasływygasł: %swygasa: %seksport specjalnych identyfikatorów (zwykle zdjęć)eksport kluczy do plikueksport kluczy do serwera kluczyeksport kluczy unieważniających, oznaczonych jako ,,wrażliwe''eksport podpisów oznaczonych jako lokalneeksport kluczy tajnych jest niedozwolony ta kompilacja nie obsługuje zewnętrznych programów do komunikacji z serwerami nieszczelne uprawnienia ustawień - wołanie zewnętrznych programów wyłączone inicjowanie Bazy Zaufania nie powiodło się: %s nie powiodła się odbudowa bufora bazy: %s nie można zapisać daty utworzenia: %s nie można zapisać odcisku: %s zapis klucza nie powiódł sie: %s zdejmowanie ochrony z klucza nie powiodło się: %s nie udało się użyć domyślnego PIN-u jako %s: %s - wyłączanie dalszego domyślnego użycia kobietapobranie klucza z URL-a na karciebłąd przy zamykaniu plikubłąd przy tworzeniu plikubłąd przy usuwaniu plikuplik już istniejebłąd przy otwieraniu plikubłąd przy odczycie plikubłąd przy zmianie nazwy plikubłąd przy zapisie plikuodcisk na karcie nie pasuje do żądanego oznaczenie wybranego identyfikatora użytkownika jako głównegowymuszonewymuszone użycie szyfru %s (%d) kłóci się z ustawieniami adresata błąd fstat na ,,%s'' w %s: %s błąd fstat(%d) w %s: %s pełnybłąd ogólnytworzenie wiadomości zgodnych z PGP 2.xgeneracja nowej pary kluczytworzenie certyfikatu unieważnienia kluczatworzenie nowych kluczytworzenie klucza nie powiodło się tworzenie nowego klucza tworzenie przestarzałej 16-bitowej sumy kontrolnej dla ochrony klucza gpg-agent nie jest dostępny w tej sesji wersja %d protokołu agenta nie jest obsługiwana gpg/karta> uwzględnienie ustawienia PKA na kluczu przy jego pobieraniuuwzględnienie ustawienia serwera kluczy na kluczu przy jego pobieraniuiImMwWpPimport kluczy z serwera kluczywczytywanie podpisów oznaczonych jako lokalneimport/dołączenie kluczywczytywanie kluczy tajnych nie jest dozwolone włączenie unieważnionych kluczy do wyników wyszukiwaniauwzględnienie podkluczy przy wyszukiwaniu po numerze kluczalinia wejścia %u zbyt długa lub brak znaku LF linia dłuższa niż %d znaków niepoprawnyniepoprawny tryb S2K; musi mieć wartość 0, 1 lub 3 błędny argumentbłąd w opakowaniu ASCIIniepoprawny nagłówek opakowania: błąd opakowania: linia dłuższa niż %d znaków niepoprawna lista auto-key-locate niewłaściwy nagłówek dokumentu z podpisem na końcu niepoprawne oznaczenie linii minusami: niewłaściwe domyślne ustawienia niewłaściwy domyślny poziom sprawdzania; musi mieć wartość 0, 1, 2 lub 3 niepoprawne opcje eksportu kluczy niepoprawny odcisk kluczaniewłaściwy algorytm skrótu ,,%s'' niepoprawne opcje wczytania kluczy niepoprawny napis ,,%s'' w tekście ustawień błąd w zbiorze kluczyniepoprawne opcje serwera kluczy niepoprawny protokół dostępu do serwera kluczy (nasz %d != %d modułu) niepoprawne opcje listy kluczy niewłaściwy minimalny poziom sprawdzania; musi mieć wartość 0, 1, 2 lub 3 niepoprawny pakietniepoprawne długie hasłoniewłaściwe ustawienia szyfrów niewłaściwe ustawienia algorytmów kompresji niewłaściwe ustawienia skrótów niewłaściwy znak formatu radix64: %02X, został pominięty wykryto niepoprawny pakiet pierwotny w proc_tree() niepoprawna struktura karty OpenPGP (DO 0x93) niepoprawna wartość niepoprawne opcje sprawdzania sugerowana jest aktualizacja ustawień i ponowne rozgłoszenie klucza, brak klucza ,,%s'' w serwerze klucz ,,%s'' nie został odnaleziony: %s klucz %s nie ma identyfikatora użytkownika klucz %s został oznaczony jako obdarzony absolutnym zaufaniem. klucz %s jest wpisany więcej niż raz w bazie zaufania klucz %s został stworzony %lu sekundę w przyszłości (zaburzenia czasoprzestrzeni lub źle ustawiony zegar systemowy) klucz %s został stworzony %lu sekund w przyszłości (zaburzenia czasoprzestrzeni lub źle ustawiony zegar systemowy) klucz %s: ,,%s'' %d nowych podpisów klucz %s: ,,%s'' %d nowych podkluczy klucz %s: ,,%s'' %d nowych identyfikatorów użytkownika klucz %s: ,,%s'' %d podpis oczyszczony klucz %s: ,,%s'' %d podpisów oczyszczonych klucz %s: ,,%s'' %d identyfikator użytkownika oczyszczony klucz %s: ,,%s'' %d oczyszczonych identyfikatorów klucz %s: ,,%s'' 1 nowy podpis klucz %s: ,,%s'' 1 nowy podklucz klucz %s: ,,%s'' 1 nowy identyfikator użytkownika klucz %s: ,,%s'' bez zmian klucz %s: ,,%s'' dodano certyfikat unieważnienia klucz %s: ,,%s'' wczytano certyfikat unieważnienia klucz %s: %s klucz %s: klucz PGP 2.x - pominięty klucz %s: podklucz uszkodzony przez serwer PKS został naprawiony klucz %s: zaakceptowany jako klucz zaufany klucz %s: przyjęto identyfikator nie podpisany nim samym ,,%s'' klucz %s: ten klucz tajny już znajduje się w zbiorze klucz %s: brak oryginalnego bloku klucza; %s klucz %s: nie można odczytać oryginalnego bloku klucza; %s klucz %s: dodano bezpośredni podpis klucz %s: nie zgadza się z lokalną kopią key %s: dołączono powtórzony identyfikator użytkownika klucz %s: błędny podpis bezpośredni klucz %s: niepoprawny certyfikat unieważnienia: %s - odrzucony klucz %s: pominięto niepoprawny certyfikat unieważnienia: %s klucz %s: niepoprawny podpis własnym kluczem na identyfikatorze ,,%s'' klucz %s: niepoprawne dowiązanie podklucza klucz %s: nieoprawne unieważnienie podklucza klucz %s: pominięto - klucz właściwy znajduje się na karcie klucz %s: nowy klucz - pominięty klucz %s: brak klucza którego dotyczy certyfikat unieważnienia klucz %s: brak klucza publicznego dla zaufanego klucza - pominięty klucz %s: brak podklucza do dowiązania klucz %s: brak podklucza, którego dotyczy unieważnienie klucz %s: brak podklucza dowiązywanego podpisem klucz %s: brak podklucza, którego dotyczy unieważnienie klucz %s: brak identyfikatora użytkownika klucz %s: brak identyfikatora użytkownika do podpisu klucz %s: brak poprawnych identyfikatorów użytkownika klucz %s: podpis nieeksportowalny (klasy 0x%02X) - pominięty klucz %s: nie jest chroniony - pominięty klucz %s: klucz publiczny ,,%s'' wczytano do zbioru klucz %s: brak klucza publicznego: %s klucz %s: usunięto wielokrotne dowiązanie podklucza klucz %s: usunięto wielokrotne unieważnienie podklucza klucz %s: pominięto certyfikat unieważnienia umieszczony w niewłaściwym miejscu Klucz %s: klucz tajny wczytany do zbioru klucz %s: brak klucza tajnego: %s klucz %s: klucz tajny z ustawionym błędnym szyfrem %d - pominięty klucz %s: klucz tajny bez klucza jawnego - pominięty klucz %s: podklucz pominięty klucz %s: pominięto identyfikator użytkownika ,,%s'' klucz %s: pominięto podpis na podkluczu w niewłaściwym miejscu klucz %s: pominięto podpis nieoczekiwanej klasy (0x%02X) klucz %s: nie obsługiwany algorytm asymetryczny klucz %s: algorytm asymetryczny dla ,,%s'' nie jest obsługiwany klucz już istnieje eksport kluczy nie powiódł się: %s tworzenie klucza zakończone (trwało %d s) klucz został stworzony %lu sekundę w przyszłości (zaburzenia czasoprzestrzeni, lub źle ustawiony zegar systemowy) klucz został stworzony %lu sekund w przyszłości (zaburzenia czasoprzestrzeni, lub źle ustawiony zegar systemowy) klucz nie jest oznaczony jako niepewny - nie można go użyć z atrapą generatora liczb losowych! brak klucza w serwerze użycie klucza niemożliwe: %s blok klucza ,,%s'': %s zbiór kluczy ,,%s'' został utworzony błąd łączności z serwerem kluczy: %s serwer kluczy nie wysłał VERSION błąd serwera kluczybłąd serwera kluczy odbiór z serwera kluczy nie powiódł się: %s odświeżenie kluczy z serwera nie powiodło się: %s szukanie w serwerze kluczy nie powiodło się: %s wysyłka do serwera kluczy nie powiodła się: %s przekroczenie limitu czasu połączenia z serwerem kluczy niewłaściwa długość klucza; wykorzystano %u bitów rozmiar klucza zaokrąglony w górę do %u bitów zbyt długa liniawszystkie dostępne danelista kluczy ze sprawdzaniem podpisówlista kluczy i identyfikatorów użytkownikalista kluczylista kluczy i ich odciskówlista kluczy i podpisówustawienia (zaawansowane)rozbudowana lista ustawieńlista kluczy prywatnychzłożenie podpisu oddzielonego od dokumentunie traktować konfliktu datowników jako błęduwywołanie funkcji make_keysig_packet nie powiodło się: %s mężczyznabłąd formatu CRC zły format zmiennej środowiskowej GPG_AGENT_INFO błąd formatu identyfikatora użytkownikamarginalnywartość marginals-needed musi być większa od 1 wartość max-cert-depth musi mieścić się w zakresie od 1 do 255 menu zmiany lub odblokowania PINprzeniesienie kopii klucza na kartęprzeniesienie klucza na kartęprzenoszę podpis klucza na właściwe miejsce nNzagnieżdżone podpisy na końcu dokumentu błąd siecinigdynigdy nowy plik ustawień ,,%s'' został utworzony następne sprawdzanie bazy odbędzie się %s niew definicji grupy ,,%s'' brak znaku ,,='' brak kartybrak odpowiadającego klucza publicznego: %s brak danychbrak domyślnego zbioru kluczy tajnych: %s moduł gromadzenia entropii nie został wykryty brak programu obsługującego protokół ,,%s'' brak polecenia dla serwera kluczy! brak znanyk serwerów kluczy (użyj opcji --keyserver) sprawdzanie bazy jest niepotrzebne sprawdzanie bazy jest niepotrzebne przy modelu ,,%s'' aktualizacja bazy jest niepotrzebna przy modelu ,,%s'' brak ustawienia przeglądarki do zdjęć odwołania do zewnętrznych programów są wyłączone brak kluczy unieważniających dla ,,%s'' brak klucza tajnego brak prywatnego odpowiednika podklucza publicznego %s - zignorowany nie znaleziono podpisu brak podpisanych danych brak takiego identyfikatora użytkownikabrak absolutnie zaufanych kluczy nie odnaleziono poprawnych danych w formacie OpenPGP. brak poprawnych adresatów brak zapisywalnego zbioru kluczy: %s brak zapisywalnego zbioru kluczy publicznych: %s brak zapisywalnego zbioru kluczy tajnych: %s nie jest oddzielonym podpisem. nie jest kartą OpenPGPnie zaszyfrowanynie wymuszonenie został przetworzonynie jest obsługiwanyuwaga: plik random_seed jest pusty uwaga: plik random_seed nie jest uaktualniony oOOK, to my jesteśmy adresatem anonimowym. ok|OKstary, nie obsługiwany algorytm szyfrowania klucza sesyjnego podpis starego typu (PGP 2.x). tylko aktualizacja już znanych kluczybez zabezpieczenia pamięci nie można wykonać tej operacji plik opcji ,,%s'': %s pierwotna nazwa pliku='%.*s' informacja o zaufaniu dla właściciela klucza została wymazana brak wartości zaufaniahasło stworzone z użyciem nieznanego algorytmu skrótu %d hasło nie zostało poprawnie powtórzone; jeszcze jedna próbanależy uruchomić gpg z opcją ,,--check-trustdb'' proszę wprowadzić opcjonalny ale wysoce doradzany adres e-mailwięcej informacji można znaleźć w %s objaśnienie można przeczytać tutaj: http://www.gnupg.org/documentation/faqs.html w jej miejsce należy użyć ,,%s%s''" proszę czekać na stworzenie klucza... ustawienie %s powtarza się przedwczesny koniec pliku (w CRC) przedwczesny koniec pliku (w linii kończącej) przedwczesny koniec pliku (brak CRC) status kartyproblem podczas obróbki pakietu szyfrowego problem z agentem - zostaje wyłączony pytanie przed nadpisaniem plikówalgorytm ochrony %d%s nie jest obsługiwany skrót ochrony %d nie jest obsługiwany klucz publiczny i prywatny (tajny) zostały utworzone i podpisane. klucz publiczny %s jest o %lu sekundę młodszy od podpisu klucz publiczny %s jest o %lu sekund(y) młodszy od podpisu klucz publiczny %s nie odnaleziony: %s błąd odszyfrowywania kluczem publicznym: %s klucz publiczny nie pasuje do klucza prywatnego! dane zaszyfrowane kluczem publicznym: poprawny klucz sesyjny klucz publiczny jest %s brak klucza publicznegoklucz publiczny absolutnie zaufanego klucza %s nie odnaleziony wWwyjściewyjście z tego menuznak kodowania quoted-printable w opakowaniu ASCII - prawdopodobnie przekłamanie wprowadzone przez serwer pocztowy w celu uniknięcia potencjalnych problemów z niedopasowaniem algorytmów błąd odczytu w ,,%s'': %s odczyt z ,,%s'' odczyt opcji z ,,%s'' nie można odczytać klucza publicznego: %s czytam strumień standardowego wejścia powód unieważnienia: odświeżanie %d kluczy z %s odświeżanie klucza z %s odrzucony przez filtr importuusunięcie jak najwięcej części klucza po imporcieusunięcie jak najwięcej części klucza w trakcie eksportuusunięcie klucza ze zbioru kluczy publicznychusunięcie klucza ze zbioru kluczy prywatnychzdjęcie hasła z eksportowanych podkluczyusuwanie bezużytecznych części klucza po imporcieusunięcie nieużytecznych części z klucza w trakcie eksportuzmiana nazwy ,,%s'' na ,,%s'' nie powiodła się: %s naprawa uszkodzeń poczynionych przez serwer pkszapytanie o klucz %s w %s zapytanie o klucz %s w serwerze %s %s ograniczenie zasobówodpowiedź nie zawiera współczynnika RSA odpowiedź nie zawiera publicznego wykładnika RSA odpowiedź nie zawiera klucza publicznego komentarz do unieważnienia: unieważnienie klucza lub wybranych podkluczyunieważnienie wybranych identyfikatorówunieważnienie podpisów na wybranych identyfikatorachunieważnionyunieważniony przez Twój klucz %s w %s unieważniony: %szaokrąglono do %u bitów zapis zmian i wyjścieszukanie kluczy na serwerzezapytanie o ,,%s'' w %s zapytanie o ,,%s'' w serwerze %s %s szukanie nazw w serwerze %s szukanie nazw w serwerze %s %s klucz prywatny ,,%s'' nie został odnaleziony: %s klucz prywatny %s: %s klucz tajny już jest zapisany na karcie brak klucza prywatnegotajne części klucza są niedostępne części tajne klucza są niedostępne wybór podklucza Nwybór identyfikatora użytkownika Nwybrany algorytm skrótów poświadczeń jest niepoprawny wybrany algorytm szyfrujący jest niepoprawny wybrany algorytm kompresji jest niepoprawny wybrany algorytm skrótów wiadomości jest niepoprawny wybór ustawień openpgp nie powiódł się: %s wysyłanie klucza %s do %s" wysyłanie klucza %s do serwera %s %s ustawienie adnotacji do identyfikatora użytkownikaustawienie preferencji dla wybranych identyfikatorówustawienie URL-a wybranego serwera kluczy dla zaznaczonych identyfikatorówpokazywanie adnotacji standardu IETF w liście podpisówpokazywanie adnotacji standardu IETF przy sprawdzaniu podpisupolecenia administracyjnepokazywanie wszystkich adnotacji w liście podpisówpokazywanie wszystkich adnotacji przy sprawdzaniu podpisupokazywanie dat wygaśnięcia w liście podpisówokazanie odcisku kluczapokazywanie tylko głównego identyfikatora przy sprawdzaniu podpisupokazywanie URL-i regulaminów w liście podpisówokazywanie URL-i do regulaminów podczas sprawdzania podpisupokazywanie URL-i preferowanych serwerów kluczy w liście podpisówpokazywanie URL-i wybranych serwerów kluczypokazywanie unieważnionych i wygasłych podkluczy w liściepokazywanie unieważnionych i wygasłych identyfikatorów w liście kluczyokazywanie unieważnionych i wygasłych identyfikatorów przy sprawdzaniu podpisuokazanie wybranych zdjęćpokazywanie nazwy zbioru kluczy w liście kluczyten tekst pomocypokazywanie poziomu ważności identyfikatora w liście kluczypokazywanie poziomów zaufania przy sprawdzaniu podpisupokazywanie adnotacji użytkownika w liście podpisówpokazywanie adnotacji użytkownika przy sprawdzaniu podpisuzłożenie podpisu na kluczuzłożenie prywatnego podpisu na kluczupodpisanie lub modyfikacja kluczazłożenie podpisu na wybranych identyfikatorach [* podobne polecenia poniżej]złożenie podpisu lokalnego na wybranych identyfikatorachzłożenie niewycofywalnego podpisu na wybranych identyfikatorachzłożenie podpisu zaufania na wybranych identyfikatorachwymuszono pominięcie sprawdzenia podpisu podpisów złożonych do tej chwili: %lu podpisany Twoim kluczem %s w %s%s%s złożenie podpisu nie powiodło się: %s podklucz podpisujący %s jest już skrośnie podpisany podpis:pominięty ,,%s'': %s pominięty ,,%s'': duplikat pominięty: został już wybrany w innej opcji pominięty: klucz publiczny już jest domyślnym adresatem pominięty: klucz prywatny jest już wpisany blok typu %d zostaje pominięty podpis w wersji 3 na identyfikatorze ,,%s'' zostaje pominięty osobny certyfikat unieważnienia, aby go wczytać użyj ,,gpg --import'' oddzielony podpis klasy 0x%02x. zapis klucza na karcie nie powiódł się: %s podklucz %s nie służy do podpisywania, więc nie trzeba go podpisywać skrośnie podpakiet typu %d ma ustawiony krytyczny bit błąd szyfrowania symetrycznego ,,%s'': %s błąd systemu podczas wołania programu zewnętrznego: %s pobieranie kluczy z tego zbiorutekstowypodany URL regulaminu poświadczania jest niepoprawny podany URL serwera klucza jest niepoprawny podany URL regulaminu podpisów jest niepoprawny nie można sprawdzić podpisu. Należy pamiętać o podawaniu pliku podpisu (.sig lub .asc) jako pierwszego argumentu linii poleceń. dla klucza publicznego ,,%s'' istnieje klucz prywatny! wygenerowany przez PGP klucz dla algorytmu ElGamala, podpisy składane tym kluczem nie zapewniają bezpieczeństwa!klucz został już ustawiony jako unieważniający to może być spowodowane brakiem podpisu klucza nim samym ta wiadomość może nie dać się odczytać za pomocą %s system wymaga użycia plików tymczasowych do wołania zewnętrznych programów konflikt datownikówprzełączenie pomiędzy listą kluczy publicznych i prywatnychprzełączenie wymuszania PIN przy podpisywaniuzbyt wiele ustawień szyfrów zbyt wiele ustawień kompresji zbyt wiele ustawień skrótów zbyt wiele wpisów w buforze kluczy publicznych - wyłączony błąd w bazie zaufaniawpis zaufania %lu jest typu innego niż poszukiwany %d wpis zaufania %lu, typ zapytania %d: odczyt nie powiódł się: %s wpis zaufania %lu, typ zapytania %d: zapis nie powiódł się: %s zaufanie: %sbaza zaufania, wpis %lu: funkcja lseek() nie powiodła się: %s baza zaufania, wpis %lu: zapis nie powiódł się (n=%d): %s zbyt duże zlecenie dla bazy zaufania baza zaufania: funkcja lseek() zawiodła: %s baza zaufania: funkcja read() (n=%d) zawiodła: %s baza zaufania: synchronizacja nie powiodła się %s poziom zaufania zmieniony na PEŁEN z powodu poprawnego PKA poziom zaufania zmieniony na NIGDY z powodu niepoprawnego PKA ostatecznynie można wyświetlić zdjęcia! nie można uruchomić zewnętrznego programu nie można wykonać ,,%s'': %s nie można uruchomić powłoki ,,%s'': %s nie można otworzyć pliku JPEG ,,%s'': %s nie można odczytać odpowiedzi programu zewnętrznego: %s nie można ustawić ścieżki programów wykonywalnych na %s zapis aktualizacji bazy zaufania nie powiódł się: %s nie można użyć szyfru IDEA z wszystkimi kluczami dla których szyfrujesz. nie można użyć nieznanego modelu zaufania %d, zostaje przyjęty %s odblokowanie PIN-u przy użyciu kodu resetującegonieskompresowany|brakniezdefiniowanynieoczekiwane opakowanie: nieoczekiwane danealgorytm szyfrujący nie jest zaimplementowanyalgorytm szyfrowania z kluczem publicznym nie jest zaimplementowanynieznanynieznany nagłówek opakowania: nieznany algorytm szyfrującynieznany algorytm kompresjinieznana opcja konfiguracji ,,%s'' nieznany domyślny adresat ,,%s'' nieznany algorytm skrótunieznany algorytm ochrony klucza nieznana opcja ,,%s'' nieznany typ pakietunieznany algorytm ochrony nieznany algorytm asymetrycznynieznana klasa podpisunieznana wersjanienaturalne zakończenie pracy zewnętrznego programu bez odpowiedziURI nie jest obsługiwanynieużyteczny algorytm asymetrycznybezużyteczny klucz publicznybezużyteczny klucz prywatnyodświeżenie wszystkich kluczy z serwerazapis zmian nie powiódł się: %s zapis zmian na kluczu prywatnym nie powiódł się: %s uaktualnienie bazy zaufaniawykorzystanie: %swywołanie: gpg [opcje]plik wyjściowykanoniczny format tekstowyaby go usunąć należy najpierw użyć opcji ,,--delete-secret-key''. wymuszenie całkowitej zgodności z OpenPGPwykorzystanie plików tymczasowych do komunikacji z programami pomocniczymiidentyfikator do podpisania lub odszyfrowaniaidentyfikator użytkownika ,,%s'' został już unieważniony Identyfikator użytkownika ,,%s'' model zaufania %s szyfrem %s użycie domyślnego PIN-u jako %s używany jest podklucz %s zamiast klucza głównego %s sprawdzanie podpisów z użyciem danych PKAwiarygodność: %sz dodatkowymi informacjamiw tej chwili nie wolno sprawdzać PIN-u administracyjnego tym poleceniem sprawdzenie CHV%d nie powiodło się: %s sprawdzenie podpisusprawdzenie PIN-u i okazanie wszystkich danychoczekiwanie na blokadę ,,%s''... klucz słabywygenerowano słaby klucz - operacja zostaje powtórzona dziwny rozmiar jak na zaszyfrowany klucz sesyjny (%d) z powodu %s nie będzie wykonane w niezabezpieczonej pamięci zapis podpisu bezpośredniego zapis podpisu wiążącego klucz zapisywanie nowego klucza zapisuję klucz publiczny w ,,%s'' zapisuję szkielet klucza tajnego w ,,%s'' zapisuję klucz tajny w '%s' zapis podpisu klucza nim samym zapis do ,,%s'' zapisywanie na wyjście standardowe został użyty niewłaściwy klucz prywatnytTtakw trybie --pgp2 można podpisywać tylko za pomocą kluczy z wersji 2.x kluczami PGP 2 w trybie --pgp2 można podpisywać tylko do oddzielonych podpisów w trybie --pgp2 można szyfrować dla kluczy RSA krótszych od 2048 bitów w trybie --pgp2 można składać tylko podpisy oddzielne lub dołączone do tekstu ustawienia można zaktualizować przez: gpg --edit-key %s updpref save w trybie --pgp2 nie można jednocześnie szyfrować i podpisywać nie można wyznaczyć klucza do unieważniania jego samego w trybie %s nie można użyć --symmetric --encrypt w trybie --s2k-mode 0 nie można użyć --symmetric --encrypt w trybie %s nie można użyć --symmetric --sign --encrypt w trybie --s2k-mode 0 nie można użyć --symmetric --sign --encrypt znalazłeś(aś) błąd w programie ... (%s:%d) %s nie jest dostępne w trybie %s szyfr ,,%s'' nie jest dostępny w trybie %s kompresja ,,%s'' nie jest dostępna w trybie %s skrót ,,%s'' nie jest dostępny w trybie %s w trybie --pgp2 trzeba używać plików a nie potoków. |AN|Nowy PIN administracyjny|A|Proszę podać PIN administracyjny|A|Proszę podać PIN administracyjny%%0A[pozostało prób: %d]|FD|pisanie opisu stanu do deskryptora FD|NAZWA|szyfrowanie dla odbiorcy NAZWA|N|Nowy PIN|N|poziom kompresji N (0 - bez)|RN|Nowy kod resetujący|[plik]|złożenie podpisu pod dokumentem|[plik]|złożenie podpisu|algo [pliki]|skróty wiadomości||Proszę podać PIN||Proszę podać PIN%%0A[podpisano: %lu]||Proszę podać kod resetujący dla kartygnupg-1.4.20/po/Makefile.in.in0000644000175000017500000004155312635216116012742 00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.19 GETTEXT_MACRO_VERSION = 0.19 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) POFILESDEPS_no = POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) DISTFILESDEPS_ = update-po DISTFILESDEPS_yes = $(DISTFILESDEPS_) DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. CHECK_MACRO_VERSION = \ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ -size -10000000c -exec grep 'GNU @PACKAGE@' \ /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu=yes; \ else \ package_gnu=no; \ fi; \ }; \ if test "$$package_gnu" = "yes"; then \ package_prefix='GNU '; \ else \ package_prefix=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_prefix}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(POFILESDEPS) @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/po/ru.po0000644000175000017500000070165212635457220011264 00000000000000# GnuPG Russian Translation # Copyright (C) 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the GnuPG package. # Maxim Britov , 2003. # Thanks a lot to Pawel I. Shajdo . # Thanks to Golubev Eugeny (my CIO). He takes notebook for this translation. # Ineiev , 2014, 2015. msgid "" msgstr "" "Project-Id-Version: GnuPG 1.4.18\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2015-06-25 17:16+0200\n" "Last-Translator: Ineiev \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "не могу сгенерировать простое число с pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "не могу сгенерировать простое число меньше чем с %d битами\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "не найден модуль накопления энтропии\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "невозможно заблокировать `%s': %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "ожидание блокировки `%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "не могу открыть `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "не могу выполнить stat `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' не обычный файл - игнорирую\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "замечание: файл random_seed пуст\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "ВНИМАНИЕ: недопустимый размер файла random_seed - не использую\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "не могу прочитать `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "замечание: файл random_seed не обновлен\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "не могу создать `%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "не могу записать `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "не могу закрыть `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "ВНИМАНИЕ: используется небезопасный генератор случайных чисел!!\n" #: cipher/random.c:894 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" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Программа собирает случайные данные. Это займет какое-то время.\n" "Делайте что-нибудь, чтобы не скучать; это повысит качество\n" "случайных данных.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Недостаточно случайных чисел. Займитесь какой-нибудь другой работой,\n" "чтобы ОС могла получить больше случайных данных! (Нужно еще %d байт)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "сбой при сохранении отпечатка: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "сбой при сохранении даты создания: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "сбой при чтении ключа: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "ответ не содержит данных открытого ключа\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "в ответе отсутствует модуль RSA\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "в ответе отсутствует открытая экспонента RSA\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "PIN по умолчанию применяется как %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "не удалось применить PIN по умолчанию как %s: %s - далее применяться\n" "по умолчанию не будет\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Введите PIN%%0A[подписей: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Введите PIN" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "Функция обработки PIN возвратила ошибку: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN для CHV%d слишком короток, минимальная длина %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "сбой при проверке CHV%d: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "ошибка получения статуса CHV с карты\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "карта заблокирована!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "осталось %d попыток ввода административного PIN перед блокировкой карты\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Введите административный PIN%%0A[осталось попыток: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Введите административный PIN" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "доступ к командам управления не настроен\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Код сброса (больше) не доступен\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Введите код сброса для карты" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Код сброса слишком короток; минимальная длина %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Новый код сброса" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Новый административный PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Новый PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "ошибка при получении нового PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "ошибка чтения данных приложения\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "ошибка чтения отпечатка DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "ключ уже существует\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "существующий ключ будет заменен\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "генерация нового ключа\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "запись нового ключа\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "пропущена метка времени создания\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "Модуль RSA пропущен или его размер не равен %d бит\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "отсутствует открытая экспонента RSA или превышает %d бит\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "Простое число RSA %s пропущено или его размер не равен %d бит\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "сбой сохранения ключа: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "пожалуйста, подождите, пока будет генерироваться ключ ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "сбой при генерации ключа\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "ключ сгенерирован (%d секунд)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "недопустимая структура карты OpenPGP (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "отпечаток на карте не совпадает с запрошенным\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "карта не поддерживает хэш-функцию %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "создано подписей: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "проверка административного PIN в данный момент запрещена этой командой\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "нет доступа %s - непригодная карта OpenPGP?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "текстовый формат: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "недопустимый текстовый заголовок: " #: g10/armor.c:459 msgid "armor header: " msgstr "текстовый заголовок: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "недопустимый заголовок текстовой подписи\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "неизвестный текстовый заголовок: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "вложенные текстовые подписи\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "неожиданный текстовый формат:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "недопустимая строка, выделенная дефисами: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "недопустимый символ radix64 %02X (игнорируется)\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "преждевременный конец файла (нет контрольной суммы)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "преждевременный конец файла (в контрольной сумме)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "поврежденная контрольная сумма\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "ошибка контрольной суммы; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "преждевременный конец файла (в дополнении)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "ошибка в строке дополнения\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "не найдено данных формата OpenPGP.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "недопустимый текстовый формат: строка длиннее %d символов\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "символ quoted printable в текстовом формате - испорчено почтовой " "программой?\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "Карта OpenPGP недоступна: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "Обнаружена карта OpenPGP номер %s\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "в пакетном режиме это действие невозможно\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Эта команда доступна только для карт версии 2.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Ваш выбор? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[не установлено]" #: g10/card-util.c:512 msgid "male" msgstr "мужской" #: g10/card-util.c:513 msgid "female" msgstr "женский" #: g10/card-util.c:513 msgid "unspecified" msgstr "не указан" #: g10/card-util.c:540 msgid "not forced" msgstr "не принудительный" #: g10/card-util.c:540 msgid "forced" msgstr "принудительный" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Ошибка: Сейчас допустим только простой текст ASCII.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Ошибка: Нельзя использовать символ \"<\"\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Ошибка: Двойные пробелы недопустимы.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Фамилия владельца карты:" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Имя владельца карты:" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Ошибка: Слишком длинное скомбинированное имя (предел %d символов).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL для получения открытого ключа: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Ошибка: URL слишком длинный (предел - %d символов).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "ошибка выделения достаточной памяти: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "ошибка чтения `%s': %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "ошибка записи `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Учетная запись (имя): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Ошибка: Слишком длинные данные учетной записи (предел %d символов).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Секретные данные DO:" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Ошибка: Слишком длинные секретные данные DO (предел %d символов).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Предпочтительный язык: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Ошибка: недопустимая длина строки предпочтений.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Ошибка: недопустимые символы в строке предпочтений.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Пол ((M)Мужской, (F)Женский или пробел): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Ошибка: недопустимый ответ.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "отпечаток центра сертификации: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Ошибка: недопустимый формат отпечатка.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "операция с ключом невозможна: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "карта не OpenPGP" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "ошибка при считывании информации ключа: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Заменить существующий ключ? (y/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "ЗАМЕЧАНИЕ: Нет никакой гарантии, что карта поддерживает запрошенный размер.\n" " Если сгенерировать ключ не удастся, сверьтесь с документацией\n" " на карту и выясните, какие размеры допустимы.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Какой Вам нужен размер ключа для подписей? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Какой Вам нужен размер ключа для шифрования? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Какой Вам нужен размер ключа для аутентификации? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "округлен до %u бит\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "размер ключей %s должен быть в пределах %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" "Теперь карта будет переконфигурирована на генерацию ключа длиной %u бит\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "ошибка изменения размера ключа %d до %u бит: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Сделать архивную копию ключа шифрования вне карты? (Y/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "ЗАМЕЧАНИЕ: ключи уже хранятся на карте!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Заменить существующие ключи? (y/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Обратите внимание: заводские установки PIN\n" " PIN = `%s' Admin PIN = `%s'\n" "Вам следует изменить их командой --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Выберите тип создаваемого ключа:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Ключ подписи\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Ключ шифрования\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Ключ аутентификации\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Неправильный выбор.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Выберите, где хранить ключ:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "неизвестный алгоритм защиты ключа\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "закрытые части ключа недоступны\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "закрытый ключ уже хранится на карте\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "ошибка записи ключа на карту: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "выйти из этого меню" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "показать административные команды" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "показать данную справку" #: g10/card-util.c:1687 msgid "list all available data" msgstr "вывести все доступные данные" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "изменить имя владельца карты" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "изменить URL получения ключа" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "запросить ключ по заданному картой URL" #: g10/card-util.c:1693 msgid "change the login name" msgstr "изменить имя учетной записи" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "изменить языковые предпочтения" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "изменить пол владельца карты" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "сменить отпечаток центра сертификации" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "переключить флаг `подпись требует PIN'" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "сгенерировать новые ключи" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "меню изменения или разблокировки PIN" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "проверить PIN и показать все данные" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "разблокировать PIN с помощью кода сброса" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/card> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Команды администратора\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Команды администрирования разрешены\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Команды администрирования не разрешены\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Недопустимая команда (список команд: \"help\")\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "устройства чтения карты недоступно\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Вставьте карту и нажмите Enter или введите 'c' для отмены: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "сбой при выборе openpgp: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Извлеките текущую карту и вставьте карту с серийным номером:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "По готовности нажмите Enter, или введите 'c' для отмены: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Введите новый административный PIN: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Введите новый PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Введите административный PIN: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Введите PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Повторите ввод PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN повторен неверно; попробуйте еще раз" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "не могу открыть `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output для данной команды не работает\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "ключ \"%s\" не найден: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "ошибка чтения блока ключей: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(если только Вы не задали ключ отпечатком)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "не могу выполнить в пакетном режиме без \"--yes\"\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Удалить данный ключ из таблицы? (y/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Это закрытый ключ! - все равно удалить? (y/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "сбой при удалении блока ключа: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "сведения о доверии владельцу сброшены\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "имеется закрытый ключ для открытого ключа \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "сначала удалите его командой \"--delete-secret-keys\".\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "ошибка при создании фразы-пароля: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "не могу использовать симметричный пакет ESK в режиме S2K\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "используется алгоритм шифрования %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' уже сжат\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "ВНИМАНИЕ: файл `%s' пуст\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "в режиме --pgp2 ключ RSA для шифрования должен быть не более 2048 бит\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "чтение из `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "не могу использовать шифр IDEA для всех ключей, которыми Вы шифруете.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "ВНИМАНИЕ: использование симметричного шифра %s (%d) нарушает\n" " предпочтения получателя\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "ВНИМАНИЕ: сжатие алгоритмом %s (%d) нарушает предпочтения получателя\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "использование симметричного шифра %s (%d) нарушает предпочтения получателя\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "нельзя использовать %s в режиме %s\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s зашифровано для: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "данные зашифрованы алгоритмом %s\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "зашифровано неизвестным алгоритмом %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "ВНИМАНИЕ: сообщение было зашифровано слабым ключом симметричного шифра.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "проблема обработки зашифрованного пакета\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "удаленный запуск программы не поддерживается\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "не могу создать каталог `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "вызов внешних программ отключен из-за небезопасных прав доступа к файлу " "настроек\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "на данной платформе при вызове внешних программ требуются временные файлы\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "не могу запустить программу `%s': %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "не могу запустить оболочку `%s': %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "ошибка системы при вызове внешней программы: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "ненормальное завершение внешней программы\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "не могу запустить внешнюю программу\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "не могу прочитать ответ внешней программы: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "ВНИМАНИЕ: не могу удалить временный файл (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "ВНИМАНИЕ: не могу удалить временный каталог `%s': %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "экспортировать подписи, помеченные как локальные" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "экспортировать атрибутные ID (обычно фотоидентификаторы)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "экспортировать ключи отзыва, помеченные как `особо важные'" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "удалить фразу-пароль из выбранных подключей" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "удалить при экспорте непригодные части ключа" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "удалить как можно больше из ключа при экспорте" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "экспорт закрытых ключей не разрешен\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "ключ %s: не защищен - пропущен\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "ключ %s: ключ типа PGP 2.x - пропущен\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "ключ %s: материал ключа на карте - пропущен\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "перехожу к экспорту незащищенного подключа\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "сбой снятия защиты с ключа: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "ВНИМАНИЕ: закрытый ключ %s не имеет простой контрольной суммы SK\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "ВНИМАНИЕ: нечего экспортировать\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Команды:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[file]|создать подпись к файлу" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[file]|создать текстовую подпись к файлу" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "создать отделенную подпись" #: g10/gpg.c:393 msgid "encrypt data" msgstr "зашифровать данные" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "зашифровать только симметричным шифром" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "расшифровать данные (по умолчанию)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "проверить подпись" #: g10/gpg.c:401 msgid "list keys" msgstr "вывести список ключей" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "вывести список ключей и подписей" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "вывести и проверить подписи ключей" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "вывести список ключей и их отпечатков" #: g10/gpg.c:406 msgid "list secret keys" msgstr "вывести список закрытых ключей" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "создать новую пару ключей" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "удалить ключи из таблицы открытых ключей" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "удалить ключи из таблицы закрытых ключей" #: g10/gpg.c:411 msgid "sign a key" msgstr "подписать ключ" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "подписать ключ локально" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "подписать или редактировать ключ" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "создать сертификат отзыва" #: g10/gpg.c:416 msgid "export keys" msgstr "экспортировать ключи" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "экспортировать ключи на сервер ключей" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "импортировать ключи с сервера ключей" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "искать ключи на сервере ключей" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "обновить все ключи с сервера ключей" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "импортировать/объединить ключи" #: g10/gpg.c:429 msgid "print the card status" msgstr "показать состояние карты" #: g10/gpg.c:430 msgid "change data on a card" msgstr "изменить данные на карте" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "сменить PIN карты" #: g10/gpg.c:440 msgid "update the trust database" msgstr "обновить таблицу доверия" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [files]|вывести хэши файлов" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Параметры:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "вывод в текстовом формате ASCII" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAME|зашифровать для получателя NAME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "использовать данный ID пользователя для подписывания и расшифровки" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|установить уровень сжатия N (по умолчанию - 0)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "использовать канонический текстовый режим" #: g10/gpg.c:486 msgid "use as output file" msgstr "вывод в указанный файл" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "подробно" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "не делать никаких изменений" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "спросить перед перезаписью" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "строго следовать стандарту OpenPGP" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "создает сообщение совместимым с PGP 2.x" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Полный список команд и параметров см. в документации)\n" #: g10/gpg.c:576 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 [файл] подписать и зашифровать для получателя Bob\n" " --clearsign [файл] создать текстовую подпись\n" " --detach-sign [файл] создать отделенную подпись\n" " --list-keys [имена] показать ключи\n" " --fingerprint [имена] показать отпечатки\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "О найденных ошибка сообщайте на .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Использование: gpg [параметры] [файлы] (-h для подсказки)" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Поддерживаются следующие алгоритмы:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "С открытым ключом: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Симметричные шифры: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Хэш-функции: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Алгоритмы сжатия: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "использование: gpg [параметры] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "несовместимые команды\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "отсутствует знак = в определении группы `%s'\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "ВНИМАНИЕ: небезопасный владелец домашнего каталога `%s'\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "ВНИМАНИЕ: небезопасный владелец файла конфигурации `%s'\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "ВНИМАНИЕ: небезопасные права доступа к домашнему каталогу `%s'\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "ВНИМАНИЕ: небезопасные права доступа к файлу конфигурации `%s'\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "ВНИМАНИЕ: небезопасный владелец каталога, содержащего домашний каталог `%s'\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "ВНИМАНИЕ: небезопасный владелец каталога, содержащего файл конфигурации `" "%s'\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "ВНИМАНИЕ: небезопасные права доступа к каталогу,\n" " содержащему домашний каталог `%s'\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "ВНИМАНИЕ: небезопасные права доступа к каталогу,\n" " содержащему файл конфигурации `%s'\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "неизвестный параметр в файле конфигурации `%s'\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "показать в списке ключей фотоидентификаторы" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "показать в списке подписей URL правил" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "показать в списке подписей все примечания" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "показать в списке подписей примечания стандарта IETF" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "показать в списке подписей пользовательские примечания" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "показать в списке подписей URL предпочтительных серверов ключей" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "показать в списке ключей действительность ID пользователя" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "показать в списке ключей отозванные и просроченные ID пользователей" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "показать в списке ключей отозванные и просроченные подключи" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "показать в списке ключей название таблицы ключей" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "показать в списке подписей сроки действия" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "ЗАМЕЧАНИЕ: старый файл конфигурации по умолчанию `%s' проигнорирован\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "ЗАМЕЧАНИЕ: файл конфигурации `%s' не обнаружен\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "файл конфигурации `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "чтение конфигурации из `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "ЗАМЕЧАНИЕ: %s не предназначен для нормального применения!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "`%s' недопустимый срок действия подписи\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "`%s' недопустимая таблица символов\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "не могу интерпретировать URL сервера ключей\n" # test it #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: недопустимые параметры для сервера ключей\n" # test it #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "недопустимые параметры для сервера ключей\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: недопустимые параметры импорта\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "недопустимые параметры импорта\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: недопустимые параметры экспорта\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "недопустимые параметры экспорта\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: недопустимый список параметров\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "недопустимый список параметров\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "показать при проверке подписи фотоидентификаторы" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "показать при проверке подписи URL правил" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "показать при проверке подписей все примечания" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "показать при проверке подписей примечания стандарта IETF" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "показать при проверке подписей пользовательские примечания" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "показать при проверке подписей URL предпочтительных серверов ключей" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "показать при проверке подписей действительность ID пользователя" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" "показать при проверке подписей отозванные и просроченные ID пользователя" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "показать при проверке подписей только главный ID пользователя" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "проверить подписи по данным PKA" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "поднять доверие подписей с действительными данными PKA" # test it #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: недопустимые параметры проверки \n" # test it #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "недопустимые параметры проверки\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "не могу определить путь запуска для %s\n" # test it #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: недопустимый список auto-key-locate\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "недопустимый список auto-key-locate\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "ВНИМАНИЕ: возможно создание файла образа памяти!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "ВНИМАНИЕ: %s заместит %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s с %s недопустимо!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s с %s не имеет смысла!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "ЗАМЕЧАНИЕ: %s недоступен в данной версии\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "не будет работать с небезопасной памятью из-за %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "в режиме --pgp2 можно сделать только отделенную или текстовую подпись\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "в режиме --pgp2 нельзя одновременно подписать и зашифровать\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "в режиме --pgp2 нужно использовать файлы (а не конвейер командной строки).\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "для шифрования сообщения в режиме --pgp2 требуется шифр IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "выбран неверный алгоритм шифрования\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "выбрана неверная хэш-функция\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "выбран неверный алгоритм сжатия\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "выбрана неверная хэш-функция для сертификации\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed должен быть больше 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed должен быть больше 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth должен быть в диапазоне от 1 до 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "недопустимый default-cert-level; должен быть 0, 1, 2 или 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "недопустимый min-cert-level; должен быть 0, 1, 2 или 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "ЗАМЕЧАНИЕ: простой режим S2K (0) строго противопоказан\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "недопустимый режим S2K; должно быть 0, 1 или 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "недопустимые предпочтения по умолчанию\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "недопустимые персональные предпочтения шифра\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "недопустимые персональные предпочтения хэш-функции\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "недопустимые персональные предпочтения алгоритмов сжатия\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s пока не работает совместно с %s!\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "Вы не можете использовать шифрование `%s' в режиме %s\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "Вы не можете использовать хэш-функцию `%s' в режиме %s\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "Вы не можете использовать сжатие `%s' в режиме %s\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "сбой инициализации таблицы доверия: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "ВНИМАНИЕ: получатели (-r) заданы без использования шифрования с открытым " "ключом\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [файл]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [файл]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "сбой симметричного шифрования `%s': %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [файл]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [файл]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "нельзя использовать --symmetric --encrypt совместно с --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "нельзя использовать --symmetric --encrypt в режиме %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [файл]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [файл]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [файл]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" "нельзя использовать --symmetric --sign --encrypt совместно с --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "нельзя использовать --symmetric --sign --encrypt в режиме %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [файл]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [файл]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [файл]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key [ID пользователя]" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key [ID пользователя]" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key [ID пользователя] [команды]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [ID пользователя] [таблица ключей]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "сбой при отправке на сервер ключей: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "сбой при получении с сервера ключей: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "сбой при экспорте ключа: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "сбой при поиске на сервере ключей: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "сбой при обновлении с сервера ключей: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "ошибка преобразования из текстового формата: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "ошибка преобразования в текстовый формат: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "недопустимая хэш-функция `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[файл]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Пишите сообщение ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "заданный URL правил сертификации неверен\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "заданный URL правил подписи неверен\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "заданный URL предпочтительного сервера ключей неверен\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "слишком много элементов в буфере pk - отключено\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[ID пользователя не найден]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "ключ %s: закрытый ключ без открытого ключа - пропущен\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "автоматически получили `%s' через %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Параметр --allow-non-selfsigned-uid сделал дефектный ключ %s пригодным\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "нет закрытого подключа для открытого подключа %s - игнорируем\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "использую подключ %s вместо главного ключа %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "уменьшить количество выводимой информации" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "используются ключи из этой таблицы ключей" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "при несоответствии метки времени - только предупреждение" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|выводить информацию в файл с дескриптором FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Использовать: gpgv [параметры] [файлы] (-h для подсказки)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Синтаксис: gpgv [параметры] [файлы]\n" "Проверка подписей по доверенным ключам\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Вы можете ввести здесь значение; оно никогда не экспортируется\n" "на сторону. Оно необходимо для реализации сети доверия\n" "и не имеет никакого отношения к (неявно созданной) сети сертификатов." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Для построения Сети доверия GnuPG должен знать, к каким ключам\n" "имеется абсолютное доверие - обычно это ключи, для которых у Вас есть\n" "закрытый ключ. Ответьте \"yes\" для присвоения абсолютного доверия\n" "данному ключу\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Если Вы хотите использовать данный недоверенный ключ - ответьте \"yes\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Введите ID пользователя адресата, которому Вы хотите отправить сообщение." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Выберите алгоритм.\n" "\n" "DSA (он же DSS), Digital Signature Algorithm, может использоваться\n" "только для подписей.\n" "\n" "Elgamal - алгоритм, используемый только для шифрования.\n" "\n" "RSA может использоваться и для подписи, и для шифрования.\n" "\n" "Первый (главный) ключ всегда должен быть подписывающим." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Обычно не рекомендуется использовать один ключ для подписи и шифрования.\n" "Данный алгоритм следует использовать только в определенных случаях.\n" "Прежде всего проконсультируйтесь со своим экспертом по безопасности." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Введите размер ключа" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Ответьте \"yes\" или \"no\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Введите требуемое значение, как показано в подсказке.\n" "Можно ввести дату в формате ISO (ГГГГ-ММ-ДД), но Вы не получите\n" "уведомление при ошибке в формате - вместо этого система попробует\n" "интерпретировать введенное Вами значение как интервал." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Введите имя владельца ключа" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "введите необязательный, но очень рекомендуемый адрес электронной почты" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Введите необязательный комментарий" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N изменить имя.\n" "C изменить комментарий.\n" "E изменить адрес электронной почты.\n" "O продолжить создание ключа.\n" "Q выйти и прервать создание ключа." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Ответьте \"yes\" (или только \"y\"), если Вы готовы создавать подключ." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Когда Вы подписываете ID пользователя ключа, Вы должны сначала " "удостовериться, что\n" "ключ принадлежит, человеку указанному в ID пользователя. Это нужно для тех,\n" "кто знает, как хорошо Вы проверяете достоверность ID пользователя.\n" "\n" "\"0\" означает, что Вы не можете сказать, как хорошо Вы проверили ключ.\n" "\"1\" означает, что Вы полагаете, что ключ принадлежит человеку, который\n" " указан в нем, но Вы вообще не проводили проверку ключа.\n" " Это полезно, когда Вы подписываете ключ с псевдонимом человека.\n" "\n" "\"2\" означает, что Вы проверяли ключ неаккуратно. Например, это может\n" " означать, что Вы проверили отпечаток ключа и проверили ID пользователя " "на\n" " ключе по фотоидентификатору.\n" "\n" "\"3\" означает, что Вы выполнили всестороннюю проверку ключа. Например, это " "может\n" " означать, что Вы сверили отпечаток ключа с владельцем ключа лично\n" " и что Вы сверили все с помощью стойкого к подделке документа\n" " с фотографией (таким как паспорт), что имя владельца ключа совпадает\n" " с именем в ID пользователя ключа, наконец, что Вы проверили " "(обменявшись\n" " письмами), что адрес электронной почты на ключе принадлежит владельцу " "ключа.\n" "\n" "Учтите, что примеры, данные для уровней 2 и 3 - только примеры.\n" "В конечном итоге Вам решать, что значит \"неаккуратно\" и \"всесторонне\",\n" "когда Вы подписываете чужие ключи.\n" "\n" "Если Вы не можете определиться с правильным ответом, ответьте \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Ответьте \"yes\", если Вы хотите подписать ВСЕ ID пользователя" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Ответьте \"yes\", если Вы действительно хотите удалить данный ID " "пользователя.\n" "Все сертификаты также будут потеряны!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Ответьте \"yes\", если Вы готовы удалить подключ" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Это действительная подпись на ключе; обычно не желательно\n" "удалять такие подписи, потому, что она может быть важна для установления\n" "достоверности ключа или других ключей подписанных данным ключом." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Данная подпись не может быть проверена, потому что у Вас нет\n" "соответствующего ключа. Вы можете отложить ее удаление, пока не\n" "узнаете, какой ключ был использован, т.к. эта подпись может\n" "устанавливать достоверность через другие, уже удостоверенные ключи." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Подпись недействительна. Это дает основания удалить ее из\n" "Вашей таблицы ключей." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Данная подпись является самоподписью и привязывает ID пользователя к ключу.\n" "Обычно плохая идея удалять такую подпись. На самом деле\n" "GnuPG не смог бы больше использовать такой ключ. Делайте это,\n" "только если данная самоподпись по каким-то причинам\n" "недействительна и есть другая самоподпись." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Изменение предпочтений для всех ID пользователя (или только для выбранных)\n" "на текущий список предпочтений. Метка времени на всех затронутых\n" "самоподписях будет увеличена на одну секунду.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Введите фразу-пароль (это секретная строка) \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Повторите фразу-пароль, чтобы убедиться в том, что она набрана правильно." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Введите имя файла, к которому относится данная подпись" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Ответьте \"yes\", если хотите записать поверх файла" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Введите новое имя файла. Если Вы нажмете только Enter, будет использован\n" "по умолчанию тот файл, который показан в квадратных скобках." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Вы должны указать причину отзыва ключа. В зависимости от \n" "ситуации Вы можете выбрать один из следующих вариантов:\n" " \"Ключ был скомпрометирован\"\n" " Выберите, если Вы полагаете, что посторонний человек\n" " получил доступ к Вашему закрытому ключу.\n" " \"Ключ заменен другим\"\n" " Выберите, если Вы заменили данный ключ на другой.\n" " \"Ключ больше не используется\"\n" " Выберите, если Вы отказались от использования данного ключа.\n" " \"ID пользователя больше не действителен\"\n" " Выберите, если Вы больше не используете данный ID пользователя.\n" " Обычно используется для указания, что данный адрес электронной\n" " почты больше не используется.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Если хотите, Вы можете ввести здесь текст с указанием\n" "причины создания сертификата отзыва. Будьте кратки.\n" "Для завершения введите пустую строку.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Справки нет" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Нет справки для `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "импортировать подписи, обозначенные как локальные" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "устранить при импорте повреждения от сервера ключей pks" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "не сбрасывать таблицу доверия после импорта" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "не обновлять таблицу доверия после импорта" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "создать открытый ключ при импорте закрытого ключа" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "обновлять только существующие ключи" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "удалить после импорта непригодные части ключа" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "удалить после импорта из ключа как можно больше" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "пропущен блок типа %d\n" # test it #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "обработано %lu ключей\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Всего обработано: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " пропущено новых ключей: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " без ID пользователя: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " импортировано: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " неизмененных: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " новых ID пользователя: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " новых подключей: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " новых подписей: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " новых отзывов ключей: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " считано закрытых ключей: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr "импортировано закрытых ключей: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " неизмененных закрытых ключей: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " не импортировано: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " очищено подписей: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " очищено ID пользователей: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "ВНИМАНИЕ: ключ %s содержит предпочтения недопустимых\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr "алгоритмов для этих ID пользователей:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": предпочитает шифр %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": предпочитает хэш-функцию %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": предпочитает сжатие %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "крайне желательно, чтобы Вы обновили Ваши предпочтения и\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "распространили этот ключ во избежание возможных нестыковок алгоритмов\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" "свои предпочтения можно обновить командой gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "ключ %s: нет ID пользователя\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "ключ %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "исключен фильтром импорта" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "ключ %s: повреждение ключа PKS исправлено\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "ключ %s: принят без самоподписанного ID пользователя \"%s\"\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "ключ %s: нет действительных ID пользователя\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "может быть, из-за отсутствия самоподписи\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "ключ %s: не найден открытый ключ: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "ключ %s: новый ключ - пропущен\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "нет доступной для записи таблицы ключей: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "сохраняю в `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "ошибка записи таблицы ключей `%s': %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "ключ %s: импортирован открытый ключ \"%s\"\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "ключ %s: не совпадает с нашей копией\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "ключ %s: оригинальный блок ключей не найден: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "ключ %s: оригинальный блок ключей не читается: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "ключ %s: \"%s\" 1 новый ID пользователя\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "ключ %s: \"%s\" %d новых ID пользователя\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "ключ %s: \"%s\" 1 новая подпись\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "ключ %s: \"%s\" %d новых подписей\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "ключ %s: \"%s\" 1 новый подключ\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "ключ %s: \"%s\" %d новых подключей\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "ключ %s: \"%s\" %d подпись очищена\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "ключ %s: \"%s\" %d подписей очищено\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "ключ %s: \"%s\" %d ID пользователя очищен\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "ключ %s: \"%s\" %d ID пользователя очищено\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "ключ %s: \"%s\" не изменен\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "закрытый ключ %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "импорт закрытого ключа не допускается\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "ключ %s: закрытый ключ с недопустимым шифром %d - пропущен\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "нет основной таблицы закрытых ключей: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "ключ %s: импортирован закрытый ключ\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "ключ %s: уже есть в таблице закрытых ключей\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "ключ %s: закрытый ключ не найден: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "ключ %s: нет открытого ключа - не могу применить сертификат отзыва\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "ключ %s: неправильный сертификат отзыва: %s - отвергнут\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "ключ %s: сертификат отзыва \"%s\" импортирован\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "ключ %s: нет ID пользователя для подписи\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "ключ %s: алгоритм с открытым ключом у ID пользователя \"%s\" не " "поддерживается\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "ключ %s: неправильная самоподпись на ID пользователя \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "ключ %s: алгоритм с открытым ключом не поддерживается\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "ключ %s: неверная прямая подпись ключа\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "ключ %s: нет подключа для связывания ключей\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "ключ %s: недопустимая связь подключей\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "ключ %s: удалено многократное связывание подключей\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "ключ %s: нет подключа для отзывающего ключа\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "ключ %s: неверный отзыв подключа\n" # test it #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "ключ %s: удален многократный отзыв подключей\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "ключ %s: пропущен ID пользователя \"%s\"\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "ключ %s: пропущен подключ\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "ключ %s: неэкспортируемая подпись (класс 0x%02X) - пропущена\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "ключ %s: сертификат отзыва в неправильном месте - пропущен\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "ключ %s: неправильный сертификат отзыва: %s - пропущен\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "ключ %s: подпись подключа в неправильном месте - пропущена\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "ключ %s: неожиданный класс подписи (0x%02X) - пропущена\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "ключ %s: обнаружено дублирование ID пользователя - объединены\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "ВНИМАНИЕ: ключ %s, возможно, отозван: запрашиваю ключ отзыва %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "ВНИМАНИЕ: ключ %s, возможно, отозван: ключ отзыва %s не получен.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "ключ %s: добавлен сертификат отзыва \"%s\"\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "ключ %s: добавлена прямая подпись ключа\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" "ЗАМЕЧАНИЕ: серийный номер ключа не соответствует номеру ключа на карте\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "ЗАМЕЧАНИЕ: главный ключ готов и сохранен на карте\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "ЗАМЕЧАНИЕ: вторичный ключ готов и сохранен на карте\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "ошибка создания таблицы ключей `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "создана таблица ключей `%s'\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "источник блока ключей `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "сбой перестройки буфера таблицы ключей: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[отозван]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[самоподпись]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 плохая подпись\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d плохих подписей\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 подпись не проверена за отсутствием ключа\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d подписей не проверено за отсутствием ключей\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 подпись не проверена из-за ошибки\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d подписей не проверено из-за ошибок\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "обнаружен 1 ID пользователя без действительной самоподписи\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "обнаружено %d ID пользователя без действительной самоподписи\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Укажите, насколько Вы доверяете данному пользователю в вопросах проверки\n" "достоверности ключей других пользователей (проверяет паспорт,\n" "сверяет отпечатки ключей из разных источников и т.п.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Доверяю ограниченно\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Полностью доверяю\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Введите глубину этой подписи доверия. Глубина, большая 1,\n" "позволяет ключу, который вы подписываете, делать подписи доверия\n" "от вашего имени.\n" # check it #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Введите домен, ограничивающий использование данной подписи, или пустую " "строку, если нет ограничений.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "ID пользователя \"%s\" отозван." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Вы все равно хотите его подписать? (y/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Не могу подписать.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Срок действия ID пользователя \"%s\" истек." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "ID пользователя \"%s\" не самоподписан." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "ID пользователя \"%s\" можно подписать." #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Подписать его? (y/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Самоподпись у \"%s\" -\n" "это подпись типа PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Вы хотите сделать это самоподписью OpenPGP? (y/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Ваша текущая подпись на \"%s\"\n" "просрочена.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Вы хотите сделать новую подпись для замены просроченной? (y/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Ваша текущая подпись на \"%s\"\n" "является локальной.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Вы хотите сделать это полностью экспортируемой подписью? (y/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" уже локально подписан ключом %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" уже подписан ключом %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Вы все равно хотите снова подписать его? (y/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Нечего подписывать ключом %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Данный ключ просрочен!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Срок действия данного ключа истекает %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "" "Вы хотите, чтобы Ваша подпись была действительна до того же времени? (Y/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "Подпись OpenPGP на ключе PGP 2.x в режиме --pgp2 делать нельзя.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Ключ стал бы несовместим с PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Насколько хорошо Вы проверили, что ключ действительно принадлежит\n" "указанному выше человеку? Если не знаете, что ответить, введите \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Не буду отвечать.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Никакой проверки не было.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Была частичная проверка.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Проверка была очень тщательной.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Ваш выбор? (введите '?' для получения информации): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Вы уверены, что хотите подписать этот ключ\n" "своим ключом \"%s\" (%s)?\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Это будет самоподпись.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "ВНИМАНИЕ: подпись не будет помечена как неэкспортируемая.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "ВНИМАНИЕ: подпись не будет помечена как неотзываемая.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Подпись будет помечена как неэкспортируемая.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Подпись будет помечена как неотзываемая.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Этот ключ мной никак не проверялся.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Мной проведена поверхностная проверка этого ключа.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Этот ключ проверен мной очень тщательно.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Действительно подписать? (y/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "подписать не удалось: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "В ключе только заготовка или элементы для карты - пароля для изменения нет.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Данный ключ не защищен.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Закрытые части главного ключа отсутствуют.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Закрытые части главного ключа сохранены на карте.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Ключ защищен.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Данный ключ не редактируется: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Введите новую фразу-пароль для данного закрытого ключа.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "фраза-пароль повторена неверно; попробуйте еще раз" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Хотите обойтись без фразы-пароля? Скорее всего, это ПЛОХАЯ мысль!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Вы все равно хотите этого? (y/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "перемещение подписи ключа в нужное место\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "сохранить и выйти" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "показать отпечаток ключа" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "вывести список ключей и ID пользователя" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "выбрать ID пользователя N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "выбрать подключ N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "проверка подписей" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "подписать выбранные ID пользователя [* описание команд см. ниже]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "локально подписать выбранные ID пользователя" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "подписать выбранные ID пользователя подписью доверия" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "подписать выбранные ID пользователя без возможности отзыва" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "добавить ID пользователя" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "добавить фотоидентификатор" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "удалить выбранные ID пользователя" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "добавить подключ" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "добавить ключ на карту" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "переместить ключ на карту" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "переместить архивный ключ на карту" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "удалить выбранные подключи" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "добавить ключ отзыва" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "удалить подписи у выбранных ID пользователя" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "сменить срок действия ключа или выбранных подключей" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "пометить выбранный ID пользователя как главный" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "переключение между просмотром открытых и закрытых ключей" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "список предпочтений (экспертам)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "список предпочтений (подробный)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "установить список предпочтений для выбранных ID пользователя" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "установить URL предпочтительного сервера ключей для выбранных ID пользователя" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "установить примечание для выбранных ID пользователя" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "сменить фразу-пароль" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "изменить уровень доверия владельцу" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "отозвать подписи у выбранных ID пользователя" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "отозвать выбранные ID пользователя" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "отозвать ключ или выбранные подключи" #: g10/keyedit.c:1439 msgid "enable key" msgstr "подключить ключ" #: g10/keyedit.c:1440 msgid "disable key" msgstr "отключить ключ" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "показать выбранные фотоидентификаторы" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "сжать непригодные ID пользователей и удалить непригодные подписи из ключа" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "сжать непригодные ID пользователей и удалить все подписи из ключа" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "ошибка чтения закрытого блока ключа \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Закрытый ключ доступен.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Для данного действия нужен закрытый ключ.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Сначала воспользуйтесь командой \"toggle\".\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* У команды `sign' может быть приставка `l' (локальные подписи, lsign),\n" " `t' (подписи доверия, tsign), `nr' (неотзываемые, \n" " nrsign) или любое их сочетание (ltsign, tnrsign и т.д.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Ключ отозван." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Действительно подписать все ID пользователя? (y/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Подсказка: Выберите ID пользователей для подписи\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Неизвестный тип подписи `%s'\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Данная команда недопустима в режиме %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Вы должны выбрать хотя бы один ID пользователя.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Вы не можете удалить последний ID пользователя!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Действительно удалить все выбранные ID пользователей? (y/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Действительно удалить этот ID пользователя? (y/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Действительно удалить главный ключ? (y/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Вы должны выбрать хотя бы один ключ.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Команде нужен аргумент-имя файла\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Не могу открыть `%s': %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Ошибка чтения архивного ключа из `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Вы должны выбрать хотя бы один ключ.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Вы действительно хотите удалить выбранные ключи? (y/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Вы действительно хотите удалить данный ключ? (y/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Действительно отозвать все выбранные ID пользователей? (y/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Действительно отозвать данный ID пользователя? (y/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Вы действительно хотите отозвать ключ целиком? (y/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Вы действительно хотите отозвать выбранные подключи? (y/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Вы действительно хотите отозвать данный подключ? (y/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Нельзя присваивать степень доверия, когда таблица доверия указана " "пользователем\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Установить предпочтения в:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Действительно обновить предпочтения для выбранных ID пользователей? (y/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Действительно обновить предпочтения? (y/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Сохранить изменения? (y/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Выйти без сохранения? (y/N)" #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "сбой при обновлении: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "сбой при обновлений закрытого ключа: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Ключ не изменялся - обновление не нужно.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Хэш-функции: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Характеристики: " # check it #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Не изменять на сервере" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Предпочтительный сервер ключей: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Примечания: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "В ID пользователя типа PGP 2.x не может быть предпочтений.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Данный ключ был отозван %s пользователем %s ключом %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Данный ключ может быть отозван пользователем %s ключом %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(особо важный)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr " создан: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr " отозван: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr " просрочен с: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr " годен до: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "применимость: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "доверие: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "действительность: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Данный ключ отключен" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "номер карты: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Учтите, что показанная действительность ключа может быть неверной,\n" "пока Вы не перезапустите программу.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "отозван" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "просрочен" # check it #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "ВНИМАНИЕ: нет ID пользователя, помеченного как главный. Эта команда может\n" " привести к тому, что главным станет считаться другой ID " "пользователя.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "ВНИМАНИЕ: Срок действия Вашего подключа для шифрования истекает.\n" #: g10/keyedit.c:3008 msgid "You may want to change its expiration date too.\n" msgstr "Возможно, надо поменять также срок действия.\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "ВНИМАНИЕ: Это ключ PGP2. Добавление фотоидентификатора может в некоторых\n" " версиях PGP вызвать отбраковку ключа.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Вы уверены, что хотите добавить это? (y/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Нельзя добавить фотоидентификатор в ключ типа PGP2.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Удалить данную действительную подпись? (y/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Удалить данную недействительную подпись? (y/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Удалить данную неизвестную подпись? (y/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Действительно удалить данную самоподпись? (y/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Удалена %d подпись.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Удалено %d подписей.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Ничего не удалено.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "недопустимый" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "ID пользователя \"%s\" сжат: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "ID пользователя \"%s\": %d подпись удалена\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "ID пользователя \"%s\": %d подписей удалено\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "ID пользователя \"%s\" уже минимизирован\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "ID пользователя \"%s\" уже очищен\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "ВНИМАНИЕ: Это ключ типа PGP 2.x. Добавление особого отзывающего ключа\n" " может в некоторых версиях PGP вызвать выбраковку ключа.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Нельзя добавить особый отзывающий ключ в ключ типа PGP 2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Укажите ID пользователя ключа, назначенного отзывающим: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "нельзя назначить отзывающим ключ типа PGP 2.x\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "ключ не может быть назначен отзывающим самого себя\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "этот ключ уже назначен отзывающим\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "ВНИМАНИЕ: назначение ключа отзывающим невозможно отменить!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "Вы уверены, что хотите назначить данный ключ отзывающим? (y/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Снимите выделение с закрытых ключей.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Выделите не более одного подключа.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Смена срока действия подключа.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Смена срока действия главного ключа.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Нельзя изменить срок действия ключа v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Нет соответствующей подписи в таблице закрытых ключей\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "подписывающий подключ %s уже перекрестно заверен\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "подключ %s не для подписей, он не нуждается в перекрестном заверении\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Выберите ровно один ID пользователя.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "пропуск самоподписи v3 на ID пользователя \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Введите URL предпочтительного сервера ключей: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Вы действительно хотите заменить его? (y/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Вы действительно хотите удалить его? (y/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Введите примечание: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Продолжить (y/N)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Нет ID пользователя с индексом %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Нет ID пользователя с хэшем %s\n" # c-format #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Нет подключа с индексом %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "ID пользователя: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "подписано Вашим ключом %s %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (неэкспортируемая)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Срок действия подписи истек %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Вы уверены, что хотите отозвать? (y/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Создать сертификат отзыва для данной подписи? (y/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Вами не подписано.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Вы подписали эти ID пользователей на ключе %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (неотзываемая)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "отозвано Вашим ключом %s %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Вы отзываете следующие подписи:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Действительно создать сертификат отзыва? (y/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "нет закрытого ключа\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "ID пользователя \"%s\" уже отозван\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "ВНИМАНИЕ: подпись ID пользователя датирована %d секундами в будущем\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Ключ %s уже отозван.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Подключ %s уже отозван.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Показ фотоидентификатора %s размера %ld для ключа %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "предпочтение `%s' дублируется\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "слишком много шифровых предпочтений\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "слишком много предпочтений для хэш-функций\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "слишком много предпочтений для методов сжатия\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "недопустимое вхождение `%s' в строке предпочтений\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "запись прямой подписи\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "запись самоподписи\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "запись связывающей подписи\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "неверный размер ключа; используется %u бит\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "размер ключа округлен вверх до %u бит\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Подписать" #: g10/keygen.c:1365 msgid "Certify" msgstr "Сертифицировать" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Зашифровать" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Аутентифицировать" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "11223300" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Возможные действия для ключа %s: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Допустимы действия: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Переключить возможность использования для подписи\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Переключить возможность использования для шифрования\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Переключить возможность использования для аутентификации\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Завершено\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Выберите тип ключа:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA и RSA (по умолчанию)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA и Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (только для подписи)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (только для подписи)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (только для шифрования)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (только для шифрования)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (с требуемыми возможностями)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (с требуемыми возможностями)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "длина ключей %s может быть от %u до %u бит.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Какой размер подключа Вам необходим? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Какой размер ключа Вам необходим? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Запрошенный размер ключа - %u бит\n" #: g10/keygen.c:1722 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Выберите срок действия подписи.\n" " 0 = подпись без ограничения срока действия\n" " = срок действия подписи - n дней\n" " w = срок действия подписи - n недель\n" " m = срок действия подписи - n месяцев\n" " y = срок действия подписи - n лет\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Срок действия ключа? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Срок действия подписи? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "недопустимое значение\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Срок действия ключа не ограничен\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Срок действия подписи не ограничен\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Ключ действителен до %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Подпись действительна до %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Ваша система не может отображать даты после 2038 года.\n" "Однако даты до 2106 года будут обрабатываются верно.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Все верно? (y/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Для идентификации Вашего ключа необходим ID пользователя. Программа создаст " "его\n" "из Вашего имени, комментария и адреса электронной почты в виде:\n" " \"Baba Yaga (pensioner) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Ваше настоящее имя: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Недопустимый символ в имени\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Имя не должно начинаться с цифры\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Имя не должно быть короче 5 символов\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Адрес электронной почты: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Неправильный адрес электронной почты\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Комментарий: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Недопустимый символ в комментарии\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Используется таблица символов: `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Вы выбрали следующий ID пользователя:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" "Не вставляйте адрес электронной почты в имя пользователя или комментарий\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Сменить (N)Имя, (C)Комментарий, (E)адрес или (Q)Выход? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Сменить (N)Имя, (C)Комментарий, (E)адрес или (O)Принять/(Q)Выход? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Сначала исправьте ошибку\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Для защиты закрытого ключа необходима фраза-пароль.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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:2034 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:2899 msgid "Key generation canceled.\n" msgstr "Создание ключа прервано.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "сохранение открытого ключа в `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "сохранение заготовки закрытого ключа в `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "сохранение закрытого ключа в `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "нет доступной для записи таблицы открытых ключей: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "нет доступной для записи таблицы закрытых ключей: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "ошибка записи таблицы открытых ключей `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "ошибка записи таблицы закрытых ключей `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "открытый и закрытый ключи созданы и подписаны.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Учтите, что данный ключ не может использоваться для шифрования. Вы можете\n" "воспользоваться командой \"--edit-key\" и создать подключ для этих целей.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Сбой при создании ключа: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "ключ создан на %lu секунду в будущем (петля во времени или проблемы с " "часами)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "ключ создан на %lu секунд в будущем (петля во времени или проблемы с " "часами)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "ЗАМЕЧАНИЕ: создание подключа для ключей v3 не совместимо с OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Действительно создать? (y/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "сбой сохранения ключа на карту: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "не могу создать архивную копию, файл `%s': %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "ЗАМЕЧАНИЕ: архивная копия ключа на карте сохранена в `%s'\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "никогда " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Критические правила подписи: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Правила подписи: " # check it #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Критический предпочтительный сервер ключей: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Критическое примечание к подписи: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Примечание к подписи: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Таблица ключей" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Отпечаток главного ключа:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Отпечаток подключа:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Отпечаток главного ключа:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Отпечаток подключа:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Отпечаток ключа =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Серийный номер карты =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "сбой при переименовании `%s' в `%s': %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "ВНИМАНИЕ: Существуют 2 файла с конфиденциальной информацией.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s - без изменений\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s - новый\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Исправьте эту возможную прореху безопасности\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "буферирование таблицы ключей `%s'\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu ключей помещено в буфер за это время (%lu подписей)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu ключей помещено в буфер (%lu подписей)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: таблица ключей создана\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "включить в результаты поиска отозванные ключи" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "искать по ID ключа, включая подключи" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "передавать данные в сервер с помощью временных файлов" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "не удалять временные файлы после использования" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "автоматически получать ключи при проверке подписей" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "учитывать набор URL предпочтительных серверов ключей для этого ключа" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "учитывать набор записей PKA при получении ключей" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "ВНИМАНИЕ: параметр сервера ключей `%s' на данной платформе не используется\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "отключен" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Введите числа, N) Следующий или Q) Выход> " # test it #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "непригодный протокол сервера ключей (ожидается %d, получено %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "ключ \"%s\" не найден на сервере ключей\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "ключ не найден на сервере ключей\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "запрашиваю ключ %s с сервера %s %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "получение ключа %s с %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "поиск имен на сервере %s %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "поиск имен на %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "отправляю ключ %s на сервер %s %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "отправка ключа %s на %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "поиск \"%s\" на сервере %s %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "поиск \"%s\" на %s\n" # test it #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "неизвестное действие сервера!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "ВНИМАНИЕ: обработчик сервера ключей от другой версии GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "сервер ключей не прислал VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "ошибка связи с сервером ключей: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "не заданы серверы ключей (используйте --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "данная сборка не поддерживает внешние вызовы для сервера ключей\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "нет обработчика для схемы сервера ключей `%s'\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "действие `%s' не поддерживается серверами ключей `%s'\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s не поддерживает версию обработчика %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "превышено время ожидания сервера ключей\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "внутренняя ошибка сервера ключей\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" не идентификатор ключа: пропущен\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "ВНИМАНИЕ: невозможно обновить ключ %s с %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "обновление 1 ключа из %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "обновление %d ключей из %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "ВНИМАНИЕ: невозможно получить URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "ВНИМАНИЕ: невозможно интерпретировать URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "странный размер зашифрованного сеансового ключа (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "сеансовый ключ зашифрован %s\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "фраза-пароль создана с незнакомой хэш-функцией %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "открытый ключ %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "данные зашифрованы открытым ключом: правильный DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "зашифровано %u-битным ключом %s с ID %s, созданным %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "зашифровано ключом %s с ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "сбой расшифровки с открытым ключом: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "зашифровано с %lu фразами-паролями\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "зашифровано с 1 фразой-паролем\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "предполагаются данные, зашифрованные по %s\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "шифр IDEA недоступен, попробую использовать взамен %s\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "расшифровано\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "ВНИМАНИЕ: целостность сообщения не защищена\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "ВНИМАНИЕ: зашифрованное сообщение было изменено!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "сбой расшифровки: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "ЗАМЕЧАНИЕ: отправитель запросил \"только между нами\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "первоначальное имя файла='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "ВНИМАНИЕ: наблюдается несколько текстов\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "отдельный сертификат отзыва: задействуется командой \"gpg --import\"\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "подпись не найдена\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "проверка подписи подавлена\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "не могу обработать эти неоднозначные данные подписи\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Подпись сделана %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " ключом %s с ID %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Подпись создана %s ключом %s с ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Ключ доступен на: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "ПЛОХАЯ подпись от \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Просроченная подпись от \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Действительная подпись от \"%s\"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[сомнительно]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " или \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Подпись просрочена %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Подпись действительна до %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "подпись в %s форме, хэш-функция %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "двоичной" #: g10/mainproc.c:1947 msgid "textmode" msgstr "текстовой" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "неизвестной" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "ВНИМАНИЕ: это не отделенная подпись; файл '%s' НЕ проверялся!\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Не могу проверить подпись: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "не отделенная подпись\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "ВНИМАНИЕ: обнаружено несколько подписей. Проверена будет только первая.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "отдельная подпись класса 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "подпись старого типа (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "обнаружен недопустимый корневой пакет в proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "не могу отключить создание файла копии образа памяти: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "сбой fstat `%s' в функции %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "сбой fstat(%d) в функции %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "" "ВНИМАНИЕ: используется экспериментальный алгоритм шифрования с открытым " "ключом %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "ВНИМАНИЕ: Ключи для подписи+шифрования Elgamal не рекомендуются\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "" "ВНИМАНИЕ: используется экспериментальный алгоритм симметричного шифрования " "%s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "ВНИМАНИЕ: используется экспериментальная хэш-функция %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "ВНИМАНИЕ: хэш-функция %s не рекомендуется\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "за подробностями обращайтесь к %s\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "ЗАМЕЧАНИЕ: эта функция недоступна в %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: параметр \"%s\" не рекомендуется\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "ВНИМАНИЕ: параметр \"%s\" не рекомендуется\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "используйте вместо этого \"%s%s\"\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "" "ВНИМАНИЕ: команда \"%s\" не рекомендуется к употреблению - не применяйте ее\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Без сжатия" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "без сжатия|без|none" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "данное сообщение может быть непригодно для %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "неоднозначный параметр `%s'\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "неизвестный параметр `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Неизвестный тип подписи `%s'\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Файл `%s' существует. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Записать поверх (y/N)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: неизвестное окончание\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Введите новое имя файла" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "вывод в stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "предполагается, что подписанные данные находятся в `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "создан новый файл настроек `%s'\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "ВНИМАНИЕ: параметры в `%s' при этом запуске еще не действуют\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "создан каталог `%s'\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "не могу использовать алгоритм с открытым ключом %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "ВНИМАНИЕ: потенциально небезопасный сеансовый ключ,\n" " зашифрованный симметричным шифром\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "в подпакете типа %d установлен критический бит\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent в данном сеансе недоступен\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "неправильная переменная окружения GPG_AGENT_INFO\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "протокол gpg-agent версии %d не поддерживается\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "не могу подключиться к `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "проблема с агентом - агент использоваться не будет\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (ID главного ключа %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Необходима фраза-пароль для доступа к закрытому ключу пользователя:\n" "\"%.*s\"\n" "%u-бит %s ключ, ID %s, создан %s пользователем%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Повторите фразу-пароль\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Введите фразу-пароль\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "прервано пользователем\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "не могу получить фразу-пароль в пакетном режиме\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Введите фразу-пароль: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Необходима фраза-пароль для доступа к закрытому ключу пользователя: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-битный ключ %s, ID %s, создан %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (подключ на главном ключе %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Повторите фразу-пароль: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Выберите изображение для Вашего фотоидентификатора. Это должен быть файл " "JPEG.\n" "Помните, что изображение будет храниться в Вашем открытом ключе и увеличит\n" "его размер! Рекомендуется размер около 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Введите имя файла JPEG для фотоидентификатора: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "не могу открыть файл JPEG `%s': %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Этот JPEG очень велик (%d байт)!\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Вы действительно хотите использовать его? (y/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "`%s' - не файл JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Это правильная фотография (y/N/q)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "программа просмотра фотографий не задана\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "не могу отобразить фотоидентификатор!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Причина не указана" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Ключ заменен другим" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Ключ был раскрыт" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Ключ больше не используется" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "ID пользователя больше не действителен" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "причина отзыва: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "пояснение к отзыву: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Не задано значение доверия для:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " или \"%s\"\n" # test it #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Насколько Вы уверены, что данный ключ принадлежит названному пользователю?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Не знаю или не буду отвечать\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = НЕ доверяю\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Абсолютно доверяю\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = вернуться в главное меню\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = пропустить этот ключ\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = выход\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Минимальный уровень доверия данному ключу: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Ваше решение? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Вы действительно хотите сделать этот ключ абсолютно доверенным? (y/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Сертификаты, приводящие к абсолютно доверенному ключу:\n" # test it #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: Нет свидетельств того, что данный ключ принадлежит названному " "пользователю\n" # test it #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Мало свидетельств того, что данный ключ принадлежит названному " "пользователю\n" # test it #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Этот ключ, вероятно, принадлежит названному пользователю\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Данный ключ принадлежит нам\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "НЕТ уверенности в том, что ключ принадлежит человеку, указанному\n" "в ID пользователя ключа. Если Вы ТОЧНО знаете, что делаете,\n" "можете ответить на следующий вопрос утвердительно.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Все равно использовать данный ключ? (y/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "ВНИМАНИЕ: Использование недоверенного ключа!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "ВНИМАНИЕ: возможно, данный ключ отозван (ключ отзыва отсутствует)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "ВНИМАНИЕ: Данный ключ отозван ключом, назначенным отзывающим!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "ВНИМАНИЕ: Данный ключ отозван его владельцем!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Это может означать, что подпись поддельная.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "ВНИМАНИЕ: Данный подключ был отозван его владельцем!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Замечание: Данный ключ отключен.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Замечание: Проверенный адрес подписавшего - `%s'\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Замечание: Адрес подписавшего `%s' не соответствует данным DNS\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "уровень доверия установлен в ПОЛНЫЙ по действительным данным PKA\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "уровень доверия установлен в НИКОГДА из-за непригодных данных PKA\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Замечание: Данный ключ просрочен!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "ВНИМАНИЕ: Данный ключ не заверен доверенной подписью!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Нет указаний на то, что подпись принадлежит владельцу.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "ВНИМАНИЕ: НЕТ ДОВЕРИЯ данному ключу!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Возможно, что подпись ПОДДЕЛАНА.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "ВНИМАНИЕ: Этот ключ не заверен достаточным количеством доверенных подписей!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Нет уверенности в том, что подпись принадлежит владельцу.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: пропущено: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: пропущено: открытый ключ уже существует\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Не задан ID пользователя (можно использовать \"-r\").\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Текущие получатели:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Введите ID пользователя. Пустая строка для завершения: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Нет такого ID пользователя.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "пропущено: открытый ключ уже установлен для получателя по умолчанию\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Открытый ключ отключен.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "пропущено: открытый ключ уже установлен\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "неизвестный получатель по умолчанию \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: пропущено: открытый ключ отключен\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "нет пригодных адресов\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "данные не сохранены; используйте \"--output\" для сохранения\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "ошибка создания `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Отделенная подпись.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Введите имя файла с данными: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "читаю stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "нет подписанных данных\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "не могу открыть подписанные данные `%s'\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "анонимный получатель; пробую закрытый ключ %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "Отлично, мы - анонимный получатель.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "старое шифрование DEK не поддерживается\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "алгоритм шифрования %d%s неизвестен или отключен\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" "ВНИМАНИЕ: алгоритм шифрования %s не найден в списке предпочтений получателя\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "ЗАМЕЧАНИЕ: закрытый ключ %s просрочен с %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "ЗАМЕЧАНИЕ: ключ был отозван" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "сбой build_packet: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "у ключа %s нет ID пользователя\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Будет отозван:\n" # check it #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Это особо важный ключ отзыва)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Создать сертификат отзыва данного ключа? (y/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Для вывода использован текстовый формат ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "сбой make_keysig_packet: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Сертификат отзыва создан.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "ключи отзыва для \"%s\" не найдены\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "закрытый ключ \"%s\" не найден: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "нет соответствующего открытого ключа: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "открытый ключ не соответствует закрытому!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Создать сертификат отзыва данного ключа? (y/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "неизвестный алгоритм защиты\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "ЗАМЕЧАНИЕ: Данный ключ не защищен!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Сертификат отзыва создан.\n" "\n" "Поместите его в надежное место; если посторонний получит доступ\n" "к данному сертификату, он может использовать его, чтобы сделать\n" "Ваш ключ непригодным к использованию. Можно распечатать данный\n" "сертификат и спрятать подальше на случай, если Ваш основной\n" "носитель будет поврежден, но будьте осторожны: система печати\n" "Вашей машины может сохранить данные и сделать их доступными для других!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Укажите причину отзыва:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Отмена" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Скорее всего, Вы здесь выберете %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Введите необязательное пояснение; закончите пустой строкой:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Причина отзыва: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Пояснения отсутствуют)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Все правильно? (y/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "закрытая часть ключа недоступна\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "метод защиты %d%s не поддерживается\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "метод защиты %d не поддерживается\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Неверная фраза-пароль; попробуйте еще раз" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "ВНИМАНИЕ: обнаружен слабый ключ - смените фразу-пароль еще раз.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "создание нерекомендуемой 16-битной контрольной суммы для защиты ключа\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "создан слабый ключ - повторение\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "невозможно избежать слабого ключа для симметричного шифра; %d попыток!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA требует длины хэша, кратной 8 битам\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "Ключ DSA %s использует небезопасный (%u-битный) хэш\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "Ключ DSA %s требует %u-битного или более длинного хэша\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "ВНИМАНИЕ: конфликт хэшей подписей в сообщении\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "ВНИМАНИЕ: подписывающий подключ %s не был перекрестно заверен\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "ВНИМАНИЕ: подписывающий подключ %s неправильно перекрестно заверен\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "открытый ключ %s на %lu секунд новее подписи\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "открытый ключ %s на %lu секунд новее подписи\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "ключ %s создан на %lu секунд в будущем (петля во времени или проблемы с " "часами)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "ключ %s создан на %lu секунд в будущем (петля во времени или проблемы с " "часами)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "ЗАМЕЧАНИЕ: срок действия подписавшего ключа %s истек %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "подпись в %s форме, хэш-функция %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "подпись ключа %s считается плохой из-за неизвестного критического бита\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "ключ %s: нет подключа для отзывающей подписи подключа\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "ключ %s: нет подключа для подписи связи подключей\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "ВНИМАНИЕ: не могу развернуть %% в примечании (слишком длинное).\n" " Использую неразвернутым.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "ВНИМАНИЕ: не могу развернуть %% в URL правил (слишком длинный). Использую " "неразвернутым.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "ВНИМАНИЕ: невозможно развернуть %% в URL предпочтительного сервера ключей " "(слишком длинно). Использую неразвернутым.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "сбой проверки созданной подписи: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s подпись от: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "ключом типа PGP 2.x в режиме --pgp2 можно делать только отделенные подписи\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "ВНИМАНИЕ: использование хэш-функции %s (%d) нарушает предпочтения " "получателя\n" #: g10/sign.c:960 msgid "signing:" msgstr "подпись:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "ключом типа PGP 2.x в режиме --pgp2 можно делать только текстовые подписи\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "будет использовано шифрование %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "ключ не помечен как небезопасный - не могу использовать его с фальшивым " "генератором случайных чисел!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "пропущено \"%s\": дубликат\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "пропущено \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "пропущено: закрытый ключ уже имеется\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "это ключ Elgamal, созданный PGP, он не обеспечивает безопасность подписи!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "запись о доверии %lu, тип %d: ошибка записи: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Список присвоенных значений доверия создан %s\n" "# (Используйте \"gpg --import-ownertrust\" для их восстановления)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "ошибка в `%s': %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "слишком длинная строка" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "пропущено двоеточие" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "неверный отпечаток" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "пропущено значение степени доверия владельцу" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "ошибка при поиске записи о доверии в `%s': %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "ошибка чтения в `%s': %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "таблица доверия: сбой синхронизации: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "невозможно создать блокировку для `%s'\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "невозможно заблокировать `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "таблица доверия, запись %lu: сбой lseek: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "таблица доверия, запись %lu: сбой записи (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "слишком длинная транзакция таблицы доверия\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "нет доступа к `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: каталог не существует!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: сбой создания записи о версии: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: создана непригодная таблица доверия\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: создана таблица доверия\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "ЗАМЕЧАНИЕ: таблица доверия недоступна для записи\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: непригодная таблица доверия\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: сбой создания таблицы хэшей: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: ошибка обновления записи о версии: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: ошибка чтения записи о версии: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: ошибка сохранения записи о версии: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "таблица доверия: сбой lseek: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "таблица доверия: сбой чтения (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: не является файлом таблицы доверия\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: запись о версии с номером записи %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: неправильная версия файла %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: ошибка чтения свободной записи: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: ошибка внесения записи каталога: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: сбой обнуления записи: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: сбой добавления записи: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Ошибка: таблица доверия повреждена.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "не могу обработать строки текста длиннее %d символов\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "строка ввода длиннее %d символов\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' не является допустимым длинным ID ключа\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "ключ %s: принят как доверенный ключ\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "ключ %s встречается в таблице доверия более одного раза\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "ключ %s: нет открытого ключа для доверенного ключа - пропущен\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "ключ %s помечен как абсолютно доверенный.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "запись о доверии %lu, тип запроса %d: сбой чтения: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "запись о доверии %lu не запрашиваемого типа %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "Можно попытаться пересоздать таблицу доверия командами:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Если это не выйдет, обратитесь к руководству пользователя\n" # check it #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "не могу использовать неизвестную модель (%d) - использую модель доверия %s\n" # check it #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "использую модель доверия %s\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "12 translator see trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ отозвано]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[просрочено]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[неизвестно]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ неопредел]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[ ограничен]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ полное ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[абсолютное]" #: g10/trustdb.c:553 msgid "undefined" msgstr "неопределенное" #: g10/trustdb.c:554 msgid "never" msgstr "никогда" #: g10/trustdb.c:555 msgid "marginal" msgstr "ограниченное" #: g10/trustdb.c:556 msgid "full" msgstr "полное" #: g10/trustdb.c:557 msgid "ultimate" msgstr "абсолютное" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "проверка таблицы доверия не нужна\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "срок следующей проверки таблицы доверия %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "проверять таблицу доверия при модели доверия `%s' не нужно\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "обновлять таблицу доверия при модели доверия `%s' не нужно\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "открытый ключ %s не найден: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "выполните --check-trustdb, пожалуйста\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "проверка таблицы доверия\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d ключей обработано (%d счетчиков пригодности очищено)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "не найдено абсолютно доверенных ключей\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "открытый ключ для абсолютно доверенного ключа %s не найден\n" # check it #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "требуется %d с ограниченным доверием, %d с полным, модель доверия %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "глубина: %d верных: %3d подписанных: %3d доверие: %d-, %dq, %dn, %dm, " "%df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "невозможно обновить запись о версии таблицы доверия: ошибка записи: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "Не могу проверить подпись.\n" "Файл подписи (.sig или .asc) должен быть\n" "указан в командной строке первым.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "слишком длинная входная строка %u или пропущен перевод строки\n" #: util/errors.c:53 msgid "general error" msgstr "общая ошибка" #: util/errors.c:54 msgid "unknown packet type" msgstr "неизвестный тип пакета" #: util/errors.c:55 msgid "unknown version" msgstr "неизвестная версия" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "неизвестный алгоритм с открытым ключом" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "неизвестная хэш-функция" #: util/errors.c:58 msgid "bad public key" msgstr "плохой открытый ключ" #: util/errors.c:59 msgid "bad secret key" msgstr "плохой закрытый ключ" #: util/errors.c:60 msgid "bad signature" msgstr "подпись неверна" #: util/errors.c:61 msgid "checksum error" msgstr "несоответствие контрольной сумме" #: util/errors.c:62 msgid "bad passphrase" msgstr "плохая фраза-пароль" #: util/errors.c:63 msgid "public key not found" msgstr "открытый ключ не найден" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "неизвестный алгоритм шифрования" #: util/errors.c:65 msgid "can't open the keyring" msgstr "не могу открыть таблицу ключей" #: util/errors.c:66 msgid "invalid packet" msgstr "неправильный пакет" #: util/errors.c:67 msgid "invalid armor" msgstr "неправильный текстовый формат" #: util/errors.c:68 msgid "no such user id" msgstr "нет такого ID пользователя" #: util/errors.c:69 msgid "secret key not available" msgstr "закрытый ключ не найден" #: util/errors.c:70 msgid "wrong secret key used" msgstr "использован неправильный закрытый ключ" #: util/errors.c:71 msgid "not supported" msgstr "не поддерживается" #: util/errors.c:72 msgid "bad key" msgstr "плохой ключ" #: util/errors.c:73 msgid "file read error" msgstr "ошибка чтения файла" #: util/errors.c:74 msgid "file write error" msgstr "ошибка записи в файл" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "неизвестный алгоритм сжатия" #: util/errors.c:76 msgid "file open error" msgstr "ошибка открытия файла" #: util/errors.c:77 msgid "file create error" msgstr "ошибка создания файла" #: util/errors.c:78 msgid "invalid passphrase" msgstr "неверная фраза-пароль" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "нереализованный алгоритм с открытым ключом" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "нереализованный алгоритм шифрования" #: util/errors.c:81 msgid "unknown signature class" msgstr "неизвестный класс подписи" #: util/errors.c:82 msgid "trust database error" msgstr "ошибка в таблице доверия" #: util/errors.c:83 msgid "bad MPI" msgstr "плохой MPI" #: util/errors.c:84 msgid "resource limit" msgstr "нехватка ресурсов" #: util/errors.c:85 msgid "invalid keyring" msgstr "неправильная таблица ключей" #: util/errors.c:86 msgid "bad certificate" msgstr "плохой сертификат" #: util/errors.c:87 msgid "malformed user id" msgstr "неправильно сформированный ID пользователя" #: util/errors.c:88 msgid "file close error" msgstr "ошибка закрытия файла" #: util/errors.c:89 msgid "file rename error" msgstr "ошибка переименования файла" #: util/errors.c:90 msgid "file delete error" msgstr "ошибка удаления файла" #: util/errors.c:91 msgid "unexpected data" msgstr "неожиданные данные" #: util/errors.c:92 msgid "timestamp conflict" msgstr "противоречие метке времени" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "неприменимый алгоритм открытого ключа" #: util/errors.c:94 msgid "file exists" msgstr "файл существует" #: util/errors.c:95 msgid "weak key" msgstr "слабый ключ" #: util/errors.c:96 msgid "invalid argument" msgstr "недопустимый аргумент" #: util/errors.c:97 msgid "bad URI" msgstr "плохой URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI не поддерживается" #: util/errors.c:99 msgid "network error" msgstr "ошибка сети" #: util/errors.c:101 msgid "not encrypted" msgstr "не зашифровано" #: util/errors.c:102 msgid "not processed" msgstr "не выполнено" #: util/errors.c:104 msgid "unusable public key" msgstr "непригодный открытый ключ" #: util/errors.c:105 msgid "unusable secret key" msgstr "непригодный закрытый ключ" #: util/errors.c:106 msgid "keyserver error" msgstr "ошибка сервера ключей" #: util/errors.c:107 msgid "canceled" msgstr "отменено" #: util/errors.c:108 msgid "no card" msgstr "нет карты" #: util/errors.c:109 msgid "no data" msgstr "нет данных" #: util/logger.c:183 msgid "ERROR: " msgstr "ОШИБКА: " #: util/logger.c:186 msgid "WARNING: " msgstr "ВНИМАНИЕ: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr " ... это ошибка в программе (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Вы нашли ошибку в программе ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "да|yes" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "нет|no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "выход|quit" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "готово|okay" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "отбой|cancel" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "ВНИМАНИЕ: используется незащищенная память!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "подробности см. на https://www.gnupg.org/documentation/faqs.html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "операция невозможна без инициализации защищенной памяти\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(возможно, Вы используете для этой задачи не ту программу)\n" #~ msgid "ID пользователя \"%s\" is expired." #~ msgstr "ID пользователя \"%s\" просрочен." #~ msgid "ID пользователя \"%s\" is not self-signed." #~ msgstr "ID пользователя \"%s\" без самоподписи." #~ msgid "ID пользователя \"%s\" is signable. " #~ msgstr "ID пользователя \"%s\" можно подписать." #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "ВНИМАНИЕ: небезопасный владелец файла модуля расширения `%s'\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "" #~ "ВНИМАНИЕ: небезопасные права доступа к файлу модуля расширения `%s'\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "ВНИМАНИЕ: небезопасный владелец каталога содержащего модуль расширения `" #~ "%s'\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "ВНИМАНИЕ: небезопасные права доступа к каталогу содержащему файл модуля " #~ "расширения `%s'\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "расширение шифра `%s' не загружено вследствие небезопасных прав доступа\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "модуль поддержки шифра IDEA не обнаружен\n" #~ msgid "Command> " #~ msgstr "Команда> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "Пара ключей DSA будет иметь длину %u бит.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "таблица доверия повреждена; запустите \"gpg --fix-trustdb\".\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|Административный PID" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "невозможно добавить примечание в v3 (PGP 2.x стиля) подпись\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "невозможно добавить примечание в v3 (PGP 2.x стиля) подпись ключа\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "невозможно добавить URL правил в v3 (PGP 2.x стиля) подпись\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "нельзя ставить URL правил в v3 (PGP 2.x стиля) подписи\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA требует использования 160-битной хэш-функции\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "смотрите подробности на http://www.gnupg.org/why-not-idea.html\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "имя примечания должно содержать только печатные символы или пробелы,и " #~ "заканчиваться знаком '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "имя примечания пользователя должно содержать '@' символ\n" #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "имя пользователя не должно содержать более одного символа '@'\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "значение примечания не должно содержать управляющие символы\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "ВНИМАНИЕ: найдена недопустимая форма записи данных\n" #~ msgid "not human readable" #~ msgstr "не для чтения человеком" #~ msgid "expired: %s)" #~ msgstr "просрочен с: %s)" gnupg-1.4.20/po/boldquot.sed0000644000175000017500000000033112516175025012604 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g gnupg-1.4.20/po/et.po0000644000175000017500000057734712635457220011262 00000000000000# Estonian translations for gnupg. # Copyright (C) 2001, 2002 Free Software Foundation, Inc. # Toomas Soome , 2003. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.2.2\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:22+0200\n" "Last-Translator: Toomas Soome \n" "Language-Team: Estonian \n" "Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8-bit\n" #: cipher/primegen.c:119 #, fuzzy, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "vhem kui %d bitiga ei saa algarvu genereerida\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "vhem kui %d bitiga ei saa algarvu genereerida\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "entroopia kogumise moodul puudub\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "`%s' ei nnestu avada\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "kirjutan salajase vtme faili `%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "`%s' ei nnestu avada: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "ei nnestu lugeda `%s' atribuute: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' ei ole tavaline fail - ignoreerin\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "mrkus: random_seed fail on thi\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "HOIATUS: vigane random_seed faili suurus - ei kasuta\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "`%s' ei nnestu lugeda: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "mrkus: random_seed faili ei uuendatud\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "`%s' ei nnestu luua: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "`%s' ei nnestu kirjutada: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "`%s' ei nnestu sulgeda: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "HOIATUS: kasutan ebaturvalist juhuarvude generaatorit!!\n" #: cipher/random.c:894 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 "" "Juhuarvude generaator on ainult thi kest, et programmid\n" "kiks - see EI OLE tugev juhuarvude generaator!\n" "\n" "RGE KASUTAGE SELLE PROGRAMMI POOLT GENEREERITUD ANDMEID!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Palun oodake, kogutakse entroopiat. Igavuse vltimiseks vite teha arvutiga\n" "mingit td, see tstab ka entroopia kvaliteeti.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Juhuslikke baite ei ole piisavalt. Palun tehke arvutiga muid tid,\n" "et anda masinal vimalust koguda enam entroopiat! (Vajatakse %d baiti)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "TrustDB initsialiseerimine ebannestus: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "vtmehoidla vahemlu uuesti loomine ebannestus: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "vtmebloki kustutamine ebannestus: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "vtmeserverile saatmine ebannestus: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "salajase vtme komponendid ei ole kttesaadavad\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Palun valige thistamise phjus:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "viga parooli loomisel: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "viga vtmebloki lugemisel: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: viga vaba kirje lugemisel: %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "`%s' on juba pakitud\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "genereeri uus vtmepaar" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "genereeri uus vtmepaar" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "TrustDB initsialiseerimine ebannestus: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "vtmebloki kustutamine ebannestus: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "Vtme genereerimine ebannestus: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "%s allkiri, snumilhendi algoritm %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "ei leia OpenPGP andmeid.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "pakend: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "vigane pakendi pis: " #: g10/armor.c:459 msgid "armor header: " msgstr "pakendi pis: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "vigane avateksti allkirja pis\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "pakendi pis: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "avateksti allkirjad ksteise sees\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "ootamatu pakend:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "vigane kriipsudega mrgitud rida: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "vigane radix64 smbol %02x vahele jetud\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "enneaegne faililpp (puudub CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "enneaegne faililpp (poolik CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "vigane CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC viga; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "enneaegne faililpp (lpetaval real)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "viga lpetaval real\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "ei leia OpenPGP andmeid.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "vigane pakend: rida on pikem, kui %d smbolit\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "kvooditud smbol pakendis - tenoliselt on kasutatud vigast MTA programmi\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "salajane vti ei ole kttesaadav" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "seda ei saa teha pakettmoodis\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "See ksklus ei ole %s moodis lubatud.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Teie valik? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr "Phjus puudub" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "ei tdeldud" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "vastavat avalikku vtit pole: %s\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "viga vtmehoidla `%s' loomisel: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "viga `%s' lugemisel: %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "viga `%s' loomisel: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "uuendatud eelistused" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "lubamatu smbol eelistuste snes\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "lubamatu smbol eelistuste snes\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "viga: vigane srmejlg\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "nita srmejlge" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "viga: vigane srmejlg\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "Vtme genereerimine ebannestus: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "ei leia OpenPGP andmeid.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "viga salajase vtme vtmehoidlasse `%s' kirjutamisel: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Millist vtmepikkust te soovite? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Millist vtmepikkust te soovite? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Millist vtmepikkust te soovite? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "mardatud les %u bitini\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "viga salajase vtmebloki `%s' lugemisel: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "jtsin vahele: avalik vti on juba olemas\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Palun valige, millist vtmetpi te soovite:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "Allkiri aegus %s\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (ainult krpteerimiseks)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Vigane valik.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Palun valige thistamise phjus:\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "tundmatu kaitsealgoritm\n" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "Primaarse vtme salajased komponendid ei ole kttesaadavad.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "jtsin vahele: avalik vti on juba olemas\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "viga vtmehoidlasse `%s' kirjutamisel: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "vlju sellest menst" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "vastuolulised ksud\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "nita seda abiinfot" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Vtme leiate: " #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "muuda aegumise kuupeva" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "muuda omaniku usaldust" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "nita srmejlge" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "genereeri uus vtmepaar" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "vastuolulised ksud\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "vastuolulised ksud\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "kirjutan salajase vtme faili `%s'\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Vigane ksklus (proovige \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "salajane vti ei ole kttesaadav" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "vtmebloki kustutamine ebannestus: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Korrake parooli: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "parooli ei korratud ieti; proovige uuesti" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "`%s' ei nnestu avada\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "vti --output ei tta selle ksuga\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "vtit '%s' ei leitud: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "viga vtmebloki lugemisel: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(kui te just ei mra vtit srmejljega)\n" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "pakettmoodis ei nnestu seda teha vtmeta \"--yes\"\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Kustutan selle vtme vtmehoidlast? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "See on salajane vti! - kas kustutan testi? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "vtmebloki kustutamine ebannestus: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "omaniku usalduse info puhastatud\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "avaliku vtme \"%s\" jaoks on salajane vti!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "selle kustutamiseks kasutage vtit \"--delete-secret-keys\".\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "viga parooli loomisel: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "S2K moodi tttu ei saa smmeetrilist ESK paketti kasutada\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "kasutan iffrit %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' on juba pakitud\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "HOIATUS: `%s' on thi fail\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "RSA vtmeid pikkusega kuni 2048 bitti saab krpteerida ainult --pgp2 moodis\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "loen failist `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "kikide krpteeritavate vtmetega ei saa IDEA iffrit kasutada.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "smmetrilise ifri %s (%d) kasutamine on vastuolus saaja eelistustega\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "pakkimise algoritmi %s (%d) kasutamine on vastuolus saaja eelistustega\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "smmetrilise ifri %s (%d) kasutamine on vastuolus saaja eelistustega\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "%s ei ole moodis %s lubatud.\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s krptitud kasutajale: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s krpteeritud andmed\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "krpteeritud tundmatu algoritmiga %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "HOIATUS: teade on krptitud smmeetrilise ifri nrga vtmega.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "probleem krptitud paketi ksitlemisel\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "mittelokaalse programmi kivitamist ei toetata\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "kataloogi `%s' ei nnestu luua: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "vliste programmide kivitamine on blokeeritud, kuna seadete failil on\n" "ebaturvalised igused\n" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "" "see platvorm nuab vliste programmide kivitamiseks ajutiste failide " "kasutamist\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "ei nnestu kivitada %s \"%s\": %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "ei nnestu kivitada %s \"%s\": %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "ssteemi viga vlise programmi kasutamisel: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "vline programm lpetas erandlikult\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "vlist programmi ei nnestu kivitada\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "ei nnestu lugeda vlise programmi vastust: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "HOIATUS: ei saa kustutada ajutist faili (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "HOIATUS: ei nnestu eemaldada ajutist kataloogi `%s': %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "Allkiri mrgitakse kehtetuks mitte-tunnistatavaks.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr "" "`%s' jaoks pole thistamise vtmeid\n" "\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "thista sekundaarne vti" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "mittekasutatav salajane vti" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "kirjutan salajase vtme faili `%s'\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "vti %08lX: ei ole kaitstud - jtsin vahele\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "vti %08lX: PGP 2.x stiilis vti - jtsin vahele\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "vti %08lX: alamvtme allkiri on vales kohas - jtan vahele\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "TrustDB initsialiseerimine ebannestus: %s\n" #: g10/export.c:563 #, fuzzy, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "HOIATUS: salajases vtmes %08lX puudub lihtne SK kontrollsumma\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "HOIATUS: midagi ei eksporditud\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Ksud:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[fail]|loo allkiri" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[fail]|loo avateksti allkiri" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "loo eraldiseisev allkiri" #: g10/gpg.c:393 msgid "encrypt data" msgstr "krpteeri andmed" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "krpteerimine kasutades ainult smmeetrilist ifrit" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "dekrpteeri andmed (vaikimisi)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "kontrolli allkirja" #: g10/gpg.c:401 msgid "list keys" msgstr "nita vtmeid" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "nita vtmeid ja allkirju" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "kontrolli vtmete allkirju" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "nita vtmeid ja srmejlgi" #: g10/gpg.c:406 msgid "list secret keys" msgstr "nita salajasi vtmeid" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "genereeri uus vtmepaar" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "eemalda vtmed avalike vtmete hoidlast" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "eemalda vtmed salajaste vtmete hoidlast" #: g10/gpg.c:411 msgid "sign a key" msgstr "allkirjasta vti" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "allkirjasta vti lokaalselt" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "allkirjasta vi toimeta vtit" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "genereeri thistamise sertifikaat" #: g10/gpg.c:416 msgid "export keys" msgstr "ekspordi vtmed" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "ekspordi vtmed vtmeserverisse" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "impordi vtmed vtmeserverist" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "otsi vtmeid vtmeserverist" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "uuenda vtmeid vtmeserverist" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "impordi/mesti vtmed" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "uuenda usalduse andmebaasi" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [failid]|trki teatelhendid" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Vtmed:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "loo ascii pakendis vljund" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NIMI|krpti NIMEle" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "kasuta seda kasutaja IDd" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|mra pakkimise tase N (0 blokeerib)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "kasuta kanoonilist tekstimoodi" #: g10/gpg.c:486 msgid "use as output file" msgstr "kasuta vljundfailina" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "ole jutukas" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "ra tee mingeid muutusi" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "ksi enne lekirjutamist" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Kikide kskude ja vtmete tieliku kirjelduse leiate manualist)\n" #: g10/gpg.c:576 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" "Nited:\n" "\n" " -se -r Bob [fail] allkirjasta ja krpti kasutajale Bob\n" " --clearsign [fail] loo avateksti allkiri\n" " --detach-sign [fail] loo eraldiseisev allkiri\n" " --list-keys [nimed] nita vtmeid\n" " --fingerprint [nimed] nita srmejlgi\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Palun saatke veateated aadressil .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Kasuta: gpg [vtmed] [failid] (-h nitab abiinfot)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Sntaks: gpg [vtmed] [failid]\n" "allkirjasta, kontrolli, krpti ja dekrpti\n" "vaikimisi operatsioon sltub sisendandmetest\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Toetatud algoritmid:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Avalik vti: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "iffer: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Rsi: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Pakkimine: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "kasuta: gpg [vtmed] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "vastuolulised ksud\n" #: g10/gpg.c:1078 #, fuzzy, c-format msgid "no = sign found in group definition `%s'\n" msgstr "grupi definitsioonis \"%s\" puudub smbol =\n" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "HOIATUS: ebaturvaline omanik %s \"%s\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "HOIATUS: ebaturvaline omanik %s \"%s\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "HOIATUS: ebaturvalised igused %s \"%s\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "HOIATUS: ebaturvalised igused %s \"%s\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "HOIATUS: ebaturvaline kataloogi omanik %s \"%s\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "HOIATUS: ebaturvaline kataloogi omanik %s \"%s\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "Hoiatus: ebaturvalised kataloogi igused %s \"%s\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "Hoiatus: ebaturvalised kataloogi igused %s \"%s\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "tundmatu seade \"%s\"\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Vastavat allkirja salajaste vtmete hoidlas pole\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "antud allkirja poliisi URL on vigane\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "nita millisesse vtmehoidlasse nidatud vti kuulub" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Vastavat allkirja salajaste vtmete hoidlas pole\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "MRKUS: ignoreerin vana vaikimisi vtmete faili `%s'\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "MRKUS: vaikimisi vtmete fail `%s' puudub\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "vtmete fail `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "loen vtmeid failist `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "MRKUS: %s ei ole tavapraseks kasutamiseks!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s ei ole lubatud kooditabel\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s ei ole lubatud kooditabel\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "ei saa parsida vtmeserveri URI\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: vigased ekspordi vtmed\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "vigased ekspordi vtmed\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: vigased impordi vtmed\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "vigased impordi vtmed\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: vigased ekspordi vtmed\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "vigased ekspordi vtmed\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: vigased impordi vtmed\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "vigased impordi vtmed\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s ei ole lubatud kooditabel\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "antud allkirja poliisi URL on vigane\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s ei ole lubatud kooditabel\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s ei ole lubatud kooditabel\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: vigased ekspordi vtmed\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "vigased ekspordi vtmed\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "exec-path vrtuseks ei nnestu seada %s\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: vigased ekspordi vtmed\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "HOIATUS: programm vib salvestada oma mlupildi!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "HOIATUS: %s mrab le %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s ja %s ei ole koos lubatud!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s ja %s ei oma koos mtet!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "gpg-agent ei ole sesses sessioonis kasutatav\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "kirjutan salajase vtme faili `%s'\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "--pgp2 moodis saate luua ainult eraldiseisvaid vi avateksti allkirju\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "--pgp2 moodis ei saa korraga allkirjastada ja krpteerida\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "--pgp2 moodis peate kasutama faile (ja mitte toru).\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "teate krpteerimine --pgp2 moodis nuab IDEA iffrit\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "valitud ifri algoritm ei ole lubatud\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "valitud lhendi algoritm ei ole lubatud\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "valitud ifri algoritm ei ole lubatud\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "valitud sertifikaadi lhendi algoritm ei ole lubatud\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed peab olema suurem, kui 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed peab olema suurem, kui 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth peab olema vahemikus 1 kuni 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "vigane vaikimisi-sert-tase; peab olema 0, 1, 2 vi 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "vigane min-sert-tase; peab olema 1, 2 vi 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "MRKUS: lihtne S2K mood (0) ei soovitata kasutada\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "vigane S2K mood; peab olema 0, 1 vi 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "vigased vaikimisi eelistused\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "vigased isikliku ifri eelistused\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "vigased isikliku lhendi eelistused\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "vigased isikliku pakkimise eelistused\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s ei tta veel koos %s-ga\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "ifri algoritm \"%s\" ei ole moodis %s lubatud\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "snumilhendi algoritm \"%s\" ei ole moodis %s lubatud\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "pakkimise algoritm \"%s\" ei ole moodis %s lubatud\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "TrustDB initsialiseerimine ebannestus: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "HOIATUS: mrati saajad (-r) aga ei kasutata avaliku vtme krptograafiat\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [failinimi]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [failinimi]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "lahtikrpteerimine ebannestus: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [failinimi]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [failinimi]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "%s ei ole moodis %s lubatud.\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [failinimi]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [failinimi]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [failinimi]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "%s ei ole moodis %s lubatud.\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [failinimi]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [failinimi]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [failinimi]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key kasutaja-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key kasutaja-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key kasutaja-id [ksud]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [kasutaja-id] [vtmehoidla]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "vtmeserverile saatmine ebannestus: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "vtmeserverilt lugemine ebannestus: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "vtme eksport ebannestus: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "vtmeserveri otsing ebannestus: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "vtmeserveri uuendamine ebannestus: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "lahtipakendamine ebannestus: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "pakendamine ebannestus: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "vigane rsialgoritm `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[failinimi]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Kirjutage nd oma teade ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "antud sertifikaadi poliisi URL on vigane\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "antud allkirja poliisi URL on vigane\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "antud allkirja poliisi URL on vigane\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "avalike vtmete puhvris on liiga palju vtmeid - blokeerin\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[Kasutaja id puudub]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "vti %08lX: salajane vti avaliku vtmeta - jtsin vahele\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Vigane vti %08lX muudeti kehtivaks vtme --allow-non-selfsigned-uid " "kasutamisega\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "avalikul alamvtmel %08lX puudub salajane alamvti - ignoreerin\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "kasutan sekundaarset vtit %08lX primaarse vtme %08lX asemel\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "ole mnevrra vaiksem" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "vta vtmed sellest vtmehoidlast" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "teata ajatemplite konfliktist ainult hoiatusega" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FP|kirjuta olekuinfo sellesse failipidemesse" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Kasuta: gpgv [vtmed] [failid] (-h nitab abiinfot)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Sntaks: gpg [vtmed] [failid]\n" "kontrolli allkirju tuntud usaldusvrsete vtmetega\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Teie lesanne on sisestada nd vrtus; seda vrtust ei avalikustata\n" "kolmandatele pooltele. Seda vrtust on vaja et realiseerida usaldusvrk." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Usalduse vrgu loomiseks peab GnuPG teadma, millised vtmed on\n" "absoluutselt usaldatavad. Need on tavaliselt vtmed, mille puhul\n" "on teil juurdeps ka nende salajastele vtmetele. Kui soovite\n" "mrata seda vtit absoluutselt usaldatavaks, vastake \"jah\"\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Kui te ikkagi soovite kasutada seda mitteusaldatavat vtit, vastake \"jah\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Sisestage kasutaja ID aadressile, kellele te soovite teadet saata." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "ldiselt ei ole hea mte kasutada sama vtit allkirjastamiseks ja\n" "krpteerimiseks. Seda algoritmi tuleks kasutada ainult teatud piirides.\n" "Enne kasutamist konsulteerige palun oma turva eksperdiga." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Sisestage vtmepikkus" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Vastake \"jah\" vi \"ei\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Sisestage nutav vrtus, nagu viibal nidati.\n" "Vimalik on ka sisestada ISO kuupev (AAAA-KK-PP), aga te ei\n" "saa korrektset veateadet, kuna ssteem ritab antud vrtust\n" "tlgendada vahemikuna." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Sisestage vtmehoidja nimi" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "palun e-posti aadress, aadress ei ole kohustuslik, aga vga soovitav" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Te vite nd sisestada kommentaari" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N et muuta nime.\n" "K et muuta kommentaari.\n" "E et muuta e-posti aadressi.\n" "O et jtkata vtme loomist.\n" "V et lpetada vtme loomine." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Vastake \"jah\" (vi \"j\"), kui vib alustada alamvtme loomisega." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Kui te allkirjastate vtme kasutaja ID, kontrollige kigepealt, kas vti\n" "ikka kuulub antud ID-ga nidatud isikule. Teistel inimestel on hea teada,\n" "kui hoolikalt te seda kontrolli olete teostanud.\n" "\n" "\"0\" thendab, et te ei vida oma kontrollimise kohta midagi.\n" "\n" "\"1\" thendab, et te usute, et vtit omab isik, kes seda vidab omavat, " "kuid\n" " te ei saanud vi ei soovinud seda videt tiendavalt kontrollida. See\n" " on kasulik \"persooni\" kontrolliks, kui te allkirjastate isiku pseudo-\n" " nmi vtit.\n" "\n" "\"2\" thendab, et te teostasite vtme pealiskaudset kontrolli. See vib\n" " niteks thendada, et te kontrollisite vtme srmejlge ja " "kontrollisite\n" " vtme kasutaja ID foto ID vastu.\n" "\n" "\"3\" thendab, et te teostasite vtme phjalikku kontrolli. See vib " "niteks\n" " thendada, et vrdlesite vtme srmejlge vrme omanikuga otse suheldes\n" " ja et te kontrollisite raskesti vltsitavast allikast (nt. pass) et\n" " vtme omaniku nimi vastab vtmel nidatud kasutaja IDle ja te kontrol-\n" " lisite, et vtmel nidatud e-posti aadress kuulub vtme omanikule.\n" "\n" "pange thele, et nited tasemete 2 ja 3 juures on *ainult* nited. Sltub\n" "ainult teist, milline on \"pealiskaudse\" ja \"phjaliku\" kontrolli " "thendus,\n" "kui te allkirjastate teisi vtmeid.\n" "\n" "Kui te ei tea iget vastust, vastake \"0\"." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Kui te soovite allkirjastada KIK kasutaja IDd, vastake \"jah\"" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Kui te testi soovite seda kasutaja IDd kustutada, vastake \"jah\".\n" "Sertifikaadid kustutatakse samuti!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Kui selle alamvtme vib kustutada, vastake \"jah\"" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "See on vtme kehtiv allkiri; tavaliselt seda ei soovita kustutada,\n" "kuna see allkiri vib olla vajalik, et kirjeldada antud vtme vi\n" "antud vtmega sertifitseeritud teise vtme usaldatavust." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Seda allkirja ei saa kontrollida, kuna puudub allkirjale vastav vti.\n" "Te peaksite peatama kustutamise, kuni on teada, millist vtit see\n" "kasutab, sest see vti vib moodustada usaldussuhte lbi mne juba\n" "sertifitseeritud vtme." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "Allkiri ei ole kehtiv. Oleks mistlik see vtmehoidlast kustutada." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "See allkiri seob kasutaja ID vtmega. Sellist allkirja ei ole\n" "ldiselt soovitatav eemaldada. Peale selle kustutamist ei pruugi\n" "GnuPG enam olla vimeline seda vtit leidma. Kustutada viks\n" "vaid siis, kui see allkiri ei ole miskiprast kehtiv ja on\n" "olemas ka teine allkiri, mis kasutajat vtmega seob." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Muuda kikide kasutaja ID-de seaded (vi ainult valitud)\n" "vastavaks hetkel mratud seadetele. Kikide asjasse puutuvate\n" "ise loodud allkirjade ajatempleid suurendatakse he sekundi vrra.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Palun sisestage parool; see on salajane tekst \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Palun korrake parooli, siis saate oma kirjutatus kindel olla." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Sisestage palun failinimi, mida allkirjastada" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Vastake \"jah\", kui faili vib le kirjutada" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Palun sisestage uus failinimi. Kui te vajutate lihtsalt reavahetust,\n" "kasutatakse vaikimisi faili (nimi on nurksulgudes)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Te peate mrama sertifitseerimise phjuse. Sltuvalt kontekstist on\n" "teil vimalus valida ks jrgnevaist:\n" " \"Vti on kompromiteeritud\"\n" " Kasutage seda, kui teil on phjust uskuda, et autoriseerimata\n" " isikud on saanud juurdepsu teie salajasele vtmele.\n" " \"Vti on asendatud\"\n" " Kasutage seda, kui te olete selle vtme asendanud uuemaga.\n" " \"Vti ei ole enam kasutusel\"\n" " Kasutage seda, kui te ei kasuta enam seda vtit.\n" " \"Kasutaja ID ei ole enam kehtiv\"\n" " Kasutage seda mrkimaks, et konkreetset kasutaja ID ei peaks enam\n" " kasutama; seda kasutatakse tavaliselt mrkimaks vigast e-posti " "aadressi.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Kui te soovite, vite nd sisestada phjenduse, miks te\n" "soovite seda thistamise sertifikaati esitada. Palun kirjutage\n" "lhidalt. Thi rida lpetab teksti.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Abiinfo puudub" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "`%s' kohta abiinfo puudub" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "uuenda usalduse andmebaasi" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "uuenda usalduse andmebaasi" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "avalik vti ei sobi salajase vtmega!\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "mittekasutatav salajane vti" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "jtan bloki tbiga %d vahele\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "%lu vtit on seni tdeldud\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Tdeldud kokku: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " vahele jetud uusi vtmeid: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " puudub kasutaja ID: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " imporditud: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " muutmata: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " uusi kasutajaid: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " uusi alamvtmeid: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " uusi allkirju: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " uusi thistamisi: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " loetud salajasi vtmeid: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " salajasi vtmeid imporditud: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " muutmata salajasi vtmeid: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " pole imporditud: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " uusi allkirju: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " loetud salajasi vtmeid: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Te olete allkirjastanud jrgnevad kasutaja IDd:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "%s allkiri, snumilhendi algoritm %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "vti %08lX: kasutaja ID puudub\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "`%s' jtsin vahele: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "vti %08lX: HKP alamvtme rike parandatud\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "" "vti %08lX: aktsepteerisin iseenda poolt allakirjutamata kasutaja ID '%s'\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "vti %08lX: puudub kehtiv kasutaja ID\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "see vib olla phjustatud puuduvast iseenda allkirjast\n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "vti %08lX: avalikku vtit ei leitud: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "vti %08lX: uus vti - jtsin vahele\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "ei leia kirjutatavat vtmehoidlat: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "kirjutan faili `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "viga vtmehoidlasse `%s' kirjutamisel: %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "vti %08lX: avalik vti \"%s\" on imporditud\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "vti %08lX: ei sobi meie koopiaga\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "vti %08lX: ei leia algset vtmeblokki: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "vti %08lX: ei nnestu lugeda algset vtmeblokki: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "vti %08lX: \"%s\" 1 uus kasutaja ID\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "vti %08lX: \"%s\" %d uut kasutaja IDd\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "vti %08lX: \"%s\" 1 uus allkiri\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "vti %08lX: \"%s\" %d uut allkirja\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "vti %08lX: \"%s\" 1 uus alamvti\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "vti %08lX: \"%s\" %d uut alamvtit\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "vti %08lX: \"%s\" %d uut allkirja\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "vti %08lX: \"%s\" %d uut allkirja\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "vti %08lX: \"%s\" %d uut kasutaja IDd\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "vti %08lX: \"%s\" %d uut kasutaja IDd\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "vti %08lX: \"%s\" ei muudetud\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "salajast vtit `%s' ei leitud: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "kirjutan salajase vtme faili `%s'\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "vti %08lX: salajane vti vigase ifriga %d - jtsin vahele\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "puudub salajaste vtmete vaikimisi vtmehoidla: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "vti %08lX: salajane vti on imporditud\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "vti %08lX: on juba salajaste vtmete hoidlas\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "vti %08lX: salajast vtit ei leitud: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "vti %08lX: avalik vti puudub - thistamise sertifikaati ei saa rakendada\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "vti %08lX: vigane thistamise sertifikaat: %s - lkkasin tagasi\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "vti %08lX: \"%s\" thistamise sertifikaat imporditud\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "vti %08lX: allkirjal puudub kasutaja ID\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "vti %08lX: mittetoetatud avaliku vtme algoritm kasutajaga \"%s\"\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "vti %08lX: kasutajal \"%s\" on vigane iseenda allkiri\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "vti %08lX: mittetoetatud avaliku vtme algoritm\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "vti %08lX: lisatud vahetu vtme allkiri\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "vti %08lX: vtmeseosel puudub alamvti\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "vti %08lX: vigane alamvtme seos\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "vti %08lX: vigane mitme alamvtme seos\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "vti %08lX: vtme thistamiseks puudub alamvti\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "vti %08lX: vigane alamvtme thistamine\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "vti %08lX: eemaldasin mitme alamvtme thistamise\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "vti %08lX: jtsin vahele kasutaja ID '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "vti %08lX: jtsin alamvtme vahele\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "vti %08lX: mitte eksporditav allkiri (klass %02x) - jtan vahele\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "vti %08lX: thistamise sertifikaat on vales kohas - jtan vahele\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "vti %08lX: vigane thistamise sertifikaat: %s - jtan vahele\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "vti %08lX: alamvtme allkiri on vales kohas - jtan vahele\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "vti %08lX: ootamatu allkirja klass (0x%02x) - jtan vahele\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "vti %08lX: tuvastasin dubleeritud kasutaja ID - mestisin\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "HOIATUS: vti %08lX vib olla thistatud: laen thistamise vtit %08lX\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "HOIATUS: vti %08lX vib olla thistatud: thistamise vtit %08lX pole.\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "vti %08lX: \"%s\" thistamise sertifikaat lisatud\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "vti %08lX: lisatud vahetu vtme allkiri\n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "avalik vti ei sobi salajase vtmega!\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "jtsin vahele: avalik vti on juba olemas\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "jtsin vahele: avalik vti on juba olemas\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "viga vtmehoidla `%s' loomisel: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "vtmehoidla `%s' on loodud\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "viga `%s' loomisel: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "vtmehoidla vahemlu uuesti loomine ebannestus: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[thistamine]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[iseenda allkiri]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 halb allkiri\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d halba allkirja\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 allkiri ji testimata, kuna vti puudub\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d allkirja ji testimata, kuna vtmed puuduvad\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 allkiri ji vea tttu kontrollimata\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d allkirja ji vigade tttu kontrollimata\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "tuvastasin he kehtiva iseenda allkirjata kasutaja ID\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "tuvastasin %d kehtiva iseenda allkirjata kasutaja IDd\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Palun otsustage, kuivrd te usaldate seda kasutajat\n" "teiste kasutajate vtmete kontrollimisel (kontrollige\n" "passe, kontrollige erinevatest allikatest npujlgi...)?\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = Usaldan vhesel mral\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = Usaldan tiesti\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Kasutaja ID \"%s\" on thistatud." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Olete kindel, et soovite seda ikka allkirjastada? (j/e) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Ei saa allkirjastada.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Kasutaja ID \"%s\" on aegunud." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Kasutaja ID \"%s\" ei ole ise allkirjastatud." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "Kasutaja ID \"%s\" ei ole ise allkirjastatud." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Allkirjastan testi? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Iseenda allkiri \"%s\"\n" "on PGP 2.x stiilis allkiri.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Kas te soovite seda edutada OpenPGP iseenda allkirjaks? (j/E) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Teie praegune allkiri \"%s\"\n" "on aegunud.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Kas soovite luua uut allkirja et asendada vana aegunud? (j/E) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Teie praegune allkiri \"%s\"\n" "on lokaalne allkiri.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Kas te soovite seda edutada tielikuks eksporditavaks allkirjaks? (j/E) " #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" on juba lokaalselt allkirjastatud vtmega %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" on juba allkirjastatud vtmega %08lX\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Olete kindel, et soovite seda ikka allkirjastada? (j/E) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Vtmega %08lX pole midagi allkirjastada\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "See vti on aegunud!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "See vti aegub %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Soovite, et teie allkiri aeguks samal ajal? (J/e) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "--pgp2 moodis ei saa PGP 2.x vtmele OpenPGP allkirja anda.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "See muudab vtme PGP 2.x programmidega mitte-kasutatavaks.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Kui hoolikalt te olete kontrollinud et vti, mida te asute allkirjastama,\n" "kuulub ka tegelikult lal mainitud isikule? Kui te ei tea, mida vastata,\n" "sisestage \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Ma ei vasta.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Ma ei ole ldse kontrollinud.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Ma olen teinud pealiskaudset kontrolli.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Ma olen kontrollinud vga hoolikalt.%s\n" #: g10/keyedit.c:926 #, fuzzy msgid "Your selection? (enter `?' for more information): " msgstr "Teie valik? (lisainfo saamiseks vajutage '?'): " #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Olete testi kindel, et soovite seda vtit oma\n" "vtmega allkirjastada: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" "See saab olema iseenda allkiri.\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "HOIATUS: allkirja ei mrgita mitte-eksporditavaks.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "HOIATUS: allkirja ei mrgita kehtetuks mitte-tunnistatavaks.\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "Allkiri mrgitakse mitte-eksporditavaks.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "Allkiri mrgitakse kehtetuks mitte-tunnistatavaks.\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "Ma ei ole seda vtit ldse kontrollinud.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "Ma olen seda vtit kontrollinud ainult pealiskaudselt.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "Ma olen kontrollinud seda vtit vga hoolikalt.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Allkirjastan testi? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "allkirjastamine ebannestus: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "See vti ei ole kaitstud.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Primaarse vtme salajased komponendid ei ole kttesaadavad.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "Primaarse vtme salajased komponendid ei ole kttesaadavad.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Vti on kaitstud.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Seda vtit ei nnestu toimetada: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Sisestage sellele salajasele vtmele uus parool.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "parooli ei korratud ieti; proovige uuesti" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Te ei soovi parooli - see on tenoliselt *halb* idee!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Kas te testi soovite seda teha? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "tstan vtme allkirja igesse kohta\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "salvesta ja vlju" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "nita srmejlge" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "nita vtit ja kasutaja IDd" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "vali kasutaja ID N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "vali kasutaja ID N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "thista allkirjad" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "allkirjasta vti lokaalselt" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Vihje: Valige allkirjastamiseks kasutaja\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "lisa kasutaja ID" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "lisa foto ID" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "kustuta kasutaja ID" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "kustuta sekundaarne vti" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "lisa thistamise vti" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "Kas uuendan testi kik kasutaja ID-de seaded? " #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "v3 vtme aegumise aega ei saa muuta.\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "mrgi kasutaja ID primaarseks" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "llita salajaste vi avalike vtmete loendi vahel" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "nita eelistusi (ekspert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "nita eelistusi (detailsena)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "Kas uuendan testi kik kasutaja ID-de seaded? " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "ei saa parsida vtmeserveri URI\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "Kas uuendan testi kik kasutaja ID-de seaded? " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "muuda parooli" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "muuda omaniku usaldust" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Kas thistan testi kik valitud kasutaja IDd? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "thista kasutaja ID" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "thista sekundaarne vti" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "luba vti" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "blokeeri vti" #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "nita foto ID" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "viga salajase vtmebloki `%s' lugemisel: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Salajane vti on kasutatav.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Selle tegamiseks on vaja salajast vtit.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Palun kasutage kigepealt ksku \"toggle\".\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Vti on thistatud." #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Kas allkirjastan testi kik kasutaja IDd? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Vihje: Valige allkirjastamiseks kasutaja\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "tundmatu allkirja klass" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "See ksklus ei ole %s moodis lubatud.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Te peate valima vhemalt he kasutaja ID.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Viimast kasutaja ID ei saa kustutada!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Kas kustutan testi kik kasutaja IDd? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Kas eemaldan testi selle kasutaja ID? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Kas eemaldan testi selle kasutaja ID? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Te peata valima vhemalt he vtme.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "`%s' ei nnestu avada: %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "viga vtmehoidla `%s' loomisel: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Te peata valima vhemalt he vtme.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Kas te testi soovite valitud vtmeid kustutada? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Kas te testi soovite seda vtit kustutada? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Kas thistan testi kik valitud kasutaja IDd? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Kas thistan testi selle kasutaja ID? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Kas te testi soovite seda vtit thistada? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Kas te testi soovite valitud vtmeid thistada? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Kas te testi soovite seda vtit thistada? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "sea eelistuste nimekiri" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Kas uuendan testi kik kasutaja ID-de seaded? " #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Kas testi uuendan seaded? " #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Salvestan muutused? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Vljun salvestamata? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "uuendamine ebannestus: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "salajase vtme uuendamine ebannestus: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Vtit ei muudetud, seega pole uuendamist vaja.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Teatelhend: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Omadused: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Noteering: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "PGP 2.x stiilis kasutaja ID ei oma seadeid.\n" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Selle vtme vib olla thistanud %s vti " #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "Selle vtme vib olla thistanud %s vti " #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " (tundlik)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "%s ei nnestu luua: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "[thistatud] " #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [aegub: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [aegub: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " usaldus: %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " usaldus: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "See vti on blokeeritud" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Tuleb thele panna et kuni te pole programmi uuesti kivitanud, ei pruugi\n" "nidatud vtme kehtivus olla tingimata korrektne.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "[thistatud] " #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "HOIATUS: htegi kasutaja ID pole mrgitud primaarseks. See ksklus vib\n" " phjustada muu kasutaja ID primaarseks mramist.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "v3 vtme aegumise aega ei saa muuta.\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "HOIATUS: See on PGP2-stiilis vti. Foto ID lisamine vib sundida mningaid\n" " PGP versioone seda vtit tagasi lkkama.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Olete kindel, et soovite seda ikka lisada? (j/E) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Foto IDd ei saa PGP2 vtmele lisada.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Kustutan selle korrektse allkirja? (j/E/v)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Kustutan selle vigase allkirja? (j/E/v)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Kustutan selle tundmatu allkirja? (j/E/v)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Kas testi kustutan selle iseenda allkirja? (j/E)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Kustutatud %d allkiri.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Kustutatud %d allkirja.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Midagi ei kustutatud.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "vigane pakend" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Kasutaja ID \"%s\" on thistatud." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Kasutaja ID \"%s\" on thistatud." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Kasutaja ID \"%s\" on thistatud." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "kasutaja ID \"%s\" on juba thistatud\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "kasutaja ID \"%s\" on juba thistatud\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "HOIATUS: See on PGP2-stiilis vti. Mratud thistaja lisamine vib\n" " phjustada mningaid PGP versioone seda vtit tagasi lkkama.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "PGP 2.x-stiili vtmele ei saa mratud thistajat lisada.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Sisestage mratud thistaja kasutaja ID: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "PGP 2.x stiilis vtit ei saa nimetada mratud thistajaks\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "te ei saa nimetada vtit iseenda mratud thistajaks\n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "HOIATUS: See vti on mratud thistaja poolt thistatud!\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "HOIATUS: vtme seadmist mratud thistajaks ei saa tagasi vtta!\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Olete kindel, et soovite seda vtit seada mratud thistajaks? (j/E): " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Palun eemaldage salajastelt vtmetelt valikud.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "palun valige limalt ks sekundaarne vti.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "Muudan sekundaarse vtme aegumise aega.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Muudan primaarse vtme aegumise aega.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "v3 vtme aegumise aega ei saa muuta.\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Vastavat allkirja salajaste vtmete hoidlas pole\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "HOIATUS: allkirjastamise alamvti %08lX ei ole rist-sertifitseeritud\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Palun valige tpselt ks kasutaja ID.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "jtan kasutaja \"%s\" v3 iseenda allkirja vahele\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Olete kindel, et soovite seda kasutada (j/E)? " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Olete kindel, et soovite seda kasutada (j/E)? " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Allkirja noteerimine: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Kirjutan le (j/E)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Kasutaja ID numbriga %d puudub\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Kasutaja ID numbriga %d puudub\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Kasutaja ID numbriga %d puudub\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "kasutaja ID: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " allkirjastanud %08lX %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (mitte-eksporditav)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "See allkiri aegub %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Olete kindel, et soovite seda ikka thistada? (j/E) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Loon sellele allkirjale thistamise sertifikaadi? (j/E) " #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " allkirjastanud %08lX %s%s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Te olete allkirjastanud jrgnevad kasutaja IDd:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (mitte-eksporditav)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " thistanud %08lX %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Te asute thistama jrgmisi allkirju:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Kas testi loon thistamise sertifikaadid? (j/E) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "salajast vtit pole\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "kasutaja ID \"%s\" on juba thistatud\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "HOIATUS: kasutaja ID allkirja ajatempel on %d sekundit tulevikus\n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "kasutaja ID \"%s\" on juba thistatud\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "kasutaja ID \"%s\" on juba thistatud\n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Nitan %s foto IDd suurusega %ld, vti 0x%08lX (uid %d)\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "eelistus %c%lu on duplikaat\n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "liiga palju `%c' eelistusi\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "liiga palju `%c' eelistusi\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "liiga palju `%c' eelistusi\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "lubamatu smbol eelistuste snes\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "kirjutan otsese allkirja\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "kirjutan iseenda allkirja\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "kirjutan vtit siduva allkirja\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "vigane vtme suurus; kasutan %u bitti\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "vtme suurus mardatud les %u bitini\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "krpteeri andmed" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (ainult krptimiseks)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Palun valige, millist vtmetpi te soovite:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA ja ElGamal (vaikimisi)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA ja ElGamal (vaikimisi)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (ainult allkirjastamiseks)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (ainult allkirjastamiseks)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (ainult krptimiseks)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (ainult krpteerimiseks)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA (ainult krpteerimiseks)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (ainult krpteerimiseks)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Millist vtmepikkust te soovite? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Millist vtmepikkust te soovite? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Soovitud vtmepikkus on %u bitti\n" #: g10/keygen.c:1722 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 "" "Palun mrake, kui kaua on vti kehtiv.\n" " 0 = vti ei aegu\n" " = vti aegub n pevaga\n" " w = vti aegub n ndalaga\n" " m = vti aegub n kuuga\n" " y = vti aegub n aastaga\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Palun mrake, kui kaua allkiri kehtib.\n" " 0 = allkiri ei aegu\n" " = allkiri aegub n pevaga\n" " w = allkiri aegub n ndalaga\n" " m = allkiri aegub n kuuga\n" " y = allkiri aegub n aastaga\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Vti on kehtiv kuni? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "Allkiri on kehtiv kuni? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "vigane vrtus\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "%s ei aegu kunagi\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "%s ei aegu kunagi\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "%s aegub %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Allkiri aegub %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Teie ssteem ei saa esitada kuupevi peale aastat 2038.\n" "Siiski ksitletakse neid korrektselt aastani 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "On see ige (j/e)? " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Vtme identifitseerimiseks on vaja mrata kasutaja; tarkvara konstrueerib\n" "kasutaja id kasutades prisnime, kommentaari ja e-posti aadressi kujul:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Prisnimi: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Lubamatu smbol nimes\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Nimi ei vi alata numbriga\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Nimes peab olema vhemalt 5 smbolit\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "E-posti aadress: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Selline e-posti aadress ei ole lubatud\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Kommentaar: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Lubamatu smbol kommentaaris\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Te kasutate kooditabelit `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Te valisite selle KASUTAJA-ID:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "rge palun kirjutage e-posti aadressi prisnimesse ega kommentaari\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnKkEeOoVv" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Muuda (N)ime, (K)ommentaari, (E)posti vi (V)lju? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Muuda (N)ime, (K)ommentaari, (E)posti vi (O)k/(V)lju? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Palun parandage kigepealt viga\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Te vajate oma salajase vtme kaitsmiseks parooli.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Te ei soovi parooli - see on tenoliselt *halb* idee!\n" "Ma siiski tidan teie soovi. Te saate oma parooli alati muuta,\n" "kasutades seda programmi vtmega \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Me peame genereerima palju juhuslikke baite. Praegu oleks hea teostada\n" "arvutil mingeid teisi tegevusi (kirjutada klaviatuuril, liigutada hiirt,\n" "kasutada kettaid jne), see annaks juhuarvude generaatorile vimaluse\n" "koguda paremat entroopiat.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Vtme genereerimine katkestati.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "kirjutan avaliku vtme faili `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "kirjutan salajase vtme faili `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "kirjutan salajase vtme faili `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "kirjutatavat avalike vtmete hoidlat pole: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "kirjutatavat salajaste vtmete hoidlat pole: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "viga avaliku vtme vtmehoidlasse `%s' kirjutamisel: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "viga salajase vtme vtmehoidlasse `%s' kirjutamisel: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "avalik ja salajane vti on loodud ja allkirjastatud.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Pidage silmas, et seda vtit ei saa kasutada krptimiseks. \n" "Krptimiseks tuleb genereerida teine vti, seda saate teha\n" "kasutades vtit \"--edit-key\".\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Vtme genereerimine ebannestus: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "vti loodi %lu sekund tulevikus (ajahpe vi kella probleem)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "vti loodi %lu sekundit tulevikus (ajahpe vi kella probleem)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "MRKUS: v3 vtmetele alamvtmete loomine ei ole OpenPGP hilduv\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Loon testi? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "vtmebloki kustutamine ebannestus: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "`%s' ei nnestu luua: %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "MRKUS: salajane vti %08lX aegus %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "mitte kunagi" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kriitiline allkirja poliitika: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Allkirja poliitika: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kriitiline allkirja noteerimine: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Allkirja noteerimine: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Vtmehoidla" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Primaarse vtme srmejlg:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Alamvtme srmejlg:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Primaarse vtme srmejlg:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Alamvtme srmejlg:" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Vtme srmejlg =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "pakendamine ebannestus: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "HOIATUS: on olemas 2 faili konfidentsiaalse infoga.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s ei ole muudetud\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s on uus\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Palun parandage see vimalik turvaprobleem\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "kontrollin vtmehoidlat `%s'\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "kontrollitud %lu vtit (%lu allkirja)\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "kontrollitud %lu vtit (%lu allkirja)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: vtmehoidla on loodud\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "antud allkirja poliisi URL on vigane\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "HOIATUS: seaded failis `%s' pole seekord veel aktiivsed\n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "vigased ekspordi vtmed\n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "vtit '%s' ei leitud: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "vtit '%s' ei leitud: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "ksin vtit %08lX vtmeserverist %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "ksin vtit %08lX vtmeserverist %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "otsin \"%s\" HKP serverist %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "otsin \"%s\" HKP serverist %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "otsin \"%s\" HKP serverist %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "allkirjastatud teie vtmega %08lX %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "otsin \"%s\" HKP serverist %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "otsin \"%s\" HKP serverist %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "vigased ekspordi vtmed\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "vtmeserverilt lugemine ebannestus: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "vtmeserveri viga" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "vtmeserveri viga" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "HOIATUS: ei saa kustutada ajutist faili (%s) `%s': %s\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "ksin vtit %08lX vtmeserverist %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "ksin vtit %08lX vtmeserverist %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "HOIATUS: ei saa kustutada ajutist faili (%s) `%s': %s\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "HOIATUS: ei saa kustutada ajutist faili (%s) `%s': %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "veider suurus krptitud sessiooni vtme jaoks (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s krpteeritud sessiooni vti\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "krpteeritud tundmatu algoritmiga %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "avalik vti on %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "avaliku vtmega krpteeritud andmed: hea DEK\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "krpteeritud %u-bitise %s vtmega, ID %08lX, loodud %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " ka \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "krpteeritud %s vtmega, ID %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "avaliku vtmega lahtikrpteerimine ebannestus: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "krpteeritud kasutades %lu parooli\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "krpteeritud he parooliga\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "eeldan %s krpteeritud andmeid\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "IDEA iffer pole saadaval, loodan kasutada selle asemel %s\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "lahtikrpteerimine nnestus\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "HOIATUS: teate koosklalisus ei ole tagatud\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "HOIATUS: krpteeritud teadet on muudetud!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "lahtikrpteerimine ebannestus: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "MRKUS: saatja nudis \"ainult-teie-silmadele\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "algne failinimi on='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "eraldiseisev thistus - realiseerimiseks kasutage \"gpg --import\"\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Korrektne allkiri kasutajalt \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "allkirja kontroll jeti ra\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "neid allkirju ei nnestu tdelda\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Allkiri aegus %s\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " ka \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Allkirja li %.*s kasutades %s vtit ID %08lX\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Vtme leiate: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "HALB allkiri kasutajalt \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Aegunud allkiri kasutajalt \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Korrektne allkiri kasutajalt \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[ebakindel]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " ka \"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Allkiri aegus %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Allkiri aegub %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s allkiri, snumilhendi algoritm %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binaarne" #: g10/mainproc.c:1947 msgid "textmode" msgstr "tekstimood" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "tundmatu" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Allkirja ei saa kontrollida: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "ei ole eraldiseisev allkiri\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "HOIATUS: leidsin mitu allkirja. Kontrollitakse ainult esimest.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "eraldiseisev allkiri klassiga 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "vana stiili (PGP 2.x) allkiri\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "proc_tree() tuvastas vigase juurmise paketi\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "ei nnestu blokeerida mlupildi salvestamist: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "faili ei nnestu avada: %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "trustdb: lugemine ebannestus (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "ei oska ksitleda avaliku vtme algoritmi %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "snumilhendi algoritmi %s (%d) kasutamine on vastuolus saaja eelistustega\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "realiseerimata ifri algoritm" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "%s allkiri, snumilhendi algoritm %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" "snumilhendi algoritmi %s (%d) kasutamine on vastuolus saaja eelistustega\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = esita palun tiendavat infot\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "gpg-agent ei ole sesses sessioonis kasutatav\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: ebasoovitav vti \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "HOIATUS: vtit \"%s\" ei soovitata kasutada.\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "palun kasutage selle asemel \"%s%s\"\n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "HOIATUS: vtit \"%s\" ei soovitata kasutada.\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Pakkimata" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "Pakkimata" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "see teade ei pruugi olla programmiga %s kasutatav\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "loen vtmeid failist `%s'\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "tundmatu vaikimisi saaja `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "tundmatu allkirja klass" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Fail `%s' on olemas. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Kirjutan le (j/E)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: tundmatu suffiks\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Sisestage uus failinimi" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "kirjutan standardvljundisse\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "eeldan allkirjastatud andmeid failis `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "uus omaduste fail `%s' on loodud\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "HOIATUS: seaded failis `%s' pole seekord veel aktiivsed\n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: kataloog on loodud\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "ei oska ksitleda avaliku vtme algoritmi %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "HOIATUS: tenoliselt ebaturvaline smmeetriliselt krpteeritud sessiooni " "vti\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "alampaketil tbiga %d on kriitiline bitt seatud\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent ei ole sesses sessioonis kasutatav\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "vigane GPG_AGENT_INFO keskkonnamuutuja\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agendi protokolli versioon %d ei ole toetatud\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "ei nnestu luua hendust serveriga `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "probleem agendiga - blokeerin agendi kasutamise\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (peamise vtme ID %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Te vajate kasutaja salajase vtme lahtilukustamiseks parooli:\n" "\"%.*s\"\n" "%u-bitti %s vti, ID %08lX, loodud %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Korrake parooli\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Sisestage parool\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "katkestatud kasutaja poolt\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "pakettmoodis ei saa parooli ksida\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Sisestage parool: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Te vajate kasutaja salajase vtme lahtilukustamiseks\n" "parooli: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bitine %s vti, ID %08lX, loodud %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Korrake parooli: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Valige foto ID'na kasutatav pilt. Pilt peab olema JPEG fail.\n" "Pidage meeles, et pilt salvestatakse teie avalikus vtmes. Kui kasutate\n" "vga suurt pilti, on ka kti vha suur!\n" "Mistlik pildi suurus viks olla umbes 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Sisestage foto ID jaoks JPEG faili nimi: " #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "faili ei nnestu avada: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Olete kindel, et soovite seda kasutada (j/E)? " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\": ei ole JPEG fail\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "On see foto ige (j/E/v)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "foto ID ei saa nidata!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Phjus puudub" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Vti on asendatud" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Vti on kompromiteeritud" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Vti ei ole enam kasutusel" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Kasutaja ID ei ole enam kehtiv" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "thistamise phjus: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "thistamise kommentaar: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iItTvVjJ" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Usalduse vrtus puudub:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " ka \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "See vti kuulub tenoliselt omanikule\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Ei tea\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = EI usalda\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Usaldan absoluutselt\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " t = tagasi phimensse\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " j = jta see vti vahele\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " v = vlju\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Teie otsus? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Kas te testi soovite seda vtit absoluutselt usaldada? " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Sertifikaadid tiesti usaldatava vtmeni:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%08lX: Ei ole midagi, mis nitaks, et see vti kuulub omanikule\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "%08lX: Ei ole midagi, mis nitaks, et see vti kuulub omanikule\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "See vti kuulub tenoliselt omanikule\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "See vti kuulub meile\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "EI ole kindel, et see vti kuulub isikule, keda mainitakse\n" "kasutaja ID vljal. Kui te *testi* teate, mida te teete,\n" "vite jrgnevale ksimusele vastata jaatavalt\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Kasutan seda vtit ikka? " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "HOIATUS: Kasutan mitteusaldatavat vtit!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "HOIATUS: see vti vib olla thistatud (thistamise vtit pole)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "HOIATUS: See vti on mratud thistaja poolt thistatud!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "HOIATUS: See vti on omaniku poolt thistatud!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " See vib thendada, et allkiri on vltsing.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "HOIATUS: See alamvti on omaniku poolt thistatud!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Mrkus: See vti on blokeeritud.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Mrkus: See vti on aegunud!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "HOIATUS: Seda vtit ei ole sertifitseeritud usaldatava allkirjaga!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Ei ole midagi, mis nitaks, et allkiri kuulub omanikule.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "HOIATUS: Me EI usalda seda vtit!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Allkiri on tenoliselt VLTSING.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "HOIATUS: Seda vtit ei ole sertifitseeritud piisavalt usaldatava " "allkirjaga!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Ei ole kindel, et allkiri kuulub omanikule.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: jtsin vahele: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: jtsin vahele: avalik vti on juba olemas\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Te ei mranud kasutaja IDd. (vite kasutada vtit \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Sisestage kasutaja ID. Lpetage thja reaga: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Tundmatu kasutaja ID.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "jtsin vahele: avalik vti on juba vaikimisi saaja\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Avalik vti on blokeeritud.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "jtsin vahele: avalik vti on juba olemas\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "tundmatu vaikimisi saaja `%s'\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: jtsin vahele: avalik vti on blokeeritud\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "kehtivaid aadresse pole\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "andmeid ei salvestatud; salvestamiseks kasutage vtit \"--output\"\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "viga `%s' loomisel: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Eraldiseisev allkiri.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Palun sisestage andmefaili nimi: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "loen standardsisendit ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "allkirjastatud andmeid pole\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "allkirjastatud andmete avamine ebannestus `%s'\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonmne saaja; proovin salajast vtit %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "ok, me oleme anonmne teate saaja.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "vana DEK kodeerimine ei ole toetatud\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "ifri algoritm %d%s on tundmatu vi blokeeritud\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "MRKUS: ifri algoritm %d puudub eelistustes\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "MRKUS: salajane vti %08lX aegus %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "MRKUS: vti on thistatud" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet ebannestus: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "vti %08lX: kasutaja ID puudub\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Thistaja:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(See on tundlik thistamise vti)\n" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Loon sellele vtmele thistamise sertifikaadi? " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Vljundis sunnitakse kasutama ASCII vormingut.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet ebannestus: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Thistamise sertifikaat on loodud.\n" #: g10/revoke.c:411 #, fuzzy, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "" "`%s' jaoks pole thistamise vtmeid\n" "\n" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "salajast vtit `%s' ei leitud: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "vastavat avalikku vtit pole: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "avalik vti ei sobi salajase vtmega!\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Loon sellele vtmele thistamise sertifikaadi? " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "tundmatu kaitsealgoritm\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "MRKUS: See vti ei ole kaitstud!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Thistamise sertifikaat on loodud.\n" "\n" "Palun salvestage see andmekandjale, mida saate kindlasse kohta ra panna.\n" "Kui mallory saab sellele sertifikaadile juurdepsu, vib ta seda kasutades\n" "muuta kik teie vtmed kasutamisklbmatuks.\n" "Samuti on mistlik trkkida see sertifikaat paberile ja panna hoiule " "juhuks,\n" "kui meedia muutub loetamatuks. Aga olge ettevaatlik: teie arvuti " "trkissteem\n" "vib salvestada need andmed ja teha teistele kttesaadavaks! \n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Palun valige thistamise phjus:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Katkesta" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Tenoliselt soovite siin valida %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Sisestage mittekohustuslik kirjeldus. Lpetage thja reaga:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Thistamise phjus: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Kirjeldust ei antud)\n" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "On see hsti? " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "salajase vtme komponendid ei ole kttesaadavad\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "kaitse algoritm %d%s ei ole toetatud\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "kaitse algoritm %d%s ei ole toetatud\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Vigane parool; palun proovige uuesti" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "HOIATUS: Tuvastasin nrga vtme - palun muutke uuesti parooli.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "loon salajase vtme kaitseks mittesoovitavat 16 bitist kontrollsummat\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "loodi nrk vti - proovin uuesti\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "smmeetrilises ifris ei nnestu vltida nrga vtme kasutamist; proovisin " "%d korda!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "HOIATUS: allkirja lhend on teatega konfliktne\n" #: g10/sig-check.c:99 #, fuzzy, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "HOIATUS: allkirjastamise alamvti %08lX ei ole rist-sertifitseeritud\n" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "HOIATUS: allkirjastamise alamvtmel %08lX on vigane rist-sertifikaat\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "avalik vti %08lX on %lu sekund uuem, kui allkiri\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "avalik vti %08lX on %lu sekundit uuem, kui allkiri\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "vti loodi %lu sekund tulevikus (ajahpe vi kella probleem)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "vti loodi %lu sekundit tulevikus (ajahpe vi kella probleem)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "MRKUS: allkirja vti %08lX aegus %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s allkiri, snumilhendi algoritm %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "eeldan tundmatu kriitilise biti tttu vtmel %08lX vigast allkirja\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "vti %08lX: alamvtme thistamise paketile puudub alamvti\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "vti %08lX: alamvtme allkirjaga sidumiseks puudub alamvti\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "HOIATUS: noteerimise %%-asendus ebannestus (liiga suur). Kasutan " "kompaktset.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "HOIATUS: poliisi urli %%-asendus ebannestus (liiga suur). Kasutan " "kompaktset.\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "HOIATUS: poliisi urli %%-asendus ebannestus (liiga suur). Kasutan " "kompaktset.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "Loodud allkirja ei nnestu kontrollida: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s allkiri kasutajalt: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "PGP 2.x stiilis vtmetega saab eraldi-allkirjastada ainult --pgp2 moodis\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "snumilhendi algoritmi %s (%d) kasutamine on vastuolus saaja eelistustega\n" #: g10/sign.c:960 msgid "signing:" msgstr "allkirjastan:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "PGP 2.x stiilis vtmetega saab avateksti allkirjastada ainult --pgp2 moodis\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "kasutatakse %s krpteerimist\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "vti ei ole mrgitud ebaturvaliseks - sellega ei saa vlts RNGd kasutada!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "`%s' jtsin vahele: duplikaat\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "`%s' jtsin vahele: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "jtsin vahele: avalik vti on juba olemas\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "jtsin `%s' vahele: see on PGP genereeritud ElGamal vti,\n" "mis ei ole allkirjades kasutamiseks turvaline!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "usalduse kirje %lu, tp %d: kirjutamine ebannestus: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Omistatud usalduse vrtuste loend, loodud: %s\n" "# (Taastamiseks kasutage \"gpg --import-ownertrust\")\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "viga `%s' lugemisel: %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "rida on liiga pikk\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "viga: vigane srmejlg\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "impordi usalduse vrtused" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "viga usalduse kirje otsimisel: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "viga lugemisel: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sync ebannestus: %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "`%s' ei nnestu luua: %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "`%s' ei nnestu avada\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb kirje %lu: lseek ebannestus: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: write failed (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "trustdb transaktsioon on liiga suur\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "`%s' ei nnestu sulgeda: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: kataloogi ei ole!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: versioonikirje loomine ei nnestu: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: loodi vigane usalduse andmebaas\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trustdb on loodud\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "MRKUS: trustdb pole kirjutatav\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: vigane trustdb\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: paisktabeli loomine ebannestus: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: viga versioonikirje uuendamisel: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: viga versioonikirje lugemisel: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: viga versioonikirje kirjutamisel: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek ebannestus: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: lugemine ebannestus (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: ei ole trustdb fail\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versioonikirje kirje numbriga %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: vigane faili versioon %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: viga vaba kirje lugemisel: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: viga kataloogikirje kirjutamisel: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: kirje nullimine ebannestus: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: kirje lisamine ebannestus: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: trustdb on loodud\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "ei suuda ksitleda tekstiridu mis on pikemad, kui %d smbolit\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "sisendrida on pikem, kui %d smbolit\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' ei ole kehtiv pikk vtmeID\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "vti %08lX: aktsepteerin usaldusvrse vtmena\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "vti %08lX esineb trustdb failis enam kui korra\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "vti %08lX: usaldataval vtmel pole avalikku vtit - jtsin vahele\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "vti on mrgitud abslouutselt usaldatuks.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "usalduse kirje %lu, pringu tp %d: lugemine ebannestus: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "usalduse kirje %lu ei oma soovitud tpi %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "[thistatud] " #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "[aegunud] " #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "tundmatu" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 #, fuzzy msgid "never" msgstr "mitte kunagi" #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "trustdb kontrolliks puudub vajadus\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "trustdb jrgmine kontroll %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "trustdb kontrolliks puudub vajadus\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "trustdb kontrolliks puudub vajadus\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "ei leia avalikku vtit %08lX: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "palun tehke --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "kontrollin trustdb faili\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d vtit tdeldud (%d kehtivust puhastatud)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "absoluutselt usaldatavaid vtmeid pole\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "puudub absoluutselt usaldatava vtme %08lX avalik vti\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "usalduse kirje %lu, tp %d: kirjutamine ebannestus: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "allkirja ei nnestu kontrollida.\n" "Palun pidage meeles, et allkirja fail (.sig vi .asc)\n" "peab olema ksureal esimene fail.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "sisendrida %u on liiga pikk vi seavahetus puudub\n" #: util/errors.c:53 msgid "general error" msgstr "ldine viga" #: util/errors.c:54 msgid "unknown packet type" msgstr "tundmatu paketi tp" #: util/errors.c:55 msgid "unknown version" msgstr "tundmatu versioon" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "tundmatu avaliku vtme algoritm" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "tundmatu lhendi algoritm" #: util/errors.c:58 msgid "bad public key" msgstr "halb avalik vti" #: util/errors.c:59 msgid "bad secret key" msgstr "halb salajane vti" #: util/errors.c:60 msgid "bad signature" msgstr "halb allkiri" #: util/errors.c:61 msgid "checksum error" msgstr "kontrollsumma viga" #: util/errors.c:62 msgid "bad passphrase" msgstr "halb parool" #: util/errors.c:63 msgid "public key not found" msgstr "ei leia avalikku vtit" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "tundmatu ifri algoritm" #: util/errors.c:65 msgid "can't open the keyring" msgstr "vtmehoidlat ei nnestu avada" #: util/errors.c:66 msgid "invalid packet" msgstr "vigane pakett" #: util/errors.c:67 msgid "invalid armor" msgstr "vigane pakend" #: util/errors.c:68 msgid "no such user id" msgstr "sellist kasutaja id pole" #: util/errors.c:69 msgid "secret key not available" msgstr "salajane vti ei ole kttesaadav" #: util/errors.c:70 msgid "wrong secret key used" msgstr "kasutati valet salajast vtit" #: util/errors.c:71 msgid "not supported" msgstr "ei ole toetatud" #: util/errors.c:72 msgid "bad key" msgstr "halb vti" #: util/errors.c:73 msgid "file read error" msgstr "viga faili lugemisel" #: util/errors.c:74 msgid "file write error" msgstr "viga faili kirjutamisel" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "tundmatu pakkimisalgoritm" #: util/errors.c:76 msgid "file open error" msgstr "viga faili avamisel" #: util/errors.c:77 msgid "file create error" msgstr "viga faili loomisel" #: util/errors.c:78 msgid "invalid passphrase" msgstr "vigane parool" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "realiseerimata avaliku vtme algoritm" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "realiseerimata ifri algoritm" #: util/errors.c:81 msgid "unknown signature class" msgstr "tundmatu allkirja klass" #: util/errors.c:82 msgid "trust database error" msgstr "usalduse andmebaasi viga" #: util/errors.c:83 msgid "bad MPI" msgstr "halb MPI" #: util/errors.c:84 msgid "resource limit" msgstr "ressursi limiit" #: util/errors.c:85 msgid "invalid keyring" msgstr "vigane vtmehoidla" #: util/errors.c:86 msgid "bad certificate" msgstr "halb sertifikaat" #: util/errors.c:87 msgid "malformed user id" msgstr "vigane kasutaja id" #: util/errors.c:88 msgid "file close error" msgstr "viga faili sulgemisel" #: util/errors.c:89 msgid "file rename error" msgstr "viga faili mber nimetamisel" #: util/errors.c:90 msgid "file delete error" msgstr "viga faili kustutamisel" #: util/errors.c:91 msgid "unexpected data" msgstr "ootamatud andmed" #: util/errors.c:92 msgid "timestamp conflict" msgstr "ajatemplite konflikt" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "mittekasutatav avaliku vtme algoritm" #: util/errors.c:94 msgid "file exists" msgstr "fail on olemas" #: util/errors.c:95 msgid "weak key" msgstr "nrk vti" #: util/errors.c:96 msgid "invalid argument" msgstr "vigane argument" #: util/errors.c:97 msgid "bad URI" msgstr "halb URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "mittetoetatud URI" #: util/errors.c:99 msgid "network error" msgstr "vrgu viga" #: util/errors.c:101 msgid "not encrypted" msgstr "krptimata" #: util/errors.c:102 msgid "not processed" msgstr "ei tdeldud" #: util/errors.c:104 msgid "unusable public key" msgstr "mittekasutatav avalik vti" #: util/errors.c:105 msgid "unusable secret key" msgstr "mittekasutatav salajane vti" #: util/errors.c:106 msgid "keyserver error" msgstr "vtmeserveri viga" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "Katkesta" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "krptimata" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "allkirjastatud andmeid pole\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... see on viga (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "te leidsite vea ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "jah" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "jJ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "ei" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "eE" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "vlju" #: util/miscutil.c:443 msgid "qQ" msgstr "vV" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "HOIATUS: kasutan ebaturvalist mlu!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "Lisainfot leiate lehelt http://www.gnupg.org/documentation/faqs.html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "initsialiseerimata turvalise mluta ei ole operatsioon vimalik\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(te kasutasite vahest selle t jaoks valet programmi)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "HOIATUS: ebaturvaline omanik %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "HOIATUS: ebaturvalised igused %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "HOIATUS: ebaturvaline kataloogi omanik %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "Hoiatus: ebaturvalised kataloogi igused %s \"%s\"\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "ebaturvaliste iguste tttu ei laetud ifri laiendust \"%s\"\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "IDEA ifri lisandprogrammi pole\n" #~ msgid "Command> " #~ msgstr "Ksklus> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA vtmepaari pikkuseks saab 1024 bitti.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "trustdb on vigane; palun kivitage \"gpg --fix-trustdb\".\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "noteerimise infot ei saa v3 (PGP 2.x stiilis) allkirja lisada\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "noteerimise infot ei saa v3 (PGP 2.x stiilis) vtme allkirja lisada\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "poliisi URLi ei saa v3 (PGP 2.x) allkirjadesse panna\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "poliisi URLi ei saa v3 vtme (PGP 2.x) allkirjadesse panna\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA nuab 160 bitist rsialgoritmi kasutamist\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "lisainfot leiate lehelt http://www.gnupg.org/why-not-idea.html\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "noteerimise nimes vivad olla ainult trkitavad smbolid vi thikud\n" #~ "ning lpus peab olema '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "kasutaja noteerimise nimi peab sisaldama '@' mrki\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "kasutaja noteerimise nimi peab sisaldama '@' mrki\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "noteerimise vrtus ei vi sisaldada kontroll smboleid\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "HOIATUS: leidsin vigased noteerimise andmed\n" #~ msgid "not human readable" #~ msgstr "pole inimese poolt loetav" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "loe vtmed failist" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "loe vtmed failist" #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [aegub: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "vti %08lX: ootamatu allkirja klass (0x%02x) - jtan vahele\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "ei nnestu kivitada %s \"%s\": %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "kasutaja ID \"%s\" on juba thistatud\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "viga parooli loomisel: %s\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "halb parool vi tundmatu ifri algoritm (%d)\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "agendile ei nnestu seada kliendi pid\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "agendiga suhtlemiseks ei nnestu saada lugemise FD\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "agendiga suhtlemiseks ei nnestu saada kirjutamise FD\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "probleem gpg-agent programmiga suhtlemisel\n" #~ msgid "passphrase too long\n" #~ msgstr "liiga pikk parool\n" #~ msgid "invalid response from agent\n" #~ msgstr "vigane vastus agendilt\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "probleem agendiga: agent tagastas 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "vali sekundaarne vti N" #~ msgid "list signatures" #~ msgstr "nita allkirju" #~ msgid "sign the key" #~ msgstr "allkirjasta vti" #~ msgid "add a secondary key" #~ msgstr "lisa sekundaarne vti" #~ msgid "delete signatures" #~ msgstr "kustuta allkirjad" #~ msgid "change the expire date" #~ msgstr "muuda aegumise kuupeva" #~ msgid "set preference list" #~ msgstr "sea eelistuste nimekiri" #~ msgid "updated preferences" #~ msgstr "uuendatud eelistused" #~ msgid "No secondary key with index %d\n" #~ msgstr "Sekundaarne vti numbriga %d puudub\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key kasutaja-id" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key kasutaja-id" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "loo eraldiseisev allkiri" #~ msgid "sign the key non-revocably" #~ msgstr "allkirjasta vti kehtetuks mitte-tunnistatavana" #~ msgid "sign the key locally and non-revocably" #~ msgstr "allkirjasta vti lokaalselt ja kehtetuks mitte-tunnistatavana" #~ msgid "q" #~ msgstr "v" #~ msgid "help" #~ msgstr "help" #~ msgid "list" #~ msgstr "list" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "debug" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "ldine viga" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "save" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "key" #~ msgid "check" #~ msgstr "check" #~ msgid "c" #~ msgstr "c" #~ msgid "sign" #~ msgstr "sign" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "sign" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "lisa foto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "primary" #~ msgstr "primaarne" #~ msgid "toggle" #~ msgstr "llita" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #, fuzzy #~ msgid "keyserver" #~ msgstr "vtmeserveri viga" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "snumilhendi algoritm `%s' ei ole selles versioonis muudetav\n" #~ 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 "" #~ "Enne uue %s vtmepaari genereerimist.\n" #~ " minimaalne vtmepikkus on 768 bitti\n" #~ " vaikimisi vtmepikkus on 1024 bitti\n" #~ " suurim soovitatav vtmepikkus on 2048 bitti\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA lubab vtmepikkuseid ainult vahemikus 512 kuni 1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "vtmepikkus on liiga vike; RSA korral on vikseim vrtus 1024.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "vtmepikkus on liiga vike; vikseim lubatud vrtus on 768.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "vtmepikkus on liiga suur; suurim lubatud vrtus on %d.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "Suuremad vtmepikkused kui 2048 ei ole soovitatavad, kuna\n" #~ "arvutused vtavad VGA palju aega!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "Olete kindel, et soovite sellist vtmepikkust? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Olgu, kuid pidage meeles, et ka teie monitor ja klaviatuur on samuti\n" #~ "vimalikud rndeobjektid!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Eksperimentaalseid algoritme ei peaks kasutama!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "see ifri algoritm ei ole soovitatav; kasutage palun mnd standardsemat!\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "kirjutan faili `%s'\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "vabandust, seda ei saa pakettmoodis teha\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr "vtit '%s' ei leitud: %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "`%s' ei nnestu luua: %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "faili ei nnestu avada: %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " ka \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "vti %08lX: vti on thistatud!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "vti %08lX: alamvti on thistatud!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: vti on aegunud\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Me EI usalda seda vtit\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (allkirjastamiseks ja krptimiseks)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA (ainult allkirjastamiseks)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA (allkirjastamiseks ja krptimiseks)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA (ainult krpteerimiseks)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA (allkirjastamiseks ja krptimiseks)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: ei nnestu avada: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: HOIATUS: thi fail\n" #~ msgid "can't open %s: %s\n" #~ msgstr "%s ei nnestu avada: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = Usaldan vhesel mral\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = Usaldan tiesti\n" #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "lokaalselt allkirjastatud teie vtmega %08lX %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: ei nnestu kasutada: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: ei nnestu luua lukku\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: ei nnestu seada lukku\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: ei nnestu luua: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: kataloogi ei nnestu luua: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Kui te ikkagi soovite kasutada seda kehtetut vtit, vastake \"jah\"." #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "Fotot \"%s\" ei nnestu avada: %s\n" #~ msgid "can't open file: %s\n" #~ msgstr "faili ei nnestu avada: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "viga: puudub koolon\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "viga: usalduse vrtus puudub\n" #~ msgid " (main key ID %08lX)" #~ msgstr " (peamise vtme ID %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! alamvti on thistatud: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- leitud vltsitud thistamine\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? probleem thistamise kontrollimisel: %s\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr " [aegub: %s]" #~ msgid " [expires: %s]" #~ msgstr " [aegub: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "[thistatud] " #~ msgid "can't create %s: %s\n" #~ msgstr "%s ei nnestu luua: %s\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "HOIATUS: snumilhend `%s' ei ole OpenPGP osa. Kasutamine omal " #~ "vastutusel!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[failid]|krpteeri failid" #~ msgid "store only" #~ msgstr "ainult salvesta" #~ msgid "|[files]|decrypt files" #~ msgstr "|[failid]|dekrpteeri failid" #~ msgid "sign a key non-revocably" #~ msgstr "allkirjasta vti mitte-thistatavana" #~ msgid "sign a key locally and non-revocably" #~ msgstr "allkirjasta vti lokaalselt ja mitte-thistatavana" #~ msgid "list only the sequence of packets" #~ msgstr "nita ainult pakettide jrjendeid" #~ msgid "export the ownertrust values" #~ msgstr "ekspordi usalduse vrtused" #~ msgid "unattended trust database update" #~ msgstr "hooldusvaba usalduse andmebaasi uuendamine" #~ msgid "fix a corrupted trust database" #~ msgstr "paranda vigane usalduse andmebaas" #~ msgid "De-Armor a file or stdin" #~ msgstr "Pakenda fail vi standardsisend lahti" #~ msgid "En-Armor a file or stdin" #~ msgstr "Pakenda fail vi standardsisend" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NIMI|kasuta NIME vaikimisi saajana" #~ msgid "use the default key as default recipient" #~ msgstr "kasuta vaikimisi saajana vaikimisi vtit" #~ msgid "don't use the terminal at all" #~ msgstr "ra kasuta terminali" #~ msgid "force v3 signatures" #~ msgstr "kasuta v3 allkirju" #~ msgid "do not force v3 signatures" #~ msgstr "ra kasuta v3 allkirju" #~ msgid "force v4 key signatures" #~ msgstr "kasuta v4 vtme allkirju" #~ msgid "do not force v4 key signatures" #~ msgstr "ra kasuta v3 vtme allkirju" #~ msgid "always use a MDC for encryption" #~ msgstr "krptimisel kasuta alati MDC" #~ msgid "never use a MDC for encryption" #~ msgstr "krptimisel ra kasuta kunagi MDC" #~ msgid "use the gpg-agent" #~ msgstr "kasuta gpg-agenti" #~ msgid "batch mode: never ask" #~ msgstr "pakettmood: ra ksi kunagi" #~ msgid "assume yes on most questions" #~ msgstr "eelda enamus ksimustele jah vastust" #~ msgid "assume no on most questions" #~ msgstr "eelda enamus ksimustele ei vastust" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "lisa see vtmehoidla vtmehoidlate nimekirja" #~ msgid "add this secret keyring to the list" #~ msgstr "lisa see salajaste vtmete hoidla nimekirja" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NIMI|kasuta NIME vaikimisi salajase vtmena" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|HOST|kasuta seda vtmeserverit" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NIMI|terminali kooditabel on NIMI" #~ msgid "|[file]|write status info to file" #~ msgstr "|[fail]|kirjuta olekuinfo faili" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|VTMEID|usalda seda vtit tielikult" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|FAIL|lae laiendusmoodul FAIL" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emuleeri dokumendis RFC1991 kirjeldatud moodi" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "kasuta kikides tegevustes OpenPGP vtmeid" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "" #~ "kasuta kikide pakettide, iffrite ja lhendi seadeid PGP 2.x moodis" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|kasuta parooli moodi N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "|NIMI|kasuta paroolidega lhendialgoritmi NIMI" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NIMI|kasuta paroolidega ifri algoritmi NIMI" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NIMI|kasuta ifri algoritmi NIMI" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NIMI|kasuta teatelhendi algoritmi NIMI" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|kasuta pakkimisalgoritmi N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "ra lisa krptimisel vtme id" #~ msgid "Show Photo IDs" #~ msgstr "Esita foto IDd" #~ msgid "Don't show Photo IDs" #~ msgstr "Ei esita foto IDd" #~ msgid "Set command line to view Photo IDs" #~ msgstr "Sea ksurida foto ID vaatamiseks" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "pakkimise algoritm `%s' on selles versioonis ainult lugemiseks\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "pakkimise algoritm peab olema vahemikust %d..%d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Ei ole kindel, et see vti testi kuulub omanikule,\n" #~ "aktsepteerime seda siiski\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "eelistus %c%lu ei ole lubatud\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "vti %08lX: ei ole rfc2440 vti - jtsin vahele\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "MRKUS: Tuvastasin Elgamal primaarvtme - importimine vib vtta mne " #~ "aja\n" #~ msgid " (default)" #~ msgstr " (vaikimisi)" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX loodud: %s aegub: %s" #~ msgid "Policy: " #~ msgstr "Poliis: " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "vtmeserverist ei saa vtit: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "viga teate saatmisel serverile `%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "teate saatmine serverile `%s' nnestus (olek=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "teate saatmine serverile `%s' ebannestus: olek=%u\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "see vtmeserver ei toeta --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "vtmeserverist ei saa otsida: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "vti %08lX: see on PGP genereeritud ElGamal vti ja EI OLE " #~ "allkirjastamiseks turvaline!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "vti %08lX loodi %lu sekund tulevikus (ajahpe vi kella probleem)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "vti %08lX loodi %lu sekundit tulevikus (ajahpe vi kella probleem)\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "vti %08lX on mrgitud abslouutselt usaldatavaks\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "" #~ "jtsin Elgamal allkirjastamise vtme %08lX allkirja %08lX-le vahele\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "" #~ "jtsin %08lX allkirja Elgamal allkirjastamise vtmele %08lX vahele\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "kontrollin sgavusel %d allkirjastatud=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/" #~ "%d\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Valige kasutatav algoritm.\n" #~ "\n" #~ "DSA (ka DSS) on digitaalallkirja algoritm, mida saab kasutada ainult\n" #~ "allkirjades. See on soovitatav algoritm, kuna DSA allkirjade kontroll\n" #~ "on oluliselt kiirem ElGamal allkirjade kontrollimisest.\n" #~ "\n" #~ "ElGamal on algoritm, mida saab kasutada nii allkirjastamisel, kui ka\n" #~ "krptimisel. OpenPGP eristab selle algoritmi kahte varianti: ainult\n" #~ "krptivat ja krptivat ning allkirjastavat. Algoritm on sama, aga\n" #~ "turvaliseks allkirjastamiseks on vaja valida sobivad parameetrid. See\n" #~ "programm toetab mlemat varianti, aga teised OpenPGP realisatsioonid\n" #~ "ei pruugi krptivat ning allkirjastavat vimalust tunda.\n" #~ "\n" #~ "Esimene (primaarne) vti peab alati olema selline, mida saab kasutada\n" #~ "allkirjastamisel; see on ka phjus, miks selles mens ei lubata valida\n" #~ "ainult krptivat ElGamal vtit." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Kuigi need vtmed on kirjeldatud dokumendis RFC2440, ei ole nende\n" #~ "kasutamine soovitatav, kuna mitte kik programmid ei toeta neid\n" #~ "ja nendega loodud allkirjad on suured ning kontrollimine aeglane." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "seni on kontrollitud %lu vtit (%lu allkirja)\n" #~ msgid "key incomplete\n" #~ msgstr "mittetielik vti\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "vti %08lX ei ole tielik\n" gnupg-1.4.20/po/remove-potcdate.sin0000644000175000017500000000066012516175025014074 00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gnupg-1.4.20/po/nb.gmo0000644000175000017500000025752412635457221011406 00000000000000t8K-KKuLLWMpMMMMMN N2=NDpN.NIN7.OfO OOOOOOP0PIP(fPPPP(P Q&Q$CQhQ~Q&QQ,QR!R!8RZRpRRR RR RRS S2SDSUSoS*S"SBST(0T.YT3T!T(TU"U@USUoU"UUUUBU=*VhV(yV$V$VV W!*WLWiW W W,W4WX.XCXaXvX'XXXXXY $Y'EYmY"YYY-Y(Z0-ZH^Z Z [ [[[\D\-`\.\I\*]+2]'^] ]]]]]]^^35^i^4q^-^^ ^ ^?^45_#j_(____6_-&`%T`3z`9`0`<aGVa@a>a+b=Jbbbbbb bbb c/c'Lc8tc&c5c. d59d*od.d0d&d,!eNehe ee#eee"e. f8fHf"g(=g$fgggg8g$hAhUhmhh#i?iRiniiiiiiijj%1jWj_jvj.j j<j"k,Bk"ok"k2k k( l 2l Sl^lrlll ll"Pmsmmmmmm n10n%bnnnEGo>ooN\p,p"p+p)'q&Qqxq[r'bsst6tHtQtjt+t,t3t uu#5u+Yu"u+u"u uv?,v%lvvvvvvw$w9w/Sw0ww!www!x&xB~1~=~I~4;p#?@+TNIπI5c;?Ձ<HR<)C:a=<ڃ@$X }-2̄1I1>{K@5G*}7,0 0>4o 2Ňh&#2͎>?M"?&b!3>ߐc%,5Ց 2,__ ʒ Ւ  ! 2>W%p")+ 3 @Ne tŔԔ !(7`w" Ǖ,!'N.v˖ܖ%.C5X <*7Rj~ǘ):(Ir Ùϙ0H,a ĚКٚ& # :G0e$=% @'_#Ɯٜ(F'b&&ѝ&> F R ^j/"Kٞ%%&K$r#؟'ߟ* <HXhz$@ $"G!_ǡ"$"G Xf.}Ţ21I]z'ʣ+'6$I&n$', 6Wo$IJAa~"# !&D_{*-$' ;.\"+)ڨ#(-H6v5/"3'V~;0ժ"%)/O2!ƫ: >!_!(+̬81!N4p0֭2 6?)v9ڮ&G,Htٯ#+Ooհ "B ao ű.?'Y(2в!,%RU s$)ӳ۳% &6]1l´%%:` t #ʵ <8Ni6,ٶ#M*-x·ڷ"$G*a!$˸I.xݹ#+#O!s$պ*2.Bq*  "B%^&ȼ$ &%L\3m%*ǽ%(-A9oҾ% *=P-oѿ 5T+o!(07.@-o*+/F$k1~#!(0Y n#x#!"-3IR 9Zz!# CO_y  )<6T# * (5G= -C]| '*E.DtA6=2p$7<7'F_  $# D#]*3;o'##@$d$$$$0>N3C0$6 [g%$$$ #0$T)y")-K/i(&$7\.{% )HW$w $0)N3x0<74#l, "' JkpYYX7m.%&3Z%u% :2:P d*"6H&h( <0B1sG  !5WUq/8O0,.+ -@%Y:D ;N >7%#.Ix2-#-46b3CF?X8(94 CQf~95CN'7+3"R0u)(,&> Wb*u(<#O/,25_ ='#KZs".Q"k  $<Rg= ?"9M\"+(%"-H%v"2  "4W t)! Kl$&$.#)R |GBNS_3%4 .B*q*Pp;? <M &.(3/)c*A';M`$s$" 85S*&':Ss/%r\52=/p8-9A!^"599K  0"9,S-$$,Jj8G:'FbU<"<,_@I*5 S` X U =c B J G/ Ow  > .& HU ; A > J[ ) % 7 <.=kQMUIQ62(:[634>6!u3(A9)U/CJ9>WQ{&d*4  +b1       ,&F m(14J _ m x  '=CF+a-% 0 "P .s 4 4  ! !8!L!d!*!!!?!" 7"QE"'""""###:#R#h##### #&##%$;$ W$$e$$$$$$.%%>%d%%%%+%%% &&39&$m&<&%&/&&%'-L'-z'''''$ ($2(#W(1{(((,(5)49)&n)) ) ))%)4)1*WP*0*+*(+!.+7P++2++++ ,$,;,R,k,-,,K,- %-%3-Y- t-----$- .*".M.(U.~...(..#./4;/p////*// 0-00A0 r00$0)0$0&1*-1X1g101"11'1O2Qm2#2#2"3#*3#N3"r3"33!334.54/d4.4$4&4453D53x525+5% 68165j6:626&7(571^7#7J7C7/C81s8=8?8#9'>9!f9D9(9+9,":.O:0~:<:%:+;?>;?~;#;%;;<<D<.<@<< =(&=RO=T=)= !>B>!_>(>!>>>&?&'?"N?'q?!?,?,?@$@@@`@ {@@@@@@A7(A`AeAtA%A3A/A0BABDB aB(oBB.B B)B,C!-C,OC|CDCCC"D5D(OD6xD5DD D EE $E1E*PE{E ~E:EEE$EF83F0lF$FNF-G?G\GtGGG)GG3G"3H,VH(HHHHHHJIKIbIrI)IIII.J-2J)`JJ$J J$J7J13KeK)KK,KK K L!L$3LXL!qLL!L)L.L$'M2LMMM.M&M&M N+AN/mN@NNNO-(OVOiO{O O$O2O# P1PJP`P/PBPP.Q(@Q,iQ.Q$Q Q8QA.R0pR9R,RLSUS1rS!SS"ST)%TOT iT%tT#T#T T5U"9UG\UUUUUV V$V @VaVV#VVVVV W)W EW RW_WzWW*WW&WX 7XEX\XoX;XX7X#Y>Y3PY Y YEY#Y ZZ>Z \Z+hZ6ZZ Z"[+)[!U[w[[[[[[Y[@2\8s\2\:\] 7]3X]8]3]:]4^"E^h^ ^5^ ^^%^4_$$D9Qu-TPf[ ;% zvR\eKqmz:#`':). }ouq5TS1N-2pN!c] <=/x%#gw<cAU:y&%( B^_kLFAorCi;@t& cnKO\lOH'mM)+N%q)GQ$ S^1C|edq|pbI>a7p~j w|+OoI]Jp (dafO$40R@7yYs*" vs<nGVP&R "U,HIZE 60Lg~t;#B`Yi_0u=3?1,4h\h[?_V,z#'t}r?`n] 3yY@F{THM2D* 7=x-vB8kZ8alJF8wPnLZ,! H4YDUo~*j9f; 81~{v W[_dW{2>CX^EXR/me X TB-EI/(z5lGW`d69Wct*2!+V> iJEh.x3em(6":D93u/Kf4?SJ>lC^{A6yk| )=PXsx<&KsgLg !b7r55@\jrjiGVQ+AQkh0bwSZ"M} }Ub.Na[.M]'F Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for digest algorithm %s It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" was already locally signed by key %s "%s" was already signed by key %s %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s does not yet work with %s %s encrypted data %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: Admin commands are allowed Admin commands are not allowed Admin-only command Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't edit this key: %s Can't open `%s': %s Cardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Cipher: Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Delete this good signature? (y/N/q)Delete this key from the keyring? (y/N) Deleted %d signature. Deleted %d signatures. Digest: Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: EncryptEnter Admin PIN: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter new filenameEnter passphrase Enter passphrase: Enter the new passphrase for this secret key. Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Go ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) NOTE: %s is not for normal use! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: secret key %s expired at %s NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo reason specifiedNo such user ID. No trust value assigned to: Not a valid email address Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: This key has been disabled. Note: This key has expired! Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please remove the current card and insert the one with serial number: %.*s Please report bugs to . Please select at most one subkey. Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Private DO data: Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create? (y/N) Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a secret key! - really delete? (y/N) This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. Total number processed: %lu URL to retrieve public key: Unknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": already clean User ID is no longer validWARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are using the `%s' character set. You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ undef ][ expired][ revoked][ unknown][User ID not found][filename][not set][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid signature expiration access to admin commands is not configured add a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' armor header: armor: %s assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarycCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancel|cancelcannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecksum errorcompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create ascii armored outputcreated: %screation timestamp missing dearmoring failed: %s decrypt data (default)decryption failed: %s delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s directory `%s' created disable keydisableddo not make any changesdo not update the trustdb after importenable keyenarmoring failed: %s encrypt dataencrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport keysexport keys to a key serverexport signatures that are marked as local-onlyexporting secret keys not allowed external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorflag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat(%d) failed in %s: %s general errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key iImMqQsSimport keys from a key serverimport/merge keysimporting secret keys not allowed invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmalemalformed CRC malformed user idmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmoving a key signature to the correct place nNnested clear text signatures network errornew configuration file `%s' created nono = sign found in group definition `%s' no datano default secret keyring: %s no entropy gathering module detected no keyserver action! no remote program execution supported no secret key no secret subkey for public subkey %s - ignoring no signature found no such user idno valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay|okayoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet prompt before overwritingpublic and secret key created and signed. public key %s not found: %s public key decryption failed: %s public key encrypted data: good DEK public key is %s public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reason for revocation: refreshing %d keys from %s refreshing 1 key from %s remove keys from the public keyringremove keys from the secret keyringrenaming `%s' to `%s' failed: %s requesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key already stored on a card secret key not availablesecret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow admin commandsshow key fingerprintshow selected photo IDsshow the keyring name in key listingsshow this helpsign a keysign a key locallysign or edit a keysign selected user IDs locallysign selected user IDs with a trust signaturesignatures created so far: %lu signing failed: %s skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipping block of type %d skipping v3 self-signature on user ID "%s" storing key onto card failed: %s symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid there is a secret key for public key "%s"! this may be caused by a missing self-signature this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust: %sunable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse this user-id to sign or decryptuser ID "%s" is already revoked using cipher %s using subkey %s instead of primary key %s validity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --sign --encrypt while in %s mode you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN%%0A[sigs done: %lu]Project-Id-Version: gnupg 1.4.3 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:11+0200 Last-Translator: Trond Endrestl Language-Team: Norwegian Bokml Language: nb MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit Tast inn brukeriden. Avslutt med en blank linje: Ikke nok tilfeldige byter tilgjengelig. Vennligst gjr noe annet arbeid for gi operativsystemet en sjanse til samle mer entropy! (Trenger %d flere byter) Stttede algoritmer: Du trenger en brukerid for identifisere nkkelen din; programvaren konstruerer brukeriden ut fra fullt navn, kommentar og epostadresse til denne formen: Heinrich Heine (Der Dichter) aka %s bruker %s nkkel %s importert: %lu uendret: %lu nye undernkler: %lu nye brukerider: %lu ikke importert: %lu uten brukerider: %lu %s preferanse for digestalgoritme %s Det er ikke sikkert at signaturen tilhrer brukeren. Signaturen er sannsynligvis et FALSKNERI. Det er ingen indikasjon p at signaturen tilhrer eieren. Dette kan bety at signaturen er falsk. nye signaturer: %lu %s Serienummer for kort = Nkkelfingeravtrykk = Fingeravstrykk for undernkkel: leste hemmelige nkler: %lu nye nkler som ble hoppet over: %lu oppryddete brukerider: %lu Fingeravtrykk for undernkkel: oppryddete signaturer: %lu (%d) DSA (sette dine egne muligheter) (%d) DSA (bare signering) (%d) ElGamal (bare kryptering) (%d) RSA (bare kryptering) (%d) RSA (sette dine egne muligheter) (%d) RSA (bare signering) (0) Jeg vil ikke svare.%s (1) Jeg har ikke sjekket i det hele tatt.%s (1) Signaturnkkel (2) Krypteringsnkkel (2) Jeg har gjort en vanlig sjekk.%s (3) Autentiseringsnkkel (3) Jeg har sjekket veldig nye.%s nye nkkelopphevinger: %lu %d = Jeg stoler IKKE p den %d = Jeg vet ikke eller vil ikke uttale meg %d = Jeg stoler fullt %d = Jeg stoler marginalt %d = Jeg stoler fullstendig p den Kunne ikke signere. aka %s m = tilbake til hovedmenyen q = avslutt s = hopp over denne nkkelen importerte hemmelige nkler: %lu (hovednkkelid %s) (ikke-eksporterbar) (ikke-opphevbar) Fingeravtrykk for primrnkkel: uforandrede hemmelige nkler: %lu %s var allerede lokalt signert av nkkelen %s %s var allerede signert av nkkelen %s %d Admin PIN-forsk fr kortet blir lst permanent %d ubrukelige signaturer %d signaturer ble ikke sjekket p grunn av feil %d signaturer ble ikke sjekket p grunn av manglende nkler %d brukerider uten gyldige selvsignaturer ble oppdaget %lu nkler cachet (%lu signaturer) %lu nkler cachet s langt (%lu signaturer) %lu nkler behandlet hittil %s virker ikke enn med %s %s krypterte data %s er ikke fornuftig med %s! %s er ikke tillatt sammen med %s! %s signatur, digestalgoritme %s %s. %s/%s kryptert for: "%s" %s/%s-signatur fra: %s %s: Det er begrenset indikasjon p at denne nkkelen faktisk tilhrer den angitte eieren %s: Det finnes ingen indikasjon p at denne nkkelen faktisk tilhrer den angitte eieren %s: hoppet over: %s %s: hoppet over: offentlig nkkel er allerede tilstede %s: hoppet over: offentlig nkkel er utkoblet %s:%d: ugyldig auto-key-locate-liste %s:%d: ugyldige eksportvalg %s:%d: ugyldige importvalg %s:%d: ugyldige valg for nkkelserver %s:%d: ugyldige listevalg %s:%d: ugyldige valg for bekreftelse %u-bit %s-nkkel, ID %s, opprettet %s(sensitiv)(med mindre du angir nkkelen ved hjelp av fingeravtrykk) (du kan ha brukt feil program for denne oppgaven) --clearsign [filnavn]--decrypt [filnavn]--edit-key brukerid [kommandoer]--encrypt [filnavn]--lsign-key brukerid--output virker ikke for denne kommandoen --sign --encrypt [filnavn]--sign --symmetric [filnavn]--sign [filnavn]--sign-key brukerid--store [filnavn]--symmetric --encrypt [filnavn]--symmetric --sign --encrypt [filnavn]--symmetric [filnavn]-k[v][v][v][c] [brukerid] [nkkelknippe]... dette er en feil (%s:%d:%s) 1 ubrukelig signatur 1 signatur ble ikke sjekket p grunn av en manglende nkkel 1 signatur ble ikke sjekket p grunn av en feil 1 brukerid uten gyldig selvsignatur ble oppdaget @ (Se mansiden for en komplett liste over alle kommandoene og valgene) @ Eksempler: -se -r Bob [fil] signere og kryptere for brukeren Bob --clearsign [fil] lage en klartekstsignatur --detach-sign [fil] lage en adskilt signatur --list-keys [navn] vise nkler --fingerprint [navn] vise fingeravtrykk @ Valg: @Kommandoer: Admin-kommandoer er tillatt Admin-kommandoer er ikke tillatt Admin-reservert kommando Er du virkelig sikker p at du vil signerere denne nkkelen med din nkkel %s (%s) Er du sikker p at du vil legge den til? (j/N) Er du fortsatt sikker p at du vil signerere den? (j/N) Er du fortsatt sikker p at du vil gjre denne nkkelen til en opphever? (j/N) Er du sikker p at du vil slette den? (j/N) Er du sikker p at du vil erstatte den? (j/N) Er du sikker p at du vil bruke den? (j/N) AutentisereDRLIG signatur fra %sCA-fingeravtrykk: CRC-feil; %06lX - %06lX Kan ikke redigere denne nkkelen: %s Kan ikke pne %s: %s Kortholders fornavn: Kortholders etternavn: Sertifikater som frer til en fullstendig betrodd nkkel: BekrefteEndre (N)avn, (K)ommentar, (E)postadresse eller (R)iktig/(A)vslutt? Endre (N)avn, (K)ommentar, (E)postadresse eller (A)vslutt? Cipher: Kommentar: Kompresjon: Lage et utpekt opphevingssertifikat for denne nkkelen? (j/N) Lage et opphevingssertifikat for denne nkkelen? (j/N) Slette denne gode signaturen? (j/N/a)Slette denne nkkelen fra nkkelknippet? (j/N)Slettet %d signatur. Slettet %d signaturer. Digest: Vil du virkelig slette den valgte nkkelen? (j/N) Vil du virkelig slette denne nkkelen? (j/N) Vil du virkelig gjre dette? (j/N) Vil du virkelig oppheve hele nkkelen? (j/N) Vil du virkelig oppheve de valgte undernklene? (j/N) Vil du virkelig oppheve denne undernkkelen? (j/N) Vil du virkelig sette denne nkkelen til fullstendig tillit? (j/N) Vil du utstede en ny signatur for erstatte den som er utgtt? (j/N) Vil du forfremme den til en fullt eksporterbar signatur? (j/N) Vil du forfremme den til en OpenPGP-selvsignatur? (j/N) Vil du likevel signere den igjen? (j/N) Vil du at signaturen skal utg p samme tidspunkt? (J/n) Epostadresse: Kryptere dataTast inn Admin-PIN: Tast inn ny Admin-PIN: Tast inn ny PIN: Tast inn PIN: Tast inn nytt filnavnTast inn passfrase Tast inn passfrase: Tast inn den nye passfrasen for denne hemmelige nkklen. Feil ved lesing av sikkerhetskopiert nkkel %s: %s Feil: Det kombinerte navnet er for langt (grensa gr ved %d tegn). Feil: Doble mellomrom er ikke tillatt. Feil: Logindata er for langt (grensa gr ved %d tegn). Feil: Bare ren ASCII er forelpig tillatt. Feil: Privat DO for lang (grensa gr ved %d tegn). Feil: Tegnet < kan ikke brukes. Feil: URL er for lang (grensa gr ved %d tegn). Feil: ugyldig tegn i preferansestrengen. Feil: ugyldig formattert fingeravtrykk. Feil: ugyldig lengde p preferansestrengen. Feil: ugyldig respons. Utgtt signatur fra %sSrtrekk: Fila %s finnes. Sett i gang og tast inn meldingen din ... God signatur fra %sHash: Tips: Velg brukeriden som skal signeres Trykk p enter nr du er klar eller tast c for avbryte: Hvor nyaktig har du bekreftet at nkkelen du skal signere faktisk tilhrer den overnevnte personen? Tast inn 0 dersom du ikke vet svaret. Hvor mye stoler du p at denne nkkelen faktisk tilhrer den angitte brukeren? Jeg har sjekket denne nkkelen p vanlig mte. Jeg har sjekket denne nkkelen veldig nye. Jeg har ikke sjekket denne nkkelen i det hele tatt. Ugyldig tegn i kommentar Ugyldig tegn i navn Ugyldig kommando (prv help) Ugyldig nkkel %s gjort gyldig av --allow-non-selfsigned-uid Ugyldig passfrase; vennligst prv igjenUgyldig valg. Er dette korrekt (j/N)? Er dette i orden? (j/N) Det er IKKE sikkert at nkkelen tilhrer personen som er angitt i brukeriden. Dersom du *virkelig* vet hva du gjr, kan du besvare det neste sprsmlet med ja. Nkkelen %s er allerede opphevet. Nkkel tilgjengelig ved: Nkkel utgr ikke i det hele tatt Nkkel utgr den %s Nkkelgenereringen ble avbrutt. Nkkelgenerering mislyktes: %s Nkkelen har blitt kompromittertNkkelen er ikke lengre i brukNkkelen er beskyttet. Nkkelen er opphevet.Nkkelen er overgttNkkelen er gyldig for? (0) Nkkelen ble ikke endret, s ingen oppdatering er ndvendig. NkkelknippeSprkpreferanser:Logindata (kontonavn): Lage sikkerhetskopi av krypteringsnkler utenfor kortet? (J/n) MERK: %s er ikke for vanlig bruk! MERK: opprettelse av undernkler for v3-nkler er ikke i samsvar med OpenPGP MERK: ingen standard valgfil %s MERK: den gamle valgfila %s ble ignorert NOTIS: hemmelig nkkel %s utgikk den %s NOTIS: signaturnkkelen %s utgikk %s MERK: enkel S2K-modus (0) er sterkt frardet Navnet kan ikke starte med et siffer Navnet m vre minst 5 tegn langt Trenger den hemmelige nkkelen for gjre dette. NnKeEeRrAaIngen grunn er angittDet finnes ingen slik brukerid. Ingen tillitsverdi tilordnet til: Ikke en gyldig epostadresse Notasjoner: Merk at denne nkkelen ikke kan brukes for kryptering. Du nsker kanskje bruke kommandoen --edit-key for generere en sekundrnkkel for dette formlet. Merk: Denne nkkelen har blitt utkoblet. Merk: Denne nkkelen er utgtt! Ingen ble slettet. Ingenting signere med nkkelen %s OpenPGP-kortnummer %s oppdaget OpenPGP-kort er ikke tilgjengelig: %s Overskrive (j/N) PIN-callback returnerte en feil: %s PIN for CHV%d er for kort; minum lengde er %d PIN ble ikke gjentatt korrekt; prv igjenVennligst korriger feilen frst Vennligst bestem hvor mye du tiltror denne brukeren korrekt bekrefte andre brukeres nkler (ved se p pass, sjekke fingeravtrykk fra forskjellige kilder, osv.) Vennligst ikke putt epostadressen inn i fullt navn eller i kommentaren Vennligst sett inn kortet og trykk p enter eller tast inn c for avbryte: Vr obs p at fabrikkinnstilingene for PIN-kodene er PIN = %s Admin PIN = %s Du br endre dem med kommandoen --change-pin Vennligst fjern det nvrende kortet og sett inn kortet med serienummeret: %.*s Vennligst rapporter feil til . Vennligst velg minst en undernkkel. Vennligst velg hvilken type nkkel du vil generere: Vennligst velg hvilken type nkkel du vil ha: Vennligst velg hvor nkkelen skal lagres: Vennligst angi hvor lenge nkkelen skal vre gyldig. 0 = nkkelen utgr ikke = nkkelen utgr om n days w = nkkelen utgr om n weeks m = nkkelen utgr om n months y = nkkelen utgr om n years Vennligst angi hvor lenge signaturen skal vre gyldig. 0 = signaturen utgr ikke = signaturen utgr om n days w = signaturen utgr om n weeks m = signaturen utgr om n months y = signaturen utgr om n years Vennligst bruk kommandoen toggle frst. Vennligst vent, entropy blir innsamlet. Gjr noe arbeid dersom det hindrer deg fra kjede deg, fordi arbeidet vil forbedre kvaliteten p entropyen. Fingeravtrykk for primrnkkel:Privat DO-data: Offentlig nkkel: Offentlig nkkel er utkoblet. Avslutte uten lagre? (j/N) RSA-modulus mangler eller har ikke en strrelse p %d bits RSA-primtall %s mangler eller har ikke en strrelse p %d bits offentlig RSA-eksponent mangler eller er strre enn %d bits Fullt navn: Virkelig opprette? (j/N)Virkelig flytte primrnkkelen? (j/N) Virkelig fjerne alle valgte brukerider? (j/N) Virkelig fjerne denne brukeriden? (j/N) Virkelig oppheve alle de valgte brukeridene? (j/N) Virkelig oppheve denne brukeriden? (j/N) Virkelig signerere alle brukerider? (j/N) Virkelig signere? (j/N) Virkelig oppdatere preferansene for de valgte brukeridene? (j/N) Virkelig oppdatere preferansene? (j/N) Gjenta passfrase Gjenta passfrase: Gjenta denne PIN: Erstatte eksisterende nkkel? (j/N) Erstatte eksisterende nkler? (j/N) nsket nkkelstrrelse er %u bits Lagre endringene? (j/N) Hemmelig nkkel er tilgjengelig Hemmelige deler av primrnkkelen er ikke tilgjengelig. Hemmelige deler av primrnkkelen er lagret p kort. sette preferanseliste til: Kjnn ((M)ale, (F)emale eller mellomrom): SignereSignere den? (j/N) Signaturen utgr ikke i det hele tatt Signatur utgtt %s Signatur utgr %s Signaturen utgr den %s Signaturen er gyldig for? (%s) Signatur opprettet %s Signatur laget %s ved hjelp av %s-nkkel ID %s SsKkAaQqUndernkkel %s er allerede opphevet. Bruksmte: gpg [valg] [filer] signere, sjekke, kryptere eller dekryptere standard operasjon avhenger av inputdata Denne tilfeldig-tall-generatoren er bare en omvei for f programmet til kjre - den er p ingen mte en sterk RNG! IKKE BRUK NOE DATA GENERERT AV DETTE PROGRAMMET!! Selvsignaturen p %s er en PGP 2.x-aktig signatur. Signaturen vil bli markert som ikke-eksporterbar. Signaturen vil bli markert som ikke-opphevbar. Det er ingen preferanser for en PGP 2.x-aktig brukerid. Denne kommandoen er ikke tillatt i %s-modus. Dette er en hemmelig nkkel! - virkelig slette den? (j/N)denne nkkelen tilhrer oss Denne nkkelen har blitt utkobletDenne nkkelen er utgtt!Denne nkkelen utgr den %s. Denne nkkelen er ikke beskyttet. Denne nkkelen kan bli opphevet av %s med nkkelen %sDenne nkkelen tilhrer sannsynligvis den angitte eieren Denne nkkelen ble opphevet den %s av %s med nkkelen %s Denne signaturen utgikk den %s. Dette vil vre en selvsignatur. Dette ville gjre nkkelen ubrukelig i PGP 2.x. Totalt antall behandlet: %lu URL for hente offentlig nkkel: Ukjent signaturtype %s Bruksmte: gpg [valg] [filer] (-h for hjelp)Bruksmte: gpgv [valg] [filer] (-h for hjelp)Bruke denne nkkelen likevel? (j/N) Brukerid %s er utgtt.Brukeriden %s er ikke selvsignert.Brukerid %s er opphevet.Brukeriden %s er signerbar.brukerid %s: allerede renset Brukerid er ikke lengre gyldigADVARSEL: %s overstyrere %s ADVARSEL: 2 filer med konfidensiell informasjon finnes. ADVARSEL: Denne nkkelen har blitt opphevet av den utpekte oppheveren! ADVARSEL: Denne nkkelen har blitt opphevet av dens eier! ADVARSEL: Denne nkkelen er ikke sertifisert med en betrodd signatur! ADVARSEL: Denne nkkelen er ikke sertifisert med tilstrekkelige betrodde signaturer! ADVARSEL: Denne undernkkelen har blitt opphevet av eieren! ADVARSEL: Bruker ubetrodd nkkel! ADVARSEL: Vi stoler IKKE p denne nkkelen! ADVARSEL: %s er en tom fil ADVARSEL: en brukeridsignatur er datert %d sekunder i fremtiden ptvinging av kompresjonsalgoritme %s bryter med mottakerens preferanser ADVARSEL: digestalgoritmen %s er avlegs ADVARSEL: tvang av kompresjonsalgoritme %s (%d) bryter med mottakerens preferanser ADVARSEL: ptvinging av kompresjonsalgoritme %s (%d) bryter med mottakerens preferanser ADVARSEL: ptvinging av symmetrisk cipher %s (%d) bryter med mottakerens preferanser ADVARSEL: ugyldig strrelse p random_seed-fila - ikke brukt ADVARSEL: nkkel %s kan vre opphevet: henter opphevingsnkkel %s ADVARSEL: nkkel %s kan vre opphevet: opphevingsnkkel %s ikke tilstede. ADVARSEL: nkkelserver-valget %s er ikke i bruk p denne plattformen ADVARSEL: meldingen er kryptert med en svak nkkel for den symmetriske cipher. ADVARSEL: ingenting eksportert ADVARSEL: valgene i %s er ikke aktive under denne kjringen ADVARSEL: programmet kan opprette en corefil! ADVARSEL: mottakere (-r) angitt uten bruke offentlig nkkelkryptering ADVARSEL: hemmelig nkkel %s har ikke en enkel SK-sjekksum ADVARSEL: signaturen vil ikke bli markert som ikke-eksporterbar. ADVARSEL: signaturen vil ikke bli markert som ikke-opphevbar. ADVARSEL: nkkel %s kan vre opphevet: opphevingsnkkel %s ikke tilstede. ADVARSEL: klarte ikke fange URI %s: %s ADVARSEL: klarte ikke parse URI %s ADVARSEL: klarte ikke oppfriske nkkel %s via %s: %s ADVARSEL: klarte ikke fjerne midlertidig katalog %s: %s ADVARSEL: klarte ikke fjerne midlertidig fil (%s) %s: %s ADVARSEL: utrygt eierskap p katalogene p nivene over konfigurasjonsfilen %s ADVARSEL: utrygt eierskap p katalogene p nivene over hjemmekatalogen %s ADVARSEL: utrygge rettigheter p katalogene p nivene over konfigurasjonsfilen %s ADVARSEL: utrygge rettigheter p katalogene p nivene over hjemmekatalogen %s ADVARSEL: utrygt eierskap p konfigurasjonsfilen %s ADVARSEL: utrygt eierskap p hjemmekatalogen %s ADVARSEL: utrygge rettigheter p konfigurasjonsfilen %s ADVARSEL: utrygge rettigheter p hjemmekatalogen %s ADVARSEL: bruker eksperimentell cipheralgoritme %s ADVARSEL: bruker eksperimentell digest-algoritme %s ADVARSEL: bruker eksperimentell offentlig nkkel-algoritme %s ADVARSEL: bruker usikkert minne! ADVARSEL: bruke usikker tilfeldig-tall-generator!! Vi trenger generere ganske mange tilfeldige byter. Det er en god id utfre andre oppgaver (skrive p tastaturet, flytte p musa, la diskene jobbe) under primtallgenereringen; dette gir tilfeldig-tall-generatoren en bedre sjanse til samle nok entropy. Hvilken nkkelstrrelse vil du ha? (%u) Nr du signerer en brukerid p en nkkel, br du frst bekrefte at nkkelen tilhrer den personen som er angitt i brukeriden. Det er nyttig for andre vite hvor nyaktig du bekreftet dette. "0" betyr at du forteller hvor nye du bekreftet nkkelen. "1" betyr at du tror at nkkelen eies av den personen som pstr eie nkkelen, men du kunne ikke eller bekreftet ikke nkkelen i det hele tatt. Dette er nyttig for en identitetskontroll hvor du signerer nkkelen til et pseudonym. "2" betyr at du gjorde en vanlig bekreftelse av nkkelen. For eksempel, dette kunne bety at du bekreftet nkkelens fingeravtrykk og sjekket brukeriden mot et fotografisk id. "3" betyr at du gjorde en utfyllende bekreftelse av nkkelen. For eksempel, dette kunne bety at du og eieren av nkkelen bekreftet personlig nkkelens fingeravtrykk og at du sjekket ved hjelp av et dokument med fotografi som er vanskelig forfalske at navnet p nkkeleieren stemmer med navnet i brukeriden til nkkelen og til slutt at du bekreftet at epostadressen i nkkelen tilhrer nkkelens eier. Vr obs p at eksemplene gitt over for nivene 2 og 3 *bare* er eksempler. Alt i alt er det opp til deg bestemme hva vanlig og utfyllende betyr nr du signerer andres nkler. Svar 0 dersom du ikke vet hva det riktige svaret er.Du bruker tegnsettet %s. Du kan ikke slette den siste brukeriden! Du oppga ikke en brukerid. (Du kan bruke -r) Du nsker ikke en passfrase - dette er sannsynligvis en *dum* id! Du vil ikke ha en passfrase - dette er sannsynligvis en *dum* id! Jeg fortsetter likevel. Du kan endre passfrasen din nr som helst ved hjelp av dette programmet og valget --edit-key. Du kan ikke lage en OpenPGP-signatur p en PGP-2.x-nkkel i --pgp2-modus. Du m velge minst en nkkel. Du m velge minst en brukerid. Du m velge minst en nkkel. Du trenger en passfrase for beskytte din hemmelige nkkel. Du trenger en passfrase for lse opp den hemmelige nkkelen for brukeren: %s Du trenger en passfrase for lse opp den hemmelige nkkelen for brukeren: %.*s %u-bit %s nkkel, ID %s, opprettet %s%s Du valgte denne brukeriden: %s Din nvrende signatur p %s er utgtt. Din nvrede signatur p %s er en lokal signatur. Valget ditt? Ditt valg? Ditt valg? (angi ? for mer informasjon): Systemet ditt kan ikke vise datoer etter 2038. Likevel vil det bli hndtert korrekt opp til 2106. [ udef ][ utgtt][ opphevet][ ukjent][Brukerid ikke funnet][filnavn][ikke satt][oppheving][selvsignatur][usikker]%s er allerede komprimert %s er ikke et JPEG-fil %s er ikke en vanlig fil - ignorert %s er ikke et gyldig tegnsett %s er ikke en gyldig signaturutgelse tilgang til admin-kommandoer er ikke konfigurert legge til en fotoidlegge til en opphevingsnkkellegge til en undernkkellegge til en brukeridflertydig valg %s armorheader: armor: %s antar at signert data er i %s ugyldig MPIugyldig URIugyldig sertifikatugyldig nkkelugyldig passfraseugyldig offentlig nkkelugyldig hemmelig nkkelugyldig signaturvre noenlunde stillebinrcCcacher nkkelknippet %s kan ikke aksere %s - ugyldig OpenPGP-kort? kan ikke aksere %s: %s kan ikke lukke %s: %s kan ikke opprette %s: %s kan ikke opprette sikkerhetskopifil %s: %s kan ikke opprette katalogen %s: %s kan ikke opprette ls for %s kan ikke gjre dette i batchmodus kan ikke gjre dette i batchmode uten --yes kan ikke generere et primtall med pbits=%u qbits=%u kan ikke generere et primtall med mindre enn %d bit kan ikke lse %s kan ikke lse %s: %s kan ikke pne %s kan ikke pne %s: %s kan ikke pne nkkelknippetkan ikke sprre om passfrase i batchmodus kan ikke lese %s: %s kan ikke stat() %s: %s kan ikke bruke en symmetrisk ESK-pakke p grunn av S2K-modusen kan ikke skrive %s: %s cancel|cancelkan ikke unng svak nkkel for symmetrisk krypteringsalgorime; prvde %d ganger! kortet sttter ikke digestalgoritme %s kort er permanent lst! endre URL for hente nkkelvise et CA-fingeravtrykkendre PIN p et kortendre kortholders navnendre kortholders kjnnendre data p et kortendre sprkpreferanseneendre loginnavnetendre eiertillitenendre passfrasensjekke signaturersjekksumfeilcompletes-needed m vre strre enn 0 motstridende kommandoer kunne ikke parse nkkelserverens URL lage ASCII-beskyttet outputopprettet: %stidsstempel for opprettelse mangler dearmoring failed: %s dekryptere data (standard)dekryptering mislyktes: %s slette utvalgte undernklerslette utvalgte brukeriderslette signaturene fra de utvalgte brukeridenesleting av nkkelblokk mislyktes: %s katalogen %s ble opprettet utkoble en nkkelutkobletikke gjr noen endringerikke oppdatr tillitsdatabasen etter importinnkoble en nkkelenarmoring failed: %s kryptere datakryptert med %s-nkkel, ID %s kryptert med %u-bit %s-nkkel, ID %s, opprettet %s kryptert med en ukjent algoritme %d kryptering en melding i --pgp2-modus krever IDEA-algoritmen kryptering med bare symmetrisk cipherfeil ved opprettelse av nkkelknippet %s: %s feil ved opprettelse av passfrase: %s feil ved sking etter tillitspost i %s: %s feil ved henting av nvrende nkkelinfo: %s feil ved henting av ny PIN: %s feil med %s: %s feil i trailerlinje feil ved lesing av %s: %s feil ved lesing av applikasjonsdata feil ved lesing av fingeravtrykk DO feil ved lesing av nkkelblokk: %s feil ved lesing av hemmelig nkkelblokk %s: %s feil ved henting av CHV-status fra kort feil ved skriving av nkkelknippet %s: %s feil ved skriving av offentlig nkkelknippe %s: %s feil ved skriving av hemmelig nkkelknippe %s: %s eksisterende nkkel vil bli erstattet utgttutgikk: %sutgr: %seksportere nklereksportere nkler til en nkkelservereksportere signaturer som er markert som bare-lokaleeksportering av hemmelige nkler er ikke tillatt eksterne programkall er utkoblet p grunn av utrygge rettigheter p konfigurasjonsfila klarte ikke initialisere tillitsdatabasen: %s klarte ikke lagre opprettelsesdatoen: %s klarte ikke lagre fingeravtrykket: %s klarte ikke lagre nkkelen: %s klarte ikke fjerne beskyttelsen p undernkkelen: %s damehente nkkelen angitt i URL som er lagret i kortetfeil ved lukking av filfeil ved opprettelse av filfeil ved sletting av filfila finnes fra fr avfeil ved pning av filfeil ved lesing av filfeil ved omdping av filfeil ved skriving av filmarkere den valgte brukeriden som den primretvungetptvinging av symmetrisk cipher %s (%d) bryter med mottakerens preferanser fstat(%d) mislyktes in %s: %s generell feilgenerere PGP 2.x-kompatible meldingergenerere et nytt nkkelpargenerere et opphevingssertifikatgenerere nye nklernkkelgenerering mislyktes generere en ny nkkel iImMqQsSimportere nkler fra en nkkelserverimportere/flette nklerimport av hemmelig nkkel er ikke tillatt ugyldigugyldig S2K-modus; m vre 0, 1 eller 3 ugydig argumentugyldig beskyttelseugyldig armorheader: ugyldig armor: linje lengre enn %d tegn ugyldig clearsigheader ugyldig bindestrekbeskyttet linje: ugyldig standard preferanser ugyldig default-cert-level; m vre 0, 1, 2 eller 3 ugyldige eksportvalg ugyldig fingeravtrykkugyldig hashalgoritme %s ugyldige importvalg ugyldig oppfring %s i preferansestreng ugyldig nkkelknippeugyldige valg for nkkelserver ugyldige listevalg ugyldig min-cert-level; m vre 0, 1, 2 eller 3 ugyldig pakkeugyldig passfraseugyldig personlig cipherpreferanser ugyldig personlig kompresjonspreferanser ugyldig personlig digestpreferanser hoppet over ugyldig radix64-tegn %02x ugyldig struktur i OpenPGP-kort (DO 0x93) ugyldig verdi ugyldige valg for bekreftelse nkkelen %s ble ikke funnet p nkkelserveren nkkelen %s ble ikke funnet: %s nkkel %s: ingen brukerid nkkel %s markert som endelig betrodd. nkkel %s ble opprettet %lu sekund i fremtiden (time warp eller klokkeproblem) nkkel %s ble opprettet %lu sekunder i fremtiden (time warp eller klokkeproblem) nkkel: %s: %s %d nye signaturer nkkel %s: %s %d nye undernkler nkkel %s: %s %d nye brukerider nkkel: %s: %s %d nye signaturer nkkel: %s: %s %d nye signaturer nkkel %s: %s %d nye brukerider nkkel %s: %s %d nye brukerider nkkel %s: %s 1 ny signatur nkkel %s: %s 1 ny undernkkel nkkel %s: %s 1 ny brukerid nkkel %s: %s ikke endret nkkel %s: %s opphevingssertifikat lagt til nkkel %s: %s opphevingssertifikat importert nkkel %s: PGP 2.x-aktig nkkel - hoppet over nkkel %s: PKS-undernkkel reparert nkkel %s: godtatt som betrodd nkkel nkkel %s: akseptert ikke-selvsignert brukerid %s nkkel %s: finnes allerede i hemmelig nkkelknippe nkkel %s: kan ikke finne original nkkelblokk: %s nkkel %s: kan ikke lese original nkkelblokk: %s nkkel %s: direkte nkkelsignatur lagt til nkkel %s: stemmer ikke med vr kopi nkkel %s: duplikert brukerid oppdaget - flettet sammen nkkel %s: ugyldig opphevingssertifikat: %s - avvist nkkel %s: ugyldig opphevingssertifikat: %s - hoppet over nkkel %s: ugyldig selvsignatur for brukerid %s nkkel %s: ugyldig undernkkelbinding nkkel %s: ugyldig undernkkeloppheving nkkel %s: nkkelmateriell p kort - hoppet over nkkel %s: ny nkkel - hoppet over nkkel %s: ingen offentlig nkkel - kan ikke anvende opphevingssertifikat nkkel %s: ingen offentlig nkkel for betrodd nkkel - hoppet over nkkel %s: ingen undernkkel for nkkelbinding nkkel %s: ingen undernkkel for nkkeloppheving nkkel %s: ingen undernkkel for undernkkelbindingssignatur nkkel %s: ingen undernkkel for undernkkelopphevingssignatur nkkel %s: ingen brukerid nkkel %s: ingen brukerid for signatur nkkel %s: ingen gyldig brukerid nkkel %s: ikke-eksporterbar signatur (klasse 0x%02X) - hoppet over nkkel %s: ikke beskyttet - hoppet over nkkel %s: offentlig nkkel %s importert nkkel %s: offentlig nkkel ikke funnet: %s nkkel %s: fjernet flere undernkkelbindinger nkkel %s: fjernet flere undernkkelopphevinger nkkel %s: opphevingssertifikat p feil plass - hoppet over nkkel %s: hemmelig nkkel importert nkkel %s: hemmelig nkkel ikke funnet: %s nkkel %s: hemmelig nkkel med ugyldig cipher %d - hoppet over nkkel %s: hemmelig nkkel uten offentlig nkkel - hoppet over nkkel %s: hoppet over undernkkel nkkel %s: hoppet over brukerid %s nkkel %s: undernkkelsignatur p feil plass - hoppet over nkkel %s: uforventet signaturklasse (0x%02X) - hoppet over nkkel %s: ustttet offentlig nkkelalgoritme nkkel %s: ustttet offentlig nkkelalgoritme for brukerid %s nkkel finnes allerede nkkeleksport mislyktes: %s nkkelgenerering fullfrt (%d sekunder) nkkel har blitt opprettet %lu sekund i fremtiden (time warp eller klokkeproblem) nkkel har blitt opprettet %lu sekunder i fremtiden (time warp eller klokkeproblem) nkkelen ble ikke funnet p nkkelserver nkkeloperasjonen er umulig: %s nkkelblokkressurs %s: %s nkkelknippet %s ble opprettet kommunikasjonsfeil med nkkelserver: %s nkkelserver sendte ikke VERSION feil med nkkelserverintern feil ved nkkelserver mottak fra nkkelserver mislyktes: %s refresh p nkkelserver mislyktes: %s sk p nkkelserver mislyktes: %s sending til nkkelserver mislyktes: %s nkkelserver svarte ikke tidsnok nkkelstrrelsen er ugyldig; bruker %u bits nkkelstrrelsen ble rundet opp til %u bits for lang linjevis alle tilgjengelige datavise og sjekke nkkelsignaturerliste nkler og brukeriderliste nklerliste nkler og fingeravtrykkliste nkler og signaturerliste preferanser (ekspert)liste preferanser (fyldig)liste hemmelige nklerlage en adskilt signaturla konflikter mellom tidsstempler bare vre en advarselmannmisdannet CRC vansired brukeridmarginals-neede m vre strre enn 1 max-cert-depth m vre i intervallet fra 1 til 255 meny for endre eller fjerne blokkering av PINflytter en nkkelsignatur til den rette plassen nNnstede klartekstsignaturer nettverksfeilny konfigurasjonsfil %s ble opprettet neifant ingen =-tegn i gruppedefinisjonen %s ingen dataingen standard hemmelig nkkelknippe: %s ingen entropy-innsamlingsmodul ble oppdaget ingen handling for nkkelserver! fjernutfring av programmer er ikke stttet ingen hemmelig nkkel ingen hemmelig undernkkel for offentlig undernkkel %s - ignorerer ingen signatur ble funnet det finnes ingen slik brukeridingen gyldig OpenPGP-data funnet. ingen gyldige adressater ingen skrivbart nkkelknippe funnet: %s ingen skrivbart offentlig nkkelknippe ble funnet: %s ingen skrivbart hemmelig nkkelknippe ble funnet: %s ikke et OpenPGP-kortikke kryptertikke tvungetikke behandletikke stttetmerk: random_seed-fila er tom merk: random_seed-fila ble ikke oppdatert oOokay|okayoperasjonen er ikke mulig uten initialisert sikkert minne valgfil %s: %s opprinnelig filnavn=%.*s nullstilt informasjon om eiertillit verdi for eiertillit manglerpassfrase er generert med en ukjent digest-algoritme %d passfrasen ble ikke gjentatt korrekt; prv igjenvennligst se %s for mer informasjon vennligst se http://www.gnupg.org/documentation/faq.html for mere informasjon vennligst vent mens nkkel blir generert ... preferansen %s er duplisert for tidlig eof (i CRC) for tidlig eof (i trailer) for tidlig eof (ingen CRC) vis kortets statusproblem ved hndtering av kryptert pakke spr fr overskrivingoffentlig og hemmelig nkkel opprettet og signert. fant ikke offentlig nkkel %s: %s offentlig nkkel-dekryptering mislyktes: %s offentlig nkkel-kryptert data: god DEK offentlig nkkel er %s fant ikke offentlig nkkelaAavsluttavslutte denne menyenquoted printable-tegn i armor - antakelig har en MTA med feil blitt brukt lesefeil ved %s: %s leser fra %s leser valg fra %s lesing av offentlig nkkel mislyktes: %s grunnen for opphevelse: oppfrisker %d nkler fra %s oppfrisker 1 nkkel fra %s fjerne nkler fra det offentlige nkkelknippetfjerne nkler fra det hemmelige nkkelknippetomdping fra %s til %s mislyktes: %s ber om nkkel %s fra %s ber om nkkelen %s fra %s server %s ressursgrenserespons inneholder ikke RSA-modulus respons inneholder ikke den offentlige RSA-eksponenten respons inneholder ikke data om offentlig nkkel kommentar til opphevelse: oppheve nkkel eller utvalgte undernkleroppheve utvalgte brukerideroppheve signaturene p de valgte brukerideneopphevetopphevet: %srundet opp til %u bits lagre og avslutteske etter nkler p en nkkelserversker etter %s fra %s ske etter %s fra %s server %s sker etter navn fra %s ske etter navn fra %s server %s hemmelig nkkel %s ble ikke funnet: %s hemmelig nkkel er allerede lagret p et kort hemmelig nkkel er ikke tilgjengelighemmelige deler av nkkelen er ikke tilgjengelig. velger brukerid Nvelger brukerid Nvalgt sertifikasjondigestalgoritme er ugyldig valgt krypteringsalgoritme er ugyldig valgt kompresjonsalgoritme er ugyldig valg digestalgoritme er ugyldig sette en notasjon for de valgte brukeridenesette preferanseliste for de valgte brukeridenesette URL for foretrukket nkkelserver for de valgte brukeridenevise admin-kommandoervise nkkelens fingeravtrykkvise utvalgte fotoidervise navnet til nkkelknippene i nkkellistervise denne hjelpensignere en nkkelsignere en nkkel lokaltsignere eller redigere en nkkelsignerere utvalgte brukerider lokaltsignere utvalgte brukerider med en tillitssignatursignaturer opprettet s langt: %lu signering mislyktes: %s hoppet over %s: %s hoppet over %s: er duplikat hoppet over: offentlig nkkel er allerede satt hoppet over: offentlig nkkel allerede satt som standard mottaker hopper over blokk av typen %d hopper over v3 selvsignatur for brukerid %s lagring av nkkel p kort mislyktes: %s symmetrisk kryptering av %s mislyktes: %s systemfeil under kall p eksternt program: %s hent nklene fra dette nkkelknippettekstmodusden angitte URLen for sertifikasjonspolicyen er ugyldig den angitte URLen for den foretrukkede nkkelserveren er ugyldig den angitte URLen for signaturpolicy er ugyldig det finnes en hemmelig nkkel for offentlig nkkel %s! dette kan skyldes en manglende selvsignatur denne plattformen krever midlertidige filer ved kall p eksterne programmer konflikt mellom tidsstemplerveksle mellom hemmelig og offentlig nkkellistingveksle tving-signatur-PIN-flaggetfor mange cipher-preferanser for mange kompresjons-preferanser for mange digest-preferanser for mange innslag i pk-cachen - utkoblet feil med tillitsdatabasentillit: %sklarte ikke kjre eksternt program kunne ikke utfre program %s: %s kunne ikke utfre skallet %s: %s kan ikke pne JPEG-fil %s: %s klarte ikke lese reponsen fra eksternt program: %s kunne ikke sette exec-path til %s klarte ikke bruke IDEA-algoritmen for alle nklene du krypterer til. uforventet armering:uforventet datauimplementert kryptoalgoritmeuimplementert pubkey-algoritmeukjentukjent kryptoalgoritmeukjent kompresjonsalgoritmeukjent konfigurasjonspunkt %s ukjent standardmottaker %s ukjent digest-algoritmeukjent nkkelbeskyttelsesalgoritme ukjent valg %s ukjent pakketypeukjent pubkey-algoritmeukjent signaturklasseukjent versjonunaturlig avslutning av eksternt program uspesifisertustttet URIubrukelig pubkey algoritmeubrukelig offentlig nkkelubrukelig hemmelig nkkeloppdatere alle nklene fra en nkkelserveroppdatering mislyktes: %s oppdatering av hemmelig mislyktes: %s oppdatere tillitsdatabasenbruksmte: %sbruksmte: gpg [valg] bruk som outputfilbruk kanonisk tekstmodusbruk valget --delete-secret-keys for slette den frst. bruk streng OpenPGP-oppfrselbruke denne brukeriden for signering eller dekrypteringbrukerid %s er allerede opphevet bruker cipher %s bruker undernkkel %s i stedet for primrnkkel %s gyldighet: %sfyldig outputbekrefting av Admin PIN er forelpig nektet gjennom denne kommandoen bekreftelse av CHV%d mislyktes: %s bekrefte en signaturbekrefte PIN og vise alle dataventer p lsing av %s ... svak nkkelsvak nkkel ble opprettet - prver p nytt merkelig strrelse for en kryptert sesjonsnkkel (%d) skriver direkte signatur skriver nkkelbindende signatur skriver offentlig nkkel til %s skriver forelpig hemmelig nkkel til %s skriver hemmelig nkkel til %s skriver selvsignatur skriver til %s skriver til stdout feil hemmelig nkkel ble bruktjJjadu kan bare kryptere med RSA-nkler med lengder p 2048 bits eller mindre i --pgp2-modus du kan bare lage adskilte eller klare signaturer i --pgp2-modus du kan ikke signere og kryptere samtidig i --pgp2-modus du kan ikke bruke --symmtric --encrypt i %s-modus du kan ikke bruke --symmetric --sign --encrypt i %s-modus du fant en feil ... (%s:%d) du kan ikke bruke %s i %s modus du kan ikke bruke cipheralgoritmen %s i %s-modus du kan ikke bruke kompresjonsalgoritmen %s i %s-modus du kan ikke bruke digestalgoritmen %s i %s-modus du m bruke filer (og ikke en pipe) nr --pgp2 er psltt |AN|Ny Admin PIN|FD|skrive statusinfo til denne FD|NAVN|kryptere for NAVN|N|Ny PIN|N|sette kompresjonsniv til N (0 slr av kompresjon)|[fil]|lage en klartekstsignatur|[fil]|lage en signatur|algo [filer]|skrive meldingsdigester||Vennligst tast inn PIN%%0A[signaturer utfrt: %lu]gnupg-1.4.20/po/zh_TW.gmo0000644000175000017500000040753012635457221012034 00000000000000 |(Pk-kk}lmmhnnnnnno1o2No7o2o#oDp.UpIp7p'q.q KqWqoqqqqqqr.r+@r&lr#r(rrrs2s(Nswsss$sst&tEt,`ttt!tttu/u BuNu kuwuuuuuuuv*2v"]v]vBv!w/4w=dw(w.w3w!.x(Pxyxx'xxxxy+y>y,Wy'yyy"yz z$zB@z=zz"z%{&){!P{%r{"{#{'{ |(|E|Z|w|||(|$|}}#,}P}$o}}}!}}~ 0~Q~&i~%~ ~,~4~$+I^'rԀ '-U"l-(02FHy ‚ ̃ ك @AT/0Ƅ\1TD-0.?In*+' 7D\mЇׇ3<4D-y'a.$ ?4>:s͊!,6(c8#ŋ&(&9`w76-%J3p90ލ<GL@>Վ+=@~"ӏ :@#Sw /ӑH-6$d'8&5.G5v*!ד.0(&Y,ǔ 8#:^w"~.ЕHi"(Ֆ$E#1i;1m!?Z8y$י8ٚÛ֛:BSϜ%&:Q.m*0 [|*C!n0'<&+A"m,/1",B"o2š ( + L*Wâܢ $>Y my5"7Z(wϤ F f1%ߥEEo* ܧ8l'>ͨ c/N0E,Ū"#-9+g)&Ǭ'έخ+8,d3 ů1ѯ(#B+f"+" %?9%yͱ..L({ }ŲCX/r0Ӵ!#(!8Zp%ж 'jFK@->l9O30/5'.B3q-Ӻۼ!$/,T(-޾  )6*S+~ 5#Q$u  6%4Z7t2r_>1=CI4#=C?D@&+g1NII^55;?PB<H-Y"H}<B)CB:.>2/=b<@FHeU$ )-J2x1I>'Kf@5*)7T,004 P2q:65.M|h*&01W#2>*=0:Mk9"&!=3_>c%6D\,52%_X     #0 A LXq%")&+D5p .D S^Bz5$6>FV^m| ()?Z"q , '9.a%2+&;La~%51: M;[<* 7A\t: ,BXn&- <AD(/ 0<1X,>H\ %/.(W&o3  07h$=%#-2` y'# 3Jb'& #B&b& / +,G/t"9K%M$s&$#D%j'q  1$Ot@{ $ 0!Hj|D+/ H6S0/"$&G(n%%$ !/.Fu20Da'y/+>M$`&$',,&Sb>z $ ,/I\J."L#o !+*E-p $' ."G+j)#-%26X5/"'8`;{0"% /12a!: !A!c(+8!04R026!)X9&GHVB : #P t       2 G g         8 S d '~    .   (# 2L !   ,    * 8  > $I n  )     % %/U,k23&1"X{1!0E%d%     #4X&[ )$<7Mh6,;"#^M-5Mi"-+&.*U56! &,$Sx2IF3z &@0Z1##++1,]!2$*.2Y.*3; Ye |%& 0O$b#&3 %@*f%( -49b6:,"0O/7*.( 7W ; 0 1 ;.!j!%!!)!3!6":L" """9""5#-G#"u## ##-#$$$6$ P$5q$$$$+$4%%H%!n%C%*%(%0(&Y&y&.&-&*& '+'G'2(/B(%r(F((1(#$)H)!e))())-)/*,@* m*"w*)*** *+29+1l+++#+#+! ,".,-Q,,:,I,A#-"e-- -----. .$.=. X.y..!..../4/L/#\/ ///// //0,0 F0P0f0y060050#1 >1_1n111*1!1 12G2X2q2 2222-2,3C3]3|33 33334"484;4D?4F4E4D5EV5A575667M6=6>67$77D7<|777F788J89h8 88 8$8 9#9A9#Z9~9*9*99,;;/r<==s>#>> > >!? 6?"W?2z?2?2?'@1;@2m@>@5@A -A NAZAoAA"A#AA B&BEBXBtBB'B!BB%C!5C'WC!CCC#CCD +DLD)dD"DD DDEE1EBEQE hEvE"EEEEE"F *F+KF"wFbFMFKGBbGNG)G2H8QH,H2HH I&I#8I\IsIIII=I0J$MJrJJJJJMJD4KyK*K$K$K$L$)LNLjL LLLL&M)M&AMhM{MMMM(M%N)@NjNN&NNN. O8O'NO!vOO$O*OOQQ*QJQ]Q(uQQQQQQ R%+RQR(fRRR1R(R7 S3XSMS S T T*T(UEUeUPU3U3Vp;VAVVEW&MW)tW#W;W"W"!XDXbX iXXXXXX YY/Y JYkYIrY?YY#Z#Z Z.Z%[.[;7[5s[5[ [\\*\E\.Z\4\)\'\']/8]'h]]]]]P]/:^,j^#^/^/^,_DH_G_A_;`)S`>}````)`* a/6a&fa a.aa-a!b2b!Db-fbbbec4{c&c*c)d;,d7hd5d5d6 e!Ce"ee-e3e"e* f8fRfpfyf*f fff+g80gigDg#:h,^h&h?h'hiNijjj$jEj Dkekwkkkkbl(m>mSmmmmmmSm%n>nPnan$tn)n nnno5olUo'o+op-p%p= q2^q@qq.q&r2Cr6vr6r&r9 s,Es9rs'ss"st 5t%@tft|tt tt&t& u&1u"Xu{uuqu;v"Jv(mv/vv&v"w#+wOwLdw0wDwE'xmxxCyB^yryz-zKz+z%{;:{v{U |a|C|E|X }b} }}&}&}& ~1~%8Ѐ#9NW i*.-&!H+c 9-6-O0}<ȃ&,>X&s&&)'(:c{Id#s&ӈ(3#Mq%щ/(7@eVJC*Kv57Bm))ڌ207-h(0(%ߏ!>],x77ݐ$ 8AzEX nx01Ɠ/ (I%f*ɔ*)&Ip8'ϕ39D}~x4u1:ܗ=1U+):ݘD6N{=ʙ..7KfKN6MDBɛA GN9=М'6EU! EB9+ž6;%'a1+44<QFNՠ]$ )*,?B<<9360j0-̣44/4d+8Ť7ԥ7 7D1|(-צ #)D)n47ͬ6ۭA<TH8ڮ &4#[-;o*Y8-375Lo     )6N W dpy  -۴! *+*V"(6͵- @M`1z  ǶD!-!O"q  з *CF,`ո",)I"s7?ι&&5)\+źܺ'.%Gm&;  :-Dh#Ѽ'*$Rw*ν+ > K&X' ׾FL+#x ѿ" 68o ( N9  $$.2S  "A< Y6z$&42#Mq,&0)="X{ &$ #?)c)   - "!/(Q*z.E 1&Ry^D#Ko.%3 YFf  6I\sA#' 2(4[*-%<0b.("Hk9>+U?2 >N^~)2)?P3g*&5%^[^##=)a''-- "7"Z(}'&/+O0{8*11B't'6'1#1U3!!0$03U6'*36G~$'=$(!Mo''62=R3'69?'y? Z'ZV%4 Z{ ,#2#V#z %  'C_ { $4SZ,o#0.!Ce4  ",G+J v #1$;B~::"4%W }2(#.R#i)) ! 1 ;'E'm% 9Ym25"=@#~M% /2L(0. ;Nm#((-(K t)^=6t !  -N'm'!!'0)0Z,2*  4A$`" ' DOd!t&'4"Cfy%7Wu$%(;'='e$$!-"Pp1106%6\'++-E-s >'6D-{+)GOc~0 2 />n&7+,8!e $*!c#jA%+&"=I'=+(?h-~4. 23N()%9?U"#+"O:rDF79q  9Rn &<L lv' 4?Uq5<(Hey/# ! /J< 4  +,5X! 0 G X o   Q Q I0 Bz H 8 :? 6z : = A* %l ' 5 5 5& 8\   5 2 )0 Z.h&&=pWH63gOzPlS*|T=VQ$qDLs n@GJ !ehte1M`Rlj( WV- ' DtSw@;OEy;p\prz,Avi |lhA+:2mG@;Nz9"LTb>LuE%@ Z`jF]7}: r$/55e=4p)G#"aZ"*)8S\+'m4Lk3 kBUofta/0 -D/fq[eAF|0^3lB?iUMr],UU [^-V 7{~qy\Q%;:'\[^#+` Og.wf_M+CcJ:)~I!< s DRE8mYiI:#dCz)9v8}H]x{pK3s.b` $jH42,XCrgfN$<Lt80Ta5q*Q#%2,PbH 1yG1JI6.C2.<hZ ndPKyz eQx;Tx ^K{oMI_S}{B_dW<b 9-GA*~M~uEY|jNA{RXms6ou]W  uwqEu'O6YV7 JXC97!Z c(1 x lB?<]!w%g&B.\F4DcY&yO?@gPdF}v9iK[&PmikXn!av )&Z1>},(=W=v"#oN^[>w"c NHjcx nV$/7&kr?5YKsfhoX0nR~k?>hS2a _tFd3'+= (bI5T4/|0(RJ_`>% U*-68Q  Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg 1.4.18 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2014-11-21 23:17+0800 Last-Translator: Jedi Lin Language-Team: Chinese (traditional) Language: zh_TW MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Basepath: gnupg-1.4.18/ Plural-Forms: nplurals=1; plural=0; X-Generator: Poedit 1.5.7 請輸入使用者 ID. 以空白列結束: 隨機位元組不夠多. 請多做一些有的沒的事情, 這樣作業系統纔能蒐集到更多的亂數! (還需要 %d 位元組) 請挑選一張圖片來當成你的照片 ID. 這張圖片一定要是 JPEG 圖檔纔行. 請記住這張圖片會被存放在你的公鑰裡. 如果你挑了非常大的圖片的話, 你的金鑰也會變成非常地大! 盡量把圖片尺寸控制在 240x288 左右, 會是個非常理想的大小. 已支援的演算法: 你需要一個使用者 ID 來辨識你的金鑰; 這個軟體會用真實姓名, 註釋和電子郵件地址組合成使用者 ID 如下: "Ke-Huan Lin (Jedi) " 亦即 "%s" 使用 %s 金鑰 %s 已匯入: %lu 未改變的: %lu 新的子鑰: %lu 新的使用者 ID: %lu 未被匯入: %lu 沒有使用者的 ID: %lu "%s": 編密演算法 %s 的偏好設定 "%s": 壓縮演算法 %s 的偏好設定 "%s": 摘要演算法 %s 的偏好設定 (在主鑰 ID %s 上的子鑰) 這份簽章並不屬於這個持有者 這個簽章很有可能是 *偽造的*. 沒有證據指出這個簽章屬於這個持有者. 這很有可能表示此簽章是偽造的. 無法使用: 新的簽章: %lu "%s" 卡片序號 = 金鑰指紋 = 子鑰指紋: 已讀取的私鑰: %lu 已跳過的新金鑰: %lu 已清除的使用者 ID: %lu 子鑰指紋: 已清除的簽章: %lu (%c) 已完成 (%c) 切換鑑定性能 (%c) 切換加密性能 (%c) 切換簽署性能 (%d) DSA (你能自己設定性能) (%d) DSA (僅能用於簽署) (%d) DSA 和 Elgamal (%d) Elgamal (僅能用於加密) (%d) RSA (僅能用於加密) (%d) RSA (你能自己設定性能) (%d) RSA (僅能用於簽署) (%d) RSA 和 RSA (預設) (0) 我不作答.%s (1) 我根本沒有檢查過.%s (1) 簽署用金鑰 (2) 加密用金鑰 (2) 我隨意檢查過了.%s (3) 憑證用金鑰 (3) 我非常小心地檢查過了.%s 新的金鑰撤銷: %lu %d = 我*不*信任 %d = 我不知道或不想說 %d = 我完全信任 %d = 我勉強信任 %d = 我徹底信任 無法簽署. 亦即 "%s" m = 回到主選單 q = 離開 s = 跳過這把金鑰 已匯入的私鑰: %lu (主要金鑰 ID %s) (不可匯出) (不可撤銷) 主鑰指紋: 未改變的私鑰: %lu "%s" 並非金鑰 ID: 跳過中 "%s" 已經被金鑰 %s 在本機簽署了 "%s" 已經被金鑰 %s 簽署了 # 相對應的信任值清單被建立於 %s # (請用 "gpg --import-ownertrust" 來取回它們) %d 管理者個人識別碼 (PIN) 試圖在卡片永久鎖定前遺留下來 %d 份損壞的簽章 已經處理了 %d 把金鑰 (共計已解決了 %d 份有效性) %d 個勉強信任以及 %d 個完全信任是 %s 信任模型的最小需求 有 %d 份簽章因錯誤而未被檢查 有 %d 份簽章因為遺失金鑰而未被檢查 偵測到 %d 個沒有有效自我簽章的使用者 ID 已檢查 %lu 把金鑰 (共 %lu 份簽章) 目前已檢查 %lu 把金鑰 (共 %lu 份簽章) 目前已處理 %lu 把金鑰 %s ... %s 並不支援第 %d 版經手程式 %s 還沒辦法跟 %s 一起運作 %s 已加密的資料 %s 加密過的階段金鑰 %s 加密將被採用 %s 是新的那一個 %s 是沒有改變的那一個 %s 金鑰的長度可能介於 %u 位元和 %u 位元之間. %s 金鑰尺寸一定要介於 %u 到 %u 之間 %s 跟 %s 放在一起沒有意義! %s 不允許跟 %s 併用! %s 簽章, 摘要演算法 %s %s. %s/%s 已加密給: "%s" %s/%s 簽章來自: "%s" %s: 祇能有限的保證這把金鑰真的屬於叫這個名字的使用者 %s: 沒法保證這把金鑰真的屬於叫這個名字的使用者 %s: 目錄不存在! %s: 讀取可用空間記錄時出錯: %s %s: 讀取版本記錄時錯誤: %s %s: 更新版本記錄時錯誤: %s %s: 寫入目錄記錄時出錯: %s %s: 寫入版本記錄時錯誤: %s %s: 附加記錄失敗: %s %s: 建立雜湊表失敗: %s %s: 建立版本記錄失敗: %s%s: 記錄歸零失敗: %s %s: 無效的檔案版本 %d %s: 無效的信任資料庫 %s: 建立了無效的信任資料庫 %s: 鑰匙圈已建立 %s: 不是一個信任資料庫檔案 %s: 已跳過: %s %s: 已跳過: 公鑰已存在 %s: 已跳過: 公鑰已停用 %s: 建立了信任資料庫 %s: 未知的副檔名 %s: 記錄編號為 %lu 的版本記錄 %s:%d: 不建議使用的選項 "%s" %s:%d: 無效的自動金鑰定址清單 %s:%d: 無效的匯出選項 %s:%d: 無效的匯入選項 %s:%d: 無效的金鑰伺服器選項 %s:%d: 無效的清單選項 %s:%d: 無效的驗證選項 %u 位元長的 %s 金鑰, ID %s, 建立於 %s(沒有給定描述) (也許你會想要在這裡選擇 %d) (這是把機密的撤銷金鑰) (機密)(除非你用指紋指定了金鑰) (也許你選錯程式來做這件事了) * 這個 `sign' 指令也可以在前面加上一個 `l' 字母, 來表示本機簽章 (lsign), 加上 `t' 的話就是信任簽章 (tsign), 加上 `nr' 的話就是不可撤銷簽章 (nrsign), 當然也可以任意組合這些選項 (像是 ltsign, tnrsign 等等.). --clearsign [檔名]--decrypt [檔名]--edit-key 使用者ID [指令]--encrypt [檔名]--lsign-key 使用者ID--output 在這個指令中沒有作用 --sign --encrypt [檔名]--sign --symmetric [檔名]--sign [檔名]--sign-key 使用者ID--store [檔名]--symmetric --encrypt [檔名]--symmetric --sign --encrypt [檔名]--symmetric [檔名]-k[v][v][v][c] [使用者ID] [鑰匙圈]... 這是個瑕疵 (%s:%d:%s) 1 份損壞的簽章 有 1 份簽章因為遺失金鑰而未被檢查 有 1 份簽章因錯誤而未被檢查 偵測到 1 個沒有有效自我簽章的使用者 ID 10 譯者請參見 trustdb.c:uid_trust_string_fixed@ (請參照線上說明頁面來取得所有命令和選項的完整清單) @ 範例: -se -r Bob [檔案] 對 Bob 這個使用者簽署及加密 --clearsign [檔案] 做出明文簽章 --detach-sign [檔案] 做出分離式簽章 --list-keys [名字] 顯示金鑰 --fingerprint [名字] 顯示指紋 @ 選項: @指令: 已強迫使用 ASCII 封裝過的輸出. 允許使用管理者指令 未允許使用管理者指令 限管理者使用的指令 如果你覺得可以產生子鑰的話, 就回答 "yes" (或者祇 "y" 就好).如果可以刪除這把子鑰的話就回答 "yes"如果可以覆寫這個檔案的話就回答 "yes"如果你真的想要刪除這個使用者 ID 的話就回答 "yes". 所有的憑證在那之後也都會失去!如果你想要簽署 *所有* 使用者 ID 的話就回答 "yes"請回答 "yes" 或 "no"你真的確定要用你的金鑰 "%s" (%s) 來簽署這把金鑰嗎 你確定仍然想要增加嗎? (y/N) 你確定仍然想要撤銷它嗎? (y/N) 你仍然想要簽署它嗎? (y/N) 你確定要指派這把金鑰為指定撤銷者嗎? (y/N) 你確定要刪除它嗎? (y/N) 你確定要取代它嗎? (y/N) 你確定要用它嗎? (y/N) 鑑定*損壞* 的簽章來自於 "%s"憑證中心 (CA) 指紋: CRC 錯誤; %06lX - %06lX 無法檢查簽章: %s 無法編輯這把金鑰: %s 無法開啟 `%s': %s 取消卡片持有者的名字: 卡片持有者的姓氏: 被徹底信任金鑰的憑證: 保證變更姓名(N), 註釋(C), 電子郵件地址(E)或確定(O)/退出(Q)? 變更姓名(N), 註釋(C), 電子郵件地址(E)或退出(Q)? 變更所有 (或祇有被選取的那幾個) 使用者 ID 的偏好成現用的偏好清單. 所有受到影響的自我簽章的時間戳記都會增加一秒鐘. 正在變更子鑰的使用期限. 正在變更主鑰的使用期限. 編密法: 這項指令要拿一個檔名來當作參數 註釋: 壓縮: 要為這把金鑰建立一份指定撤銷憑證嗎? (y/N) 要為這把金鑰建立一份撤銷憑證嗎? (y/N) 要為這份簽章建立一份撤銷憑證嗎? (y/N) 執意偏好的金鑰伺服器: 關鍵簽章註記: 關鍵簽章原則: 目前可進行的動作: 目前的收件者: DSA 金鑰 %s 需要 %u 位元以上的雜湊 DSA 金鑰 %s 使用不安全 (%u 位元) 的雜湊 DSA 需要 8 位元倍數的雜湊長度 刪除這份完好的簽章嗎? (y/N/q)刪除這份無效的簽章嗎? (y/N/q)要從鑰匙圈裡刪除這把金鑰嗎? (y/N) 刪除這份未知的簽章嗎? (y/N/q)已經刪除了 %d 份簽章. 已經刪除了 %d 份簽章. 分離的簽章. 摘要: 正在顯示 %s 照片 ID, 其尺寸為 %ld, 屬於金鑰 %s (uid %d) 的照片 你真的想要刪除所選的金鑰嗎? (y/N) 你真的想要刪除這把金鑰嗎? (y/N) 你真的想要這麼做嗎? (y/N) 你真的想要撤銷這整把金鑰嗎? (y/N) 你真的想要撤銷所選的子鑰嗎? (y/N) 你真的想要撤銷這把子鑰嗎? (y/N) 請問你是否真的想把這把金鑰設成徹底信任呢? (y/N) 你想要發佈一份新的簽章來取代已過期的那個嗎? (y/N) 你是否想要把他升級成可以完全匯出的簽章? (y/N) 你是否想要將它升級成 OpenPGP 自我簽章? (y/N) 你仍然想要再次簽署它嗎? (y/N) 你想要讓你的簽章也在同一個時候過期嗎? (Y/n) 錯誤: 電子郵件地址: 加密請輸入管理者個人識別碼 (PIN): 輸入要當作照片 ID 的 JPEG 檔名: 請輸入新的管理者個人識別碼 (PIN): 請輸入新的個人識別碼 (PIN): 請輸入個人識別碼 (PIN): 請輸入選用的描述; 以空白列結束: 請輸入新的檔名請輸入數字, N)下一頁, 或 Q)離開 > 請輸入密語 請輸入密語: 請輸入金鑰持有人的名字請輸入要給這把私鑰用的新密語. 請輸入註記: 請輸入提示裡所要求的數值. 你可以輸入 ISO 日期格式 (YYYY-MM-DD), 但是不會得到良好的錯誤回應 - 反之, 系統會試著把給定的數值中斷成若干片段.請輸入金鑰尺寸輸入你要遞送的訊息接收者的使用者 ID.輸入指定撤銷者的使用者 ID: 請輸入你的偏好金鑰伺服器 URL: 從 `%s' 讀取備份金鑰時出錯: %s 錯誤: 合併後的名字太長 (上限是 %d 個字符). 錯誤: 並不允許使用連續兩個以上的空格. 錯誤: 登入資料太長 (上限是 %d 個字符). 錯誤: 目前祇允許使用單純的 ASCII 字符. 錯誤: 私人的 DO 太長 (上限是 %d 個字符). 錯誤: 不能使用 "<" 字符. 錯誤: 信任資料庫已毀損. 錯誤: URL 太長 (上限是 %d 個字符). 錯誤: 偏好設定字串中含有無效的字符 錯誤: 無效的格式化指紋. 錯誤: 無效的偏好設定字串長度 錯誤: 無效的回應. 過期的簽章來自於 "%s"特點: 檔案 `%s' 已存在. 請給定簽章所要套用的檔案名稱請開始輸入你的訊息 ... 完好的簽章來自於 "%s"雜湊: 提示: 選擇使用者 ID 來加以簽署 準備好時請按下 [Enter], 或者輸入 'c' 取消: 你有多謹慎檢查正要簽署的金鑰確實屬於上面那個人的名字呢? 如果你不知道這個問題的答案, 請輸入 "0". 你有多信任這把金鑰真的屬於叫這個名字的使用者? 我隨意檢查過這把金鑰了. 我非常小心地檢查過這把金鑰了. 我根本沒有檢查過這把金鑰. IDEA 編密法不可用, 我們樂觀地試著改以 %s 代替 如果行不通的話, 請查閱手冊 你也可以輸入一串文字來描述為甚麼發佈這份撤銷憑證的理由. 請讓這段文字保持簡明扼要. 用空白列來結束這段文字. 如果你無論如何都想要用這把未被信任的金鑰, 請回答 "yes".通常來說用同一把金鑰簽署及加密並不是個好主意. 這個演算法應該祇被用於特定的情況下. 請先聯絡你的安全專家.註釋含有無效的字符 姓名含有無效的字符 無效的指令 (試試看 "help") 無效的金鑰 %s 可以藉由 --allow-non-selfsigned-uid 而生效 無效的密語; 請再試一次無效的選擇. 以上正確嗎? (y/N) 這樣可以嗎? (y/N) 這張照片正確嗎? (y/N/q) 這把金鑰並 *不* 確定屬於使用者 ID 裡的那個人. 除非你 **真的** 知道自己在做甚麼, 否則你最好在下一個問題回答 no 在這裡指派的數值完全是看你自己決定; 這些數值永遠不會匯出給其他人. 我們需要它來實施信任網絡; 這跟 (自動建立起的) 憑證網絡一點關係也沒有.金鑰 %s 已撤銷. 可用的金鑰於: 金鑰完全不會過期 金鑰將會在 %s 到期 金鑰產生已取消. 產生金鑰失敗: %s 金鑰已經被洩漏了金鑰祇剩下殘骸或者祇含有卡上金鑰項目 - 沒有可變更的密語. 金鑰不再被使用了金鑰已保護. 金鑰已撤銷.金鑰被代換了金鑰的有效期限是多久? (0) 金鑰沒有變更所以不需要更新. 鑰匙圈金鑰伺服器無修改介面語言偏好設定: 登入資料 (帳號名稱): 是否要為加密用金鑰建立卡外備份? (Y/n) N 修改姓名. C 修改註釋. E 修改電子郵件位址. O 繼續產生金鑰. Q 中止產生金鑰.請注意: %s 在本版中無法使用 請注意: 一般情況下不會用到 %s! 請注意: 我們完全無法保證卡片支援你想用的尺寸. 如果金鑰產生失敗了, 煩請查閱你卡片上的文件, 看看這張卡片支援哪些尺寸. 請注意: %s 功能在本版中無法使用 請注意: 這把金鑰未受保護! 請注意: 金鑰的序號 (S/N) 與卡片上的並不一致 請注意: 卡片金鑰的備份已儲存至 `%s' 請注意: 對 v3 金鑰製造子鑰會失去 OpenPGP 相容性 請注意: 金鑰已撤銷請注意: 金鑰已經存放在卡片上了! 請注意: 沒有預設選項檔 `%s' 請注意: 已忽略舊有的預設選項檔 `%s' 請注意: 主鑰在線上且已存放於卡片上了 請注意: 子鑰在線上且已存放於卡片上了 請注意: 私鑰 %s 在 %s 過期了 請注意: 寄件者要求了 "你應該祇用眼睛看" 請注意: 簽章金鑰 %s 已於 %s 過期 請注意: 強烈不建議使用單純的 S2K 模式 (0) 請注意: 信任資料庫不可寫入 姓名不可以用數字開頭 姓名至少要有五個字符長 要有私鑰纔能這麼做. NnCcEeOoQq在私鑰圈裡沒有一致的簽章 沒有可用的說明`%s' 沒有可用的說明未指定原因索引 %d 沒有對應到子鑰 沒有這個使用者 ID. 下列項目沒有對應的信任值: 雜湊 %s 沒有對應到使用者 ID 索引 %d 沒有對應到使用者 ID 不是有效的電子郵件地址 並非由你所簽署. 註記: 請注意這把金鑰不能用於加密. 也許你會想藉由 "--edit-key" 指令 來產生加密用的子鑰. 請注意: 簽署者地址 `%s' 與 DNS 項目並不吻合 請注意: 這把金鑰已停用. 請注意: 這把金鑰已經過期了! 請注意: 已驗證的簽署者地址為 `%s' 沒有刪除任何東西. 沒有東西可以讓金鑰 %s 簽署 偵測到 OpenPGP 卡片編號 %s 沒有可用的 OpenPGP 卡片: %s 是否覆寫? (y/N) 使用使用者所提供的信任資料庫時可能無法設定主觀信任 收回個人識別碼 (PIN) 時傳回錯誤: %s 用於 CHV%d 的個人識別碼 (PIN) 太短; 長度最少要有 %d 前後兩次輸入的個人識別碼 (PIN) 不一致; 請再試一次請先訂正錯誤 請判斷你有多信任這位使用者確實驗證其他使用者的金鑰 (像是查對身份證, 或從不同的來源檢查指紋等...)的能力 請不要把電子郵件地址放進你的真實姓名或註釋裡 請輸入約束此簽章的網域, 若無請直接按下 [Enter]. 請輸入一個新的檔名. 如果你直接按下 Enter, 那麼就 會使用預設的檔案 (顯示在括號中).請輸入選用的註釋請輸入資料檔的名稱: 請輸入此信任簽章的深度. 深度大於 1 的話就表示你信任這把正被簽署的金鑰, 同時也信任這把金鑰所簽署的信任簽章. 請輸入密語; 這是個秘密的句子 請修補這個可能的安全漏洞 請插入卡片並按下 [Enter], 或者輸入 'c' 取消: 請注意個人識別碼 (PIN) 的出廠設定值為 PIN = `%s' 管理者 (Admin) PIN = `%s' 你應該用 --change-pin 指令來加以變更 請注意顯示出來的金鑰有效性不需要更正, 除非你重新執行程式. 請從私鑰中移除選擇. 請移除現用中的卡片並插入下列序號的卡片: %.*s 請再次輸入最後的密語, 以確定你到底鍵入了些甚麼.請向 回報程式瑕疵, 向 回報翻譯瑕疵. 請至多選擇一把子鑰. 請祇選擇一個使用者 ID. 請選擇撤銷的原因: 請選擇你要產生的金鑰種類: 請選擇你要使用的金鑰種類: 請選擇要把金鑰存放在哪裡: 請指定這把金鑰的有效期限是多久. 0 = 金鑰不會過期 = 金鑰在 n 天後會到期 w = 金鑰在 n 週後會到期 m = 金鑰在 n 月後會到期 y = 金鑰在 n 年後會到期 請指定這份簽章的有效期限是多久. 0 = 簽章不會過期 = 簽章在 n 天後會到期 w = 簽章在 n 週後會到期 m = 簽章在 n 月後會到期 y = 簽章在 n 年後會到期 請先使用 "toggle" 指令. 請稍待片刻, 系統此時正在蒐集亂數. 如果你會覺得無聊的話, 不妨做些別的事, 這樣子甚至能夠讓亂數的品質更好. %s 金鑰可能的動作: 偏好的金鑰伺服器: 主鑰指紋:私人的 DO 資料: 是否繼續? (y/N) 公鑰: 公鑰已停用. 要不儲存就離開嗎? (y/N) RSA 模組缺漏或者並非 %d 位元大 RSA 質數 %s 缺漏或者並非 %d 位元大 RSA 公用指數缺漏或者大於 %d 位元 真實姓名: 真的要建立撤銷憑證嗎? (y/N) 真的要建立嗎? (y/N) 真的要刪除這份自我簽章嗎? (y/N)真的要移動主鑰嗎? (y/N) 真的要移除所有被選擇的使用者 ID 嗎? (y/N) 真的要移除這個使用者 ID 嗎? (y/N) 真的要撤銷所有所選的使用者 ID 嗎? (y/N) 真的要撤銷這個使用者 ID 嗎? (y/N) 真的要簽署所有的使用者 ID 嗎? (y/N) 真的要簽署嗎? (y/N)真的要更新所選使用者 ID 的偏好設定嗎? (y/N) 真的要更新偏好設定嗎? (y/N) 撤銷原因: %s 請再輸入一次密語 請再輸入一次密語: 請再次輸入個人識別碼 (PIN): 是否要取代既有的金鑰? (y/N) 是否要取代既有的金鑰? (y/N) 你所要求的金鑰尺寸是 %u 位元 重設碼太短; 長度最少要有 %d 沒有重設碼或無法再用重設碼 已建立撤銷憑證. 已建立撤銷憑證. 請把這個檔案搬移到另一個你能夠將之藏起來的媒介上; 如果有人能夠取得這份憑證的話, 那麼他也能夠讓你的 金鑰無法繼續使用. 把這份憑證列印出來再藏到別的地 方也是很好的方法, 以免你的儲存媒介損毀而無法讀取. 但是千萬小心: 你的機器上的列印系統可能會在列印過 程中把這些資料暫存在某個其他人也能夠看得到的地方! 要儲存變更嗎? (y/N) 私鑰可用. 主鑰的私鑰部分無法取用. 主鑰的私鑰部分存放於卡上. 請選擇要使用的演算法. DSA (亦即 DSS) 是數位簽章演算法 (Digital Signature Algorithm), 祇能用於簽署. Elgamal 是祇能用於加密的演算法. RSA 可以被用來簽署及加密. 第一把 (主要的) 金鑰一定要含有能用於簽署的金鑰.設定偏好清單至: 性別 ((M)男性, (F)女性或留空): 簽署是否要簽署? (y/N) 簽章完全不會過期 這份簽署已經在 %s 過期了 這份簽署將在 %s 到期 簽章將會在 %s 到期. 簽章的有效期限是多久? (%s) 由 %s 建立的簽章 由 %s 建立的簽章, 使用 %s 金鑰 ID %s 簽章註記: 簽章原則: SsEeAaQq子鑰 %s 已撤銷. 語法: gpg [選項] [檔案] 簽署, 檢查, 加密, 解密 預設的操作會依輸入資料而定 語法: gpgv [選項] [檔案] 用已知的受信任金鑰來檢查簽章 這張卡片將重新加以組態, 以便產生 %u 位元的金鑰 這把金鑰的最小信任等級為: %s 這個隨機數字產生器根本就是七拼八湊出來的鳥東西 - 它根本就不是強而有力的亂數產生器! *** 絕對不要把這個程式產生的任何資料拿來用!! *** "%s" 裡的自我簽章 是 PGP 2.x 型態的簽章. 這份簽章無效. 從你的鑰匙圈中將它移除相當合理.這份簽章會被標記成不可匯出. 這份簽章會被標記成不可撤銷. PGP 2.x 型態的使用者 ID 沒有偏好設定. 這個 JPEG 檔案真的很大 (%d 位元組) ! 在 %s 模式中不允許使用這個指令. 這個指令僅能用於第二版卡片 這是一把私鑰! - 真的要刪除嗎? (y/N) 這是一份和這個金鑰使用者 ID 相繫的簽章. 通常 把這樣的簽章移除不會是個好點子. 事實上 GnuPG 可能從此就不能再使用這把金鑰了. 所以祇有在這 把金鑰的第一個自我簽章因某些原因無效, 而第二 個還可用的情況下纔這麼做.這是一份在這把金鑰上的有效簽章; 通常你不會想要刪除這份簽章, 因為要跟這把金鑰或其他由這把金鑰所驗證的金鑰建立起信任連結 時, 會相當重要.這把金鑰是屬於我們自己的 這把金鑰已經停用了這把金鑰已經過期了!這把金鑰將在 %s 過期. 這把金鑰未被保護. 這把金鑰可能被 %s 金鑰 %s 所撤銷這把金鑰很可能屬於叫這個名字的使用者 這把金鑰已經在 %s 時被 %s 金鑰 %s 所撤銷 這份簽章無法被檢驗, 因為你沒有符合的金鑰. 你應該延緩刪除它, 直到你知道哪一把金鑰被使用了; 因為這把來簽署的金鑰可能透過 其他已經驗證的金鑰建立了一個信任連結.這份簽章已經在 %s 過期了. 這將會是一份自我簽章. 這會讓這把金鑰在 PGP 2.x 模式下無法使用. 將被撤銷: 要建立起信任網絡, GnuPG 需要知道哪些金鑰是被徹底信任的 - 那些金鑰通常就是你有辦法存取到私鑰的. 回答 "yes" 來將這些 金鑰設成徹底信任 處理總量: %lu 取回公鑰的 URL: 未壓縮未知的 `%s' 簽章種類 用法: gpg [選項] [檔案] (或用 -h 求助)用法: gpgv [選項] [檔案] (或用 -h 求助)無論如何還是使用這把金鑰嗎? (y/N) 使用者 ID "%s" 已精簡: %s 使用者 ID "%s" 已過期.使用者 ID "%s" 未經自我簽署.使用者 ID "%s" 已撤銷.使用者 ID "%s" 可被簽署.使用者 ID "%s": 已移除 %d 份簽章 使用者 ID "%s": 已移除 %d 份簽章 使用者 ID "%s": 已經是乾淨的了 使用者 ID "%s": 已經最小化了 使用者 ID 不再有效了警告: 警告: "%s" 是個棄而不顧的指令 - 別再用了 警告: 已不建議使用 "%s" 選項 警告: %s 會推翻 %s 警告: 2 個檔案存在有互相矛盾的資訊. 警告: 已不建議使用 Elgamal 簽署暨加密金鑰 警告: 這是一把 PGP2 型態的金鑰. 增加指定撤銷者可能會導致某些版本的 PGP 駁回這把金鑰. 警告: 這是一把 PGP2 型態的金鑰. 增加照片 ID 可能會導致某些版本的 PGP 駁回這把金鑰. 警告: 這把金鑰已被指定撤銷者所撤銷! 警告: 這把金鑰已被其持有人所撤銷! 警告: 這把金鑰並非以受信任的簽章所認證! 警告: 這把金鑰並非以足夠信任的簽章所認證! 警告: 這把子鑰已被其持有人所撤銷! 警告: 正在使用不被信任的金鑰! 警告: 我們 *不* 信任這把金鑰! 警告: 偵測到金鑰薄弱 - 請再更換一次密語. 警告: `%s' 是個空檔案 警告: 有一份使用者 ID 的簽章日期為 %d 秒後的未來 警告: 一旦把某把金鑰指派為指定撤銷者後, 就無法反悔了! 警告: 收件者偏好設定中找不到 %s 編密演算法 警告: 已不建議使用 %s 摘要演算法 警告: 加密過的訊息已經被變造了! 警告: 強迫使用 %s (%d) 壓縮演算法會違反收件者偏好設定 警告: 強迫使用 %s (%d) 摘要演算法會違反收件者偏好設定 警告: 強迫使用 %s (%d) 對稱式編密法會違反收件者偏好設定 警告: random_seed 檔案大小無效 - 不予採用 警告: 金鑰 %s 用於這些使用者 ID 的演算法偏好設定 警告: 金鑰 %s 可能被撤銷了: 正在取回撤銷金鑰 %s 警告: 金鑰 %s 可能被撤銷了: 撤銷金鑰 %s 未出現. 警告: 金鑰伺服器經手程式係來自不同版本的 GnuPG (%s) 警告: 金鑰伺服器選項 `%s' 並未用於此平台 警告: 訊息已用對稱式編密法的弱金鑰加密了. 警告: 訊息未受到完整的保護 警告: 看到了多份明文 警告: 偵測到多重簽章. 祇有第一個簽章纔會被核選. 警告: 沒有任何使用者 ID 被標示為主要 ID. 這項指令可能會 導致不同的使用者 ID 被當成主要 ID. 警告: 沒有匯出任何東西 警告: 在 `%s' 裡的選項於這次執行期間並沒有被啟用 警告: 可能並不安全的對稱式加密階段金鑰 警告: 程式可能會傾印出核心檔! 警告: 給定的收件者 (-r) 未使用公鑰加密 警告: 私鑰 %s 並沒有任的何單一 SK 加總檢查 警告: 簽章摘要與訊息不一致 警告: 簽署子鑰 %s 有無效的交叉憑證 警告: 簽署子鑰 %s 未經交叉認證 警告: 這份簽章不會被標記為不可匯出. 警告: 這份簽章不會被標記成不可撤銷. 警告: 這把金鑰可能已撤銷 (撤銷金鑰未出現) 警告: 註記 %% 無法擴張 (太大了). 現在使用未擴張的. 警告: 原則 URL 的 %% 無法擴張 (太大了). 現在使用未擴張的. 警告: 偏好金鑰伺服器 URL 的 %% 無法擴張 (太大了). 現在使用未擴張的. 警告: 無法抓取 URI %s: %s 警告: 無法剖析 URI %s 警告: 無法更新金鑰 %s 於 %s: %s 警告: 無法移除暫存目錄 `%s': %s 警告: 無法移除暫存檔 (%s) `%s': %s 警告: 組態檔案 `%s' 的封入目錄所有權並不安全 警告: 家目錄 `%s' 的封入目錄所有權並不安全 警告: 組態檔案 `%s' 的封入目錄權限並不安全 警告: 家目錄 `%s' 的封入目錄權限並不安全 警告: 組態檔案 `%s' 的所有權並不安全 警告: 家目錄 `%s' 的所有權並不安全 警告: 組態檔案 `%s' 的權限並不安全 警告: 家目錄 `%s' 的權限並不安全 警告: 正在使用實驗性的 %s 編密演算法 警告: 正在使用實驗性的 %s 摘要演算法 警告: 正在使用實驗性的 %s 公鑰演算法 警告: 正在使用不安全的記憶體! 警告: 正在使用不安全的隨機數字產生器!! 我們需要產生大量的隨機位元組. 這個時候你可以多做一些事情 (像是敲打鍵盤, 移動滑鼠, 讀寫硬碟之類的) 這會讓隨機數字產生器有更多的機會獲得夠多的亂數. 你的認證金鑰想要用多大的金鑰尺寸? (%u) 你的加密金鑰想要用多大的金鑰尺寸? (%u) 你的簽署金鑰想要用多大的金鑰尺寸? (%u) 你的子鑰想要用多大的金鑰尺寸? (%u) 你想要用多大的金鑰尺寸? (%u) 當你要在金鑰上簽署使用者 ID 時, 你首先必須先驗證那把金鑰 確實屬於那個使用者 ID 上叫那個名字的人. 這對那些知道你多 小心驗證的人來說很有用. "0" 表示你不能提出任何特別的主張來表明 你多仔細驗證那把金鑰 "1" 表示你相信這把金鑰屬於那個主張是主人的人, 但是你不能或沒有驗證那把金鑰. 這對那些祇想要 "個人的" 驗證的人來說很有用, 因為你簽署了一把擬似匿名使用者的金鑰. "2" 表示你真的仔細驗證了那把金鑰. 例如說, 這能表示你驗證了這把金鑰的指紋和 使用者 ID, 並比對了照片 ID. "3" 表示你真的做了大規模的驗證金鑰工作. 例如說, 這能表示你向金鑰持有人驗證了金鑰指紋, 而且你透過附帶照片而難以偽造的文件 (像是護照) 確認了金鑰持有人的姓名與金鑰上使用者 ID 的一致, 最後你還 (透過電子郵件往來) 驗證了金鑰上的 電子郵件位址確實屬於金鑰持有人. 請注意上述關於等級 2 和 3 的例子 "祇是" 例子而已. 最後, 還是得由你自己決定當你簽署其他金鑰時, 甚麼是 "漫不經心", 而甚麼是 "超級謹慎". 如果你不知道應該選甚麼答案的話, 就選 "0".你正要撤銷這些簽章: 你正在使用 `%s' 字元集. 你不能變更 v3 金鑰的使用期限 你不能刪除最後一個使用者 ID! 你沒有指定使用者 ID. (你可能得用 "-r") 你不想要用密語 - 這大概是個 *糟* 點子! 你不想要有密語 - 這個想法實在是 **遭透了**! 我仍然會照你想的去做. 你任何時候都可以變更你的密語, 僅需要再次執行這個程式, 並且使用 "--edit-key" 選項即可. 你已經簽署了金鑰 %s 上的這些使用者 ID: 你不可以把指定撤銷者增加到 PGP2 型態的金鑰裡. 你不可以把照片 ID 增加到 PGP2 型態的金鑰裡. 你不能在 --pgp2 模式下, 拿 PGP 2.x 金鑰做出 OpenPGP 簽章. 你可以試著用下列指令來重建信任資料庫: 你至少得選擇一把金鑰. 你至少得選擇一個使用者 ID. 你一定祇得選擇一把金鑰. 你需要一個密語來保護你的私鑰. 你需要用密語來解開下列使用者的 私鑰: "%s" 你需要用密語來解開下列使用者的私鑰: "%.*s" %u 位元長的 %s 金鑰, ID %s, 建立於 %s%s 你選擇了這個使用者 ID: "%s" 你應該為這份憑證指定一個原因. 根據情境的不同, 你應該可以從這個清單中選出一項: "金鑰已經被洩漏了" 如果你相信有某個未經許可的傢伙取得了你的私鑰, 就選這個. "金鑰被代換了" 如果你把金鑰換成新的了, 就選這個. "金鑰不再被使用了" 如果你已經撤回了這把金鑰, 就選這個. "使用者 ID 不再有效了" 如果這個使用者 ID 不再被使用了, 就選這個; 這通常用來表示某個電子郵件位址不再有效了. 你目前在 "%s" 的簽章 已經過期了. 你目前在 "%s" 的簽章 是一份本機簽章. 你的決定是甚麼? 你要選哪一個? 你的選擇是? (輸入 `?' 以取得更多資訊): 你的系統無法顯示 2038 年以後的日期. 不過, 它可以正確處理直到 2106 年之前的年份. [ 完全 ][ 未定義 ][ 已過期 ][ 已撤銷 ][ 未知 ][找不到使用者 ID][檔名][ 勉強 ][未設定][撤銷][自我簽章][ 徹底 ][ 不確定 ]`%s' 已經被壓縮了 `%s' 不是一個 JPEG 圖檔 `%s' 不是一個標準的檔案 - 已略過 `%s' 不是個有效的字元集 `%s' 不是一個有效的長式金鑰 ID `%s' 不是個有效的簽章使用期限 正要匯出未受保護的子鑰 管理者指令存取權限尚未組態 `%s' 動作在 `%s' 金鑰伺服器架構中未支援 將金鑰加到智慧卡增加照片 ID增加撤銷金鑰增加子鑰增加使用者 ID不明確的 `%s' 選項 匿名收件者; 正在嘗試使用私鑰 %s ... 封裝檔頭: 封裝: %s 假定 %s 為加密過的資料 假設金鑰 %s 的損壞簽章導因於某個未知的關鍵位元 假設被簽署的資料在 `%s' 驗證簽章時自動取回金鑰已自動取回 `%s' (經由 %s ) 損壞的 MPI損壞的 URI損壞的憑證損壞的金鑰錯誤的密語損壞的公鑰損壞的私鑰損壞的簽章盡量安靜些二進制build_packet 失敗: %s cC快取鑰匙圈 `%s' 中 無法存取 %s - 無效的 OpenPGP 卡片? 無法存取 `%s': %s 無法關閉 `%s': %s 無法連接至 `%s': %s 無法建立 `%s': %s 無法建立備份檔案 `%s': %s 無法建立目錄 `%s': %s 無法為 `%s' 建立鎖定 無法讓系統停止傾印核心檔: %s 無法在批次模式中這樣做 沒有 "--yes" 就沒辦法在批次模式中這麼做 無法以 %u 位元長的 p 及 %u 位元長的 q 產生質數 無法產生少於 %d 位元的質數 無法操作 %d 公開金鑰演算法 無法處理長於 %d 字符的文字列 無法處理這個不明確的簽章資料 無法鎖定 `%s' 無法鎖定 `%s': %s 無法開啟 `%s' 無法開啟 `%s': %s 無法開啟被簽署過的資料 `%s' 沒辦法開啟鑰匙圈無法在批次模式中查詢密語 無法讀取 `%s': %s 無法取得檔案 `%s' 的資訊: %s 因處於 S2K 模式下而無法使用對稱式 ESK 封包 無法寫入 `%s': %s 已取消由使用者所取消 cancel|cancel無法將 PGP 2.x 型態的金鑰指派為指定撤銷者 無法避免對稱式編密法的弱金鑰; 已經試了 %d 次了! 卡片不支援 %s 摘要演算法 卡片永久鎖定了!! 沒有讀卡機可用 卡片編號: 變更取回金鑰的 URL變更某個憑證中心 (CA) 的指紋變更卡片的個人識別碼 (PIN)變更卡片持有人的名字變更卡片持有者的性別變更卡片上的資料變更金鑰或所選子鑰的使用期限變更介面語言偏好設定變更登入名稱更改主觀信任更改密語檢查簽章檢查已建立的簽章時出錯: %s 正在檢查信任資料庫 加總檢查錯誤%d%s 編密演算法未知或已停用 冒號缺漏從金鑰中精簡無法使用的使用者 ID 並移除所有的簽章從金鑰中精簡無法使用的使用者 ID 並移除無法使用的簽章completes-needed 一定要大於 0 指令彼此矛盾 無法剖析金鑰伺服器 URL 匯入私鑰時亦建立公鑰建立以 ASCII 封裝過的輸出建立: %s缺漏創生時間戳印 資料未被儲存; 請用 "--output" 選項來儲存 解開封裝失敗: %s 資料解密 (預設)解密失敗: %s 解密成功 刪除所選的子鑰刪除所選的使用者 ID從所選的使用者 ID 中刪除簽章刪除金鑰區塊時失敗: %s 深度: %d 有效: %3d 已簽署: %3d 信任: %d-, %dq, %dn, %dm, %df, %du `%s' 目錄已建立 停用金鑰已停用列出金鑰時顯示照片 ID驗證簽章時顯示照片 ID使用暫存檔後不要加以刪除不要做任何改變匯入後不要更新信任資料庫提高對持有有效 PKA 資料之簽章的信任啟用金鑰進行封裝失敗: %s 加密資料已用 %lu 個密語加密了 已用 %s 金鑰, ID %s 所加密 已用 %u 位元長的 %s 金鑰, ID %s, 建立於 %s 所加密 已用 1 個密語加密了 以 %d 未知演算法所加密 在 --pgp2 模式下加密訊息需要 IDEA 編密法 僅使用對稱式編密法來加密分派足夠的記憶體時出錯: %s 將 %d 金鑰尺寸變更為 %u 位元時出錯: %s 建立 `%s' 時出錯: %s 建立 `%s' 鑰匙圈時出錯: %s 建立密語時出錯: %s 在 `%s' 中尋找信任記錄時出錯: %s 取得現用金鑰資訊時出錯: %s 取得新的個人識別碼 (PIN) 時出錯: %s 在 `%s' 中出錯: %s 結尾列有問題 讀取 `%s' 時出錯: %s 讀取應用程式資料時出錯 讀取指紋 DO 時出錯 讀取金鑰區塊時出錯: %s 讀取私鑰區塊 "%s" 時出錯: %s 從卡片取回 CHV 狀態時出錯 寫入 `%s' 時出錯: %s 金鑰寫入卡片時出錯: %s 寫入鑰匙圈 `%s' 時出錯: %s 寫入公鑰鑰匙圈 `%s' 時出錯: %s 寫入私鑰鑰匙圈 `%s' 時出錯: %s 既有的金鑰將被取代 已過期過期: %s到期: %s匯出署名使用者 ID (通常是照片 ID)匯出金鑰把金鑰匯出至金鑰伺服器匯出標記為 "機密" 的撤銷金鑰匯出標記為僅限本機使用的簽章不允許匯出私鑰 本版並不支援外部金鑰伺服器叫用 因為不安全的檔案權限選項, 而禁用了外部程式叫用 信任資料庫啟始失敗: %s 重新建立鑰匙圈快取失敗: %s 存放創生日期失敗: %s 存放指紋失敗: %s 存放金鑰失敗: %s 解除子鑰保護失敗: %s 以 %s 做為預設個人識別碼 (PIN) 時失敗: %s - 正在停用接下來的預設用法 女性從卡片 URL 取回指定的金鑰檔案關閉錯誤檔案建立錯誤檔案刪除錯誤檔案已存在檔案開啟錯誤檔案讀取錯誤檔案更名錯誤檔案寫入錯誤卡片上的指紋與所要求的並不吻合 把所選的使用者 ID 標為主要強迫使用強迫使用 %s (%d) 對稱式編密法會違反收件者偏好設定 `%s' 的 fstat 失敗於 %s: %s fstat(%d) 失敗於 %s: %s 完全一般性錯誤產生 PGP 2.x 相容性訊息產生新的金鑰對產生撤銷憑證產生新的金鑰產生金鑰時失敗 正在產生新的金鑰 正在產生私鑰保護會用到的舊式 16 位元加總檢查 gpg-agent 在此階段無法使用 gpg-agent 協定版本 %d 未被支援 gpg/卡片> 取回金鑰時尊重金鑰所設定的 PKA 記錄尊重金鑰上所設定的偏好金鑰伺服器 URLiImMqQsS從金鑰伺服器匯入金鑰匯入標記為僅限本機使用的簽章匯入/合併金鑰未允許匯入私鑰 在搜尋結果中也包含已撤銷的金鑰以金鑰 ID 搜尋時也搜尋子鑰輸入列 %u 太長或者列末的 LF 遺失了 輸入列比 %d 字符還長 無效無效的 S2K 模式; 一定要是 0, 1 或 3 無效的參數無效的封裝無效的封裝檔頭: 無效的封裝: 列長超出 %d 字符 無效的自動金鑰定址清單 無效的明文簽章檔頭 無效的破折號逸出列: 無效的預設偏好 無效的 default-cert-level; 一定要是 0, 1, 2 或 3 無效的匯出選項 無效的指紋無效的 `%s' 雜湊演算法 無效的匯入選項 偏好字串中含有無效的 `%s' 項目 無效的鑰匙圈無效的金鑰伺服器選項 無效的金鑰伺服器協定 (我們用 %d!=經手程式 %d) 無效的清單選項 無效的 min-cert-level; 一定要是 1, 2 或 3 無效的封包無效的密語無效的個人編密法偏好 無效的個人壓縮偏好 無效的個人摘要偏好 無效的 64 進位字符 %02x 已跳過 在 proc_tree() 中偵測到無效的 root 封包 無效的 OpenPGP 卡片結構 (DO 0x93) 無效的數值 無效的驗證選項 我們強烈建議你更新偏好設定, 並重新 在金鑰伺服器上找不到金鑰 "%s" 找不到金鑰 "%s": %s 金鑰 %s 沒有使用者 ID 金鑰 %s 已標記成徹底信任了 金鑰 %s 在信任資料庫中出現了不止一次 金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題) 金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題) 金鑰 %s: "%s" %d 份新的簽章 金鑰 %s: "%s" %d 把新的子鑰 金鑰 %s: "%s" %d 個新的使用者 ID 金鑰 %s: "%s" 已清除 %d 份簽章 金鑰 %s: "%s" 已清除 %d 份簽章 金鑰 %s: "%s" 已清除 %d 個使用者 ID 金鑰 %s: "%s" 已清除 %d 個使用者 ID 金鑰 %s: "%s" 1 份新的簽章 金鑰 %s: "%s" 1 把新的子鑰 金鑰 %s: "%s" 1 個新的使用者 ID 金鑰 %s: "%s" 未改變 金鑰 %s: 已新增 "%s" 撤銷憑證 金鑰 %s: "%s" 撤銷憑證已匯入 金鑰 %s: %s 金鑰 %s: PGP 2.x 型態的金鑰 - 已跳過 金鑰 %s: PKS 子鑰的訛誤已被修復 金鑰 %s: 如受信任的金鑰般被接受了 金鑰 %s: 已接受非自我簽署的使用者 ID "%s" 金鑰 %s: 已在私鑰鑰匙圈之中了 金鑰 %s: 無法定址原始的金鑰區塊: %s 金鑰 %s: 無法讀取原始的金鑰區塊: %s 金鑰 %s: 已新增直接金鑰簽章 金鑰 %s: 跟我們的副本不吻合 金鑰 %s: 偵測到重複的使用者 ID - 已合併 金鑰 %s: 無效的直接金鑰簽章 金鑰 %s: 無效的撤銷憑證: %s - 已駁回 金鑰 %s: 無效的撤銷憑證: %s - 已跳過 金鑰 %s: 使用者 ID "%s" 的自我簽章無效 金鑰 %s: 無效的附帶子鑰 金鑰 %s: 無效的子鑰撤銷 金鑰 %s: 金鑰資料在卡片上 - 已跳過 金鑰 %s: 新的金鑰 - 已跳過 金鑰 %s: 沒有公鑰 - 無法套用撤銷憑證 金鑰 %s: 受信任的金鑰沒有公鑰 - 已跳過 金鑰 %s: 沒有可供附帶的子鑰 金鑰 %s: 沒有子鑰可供金鑰撤銷 金鑰 %s: 沒有子鑰可供附子鑰簽章之用 金鑰 %s: 沒有子鑰可供子鑰撤銷簽章使用 金鑰 %s: 沒有使用者 ID 金鑰 %s: 簽章沒有使用者 ID 金鑰 %s: 沒有有效的使用者 ID 金鑰 %s: 不可匯出的簽章 (等級 0x%02X) - 已跳過 金鑰 %s: 未受保護 - 已跳過 金鑰 %s: 公鑰 "%s" 已匯入 金鑰 %s: 找不到公鑰: %s 金鑰 %s: 多重附帶子鑰已移除 金鑰 %s: 多重子鑰撤銷已移除 金鑰 %s: 撤銷憑證在錯誤的地方 - 已跳過 金鑰 %s: 私鑰已匯入 金鑰 %s: 找不到私鑰: %s 金鑰 %s: 私鑰使用了無效的 %d 編密法 - 已跳過 金鑰 %s: 祇有私鑰而沒有公鑰 - 已跳過 金鑰 %s: 子鑰已跳過 金鑰 %s: 使用者 ID "%s" 已跳過 金鑰 %s: 子鑰簽章在錯誤的地方 - 已跳過 金鑰 %s: 非預期的簽章等級 (0x%02X) - 已跳過 金鑰 %s: 未支援的公鑰演算法 金鑰 %s: 使用者 ID "%s" 用了未支援的公鑰演算法 金鑰已存在 金鑰匯出失敗: %s 金鑰產生完畢 (%d 秒) 金鑰已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題) 金鑰已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題) 金鑰未被標示為不安全 - 不能夠拿來跟假的隨機數字產生器併用! 在金鑰伺服器上找不到金鑰 不可能進行金鑰操作: %s `%s' 金鑰區塊資源: %s `%s' 鑰匙圈已建立 金鑰伺服器通訊錯誤: %s 金鑰伺服器並未送出版本 (VERSION) 金鑰伺服器錯誤金鑰伺服器內部錯誤 從金鑰伺服器接收失敗: %s 從金鑰伺服器更新失敗: %s 用金鑰伺服器搜尋失敗: %s 送至金鑰伺服器失敗: %s 金鑰伺服器逾時 金鑰尺寸無效; 改用 %u 位元 金鑰尺寸增大到 %u 位元 列太長列出所有可用的資料列出並檢查金鑰簽章列出金鑰和使用者 ID列出金鑰列出金鑰和指紋列出金鑰和簽章列出偏好 (專家模式)列出偏好 (囉唆模式)列出私鑰建立分離式簽章僅把時間戳印矛盾視為警告make_keysig_packet 失敗: %s 男性格式不對的 CRC 格式不對的 GPG_AGENT_INFO 環境變數 格式不對的使用者 ID勉強marginals-needed 一定要大於 1 max-cert-depth 一定要介於 1 和 255 之間 變更或解凍個人識別碼 (PIN) 的選單將備份金鑰移動到智慧卡將金鑰移動到智慧卡正在把金鑰的簽章搬移到正確的位置去 nN多層明文簽章 網路錯誤永遠不會永遠不過期新的設定檔 `%s' 被建立了 下次信任資料庫檢查將於 %s 進行 no在群組定義 `%s' 裡找不到 = 記號 沒有卡片沒有相對應的公鑰: %s 沒有資料沒有預設的私鑰鑰匙圈: %s 偵測不到亂數蒐集模組 沒有 `%s' 金鑰伺服器架構的經手程式 沒有金鑰伺服器動作! 沒有已知的金鑰伺服器 (使用 --keyserver 選項) 不需要檢查信任資料庫 在 `%s' 信任模型中並不需要檢查信任資料庫 在 `%s' 信任模型中並不需要更新信任資料庫 沒有設定照片檢視程式 沒有支援的遠端程式執行 沒有找到 "%s" 用的撤銷金鑰 沒有私鑰 公鑰 %s 沒有相對應的私鑰 - 正在忽略 找不到簽章 沒有被簽署過的資料 沒有這個使用者 ID沒有找到任何徹底信任的金鑰 找不到有效的 OpenPGP 資料. 沒有有效的地址 找不到可寫入的鑰匙圈: %s 找不到可寫入的公鑰鑰匙圈: %s 找不到可寫入的私鑰鑰匙圈: %s 不是一份分離的簽章 這不是 OpenPGP 卡片未加密不強迫使用未處理未支援請注意: random_seed 檔案是空的 請注意: random_seed 檔案未更新 oO很好, 我們就是匿名收件者. okay|okay不支援舊式的 DEK 編碼 舊型 (PGP 2.x) 簽章 祇接受既有金鑰的更新尚未啟用安全的記憶體時, 不可能進行操作 選項檔 `%s': %s 原始的檔名 ='%.*s' 主觀信任資訊已清除 主觀信任值缺漏密語係以未知的 %d 摘要演算法所產生 前後兩次輸入的密語不一致; 請再試一次請做一次 --check-trustdb 請輸入選用 (但強烈建議使用) 的電子郵件位址請參考 %s 上進一步的資訊 請參考 http://www.gnupg.org/documentation/faqs.html 上進一步的資訊 請改以 "%s%s" 代替 正在產生金鑰中, 請稍候 ... 偏好設定 `%s' 重複了 檔案未預期的結束 (CRC 的部分未結束) 檔案未預期的結束 (於結尾處) 檔案未預期的結束 (沒有 CRC 的部分) 列印卡片狀態處理已加密封包有問題 代理程式的問題 - 停用代理程式中 覆寫前先詢問%d%s 保護演算法未支援 %d 保護摘要未支援 公鑰和私鑰已建立及簽署. 公鑰 %s 比簽章還要新了 %lu 秒 公鑰 %s 比簽章還要新了 %lu 秒 找不到公鑰 %s: %s 公鑰解密失敗: %s 公鑰與私鑰並不吻合! 公鑰加密過的資料: 完好的 DEK 公鑰為 %s 找不到公鑰找不到徹底信任金鑰 %s 的公鑰 qQquit離開這個選單封裝裡出現被引號括住的可列印字符 - 可能是有瑕疵的送信程式造成的 散佈此金鑰, 以避免潛在的演算法不一致問題. 讀取 `%s' 錯誤: %s 正在從 `%s' 讀取中 從 `%s' 讀取選項中 讀取公鑰時失敗: %s 正在讀取標準輸入中 ... 撤銷原因: 更新 %d 份金鑰中 (從 %s ) 更新 1 份金鑰中 (從 %s ) 受到匯入過濾器所排除匯入後盡可能地從金鑰中移除匯出時盡可能地從金鑰中移除從公鑰鑰匙圈裡移除金鑰從私鑰鑰匙圈裡移除金鑰從匯出所得的子鑰中移除密語匯入後從金鑰中移除無法使用的部分匯出時從金鑰中移除無法使用的部分把 `%s' 重新新命成 `%s' 時失敗: %s 匯入時修復來自 pks 金鑰伺服器的損壞正在請求金鑰 %s 自 %s 正在請求金鑰 %s 自 %s 伺服器 %s 資源限制回應中未包含 RSA 系數 回應中未包含 RSA 公用指數 回應中未包含公鑰資料 撤銷註釋: 撤銷金鑰或所選的子鑰撤銷所選的使用者 ID撤銷所選使用者 ID 的簽章已撤銷被你的金鑰 %s 於 %s 所撤銷了 撤銷: %s加大到 %u 位元 儲存並離開在金鑰伺服器上搜尋金鑰正在搜尋 "%s" 於 %s 正在搜尋 "%s" 於 %s 伺服器 %s 正在從 %s 搜尋名字 正在從 %s 伺服器 %s 搜尋名字 找不到私鑰 "%s": %s 私鑰 %s: %s 私鑰已經存放在卡片上了 無法取用私鑰私鑰部分無法取用 私鑰部分無法取用 選擇子鑰 N選擇使用者 ID N所選的憑證摘要演算法無效 所選的編密演算法無效 所選的壓縮演算法無效 所選的摘要演算法無效 挑選 openpgp 時失敗: %s 遞送金鑰 %s 至 %s 遞送金鑰 %s 至 %s 伺服器 %s 為所選的使用者 ID 設定註記設定所選使用者 ID 的偏好清單為所選的使用者 ID 設定偏好的金鑰伺服器 URL列出簽章時顯示 IETF 標準註記驗證簽章時顯示 IETF 標準註記顯示管理者指令列出簽章時顯示所有的註記驗證簽章時顯示所有的註記列出簽章時顯示有效期限顯示金鑰指紋驗證簽章時祇顯示主要的使用者 ID列出簽章時顯示原則 URL驗證簽章時顯示原則 URL列出簽章時顯示偏好的金鑰伺服器 URL驗證簽章時顯示偏好的金鑰伺服器 URL列出金鑰時顯示已撤銷或過期的子鑰列出金鑰時顯示已撤銷或過期的使用者 ID驗證簽章時顯示已撤銷或過期的使用者 ID顯示所選的照片 ID在金鑰清單中顯示鑰匙圈名稱顯示這份線上說明列出金鑰時顯示使用者 ID 有效性驗證簽章時顯示使用者 ID 有效性列出簽章時顯示使用者提供的註記驗證簽章時顯示使用者提供的註記簽署金鑰僅在本機簽署金鑰簽署或編輯金鑰簽署所選的使用者 ID [* 請參見底下相關的註解]僅在本機簽署所選的使用者 ID用不可撤銷的簽章來簽署所選的使用者 ID用信任簽章來簽署所選的使用者 ID簽章驗證已抑制 目前建立的簽章: %lu 已被你的金鑰 %s 於 %s%s%s 所簽署 簽署時失敗: %s 簽署子鑰 %s 已經交叉認證過了 簽署:已跳過 "%s": %s 已跳過 "%s": 重複了 已跳過: 公鑰已設過 已跳過: 公鑰已經被設成預設收件者 已跳過: 私鑰已經存在 正在跳過 %d 型態的區塊 正在跳過使用者 ID "%s" 的 v3 自我簽章 獨立撤銷 - 請用 "gpg --import" 來套用 等級 0x%02x 的獨立簽章 儲存金鑰到卡片上時失敗: %s 子鑰 %s 不做簽署之用, 因此無須交叉驗證 %d 類別的子封包設定了關鍵位元 `%s' 對稱式加密失敗: %s 叫用外部程式時發生系統錯誤: %s 從這個鑰匙圈裡取用金鑰文字模式給定的的憑證原則 URL 無效 給定的偏好金鑰伺服器 URL 無效 給定的簽章原則 URL 無效 簽章無法驗證. 請記住簽章檔 (.sig 或 .asc) 應該是第一個命令列給定的檔案. 公鑰 "%s" 有相對應的私鑰! 這是由 PGP 產生的 ElGamal 金鑰, 用於簽章並不安全!已指定這把金鑰為撤銷者了 這可能肇因於遺失自我簽章所致 這個訊息對 %s 來說無法使用 在這個作業平台上叫用外部程式時需要暫存檔 時間戳印有矛盾在私鑰清單和公鑰清單間切換切換簽章是否強制使用個人識別碼 (PIN) 的旗標編密偏好過多 壓縮偏好過多 摘要偏好過多 pk 快取裡有太多項目 - 已禁用 信任資料庫錯誤信任記錄 %lu 不是所請求的類別 %d 信任記錄 %lu, 請求類別 %d: 讀取失敗: %s 信任記錄 %lu, 類別 %d: 寫入失敗: %s 信任: %s信任資料庫記錄 %lu: 本機搜尋失敗: %s 信任資料庫記錄 %lu: 寫入失敗 (n=%d): %s 信任資料庫更動量過大 信任資料庫: 本機搜尋失敗: %s 信任資料庫: 讀取失敗 (n=%d): %s 信任資料庫: 同步化失敗: %s 信任等級因有效的 PKA 資訊而調整為 *完全* 信任等級因不良的 PKA 資訊而調整為 *永遠不會* 徹底無法顯示照片 ID! 無法執行外部程式 無法執行程式 `%s': %s 無法執行 shell `%s': %s 無法開啟 JPEG 圖檔 `%s': %s 無法讀取外部程式回應: %s 無法把執行檔路徑設成 %s 無法更新信任資料庫版本記錄: 寫入失敗: %s 你正要用來加密的所有金鑰都不能使用 IDEA 編密法. 無法使用未知的信任模型 (%d) - 現在採用 %s 信任模型 以重設碼來解開個人識別碼 (PIN) 鎖定狀態uncompressed|none|未壓縮|無未定義未預期的封裝: 未預期的資料尚未實做的編密演算法尚未實做的公鑰演算法未知未知的封裝檔頭: 未知的編密演算法未知的壓縮演算法未知的組態項目 `%s' 未知的預設收件者 "%s" 未知的摘要演算法未知的金鑰保護演算法 未知的 `%s' 選項 未知的封包型態未知的保護演算法 未知的公鑰演算法未知的簽章層級未知的版本外部程式不自然地離開 未特定未支援的 URI無法使用的公鑰演算法不可用的公鑰不可用的私鑰從金鑰伺服器更新所有的金鑰更新失敗: %s 更新私鑰失敗: %s 更新信任資料庫用途: %s用法: gpg [選項] 當作輸出檔案來使用使用標準的文字模式請先以 "--delete-secret-keys" 選項來刪除它. 使用嚴謹的 OpenPGP 行為用暫存檔來將資料遞送給金鑰伺服器協助程式拿這個使用者 ID 來簽署或解密使用者 ID "%s" 已撤銷 使用者 ID: "%s" 正在使用 %s 信任模型 正在使用 %s 編密法 正在使用 %s 為預設個人識別碼 (PIN) 使用子鑰 %s 來替換主鑰 %s 以 PKA 資料驗證簽章有效性: %s囉唆模式目前在此指令中的管理者個人識別碼 (PIN) 驗證被禁止了 驗證 CHV%d 失敗: %s 驗證簽章驗證個人識別碼 (PIN) 並列出所有的資料正在等候 `%s' 鎖定... 金鑰薄弱建立了弱金鑰 - 重試中 加密過的階段金鑰 (%d) 尺寸詭異 因為 %s 而不會在不安全的記憶體中執行 寫入直接簽章中 寫入附鑰簽章中 正在寫入新的金鑰 正在寫入公鑰至 `%s' 正在寫入私鑰 stub 至 `%s' 正在寫入私鑰至 `%s' 寫入自我簽章中 寫入 `%s' 中 寫到標準輸出中 用了錯誤的私鑰yYyes你在 --pgp2 模式下祇能夠使用 PGP 2.x 型態的金鑰來做明文簽署 你在 --pgp2 模式下祇能夠使用 PGP 2.x 型態的金鑰來做分離簽署 在 --pgp2 模式中, 你祇能以 2048 位元以下的 RSA 金鑰加密 你祇有在 --pgp2 模式下纔能做出分離式或明文簽章 你可以像這樣來更新偏好設定: gpg --edit-key %s updpref save 你在 --pgp2 模式下時, 不能同時簽署和加密 你不能指派某把金鑰為它自己的指定撤銷者 你不能在 %s 模式中使用 --symmetric --encrypt 你不能在 --s2k-mode 0 中使用 --symmetric --encrypt 你不能在 %s 模式中使用 --symmetric --sign --encrypt 你不能在 --s2k-mode 0 中使用 --symmetric --sign --encrypt 你找到一個瑕疵了 ... (%s:%d) 你不能夠將 %s 用於 %s 模式中 你不該將 `%s' 編密演算法用於 %s 模式中 你不該將 `%s' 壓縮演算法用於 %s 模式中 你不該將 `%s' 摘要演算法用於 %s 模式中 啟用 --pgp2 時你祇應該使用檔案, 而非管道 |AN|新增管理者 PIN|A|請輸入管理者 PIN|A|請輸入管理者 PIN%%0A[剩餘嘗試次數: %d]|檔案描述|把狀態資訊寫入此檔案描述|名字|以指定名字作為加密對象|N|新增 PIN|N|設定壓縮等級為 N (0 表示不壓縮)|RN|新增重設碼|[檔案]|建立明文簽章|[檔案]|建立簽章|演算法 [檔案]|印出訊息摘要||請輸入 PIN||請輸入 PIN%%0A[簽署完成: %lu]||請輸入卡片重設碼gnupg-1.4.20/po/de.gmo0000644000175000017500000044701512635457221011373 00000000000000(,J4wр'">\n '݁"5-F(t02΂H J T anȄA܄/0N\1܅D#-h0.džI*@+k' ̇*CX_y3Ĉ4̈-/'.@$I n x?4Ɗ:6Us,(8#M&q(&,756m-%ҍ39,0f<GԎ@>]+=ȏ&"8[q :Ȑ#ې $/Eu[Hu-$'89&r5.ϓ5*4!_.0&,5O kv8#•".)XH":(]$E1#;Ǚ8$:_sa/K^zœBۜ4GWi%ٝ.$* *˟!0'I<q+ɠ",/E1u",ʡ"2M i( Ԣ*ߢ 7Kdvƣ 5"(5(^p˥Fݥ $1E%wE\Eo X y8*'c>ʩcZ/NE=,"#ӫ-+%)Q&{'Gg}گ+,"3O 1(װ#+$"P+s" ±?%7]xβ. (9 b}/00`!!.D]{%ɷܷjKo@-*9O0A/r5'غ.3/-cf~!ѽ$,(?h]|-ʿݿ *++V  #)$Mr  6% 27L2r7>1=IY4#=.Y?D@-+n1NIIe55;?WB<H-`"H?<B)_C:.>72v=<@$FeHU$K p-21I$>nK@5:*p7,0014b 2:6'5^.h*L&w1#2>'f*=C0M90:"k&!3> cJ%D,5F|2_ 0 ; F Q \g {  %"(K)k&+57F [ hv. B55S$ (/HK(a" -Ig,'.%2.+a% 3H5] ;<*Lw 3:I&4-C q<A('=/\ 10GXp,H 5A%J/p0.&3? s~ 0$.=S%#- "C'b# +I'e&& &2Yx / ,/"M9pK%$&A$h#D'BSe w1$@$e $!%<DP+/ 603dm/"&(%@%f$ .<Uq2 '"JZ/u+$ &.$U'z,, ># b$,IJO"# <!]*- G$S'x ."+)?#i-%658/n"' ;$0`"%/2 =!Qs: !! (.+W8!400ay26) 9+ e y & G H BH     #  = M g        / = U s        '' O n s .   ( 2 !( Jk,  $5)8b j%%,A2^3&"$13ey!% %3Ys     #& +)5_$~<16J,;#M+y-*"@-c+&*5)6_!&$!32H{~IF#;Ni014#f#++,!32U$*2.5dy*  %3S%o&$ 0#I&m3%*%:`~(-9 6E :|  , 0 /)!Y!7n!*!.!7";8"0t"1";"#%+#Q#)`#3#6#:# 0$;$N$9a$$5$-$"%A% a%%-%%%% %5&$P&u&+&4&%&!'C9'*}'('0'("(.+(-Z(*((+D)Gp)2)/)%*FA**1*#**!+0+(M+v+-+/+,+ ," ,)C,m,, ,,2,1-G-P-#m-#-!-"---(.:G.I.A."/1/ C/M/`/p////// 0"0B0![0}000000#1 )151E1_1s1 1111 112"26:2q252#2 233-3>3*W3!3 33G344 -4N4k4t4-4,445%565 R5s5555555D5F-6Et6D6E6AE7776777=.8>l88$878<%97b9F9999: K:l: :$::#::#;';*>;*i;{;<=M=<>B?]?X@(w@,@.@.@-+A-YA-A?A<A02B4cB\B:B_0CAC&C-C 'D3DKDcD.{D.DDDE.E2?E3rE.E5E- F9F%RF!xF5F(F%FG3=G!qG$G,G#G3 H.=H lHH$H HH"I 2I>IVI%fI.IIIII.J+BJ8nJ2JhJACKK:K<K6L=OL5L.L6L")MLM.TM'MM'M#MN"N8R=RS%4S#ZS!~S*S!S S*T!9T)[T'TT1T0T 0U?>UL~UUVVWW3W.GWvWWWWW!W(X7X)OX1yXX9X2X60YgYPjY:Y Z [#[4[!P[r[F[H[>\lS\B\]m"]-],]-]V^(p^(^'^^^_!+_,M_1z_%___!_G`a`@i`7``1a1a b/ b Pb\bLlb?b>b+8c)dc'ccc@c<,d;id.d0d9e0?epeeeeHeDf9^f&fGfJg:RgHgSgI*hDth4h8h'i0i@iIi.gi"iiiKi:j7Tjjj.jDj=k \k,ilFl8l;mCRmLm1m>n.TnDn3n/n6,o<co+o9op #pDpTpMsp%ppq< qJJqqWGr2r9r9 sEFs@ssitt"u v4(vJ]v9vvvw#wCww%y(yEy_y!ty'y0yhy"Xz{zzz-zGzC{R{f{z{P{{2|;|  }2~(L~Pu~D~G $S<x<AB4Bw0F329f*/ˁ(.$ S8^ ς" +(To"Ƀ؃F/ل* :4Ko)ͅ&<aS :ֆ9'Ks=Gr,.@7ΊU\~>kfՍ8f%ŎCߎ;#1_(*2x*ڒ+*!V2x6D'>G+0̔C(ADj)*ٕU$-z%&'.&V/}>7$A#09TCҚ*Z< œ͜*$1V0t0 *)TfHR=ٟA\ߠ><9{8+-<H=|â@S7+ %إ(L'Bt>*';;c' Ǩ.ѩ./#A+e01ª+% F'c!#ʫ% 2S rG|,Ĭ: NDNGA7EycF#Aj8WE=$Km_b?²;\>^|Lw?ĴGVL]PIRL'HZN2INT:L(DuCF<EMHкWXq]ʻs(11μAEBIaҽ_4]]CP@?տ<FR:A@BWHuG>;E,0"A09Kj>;UEROY:B5}3/JYb,Bo6J3~0t B M X c p{     5+$a,0:1EQ*$!";?T$Y,4<a !8Uj~""8"+3K#3/(<04m@B@&9g?D &$G!l%).5 C+ZM Y+9? ^ +(LF<Kh@{V^%-4M!P r~K2%$:_&}31V* ,52!.T)7B(2>q#(;$,4Sa /A#H3l(33)1[o&(+9(0b#84:%=`-   1$-;?iG2L$[q19894r-C]w3  -K"[~D&s%z  (! *,W#pT0 7: rE}J.?F"28<1R( ; :8#s',%@Sm9#F:<526(i1/0%!8?Z>#!H9hVV'P,x%,,)%*O$z,#$42J}:3=??6F<4:7o<0DBZ>43FE0ce!F<T R`+(N&,u8;<;TD.6W;Q-* T> I 9 K c $ 0 f g> k 9 'L #t  - '  !# 2E 0x 2 . % 51(g /!0*)[*)&*(J s}9-0**[?+1$&'N] e'p/8 / B2N.:= &HEoA#;-WO )?>(~.<7/g&1J0M ~/&:7R!j!;@'Ddl?'..V 1$)'4BFw-/ <:JwJ/ ==>{A 'NEs2   ! 7 (!8!)N!(x!"!@!A"1G"0y"9";"@ #.a#G# #*#,$$+Q$8}$9$$8%>%4^% %+%%%%)&9&!Q&s&&,&&<&'-'4U'3'''-':(7Y(-(6(())4<);q)O))B*T*+h*6*+*&*>+7]+:+<+Z ,Hh,@,M,@-=_--5-H-</.Dl..,.*.F/<e/3/C/*0)E02o0 05001 18=1Ov151"182EX2(272b29b3:303+4 448>4Bw4<44K5`5>L6E616U7Y7Gq7.7'7(898.X88:8/89 9 C9+Q92}99"9 9$:B7:<z::):1:1$;-V;0;C;9;S3<Q<V<80=i= ===2=7= %>(/>&X>>'>->>'?7?O?d? ???.? @@/(@&X@!@/@@.@A .L,mLL L(LL+M#3M9WMM/M2MXY|FRD[/K ^j\O67#,"V}k#@{nfK ={<nAy?DK  IzThn9fyucl~!`<R@>h>]WRGIQav'09k%b "swo8( f' Tr4eeFAa" &N&C: 8.HN9hd-4pb7U}$Ha=PJVaA$mc2e=~(-S@yDqUP| Z]&[,%3  [*t#'IP}~Cr)C:UFL'; ]j+zC%mzi940U|pB_Rxp7xn>SA7f+} Yc76^ 2EB~ivdl (,9Oziv{H?k5tR!2W?OtBk:L.\X\/ `i6L! :uEq%*o&?;>h 1 I-mA {HT P'oB0d<1sQ]3*X=~Mdr<)sbMO<?^rZFeQXw8/JbV|Y/.NK-IFD)>`4M_8_g$nx`h38u\V )J_"sl]  5+c\zZ6Q MXr#61D5;o1(tS jG/*vukHvC!YMgWt$:`qleYm@%WNE{B3y-SEysgg.mp0jGww^"Q2!4;UxL[da@5 i^J * xGcb10PLE(5$ J+[  WS=Z_O+Tjgp)l2q#f3}Z;uKV N ,qT|.wG,&o Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Note: signatures using the %s algorithm are rejected Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Unknown weak digest '%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: Your encryption subkey expires soon. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You may want to change its expiration date too. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg-1.4.8 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2015-12-19 15:38+0100 Last-Translator: Walter Koch Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=n != 1; Geben Sie die User-ID ein. Beenden mit einer leeren Zeile: Es sind nicht genügend Zufallswerte vorhanden. Bitte führen Sie andere Arbeiten durch, damit das Betriebssystem weitere Entropie sammeln kann! (Es werden noch %d Byte benötigt.) Wählen Sie ein Bild für Ihre Foto-ID aus. Das Bild muß eine JPEG-Datei sein. Bitte beachten Sie, daß das Bild in Ihrem öffentlichen Schlüssel gespeichert wird. Wenn Sie ein sehr großes Bild benutzen, wir Ihr Schlüssel leider auch sehr groß werden. Ein Bild der Größe 240x288 Pixel ist eine gute Wahl. Unterstützte Verfahren: Sie benötigen eine User-ID, um Ihren Schlüssel eindeutig zu machen; das Programm baut diese User-ID aus Ihrem echten Namen, einem Kommentar und Ihrer Email-Adresse in dieser Form auf: "Heinrich Heine (Der Dichter) " alias "%s" mittels %s-Schlüssel %s importiert: %lu unverändert: %lu neue Unterschlüssel: %lu neue User-IDs: %lu nicht importiert: %lu ohne User-ID: %lu "%s": Einstellungen des Verschlüsselungsverfahren %s "%s": Einstellungen der Komprimierungsverfahren %s "%s": Einstellungen der Hashmethode %s (Unterschlüssel aus Hauptschlüssel-ID %s) Es ist nicht sicher, daß die Signatur wirklich dem vorgeblichen Besitzer gehört. Die Signatur ist wahrscheinlich eine FÄLSCHUNG. Es gibt keinen Hinweis, daß die Signatur wirklich dem vorgeblichen Besitzer gehört. Das könnte bedeuten, daß die Signatur gefälscht ist. Algorithmen dieser User-IDs: neue Signaturen: %lu "%s" Kartenseriennr. = Schl.-Fingerabdruck = Unter-Fingerabdruck = gelesene geheime Schlüssel: %lu ignorierte neue Schlüssel: %lu User-IDs bereinigt: %lu Unter-Fingerabdruck = Signaturen bereinigt: %lu (%c) Beenden (%c) Umschalten der Authentisierungsfähigkeit (%c) Umschalten der Verschlüsselungsfähigkeit (%c) Umschalten der Unterschreibfähigkeit (%d) DSA (Leistungsfähigkeit selber einstellbar) (%d) DSA (nur unterschreiben/beglaubigen) (%d) DSA und Elgamal (%d) Elgamal (nur verschlüsseln) (%d) RSA (nur verschlüsseln) (%d) RSA (Leistungsfähigkeit selber einstellbar) (%d) RSA (nur signieren/beglaubigen) (%d) RSA und RSA (voreingestellt) (0) Ich antworte nicht.%s (1) Ich habe es überhaupt nicht überprüft.%s (1) Unterschriften-Schlüssel (2) Verschlüsselungs-Schlüssel (2) Ich habe es flüchtig überprüft.%s (3) Authentisierungs-Schlüssel (3) Ich habe es sehr sorgfältig überprüft.%s neue Schlüsselwiderrufe: %lu %d = Nein, ihm traue ich NICHT %d = Weiß nicht so recht %d = Ich vertraue ihm vollständig %d = Ich vertraue ihm marginal %d = Ich vertraue ihm absolut Beglaubigen ist nicht möglich. "%s" m = Zurück zum Menü q = verlassen s = diesen Schlüssel überspringen geheime Schlüssel importiert: %lu (Hauptschlüssel-ID %s) (nicht-exportierbar) (unwiderrufbar) Haupt-Fingerabdruck = unveränderte geh. Schl.: %lu "%s" ist keine Schlüssel-ID: überspringe "%s" wurde bereits durch Schlüssel %s lokal beglaubigt "%s" wurde bereits durch Schlüssel %s beglaubigt # Liste der zugewiesenen Trustwerte, erzeugt am %s # ("gpg --import-ownertrust" um sie zu restaurieren) Noch %d Admin-PIN-Versuche, bis die Karte dauerhaft gesperrt ist %d falsche Beglaubigungen %d Schlüssel verarbeitet (%d Validity Zähler gelöscht) %d marginal-needed, %d complete-needed, %s Vertrauensmodell %d Beglaubigungen aufgrund von Fehlern nicht geprüft %d Beglaubigungen wegen fehlenden Schlüsseln nicht geprüft %d User-IDs ohne gültige Eigenbeglaubigung entdeckt %lu Schlüssel gepuffert (%lu Beglaubigungen) %lu Schlüssel bislang gepuffert (%lu Beglaubigungen) %lu Schlüssel bislang bearbeitet %s ... %s unterstützt Hilfsroutinenversion %d nicht %s arbeitet noch nicht mit %s zusammen %s verschlüsselte Daten %s verschlüsselter Sitzungsschlüssel %s Verschlüsselung wird verwendet %s ist der Neue %s ist der Unveränderte %s-Schlüssel können zwischen %u und %u Bit lang sein. %s-Schlüssellängen müssen im Bereich %u-%u sein %s zusammen mit %s ist nicht sinnvoll! %s kann nicht zusammen mit %s verwendet werden! %s Unterschrift, Hashmethode "%s" %s. %s/%s verschlüsselt für: %s %s/%s Unterschrift von: "%s" %s: Es gibt nur eine beschränkte Garantie, daß dieser Schlüssel wirklich dem angegebenen Besitzer gehört. %s: Es gibt keine Garantie, daß dieser Schlüssel wirklich dem angegebenen Besitzer gehört. %s: Verzeichnis existiert nicht! %s: Fehler beim Lesen eines freien Satzes: %s %s: Fehler beim Lesen des Versionsatzes: %s %s: Fehler beim Ändern des Versionsatzes: %s %s: Fehler beim Schreiben eines Verzeichnis-Satzes: %s %s: Fehler beim Schreiben des Versionsatzes: %s %s: konnte Satz nicht anhängen: %s %s: hashtable kann nicht erzeugt werden: %s %s: Fehler beim Erzeugen des Versionsatzes: %s%s: konnte einen Satz nicht Nullen: %s %s: invalid file version %d %s: ungültige 'Trust'-Datenbank %s: ungültige trust-db erzeugt %s: Schlüsselbund erstellt %s: keine trustdb Datei %s: übersprungen: %s %s: übersprungen: öffentlicher Schlüssel bereits vorhanden %s: übersprungen: öffentlicher Schlüssel ist abgeschaltet %s: trust-db erzeugt %s: unbekannte Dateinamenerweiterung %s: version record with recnum %lu %s:%d: mißbilligte Option "%s". %s:%d: ungültige "auto-key-locate"-Liste %s:%d: ungültige Export-Option. %s:%d: ungültige Import-Option %s:%d: ungültige Schlüsselserver-Option %s:%d: ungültige Listen-Option. %s:%d: ungültige Überprüfungs-Option. %u-Bit %s Schlüssel, ID %s, erzeugt %s(Keine Beschreibung angegeben) (Wahrscheinlich möchten Sie hier %d auswählen) (Dies ist ein "sensitiver" Widerrufsschlüssel) (empfindlich)(es sei denn, Sie geben den Schlüssel mittels Fingerprint an) (möglicherweise haben Sie das falsche Programm für diese Aufgabe benutzt) * Dem `sign'-Befehl darf ein `l' für nicht exportfähige Signaturen vorangestellt werden ("lsign"), ein `t' für 'Trust'-Unterschrift ("tsign"), ein `nr' für unwiderrufbare Unterschriften ("nrsign"), oder jede Kombination davon ("ltsign", "tnrsign", etc.). --clearsign [Dateiname]--decrypt [Dateiname]--edit-key User-ID [Befehle]--encrypt [Dateiname]--lsign-key User-ID--output funktioniert nicht bei diesem Befehl --sign --encrypt [Dateiname]--sign --symmetric [Dateiname]--sign [Dateiname]--sign-key User-ID--store [Dateiname]--symmetric --encrypt [Dateiname]--symmetric --sign --encrypt [Dateiname]--symmetric [Dateiname]-k[v][v][v][c] [User-ID] [Schlüsselbund]... dies ist ein Bug (Programmfehler) (%s:%d:%s) 1 falsche Beglaubigung 1 Beglaubigung wegen fehlendem Schlüssel nicht geprüft 1 Beglaubigung aufgrund von Fehler nicht geprüft Eine User-ID ohne gültige Eigenbeglaubigung entdeckt 10@ (Auf der "man"-Seite ist eine vollständige Liste aller Befehle und Optionen) @ Beispiele: -se -r Bob [Datei] Signieren und verschlüsseln für Benutzer Bob --clearsign [Datei] Eine Klartextsignatur erzeugen --detach-sign [Datei] Eine abgetrennte Signatur erzeugen --list-keys [Namen] Schlüssel anzeigen --fingerprint [Namen] "Fingerabdrücke" anzeigen @ Optionen: @Befehle: Ausgabe mit ASCII Hülle erzwungen Admin-Befehle sind erlaubt Admin-Befehle sind nicht erlaubt nur-Admin Befehl Geben Sie "ja" (oder nur "j") ein, um den Unterschlüssel zu erzeugen.Geben Sie "ja" (oder nur "j") ein, um diesen Unterschlüssel zu löschenGeben Sie "ja" ein, wenn Sie die Datei überschreiben möchtenGeben Sie "ja" (oder nur "j") ein, um diese User-ID zu LÖSCHEN. Alle Zertifikate werden dann auch weg sein!Geben Sie "ja" (oder nur "j") ein, um alle User-IDs zu beglaubigenGeben Sie "ja" oder "nein" einSind Sie wirklich sicher, daß Sie vorstehenden Schlüssel mit Ihrem Schlüssel "%s" (%s) beglaubigen wollen Wollen Sie ihn immer noch hinzufügen? (j/N) Wollen Sie ihn immer noch widerrufen? (j/N) Wollen Sie ihn immer noch beglaubigen? (j/N) Möchten Sie diesen Schlüssel wirklich als vorgesehenen Widerrufer festlegen? (j/N): Wollen Sie ihn wirklich löschen? (j/N) Wollen Sie ihn wirklich ersetzen? (j/N) Wollen Sie es wirklich benutzen? (j/N) AuthentisierungFALSCHE Unterschrift von "%s"CA-Fingerabdruck: Prüfsummenfehler; %06lx - %06lx Unterschrift kann nicht geprüft werden: %s Dieser Schlüssel kann nicht editiert werden: %s '%s' kann nicht geöffnet werden: %s AbbruchVorname des Kartenbesitzers:Familienname des Kartenbesitzers:Zertifikate führen zu einem letztlich vertrauenswürdigen Schlüssel: Zertif.Ändern: (N)ame, (K)ommentar, (E)-Mail oder (F)ertig/(B)eenden? Ändern: (N)ame, (K)ommentar, (E)-Mail oder (B)eenden? Ändern der Voreinstellung aller User-IDs (oder nur der ausgewählten) auf die aktuelle Liste der Voreinstellung. Die Zeitangaben aller betroffenen Eigenbeglaubigungen werden um eine Sekunde vorgestellt. Ändern des Verfallsdatums des Unterschlüssels. Ändern des Verfallsdatums des Hauptschlüssels. Verschlü.: Befehl benötigt einen Dateinamen als Argument Kommentar: Komprimierung: Ein vorgesehenes Widerrufszertifikat für diesen Schlüssel erzeugen? (j/N) Ein Widerrufszertifikat für diesen Schlüssel erzeugen? (j/N) Ein Widerrufszertifikat für diese Unterschrift erzeugen (j/N)Entscheidender bevorzugter SchlüsselserverEntscheidender Beglaubigungs-"Notation": Entscheidende Beglaubigungsrichtlinie: Derzeit erlaubte Vorgänge: Derzeitige Empfänger: DSA-Schlüssel %s benötigt einen mindestens %u Bit langen Hash DSA-Schlüssel %s verwendet einen unsicheren (%u Bit-) Hash Für DSA muß die Hashlänge ein Vielfaches von 8 Bit sein Diese korrekte Beglaubigung entfernen? (j/N/q)Diese ungültige Beglaubigung entfernen= (j/N/q)Diesen Schlüssel aus dem Schlüsselbund löschen? (j/N) Diese unbekannte Beglaubigung entfernen? (j/N/q)%d Beglaubigungen entfernt. %d Beglaubigungen entfernt. Abgetrennte Beglaubigungen. Digest: Anzeigen einer %s Foto-ID (Größe %ld) für Schlüssel %s (User-ID %d) Möchten Sie die ausgewählten Schlüssel wirklich entfernen? (j/N) Möchten Sie diesen Schlüssel wirklich entfernen? (j/N) Möchten Sie dies wirklich tun? (j/N) Möchten Sie diesen Schlüssel wirklich vollständig widerrufen? (j/N) Möchten Sie die ausgewählten Unterschlüssel wirklich widerrufen? (j/N) Möchten Sie diesen Schlüssel wirklich widerrufen? (j/N) Wollen Sie diesem Schlüssel wirklich uneingeschränkt vertrauen? (j/N) Soll eine neue Beglaubigung als Ersatz für die abgelaufene erstellt werden? (J/n) Soll sie zu einer voll exportierbaren Beglaubigung erhoben werden? (j/N) Soll sie zu einer OpenPGP Eigenbeglaubigung geändert werden? (j/N) Wollen Sie ihn immer noch wieder beglaubigen? (j/N) Soll Ihre Beglaubigung zur selben Zeit verfallen? (J/n) FEHLER: Email-Adresse: Verschl.Geben Sie die Admin-PIN ein: Dateiname mit JPEG für die Foto-ID eingeben: Geben Sie die neue Admin-PIN ein: Geben Sie die neue PIN ein: Geben Sie die PIN ein: Geben Sie eine optionale Beschreibung ein. Beenden mit einer leeren Zeile: Neuen Dateinamen eingebenEingabe von Nummern, Nächste (N) oder Abbrechen (Q) > Geben Sie die Passphrase ein Geben Sie die Passphrase ein: Geben Sie den Namen des Schlüsselinhabers einGeben Sie die neue Passphrase für diesen geheimen Schlüssel ein. Geben Sie die "Notation" ein: Geben Sie den benötigten Wert so an, wie er im Prompt erscheint. Es ist zwar möglich ein "ISO"-Datum (JJJJ-MM-DD) einzugeben, aber man erhält dann ggfs. keine brauchbaren Fehlermeldungen - stattdessen versucht der Rechner den Wert als Intervall (von-bis) zu deuten.Wählen Sie die gewünschte SchlüssellängeGeben Sie die User-ID dessen ein, dem Sie die Botschaft senden wollen.Geben sie die User-ID des designierten Widerrufers ein: Geben Sie die URL Ihres bevorzugten Schlüsselservers ein: Fehler beim Lesen der Sicherungskopie des Schlüssels von `%s': %s Fehler: Der zusammengesetzte Name ist zu lang (Grenze beträgt %d Zeichen). Fehler: Doppelte Leerzeichen sind nicht erlaubt. Fehler: Logindaten sind zu lang (Grenze beträgt %d Zeichen). Fehler: Nur reines ASCII ist derzeit erlaubt. Fehler: Geheime DO-Daten sind zu lang (Grenze beträgt %d Zeichen). Fehler: Das Zeichen "<" kann nicht benutzt werden. Fehler: Die Vertrauensdatenbank ist fehlerhaft Fehler: URL ist zu lang (Grenze beträgt %d Zeichen). Fehler: Ungültige Zeichen in der Einstellungs-Zeichenfolge Fehler: ungültig geformter Fingerabdruck. Fehler: Ungültige Länge der Einstellungs-Zeichenfolge. Fehler: ungültige Antwort. Verfallene Unterschrift von "%s"Eigenschaften: Datei '%s' existiert bereits. Geben Sie den Namen der Datei an, zu dem die abgetrennte Unterschrift gehörtAuf geht's - Botschaft eintippen ... Korrekte Unterschrift von "%s"Hash: Tip: Wählen Sie die User-IDs, die beglaubigt werden sollen Drücken Sie 'Eingabe' wenn fertig; oder drücken Sie 'c' um abzubrechen: Wie genau haben Sie überprüft, ob der Schlüssel, den Sie jetzt beglaubigen wollen, wirklich der o.g. Person gehört? Wenn Sie darauf keine Antwort wissen, geben Sie "0" ein. Wie sicher sind Sie, daß dieser Schlüssel wirklich dem angegebenen Besitzer gehört? Ich habe diesen Schlüssel flüchtig überprüft. Ich habe diesen Schlüssel sehr sorgfältig überprüft. Ich habe diesen Schlüssel überhaupt nicht überprüft. IDEA-Verschlüsselung nicht verfügbar; versucht wird stattdessen %s Falls dies nicht funktioniert, sehen Sie bitte im Handbuch nach Wenn Sie möchten, können Sie hier einen Text eingeben, der darlegt, warum Sie diesen Widerruf herausgeben. Der Text sollte möglichst knapp sein. Eine Leerzeile beendet die Eingabe. Wenn Sie diesen nicht vertrauenswürdigen Schlüssel trotzdem benutzen wollen, so antworten Sie mit "ja".Normalerweise ist es nicht gut, denselben Schlüssel zum unterschreiben und verschlüsseln zu nutzen. Dieses Verfahren sollte in speziellen Anwendungsgebieten benutzt werden. Bitte lassen Sie sich zuerst von einem Sicherheitsexperten beraten.Ungültiges Zeichen im Kommentar. Ungültiges Zeichen im Namen Ungültiger Befehl (versuchen Sie's mal mit "help") Ungültiger Schlüssel %s, gültig gemacht per --allow-non-selfsigned-uid Ungültige Passphrase; versuchen Sie es bitte noch einmalUngültige Auswahl. Ist dies richtig? (j/N) Ist das OK? (j/N) Ist dieses Bild richtig? (j/N) Es ist NICHT sicher, daß der Schlüssel zu dem in der User-ID Genannten gehört. Wenn Sie *wirklich* wissen, was Sie tun, können Sie die nächste Frage mit ja beantworten Sie müssen selbst entscheiden, welchen Wert Sie hier eintragen; dieser Wert wird niemals an eine dritte Seite weitergegeben. Wir brauchen diesen Wert, um das "Netz des Vertrauens" aufzubauen. Dieses hat nichts mit dem (implizit erzeugten) "Netz der Zertifikate" zu tun.Schlüssel %s ist bereits widerrufen Schlüssel erhältlich bei: Schlüssel verfällt nie Key verfällt am %s Schlüsselerzeugung abgebrochen. Schlüsselerzeugung fehlgeschlagen: %s Hinweis: Dieser Schlüssel ist nicht mehr sicherDer Schlüssel enthält nur "stub"- oder "on-card"-Schlüsselelemente- keine Passphrase ist zu ändern. Schlüssel wird nicht mehr benutztSchlüssel ist geschützt. Schlüssel wurde widerrufen.Schlüssel ist überholtWie lange bleibt der Schlüssel gültig? (0) Schlüssel ist nicht geändert worden, also ist kein Speichern nötig. SchlüsselbundKeyserver no-modifySpracheinstellungenLogindaten (Kontenname): Sicherung des Verschlüsselungsschlüssel außerhalb der Karte erstellen? (J/n) N um den Namen zu ändern. K um den Kommentar zu ändern. E um die Email-Adresse zu ändern. F um mit der Schlüsselerzeugung fortzusetzen. B um die Schlüsselerzeugung abbrechen.HINWEIS: %s ist in dieser Version nicht vorhanden Hinweis: %s ist nicht für den üblichen Gebrauch gedacht! Hinweis: Es kann nicht sichergestellt werden, daß die Karte die angeforderte Schlüssellange unterstützt. Falls die Schlüsselerzeugung fehlschlägt, sollten Sie in den Unterlagen zu Ihrer Karte nachsehen, welche Längen möglich sind. HINWEIS: Diese Funktion ist in %s nicht vorhanden Dieser Schlüssel ist nicht geschützt. Hinweis: Eine Schlüsselseriennr stimmt nicht mit derjenigen der Karte überein Hinweis: Sicherung des Kartenschlüssels wurde auf `%s' gespeichert HINWEIS: Unterschlüssel für v3-Schlüssel sind nicht OpenPGP-konform Hinweis: Schlüssel wurde widerrufenACHTUNG: Auf der Karte sind bereits Schlüssel gespeichert! Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden Hinweis: Alte voreingestellte Optionendatei '%s' wurde ignoriert Hinweis: Hauptschlüssel ist online und auf der Karte gespeichert Hinweis: Zweitschlüssel ist online und auf der Karte gespeichert Hinweis: geheimer Schlüssel %s verfällt am %s Hinweis: Der Absender verlangte Vertraulichkeit("for-your-eyes-only") Hinweis: Signaturschlüssel %s ist am %s verfallen Hinweis: Vom "simple S2K"-Modus (0) ist strikt abzuraten Notiz: Die "trustdb" ist nicht schreibbar Der Name darf nicht mit einer Ziffer beginnen. Der Name muß min. 5 Zeichen lang sein. Hierzu wird der geheime Schlüssel benötigt. NnKkEeFfBbKeine entsprechende Signatur im geheimen Schlüsselbund Keine Hilfe vorhanden.Keine Hilfe für '%s' vorhanden.Kein Grund angegebenKein Unterschlüssel mit Index %d Keine solche User-ID vorhanden. Es ist kein "trust value" zugewiesen für: Keine User-ID mit Hash %s Keine User-ID mit Index %d Diese Email-Adresse ist ungültig Nicht von Ihnen signiert. "Notationen": Bitte beachten Sie, daß dieser Schlüssel nicht zum Verschlüsseln benutzt werden kann. Sie können aber mit dem Befehl "--edit-key" einen Unterschlüssel für diesem Zweck erzeugen. Hinweise: Adresse des Unterzeichners `%s' passt nicht zum DNS-Eintrag Hinweis: Dieser Schlüssel wurde abgeschaltet. Hinweis: Dieser Schlüssel ist verfallen! Hinweis: Überprüfte Adresse des Unterzeichners ist `%s' Hinweis: Unterschriften basierend auf dem %s Algorithmus werden abgewiesen Nichts entfernt. Nichts zu beglaubigen für Schlüssel %s OpenPGP Karte Nr. %s erkannt OpenPGP Karte ist nicht vorhanden: %s Überschreiben (j/N)? "Owner trust" kann nicht gesetzt werden, wenn eine anwendereigene 'Trust'-Datenbank benutzt wird PIN-Callback meldete Fehler: %s PIN für CHV%d ist zu kurz; die Mindestlänge beträgt %d PIN wurde nicht richtig wiederholt; noch einmal versuchenBitte beseitigen Sie zuerst den Fehler Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen, Schlüssel anderer User korrekt zu prüfen (durch Vergleich mit Lichtbildausweisen, Vergleich der Fingerabdrücke aus unterschiedlichen Quellen ...)? Bitte keine Emailadressen als Namen oder Kommentar verwenden Geben Sie bitte eine Domain ein, um die Unterschrift einzuschränken, oder nur die Eingabetaste für keine Domain Geben Sie bitte einen neuen Dateinamen ein. Falls Sie nur die Eingabetaste betätigen, wird der (in Klammern angezeigte) Standarddateiname verwendet.Geben Sie - bei Bedarf - einen Kommentar einBitte geben Sie den Namen der Datendatei ein: Geben Sie bitte die Tiefe dieser "Trust"-Unterschrift ein. Eine Tiefe größer 1 erlaubt dem zu unterschreibenden Schlüssel Trust-Signatures für Sie zu machen. Bitte geben Sie die Passphrase ein. Dies ist ein geheimer Satz Bitte diesen potentiellen Sicherheitsmangel beseitigen Legen Sie die Karte ein und drücken Sie 'Eingabe'; drücken Sie 'c' um abzubrechen: Bitte beachten: Die Werkseinstellung der PINs sind PIN = `%s' Admin-PIN = `%s' Sie sollten sie mittels des Befehls --change-pin ändern Bitte beachten Sie, daß ohne einen Programmneustart die angezeigte Schlüsselgültigkeit nicht notwendigerweise korrekt ist. Bitte entfernen Sie die Auswahl von den geheimen Schlüsseln. Bitte entfernen Sie die Karte und legen stattdessen die Karte mit folgender Seriennummer ein: %.*s Um sicher zu gehen, daß Sie sich bei der Eingabe der Passphrase nicht vertippt haben, geben Sie diese bitte nochmal ein. Nur wenn beide Eingaben übereinstimmen, wird die Passphrase akzeptiert.Berichte über Programmfehler bitte in englisch an . Sinn- oder Schreibfehler in den deutschen Texten bitte an . Bitte wählen Sie höchstens einen Unterschlüssel aus. Bitte genau eine User-ID auswählen. Grund für den Widerruf: Bitte wählen Sie die Art des Schlüssel, der erzeugt werden soll: Bitte wählen Sie, welche Art von Schlüssel Sie möchten: Wählen Sie den Speicherort für den Schlüssel: Bitte wählen Sie, wie lange der Schlüssel gültig bleiben soll. 0 = Schlüssel verfällt nie = Schlüssel verfällt nach n Tagen w = Schlüssel verfällt nach n Wochen m = Schlüssel verfällt nach n Monaten y = Schlüssel verfällt nach n Jahren Bitte wählen Sie, wie lange die Beglaubigung gültig bleiben soll. 0 = Schlüssel verfällt nie = Schlüssel verfällt nach n Tagen w = Schlüssel verfällt nach n Wochen m = Schlüssel verfällt nach n Monaten y = Schlüssel verfällt nach n Jahren Bitte verwenden sie zunächst den Befehl "toggle" Zufall wird gesammelt. Bitte arbeiten Sie an etwas anderem, da so die Qualität der Zufallszahlen erhöht werden kann. Mögliche Vorgänge eines %s-Schlüssels: Bevorzugter Schlüsselserver:Haupt-Fingerabdruck =Geheime DO-Daten: Fortfahren (j/N)? Öff. Schlüssel: Öffentlicher Schlüssel ist abgeschaltet. Beenden ohne zu speichern? (j/N) Der RSA Modulus fehlt oder ist nicht %d Bits lang Die RSA Primzahl %s fehlt oder ist nicht %d Bits lang Der öffentliche Exponent fehlt oder ist zu groß (mehr als %d Bit) Ihr Name ("Vorname Nachname"): Wirklich ein Unterschrift-Widerrufszertifikat erzeugen? (j/N) Wirklich erzeugen? (j/N) Eigenbeglaubigung wirklich entfernen? (j/N)Den Hauptschlüssel wirklich verschieben? (j/N) Möchten Sie alle ausgewählten User-IDs wirklich entfernen? (j/N) Diese User-ID wirklich entfernen? (j/N) Möchten Sie wirklich alle ausgewählten User-IDs widerrufen? (j/N) Diese User-ID wirklich widerrufen? (j/N) Wirklich alle User-IDs beglaubigen? (j/N) Wirklich unterschreiben? (j/N) Möchten Sie die Voreinstellungen der ausgewählten User-IDs wirklich ändern? (j/N) Die Voreinstellungen wirklich ändern? (j/N) Grund für Widerruf: %s Geben Sie die Passphrase nochmal ein Geben Sie die Passphrase nochmal ein: Geben Sie die PIN nochmal ein: Vorhandenen Schlüssel ersetzen? (j/N) Vorhandene Schlüssel ersetzen? (j/N) Die verlangte Schlüssellänge beträgt %u Bit Der Rückstellcode ist zu kurz; die Mindestlänge beträgt %d Der Rückstellcode ist nicht oder nicht mehr vorhanden Widerrufzertifikat erzeugt. Widerrufszertifikat wurde erzeugt. Bitte speichern Sie es auf einem Medium, welches Sie wegschließen können; falls Mallory (ein Angreifer) Zugang zu diesem Zertifikat erhält, kann er Ihren Schlüssel unbrauchbar machen. Es wäre klug, dieses Widerrufszertifikat auch auszudrucken und sicher aufzubewahren, falls das ursprüngliche Medium nicht mehr lesbar ist. Aber Obacht: Das Drucksystem kann unter Umständen anderen Nutzern eine Kopie zugänglich machen. Änderungen speichern? (j/N) Geheimer Schlüssel ist vorhanden. Geheime Teile des Hauptschlüssels sind nicht vorhanden. Geheime Teile des Hauptschlüssels sind auf der Karte gespeichert. Wählen Sie das zu verwendende Verfahren. DSA (alias DSS) ist der "Digital Signature Algorithm" und kann nur für Unterschriften genutzt werden. Elgamal ist ein Verfahren nur für Verschlüsselung. RSA kann sowohl für Unterschriften als auch für Verschlüsselung genutzt werden. Der erste Schlüssel (Hauptschlüssel) muß immer ein Schlüssel sein, mit dem unterschrieben werden kann.Setze die Liste der Voreinstellungen auf: Geschlecht: (Männlich (M), Weiblich (F) oder Leerzeichen): Unterschr.Wirklich unterschreiben? (j/N) Signature verfällt nie Diese Unterschrift ist seit %s verfallen. Diese Unterschrift verfällt am %s. Unterschrift verfällt am %s Wie lange bleibt die Beglaubigung gültig? (%s) Unterschrift vom %s Unterschrift vom %s mittels %s-Schlüssel ID %s Beglaubigungs-"Notation": Beglaubigungsrichtlinie: UuVvAaQqUnterschlüssel %s ist bereits widerrufen Aufruf: gpg [Optionen] [Dateien] Signieren, prüfen, verschlüsseln, entschlüsseln. Die voreingestellte Operation ist abhängig von den Eingabedaten Aufruf: gpgv [Optionen] [Dateien] Überprüft Signaturen gegen bekannte vertrauenswürdige Schlüssel Die Karten wird nun umkonfiguriert um Schlüssel von %u Bit zu erzeugen Die minimale Trust-Ebene für diesen Schlüssel beträgt: %s Der Zufallsgenerator (RNG) ist lediglich ein "kludge", damit das Programms überhaupt läuft - es ist KEINESFALLS ein starker RNG! BENUTZEN SIE DIE DURCH DIESES PROGRAMM ERZEUGTEN DATEN NICHT! Die Eigenbeglaubigung von "%s" ist eine PGP 2.x artige Signatur. Diese Beglaubigung ist ungültig. Es ist sinnvoll sie aus Ihrem Schlüsselbund zu entfernen.Die Unterschrift wird als nicht-exportfähig markiert werden. Die Unterschrift wird als unwiderrufbar markiert werden. PGP 2.x-artige Schlüssel haben keine Voreinstellungen. Diese JPEG-Datei ist echt groß (%d Byte)! Dieser Befehl ist im %s-Modus nicht erlaubt. Dieser Befehl ist nur für Karten der Version 2 verfügbar. Dies ist ein privater Schlüssel! - Wirklich löschen? (j/N) Diese Beglaubigung bindet die User-ID an den Schlüssel. Normalerweise ist es nicht gut, solche Beglaubigungen zu entfernen. Um ehrlich zu sein: Es könnte dann sein, daß GnuPG diesen Schlüssel gar nicht mehr benutzen kann. Sie sollten diese Eigenbeglaubigung also nur dann entfernen, wenn sie aus irgendeinem Grund nicht gültig ist und eine zweite Beglaubigung verfügbar ist.Dies ist eine gültige Beglaubigung für den Schlüssel. Es ist normalerweise unnötig sie zu löschen. Sie ist möglicherweise sogar notwendig, um einen Trust-Weg zu diesem oder einem durch diesen Schlüssel beglaubigten Schlüssel herzustellen.Dieser Schlüssel gehört uns (da wir nämlich den geheimen Schlüssel dazu haben) Hinweis: Dieser Schlüssel ist abgeschaltetDieser Schlüssel ist verfallen!Dieser Schlüssel wird %s verfallen. Dieser Schlüssel ist nicht geschützt. Dieser Schlüssel könnte durch %s mit Schlüssel %s widerrufen worden seinDieser Schlüssel gehört wahrscheinlich dem angegebenen Besitzer Dieser Schlüssel wurde am %s von %s Schlüssel %s widerrufen Diese Beglaubigung kann nicht geprüft werden, da Sie den passenden Schlüssel nicht besitzen. Sie sollten die Löschung der Beglaubigung verschieben, bis sie wissen, welcher Schlüssel verwendet wurde. Denn vielleicht würde genau diese Beglaubigung den "Trust"-Weg komplettieren.Diese Unterschrift ist seit %s verfallen. Dies wird eine Eigenbeglaubigung sein. Dies würde den Schlüssel für PGP 2.x unbrauchbar machen Schlüssel soll widerrufen werden von: Um das Web-of-Trust aufzubauen muß GnuPG wissen, welchen Schlüsseln uneingeschränkt vertraut wird. Das sind üblicherweise die Schlüssel auf deren geheimen Schlüssel Sie Zugriff haben. Antworten Sie mit "yes" um diesen Schlüssel uneingeschränkt zu vertrauen Anzahl insgesamt bearbeiteter Schlüssel: %lu URL um den öffentlichen Schlüssel zu holen: nicht komprimiertUnbekannter Unterschriftentyp `%s' Unbekannter schwacher Hashalgorithmus `%s' Aufruf: gpg [Optionen] [Dateien] (-h für Hilfe)Aufruf: gpgv [Optionen] [Dateien] (-h für Hilfe)Diesen Schlüssel trotzdem benutzen? (j/N) User-ID "%s" bereits verkleinert: %s User-ID "%s" ist abgelaufen.User-ID "%s" ist nicht eigenbeglaubigt.User-ID "%s" ist widerrufen.User-ID "%s" ist unterschreibbar.User-ID "%s": %d Signatur entfernt User-ID "%s": %d Signaturen entfernt User-ID "%s": bereits sauber User-ID "%s": bereits minimiert User-ID ist nicht mehr gültigWARNUNG: WARNUNG: "%s" ist ein nicht ratsamer Befehl - verwenden Sie ihn nicht. WARNUNG: "%s" ist eine mißbilligte Option. WARNUNG: %s ersetzt %s Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden. WARNUNG: Die Verwendung von Elgamal sign+encrypt Schlüsseln ist nicht ratsam WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen eines vorgesehenen Widerrufers könnte bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen. WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID könnte bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen. WARNUNG: Dieser Schlüssel wurde vom vorgesehen Widerrufer widerrufen! WARNUNG: Dieser Schlüssel wurde von seinem Besitzer widerrufen! WARNUNG: Dieser Schlüssel trägt keine vertrauenswürdige Signatur! WARNUNG: Dieser Schlüssel ist nicht durch hinreichend vertrauenswürdige Signaturen zertifiziert! WARNUNG: Dieser Unterschlüssel wurde von seinem Besitzer widerrufen! WARNUNG: Ein Schlüssel ohne gesichertes Vertrauen wird benutzt! WARNUNG: Wir haben KEIN Vertrauen zu diesem Schlüssel! WARNUNG: Unsicherer Schlüssel entdeckt - bitte Passphrase nochmals wechseln. WARNUNG: Ihr Unterschlüssel zum Verschlüsseln wird bald verfallen. WARNUNG: '%s' ist eine leere Datei. WARNUNG: Eine User-ID-Unterschrift datiert mit %d Sekunden aus der Zukunft WARNUNG: Einen Schlüssel als vorgesehenen Widerrufer zu deklarieren, kann nicht rückgangig gemacht werden! WARNUNG: Das Verschlüsselungsverfahren %s wurde nicht in den Empfängereinstellungen gefunden WARNUNG: Die Verwendung des Hashverfahrens %s ist nicht ratsam Warnung: Verschlüsselte Botschaft ist manipuliert worden! WARNUNG: Erzwungenes Kompressionsverfahren %s (%d) verletzt die Empfängervoreinstellungen. WARNUNG: Erzwingen des Hashverfahrens %s (%d) verstößt gegen die Empfängervoreinstellungen WARNUNG: Erzwungene Verwendung des symmetrischen Verschlüsselungsverfahren %s (%d) verletzt die Empfängervoreinstellungen WARNUNG: Falsche Größe der 'random_seed'-Datei - sie wird nicht verwendet WARNUNG: Schlüssel %s hat Einstellungen zu nicht verfügbaren WARNUNG: Schlüssel %s ist u.U. widerrufen: hole Widerrufschlüssel %s WARNUNG: Schlüssel %s ist u.U. widerrufen: Widerrufschlüssel %s ist nicht vorhanden WARNUNG: Die Schlüsselserver-Handhabungsroutine stammt von einer anderen GnuPG-Version (%s) WARNUNG: Schlüsselserver-Option `%s' wird auf dieser Plattform nicht verwendet Warnung: Botschaft wurde mit einem unsicheren Schlüssel verschlüsselt. WARNUNG: Botschaft wurde nicht integritätsgeschützt (integrity protected) WARNUNG: Mehr als ein Klartext erkannt WARNUNG: Mehrfache Signaturen erkannt. Es wird nur die erste geprüft. WARNUNG: Keine User-ID ist als primär markiert. Dieser Befehl kann dazu führen, daß eine andere User-ID als primär angesehen wird. "WARNUNG: Keine abgetrennte Signatur; die Datei '%s' wurde NICHT überprüft! WARNUNG: Nichts exportiert WARNUNG: Optionen in `%s' sind während dieses Laufes noch nicht wirksam WARNUNG: Möglicherweise unsicherer symmetrisch verschlüsselter Sitzungsschlüssel WARNUNG: Programm könnte eine core-dump-Datei schreiben! WARNUNG: Empfänger (-r) angegeben ohne Verwendung von Public-Key-Verfahren WARNUNG: Der geheime Schlüssel %s hat keine einfache SK-Prüfsumme WARNUNG: Widersprechende Hashverfahren in der signierten Nachricht WARNUNG: Signaturunterschlüssel %s hat eine ungültige Rücksignatur WARNUNG: Signaturunterschlüssel %s hat keine Rücksignatur WARNUNG: Die Unterschrift wird nicht als nicht-exportierbar markiert werden. WARNUNG: Die Unterschrift wird nicht als unwiderrufbar markiert werden. WARNUNG: Dieser Schlüssel ist u.U. widerrufen: Widerrufschlüssel ist nicht vorhanden WARNUNG: "Notation" kann nicht %%-erweitert werden (zu groß). Verwende "unerweiterte". WARNUNG: Richtlinien-URL kann nicht %%-erweitert werden (zu groß). Verwende "unerweiterte". WARNUNG: URL für bevorzugten Schlüsselserver kann nicht %%-erweitert werden (zu groß). Verwende "unerweiterte". WARNUNG: die URI %s kann nicht geholt werden: %s WARNUNG: die URI %s kann nicht analysiert werden WARNUNG: Schlüssel %s kann per %s nicht aktualisiert werden: %s WARNUNG: Temporäres Verzeichnis `%s' kann nicht entfernt werden: %s WARNUNG: die temporäre Datei (%s) `%s' konnte nicht entfernt werden: %s WARNUNG: Unsicheres Besitzverhältnis des umgebenden Verzeichnisses der Konfigurationsdatei `%s' WARNUNG: Unsicheres Besitzverhältnis des umgebenden Verzeichnisses für Home-Verzeichnis `%s' WARNUNG: Unsichere Zugriffsrechte des umgebenden Verzeichnisses der Konfigurationsdatei `%s' WARNUNG: Unsichere Zugriffsrechte des umgebenden Verzeichnisses des Home-Verzeichnisses `%s' WARNUNG: Unsicheres Besitzverhältnis der Konfigurationsdatei `%s' WARNUNG: Unsicheres Besitzverhältnis des Home-Verzeichnis `%s' WARNUNG: Unsichere Zugriffsrechte der Konfigurationsdatei `%s' WARNUNG: Unsichere Zugriffsrechte des Home-Verzeichnis `%s' WARNING: Verwendung des experimentellen Verschlüsselungsverfahren %s WARNUNG: Verwendung des experimentellen Hashverfahrens %s WARNUNG: Verwendung des experimentellen Public-Key-Verfahrens %s WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden. WARNUNG: Der Zufallsgenerator erzeugt keine echten Zufallszahlen! Wir müssen eine ganze Menge Zufallswerte erzeugen. Sie können dies unterstützen, indem Sie z.B. in einem anderen Fenster/Konsole irgendetwas tippen, die Maus verwenden oder irgendwelche anderen Programme benutzen. Welche Länge wünschen Sie für den Authentifizierungsschlüssel? (%u) Welche Länge wünschen Sie für den Verschlüsselungsschlüssel? (%u) Welche Länge wünschen Sie für den Signaturschlüssel? (%u) Welche Länge wünschen Sie für den Unterschlüssel? (%u) Welche Schlüssellänge wünschen Sie? (%u) Wenn Sie die User-ID eines Schlüssels beglaubigen wollen, sollten Sie zunächst sicherstellen, daß der Schlüssel demjenigen gehört, der in der User-ID genannt ist. Für Dritte ist es hilfreich zu wissen, wie gut diese Zuordnung überprüft wurde. "0" zeigt, daß Sie keine bestimmte Aussage über die Sorgfalt der Schlüsselzuordnung machen. "1" Sie glauben, daß der Schlüssel der benannten Person gehört, aber Sie konnten oder nahmen die Überpüfung überhaupt nicht vor. Dies ist hilfreich für eine "persona"-Überprüfung, wobei man den Schlüssel eines Pseudonym-Trägers beglaubigt "2" Sie nahmen eine flüchtige Überprüfung vor. Das heißt Sie haben z.B. den Schlüsselfingerabdruck kontrolliert und die User-ID des Schlüssels anhand des Fotos geprüft. "3" Sie haben eine ausführlich Kontrolle des Schlüssels vorgenommen. Das kann z.B. die Kontrolle des Schlüsselfingerabdrucks mit dem Schlüsselinhaber persönlich vorgenommen haben; daß Sie die User-ID des Schlüssel anhand einer schwer zu fälschenden Urkunde mit Foto (wie z.B. einem Paß) abgeglichen haben und schließlich per Email-Verkehr die Email-Adresse als zum Schlüsselbesitzer gehörig erkannt haben. Beachten Sie, daß diese Beispiele für die Antworten 2 und 3 *nur* Beispiele sind. Schlußendlich ist es Ihre Sache, was Sie unter "flüchtig" oder "ausführlich" verstehen, wenn Sie Schlüssel Dritter beglaubigen. Wenn Sie nicht wissen, wie Sie antworten sollen, wählen Sie "0".Es werden nun folgende Beglaubigungen entfernt: Sie benutzen den Zeichensatz `%s' Sie können das Verfallsdatum eines v3-Schlüssels nicht ändern Die letzte User-ID kann nicht gelöscht werden! Sie haben keine User-ID angegeben (Sie können die Option "-r" verwenden). Sie wollen keine Passphrase - dies ist *nicht* zu empfehlen! Sie möchten keine Passphrase - Dies ist *nicht* zu empfehlen! Es ist trotzdem möglich. Sie können Ihre Passphrase jederzeit ändern, indem sie dieses Programm mit dem Befehl "--edit-key" aufrufen. Sie haben folgende User-IDs des Schlüssels %s beglaubigt: Sie können einem PGP2-artigen Schlüssel keine vorgesehenen Widerrufer hinzufügen. Sie können einem PGP2-artigen Schlüssel keine Foto-ID hinzufügen. Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln unterschrieben werden Sie können versuchen die Vertrauensdatenbank durch folgende Befehle wiederherzustellen: Bitte erwägen Sie, dessen Verfallsdatum auch zu ändern. Zumindestens ein Schlüssel muß ausgewählt werden. Zumindestens eine User-ID muß ausgewählt werden. Sie müssen genau einen Schlüssel auswählen. Sie benötigen eine Passphrase, um den geheimen Schlüssel zu schützen. Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: "%s" Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: "%.*s" %u-bit %s Schlüssel, ID %s, erzeugt %s%s Sie haben diese User-ID gewählt: "%s" Sie sollten einen Grund für die Zertifizierung angeben. Je nach Zusammenhang können Sie aus dieser Liste auswählen: "Schlüssel wurde kompromittiert" Falls Sie Grund zu der Annahme haben, daß nicht berechtigte Personen Zugriff zu Ihrem geheimen Schlüssel hatten "Schlüssel ist überholt" Falls Sie diesen Schlüssel durch einem neuen ersetzt haben. "Schlüssel wird nicht mehr benutzt" Falls Sie diesen Schlüssel zurückgezogen haben. "User-ID ist nicht mehr gültig" Um bekanntzugeben, daß die User-ID nicht mehr benutzt werden soll. So weist man normalerweise auf eine ungültige Emailadresse hin. Ihre derzeitige Beglaubigung von "%s" ist abgelaufen. Die derzeitige Beglaubigung von "%s" ist nur für diesen Rechner gültig. Ihre Auswahl? Ihre Auswahl? Ihre Auswahl? ('?' für weitere Informationen): Ihr Rechner kann Daten jenseits des Jahres 2038 nicht anzeigen. Trotzdem werden Daten bis 2106 korrekt verarbeitet. [ vollst.][ undef.][verfall.][widerrufen][ unbek.][User-ID nicht gefunden][Dateiname][marginal][nicht gesetzt][Widerruf][Eigenbeglaubigung][ uneing.][ungewiß] `%s' ist bereits komprimiert `%s' ist keine JPEG-Datei '%s' ist keine normale Datei - sie bleibt unbeachtet `%s' ist kein gültiger Zeichensatz '%s' ist keine gültige lange Schlüssel-ID `%s' ist kein gültiges Unterschriftablaufdatum Ein ungeschützter Unterschlüssel wird exportiert werden Zugriff auf Admin-Befehle ist nicht eingerichtet Vorgang `%s' wird vom Schlüsselserverschema `%s' nicht unterstützt der Smartcard einen Schlüssel hinzufügenEine Foto-ID hinzufügenEinen Widerrufschlüssel hinzufügeneinen Unterschlüssel hinzufügenEine User-ID hinzufügenMehrdeutige Option '%s' Ungenannter Empfänger; Versuch mit geheimen Schlüssel %s ... ASCII-Hülle: ASCII-Hülle: %s vermutlich %s-verschlüsselte Daten Vermutlich eine FALSCHE Unterschrift von Schlüssel %s, wegen unbekanntem "critical bit" die unterzeichneten Daten sind wohl in '%s' Schlüssel für die Unterschriftenprüfung automatisch holen`%s' automatisch via %s geholt Falsche MPIfehlerhafter URIFalsches ZertifikatFalscher SchlüsselFalsche PassphraseFalscher öffentlicher SchlüsselFalscher geheimer SchlüsselFalsche UnterschriftEtwas weniger InfosBinäre"build_packet" fehlgeschlagen: %s cCPuffern des Schlüsselbundes `%s' Kann auf %s nicht zugreifen - ungültige OpenPGP-Karte? kann aus `%s' nicht zugreifen: %s kann '%s' nicht schließen: %s Verbindung zu '%s' kann nicht aufgebaut werden: %s '%s' kann nicht erzeugt werden: %s Sicherungsdatei '%s' kann nicht erzeugt werden: %s Verzeichnis `%s' kann nicht erzeugt werden: %s Datei `%s' konnte nicht gesperrt werden core-dump-Dateierzeugung kann nicht abgeschaltet werden: %s Dies kann im Batchmodus nicht durchgeführt werden. dies kann im Batchmodus ohne "--yes" nicht durchgeführt werden Eine Primzahl mit pbits=%u und qbits=%u kann nicht erzeugt werden Eine Primzahl mit weniger als %d Bits kann nicht erzeugt werden dieses Public-Key Verfahren %d kann nicht benutzt werden Textzeilen länger als %d Zeichen können nicht benutzt werden diese mehrdeutige Unterschriftdaten können nicht bearbeitet werden '%s' kann nicht gesperrt werden '%s' kann nicht gesperrt werden: %s '%s' kann nicht geöffnet werden '%s' kann nicht geöffnet werden: %s kann signierte Datei '%s' nicht öffnen. Der Schlüsselbund kann nicht geöffnet werdenPassphrase kann im Batchmodus nicht abgefragt werden '%s' ist unlesbar: %s Status von '%s' ist nicht feststellbar: %s Aufgrund des S2K-Modus kann ein symmetrisches ESK Paket nicht benutzt werden kann '%s' nicht schreiben: %s abgebrochenAbbruch durch Benutzer abbrechen|abbrechenEin PGP 2.x-artiger Schlüssel kann nicht als vorgesehener Widerrufer eingetragen werden Trotz %d-fachen Versuches konnte die Erzeugung eines unsicheren Schlüssels für sym. Verschlüsselung nicht vermieden werden! Die Hashmethode %s wird von der Karte nicht unterstützt Karte ist dauerhaft gesperrt! Kartenleser ist nicht vorhanden Kartennummer:Schlüssel-holen-URL ändernÄndern des CA-FingerabdrucksPIN einer Karte ändernKartenbesitzernamen ändernÄndern des Geschlechts des KartenbesitzersDaten auf einer Karte änderndas Verfallsdatum des Schlüssel oder ausgewählter Unterschlüssels ändernÄndern der SpracheinstellungenÄndern der LogindatenDen "Owner trust" ändernDie Passphrase ändernSignaturen prüfenPrüfung der erstellten Unterschrift ist fehlgeschlagen: %s "Trust-DB" wird überprüft Prüfsummen-FehlerVerschlüsselungsverfahren %d%s ist unbekannt oder abgeschaltet Doppelpunkt fehltunbrauchbare User-IDs verkleinern und alle Unterschriften aus dem Schlüssel entfernenunbrauchbare User-IDs verkleinern und unbrauchbare Unterschriften aus dem Schlüssel entfernencompletes-needed müssen größer als 0 sein Widersprüchliche Befehle Schlüsselserver-URL konnte nicht analysiert werden beim Import eines geheimen Schlüssels einen öffentliche Schlüssel erzeugenAusgabe mit ASCII-Hülle versehenerzeugt: %sErzeugungsdatum fehlt Daten wurden nicht gespeichert; verwenden Sie dafür die Option "--output" Entfernen der ASCII-Hülle ist fehlgeschlagen: %s Daten entschlüsseln (Voreinstellung)Entschlüsselung fehlgeschlagen: %s Entschlüsselung erfolgreich ausgewählte Unterschlüssel entfernenausgewählte User-IDs entfernenBeglaubigungen der ausgewählten User-IDs entfernenlöschen des Schlüsselblocks fehlgeschlagen: %s Tiefe: %d gültig: %3d unterschrieben: %3d Vertrauen: %d-, %dq, %dn, %dm, %df, %du Verzeichnis `%s' erzeugt Schlüssel abschaltenabgeschaltetAnzeigen der Foto-ID in den SchlüssellistenZeige die Foto-ID während der Unterschriftenprüfungdie "Owner trust" Werte beim Import nicht löschenTemporäre Dateien nach Nutzung nicht löschenKeine wirklichen Änderungen durchführenändern Sie die "Trust"-Datenbank nach dem Import nichtwerte das Vertrauen zu Unterschriften durch gültige PKA-Daten aufSchlüssel anschaltenAnbringen der ASCII-Hülle ist fehlgeschlagen: %s Daten verschlüsselnVerschlüsselt mit %lu Passphrases verschlüsselt mit %s Schlüssel, ID %s verschlüsselt mit %u-Bit %s Schlüssel, ID %s, erzeugt %s Verschlüsselt mit einer Passphrase Mit unbekanntem Verfahren verschlüsselt %d Verschlüsseln einer Botschaft benötigt im --pgp2-Modus die IDEA-Verschlüsselung Daten symmetrisch verschlüsselnFehler beim Zuteilen genügenden Speichers: %s Fehler bem Ändern der Länge des Schlüssels %d auf %u Bits: %s Fehler beim Erstellen von `%s': %s Fehler beim Erzeugen des Schlüsselbundes `%s': %s Fehler beim Erzeugen der Passphrase: %s Fehler beim Suchen des "Trust records" in `%s': %s Fehler beim Holen der aktuellen Schlüsselinfo: %s Fehler beim Abfragen einer neuen PIN: %s Fehler in `%s': %s Fehler in der Nachsatzzeile Fehler beim Lesen von `%s': %s Fehler beim Lesen der Anwendungsdaten Fehler beim Lesen des Fingerabdrucks DO Fehler beim Lesen des Schlüsselblocks: %s Fehler beim Lesen des geheimen Schlüsselblocks "%s": %s Fehler beim Holen des CHV-Status' von der Karte Fehler beim Schreiben von `%s': %s Fehler beim Schreiben des Schlüssels auf die Karte: %s Fehler beim Schreiben des Schlüsselbundes `%s': %s Fehler beim Schreiben des öff. Schlüsselbundes `%s': %s Fehler beim Schreiben des geheimen Schlüsselbundes `%s': %s Existierender Schlüssel wird ersetzt werden verfallenverfallen: %sverfällt: %sExportiere Attribute von User-IDs (i.A. Foto-IDs)Schlüssel exportierenSchlüssel zu einem Schlü.server exportierenExportiere Widerrufsschlüssel die als "sensitiv" markiert sindExportiere auch Unterschriften die als nicht exportfähig markiert sindExportieren geheimer Schlüssel ist nicht erlaubt Externe Schlüsselserveraufrufe werden in diesem "Build" nicht unterstützt Ausführen von externen Programmen ist ausgeschaltet, da die Dateirechte nicht sicher sind Die Trust-DB kann nicht initialisiert werden: %s Schlüsselbund-Cache konnte nicht neu erzeugt werden: %s Das Erzeugungsdatum konnte nicht gespeichert werden: %s Der Fingerabdruck kann nicht gespeichert werden: %s Speichern des Schlüssels fehlgeschlagen: %s Entfernen des Schutzes für des Unterschlüssel fehlgeschlagen: %s Die Standard-PIN konnte für %s nicht benutzt werden: %s - sie wird vorläufig ausgeschaltet weiblichHolen des Schlüssels mittels der URL auf der KarteFehler beim Schließen der DateiFehler beim Erzeugen der DateiFehler beim Löschen einer DateiDatei existiert bereitsFehler beim Öffnen der DateiDateilesefehlerFehler beim Umbenennen einer DateiDateischreibfehlerDer Fingerabdruck auf der Karte entspricht nicht dem angeforderten. User-ID als Haupt-User-ID kennzeichnenzwingendErzwungene Verwendung des symmetrischen Verschlüsselungsverfahren %s (%d) verletzt die Empfängervoreinstellungen fstat von `%s' schlug fehl in %s: %s fstat(%d) schlug fehl in %s: %s vollständigAllgemeiner FehlerPGP 2.x-kompatibele Botschaften erzeugenEin neues Schlüsselpaar erzeugenEin Schlüsselwiderruf-Zertifikat erzeugenneue Schlüssel erzeugenSchlüsselerzeugung fehlgeschlagen neue Schlüssel werden erzeugt Die mißbilligte 16-bit Prüfsumme wird zum Schutz des geheimen Schlüssels benutzt GPG-Agent ist in dieser Sitzung nicht vorhanden GPG-Agent-Protokoll-Version %d wird nicht unterstützt gpg/card> Die im Schlüssel enthaltenen PKA-Daten beim Schlüsselholen beachtenDie im Schlüssel enthaltene bevorzugte URL für Schlüsselserver beachteniImMqQsSSchlüssel von einem Schlü.server importierenImportiere Signaturen, die als nicht exportfähig markiert sindSchlüssel importieren/kombinierenImportieren geheimer Schlüssel ist nicht erlaubt Widerrufene Schlüssel in den Suchergebnissen aufführenUnterschlüssel in der Suche über Schlüssel-IDs aufführenEingabezeile %u ist zu lang oder es fehlt ein LF Eingabezeile ist länger als %d Zeichen ungültigungültiger "simple S2K"-Modus; Wert muß 0, 1 oder 3 sein Ungültiges ArgumentUngültige ASCII-HülleUngültige ASCII-Hülleungültige ASCII-Hülle: Zeile ist länger als %d Zeichen ungültige "auto-key-locate"-Liste Ungültige Klartextsignatur-Einleitung Ungültige mit Bindestrich "escapte" Zeile: ungültige Standard-Voreinstellungen ungültiger "default-cert-level"; Wert muß 0, 1, 2 oder 3 sein Ungültige Export-Option ungültiger FingerabdruckUngültiges Hashverfahren '%s' Ungültige Import-Option Ungültiges Feld `%s' in der Voreinstellungszeichenkette Ungültiger SchlüsselbundUngültige Schlüsselserver-Option Ungültiges Schlüsselserverprotokoll (wir %d!=Handhabungsroutine %d) Ungültige Listen-Option ungültiger "min-cert-level"; Wert muß 0, 1, 2 oder 3 sein Ungültiges PaketUngültige Passphraseungültige private Verschlüsselungsvoreinstellungen ungültige private Komprimierungsvoreinstellungen ungültige private Hashvoreinstellungen Ungültiges "radix64" Zeichen %02x übersprungen ungültiges root-Paket in proc_tree() entdeckt Ungültige Struktur der OpenPGP-Karte (DO 0x93) Ungültiger Wert. Ungültige Überprüfungs-Option es ist extrem empfehlenswert Ihre Einstellungen zu ändern und Schlüssel "%s" wurde auf dem Schlüsselserver nicht gefunden Schlüssel "%s" nicht gefunden: %s Schlüssel %s hat keine User-IDs Schlüssel %s ist als uneingeschränkt vertrauenswürdig gekennzeichnet Schlüssel %s tritt mehr als einmal in der "trustdb" auf Schlüssel %s wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder Uhrenproblem) Schlüssel %s wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder Uhrenproblem) Schlüssel %s: "%s" %d neue Signaturen Schlüssel %s: "%s" %d neue Unterschlüssel Schlüssel %s: "%s" %d neue User-IDs Schlüssel %s: "%s" %d Signaturen bereinigt Schlüssel %s: "%s" %d Signaturen bereinigt Schlüssel %s: "%s" %d User-ID bereinigt Schlüssel %s: "%s" %d User-IDs bereinigt Schlüssel %s: "%s" 1 neue Signatur Schlüssel %s: "%s" 1 neuer Unterschlüssel Schlüssel %s: "%s" 1 neue User-ID Schlüssel %s: "%s" nicht geändert Schlüssel %s: "%s" Widerrufzertifikat hinzugefügt Schlüssel %s: "%s" Widerrufzertifikat importiert Schlüssel "%s": %s Schlüssel %s: PGP 2.x-artiger Schlüssel - übersprungen Schlüssel %s: PKS Unterschlüsseldefekt repariert Schlüssel %s: Als vertrauenswürdiger Schlüssel akzeptiert Schlüssel %s: Nicht eigenbeglaubigte User-ID `%s' übernommen Schlüssel %s: Ist bereits im geheimen Schlüsselbund Schlüssel %s: der originale Schlüsselblock wurde nicht gefunden: %s Schlüssel %s: Lesefehler im originalen Schlüsselblock: %s Schlüssel %s: "direct-key"-Signaturen hinzugefügt Schlüssel %s: Stimmt nicht mit unserer Kopie überein Schlüssel %s: Doppelte User-ID entdeckt - zusammengeführt Schlüssel %s: Ungültige "direct-key"-Signatur Schlüssel %s: Ungültiges Widerrufzertifikat: %s - zurückgewiesen Schlüssel %s: Ungültiges Widerrufzertifikat: %s - übersprungen Schlüssel %s: Ungültige Eigenbeglaubigung für User-ID "%s" Schlüssel %s: Ungültige Unterschlüssel-Anbindung Schlüssel %s: Ungültiger Unterschlüsselwiderruf Schlüssel %s: Schlüsselmaterial ist auf einer Karte - übersprungen Schlüssel %s: neuer Schlüssel - übersprungen Schlüssel %s: Kein öffentlicher Schlüssel - der Schlüsselwiderruf kann nicht angebracht werden Schlüssel %s: kein öffentlicher Schlüssel für den vertrauenswürdigen Schlüssel - übersprungen Schlüssel %s: Kein Unterschlüssel für die Unterschlüsselanbindung Schlüssel %s: Kein Unterschlüssel für Schlüsselwiderruf Schlüssel %s: Kein Unterschlüssel für die Unterschlüsselanbindungs-Beglaubigung Schlüssel %s: Kein Unterschlüssel für die Unterschlüsselwiderruf-Beglaubigung Schlüssel %s: Keine User-ID Schlüssel %s: Keine User-ID für Signatur Schlüssel %s: Keine gültigen User-IDs Schlüssel %s: Nicht exportfähige Unterschrift (Klasse %02x) - übersprungen Schlüssel %s: ungeschützt - übersprungen Schlüssel %s: Öffentlicher Schlüssel "%s" importiert Schlüssel %s: Öffentlicher Schlüssel nicht gefunden: %s Schlüssel %s: Mehrfache Unterschlüssel-Anbindung entfernt Schlüssel %s: Mehrfacher Unterschlüsselwiderruf entfernt Schlüssel %s: Widerrufzertifikat an falschem Platz - übersprungen Schlüssel %s: geheimer Schlüssel importiert Schlüssel %s: geheimer Schlüssel nicht gefunden: %s Schlüssel %s: geheimer Schlüssel mit ungültiger Verschlüsselung %d - übersprungen Schlüssel %s: geheimer Schlüssel ohne öffentlichen Schlüssel - übersprungen Schlüssel %s: Unterschlüssel übersprungen Schlüssel %s: User-ID übersprungen "%s" Schlüssel %s: Unterschlüssel-Widerrufzertifikat an falschem Platz - übersprungen Schlüssel %s: unerwartete Unterschriftenklasse (0x%02x) - übersprungen Schlüssel %s: Nicht unterstütztes Public-Key-Verfahren Schlüssel %s: Nicht unterstütztes Public-Key-Verfahren für User-ID "%s" Schlüssel existiert bereits Schlüsselexport fehlgeschlagen: %s Schlüsselerzeugung abgeschlossen (%d Sekunden) Der Schlüssel wurde %lu Sekunde in der Zukunft erzeugt (Zeitreise oder Uhren stimmen nicht überein) Der Schlüssel wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder Uhren stimmen nicht überein) Schlüssel ist nicht als unsicher gekennzeichnet - er ist nur mit einem echten Zufallsgenerator verwendbar Schlüssel wurde auf dem Schlüsselserver nicht gefunden Schlüsseloperation nicht möglich: %s Schlüsselblockhilfsmittel`%s': %s Schlüsselbund `%s' erstellt Schlüsselserver-Datenübertragunsfehler: %s Schlüsselserver sendete VERSION nicht Schlüsselserverfehlerinterner Fehler Schlüsselserver Empfangen vom Schlüsselserver fehlgeschlagen: %s Refresh vom Schlüsselserver fehlgeschlagen: %s Suche auf dem Schlüsselserver fehlgeschlagen: %s Senden an Schlüsselserver fehlgeschlagen: %s Schlüsselserver-Zeitüberschreitung Ungültige Schlüssellänge; %u Bit werden verwendet Schlüssellänge auf %u Bit aufgerundet Zeile ist zu langAlle vorhandenen Daten auflistenSignaturen der Schlüssel auflisten und prüfenSchlüssel und User-IDs auflistenListe der SchlüsselListe der Schlüssel und ihrer "Fingerabdrücke"Liste der Schlüssel und ihrer SignaturenListe der Voreinstellungen (für Experten)Liste der Voreinstellungen (ausführlich)Liste der geheimen SchlüsselEine abgetrennte Unterschrift erzeugendifferierende Zeitangaben sind kein Fehler"make_keysig_packet" fehlgeschlagen: %s männlichFalsch aufgebaute Prüfsumme fehlerhaft aufgebaute GPG_AGENT_INFO - Umgebungsvariable Ungünstig aufgebaute User-IDmarginalmarginals-needed müssen größer als 1 sein max-cert-depth muß im Bereich 1 bis 255 liegen Menü für Ändern oder Entsperren der PINeine Sicherungskopie des Schlüssels auf die Smartcard schiebeneinen Schlüssel auf die Smartcard schiebenschiebe eine Beglaubigung an die richtige Stelle nNverschachtelte Klartextunterschriften Netzwerkfehlerniemalsniemals Neue Konfigurationsdatei `%s' erstellt nächste "Trust-DB"-Pflichtüberprüfung am %s neinKein '='-Zeichen in der Gruppendefinition gefunden `%s' keine Kartekein zugehöriger öffentlicher Schlüssel: %s keine DatenKein voreingestellter geheimer Schlüsselbund: %s Kein Modul zum sammeln von Entropie vorhanden Keine Handhabungsroutine für Schlüsselserverschema `%s' Kein Schlüsselserver-Vorgang Kein Schlüsselserver bekannt (Option --keyserver verwenden) "Trust-DB"-Überprüfung nicht nötig "Trust-DB"-Überprüfung ist beim `%s'-Vertrauensmodell nicht nötig "Trust-DB"-Änderung ist beim `%s'-Vertrauensmodell nicht nötig Es ist kein Bildbetrachter gesetzt Ausführen von externen Programmen wird nicht unterstützt keine Widerrufsschlüssel für "%s" gefunden Kein geheimer Schlüssel Kein privater Unterschlüssel zum öffentlichen Unterschlüssel %s - ignoriert Keine Unterschrift gefunden keine unterschriebene Daten Keine solche User-IDkeine uneingeschränkt vertrauenswürdigen Schlüssel gefunden Keine gültigen OpenPGP-Daten gefunden. Keine gültigen Adressaten kein schreibbarer Schlüsselbund gefunden: %s kein schreibbarer öffentlicher Schlüsselbund gefunden: %s kein schreibbarer geheimer Schlüsselbund gefunden: %s keine abgetrennte Unterschrift Keine gültige OpenPGP-Kartenicht verschlüsseltnicht zwingendnicht bearbeitetWird nicht unterstütztHinweis: 'random_seed'-Datei ist leer Hinweis: 'random_seed'-Datei bleibt unverändert oOAlles klar, wir sind der ungenannte Empfänger. okay|okayalte Kodierung des DEK wird nicht unterstützt Unterschrift nach alter (PGP 2.x) Art Nur Änderungen bereits existierender Schlüssel vornehmenVorgang ist ohne sicheren Hauptspeicher nicht möglich Optionendatei '%s': %s Ursprünglicher Dateiname='%.*s' Der "Ownertrust" wurde gelöscht "Owner trust"-Wert fehltPassphrase wurde mit unbekanntem Hashverfahren %d erstellt Passphrase wurde nicht richtig wiederholt; noch einmal versuchenBitte ein --check-trustdb durchführen Geben Sie eine Email-Adresse ein. Dies ist zwar nicht unbedingt notwendig, aber sehr empfehlenswert.Siehe %s für weitere Infos siehe http://www.gnupg.org/faq.html für weitere Informationen Bitte benutzen Sie stattdessen "%s%s". Bitte warten, der Schlüssel wird erzeugt ... Voreinstellung `%s' ist doppelt vorzeitiges Dateiende (innerhalb der Prüfsumme) vorzeitiges Dateiende (im Nachsatz) vorzeitiges Dateiende (keine Prüfsumme) den Karten-Status ausgebenProblem beim Bearbeiten des verschlüsselten Pakets Schwierigkeiten mit dem Agenten - Agent-Ansteuerung wird abgeschaltet vor Überschreiben nachfragenSchutzverfahren %d%s wird nicht unterstützt Hashschutzverfahren %d wird nicht unterstützt Öffentlichen und geheimen Schlüssel erzeugt und signiert. Öffentlicher Schlüssel %s ist %lu Sekunden jünger als die Unterschrift Öffentlicher Schlüssel %s ist %lu Sekunden jünger als die Unterschrift Öffentlicher Schlüssel %s nicht gefunden: %s Entschlüsselung mit Public-Key-Verfahren fehlgeschlagen: %s Öffentlicher Schlüssel paßt nicht zum geheimen Schlüssel! Mit öffentlichem Schlüssel verschlüsselte Daten: Korrekte DEK Öffentlicher Schlüssel ist %s Öffentlicher Schlüssel nicht gefundenöff. Schlüssel des uneingeschränkt vertrautem Schlüssel %s nicht gefunden qQquitMenü verlassen"quoted printable" Zeichen in der ASCII-Hülle gefunden - möglicherweise war ein fehlerhafter Email-Transporter("MTA") die Ursache diesen Schlüssel wieder zu verteilen, um mögliche Probleme durch unpassende Verfahrenskombinationen zu vermeiden Lesefehler in `%s': %s Lesen von '%s' Optionen werden aus '%s' gelesen Lesen des öffentlichen Schlüssels fehlgeschlagen: %s lese stdin ... Grund für Widerruf: %d Schlüssel werden per %s aktualisiert ein Schlüssel wird per %s aktualisiert durch Importfilter zurückgewiesennach dem Import soviel wie möglich aus dem Schlüssel entfernenWährend des Exports soviel wie möglich vom Schlüssel entfernenSchlüssel aus dem öff. Schlüsselbund entfernenSchlüssel aus dem geh. Schlüsselbund entfernenDie Passphrase von exportierten Unterschlüssel entfernenentferne nach dem Import unbrauchbare Teile des SchlüsselsUnbrauchbare Teile des Schlüssel während des Exports entfernenumbenennen von `%s' nach `%s' schlug fehl: %s Beseitige Beschädigung durch den Schlüsselserver während des Importsfordere Schlüssel %s von %s an fordere Schlüssel %s von %s-Server %s an festdefinierte Ressourcenobergrenze erreichtDie Antwort enthält das RSA-Modulus nicht Antwort enthält den öffentlichen RSA-Exponenten nicht Die Antwort enthält keine öffentliche Schlüssel-Daten Widerruf-Bemerkung: Schlüssel oder ausgewählten Unterschlüssel widerrufenAusgewählte User-ID widerrufenBeglaubigungen der ausgewählten User-IDs widerrufenwiderrufenwiderrufen durch Ihren Schlüssel %s um %s widerrufen: %saufgerundet auf %u Bit speichern und Menü verlassenSchlüssel auf einem Schlü.server suchensuche nach "%s" auf %s suche nach "%s" auf %s-Server %s suche Namen auf %s suche Namen auf %s-Server %s Geheimer Schlüssel "%s" nicht gefunden: %s Geheimer Schlüssel "%s": %s Geheimer Schlüssel ist bereits auf einer Karte gespeichert Geheimer Schlüssel ist nicht vorhandenTeile des geheimen Schlüssels sind nicht vorhanden Geheime Teile des Schlüssels sind nicht vorhanden Unterschlüssel N auswählenUser-ID N auswählenDas ausgewählte Hashverfahren ist ungültig Das ausgewählte Verschlüsselungsverfahren ist ungültig Das ausgewählte Komprimierungsverfahren ist ungültig Das ausgewählte Hashverfahren ist ungültig Auswahl der OpenPGP-Card-Anwendung fehlgeschlagen: %s sende Schlüssel %s auf %s sende Schlüssel %s auf den %s-Server %s Eine Notation für die ausgewählten User-IDs setzenändern der Voreinstellungsliste der ausgewählten User-IDsSetze die URL des bevorzugten Schlüsselservers für die ausgewählten User-IDsZeige IETF-StandardZeige IETF-Standard-Notationen während der UnterschriftenprüfungZeige Admin-BefehleAlle Notationen mit den Signaturen anlistenAlle Notationen während der Signaturprüfung anzeigenDas Ablaufdatum mit den Signaturen anlistenFingerabdruck des Schlüssels anzeigenZeige nur die Hauptuser-ID während der UnterschriftenprüfungZeige Richtlinien-URL während der UnterschriftenlistenZeige Richtlinien-URLs während der UnterschriftenprüfungDer bevorzugten Schlüsselserver mit den Signaturen anlistenDie URL für den bevorzugten Schlüsselserver während der Unterschriftenprüfung anzeigenZeige widerrufene und verfallene Unterschlüssel in den SchlüssellistenZeige widerrufene und verfallene User-ID in den SchlüssellistenZeige widerrufene und verfallene User-IDs während der Unterschriftenprüfungausgewählte Foto-IDs anzeigenAnzeigen des Schlüsselbundes, in dem ein Schlüssel drin istDiese Hilfe zeigenZeige Gültigkeit der User-ID in den SchlüssellistenDie Gültigkeit der User-ID während der Unterschriftenprüfung anzeigenZeige anwenderseitige Notationen in den UnterschriftenlistenZeige anwenderseitige Notationen während der UnterschriftenprüfungSchlüssel signierenSchlüssel nur für diesen Rechner signierenUnterschreiben oder bearbeiten eines Schl.die ausgewählten User-IDs beglaubigen [* für verwandte Befehle s.u.]Die ausgewählte User-ID nur für diesen Rechner beglaubigendie ausgewählten User-ID unwiderrufbar beglaubigenDie ausgewählte User-ID mit einer "Trust"-Unterschrift beglaubigenUnterschriften-Überprüfung unterdrückt Anzahl bereits erzeugter Signaturen: %lu beglaubigt durch Ihren Schlüssel %s am %s%s%s Beglaubigung fehlgeschlagen: %s Signaturunterschlüssel %s ist bereits rücksigniert unterschreibe:übersprungen "%s": %s übersprungen "%s": doppelt übersprungen: öffentlicher Schlüssel bereits gesetzt übersprungen: öffentlicher Schlüssel bereits als Standardempfänger gesetzt übersprungen: geheimer Schlüssel bereits vorhanden überspringe den Block vom Typ %d Überspringen der v3 Eigenbeglaubigung von User-ID "%s" Einzelner Widerruf - verwenden Sie "gpg --import", um ihn anzuwenden Einzelne Unterschrift der Klasse 0x%02x Speicher des Schlüssels auf der Karte schlug fehl: %s Unterschlüssel %s ist des Unterschreibens nicht mächtig und braucht deshalb keine Rücksignatur Im Unterpaket des Typs %d ist das "critical bit" gesetzt Symmetrische Entschlüsselung von `%s' fehlgeschlagen: %s Fehler beim Aufruf eines externen Programms: %s Schlüssel aus diesem Schlüsselbund nehmenTextmodusDie angegebene Zertifikat-Richtlinien-URL ist ungültig Die angegebene URL des bevorzugten Schlüsselserver ist ungültig Die angegebene Unterschriften-Richtlinien-URL ist ungültig Die Unterschrift konnte nicht überprüft werden. Denken Sie daran, daß die Datei mit der Unterschrift (.sig oder .asc) als erste in der Kommandozeile stehen sollte. Es gibt einen privaten Schlüssel zu diesem öffentlichen Schlüssel "%s"! Dies ist ein durch PGP erzeugter Elgamal-Schlüssel. Das ist für Signaturen NICHT sicher genug!Dieser Schlüssel wurde bereits als ein Widerrufer vorgesehen dies könnte durch fehlende Eigenbeglaubigung verursacht worden sein Diese Botschaft könnte für %s unbrauchbar sein Diese Plattform benötigt temporäre Dateien zur Ausführung von externen Programmen Zeitangaben differierenUmschalten zwischen dem Auflisten geheimer und öffentlicher SchlüsselUmschalten des "Signature-force-PIN"-Schalterszu viele Verschlüsselungeinstellungen zu viele Komprimierungsvoreinstellungen zu viele Hashvoreinstellungen zu viele Einträge im pk-Cache - abgeschaltet Fehler in der Trust-DBVertrauenssatz %lu ist nicht von der angeforderten Art %d trust record %lu, req type %d: read failed: %s Vertrauenssatz %lu, Typ %d: Schreiben fehlgeschlagen: %s Vertrauen: %strustdb Satz %lu: lseek fehlgeschlagen: %s trustdb Satz %lu: write fehlgeschlagen (n=%d): %s trustdb Transaktion zu groß trustdb: lseek fehlgeschlagen: %s trustdb: read failed (n=%d): %s "Trust-DB": sync fehlgeschlagen: %s "Trust"-Ebene auf VOLLSTÄNDIG geändert (wg. gültiger PKA-Info) "Trust"-Ebene auf NIEMALS geändert (wg. falscher PKA-Info) uneingeschränktDie Foto-ID kann nicht angezeigt werden! Externes Programm konnte nicht aufgerufen werden Ausführen des Programms `%s' nicht möglich: %s Ausführen der Shell `%s' nicht möglich: %s JPEG-Datei `%s' kann nicht geöffnet werden: %s Die Ausgabe des externen Programms konnte nicht gelesen werden: %s Der Ausführungspfad konnte nicht auf %s gesetzt werden. "Trust-DB"-Versions-Satz kann nicht geändert werden: Schreiben fehlgeschlagen: %s Die IDEA-Verschlüsselung kann nicht mit allen Zielschlüsseln verwendet werden. kann unbekanntes Vertrauensmodell nicht verwenden (%d) - verwende Vertrauensmodell %s Blockierung der PIN mittels des Rückstellcodes aufhebenunkomprimiert|kein|keineunbestimmtUnerwartete ASCII-Hülle: Unerwartete DatenVerschlüsselungsverfahren ist nicht implementiertnicht implementiertes öffentliches SchlüsselverfahrenunbekanntUnbekannter Header in der ASCII-Hülle: Unbekanntes VerschlüsselungsverfahrenUnbekanntes KomprimierverfahrenUnbekanntes Konfigurationselement `%s' Unbekannter voreingestellter Empfänger "%s" Unbekanntes HashverfahrenUnbekanntes Schlüssel-Schutzverfahren Unbekannte Option '%s' Unbekannter PakettypUnbekanntes Schutzverfahren Unbekanntes Public-Key-VerfahrenUnbekannte UnterschriftenklasseUnbekannte Versionungewöhnliches Ende eines externen Programms unbestimmtNicht unterstützter URIUnbenutzbares öffentliches Schlüsselverfahrenunbrauchbarer öffentlicher Schlüsselunbrauchbarer geheimer Schlüsselalle Schlüssel per Schlü.server aktualisierenÄnderung fehlgeschlagen: %s Änderung des Geheimnisses fehlgeschlagen: %s Ändern der "Trust"-DatenbankAufruf: %sAufruf: gpg [Optionen] Als Ausgabedatei benutzenTextmodus benutzenVerwenden Sie zunächst den Befehl "--delete-secret-key", um ihn zu entfernen. OpenPGP-Verhalten strikt beachtenverwende temporäre Dateien, um Daten an die Schlüsselserverhilfsprogramme zu gebenMit dieser User-ID signierenUser-ID "%s" ist bereits widerrufen User-ID: "%s" verwende Vertrauensmodell %s benutze Cipher %s Die Standard-PIN wird für %s benutzt der Unterschlüssel %s wird anstelle des Hauptschlüssels %s verwendet Prüfe Unterschriftengültigkeit mittels PKA-DatenGültigkeit: %sDetaillierte InformationenDie Überprüfung der Admin PIN ist momentan durch einen Befehl verboten worden Prüfung des CHV%d fehlgeschlagen: %s Signatur prüfenüberprüfe die PIN und liste alle Daten aufes wird auf die Sperre `%s' gewartet... Unsicherer SchlüsselUnsicherer Schlüssel erzeugt - neuer Versuch Seltsame Länge für einen verschlüsselten Sitzungsschlüssel (%d) Startet nicht mit unsicherem Speicher, wegen Option %s Die "Direct Key Signature" wird geschrieben Schreiben der "key-binding" Signatur der neue Schlüssel wird geschrieben schreiben des öffentlichen Schlüssels nach '%s' schreiben des geheimen Schlüssel-"stub"s nach `%s' schreiben des geheimen Schlüssels nach '%s' Die Eigenbeglaubigung wird geschrieben Schreiben nach '%s' Schreiben auf die Standardausgabe Falscher geheimer Schlüssel benutztjJyYjaIm --pgp2-Modus können Sie Klartextunterschriften nur mit PGP-2.x-artigen Schlüssel machen Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln eine abgetrennte Unterschrift erzeugt werden Im --pgp2-Modus kann nur für RSA-Schlüssel mit maximal 2048 Bit verschlüsselt werden Im --pgp2-Modus können Sie nur abgetrennte oder Klartextunterschriften machen Sie können Ihren Einstellungen mittels "gpg --edit-key %s updpref save" ändern Im --pgp2-Modus können Sie nicht gleichzeitig unterschreiben und verschlüsseln Ein Schlüssel kann nicht sein eigener vorgesehener Widerrufer werden Im %s-Modus kann --symmetric --encrypt nicht verwendet werden. --symmetric --encrypt kann nicht zusammen mit --s2k-mode 0 verwendet werden Im %s-Modus kann --symmetric --sign --encrypt nicht verwendet werden. --symmetric --sign --encrypt kann nicht zusammen mit --s2k-mode 0 verwendet werden Sie haben einen Bug (Programmfehler) gefunden ... (%s:%d) Die Benutzung von %s ist im %s-Modus nicht erlaubt. Die Benutzung des Verschlüsselungsverfahren %s ist im %s-Modus nicht erlaubt. Die Benutzung des Komprimierverfahren %s ist im %s-Modus nicht erlaubt. Die Benutzung der Hashmethode %s ist im %s-Modus nicht erlaubt. Im --pgp2-Modus müssen Sie Dateien benutzen und können keine Pipes verwenden. |AN|Neue Admin-PIN|A|Bitte die Admin PIN eingeben|A|Bitte die Admin PIN eingeben%%0A[verbleibende Versuche: %d]|FD|Statusinfo auf FD (Dateihandle) ausgeben|NAME|Verschlüsseln für NAME|N|Neue PINKompressionsstufe auf N setzen (0=keine)|RN|Neuer Rückstellcode|[Datei]|Eine Klartextunterschrift erzeugen|[Datei]|Eine Unterschrift erzeugen|algo [Dateien]|Message-Digests für die Dateien ausgeben||Bitte die PIN eingeben||Bitte die PIN eingeben%%0A[Sigs erzeugt: %lu]||Bitte geben Sie den Rückstellcode der karte eingnupg-1.4.20/po/Rules-quot0000644000175000017500000000416512635216116012271 00000000000000# This file, Rules-quot, can be copied and used freely without restrictions. # Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ ;; \ *) \ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ ;; \ esac } 2>/dev/null > $$tmpdir/$$lang.new.po \ ; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header gnupg-1.4.20/po/tr.gmo0000644000175000017500000037444612635457221011437 00000000000000u#lG8_-9_g__`aaab-bJbgbbb2b7b2)c#\cDc.cIc7>dvd ddddde#e|?L|4|:||}9}U}o}#}&}(}&}~6~N~c~7l~6~-~% 3/9c0<G @S>+Ӏ==EU]"o :ā#6H [/|}H-$'38[&5.5 *V.0&,5O kv8#†".)XH":(]$E;Éw8ϊ$-AYn/,H[uB%7%Nt|.Î !0ɏ'<"_"z,/ʐ1",,O"|2ґ ( 8 Y*dВ2M"Փ'DbF ۔1%.TtEEYo  0Q8'>Bc/uNE,:"g#-+ܚ)&2Y<'Ck4M_h 1۞(#+>"j+" ܟ?%Qwˠ $}Eâآ/0"Sh!!ʤ%"H]pyj-19O0H/y5'ߧ.-6du9Ql!$,(;0O-o ǭ*+;W p Ů%Ϯ7Grǯ>:1y=I43h#=? DI@+ϲ1N-I|IƳ5;F?B´<HB-H<B)'CQ:.з>2>=q<@F-HtU-2A1tI>K/@{5*7,U004 2:mnh*&"1I#{2>*=0,M]"&!3>Kc%D,Y52_ p {   )%B"h+5 &5 J We.| B$BJRbjy (5Kf"} ,'E.m%2,I%`5 ;&<b  '@:V&+A-P ~( 1D[r,H_ w  0B$_=% "'A#i ('D&l&& ( 4 @L"h9K%$7&\$' )5EUg$x@! &$4Y!qD+/Aqz"%%$> O].t2(@Tq'/ +"N]$p&$', ,6cr> $,?IlJ!>\z*-$$'I q."+)#:^-~65/I"i;0"%7/]2!: L!m!(+8?!\4~026M)9&G:HB*J#` 'BWw  .Hct'.*(32\! , :H N$Y~) %%7],s23&$"Kn1}!$%C%i #7&: a)k<"B6[,;Mf-"--P~+&*56L!&$ 25hkpIF(;Vi##!!$<a*p2.1*Ju}  %.$Mr#&3%+*Q%|-/G Vat95-"Dg  5$Hm+4%!*1(\0.-*<g+G$2l/%F<1O#!(*-?/m, ")!@ [|##! "& -I w : I A ]  o y         7 W !p       #  > J Z t         $ 7 6O  #     * HU]v-, $C _DF:EDE AR767=;>y$7<27oF ! 8$C#h#Ec1Y";" $-$R%w$>C >dA8!B@," "-#Pt2+*%,&R,y'%%!9[w&#," / F b "~      ! !"%!H!e!|!!$!-!5 "(A"yj"V";#/K#B{#,#7#8#$&\$5$#$$!$%%!7%Y%h%5%4%%!&'&&N&S&q&b&W&B'%R'-x'2'&'/(#0(*T(0(((!(#(0)!P)-r))&)))&***,@*:m*0*.*/+$8+(]+@++(+5, >,*I,=t,,--*- . .+A.m.....!.(/7/7O/(//6/,/7#0M[0401 1!1$2%C2i2C2D25 3xA3U34^,4+4=4-4j#595@5= 6G6Y6o666/66777<67Ts7L78C8:9R92[9 99Z9]:Pc:":::;&;#<;&`;=;';;;< $<Y2<I<@<8=^P=f=^>Uu>Q>L?Dj?-?H?&@-@ A@L@/f@@@ @V@-A6GA~AA A;ABBCBU=C,C8CAC%;D<aD*D1D&D,"E1OE#E-EE)E F$F/8FhFFF;F>FGIG4G&#H)JHRtHHUwII*J+J*JNK3VKKKKKKL1MMM(N7N1UNNfNO O%4O:ZO&O9OOP"P"3PEVPP+QQ"}QEQ:QT!R2vR1RBR@SB_SESBSG+T7sT.T,T)U)1U [U.fUU UU&U%V4V,TV#VV .W2OWW.W&W-W)XlIX#X/X) Y 4YUYS;ZKZZ(f[([[Gi\+\S\1]]0Y^\^C^+_0_:_6`0Q`)`0``a-bb(c ccd dd.:didXd-d* e95eMoeAebeVbfFf)gh*gDg$ggh"h3:h6nh#h1hh1jj2j: k_Fkl*l ll'm)k'pJIOI,;L, O:F3уN@T/PńD9[?oՅOEau4m)/̇J<GJ<ψ8 )E9o1:ۉ:=Q+<,\$4*?)!AK@ΒG]ГA.Np!.,E=j.88+% Q _+lt  $5 Ub } Ě Ϛ ܚ  -(*V*6>$"G,_Ȝ1 ( 3dT+  9O er%@Ҟ+%Ek*"#՟$%1D1v2.۠7 BUh "<N f#s `W\ {* У"'$<[a ۤ"!A0R"9 )),="jE*$ 4U%k$0T[t ͨ(:#]^&*;$Jo.+..Gfxʫ"5 $@1e;;Ӭ)BZr-,BZ'J:ͮ7/@(p+˯ .Bb1v T0!8Z b!m1-'UA$/-##(GFp(( ,,J0w)!ҴE*:e!y'+õ( =2p<˶۶%-)K*u30Է""8%[%/=L+Sx̹,.G)e-?ۺ@2\81ȻG+B2n1.Ӽ+B.MqK? 5KE$ǾU@B@KĿRTc%0.F>$("BP9L#"=7\(/A9/6iW0)?IiPG!L$n"*&!;?.{+=*3?&s$'-&(<"e"5$4Y_*n)-79*q-*  /,Fs*z++,12!dF+EH?55PX#j$)//Aq  !-.1 Q&]=(">HaV#P%`v#1-"E%h,5$(B&k0./"1<*n*/!&,k>z%CUs!%$,,+1X%:( 'I(qI=J"m4 ) /1P1,4Oi9''+'?;g>!!<K"a"Q+R%>x((% @Na+G":/Qj#7-0F8w% /-*>i0F&Km4,Rn;,"4/S?GK(t:?'/&4V4 &!(4%],6PA8Uz  #*? ju&'%" ',Tp'%/1@)S}0% "0Sc%3%J#1n">> P*^07AY(u).%LruQzMQBlJHTC8:? @L++>B$>gJ" %- SO_,1D7_!2kQL&ceJPHq5y!':WK |z`%{>-Xb;DM*[(I16xK]>{h(T~x1lW=w(mYcu1--N9kZi@$fMLu_.TCn8 jZ^OO1CY]*=`pJb3<T_n&/\&S!/ <r5%57f8M).'*UpmdM$vR'\<?V^A'bVO+%LL\]&[ cKlVB;gi!N$s2w  : :AY#zG i0:kP /o*C3=`]>2hZT@#^t@OQI,ejH1n?kg /wBrI)\ Uui^#{BtfPt4XG; 0JMvE3!J/)zLG+f"5=F tK|%Rud?}>, oS"j;psd6dga.~(9rq-Rs.T 9N@AE% ;P~~ j\"4BQ(qle[8NG+2Q A?YSka66H7).bCV5y4B0x+4uFF _ZR,nhm_EGcX R$hvUOrQ|r6q4WHzqD| $0Zobc ^79dS9:WY`JPeSKaA+<m }#U`p}x7 hvDDpNIm3[s'a 08wtI?F{8*gFyo,Xs@i< E"j-2W[=)y&UH 3f} aCoVl #Xe] g>l,"En Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with index %d Not a valid email address Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: This key has been disabled. Note: This key has expired! Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Pubkey: Public key is disabled. Quit without saving? (y/N) Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSignature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't lock `%s' can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card is permanently locked! card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create ascii armored outputcreated: %sdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddo not make any changesenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport keysexport keys to a key serverexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorflag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysimporting secret keys not allowed input line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s remove keys from the public keyringremove keys from the secret keyringrenaming `%s' to `%s' failed: %s requesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s secret key "%s" not found: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid sending key %s to %s sending key %s to %s server %s set preference list for the selected user IDsshow admin commandsshow key fingerprintshow selected photo IDsshow this helpsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model uncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using subkey %s instead of primary key %s validity: %sverboseverify CHV%d failed: %s verify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg 1.4.1 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:17+0200 Last-Translator: Nilgün Belma Bugüner Language-Team: Turkish Language: tr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.0 Kullanıcı kimliğini girin. Boş bir satır işlemi sonlandırır: Rasgele üretilen baytlar yetersiz. Lütfen bazı işlemler yaparak daha fazla rasgele bayt toplayabilmesi için işletim sistemine yardımcı olun! (%d bayt daha gerekiyor) Foto kimliği olarak kullanılmak üzere bir resim seçiniz. Resim bir JPEG dosyası olmalıdır. Bu resim genel anahtarınızda saklanacağından, çok büyük bir resim kullanırsanız genel anahtarınız da çok büyük olacaktır. Resim boyutlarının 240x288 civarında seçilmesi uygun olacaktır. Desteklenen algoritmalar: Anahtarınızın size ait olduğunu belirten bir Kullanıcı-Kimliği olmalı; Kullanıcı-Kimliği, Gerçek İsminiz, Bir Önbilgi ve e-Posta Adresiniz alanlarının birleşiminden oluşur. Örneğin: "Fatih Sultan Mehmed (Padisah) " nam-ı diğer "%s" %s kullanılarak anahtar %s ile yapılmış alınan: %lu değişmedi: %lu yeni yardımcı anahtarlar: %lu yeni kullanıcı kimliği: %lu alınamadı: %lu kullanıcı kimliksiz: %lu "%s": şifreleme algoritması %s için tercih edilir "%s": sıkıştırma algoritması %s için tercih edilir "%s": özümleme algoritması %s için tercih edilir (asıl anahtar kimliği %s üzerinde yardımcı anahtar) Bu imzanın sahibine ait olduğu kesin değil. Bu imza SAHTE olabilir. Bu imzanın sahibine ait olduğuna dair bir belirti yok. Bu imza sahte anlamına gelebilir. yeni imzalar: %lu "%s" Kart seri no. = Anahtar parmakizi =Yardımcı anahtar parmak izi: gizli anahtarlar okundu: %lu yeni anahtarlar atlandı: %lu Yardımcı anahtar parmak izi: (%c) Bitti (%c) Kimlik kanıtlama yeteneğini açar/kapar (%c) Şifreleme yeteneğini açar/kapar (%c) İmzalama yeteneğini açar/kapar (%d) DSA (yeteneklerini belirtin) (%d) DSA (yalnız imzalamak için) (%d) ElGamal (yalnız şifrelemek için) (%d) RSA (sadece şifrelemek için) (%d) RSA (yeteneklerini belirtin) (%d) RSA (sadece imzalamak için) (0) Cevabı bilmiyorum. %s (1) Tamamen kontrol edildi.%s (1) İmzalama anahtarı (2) Şifreleme anahtarı (2) İlişkisel denetim yaptım.%s (3) Kimlik kanıtlama anahtarı (3) Çok dikkatli bir denetim yaptım.%s yeni anahtar iptalleri: %lu %d = güvence vermem %d = bilmiyorum, kem küm %d = Tamamen güveniyorum %d = Şöyle böyle güveniyorum %d = Son derece güveniyorum İmzalanamıyor. namı-diğer "%s" m = ana menüye dön ç = çık a = bu anahtarı atla gizli anahtarlar indirildi: %lu (asıl anahtar kimliği %s) (dışarda geçersiz) (yürülükten kaldırılmaz)Birincil anahtar parmak izi: gizli anahtarlar değişmedi: %lu "%s" bir anahtar kimliği değil: atlanıyor "%s" zaten %s anahtarıyla yerel olarak imzalanmış "%s" zaten %s anahtarıyla imzalanmış # Atanan güvencedeğerlerinin listesi %s oluşturuldu # (Eski haline getirmek için "gpg --import-ownertrust" kullanın kart kalıcı olarak kilitlenmeden önce %d Yönetici PIN kalmasına çalışılıyor %d kötü imza %d anahtar işlendi (%d doğrulama temizlendi) %d şöyle böyle gerekli, %d tamamen gerekli, %s güvence modeli %d imza hatalardan dolayı kontrol edilmedi %d imza kayıp bir anahtar yüzünden kontrol edilmedi %d öz-imzası geçersiz kullanıcı kimliği saptandı %lu anahtar arabelleklendi (%lu imza) şimdiye kadar %lu anahtar arabelleklendi (%lu imza) şu ana kadar %lu anahtar işlendi %s ... %s, %s ile henüz çalışmıyor %s şifreli veri %s şifreli oturum anahtarı %s şifrelemesi kullanılmayacak %s yenilerden %s değişmeyenlerden %s anahtarları %u bit ile %u bit arasında olmalı. %s anahtar uzunlukları %u-%u aralığında olmalı %s, %s ile etkisiz olur! %s ile %s birlikte kullanılmaz! %s imzası, %s özümleme algoritması %s. %s/%s "%s" için şifrelendi %s/%s imza: "%s" den %s: Bu anahtarın gerçekten ismi belirtilen şahsa ait olduğuna dair sınırlı bir belirti var %s: Bu anahtarın gerçekten ismi belirtilen şahsa ait olduğuna dair bir belirti yok %s: dizin yok! %s: serbest kaydı okuma hatası: %s %s: sürüm kaydının okunmasında hata: %s %s: sürüm kaydının güncellenmesinde hata: %s %s: dizin kaydını yazma hatası: %s %s: sürüm kaydının yazılmasında hata: %s %s: kayıt ekleme başarısız: %s %s: nitelemeli tablo oluşturulamadı: %s %s: sürüm kaydı oluşturmada başarısız: %s%s: kayıt sıfırlama başarısız: %s %s: dosya sürümü %d geçersiz %s: güvence veritabanı geçersiz %s: geçersiz güvence veritabanı oluşturuldu %s: anahtar zinciri oluşturuldu %s: bir güvence veritabanı dosyası değil %s: atlandı: %s %s: atlandı: genel anahtar zaten var %s: atlandı: genel anahtar iptal edildi %s: güvence veritabanı oluşturuldu %s: bilinmeyen sonek %s: %lu kayıt numarası ile sürüm kaydı %s:%d: "%s" seçeneği kullanımdan kaldırılmak üzere. %s:%d geçersiz dışsallaştırma seçenekleri %s:%d: geçersiz içselleştirme seçenekleri %s:%d: anahtar sunucusu seçenekleri geçersiz %s:%d: liste seçenekleri geçersiz %s:%d doğrulama seçenekleri geçersiz %u bitlik %s anahtarı, %s kimliği ile %s tarihinde üretilmiş(açıklama verilmedi) (Burada %d seçtiğiniz varsayılıyor) (Bu bir duyarlı yürürlükten kaldırma anahtarı) (duyarlı)(anahtarı parmak izi ile belirtmedikçe) (bu görev için yanlış program kullanmış olabilirsiniz) * `sign' komutu şu harflerden bir veya birkaçı ile başlayabilir: güvence imzaları için 't' (tsign), yürürlükten kaldırılmayan imzalar için 'nr', yerel imzalar için 'l' (lsign) veya buların karışımı olarak (ltsign, tnrsign gibi). --clearsign [dosyaismi]--decrypt [dosyaismi]--edit-key kullanıcı-kimliği [komutlar]--encrypt [dosyaismi]--lsign-key kullanıcı-kimliği--output seçeneği bu komutla çalışmaz --sign --encrypt [dosyaismi]--sign --symmetric [DOSYA]--sign [dosyaismi]--sign-key kullanıcı-kimliği--store [dosyaismi]--symmetric --encrypt [dosyaismi]--symmetric --sign --encrypt [dosyaismi]--symmetric [dosyaismi]-k[v][v][v][c] [kullanıcı-kimliği] [anahtar-zinciri]... bu bir yazılım hatası (%s:%d:%s) 1 kötü imza 1 imza kayıp bir anahtar yüzünden kontrol edilmedi 1 imza bir hata yüzünden kontrol edilmedi 1 öz-imzası geçersiz kullanıcı kimliği saptandı @ (Tüm komut ve seçeneklerin komple listesi için man sayfalarına bakın) @ Örnekler: -se -r Ali [dosya] kullanıcı Ali için imzalar ve şifreler --clearsign [dosya] açıkça okunabilir bir imza yapar --detach-sign [dosya] bağımsız bir imza yapar --list-keys [isimler] anahtarları listeler --fingerprint [isimler] parmak izlerini gösterir @ Seçenekler: @Komutlar: ASCII zırhlı çıktı istendi. Yönetici komutlarına izin verilir Yönetici komutlarına izin verilmez Yöneticiye özel komut Yardımcı anahtarı üretmek istiyorsanız "evet" ya da "e" girin.Bu yardımcı anahtarı silme izni vermek istiyorsanız "evet" girinDosyanın üzerine yazılacaksa lütfen "evet" yazınBu kullanıcı kimliğini gerçekten silmek istiyorsanız "evet" girin. Böylece bütün sertifikaları kaybedeceksiniz!Kullanıcı kimliklerinin TÜMünü imzalamak istiyorsanız "evet" ya da "yes" yazınCevap "evet" ya da "hayır"Bu anahtarı kendi "%s" (%s) anahtarınızla imzalamak istediğinize gerçekten emin misiniz? Onu yine de eklemek istiyor musunuz? (e/H) Onu yine de yürürlükten kaldırmak istiyor musunuz? (e/H) Onu yine de imzalamak istiyor musunuz? (e/H) bir anahtarın, yürürlükten kaldıran anahtar olmasını istediğinizden emin misiniz? (e/H ya da y/N) Onu silmek istediğinizden emin misiniz? (e/H ya da y/N) Onu değiştirmek istediğinizden emin misiniz? (e/H ya da y/N) Onu kullanmak istediğinizden emin misiniz? (e/H ya da y/N) Kimlik kanıtlama"%s" deki imza KÖTÜCA parmak izi: CRC hatası; %06lX - %06lX İmza kontrol edilemedi: %s Bu anahtar üzerinde düzenleme yapılamaz: %s `%s' açılamıyor: %s İptalKart sahibinin adı: Kart sahibinin soyadı: Son derece güvenli bir anahtarla sonuçlanan sertifikalar: (A)dı ve Soyadı, (Y)orum, (E)posta alanlarını değiştir ya da (T)amam/Çı(k)? (A)dı ve Soyadı, (Y)orum, (E)posta alanlarını değiştir ya da Çı(k)? Tüm kullanıcı kimlik tercihlerini (ya da seçilen birini) mevcut tercihler listesine çevirir. Tüm etkilenen öz-imzaların zaman damgaları bir sonraki tarafından öne alınacaktır. Bir yardımcı anahtar için son kullanma tarihi değiştiriliyor. Asıl anahtar için son kullanma tarihi değiştiriliyor. Şifre: Komut argüman olarak bir dosya ismi gerektiriyor Önbilgi: Sıkıştırma: Bu imza için bir yürürlükten kaldırma sertifikası oluşturulsun mu? (e/H ya da y/N) Bu anahtar için bir yürürlükten kaldırma sertifikası oluşturulsun mu? (e/H ya da y/N) Bu imza için bir yürürlükten kaldırma sertifikası oluşturulsun mu? (e/H) Kritik tercihli anahtar sunucusu: Kritik imza niteleyici: Kritik imza guvencesi: Şimdilik mümkün eylemler: Şimdiki alıcılar: Bu doğru imza silinsin mi? (e/H/k)Bu geçersiz imza silinsin mi? (e/H/k)Bu anahtar, anahtar zincirinden silinsin mi? (e/H ya da y/N) Bu bilinmeyen imza silinsin mi? (e/H/k)%d imza silindi. %d imza silindi. Bağımsız imza. Özümlenen: Anahtar 0x%3$s (kull-kiml %4$d) için %2$ld uzunluktaki %1$s foto kimliği gösteriliyor Seçilen anahtarları gerçekten silmek istiyor musunuz? (e/H ya da y/N) Bu anahtarı gerçekten silmek istiyor musunuz? (e/H ya da y/N) Gerçekten bunu yapmak istiyor musunuz? (e/H ya da y/N) Anahtarın tamamını yürürlükten kaldırmayı gerçekten istiyor musunuz? (e/H ya da y/N) Seçili yardımcı anahtarları gerçekten yürürlükten kaldırmak istiyor musunuz? (e/H ya da y/N) Bu yardımcı anahtarı gerçekten yürürlükten kaldırmak istiyor musunuz? (e/H ya da y/N) Bu anahtarı gerçekten son derece güvenli yapmak istiyor musunuz? (e/H ya da y/N) Yeni imzanızın süresi dolmuş biriyle değiştirilmesini ister misiniz? (e/H) Bu imzanın dışarda da geçerli hale getirilmesini istiyor musunuz? (e/H) Bir OpenPGP öz-imzası haline getirilmesini istiyor musunuz? (e/H) Onu yine de imzalamak istiyor musunuz? (e/H) İmzanızın da bu kadar süre geçerli olmasını ister misiniz? (E/h) HATA: E-posta adresiniz: ŞifrelemeYönetici PIN'ini girin: Foto kimliği için JPEG dosya ismini giriniz: Yeni Yönetici PIN'ini girin: Yeni PIN'i girin: PIN'i girin: İsteğe bağlı açıklamayı girebilirsiniz; Boş bir satır işlemi sonlandırır: Yeni dosya ismini girinizSayıyı/sayıları girin veya S)onraki ya da Ç)ık >Anahtar parolasını giriniz Anahtar parolasını girin: Anahtar tutucunun ismini girinizBu gizli anahtar için yeni anahtar parolasını giriniz. İstenen değeri girin. ISO tarihi (YYYY-AA-GG) girmeniz mümkündür fakat iyi bir hata cevabı alamazsınız -- onun yerine sistem verilen değeri bir zaman aralığı olarak çözümlemeyi dener.Anahtar uzunluğunu girinizBu iletiyi göndereceğiniz adresin kullanıcı kimliğini giriniz.Tasarlanmış yürürlükten kaldırma anahtarının kullanıcı kimliğini giriniz: Tercih ettiğiniz sunucunun adresini girin: yedekleme anahtarı `%s' den okunurken hata oluştu: %s Hata: İsimler birlikte çok uzun oluyor (sınır: %d karakter). Hata: Çift boşluğa izin verilmez. Hata: Oturum açma verisi çok uzun (sınır: %d karakter). Hata: Şimdilik sadece US-ASCII mümkün. Hata: Özel DO çok uzun (sınır: %d karakter). Hata: "<" karakteri kullanılmamalı. Hata: URL çok uzun (sınır: %d karakter). Hata: tercih dizgesindeki karakterler geçersiz. Hata: biçimli parmakizi geçersiz Hata: tercih dizgesinin uzunluğu geçersiz. Hata: yanıt geçersiz. "%s" deki imza zamanaşımına uğramışÖzellikler: "%s" dosyası var. İmzanın uygulanacağı dosyanın ismini verinİletinizi yazın ... "%s" deki imza iyiHash: İpucu: İmzalamak için bir kullanıcı kimliği seçiniz Hazır olunca ya da iptal etmek için 'c' tuşlayın: Bu anahtarın ismi yukarda yazılı kişiye ait olduğunu ne kadar dikkatli doğruladınız? Bu sorunun cevabını bilmiyorsanız "0" yazın. %s: Bu anahtarın gerçekten sahibine ait olduğuna dair bir belirti yok Bu anahtarı karşılaştırmalı olarak sınadım. Bu anahtarı çok dikkatle sınadım. Her şeyiyle bu anahtarı sınayamadım. IDEA şifre kullanışsız, iyimserlikle yerine %s kullanılmaya çalışılıyor İsterseniz, neden bu yürürlükten kaldırma sertifikasını verdiğinizi açıklayan bir metin girebilirsiniz. Lütfen bu metin kısa olsun. Bir boş satır metni bitirir. Bu güvencesiz anahtarı yine de kullanmak istiyorsanız cevap olarak "evet" yazın.Genelde imzalama ve şifreleme için aynı anahtarı kullanmak iyi bir fikir değildir. Bu algoritma sadece belli alanlarda kullanılabilir. Lütfen güvenlik uzmanınıza danışın.Önbilgi alanında geçersiz karakter var Ad ve soyadınızda geçersiz karakter var Komut geçersiz ("help" komutunu deneyin) Geçersiz %s anahtarı --allow-non-selfsigned-uid kullanılarak geçerli oldu Anahtar parolası geçersiz; lütfen tekrar deneyinSeçim geçersiz. Bu doğru mu? (e/H ya da y/N) Bu tamam mı? (e/H ya da y/N) Bu foto doğru mu? (e/H/ç)? Bu anahtarın kullanıcı kimliğinde ismi belirtilen şahsa ait olduğu kesin DEĞİL. *Gerçekten* ne yaptığınızı biliyorsanız, sonraki soruya da evet cevabı verebilirsiniz. Bir değeri buraya işaretlemek size kalmış; bu değer herhangi bir 3. şahsa gönderilmeyecek. Bir güvence ağı sağlamak için bizim buna ihtiyacımız var; bunun (açıkça belirtilmeden oluşturulmuş) sertifikalar ağıyla hiçbir alakası yok.Anahtar %s zaten yürürlükten kaldırılmış. Anahtar burada:Anahtar hep geçerli olacak Anahtarın geçerliliği %s de bitecek. Anahtar üretimi durduruldu. Anahtar üretimi başarısızlığa uğradı: %s Anahtar tehlikedeAnahtar sadece kısa veya karta özel öğeler içeriyor, değiştirilecek bir anahtar parolası yok. Anahtar artık kullanılmayacakAnahtar korunmuş. Anahtar yürürlükten kaldırıldı.Anahtarın yerine başkası konulmuş ve iptal edilmiştirAnahtar ne kadar geçerli olacak? (0) Güncelleme gereği olmadığından anahtar değişmedi. Anahtar ZinciriAnahtar sunucusu değişmezDil tercihleri: Oturum açma verisi (hesap adı): Şifreli anahtarın kartsız yedeği yapılsın mı? (E/h ya da Y/n) S iSim değiştirmek için. B önBilgiyi değiştirmek için. P e-Posta adresini değiştirmek için. D anahtar üretimine Devam etmek için. K anahtar üretiminden çıKmak için.BİLGİ: %s normal kullanım için değil! BİLGİ: Bu anahtar korunmamış! BİLGİ: bir anahtarın seri numarası kartlardan biriyle uyuşmuyor BİLGİ: kart anahtarının yedeklemesi '%s' e kaydedildi BİLGİ: v3 anahtarları için yardımcı anahtar üretimi OpenPGP uyumlu değildir BİLGİ: anahtar yürürlükten kaldırılmıştıBİLGİ: "%s" öntanımlı seçenek dosyası yok BİLGİ: eski öntanımlı seçenekler dosyası `%s' yoksayıldı BİLGİ: asıl anahtar kart üzerinde saklı ve kullanılabilir BİLGİ: ikincil anahtar kart üzerinde saklı ve kullanılabilir BİLGİ: %s gizli anahtarının %s tarihinde kullanım süresi doldu BİLGİ: gönderen "yalnız-gözleriniz-için" ricasında bulundu BİLGİ: %s imza anahtarının kullanım süresi %s sularında dolmuş BİLGİ: basit S2K kipi (0) kesinlikle tavsiye edilmez BİLGİ: güvence veritabanına yazılamıyor Ad ve soyadınız bir rakamla başlamamalı Ad ve soyadınız en az 5 harfli olmalı Bunu yapmak için gizli anahtar gerekli. AaYyEeTtKkGizli anahtar demetinde uygun/benzer imza yok yardım mevcut değil"%s" için yardım mevcut değilBelirtilmiş bir neden yok%d indisli bir yardımcı anahtar yok Böyle bir kullanıcı kimliği yok. Güven değeri belirtilmemiş: %d endeksine sahip kullanıcı kimliği yok geçerli bir E-posta adresi değil Bu anahtar şifreleme için kullanılamaz. Şifreleme için yardımcı anahtarı "--edit-key" seçeneğini kullanarak üretebilirsiniz. Bilgi: Bu anahtar iptal edildi. Bilgi: Bu anahtarın kullanım süresi dolmuştu! Hiçbir şey silinmedi. %s anahtarı ile imzalanacak hiçbir şey yok %s numaralı OpenPGP kartı saptandı OpenPGP anahtarı kullanılabilir değil: %s Üzerine yazılsın mı? (e/H ya da y/N) Kullanıcı taraından sağlanmış bir güvence veritabanı kullanılarak sahibiningüvencesi belirlenemez PIN eylemcisi hata döndürdü: %s CHV%d için PIN çok kısa; asgari uzunluk: %d PIN doğru tekrarlanmadı; tekrar deneyinLütfen önce hatayı düzeltin Diğer kullanıcıların anahtarlarını doğrulayacak bu kullanıcının güven derecesine lütfen karar verin. (pasportuna mı bakarsınız yoksa farklı kaynaklardan parmakizlerini mi kontrol edersiniz...) kararınızı verin Lütfen E-posta adresinizi Adı ve Soyadı veya Açıklama alanı içine koymayın Bu imzayı kısıtlayacak bir etki alanı girin, yoksa tuşlayın. Lütfen yeni dosya ismini girin. Dosya ismini yazmadan RETURN tuşlarsanız parantez içinde gösterilen öntanımlı dosya kullanılacak.Lütfen önbilgi girin (isteğe bağlı)Lütfen veri dosyasının ismini girin: Lütfen bu güvence imzasının derinliğini belirtin. 1'den büyük bir derinlik, imzaladığınız anhatarın kendi yararınıza güvence imzaları yapmayı mümkün kılar. Lütfen bir anahtar parolası giriniz; yazdıklarınız görünmeyecek Lütfen bu güvenlik çatlağını giderin Lüthen kartı yerleştirdikten sonra ya ya da iptal için 'c' tuşlayın: Lütfen dikkat edin, PIN'lerin öntanımlı ayarları böyledir: PIN = `%s' Admin PIN = `%s' Bunları --change-pin komutunu kullanarak değiştirmelisiniz Gösterilen anahtarın, uygulamayı yeniden başlatıncaya kadar, gerekli doğrulukta olmayacağını lütfen gözönüne alınız. Lütfen gizli anahtarlardan seçilenleri silin. Mevcut kartı kaldırdıktan sonra lütfen seri numarası %.*s olan kartı yerleştirin. Lütfen son parolayı tekrarlayarak ne yazdığınızdan emin olun.Yazılım hatalarını lütfen adresine, çeviri hatalarını ise adresine bildiriniz. Lütfen en fazla bir yardımcı anahtar seçin. Lütfen sadece ve sadece bir kullanıcı kimlik seçiniz. Lütfen bir yürürlükten kaldırma sebebi seçiniz: Lütfen üretilecek anahtar türünü seçiniz: Lütfen istediğiniz anahtarı seçiniz: Lütfen anahtarın saklanacağı yeri seçiniz: Lütfen anahtarın ne kadar süreyle geçerli olacağını belirtin. 0 = anahtar süresiz geçerli = anahtar n gün geçerli w = anahtar n hafta geçerli m = anahtar n ay geçerli y = anahtar n yıl geçerli Lütfen imzanınn ne kadar süreyle geçerli olacağını belirtin. 0 = imza süresiz geçerli = imza n gün geçerli w = imza n hafta geçerli m = imza n ay geçerli y = imza n yıl geçerli lütfen önce "seçmece" komutunu kullanın. Lütfen bekleyin rasgele baytlar toplanıyor. Bu işlem sırasında başka işlere bakın, çünkü bu anahtarınızın daha kaliteli olmasını sağlayacak. bir %s anahtarı için olası eylemler: Tercih edilen anahtar sunucusu: Birincil anahtar parmak izi:Özel DO verisi: GenAnah: Genel anahtar iptal edildi. Kaydetmeden çıkılsın mı? (e/H ya da y/N) Adınız ve Soyadınız: Bu yürürlükten kaldırma sertifikalarını gerçekten oluşturacak mısınız? (e/H) Gerçekten oluşturulsun mu? (e/H ya da y/N) Bu öz-imza gerçekten silinecek mi? (e/H)Bu öz-imza gerçekten taşınacak mı? (e/H ya da y/N) Seçilen tüm kullanıcı kimlikler gerçekten silinecek mi? (e/H ya da y/N) Bu kullanıcı kimliği gerçekten silinecek mi? (e/H ya da y/N) Seçilen tüm kullanıcı kimlikleri gerçekten yürülükten kaldırılacak mı? (e/H ya da y/N) Bu kullanıcı kimliği gerçekten yürürlükten kaldırılacak mı? (e/H ya da y/N) Tüm kullanıcı kimlikler gerçekten imzalanacak mı? (e/H ya da y/N)Gerçekten imzalayacak mısınız? (e/H) Seçili kullanıcı kimlikler için tercihleri gerçekten güncellemek istiyor musunuz? (e/H ya da y/N) Tercihleri gerçekten güncellemek istiyor musunuz? (e/H ya da y/N) Yürürlükten kaldırma sebebi: %s Parolayı tekrar yazınız Tekrar: Bu PIN'i tekrarlayın: Mevcut anahtar değiştirilsin mi? (e/H ya da y/N) Mevcut anahtarlar değiştirilsin mi? (e/H ya da y/N) İstenen anahtar uzunluğu: %u bit Yürürlükten kaldırma sertifikası üretildi. Yürürlükten kaldırma sertifikası üretildi. Sertifika başkalarının kolayca erişebileceği yerlerde saklanmamalıdır. Aksi takdirde, yürürlükten kaldırma sertifikanız bilginiz dışında yayınlandığında geçerli olan genel anahtarınızın geçersiz hale gelebilir. Sertifika kısa olacağından isterseniz, bir yazıcı çıktısı olarak alıp bir kasada da muhafaza edebilirsiniz. Değişiklikler kaydedilecek mi? (e/H ya da y/N) Gizli anahtar mevcut. Asıl anahtarın gizli parçaları kullanılamaz. Asıl anahtarın gizli parçaları kart üzerinde saklı. Kullanılacak algoritmayı seçiniz. DSA (nam-ı diğer DSS) Sayısal İmza Algortimasıdır ve sadece imzalar için kullanılabilir. Elgamal sadece şifreleme amacıyla kullanılabilen bir algoritmadır. RSA hem imzalamak hem de şifrelemek amacıyla kullanılabilir. İlk (asıl) anahtar daima imzalama yeteneğine sahip bir anahtar olmalıdır.Belirlenecek tercih listesi: Cinsiyet ((E)rkek, (D)işi veya boşluk): İmzalamaİmza hep geçerli olacak Bu imzanın geçerliliği %s de bitti. Bu imzanın geçerliliği %s de bitecek. İmzanın geçerliliği %s de bitecek. İmza %s de %s imzası, %s anahtarı ve %s kullanıcı kimliği ile yapılmış imza niteleyici: imza guvencesi: İiŞşKkçÇYardımcı anahtar %s zaten yürürlükten kaldırılmış. Yazılışı: gpg [seçenekler] [dosyalar] imzalama, kontrol, şifreleme veya çözme öntanımlı işlem girilen veriye bağımlıdır Bu anahtar için asgari güvence seviyesi: %s Rasgele sayı üreteci kendi halinde çalışan bir kukla - güvenilir bir RSÜ değil! BU PROGRAMLA ÜRETİLMİŞ HİÇBİR VERİYİ KULLANMAYIN!! "%s" üzerindeki öz-imza bir PGP 2.x tarzı imza. İmza geçersiz. Onu anahtar zincirinizden kaldırmak uygun olacak.İmza dışarı gönderilemez olarak imlenecek. İmza yürürlükten kaldırılamaz olarak imlenecek. Bir PGP 2.x tarzı kullanıcı kimliğine uygun tercih yok. Bu JPEG gerçekten büyük (%d bayt)! %s kipindeyken bu komut kullanılamaz. Bu bir gizli anahtar! - gerçekten silinecek mi? (e/H veya y/N)Bu imza kullanıcı kimliğini anahtara bağlar. Öz-imzayı silmek hiç iyi bir fikir değil. GnuPG bu anahtarı bir daha hiç kullanamayabilir. Bunu sadece, eğer bu öz-imza bazı durumlarda geçerli değilse ya da kullanılabilir bir ikincisi var ise yapın.Bu, anahtar üzerinde geçerli bir imzadır; anahtara ya da bu anahtarla sertifikalanmış bir diğer anahtara bir güvence bağlantısı sağlamakta önemli olabileceğinden normalde bu imzayı silmek istemezsiniz.Bu anahtar bizim Bu anahtar iptal edilmiştiBu anahtarın kullanım süresi dolmuş!Bu anahtarın geçerliliği %s de bitiyor. Bu anahtar korunmamış. Bu anahtar %s tarafından %s anahtarıyla yürürlükten kaldırılmış olabilirBu anahtarın ismi belirtilen şahsa ait olduğu umuluyor Bu anahtar %2$s tarafından %3$s anahtarıyla %1$s üzerinde yürürlükten kaldırılmış Bu imza, anahtarına sahip olmadığınızdan, kontrol edilemez. Bu imzanın silinmesini hangi anahtarın kullanıldığını bilene kadar ertelemelisiniz çünkü bu imzalama anahtarı başka bir sertifikalı anahtar vasıtası ile bir güvence bağlantısı sağlayabilir.Bu anahtarın geçerliliği %s de bitti. Bu bir öz-imza olacak. Bu, anahtarı PGP 2.x için kullanışsız yapacak. Yürürlükten kaldıran: Web-of-Trust oluşturulabilmesi için GnuPG'ye hangi anahtarların son derece güvenli (bunlar gizli anahtarlarına erişiminiz olan anahtarlardır) olduğunun bildirilmesi gerekir. "evet" yanıtı bu anahtarın son derece güvenli olduğunun belirtilmesi için yeterlidir. İşlenmiş toplam miktar: %lu genel anahtarın alınacağı URL: Sıkıştırılmamışimza türü `%s' bilinmiyor Kullanımı: gpg [seçenekler] [dosyalar] (yardım için -h)Kullanımı: gpgv [seçenekler] [dosyalar] (yardım için -h)Bu anahtar yine de kullanılsın mı? (e/H ya da y/N) Kullanıcı kimliği "%s" zamanaşımına uğradı.Kullanıcı kimliği "%s" öz-imzalı değil.Kullanıcı kimliği "%s" yürürlükten kaldırıldı.Kullanıcı kimliği artık geçersizUYARI: UYARI: %s seçeneği kullanımdan kaldırılmak üzere. UYARI: %s %s'i aşıyor UYARI: gizli bilgi içeren 2 dosya mevcut. UYARI: Bu PGP-2 tarzı bir anahtar. Tasarlanmış bir yürürlükten kaldırıcı eklenmesi bu anahtarın bazı PGP sürümleri tarafından reddedilmesi ile sonuçlanabilir. UYARI: Bu PGP-2 tarzı bir anahtar. Bir foto kimliği eklenmesi bu anahtarın bazı PGP sürümleri tarafından reddedilmesi ile sonuçlanabilir. UYARI: Bu anahtar onu üreten tarafından yürürlükten kaldırılmıştı! UYARI: Bu anahtar sahibi tarafından yürürlükten kaldırılmıştı! UYARI: Bu anahtar güven dereceli bir imza ile sertifikalanmamış! UYARI: Bu anahtar yeterli güven derecesine sahip imzalarla sertifikalanmamış! UYARI: Bu yardımcı anahtar sahibi tarafından yürürlükten kaldırılmıştı! UYARI: Güven derecesiz anahtar kullanılıyor! UYARI: Bu anahtara güven-mi-yoruz! UYARI: Zayıf anahtar saptandı - lütfen anahtar parolasını tekrar değiştirin. UYARI: "%s" dosyası boş UYARI: bir kullanıcı kimliği imzası %d saniye gelecekte oluşturuldu UYARI: yürürlükten kaldıran olarak tasarlanmış bir anahtar başka amaçla kullanılamaz! UYARI: %s şifre algoritması alıcı tercihlerinde yok UYARI: %s özümleme algoritması artık önerilmiyor. UYARI: şifreli ileti tahrip edilmiş! UYARI: alıcının tercihleriyle çelişen %s (%d) sıkıştırma algoritması kullanılmak isteniyor UYARI: alıcının tercihleriyle çelişen %s (%d) özümleme algoritması kullanılmak isteniyor UYARI: alıcının tercihleriyle çelişen %s (%d) simetrik şifre kullanımı zorlanıyor UYARI: random_seed dosyasının boyu hatalı - kullanılmadı UYARI: anahtar %s yürürlükten kaldırılmış olmalı: yürürlükten kaldırma anahtarı %s alınıyor UYARI: anahtar %s yürürlükten kaldırılmış olabilir: yürürlükten kaldırma anahtarı %s mevcut değil. UYARI: GnuPG'nin başka bir sürümünün anahtar sunucusu eylemcisi (%s) UYARI: anahtar sunucusu seçeneği `%s' bu platformda kullanımda değil UYARI: ileti simetrik şifre içindeki zayıf bir anahtarla şifrelendi. UYARI: ileti bütünlük korumalı değildi UYARI: çoklu imzalar saptandı. Sadece ilki denetlenecek. UYARI: birincil olarak imlenmiş bir kullanıcı kimlik yok. Bu komutla farklı bir kullanıcı kimliğin birincil kullanıcı kimlik olarak kabul edilmesini sağlayabilirsiniz. UYARI: hiçbir şey dışarı aktarılmadı UYARI: `%s' deki seçenekler bu çalıştırma sırasında henüz etkin değil UYARI: simetrik şifreli oturum anahtarı potansiyel olarak güvensiz UYARI: program bir "core" dosyası oluşturabilir! UYARI: alıcılar (-r) genel anahtar şifrelemesi kullanılmadan belirtilmiş UYARI: gizli anahtar %s basit bir SK sağlamasına sahip değil UYARI: iletideki imza özümlemesi çelişkili UYARI: yardımcı imzalama anahtarı %s geçersiz çapraz sertifikalamaya sahip UYARI: yardımcı imzalama anahtarı %s çapraz sertifikalı değil UYARI: imza dışarı gönderilemez olarak imlenmeyecek. UYARI: imza yürürlükten kaldırılamaz olarak imlenmeyecek. UYARI: bu anahtar yürürlükten kaldırılmamış olabilir (yürürlükten kaldırma anahtarı mevcut değil) UYARI: %%-genişletmesi imkansız (çok büyük). Uzatılmadan kullanılıyor. UYARI: güvence adresi için %%lik uzatma imkansız (çok büyük). Uzatılmadan kullanılıyor. UYARI: tercih edilen anahtar sunucu adresi için %%lik uzatma imkansız (çok büyük). Uzatılmadan kullanılıyor. UYARI: %s anahtarı %s üzerinden tazelenemiyor: %s UYARI: %s geçici dizini silinemiyor: %s UYARI: geçici dosya silinemiyor (%s) `%s': %s UYARI: '%s' yapılandırma dosyasını içeren dizinin iyeliği güvensiz UYARI: '%s' evdizinindeki ilgili dizinin iyeliği güvensiz UYARI: '%s' yapılandırma dosyasını içeren dizinin izinleri güvensiz UYARI: '%s' evdizinindeki ilgili dizinin izinleri güvensiz UYARI: '%s' yapılandırma dosyasında güvensiz iyelik UYARI: '%s' evdizininde güvensiz iyelik UYARI: '%s' yapılandırma dosyasında güvensiz izinler UYARI: UYARI: '%s' evdizininde güvensiz izinler UYARI: deneysel %s şifreleme algoritması kullanılıyor UYARI: deneysel %s özümleme algoritması kullanılıyor UYARI: deneysel %s genel anahtar algoritması kullanılıyor UYARI: kullanılan bellek güvenli değil! UYARI: kullanılan rasgele sayı üreteci güvenli değil!! Bir miktar rasgele bayt üretilmesi gerekiyor. İlk üretim sırasında biraz hareket (klavyeyi kullanmak, fareyi hareket ettirmek, disklerden yararlanmak) iyi olacaktır; bu yeterli rasgele bayt kazanmak için rasgele sayı üretecine yardımcı olur. İstediğiniz anahtar uzunluğu nedir? (%u) Bir anahtarı bir kullanıcı kimlikle imzalamadan önce kullanıcı kimliğin içindeki ismin, anahtarın sahibine ait olup olmadığını kontrol etmelisiniz. "0" bu kontrolu yapmadığınız ve yapmayı da bilmediğiniz anlamındadır. "1" anahtar size sahibi tarafından gönderildi ama siz bu anahtarı başka kaynaklardan doğrulamadınız anlamındadır. Bu kişisel doğrulama için yeterlidir. En azında yarı anonim bir anahtar imzalaması yapmış olursunuz. "2" ayrıntılı bir inceleme yapıldığı anlamındadır. Örneğin parmakizi ve bir anahtarın foto kimliğiyle kullanıcı kimliğini karşılaştırmak gibi denetimleri yapmışsınızdır. "3" inceden inceye bir doğrulama anlatır. Örneğin, şahıstaki anahtarın sahibi ile anahtar parmak izini karşılaştırmışsınızdır ve anahtardaki kullanıcı kimlikte belirtilen isme ait bir basılı kimlik belgesindeki bir fotoğrafla şahsı karşılaştırmışsınızdır ve son olarak anahtar sahibinin e-posta adresini kendisinin kullanmakta olduğunu da denetlemişsinizdir. Burada 2 ve 3 için verilen örnekler *sadece* örnektir. Eninde sonunda bir anahtarı imzalarken "ayrıntılı" ve "inceden inceye" kontroller arasındaki ayrıma siz karar vereceksiniz. Bu kararı verebilecek durumda değilseniz "0" cevabını verin.Bu imzaları yürürlükten kaldırmak üzeresiniz: `%s' karakter kümesini kullanıyorsunuz. Bir v3 anahtarının son kullanma tarihini değiştiremezsiniz Son kullanıcı kimliğini silemezsiniz! Bir kullanıcı kimliği belirtmediniz. ("-r" kullanabilirsiniz) Bir anahtar parolası vermediniz - bu çok *kötü* bir fikir! Bir anahtar parolası istemediniz - bu *kötü* bir fikir! Nasıl isterseniz. Anahtar parolanızı bu programı "--edit-key" seçeneği ile kullanarak her zaman değiştirebilirsiniz. Bu kullanıcı kimliklerini %s anahtarı üzerinde imzalamışsınız: PGP2 tarzı bir anahtara tasarlanmış bir yürürlükten kaldırıcı ekleyemeyebilirsiniz. PGP2 tarzı bir anahtara bir foto kimliği ekleyemeyebilirsiniz. --pgp2 kipinde bir PGP 2.x anahtarlara bir OpenPGP imzası uygulanamayabilir. En az bir anahtar seçmelisiniz. En az bir kullanıcı kimliği seçmelisiniz. Sadece ve sadece bir anahtar seçmelisiniz. Gizli anahtarınızı korumak için bir Anahtar Parolanız olmalı. Gizli anahtarın kilidini açmak için bir anahtar parolasına ihtiyacınız var. Anahtarın sahibi: "%s" "%.*s" kullanıcısının gizli anahtarını açacak bir anahtar parolasına ihtiyaç var. %u bitlik %s anahtarı, kimlik %s, oluşturma tarihi %s%s Seçtiğiniz KULLANICI-KİMLİĞİ: "%s" Sertifikalama için bir sebep belirtmelisiniz. İçeriğine bağlı olarak bu listeden seçebilirsiniz: "Anahtar tehlikede" Yetkisiz kişilerin gizli anahtarınıza erişebildiğine inanıyorsanız bunu seçin. "Anahtar geçici" Mevcut anahtarı daha yeni bir anahtar ile değiştirmişseniz bunu seçin. "Anahtar artık kullanılmayacak" Anahtarı emekliye ayıracaksanız bunu seçin. "Kullanıcı kimliği artık geçersiz" Kullanıcı kimliği artık kullanılamayacak durumdaysa bunu seçin; genelde Eposta adresi geçersiz olduğunda kullanılır. "%s" üzerindeki imzanızın kullanım süresi dolmuş. "%s" üzerindeki imzanız dahili bir imza. Kararınız? Seçiminiz? Seçiminiz? (daha fazla bilgi için: '?'): Sisteminiz 2038 yılından sonraki tarihleri gösteremiyor. Ama emin olun ki 2106 yılına kadar elde edilebilecek. [tamamen][tanımsız][süresi doldu] [yürürlükten kaldırıldı] [bilinmeyen][Kullanıcı kimliği yok][dosyaismi][şöyle böyle][belirtilmedi][yürürlükten kaldırma][öz-imza][son derece][şüpheli]`%s' zaten sıkıştırılmış '%s' bir JPEG dosyası değil `%s' düzenli bir dosya değil - görülmedi '%s' geçerli bir karakter kümesi değil `%s' geçerli bir anahtar kimliği değil yönetici komutlarına erişim yapılandırılmamış `%s' eylemi `%s' anahtar sunucusu şeması ile desteklenmiyor bir akıllı karta bir anahtar eklerbir foto kimliği eklerbir yürürlükten kaldırma anahtarı eklerbir yardımcı anahtar eklerbir kullanıcı kimliği ekler`%s' seçeneği belirsiz anonim alıcı: %s gizli anahtarı deneniyor ... zırh başlığı: zırh: %s %s şifreli veri varsayılıyor hatalı imzanın bilinmeyen bir kritik bitten dolayı %s anahtarından kaynaklandığı sanılıyor "%s" içindeki veri imzalı kabul ediliyor MPI hatalıURI hatalısertifika hatalıanahtar hatalıanahtar parolası hatalıgenel anahtar hatalıgizli anahtar hatalıimza hatalıdaha az detaylıikilibuild_packet başarısız: %s iİ%s' anahtar zinciri arabellekleniyor %s erişilebilir değil - OpenPGP kartı geçersiz olabilir mi? '%s' erişilemiyor: %s "%s" kapatılamıyor: %s "%s" sunucusuna bağlanılamadı: %s "%s" oluşturulamıyor: %s '%s' yedek dosyası oluşturulamıyor: %s `%s' dizini oluşturulamıyor: %s `%s' için kilit oluşturulamıyor "core" oluşumu iptal edilemedi: %s bu önceden betik kipinde yapılamaz betik kipinde "--yes" olmaksızın bu yapılamaz pbits=%u qbits=%u ile bir asal sayı üretilemez %d bitten daha küçük bir asal sayı ürtilemez %d genel anahtar algoritması kullanılamadı %d karakterden daha uzun metin satırları okunamıyor `%s' kiltlenemedi `%s' açılamadı `%s' açılamıyor: %s imzalı veri '%s' açılamadı anahtar zinciri açılamadıbetik kipinde parola sorgulanamaz "%s" okunamıyor: %s `%s' durumlanamıyor: %s S2K kipi sayesinde bir simetrik ESK paketi kullanılamıyor "%s" yazılamıyor: %s iptal edildikullanıcı tarafından durduruldu iptal|iptalbir PGP 2.x tarzı anahtar bir tasarlanmış yürürlükten kaldırma anahtarı olarak atanamaz simetrik şifre için zayıf anahtarın önlenmesi mümkün olamadı: %d kere denendi! kart kalıcı olarak kilitli! kart-no: anahtarın alınacağı URL değiştirilirbir CA parmakizini değiştirirbir kartın PIN'ini değiştirirkart sahibinin ismini değiştirirkart sahibinin cinsiyetini değiştirirkart üzerindeki veriyi değiştiriranahtar için ya da seçili yardımcı anahtarlar için zamanaşımı tarihini değiştirirdil tercihlerini değiştiriroturum açma ismini değiştirirsahibiningüvencesini değiştiriranahtar parolasını değiştiririmzaları sınaroluşturulan imzanın denetimi başarısız: %s güvence veritabanı denetleniyor "checksum" hatasışifre algoritması %d%s bilinmiyor ya da iptal edilmiş : imi eksik"completes-needed" 0 dan büyük olmalı çelişen komutlar anahtar sunucusunun adresi çözümlenemedi ascii zırhlı çıktı oluştururoluşturuldu: %sveri kaydedilmedi; kaydetmek için "--output" seçeneğini kullanın zırhın kaldırılması başarısız: %s veri şifresini açar (öntanımlı)şifre çözme başarısız: %s Şifre çözme tamam seçili yardımcı anahtarları silerseçili kullanıcı kimlikleri silerseçili kullanıcı kimliklerden imzaları sileranahtar bloğu silinemedi: %s derinlik: %d geçerli: %3d imzalı: %3d güvenilir: %d-, %dq, %dn, %dm, %df, %du dizin `%s' oluşturuldu anahtarı iptal ederiptal edildihiçbir değişiklik yapmazanahtarı kullanıma sokarzırhlama başarısız: %s veriyi şifreler%lu anahtar parolası ile şifrelenmiş %s anahtarı ve %s kullanıcı kimliği ile şifrelenmiş %u bitlik %s anahtarı ve %s kullanıcı kimliği ile şifrelendi, %s tarihinde oluşturuldu 1 anahtar parolası ile şifrelenmiş bilinmeyen algoritma %d ile şifrelenmiş --pgp2 kipinde ileti şifrelemesi IDEA şifresi gerektirir sadece simetrik şifre ile şifreler`%s' oluşturulurken hata: %s `%s' anahtar zinciri oluşturulurken hata: %s anahtar parolası oluşturulurken hata: %s `%s' deki güvence kaydını ararken hata: %s geçerli anahtar bilgisi alınırken hata: %s yeni PIN alınırken hata: %s '%s' de hata: %s kuyruk satırında hata "%s" okunurken hata: %s uygulama verisi okunurken hata parmakizi DO okunurken hata anahtar bloğu okunurken hata: %s gizli anahtar bloğu "%s" okunurken hata oluştu: %s karttan CHV durumu alınırken hata "%s" anahtar zincirine yazarken hata oluştu: %s `%s' genel anahtar zincirine yazılırken hata oluştu: %s `%s' gixli anahtar zincirine yazılırken hata oluştu: %s mevcut anahtar konulacak zamanaşımına uğradıson kullanma tarihi: %sson kullanma tarihi: %sanahtarları gönderiranahtarları bir anahtar sunucusuna gönderirgizli anahtarların ihracına izin verilmez harici anahtar sunucusu çağrıları bu kurulumda desteklenmiyor güvensiz options dosyası yetkilerinden dolayı dış program çağrıları iptal edildi "TrustDB" güvence veritabanı başlangıç aşamasında başarısız: %s anahtar zinciri belleği yeniden oluşturulurken hata: %s oluşturma tarihinin saklanması başarısız oldu: %s parmakizinin saklanması başarısız oldu: %s anahtarın saklanması başarısız: %s dişikart URL'sinde belirtilmiş anahtarı alırdosya kapama hatasıdosya oluşturma hatasıdosya silme hatasıdosya mevcutdosya açma hatasıdosya okuma hatasıdosya isim değiştirme hatasıdosya yazma hatasıseçili kullanıcı kimliğini asıl olarak imlerzorlandıalıcının tercihleriyle çelişen %s (%d) simetrik şifre kullanımı zorlanıyor `%s' için %s de durum bilgisi alınamıyor: %s fstat(%d) %s de başarısız: %s tamamengenel hataPGP 2.x uyumlu iletiler üretiliryeni bir anahtar çifti üretirbir yürürlükten kaldırma sertifikası üretiryeni anahtarlar üretiranahtar üretimi başarısızlığa uğradı yeni anahtar üretiliyor gizli anahtarın güvenliği için eski tarz 16 bitlik sağlama toplamı üretiliyor gpg-agent bu oturumda kullanılamaz gpg-agent protokolü sürüm %d desteklenmiyor bBmMaAkKanahtarları bir anahtar sunucusundan indiriranahtarları indirir/katıştırırgizli anahtarı alımına izin verilmez girdi satırı %u ya çok uzun ya da sonunda satırsonu karakteri yok girdi satırı %d karakterden daha uzun S2K kipi geçersiz; 0, 1 veya 3 olmalı geçersiz argümangeçersiz zırhzırh başlığı geçersiz: geçersiz zırh: satır %d karakterden uzun açıkça okunabilen imza başlığı geçersiz araçizgisi escape'lı satır geçersiz: öntanımlı tercihler geçersiz öntanımlı sertifika seviyesi geçersiz; 0, 1, 2, ya da 3 olabilir dışsallaştırma seçenekleri geçersiz parmakizi geçersiz`%s' hash algoritması geçersiz içselleştirme seçenekleri geçersiz tercih dizgesindeki '%s' öğesi geçersiz anahtar zinciri geçersizanahtar sunucusu seçenekleri geçersiz anahtar sunucu protokolü geçersiz (bizimki %d!=eylemci %d) liste seçenekleri geçersiz asgari sertifika seviyesi geçersiz; 1, 2, ya da 3 olabilir geçersiz paketanahtar parolası geçersizkişisel şifre tercihleri geçersiz kişisel sıkıştırma tercihleri geçersiz kişisel özümleme tercihleri geçersiz geçersiz radix64 karakteri %02X atlandı proc_tree() içinde geçersiz kök paket saptandı OpenPGP kartının yapısı geçersiz (DO 0x93) değer hatalı doğrulama seçenekleri geçersiz tercihlerinizi güncellemenizi ve anahtar "%s" anahtar sunucusunda yok anahtar "%s" yok: %s anahtar %s: kullanıcı kimliği yok anahtar %s son derece güvenli olarak imlendi. anahtar %s güvence veritabanında birden fazla görünüyor anahtar %s %lu saniye sonra üretilmiş (zaman sapması veya saat problemi) anahtar %s bundan %lu saniye sonra üretilmiş (zaman sapması veya saat problemi) anahtar %s: "%s" %d yeni imza anahtar %s: "%s" %d yeni yardımcı anahtar anahtar %s: "%s" %d yeni kullanıcı kimliği anahtar %s: "%s" 1 yeni imza anahtar %s: %s 1 yeni yardımcı anahtar anahtar %s: "%s" 1 yeni kullanıcı kimliği anahtar %s: "%s" değişmedi anahtar %s: "%s" yürürlükten kaldırma sertifikası eklendi anahtar %s: "%s" yürürlükten kaldırma sertifikası alındı anahtar %s: PGP 2.x tarzı bir anahtar - atlandı anahtar %s: PKS yardımcı anahtar bozulması giderildi anahtar %s: güvenli anahtar olarak kabul edildi anahtar %s: öz-imzalı olmayan kullanıcı kimliği "%s" kabul edildi anahtar %s: zaten gizli anahtar zincirinde anahtar %s: özgün anahtar bloku bulunamadı: %s anahtar %s: özgün anahtar bloku okunamadı: %s anahtar %s: doğrudan anahtar imzası eklendi anahtar %s: bizim kopyamızla eşleşmiyor anahtar %s: çift kullanıcı kimliği saptandı - birleştirildi anahtar %s: yürürlükten kaldırma sertifikası geçersiz: %s - reddedildi anahtar %s: yürürlükten kaldırma sertifikası geçersiz: %s - atlandı anahtar %s: kullanıcı kimliği "%s" için öz-imza geçersiz anahtar %s: yardımcı anahtar garantileme geçersiz anahtar %s: yardımcı anahtar yürürlükten kaldırması geçersiz anahtar %s: yeni anahtar - atlandı anahtar %s: genel anahtar değil - yürürlükten kaldırma sertifikası uygulanamaz anahtar %s: güvenli anahtar için genel anahtar yok - atlandı anahtar %s: anahtarı garantilemek için yardımcı anahtar yok anahtar %s: anahtarı yürürlükten kaldırılacak yardımcı anahtar yok anahtar %s: yardımcı anahtarı garantileme imzası için yardımcı anahtar yok anahtar %s: anahtarı yürürlükten kaldırma imzası için yardımcı anahtar yok anahtar %s: kullanıcı kimliği yok anahtar %s: imza için kullanıcı kimliği yok anahtar %s: geçerli kullanıcı kimliği yok anahtar %s: imza gönderilebilir değil (0x%02X sınıfı) - atlandı anahtar %s: korunmamış - atlandı anahtar %s: genel anahtar "%s" alındı anahtar %s: genel anahtar yok: %s anahtar %s: çok sayıda yardımcı anahtar bağlantısı silindi anahtar %s: çok sayıda yardımcı anahtar yürürlükten kaldırması silindi anahtar %s: yürürlükten kaldırma sertifikası yanlış yerde - atlandı anahtar %s: gizli anahtar alındı anahtar %s: gizli anahtar yok: %s anahtar %s: geçersiz şifreli (%d) gizli anahtar - atlandı anahtar %s: genel anahtarsız gizli anahtar - atlandı anahtar %s: yardımcı anahtar atlandı anahtar %s: kullanıcı kimliği "%s" atlandı anahtar %s: yardımcı anahtar imzası yanlış yerde - atlandı anahtar %s: umulmayan imza sınıfı (0x%02X) - atlandı anahtar %s: genel anahtar algoritması desteklenmiyor anahtar %s: genel anahtar algoritması, kullanıcı kimliği "%s" için desteklenmiyor anahtar zaten mevcut anahtar ihracı başarısızlığa uğradı: %s anahtar üretimi tamamlandı (%d saniye) anahtar %lu saniye sonra üretilmiş (zaman sapması veya saat problemi) anahtar bundan %lu saniye sonra üretilmiş (zaman sapması veya saat problemi) anahtar güvenli olarak imlenmemiş - onu sahte RSÜ ile kullanmayın! anahtar, anahtar sunucusunda yok anahtar işlemi mümkün değil: %s `%s' anahtar zinciri oluşturuldu anahtar sunucusuyla iletişim hatası: %s anahtar sunucusu VERSION göndermiyor anahtar sunucusu hatasıanahtar sunucusu iç hatası anahtar sunucusundan alım başarısızlığa uğradı: %s anahtar sunucusunda tazeleme başarısız: %s anahtar sunucusunda arama başarısız: %s anahtar sunucusuna gönderim başarısızlığa uğradı: %s anahtar sunucusu zamanaşımına uğradı anahtar uzunluğu geçersiz; %u bit kullanılıyor anahtar uzunluğu %u bite yuvarlandı satır çok uzuntüm kullanılabilir veriyi listeleranahtar imzalarını listeler ve sınaranahtarı ve kullanıcı kimliğini gösteriranahtarları listeleranahtarları ve parmak izlerini listeleranahtarları ve imzaları listelertercihleri listeler (uzman)tercihleri listeler (ayrıntılı)gizli anahtarları listelerbağımsız bir imza yaparzaman damgası çelişkilerini uyarı olarak bildirirmake_keysig_packet başarısız: %s erkekCRC bozulmuş GPG_AGENT_INFO çevre değişkeni hatalı kullanıcı kimliği bozukşöyle böyle"marginals-needed" 1 den büyük olmalı "max-cert-depth" 1 ile 255 arasında olmalı PIN değiştirmek için menübir akıllı karttan bir yedekleme anahtarını taşırbir akıllı karttan bir anahtarı taşırbir anahtar imzası doğru yere taşınıyor hHaçıkça okunabilen imzalar dahil edildi ağ hatasıasla asla yeni yapılandırma dosyası `%s' oluşturuldu sonraki güvence veritabanı denetimi %s de hayırgrup tanımı '%s' içinde = işareti yok kat yokkarşılığı olan genel anahtar yok: `%s öntanımlı gizli anahtar zinciri yok: %s rasgele bayt elde etme modülü bulunamadı `%s' anahtar sunucusu şeması için eylemci yok bir anahtar sunucusu eylemi yok! bilinen bir anahtar sunucusu yok (--keyserver seçeneğini kullanın) bir güvence veritabanı denetimi gereksiz `%s' güvence modelli güvence veritabanı sınaması için gereksiz `%s' güvence modelli güvence veritabanı güncellemesi için gereksiz uzaktan uygulama çalıştırılması desteklenmiyor "%s" için yürürlükten kaldırma anahtarları yok gizli anahtar yok yardımcı genel anahtar %s için gizli yardımcı anahtar yok - yoksayılıyor imzalı veri yok böyle bir kullanıcı kimliği yokson derece güvenli bir anahtar yok geçerli OpenPGP verisi yok geçerli adresler yok yazılabilir bir anahtar zinciri yok: %s yazılabilir bir genel anahtar zinciri yok: %s yazılabilir bir gizli anahtar zinciri yok: %s bir bağımsız imza değil bir OpenPGP kartı değilşifrelenemedizorlanmadıişlenemedidesteklenmiyornot: "random_seed" dosyası boş bilgi: "random_seed" dosyası güncel değil tTtamam, biz anonim alıcıyız. tamam|tamamDEK'in eski kodlaması desteklenmiyor eski stil (PGP 2.x) imza güvenli bellek hazırlanmadan işlem yapmak mümkün değil seçenek dosyası "%s": %s özgün dosya adı = '%.*s' sahibinin güvencesi bilgisi temizlendi sahibiningüvencesi değeri kayıpbilinmeyen özümleme algoritması ile üretilmiş anahtar parolası %d ikinci kez yazdığınız anahtar parolası ilkiyle aynı değil; işlem tekrarlanacaklütfen bir --check-trustdb yapın lütfen bir E-posta adresi girin (isteğe bağlı ancak kuvvetle tavsiye edilir)Daha geniş bilgi edinmek için http://www.gnupg.org/documentation/faqs.html adresine bakınız lütfen yerine "%s%s" kullanınız anahtar üretilene kadar lütfen bekleyiniz .... '%s' tercihi yinelendi dosya sonu belirsiz (CRC içinde) dosya sonu belirsiz (kuyruk içinde) dosya sonu belirsiz (CRC yok) kart durumunu basarşifreli paketin elde edilmesinde sorun var vekil ile problem - vekil kullanımı iptal ediliyor üzerine yazmadan önce sorarkoruma algoritması %d%s desteklenmiyor koruma algoritması %d desteklenmiyor genel ve gizli anahtar üretildi ve imzalandı. genel anahtar %s imzadan %lu saniye daha yeni genel anahtar %s imzadan %lu saniye daha yeni. genel anahtar %s yok: %s genel anahtar şifre çözümü başarısız: %s genel anahtar gizli anahtarla uyuşmuyor! genel anahtarla şifreli veri: doğru DEK genel anahtar: %s genel anahtar bulunamadıson derece güvenli %s için genel anahtar yok çÇçıkbu menüden çıkzırh içinde uluslararası karakterler - büyük olasılıkla hatalı bir e-posta sunucusu kullanılmış olası algoritma uyuşmazlığı sorunlarından kaçınmak için bu anahtarı tekrar dağıtmanızı şiddetle öneririz. `%s' için okuma hatası: %s `%s'den okunuyor "%s"den seçenekler okunuyor standart girdiden okuyor ... yürürlükten kaldırma sebebi: %d anahtar %s adresinden tazeleniyor 1 anahtar %s adresinden tazeleniyor anahtarları genel anahtar zincirinden sileranahtarları gizli anahtar zincirinden siler`%s' > `%s' isim değişikliği başarısız: %s %s anahtarı %s adresinden isteniyor %1$s anahtarı %3$s sunucusunun %2$s adresinden isteniyor iç kaynak sınırıyanıt RSA modülü içermiyor yanıt RSA genel bileşenini içermiyor yanıt genel anahtar verisi içermiyor yürürlükten kaldırma açıklaması: anahtarı ya da seçili yardımcı anahtarları yürürlükten kaldırırSeçili tüm kullanıcı kimlikleri yürürlükten kaldırırSeçili tüm kullanıcı kimliklerdeki imzaları yürürlükten kaldırıryürürlükten kaldırıldı%s tarafından %s de yürürlükten kaldırılmış yürürlükten kaldırıldı: %s%u bite yuvarlandı kaydet ve çıkbir anahtar sunucusunda anahtarları arar%2$s adresinde "%1$s" aranıyor %3$s sunucusunun %2$s adresinde "%1$s" aranıyor gizli anahtar "%s" yok: %s gizli anahtar zaten bir kartın üzerinde saklı gizli anahtar kullanışsızgizli anahtar parçaları kullanım dışı anahtarın gizli parçaları kullanılabilir değil N yardımcı anahtarınıN kullanıcı kimliğini seçerseçilen sertifikalama özümleme algoritması geçersiz seçilen şifre algoritması geçersiz seçilen şifre algoritması geçersiz seçilen özümleme algoritması geçersiz %s anahtarı %s adresine gönderiliyor anahtar %1$s, %3$s sunucusunun %2$s adresine gönderiliyor Seçili kullanıcı kimlikler için tercih listesini belirler yönetici komutlarını gösterirparmakizini gösterirseçili foto kimlikleri gösterirbunu gösterirbir anahtarı imzalarbir anahtarı yerel olarak imzalarbir anahtarı düzenler ve imzalarseçilen kullanıcı kimliği imzalar [* ilgili komutlar için aşağıya bakın]kullanıcı kimlikleri yerel olarak imzalarseçili kullanıcı kimlikleri yürürlükten kaldırılamayan bir imzayla imzalarseçili kullanıcı kimlikleri bir güvence imzasıyla imzalarimza doğrulama engellendi şu ana kadar oluşturulan imzalar: %lu %s anahtarınızla %s%s%s de imzalandı imzalama başarısız: %s imzalanıyor:"%s" atlandı: %s "%s" atlandı: tekrarlanmış atlandı: genel anahtar zaten belirtilmiş atlandı: genel anahtar zaten öntanımlı alıcı olarak ayarlanmış atlandı: gizli anahtar zaten var %d. tür blok atlandı kullanıcı kimliği "%s" için v3 öz-imzası atlanıyor tek başına yürürlükten kaldırma - uygulamak için "gpg --import" kullanın 0x%02x sınıfı tek başına imza anahtarın kart üzerinde saklanması başarısız: %s %d tipi alt paket kritik bit kümesine sahip `%s' için simetrik şifreleme başarısız: %s dış uygulama çalıştırılırken sistem hatası: %s anahtarlar bu anahtarlıktan alınırmetinkipibelirtilen sertifika güvence adresi geçersiz belirtilen anahtar sunucusu adresi geçersiz belirtilen imza güvence adresi geçersiz imza doğrulanamadı. İmza dosyasının (.sig veya .asc) komut satırında verilecek ilk dosya olması gerektiğini lütfen hatırlayın. genel anahtar "%s" için bir gizli anahtar var! bu, imzalar için güvenli olmayan PGP üretimi bir ElGamal anahtarı!bu anahtar zaten onu üreten tarafından yürürlükten kaldırılmıştı bu kayıp bir öz-imza yüzünden meydana gelebilir bu ileti %s tarafından kullanılamayabilir bu platformda, dış uygulamalar çalıştırılırken geçici dosyalar gerekiyor zaman damgası çelişkiligenel ve gizli anahtar listeleri arasında yer değiştiririmza zorlama PIN'i bayrağını değiştirirçok fazla şifreleme tercihi çok fazla sıkıştırma tercihi çok fazla özümleme tercihi pk belleğinde çok fazla girdi - iptal edildi güvence veritabanı hatasıgüvence veritabanının %lu. kaydı %d istek türünde değil güvence veritabanı kaydı %lu, istek tipi %d: okuma başarısız: %s güvence veritabanının %lu. kaydı, %d türünde: yazma başarısız: %s güvencesi: %sgüvence veritabanı %lu kaydı: erişim başarısız: %s güvence veritabanı %lu kaydı: yazma başarısız (n=%d): %s güvence veritabanı işlemi çok uzun güvence veritabanı: erişim başarısız: %s güvence veritabanı: okuma başarısız (n=%d): %s güvence veritabanı: eşzamanlama başarısız: %s son derecefoto kimliği gösterilemiyor! dış uygulama çalıştırılamıyor '%s' çalıştırılamıyor: %s '%s' kabuğu çalıştırılamıyor: %s JPEG dosyası `%s' açılamıyor: %s dış uygulamanın yanıtı okunamıyor: %s çalıştırılabilirlerin patikası %s yapılamıyor güvence veritabanının sürüm kaydı güncellenemedi: yazma başarısız: %s tüm anahtarları şifrelemek için IDEA şifresi kullanılamaz. bilinmeyen güvence modeli (%d) kullanılamıyor - %s güvence modeli varsayılıyor Sıkıştırılmamış|yoktanımsızbeklenmeyen zırh: beklenmeyen veritamamlanmamış şifre algoritmasıtamamlanmamış genel anahtar algoritmasıbilinmeyenbilinmeyen şifre algoritmasıbilinmeyen sıkıştırma algoritmasıyapılandırma öğesi '%s' bilinmiyor öntanımlı alıcı "%s" bilinmiyor bilinmeyen özümleme algoritmasıbilinmeyen anahtar koruma algoritması `%s' seçeneği bilinmiyor bilinmeyen paket tipibilinmeyen sıkıştırma algoritması bilinmeyen genel anahtar algoritmasıbilinmeyen imza sınıfıbilinmeyen sürümDış uygulamamnın doğal olmayan çıkışı belirtilmemişdesteklenmeyen URIgenel anahtar algoritması kullanışsızgenel anahtar kullanımdışıgizli anahtar kullanımdışıanahtarları bir anahtar sunucusundan güncellergüncelleme başarısız: %s gizliyi güncelleme başarısız: %s güvence veritabanını güncellerkullanımı: %skullanımı: gpg [seçenekler] çıktı dosyası olarak kullanılırkurallı metin kipini kullanıronu önce "--delete-secret-keys" ile silmelisiniz. kesin OpenPGP davranışı etkin olurimzalamak ya da şifre çözmek için bu kullanıcı kimliği kullanılırkullanıcı kimliği "%s" zaten iptal edilmişti Kullanıcı kimliği: "%s" %s güvence modeli kullanılıyor %s şifrelemesi kullanılıyor yardımcı anahtar %s, asıl anahtar %s yerine kullanılıyor geçerliliği: %sçok detaylıCHV%d doğrulaması başarısız oldu: %s bir imzayı doğrularanahtar zayıfzayıf anahtar oluşturuldu - yeniden deneniyor bir şifreli oturum anahtarı (%d) için tuhaf uzunluk %s olmasından dolayı güvensiz bellekle çalıştırılmayacak doğrudan imza yazılıyor anahtarı garantileyen imzayı yazıyor genel anahtarı `%s'e yazıyor gizli anahtar koçanı `%s'e yazılıyor gizli anahtarı `%s'e yazıyor öz-imza yazılıyor "%s"e yazıyor standart çıktıya yazıyor yanlış gizli anahtar kullanılmışeEevet--pgp2 kipinde sadece PGP 2.x tarzı anahtarlarla açık imzalama yapabilirsiniz --pgp2 kipinde sadece PGP 2.x tarzı anahtarlarla ayrık imza yapabilirsiniz --pgp2 kipinde sadece 2048 bitlik RSA anahtarları ile şifreleme yapabilirsiniz --pgp2 kipindeyken sadece ayrık veya sade imzalar yapabilirsiniz tercihlerinizi böyle güncelleyemezsiniz: gpg --edit-key %s updpref save --pgp2 kipinde aynı anda hem imzalama hem de şifreleme yapamazsınız bir anahtarı kendisini yürürlükten kaldıracak anahtar olarak kullanamazsınız %s kipindeyken --symmetric --encrypt kullanamazsınız --s2k-mode 0 ile --symmetric --encrypt kullanamazsınız %s kipindeyken --symmetric --sign --encrypt kullanamazsınız. --s2k-mode 0 ile --symmetric --sign --encrypt kullanamazsınız bir yazılım hatası buldunuz ... (%s:%d) %2$s kipindeyken %1$s kullanılamayabilir. %2$s kipindeyken '%1$s' şifreleme algoritması kullanılamaz %2$s kipindeyken '%1$s' sıkıştırma algoritması kullanılamaz %2$s kipindeyken '%1$s' özümleme algoritması kullanılamaz --pgp2 ile çalışırken veri yolu yerine dosyaları kullanmalısınız. |AN|Yeni Yönetici PIN'i|FD|durum bilgisini bu FD'ye yazar|İSİM|İSİM için şifreleme yapar|N|Yeni PIN|N|sıkıştırma seviyesi N olarak ayarlanır (0 ise sıkıştırma yapılmaz)|[dosya]|açıkça okunabilen bir imza yapar|[dosya]|bir imza yapar|algo [dosyalar]|ileti özümlemelerini gösterirgnupg-1.4.20/po/de.po0000644000175000017500000075635312635457217011244 00000000000000# GnuPG german translation # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, # 2006, 2007 Free Software Foundation, Inc. # Walter Koch , 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007 # msgid "" msgstr "" "Project-Id-Version: gnupg-1.4.8\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2015-12-19 15:38+0100\n" "Last-Translator: Walter Koch \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "Eine Primzahl mit pbits=%u und qbits=%u kann nicht erzeugt werden\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "Eine Primzahl mit weniger als %d Bits kann nicht erzeugt werden\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "Kein Modul zum sammeln von Entropie vorhanden\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "'%s' kann nicht gesperrt werden: %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "es wird auf die Sperre `%s' gewartet...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "'%s' kann nicht geöffnet werden: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "Status von '%s' ist nicht feststellbar: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "'%s' ist keine normale Datei - sie bleibt unbeachtet\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "Hinweis: 'random_seed'-Datei ist leer\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" "WARNUNG: Falsche Größe der 'random_seed'-Datei - sie wird nicht verwendet\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "'%s' ist unlesbar: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "Hinweis: 'random_seed'-Datei bleibt unverändert\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "'%s' kann nicht erzeugt werden: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "kann '%s' nicht schreiben: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "kann '%s' nicht schließen: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "WARNUNG: Der Zufallsgenerator erzeugt keine echten Zufallszahlen!\n" #: cipher/random.c:894 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" # translated by wk #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Zufall wird gesammelt. Bitte arbeiten Sie an etwas anderem, da\n" "so die Qualität der Zufallszahlen erhöht werden kann.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Es sind nicht genügend Zufallswerte vorhanden. Bitte führen Sie andere\n" "Arbeiten durch, damit das Betriebssystem weitere Entropie sammeln kann!\n" "(Es werden noch %d Byte benötigt.)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "Der Fingerabdruck kann nicht gespeichert werden: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "Das Erzeugungsdatum konnte nicht gespeichert werden: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "Lesen des öffentlichen Schlüssels fehlgeschlagen: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "Die Antwort enthält keine öffentliche Schlüssel-Daten\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "Die Antwort enthält das RSA-Modulus nicht\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "Antwort enthält den öffentlichen RSA-Exponenten nicht\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "Die Standard-PIN wird für %s benutzt\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "Die Standard-PIN konnte für %s nicht benutzt werden: %s - sie wird vorläufig " "ausgeschaltet\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Bitte die PIN eingeben%%0A[Sigs erzeugt: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Bitte die PIN eingeben" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN-Callback meldete Fehler: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN für CHV%d ist zu kurz; die Mindestlänge beträgt %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "Prüfung des CHV%d fehlgeschlagen: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "Fehler beim Holen des CHV-Status' von der Karte\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "Karte ist dauerhaft gesperrt!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "Noch %d Admin-PIN-Versuche, bis die Karte dauerhaft gesperrt ist\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Bitte die Admin PIN eingeben%%0A[verbleibende Versuche: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Bitte die Admin PIN eingeben" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "Zugriff auf Admin-Befehle ist nicht eingerichtet\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Der Rückstellcode ist nicht oder nicht mehr vorhanden\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Bitte geben Sie den Rückstellcode der karte ein" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Der Rückstellcode ist zu kurz; die Mindestlänge beträgt %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Neuer Rückstellcode" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Neue Admin-PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Neue PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "Fehler beim Abfragen einer neuen PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "Fehler beim Lesen der Anwendungsdaten\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "Fehler beim Lesen des Fingerabdrucks DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "Schlüssel existiert bereits\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "Existierender Schlüssel wird ersetzt werden\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "neue Schlüssel werden erzeugt\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "der neue Schlüssel wird geschrieben\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "Erzeugungsdatum fehlt\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "Der RSA Modulus fehlt oder ist nicht %d Bits lang\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "Der öffentliche Exponent fehlt oder ist zu groß (mehr als %d Bit)\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "Die RSA Primzahl %s fehlt oder ist nicht %d Bits lang\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "Speichern des Schlüssels fehlgeschlagen: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "Bitte warten, der Schlüssel wird erzeugt ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "Schlüsselerzeugung fehlgeschlagen\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "Schlüsselerzeugung abgeschlossen (%d Sekunden)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "Ungültige Struktur der OpenPGP-Karte (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "Der Fingerabdruck auf der Karte entspricht nicht dem angeforderten.\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "Die Hashmethode %s wird von der Karte nicht unterstützt\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "Anzahl bereits erzeugter Signaturen: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "Die Überprüfung der Admin PIN ist momentan durch einen Befehl verboten " "worden\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "Kann auf %s nicht zugreifen - ungültige OpenPGP-Karte?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "ASCII-Hülle: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "Ungültige ASCII-Hülle" #: g10/armor.c:459 msgid "armor header: " msgstr "ASCII-Hülle: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "Ungültige Klartextsignatur-Einleitung\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "Unbekannter Header in der ASCII-Hülle: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "verschachtelte Klartextunterschriften\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "Unerwartete ASCII-Hülle: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "Ungültige mit Bindestrich \"escapte\" Zeile: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "Ungültiges \"radix64\" Zeichen %02x übersprungen\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "vorzeitiges Dateiende (keine Prüfsumme)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "vorzeitiges Dateiende (innerhalb der Prüfsumme)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "Falsch aufgebaute Prüfsumme\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "Prüfsummenfehler; %06lx - %06lx\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "vorzeitiges Dateiende (im Nachsatz)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "Fehler in der Nachsatzzeile\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "Keine gültigen OpenPGP-Daten gefunden.\n" #: g10/armor.c:1292 #, 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:1296 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 Email-Transporter(\"MTA\") die Ursache\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP Karte ist nicht vorhanden: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "OpenPGP Karte Nr. %s erkannt\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "Dies kann im Batchmodus nicht durchgeführt werden.\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Dieser Befehl ist nur für Karten der Version 2 verfügbar.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Ihre Auswahl? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[nicht gesetzt]" #: g10/card-util.c:512 msgid "male" msgstr "männlich" #: g10/card-util.c:513 msgid "female" msgstr "weiblich" #: g10/card-util.c:513 msgid "unspecified" msgstr "unbestimmt" #: g10/card-util.c:540 msgid "not forced" msgstr "nicht zwingend" #: g10/card-util.c:540 msgid "forced" msgstr "zwingend" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Fehler: Nur reines ASCII ist derzeit erlaubt.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Fehler: Das Zeichen \"<\" kann nicht benutzt werden.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Fehler: Doppelte Leerzeichen sind nicht erlaubt.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Familienname des Kartenbesitzers:" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Vorname des Kartenbesitzers:" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" "Fehler: Der zusammengesetzte Name ist zu lang (Grenze beträgt %d Zeichen).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL um den öffentlichen Schlüssel zu holen: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Fehler: URL ist zu lang (Grenze beträgt %d Zeichen).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "Fehler beim Zuteilen genügenden Speichers: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "Fehler beim Lesen von `%s': %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "Fehler beim Schreiben von `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Logindaten (Kontenname): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Fehler: Logindaten sind zu lang (Grenze beträgt %d Zeichen).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Geheime DO-Daten: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Fehler: Geheime DO-Daten sind zu lang (Grenze beträgt %d Zeichen).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Spracheinstellungen" #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Fehler: Ungültige Länge der Einstellungs-Zeichenfolge.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Fehler: Ungültige Zeichen in der Einstellungs-Zeichenfolge\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Geschlecht: (Männlich (M), Weiblich (F) oder Leerzeichen): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Fehler: ungültige Antwort.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA-Fingerabdruck: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Fehler: ungültig geformter Fingerabdruck.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "Schlüsseloperation nicht möglich: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "Keine gültige OpenPGP-Karte" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "Fehler beim Holen der aktuellen Schlüsselinfo: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Vorhandenen Schlüssel ersetzen? (j/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "Hinweis: Es kann nicht sichergestellt werden, daß die Karte die\n" " angeforderte Schlüssellange unterstützt. Falls die \n" " Schlüsselerzeugung fehlschlägt, sollten Sie in den Unterlagen\n" " zu Ihrer Karte nachsehen, welche Längen möglich sind.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Welche Länge wünschen Sie für den Signaturschlüssel? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Welche Länge wünschen Sie für den Verschlüsselungsschlüssel? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Welche Länge wünschen Sie für den Authentifizierungsschlüssel? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "aufgerundet auf %u Bit\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s-Schlüssellängen müssen im Bereich %u-%u sein\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" "Die Karten wird nun umkonfiguriert um Schlüssel von %u Bit zu erzeugen\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "Fehler bem Ändern der Länge des Schlüssels %d auf %u Bits: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" "Sicherung des Verschlüsselungsschlüssel außerhalb der Karte erstellen? (J/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "ACHTUNG: Auf der Karte sind bereits Schlüssel gespeichert!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Vorhandene Schlüssel ersetzen? (j/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Bitte beachten: Die Werkseinstellung der PINs sind\n" " PIN = `%s' Admin-PIN = `%s'\n" "Sie sollten sie mittels des Befehls --change-pin ändern\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Bitte wählen Sie die Art des Schlüssel, der erzeugt werden soll:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Unterschriften-Schlüssel\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Verschlüsselungs-Schlüssel\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Authentisierungs-Schlüssel\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Ungültige Auswahl.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Wählen Sie den Speicherort für den Schlüssel:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "Unbekanntes Schlüssel-Schutzverfahren\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "Geheime Teile des Schlüssels sind nicht vorhanden\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "Geheimer Schlüssel ist bereits auf einer Karte gespeichert\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "Fehler beim Schreiben des Schlüssels auf die Karte: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "Menü verlassen" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "Zeige Admin-Befehle" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "Diese Hilfe zeigen" #: g10/card-util.c:1687 msgid "list all available data" msgstr "Alle vorhandenen Daten auflisten" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "Kartenbesitzernamen ändern" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "Schlüssel-holen-URL ändern" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "Holen des Schlüssels mittels der URL auf der Karte" #: g10/card-util.c:1693 msgid "change the login name" msgstr "Ändern der Logindaten" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "Ändern der Spracheinstellungen" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "Ändern des Geschlechts des Kartenbesitzers" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "Ändern des CA-Fingerabdrucks" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "Umschalten des \"Signature-force-PIN\"-Schalters" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "neue Schlüssel erzeugen" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "Menü für Ändern oder Entsperren der PIN" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "überprüfe die PIN und liste alle Daten auf" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "Blockierung der PIN mittels des Rückstellcodes aufheben" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/card> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "nur-Admin Befehl\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Admin-Befehle sind erlaubt\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Admin-Befehle sind nicht erlaubt\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Ungültiger Befehl (versuchen Sie's mal mit \"help\")\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "Kartenleser ist nicht vorhanden\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" "Legen Sie die Karte ein und drücken Sie 'Eingabe'; drücken Sie 'c' um " "abzubrechen: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "Auswahl der OpenPGP-Card-Anwendung fehlgeschlagen: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Bitte entfernen Sie die Karte und legen stattdessen die Karte mit folgender " "Seriennummer ein:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" "Drücken Sie 'Eingabe' wenn fertig; oder drücken Sie 'c' um abzubrechen: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Geben Sie die neue Admin-PIN ein: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Geben Sie die neue PIN ein: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Geben Sie die Admin-PIN ein: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Geben Sie die PIN ein: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Geben Sie die PIN nochmal ein: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN wurde nicht richtig wiederholt; noch einmal versuchen" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "'%s' kann nicht geöffnet werden\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output funktioniert nicht bei diesem Befehl\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "Schlüssel \"%s\" nicht gefunden: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "Fehler beim Lesen des Schlüsselblocks: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(es sei denn, Sie geben den Schlüssel mittels Fingerprint an)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "dies kann im Batchmodus ohne \"--yes\" nicht durchgeführt werden\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Diesen Schlüssel aus dem Schlüsselbund löschen? (j/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Dies ist ein privater Schlüssel! - Wirklich löschen? (j/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "löschen des Schlüsselblocks fehlgeschlagen: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "Der \"Ownertrust\" wurde gelöscht\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "" "Es gibt einen privaten Schlüssel zu diesem öffentlichen Schlüssel \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" "Verwenden Sie zunächst den Befehl \"--delete-secret-key\", um ihn zu " "entfernen.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "Fehler beim Erzeugen der Passphrase: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "" "Aufgrund des S2K-Modus kann ein symmetrisches ESK Paket nicht benutzt " "werden\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "benutze Cipher %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' ist bereits komprimiert\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "WARNUNG: '%s' ist eine leere Datei.\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "Im --pgp2-Modus kann nur für RSA-Schlüssel mit maximal 2048 Bit " "verschlüsselt werden\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "Lesen von '%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "Die IDEA-Verschlüsselung kann nicht mit allen Zielschlüsseln verwendet " "werden.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "WARNUNG: Erzwungene Verwendung des symmetrischen Verschlüsselungsverfahren " "%s (%d) verletzt die Empfängervoreinstellungen\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "WARNUNG: Erzwungenes Kompressionsverfahren %s (%d) verletzt die " "Empfängervoreinstellungen.\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "Erzwungene Verwendung des symmetrischen Verschlüsselungsverfahren %s (%d) " "verletzt die Empfängervoreinstellungen\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "Die Benutzung von %s ist im %s-Modus nicht erlaubt.\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s verschlüsselt für: %s\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s verschlüsselte Daten\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "Mit unbekanntem Verfahren verschlüsselt %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "Warnung: Botschaft wurde mit einem unsicheren Schlüssel verschlüsselt.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "Problem beim Bearbeiten des verschlüsselten Pakets\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "Ausführen von externen Programmen wird nicht unterstützt\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "Verzeichnis `%s' kann nicht erzeugt werden: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "Ausführen von externen Programmen ist ausgeschaltet, da die Dateirechte " "nicht sicher sind\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "Diese Plattform benötigt temporäre Dateien zur Ausführung von externen\n" "Programmen\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "Ausführen des Programms `%s' nicht möglich: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "Ausführen der Shell `%s' nicht möglich: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "Fehler beim Aufruf eines externen Programms: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "ungewöhnliches Ende eines externen Programms\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "Externes Programm konnte nicht aufgerufen werden\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "Die Ausgabe des externen Programms konnte nicht gelesen werden: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" "WARNUNG: die temporäre Datei (%s) `%s' konnte nicht entfernt werden: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "WARNUNG: Temporäres Verzeichnis `%s' kann nicht entfernt werden: %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "Exportiere auch Unterschriften die als nicht exportfähig markiert sind" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "Exportiere Attribute von User-IDs (i.A. Foto-IDs)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "Exportiere Widerrufsschlüssel die als \"sensitiv\" markiert sind" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "Die Passphrase von exportierten Unterschlüssel entfernen" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "Unbrauchbare Teile des Schlüssel während des Exports entfernen" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "Während des Exports soviel wie möglich vom Schlüssel entfernen" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "Exportieren geheimer Schlüssel ist nicht erlaubt\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "Schlüssel %s: ungeschützt - übersprungen\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "Schlüssel %s: PGP 2.x-artiger Schlüssel - übersprungen\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "Schlüssel %s: Schlüsselmaterial ist auf einer Karte - übersprungen\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "Ein ungeschützter Unterschlüssel wird exportiert werden\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "Entfernen des Schutzes für des Unterschlüssel fehlgeschlagen: %s\n" # translated by wk #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "WARNUNG: Der geheime Schlüssel %s hat keine einfache SK-Prüfsumme\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "WARNUNG: Nichts exportiert\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Befehle:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[Datei]|Eine Unterschrift erzeugen" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[Datei]|Eine Klartextunterschrift erzeugen" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "Eine abgetrennte Unterschrift erzeugen" #: g10/gpg.c:393 msgid "encrypt data" msgstr "Daten verschlüsseln" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "Daten symmetrisch verschlüsseln" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "Daten entschlüsseln (Voreinstellung)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "Signatur prüfen" #: g10/gpg.c:401 msgid "list keys" msgstr "Liste der Schlüssel" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "Liste der Schlüssel und ihrer Signaturen" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "Signaturen der Schlüssel auflisten und prüfen" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "Liste der Schlüssel und ihrer \"Fingerabdrücke\"" #: g10/gpg.c:406 msgid "list secret keys" msgstr "Liste der geheimen Schlüssel" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "Ein neues Schlüsselpaar erzeugen" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "Schlüssel aus dem öff. Schlüsselbund entfernen" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "Schlüssel aus dem geh. Schlüsselbund entfernen" #: g10/gpg.c:411 msgid "sign a key" msgstr "Schlüssel signieren" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "Schlüssel nur für diesen Rechner signieren" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "Unterschreiben oder bearbeiten eines Schl." #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "Ein Schlüsselwiderruf-Zertifikat erzeugen" #: g10/gpg.c:416 msgid "export keys" msgstr "Schlüssel exportieren" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "Schlüssel zu einem Schlü.server exportieren" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "Schlüssel von einem Schlü.server importieren" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "Schlüssel auf einem Schlü.server suchen" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "alle Schlüssel per Schlü.server aktualisieren" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "Schlüssel importieren/kombinieren" #: g10/gpg.c:429 msgid "print the card status" msgstr "den Karten-Status ausgeben" #: g10/gpg.c:430 msgid "change data on a card" msgstr "Daten auf einer Karte ändern" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "PIN einer Karte ändern" #: g10/gpg.c:440 msgid "update the trust database" msgstr "Ändern der \"Trust\"-Datenbank" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [Dateien]|Message-Digests für die Dateien ausgeben" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Optionen:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "Ausgabe mit ASCII-Hülle versehen" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAME|Verschlüsseln für NAME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "Mit dieser User-ID signieren" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "Kompressionsstufe auf N setzen (0=keine)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "Textmodus benutzen" #: g10/gpg.c:486 msgid "use as output file" msgstr "Als Ausgabedatei benutzen" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "Detaillierte Informationen" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "Keine wirklichen Änderungen durchführen" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "vor Überschreiben nachfragen" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "OpenPGP-Verhalten strikt beachten" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "PGP 2.x-kompatibele Botschaften erzeugen" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Auf der \"man\"-Seite ist eine vollständige Liste aller Befehle und " "Optionen)\n" #: g10/gpg.c:576 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/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Berichte über Programmfehler bitte in englisch an .\n" "Sinn- oder Schreibfehler in den deutschen Texten bitte an .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Aufruf: gpg [Optionen] [Dateien] (-h für Hilfe)" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Unterstützte Verfahren:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Öff. Schlüssel: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Verschlü.: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Komprimierung: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "Aufruf: gpg [Optionen] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "Widersprüchliche Befehle\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "Kein '='-Zeichen in der Gruppendefinition gefunden `%s'\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "WARNUNG: Unsicheres Besitzverhältnis des Home-Verzeichnis `%s'\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "WARNUNG: Unsicheres Besitzverhältnis der Konfigurationsdatei `%s'\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "WARNUNG: Unsichere Zugriffsrechte des Home-Verzeichnis `%s'\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "WARNUNG: Unsichere Zugriffsrechte der Konfigurationsdatei `%s'\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "WARNUNG: Unsicheres Besitzverhältnis des umgebenden Verzeichnisses für Home-" "Verzeichnis `%s'\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "WARNUNG: Unsicheres Besitzverhältnis des umgebenden Verzeichnisses der " "Konfigurationsdatei `%s'\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "WARNUNG: Unsichere Zugriffsrechte des umgebenden Verzeichnisses des Home-" "Verzeichnisses `%s'\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "WARNUNG: Unsichere Zugriffsrechte des umgebenden Verzeichnisses der " "Konfigurationsdatei `%s'\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "Unbekanntes Konfigurationselement `%s'\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "Anzeigen der Foto-ID in den Schlüssellisten" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "Zeige Richtlinien-URL während der Unterschriftenlisten" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "Alle Notationen mit den Signaturen anlisten" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "Zeige IETF-Standard" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "Zeige anwenderseitige Notationen in den Unterschriftenlisten" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "Der bevorzugten Schlüsselserver mit den Signaturen anlisten" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "Zeige Gültigkeit der User-ID in den Schlüssellisten" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "Zeige widerrufene und verfallene User-ID in den Schlüssellisten" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "Zeige widerrufene und verfallene Unterschlüssel in den Schlüssellisten" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "Anzeigen des Schlüsselbundes, in dem ein Schlüssel drin ist" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "Das Ablaufdatum mit den Signaturen anlisten" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "Hinweis: Alte voreingestellte Optionendatei '%s' wurde ignoriert\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "Hinweis: Keine voreingestellte Optionendatei '%s' vorhanden\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "Optionendatei '%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "Optionen werden aus '%s' gelesen\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "Hinweis: %s ist nicht für den üblichen Gebrauch gedacht!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "`%s' ist kein gültiges Unterschriftablaufdatum\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "`%s' ist kein gültiger Zeichensatz\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "Schlüsselserver-URL konnte nicht analysiert werden\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: ungültige Schlüsselserver-Option\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "Ungültige Schlüsselserver-Option\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: ungültige Import-Option\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "Ungültige Import-Option\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: ungültige Export-Option.\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "Ungültige Export-Option\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: ungültige Listen-Option.\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "Ungültige Listen-Option\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "Zeige die Foto-ID während der Unterschriftenprüfung" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "Zeige Richtlinien-URLs während der Unterschriftenprüfung" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "Alle Notationen während der Signaturprüfung anzeigen" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "Zeige IETF-Standard-Notationen während der Unterschriftenprüfung" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "Zeige anwenderseitige Notationen während der Unterschriftenprüfung" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "" "Die URL für den bevorzugten Schlüsselserver während der " "Unterschriftenprüfung anzeigen" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "Die Gültigkeit der User-ID während der Unterschriftenprüfung anzeigen" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" "Zeige widerrufene und verfallene User-IDs während der Unterschriftenprüfung" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "Zeige nur die Hauptuser-ID während der Unterschriftenprüfung" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "Prüfe Unterschriftengültigkeit mittels PKA-Daten" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "werte das Vertrauen zu Unterschriften durch gültige PKA-Daten auf" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: ungültige Überprüfungs-Option.\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "Ungültige Überprüfungs-Option\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "Der Ausführungspfad konnte nicht auf %s gesetzt werden.\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: ungültige \"auto-key-locate\"-Liste\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "ungültige \"auto-key-locate\"-Liste\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "WARNUNG: %s ersetzt %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s kann nicht zusammen mit %s verwendet werden!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s zusammen mit %s ist nicht sinnvoll!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "HINWEIS: %s ist in dieser Version nicht vorhanden\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "Startet nicht mit unsicherem Speicher, wegen Option %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "Im --pgp2-Modus können Sie nur abgetrennte oder Klartextunterschriften " "machen\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "" "Im --pgp2-Modus können Sie nicht gleichzeitig unterschreiben und " "verschlüsseln\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "Im --pgp2-Modus müssen Sie Dateien benutzen und können keine Pipes " "verwenden.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" "Verschlüsseln einer Botschaft benötigt im --pgp2-Modus die IDEA-" "Verschlüsselung\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "Das ausgewählte Hashverfahren ist ungültig\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "Das ausgewählte Komprimierungsverfahren ist ungültig\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "Das ausgewählte Hashverfahren ist ungültig\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed müssen größer als 0 sein\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed müssen größer als 1 sein\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth muß im Bereich 1 bis 255 liegen\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "ungültiger \"default-cert-level\"; Wert muß 0, 1, 2 oder 3 sein\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "ungültiger \"min-cert-level\"; Wert muß 0, 1, 2 oder 3 sein\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "Hinweis: Vom \"simple S2K\"-Modus (0) ist strikt abzuraten\n" #: g10/gpg.c:3139 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/gpg.c:3146 msgid "invalid default preferences\n" msgstr "ungültige Standard-Voreinstellungen\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "ungültige private Verschlüsselungsvoreinstellungen\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "ungültige private Hashvoreinstellungen\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "ungültige private Komprimierungsvoreinstellungen\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s arbeitet noch nicht mit %s zusammen\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "" "Die Benutzung des Verschlüsselungsverfahren %s ist im %s-Modus nicht " "erlaubt.\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "Die Benutzung der Hashmethode %s ist im %s-Modus nicht erlaubt.\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "" "Die Benutzung des Komprimierverfahren %s ist im %s-Modus nicht erlaubt.\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "Die Trust-DB kann nicht initialisiert werden: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "WARNUNG: Empfänger (-r) angegeben ohne Verwendung von Public-Key-Verfahren\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [Dateiname]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [Dateiname]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "Symmetrische Entschlüsselung von `%s' fehlgeschlagen: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [Dateiname]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [Dateiname]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" "--symmetric --encrypt kann nicht zusammen mit --s2k-mode 0 verwendet werden\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "Im %s-Modus kann --symmetric --encrypt nicht verwendet werden.\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [Dateiname]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [Dateiname]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [Dateiname]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" "--symmetric --sign --encrypt kann nicht zusammen mit --s2k-mode 0 verwendet " "werden\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "" "Im %s-Modus kann --symmetric --sign --encrypt nicht verwendet werden.\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [Dateiname]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [Dateiname]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [Dateiname]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key User-ID" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key User-ID" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key User-ID [Befehle]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [User-ID] [Schlüsselbund]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "Senden an Schlüsselserver fehlgeschlagen: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "Empfangen vom Schlüsselserver fehlgeschlagen: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "Schlüsselexport fehlgeschlagen: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "Suche auf dem Schlüsselserver fehlgeschlagen: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "Refresh vom Schlüsselserver fehlgeschlagen: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "Entfernen der ASCII-Hülle ist fehlgeschlagen: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "Anbringen der ASCII-Hülle ist fehlgeschlagen: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "Ungültiges Hashverfahren '%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[Dateiname]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Auf geht's - Botschaft eintippen ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "Die angegebene Zertifikat-Richtlinien-URL ist ungültig\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "Die angegebene Unterschriften-Richtlinien-URL ist ungültig\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "Die angegebene URL des bevorzugten Schlüsselserver ist ungültig\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "zu viele Einträge im pk-Cache - abgeschaltet\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[User-ID nicht gefunden]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "" "Schlüssel %s: geheimer Schlüssel ohne öffentlichen Schlüssel - übersprungen\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "`%s' automatisch via %s geholt\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Ungültiger Schlüssel %s, gültig gemacht per --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "" "Kein privater Unterschlüssel zum öffentlichen Unterschlüssel %s - ignoriert\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "der Unterschlüssel %s wird anstelle des Hauptschlüssels %s verwendet\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "Etwas weniger Infos" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "Schlüssel aus diesem Schlüsselbund nehmen" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "differierende Zeitangaben sind kein Fehler" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|Statusinfo auf FD (Dateihandle) ausgeben" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Aufruf: gpgv [Optionen] [Dateien] (-h für Hilfe)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Aufruf: gpgv [Optionen] [Dateien]\n" "Überprüft Signaturen gegen bekannte vertrauenswürdige Schlüssel\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Sie müssen selbst entscheiden, welchen Wert Sie hier eintragen; dieser Wert\n" "wird niemals an eine dritte Seite weitergegeben. Wir brauchen diesen Wert,\n" "um das \"Netz des Vertrauens\" aufzubauen. Dieses hat nichts mit dem\n" "(implizit erzeugten) \"Netz der Zertifikate\" zu tun." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Um das Web-of-Trust aufzubauen muß GnuPG wissen, welchen Schlüsseln\n" "uneingeschränkt vertraut wird. Das sind üblicherweise die Schlüssel\n" "auf deren geheimen Schlüssel Sie Zugriff haben.\n" "Antworten Sie mit \"yes\" um diesen Schlüssel uneingeschränkt zu vertrauen\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Wenn Sie diesen nicht vertrauenswürdigen Schlüssel trotzdem benutzen " "wollen,\n" "so antworten Sie mit \"ja\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Geben Sie die User-ID dessen ein, dem Sie die Botschaft senden wollen." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Wählen Sie das zu verwendende Verfahren.\n" "\n" "DSA (alias DSS) ist der \"Digital Signature Algorithm\" und kann nur für\n" "Unterschriften genutzt werden.\n" "\n" "Elgamal ist ein Verfahren nur für Verschlüsselung.\n" "\n" "RSA kann sowohl für Unterschriften als auch für Verschlüsselung genutzt\n" "werden.\n" "\n" "Der erste Schlüssel (Hauptschlüssel) muß immer ein Schlüssel sein, mit dem\n" "unterschrieben werden kann." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Normalerweise ist es nicht gut, denselben Schlüssel zum unterschreiben\n" "und verschlüsseln zu nutzen. Dieses Verfahren sollte in speziellen\n" "Anwendungsgebieten benutzt werden. Bitte lassen Sie sich zuerst von \n" "einem Sicherheitsexperten beraten." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Wählen Sie die gewünschte Schlüssellänge" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Geben Sie \"ja\" oder \"nein\" ein" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Geben Sie den benötigten Wert so an, wie er im Prompt erscheint.\n" "Es ist zwar möglich ein \"ISO\"-Datum (JJJJ-MM-DD) einzugeben, aber man\n" "erhält dann ggfs. keine brauchbaren Fehlermeldungen - stattdessen versucht\n" "der Rechner den Wert als Intervall (von-bis) zu deuten." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Geben Sie den Namen des Schlüsselinhabers ein" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" "Geben Sie eine Email-Adresse ein. Dies ist zwar nicht unbedingt notwendig,\n" "aber sehr empfehlenswert." #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Geben Sie - bei Bedarf - einen Kommentar ein" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N um den Namen zu ändern.\n" "K um den Kommentar zu ändern.\n" "E um die Email-Adresse zu ändern.\n" "F um mit der Schlüsselerzeugung fortzusetzen.\n" "B um die Schlüsselerzeugung abbrechen." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" "Geben Sie \"ja\" (oder nur \"j\") ein, um den Unterschlüssel zu erzeugen." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Wenn Sie die User-ID eines Schlüssels beglaubigen wollen, sollten Sie " "zunächst\n" "sicherstellen, daß der Schlüssel demjenigen gehört, der in der User-ID " "genannt\n" "ist. Für Dritte ist es hilfreich zu wissen, wie gut diese Zuordnung " "überprüft\n" "wurde.\n" "\n" "\"0\" zeigt, daß Sie keine bestimmte Aussage über die Sorgfalt der \n" " Schlüsselzuordnung machen.\n" "\n" "\"1\" Sie glauben, daß der Schlüssel der benannten Person gehört,\n" " aber Sie konnten oder nahmen die Überpüfung überhaupt nicht vor.\n" " Dies ist hilfreich für eine \"persona\"-Überprüfung, wobei man den\n" " Schlüssel eines Pseudonym-Trägers beglaubigt\n" "\n" "\"2\" Sie nahmen eine flüchtige Überprüfung vor. Das heißt Sie haben z.B.\n" " den Schlüsselfingerabdruck kontrolliert und die User-ID des Schlüssels\n" " anhand des Fotos geprüft.\n" "\n" "\"3\" Sie haben eine ausführlich Kontrolle des Schlüssels vorgenommen.\n" " Das kann z.B. die Kontrolle des Schlüsselfingerabdrucks mit dem\n" " Schlüsselinhaber persönlich vorgenommen haben; daß Sie die User-ID des\n" " Schlüssel anhand einer schwer zu fälschenden Urkunde mit Foto (wie z.B.\n" " einem Paß) abgeglichen haben und schließlich per Email-Verkehr die\n" " Email-Adresse als zum Schlüsselbesitzer gehörig erkannt haben.\n" "\n" "Beachten Sie, daß diese Beispiele für die Antworten 2 und 3 *nur* Beispiele\n" "sind. Schlußendlich ist es Ihre Sache, was Sie unter \"flüchtig\" oder\n" " \"ausführlich\" verstehen, wenn Sie Schlüssel Dritter beglaubigen.\n" "\n" "Wenn Sie nicht wissen, wie Sie antworten sollen, wählen Sie \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Geben Sie \"ja\" (oder nur \"j\") ein, um alle User-IDs zu beglaubigen" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Geben Sie \"ja\" (oder nur \"j\") ein, um diese User-ID zu LÖSCHEN.\n" "Alle Zertifikate werden dann auch weg sein!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "" "Geben Sie \"ja\" (oder nur \"j\") ein, um diesen Unterschlüssel zu löschen" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Dies ist eine gültige Beglaubigung für den Schlüssel. Es ist normalerweise\n" "unnötig sie zu löschen. Sie ist möglicherweise sogar notwendig, um einen\n" "Trust-Weg zu diesem oder einem durch diesen Schlüssel beglaubigten " "Schlüssel\n" "herzustellen." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Diese Beglaubigung kann nicht geprüft werden, da Sie den passenden " "Schlüssel\n" "nicht besitzen. Sie sollten die Löschung der Beglaubigung verschieben, bis\n" "sie wissen, welcher Schlüssel verwendet wurde. Denn vielleicht würde genau\n" "diese Beglaubigung den \"Trust\"-Weg komplettieren." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Diese Beglaubigung ist ungültig. Es ist sinnvoll sie aus Ihrem\n" "Schlüsselbund zu entfernen." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Diese Beglaubigung bindet die User-ID an den Schlüssel. Normalerweise ist\n" "es nicht gut, solche Beglaubigungen zu entfernen. Um ehrlich zu sein:\n" "Es könnte dann sein, daß GnuPG diesen Schlüssel gar nicht mehr benutzen " "kann.\n" "Sie sollten diese Eigenbeglaubigung also nur dann entfernen, wenn sie aus\n" "irgendeinem Grund nicht gültig ist und eine zweite Beglaubigung verfügbar " "ist." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Ändern der Voreinstellung aller User-IDs (oder nur der ausgewählten)\n" "auf die aktuelle Liste der Voreinstellung. Die Zeitangaben aller " "betroffenen\n" "Eigenbeglaubigungen werden um eine Sekunde vorgestellt.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Bitte geben Sie die Passphrase ein. Dies ist ein geheimer Satz \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Um sicher zu gehen, daß Sie sich bei der Eingabe 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:238 msgid "Give the name of the file to which the signature applies" msgstr "" "Geben Sie den Namen der Datei an, zu dem die abgetrennte Unterschrift gehört" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Geben Sie \"ja\" ein, wenn Sie die Datei überschreiben möchten" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Geben Sie bitte einen neuen Dateinamen ein. Falls Sie nur die\n" "Eingabetaste betätigen, wird der (in Klammern angezeigte) Standarddateiname\n" "verwendet." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Sie sollten einen Grund für die Zertifizierung angeben. Je nach\n" "Zusammenhang können Sie aus dieser Liste auswählen:\n" " \"Schlüssel wurde kompromittiert\"\n" " Falls Sie Grund zu der Annahme haben, daß nicht berechtigte Personen\n" " Zugriff zu Ihrem geheimen Schlüssel hatten\n" " \"Schlüssel ist überholt\"\n" " Falls Sie diesen Schlüssel durch einem neuen ersetzt haben.\n" " \"Schlüssel wird nicht mehr benutzt\"\n" " Falls Sie diesen Schlüssel zurückgezogen haben.\n" " \"User-ID ist nicht mehr gültig\"\n" " Um bekanntzugeben, daß die User-ID nicht mehr benutzt werden soll.\n" " So weist man normalerweise auf eine ungültige Emailadresse hin.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Wenn Sie möchten, können Sie hier einen Text eingeben, der darlegt, warum\n" "Sie diesen Widerruf herausgeben. Der Text sollte möglichst knapp sein.\n" "Eine Leerzeile beendet die Eingabe.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Keine Hilfe vorhanden." #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Keine Hilfe für '%s' vorhanden." #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "Importiere Signaturen, die als nicht exportfähig markiert sind" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "Beseitige Beschädigung durch den Schlüsselserver während des Imports" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "die \"Owner trust\" Werte beim Import nicht löschen" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "ändern Sie die \"Trust\"-Datenbank nach dem Import nicht" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "" "beim Import eines geheimen Schlüssels einen öffentliche Schlüssel erzeugen" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "Nur Änderungen bereits existierender Schlüssel vornehmen" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "entferne nach dem Import unbrauchbare Teile des Schlüssels" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "nach dem Import soviel wie möglich aus dem Schlüssel entfernen" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "überspringe den Block vom Typ %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu Schlüssel bislang bearbeitet\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Anzahl insgesamt bearbeiteter Schlüssel: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " ignorierte neue Schlüssel: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " ohne User-ID: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importiert: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " unverändert: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " neue User-IDs: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " neue Unterschlüssel: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " neue Signaturen: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " neue Schlüsselwiderrufe: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " gelesene geheime Schlüssel: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " geheime Schlüssel importiert: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " unveränderte geh. Schl.: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " nicht importiert: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " Signaturen bereinigt: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " User-IDs bereinigt: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "WARNUNG: Schlüssel %s hat Einstellungen zu nicht verfügbaren\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " Algorithmen dieser User-IDs:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": Einstellungen des Verschlüsselungsverfahren %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": Einstellungen der Hashmethode %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": Einstellungen der Komprimierungsverfahren %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "es ist extrem empfehlenswert Ihre Einstellungen zu ändern und\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "diesen Schlüssel wieder zu verteilen, um mögliche Probleme durch unpassende " "Verfahrenskombinationen zu vermeiden\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" "Sie können Ihren Einstellungen mittels \"gpg --edit-key %s updpref save\" " "ändern\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "Schlüssel %s: Keine User-ID\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "Schlüssel \"%s\": %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "durch Importfilter zurückgewiesen" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "Schlüssel %s: PKS Unterschlüsseldefekt repariert\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "Schlüssel %s: Nicht eigenbeglaubigte User-ID `%s' übernommen\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "Schlüssel %s: Keine gültigen User-IDs\n" #: g10/import.c:872 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:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "Schlüssel %s: Öffentlicher Schlüssel nicht gefunden: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "Schlüssel %s: neuer Schlüssel - übersprungen\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "kein schreibbarer Schlüsselbund gefunden: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "Schreiben nach '%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "Fehler beim Schreiben des Schlüsselbundes `%s': %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "Schlüssel %s: Öffentlicher Schlüssel \"%s\" importiert\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "Schlüssel %s: Stimmt nicht mit unserer Kopie überein\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "Schlüssel %s: der originale Schlüsselblock wurde nicht gefunden: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "Schlüssel %s: Lesefehler im originalen Schlüsselblock: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "Schlüssel %s: \"%s\" 1 neue User-ID\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "Schlüssel %s: \"%s\" %d neue User-IDs\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "Schlüssel %s: \"%s\" 1 neue Signatur\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "Schlüssel %s: \"%s\" %d neue Signaturen\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "Schlüssel %s: \"%s\" 1 neuer Unterschlüssel\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "Schlüssel %s: \"%s\" %d neue Unterschlüssel\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "Schlüssel %s: \"%s\" %d Signaturen bereinigt\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "Schlüssel %s: \"%s\" %d Signaturen bereinigt\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "Schlüssel %s: \"%s\" %d User-ID bereinigt\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "Schlüssel %s: \"%s\" %d User-IDs bereinigt\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "Schlüssel %s: \"%s\" nicht geändert\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "Geheimer Schlüssel \"%s\": %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "Importieren geheimer Schlüssel ist nicht erlaubt\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "" "Schlüssel %s: geheimer Schlüssel mit ungültiger Verschlüsselung %d - " "übersprungen\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "Kein voreingestellter geheimer Schlüsselbund: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "Schlüssel %s: geheimer Schlüssel importiert\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "Schlüssel %s: Ist bereits im geheimen Schlüsselbund\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "Schlüssel %s: geheimer Schlüssel nicht gefunden: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "Schlüssel %s: Kein öffentlicher Schlüssel - der Schlüsselwiderruf kann nicht " "angebracht werden\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "Schlüssel %s: Ungültiges Widerrufzertifikat: %s - zurückgewiesen\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "Schlüssel %s: \"%s\" Widerrufzertifikat importiert\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "Schlüssel %s: Keine User-ID für Signatur\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "Schlüssel %s: Nicht unterstütztes Public-Key-Verfahren für User-ID \"%s\"\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "Schlüssel %s: Ungültige Eigenbeglaubigung für User-ID \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "Schlüssel %s: Nicht unterstütztes Public-Key-Verfahren\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "Schlüssel %s: Ungültige \"direct-key\"-Signatur\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "Schlüssel %s: Kein Unterschlüssel für die Unterschlüsselanbindung\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "Schlüssel %s: Ungültige Unterschlüssel-Anbindung\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "Schlüssel %s: Mehrfache Unterschlüssel-Anbindung entfernt\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "Schlüssel %s: Kein Unterschlüssel für Schlüsselwiderruf\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "Schlüssel %s: Ungültiger Unterschlüsselwiderruf\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "Schlüssel %s: Mehrfacher Unterschlüsselwiderruf entfernt\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "Schlüssel %s: User-ID übersprungen \"%s\"\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "Schlüssel %s: Unterschlüssel übersprungen\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "" "Schlüssel %s: Nicht exportfähige Unterschrift (Klasse %02x) - übersprungen\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "Schlüssel %s: Widerrufzertifikat an falschem Platz - übersprungen\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "Schlüssel %s: Ungültiges Widerrufzertifikat: %s - übersprungen\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "" "Schlüssel %s: Unterschlüssel-Widerrufzertifikat an falschem Platz - " "übersprungen\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "" "Schlüssel %s: unerwartete Unterschriftenklasse (0x%02x) - übersprungen\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "Schlüssel %s: Doppelte User-ID entdeckt - zusammengeführt\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "WARNUNG: Schlüssel %s ist u.U. widerrufen: hole Widerrufschlüssel %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "WARNUNG: Schlüssel %s ist u.U. widerrufen: Widerrufschlüssel %s ist nicht " "vorhanden\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "Schlüssel %s: \"%s\" Widerrufzertifikat hinzugefügt\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "Schlüssel %s: \"direct-key\"-Signaturen hinzugefügt\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" "Hinweis: Eine Schlüsselseriennr stimmt nicht mit derjenigen der Karte " "überein\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "Hinweis: Hauptschlüssel ist online und auf der Karte gespeichert\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "Hinweis: Zweitschlüssel ist online und auf der Karte gespeichert\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "Fehler beim Erzeugen des Schlüsselbundes `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "Schlüsselbund `%s' erstellt\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "Schlüsselblockhilfsmittel`%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "Schlüsselbund-Cache konnte nicht neu erzeugt werden: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[Widerruf]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[Eigenbeglaubigung]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 falsche Beglaubigung\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d falsche Beglaubigungen\n" #: g10/keyedit.c:348 g10/keylist.c:394 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:350 g10/keylist.c:396 #, 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:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 Beglaubigung aufgrund von Fehler nicht geprüft\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d Beglaubigungen aufgrund von Fehlern nicht geprüft\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "Eine User-ID ohne gültige Eigenbeglaubigung entdeckt\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d User-IDs ohne gültige Eigenbeglaubigung entdeckt\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Bitte entscheiden Sie, in wieweit Sie diesem User zutrauen,\n" "Schlüssel anderer User korrekt zu prüfen (durch Vergleich\n" "mit Lichtbildausweisen, Vergleich der Fingerabdrücke aus\n" "unterschiedlichen Quellen ...)?\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Ich vertraue ihm marginal\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Ich vertraue ihm vollständig\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Geben Sie bitte die Tiefe dieser \"Trust\"-Unterschrift ein.\n" "Eine Tiefe größer 1 erlaubt dem zu unterschreibenden Schlüssel\n" "Trust-Signatures für Sie zu machen.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Geben Sie bitte eine Domain ein, um die Unterschrift einzuschränken,\n" "oder nur die Eingabetaste für keine Domain\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "User-ID \"%s\" ist widerrufen." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Wollen Sie ihn immer noch beglaubigen? (j/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Beglaubigen ist nicht möglich.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "User-ID \"%s\" ist abgelaufen." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "User-ID \"%s\" ist nicht eigenbeglaubigt." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "User-ID \"%s\" ist unterschreibbar." #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Wirklich unterschreiben? (j/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Die Eigenbeglaubigung von \"%s\"\n" "ist eine PGP 2.x artige Signatur.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Soll sie zu einer OpenPGP Eigenbeglaubigung geändert werden? (j/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Ihre derzeitige Beglaubigung von \"%s\"\n" "ist abgelaufen.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Soll eine neue Beglaubigung als Ersatz für die abgelaufene erstellt werden? " "(J/n) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Die derzeitige Beglaubigung von \"%s\"\n" "ist nur für diesen Rechner gültig.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" "Soll sie zu einer voll exportierbaren Beglaubigung erhoben werden? (j/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" wurde bereits durch Schlüssel %s lokal beglaubigt\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" wurde bereits durch Schlüssel %s beglaubigt\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Wollen Sie ihn immer noch wieder beglaubigen? (j/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Nichts zu beglaubigen für Schlüssel %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Dieser Schlüssel ist verfallen!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Dieser Schlüssel wird %s verfallen.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Soll Ihre Beglaubigung zur selben Zeit verfallen? (J/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln unterschrieben " "werden\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Dies würde den Schlüssel für PGP 2.x unbrauchbar machen\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Wie genau haben Sie überprüft, ob der Schlüssel, den Sie jetzt beglaubigen\n" "wollen, wirklich der o.g. Person gehört?\n" "Wenn Sie darauf keine Antwort wissen, geben Sie \"0\" ein.\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Ich antworte nicht.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Ich habe es überhaupt nicht überprüft.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Ich habe es flüchtig überprüft.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Ich habe es sehr sorgfältig überprüft.%s\n" # translated by wk #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Ihre Auswahl? ('?' für weitere Informationen): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Sind Sie wirklich sicher, daß Sie vorstehenden Schlüssel mit Ihrem\n" "Schlüssel \"%s\" (%s) beglaubigen wollen\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Dies wird eine Eigenbeglaubigung sein.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "WARNUNG: Die Unterschrift wird nicht als nicht-exportierbar markiert " "werden.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "WARNUNG: Die Unterschrift wird nicht als unwiderrufbar markiert werden.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Die Unterschrift wird als nicht-exportfähig markiert werden.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Die Unterschrift wird als unwiderrufbar markiert werden.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Ich habe diesen Schlüssel überhaupt nicht überprüft.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Ich habe diesen Schlüssel flüchtig überprüft.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Ich habe diesen Schlüssel sehr sorgfältig überprüft.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Wirklich unterschreiben? (j/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "Beglaubigung fehlgeschlagen: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "Der Schlüssel enthält nur \"stub\"- oder \"on-card\"-Schlüsselelemente- " "keine Passphrase ist zu ändern.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Dieser Schlüssel ist nicht geschützt.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Geheime Teile des Hauptschlüssels sind nicht vorhanden.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Geheime Teile des Hauptschlüssels sind auf der Karte gespeichert.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Schlüssel ist geschützt.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Dieser Schlüssel kann nicht editiert werden: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Geben Sie die neue Passphrase für diesen geheimen Schlüssel ein.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "Passphrase wurde nicht richtig wiederholt; noch einmal versuchen" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Sie wollen keine Passphrase - dies ist *nicht* zu empfehlen!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Möchten Sie dies wirklich tun? (j/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "schiebe eine Beglaubigung an die richtige Stelle\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "speichern und Menü verlassen" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "Fingerabdruck des Schlüssels anzeigen" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "Schlüssel und User-IDs auflisten" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "User-ID N auswählen" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "Unterschlüssel N auswählen" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "Signaturen prüfen" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "die ausgewählten User-IDs beglaubigen [* für verwandte Befehle s.u.]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "Die ausgewählte User-ID nur für diesen Rechner beglaubigen" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "Die ausgewählte User-ID mit einer \"Trust\"-Unterschrift beglaubigen" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "die ausgewählten User-ID unwiderrufbar beglaubigen" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "Eine User-ID hinzufügen" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "Eine Foto-ID hinzufügen" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "ausgewählte User-IDs entfernen" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "einen Unterschlüssel hinzufügen" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "der Smartcard einen Schlüssel hinzufügen" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "einen Schlüssel auf die Smartcard schieben" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "eine Sicherungskopie des Schlüssels auf die Smartcard schieben" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "ausgewählte Unterschlüssel entfernen" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "Einen Widerrufschlüssel hinzufügen" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "Beglaubigungen der ausgewählten User-IDs entfernen" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "" "das Verfallsdatum des Schlüssel oder ausgewählter Unterschlüssels ändern" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "User-ID als Haupt-User-ID kennzeichnen" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "Umschalten zwischen dem Auflisten geheimer und öffentlicher Schlüssel" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "Liste der Voreinstellungen (für Experten)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "Liste der Voreinstellungen (ausführlich)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "ändern der Voreinstellungsliste der ausgewählten User-IDs" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "Setze die URL des bevorzugten Schlüsselservers für die ausgewählten User-IDs" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "Eine Notation für die ausgewählten User-IDs setzen" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "Die Passphrase ändern" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "Den \"Owner trust\" ändern" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "Beglaubigungen der ausgewählten User-IDs widerrufen" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "Ausgewählte User-ID widerrufen" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "Schlüssel oder ausgewählten Unterschlüssel widerrufen" #: g10/keyedit.c:1439 msgid "enable key" msgstr "Schlüssel anschalten" #: g10/keyedit.c:1440 msgid "disable key" msgstr "Schlüssel abschalten" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "ausgewählte Foto-IDs anzeigen" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "unbrauchbare User-IDs verkleinern und unbrauchbare Unterschriften aus dem " "Schlüssel entfernen" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" "unbrauchbare User-IDs verkleinern und alle Unterschriften aus dem Schlüssel " "entfernen" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "Fehler beim Lesen des geheimen Schlüsselblocks \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Geheimer Schlüssel ist vorhanden.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Hierzu wird der geheime Schlüssel benötigt.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Bitte verwenden sie zunächst den Befehl \"toggle\"\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* Dem `sign'-Befehl darf ein `l' für nicht exportfähige Signaturen " "vorangestellt werden (\"lsign\"),\n" " ein `t' für 'Trust'-Unterschrift (\"tsign\"), ein `nr' für unwiderrufbare " "Unterschriften\n" " (\"nrsign\"), oder jede Kombination davon (\"ltsign\", \"tnrsign\", etc.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Schlüssel wurde widerrufen." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Wirklich alle User-IDs beglaubigen? (j/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Tip: Wählen Sie die User-IDs, die beglaubigt werden sollen\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Unbekannter Unterschriftentyp `%s'\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Dieser Befehl ist im %s-Modus nicht erlaubt.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Zumindestens eine User-ID muß ausgewählt werden.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Die letzte User-ID kann nicht gelöscht werden!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Möchten Sie alle ausgewählten User-IDs wirklich entfernen? (j/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Diese User-ID wirklich entfernen? (j/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Den Hauptschlüssel wirklich verschieben? (j/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Sie müssen genau einen Schlüssel auswählen.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Befehl benötigt einen Dateinamen als Argument\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "'%s' kann nicht geöffnet werden: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Fehler beim Lesen der Sicherungskopie des Schlüssels von `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Zumindestens ein Schlüssel muß ausgewählt werden.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Möchten Sie die ausgewählten Schlüssel wirklich entfernen? (j/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Möchten Sie diesen Schlüssel wirklich entfernen? (j/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Möchten Sie wirklich alle ausgewählten User-IDs widerrufen? (j/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Diese User-ID wirklich widerrufen? (j/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Möchten Sie diesen Schlüssel wirklich vollständig widerrufen? (j/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "" "Möchten Sie die ausgewählten Unterschlüssel wirklich widerrufen? (j/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Möchten Sie diesen Schlüssel wirklich widerrufen? (j/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "\"Owner trust\" kann nicht gesetzt werden, wenn eine anwendereigene 'Trust'-" "Datenbank benutzt wird\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Setze die Liste der Voreinstellungen auf:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Möchten Sie die Voreinstellungen der ausgewählten User-IDs wirklich ändern? " "(j/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Die Voreinstellungen wirklich ändern? (j/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Änderungen speichern? (j/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Beenden ohne zu speichern? (j/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "Änderung fehlgeschlagen: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "Änderung des Geheimnisses fehlgeschlagen: %s\n" #: g10/keyedit.c:2245 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:2346 msgid "Digest: " msgstr "Digest: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Eigenschaften: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Keyserver no-modify" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Bevorzugter Schlüsselserver:" #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "\"Notationen\": " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "PGP 2.x-artige Schlüssel haben keine Voreinstellungen.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Dieser Schlüssel wurde am %s von %s Schlüssel %s widerrufen\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "" "Dieser Schlüssel könnte durch %s mit Schlüssel %s widerrufen worden sein" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(empfindlich)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "erzeugt: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "widerrufen: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "verfallen: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "verfällt: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "Aufruf: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "Vertrauen: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "Gültigkeit: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Hinweis: Dieser Schlüssel ist abgeschaltet" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "Kartennummer:" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Bitte beachten Sie, daß ohne einen Programmneustart die angezeigte\n" "Schlüsselgültigkeit nicht notwendigerweise korrekt ist.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "widerrufen" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "verfallen" # translated by wk #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "WARNUNG: Keine User-ID ist als primär markiert. Dieser Befehl kann\n" "dazu führen, daß eine andere User-ID als primär angesehen wird.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "WARNUNG: Ihr Unterschlüssel zum Verschlüsseln wird bald verfallen.\n" #: g10/keyedit.c:3008 msgid "You may want to change its expiration date too.\n" msgstr "Bitte erwägen Sie, dessen Verfallsdatum auch zu ändern.\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen einer Foto-ID " "könnte\n" " bei einigen PGP-Versionen zur Zurückweisung des Schlüssels führen.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Wollen Sie ihn immer noch hinzufügen? (j/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Sie können einem PGP2-artigen Schlüssel keine Foto-ID hinzufügen.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Diese korrekte Beglaubigung entfernen? (j/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Diese ungültige Beglaubigung entfernen= (j/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Diese unbekannte Beglaubigung entfernen? (j/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Eigenbeglaubigung wirklich entfernen? (j/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "%d Beglaubigungen entfernt.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "%d Beglaubigungen entfernt.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nichts entfernt.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "ungültig" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "User-ID \"%s\" bereits verkleinert: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "User-ID \"%s\": %d Signatur entfernt\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "User-ID \"%s\": %d Signaturen entfernt\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "User-ID \"%s\": bereits minimiert\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "User-ID \"%s\": bereits sauber\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "WARNUNG: Dies ist ein PGP2-artiger Schlüssel. Hinzufügen eines vorgesehenen\n" " Widerrufers könnte bei einigen PGP-Versionen zur Zurückweisung\n" " des Schlüssels führen.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" "Sie können einem PGP2-artigen Schlüssel keine vorgesehenen Widerrufer " "hinzufügen.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Geben sie die User-ID des designierten Widerrufers ein: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" "Ein PGP 2.x-artiger Schlüssel kann nicht als vorgesehener Widerrufer " "eingetragen werden\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "Ein Schlüssel kann nicht sein eigener vorgesehener Widerrufer werden\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "Dieser Schlüssel wurde bereits als ein Widerrufer vorgesehen\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "WARNUNG: Einen Schlüssel als vorgesehenen Widerrufer zu deklarieren, kann " "nicht rückgangig gemacht werden!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Möchten Sie diesen Schlüssel wirklich als vorgesehenen Widerrufer festlegen? " "(j/N): " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Bitte entfernen Sie die Auswahl von den geheimen Schlüsseln.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Bitte wählen Sie höchstens einen Unterschlüssel aus.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Ändern des Verfallsdatums des Unterschlüssels.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Ändern des Verfallsdatums des Hauptschlüssels.\n" #: g10/keyedit.c:3646 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:3662 msgid "No corresponding signature in secret ring\n" msgstr "Keine entsprechende Signatur im geheimen Schlüsselbund\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "Signaturunterschlüssel %s ist bereits rücksigniert\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" "Unterschlüssel %s ist des Unterschreibens nicht mächtig und braucht deshalb " "keine Rücksignatur\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Bitte genau eine User-ID auswählen.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "Überspringen der v3 Eigenbeglaubigung von User-ID \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Geben Sie die URL Ihres bevorzugten Schlüsselservers ein: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Wollen Sie ihn wirklich ersetzen? (j/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Wollen Sie ihn wirklich löschen? (j/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Geben Sie die \"Notation\" ein: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Fortfahren (j/N)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Keine User-ID mit Index %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Keine User-ID mit Hash %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Kein Unterschlüssel mit Index %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "User-ID: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " beglaubigt durch Ihren Schlüssel %s am %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (nicht-exportierbar)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Diese Unterschrift ist seit %s verfallen.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Wollen Sie ihn immer noch widerrufen? (j/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Ein Widerrufszertifikat für diese Unterschrift erzeugen (j/N)" #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Nicht von Ihnen signiert.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Sie haben folgende User-IDs des Schlüssels %s beglaubigt:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (unwiderrufbar)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "widerrufen durch Ihren Schlüssel %s um %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Es werden nun folgende Beglaubigungen entfernt:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Wirklich ein Unterschrift-Widerrufszertifikat erzeugen? (j/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "Kein geheimer Schlüssel\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "User-ID \"%s\" ist bereits widerrufen\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "WARNUNG: Eine User-ID-Unterschrift datiert mit %d Sekunden aus der Zukunft\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Schlüssel %s ist bereits widerrufen\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Unterschlüssel %s ist bereits widerrufen\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Anzeigen einer %s Foto-ID (Größe %ld) für Schlüssel %s (User-ID %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "Voreinstellung `%s' ist doppelt\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "zu viele Verschlüsselungeinstellungen\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "zu viele Hashvoreinstellungen\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "zu viele Komprimierungsvoreinstellungen\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "Ungültiges Feld `%s' in der Voreinstellungszeichenkette\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "Die \"Direct Key Signature\" wird geschrieben\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "Die Eigenbeglaubigung wird geschrieben\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "Schreiben der \"key-binding\" Signatur\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "Ungültige Schlüssellänge; %u Bit werden verwendet\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "Schlüssellänge auf %u Bit aufgerundet\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Unterschr." #: g10/keygen.c:1365 msgid "Certify" msgstr "Zertif." #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Verschl." #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Authentisierung" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "UuVvAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Mögliche Vorgänge eines %s-Schlüssels: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Derzeit erlaubte Vorgänge: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Umschalten der Unterschreibfähigkeit\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Umschalten der Verschlüsselungsfähigkeit\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Umschalten der Authentisierungsfähigkeit\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Beenden\n" #: g10/keygen.c:1489 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:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA und RSA (voreingestellt)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA und Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (nur unterschreiben/beglaubigen)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (nur signieren/beglaubigen)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (nur verschlüsseln)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (nur verschlüsseln)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (Leistungsfähigkeit selber einstellbar)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (Leistungsfähigkeit selber einstellbar)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s-Schlüssel können zwischen %u und %u Bit lang sein.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Welche Länge wünschen Sie für den Unterschlüssel? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Welche Schlüssellänge wünschen Sie? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Die verlangte Schlüssellänge beträgt %u Bit\n" #: g10/keygen.c:1722 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Bitte wählen Sie, wie lange die Beglaubigung gültig bleiben soll.\n" " 0 = Schlüssel verfällt nie\n" " = 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:1754 msgid "Key is valid for? (0) " msgstr "Wie lange bleibt der Schlüssel gültig? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Wie lange bleibt die Beglaubigung gültig? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "Ungültiger Wert.\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Schlüssel verfällt nie\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Signature verfällt nie\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Key verfällt am %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Unterschrift verfällt am %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Ihr Rechner kann Daten jenseits des Jahres 2038 nicht anzeigen.\n" "Trotzdem werden Daten bis 2106 korrekt verarbeitet.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Ist dies richtig? (j/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the 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 Email-Adresse in dieser Form auf:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Ihr Name (\"Vorname Nachname\"): " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Ungültiges Zeichen im Namen\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Der Name darf nicht mit einer Ziffer beginnen.\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Der Name muß min. 5 Zeichen lang sein.\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Email-Adresse: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Diese Email-Adresse ist ungültig\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Kommentar: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Ungültiges Zeichen im Kommentar.\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Sie benutzen den Zeichensatz `%s'\n" #: g10/keygen.c:1905 #, 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:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Bitte keine Emailadressen als Namen oder Kommentar verwenden\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnKkEeFfBb" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Ändern: (N)ame, (K)ommentar, (E)-Mail oder (B)eenden? " #: g10/keygen.c:1937 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:1956 msgid "Please correct the error first\n" msgstr "Bitte beseitigen Sie zuerst den Fehler\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Sie benötigen eine Passphrase, um den geheimen Schlüssel zu schützen.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 keine Passphrase - Dies ist *nicht* zu empfehlen!\n" "Es ist trotzdem möglich. Sie können Ihre Passphrase jederzeit\n" "ändern, indem sie dieses Programm mit dem Befehl \"--edit-key\"\n" "aufrufen.\n" "\n" #: g10/keygen.c:2034 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:2899 msgid "Key generation canceled.\n" msgstr "Schlüsselerzeugung abgebrochen.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "schreiben des öffentlichen Schlüssels nach '%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "schreiben des geheimen Schlüssel-\"stub\"s nach `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "schreiben des geheimen Schlüssels nach '%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "kein schreibbarer öffentlicher Schlüsselbund gefunden: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "kein schreibbarer geheimer Schlüsselbund gefunden: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "Fehler beim Schreiben des öff. Schlüsselbundes `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "Fehler beim Schreiben des geheimen Schlüsselbundes `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "Öffentlichen und geheimen Schlüssel erzeugt und signiert.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey 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" "Unterschlüssel für diesem Zweck erzeugen.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Schlüsselerzeugung fehlgeschlagen: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, 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:3386 g10/keygen.c:3516 g10/sign.c:244 #, 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:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "HINWEIS: Unterschlüssel für v3-Schlüssel sind nicht OpenPGP-konform\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Wirklich erzeugen? (j/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "Speicher des Schlüssels auf der Karte schlug fehl: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "Sicherungsdatei '%s' kann nicht erzeugt werden: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "Hinweis: Sicherung des Kartenschlüssels wurde auf `%s' gespeichert\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "niemals " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Entscheidende Beglaubigungsrichtlinie: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Beglaubigungsrichtlinie: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Entscheidender bevorzugter Schlüsselserver" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Entscheidender Beglaubigungs-\"Notation\": " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Beglaubigungs-\"Notation\": " #: g10/keylist.c:471 msgid "Keyring" msgstr "Schlüsselbund" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Haupt-Fingerabdruck =" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr "Unter-Fingerabdruck =" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Haupt-Fingerabdruck =" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Unter-Fingerabdruck =" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Schl.-Fingerabdruck =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Kartenseriennr. =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "umbenennen von `%s' nach `%s' schlug fehl: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "Warnung: Zwei Dateien mit vertraulichem Inhalt vorhanden.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s ist der Unveränderte\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s ist der Neue\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Bitte diesen potentiellen Sicherheitsmangel beseitigen\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "Puffern des Schlüsselbundes `%s'\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu Schlüssel bislang gepuffert (%lu Beglaubigungen)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu Schlüssel gepuffert (%lu Beglaubigungen)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: Schlüsselbund erstellt\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "Widerrufene Schlüssel in den Suchergebnissen aufführen" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "Unterschlüssel in der Suche über Schlüssel-IDs aufführen" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "verwende temporäre Dateien, um Daten an die Schlüsselserverhilfsprogramme zu " "geben" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "Temporäre Dateien nach Nutzung nicht löschen" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "Schlüssel für die Unterschriftenprüfung automatisch holen" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "" "Die im Schlüssel enthaltene bevorzugte URL für Schlüsselserver beachten" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "Die im Schlüssel enthaltenen PKA-Daten beim Schlüsselholen beachten" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "WARNUNG: Schlüsselserver-Option `%s' wird auf dieser Plattform nicht " "verwendet\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "abgeschaltet" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Eingabe von Nummern, Nächste (N) oder Abbrechen (Q) > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "Ungültiges Schlüsselserverprotokoll (wir %d!=Handhabungsroutine %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "Schlüssel \"%s\" wurde auf dem Schlüsselserver nicht gefunden\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "Schlüssel wurde auf dem Schlüsselserver nicht gefunden\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "fordere Schlüssel %s von %s-Server %s an\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "fordere Schlüssel %s von %s an\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "suche Namen auf %s-Server %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "suche Namen auf %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "sende Schlüssel %s auf den %s-Server %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "sende Schlüssel %s auf %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "suche nach \"%s\" auf %s-Server %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "suche nach \"%s\" auf %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "Kein Schlüsselserver-Vorgang\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" "WARNUNG: Die Schlüsselserver-Handhabungsroutine stammt von einer anderen " "GnuPG-Version (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "Schlüsselserver sendete VERSION nicht\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "Schlüsselserver-Datenübertragunsfehler: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "Kein Schlüsselserver bekannt (Option --keyserver verwenden)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" "Externe Schlüsselserveraufrufe werden in diesem \"Build\" nicht unterstützt\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "Keine Handhabungsroutine für Schlüsselserverschema `%s'\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "Vorgang `%s' wird vom Schlüsselserverschema `%s' nicht unterstützt\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s unterstützt Hilfsroutinenversion %d nicht\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "Schlüsselserver-Zeitüberschreitung\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "interner Fehler Schlüsselserver\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" ist keine Schlüssel-ID: überspringe\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "WARNUNG: Schlüssel %s kann per %s nicht aktualisiert werden: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "ein Schlüssel wird per %s aktualisiert\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "%d Schlüssel werden per %s aktualisiert\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "WARNUNG: die URI %s kann nicht geholt werden: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "WARNUNG: die URI %s kann nicht analysiert werden\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "Seltsame Länge für einen verschlüsselten Sitzungsschlüssel (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s verschlüsselter Sitzungsschlüssel\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "Passphrase wurde mit unbekanntem Hashverfahren %d erstellt\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "Öffentlicher Schlüssel ist %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "Mit öffentlichem Schlüssel verschlüsselte Daten: Korrekte DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "verschlüsselt mit %u-Bit %s Schlüssel, ID %s, erzeugt %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( # [kw] #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "verschlüsselt mit %s Schlüssel, ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "Entschlüsselung mit Public-Key-Verfahren fehlgeschlagen: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "Verschlüsselt mit %lu Passphrases\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "Verschlüsselt mit einer Passphrase\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "vermutlich %s-verschlüsselte Daten\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "IDEA-Verschlüsselung nicht verfügbar; versucht wird stattdessen %s\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "Entschlüsselung erfolgreich\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "" "WARNUNG: Botschaft wurde nicht integritätsgeschützt (integrity protected)\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "Warnung: Verschlüsselte Botschaft ist manipuliert worden!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "Entschlüsselung fehlgeschlagen: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" "Hinweis: Der Absender verlangte Vertraulichkeit(\"for-your-eyes-only\")\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "Ursprünglicher Dateiname='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "WARNUNG: Mehr als ein Klartext erkannt\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "Einzelner Widerruf - verwenden Sie \"gpg --import\", um ihn anzuwenden\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "Keine Unterschrift gefunden\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "Unterschriften-Überprüfung unterdrückt\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "diese mehrdeutige Unterschriftdaten können nicht bearbeitet werden\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Unterschrift vom %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " mittels %s-Schlüssel %s\n" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Unterschrift vom %s mittels %s-Schlüssel ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Schlüssel erhältlich bei: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "FALSCHE Unterschrift von \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Verfallene Unterschrift von \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Korrekte Unterschrift von \"%s\"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[ungewiß] " #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " alias \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Diese Unterschrift ist seit %s verfallen.\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Diese Unterschrift verfällt am %s.\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s Unterschrift, Hashmethode \"%s\"\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "Binäre" #: g10/mainproc.c:1947 msgid "textmode" msgstr "Textmodus" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "unbekannt" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" "\"WARNUNG: Keine abgetrennte Signatur; die Datei '%s' wurde NICHT " "überprüft!\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Unterschrift kann nicht geprüft werden: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "keine abgetrennte Unterschrift\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "WARNUNG: Mehrfache Signaturen erkannt. Es wird nur die erste geprüft.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "Einzelne Unterschrift der Klasse 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "Unterschrift nach alter (PGP 2.x) Art\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "ungültiges root-Paket in proc_tree() entdeckt\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "core-dump-Dateierzeugung kann nicht abgeschaltet werden: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat von `%s' schlug fehl in %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) schlug fehl in %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "WARNUNG: Verwendung des experimentellen Public-Key-Verfahrens %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "WARNUNG: Die Verwendung von Elgamal sign+encrypt Schlüsseln ist nicht " "ratsam\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "WARNING: Verwendung des experimentellen Verschlüsselungsverfahren %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "WARNUNG: Verwendung des experimentellen Hashverfahrens %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "WARNUNG: Die Verwendung des Hashverfahrens %s ist nicht ratsam\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "Siehe %s für weitere Infos\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "HINWEIS: Diese Funktion ist in %s nicht vorhanden\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: mißbilligte Option \"%s\".\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "WARNUNG: \"%s\" ist eine mißbilligte Option.\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "Bitte benutzen Sie stattdessen \"%s%s\".\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "" "WARNUNG: \"%s\" ist ein nicht ratsamer Befehl - verwenden Sie ihn nicht.\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "nicht komprimiert" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "unkomprimiert|kein|keine" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "Diese Botschaft könnte für %s unbrauchbar sein\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "Mehrdeutige Option '%s'\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "Unbekannte Option '%s'\n" #: g10/misc.c:1331 #, c-format msgid "Unknown weak digest '%s'\n" msgstr "Unbekannter schwacher Hashalgorithmus `%s'\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Datei '%s' existiert bereits. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Überschreiben (j/N)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: unbekannte Dateinamenerweiterung\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Neuen Dateinamen eingeben" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "Schreiben auf die Standardausgabe\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "die unterzeichneten Daten sind wohl in '%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "Neue Konfigurationsdatei `%s' erstellt\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "WARNUNG: Optionen in `%s' sind während dieses Laufes noch nicht wirksam\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "Verzeichnis `%s' erzeugt\n" #: g10/parse-packet.c:149 #, 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:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "WARNUNG: Möglicherweise unsicherer symmetrisch verschlüsselter " "Sitzungsschlüssel\n" #: g10/parse-packet.c:1227 #, 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:319 msgid "gpg-agent is not available in this session\n" msgstr "GPG-Agent ist in dieser Sitzung nicht vorhanden\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "fehlerhaft aufgebaute GPG_AGENT_INFO - Umgebungsvariable\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "GPG-Agent-Protokoll-Version %d wird nicht unterstützt\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "Verbindung zu '%s' kann nicht aufgebaut werden: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "" "Schwierigkeiten mit dem Agenten - Agent-Ansteuerung wird abgeschaltet\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (Hauptschlüssel-ID %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.\n" "Benutzer: \"%.*s\"\n" "%u-bit %s Schlüssel, ID %s, erzeugt %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Geben Sie die Passphrase nochmal ein\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Geben Sie die Passphrase ein\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "Abbruch durch Benutzer\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "Passphrase kann im Batchmodus nicht abgefragt werden\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Geben Sie die Passphrase ein: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren.\n" "Benutzer: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-Bit %s Schlüssel, ID %s, erzeugt %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (Unterschlüssel aus Hauptschlüssel-ID %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Geben Sie die Passphrase nochmal ein: " # translated by wk #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Wählen Sie ein Bild für Ihre Foto-ID aus. Das Bild muß eine JPEG-Datei\n" "sein. Bitte beachten Sie, daß das Bild in Ihrem öffentlichen\n" "Schlüssel gespeichert wird. Wenn Sie ein sehr großes Bild benutzen,\n" "wir Ihr Schlüssel leider auch sehr groß werden. Ein Bild der Größe\n" "240x288 Pixel ist eine gute Wahl.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Dateiname mit JPEG für die Foto-ID eingeben: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "JPEG-Datei `%s' kann nicht geöffnet werden: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Diese JPEG-Datei ist echt groß (%d Byte)!\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Wollen Sie es wirklich benutzen? (j/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "`%s' ist keine JPEG-Datei\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Ist dieses Bild richtig? (j/N) " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "Es ist kein Bildbetrachter gesetzt\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "Die Foto-ID kann nicht angezeigt werden!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Kein Grund angegeben" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Schlüssel ist überholt" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Hinweis: Dieser Schlüssel ist nicht mehr sicher" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Schlüssel wird nicht mehr benutzt" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "User-ID ist nicht mehr gültig" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "Grund für Widerruf: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "Widerruf-Bemerkung: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Es ist kein \"trust value\" zugewiesen für:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Wie sicher sind Sie, daß dieser Schlüssel wirklich dem angegebenen Besitzer " "gehört?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Weiß nicht so recht\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Nein, ihm traue ich NICHT\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Ich vertraue ihm absolut\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = Zurück zum Menü\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = diesen Schlüssel überspringen\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = verlassen\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "Die minimale Trust-Ebene für diesen Schlüssel beträgt: %s\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Ihre Auswahl? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Wollen Sie diesem Schlüssel wirklich uneingeschränkt vertrauen? (j/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Zertifikate führen zu einem letztlich vertrauenswürdigen Schlüssel:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: Es gibt keine Garantie, daß dieser Schlüssel wirklich dem angegebenen " "Besitzer gehört.\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Es gibt nur eine beschränkte Garantie, daß dieser Schlüssel wirklich dem " "angegebenen Besitzer gehört.\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Dieser Schlüssel gehört wahrscheinlich dem angegebenen Besitzer\n" #: g10/pkclist.c:437 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:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Es ist NICHT sicher, daß der Schlüssel zu dem in der User-ID\n" "Genannten gehört. Wenn Sie *wirklich* wissen, was Sie tun,\n" "können Sie die nächste Frage mit ja beantworten\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Diesen Schlüssel trotzdem benutzen? (j/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "WARNUNG: Ein Schlüssel ohne gesichertes Vertrauen wird benutzt!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "WARNUNG: Dieser Schlüssel ist u.U. widerrufen: Widerrufschlüssel ist nicht " "vorhanden\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "" "WARNUNG: Dieser Schlüssel wurde vom vorgesehen Widerrufer widerrufen!\n" #: g10/pkclist.c:523 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:524 msgid " This could mean that the signature is forged.\n" msgstr " Das könnte bedeuten, daß die Signatur gefälscht ist.\n" #: g10/pkclist.c:530 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:535 msgid "Note: This key has been disabled.\n" msgstr "Hinweis: Dieser Schlüssel wurde abgeschaltet.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Hinweis: Überprüfte Adresse des Unterzeichners ist `%s'\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" "Hinweise: Adresse des Unterzeichners `%s' passt nicht zum DNS-Eintrag\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "\"Trust\"-Ebene auf VOLLSTÄNDIG geändert (wg. gültiger PKA-Info)\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "\"Trust\"-Ebene auf NIEMALS geändert (wg. falscher PKA-Info)\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Hinweis: Dieser Schlüssel ist verfallen!\n" #: g10/pkclist.c:604 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:606 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:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "WARNUNG: Wir haben KEIN Vertrauen zu diesem Schlüssel!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Die Signatur ist wahrscheinlich eine FÄLSCHUNG.\n" #: g10/pkclist.c:623 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:625 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:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: übersprungen: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: übersprungen: öffentlicher Schlüssel bereits vorhanden\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Sie haben keine User-ID angegeben (Sie können die Option \"-r\" verwenden).\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Derzeitige Empfänger:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Geben Sie die User-ID ein. Beenden mit einer leeren Zeile: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Keine solche User-ID vorhanden.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" "übersprungen: öffentlicher Schlüssel bereits als Standardempfänger gesetzt\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Öffentlicher Schlüssel ist abgeschaltet.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "übersprungen: öffentlicher Schlüssel bereits gesetzt\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "Unbekannter voreingestellter Empfänger \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: übersprungen: öffentlicher Schlüssel ist abgeschaltet\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "Keine gültigen Adressaten\n" #: g10/plaintext.c:102 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:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "Fehler beim Erstellen von `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Abgetrennte Beglaubigungen.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Bitte geben Sie den Namen der Datendatei ein: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "lese stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "keine unterschriebene Daten\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "kann signierte Datei '%s' nicht öffnen.\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "Ungenannter Empfänger; Versuch mit geheimen Schlüssel %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "Alles klar, wir sind der ungenannte Empfänger.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "alte Kodierung des DEK wird nicht unterstützt\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "Verschlüsselungsverfahren %d%s ist unbekannt oder abgeschaltet\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" "WARNUNG: Das Verschlüsselungsverfahren %s wurde nicht in den " "Empfängereinstellungen gefunden\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "Hinweis: geheimer Schlüssel %s verfällt am %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "Hinweis: Schlüssel wurde widerrufen" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "\"build_packet\" fehlgeschlagen: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "Schlüssel %s hat keine User-IDs\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Schlüssel soll widerrufen werden von:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Dies ist ein \"sensitiver\" Widerrufsschlüssel)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "" "Ein vorgesehenes Widerrufszertifikat für diesen Schlüssel erzeugen? (j/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Ausgabe mit ASCII Hülle erzwungen\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "\"make_keysig_packet\" fehlgeschlagen: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Widerrufzertifikat erzeugt.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "keine Widerrufsschlüssel für \"%s\" gefunden\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "Geheimer Schlüssel \"%s\" nicht gefunden: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "kein zugehöriger öffentlicher Schlüssel: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "Öffentlicher Schlüssel paßt nicht zum geheimen Schlüssel!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Ein Widerrufszertifikat für diesen Schlüssel erzeugen? (j/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "Unbekanntes Schutzverfahren\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "Dieser Schlüssel ist nicht geschützt.\n" # translated by wk #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Widerrufszertifikat wurde erzeugt.\n" "\n" "Bitte speichern Sie es auf einem Medium, welches Sie wegschließen\n" "können; falls Mallory (ein Angreifer) Zugang zu diesem Zertifikat\n" "erhält, kann er Ihren Schlüssel unbrauchbar machen. Es wäre klug,\n" "dieses Widerrufszertifikat auch auszudrucken und sicher aufzubewahren,\n" "falls das ursprüngliche Medium nicht mehr lesbar ist. Aber Obacht: Das\n" "Drucksystem kann unter Umständen anderen Nutzern eine Kopie zugänglich\n" "machen.\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Grund für den Widerruf:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Abbruch" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Wahrscheinlich möchten Sie hier %d auswählen)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" "Geben Sie eine optionale Beschreibung ein. Beenden mit einer leeren Zeile:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Grund für Widerruf: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Keine Beschreibung angegeben)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Ist das OK? (j/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "Teile des geheimen Schlüssels sind nicht vorhanden\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "Schutzverfahren %d%s wird nicht unterstützt\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "Hashschutzverfahren %d wird nicht unterstützt\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Ungültige Passphrase; versuchen Sie es bitte noch einmal" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "WARNUNG: Unsicherer Schlüssel entdeckt -\n" " bitte Passphrase nochmals wechseln.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "Die mißbilligte 16-bit Prüfsumme wird zum Schutz des geheimen Schlüssels " "benutzt\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "Unsicherer Schlüssel erzeugt - neuer Versuch\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "Trotz %d-fachen Versuches konnte die Erzeugung eines unsicheren Schlüssels " "für sym. Verschlüsselung nicht vermieden werden!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "Für DSA muß die Hashlänge ein Vielfaches von 8 Bit sein\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA-Schlüssel %s verwendet einen unsicheren (%u Bit-) Hash\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA-Schlüssel %s benötigt einen mindestens %u Bit langen Hash\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "WARNUNG: Widersprechende Hashverfahren in der signierten Nachricht\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "WARNUNG: Signaturunterschlüssel %s hat keine Rücksignatur\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "WARNUNG: Signaturunterschlüssel %s hat eine ungültige Rücksignatur\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "" "Öffentlicher Schlüssel %s ist %lu Sekunden jünger als die Unterschrift\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "" "Öffentlicher Schlüssel %s ist %lu Sekunden jünger als die Unterschrift\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "Schlüssel %s wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder " "Uhrenproblem)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "Schlüssel %s wurde %lu Sekunden in der Zukunft erzeugt (Zeitreise oder " "Uhrenproblem)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "Hinweis: Signaturschlüssel %s ist am %s verfallen\n" #: g10/sig-check.c:254 #, c-format msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "" "Hinweis: Unterschriften basierend auf dem %s Algorithmus werden abgewiesen\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "Vermutlich eine FALSCHE Unterschrift von Schlüssel %s, wegen unbekanntem " "\"critical bit\"\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" "Schlüssel %s: Kein Unterschlüssel für die Unterschlüsselwiderruf-" "Beglaubigung\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "" "Schlüssel %s: Kein Unterschlüssel für die Unterschlüsselanbindungs-" "Beglaubigung\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "WARNUNG: \"Notation\" kann nicht %%-erweitert werden (zu groß). Verwende " "\"unerweiterte\".\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "WARNUNG: Richtlinien-URL kann nicht %%-erweitert werden (zu groß). Verwende " "\"unerweiterte\".\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "WARNUNG: URL für bevorzugten Schlüsselserver kann nicht %%-erweitert werden " "(zu groß). Verwende \"unerweiterte\".\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "Prüfung der erstellten Unterschrift ist fehlgeschlagen: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s Unterschrift von: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "Im --pgp2-Modus kann nur mit PGP-2.x-artigen Schlüsseln eine abgetrennte " "Unterschrift erzeugt werden\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "WARNUNG: Erzwingen des Hashverfahrens %s (%d) verstößt gegen die " "Empfängervoreinstellungen\n" #: g10/sign.c:960 msgid "signing:" msgstr "unterschreibe:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "Im --pgp2-Modus können Sie Klartextunterschriften nur mit PGP-2.x-artigen " "Schlüssel machen\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s Verschlüsselung wird verwendet\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "Schlüssel ist nicht als unsicher gekennzeichnet - er ist nur mit einem\n" "echten Zufallsgenerator verwendbar\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "übersprungen \"%s\": doppelt\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "übersprungen \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "übersprungen: geheimer Schlüssel bereits vorhanden\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "Dies ist ein durch PGP erzeugter Elgamal-Schlüssel. Das ist für Signaturen " "NICHT sicher genug!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "Vertrauenssatz %lu, Typ %d: Schreiben fehlgeschlagen: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Liste der zugewiesenen Trustwerte, erzeugt am %s\n" "# (\"gpg --import-ownertrust\" um sie zu restaurieren)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "Fehler in `%s': %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "Zeile ist zu lang" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "Doppelpunkt fehlt" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "ungültiger Fingerabdruck" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "\"Owner trust\"-Wert fehlt" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "Fehler beim Suchen des \"Trust records\" in `%s': %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "Lesefehler in `%s': %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "\"Trust-DB\": sync fehlgeschlagen: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "Datei `%s' konnte nicht gesperrt werden\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "'%s' kann nicht gesperrt werden\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb Satz %lu: lseek fehlgeschlagen: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, 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:269 msgid "trustdb transaction too large\n" msgstr "trustdb Transaktion zu groß\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "kann aus `%s' nicht zugreifen: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: Verzeichnis existiert nicht!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: Fehler beim Erzeugen des Versionsatzes: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: ungültige trust-db erzeugt\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trust-db erzeugt\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "Notiz: Die \"trustdb\" ist nicht schreibbar\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ungültige 'Trust'-Datenbank\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: hashtable kann nicht erzeugt werden: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: Fehler beim Ändern des Versionsatzes: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: Fehler beim Lesen des Versionsatzes: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: Fehler beim Schreiben des Versionsatzes: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek fehlgeschlagen: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read failed (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: keine trustdb Datei\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: version record with recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: invalid file version %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: Fehler beim Lesen eines freien Satzes: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: Fehler beim Schreiben eines Verzeichnis-Satzes: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: konnte einen Satz nicht Nullen: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: konnte Satz nicht anhängen: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Fehler: Die Vertrauensdatenbank ist fehlerhaft\n" #: g10/textfilter.c:147 #, 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:246 #, c-format msgid "input line longer than %d characters\n" msgstr "Eingabezeile ist länger als %d Zeichen\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "'%s' ist keine gültige lange Schlüssel-ID\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "Schlüssel %s: Als vertrauenswürdiger Schlüssel akzeptiert\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "Schlüssel %s tritt mehr als einmal in der \"trustdb\" auf\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" "Schlüssel %s: kein öffentlicher Schlüssel für den vertrauenswürdigen " "Schlüssel - übersprungen\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "Schlüssel %s ist als uneingeschränkt vertrauenswürdig gekennzeichnet\n" #: g10/trustdb.c:344 #, 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:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "Vertrauenssatz %lu ist nicht von der angeforderten Art %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" "Sie können versuchen die Vertrauensdatenbank durch folgende Befehle " "wiederherzustellen:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Falls dies nicht funktioniert, sehen Sie bitte im Handbuch nach\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "kann unbekanntes Vertrauensmodell nicht verwenden (%d) - verwende " "Vertrauensmodell %s\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "verwende Vertrauensmodell %s\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[widerrufen]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[verfall.]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ unbek.]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ undef.]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[marginal]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ vollst.]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ uneing.]" #: g10/trustdb.c:553 msgid "undefined" msgstr "unbestimmt" #: g10/trustdb.c:554 msgid "never" msgstr "niemals" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginal" #: g10/trustdb.c:556 msgid "full" msgstr "vollständig" #: g10/trustdb.c:557 msgid "ultimate" msgstr "uneingeschränkt" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "\"Trust-DB\"-Überprüfung nicht nötig\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "nächste \"Trust-DB\"-Pflichtüberprüfung am %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "\"Trust-DB\"-Überprüfung ist beim `%s'-Vertrauensmodell nicht nötig\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "\"Trust-DB\"-Änderung ist beim `%s'-Vertrauensmodell nicht nötig\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "Öffentlicher Schlüssel %s nicht gefunden: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "Bitte ein --check-trustdb durchführen\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "\"Trust-DB\" wird überprüft\n" # translated by wk #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d Schlüssel verarbeitet (%d Validity Zähler gelöscht)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "keine uneingeschränkt vertrauenswürdigen Schlüssel gefunden\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "" "öff. Schlüssel des uneingeschränkt vertrautem Schlüssel %s nicht gefunden\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "%d marginal-needed, %d complete-needed, %s Vertrauensmodell\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "Tiefe: %d gültig: %3d unterschrieben: %3d Vertrauen: %d-, %dq, %dn, %dm, " "%df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "\"Trust-DB\"-Versions-Satz kann nicht geändert werden: Schreiben " "fehlgeschlagen: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "Die Unterschrift konnte nicht überprüft werden.\n" "Denken Sie daran, daß die Datei mit der Unterschrift (.sig oder .asc)\n" "als erste in der Kommandozeile stehen sollte.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "Eingabezeile %u ist zu lang oder es fehlt ein LF\n" #: util/errors.c:53 msgid "general error" msgstr "Allgemeiner Fehler" #: util/errors.c:54 msgid "unknown packet type" msgstr "Unbekannter Pakettyp" #: util/errors.c:55 msgid "unknown version" msgstr "Unbekannte Version" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "Unbekanntes Public-Key-Verfahren" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "Unbekanntes Hashverfahren" #: util/errors.c:58 msgid "bad public key" msgstr "Falscher öffentlicher Schlüssel" #: util/errors.c:59 msgid "bad secret key" msgstr "Falscher geheimer Schlüssel" #: util/errors.c:60 msgid "bad signature" msgstr "Falsche Unterschrift" #: util/errors.c:61 msgid "checksum error" msgstr "Prüfsummen-Fehler" #: util/errors.c:62 msgid "bad passphrase" msgstr "Falsche Passphrase" #: util/errors.c:63 msgid "public key not found" msgstr "Öffentlicher Schlüssel nicht gefunden" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "Unbekanntes Verschlüsselungsverfahren" #: util/errors.c:65 msgid "can't open the keyring" msgstr "Der Schlüsselbund kann nicht geöffnet werden" #: util/errors.c:66 msgid "invalid packet" msgstr "Ungültiges Paket" #: util/errors.c:67 msgid "invalid armor" msgstr "Ungültige ASCII-Hülle" #: util/errors.c:68 msgid "no such user id" msgstr "Keine solche User-ID" #: util/errors.c:69 msgid "secret key not available" msgstr "Geheimer Schlüssel ist nicht vorhanden" #: util/errors.c:70 msgid "wrong secret key used" msgstr "Falscher geheimer Schlüssel benutzt" #: util/errors.c:71 msgid "not supported" msgstr "Wird nicht unterstützt" #: util/errors.c:72 msgid "bad key" msgstr "Falscher Schlüssel" #: util/errors.c:73 msgid "file read error" msgstr "Dateilesefehler" #: util/errors.c:74 msgid "file write error" msgstr "Dateischreibfehler" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "Unbekanntes Komprimierverfahren" #: util/errors.c:76 msgid "file open error" msgstr "Fehler beim Öffnen der Datei" #: util/errors.c:77 msgid "file create error" msgstr "Fehler beim Erzeugen der Datei" #: util/errors.c:78 msgid "invalid passphrase" msgstr "Ungültige Passphrase" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "nicht implementiertes öffentliches Schlüsselverfahren" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "Verschlüsselungsverfahren ist nicht implementiert" #: util/errors.c:81 msgid "unknown signature class" msgstr "Unbekannte Unterschriftenklasse" #: util/errors.c:82 msgid "trust database error" msgstr "Fehler in der Trust-DB" #: util/errors.c:83 msgid "bad MPI" msgstr "Falsche MPI" #: util/errors.c:84 msgid "resource limit" msgstr "festdefinierte Ressourcenobergrenze erreicht" #: util/errors.c:85 msgid "invalid keyring" msgstr "Ungültiger Schlüsselbund" #: util/errors.c:86 msgid "bad certificate" msgstr "Falsches Zertifikat" #: util/errors.c:87 msgid "malformed user id" msgstr "Ungünstig aufgebaute User-ID" #: util/errors.c:88 msgid "file close error" msgstr "Fehler beim Schließen der Datei" #: util/errors.c:89 msgid "file rename error" msgstr "Fehler beim Umbenennen einer Datei" #: util/errors.c:90 msgid "file delete error" msgstr "Fehler beim Löschen einer Datei" #: util/errors.c:91 msgid "unexpected data" msgstr "Unerwartete Daten" #: util/errors.c:92 msgid "timestamp conflict" msgstr "Zeitangaben differieren" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "Unbenutzbares öffentliches Schlüsselverfahren" #: util/errors.c:94 msgid "file exists" msgstr "Datei existiert bereits" #: util/errors.c:95 msgid "weak key" msgstr "Unsicherer Schlüssel" #: util/errors.c:96 msgid "invalid argument" msgstr "Ungültiges Argument" #: util/errors.c:97 msgid "bad URI" msgstr "fehlerhafter URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "Nicht unterstützter URI" #: util/errors.c:99 msgid "network error" msgstr "Netzwerkfehler" #: util/errors.c:101 msgid "not encrypted" msgstr "nicht verschlüsselt" #: util/errors.c:102 msgid "not processed" msgstr "nicht bearbeitet" #: util/errors.c:104 msgid "unusable public key" msgstr "unbrauchbarer öffentlicher Schlüssel" #: util/errors.c:105 msgid "unusable secret key" msgstr "unbrauchbarer geheimer Schlüssel" #: util/errors.c:106 msgid "keyserver error" msgstr "Schlüsselserverfehler" #: util/errors.c:107 msgid "canceled" msgstr "abgebrochen" #: util/errors.c:108 msgid "no card" msgstr "keine Karte" #: util/errors.c:109 msgid "no data" msgstr "keine Daten" #: util/logger.c:183 msgid "ERROR: " msgstr "FEHLER: " #: util/logger.c:186 msgid "WARNING: " msgstr "WARNUNG: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... dies ist ein Bug (Programmfehler) (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Sie haben einen Bug (Programmfehler) gefunden ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "ja" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "jJyY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "nein" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|okay" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "abbrechen|abbrechen" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "WARNUNG: Sensible Daten könnten auf Platte ausgelagert werden.\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "siehe http://www.gnupg.org/faq.html für weitere Informationen\n" # " Um dies zu vermeiden, kann das Programm suid(root) installiert werden.\n" # " Bitte wenden Sie sich hierzu an den Systemadministrator.\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "Vorgang ist ohne sicheren Hauptspeicher nicht möglich\n" #: util/secmem.c:360 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" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "WARNUNG: Unsicheres Besitzverhältnis auf die Erweiterung `%s'\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "WARNUNG: Unsichere Zugriffsrechte auf die Erweiterung `%s'\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "WARNUNG: Unsicheres Besitzverhältnis des umgebenden Verzeichnisses `%s'\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "WARNUNG: Unsichere Zugriffsrechte des umgebenden Verzeichnisses auf " #~ "Erweiterung `%s'\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "Verschlüsselungserweiterung `%s' wurde wegen unsicherer Zugriffsrechte " #~ "nicht geladen\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "das IDEA-Verschlüsselungs-Plugin ist nicht vorhanden\n" #~ msgid "Command> " #~ msgstr "Befehl> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "Das DSA-Schlüsselpaar wird %u Bit haben.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "Die \"Trust\"-Datenbank ist beschädigt; verwenden Sie \"gpg --fix-trustdb" #~ "\".\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|Admin-PIN" #~ msgid "failed to acquire the pinentry lock: %s\n" #~ msgstr "Die Sperre für das Pinentry kann nicht gesetzt werden: %s\n" #~ msgid "" #~ "Please enter your PIN, so that the secret key can be unlocked for this " #~ "session" #~ msgstr "" #~ "Bitte geben Sie Ihre PIN ein, so daß der geheime Schlüssel benutzt werden " #~ "kann" #~ msgid "" #~ "Please enter your passphrase, so that the secret key can be unlocked for " #~ "this session" #~ msgstr "" #~ "Bitte geben Sie Ihre Passphrase ein, so daß der geheime Schlüssel benutzt " #~ "werden kann" #~ msgid "Quality:" #~ msgstr "Qualität:" #~ msgid "pinentry.qualitybar.tooltip" #~ msgstr "" #~ "Die Qualität der Passphrase, die Sie oben eingegeben haben.\n" #~ "Bitte fragen sie Ihren Systembeauftragten nach den\n" #~ "Kriterien für die Messung der Qualität." #~ msgid "SETERROR %s (try %d of %d)" #~ msgstr "SETERROR %s (Versuch %d von %d)" #~ msgid "PIN too long" #~ msgstr "Die PIN ist zu lang" #~ msgid "Invalid characters in PIN" #~ msgstr "Ungültige Zeichen in der PIN" #~ msgid "PIN too short" #~ msgstr "Die PIN ist zu kurz" #~ msgid "Bad PIN" #~ msgstr "Falsche PIN" #~ msgid "Bad Passphrase" #~ msgstr "Falsche Passphrase" #~ msgid "Passphrase" #~ msgstr "Passphrase" #~ msgid "ssh keys greater than %d bits are not supported\n" #~ msgstr "SSH Schlüssel von mehr als %d Bits werden nicht unterstützt\n" #~ msgid "error getting serial number of card: %s\n" #~ msgstr "Fehler beim Holen der Karten-Seriennummer: %s\n" #~ msgid "detected card with S/N: %s\n" #~ msgstr "Erkannte Karte hat die Seriennummer: %s\n" #~ msgid "error getting default authentication keyID of card: %s\n" #~ msgstr "Fehler beim Holen der Authentisierungsschlüssel-ID der Karte: %s\n" #~ msgid "no suitable card key found: %s\n" #~ msgstr "keine passender Kartenschlüssel gefunden: %s\n" #~ msgid "shadowing the key failed: %s\n" #~ msgstr "\"Shadowing\" des Schlüssels schlug fehl: %s\n" #~ msgid "Please enter the passphrase for the ssh key%0A %c" #~ msgstr "Bitte geben Sie die Passphrase für den SSH-Schlüssel %0A %c ein" #~ msgid "Please re-enter this passphrase" #~ msgstr "Bitte geben Sie die Passphrase noch einmal ein:" #~ msgid "" #~ "Please enter a passphrase to protect the received secret key%%0A %s%" #~ "%0Awithin gpg-agent's key storage" #~ msgstr "" #~ "Bitte geben Sie eine Passphrase ein, um den empfangenen geheimen Schlüssel" #~ "%%0A %s%%0A im Schlüsselspeicher des gpg-agenten zu schützen" #~ msgid "does not match - try again" #~ msgstr "Keine Übereinstimmung - bitte nochmal versuchen" #~ msgid "failed to create stream from socket: %s\n" #~ msgstr "Das Erzeugen eines Datenstrom aus dem Socket schlug fehl: %s\n" #~ msgid "Admin PIN" #~ msgstr "Admin-PIN" #~ msgid "Repeat this PIN" #~ msgstr "PIN bitte wiederholen" #~ msgid "error creating temporary file: %s\n" #~ msgstr "Fehler beim Erstellen einer temporären Datei: %s\n" #~ msgid "error writing to temporary file: %s\n" #~ msgstr "Fehler beim Schreiben auf eine temporäre Datei: %s\n" #~ msgid "Enter new passphrase" #~ msgstr "Neue Passphrase eingeben" #~ msgid "Take this one anyway" #~ msgstr "Diese trotzdem benutzen" #~ msgid "" #~ "Warning: You have entered an insecure passphrase.%%0AA passphrase should " #~ "be at least %u character long." #~ msgid_plural "" #~ "Warning: You have entered an insecure passphrase.%%0AA passphrase should " #~ "be at least %u characters long." #~ msgstr[0] "" #~ "WARNUNG: Sie haben eine offensichtlich unsichere%%0APassphrase " #~ "eingegeben. Eine Passphrase sollte%%0A mindestens %u Zeichen lang sein." #~ msgstr[1] "" #~ "WARNUNG: Sie haben eine offensichtlich unsichere%%0APassphrase " #~ "eingegeben. Eine Passphrase sollte%%0A mindestens %u Zeichen lang sein." #~ msgid "" #~ "Warning: You have entered an insecure passphrase.%%0AA passphrase should " #~ "contain at least %u digit or%%0Aspecial character." #~ msgid_plural "" #~ "Warning: You have entered an insecure passphrase.%%0AA passphrase should " #~ "contain at least %u digits or%%0Aspecial characters." #~ msgstr[0] "" #~ "WARNUNG: Sie haben eine offensichtlich unsichere%%0APassphrase " #~ "eingegeben. Eine Passphrase sollte%%0Amindestens %u Sonderzeichen oder " #~ "eine Ziffer enthalten." #~ msgstr[1] "" #~ "WARNUNG: Sie haben eine offensichtlich unsichere%%0APassphrase " #~ "eingegeben. Eine Passphrase sollte%%0A mindestens %u Sonderzeichen oder " #~ "Ziffern enthalten." #~ msgid "" #~ "Warning: You have entered an insecure passphrase.%%0AA passphrase may not " #~ "be a known term or match%%0Acertain pattern." #~ msgstr "" #~ "WARNUNG: Sie haben eine offensichtlich unsichere%%0APassphrase " #~ "eingegeben. Eine Passphrase sollte kein%%0Abekanntes Wort sein oder nach " #~ "bekannten Regeln aufgebaut sein." #~ msgid "" #~ "You have not entered a passphrase!%0AAn empty passphrase is not allowed." #~ msgstr "" #~ "Sie haben keine Passphrase eingegeben!%0AEine leere Passphrase ist nicht " #~ "erlaubt." #~ msgid "" #~ "You have not entered a passphrase - this is in general a bad idea!" #~ "%0APlease confirm that you do not want to have any protection on your key." #~ msgstr "" #~ "Sie möchten keine Passphrase - Dies ist *nicht* zu empfehlen!%0ABitte\n" #~ "bestätigen Sie, daß sie auf jeden Schutz Ihres privaten Schlüssels\n" #~ "verzichten." #~ msgid "Yes, protection is not needed" #~ msgstr "Ja, ein Schutz ist nicht notwendig" #~ msgid "Please enter the passphrase to%0Ato protect your new key" #~ msgstr "Bitte geben Sie die Passphrase ein%0Aum Ihren Schlüssel zu schützen" #~ msgid "Please enter the new passphrase" #~ msgstr "Bitte geben Sie die Passphrase ein:" #~ msgid "" #~ "@Options:\n" #~ " " #~ msgstr "" #~ "@Optionen:\n" #~ " " #~ msgid "run in server mode (foreground)" #~ msgstr "Im Server Modus ausführen" #~ msgid "run in daemon mode (background)" #~ msgstr "Im Daemon Modus ausführen" #~ msgid "sh-style command output" #~ msgstr "Ausgabe für /bin/sh" #~ msgid "csh-style command output" #~ msgstr "Ausgabe für /bin/csh" #~ msgid "|FILE|read options from FILE" #~ msgstr "|DATEI|Konfigurationsoptionen aus DATEI lesen" #~ msgid "do not detach from the console" #~ msgstr "Im Vordergrund laufen lassen" #~ msgid "do not grab keyboard and mouse" #~ msgstr "Tastatur und Maus nicht \"grabben\"" #~ msgid "use a log file for the server" #~ msgstr "Logausgaben in eine Datei umlenken" #~ msgid "use a standard location for the socket" #~ msgstr "Benutze einen Standardnamen für den Socket" #~ msgid "|PGM|use PGM as the PIN-Entry program" #~ msgstr "|PGM|benutze PGM as PIN-Entry" #~ msgid "|PGM|use PGM as the SCdaemon program" #~ msgstr "|PGM|benutze PGM as SCdaemon" #~ msgid "do not use the SCdaemon" #~ msgstr "Den Scdaemon-basierten Kartenzugriff nicht nutzen" #~ msgid "ignore requests to change the TTY" #~ msgstr "Ignoriere Anfragen, das TTY zu wechseln" #~ msgid "ignore requests to change the X display" #~ msgstr "Ignoriere Anfragen, das X-Display zu wechseln" #~ msgid "|N|expire cached PINs after N seconds" #~ msgstr "|N|lasse PINs im Cache nach N Sekunden verfallen" #~ msgid "do not use the PIN cache when signing" #~ msgstr "benutze PINs im Cache nicht bem Signieren" #~ msgid "allow clients to mark keys as \"trusted\"" #~ msgstr "erlaube Aufrufern Schlüssel als \"vertrauenswürdig\" zu markieren" #~ msgid "allow presetting passphrase" #~ msgstr "erlaube ein \"preset\" von Passphrases" #~ msgid "enable ssh-agent emulation" #~ msgstr "Die ssh-agent-Emulation anschalten" #~ msgid "|FILE|write environment settings also to FILE" #~ msgstr "|DATEI|Schreibe die Umgebungsvariabeln auf DATEI" #~ msgid "Please report bugs to <" #~ msgstr "Fehlerberichte bitte an <" #~ msgid "Usage: gpg-agent [options] (-h for help)" #~ msgstr "Aufruf: gpg-agent [Optionen] (-h für Hilfe)" #~ msgid "" #~ "Syntax: gpg-agent [options] [command [args]]\n" #~ "Secret key management for GnuPG\n" #~ msgstr "" #~ "Syntax: gpg-agent [Optionen] [Befehl [Argumente]]\n" #~ "Verwaltung von geheimen Schlüsseln für GnuPG\n" #~ msgid "invalid debug-level `%s' given\n" #~ msgstr "ungültige Debugebene `%s' angegeben\n" #~ msgid "%s is too old (need %s, have %s)\n" #~ msgstr "Die Bibliothek %s ist nicht aktuell (benötige %s, habe %s)\n" #~ msgid "name of socket too long\n" #~ msgstr "Der Name des Sockets ist zu lang\n" #~ msgid "can't create socket: %s\n" #~ msgstr "Socket kann nicht erzeugt werden: %s\n" #~ msgid "socket name `%s' is too long\n" #~ msgstr "Der Name des Sockets `%s' ist zu lang\n" #~ msgid "a gpg-agent is already running - not starting a new one\n" #~ msgstr "Ein gpg-agent läuft bereits - ein weiterer wird nicht gestartet\n" #~ msgid "error getting nonce for the socket\n" #~ msgstr "Fehler beim Ermitteln der \"Nonce\" dieses Sockets\n" #~ msgid "listen() failed: %s\n" #~ msgstr "Der listen()-Aufruf ist fehlgeschlagen: %s\n" #~ msgid "listening on socket `%s'\n" #~ msgstr "Es wird auf Socket `%s' gehört\n" #~ msgid "stat() failed for `%s': %s\n" #~ msgstr "stat()-Aufruf für `%s' fehlgeschlagen: %s\n" #~ msgid "can't use `%s' as home directory\n" #~ msgstr "Die Datei `%s' kann nicht als Home-Verzeichnis benutzt werden\n" #~ msgid "error reading nonce on fd %d: %s\n" #~ msgstr "Fehler beim Lesen der \"Nonce\" von FD %d: %s\n" #~ msgid "handler 0x%lx for fd %d started\n" #~ msgstr "Handhabungsroutine 0x%lx für fd %d gestartet\n" #~ msgid "handler 0x%lx for fd %d terminated\n" #~ msgstr "Handhabungsroutine 0x%lx für den fd %d beendet\n" #~ msgid "ssh handler 0x%lx for fd %d started\n" #~ msgstr "SSH-Handhabungsroutine 0x%lx für fd %d gestartet\n" #~ msgid "ssh handler 0x%lx for fd %d terminated\n" #~ msgstr "SSH-Handhabungsroutine 0x%lx für fd %d beendet\n" #~ msgid "pth_select failed: %s - waiting 1s\n" #~ msgstr "pth_select()-Aufruf fehlgeschlagen: %s - warte 1s\n" #~ msgid "%s %s stopped\n" #~ msgstr "%s %s angehalten\n" #~ msgid "no gpg-agent running in this session\n" #~ msgstr "Der gpg-agent läuft nicht für diese Session\n" #~ msgid "Usage: gpg-preset-passphrase [options] KEYGRIP (-h for help)\n" #~ msgstr "Aufruf: gpg-preset-passphrase [Optionen] KEYGRIP (-h für Hilfe)\n" #~ msgid "" #~ "Syntax: gpg-preset-passphrase [options] KEYGRIP\n" #~ "Password cache maintenance\n" #~ msgstr "" #~ "Syntax: gpg-preset-passphrase [Optionen] KEYGRIP\n" #~ "Kennwortpuffer-Pflege\n" #~ msgid "Usage: gpg-protect-tool [options] (-h for help)\n" #~ msgstr "Aufruf: gpg-protect-tool [Optionen] (-h für Hilfe)\n" #~ msgid "" #~ "Syntax: gpg-protect-tool [options] [args]\n" #~ "Secret key maintenance tool\n" #~ msgstr "" #~ "Syntax: gpg-protect-tool [Optionen] [Argumente]\n" #~ "Werkzeug zum Bearbeiten von geheimen Schlüsseln\n" #~ msgid "Please enter the passphrase to unprotect the PKCS#12 object." #~ msgstr "" #~ "Bitte geben Sie die Passphrase zum Entsperren des PKCS#12 Objekts ein" #~ msgid "Please enter the passphrase to protect the new PKCS#12 object." #~ msgstr "" #~ "Bitte geben Sie die Passphrase zum Schützen des neuen PKCS#12 Objekts ein" #~ msgid "" #~ "Please enter the passphrase to protect the imported object within the " #~ "GnuPG system." #~ msgstr "" #~ "Bitte geben Sie die Passphrase ein, um das importierte Objekt im GnuPG " #~ "System zu schützen." #~ msgid "" #~ "Please enter the passphrase or the PIN\n" #~ "needed to complete this operation." #~ msgstr "" #~ "Die Eingabe der Passphrase bzw. der PIN\n" #~ "wird benötigt um diese Aktion auszuführen." #~ msgid "Passphrase:" #~ msgstr "Passphrase:" #~ msgid "error while asking for the passphrase: %s\n" #~ msgstr "Fehler bei der Abfrage der Passphrase: %s\n" #~ msgid "cancelled\n" #~ msgstr "Vom Benutzer abgebrochen\n" #~ msgid "error opening `%s': %s\n" #~ msgstr "Fehler beim Öffnen von `%s': %s\n" #~ msgid "file `%s', line %d: %s\n" #~ msgstr "Datei `%s', Zeile %d: %s\n" #~ msgid "statement \"%s\" ignored in `%s', line %d\n" #~ msgstr "" #~ "Anweisung \"%s\" in `%s', Zeile %d\n" #~ " ignoriert\n" #~ msgid "system trustlist `%s' not available\n" #~ msgstr "" #~ "Systemliste der vertrauenswürdigen Zertifikate '%s' ist nicht vorhanden\n" #~ msgid "bad fingerprint in `%s', line %d\n" #~ msgstr "fehlerhafter Fingerabdruck in `%s', Zeile %d\n" #~ msgid "invalid keyflag in `%s', line %d\n" #~ msgstr "Ungültiger Schlüsselflag in `%s', Zeile %d\n" #~ msgid "error reading `%s', line %d: %s\n" #~ msgstr "Fehler beim Lesen von `%s', Zeile %d: %s\n" #~ msgid "error reading list of trusted root certificates\n" #~ msgstr "Fehler beim Lesen der Liste vertrauenswürdiger root-Zertifikate\n" #~ msgid "" #~ "Please verify that the certificate identified as:%%0A \"%s\"%%0Ahas the " #~ "fingerprint:%%0A %s" #~ msgstr "" #~ "Bitte prüfen Sie, daß das Zertifikat mit dem Namen:%%0A \"%s\"%" #~ "%0Afolgenden Fingerabdruck hat:%%0A %s" #~ msgid "Correct" #~ msgstr "Korrekt" #~ msgid "" #~ "Do you ultimately trust%%0A \"%s\"%%0Ato correctly certify user " #~ "certificates?" #~ msgstr "" #~ "Wenn Sie vollständiges Vertrauen haben, daß%%0A \"%s\"%" #~ "%0ABenutzerzertifikate verläßlich zertifiziert, so antworten Sie mit \"Ja" #~ "\"" #~ msgid "Yes" #~ msgstr "Ja" #~ msgid "No" #~ msgstr "Nein" #~ msgid "" #~ "Note: This passphrase has never been changed.%0APlease change it now." #~ msgstr "" #~ "Hinweis: Diese Passphrase wurde noch nie geändert/%0ABitte ändern Sie sie " #~ "jetzt." #~ msgid "" #~ "This passphrase has not been changed%%0Asince %.4s-%.2s-%.2s. Please " #~ "change it now." #~ msgstr "" #~ "Diese Passphrase wurde seit dem %.4s-%.2s-%.2s nicht%%0A\n" #~ "mehr geändert. Bitte ändern Sie sie jetzt." #~ msgid "Change passphrase" #~ msgstr "Die Passphrase ändern" #~ msgid "I'll change it later" #~ msgstr "Ich werde sie später ändern" #~ msgid "error creating a pipe: %s\n" #~ msgstr "Fehler beim Erzeugen einer \"Pipe\": %s\n" #~ msgid "can't fdopen pipe for reading: %s\n" #~ msgstr "Pipe kann nicht zum Lesen \"fdopen\"t werden: %s\n" #~ msgid "error forking process: %s\n" #~ msgstr "Fehler beim \"Forken\" des Prozess: %s\n" #~ msgid "waiting for process %d to terminate failed: %s\n" #~ msgstr "Das Warten auf die Beendigung des Prozesses %d schlug fehl: %s\n" #~ msgid "error getting exit code of process %d: %s\n" #~ msgstr "Fehler beim Holen des Exitwerte des Prozesses %d: %s\n" #~ msgid "error running `%s': exit status %d\n" #~ msgstr "Fehler bei Ausführung von `%s': Endestatus %d\n" #~ msgid "error running `%s': probably not installed\n" #~ msgstr "Feler bei Ausführung von `%s': wahrscheinlich nicht installiert\n" #~ msgid "error running `%s': terminated\n" #~ msgstr "Fehler bei Ausführung von `%s': beendet\n" #~ msgid "error creating socket: %s\n" #~ msgstr "Fehler beim Erstellen des Sockets: %s\n" #~ msgid "host not found" #~ msgstr "Host nicht gefunden" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "Kommunikationsproblem mit GPG-Agent\n" #~ msgid "problem setting the gpg-agent options\n" #~ msgstr "Beim setzen der gpg-agent Optionen ist ein problem aufgetreten\n" #~ msgid "canceled by user\n" #~ msgstr "Vom Benutzer abgebrochen\n" #~ msgid "problem with the agent\n" #~ msgstr "Problem mit dem Agenten\n" #~ msgid "Warning: unsafe ownership on %s \"%s\"\n" #~ msgstr "WARNUNG: Unsichere Besitzrechte für %s \"%s\"\n" #~ msgid "Warning: unsafe permissions on %s \"%s\"\n" #~ msgstr "WARNUNG: Unsichere Zugriffsrechte für %s \"%s\"\n" #~ msgid "out of core in secure memory while allocating %lu bytes" #~ msgstr "" #~ "Kein sicherer Speicher mehr vorhanden, als %lu Byte zugewiesen werden " #~ "sollten" #~ msgid "out of core while allocating %lu bytes" #~ msgstr "" #~ "Kein Speicher mehr vorhanden, als %lu Byte zugewiesen werden sollten" #~ msgid "no running gpg-agent - starting one\n" #~ msgstr "Kein aktiver gpg-agent - es wird einer gestarted\n" #~ msgid "can't connect to the agent - trying fall back\n" #~ msgstr "" #~ "Verbindung zum gpg-agent nicht möglich - Ersatzmethode wird versucht\n" #~ msgid "Certificate chain available" #~ msgstr "Zertifikatkette vorhanden" #~ msgid "root certificate missing" #~ msgstr "Das Wurzelzertifikat fehlt" #~ msgid "Data encryption succeeded" #~ msgstr "Verschlüsseln der Daten erfolgreich" #~ msgid "Data available" #~ msgstr "Daten vorhanden" #~ msgid "Session key created" #~ msgstr "Sitzungsschlüssel erzeugt" #~ msgid "algorithm: %s" #~ msgstr "Verfahren: %s" #~ msgid "unsupported algorithm: %s" #~ msgstr "Nicht unterstütztes Verfahren: %s" #~ msgid "seems to be not encrypted" #~ msgstr "dies is wahrscheinlich nicht verschlüsselt" #~ msgid "Number of recipients" #~ msgstr "Anzahl der Empfänger" #~ msgid "Recipient %d" #~ msgstr "Empfänger %d" #~ msgid "Data signing succeeded" #~ msgstr "Signieren der Daten erfolgreich" #~ msgid "Data decryption succeeded" #~ msgstr "Entschlüsselung der Daten erfolgreich" #~ msgid "Data verification succeeded" #~ msgstr "Prüfung der Signatur erfolgreich" #~ msgid "Signature available" #~ msgstr "Signatur vorhanden" #~ msgid "Parsing signature succeeded" #~ msgstr "Syntaxanalyse der Signatur erfolgreich" #~ msgid "Bad hash algorithm: %s" #~ msgstr "Ungültiges Hashverfahren: %s" #~ msgid "Signature %d" #~ msgstr "Signatur %d" #~ msgid "Certificate chain valid" #~ msgstr "Zertifikatkette gültig" #~ msgid "Root certificate trustworthy" #~ msgstr "Wurzelzertifikat vertrauenswürdig" #~ msgid "CRL/OCSP check of certificates" #~ msgstr "CRL/OCSP Prüfung der Zertifikate" #~ msgid "Included certificates" #~ msgstr "Mitgesendete Zertifikate" #~ msgid "No audit log entries." #~ msgstr "Keine Einträge in der Audit-Datei" #~ msgid "Unknown operation" #~ msgstr "Unbekannte Operation" #~ msgid "Gpg-Agent usable" #~ msgstr "Gpg-Agent benutzbar" #~ msgid "Dirmngr usable" #~ msgstr "Dirmngr benutzbar" #~ msgid "No help available for `%s'." #~ msgstr "Keine Hilfe für '%s' vorhanden." #~ msgid "ignoring garbage line" #~ msgstr "Zeile mit nicht identifizierten Zeichen wird ignoriert" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "Ein \"notation\"-Name darf nur Buchstaben, Zahlen, Punkte oder " #~ "Unterstriche enthalten und muß mit einem '=' enden\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "Ein \"notation\"-Wert darf das '@'-Zeichen nicht verwenden\n" #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "" #~ "Ein \"notation\"-Wert darf das '@'-Zeichen maximal einmal verwenden\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "Ein \"notation\"-Wert darf keine Kontrollzeichen verwenden\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "WARNUNG: Ungültige \"Notation\"-Daten gefunden\n" #~ msgid "not human readable" #~ msgstr "nicht als Klartext darstellbar" #~ msgid "export keys in an S-expression based format" #~ msgstr "Exportiere Schlüssel in einem auf S-Ausdrücken basierenden Format" #~ msgid "run in server mode" #~ msgstr "Im Server Modus ausführen" #~ msgid "|FILE|write output to FILE" #~ msgstr "|DATEI|Ausgabe auf DATEI schreiben" #~ msgid "Used libraries:" #~ msgstr "Verwendete Bibliotheken:" #~ msgid "libgcrypt is too old (need %s, have %s)\n" #~ msgstr "" #~ "Die Bibliothek \"libgcrypt\" is zu alt (benötigt wird %s, vorhanden ist " #~ "%s)\n" #~ msgid "" #~ "WARNING: key %s contains preferences for unavailable\n" #~ "algorithms on these user IDs:\n" #~ msgstr "" #~ "WARNING: Schlüssel %s hat Einstellungen zu nicht verfügbaren\n" #~ "Verfahren für folgende User-ID:\n" #~ msgid "" #~ "WARNING: some OpenPGP programs can't handle a DSA key with this digest " #~ "size\n" #~ msgstr "" #~ "WARNUNG: Einige OpenPGP-Programme können einen DSA-Schlüssel dieser " #~ "Digestlänge nicht verwenden\n" #~ msgid "%s:%u: obsolete option \"%s\" - it has no effect\n" #~ msgstr "%s:%u: Die Option \"%s\" is veraltet - sie hat keine Wirkung\n" #~ msgid "WARNING: \"%s\" is an obsolete option - it has no effect\n" #~ msgstr "" #~ "WARNUNG: \"%s\" ist eine veraltete Option - sie hat keine Wirkung.\n" #~ msgid "problem with the agent: %s\n" #~ msgstr "Problem mit dem Agenten: %s\n" #~ msgid "Note: key %s has no %s feature\n" #~ msgstr "Hinweis: Schlüssel %s besitzt nicht die %s Eigenschaft\n" #~ msgid "Note: key %s has no preference for %s\n" #~ msgstr "Hinweis: Schlüssel %s hat keine Einstellung für %s\n" #~ msgid "can't open signed data fd=%d: %s\n" #~ msgstr "kann signierte Daten auf fd=%d nicht öffnen: %s\n" #~ msgid "can't open fd %d: %s\n" #~ msgstr "fd=%d kann nicht geöffnet werden: %s\n" #~ msgid "argument not expected" #~ msgstr "Argument nicht erwartet" #~ msgid "read error" #~ msgstr "Lesefehler" #~ msgid "keyword too long" #~ msgstr "Schlüsselwort ist zu lang" #~ msgid "missing argument" #~ msgstr "Fehlendes Argument" #~ msgid "invalid command" #~ msgstr "Ungültige Befehl" #~ msgid "invalid alias definition" #~ msgstr "Ungültige Alias-Definition" #~ msgid "invalid option" #~ msgstr "Ungültige Option" #~ msgid "missing argument for option \"%.50s\"\n" #~ msgstr "Fehlendes Argument für Option \"%.50s\"\n" #~ msgid "option \"%.50s\" does not expect an argument\n" #~ msgstr "Option \"%.50s\" erwartet kein Argument\n" #~ msgid "invalid command \"%.50s\"\n" #~ msgstr "Ungültiger Befehl \"%.50s\"\n" #~ msgid "option \"%.50s\" is ambiguous\n" #~ msgstr "Option \"%.50s\" ist mehrdeutig\n" #~ msgid "command \"%.50s\" is ambiguous\n" #~ msgstr "Befehl \"%.50s\" ist mehrdeutig\n" #~ msgid "invalid option \"%.50s\"\n" #~ msgstr "Ungültige Option \"%.50s\"\n" #~ msgid "error loading `%s': %s\n" #~ msgstr "Fehler beim Laden von `%s': %s\n" #~ msgid "conversion from `%s' to `%s' not available\n" #~ msgstr "Umwandlung von `%s' in `%s' ist nicht verfügbar\n" #~ msgid "iconv_open failed: %s\n" #~ msgstr "iconv_open fehlgeschlagen: %s\n" #~ msgid "conversion from `%s' to `%s' failed: %s\n" #~ msgstr "Umwandlung von `%s' in `%s' schlug fehl: %s\n" #~ msgid "set debugging flags" #~ msgstr "Debug Flags setzen" #~ msgid "enable full debugging" #~ msgstr "Alle Debug Flags setzen" #~ msgid "Please report bugs to " #~ msgstr "Bitte richten sie Berichte über Bugs (Softwarefehler) an " #~ msgid "Usage: kbxutil [options] [files] (-h for help)" #~ msgstr "Aufruf: kbxutil [Optionen] [Dateien] (-h für Hilfe)" #~ msgid "" #~ "Syntax: kbxutil [options] [files]\n" #~ "list, export, import Keybox data\n" #~ msgstr "" #~ "Syntax: kbxutil [Optionen] [Dateien]\n" #~ "Anlistem exportieren und Importieren von KeyBox Dateien\n" #~ msgid "||Please enter your PIN at the reader's keypad" #~ msgstr "||Bitte die PIN auf der Tastatur des Kartenleser eingeben" #~ msgid "the NullPIN has not yet been changed\n" #~ msgstr "Die Nullpin wurde noch nicht geändert\n" #~ msgid "||Please enter your PIN at the reader's keypad%%0A[sigs done: %lu]" #~ msgstr "" #~ "||Bitte die PIN auf der Tastatur des Kartenleser eingeben%%0A[Sigs " #~ "erzeugt: %lu]" #~ msgid "run in multi server mode (foreground)" #~ msgstr "Im Multiserver Modus ausführen" #~ msgid "read options from file" #~ msgstr "Konfigurationsoptionen aus Datei lesen" #~ msgid "|N|connect to reader at port N" #~ msgstr "|N|Verbinde mit dem Leser auf Port N" #~ msgid "|NAME|use NAME as ct-API driver" #~ msgstr "|NAME|Benutze NAME als CT-API Treiber" #~ msgid "|NAME|use NAME as PC/SC driver" #~ msgstr "|NAME|Benutze NAME als PC/SC Treiber" #~ msgid "do not use the internal CCID driver" #~ msgstr "Den internen CCID Treiber nicht benutzen" #~ msgid "do not use a reader's keypad" #~ msgstr "Die Tastatur des Kartenleser nicht benutzen" #~ msgid "allow the use of admin card commands" #~ msgstr "Erlaube die Benutzung von \"Admin\"-Befehlen" #~ msgid "Usage: scdaemon [options] (-h for help)" #~ msgstr "Aufruf: scdaemon [Optionen] (-h für Hilfe)" #~ msgid "" #~ "Syntax: scdaemon [options] [command [args]]\n" #~ "Smartcard daemon for GnuPG\n" #~ msgstr "" #~ "Synatx: scdaemon [Optionen] [Befehl [Argumente]]\n" #~ "Smartcard Daemon für GnuPG\n" #~ msgid "" #~ "please use the option `--daemon' to run the program in the background\n" #~ msgstr "" #~ "Bitte die Option `--daemon' nutzen um das Programm im Hintergund " #~ "auszuführen\n" #~ msgid "handler for fd %d started\n" #~ msgstr "Handhabungsroutine für fd %d gestartet\n" #~ msgid "handler for fd %d terminated\n" #~ msgstr "Handhabungsroutine für den fd %d beendet\n" #~ msgid "invalid radix64 character %02x skipped\n" #~ msgstr "Ungültiges Basis-64 Zeichen %02X wurde übersprungen\n" #~ msgid "no running dirmngr - starting `%s'\n" #~ msgstr "Kein aktiver Dirmngr - `%s' wird einer gestartet\n" #~ msgid "malformed DIRMNGR_INFO environment variable\n" #~ msgstr "Die Variable DIRMNGR_INFO ist fehlerhaft\n" #~ msgid "dirmngr protocol version %d is not supported\n" #~ msgstr "Die Dirmngr Protokollversion %d wird nicht unterstützt\n" #~ msgid "can't connect to the dirmngr - trying fall back\n" #~ msgstr "" #~ "Verbindung zum Dirmngr kann nicht aufgebaut werden - Ersatzmethode wird " #~ "versucht\n" #~ msgid "validation model requested by certificate: %s" #~ msgstr "Durch Zertifikat angefordertes Gültigkeitsmodell: %s" #~ msgid "chain" #~ msgstr "Kette" #~ msgid "shell" #~ msgstr "Schale" #~ msgid "critical certificate extension %s is not supported" #~ msgstr "Die kritische Zertifikaterweiterung %s wird nicht unterstützt" #~ msgid "issuer certificate is not marked as a CA" #~ msgstr "Das Herausgeberzertifikat ist nicht für eine CA gekennzeichnet" #~ msgid "critical marked policy without configured policies" #~ msgstr "entscheidende Richtlinie ohne konfigurierte Richtlinien" #~ msgid "failed to open `%s': %s\n" #~ msgstr "Datei `%s' kann nicht geöffnet werden: %s\n" #~ msgid "note: non-critical certificate policy not allowed" #~ msgstr "Notiz: Die unkritische Zertifikatrichtlinie ist nicht erlaubt" #~ msgid "certificate policy not allowed" #~ msgstr "Die Zertifikatrichtlinie ist nicht erlaubt" #~ msgid "looking up issuer at external location\n" #~ msgstr "Der Herausgeber wird von einer externen Stelle gesucht\n" #~ msgid "number of issuers matching: %d\n" #~ msgstr "Anzahl der übereinstimmenden Herausgeber: %d\n" #~ msgid "failed to allocated keyDB handle\n" #~ msgstr "Ein keyDB Handle konnte nicht bereitgestellt werden\n" #~ msgid "certificate has been revoked" #~ msgstr "Das Zertifikat wurde widerrufen" #~ msgid "no CRL found for certificate" #~ msgstr "Keine CRL für das Zertifikat gefunden" #~ msgid "the status of the certificate is unknown" #~ msgstr "Der Status des Zertifikats ist nicht bekannt" #~ msgid "the available CRL is too old" #~ msgstr "Die vorhandene CRL ist zu alt" #~ msgid "please make sure that the \"dirmngr\" is properly installed\n" #~ msgstr "" #~ "Bitte vergewissern Sie sich das der \"dirmngr\" richtig installierrt ist\n" #~ msgid "checking the CRL failed: %s" #~ msgstr "Die CRL konnte nicht geprüft werden: %s" #~ msgid "certificate with invalid validity: %s" #~ msgstr "Zertifikat mit unzulässiger Gültigkeit: %s" #~ msgid "certificate not yet valid" #~ msgstr "Das Zertifikat ist noch nicht gültig" #~ msgid "root certificate not yet valid" #~ msgstr "Das Wurzelzertifikat ist noch nicht gültig" #~ msgid "intermediate certificate not yet valid" #~ msgstr "Das Zwischenzertifikat ist noch nicht gültig" #~ msgid "certificate has expired" #~ msgstr "Das Zertifikat ist abgelaufen" #~ msgid "root certificate has expired" #~ msgstr "Das Wurzelzertifikat ist abgelaufen" #~ msgid "intermediate certificate has expired" #~ msgstr "Das Zwischenzertifikat ist abgelaufen" #~ msgid "required certificate attributes missing: %s%s%s" #~ msgstr "Notwendige Zertifikatattribute fehlen: %s%s%s" #~ msgid "certificate with invalid validity" #~ msgstr "Zertifikat mit unzulässiger Gültigkeit" #~ msgid "signature not created during lifetime of certificate" #~ msgstr "" #~ "Die Unterschrift wurde nicht in der Gültigkeitszeit des Zertifikat erzeugt" #~ msgid "certificate not created during lifetime of issuer" #~ msgstr "" #~ "Das Zertifikat wurde nicht während der Gültigkeitszeit des Herausgebers " #~ "erzeugt" #~ msgid "intermediate certificate not created during lifetime of issuer" #~ msgstr "" #~ "Das Zwischenzertifikat wurde nicht während der Gültigkeitszeit des " #~ "Herausgebers erzeugt" #~ msgid " ( signature created at " #~ msgstr " (Unterschrift erzeugt am " #~ msgid " (certificate created at " #~ msgstr " ( Zertifikat erzeugt am " #~ msgid " (certificate valid from " #~ msgstr " ( Zertifikat gültig von " #~ msgid " ( issuer valid from " #~ msgstr " ( Herausgeber gültig von " #~ msgid "fingerprint=%s\n" #~ msgstr "Fingerprint=%s\n" #~ msgid "root certificate has now been marked as trusted\n" #~ msgstr "Das Wurzelzertifikat wurde nun als vertrauenswürdig markiert\n" #~ msgid "interactive marking as trusted not enabled in gpg-agent\n" #~ msgstr "" #~ "Interaktives vertrauenswürdig-Markieren ist in gpg-agent ausgeschaltet\n" #~ msgid "interactive marking as trusted disabled for this session\n" #~ msgstr "" #~ "Interaktives vertrauenswürdig-Markieren ist in dieser Sitzung " #~ "ausgeschaltet\n" #~ msgid "" #~ "WARNING: creation time of signature not known - assuming current time" #~ msgstr "" #~ "WARNUNG: Der Erzeugungszeitpunkt der Unterschrift ist nicht bekannt - " #~ "Nehme die aktuelle Zeit an" #~ msgid "no issuer found in certificate" #~ msgstr "Im Zertifikat ist kein Herausgeber enthalten" #~ msgid "self-signed certificate has a BAD signature" #~ msgstr "Das eigenbeglaubigte Zertifikat hat eine FALSCHE Signatur" #~ msgid "root certificate is not marked trusted" #~ msgstr "Das Wurzelzertifikat ist nicht als vertrauenswürdig markiert" #~ msgid "checking the trust list failed: %s\n" #~ msgstr "Fehler beim Prüfen der vertrauenswürdigen Zertifikate: %s\n" #~ msgid "certificate chain too long\n" #~ msgstr "Der Zertifikatkette ist zu lang\n" #~ msgid "issuer certificate not found" #~ msgstr "Herausgeberzertifikat nicht gefunden" #~ msgid "certificate has a BAD signature" #~ msgstr "Das Zertifikat hat eine FALSCHE Signatur" #~ msgid "found another possible matching CA certificate - trying again" #~ msgstr "" #~ "Eine anderes möglicherweise passendes CA-Zertifikat gefunden - versuche " #~ "nochmal" #~ msgid "certificate chain longer than allowed by CA (%d)" #~ msgstr "Die Zertifikatkette ist länger als von der CA erlaubt (%d)" #~ msgid "certificate is good\n" #~ msgstr "Das Zertifikat ist korrekt\n" #~ msgid "intermediate certificate is good\n" #~ msgstr "Das Zwischenzertifikat ist korrekt\n" #~ msgid "root certificate is good\n" #~ msgstr "Das Wurzelzertifikat ist korrekt\n" #~ msgid "switching to chain model" #~ msgstr "Umgeschaltet auf das Kettenmodell" #~ msgid "validation model used: %s" #~ msgstr "Benutztes Gültigkeitsmodell: %s" #~ msgid "%s key uses an unsafe (%u bit) hash\n" #~ msgstr "%s-Schlüssel verwendet ein unsicheres (%u-Bit) Hashverfahren\n" #~ msgid "a %u bit hash is not valid for a %u bit %s key\n" #~ msgstr "" #~ "Ein %u-Bit Hashverfahren ist für einen %u-Bit %s Schlüssel nicht möglich\n" #~ msgid "(this is the MD2 algorithm)\n" #~ msgstr "(Dies ist der MD2 Algorithmus)\n" #~ msgid "none" #~ msgstr "keine" #~ msgid "[none]" #~ msgstr "[keine]" #~ msgid "[Error - invalid encoding]" #~ msgstr "[Fehler - Ungültige Kodierung]" #~ msgid "[Error - out of core]" #~ msgstr "[Fehler - Nicht genügend Speicher]" #~ msgid "[Error - No name]" #~ msgstr "[Fehler - Kein Name]" #~ msgid "[Error - invalid DN]" #~ msgstr "[Fehler - Ungültiger DN]" #~ msgid "" #~ "Please enter the passphrase to unlock the secret key for:\n" #~ "\"%s\"\n" #~ "S/N %s, ID 0x%08lX, created %s" #~ msgstr "" #~ "Bitte geben Sie die Passphrase an, um den \n" #~ "geheimen Schlüssel von\n" #~ "\"%s\"\n" #~ "S/N %s, ID 0x%08lX, erzeugt %s\n" #~ "zu entsperren" #~ msgid "no key usage specified - assuming all usages\n" #~ msgstr "" #~ "Schlüsselverwendungszweck nicht vorhanden - für alle Zwecke akzeptiert\n" #~ msgid "error getting key usage information: %s\n" #~ msgstr "Fehler beim Holen der Schlüsselbenutzungsinformationen: %s\n" #~ msgid "certificate should have not been used for certification\n" #~ msgstr "" #~ "Das Zertifikat hätte nicht zum Zertifizieren benutzt werden sollen\n" #~ msgid "certificate should have not been used for OCSP response signing\n" #~ msgstr "" #~ "Das Zertifikat hätte nicht zum Signieren von OCSP Antworten benutzt " #~ "werden sollen\n" #~ msgid "certificate should have not been used for encryption\n" #~ msgstr "" #~ "Das Zertifikat hätte nicht zum Verschlüsseln benutzt werden sollen\n" #~ msgid "certificate should have not been used for signing\n" #~ msgstr "Das Zertifikat hätte nicht zum Signieren benutzt werden sollen\n" #~ msgid "certificate is not usable for encryption\n" #~ msgstr "Das Zertifikat kann nicht zum Verschlüsseln benutzt werden\n" #~ msgid "certificate is not usable for signing\n" #~ msgstr "Das Zertifikat kann nicht zum Signieren benutzt werden\n" #~ msgid "line %d: invalid algorithm\n" #~ msgstr "Zeile %d: Ungültiges Verfahren\n" #~ msgid "line %d: invalid key length %u (valid are %d to %d)\n" #~ msgstr "Zeile %d: Ungültige Schlüssellänge %u (gültig Werte: %d bis %d)\n" #~ msgid "line %d: no subject name given\n" #~ msgstr "Zeile %d: Kein Subject-Name angegeben\n" #~ msgid "line %d: invalid subject name label `%.*s'\n" #~ msgstr "Zeile %d: ungültiger Subject-Name-Label `%.*s'\n" #~ msgid "line %d: invalid subject name `%s' at pos %d\n" #~ msgstr "Zeile %d: ungültige Betreffbezeichnung `%s' in Spalte %d\n" #~ msgid "line %d: not a valid email address\n" #~ msgstr "Zeile %d: Keine gültige E-Mailadresse\n" #~ msgid "line %d: error reading key `%s' from card: %s\n" #~ msgstr "Zeile %d: Fehler beim Lesen des Schlüssels `%s' von der Karte: %s\n" #~ msgid "line %d: error getting key by keygrip `%s': %s\n" #~ msgstr "" #~ "Zeile %d: Fehler beim Holen des Schlüssels per \"Keygrip\" `%s': %s\n" #~ msgid "line %d: key generation failed: %s <%s>\n" #~ msgstr "Zeile %d: Schlüsselerzeugung schlug fehl: %s <%s>\n" #~ msgid " (%d) RSA\n" #~ msgstr " (%d) RSA\n" #~ msgid " (%d) Existing key\n" #~ msgstr " (%d) Vorhandener Schlüssel\n" #~ msgid " (%d) Existing key from card\n" #~ msgstr " (%d) Vorhandener Schlüssel auf der Karte\n" #~ msgid "Possible actions for a %s key:\n" #~ msgstr "Mögliche Vorgänge eines %s-Schlüssels:\n" #~ msgid " (%d) sign, encrypt\n" #~ msgstr " (%d) unterschreiben, verschlüsseln\n" #~ msgid " (%d) sign\n" #~ msgstr " (%d) unterschreiben\n" #~ msgid " (%d) encrypt\n" #~ msgstr " (%d) verschlüsseln\n" #~ msgid "Enter the X.509 subject name: " #~ msgstr "Bitte geben sie den Namen des X.508 Subjekts ein: " #~ msgid "No subject name given\n" #~ msgstr "Kein Subject-Name angegeben\n" #~ msgid "Invalid subject name label `%.*s'\n" #~ msgstr "Ungültiger Subject-Name-Label `%.*s'\n" #~ msgid "Invalid subject name `%s'\n" #~ msgstr "Ungültiger Subject-Name `%s'\n" #~ msgid "22 translator: see certreg-ui.c:gpgsm_gencertreq_tty" #~ msgstr "25" #~ msgid "Enter email addresses" #~ msgstr "Email-Adresse eingeben" #~ msgid " (end with an empty line):\n" #~ msgstr " (Beenden mit einer leeren Zeile):\n" #~ msgid "Enter DNS names" #~ msgstr "DNS Namen eingeben" #~ msgid " (optional; end with an empty line):\n" #~ msgstr " (Optional. Beenden mit einer leeren Zeile):\n" #~ msgid "Enter URIs" #~ msgstr "Bitte geben Sie die URIs ein" #~ msgid "Parameters to be used for the certificate request:\n" #~ msgstr "" #~ "Parameter die für die Zertifikatsanforderung benutzt werden sollen:\n" #~ msgid "Now creating certificate request. This may take a while ...\n" #~ msgstr "" #~ "Die Zertifikatsanforderung wird erzeugt. Dies kann einen Moment " #~ "dauern ...\n" #~ msgid "Ready. You should now send this request to your CA.\n" #~ msgstr "Fertig. Sie sollten nun diese Anforderung an die CA senden.\n" #~ msgid "resource problem: out or core\n" #~ msgstr "Resourcenproblem: Nicht genügend Hauptspeicher\n" #~ msgid "(this is the RC2 algorithm)\n" #~ msgstr "(Dies ist der RC-2 Algorithmus)\n" #~ msgid "(this does not seem to be an encrypted message)\n" #~ msgstr "(dies is wahrscheinlich keine verschlüsselte Nachricht)\n" #~ msgid "certificate `%s' not found: %s\n" #~ msgstr "Zertifikat `%s' nicht gefunden: %s\n" #~ msgid "error locking keybox: %s\n" #~ msgstr "Fehler beim Sperren der Keybox: %s\n" #~ msgid "duplicated certificate `%s' deleted\n" #~ msgstr "Doppeltes Zertifikat `%s' gelöscht\n" #~ msgid "certificate `%s' deleted\n" #~ msgstr "Zertifikat `%s' gelöscht\n" #~ msgid "deleting certificate \"%s\" failed: %s\n" #~ msgstr "Fehler beim Löschen des Zertifikats \"%s\": %s\n" #~ msgid "no valid recipients given\n" #~ msgstr "Keine gültigen Empfänger angegeben\n" #~ msgid "|[FILE]|make a signature" #~ msgstr "|[DATEI]|Erzeuge eine Signatur" #~ msgid "|[FILE]|make a clear text signature" #~ msgstr "|[DATEI]|Erzeuge eine Klartextsignatur" #~ msgid "list external keys" #~ msgstr "Externe Schlüssel anzeigen" #~ msgid "list certificate chain" #~ msgstr "Schlüssel mit Zertifikatekette anzeigen" #~ msgid "remove key from the public keyring" #~ msgstr "Schlüssel aus dem öffentlichen Schlüsselbund löschen" #~ msgid "import certificates" #~ msgstr "Zertifikate importieren" #~ msgid "export certificates" #~ msgstr "Zertifikate exportieren" #~ msgid "register a smartcard" #~ msgstr "Smartcard registrieren" #~ msgid "pass a command to the dirmngr" #~ msgstr "Das Kommand an den Dirmngr durchreichen" #~ msgid "invoke gpg-protect-tool" #~ msgstr "Rufe das gpg-protect-tool auf" #~ msgid "change a passphrase" #~ msgstr "Die Passphrase ändern" #~ msgid "create base-64 encoded output" #~ msgstr "Ausgabe im Basis-64 format erzeugen" #~ msgid "assume input is in PEM format" #~ msgstr "Eingabedaten sind im PEM Format" #~ msgid "assume input is in base-64 format" #~ msgstr "Eingabedaten sind im Basis-64 Format" #~ msgid "assume input is in binary format" #~ msgstr "Eingabedaten sind im Binärformat" #~ msgid "use system's dirmngr if available" #~ msgstr "Benutze den System Dirmngr falls verfügbar" #~ msgid "never consult a CRL" #~ msgstr "Niemals eine CRL konsultieren" #~ msgid "check validity using OCSP" #~ msgstr "Die Gültigkeit mittels OCSP prüfen" #~ msgid "|N|number of certificates to include" #~ msgstr "|N|Sende N Zertifikate mit" #~ msgid "|FILE|take policy information from FILE" #~ msgstr "|DATEI|Richtlinieninformationen DATEI entnehmen" #~ msgid "do not check certificate policies" #~ msgstr "Zertikikatrichtlinien nicht überprüfen" #~ msgid "fetch missing issuer certificates" #~ msgstr "Fehlende Zertifikate automatisch holen" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NAME|NAME als voreingestellten Empfänger benutzen" #~ msgid "use the default key as default recipient" #~ msgstr "" #~ "Den Standardschlüssel als voreingestellten\n" #~ "Empfänger benutzen" #~ msgid "don't use the terminal at all" #~ msgstr "das Terminal gar nicht benutzen" #~ msgid "|FILE|write a server mode log to FILE" #~ msgstr "|DATEI|Schreibe im Servermodus Logs auf DATEI" #~ msgid "|FILE|write an audit log to FILE" #~ msgstr "|DATEI|Schreibe ein Audit-Log auf DATEI" #~ msgid "force v3 signatures" #~ msgstr "v3 Signaturen erzwingen" #~ msgid "always use a MDC for encryption" #~ msgstr "Beim Verschlüsseln ein Siegel (MDC) verwenden" #~ msgid "batch mode: never ask" #~ msgstr "Stapelmodus: Keine Abfragen" #~ msgid "assume yes on most questions" #~ msgstr "\"Ja\" als Standardantwort annehmen" #~ msgid "assume no on most questions" #~ msgstr "\"Nein\" als Standardantwort annehmen" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "Als öffentlichen Schlüsselbund mitbenutzen" #~ msgid "add this secret keyring to the list" #~ msgstr "Als geheimen Schlüsselbund mitbenutzen" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NAME|NAME als voreingestellten Schlüssel benutzen" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|HOST|Schlüssel bei diesem Server nachschlagen" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NAME|Terminalzeichensatz NAME benutzen" #~ msgid "|LEVEL|set the debugging level to LEVEL" #~ msgstr "|NAME|Die Debugstufe auf NAME setzen" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|DATEI|Erweiterungsmodul DATEI laden" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NAME|Verschlüsselungsverfahren NAME benutzen" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NAME|Hashverfahren NAME benutzen" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|Komprimierverfahren N benutzen" #~ msgid "Usage: gpgsm [options] [files] (-h for help)" #~ msgstr "Aufruf: gpgsm [Optionen] [Dateien] (-h für Hilfe)" #~ msgid "" #~ "Syntax: gpgsm [options] [files]\n" #~ "sign, check, encrypt or decrypt using the S/MIME protocol\n" #~ "default operation depends on the input data\n" #~ msgstr "" #~ "Syntax: gpgsm [Optionen] [Dateien]\n" #~ "Signieren, prüfen, ver- und entschlüsseln mittels S/MIME protocol\n" #~ msgid "usage: gpgsm [options] " #~ msgstr "Aufruf: gpgsm [Optionen] " #~ msgid "NOTE: won't be able to encrypt to `%s': %s\n" #~ msgstr "Hinweis: Verschlüsselung für `%s' wird nicht möglich sein: %s\n" #~ msgid "unknown validation model `%s'\n" #~ msgstr "Unbekanntes Gültigkeitsmodell '%s'\n" #~ msgid "WARNING: running with faked system time: " #~ msgstr "WARNUNG: Ausführung mit gefälschter Systemzeit: " #~ msgid "importing common certificates `%s'\n" #~ msgstr "Importiere allgemeine Zertifikate: %s\n" #~ msgid "can't sign using `%s': %s\n" #~ msgstr "Signieren mit `%s' nicht möglich: %s\n" #~ msgid "this command has not yet been implemented\n" #~ msgstr "Dieser Befehl wurde noch nicht implementiert\n" #~ msgid "total number processed: %lu\n" #~ msgstr "gesamte verarbeitete Anzahl: %lu\n" #~ msgid "error storing certificate\n" #~ msgstr "Fehler beim speichern des Zertifikats\n" #~ msgid "basic certificate checks failed - not imported\n" #~ msgstr "" #~ "Grundlegende Zertifikatprüfungen fehlgeschlagen - nicht importiert\n" #~ msgid "error importing certificate: %s\n" #~ msgstr "Fehler beim Importieren des Zertifikats: %s\n" #~ msgid "error reading input: %s\n" #~ msgstr "Fehler beim Lesen der Eingabe: %s\n" #~ msgid "error creating keybox `%s': %s\n" #~ msgstr "Die \"Keybox\" `%s' konnte nicht erstellt werden: %s\n" #~ msgid "you may want to start the gpg-agent first\n" #~ msgstr "Sie sollten zuerst den gpg-agent starten\n" #~ msgid "keybox `%s' created\n" #~ msgstr "Die \"Keybox\" `%s' wurde erstellt\n" #~ msgid "failed to get the fingerprint\n" #~ msgstr "Kann den Fingerprint nicht ermitteln\n" #~ msgid "failed to allocate keyDB handle\n" #~ msgstr "Kann keinen KeyDB Handler bereitstellen\n" #~ msgid "problem looking for existing certificate: %s\n" #~ msgstr "Problem bei der Suche nach vorhandenem Zertifikat: %s\n" #~ msgid "error finding writable keyDB: %s\n" #~ msgstr "Fehler bei der Suche nach einer schreibbaren KeyDB: %s\n" #~ msgid "error storing certificate: %s\n" #~ msgstr "Fehler beim Speichern des Zertifikats: %s\n" #~ msgid "problem re-searching certificate: %s\n" #~ msgstr "Problem bei Wiederfinden des Zertifikats: %s\n" #~ msgid "error getting stored flags: %s\n" #~ msgstr "Fehler beim Holen der gespeicherten Flags: %s\n" #~ msgid "error storing flags: %s\n" #~ msgstr "Fehler beim Speichern der Flags: %s\n" #~ msgid "GPG_TTY has not been set - using maybe bogus default\n" #~ msgstr "" #~ "GPG_TTY wurde nicht gesetzt - ein (möglicherweise falscher) Standardwert " #~ "wird deshalb verwendet\n" #~ msgid "invalid formatted fingerprint in `%s', line %d\n" #~ msgstr "Der Fingerabdruck in `%s', Zeile %d is fehlerhaft formatiert\n" #~ msgid "invalid country code in `%s', line %d\n" #~ msgstr "Ungültiger Landescode in `%s', Zeile %d\n" #~ msgid "" #~ "You are about to create a signature using your certificate:\n" #~ "\"%s\"\n" #~ "This will create a qualified signature by law equated to a handwritten " #~ "signature.\n" #~ "\n" #~ "%s%sAre you really sure that you want to do this?" #~ msgstr "" #~ "Sie sind dabei, eine Signatur mit dem Zertifikat:\n" #~ "\"%s\"\n" #~ "zu erzeugen. Dies wird eine qualifizierte Signatur erzeugen, \n" #~ "die gesetzlich einer handgeschriebenen gleichgestellt ist.\n" #~ "\n" #~ "%s%sSind Sie wirklich sicher, daß Sie dies möchten?" #~ msgid "" #~ "Note, that this software is not officially approved to create or verify " #~ "such signatures.\n" #~ msgstr "" #~ "Bitte beachten Sie, daß diese Software nicht offiziell zur Erzeugung\n" #~ "oder Prüfung von qualifizierten Signaturen zugelassen ist.\n" #~ msgid "" #~ "You are about to create a signature using your certificate:\n" #~ "\"%s\"\n" #~ "Note, that this certificate will NOT create a qualified signature!" #~ msgstr "" #~ "Sie sind dabei, eine Signatur mit dem Zertifikat:\n" #~ "\"%s\n" #~ "zu erzeugen. Bitte beachten Sie, daß dies KEINE qualifizierte\n" #~ "Signatur erzeugen wird." #~ msgid "checking for qualified certificate failed: %s\n" #~ msgstr "Prüfung auf ein qualifiziertes Zertifikats fehlgeschlagen: %s\n" #~ msgid "Signature made " #~ msgstr "Signatur erzeugt am " #~ msgid "[date not given]" #~ msgstr "[Datum nicht vorhanden]" #~ msgid " using certificate ID 0x%08lX\n" #~ msgstr " mittels Zertifikat ID 0x%08lX\n" #~ msgid "Good signature from" #~ msgstr "Korrekte Signatur von" #~ msgid " aka" #~ msgstr " alias" #~ msgid "This is a qualified signature\n" #~ msgstr "Dies ist eine qualifizierte Unterschrift.\n" #~ msgid "quiet" #~ msgstr "Weniger Ausgaben" #~ msgid "print data out hex encoded" #~ msgstr "Druckdaten hexkodiert ausgeben" #~ msgid "decode received data lines" #~ msgstr "Dekodiere empfangene Datenzeilen" #~ msgid "|NAME|connect to Assuan socket NAME" #~ msgstr "|NAME|Verbinde mit dem Assuan-Socket NAME" #~ msgid "run the Assuan server given on the command line" #~ msgstr "Starten des auf der Kommandozeile angegebenen Assuan-Server" #~ msgid "do not use extended connect mode" #~ msgstr "Den \"extended connect\"-Modus nicht nutzen" #~ msgid "|FILE|run commands from FILE on startup" #~ msgstr "|DATEI|Beim Starten Kommandos aus DATEI lesen" #~ msgid "run /subst on startup" #~ msgstr "Nach dem Starten \"/subst\" ausführen" #~ msgid "Usage: gpg-connect-agent [options] (-h for help)" #~ msgstr "Aufruf: gpg-connect-agent [Optionen] (-h für Hilfe)" #~ msgid "" #~ "Syntax: gpg-connect-agent [options]\n" #~ "Connect to a running agent and send commands\n" #~ msgstr "" #~ "Syntax: gpg-connect-agent [Optionen]\n" #~ "Mit einem laufenden Agenten verbinden und Befehle senden\n" #~ msgid "option \"%s\" requires a program and optional arguments\n" #~ msgstr "Option \"%s\" erfordert ein Programm und evtl. Argumente\n" #~ msgid "option \"%s\" ignored due to \"%s\"\n" #~ msgstr "Option \"%s\" wird wegen \"%s\" nicht beachtet\n" #~ msgid "receiving line failed: %s\n" #~ msgstr "Empfangen der Zeile schlug fehl: %s\n" #~ msgid "line too long - skipped\n" #~ msgstr "Zeile zu lang - übersprungen\n" #~ msgid "line shortened due to embedded Nul character\n" #~ msgstr "Zeile wegen enthaltenem Nul-Zeichen gekürzt\n" #~ msgid "unknown command `%s'\n" #~ msgstr "unbekannter Befehl `%s'\n" #~ msgid "sending line failed: %s\n" #~ msgstr "Senden der Zeile schlug fehl: %s\n" #~ msgid "error sending %s command: %s\n" #~ msgstr "Fehler beim Senden des %s-Befehls: %s\n" #~ msgid "error sending standard options: %s\n" #~ msgstr "Fehler beim Senden der Standardoptionen: %s\n" #~ msgid "Options controlling the diagnostic output" #~ msgstr "Optionen zur Einstellung Diagnoseausgaben" #~ msgid "Options controlling the configuration" #~ msgstr "Optionen zur Einstellung der Konfiguration" #~ msgid "Options useful for debugging" #~ msgstr "Nützliche Optionen zum Debuggen" #~ msgid "|FILE|write server mode logs to FILE" #~ msgstr "|DATEI|Schreibe im Servermodus Logs auf DATEI" #~ msgid "Options controlling the security" #~ msgstr "Optionen zur Einstellung der Sicherheit" #~ msgid "|N|expire SSH keys after N seconds" #~ msgstr "|N|lasse SSH Schlüssel im Cache nach N Sekunden verfallen" #~ msgid "|N|set maximum PIN cache lifetime to N seconds" #~ msgstr "|N|setze die maximale Lebensdauer von PINs im Cache auf N Sekunden" #~ msgid "|N|set maximum SSH key lifetime to N seconds" #~ msgstr "|N|setze die maximale Lebenszeit von SSH Schlüsseln auf N Sekunden" #~ msgid "Options enforcing a passphrase policy" #~ msgstr "Optionen für eien Passphrase-Policy" #~ msgid "do not allow to bypass the passphrase policy" #~ msgstr "Einhaltung der Passphrase-Policy erzwingen" #~ msgid "|N|set minimal required length for new passphrases to N" #~ msgstr "|N|setze die kleinste erlaubte Länge von Passphrasen auf N" #~ msgid "|N|require at least N non-alpha characters for a new passphrase" #~ msgstr "|N|Verlange mindestens N Nicht-Buchstaben für eine neue Passphrase" #~ msgid "|FILE|check new passphrases against pattern in FILE" #~ msgstr "|DATEI|Prüfe neue Passphrases gegen die Regelen in DATEI" #~ msgid "|N|expire the passphrase after N days" #~ msgstr "|N|Lasse die Passphrase nach N Tagen verfallen" #~ msgid "do not allow the reuse of old passphrases" #~ msgstr "Verbiete die Wiedernutzung alter Passphrases." #~ msgid "|NAME|encrypt to user ID NAME as well" #~ msgstr "|NAME|Auf an NAME verschlüsseln" #~ msgid "Configuration for Keyservers" #~ msgstr "Konfiguration der Schlüsselserver" #~ msgid "|URL|use keyserver at URL" #~ msgstr "Benutze Schlüsselserver unter der URL" #~ msgid "allow PKA lookups (DNS requests)" #~ msgstr "Erlaube PKA Zugriffe (DNS Anfragen)" #~ msgid "|NAME|use encoding NAME for PKCS#12 passphrases" #~ msgstr "|NAME|Benutze die Kodierung NAME für PKCS#12 Passphrasen" #~ msgid "do not check CRLs for root certificates" #~ msgstr "CRL bei Wurzelzertifikaten nicht überprüfen" #~ msgid "Options controlling the format of the output" #~ msgstr "Optionen zum Einstellen der Ausgabeformate" #~ msgid "Options controlling the interactivity and enforcement" #~ msgstr "Optionen zur Einstellung der Interaktivität und Geltendmachung" #~ msgid "Configuration for HTTP servers" #~ msgstr "Konfiguration für HTTP Server" #~ msgid "use system's HTTP proxy setting" #~ msgstr "Benutze die HTTP Proxy Einstellung des Systems" #~ msgid "Configuration of LDAP servers to use" #~ msgstr "Konfiguration der zu nutzenden LDAP-Server" #~ msgid "Configuration for OCSP" #~ msgstr "Konfiguration zu OCSP" #~ msgid "Note that group specifications are ignored\n" #~ msgstr "Beachten Sie, daß Gruppenspezifiaktionen ignoriert werden\n" #~ msgid "list all components" #~ msgstr "Liste aller Komponenten" #~ msgid "check all programs" #~ msgstr "Prüfe alle Programme" #~ msgid "|COMPONENT|list options" #~ msgstr "|KOMPONENTE|Zeige die Optionen an" #~ msgid "|COMPONENT|change options" #~ msgstr "|KOMPONENTE|Ändere die Optionen" #~ msgid "apply global default values" #~ msgstr "Wende die gobalen Voreinstellungen an" #~ msgid "list global configuration file" #~ msgstr "Zeige die globale Konfigurationsdatei an" #~ msgid "check global configuration file" #~ msgstr "Prüfe die globale Konfigurationsdatei" #~ msgid "activate changes at runtime, if possible" #~ msgstr "Aktiviere Änderungen zur Laufzeit; falls möglich" #~ msgid "Usage: gpgconf [options] (-h for help)" #~ msgstr "Aufruf: gpgconf [Optionen] (-h für Hilfe)" #~ msgid "" #~ "Syntax: gpgconf [options]\n" #~ "Manage configuration options for tools of the GnuPG system\n" #~ msgstr "" #~ "Syntax: gpgconf {Optionen]\n" #~ "Verwalte Konfigurationsoptionen für Programme des GnuPG Systems\n" #~ msgid "usage: gpgconf [options] " #~ msgstr "Aufruf: gpgconf [Optionen] " #~ msgid "Need one component argument" #~ msgstr "Benötige ein Komponentenargument" #~ msgid "Component not found" #~ msgstr "Komponente nicht gefunden" #~ msgid "No argument allowed" #~ msgstr "Argumente sind nicht erlaubt" #~ msgid "" #~ "@\n" #~ "Commands:\n" #~ " " #~ msgstr "" #~ "@\n" #~ "@KBefehle:\n" #~ " " #~ msgid "decryption modus" #~ msgstr "Entschlüsselungsmodus" #~ msgid "encryption modus" #~ msgstr "Verschlüsselungsmodus" #~ msgid "tool class (confucius)" #~ msgstr "Toolklasse (Konfuzius)" #~ msgid "program filename" #~ msgstr "Programmdateiname" #~ msgid "secret key file (required)" #~ msgstr "Dateiname des geheimen Schlüssels (erforderlich)" #~ msgid "input file name (default stdin)" #~ msgstr "Eingabedateiname (Standardeingabe ist voreingestellt)" #~ msgid "Usage: symcryptrun [options] (-h for help)" #~ msgstr "Aufruf: symcryptrun [Optionen] (-h für Hilfe)" #~ msgid "" #~ "Syntax: symcryptrun --class CLASS --program PROGRAM --keyfile KEYFILE " #~ "[options...] COMMAND [inputfile]\n" #~ "Call a simple symmetric encryption tool\n" #~ msgstr "" #~ "Syntax: symcryptrun --class KLASSE --program PROGRAMM --" #~ "keyfileSCHLUESSELDATEI [Optionen...] KOMMANDO [Eingabedatei]\n" #~ "Aufruf eines einfachen symmetrischen Verschlüsselungstool\n" #~ msgid "%s on %s aborted with status %i\n" #~ msgstr "%s auf %s brach mit Status %i ab\n" #~ msgid "%s on %s failed with status %i\n" #~ msgstr "%s auf %s schlug mit Status %i fehl\n" #~ msgid "can't create temporary directory `%s': %s\n" #~ msgstr "Das temporäre Verzeichnis `%s' kann nicht erstellt werden: %s\n" #~ msgid "could not open %s for writing: %s\n" #~ msgstr "%s kann nicht zum Schreiben geöffnet werden: %s\n" #~ msgid "error writing to %s: %s\n" #~ msgstr "Fehler beim Schreiben von %s: %s\n" #~ msgid "error reading from %s: %s\n" #~ msgstr "Fehler beim Lesen von %s: %s\n" #~ msgid "error closing %s: %s\n" #~ msgstr "Fehler beim Schliessen von %s: %s\n" #~ msgid "no --program option provided\n" #~ msgstr "Option --programm nicht angegeben\n" #~ msgid "only --decrypt and --encrypt are supported\n" #~ msgstr "nur --decrypt und --encrypt sind vorhanden\n" #~ msgid "no --keyfile option provided\n" #~ msgstr "keine --keyfile -Option angegeben\n" #~ msgid "cannot allocate args vector\n" #~ msgstr "Kann \"args-vector\" nicht zuteilen\n" #~ msgid "could not create pipe: %s\n" #~ msgstr "Pipe kann nicht erzeugt werden: %s\n" #~ msgid "could not create pty: %s\n" #~ msgstr "Pty kann nicht erzeugt werden: %s\n" #~ msgid "could not fork: %s\n" #~ msgstr "Kann nicht fork()en: %s\n" #~ msgid "execv failed: %s\n" #~ msgstr "Der execv()-Aufruf ist fehlgeschlagen: %s\n" #~ msgid "select failed: %s\n" #~ msgstr "Der select()-Aufruf ist fehlgeschlagen: %s\n" #~ msgid "read failed: %s\n" #~ msgstr "Lesen schlug fehl: %s\n" #~ msgid "pty read failed: %s\n" #~ msgstr "\"pty read\"-Aufruf ist fehlgeschlagen: %s\n" #~ msgid "waitpid failed: %s\n" #~ msgstr "Der waitpid()-Aufruf ist fehlgeschlagen: %s\n" #~ msgid "child aborted with status %i\n" #~ msgstr "Kind brach mit Status %i ab\n" #~ msgid "cannot allocate infile string: %s\n" #~ msgstr "Kann In-Datei-Zeichenkette keinen Speicher zuteilen: %s\n" #~ msgid "cannot allocate outfile string: %s\n" #~ msgstr "Kann Out-Datei-Zeichenkette keinen Speicher zuteilen: %s\n" #~ msgid "either %s or %s must be given\n" #~ msgstr "entweder %s oder %s muß angegeben sein\n" #~ msgid "no class provided\n" #~ msgstr "keine Klasse angegeben\n" #~ msgid "class %s is not supported\n" #~ msgstr "Klasse %s wird nicht unterstützt\n" #~ msgid "Usage: gpg-check-pattern [options] patternfile (-h for help)\n" #~ msgstr "Aufruf: gpg-check-pattern [Optionen] Musterdatei (-h für Hilfe)\n" #~ msgid "" #~ "Syntax: gpg-check-pattern [options] patternfile\n" #~ "Check a passphrase given on stdin against the patternfile\n" #~ msgstr "" #~ "Syntax: gpg-check-pattern [optionen] Musterdatei\n" #~ "Die von stdin gelesene Passphrase gegen die Musterdatei prüfen\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "Notationen können in einen v3- (PGP 2.x-artigen-) Schlüssel nicht " #~ "eingetragen werden\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "Notationen können in eine v3 (PGP 2.x-artige) Schlüsselunterschrift nicht " #~ "eingetragen werden\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "Eine Policy URL kann in einen v3 (PGP 2.x-artigen) Schlüssel nicht " #~ "eingetragen werden\n" # translated by wk #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ "Eine Policy URL kann in einem v3 Schlüssel(PGP 2.x artig) nicht " #~ "gespeichert werden\n" #~ msgid "key generation is not available from the commandline\n" #~ msgstr "Die Schlüsselerzeugung ist über die Kommandozeile nicht möglich\n" #~ msgid "please use the script \"%s\" to generate a new key\n" #~ msgstr "" #~ "Bitte verwenden Sie das Skript \"%s\" zur Erzeugung eines neuen " #~ "Schlüssels.\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA benötigt einen 160-bit Hash Algorithmus\n" gnupg-1.4.20/po/en@quot.gmo0000644000175000017500000040760312635457220012414 00000000000000(,J4wр'">\n '݁"5-F(t02΂H J T anȄA܄/0N\1܅D#-h0.džI*@+k' ̇*CX_y3Ĉ4̈-/'.@$I n x?4Ɗ:6Us,(8#M&q(&,756m-%ҍ39,0f<GԎ@>]+=ȏ&"8[q :Ȑ#ې $/Eu[Hu-$'89&r5.ϓ5*4!_.0&,5O kv8#•".)XH":(]$E1#;Ǚ8$:_sa/K^zœBۜ4GWi%ٝ.$* *˟!0'I<q+ɠ",/E1u",ʡ"2M i( Ԣ*ߢ 7Kdvƣ 5"(5(^p˥Fݥ $1E%wE\Eo X y8*'c>ʩcZ/NE=,"#ӫ-+%)Q&{'Gg}گ+,"3O 1(װ#+$"P+s" ±?%7]xβ. (9 b}/00`!!.D]{%ɷܷjKo@-*9O0A/r5'غ.3/-cf~!ѽ$,(?h]|-ʿݿ *++V  #)$Mr  6% 27L2r7>1=IY4#=.Y?D@-+n1NIIe55;?WB<H-`"H?<B)_C:.>72v=<@$FeHU$K p-21I$>nK@5:*p7,0014b 2:6'5^.h*L&w1#2>'f*=C0M90:"k&!3> cJ%D,5F|2_ 0 ; F Q \g {  %"(K)k&+57F [ hv. B55S$ (/HK(a" -Ig,'.%2.+a% 3H5] ;<*Lw 3:I&4-C q<A('=/\ 10GXp,H 5A%J/p0.&3? s~ 0$.=S%#- "C'b# +I'e&& &2Yx / ,/"M9pK%$&A$h#D'BSe w1$@$e $!%<DP+/ 603dm/"&(%@%f$ .<Uq2 '"JZ/u+$ &.$U'z,, ># b$,IJO"# <!]*- G$S'x ."+)?#i-%658/n"' ;$0`"%/2 =!Qs: !! (.+W8!400ay26) 9+ e y & G H BH     #  = M g        / = U s        '' O n s .   ( 2 !( Jk,  $5)8b j%%,A2^3&"$13ey!% %3Ys     #& +)5_$~<16J,;#M+y-*"@-c+&*5)6_!&$!32H{~IF#;Ni014#f#++,!32U$*2.5dy*  %3S%o&$ 0#I&m3%*%:`~(-9 6E :|  , 0 /)!Y!7n!*!.!7";8"0t"1";"#%+#Q#)`#3#6#:# 0$;$N$9a$$5$-$"%A% a%%-%%%% %5&$P&u&+&4&%&!'C9'*}'('0'("(.+(-Z(*((+D)Gp)2)/)%*FA**1*#**!+0+(M+v+-+/+,+ ," ,)C,m,, ,,2,1-G-P-#m-#-!-"---(.:G.I.A."/1/ C/M/`/p////// 0"0B0![0}000000#1 )151E1_1s1 1111 112"26:2q252#2 233-3>3*W3!3 33G344 -4N4k4t4-4,445%565 R5s5555555D5F-6Et6D6E6AE7776777=.8>l88$878<%97b9F9999: K:l: :$::#::#;';*>;*i;s;-=6==>>???@!@>@[@x@6@;@6A#?ADcA.AIA7!B'YBBBBBBBC2COChCC+C&C#C(D7DPDiDD(DDDE$#EHE^E&uEE,EEF!F:FPFkFFFF FFFGG(G9GSG pG.G&GaGBIHH/H=H( I.6I3eI!I(III'J/JMJ`JzJJJ,J'JK3K"LKoKtKKBK=K4L"SL%vL&L!L%L" M#.M'RM zMMMMMMN((N$QNvNN#N"N$N O*O!IOkOO OO&O%P -P,9P4fPPQQQQQ'Q!R=R[RmRR R'RR"RS4S-ES(sS0S2SHT IT SU `UmUUUUIU3%V4YV`V5V%WHBW-W0W.WIX*cX+X'X XX YY6YQYjYYYY3YY4Y-,ZZZ'[.<[k[$t[ [ [?[4[:&\a\\\\\,\(]8?]#x]&](]&]^*^B^W^7`^6^-^%^3#_9W_0_<_G_@G`>`+`=`1a9aIaQa"caaa a:aa#b*bg"Eg2hggH8h"h(h$hEh18iji?j@jjk"-k8Pk$kkkkkll~mmmmmmnB*nmnnnnn%nnno(o.Doso*p 2pSp*q!Eq0gq+q<qr+r&Hr0or/r1r"s0%s"Vs2yss s(s t 3t*>tit{ttttttu)uDu Xudu9u"*vMv,jv5vvvvw:wFLw w1w%w x,xExEyoWy y y z8z'zBz={c{/9|Ni|E|,|"+}#N}-r}+})}&}~+3ƀ'7@Y+u,3΁ 1@(V#+"ς+" Ab?v%܃ 0Mk.( }/0߆%!>`e!uÈ܈% 3H[djK@:-{=6Ot0ċ/5%'[.3-%!2T$p,(-M`4Q n {*+-M$j'̓( $>c ~:)Ô72?rr>e1=֖I4^#=֗.#C?gD@+-1YNIڙI$5n5;ښ?BV@Hڛ-#"QHtCG@B)*CT:.Ӟ>2A=t<@F0HwU$ ;-\65MBEODآ9.W;0£00$4U 2ޤ:ߥ65Q.֦*_*1#6 >B*7=b0MѮ90Y"&!ԯ3B*gm)հT0T9ϳ6_ w     ´ ʹ ش   4)Q&{#-Ƶ&+=G ¶ ϶ݶ.' 6AB]!5·(!)1AIXg v(ظ6U&p$ܹ0'H.p%2ź+$9Rg %޻5F`i |;<Ƽ*.K fpѽ:;[q&վ- (<6As(޿/C _k5+,DqH % //0_.&3 2= Ta0$=%P#v-$ +)#Uy+8&d#**@_ g s/ 0/"89[K%$&,$Sx#D'->P bn~1$@#Pt $!+D?+/ 60"S\/z"&(%/%U{$ . +D`2} +AQ/l+$&%$L'q,,>$Y~$,IJN# !&''$O%t!.1H z$' 2"'+J)v#-%685o3"'D;_0"%/2Ex!: %%!K(m+8!4:0o!26 )D=n&GHFB.#Hl*?_ ~ 0K\'v.(2D!w , "0 6(Aj- % )/Y,o67(&=&d1!"@U%t%     ##Dh&k )$< Ga|6,;6#rM-1Qi"-+&J*q56 !&&H$o2IFO2Nh01## +-+Y,)2$*O*^2.*8ck  )$&A"h$#&'73H%|*%'(G-p96:J,^0/7*9.d7;018;j%)36Q: 9.5M-" -)W`v 5$/+8[%!C* ,K0x.-*/Z/G2c/%F31F#x!(!-6/d, ")7 Rs21#'<%d&-:I9A" 'Fem$#!<Ui# "6 Jk~ :85T#$ *&!Q sG  >G-d, $) N n      D F EW D E A( 7j 6 7 = >O  $ ; @ ;M F   9 :[ r$}##*-*XXY|FRD[/K ^j\O67#,"V}k#@{nfK ={<nAy?DK  IzThn9fyucl~!`<R@>h>]WRGIQav'09k%b "swo8( f' Tr4eeFAa" &N&C: 8.HN9hd-4pb7U}$Ha=PJVaA$mc2e=~(-S@yDqUP| Z]&[,%3  [*t#'IP}~Cr)C:UFL'; ]j+zC%mzi940U|pB_Rxp7xn>SA7f+} Yc76^ 2EB~ivdl (,9Oziv{H?k5tR!2W?OtBk:L.\X\/ `i6L! :uEq%*o&?;>h 1 I-mA {HT P'oB0d<1sQ]3*X=~Mdr<)sbMO<?^rZFeQXw8/JbV|Y/.NK-IFD)>`4M_8_g$nx`h38u\V )J_"sl]  5+c\zZ6Q MXr#61D5;o1(tS jG/*vukHvC!YMgWt$:`qleYm@%WNE{B3y-SEysgg.mp0jGww^"Q2!4;UxL[da@5 i^J * xGcb10PLE(5$ J+[  WS=Z_O+Tjgp)l2q#f3}Z;uKV N ,qT|.wG,&o Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Note: signatures using the %s algorithm are rejected Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Unknown weak digest '%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: Your encryption subkey expires soon. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file '%s' was NOT verified! WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You may want to change its expiration date too. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg 1.4.20 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2015-12-20 08:53+0100 Last-Translator: Automatically generated Language-Team: none Language: en@quot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: “Heinrich Heine (Der Dichter) ” aka “%s” using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu “%s”: preference for cipher algorithm %s “%s”: preference for compression algorithm %s “%s”: preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu “%s” Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka “%s” m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu “%s” not a key ID: skipping “%s” was already locally signed by key %s “%s” was already signed by key %s # List of assigned trustvalues, created %s # (Use “gpg --import-ownertrust” to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: “%s” %s/%s signature from: “%s” %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option “%s” %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The ‘sign’ command may be prefixed with an ‘l’ for local signatures (lsign), a ‘t’ for trust signatures (tsign), an ‘nr’ for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer “yes” (or just “y”) if it is okay to generate the sub key.Answer “yes” if it is okay to delete the subkeyAnswer “yes” if it is okay to overwrite the fileAnswer “yes” if you really want to delete this user ID. All certificates are then also lost!Answer “yes” if you want to sign ALL the user IDsAnswer “yes” or “no”Are you sure that you want to sign this key with your key “%s” (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from “%s”CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open ‘%s’: %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from ‘%s’: %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The “<” character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from “%s”Features: File ‘%s’ exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from “%s”Hash: Hint: Select the user IDs to sign Hit return when ready or enter ‘c’ to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter “0”. How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer “yes”.In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try “help”) Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to ‘%s’ NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file ‘%s’ NOTE: old default options file ‘%s’ ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested “for-your-eyes-only” NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for ‘%s’No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command “--edit-key” to generate a subkey for this purpose. Note: Signer's address ‘%s’ does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is ‘%s’ Note: signatures using the %s algorithm are rejected Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter ‘c’ to cancel: Please note that the factory settings of the PINs are PIN = ‘%s’ Admin PIN = ‘%s’ You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command “toggle” first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on “%s” is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer “yes” to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type ‘%s’ Unknown weak digest ‘%s’ Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID “%s” compacted: %s User ID “%s” is expired.User ID “%s” is not self-signed.User ID “%s” is revoked.User ID “%s” is signable. User ID “%s”: %d signature removed User ID “%s”: %d signatures removed User ID “%s”: already clean User ID “%s”: already minimized User ID is no longer validWARNING: WARNING: “%s” is a deprecated command - do not use it WARNING: “%s” is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: Your encryption subkey expires soon. WARNING: ‘%s’ is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option ‘%s’ is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: not a detached signature; file ‘%s’ was NOT verified! WARNING: nothing exported WARNING: options in ‘%s’ are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory ‘%s’: %s WARNING: unable to remove tempfile (%s) ‘%s’: %s WARNING: unsafe enclosing directory ownership on configuration file ‘%s’ WARNING: unsafe enclosing directory ownership on homedir ‘%s’ WARNING: unsafe enclosing directory permissions on configuration file ‘%s’ WARNING: unsafe enclosing directory permissions on homedir ‘%s’ WARNING: unsafe ownership on configuration file ‘%s’ WARNING: unsafe ownership on homedir ‘%s’ WARNING: unsafe permissions on configuration file ‘%s’ WARNING: unsafe permissions on homedir ‘%s’ WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. “0” means you make no particular claim as to how carefully you verified the key. “1” means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a “persona” verification, where you sign the key of a pseudonymous user. “2” means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. “3” means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what “casual” and “extensive” mean to you when you sign other keys. If you don't know what the right answer is, answer “0”.You are about to revoke these signatures: You are using the ‘%s’ character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use “-r”) You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option “--edit-key”. You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You may want to change its expiration date too. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: “%s” You need a passphrase to unlock the secret key for user: “%.*s” %u-bit %s key, ID %s, created %s%s You selected this USER-ID: “%s” You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: “Key has been compromised” Use this if you have a reason to believe that unauthorized persons got access to your secret key. “Key is superseded” Use this if you have replaced this key with a newer one. “Key is no longer used” Use this if you have retired this key. “User ID is no longer valid” Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on “%s” has expired. Your current signature on “%s” is a local signature. Your decision? Your selection? Your selection? (enter ‘?’ for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]‘%s’ already compressed ‘%s’ is not a JPEG file ‘%s’ is not a regular file - ignored ‘%s’ is not a valid character set ‘%s’ is not a valid long keyID ‘%s’ is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action ‘%s’ not supported with keyserver scheme ‘%s’ add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option ‘%s’ anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in ‘%s’ automatically retrieve keys when verifying signaturesautomatically retrieved ‘%s’ via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring ‘%s’ can't access %s - invalid OpenPGP card? can't access ‘%s’: %s can't close ‘%s’: %s can't connect to ‘%s’: %s can't create ‘%s’: %s can't create backup file ‘%s’: %s can't create directory ‘%s’: %s can't create lock for ‘%s’ can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without “--yes” can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock ‘%s’ can't lock ‘%s’: %s can't open ‘%s’ can't open ‘%s’: %s can't open signed data ‘%s’ can't open the keyringcan't query passphrase in batch mode can't read ‘%s’: %s can't stat ‘%s’: %s can't use a symmetric ESK packet due to the S2K mode can't write ‘%s’: %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option “--output” to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory ‘%s’ created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not clear the ownertrust values during importdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating ‘%s’: %s error creating keyring ‘%s’: %s error creating passphrase: %s error finding trust record in ‘%s’: %s error getting current key info: %s error getting new PIN: %s error in ‘%s’: %s error in trailer line error reading ‘%s’: %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock “%s”: %s error retrieving CHV status from card error writing ‘%s’: %s error writing key to card: %s error writing keyring ‘%s’: %s error writing public keyring ‘%s’: %s error writing secret keyring ‘%s’: %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as “sensitive”export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of ‘%s’ failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm ‘%s’ invalid import options invalid item ‘%s’ in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key “%s” not found on keyserver key “%s” not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: “%s” %d new signatures key %s: “%s” %d new subkeys key %s: “%s” %d new user IDs key %s: “%s” %d signature cleaned key %s: “%s” %d signatures cleaned key %s: “%s” %d user ID cleaned key %s: “%s” %d user IDs cleaned key %s: “%s” 1 new signature key %s: “%s” 1 new subkey key %s: “%s” 1 new user ID key %s: “%s” not changed key %s: “%s” revocation certificate added key %s: “%s” revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID “%s” key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID “%s” key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key “%s” imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID “%s” key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID “%s” key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource ‘%s’: %s keyring ‘%s’ created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file ‘%s’ created next trustdb check due at %s nono = sign found in group definition ‘%s’ no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme ‘%s’ no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with ‘%s’ trust model no need for a trustdb update with ‘%s’ trust model no photo viewer set no remote program execution supported no revocation keys found for “%s” no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file ‘%s’: %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use “%s%s” instead please wait while key is being generated ... preference ‘%s’ duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in ‘%s’: %s reading from ‘%s’ reading options from ‘%s’ reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming ‘%s’ to ‘%s’ failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for “%s” from %s searching for “%s” from %s server %s searching for names from %s searching for names from %s server %s secret key “%s” not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped “%s”: %s skipped “%s”: duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID “%s” standalone revocation - use “gpg --import” to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of ‘%s’ failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key “%s”! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program ‘%s’: %s unable to execute shell ‘%s’: %s unable to open JPEG file ‘%s’: %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item ‘%s’ unknown default recipient “%s” unknown digest algorithmunknown key protection algorithm unknown option ‘%s’ unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option “--delete-secret-keys” to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID “%s” is already revoked user ID: “%s” using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on ‘%s’... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to ‘%s’ writing secret key stub to ‘%s’ writing secret key to ‘%s’ writing self signature writing to ‘%s’ writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm ‘%s’ while in %s mode you may not use compression algorithm ‘%s’ while in %s mode you may not use digest algorithm ‘%s’ while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardgnupg-1.4.20/po/en@quot.header0000644000175000017500000000226312516175025013051 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # gnupg-1.4.20/po/en@boldquot.po0000644000175000017500000053722612635457217013124 00000000000000# English translations for gnupg package. # Copyright (C) 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the gnupg package. # Automatically generated, 2015. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.20\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2015-12-20 08:53+0100\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en@boldquot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "can't gen prime with pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "can't generate a prime with less than %d bits\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "no entropy gathering module detected\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "can't lock ‘%s’: %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "waiting for lock on ‘%s’...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "can't open ‘%s’: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "can't stat ‘%s’: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "‘%s’ is not a regular file - ignored\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "note: random_seed file is empty\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "WARNING: invalid size of random_seed file - not used\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "can't read ‘%s’: %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "note: random_seed file not updated\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "can't create ‘%s’: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "can't write ‘%s’: %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "can't close ‘%s’: %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "WARNING: using insecure random number generator!!\n" #: cipher/random.c:894 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 "" "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" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "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" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "failed to store the fingerprint: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "failed to store the creation date: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "reading public key failed: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "response does not contain the public key data\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "response does not contain the RSA modulus\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "response does not contain the RSA public exponent\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "using default PIN as %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "failed to use default PIN as %s: %s - disabling further default use\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Please enter the PIN%%0A[sigs done: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Please enter the PIN" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN callback returned error: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN for CHV%d is too short; minimum length is %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "verify CHV%d failed: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "error retrieving CHV status from card\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "card is permanently locked!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "%d Admin PIN attempts remaining before card is permanently locked\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Please enter the Admin PIN" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "access to admin commands is not configured\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Reset Code not or not anymore available\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Please enter the Reset Code for the card" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Reset Code is too short; minimum length is %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|New Reset Code" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|New Admin PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|New PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "error getting new PIN: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "error reading application data\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "error reading fingerprint DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "key already exists\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "existing key will be replaced\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "generating new key\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "writing new key\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "creation timestamp missing\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSA modulus missing or not of size %d bits\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "RSA public exponent missing or larger than %d bits\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "RSA prime %s missing or not of size %d bits\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "failed to store the key: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "please wait while key is being generated ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "generating key failed\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "key generation completed (%d seconds)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "invalid structure of OpenPGP card (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "fingerprint on card does not match requested one\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "card does not support digest algorithm %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "signatures created so far: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "verification of Admin PIN is currently prohibited through this command\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "can't access %s - invalid OpenPGP card?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armor: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "invalid armor header: " #: g10/armor.c:459 msgid "armor header: " msgstr "armor header: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "invalid clearsig header\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "unknown armor header: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "nested clear text signatures\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "unexpected armor: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "invalid dash escaped line: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "invalid radix64 character %02X skipped\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "premature eof (no CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "premature eof (in CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "malformed CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC error; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "premature eof (in trailer)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "error in trailer line\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "no valid OpenPGP data found.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "invalid armor: line longer than %d characters\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "quoted printable character in armor - probably a buggy MTA has been used\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP card not available: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "OpenPGP card no. %s detected\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "can't do this in batch mode\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "This command is only available for version 2 cards\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Your selection? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[not set]" #: g10/card-util.c:512 msgid "male" msgstr "male" #: g10/card-util.c:513 msgid "female" msgstr "female" #: g10/card-util.c:513 msgid "unspecified" msgstr "unspecified" #: g10/card-util.c:540 msgid "not forced" msgstr "not forced" #: g10/card-util.c:540 msgid "forced" msgstr "forced" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Error: Only plain ASCII is currently allowed.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Error: The “<” character may not be used.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Error: Double spaces are not allowed.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Cardholder's surname: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Cardholder's given name: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Error: Combined name too long (limit is %d characters).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL to retrieve public key: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Error: URL too long (limit is %d characters).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "error allocating enough memory: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "error reading ‘%s’: %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "error writing ‘%s’: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Login data (account name): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Error: Login data too long (limit is %d characters).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Private DO data: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Error: Private DO too long (limit is %d characters).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Language preferences: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Error: invalid length of preference string.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Error: invalid characters in preference string.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Sex ((M)ale, (F)emale or space): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Error: invalid response.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA fingerprint: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Error: invalid formatted fingerprint.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "key operation not possible: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "not an OpenPGP card" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "error getting current key info: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Replace existing key? (y/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "What keysize do you want for the Signature key? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "What keysize do you want for the Encryption key? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "What keysize do you want for the Authentication key? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "rounded up to %u bits\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s keysizes must be in the range %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "The card will now be re-configured to generate a key of %u bits\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "error changing size of key %d to %u bits: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Make off-card backup of encryption key? (Y/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "NOTE: keys are already stored on the card!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Replace existing keys? (y/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Please note that the factory settings of the PINs are\n" " PIN = ‘%s’ Admin PIN = ‘%s’\n" "You should change them using the command --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Please select the type of key to generate:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Signature key\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Encryption key\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Authentication key\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Invalid selection.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Please select where to store the key:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "unknown key protection algorithm\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "secret parts of key are not available\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "secret key already stored on a card\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "error writing key to card: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "quit this menu" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "show admin commands" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "show this help" #: g10/card-util.c:1687 msgid "list all available data" msgstr "list all available data" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "change card holder's name" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "change URL to retrieve key" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "fetch the key specified in the card URL" #: g10/card-util.c:1693 msgid "change the login name" msgstr "change the login name" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "change the language preferences" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "change card holder's sex" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "change a CA fingerprint" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "toggle the signature force PIN flag" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "generate new keys" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "menu to change or unblock the PIN" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "verify the PIN and list all data" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "unblock the PIN using a Reset Code" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/card> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Admin-only command\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Admin commands are allowed\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Admin commands are not allowed\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Invalid command (try “help”)\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "card reader not available\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Please insert the card and hit return or enter ‘c’ to cancel: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "selecting openpgp failed: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Hit return when ready or enter ‘c’ to cancel: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Enter New Admin PIN: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Enter New PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Enter Admin PIN: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Enter PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Repeat this PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN not correctly repeated; try again" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "can't open ‘%s’\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output doesn't work for this command\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "key “%s” not found: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "error reading keyblock: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(unless you specify the key by fingerprint)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "can't do this in batch mode without “--yes”\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Delete this key from the keyring? (y/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "This is a secret key! - really delete? (y/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "deleting keyblock failed: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "ownertrust information cleared\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "there is a secret key for public key “%s”!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "use option “--delete-secret-keys” to delete it first.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "error creating passphrase: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "can't use a symmetric ESK packet due to the S2K mode\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "using cipher %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "‘%s’ already compressed\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "WARNING: ‘%s’ is an empty file\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "reading from ‘%s’\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "forcing symmetric cipher %s (%d) violates recipient preferences\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "you may not use %s while in %s mode\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s encrypted for: “%s”\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s encrypted data\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "encrypted with unknown algorithm %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problem handling encrypted packet\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "no remote program execution supported\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "can't create directory ‘%s’: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "external program calls are disabled due to unsafe options file permissions\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "this platform requires temporary files when calling external programs\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "unable to execute program ‘%s’: %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "unable to execute shell ‘%s’: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "system error while calling external program: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "unnatural exit of external program\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "unable to execute external program\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "unable to read external program response: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "WARNING: unable to remove tempfile (%s) ‘%s’: %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "WARNING: unable to remove temp directory ‘%s’: %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "export signatures that are marked as local-only" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "export attribute user IDs (generally photo IDs)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "export revocation keys marked as “sensitive”" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "remove the passphrase from exported subkeys" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "remove unusable parts from key during export" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "remove as much as possible from key during export" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "exporting secret keys not allowed\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "key %s: not protected - skipped\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "key %s: PGP 2.x style key - skipped\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "key %s: key material on-card - skipped\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "about to export an unprotected subkey\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "failed to unprotect the subkey: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "WARNING: secret key %s does not have a simple SK checksum\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "WARNING: nothing exported\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Commands:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[file]|make a signature" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[file]|make a clear text signature" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "make a detached signature" #: g10/gpg.c:393 msgid "encrypt data" msgstr "encrypt data" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "encryption only with symmetric cipher" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "decrypt data (default)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verify a signature" #: g10/gpg.c:401 msgid "list keys" msgstr "list keys" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "list keys and signatures" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "list and check key signatures" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "list keys and fingerprints" #: g10/gpg.c:406 msgid "list secret keys" msgstr "list secret keys" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "generate a new key pair" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "remove keys from the public keyring" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "remove keys from the secret keyring" #: g10/gpg.c:411 msgid "sign a key" msgstr "sign a key" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "sign a key locally" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "sign or edit a key" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "generate a revocation certificate" #: g10/gpg.c:416 msgid "export keys" msgstr "export keys" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "export keys to a key server" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "import keys from a key server" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "search for keys on a key server" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "update all keys from a keyserver" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "import/merge keys" #: g10/gpg.c:429 msgid "print the card status" msgstr "print the card status" #: g10/gpg.c:430 msgid "change data on a card" msgstr "change data on a card" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "change a card's PIN" #: g10/gpg.c:440 msgid "update the trust database" msgstr "update the trust database" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [files]|print message digests" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Options:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "create ascii armored output" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAME|encrypt for NAME" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "use this user-id to sign or decrypt" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|set compress level N (0 disables)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "use canonical text mode" #: g10/gpg.c:486 msgid "use as output file" msgstr "use as output file" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "verbose" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "do not make any changes" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "prompt before overwriting" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "use strict OpenPGP behavior" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "generate PGP 2.x compatible messages" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(See the man page for a complete listing of all commands and options)\n" #: g10/gpg.c:576 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" "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" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Please report bugs to .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Usage: gpg [options] [files] (-h for help)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Supported algorithms:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Pubkey: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cipher: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Compression: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "usage: gpg [options] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "conflicting commands\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "no = sign found in group definition ‘%s’\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "WARNING: unsafe ownership on homedir ‘%s’\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "WARNING: unsafe ownership on configuration file ‘%s’\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "WARNING: unsafe permissions on homedir ‘%s’\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "WARNING: unsafe permissions on configuration file ‘%s’\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "WARNING: unsafe enclosing directory ownership on homedir ‘%s’\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "WARNING: unsafe enclosing directory ownership on configuration file ‘" "%s’\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "WARNING: unsafe enclosing directory permissions on homedir ‘%s’\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "WARNING: unsafe enclosing directory permissions on configuration file ‘" "%s’\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "unknown configuration item ‘%s’\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "display photo IDs during key listings" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "show policy URLs during signature listings" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "show all notations during signature listings" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "show IETF standard notations during signature listings" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "show user-supplied notations during signature listings" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "show preferred keyserver URLs during signature listings" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "show user ID validity during key listings" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "show revoked and expired user IDs in key listings" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "show revoked and expired subkeys in key listings" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "show the keyring name in key listings" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "show expiration dates during signature listings" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "NOTE: old default options file ‘%s’ ignored\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "NOTE: no default option file ‘%s’\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "option file ‘%s’: %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "reading options from ‘%s’\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "NOTE: %s is not for normal use!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "‘%s’ is not a valid signature expiration\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "‘%s’ is not a valid character set\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "could not parse keyserver URL\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: invalid keyserver options\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "invalid keyserver options\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: invalid import options\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "invalid import options\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: invalid export options\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "invalid export options\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: invalid list options\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "invalid list options\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "display photo IDs during signature verification" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "show policy URLs during signature verification" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "show all notations during signature verification" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "show IETF standard notations during signature verification" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "show user-supplied notations during signature verification" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "show preferred keyserver URLs during signature verification" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "show user ID validity during signature verification" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "show revoked and expired user IDs in signature verification" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "show only the primary user ID in signature verification" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "validate signatures with PKA data" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "elevate the trust of signatures with valid PKA data" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: invalid verify options\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "invalid verify options\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "unable to set exec-path to %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: invalid auto-key-locate list\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "invalid auto-key-locate list\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "WARNING: program may create a core file!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "WARNING: %s overrides %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s not allowed with %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s makes no sense with %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "NOTE: %s is not available in this version\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "will not run with insecure memory due to %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "you can only make detached or clear signatures while in --pgp2 mode\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "you can't sign and encrypt at the same time while in --pgp2 mode\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "you must use files (and not a pipe) when working with --pgp2 enabled.\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "encrypting a message in --pgp2 mode requires the IDEA cipher\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "selected cipher algorithm is invalid\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "selected digest algorithm is invalid\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "selected compression algorithm is invalid\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "selected certification digest algorithm is invalid\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed must be greater than 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed must be greater than 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth must be in the range from 1 to 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "invalid default-cert-level; must be 0, 1, 2, or 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "invalid min-cert-level; must be 1, 2, or 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "NOTE: simple S2K mode (0) is strongly discouraged\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "invalid S2K mode; must be 0, 1 or 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "invalid default preferences\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "invalid personal cipher preferences\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "invalid personal digest preferences\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "invalid personal compress preferences\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s does not yet work with %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "you may not use cipher algorithm ‘%s’ while in %s mode\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "you may not use digest algorithm ‘%s’ while in %s mode\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "you may not use compression algorithm ‘%s’ while in %s mode\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "failed to initialize the TrustDB: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "WARNING: recipients (-r) given without using public key encryption\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [filename]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [filename]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "symmetric encryption of ‘%s’ failed: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [filename]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [filename]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "you cannot use --symmetric --encrypt with --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "you cannot use --symmetric --encrypt while in %s mode\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [filename]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [filename]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [filename]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "you cannot use --symmetric --sign --encrypt while in %s mode\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [filename]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [filename]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [filename]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key user-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key user-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key user-id [commands]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [user-id] [keyring]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "keyserver send failed: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "keyserver receive failed: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "key export failed: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "keyserver search failed: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "keyserver refresh failed: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "dearmoring failed: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "enarmoring failed: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "invalid hash algorithm ‘%s’\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[filename]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Go ahead and type your message ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "the given certification policy URL is invalid\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "the given signature policy URL is invalid\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "the given preferred keyserver URL is invalid\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "too many entries in pk cache - disabled\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[User ID not found]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "key %s: secret key without public key - skipped\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "automatically retrieved ‘%s’ via %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Invalid key %s made valid by --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "no secret subkey for public subkey %s - ignoring\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "using subkey %s instead of primary key %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "be somewhat more quiet" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "take the keys from this keyring" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "make timestamp conflicts only a warning" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|write status info to this FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Usage: gpgv [options] [files] (-h for help)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "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." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer “yes” to set this key to\n" "ultimately trusted\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "If you want to use this untrusted key anyway, answer “yes”." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Enter the user ID of the addressee to whom you want to send the message." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Enter the size of the key" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Answer “yes” or “no”" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Enter the name of the key holder" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "please enter an optional but highly suggested email address" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Please enter an optional comment" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "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 quit the key generation." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" "Answer “yes” (or just “y”) if it is okay to generate the sub key." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "“0” means you make no particular claim as to how carefully you " "verified the\n" " key.\n" "\n" "“1” means you believe the key is owned by the person who claims to own " "it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a “persona” verification, where you sign the key of a pseudonymous " "user.\n" "\n" "“2” means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "“3” means you did extensive verification of the key. For example, " "this could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what “casual” and " "“extensive”\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer “0”." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Answer “yes” if you want to sign ALL the user IDs" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Answer “yes” if you really want to delete this user ID.\n" "All certificates are then also lost!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Answer “yes” if it is okay to delete the subkey" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "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:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Please enter the passphrase; this is a secret sentence \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Please repeat the last passphrase, so you are sure what you typed in." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Give the name of the file to which the signature applies" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Answer “yes” if it is okay to overwrite the file" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " “Key has been compromised”\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " “Key is superseded”\n" " Use this if you have replaced this key with a newer one.\n" " “Key is no longer used”\n" " Use this if you have retired this key.\n" " “User ID is no longer valid”\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "No help available" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "No help available for ‘%s’" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "import signatures that are marked as local-only" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "repair damage from the pks keyserver during import" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "do not clear the ownertrust values during import" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "do not update the trustdb after import" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "create a public key when importing a secret key" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "only accept updates to existing keys" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "remove unusable parts from key after import" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "remove as much as possible from key after import" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "skipping block of type %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu keys processed so far\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Total number processed: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " skipped new keys: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " w/o user IDs: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " imported: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " unchanged: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " new user IDs: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " new subkeys: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " new signatures: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " new key revocations: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " secret keys read: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " secret keys imported: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " secret keys unchanged: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " not imported: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " signatures cleaned: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " user IDs cleaned: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "WARNING: key %s contains preferences for unavailable\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algorithms on these user IDs:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " “%s”: preference for cipher algorithm %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " “%s”: preference for digest algorithm %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " “%s”: preference for compression algorithm %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "it is strongly suggested that you update your preferences and\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "re-distribute this key to avoid potential algorithm mismatch problems\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "you can update your preferences with: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "key %s: no user ID\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "key %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "rejected by import filter" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "key %s: PKS subkey corruption repaired\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "key %s: accepted non self-signed user ID “%s”\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "key %s: no valid user IDs\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "this may be caused by a missing self-signature\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "key %s: public key not found: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "key %s: new key - skipped\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "no writable keyring found: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "writing to ‘%s’\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "error writing keyring ‘%s’: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "key %s: public key “%s” imported\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "key %s: doesn't match our copy\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "key %s: can't locate original keyblock: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "key %s: can't read original keyblock: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "key %s: “%s” 1 new user ID\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "key %s: “%s” %d new user IDs\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "key %s: “%s” 1 new signature\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "key %s: “%s” %d new signatures\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "key %s: “%s” 1 new subkey\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "key %s: “%s” %d new subkeys\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "key %s: “%s” %d signature cleaned\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "key %s: “%s” %d signatures cleaned\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "key %s: “%s” %d user ID cleaned\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "key %s: “%s” %d user IDs cleaned\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "key %s: “%s” not changed\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "secret key %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "importing secret keys not allowed\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "key %s: secret key with invalid cipher %d - skipped\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "no default secret keyring: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "key %s: secret key imported\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "key %s: already in secret keyring\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "key %s: secret key not found: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "key %s: no public key - can't apply revocation certificate\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "key %s: invalid revocation certificate: %s - rejected\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "key %s: “%s” revocation certificate imported\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "key %s: no user ID for signature\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "key %s: unsupported public key algorithm on user ID “%s”\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "key %s: invalid self-signature on user ID “%s”\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "key %s: unsupported public key algorithm\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "key %s: invalid direct key signature\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "key %s: no subkey for key binding\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "key %s: invalid subkey binding\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "key %s: removed multiple subkey binding\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "key %s: no subkey for key revocation\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "key %s: invalid subkey revocation\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "key %s: removed multiple subkey revocation\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "key %s: skipped user ID “%s”\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "key %s: skipped subkey\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "key %s: non exportable signature (class 0x%02X) - skipped\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "key %s: revocation certificate at wrong place - skipped\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "key %s: invalid revocation certificate: %s - skipped\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "key %s: subkey signature in wrong place - skipped\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "key %s: unexpected signature class (0x%02X) - skipped\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "key %s: duplicated user ID detected - merged\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "WARNING: key %s may be revoked: fetching revocation key %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "WARNING: key %s may be revoked: revocation key %s not present.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "key %s: “%s” revocation certificate added\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "key %s: direct key signature added\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "NOTE: a key's S/N does not match the card's one\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "NOTE: primary key is online and stored on card\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "NOTE: secondary key is online and stored on card\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "error creating keyring ‘%s’: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "keyring ‘%s’ created\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "keyblock resource ‘%s’: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "failed to rebuild keyring cache: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revocation]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[self-signature]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 bad signature\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d bad signatures\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 signature not checked due to a missing key\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signatures not checked due to missing keys\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 signature not checked due to an error\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signatures not checked due to errors\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 user ID without valid self-signature detected\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d user IDs without valid self-signatures detected\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = I trust marginally\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = I trust fully\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "Please enter a domain to restrict this signature, or enter for none.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "User ID “%s” is revoked." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Are you sure you still want to sign it? (y/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Unable to sign.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "User ID “%s” is expired." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "User ID “%s” is not self-signed." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "User ID “%s” is signable. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Sign it? (y/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "The self-signature on “%s”\n" "is a PGP 2.x-style signature.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Do you want to promote it to an OpenPGP self-signature? (y/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Your current signature on “%s”\n" "has expired.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Do you want to issue a new signature to replace the expired one? (y/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Your current signature on “%s”\n" "is a local signature.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Do you want to promote it to a full exportable signature? (y/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "“%s” was already locally signed by key %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "“%s” was already signed by key %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Do you want to sign it again anyway? (y/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Nothing to sign with key %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "This key has expired!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "This key is due to expire on %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Do you want your signature to expire at the same time? (Y/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "This would make the key unusable in PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter " "“0”.\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) I will not answer.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) I have not checked at all.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) I have done casual checking.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) I have done very careful checking.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Your selection? (enter ‘?’ for more information): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Are you sure that you want to sign this key with your\n" "key “%s” (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "This will be a self-signature.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "WARNING: the signature will not be marked as non-exportable.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "WARNING: the signature will not be marked as non-revocable.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "The signature will be marked as non-exportable.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "The signature will be marked as non-revocable.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "I have not checked this key at all.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "I have checked this key casually.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "I have checked this key very carefully.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Really sign? (y/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "signing failed: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "Key has only stub or on-card key items - no passphrase to change.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "This key is not protected.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Secret parts of primary key are not available.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Secret parts of primary key are stored on-card.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Key is protected.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Can't edit this key: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Enter the new passphrase for this secret key.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "passphrase not correctly repeated; try again" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Do you really want to do this? (y/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "moving a key signature to the correct place\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "save and quit" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "show key fingerprint" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "list key and user IDs" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "select user ID N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "select subkey N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "check signatures" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "sign selected user IDs [* see below for related commands]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "sign selected user IDs locally" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "sign selected user IDs with a trust signature" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "sign selected user IDs with a non-revocable signature" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "add a user ID" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "add a photo ID" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "delete selected user IDs" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "add a subkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "add a key to a smartcard" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "move a key to a smartcard" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "move a backup key to a smartcard" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "delete selected subkeys" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "add a revocation key" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "delete signatures from the selected user IDs" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "change the expiration date for the key or selected subkeys" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "flag the selected user ID as primary" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "toggle between the secret and public key listings" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "list preferences (expert)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "list preferences (verbose)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "set preference list for the selected user IDs" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "set the preferred keyserver URL for the selected user IDs" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "set a notation for the selected user IDs" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "change the passphrase" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "change the ownertrust" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "revoke signatures on the selected user IDs" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "revoke selected user IDs" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "revoke key or selected subkeys" #: g10/keyedit.c:1439 msgid "enable key" msgstr "enable key" #: g10/keyedit.c:1440 msgid "disable key" msgstr "disable key" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "show selected photo IDs" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "compact unusable user IDs and remove unusable signatures from key" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "compact unusable user IDs and remove all signatures from key" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "error reading secret keyblock “%s”: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Secret key is available.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Need the secret key to do this.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Please use the command “toggle” first.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* The ‘sign’ command may be prefixed with an ‘l’ for local " "signatures (lsign),\n" " a ‘t’ for trust signatures (tsign), an ‘nr’ for non-revocable " "signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Key is revoked." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Really sign all user IDs? (y/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Hint: Select the user IDs to sign\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Unknown signature type ‘%s’\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "This command is not allowed while in %s mode.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "You must select at least one user ID.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "You can't delete the last user ID!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Really remove all selected user IDs? (y/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Really remove this user ID? (y/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Really move the primary key? (y/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "You must select exactly one key.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Command expects a filename argument\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Can't open ‘%s’: %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Error reading backup key from ‘%s’: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "You must select at least one key.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Do you really want to delete the selected keys? (y/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Do you really want to delete this key? (y/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Really revoke all selected user IDs? (y/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Really revoke this user ID? (y/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Do you really want to revoke the entire key? (y/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Do you really want to revoke the selected subkeys? (y/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Do you really want to revoke this subkey? (y/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Owner trust may not be set while using a user provided trust database\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Set preference list to:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Really update the preferences for the selected user IDs? (y/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Really update the preferences? (y/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Save changes? (y/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Quit without saving? (y/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "update failed: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "update secret failed: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Key not changed so no update needed.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Digest: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Features: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Keyserver no-modify" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Preferred keyserver: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notations: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "There are no preferences on a PGP 2.x-style user ID.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "This key was revoked on %s by %s key %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "This key may be revoked by %s key %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(sensitive)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "created: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "revoked: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "expired: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "expires: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "usage: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "trust: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "validity: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "This key has been disabled" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "card-no: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "revoked" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "expired" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "WARNING: Your encryption subkey expires soon.\n" #: g10/keyedit.c:3008 msgid "You may want to change its expiration date too.\n" msgstr "You may want to change its expiration date too.\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Are you sure you still want to add it? (y/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "You may not add a photo ID to a PGP2-style key.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Delete this good signature? (y/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Delete this invalid signature? (y/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Delete this unknown signature? (y/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Really delete this self-signature? (y/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Deleted %d signature.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Deleted %d signatures.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nothing deleted.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "invalid" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "User ID “%s” compacted: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "User ID “%s”: %d signature removed\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "User ID “%s”: %d signatures removed\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "User ID “%s”: already minimized\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "User ID “%s”: already clean\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "You may not add a designated revoker to a PGP 2.x-style key.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Enter the user ID of the designated revoker: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "cannot appoint a PGP 2.x style key as a designated revoker\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "you cannot appoint a key as its own designated revoker\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "this key has already been designated as a revoker\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "WARNING: appointing a key as a designated revoker cannot be undone!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Please remove selections from the secret keys.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Please select at most one subkey.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Changing expiration time for a subkey.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Changing expiration time for the primary key.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "You can't change the expiration date of a v3 key\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "No corresponding signature in secret ring\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "signing subkey %s is already cross-certified\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "subkey %s does not sign and so does not need to be cross-certified\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Please select exactly one user ID.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "skipping v3 self-signature on user ID “%s”\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Enter your preferred keyserver URL: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Are you sure you want to replace it? (y/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Are you sure you want to delete it? (y/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Enter the notation: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Proceed? (y/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "No user ID with index %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "No user ID with hash %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "No subkey with index %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "user ID: “%s”\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "signed by your key %s on %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (non-exportable)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "This signature expired on %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Are you sure you still want to revoke it? (y/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Create a revocation certificate for this signature? (y/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Not signed by you.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "You have signed these user IDs on key %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (non-revocable)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "revoked by your key %s on %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "You are about to revoke these signatures:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Really create the revocation certificates? (y/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "no secret key\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "user ID “%s” is already revoked\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "WARNING: a user ID signature is dated %d seconds in the future\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Key %s is already revoked.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Subkey %s is already revoked.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Displaying %s photo ID of size %ld for key %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "preference ‘%s’ duplicated\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "too many cipher preferences\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "too many digest preferences\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "too many compression preferences\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "invalid item ‘%s’ in preference string\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "writing direct signature\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "writing self signature\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "writing key binding signature\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "keysize invalid; using %u bits\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "keysize rounded up to %u bits\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certify" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Encrypt" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Authenticate" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsEeAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Possible actions for a %s key: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Current allowed actions: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Toggle the sign capability\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Toggle the encrypt capability\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Toggle the authenticate capability\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Finished\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Please select what kind of key you want:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA and RSA (default)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA and Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (sign only)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (sign only)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (encrypt only)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (encrypt only)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (set your own capabilities)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (set your own capabilities)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s keys may be between %u and %u bits long.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "What keysize do you want for the subkey? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "What keysize do you want? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Requested keysize is %u bits\n" #: g10/keygen.c:1722 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 "" "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" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Key is valid for? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Signature is valid for? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "invalid value\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Key does not expire at all\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Signature does not expire at all\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Key expires at %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Signature expires at %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Is this correct? (y/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " “Heinrich Heine (Der Dichter) ”\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Real name: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Invalid character in name\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Name may not start with a digit\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Name must be at least 5 characters long\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Email address: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Not a valid email address\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Comment: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Invalid character in comment\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "You are using the ‘%s’ character set.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "You selected this USER-ID:\n" " “%s”\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Please don't put the email address into the real name or the comment\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Change (N)ame, (C)omment, (E)mail or (Q)uit? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Please correct the error first\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "You need a Passphrase to protect your secret key.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "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" #: g10/keygen.c:2034 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 "" "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" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Key generation canceled.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "writing public key to ‘%s’\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "writing secret key stub to ‘%s’\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "writing secret key to ‘%s’\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "no writable public keyring found: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "no writable secret keyring found: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "error writing public keyring ‘%s’: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "error writing secret keyring ‘%s’: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "public and secret key created and signed.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Note that this key cannot be used for encryption. You may want to use\n" "the command “--edit-key” to generate a subkey for this purpose.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Key generation failed: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "key has been created %lu second in future (time warp or clock problem)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "key has been created %lu seconds in future (time warp or clock problem)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Really create? (y/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "storing key onto card failed: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "can't create backup file ‘%s’: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "NOTE: backup of card key saved to ‘%s’\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "never " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Critical signature policy: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Signature policy: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Critical preferred keyserver: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Critical signature notation: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Signature notation: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Keyring" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Primary key fingerprint:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Subkey fingerprint:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Primary key fingerprint:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Subkey fingerprint:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Key fingerprint =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Card serial no. =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "renaming ‘%s’ to ‘%s’ failed: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "WARNING: 2 files with confidential information exists.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s is the unchanged one\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s is the new one\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Please fix this possible security flaw\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "caching keyring ‘%s’\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu keys cached so far (%lu signatures)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu keys cached (%lu signatures)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: keyring created\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "include revoked keys in search results" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "include subkeys when searching by key ID" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "use temporary files to pass data to keyserver helpers" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "do not delete temporary files after using them" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "automatically retrieve keys when verifying signatures" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "honor the preferred keyserver URL set on the key" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "honor the PKA record set on a key when retrieving keys" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "WARNING: keyserver option ‘%s’ is not used on this platform\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "disabled" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Enter number(s), N)ext, or Q)uit > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "invalid keyserver protocol (us %d!=handler %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "key “%s” not found on keyserver\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "key not found on keyserver\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "requesting key %s from %s server %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "requesting key %s from %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "searching for names from %s server %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "searching for names from %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "sending key %s to %s server %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "sending key %s to %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "searching for “%s” from %s server %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "searching for “%s” from %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "no keyserver action!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "WARNING: keyserver handler from a different version of GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "keyserver did not send VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "keyserver communications error: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "no keyserver known (use option --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "external keyserver calls are not supported in this build\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "no handler for keyserver scheme ‘%s’\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "action ‘%s’ not supported with keyserver scheme ‘%s’\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s does not support handler version %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "keyserver timed out\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "keyserver internal error\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "“%s” not a key ID: skipping\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "WARNING: unable to refresh key %s via %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "refreshing 1 key from %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "refreshing %d keys from %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "WARNING: unable to fetch URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "WARNING: unable to parse URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "weird size for an encrypted session key (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s encrypted session key\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "passphrase generated with unknown digest algorithm %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "public key is %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "public key encrypted data: good DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "encrypted with %u-bit %s key, ID %s, created %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " “%s”\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "encrypted with %s key, ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "public key decryption failed: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "encrypted with %lu passphrases\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "encrypted with 1 passphrase\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "assuming %s encrypted data\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "IDEA cipher unavailable, optimistically attempting to use %s instead\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "decryption okay\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "WARNING: message was not integrity protected\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "WARNING: encrypted message has been manipulated!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "decryption failed: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "NOTE: sender requested “for-your-eyes-only”\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "original file name='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "WARNING: multiple plaintexts seen\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "standalone revocation - use “gpg --import” to apply\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "no signature found\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "signature verification suppressed\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "can't handle this ambiguous signature data\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Signature made %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " using %s key %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Signature made %s using %s key ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Key available at: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "BAD signature from “%s”" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Expired signature from “%s”" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Good signature from “%s”" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[uncertain]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " aka “%s”" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Signature expired %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Signature expires %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s signature, digest algorithm %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binary" #: g10/mainproc.c:1947 msgid "textmode" msgstr "textmode" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "unknown" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "WARNING: not a detached signature; file ‘%s’ was NOT verified!\n" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Can't check signature: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "not a detached signature\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "WARNING: multiple signatures detected. Only the first will be checked.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "standalone signature of class 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "old style (PGP 2.x) signature\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "invalid root packet detected in proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "can't disable core dumps: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat of ‘%s’ failed in %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) failed in %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "WARNING: using experimental public key algorithm %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "WARNING: Elgamal sign+encrypt keys are deprecated\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "WARNING: using experimental cipher algorithm %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "WARNING: using experimental digest algorithm %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "WARNING: digest algorithm %s is deprecated\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "please see %s for more information\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "NOTE: This feature is not available in %s\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: deprecated option “%s”\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "WARNING: “%s” is a deprecated option\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "please use “%s%s” instead\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "WARNING: “%s” is a deprecated command - do not use it\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Uncompressed" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "uncompressed|none" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "this message may not be usable by %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "ambiguous option ‘%s’\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "unknown option ‘%s’\n" #: g10/misc.c:1331 #, c-format msgid "Unknown weak digest '%s'\n" msgstr "Unknown weak digest ‘%s’\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "File ‘%s’ exists. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Overwrite? (y/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: unknown suffix\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Enter new filename" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "writing to stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "assuming signed data in ‘%s’\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "new configuration file ‘%s’ created\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "WARNING: options in ‘%s’ are not yet active during this run\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "directory ‘%s’ created\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "can't handle public key algorithm %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "WARNING: potentially insecure symmetrically encrypted session key\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpacket of type %d has critical bit set\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent is not available in this session\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "malformed GPG_AGENT_INFO environment variable\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent protocol version %d is not supported\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "can't connect to ‘%s’: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problem with the agent - disabling agent use\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (main key ID %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "You need a passphrase to unlock the secret key for user:\n" "“%.*s”\n" "%u-bit %s key, ID %s, created %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Repeat passphrase\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Enter passphrase\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "cancelled by user\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "can't query passphrase in batch mode\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Enter passphrase: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "You need a passphrase to unlock the secret key for\n" "user: “%s”\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bit %s key, ID %s, created %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (subkey on main key ID %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repeat passphrase: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Enter JPEG filename for photo ID: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "unable to open JPEG file ‘%s’: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "This JPEG is really large (%d bytes) !\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Are you sure you want to use it? (y/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "‘%s’ is not a JPEG file\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Is this photo correct (y/N/q)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "no photo viewer set\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "unable to display photo ID!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "No reason specified" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Key is superseded" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Key has been compromised" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Key is no longer used" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "User ID is no longer valid" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "reason for revocation: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "revocation comment: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "No trust value assigned to:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " aka “%s”\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "How much do you trust that this key actually belongs to the named user?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = I don't know or won't say\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = I do NOT trust\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = I trust ultimately\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = back to the main menu\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = skip this key\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = quit\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "The minimum trust level for this key is: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Your decision? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Do you really want to set this key to ultimate trust? (y/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certificates leading to an ultimately trusted key:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%s: There is no assurance this key belongs to the named user\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "%s: There is limited assurance this key belongs to the named user\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "This key probably belongs to the named user\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "This key belongs to us\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Use this key anyway? (y/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "WARNING: Using untrusted key!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "WARNING: this key might be revoked (revocation key not present)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "WARNING: This key has been revoked by its designated revoker!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "WARNING: This key has been revoked by its owner!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " This could mean that the signature is forged.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "WARNING: This subkey has been revoked by its owner!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Note: This key has been disabled.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Note: Verified signer's address is ‘%s’\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Note: Signer's address ‘%s’ does not match DNS entry\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "trustlevel adjusted to FULL due to valid PKA info\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "trustlevel adjusted to NEVER due to bad PKA info\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Note: This key has expired!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "WARNING: This key is not certified with a trusted signature!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " There is no indication that the signature belongs to the owner.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "WARNING: We do NOT trust this key!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " The signature is probably a FORGERY.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " It is not certain that the signature belongs to the owner.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: skipped: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: skipped: public key already present\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "You did not specify a user ID. (you may use “-r”)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Current recipients:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Enter the user ID. End with an empty line: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "No such user ID.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "skipped: public key already set as default recipient\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Public key is disabled.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "skipped: public key already set\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "unknown default recipient “%s”\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: skipped: public key is disabled\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "no valid addressees\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "data not saved; use option “--output” to save it\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "error creating ‘%s’: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Detached signature.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Please enter name of data file: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "reading stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "no signed data\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "can't open signed data ‘%s’\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonymous recipient; trying secret key %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "okay, we are the anonymous recipient.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "old encoding of the DEK is not supported\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "cipher algorithm %d%s is unknown or disabled\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "WARNING: cipher algorithm %s not found in recipient preferences\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "NOTE: secret key %s expired at %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "NOTE: key has been revoked" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet failed: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "key %s has no user IDs\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "To be revoked by:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(This is a sensitive revocation key)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Create a designated revocation certificate for this key? (y/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "ASCII armored output forced.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet failed: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Revocation certificate created.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "no revocation keys found for “%s”\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "secret key “%s” not found: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "no corresponding public key: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "public key does not match secret key!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Create a revocation certificate for this key? (y/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "unknown protection algorithm\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "NOTE: This key is not protected!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Please select the reason for the revocation:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Cancel" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Probably you want to select %d here)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Enter an optional description; end it with an empty line:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Reason for revocation: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(No description given)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Is this okay? (y/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "secret key parts are not available\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "protection algorithm %d%s is not supported\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "protection digest %d is not supported\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Invalid passphrase; please try again" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "WARNING: Weak key detected - please change passphrase again.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "generating the deprecated 16-bit checksum for secret key protection\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "weak key created - retrying\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "cannot avoid weak key for symmetric cipher; tried %d times!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA requires the hash length to be a multiple of 8 bits\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA key %s uses an unsafe (%u bit) hash\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA key %s requires a %u bit or larger hash\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "WARNING: signature digest conflict in message\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "WARNING: signing subkey %s is not cross-certified\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "WARNING: signing subkey %s has an invalid cross-certification\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "public key %s is %lu second newer than the signature\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "public key %s is %lu seconds newer than the signature\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "key %s was created %lu second in the future (time warp or clock problem)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "NOTE: signature key %s expired %s\n" #: g10/sig-check.c:254 #, c-format msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "Note: signatures using the %s algorithm are rejected\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "assuming bad signature from key %s due to an unknown critical bit\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "key %s: no subkey for subkey revocation signature\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "key %s: no subkey for subkey binding signature\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "checking created signature failed: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s signature from: “%s”\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" #: g10/sign.c:960 msgid "signing:" msgstr "signing:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s encryption will be used\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "key is not flagged as insecure - can't use it with the faked RNG!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "skipped “%s”: duplicated\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "skipped “%s”: %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "skipped: secret key already present\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "this is a PGP generated Elgamal key which is not secure for signatures!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "trust record %lu, type %d: write failed: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# List of assigned trustvalues, created %s\n" "# (Use “gpg --import-ownertrust” to restore them)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "error in ‘%s’: %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "line too long" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "colon missing" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "invalid fingerprint" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "ownertrust value missing" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "error finding trust record in ‘%s’: %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "read error in ‘%s’: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: sync failed: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "can't create lock for ‘%s’\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "can't lock ‘%s’\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek failed: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: write failed (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "trustdb transaction too large\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "can't access ‘%s’: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: directory does not exist!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: failed to create version record: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: invalid trustdb created\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: trustdb created\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "NOTE: trustdb not writable\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: invalid trustdb\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: failed to create hashtable: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: error updating version record: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: error reading version record: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: error writing version record: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek failed: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read failed (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: not a trustdb file\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: version record with recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: invalid file version %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: error reading free record: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: error writing dir record: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: failed to zero a record: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: failed to append a record: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Error: The trustdb is corrupted.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "can't handle text lines longer than %d characters\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "input line longer than %d characters\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "‘%s’ is not a valid long keyID\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "key %s: accepted as trusted key\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "key %s occurs more than once in the trustdb\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "key %s: no public key for trusted key - skipped\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "key %s marked as ultimately trusted\n" #: g10/trustdb.c:344 #, 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:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "trust record %lu is not of requested type %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "You may try to re-create the trustdb using the commands:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "If that does not work, please consult the manual\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "unable to use unknown trust model (%d) - assuming %s trust model\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "using %s trust model\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10 translator see trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ revoked]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ expired]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ unknown]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ undef ]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[marginal]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ full ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ultimate]" #: g10/trustdb.c:553 msgid "undefined" msgstr "undefined" #: g10/trustdb.c:554 msgid "never" msgstr "never" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginal" #: g10/trustdb.c:556 msgid "full" msgstr "full" #: g10/trustdb.c:557 msgid "ultimate" msgstr "ultimate" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "no need for a trustdb check\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "next trustdb check due at %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "no need for a trustdb check with ‘%s’ trust model\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "no need for a trustdb update with ‘%s’ trust model\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "public key %s not found: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "please do a --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "checking the trustdb\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d keys processed (%d validity counts cleared)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "no ultimately trusted keys found\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "public key of ultimately trusted key %s not found\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "unable to update trustdb version record: write failed: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "input line %u too long or missing LF\n" #: util/errors.c:53 msgid "general error" msgstr "general error" #: util/errors.c:54 msgid "unknown packet type" msgstr "unknown packet type" #: util/errors.c:55 msgid "unknown version" msgstr "unknown version" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "unknown pubkey algorithm" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "unknown digest algorithm" #: util/errors.c:58 msgid "bad public key" msgstr "bad public key" #: util/errors.c:59 msgid "bad secret key" msgstr "bad secret key" #: util/errors.c:60 msgid "bad signature" msgstr "bad signature" #: util/errors.c:61 msgid "checksum error" msgstr "checksum error" #: util/errors.c:62 msgid "bad passphrase" msgstr "bad passphrase" #: util/errors.c:63 msgid "public key not found" msgstr "public key not found" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "unknown cipher algorithm" #: util/errors.c:65 msgid "can't open the keyring" msgstr "can't open the keyring" #: util/errors.c:66 msgid "invalid packet" msgstr "invalid packet" #: util/errors.c:67 msgid "invalid armor" msgstr "invalid armor" #: util/errors.c:68 msgid "no such user id" msgstr "no such user id" #: util/errors.c:69 msgid "secret key not available" msgstr "secret key not available" #: util/errors.c:70 msgid "wrong secret key used" msgstr "wrong secret key used" #: util/errors.c:71 msgid "not supported" msgstr "not supported" #: util/errors.c:72 msgid "bad key" msgstr "bad key" #: util/errors.c:73 msgid "file read error" msgstr "file read error" #: util/errors.c:74 msgid "file write error" msgstr "file write error" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "unknown compress algorithm" #: util/errors.c:76 msgid "file open error" msgstr "file open error" #: util/errors.c:77 msgid "file create error" msgstr "file create error" #: util/errors.c:78 msgid "invalid passphrase" msgstr "invalid passphrase" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "unimplemented pubkey algorithm" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "unimplemented cipher algorithm" #: util/errors.c:81 msgid "unknown signature class" msgstr "unknown signature class" #: util/errors.c:82 msgid "trust database error" msgstr "trust database error" #: util/errors.c:83 msgid "bad MPI" msgstr "bad MPI" #: util/errors.c:84 msgid "resource limit" msgstr "resource limit" #: util/errors.c:85 msgid "invalid keyring" msgstr "invalid keyring" #: util/errors.c:86 msgid "bad certificate" msgstr "bad certificate" #: util/errors.c:87 msgid "malformed user id" msgstr "malformed user id" #: util/errors.c:88 msgid "file close error" msgstr "file close error" #: util/errors.c:89 msgid "file rename error" msgstr "file rename error" #: util/errors.c:90 msgid "file delete error" msgstr "file delete error" #: util/errors.c:91 msgid "unexpected data" msgstr "unexpected data" #: util/errors.c:92 msgid "timestamp conflict" msgstr "timestamp conflict" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "unusable pubkey algorithm" #: util/errors.c:94 msgid "file exists" msgstr "file exists" #: util/errors.c:95 msgid "weak key" msgstr "weak key" #: util/errors.c:96 msgid "invalid argument" msgstr "invalid argument" #: util/errors.c:97 msgid "bad URI" msgstr "bad URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "unsupported URI" #: util/errors.c:99 msgid "network error" msgstr "network error" #: util/errors.c:101 msgid "not encrypted" msgstr "not encrypted" #: util/errors.c:102 msgid "not processed" msgstr "not processed" #: util/errors.c:104 msgid "unusable public key" msgstr "unusable public key" #: util/errors.c:105 msgid "unusable secret key" msgstr "unusable secret key" #: util/errors.c:106 msgid "keyserver error" msgstr "keyserver error" #: util/errors.c:107 msgid "canceled" msgstr "canceled" #: util/errors.c:108 msgid "no card" msgstr "no card" #: util/errors.c:109 msgid "no data" msgstr "no data" #: util/logger.c:183 msgid "ERROR: " msgstr "ERROR: " #: util/logger.c:186 msgid "WARNING: " msgstr "WARNING: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... this is a bug (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "you found a bug ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "yes" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|okay" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancel|cancel" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "WARNING: using insecure memory!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "operation is not possible without initialized secure memory\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(you may have used the wrong program for this task)\n" gnupg-1.4.20/po/be.po0000644000175000017500000043410012635457217011221 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) 2003 Free Software Foundation, Inc. # Ales Nyakhaychyk , 2003. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.2.2\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:19+0200\n" "Last-Translator: Ales Nyakhaychyk \n" "Language-Team: Belarusian \n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.0.2\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "немагчыма адкрыць \"%s\"\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "запіс у stdout\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "" #: cipher/random.c:894 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 "" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "%s: немагчыма стварыць хэш-табліцу: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Калі ласка, абярыце від ключа, які Вам патрэбны:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "паказаць ключы й адбіткі пальцаў" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "выдаліць ключы са зьвязку сакрэтных ключоў" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "стварыць новую пару ключоў" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "стварыць новую пару ключоў" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "%s: немагчыма стварыць хэш-табліцу: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "стварыць новую пару ключоў" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "" #: g10/armor.c:459 msgid "armor header: " msgstr "" #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "" #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "нечаканыя даньні" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "" #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "памылка CRC; %06lx - %06lx\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "сакрэтны ключ недаступны" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "" #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 msgid "male" msgstr "" #: g10/card-util.c:513 msgid "female" msgstr "" #: g10/card-util.c:513 msgid "unspecified" msgstr "" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "непадтрымліваецца" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "за шмат пераваг для \"%c\"\n" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "недапушчальныя дапомныя перавагі\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "недапушчальныя дапомныя перавагі\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "паказаць ключы й адбіткі пальцаў" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "паказаць ключы й адбіткі пальцаў" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "паказаць ключы й адбіткі пальцаў" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "" #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "" #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "" #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Калі ласка, абярыце від ключа, які Вам патрэбны:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "Подпіс створаны ў %.*s з выкарыстаньнем %s ID ключа %08lX\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr "" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Калі ласка, абярыце від ключа, які Вам патрэбны:\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "невядомы альгарытм сьцісканьня" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "сакрэтны ключ недаступны" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "несумяшчальныя загады\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "паказаць гэтую даведку" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Даведка адсутнічае" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 msgid "change the login name" msgstr "" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "за шмат пераваг для \"%c\"\n" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "паказаць ключы й адбіткі пальцаў" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "стварыць новую пару ключоў" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "несумяшчальныя загады\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "несумяшчальныя загады\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "сакрэтны ключ недаступны" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Нерэчаісны загад (паспрабуйце \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "сакрэтны ключ недаступны" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Паўтарыце пароль: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "немагчыма адкрыць \"%s\"\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "выдаліць ключы са зьвязку грамадскіх ключоў" #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "" #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "" #: g10/encode.c:229 #, fuzzy, c-format msgid "using cipher %s\n" msgstr "збой падпісаньня: %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "" #: g10/exec.c:174 g10/openfile.c:468 #, fuzzy, c-format msgid "can't create directory `%s': %s\n" msgstr "%s: немагчыма стварыць тэчку: %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "немагчыма адкрыць %s: %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "немагчыма адкрыць %s: %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "" "Увядзіце новы пароль для гэтага сакрэтнага ключа.\n" "\n" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "сакрэтны ключ недаступны" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "Ключ абаронены.\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "Ключ абаронены.\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "%s: немагчыма стварыць хэш-табліцу: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Загады:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[файл]|зрабіць подпіс" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[файл]|зрабіць чысты тэкставы подпіс" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "зрабіць адчэплены подпіс" #: g10/gpg.c:393 msgid "encrypt data" msgstr "зашыфраваць даньні" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "шыфраваньне толькі сымэтрычнымі шыфрамі" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "разшыфраваць даньні (дапомна)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "праверыць подпіс" #: g10/gpg.c:401 msgid "list keys" msgstr "паказаць сьпіс ключоў" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "праверыць подпісы ключа" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "паказаць ключы й адбіткі пальцаў" #: g10/gpg.c:406 msgid "list secret keys" msgstr "паказаць сакрэтныя ключы" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "стварыць новую пару ключоў" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "выдаліць ключы са зьвязку грамадскіх ключоў" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "выдаліць ключы са зьвязку сакрэтных ключоў" #: g10/gpg.c:411 msgid "sign a key" msgstr "падпісаць ключ" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "падпісаць ключ толькі мясцова" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "падпісаць ці рэдагаваць ключ" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "" #: g10/gpg.c:416 msgid "export keys" msgstr "экспарт ключоў" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "экспартаваць ключы на паслужнік ключоў" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "імпартаваць ключы з паслужніка ключоў" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "абнавіць усе ключы з паслужніка ключоў" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "імпартаваць/аб'яднаць ключы" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Выбары:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|ІМЯ| зашыфраваць для вылучанай асобы" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "" #: g10/gpg.c:486 msgid "use as output file" msgstr "выкарыстоўваць у якасьці файла вываду" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "шматслоўнасьць" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "не рабіць ніякіх зьменаў" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "пытацца перад перазапісам" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Глядзіце man старонку, для больш поўнага апісаньня ўсіх загадаў і выбараў)\n" #: g10/gpg.c:576 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 [файл] падпісаць і зашыфраваць для карыстальніка Bob\n" " --clearsign [файл] стварыць чысты тэкставы подпіс\n" " --detach-sign [файл] стварыць адчэплены подпіс\n" " --list-keys [назвы] паказаць ключы\n" " --fingerprint [назвы] паказаць адбіткі пальцаў\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Калі ласка, паведамляйце пра памылкі на .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Выкарыстаньне: gpg [выбары] [файлы] (-h для даведкі)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Сынтаксіс: gpg [выбары] [файлы]\n" "sign, check, encrypt ці decrypt\n" "Дапомнае дзеяньне залежыць ад уваходных даньняў\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Альгарытмы, якія падтрымліваюцца:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "" #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "" #: g10/gpg.c:827 msgid "Hash: " msgstr "" #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "" #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "Выкарыстаньне: gpg [выбары] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "несумяшчальныя загады\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "невядомая вэрсыя" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s - гэта недапушчальнае мноства знакаў\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s - гэта недапушчальнае мноства знакаў\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: недапушчальныя выбары экспартаваньня\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "недапушчальныя выбары экспартаваньня\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: недапушчальныя выбары імпартаваньня\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "недапушчальныя выбары імпартаваньня\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: недапушчальныя выбары экспартаваньня\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "недапушчальныя выбары экспартаваньня\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: недапушчальныя выбары імпартаваньня\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "недапушчальныя выбары імпартаваньня\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s - гэта недапушчальнае мноства знакаў\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s - гэта недапушчальнае мноства знакаў\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s - гэта недапушчальнае мноства знакаў\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: недапушчальныя выбары экспартаваньня\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "недапушчальныя выбары экспартаваньня\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: недапушчальныя выбары экспартаваньня\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s не дазваляецца разам з %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s ня мае сэнсу разам з %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "запіс у stdout\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "недапушчальныя дапомныя перавагі\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "" #: g10/gpg.c:3191 #, fuzzy, c-format msgid "%s does not yet work with %s\n" msgstr "%s ня мае сэнсу разам з %s!\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [назва_файла]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [назва_файла]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [назва_файла]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [назва_файла]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [назва_файла]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [назва_файла]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [назва_файла]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [назва_файла]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [назва_файла]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [назва_файла]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key user-id" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key user-id" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key user-id [загады]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "" #: g10/gpg.c:3667 #, fuzzy, c-format msgid "keyserver send failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/gpg.c:3669 #, fuzzy, c-format msgid "keyserver receive failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/gpg.c:3671 #, fuzzy, c-format msgid "key export failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/gpg.c:3682 #, fuzzy, c-format msgid "keyserver search failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[назва_файла]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "%s: немагчыма стварыць тэчку: %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "працаваць менш шматслоўна" #: g10/gpgv.c:73 #, fuzzy msgid "take the keys from this keyring" msgstr "выдаліць ключы са зьвязку грамадскіх ключоў" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "" #: g10/gpgv.c:101 #, fuzzy msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Выкарыстаньне: gpg [выбары] [файлы] (-h для даведкі)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" #: g10/helptext.c:228 #, fuzzy #| msgid "" #| "Enter the new passphrase for this secret key.\n" #| "\n" msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "" "Увядзіце новы пароль для гэтага сакрэтнага ключа.\n" "\n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Адкажыце \"так\", калі Вы згодны з перазапісам файла" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" #: g10/helptext.c:285 msgid "No help available" msgstr "Даведка адсутнічае" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Для \"%s\" даведка адсутнічае" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr "" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr "" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr "" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr "" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr "" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr "" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr "" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr "" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr "" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr "" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr "" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr "Подпіс створаны ў %.*s з выкарыстаньнем %s ID ключа %08lX\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr "" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr "" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "%s: немагчыма стварыць тэчку: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "%s: немагчыма стварыць тэчку: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "сакрэтны ключ недаступны" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "выдаліць ключы са зьвязку сакрэтных ключоў" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "грамадскі ключ ня знойдзены" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "%s: тэчка створана\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "%s:%d: недапушчальныя выбары экспартаваньня\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "Ключ абаронены.\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "%s: тэчка створана\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr "" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr "" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "" #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "" #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr "" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "" #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "" #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "" #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Перазапісаць (y/N)?" #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "" #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "" #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "" #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Гэты ключ згубіў састарэў!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "" #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr "" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr "" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr "" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr "" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "" #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "" #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "сакрэтны ключ недаступны" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Ключ абаронены.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Увядзіце новы пароль для гэтага сакрэтнага ключа.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "" #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "паказаць ключы й адбіткі пальцаў" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "праверыць подпісы ключа" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "падпісаць ключ толькі мясцова" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "дрэнны ключ" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "паказаць сакрэтныя ключы" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "" #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "падпісаць ключ" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "паказаць сьпіс ключоў" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Даступны сакрэтны ключ.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "" #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "" #: g10/keyedit.c:1772 #, fuzzy msgid "Hint: Select the user IDs to sign\n" msgstr "падпісаць ключ толькі мясцова" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "невядомая вэрсыя" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "" #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "" #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "" #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "немагчыма адкрыць %s: %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "" #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "" #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "" #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "" #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "" #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Захаваць зьмены? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Выйсьці не захаваўшы зьмены? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "" #: g10/keyedit.c:2398 msgid "Features: " msgstr "" #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "" "@\n" "Выбары:\n" " " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "памылка чытаньня файла" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "памылка чытаньня файла" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr "збой падпісаньня: %s\n" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr "збой падпісаньня: %s\n" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr "памылка чытаньня файла" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 msgid "You may want to change its expiration date too.\n" msgstr "" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "" #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "грамадскі ключ ня знойдзены" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "грамадскі ключ ня знойдзены" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "" #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Калі ласка, абярыце від ключа, які Вам патрэбны:\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "выдаліць ключы са зьвязку сакрэтных ключоў" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "" #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "" #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "" #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Перазапісаць (y/N)?" #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "памылка чытаньня файла" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr "" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "" #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "" #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr "" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "" #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "выдаліць ключы са зьвязку сакрэтных ключоў" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "выдаліць ключы са зьвязку сакрэтных ключоў" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "за шмат пераваг для \"%c\"\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "за шмат пераваг для \"%c\"\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "за шмат пераваг для \"%c\"\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "недапушчальныя дапомныя перавагі\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "" #: g10/keygen.c:1362 msgid "Sign" msgstr "" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "зашыфраваць даньні" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr "" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Калі ласка, абярыце від ключа, які Вам патрэбны:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr "" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr "" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr "" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr "" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr "" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr "" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr "" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr "" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "" #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "" #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "" #: g10/keygen.c:1722 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 "" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "" #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "Подпіс створаны ў %.*s з выкарыстаньнем %s ID ключа %08lX\n" #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "збой падпісаньня: %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Подпіс створаны ў %.*s з выкарыстаньнем %s ID ключа %08lX\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "" #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" #: g10/keygen.c:1836 msgid "Real name: " msgstr "" #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "" #: g10/keygen.c:1856 msgid "Email address: " msgstr "" #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "" #: g10/keygen.c:1870 msgid "Comment: " msgstr "" #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "" #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "" #: g10/keygen.c:2012 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 "" #: g10/keygen.c:2034 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 "" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "запіс у stdout\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "" #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "%s: немагчыма стварыць тэчку: %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "" #: g10/keylist.c:267 msgid "Signature policy: " msgstr "" #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "" #: g10/keylist.c:361 msgid "Signature notation: " msgstr "" #: g10/keylist.c:471 msgid "Keyring" msgstr "" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr "" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr "" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr "паказаць ключы й адбіткі пальцаў" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "немагчыма адкрыць \"%s\"\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "паказаць сьпіс ключоў і подпісаў" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: створаны зьвязак ключоў\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" #: g10/keyserver.c:538 msgid "disabled" msgstr "" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "недапушчальныя выбары экспартаваньня\n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "грамадскі ключ ня знойдзены" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "экспартаваць ключы на паслужнік ключоў" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "імпартаваць ключы з паслужніка ключоў" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "імпартаваць ключы з паслужніка ключоў" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "недапушчальныя выбары экспартаваньня\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "збой падпісаньня: %s\n" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "агульная памылка" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "немагчыма адкрыць %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "%u-бітавы %s ключ, ID %08lX, створаны %s" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr "" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "Паўтарыце пароль\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "" #: g10/mainproc.c:526 #, fuzzy, c-format msgid "encrypted with %lu passphrases\n" msgstr "Паўтарыце пароль\n" #: g10/mainproc.c:528 #, fuzzy msgid "encrypted with 1 passphrase\n" msgstr "Паўтарыце пароль\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Подпіс створаны ў %.*s з выкарыстаньнем %s ID ключа %08lX\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr "" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Подпіс створаны ў %.*s з выкарыстаньнем %s ID ключа %08lX\n" #: g10/mainproc.c:1616 #, fuzzy msgid "Key available at: " msgstr "Даведка адсутнічае" #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr "" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "" #: g10/mainproc.c:1945 #, fuzzy, c-format msgid "%s signature, digest algorithm %s\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "" #: g10/mainproc.c:1947 msgid "textmode" msgstr "" #: g10/mainproc.c:1947 g10/trustdb.c:551 #, fuzzy msgid "unknown" msgstr "невядомая вэрсыя" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "немагчыма адкрыць %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr "" "па больш падрабязныя зьвесткі шукайце на http://www.gnupg.org/faq.html\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "сакрэтны ключ недаступны" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "" #: g10/misc.c:755 msgid "Uncompressed" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "невядомая вэрсыя" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "невядомая вэрсыя" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Файл \"%s\" ужо йснуе. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Перазапісаць (y/N)?" #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Увядзіце новае ймя файла" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "запіс у stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: тэчка створана\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr "" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Вам неабходна ўвесьці пароль, каб адчыніць сакрэтны ключ для карыстальніка:\n" "\"%.*s\"\n" "%u-бітавы %s ключ, ID %08lX, створаны %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Паўтарыце пароль\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Увядзіце пароль\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "скасавана карыстальнікам\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Увядзіце пароль: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Вам неабходна ўвесьці пароль, каб адчыніць сакрэтны ключ для\n" "карыстальніка: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-бітавы %s ключ, ID %08lX, створаны %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Паўтарыце пароль: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "" #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "немагчыма адкрыць %s: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "" #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "" #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "" #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "" #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr "" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr "" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr "" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr "" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr "" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr "" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " q = quit [выйсьці]\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "" #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "" #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "" #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr "" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr "" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr "" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Калі ласка, задайце назву файла даньняў: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "чытаецца stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, fuzzy, c-format msgid "build_packet failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "паказаць сьпіс ключоў і ID карыстальнікаў" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "" #: g10/revoke.c:342 g10/revoke.c:564 #, fuzzy, c-format msgid "make_keysig_packet failed: %s\n" msgstr "збой падпісаньня: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "" #: g10/revoke.c:531 #, fuzzy msgid "unknown protection algorithm\n" msgstr "невядомы альгарытм сьцісканьня" #: g10/revoke.c:539 #, fuzzy msgid "NOTE: This key is not protected!\n" msgstr "Ключ абаронены.\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" #: g10/revoke.c:631 #, fuzzy msgid "Please select the reason for the revocation:\n" msgstr "Калі ласка, абярыце від ключа, які Вам патрэбны:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "" #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Недапушчальны пароль. Калі ласка, паспрабуйце шчэ раз" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "" #: g10/sig-check.c:254 #, fuzzy, c-format msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "нерэчаісны хэш-альгарытм \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" #: g10/sign.c:960 msgid "signing:" msgstr "" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "пароль занадта доўгі\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "паказаць ключы й адбіткі пальцаў" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "памылка стварэньня \"%s\": %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "памылка чытаньня файла" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "%s: немагчыма стварыць тэчку: %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "немагчыма адкрыць \"%s\"\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "немагчыма адкрыць %s: %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: немагчыма стварыць хэш-табліцу: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "памылка чытаньня файла" #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "збой падпісаньня: %s\n" #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "невядомая вэрсыя" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 msgid "never" msgstr "" #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "грамадскі ключ ня знойдзены" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "" #: util/errors.c:53 msgid "general error" msgstr "агульная памылка" #: util/errors.c:54 msgid "unknown packet type" msgstr "" #: util/errors.c:55 msgid "unknown version" msgstr "невядомая вэрсыя" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "" #: util/errors.c:58 msgid "bad public key" msgstr "дрэнны грамадскі ключ" #: util/errors.c:59 msgid "bad secret key" msgstr "дрэнны сакрэтны ключ" #: util/errors.c:60 msgid "bad signature" msgstr "" #: util/errors.c:61 msgid "checksum error" msgstr "памылка праверчае сумы" #: util/errors.c:62 msgid "bad passphrase" msgstr "дрэнны пароль" #: util/errors.c:63 msgid "public key not found" msgstr "грамадскі ключ ня знойдзены" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "" #: util/errors.c:65 msgid "can't open the keyring" msgstr "немагчыма адчыніць зьвязак ключоў" #: util/errors.c:66 msgid "invalid packet" msgstr "" #: util/errors.c:67 msgid "invalid armor" msgstr "" #: util/errors.c:68 msgid "no such user id" msgstr "карыстальнік з такім ID адсутнічае" #: util/errors.c:69 msgid "secret key not available" msgstr "сакрэтны ключ недаступны" #: util/errors.c:70 msgid "wrong secret key used" msgstr "" #: util/errors.c:71 msgid "not supported" msgstr "непадтрымліваецца" #: util/errors.c:72 msgid "bad key" msgstr "дрэнны ключ" #: util/errors.c:73 msgid "file read error" msgstr "памылка чытаньня файла" #: util/errors.c:74 msgid "file write error" msgstr "памылка запісу файла" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "невядомы альгарытм сьцісканьня" #: util/errors.c:76 msgid "file open error" msgstr "памылка адчыненьня файла" #: util/errors.c:77 msgid "file create error" msgstr "памылка стварэньня файла" #: util/errors.c:78 msgid "invalid passphrase" msgstr "нерэчаісны пароль" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "" #: util/errors.c:81 msgid "unknown signature class" msgstr "" #: util/errors.c:82 msgid "trust database error" msgstr "" #: util/errors.c:83 msgid "bad MPI" msgstr "дрэнны MPI" #: util/errors.c:84 msgid "resource limit" msgstr "" #: util/errors.c:85 msgid "invalid keyring" msgstr "" #: util/errors.c:86 msgid "bad certificate" msgstr "дрэнны сэртыфікат" #: util/errors.c:87 msgid "malformed user id" msgstr "" #: util/errors.c:88 msgid "file close error" msgstr "памылка зачыненьня файла" #: util/errors.c:89 msgid "file rename error" msgstr "памылка перайменаваньня файла" #: util/errors.c:90 msgid "file delete error" msgstr "памылка выдаленьня файла" #: util/errors.c:91 msgid "unexpected data" msgstr "нечаканыя даньні" #: util/errors.c:92 msgid "timestamp conflict" msgstr "" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "" #: util/errors.c:94 msgid "file exists" msgstr "" #: util/errors.c:95 msgid "weak key" msgstr "" #: util/errors.c:96 msgid "invalid argument" msgstr "" #: util/errors.c:97 msgid "bad URI" msgstr "" #: util/errors.c:98 msgid "unsupported URI" msgstr "" #: util/errors.c:99 msgid "network error" msgstr "" #: util/errors.c:101 msgid "not encrypted" msgstr "" #: util/errors.c:102 msgid "not processed" msgstr "" #: util/errors.c:104 msgid "unusable public key" msgstr "" #: util/errors.c:105 msgid "unusable secret key" msgstr "" #: util/errors.c:106 msgid "keyserver error" msgstr "" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "скасавана карыстальнікам\n" #: util/errors.c:108 msgid "no card" msgstr "" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "зашыфраваць даньні" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 #, fuzzy msgid "yes" msgstr "yes [так]" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no [не]" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit [выйсьці]" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 msgid "cC" msgstr "" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "УВАГА! Выкарыстоўваецца небясьпечная памяць!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "па больш падрабязныя зьвесткі шукайце на http://www.gnupg.org/documentation/" "faqs.html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "дзеяньне немагчымае без распачатае бясьпечнае памяці\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "" #~ msgid "Command> " #~ msgstr "Загад> " #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA патрабуе выкарыстаньня 160-і бітавага хэш-альгарытму\n" #, fuzzy #~ msgid "expired: %s)" #~ msgstr "збой падпісаньня: %s\n" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "Ключ абаронены.\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "немагчыма адкрыць %s: %s\n" #~ msgid "passphrase too long\n" #~ msgstr "пароль занадта доўгі\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key user-id" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key user-id" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "зрабіць адчэплены подпіс" #~ msgid "help" #~ msgstr "даведка (help)" #, fuzzy #~ msgid "generate" #~ msgstr "агульная памылка" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "%s: немагчыма стварыць тэчку: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: немагчыма стварыць тэчку: %s\n" #, fuzzy #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "немагчыма адкрыць %s: %s\n" #, fuzzy #~ msgid "can't open file: %s\n" #~ msgstr "немагчыма адкрыць %s: %s\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[файлы]|зашыфраваць файлы" #~ msgid "|[files]|decrypt files" #~ msgstr "|[файлы]|разшыфраваць файлы" #~ msgid "always use a MDC for encryption" #~ msgstr "заўсёдвы выкарыстоўваць MDC для шыфраваньня" #~ msgid "never use a MDC for encryption" #~ msgstr "ніколі не выкарыстоўваць MDC для шыфраваньня" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|НАЗВА| задаць назву дапомнага сакрэтнага ключа" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|ВУЗЕЛ| выкарыстоўваць гэты паслужнік для пошуку ключоў" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|НАЗВА| усталяваць мноства знакаў тэрмінала" #~ msgid " (default)" #~ msgstr " (дапомна)" #~ msgid "Policy: " #~ msgstr "Палітыка:" #, fuzzy #~ msgid "quit|quit" #~ msgstr "quit [выйсьці]" gnupg-1.4.20/po/insert-header.sin0000644000175000017500000000124012516175025013523 00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gnupg-1.4.20/po/fr.gmo0000644000175000017500000045224612635457221011414 00000000000000 |(Pk-kk}lmmhnnnnnno1o2No7o2o#oDp.UpIp7p'q.q KqWqoqqqqqqr.r+@r&lr#r(rrrs2s(Nswsss$sst&tEt,`ttt!tttu/u BuNu kuwuuuuuuuv*2v"]v]vBv!w/4w=dw(w.w3w!.x(Pxyxx'xxxxy+y>y,Wy'yyy"yz z$zB@z=zz"z%{&){!P{%r{"{#{'{ |(|E|Z|w|||(|$|}}#,}P}$o}}}!}}~ 0~Q~&i~%~ ~,~4~$+I^'rԀ '-U"l-(02FHy ‚ ̃ ك @AT/0Ƅ\1TD-0.?In*+' 7D\mЇׇ3<4D-y'a.$ ?4>:s͊!,6(c8#ŋ&(&9`w76-%J3p90ލ<GL@>Վ+=@~"ӏ :@#Sw /ӑH-6$d'8&5.G5v*!ד.0(&Y,ǔ 8#:^w"~.ЕHi"(Ֆ$E#1i;1m!?Z8y$י8ٚÛ֛:BSϜ%&:Q.m*0 [|*C!n0'<&+A"m,/1",B"o2š ( + L*Wâܢ $>Y my5"7Z(wϤ F f1%ߥEEo* ܧ8l'>ͨ c/N0E,Ū"#-9+g)&Ǭ'έخ+8,d3 ů1ѯ(#B+f"+" %?9%yͱ..L({ }ŲCX/r0Ӵ!#(!8Zp%ж 'jFK@->l9O30/5'.B3q-Ӻۼ!$/,T(-޾  )6*S+~ 5#Q$u  6%4Z7t2r_>1=CI4#=C?D@&+g1NII^55;?PB<H-Y"H}<B)CB:.>2/=b<@FHeU$ )-J2x1I>'Kf@5*)7T,004 P2q:65.M|h*&01W#2>*=0:Mk9"&!=3_>c%6D\,52%_X     #0 A LXq%")&+D5p .D S^Bz5$6>FV^m| ()?Z"q , '9.a%2+&;La~%51: M;[<* 7A\t: ,BXn&- <AD(/ 0<1X,>H\ %/.(W&o3  07h$=%#-2` y'# 3Jb'& #B&b& / +,G/t"9K%M$s&$#D%j'q  1$Ot@{ $ 0!Hj|D+/ H6S0/"$&G(n%%$ !/.Fu20Da'y/+>M$`&$',,&Sb>z $ ,/I\J."L#o !+*E-p $' ."G+j)#-%26X5/"'8`;{0"% /12a!: !A!c(+8!04R026!)X9&GHVB : #P t       2 G g         8 S d '~    .   (# 2L !   ,    * 8  > $I n  )     % %/U,k23&1"X{1!0E%d%     #4X&[ )$<7Mh6,;"#^M-5Mi"-+&.*U56! &,$Sx2IF3z &@0Z1##++1,]!2$*.2Y.*3; Ye |%& 0O$b#&3 %@*f%( -49b6:,"0O/7*.( 7W ; 0 1 ;.!j!%!!)!3!6":L" """9""5#-G#"u## ##-#$$$6$ P$5q$$$$+$4%%H%!n%C%*%(%0(&Y&y&.&-&*& '+'G'2(/B(%r(F((1(#$)H)!e))())-)/*,@* m*"w*)*** *+29+1l+++#+#+! ,".,-Q,,:,I,A#-"e-- -----. .$.=. X.y..!..../4/L/#\/ ///// //0,0 F0P0f0y060050#1 >1_1n111*1!1 12G2X2q2 2222-2,3C3]3|33 33334"484;4D?4F4E4D5EV5A575667M6=6>67$77D7<|777F788J89h8 88 8$8 9#9A9#Z9~9*9*998;;<== >">%>& ?%4?&Z?&?&?K?K@Gg@:@P@5;AMqAFA=B%DBjB|BBB&B&B'C?C&_CC1C-C+C1$DVDuD#DD1DE!"EDE(dEEE'EE' F&3F ZF){F&F,F'F!G:GNGnG}G'G$GGGH'#H7KH<H1HzHrmII?I_:J2J<J4 K,?K;lK'KK=K$L:LWL uLLLEL> MKMgM'MM"M!MQMQIN#N5N:NB0O@sO>O3O7'P=_P8P(P#P+#QOQ3iQQ0Q3Q R8R5OR-R>R.R.!S=PS)S1S:S%T.CT)rT T0TFTU:VPV dVVV2VVVW+W@WRW&rWW(W$WW:X2OX2X.XZX2?YrZZ"Z-Z4Z7[LO[1[>[x \A\$\G\15]4g]1]L]+^+G^)s^ ^ ^-^^+_&E_%l__%_!_<_ `])`W``6a<ab4.bcbsbObEbJc$dc"c#c!cc9 d6FdD}d2d7d5-e5ceeee eMeBAf3f)f6fGg8agKgVg8=h:vh/h?h !i,iFi-Oi;}i5i$ijG1j yj4jjj&k>/knkkvlHl/l1 m@=m?~m4mQm;En<n>n-n9+oCeo.o<op 5pVpkp8p#pp q2qFDqq`&r)r)r*rhs?ossUptt)u!u+uLu1Fvxvvv)vv w!xxxx*y(:ycyj~yyzz7z9RzBz z"zz-{KH{{7B|7z||?}-}S}>O~g~&~:<XNEE*0pF4?C],/΁2 1;<x%̂, #7[/y ΃Rr-ń">Up!,߅j8jI@#.RO&rv)|(ωA8NJVW~"8Vڌ]1.1?)q7*ӎ874N6&s֒ #*A>lI> 4@B$77J4cN8; %\_;: Xy-0Ǘ!I3d"/j!EI3L)+֜ݜ";V?q7ȝ5'>fbKP:ןBR1=1oC/-BCD#ˢ 6!T2v96"!=_1{§'ۨ+/%>8d91ש& #0-T&+1ժ3);*e O6 DKaPJ+CvNI HS47ѯM ,WKdаo5:4}y| c<m+hojrnݵ>L5i+%ǷMq;CoIa=LH6EEźP \6f,Lʽ\]tyҾvLvÿs:`]]mZI&EpK6L9/LHFL>,/7/0g@5HSX2RMNcM,1-._IhA;+23,`Jz ^ j w      !%27X3;@5A=w[%7Uu7 0VJ<B.!+P |  $,J(MOv*&/&H?o5/F-\@AA 6OB:%+*V%v5">$4*Y<& M`i1*'G'X3&)*!0JR$#& )6B&y<`gp4 0#7T# "b-C"q((7#,[v 25?;uD?DG+%*M/!}&O!68>o040JEN20&N-u$(<4.'c.3::)"d H+C49x/\k?471(J$s.M4V (7`=~3c,["0%&B"_!^2<6 sQ@(9D~*>;UD7 + .;N2/-&@B"+"@ K1aC;1B6]62.3-0a%D4"Eh&>abP///.C0r.0,,0,]*99)/91i-:-A2>t1,=0PBB>*F/q8'cHf03F J[  - # B (W . + 7 A EU # + E :1 l ) C A :; Nv  & 4^8_)(+)700h#6:6J.2-.(@-i"$$##;_|0#< G ^4h967)F4p& 3C'k?o *%<AZ'>*W.\+>4NF323fBIID"   ,=4r/uK&5RT#(E.:CiP"U!2wh' 9; "u * + ) !+6!<b!$!9!5!?4"Gt"H"##1)#8[#I###C$U$X$`$tp$H$(.%W%"n%)%!%%/%-&&&T&={&>&)&)"'6L'B'D'6 (GB((+((*(2):Q))3)()7* @*#K*o***+**-*'+'A++i++3+%+8,:@,{,,F,8,84-5m-%--%-9 .GD.G.B.C/'[/8/9/:/10BQ08090I1JQ1G1F1L+2.x2422;2A,3Mn3N3 4464RQ404G4E5&c5-5$55A5 =6"J6)m6)6L6*7#97?]7I7$71 8N>83868;8%49 Z9;e9D979:;:R:;Q;5;);W;E<PU<P<%<%=!C=Be==A=P>FW>>A>K>-O>$PEcP)P%PIPICQEQRQ+&R5RRUR&RSS)6S%`S-SS/S#TA'T<iTpWH63gOzPlS*|T=VQ$qDLs n@GJ !ehte1M`Rlj( WV- ' DtSw@;OEy;p\prz,Avi |lhA+:2mG@;Nz9"LTb>LuE%@ Z`jF]7}: r$/55e=4p)G#"aZ"*)8S\+'m4Lk3 kBUofta/0 -D/fq[eAF|0^3lB?iUMr],UU [^-V 7{~qy\Q%;:'\[^#+` Og.wf_M+CcJ:)~I!< s DRE8mYiI:#dCz)9v8}H]x{pK3s.b` $jH42,XCrgfN$<Lt80Ta5q*Q#%2,PbH 1yG1JI6.C2.<hZ ndPKyz eQx;Tx ^K{oMI_S}{B_dW<b 9-GA*~M~uEY|jNA{RXms6ou]W  uwqEu'O6YV7 JXC97!Z c(1 x lB?<]!w%g&B.\F4DcY&yO?@gPdF}v9iK[&PmikXn!av )&Z1>},(=W=v"#oN^[>w"c NHjcx nV$/7&kr?5YKsfhoX0nR~k?>hS2a _tFd3'+= (bI5T4/|0(RJ_`>% U*-68Q  Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: %s key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s rejected by import filterremove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key %s: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg 1.4.19 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2014-09-06 15:56-0400 Last-Translator: David Prévot Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8-bit Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Lokalize 1.5 Entrez l'identité, en terminant par une ligne vide : Il n'y a pas suffisamment d'octets aléatoires disponibles. Veuillez faire autre chose pour que le système d'exploitation puisse rassembler plus d'entropie (%d octets supplémentaires sont nécessaires). Choisissez une image pour votre photo d'identité. L'image doit être un fichier JPEG. Rappelez-vous que cette image est stockée dans la clef publique. Si l'image est très grosse, la clef le sera aussi. Une taille de l'ordre de 240x288 est conseillée. Algorithmes pris en charge : Une identité est nécessaire à la clef ; le programme la construit à partir du nom réel, d'un commentaire et d'une adresse électronique de cette façon : « Heinrich Heine (le poète)  » alias « %s » avec la clef %s %s importées : %lu non modifiées : %lu nouvelles sous-clefs : %lu nouvelles identités : %lu non importées : %lu sans identité : %lu « %s » : préférence pour l'algorithme de chiffrement %s « %s » : préférence pour l'algorithme de compression %s « %s » : préférence pour l'algorithme de hachage %s (sous-clef de la clef principale d'identifiant %s) Aucune certitude que la signature appartienne à son propriétaire. La signature est sans doute CONTREFAITE. Rien n'indique que la signature appartient à son propriétaire. Cela pourrait signifier que la signature est contrefaite. algorithmes indisponibles pour ces identités : nouvelles signatures : %lu « %s » Nº de série de carte = Empreinte de la clef = Empreinte de sous-clef : clefs secrètes lues : %lu nouvelles clefs ignorées : %lu identités nettoyées : %lu Empreinte de la sous-clef : signatures nettoyées : %lu (%c) Terminé (%c) Inverser la capacité d'authentification (%c) Inverser la capacité de chiffrement (%c) Inverser la capacité de signature (%d) DSA (indiquez vous-même les capacités) (%d) DSA (signature seule) (%d) DSA et Elgamal (%d) Elgamal (chiffrement seul) (%d) RSA (chiffrement seul) (%d) RSA (indiquez vous-même les capacités) (%d) RSA (signature seule) (%d) RSA et RSA (par défaut) (0) Je ne répondrai pas.%s (1) Je n'ai pas vérifié du tout.%s (1) Clef de signature (2) Clef de chiffrement (2) J'ai partiellement vérifié.%s (3) Clef d'authentification (3) J'ai complètement vérifié.%s nouvelles révocations de clef : %lu %d = je ne fais PAS confiance %d = je ne sais pas ou n'ai pas d'avis %d = je fais entièrement confiance %d = je fais très légèrement confiance %d = j'attribue une confiance ultime Impossible de signer. alias « %s » m = retour au menu principal q = quitter i = ignorer cette clef clefs secrètes importées : %lu (identifiant de clef principale %s) (non exportable) (non révocable)Empreinte clef princip. : clefs secrètes non modifiées : %lu « %s » n'est pas un identifiant de clef : ignoré « %s » a déjà été signée localement par la clef %s « %s » a déjà été signée par la clef %s # Liste des valeurs de confiance définies, créée le %s # (utilisez « gpg --import-ownertrust » pour les restaurer) il reste %d tentatives de code personnel d'administration avant que la carte ne soit irrémédiablement bloquée %d mauvaises signatures %d clefs traitées (%d comptes de validité réinitialisés) %d marginale(s) nécessaire(s), %d complète(s) nécessaire(s), modèle de confiance %s %d signatures non vérifiées à cause d'erreurs %d signatures non vérifiées à cause de clefs manquantes %d identités sans autosignature valable détecté %lu clefs mises en cache (%lu signatures) %lu clefs mises en cache pour l'instant (%lu signatures) %lu clefs traitées jusqu'à présent %s… %s ne prend pas en charge pas le gestionnaire de version %d %s ne fonctionne pas encore avec %s données chiffrées avec %s clef de session chiffrée %s le chiffrement %s sera utilisé %s est le nouveau %s est le fichier d'origine les clefs %s peuvent faire une taille comprise entre %u et %u bits. les tailles de clefs %s doivent être dans l'intervalle %u-%u %s n'a aucun sens avec %s. %s n'est pas permis avec %s. signature %s, algorithme de hachage %s %s. %s/%s chiffré pour : « %s » %s/%s signature de : « %s » %s : faible assurance que la clef appartienne vraiment à l'utilisateur nommé. %s : aucune assurance que la clef appartienne vraiment à l'utilisateur nommé. %s : le répertoire n'existe pas. %s : erreur de lecture d'enregistrement libre : %s %s : erreur de lecture d'enregistrement de version : %s %s : erreur de mise à jour de l'enregistrement de version : %s %s : erreur d'écriture de l'enregistrement de répertoire: %s %s : erreur d'écriture de l'enregistrement de version : %s %s : impossible d'ajouter un enregistrement : %s %s : échec de création de la table de hachage : %s %s : impossible de créer un enregistrement de version : %s%s : échec de mise à zéro d'un enregistrement : %s %s : version %d du fichier incorrecte %s : base de confiance incorrecte %s : base de confiance incorrecte créée %s : porte-clefs créé %s : ce n'est pas un fichier de base de confiance %s : ignoré : %s %s : ignoré : clef publique déjà présente %s : ignoré : la clef publique est désactivée %s : base de confiance créée %s : suffixe inconnu %s : enregistrement de version avec le numéro %lu %s : %d : option « %s » déconseillée %s : %d : liste de recherche automatique de clef incorrecte %s : %d : options d'exportation incorrectes %s : %d : options d'importation incorrectes %s : %d : les options du serveur de clefs sont incorrectes %s : %d : options de liste incorrectes %s : %d : options de vérification incorrectes clef %2$s de %1$u bits, identifiant %3$s, créée le %4$s(Aucune description donnée) (Vous devriez sûrement sélectionner %d ici) (c'est une clef de révocation sensible) (sensible)(à moins d'indiquer la clef par son empreinte) (vous avez peut-être utilisé un programme non adapté à cette fin) * La commande « sign » peut être précédée du caractère « l » pour les signatures locales (lsign), « t » pour les signatures de confiance (tsign), « nr » pour les signatures non révocables (nrsign), ou toute combinaison possible (ltsign, tnrsign, etc.). --clearsign [fichier]--decrypt [fichier]--edit-key identité [commandes]--encrypt [fichier]--lsign-key identité--output n'est pas compatible avec cette commande --sign --encrypt [fichier]--sign --symmetric [fichier]--sign [fichier]--sign-key identité--store [fichier]--symmetric --encrypt [fichier]--symmetric --sign --encrypt [fichier]--symmetric [fichier]-k[v][v][v][c] [identité] [porte-clefs]… c'est un bogue (%s : %d : %s) 1 mauvaise signature 1 signature non vérifiée à cause d'une clef manquante 1 signature non vérifiée à cause d'une erreur 1 identité sans autosignature valable détecté 11 le traducteur a bien lu ce qu'il fallait :)@ (Consultez la page de manuel pour obtenir une liste complète des commandes et options) @ Exemples : -se -r Alice [fichier] signer et chiffrer pour l'utilisateur Alice --clearsign [fichier] faire une signature en texte clair --detach-sign [fichier] faire une signature détachée --list-keys [noms] montrer les clefs --fingerprint [noms] montrer les empreintes @ Options : @Commandes : sortie forcée avec armure ASCII. Les commandes d'administration sont permises Les commandes d'administration ne sont pas permises La commande n'est utilisable qu'en mode administration Répondez « oui » (ou simplement « o ») pour générer la sous-clef.Répondez « oui » pour supprimer la sous-clefRépondez « oui » s'il faut vraiment réécrire le fichierRépondez « oui » si vous voulez vraiment supprimer cette identité. Tous les certificats seront alors aussi perdus.Répondez « oui » si vous voulez signer TOUTES les identitésRépondez « oui » ou « non »Voulez-vous vraiment signer cette clef avec votre clef « %s » (%s) Voulez-vous vraiment toujours l'ajouter ? (o/N) Voulez-vous vraiment toujours la révoquer ? (o/N) Voulez-vous vraiment toujours la signer ? (o/N) Voulez-vous vraiment rendre cette clef comme révocateur désigné ? (o/N) Voulez-vous vraiment le supprimer ? (o/N) Voulez-vous vraiment le remplacer ? (o/N) Voulez-vous vraiment l'utiliser ? (o/N) AuthentifierMAUVAISE signature de « %s »empreinte de l'autorité de certification : erreur de CRC ; %06lX - %06lX Impossible de vérifier la signature : %s Impossible d'éditer cette clef : %s Impossible d'ouvrir « %s » : %s AnnulerPrénom du détenteur de la carte : Nom du détenteur de la carte : Certificats conduisant vers une clef de confiance ultime : CertifierFaut-il modifier le (N)om, le (C)ommentaire, l'(A)dresse électronique ou (O)ui/(Q)uitter ? Faut-il modifier le (N)om, le (C)ommentaire, l'(A)dresse électronique ou (Q)uitter ? Modifier les préférences de toutes les identités (ou seulement celles sélectionnées) vers la liste actuelle de préférences. La date de chaque autosignature affectée sera avancée d'une seconde. Modification de la date d'expiration d'une sous-clef. Modification de la date d'expiration de la clef principale. Chiffrement : La commande attend un nom de fichier comme argument Commentaire : Compression : Faut-il créer un certificat de révocation désigné pour cette clef ? (o/N) Faut-il créer un certificat de révocation pour cette clef ? (o/N) Faut-il créer un certificat de révocation pour cette signature ? (o/N) Serveur de clefs critique favori : Notation de signature critique : Politique de signature critique : Actions actuellement permises : Destinataires actuels : la clef DSA %s nécessite un hachage d'au moins %u bits la clef DSA %s utilise un hachage non sûr (%u bits) DSA nécessite que la taille du hachage soit un multiple de 8 bits Faut-il supprimer cette bonne signature ? (o/N/q)Faut-il supprimer cette signature incorrecte ? (o/N/q)Faut-il supprimer cette clef du porte-clefs ? (o/N) Faut-il supprimer cette signature inconnue ? (o/N/q)%d signature supprimée. %d signatures supprimées Signature détachée. Hachage : Affichage de la photo d'identité %s de taille %ld pour la clef %s (uid %d) Voulez-vous vraiment supprimer les clefs sélectionnées ? (o/N) Voulez-vous vraiment supprimer cette clef ? (o/N) Voulez-vous vraiment faire cela ? (o/N) Voulez-vous vraiment révoquer toute la clef ? (o/N) Voulez-vous vraiment révoquer les sous-clefs sélectionnées ? (o/N) Voulez-vous vraiment révoquer cette sous-clef ? (o/N) Voulez-vous vraiment attribuer une confiance ultime à cette clef ? (o/N) Voulez-vous créer une nouvelle signature pour remplacer celle qui a expiré ? (o/N) Voulez-vous la rendre complètement exportable ? (o/N) Voulez-vous la modifier en autosignature OpenPGP ? (o/N) Voulez-vous vraiment la signer encore ? (o/N) Voulez-vous que votre signature expire en même temps ? (O/n) Erreur : Adresse électronique : ChiffrerEntrez le code personnel d'administration : Entrez le nom du fichier JPEG pour la photo d'identité : Entrez le nouveau code personnel d'administration : Entrez le nouveau code personnel : Entrez le code personnel : Entrez une description facultative, en terminant par une ligne vide : Entrez le nouveau nom de fichierEntrez le ou les nombres, (S)uivant, ou (Q)uitter > Entrez la phrase secrète Entrez la phrase secrète : Entrez le nom du détenteur de la clefEntrez la nouvelle phrase secrète pour cette clef secrète. Entrez la notation : Entrez la valeur demandée comme indiqué dans l'invite de commande. Une date ISO (AAAA-MM-JJ) peut être indiquée mais le message d'erreur sera inadéquat — le système essaye alors d'interpréter la valeur donnée comme un intervalle.Entrez la taille de la clefEntrez l'identité de la personne à qui vous voulez envoyer le message.Entrez l'identité du révocateur désigné : Entrez l'URL de votre serveur de clefs favori : Erreur de lecture de la clef de sauvegarde sur « %s » : %s Erreur : nom combiné trop long (limité à %d caractères). Erreur : les espaces doubles ne sont pas permises. Erreur : données d'identification trop longues (limitées à %d caractères). Erreur : seul l'ASCII standard est permis pour l'instant. Erreur : DO privé trop long (limité à %d caractères). Erreur : le caractère « < » ne peut pas être utilisé. Erreur : la base de confiance est corrompue Erreur : URL trop longue (limitée à %d caractères). Erreur : caractères incorrects dans la chaîne de préférences. Erreur : formatage incorrect de l'empreinte. Erreur : taille incorrecte de la chaîne de préférences. Erreur : réponse incorrecte. Signature expirée de « %s »Fonctionnalités : Le fichier « %s » existe. Donnez le nom du fichier auquel la signature se rapporteVous pouvez taper votre message… Bonne signature de « %s »Hachage : Conseil : sélectionner les identités à signer Appuyez sur entrée un fois prêt ou entrez « c » pour annuler : Avec quel soin avez-vous vérifié que la clef à signer appartient bien à la personne sus-nommée ? Si vous ne savez quoi répondre, entrez « 0 ». Quelle confiance portez-vous au fait que cette clef appartienne bien à l'utilisateur nommé ? J'ai partiellement vérifié cette clef. J'ai complètement vérifié cette clef. Je n'ai pas du tout vérifié cette clef. L'algorithme IDEA n'est pas disponible, essai avec %s qui fonctionnera peut-être avec un peu de chance Si cela ne fonctionne pas, veuillez consulter le mode d'emploi Si vous le désirez, vous pouvez entrer un texte qui explique pourquoi vous avez émis ce certificat de révocation. Essayez de garder ce texte concis. Une ligne vide indique la fin du texte. Si vous voulez utiliser cette clef sans confiance quand même, répondez « oui ».En général, il est déconseillé d'utiliser la même clef pour signer et chiffrer. Cet algorithme ne devrait servir que dans certains cas. Consultez d'abord votre expert en sécurité.Caractère incorrect dans le commentaire Caractère incorrect dans le nom Commande incorrecte (essayez « help ») La clef incorrecte %s a été rendue valable par --allow-non-selfsigned-uid Phrase secrète incorrecte ; veuillez réessayerChoix incorrect. Est-ce correct ? (o/N) Est-ce d'accord ? (o/N) Cette photo est-elle correcte (o/N/q) ? La clef n'appartient PAS forcément à la personne nommée dans l'identité. Si vous savez *vraiment* ce que vous faites, vous pouvez répondre oui à la prochaine question. Il est de votre responsabilité d'affecter une valeur ici ; cette valeur ne sera jamais communiquée à autrui. Elle est nécessaire pour créer le réseau de confiance (web-of-trust) ; cela n'a rien à voir avec le réseau des certificats (créé implicitement).La clef %s est déjà révoqué. Clef disponible sur : La clef n'expire pas du tout La clef expire le %s La génération de clef a été annulée. Échec de génération de la clef : %s La clef a été compromiseLa clef ne possède que des items partiels ou stockés sur carte — pas de phrase secrète à modifier. La clef n'est plus utiliséeLa clef est protégée. La clef est révoquée.La clef a été remplacéePendant combien de temps la clef est-elle valable ? (0) La clef n'a pas été modifiée donc la mise à jour est inutile. Porte-clefsServeur de clefs sans modificationPréférences de langue : Données d'identification (nom du compte) : Faut-il faire une sauvegarde hors carte de la clef de chiffrement ? (O/n) N pour modifier le nom. C pour modifier le commentaire. E pour modifier l'adresse électronique. O pour continuer à générer la clef. Q pour arrêter de générer de clef.Remarque : %s n'est pas disponible dans cette version Remarque : %s n'est pas pour une utilisation normale. Remarque : Il n'y a aucune garantie que la carte gère la taille demandée. En cas d'échec de génération de la clef, veuillez vérifier les tailles permises dans la documentation de la carte. Remarque : cette fonctionnalité n'est pas disponible dans %s Remarque : cette clef n'est pas protégée. Remarque : le numéro de série d'une clef ne correspond pas à celui de la carte Remarque : sauvegarde de la clef de la carte dans « %s » Remarque : la création de sous-clefs pour des clefs v3 n'est pas compatible avec OpenPGP Remarque : la clef a été révoquéeRemarque : les clefs sont déjà stockées sur la carte. Remarque : pas de fichier d'options par défaut « %s » Remarque : l'ancien fichier d'options par défaut « %s » a été ignoré Remarque : la clef principale est en ligne et stockée sur la carte Remarque : la clef secondaire est en ligne et stockée sur la carte Remarque : la clef secrète %s a expiré le %s Remarque : l'expéditeur a demandé « à votre seule attention » Remarque : la clef de signature %s a expiré le %s Remarque : le mode S2K simple (0) est fortement déconseillé Remarque : la base de confiance n'est pas accessible en écriture Le nom ne doit pas commencer par un chiffre Le nom doit contenir au moins cinq caractères La clef secrète est nécessaire pour faire cela. NnCcAaOoQqPas de signature correspondante dans le porte-clefs secret Pas d'aide disponiblePas d'aide disponible pour « %s »Aucune raison indiquéePas de sous-clef d'indice %d Cette identité n'existe pas. Pas de valeur de confiance définie pour : Pas d'identité avec le hachage %s Pas d'identité d'indice %d Ce n'est pas une adresse électronique valable Non signée par vous. Notations : Remarquez que cette clef ne peut pas être utilisée pour chiffrer. Vous pouvez utiliser la commande « --edit-key » pour générer une sous-clef à cette fin. Remarque : l'adresse du signataire « %s » ne correspond pas à l'entrée DNS Remarque : cette clef a été désactivée. Remarque : cette clef a expiré. Remarque : l'adresse vérifiée du signataire est « %s » Rien n'a été supprimé. Rien à signer avec la clef %s carte OpenPGP nº %s détectée la carte OpenPGP n'est pas disponible : %s Réécrire par-dessus ? (o/N) La confiance du propriétaire pourrait ne pas être définie à partir de la base de confiance d'un tiers le rappel du code personnel a renvoyé une erreur : %s le code personnel pour CHV%d est trop court ; la taille minimale est %d les codes personnels ne correspondent pas ; veuillez réessayerVeuillez d'abord corriger l'erreur Décidez maintenant de la confiance que vous portez en cet utilisateur pour vérifier les clefs des autres utilisateurs (en regardant les passeports, en vérifiant les empreintes depuis diverses sources, etc.) Ne mettez pas d'adresse électronique dans le nom réel ou dans le commentaire Veuillez entrer un domaine pour restreindre cette signature, ou appuyer sur la touche entrée pour aucun domaine. Veuillez entrer le nouveau nom de fichier. Si vous appuyez simplement sur Entrée, le fichier par défaut (indiqué entre crochets) sera utilisé.Veuillez entrer un commentaire facultatifEntrez le nom du fichier de données : Veuillez entrer la profondeur de cette signature de confiance. Une profondeur supérieure à 1 permet à la clef que vous signez de faire des signatures de confiance de votre part. Veuillez entrer la phrase de passe ; c'est une phrase secrète Veuillez corriger cet éventuel problème de sécurité Veuillez insérer la carte et appuyer sur entrée ou entrer « c » pour annuler : Veuillez noter que les configurations d'usine des codes personnels sont code personnel = « %s » code personnel d'admin. = « %s ». Vous devriez les modifier avec la commande --change-pin Veuillez remarquer que la validité affichée pour la clef n'est pas forcément correcte avant d'avoir relancé le programme. Veuillez supprimer les sélections des clefs secrètes. Veuillez retirer la carte présente et insérer celle de numéro de série : %.*s Veuillez répéter la dernière phrase secrète pour vous assurer d'avoir tapé correctement.Veuillez signaler toutes anomalies à (en anglais) et tout problème de traduction à . Veuillez sélectionner au plus une sous-clef. Veuillez sélectionner exactement une identité. choisissez la cause de la révocation : Veuillez sélectionner le type de clef à générer : Sélectionnez le type de clef désiré : Veuillez sélectionner l'endroit où stocker la clef : Veuillez indiquer le temps pendant lequel cette clef devrait être valable. 0 = la clef n'expire pas = la clef expire dans n jours w = la clef expire dans n semaines m = la clef expire dans n mois y = la clef expire dans n ans Veuillez indiquer le temps pendant lequel cette signature devrait être valable. 0 = la signature n'expire pas = la signature expire dans n jours w = la signature expire dans n semaines m = la signature expire dans n mois y = la signature expire dans n ans Veuillez d'abord utiliser la commande « toggle ». Veuillez patienter pendant la récupération de l'entropie. Vous devriez faire autre chose sur la machine pour éviter de vous ennuyer, car cela améliorera la qualité de l'entropie. Actions possibles pour une clef %s : Serveur de clefs favori : Empreinte de clef principale :Données DO privées : Faut-il continuer ? (o/N) Clef publique : La clef publique est désactivée. Faut-il quitter sans enregistrer ? (o/N) le module RSA est manquant ou sa taille n'est pas de %d bits le nombre premier RSA %s est manquant ou sa taille n'est pas de %d bits l'exposant public RSA est manquant ou plus grand que %d bits Nom réel : Faut-il vraiment créer les certificats de révocation ? (o/N) Faut-il vraiment la créer ? (o/N) Faut-il vraiment supprimer cette autosignature ? (o/N)Faut-il vraiment déplacer la clef principale ? (o/N) Faut-il vraiment supprimer toutes les identités sélectionnées ? (o/N) Faut-il vraiment supprimer cette identité ? (o/N) Voulez-vous vraiment révoquer toutes les identités sélectionnées ? (o/N) Voulez-vous vraiment révoquer cette identité ? (o/N) Voulez-vous vraiment signer toutes les identités ? (o/N) Voulez-vous vraiment signer ? (o/N) Faut-il vraiment mettre à jour les préférences pour les identités sélectionnées ? (o/N) Faut-il vraiment mettre à jour les préférences ? (o/N) Cause de révocation : %s Répétez la phrase secrète Répétez la phrase secrète : Répétez ce code personnel : Faut-il remplacer la clef existante ? (o/N) Faut-il remplacer les clefs existantes ? (o/N) La taille demandée est %u bits Le code de réinitialisation est trop court ; la taille minimale est %d le code de réinitialisation n'est plus disponible Certificat de révocation créé. Certificat de révocation créé. Veuillez le déplacer sur un support que vous pouvez cacher ; toute personne accédant à ce certificat peut l'utiliser pour rendre votre clef inutilisable. Imprimer ce certificat et le stocker ailleurs est une bonne idée, au cas où le support devienne illisible. Attention quand même : le système d'impression utilisé pourrait stocker ces données et les rendre accessibles à d'autres. Faut-il enregistrer les modifications ? (o/N) La clef secrète est disponible. Les parties secrètes de la clef principale ne sont pas disponibles. Les parties secrètes de la clef principale sont stockées sur la carte. Sélectionnez l'algorithme à utiliser. DSA (connu également sous le nom de DSS) est un algorithme de signature numérique qui ne sert qu'à signer. Elgamal est un algorithme qui ne sert qu'à chiffrer. RSA permet de signer et chiffrer. La première clef (principale) doit toujours permettre de signer.Définir la liste de préférences en : Sexe ((M)asculin, (F)éminin ou espace) : SignerLa signer vraiment ? (o/N) La signature n'expire pas du tout La signature a expiré le %s La signature expire le %s La signature expire le %s Pendant combien de temps la signature est-elle valable ? (%s) Signature faite le %s Signature faite le %s avec la clef %s d'identifiant %s Notation de signature : Politique de signature : SsCcAaQqLa sous-clef %s est déjà révoquée. Syntaxe : gpg [options] [fichiers] Signer, vérifier, chiffrer ou déchiffrer L'opération par défaut dépend des données entrées Syntaxe : gpgv [options] [fichiers] Vérifier des signatures avec des clefs de confiance connues La carte sera maintenant reconfigurée pour générer une clef de %u bits Le niveau de confiance minimal pour cette clef est : %s Le générateur de nombres aléatoires n'est qu'un artifice visant à exécuter GnuPG — ce n'est en aucune manière un générateur (RNG) fort. N'UTILISEZ PAS LES DONNÉES GÉNÉRÉES PAR CE PROGRAMME. L'autosignature de « %s » est une signature de type PGP 2.x. Cette signature n'est pas valable. Vous devriez la supprimer de votre porte-clefs.La signature sera marquée comme non exportable. La signature sera marquée comme non révocable. Il n'y a pas de préférences dans une identité de type PGP 2.x. Ce JPEG est vraiment très grand (%d octets). Cette commande n'est pas permise en mode %s. Cette commande n'est disponible que pour les cartes en version 2 C'est une clef secrète — faut-il vraiment la supprimer ? (o/N) Cette signature lie l'identité à la clef. Supprimer une telle signature est généralement déconseillé. En fait GnuPG pourrait ne plus être capable d'utiliser cette clef. Donc ne faites cela que si cette autosignature est incorrecte pour une bonne raison et qu'une autre est disponible.C'est une signature valable dans la clef ; vous n'avez normalement pas intérêt à supprimer cette signature car elle pourrait être importante pour établir une connexion de confiance vers la clef ou une autre clef certifiée par cette clef.Cette clef nous appartient Cette clef a été désactivéeCette clef a expiré.Cette clef va expirer le %s. Cette clef n'est pas protégée. Cette clef peut être révoquée par la clef %s %sCette clef appartient sans doute à l'utilisateur nommé Cette clef a été révoquée le %s par la clef %s %s Cette signature ne peut pas être vérifiée parce que vous n'avez pas la clef correspondante. Vous ne devriez pas la supprimer avant de connaître la clef qui a été utilisée, car cette clef de signature pourrait établir une connexion de confiance vers une autre clef déjà certifiée.Cette signature a expiré le %s. Ce sera une autosignature. Cela rendrait la clef inutilisable par PGP 2.x. À révoquer par : Pour mettre en place le réseau de confiance (web-of-trust), GnuPG doit savoir en quelles clefs votre confiance est ultime — ce sont généralement les clefs dont vous possédez la clef secrète. Répondez « oui » pour indiquer que votre confiance en cette clef est ultime Quantité totale traitée : %lu URL pour récupérer la clef publique : %sNon compresséType de signature « %s » inconnu Utilisation : gpg [options] [fichiers] (-h pour l'aide)Utilisation : gpgv [options] [fichiers] (-h pour l'aide)Faut-il quand même utiliser cette clef ? (o/N) Identité « %s » compactée : %s L'identité « %s » est expiré.L'identité « %s » n'est pas autosignée.L'identité « %s » est révoquée.L'identité « %s » peut être signé. Identité « %s » : %d signature supprimée Identité « %s » : %d signatures supprimées Identité « %s » : déjà nettoyée Identité « %s » : déjà minimisée L'identité n'est plus valableAttention : Attention : « %s » est une commande déconseillée — ne l'utilisez pas Attention : « %s » est une option déconseillée Attention : %s remplace %s Attention : deux fichiers existent avec des informations confidentielles. Attention : Les clefs de signature et chiffrement Elgamal sont déconseillées Attention : c'est une clef de type PGP 2.x. Ajouter un révocateur désigné peut forcer certaines versions de PGP à rejeter cette clef. Attention : c'est une clef de type PGP 2. Ajouter une photo d'identité peut forcer certaines versions de PGP à rejeter cette clef. Attention : cette clef a été révoquée par son révocateur désigné. Attention : cette clef à été révoquée par son propriétaire. Attention : cette clef n'est pas certifiée avec une signature de confiance. Attention : cette clef n'a pas suffisamment de signatures de confiance. Attention : cette sous-clef à été révoquée par son propriétaire. Attention : utilisation d'une clef sans confiance. Attention : nous n'avons PAS confiance en cette clef. Attention : clef faible détectée — modifiez encore la phrase secrète. Attention : « %s » est un fichier vide Attention : une signature d'identité date de %d secondes dans le futur Attention : l'établissement d'une clef comme révocateur désigné est irréversible. Attention : l'algorithme de chiffrement %s est introuvable dans les préférences du destinataire Attention : l'algorithme de hachage %s est déconseillé Attention : le message chiffré a été manipulé. Attention : forcer l'algorithme de compression %s (%d) est en désaccord avec les préférences du destinataire Attention : forcer l'algorithme de hachage %s (%d) est en désaccord avec les préférences du destinataire Attention : forcer le chiffrement symétrique %s (%d) est en désaccord avec les préférences du destinataire Attention : la taille du fichier random_seed est incorrecte. Il ne sera pas utilisé. Attention : la clef %s contient des préférences pour des Attention : la clef %s est peut-être révoquée : récupération de la clef de révocation %s Attention : la clef %s est peut-être révoquée : la clef de révocation %s est absente. Attention : le gestionnaire de serveurs de clefs provient d'une version différente de GnuPG (%s) Attention : l'option de serveur de clefs « %s » n'est pas utilisée sur cette plateforme Attention : le message a été chiffré avec une clef faible pendant le chiffrement symétrique. Attention : l'intégrité du message n'était pas protégée Attention : plusieurs textes en clair ont été vus Attention : plusieurs signatures ont été détectées. Seule la première sera vérifiée. Attention : aucune identité n'a été définie comme principale. Cette commande risque de rendre une autre identité principale par défaut. Attention : rien n'a été exporté Attention : les options de « %s » ne sont pas encore actives cette fois Attention : la clef de session chiffrée de manière symétrique risque de ne pas être sécurisée Attention : le programme pourrait créer un fichier « core ». Attention : les destinataires (-r) indiqués n'utilisent pas de clef publique pour le chiffrement Attention : la clef secrète %s n'a pas de somme de contrôle SK simple Attention : conflit de hachage de signature dans le message Attention : la sous-clef de signature %s a un certificat croisé incorrect Attention : la sous-clef de signature %s n'a pas de certificat croisé Attention : la signature ne sera pas marquée comme non exportable. Attention : La signature ne sera pas marquée comme non révocable. Attention : cette clef est peut-être révoquée (clef de révocation absente) Attention : impossible de faire une expansion à base de %% de la notation (chaîne trop grande). Utilisation de la version non expansée. Attention : impossible de faire une expansion à base de %% de l'URL de politique (chaîne trop grande). Utilisation de la version non expansée. Attention : impossible de faire une expansion à base de %% de l'URL du serveur de clef favori (chaîne trop grande). Utilisation de la version non expansée. Attention : impossible de récupérer l'URI %s : %s Attention : impossible d'analyser l'URI %s Attention : impossible de rafraîchir la clef %s avec %s : %s Attention : impossible de supprimer le répertoire temporaire « %s » : %s Attention : impossible de supprimer le fichier temporaire (%s) « %s » : %s Attention : le propriétaire du répertoire contenant le fichier de configuration « %s » n'est pas sûr Attention : le propriétaire du répertoire contenant le répertoire personnel « %s » n'est pas sûr Attention : les droits du répertoire contenant le fichier de configuration « %s » ne sont pas sûrs Attention : les droits du répertoire contenant le répertoire personnel « %s » ne sont pas sûrs Attention : le propriétaire du fichier de configuration « %s » n'est pas sûr Attention : le propriétaire du répertoire personnel « %s » n'est pas sûr Attention : les droits du fichier de configuration « %s » ne sont pas sûrs Attention : les droits du répertoire personnel « %s » ne sont pas sûrs Attention : utilisation de l'algorithme expérimental de chiffrement %s Attention : utilisation de l'algorithme expérimental de hachage %s Attention : utilisation de l'algorithme expérimental à clef publique %s Attention : utilisation de mémoire non sécurisée. Attention : utilisation d'un générateur de nombres aléatoires non sûr. De nombreux octets aléatoires doivent être générés. Vous devriez faire autre chose (taper au clavier, déplacer la souris, utiliser les disques) pendant la génération de nombres premiers ; cela donne au générateur de nombres aléatoires une meilleure chance d'obtenir suffisamment d'entropie. Quelle taille de clef désirez-vous pour la clef d'authentification ? (%u) Quelle taille de clef désirez-vous pour la clef de chiffrement ? (%u) Quelle taille de clef désirez-vous pour la clef de signature ? (%u) Quelle taille de clef désirez-vous pour la sous-clef ? (%u) Quelle taille de clef désirez-vous ? (%u) Quand vous signez une identité de clef, vous devriez d'abord vérifier si la clef appartient à la personne identifiée. Il est utile aux autres de savoir avec quel soin vous l'avez vérifié. « 0 » signifie que vous êtes sans opinion. « 1 » signifie que vous estimez que la clef appartient à la personne qui prétend la posséder mais vous n'avez pas pu vérifier du tout la clef. C'est utile pour signer la clef d'un pseudonyme. « 2 » signifie que vous avez partiellement vérifié la clef. Par exemple, cela pourrait être une vérification de l'empreinte et de l'identité avec la photo d'identité. « 3 » signifie que vous avez complètement vérifié la clef. Par exemple, cela pourrait être une vérification de l'empreinte avec son propriétaire en personne, une vérification d'identité avec un document difficile à contrefaire contenant une photo (comme un passeport) et une vérification de son adresse électronique (à l'aide d'un échange de courriers). Remarquez que les exemples ci-dessus pour les niveaux 2 et 3 ne sont *que* des exemples. C'est à vous de décider ce que signifie « partiellement » et « complètement » quand vous signez les clefs d'autres personnes. Si vous ne savez pas quoi répondre, utilisez « 0 ».Vous êtes sur le point de révoquer ces signatures : Vous utilisez le jeu de caractères « %s ». Vous ne pouvez pas modifier la date d'expiration d'une clef v3 Vous ne pouvez pas supprimer la dernière identité. Vous n'avez pas indiqué d'identité (vous pouvez utiliser « -r »). Vous ne voulez pas de phrase secrète — c'est sans doute une *mauvaise* idée. Vous ne voulez pas de phrase secrète — c'est sans doute une *mauvaise* idée. C'est possible quand même. Vous pouvez modifier la phrase secrète à tout moment en utilisant ce programme avec l'option « --edit-key ». Vous avez signé ces identités sur la clef %s : Vous ne pouvez pas ajouter de révocateur désigné à une clef de type PGP 2.x. Vous ne devriez pas ajouter de photo d'identité à une clef de type PGP 2. Impossible de faire une signature OpenPGP d'une clef PGP 2.x en mode --pgp2. Vous pourriez essayer de recréer la base de confiance avec les commandes : Vous devez sélectionner au moins une clef. Vous devez sélectionner au moins une identité. Vous devez sélectionner exactement une clef. Une phrase secrète est nécessaire pour protéger votre clef secrète. Une phrase secrète est nécessaire pour déverrouiller la clef secrète de l'utilisateur : « %s » Une phrase secrète est nécessaire pour déverrouiller la clef secrète de l'utilisateur : « %2$.*1$s » clef %4$s de %3$u bits, identifiant %5$s, créée le %6$s%7$s Vous avez sélectionné cette identité : « %s » Vous devriez indiquer une raison pour la certification. Suivant le contexte, vous pouvez choisir dans cette liste : « La clef a été compromise » Utilisez cette option si vous avez une raison de croire que des personnes ont pu accéder à votre clef secrète sans autorisation. « La clef a été remplacée » Utilisez cette option si vous avez remplacé cette clef par une nouvelle. « La clef n'est plus utilisée » Utilisez cette option si cette clef n'a plus d'utilité. « L'identité n'est plus valable » Utilisez cette option si l'identité ne doit plus être utilisé. Cela sert généralement à indiquer qu'une adresse électronique est obsolète. Votre signature actuelle de « %s » a expiré. Votre signature actuelle de « %s » est locale. Quelle est votre décision ? Quel est votre choix ? Quel est votre choix ? (Entrez « ? » pour plus de renseignements) : Le système ne peut pas afficher les dates au-delà de 2038. Cependant, la gestion des dates sera correcte jusqu'en 2106. [ totale ][indéfinie][ expirée ][ révoquée][ inconnue][identité introuvable][fichier][marginale][non positionné][révocation][autosignature][ ultime ][doute]« %s » est déjà compressé « %s » n'est pas un fichier JPEG « %s » n'est pas un fichier régulier — ignoré « %s » n'est pas un jeu de caractères valable « %s » n'est pas un identifiant valable de clef longue « %s » n'est pas une date d'expiration de signature valable sur le point d'exporter une sous-clef non protégée l'accès aux commandes d'administration n'est pas configuré l'action « %s » n'est pas prise en charge avec le type de serveurs de clefs « %s » ajouter une clef à une carte à puceajouter une photo d'identitéajouter une clef de révocationajouter une sous-clefajouter une identitéoption « %s » ambiguë destinataire anonyme ; essai avec clef secrète %s… en-tête d'armure : armure : %s les données sont supposées chiffrées avec %s la signature de la clef %s est supposée être fausse car un bit critique est inconnu les données signées sont supposées être dans « %s » récupérer les clefs automatiquement en vérifiant les signatures« %s » automatiquement récupéré par %s mauvais entier en précision multiple (MPI)mauvais URImauvais certificatmauvaise clefmauvaise phrase secrètemauvaise clef publiquemauvaise clef secrètemauvaise signaturedevenir beaucoup plus silencieuxbinaireéchec de build_packet : %s aAmise en cache du porte-clefs « %s » impossible d'accéder à %s — la carte OpenPGP n'est peut-être pas valable impossible d'accéder à « %s » : %s impossible de fermer « %s » : %s impossible de se connecter à « %s » : %s impossible de créer « %s » : %s impossible de créer le fichier de sauvegarde « %s » : %s impossible de créer le répertoire « %s » : %s impossible de créer un verrou pour « %s » impossible d'empêcher la génération de fichiers « core » : %s impossible de faire cela en mode automatique impossible de faire cela en mode automatique sans « --yes » impossible de générer un nombre premier avec pbits=%u qbits=%u impossible de générer un nombre premier avec moins de %d bits impossible de gérer l'algorithme à clef publique %d impossible de traiter les lignes plus longues que %d caractères impossible de traiter ces données ambiguës de signature impossible de verrouiller « %s » impossible de verrouiller « %s » : %s impossible d'ouvrir « %s » impossible d'ouvrir « %s » : %s impossible d'ouvrir les données signées « %s » impossible d'ouvrir le porte-clefsimpossible de demander la phrase secrète en mode automatique impossible de lire « %s » : %s impossible d'accéder à « %s » : %s impossible d'utiliser un paquet ESK symétrique en mode S2K impossible d'écrire « %s » : %s annuléannulé par l'utilisateur annuler|annulerimpossible d'utiliser une clef de type PGP 2.x comme révocateur désigné. impossible d'éviter une clef faible pour le chiffrement symétrique : %d essais ont eu lieu. la carte ne gère pas l'algorithme de hachage %s la carte est irrémédiablement bloquée. lecteur de cartes indisponible nº de carte : modifier l'URL pour récupérer la clefmodifier une empreinte d'autorité de certificationmodifier le code personnel d'une cartemodifier le nom du détenteur de la cartemodifier le sexe du détenteur de la cartemodifier les données d'une cartemodifier la date d'expiration de la clef ou des sous-clefs sélectionnéesmodifier les préférences de languemodifier l'identifiant de connexionmodifier la confiance du propriétairemodifier la phrase secrètevérifier les signatureséchec de vérification de la signature créée : %s vérification de la base de confiance erreur de somme de contrôlel'algorithme de chiffrement %d%s est inconnu ou désactivé deux-points manquantcompacter les identités inutilisables et supprimer toutes les signatures de la clefcompacter les identités inutilisables et supprimer les signatures inutilisables de la clef« completes-needed » doit être supérieur à 0 commandes en conflit impossible d'analyser l'URL du serveur de clefs créer une clef publique en important une clef secrètecréer une sortie ASCII avec armurecréé : %sla date de création est manquant les données ne sont pas enregistrées ; utilisez l'option « --output » pour les enregistrer échec de déconstruction d'une armure : %s déchiffrer les données (défaut)échec du déchiffrement : %s le déchiffrement a réussi supprimer les sous-clefs sélectionnéessupprimer les identités sélectionnéessupprimer les signatures des identités sélectionnéeséchec de suppression du bloc de clef : %s profondeur : %d valables : %3d signées : %3d confiance : %d i., %d n.d., %d j., %d m., %d t., %d u. répertoire « %s » créé désactiver la clefdésactivéemontrer les photos d'identité en affichant les clefsmontrer les photos d'identité en vérifiant les signaturesne pas supprimer les fichiers temporaires après les avoir utilisésne rien modifierne pas mettre à jour la base de confiance après l'importationaugmenter la confiance des signatures avec des données PKA valablesactiver la cleféchec de construction d'une armure : %s chiffrer les donnéeschiffré avec %lu phrases secrètes chiffré avec une clef %s, identifiant %s chiffré avec une clef %2$s de %1$u bits, identifiant %3$s, créée le %4$s chiffré avec 1 phrase secrète chiffré avec l'algorithme inconnu %d chiffrer un message en mode --pgp2 nécessite l'algorithme de chiffrement IDEA chiffrement symétrique seulementerreur d'allocation de suffisamment de mémoire : %s erreur de modification de taille de clef %d en %u bits : %s erreur pendant la création de « %s » : %s erreur de création du porte-clefs « %s » : %s erreur de création de la phrase secrète : %s impossible de trouver l'enregistrement de confiance dans « %s » : %s erreur de lecture des renseignements actuellement contenus dans la clef : %s erreur de lecture du nouveau code personnel : %s erreur dans « %s » : %s erreur dans la ligne de pied erreur de lecture de « %s » : %s erreur de lecture des données d'application erreur de lecture de l'empreinte DO erreur de lecture du bloc de clef : %s erreur de lecture du bloc de clef secrète « %s » : %s erreur de récupération de l'état CHV de la carte erreur d'écriture de « %s » : %s erreur d'écriture la clef sur la carte : %s erreur d'écriture du porte-clefs « %s » : %s erreur d'écriture du porte-clefs public « %s » : %s erreur d'écriture du porte-clefs secret « %s » : %s la clef existante sera remplacée expiréeexpirée : %sexpire : %sexporter les attributs d'identité (en général les photos d'identité)exporter les clefsexporter les clefs vers un serveur de clefsexporter les clefs de révocation marquées comme « sensibles »exporter les signatures marquées comme locales seulementil est interdit d'exporter les clefs secrètes les appels externes à un serveur de clef ne sont pas pris en charge dans cette compilation les appels aux programmes externes sont désactivés car les droits du fichier d'options ne sont pas sûrs impossible d'initialiser la base de confiance : %s échec de reconstruction du cache de porte-clefs : %s impossible de stocker la date de création : %s impossible de stocker l'empreinte : %s impossible de stocker la clef : %s échec de déprotection de la sous-clef : %s impossible d'utiliser le code personnel par défaut en tant que %s : %s — désactivation de la prochaine utilisation par défaut fémininrécupérer la clef indiquée dans l'URL de la carteerreur de fermeture du fichiererreur de création de fichiererreur de suppression du fichierle fichier existeerreur d'ouverture de fichiererreur de lecture de fichiererreur de modification du nom du fichiererreur d'écriture de fichierl'empreinte de la carte ne correspond pas à celle demandée marquer l'identité sélectionnée comme principaleforcéforcer le chiffrement symétrique %s (%d) est en désaccord avec les préférences du destinataire échec du fstat de « %s » dans %s : %s échec de fstat(%d) dans %s : %s totaleerreur généralegénérer des messages compatibles avec PGP 2.xgénérer une nouvelle paire de clefsgénérer un certificat de révocationgénérer de nouvelles clefséchec de génération de la clef génération d'une nouvelle clef génération de la somme de contrôle de 16 bits (obsolète) pour protéger la clef secrète gpg-agent n'est pas disponible dans cette session le protocole gpg-agent version %d n'est pas pris en charge gpg/carte> respecter l'enregistrement PKA positionné sur une clef en récupérant les clefsrespecter l'URL de serveur de clefs favori indiqué dans la clefrRmMqQiIimporter les clefs d'un serveur de clefsimporter des signatures marquées comme locales seulementimporter ou fusionner les clefsimpossible d'importer des clefs secrètes inclure les clefs révoquées dans les résultats de rechercheinclure les sous-clefs en cherchant par identifiant de clefla ligne d'entrée %u est trop longue ou un caractère de changement de ligne manque la ligne d'entrée est plus longue que %d caractères incorrectemode S2K incorrect ; doit être 0, 1 ou 3 argument incorrectarmure incorrecteen-tête d'armure incorrect : armure incorrecte : ligne plus longue que %d caractères liste de recherche automatique de clef incorrecte en-tête de signature en texte clair incorrect ligne protégée par « - » incorrecte : préférences par défaut incorrectes « default-cert-level » incorrect ; doit être 0, 1, 2 ou 3 options d'exportation incorrectes empreinte incorrectealgorithme de hachage « %s » incorrect options d'importation incorrectes élément « %s » incorrect dans la chaîne de préférences porte-clefs incorrectles options du serveur de clefs sont incorrectes protocole de serveur de clefs incorrect (nous %d!=gestionnaire %d) options de liste incorrectes « min-cert-level » incorrect ; doit être , 1, 2 ou 3 paquet incorrectphrase secrète incorrectepréférences personnelles de chiffrement incorrectes préférences personnelles de compression incorrectes préférences personnelles de hachage incorrectes caractère %02X incorrect en radix64, ignoré paquet racine incorrect détecté dans proc_tree() structure de carte OpenPGP incorrecte (DO 0x93) valeur incorrecte options de vérification incorrectes vous devriez mettre à jour vos préférences et redistribuer cette clef « %s » introuvable sur le serveur de clefs clef « %s » introuvable : %s la clef %s n'a pas d'identité clef %s marquée de confiance ultime. la clef %s apparaît plusieurs fois dans la base de confiance la clef %s a été créée %lu seconde dans le futur (faille temporelle ou problème d'horloge) la clef %s a été créée %lu secondes dans le futur (faille temporelle ou problème d'horloge) clef %s : « %s » %d nouvelles signatures clef %s : « %s » %d nouvelles sous-clefs clef %s : « %s » %d nouvelles identités clef %s : « %s » %d signature nettoyée clef %s : « %s » %d signatures nettoyées clef %s : « %s » %d identité nettoyée clef %s : « %s » %d identités nettoyées clef %s : « %s » 1 nouvelle signature clef %s : « %s » 1 nouvelle sous-clef clef %s : « %s » 1 nouvelle identité clef %s : « %s » n'est pas modifiée clef %s : ajout du certificat de révocation « %s » clef %s : « %s » certificat de révocation importé clef %s : %s clef %s : clef de type PGP 2.x — ignorée clef %s : corruption de sous-clef PKS réparée clef %s : acceptée comme clef de confiance clef %s : identité « %s » non autosignée acceptée clef %s : déjà dans le porte-clefs secret clef %s : impossible de trouver le bloc de clef d'origine : %s clef %s : impossible de lire le bloc de clef d'origine : %s clef %s : ajout de la signature directe de clef clef %s : ne correspond pas à notre copie clef %s : identités en double détectées — fusionnées clef %s : signature directe de clef incorrecte clef %s : certificat de révocation incorrect : %s — rejeté clef %s : certificat de révocation incorrect : %s — ignoré clef %s : autosignature de l'identité « %s » incorrecte clef %s : lien à la sous-clef incorrect clef %s : révocation de sous-clef incorrecte clef %s : matériel de clef sur la carte — ignorée clef %s : nouvelle clef — ignorée clef %s : pas de clef publique — impossible d'appliquer le certificat de révocation clef %s : pas de clef publique pour la clef de confiance — ignorée clef %s : pas de sous-clef pour relier la clef clef %s : pas de sous-clef pour révoquer la clef clef %s : pas de sous-clef pour la signature de lien à la sous-clef clef %s : pas de sous-clef pour la signature de révocation de sous-clef clef %s : pas d'identité clef %s : pas d'identité pour la signature clef %s : pas d'identité valable clef %s : signature non exportable (classe 0x%02X) — ignorée clef %s : non protégée — ignorée clef %s : clef publique « %s » importée clef %s : clef publique introuvable : %s clef %s : suppression de lien multiple aux sous-clefs clef %s : suppression de la révocation de sous-clefs multiples clef %s : certificat de révocation au mauvais endroit — ignoré clef %s : clef secrète importée clef %s : clef secrète introuvable : %s clef %s : clef secrète avec chiffrement %d incorrect — ignorée clef %s : clef secrète sans clef publique — ignorée clef %s : sous-clef ignorée clef %s : identité « %s » ignorée clef %s : signature de sous-clef au mauvais endroit — ignorée clef %s : classe de signature inattendue (0x%02X) — ignorée clef %s : algorithme à clef publique non pris en charge clef %s : algorithme à clef publique non géré avec l'identité « %s » la clef existe déjà échec d'exportation de la clef : %s la génération de clef est terminé (%d secondes) la clef a été créée %lu seconde dans le futur (faille temporelle ou problème d'horloge) la clef a été créée %lu secondes dans le futur (faille temporelle ou problème d'horloge) la clef n'est pas marquée comme non sécurisée — elle ne peut pas être utilisée avec le soi-disant générateur de nombres aléatoires. clef introuvable sur le serveur de clefs opération sur la clef impossible : %s ressource de bloc de clef « %s » : %s le porte-clefs « %s » a été créé erreur de communication avec le serveur de clefs : %s le serveurs de clefs n'a pas envoyé sa VERSION erreur du serveur de clefserreur interne du serveur de clefs échec de réception depuis le serveur de clefs : %s échec de rafraîchissement par le serveur de clefs : %s échec de recherche au sein du serveur de clefs : %s échec d'envoi vers le serveur de clefs : %s le délai d'attente du serveur de clefs a expiré taille incorrecte ; utilisation de %u bits taille arrondie à %u bits ligne trop longueafficher toutes les données disponiblesafficher et vérifier les signatures de clefsafficher la clef et les identitésafficher les clefsafficher les clefs et les empreintesafficher les clefs et les signaturesafficher les préférences (expert)afficher les préférences (bavard)afficher les clefs secrètesfaire une signature détachéeconvertir les conflits de date en avertissementséchec de make_keysig_packet : %s masculinCRC mal défini la variable d'environnement GPG_AGENT_INFO est mal définie identité mal définiemarginale« marginals-needed » doit être supérieur à 1 « max-cert-depth » doit être compris entre 1 et 255 menu pour modifier ou déverrouiller le code personneldéplacer une clef de sauvegarde vers une carte à pucedéplacer une clef vers une carte à pucedéplacement d'une signature de clef au bon endroit nNsignatures en texte clair imbriquées erreur de réseaujamaisjamais nouveau fichier de configuration « %s » créé la prochaine vérification de la base de confiance aura lieu le %s nonaucun signe = trouvé dans la définition du groupe « %s » pas de cartepas de clef publique correspondante : %s pas de donnéespas de porte-clefs par défaut : %s aucun module de récupération d'entropie n'a été trouvé pas de gestionnaire pour le type de serveurs de clefs « %s » pas d'action pour le serveur de clefs. pas de serveur de clefs connu (utilisez l'option --keyserver) inutile de vérifier la base de confiance inutile de vérifier la base de confiance avec le modèle de confiance « %s » inutile de mettre à jour la base de confiance avec le modèle de confiance « %s » aucun afficheur de photos n'a été choisi aucun programme d'exécution à distance n'est pris en charge aucune clef de révocation trouvée pour « %s » pas de clef secrète pas de sous-clef secrète pour la sous-clef publique %s — ignorée aucune signature trouvée pas de données signées cette identité n'existe pasaucune clef de confiance ultime n'a été trouvée aucune donnée OpenPGP valable n'a été trouvée. pas de destinataire valable aucun porte-clefs accessible en écriture n'a été trouvé : %s aucun porte-clefs public accessible en écriture n'a été trouvé : %s aucun porte-clefs secret accessible en écriture n'a été trouvé : %s la signature n'est pas détachée ce n'est pas une carte OpenPGPnon chiffrénon forcénon traiténon pris en chargeremarque : le fichier random_seed est vide remarque : le fichier random_seed n'a pas été mis à jour oOd'accord, nous sommes le destinataire anonyme. ok|okl'ancien encodage de la clef de chiffrement (DEK) n'est pas pris en charge signature d'un ancien type (PGP 2.x) n'accepter que les mises à jour des clefs existantesl'opération n'est pas possible tant que la mémoire sûre n'est pas initialisée fichier d'options « %s » : %s nom de fichier original : « %.*s » les renseignements de confiance du propriétaire ont été effacées valeur de confiance au propriétaire manquantephrase secrète générée avec l'algorithme de hachage %d inconnu la phrase secrète n'a pas été correctement répétée ; veuillez réessayer.veuillez faire un --check-trustdb veuillez entrer une adresse électronique facultative mais sérieusement recommandéeveuillez consulter %s pour plus de renseignements veuillez consulter pour de plus amples renseignements veuillez plutôt utiliser « %s%s » veuillez patienter pendant la génération de la clef… préférence « %s » en double fin de fichier prématurée (dans le CRC) fin de fichier prématurée (dans le pied) fin de fichier prématurée (pas de CRC) afficher l'état de la carteproblème de gestion des paquets chiffrés problème avec l'agent — arrêt d'utilisation de l'agent demander avant d'écraser un fichierl'algorithme de protection %d%s n'est pas pris en charge le hachage de protection %d n'est pas pris en charge les clefs publique et secrète ont été créées et signées. la clef publique %s est plus récente de %lu seconde que la signature la clef publique %s est plus récente de %lu secondes que la signature clef publique %s introuvable : %s échec du déchiffrement par clef publique : %s la clef publique ne correspond pas à la clef secrète. données chiffrées par clef publique : bonne clef de chiffrement (DEK) la clef publique est %s clef publique introuvablela clef publique de la clef de confiance ultime %s est introuvable qQquitterquitter ce menucaractère Quoted-Printable dans l'armure provenant sans doute d'un serveur de courriers électroniques défectueux clef pour éviter d'éventuels problèmes d'algorithmes non appropriés erreur de lecture dans « %s » : %s lecture de « %s » lecture des options de « %s » échec de lecture de clef publique : %s lecture de l'entrée standard… cause de révocation : rafraîchissement de %d clefs à partir de %s rafraîchissement d'une clef à partir de %s rejetée par le filtre d’importationsupprimer autant que possible de la clef après l'importationsupprimer autant que possible de la clef pendant l'exportationsupprimer les clefs du porte-clefs publicsupprimer les clefs du porte-clefs secretsupprimer la phrase secrète des sous-clefs exportéesnettoyer les parties inutilisables de la clef après l'importationsupprimer les parties inutilisables de la clef pendant l'exportationimpossible de renommer « %s » en « %s » : %s réparer les données endommagées du serveur pks pendant l'importationrequête de la clef %s sur %s demande de la clef %s sur le serveur %s %s limite de ressources atteintela réponse ne contient pas le module RSA la réponse ne contient pas l'exposant public RSA la réponse ne contient pas les données de clef publique commentaire de révocation : révoquer la clef ou des sous-clefs sélectionnéesrévoquer les identités sélectionnéesrévoquer les signatures des identités sélectionnéesrévoquéerévoquée par votre clef %s le %s révoquée : %sarrondie à %u bits enregistrer et quitterchercher les clefs avec un serveur de clefsrecherche de « %s » sur %s recherche de « %s » sur le serveur %s %s recherche de noms sur %s recherche de noms sur le serveur %s %s clef secrète « %s » introuvable : %s clef secrète %s : %s la clef secrète est déjà stockée sur une carte la clef secrète n'est pas disponibledes parties de la clef secrète ne sont pas disponibles Les parties secrètes de la clef ne sont pas disponibles. sélectionner la sous-clef Nsélectionner l'identité Nla fonction de hachage de certification sélectionnée est incorrecte l'algorithme de chiffrement sélectionné est incorrect l'algorithme de compression sélectionné est incorrect la fonction de hachage sélectionnée est incorrecte échec de sélection d'openpgp : %s envoi de la clef %s à %s envoi de la clef %s au serveur %s %s définir une notation pour les identités sélectionnéesdéfinir la liste des préférences pour les identités sélectionnéesdéfinir le serveur de clefs favori pour les identités sélectionnéesutiliser les notations aux normes IETF en affichant les signaturesutiliser les notations aux normes IETF en vérifiant les signaturesafficher les commandes d'administrationmontrer toutes les notations en affichant les signaturesmontrer toutes les notations en vérifiant les signaturesmontrer les dates d'expiration en affichant les signaturesafficher l'empreinte de la clefne montrer que l'identité principale en vérifiant les signaturesmontrer les URL de politique en affichant les signaturesmontrer les URL de politique en vérifiant les signaturesmontrer les URL des serveurs de clefs favoris en affichant les signaturesmontrer les URL des serveurs de clefs favoris en vérifiant les signaturesindiquer les sous-clefs révoquées et expirées en affichant les clefsmontrer les identités révoquées et expirées en affichant les clefsmontrer les identités révoquées et expirées en vérifiant les signaturesmontrer les photos d'identité sélectionnéesmontrer le nom du porte-clefs en affichant les clefsafficher cette aideindiquer la validité de l'identité en affichant les clefsindiquer la validité de l'identité en vérifiant les signaturesutiliser les notations fournies par l'utilisateur en affichant les signaturesutiliser les notations fournies par l'utilisateur en vérifiant les signaturessigner une clefsigner une clef localementsigner ou éditer une clefsigner les identités sélectionnées [* voir ci-dessous les commandes similaires]signer les identités sélectionnées localementsigner les identités sélectionnées avec une signature non révocablesigner les identités sélectionnées avec une signature de confiancevérification de signature supprimée signatures créées jusqu'à présent : %lu signée par votre clef %s le %s%s%s échec de la signature : %s la sous-clef de signature %s a déjà une certification croisée signature :« %s » a été ignorée : %s « %s » a été ignorée : en double ignoré : clef publique déjà activée ignoré : la clef publique est déjà définie en destinataire par défaut ignoré : clef secrète déjà présente un bloc de type %d a été ignoré l'autosignature v3 de l'identité « %s » a été ignorée révocation autonome — utilisez « gpg --import » pour l'appliquer signature autonome de classe 0x%02x impossible de stocker la clef sur la carte : %s la sous-clef %s ne signe pas et n'a donc pas besoin de certification croisée un sous-paquet de type %d possède un bit critique échec du chiffrement symétrique de « %s » : %s erreur système pendant l'appel du programme externe : %s prendre les clefs dans ce porte-clefsmode textel'URL de politique de certification donnée est incorrecte l'URL du serveur de clefs favori qui a été donnée est incorrecte l'URL de politique de signature donnée est incorrecte impossible de vérifier la signature. Veuillez vérifier que le fichier de signature (.sig ou .asc) est bien le premier fichier indiqué sur la ligne de commande. il y a une clef secrète pour la clef publique « %s ». c'est une clef Elgamal générée par PGP qui n'est pas sûre pour les signatures.cette clef à déjà été désignée comme un révocateur cela pourrait provenir d'une autosignature manquante ce message ne sera pas utilisable par %s cette plateforme a besoin de fichiers temporaires pour appeler des programmes externes conflit de datepasser de la liste des clefs secrètes à celle des clefs privées ou vice versainverser le paramètre obligeant à entrer le code personnel pour les signaturestrop de préférences de chiffrement trop de préférences de compression trop de préférences de hachage trop d'entrées dans le cache de clefs publiques — désactivé erreur de base de confiancel'enregistrement de confiance %lu n'est pas du type %d demandé enregistrement de confiance %lu, type de requête %d : échec de lecture : %s enregistrement de confiance %lu, type %d : échec d'écriture : %s confiance : %senregistrement de base de confiance %lu : échec de lseek : %s enregistrement de base de confiance %lu : échec d'écriture (n=%d) : %s transaction de base de confiance trop grande base de confiance : échec de lseek : %s base de confiance : échec de lecture (n=%d) : %s base de confiance : échec de synchronisation : %s confiance ajustée à TOTALE car les renseignements PKA sont conformes confiance ajustée à JAMAIS à cause de mauvais renseignements PKA ultimeimpossible d'afficher la photo d'identité. impossible d'exécuter le programme externe impossible d'exécuter le programme « %s » : %s impossible d'exécuter l'interpréteur de commandes « %s » : %s impossible d'ouvrir le fichier JPEG « %s » : %s impossible de lire la réponse du programme externe : %s impossible de configurer le chemin d'exécution à %s impossible de mettre à jour l'enregistrement de version de la base de confiance : échec d'écriture : %s impossible d'utiliser le chiffrement IDEA avec toutes les clefs utilisés pour chiffrer. impossible d'utiliser ce modèle de confiance inconnu (%d) — utilisation du modèle de confiance %s à la place débloquer le code personnel en utilisant un code de réinitialisationnon compressé|non|sansindéfiniearmure inattendue : données inattenduesalgorithme de chiffrement non implémentéalgorithme de clef publique non implémentéinconnuen-tête d'armure inconnu : algorithme de chiffrement inconnualgorithme de compression inconnuélément de configuration « %s » inconnu destinataire par défaut « %s » inconnu algorithme de hachage inconnualgorithme de protection de clef inconnu option « %s » inconnue type de paquet inconnualgorithme de protection inconnu algorithme de clef publique inconnuclasse de signature inconnueversion inconnuesortie non naturelle du programme externe non indiquéURI non pris en chargealgorithme de clef publique inutilisableclef publique inutilisableclef secrète inutilisablemettre à jour les clefs depuis un serveuréchec de la mise à jour : %s échec de la mise à jour de la clef secrète : %s mettre la base de confiance à jourutilisation : %sutilisation : gpg [options] utiliser comme fichier de sortieutiliser le mode texte canoniqueutiliser d'abord l'option « --delete-secret-keys » pour la supprimer. utiliser le comportement strict d'OpenPGPutiliser des fichiers temporaires pour passer les données aux assistants de serveurs de clefsutiliser cet identité pour signer ou déchiffrerl'identité « %s »" est déjà révoquée. identité : « %s » utilisation du modèle de confiance %s utilisation de l'algorithme de chiffrement %s utilisation du code personnel par défaut en tant que %s utilisation de la sous-clef %s à la place de la clef principale %s valider les signatures avec les données PKAvalidité : %sbavardla vérification du code personnel d'administration est actuellement interdite avec cette commande échec de vérification CHV%d : %s vérifier une signaturevérifier le code personnel et afficher toutes les donnéesattente du verrou sur « %s »… clef faibleclef faible générée — nouvel essai taille étonnante pour une clef de session chiffrée (%d) ne sera pas exécuté avec une mémoire non sécurisée à cause de %s écriture de la signature directe écriture de la signature de lien à la clef écriture d'une nouvelle clef écriture de la clef publique dans « %s » écriture de la clef secrète partielle dans « %s » écriture de la clef secrète dans « %s » écriture de l'autosignature écriture de « %s » écriture vers la sortie standard mauvaise clef secrète utiliséeoOouiune signature en texte clair avec des clefs de type PGP 2.x n'est possible qu'en mode --pgp2 une signature détachée avec des clefs de type PGP 2.x n'est possible qu'en mode --pgp2 le chiffrement RSA n'est possible qu'avec des clefs d'au plus 2048 bits en mode --pgp2 une signature détachée ou en texte clair n'est possible qu'en mode --pgp2 vous pouvez mettre à jour vos préférences avec : gpg --edit-key %s updpref save signer et chiffrer en même temps n'est possible qu'en mode --pgp2 vous ne pouvez pas utiliser une clef comme son propre révocateur désigné impossible d'utiliser --symmetric --encrypt en mode %s impossible d'utiliser --symmetric --encrypt avec --s2k-mode 0 impossible d'utiliser --symmetric --sign --encrypt en mode %s impossible d'utiliser --symmetric --sign --encrypt avec --s2k-mode 0 vous avez trouvé un bogue… (%s : %d) impossible d'utiliser %s en mode %s. impossible d'utiliser l'algorithme de chiffrement « %s » en mode %s. impossible d'utiliser l'algorithme de compression « %s » en mode %s. impossible d'utiliser l'algorithme de hachage « %s » en mode %s. des fichiers (et pas un tube) doivent être utilisés lorsque --pgp2 est activé. |AN|Nouveau code personnel d'administration|A|Veuillez entrer le code personnel d'administration|A|Veuillez entrer le code personnel d'administration%%0A[tentatives restantes : %d]|FD|écrire l'état sur ce descripteur|NOM|chiffrer pour NOM|N|Nouveau code personnel|N|niveau de compression N (0 désactive)|RN|Nouveau code de réinitialisation|[fichier]|faire une signature en texte clair|[fichier]|faire une signature|alg. [fich.]|indiquer les fonctions de hachage||Veuillez entrer le code personnel||Veuillez entrer le code personnel%%0A[signatures faites : %lu]||Veuillez entrer le code de réinitialisation pour la cartegnupg-1.4.20/po/fi.gmo0000644000175000017500000021733412635457221011400 00000000000000}U'@5-A5o556727O7l777D7.8I7888888 9$9@9Y9$v9&9,99 ::<:N:h:]::/:(&;.O;3~;;;;;<!<4<M<i<"<<<<"<%=&-=!T=%v="=#='= >,>I>^>{>>>(>$>??#0?T?s???&?%?,@4C@x@@@@@'@A/AMA_ArAA"AAA-A(B0EBHvB B C CCAD/CD0sD\DE-E0DE.uEEEE3E4F-HFvF.0G_G hG rG:GGG#G&H&@HgH~HHHGH@H>=I+|I=II"I:JTJgJyJ J/JJKHK-L ?LJL8]L#LL"LLE}MM;YNNIOgOO$OOOOPPPQ)Q?QRQbQtQ%QQQ MR!nR<RR"R, S,8S2eSS S(S S T**TUTgTTTTT"TUU/UEOUoU V &V8GV'VcV/ WEf1g=BgIg4gg#h=Bhh?hDh1%i5WiHi-iHjMjj<jB/k)rkCk.k@lFPl2l1l l2mPmhQn*s&s1 t#>t2bt>tt=u0uMu"Cv&fv3v%vDv,,y5Yyyy_y z z(z 9zEz%^zzzz zz zz {*{2{:{J{R{a{p{ {{{{{{{ |-|.K|%z|2||||}-}B}5W}}};}<}/~E~&[~~~-~(~~10by 2$O=t%؀ 1H`|&&Á K%^$̂ ނ @- n|!D+/'W`~%%$܄  .7f2 8+Ht$&$,4CGZHB.DTrȈ 'B[u'.@(R,{ Ɋ ׊$% (I%h&ҋ!#AV%u% ی #&&J)q< (,Hu;MΎ7O"g-+ҏ*!)&K$rIÐ  ;N#f#ґ #0T3e%% "%H\ e5$4%1*W0Ӕ.ܔ* 6+Ǖ/%#I(\-/Ȗ,"%)Hr ͗#-(VIuϘ .Ibvř#ՙ #7 Klɚܚ6#+ Op-› )EayDFEFDAѝ7K$hF Ԟ$ #1U#n9S)8M f!*ԣ*?4XS$%%#Ko!!ʥ&0(4Y'! ئ#&5k\ȧ8; E\K&0I co$)&ک% ,+M)y01Ԫ..5+d** ;Ro,5%"5%X%~--5:M'3O!o̯0'/W@q6HR2 %;߲+0Gwx/ *:1e%ٴ:޴<7V1X ?"% 624i5Է *F5K|Sȸ:;W07ٹ+=P-kyL5ۻ #;_ u7p_)Yw#Nr$$ڿ " ?`r7 k)(&6$8B]9N$)N2k" > !:O-o,# $DEh :.8iw,CGK&"=9F!"D g(s -**#<`}!:@{rVCP99'&%>[o!9 =>D&7&+ &5\DvPH;NVY6+6'bA"`MP)NY,qNRD,APn<TPQ8:.BE 2i0/HBbGJ0H) 564l3:pH   %)0A[u 0  "2D]v !& (A,j2499 V0w! &=&Pw>])@3P=.'?G\(& 1#E iv(8$4'Nv$!/9$9^ f%$=J '( PAq J58,n5%/5e}52!%A9g$2Pe1w/31 ? Ocpdr9/+-32a6(' ,#Mq!5$C9Z$.50! R ^i":& !0$R!w.(*4I=~=  % 3%=+c'&=9 $R w 0  C F# %j ) + + 8 K .h 8 ( 0 .* Y t  y  a  # ; X +l +    42O/"$* = ^'(?)BlI)662"i16;1.B3v2=@(A9j! &''6#^-)A"0-S %=\*n+""*J$fAD7)|(  **+!V.x++=$]PWI?9?C+G+sP"!.5+d-^@!,%TBVz !@S1K0"R4`Zl(h;<Fuat|WhxtQh5^N =}\-]<AJk8>|' law]syQ_:B/Hq K2pe3g$CvHEk\"gSW"l+1)FLm`F*w>YyDVMws SfPP*B{I ;4yoX[+A0:dXgzx2iar7%.67 NU{;d?@9 }_3?<pbmRcH&9GsCj.ZCrzT&K$^_f.Zfi| x?ve' n1m Luo+ (8Y~{%vOQiUA/#>-~M*qP'N}8Ir)k`M9oVbnp&OJGYX6E:[W6t 5qjIcbJG jR0)7#dn=/$ UO]\L,!Te245 , =#3DEu[cD- ( Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. new signatures: %lu Subkey fingerprint: secret keys read: %lu skipped new keys: %lu Subkey fingerprint: (%d) DSA (sign only) (%d) RSA (encrypt only) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (2) I have done casual checking.%s (3) I have done very careful checking.%s new key revocations: %lu Unable to sign. secret keys imported: %lu (non-exportable) Primary key fingerprint: secret keys unchanged: %lu # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d bad signatures %d keys processed (%d validity counts cleared) %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %s ... %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid export options %s:%d: invalid import options (No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (unless you specify the key by fingerprint) (you may have used the wrong program for this task) --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected @ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" or "no"Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Can't check signature: %s Can't edit this key: %s CancelCertificates leading to an ultimately trusted key: Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for the primary key. Cipher: Comment: Compression: Create a revocation certificate for this signature? (y/N) Critical signature notation: Critical signature policy: Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) Email address: Enter JPEG filename for photo ID: Enter an optional description; end it with an empty line: Enter new filenameEnter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Hash: Hint: Select the user IDs to sign How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid passphrase; please try againInvalid selection. Is this photo correct (y/N/q)? It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key available at: Key generation canceled. Key generation failed: %s Key has been compromisedKey is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringN to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: sender requested "for-your-eyes-only" NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo such user ID. No user ID with index %d Not a valid email address Note: This key has been disabled. Note: This key has expired! Nothing deleted. Please correct the error first Please don't put the email address into the real name or the comment Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select exactly one user ID. Please select the reason for the revocation: Please select what kind of key you want: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Primary key fingerprint:Pubkey: Public key is disabled. Real name: Really create the revocation certificates? (y/N) Really delete this self-signature? (y/N)Reason for revocation: %s Repeat passphrase Repeat passphrase: Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Secret key is available. Secret parts of primary key are not available. Signature expired %s Signature expires %s Signature notation: Signature policy: Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.There are no preferences on a PGP 2.x-style user ID. This command is not allowed while in %s mode. This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu UncompressedUsage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID is no longer validWARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: encrypted message has been manipulated! WARNING: invalid size of random_seed file - not used WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: signature digest conflict in message WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You need a Passphrase to protect your secret key. You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [filename][revocation][self-signature][uncertain]`%s' already compressed `%s' is not a regular file - ignored `%s' is not a valid long keyID add a photo IDadd a revocation keyadd a user IDarmor header: armor: %s assuming %s encrypted data assuming signed data in `%s' bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create directory `%s': %s can't disable core dumps: %s can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s cancelled by user cannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! change the ownertrustchange the passphrasechecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled completes-needed must be greater than 0 conflicting commands create ascii armored outputdata not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay deleting keyblock failed: %s do not make any changesenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error in trailer line error reading `%s': %s error reading keyblock: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s export keysexport keys to a key serverexternal program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s file close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorforcing symmetric cipher %s (%d) violates recipient preferences general errorgenerate a new key pairgenerate a revocation certificategenerating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported iImMqQsSimport keys from a key serverimport/merge keysinput line %u too long or missing LF input line longer than %d characters invalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid hash algorithm `%s' invalid import options invalid keyringinvalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid root packet detected in proc_tree() invalid value key export failed: %s key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! keyring `%s' created keyserver errorkeyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keysize invalid; using %u bits keysize rounded up to %u bits list key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginals-needed must be greater than 1 moving a key signature to the correct place nNnested clear text signatures network errornever new configuration file `%s' created next trustdb check due at %s nono corresponding public key: %s no default secret keyring: %s no entropy gathering module detected no need for a trustdb check no remote program execution supported no secret key no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not encryptednot processednot supportednote: random_seed file is empty note: random_seed file not updated okay, we are the anonymous recipient. old encoding of the DEK is not supported old style (PGP 2.x) signature operation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead premature eof (in CRC) premature eof (no CRC) problem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported public and secret key created and signed. public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key not foundqQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used reading from `%s' reading options from `%s' reading stdin ... reason for revocation: remove keys from the public keyringremove keys from the secret keyringresource limitrevocation comment: rounded up to %u bits save and quitsearch for keys on a key serversecret key not availablesecret key parts are not available select user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected digest algorithm is invalid show this helpsign a keysign a key locallysign or edit a keysignature verification suppressed signing failed: %s signing:skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x subpacket of type %d has critical bit set system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this may be caused by a missing self-signature this message may not be usable by %s timestamp conflicttoo many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s unable to display photo ID! unable to execute external program unable to read external program response: %s unable to set exec-path to %s unable to use the IDEA cipher for all of the keys you are encrypting to. unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown digest algorithmunknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use this user-id to sign or decryptuser ID "%s" is already revoked using cipher %s verboseverify a signatureweak keyweak key created - retrying weird size for an encrypted session key (%d) writing direct signature writing key binding signature writing public key to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you found a bug ... (%s:%d) you may not use %s while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |FD|write status info to this FD|NAME|encrypt for NAME|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digestsProject-Id-Version: gnupg 1.2.2 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:23+0200 Last-Translator: Tommi Vainikainen Language-Team: Finnish Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Syötä käyttäjätunnus. Lopeta tyhjällä rivillä: Satunnaislukuja ei ole vielä tarpeeksi. Ole hyvä ja jatka työskentelyä antaaksesi käyttöjärjestelmälle mahdollisuuden kerätä lisää entropiaa! (Vielä tarvitaan %d tavua) Valitse kuva, jota haluat käyttää valokuvatunnisteenasi. Kuvan täytyy olla JPEG-tiedosto. Muista, että kuva tallennetaan julkiseen avaimeesi. Jos käytät erittäin suurta kuvaa, myös avaimesta tulee erittäin suuri! Kuvan koon ollessa suunnilleen 240x288, on koko sopiva käyttöön. Tuetut algoritmit: tuotu: %lu muuttamatonta: %lu uusia aliavaimia: %lu uusia käyttäjätunnuksia: %lu ei tuotu: %lu ilman käyttäjätunnuksia: %lu Ei ole varmaa, että allekirjoitus kuuluu haltijalle. Allekirjoitus on luultavasti VÄÄRENNÖS. Mikään ei takaa sitä, että allekirjoitus todella kuuluu haltijalleen. uusia allekirjoituksia: %lu Aliavaimen sormenjälki: luettuja salaisia avaimia: %lu ohitetaan uudet avaimet: %lu Aliavaimen sormenjälki: (%d) DSA (vain allekirjoitus) (%d) RSA (vain salaus) (%d) RSA (vain allekirjoitus) (0) En vastaa.%s (1) En ole tarkistanut lainkaan.%s (2) Olen suorittanut arkisen tarkistuksen.%s (3) Olen suorittanut huolellisen tarkistuksen.%s uusia avainten mitätöintejä: %lu Allekirjoittaminen ei onnistu. tuotuja salaisia avaimia: %lu (vientiin kelpaamaton) Ensisijaisen avaimen sormenjälki: muuttamattomia salaisia avaimia: %lu # Luettelo annettuista luottamusarvoista, luotu %s # (Käytä "gpg --import-ownertrust" palauttaaksesi ne) %d väärää allekirjoitusta %d avainta käsitelty (%d kelpoisuuslaskuria tyhjätty) %d allekirjoitusta jätetty tarkistamatta virheiden vuoksi %d allekirjoitusta jätetty tarkistamatta puuttuvien avainten vuoksi havaittiin %d käyttäjätunnusta ilman voimassaolevaa oma-allekirjoitusta %s ... %s ja %s eivät vielä toimi yhdessä %s salattua dataa %s-salattu istuntoavain käytetään %s-salausta %s on uusi %s säilyi muuttumattomana %s ja %s yhdessä on järjetöntä! %s ja %s eivät ole sallittuja yhdessä! %sallekirjoitus, tiivistealgoritmi %s %s. %s/%s salattu vastaanottajalle: "%s" %s: hakemistoa ei ole olemassa! %s: virhe luettaessa vapaata tietuetta: %s %s: virhe luettaessa versiotietuetta: %s %s: virhe päivitettäessä versiotietuetta: %s %s: virhe kirjoitettaessa hakemistotietuetta: %s %s: virhe kirjoitettaessa versiotietuetta: %s %s: tietueeseen lisääminen epäonnistui: %s %s: hajautustaulukon luonti ei onnistu: %s %s: versiotietueen luonti epäonnistui: %s%s: tietueen nollaaminen epäonnistui: %s %s: tiedostoversio %d ei kelpaa %s: trustdb ei kelpaa %s: luotu trustdb ei kelpaa %s: avainrengas luotu %s: ei ole trustdb-tiedosto %s: ohitettu: %s %s: ohitettu: julkinen avain on jo olemassa %s ohitettu: julkinen avain on poistettu käytöstä %s: trustdb luotu %s: tuntematon pääte %s: versiotietue tietuenumerolla %lu %s:%d: paheksuttava valitsin "%s" %s:%d: virheelliset vientivalitsimet %s:%d: virheelliset tuontivalitsimet (Kuvausta ei annettu) (Todennäköisesti haluat valita %d tässä) (Tämä on arkaluonteinen mitätöintiavain) (ellet määritä avainta sormenjäljen perusteella) (olet ehkä käyttänyt tehtävään väärää ohjelmaa) --clearsign [tiedostonimi]--decrypt [tiedostonimi]--edit-key käyttäjätunnus [komennot]--encrypt [tiedostonimi]--lsign-key käyttäjätunnus--output ei toimi yhdessä tämän komennon kanssa --sign --encrypt [tiedostonimi]--sign --symmetric [tiedostonimi]--allekirjoita [tiedostonimi]--sign-key käyttäjätunnus--store [tiedostonimi]--symmetric [tiedostonimi]-k[v][v][v][c] [käyttäjätunnus] [avainrengas]...tämä on ohjelmistovika (%s:%d:%s) 1 väärä allekirjoitus 1 allekirjoitus jätetty tarkistamatta puuttuvan avaimen vuoksi 1 allekirjoitus jätetty tarkistamatta virheen vuoksi havaittiin 1 käyttäjätunnus ilman voimassaolevaa oma-allekirjoitusta @ (Katso täydellinen luettelo kaikista komennoista ja valitsimista man-sivuilta) @ Esim: -se -r Pekka [tiedosto] allekirjoita ja salaa Pekalle --clearsign [tiedosto] tee tekstimuotoinen allekirjoitus --detach-sign [tiedosto] tee erillinen allekirjoitus --list-keys [nimet] näytä avaimet --fingerprint [nimet] näytä sormenjäljet @ Valitsimet: @Komennot: ASCII-koodattu tuloste määritetty. Vastaa "kyllä" (tai vain "k") jos haluat luoda aliavaimen.Vastaa "kyllä", jos aliavaimen voi poistaaVastaa "kyllä", jos tiedoston voi ylikirjoittaaVastaa "kyllä", jos haluat poistaa tämän käyttäjätunnuksen. Menetät samalla kaikki siihen liittyvät varmenteet!Vastaa "kyllä" tai " ei"Haluatko edelleen varmasti lisätä sen? (k/E) Haluatko varmasti mitätöidä sen? (k/E) Haluatko varmasti edelleen allekirjoittaa? (k/E) Allekirjoitusta ei voi tarkistaa: %s Ei voi muokata avainta: %s PeruVarmennepolku ehdottomasti luotettuun julkiseen avaimeen: Muuta (N)imi, (H)uomautus, (S)ähköposti vai (O)k/(L)opeta?Muuta (N)imi, (H)uomautus, (S)ähköposti vai (L)opeta?Muuta valinnat kaikille käyttäjätunnuksille (tai vain valituille) nykyiseen luetteloon valinnoista. Kaikkien muutettujen oma-allekirjoitusten aikaleima siirretään yhdellä sekunnilla eteenpäin. Muutetaan ensisijaisen avaimen vanhentumisaikaa. Salaus: Huomautus: Pakkaus: Luodaanko tälle alekirjoitukselle mitätöintivarmenne? (k/E) Kriittinen allekirjoitusnotaatio: Kriittinen allekirjoituskäytäntö: Poistetaanko tämä kelvollinen allekirjoitus? (k/E/l)Poistetaanko tämä epäkelpo allekirjoitus? (k/E/l)Poistetaanko tämä tuntematon allekirjoitus? (k/E/l)%d allekirjoitus poistettu. %d allekirjoitusta poistettu. Erillinen allekirjoitus. Tiiviste: Haluatko tehdä uuden allekirjoituksen korvaamaan vanhentuneen? (k/E) Haluatko vahventaa sen täysin vientikelpoiseksi allekirjoitukseksi? (k/E) Haluatko vahventaa sen täysin vientikelpoiseksi OpenPGP-allekirjoitukseksi? (k/E) Haluatko allekirjoittaa uudelleen joka tapauksessa? (k/E) Haluatko allekirjoituksesi vanhenevan samaan aikaan? (K/e) Sähköpostiosoite: Syötä JPEG-tiedostonimi valokuvatunnisteelle: Syötä vapaaehtoinen kuvaus; lopeta tyhjään riviin: Syötä uusi tiedostonimiSyötä salasana Syötä salasana: Anna avaimen haltijan nimiSyötä uusi salasana salaiselle avaimelle. Syötä pyydetty arvo kuten näkyy kehotteessa. On mahdollista syöttää ISO-muotoinen päivä (VVVV-KK-PP), mutta sen seurauksena et saa kunnollista virheilmoitusta vaan järjestelmä yrittää tulkita arvon aikajaksona.Syötä avaimen kokoSyötä vastaanottajan, jolle haluat lähettää viestin, käyttäjätunnus.Syötä määrätyn mitätöijän käyttäjätunnus: Ominaisuudet: Tiedosto "%s" on olemassa.Anna allekirjoitetun tiedoston nimiKirjoita viestisi... Tiiviste: Vihje: Valitse allekirjoitettavat käyttäjätunnukset Kuinka huolellisesti olet vahvistanut avaimen haltijan henkilöllisyyden? Jos et tiedä vastausta, syötä "0". IDEA-salain ei käytettävissä, yritetään optimistisesti käyttää sen sijaan salainta %s Halutessasi voit kirjoittaa tähän kuvauksen miksi julkaiset tämän mitätöintivarmenteen. Kirjoita lyhyesti. Tyhjä rivi päättää tekstin. Vastaa "kyllä" jos haluat kaikesta huolimatta käyttää tätä epäluotettavaa avainta.Yleensä ei ole järkevää käyttää samaa avainta allekirjoitukseen ja salaamiseen. Tätä algorimiä tulisi käyttää vain määrätyissä ympäristöissä. Ole hyvä ja kysy tietoturva-asiantuntijaltasi ensinHuomautuksessa on epäkelpo merkki Nimessä on epäkelpo merkki Komento ei kelpaa (kirjoita "help") Salasana ei kelpaa; yritä uudestaanValinta ei kelpaa. Onko tämä oikein (k/E/l)? Tämän arvon määrittäminen on sinun tehtäväsi, tätä arvoa ei koskaan kerrota kolmansille osapuolille. Tarvitsemme sitä toteuttamaan luottamusverkko eikä sillä ei ole mitään tekemistä (epäsuorasti luotujen) varmenneverkkojen kanssa.Avain saatavilla kohteessa: Avaimen luonti keskeytetty. Avaimen luonti epäonnistui: %s Avain on murrettuAvain ei ole enää käytössäAvain on suojattu. Avain on mitätöity.Avain on uusittuAvain on voimassa? (0) Päivitystä ei tarvita, koska avain ei ole muuttunut. AvainrengasN muuta nimeä C muuta kommenttia E muuta sähköpostiosoitetta O jatka avaimen luomista L lopetaHUOM: %s ei ole normaaliin käyttöön! HUOM: Tätä avainta ei ole suojattu! HUOM: v3-aliavainten luonti ei ole OpenPGP:n mukaista HUOM: avain on mitätöity!HUOM: Ei oletusasetustiedostoa "%s" HUOM: Vanhat oletusarvoiset asetukset löytyvät tiedostosta "%s" HUOM: lähettäjä määrittää "vain-sinun-silmillesi" HUOM: yksinkertaista S2K-tilaa (0) ei todellakaan suositella käytettäväksi HUOM: trustdb:n ei voida kirjoittaa Nimi ei voi alkaa numerolla Nimen täytyy olla vähintään 5 merkkiä pitkä Tähän tarvitaan salainen avain. NnHhSsOoLlSalaisesta avainrenkaasta ei löydy vastaavaa allekirjoitusta Ei ohjeita saatavillaEi ohjetta aiheesta "%s"Ei eriteltyä syytäKäyttäjätunnusta ei löydy. Indeksillä %d ei löydy käyttäjätunnusta Sähköpostiosoite ei kelpaa Huom: Tämä avain on poistettu käytöstä Huom: Tämä avain on vanhentunut! Mitään ei poistettu. Ole hyvä ja korjaa ensin virhe Älä syötä sähköpostiosoitetta nimen tai huomautuksen paikalle Syötä uusi tiedostonimi. Jos painat vain RETURN, käytetään oletustiedostoa (joka näkyy sulkeissa).Kirjoita vapaaehtoinen huomautusAnna datatiedoston nimi: Ole hyvä ja syötä salasana, tämän on salainen lause Ole hyvä ja korjaa tämä mahdollinen tietoturvareikä Huomioi, että tässä näytetty voimassaolo ei ole välttämättä ajan tasalla jollet käynnistä ohjelmaa uudelleen Poista salaisten avainten valinnat, kiitos. Toista edellinen salasanasi varmistuaksesi siitä, mitä kirjoitit.Ilmoita ohjelmistovioista (englanniksi) osoitteeseen . Valitse tasan yksi käyttäjätunnus! Valitse mitätöinnin syy: Valitse millaisen avaimen haluat: Kuinka kauan avaimen tulee olla voimassa. 0 = Avain ei vanhene koskaan = Avain vanhenee n päivän kuluttua w = Avain vanhenee n viikon kuluttua m = Avain vanhenee n kuukauden kuluttua y = Avain vanhenee n vuoden kuluttua Kuinka kauan allekirjoituksen tulee olla voimassa. 0 = Allekirjoitus ei vanhene koskaan = Allekirjoitus vanhenee n päivän kuluttua w = Allekirjoitus vanhenee n viikon kuluttua m = Allekirjoitus vanhenee n kuukauden kuluttua y = Allekirjoitus vanhenee n vuoden kuluttua Käytä ensin komentoa "toggle". Ole hyvä ja odota, entropiaa kerätään. Tee jotain työtä, jos se vaikka estäisi sinua pitkästymästä. Se nimittäin samalla parantaa entropian laatua. Ensisijaisen avaimen sormenjälki:JulkAvain: Julkinen avain on poistettu käytöstä Oikea nimi: Varmastiko luo mitätöintivarmenteet? (k/E) Varmastiko poista oma-allekirjoitus? (k/E)Mitätöinnin syy: %s Toista salasana Toista salasana: Halutun avaimen koko on %u bittiä Mitätöintivarmenne luotu. Mitätöintivarmenne luotu. Ole hyvä ja siirrä se medialle, jonka voit piilottaa; jos Mallory saa käsiinsä tämän varmenteen, hän voi tehdä sillä avaimesta käyttökelvottoman. On järkevää tulostaa tämä varmenne ja tallentaa se siltä varalta, että mediastasi tulee lukukelvoton. Mutta varoituksen sanana: Tietokoneesi tulostusjärjestelmä saattaa tallentaa datan ja saattaa sen muiden saataville! Salainen avain on saatavilla. Ensisijaisen avaimen salaiset osat eivät ole saatavilla. Allekirjoitus vanheni %s Allekirjoitus vanhenee %s Allekirjoitusnotaatio: Allekirjoituskäytäntö: Syntaksi: gpg [valitsimet] [tiedostot] allekirjoita, tarkista, salaa tai avaa oletustoiminto riippuu syötteestä Satunnaislukugeneraattori on pelkkä kulissi, joka mahdollistaa ohjelman ajamisen - se ei ole vahvasti satunnainen! ÄLÄ KÄYTÄ OHJELMAN TUOTTAMAA DATAA!! Oma-allekirjoitus kohteessa "%s" on PGP 2.x -muodon allekirjoitus. Allekirjoitus ei ole pätevä. Järkevintä olisi poistaa se avainrenkaastasi.PGP 2.x -muodon käyttäjätunnukselle ei ole valintoja. Tätä komentoa ei sallita %s-tilassa. Tämä allekirjoitus takaa avaimen haltijan henkilöllisyyden. Tällaisen allekirjoituksen poistaminen on tavallisesti huono ajatus. GnuPG ei kenties voi käyttää avainta enää. Poista allekirjoitus vain, jos se ei ole jostain syystä pätevä, ja avaimella on jo toinen allekirjoitus.Tämä on voimassa oleva allekirjoitus tälle avaimelle, tavallisesti ei kannata poistaa tätä allekirjoitusta koska se saattaa olla tarpeen luottamussuhteen luomiseksi avaimeen tai johonkin toiseen tämän avaimen varmentamaan avaimeen.Tämä on oma avain Tämä avain on poistettu käytöstäTämä avain on vanhentunut!Avain vanhenee %s. Avainta ei ole suojattu. Allekirjoitusta ei voida tarkistaa koska sinulla ei ole siihen liittyvää avainta. Lykkää sen poistamista kunnes tiedät mitä avainta on käytetty, koska allekirjoitus avain saattaa luoda luottamusketjun toisen, jo ennalta varmennetun avaimen kautta.Tämä allekirjoitus vanheni %s. Tämä tekisi avaimesta käyttökelvottoman PGP 2.x:lle. Mitätöinnin tekee: Rakentaakseen luottamusverkon, GnuPG:n täytyy tietää mihin avaimiin luotetaan ehdottomasti - nämä ovat tavallisesti ne avaimet, joiden salainen pari on sinulla. Vastaa "kyllä" luottaaksesi tähän avaimeen ehdoitta Kaikkiaan käsitelty: %lu pakkaamatonKäyttö: gpg [valitsimet] [tiedostot] (-h näyttää ohjeen)Käyttö: gpgv [valitsimet] [tiedostot] (-h näyttää ohjeen)Käyttäjätunnus "%s" on vanhentunut.Käyttäjätunnuksella "%s" ei ole oma-allekirjoitusta.Käyttäjätunnus "%s" on mitätöity.Käyttäjätunnus ei ole enää käytössäVAROITUS: "%s" on paheksuttu valitsin VAROITUS: %s korvaa %s:n VAROITUS: löytyi 2 tiedostoa, joissa on luottamuksellisia tietoja. VAROITUS: Tämä on PGP 2.x -muodon avain. Määrätyn mitätöijän lisääminen voi saada jotkin PGP:n versiot hylkäämään avaimen. VAROITUS: Tämä on PGP2-muodon avain. Valokuvan lisääminen voi saada jotkin PGP:n versiot hylkäämään avaimen. VAROITUS: Tämän avaimen nimetty mitätöijä on mitätöinyt avaimen! VAROITUS: Tämän avaimen haltija on mitätöinyt avaimen! VAROITUS: Tätä avainta ei ole varmennettu luotettavalla allekirjoituksella! VAROITUS: Tätä avainta ei ole varmennettu tarpeeksi luotettavalla allekirjoituksella! VAROITUS: Haltija on mitätöinyt tämän aliavaimen! VAROITUS: Käytettyyn avaimeen ei luoteta! VAROITUS: Tähän avaimeen EI luoteta! VAROITUS: Havaittiin heikko avain - vaihda salasanaa uudestaan. VAROITUS: "%s" on tyhjä tiedosto VAROITUS: käyttäjätunnuksen allekirjoitus on päivätty %d sekuntin päähän tulevaisuuteen VAROITUS: avaimen nimittämistä määrätyksi mitätöijäksi ei voi perua! VAROITUS: salattua viestiä on muokattu! VAROITUS: random_seed-tiedosto on väärän kokoinen - tiedostoa ei käytetä VAROITUS: viesti salattiin symmetrisessä salaimessa esiintyvällä heikolla avaimella. VAROITUS: viestin eheyttä ei oltu suojattu VAROITUS: useita allekirjoituksia havaittu. Vain ensimmäisen voi tarkistaa. VAROITUS: mitään käyttäjätunnusta ei ole merkitty ensisijaiseksi. Tämän komennon johdosta eri käyttäjätunnus voi tulla oletetuksi ensisijaiseksi. VAROITUS: mitään ei viety VAROITUS: asetukset tiedostossa "%s" eivät ole käytössä vielä tässä ajossa VAROITUS: mahdollisesti turvaton symmetrisesti salattu istuntoavain VAROITUS: ohjelma voi luoda core-tiedoston! VAROITUS: vastaanottajia (-r) annettu käyttämättä julkisen avaimen salausta VAROITUS: allekirjoitustiiviste ei täsmää viestin kanssa VAROITUS: tämä avain saattaa olla mitätöity (mitätöintiavainta ei saatavilla) VAROITUS: %%-laajennus ei onnistu (liian suuri). Käytetään laajentamatonta. VAROITUS: väliaikaishakemistoa "%s" ei voi poistaa: %s VAROITUS: tilapäistiedostoa (%s) "%s" ei voi poistaa: %s VAROITUS: käytetään suojaamatonta muistia! VAROITUS: käytetty satunnaislukugeneraattori ei ole turvallinen. Tarvitaan paljon satunnaislukuja. Voit suorittaa muita toimintoja (kirjoittaa näppäimistöllä, liikuttaa hiirtä, käyttää levyjä) alkulukujen luomisen aikana, tämä antaa satunnaislukugeneraattorille paremmat mahdollisuudet kerätä riittävästi entropiaa. Allekirjoittaessasi avaimen käyttäjätunnuksen sinun tulisi varmista, että avain todella kuuluu henkilölle, joka mainitaan käyttäjätunnuksessa. Muiden on hyvä tietää kuinka huolellisesti olet varmistanut tämän. "0" tarkoittaa, että et väitä mitään siitä, kuinka huolellisesti olet varmistanut avaimen. "1" tarkoittaa, että uskot avaimen kuuluvan henkilölle, joka väittää hallitsevan sitä, mutta et voinut varmistaa tai et varmistanut avainta lainkaan. Tämä on hyödyllinen "persoonan" varmistamiseen, jossa allekirjoitat pseudonyymin käyttäjän avaimen. "2" tarkoittaa arkista varmistusta. Esimerkiksi olet varmistanut avaimen sormenjäljen ja tarkistanut käyttäjätunnuksen ja valokuvatunnisteen täsmäävän. "3" tarkoittaa syvällistä henkilöllisyyden varmistamista. Esimerkiksi tämä voi tarkoittaa avaimen sormenjäljen tarkistamista avaimen haltijan kanssa henkilökohtaisesti, ja että tarkistit nimen avaimessa täsmäävän vaikeasti väärennettävän kuvallisen henkilöllisyystodistuksen (kuten passi) kanssa, ja lopuksi varmistit (sähköpostin vaihtamisella), että sähköpostiosoite kuuluu avaimen haltijalle. Huomaa, että yllä annetut esimerkit tasoille 2 ja 3 ovat todellakin *vain* esimerkkejä. Lopullisesti se on sinun päätöksesi mitä "arkinen" ja "syvällinen" tarkoittaa allekirjoittaessasi muita avaimia. Jos et tiedä mikä olisi sopiva vastaus, vastaa "0".Olet mitätöimässä seuraavat allekirjoitukset: Käytät merkistöä "%s". Et voi muuttaa v3-avainten vanhentumispäivää Et voi poistaa viimeistä käyttäjätunnusta! Et määritellyt käyttäjätunnusta. (voit käyttää valitsinta "-r") Et halua salasanaa - tämä on todennäköisesti *huono* ajatus! Et halunnut salasanaa - tämä on luultavasti *huono* ajatus! Jatketaan silti. Voit vaihtaa salasanaa milloin tahansa tämän ohjelman valitsimella "--edit-key". Et voi lisätä määrättyä mitätöijää PGP 2.x -muodon avaimeen. Et voi lisätä valokuvaa PGP2-muodon avaimeen. Et voi luoda OpenPGP-allekirjoitusta PGP 2.x -avaimella --pgp2-tilassa. Sinun täytyy valita ainakin yksi avain. Sinun täytyy valita ainakin yksi käyttäjätunnus. Tarvitset salasanan suojaamaan salaista avaintasi. Valitsit seuraavan käyttäjätunnuksen: "%s" Sinun tulisi määrittää syy varmenteelle. Riippuen asiayhteydestä voit valita tästä listasta: "Avain on paljastunut" Käytä tätä, jos sinulla on syytä uskoa, että luvattomat henkilöt ovat saaneet salaisen avaimesi käsiinsä. "Avain on korvattu" Käytä tätä, jos olet korvannut tämän uudemmalla avaimella. "Avain ei ole enää käytössä" Käytä tätä, jost ole lopettanut tämän avaimen käytön. "Käyttäjätunnus ei ole enää voimassa" Käytä tätä ilmoittamaan, että käyttäjätunnusta ei pitäisi käyttää; tätä normaalisti käytetään merkitsemään sähköpostiosoite vanhenneeksi. Nykyinen allekirjoituksesi kohteessa "%s" on vanhentunut. Nykyinen allekirjoituksesi kohteessa "%s" on paikallinen allekirjoitus. Valintasi? Valintasi? Järjestelmäsi ei osaa näyttää päiväyksiä kuin vuoteen 2038. Se kuitenkin käsittelee päiväykset oikein vuoteen 2106. [tiedostonimi][mitätöinti][oma-allekirjoitus][ei tiedossa]"%s" on jo pakattu "%s" on erikoistiedosto - ohitettiin "%s" ei kelpaa pitkänä avaintunnuksena lisää valokuvalisää mitätöintiavainlisää käyttäjätunnusascii-koodausotsake: ascii-koodaus: %s oletettavasti %s-salattua dataa data kohteessa "%s" oletetaan allekirjoitetuksi MPI ei kelpaaURI ei kelpaavirheellinen varmenneavain ei kelpaaväärä salasanajulkinen avain ei kelpaasalainen avain ei kelpaaallekirjoitus ei täsmääole jonkinverran hiljaisempibinääribuild_packet epäonnistui: %s tiedostoa "%s" ei voi sulkea: %s yhteys kohteeseen "%s" ei onnistu: %s tiedostoa "%s" ei voi luoda: %s hakemiston "%s" luominen ei onnistu: %s core-tiedostojen luontia ei voi estää: %s alkulukua, jossa on alle %d bittiä, ei voi luoda julkisen avaimen algorimin %d käsittely ei onnistu yli %d merkkiä pitkiä tekstirivejä ei voi käsitellä tiedostoa "%s" ei voi avata tiedostoa "%s" ei voi avata: %s allekirjoitetun datan "%s" avaaminen ei onnistu avainrenkaan avaaminen ei onnistutiedostoa "%s" ei voi lukea: %s tiedoston "%s" tilaa ei voi lukea: %s symmetristä ESK-pakettia ei voi käyttää S2K-tilan vuoksi tiedostoon "%s" ei voi kirjoittaa: %s käyttäjän peruma PGP 2.x -avainta ei voi nimetä määrätyksi mitätöijäksi heikon avaimen luomista symmetriselle salaimelle ei voitu välttää; yritettiin %d kertaa! muuta luottamusastettamuuta salasanaaluodun allekirjoituksen tarkistus epäonnistui: %s tarkistetaan trustdb:tä tarkistussumma ei täsmääsalausalgoritmi %d%s on tuntematon tai poistettu käytöstä completes-needed täytyy olla suurempi kuin 0 ristiriitainen komento tuota ascii-koodattu tulostedataa ei ole tallennettu, käytä valitsinta "--output" tallentaaksesi ascii-koodauksen purku epäonnistui: %s avaa tiedot (oletus)avaus epäonnistui: %s avaus onnistui avainlohkojen poisto epäonnistui: %s älä tee muutoksiaascii-koodaaminen epäonnistui: %s salaa tiedotsalattu %lu salasanalla salattu yhdellä salasanalla salattu tuntemattomalla algoritmilla %d viestin salaaaminen --pgp2-tilassa vaatii IDEA-salaimen salaa vain symmetrisellä salaimellavirhe luotaessa "%s": %s virhe luotaessa avainrengasta "%s": %s virhe luotaessa salasanaa: %s virhe trailer-rivissä virhe luettaessa tiedostoa "%s": %s virhe luettaessa avainlohkoa: %s virhe kirjoitettaessa avainrenkaaseen "%s": %s virhe kirjoitettaessa julkiseen avainrenkaaseen "%s": %s virhe kirjoitettaessa salaiseen avainrenkaaseen "%s": %s vie avaimiavie avaimia palvelimelleulkoisen ohjelman kutsuminen poistettu käytöstä johtuen turvattomista asetustiedoston oikeuksista TrustDB:n alustaminen ei onnistu: %s avainrenkaan välimuistin uudelleenluominen epäonnistui: %s virhe tiedostoa suljettaessavirhe tiedostoa luotaessavirhe tiedostoa poistettaessatiedosto on olemassavirhe tiedostoa avattaessavirhe tiedostoa luettaessavirhe nimettäessä tiedostoa uudelleenvirhe tiedostoon kirjoitettaessavalittu symmetrinen salain %s (%d) ei ole vastaanottajan suosima yleinen virheluo uusi avainpariluo mitätöintivarmenneluodaan paheksuttava 16-bittinen tarkistussumma salaisen avaimen suojaksi gpg-agent ei ole käytettävissä tässä istunnossa gpg-agent-protokollaversio %d ei ole tuettu iImMlLoOnouda avaimia avainpalvelimeltanouda/liitä avaimiasyöterivi %u on liian pitkä tai rivinvaihto puutuu syöterivi on yli %d merkkiä pitkä virheellinen S2K-tila; täytyy olla 0, 1 tai 3 virheellinen argumenttivirheellinen ascii-koodausepäkelpo ascii-koodausotsake: epäkelpo ascii-koodaus: yli %d merkkiä pitkä rivi epäkelpo selkotekstisen allekirjoituksen otsikko epäkelpo viiva rivin lopussa: virheelliset oletusarvoiset valinnat default-cert-level ei kelpaa; täytyy olla 0, 1, 2 tai 3 virheelliset vientivalitsimet virheellinen tiivistealgoritmi "%s" virheelliset tuontivalitsimet virheellinen avainrengasmin-cert-level ei kelpaa; täytyy olla 1, 2 tai 3 virheellinen pakettiväärä salasanavirheelliset henkilökohtaisen salaimen valinnat virheelliset henkilökohtaiset pakkausvalinnat virheelliset henkilökohtaiset tiivisteen valinnat epäkelpo juuripaketti havaittu proc_tree():ssä arvo ei kelpaa avaimen vienti epäonnistui: %s avain on luotu %lu sekunti tulevaisuudessa (on tapahtunut aikahyppy tai kellon kanssa on ongelmia) avain on luotu %lu sekuntia tulevaisuudessa (on tapahtunut aikahyppy tai kellon kanssa on ongelmia) avainta ei ole merkitty turvattomaksi - sitä ei voida käyttää jäljitellyn satunnaislukugeneraattorin kanssa! avainrengas "%s" luotu avainpalvelinvirheavainpalvelimelta vastaanotto epäonnistui: %s avainpalvelimen päivitys epäonnistui: %s avainpalvelimelta etsiminen epäonnistui: %s avainpalvelimelle lähettäminen epäonnistui: %s avaimen koko on virheellinen, käytetään %u bittiä avaimen koko on pyöristetty %u bittiin näytä avaimet ja käyttäjätunnuksetnäytä avaimetnäytä avaimet sormenjälkineennäytä avaimet allekirjoituksineennäytä valinnat (asiantuntija)näytä valinnat (monisanaisesti)näytä salaiset avaimettee erillinen allekirjoituskäsittele aikaleimakonfliktit pelkkinä varoituksinamake_keysig_packet epäonnistui: %s väärinmuotoiltu CRC GPG_AGENT_INFO-ympäristömuuttuja on väärin muotoiltu väärin muotoiltu käyttäjätunnusmarginals-needed täytyy olla suurempi kuin 1 siirretään avaimen allekirjoitus oikealle paikalle eEsisäkkäisiä tekstimuotoisia allekirjoituksia verkkovirheei koskaanuusi asetustiedosto "%s" luotu seuraava trustdb tarkistus %s eiei vastaavaa julkista avainta: %s salaiselle avainrenkaalle ei ole asetettu oletusarvoa: %s entropian keräysmoduulia ei havaittu trustdb:n tarkistusta ei tarvita etäohjelman suorittamista ei tueta salainen avain ei ole saatavilla ei allekirjoitettua dataa käyttäjätunnusta ei löydyehdottomasti luotettavia avaimia ei löytynyt kelvollista OpenPGP-dataa ei löytynyt. ei kelvollisia vastaanottajia kirjoitettavissa olevaa avainrengasta ei löydy: %s kirjoitettavissa olevaa julkista avainrengasta ei löydy: %s kirjoitettavissa olevaa salaista avainrengasta ei löydy: %s allekirjoitus ei ole erillinen salaamatonei käsiteltyei tuettuhuom: random_seed-tiedosto on tyhjä huom: random_seed-tiedostoa ei päivitetty ok, nimetön vastaanottaja olet sinä. vanhaa DEK-koodaus ei tueta vanhan tyylin (PGP 2.x) allekirjoitus toiminto on mahdollinen vain, jos suojattu muisti alustetaan asetustiedosto "%s": %s alkuperäisen tiedoston nimi="%.*s" luottamustiedot pyyhitty salasanaa ei toistettu oikein, yritä uudestaan.tee --check-trustdb, kiitos anna vapaaehtoinen, mutta erittäin suositeltava sähköpostiosoitelisätietoja osoitteesta http://www.gnupg.org/documentation/faqs.html käytä valitsinta "%s%s" sen sijaan ennenaikainen tiedoston loppu (CRC:ssä) ennenaikainen tiedoston loppu (ei CRC:tä) ongelma käsiteltäessä salattua pakettia agentin käytössä on ongelmia - agenttia ei käytetä kysy ennen ylikirjoittamistasuojausalgoritmi %d%s ei ole käytettävissä julkinen ja salainen avain on luotu ja allekirjoitettu. julkisen avaimen avaus epäonnistui: %s julkinen avain ei täsmää salaiseen avaimeen! julkisella avaimella salattu data: DEK kelpaa julkista avainta ei löydylLsSlopeta|suljeulos tästä valikostaquoted printable -koodattu merkki ascii-koodauksessa - luultavasti viallista MTA:ta on käytetty luetaan kohteesta "%s" luetaan asetukset tiedostosta "%s" luetaan vakiosyötettä ... mitätöinnin syy: poista avaimet julkisten avainten renkaastapoista avaimet salaisten avainten renkaastaresurssirajamitätöintikommentti: pyöristetty %u bittiin tallenna ja lopetaetsi avaimia avainpalvelimeltasalaista avainta ei löydysalaisen avaimen osat eivät ole käytettävissä valitse käyttäjätunnus Nvalittu varmenteen tiivistealgoritmi ei kelpaa valittu salausalgoritmi ei kelpaa valittu tiivistealgoritmi ei kelpaa näytä tämä ohjeallekirjoita avainallekirjoita avain paikallisestiallekirjoita tai muokkaa avaintaallekirjoituksen varmistus vaiennetaan allekirjoitus epäonnistui: %s allekirjoitetaan:ohitettu: julkinen avain on jo asetettu ohitettu: julkinen avain on jo asetettu oletusvastaanottajaksi ohitetaan: salainen avain on jo paikalla ohitetaan tyypin %d lohko itsenäinen mitätöinti - käytä "gpg --import" ottaaksesi käyttöön itsenäinen allekirjoitus luokkaa 0x%02x tyypin %d alipaketilla on kriittinen bitti asetettuna järjestelmävirhe kutsuttaessa ulkoista ohjelmaa: %s ota avaimet tästä avainrenkaastatekstiannettu varmennekäytännön URL on virheellinen annettu allekirjoituskäytännön URL on virheellinen allekirjoitusta ei voi varmistaa. Muista, että allekirjoitustiedosto (.sig tai .asc) tulee antaa komentorivillä ensimmäisenä. julkiselle avaimelle "%s" löytyy vastaava salainen avain! tämän voi aiheuttaa puuttuva oma-allekirjoitus %s ei kenties voi käsitellä tätä viestiä aikaleima ei täsmääpk-välimuistissa on liian monta kohdetta - poistettu käytöstä luottamustietokantavirheluottamustietue %lu ei ole pyydettyä tyyppiä %d luottamustietue %lu, pyyntötyyppi %d: luku epäonnistui: %s luottamustietue %lu, tyyppi %d: kirjoittaminen epäonnistui: %s trustdb rec %lu: lseek epäonnistui: %s trustdb rec %lu: kirjoittaminen epäonnistuin (n=%d): %s trustdb-tapahtuma on liian suuri trustdb: lseek epäonnistui: %s trustdb: luku epäonnistui (n=%d): %s trustdb: synkronointi epäonnistui: %s valokuvatunnistetta ei voi näyttää! ulkoista ohjelmaa ei voi suorittaa ulkoisen ohjelman vastausta ei voi lukea: %s exec-polkua kohteeseen %s ei voi asettaa kaikille salattaville avaimille ei voi käyttää IDEA-salainta. odottamatonta dataasalausalgoritmi ei ole käytössäjulkisen avaimen algoritmi ei ole käytössätuntematon tuntematon salausalgoritmituntematon pakkausalgoritmituntematon tiivistealgoritmituntematon pakettityyppituntematon suojausalgoritmi tuntematon julkisen avaimen algoritmituntematon allekirjoitusluokkatuntematon versioulkoisen ohjelman luonnoton päättyminen URI-muotoa ei tuetakäyttökelvoton julkisen avaimen algoritmijulkista avainta ei voi käyttääsalaista avainta ei voi käyttääpäivitä kaikki avaimet avainpalvelimeltapäivitys epäonnistui: %s salaisen päivitys epäonnistui: %s päivitä luottamustietokantakäyttö: gpg [valitsimet] käytä tulostustiedostonakäytä tekstimuotoakäytä valitsinta "--delete-secret-keys" poistaaksesi se ensin. käytä tätä käyttäjätunnusta allekirjoittamiseen ja avaamiseenkäyttäjätunnus "%s" on jo mitätöity käytetään salakirjoitusalgoritmia %s monisanainentarkista allekirjoitusheikko avainluotu avain on heikko - yritän uudestaan outo koko salatulle istuntoavaimelle (%d) kirjoitetaan suora allekirjoitus kirjoitetaan avaimen varmentava allekirjoitus kirjoitan julkisen avaimen kohteeseen "%s" kirjoitan salaisen avaimen kohteeseen "%s" kirjoitetaan oma-allekirjoitus kirjoitetaan kohteeseen "%s" kirjoitetaan vakiotulosteeseen käytetty salainen avain on vääräkKkyllä|kylla|jooPGP 2.x -muodon avaimilla voi allekirjoittaa tekstimuotoon vain --pgp2-tilassa voit tehdä erillisiä allekirjoituksia PGP 2.x -muodon avaimilla vain --pgp2-tilassa --pgp2-tilassa voidaan salata korkeintaan 2048-bittisillä RSA-avaimilla erillisen allekirjoituksen voi luoda vain --pgp2-tilassa --pgp2-tilassa ei voi allekirjoittaa ja salata samanaikaisesti et voi nimittää avainta sen omaksi määrätyksi mitätöijäksi olet löytänyt ohjelmistovian ... (%s:%d) valitsinta %s ei voi käyttää %s-tilassa sinun tulee käyttää tiedostoja (eikä putkitusta) kun --pgp2 on käytössä. |FD|tilatiedot kirjoitetaan FD:iin|NIMI|salaa vastaanottajalle NIMI|N|aseta pakkausaste N (0 poistaa käytöstä)|[tiedosto]|tee selkokielinen allekirjoitus|[tiedosto]|tee allekirjoitus|algo [tiedostot]|tulosta viestien tiivisteetgnupg-1.4.20/po/zh_CN.po0000644000175000017500000053736312635457220011645 00000000000000# Simplified Chinese(zh-CN) messages for GnuPG # Copyright (C) 2006, 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the GnuPG package. # Meng Jie , 2004-2007. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.7\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:18+0200\n" "Last-Translator: Meng Jie \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: Chinese\n" "X-Poedit-Country: CHINA\n" "X-Poedit-SourceCharset: iso-8859-1\n" "X-Poedit-Basepath: c:\\msys\\source\\gnupg-1.4.7\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "当 pbits=%u 而 qbits=%u 时不能生成质数\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "少于 %d 位时不能生成质数\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "检测不到熵搜集模块\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "无法锁定‘%s’:%s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "等待‘%s’上的锁\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "无法打开‘%s’: %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "无法获得文件‘%s’的信息: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "‘%s’不是一个普通文件――已忽略\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "注意:随机数种子文件为空\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "警告:随机数种子文件大小无效――未使用\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "无法读取‘%s’:%s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "注意:随机数种子文件未被更新\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "无法建立‘%s’:%s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "无法写入‘%s’:%s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "无法关闭‘%s’:%s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "警告:正在使用不安全的随机数发生器!!\n" #: cipher/random.c:894 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/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "请稍待片刻,系统此时正在搜集熵。如果您觉得无聊的话,不妨做些\n" "别的事——事实上这甚至能够让熵数的品质更好。\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵!\n" "(还需要%d字节)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "无法存储指纹:%s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "无法存储创建日期:%s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "无法读出公钥:%s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "响应未包含公钥数据\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "响应未包含 RSA 余数\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "响应未包含 RSA 公钥指数\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||请输入 PIN%%0A[完成的签字:%lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 #, fuzzy msgid "||Please enter the PIN" msgstr "||请输入 PIN%%0A[完成的签字:%lu]" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN 回调返回错误:%s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "CHV%d 的 PIN 太短;最小长度为 %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "验证 CHV%d 失败:%s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "从智能卡中获取 CHV 状态时出错\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "智能卡被永久锁定!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "尝试管理员 PIN %d 次后,智能卡将被永久锁定!\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, fuzzy, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "||请输入 PIN%%0A[完成的签字:%lu]" #: g10/app-openpgp.c:1674 #, fuzzy msgid "|A|Please enter the Admin PIN" msgstr "||请输入 PIN%%0A[完成的签字:%lu]" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "尚未配置管理员命令的权限\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "私钥部分不可用\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "请选择吊销的原因:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, fuzzy, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "CHV%d 的 PIN 太短;最小长度为 %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|新的管理员 PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "新的 PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "获取新 PIN 时出错:%s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "读取应用程序数据时出错\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "读取指纹 D0 出错\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "密钥已存在\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "现有的密钥将被替换\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "生成新密钥\n" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "生成新密钥\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "缺少创建时间戳\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSA 余数缺失或者不是 %d 位长\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "RSA 公钥指数缺失或长于 %d 位\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "RSA 质数 %s 缺失或者不是 %d 位长\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "无法存储密钥:%s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "请稍候,正在生成密钥……\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "生成密钥失败\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "密钥已生成(耗时 %d 秒)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "无效的 OpenPGP 卡结构(D0 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "智能卡不支持散列算法 %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "目前已创建的签名:%lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "目前禁止通过此命令验证管理员 PIN\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "不能存取 %s――无效的 OpenPGP 卡?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "ASCII 封装:%s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "无效的 ASCII 封装头:" #: g10/armor.c:459 msgid "armor header: " msgstr "ASCII 封装头:" #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "无效的明文签名头\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "ASCII 封装头:" #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "多层明文签名\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "与预期不符的 ASCII 封装:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "以连字符开头的行格式错误:" #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "跳过无效的 64 进制字符 %02x\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "文件先于预期结束(没有 CRC 部分)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "文件先于预期结束(CRC 部分未结束)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "异常的 CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC 错误:%06lx - %06lx\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "文件先于预期结束(于结尾处)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "结尾行有问题\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "找不到有效的 OpenPGP 数据。\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "无效的 ASCII 封装:一行超过 %d 字符\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "封装里出现括上的可打印字符――可能是有缺陷的信件传输程序造成的\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP 卡不可用:%s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "检测到 OpenPGP 卡号 %s\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "在批处理模式中无法完成此操作\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "在 %s 模式中不允许使用这个指令。\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "您的选择? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[未设定]" #: g10/card-util.c:512 msgid "male" msgstr "男性" #: g10/card-util.c:513 msgid "female" msgstr "女性" #: g10/card-util.c:513 msgid "unspecified" msgstr "未定义" #: g10/card-util.c:540 msgid "not forced" msgstr "可选" #: g10/card-util.c:540 msgid "forced" msgstr "必须" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "错误:目前只允许使用 ASCII 字符。\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "错误:不能使用字符“<”。\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "错误:不允许出现两个空格。\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "智能卡持有人的姓:" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "智能卡持有人的名:" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "错误:合成的姓名太长(至多 %d 个字符)。\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "获取公钥的 URL:" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "错误:URL 太长(至多 %d 个字符)\n" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "建立钥匙环‘%s’时发生错误:%s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "读取‘%s’时出错:%s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "建立‘%s’时发生错误:%s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "登录数据(帐号名):" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "错误:登录数据太长(至多 %d 个字符)。\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "个人 DO 数据:" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "错误:个人 DO 太长(至多 %d 个字符)。\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "首选语言:" #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "错误:首选项字符串长度无效。\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "错误:首选项字符串里有无效字符。\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "性别(男性输入 M,女性输入 F,不指定输入空格):" #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "错误:无效的响应。\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA 指纹:" #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "错误:指纹格式无效。\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "针对密钥的操作无法实现:%s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "不是一个 OpenPGP 卡" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "取得当前密钥信息时出错:%s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "替换已有的密钥?(y/N)" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "您想要用多大的密钥尺寸?(%u)" #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "您想要用多大的密钥尺寸?(%u)" #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "您想要用多大的密钥尺寸?(%u)" #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "舍入到 %u 位\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s 密钥尺寸必须在 %u 与 %u 间\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "读取私钥区块“%s”时出错:%s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "是否为加密密钥创建智能卡外的备份?(Y/n)" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "私钥已存储在智能卡上\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "替换已有的密钥?(y/N)" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "请注意,PIN 在出厂时被设置为:\n" " PIN = ‘%s’ 管理员 PIN = ‘%s’\n" "您应当使用 --change-pin 命令来更改它们\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "请选择您要使用的密钥种类:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) 签名密钥\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) 加密密钥\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) 认证密钥\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "无效的选择。\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "请选择在哪里存储密钥:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "不支持的密钥保护算法\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "私钥部分不可用\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "私钥已存储在智能卡上\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "写入钥匙环‘%s’时出错: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "离开这个菜单" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "显示管理员命令" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "显示这份在线说明" #: g10/card-util.c:1687 msgid "list all available data" msgstr "列出所有可用数据" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "更改智能卡持有人的姓名" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "更改获取密钥的 URL" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "根据智能卡中指定的 URL 获取密钥" #: g10/card-util.c:1693 msgid "change the login name" msgstr "更改登录名" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "更改首选语言首选" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "更改智能卡持有人的性别" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "更改一个 CA 指纹" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "设定 PIN 签名是否必须" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "生成新的密钥" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "更改或解锁 PIN 的菜单" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "验证 PIN 并列出所有数据" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "仅供管理员使用的命令\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "允许使用管理员命令\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "不允许使用管理员命令\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "无效的指令(尝试“help”)\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "读卡器不可用\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "请插入智能卡并回车,或输入‘c’来取消:" #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "选择 OpenPGP 时失败:%s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "请取出当前的智能卡,并插入有下列序列号的智能卡:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "就绪后请回车,或输入‘c’取消" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "输入新的管理员 PIN:" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "输入新的 PIN:" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "输入管理员 PIN:" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "输入 PIN:" #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "再次输入此 PIN:" #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN 再次输入时与首次输入不符;请再试一次" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "无法打开‘%s’\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output 在这个命令中不起作用\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "密钥‘%s’找不到:%s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "读取密钥区块时发生错误:%s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(除非您用指纹指定密钥)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "在批处理模式中,没有“--yes”就无法这么做\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "要从钥匙环里删除这把密钥吗?(y/N)" #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "这是一把私钥!――真的要删除吗?(y/N)" #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "删除密钥区块时失败:%s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "信任度信息已被清除\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "公钥“%s”有对应的私钥!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "请先使用“--delete-secret-keys”选项来删除它。\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "生成密码的时候发生错误:%s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "在此 S2K 模式下无法使用对称的 ESK 包\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "使用对称加密算法 %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "‘%s’已被压缩\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "警告:‘%s’是一个空文件\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "在 --pgp2 模式中,您只能使用 2048 位及以下的 RSA 密钥加密\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "正在从‘%s’读取\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "您正要用来加密的所有密钥都不能使用 IDEA 算法。\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "警告:强行使用的 %s (%d)对称加密算法不在收件者的首选项中\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "警告:强行使用的 %s (%d)压缩算法不在收件者的首选项中\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "强行使用的 %s (%d)对称加密算法不在收件者的首选项中\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "您不该将 %s 用于 %s 模式中\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s 已经加密给:“%s”\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s 加密过的数据\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "以未知的算法 %d 加密\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "警告:报文被使用对称加密算法的弱密钥加密。\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "处理加密包有问题\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "不支持远程调用\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "无法建立目录‘%s’:%s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "由于配置文件权限不安全,外部程序调用被禁用\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "在这个操作平台上调用外部程序时需要临时文件\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "无法执行程序‘%s’:%s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "无法在命令解释环境中执行‘%s’:%s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "调用外部程序时发生系统错误:%s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "外部程序异常退出\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "无法执行外部程序\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "无法读取外部程序响应:%s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "警告:无法删除临时文件(%s)‘%s’:%s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "警告:无法删除临时目录‘%s’:%s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "导出被标记为局部的密名" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "导出属性用户标识(一般为照片标识)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "导出被标记为“敏感”的吊销密钥" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "从导出的子钥中删除所有密码" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "导出时清除密钥中的不可用部分" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "导出时尽可能清除密钥中的可选部分" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "不允许导出私钥\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "密钥 %s:未被保护――已跳过\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "密钥 %s:PGP 2.x 样式的密钥――已跳过\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "密钥 %s:密钥在智能卡上——已跳过\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "准备导出一把不受保护的子钥\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "无法取消保护子钥:%s\n" # I hope this warning doesn't confuse people. #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "警告:私钥 %s 不存在简单 SK 检验和\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "警告:没有导出任何东西\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@指令:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[文件名]|生成一份签名" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[文件名]|生成一份明文签名" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "生成一份分离的签名" #: g10/gpg.c:393 msgid "encrypt data" msgstr "加密数据" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "仅使用对称加密" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "解密数据(默认)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "验证签名" #: g10/gpg.c:401 msgid "list keys" msgstr "列出密钥" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "列出密钥和签名" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "列出并检查密钥签名" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "列出密钥和指纹" #: g10/gpg.c:406 msgid "list secret keys" msgstr "列出私钥" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "生成一副新的密钥对" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "从公钥钥匙环里删除密钥" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "从私钥钥匙环里删除密钥" #: g10/gpg.c:411 msgid "sign a key" msgstr "为某把密钥添加签名" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "为某把密钥添加本地签名" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "编辑某把密钥或为其添加签名" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "生成一份吊销证书" #: g10/gpg.c:416 msgid "export keys" msgstr "导出密钥" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "把密钥导出到某个公钥服务器上" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "从公钥服务器上导入密钥" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "在公钥服务器上搜寻密钥" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "从公钥服务器更新所有的本地密钥" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "导入/合并密钥" #: g10/gpg.c:429 msgid "print the card status" msgstr "打印智能卡状态" #: g10/gpg.c:430 msgid "change data on a card" msgstr "更改智能卡上的数据" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "更改智能卡的 PIN" #: g10/gpg.c:440 msgid "update the trust database" msgstr "更新信任度数据库" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|算法 [文件]|使用指定的散列算法打印报文散列值" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "选项:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "输出经 ASCII 封装" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|某甲|为收件者“某甲”加密" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "使用这个用户标识来签名或解密" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|设定压缩等级为 N (0 表示不压缩)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "使用标准的文本模式" #: g10/gpg.c:486 msgid "use as output file" msgstr "指定输出文件" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "详细模式" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "不做任何改变" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "覆盖前先询问" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "行为严格遵循 OpenPGP 定义" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "生成与 PGP 2.x 兼容的报文" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(请参考在线说明以获得所有命令和选项的完整清单)\n" #: g10/gpg.c:576 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 [文件名] 为 Bob 这个收件人签名及加密\n" " --clearsign [文件名] 做出明文签名\n" " --detach-sign [文件名] 做出分离式签名\n" " --list-keys [某甲] 显示密钥\n" " --fingerprint [某甲] 显示指纹\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "请向 报告程序缺陷。\n" "请向 反映简体中文翻译的问题。\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "用法: gpg [选项] [文件] (用 -h 求助)" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "支持的算法:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "公钥:" #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "对称加密:" #: g10/gpg.c:827 msgid "Hash: " msgstr "散列:" #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "压缩:" #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "用法:gpg [选项] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "冲突的指令\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "在‘%s’组定义里找不到等号(=)\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "警告:用户目录‘%s’所有权不安全\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "警告:配置文件‘%s’所有权不安全\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "警告:用户目录‘%s’权限不安全\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "警告:配置文件‘%s’权限不安全\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "警告:用户目录‘%s’的关闭目录所有权不安全\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "警告:配置文件‘%s’的关闭目录所有权不安全\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "警告:用户目录‘%s’的关闭目录权限不安全\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "警告:配置文件‘%s’的关闭目录权限不安全\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "未知的配置项‘%s’\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "列出密钥时显示用户标识" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "列出签名时显示策略 URL" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "列出签名时显示 IETF 标准注记" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "列出签名时显示 IETF 标准注记" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "列出签名时显示用户提供的注记" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "列出密钥时显示首选公钥服务器 URL" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "列出密钥时显示用户标识的有效性" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "列出密钥时显示已吊销或已过期的用户标识" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "列出密钥时显示已吊销或已过期的子钥" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "列出密钥时显示钥匙环的名称" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "列出签名时显示过期日期" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "注意:旧式的默认配置文件‘%s’已被忽略\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "注意:没有默认配置文件‘%s’\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "配置文件‘%s’:%s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "从‘%s’读取选项\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "注意:一般情况下不会用到 %s!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "‘%s’不是一个有效的签名过期日期\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "‘%s’不是一个有效的字符集\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "无法解析公钥服务器 URL\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d:无效的公钥服务器选项\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "无效的公钥服务器选项\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d:无效的导入选项\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "无效的导入选项\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d:无效的导出选项\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "无效的导出选项\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d:无效的列表选项\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "无效的列表选项\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "验证签名时显示照片标识" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "验证签名时显示策略 URL" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "验证签名时显示所有注记" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "验证签名时显示 IETF 标准注记" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "验证签名时显示用户提供的注记" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "验证签名时显示首选公钥服务器 URL" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "验证签名时显示用户标识的有效性" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "验证密钥时显示已吊销或已过期的子钥" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "在签名验证中只显示主用户标识" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "使用 PKA 数据验证签名的有效性" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "提升带有有效 PKA 数据的签名的信任度" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d:无效的校验选项\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "无效的校验选项\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "无法把运行路径设成 %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d:无效的 auto-key-locate 清单\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "无效的 auto-key-locate 清单\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "警告:程序可能会创建核心内存转储!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "警告:%s 会使得 %s 失效\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s 不可与 %s 并用\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s 与 %s 并用无意义!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "注意:%s 本版本中不可用\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "不会在内存不安全的情况下运行,原因是 %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "您只有在 --pgp2 模式下才能做分离式或明文签名\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "您在 --pgp2 模式下时,不能同时签名和加密\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "启用 --pgp2 时您应该只使用文件,而非管道\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "在 --pgp2 模式下加密报文需要 IDEA 算法\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "所选的对称加密算法无效\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "所选的散列算法无效\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "所选的压缩算法无效\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "所选的证书散列算法无效\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "需要的完全可信签名数一定要大于 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "需要的勉强可信签名数一定要大于 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "最大验证深度一定要介于 1 和 255 之间\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "无效的默认验证级别;一定要是 0,1,2 或 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "无效的最小验证级别;一定要是 1,2 或 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "注意:强烈不建议使用简单的 S2K 模式(0)\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "无效的 S2K 模式;必须是 0,1 或 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "无效的默认首选项\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "无效的个人对称加密算法首选项\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "无效的个人散列算法首选项\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "无效的个人压缩算法首选项\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s 尚不能和 %s 并用\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "您不能在 %s 模式下使用‘%s’对称加密算法\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "您不能在 %s 模式下使用‘%s’散列算法\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "您不能在 %s 模式下使用‘%s’压缩算法\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "初始化信任度数据库失败:%s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "警告:给定了收件人(-r)但并未使用公钥加密\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [文件名]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [文件名]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "对称加密‘%s’失败:%s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [文件名]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [文件名]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "使用 --symmetric --encrypt 时不能使用 --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "您不能在 %s 模式下使用 --symmetric -encrypt\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [文件名]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [文件名]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [文件名]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "使用 --symmetric --sign --encrypt 时不能使用 --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "您不能在 %s 模式下使用 --symmetric --sign -encrypt\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [文件名]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [文件名]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [文件名]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key 用户标识" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key 用户标识" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key 用户标识 [指令]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [用户标识] [钥匙环]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "上传至公钥服务器失败:%s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "从公钥服务器接收失败:%s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "导出密钥失败:%s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "搜寻公钥服务器失败:%s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "从公钥服务器更新失败:%s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "解开 ASCII 封装失败:%s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "进行 ASCII 封装失败:%s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "无效的‘%s’散列算法\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[文件名]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "请开始键入您的报文……\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "给定的的验证策略 URL 无效\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "给定的签名策略 URL 无效\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "给定的首选公钥服务器 URL 无效\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "pk 缓存里项目太多――已禁用\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[找不到用户标识]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "密钥 %s:无相应公钥的私钥――已跳过\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "自动获取‘%s’,通过 %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "--allow-non-selfsigned-uid 使无效密钥 %s 生效\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "公钥 %s 没有相对应的私钥――忽略\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "使用子钥 %s 而非主钥 %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "尽量减少提示信息" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "从这个钥匙环里取用密钥" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "把时间戳矛盾仅视为警告" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|把状态信息写入文件描述符 FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "用法:gpgv [选项] [文件] (用 -h 求助)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "语法:gpg [选项] [文件]\n" "用已知的受信任密钥来检查签名\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "在这里指定的数值完全由您自己决定;这些数值永远不会被输出给任何第三方。\n" "我们需要它来实现“信任网络”;这跟隐含建立起来的“验证网络”无关。" #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "要建立起信任网络,GnuPG 需要知道哪些密钥是可绝对信任的――通常\n" "就是您拥有私钥的那些密钥。回答“yes”将此密钥设成可绝对信任的\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "如果您无论如何要使用这把未被信任的密钥,请回答“yes”。" #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "输入您要递送的报文的接收者的用户标识。" #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "选择使用的算法。\n" "\n" "DSA (也叫 DSS)即“数字签名算法”(美国国家标准),只能够用作签名。\n" "\n" "Elgamal 是一种只能用作加密的算法。\n" "\n" "RSA 可以用作签名或加密。\n" "\n" "第一把密钥(主钥)必须具有签名的能力。" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "通常来说用同一把密钥签名及加密并不是个好主意。这个算法只在特定的情况\n" "下使用。请先咨询安全方面的专家。" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "请输入密钥的尺寸" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "请回答“yes”或“no”" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "请输入提示所要求的数值。\n" "您可以输入 ISO 日期格式(YYYY-MM-DD),但是出错时您不会得到友好的响应\n" "――系统会尝试将给定值解释为时间间隔。" #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "请输入密钥持有人的名字" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "请输入电子邮件地址(可选项,但强烈推荐使用)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "请输入注释(可选项)" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N 修改姓名。\n" "C 修改注释。\n" "E 修改电子邮件地址。\n" "O 继续产生密钥。\n" "Q 中止产生密钥。" #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "如果您允许生成子钥,请回答“yes”(或者“y”)。" #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "当您为某把密钥上某个用户标识添加签名时,您必须首先验证这把密钥确实属于\n" "署名于它的用户标识上的那个人。了解到您曾多么谨慎地对此进行过验证,对其\n" "他人是非常有用的\n" "\n" "“0” 表示您对您有多么仔细地验证这把密钥的问题不表态。\n" "\n" "“1” 表示您相信这把密钥属于那个声明是主人的人,但是您不能或根本没有验\n" " 证过。如果您为一把属于类似虚拟人物的密钥签名,这个选择很有用。\n" "\n" "“2” 表示您随意地验证了那把密钥。例如,您验证了这把密钥的指纹,或比对\n" " 照片验证了用户标识。\n" "\n" "“3” 表示您做了大量而详尽的验证密钥工作。例如,您同密钥持有人验证了密\n" " 钥指纹,而且通过查验附带照片而难以伪造的证件(如护照)确认了密钥持\n" " 有人的姓名与密钥上的用户标识一致,最后您还(通过电子邮件往来)验证\n" " 了密钥上的电子邮件地址确实属于密钥持有人。\n" "\n" "请注意上述关于验证级别 2 和 3 的说明仅是例子而已。最终还是由您自己决定\n" "当您为其他密钥签名时,什么是“随意”,而什么是“大量而详尽”。\n" "\n" "如果您不知道应该选什么答案的话,就选“0”。" #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "如果您想要为所有用户标识签名的话就选“yes”" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "如果您真的想要删除这个用户标识的话就回答“yes”。\n" "所有相关认证在此之后也会丢失!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "如果可以删除这把子钥,请回答“yes”" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "这是一份在这把密钥上有效的签名;通常您不会想要删除这份签名,\n" "因为要与这把密钥或拥有这把密钥的签名的密钥建立认证关系可能\n" "相当重要。" #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "这份签名无法被检验,因为您没有相应的密钥。您应该暂缓删除它,\n" "直到您知道此签名使用了哪一把密钥;因为用来签名的密钥可能与\n" "其他已经验证的密钥存在信任关系。" #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "这份签名无效。应当把它从您的钥匙环里删除。" #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "这是一份将密钥与用户标识相联系的签名。通常不应删除这样的签名。\n" "事实上,一旦删除,GnuPG可能从此就不能再使用这把密钥了。因此,\n" "只有在这把密钥的第一个自身签名因某些原因失效,而有第二个自身签\n" "字可用的情况下才这么做。" #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "用现有的首选项更新所有(或选定的)用户标识的首选项。所有受影响的自身签\n" "字的时间戳都会增加一秒钟。\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "请输入密码:这是一个秘密的句子 \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "请再次输入上次的密码,以确定您到底键入了些什么。" #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "请给定要添加签名的文件名" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "如果可以覆盖这个文件,请回答“yes”" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "请输入一个新的文件名。如果您直接按下了回车,那么就会使用显示在括\n" "号中的默认的文件名。" #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "您应该为这份吊销证书指定一个原因。根据情境的不同,您可以从下列清单中\n" "选出一项:\n" " “密钥已泄漏”\n" " 如果您相信有某个未经许可的人已取得了您的私钥,请选此项。\n" " “密钥已替换”\n" " 如果您已用一把新密钥代替旧的,请选此项。\n" " “密钥不再被使用”\n" " 如果您已决定让这把密钥退休,请选此项\n" " “用户标识不再有效”\n" " 如果这个用户标识不再被使用了,请选此项;这通常用表明某个电子邮\n" " 件地址已不再有效。\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "您也可以输入一串文字,描述发布这份吊销证书的理由。请尽量使这段文\n" "字简明扼要。\n" "键入一空行以结束输入。\n" #: g10/helptext.c:285 msgid "No help available" msgstr "没有可用的帮助" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "‘%s’没有可用的帮助" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "导入被标记为局部的签名" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "导入时修复 PKS 公钥服务器导致的损坏" #: g10/import.c:104 #, fuzzy #| msgid "do not update the trustdb after import" msgid "do not clear the ownertrust values during import" msgstr "导入后不更新信任度数据库" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "导入后不更新信任度数据库" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "导入私钥时创建对应的公钥" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "只接受对已有密钥的更新" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "导入后清除密钥中无用的部分" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "导入后尽可能清除密钥中的可选部分" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "跳过 %d 样式的区块\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "目前已处理 %lu 把密钥\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "合计被处理的数量:%lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " 已跳过的新密钥:%lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " 遗失用户标识:%lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " 已导入:%lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " 未改变:%lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " 新用户标识:%lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " 新的子钥:%lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " 新的签名:%lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " 新的密钥吊销:%lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " 读取的私钥:%lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " 导入的私钥:%lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " 未改变的私钥:%lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " 未被导入:%lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " 清除的签名:%lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " 清除的用户标识:%lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "警告:密钥 %s 在下列用户标识的首选项中包含\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " 不可用的算法:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " “%s”:对称加密算法 %s 对应首选项\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " “%s”:散列算法 %s 对应首选项\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " “%s”:压缩算法 %s 对应首选项\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "强烈建议您更新您的首选项并重新分发这把密钥,\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "以避免可能的算法不匹配问题\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "您可以这样更新您的首选项:gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "密钥 %s:没有用户标识\n" #: g10/import.c:819 #, fuzzy, c-format #| msgid "skipped \"%s\": %s\n" msgid "key %s: %s\n" msgstr "“%s”已跳过:%s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "密钥 %s:PKS 子钥破损已修复\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "密钥 %s:已接受不含自身签名的用户标识“%s”\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "密钥 %s:没有有效的用户标识\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "这可能由于遗失自身签名所致\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "密钥 %s:找不到公钥:%s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "密钥 %s:新密钥――已跳过\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "找不到可写的钥匙环:%s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "正在写入‘%s’\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "写入钥匙环‘%s’时出错: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "密钥 %s:公钥“%s”已导入\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "密钥 %s:与我们的副本不吻合\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "密钥 %s:无法定位原始的密钥区块:%s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "密钥 %s:无法读取原始的密钥区块: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "密钥 %s:“%s”一个新的用户标识\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "密钥 %s:“%s”%d 个新的用户标识\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "密钥 %s:“%s”1 个新的签名\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "密钥 %s:“%s”%d 个新的签名\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "密钥 %s:“%s”1 个新的子钥\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "密钥 %s:“%s”%d 个新的子钥\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "密钥 %s:“%s”%d 个签名被清除\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "密钥 %s:“%s”%d 个签名被清除\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "密钥 %s:“%s”%d 个用户标识被清除\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "密钥 %s:“%s”%d 个用户标识被清除\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "密钥 %s:“%s”未改变\n" #: g10/import.c:1211 #, fuzzy, c-format #| msgid "secret key \"%s\" not found: %s\n" msgid "secret key %s: %s\n" msgstr "找不到私钥“%s”:%s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "不允许导入私钥\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "密钥 %s:私钥使用了无效的加密算法 %d――已跳过\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "没有默认的私钥钥匙环: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "密钥 %s:私钥已导入\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "密钥 %s:已在私钥钥匙环中\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "密钥 %s:找不到私钥:%s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "密钥 %s:没有公钥――无法应用吊销证书\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "密钥 %s:无效的吊销证书:%s――已拒绝\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "密钥 %s:“%s”吊销证书已被导入\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "密钥 %s:签名没有用户标识\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "密钥 %s:用户标识“%s”使用了不支持的公钥算法\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "密钥 %s:用户标识“%s”自身签名无效\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "密钥 %s:不支持的公钥算法\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "密钥 %s:已新增直接密钥签名\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "密钥 %s:没有可供绑定的子钥\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "密钥 %s:无效的子钥绑定\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "密钥 %s:已删除多重子钥绑定\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "密钥 %s:没有用于密钥吊销的子钥\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "密钥 %s:无效的子钥吊销\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "密钥 %s:已删除多重子钥吊销\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "密钥 %s:已跳过用户标识“%s”\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "密钥 %s:已跳过子钥\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:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "密钥 %s:不可导出的签名(验证级别 0x%02X)――已跳过\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "密钥 %s:吊销证书位置错误――已跳过\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "密钥 %s:无效的吊销证书:%s――已跳过\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "密钥 %s:子钥签名位置错误――已跳过\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "密钥 %s:与预期不符的签名验证级别(0x%02X)――已跳过\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "密钥 %s:检测到重复的用户标识――已合并\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "警告:密钥 %s 可能已被吊销:正在取回吊销密钥 %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "警告:密钥 %s 可能已被吊销:吊销密钥 %s 不存在。\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "密钥 %s:已新增吊销证书“%s”\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "密钥 %s:已新增直接密钥签名\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "注意:密钥的序列号与智能卡的不符\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "注意:主钥在线,存储在智能卡上\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "注意:子钥在线,存储在智能卡上\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "建立钥匙环‘%s’时发生错误:%s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "钥匙环‘%s’已建立\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "密钥块资源‘%s’:%s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "重新建立钥匙环缓存失败: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[吊销]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[自身签名]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 个损坏的签名\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d 个损坏的签名\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "有 1 份签名因为遗失密钥而未被检查\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "有 %d 份签名因为遗失密钥而未被检查\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "有 1 份签名因为某个错误而未被检查\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "有 %d 份签名因为某些错误而未被检查\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "检测到 1 个没有有效自身签名的用户标识\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "检测到 %d 个没有有效自身签名的用户标识\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "您是否相信这位用户有能力验证其他用户密钥的有效性(查对身份证、通过不同的渠道检" "查\n" "指纹等)?\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = 我勉强相信\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = 我完全相信\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "请输入这份信任签名的深度。\n" "深度若大于 1 则您将签名的这把密钥将可以以您的名义做出信任签名。\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "请输入这份签名的限制域,如果没有请按回车。\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "用户标识“%s”已被吊销。" #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "您仍然想要为它签名吗?(y/N)" #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " 无法添加签名。\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "用户标识“%s”已过期。" #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "警告:用户标识“%s”不含自身签名。" #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "可以为用户标识“%s”添加签名。" #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "为其添加签名吗?(y/N)" #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "“%s”的自身签名是 PGP 2.x 样\n" "式的签名。\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "您是否想要将它升级成 OpenPGP 的自身签名?(y/N)" #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "您目前为“%s”的签名已经过期了。\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "您想要发布一份新的签名来取代已过期的那一个吗?(y/N)" #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "您目前为“%s”的签名是一份本地签名。\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "您是否想要把它升级成可以完全导出的签名?(y/N)" #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "“%s”已由密钥 %s 在本地签名\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "“%s”已由密钥 %s 签名\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "您仍然想要为它再次签名吗?(y/N)" #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "没有东西可以让密钥 %s 签名\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "这把密钥已经过期!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "这把密钥将在 %s 过期。\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "您想要让您的签名也同时过期吗? (Y/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "您不能在 --pgp2 模式下,用 PGP 2.x 密钥生成 OpenPGP 签名。\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "这会让这把密钥在 PGP 2.x 模式下不可使用。\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "您是否谨慎地检查过,确认正要签名的密钥的确属于以上它所声称的所有者呢?\n" "如果您不知道这个问题的答案,请输入“0”。\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) 我不作答。 %s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) 我根本没有检查过。 %s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) 我随意检查过。 %s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) 我非常小心地检查过。 %s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "您的选择?(输入‘?’以获得更多的信息):" #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "您真的确定要签名这把密钥,使用您的密钥\n" "“%s”(%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "这将是一个自身签名。\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "警告:这份签名不会被标记为不可导出。\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "警告:这份签名不会被标记成不可吊销。\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "这份签名会被标记成不可导出。\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "这份签名会被标记成不可吊销。\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "我根本没有检查过这把密钥。\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "我随意检查过这把密钥。\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "我非常小心地检查过这把密钥。\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "真的要签名吗?(y/N)" #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "签名时失败: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "只有占位密钥,或者密钥存储在智能卡上——没有密码可以更改。\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "这把密钥没有被保护。\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "主钥的私钥部分无法取用。\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "主钥的私钥部分存储在智能卡上。\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "密钥受保护。\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "无法编辑这把密钥: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "输入要给这把私钥用的新密码。\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "密码再次输入时与首次输入不符;请再试一次" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "您不想要用密码――这大概是个坏主意!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "您真的想要这么做吗?(y/N)" #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "正在把密钥的签名移动到正确的位置去\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "保存并离开" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "显示密钥指纹" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "列出密钥和用户标识" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "选择用户标识 N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "选择子钥 N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "检查签名" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "为所选用户标识添加签名[* 参见下面的相关命令]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "为所选用户标识添加本地签名" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "为所选用户标识添加信任签名" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "为所选用户标识添加不可吊销签名" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "增加一个用户标识" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "增加一个照片标识" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "删除选定的用户标识" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "添加一个子钥" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "在智能卡上添加一把密钥" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "将一把密钥移动到智能卡上" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "将备份密钥转移到智能卡上" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "删除选定的子钥" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "增加一把吊销密钥" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "删除所选用户标识上的签名" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "变更密钥或所选子钥的使用期限" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "将所选的用户标识设为首选用户标识" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "在私钥和公钥清单间切换" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "列出首选项(专家模式)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "列出首选项(详细模式)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "设定所选用户标识的首选项" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "设定所选用户标识的首选公钥服务器的 URL" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "为所选用户标识的设定注记" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "更改密码" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "更改信任度" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "吊销所选用户标识上的签名" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "吊销选定的用户标识" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "吊销密钥或选定的子钥" #: g10/keyedit.c:1439 msgid "enable key" msgstr "启用密钥" #: g10/keyedit.c:1440 msgid "disable key" msgstr "禁用密钥" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "显示选定的照片标识" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "压缩不可用的用户标识并删除不可用的签名" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "压缩不可用的用户标识并删除所有签名" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "读取私钥区块“%s”时出错:%s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "私钥可用。\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "要有私钥才能这么做。\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "请先使用“toggle”指令。\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* ‘sign’命令可以带‘l’前缀(lsign)以添加本地签名,或‘t’前缀(tsign)以添加\n" " 信任签名,或‘nr’前缀(nrsign)以添加不可吊销签名,或者以上三种前缀的任何组\n" " 合(ltsign、tnrsign 等)。\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "密钥已被吊销。" #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "真的为所有的用户标识签名吗?(y/N)" #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "提示:选择要添加签名的用户标识\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "未知的签名类型‘%s’\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "在 %s 模式中不允许使用这个指令。\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "您至少得选择一个用户标识。\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "您不能删除最后一个用户标识!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "真的要删除所有选定的用户标识吗?(y/N)" #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "真的要删除这个用户标识吗?(y/N)" #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "真的要删除主钥吗?(y/N)" #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "您必须指定一把密钥。\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "命令需要一个文件名作为参数\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "无法打开‘%s’:%s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "从‘%s’读取备份密钥时出错:%s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "您必须选择至少一把密钥。\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "您真的想要删除选定的密钥吗?(y/N)" #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "您真的要删除这把密钥吗?(y/N)" #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "真的要吊销所有选定的用户标识吗?(y/N)" #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "真的要吊销这个用户标识吗?(y/N)" #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "您真的要吊销整把密钥吗?(y/N)" #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "您真的要吊销选定的子钥吗?(y/N)" #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "您真的要吊销这把子钥吗?(y/N)" #: g10/keyedit.c:2098 #, fuzzy msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "使用用户提供的信任度数据库时信任度可能并未被设定\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "设为首选项列表为:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "真的要更新所选用户标识的首选项吗?(y/N)" #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "真的要更新首选项吗?(y/N)" #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "要保存变动吗?(y/N)" #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "要不保存而离开吗?(y/N)" #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "更新失败:%s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "更新私钥失败:%s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "密钥没有变动所以不需要更新。\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "散列:" #: g10/keyedit.c:2398 msgid "Features: " msgstr "特点:" #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "公钥服务器不可变造" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "首选公钥服务器:" #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "注记:" #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "PGP 2.x 样式的用户标识没有首选项。\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "此密钥已于 %s 被 %s 密钥 %s 所吊销\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "这把密钥可被 %s 密钥 %s 吊销" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr " (敏感的)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "创建于:%s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "已吊销:%s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "已过期:%s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "有效至:%s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "可用于:%s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "信任度:%s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "有效性:%s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "这把密钥已经被禁用" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "卡号:" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "请注意,在您重启程序之前,显示的密钥有效性未必正确,\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "已吊销" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "已过期" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "警告:没有首选用户标识。此指令可能假定一个不同的用户标识为首选用户标识。\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "您不能变更 v3 密钥的使用期限\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "警告:这是一把 PGP2 样式的密钥。\n" " 增加照片标识可能会导致某些版本的 PGP 不能识别这把密钥。\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "您确定仍然想要增加吗?(y/N)" #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "您不可以把照片标识增加到 PGP2 样式的密钥里。\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "删除这个完好的签名吗?(y/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "删除这个无效的签名吗?(y/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "删除这个未知的签名吗?(y/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "真的要删除这个自身签名吗?(y/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "已经删除了 %d 个签名。\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "已经删除了 %d 个签名。\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "没有东西被删除。\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "无效" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "用户标识“%s”无用部分被清除:%s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "用户标识“%s”:%d 个签名被清除\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "用户标识“%s”:%d 个签名被清除\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "用户标识“%s”:已经最小化\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "用户标识“%s”:无用部分已清除\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "警告:这是一把 PGP2 样式的密钥。\n" " 增加指定吊销者可能会导致某些版本的 PGP 无法识别这把密钥。\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "您不可以为 PGP 2.x 样式的密钥添加指定吊销者。\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "输入指定吊销者的用户标识:" #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "无法将 PGP 2.x 样式的密钥设为指定吊销者\n" # This actually causes no harm (after all, a key that # designates itself as a revoker is the same as a # regular key), but it's easy enough to check. #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "您不能将某把密钥设为它自己的指定吊销者\n" # This actually causes no harm (after all, a key that # designates itself as a revoker is the same as a # regular key), but it's easy enough to check. #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "这把密钥已被指定为一个吊销者\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "警告:将某把密钥指派为指定吊销者的操作无法撤销!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "您确定要将这把密钥设为指定吊销者吗?(y/N):" #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "请从私钥中删除选择。\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "请至多选择一个子钥。\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "将要变更子钥的使用期限。\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "将要变更主钥的使用期限。\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "您不能变更 v3 密钥的使用期限\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "在私钥环里没有相应的签名\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "签名的子钥 %s 已经交叉验证\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "子钥 %s 不签名,因此不需要交叉验证\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "请精确地选择一个用户标识。\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "跳过用户标识“%s”的 v3 自身签名\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "输入您首选的公钥服务器的 URL:" #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "您确定要替换它吗?(y/N)" #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "您确定要删除它吗?(y/N)" #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "输入注记:" #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "继续?(y/N)" #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "没有索引为 %d 的用户标识\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "没有散列值为 %s 的用户标识\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "没有索引为 %d 的子钥\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "用户标识:“%s”\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "由您的密钥 %s 于 %s%s%s 签名\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (不可导出)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "这份签名已在 %s 过期。\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "您确定您仍然想要吊销它吗?(y/N)" #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "要为这份签名生成一份吊销证书吗?(y/N)" #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "您已经为这些密钥 %s 上的这些用户标识添加签名:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (不可吊销)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "由您的密钥 %s 于 %s 吊销\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "您正在吊销这些签名:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "真的要生成吊销证书吗?(y/N)" #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "没有私钥\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "用户标识“%s”已经被吊销。\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "警告:有一份用户标识签名的日期标记为 %d 秒后的未来\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "密钥 %s 已被吊销。\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "子钥 %s 已被吊销。\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "正在显示 %s 照片标识(大小为 %ld,属于密钥 %s,用户标识 %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "首选项‘%s’重复\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "太多对称加密算法首选项\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "太多散列算法首选项\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "太多首选压缩算法\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "首选项字符串里有无效项‘%s’\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "正在写入直接签名\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "正在写入自身签名\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "正在写入密钥绑定签名\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "密钥尺寸无效:改用 %u 位\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "密钥尺寸舍入到 %u 位\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "签名" #: g10/keygen.c:1365 msgid "Certify" msgstr "验证" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "加密" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "认证" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsEeAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "%s 密钥可能的操作:" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "目前允许的操作:" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) 选择是否用于签名\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) 选择是否用于加密\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) 选择是否用于认证\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) 已完成\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "请选择您要使用的密钥种类:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA 和 ElGamal (默认)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA 和 ElGamal (默认)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (仅用于签名)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (仅用于签名)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (仅用于加密)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (仅用于加密)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (自定义用途)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (自定义用途)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s 密钥长度应在 %u 位与 %u 位之间。\n" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "您想要用多大的密钥尺寸?(%u)" #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "您想要用多大的密钥尺寸?(%u)" #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "您所要求的密钥尺寸是 %u 位\n" #: g10/keygen.c:1722 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "请设定这份签名的有效期限。\n" " 0 = 签名永不过期\n" " = 签名在 n 天后过期\n" " w = 签名在 n 周后过期\n" " m = 签名在 n 月后过期\n" " y = 签名在 n 年后过期\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "密钥的有效期限是?(0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "签名的有效期限是多久?(%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "无效的数值\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "密钥永远不会过期\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "签名永远不会过期\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "密钥于 %s 过期\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "签名于 %s 过期\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "您的系统无法显示 2038 年以后的日期。\n" "不过,它可以正确处理 2106 年之前的年份。\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "以上正确吗?(y/n)" #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组" "合\n" "成用户标识,如下所示:\n" " “Heinrich Heine (Der Dichter) ”\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "真实姓名:" #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "姓名含有无效的字符\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "姓名不可以用数字开头\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "姓名至少要有五个字符长\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "电子邮件地址:" #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "电子邮件地址无效\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "注释:" #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "注释含有无效的字符\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "您正在使用‘%s’字符集。\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "您选定了这个用户标识:\n" " “%s”\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "请不要把电子邮件地址放进您的真实姓名或注释里\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或退出(Q)?" #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?" #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "请先改正错误\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "您需要一个密码来保护您的私钥。\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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:2034 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" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "密钥生成已取消。\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "正在将公钥写至`%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "向‘%s’写入私钥占位符\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "正在将私钥写至`%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "找不到可写的公钥钥匙环:%s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "找不到可写的私钥钥匙环:%s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "写入公钥钥匙环‘%s’时发生错误: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "写入私钥钥匙环‘%s’时发生错误: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "公钥和私钥已经生成并经签名。\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "请注意这把密钥还不能用来加密,您必须先用“--edit-key”指令\n" "生成用于加密的子钥。\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "生成密钥失败:%s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "密钥是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "密钥是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "注意:为 v3 密钥生成子钥会失去 OpenPGP 兼容性\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "真的要建立吗?(y/N)" #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "向智能卡上存储密钥时失败:%s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "不能创建备份文件‘%s’:%s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "注意:智能卡密钥的备份已保存到‘%s’\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "永不过期" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "关键签名策略:" #: g10/keylist.c:267 msgid "Signature policy: " msgstr "签名策略:" #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "关键首选公钥服务器:" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "关键签名注记:" #: g10/keylist.c:361 msgid "Signature notation: " msgstr "签名注记:" #: g10/keylist.c:471 msgid "Keyring" msgstr "钥匙环" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "主钥指纹:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr "子钥指纹:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " 主钥指纹:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " 子钥指纹:" # use tty #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr "密钥指纹 =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "卡序列号 =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "将‘%s’重命名为‘%s’时失败:%s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "警告:两个文件存在有互相矛盾的信息。\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s 是没有改变的那一个\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s 是新的那一个\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "请修补这个可能的安全性漏洞\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "缓存钥匙环‘%s’\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "目前已缓存 %lu 把密钥(%lu 份签名)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "缓存了 %lu 把密钥(%lu 份签名)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s:钥匙环已建立\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "在搜索结果中包含已吊销的密钥" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "按钥匙号搜索时包含子钥" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "向公钥服务器辅助程序传递数据时使用临时文件" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "不删除使用过的临时文件" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "验证签名时自动下载密钥" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "使用密钥中指定的首选公钥服务器 URL" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "获取密钥时使用密钥上的 PKA 记录" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "警告:公钥服务器选项‘%s’在此平台上没有被使用\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "已禁用" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "输入数字以选择,输入 N 翻页,输入 Q 退出 >" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "无效的公钥服务器协议(us %d!=handler %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "在公钥服务器上找不到密钥“%s”\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "在公钥服务器上找不到密钥\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "下载密钥‘%s’,从 %s 服务器 %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "下载密钥 %s,从 %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "在 %s 服务器 %s 上搜索名字\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "在 %s 上搜索名字\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "将密钥‘%s’上传到 %s 服务器 %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "将密钥‘%s’上传到 %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "搜索“%s”,在 %s 服务器 %s 上\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "搜索“%s”,在 %s 上\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "公钥服务器无动作!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "警告:处理公钥服务器的程序来自不同版本的 GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "公钥服务器未发送 VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "公钥服务器通讯错误:%s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "未给出公钥服务器(使用 --keyserver 选项)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "这一编译版本不支持外部调用公钥服务器\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "没有处理‘%s’公钥服务器的程序\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "‘%s’操作不为‘%s’公钥服务器所支持\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s 不支持对版本 %d 的处理\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "公钥服务器超时\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "公钥服务器内部错误\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "“%s”不是一个用户标识:跳过\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "警告:无法更新密钥 %s,通过 %s:%s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "1 个密钥正从 %s 得到更新\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "%d 个密钥正从 %s 得到更新\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "警告:无法获取 URI %s:%s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "不能解析 URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "加密过的会话密钥尺寸(%d)诡异\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s 加密过的会话密钥\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "密码由未知的散列算法 %d 生成\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "公钥是 %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "公钥加密过的数据:完好的数据加密密钥\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "由 %u 位的 %s 密钥加密,钥匙号为 %s、生成于 %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " “%s”\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "由 %s 密钥加密、钥匙号为 %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "公钥解密失败:%s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "以 %lu 个密码加密\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "以 1 个密码加密\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "假定 %s 为加密过的数据\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "IDEA 算法不可用,试以 %s 代替\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "解密成功\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "警告:报文未受到完整的保护\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "警告:加密过的报文已经变造!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "解密失败:%s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "注意:发件者要求您“只阅读不存盘”\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "原始文件名 =‘%.*s’\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "警告:存在多个明文段\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "独立的吊销证书――请用“gpg --import”来应用\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "未找到签名\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "签名验证已被抑制\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "无法处理这些有歧义的签名\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "签名建立于 %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " 使用 %s 密钥 %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "于 %s 创建的签名,使用 %s,钥匙号 %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "可用的密钥在:" #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "已损坏的签名,来自于“%s”" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "过期的签名,来自于“%s”" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "完好的签名,来自于“%s”" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[不确定]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " 亦即“%s”" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "这份签名已于 %s 过期。\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "这份签名在 %s 过期。\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s 签名,散列算法 %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "二进制" #: g10/mainproc.c:1947 msgid "textmode" msgstr "文本模式" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "未知" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "无法检查签名:%s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "不是一份分离的签名\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "警告:检测到多重签名。只检查第一个签名。\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "等级 0x%02x 的独立签名\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "旧式(PGP 2.x)签名\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "在 proc_tree() 中检测到无效的根包\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "无法禁用核心内存转储:%s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "‘%s’的 fstat 在 %s 中出错:%s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) 在 %s 中出错:%s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "警告: 使用试验性质的公钥算法 %s\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "警告:不建议使用散列算法 %s\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "警告:使用试验性质的对称加密算法 %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "警告:使用试验性质的散列算法 %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "警告:不建议使用散列算法 %s\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "请参见 %s 以得到更多信息。\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "注意:%s 本版本中不可用\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d:不建议使用该选项“%s”\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "警告:“%s”选项已不建议使用\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "请以“%s%s”代替\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "警告:“%s”命令已不建议使用——不要使用它\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "不压缩" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "未压缩|无" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "%s 也许不能使用这个报文\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "有歧义的选项‘%s’\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "未知的选项 '%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "未知的签名类型‘%s’\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "文件‘%s’已存在。 " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "是否覆盖?(y/N)" #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s:未知的后缀名\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "请输入新的文件名" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "正在写入到标准输出\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "假定被签名的数据是‘%s’\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "新的配置文件‘%s’已建立\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "警告:在‘%s’里的选项于此次运行期间未被使用\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "已创建目录‘%s’\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "无法操作公钥算法 %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "警告:潜在不安全的对称加密会话密钥\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "%d 类别的子包设定了关键位\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent 在此次会话中无法使用\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "GPG_AGENT_INFO 环境变量格式错误\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "不支持 gpg-agent 协议版本 %d\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "无法连接至‘%s’:%s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "代理程序有问题――正在停用代理程序\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (主钥匙号 %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "您需要这个用户的密码来解开私钥:\n" "“%.*s”\n" "%u 位的 %s 密钥,钥匙号 %s,建立于 %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "请再输入一次密码\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "请输入密码\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "用户取消\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "在批处理模式中无法查询密码\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "请输入密码:" #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "您需要输入密码,才能解开这个用户的私钥:“%s”\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u 位的 %s 密钥,钥匙号 %s,建立于 %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (主钥 %s 的子钥)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "请再输入一次密码:" #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "请挑选一张图片作为您的照片标识 。这张图片一定要是JPEG文件。请记住这张图\n" "片会被存放在您的公钥里。如果您挑了非常大的图片的话,您的密钥也会变得非\n" "常大!请尽量把图片尺寸控制在240x288左右,这是个理想的尺寸。\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "输入要当作相片标识的JPEG文件名: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "无法打开 JPEG 文件‘%s’:%s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "这个 JPEG 文件太大了(%d 字节)!\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "您确定要用它吗?(y/N)" #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "“%s”不是一个 JPEG 文件\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "这张照片正确吗?(y/N/q)" #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "没有设置照片查看程序\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "无法显示照片标识!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "未指定原因" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "密钥被替换" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "密钥已泄漏" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "密钥不再使用" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "用户标识不再有效" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "吊销原因:" #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "吊销注释:" # a string with valid answers #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "下列项目没有指定信任度:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " 亦即“%s”\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "您是否相信这把密钥属于它所声称的持有者?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = 我不知道或我不作答\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = 我不相信\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = 我绝对相信\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = 回到主菜单\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = 跳过这把密钥\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = 退出\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "这把密钥的最小信任等级为:%s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "您的决定是什么?" #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "您真的要把这把密钥设成绝对信任?(y/N)" #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "被绝对信任的密钥的证书:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%s:没有证据表明这把密钥真的属于它所声称的持有者\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "%s:只有有限的证据表明这把密钥属于它所声称的持有者\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "这把密钥有可能属于它所声称的持有者\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "这把密钥是属于我们的\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自\n" "己在做什么,您可以在下一个问题回答 yes。\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "无论如何还是使用这把密钥吗?(y/N)" #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "警告:正在使用不被信任的密钥!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "警告:此密钥可能已被吊销(吊销密钥不存在)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "警告:这把密钥已经被它的指定吊销者吊销了!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "警告:这把密钥已经被它的持有者吊销了!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " 这表明这个签名有可能是伪造的。\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "警告:这把子钥已经被它的持有者吊销了!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "注意:这把密钥已经被禁用了。\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "注意:验证过的签名者的地址是‘%s’\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "注意:签名者的地址‘%s’不匹配任何 DNS 记录\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "PKA 信息有效,信任级别调整到“完全”\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "PKA 信息无效,信任级别调整到“从不”\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "注意:这把密钥已经过期了!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "警告:这把密钥未经受信任的签名认证!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " 没有证据表明这个签名属于它所声称的持有者。\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "警告:我们不信任这把密钥!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " 这个签名很有可能是伪造的。\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "警告:这把密钥未经有足够信任度的签名所认证。\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " 这份签名并不一定属于它所声称的持有者\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s:已跳过:%s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: 已跳过:公钥已存在\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "您没有指定用户标识。(您可以在命令行中用“-r”指定)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "当前收件人:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "输入用户标识。以空白行结束:" #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "没有这个用户标识。\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "已跳过:公钥已被设为默认收件者\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "公钥被禁用。\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "已跳过:公钥已被设定\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "未知的默认收件者“%s”\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s:已跳过:公钥已被禁用\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "没有有效的地址\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "数据未被保存;请用“--output”选项来保存它们\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "建立‘%s’时发生错误:%s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "分离的签名。\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "请输入数据文件的名称: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "正在从标准输入读取 ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "不含签名的数据\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "无法打开有签名的数据‘%s’\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "匿名收件者;正在尝试使用私钥 %s ……\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "很好,我们就是匿名收件者。\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "不支持旧式的 DEK 编码\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "对称加密算法 %d%s 未知或已停用\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "注意:收件人的首选项中找不到加密算法 %s\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "注意:私钥 %s 已于 %s 过期\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "注意:密钥已被吊销" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet 失败:%s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "密钥 %s:没有有效的用户标识\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "将被吊销,吊销者:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(这是一把敏感的吊销密钥)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "要为这把密钥建立一份指定吊销者证书吗?(y/N)" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "已强行使用 ASCII 封装过的输出。\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet 失败: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "已建立吊销证书。\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "没有找到“%s”的吊销密钥\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "找不到私钥“%s”:%s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "没有相对应的公钥:%s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "公钥与私钥不吻合!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "要为这把密钥建立一份吊销证书吗?(y/N)" #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "未知的保护算法\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "注意:这把密钥没有被保护!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "已建立吊销证书。\n" "\n" "请把这个文件转移到一个可隐藏起来的介质(如软盘)上;如果坏人能够取得这\n" "份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏\n" "到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万\n" "小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他\n" "人也能够看得到的地方!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "请选择吊销的原因:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "取消" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(也许您会想要在这里选择 %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "请输入描述(可选);以空白行结束:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "吊销原因:%s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(不给定描述)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "这样可以吗? (y/N)" #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "私钥部分不可用\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "保护算法 %d%s 未被支持\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "不支持保护散列 %d\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "无效的密码;请再试一次" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s……\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "警告:检测到弱密钥――请更换密码。\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "正在产生私钥保护使用的旧式 16 位校验和\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "建立了弱密钥――正在重试\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "对称加密无法避免生成弱密钥;已经尝试 %d 次!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA 需要散列值长度为 8 位的倍数\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA 密钥 %s 使用不安全的(%u 位)的散列\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA 密钥 %s 需要 %u 位或更长的散列\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "警告:签名散列值与报文不一致\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "警告:签名的子钥 %s 未经交叉验证\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "警告:签名的子钥 %s 交叉验证无效\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "公钥 %s 在其签名后 %lu 秒生成\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "公钥 %s 在其签名后 %lu 秒生成\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "注意:签名密钥 %s 已于 %s 过期\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s 签名,散列算法 %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "假定密钥 %s 的签名由于某个未知的关键位出错而损坏\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "密钥 %s:没有子钥吊销签名所需的子钥\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "密钥 %s:没有子钥绑定签名所需的子钥\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "警告:注记 %% 无法扩展(太大了)。现在使用未扩展的。\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "警告:无法 %%-扩展策略 URL (太大了)。现在使用未扩展的。\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "警告:无法 %%-扩展首选公钥服务器 URL (太大了)。现在使用未扩展的。\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "检查已建立的签名时发生错误: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s 签名来自:“%s”\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "您在 --pgp2 模式下只能够使用 PGP 2.x 样式的密钥来做分离签名\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "警告:强行使用的 %s (%d)散列算法不在收件者的首选项中\n" #: g10/sign.c:960 msgid "signing:" msgstr "正在签名:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "您在 --pgp2 模式下只能够使用 PGP 2.x 样式的密钥来做明文签名\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s 加密将被采用\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "密钥未被标示为不安全――不能与假的随机数发生器共同使用!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "“%s”已跳过:重复\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "“%s”已跳过:%s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "已跳过:私钥已存在\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "这是一把由 PGP 生成的 ElGamal 密钥,用于签名不安全!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "信任记录 %lu,类别 %d:写入失败:%s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# 已指定的信任度的清单,建立于 %s \n" "# (请用“gpg --import-ownertrust”导入这些信任度)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "‘%s’中出错:%s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "列太长" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "冒号缺失" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "指纹无效" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "没有信任度" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "在‘%s’中寻找信任度记录时出错:%s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "读取‘%s’错误:%s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "信任度数据库:同步失败:%s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "不能为‘%s’创建锁定\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "无法锁定‘%s’\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "信任度数据库记录 %lu:lseek 失败:%s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "信任度数据库记录 %lu:write 失败 (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "信任度数据库处理量过大\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "无法存取‘%s’:%s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s:目录不存在!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s:建立版本记录失败:%s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s:建立了无效的信任度数据库\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s:建立了信任度数据库\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "注意:信任度数据库不可写入\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s:无效的信任度数据库\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s:建立散列表失败:%s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s:更新版本记录时出错: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s:读取版本记录时出错: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s:写入版本记录时出错:%s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "信任度数据库:lseek 失败:%s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "信任度数据库:read 失败(n=%d):%s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s:不是一个信任度数据库文件\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s:记录编号为%lu的版本记录\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s:无效的文件版本%d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s:读取自由记录时出错:%s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s:写入目录记录时出错:%s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s:记录归零时失败:%s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s:附加记录时失败:%s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s:建立了信任度数据库\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "无法处理长于 %d 字符的文本行\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "输入行长度超过 %d 字符\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "‘%s’不是一个有效的长式钥匙号\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "密钥 %s:受信任,已接受\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "密钥 %s 在信任度数据库中重复出现\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "密钥 %s:受信任的密钥没有公钥――已跳过\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "密钥 %s 被标记为绝对信任\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "信任记录 %lu,请求类别 %d:读取失败:%s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "信任记录 %lu 不属于所请求的类别 %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "无法使用未知的信任模型(%d)――假定使用 %s 信任模型\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "使用 %s 信任模型\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10 translator see trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[已吊销]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[已过期]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ 未知 ]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[未定义]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[ 勉强 ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ 完全 ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ 绝对 ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "未定义" #: g10/trustdb.c:554 msgid "never" msgstr "从不" #: g10/trustdb.c:555 msgid "marginal" msgstr "勉强" #: g10/trustdb.c:556 msgid "full" msgstr "完全" #: g10/trustdb.c:557 msgid "ultimate" msgstr "绝对" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "不需要检查信任度数据库\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "下次信任度数据库检查将于 %s 进行\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "使用‘%s’信任模型时不需要检查信任度数据库\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "使用‘%s’信任模型时不需要更新信任度数据库\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "找不到公钥 %s:%s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "请执行一次 --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "正在检查信任度数据库\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "已经处理了 %d 把密钥(共计已解决了 %d 份的有效性)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "没有找到任何绝对信任的密钥\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "绝对信任的密钥 %s 的公钥未被找到\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "需要 %d 份勉强信任和 %d 份完全信任,%s 信任模型\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "深度:%d 有效性:%3d 已签名:%3d 信任度:%d-,%dq,%dn,%dm,%df,%du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "无法更新信任度数据库版本记录:写入失败:%s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "签名无法被验证。\n" "请记住签名文件(.sig或.asc)\n" "应该是在命令行中给定的第一个文件。\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "输入行 %u 太长或者行末的换行符 LF 遗失\n" #: util/errors.c:53 msgid "general error" msgstr "常规错误" #: util/errors.c:54 msgid "unknown packet type" msgstr "未知的包类型" #: util/errors.c:55 msgid "unknown version" msgstr "未知的版本" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "未知的公钥算法" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "未知的散列算法" #: util/errors.c:58 msgid "bad public key" msgstr "公钥已经损坏" #: util/errors.c:59 msgid "bad secret key" msgstr "私钥已经损坏" #: util/errors.c:60 msgid "bad signature" msgstr "签名已经损坏" #: util/errors.c:61 msgid "checksum error" msgstr "校验和错误" #: util/errors.c:62 msgid "bad passphrase" msgstr "错误的密码" #: util/errors.c:63 msgid "public key not found" msgstr "找不到公钥" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "未知的对称加密算法" #: util/errors.c:65 msgid "can't open the keyring" msgstr "无法打开钥匙环" #: util/errors.c:66 msgid "invalid packet" msgstr "无效包" #: util/errors.c:67 msgid "invalid armor" msgstr "无效的 ASCII 封装格式" #: util/errors.c:68 msgid "no such user id" msgstr "没有这个用户标识" #: util/errors.c:69 msgid "secret key not available" msgstr "私钥不可用" #: util/errors.c:70 msgid "wrong secret key used" msgstr "使用了错误的私钥" #: util/errors.c:71 msgid "not supported" msgstr "未被支持" #: util/errors.c:72 msgid "bad key" msgstr "密钥已损坏" #: util/errors.c:73 msgid "file read error" msgstr "文件读取错误" #: util/errors.c:74 msgid "file write error" msgstr "文件写入错误" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "未知的压缩算法" #: util/errors.c:76 msgid "file open error" msgstr "文件打开错误" #: util/errors.c:77 msgid "file create error" msgstr "文件建立错误" #: util/errors.c:78 msgid "invalid passphrase" msgstr "无效的密码" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "未实现的公钥算法" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "未实现的对称加密算法" #: util/errors.c:81 msgid "unknown signature class" msgstr "未知的签名等级" #: util/errors.c:82 msgid "trust database error" msgstr "信任度数据库错误" #: util/errors.c:83 msgid "bad MPI" msgstr "损坏的多精度整数(MPI)" #: util/errors.c:84 msgid "resource limit" msgstr "资源限制" #: util/errors.c:85 msgid "invalid keyring" msgstr "无效的钥匙环" #: util/errors.c:86 msgid "bad certificate" msgstr "证书已损坏" #: util/errors.c:87 msgid "malformed user id" msgstr "被变造过的用户标识" #: util/errors.c:88 msgid "file close error" msgstr "文件关闭错误" #: util/errors.c:89 msgid "file rename error" msgstr "文件重命名错误" #: util/errors.c:90 msgid "file delete error" msgstr "文件删除错误" #: util/errors.c:91 msgid "unexpected data" msgstr "非预期的数据" #: util/errors.c:92 msgid "timestamp conflict" msgstr "时间戳冲突" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "无法使用的公钥算法" #: util/errors.c:94 msgid "file exists" msgstr "文件已存在" #: util/errors.c:95 msgid "weak key" msgstr "弱密钥" #: util/errors.c:96 msgid "invalid argument" msgstr "无效的参数" #: util/errors.c:97 msgid "bad URI" msgstr "URI 已损坏" #: util/errors.c:98 msgid "unsupported URI" msgstr "未被支持的 URI" #: util/errors.c:99 msgid "network error" msgstr "网络错误" #: util/errors.c:101 msgid "not encrypted" msgstr "未被加密" #: util/errors.c:102 msgid "not processed" msgstr "未被处理" #: util/errors.c:104 msgid "unusable public key" msgstr "不可用的公钥" #: util/errors.c:105 msgid "unusable secret key" msgstr "不可用的私钥" #: util/errors.c:106 msgid "keyserver error" msgstr "公钥服务器错误" #: util/errors.c:107 msgid "canceled" msgstr "已取消" #: util/errors.c:108 msgid "no card" msgstr "没有智能卡" #: util/errors.c:109 msgid "no data" msgstr "无数据" #: util/logger.c:183 msgid "ERROR: " msgstr "错误:" #: util/logger.c:186 msgid "WARNING: " msgstr "警告:" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "……这是个程序缺陷(%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "您找到一个程序缺陷了……(%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "yes" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|ok" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancel|cancel" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "警告:正在使用不安全的内存!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "请访问 http://www.gnupg.org/documentation/faqs.html 以获得更详细的信息\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "安全内存未初始化,不能进行操作\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(您可能使用了错误的程序来完成此项任务)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "警告:扩展模块‘%s’所有权不安全\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "警告:扩展模块‘%s’权限不安全\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "警告:扩展模块‘%s’的关闭目录所有权不安全\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "警告:扩展模块‘%s’的关闭目录权限不安全\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "对称加算密法扩展模块‘%s’因为权限不安全而未被载入\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "IDEA 算法插件不存在\n" #~ msgid "Command> " #~ msgstr "命令> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA 密钥对会有 %u 位。\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "信任度数据库已损坏;请执行“gpg --fix-trustdb”。\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|管理员 PIN" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "无法在 v3 (PGP 2.x样式)的签名内放入注记数据\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "无法在 v3 (PGP 2.x样式)的密钥签名内放入注记数据\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "无法在 v3 (PGP 2.x样式)的签名内放入策略 URL\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "无法在 v3 (PGP 2.x样式)的密钥签名内放入策略 URL\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA 要求使用 160 位的散列算法\n" gnupg-1.4.20/po/id.po0000644000175000017500000060506712635457220011235 00000000000000# translation of gnupg-id.po to Indonesian # gnupg 1.2.4 (Indonesian) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. # Tedi Heriyanto , 1999, 2000, 2001, 2002, 2003, 2004. # msgid "" msgstr "" "Project-Id-Version: gnupg-id\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:24+0200\n" "Last-Translator: Tedi Heriyanto \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: KBabel 1.3\n" #: cipher/primegen.c:119 #, fuzzy, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "tidak dapat membuat bilangan prima dengan bit kurang dari %d\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "tidak dapat membuat bilangan prima dengan bit kurang dari %d\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "modul entropi gathering tidak terdeteksi\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "tidak dapat membuka `%s'\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "menulis kunci rahasia ke `%s'\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "tidak dapat membuka `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "tidak dapat melakukan statistik `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "'%s' bukan file reguler - diabaikan\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "catatan: file random_seed kosong\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "peringatan: ukuran file random_seed tidak valid - tidak dipakai\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "tidak dapat membaca `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "catatan: file random_seed tidak diupdate\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "tidak dapat membuat %s: %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "tidak dapat menulis `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "tidak dapat menutup `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "PERINGATAN: menggunakan random number generator yang tidak aman!!\n" #: cipher/random.c:894 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 "" "Random number generator yang digunakan tidak aman,\n" "ia bukanlah RNG yang kuat!\n" "\n" "JANGAN MENGGUNAKAN DATA YANG DIHASILKAN PROGRAM INI!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Silakan tunggu, entropi sedang dikumpulkan. Lakukan beberapa pekerjaan\n" "bila itu tidak akan membosankan anda, karena hal tersebut akan memperbaiki\n" "kualitas entropi.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Tidak tersedia cukup byte random. Silakan melakukan aktivitas lain agar\n" "memungkinkan SO mengumpulkan lebih banyak entropi! (Perlu %d byte lagi)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "gagal inisialisasi TrustDB: %s\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "gagal membuat kembali cache keyring: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "gagal menghapus keyblok: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "Pengiriman keyserver gagal: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "bagian kunci rahasia tidak tersedia\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Silakan pilih alasan untuk pembatalan:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "kesalahan penciptaan passphrase: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "gagal membaca keyblock: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: kesalahan membaca record bebas: %s\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "`%s' sudah dikompresi\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "buat sepasang kunci baru" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "buat sepasang kunci baru" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "gagal inisialisasi TrustDB: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "gagal menghapus keyblok: %s\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "Pembuatan kunci gagal: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "%s signature, algoritma digest %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "tidak ditemukan data OpenPGP yang valid.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "armor: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "header armor tidak valid: " #: g10/armor.c:459 msgid "armor header: " msgstr "header armor: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "header clearsig tidak valid\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "header armor: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "signature teks bersarang\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "armor tidak terduga:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "dash escaped line tidak valid: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "karakter radix64 tidak valid %02x dilewati\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "eof prematur (tanpa CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "eof prematur (dalam CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "CRC tidak tepat\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "kesalahan CRC; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "eof prematur (dalam Trailer)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "kesalahan dalam garis trailer\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "tidak ditemukan data OpenPGP yang valid.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "armor tidak valid: baris melebihi %d karakter\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "karakter yang dapat dicetak dalam armor - mungkin telah digunakan MTA yang " "mengandung bug\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "kunci rahasia tidak tersedia" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "tidak dapat melakukan hal itu dalam mode batch\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Perintah ini tidak dibolehkan saat dalam mode %s.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Pilihan anda? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr "Tidak ada alasan diberikan" #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "tidak diproses" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "tidak ada kunci publik yang sesuai: %s\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "kesalahan menulis keyring `%s': %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "kesalahan membaca `%s': %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "kesalahan penciptaan : `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "perbarui preferensi" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "Karakter tidak valid dalam string preferensi\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "Karakter tidak valid dalam string preferensi\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "kesalahan: fingerprint tidak valid\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "tampilkan fingerprint" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "kesalahan: fingerprint tidak valid\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "Pembuatan kunci gagal: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "tidak ditemukan data OpenPGP yang valid.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "kesalahan menulis keyring rahasia `%s': %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Keysize yang anda inginkan? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Keysize yang anda inginkan? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Keysize yang anda inginkan? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "dibulatkan hingga %u bit\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "kesalahan membaca keyblock rahasia `%s': %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "dilewati: kunci pribadi telah ada\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Silakan pilih kunci yang anda inginkan:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "Signature kadaluwarsa %s\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (hanya enkripsi)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Pilihan tidak valid.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Silakan pilih alasan untuk pembatalan:\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "algoritma proteksi tidak dikenal\n" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "Bagian rahasia kunci primer tidak tersedia.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "dilewati: kunci pribadi telah ada\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "kesalahan menulis keyring `%s': %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "berhenti dari menu ini" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "perintah saling konflik\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "tampilkan bantuan" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Kunci tersedia di:" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "ubah tanggal kadaluarsa" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "ubah ownertrust" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "tampilkan fingerprint" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "buat sepasang kunci baru" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "perintah saling konflik\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "perintah saling konflik\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "menulis kunci rahasia ke `%s'\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Perintah tidak valid (coba \"help\")\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "kunci rahasia tidak tersedia" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "gagal menghapus keyblok: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Ulangi passphrase: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "passphrase tidak diulang dengan benar; coba lagi" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "tidak dapat membuka `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output tidak berfungsi untuk perintah ini\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "kunci '%s' tidak ditemukan: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "gagal membaca keyblock: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(kecuali anda menspesifikasikan kunci dengan fingerprint)\n" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "tidak dapat dilakukan dalam mode batch tanpa \"--yes\"\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Menghapus kunci ini dari keyring? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "Ini adalah kunci rahasia! - Yakin dihapus? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "gagal menghapus keyblok: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "informasi ownertrust dihapus\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "terdapat kunci rahasia untuk kunci publik \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "gunakan pilihan \"--delete-secret-key\" untuk menghapusnya.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "kesalahan penciptaan passphrase: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "tidak dapat menggunakan paket simetri ESK karena mode S2K\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "menggunakan cipher %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' sudah dikompresi\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "PERINGATAN: `%s' adalah file kosong\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "anda hanya dapat mengenkripsi ke kunci RSA 2048 bit atau kurang dalam mode --" "pgp2\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "Membaca dari `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "" "tidak dapat menggunakan cipher IDEA untuk semua kunci yang anda enkripsi.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "memaksa cipher simetrik %s (%d) melanggar preferensi penerima\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "memaksa algoritma kompresi %s (%d) melanggar preferensi penerima\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "memaksa cipher simetrik %s (%d) melanggar preferensi penerima\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "anda tidak boleh menggunakan %s saat dalam mode %s.\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s dienkripsi untuk: %s\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s data terenkripsi\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "dienkripsi dengan algoritma tidak dikenal %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "PERINGATAN: pesan dienkripsi dengan kunci lemah dalam cipher simetrik.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "masalah menangani paket terenkripsi\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "tidak ada eksekusi program remote yang didukung\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "tidak dapat membuat direktori `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "pemanggilan program eksternal ditiadakan karena permisi opsi file tidak " "aman\n" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "" "platform ini membutuhkan file temp ketika memanggil program eksternal\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "tidak dapat mengeksekusi %s \"%s\": %s\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "tidak dapat mengeksekusi %s \"%s\": %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "kesalahan sistem ketika memanggil program eksternal: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "program eksternal berhenti secara tidak natual\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "tidak dapat mengeksekusi program eksternal\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "tidak dapat membaca tanggapan program eksternal: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "PERINGATAN: tidak dapat menghapus file temp (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "PERINGATAN: tidak dapat menghapus direktori temp `%s': %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "Signature akan ditandai sebagai tidak dapat dibatalkan.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr "tidak ditemukan kunci pembatalan untuk `%s'\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "batalkan kunci sekunder" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "kunci rahasia tidak dapat dipakai" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "menulis kunci rahasia ke `%s'\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "kunci %08lX: tidak diproteksi - dilewati\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "kunci %08lX: kunci gaya PGP 2.x - dilewati\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "kunci %08lX: signature subkey di tempat yang salah - dilewati\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "gagal inisialisasi TrustDB: %s\n" #: g10/export.c:563 #, fuzzy, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "" "PERINGATAN: kunci rahasia %08lX tidak memiliki sebuah checksum SK sederhana\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "PERINGATAN: tidak ada yang diekspor\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Perintah:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[file]|buat signature" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[file]|buat signature teks" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "buat detached signature" #: g10/gpg.c:393 msgid "encrypt data" msgstr "enkripsi data" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "enkripsi hanya dengan symmetric cipher" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "dekripsi data (default)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verifikasi signature" #: g10/gpg.c:401 msgid "list keys" msgstr "tampilkan kunci" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "tampilkan kunci dan signature" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "periksa signature kunci" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "tampilkan kunci dan fingerprint" #: g10/gpg.c:406 msgid "list secret keys" msgstr "tampilkan kunci rahasia" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "buat sepasang kunci baru" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "hapus kunci dari keyring publik" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "hapus kunci dari keyring pribadi" #: g10/gpg.c:411 msgid "sign a key" msgstr "tandai kunci" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "tandai kunci secara lokal" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "tandai atau edit kunci" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "buat sertifikat revokasi" #: g10/gpg.c:416 msgid "export keys" msgstr "ekspor kunci" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "ekspor kunci ke key server" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "impor kunci dari key server" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "cari kunci di key server" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "update semua kunci dari keyserver" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "impor/gabung kunci" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "perbarui database trust" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [file]|cetak digest pesan" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Pilihan:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "ciptakan output ascii" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAMA|enkripsi untuk NAMA" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "gunakan id-user ini untuk menandai/dekripsi" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|set tingkat kompresi N (0 tidak ada)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "gunakan mode teks kanonikal" #: g10/gpg.c:486 msgid "use as output file" msgstr "gunakan sebagai file output" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "detil" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "jangan buat perubahan" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "tanya sebelum menimpa" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Lihat man page untuk daftar lengkap semua perintah dan option)\n" #: g10/gpg.c:576 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" "Contoh:\n" "\n" " -se -r Bob [file] tandai dan enkripsi untuk user Bob\n" " --clearsign [file] buat signature berbentuk teks\n" " --detach-sign [file] buat signature detached\n" " --list-keys [nama] tampilkan kunci\n" " --fingerprint [nama] tampilkan fingerprint\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "Laporkan bug ke .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Pemakaian: gpg [pilihan] [file] (-h untuk bantuan)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Sintaks: gpg [pilihan] [file]\n" "tandai, cek, enkripsi atau dekripsi\n" "operasi baku tergantung pada data input\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritma yang didukung:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Pubkey: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Cipher: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Kompresi: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "pemakaian: gpg [pilihan] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "perintah saling konflik\n" #: g10/gpg.c:1078 #, fuzzy, c-format msgid "no = sign found in group definition `%s'\n" msgstr "tanda = tidak ditemukan dalam definisi grup \"%s\"\n" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "Peringatan: kepemilikan tidak aman pada %s \"%s\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "Peringatan: kepemilikan tidak aman pada %s \"%s\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "Peringatan: permisi tidak aman pada %s \"%s\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "Peringatan: permisi tidak aman pada %s \"%s\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "Peringatan: kepemilikan direktori tidak aman pada %s \"%s\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "Peringatan: kepemilikan direktori tidak aman pada %s \"%s\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "Peringatan: permisi direktori tidak aman pada %s \"%s\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "Peringatan: permisi direktori tidak aman pada %s \"%s\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "Item Konfigurasi tidak dikenal \"%s\"\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Tidak ada signature koresponden di ring rahasia\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "URL signature kebijakan yang diberikan tidak valid\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "tampilkan keyring tempat kunci yang dipilih berada" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Tidak ada signature koresponden di ring rahasia\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "CATATAN: file pilihan baku lama `%s' diabaikan\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "CATATAN: tidak ada file pilihan baku `%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "file pilihan `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "membaca pilihan dari `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "CATATAN: %s tidak untuk pemakaian normal!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s bukanlah set karakter yang valid\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s bukanlah set karakter yang valid\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "tidak dapat memparsing URI keyserver\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: opsi ekspor tidak valid\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "opsi ekspor tidak valid\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: opsi impor tidak valid\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "opsi impor tidak valid\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: opsi ekspor tidak valid\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "opsi ekspor tidak valid\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: opsi impor tidak valid\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "opsi impor tidak valid\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s bukanlah set karakter yang valid\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "URL signature kebijakan yang diberikan tidak valid\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s bukanlah set karakter yang valid\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s bukanlah set karakter yang valid\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: opsi ekspor tidak valid\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "opsi ekspor tidak valid\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "tidak dapat menset path exec ke %s\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: opsi ekspor tidak valid\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "PERINGATAN: program mungkin membuat file core!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "PERINGATAN: %s menimpa %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s tidak dibolehkan dengan %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s tidak masuk akal dengan %s!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "gpg-agent tidak tersedia untuk sesi ini\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "menulis kunci rahasia ke `%s'\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "anda hanya dapat membuat signature detached atau clear saat dalam mode --" "pgp2\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "" "anda tidak dapat menandai dan mengenkripsi pada saat bersamaan dalam mode --" "pgp2\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "" "anda harus menggunakan file (dan bukan pipe) saat bekerja dengan opsi --" "pgpg2\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "mengenkripsi pesan dalam mode --pgp2 membutuhkan cipher IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "algoritma cipher yang dipilih tidak valid\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "algoritma digest yang dipilih tidak valid\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "algoritma cipher yang dipilih tidak valid\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "algoritma sertifikasi digest yang dipilih tidak valid\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed harus lebih dari 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed harus lebih dari 1\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth harus di antara 1 hingga 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "level cert default tidak valid; harus 0, 1, 2, atau 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "level cert min tidak valid; harus 0, 1, 2, atau 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "CATATAN: mode S2K sederhana (0) tidak dianjurkan\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "mode S2K yang tidak valid; harus 0, 1 atau 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "preferensi baku tidak valid\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "preferensi cipher personal tidak valid\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "preferensi digest personal tidak valid\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "preferensi kompresi personal tidak valid\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s belum dapat dipakai dengan %s\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "" "anda tidak boleh menggunakan algoritma cipher \"%s\" saat dalam mode %s.\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "" "anda tidak boleh menggunakan algoritma digest \"%s\" saat dalam mode %s.\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "" "anda tidak boleh menggunakan algoritma kompresi \"%s\" saat dalam mode %s.\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "gagal inisialisasi TrustDB: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "Peringatan: penerima yang disebutkan (-r) tanpa menggunakan enkripsi public " "key \n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [namafile]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [namafile]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "dekripsi gagal: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [namafile]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [namafile]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "anda tidak boleh menggunakan %s saat dalam mode %s.\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [namafile]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [namafile]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [namafile]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "anda tidak boleh menggunakan %s saat dalam mode %s.\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [namafile]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [namafile]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [namafile]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key id-user" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key id-user" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key id-user [perintah]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id-user] [keyring]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "Pengiriman keyserver gagal: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "Penerimaan keyserver gagal: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "Ekspor kunci gagal: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "Pencarian keyserver gagal: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "Refresh keyserver gagal: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "gagal dearmoring: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "gagal enarmoring: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "algoritma hash tidak valid `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[namafile]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Teruskan dan ketikkan pesan anda ....\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "URL sertifikasi kebijakan yang diberikan tidak valid\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "URL signature kebijakan yang diberikan tidak valid\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "URL signature kebijakan yang diberikan tidak valid\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "terlalu banyak masukan dalam pk cache - ditiadakan\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[User id tidak ditemukan]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "kunci %08lX: kunci rahasia tanpa kunci publik - dilewati\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "kunci tidak valid %08lX dibuat valid oleh --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "tidak ada subkey rahasia untuk subkey publik %08lX. diabaikan\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "menggunakan kunci sekunder %08lX bukannya kunci primer %08lX\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "lebih diam" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "mengambil kunci ini dari keyring" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "buat timestamp konflik hanya sebagai peringatan" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|tulis info status ke FD ini" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Pemakaian: gpgv [opsi] [file] (-h untuk bantuan)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Sintaks: gpg [options] [files]\n" "Periksa signature terhadap kunci terpercaya\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Terserah anda untuk memberi nilai baru di sini; nilai ini tidak akan " "diekspor\n" "ke pihak ketiga. Kami perlu untuk mengimplementasikan web-of-trust; tidak " "ada\n" "kaitan dengan (membuat secara implisit) web-of-certificates." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Untuk membuat Web-of-Trust, GnuPG perlu tahu kunci mana yang\n" "sangat dipercaya - mereka biasanya adalah kunci yang anda punya\n" "akses ke kunci rahasia. Jawab \"yes\" untuk menset kunci ini ke\n" "sangat dipercaya\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Jika anda ingin menggunakan kunci tidak terpercaya ini, jawab \"ya\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Masukkan ID user penerima pesan." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Secara umum bukan ide baik untuk menggunakan kunci yang sama untuk menandai " "dan\n" "mengenkripsi. Algoritma ini seharusnya digunakan dalam domain tertentu.\n" "Silakan berkonsultasi dulu dengan ahli keamanan anda." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Masukkan ukuran kunci" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Jawab \"ya\" atau \"tidak\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Masukkan nilai yang diperlukan seperti pada prompt.\n" "Dapat digunakan format (YYYY-MM-DD) untuk mengisi tanggal ISO tetapi anda\n" "tidak akan mendapat respon kesalahan yang baik - sebaiknya sistem akan\n" "berusaha menginterprestasi nilai yang diberikan sebagai sebuah interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Masukkan nama pemegang kunci" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "silakan masukkan alamat email (pilihan namun sangat dianjurkan)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Silakan masukkan komentar tambahan" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N untuk merubah nama.\n" "K untuk merubah komentar.\n" "E untuk merubah alamat email.\n" "O untuk melanjutkan dengan pembuatan kunci.\n" "K untuk menghentikan pembuatan kunci." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Jawab \"ya\" (atau \"y\") jika telah siap membuat subkey." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Ketika anda menandai user ID pada kunci, anda perlu memverifikasi bahwa " "kunci\n" "milik orang yang disebut dalam user ID. Ini penting bagi orang lain untuk " "tahu\n" "seberapa cermat anda memverifikasi ini.\n" "\n" "\"0\" berarti anda tidak melakukan klaim tentang betapa cermat anda " "memverifikasi kunci.\n" "\n" "\"1\" berarti anda percaya bahwa kunci dimiliki oleh orang yang mengklaim " "memilikinya\n" " namun anda tidak dapat, atau tidak memverifikasi kunci sama sekali. Hal " "ini bergunabagi\n" " verifikasi \"persona\", yaitu anda menandai kunci user pseudonymous\n" "\n" "\"2\" berarti anda melakukan verifikasi kasual atas kunci. Sebagai contoh, " "halini dapat\n" " berarti bahwa anda memverifikasi fingerprint kunci dan memeriksa user ID " "pada kunci\n" " dengan photo ID.\n" "\n" "\"3\" berarti anda melakukan verifikasi ekstensif atas kunci. Sebagai " "contoh, hal ini\n" " dapat berarti anda memverifikasi fingerprint kunci dengan pemilik kunci\n" " secara personal, dan anda memeriksa, dengan menggunakan dokumen yang " "sulit dipalsukan yang memiliki\n" " photo ID (seperti paspor) bahwa nama pemilik kunci cocok dengan\n" " nama user ID kunci, dan bahwa anda telah memverifikasi (dengan " "pertukaran\n" " email) bahwa alamat email pada kunci milik pemilik kunci.\n" "\n" "Contoh-contoh pada level 2 dan 3 hanyalah contoh.\n" "Pada akhirnya, terserah anda untuk memutuskan apa arti \"kasual\" dan " "\"ekstensif\"\n" "bagi anda ketika menandai kunci lain.\n" "\n" "Jika anda tidak tahu jawaban yang tepat, jawab \"0\"." #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Jawab \"ya\" jika anda ingin menandai seluruh ID user" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Jawab \"ya\" jika anda benar-benar ingin menghapus ID user ini.\n" "Seluruh sertifikat juga akan hilang!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Jawab \"ya\" jika ingin menghapus subkey" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Ini adalah signature valid untuk kunci; anda normalnya tdk ingin menghapus\n" "signature ini karena mungkin penting membangun koneksi trust ke kunci atau\n" "ke kunci tersertifikasi lain dengan kunci ini." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Signature ini tidak dapat diperiksa karena anda tidak memiliki kunci\n" "korespondennya. Anda perlu menunda penghapusannya hingga anda tahu\n" "kunci yang digunakan karena kunci penanda ini mungkin membangun suatu\n" "koneksi trust melalui kunci yang telah tersertifikasi lain." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Signature tidak valid. Adalah hal yang masuk akal untuk menghapusnya dari\n" "keyring anda" #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Ini adalah signature yang menghubungkan ID pemakai ke kunci. Biasanya\n" "bukan ide yang baik untuk menghapus signature semacam itu. Umumnya\n" "GnuPG tidak akan dapat menggunakan kunci ini lagi. Sehingga lakukan hal\n" "ini bila self-signature untuk beberapa alasan tidak valid dan\n" "tersedia yang kedua." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Rubah preferensi seluruh user ID (atau hanya yang terpilih)\n" "ke daftar preferensi saat ini. Timestamp seluruh self-signature\n" "yang terpengaruh akan bertambah satu detik.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Silakan masukkan passphrase; ini kalimat rahasia\n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Silakan ulangi passphrase terakhir, sehingga anda yakin yang anda ketikkan." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Beri nama file tempat berlakunya signature" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Jawab \"ya\" jika tidak apa-apa menimpa file" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Silakan masukan nama file baru. Jika anda hanya menekan RETURN nama\n" "file baku (yang diapit tanda kurung) akan dipakai." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Anda harus menspesifikasikan alasan pembatalan. Semua ini tergantung\n" "konteks, anda dapat memilih dari daftar berikut:\n" " \"Key has been compromised\"\n" " Gunakan ini jika anda punya alasan untuk percaya bahwa orang yang " "tidak berhak\n" " memiliki akses ke kunci pribadi anda.\n" " \"Key is superseded\"\n" " Gunakan ini bila anda mengganti kunci anda dengan yang baru.\n" " \"Key is no longer used\"\n" " Gunakan ini bila anda telah mempensiunkan kunci ini.\n" " \"User ID is no longer valid\"\n" " Gunakan ini untuk menyatakan user ID tidak boleh digunakan lagi;\n" " normalnya digunakan untuk menandai bahwa alamat email tidak valid " "lagi.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Jika anda suka, anda dapat memasukkan teks menjelaskan mengapa anda\n" "mengeluarkan sertifikat pembatalan ini. Buatlah ringkas.\n" "Baris kosong mengakhiri teks.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Tidak tersedia bantuan" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Tidak tersedia bantuan untuk `%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "perbarui database trust" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "perbarui database trust" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "kunci publik tidak cocok dengan kunci rahasia!\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "kunci rahasia tidak dapat dipakai" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "melewati blok tipe %d\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "%lu kunci telah diproses\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Jumlah yang telah diproses: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " lewati kunci baru: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " tanpa ID user: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " diimpor: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " tidak berubah: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " ID user baru: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " subkey baru: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " signature baru: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " pembatalan kunci baru: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " kunci rahasia dibaca: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " kunci rahasia diimpor: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " kunci rahasia tidak berubah: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " tidak diimpor: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " signature baru: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " kunci rahasia dibaca: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "Anda telah menandai ID user ini:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "%s signature, algoritma digest %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "kunci %08lX: tidak ada ID user\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "melewati `%s': %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "kunci %08lX: subkey HKP yang rusak diperbaiki\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "kunci %08lX: menerima ID user '%s' yang tidak self-signed\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "kunci %08lX: tidak ada ID user yang valid\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "mungkin disebabkan oleh self-signature yang tidak ada\n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "kunci %08lX: kunci publik tidak ditemukan: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "kunci %08lX: kunci baru - dilewati\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "tidak ditemukan keyring yang dapat ditulisi: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "menulis ke `%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "kesalahan menulis keyring `%s': %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "kunci %08lX: kunci publik \"%s\" diimpor\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "kunci %08lX: tidak cocok dengan duplikat kami\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "kunci %08lX: tidak dapat menemukan keyblock orisinal: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "kunci %08lX: tidak dapat membaca keyblok orisinal: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "kunci %08lX: 1 user ID baru \"%s\"\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "kunci %08lX: \"%s\" %d user ID baru\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "kunci %08lX: \"%s\" 1 signature baru\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "kunci %08lX: \"%s\" %d signature baru\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "kunci %08lX: \"%s\" 1 subkey baru\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "kunci %08lX: \"%s\" %d subkey baru\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "kunci %08lX: \"%s\" %d signature baru\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "kunci %08lX: \"%s\" %d signature baru\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "kunci %08lX: \"%s\" %d user ID baru\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "kunci %08lX: \"%s\" %d user ID baru\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "kunci %08lX: \"%s\" tidak berubah\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "kunci rahasia `%s' tidak ditemukan: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "menulis kunci rahasia ke `%s'\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "kunci %08lX: kunci rahasia dengan cipher tidak valid %d - dilewati\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "tidak ada keyring rahasia baku: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "kunci %08lX: kunci rahasia diimpor\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "kunci %08lX: sudah ada di keyring rahasia\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "kunci %08lX: kunci rahasia tidak ditemukan: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "" "kunci %08lX: tdk ada kunci publik-tdk dpt mengaplikasikan sertifikat " "pembatalan\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "kunci %08lX: sertifikat pembatalan tidak valid: %s - ditolak\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "kunci %08lX: \"%s\" sertifikat pembatalan diimpor\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "kunci %08lX: tidak ada ID user untuk signature\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "kunci %08lX: algoritma publik key tidak didukung pada user id \"%s\"\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "kunci %08lX: self-signature tidak valid pada user id \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "kunci %08lX: algoritma publik key tidak didukung\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "kunci %08lX: signature kunci langsung ditambahkan\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "kunci %08lX: tidak ada subkey untuk key binding\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "kunci %08lX: subkey binding tidak valid\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "kunci %08lX: hapus subkey binding ganda\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "kunci %08lX: tidak ada subkey untuk pembatalan kunci\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "kunci %08lX: pembatalan subkey tidak valid\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "kunci %08lX: hapus pembatalan subkey ganda\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "kunci %08lX: melewati ID user " #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "kunci %08lX: melewati subkey\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "kunci %08lX: signature tidak dapat diekpor (kelas %02x) - dilewati\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "kunci %08lX: sertifikat pembatalan di tempat yang salah - dilewati\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "kunci %08lX: sertifikat pembatalan tidak valid: %s - dilewati\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "kunci %08lX: signature subkey di tempat yang salah - dilewati\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "kunci %08lX: klas signature tidak diharapkan (0x%02x) - dilewati\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "kunci %08lX: terdeteksi ID user duplikat - digabungkan\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "Peringatan: kunci %08lX dapat dibatalkan: mengambil kunci pembatalan %08lX\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "Peringatan: kunci %08lX dapat dibatalkan: kunci pembatalan %08lX tidak ada\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "kunci %08lX: \"%s\" penambahan sertifikat pembatalan\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "kunci %08lX: signature kunci langsung ditambahkan\n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "kunci publik tidak cocok dengan kunci rahasia!\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "dilewati: kunci pribadi telah ada\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "dilewati: kunci pribadi telah ada\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "kesalahan menulis keyring `%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "%s: keyring tercipta\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "kesalahan penciptaan : `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "gagal membuat kembali cache keyring: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[pembatalan]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[self-signature]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 signature yang buruk\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d signature yang buruk\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 signature tidak diperiksa karena tidak ada kunci\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signature tidak diperiksa karena tidak ada kunci\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 signature tidak diperiksa karena kesalahan\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signature tidak diperiksa karena ada kesalahan\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "terdeteksi 1 ID user tanpa self-signature yang valid\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "terdeteksi ID %d user tanpa self-signature yang valid\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Silakan putuskan seberapa jauh anda percaya user ini untuk\n" "secara tepat memverifikasi kunci user lain (dengan melihat pada passpor,\n" "memeriksa fingerprint dari berbagai sumber...)?\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = Saya cukup percaya\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = Saya sangat percaya\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "User ID \"%s\" dibatalkan." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Apakah anda yakin masih ingin menandainya? (y/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr "..Tidak dapat menandai.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "User ID \"%s\" kadaluwarsa." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "User ID \"%s\" bukan self-signed." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "User ID \"%s\" bukan self-signed." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Ditandai? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Self-signature pada \"%s\"\n" "adalah signature bergaya PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Anda ingin mempromosikannya ke self-signature OpenPGP ? (y/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Signature anda saat ini pada \"%s\"\n" "telah habis berlaku.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Anda ingin mengeluarkan signature baru untuk menggantikan yang telah habis " "berlaku? (y/N)" #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Signature anda saat ini pada \"%s\"\n" "adalah signature.lokal \n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Apakah anda ingin menjadikannya signature yang full exportable? (y/N)" #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" Sudah ditandai secara lokal dengan kunci %08lX\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" Sudah ditandai dengan kunci %08lX\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Apakah anda ingin menandainya lagi? (y/N) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Tidak ada yang ditandai dengan kunci %08lX\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Kunci ini telah berakhir!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Kunci ini akan kadaluarsa pada %s \n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Anda ingin signature anda kadaluarsa pada waktu yang sama? (y/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Anda tidak boleh membuat signature OpenPGP pada sebuah kunci PGP 2.x saat " "dalam mode --pgp2\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Hal ini akan membuat kunci tidak dapat digunakan dalam PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Sudah seberapa teliti anda memverifikasi kunci yang akan anda gunakan untuk " "menandai benar benar milik\n" "orang tersebut? Jika anda tidak tahu jawabannya. masukkan \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Saya tidak akan menjawab.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Saya belum memeriksanya.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Saya telah melakukan pemeriksaan biasa.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Saya telah melakukan pemeriksaan hati-hati.%s\n" #: g10/keyedit.c:926 #, fuzzy msgid "Your selection? (enter `?' for more information): " msgstr "Pilihan Anda? (berikan '?' untuk informasi lebih lanjut):" #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Apakah anda yakin untuk menandai kunci ini \n" "dengan kunci anda: " #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" "Ini akan jadi self-signature.\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "Peringatan: Signature akan ditandai sebagai tidak dapat diekspor.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "Peringatan: Signature akan ditandai sebagai tidak dapat dibatalkan.\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "Signature akan ditandai sebagai tidak dapat diekspor.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "Signature akan ditandai sebagai tidak dapat dibatalkan.\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "Saya belum memeriksa kunci ini sama sekali.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "Saya telah memeriksa kunci ini.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "Saya telah memeriksa kunci ini dengan sangat hati-hati.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Ditandai? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "gagal menandai: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Kunci ini tidak diproteksi.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Bagian rahasia kunci primer tidak tersedia.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "Bagian rahasia kunci primer tidak tersedia.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Kunci diproteksi.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Tidak dapat mengedit kunci ini: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Masukkan passphrase baru untuk kunci rahasia ini.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "passphrase tidak diulang dengan benar; coba lagi" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Anda tidak ingin passphrase - bukan ide yang baik!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Apakah anda ingin melakukan hal ini? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "memindahkan signature kunci ke tempat yang tepat\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "simpan dan berhenti" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "tampilkan fingerprint" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "tampilkan kunci dan ID user" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "pilih ID user N" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "pilih ID user N" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "batalkan signature" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "tandai kunci secara lokal" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Petunjuk: Pilih ID user untuk ditandai\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "tambah sebuah ID user" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "tambah sebuah photo ID" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "hapus ID user" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "hapus kunci sekunder" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "tambah kunci pembatalan" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "Perbarui preferensi untuk user ID terpilih?" #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "Anda tidak dapat merubah batas waktu kunci v3\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "tandai ID user sebagai primer" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "ubah tampilan kunci rahasia dan publik" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "tampilkan preferensi (ahli)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "tampilkan preferensi (verbose)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "Perbarui preferensi untuk user ID terpilih?" #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "tidak dapat memparsing URI keyserver\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "Perbarui preferensi untuk user ID terpilih?" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "ubah passphrase" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "ubah ownertrust" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Benar-benar hapus seluruh ID user terpilih? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "batalkan sebuah ID user" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "batalkan kunci sekunder" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "aktifkan kunci" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "tiadakan kunci" #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "tampilkan photo ID" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "kesalahan membaca keyblock rahasia `%s': %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Kunci rahasia tersedia.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Perlu kunci rahasia untuk melakukan hal ini.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Silakan gunakan dulu perintah \"toogle\".\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Kunci dibatalkan" #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Tandai ID seluruh user? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Petunjuk: Pilih ID user untuk ditandai\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "kelas signature tidak dikenal" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Perintah ini tidak dibolehkan saat dalam mode %s.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Anda harus memilih minimum satu ID user.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Anda tidak dapat menghapus ID user terakhir!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Hapus seluruh ID user terpilih? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Hapus ID user ini? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Hapus ID user ini? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Anda harus memilih minimum satu kunci.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "tidak dapat membuka `%s': %s\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "kesalahan menulis keyring `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Anda harus memilih minimum satu kunci.\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Anda ingin menghapus kunci terpilih ini? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Anda ingin menghapus kunci ini? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Benar-benar hapus seluruh ID user terpilih? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Benar-benar hapus ID user ini? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Anda ingin membatalkan kunci ini? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Anda ingin membatalkan kunci terpilih ini? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Anda ingin membatalkan kunci ini? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "set daftar preferensi" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Perbarui preferensi untuk user ID terpilih?" #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Update preferensi?" #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Simpan perubahan? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Berhenti tanpa menyimpan? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "gagal memperbarui: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "gagal perbarui rahasia: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Kunci tidak berubah sehingga tidak perlu pembaharuan.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Digest: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Fitur: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Notasi: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Tidak ada preferensi pada user ID bergaya PGP 2.x.\n" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Kunci ini dapat dibatalkan oleh kunci %s" #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "Kunci ini dapat dibatalkan oleh kunci %s" #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " (sensitive)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "tidak dapat membuat %s: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "[revoked] " #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [berakhir: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [berakhir: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " trust: %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " trust: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Kunci ini telah ditiadakan" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Perhatikan bahwa validitas kunci yang ditampilkan belum tentu benar\n" "kecuali anda memulai kembali program.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "[revoked] " #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Anda tidak dapat merubah batas waktu kunci v3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "PERINGATAN: Ini adalah kunci bergaya PGP2. Menambahkan sebuah photo ID " "dapat menyebabkan beberapa versi\n" " PGP menolak kunci ini.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Anda tetap ingin menambahkannya? (y/n) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Anda tidak boleh menambahkan sebuah photo ID ke kunci bergaya PGP2 \n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Hapus signature baik ini? (y/T/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Hapus signature tidak valid ini? (y/T/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Hapus signature tidak dikenal ini? (y/T/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Yakin ingin menghapus self-signature ini? (y/T)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Menghapus %d signature.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Menghapus %d signature.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Tidak ada yang dihapus.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "armor tidak valid" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "User ID \"%s\" dibatalkan." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "User ID \"%s\" dibatalkan." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "User ID \"%s\" dibatalkan." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "User ID \"%s\" telah dibatalkan\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "User ID \"%s\" telah dibatalkan\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "PERINGATAN: Ini adalah kunci bergaya PGP2.x. Menambahkan sebuah revoker " "designated dapat\n" "............menyebabkan beberapa versi PGP menolak kunci ini.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Anda tidak boleh revoker designated ke kunci bergaya PGP2.x.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Masukkan user ID pihak yang ingin dibatalkan: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "" "tidak dapat menunjuk kunci bergaya PGP 2.x sebagai pihak yang dibatalkan\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "" "anda tidak dapat menunjuk sebuah kunci sebagai pihak yang dibatalkan " "sendiri\n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "PERINGATAN: Kunci ini telah dibatalkan oleh pihak yang berwenang\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "PERINGATAN: menunjuk sebuah kunci sebagai pihak yang dibatalkan tidak dapat " "dilakukan\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Anda yakin ingin menunjuk kunci inin sebagai pihak yang dibatalkan? (y/N):" #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Silakan hapus pilihan dari kunci rahasia.\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Silakan pilih maksimum satu kunci sekunder.\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "Merubah batas waktu untuk kunci sekunder.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Merubah batas waktu untuk kunci primer.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Anda tidak dapat merubah batas waktu kunci v3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Tidak ada signature koresponden di ring rahasia\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "PERINGATAN: subkey penandatangan %08lX tidak tersertifikasi silang\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Anda harus memilih minimum satu ID user.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "melewati self-signature v3 pada user id \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Apakah anda yakin ingin menggunakannya? (y/N) " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Apakah anda yakin ingin menggunakannya? (y/N) " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Notasi signature: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Ditimpa (y/T)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Tidak ada ID user dengan index %d\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Tidak ada ID user dengan index %d\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Tidak ada ID user dengan index %d\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "ID user: " #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " ditandai oleh %08lX pada %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (tidak dapat diekspor)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Kunci ini akan kadaluarsa pada %s \n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Anda tetap ingin membatalkannya? (y/n) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Membuat sertifikat pembatalan untuk signature ini? (y/N)" #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " ditandai oleh %08lX pada %s%s\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Anda telah menandai ID user ini:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (tidak dapat diekspor)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " dibatalkan oleh %08lX pada %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Anda akan membatalkan signature ini:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Ingin membuat sertifikat pembatalan? (y/T)" #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "tidak ada kunci rahasia\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "User ID \"%s\" telah dibatalkan\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "PERINGATAN: signature user ID bertanggal %d detik di masa depan\n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "User ID \"%s\" telah dibatalkan\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "User ID \"%s\" telah dibatalkan\n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Menampilkan photo ID %s berukuran %ld untuk kunci 0x%08lX (uid %d)\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "preferensi %c%lu ganda \n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "terlalu banyak preferensi `%c'\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "terlalu banyak preferensi `%c'\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "terlalu banyak preferensi `%c'\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "Karakter tidak valid dalam string preferensi\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "menulis signature direct\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "menulis self signature\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "menulis key binding signature\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "keysize tidak valid; menggunakan %u bit\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "keysize dibulatkan hingga %u bit\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "tandai" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "enkripsi data" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (hanya enkripsi)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Silakan pilih kunci yang anda inginkan:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA dan ElGamal (baku)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA dan ElGamal (baku)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (hanya menandai)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (hanya menandai)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (hanya enkripsi)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (hanya enkripsi)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA (hanya enkripsi)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (hanya enkripsi)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Keysize yang anda inginkan? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Keysize yang anda inginkan? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Keysize yang diminta adalah %u bit\n" #: g10/keygen.c:1722 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 "" "Silakan spesifikasikan lama kunci tetap valid.\n" " 0 = kunci tidak pernah berakhir\n" " = kunci berakhir dalam n hari\n" " w = kunci berakhir dalam n minggu\n" " m = kunci berakhir dalam n bulan\n" " y = kunci berakhir dalam n tahun\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Silakan spesifikasikan lama signature tetap valid.\n" " 0 = signature tidak pernah berakhir\n" " = signature berakhir dalam n hari\n" " w = signature berakhir dalam n minggu\n" " m = signature berakhir dalam n bulan\n" " y = signature berakhir dalam n tahun\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Kunci valid untuk? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "Signature valid untuk? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "nilai yang tidak valid\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "%s tidak pernah berakhir\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "%s tidak pernah berakhir\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "%s berakhir pada %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Signature kadaluarsa pada %s \n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Sistem anda tidak dapat menampilkan tanggal melebihi 2038.\n" "Namun, ia dapat menanganinya secara benar hingga 2106.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "Benar (y/t)? " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Anda perlu sebuah User-ID untuk mengidentifikasi kunci anda; software " "membuat \n" "user-id dari Nama sebenarnya, Komentar dan Alamat email dalam bentuk:\n" " \"Heinrich Heine (Der Dichter) \"\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Nama sebenarnya: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Karakter tidak valid dalam nama\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Nama tidak boleh dimulai dengan digit\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Nama harus berukuran minimum 5 karakter\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "Alamat email: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Bukan alamat email yang valid\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Komentar: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Karakter tidak valid dalam komentar\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Anda menggunakan set karakter `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Anda memilih USER-ID ini:\n" " \"%s\"\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Jangan menaruh alamat email ke dalam nama sebenarnya atau komentar\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnKkEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Ganti (N)ama, (K)omentar, (E)mail atau (Q)uit? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Ganti (N)ama, (K)omentar, (E)mail atau (O)ke/(Q)uit? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Silakan perbaiki kesalahan ini dulu\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Anda perlu sebuah passphrase untuk melindungi kunci rahasia anda.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Anda tidak ingin sebuah passphrase - ini mungkin ide yang *buruk*!\n" "Namun saya akan tetap lakukan. Anda dapat merubah passphrase anda setiap " "saat,\n" "menggunakan program ini dengan pilihan \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Kita perlu membuat banyak byte random. Adalah ide yang baik untuk melakukan\n" "aksi lain (mengetik pada keyboard, menggerakkan mouse, memakai disk)\n" "selama pembuatan prima; ini akan memberi random number generator kesempatan\n" "yang baik untuk memperoleh entropi.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Pembuatan kunci dibatalkan.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "menulis kunci publik ke `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "menulis kunci rahasia ke `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "menulis kunci rahasia ke `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "tidak ditemukan keyring publik yang dapat ditulisi: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "tidak ditemukan keyring rahasia yang dapat ditulisi: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "kesalahan menulis keyring publik `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "kesalahan menulis keyring rahasia `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "kunci publik dan rahasia dibuat dan ditandai.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Perhatikan bahwa kunci ini tidak dapat digunakan untuk enkripsi. Anda \n" "mungkin ingin menggunakan perintah \"--edit-key\" untuk membuat kunci kedua " "untuk tujuan ini.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Pembuatan kunci gagal: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "CATATAN: membuat subkey bagi kunci-kunci v3 tidak OpenPGP compliant\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Ingin diciptakan? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "gagal menghapus keyblok: %s\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "tidak dapat membuat %s: %s\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "CATATAN: kunci pribadi %08lX berakhir pada %s\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "tidak pernah..." #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kebijakan signature kritis: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Kebijakan signature: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Notasi signature kritis: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Notasi signature: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Keyring" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Fingerprint kunci primer:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Fingerprint subkunci =" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Fingerprint kunci primer =" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Fingerprint subkunci =" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Fingerprint kunci =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "gagal enarmoring: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "PERINGATAN: terdapat 2 file dengan informasi penting.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s adalah yang tidak berubah\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s adalah yang baru\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Silakan perbaiki kemungkinan lubang keamanan ini\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "memeriksa keyring `%s'\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu kunci telah diperiksa (%lu signature)\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu kunci telah diperiksa (%lu signature)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: keyring tercipta\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "URL signature kebijakan yang diberikan tidak valid\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "PERINGATAN: opsi dalam `%s' belum aktif selama pelaksanaan ini\n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "opsi ekspor tidak valid\n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "kunci '%s' tidak ditemukan: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "kunci '%s' tidak ditemukan: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "meminta kunci %08lX dari %s\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "meminta kunci %08lX dari %s\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "mencari \"%s\" dari server HKP %s\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "mencari \"%s\" dari server HKP %s\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "mencari \"%s\" dari server HKP %s\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "ditandai dengan kunci anda %08lX pada %s\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "mencari \"%s\" dari server HKP %s\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "mencari \"%s\" dari server HKP %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "opsi ekspor tidak valid\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "Penerimaan keyserver gagal: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "kesalahan keyserver" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "kesalahan keyserver" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "PERINGATAN: tidak dapat menghapus file temp (%s) `%s': %s\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "meminta kunci %08lX dari %s\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "meminta kunci %08lX dari %s\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "PERINGATAN: tidak dapat menghapus file temp (%s) `%s': %s\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "PERINGATAN: tidak dapat menghapus file temp (%s) `%s': %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "ukuran aneh untuk kunci sesi terenkripsi (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s kunci sesi enkripsi\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "dienkripsi dengan algoritma tidak dikenal %d\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "kunci publik adalah %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "data terenkripsi dengan kunci publik: DEK baik\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "dienkripsi dengan %u-bit kunci %s, ID %08lX, tercipta %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " alias \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "dienkripsi dengan kunci %s, ID %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "gagal dekripsi kunci publik: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "dienkripsi dengan passphrase %lu\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "dienkripsi dengan 1 passphrase\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "asumsikan %s data terenkripsi\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "Cipher IDEA tidak tersedia, secara optimis berusaha menggunakan %s\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "dekripsi lancar\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "PERINGATAN: integritas pesan tidak terlindungi\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "PERINGATAN: pesan terenkripsi telah dimanipulasi!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "dekripsi gagal: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "CATATAN: pengirim meminta \"for-your-eyes-only\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "original file name='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "pembatalan mandiri - gunakan \"gpg --import\" untuk mengaplikasikan\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "Signature baik dari \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "verifikasi signature tidak diabaikan\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "tidak dapat menangani banyak signature ini\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Signature kadaluwarsa %s\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " alias \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Signature membuat %.*s menggunakan kunci %s ID %08lX\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Kunci tersedia di:" #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "signature BURUK dari \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Signature kadaluarsa dari \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "Signature baik dari \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[uncertain]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " alias \"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Signature kadaluwarsa %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Signature kadaluarsa pada %s \n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s signature, algoritma digest %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "biner" #: g10/mainproc.c:1947 msgid "textmode" msgstr "modeteks" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "tidak dikenal" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Tidak dapat memeriksa signature: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "bukan detached signature\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "PERINGATAN: multi signature terdeteksi. Hanya yang pertama akan diperiksa.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "kelas signature mandiri 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "signature model lama (PGP 2.X)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "terdeteksi root paket tidak valid dalam proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "tidak dapat meniadakan core dump: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "tidak dapat membuka file: %s\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "trustdb: read failed (n=%d): %s\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "tidak dapat menangani algoritma kunci publik %d\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "memaksa algoritma digest %s (%d) melanggar preferensi penerima\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "algoritma cipher belum diimplementasikan" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "%s signature, algoritma digest %s\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "memaksa algoritma digest %s (%d) melanggar preferensi penerima\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = beri saya informasi lebih banyak lagi\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "gpg-agent tidak tersedia untuk sesi ini\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: opsi tidak digunakan lagi \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "WARNING: \"%s\" adalah opsi terdepresiasi\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "silakan gunakan \"%s%s\"\n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "WARNING: \"%s\" adalah opsi terdepresiasi\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Tidak dikompresi" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "Tidak dikompresi" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "pesan ini mungkin tidak dapat digunakan oleh %s\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "membaca pilihan dari `%s'\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "penerima baku tidak dikenal `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "kelas signature tidak dikenal" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "File `%s' ada. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Ditimpa (y/T)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: suffix tidak dikenal\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Masukkan nama file baru" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "menulis ke stdout\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "mengasumsikan data bertanda dalam `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "file konfigurasi baru `%s' tercipta\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "PERINGATAN: opsi dalam `%s' belum aktif selama pelaksanaan ini\n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: direktori tercipta\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "tidak dapat menangani algoritma kunci publik %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "PERINGATAN: kunci sesi mungkin dienkripsi simetris secara tidak aman\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "subpaket tipe %d memiliki bit kritis terset\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent tidak tersedia untuk sesi ini\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "variabel lingkungan GPG_AGENT_INFO salah bentuk\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "protokol gpg-agent versi %d tidak didukung\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "tidak dapat terkoneksi ke `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "masalah dengan agen - tiadakan penggunaan agen\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr " (ID kunci utama %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Anda perlu passphrase untuk membuka kunci rahasia untuk user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %08lX, tercipta %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Ulangi passphrase\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Masukkan passphrase\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "dibatalkan oleh user\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "tidak dapat meminta password dalam mode batch\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Masukkan passphrase: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Anda perlu passphrase untuk membuka kunci rahasia untuk\n" "pemakai: \"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bit kunci %s, ID %08lX, tercipta %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Ulangi passphrase: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Silakan pilih sebuah gambar sebagai ID foto anda. Gambar haruslah file " "JPEG.\n" "Ingat bahwa gambar disimpan dalam kunci publik anda.. Jika anda menggunakan " "sebuah\n" "gambar yang sangat besar, kunci anda akan menjadi semakin besar pula!\n" "Jagalah agar gambar mendekati ukuran 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Masukkan nama file JPEG sebagai ID foto: " #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "tidak dapat membuka file: %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Apakah anda yakin ingin menggunakannya? (y/N) " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\" bukan sebuah file JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Apakah foto ini benar (y/N/q)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "tidak dapat menampilkan photo ID!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Tidak ada alasan diberikan" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Kunci dilampaui" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Kunci ini telah dikompromikan" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Kunci tidak lagi digunakan" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "ID User tidak lagi valid" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "Alasan pembatalan:" #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "Komentar pembatalan:" #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Tidak ada nilai trust untuk:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " alias \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Kunci ini mungkin milik pemiliknya\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Tidak tahu\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d: Saya TIDAK percaya\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Saya sangat percaya sekali\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " m = kembali ke menu utama\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " s = lewati kunci ini\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " q = berhenti\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Keputusan anda? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Anda ingin menset kunci ini menjadi sangat percaya sekali?" #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Sertifikat mengarahkan ke kunci terpercaya:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lX: Tidak ada indikasi bahwa kunci ini benar-benar milik pemiliknya\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lX: Tidak ada indikasi bahwa kunci ini benar-benar milik pemiliknya\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "Kunci ini mungkin milik pemiliknya\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Kunci ini milik kita\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Tidak pasti bahwa kunci milik orang yang disebutkan\n" "Jika anda sangat tahu apa yang sedang anda lakukan, anda boleh menjawab\n" "pertanyaan berikut dengan ya\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Tetap gunakan kunci ini? " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "PERINGATAN: Menggunakan kunci tidak dipercaya!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "" "Peringatan: kunci ini mungkin dibatalkan:(kunci pembatalan tidak ada)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "PERINGATAN: Kunci ini telah dibatalkan oleh pihak yang berwenang\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "PERINGATAN: Kunci ini telah dibatalkan oleh pemiliknya!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " Hal ini dapat berarti bahwa signature adalah palsu.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "PERINGATAN: Subkey ini telah dibatalkan oleh pemiliknya!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Catatan: Kunci ini telah ditiadakan\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Catatan: Kunci ini telah berakhir!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "" "PERINGATAN: Kunci ini tidak disertifikasi dengan sig yang terpercaya!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " Tidak ada indikasi signature milik pemilik.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "PERINGATAN: Kita tidak percaya kunci ini!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Signature mungkin palsu.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "PERINGATAN: Kunci tdk disertifikasi dg signature terpercaya yg cukup!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Tidak pasti signature milik pemilik.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: dilewati: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: dilewati: kunci publik telah ada\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Anda tidak menspesifikasikan ID user. (anda dapat gunakan \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Masukkan user ID. Akhiri dengan baris kosong: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Tidak ada ID user tersebut.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "dilewati: kunci publik telah diset sebagai penerima baku\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Kunci publik dimatikan.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "dilewati: kunci publik telah diset\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "penerima baku tidak dikenal `%s'\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: dilewati: kunci publik dimatikan\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "tidak ada alamat yang valid\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "data tidak disimpan; gunakan pilihan \"--output\" untuk menyimpannya\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "kesalahan penciptaan : `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Menghapus signature.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Silakan masukkan nama file data: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "membaca stdin ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "tidak ada data tertandai\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "tidak dapat membuka data tertandai `%s'\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "penerima anonim; mencoba kunci rahasia %08lX ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "baik, kita adalah penerima anonim.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "encoding lama DEK tidak didukung\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "algoritma cipher %d%s tidak dikenal atau ditiadakan\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "CATATAN: algoritma cipher %d tidak ditemukan dalam preferensi\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "CATATAN: kunci pribadi %08lX berakhir pada %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "CATATAN: kunci telah dibatalkan" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet gagal: %s\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "kunci %08lX: tidak ada ID user\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Akan dibatalkan oleh:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Ini adalah kunci pembatalan sensitif)\n" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Buat sertifikat pembatalan untuk kunci ini?" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "Pemaksaan output mode ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "gagal make_keysig_packet: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Sertifikat pembatalan tercipta.\n" #: g10/revoke.c:411 #, fuzzy, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "tidak ditemukan kunci pembatalan untuk `%s'\n" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "kunci rahasia `%s' tidak ditemukan: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "tidak ada kunci publik yang sesuai: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "kunci publik tidak cocok dengan kunci rahasia!\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Buat sertifikat pembatalan untuk kunci ini?" #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "algoritma proteksi tidak dikenal\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "CATATAN: Kunci ini tidak diproteksi!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Sertifikat pembatalan tercipta.\n" "\n" "Pindahkanlah ke media yang dapat anda sembunyikan; jika Mallory memperoleh\n" "akses ke sertifikat ini ia dapat menggunakannya untuk membuat kunci anda\n" "tidak dapat digunakan.\n" "Adalah hal cerdas untuk mencetak sertifikat ini dan menyimpannya, bila\n" "sewaktu-waktu media anda tidak dapat dibaca. Namun berhati-hatilah: Sistem " "pencetakan\n" "mesin anda mungkin menyimpan data dan menyediakannya untuk yang lain!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Silakan pilih alasan untuk pembatalan:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Batal" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Mungkin anda ingin memilih %d di sini)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "" "Masukkan sebuah deskripsi opsional; akhiri dengan sebuah baris kosong:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Alasan pembatalan: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Tidak diberikan deskripsi)\n" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "Ini oke? " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "bagian kunci rahasia tidak tersedia\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "algoritma proteksi %d%s tidak didukung\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "algoritma proteksi %d%s tidak didukung\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Passphrase tidak valid; silakan coba lagi" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "PERINGATAN: terdeteksi kunci lemah - silakan ubah passphrase lagi.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "membuat checksum 16-bit terdepresiasi untuk proteksi kunci rahasia\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "kunci lemah tercipta - mengulang\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "tidak dapat menghindari kunci lemah untuk cipher simetrik; mencoba %d kali!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "Peringatan: konflik digest signature dalam pesan\n" #: g10/sig-check.c:99 #, fuzzy, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "PERINGATAN: subkey penandatangan %08lX tidak tersertifikasi silang\n" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "" "PERINGATAN: subkey penanda tangan %08lX memiliki sertifikasi silang yang " "tidak valid\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "kunci publik %08lX adalah %lu detik lebih baru daripada signature\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "kunci telah diciptakan dalam %lu detik mendatang (masalah waktu atau jam)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "CATATAN: kunci signature %08lX berakhir %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s signature, algoritma digest %s\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "mengasumsikan signature buruk dari kunci %08lX karena ada bit kritik tidak " "dikenal\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "kunci %08lX: tidak ada subkey untuk pembatalan paket\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "kunci %08lX: tidak ada subkey untuk key binding signature\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "PERINGATAN: tidak dapat melakukan %%-expand notasi (terlalu besar). " "Menggunakan yang tidak di-expand.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "PERINGATAN: tidak dapat melakukan %%-expand policy url (terlalu besar). " "Menggunakan yang tidak expand.\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "PERINGATAN: tidak dapat melakukan %%-expand policy url (terlalu besar). " "Menggunakan yang tidak expand.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "Gagal memeriksa signature yang dibuat: %s\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s signature dari: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "anda hanya dapat detach-sign dengan kunci bergaya PGP 2.x saat dalam mode --" "pgp2\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "memaksa algoritma digest %s (%d) melanggar preferensi penerima\n" #: g10/sign.c:960 msgid "signing:" msgstr "menandai:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "anda hanya dapat clearsign dengan kunci bergaya PGP 2.x saat dalam mode --" "pgp2\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s enkripsi akan digunakan\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "kunci tidak dianggap sebagai tidak aman - tidak dapat digunakan dengan RNG " "palsu!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "lewati `%s': terduplikasi\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "melewati `%s': %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "dilewati: kunci pribadi telah ada\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "melewati `%s': ini adalah kunci ElGamal yang dihasilkan PGP yang tidak aman " "untuk signature!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "trust record %lu, tipe %d: gagal menulis: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "kesalahan membaca `%s': %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "baris terlalu panjang\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "kesalahan: fingerprint tidak valid\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "impor nilai ownertrust" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "kesalahan: gagal menemukan catatan trust: %s\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "kesalahan pembacaan: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "trustdb: gagal sync: %s\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "tidak dapat membuat %s: %s\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "tidak dapat membuka `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "trustdb rec %lu: lseek gagal: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "trustdb rec %lu: write failed (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transaksi trustdb terlalu besar\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "tidak dapat menutup `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: direktori tidak ada!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: gagal membuat catatan versi: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: tercipta trustdb tidak valid\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: tercipta trustdb\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "CATATAN: trustdb tidak dapat ditulisi\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: trustdb tidak valid\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: gagal membuat hashtable: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: kesalahan memperbaharui catatan versi: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: kesalahan membaca catatan versi: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: kesalahan menulis catatan versi: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "trustdb: lseek gagal: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "trustdb: read failed (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: bukan file trustdb\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: catatan versi dengan recnum %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: versi file %d tidak valid\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: kesalahan membaca record bebas: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: kesalahan menulis dir record: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: gagal mengosongkan record: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: gagal menambahkan record: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: tercipta trustdb\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "tidak dapat menangani baris teks lebih dari %d karakter\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "baris input lebih dari %d karakter\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "'%s' bukanlah keyID panjang yang valid\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "kunci %08lX: diterima sebagai kunci terpercaya.\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "kunci %08lX muncul lebih dari satu kali dalam trustdb\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "kunci %08lX: tidak ada kunci publik untuk trusted key- dilewati\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "kunci ditandai sebagai sangat dipercaya.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "trust record %lu, req tipe %d: gagal baca: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "trust record %lu tidak dalam jenis yang diminta %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "[revoked] " #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "[expired] " #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "tidak dikenal" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 #, fuzzy msgid "never" msgstr "tidak pernah..." #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "tidak perlu memeriksa trustdb\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "pemeriksaan trustdb berikutnya pada %s\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "tidak perlu memeriksa trustdb\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "tidak perlu memeriksa trustdb\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "kunci publik %08lX tidak ditemukan: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "lakukanlah --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "memeriksa trustdb\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d kunci diproses (%d hitungan validitas dihapus)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "tidak ditemukan kunci yang benar-benar terpercaya\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "kunci publik yang sangat terpercaya %08lX tidak ditemukan\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "trust record %lu, tipe %d: gagal menulis: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "signature tidak dapat diverifikasi.\n" "Tolong ingat bahwa file signature (.sig atau .asc)\n" "haruslah file pertama yang diberikan pada perintah baris.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "baris input %u terlalu panjang atau hilang LF\n" #: util/errors.c:53 msgid "general error" msgstr "Kesalahan umum" #: util/errors.c:54 msgid "unknown packet type" msgstr "tipe paket tidak dikenal" #: util/errors.c:55 msgid "unknown version" msgstr "versi tidak dikenal" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "algoritma pubkey tidak dikenal" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "algoritma digest tidak dikenal" #: util/errors.c:58 msgid "bad public key" msgstr "kunci publik yang buruk" #: util/errors.c:59 msgid "bad secret key" msgstr "kunci rahasia yang buruk" #: util/errors.c:60 msgid "bad signature" msgstr "signature yang buruk" #: util/errors.c:61 msgid "checksum error" msgstr "kesalahan checksum" #: util/errors.c:62 msgid "bad passphrase" msgstr "passphrase yang buruk" #: util/errors.c:63 msgid "public key not found" msgstr "kunci publik tidak ditemukan" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "algoritma cipher tidak dikenal" #: util/errors.c:65 msgid "can't open the keyring" msgstr "tidak dapat membuka keyring" #: util/errors.c:66 msgid "invalid packet" msgstr "paket tidak valid" #: util/errors.c:67 msgid "invalid armor" msgstr "armor tidak valid" #: util/errors.c:68 msgid "no such user id" msgstr "tidak ada user id tsb" #: util/errors.c:69 msgid "secret key not available" msgstr "kunci rahasia tidak tersedia" #: util/errors.c:70 msgid "wrong secret key used" msgstr "digunakan kunci rahasia yang salah" #: util/errors.c:71 msgid "not supported" msgstr "tidak didukung" #: util/errors.c:72 msgid "bad key" msgstr "kunci yang buruk" #: util/errors.c:73 msgid "file read error" msgstr "kesalahan baca file" #: util/errors.c:74 msgid "file write error" msgstr "kesalahan tulis file" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "algoritma kompresi tidak dikenal" #: util/errors.c:76 msgid "file open error" msgstr "kesalahan buka file" #: util/errors.c:77 msgid "file create error" msgstr "kesalahan buat file" #: util/errors.c:78 msgid "invalid passphrase" msgstr "passphrase tidak valid" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritma pubkey belum diimplementasikan" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "algoritma cipher belum diimplementasikan" #: util/errors.c:81 msgid "unknown signature class" msgstr "kelas signature tidak dikenal" #: util/errors.c:82 msgid "trust database error" msgstr "kesalahan database trust" #: util/errors.c:83 msgid "bad MPI" msgstr "MPI yang buruk" #: util/errors.c:84 msgid "resource limit" msgstr "batasan sumber daya" #: util/errors.c:85 msgid "invalid keyring" msgstr "keyring tidak valid" #: util/errors.c:86 msgid "bad certificate" msgstr "sertifikat yang buruk" #: util/errors.c:87 msgid "malformed user id" msgstr "user id yang tidak benar" #: util/errors.c:88 msgid "file close error" msgstr "kesalahan tutup file" #: util/errors.c:89 msgid "file rename error" msgstr "kesalahan ganti nama file" #: util/errors.c:90 msgid "file delete error" msgstr "kesalahan hapus file" #: util/errors.c:91 msgid "unexpected data" msgstr "data tidak terduga" #: util/errors.c:92 msgid "timestamp conflict" msgstr "konflik timestamp" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "algoritma pubkey tidak dapat digunakan" #: util/errors.c:94 msgid "file exists" msgstr "file ada" #: util/errors.c:95 msgid "weak key" msgstr "kunci lemah" #: util/errors.c:96 msgid "invalid argument" msgstr "argumen tidak valid" #: util/errors.c:97 msgid "bad URI" msgstr "URI yang buruk" #: util/errors.c:98 msgid "unsupported URI" msgstr "URI tidak didukung" #: util/errors.c:99 msgid "network error" msgstr "kesalahan jaringan" #: util/errors.c:101 msgid "not encrypted" msgstr "tidak dienkripsi" #: util/errors.c:102 msgid "not processed" msgstr "tidak diproses" #: util/errors.c:104 msgid "unusable public key" msgstr "kunci publik tidak dapat dipakai" #: util/errors.c:105 msgid "unusable secret key" msgstr "kunci rahasia tidak dapat dipakai" #: util/errors.c:106 msgid "keyserver error" msgstr "kesalahan keyserver" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "Batal" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "tidak dienkripsi" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "tidak ada data tertandai\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... kesalahan (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "anda menemukan kesalahan ...(%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "y|ya" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "n|t|tidak" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "tT" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "q|k|keluar" #: util/miscutil.c:443 msgid "qQ" msgstr "kK" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "Peringatan: menggunakan memori yang tidak aman!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "silakan lihat http://www.gnupg.org/documentation/faqs.html untuk informasi " "lebih lanjut\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "operasi tidak mungkin tanpa menginisialisasi memori yang aman\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(anda mungkin menggunakan program yang salah untuk tugas ini)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "Peringatan: kepemilikan tidak aman pada %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "Peringatan: permisi tidak aman pada %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "Peringatan: kepemilikan direktori tidak aman pada %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "Peringatan: permisi direktori tidak aman pada %s \"%s\"\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "ekstensi cipher \"%s\" tidak dimuat karena permisi tidak aman\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "plugin cipher IDEA tidak tersedia\n" #~ msgid "Command> " #~ msgstr "Perintah> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "Keypair DSA akan memiliki 1024 bit.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "trustdb terkorupsi; silakan jalankan \"gpg --fix-trustdb\".\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "tidak dapat menaruh notasi data ke signature v3(gaya PGP 2.x)\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "tidak dapat menaruh notasi data ke kunci signature v3 (gaya PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "tidak dapat menaruh sebuah kebijakan URL ke signature v3 (gaya PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ "tidak dapat menaruh sebuah kebijakan URL ke signature v3 (gaya PGP 2.x)\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA butuh penggunaan algoritma hash 160 bit\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "silakan lihat http://www.gnupg.org/why-not-idea.html untuk informasi " #~ "lebih lanjut\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "nama notasi harus hanya terdiri dari karakter yang dapat dicetak atau " #~ "spasi, dan diakhiri dengan sebuah '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "nama notasi pengguna tidak boleh mengandung karakter '@'\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "nama notasi pengguna tidak boleh mengandung karakter '@'\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "nilai notasi tidak boleh menggunakan karakter kendali\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "PERINGATAN: ditemukan notasi data tidak valid\n" #~ msgid "not human readable" #~ msgstr "tidak dapat dibaca manusia" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "baca pilihan dari file" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "baca pilihan dari file" #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [berakhir: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "kunci %08lX: klas signature tidak diharapkan (0x%02x) - dilewati\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "tidak dapat mengeksekusi %s \"%s\": %s\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "User ID \"%s\" telah dibatalkan\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "kesalahan penciptaan passphrase: %s\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "passphrase jelek atau algoritma cipher (%d) tidak dikenal\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "tidak dapat menset pid client untuk agen\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "tidak dapat membuat server membaca FD untuk agen\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "tidak dapat membuat server menulis FD untuk agen\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "masalah komunikasi dengan gpg-agent\n" #~ msgid "passphrase too long\n" #~ msgstr "passphrase terlalu panjang\n" #~ msgid "invalid response from agent\n" #~ msgstr "respon tidak valid dari agen\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "masalah dengan agen: agen mengembalikan 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "pilih kunci sekunder N" #~ msgid "list signatures" #~ msgstr "tampilkan signature" #~ msgid "sign the key" #~ msgstr "tandai kunci" #~ msgid "add a secondary key" #~ msgstr "tambah kunci sekunder" #~ msgid "delete signatures" #~ msgstr "hapus signature" #~ msgid "change the expire date" #~ msgstr "ubah tanggal kadaluarsa" #~ msgid "set preference list" #~ msgstr "set daftar preferensi" #~ msgid "updated preferences" #~ msgstr "perbarui preferensi" #~ msgid "No secondary key with index %d\n" #~ msgstr "Tidak ada kunci sekunder dengan index %d\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key user-id" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key user-id" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "buat detached signature" #~ msgid "sign the key non-revocably" #~ msgstr "tandai kunci sebagai tidak dapat dibatalkan" #~ msgid "sign the key locally and non-revocably" #~ msgstr "tandai kunci secara lokal dan tidak dapat dibatalkan" #~ msgid "q" #~ msgstr "q" #~ msgid "help" #~ msgstr "bantuan" #~ msgid "list" #~ msgstr "tampilkan" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "debug" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "Kesalahan umum" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "simpan" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "kunci" #~ msgid "check" #~ msgstr "periksa" #~ msgid "c" #~ msgstr "c" #~ msgid "sign" #~ msgstr "tandai" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "tandai" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "primary" #~ msgstr "primer" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #, fuzzy #~ msgid "keyserver" #~ msgstr "kesalahan keyserver" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "algoritma digest `%s' adalah hanya-baca dalam rilis ini\n" #~ 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 "" #~ "Akan dibuat satu pasang kunci baru %s.\n" #~ " keysize minimum adalah 768 bit\n" #~ " keysize default adalah 1024 bit\n" #~ " keysize tertinggi dianjurkan 2048 bit\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "DSA hanya membolehkan keysize dari 512 hingga 1024\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "" #~ "keysize terlalu kecil; 1024 adalah nilai terendah yang diijinkan untuk " #~ "RSA.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "keysize terlalu kecil; 768 adalah nilai terendah yang diijinkan.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "keysize terlalu besar; %d adalah nilai tertinggi yang diijinkan.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "Keysize lebih besar dari 2048 tidak dianjurkan karena\n" #~ "komputasi akan sangat lama!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "Apakah anda yakin memerlukan keysize ini? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Oke, tetapi ingat bahwa radiasi monitor dan keyboard anda juga sangat " #~ "mudah diserang!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Algoritma eksperimental sebaiknya tidak dipakai!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "algoritma cipher ini didepresiasi; silakan gunakan yang lebih standar!\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "menulis ke `%s'\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "maaf, tidak dapat melakukan hal ini dalam mode batch\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr "kunci '%s' tidak ditemukan: %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "tidak dapat membuat %s: %s\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "tidak dapat membuka file: %s\n" #, fuzzy #~ msgid " \"" #~ msgstr " alias \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "kunci %08lX: kunci telah dibatalkan!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "kunci %08lX: subkey telah dibatalkan!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX: kunci telah berakhir\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Kita TIDAK percaya kunci ini\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (tandai dan enkripsi)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA (hanya menandai)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA (tandai dan enkripsi)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA (hanya enkripsi)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA (tandai dan enkripsi)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s: tidak dapat membuka: %s\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "%s: PERINGATAN: file kosong\n" #~ msgid "can't open %s: %s\n" #~ msgstr "tidak dapat membuka %s: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = Saya cukup percaya\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = Saya sangat percaya\n" #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "ditandai secara lokal dengan kunci anda %08lX pada %s\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: tidak dapat mengakses: %s\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: tidak dapat membuat lock\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: tidak dapat membuat lock\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: tidak dapat membuat: %s\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: tidak dapat membuat direktori: %s\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "Jika anda ingin menggunakan kunci yang dibatalkan, jawab \"ya\"." #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "Tidak dapat membuka foto \"%s\":%s\n" #~ msgid "can't open file: %s\n" #~ msgstr "tidak dapat membuka file: %s\n" #~ msgid "error: missing colon\n" #~ msgstr "kesalahan: kurang tanda titik dua\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "kesalahan: tidak ada nilai ownertrust\n" #~ msgid " (main key ID %08lX)" #~ msgstr " (ID kunci utama %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! subkey telah dibatalkan: %s\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev - ditemukan pembatalan palsu\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? masalah memeriksa pembatalan: %s\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr " [berakhir: %s]" #~ msgid " [expires: %s]" #~ msgstr " [berakhir: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "[revoked] " #~ msgid "can't create %s: %s\n" #~ msgstr "tidak dapat membuat %s: %s\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "PERINGATAN: digest `%s' bukan merupakan bagian OpenPGP. Gunakan dan " #~ "tanggung sendiri risikonya!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[files]|enkripsi file" #~ msgid "store only" #~ msgstr "hanya disimpan" #~ msgid "|[files]|decrypt files" #~ msgstr "|[files]|dekripsi file" #~ msgid "sign a key non-revocably" #~ msgstr "tandai kunci tidak dapat di-revoke" #~ msgid "sign a key locally and non-revocably" #~ msgstr "tandai kunci secara lokal dan tidak dapat di-revoke" #~ msgid "list only the sequence of packets" #~ msgstr "tampilkan hanya urutan paket" #~ msgid "export the ownertrust values" #~ msgstr "ekspor nilai ownertrust" #~ msgid "unattended trust database update" #~ msgstr "perbarui database trust secara otomatis" #~ msgid "fix a corrupted trust database" #~ msgstr "perbaiki database trust yang terkorupsi" #~ msgid "De-Armor a file or stdin" #~ msgstr "De-Armor file atau stdin" #~ msgid "En-Armor a file or stdin" #~ msgstr "En-Armor file atau stdin" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NAMA|gunakan NAMA sebagai penerima baku" #~ msgid "use the default key as default recipient" #~ msgstr "gunakan kunci baku sebagai penerima baku" #~ msgid "don't use the terminal at all" #~ msgstr "jangan menggunakan terminal" #~ msgid "force v3 signatures" #~ msgstr "paksa signature v3" #~ msgid "do not force v3 signatures" #~ msgstr "jangan paksa signature v3" #~ msgid "force v4 key signatures" #~ msgstr "paksa signature kunci v4" #~ msgid "do not force v4 key signatures" #~ msgstr "jangan paksa signature kunci v4" #~ msgid "always use a MDC for encryption" #~ msgstr "selalu gunakan MDC untuk enkripsi" #~ msgid "never use a MDC for encryption" #~ msgstr "jangan gunakan MDC untuk enkripsi" #~ msgid "use the gpg-agent" #~ msgstr "gunakan gpg-agent" #~ msgid "batch mode: never ask" #~ msgstr "mode batch: tanpa tanya" #~ msgid "assume yes on most questions" #~ msgstr "asumsikan ya untuk seluruh pertanyaan" #~ msgid "assume no on most questions" #~ msgstr "asumsikan tidak untuk seluruh pertanyaan" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "tambah keyring ini ke daftar keyring" #~ msgid "add this secret keyring to the list" #~ msgstr "tambah keyring rahasia ini ke daftar" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NAMA|gunakan NAMA sebagai kunci rahasia baku" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|HOST|gunakan keyserver ini utk lihat kunci" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NAMA|set charset terminal ke NAMA" #~ msgid "|[file]|write status info to file" #~ msgstr "|[file]|tulis status info ke file" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|KEYID|sangat percayai kunci ini" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|FILE|muat modul ekstensi FILE" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "emulasikan mode seperti dalam RFC1991" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "set pilihan semua paket, cipher, digest ke perilaku OpenPGP" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "set pilihan semua paket, cipher, digest ke perilaku PGP 2.x" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|gunakan passphrase mode N" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "|NAMA|gunakan algoritma digest NAMA utk passphrase" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NAMA|gunakan algoritma cipher NAMA untuk passphrase" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NAMA|gunakan algoritma cipher NAMA" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NAMA|gunakan algoritma digest pesan NAMA" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|gunakan algoritma kompresi N" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "buang field keyid paket terenkripsi" #~ msgid "Show Photo IDs" #~ msgstr "Tampilkan Photo IDs" #~ msgid "Don't show Photo IDs" #~ msgstr "Jangan tampilkan Photo IDs" #~ msgid "Set command line to view Photo IDs" #~ msgstr "Set perintah baris untuk melihat Photo IDs" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "algoritma kompresi `%s' adalah hanya-baca dalam rilis ini\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "algoritma kompresi harus di antara %d..%d\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Tidak pasti kunci ini milik pemiliknya\n" #~ "tapi tetap diterima\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "preferensi %c%lu tidak valid\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "kunci %08lX: bukan kunci rfc2440 - dilewati\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "CATATAN: Kunci primer Elgamal terdeteksi - mungkin membutuhkan beberapa " #~ "saat untuk mengimpor\n" #~ msgid " (default)" #~ msgstr " (default)" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX diciptakan: %s berakhir: %s" #~ msgid "Policy: " #~ msgstr "Kebijakan: " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "tidak dapat memperoleh kunci keyserver: %s\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "kesalahan mengirim ke `%s': %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "success sending to `%s' (status=%u)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "failed sending to `%s': status=%u\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "keyserver ini tidak mendukung --search-keys\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "tidak dapat mencari keyserver: %s\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "kunci %08lX: ini adalah kunci ElGamal ciptaan PGP yang tidak aman untuk " #~ "signature!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "kunci %08lX telah diciptakan dalam %lu detik mendatang (masalah waktu " #~ "atau jam)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "kunci %08lX telah diciptakan dalam %lu detik mendatang (masalah waktu " #~ "atau jam)\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "kunci %08lX ditandai sebagai sangat dipercaya\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "" #~ "signature dari kunci penandaan Elgamal %08lX hingga %08lX dilewati\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "signature dari %08lX ke kunci penandaan Elgamal %08lX dilewati\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Pilih algoritma untuk digunakan.\n" #~ "\n" #~ "DSA (DSS) adalah algoritma signature digital yang hanya dapat digunakan \n" #~ "untuk signature. Ia merupakan algoritma yang disarankan karena " #~ "verifikasi\n" #~ "signature DSA jauh lebih cepat daripada ElGamal.\n" #~ "\n" #~ "ElGamal adalah suatu algoritma yang dapat digunakan untuk signature dan \n" #~ "enkripsi. OpenPGP membedakannya ke dalam dua bentuk yaitu: hanya " #~ "enkripsi\n" #~ "dan enkripsi+sign; sebenarnya sama, tetapi beberapa parameter harus " #~ "dipilih\n" #~ "secara khusus untuk membuat kunci yang aman untuk signature; program ini\n" #~ "melakukannya tetapi implementasi OpenPGP lain tidak harus memahami " #~ "bentuk\n" #~ "signature+enkripsi.\n" #~ "\n" #~ "Kunci pertama (primer) harus selalu merupakan kunci yang mampu men-sign;\n" #~ "hal ini merupakan alasan mengapa kunci ElGamal hanya-enkripsi tidak ada\n" #~ "di menu ini." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Meskipun kunci ini didefinisikan dalam RFC2440 mereka tidak disarankan\n" #~ "karena belum didukung oleh seluruh program dan signature yang dibuat\n" #~ "oleh mereka cukup besar dan sangat lambat untuk diverifikasi." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu kunci telah diperiksa (%lu signature)\n" #~ msgid "key incomplete\n" #~ msgstr "kunci tidak lengkap\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "kunci %08lX tidak lengkap\n" #, fuzzy #~ msgid "quit|quit" #~ msgstr "keluar" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (tandai dan enkripsi)\n" #~ msgid "" #~ "The use of this algorithm is only supported by GnuPG. You will not be\n" #~ "able to use this key to communicate with PGP users. This algorithm is " #~ "also\n" #~ "very slow, and may not be as secure as the other choices.\n" #~ msgstr "" #~ "Penggunaan algoritma ini hanya didukung oleh GnuPG. Anda tidak dapat\n" #~ "menggunakan kunci ini untuk berkomunikasi dengan pengguna PGP. Algoritma " #~ "ini\n" #~ "juga sangat lambat, dan mungkin tidak seaman pilihan lainnya.\n" #~ msgid "Create anyway? " #~ msgstr "Tetap dibuat? " #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "terdeteksi algoritma symkey tidak valid (%d)\n" #~ msgid "this keyserver is not fully HKP compatible\n" #~ msgstr "keyserver ini tidak kompatibel penuh dengan HKP\n" #~ msgid "The use of this algorithm is deprecated - create anyway? " #~ msgstr "Penggunaan algoritma ini didepresiasi - tetap ciptakan?" gnupg-1.4.20/po/zh_CN.gmo0000644000175000017500000040007712635457221012001 00000000000000<'\Nph-qhh%i.jFjk)kIkekkkkk2k7)l2al#lDl.lI,m7vm'mm mmn/nInfnnnnn+n&o#;o(_oooo(opp$E+=" CY i:u#Ì /-]rCH]-$Ԏ'8!&Z5.5*.G0v&,ΐ 1<8O#ő"̑.H"(#$LEq;M=[v8$Ε4T×ߗ!;VBoȘۘ%:BVm.*L w!0'<P"k,/1",@"m2Ü ߜ( ) J*Uڝ "< Wc5"!D(aן 1*%\EAEo͡ = ^8'H>pc?/NӤE",h"#-ܥ+ )6&`j'q,Lb{+۩,34 h1t(#+ "5+X" ȫ?ܫ%B]pѬ }/03!Lns!Ѱ%AVirj-*9O0A/r5'س.-/]n2Je!{$,޶( 4)H-hy *ݹ+4Pl #ۺ$$ Ab }6%76r>)1h=Iؽ4"W#v=ؾ?D8@}+1NIkI555;k?B<*Hg-"HJ<B,)oC:.>G2=<@4FuHU$[ -21I4>~K@ 5J*7,00A4r 2h*&1# 2->`*Q=|0M"9&\!3>c%|D,5JZ2k_   *5 I T _ iv %")9&c+5 ) 6D.[ B5!$W| (/Xo" 5,R'.%2+/[l%5+aw ;<*Eb }:Rr&- ?<MA( /*Z v1&>,WH %/>.n&3  2?_0}$=%.T m'#'>Vv'&&&Fm / ,/1"a9K% $0&U$|#'"4 FRbr$@"> C$Qv!D+2/^60/M"_&(%%$&K \j.2 Sk'/7+My$&$' ,4,a> -$E,jIJ,Li"# !/Jf*-$' &.G"v+)#-36a5/"'Ai;0"%/:2j!: )!J!l(+8!94[026*)a9&GH_B'C#Y} ;Pp  'A\m'.#(,2U! , 3A G$Rw) %%8^,t23%&:"a1!9N%m%     #=a&d )$< @ V q  6 ,  ;+ #g M  - " > V r  " -  + &7 *^ 5 6  ! &5 $\   2    I F</0I1z##++ ,L!y2$*2H.{*"* HT ky%&$>c#|&3%*B%m(-9>6x:,0+/\7*.73;k01; F%^)36:( cn95-#"Qt - ,5M$+4%$!JCl*(05U.^-*+wG2/%NFt1# $ !A c (  - / ,! I!"S!)v!!! !!2"1H"z""#"#"!"" #--#[#:z#I#A#A$ S$]$p$$$$$$ $%;%!T%v%%%%%%#% "&.&>&X&l& &&&& &&''63'j'5'#' '((&(*7(!b( ((G((( ).)K)T)-q),)))* !*B*^*v*****D*F*EC+D+E+A,7V,6,7,=,>;-z-$-7-<-71.Fi.. .. .$/#*/N/#g/*//+1|1*p2334"4444585T5:r545456=66.t6F6467?7[7k7z7777778"8!58!W8!y888"889:9Y9&t999 99)9":@:#U:y:::::: ;;+;H;[;k;{;;*;(;;n<?<<D<B)=2l=2=8=' >-3>a> >#>>>>>?+?0K?'|?????!?@K=@H@@&@'A':A&bA&A A A"A B6B!TB*vBB*BB B$C!@CbC'{C)C+C C D);D eD D1DD'D$E 9E!FE9hEEFF FFF(G>G[GzGGG!G(GH)H&FHmH1H1H7H2IGRII J J,JJK:KBZK3K3KvL?|LLGL&"M,IM&vM>M M MN Q5JQ5QQQQRR..R2]R,R(R(R/S(?S hS SS SPS/T)IT#sT)T,T)T5UJNUAU>U,V4GV |VVVV/VVW W0)WZW;sWWW!W,W"X2XX9Y'AY+iY,Y7Y(Y4#Z/XZ2Z&Z)Z1 [>[+^[[#[ [[$["\#9\ ]\.g\+\\=k]"]+](](!^J^Q^3___"`5(`!^``````yaGbbbxbbbbbXbCcVcjccc+c ccdd8-dvfd"d+e(,e1Ue6e>ee*f9Df.~f.f$f4g*6g6ag(gg"gh $h%/hUhkhhhh%h&h#!iEi _irii>i+j(Gj3pjj&jjkk2k*Ok:zkkkCOl@llTm"omm/n(In:rnnO:ooPoHoyDpp(pq($q(Mq"vqqzr"[s~st9tRtbtvt tt t't+t'u@u&Puwu,u u5u,v5Cv,yv/vv8v#*wNwaw{wwww&wx+xzz%/z.Uzz{B{{{ | $|E|c|&x||2|||}}i*}+}}7~?~++<0h*/5:*e(Hd &4.L 0Q:qɄ ///@/p 2#,-E-s-'χ ?*Z 7ވg@:.7iC:. (O4x$JҋI:g(+ˌKKCQ:>D[EHE/@u(ߏ=m="Bΐ44F;{0+//D7t7<I!Nk]";0P/3??%<e<0ߕ0-A-o4.Җ-+/:[(m$֝)+%JQ8՞D@@BK%Ϡ(/>Enp0%GV06Ϥ90nj ٥     + 7 BNW f q}!0'-0<(m%5!-FYr5Ĩר G $S!x! ک+>Q jt.٪-&H o$+ԫ<0=#n)%٬0F'b(ɭ*2B ] g u7A" = Q[u!!ů*.GW g t.а+ 39M0 ɱ$&5?L Բ$!9Z[ ϳ ܳ!!!*L$_2 Ĵ & ?1q3ڵ#,'A2i'Ķ",O'g)*'3 3@t / *-!!Oq7@'()Rqº,ɺ /?Re{0Hƻ( 8Y `!mļ׼8)5$_,1!!0D*[!6 ߾-5Eb0!ҿ';.j *2"U7l +%%%6,\%C-I(g#/]]B''-**I0t0&&-$R*q-3&"%?H%34((@:i663"F"i1%7:(W.44%9(_F($!(?(h4!C4I~*4H%DBjYYQU%''Om!!$$%!J$l#  ) ERh~ ! &-(<e03$ $04U  $/*EU t%~-4 "A?d?$ @/N~(%!%'G'o   %+!M(Py!.#@])m< >&4S[%.'5,]4"+<(h(7  AO/_^( 2Mf #"00A!r!''*.12`+ !$AQp$ !!0)Mw$0?"T"w+$>$c7'''&!N!p*..?3n93',T-m-**!;']@'-'D^%~& &.Fu.=*92d% -!  .$;*`!p$GC+("@D!Tv"(007a117 "D'g,'55PWt 2&$ .?NCH  )"3Vi!.Ndw 1-Dr< !I?k*'/ L)m /  + D%N)t:!.PkQQ*M|?F 9Q:5:<7At,$:4C4x9+&+ R.]%A*-u"g`YA%^o$ 0[l 8$6pNDr$`8;fa_1E80&o4le,=&(GJRgg_k|yL% P0+*r{Evsf8`^'SmSZ#/qz~FaJ5J\/v&o?>KmSD Wjp y \%@ F!(}3ty %Ke*K!)/l>g)h^VQw(2z{ Zf@'r]r|ZXN*VE7hDpC66JH<s[>,<F=Y"2Px#vNbAw'.}^b7lU-2e\Mx4Ho GYc JC]k,qn:QNhF+Lub);-\;BA w DQH C@tX@ P|!l9!@G+ t~pj1[B54DL~ZI"Iz9;a_iP<0z'1Tc56YU{mx(}Ynu ,3V E7 /M5d#x= CIK!mVb^.H]ntLMAi"0niW~F'7;$z.UH{=TMTmE C1 99st )vqb3cj8Ve+T/3W3(I&QO[LBc*cZ[k.KIS\es W4R -$5?]B#)Ug*R-u<:iAWO`4nk<O:2#?&sT}w?rMdw u|2P|d}f %ayv+OO=>d{qXj_` ~QX::6jf _G]R?"iyX>k1.RaUoG9hqh pBSxN7d, Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorflag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s remove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model uncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN%%0A[sigs done: %lu]Project-Id-Version: gnupg 1.4.7 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:18+0200 Last-Translator: Meng Jie Language-Team: Chinese (simplified) Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: Chinese X-Poedit-Country: CHINA X-Poedit-SourceCharset: iso-8859-1 X-Poedit-Basepath: c:\msys\source\gnupg-1.4.7 输入用户标识。以空白行结束: 随机字节不够多。请再做一些其他的琐事,以使操作系统能搜集到更多的熵! (还需要%d字节) 请挑选一张图片作为您的照片标识 。这张图片一定要是JPEG文件。请记住这张图 片会被存放在您的公钥里。如果您挑了非常大的图片的话,您的密钥也会变得非 常大!请尽量把图片尺寸控制在240x288左右,这是个理想的尺寸。 支持的算法: 您需要一个用户标识来辨识您的密钥;本软件会用真实姓名、注释和电子邮件地址组合 成用户标识,如下所示: “Heinrich Heine (Der Dichter) ” 亦即“%s” 使用 %s 密钥 %s 已导入:%lu 未改变:%lu 新的子钥:%lu 新用户标识:%lu 未被导入:%lu 遗失用户标识:%lu “%s”:对称加密算法 %s 对应首选项 “%s”:压缩算法 %s 对应首选项 “%s”:散列算法 %s 对应首选项 (主钥 %s 的子钥) 这份签名并不一定属于它所声称的持有者 这个签名很有可能是伪造的。 没有证据表明这个签名属于它所声称的持有者。 这表明这个签名有可能是伪造的。 不可用的算法: 新的签名:%lu “%s” 卡序列号 =密钥指纹 = 子钥指纹: 读取的私钥:%lu 已跳过的新密钥:%lu 清除的用户标识:%lu 子钥指纹: 清除的签名:%lu (%c) 已完成 (%c) 选择是否用于认证 (%c) 选择是否用于加密 (%c) 选择是否用于签名 (%d) DSA (自定义用途) (%d) DSA (仅用于签名) (%d) ElGamal (仅用于加密) (%d) RSA (仅用于加密) (%d) RSA (自定义用途) (%d) RSA (仅用于签名) (0) 我不作答。 %s (1) 我根本没有检查过。 %s (1) 签名密钥 (2) 加密密钥 (2) 我随意检查过。 %s (3) 认证密钥 (3) 我非常小心地检查过。 %s 新的密钥吊销:%lu %d = 我不相信 %d = 我不知道或我不作答 %d = 我完全相信 %d = 我勉强相信 %d = 我绝对相信 无法添加签名。 亦即“%s” m = 回到主菜单 q = 退出 s = 跳过这把密钥 导入的私钥:%lu (主钥匙号 %s) (不可导出) (不可吊销) 主钥指纹: 未改变的私钥:%lu “%s”不是一个用户标识:跳过 “%s”已由密钥 %s 在本地签名 “%s”已由密钥 %s 签名 # 已指定的信任度的清单,建立于 %s # (请用“gpg --import-ownertrust”导入这些信任度) 尝试管理员 PIN %d 次后,智能卡将被永久锁定! %d 个损坏的签名 已经处理了 %d 把密钥(共计已解决了 %d 份的有效性) 需要 %d 份勉强信任和 %d 份完全信任,%s 信任模型 有 %d 份签名因为某些错误而未被检查 有 %d 份签名因为遗失密钥而未被检查 检测到 %d 个没有有效自身签名的用户标识 缓存了 %lu 把密钥(%lu 份签名) 目前已缓存 %lu 把密钥(%lu 份签名) 目前已处理 %lu 把密钥 %s…… %s 不支持对版本 %d 的处理 %s 尚不能和 %s 并用 %s 加密过的数据 %s 加密过的会话密钥 %s 加密将被采用 %s 是新的那一个 %s 是没有改变的那一个 %s 密钥长度应在 %u 位与 %u 位之间。 %s 密钥尺寸必须在 %u 与 %u 间 %s 与 %s 并用无意义! %s 不可与 %s 并用 %s 签名,散列算法 %s %s. %s/%s 已经加密给:“%s” %s/%s 签名来自:“%s” %s:只有有限的证据表明这把密钥属于它所声称的持有者 %s:没有证据表明这把密钥真的属于它所声称的持有者 %s:目录不存在! %s:读取自由记录时出错:%s %s:读取版本记录时出错: %s %s:更新版本记录时出错: %s %s:写入目录记录时出错:%s %s:写入版本记录时出错:%s %s:附加记录时失败:%s %s:建立散列表失败:%s %s:建立版本记录失败:%s%s:记录归零时失败:%s %s:无效的文件版本%d %s:无效的信任度数据库 %s:建立了无效的信任度数据库 %s:钥匙环已建立 %s:不是一个信任度数据库文件 %s:已跳过:%s %s: 已跳过:公钥已存在 %s:已跳过:公钥已被禁用 %s:建立了信任度数据库 %s:未知的后缀名 %s:记录编号为%lu的版本记录 %s:%d:不建议使用该选项“%s” %s:%d:无效的 auto-key-locate 清单 %s:%d:无效的导出选项 %s:%d:无效的导入选项 %s:%d:无效的公钥服务器选项 %s:%d:无效的列表选项 %s:%d:无效的校验选项 %u 位的 %s 密钥,钥匙号 %s,建立于 %s(不给定描述) (也许您会想要在这里选择 %d) (这是一把敏感的吊销密钥) (敏感的)(除非您用指纹指定密钥) (您可能使用了错误的程序来完成此项任务) * ‘sign’命令可以带‘l’前缀(lsign)以添加本地签名,或‘t’前缀(tsign)以添加 信任签名,或‘nr’前缀(nrsign)以添加不可吊销签名,或者以上三种前缀的任何组 合(ltsign、tnrsign 等)。 --clearsign [文件名]--decrypt [文件名]--edit-key 用户标识 [指令]--encrypt [文件名]--lsign-key 用户标识--output 在这个命令中不起作用 --sign --encrypt [文件名]--sign --symmetric [文件名]--sign [文件名]--sign-key 用户标识--store [文件名]--symmetric --encrypt [文件名]--symmetric --sign --encrypt [文件名]--symmetric [文件名]-k[v][v][v][c] [用户标识] [钥匙环]……这是个程序缺陷(%s:%d:%s) 1 个损坏的签名 有 1 份签名因为遗失密钥而未被检查 有 1 份签名因为某个错误而未被检查 检测到 1 个没有有效自身签名的用户标识 10 translator see trustdb.c:uid_trust_string_fixed@ (请参考在线说明以获得所有命令和选项的完整清单) @ 范例: -se -r Bob [文件名] 为 Bob 这个收件人签名及加密 --clearsign [文件名] 做出明文签名 --detach-sign [文件名] 做出分离式签名 --list-keys [某甲] 显示密钥 --fingerprint [某甲] 显示指纹 @ 选项: @指令: 已强行使用 ASCII 封装过的输出。 允许使用管理员命令 不允许使用管理员命令 仅供管理员使用的命令 如果您允许生成子钥,请回答“yes”(或者“y”)。如果可以删除这把子钥,请回答“yes”如果可以覆盖这个文件,请回答“yes”如果您真的想要删除这个用户标识的话就回答“yes”。 所有相关认证在此之后也会丢失!如果您想要为所有用户标识签名的话就选“yes”请回答“yes”或“no”您真的确定要签名这把密钥,使用您的密钥 “%s”(%s) 您确定仍然想要增加吗?(y/N)您确定您仍然想要吊销它吗?(y/N)您仍然想要为它签名吗?(y/N)您确定要将这把密钥设为指定吊销者吗?(y/N):您确定要删除它吗?(y/N)您确定要替换它吗?(y/N)您确定要用它吗?(y/N)认证已损坏的签名,来自于“%s”CA 指纹:CRC 错误:%06lx - %06lx 无法检查签名:%s 无法编辑这把密钥: %s 无法打开‘%s’:%s 取消智能卡持有人的名:智能卡持有人的姓:被绝对信任的密钥的证书: 验证更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?更改姓名(N)、注释(C)、电子邮件地址(E)或退出(Q)?用现有的首选项更新所有(或选定的)用户标识的首选项。所有受影响的自身签 字的时间戳都会增加一秒钟。 将要变更子钥的使用期限。 将要变更主钥的使用期限。 对称加密:命令需要一个文件名作为参数 注释:压缩:要为这把密钥建立一份指定吊销者证书吗?(y/N)要为这把密钥建立一份吊销证书吗?(y/N)要为这份签名生成一份吊销证书吗?(y/N)关键首选公钥服务器:关键签名注记:关键签名策略:目前允许的操作:当前收件人: DSA 密钥 %s 需要 %u 位或更长的散列 DSA 密钥 %s 使用不安全的(%u 位)的散列 DSA 需要散列值长度为 8 位的倍数 删除这个完好的签名吗?(y/N/q)删除这个无效的签名吗?(y/N/q)要从钥匙环里删除这把密钥吗?(y/N)删除这个未知的签名吗?(y/N/q)已经删除了 %d 个签名。 已经删除了 %d 个签名。 分离的签名。 散列:正在显示 %s 照片标识(大小为 %ld,属于密钥 %s,用户标识 %d) 您真的想要删除选定的密钥吗?(y/N)您真的要删除这把密钥吗?(y/N)您真的想要这么做吗?(y/N)您真的要吊销整把密钥吗?(y/N)您真的要吊销选定的子钥吗?(y/N)您真的要吊销这把子钥吗?(y/N)您真的要把这把密钥设成绝对信任?(y/N)您想要发布一份新的签名来取代已过期的那一个吗?(y/N)您是否想要把它升级成可以完全导出的签名?(y/N)您是否想要将它升级成 OpenPGP 的自身签名?(y/N)您仍然想要为它再次签名吗?(y/N)您想要让您的签名也同时过期吗? (Y/n) 错误:电子邮件地址:加密输入管理员 PIN:输入要当作相片标识的JPEG文件名: 输入新的管理员 PIN:输入新的 PIN:输入 PIN:请输入描述(可选);以空白行结束: 请输入新的文件名输入数字以选择,输入 N 翻页,输入 Q 退出 >请输入密码 请输入密码:请输入密钥持有人的名字输入要给这把私钥用的新密码。 输入注记:请输入提示所要求的数值。 您可以输入 ISO 日期格式(YYYY-MM-DD),但是出错时您不会得到友好的响应 ――系统会尝试将给定值解释为时间间隔。请输入密钥的尺寸输入您要递送的报文的接收者的用户标识。输入指定吊销者的用户标识:输入您首选的公钥服务器的 URL:从‘%s’读取备份密钥时出错:%s 错误:合成的姓名太长(至多 %d 个字符)。 错误:不允许出现两个空格。 错误:登录数据太长(至多 %d 个字符)。 错误:目前只允许使用 ASCII 字符。 错误:个人 DO 太长(至多 %d 个字符)。 错误:不能使用字符“<”。 错误:URL 太长(至多 %d 个字符) 错误:首选项字符串里有无效字符。 错误:指纹格式无效。 错误:首选项字符串长度无效。 错误:无效的响应。 过期的签名,来自于“%s”特点:文件‘%s’已存在。 请给定要添加签名的文件名请开始键入您的报文…… 完好的签名,来自于“%s”散列:提示:选择要添加签名的用户标识 就绪后请回车,或输入‘c’取消您是否谨慎地检查过,确认正要签名的密钥的确属于以上它所声称的所有者呢? 如果您不知道这个问题的答案,请输入“0”。 您是否相信这把密钥属于它所声称的持有者? 我随意检查过这把密钥。 我非常小心地检查过这把密钥。 我根本没有检查过这把密钥。 IDEA 算法不可用,试以 %s 代替 您也可以输入一串文字,描述发布这份吊销证书的理由。请尽量使这段文 字简明扼要。 键入一空行以结束输入。 如果您无论如何要使用这把未被信任的密钥,请回答“yes”。通常来说用同一把密钥签名及加密并不是个好主意。这个算法只在特定的情况 下使用。请先咨询安全方面的专家。注释含有无效的字符 姓名含有无效的字符 无效的指令(尝试“help”) --allow-non-selfsigned-uid 使无效密钥 %s 生效 无效的密码;请再试一次无效的选择。 以上正确吗?(y/n)这样可以吗? (y/N)这张照片正确吗?(y/N/q)这把密钥并不一定属于用户标识声称的那个人。如果您真的知道自 己在做什么,您可以在下一个问题回答 yes。 在这里指定的数值完全由您自己决定;这些数值永远不会被输出给任何第三方。 我们需要它来实现“信任网络”;这跟隐含建立起来的“验证网络”无关。密钥 %s 已被吊销。 可用的密钥在:密钥永远不会过期 密钥于 %s 过期 密钥生成已取消。 生成密钥失败:%s 密钥已泄漏只有占位密钥,或者密钥存储在智能卡上——没有密码可以更改。 密钥不再使用密钥受保护。 密钥已被吊销。密钥被替换密钥的有效期限是?(0) 密钥没有变动所以不需要更新。 钥匙环公钥服务器不可变造首选语言:登录数据(帐号名):是否为加密密钥创建智能卡外的备份?(Y/n)N 修改姓名。 C 修改注释。 E 修改电子邮件地址。 O 继续产生密钥。 Q 中止产生密钥。注意:%s 本版本中不可用 注意:一般情况下不会用到 %s! 注意:这把密钥没有被保护! 注意:密钥的序列号与智能卡的不符 注意:智能卡密钥的备份已保存到‘%s’ 注意:为 v3 密钥生成子钥会失去 OpenPGP 兼容性 注意:密钥已被吊销注意:没有默认配置文件‘%s’ 注意:旧式的默认配置文件‘%s’已被忽略 注意:主钥在线,存储在智能卡上 注意:子钥在线,存储在智能卡上 注意:私钥 %s 已于 %s 过期 注意:发件者要求您“只阅读不存盘” 注意:签名密钥 %s 已于 %s 过期 注意:强烈不建议使用简单的 S2K 模式(0) 注意:信任度数据库不可写入 姓名不可以用数字开头 姓名至少要有五个字符长 要有私钥才能这么做。 NnCcEeOoQq在私钥环里没有相应的签名 没有可用的帮助‘%s’没有可用的帮助未指定原因没有索引为 %d 的子钥 没有这个用户标识。 下列项目没有指定信任度: 没有散列值为 %s 的用户标识 没有索引为 %d 的用户标识 电子邮件地址无效 注记:请注意这把密钥还不能用来加密,您必须先用“--edit-key”指令 生成用于加密的子钥。 注意:签名者的地址‘%s’不匹配任何 DNS 记录 注意:这把密钥已经被禁用了。 注意:这把密钥已经过期了! 注意:验证过的签名者的地址是‘%s’ 没有东西被删除。 没有东西可以让密钥 %s 签名 检测到 OpenPGP 卡号 %s OpenPGP 卡不可用:%s 是否覆盖?(y/N)PIN 回调返回错误:%s CHV%d 的 PIN 太短;最小长度为 %d PIN 再次输入时与首次输入不符;请再试一次请先改正错误 您是否相信这位用户有能力验证其他用户密钥的有效性(查对身份证、通过不同的渠道检查 指纹等)? 请不要把电子邮件地址放进您的真实姓名或注释里 请输入这份签名的限制域,如果没有请按回车。 请输入一个新的文件名。如果您直接按下了回车,那么就会使用显示在括 号中的默认的文件名。请输入注释(可选项)请输入数据文件的名称: 请输入这份信任签名的深度。 深度若大于 1 则您将签名的这把密钥将可以以您的名义做出信任签名。 请输入密码:这是一个秘密的句子 请修补这个可能的安全性漏洞 请插入智能卡并回车,或输入‘c’来取消:请注意,PIN 在出厂时被设置为: PIN = ‘%s’ 管理员 PIN = ‘%s’ 您应当使用 --change-pin 命令来更改它们 请注意,在您重启程序之前,显示的密钥有效性未必正确, 请从私钥中删除选择。 请取出当前的智能卡,并插入有下列序列号的智能卡: %.*s 请再次输入上次的密码,以确定您到底键入了些什么。请向 报告程序缺陷。 请向 反映简体中文翻译的问题。 请至多选择一个子钥。 请精确地选择一个用户标识。 请选择吊销的原因: 请选择您要使用的密钥种类: 请选择您要使用的密钥种类: 请选择在哪里存储密钥: 请设定这把密钥的有效期限。 0 = 密钥永不过期 = 密钥在 n 天后过期 w = 密钥在 n 周后过期 m = 密钥在 n 月后过期 y = 密钥在 n 年后过期 请设定这份签名的有效期限。 0 = 签名永不过期 = 签名在 n 天后过期 w = 签名在 n 周后过期 m = 签名在 n 月后过期 y = 签名在 n 年后过期 请先使用“toggle”指令。 请稍待片刻,系统此时正在搜集熵。如果您觉得无聊的话,不妨做些 别的事——事实上这甚至能够让熵数的品质更好。 %s 密钥可能的操作:首选公钥服务器:主钥指纹:个人 DO 数据:继续?(y/N)公钥:公钥被禁用。 要不保存而离开吗?(y/N)RSA 余数缺失或者不是 %d 位长 RSA 质数 %s 缺失或者不是 %d 位长 RSA 公钥指数缺失或长于 %d 位 真实姓名:真的要生成吊销证书吗?(y/N)真的要建立吗?(y/N)真的要删除这个自身签名吗?(y/N)真的要删除主钥吗?(y/N)真的要删除所有选定的用户标识吗?(y/N)真的要删除这个用户标识吗?(y/N)真的要吊销所有选定的用户标识吗?(y/N)真的要吊销这个用户标识吗?(y/N)真的为所有的用户标识签名吗?(y/N)真的要签名吗?(y/N)真的要更新所选用户标识的首选项吗?(y/N)真的要更新首选项吗?(y/N)吊销原因:%s 请再输入一次密码 请再输入一次密码:再次输入此 PIN:替换已有的密钥?(y/N)替换已有的密钥?(y/N)您所要求的密钥尺寸是 %u 位 已建立吊销证书。 已建立吊销证书。 请把这个文件转移到一个可隐藏起来的介质(如软盘)上;如果坏人能够取得这 份证书的话,那么他就能让您的密钥无法继续使用。把这份凭证打印出来再藏 到安全的地方也是很好的方法,以免您的保存媒体损毁而无法读取。但是千万 小心:您的机器上的打印系统可能会在打印过程中把这些数据临时在某个其他 人也能够看得到的地方! 要保存变动吗?(y/N)私钥可用。 主钥的私钥部分无法取用。 主钥的私钥部分存储在智能卡上。 选择使用的算法。 DSA (也叫 DSS)即“数字签名算法”(美国国家标准),只能够用作签名。 Elgamal 是一种只能用作加密的算法。 RSA 可以用作签名或加密。 第一把密钥(主钥)必须具有签名的能力。设为首选项列表为: 性别(男性输入 M,女性输入 F,不指定输入空格):签名为其添加签名吗?(y/N)签名永远不会过期 这份签名已于 %s 过期。 这份签名在 %s 过期。 签名于 %s 过期 签名的有效期限是多久?(%s) 签名建立于 %s 于 %s 创建的签名,使用 %s,钥匙号 %s 签名注记:签名策略:SsEeAaQq子钥 %s 已被吊销。 语法:gpg [选项] [文件名] 签名、检查、加密或解密 默认的操作依输入数据而定 这把密钥的最小信任等级为:%s 使用这个随机数字发生器纯粹是为了使程序编译通过──它 根本就不是真正意义上的强随机数发生器! 绝对不要在现实世界中使用这个程序产生的任何数据!! “%s”的自身签名是 PGP 2.x 样 式的签名。 这份签名无效。应当把它从您的钥匙环里删除。这份签名会被标记成不可导出。 这份签名会被标记成不可吊销。 PGP 2.x 样式的用户标识没有首选项。 这个 JPEG 文件太大了(%d 字节)! 在 %s 模式中不允许使用这个指令。 这是一把私钥!――真的要删除吗?(y/N)这是一份将密钥与用户标识相联系的签名。通常不应删除这样的签名。 事实上,一旦删除,GnuPG可能从此就不能再使用这把密钥了。因此, 只有在这把密钥的第一个自身签名因某些原因失效,而有第二个自身签 字可用的情况下才这么做。这是一份在这把密钥上有效的签名;通常您不会想要删除这份签名, 因为要与这把密钥或拥有这把密钥的签名的密钥建立认证关系可能 相当重要。这把密钥是属于我们的 这把密钥已经被禁用这把密钥已经过期!这把密钥将在 %s 过期。 这把密钥没有被保护。 这把密钥可被 %s 密钥 %s 吊销这把密钥有可能属于它所声称的持有者 此密钥已于 %s 被 %s 密钥 %s 所吊销 这份签名无法被检验,因为您没有相应的密钥。您应该暂缓删除它, 直到您知道此签名使用了哪一把密钥;因为用来签名的密钥可能与 其他已经验证的密钥存在信任关系。这份签名已在 %s 过期。 这将是一个自身签名。 这会让这把密钥在 PGP 2.x 模式下不可使用。 将被吊销,吊销者: 要建立起信任网络,GnuPG 需要知道哪些密钥是可绝对信任的――通常 就是您拥有私钥的那些密钥。回答“yes”将此密钥设成可绝对信任的 合计被处理的数量:%lu 获取公钥的 URL:不压缩未知的签名类型‘%s’ 用法: gpg [选项] [文件] (用 -h 求助)用法:gpgv [选项] [文件] (用 -h 求助)无论如何还是使用这把密钥吗?(y/N)用户标识“%s”无用部分被清除:%s 用户标识“%s”已过期。警告:用户标识“%s”不含自身签名。用户标识“%s”已被吊销。可以为用户标识“%s”添加签名。用户标识“%s”:%d 个签名被清除 用户标识“%s”:%d 个签名被清除 用户标识“%s”:无用部分已清除 用户标识“%s”:已经最小化 用户标识不再有效警告:警告:“%s”命令已不建议使用——不要使用它 警告:“%s”选项已不建议使用 警告:%s 会使得 %s 失效 警告:两个文件存在有互相矛盾的信息。 警告:这是一把 PGP2 样式的密钥。 增加指定吊销者可能会导致某些版本的 PGP 无法识别这把密钥。 警告:这是一把 PGP2 样式的密钥。 增加照片标识可能会导致某些版本的 PGP 不能识别这把密钥。 警告:这把密钥已经被它的指定吊销者吊销了! 警告:这把密钥已经被它的持有者吊销了! 警告:这把密钥未经受信任的签名认证! 警告:这把密钥未经有足够信任度的签名所认证。 警告:这把子钥已经被它的持有者吊销了! 警告:正在使用不被信任的密钥! 警告:我们不信任这把密钥! 警告:检测到弱密钥――请更换密码。 警告:‘%s’是一个空文件 警告:有一份用户标识签名的日期标记为 %d 秒后的未来 警告:将某把密钥指派为指定吊销者的操作无法撤销! 注意:收件人的首选项中找不到加密算法 %s 警告:不建议使用散列算法 %s 警告:加密过的报文已经变造! 警告:强行使用的 %s (%d)压缩算法不在收件者的首选项中 警告:强行使用的 %s (%d)散列算法不在收件者的首选项中 警告:强行使用的 %s (%d)对称加密算法不在收件者的首选项中 警告:随机数种子文件大小无效――未使用 警告:密钥 %s 在下列用户标识的首选项中包含 警告:密钥 %s 可能已被吊销:正在取回吊销密钥 %s 警告:密钥 %s 可能已被吊销:吊销密钥 %s 不存在。 警告:处理公钥服务器的程序来自不同版本的 GnuPG (%s) 警告:公钥服务器选项‘%s’在此平台上没有被使用 警告:报文被使用对称加密算法的弱密钥加密。 警告:报文未受到完整的保护 警告:存在多个明文段 警告:检测到多重签名。只检查第一个签名。 警告:没有首选用户标识。此指令可能假定一个不同的用户标识为首选用户标识。 警告:没有导出任何东西 警告:在‘%s’里的选项于此次运行期间未被使用 警告:潜在不安全的对称加密会话密钥 警告:程序可能会创建核心内存转储! 警告:给定了收件人(-r)但并未使用公钥加密 警告:私钥 %s 不存在简单 SK 检验和 警告:签名散列值与报文不一致 警告:签名的子钥 %s 交叉验证无效 警告:签名的子钥 %s 未经交叉验证 警告:这份签名不会被标记为不可导出。 警告:这份签名不会被标记成不可吊销。 警告:此密钥可能已被吊销(吊销密钥不存在) 警告:注记 %% 无法扩展(太大了)。现在使用未扩展的。 警告:无法 %%-扩展策略 URL (太大了)。现在使用未扩展的。 警告:无法 %%-扩展首选公钥服务器 URL (太大了)。现在使用未扩展的。 警告:无法获取 URI %s:%s 不能解析 URI %s 警告:无法更新密钥 %s,通过 %s:%s 警告:无法删除临时目录‘%s’:%s 警告:无法删除临时文件(%s)‘%s’:%s 警告:配置文件‘%s’的关闭目录所有权不安全 警告:用户目录‘%s’的关闭目录所有权不安全 警告:配置文件‘%s’的关闭目录权限不安全 警告:用户目录‘%s’的关闭目录权限不安全 警告:配置文件‘%s’所有权不安全 警告:用户目录‘%s’所有权不安全 警告:配置文件‘%s’权限不安全 警告:用户目录‘%s’权限不安全 警告:使用试验性质的对称加密算法 %s 警告:使用试验性质的散列算法 %s 警告: 使用试验性质的公钥算法 %s 警告:正在使用不安全的内存! 警告:正在使用不安全的随机数发生器!! 我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动 鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。 您想要用多大的密钥尺寸?(%u)当您为某把密钥上某个用户标识添加签名时,您必须首先验证这把密钥确实属于 署名于它的用户标识上的那个人。了解到您曾多么谨慎地对此进行过验证,对其 他人是非常有用的 “0” 表示您对您有多么仔细地验证这把密钥的问题不表态。 “1” 表示您相信这把密钥属于那个声明是主人的人,但是您不能或根本没有验 证过。如果您为一把属于类似虚拟人物的密钥签名,这个选择很有用。 “2” 表示您随意地验证了那把密钥。例如,您验证了这把密钥的指纹,或比对 照片验证了用户标识。 “3” 表示您做了大量而详尽的验证密钥工作。例如,您同密钥持有人验证了密 钥指纹,而且通过查验附带照片而难以伪造的证件(如护照)确认了密钥持 有人的姓名与密钥上的用户标识一致,最后您还(通过电子邮件往来)验证 了密钥上的电子邮件地址确实属于密钥持有人。 请注意上述关于验证级别 2 和 3 的说明仅是例子而已。最终还是由您自己决定 当您为其他密钥签名时,什么是“随意”,而什么是“大量而详尽”。 如果您不知道应该选什么答案的话,就选“0”。您正在吊销这些签名: 您正在使用‘%s’字符集。 您不能变更 v3 密钥的使用期限 您不能删除最后一个用户标识! 您没有指定用户标识。(您可以在命令行中用“-r”指定) 您不想要用密码――这大概是个坏主意! 您不想要有密码――这个想法实在是遭透了! 不过,我仍然会照您想的去做。您任何时候都可以变更您的密码,仅需要 再次执行这个程序,并且使用“--edit-key”选项即可。 您已经为这些密钥 %s 上的这些用户标识添加签名: 您不可以为 PGP 2.x 样式的密钥添加指定吊销者。 您不可以把照片标识增加到 PGP2 样式的密钥里。 您不能在 --pgp2 模式下,用 PGP 2.x 密钥生成 OpenPGP 签名。 您必须选择至少一把密钥。 您至少得选择一个用户标识。 您必须指定一把密钥。 您需要一个密码来保护您的私钥。 您需要输入密码,才能解开这个用户的私钥:“%s” 您需要这个用户的密码来解开私钥: “%.*s” %u 位的 %s 密钥,钥匙号 %s,建立于 %s%s 您选定了这个用户标识: “%s” 您应该为这份吊销证书指定一个原因。根据情境的不同,您可以从下列清单中 选出一项: “密钥已泄漏” 如果您相信有某个未经许可的人已取得了您的私钥,请选此项。 “密钥已替换” 如果您已用一把新密钥代替旧的,请选此项。 “密钥不再被使用” 如果您已决定让这把密钥退休,请选此项 “用户标识不再有效” 如果这个用户标识不再被使用了,请选此项;这通常用表明某个电子邮 件地址已不再有效。 您目前为“%s”的签名已经过期了。 您目前为“%s”的签名是一份本地签名。 您的决定是什么?您的选择? 您的选择?(输入‘?’以获得更多的信息):您的系统无法显示 2038 年以后的日期。 不过,它可以正确处理 2106 年之前的年份。 [ 完全 ][未定义][已过期][已吊销][ 未知 ][找不到用户标识][文件名][ 勉强 ][未设定][吊销][自身签名][ 绝对 ][不确定]‘%s’已被压缩 “%s”不是一个 JPEG 文件 ‘%s’不是一个普通文件――已忽略 ‘%s’不是一个有效的字符集 ‘%s’不是一个有效的长式钥匙号 ‘%s’不是一个有效的签名过期日期 准备导出一把不受保护的子钥 尚未配置管理员命令的权限 ‘%s’操作不为‘%s’公钥服务器所支持 在智能卡上添加一把密钥增加一个照片标识增加一把吊销密钥添加一个子钥增加一个用户标识有歧义的选项‘%s’ 匿名收件者;正在尝试使用私钥 %s …… ASCII 封装头:ASCII 封装:%s 假定 %s 为加密过的数据 假定密钥 %s 的签名由于某个未知的关键位出错而损坏 假定被签名的数据是‘%s’ 验证签名时自动下载密钥自动获取‘%s’,通过 %s 损坏的多精度整数(MPI)URI 已损坏证书已损坏密钥已损坏错误的密码公钥已经损坏私钥已经损坏签名已经损坏尽量减少提示信息二进制build_packet 失败:%s cC缓存钥匙环‘%s’ 不能存取 %s――无效的 OpenPGP 卡? 无法存取‘%s’:%s 无法关闭‘%s’:%s 无法连接至‘%s’:%s 无法建立‘%s’:%s 不能创建备份文件‘%s’:%s 无法建立目录‘%s’:%s 不能为‘%s’创建锁定 无法禁用核心内存转储:%s 在批处理模式中无法完成此操作 在批处理模式中,没有“--yes”就无法这么做 当 pbits=%u 而 qbits=%u 时不能生成质数 少于 %d 位时不能生成质数 无法操作公钥算法 %d 无法处理长于 %d 字符的文本行 无法处理这些有歧义的签名 无法锁定‘%s’ 无法锁定‘%s’:%s 无法打开‘%s’ 无法打开‘%s’: %s 无法打开有签名的数据‘%s’ 无法打开钥匙环在批处理模式中无法查询密码 无法读取‘%s’:%s 无法获得文件‘%s’的信息: %s 在此 S2K 模式下无法使用对称的 ESK 包 无法写入‘%s’:%s 已取消用户取消 cancel|cancel无法将 PGP 2.x 样式的密钥设为指定吊销者 对称加密无法避免生成弱密钥;已经尝试 %d 次! 智能卡不支持散列算法 %s 智能卡被永久锁定! 读卡器不可用 卡号:更改获取密钥的 URL更改一个 CA 指纹更改智能卡的 PIN更改智能卡持有人的姓名更改智能卡持有人的性别更改智能卡上的数据变更密钥或所选子钥的使用期限更改首选语言首选更改登录名更改信任度更改密码检查签名检查已建立的签名时发生错误: %s 正在检查信任度数据库 校验和错误对称加密算法 %d%s 未知或已停用 冒号缺失压缩不可用的用户标识并删除所有签名压缩不可用的用户标识并删除不可用的签名需要的完全可信签名数一定要大于 0 冲突的指令 无法解析公钥服务器 URL 导入私钥时创建对应的公钥输出经 ASCII 封装创建于:%s缺少创建时间戳 数据未被保存;请用“--output”选项来保存它们 解开 ASCII 封装失败:%s 解密数据(默认)解密失败:%s 解密成功 删除选定的子钥删除选定的用户标识删除所选用户标识上的签名删除密钥区块时失败:%s 深度:%d 有效性:%3d 已签名:%3d 信任度:%d-,%dq,%dn,%dm,%df,%du 已创建目录‘%s’ 禁用密钥已禁用列出密钥时显示用户标识验证签名时显示照片标识不删除使用过的临时文件不做任何改变导入后不更新信任度数据库提升带有有效 PKA 数据的签名的信任度启用密钥进行 ASCII 封装失败:%s 加密数据以 %lu 个密码加密 由 %s 密钥加密、钥匙号为 %s 由 %u 位的 %s 密钥加密,钥匙号为 %s、生成于 %s 以 1 个密码加密 以未知的算法 %d 加密 在 --pgp2 模式下加密报文需要 IDEA 算法 仅使用对称加密建立‘%s’时发生错误:%s 建立钥匙环‘%s’时发生错误:%s 生成密码的时候发生错误:%s 在‘%s’中寻找信任度记录时出错:%s 取得当前密钥信息时出错:%s 获取新 PIN 时出错:%s ‘%s’中出错:%s 结尾行有问题 读取‘%s’时出错:%s 读取应用程序数据时出错 读取指纹 D0 出错 读取密钥区块时发生错误:%s 读取私钥区块“%s”时出错:%s 从智能卡中获取 CHV 状态时出错 写入钥匙环‘%s’时出错: %s 写入公钥钥匙环‘%s’时发生错误: %s 写入私钥钥匙环‘%s’时发生错误: %s 现有的密钥将被替换 已过期已过期:%s有效至:%s导出属性用户标识(一般为照片标识)导出密钥把密钥导出到某个公钥服务器上导出被标记为“敏感”的吊销密钥导出被标记为局部的密名不允许导出私钥 这一编译版本不支持外部调用公钥服务器 由于配置文件权限不安全,外部程序调用被禁用 初始化信任度数据库失败:%s 重新建立钥匙环缓存失败: %s 无法存储创建日期:%s 无法存储指纹:%s 无法存储密钥:%s 无法取消保护子钥:%s 女性根据智能卡中指定的 URL 获取密钥文件关闭错误文件建立错误文件删除错误文件已存在文件打开错误文件读取错误文件重命名错误文件写入错误将所选的用户标识设为首选用户标识必须强行使用的 %s (%d)对称加密算法不在收件者的首选项中 ‘%s’的 fstat 在 %s 中出错:%s fstat(%d) 在 %s 中出错:%s 完全常规错误生成与 PGP 2.x 兼容的报文生成一副新的密钥对生成一份吊销证书生成新的密钥生成密钥失败 生成新密钥 正在产生私钥保护使用的旧式 16 位校验和 gpg-agent 在此次会话中无法使用 不支持 gpg-agent 协议版本 %d 获取密钥时使用密钥上的 PKA 记录使用密钥中指定的首选公钥服务器 URLiImMqQsS从公钥服务器上导入密钥导入被标记为局部的签名导入/合并密钥不允许导入私钥 在搜索结果中包含已吊销的密钥按钥匙号搜索时包含子钥输入行 %u 太长或者行末的换行符 LF 遗失 输入行长度超过 %d 字符 无效无效的 S2K 模式;必须是 0,1 或 3 无效的参数无效的 ASCII 封装格式无效的 ASCII 封装头:无效的 ASCII 封装:一行超过 %d 字符 无效的 auto-key-locate 清单 无效的明文签名头 以连字符开头的行格式错误:无效的默认首选项 无效的默认验证级别;一定要是 0,1,2 或 3 无效的导出选项 指纹无效无效的‘%s’散列算法 无效的导入选项 首选项字符串里有无效项‘%s’ 无效的钥匙环无效的公钥服务器选项 无效的公钥服务器协议(us %d!=handler %d) 无效的列表选项 无效的最小验证级别;一定要是 1,2 或 3 无效包无效的密码无效的个人对称加密算法首选项 无效的个人压缩算法首选项 无效的个人散列算法首选项 跳过无效的 64 进制字符 %02x 在 proc_tree() 中检测到无效的根包 无效的 OpenPGP 卡结构(D0 0x93) 无效的数值 无效的校验选项 强烈建议您更新您的首选项并重新分发这把密钥, 在公钥服务器上找不到密钥“%s” 密钥‘%s’找不到:%s 密钥 %s:没有有效的用户标识 密钥 %s 被标记为绝对信任 密钥 %s 在信任度数据库中重复出现 密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题) 密钥 %s 是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题) 密钥 %s:“%s”%d 个新的签名 密钥 %s:“%s”%d 个新的子钥 密钥 %s:“%s”%d 个新的用户标识 密钥 %s:“%s”%d 个签名被清除 密钥 %s:“%s”%d 个签名被清除 密钥 %s:“%s”%d 个用户标识被清除 密钥 %s:“%s”%d 个用户标识被清除 密钥 %s:“%s”1 个新的签名 密钥 %s:“%s”1 个新的子钥 密钥 %s:“%s”一个新的用户标识 密钥 %s:“%s”未改变 密钥 %s:已新增吊销证书“%s” 密钥 %s:“%s”吊销证书已被导入 密钥 %s:PGP 2.x 样式的密钥――已跳过 密钥 %s:PKS 子钥破损已修复 密钥 %s:受信任,已接受 密钥 %s:已接受不含自身签名的用户标识“%s” 密钥 %s:已在私钥钥匙环中 密钥 %s:无法定位原始的密钥区块:%s 密钥 %s:无法读取原始的密钥区块: %s 密钥 %s:已新增直接密钥签名 密钥 %s:与我们的副本不吻合 密钥 %s:检测到重复的用户标识――已合并 密钥 %s:无效的吊销证书:%s――已拒绝 密钥 %s:无效的吊销证书:%s――已跳过 密钥 %s:用户标识“%s”自身签名无效 密钥 %s:无效的子钥绑定 密钥 %s:无效的子钥吊销 密钥 %s:密钥在智能卡上——已跳过 密钥 %s:新密钥――已跳过 密钥 %s:没有公钥――无法应用吊销证书 密钥 %s:受信任的密钥没有公钥――已跳过 密钥 %s:没有可供绑定的子钥 密钥 %s:没有用于密钥吊销的子钥 密钥 %s:没有子钥绑定签名所需的子钥 密钥 %s:没有子钥吊销签名所需的子钥 密钥 %s:没有用户标识 密钥 %s:签名没有用户标识 密钥 %s:没有有效的用户标识 密钥 %s:不可导出的签名(验证级别 0x%02X)――已跳过 密钥 %s:未被保护――已跳过 密钥 %s:公钥“%s”已导入 密钥 %s:找不到公钥:%s 密钥 %s:已删除多重子钥绑定 密钥 %s:已删除多重子钥吊销 密钥 %s:吊销证书位置错误――已跳过 密钥 %s:私钥已导入 密钥 %s:找不到私钥:%s 密钥 %s:私钥使用了无效的加密算法 %d――已跳过 密钥 %s:无相应公钥的私钥――已跳过 密钥 %s:已跳过子钥 密钥 %s:已跳过用户标识“%s” 密钥 %s:子钥签名位置错误――已跳过 密钥 %s:与预期不符的签名验证级别(0x%02X)――已跳过 密钥 %s:不支持的公钥算法 密钥 %s:用户标识“%s”使用了不支持的公钥算法 密钥已存在 导出密钥失败:%s 密钥已生成(耗时 %d 秒) 密钥是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题) 密钥是在 %lu 秒后的未来生成的(可能是因为时空扭曲或时钟的问题) 密钥未被标示为不安全――不能与假的随机数发生器共同使用! 在公钥服务器上找不到密钥 针对密钥的操作无法实现:%s 密钥块资源‘%s’:%s 钥匙环‘%s’已建立 公钥服务器通讯错误:%s 公钥服务器未发送 VERSION 公钥服务器错误公钥服务器内部错误 从公钥服务器接收失败:%s 从公钥服务器更新失败:%s 搜寻公钥服务器失败:%s 上传至公钥服务器失败:%s 公钥服务器超时 密钥尺寸无效:改用 %u 位 密钥尺寸舍入到 %u 位 列太长列出所有可用数据列出并检查密钥签名列出密钥和用户标识列出密钥列出密钥和指纹列出密钥和签名列出首选项(专家模式)列出首选项(详细模式)列出私钥生成一份分离的签名把时间戳矛盾仅视为警告make_keysig_packet 失败: %s 男性异常的 CRC GPG_AGENT_INFO 环境变量格式错误 被变造过的用户标识勉强需要的勉强可信签名数一定要大于 1 最大验证深度一定要介于 1 和 255 之间 更改或解锁 PIN 的菜单将备份密钥转移到智能卡上将一把密钥移动到智能卡上正在把密钥的签名移动到正确的位置去 nN多层明文签名 网络错误从不永不过期新的配置文件‘%s’已建立 下次信任度数据库检查将于 %s 进行 no在‘%s’组定义里找不到等号(=) 没有智能卡没有相对应的公钥:%s 无数据没有默认的私钥钥匙环: %s 检测不到熵搜集模块 没有处理‘%s’公钥服务器的程序 公钥服务器无动作! 未给出公钥服务器(使用 --keyserver 选项) 不需要检查信任度数据库 使用‘%s’信任模型时不需要检查信任度数据库 使用‘%s’信任模型时不需要更新信任度数据库 没有设置照片查看程序 不支持远程调用 没有找到“%s”的吊销密钥 没有私钥 公钥 %s 没有相对应的私钥――忽略 未找到签名 不含签名的数据 没有这个用户标识没有找到任何绝对信任的密钥 找不到有效的 OpenPGP 数据。 没有有效的地址 找不到可写的钥匙环:%s 找不到可写的公钥钥匙环:%s 找不到可写的私钥钥匙环:%s 不是一份分离的签名 不是一个 OpenPGP 卡未被加密可选未被处理未被支持注意:随机数种子文件为空 注意:随机数种子文件未被更新 oO很好,我们就是匿名收件者。 okay|ok不支持旧式的 DEK 编码 旧式(PGP 2.x)签名 只接受对已有密钥的更新安全内存未初始化,不能进行操作 配置文件‘%s’:%s 原始文件名 =‘%.*s’ 信任度信息已被清除 没有信任度密码由未知的散列算法 %d 生成 密码再次输入时与首次输入不符;请再试一次请执行一次 --check-trustdb 请输入电子邮件地址(可选项,但强烈推荐使用)请参见 %s 以得到更多信息。 请访问 http://www.gnupg.org/documentation/faqs.html 以获得更详细的信息 请以“%s%s”代替 请稍候,正在生成密钥…… 首选项‘%s’重复 文件先于预期结束(CRC 部分未结束) 文件先于预期结束(于结尾处) 文件先于预期结束(没有 CRC 部分) 打印智能卡状态处理加密包有问题 代理程序有问题――正在停用代理程序 覆盖前先询问保护算法 %d%s 未被支持 不支持保护散列 %d 公钥和私钥已经生成并经签名。 公钥 %s 在其签名后 %lu 秒生成 公钥 %s 在其签名后 %lu 秒生成 找不到公钥 %s:%s 公钥解密失败:%s 公钥与私钥不吻合! 公钥加密过的数据:完好的数据加密密钥 公钥是 %s 找不到公钥绝对信任的密钥 %s 的公钥未被找到 qQquit离开这个菜单封装里出现括上的可打印字符――可能是有缺陷的信件传输程序造成的 以避免可能的算法不匹配问题 读取‘%s’错误:%s 正在从‘%s’读取 从‘%s’读取选项 无法读出公钥:%s 正在从标准输入读取 ... 吊销原因:%d 个密钥正从 %s 得到更新 1 个密钥正从 %s 得到更新 导入后尽可能清除密钥中的可选部分导出时尽可能清除密钥中的可选部分从公钥钥匙环里删除密钥从私钥钥匙环里删除密钥从导出的子钥中删除所有密码导入后清除密钥中无用的部分导出时清除密钥中的不可用部分将‘%s’重命名为‘%s’时失败:%s 导入时修复 PKS 公钥服务器导致的损坏下载密钥 %s,从 %s 下载密钥‘%s’,从 %s 服务器 %s 资源限制响应未包含 RSA 余数 响应未包含 RSA 公钥指数 响应未包含公钥数据 吊销注释:吊销密钥或选定的子钥吊销选定的用户标识吊销所选用户标识上的签名已吊销由您的密钥 %s 于 %s 吊销 已吊销:%s舍入到 %u 位 保存并离开在公钥服务器上搜寻密钥搜索“%s”,在 %s 上 搜索“%s”,在 %s 服务器 %s 上 在 %s 上搜索名字 在 %s 服务器 %s 上搜索名字 找不到私钥“%s”:%s 私钥已存储在智能卡上 私钥不可用私钥部分不可用 私钥部分不可用 选择子钥 N选择用户标识 N所选的证书散列算法无效 所选的对称加密算法无效 所选的压缩算法无效 所选的散列算法无效 选择 OpenPGP 时失败:%s 将密钥‘%s’上传到 %s 将密钥‘%s’上传到 %s 服务器 %s 为所选用户标识的设定注记设定所选用户标识的首选项设定所选用户标识的首选公钥服务器的 URL列出签名时显示 IETF 标准注记验证签名时显示 IETF 标准注记显示管理员命令列出签名时显示 IETF 标准注记验证签名时显示所有注记列出签名时显示过期日期显示密钥指纹在签名验证中只显示主用户标识列出签名时显示策略 URL验证签名时显示策略 URL列出密钥时显示首选公钥服务器 URL验证签名时显示首选公钥服务器 URL列出密钥时显示已吊销或已过期的子钥列出密钥时显示已吊销或已过期的用户标识验证密钥时显示已吊销或已过期的子钥显示选定的照片标识列出密钥时显示钥匙环的名称显示这份在线说明列出密钥时显示用户标识的有效性验证签名时显示用户标识的有效性列出签名时显示用户提供的注记验证签名时显示用户提供的注记为某把密钥添加签名为某把密钥添加本地签名编辑某把密钥或为其添加签名为所选用户标识添加签名[* 参见下面的相关命令]为所选用户标识添加本地签名为所选用户标识添加不可吊销签名为所选用户标识添加信任签名签名验证已被抑制 目前已创建的签名:%lu 由您的密钥 %s 于 %s%s%s 签名 签名时失败: %s 签名的子钥 %s 已经交叉验证 正在签名:“%s”已跳过:%s “%s”已跳过:重复 已跳过:公钥已被设定 已跳过:公钥已被设为默认收件者 已跳过:私钥已存在 跳过 %d 样式的区块 跳过用户标识“%s”的 v3 自身签名 独立的吊销证书――请用“gpg --import”来应用 等级 0x%02x 的独立签名 向智能卡上存储密钥时失败:%s 子钥 %s 不签名,因此不需要交叉验证 %d 类别的子包设定了关键位 对称加密‘%s’失败:%s 调用外部程序时发生系统错误:%s 从这个钥匙环里取用密钥文本模式给定的的验证策略 URL 无效 给定的首选公钥服务器 URL 无效 给定的签名策略 URL 无效 签名无法被验证。 请记住签名文件(.sig或.asc) 应该是在命令行中给定的第一个文件。 公钥“%s”有对应的私钥! 这是一把由 PGP 生成的 ElGamal 密钥,用于签名不安全!这把密钥已被指定为一个吊销者 这可能由于遗失自身签名所致 %s 也许不能使用这个报文 在这个操作平台上调用外部程序时需要临时文件 时间戳冲突在私钥和公钥清单间切换设定 PIN 签名是否必须太多对称加密算法首选项 太多首选压缩算法 太多散列算法首选项 pk 缓存里项目太多――已禁用 信任度数据库错误信任记录 %lu 不属于所请求的类别 %d 信任记录 %lu,请求类别 %d:读取失败:%s 信任记录 %lu,类别 %d:写入失败:%s 信任度:%s信任度数据库记录 %lu:lseek 失败:%s 信任度数据库记录 %lu:write 失败 (n=%d): %s 信任度数据库处理量过大 信任度数据库:lseek 失败:%s 信任度数据库:read 失败(n=%d):%s 信任度数据库:同步失败:%s PKA 信息有效,信任级别调整到“完全” PKA 信息无效,信任级别调整到“从不” 绝对无法显示照片标识! 无法执行外部程序 无法执行程序‘%s’:%s 无法在命令解释环境中执行‘%s’:%s 无法打开 JPEG 文件‘%s’:%s 无法读取外部程序响应:%s 无法把运行路径设成 %s 无法更新信任度数据库版本记录:写入失败:%s 您正要用来加密的所有密钥都不能使用 IDEA 算法。 无法使用未知的信任模型(%d)――假定使用 %s 信任模型 未压缩|无未定义与预期不符的 ASCII 封装:非预期的数据未实现的对称加密算法未实现的公钥算法未知未知的对称加密算法未知的压缩算法未知的配置项‘%s’ 未知的默认收件者“%s” 未知的散列算法不支持的密钥保护算法 未知的选项 '%s' 未知的包类型未知的保护算法 未知的公钥算法未知的签名等级未知的版本外部程序异常退出 未定义未被支持的 URI无法使用的公钥算法不可用的公钥不可用的私钥从公钥服务器更新所有的本地密钥更新失败:%s 更新私钥失败:%s 更新信任度数据库可用于:%s用法:gpg [选项] 指定输出文件使用标准的文本模式请先使用“--delete-secret-keys”选项来删除它。 行为严格遵循 OpenPGP 定义向公钥服务器辅助程序传递数据时使用临时文件使用这个用户标识来签名或解密用户标识“%s”已经被吊销。 用户标识:“%s” 使用 %s 信任模型 使用对称加密算法 %s 使用子钥 %s 而非主钥 %s 使用 PKA 数据验证签名的有效性有效性:%s详细模式目前禁止通过此命令验证管理员 PIN 验证 CHV%d 失败:%s 验证签名验证 PIN 并列出所有数据等待‘%s’上的锁 弱密钥建立了弱密钥――正在重试 加密过的会话密钥尺寸(%d)诡异 不会在内存不安全的情况下运行,原因是 %s 正在写入直接签名 正在写入密钥绑定签名 正在将公钥写至`%s' 向‘%s’写入私钥占位符 正在将私钥写至`%s' 正在写入自身签名 正在写入‘%s’ 正在写入到标准输出 使用了错误的私钥yYyes您在 --pgp2 模式下只能够使用 PGP 2.x 样式的密钥来做明文签名 您在 --pgp2 模式下只能够使用 PGP 2.x 样式的密钥来做分离签名 在 --pgp2 模式中,您只能使用 2048 位及以下的 RSA 密钥加密 您只有在 --pgp2 模式下才能做分离式或明文签名 您可以这样更新您的首选项:gpg --edit-key %s updpref save 您在 --pgp2 模式下时,不能同时签名和加密 您不能将某把密钥设为它自己的指定吊销者 您不能在 %s 模式下使用 --symmetric -encrypt 使用 --symmetric --encrypt 时不能使用 --s2k-mode 0 您不能在 %s 模式下使用 --symmetric --sign -encrypt 使用 --symmetric --sign --encrypt 时不能使用 --s2k-mode 0 您找到一个程序缺陷了……(%s:%d) 您不该将 %s 用于 %s 模式中 您不能在 %s 模式下使用‘%s’对称加密算法 您不能在 %s 模式下使用‘%s’压缩算法 您不能在 %s 模式下使用‘%s’散列算法 启用 --pgp2 时您应该只使用文件,而非管道 |AN|新的管理员 PIN|FD|把状态信息写入文件描述符 FD|某甲|为收件者“某甲”加密新的 PIN|N|设定压缩等级为 N (0 表示不压缩)|[文件名]|生成一份明文签名|[文件名]|生成一份签名|算法 [文件]|使用指定的散列算法打印报文散列值||请输入 PIN%%0A[完成的签字:%lu]gnupg-1.4.20/po/sv.po0000644000175000017500000057370512635457220011274 00000000000000# Swedish messages for gnupg # Copyright (C) 1999-2008 Free Software Foundation, Inc. # Daniel Nylander , 2006, 2007, 2008. # Per Tunedal , 2004. # Daniel Resare , 1999-2002. # # =================================================== # This a completely revised and extended translation. # All translations have been revised and updated 2002. # In 2004 new strings where translated and most errors # where corrected. The translations were checked for # consistency and some expressions where given new # translations. # 2004/12/01 Per Tunedal # =================================================== # # First translator Daniel Resare , 1999-2002, # who sends his thanks to André Dahlqvist # and to his wife Olivia . # # $Id$ # msgid "" msgstr "" "Project-Id-Version: gnupg 2.0\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:17+0200\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "kan inte generera primtal med pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "kan inte generera ett primtal med mindre än %d bitar\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "ingen entropi-insamlingsmodul identifierades\n" # se förra kommentaren #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "kan inte låsa \"%s\": %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "väntar på lås på \"%s\"...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "kan inte öppna \"%s\": %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "kan inte ta status på \"%s\": %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "\"%s\" är inte en vanlig fil - ignoreras\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "observera: filen random_seed är tom\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "VARNING: ogiltig storlek på filen random_seed - används inte\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "kan inte läsa \"%s\": %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "observera: filen random_seed är inte uppdaterad\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "kan inte skapa \"%s\": %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "kan inte skriva \"%s\": %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "kan inte stänga \"%s\": %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "VARNING: använder en osäker slumptalsgenerator!!\n" #: cipher/random.c:894 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 "" "Slumptalsgeneratorn är endast en temporär lösning -\n" "den är inte på något sätt en stark slumptalsgenerator!\n" "\n" "ANVÄND INTE DATA SOM GENERERATS AV DETTA PROGRAM!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Var god vänta, entropidata samlas in. Arbeta lite om det\n" "hjälper dig från att bli uttråkad, det förbättrar kvaliteten på\n" "insamlat entropidata.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Inte tillräckligt med slumpmässiga byte tillgängliga. Utför lite arbete\n" "för att ge operativsystemet en chans att samla in mer entropidata!\n" "(behöver %d fler byte)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "misslyckades med att lagra fingeravtrycket: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "misslyckades med att lagra datum för skapandet: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "läsning av publik nyckel misslyckades: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "svaret innehåller inte publikt nyckeldata\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "svaret innehåller inte en RSA-modulus\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "svaret innehåller inte den publika RSA-exponenten\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Ange PIN-koden%%0A[signaturer kvar: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 #, fuzzy msgid "||Please enter the PIN" msgstr "||Ange PIN-koden%%0A[signaturer kvar: %lu]" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "PIN-återanrop returnerade fel: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN-kod för CHV%d är för kort; minimumlängd är %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "validering av CHV%d misslyckades: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "fel när CHV-status hämtades från kortet\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "kortet är permanent låst!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "%d försök för Admin PIN-koden återstår innan kortet låses permanent\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, fuzzy, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "||Ange PIN-koden%%0A[signaturer kvar: %lu]" #: g10/app-openpgp.c:1674 #, fuzzy msgid "|A|Please enter the Admin PIN" msgstr "||Ange PIN-koden%%0A[signaturer kvar: %lu]" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "åtkomst till administrationskommandon är inte konfigurerat\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "de hemliga nyckeldelarna är inte tillgängliga\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Välj anledning till varför nyckeln spärras:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, fuzzy, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "PIN-kod för CHV%d är för kort; minimumlängd är %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Ny Admin PIN-kod" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Ny PIN-kod" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "fel när ny PIN-kod hämtades: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "fel vid läsning av programdata\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "fel vid läsning av fingeravtryckets DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "nyckeln finns redan\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "befintlig nyckel kommer att ersättas\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "genererar ny nyckel\n" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "genererar ny nyckel\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "tidsstämpel för skapandet saknas\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSA modulus saknas eller är inte %d bitar stor\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "Publik RSA-exponent saknas eller större än %d bitar\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "RSA-primtal %s saknas eller inte %d bitar stor\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "misslyckades med att lagra nyckeln: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "var god vänta under tiden nyckeln genereras ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "nyckelgenereringen misslyckades\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "nyckelgenereringen är färdig (%d sekunder)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "ogiltig struktur för OpenPGP-kort (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "kortet har inte stöd för sammandragsalgoritmen %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "signaturer skapade hittills: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "validering av Admin PIN-kod är för närvarande förbjudet genom detta " "kommando\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "kan inte komma åt %s - ogiltigt OpenPGP-kort?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "ASCII-skal: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "ogiltig rubrikrad i ASCII-skalet: " #: g10/armor.c:459 msgid "armor header: " msgstr "ASCII-skal: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "ogiltig rubrikrad i klartextsignatur\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "okänd ASCII-skalrubrik: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "flera klartextsignaturer går in i varandra\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "oväntat skal: " # rader i klartexten som inleds med bindestreck får ett extra bindestreck vid klartextsignatur (för att lättare hitta "---- Begin ..." #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "ogiltig rad som börjar med bindestreck: " # överhoppad eller hoppades över? #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "ogiltigt radix64-tecken %02X hoppades över\n" # CRC Cyclic Redundancy Checksum används för att upptäcka fel i ascii-skalet. Används allmänt, trots att det inte höjer säkerheten. #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "för tidigt filslut (ingen CRC-summa)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "för tidigt filslut (i CRC-summan)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "felformaterad CRC-summa\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC-fel; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "för tidigt filslut (i den avslutande raden)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "fel i avslutande rad\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "hittade ingen giltig OpenPGP-data.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "ogiltigt ASCII-skal: raden är längre än %d tecken\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "tecken kodade enligt \"quoted printable\"-standarden hittades i skalet - " "detta\n" "beror sannolikt på att en felaktig e-postserver eller e-postklient har " "använts\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGP-kort är inte tillgängligt: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "OpenPGP-kort nr. %s identifierades\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "kan inte göra detta i satsläge\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Detta kommando är inte tillåtet när du är i %s-läge.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Vad väljer du? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[inte inställt]" #: g10/card-util.c:512 msgid "male" msgstr "man" #: g10/card-util.c:513 msgid "female" msgstr "kvinna" #: g10/card-util.c:513 msgid "unspecified" msgstr "ej angiven" #: g10/card-util.c:540 msgid "not forced" msgstr "inte tvingad" #: g10/card-util.c:540 msgid "forced" msgstr "tvingad" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Fel: Endast ren ASCII tillåts för närvarande.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Fel: Tecknet \"<\" får inte användas.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Fel: Dubbla blanksteg tillåts inte.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Kortinnehavarens efternamn: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Kortinnehavarens förnamn: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Fel: Fullständigt namn för långt (gränsen är %d tecken).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "Url för att hämta publik nyckel: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Fel: URL:en är för lång (gränsen är %d tecken).\n" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "fel när nyckelringen \"%s\" skapades: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "fel vid läsning av \"%s\": %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "Fel när \"%s\" skapades: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Inloggningsdata (kontonamn): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Fel: Inloggningsdata är för långt (gräns är %d tecken).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Privat DO-data: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Fel: Privat DO för långt (gränsen är %d tecken).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Språkinställningar: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Fel: ogiltig längd på inställningssträngen\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Fel: ogiltiga tecken i inställningssträngen.\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Kön ((M)an, Kvinna(F) eller blanksteg): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Fel: ogiltigt svar.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA-fingeravtryck: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Fel: ogiltigt formaterat fingeravtryck.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "nyckelåtgärden är inte möjlig: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "inte ett OpenPGP-kort" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "fel när aktuell nyckelinformation hämtades: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Ersätt existerande nyckel? (j/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Vilken nyckelstorlek vill du ha? (%u) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Vilken nyckelstorlek vill du ha? (%u) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Vilken nyckelstorlek vill du ha? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "avrundade uppåt till %u bitar\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s nyckelstorlekar måste vara inom intervallet %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "fel vid läsning av hemligt nyckelblock \"%s\": %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Skapa säkerhetskopia av krypteringsnyckel utanför kortet? (J/n) " #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "hemlig nyckel redan lagrad på ett kort\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Ersätt existerande nycklar? (j/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Observera dock att fabriksinställningarna för PIN-koderna är\n" " PIN-kod = \"%s\" Admin PIN-kod = \"%s\"\n" "Du bör ändra dem med kommandot --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Välj vilken typ av nyckel som ska genereras:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Signeringsnyckel\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Krypteringsnyckel\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Autentiseringsnyckel\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Ogiltigt val.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Välj var nyckeln ska sparas:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "okänd nyckelskyddsalgoritm\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "hemliga delar av nyckeln är inte tillgängliga.\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "hemlig nyckel redan lagrad på ett kort\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "avsluta denna meny" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "visa administratörskommandon" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "visa denna hjälp" #: g10/card-util.c:1687 msgid "list all available data" msgstr "lista allt tillgängligt data" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "ändra kortinnehavarens namn" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "ändra url för att hämta nyckel" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "hämta nyckel som anges i kortets url" #: g10/card-util.c:1693 msgid "change the login name" msgstr "ändra inloggningsnamnet" # originalet borde ha ett value #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "ändra språkinställningarna" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "ändra kortinnehavarens kön" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "ändra ett CA-fingeravtryck" # den låter skum #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "växla flagga för att tvinga signatur-PIN-kod" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "generera nya nycklar" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "meny för att ändra eller avblockera PIN-koden" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "validera PIN-koden och lista allt data" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "Kommandon endast för administratör\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "Administrationskommandon tillåts\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "Administrationskommandon tillåts inte\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Ogiltigt kommando (försök med \"help\")\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "kortläsaren är inte tillgänglig\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Mata in kortet och tryck Return eller \"c\" för att avbryta: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "val av openpgp misslyckades: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Ersätt det nuvarande kortet med det kort som har serienumret:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "Tryck Return när du är färdig eller \"c\" för att avbryta: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Ange ny Admin PIN-kod: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Ange ny PIN-kod: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Ange Admin PIN-kod: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Ange PIN-kod: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Upprepa denna PIN-kod: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN-kod repeterades inte korrekt; försök igen" # se förra kommentaren #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "kan inte öppna \"%s\"\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output kan inte användas för detta kommando\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "nyckeln \"%s\" hittades inte: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "fel vid läsning av nyckelblock: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(om du inte anger nyckeln med hjälp av fingeravtrycket)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "kan inte göra så i satsläge utan \"--yes\"\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Ta bort denna nyckel från nyckelringen? (j/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Detta är en hemlig nyckel! - verkligen ta bort den? (j/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "misslyckades med att radera nyckelblock: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "raderat information om ägartillit\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "det finns en hemlig nyckel för publika nyckeln \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "använd flaggan \"--delete-secret-keys\"för att ta bort den först.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "fel när lösenfras skapades: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "kan inte använda symmetriska ESK-paket pga S2K-läge\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "använder chiffret %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "\"%s\" är redan komprimerad\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "VARNING: \"%s\" är en tom fil\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "du kan endast kryptera till RSA-nycklar som är högst 2048 bitar långa i --" "pgp2-läge\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "läser från \"%s\"\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "kan inte använda IDEA-chiffer för alla nycklar du krypterar till.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "VARNING: tvinga symmetriskt chiffer med %s (%d) strider mot " "mottagarinställningarna\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "VARNING: tvinga komprimeringsalgoritmen %s (%d) strider mot " "mottagarinställningarna\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "tvinga symmetriskt chiffer med %s (%d) strider mot mottagarinställningarna\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "du kan inte använda %s när du är i %s-läget\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s krypterad för: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s-krypterad data\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "krypterad med en okänd algoritm %d\n" # I vissa algoritmer kan svaga nycklar förekomma. Dessa ska inte användas. #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "VARNING: meddelandet krypterades med en svag nyckel\n" "i den symmetriska krypteringen.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problem vid hanteringen av krypterat paket\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "ingen körning av fjärrprogram stöds\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "%s: kan inte skapa katalog: %s\n" # Behörighet att komma åt inställningarna, tror jag. Inte behörigheter i inställningsfilen. #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "anrop av externa program är inaktiverat pga osäkra behörigheter för\n" "inställningsfilen\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "denna plattform kräver temporärfiler vid anrop till externa program\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "kunde inte köra programmet \"%s\": %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "kunde inte köra skalet \"%s\": %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "systemfel när externa program anropades: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "externt program avslutades felaktigt\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "kunde inte köra det externa programmet\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "kan inte läsa svaret från det externa programmet: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "VARNING: kan inte ta bort tempfil (%s) \"%s\": %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "VARNING: kunde inte ta bort temp-katalogen \"%s\": %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "exportera signaturer som är märkta som endast lokala" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "exportera attribut i användaridentiteter (vanligtvis foto-id)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "exportera spärrnycklar markerade som \"känslig\"" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "ta bort lösenfrasen från exporterade undernycklar" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "ta bort oanvändbara delar från nyckeln vid exportering" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "ta bort så mycket som möjligt från nyckeln vid exportering" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "export av hemliga nycklar tillåts inte\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "nyckeln %s: inte skyddad - hoppade över\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "nyckeln %s: nyckel av PGP 2.x-typ - hoppade över\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "nyckeln %s: nyckelmaterial på kortet - hoppade över\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "på väg att exportera en oskyddad undernyckel\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "misslyckades med att ta bort skydd på undernyckel: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "VARNING: hemliga nyckeln %s har ingen enkel SK-kontrollsumma\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "VARNING: ingenting exporterat\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Kommandon:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[fil]|skapa en signatur" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[fil]|skapa en klartextsignatur" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "skapa signatur i en separat fil" #: g10/gpg.c:393 msgid "encrypt data" msgstr "kryptera data" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "endast symmetrisk kryptering" # gnupg dekrypterar data om inget kommando anges dvs. kommandot "decrypt" behöver inte användas. #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "dekryptera data (standard)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "validera en signatur" #: g10/gpg.c:401 msgid "list keys" msgstr "lista nycklar" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "lista nycklar och signaturer" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "lista och kontrollera nyckelsignaturer" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "lista nycklar och fingeravtryck" #: g10/gpg.c:406 msgid "list secret keys" msgstr "lista hemliga nycklar" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "generera ett nytt nyckelpar" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "ta bort nycklar från den publika nyckelringen" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "ta bort nycklar från den hemliga nyckelringen" #: g10/gpg.c:411 msgid "sign a key" msgstr "signera en nyckel" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "signera en nyckel lokalt" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "signera eller redigera en nyckel" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "generera ett spärrcertifikat" #: g10/gpg.c:416 msgid "export keys" msgstr "exportera nycklar" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exportera nycklar till en nyckelserver" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importera nycklar från en nyckelserver" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "sök efter nycklar hos en nyckelserver" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "uppdatera alla nycklar nycklar från en nyckelserver" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importera/slå samman nycklar" #: g10/gpg.c:429 msgid "print the card status" msgstr "skriv ut kortstatus" #: g10/gpg.c:430 msgid "change data on a card" msgstr "ändra data på ett kort" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "ändra PIN-kod för ett kort" #: g10/gpg.c:440 msgid "update the trust database" msgstr "uppdatera tillitsdatabasen" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [filer]|skriv ut kontrollsummor" # Här bruksanvisning för kommandoraden. Resultatet har jag översatt med "inställningar", eftersom flaggorna även kan förekomma i en inställningsfil. #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Flaggor:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "skapa utdata med ett ascii-skal" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NAMN|kryptera för NAMN" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "använd denna användaridentitet för att signera eller dekryptera" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|ställ in komprimeringsnivån till N (0 för att inaktivera)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "använd \"ursprunglig text\"-läget" #: g10/gpg.c:486 msgid "use as output file" msgstr "använd som fil för utdata" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "utförlig" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "gör inga ändringar" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "fråga innan överskrivning" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "använd strikt OpenPGP-beteende" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "generera PGP 2.x-kompatibla meddelanden" # inställningar istället för flaggor? # Nej, här är det bruksanvisningen för kommandoraden. #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Se manualsidan för en fullständig lista över alla kommandon och flaggor)\n" #: g10/gpg.c:576 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" "Exempel:\n" "\n" "-se -r Bosse [fil] signera och kryptera för användaren Bosse\n" "--clearsign [fil] skapa en klartextsignatur\n" "--detach-sign [fil] skapa signatur i en separat fil\n" "--list-keys [namn] visa nycklar\n" "--fingerprint [namn] visa fingeravtryck\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Rapportera fel till \n" "Skicka synpunkter på översättningen till \n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Användning: gpg [flaggor] [filer] (-h för hjälp)" # Om inget kommando anges (decrypt/encrypt etc) väljs åtgärd efter indata. #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Syntax: gpg [flaggor] [filer]\n" "signera, kontrollera, kryptera eller dekryptera\n" "standardåtgärden beror på inmatningsdata\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Algoritmer som stöds:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Publik nyckel: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Chiffer: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Kontrollsumma: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Komprimering: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "användning: gpg [flaggor] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "motstridiga kommandon\n" # Vad betyder detta? #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "no = signatur hittad i gruppdefinitionen \"%s\"\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "VARNING: osäkert ägarskap på hemkatalogen \"%s\"\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "VARNING: osäkert ägarskap på konfigurationsfilen \"%s\"\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "VARNING: osäkra rättigheter på hemkatalogen \"%s\"\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "VARNING: osäkra rättigheter på konfigurationsfilen \"%s\"\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "VARNING: osäkert ägarskap på inneslutande katalog för hemkatalogen \"%s\"\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "VARNING: osäkert ägarskap på inneslutande katalog för konfigurationsfilen " "\"%s\"\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "VARNING: osäkra rättigheter på inneslutande katalog för hemkatalogen \"%s\"\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "VARNING: osäkra rättigheter på inneslutande katalog för konfigurationsfilen " "\"%s\"\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "okänd konfigurationspost \"%s\"\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "visa foto-id vid nyckellistning" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "visa policy-url:er vid signaturlistningar" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "visa alla notationer vid signaturlistningar" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "visa IETF-standardnotationer vid signaturlistningar" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "visa användarangivna notationer vid signaturlistningar" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "visa url:er till föredragna nyckelservrar vid signaturlistningar" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "visa giltighet för användaridentitet vid nyckellistningar" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "visa spärrade och utgångna användaridentiteter i nyckellistningar" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "visa spärrade och utgångna undernycklar i nyckellistningar" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "visa nyckelringens namn i nyckellistningar" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "visa utgångsdatum vid signaturlistningar" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "OBS: den gamla inställningsfilen \"%s\" används inte\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "OBS: inställningsfilen \"%s\" saknas\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "inställningsfil \"%s\": %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "läser inställningar från \"%s\"\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "OBS: %s är inte för normal användning!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "\"%s\" är inte ett giltigt utgångsdatum för en signatur\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "\"%s\" är ingen giltig teckentabell\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "kunde inte tolka url till nyckelserver\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: ogiltiga flaggor för nyckelserver\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "ogiltiga flaggor för nyckelserver\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: ogiltiga importeringsflaggor\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "ogiltiga importflaggor\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: ogiltiga exportflaggor\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "ogiltiga exportinställningar\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: ogiltiga listflaggor\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "ogiltiga listflaggor\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "visa foto-id vid signaturvalidering" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "visa policy-url:er vid signaturvalidering" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "visa alla notationer vid signaturvalidering" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "visa IETF-standardnotationer vid signaturvalidering" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "visa användarangivna notationer vid signaturvalidering" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "visa url:er till föredragna nyckelserver vid signaturvalidering" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "visa giltighet för användaridentitet vid signaturvalidering" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "visa spärrade och utgångna användaridentiteter i signaturvalidering" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "visa endast den primära användaridentiteten i signaturvalidering" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "validera signaturer med PKA-data" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "öka tillit på signaturer med giltigt PKA-data" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: ogiltiga flaggor för validering\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "ogiltiga flaggor för validering\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "kunde inte ställa in exec-path till %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: ogiltig auto-key-locate-lista\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "ogiltig auto-key-locate-lista\n" # Programmet skapar en avbildning (image) av minnet för att lättare kunna spåra fel. #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "VARNING: programmet kan komma att skapa en minnesavbild!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "VARNING: %s gäller istället för %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s är inte tillåten tillsammans med %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "det är ingen poäng att använda %s tillsammans med %s!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "OBSERVERA: %s är inte tillgänglig i den här versionen\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "kommer inte att köra med osäkert minne på grund av %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "du kan bara göra signaturer i en separat fil eller klartextsignaturer\n" "i --pgp2-läge\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "du kan inte signera och kryptera samtidigt i --pgp2-läge\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "du måste använda filer (och inte rör) i --pgp2-läge\n" # IDEA-algoritmen är patenterat i flera länder och finns därför inte med i GnuPG som standard. #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "kryptering av meddelanden i --pgp2-läge kräver IDEA-chiffret\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "den valda chifferalgoritmen är ogiltig\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "vald sammandragsalgoritm är ogiltig\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "vald komprimeringsalgoritm är ogiltig\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "vald algoritm för certifieringssammandrag är felaktig\n" # antalet betrodda signaturer som behövs (1-3) för att du ska lita på en nyckel du inte själv verifierat. #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "variabeln \"completes-needed\" måste ha ett värde som är större än 0\n" # antalet delvis betrodda signaturer som behövs (1-3) för att du ska lita på en nyckel du inte själv verifierat. #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "variabeln \"marginals-needed\" måste vara större än 1\n" # Hur djupt GnuPG ska leta i Web-of-trust. #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth måste vara inom intervallet från 1 till 255\n" # Det är nivån för hurväl du har kontrollerat att nyckeln tillhör innehavaren. #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "" "ogiltigt standardvärde för certifieringsnivån; måste vara 0, 1, 2 eller 3\n" # Det är nivån för hurväl du har kontrollerat att nyckeln tillhör innehavaren. #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "ogiltigt minimivärde för certifieringsnivån; måste vara 1, 2 eller 3\n" # S2K har med krypteringen av hemliga nyckeln att göra #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "OBS: enkelt S2K-läge (0) rekommenderas inte\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "ogiltigt S2K-läge; måste vara 0, 1 eller 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "ogiltiga standardinställningar\n" # Du kan ange de algoritmer du föredrar i prioritetsordning. Då avgör inte enbart standard (symmetrisk kryptering) eller mottagarens preferenser (kryptering till öppen nyckel). #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "ogiltig inställning av föredragna krypteringsalgoritmer\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "ogiltig inställning av föredragna kontrollsummealgoritmer\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "ogiltig inställning av föredragna kompressionsalgoritmer\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s fungerar ännu inte med %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "du får inte använda chifferalgoritmen \"%s\" när du är i %s-läget\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "" "du får inte använda sammandragsalgoritmen \"%s\" när du är i %s-läget\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "" "du får inte använda komprimeringsalgoritmen \"%s\" när du är i %s-läget\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "misslyckades med att initialisera tillitsdatabasen: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "VARNING: mottagare (-r) angivna utan att använda publik nyckel-kryptering\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [filnamn]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [filnamn]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "symmetrisk kryptering av \"%s\" misslyckades: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [filnamn]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [filnamn]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "du kan inte använda --symmetric --encrypt med --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "du kan inte använda --symmetric --encrypt i %s-läget\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [filnamn]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [filnamn]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [filnamn]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "du kan inte använda --symmetric --sign --encrypt med --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "" "du kan inte använda --symmetric --sign --encrypt när du är i %s-läget\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [filnamn]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [filnamn]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [filnamn]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key användaridentitet" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key användaridentitet" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key användaridentitet [kommandon]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [användaridentitet] [nyckelring]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "sändning till nyckelservern misslyckades: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "hämtning från nyckelservern misslyckades: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "export av nyckeln misslyckades: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "sökning på nyckelservern misslyckades: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "uppdatering av nyckeln från en nyckelserver misslyckades: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "misslyckades med att ta bort ASCII-skalet: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "misslyckades med att skapa ASCII-skal: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "ogiltig kontrollsummealgoritm \"%s\"\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[filnamn]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Skriv ditt meddelande här ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "den angivna URL som beskriver certifieringsspolicy är ogiltig\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "den angivna URL som beskriver signaturpolicy är ogiltig\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "den angivna föredragna nyckelserver-url:n är ogiltig\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "för många poster i pk-cachen - inaktiverad\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[Användaridentiteten hittades inte]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "nyckel %s: hemlig nyckel utan publik nyckel - hoppades över\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "hämtade \"%s\" automatiskt via %s\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "Ogiltiga nyckeln %s tvingades till giltig med --allow-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "ingen hemlig undernyckel för publika undernyckeln %s - hoppar över\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "använder undernyckeln %s istället för primära nyckeln %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "var något tystare" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "ta nycklarna från denna nyckelring " # Med detta kommando ger gnupg enbart en varning när ett meddelande är tidsstämplat i framtiden. Annars avslutas gnupg med ett felmeddelande. # Kommandot är avsett att användas i "near online system". # Krav från RIPE. #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "utfärda enbart en varning när tidsstämpeln är orimlig" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|skriv statusinformation till denna FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Användning: gpgv [flaggor] [filer] (-h för hjälp)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Syntax: gpg [flaggor] [filer]\n" "Kontrollera signaturerna mot kända nycklar\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Det är upp till dig att ange ett värde här. Detta värde kommer aldrig att\n" "exporteras till någon tredje part. Vi behöver det för att implementera\n" "\"Web of trust\". Det har inget att göra med det (implicit skapade)\n" "nätet av certifikat." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "För att kunna bygga förtroendeväven \"Web-of-Trust\",\n" "måste GnuPG veta vilka nycklar som du litar förbehållslöst på\n" "- det är vanligen de nycklar som du disponerar den hemliga nyckeln för.\n" "Svara \"ja\" för att markera att du litar förbehållslöst på denna nyckel.\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "Om du vill använda denna otillförlitliga nyckel ändå, svara \"ja\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "" "Ange användaridentiteten för den adressat du vill skicka meddelandet till." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Välj vilken algoritm som ska användas.\n" "\n" "DSA (även känd som DSS) är Digital Signature Algorithm och kan endast\n" "användas för signaturer.\n" "\n" "Elgamal är en algoritm som endast kan användas för kryptering.\n" "\n" "RSA kan användas för signaturer eller kryptering.\n" "\n" "Första (primär) nyckel måste alltid vara en nyckel som är kapabel att " "signera." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Som regel är det ingen bra idé att använda samma nyckel för signering\n" "och kryptering. Denna algoritm ska endast användas inom särskilda\n" "områden. Rådgör med din egen säkerhetsexpert först!" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Ange storleken på nyckeln" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Svara \"ja\" eller \"nej\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Ange värdet som krävs som det visas vid prompten.\n" "Det är möjligt att ange ett ISO-datum (ÅÅÅÅ-MM-DD) men du kommer\n" "inte att få något vettigt felmeddelande - istället kommer systemet\n" "att försöka tolka det angivna värdet som ett intervall." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Ange namnet på nyckelns ägare" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "ange en e-postadress. Detta är frivilligt, men rekommenderas varmt" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Ange en kommentar (frivilligt)" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N för att ändra namnet.\n" "C för att ändra kommentaren.\n" "E för att ändra e-postadressen.\n" "O för att fortsätta med nyckelgenerering.\n" "Q för att avsluta nyckelgenereringen." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Svara \"ja\" (eller bara \"j\") om du vill generera denna undernyckel." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "När du signerar en användaridentitet på en nyckel, måste du först " "kontrollera att nyckeln\n" "verkligen tillhör den person som nämns i användaridentiteten. Det är viktigt " "för andra att\n" "få veta hur noga du har kontrollerat detta.\n" "\n" "\"0\" betyder att du inte påstår någonting om hur noga du kontrollerat " "nyckeln.\n" "\n" "\"1\" betyder att du tror att nyckeln tillhör den person som påstår sig göra " "det\n" " men du kunde inte, eller ville inte kontrollera nyckeln alls. Detta är " "användbart för\n" " en \"persona\"-kontroll, där du signerar nyckeln för en användare med " "pseudonym.\n" "\n" "\"2\" betyder att du gjorde viss kontroll av nyckeln. Det kan t.ex. betyda " "att\n" " du kontrollerade fingeravtrycket och kontrollerade användaridentiteten " "för nyckeln\n" " mot en fotolegitimation.\n" "\n" "\"3\" betyder att du gjorde en noggrann och uttömmande kontroll av nyckeln. " "Detta kan\n" " t.ex. betyda att du kontrollerade nyckelns fingeravtryck direkt med " "nyckelinnehavaren\n" " och att du kontrollerade, med hjälp av svårförfalskade " "identitetsdokument\n" "a\n" " med foto (t.ex. ett körkort) att namnet på innehavaren stämmer med\n" " namnet i användaridentiteten på nyckeln, och slutligen att du " "kontrollerade att\n" " (genom att utväxla e-postmeddelanden) att e-postadressen på nyckeln " "tillhör\n" " nyckelinnehavaren.\n" "\n" "Observera! Ovanstående exempel för nivåerna 2 och 3 är bara förslag.\n" "Slutligen är det bara du själv som avgör vad \"viss\" and \"noggrann\"\n" "betyder när du signerar andras nycklar.\n" "\n" "Om du inte vet vad du ska svara, så svara \"0\"." # felstavat original meddelat till Werner. #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "Svara \"ja\" om du vill signera ALLA användaridentiteter" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Svara \"ja\" om du verkligen vill ta bort denna användaridentitet.\n" "Alla certifikat kommer att gå förlorade!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Svara \"ja\" om du vill ta bort denna undernyckel" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Detta är en giltig signatur på nyckeln. Normalt sett vill du inte\n" "ta bort denna signatur eftersom den kan vara viktig för att skapa\n" "en tillitskoppling till nyckeln eller en annan nyckel som är\n" "certifierad av denna nyckel." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Denna signatur kan inte valideras eftersom du inte har den\n" "motsvarande nyckeln. Du bör vänta med att ta bort den tills du\n" "vet vilken nyckel som användes eftersom den nyckeln kanske upprättar\n" "en tillitskoppling genom en annan redan certifierad nyckel." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "" "Denna signatur är inte giltig. Det är rimligt att ta bort den från\n" "din nyckelring." # borde inge GnuPG bytas ut mot gpg eller ännu bättre %s? #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Detta är en signatur som knyter användaridentiteten till denna nyckel.\n" "Det är oftast inte en bra idé att ta bort en sådan signatur. Till\n" "och med kan det bli så att GnuPG kanske inte kan använda denna nyckel\n" "mer. Så gör bara detta om denna självsignatur av någon anledning är\n" "ogiltig och det finns en andra signatur som tillgänglig." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Ändra dina inställningar för alla användaridentiteter (eller enbart de " "valda)\n" "till den aktuella listan på inställningar. Tidsstämplingen för alla " "påverkade\n" "självsignaturer kommer att flyttas fram en sekund.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Ange en lösenfras. Detta är en hemlig mening\n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Repetera sista lösenfrasen, så du är säker på vad du skrev in." # # felstavat/ologiskt original #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Ange namnet på den fil signaturen gäller" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Svara \"ja\" om du vill skriva över filen" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Ange ett nytt filnamn. Om du bara trycker RETUR kommer standarfilnamnet\n" "(som anges i hakparenteser) att användas." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Du borde ange en anledning till spärrningen. Beroende på sammanhanget\n" "har du möjlighet att välja från följande lista:\n" " \"Nyckeln har tappat sin säkerhet\"\n" " Använd denna om du har anledning att tro att icke-auktoriserade " "personer\n" " har fått tillgång till din hemliga nyckel.\n" " \"Nyckeln har ersatts\"\n" " Använd denna om du har ersatt denna nyckel med en nyare.\n" " \"Nyckeln används inte längre\"\n" " Använd denna om du har pensionerat denna nyckel.\n" " \"Användaridentiteten är inte längre giltig\"\n" " Använd denna för att visa att denna användaridentitet inte längre\n" " skall användas. Detta används normalt för att visa att en e-postadress\n" " är ogiltig.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Om du vill kan du ange en text som beskriver varför du utfärdar\n" "detta spärrcertifikat (revocation certificate). Försök att hålla texten kort " "och koncis.\n" "En tom rad avslutar texten.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Det finns ingen hjälp tillgänglig" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Det finns ingen hjälp tillgänglig för \"%s\"" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "importera signaturer som är markerade som endast lokala" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "reparera skada från pks-nyckelservern vid importering" #: g10/import.c:104 #, fuzzy #| msgid "do not update the trustdb after import" msgid "do not clear the ownertrust values during import" msgstr "uppdatera inte tillitsdatabasen efter importering" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "uppdatera inte tillitsdatabasen efter importering" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "skapa en publik nyckel när en hemlig nyckel importeras" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "acceptera endast uppdateringar till befintliga nycklar" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "ta bort oanvändbara delar från nyckeln efter importering" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "ta bort så mycket som möjligt från nyckeln efter importering" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "hoppar över block av typen %d\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu nycklar behandlade än så länge\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Totalt antal behandlade enheter: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " överhoppade nya nycklar: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " utan användaridentiteter: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importerade: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " oförändrade: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nya användaridentiteter: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nya undernycklar: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nya signaturer: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " nya nyckelspärrningar: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " antal lästa hemliga nycklar: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " importerade hemliga nycklar: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " oförändrade hemliga nycklar: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " inte importerade: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " signaturer rensade: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " användaridentiteter rensade: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "VARNING: nyckeln %s innehåller inställningar för otillgänglig\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " algoritmer på dessa användaridentiteter:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": inställning för chifferalgoritmen %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": inställning för sammandragsalgoritmen %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": inställning för komprimeringsalgoritmen %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "det rekommenderas starkt att du uppdaterar dina inställningar\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "och distribuerar denna nyckel igen för att undvika tänkbara problem\n" "med att algoritmerna inte stämmer\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" "du kan uppdatera dina inställningar med: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "nyckel %s: ingen användaridentitet\n" #: g10/import.c:819 #, fuzzy, c-format #| msgid "skipped \"%s\": %s\n" msgid "key %s: %s\n" msgstr "hoppade över \"%s\": %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" # Undernyckeln är skadad på HKP-servern. Vanligt fel vid många undernycklar. #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "nyckeln %s: PKS-skadad undernyckel reparerades\n" # vad innebär fnutten i slutet? #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "" "nyckel %s: accepterade icke-självsignerade användaridentiteten \"%s\"\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "nyckel %s: inga giltiga användaridentiteter\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "detta kan bero på att det saknas en självsignatur\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "nyckel %s: hittade ingen publik nyckel: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "nyckel %s: ny nyckel - hoppade över\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "hittade ingen nyckelring som gick att skriva till: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "skriver till \"%s\"\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "fel vid skrivning av nyckelringen \"%s\": %s\n" # fixme: I appended the %s -wk #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "nyckel %s: publika nyckeln \"%s\" importerades\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "nyckel %s: stämmer inte mot vår lokala kopia\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "nyckel %s: kan inte hitta det ursprungliga nyckelblocket: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "nyckel %s: kan inte läsa det ursprungliga nyckelblocket %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "nyckel %s: \"%s\" 1 ny användaridentitet\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "nyckel %s: \"%s\" %d nya användaridentiteter\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "nyckel %s: \"%s\" 1 ny signatur\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "nyckel %s: \"%s\" %d nya signaturer\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "nyckel %s: \"%s\" 1 ny undernyckel\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "nyckel %s: \"%s\" %d nya undernycklar\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "nyckel %s: \"%s\" %d signatur rensad\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "nyckel %s: \"%s\" %d signaturer rensade\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "nyckel %s: \"%s\" %d användaridentitet rensat\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "nyckel %s: \"%s\" %d användaridentiteter rensade\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "nyckel %s: \"%s\" inte ändrad\n" #: g10/import.c:1211 #, fuzzy, c-format #| msgid "secret key \"%s\" not found: %s\n" msgid "secret key %s: %s\n" msgstr "hemliga nyckeln \"%s\" hittades inte: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "import av hemliga nycklar tillåts inte\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "nyckel %s: hemlig nyckel med ogiltigt chiffer %d - hoppade över\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "ingen hemlig nyckelring angiven som standard: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "nyckel %s: hemlig nyckel importerades\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "nyckel %s: finns redan i hemliga nyckelringen\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "nyckel %s: hittade inte hemlig nyckel: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "nyckel %s: ingen publik nyckel - kan inte verkställa spärrcertifikat\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "nyckel %s: ogiltigt spärrcertifikat: %s - avvisat\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "nyckel %s: \"%s\" spärrcertifikat importerat\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "nyckel %s: ingen användaridentitet för signaturen\n" # fixme: I appended the %s -wk #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "nyckel %s: algoritmen för publika nycklar stöds inte för " "användaridentiteten \"%s\"\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "nyckel %s: ogiltig självsignatur på användaridentiteten \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "nyckel %s: algoritmen för publika nycklar stöds inte\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "nyckel %s: lade till direkt nyckelsignatur\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "nyckel %s: ingen undernyckel för nyckelbindning\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "nyckel %s: ogiltig undernyckelbindning\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "nyckel %s: tog bort flera undernyckelbindningar\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "nyckel %s: ingen undernyckel för nyckelspärrning\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "nyckel %s: ogiltig spärr av undernyckel\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "nyckel %s: tog bort flera spärrar av undernyckel\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "nyckel %s: hoppade över användaridentiteten \"%s\"\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "nyckel %s: hoppade över undernyckel\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "nyckel %s: icke-exporterbar signatur (klass 0x%02X) - hoppade över\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "nyckel %s: spärrcertifikat på fel plats - hoppade över\n" # nyckeln eller certifikatet?? #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "nyckel %s: ogiltigt spärrcertifikat: %s - hoppade över\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "nyckel %s: signatur på undernyckel på fel plats - hoppade över\n" # nyckeln eller klassen? #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "nyckel %s: oväntad signaturklass (0x%02X) - hoppade över\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "" "nyckel %s: dubblett av användaridentiteten hittades - slog samman dem\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "VARNING: nyckeln %s kan ha spärrats: hämtar spärrnyckeln %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "VARNING: nyckeln %s kan ha spärrats: spärrnyckeln %s saknas.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "nyckel %s: \"%s\" spärrcertifikat lades till\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "nyckel %s: lade till direkt nyckelsignatur\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "" "OBSERVERA: serienumret för en nyckel stämmer inte med kortets serienummer\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "OBSERVERA: primärnyckeln är ansluten och lagrad på kort\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "OBSERVERA: sekundärnyckeln är ansluten och lagrad på kort\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "fel när nyckelringen \"%s\" skapades: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "%s: nyckelring skapad\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "nyckelblockresurs \"%s\": %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "misslyckades med att återskapa nyckelringscache: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[spärr]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[självsignatur]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 felaktig signatur\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d felaktiga signaturer\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 signatur validerades inte eftersom nyckeln saknades\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d signaturer validerades inte eftersom nycklar saknades\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 signatur validerades inte eftersom ett fel uppstod\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d signaturer validerades inte eftersom fel uppstod\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 användaridentitet utan giltig självsignatur hittades\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d användaridentiteter utan giltiga självsignaturer hittades\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Bestäm hur mycket du litar på denna användare när det gäller att\n" "korrekt validera andra användares nycklar (genom att undersöka pass,\n" "undersöka fingeravtryck från olika källor, etc.)\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Jag litar marginellt\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Jag litar fullständigt\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Ange djupet för den här tillitssignaturen.\n" "Ett djup större än 1 tillåter att nyckeln som du signerar kan\n" "skapa tillitssignaturer åt dig.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Ange en domän för att begränsa denna signatur. eller Enter för ingen.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Användaridentiteten \"%s\" är spärrad." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Vill du verkligen fortfarande signera den? (j/N)" #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Kan inte signera.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Giltighetstiden för användaridentiteten \"%s\" har gått ut." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "Användaridentiteten \"%s\" är inte självsignerad." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "Användaridentiteten \"%s\" är signerbar. " #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Signera den? (j/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Självsignaturen på \"%s\"\n" "är en signatur av PGP 2.x-typ.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Vill du göra om den till en självsignatur av OpenPGP-typ? (j/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Giltighetstiden för din nuvarande signatur på \"%s\"\n" "har gått ut.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Vill du skapa en ny signatur som ersätter den vars giltighetstid gått ut? (J/" "n) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Din nuvarande signatur på \"%s\"\n" "är en lokal signatur.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Vill du ändra den till en fullständig exporterbar signatur? (j/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" var redan lokalt signerad med nyckeln %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" var redan signerad av nyckeln %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Vill du verkligen signera den igen ändå?(j/N)" #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Det finns inget att signera med nyckeln %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Giltighetstiden för denna nyckel har gått ut!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Denna nyckels giltighetstid går ut vid %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "" "Vill du att giltighetstiden för signaturen ska upphöra vid samma tid? (J/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Du kan inte göra en OpenPGP-signatur på en PGP 2.x-nyckel när du är i --pgp2-" "läge\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Detta skulle göra nyckeln oanvändbar i PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Hur noga har du kontrollerat att nyckeln du ska signera verkligen tillhör\n" "personen som nämns ovan? Om du inte vet vad du ska svara, svara \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Jag vill inte svara.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Jag har inte kontrollerat alls.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Jag har gjort viss kontroll.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Jag har gjort en noggrann kontroll.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Ditt val? (skriv \"?\" för mer information): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Är du verkligen säker på att du vill signera denna nyckel\n" "med din nyckel \"%s\" (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Detta kommer att bli en självsignatur.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "VARNING: signaturen kommer inte att markeras som icke-exporterbar.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "VARNING: signaturen kommer att markeras som icke-spärrbar.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Signaturen kommer att markeras som icke-exporterbar.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Signaturen kommer att märkas som icke möjlig att spärra.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Jag har inte kontrollerat denna nyckel alls.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Jag har gjort viss kontroll av denna nyckel.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Jag har gjort en noggrann kontroll av denna nyckel.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Verkligen signera? (j/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "signeringen misslyckades: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "Nyckeln har endast en stump eller nyckelobjekt på kortet - ingen lösenfras " "att ändra.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Denna nyckel är inte skyddad.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "De hemliga delarna av den primära nyckeln är inte tillgängliga.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Hemliga delar av den primära nyckeln är lagrade på kortet.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Nyckeln är skyddad.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Kan inte redigera denna nyckel: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Skriv in den nya lösenfrasen för den hemliga nyckeln.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "lösenfrasen repeterades inte korrekt; försök igen." #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Du vill inte ha någon lösenfras - detta är möjligen en *dålig* idé!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Vill du verkligen göra detta? (j/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "flyttar en nyckelsignatur till den rätta platsen\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "spara och avsluta" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "visa nyckelns fingeravtryck" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "lista nycklar och användaridentiteter" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "välj användaridentiteten N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "välj undernyckel N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "kontrollera signaturer" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" "signera valda användaridentiteter [* se nedan för relaterade kommandon]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "signera valda användaridentiteter lokalt" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "signera valda användaridentiteter med en tillitssignatur" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "signera valda användaridentiteter med en icke-spärrbar signatur" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "lägg till en användaridentitet" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "lägg till ett foto-id" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "ta bort valda användaridentiteter" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "lägg till en undernyckel" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "lägg till en nyckel till ett smartkort" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "flytta en nyckel till ett smartkort" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "flytta en nyckelkopia till ett smartkort" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "ta bort valda undernycklar" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "lägg till en spärrnyckel" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "ta bort signaturer från valda användaridentiteter" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "ändra utgångsdatumet för nyckeln eller valda undernycklar" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "flagga vald användaridentitet som primär" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "växla mellan att lista hemliga och publika nycklar" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "lista inställningar (expertläge)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "lista inställningar (utförligt)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "ställ in inställningslista för valda användaridentiteter" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "" "ställ in url till föredragen nyckelserver för valda användaridentiteter" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "ställ in en notation för valda användaridentiteter" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "ändra lösenfrasen" # originalet borde ha ett value #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "ändra ägartillitsvärdet" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "spärra signaturer på valda användaridentiteter" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "spärra valda användaridentiteter" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "spärra nyckel eller valda undernycklar" #: g10/keyedit.c:1439 msgid "enable key" msgstr "aktivera nyckel" #: g10/keyedit.c:1440 msgid "disable key" msgstr "inaktivera nyckel" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "visa valda foto-id:n" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "komprimera oanvändbara användaridentiteter och ta bort oanvändbara " "signaturer från nyckeln" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" "komprimera oanvändbara användaridentiteter och ta bort alla signaturer från " "nyckeln" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "fel vid läsning av hemligt nyckelblock \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Den hemliga nyckeln finns tillgänglig.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Den hemliga nyckeln behövs för att göra detta.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Använd kommandot \"toggle\" först.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* Kommandot \"sign\" kan inledas med ett \"l\" för lokal signaturer " "(lsign),\n" " ett \"t\" för tillitssignaturer (tsign), ett \"nr\" för icke-sprärrbara " "signaturer\n" " (nrsign), eller en kombination av dessa (ltsign, tnrsign, etc.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Nyckeln är spärrad." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Verkligen signera alla användaridentiteter? (j/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Tips: Välj de användaridentiteter som du vill signera\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Okänd signaturtyp \"%s\"\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Detta kommando är inte tillåtet när du är i %s-läge.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Du måste välja åtminstone en användaridentitet.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Du kan inte ta bort den sista användaridentiteten!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Verkligen ta bort alla valda användaridentiteter? (j/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Verkligen ta bort denna användaridentitet? (j/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Verkligen flytta den primära nyckeln? (j/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Du måste välja exakt en nyckel.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Kommandot förväntar ett filnamnsargument\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Kan inte öppna \"%s\": %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Fel vid läsning av säkerhetskopierad nyckel från \"%s\": %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Du måste välja åtminstone en nyckel.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Vill du verkligen ta bort de valda nycklarna? (j/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Vill du verkligen ta bort denna nyckel? (j/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Verkligen spärra alla valda användaridentiteter? (j/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Verkligen spärra denna användaridentitet? (j/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Vill du verkligen spärra hela nyckeln? (j/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Vill du verkligen spärra de valda undernycklarna? (j/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Vill du verkligen spärra denna undernyckel? (j/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Ägartillit får inte ställas in när en tillitsdatabas används som användaren " "tillhandahåller\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Ställ in inställningslista till:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "" "Vill du verkligen uppdatera inställningarna för valda användaridentiteter? " "(j/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Vill du verkligen uppdatera inställningarna? (j/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Spara ändringar? (j/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Avsluta utan att spara? (j/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "uppdateringen misslyckades: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "misslyckades med att uppdatera hemligheten: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Nyckeln är oförändrad så det behövs ingen uppdatering.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Sammandrag: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Funktioner: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Nyckelserver no-modify" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Föredragen nyckelserver: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Notationer: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "" "Du kan inte ange några inställningar för en användaridentitet av PGP 2.x-" "typ.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Den här nyckeln blev spärrad den %s av %s nyckel %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Den här nyckeln kan vara spärrad av %s nyckel %s" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(känsligt)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "skapat: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "spärrad: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "utgånget: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "går ut: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "användning: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "tillit: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "giltighet: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Denna nyckel har stängts av" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "kortnummer: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Observera! Den visade nyckelgiltigheten kan vara felaktig\n" "såvida inte du startar om programmet.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "spärrad" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "utgånget" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "VARNING: ingen användaridentitet har markerats som primär.\n" "Detta kommando kan göra att en annan användaridentitet antas\n" "vara den primära identiteten.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Du kan inte ändra giltighetsdatum för en v3-nyckel\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "VARNING: Detta är en nyckel av PGP2-typ. Om du lägger till ett foto-id kan\n" " vissa versioner av PGP avvisa denna nyckel.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Vill du verkligen fortfarande lägga till den? (j/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Du kan inte lägga till ett foto-id till en nyckel av PGP 2-typ.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Vill du radera denna korrekta signatur? (j/N/a)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Vill du radera denna ogiltiga signatur? (j/N/a)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Vill du radera denna okända signatur? (j/N/a)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Verkligen ta bort denna självsignatur? (j/N)" # skulle lika gärna kunna heta 1 signatur va? #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Raderade %d signatur.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Raderade %d signaturer.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Ingenting raderat.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "ogiltigt" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Användaridentiteten \"%s\" komprimerad: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Användaridentiteten \"%s\": %d signatur borttagen\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Användaridentiteten \"%s\": %d signaturer borttagna\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Användaridentiteten \"%s\": redan minimerad\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "Användaridentitet \"%s\": redan rensad\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "VARNING: Detta är en PGP 2.x-nyckel. Om du lägger till en spärrnyckel kan " "denna\n" " nyckel inte användas i vissa versioner av PGP.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Du får inte lägga till en spärrnyckel för en PGP 2.x-nyckel.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Ange användaridentiteten för spärrnyckeln: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "det går inte att använda en PGP 2.x-nyckel som spärrnyckel\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "du kan inte ange en nyckel som sin egen spärrnyckel\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "den här nyckeln har redan markerats som spärrnyckel\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "VARNING: det går aldrig att ångra om du utser en spärrnyckel!\n" # designated = angiven (utnämnd, utpekad, bestämd, utsedd, avsedd, angiven, designerad) #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "" "Är du säker på att du vill använda den här nyckeln för spärrning? (j/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Tag bort markeringar från de hemliga nycklarna.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Välj som mest en undernyckel.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Ändrar utgångstid för en undernyckel.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Ändrar giltighetstid för den primära nyckeln.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Du kan inte ändra giltighetsdatum för en v3-nyckel\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Det finns ingen motsvarande signatur i den hemliga nyckelringen\n" # Vad betyder det? #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "signeringsundernyckeln %s är redan korscertifierad\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "undernyckeln %s signerar inte och behöver inte korscertifieras\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Välj endast en användaridentitet.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "hoppar över v3-självsignatur på användaridentiteten \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Ange din föredragna nyckelserver-url: " # Obs! Syftar på bildfilen med ditt foto. Meddelandet visas om du valt en mycket stor fil. #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Är du säker på att du vill ersätta det? (j/N) " # Obs! Syftar på bildfilen med ditt foto. Meddelandet visas om du valt en mycket stor fil. #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Är du säker på att du vill ta bort det? (j/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Ange notationen: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Fortsätt? (j/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Inget användaridentitet med indexet %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Inget användaridentitet med hashen %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Ingen undernyckel med indexet %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "användaridentitet: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "signerat av din nyckel %s den %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (icke exporterbar)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Denna signatur gick ut den %s.\n" # nyckel? signatur? #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Är du säker på att du fortfarande vill spärra den? (j/N)" #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Vill du skapa ett spärrcertifikat för denna signatur? (j/N)" #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Du har signerat följande användaridentiteter med nyckeln %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (inte spärrbar)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "spärrad av din nyckel %s den %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Du är på väg att spärra dessa signaturer:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Vill du verkligen skapa spärrcertifikatet? (j/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "ingen hemlig nyckel\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "användaridentiteten \"%s\" är redan spärrat\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "VARNING: en signatur på en användaridentitet är daterad %d sekunder in i " "framtiden\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Nyckeln %s är redan spärrad.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Undernyckeln %s är redan spärrad.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Visar %s foto-id med storleken %ld för nyckeln %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "inställningen \"%s\" förekommer flera gånger\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "för många chifferinställningar\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "för många sammandragsinställningar\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "för många komprimeringsinställningar\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "ogiltig post \"%s\" i inställningssträngen\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "skriver direkt signatur\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "skriver självsignatur\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "skriver signatur knuten till nyckeln\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "ogiltig nyckelstorlek; använder %u bitar\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "nyckelstorleken avrundad uppåt till %u bitar\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Signera" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certifiera" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Kryptera" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Autentisera" # S = Signera # K = Kryptera # A = Authentisera # Q = Avsluta #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsKkAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Möjliga åtgärder för en %s-nyckel: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "För närvarande tillåtna åtgärder: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Växla signeringsförmågan\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Växla krypteringsförmågan\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Växla autentiseringsförmågan\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Färdig\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Välj vilken typ av nyckel du vill ha:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA och Elgamal (standard)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA och Elgamal (standard)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (endast signering)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (endast signering)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (endast kryptering)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (endast kryptering)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (ställ in dina egna förmågor)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (ställ in dina egna förmågor)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s-nycklar kan vara mellan %u och %u bitar långa.\n" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Vilken nyckelstorlek vill du ha? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Vilken nyckelstorlek vill du ha? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Den efterfrågade nyckelstorleken är %u bitar\n" # borde kolla upp möjligheterna i källkoden att använda v m å istället för wmy #: g10/keygen.c:1722 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 "" "Specificera hur länge nyckeln skall vara giltig.\n" " 0 = nyckeln blir aldrig ogiltig\n" " = nyckeln blir ogiltig efter n dagar\n" " w = nyckeln blir ogiltig efter n veckor\n" " m = nyckeln blir ogiltig efter n månader\n" " y = nyckeln blir ogiltig efter n år\n" # borde kolla upp möjligheterna i källkoden att använda v m å istället för wmy #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Specificera hur länge nyckeln skall vara giltig.\n" " 0 = signaturen blir aldrig ogiltig\n" " = signaturen blir ogiltig efter n dagar\n" " w = signaturen blir ogiltig efter n veckor\n" " m = signaturen blir ogiltig efter n månader\n" " y = signaturen blir ogiltig efter n år\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "För hur lång tid ska nyckeln vara giltig? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Signaturen är giltig hur länge? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "ogiltigt värde\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Nyckeln går aldrig ut\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Signaturen går aldrig ut\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Nyckeln går ut %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Signaturen går ut %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Ditt system kan inte visa datum senare än år 2038.\n" "Datum fram till år 2106 kommer dock att hanteras korrekt.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Stämmer detta? (j/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Du behöver en användaridentitet för att identifiera din nyckel; " "programvaran\n" "konstruerar en användaridentitet från verkligt namn, kommentar och e-" "postadress\n" "enligt följande format: \n" " \"Gustav Vasa (Brutal kung) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Namn: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Ogiltigt tecken i namnet\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Namnet får inte börja med en siffra\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Namnet måste vara åtminstone 5 tecken långt\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "E-postadress: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "E-postadressen är ogiltig\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Kommentar: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Ogiltigt tecken i kommentaren\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Du använder teckentabellen \"%s\"\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Du valde följande användaridentitet:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Ange inte e-postadressen som namn eller kommentar\n" # Ej solklart vad förkortningarna står för #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnKkEeOoAa" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Ändra (N)amn, (K)ommentar, (E)post eller (A)vsluta? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "Ändra (N)amn, (K)ommentar, (E)post eller (O)k/(A)vsluta? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Rätta först felet\n" # fel kapitalisering i originalet? #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Du behöver en lösenfras för att skydda din hemliga nyckel\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Du vill inte ha någon lösenfras - det är möjligen en *dålig* idé!\n" "Jag kommer att göra det ändå. Du kan ändra din lösenfras när som helst\n" "om du använder detta program med flaggan \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Vi behöver generera ett stor mängd slumpmässig data. Det är en bra idé\n" "att göra något annat (skriva på tangentbordet, röra musen, använda\n" "hårddisken) under primtalsgenereringen; detta ger slumptalsgeneratorn\n" "en större chans att samla ihop en tillräcklig mängd entropidata.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Skapandet av nycklar avbröts.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "skriver den publika nyckeln till \"%s\"\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "skrier hemliga nyckelstumpen till \"%s\"\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "skriver hemlig nyckel till \"%s\"\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "ingen skrivbar publik nyckelring hittades: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "ingen skrivbar hemlig nyckelring hittades: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "fel vid skrivning av publika nyckelringen \"%s\": %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "fel vid skrivning av hemliga nyckelringen \"%s\": %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "den publika och den hemliga nyckeln är skapade och signerade.\n" # Flagga.. inte kommando #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Observera att denna nyckel inte kan användas för kryptering. Du kanske\n" "vill använda flaggan \"--edit-key\" för att skapa en undernyckel för detta " "syfte.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Nyckelgenereringen misslyckades: %s\n" # c-format behövs inte i singularis #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "nyckeln är skapad %lu sekund in i framtiden (problemet är\n" "relaterat till tidsresande eller en felställd klocka)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "nyckeln är skapad %lu sekunder in i framtiden (problemet är\n" "relaterat till tidsresande eller en felställd klocka)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "OBS: att skapa undernycklar till v3-nycklar bryter mot OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Verkligen skapa? (j/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "misslyckades med att lagra nyckeln på kortet: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "kan inte skapa säkerhetskopian \"%s\": %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "OBSERVERA: säkerhetskopia av kortnyckeln sparades i \"%s\"\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "aldrig" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Viktig signaturpolicy: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Signaturpolicy: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Föredragen kritisk nyckelserver: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kritisk signaturnotation: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Signaturnotation: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Nyckelring" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Primära nyckelns fingeravtryck:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Undernyckelns fingeravtryck:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "Primära nyckelns fingeravtryck:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Undernyckelns fingeravtryck:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr "Nyckelns fingeravtryck =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Kortets serienr =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "namnbyte från \"%s\" till \"%s\" misslyckades: %s\n" # Enligt Werner uppstår detta om något går snett när den hemliga nyckeln uppdateras. #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "VARNING: det finns 2 filer med konfidentiell information.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s är den oförändrade\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s är den nya\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Lös detta potentiella säkerhetsproblem\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "mellanlagrar nyckelringen \"%s\"\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu nycklar mellanlagrade än så länge (%lu signaturer)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu nycklar mellanlagrade (%lu signaturer)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: nyckelring skapad\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "inkludera spärrade nycklar i sökresultatet" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "inkludera undernycklar vid sökning efter nyckel-id" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" "använd temporärfiler för att skicka data till nyckelserverns hjälpprogram" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "ta inte bort temporärfiler efter de använts" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "hämta automatiskt nycklar vid validering av signaturer" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "respektera föredragen nyckelserver-url inställd i nyckeln" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "respektera PKA-posten inställd på en nyckel när nycklar hämtas" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "VARNING: nyckelserverflaggan \"%s\" används inte på den här plattformen\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "inaktiverad" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Ange nummer, N)ästa, eller Q) för Avsluta > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "ogiltigt nyckelserverprotokoll (vi %d!=hanterare %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "nyckeln \"%s\" hittades inte på nyckelservern\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "nyckeln hittades inte på nyckelservern\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "begär nyckeln %s från %s-servern %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "begär nyckeln %s från %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "söker efter namn från %s-servern %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "söker efter namn från %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "skickar nycken %s till %s-servern %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "skickar nyckeln %s till %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "söker efter \"%s\" från %s-servern %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "söker efter \"%s\" från %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "ingen nyckelserveråtgärd!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "VARNING: nyckelserverhanteraren från en annan version av GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "nyckelserver skickade inte VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "kommunikationsfel mot nyckelserver: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "ingen nyckelserver är känd (använd flaggan --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "externa anrop till nyckelserver stöds inte i detta bygge\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "ingen hanterare för nyckelserverschemat \"%s\"\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "åtgärden \"%s\" stöds inte med nyckelserverschemat \"%s\"\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s har inte stöd för hanterarversionen %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "tidsgräns överstigen för nyckelserver\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "internt fel i nyckelserver\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" inte ett nyckel-id: hoppar över\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "VARNING: kunde inte uppdatera nyckeln %s via %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "uppdaterar 1 nyckel från %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "uppdaterar %d nycklar från %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "VARNING: kunde inte hämta uri:n %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "VARNING: kunde inte tolka uri:n %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "egendomlig storlek på en krypterad sessionsnyckel (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s krypterad sessionsnyckel\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "lösenfras genererad med okänd sammandragsalgoritm %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "publik nyckel är %s\n" # Men jag ändrade så det blev närmare originalet. Per #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "Data krypterat med publik nyckel: korrekt DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "krypterad med %u-bitars %s-nyckel, id %s, skapad %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "krypterad med %s-nyckel, id %s\n" # Motsatsen till kryptering med symmetrisk nyckel. #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "dekryptering med publik nyckel misslyckades: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "krypterad med %lu lösenfraser\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "krypterad med with 1 lösenfras\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "antar att %s krypterade data\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "IDEA-kryptering inte installerad. Optimistiskt försök att använda %s " "istället\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "dekrypteringen lyckades\n" # Äldre krypteringalgoritmer skapar ingen mdc dvs. "minisignatur" som skyddar mot att delar av den krypterade texten byts ut/tas bort. Alla nya 128-bitars algoritmer använder mdc: AES, AES192, AES256, BLOWFISH. #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "VARNING: detta meddelande var inte integritetsskyddat\n" # Meddelandet innebär alltså att kontrollen av mdc visade att meddelandet förändrats/manipulerats sedan det krypterades. Block kan ha tagits bort eller bytts ut. #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "VARNING: det krypterade meddelandet har ändrats!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "dekrypteringen misslyckades: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "OBS: avsändaren begärde \"endast-för-dina-ögon\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "ursprungligt filnamn=\"%.*s\"\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "VARNING: multipla klartexter sedda\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "fristående spärrcertifikat - använd \"gpg --import\" för\n" "att verkställa\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "ingen signatur hittades\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "signaturvalidering utelämnad\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "kan inte hantera detta tvetydliga signaturdata\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Signatur gjord %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " med %s-nyckeln %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Signatur gjordes %s med %s nyckel-id %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Nyckeln tillgänglig hos: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "FELAKTIG signatur från \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Utgången signatur från \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Korrekt signatur från \"%s\"" # Visas vid ogiltig signatur: # Eftersom signaturen är ogiltig kan man inte vara säker på att angivet namn och nyckel-id är riktigt. #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[osäkert]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " även känd som \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Giltighetstiden för signaturen har upphört %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Giltighetstiden för signaturen går ut %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s signatur, sammandragsalgoritm %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binär" #: g10/mainproc.c:1947 msgid "textmode" msgstr "textläge" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "okänd" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Kan inte kontrollera signaturen: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "detta är inte någon signatur i en separat fil\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "" "VARNING: multipla signaturer upptäckta. Endast den första kommer att " "kontrolleras.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "fristående signatur av klassen 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "signatur av den gamla (PGP 2.x) typen\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "ogiltigt rotpaket hittades i proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "kan inte stänga av minnesutskrifter: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat för \"%s\" misslyckades i %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) misslyckades i %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "VARNING: använder experimentella algoritmen %s för publik nyckel\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "VARNING: Elgamal-nycklar för signering/kryptering är föråldrade\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "VARNING: använder experimentella chifferalgoritmen %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "VARNING: använder experimentella sammandragsalgoritmen %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "VARNING: sammandragsalgoritmen %s är föråldrad\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "se %s för mer information\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "OBSERVERA: %s är inte tillgänglig i den här versionen\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: alternativet är föråldrat \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "VARNING: inställningen \"%s\" är föråldrad\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "Använd \"%s%s\" istället\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "VARNING: \"%s\" är ett föråldrat kommando - använd det inte\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Okomprimerad" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "okomprimerad|ingen" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "detta meddelande kanske inte kan användas av %s\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "tvetydlig flagga \"%s\"\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "okänd flagga \"%s\"\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Okänd signaturtyp \"%s\"\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Filen \"%s\" finns. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Skriv över? (j/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: okänt suffix\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Ange nytt filnamn" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "skriver till standard ut\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "antar att signerad data finns i filen \"%s\"\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "ny konfigurationsfil \"%s\" skapad\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "VARNING: inställningar i \"%s\" är ännu inte aktiva under denna körning\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "katalogen \"%s\" skapades\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "kan inte hantera algoritmen %d för publika nycklar\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "VARNING: potentiellt osäker symmetriskt krypterad sessionsnyckel\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "underpaket av typen %d har den bit satt som markerar den som kritisk\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "kunde inte få tillgång till GPG-Agent i denna session\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "miljövariabeln GPG_AGENT_INFO är felformaterad\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "GPG-Agent protokoll version %d stöds inte\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "kan inte ansluta till \"%s\": %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problem med agenten - inaktiverar användning av agent\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (primära nyckelns id %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Du behöver en lösenfras för att låsa upp den hemliga\n" "nyckeln för användaren: \"%.*s\"\n" "%u-bitars %s-nyckel, id %s, skapad %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Repetera lösenfrasen\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Ange lösenfrasen\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "avbruten av användaren\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "kan inte fråga om lösenfras i satsläge\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Ange lösenfras: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Du behöver en lösenfras för att låsa upp den hemliga\n" "nyckeln för användaren: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u-bitars %s-nyckel, id %s, skapad %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (undernyckel på primärt nyckel-id %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Repetera lösenfrasen: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Välj en bild att använda som ditt foto-id. Bilden måste vara en JPEG-fil.\n" "Kom ihåg att bilden sparas inuti din publika nyckel: Om du väljer\n" "en mycket stor bild, så blir din nyckel också väldigt stor!\n" "Försök att använda en bild som har ungefär formatet 240x288 pixlar.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Skriv JPEG-filnamnet för foto-id: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "kunde inte öppna JPEG-filen \"%s\": %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Den här JPEG-bilden är verkligen stor (%d byte)!\n" # Obs! Syftar på bildfilen med ditt foto. Meddelandet visas om du valt en mycket stor fil. #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Vill du verkligen använda den? (j/N)? " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\" är inte en JPEG-fil\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Är detta foto korrekt (j/N/a)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "ingen fotovisare inställd\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "kan inte visa foto-id!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Ingen anledning har angivits" # tveksam översättning. funderar på "ersatt av något bättre" men det # känns inte heller bra. Betyder att nyckeln inte används längre, utan användaren har skapat en ny nyckel som ersätter den gamla. #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Nyckeln är ersatt" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Nyckeln har tappat sin säkerhet" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Nyckeln används inte längre" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Användaridentiteten är inte längre giltig" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "anledning för spärrning: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "spärrkommentar: " # ej kristallklart vad förkortningarna står för #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImHhAsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Inget tillitsvärde tilldelat till:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " även känd som \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "" "Hur mycket litar du på att nyckeln faktiskt tillhör den angivna användaren?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Jag vet inte eller kan inte säga något\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Jag litar INTE\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Jag litar förbehållslöst\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " h = gå tillbaka till huvudmenyn\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = hoppa över denna nyckel\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " a = avsluta\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Minimum tillitsnivå för denna nyckel är: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Vad väljer du? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Vill du verkligen ge denna nyckel förbehållslöst förtroende? (j/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certifikat som leder till en nyckel med förbehållslöst förtroende:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%s: Det finns inget som säger att nyckeln tillhör den angivna användaren\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%s: Det finns viss information om att nyckeln tillhör den angivna " "användaren\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Den här nyckel tillhör antagligen den namngivna användaren\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Denna nyckel tillhör oss\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "Det är INTE säkert att nyckeln tillhör den namngivna personen i.\n" "användaridentiteten. Om du *verkligen* vet vad du gör, kan du\n" "svara ja på nästkommande fråga.\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Vill du använda nyckeln ändå? (j/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "VARNING: Använder en nyckel som inte är betrodd!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "VARNING: denna nyckel kan ha spärrats (spärrnyckeln saknas)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "VARNING: Denna nyckel har spärrats med sin spärrnyckel!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "VARNING: Denna nyckel har spärrats av sin ägare!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " Detta kan betyda att signaturen är förfalskad.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "VARNING: Denna undernyckel har spärrats av sin ägare!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Obs: Denna nyckel har stängts av.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Observera: Validerad adress för signeraren är \"%s\"\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Observera: Signerarens adress \"%s\" matchar inte DNS-objektet\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "trustlevel justerad till FULL på grund av giltig PKA-info\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "trustlevel justerad till NEVER på grund av felaktig PKA-info\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Obs: Giltighetstiden för denna nyckel har gått ut!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "VARNING: Denna nyckel är inte certifierad med en pålitlig signatur!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Det finns inget som indikerar att signaturen tillhör ägaren.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "VARNING: Vi litar INTE på denna nyckel!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Signaturen är sannolikt en FÖRFALSKNING.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "VARNING: Denna nyckel är inte certifierad med signaturer med ett\n" "tillräckligt högt tillitsvärde!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Det är inte säkert att signaturen tillhör ägaren.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: hoppade över: %s\n" # överhoppad? #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: hoppades över: publik nyckel finns redan\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "Du angav ingen användaridentitet. (du kan använda \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Nuvarande mottagare:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Ange användaridentiteten. Avsluta med en tom rad: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Inget sådan användaridentitet.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" "hoppade över: den publika nyckeln är redan inställd som standardmottagare\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Den publika nyckeln är inaktiverad.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "hoppade över: publik nyckel redan angiven\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "okänd standardmottagare \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: hoppades över: den publika nyckeln är inaktiverad\n" # plural av adressee # dvs. den som meddelandet är adresserat till. # Åtskillnad görs mellan adressee och receiver. #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "inga giltiga adressater\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "data sparades inte, använd flaggan \"--output\" för att spara det\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "Fel när \"%s\" skapades: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Signatur i en separat fil.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Ange namnet på datafilen: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "läser från standard in ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "ingen signerad data\n" # se förra kommentaren #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "kan inte öppna signerat data \"%s\"\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonym mottagare; provar med den hemliga nyckeln %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "ok, vi är den anonyma mottagaren.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "gammal kodning av krypteringsnyckeln stöds inte\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "krypteringsalgoritmen %d%s är okänd eller inaktiverad\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "" "VARNING: chifferalgoritmen %s hittades inte i mottagarinställningarna\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "OBSERVERA: hemliga nyckeln %s gick ut %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "OBSERVERA: nyckeln har spärrats" # Vad? #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet misslyckades: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "nyckeln %s innehåller inga användaridentiteter\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Kommer att spärras av:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Detta är en känslig spärrnyckel)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Skapa ett spärrcertifikat för denna nyckel? (j/N) " # --force översatt med: # genomdriv (använd alltid?) # -do-not-force översatt med: # genomdriv inte # I detta fall gäller det ett revokeringscertifikat, som gnupg alltid skapar i ASCII-format för att det ska gå att skriva ut. #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "utdata med ett ascii-skal genomdrivet.\n" # Vad menas??? #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet misslyckades: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Spärrcertifikat skapat.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "inga spärrnycklar hittades för \"%s\"\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "hemliga nyckeln \"%s\" hittades inte: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "ingen motsvarande publik nyckel: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "publika nyckeln passar inte ihop med den hemliga nyckeln!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Skapa ett spärrcertifikat för denna nyckel? (j/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "okänd skyddsalgoritm\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "OBS: Denna nyckel är oskyddad!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Spärrcertifikat skapat.\n" "\n" "Var vänlig flytta det till ett media du kan gömma; om Mallory får\n" "tillgång till detta certifikatet kan han göra din nyckel oanvändbar.\n" "Det är klokt att skriva ut detta certifikat och gömma det, ifall ditt\n" "media blir oläsligt. Men se upp: Utskriftsfunktionen på\n" "din dator kan spara data så att det blir åtkomligt för andra!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Välj anledning till varför nyckeln spärras:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Avbryt" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Troligen vill du välja %d här)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Ange en beskrivning (frivilligt); avsluta med en tom rad:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Anledning för spärrning: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Ingen beskrivning angiven)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Är detta OK? (j/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "de hemliga nyckeldelarna är inte tillgängliga\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "skyddsalgoritmen %d%s stöds inte\n" # Skyddssammandraget låter underligt # Kontrollsumma? #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "skyddssammandraget %d stöds inte\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Ogiltig lösenfras; försök igen" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" # För vissa krypteringsalgoritmer är det känt att vissa svaga nycklar kan förekomma. Dessa ska aldrig användas. GnuPG vill på detta sätt hindra dig från att skapa en sådan nyckel. #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "VARNING: Upptäckte en svag nyckel - byt lösenfras igen.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "skapar den föråldrade 16-bit kontrollsumman för skydd av den hemliga " "nyckeln\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "skapade en svag nyckel - försöker igen\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "kan inte undvika en svag nyckel för symmetrisk kryptering; försökte\n" "%d gånger!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA kräver att hashlängden är delbar med 8 bitar\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA-nyckeln %s använder en osäker hash (%u bitar)\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA-nyckeln %s kräver en hash med %u bitar eller större\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "VARNING: konflikt mellan signatursammandrag i meddelandet\n" # Vad betyder det? #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "VARNING: signeringsundernyckeln %s är inte korscertifierad\n" # cross-certification? #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "VARNING signeringsundernyckel %s har en ogiltig korscertifiering\n" # behövs verkligen c-format här? #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "den publika nyckeln %s är %lu sekund nyare än signaturen\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "den publika nyckeln %s är %lu sekunder nyare än signaturen\n" # c-format behövs inte i singularis #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "nyckeln %s skapades %lu sekund in i framtiden (tidsresande eller felinställd " "klocka)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "nyckeln %s skapades %lu sekunder in i framtiden (tidsresande eller " "felinställd klocka)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "OBSERVERA: signaturnyckeln %s gick ut %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s signatur, sammandragsalgoritm %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "antar felaktig signatur från nyckeln %s på grund av en okänd kritisk bit\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "nyckel %s: ingen undernyckel med spärrsignatur för undernyckel\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "nyckeln %s: ingen undernyckel för signaturbindning av undernyckel\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "VARNING: kan inte %%-expandera anteckning (för stor). Använder den utan " "expansion.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "VARNING: kunde inte %%-expandera policy-url (för stor). Använder " "oexpanderad.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "VARNING: kunde inte %%-expandera url för föredragen nyckelserver (för " "stor). Använder oexpanderad.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "kontroll av den skapade signaturen misslyckades: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s signatur från: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "du kan bara skapa signaturer i en separat fil med nycklar av PGP 2.x-typ\n" "när du är i --pgp2-läge\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "VARNING: tvinga sammandragsalgoritmen %s (%d) strider mot " "mottagarinställningarna\n" #: g10/sign.c:960 msgid "signing:" msgstr "signerar:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "du kan bara göra klartextsignaturer med en PGP 2.x-nyckel\n" "när du är i --pgp2-läge\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "krypteringen %s kommer att användas\n" # Slumptalsgenerator: Random Number Generator #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "nyckeln är inte markerad som osäker - det går inte att använda den med " "fejkad slumptalsgenerator!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "hoppade över \"%s\": förekommer flera gånger\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "hoppade över \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "hoppade över: hemlig nyckel finns redan\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "det här är en PGP-genererad Elgamal-nyckel som inte är säker för signaturer!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "tillitspost: %lu, typ %d: kunde inte skriva: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Skapat lista över tilldelade tillitsvärden %s\n" "# (Använd \"gpg --import-ownertrust\" för att återställa dem)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "fel i \"%s\": %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "raden är för lång" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "kolon saknas" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "ogiltigt fingeravtryck" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "värde för ägartillit saknas" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "fel vid sökning av tillitsvärde i \"%s\": %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "läsfel i \"%s\": %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "tillitsdatabas: synkronisering misslyckades: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "kan inte skapa lås för \"%s\"\n" # se förra kommentaren #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "kan inte låsa \"%s\"\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "tillitsdatabasposten %lu: lseek misslyckades: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "tillitsdatabasposten %lu: skrivning misslyckades (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "tillitsdatabastransaktion för stor\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "kan inte komma åt \"%s\": %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: katalogen finns inte!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: misslyckades med att skapa versionspost: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: ogiltig tillitsdatabas skapad\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: tillitsdatabas skapad\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "OBS: det går inte att skriva till tillitsdatabasen\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: ogiltig tillitsdatabas\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: misslyckades med att skapa kontrollsummetabell: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: fel vid uppdatering av versionspost: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: fel vid läsning av versionspost: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: fel vid skrivning av versionspost: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "tillitsdatabas: lseek misslyckades: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "tillitsdatabas: läsning misslyckades (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: detta är inte en tillitsdatabasfil\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: versionspost med postnummer %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: ogiltig filversion %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: fel vid läsning av ledig post: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: fel vid läsning av katalogpost: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: misslyckades med att nollställa en post: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: misslyckades med att lägga till en post: %s\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: tillitsdatabas skapad\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "kan inte hantera text med rader längre än %d tecken\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "indataraden är längre än %d tecken\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "\"%s\" är inget giltigt långt nyckel-id\n" # trusted?? #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "nyckel %s: accepterad som betrodd nyckel\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "nyckeln %s förekommer fler än en gång i tillitsdatabasen\n" # nyckeln? #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "nyckel %s: ingen publik nyckel för pålitlig nyckel - hoppades över\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "nyckeln %s är markerad med förbehållslöst förtroende\n" # req står för request # kollat med Werner. Per #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "tillitspost %lu, begäran av typ %d: kunde inte läsa: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "tillitsvärdet %lu är inte av begärd typ %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "kunde inte använda okänd tillitsmodell (%d) - antar tillitsmodellen %s\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "använder tillitsmodellen %s\n" # Denna måste testas. # /* NOTE TO TRANSLATOR: these strings are similar to those in # trust_value_to_string(), but are a fixed length. This is needed to # make attractive information listings where columns line up # properly. The value "10" should be the length of the strings you # choose to translate to. This is the length in printable columns. # It gets passed to atoi() so everything after the number is # essentially a comment and need not be translated. Either key and # uid are both NULL, or neither are NULL. */ #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "15" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ spärrad ]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ utgånget ]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ okänt ]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ odefinierad ]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[ marginell ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ fullständig ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[förbehållslös]" #: g10/trustdb.c:553 msgid "undefined" msgstr "odefinierad" #: g10/trustdb.c:554 msgid "never" msgstr "aldrig" #: g10/trustdb.c:555 msgid "marginal" msgstr "marginell" #: g10/trustdb.c:556 msgid "full" msgstr "fullständig" #: g10/trustdb.c:557 msgid "ultimate" msgstr "förbehållslös" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "det behövs ingen kontroll av tillitsdatabasen\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "nästa kontroll av tillitsdatabasen kommer att äga rum %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "" "det behövs ingen kontroll av tillitsdatabasen med tillitsmodellen \"%s\"\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "" "det behövs ingen uppdatering av tillitsdatabasen med tillitsmodellen \"%s\"\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "publika nyckeln %s hittades inte: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "gör en kontroll av tillitsdatabasen --check-trustdb\n" # originalet borde ha ett value #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "kontrollerar tillitsdatabasen\n" # Vad är detta!? #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d nycklar behandlade (%d validity counts rensade)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "hittade inga nycklar med förbehållslöst förtroende\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "publik nyckel för förbehållslöst betrodda nyckeln %s hittades inte\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "%d marginal(er) behövs, %d fullständig(a) behövs, tillitsmodell %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "djup: %d giltig: %3d signerad: %3d tillit: %d-, %dq, %dn, %dm, %df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "" "kunde inte uppdatera versionspost i tillitsdatabasen: skrivning " "misslyckades: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "signaturen kunde inte valideras.\n" "Kom ihåg att signaturfilen (.sig eller .asc)\n" "ska vara den först angivna filen på kommandoraden\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "raden %u är för lång, eller saknar nyradstecken\n" #: util/errors.c:53 msgid "general error" msgstr "allmänt fel" #: util/errors.c:54 msgid "unknown packet type" msgstr "okänd pakettyp" #: util/errors.c:55 msgid "unknown version" msgstr "okänd version" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "okänd algoritm för publik nyckel" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "okänd sammandragsalgoritm" #: util/errors.c:58 msgid "bad public key" msgstr "felaktig publik nyckel" #: util/errors.c:59 msgid "bad secret key" msgstr "felaktig hemlig nyckel" #: util/errors.c:60 msgid "bad signature" msgstr "felaktig signatur" #: util/errors.c:61 msgid "checksum error" msgstr "fel i kontrollsumma" #: util/errors.c:62 msgid "bad passphrase" msgstr "felaktig lösenfras" #: util/errors.c:63 msgid "public key not found" msgstr "publika nyckeln hittades inte" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "okänd chifferalgoritm" # Filnamn både med och utan fnuttar finns. lite ologiskt. Vill någon # fixa en patch? #: util/errors.c:65 msgid "can't open the keyring" msgstr "kan inte öppna nyckelringen" #: util/errors.c:66 msgid "invalid packet" msgstr "ogiltigt paket" #: util/errors.c:67 msgid "invalid armor" msgstr "ogiltigt ascii-skal" #: util/errors.c:68 msgid "no such user id" msgstr "inget sådan användaridentitet" #: util/errors.c:69 msgid "secret key not available" msgstr "hemliga nyckeln är inte tillgänglig" #: util/errors.c:70 msgid "wrong secret key used" msgstr "fel hemlig nyckel användes" #: util/errors.c:71 msgid "not supported" msgstr "stöds inte" #: util/errors.c:72 msgid "bad key" msgstr "felaktig nyckel" #: util/errors.c:73 msgid "file read error" msgstr "fel vid läsning av fil" #: util/errors.c:74 msgid "file write error" msgstr "fel vid skrivning av fil" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "okänd komprimeringsalgoritm" #: util/errors.c:76 msgid "file open error" msgstr "fel vid öppning av fil" #: util/errors.c:77 msgid "file create error" msgstr "fel när filen skapades" #: util/errors.c:78 msgid "invalid passphrase" msgstr "ogiltig lösenfras" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "ej implementerad algoritm för publika nycklar" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "ej implementerad algoritm för chiffer" #: util/errors.c:81 msgid "unknown signature class" msgstr "okänd signaturklass" #: util/errors.c:82 msgid "trust database error" msgstr "fel i tillitsdatabasen" # MPI står för Multiple Precision Integer (tror jag) #: util/errors.c:83 msgid "bad MPI" msgstr "felaktig MPI" #: util/errors.c:84 msgid "resource limit" msgstr "resursbegränsning" #: util/errors.c:85 msgid "invalid keyring" msgstr "ogiltig nyckelring" #: util/errors.c:86 msgid "bad certificate" msgstr "felaktigt certifikat" #: util/errors.c:87 msgid "malformed user id" msgstr "felformaterad användaridentitet" #: util/errors.c:88 msgid "file close error" msgstr "fel vid stängning av fil" #: util/errors.c:89 msgid "file rename error" msgstr "fel vid namnbyte av fil" #: util/errors.c:90 msgid "file delete error" msgstr "fel vid borttagning av fil" #: util/errors.c:91 msgid "unexpected data" msgstr "oväntat data" # Med detta kommando ger gnupg enbart en varning när ett meddelande är tidsstämplat i framtiden. Annars avslutas gnupg med ett felmeddelande. # Kommandot är avsett att användas i "near online system". # Krav från RIPE. #: util/errors.c:92 msgid "timestamp conflict" msgstr "konflikt i tidsstämpel" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "oanvändbar algoritm för publika nycklar" #: util/errors.c:94 msgid "file exists" msgstr "filen finns" #: util/errors.c:95 msgid "weak key" msgstr "svag nyckel" #: util/errors.c:96 msgid "invalid argument" msgstr "ogiltigt argument" #: util/errors.c:97 msgid "bad URI" msgstr "felaktig uri" #: util/errors.c:98 msgid "unsupported URI" msgstr "uri:n stöds inte" #: util/errors.c:99 msgid "network error" msgstr "nätverksfel" #: util/errors.c:101 msgid "not encrypted" msgstr "inte krypterad" #: util/errors.c:102 msgid "not processed" msgstr "inte behandlad" #: util/errors.c:104 msgid "unusable public key" msgstr "oanvändbar publik nyckel" #: util/errors.c:105 msgid "unusable secret key" msgstr "oanvändbar hemlig nyckel" #: util/errors.c:106 msgid "keyserver error" msgstr "nyckelserverfel" #: util/errors.c:107 msgid "canceled" msgstr "avbruten" #: util/errors.c:108 msgid "no card" msgstr "inget kort" #: util/errors.c:109 msgid "no data" msgstr "inget data" #: util/logger.c:183 msgid "ERROR: " msgstr "FEL: " #: util/logger.c:186 msgid "WARNING: " msgstr "VARNING: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... det här är ett fel (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "du har hittat ett fel i programmet ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "ja" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "jJ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "nej" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "avsluta" #: util/miscutil.c:443 msgid "qQ" msgstr "aA" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|okej|ok" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "avbryt|stoppa" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "aAsS" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "VARNING: använder osäkert minne!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "se http://www.gnupg.org/documentation/faqs.html för mer information\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "åtgärden är inte möjlig utan initierat säkert minne\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(du kanske använder fel program för den här uppgiften)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "VARNING: osäkert ägarskap på tillägget \"%s\"\n" # Extension är vad? FIXME #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "VARNING: osäkra rättigheter på tillägget \"%s\"\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "VARNING: osäkert ägarskap på inneslutande katalog för tillägget \"%s\"\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "VARNING: osäkra rättigheter på inneslutande katalog för tillägget \"%s\"\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "chiffertillägget \"%s\" lästes inte in på grund av osäkra rättigheter\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "insticksmodul för IDEA-kryptering är inte installerat\n" #~ msgid "Command> " #~ msgstr "Kommando> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA-nyckelparet kommer att ha %u bitar.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "tillitsdatabasen är trasig, kör \"gpg --fix-trustdb\".\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|Admin PIN-kod" gnupg-1.4.20/po/cs.po0000644000175000017500000057030412635457217011247 00000000000000# GnuPG Czech translation # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005 Free Software Foundation, Inc. # Magda Procházková 2001, # Roman Pavlik 2001, 2002, 2003, 2004, 2005. msgid "" msgstr "" "Project-Id-Version: gnupg-1.3.92\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:20+0200\n" "Last-Translator: Roman Pavlik \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "nemohu vygenerovat prvočíslo s pbits=%u qbits=%u\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "nemohu vygenerovat prvočíslo s méně než %d bity\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "nebyl detekován žádný modul pro získání entropie\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "nelze zamčít `%s': %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "čekám na zámek pro `%s'...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "nemohu otevřít `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "nemohu použít příkaz stat na `%s': %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' není normální soubor - ignoruji\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "poznámka: soubor random_seed je prázdný\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "VAROVÁNÍ: neplatná velikost random_seed - soubor nepoužit\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "nemohu číst `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "poznámka: soubor random_seed není aktualizován\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "nemohu vytvořit `%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "nemohu zapisovat do `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "nemohu zavřít `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "VAROVÁNÍ: použitý generátor náhodných čísel není bezpečný!!\n" #: cipher/random.c:894 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 "" "Generátor náhodných čísel je pouze atrapa, aby program mohl běžet,\n" "v žádném případě není kryptograficky bezpečný!\n" "\n" "NEPOUŽÍVEJTE JAKÁKOLIV DATA VYTVOŘENÁ TÍMTO PROGRAMEM!!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Prosím čekejte, je nutné získat dostatek entropie. Aby jste se nenudili,\n" "můžete na počítači dělat něco jiného, zvýšíte tak kvalitu entropie.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Nedostatek náhodných bajtů. Prosím, pracujte s operačním systémem, abyste\n" "mu umožnili získat více entropie (je potřeba %d bajtů).\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "uložení fingerprintu se nezdařilo: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "uložení datumu vytvoření se nezdařilo: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "čtení veřejného klíče se nezdařilo: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "odpověď neobsahuje veřejný klíč\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "odpověď neobsahuje RSA modulus\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "odpověď neobsahuje veřejný RSA exponent\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "používám implicitní PIN jako %s\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" "použití implicitního PINu jako %s selhalo: %s – vypínám jeho budoucí " "použití\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||Prosím vložte PIN%%0A[podpis hotov: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||Prosím vložte PIN" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "funkce PIN callback zkončila chybou: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "PIN pro CHV%d je příliš krátký; minimální délka je %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "verifikace CHV%d se nezdařila: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "chyba při získání CHV z karty\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "karta je trvale uzamčena!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" "Do trvalého uzamčení karty zůstává %d pokusů o zadání PINu administrátora\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|Prosím vložte administrátorský PIN%%0A[zbývá pokusů: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|Prosím vložte administrátorský PIN" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "přístup k administrátorským příkazům není nakonfigurován\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "Kód pro resetování není nastaven nebo již není dostupný\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||Prosím vločte kód pro resetování karty" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "Kód pro resetování je příliš krátký; minimální délka je %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|Nový kód pro resetování" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|Nový PIN administrátora" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|Nový PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "chyba při získání nového PINu: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "chyba při čtení aplikačních dat\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "chyba při čtení fingerpritnu DO\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "klíč již existuje\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "existující klíč bude přepsán\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "generování nového klíče\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "zápisování nového klíče\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "chybí časové razítko vytvoření\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "schází RSA modulus nebo nemá velikost %d bitů\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "schází veřejný RSA exponent nebo je delší než %d bitů\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "schází RSA prime %s nebo nemá velikost %d bitů\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "nelze uložit klíč: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "prosím počkejte než bude klíč vygenerován ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "henerování klíče se nezdařilo\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "generování klíče dokončeno (%d sekund)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "neplatná struktura OpenPGP kraty (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "otisk na kartě se neshoduje s požadovaným\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "karta nepodporuje hashovací algoritmus %s\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "dosud vytvořené podpisy: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" "ověření administrátorského PIN je nyní prostřednictvím tohoto příkazu " "zakázáno\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "přístup na %s se nezdařil - vadná OpenPGP karta?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "ASCII kódování: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "neplatná hlavička ASCII kódování: " #: g10/armor.c:459 msgid "armor header: " msgstr "ASCII hlavička: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "neplatná hlavička podpisu v čitelném formátu\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "neznámá ASCII hlavička: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "vnořené podpisy v čitelném formátu\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "neočekávaný ASCII armor: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "nesprávné označení řádku mínusy: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "neplatný radix64 znak %02X byl přeskočen\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "předčasný konec souboru (žádné CRC)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "předčasný konec souboru (žádné CRC)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "špatný formát CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "Chyba CRC; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "předčasný konec souboru (v patičce)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "chyba v patičce\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "nenalezena žádná platná data ve formátu OpenPGP.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "neplatné kódování ASCII: řádek je delší než %d znaků\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "neplatný znak (quoted-printable) v ASCII kódování - pravděpodobně byl použit " "špatný MTA\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "OpenPGp karta není dostupná: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "Nalezena OpenPGP karta číslo %s\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "nelze provést v dávkovém módu\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "Tento příkaz je dostupný pouze pro kraty verze 2\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Váš výběr? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[není nastaven]" #: g10/card-util.c:512 msgid "male" msgstr "muž" #: g10/card-util.c:513 msgid "female" msgstr "žena" #: g10/card-util.c:513 msgid "unspecified" msgstr "neuvedeno" #: g10/card-util.c:540 msgid "not forced" msgstr "není vyžadováno" #: g10/card-util.c:540 msgid "forced" msgstr "vyžadováno" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "Chyba: V současné verzi je povolenou pouze plain ASCII.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "Chyba: Znak \"<\" nelze použít.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "Chyba: Více mezer není povoleno.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "Příjmení držitele karty: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "Jméno (křestní) držitele karty: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "Chyba: jméno a příjmení je příliš dlouhé (limit je %d znaků).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "URL pro získání veřejného klíče: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "Chyba: URL je příliš dlouhé (limit je %d znaků).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "nepodařilo se alokovat dostatek paměti: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "chyba při čtení `%s': %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "chyba při zápisu `%s': %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "Login (jménu účtu): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "Chyba: Login je příliš dlouhý (limit je %d znaků).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "Privátní DO data: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "Chyba: Privátní DO je příliš dlouhé (limit je %d znaků).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "Jazykové předvolby: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "Chyba: neplatná délka řetezce s předvolbami.\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "Chyba: neplatný znak v řetězci s předvolbami\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "Zadejte pohlaví: M - mužské, F - ženské nebo stisněte mezerník: " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "Chyba: neplatná odpověď.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "CA fingerprint: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "Chyba: nesprávně naformátovaný fingerprint.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "operace s klíčem není možná: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "toto není OpenPGP karta" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "chyba při získání informací o aktuálním klíči: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "Přepsat existující klíč? (a/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "POZNÁMKA: Nelze zaručit, že karta podporuje požadovanou velikost.\n" " Pokud generování klíče neuspěje, prosím, nahlédněte do " "dokumentace\n" " své karty, kde se dozvíte, jaké velikosti jsou dovoleny.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Jakou délku klíče si přejete pro podepisovací klíč? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Jakou délku klíče si přejete pro šifrovací klíč? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Jakou délku klíče si přejete pro autentizační klíč? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "zaokrouhleno na %u bitů\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "velikost klíče %s musí být v intervalu %u-%u\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "Karta bude nyní přenastavena na generování klíče dlouhého %u bitů\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "chyba při změně velikosti klíče z %d na %u bitů: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "Vytvořit zálohu šifrovacího klíče mimo kartu? (A/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "POZN: klíč je již na kartě uložen!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "Přepsat existující klíče? (a/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "Prosím nezapomeňte, že tovární nastavení PINu je\n" " PIN = `%s' PIN administrátora = `%s'\n" "Toto nastavení můžete změnit příkazem --change-pin\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "Prosím, vyberte druh klíče, který chcete generovat:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) Podepisovací klíč\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) Šifrovací klíč\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) Autentizační klíč\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "Neplatný výběr.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "Prosím vyberte místo pro uchování klíče:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "neznámý algoritmus pro ochranu klíče\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "tajné části klče nejsou dostupné\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "tajný klíč je na kartě uložen\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "chyba při zápisu klíče na kartu: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "ukončit toto menu" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "zobraz administrátorské příkazy" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "ukázat tuto pomoc" #: g10/card-util.c:1687 msgid "list all available data" msgstr "vypiš všechna dostupná data" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "změní jméno majitele karty" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "změní URL pro záskání klíče" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "získá klíč specifikovaný v URL karty" #: g10/card-util.c:1693 msgid "change the login name" msgstr "změnit login name" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "změnit jazykové předvolby" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "změní pohlaví držitele karty" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "vypsat fingerprint certifikační autority" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "zapnout/vypnout požadování PINu při každé self-sign operaci" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "vytvořit nový pár klíčů" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "nabídka pro změnu anebo odblokování PINu" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "ověř PIN a vypiš všechna data" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "odblokovat PIN pomocí resetačního kódu" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/karta> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "pouze administrátorské příkazy\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "administrátorské příkazy jsou povoleny\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "administrátorské příkazy nejsou povoleny\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "Neplatný příkaz (zkuste \"help\")\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "čtečka karet není dostupná\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "Prosím vožte kartu a stiskněte enter. Operaci zrušíte stisknutím 'z': " # rp: check in source code #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "výběr openpgp se nezdařil: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "Prosím vyjměte kartu a vložte jinou se seriovým číslem:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" "Je-li nová karta připravena, stiskněte enter. Operaci zrušíte stisknutím " "'z': " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "Vložte nový PIN administrátora: " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "Vložte nový PIN: " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "Vložte PIN administrátora: " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "Vložte PIN: " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "Opakujte tento PIN: " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "PIN není zopakován správně; zkuste to znovu" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "nelze otevřít `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output pro tento příkaz není platný\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "klíč \"%s\" nenalezen: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "chyba při čtení bloku klíče: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(dokud neurčíte klíč jeho fingerprintem)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "bez parametru \"--yes\" to nemohu v dávkovém módu provést\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "Smazat tento klíč ze souboru klíčů? (a/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "Toto je tajný klíč! - opravdu smazat? (a/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "smazání bloku klíče se nezdařilo: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "informace o důvěryhodnosti vlastníka klíče vymazány\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "existuje tajný klíč pro tento veřejný klíč \"%s\"!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "" "abyste ho smazal(a), použijte nejprve parametr \"--delete-secret-key\".\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "chyba při vytváření hesla: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "v módu S2K nelze použít symetrický ESK paket\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "použití šifry: %s\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' je již zkomprimován\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "VAROVÁNÍ: soubor `%s' je prázdný\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "v módu --pgp2 můžete šifrovat pouze RSA klíčem o délce 2048 bitů a méně\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "čtu z `%s'\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "algoritmus IDEA nelze použít pro všechny klíče, pro které šifrujete.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "" "VAROVÁNÍ: vyžádaná symetrická šifra %s (%d) nevyhovuje předvolbám příjemce\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "" "VAROVÁNÍ: vyžádaný komprimační algoritmus %s (%d) nevyhovuje předvolbám " "příjemce\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "vyžádaná symetrická šifra %s (%d) nevyhovuje předvolbám příjemce\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "použití %s není v módu %s dovoleno\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s zašifrovaný pro: %s\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s zašifrovaná data\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "zašifrováno neznámým algoritmem %d\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "VAROVÁNÍ: zpráva byla zašifrována slabým klíčem v symetrické šifře.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "problém se zašifrovaným paketem\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "spuštění externího programu není podporováno\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "nemohu vytvořit adresář `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "volání externích programů je zakázáno, protože file permissions nejsou\n" "nastaveny nebezpečně\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "" "na této platformě jsou při volání externích programů vyžadovány\n" "dočasné soubory (temp files)\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "nelze spustit program `%s': %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "nelze spustit shell `%s': %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "systémová chyba při volání externího programu: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "neočekávaný konec externího programu\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "nelze spustit externí program\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "nelze přečíst odpověď externího programu: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "VAROVÁNÍ: nelze smazat dočasný soubor (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "VAROVÁNÍ: nelze smazat dočasný adresář `%s': %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "export podpisů, které jsou označeny jako lokální" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "exportovat atributy uživatelských ID (obecně ID fotografií)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "export revokačních klíčů označených jako \"citlivé\"" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "odstranit passphrase z exportovaných podklíčů" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "odstranit při exportu nepoužitelné části z klíče" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "odstranit při exportu z klíče vše, co lze" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "exportování tajného klíče není povoleno\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "klíč %s: není chráněný - přeskočeno\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "klíč %s: PGP 2.x klíč - přeskočeno\n" # rp: check source code #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "klíč %s: klíč na kartě - přeskočeno \n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "exportovat nechráněné podklíče\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "nelze odstranit ochranu podklíče: %s\n" #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "VAROVÁNÍ: tajný klíč %s není chráněn pomocí simple SK checksum\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "VAROVÁNÍ: nebylo nic vyexportováno\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Příkazy:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[soubor]|vytvořit podpis" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[soubor]|vytvořit podpis v čitelném dokumentu" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "vytvořit podpis oddělený od dokumentu" #: g10/gpg.c:393 msgid "encrypt data" msgstr "šifrovat data" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "šifrování pouze se symetrickou šifrou" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "dešifrovat data (implicitně)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "verifikovat podpis" #: g10/gpg.c:401 msgid "list keys" msgstr "vypsat seznam klíčů" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "vypsat seznam klíčů a podpisů" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "vypsat a zkontrolovat podpisy klíčů" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "vypsat seznam klíčů a fingerprintů" #: g10/gpg.c:406 msgid "list secret keys" msgstr "vypsat seznam tajných klíčů" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "vytvořit nový pár klíčů" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "odstranit klíč ze souboru veřejných klíčů" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "odstranit klíč ze souboru tajných klíčů" #: g10/gpg.c:411 msgid "sign a key" msgstr "podepsat klíč" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "podepsat klíč lokálně" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "podepsat nebo modifikovat klíč" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "vytvořit revokační certifikát" #: g10/gpg.c:416 msgid "export keys" msgstr "exportovat klíče" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "exportovat klíče na server klíčů" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "importovat klíče ze serveru klíčů" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "vyhledat klíče na serveru klíčů" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "aktualizovat všechny klíče ze serveru klíčů" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "importovat/sloučit klíče" #: g10/gpg.c:429 msgid "print the card status" msgstr "vytisknout stav karty" #: g10/gpg.c:430 msgid "change data on a card" msgstr "změnit data na kartě" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "změnit PIN karty" #: g10/gpg.c:440 msgid "update the trust database" msgstr "aktualizovat databázi důvěry" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [soubory] vypiš hash" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Možnosti:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "vytvoř výstup zakódovaný pomocí ASCII" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|JMÉNO|šifrovat pro JMÉNO" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "" "použít tento id uživatele pro podepsání\n" " nebo dešifrování" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "" "|N|nastavit úrověň komprimace N (0 - žádná\n" " komprimace)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "použít kanonický textový mód" #: g10/gpg.c:486 msgid "use as output file" msgstr "použít jako výstupní soubor" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "s dodatečnými informacemi" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "neprovádět žádné změny" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "vyžádat potvrzení před přepsáním" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "použít chování striktně podle OpenPGP" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "generovat zprávu komplatibilní s PGP 2.x" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(Použijte manuálové stránky pro kompletní seznam všech příkazů a možností)\n" #: g10/gpg.c:576 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" " -se -r Bob [soubor] podepsat a zašifrovat pro uživatele Bob\n" " --clearsign [soubor] vytvořit podpis čitelného dokumentu\n" " --detach-sign [soubor] vytvořit podpis oddělený od dokumentu\n" " --list-keys [jména] vypsat klíče\n" " --fingerprint [jména] vypsat fingerprinty \n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "Chyby oznamte, prosím, na adresu .\n" "Připomínky k překladu .\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Použití: gpg [možnosti] [soubory] (-h pro pomoc)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Syntaxe: gpg [možnosti] [soubory]\n" "podepsat, ověřit, šifrovat nebo dešifrovat\n" "implicitní operace závisí na vstupních datech\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Podporované algoritmy:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Veřejný klíč: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Šifra: " #: g10/gpg.c:827 msgid "Hash: " msgstr "Hash: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Komprese: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "užití: gpg [možnosti]" #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "konfliktní příkazy\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "no = podpis nalezen v definici skupiny `%s'\n" # g10/g10.c:1179#, c-format #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "" "VAROVÁNÍ: vlastnictví domovského adresáře není nastaveno bezpečně `%s'\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "" "VAROVÁNÍ: vlastnictví konfiguračního souboru není nastaveno bezpečně `%s'\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "" "VAROVÁNÍ: přístupová práva pro domovský adresáře nejsou bezpečná `%s'\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "" "VAROVÁNÍ: přístupová práva pro konfigurační soubor nejsou bezpečná `%s'\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "" "VAROVÁNÍ: vlastnictví adresáře s domovkým adresářem není nastaveno " "nebezpečně `%s'\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "" "VAROVÁNÍ: vlastnictví adresáře s konfiguračním souborem není nastaveno " "nebezpečně `%s'\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "" "VAROVÁNÍ: přístupová práva k adresáři s domovským adresářem nejsou nastavena " "bezpečně `%s'\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "" "VAROVÁNÍ: přístupová práva k adersáři s konfiguračním souborem nejsou " "nastavena bezpečně `%s'\n" # c-format #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "neznámá konfigurační položka \"%s\"\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "zobrazovat ID fotografií během výpisu klíčů" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "ukazovat URL politik během výpisu podpisů" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "ukazovat všechny údaje během výpisu klíčů" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "ukazovat poznámky IETF standardu během vypisování podpisů" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "ukazovat uživatelem vložené údaje během výpisu podpisů" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "ukazovat URL preferovaných keyserverů během výpisu podpisů" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "ukazovat platnost ID uživatelů při výpisu klíčů" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "ukazovat odvolané a prošlé ID uživatelů při výpisu klíčů" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "ukazovat odvolané a prošlé podklíče při výpisu klíčů" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "ukazovat jméno keyringu při výpisu klíčů" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "ukazovat datum expirace při výpisu podpisů" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "POZNÁMKA: starý implicitní soubor s možnostmi `%s ignorován'\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "POZNÁMKA: neexistuje implicitní soubor s možnostmi `%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "soubor s možnostmi `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "čtu možnosti z `%s'\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "POZNÁMKA: %s není pro normální použití!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "`%s' není platná doba expirace podpisu\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "`%s' není platná znaková sada\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "nelze zpracovat URL serveru klíčů\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: neplatný parametr pro server klíčů\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "neplatný parametr pro server klíčů\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: neplatný parametr pro import\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "neplatný parametr pro import\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: neplatný parametr pro export\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "neplatný parametr pro export\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: neplatný parametr pro výpis\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "neplatný parametr pro výpis\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "zobrazovat ID fotografií při ověřování podpisu" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "ukazovat URL politik při ověřování podpisu" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "ukazovat všechnz údaje při ověřování podpisů" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "ukazovat poznámky IETF standardu při ověřování podpisu" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "ukazovat uživatelské poznámky při ověřování podpisu" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "ukazovat URL preferovaných keyserverů při ověřování podpisů" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "ukazovat uživatelské ID při ověřování podpisů" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "ukazovat odvolané a prošlé ID uživatelů při ověřování podpisů" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "ukazovat pouze primární užvatelské ID při ověřování podpisů" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "ověřovat podpisy s daty PKA" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "vyzvednout důvěru podpisů s platnými daty PKA" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: neplatný parametr pro ověření\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "neplatný parametr pro ověření\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "nelze nastavit exec-path na %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: neplatný seznam auto-key-locate\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "neplatný seznam auto-key-locate\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "VAROVÁNÍ: program může vytvořit soubor core!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "VAROVÁNÍ: %s přepíše %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "Není dovoleno používat %s s %s!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s nedává s %s smysl!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "POZNÁMKA: %s není v této verzi dostupné\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "nelze spustit s nebezpečnou pamětí vzhledem k %s\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "" "v módu --pgp2 můžete vytvářet pouze oddělené podpisy nebo podpisy čitelné " "jako text\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "v módu --pgp2 nelze současně šifrovat a podepisovat\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "v módu --pgp2 musíte použít soubor (ne rouru).\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "šifrování zpráv v módu --pgp2 vyžaduje algoritmus IDEA\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "vybraný šifrovací algoritmus je neplatný\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "vybraný hashovací algoritmus je neplatný\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "vybraný komprimovací algoritmus je neplatný\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "vybraný hashovací algoritmus je neplatný\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "položka completes-needed musí být větší než 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "položka marginals-needed musí být větší než 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "položka max-cert-depth musí být v rozmezí od 1 do 255\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "" "neplatná implicitní úroveň certifikace (default-cert-level); musí být 0, 1, " "2 nebo 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "" "neplatná minimální úroveň certifikace (min-cert-level); musí být 0, 1, 2 " "nebo 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "POZNÁMKA: jednoduchý mód S2K (0) je důrazně nedoporučován\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "neplatný mód S2K; musí být 0, 1 nebo 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "neplatné defaultní předvolby\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "neplatné uživatelské předvolby pro šifrování\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "neplatné uživatelské předvolby pro hashování\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "neplatné uživatelské předvolby pro komprimaci\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s dosud není funkční s %s\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "použití šifrovacího algoritmu `%s' v módu %s dovoleno\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "použití hashovacího algoritmu `%s' v módu %s dovoleno\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "použití komprimačního algoritmu `%s' v módu %s dovoleno\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "nemohu inicializovat databázi důvěry: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "VAROVÁNÍ: specifikován adresát (-r) bez použití šifrování s veřejným klíčem\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [jméno souboru]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [jméno souboru]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "symetrické šifrování `%s' se nepovedlo: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [jméno souboru]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [jméno souboru]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "nelze použít --symmetric --encrypt s příkazem --s2k-mode 0\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "nelze použít --symmetric --encrypt v módu %s\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [jméno souboru]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [jméno souboru]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [jméno souboru]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "nelze použít --symmetric --sign --encrypt s příkazem --s2k-mode 0\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "nelze použít --symmetric --sign --encrypt v módu %s\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [jméno souboru]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [jméno souboru]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [jméno souboru]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key id uživatele" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key id uživatele" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key id uživatele [příkazy]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [id uživatele] [soubor s klíči (keyring)]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "odeslání na keyserver se nezdařilo: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "získání dat z keyserveru se nezdařilo: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "export klíče se nepodařil: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "hledání na keyserveru se nezdařilo: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "refresh dat na keyserveru se nezdařil: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "dekódování z ASCII formátu selhalo: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "kódování do ASCII formátu selhalo: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "neplatný hashovací algoritmus `%s'\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[jméno souboru]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Začněte psát svou zprávu ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "zadané URL pro certifikační politiku je neplatné\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "zadané URL pro podepisovací politiku je neplatné\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "zadané URL preferovaného serveru klíčů je neplaté\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "příliš mnoho položek v bufferu veřejných klíčů - vypnuto\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[ID uživatele nenalezeno]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "klíč %s: tajný klíč bez klíče veřejného - přeskočeno\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "„%s“ automaticky získáno přes %s\n" # c-format #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "Neplatný klíč %s změněn na platný pomocí --always-non-selfsigned-uid\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "neexistuje tajný podklíč pro veřejný klíč %s - ignorováno\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "používám podklíč %s místo primárního klíče %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "být o trochu víc tichý" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "ber klíče z této klíčenky (keyringu)" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "pouze varování při konfliktu časového razítka" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|FD|zapsat informace o stavu do tohoto FD" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Použití: gpg [možnosti] [soubory] (-h pro pomoc)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Syntaxe: gpgv [volby] [souboru]\n" "Ověří podpisy proti známým, důvěryhodným klíčům\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Je na Vás, abyste zde přiřadil(a) hodnotu; tato hodnota nebude nikdy\n" "exportována třetí straně. Potřebujeme ji k implementaci \"pavučiny\n" "důvěry\"; nemá to nic společného s (implicitně vytvořenou) \"pavučinou\n" "certifikátů\"." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Aby bylo možné vybudovat pavučinu důvěry, musí GnuPG vědět, kterým klíčům\n" "důvěřujete absolutně - obvykle to jsou ty klíče, pro něž máte přístup\n" "k tajným klíčům. Odpovězte \"ano\", abyste nastavili tyto klíče\n" "jako absolutně důvěryhodné\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Pokud přesto chcete použít tento nedůvěryhodný klíč, odpovězte \"ano\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Vložte identifikátor adresáta, kterému chcete poslat zprávu." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "Vyberte algoritmus, který chcete použít.\n" "\n" "DSA (alias DSS) je Digital Signature Algorithm a může být použit pouze pro\n" "podepisování.\n" "\n" "Elgamal je pouze šifrovací algoritmus.\n" "\n" "RSA může být použit pro šifrování anebo podepisování.\n" "\n" "První (primární) klíč musí být vždy klíč, pomocí kterého lze podepisovat." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "Obecně nelze doporučit používat stejný klíč pro šifrování a podepisování\n" "Tento algoritmus je vhodné použít jen za jistých podmínek.\n" "Kontaktujte prosím nejprve bezpečnostního specialistu." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Vložte délku klíče" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Odpovězte \"ano\" nebo \"ne\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Vložte požadovanou hodnotu tak, jak je uvedeno v příkazovém řádku.\n" "Je možné vložit datum ve formátu ISO (RRRR-MM-DD), ale nedostanete\n" "správnou chybovou hlášku - místo toho systém zkusí interpretovat\n" "zadanou hodnotu jako interval." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Vložte jméno držitele klíče" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "prosím, vložte e-mailovou adresu (nepovinné, ale velmi doporučované)" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Prosím, vložte nepovinný komentář" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N pro změnu názvu.\n" "C pro změnu komentáře.\n" "E pro změnu e-mailové adresy.\n" "O pro pokračování generování klíče.\n" "Q pro ukončení generování klíče." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "Jestliže chcete generovat podklíč, odpovězte \"ano\" (nebo jen \"a\")." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Než podepíšete id uživatele, měli byste nejprve ověřit, zda klíč\n" "patří osobě, jejíž jméno je uvedeno v identifikátoru uživatele.\n" "Je velmi užitečné, když ostatní vědí, jak důsledně jste provedl(a)\n" "takové ověření.\n" "\n" "\"0\" znamená, že neuvádíte, jak důsledně jste pravost klíče ověřil(a) \n" "\n" "\"1\" znamená, že věříte tomu, že klíč patří osobě, která je uvedena,\n" " v uživatelském ID, ale nemohl jste nebo jste neprověřil tuto " "skutečnost.\n" " To je užitečné pro \"osobní\" verifikaci, když podepisujete klíče, " "které\n" " používají pseudonym uživatele.\n" "\n" "\"2\" znamená, že jste částečně ověřil pravost klíče. Např. jste ověřil\n" " fingerprint klíče a zkontroloval identifikátor uživatele\n" " uvedený na klíči s fotografickým id.\n" "\n" "\"3\" Znamená, že jste provedl velmi pečlivě ověření pravosti klíče.\n" " To může například znamenat, že jste ověřil fingerprint klíče \n" " jeho vlastníka osobně a dále jste pomocí obtížně padělatelného \n" " dokumentu s fotografií (například pasu) ověřil, že jméno majitele\n" " klíče se shoduje se jménem uvedeným v uživatelském ID a dále jste \n" " ověřil (výměnou elektronických dopisů), že elektronické adresa uvedená \n" " v ID uživatele patří majiteli klíče.\n" "\n" "Prosím nezapomeňte, že příklady uvedené pro úroveň 2 a 3 jsou *pouze*\n" "příklady.\n" "Je jen na Vašem rozhodnutí co \"částečné\" a \"pečlivé\" ověření znamená\n" "když budete podepisovat klíče jiným uživatelům.\n" "\n" "Pokud nevíte, jaká je správná odpověď, odpovězte \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "" "Pokud chcete podepsat VŠECHNY identifikátory uživatelů, odpovězte \"ano\"" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Pokud opravdu chcete smazat tento identifikátor uživatele, odpovězte \"ano" "\".\n" "Všechny certifikáty budou také ztraceny!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Odpovězte \"ano\", pokud chcete smazat podklíč" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Toto je platný podpis klíče; normálně nechcete tento podpis smazat,\n" "protože může být důležitý při vytváření důvěry klíče nebo jiného klíče\n" "ceritifikovaného tímto klíčem." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Tento podpis nemůže být ověřen, protože nemáte odpovídající veřejný klíč.\n" "Jeho smazání byste měl(a) odložit do doby, než budete znát, který klíč\n" "byl použit, protože tento podpisovací klíč může vytvořit důvěru\n" "prostřednictvím jiného již certifikovaného klíče." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "Podpis je neplatný. Je rozumné ho odstranit z Vašeho souboru klíčů." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Toto je podpis, který váže identifikátor uživatele ke klíči. Obvykle\n" "není dobré takový podpis odstranit. GnuPG nemůže tento klíč nadále\n" "používat. Udělejte to jenom v případě, kdy je tento podpis klíče\n" "jím samým z nějakého důvodu neplatný a kdy je k dipozici klíč jiný." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Změnit předvolby pro všechny uživatelské ID (nebo pouze pro označené)\n" "na aktuální seznam předvoleb. Časová razítka všech dotčených podpisů\n" "klíčů jimi samotnými budou posunuty o jednu vteřinu dopředu.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Prosím, vložte heslo; toto je tajná věta \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "" "Prosím, zopakujte poslední heslo, abyste si byl(a) jistý(á), co jste \n" " napsal(a)." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Zadejte název souboru, ke kterému se podpis vztahuje" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Pokud si přejete přepsání souboru, odpovězte \"ano\"" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Prosím, vložte nový název souboru. Pokud pouze stisknete RETURN, bude\n" "použit implicitní soubor (který je ukázán v závorkách)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Měl(a) byste specifikovat důvod certifikace. V závislosti na kontextu\n" "máte možnost si vybrat ze seznamu:\n" " \"Klíč byl kompromitován\"\n" " Toto použijte, pokud si myslíte, že k Vašemu tajnému klíči získaly\n" " přístup neoprávněné osoby.\n" " \"Klíč je nahrazen\"\n" " Toto použijte, pokud jste tento klíč nahradil(a) novějším klíčem.\n" " \"Klíč se již nepoužívá\"\n" " Toto použijte, pokud tento klíč již nepoužíváte.\n" " \"Identifikátor uživatele už není platný\"\n" " Toto použijte, pokud by se identifikátor uživatele už neměl používat;\n" " normálně se používá k označení neplatné e-mailové adresy.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Pokud chcete, můžete vložit text popisující původ vzniku tohoto revokačního\n" "ceritifikátu. Prosím, stručně. \n" "Text končí prázdným řádkem.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Pomoc není k dispozici" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Pomoc není dostupná pro '%s'" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "importovat podpisy, které jsou označeny jen jako místní" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "opravit poškození vzniklá při importu z PKS serveru" #: g10/import.c:104 msgid "do not clear the ownertrust values during import" msgstr "během importu nesmazat důvěry k vlastníkům" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "po importu neaktualizovat databázi důvěry" # rp: check source code #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "při importu tajného klíče vytvořit veřejný klíč" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "přijímat aktualizace pouze u existujících klíčů" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "po importu odstranit nepoužitelné části z klíče" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "po importu odstranit z klíče vše, co lze" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "blok typu %d byl přeskočen\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "%lu klíče byly doposud zpracovány\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "Celkový počet zpracovaných klíčů: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " přeskočeny nové klíče: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " bez ID uživatele: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importováno: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " beze změn: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " nové ID uživatelů: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " nové podklíče: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " nové podpisy: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " nové revokace klíčů: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " přečtené tajné klíče: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " importované tajné klíče: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " tajné klíče nezměněny: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " neimportováno: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " odstraněné podpisy: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " odstraněné uživatelské ID: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "VAROVÁNÍ: klíč %s obsahuje preference pro algoritmy,\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr "které nesjou k dispozici. Táká se to těchto user ID:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": preference pro šifrovací algortimus %s\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": preference pro podepisovací algoritmus %s\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": preference pro komprimační algoritmus %s\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "velmi doporučujeme aktualiaci nastavení vašich preferencí a\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" "distribuci tohoto klíče aby jste předešel problémům s neshodou algoritmů\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "nelze aktualizovat preference s: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "klíč %s: chybí identifikátor uživatele\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "klíč %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "odmítnut filtrem pro import" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "klíč %s: PKS poškození podklíče opraveno\n" # c-format #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "klíč %s: přijat id uživatele \"%s\",který není podepsán jím samým\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "klíč %s: chybí platný identifikátor uživatele\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "může to být způsobeno chybějícím podpisem klíče jím samým\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "klíč %s: veřejný klíč nenalezen: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "klíč %s: nový klíč - přeskočen\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "nenalezen zapisovatelný soubor klíčů (keyring): %s\n" # g10/import.c:766 g10/openfile.c:261#, c-format #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "zapisuji do '%s'\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "chyba při zápisu souboru klíčů (keyring) `%s': %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "klíč %s: veřejný klíč \"%s\" importován\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "klíč %s: neodpovídá naší kopii\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "klíč %s: nemohu najít originální blok klíče: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "klíč %s: nemohu číst originální blok klíče: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "klíč %s: \"%s\" 1 nový identifikátor uživatele\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "klíč %s: \"%s\" %d nových identifikátorů uživatele\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "klíč %s: \"%s\" 1 nový podpis\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "klíč %s: \"%s\" %d nových podpisů\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "klíč %s: \"%s\" 1 nový podklíč\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "klíč %s: \"%s\" %d nových podklíčů\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "klíč %s: \"%s\" %d podpisů odstraněno\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "klíč %s: \"%s\" %d podpisů odstraněno\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "klíč %s: \"%s\" %d ID uživatele odstraněno\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "klíč %s: \"%s\" %d ID uživatele odstraněno\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "klíč %s: \"%s\" beze změn\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "tajný klíč %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "import tajných klíčů není povolen\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "klíč %s: tajný klíč s neplatnou šifrou %d - přeskočeno\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "není nastaven implicitní soubor tajných klíčů %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "klíč %s: tajný klíč importován\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "klíč %s: je již v souboru tajných klíčů\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "klíč %s: nenalezen tajný klíč: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "klíč %s: chybí veřejný klíč - nemohu aplikovat revokační certifikát\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "klíč %s: neplatný revokační certifikát: %s - zamítnuto\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "klíč %s: \"%s\" revokační certifikát importován\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "klíč %s: neexistuje id uživatele pro podpis\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "klíč %s: nepodporovaný algoritmus veřejného klíče u uživatelského id \"%s" "\"\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "klíč %s neplatný podpis klíče jím samým u uživatelského id \"%s\"\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "klíč %s: nepodporovaný algoritmus veřejného klíče\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "klíč %s: neplatný podpis klíče jím samým (direct key signature)\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "klíč %s: neexistuje podklíč pro vázání klíčů\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "klíč %s: neplatná vazba podklíče\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "klíč %s: smazána vícenásobná vazba podklíče\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "klíč %s: neexistuje podklíč pro revokaci klíče\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "klíč %s: neplatný revokační podklíč\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "klíč %s: smazána vícenásobná revokace podklíče\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "klíč %s: přeskočen identifikátor uživatele \"%s\"\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "klíč %s: podklíč přeskočen\n" #: g10/import.c:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "klíč %s: podpis není exportovatelný (třída %02X) - přeskočeno\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "klíč %s: revokační certifikát na špatném místě - přeskočeno \n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "klíč %s: neplatný revokační certifikát: %s - přeskočen\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "klíč %s: podpis podklíče na špatném místě - přeskočeno \n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "klíč %s: neočekávaná podpisová třída (0x%02X) - přeskočeno\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "klíč %s: objeven duplikovaný identifikátor uživatele - sloučen\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "VAROVÁNÍ: klíč %s může být revokován: zkouším získat revokační klíč %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "VAROVÁNÍ: klíč %s může být revokován: revokační klíč %s nenalezen.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "klíč %s: \"%s\" přidán revokační certifikát\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "klíč %s: podpis klíče jím samým (direct key signature) přidán\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "POZNÁMKA: S/N klíče neodpovídá S/N karty\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "POZNÁMKA: primární klíč je online a je uložen na kartě\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "POZNÁMKA: sekundární klíč je online a je uložen na kartě\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "chyba při vytváření souboru klíčů (keyring)`%s': %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "soubor klíčů (keyring) `%s' vytvořen\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "zdroj bloku klíče `%s': %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "selhalo obnovení vyrovnávací paměti klíčů: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[revokace]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[podpis klíče jím samým]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 špatný podpis\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d špatných podpisů\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 podpis neověřen, protože chybí klíč\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d podpisů neověřených, protože chybí klíč\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 podpis neověřen, protože vznikla chyba\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d podpisů neověřených, protože vznikly chyby\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "objeven 1 identifikátor uživatele bez platného podpisu jím samým\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "objeveno %d identifikátorů uživatele bez platného podpisu jím samým\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Prosím rozhodněte, nakolik důvěřete tomuto uživateli, že správně\n" "verifikuje klíče jiných uživatelů (prohlédnutím cestovních pasů,\n" "kontrolou fingerprintů z různých zdrojů...)?\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = Důvěřuji částečně\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = Důvěřuji úplně\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "Prosím vložte hloubku důvěry (depth trust) k tomuto podpisu.\n" "Hloubka větší než 1 umožňuje klíčům, které jste podepsal\n" "podepsat jiný klíč, který bude pro Vás důvěryhodný.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" "Prosím vložte doménu, pro kterou je podpis omezen nebo stiskněte enter pro " "podpis bez omezení na doménu.\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "Uživatelské ID \"%s\" je revokováno." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Jste si jistý(á), že stále chcete podepsat tento klíč? (a/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Nelze podepsat.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "Vypršela platnost uživatelského ID \"%s\"." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "ID uživatele \"%s\" není podepsáno jím samým." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "ID uživatele \"%s\" je připraveno k podpisu." #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "Podepsat? (a/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "Podpis klíče \"%s\" jím samým je\n" "podpis formátu PGP 2.x.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Přejete si jej změnit na formát OpenPGP? (a/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Platnost Vašeho podpisu na \"%s\"\n" "vypršela.\n" "\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "" "Chcete vytvořit nový podpis a nahradit jím ten, jehož platnost vypršela? (a/" "N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Vaš současný podpis na \"%s\"\n" "je pouze lokální.\n" "\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Přejete si jej změnit na plně exportovatelný podpise? (a/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" je již lokálně podepsán klíčem %s\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" je již podepsán klíčem %s\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Chcete klíč přesto znova podepsat? (a/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "Nic k podepsání klíčem %s\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Platnost klíče vypršela!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Platnost klíče vyprší %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Chcete, aby platnost Vašeho podpisu vypršela ve stejnou dobu? (A/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Nemůžete udělat OpenPGP podpis klíče typu PGP 2.x, když jste v --pgp2 módu.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "To by způsobilo nepoužitelnost klíče v PGP 2.x.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "S jakou jistotou jste prověřili, že klíč, který chcete podepsat\n" "patří výše uvedené osobě.\n" "Pokud neznáte odpověď, zadejte \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Neodpovím.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Nijak jsem to nekontroloval(a).%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) Částečně jsem to ověřil(a).%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Velmi pečlivě jsem to ověřil(a).%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "Vaš výběr? (pro více informací vložte '?'): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Jste si jistý(á), že chcete podepsat tento klíč\n" "svým klíčem \"%s\" (%s)\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "Jedná se o podpis klíče jím samým.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "VAROVÁNÍ: podpis nebude označen jako neexportovatelný.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "VAROVÁNÍ: podpis nebude označen jako neodvolatelný (non-revocable).\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "Podpis bude označen jako neexportovatelný.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "Podpis bude označen jako neodvolatelný (non-revocable).\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "Nijak jsem tento klíč neověřil.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "Částečně jsem ověřil tento klíč.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "Velmi pečlivě jsem ověřil tento klíč.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "Skutečně podepsat? (a/N) " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "podepsání selhalo: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" "K dispozici je jen kontrolní součet klíče nebo je klíč na kartě - passphrase " "nelze změnit.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Tento klíč není chráněný.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Tajné části primárního klíče nejsou dostupné.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "Tajná část primárního klíče jsou uloženy na kartě.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "Klíč je chráněný.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Není možné editovat tento klíč: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "Vložte nové heslo (passphrase) pro tento tajný klíč.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "heslo není zopakováno správně; zkuste to znovu" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "Nechcete heslo - to *není* dobrý nápad!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "Opravdu to chcete udělat? (a/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "přesunuji podpis klíče na správné místo\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "uložit a ukončit" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "vypsat fingerprint klíče" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "vypsat seznam klíčů a id uživatelů" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "vyberte identifikátor uživatele N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "vyberte podklíč N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "kontrolovat podpisy" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "podepsat vybrané ID uživatele [* níže jsou uvedeny relevantní příkazy]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "podepsat vybrané uživatelské ID lokálně" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "podepsat vybrané uživatelské ID důvěryhodným podpisem" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "podepsat vybrané uživatelské ID nerevokovatelným podpisem" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "přidat identifikátor uživatele" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "přidat fotografický ID" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "smazat vybrané ID uživatele" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "přidat podklíčy" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "přidat klíč na kartu" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "přesunout klíč na kartu" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "přesunout záložní klíč na kartu" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "smazat vybrané podklíče" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "přidat revokační klíč" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "smazat podpisy z vybraných uživatelských ID" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "změnit datum expirace pro klíč nebo vybrané podklíče" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "označit vybrané uživatelské ID jako primární" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "přepnout mezi vypisem seznamu tajných a veřejných klíčů" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "vypsat seznam předvoleb (pro experty)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "vypsat seznam předvoleb (podrobně)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "nastavit sadu preferencí pro vybrané uživatelské ID" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "nastavit URL preferovaného serveru klíčů pro vybrané uživatelské ID" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "nastavit sadu preferencí pro vybrané uživatelské ID" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "změnit heslo" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "změnit důvěryhodnost vlastníka klíče" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "revokovat podpisu na vybraných uživatelských ID" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "revokovat vybrané uživatelské ID" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "revokovat klíč nebo vybrané podklíče" #: g10/keyedit.c:1439 msgid "enable key" msgstr "nastavit klíč jako platný (enable)" #: g10/keyedit.c:1440 msgid "disable key" msgstr "nastavit klíč jako neplatný (disable)" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "ukázat vybrané fotografické ID" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" "směstnat nepoužitelná ID uživatelů a odstranit z klíče nepoužitelné podpisy" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "směstnat nepoužitelná ID uživatelů a odstranit z klíče všechny podpisy" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "chyba při čtení bloku tajného klíče \"%s\": %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Tajný klíč je dostupný.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Pro provedení této operace je potřeba tajný klíč.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Prosím, nejdříve použijte příkaz \"toggle\" (přepnout).\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* Příkaz `sign' může být použit s prefixem `l' pro lokální podpis (lsign),\n" " s prefixem `t' pro důvěryhodný podpis (tsign) nebo `nr' pro neodvolatený " "podpis\n" " (nrsign) nebo libovolnou jejich kombinací (ltsign, tnrsign, atd.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "Klíč revokován." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "Opravdu podepsat všechny id uživatele? (a/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Nápověda: Vyberte id uživatele k podepsání\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "Neznámý typ podpisu `%s'\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Tento příkaz není v módů %s dovolený.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Musíte vybrat alespoň jeden id uživatele.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Nemůžete smazat poslední id uživatele!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "Opravdu odstranit všechny vybrané id uživatele? (a/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "Opravdu odstranit tento id uživatele? (a/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "Opravdu přesunout primární klíč? (a/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "Musíte vybrat právě jeden klíč.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "Příkaz očekává jméno souboru jako argument\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "Nemohu otevřít `%s': %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Chyba při čtení záložního klíče z `%s': %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Musíte vybrat alespoň jeden klíč.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Opravdu chcete smazat vybrané klíče? (a/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "Opravdu chcete smazat tento klíč? (a/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "Opravdu revokovat všechny vybrané id uživatele? (a/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "Opravdu revokovat tento id uživatele? (a/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Opravdu chcete revokovat celý klíč? (a/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Opravdu chcete revokovat vybrané podklíče? (a/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Opravdu chcete revokovat tento podklíč? (a/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" "Důvěryhodnost vlastníka nelze měnit je-li používána databáze důvěry " "poskytnutá uživatelem\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "Nastavit seznam předvoleb:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Opravdu aktualizovat předvolby pro vybraný id uživatele? (a/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "Opravdu aktualizovat předvolby? (a/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "Uložit změny? (a/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "Ukončit bez uložení? (a/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "aktualizace selhala: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "aktualizace tajného klíče selhala: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "Klíč nebyl změněn, takže není potřeba jej aktualizovat.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Hash: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Vlastnosti: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "Keyserver bez modifikace" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "Preferovaný keyserver: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "Možnosti: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Uživatelský ID formátu PGP 2.x nemá žádné předvolby\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "V %s tento klíč revokoval %s klíčem %s\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "Tento klíč může být revokován %s klíčem %s " #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(citlivá informace)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "vytvořen: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "revokován: %s" #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "platnost skončila: %s" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "platnost skončí: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "použití: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "důvěra: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "platnost: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Tento klíč byl označen za neplatný (disabled)" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "číslo karty: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Prosím nezapomeňte, že zobrazované údaje o platnosti klíčů nemusí\n" "být nutně správné, dokud znova nespustíte program.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "revokován" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "platnost skončila" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "VAROVÁNÍ: žádné uživatelské ID nebylo označeno jako primární. Tento příkaz\n" " může způsobit, že za primární bude považováno jiné user ID.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Nemůžete změnit dobu platnosti klíče verze 3\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "VAROVÁNÍ: Toto je PGP2 klíč. Přidání fotografického ID může v některých\n" " verzích PGP vést k odmítnutí tohoto klíče.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Jste si jistý, že jej chcete stále přidat? (a/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Neměli by jste přidávat fotografický ID k PGP2 klíči.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Smazat tento dobrý podpis? (a/N/u)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Smazat tento neplatný podpis? (a/N/u)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Smazat tento neznámý podpis? (a/N/u)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Opravdu smazat tento podpis podepsaný sebou samým? (a/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Smazán %d podpis.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Smazáno %d podpisů.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nic nebylo smazáno.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "neplatný" # rp: check source code #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "Uživatel ID \"%s\": zkráceno: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "Uživatel ID \"%s\": %d podpisů odstraněno\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "Uživatel ID \"%s\": %d podpisů odstraněno\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "Uživatelské ID \"%s\": je již minimizováno\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "Uživatelské ID \"%s\": je již vyčištěno\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "VAROVÁNÍ: Toto je PGP2 klíč. Přidání 'pověření revokace' může v některých\n" " verzích PGP vést k odmítnutí tohoto klíče.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "Neměli by jste přidávat 'pověření revokace' k PGP2 klíči.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "Vložte identifikátor uživatele pověřeného revokací: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "klíč formátu PGP 2.x nelze pověřit revokací\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "klíč nelze pověřit revokací jím samým\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "tento klíč již bykl pověřen revokací\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "VAROVÁNÍ: ustanovení klíče 'povřeným revokátorem' je nevratná operace!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "Jste si jistí, že tento klíč chcete pověřit revokací? (a/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Prosím, odstraňte výběr z tajných klíčů.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "Prosím, vyberte nejvýše jeden podklíč.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "Měním dobu expirace podklíče.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Měním dobu expirace primárního klíče.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Nemůžete změnit dobu platnosti klíče verze 3\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "V souboru tajných klíčů chybí odpovídající podpis\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "podepisovací podklíč %s již je křížově certifikován\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "podklíč %s nepodepisuje, a tak není třeba jej křížově certifikovat\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Prosím, vyberte právě jeden id uživatele .\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "přeskočen v3 podpis klíče jím samým u uživatelského id \"%s\"\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "Vložte URL preferovaného keyserveru: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "Jste si jistý(á), že jej chcete přepsat? (a/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "Jste si jistý(á), že jej chcete smazat? (a/N) " # rp: check source code #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "Vložte poznámky: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "Provést? (a/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Neexistuje identifikátor uživatele s indexem %d\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "Neexistuje uživatelské ID s hashem %s\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "Neexistuje podklíč s indexem %d\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "id uživatele:\"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "podepsáno vaším klíčem %s v %s%s%s\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (neexportovatelné)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Platnost podpisu vyprší %s.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Jste si jistý, že jej chcete stále revokovat? (a/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Vytvořit pro tento podpis revokační certifikát? (a/N)" #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "Nepodepsáno vámi.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "Podepsal(a) jste následující identifikátory uživatele: %s:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (nerevokovatelné)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "revokováno vaším klíčem %s v %s\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "Chystáte se revokovat tyto podpisy:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Opravdu vytvořit revokační certifikáty? (a/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "neexistuje tajný klíč\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "Uživatelské ID \"%s\" je již revokováno.\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "VAROVÁNÍ: podpis ID uživatele je datován %d sekund v budoucnosti\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "Klíč %s je již revokován.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "Podklíč %s je již revokován.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "Zobrazuji %s fotografický ID o velikosti %ld pro klíč %s (uid %d)\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "duplicita předvolby `%s'\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "příliš mnoho předvoleb pro šifrování\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "příliš mnoho předvoleb pro vzorkování\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "příliš mnoho předvoleb pro komprimaci\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "neplatná položka `%s' v řetězci s předvolbami\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "zapisuji podpis klíče jím samým (direct signature)\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "zapisuji podpis klíče sebou samým\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "zapisuji \"key-binding\" podpis\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "neplatná délka klíče; použiji %u bitů\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "délka klíče zaokrouhlena na %u bitů\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "Podepisování" #: g10/keygen.c:1365 msgid "Certify" msgstr "Certifikování" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "Šifrování" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "Autentizace" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsEeAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "Pro klíč %s lze provést: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "Aktuálně povolené akce: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) Zapnout/vypnout schopnost podepisovat\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) Zapnout/vypnout schopnost šifrovat\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) Zapnout/vypnout schopnost autentizovat\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) Konec\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Prosím, vyberte druh klíče, který chcete:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA a RSA (implicitní)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA a ElGamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (pouze pro podpis)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (pouze pro podpis)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (pouze pro šifrování)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (pouze pro šifrování)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (nastavit si vlastní použití)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (nastavit si vlastní použití)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "klíč %s může mít délku v intervalu %u až %u bitů.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Jakou délku podklíče si přejete? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "Jakou délku klíče si přejete? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "Požadovaná délka klíče je %u bitů.\n" #: g10/keygen.c:1722 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 "" "Prosím určete, jak dlouho by klíč měl platit.\n" " 0 = doba platnosti klíče není omezena\n" " = doba platnosti klíče skončí za n dní\n" " w = doba platnosti klíče skončí za n týdnů\n" " m = doba platnosti klíče skončí za n měsíců\n" " y = doba platnosti klíče skončí za n let\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Prosím určete, jak dlouho by měl podpis platit.\n" " 0 = doba platnosti podpisu není omezena\n" " = doba platnosti podpisu skončí za n dní\n" " w = doba platnosti podpisu skončí za n týdnů\n" " m = doba platnosti podpisu skončí za n měsíců\n" " y = doba platnosti podpisu skončí za n let\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Klíč je platný pro? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "Podpis je platný pro? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "neplatná hodnota\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "Platnost klíče nikdy neskončí\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "Platnost podpisu nikdy neskončí\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "Platnost klíče skončí v %s\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "Platnost podpisu skončí v %s\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Váš systém neumí zobrazit data po roce 2038.\n" "V každém případě budou data korektně zpracovávána do roku 2106.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "Je to správně (a/N)? " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Aby bylo možné rozpoznat Váš klíč, musíte znát identifikátor uživatele;\n" "program jej složí z Vašeho jména a příjmení, komentáře a e-mailu\n" "v tomto tvaru:\n" " \"Magda Prochazkova (student) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Jméno a příjmení: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "Neplatný znak ve jméně\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "Jméno nemůže začínat číslicí\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "Jméno musí být dlouhé alespoň 5 znaků\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "E-mailová adresa: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Neplatná e-mailová adresa\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Komentář: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "Neplatný znak v komentáři\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "Používáte znakovou sadu `%s'.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "Zvolil(a) jste tento identifikátor uživatele:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Do pole jméno nebo komentář nepište, prosím, e-mailovou adresu.\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "jJkKeEPpUu" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "Změnit (J)méno, (K)omentář, (E)-mail nebo (U)končit? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "Změnit (J)méno, (K)omentář, (E)-mail, (P)okračovat dál nebo (U)končit " "program? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Nejdřív, prosím, opravte chybu\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Pro ochranu Vašeho tajného klíče musíte zadat heslo.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 "" "Nechcete heslo - to *není* dobrý nápad!\n" "Dobře, budu pokračovat bez hesla. Kdykoliv můžete heslo změnit použitím\n" "tohoto programu s parametrem \"--edit-key\".\n" "\n" #: g10/keygen.c:2034 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 "" "Musíme vytvořit mnoho náhodných bajtů. Během vytváření můžete\n" "provádět nějakou jinou práci na počítači (psát na klávesnici, pohybovat " "myší,\n" "používat disky); díky tomu má generátor lepší šanci získat dostatek " "entropie.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Vytváření klíče bylo zrušeno.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "zapisuji veřejný klíč do `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "zapisuji tajný klíč do `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "zapisuji tajný klíč do `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "nenalezen zapisovatelný soubor veřejných klíčů (pubring): %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "nenalezen zapisovatelný soubor tajných klíčů (secring): %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "chyba při zápisu do souboru veřejných klíčů `%s': %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "chyba při zápisu do souboru tajných klíčů `%s': %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "veřejný a tajný klíč byly vytvořeny a podepsány.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Tento klíč nemůže být použitý pro šifrování. K vytvoření\n" "sekundárního klíče pro tento účel můžete použít příkaz \"--edit-key\".\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Vytvoření klíče se nepodařilo: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "klíč byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" "je problém se systémovým časem)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "klíč byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" "je problém se systémovým časem)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "POZNÁMKA: vytvoření podklíče pro klíče v3 není v souladu s OpenPGP\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "Opravdu vytvořit? (a/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "uložení klíče na kartu se nezdařilo: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "nemohu vytvořit zálohu souboru `%s': %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "POZNÁMKA: záloha klíče z karty uložena do `%s'\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "nikdy " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kritická podepisovací politika: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Podepisovací politika: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "Kriticky preferovaný keyserver: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kritická podepisovací notace: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Podepisovací notace: " #: g10/keylist.c:471 msgid "Keyring" msgstr "soubor klíčů (keyring)" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Primární fingerprint klíče:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Fingerprint podklíče:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " Primární fingerprint klíče:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Fingerprint podklíče:" #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " Fingerprint klíče =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " Seriové číslo karty =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "přejmenování `%s' na `%s' se nezdařilo: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "VAROVÁNÍ: Existují dva soubory s tajnými informacemi.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s je beze změny\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s je nový\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Prosím, opravte tento možný bezpečnostní problém\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "cache souboru klíčů `%s'\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu klíčů již uloženo v cache (%lu podpisů)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu klíčů uloženo v cache (%lu podpisů)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: soubor klíčů (keyring) vytvořen\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "zahrnout do výsledku hledání odvolané klíče" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "zahrnout podklíče, když se hledá podle ID klíče" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "používat dočasné soubory na přenos dat k modulům pro servery klíčů" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "nemazat dočasné soubory po jejich použití" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "automaticky získávat klíče při ověřování podpisů" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "respektovat URL preferovaného keyserveru nastavené na klíči" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "respektovat PKA záznamy klíče při získávání klíčů" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "VAROVÁNÍ: volba `%s' pro server klíčů není na této platformě účinná\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "disabled" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "Vložte číslo (čísla), 'N' pro další nebo 'Q' pro konec> " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "neplatný protokol serveru klíčů (us %d!=handler %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "klíč \"%s\" nebyl na serveru klíčů nalezen\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "klíč nebyl na serveru klíčů nalezen\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "požaduji klíč %s ze %s server %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "požaduji klíč %s z %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "vyhledávám jména z %s na serveru %s\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "vyhledávám jména z %s\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "posílám klíč %s na %s server %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "posílám klíč %s na %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "vyhledávám \"%s\" na %s serveru %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "vyhledávám \"%s\" na serveru %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "žádná operace se serverem klíčů!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "VAROVÁNÍ: keyserver handler z jiné verze GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "server klíčů neposlal VERSION\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "chyba komunikace se serverem klíčů: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "žadný server klíčů není znám (použíjte volbu --keyserver)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "volání externího keyserver není v této verzi podporováno\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "protokol serveru klíčů `%s' není podporován\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "akce `%s' není podporována v protokolu `%s' serveru klíčů\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s nepodporuje protokol verze %d\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "časový limit pro server klíčů vypršel\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "interní chyba serveru klíčů\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" není ID klíče: přeskočeno\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "VAROVÁNÍ: nelze aktualizovat klíč %s prostřednictvím %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "aktualizuji 1 klíč z %s\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "aktualizuji %d klíčů z %s\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "VAROVÁNÍ: nelze zíslat URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "VAROVÁNÍ: nelze zpracovat URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "podivná velikost šifrovacího klíče pro sezení (%d)\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s zašifrovaný klíč sezení\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "heslo (passphraze) generováno s použitím neznámého algoritmu %d\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "veřejný klíč je %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "data zašifrována veřejným klíčem: správný DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "zašifrována %u-bitovým %s klíčem, ID %s, vytvořeným %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( # [kw] #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "zašifrováno %s klíčem, ID %s\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "dešifrování veřejným klíčem selhalo: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "zašifrováno s heslem %lu\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "zašifrováno jedním heslem\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "předpokládám %s šifrovaných dat\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "algoritmus IDEA není dostupný; optimisticky se jej pokusíme nahradit " "algoritmem %s\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "dešifrování o.k.\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "VAROVÁNÍ: zpráva nebyla chráněna proti porušení její integrity\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "VAROVÁNÍ: se zašifrovanou zprávou bylo manipulováno!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "dešifrování selhalo: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "POZNÁMKA: odesílatel požadoval (\"for-your-eyes-only\")\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "původní jméno souboru='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "VAROVÁNÍ: zachyceno více prostých textů\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "samostatný revokační certifikát - použijte \"gpg --import\", chcete-li jej " "užít\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "nenalezen žádný podpis\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "verifikace podpisu potlačena\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "nelze zpracovat tyto nejednoznačné podpisové data\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "Podpis vytvořen %s\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " použití %s klíče %s\n" # Scripte scannen lt. dl1bke auf "ID (0-9A-F)+" deswegen muß "ID" rein :-( #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Podpis vytvořen %s pomocí klíče %s s ID uživatele %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Klíč k dispozici na: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "ŠPATNÝ podpis od \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "Podpis s vypršenou platností od \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "Dobrý podpis od \"%s\"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[nejistý]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " alias \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Platnost podpisu skončila %s\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Platnost podpisu skončí %s\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "podpis %s, hashovací algoritmus %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "binární formát" #: g10/mainproc.c:1947 msgid "textmode" msgstr "textový formát" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "neznámý formát" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Nemohu ověřit podpis: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "toto není podpis oddělený od dokumentu\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "VAROVÁNÍ: detekováno více podpisů. Kontrolován bude pouze první.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "samostatný podpis třídy 0x%02x\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "podpis starého typu (PGP 2.x)\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "nalezen neplatný kořenový paket v proc_tree()\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "nemohu vypnout vytváření core souborů: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "fstat `%s' selhal na %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) selhal v %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "VAROVÁNÍ: používám experimentální algoritmus veřejného klíče %s\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "VAROVÁNÍ: Elgamal klíče pro podepisování a šifrování se už nepoužívají\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "VAROVÁNÍ: používám experimentální šifrovací algoritmus %s\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "VAROVÁNÍ: používám experimentální hashovací algoritmus %s\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "VAROVÁNÍ: vyžádaný algoritmus %s není doporučen\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "Více informací naleznete na %s\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "POZNÁMKA: Vlastnost %s není v této verzi dostupná\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: použití parametru \"%s\" se nedoporučuje\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "VAROVÁNÍ: používání parametru \"%s\" se nedoporučuje\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "použijte místo něj \"%s%s\" \n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "VAROVÁNÍ: používání příkaz \"%s\" se nedoporučuje - nepoužívejte jej\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "Nezakomprimováno" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "nezakomprimováno|nic" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "tato zpráva nemusí být s %s použitelná\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "nejednoznačné volby `%s'\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "neznámá volba `%s'\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "Neznámý typ podpisu `%s'\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "Soubor `%s' existuje. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "Přepsat (a/N)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: neznámá přípona\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "Vložte nový název souboru" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "zapisuji do standardního výstupu\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "předpokládám podepsaná data v `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "vytvořen nový konfigurační soubor `%s'\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "VAROVÁNÍ: nastavení z `%s' nejsou při tomto spuštění zatím aktivní\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "adresář `%s' vytvořen\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "nemohu pracovat s algoritmem veřejného klíče %d\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "VAROVÁNÍ: potencionálně nebezpečně symetricky zašifrován klíč sezení\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "podpaket typu %d má nastavený kritický bit\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent není v tomto sezení dostupný\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "špatný formát proměnné prostředí GPG_AGENT_INFO\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent protokol verze %d není podporován\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "nemohu se připojit k `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "problém s agentem - používání agenta vypnuto\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr "(hlavní ID klíče %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Potřebujete heslo, abyste odemknul(a) tajný klíč pro uživatele:\n" "\"%.*s\"\n" "Klíč o délce %u bitů, typ %s, ID %s, vytvořený %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Opakovat heslo\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "Vložit heslo\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "zrušeno uživatelem\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "v dávkovém režimu se nelze ptát na heslo\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "Vložte heslo: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "Musíte znát heslo, abyste odemknul(a) tajný klíč pro\n" "uživatele: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "délka %u bitů, typ %s, klíč %s, vytvořený %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (podklíč na hlavním klíči ID %s)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Opakujte heslo: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Vyberte obrázek, který bude použit jako Vaše fotografické ID. Obrázek musí\n" "být ve formátu JPEG. Nezapomeňtě, že obrázek bude uložen ve Vašem veřejném\n" "klíči - velký obrázek bude mít za následek velmi velký veřejný klíč !\n" "Vhodná velikost obrázku je asi 240x288.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Vložte jméno JPEG souboru s fotografickým ID: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "nelze otevřít JPEG soubor `%s': %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "Tento JPEG je opravdu velký (%d bajtů)!\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "Jste si jistý(á), že jej chcete použít? (a/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "`%s' není soubor ve formátu JPEG\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Je tato fotografie správná (a/N/u)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "nelze zobrazit photo ID!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Důvod nebyl specifikován" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "Klíč je nahrazen" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "Klíč byl zkompromitován" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "Klíč se již nepoužívá" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "Identifikátor uživatele již neplatí" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "důvod pro revokaci: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "revokační poznámka: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMuUsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "Není přiřazena žádná hodnota důvěry:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " alias \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Nakolik důvěřujete tvrzení, že tento klíč patří uvedenému uživateli?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Nevím nebo neřeknu\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = Nedůvěřuji\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = Důvěřuji absolutně\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = zpět do hlavního menu\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = přeskočit tento klíč\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " u = ukončit\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "Minimální úroveň důvěry tohoto klíče je: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Vaše rozhodnutí? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Opravdu chcete nastavit pro tento klíč absolutní důvěru? (a/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Certifikáty vedoucí k finálnímu důvěryhodnému klíči:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%s: Nic nenaznačuje tomu, že tento klíč patří uvedenému uživateli\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "%s: Je zde částečná důvěra, že tento klíč patří uvedenému uvživateli\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "Tento klíč pravděpodobně náleží uvedenému uživateli\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Tento klíč náleží nám (máme odpovídající tajný klíč)\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NENÍ jisté, zda tento klíč patří osobě, jejíž jméno je uvedeno\n" "v uživatelském ID. Pokud *skutečně* víte, co děláte, můžete na\n" "následující otázku odpovědět ano\n" "\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "Použít přesto tento klíč? (a/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "VAROVÁNÍ: Je použit nedůvěryhodný klíč!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "VAROVÁNÍ: tento klíč může být revokován (revokační klíč nenalezen)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "VAROVÁNÍ: Tento klíč byl revokován klíčem s pověřením k revokaci!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "VAROVÁNÍ: Tento klíč byl revokován svým vlastníkem!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " To může znamenat, že podpis je padělaný.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "VAROVÁNÍ: Tento podklíč byl revokován svým vlastníkem!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Poznámka: Tento klíč byl označen jako neplatný (disabled).\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "Poznámka: Podepisovatelova ověřená adresa je „%s“\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "Poznámka: Podepisovatelova adresa „%s“ se neshoduje s DNS záznamem\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "úroveň důvěry opravena na PLNOU, kvůli platné PKA informaci\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "úroveň důvěry opravena na ŽÁDNOU, kvůli špatné PKA informaci\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Poznámka: Skončila platnost tohoto klíče!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "VAROVÁNÍ: Tento klíč není certifikován důvěryhodným podpisem!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Nic nenaznačuje tomu, že tento podpis patří vlastníkovi klíče.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "VAROVÁNÍ: NEdůvěřujeme tomuto klíči!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Tento podpis je pravděpodobně PADĚLANÝ.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "VAROVÁNÍ: Tento klíč není certifikován dostatečně důvěryhodnými podpisy!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Není jisté, zda tento podpis patří vlastníkovi.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: přeskočeno: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: přeskočeno: veřejný klíč je již obsažen v databázi\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Nespecifikoval jste identifikátor uživatele (user ID). Můžete použít \"-r\"\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "Aktuální příjemci:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Napište identifikátor uživatele (user ID). Ukončete prázdným řádkem: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Takový identifikátor uživatele neexistuje.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "přeskočeno: veřejný klíč je už nastaven podle implicitního adresáta\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Veřejný klíč je neplatný (disabled).\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "přeskočeno: veřejný klíč je již nastaven\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "neznámý implicitní adresát \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: přeskočeno: veřejný klíč je neplatný (disabled)\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "žádné platné adresy\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "data nebyla uložena; k jejich uložení použijte parametr příkazu \"--output" "\"\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "chyba při vytváření `%s': %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Podpis oddělený od dokumentu.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Prosím, vložte název datového souboru: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "čtu standardní vstup ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "chybí podepsaná data\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "nemohu otevřít podepsaná data '%s'\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "anonymní adresát; zkouším tajný klíč %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "o.k., my jsme anonymní adresát.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "staré kódování DEK není podporováno\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "šifrovací algoritmus %d%s je neznámý nebo je zneplatněn\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "VAROVÁNÍ: v předvolbách příjemce nenalezen šifrovací algoritmus %s\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "POZNÁMKA: platnost tajného klíče %s skončila %s\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "POZNÁMKA: klíč byl revokován" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "selhalo vytvoření paketu (build_packet): %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "klíč %s: chybí identifikátor uživatele\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Revokován:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Toto je citlivý revokační klíč)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Vytvořit pro tento klíč pověřený revokační certifikát? (a/N)" #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "nařízen výstup do formátu ASCII.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "vytvoření podepisovacího paketu (make_keysig_packet) selhalo: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Revokační certifikát vytvořen.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "pro \"%s\" nebyl nalezen žádný revokační klíč\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "tajný klíč \"%s\" nenalezen: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "neexistuje odpovídající veřejný klíč: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "veřejný klíč neodpovídá tajnému klíči!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "Vytvořit pro tento klíč revokační certifikát? (a/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "neznámý kompresní algoritmus\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "POZNÁMKA: Tento klíč není chráněný!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "Revokační certifikát byl vytvořen.\n" "\n" "Prosím přeneste jej na médium, které můžete dobře schovat. Pokud se\n" "k tomuto certifikátu dostane nepovolaná osoba, může zneplatnit Váš klíč.\n" "Je rozumné tento certifikát vytisknout a schovat jej pro případ, že\n" "medium s certifikátem přestane být čitelné. Ale pozor: Tiskový subsystém\n" "na Vašem počítači může ukládat data určená k tisku a zpřístupnist je\n" "jiným uživatelům!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Prosím vyberte důvod revokace:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Zrušit" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Pravděpodobně zda chcete vybrat %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Můžete vložit další popis. Ukončete prázdným řádkem:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Důvod revokace: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Nebyl zadán Žádný popis)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "Je důvod revokace vybrán správně? (a/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "tajné části klíče nejsou dostupné\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "ochranný algoritmus %d%s není podporován\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "ochranný algoritmus %d není podporován\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "Neplatné heslo; prosím, zkuste to znovu" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "VAROVÁNÍ: Objeven slabý klíč - změňte, prosím, znovu heslo.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "generuji _nevhodný_ 16-ti bitový kontrolní součet pro ochranu soukromého " "klíče\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "vytvořen slabý klíč - zkouším znovu\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "nemohu se vyvarovat slabého klíče pro symetrickou šifru; operaci jsem zkusil " "%d krát!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA vyžaduje, aby délka hashe byla násobkem 8 bitů\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA klíč %s používá nebezpečný (%ubitový) hash\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA klíč %s vyžaduje hash o délce %u nebo více bitů\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "VAROVÁNÍ: konflikt hashe podpisu ve zprávě\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "VAROVÁNÍ: podepisovací podklíč %s není křížově certifikován\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "VAROVÁNÍ: podepisovací podklíč %s má neplatnou křížovou certifikaci\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "veřejný klíč %s je o %lu sekund novější než podpis\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "veřejný klíč %s je o %lu sekund novější než podpis\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" "je problém se systémovým časem)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "klíč %s byl vytvořen %lu sekund v budoucnosti (došlo ke změně času nebo\n" "je problém se systémovým časem)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "POZNÁMKA: podpisovému klíči %s skončila platnost %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "podpis %s, hashovací algoritmus %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "předpokládám špatný podpis klíčem %s, protože je nastaven neznámý kritický " "bit\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "klíč %s: neexistuje podklíč pro revokaci podklíče\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "klíč %s: podklíč který je svázán s podpisem neexistuje\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "VAROVÁNÍ: nelze %%-expandovat notaci (příliš dlouhé). Použity " "neexpandované.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "VAROVÁNÍ: nemohu %%-expandovat URL politiky (příliš dlouhé). Použity " "neexpandované.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "VAROVÁNÍ: nemohu %%-expandovat URL preferovaného keyservery (příliš dlouhé). " "Použity neexpandované.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "kontrola vytvořeného podpisu se nepodařila: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s podpis od: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "v módu --pgp2 můžete vytvořit pouze oddělený podpis (detach-sign)s klíči " "formátu PGP-2.x\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "VAROVÁNÍ: vyžádaný hashovací algoritmus %s (%d) nevyhovuje předvolbám " "příjemce\n" #: g10/sign.c:960 msgid "signing:" msgstr "podepisuji:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "v módu --pgp2 můžete vytvářet jen čitelné podpisy s klíči formátu PGP-2.x\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "bude použito šifrování %s\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "klíč není označen jako nedostatečně bezpečný - nemohu jej použít s padělaným " "RNG!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "přeskočen \"%s\": duplikován\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "přeskočen \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "přeskočeno: tajný klíč je už v databázi\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "toto je PGP klíč vygenerovaný podle algoritmu ElGamal,\n" "podpisy vytvořené tímto klíčem nejsou bezpečné!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "záznam důvěry %lu, typ %d: zápis selhal: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Seznam přidělených hodnot důvěry, vytvořen %s\n" "# (Použijte \"gpg --import-ownertrust\" k jeho obnově)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "chyba v `%s': %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "řádek je příliš dlouhý" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "sloupec schází" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "neplatný fingerprint" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "schází hodnota důvěryhosdnosti vlastníka" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "chyba při hledání záznamu důvěryhodnosti v `%s': %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "chyba při čtení v `%s': %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "databáze důvěry: synchronizace selhala %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "nemohu vytvořit zámek pro `%s'\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "nelze zamčít `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "záznam v databázi důvěry %lu: lseek() se nepodařil: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "záznam v databázi důvěry %lu: zápis se nepodařil (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "transakce s databází důvěry je příliš dlouhá\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "nemohu otevřít `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: adresář neexistuje!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: nepodařilo se vytvořit záznam verze: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: vytvořena neplatná databáze důvěry\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: databáze důvěry vytvořena\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "POZNÁMKA: do trustedb nezle zapisovat\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: neplatná databáze důvěry\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: nepodařilo se vytvořit hashovací tabulku: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: chyba při aktualizaci záznamu verze: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: chyba při čtení záznamu verze: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: chyba při zápisu záznamu verze: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "databáze důvěry: procedura lseek() selhala: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "databáze důvěry: procedura read() (n=%d) selhala: %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: není soubor databáze důvěry\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: záznam verze s číslem %lu\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: neplatná verze souboru %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: chyba při čtení volného záznamu: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: chyba při zápisu adresářového záznamu: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: vynulování záznamu selhalo: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: přidání záznamu selhalo: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "Chyba: Databáze důvěry je poškozena.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "nelze pracovat s řádky delšími než %d znaků\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "vstupní řádek je delší než %d znaků\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' není platný dlouhý keyID\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "klíč %s: akceptován jako důvěryhodný klíč\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "klíč %s se v databázi důvěry vyskytuje více než jednou\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "klíč %s: nenalezen veřejný klíč k důvěryhodnému klíči - přeskočeno\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "klíč %s označen jako absolutně důvěryhodný.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "záznam důvěry %lu, typ pož. %d: čtení selhalo: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "záznam důvěry %lu není požadovaného typu %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "Databázi důvěry můžete zkusit znovu vytvořit pomocí těchto příkazů:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "Pokud to nebude fungovat, prosím, nahlédněte do návodu\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" "nelze použít neznámý model důvěry (%d) - předpokládáme použití modelu %s\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "pouižití modelu důvěry %s\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" "14 fixní délka na kterou se překládá see trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ revokován ]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ expirován ]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ neznámá ]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[nedefinovaná]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[ částečná ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ plná ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ absolutní ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "nedefinována" #: g10/trustdb.c:554 msgid "never" msgstr "žádná" #: g10/trustdb.c:555 msgid "marginal" msgstr "částečná" #: g10/trustdb.c:556 msgid "full" msgstr "plná" #: g10/trustdb.c:557 msgid "ultimate" msgstr "absolutní" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "není nutné kontrolovat databázi důvěry\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "další kontrola databáze důvěry v %s\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "není nutné kontrolovat databázi důvěry s modelem `%s'\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "není nutné aktualizovat databázi důvěry s modelem `%s'\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "veřejný klíč %s nebyl nalezen: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "prosím proveďte --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "kontroluji databázi důvěry\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "zpracováno %d klíčů (%d validit vymazáno)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "žádný absolutně důvěryhodný klíč nebyl nalezen\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "veřejný klíč k absolutně důvěryhodnému klíči %s nebyl nalezen\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "požadováno %d částečné důvěry a %d úplné důvěry, model %s\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" "hloubka: %d platných: %3d podepsaných: %3d důvěra: %d-, %dq, %dn, %dm, " "%df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "nelze aktualizovat záznam v databázi důvěry: chyba při zápisu: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "podpis nebylo možné ověřit.\n" "Prosím, nezapomeňte, že soubor s podpisem (.sig nebo .asc)\n" "by měl být prvním souborem zadaným na příkazové řádce.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "vstupní řádek %u je příliš dlouhý nebo na konci chybí znak LF\n" #: util/errors.c:53 msgid "general error" msgstr "obecná chyba" #: util/errors.c:54 msgid "unknown packet type" msgstr "neznámý typ paketu" #: util/errors.c:55 msgid "unknown version" msgstr "neznámá verze" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "neznámý algoritmus veřejného klíče" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "neznámý hashovací algoritmus" #: util/errors.c:58 msgid "bad public key" msgstr "špatný veřejný klíč" #: util/errors.c:59 msgid "bad secret key" msgstr "špatný tajný klíč" #: util/errors.c:60 msgid "bad signature" msgstr "špatný podpis" #: util/errors.c:61 msgid "checksum error" msgstr "chyba kontrolního součtu" #: util/errors.c:62 msgid "bad passphrase" msgstr "špatné heslo" #: util/errors.c:63 msgid "public key not found" msgstr "veřejný klíč nenalezen" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "neznámý šifrovací algoritmus" #: util/errors.c:65 msgid "can't open the keyring" msgstr "nemohu otevřít soubor klíčů" #: util/errors.c:66 msgid "invalid packet" msgstr "neplatný paket" #: util/errors.c:67 msgid "invalid armor" msgstr "neplatný způsob reprezentace v ASCII" #: util/errors.c:68 msgid "no such user id" msgstr "neexistuje uživatel s tímto id" #: util/errors.c:69 msgid "secret key not available" msgstr "tajný klíč není dostupný" #: util/errors.c:70 msgid "wrong secret key used" msgstr "je použit špatný tajný klíč" #: util/errors.c:71 msgid "not supported" msgstr "nepodporováno" #: util/errors.c:72 msgid "bad key" msgstr "špatný klíč" #: util/errors.c:73 msgid "file read error" msgstr "chyba při čtení souboru" #: util/errors.c:74 msgid "file write error" msgstr "chyba při zápisu souboru" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "neznámý komprimační algoritmus" #: util/errors.c:76 msgid "file open error" msgstr "chyba při otvírání souboru" #: util/errors.c:77 msgid "file create error" msgstr "chyba při vytváření souboru" #: util/errors.c:78 msgid "invalid passphrase" msgstr "nesprávné heslo" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "algoritmus veřejného klíče není implementován" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "šifrovací algoritmus není implementován" #: util/errors.c:81 msgid "unknown signature class" msgstr "neznámá třída podpisu" #: util/errors.c:82 msgid "trust database error" msgstr "chyba v databázi důvěry" #: util/errors.c:83 msgid "bad MPI" msgstr "špatné MPI" #: util/errors.c:84 msgid "resource limit" msgstr "omezení zdrojů" #: util/errors.c:85 msgid "invalid keyring" msgstr "neplatný soubor klíčů" #: util/errors.c:86 msgid "bad certificate" msgstr "špatný certifikát" #: util/errors.c:87 msgid "malformed user id" msgstr "špatný formát id uživatele" #: util/errors.c:88 msgid "file close error" msgstr "chyba při zavírání souboru" #: util/errors.c:89 msgid "file rename error" msgstr "chyba při přejmenování souboru" #: util/errors.c:90 msgid "file delete error" msgstr "chyba při mazání souboru" #: util/errors.c:91 msgid "unexpected data" msgstr "neočekávaná data" #: util/errors.c:92 msgid "timestamp conflict" msgstr "konflikt časového razítka" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "nepoužitelný algoritmus s veřejným klíčem" #: util/errors.c:94 msgid "file exists" msgstr "soubor existuje" #: util/errors.c:95 msgid "weak key" msgstr "slabý klíč" #: util/errors.c:96 msgid "invalid argument" msgstr "neplatný argument" #: util/errors.c:97 msgid "bad URI" msgstr "špatné URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "toto URI není podporováno" #: util/errors.c:99 msgid "network error" msgstr "chyba sítě" #: util/errors.c:101 msgid "not encrypted" msgstr "nezašifrováno" #: util/errors.c:102 msgid "not processed" msgstr "nezpracováno" #: util/errors.c:104 msgid "unusable public key" msgstr "nepoužitelný veřejný klíč" #: util/errors.c:105 msgid "unusable secret key" msgstr "nepoužitelný tajný klíč" #: util/errors.c:106 msgid "keyserver error" msgstr "chyba serveru klíčů" #: util/errors.c:107 msgid "canceled" msgstr "zrušeno" #: util/errors.c:108 msgid "no card" msgstr "žádná karta" #: util/errors.c:109 msgid "no data" msgstr "žádná data" #: util/logger.c:183 msgid "ERROR: " msgstr "CHYBA: " #: util/logger.c:186 msgid "WARNING: " msgstr "VAROVÁNÍ: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... toto je chyba v programu (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "nalezena chyba v programu ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "ano" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "aAyY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "ne" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "ukončit" #: util/miscutil.c:443 msgid "qQ" msgstr "uUqQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okey|okey" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "zrušit|zrušit" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "zZ" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "VAROVÁNÍ: Používaná paměť není bezpečná!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "Více informací naleznete na adrese http://www.gnupg.org/documentation/faq." "html\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "provést operaci není možné bez inicializované bezpečné paměti\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(pravděpodobně jste pro tento úkol použili nesprávný program)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "" #~ "VAROVÁNÍ: vlastnictví rozšiřujícího modulu není nastaveno bezpečně `%s'\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "" #~ "VAROVÁNÍ: přístupová práva rozšiřujícímu modulu nejsou bezpečná `%s'\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "" #~ "VAROVÁNÍ: vlastnictví adresáře s rozšiřujícím modulem není nastaveno " #~ "nebezpečně `%s'\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "" #~ "VAROVÁNÍ: přístupová práva k adresáři s rozšiřujícím modulem nejsou " #~ "nastavena bezpečně `%s'\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "" #~ "šifra `%s' nebyla nahrána, protože přístupová práva nejsou nastavena " #~ "bezpečně\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "IDEA modul pro GnuPG nenalezen\n" #~ msgid "Command> " #~ msgstr "Příkaz> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "Pár DSA klíčů DSA dlouhý %u bitů.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "" #~ "databáze důvěry je poškozena; prosím spusťte \"gpg --fix-trustdb\".\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|PIN administrátora" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "" #~ "notaci (notation) nelze uložit ve formátu v3 podpisu (formát PGP 2.x)\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "notaci (notation) nelze uložit jako v3 podpis klíče (formát PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "URL politiky nelze uložit ve formátu v3 podpisu (formát PGP 2.x)\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "nelze uložit URL politiky do podpisu v3 klíčem (formát PGP 2.x)\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA požaduje použití 160-ti bitového hashovacího algoritmu\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "více informací naleznete v dokumentu http://www.gnupg.cz/why-not-idea." #~ "html\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "symbolické jméno smí obsahovat pouze písmena, číslice, tečky nebo " #~ "podtržítka a musí končit znakem '='\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "jméno uživatele musí obsahovat znakt '@' \n" #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "jméno uživatele nesmí obsahovat více než jeden znak '@' \n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "hodnota nemůže obsahovat žádné kontrolní znaky\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "VAROVÁNÍ: nalezen neplatný formát zápisu data\n" #~ msgid "not human readable" #~ msgstr "není v přímo čitelném formátu" #~ msgid "expired: %s)" #~ msgstr "platnost skončila: %s)" gnupg-1.4.20/po/zh_TW.po0000644000175000017500000054144512635457220011673 00000000000000# Traditional Chinese(zh-tw) messages for GnuPG # Copyright (C) 2002 Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # Jedi Lin , 2003, 2004, 2005, 2006, 2007, 2008. # # Special thanks to "Audrey Tang ". # msgid "" msgstr "" "Project-Id-Version: gnupg 1.4.18\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2014-11-21 23:17+0800\n" "Last-Translator: Jedi Lin \n" "Language-Team: Chinese (traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Basepath: gnupg-1.4.18/\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Poedit 1.5.7\n" #: cipher/primegen.c:119 #, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "無法以 %u 位元長的 p 及 %u 位元長的 q 產生質數\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "無法產生少於 %d 位元的質數\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "偵測不到亂數蒐集模組\n" #: cipher/random.c:426 cipher/random.c:604 #, c-format msgid "can't lock `%s': %s\n" msgstr "無法鎖定 `%s': %s\n" #: cipher/random.c:431 cipher/random.c:610 #, c-format msgid "waiting for lock on `%s'...\n" msgstr "正在等候 `%s' 鎖定...\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "無法開啟 `%s': %s\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "無法取得檔案 `%s' 的資訊: %s\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "`%s' 不是一個標準的檔案 - 已略過\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "請注意: random_seed 檔案是空的\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "警告: random_seed 檔案大小無效 - 不予採用\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "無法讀取 `%s': %s\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "請注意: random_seed 檔案未更新\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "無法建立 `%s': %s\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "無法寫入 `%s': %s\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "無法關閉 `%s': %s\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "警告: 正在使用不安全的隨機數字產生器!!\n" #: cipher/random.c:894 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/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "請稍待片刻, 系統此時正在蒐集亂數. 如果你會覺得無聊的話,\n" "不妨做些別的事, 這樣子甚至能夠讓亂數的品質更好.\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "隨機位元組不夠多. 請多做一些有的沒的事情, \n" "這樣作業系統纔能蒐集到更多的亂數! (還需要 %d 位元組)\n" #: g10/app-openpgp.c:698 #, c-format msgid "failed to store the fingerprint: %s\n" msgstr "存放指紋失敗: %s\n" #: g10/app-openpgp.c:711 #, c-format msgid "failed to store the creation date: %s\n" msgstr "存放創生日期失敗: %s\n" #: g10/app-openpgp.c:1150 #, c-format msgid "reading public key failed: %s\n" msgstr "讀取公鑰時失敗: %s\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "回應中未包含公鑰資料\n" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "回應中未包含 RSA 系數\n" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "回應中未包含 RSA 公用指數\n" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "正在使用 %s 為預設個人識別碼 (PIN)\n" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "以 %s 做為預設個人識別碼 (PIN) 時失敗: %s - 正在停用接下來的預設用法\n" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "||請輸入 PIN%%0A[簽署完成: %lu]" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "||請輸入 PIN" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "收回個人識別碼 (PIN) 時傳回錯誤: %s\n" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "用於 CHV%d 的個人識別碼 (PIN) 太短; 長度最少要有 %d\n" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, c-format msgid "verify CHV%d failed: %s\n" msgstr "驗證 CHV%d 失敗: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "從卡片取回 CHV 狀態時出錯\n" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "卡片永久鎖定了!!\n" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "%d 管理者個人識別碼 (PIN) 試圖在卡片永久鎖定前遺留下來\n" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "|A|請輸入管理者 PIN%%0A[剩餘嘗試次數: %d]" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "|A|請輸入管理者 PIN" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "管理者指令存取權限尚未組態\n" #: g10/app-openpgp.c:2023 g10/card-util.c:108 msgid "Reset Code not or not anymore available\n" msgstr "沒有重設碼或無法再用重設碼\n" #: g10/app-openpgp.c:2029 msgid "||Please enter the Reset Code for the card" msgstr "||請輸入卡片重設碼" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "重設碼太短; 長度最少要有 %d\n" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "|RN|新增重設碼" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "|AN|新增管理者 PIN" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "|N|新增 PIN" #: g10/app-openpgp.c:2065 #, c-format msgid "error getting new PIN: %s\n" msgstr "取得新的個人識別碼 (PIN) 時出錯: %s\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 msgid "error reading application data\n" msgstr "讀取應用程式資料時出錯\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 msgid "error reading fingerprint DO\n" msgstr "讀取指紋 DO 時出錯\n" #: g10/app-openpgp.c:2187 msgid "key already exists\n" msgstr "金鑰已存在\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "既有的金鑰將被取代\n" #: g10/app-openpgp.c:2193 msgid "generating new key\n" msgstr "正在產生新的金鑰\n" #: g10/app-openpgp.c:2195 msgid "writing new key\n" msgstr "正在寫入新的金鑰\n" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "缺漏創生時間戳印\n" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "RSA 模組缺漏或者並非 %d 位元大\n" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "RSA 公用指數缺漏或者大於 %d 位元\n" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "RSA 質數 %s 缺漏或者並非 %d 位元大\n" #: g10/app-openpgp.c:2766 #, c-format msgid "failed to store the key: %s\n" msgstr "存放金鑰失敗: %s\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "正在產生金鑰中, 請稍候 ...\n" #: g10/app-openpgp.c:2865 msgid "generating key failed\n" msgstr "產生金鑰時失敗\n" #: g10/app-openpgp.c:2868 #, c-format msgid "key generation completed (%d seconds)\n" msgstr "金鑰產生完畢 (%d 秒)\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "無效的 OpenPGP 卡片結構 (DO 0x93)\n" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "卡片上的指紋與所要求的並不吻合\n" #: g10/app-openpgp.c:3092 #, c-format msgid "card does not support digest algorithm %s\n" msgstr "卡片不支援 %s 摘要演算法\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "目前建立的簽章: %lu\n" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "目前在此指令中的管理者個人識別碼 (PIN) 驗證被禁止了\n" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "無法存取 %s - 無效的 OpenPGP 卡片?\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "封裝: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "無效的封裝檔頭: " #: g10/armor.c:459 msgid "armor header: " msgstr "封裝檔頭: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "無效的明文簽章檔頭\n" #: g10/armor.c:485 msgid "unknown armor header: " msgstr "未知的封裝檔頭: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "多層明文簽章\n" #: g10/armor.c:681 msgid "unexpected armor: " msgstr "未預期的封裝: " #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "無效的破折號逸出列: " #: g10/armor.c:848 g10/armor.c:1473 #, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "無效的 64 進位字符 %02x 已跳過\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "檔案未預期的結束 (沒有 CRC 的部分)\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "檔案未預期的結束 (CRC 的部分未結束)\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "格式不對的 CRC\n" #: g10/armor.c:937 g10/armor.c:1510 #, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC 錯誤; %06lX - %06lX\n" #: g10/armor.c:957 msgid "premature eof (in trailer)\n" msgstr "檔案未預期的結束 (於結尾處)\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "結尾列有問題\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "找不到有效的 OpenPGP 資料.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "無效的封裝: 列長超出 %d 字符\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "封裝裡出現被引號括住的可列印字符 - 可能是有瑕疵的送信程式造成的\n" #: g10/card-util.c:85 g10/card-util.c:374 #, c-format msgid "OpenPGP card not available: %s\n" msgstr "沒有可用的 OpenPGP 卡片: %s\n" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "偵測到 OpenPGP 卡片編號 %s\n" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 msgid "can't do this in batch mode\n" msgstr "無法在批次模式中這樣做\n" #: g10/card-util.c:106 msgid "This command is only available for version 2 cards\n" msgstr "這個指令僅能用於第二版卡片\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "你要選哪一個? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "[未設定]" #: g10/card-util.c:512 msgid "male" msgstr "男性" #: g10/card-util.c:513 msgid "female" msgstr "女性" #: g10/card-util.c:513 msgid "unspecified" msgstr "未特定" #: g10/card-util.c:540 msgid "not forced" msgstr "不強迫使用" #: g10/card-util.c:540 msgid "forced" msgstr "強迫使用" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "錯誤: 目前祇允許使用單純的 ASCII 字符.\n" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "錯誤: 不能使用 \"<\" 字符.\n" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "錯誤: 並不允許使用連續兩個以上的空格.\n" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "卡片持有者的姓氏: " #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "卡片持有者的名字: " #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "錯誤: 合併後的名字太長 (上限是 %d 個字符).\n" #: g10/card-util.c:693 msgid "URL to retrieve public key: " msgstr "取回公鑰的 URL: " #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "錯誤: URL 太長 (上限是 %d 個字符).\n" #: g10/card-util.c:794 #, c-format msgid "error allocating enough memory: %s\n" msgstr "分派足夠的記憶體時出錯: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "讀取 `%s' 時出錯: %s\n" #: g10/card-util.c:839 #, c-format msgid "error writing `%s': %s\n" msgstr "寫入 `%s' 時出錯: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "登入資料 (帳號名稱): " #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "錯誤: 登入資料太長 (上限是 %d 個字符).\n" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "私人的 DO 資料: " #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "錯誤: 私人的 DO 太長 (上限是 %d 個字符).\n" #: g10/card-util.c:1005 msgid "Language preferences: " msgstr "介面語言偏好設定: " #: g10/card-util.c:1013 msgid "Error: invalid length of preference string.\n" msgstr "錯誤: 無效的偏好設定字串長度\n" #: g10/card-util.c:1022 msgid "Error: invalid characters in preference string.\n" msgstr "錯誤: 偏好設定字串中含有無效的字符\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "性別 ((M)男性, (F)女性或留空): " #: g10/card-util.c:1058 msgid "Error: invalid response.\n" msgstr "錯誤: 無效的回應.\n" #: g10/card-util.c:1080 msgid "CA fingerprint: " msgstr "憑證中心 (CA) 指紋: " #: g10/card-util.c:1103 msgid "Error: invalid formatted fingerprint.\n" msgstr "錯誤: 無效的格式化指紋.\n" #: g10/card-util.c:1153 #, c-format msgid "key operation not possible: %s\n" msgstr "不可能進行金鑰操作: %s\n" #: g10/card-util.c:1154 msgid "not an OpenPGP card" msgstr "這不是 OpenPGP 卡片" #: g10/card-util.c:1167 #, c-format msgid "error getting current key info: %s\n" msgstr "取得現用金鑰資訊時出錯: %s\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "是否要取代既有的金鑰? (y/N) " #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" "請注意: 我們完全無法保證卡片支援你想用的尺寸.\n" " 如果金鑰產生失敗了, 煩請查閱你卡片上的文件,\n" " 看看這張卡片支援哪些尺寸.\n" #: g10/card-util.c:1295 #, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "你的簽署金鑰想要用多大的金鑰尺寸? (%u) " #: g10/card-util.c:1297 #, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "你的加密金鑰想要用多大的金鑰尺寸? (%u) " #: g10/card-util.c:1298 #, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "你的認證金鑰想要用多大的金鑰尺寸? (%u) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "加大到 %u 位元\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "%s 金鑰尺寸一定要介於 %u 到 %u 之間\n" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "這張卡片將重新加以組態, 以便產生 %u 位元的金鑰\n" #: g10/card-util.c:1342 #, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "將 %d 金鑰尺寸變更為 %u 位元時出錯: %s\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "是否要為加密用金鑰建立卡外備份? (Y/n) " #: g10/card-util.c:1378 msgid "NOTE: keys are already stored on the card!\n" msgstr "請注意: 金鑰已經存放在卡片上了!\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "是否要取代既有的金鑰? (y/N) " #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" "請注意個人識別碼 (PIN) 的出廠設定值為\n" " PIN = `%s' 管理者 (Admin) PIN = `%s'\n" "你應該用 --change-pin 指令來加以變更\n" #: g10/card-util.c:1449 msgid "Please select the type of key to generate:\n" msgstr "請選擇你要產生的金鑰種類:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 msgid " (1) Signature key\n" msgstr " (1) 簽署用金鑰\n" #: g10/card-util.c:1452 g10/card-util.c:1561 msgid " (2) Encryption key\n" msgstr " (2) 加密用金鑰\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr " (3) 憑證用金鑰\n" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "無效的選擇.\n" #: g10/card-util.c:1556 msgid "Please select where to store the key:\n" msgstr "請選擇要把金鑰存放在哪裡:\n" #: g10/card-util.c:1600 msgid "unknown key protection algorithm\n" msgstr "未知的金鑰保護演算法\n" #: g10/card-util.c:1605 msgid "secret parts of key are not available\n" msgstr "私鑰部分無法取用\n" #: g10/card-util.c:1610 msgid "secret key already stored on a card\n" msgstr "私鑰已經存放在卡片上了\n" #: g10/card-util.c:1623 #, c-format msgid "error writing key to card: %s\n" msgstr "金鑰寫入卡片時出錯: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "離開這個選單" #: g10/card-util.c:1684 msgid "show admin commands" msgstr "顯示管理者指令" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "顯示這份線上說明" #: g10/card-util.c:1687 msgid "list all available data" msgstr "列出所有可用的資料" #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "變更卡片持有人的名字" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "變更取回金鑰的 URL" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "從卡片 URL 取回指定的金鑰" #: g10/card-util.c:1693 msgid "change the login name" msgstr "變更登入名稱" #: g10/card-util.c:1694 msgid "change the language preferences" msgstr "變更介面語言偏好設定" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "變更卡片持有者的性別" #: g10/card-util.c:1696 msgid "change a CA fingerprint" msgstr "變更某個憑證中心 (CA) 的指紋" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "切換簽章是否強制使用個人識別碼 (PIN) 的旗標" #: g10/card-util.c:1698 msgid "generate new keys" msgstr "產生新的金鑰" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "變更或解凍個人識別碼 (PIN) 的選單" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "驗證個人識別碼 (PIN) 並列出所有的資料" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "以重設碼來解開個人識別碼 (PIN) 鎖定狀態" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "gpg/卡片> " #: g10/card-util.c:1864 msgid "Admin-only command\n" msgstr "限管理者使用的指令\n" #: g10/card-util.c:1895 msgid "Admin commands are allowed\n" msgstr "允許使用管理者指令\n" #: g10/card-util.c:1897 msgid "Admin commands are not allowed\n" msgstr "未允許使用管理者指令\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "無效的指令 (試試看 \"help\")\n" #: g10/cardglue.c:457 msgid "card reader not available\n" msgstr "沒有讀卡機可用\n" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "請插入卡片並按下 [Enter], 或者輸入 'c' 取消: " #: g10/cardglue.c:487 #, c-format msgid "selecting openpgp failed: %s\n" msgstr "挑選 openpgp 時失敗: %s\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" "請移除現用中的卡片並插入下列序號的卡片:\n" " %.*s\n" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "準備好時請按下 [Enter], 或者輸入 'c' 取消: " #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "請輸入新的管理者個人識別碼 (PIN): " #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "請輸入新的個人識別碼 (PIN): " #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "請輸入管理者個人識別碼 (PIN): " #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "請輸入個人識別碼 (PIN): " #: g10/cardglue.c:1033 msgid "Repeat this PIN: " msgstr "請再次輸入個人識別碼 (PIN): " #: g10/cardglue.c:1048 msgid "PIN not correctly repeated; try again" msgstr "前後兩次輸入的個人識別碼 (PIN) 不一致; 請再試一次" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "無法開啟 `%s'\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "--output 在這個指令中沒有作用\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, c-format msgid "key \"%s\" not found: %s\n" msgstr "找不到金鑰 \"%s\": %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "讀取金鑰區塊時出錯: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(除非你用指紋指定了金鑰)\n" #: g10/delkey.c:133 msgid "can't do this in batch mode without \"--yes\"\n" msgstr "沒有 \"--yes\" 就沒辦法在批次模式中這麼做\n" #: g10/delkey.c:145 msgid "Delete this key from the keyring? (y/N) " msgstr "要從鑰匙圈裡刪除這把金鑰嗎? (y/N) " #: g10/delkey.c:153 msgid "This is a secret key! - really delete? (y/N) " msgstr "這是一把私鑰! - 真的要刪除嗎? (y/N) " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "刪除金鑰區塊時失敗: %s\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "主觀信任資訊已清除\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "公鑰 \"%s\" 有相對應的私鑰!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "請先以 \"--delete-secret-keys\" 選項來刪除它.\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "建立密語時出錯: %s\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "因處於 S2K 模式下而無法使用對稱式 ESK 封包\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "正在使用 %s 編密法\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "`%s' 已經被壓縮了\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "警告: `%s' 是個空檔案\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "在 --pgp2 模式中, 你祇能以 2048 位元以下的 RSA 金鑰加密\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "正在從 `%s' 讀取中\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "你正要用來加密的所有金鑰都不能使用 IDEA 編密法.\n" #: g10/encode.c:516 #, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "警告: 強迫使用 %s (%d) 對稱式編密法會違反收件者偏好設定\n" #: g10/encode.c:612 g10/sign.c:935 #, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "警告: 強迫使用 %s (%d) 壓縮演算法會違反收件者偏好設定\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "強迫使用 %s (%d) 對稱式編密法會違反收件者偏好設定\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "你不能夠將 %s 用於 %s 模式中\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s 已加密給: \"%s\"\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s 已加密的資料\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "以 %d 未知演算法所加密\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "警告: 訊息已用對稱式編密法的弱金鑰加密了.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "處理已加密封包有問題\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "沒有支援的遠端程式執行\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "無法建立目錄 `%s': %s\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "因為不安全的檔案權限選項, 而禁用了外部程式叫用\n" #: g10/exec.c:345 msgid "this platform requires temporary files when calling external programs\n" msgstr "在這個作業平台上叫用外部程式時需要暫存檔\n" #: g10/exec.c:423 #, c-format msgid "unable to execute program `%s': %s\n" msgstr "無法執行程式 `%s': %s\n" #: g10/exec.c:426 #, c-format msgid "unable to execute shell `%s': %s\n" msgstr "無法執行 shell `%s': %s\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "叫用外部程式時發生系統錯誤: %s\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "外部程式不自然地離開\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "無法執行外部程式\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "無法讀取外部程式回應: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "警告: 無法移除暫存檔 (%s) `%s': %s\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "警告: 無法移除暫存目錄 `%s': %s\n" #: g10/export.c:59 msgid "export signatures that are marked as local-only" msgstr "匯出標記為僅限本機使用的簽章" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "匯出署名使用者 ID (通常是照片 ID)" #: g10/export.c:63 msgid "export revocation keys marked as \"sensitive\"" msgstr "匯出標記為 \"機密\" 的撤銷金鑰" #: g10/export.c:65 msgid "remove the passphrase from exported subkeys" msgstr "從匯出所得的子鑰中移除密語" #: g10/export.c:67 msgid "remove unusable parts from key during export" msgstr "匯出時從金鑰中移除無法使用的部分" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "匯出時盡可能地從金鑰中移除" #: g10/export.c:323 msgid "exporting secret keys not allowed\n" msgstr "不允許匯出私鑰\n" #: g10/export.c:352 #, c-format msgid "key %s: not protected - skipped\n" msgstr "金鑰 %s: 未受保護 - 已跳過\n" #: g10/export.c:360 #, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "金鑰 %s: PGP 2.x 型態的金鑰 - 已跳過\n" #: g10/export.c:371 #, c-format msgid "key %s: key material on-card - skipped\n" msgstr "金鑰 %s: 金鑰資料在卡片上 - 已跳過\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "正要匯出未受保護的子鑰\n" #: g10/export.c:542 #, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "解除子鑰保護失敗: %s\n" # I hope this warning doesn't confuse people. #: g10/export.c:563 #, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "警告: 私鑰 %s 並沒有任的何單一 SK 加總檢查\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "警告: 沒有匯出任何東西\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@指令:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[檔案]|建立簽章" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[檔案]|建立明文簽章" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "建立分離式簽章" #: g10/gpg.c:393 msgid "encrypt data" msgstr "加密資料" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "僅使用對稱式編密法來加密" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "資料解密 (預設)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "驗證簽章" #: g10/gpg.c:401 msgid "list keys" msgstr "列出金鑰" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "列出金鑰和簽章" #: g10/gpg.c:404 msgid "list and check key signatures" msgstr "列出並檢查金鑰簽章" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "列出金鑰和指紋" #: g10/gpg.c:406 msgid "list secret keys" msgstr "列出私鑰" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "產生新的金鑰對" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "從公鑰鑰匙圈裡移除金鑰" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "從私鑰鑰匙圈裡移除金鑰" #: g10/gpg.c:411 msgid "sign a key" msgstr "簽署金鑰" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "僅在本機簽署金鑰" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "簽署或編輯金鑰" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "產生撤銷憑證" #: g10/gpg.c:416 msgid "export keys" msgstr "匯出金鑰" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "把金鑰匯出至金鑰伺服器" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "從金鑰伺服器匯入金鑰" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "在金鑰伺服器上搜尋金鑰" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "從金鑰伺服器更新所有的金鑰" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "匯入/合併金鑰" #: g10/gpg.c:429 msgid "print the card status" msgstr "列印卡片狀態" #: g10/gpg.c:430 msgid "change data on a card" msgstr "變更卡片上的資料" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "變更卡片的個人識別碼 (PIN)" #: g10/gpg.c:440 msgid "update the trust database" msgstr "更新信任資料庫" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|演算法 [檔案]|印出訊息摘要" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "選項:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "建立以 ASCII 封裝過的輸出" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|名字|以指定名字作為加密對象" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "拿這個使用者 ID 來簽署或解密" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|設定壓縮等級為 N (0 表示不壓縮)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "使用標準的文字模式" #: g10/gpg.c:486 msgid "use as output file" msgstr "當作輸出檔案來使用" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "囉唆模式" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "不要做任何改變" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "覆寫前先詢問" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "使用嚴謹的 OpenPGP 行為" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "產生 PGP 2.x 相容性訊息" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(請參照線上說明頁面來取得所有命令和選項的完整清單)\n" #: g10/gpg.c:576 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 [檔案] 對 Bob 這個使用者簽署及加密\n" " --clearsign [檔案] 做出明文簽章\n" " --detach-sign [檔案] 做出分離式簽章\n" " --list-keys [名字] 顯示金鑰\n" " --fingerprint [名字] 顯示指紋\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "" "請向 回報程式瑕疵, 向 回報翻譯瑕疵.\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "用法: gpg [選項] [檔案] (或用 -h 求助)" #: g10/gpg.c:801 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/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "已支援的演算法:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "公鑰: " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "編密法: " #: g10/gpg.c:827 msgid "Hash: " msgstr "雜湊: " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "壓縮: " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "用法: gpg [選項] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "指令彼此矛盾\n" #: g10/gpg.c:1078 #, c-format msgid "no = sign found in group definition `%s'\n" msgstr "在群組定義 `%s' 裡找不到 = 記號\n" #: g10/gpg.c:1264 #, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "警告: 家目錄 `%s' 的所有權並不安全\n" #: g10/gpg.c:1267 #, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "警告: 組態檔案 `%s' 的所有權並不安全\n" #: g10/gpg.c:1273 #, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "警告: 家目錄 `%s' 的權限並不安全\n" #: g10/gpg.c:1276 #, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "警告: 組態檔案 `%s' 的權限並不安全\n" #: g10/gpg.c:1282 #, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "警告: 家目錄 `%s' 的封入目錄所有權並不安全\n" #: g10/gpg.c:1285 #, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "警告: 組態檔案 `%s' 的封入目錄所有權並不安全\n" #: g10/gpg.c:1291 #, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "警告: 家目錄 `%s' 的封入目錄權限並不安全\n" #: g10/gpg.c:1294 #, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "警告: 組態檔案 `%s' 的封入目錄權限並不安全\n" #: g10/gpg.c:1469 #, c-format msgid "unknown configuration item `%s'\n" msgstr "未知的組態項目 `%s'\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "列出金鑰時顯示照片 ID" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "列出簽章時顯示原則 URL" #: g10/gpg.c:1566 msgid "show all notations during signature listings" msgstr "列出簽章時顯示所有的註記" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "列出簽章時顯示 IETF 標準註記" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "列出簽章時顯示使用者提供的註記" #: g10/gpg.c:1574 msgid "show preferred keyserver URLs during signature listings" msgstr "列出簽章時顯示偏好的金鑰伺服器 URL" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "列出金鑰時顯示使用者 ID 有效性" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "列出金鑰時顯示已撤銷或過期的使用者 ID" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "列出金鑰時顯示已撤銷或過期的子鑰" #: g10/gpg.c:1582 msgid "show the keyring name in key listings" msgstr "在金鑰清單中顯示鑰匙圈名稱" #: g10/gpg.c:1584 msgid "show expiration dates during signature listings" msgstr "列出簽章時顯示有效期限" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "請注意: 已忽略舊有的預設選項檔 `%s'\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "請注意: 沒有預設選項檔 `%s'\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "選項檔 `%s': %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "從 `%s' 讀取選項中\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "請注意: 一般情況下不會用到 %s!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "`%s' 不是個有效的簽章使用期限\n" #: g10/gpg.c:2569 #, c-format msgid "`%s' is not a valid character set\n" msgstr "`%s' 不是個有效的字元集\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 msgid "could not parse keyserver URL\n" msgstr "無法剖析金鑰伺服器 URL\n" #: g10/gpg.c:2605 #, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: 無效的金鑰伺服器選項\n" #: g10/gpg.c:2608 msgid "invalid keyserver options\n" msgstr "無效的金鑰伺服器選項\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: 無效的匯入選項\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "無效的匯入選項\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: 無效的匯出選項\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "無效的匯出選項\n" #: g10/gpg.c:2635 #, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: 無效的清單選項\n" #: g10/gpg.c:2638 msgid "invalid list options\n" msgstr "無效的清單選項\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "驗證簽章時顯示照片 ID" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "驗證簽章時顯示原則 URL" #: g10/gpg.c:2650 msgid "show all notations during signature verification" msgstr "驗證簽章時顯示所有的註記" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "驗證簽章時顯示 IETF 標準註記" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "驗證簽章時顯示使用者提供的註記" #: g10/gpg.c:2658 msgid "show preferred keyserver URLs during signature verification" msgstr "驗證簽章時顯示偏好的金鑰伺服器 URL" #: g10/gpg.c:2660 msgid "show user ID validity during signature verification" msgstr "驗證簽章時顯示使用者 ID 有效性" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "驗證簽章時顯示已撤銷或過期的使用者 ID" #: g10/gpg.c:2664 msgid "show only the primary user ID in signature verification" msgstr "驗證簽章時祇顯示主要的使用者 ID" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "以 PKA 資料驗證簽章" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "提高對持有有效 PKA 資料之簽章的信任" #: g10/gpg.c:2675 #, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: 無效的驗證選項\n" #: g10/gpg.c:2678 msgid "invalid verify options\n" msgstr "無效的驗證選項\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "無法把執行檔路徑設成 %s\n" #: g10/gpg.c:2850 #, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: 無效的自動金鑰定址清單\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "無效的自動金鑰定址清單\n" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "警告: 程式可能會傾印出核心檔!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "警告: %s 會推翻 %s\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s 不允許跟 %s 併用!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s 跟 %s 放在一起沒有意義!\n" #: g10/gpg.c:2973 #, c-format msgid "NOTE: %s is not available in this version\n" msgstr "請注意: %s 在本版中無法使用\n" #: g10/gpg.c:2988 #, c-format msgid "will not run with insecure memory due to %s\n" msgstr "因為 %s 而不會在不安全的記憶體中執行\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "你祇有在 --pgp2 模式下纔能做出分離式或明文簽章\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "你在 --pgp2 模式下時, 不能同時簽署和加密\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "啟用 --pgp2 時你祇應該使用檔案, 而非管道\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "在 --pgp2 模式下加密訊息需要 IDEA 編密法\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "所選的編密演算法無效\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "所選的摘要演算法無效\n" #: g10/gpg.c:3103 msgid "selected compression algorithm is invalid\n" msgstr "所選的壓縮演算法無效\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "所選的憑證摘要演算法無效\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed 一定要大於 0\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed 一定要大於 1\n" #: g10/gpg.c:3128 msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth 一定要介於 1 和 255 之間\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "無效的 default-cert-level; 一定要是 0, 1, 2 或 3\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "無效的 min-cert-level; 一定要是 1, 2 或 3\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "請注意: 強烈不建議使用單純的 S2K 模式 (0)\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "無效的 S2K 模式; 一定要是 0, 1 或 3\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "無效的預設偏好\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "無效的個人編密法偏好\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "無效的個人摘要偏好\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "無效的個人壓縮偏好\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s 還沒辦法跟 %s 一起運作\n" #: g10/gpg.c:3238 #, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "你不該將 `%s' 編密演算法用於 %s 模式中\n" #: g10/gpg.c:3243 #, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "你不該將 `%s' 摘要演算法用於 %s 模式中\n" #: g10/gpg.c:3248 #, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "你不該將 `%s' 壓縮演算法用於 %s 模式中\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "信任資料庫啟始失敗: %s\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "警告: 給定的收件者 (-r) 未使用公鑰加密\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [檔名]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [檔名]" #: g10/gpg.c:3388 #, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "`%s' 對稱式加密失敗: %s\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [檔名]" #: g10/gpg.c:3411 msgid "--symmetric --encrypt [filename]" msgstr "--symmetric --encrypt [檔名]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "你不能在 --s2k-mode 0 中使用 --symmetric --encrypt\n" #: g10/gpg.c:3416 #, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "你不能在 %s 模式中使用 --symmetric --encrypt\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [檔名]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [檔名]" #: g10/gpg.c:3462 msgid "--symmetric --sign --encrypt [filename]" msgstr "--symmetric --sign --encrypt [檔名]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "你不能在 --s2k-mode 0 中使用 --symmetric --sign --encrypt\n" #: g10/gpg.c:3467 #, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "你不能在 %s 模式中使用 --symmetric --sign --encrypt\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [檔名]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [檔名]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [檔名]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key 使用者ID" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key 使用者ID" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key 使用者ID [指令]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [使用者ID] [鑰匙圈]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "送至金鑰伺服器失敗: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "從金鑰伺服器接收失敗: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "金鑰匯出失敗: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "用金鑰伺服器搜尋失敗: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "從金鑰伺服器更新失敗: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "解開封裝失敗: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "進行封裝失敗: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "無效的 `%s' 雜湊演算法\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[檔名]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "請開始輸入你的訊息 ...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "給定的的憑證原則 URL 無效\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "給定的簽章原則 URL 無效\n" #: g10/gpg.c:4302 msgid "the given preferred keyserver URL is invalid\n" msgstr "給定的偏好金鑰伺服器 URL 無效\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "pk 快取裡有太多項目 - 已禁用\n" #: g10/getkey.c:174 msgid "[User ID not found]" msgstr "[找不到使用者 ID]" #: g10/getkey.c:510 g10/getkey.c:2764 #, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "金鑰 %s: 祇有私鑰而沒有公鑰 - 已跳過\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "已自動取回 `%s' (經由 %s )\n" #: g10/getkey.c:1890 #, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "無效的金鑰 %s 可以藉由 --allow-non-selfsigned-uid 而生效\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "公鑰 %s 沒有相對應的私鑰 - 正在忽略\n" #: g10/getkey.c:2717 #, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "使用子鑰 %s 來替換主鑰 %s\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "盡量安靜些" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "從這個鑰匙圈裡取用金鑰" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "僅把時間戳印矛盾視為警告" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|檔案描述|把狀態資訊寫入此檔案描述" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "用法: gpgv [選項] [檔案] (或用 -h 求助)" #: g10/gpgv.c:104 msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "語法: gpgv [選項] [檔案]\n" "用已知的受信任金鑰來檢查簽章\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "在這裡指派的數值完全是看你自己決定; 這些數值永遠不會匯出給其他人.\n" "我們需要它來實施信任網絡; 這跟 (自動建立起的) 憑證網絡一點關係也沒有." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "要建立起信任網絡, GnuPG 需要知道哪些金鑰是被徹底信任的 -\n" "那些金鑰通常就是你有辦法存取到私鑰的. 回答 \"yes\" 來將這些\n" "金鑰設成徹底信任\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "如果你無論如何都想要用這把未被信任的金鑰, 請回答 \"yes\"." #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "輸入你要遞送的訊息接收者的使用者 ID." #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" "請選擇要使用的演算法.\n" "\n" "DSA (亦即 DSS) 是數位簽章演算法 (Digital Signature Algorithm),\n" "祇能用於簽署.\n" "\n" "Elgamal 是祇能用於加密的演算法.\n" "\n" "RSA 可以被用來簽署及加密.\n" "\n" "第一把 (主要的) 金鑰一定要含有能用於簽署的金鑰." #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "通常來說用同一把金鑰簽署及加密並不是個好主意.\n" "這個演算法應該祇被用於特定的情況下.\n" "請先聯絡你的安全專家." #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "請輸入金鑰尺寸" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "請回答 \"yes\" 或 \"no\"" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "請輸入提示裡所要求的數值.\n" "你可以輸入 ISO 日期格式 (YYYY-MM-DD), 但是不會得到良好的錯誤回應 -\n" "反之, 系統會試著把給定的數值中斷成若干片段." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "請輸入金鑰持有人的名字" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "請輸入選用 (但強烈建議使用) 的電子郵件位址" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "請輸入選用的註釋" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N 修改姓名.\n" "C 修改註釋.\n" "E 修改電子郵件位址.\n" "O 繼續產生金鑰.\n" "Q 中止產生金鑰." #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "如果你覺得可以產生子鑰的話, 就回答 \"yes\" (或者祇 \"y\" 就好)." #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "當你要在金鑰上簽署使用者 ID 時, 你首先必須先驗證那把金鑰\n" "確實屬於那個使用者 ID 上叫那個名字的人. 這對那些知道你多\n" "小心驗證的人來說很有用.\n" "\n" "\"0\" 表示你不能提出任何特別的主張來表明\n" " 你多仔細驗證那把金鑰\n" "\n" "\"1\" 表示你相信這把金鑰屬於那個主張是主人的人,\n" " 但是你不能或沒有驗證那把金鑰.\n" " 這對那些祇想要 \"個人的\" 驗證的人來說很有用,\n" " 因為你簽署了一把擬似匿名使用者的金鑰.\n" "\n" "\"2\" 表示你真的仔細驗證了那把金鑰.\n" " 例如說, 這能表示你驗證了這把金鑰的指紋和\n" " 使用者 ID, 並比對了照片 ID.\n" "\n" "\"3\" 表示你真的做了大規模的驗證金鑰工作.\n" " 例如說, 這能表示你向金鑰持有人驗證了金鑰指紋,\n" " 而且你透過附帶照片而難以偽造的文件 (像是護照)\n" " 確認了金鑰持有人的姓名與金鑰上使用者 ID 的一致,\n" " 最後你還 (透過電子郵件往來) 驗證了金鑰上的\n" " 電子郵件位址確實屬於金鑰持有人.\n" "\n" "請注意上述關於等級 2 和 3 的例子 \"祇是\" 例子而已.\n" "最後, 還是得由你自己決定當你簽署其他金鑰時,\n" "甚麼是 \"漫不經心\", 而甚麼是 \"超級謹慎\".\n" "\n" "如果你不知道應該選甚麼答案的話, 就選 \"0\"." #: g10/helptext.c:184 msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "如果你想要簽署 *所有* 使用者 ID 的話就回答 \"yes\"" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "如果你真的想要刪除這個使用者 ID 的話就回答 \"yes\".\n" "所有的憑證在那之後也都會失去!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "如果可以刪除這把子鑰的話就回答 \"yes\"" #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "這是一份在這把金鑰上的有效簽章; 通常你不會想要刪除這份簽章,\n" "因為要跟這把金鑰或其他由這把金鑰所驗證的金鑰建立起信任連結\n" "時, 會相當重要." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "這份簽章無法被檢驗, 因為你沒有符合的金鑰. 你應該延緩刪除它,\n" "直到你知道哪一把金鑰被使用了; 因為這把來簽署的金鑰可能透過\n" "其他已經驗證的金鑰建立了一個信任連結." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "這份簽章無效. 從你的鑰匙圈中將它移除相當合理." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "這是一份和這個金鑰使用者 ID 相繫的簽章. 通常\n" "把這樣的簽章移除不會是個好點子. 事實上 GnuPG\n" "可能從此就不能再使用這把金鑰了. 所以祇有在這\n" "把金鑰的第一個自我簽章因某些原因無效, 而第二\n" "個還可用的情況下纔這麼做." #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "變更所有 (或祇有被選取的那幾個) 使用者 ID 的偏好成現用的偏好清單.\n" "所有受到影響的自我簽章的時間戳記都會增加一秒鐘.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "請輸入密語; 這是個秘密的句子 \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "請再次輸入最後的密語, 以確定你到底鍵入了些甚麼." #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "請給定簽章所要套用的檔案名稱" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "如果可以覆寫這個檔案的話就回答 \"yes\"" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "請輸入一個新的檔名. 如果你直接按下 Enter, 那麼就\n" "會使用預設的檔案 (顯示在括號中)." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "你應該為這份憑證指定一個原因.\n" "根據情境的不同, 你應該可以從這個清單中選出一項:\n" " \"金鑰已經被洩漏了\"\n" " 如果你相信有某個未經許可的傢伙取得了你的私鑰,\n" " 就選這個.\n" " \"金鑰被代換了\"\n" " 如果你把金鑰換成新的了, 就選這個.\n" " \"金鑰不再被使用了\"\n" " 如果你已經撤回了這把金鑰, 就選這個.\n" " \"使用者 ID 不再有效了\"\n" " 如果這個使用者 ID 不再被使用了, 就選這個;\n" " 這通常用來表示某個電子郵件位址不再有效了.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "你也可以輸入一串文字來描述為甚麼發佈這份撤銷憑證的理由.\n" "請讓這段文字保持簡明扼要.\n" "用空白列來結束這段文字.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "沒有可用的說明" #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "`%s' 沒有可用的說明" #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "匯入標記為僅限本機使用的簽章" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "匯入時修復來自 pks 金鑰伺服器的損壞" #: g10/import.c:104 #, fuzzy #| msgid "do not update the trustdb after import" msgid "do not clear the ownertrust values during import" msgstr "匯入後不要更新信任資料庫" #: g10/import.c:107 msgid "do not update the trustdb after import" msgstr "匯入後不要更新信任資料庫" #: g10/import.c:110 msgid "create a public key when importing a secret key" msgstr "匯入私鑰時亦建立公鑰" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "祇接受既有金鑰的更新" #: g10/import.c:116 msgid "remove unusable parts from key after import" msgstr "匯入後從金鑰中移除無法使用的部分" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "匯入後盡可能地從金鑰中移除" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "正在跳過 %d 型態的區塊\n" #: g10/import.c:302 #, c-format msgid "%lu keys processed so far\n" msgstr "目前已處理 %lu 把金鑰\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr "處理總量: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " 已跳過的新金鑰: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " 沒有使用者的 ID: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " 已匯入: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " 未改變的: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " 新的使用者 ID: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " 新的子鑰: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " 新的簽章: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " 新的金鑰撤銷: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " 已讀取的私鑰: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " 已匯入的私鑰: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr " 未改變的私鑰: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " 未被匯入: %lu\n" #: g10/import.c:355 #, c-format msgid " signatures cleaned: %lu\n" msgstr " 已清除的簽章: %lu\n" #: g10/import.c:357 #, c-format msgid " user IDs cleaned: %lu\n" msgstr " 已清除的使用者 ID: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "警告: 金鑰 %s 用於這些使用者 ID 的演算法偏好設定\n" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 msgid " algorithms on these user IDs:\n" msgstr " 無法使用:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr " \"%s\": 編密演算法 %s 的偏好設定\n" #: g10/import.c:712 #, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr " \"%s\": 摘要演算法 %s 的偏好設定\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr " \"%s\": 壓縮演算法 %s 的偏好設定\n" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "我們強烈建議你更新偏好設定, 並重新\n" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "散佈此金鑰, 以避免潛在的演算法不一致問題.\n" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "你可以像這樣來更新偏好設定: gpg --edit-key %s updpref save\n" #: g10/import.c:813 g10/import.c:1237 #, c-format msgid "key %s: no user ID\n" msgstr "金鑰 %s: 沒有使用者 ID\n" #: g10/import.c:819 #, c-format msgid "key %s: %s\n" msgstr "金鑰 %s: %s\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "受到匯入過濾器所排除" #: g10/import.c:849 #, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "金鑰 %s: PKS 子鑰的訛誤已被修復\n" #: g10/import.c:864 #, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "金鑰 %s: 已接受非自我簽署的使用者 ID \"%s\"\n" #: g10/import.c:870 #, c-format msgid "key %s: no valid user IDs\n" msgstr "金鑰 %s: 沒有有效的使用者 ID\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "這可能肇因於遺失自我簽章所致\n" #: g10/import.c:882 g10/import.c:1360 #, c-format msgid "key %s: public key not found: %s\n" msgstr "金鑰 %s: 找不到公鑰: %s\n" #: g10/import.c:888 #, c-format msgid "key %s: new key - skipped\n" msgstr "金鑰 %s: 新的金鑰 - 已跳過\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "找不到可寫入的鑰匙圈: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "寫入 `%s' 中\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "寫入鑰匙圈 `%s' 時出錯: %s\n" #: g10/import.c:926 #, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "金鑰 %s: 公鑰 \"%s\" 已匯入\n" #: g10/import.c:950 #, c-format msgid "key %s: doesn't match our copy\n" msgstr "金鑰 %s: 跟我們的副本不吻合\n" #: g10/import.c:967 g10/import.c:1378 #, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "金鑰 %s: 無法定址原始的金鑰區塊: %s\n" #: g10/import.c:975 g10/import.c:1385 #, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "金鑰 %s: 無法讀取原始的金鑰區塊: %s\n" #: g10/import.c:1017 #, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "金鑰 %s: \"%s\" 1 個新的使用者 ID\n" #: g10/import.c:1020 #, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "金鑰 %s: \"%s\" %d 個新的使用者 ID\n" #: g10/import.c:1023 #, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "金鑰 %s: \"%s\" 1 份新的簽章\n" #: g10/import.c:1026 #, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "金鑰 %s: \"%s\" %d 份新的簽章\n" #: g10/import.c:1029 #, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "金鑰 %s: \"%s\" 1 把新的子鑰\n" #: g10/import.c:1032 #, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "金鑰 %s: \"%s\" %d 把新的子鑰\n" #: g10/import.c:1035 #, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "金鑰 %s: \"%s\" 已清除 %d 份簽章\n" #: g10/import.c:1038 #, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "金鑰 %s: \"%s\" 已清除 %d 份簽章\n" #: g10/import.c:1041 #, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "金鑰 %s: \"%s\" 已清除 %d 個使用者 ID\n" #: g10/import.c:1044 #, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "金鑰 %s: \"%s\" 已清除 %d 個使用者 ID\n" #: g10/import.c:1067 #, c-format msgid "key %s: \"%s\" not changed\n" msgstr "金鑰 %s: \"%s\" 未改變\n" #: g10/import.c:1211 #, c-format msgid "secret key %s: %s\n" msgstr "私鑰 %s: %s\n" #: g10/import.c:1231 g10/import.c:1254 msgid "importing secret keys not allowed\n" msgstr "未允許匯入私鑰\n" #: g10/import.c:1243 #, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "金鑰 %s: 私鑰使用了無效的 %d 編密法 - 已跳過\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "沒有預設的私鑰鑰匙圈: %s\n" #: g10/import.c:1282 #, c-format msgid "key %s: secret key imported\n" msgstr "金鑰 %s: 私鑰已匯入\n" #: g10/import.c:1313 #, c-format msgid "key %s: already in secret keyring\n" msgstr "金鑰 %s: 已在私鑰鑰匙圈之中了\n" #: g10/import.c:1323 #, c-format msgid "key %s: secret key not found: %s\n" msgstr "金鑰 %s: 找不到私鑰: %s\n" #: g10/import.c:1353 #, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "金鑰 %s: 沒有公鑰 - 無法套用撤銷憑證\n" #: g10/import.c:1396 #, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "金鑰 %s: 無效的撤銷憑證: %s - 已駁回\n" #: g10/import.c:1428 #, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "金鑰 %s: \"%s\" 撤銷憑證已匯入\n" #: g10/import.c:1494 #, c-format msgid "key %s: no user ID for signature\n" msgstr "金鑰 %s: 簽章沒有使用者 ID\n" #: g10/import.c:1509 #, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "金鑰 %s: 使用者 ID \"%s\" 用了未支援的公鑰演算法\n" #: g10/import.c:1511 #, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "金鑰 %s: 使用者 ID \"%s\" 的自我簽章無效\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "金鑰 %s: 未支援的公鑰演算法\n" #: g10/import.c:1529 #, c-format msgid "key %s: invalid direct key signature\n" msgstr "金鑰 %s: 無效的直接金鑰簽章\n" #: g10/import.c:1542 #, c-format msgid "key %s: no subkey for key binding\n" msgstr "金鑰 %s: 沒有可供附帶的子鑰\n" #: g10/import.c:1555 #, c-format msgid "key %s: invalid subkey binding\n" msgstr "金鑰 %s: 無效的附帶子鑰\n" #: g10/import.c:1570 #, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "金鑰 %s: 多重附帶子鑰已移除\n" #: g10/import.c:1592 #, c-format msgid "key %s: no subkey for key revocation\n" msgstr "金鑰 %s: 沒有子鑰可供金鑰撤銷\n" #: g10/import.c:1605 #, c-format msgid "key %s: invalid subkey revocation\n" msgstr "金鑰 %s: 無效的子鑰撤銷\n" #: g10/import.c:1620 #, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "金鑰 %s: 多重子鑰撤銷已移除\n" #: g10/import.c:1662 #, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "金鑰 %s: 使用者 ID \"%s\" 已跳過\n" #: g10/import.c:1683 #, c-format msgid "key %s: skipped subkey\n" msgstr "金鑰 %s: 子鑰已跳過\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:1710 #, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "金鑰 %s: 不可匯出的簽章 (等級 0x%02X) - 已跳過\n" #: g10/import.c:1720 #, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "金鑰 %s: 撤銷憑證在錯誤的地方 - 已跳過\n" #: g10/import.c:1737 #, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "金鑰 %s: 無效的撤銷憑證: %s - 已跳過\n" #: g10/import.c:1751 #, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "金鑰 %s: 子鑰簽章在錯誤的地方 - 已跳過\n" #: g10/import.c:1759 #, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "金鑰 %s: 非預期的簽章等級 (0x%02X) - 已跳過\n" #: g10/import.c:1888 #, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "金鑰 %s: 偵測到重複的使用者 ID - 已合併\n" #: g10/import.c:1950 #, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "警告: 金鑰 %s 可能被撤銷了: 正在取回撤銷金鑰 %s\n" #: g10/import.c:1964 #, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "警告: 金鑰 %s 可能被撤銷了: 撤銷金鑰 %s 未出現.\n" #: g10/import.c:2023 #, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "金鑰 %s: 已新增 \"%s\" 撤銷憑證\n" #: g10/import.c:2057 #, c-format msgid "key %s: direct key signature added\n" msgstr "金鑰 %s: 已新增直接金鑰簽章\n" #: g10/import.c:2446 msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "請注意: 金鑰的序號 (S/N) 與卡片上的並不一致\n" #: g10/import.c:2454 msgid "NOTE: primary key is online and stored on card\n" msgstr "請注意: 主鑰在線上且已存放於卡片上了\n" #: g10/import.c:2456 msgid "NOTE: secondary key is online and stored on card\n" msgstr "請注意: 子鑰在線上且已存放於卡片上了\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "建立 `%s' 鑰匙圈時出錯: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "`%s' 鑰匙圈已建立\n" #: g10/keydb.c:319 g10/keydb.c:322 #, c-format msgid "keyblock resource `%s': %s\n" msgstr "`%s' 金鑰區塊資源: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "重新建立鑰匙圈快取失敗: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[撤銷]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[自我簽章]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 份損壞的簽章\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d 份損壞的簽章\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "有 1 份簽章因為遺失金鑰而未被檢查\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "有 %d 份簽章因為遺失金鑰而未被檢查\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "有 1 份簽章因錯誤而未被檢查\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "有 %d 份簽章因錯誤而未被檢查\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "偵測到 1 個沒有有效自我簽章的使用者 ID\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "偵測到 %d 個沒有有效自我簽章的使用者 ID\n" #: g10/keyedit.c:414 g10/pkclist.c:265 msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "請判斷你有多信任這位使用者確實驗證其他使用者的金鑰\n" "(像是查對身份證, 或從不同的來源檢查指紋等...)的能力\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, c-format msgid " %d = I trust marginally\n" msgstr " %d = 我勉強信任\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, c-format msgid " %d = I trust fully\n" msgstr " %d = 我完全信任\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" "請輸入此信任簽章的深度.\n" "深度大於 1 的話就表示你信任這把正被簽署的金鑰,\n" "同時也信任這把金鑰所簽署的信任簽章.\n" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "請輸入約束此簽章的網域, 若無請直接按下 [Enter].\n" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "使用者 ID \"%s\" 已撤銷." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "你仍然想要簽署它嗎? (y/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " 無法簽署.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "使用者 ID \"%s\" 已過期." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "使用者 ID \"%s\" 未經自我簽署." #: g10/keyedit.c:683 #, c-format msgid "User ID \"%s\" is signable. " msgstr "使用者 ID \"%s\" 可被簽署." #: g10/keyedit.c:685 msgid "Sign it? (y/N) " msgstr "是否要簽署? (y/N) " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "\"%s\" 裡的自我簽章\n" "是 PGP 2.x 型態的簽章.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "你是否想要將它升級成 OpenPGP 自我簽章? (y/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "你目前在 \"%s\" 的簽章\n" "已經過期了.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "你想要發佈一份新的簽章來取代已過期的那個嗎? (y/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "你目前在 \"%s\" 的簽章\n" "是一份本機簽章.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "你是否想要把他升級成可以完全匯出的簽章? (y/N) " #: g10/keyedit.c:780 #, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" 已經被金鑰 %s 在本機簽署了\n" #: g10/keyedit.c:783 #, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" 已經被金鑰 %s 簽署了\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "你仍然想要再次簽署它嗎? (y/N) " #: g10/keyedit.c:810 #, c-format msgid "Nothing to sign with key %s\n" msgstr "沒有東西可以讓金鑰 %s 簽署\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "這把金鑰已經過期了!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "這把金鑰將在 %s 過期.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "你想要讓你的簽章也在同一個時候過期嗎? (Y/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "你不能在 --pgp2 模式下, 拿 PGP 2.x 金鑰做出 OpenPGP 簽章.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "這會讓這把金鑰在 PGP 2.x 模式下無法使用.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "你有多謹慎檢查正要簽署的金鑰確實屬於上面那個人的名字呢?\n" "如果你不知道這個問題的答案, 請輸入 \"0\".\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) 我不作答.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) 我根本沒有檢查過.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) 我隨意檢查過了.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) 我非常小心地檢查過了.%s\n" #: g10/keyedit.c:926 msgid "Your selection? (enter `?' for more information): " msgstr "你的選擇是? (輸入 `?' 以取得更多資訊): " #: g10/keyedit.c:950 #, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "你真的確定要用你的金鑰 \"%s\" (%s)\n" "來簽署這把金鑰嗎\n" #: g10/keyedit.c:957 msgid "This will be a self-signature.\n" msgstr "這將會是一份自我簽章.\n" #: g10/keyedit.c:963 msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "警告: 這份簽章不會被標記為不可匯出.\n" #: g10/keyedit.c:971 msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "警告: 這份簽章不會被標記成不可撤銷.\n" #: g10/keyedit.c:981 msgid "The signature will be marked as non-exportable.\n" msgstr "這份簽章會被標記成不可匯出.\n" #: g10/keyedit.c:988 msgid "The signature will be marked as non-revocable.\n" msgstr "這份簽章會被標記成不可撤銷.\n" #: g10/keyedit.c:995 msgid "I have not checked this key at all.\n" msgstr "我根本沒有檢查過這把金鑰.\n" #: g10/keyedit.c:1000 msgid "I have checked this key casually.\n" msgstr "我隨意檢查過這把金鑰了.\n" #: g10/keyedit.c:1005 msgid "I have checked this key very carefully.\n" msgstr "我非常小心地檢查過這把金鑰了.\n" #: g10/keyedit.c:1015 msgid "Really sign? (y/N) " msgstr "真的要簽署嗎? (y/N)" #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "簽署時失敗: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "金鑰祇剩下殘骸或者祇含有卡上金鑰項目 - 沒有可變更的密語.\n" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "這把金鑰未被保護.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "主鑰的私鑰部分無法取用.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 msgid "Secret parts of primary key are stored on-card.\n" msgstr "主鑰的私鑰部分存放於卡上.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "金鑰已保護.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "無法編輯這把金鑰: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "請輸入要給這把私鑰用的新密語.\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "前後兩次輸入的密語不一致; 請再試一次" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "你不想要用密語 - 這大概是個 *糟* 點子!\n" "\n" #: g10/keyedit.c:1195 msgid "Do you really want to do this? (y/N) " msgstr "你真的想要這麼做嗎? (y/N) " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "正在把金鑰的簽章搬移到正確的位置去\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "儲存並離開" #: g10/keyedit.c:1355 msgid "show key fingerprint" msgstr "顯示金鑰指紋" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "列出金鑰和使用者 ID" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "選擇使用者 ID N" #: g10/keyedit.c:1359 msgid "select subkey N" msgstr "選擇子鑰 N" #: g10/keyedit.c:1360 msgid "check signatures" msgstr "檢查簽章" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "簽署所選的使用者 ID [* 請參見底下相關的註解]" #: g10/keyedit.c:1370 msgid "sign selected user IDs locally" msgstr "僅在本機簽署所選的使用者 ID" #: g10/keyedit.c:1372 msgid "sign selected user IDs with a trust signature" msgstr "用信任簽章來簽署所選的使用者 ID" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "用不可撤銷的簽章來簽署所選的使用者 ID" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "增加使用者 ID" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "增加照片 ID" #: g10/keyedit.c:1382 msgid "delete selected user IDs" msgstr "刪除所選的使用者 ID" #: g10/keyedit.c:1387 msgid "add a subkey" msgstr "增加子鑰" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "將金鑰加到智慧卡" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "將金鑰移動到智慧卡" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "將備份金鑰移動到智慧卡" #: g10/keyedit.c:1399 msgid "delete selected subkeys" msgstr "刪除所選的子鑰" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "增加撤銷金鑰" #: g10/keyedit.c:1403 msgid "delete signatures from the selected user IDs" msgstr "從所選的使用者 ID 中刪除簽章" #: g10/keyedit.c:1405 msgid "change the expiration date for the key or selected subkeys" msgstr "變更金鑰或所選子鑰的使用期限" #: g10/keyedit.c:1407 msgid "flag the selected user ID as primary" msgstr "把所選的使用者 ID 標為主要" #: g10/keyedit.c:1409 msgid "toggle between the secret and public key listings" msgstr "在私鑰清單和公鑰清單間切換" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "列出偏好 (專家模式)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "列出偏好 (囉唆模式)" #: g10/keyedit.c:1416 msgid "set preference list for the selected user IDs" msgstr "設定所選使用者 ID 的偏好清單" #: g10/keyedit.c:1421 msgid "set the preferred keyserver URL for the selected user IDs" msgstr "為所選的使用者 ID 設定偏好的金鑰伺服器 URL" #: g10/keyedit.c:1423 msgid "set a notation for the selected user IDs" msgstr "為所選的使用者 ID 設定註記" #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "更改密語" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "更改主觀信任" #: g10/keyedit.c:1431 msgid "revoke signatures on the selected user IDs" msgstr "撤銷所選使用者 ID 的簽章" #: g10/keyedit.c:1433 msgid "revoke selected user IDs" msgstr "撤銷所選的使用者 ID" #: g10/keyedit.c:1438 msgid "revoke key or selected subkeys" msgstr "撤銷金鑰或所選的子鑰" #: g10/keyedit.c:1439 msgid "enable key" msgstr "啟用金鑰" #: g10/keyedit.c:1440 msgid "disable key" msgstr "停用金鑰" #: g10/keyedit.c:1441 msgid "show selected photo IDs" msgstr "顯示所選的照片 ID" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "從金鑰中精簡無法使用的使用者 ID 並移除無法使用的簽章" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "從金鑰中精簡無法使用的使用者 ID 並移除所有的簽章" #: g10/keyedit.c:1572 #, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "讀取私鑰區塊 \"%s\" 時出錯: %s\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "私鑰可用.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "要有私鑰纔能這麼做.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "請先使用 \"toggle\" 指令.\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" "* 這個 `sign' 指令也可以在前面加上一個 `l' 字母, 來表示本機簽章 (lsign),\n" " 加上 `t' 的話就是信任簽章 (tsign), 加上 `nr' 的話就是不可撤銷簽章\n" " (nrsign), 當然也可以任意組合這些選項 (像是 ltsign, tnrsign 等等.).\n" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "金鑰已撤銷." #: g10/keyedit.c:1765 msgid "Really sign all user IDs? (y/N) " msgstr "真的要簽署所有的使用者 ID 嗎? (y/N) " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "提示: 選擇使用者 ID 來加以簽署\n" #: g10/keyedit.c:1781 #, c-format msgid "Unknown signature type `%s'\n" msgstr "未知的 `%s' 簽章種類\n" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "在 %s 模式中不允許使用這個指令.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "你至少得選擇一個使用者 ID.\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "你不能刪除最後一個使用者 ID!\n" #: g10/keyedit.c:1830 msgid "Really remove all selected user IDs? (y/N) " msgstr "真的要移除所有被選擇的使用者 ID 嗎? (y/N) " #: g10/keyedit.c:1831 msgid "Really remove this user ID? (y/N) " msgstr "真的要移除這個使用者 ID 嗎? (y/N) " #: g10/keyedit.c:1881 msgid "Really move the primary key? (y/N) " msgstr "真的要移動主鑰嗎? (y/N) " #: g10/keyedit.c:1893 msgid "You must select exactly one key.\n" msgstr "你一定祇得選擇一把金鑰.\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "這項指令要拿一個檔名來當作參數\n" #: g10/keyedit.c:1935 #, c-format msgid "Can't open `%s': %s\n" msgstr "無法開啟 `%s': %s\n" #: g10/keyedit.c:1952 #, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "從 `%s' 讀取備份金鑰時出錯: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "你至少得選擇一把金鑰.\n" #: g10/keyedit.c:1979 msgid "Do you really want to delete the selected keys? (y/N) " msgstr "你真的想要刪除所選的金鑰嗎? (y/N) " #: g10/keyedit.c:1980 msgid "Do you really want to delete this key? (y/N) " msgstr "你真的想要刪除這把金鑰嗎? (y/N) " #: g10/keyedit.c:2015 msgid "Really revoke all selected user IDs? (y/N) " msgstr "真的要撤銷所有所選的使用者 ID 嗎? (y/N) " #: g10/keyedit.c:2016 msgid "Really revoke this user ID? (y/N) " msgstr "真的要撤銷這個使用者 ID 嗎? (y/N) " #: g10/keyedit.c:2034 msgid "Do you really want to revoke the entire key? (y/N) " msgstr "你真的想要撤銷這整把金鑰嗎? (y/N) " #: g10/keyedit.c:2045 msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "你真的想要撤銷所選的子鑰嗎? (y/N) " #: g10/keyedit.c:2047 msgid "Do you really want to revoke this subkey? (y/N) " msgstr "你真的想要撤銷這把子鑰嗎? (y/N) " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "使用使用者所提供的信任資料庫時可能無法設定主觀信任\n" #: g10/keyedit.c:2140 msgid "Set preference list to:\n" msgstr "設定偏好清單至:\n" #: g10/keyedit.c:2146 msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "真的要更新所選使用者 ID 的偏好設定嗎? (y/N) " #: g10/keyedit.c:2148 msgid "Really update the preferences? (y/N) " msgstr "真的要更新偏好設定嗎? (y/N) " #: g10/keyedit.c:2218 msgid "Save changes? (y/N) " msgstr "要儲存變更嗎? (y/N) " #: g10/keyedit.c:2221 msgid "Quit without saving? (y/N) " msgstr "要不儲存就離開嗎? (y/N) " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "更新失敗: %s\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "更新私鑰失敗: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "金鑰沒有變更所以不需要更新.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "摘要: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "特點: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "金鑰伺服器無修改" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "偏好的金鑰伺服器: " #: g10/keyedit.c:2432 g10/keyedit.c:2433 msgid "Notations: " msgstr "註記: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "PGP 2.x 型態的使用者 ID 沒有偏好設定.\n" #: g10/keyedit.c:2700 #, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "這把金鑰已經在 %s 時被 %s 金鑰 %s 所撤銷\n" #: g10/keyedit.c:2721 #, c-format msgid "This key may be revoked by %s key %s" msgstr "這把金鑰可能被 %s 金鑰 %s 所撤銷" #: g10/keyedit.c:2727 msgid "(sensitive)" msgstr "(機密)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, c-format msgid "created: %s" msgstr "建立: %s" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, c-format msgid "revoked: %s" msgstr "撤銷: %s" # of subkey #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, c-format msgid "expired: %s" msgstr "過期: %s" # of subkey #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, c-format msgid "expires: %s" msgstr "到期: %s" #: g10/keyedit.c:2752 #, c-format msgid "usage: %s" msgstr "用途: %s" #: g10/keyedit.c:2767 #, c-format msgid "trust: %s" msgstr "信任: %s" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "有效性: %s" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "這把金鑰已經停用了" #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "卡片編號: " #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "請注意顯示出來的金鑰有效性不需要更正,\n" "除非你重新執行程式.\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 msgid "revoked" msgstr "已撤銷" #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 msgid "expired" msgstr "已過期" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "警告: 沒有任何使用者 ID 被標示為主要 ID. 這項指令可能會\n" " 導致不同的使用者 ID 被當成主要 ID.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "你不能變更 v3 金鑰的使用期限\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "警告: 這是一把 PGP2 型態的金鑰.\n" " 增加照片 ID 可能會導致某些版本的 PGP 駁回這把金鑰.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "你確定仍然想要增加嗎? (y/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "你不可以把照片 ID 增加到 PGP2 型態的金鑰裡.\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "刪除這份完好的簽章嗎? (y/N/q)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "刪除這份無效的簽章嗎? (y/N/q)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "刪除這份未知的簽章嗎? (y/N/q)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "真的要刪除這份自我簽章嗎? (y/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "已經刪除了 %d 份簽章.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "已經刪除了 %d 份簽章.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "沒有刪除任何東西.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 msgid "invalid" msgstr "無效" #: g10/keyedit.c:3293 #, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "使用者 ID \"%s\" 已精簡: %s\n" #: g10/keyedit.c:3300 #, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "使用者 ID \"%s\": 已移除 %d 份簽章\n" #: g10/keyedit.c:3301 #, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "使用者 ID \"%s\": 已移除 %d 份簽章\n" #: g10/keyedit.c:3309 #, c-format msgid "User ID \"%s\": already minimized\n" msgstr "使用者 ID \"%s\": 已經最小化了\n" #: g10/keyedit.c:3310 #, c-format msgid "User ID \"%s\": already clean\n" msgstr "使用者 ID \"%s\": 已經是乾淨的了\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "警告: 這是一把 PGP2 型態的金鑰.\n" " 增加指定撤銷者可能會導致某些版本的 PGP 駁回這把金鑰.\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "你不可以把指定撤銷者增加到 PGP2 型態的金鑰裡.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "輸入指定撤銷者的使用者 ID: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "無法將 PGP 2.x 型態的金鑰指派為指定撤銷者\n" # This actually causes no harm (after all, a key that # designates itself as a revoker is the same as a # regular key), but it's easy enough to check. #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "你不能指派某把金鑰為它自己的指定撤銷者\n" #: g10/keyedit.c:3497 msgid "this key has already been designated as a revoker\n" msgstr "已指定這把金鑰為撤銷者了\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "警告: 一旦把某把金鑰指派為指定撤銷者後, 就無法反悔了!\n" #: g10/keyedit.c:3522 msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "你確定要指派這把金鑰為指定撤銷者嗎? (y/N) " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "請從私鑰中移除選擇.\n" #: g10/keyedit.c:3590 msgid "Please select at most one subkey.\n" msgstr "請至多選擇一把子鑰.\n" #: g10/keyedit.c:3594 msgid "Changing expiration time for a subkey.\n" msgstr "正在變更子鑰的使用期限.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "正在變更主鑰的使用期限.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "你不能變更 v3 金鑰的使用期限\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "在私鑰圈裡沒有一致的簽章\n" #: g10/keyedit.c:3747 #, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "簽署子鑰 %s 已經交叉認證過了\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "子鑰 %s 不做簽署之用, 因此無須交叉驗證\n" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "請祇選擇一個使用者 ID.\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "正在跳過使用者 ID \"%s\" 的 v3 自我簽章\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "請輸入你的偏好金鑰伺服器 URL: " #: g10/keyedit.c:4206 msgid "Are you sure you want to replace it? (y/N) " msgstr "你確定要取代它嗎? (y/N) " #: g10/keyedit.c:4207 msgid "Are you sure you want to delete it? (y/N) " msgstr "你確定要刪除它嗎? (y/N) " #: g10/keyedit.c:4269 msgid "Enter the notation: " msgstr "請輸入註記: " #: g10/keyedit.c:4418 msgid "Proceed? (y/N) " msgstr "是否繼續? (y/N) " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "索引 %d 沒有對應到使用者 ID\n" #: g10/keyedit.c:4540 #, c-format msgid "No user ID with hash %s\n" msgstr "雜湊 %s 沒有對應到使用者 ID\n" #: g10/keyedit.c:4567 #, c-format msgid "No subkey with index %d\n" msgstr "索引 %d 沒有對應到子鑰\n" #: g10/keyedit.c:4702 #, c-format msgid "user ID: \"%s\"\n" msgstr "使用者 ID: \"%s\"\n" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, c-format msgid "signed by your key %s on %s%s%s\n" msgstr "已被你的金鑰 %s 於 %s%s%s 所簽署\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (不可匯出)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "這份簽章已經在 %s 過期了.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "你確定仍然想要撤銷它嗎? (y/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "要為這份簽章建立一份撤銷憑證嗎? (y/N) " #: g10/keyedit.c:4770 msgid "Not signed by you.\n" msgstr "並非由你所簽署.\n" #: g10/keyedit.c:4776 #, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "你已經簽署了金鑰 %s 上的這些使用者 ID:\n" #: g10/keyedit.c:4802 msgid " (non-revocable)" msgstr " (不可撤銷)" #: g10/keyedit.c:4809 #, c-format msgid "revoked by your key %s on %s\n" msgstr "被你的金鑰 %s 於 %s 所撤銷了\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "你正要撤銷這些簽章:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "真的要建立撤銷憑證嗎? (y/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "沒有私鑰\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "使用者 ID \"%s\" 已撤銷\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "警告: 有一份使用者 ID 的簽章日期為 %d 秒後的未來\n" #: g10/keyedit.c:5032 #, c-format msgid "Key %s is already revoked.\n" msgstr "金鑰 %s 已撤銷.\n" #: g10/keyedit.c:5094 #, c-format msgid "Subkey %s is already revoked.\n" msgstr "子鑰 %s 已撤銷.\n" #: g10/keyedit.c:5189 #, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "正在顯示 %s 照片 ID, 其尺寸為 %ld, 屬於金鑰 %s (uid %d) 的照片\n" #: g10/keygen.c:264 #, c-format msgid "preference `%s' duplicated\n" msgstr "偏好設定 `%s' 重複了\n" #: g10/keygen.c:271 msgid "too many cipher preferences\n" msgstr "編密偏好過多\n" #: g10/keygen.c:273 msgid "too many digest preferences\n" msgstr "摘要偏好過多\n" #: g10/keygen.c:275 msgid "too many compression preferences\n" msgstr "壓縮偏好過多\n" #: g10/keygen.c:416 #, c-format msgid "invalid item `%s' in preference string\n" msgstr "偏好字串中含有無效的 `%s' 項目\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "寫入直接簽章中\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "寫入自我簽章中\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "寫入附鑰簽章中\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "金鑰尺寸無效; 改用 %u 位元\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "金鑰尺寸增大到 %u 位元\n" #: g10/keygen.c:1362 msgid "Sign" msgstr "簽署" #: g10/keygen.c:1365 msgid "Certify" msgstr "保證" #: g10/keygen.c:1368 msgid "Encrypt" msgstr "加密" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "鑑定" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "SsEeAaQq" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "%s 金鑰可能的動作: " #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "目前可進行的動作: " #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr " (%c) 切換簽署性能\n" #: g10/keygen.c:1423 #, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%c) 切換加密性能\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr " (%c) 切換鑑定性能\n" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr " (%c) 已完成\n" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "請選擇你要使用的金鑰種類:\n" #: g10/keygen.c:1491 #, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) RSA 和 RSA (預設)\n" #: g10/keygen.c:1493 #, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA 和 Elgamal\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (僅能用於簽署)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (僅能用於簽署)\n" #: g10/keygen.c:1500 #, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) Elgamal (僅能用於加密)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (僅能用於加密)\n" #: g10/keygen.c:1505 #, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) DSA (你能自己設定性能)\n" #: g10/keygen.c:1506 #, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (你能自己設定性能)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "%s 金鑰的長度可能介於 %u 位元和 %u 位元之間.\n" #: g10/keygen.c:1624 #, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "你的子鑰想要用多大的金鑰尺寸? (%u) " #: g10/keygen.c:1627 #, c-format msgid "What keysize do you want? (%u) " msgstr "你想要用多大的金鑰尺寸? (%u) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "你所要求的金鑰尺寸是 %u 位元\n" #: g10/keygen.c:1722 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:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "請指定這份簽章的有效期限是多久.\n" " 0 = 簽章不會過期\n" " = 簽章在 n 天後會到期\n" " w = 簽章在 n 週後會到期\n" " m = 簽章在 n 月後會到期\n" " y = 簽章在 n 年後會到期\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "金鑰的有效期限是多久? (0) " #: g10/keygen.c:1759 #, c-format msgid "Signature is valid for? (%s) " msgstr "簽章的有效期限是多久? (%s) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "無效的數值\n" #: g10/keygen.c:1784 msgid "Key does not expire at all\n" msgstr "金鑰完全不會過期\n" #: g10/keygen.c:1785 msgid "Signature does not expire at all\n" msgstr "簽章完全不會過期\n" #: g10/keygen.c:1790 #, c-format msgid "Key expires at %s\n" msgstr "金鑰將會在 %s 到期\n" #: g10/keygen.c:1791 #, c-format msgid "Signature expires at %s\n" msgstr "簽章將會在 %s 到期.\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "你的系統無法顯示 2038 年以後的日期.\n" "不過, 它可以正確處理直到 2106 年之前的年份.\n" #: g10/keygen.c:1808 msgid "Is this correct? (y/N) " msgstr "以上正確嗎? (y/N) " #: g10/keygen.c:1823 msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "你需要一個使用者 ID 來辨識你的金鑰; 這個軟體會用真實姓名,\n" "註釋和電子郵件地址組合成使用者 ID 如下:\n" " \"Ke-Huan Lin (Jedi) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "真實姓名: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "姓名含有無效的字符\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "姓名不可以用數字開頭\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "姓名至少要有五個字符長\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "電子郵件地址: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "不是有效的電子郵件地址\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "註釋: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "註釋含有無效的字符\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "你正在使用 `%s' 字元集.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "你選擇了這個使用者 ID:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "請不要把電子郵件地址放進你的真實姓名或註釋裡\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnCcEeOoQq" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "變更姓名(N), 註釋(C), 電子郵件地址(E)或退出(Q)? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "變更姓名(N), 註釋(C), 電子郵件地址(E)或確定(O)/退出(Q)? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "請先訂正錯誤\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "你需要一個密語來保護你的私鑰.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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:2034 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" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "金鑰產生已取消.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "正在寫入公鑰至 `%s'\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, c-format msgid "writing secret key stub to `%s'\n" msgstr "正在寫入私鑰 stub 至 `%s'\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "正在寫入私鑰至 `%s'\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "找不到可寫入的公鑰鑰匙圈: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "找不到可寫入的私鑰鑰匙圈: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "寫入公鑰鑰匙圈 `%s' 時出錯: %s\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "寫入私鑰鑰匙圈 `%s' 時出錯: %s\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "公鑰和私鑰已建立及簽署.\n" #: g10/keygen.c:3320 msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "請注意這把金鑰不能用於加密. 也許你會想藉由 \"--edit-key\" 指令\n" "來產生加密用的子鑰.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "產生金鑰失敗: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "金鑰已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "金鑰已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "請注意: 對 v3 金鑰製造子鑰會失去 OpenPGP 相容性\n" #: g10/keygen.c:3434 g10/keygen.c:3560 msgid "Really create? (y/N) " msgstr "真的要建立嗎? (y/N) " #: g10/keygen.c:3747 #, c-format msgid "storing key onto card failed: %s\n" msgstr "儲存金鑰到卡片上時失敗: %s\n" #: g10/keygen.c:3794 #, c-format msgid "can't create backup file `%s': %s\n" msgstr "無法建立備份檔案 `%s': %s\n" #: g10/keygen.c:3820 #, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "請注意: 卡片金鑰的備份已儲存至 `%s'\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "永遠不過期" #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "關鍵簽章原則: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "簽章原則: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "執意偏好的金鑰伺服器: " #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "關鍵簽章註記: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "簽章註記: " #: g10/keylist.c:471 msgid "Keyring" msgstr "鑰匙圈" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr " 主鑰指紋:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " 子鑰指紋:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr " 主鑰指紋:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " 子鑰指紋:" # use tty #: g10/keylist.c:1531 g10/keylist.c:1535 msgid " Key fingerprint =" msgstr " 金鑰指紋 =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr " 卡片序號 =" #: g10/keyring.c:1274 #, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "把 `%s' 重新新命成 `%s' 時失敗: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "警告: 2 個檔案存在有互相矛盾的資訊.\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s 是沒有改變的那一個\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s 是新的那一個\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "請修補這個可能的安全漏洞\n" #: g10/keyring.c:1407 #, c-format msgid "caching keyring `%s'\n" msgstr "快取鑰匙圈 `%s' 中\n" #: g10/keyring.c:1466 #, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "目前已檢查 %lu 把金鑰 (共 %lu 份簽章)\n" #: g10/keyring.c:1478 #, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "已檢查 %lu 把金鑰 (共 %lu 份簽章)\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: 鑰匙圈已建立\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "在搜尋結果中也包含已撤銷的金鑰" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "以金鑰 ID 搜尋時也搜尋子鑰" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "用暫存檔來將資料遞送給金鑰伺服器協助程式" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "使用暫存檔後不要加以刪除" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "驗證簽章時自動取回金鑰" #: g10/keyserver.c:81 msgid "honor the preferred keyserver URL set on the key" msgstr "尊重金鑰上所設定的偏好金鑰伺服器 URL" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "取回金鑰時尊重金鑰所設定的 PKA 記錄" #: g10/keyserver.c:149 #, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "警告: 金鑰伺服器選項 `%s' 並未用於此平台\n" #: g10/keyserver.c:538 msgid "disabled" msgstr "已停用" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "請輸入數字, N)下一頁, 或 Q)離開 > " #: g10/keyserver.c:823 g10/keyserver.c:1578 #, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "無效的金鑰伺服器協定 (我們用 %d!=經手程式 %d)\n" #: g10/keyserver.c:921 #, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "在金鑰伺服器上找不到金鑰 \"%s\"\n" #: g10/keyserver.c:923 msgid "key not found on keyserver\n" msgstr "在金鑰伺服器上找不到金鑰\n" #: g10/keyserver.c:1269 #, c-format msgid "requesting key %s from %s server %s\n" msgstr "正在請求金鑰 %s 自 %s 伺服器 %s\n" #: g10/keyserver.c:1273 #, c-format msgid "requesting key %s from %s\n" msgstr "正在請求金鑰 %s 自 %s\n" #: g10/keyserver.c:1297 #, c-format msgid "searching for names from %s server %s\n" msgstr "正在從 %s 伺服器 %s 搜尋名字\n" #: g10/keyserver.c:1300 #, c-format msgid "searching for names from %s\n" msgstr "正在從 %s 搜尋名字\n" #: g10/keyserver.c:1478 #, c-format msgid "sending key %s to %s server %s\n" msgstr "遞送金鑰 %s 至 %s 伺服器 %s\n" #: g10/keyserver.c:1482 #, c-format msgid "sending key %s to %s\n" msgstr "遞送金鑰 %s 至 %s\n" #: g10/keyserver.c:1525 #, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "正在搜尋 \"%s\" 於 %s 伺服器 %s\n" #: g10/keyserver.c:1528 #, c-format msgid "searching for \"%s\" from %s\n" msgstr "正在搜尋 \"%s\" 於 %s\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 msgid "no keyserver action!\n" msgstr "沒有金鑰伺服器動作!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "警告: 金鑰伺服器經手程式係來自不同版本的 GnuPG (%s)\n" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "金鑰伺服器並未送出版本 (VERSION)\n" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, c-format msgid "keyserver communications error: %s\n" msgstr "金鑰伺服器通訊錯誤: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "沒有已知的金鑰伺服器 (使用 --keyserver 選項)\n" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "本版並不支援外部金鑰伺服器叫用\n" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "沒有 `%s' 金鑰伺服器架構的經手程式\n" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "`%s' 動作在 `%s' 金鑰伺服器架構中未支援\n" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "%s 並不支援第 %d 版經手程式\n" #: g10/keyserver.c:1719 msgid "keyserver timed out\n" msgstr "金鑰伺服器逾時\n" #: g10/keyserver.c:1727 msgid "keyserver internal error\n" msgstr "金鑰伺服器內部錯誤\n" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "\"%s\" 並非金鑰 ID: 跳過中\n" #: g10/keyserver.c:2054 #, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "警告: 無法更新金鑰 %s 於 %s: %s\n" #: g10/keyserver.c:2076 #, c-format msgid "refreshing 1 key from %s\n" msgstr "更新 1 份金鑰中 (從 %s )\n" #: g10/keyserver.c:2078 #, c-format msgid "refreshing %d keys from %s\n" msgstr "更新 %d 份金鑰中 (從 %s )\n" #: g10/keyserver.c:2134 #, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "警告: 無法抓取 URI %s: %s\n" #: g10/keyserver.c:2140 #, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "警告: 無法剖析 URI %s\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "加密過的階段金鑰 (%d) 尺寸詭異\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s 加密過的階段金鑰\n" #: g10/mainproc.c:304 #, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "密語係以未知的 %d 摘要演算法所產生\n" #: g10/mainproc.c:385 #, c-format msgid "public key is %s\n" msgstr "公鑰為 %s\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "公鑰加密過的資料: 完好的 DEK\n" #: g10/mainproc.c:482 #, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "已用 %u 位元長的 %s 金鑰, ID %s, 建立於 %s 所加密\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, c-format msgid " \"%s\"\n" msgstr " \"%s\"\n" #: g10/mainproc.c:490 #, c-format msgid "encrypted with %s key, ID %s\n" msgstr "已用 %s 金鑰, ID %s 所加密\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "公鑰解密失敗: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "已用 %lu 個密語加密了\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "已用 1 個密語加密了\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "假定 %s 為加密過的資料\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "IDEA 編密法不可用, 我們樂觀地試著改以 %s 代替\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "解密成功\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "警告: 訊息未受到完整的保護\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "警告: 加密過的訊息已經被變造了!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "解密失敗: %s\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "請注意: 寄件者要求了 \"你應該祇用眼睛看\"\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "原始的檔名 ='%.*s'\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "警告: 看到了多份明文\n" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "獨立撤銷 - 請用 \"gpg --import\" 來套用\n" #: g10/mainproc.c:1200 msgid "no signature found\n" msgstr "找不到簽章\n" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "簽章驗證已抑制\n" #: g10/mainproc.c:1580 msgid "can't handle this ambiguous signature data\n" msgstr "無法處理這個不明確的簽章資料\n" #: g10/mainproc.c:1591 #, c-format msgid "Signature made %s\n" msgstr "由 %s 建立的簽章\n" #: g10/mainproc.c:1592 #, c-format msgid " using %s key %s\n" msgstr " 使用 %s 金鑰 %s\n" #: g10/mainproc.c:1596 #, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "由 %s 建立的簽章, 使用 %s 金鑰 ID %s\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "可用的金鑰於: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, c-format msgid "BAD signature from \"%s\"" msgstr "*損壞* 的簽章來自於 \"%s\"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, c-format msgid "Expired signature from \"%s\"" msgstr "過期的簽章來自於 \"%s\"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, c-format msgid "Good signature from \"%s\"" msgstr "完好的簽章來自於 \"%s\"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[ 不確定 ]" #: g10/mainproc.c:1839 #, c-format msgid " aka \"%s\"" msgstr " 亦即 \"%s\"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "這份簽署已經在 %s 過期了\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "這份簽署將在 %s 到期\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s 簽章, 摘要演算法 %s\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "二進制" #: g10/mainproc.c:1947 msgid "textmode" msgstr "文字模式" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "未知" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "無法檢查簽章: %s\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "不是一份分離的簽章\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "警告: 偵測到多重簽章. 祇有第一個簽章纔會被核選.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "等級 0x%02x 的獨立簽章\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "舊型 (PGP 2.x) 簽章\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "在 proc_tree() 中偵測到無效的 root 封包\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "無法讓系統停止傾印核心檔: %s\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "`%s' 的 fstat 失敗於 %s: %s\n" #: g10/misc.c:209 #, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "fstat(%d) 失敗於 %s: %s\n" #: g10/misc.c:307 #, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "警告: 正在使用實驗性的 %s 公鑰演算法\n" #: g10/misc.c:313 msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "警告: 已不建議使用 Elgamal 簽署暨加密金鑰\n" #: g10/misc.c:326 #, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "警告: 正在使用實驗性的 %s 編密演算法\n" #: g10/misc.c:343 #, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "警告: 正在使用實驗性的 %s 摘要演算法\n" #: g10/misc.c:350 g10/misc.c:456 #, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "警告: 已不建議使用 %s 摘要演算法\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, c-format msgid "please see %s for more information\n" msgstr "請參考 %s 上進一步的資訊\n" #: g10/misc.c:472 #, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "請注意: %s 功能在本版中無法使用\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: 不建議使用的選項 \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "警告: 已不建議使用 \"%s\" 選項\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "請改以 \"%s%s\" 代替\n" #: g10/misc.c:742 #, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "警告: \"%s\" 是個棄而不顧的指令 - 別再用了\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "未壓縮" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 msgid "uncompressed|none" msgstr "uncompressed|none|未壓縮|無" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "這個訊息對 %s 來說無法使用\n" #: g10/misc.c:1082 #, c-format msgid "ambiguous option `%s'\n" msgstr "不明確的 `%s' 選項\n" #: g10/misc.c:1107 #, c-format msgid "unknown option `%s'\n" msgstr "未知的 `%s' 選項\n" #: g10/misc.c:1331 #, fuzzy, c-format #| msgid "Unknown signature type `%s'\n" msgid "Unknown weak digest '%s'\n" msgstr "未知的 `%s' 簽章種類\n" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "檔案 `%s' 已存在. " #: g10/openfile.c:92 msgid "Overwrite? (y/N) " msgstr "是否覆寫? (y/N) " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: 未知的副檔名\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "請輸入新的檔名" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "寫到標準輸出中\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "假設被簽署的資料在 `%s'\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "新的設定檔 `%s' 被建立了\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "警告: 在 `%s' 裡的選項於這次執行期間並沒有被啟用\n" #: g10/openfile.c:471 #, c-format msgid "directory `%s' created\n" msgstr "`%s' 目錄已建立\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "無法操作 %d 公開金鑰演算法\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "警告: 可能並不安全的對稱式加密階段金鑰\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "%d 類別的子封包設定了關鍵位元\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "gpg-agent 在此階段無法使用\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "格式不對的 GPG_AGENT_INFO 環境變數\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "gpg-agent 協定版本 %d 未被支援\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "無法連接至 `%s': %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "代理程式的問題 - 停用代理程式中\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, c-format msgid " (main key ID %s)" msgstr " (主要金鑰 ID %s)" #: g10/passphrase.c:555 #, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "你需要用密語來解開下列使用者的私鑰:\n" "\"%.*s\"\n" "%u 位元長的 %s 金鑰, ID %s, 建立於 %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "請再輸入一次密語\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "請輸入密語\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "由使用者所取消\n" #: g10/passphrase.c:814 g10/passphrase.c:983 msgid "can't query passphrase in batch mode\n" msgstr "無法在批次模式中查詢密語\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "請輸入密語: " #: g10/passphrase.c:904 #, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "你需要用密語來解開下列使用者的\n" "私鑰: \"%s\"\n" #: g10/passphrase.c:910 #, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u 位元長的 %s 金鑰, ID %s, 建立於 %s" #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr " (在主鑰 ID %s 上的子鑰)" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "請再輸入一次密語: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "請挑選一張圖片來當成你的照片 ID. 這張圖片一定要是 JPEG 圖檔纔行.\n" "請記住這張圖片會被存放在你的公鑰裡. 如果你挑了非常大的圖片的話,\n" "你的金鑰也會變成非常地大!\n" "盡量把圖片尺寸控制在 240x288 左右, 會是個非常理想的大小.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "輸入要當作照片 ID 的 JPEG 檔名: " #: g10/photoid.c:115 #, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "無法開啟 JPEG 圖檔 `%s': %s\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "這個 JPEG 檔案真的很大 (%d 位元組) !\n" #: g10/photoid.c:128 msgid "Are you sure you want to use it? (y/N) " msgstr "你確定要用它嗎? (y/N) " #: g10/photoid.c:144 #, c-format msgid "`%s' is not a JPEG file\n" msgstr "`%s' 不是一個 JPEG 圖檔\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "這張照片正確嗎? (y/N/q) " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "沒有設定照片檢視程式\n" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "無法顯示照片 ID!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "未指定原因" #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "金鑰被代換了" #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "金鑰已經被洩漏了" #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "金鑰不再被使用了" #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "使用者 ID 不再有效了" #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "撤銷原因: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "撤銷註釋: " # a string with valid answers #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iImMqQsS" #: g10/pkclist.c:215 msgid "No trust value assigned to:\n" msgstr "下列項目沒有對應的信任值:\n" #: g10/pkclist.c:248 #, c-format msgid " aka \"%s\"\n" msgstr " 亦即 \"%s\"\n" #: g10/pkclist.c:258 msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "你有多信任這把金鑰真的屬於叫這個名字的使用者?\n" #: g10/pkclist.c:273 #, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = 我不知道或不想說\n" #: g10/pkclist.c:275 #, c-format msgid " %d = I do NOT trust\n" msgstr " %d = 我*不*信任\n" #: g10/pkclist.c:281 #, c-format msgid " %d = I trust ultimately\n" msgstr " %d = 我徹底信任\n" #: g10/pkclist.c:287 msgid " m = back to the main menu\n" msgstr " m = 回到主選單\n" #: g10/pkclist.c:290 msgid " s = skip this key\n" msgstr " s = 跳過這把金鑰\n" #: g10/pkclist.c:291 msgid " q = quit\n" msgstr " q = 離開\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" "這把金鑰的最小信任等級為: %s\n" "\n" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "你的決定是甚麼? " #: g10/pkclist.c:322 msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "請問你是否真的想把這把金鑰設成徹底信任呢? (y/N) " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "被徹底信任金鑰的憑證:\n" #: g10/pkclist.c:421 #, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "%s: 沒法保證這把金鑰真的屬於叫這個名字的使用者\n" #: g10/pkclist.c:426 #, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "%s: 祇能有限的保證這把金鑰真的屬於叫這個名字的使用者\n" #: g10/pkclist.c:432 msgid "This key probably belongs to the named user\n" msgstr "這把金鑰很可能屬於叫這個名字的使用者\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "這把金鑰是屬於我們自己的\n" #: g10/pkclist.c:463 msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "這把金鑰並 *不* 確定屬於使用者 ID 裡的那個人.\n" "除非你 **真的** 知道自己在做甚麼,\n" "否則你最好在下一個問題回答 no\n" #: g10/pkclist.c:470 msgid "Use this key anyway? (y/N) " msgstr "無論如何還是使用這把金鑰嗎? (y/N) " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "警告: 正在使用不被信任的金鑰!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "警告: 這把金鑰可能已撤銷 (撤銷金鑰未出現)\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "警告: 這把金鑰已被指定撤銷者所撤銷!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "警告: 這把金鑰已被其持有人所撤銷!\n" #: g10/pkclist.c:524 msgid " This could mean that the signature is forged.\n" msgstr " 這很有可能表示此簽章是偽造的.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "警告: 這把子鑰已被其持有人所撤銷!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "請注意: 這把金鑰已停用.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "請注意: 已驗證的簽署者地址為 `%s'\n" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "請注意: 簽署者地址 `%s' 與 DNS 項目並不吻合\n" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "信任等級因有效的 PKA 資訊而調整為 *完全*\n" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "信任等級因不良的 PKA 資訊而調整為 *永遠不會*\n" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "請注意: 這把金鑰已經過期了!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "警告: 這把金鑰並非以受信任的簽章所認證!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr " 沒有證據指出這個簽章屬於這個持有者.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "警告: 我們 *不* 信任這把金鑰!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " 這個簽章很有可能是 *偽造的*.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "警告: 這把金鑰並非以足夠信任的簽章所認證!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " 這份簽章並不屬於這個持有者\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: 已跳過: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: 已跳過: 公鑰已存在\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "你沒有指定使用者 ID. (你可能得用 \"-r\")\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "目前的收件者:\n" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "請輸入使用者 ID. 以空白列結束: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "沒有這個使用者 ID.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "已跳過: 公鑰已經被設成預設收件者\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "公鑰已停用.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "已跳過: 公鑰已設過\n" #: g10/pkclist.c:1041 #, c-format msgid "unknown default recipient \"%s\"\n" msgstr "未知的預設收件者 \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: 已跳過: 公鑰已停用\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "沒有有效的地址\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "資料未被儲存; 請用 \"--output\" 選項來儲存\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "建立 `%s' 時出錯: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "分離的簽章.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "請輸入資料檔的名稱: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "正在讀取標準輸入中 ...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "沒有被簽署過的資料\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "無法開啟被簽署過的資料 `%s'\n" #: g10/pubkey-enc.c:102 #, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "匿名收件者; 正在嘗試使用私鑰 %s ...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "很好, 我們就是匿名收件者.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "不支援舊式的 DEK 編碼\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "%d%s 編密演算法未知或已停用\n" #: g10/pubkey-enc.c:276 #, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "警告: 收件者偏好設定中找不到 %s 編密演算法\n" #: g10/pubkey-enc.c:296 #, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "請注意: 私鑰 %s 在 %s 過期了\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "請注意: 金鑰已撤銷" #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet 失敗: %s\n" #: g10/revoke.c:145 #, c-format msgid "key %s has no user IDs\n" msgstr "金鑰 %s 沒有使用者 ID\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "將被撤銷:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(這是把機密的撤銷金鑰)\n" #: g10/revoke.c:314 msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "要為這把金鑰建立一份指定撤銷憑證嗎? (y/N) " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "已強迫使用 ASCII 封裝過的輸出.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet 失敗: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "已建立撤銷憑證.\n" #: g10/revoke.c:411 #, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "沒有找到 \"%s\" 用的撤銷金鑰\n" #: g10/revoke.c:469 #, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "找不到私鑰 \"%s\": %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "沒有相對應的公鑰: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "公鑰與私鑰並不吻合!\n" #: g10/revoke.c:514 msgid "Create a revocation certificate for this key? (y/N) " msgstr "要為這把金鑰建立一份撤銷憑證嗎? (y/N) " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "未知的保護演算法\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "請注意: 這把金鑰未受保護!\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "已建立撤銷憑證.\n" "\n" "請把這個檔案搬移到另一個你能夠將之藏起來的媒介上;\n" "如果有人能夠取得這份憑證的話, 那麼他也能夠讓你的\n" "金鑰無法繼續使用. 把這份憑證列印出來再藏到別的地\n" "方也是很好的方法, 以免你的儲存媒介損毀而無法讀取.\n" "但是千萬小心: 你的機器上的列印系統可能會在列印過\n" "程中把這些資料暫存在某個其他人也能夠看得到的地方!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "請選擇撤銷的原因:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "取消" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(也許你會想要在這裡選擇 %d)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "請輸入選用的描述; 以空白列結束:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "撤銷原因: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(沒有給定描述)\n" #: g10/revoke.c:719 msgid "Is this okay? (y/N) " msgstr "這樣可以嗎? (y/N) " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "私鑰部分無法取用\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "%d%s 保護演算法未支援\n" #: g10/seckey-cert.c:65 #, c-format msgid "protection digest %d is not supported\n" msgstr "%d 保護摘要未支援\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "無效的密語; 請再試一次" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s ...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "警告: 偵測到金鑰薄弱 - 請再更換一次密語.\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "正在產生私鑰保護會用到的舊式 16 位元加總檢查\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "建立了弱金鑰 - 重試中\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "無法避免對稱式編密法的弱金鑰; 已經試了 %d 次了!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "DSA 需要 8 位元倍數的雜湊長度\n" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "DSA 金鑰 %s 使用不安全 (%u 位元) 的雜湊\n" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "DSA 金鑰 %s 需要 %u 位元以上的雜湊\n" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "警告: 簽章摘要與訊息不一致\n" #: g10/sig-check.c:99 #, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "警告: 簽署子鑰 %s 未經交叉認證\n" #: g10/sig-check.c:111 #, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "警告: 簽署子鑰 %s 有無效的交叉憑證\n" #: g10/sig-check.c:191 #, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "公鑰 %s 比簽章還要新了 %lu 秒\n" #: g10/sig-check.c:192 #, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "公鑰 %s 比簽章還要新了 %lu 秒\n" #: g10/sig-check.c:203 #, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n" #: g10/sig-check.c:205 #, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "金鑰 %s 已經在 %lu 秒後的未來製妥 (可能是因為時光旅行或時鐘的問題)\n" #: g10/sig-check.c:219 #, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "請注意: 簽章金鑰 %s 已於 %s 過期\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s 簽章, 摘要演算法 %s\n" #: g10/sig-check.c:345 #, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "假設金鑰 %s 的損壞簽章導因於某個未知的關鍵位元\n" #: g10/sig-check.c:603 #, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "金鑰 %s: 沒有子鑰可供子鑰撤銷簽章使用\n" #: g10/sig-check.c:629 #, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "金鑰 %s: 沒有子鑰可供附子鑰簽章之用\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "警告: 註記 %% 無法擴張 (太大了). 現在使用未擴張的.\n" #: g10/sign.c:116 #, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "警告: 原則 URL 的 %% 無法擴張 (太大了). 現在使用未擴張的.\n" #: g10/sign.c:139 #, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "警告: 偏好金鑰伺服器 URL 的 %% 無法擴張 (太大了). 現在使用未擴張的.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "檢查已建立的簽章時出錯: %s\n" #: g10/sign.c:322 #, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s/%s 簽章來自: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "你在 --pgp2 模式下祇能夠使用 PGP 2.x 型態的金鑰來做分離簽署\n" #: g10/sign.c:834 #, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "警告: 強迫使用 %s (%d) 摘要演算法會違反收件者偏好設定\n" #: g10/sign.c:960 msgid "signing:" msgstr "簽署:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "你在 --pgp2 模式下祇能夠使用 PGP 2.x 型態的金鑰來做明文簽署\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s 加密將被採用\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "金鑰未被標示為不安全 - 不能夠拿來跟假的隨機數字產生器併用!\n" #: g10/skclist.c:157 #, c-format msgid "skipped \"%s\": duplicated\n" msgstr "已跳過 \"%s\": 重複了\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, c-format msgid "skipped \"%s\": %s\n" msgstr "已跳過 \"%s\": %s\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "已跳過: 私鑰已經存在\n" #: g10/skclist.c:185 msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "這是由 PGP 產生的 ElGamal 金鑰, 用於簽章並不安全!" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "信任記錄 %lu, 類別 %d: 寫入失敗: %s\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# 相對應的信任值清單被建立於 %s\n" "# (請用 \"gpg --import-ownertrust\" 來取回它們)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, c-format msgid "error in `%s': %s\n" msgstr "在 `%s' 中出錯: %s\n" #: g10/tdbdump.c:158 msgid "line too long" msgstr "列太長" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "冒號缺漏" #: g10/tdbdump.c:172 msgid "invalid fingerprint" msgstr "無效的指紋" #: g10/tdbdump.c:177 msgid "ownertrust value missing" msgstr "主觀信任值缺漏" #: g10/tdbdump.c:213 #, c-format msgid "error finding trust record in `%s': %s\n" msgstr "在 `%s' 中尋找信任記錄時出錯: %s\n" #: g10/tdbdump.c:217 #, c-format msgid "read error in `%s': %s\n" msgstr "讀取 `%s' 錯誤: %s\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "信任資料庫: 同步化失敗: %s\n" #: g10/tdbio.c:103 #, c-format msgid "can't create lock for `%s'\n" msgstr "無法為 `%s' 建立鎖定\n" #: g10/tdbio.c:108 #, c-format msgid "can't lock `%s'\n" msgstr "無法鎖定 `%s'\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "信任資料庫記錄 %lu: 本機搜尋失敗: %s\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "信任資料庫記錄 %lu: 寫入失敗 (n=%d): %s\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "信任資料庫更動量過大\n" #: g10/tdbio.c:520 #, c-format msgid "can't access `%s': %s\n" msgstr "無法存取 `%s': %s\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: 目錄不存在!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: 建立版本記錄失敗: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: 建立了無效的信任資料庫\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: 建立了信任資料庫\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "請注意: 信任資料庫不可寫入\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: 無效的信任資料庫\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: 建立雜湊表失敗: %s\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: 更新版本記錄時錯誤: %s\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: 讀取版本記錄時錯誤: %s\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: 寫入版本記錄時錯誤: %s\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "信任資料庫: 本機搜尋失敗: %s\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "信任資料庫: 讀取失敗 (n=%d): %s\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: 不是一個信任資料庫檔案\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: 記錄編號為 %lu 的版本記錄\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: 無效的檔案版本 %d\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: 讀取可用空間記錄時出錯: %s\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: 寫入目錄記錄時出錯: %s\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: 記錄歸零失敗: %s\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: 附加記錄失敗: %s\n" #: g10/tdbio.c:1504 msgid "Error: The trustdb is corrupted.\n" msgstr "錯誤: 信任資料庫已毀損.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "無法處理長於 %d 字符的文字列\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "輸入列比 %d 字符還長\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "`%s' 不是一個有效的長式金鑰 ID\n" #: g10/trustdb.c:257 #, c-format msgid "key %s: accepted as trusted key\n" msgstr "金鑰 %s: 如受信任的金鑰般被接受了\n" #: g10/trustdb.c:295 #, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "金鑰 %s 在信任資料庫中出現了不止一次\n" #: g10/trustdb.c:310 #, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "金鑰 %s: 受信任的金鑰沒有公鑰 - 已跳過\n" #: g10/trustdb.c:320 #, c-format msgid "key %s marked as ultimately trusted\n" msgstr "金鑰 %s 已標記成徹底信任了\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "信任記錄 %lu, 請求類別 %d: 讀取失敗: %s\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "信任記錄 %lu 不是所請求的類別 %d\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "你可以試著用下列指令來重建信任資料庫:\n" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "如果行不通的話, 請查閱手冊\n" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "無法使用未知的信任模型 (%d) - 現在採用 %s 信任模型\n" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "正在使用 %s 信任模型\n" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "10 譯者請參見 trustdb.c:uid_trust_string_fixed" #: g10/trustdb.c:527 msgid "[ revoked]" msgstr "[ 已撤銷 ]" #: g10/trustdb.c:529 g10/trustdb.c:534 msgid "[ expired]" msgstr "[ 已過期 ]" #: g10/trustdb.c:533 msgid "[ unknown]" msgstr "[ 未知 ]" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "[ 未定義 ]" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "[ 勉強 ]" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "[ 完全 ]" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "[ 徹底 ]" #: g10/trustdb.c:553 msgid "undefined" msgstr "未定義" #: g10/trustdb.c:554 msgid "never" msgstr "永遠不會" #: g10/trustdb.c:555 msgid "marginal" msgstr "勉強" #: g10/trustdb.c:556 msgid "full" msgstr "完全" #: g10/trustdb.c:557 msgid "ultimate" msgstr "徹底" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "不需要檢查信任資料庫\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "下次信任資料庫檢查將於 %s 進行\n" #: g10/trustdb.c:612 #, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "在 `%s' 信任模型中並不需要檢查信任資料庫\n" #: g10/trustdb.c:627 #, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "在 `%s' 信任模型中並不需要更新信任資料庫\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, c-format msgid "public key %s not found: %s\n" msgstr "找不到公鑰 %s: %s\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "請做一次 --check-trustdb\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "正在檢查信任資料庫\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "已經處理了 %d 把金鑰 (共計已解決了 %d 份有效性)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "沒有找到任何徹底信任的金鑰\n" #: g10/trustdb.c:2335 #, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "找不到徹底信任金鑰 %s 的公鑰\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "%d 個勉強信任以及 %d 個完全信任是 %s 信任模型的最小需求\n" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "深度: %d 有效: %3d 已簽署: %3d 信任: %d-, %dq, %dn, %dm, %df, %du\n" #: g10/trustdb.c:2519 #, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "無法更新信任資料庫版本記錄: 寫入失敗: %s\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "簽章無法驗證.\n" "請記住簽章檔 (.sig 或 .asc)\n" "應該是第一個命令列給定的檔案.\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "輸入列 %u 太長或者列末的 LF 遺失了\n" #: util/errors.c:53 msgid "general error" msgstr "一般性錯誤" #: util/errors.c:54 msgid "unknown packet type" msgstr "未知的封包型態" #: util/errors.c:55 msgid "unknown version" msgstr "未知的版本" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "未知的公鑰演算法" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "未知的摘要演算法" #: util/errors.c:58 msgid "bad public key" msgstr "損壞的公鑰" #: util/errors.c:59 msgid "bad secret key" msgstr "損壞的私鑰" #: util/errors.c:60 msgid "bad signature" msgstr "損壞的簽章" #: util/errors.c:61 msgid "checksum error" msgstr "加總檢查錯誤" #: util/errors.c:62 msgid "bad passphrase" msgstr "錯誤的密語" #: util/errors.c:63 msgid "public key not found" msgstr "找不到公鑰" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "未知的編密演算法" #: util/errors.c:65 msgid "can't open the keyring" msgstr "沒辦法開啟鑰匙圈" #: util/errors.c:66 msgid "invalid packet" msgstr "無效的封包" #: util/errors.c:67 msgid "invalid armor" msgstr "無效的封裝" #: util/errors.c:68 msgid "no such user id" msgstr "沒有這個使用者 ID" #: util/errors.c:69 msgid "secret key not available" msgstr "無法取用私鑰" #: util/errors.c:70 msgid "wrong secret key used" msgstr "用了錯誤的私鑰" #: util/errors.c:71 msgid "not supported" msgstr "未支援" #: util/errors.c:72 msgid "bad key" msgstr "損壞的金鑰" #: util/errors.c:73 msgid "file read error" msgstr "檔案讀取錯誤" #: util/errors.c:74 msgid "file write error" msgstr "檔案寫入錯誤" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "未知的壓縮演算法" #: util/errors.c:76 msgid "file open error" msgstr "檔案開啟錯誤" #: util/errors.c:77 msgid "file create error" msgstr "檔案建立錯誤" #: util/errors.c:78 msgid "invalid passphrase" msgstr "無效的密語" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "尚未實做的公鑰演算法" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "尚未實做的編密演算法" #: util/errors.c:81 msgid "unknown signature class" msgstr "未知的簽章層級" #: util/errors.c:82 msgid "trust database error" msgstr "信任資料庫錯誤" #: util/errors.c:83 msgid "bad MPI" msgstr "損壞的 MPI" #: util/errors.c:84 msgid "resource limit" msgstr "資源限制" #: util/errors.c:85 msgid "invalid keyring" msgstr "無效的鑰匙圈" #: util/errors.c:86 msgid "bad certificate" msgstr "損壞的憑證" #: util/errors.c:87 msgid "malformed user id" msgstr "格式不對的使用者 ID" #: util/errors.c:88 msgid "file close error" msgstr "檔案關閉錯誤" #: util/errors.c:89 msgid "file rename error" msgstr "檔案更名錯誤" #: util/errors.c:90 msgid "file delete error" msgstr "檔案刪除錯誤" #: util/errors.c:91 msgid "unexpected data" msgstr "未預期的資料" #: util/errors.c:92 msgid "timestamp conflict" msgstr "時間戳印有矛盾" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "無法使用的公鑰演算法" #: util/errors.c:94 msgid "file exists" msgstr "檔案已存在" #: util/errors.c:95 msgid "weak key" msgstr "金鑰薄弱" #: util/errors.c:96 msgid "invalid argument" msgstr "無效的參數" #: util/errors.c:97 msgid "bad URI" msgstr "損壞的 URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "未支援的 URI" #: util/errors.c:99 msgid "network error" msgstr "網路錯誤" #: util/errors.c:101 msgid "not encrypted" msgstr "未加密" #: util/errors.c:102 msgid "not processed" msgstr "未處理" #: util/errors.c:104 msgid "unusable public key" msgstr "不可用的公鑰" #: util/errors.c:105 msgid "unusable secret key" msgstr "不可用的私鑰" #: util/errors.c:106 msgid "keyserver error" msgstr "金鑰伺服器錯誤" #: util/errors.c:107 msgid "canceled" msgstr "已取消" #: util/errors.c:108 msgid "no card" msgstr "沒有卡片" #: util/errors.c:109 msgid "no data" msgstr "沒有資料" #: util/logger.c:183 msgid "ERROR: " msgstr "錯誤: " #: util/logger.c:186 msgid "WARNING: " msgstr "警告: " #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "... 這是個瑕疵 (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "你找到一個瑕疵了 ... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "yes" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "yY" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "no" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "quit" #: util/miscutil.c:443 msgid "qQ" msgstr "qQ" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "okay|okay" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "cancel|cancel" #: util/miscutil.c:479 msgid "oO" msgstr "oO" #: util/miscutil.c:480 msgid "cC" msgstr "cC" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "警告: 正在使用不安全的記憶體!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "請參考 http://www.gnupg.org/documentation/faqs.html 上進一步的資訊\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "尚未啟用安全的記憶體時, 不可能進行操作\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(也許你選錯程式來做這件事了)\n" #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "警告: 延伸模組 `%s' 的所有權並不安全\n" #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "警告: 延伸模組 `%s' 的權限並不安全\n" #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "警告: 延伸模組 `%s' 的封入目錄所有權並不安全\n" #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "警告: 延伸模組 `%s' 的封入目錄權限並不安全\n" #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "編密法延伸模組 `%s' 因為權限不安全而未載入\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "IDEA 編密法外掛模組不存在\n" #~ msgid "Command> " #~ msgstr "指令> " #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "DSA 金鑰對會有 %u 位元長.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "信任資料庫已損毀; 請執行 \"gpg --fix-trustdb\".\n" #~ msgid "|A|Admin PIN" #~ msgstr "|A|管理者 PIN" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "無法在 v3 (PGP 2.x 型態) 的簽章內放入標記資料\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "無法在 v3 (PGP 2.x 型態) 的金鑰簽章內放入標記資料\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "無法在 v3 (PGP 2.x 型態) 的簽章內放入原則 URL\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "無法在 v3 (PGP 2.x 型態) 的金鑰簽章內放入原則 URL\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "標記名稱一定要採用可印出的字符或空白, 並以一個 '=' 來結尾\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "使用者標記名稱一定要含有 '@' 字符\n" #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "使用者標記名稱不得含有兩個或更多的 '@' 字符\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "標記值一定不能使用任何的控制字符\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "警告: 找到無效的標記資料\n" #~ msgid "not human readable" #~ msgstr "不是人類能讀得懂的" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "請參考 http://www.gnupg.org/why-not-idea.html 取得更多資訊\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "DSA 要求使用 160 位元的雜湊演算法\n" gnupg-1.4.20/po/be.gmo0000644000175000017500000002772712635457220011374 00000000000000v|   % #> b w       ( D b t   H    0 O b t /   $ !3 N,o)jr*  ,CTk~ % *FWi{ 1If~  &<4Mq# #-Qj y 0CK^qt#y@B,1B1%NWL#!!9![}(*#7[Z-$Rq]!@bR#/J'_rW * !K ,m 0K!V|!T!("@"!Q"s""("&"0"'$#?L#0#*#*#6$-J$#x$K$-$%H2%.{%.%.%.&*7&8b&&&&1&F'3['?'G'4(EL(!(K(()<))<f).).)* *>*"M*dp*y*0O+3++++Q+O;,.,*,,7-59-$o--:--G./W.F... /!/F$/Ck/'/ D_,Rgdor5'9nJ(jZOi`Hmu: h" P?I=*W+aV&\7]$bUe N8cB@K!Q>YfES40 p1;FktC./[q^6<l-)vTs 3X#2MALG% Supported algorithms: %s makes no sense with %s! %s not allowed with %s! %s: failed to create hashtable: %s %s: keyring created %s:%d: invalid export options %s:%d: invalid import options --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric [filename]@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: Answer "yes" if it is okay to overwrite the fileEnter new filenameEnter passphrase Enter passphrase: Enter the new passphrase for this secret key. File `%s' exists. Invalid command (try "help") Invalid passphrase; please try againKey is protected. No help availableNo help available for `%s'Please enter name of data file: Please report bugs to . Please select what kind of key you want: Repeat passphrase Repeat passphrase: Secret key is available. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data This key has expired!Usage: gpg [options] [files] (-h for help)WARNING: using insecure memory! [filename]bad MPIbad certificatebad keybad passphrasebad public keybad secret keybe somewhat more quietcan't open `%s' can't open the keyringcancelled by user checksum errorconflicting commands decrypt data (default)do not make any changesencrypt dataencryption only with symmetric ciphererror creating `%s': %s export keysexport keys to a key serverfile close errorfile create errorfile delete errorfile open errorfile read errorfile rename errorfile write errorgeneral errorgenerate a new key pairimport keys from a key serverimport/merge keysinvalid default preferences invalid export options invalid hash algorithm `%s' invalid import options invalid passphraselist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist secret keysmake a detached signaturenNnono such user idnot supportedoperation is not possible without initialized secure memory please see http://www.gnupg.org/documentation/faqs.html for more information prompt before overwritingpublic key not foundqQquitreading stdin ... remove keys from the public keyringremove keys from the secret keyringsecret key not availableshow this helpsign a keysign a key locallysign or edit a keysigning failed: %s unexpected dataunknown compress algorithmunknown versionupdate all keys from a keyserverusage: gpg [options] use as output fileverboseverify a signaturewriting to stdout yY|NAME|encrypt for NAME|[file]|make a clear text signature|[file]|make a signatureProject-Id-Version: gnupg 1.2.2 Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-08-24 17:19+0200 Last-Translator: Ales Nyakhaychyk Language-Team: Belarusian Language: be MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: KBabel 1.0.2 Альгарытмы, якія падтрымліваюцца: %s ня мае сэнсу разам з %s! %s не дазваляецца разам з %s! %s: немагчыма стварыць хэш-табліцу: %s %s: створаны зьвязак ключоў %s:%d: недапушчальныя выбары экспартаваньня %s:%d: недапушчальныя выбары імпартаваньня --clearsign [назва_файла]--decrypt [назва_файла]--edit-key user-id [загады]--encrypt [назва_файла]--lsign-key user-id--sign --encrypt [назва_файла]--sign --symmetric [назва_файла]--sign [назва_файла]--sign-key user-id--store [назва_файла]--symmetric [назва_файла]@ (Глядзіце man старонку, для больш поўнага апісаньня ўсіх загадаў і выбараў) @ Прыклады: -se -r Bob [файл] падпісаць і зашыфраваць для карыстальніка Bob --clearsign [файл] стварыць чысты тэкставы подпіс --detach-sign [файл] стварыць адчэплены подпіс --list-keys [назвы] паказаць ключы --fingerprint [назвы] паказаць адбіткі пальцаў @ Выбары: @Загады: Адкажыце "так", калі Вы згодны з перазапісам файлаУвядзіце новае ймя файлаУвядзіце пароль Увядзіце пароль: Увядзіце новы пароль для гэтага сакрэтнага ключа. Файл "%s" ужо йснуе. Нерэчаісны загад (паспрабуйце "help") Недапушчальны пароль. Калі ласка, паспрабуйце шчэ разКлюч абаронены. Даведка адсутнічаеДля "%s" даведка адсутнічаеКалі ласка, задайце назву файла даньняў: Калі ласка, паведамляйце пра памылкі на . Калі ласка, абярыце від ключа, які Вам патрэбны: Паўтарыце пароль Паўтарыце пароль: Даступны сакрэтны ключ. Сынтаксіс: gpg [выбары] [файлы] sign, check, encrypt ці decrypt Дапомнае дзеяньне залежыць ад уваходных даньняў Гэты ключ згубіў састарэў!Выкарыстаньне: gpg [выбары] [файлы] (-h для даведкі)УВАГА! Выкарыстоўваецца небясьпечная памяць! [назва_файла]дрэнны MPIдрэнны сэртыфікатдрэнны ключдрэнны парольдрэнны грамадскі ключдрэнны сакрэтны ключпрацаваць менш шматслоўнанемагчыма адкрыць "%s" немагчыма адчыніць зьвязак ключоўскасавана карыстальнікам памылка праверчае сумынесумяшчальныя загады разшыфраваць даньні (дапомна)не рабіць ніякіх зьменаўзашыфраваць даньнішыфраваньне толькі сымэтрычнымі шыфраміпамылка стварэньня "%s": %s экспарт ключоўэкспартаваць ключы на паслужнік ключоўпамылка зачыненьня файлапамылка стварэньня файлапамылка выдаленьня файлапамылка адчыненьня файлапамылка чытаньня файлапамылка перайменаваньня файлапамылка запісу файлаагульная памылкастварыць новую пару ключоўімпартаваць ключы з паслужніка ключоўімпартаваць/аб'яднаць ключынедапушчальныя дапомныя перавагі недапушчальныя выбары экспартаваньня нерэчаісны хэш-альгарытм "%s" недапушчальныя выбары імпартаваньня нерэчаісны парольпаказаць сьпіс ключоў і ID карыстальнікаўпаказаць сьпіс ключоўпаказаць ключы й адбіткі пальцаўпаказаць сьпіс ключоў і подпісаўпаказаць сакрэтныя ключызрабіць адчэплены подпісnNno [не]карыстальнік з такім ID адсутнічаенепадтрымліваеццадзеяньне немагчымае без распачатае бясьпечнае памяці па больш падрабязныя зьвесткі шукайце на http://www.gnupg.org/documentation/faqs.html пытацца перад перазапісамграмадскі ключ ня знойдзеныqQquit [выйсьці]чытаецца stdin ... выдаліць ключы са зьвязку грамадскіх ключоўвыдаліць ключы са зьвязку сакрэтных ключоўсакрэтны ключ недаступныпаказаць гэтую даведкупадпісаць ключпадпісаць ключ толькі мясцовападпісаць ці рэдагаваць ключзбой падпісаньня: %s нечаканыя даньніневядомы альгарытм сьцісканьняневядомая вэрсыяабнавіць усе ключы з паслужніка ключоўВыкарыстаньне: gpg [выбары] выкарыстоўваць у якасьці файла вывадушматслоўнасьцьправерыць подпісзапіс у stdout yY|ІМЯ| зашыфраваць для вылучанай асобы|[файл]|зрабіць чысты тэкставы подпіс|[файл]|зрабіць подпісgnupg-1.4.20/po/hu.po0000644000175000017500000061554312635457220011255 00000000000000# GnuPG Hungarian translation. # Copyright (C) 2003, 2004 Free Software Foundation, Inc. # Nagy Ferenc Lszl , 2003, 2004. # msgid "" msgstr "" "Project-Id-Version: gnupg 1.2.5\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n" "POT-Creation-Date: 2015-12-20 08:53+0100\n" "PO-Revision-Date: 2012-08-24 17:24+0200\n" "Last-Translator: Nagy Ferenc Lszl \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=iso-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: cipher/primegen.c:119 #, fuzzy, c-format msgid "can't gen prime with pbits=%u qbits=%u\n" msgstr "Nem tudok ltrehozni %d bitesnl kisebb prmszmot.\n" #: cipher/primegen.c:310 #, c-format msgid "can't generate a prime with less than %d bits\n" msgstr "Nem tudok ltrehozni %d bitesnl kisebb prmszmot.\n" #: cipher/random.c:181 msgid "no entropy gathering module detected\n" msgstr "Nem szleltem entrpiagyjt modult.\n" #: cipher/random.c:426 cipher/random.c:604 #, fuzzy, c-format msgid "can't lock `%s': %s\n" msgstr "Nem tudom megnyitni %s-t!\n" #: cipher/random.c:431 cipher/random.c:610 #, fuzzy, c-format msgid "waiting for lock on `%s'...\n" msgstr "rom a titkos kulcsot a %s llomnyba.\n" #: cipher/random.c:474 g10/card-util.c:787 g10/dearmor.c:59 g10/dearmor.c:108 #: g10/encode.c:182 g10/encode.c:472 g10/gpg.c:1023 g10/gpg.c:3610 #: g10/import.c:209 g10/keygen.c:2573 g10/keyring.c:1569 g10/openfile.c:193 #: g10/openfile.c:395 g10/plaintext.c:505 g10/sign.c:780 g10/sign.c:973 #: g10/sign.c:1087 g10/sign.c:1238 g10/tdbdump.c:139 g10/tdbdump.c:147 #: g10/tdbio.c:553 g10/tdbio.c:602 #, c-format msgid "can't open `%s': %s\n" msgstr "Nem tudom megnyitni a(z) \"%s\" llomnyt: %s.\n" #: cipher/random.c:484 #, c-format msgid "can't stat `%s': %s\n" msgstr "Nem tudom a stat mveletet elvgezni a(z) \"%s\" llomnyon: %s.\n" #: cipher/random.c:489 #, c-format msgid "`%s' is not a regular file - ignored\n" msgstr "\"%s\" nem szablyos llomny. Figyelmen kvl hagyom.\n" #: cipher/random.c:494 cipher/random.c:512 msgid "note: random_seed file is empty\n" msgstr "" "Megjegyzs: random_seed llomny (vletlenszm-genertor llapota) res.\n" #: cipher/random.c:500 cipher/random.c:532 msgid "WARNING: invalid size of random_seed file - not used\n" msgstr "FIGYELEM: rvnytelen mret random_seed llomny. Nem hasznlom.\n" #: cipher/random.c:520 cipher/random.c:527 #, c-format msgid "can't read `%s': %s\n" msgstr "Nem tudom olvasni a(z) \"%s\" llomnyt: %s.\n" #: cipher/random.c:570 msgid "note: random_seed file not updated\n" msgstr "Megjegyzs: random_seed llomnyt nem frisstettem.\n" #: cipher/random.c:623 g10/card-util.c:833 g10/exec.c:479 g10/gpg.c:1022 #: g10/keygen.c:3056 g10/keygen.c:3086 g10/keyring.c:1222 g10/keyring.c:1545 #: g10/openfile.c:287 g10/openfile.c:410 g10/sign.c:798 g10/sign.c:1103 #: g10/tdbio.c:549 #, c-format msgid "can't create `%s': %s\n" msgstr "Nem tudom ltrehozni a(z) \"%s\" llomnyt: %s.\n" #: cipher/random.c:635 cipher/random.c:645 #, c-format msgid "can't write `%s': %s\n" msgstr "Nem tudom rni a(z) \"%s\" llomnyt: %s.\n" #: cipher/random.c:648 #, c-format msgid "can't close `%s': %s\n" msgstr "Nem tudom bezrni a(z) \"%s\" llomnyt: %s.\n" #: cipher/random.c:893 msgid "WARNING: using insecure random number generator!!\n" msgstr "FIGYELEM: Nem biztonsgos vletlenszm-genertort hasznlok!!!\n" #: cipher/random.c:894 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 "" "A vletlenszm-genertor csak egy szksgmegolds, hogy a program\n" "elinduljon, semmikppen nem egy ers vletlenszm-genertor!\n" "\n" "NE HASZNLJON SEMMILYEN ADATOT, AMIT EZ A PROGRAM ELLLT!\n" "\n" #: cipher/rndegd.c:200 msgid "" "Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n" msgstr "" "Krem, vrjon, entrpit gyjtk! Vagy inkbb csinljon kzben valamit\n" "a gpen, az az entrpim minsgt is javtani fogja!\n" #: cipher/rndlinux.c:134 #, c-format msgid "" "\n" "Not enough random bytes available. Please do some other work to give\n" "the OS a chance to collect more entropy! (Need %d more bytes)\n" msgstr "" "\n" "Nem ll rendelkezsre elg vletlen bjt. Krem, csinljon most valami\n" "mst, hogy az opercis rendszer entrpit gyjthessen!\n" "(Mg %d bjt szksges.)\n" #: g10/app-openpgp.c:698 #, fuzzy, c-format msgid "failed to store the fingerprint: %s\n" msgstr "Bizalmi adatbzis (%s) inicializlsa sikertelen!\n" #: g10/app-openpgp.c:711 #, fuzzy, c-format msgid "failed to store the creation date: %s\n" msgstr "Nem tudtam jrapteni a kulcskarika cache-t: %s\n" #: g10/app-openpgp.c:1150 #, fuzzy, c-format msgid "reading public key failed: %s\n" msgstr "A kulcsblokk trlse sikertelen: %s.\n" #: g10/app-openpgp.c:1158 g10/app-openpgp.c:2875 msgid "response does not contain the public key data\n" msgstr "" #: g10/app-openpgp.c:1166 g10/app-openpgp.c:2883 msgid "response does not contain the RSA modulus\n" msgstr "" #: g10/app-openpgp.c:1175 g10/app-openpgp.c:2893 msgid "response does not contain the RSA public exponent\n" msgstr "" #: g10/app-openpgp.c:1495 #, c-format msgid "using default PIN as %s\n" msgstr "" #: g10/app-openpgp.c:1502 #, c-format msgid "failed to use default PIN as %s: %s - disabling further default use\n" msgstr "" #: g10/app-openpgp.c:1517 #, c-format msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgstr "" #: g10/app-openpgp.c:1528 g10/app-openpgp.c:1982 msgid "||Please enter the PIN" msgstr "" #: g10/app-openpgp.c:1543 g10/app-openpgp.c:1562 g10/app-openpgp.c:1723 #: g10/app-openpgp.c:1740 g10/app-openpgp.c:1988 g10/app-openpgp.c:2033 #, c-format msgid "PIN callback returned error: %s\n" msgstr "" #: g10/app-openpgp.c:1569 g10/app-openpgp.c:1747 g10/app-openpgp.c:1995 #, c-format msgid "PIN for CHV%d is too short; minimum length is %d\n" msgstr "" #: g10/app-openpgp.c:1582 g10/app-openpgp.c:1621 g10/app-openpgp.c:1759 #: g10/app-openpgp.c:3193 #, fuzzy, c-format msgid "verify CHV%d failed: %s\n" msgstr "Klds a kulcsszerverre sikertelen: %s\n" #: g10/app-openpgp.c:1650 g10/app-openpgp.c:2014 g10/app-openpgp.c:3489 msgid "error retrieving CHV status from card\n" msgstr "" #: g10/app-openpgp.c:1656 g10/app-openpgp.c:3498 msgid "card is permanently locked!\n" msgstr "" #: g10/app-openpgp.c:1663 #, c-format msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgstr "" #. TRANSLATORS: Do not translate the "|A|" prefix but keep it at #. the start of the string. Use %%0A to force a linefeed. #: g10/app-openpgp.c:1670 #, c-format msgid "|A|Please enter the Admin PIN%%0A[remaining attempts: %d]" msgstr "" #: g10/app-openpgp.c:1674 msgid "|A|Please enter the Admin PIN" msgstr "" #: g10/app-openpgp.c:1695 msgid "access to admin commands is not configured\n" msgstr "" #: g10/app-openpgp.c:2023 g10/card-util.c:108 #, fuzzy msgid "Reset Code not or not anymore available\n" msgstr "Titkos kulcsrszek nem llnak rendelkezsre.\n" #: g10/app-openpgp.c:2029 #, fuzzy msgid "||Please enter the Reset Code for the card" msgstr "Krem, vlassza ki a visszavons okt:\n" #: g10/app-openpgp.c:2039 g10/app-openpgp.c:2090 #, c-format msgid "Reset Code is too short; minimum length is %d\n" msgstr "" #. TRANSLATORS: Do not translate the "|*|" prefixes but #. keep it at the start of the string. We need this elsewhere #. to get some infos on the string. #: g10/app-openpgp.c:2060 msgid "|RN|New Reset Code" msgstr "" #: g10/app-openpgp.c:2061 msgid "|AN|New Admin PIN" msgstr "" #: g10/app-openpgp.c:2061 msgid "|N|New PIN" msgstr "" #: g10/app-openpgp.c:2065 #, fuzzy, c-format msgid "error getting new PIN: %s\n" msgstr "Hiba a jelsz ltrehozsakor: %s.\n" #: g10/app-openpgp.c:2171 g10/app-openpgp.c:2961 #, fuzzy msgid "error reading application data\n" msgstr "Hiba a kulcsblokk olvassakor: %s\n" #: g10/app-openpgp.c:2177 g10/app-openpgp.c:2968 #, fuzzy msgid "error reading fingerprint DO\n" msgstr "%s: Hiba szabad rekord olvassakor: %s.\n" #: g10/app-openpgp.c:2187 #, fuzzy msgid "key already exists\n" msgstr "\"%s\" mr tmrtett.\n" #: g10/app-openpgp.c:2191 msgid "existing key will be replaced\n" msgstr "" #: g10/app-openpgp.c:2193 #, fuzzy msgid "generating new key\n" msgstr "j kulcspr ltrehozsa" #: g10/app-openpgp.c:2195 #, fuzzy msgid "writing new key\n" msgstr "j kulcspr ltrehozsa" #: g10/app-openpgp.c:2620 msgid "creation timestamp missing\n" msgstr "" #: g10/app-openpgp.c:2640 #, c-format msgid "RSA modulus missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2652 #, c-format msgid "RSA public exponent missing or larger than %d bits\n" msgstr "" #: g10/app-openpgp.c:2662 g10/app-openpgp.c:2670 #, c-format msgid "RSA prime %s missing or not of size %d bits\n" msgstr "" #: g10/app-openpgp.c:2766 #, fuzzy, c-format msgid "failed to store the key: %s\n" msgstr "Bizalmi adatbzis (%s) inicializlsa sikertelen!\n" #: g10/app-openpgp.c:2852 msgid "please wait while key is being generated ...\n" msgstr "" #: g10/app-openpgp.c:2865 #, fuzzy msgid "generating key failed\n" msgstr "A kulcsblokk trlse sikertelen: %s.\n" #: g10/app-openpgp.c:2868 #, fuzzy, c-format msgid "key generation completed (%d seconds)\n" msgstr "Kulcsgenerls sikertelen: %s\n" #: g10/app-openpgp.c:2926 msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgstr "" #: g10/app-openpgp.c:2976 msgid "fingerprint on card does not match requested one\n" msgstr "" #: g10/app-openpgp.c:3092 #, fuzzy, c-format msgid "card does not support digest algorithm %s\n" msgstr "%s alrs, %s kivonatol algoritmus.\n" #: g10/app-openpgp.c:3168 #, c-format msgid "signatures created so far: %lu\n" msgstr "" #: g10/app-openpgp.c:3503 msgid "" "verification of Admin PIN is currently prohibited through this command\n" msgstr "" #: g10/app-openpgp.c:3728 g10/app-openpgp.c:3739 #, fuzzy, c-format msgid "can't access %s - invalid OpenPGP card?\n" msgstr "Nem talltam rvnyes OpenPGP adatot.\n" #: g10/armor.c:383 #, c-format msgid "armor: %s\n" msgstr "Pncl: %s\n" #: g10/armor.c:448 msgid "invalid armor header: " msgstr "rvnytelen pnclfejlc: " #: g10/armor.c:459 msgid "armor header: " msgstr "Pnclfejlc: " #: g10/armor.c:472 msgid "invalid clearsig header\n" msgstr "rvnytelen alrsfejlc!\n" #: g10/armor.c:485 #, fuzzy msgid "unknown armor header: " msgstr "Pnclfejlc: " #: g10/armor.c:546 msgid "nested clear text signatures\n" msgstr "Egymsba gyazott olvashatszveg-alrsok!\n" #: g10/armor.c:681 #, fuzzy msgid "unexpected armor: " msgstr "Vratlan pncl:" #: g10/armor.c:693 msgid "invalid dash escaped line: " msgstr "rvnytelen ktjeles sor: " #: g10/armor.c:848 g10/armor.c:1473 #, fuzzy, c-format msgid "invalid radix64 character %02X skipped\n" msgstr "Kihagytam a %02x kd rvnytelen radix64 karaktert.\n" #: g10/armor.c:891 msgid "premature eof (no CRC)\n" msgstr "Korai llomnyvg (nincs CRC).\n" #: g10/armor.c:925 msgid "premature eof (in CRC)\n" msgstr "Korai llomnyvg (a CRC-ben).\n" #: g10/armor.c:933 msgid "malformed CRC\n" msgstr "Hibs formj CRC.\n" #: g10/armor.c:937 g10/armor.c:1510 #, fuzzy, c-format msgid "CRC error; %06lX - %06lX\n" msgstr "CRC hiba; %06lx - %06lx\n" #: g10/armor.c:957 #, fuzzy msgid "premature eof (in trailer)\n" msgstr "Korai llomnyvg (a lezrsban).\n" #: g10/armor.c:961 msgid "error in trailer line\n" msgstr "Hiba a zr sorban!\n" #: g10/armor.c:1287 msgid "no valid OpenPGP data found.\n" msgstr "Nem talltam rvnyes OpenPGP adatot.\n" #: g10/armor.c:1292 #, c-format msgid "invalid armor: line longer than %d characters\n" msgstr "rvnytelen pncl: %d karakternl hosszabb sor.\n" #: g10/armor.c:1296 msgid "" "quoted printable character in armor - probably a buggy MTA has been used\n" msgstr "" "quoted printable karakter a pnclban - valsznleg egy bugos MTA bne.\n" #: g10/card-util.c:85 g10/card-util.c:374 #, fuzzy, c-format msgid "OpenPGP card not available: %s\n" msgstr "titkos kulcs nem ll rendelkezsre" #: g10/card-util.c:90 #, c-format msgid "OpenPGP card no. %s detected\n" msgstr "" #: g10/card-util.c:98 g10/card-util.c:1773 g10/delkey.c:126 g10/keyedit.c:1518 #: g10/keygen.c:2757 g10/revoke.c:216 g10/revoke.c:454 #, fuzzy msgid "can't do this in batch mode\n" msgstr "Nem tudom ezt megcsinlni ktegelt mdban!\n" #: g10/card-util.c:106 #, fuzzy msgid "This command is only available for version 2 cards\n" msgstr "Ez a parancs %s mdban nem engedlyezett.\n" #: g10/card-util.c:141 g10/card-util.c:1458 g10/card-util.c:1568 #: g10/keyedit.c:424 g10/keyedit.c:445 g10/keyedit.c:459 g10/keygen.c:1433 #: g10/keygen.c:1514 msgid "Your selection? " msgstr "Mit vlaszt? " #: g10/card-util.c:272 g10/card-util.c:322 msgid "[not set]" msgstr "" #: g10/card-util.c:512 #, fuzzy msgid "male" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "female" msgstr "enable" #: g10/card-util.c:513 #, fuzzy msgid "unspecified" msgstr "Nincs megadva ok." #: g10/card-util.c:540 #, fuzzy msgid "not forced" msgstr "nem feldolgozott" #: g10/card-util.c:540 msgid "forced" msgstr "" #: g10/card-util.c:631 msgid "Error: Only plain ASCII is currently allowed.\n" msgstr "" #: g10/card-util.c:633 msgid "Error: The \"<\" character may not be used.\n" msgstr "" #: g10/card-util.c:635 msgid "Error: Double spaces are not allowed.\n" msgstr "" #: g10/card-util.c:652 msgid "Cardholder's surname: " msgstr "" #: g10/card-util.c:654 msgid "Cardholder's given name: " msgstr "" #: g10/card-util.c:672 #, c-format msgid "Error: Combined name too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:693 #, fuzzy msgid "URL to retrieve public key: " msgstr "Nincs hozz tartoz nyilvnos kulcs: %s\n" #: g10/card-util.c:701 #, c-format msgid "Error: URL too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:794 #, fuzzy, c-format msgid "error allocating enough memory: %s\n" msgstr "Hiba a(z) \"%s\" kulcskarika ltrehozsakor: %s\n" #: g10/card-util.c:806 g10/import.c:307 #, c-format msgid "error reading `%s': %s\n" msgstr "Hiba \"%s\" olvassakor: %s\n" #: g10/card-util.c:839 #, fuzzy, c-format msgid "error writing `%s': %s\n" msgstr "Hiba \"%s\" ltrehozsakor: %s\n" #: g10/card-util.c:866 msgid "Login data (account name): " msgstr "" #: g10/card-util.c:876 #, c-format msgid "Error: Login data too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:912 msgid "Private DO data: " msgstr "" #: g10/card-util.c:922 #, c-format msgid "Error: Private DO too long (limit is %d characters).\n" msgstr "" #: g10/card-util.c:1005 #, fuzzy msgid "Language preferences: " msgstr "preferencik frisstse" #: g10/card-util.c:1013 #, fuzzy msgid "Error: invalid length of preference string.\n" msgstr "rvnytelen karakter a preferencik kztt!\n" #: g10/card-util.c:1022 #, fuzzy msgid "Error: invalid characters in preference string.\n" msgstr "rvnytelen karakter a preferencik kztt!\n" #: g10/card-util.c:1044 msgid "Sex ((M)ale, (F)emale or space): " msgstr "" #: g10/card-util.c:1058 #, fuzzy msgid "Error: invalid response.\n" msgstr "Hiba: rvnytelen ujjlenyomat.\n" #: g10/card-util.c:1080 #, fuzzy msgid "CA fingerprint: " msgstr "megmutatja az ujjlenyomatot" #: g10/card-util.c:1103 #, fuzzy msgid "Error: invalid formatted fingerprint.\n" msgstr "Hiba: rvnytelen ujjlenyomat.\n" #: g10/card-util.c:1153 #, fuzzy, c-format msgid "key operation not possible: %s\n" msgstr "Kulcsgenerls sikertelen: %s\n" #: g10/card-util.c:1154 #, fuzzy msgid "not an OpenPGP card" msgstr "Nem talltam rvnyes OpenPGP adatot.\n" #: g10/card-util.c:1167 #, fuzzy, c-format msgid "error getting current key info: %s\n" msgstr "Hiba a(z) \"%s\" titkoskulcs-karika rsakor: %s.\n" #: g10/card-util.c:1254 msgid "Replace existing key? (y/N) " msgstr "" #: g10/card-util.c:1270 msgid "" "NOTE: There is no guarantee that the card supports the requested size.\n" " If the key generation does not succeed, please check the\n" " documentation of your card to see what sizes are allowed.\n" msgstr "" #: g10/card-util.c:1295 #, fuzzy, c-format msgid "What keysize do you want for the Signature key? (%u) " msgstr "Milyen kulcsmretet szeretne? (1024) " #: g10/card-util.c:1297 #, fuzzy, c-format msgid "What keysize do you want for the Encryption key? (%u) " msgstr "Milyen kulcsmretet szeretne? (1024) " #: g10/card-util.c:1298 #, fuzzy, c-format msgid "What keysize do you want for the Authentication key? (%u) " msgstr "Milyen kulcsmretet szeretne? (1024) " #: g10/card-util.c:1309 g10/keygen.c:1649 g10/keygen.c:1655 #, c-format msgid "rounded up to %u bits\n" msgstr "Felkerektve %u bitre.\n" #: g10/card-util.c:1317 g10/keygen.c:1636 #, c-format msgid "%s keysizes must be in the range %u-%u\n" msgstr "" #: g10/card-util.c:1322 #, c-format msgid "The card will now be re-configured to generate a key of %u bits\n" msgstr "" #: g10/card-util.c:1342 #, fuzzy, c-format msgid "error changing size of key %d to %u bits: %s\n" msgstr "Hiba \"%s\" titkoskulcs-blokk olvassakor: %s.\n" #: g10/card-util.c:1364 msgid "Make off-card backup of encryption key? (Y/n) " msgstr "" #: g10/card-util.c:1378 #, fuzzy msgid "NOTE: keys are already stored on the card!\n" msgstr "Kihagytam: titkos kulcs mr jelen van.\n" #: g10/card-util.c:1381 msgid "Replace existing keys? (y/N) " msgstr "" #: g10/card-util.c:1393 #, c-format msgid "" "Please note that the factory settings of the PINs are\n" " PIN = `%s' Admin PIN = `%s'\n" "You should change them using the command --change-pin\n" msgstr "" #: g10/card-util.c:1449 #, fuzzy msgid "Please select the type of key to generate:\n" msgstr "Krem, adja meg, milyen kulcsot kvn:\n" #: g10/card-util.c:1451 g10/card-util.c:1559 #, fuzzy msgid " (1) Signature key\n" msgstr "Az alrs lejrt: %s.\n" #: g10/card-util.c:1452 g10/card-util.c:1561 #, fuzzy msgid " (2) Encryption key\n" msgstr " (%d) RSA (csak titkosts)\n" #: g10/card-util.c:1453 g10/card-util.c:1563 msgid " (3) Authentication key\n" msgstr "" #: g10/card-util.c:1469 g10/card-util.c:1588 g10/keyedit.c:939 #: g10/keygen.c:1437 g10/keygen.c:1465 g10/keygen.c:1566 g10/revoke.c:681 msgid "Invalid selection.\n" msgstr "rvnytelen vlaszts.\n" #: g10/card-util.c:1556 #, fuzzy msgid "Please select where to store the key:\n" msgstr "Krem, vlassza ki a visszavons okt:\n" #: g10/card-util.c:1600 #, fuzzy msgid "unknown key protection algorithm\n" msgstr "Ismeretlen vdelmi algoritmus!\n" #: g10/card-util.c:1605 #, fuzzy msgid "secret parts of key are not available\n" msgstr "Az elsdleges kulcs titkos rszei nem elrhetk.\n" #: g10/card-util.c:1610 #, fuzzy msgid "secret key already stored on a card\n" msgstr "Kihagytam: titkos kulcs mr jelen van.\n" #: g10/card-util.c:1623 #, fuzzy, c-format msgid "error writing key to card: %s\n" msgstr "Hiba a \"%s\" kulcskarika rsakor: %s\n" #: g10/card-util.c:1682 g10/keyedit.c:1350 msgid "quit this menu" msgstr "kilps ebbl a menbl" #: g10/card-util.c:1684 #, fuzzy msgid "show admin commands" msgstr "Egymsnak ellentmond parancsok!\n" #: g10/card-util.c:1685 g10/keyedit.c:1353 msgid "show this help" msgstr "megmutatja ezt a sgt" #: g10/card-util.c:1687 #, fuzzy msgid "list all available data" msgstr "Kulcs tallhat: " #: g10/card-util.c:1690 msgid "change card holder's name" msgstr "" #: g10/card-util.c:1691 msgid "change URL to retrieve key" msgstr "" #: g10/card-util.c:1692 msgid "fetch the key specified in the card URL" msgstr "" #: g10/card-util.c:1693 #, fuzzy msgid "change the login name" msgstr "lejrat megvltoztatsa" #: g10/card-util.c:1694 #, fuzzy msgid "change the language preferences" msgstr "kulcstulajdonos megbzhatsgnak belltsa" #: g10/card-util.c:1695 msgid "change card holder's sex" msgstr "" #: g10/card-util.c:1696 #, fuzzy msgid "change a CA fingerprint" msgstr "megmutatja az ujjlenyomatot" #: g10/card-util.c:1697 msgid "toggle the signature force PIN flag" msgstr "" #: g10/card-util.c:1698 #, fuzzy msgid "generate new keys" msgstr "j kulcspr ltrehozsa" #: g10/card-util.c:1699 msgid "menu to change or unblock the PIN" msgstr "" #: g10/card-util.c:1700 msgid "verify the PIN and list all data" msgstr "" #: g10/card-util.c:1701 msgid "unblock the PIN using a Reset Code" msgstr "" #: g10/card-util.c:1823 msgid "gpg/card> " msgstr "" #: g10/card-util.c:1864 #, fuzzy msgid "Admin-only command\n" msgstr "Egymsnak ellentmond parancsok!\n" #: g10/card-util.c:1895 #, fuzzy msgid "Admin commands are allowed\n" msgstr "Egymsnak ellentmond parancsok!\n" #: g10/card-util.c:1897 #, fuzzy msgid "Admin commands are not allowed\n" msgstr "rom a titkos kulcsot a %s llomnyba.\n" #: g10/card-util.c:1988 g10/keyedit.c:2257 msgid "Invalid command (try \"help\")\n" msgstr "rvnytelen parancs! (Prblja a sgt: \"help\".)\n" #: g10/cardglue.c:457 #, fuzzy msgid "card reader not available\n" msgstr "titkos kulcs nem ll rendelkezsre" #: g10/cardglue.c:475 msgid "Please insert the card and hit return or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:487 #, fuzzy, c-format msgid "selecting openpgp failed: %s\n" msgstr "A kulcsblokk trlse sikertelen: %s.\n" #: g10/cardglue.c:614 #, c-format msgid "" "Please remove the current card and insert the one with serial number:\n" " %.*s\n" msgstr "" #: g10/cardglue.c:623 msgid "Hit return when ready or enter 'c' to cancel: " msgstr "" #: g10/cardglue.c:1013 msgid "Enter New Admin PIN: " msgstr "" #: g10/cardglue.c:1014 msgid "Enter New PIN: " msgstr "" #: g10/cardglue.c:1015 msgid "Enter Admin PIN: " msgstr "" #: g10/cardglue.c:1016 msgid "Enter PIN: " msgstr "" #: g10/cardglue.c:1033 #, fuzzy msgid "Repeat this PIN: " msgstr "Ismtelje meg a jelszt: " #: g10/cardglue.c:1048 #, fuzzy msgid "PIN not correctly repeated; try again" msgstr "Nem ismtelte meg helyesen a jelszt! Prblja jra!" #: g10/decrypt.c:67 g10/decrypt.c:158 g10/gpg.c:3973 g10/keyring.c:375 #: g10/keyring.c:684 g10/verify.c:101 g10/verify.c:156 #, c-format msgid "can't open `%s'\n" msgstr "Nem tudom megnyitni %s-t!\n" #: g10/decrypt.c:103 g10/encode.c:823 msgid "--output doesn't work for this command\n" msgstr "Az --output opci nem mkdik ehhez a parancshoz.\n" #: g10/delkey.c:73 g10/export.c:309 g10/keyedit.c:1539 g10/keyedit.c:3450 #: g10/keyserver.c:1884 g10/revoke.c:226 #, fuzzy, c-format msgid "key \"%s\" not found: %s\n" msgstr "\"%s\" kulcs nem tallhat: %s\n" #: g10/delkey.c:81 g10/export.c:339 g10/import.c:2512 g10/keyserver.c:1898 #: g10/revoke.c:232 g10/revoke.c:476 #, c-format msgid "error reading keyblock: %s\n" msgstr "Hiba a kulcsblokk olvassakor: %s\n" #: g10/delkey.c:127 g10/delkey.c:134 msgid "(unless you specify the key by fingerprint)\n" msgstr "(Kivve, ha megad egy kulcsot az ujjlenyomatval.)\n" #: g10/delkey.c:133 #, fuzzy msgid "can't do this in batch mode without \"--yes\"\n" msgstr "Nem tudom ezt megcsinlni ktegelt mdban \"--yes\" nlkl.\n" #: g10/delkey.c:145 #, fuzzy msgid "Delete this key from the keyring? (y/N) " msgstr "Trljem ezt a kulcsot a kulcskarikrl? " #: g10/delkey.c:153 #, fuzzy msgid "This is a secret key! - really delete? (y/N) " msgstr "Ez egy titkos kulcs! Valban trljem? " #: g10/delkey.c:163 #, c-format msgid "deleting keyblock failed: %s\n" msgstr "A kulcsblokk trlse sikertelen: %s.\n" #: g10/delkey.c:173 msgid "ownertrust information cleared\n" msgstr "Kulcstulajdonos megbzhatsgi adatait trltem.\n" #: g10/delkey.c:204 #, c-format msgid "there is a secret key for public key \"%s\"!\n" msgstr "Van egy titkos kulcs a \"%s\" nyilvnos kulcshoz!\n" #: g10/delkey.c:206 msgid "use option \"--delete-secret-keys\" to delete it first.\n" msgstr "Elszr azt trlje a \"--delete-secret-keys\" opcival!\n" #: g10/encode.c:211 g10/sign.c:1258 #, c-format msgid "error creating passphrase: %s\n" msgstr "Hiba a jelsz ltrehozsakor: %s.\n" #: g10/encode.c:216 msgid "can't use a symmetric ESK packet due to the S2K mode\n" msgstr "Nem tudok szimmetrikus ESK csomagot hasznlni a S2K md miatt!\n" #: g10/encode.c:229 #, c-format msgid "using cipher %s\n" msgstr "%s rejtjelezst hasznlok.\n" #: g10/encode.c:239 g10/encode.c:534 #, c-format msgid "`%s' already compressed\n" msgstr "\"%s\" mr tmrtett.\n" #: g10/encode.c:290 g10/encode.c:568 g10/sign.c:563 #, c-format msgid "WARNING: `%s' is an empty file\n" msgstr "FIGYELEM: A(z) \"%s\" llomny res.\n" #: g10/encode.c:454 msgid "you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode\n" msgstr "" "Csak 2048 bites, vagy rvidebb RSA kulcsokkal titkosthat --pgp2 mdban!\n" #: g10/encode.c:478 #, c-format msgid "reading from `%s'\n" msgstr "Olvasok a \"%s\" llomnybl.\n" #: g10/encode.c:506 msgid "" "unable to use the IDEA cipher for all of the keys you are encrypting to.\n" msgstr "Nem tudom az IDEA rejtjelezt hasznlni az sszes cmzett kulcshoz.\n" #: g10/encode.c:516 #, fuzzy, c-format msgid "" "WARNING: forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "A %s (%d) rejtjelez hasznlata srti a cmzett preferenciit!\n" #: g10/encode.c:612 g10/sign.c:935 #, fuzzy, c-format msgid "" "WARNING: forcing compression algorithm %s (%d) violates recipient " "preferences\n" msgstr "A %s (%d) tmrts hasznlata srti a cmzett preferenciit!\n" #: g10/encode.c:699 #, c-format msgid "forcing symmetric cipher %s (%d) violates recipient preferences\n" msgstr "A %s (%d) rejtjelez hasznlata srti a cmzett preferenciit!\n" #: g10/encode.c:769 g10/pkclist.c:805 g10/pkclist.c:858 #, c-format msgid "you may not use %s while in %s mode\n" msgstr "Lehet, hogy nem hasznlhatja %s-t %s mdban!\n" #: g10/encode.c:796 #, c-format msgid "%s/%s encrypted for: \"%s\"\n" msgstr "%s/%s titkostva \"%s\" szmra\n" #: g10/encr-data.c:89 g10/mainproc.c:296 #, c-format msgid "%s encrypted data\n" msgstr "%s titkostott adat.\n" #: g10/encr-data.c:91 g10/mainproc.c:300 #, c-format msgid "encrypted with unknown algorithm %d\n" msgstr "Ismeretlen algoritmussal (%d) titkostva.\n" #: g10/encr-data.c:134 msgid "" "WARNING: message was encrypted with a weak key in the symmetric cipher.\n" msgstr "" "FIGYELEM: Az zenet szimmetrikus titkostst gyenge kulccsal vgeztk.\n" #: g10/encr-data.c:145 msgid "problem handling encrypted packet\n" msgstr "Problma a titkostott csomag kezelsekor!\n" #: g10/exec.c:47 msgid "no remote program execution supported\n" msgstr "Kls program meghvsa nem tmogatott.\n" #: g10/exec.c:174 g10/openfile.c:468 #, c-format msgid "can't create directory `%s': %s\n" msgstr "Nem tudom a \"%s\" knyvtrat ltrehozni: %s.\n" #: g10/exec.c:315 msgid "" "external program calls are disabled due to unsafe options file permissions\n" msgstr "" "A kls programok hvsa tiltott, mert az \"options\" llomny engedlyei\n" "nem biztonsgosak.\n" #: g10/exec.c:345 #, fuzzy msgid "this platform requires temporary files when calling external programs\n" msgstr "" "Ez a platform tmeneti llomnyokat ignyel kls programok hvshoz.\n" #: g10/exec.c:423 #, fuzzy, c-format msgid "unable to execute program `%s': %s\n" msgstr "Nem tudom vgrehajtani a kvetkez \"%s\"-t: \"%s\": %s.\n" #: g10/exec.c:426 #, fuzzy, c-format msgid "unable to execute shell `%s': %s\n" msgstr "Nem tudom vgrehajtani a kvetkez \"%s\"-t: \"%s\": %s.\n" #: g10/exec.c:511 #, c-format msgid "system error while calling external program: %s\n" msgstr "Rendszerhiba kls program hvsakor: %s.\n" #: g10/exec.c:522 g10/exec.c:588 msgid "unnatural exit of external program\n" msgstr "A kls program nem termszetes mdon rt vget.\n" #: g10/exec.c:537 msgid "unable to execute external program\n" msgstr "Nem tudom a vgrehajtani a kls programot.\n" #: g10/exec.c:553 #, c-format msgid "unable to read external program response: %s\n" msgstr "Nem tudom beolvasni a kls program vlaszt: %s\n" #: g10/exec.c:599 g10/exec.c:606 #, c-format msgid "WARNING: unable to remove tempfile (%s) `%s': %s\n" msgstr "" "FIGYELEM: Nem tudom trlni az (\"%s\") tmeneti llomnyt: \"%s\": %s.\n" #: g10/exec.c:611 #, c-format msgid "WARNING: unable to remove temp directory `%s': %s\n" msgstr "FIGYELEM: nem tudom trlni a \"%s\" tmeneti knyvtrat: %s\n" #: g10/export.c:59 #, fuzzy msgid "export signatures that are marked as local-only" msgstr "" "\n" "Az alrst \"nem visszavonhatnak\" jelljk.\n" #: g10/export.c:61 msgid "export attribute user IDs (generally photo IDs)" msgstr "" #: g10/export.c:63 #, fuzzy msgid "export revocation keys marked as \"sensitive\"" msgstr "Nem talltam visszavon kulcsot a kvetkezhz: \"%s\".\n" #: g10/export.c:65 #, fuzzy msgid "remove the passphrase from exported subkeys" msgstr "msodlagos kulcs visszavonsa" #: g10/export.c:67 #, fuzzy msgid "remove unusable parts from key during export" msgstr "hasznlhatatlan titkos kulcs" #: g10/export.c:69 msgid "remove as much as possible from key during export" msgstr "" #: g10/export.c:323 #, fuzzy msgid "exporting secret keys not allowed\n" msgstr "rom a titkos kulcsot a %s llomnyba.\n" #: g10/export.c:352 #, fuzzy, c-format msgid "key %s: not protected - skipped\n" msgstr "%08lX kulcs: nem vdett - kihagytam.\n" #: g10/export.c:360 #, fuzzy, c-format msgid "key %s: PGP 2.x style key - skipped\n" msgstr "%08lX kulcs: PGP 2.x stlus kulcs - kihagytam.\n" #: g10/export.c:371 #, fuzzy, c-format msgid "key %s: key material on-card - skipped\n" msgstr "%08lX kulcs: Alkulcsalrs rossz helyen - kihagytam.\n" #: g10/export.c:519 msgid "about to export an unprotected subkey\n" msgstr "" #: g10/export.c:542 #, fuzzy, c-format msgid "failed to unprotect the subkey: %s\n" msgstr "Bizalmi adatbzis (%s) inicializlsa sikertelen!\n" #: g10/export.c:563 #, fuzzy, c-format msgid "WARNING: secret key %s does not have a simple SK checksum\n" msgstr "FIGYELEM: %08lX titkos kulcsnak nincs egyszer SK ellenrzsszege.\n" #: g10/export.c:596 msgid "WARNING: nothing exported\n" msgstr "FIGYELEM: Semmit sem exportltam.\n" #: g10/gpg.c:388 msgid "" "@Commands:\n" " " msgstr "" "@Parancsok:\n" " " #: g10/gpg.c:390 msgid "|[file]|make a signature" msgstr "|[fjl]|alrs ksztse" #: g10/gpg.c:391 msgid "|[file]|make a clear text signature" msgstr "|[fjl]|olvashat szveg alrsa" #: g10/gpg.c:392 msgid "make a detached signature" msgstr "klnll alrs ksztse" #: g10/gpg.c:393 msgid "encrypt data" msgstr "adat titkostsa" #: g10/gpg.c:395 msgid "encryption only with symmetric cipher" msgstr "titkosts csak szimmetrikus rejtjelezvel" #: g10/gpg.c:397 msgid "decrypt data (default)" msgstr "adat visszafejtse (alaprtelmezs)" #: g10/gpg.c:399 msgid "verify a signature" msgstr "alrs ellenrzse" #: g10/gpg.c:401 msgid "list keys" msgstr "kulcsok listzsa" #: g10/gpg.c:403 msgid "list keys and signatures" msgstr "kulcsok s alrsok listzsa" #: g10/gpg.c:404 #, fuzzy msgid "list and check key signatures" msgstr "kulcsalrsok ellenrzse" #: g10/gpg.c:405 msgid "list keys and fingerprints" msgstr "kulcsok s ujjlenyomatok listzsa" #: g10/gpg.c:406 msgid "list secret keys" msgstr "titkos kulcsok listzsa" #: g10/gpg.c:407 msgid "generate a new key pair" msgstr "j kulcspr ltrehozsa" #: g10/gpg.c:408 msgid "remove keys from the public keyring" msgstr "kulcsok eltvoltsa a nyilvnoskulcs-karikrl" #: g10/gpg.c:410 msgid "remove keys from the secret keyring" msgstr "kulcsok eltvoltsa a titkoskulcs-karikrl" #: g10/gpg.c:411 msgid "sign a key" msgstr "kulcs alrsa" #: g10/gpg.c:412 msgid "sign a key locally" msgstr "kulcs alrsa helyileg" #: g10/gpg.c:413 msgid "sign or edit a key" msgstr "kulcs alrsa vagy szerkesztse" #: g10/gpg.c:414 msgid "generate a revocation certificate" msgstr "visszavonsi igazols ksztse" #: g10/gpg.c:416 msgid "export keys" msgstr "kulcsok exportlsa" #: g10/gpg.c:417 msgid "export keys to a key server" msgstr "kulcsok exportlsa kulcsszerverre" #: g10/gpg.c:418 msgid "import keys from a key server" msgstr "kulcsok importlsa kulcsszerverrl" #: g10/gpg.c:420 msgid "search for keys on a key server" msgstr "kulcsok keresse kulcsszerveren" #: g10/gpg.c:422 msgid "update all keys from a keyserver" msgstr "minden kulcs frisstse kulcsszerverrl" #: g10/gpg.c:426 msgid "import/merge keys" msgstr "kulcsok importlsa/sszefzse" #: g10/gpg.c:429 msgid "print the card status" msgstr "" #: g10/gpg.c:430 msgid "change data on a card" msgstr "" #: g10/gpg.c:431 msgid "change a card's PIN" msgstr "" #: g10/gpg.c:440 msgid "update the trust database" msgstr "bizalmi adatbzis frisstse" #: g10/gpg.c:447 msgid "|algo [files]|print message digests" msgstr "|algo [fjlok]|zenet kivonatnak kirsa" #: g10/gpg.c:451 g10/gpgv.c:69 msgid "" "@\n" "Options:\n" " " msgstr "" "@\n" "Opcik:\n" " " #: g10/gpg.c:453 msgid "create ascii armored output" msgstr "ascii pnclozott kimenet ltrehozsa" #: g10/gpg.c:455 msgid "|NAME|encrypt for NAME" msgstr "|NV|titkosts NV rszre" #: g10/gpg.c:466 msgid "use this user-id to sign or decrypt" msgstr "felh. azonost alrshoz s visszafejtshez" #: g10/gpg.c:467 msgid "|N|set compress level N (0 disables)" msgstr "|N|tmrtsi szint belltsa N-re (0: tilts)" #: g10/gpg.c:472 msgid "use canonical text mode" msgstr "kanonikus szveges md hasznlata" #: g10/gpg.c:486 msgid "use as output file" msgstr "kimeneti llomny megadsa" #: g10/gpg.c:488 g10/gpgv.c:71 msgid "verbose" msgstr "bbeszd md" #: g10/gpg.c:499 msgid "do not make any changes" msgstr "ne csinljon semmi vltoztatst" #: g10/gpg.c:500 msgid "prompt before overwriting" msgstr "fellrs eltt rkrdezs" #: g10/gpg.c:543 msgid "use strict OpenPGP behavior" msgstr "" #: g10/gpg.c:544 msgid "generate PGP 2.x compatible messages" msgstr "" #: g10/gpg.c:573 msgid "" "@\n" "(See the man page for a complete listing of all commands and options)\n" msgstr "" "@\n" "(A parancsok s opcik teljes listjt a man oldalon tekintheti meg.)\n" #: g10/gpg.c:576 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" "Pldk:\n" "\n" " -se -r Bob [fjl] titkosts s alrs Bob rszre\n" " --clearsign [fjl] olvashat szveg alrsa\n" " --detach-sign [fjl] klnll alrs ksztse\n" " --list-keys [nevek] kulcsok kiratsa\n" " --fingerprint [nevek] ujjlenyomatok kiratsa\n" #: g10/gpg.c:781 g10/gpgv.c:97 msgid "Please report bugs to .\n" msgstr "A hibkat (angolul) a cmre rja meg!\n" #: g10/gpg.c:798 msgid "Usage: gpg [options] [files] (-h for help)" msgstr "Hasznlat: gpg [opcik] [fjlok] (-h a sghoz)" #: g10/gpg.c:801 msgid "" "Syntax: gpg [options] [files]\n" "Sign, check, encrypt or decrypt\n" "Default operation depends on the input data\n" msgstr "" "Szintaxis: gpg [opcik] [fjlok]\n" "Alrs, ellenrzs, titkosts vagy visszafejts.\n" "Az alaprtelmezett mvelet a bemeneti adattl fgg.\n" #: g10/gpg.c:812 msgid "" "\n" "Supported algorithms:\n" msgstr "" "\n" "Tmogatott algoritmusok:\n" #: g10/gpg.c:815 msgid "Pubkey: " msgstr "Nyilvnos kulcs (pubkey): " #: g10/gpg.c:821 g10/keyedit.c:2323 msgid "Cipher: " msgstr "Rejtjelez (cipher): " #: g10/gpg.c:827 msgid "Hash: " msgstr "Kivonatol (hash): " #: g10/gpg.c:833 g10/keyedit.c:2369 msgid "Compression: " msgstr "Tmrt (compression): " #: g10/gpg.c:912 msgid "usage: gpg [options] " msgstr "Hasznlat: gpg [opcik] " #: g10/gpg.c:1060 msgid "conflicting commands\n" msgstr "Egymsnak ellentmond parancsok!\n" #: g10/gpg.c:1078 #, fuzzy, c-format msgid "no = sign found in group definition `%s'\n" msgstr "Nem talltam = jelet a \"%s\" csoportdefinciban!\n" #: g10/gpg.c:1264 #, fuzzy, c-format msgid "WARNING: unsafe ownership on homedir `%s'\n" msgstr "FIGYELEM: Nem biztonsgos tulajdonos: %s \"%s\"\n" #: g10/gpg.c:1267 #, fuzzy, c-format msgid "WARNING: unsafe ownership on configuration file `%s'\n" msgstr "FIGYELEM: Nem biztonsgos tulajdonos: %s \"%s\"\n" #: g10/gpg.c:1273 #, fuzzy, c-format msgid "WARNING: unsafe permissions on homedir `%s'\n" msgstr "FIGYELEM: nem biztonsgos engedlyek: %s \"%s\"\n" #: g10/gpg.c:1276 #, fuzzy, c-format msgid "WARNING: unsafe permissions on configuration file `%s'\n" msgstr "FIGYELEM: nem biztonsgos engedlyek: %s \"%s\"\n" #: g10/gpg.c:1282 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory ownership on homedir `%s'\n" msgstr "FIGYELEM: nem biztonsgos knyvtrtulajdonos: %s \"%s\"\n" #: g10/gpg.c:1285 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory ownership on configuration file `%s'\n" msgstr "FIGYELEM: nem biztonsgos knyvtrtulajdonos: %s \"%s\"\n" #: g10/gpg.c:1291 #, fuzzy, c-format msgid "WARNING: unsafe enclosing directory permissions on homedir `%s'\n" msgstr "FIGYELEM: nem biztonsgos knyvtrengedlyek: %s \"%s\"\n" #: g10/gpg.c:1294 #, fuzzy, c-format msgid "" "WARNING: unsafe enclosing directory permissions on configuration file `%s'\n" msgstr "FIGYELEM: nem biztonsgos knyvtrengedlyek: %s \"%s\"\n" #: g10/gpg.c:1469 #, fuzzy, c-format msgid "unknown configuration item `%s'\n" msgstr "\"%s\": ismeretlen konfigurcis elem.\n" #: g10/gpg.c:1562 msgid "display photo IDs during key listings" msgstr "" #: g10/gpg.c:1564 msgid "show policy URLs during signature listings" msgstr "" #: g10/gpg.c:1566 #, fuzzy msgid "show all notations during signature listings" msgstr "Nincs megfelel alrs a titkoskulcs-karikn.\n" #: g10/gpg.c:1568 msgid "show IETF standard notations during signature listings" msgstr "" #: g10/gpg.c:1572 msgid "show user-supplied notations during signature listings" msgstr "" #: g10/gpg.c:1574 #, fuzzy msgid "show preferred keyserver URLs during signature listings" msgstr "A megadott alrsi eljrsmd URL-je rvnytelen!\n" #: g10/gpg.c:1576 msgid "show user ID validity during key listings" msgstr "" #: g10/gpg.c:1578 msgid "show revoked and expired user IDs in key listings" msgstr "" #: g10/gpg.c:1580 msgid "show revoked and expired subkeys in key listings" msgstr "" #: g10/gpg.c:1582 #, fuzzy msgid "show the keyring name in key listings" msgstr "mutatja a kilistzott kulcs kulcskarikjt is" #: g10/gpg.c:1584 #, fuzzy msgid "show expiration dates during signature listings" msgstr "Nincs megfelel alrs a titkoskulcs-karikn.\n" #: g10/gpg.c:1786 #, c-format msgid "NOTE: old default options file `%s' ignored\n" msgstr "MEGJEGYZS: Figyelmen kvl hagytam a rgi opcikat (%s).\n" #: g10/gpg.c:2053 #, c-format msgid "NOTE: no default option file `%s'\n" msgstr "MEGJEGYZS: Nincs alaprtelmezett opcis fjl (%s).\n" #: g10/gpg.c:2057 #, c-format msgid "option file `%s': %s\n" msgstr "\"%s\" opcis fjl: %s\n" #: g10/gpg.c:2064 #, c-format msgid "reading options from `%s'\n" msgstr "Az opcikat a \"%s\" llomnybl olvasom.\n" #: g10/gpg.c:2290 g10/gpg.c:2961 g10/gpg.c:2980 #, c-format msgid "NOTE: %s is not for normal use!\n" msgstr "MEGJEGYZS: %s nem norml hasznlatra van!\n" #: g10/gpg.c:2480 g10/gpg.c:2492 #, fuzzy, c-format msgid "`%s' is not a valid signature expiration\n" msgstr "%s nem rvnyes karakterkioszts!\n" #: g10/gpg.c:2569 #, fuzzy, c-format msgid "`%s' is not a valid character set\n" msgstr "%s nem rvnyes karakterkioszts!\n" #: g10/gpg.c:2593 g10/gpg.c:2781 g10/keyedit.c:4144 #, fuzzy msgid "could not parse keyserver URL\n" msgstr "rtelmezhetetlen a kulcsszerver URI-ja!\n" #: g10/gpg.c:2605 #, fuzzy, c-format msgid "%s:%d: invalid keyserver options\n" msgstr "%s:%d: rvnytelen export opcik!\n" #: g10/gpg.c:2608 #, fuzzy msgid "invalid keyserver options\n" msgstr "rvnytelen export opcik!\n" #: g10/gpg.c:2615 #, c-format msgid "%s:%d: invalid import options\n" msgstr "%s:%d: rvnytelen import opcik!\n" #: g10/gpg.c:2618 msgid "invalid import options\n" msgstr "rvnytelen import opcik!\n" #: g10/gpg.c:2625 #, c-format msgid "%s:%d: invalid export options\n" msgstr "%s:%d: rvnytelen export opcik!\n" #: g10/gpg.c:2628 msgid "invalid export options\n" msgstr "rvnytelen export opcik!\n" #: g10/gpg.c:2635 #, fuzzy, c-format msgid "%s:%d: invalid list options\n" msgstr "%s:%d: rvnytelen import opcik!\n" #: g10/gpg.c:2638 #, fuzzy msgid "invalid list options\n" msgstr "rvnytelen import opcik!\n" #: g10/gpg.c:2646 msgid "display photo IDs during signature verification" msgstr "" #: g10/gpg.c:2648 msgid "show policy URLs during signature verification" msgstr "" #: g10/gpg.c:2650 #, fuzzy msgid "show all notations during signature verification" msgstr "%s nem rvnyes karakterkioszts!\n" #: g10/gpg.c:2652 msgid "show IETF standard notations during signature verification" msgstr "" #: g10/gpg.c:2656 msgid "show user-supplied notations during signature verification" msgstr "" #: g10/gpg.c:2658 #, fuzzy msgid "show preferred keyserver URLs during signature verification" msgstr "A megadott alrsi eljrsmd URL-je rvnytelen!\n" #: g10/gpg.c:2660 #, fuzzy msgid "show user ID validity during signature verification" msgstr "%s nem rvnyes karakterkioszts!\n" #: g10/gpg.c:2662 msgid "show revoked and expired user IDs in signature verification" msgstr "" #: g10/gpg.c:2664 #, fuzzy msgid "show only the primary user ID in signature verification" msgstr "%s nem rvnyes karakterkioszts!\n" #: g10/gpg.c:2666 msgid "validate signatures with PKA data" msgstr "" #: g10/gpg.c:2668 msgid "elevate the trust of signatures with valid PKA data" msgstr "" #: g10/gpg.c:2675 #, fuzzy, c-format msgid "%s:%d: invalid verify options\n" msgstr "%s:%d: rvnytelen export opcik!\n" #: g10/gpg.c:2678 #, fuzzy msgid "invalid verify options\n" msgstr "rvnytelen export opcik!\n" #: g10/gpg.c:2685 #, c-format msgid "unable to set exec-path to %s\n" msgstr "Nem tudom a vgrehajtsi elrsi utat %s rtkre lltani!\n" #: g10/gpg.c:2850 #, fuzzy, c-format msgid "%s:%d: invalid auto-key-locate list\n" msgstr "%s:%d: rvnytelen export opcik!\n" #: g10/gpg.c:2853 msgid "invalid auto-key-locate list\n" msgstr "" #: g10/gpg.c:2950 msgid "WARNING: program may create a core file!\n" msgstr "FIGYELEM: A program core llomnyt hozhat ltre!\n" #: g10/gpg.c:2954 #, c-format msgid "WARNING: %s overrides %s\n" msgstr "FIGYELEM: %s hatstalantja %s-t!\n" #: g10/gpg.c:2963 #, c-format msgid "%s not allowed with %s!\n" msgstr "%s s %s nem hasznlhat egytt!\n" #: g10/gpg.c:2966 #, c-format msgid "%s makes no sense with %s!\n" msgstr "%s rtelmetlen %s mellett!\n" #: g10/gpg.c:2973 #, fuzzy, c-format msgid "NOTE: %s is not available in this version\n" msgstr "GPG gynk nem elrhet ebben a munkafolyamatban.\n" #: g10/gpg.c:2988 #, fuzzy, c-format msgid "will not run with insecure memory due to %s\n" msgstr "rom a titkos kulcsot a %s llomnyba.\n" #: g10/gpg.c:3002 msgid "you can only make detached or clear signatures while in --pgp2 mode\n" msgstr "Csak klnll s olvashatszveg-alrst kszthet --pgp2 mdban!\n" #: g10/gpg.c:3008 msgid "you can't sign and encrypt at the same time while in --pgp2 mode\n" msgstr "Nem rhat al s titkosthat egyszerre --pgp2 mdban!\n" #: g10/gpg.c:3014 msgid "you must use files (and not a pipe) when working with --pgp2 enabled.\n" msgstr "Csak llomnyokat (pipe-ot nem) hasznlhat --pgp2 mdban!\n" #: g10/gpg.c:3027 msgid "encrypting a message in --pgp2 mode requires the IDEA cipher\n" msgstr "zenet titkostsa --pgp2 mdban IDEA rejtjelezt ignyel!\n" #: g10/gpg.c:3091 g10/gpg.c:3115 msgid "selected cipher algorithm is invalid\n" msgstr "A kivlasztott rejtjelez algoritmus rvnytelen!\n" #: g10/gpg.c:3097 g10/gpg.c:3121 msgid "selected digest algorithm is invalid\n" msgstr "A kivlasztott kivonatol algoritmus rvnytelen!\n" #: g10/gpg.c:3103 #, fuzzy msgid "selected compression algorithm is invalid\n" msgstr "A kivlasztott rejtjelez algoritmus rvnytelen!\n" #: g10/gpg.c:3109 msgid "selected certification digest algorithm is invalid\n" msgstr "Az igazolshoz kivlasztott kivonatol algoritmus rvnytelen!\n" #: g10/gpg.c:3124 msgid "completes-needed must be greater than 0\n" msgstr "completes-needed nagyobb kell legyen 0-nl!\n" #: g10/gpg.c:3126 msgid "marginals-needed must be greater than 1\n" msgstr "marginals-needed nagyobb kell legyen 1-nl!\n" #: g10/gpg.c:3128 #, fuzzy msgid "max-cert-depth must be in the range from 1 to 255\n" msgstr "max-cert-depth 1 s 255 kz kell essen!\n" #: g10/gpg.c:3130 msgid "invalid default-cert-level; must be 0, 1, 2, or 3\n" msgstr "rvnytelen default-cert-level; 0, 1, 2 vagy 3 lehet.\n" #: g10/gpg.c:3132 msgid "invalid min-cert-level; must be 1, 2, or 3\n" msgstr "rvnytelen min-cert-level; 0, 1, 2 vagy 3 lehet.\n" #: g10/gpg.c:3135 msgid "NOTE: simple S2K mode (0) is strongly discouraged\n" msgstr "MEGJEGYZS: Egyszer S2K md (0) ersen ellenjavallt!\n" #: g10/gpg.c:3139 msgid "invalid S2K mode; must be 0, 1 or 3\n" msgstr "rvnytelen S2K md; 0, 1 vagy 3 lehet.\n" #: g10/gpg.c:3146 msgid "invalid default preferences\n" msgstr "rvnytelen alaprtelmezett preferencik!\n" #: g10/gpg.c:3150 msgid "invalid personal cipher preferences\n" msgstr "rvnytelen szemlyes rejtjelez-preferencik!\n" #: g10/gpg.c:3154 msgid "invalid personal digest preferences\n" msgstr "rvnytelen szemlyes kivonatolpreferencik!\n" #: g10/gpg.c:3158 msgid "invalid personal compress preferences\n" msgstr "rvnytelen szemlyes tmrtpreferencik!\n" #: g10/gpg.c:3191 #, c-format msgid "%s does not yet work with %s\n" msgstr "%s s %s egyelre nem hasznlhat egytt!\n" #: g10/gpg.c:3238 #, fuzzy, c-format msgid "you may not use cipher algorithm `%s' while in %s mode\n" msgstr "" "Lehet, hogy nem hasznlhatja \"%s\" rejtjelez algoritmust %s mdban!\n" #: g10/gpg.c:3243 #, fuzzy, c-format msgid "you may not use digest algorithm `%s' while in %s mode\n" msgstr "" "Lehet, hogy nem hasznlhatja \"%s\" kivonatol algoritmust %s mdban!\n" #: g10/gpg.c:3248 #, fuzzy, c-format msgid "you may not use compression algorithm `%s' while in %s mode\n" msgstr "Lehet, hogy nem hasznlhatja \"%s\" tmrt algoritmust %s mdban!\n" #: g10/gpg.c:3357 #, c-format msgid "failed to initialize the TrustDB: %s\n" msgstr "Bizalmi adatbzis (%s) inicializlsa sikertelen!\n" #: g10/gpg.c:3368 msgid "WARNING: recipients (-r) given without using public key encryption\n" msgstr "" "FIGYELEM: Cmzett megadva (-r), de nincs nyilvnos kulcs titkosts!\n" #: g10/gpg.c:3379 msgid "--store [filename]" msgstr "--store [fjlnv]" #: g10/gpg.c:3386 msgid "--symmetric [filename]" msgstr "--symmetric [fjlnv]" #: g10/gpg.c:3388 #, fuzzy, c-format msgid "symmetric encryption of `%s' failed: %s\n" msgstr "Visszafejts sikertelen: %s.\n" #: g10/gpg.c:3398 msgid "--encrypt [filename]" msgstr "--encrypt [fjlnv]" #: g10/gpg.c:3411 #, fuzzy msgid "--symmetric --encrypt [filename]" msgstr "--sign --encrypt [fjlnv]" #: g10/gpg.c:3413 msgid "you cannot use --symmetric --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3416 #, fuzzy, c-format msgid "you cannot use --symmetric --encrypt while in %s mode\n" msgstr "Lehet, hogy nem hasznlhatja %s-t %s mdban!\n" #: g10/gpg.c:3434 msgid "--sign [filename]" msgstr "--sign [fjlnv]" #: g10/gpg.c:3447 msgid "--sign --encrypt [filename]" msgstr "--sign --encrypt [fjlnv]" #: g10/gpg.c:3462 #, fuzzy msgid "--symmetric --sign --encrypt [filename]" msgstr "--sign --encrypt [fjlnv]" #: g10/gpg.c:3464 msgid "you cannot use --symmetric --sign --encrypt with --s2k-mode 0\n" msgstr "" #: g10/gpg.c:3467 #, fuzzy, c-format msgid "you cannot use --symmetric --sign --encrypt while in %s mode\n" msgstr "Lehet, hogy nem hasznlhatja %s-t %s mdban!\n" #: g10/gpg.c:3487 msgid "--sign --symmetric [filename]" msgstr "--sign --symmetric [fjlnv]" #: g10/gpg.c:3496 msgid "--clearsign [filename]" msgstr "--clearsign [fjlnv]" #: g10/gpg.c:3521 msgid "--decrypt [filename]" msgstr "--decrypt [fjlnv]" #: g10/gpg.c:3529 msgid "--sign-key user-id" msgstr "--sign-key felh-azonost" #: g10/gpg.c:3533 msgid "--lsign-key user-id" msgstr "--lsign-key felh-azonost" #: g10/gpg.c:3554 msgid "--edit-key user-id [commands]" msgstr "--edit-key felh-azonost [parancsok]" #: g10/gpg.c:3625 msgid "-k[v][v][v][c] [user-id] [keyring]" msgstr "-k[v][v][v][c] [felh-azonost] [kulcskarika]" #: g10/gpg.c:3667 #, c-format msgid "keyserver send failed: %s\n" msgstr "Klds a kulcsszerverre sikertelen: %s\n" #: g10/gpg.c:3669 #, c-format msgid "keyserver receive failed: %s\n" msgstr "Vtel a kulcsszerverrl sikertelen: %s\n" #: g10/gpg.c:3671 #, c-format msgid "key export failed: %s\n" msgstr "Kulcsexportls sikertelen: %s\n" #: g10/gpg.c:3682 #, c-format msgid "keyserver search failed: %s\n" msgstr "Keress a kulcsszerveren sikertelen: %s\n" #: g10/gpg.c:3692 #, c-format msgid "keyserver refresh failed: %s\n" msgstr "Frissts a kulcsszerverrl sikertelen: %s\n" #: g10/gpg.c:3743 #, c-format msgid "dearmoring failed: %s\n" msgstr "Pncl eltvoltsa nem sikerlt: %s\n" #: g10/gpg.c:3751 #, c-format msgid "enarmoring failed: %s\n" msgstr "Pnclozs nem sikerlt: %s\n" #: g10/gpg.c:3838 #, c-format msgid "invalid hash algorithm `%s'\n" msgstr "rvnytelen kivonatol algoritmus: %s\n" #: g10/gpg.c:3959 msgid "[filename]" msgstr "[fjlnv]" #: g10/gpg.c:3963 msgid "Go ahead and type your message ...\n" msgstr "Kezdheti gpelni az zenetet...\n" #: g10/gpg.c:4267 msgid "the given certification policy URL is invalid\n" msgstr "A megadott igazolsi eljrsmd URL-je rvnytelen!\n" #: g10/gpg.c:4269 msgid "the given signature policy URL is invalid\n" msgstr "A megadott alrsi eljrsmd URL-je rvnytelen!\n" #: g10/gpg.c:4302 #, fuzzy msgid "the given preferred keyserver URL is invalid\n" msgstr "A megadott alrsi eljrsmd URL-je rvnytelen!\n" #: g10/getkey.c:151 msgid "too many entries in pk cache - disabled\n" msgstr "Tl sok bejegyzs van a nyilvnoskulcs-gyorsttrban - letiltom.\n" #: g10/getkey.c:174 #, fuzzy msgid "[User ID not found]" msgstr "[ismeretlen kulcs]" #: g10/getkey.c:510 g10/getkey.c:2764 #, fuzzy, c-format msgid "key %s: secret key without public key - skipped\n" msgstr "%08lX kulcs: titkos kulcs nyilvnos kulcs nlkl - kihagytam.\n" #: g10/getkey.c:1001 g10/getkey.c:1011 g10/getkey.c:1021 g10/getkey.c:1037 #: g10/getkey.c:1052 #, c-format msgid "automatically retrieved `%s' via %s\n" msgstr "" #: g10/getkey.c:1890 #, fuzzy, c-format msgid "Invalid key %s made valid by --allow-non-selfsigned-uid\n" msgstr "" "%08lX rvnytelen kulcsot rvnyestettk az\n" "--allow-non-selfsigned-uid opcival.\n" #: g10/getkey.c:2496 g10/keyedit.c:3786 #, fuzzy, c-format msgid "no secret subkey for public subkey %s - ignoring\n" msgstr "" "Nincs titkos alkulcs a %08lX nyilvnos alkulcshoz - figyelmen kvl hagyom.\n" #: g10/getkey.c:2717 #, fuzzy, c-format msgid "using subkey %s instead of primary key %s\n" msgstr "A %08lX msodlagos kulcsot hasznljuk a %08lX elsdleges helyett.\n" #: g10/gpgv.c:72 msgid "be somewhat more quiet" msgstr "mg szkszavbb md" #: g10/gpgv.c:73 msgid "take the keys from this keyring" msgstr "a megadott kulcskarikrl vegye a kulcsokat" #: g10/gpgv.c:75 msgid "make timestamp conflicts only a warning" msgstr "idblyeg-konfliktus esetn csak figyelmeztessen" #: g10/gpgv.c:76 msgid "|FD|write status info to this FD" msgstr "|L|llapotinformcik rsa L llomnylerra" #: g10/gpgv.c:101 msgid "Usage: gpgv [options] [files] (-h for help)" msgstr "Hasznlat: gpgv [opcik] [fjlok] (-h a sghoz)" #: g10/gpgv.c:104 #, fuzzy msgid "" "Syntax: gpgv [options] [files]\n" "Check signatures against known trusted keys\n" msgstr "" "Szintaxis: gpg [opcik] [fjlok]\n" "Ellenrzi az alrsokat az ismert, megbzhat kulcsok segtsgvel.\n" #: g10/helptext.c:47 msgid "" "It's up to you to assign a value here; this value will never be exported\n" "to any 3rd party. We need it to implement the web-of-trust; it has nothing\n" "to do with the (implicitly created) web-of-certificates." msgstr "" "Az n dntsn mlik, hogy milyen rtket ad meg itt. Ezt az rtket soha\n" "nem exportljuk msok rszre. Ez a bizalmak hlzathoz (web-of-trust)\n" "szksges, semmi kze az igazolsok hlzathoz (web-of-certificates)." #: g10/helptext.c:53 msgid "" "To build the Web-of-Trust, GnuPG needs to know which keys are\n" "ultimately trusted - those are usually the keys for which you have\n" "access to the secret key. Answer \"yes\" to set this key to\n" "ultimately trusted\n" msgstr "" "Hogy a bizalmak hlzatt felptsk, a GnuPG-nek tudnia kell, hogy\n" "mely kulcsok alapveten megbzhatak - ltalban ezek azok a kulcsok,\n" "melyek titkos kulcshoz hozzfr. Vlaszoljon \"igen\"-nel, ha kulcsot\n" "alapveten megbzhatnak jelli!\n" #: g10/helptext.c:60 msgid "If you want to use this untrusted key anyway, answer \"yes\"." msgstr "" "Ha mgis hasznlni akarja ezt a kulcsot, melyben nem bzunk,\n" "vlaszoljon \"igen\"-nel!" #: g10/helptext.c:64 msgid "" "Enter the user ID of the addressee to whom you want to send the message." msgstr "Adja meg a cmzett felhasznli azonostjt!" #: g10/helptext.c:68 msgid "" "Select the algorithm to use.\n" "\n" "DSA (aka DSS) is the Digital Signature Algorithm and can only be used\n" "for signatures.\n" "\n" "Elgamal is an encrypt-only algorithm.\n" "\n" "RSA may be used for signatures or encryption.\n" "\n" "The first (primary) key must always be a key which is capable of signing." msgstr "" #: g10/helptext.c:82 msgid "" "In general it is not a good idea to use the same key for signing and\n" "encryption. This algorithm should only be used in certain domains.\n" "Please consult your security expert first." msgstr "" "ltalban nem j tlet ugyanazt a kulcsot hasznlni alrshoz s\n" "titkostshoz. Ezt az algoritmust csak bizonyos terleteken ajnlatos\n" "hasznlni. Krem, elszr konzultljon a biztonsgi szakrtjvel!" #: g10/helptext.c:89 msgid "Enter the size of the key" msgstr "Adja meg a kulcs mrett!" #: g10/helptext.c:93 g10/helptext.c:98 g10/helptext.c:110 g10/helptext.c:142 #: g10/helptext.c:170 g10/helptext.c:175 g10/helptext.c:180 msgid "Answer \"yes\" or \"no\"" msgstr "Krem, adjon \"igen\" vagy \"nem\" vlaszt!" #: g10/helptext.c:103 msgid "" "Enter the required value as shown in the prompt.\n" "It is possible to enter a ISO date (YYYY-MM-DD) but you won't\n" "get a good error response - instead the system tries to interpret\n" "the given value as an interval." msgstr "" "Adja meg a szksges rtket, ahogy a prompt mutatja!\n" "Lehetsges ISO dtumot is berni (-HH-NN), de nem fog rendes\n" "hibazenetet kapni, hanem a rendszer megprblja az rtket\n" "intervallumknt rtelmezni." #: g10/helptext.c:115 msgid "Enter the name of the key holder" msgstr "Adja meg a kulcs tulajdonosnak a nevt!" #: g10/helptext.c:120 msgid "please enter an optional but highly suggested email address" msgstr "Krem, adjon meg egy opcionlis, de nagyon ajnlott e-mail cmet!" #: g10/helptext.c:124 msgid "Please enter an optional comment" msgstr "Krem, adjon meg egy opcionlis megjegyzst!" #: g10/helptext.c:129 msgid "" "N to change the name.\n" "C to change the comment.\n" "E to change the email address.\n" "O to continue with key generation.\n" "Q to quit the key generation." msgstr "" "N nv vltoztatsa\n" "M megjegyzs vltoztatsa\n" "E e-mail vltoztatsa\n" "R kulcsgenerls folytatsa\n" "Q kilps a kulcsgenerlsbl" #: g10/helptext.c:138 msgid "Answer \"yes\" (or just \"y\") if it is okay to generate the sub key." msgstr "" "Vlaszoljon \"igen\"-nel (vagy csak \"i\"-vel), ha kezdhetjk az alkulcs\n" "ltrehozst!" #: g10/helptext.c:146 msgid "" "When you sign a user ID on a key, you should first verify that the key\n" "belongs to the person named in the user ID. It is useful for others to\n" "know how carefully you verified this.\n" "\n" "\"0\" means you make no particular claim as to how carefully you verified " "the\n" " key.\n" "\n" "\"1\" means you believe the key is owned by the person who claims to own it\n" " but you could not, or did not verify the key at all. This is useful " "for\n" " a \"persona\" verification, where you sign the key of a pseudonymous " "user.\n" "\n" "\"2\" means you did casual verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint and checked the user ID on " "the\n" " key against a photo ID.\n" "\n" "\"3\" means you did extensive verification of the key. For example, this " "could\n" " mean that you verified the key fingerprint with the owner of the key in\n" " person, and that you checked, by means of a hard to forge document with " "a\n" " photo ID (such as a passport) that the name of the key owner matches " "the\n" " name in the user ID on the key, and finally that you verified (by " "exchange\n" " of email) that the email address on the key belongs to the key owner.\n" "\n" "Note that the examples given above for levels 2 and 3 are *only* examples.\n" "In the end, it is up to you to decide just what \"casual\" and \"extensive" "\"\n" "mean to you when you sign other keys.\n" "\n" "If you don't know what the right answer is, answer \"0\"." msgstr "" "Mieltt alr egy felhasznli azonostt egy kulcson, ellenriznie kell,\n" "hogy a kulcs a felhasznli azonostban megnevezett szemlyhez tartozik.\n" "Msok szmra hasznos lehet, ha tudjk, hogy milyen gondosan ellenrizte\n" "n ezt.\n" "\n" "\"0\" azt jelenti, hogy nem tesz az ellenrzs gondossgra vonatkoz\n" " kijelentst.\n" "\n" "\"1\" azt jelenti, hogy n hiszi, hogy a kulcs annak a szemlynek a\n" " tulajdona, aki azt lltja, hogy az v, de n nem tudta ezt\n" " ellenrizni, vagy egyszeren nem ellenrizte ezt. Ez hasznos egy\n" " \"persona\" tpus ellenrzshez, mikor n egy pszeudonim felhasznl\n" " kulcst rja al.\n" "\n" "\"2\" azt jelenti, hogy n a kulcsot htkznapi alapossggal ellenrizte.\n" " Pldul ez azt jelentheti, hogy ellenrizte a kulcs ujjlenyomatt, s\n" " sszevetette a kulcson szerepl felhasznlazonostt egy fnykpes\n" " igazolvnnyal.\n" "\n" "\"3\" azt jelenti, hogy alaposan ellenrizte a kulcsot. Pldul ez azt\n" " jelentheti, hogy a kulcs ujjlenyomatt a tulajdonossal szemlyesen\n" " tallkozva ellenrizte, egy nehezen hamisthat, fnykpes " "igazolvnnyal\n" " (mint az tlevl) meggyzdtt arrl, hogy a szemly neve egyezik a\n" " kulcson levvel, s vgl (e-mail vltssal) ellenrizte, hogy a " "kulcson\n" " szerepl e-mail cm a kulcs tulajdonoshoz tartozik.\n" "\n" "A 2-es s 3-as szintekhez adott pldk *csak* pldk. Vgs soron n dnti\n" "el, hogy mit jelentenek nnek a \"htkznapi\" s \"alapos\" kifejezsek,\n" "amikor msok kulcst alrja.\n" "\n" "Ha nem tudja, hogy mit vlaszoljon, rjon \"0\"-t!" #: g10/helptext.c:184 #, fuzzy msgid "Answer \"yes\" if you want to sign ALL the user IDs" msgstr "" "Vlaszoljon \"igen\"-nel, ha az SSZES felhasznlazonostt al akarja rni!" #: g10/helptext.c:188 msgid "" "Answer \"yes\" if you really want to delete this user ID.\n" "All certificates are then also lost!" msgstr "" "Vlaszoljon \"igen\"-nel, ha valban trlni akarja ezt a " "felhasznlazonostt!\n" "Minden igazols trldik vele egytt!" #: g10/helptext.c:193 msgid "Answer \"yes\" if it is okay to delete the subkey" msgstr "Vlaszoljon \"igen\"-nel, ha az alkulcs trlhet." #: g10/helptext.c:198 msgid "" "This is a valid signature on the key; you normally don't want\n" "to delete this signature because it may be important to establish a\n" "trust connection to the key or another key certified by this key." msgstr "" "Ez egy rvnyes alrs a kulcson. Norml esetben nincs rtelme\n" "trlni, mert fontos lehet ahhoz, hogy rvnyestse ezt a kulcsot,\n" "vagy egy msikat, melyet ezzel a kulccsal igazolnak." #: g10/helptext.c:203 msgid "" "This signature can't be checked because you don't have the\n" "corresponding key. You should postpone its deletion until you\n" "know which key was used because this signing key might establish\n" "a trust connection through another already certified key." msgstr "" "Ezt az alrst nem tudom ellenrizni, mert nincs meg a hozz tartoz\n" "kulcs. Ajnlatos lenne elhalasztani a trlst addig, amg meg nem tudja,\n" "hogy melyik kulcsot hasznltk, mert ez az alr kulcs bizalmi\n" "kapcsolatot hozhat ltre egy mr hitelestett kulcson keresztl." #: g10/helptext.c:209 msgid "" "The signature is not valid. It does make sense to remove it from\n" "your keyring." msgstr "Ez az alrs nem rvnyes. rtelmetlen eltvoltani a kulcskarikrl." #: g10/helptext.c:213 msgid "" "This is a signature which binds the user ID to the key. It is\n" "usually not a good idea to remove such a signature. Actually\n" "GnuPG might not be able to use this key anymore. So do this\n" "only if this self-signature is for some reason not valid and\n" "a second one is available." msgstr "" "Ez egy olyan alrs, amely sszekti a felhasznlazonostt\n" "a kulccsal. ltalban nem j tlet egy ilyen alrst eltvoltani.\n" "Az is lehetsges, hogy a GnuPG tbb nem tudja hasznlni ezt\n" "a kulcsot. Csak akkor tegye ezt, ha valami okbl ez az nalrs nem\n" "rvnyes, s rendelkezsre ll egy msik!" #: g10/helptext.c:221 msgid "" "Change the preferences of all user IDs (or just of the selected ones)\n" "to the current list of preferences. The timestamp of all affected\n" "self-signatures will be advanced by one second.\n" msgstr "" "Lecserli az sszes felhasznlazonosthoz (vagy csak a kijelltekhez)\n" "tartoz preferencikat az aktulis preferencikra. Minden rintett\n" "nalrs idpontjt egy msodperccel nveli.\n" #: g10/helptext.c:228 msgid "Please enter the passphrase; this is a secret sentence \n" msgstr "Krem, adja meg a jelszt! Ezt egy titkos mondat. \n" #: g10/helptext.c:234 msgid "Please repeat the last passphrase, so you are sure what you typed in." msgstr "Krem, ismtelje meg az elz jelszt ellenrzskppen!" #: g10/helptext.c:238 msgid "Give the name of the file to which the signature applies" msgstr "Adja meg az llomny nevt, melyhez az alrs tartozik!" #: g10/helptext.c:243 msgid "Answer \"yes\" if it is okay to overwrite the file" msgstr "Vlaszoljon \"igen\"-nel, ha fellrhat az llomny!" #: g10/helptext.c:248 msgid "" "Please enter a new filename. If you just hit RETURN the default\n" "file (which is shown in brackets) will be used." msgstr "" "Krem, adjon meg egy j fjlnevet! Ha RETURN-t/ENTER-t nyom, akkor\n" "a szgletes zrjelben lev alaprtelmezett nevet hasznlom." #: g10/helptext.c:254 msgid "" "You should specify a reason for the certification. Depending on the\n" "context you have the ability to choose from this list:\n" " \"Key has been compromised\"\n" " Use this if you have a reason to believe that unauthorized persons\n" " got access to your secret key.\n" " \"Key is superseded\"\n" " Use this if you have replaced this key with a newer one.\n" " \"Key is no longer used\"\n" " Use this if you have retired this key.\n" " \"User ID is no longer valid\"\n" " Use this to state that the user ID should not longer be used;\n" " this is normally used to mark an email address invalid.\n" msgstr "" "Ajnlatos megadni a visszavons okt. A helyzettl fggen vlasszon\n" "a kvetkez listbl:\n" " \"A kulcs kompromittldott.\"\n" " Hasznlja ezt akkor, ha oka van azt hinni, hogy titkos kulcsa\n" " illetktelen kezekbe kerlt!\n" " \"A kulcsot lecserltk.\"\n" " Hasznlja ezt akkor, ha a kulcsot lecserlte egy jabbra!\n" " \"A kulcs mr nem hasznlatos.\"\n" " Hasznlja ezt akkor, ha mr nem hasznlja a kulcsot!\n" " \"A felhasznlazonost mr nem rvnyes.\"\n" " Hasznlja ezt akkor, ha azt lltja, hogy a felhasznlazonost\n" " mr nem hasznlatos! ltalban rvnytelen e-mail cmet jelent.\n" #: g10/helptext.c:270 msgid "" "If you like, you can enter a text describing why you issue this\n" "revocation certificate. Please keep this text concise.\n" "An empty line ends the text.\n" msgstr "" "Ha akarja, megadhat egy szveget, melyben megindokolja, hogy mirt\n" "adta ki ezt a visszavon igazolst. Krem, fogalmazzon tmren!\n" "Egy res sor jelzi a szveg vgt.\n" #: g10/helptext.c:285 msgid "No help available" msgstr "Nem ll rendelkezsre segtsg." #: g10/helptext.c:293 #, c-format msgid "No help available for `%s'" msgstr "Nem ll rendelkezsre segtsg \"%s\" tmhoz." #: g10/import.c:98 msgid "import signatures that are marked as local-only" msgstr "" #: g10/import.c:101 msgid "repair damage from the pks keyserver during import" msgstr "" #: g10/import.c:104 #, fuzzy msgid "do not clear the ownertrust values during import" msgstr "bizalmi adatbzis frisstse" #: g10/import.c:107 #, fuzzy msgid "do not update the trustdb after import" msgstr "bizalmi adatbzis frisstse" #: g10/import.c:110 #, fuzzy msgid "create a public key when importing a secret key" msgstr "A nyilvnos kulcs nem passzol a titkos kulcshoz!\n" #: g10/import.c:113 msgid "only accept updates to existing keys" msgstr "" #: g10/import.c:116 #, fuzzy msgid "remove unusable parts from key after import" msgstr "hasznlhatatlan titkos kulcs" #: g10/import.c:119 msgid "remove as much as possible from key after import" msgstr "" #: g10/import.c:293 #, c-format msgid "skipping block of type %d\n" msgstr "%d tpus blokkot kihagyom.\n" #: g10/import.c:302 #, fuzzy, c-format msgid "%lu keys processed so far\n" msgstr "Eddig %lu kulcsot dolgoztam fel.\n" #: g10/import.c:324 #, c-format msgid "Total number processed: %lu\n" msgstr " sszesen feldolgoztam: %lu\n" #: g10/import.c:326 #, c-format msgid " skipped new keys: %lu\n" msgstr " j kulcsok kihagyva: %lu\n" #: g10/import.c:329 #, c-format msgid " w/o user IDs: %lu\n" msgstr " felh. azonost nlkl: %lu\n" #: g10/import.c:331 #, c-format msgid " imported: %lu" msgstr " importlva: %lu" #: g10/import.c:337 #, c-format msgid " unchanged: %lu\n" msgstr " vltozatlan: %lu\n" #: g10/import.c:339 #, c-format msgid " new user IDs: %lu\n" msgstr " j felh. azonostk: %lu\n" #: g10/import.c:341 #, c-format msgid " new subkeys: %lu\n" msgstr " j alkulcsok: %lu\n" #: g10/import.c:343 #, c-format msgid " new signatures: %lu\n" msgstr " j alrsok: %lu\n" #: g10/import.c:345 #, c-format msgid " new key revocations: %lu\n" msgstr " j kulcsvisszavonsok: %lu\n" #: g10/import.c:347 #, c-format msgid " secret keys read: %lu\n" msgstr " olvasott titkos kulcsok: %lu\n" #: g10/import.c:349 #, c-format msgid " secret keys imported: %lu\n" msgstr " importlt titkos kulcsok: %lu\n" #: g10/import.c:351 #, c-format msgid " secret keys unchanged: %lu\n" msgstr "vltozatlan titkos kulcsok: %lu\n" #: g10/import.c:353 #, c-format msgid " not imported: %lu\n" msgstr " nem importlt: %lu\n" #: g10/import.c:355 #, fuzzy, c-format msgid " signatures cleaned: %lu\n" msgstr " j alrsok: %lu\n" #: g10/import.c:357 #, fuzzy, c-format msgid " user IDs cleaned: %lu\n" msgstr " olvasott titkos kulcsok: %lu\n" #: g10/import.c:659 #, c-format msgid "WARNING: key %s contains preferences for unavailable\n" msgstr "" #. TRANSLATORS: This string is belongs to the previous one. They are #. only split up to allow printing of a common prefix. #: g10/import.c:663 #, fuzzy msgid " algorithms on these user IDs:\n" msgstr "n alrta a kvetkez felhasznlazonostkat:\n" #: g10/import.c:700 #, c-format msgid " \"%s\": preference for cipher algorithm %s\n" msgstr "" #: g10/import.c:712 #, fuzzy, c-format msgid " \"%s\": preference for digest algorithm %s\n" msgstr "%s alrs, %s kivonatol algoritmus.\n" #: g10/import.c:724 #, c-format msgid " \"%s\": preference for compression algorithm %s\n" msgstr "" #: g10/import.c:737 msgid "it is strongly suggested that you update your preferences and\n" msgstr "" #: g10/import.c:739 msgid "re-distribute this key to avoid potential algorithm mismatch problems\n" msgstr "" #: g10/import.c:763 #, c-format msgid "you can update your preferences with: gpg --edit-key %s updpref save\n" msgstr "" #: g10/import.c:813 g10/import.c:1237 #, fuzzy, c-format msgid "key %s: no user ID\n" msgstr "%08lX kulcs: Nincs felhasznli azonost.\n" #: g10/import.c:819 #, fuzzy, c-format msgid "key %s: %s\n" msgstr "Kihagytam \"%s\"-t: %s.\n" #: g10/import.c:820 g10/import.c:1212 msgid "rejected by import filter" msgstr "" #: g10/import.c:849 #, fuzzy, c-format msgid "key %s: PKS subkey corruption repaired\n" msgstr "%08lX kulcs: HKP alkulcssrls kijavtva.\n" #: g10/import.c:864 #, fuzzy, c-format msgid "key %s: accepted non self-signed user ID \"%s\"\n" msgstr "%08lX kulcs: Nem nalrt felh. azonost (\"%s\") elfogadva.\n" #: g10/import.c:870 #, fuzzy, c-format msgid "key %s: no valid user IDs\n" msgstr "%08lX kulcs: Nincs rvnyes felhasznli azonost.\n" #: g10/import.c:872 msgid "this may be caused by a missing self-signature\n" msgstr "Ezt okozhatja egy hinyz nalrs.\n" #: g10/import.c:882 g10/import.c:1360 #, fuzzy, c-format msgid "key %s: public key not found: %s\n" msgstr "%08lX kulcs: Nyilvnos kulcs nem tallhat: %s\n" #: g10/import.c:888 #, fuzzy, c-format msgid "key %s: new key - skipped\n" msgstr "%08lX kulcs: j kulcs - kihagytam.\n" #: g10/import.c:897 #, c-format msgid "no writable keyring found: %s\n" msgstr "Nem rhat kulcskarikt talltam: %s\n" #: g10/import.c:902 g10/openfile.c:291 g10/sign.c:803 g10/sign.c:1108 #, c-format msgid "writing to `%s'\n" msgstr "rok a \"%s\" llomnyba.\n" #: g10/import.c:906 g10/import.c:1007 g10/import.c:1277 g10/import.c:1421 #: g10/import.c:2526 g10/import.c:2548 #, c-format msgid "error writing keyring `%s': %s\n" msgstr "Hiba a \"%s\" kulcskarika rsakor: %s\n" #: g10/import.c:926 #, fuzzy, c-format msgid "key %s: public key \"%s\" imported\n" msgstr "%08lX kulcs: \"%s\" nyilvnos kulcs importlva.\n" #: g10/import.c:950 #, fuzzy, c-format msgid "key %s: doesn't match our copy\n" msgstr "%08lX kulcs: Nem egyezik a mi msolatunkkal!\n" #: g10/import.c:967 g10/import.c:1378 #, fuzzy, c-format msgid "key %s: can't locate original keyblock: %s\n" msgstr "%08lX kulcs: Nem tallom az eredeti kulcsblokkot: %s\n" #: g10/import.c:975 g10/import.c:1385 #, fuzzy, c-format msgid "key %s: can't read original keyblock: %s\n" msgstr "%08lX kulcs: Nem tudom beolvasni az eredeti kulcsblokkot: %s\n" #: g10/import.c:1017 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new user ID\n" msgstr "%08lX kulcs: \"%s\" 1 j felhasznli azonost.\n" #: g10/import.c:1020 #, fuzzy, c-format msgid "key %s: \"%s\" %d new user IDs\n" msgstr "%08lX kulcs: \"%s\" %d j felhasznli azonost.\n" #: g10/import.c:1023 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new signature\n" msgstr "%08lX kulcs: \"%s\" 1 j alrs.\n" #: g10/import.c:1026 #, fuzzy, c-format msgid "key %s: \"%s\" %d new signatures\n" msgstr "%08lX kulcs: \"%s\" %d j alrs.\n" #: g10/import.c:1029 #, fuzzy, c-format msgid "key %s: \"%s\" 1 new subkey\n" msgstr "%08lX kulcs: \"%s\" 1 j alkulcs.\n" #: g10/import.c:1032 #, fuzzy, c-format msgid "key %s: \"%s\" %d new subkeys\n" msgstr "%08lX kulcs: \"%s\" %d j alkulcs.\n" #: g10/import.c:1035 #, fuzzy, c-format msgid "key %s: \"%s\" %d signature cleaned\n" msgstr "%08lX kulcs: \"%s\" %d j alrs.\n" #: g10/import.c:1038 #, fuzzy, c-format msgid "key %s: \"%s\" %d signatures cleaned\n" msgstr "%08lX kulcs: \"%s\" %d j alrs.\n" #: g10/import.c:1041 #, fuzzy, c-format msgid "key %s: \"%s\" %d user ID cleaned\n" msgstr "%08lX kulcs: \"%s\" %d j felhasznli azonost.\n" #: g10/import.c:1044 #, fuzzy, c-format msgid "key %s: \"%s\" %d user IDs cleaned\n" msgstr "%08lX kulcs: \"%s\" %d j felhasznli azonost.\n" #: g10/import.c:1067 #, fuzzy, c-format msgid "key %s: \"%s\" not changed\n" msgstr "%08lX kulcs: \"%s\" nem vltozott.\n" #: g10/import.c:1211 #, fuzzy, c-format msgid "secret key %s: %s\n" msgstr "\"%s\" titkos kulcs nem tallhat: %s\n" #: g10/import.c:1231 g10/import.c:1254 #, fuzzy msgid "importing secret keys not allowed\n" msgstr "rom a titkos kulcsot a %s llomnyba.\n" #: g10/import.c:1243 #, fuzzy, c-format msgid "key %s: secret key with invalid cipher %d - skipped\n" msgstr "" "%08lX kulcs: Titkos kulcs rvnytelen (%d) rejtjelezvel - kihagytam.\n" #: g10/import.c:1271 g10/import.c:2541 #, c-format msgid "no default secret keyring: %s\n" msgstr "Nincs alaprtelmezett titkoskulcs-karika: %s\n" #: g10/import.c:1282 #, fuzzy, c-format msgid "key %s: secret key imported\n" msgstr "%08lX kulcs: Titkos kulcs importlva.\n" #: g10/import.c:1313 #, fuzzy, c-format msgid "key %s: already in secret keyring\n" msgstr "%08lX kulcs: Mr szerepel a titkoskulcs-karikn.\n" #: g10/import.c:1323 #, fuzzy, c-format msgid "key %s: secret key not found: %s\n" msgstr "%08lX kulcs: Titkos kulcs nem tallhat: %s\n" #: g10/import.c:1353 #, fuzzy, c-format msgid "key %s: no public key - can't apply revocation certificate\n" msgstr "%08lX kulcs: Nincs nyilvnos kulcs - nem tudok visszavonni.\n" #: g10/import.c:1396 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - rejected\n" msgstr "%08lX kulcs: rvnytelen visszavon igazols: %s - visszautastva.\n" #: g10/import.c:1428 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate imported\n" msgstr "%08lX kulcs: \"%s\" visszavon igazolst importltam.\n" #: g10/import.c:1494 #, fuzzy, c-format msgid "key %s: no user ID for signature\n" msgstr "%08lX kulcs: Nincs felhasznli azonost ehhez az alrshoz!\n" #: g10/import.c:1509 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm on user ID \"%s\"\n" msgstr "" "%08lX kulcs: Nem tmogatott nyilvnos kulcs alg. a \"%s\" felh. " "azonostn!\n" #: g10/import.c:1511 #, fuzzy, c-format msgid "key %s: invalid self-signature on user ID \"%s\"\n" msgstr "%08lX kulcs: rvnytelen nalrs a \"%s\" felh. azonostn!\n" #: g10/import.c:1528 g10/import.c:1553 g10/import.c:1603 #, fuzzy, c-format msgid "key %s: unsupported public key algorithm\n" msgstr "%08lX kulcs: Nem tmogatott nyilvnos kulcs algoritmus!\n" #: g10/import.c:1529 #, fuzzy, c-format msgid "key %s: invalid direct key signature\n" msgstr "%08lX kulcs: Kulcsalrst hozzadtam.\n" #: g10/import.c:1542 #, fuzzy, c-format msgid "key %s: no subkey for key binding\n" msgstr "%08lX kulcs: Nincs alkulcs a kulcsktshez!\n" #: g10/import.c:1555 #, fuzzy, c-format msgid "key %s: invalid subkey binding\n" msgstr "%08lX kulcs: rvnytelen alkulcskts!\n" #: g10/import.c:1570 #, fuzzy, c-format msgid "key %s: removed multiple subkey binding\n" msgstr "%08lX kulcs: Eltvoltottam a tbbszrs alkulcsktst.\n" #: g10/import.c:1592 #, fuzzy, c-format msgid "key %s: no subkey for key revocation\n" msgstr "%08lX kulcs: Nincs alkulcs a kulcsvisszavonshoz.\n" #: g10/import.c:1605 #, fuzzy, c-format msgid "key %s: invalid subkey revocation\n" msgstr "%08lX kulcs: rvnytelen alkulcsvisszavons.\n" #: g10/import.c:1620 #, fuzzy, c-format msgid "key %s: removed multiple subkey revocation\n" msgstr "%08lX kulcs: Eltvoltottam a tbbszrs alkulcsvisszavonst.\n" #: g10/import.c:1662 #, fuzzy, c-format msgid "key %s: skipped user ID \"%s\"\n" msgstr "%08lX kulcs: Kihagytam a felh. azonostt: '" #: g10/import.c:1683 #, fuzzy, c-format msgid "key %s: skipped subkey\n" msgstr "%08lX kulcs: Alkulcsot kihagytam.\n" #: g10/import.c:1710 #, fuzzy, c-format msgid "key %s: non exportable signature (class 0x%02X) - skipped\n" msgstr "%08lX kulcs: Nem exportlhat alrs (%02x. osztly) - kihagytam.\n" #: g10/import.c:1720 #, fuzzy, c-format msgid "key %s: revocation certificate at wrong place - skipped\n" msgstr "%08lX kulcs: Visszavon igazols rossz helyen - kihagytam.\n" #: g10/import.c:1737 #, fuzzy, c-format msgid "key %s: invalid revocation certificate: %s - skipped\n" msgstr "%08lX kulcs: rvnytelen visszavon igazols: %s - kihagytam.\n" #: g10/import.c:1751 #, fuzzy, c-format msgid "key %s: subkey signature in wrong place - skipped\n" msgstr "%08lX kulcs: Alkulcsalrs rossz helyen - kihagytam.\n" #: g10/import.c:1759 #, fuzzy, c-format msgid "key %s: unexpected signature class (0x%02X) - skipped\n" msgstr "%08lX kulcs: Vratlan alrsosztly (0x%02X) - kihagytam.\n" #: g10/import.c:1888 #, fuzzy, c-format msgid "key %s: duplicated user ID detected - merged\n" msgstr "%08lX kulcs: Duplzott felh. azonostt talltam - sszefztem.\n" #: g10/import.c:1950 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: fetching revocation key %s\n" msgstr "" "FIGYELEM: %08lX kulcsot visszavonhattk:\n" "lehvom a %08lX visszavon kulcsot.\n" #: g10/import.c:1964 #, fuzzy, c-format msgid "WARNING: key %s may be revoked: revocation key %s not present.\n" msgstr "" "FIGYELEM: %08lX kulcsot visszavonhattk:\n" "visszavon kulcs (%08lX) nincs jelen.\n" #: g10/import.c:2023 #, fuzzy, c-format msgid "key %s: \"%s\" revocation certificate added\n" msgstr "%08lX kulcs: \"%s\" visszavon igazolst hozzadtam.\n" #: g10/import.c:2057 #, fuzzy, c-format msgid "key %s: direct key signature added\n" msgstr "%08lX kulcs: Kulcsalrst hozzadtam.\n" #: g10/import.c:2446 #, fuzzy msgid "NOTE: a key's S/N does not match the card's one\n" msgstr "A nyilvnos kulcs nem passzol a titkos kulcshoz!\n" #: g10/import.c:2454 #, fuzzy msgid "NOTE: primary key is online and stored on card\n" msgstr "Kihagytam: titkos kulcs mr jelen van.\n" #: g10/import.c:2456 #, fuzzy msgid "NOTE: secondary key is online and stored on card\n" msgstr "Kihagytam: titkos kulcs mr jelen van.\n" #: g10/keydb.c:166 #, c-format msgid "error creating keyring `%s': %s\n" msgstr "Hiba a(z) \"%s\" kulcskarika ltrehozsakor: %s\n" #: g10/keydb.c:173 #, c-format msgid "keyring `%s' created\n" msgstr "\"%s\" kulcskarikt ltrehoztam.\n" #: g10/keydb.c:319 g10/keydb.c:322 #, fuzzy, c-format msgid "keyblock resource `%s': %s\n" msgstr "Hiba \"%s\" ltrehozsakor: %s\n" #: g10/keydb.c:703 #, c-format msgid "failed to rebuild keyring cache: %s\n" msgstr "Nem tudtam jrapteni a kulcskarika cache-t: %s\n" #: g10/keyedit.c:265 msgid "[revocation]" msgstr "[visszavons]" #: g10/keyedit.c:266 msgid "[self-signature]" msgstr "[nalrs]" #: g10/keyedit.c:344 g10/keylist.c:390 msgid "1 bad signature\n" msgstr "1 rossz alrs.\n" #: g10/keyedit.c:346 g10/keylist.c:392 #, c-format msgid "%d bad signatures\n" msgstr "%d rossz alrs.\n" #: g10/keyedit.c:348 g10/keylist.c:394 msgid "1 signature not checked due to a missing key\n" msgstr "1 alrst nem ellenriztem hinyz kulcs miatt.\n" #: g10/keyedit.c:350 g10/keylist.c:396 #, c-format msgid "%d signatures not checked due to missing keys\n" msgstr "%d alrst nem ellenriztem hinyz kulcs miatt.\n" #: g10/keyedit.c:352 g10/keylist.c:398 msgid "1 signature not checked due to an error\n" msgstr "1 alrst nem ellenriztem hiba miatt.\n" #: g10/keyedit.c:354 g10/keylist.c:400 #, c-format msgid "%d signatures not checked due to errors\n" msgstr "%d alrst nem ellenriztem hiba miatt.\n" #: g10/keyedit.c:356 msgid "1 user ID without valid self-signature detected\n" msgstr "1 felhasznlazonostt talltam rvnyes nalrs nlkl.\n" #: g10/keyedit.c:358 #, c-format msgid "%d user IDs without valid self-signatures detected\n" msgstr "%d felhasznlazonostt talltam rvnyes nalrs nlkl.\n" #: g10/keyedit.c:414 g10/pkclist.c:265 #, fuzzy msgid "" "Please decide how far you trust this user to correctly verify other users' " "keys\n" "(by looking at passports, checking fingerprints from different sources, " "etc.)\n" msgstr "" "Krem, dntse el, hogy mennyire bzik meg ebben a felhasznlban,\n" "hogy megfelelen ellenrzi msok kulcsait (tlevelek ellenrzsvel,\n" "klnbz forrsbl szrmaz digitlis ujjlenyomatokkal...)!\n" "\n" #: g10/keyedit.c:418 g10/pkclist.c:277 #, fuzzy, c-format msgid " %d = I trust marginally\n" msgstr " %d = rszlegesen megbzom benne\n" #: g10/keyedit.c:419 g10/pkclist.c:279 #, fuzzy, c-format msgid " %d = I trust fully\n" msgstr " %d = teljesen megbzom benne\n" #: g10/keyedit.c:438 msgid "" "Please enter the depth of this trust signature.\n" "A depth greater than 1 allows the key you are signing to make\n" "trust signatures on your behalf.\n" msgstr "" #: g10/keyedit.c:454 msgid "Please enter a domain to restrict this signature, or enter for none.\n" msgstr "" #: g10/keyedit.c:599 #, c-format msgid "User ID \"%s\" is revoked." msgstr "\"%s\" felhasznli azonostt visszavontk." #: g10/keyedit.c:608 g10/keyedit.c:636 g10/keyedit.c:663 g10/keyedit.c:829 #: g10/keyedit.c:889 g10/keyedit.c:1752 msgid "Are you sure you still want to sign it? (y/N) " msgstr "Biztos abban, hogy tovbbra is al akarja rni? (i/N) " #: g10/keyedit.c:622 g10/keyedit.c:650 g10/keyedit.c:677 g10/keyedit.c:835 #: g10/keyedit.c:1758 msgid " Unable to sign.\n" msgstr " Nem tudom alrni.\n" #: g10/keyedit.c:627 #, c-format msgid "User ID \"%s\" is expired." msgstr "\"%s\" felhasznli azonost lejrt." #: g10/keyedit.c:655 #, c-format msgid "User ID \"%s\" is not self-signed." msgstr "\"%s\" felhasznlazonostn nincs nalrs." #: g10/keyedit.c:683 #, fuzzy, c-format msgid "User ID \"%s\" is signable. " msgstr "\"%s\" felhasznlazonostn nincs nalrs." #: g10/keyedit.c:685 #, fuzzy msgid "Sign it? (y/N) " msgstr "Valban alrja? " #: g10/keyedit.c:707 #, c-format msgid "" "The self-signature on \"%s\"\n" "is a PGP 2.x-style signature.\n" msgstr "" "\"%s\" nalrsa\n" "PGP 2.x stlus.\n" #: g10/keyedit.c:716 msgid "Do you want to promote it to an OpenPGP self-signature? (y/N) " msgstr "Szeretn talaktani OpenPGP nalrss? (i/N) " #: g10/keyedit.c:730 #, c-format msgid "" "Your current signature on \"%s\"\n" "has expired.\n" msgstr "" "Az n jelenlegi alrsa a(z) \"%s\"\n" "kulcson lejrt.\n" #: g10/keyedit.c:734 msgid "Do you want to issue a new signature to replace the expired one? (y/N) " msgstr "Szeretne kiadni egy j alrst, amellyel lecserli a lejrtat? (i/N) " #: g10/keyedit.c:755 #, c-format msgid "" "Your current signature on \"%s\"\n" "is a local signature.\n" msgstr "" "Az n jelenlegi alrsa a(z) \"%s\"\n" "kulcson helyi alrs.\n" #: g10/keyedit.c:759 msgid "Do you want to promote it to a full exportable signature? (y/N) " msgstr "Szeretn talaktani teljes, exportlhat alrss? (i/N) " #: g10/keyedit.c:780 #, fuzzy, c-format msgid "\"%s\" was already locally signed by key %s\n" msgstr "\"%s\" mr al lett rva helyileg a %08lX kulccsal!\n" #: g10/keyedit.c:783 #, fuzzy, c-format msgid "\"%s\" was already signed by key %s\n" msgstr "\"%s\" mr al lett rva a %08lX kulccsal!\n" #: g10/keyedit.c:788 msgid "Do you want to sign it again anyway? (y/N) " msgstr "Mg egyszer al akarja rni? (i/N) " #: g10/keyedit.c:810 #, fuzzy, c-format msgid "Nothing to sign with key %s\n" msgstr "Nincs mit alrni a %08lX kulccsal!\n" #: g10/keyedit.c:823 msgid "This key has expired!" msgstr "Ez a kulcs lejrt!" #: g10/keyedit.c:841 #, c-format msgid "This key is due to expire on %s.\n" msgstr "Ez a kulcs lejr: %s.\n" #: g10/keyedit.c:847 msgid "Do you want your signature to expire at the same time? (Y/n) " msgstr "Szeretn, ha az alrsa ugyanekkor jrna le? (I/n) " #: g10/keyedit.c:882 msgid "" "You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 " "mode.\n" msgstr "" "Lehet, hogy nem rakhat OpenPGP alrst egy PGP 2.x kulcsra --pgp2 mdban.\n" #: g10/keyedit.c:884 msgid "This would make the key unusable in PGP 2.x.\n" msgstr "Ez hasznlhatatlann tenn a kulcsot PGP 2.x-ben.\n" #: g10/keyedit.c:909 msgid "" "How carefully have you verified the key you are about to sign actually " "belongs\n" "to the person named above? If you don't know what to answer, enter \"0\".\n" msgstr "" "Mennyire gondosan ellenrizte, hogy a kulcs, melyet alrni kszl, valban\n" "a fent nevezett szemlyhez tartozik? Ha nem tudja a vlaszt, rjon \"0\"-t!\n" #: g10/keyedit.c:914 #, c-format msgid " (0) I will not answer.%s\n" msgstr " (0) Nem vlaszolok.%s\n" #: g10/keyedit.c:916 #, c-format msgid " (1) I have not checked at all.%s\n" msgstr " (1) Egyltaln nem ellenriztem.%s\n" #: g10/keyedit.c:918 #, c-format msgid " (2) I have done casual checking.%s\n" msgstr " (2) A szoksos ellenrzseket vgeztem.%s\n" #: g10/keyedit.c:920 #, c-format msgid " (3) I have done very careful checking.%s\n" msgstr " (3) Nagyon alaposan ellenriztem.%s\n" #: g10/keyedit.c:926 #, fuzzy msgid "Your selection? (enter `?' for more information): " msgstr "Mi a vlasza? (Adjon meg \"?\"-et magyarzathoz!): " #: g10/keyedit.c:950 #, fuzzy, c-format msgid "" "Are you sure that you want to sign this key with your\n" "key \"%s\" (%s)\n" msgstr "" "Teljesen biztos abban, hogy al akarja rni ezt a kulcsot\n" "az n kulcsval: \"" #: g10/keyedit.c:957 #, fuzzy msgid "This will be a self-signature.\n" msgstr "" "\n" "Ez egy nalrs lesz.\n" #: g10/keyedit.c:963 #, fuzzy msgid "WARNING: the signature will not be marked as non-exportable.\n" msgstr "" "\n" "FIGYELEM: Az alrs nem lesz \"nem exportlhatknt\" megjellve.\n" #: g10/keyedit.c:971 #, fuzzy msgid "WARNING: the signature will not be marked as non-revocable.\n" msgstr "" "\n" "FIGYELEM: Az alrs nem lesz \"nem visszavonhatknt\" megjellve.\n" #: g10/keyedit.c:981 #, fuzzy msgid "The signature will be marked as non-exportable.\n" msgstr "" "\n" "Az alrst \"nem exportlhatnak\" jelljk.\n" #: g10/keyedit.c:988 #, fuzzy msgid "The signature will be marked as non-revocable.\n" msgstr "" "\n" "Az alrst \"nem visszavonhatnak\" jelljk.\n" #: g10/keyedit.c:995 #, fuzzy msgid "I have not checked this key at all.\n" msgstr "" "\n" "Egyltaln nem ellenriztem ezt a kulcsot.\n" #: g10/keyedit.c:1000 #, fuzzy msgid "I have checked this key casually.\n" msgstr "" "\n" "A szoksos mdon ellenriztem ezt a kulcsot.\n" #: g10/keyedit.c:1005 #, fuzzy msgid "I have checked this key very carefully.\n" msgstr "" "\n" "Nagyon gondosan ellenriztem ezt a kulcsot.\n" #: g10/keyedit.c:1015 #, fuzzy msgid "Really sign? (y/N) " msgstr "Valban alrja? " #: g10/keyedit.c:1060 g10/keyedit.c:4893 g10/keyedit.c:4984 g10/keyedit.c:5048 #: g10/keyedit.c:5109 g10/sign.c:318 #, c-format msgid "signing failed: %s\n" msgstr "Alrs sikertelen: %s\n" #: g10/keyedit.c:1125 msgid "Key has only stub or on-card key items - no passphrase to change.\n" msgstr "" #: g10/keyedit.c:1136 g10/keygen.c:3413 msgid "This key is not protected.\n" msgstr "Ez a kulcs nem vdett.\n" #: g10/keyedit.c:1140 g10/keygen.c:3401 g10/revoke.c:535 msgid "Secret parts of primary key are not available.\n" msgstr "Az elsdleges kulcs titkos rszei nem elrhetk.\n" #: g10/keyedit.c:1144 g10/keygen.c:3416 #, fuzzy msgid "Secret parts of primary key are stored on-card.\n" msgstr "Az elsdleges kulcs titkos rszei nem elrhetk.\n" #: g10/keyedit.c:1148 g10/keygen.c:3420 msgid "Key is protected.\n" msgstr "A kulcs vdett.\n" #: g10/keyedit.c:1172 #, c-format msgid "Can't edit this key: %s\n" msgstr "Nem tudom szerkeszteni ezt a kulcsot: %s\n" #: g10/keyedit.c:1178 msgid "" "Enter the new passphrase for this secret key.\n" "\n" msgstr "" "rja be az j jelszt ehhez a titkos kulcshoz!\n" "\n" #: g10/keyedit.c:1187 g10/keygen.c:2005 msgid "passphrase not correctly repeated; try again" msgstr "Nem ismtelte meg helyesen a jelszt! Prblja jra!" #: g10/keyedit.c:1192 msgid "" "You don't want a passphrase - this is probably a *bad* idea!\n" "\n" msgstr "" "n nem akar jelszt. Ez valsznleg *rossz* tlet!\n" "\n" #: g10/keyedit.c:1195 #, fuzzy msgid "Do you really want to do this? (y/N) " msgstr "Valban ezt akarja? " #: g10/keyedit.c:1266 msgid "moving a key signature to the correct place\n" msgstr "trakom a kulcsalrst a megfelel helyre.\n" #: g10/keyedit.c:1352 msgid "save and quit" msgstr "ments s kilps" #: g10/keyedit.c:1355 #, fuzzy msgid "show key fingerprint" msgstr "megmutatja az ujjlenyomatot" #: g10/keyedit.c:1356 msgid "list key and user IDs" msgstr "kilistzza a kulcs- s felhasznlazonostkat" #: g10/keyedit.c:1358 msgid "select user ID N" msgstr "N. felhasznli azonost kivlasztsa" #: g10/keyedit.c:1359 #, fuzzy msgid "select subkey N" msgstr "N. felhasznli azonost kivlasztsa" #: g10/keyedit.c:1360 #, fuzzy msgid "check signatures" msgstr "alrsok visszavonsa" #: g10/keyedit.c:1365 msgid "sign selected user IDs [* see below for related commands]" msgstr "" #: g10/keyedit.c:1370 #, fuzzy msgid "sign selected user IDs locally" msgstr "kulcs helyi alrsa" #: g10/keyedit.c:1372 #, fuzzy msgid "sign selected user IDs with a trust signature" msgstr "Javaslat: Vlassza ki az alrni kvnt felhasznlazonostkat!\n" #: g10/keyedit.c:1374 msgid "sign selected user IDs with a non-revocable signature" msgstr "" #: g10/keyedit.c:1378 msgid "add a user ID" msgstr "felhasznli azonost hozzadsa" #: g10/keyedit.c:1380 msgid "add a photo ID" msgstr "fotazonost hozzadsa" #: g10/keyedit.c:1382 #, fuzzy msgid "delete selected user IDs" msgstr "felhasznli azonost trlse" #: g10/keyedit.c:1387 #, fuzzy msgid "add a subkey" msgstr "addkey" #: g10/keyedit.c:1391 msgid "add a key to a smartcard" msgstr "" #: g10/keyedit.c:1393 msgid "move a key to a smartcard" msgstr "" #: g10/keyedit.c:1395 msgid "move a backup key to a smartcard" msgstr "" #: g10/keyedit.c:1399 #, fuzzy msgid "delete selected subkeys" msgstr "msodlagos kulcs trlse" #: g10/keyedit.c:1401 msgid "add a revocation key" msgstr "visszavon kulcs hozzadsa" #: g10/keyedit.c:1403 #, fuzzy msgid "delete signatures from the selected user IDs" msgstr "Valban frissti a kijellt felhasznlazonostk preferenciit? " #: g10/keyedit.c:1405 #, fuzzy msgid "change the expiration date for the key or selected subkeys" msgstr "Nem vltoztathatja meg egy v3 kulcs lejrati dtumt!\n" #: g10/keyedit.c:1407 #, fuzzy msgid "flag the selected user ID as primary" msgstr "felhasznlazonost megjellse elsdlegesknt" #: g10/keyedit.c:1409 #, fuzzy msgid "toggle between the secret and public key listings" msgstr "vlts a titkos s a nyilvnos kulcs listzsa kztt" #: g10/keyedit.c:1412 msgid "list preferences (expert)" msgstr "preferencik listzsa (szakrt)" #: g10/keyedit.c:1414 msgid "list preferences (verbose)" msgstr "preferencik listzsa (rszletes)" #: g10/keyedit.c:1416 #, fuzzy msgid "set preference list for the selected user IDs" msgstr "Valban frissti a kijellt felhasznlazonostk preferenciit? " #: g10/keyedit.c:1421 #, fuzzy msgid "set the preferred keyserver URL for the selected user IDs" msgstr "rtelmezhetetlen a kulcsszerver URI-ja!\n" #: g10/keyedit.c:1423 #, fuzzy msgid "set a notation for the selected user IDs" msgstr "Valban frissti a kijellt felhasznlazonostk preferenciit? " #: g10/keyedit.c:1425 msgid "change the passphrase" msgstr "jelszvltoztats" #: g10/keyedit.c:1429 msgid "change the ownertrust" msgstr "kulcstulajdonos megbzhatsgnak belltsa" #: g10/keyedit.c:1431 #, fuzzy msgid "revoke signatures on the selected user IDs" msgstr "Valban visszavonja az sszes kijellt felhasznlazonostt? " #: g10/keyedit.c:1433 #, fuzzy msgid "revoke selected user IDs" msgstr "felhasznli azonost visszavonsa" #: g10/keyedit.c:1438 #, fuzzy msgid "revoke key or selected subkeys" msgstr "msodlagos kulcs visszavonsa" #: g10/keyedit.c:1439 #, fuzzy msgid "enable key" msgstr "kulcs engedlyezse" #: g10/keyedit.c:1440 #, fuzzy msgid "disable key" msgstr "kulcs tiltsa" #: g10/keyedit.c:1441 #, fuzzy msgid "show selected photo IDs" msgstr "fotazonost megmutatsa" #: g10/keyedit.c:1443 msgid "compact unusable user IDs and remove unusable signatures from key" msgstr "" #: g10/keyedit.c:1445 msgid "compact unusable user IDs and remove all signatures from key" msgstr "" #: g10/keyedit.c:1572 #, fuzzy, c-format msgid "error reading secret keyblock \"%s\": %s\n" msgstr "Hiba \"%s\" titkoskulcs-blokk olvassakor: %s.\n" #: g10/keyedit.c:1590 msgid "Secret key is available.\n" msgstr "Titkos kulcs rendelkezsre ll.\n" #: g10/keyedit.c:1679 msgid "Need the secret key to do this.\n" msgstr "Ehhez szksg van a titkos kulcsra.\n" #: g10/keyedit.c:1687 msgid "Please use the command \"toggle\" first.\n" msgstr "Krem, hasznlja elbb a \"toggle\" parancsot!\n" #: g10/keyedit.c:1706 msgid "" "* The `sign' command may be prefixed with an `l' for local signatures " "(lsign),\n" " a `t' for trust signatures (tsign), an `nr' for non-revocable signatures\n" " (nrsign), or any combination thereof (ltsign, tnrsign, etc.).\n" msgstr "" #: g10/keyedit.c:1746 msgid "Key is revoked." msgstr "A kulcsot visszavontk." #: g10/keyedit.c:1765 #, fuzzy msgid "Really sign all user IDs? (y/N) " msgstr "Valban alrja az sszes felhasznlazonostt? " #: g10/keyedit.c:1772 msgid "Hint: Select the user IDs to sign\n" msgstr "Javaslat: Vlassza ki az alrni kvnt felhasznlazonostkat!\n" #: g10/keyedit.c:1781 #, fuzzy, c-format msgid "Unknown signature type `%s'\n" msgstr "ismeretlen alrsosztly" #: g10/keyedit.c:1804 #, c-format msgid "This command is not allowed while in %s mode.\n" msgstr "Ez a parancs %s mdban nem engedlyezett.\n" #: g10/keyedit.c:1826 g10/keyedit.c:1846 g10/keyedit.c:2012 msgid "You must select at least one user ID.\n" msgstr "Legalbb egy felhasznlazonostt ki kell vlasztania!\n" #: g10/keyedit.c:1828 msgid "You can't delete the last user ID!\n" msgstr "Nem trlheti az utols felhasznlazonostt!\n" #: g10/keyedit.c:1830 #, fuzzy msgid "Really remove all selected user IDs? (y/N) " msgstr "Valban eltvoltja az sszes kijellt felhasznlazonostt? " #: g10/keyedit.c:1831 #, fuzzy msgid "Really remove this user ID? (y/N) " msgstr "Valban eltvoltja ezt a felhasznlazonostt? " #: g10/keyedit.c:1881 #, fuzzy msgid "Really move the primary key? (y/N) " msgstr "Valban eltvoltja ezt a felhasznlazonostt? " #: g10/keyedit.c:1893 #, fuzzy msgid "You must select exactly one key.\n" msgstr "Legalbb egy kulcsot ki kell vlasztania!\n" #: g10/keyedit.c:1921 msgid "Command expects a filename argument\n" msgstr "" #: g10/keyedit.c:1935 #, fuzzy, c-format msgid "Can't open `%s': %s\n" msgstr "Nem tudom megnyitni a(z) \"%s\" llomnyt: %s.\n" #: g10/keyedit.c:1952 #, fuzzy, c-format msgid "Error reading backup key from `%s': %s\n" msgstr "Hiba a(z) \"%s\" kulcskarika ltrehozsakor: %s\n" #: g10/keyedit.c:1976 msgid "You must select at least one key.\n" msgstr "Legalbb egy kulcsot ki kell vlasztania!\n" #: g10/keyedit.c:1979 #, fuzzy msgid "Do you really want to delete the selected keys? (y/N) " msgstr "Valban trli a kivlasztott kulcsokat? " #: g10/keyedit.c:1980 #, fuzzy msgid "Do you really want to delete this key? (y/N) " msgstr "Valban trli ezt a kulcsot? " #: g10/keyedit.c:2015 #, fuzzy msgid "Really revoke all selected user IDs? (y/N) " msgstr "Valban visszavonja az sszes kijellt felhasznlazonostt? " #: g10/keyedit.c:2016 #, fuzzy msgid "Really revoke this user ID? (y/N) " msgstr "Valban visszavonja ezt a felhasznlazonostt? " #: g10/keyedit.c:2034 #, fuzzy msgid "Do you really want to revoke the entire key? (y/N) " msgstr "Valban visszavonja ezt a kulcsot? " #: g10/keyedit.c:2045 #, fuzzy msgid "Do you really want to revoke the selected subkeys? (y/N) " msgstr "Valban visszavonja a kijellt kulcsokat? " #: g10/keyedit.c:2047 #, fuzzy msgid "Do you really want to revoke this subkey? (y/N) " msgstr "Valban visszavonja ezt a kulcsot? " #: g10/keyedit.c:2098 msgid "Owner trust may not be set while using a user provided trust database\n" msgstr "" #: g10/keyedit.c:2140 #, fuzzy msgid "Set preference list to:\n" msgstr "preferencialista belltsa" #: g10/keyedit.c:2146 #, fuzzy msgid "Really update the preferences for the selected user IDs? (y/N) " msgstr "Valban frissti a kijellt felhasznlazonostk preferenciit? " #: g10/keyedit.c:2148 #, fuzzy msgid "Really update the preferences? (y/N) " msgstr "Valban frisstsem a preferencikat? " #: g10/keyedit.c:2218 #, fuzzy msgid "Save changes? (y/N) " msgstr "Mentsem a vltoztatsokat? " #: g10/keyedit.c:2221 #, fuzzy msgid "Quit without saving? (y/N) " msgstr "Kilpjek ments nlkl? " #: g10/keyedit.c:2231 #, c-format msgid "update failed: %s\n" msgstr "Frissts sikertelen: %s.\n" #: g10/keyedit.c:2238 #, c-format msgid "update secret failed: %s\n" msgstr "Titkoskulcs-blokk frisstse sikertelen: %s\n" #: g10/keyedit.c:2245 msgid "Key not changed so no update needed.\n" msgstr "A kulcs nem vltozott, nincs szksg frisstsre.\n" #: g10/keyedit.c:2346 msgid "Digest: " msgstr "Kivonat: " #: g10/keyedit.c:2398 msgid "Features: " msgstr "Jellemzk: " #: g10/keyedit.c:2409 msgid "Keyserver no-modify" msgstr "" #: g10/keyedit.c:2424 g10/keylist.c:308 msgid "Preferred keyserver: " msgstr "" #: g10/keyedit.c:2432 g10/keyedit.c:2433 #, fuzzy msgid "Notations: " msgstr "Jells: " #: g10/keyedit.c:2643 msgid "There are no preferences on a PGP 2.x-style user ID.\n" msgstr "Nincsenek preferencik egy PGP 2.x felhasznlazonostn!\n" #: g10/keyedit.c:2700 #, fuzzy, c-format msgid "This key was revoked on %s by %s key %s\n" msgstr "Ezt a kulcsot a kvetkez %s kulcs visszavonhatja: " #: g10/keyedit.c:2721 #, fuzzy, c-format msgid "This key may be revoked by %s key %s" msgstr "Ezt a kulcsot a kvetkez %s kulcs visszavonhatja: " #: g10/keyedit.c:2727 #, fuzzy msgid "(sensitive)" msgstr " (rzkeny)" #: g10/keyedit.c:2743 g10/keyedit.c:2799 g10/keyedit.c:2860 g10/keyedit.c:2875 #: g10/keylist.c:194 g10/keyserver.c:526 #, fuzzy, c-format msgid "created: %s" msgstr "%s nem hozhat ltre: %s\n" #: g10/keyedit.c:2746 g10/keylist.c:786 g10/keylist.c:880 g10/mainproc.c:999 #, fuzzy, c-format msgid "revoked: %s" msgstr "[visszavont] " #: g10/keyedit.c:2748 g10/keylist.c:757 g10/keylist.c:792 g10/keylist.c:886 #, fuzzy, c-format msgid "expired: %s" msgstr " [lejr: %s]" #: g10/keyedit.c:2750 g10/keyedit.c:2801 g10/keyedit.c:2862 g10/keyedit.c:2877 #: g10/keylist.c:196 g10/keylist.c:763 g10/keylist.c:798 g10/keylist.c:892 #: g10/keylist.c:913 g10/keyserver.c:532 g10/mainproc.c:1005 #, fuzzy, c-format msgid "expires: %s" msgstr " [lejr: %s]" #: g10/keyedit.c:2752 #, fuzzy, c-format msgid "usage: %s" msgstr " bizalom: %c/%c" #: g10/keyedit.c:2767 #, fuzzy, c-format msgid "trust: %s" msgstr " bizalom: %c/%c" #: g10/keyedit.c:2771 #, c-format msgid "validity: %s" msgstr "" #: g10/keyedit.c:2778 msgid "This key has been disabled" msgstr "Ez a kulcs tiltott." #: g10/keyedit.c:2806 g10/keylist.c:200 msgid "card-no: " msgstr "" #: g10/keyedit.c:2830 msgid "" "Please note that the shown key validity is not necessarily correct\n" "unless you restart the program.\n" msgstr "" "Krem, vegye figyelembe, hogy az itt lthat kulcs rvnyessge nem\n" "felttlenl helyes, amg jra nem indtja a programot!\n" #: g10/keyedit.c:2894 g10/keyedit.c:3287 g10/keyserver.c:536 #: g10/mainproc.c:1846 g10/trustdb.c:1243 g10/trustdb.c:1763 #, fuzzy msgid "revoked" msgstr "[visszavont] " #: g10/keyedit.c:2896 g10/keyedit.c:3289 g10/keyserver.c:540 #: g10/mainproc.c:1848 g10/trustdb.c:552 g10/trustdb.c:1765 #, fuzzy msgid "expired" msgstr "expire" #: g10/keyedit.c:2961 msgid "" "WARNING: no user ID has been marked as primary. This command may\n" " cause a different user ID to become the assumed primary.\n" msgstr "" "FIGYELEM: Nincs kijellt elsdleges felhasznlazonost. Ez a parancs\n" " azt okozhatja, hogy egy msik azonost lesz elsdlegesknt hasznlva.\n" #: g10/keyedit.c:3007 msgid "WARNING: Your encryption subkey expires soon.\n" msgstr "" #: g10/keyedit.c:3008 #, fuzzy #| msgid "You can't change the expiration date of a v3 key\n" msgid "You may want to change its expiration date too.\n" msgstr "Nem vltoztathatja meg egy v3 kulcs lejrati dtumt!\n" #: g10/keyedit.c:3069 msgid "" "WARNING: This is a PGP2-style key. Adding a photo ID may cause some " "versions\n" " of PGP to reject this key.\n" msgstr "" "FIGYELEM: Ez egy PGP2 stlus kulcs. Fotazonost hozzadsa azt " "okozhatja,\n" " hogy a PGP egyes verzii visszautastjk ezt a kulcsot.\n" #: g10/keyedit.c:3074 g10/keyedit.c:3409 msgid "Are you sure you still want to add it? (y/N) " msgstr "Tovbbra is hozz akarja adni? (i/N) " #: g10/keyedit.c:3080 msgid "You may not add a photo ID to a PGP2-style key.\n" msgstr "Lehet, hogy nem adhat fotazonostt egy PGP2 stlus kulcshoz!\n" #: g10/keyedit.c:3220 msgid "Delete this good signature? (y/N/q)" msgstr "Trli ezt a j alrst? (i/N/k)" #: g10/keyedit.c:3230 msgid "Delete this invalid signature? (y/N/q)" msgstr "Trli ezt az rvnytelen alrst? (i/N/k)" #: g10/keyedit.c:3234 msgid "Delete this unknown signature? (y/N/q)" msgstr "Trli ezt az ismeretlen alrst? (i/N/k)" #: g10/keyedit.c:3240 msgid "Really delete this self-signature? (y/N)" msgstr "Valban trli ezt az nalrst? (i/N)" #: g10/keyedit.c:3254 #, c-format msgid "Deleted %d signature.\n" msgstr "Trltem %d alrst.\n" #: g10/keyedit.c:3255 #, c-format msgid "Deleted %d signatures.\n" msgstr "Trltem %d alrst.\n" #: g10/keyedit.c:3258 msgid "Nothing deleted.\n" msgstr "Nem trltem semmit.\n" #: g10/keyedit.c:3291 g10/trustdb.c:1767 #, fuzzy msgid "invalid" msgstr "rvnytelen pncl" #: g10/keyedit.c:3293 #, fuzzy, c-format msgid "User ID \"%s\" compacted: %s\n" msgstr "\"%s\" felhasznli azonostt visszavontk." #: g10/keyedit.c:3300 #, fuzzy, c-format msgid "User ID \"%s\": %d signature removed\n" msgstr "\"%s\" felhasznli azonostt visszavontk." #: g10/keyedit.c:3301 #, fuzzy, c-format msgid "User ID \"%s\": %d signatures removed\n" msgstr "\"%s\" felhasznli azonostt visszavontk." #: g10/keyedit.c:3309 #, fuzzy, c-format msgid "User ID \"%s\": already minimized\n" msgstr "\"%s\" felhasznli azonostt mr visszavontk.\n" #: g10/keyedit.c:3310 #, fuzzy, c-format msgid "User ID \"%s\": already clean\n" msgstr "\"%s\" felhasznli azonostt mr visszavontk.\n" #: g10/keyedit.c:3404 msgid "" "WARNING: This is a PGP 2.x-style key. Adding a designated revoker may " "cause\n" " some versions of PGP to reject this key.\n" msgstr "" "FIGYELEM: Ez egy PGP 2.x stlus kulcs. Kijellt visszavon hozzadsa\n" " azt okozhatja, hogy egyes PGP verzik visszautastjk ezt a " "kulcsot!\n" #: g10/keyedit.c:3415 msgid "You may not add a designated revoker to a PGP 2.x-style key.\n" msgstr "" "Lehet, hogy nem adhat kijellt visszavont egy PGP 2.x-stlus kulcshoz.\n" #: g10/keyedit.c:3435 msgid "Enter the user ID of the designated revoker: " msgstr "rja be a kijellt visszavon felhasznlazonostjt: " #: g10/keyedit.c:3460 msgid "cannot appoint a PGP 2.x style key as a designated revoker\n" msgstr "Nem adhat meg PGP 2.x stlus kulcsot kijellt visszavonnak!\n" #: g10/keyedit.c:3475 msgid "you cannot appoint a key as its own designated revoker\n" msgstr "Nem adhat meg egy kulcsot sajt kijellt visszavonjnak!\n" #: g10/keyedit.c:3497 #, fuzzy msgid "this key has already been designated as a revoker\n" msgstr "FIGYELEM: Ezt a kulcsot a kijellt visszavon visszavonta!\n" #: g10/keyedit.c:3516 msgid "WARNING: appointing a key as a designated revoker cannot be undone!\n" msgstr "" "FIGYELEM: A kijellt visszavon kulcs megadsa nem csinlhat vissza!\n" #: g10/keyedit.c:3522 #, fuzzy msgid "" "Are you sure you want to appoint this key as a designated revoker? (y/N) " msgstr "Biztosan ez a kulcs legyen a kijellt visszavon? (i/N): " #: g10/keyedit.c:3584 msgid "Please remove selections from the secret keys.\n" msgstr "Krem, tvoltsa el a kijellseket a titkos kulcsokrl!\n" #: g10/keyedit.c:3590 #, fuzzy msgid "Please select at most one subkey.\n" msgstr "Maximum egy msodlagos kulcsot jelljn ki, krem!\n" #: g10/keyedit.c:3594 #, fuzzy msgid "Changing expiration time for a subkey.\n" msgstr "Msodlagos kulcs lejrati idejnek vltoztatsa.\n" #: g10/keyedit.c:3597 msgid "Changing expiration time for the primary key.\n" msgstr "Elsdleges kulcs lejrati idejnek vltoztatsa.\n" #: g10/keyedit.c:3646 msgid "You can't change the expiration date of a v3 key\n" msgstr "Nem vltoztathatja meg egy v3 kulcs lejrati dtumt!\n" #: g10/keyedit.c:3662 msgid "No corresponding signature in secret ring\n" msgstr "Nincs megfelel alrs a titkoskulcs-karikn.\n" #: g10/keyedit.c:3747 #, fuzzy, c-format msgid "signing subkey %s is already cross-certified\n" msgstr "FIGYELEM: %08lX alr alkulcs nem kereszthitelestett.\n" #: g10/keyedit.c:3753 #, c-format msgid "subkey %s does not sign and so does not need to be cross-certified\n" msgstr "" #: g10/keyedit.c:3916 msgid "Please select exactly one user ID.\n" msgstr "Krem, vlasszon ki pontosan egy felhasznlazonostt!\n" #: g10/keyedit.c:3955 g10/keyedit.c:4065 g10/keyedit.c:4185 g10/keyedit.c:4326 #, fuzzy, c-format msgid "skipping v3 self-signature on user ID \"%s\"\n" msgstr "Kihagyom a v3 nalrst a \"%s\" felhasznlazonostn.\n" #: g10/keyedit.c:4126 msgid "Enter your preferred keyserver URL: " msgstr "" #: g10/keyedit.c:4206 #, fuzzy msgid "Are you sure you want to replace it? (y/N) " msgstr "Biztos abban, hogy hasznlni akarja (i/N)? " #: g10/keyedit.c:4207 #, fuzzy msgid "Are you sure you want to delete it? (y/N) " msgstr "Biztos abban, hogy hasznlni akarja (i/N)? " #: g10/keyedit.c:4269 #, fuzzy msgid "Enter the notation: " msgstr "Alrs-jells: " #: g10/keyedit.c:4418 #, fuzzy msgid "Proceed? (y/N) " msgstr "Fellrjam (i/N)? " #: g10/keyedit.c:4482 #, c-format msgid "No user ID with index %d\n" msgstr "Nincs %d index felhasznlazonost!\n" #: g10/keyedit.c:4540 #, fuzzy, c-format msgid "No user ID with hash %s\n" msgstr "Nincs %d index felhasznlazonost!\n" #: g10/keyedit.c:4567 #, fuzzy, c-format msgid "No subkey with index %d\n" msgstr "Nincs %d index felhasznlazonost!\n" #: g10/keyedit.c:4702 #, fuzzy, c-format msgid "user ID: \"%s\"\n" msgstr "Felhasznlazonost: \"" #: g10/keyedit.c:4705 g10/keyedit.c:4799 g10/keyedit.c:4842 #, fuzzy, c-format msgid "signed by your key %s on %s%s%s\n" msgstr " alrva %08lX ltal %s%s%s idpontban.\n" #: g10/keyedit.c:4707 g10/keyedit.c:4801 g10/keyedit.c:4844 msgid " (non-exportable)" msgstr " (nem exportlhat)" #: g10/keyedit.c:4711 #, c-format msgid "This signature expired on %s.\n" msgstr "Ez az alrs lejrt %s idpontban.\n" #: g10/keyedit.c:4715 msgid "Are you sure you still want to revoke it? (y/N) " msgstr "Biztos benne, hogy mgis visszavonja? (i/N) " #: g10/keyedit.c:4719 msgid "Create a revocation certificate for this signature? (y/N) " msgstr "Csinljunk egy visszavon igazolst ehhez az alrshoz? (i/N) " #: g10/keyedit.c:4770 #, fuzzy msgid "Not signed by you.\n" msgstr " alrva %08lX ltal %s%s idpontban.\n" #: g10/keyedit.c:4776 #, fuzzy, c-format msgid "You have signed these user IDs on key %s:\n" msgstr "n alrta a kvetkez felhasznlazonostkat:\n" #: g10/keyedit.c:4802 #, fuzzy msgid " (non-revocable)" msgstr " (nem exportlhat)" #: g10/keyedit.c:4809 #, fuzzy, c-format msgid "revoked by your key %s on %s\n" msgstr " visszavonva %08lX ltal %s idpontban.\n" #: g10/keyedit.c:4831 msgid "You are about to revoke these signatures:\n" msgstr "A kvetkez alrsokat fogja visszavonni:\n" #: g10/keyedit.c:4851 msgid "Really create the revocation certificates? (y/N) " msgstr "Valban ltrehozzam a visszavon igazolst? (i/N) " #: g10/keyedit.c:4881 msgid "no secret key\n" msgstr "Nincs titkos kulcs.\n" #: g10/keyedit.c:4951 #, c-format msgid "user ID \"%s\" is already revoked\n" msgstr "\"%s\" felhasznli azonostt mr visszavontk.\n" #: g10/keyedit.c:4968 #, c-format msgid "WARNING: a user ID signature is dated %d seconds in the future\n" msgstr "" "FIGYELEM: A felhasznlazonostt %d msodperccel a jvben rtk al.\n" #: g10/keyedit.c:5032 #, fuzzy, c-format msgid "Key %s is already revoked.\n" msgstr "\"%s\" felhasznli azonostt mr visszavontk.\n" #: g10/keyedit.c:5094 #, fuzzy, c-format msgid "Subkey %s is already revoked.\n" msgstr "\"%s\" felhasznli azonostt mr visszavontk.\n" #: g10/keyedit.c:5189 #, fuzzy, c-format msgid "Displaying %s photo ID of size %ld for key %s (uid %d)\n" msgstr "%s fotazonost (mret: %ld, kulcs: 0x%08lX, felh: %d) mutatsa.\n" #: g10/keygen.c:264 #, fuzzy, c-format msgid "preference `%s' duplicated\n" msgstr "%c%lu preferencia ktszer szerepel!\n" #: g10/keygen.c:271 #, fuzzy msgid "too many cipher preferences\n" msgstr "Tl sok \"%c\" preferencia.\n" #: g10/keygen.c:273 #, fuzzy msgid "too many digest preferences\n" msgstr "Tl sok \"%c\" preferencia.\n" #: g10/keygen.c:275 #, fuzzy msgid "too many compression preferences\n" msgstr "Tl sok \"%c\" preferencia.\n" #: g10/keygen.c:416 #, fuzzy, c-format msgid "invalid item `%s' in preference string\n" msgstr "rvnytelen karakter a preferencik kztt!\n" #: g10/keygen.c:888 msgid "writing direct signature\n" msgstr "Sima alrst rok.\n" #: g10/keygen.c:928 msgid "writing self signature\n" msgstr "nalrst rok.\n" #: g10/keygen.c:979 msgid "writing key binding signature\n" msgstr "sszefz alrst rok.\n" #: g10/keygen.c:1042 g10/keygen.c:1046 g10/keygen.c:1129 g10/keygen.c:1134 #: g10/keygen.c:1260 g10/keygen.c:1264 g10/keygen.c:2953 #, c-format msgid "keysize invalid; using %u bits\n" msgstr "Kulcsmret rvnytelen; %u bitet hasznlok.\n" #: g10/keygen.c:1051 g10/keygen.c:1140 g10/keygen.c:1148 g10/keygen.c:1269 #: g10/keygen.c:2959 #, c-format msgid "keysize rounded up to %u bits\n" msgstr "Kulcsmretet felkerektettem %u bitre.\n" #: g10/keygen.c:1362 #, fuzzy msgid "Sign" msgstr "sign" #: g10/keygen.c:1365 msgid "Certify" msgstr "" #: g10/keygen.c:1368 #, fuzzy msgid "Encrypt" msgstr "adat titkostsa" #: g10/keygen.c:1371 msgid "Authenticate" msgstr "" #. TRANSLATORS: Please use only plain ASCII characters for the #. translation. If this is not possible use single digits. Here is #. a description of the fucntions: #. #. s = Toggle signing capability #. e = Toggle encryption capability #. a = Toggle authentication capability #. q = Finish #. #: g10/keygen.c:1388 msgid "SsEeAaQq" msgstr "" #: g10/keygen.c:1411 #, c-format msgid "Possible actions for a %s key: " msgstr "" #: g10/keygen.c:1415 msgid "Current allowed actions: " msgstr "" #: g10/keygen.c:1420 #, c-format msgid " (%c) Toggle the sign capability\n" msgstr "" #: g10/keygen.c:1423 #, fuzzy, c-format msgid " (%c) Toggle the encrypt capability\n" msgstr " (%d) ElGamal (csak titkosts)\n" #: g10/keygen.c:1426 #, c-format msgid " (%c) Toggle the authenticate capability\n" msgstr "" #: g10/keygen.c:1429 #, c-format msgid " (%c) Finished\n" msgstr "" #: g10/keygen.c:1489 msgid "Please select what kind of key you want:\n" msgstr "Krem, adja meg, milyen kulcsot kvn:\n" #: g10/keygen.c:1491 #, fuzzy, c-format msgid " (%d) RSA and RSA (default)\n" msgstr " (%d) DSA s ElGamal (alaprtelmezs)\n" #: g10/keygen.c:1493 #, fuzzy, c-format msgid " (%d) DSA and Elgamal\n" msgstr " (%d) DSA s ElGamal (alaprtelmezs)\n" #: g10/keygen.c:1495 #, c-format msgid " (%d) DSA (sign only)\n" msgstr " (%d) DSA (csak alrs)\n" #: g10/keygen.c:1496 #, c-format msgid " (%d) RSA (sign only)\n" msgstr " (%d) RSA (csak alrs)\n" #: g10/keygen.c:1500 #, fuzzy, c-format msgid " (%d) Elgamal (encrypt only)\n" msgstr " (%d) ElGamal (csak titkosts)\n" #: g10/keygen.c:1501 #, c-format msgid " (%d) RSA (encrypt only)\n" msgstr " (%d) RSA (csak titkosts)\n" #: g10/keygen.c:1505 #, fuzzy, c-format msgid " (%d) DSA (set your own capabilities)\n" msgstr " (%d) RSA (csak titkosts)\n" #: g10/keygen.c:1506 #, fuzzy, c-format msgid " (%d) RSA (set your own capabilities)\n" msgstr " (%d) RSA (csak titkosts)\n" #: g10/keygen.c:1616 #, c-format msgid "%s keys may be between %u and %u bits long.\n" msgstr "" #: g10/keygen.c:1624 #, fuzzy, c-format msgid "What keysize do you want for the subkey? (%u) " msgstr "Milyen kulcsmretet szeretne? (1024) " #: g10/keygen.c:1627 #, fuzzy, c-format msgid "What keysize do you want? (%u) " msgstr "Milyen kulcsmretet szeretne? (1024) " #: g10/keygen.c:1642 #, c-format msgid "Requested keysize is %u bits\n" msgstr "A kvnt kulcsmret %u bit.\n" #: g10/keygen.c:1722 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 "" "Krem, adja meg, meddig legyen rvnyes a kulcs!\n" " 0 = a kulcs soha nem jr le\n" " = a kulcs n napig rvnyes\n" " w = a kulcs n htig rvnyes\n" " m = a kulcs n hnapig rvnyes\n" " y = a kulcs n vig rvnyes\n" #: g10/keygen.c:1733 msgid "" "Please specify how long the signature should be valid.\n" " 0 = signature does not expire\n" " = signature expires in n days\n" " w = signature expires in n weeks\n" " m = signature expires in n months\n" " y = signature expires in n years\n" msgstr "" "Krem, adja meg, meddig legyen rvnyes az alrs!\n" " 0 = az alrs soha nem jr le\n" " = az alrs n napig rvnyes\n" " w = az alrs n htig rvnyes\n" " m = az alrs n hnapig rvnyes\n" " y = az alrs n vig rvnyes\n" #: g10/keygen.c:1754 msgid "Key is valid for? (0) " msgstr "Meddig rvnyes a kulcs? (0) " #: g10/keygen.c:1759 #, fuzzy, c-format msgid "Signature is valid for? (%s) " msgstr "Meddig rvnyes az alrs? (0) " #: g10/keygen.c:1777 g10/keygen.c:1802 msgid "invalid value\n" msgstr "rvnytelen rtk!\n" #: g10/keygen.c:1784 #, fuzzy msgid "Key does not expire at all\n" msgstr "%s soha nem jr le.\n" #: g10/keygen.c:1785 #, fuzzy msgid "Signature does not expire at all\n" msgstr "%s soha nem jr le.\n" #: g10/keygen.c:1790 #, fuzzy, c-format msgid "Key expires at %s\n" msgstr "%s lejr: %s\n" #: g10/keygen.c:1791 #, fuzzy, c-format msgid "Signature expires at %s\n" msgstr "Az alrs lejr: %s.\n" #: g10/keygen.c:1795 msgid "" "Your system can't display dates beyond 2038.\n" "However, it will be correctly handled up to 2106.\n" msgstr "" "Az n rendszere nem tud megjelenteni 2038 utni dtumokat.\n" "Azonban kezelni helyesen tudja ket egszen 2106-ig.\n" #: g10/keygen.c:1808 #, fuzzy msgid "Is this correct? (y/N) " msgstr "Ez gy helyes (i/n)? " #: g10/keygen.c:1823 #, fuzzy msgid "" "\n" "You need a user ID to identify your key; the software constructs the user " "ID\n" "from the Real Name, Comment and Email Address in this form:\n" " \"Heinrich Heine (Der Dichter) \"\n" "\n" msgstr "" "\n" "Szksge lesz egy felhasznli azonostra a kulcsa azonostshoz;\n" "a szoftver ezt a teljes nvbl, megjegyzsbl s e-mail cmbl lltja\n" "el a kvetkez formban:\n" " \"Heinrich Heine (a klt) \"\n" "\n" #: g10/keygen.c:1836 msgid "Real name: " msgstr "Teljes nv: " #: g10/keygen.c:1844 msgid "Invalid character in name\n" msgstr "rvnytelen karakter a nvben!\n" #: g10/keygen.c:1846 msgid "Name may not start with a digit\n" msgstr "A nv lehet, hogy nem kezddhet szmmal!\n" #: g10/keygen.c:1848 msgid "Name must be at least 5 characters long\n" msgstr "A nv legalbb 5 karakter kell legyen!\n" #: g10/keygen.c:1856 msgid "Email address: " msgstr "E-mail cm: " #: g10/keygen.c:1862 msgid "Not a valid email address\n" msgstr "Ez nem rvnyes e-mail cm.\n" #: g10/keygen.c:1870 msgid "Comment: " msgstr "Megjegyzs: " #: g10/keygen.c:1876 msgid "Invalid character in comment\n" msgstr "rvnytelen karakter a megjegyzsben!\n" #: g10/keygen.c:1899 #, c-format msgid "You are using the `%s' character set.\n" msgstr "n a(z) %s karakterkdolst hasznlja.\n" #: g10/keygen.c:1905 #, c-format msgid "" "You selected this USER-ID:\n" " \"%s\"\n" "\n" msgstr "" "n a kvetkez felhasznli azonostt vlasztotta:\n" " \"%s\"\n" "\n" #: g10/keygen.c:1910 msgid "Please don't put the email address into the real name or the comment\n" msgstr "Krem, ne rakja az e-mail cmet a teljes nvbe vagy a megjegyzsbe!\n" #. TRANSLATORS: These are the allowed answers in #. lower and uppercase. Below you will find the matching #. string which should be translated accordingly and the #. letter changed to match the one in the answer string. #. #. n = Change name #. c = Change comment #. e = Change email #. o = Okay (ready, continue) #. q = Quit #. #: g10/keygen.c:1926 msgid "NnCcEeOoQq" msgstr "NnMmEeRrKk" #: g10/keygen.c:1936 msgid "Change (N)ame, (C)omment, (E)mail or (Q)uit? " msgstr "(N)v, (M)egjegyzs, (E)-mail megvltoztatsa vagy (K)ilps? " #: g10/keygen.c:1937 msgid "Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? " msgstr "" "(N)v, (M)egjegyzs, (E)-mail megvltoztatsa vagy (R)endben/(K)ilps? " #: g10/keygen.c:1956 msgid "Please correct the error first\n" msgstr "Krem, elbb javtsa ki a hibt!\n" #: g10/keygen.c:1996 msgid "" "You need a Passphrase to protect your secret key.\n" "\n" msgstr "" "Most szksg van egy jelszra (vagy mondatra), amely a titkos kulcst vdi.\n" "\n" #: g10/keygen.c:2006 g10/passphrase.c:819 #, c-format msgid "%s.\n" msgstr "%s.\n" #: g10/keygen.c:2012 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 nem akar jelszt. Ez valsznleg egy *rossz* tlet!\n" "De azrt megcsinlom. Brmikor megvltoztathatja a jelszavt\n" "az \"--edit-key\" opcival.\n" "\n" #: g10/keygen.c:2034 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 "" "Nagyon sok vletlen bjtra van szksgnk. J tlet, ha csinl valami\n" "egyb mveletet (gpel a billentyzeten, mozgatja az egeret, hasznlja\n" "a lemezeket) a prmszm generlsa alatt. Ez segti a vletlenszm-\n" "genertort, hogy entrpit tudjon gyjteni.\n" #: g10/keygen.c:2899 msgid "Key generation canceled.\n" msgstr "Kulcs ltrehozsa megszaktva.\n" #: g10/keygen.c:3099 g10/keygen.c:3266 #, c-format msgid "writing public key to `%s'\n" msgstr "rom a kulcsot a %s llomnyba.\n" #: g10/keygen.c:3101 g10/keygen.c:3269 #, fuzzy, c-format msgid "writing secret key stub to `%s'\n" msgstr "rom a titkos kulcsot a %s llomnyba.\n" #: g10/keygen.c:3104 g10/keygen.c:3272 #, c-format msgid "writing secret key to `%s'\n" msgstr "rom a titkos kulcsot a %s llomnyba.\n" #: g10/keygen.c:3255 #, c-format msgid "no writable public keyring found: %s\n" msgstr "Nem rhat nyilvnoskulcs-karikt talltam: %s\n" #: g10/keygen.c:3261 #, c-format msgid "no writable secret keyring found: %s\n" msgstr "Nem rhat titkoskulcs-karikt talltam: %s\n" #: g10/keygen.c:3279 #, c-format msgid "error writing public keyring `%s': %s\n" msgstr "Hiba a(z) \"%s\" nyilvnoskulcs-karika rsakor: %s.\n" #: g10/keygen.c:3286 #, c-format msgid "error writing secret keyring `%s': %s\n" msgstr "Hiba a(z) \"%s\" titkoskulcs-karika rsakor: %s.\n" #: g10/keygen.c:3309 msgid "public and secret key created and signed.\n" msgstr "A nyilvnos s titkos kulcsokat ltrehoztam s alrtam.\n" #: g10/keygen.c:3320 #, fuzzy msgid "" "Note that this key cannot be used for encryption. You may want to use\n" "the command \"--edit-key\" to generate a subkey for this purpose.\n" msgstr "" "Ez a kulcs nem hasznlhat titkostsra. Ha egy msodlagos kulcsot\n" "kvn ilyen clra ltrehozni, azt az \"--edit-key\" parancs segtsgvel\n" "teheti meg.\n" #: g10/keygen.c:3332 g10/keygen.c:3465 g10/keygen.c:3581 #, c-format msgid "Key generation failed: %s\n" msgstr "Kulcsgenerls sikertelen: %s\n" #: g10/keygen.c:3384 g10/keygen.c:3514 g10/sign.c:242 #, c-format msgid "" "key has been created %lu second in future (time warp or clock problem)\n" msgstr "" "A kulcs %lu msodperccel a jvben kszlt. (Idugrs vagy raproblma.)\n" #: g10/keygen.c:3386 g10/keygen.c:3516 g10/sign.c:244 #, c-format msgid "" "key has been created %lu seconds in future (time warp or clock problem)\n" msgstr "" "A kulcs %lu msodperccel a jvben kszlt. (Idugrs vagy raproblma.)\n" #: g10/keygen.c:3395 g10/keygen.c:3527 msgid "NOTE: creating subkeys for v3 keys is not OpenPGP compliant\n" msgstr "" "MEGJEGYZS: Alkulcsok ltrehozsa v3 kulcsokhoz nem OpenPGP-megfelel.\n" #: g10/keygen.c:3434 g10/keygen.c:3560 #, fuzzy msgid "Really create? (y/N) " msgstr "Valban ltrehozzam? " #: g10/keygen.c:3747 #, fuzzy, c-format msgid "storing key onto card failed: %s\n" msgstr "A kulcsblokk trlse sikertelen: %s.\n" #: g10/keygen.c:3794 #, fuzzy, c-format msgid "can't create backup file `%s': %s\n" msgstr "Nem tudom ltrehozni a(z) \"%s\" llomnyt: %s.\n" #: g10/keygen.c:3820 #, fuzzy, c-format msgid "NOTE: backup of card key saved to `%s'\n" msgstr "MEGJEGYZS: %08lX titkos kulcs %s-kor lejrt.\n" #: g10/keyid.c:505 g10/keyid.c:517 g10/keyid.c:529 g10/keyid.c:541 msgid "never " msgstr "soha " #: g10/keylist.c:265 msgid "Critical signature policy: " msgstr "Kritikus alrsi eljrsmd: " #: g10/keylist.c:267 msgid "Signature policy: " msgstr "Alrsi eljrsmd: " #: g10/keylist.c:306 msgid "Critical preferred keyserver: " msgstr "" #: g10/keylist.c:359 msgid "Critical signature notation: " msgstr "Kritikus alrs-jells: " #: g10/keylist.c:361 msgid "Signature notation: " msgstr "Alrs-jells: " #: g10/keylist.c:471 msgid "Keyring" msgstr "Kulcskarika" #: g10/keylist.c:1516 msgid "Primary key fingerprint:" msgstr "Elsdlegeskulcs-ujjlenyomat:" #: g10/keylist.c:1518 msgid " Subkey fingerprint:" msgstr " Alkulcsujjlenyomat:" #. TRANSLATORS: this should fit into 24 bytes to that the #. * fingerprint data is properly aligned with the user ID #: g10/keylist.c:1525 msgid " Primary key fingerprint:" msgstr "Elsdlegeskulcs-ujjlenyomat:" #: g10/keylist.c:1527 msgid " Subkey fingerprint:" msgstr " Alkulcsujjlenyomat:" #: g10/keylist.c:1531 g10/keylist.c:1535 #, fuzzy msgid " Key fingerprint =" msgstr " Kulcs ujjlenyomata =" #: g10/keylist.c:1602 msgid " Card serial no. =" msgstr "" #: g10/keyring.c:1274 #, fuzzy, c-format msgid "renaming `%s' to `%s' failed: %s\n" msgstr "Pnclozs nem sikerlt: %s\n" #: g10/keyring.c:1304 msgid "WARNING: 2 files with confidential information exists.\n" msgstr "FIGYELEM: 2 bizalmas informcikat tartalmaz llomny van!\n" #: g10/keyring.c:1305 #, c-format msgid "%s is the unchanged one\n" msgstr "%s az eredeti pldny.\n" #: g10/keyring.c:1306 #, c-format msgid "%s is the new one\n" msgstr "%s az j pldny.\n" #: g10/keyring.c:1307 msgid "Please fix this possible security flaw\n" msgstr "Krem, oldja meg ezt a lehetsges biztonsgi problmt!\n" #: g10/keyring.c:1407 #, fuzzy, c-format msgid "caching keyring `%s'\n" msgstr "Ellenrzm a(z) \"%s\" kulcskarikt.\n" #: g10/keyring.c:1466 #, fuzzy, c-format msgid "%lu keys cached so far (%lu signatures)\n" msgstr "%lu kulcsot ellenriztem (%lu alrssal).\n" #: g10/keyring.c:1478 #, fuzzy, c-format msgid "%lu keys cached (%lu signatures)\n" msgstr "%lu kulcsot ellenriztem (%lu alrssal).\n" #: g10/keyring.c:1549 #, c-format msgid "%s: keyring created\n" msgstr "%s: Kulcskarikt ltrehoztam.\n" #: g10/keyserver.c:70 msgid "include revoked keys in search results" msgstr "" #: g10/keyserver.c:71 msgid "include subkeys when searching by key ID" msgstr "" #: g10/keyserver.c:73 msgid "use temporary files to pass data to keyserver helpers" msgstr "" #: g10/keyserver.c:75 msgid "do not delete temporary files after using them" msgstr "" #: g10/keyserver.c:79 msgid "automatically retrieve keys when verifying signatures" msgstr "" #: g10/keyserver.c:81 #, fuzzy msgid "honor the preferred keyserver URL set on the key" msgstr "A megadott alrsi eljrsmd URL-je rvnytelen!\n" #: g10/keyserver.c:83 msgid "honor the PKA record set on a key when retrieving keys" msgstr "" #: g10/keyserver.c:149 #, fuzzy, c-format msgid "WARNING: keyserver option `%s' is not used on this platform\n" msgstr "" "FIGYELEM: \"%s\" opcii csak a kvetkez futskor lesznek rvnyesek!\n" #: g10/keyserver.c:538 #, fuzzy msgid "disabled" msgstr "disable" #: g10/keyserver.c:739 msgid "Enter number(s), N)ext, or Q)uit > " msgstr "" #: g10/keyserver.c:823 g10/keyserver.c:1578 #, fuzzy, c-format msgid "invalid keyserver protocol (us %d!=handler %d)\n" msgstr "rvnytelen export opcik!\n" #: g10/keyserver.c:921 #, fuzzy, c-format msgid "key \"%s\" not found on keyserver\n" msgstr "\"%s\" kulcs nem tallhat: %s\n" #: g10/keyserver.c:923 #, fuzzy msgid "key not found on keyserver\n" msgstr "\"%s\" kulcs nem tallhat: %s\n" #: g10/keyserver.c:1269 #, fuzzy, c-format msgid "requesting key %s from %s server %s\n" msgstr "Lekrem a %08lX kulcsot a %s kulcsszerverrl.\n" #: g10/keyserver.c:1273 #, fuzzy, c-format msgid "requesting key %s from %s\n" msgstr "Lekrem a %08lX kulcsot a %s kulcsszerverrl.\n" #: g10/keyserver.c:1297 #, fuzzy, c-format msgid "searching for names from %s server %s\n" msgstr "Keresem \"%s\"-t a %s HKP szerveren.\n" #: g10/keyserver.c:1300 #, fuzzy, c-format msgid "searching for names from %s\n" msgstr "Keresem \"%s\"-t a %s HKP szerveren.\n" #: g10/keyserver.c:1478 #, fuzzy, c-format msgid "sending key %s to %s server %s\n" msgstr "Keresem \"%s\"-t a %s HKP szerveren.\n" #: g10/keyserver.c:1482 #, fuzzy, c-format msgid "sending key %s to %s\n" msgstr "" "\"\n" "Alrva az n %08lX kulcsval %s idpontban.\n" #: g10/keyserver.c:1525 #, fuzzy, c-format msgid "searching for \"%s\" from %s server %s\n" msgstr "Keresem \"%s\"-t a %s HKP szerveren.\n" #: g10/keyserver.c:1528 #, fuzzy, c-format msgid "searching for \"%s\" from %s\n" msgstr "Keresem \"%s\"-t a %s HKP szerveren.\n" #: g10/keyserver.c:1535 g10/keyserver.c:1657 #, fuzzy msgid "no keyserver action!\n" msgstr "rvnytelen export opcik!\n" #: g10/keyserver.c:1586 #, c-format msgid "WARNING: keyserver handler from a different version of GnuPG (%s)\n" msgstr "" #: g10/keyserver.c:1603 msgid "keyserver did not send VERSION\n" msgstr "" #: g10/keyserver.c:1641 g10/keyserver.c:1736 #, fuzzy, c-format msgid "keyserver communications error: %s\n" msgstr "Vtel a kulcsszerverrl sikertelen: %s\n" #: g10/keyserver.c:1679 g10/keyserver.c:2207 msgid "no keyserver known (use option --keyserver)\n" msgstr "" #: g10/keyserver.c:1685 msgid "external keyserver calls are not supported in this build\n" msgstr "" #: g10/keyserver.c:1699 #, c-format msgid "no handler for keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1704 #, c-format msgid "action `%s' not supported with keyserver scheme `%s'\n" msgstr "" #: g10/keyserver.c:1712 #, c-format msgid "%s does not support handler version %d\n" msgstr "" #: g10/keyserver.c:1719 #, fuzzy msgid "keyserver timed out\n" msgstr "kulcsszerverhiba" #: g10/keyserver.c:1727 #, fuzzy msgid "keyserver internal error\n" msgstr "kulcsszerverhiba" #: g10/keyserver.c:1761 g10/keyserver.c:1795 #, c-format msgid "\"%s\" not a key ID: skipping\n" msgstr "" #: g10/keyserver.c:2054 #, fuzzy, c-format msgid "WARNING: unable to refresh key %s via %s: %s\n" msgstr "" "FIGYELEM: Nem tudom trlni az (\"%s\") tmeneti llomnyt: \"%s\": %s.\n" #: g10/keyserver.c:2076 #, fuzzy, c-format msgid "refreshing 1 key from %s\n" msgstr "Lekrem a %08lX kulcsot a %s kulcsszerverrl.\n" #: g10/keyserver.c:2078 #, fuzzy, c-format msgid "refreshing %d keys from %s\n" msgstr "Lekrem a %08lX kulcsot a %s kulcsszerverrl.\n" #: g10/keyserver.c:2134 #, fuzzy, c-format msgid "WARNING: unable to fetch URI %s: %s\n" msgstr "" "FIGYELEM: Nem tudom trlni az (\"%s\") tmeneti llomnyt: \"%s\": %s.\n" #: g10/keyserver.c:2140 #, fuzzy, c-format msgid "WARNING: unable to parse URI %s\n" msgstr "" "FIGYELEM: Nem tudom trlni az (\"%s\") tmeneti llomnyt: \"%s\": %s.\n" #: g10/mainproc.c:249 #, c-format msgid "weird size for an encrypted session key (%d)\n" msgstr "Furcsa mret (%d) titkostott munkafolyamatkulcs.\n" #: g10/mainproc.c:294 #, c-format msgid "%s encrypted session key\n" msgstr "%s titkostott munkafolyamatkulcs\n" #: g10/mainproc.c:304 #, fuzzy, c-format msgid "passphrase generated with unknown digest algorithm %d\n" msgstr "Ismeretlen algoritmussal (%d) titkostva.\n" #: g10/mainproc.c:385 #, fuzzy, c-format msgid "public key is %s\n" msgstr "Nyilvnos kulcs: %08lX\n" #: g10/mainproc.c:449 msgid "public key encrypted data: good DEK\n" msgstr "Nyilvnos kulccsal titkostott adat: j DEK.\n" #: g10/mainproc.c:482 #, fuzzy, c-format msgid "encrypted with %u-bit %s key, ID %s, created %s\n" msgstr "Titkostva %u bites %s kulccsal, azonost: %08lX, ltrehozva: %s\n" #: g10/mainproc.c:486 g10/pkclist.c:220 #, fuzzy, c-format msgid " \"%s\"\n" msgstr " azaz \"" #: g10/mainproc.c:490 #, fuzzy, c-format msgid "encrypted with %s key, ID %s\n" msgstr "Titkostva %s kulccsal, azonost: %08lX\n" #: g10/mainproc.c:505 #, c-format msgid "public key decryption failed: %s\n" msgstr "Nyilvnos kulcs visszafejts sikertelen: %s\n" #: g10/mainproc.c:526 #, c-format msgid "encrypted with %lu passphrases\n" msgstr "%lu jelszval rejtjelezve\n" #: g10/mainproc.c:528 msgid "encrypted with 1 passphrase\n" msgstr "1 jelszval rejtjelezve\n" #: g10/mainproc.c:561 g10/mainproc.c:582 #, c-format msgid "assuming %s encrypted data\n" msgstr "%s titkostott adatot felttelezek.\n" #: g10/mainproc.c:568 #, c-format msgid "IDEA cipher unavailable, optimistically attempting to use %s instead\n" msgstr "" "IDEA rejtjelez nem ll rendelkezsre, optimista mdon megprblok\n" "%s-t hasznlni helyette.\n" #: g10/mainproc.c:605 msgid "decryption okay\n" msgstr "Visszafejts rendben.\n" #: g10/mainproc.c:609 msgid "WARNING: message was not integrity protected\n" msgstr "FIGYELEM: Az zenetet nem lttk el integritsvdelemmel.\n" #: g10/mainproc.c:612 msgid "WARNING: encrypted message has been manipulated!\n" msgstr "FIGYELEM: A titkostott zenetet manipulltk!\n" #: g10/mainproc.c:618 #, c-format msgid "decryption failed: %s\n" msgstr "Visszafejts sikertelen: %s.\n" #: g10/mainproc.c:639 msgid "NOTE: sender requested \"for-your-eyes-only\"\n" msgstr "MEGJEGYZS: A felad krse: \"csak az n szemeinek\".\n" #: g10/mainproc.c:641 #, c-format msgid "original file name='%.*s'\n" msgstr "Eredeti fjlnv: '%.*s'.\n" #: g10/mainproc.c:726 msgid "WARNING: multiple plaintexts seen\n" msgstr "" #: g10/mainproc.c:852 msgid "standalone revocation - use \"gpg --import\" to apply\n" msgstr "" "Klnll visszavons. Hasznlja a \"gpg --import\"-ot az alkalmazshoz!\n" #: g10/mainproc.c:1200 #, fuzzy msgid "no signature found\n" msgstr "J alrs a kvetkeztl: \"" #: g10/mainproc.c:1471 msgid "signature verification suppressed\n" msgstr "Alrs-ellenrzs elnyomva.\n" #: g10/mainproc.c:1580 #, fuzzy msgid "can't handle this ambiguous signature data\n" msgstr "Nem tudom kezelni ezeket a tbbszrs alrsokat!\n" #: g10/mainproc.c:1591 #, fuzzy, c-format msgid "Signature made %s\n" msgstr "Az alrs lejrt: %s.\n" #: g10/mainproc.c:1592 #, fuzzy, c-format msgid " using %s key %s\n" msgstr " azaz \"" #: g10/mainproc.c:1596 #, fuzzy, c-format msgid "Signature made %s using %s key ID %s\n" msgstr "Alrva: %.*s; kulcs: %s, %08lX.\n" #: g10/mainproc.c:1616 msgid "Key available at: " msgstr "Kulcs tallhat: " #: g10/mainproc.c:1749 g10/mainproc.c:1797 #, fuzzy, c-format msgid "BAD signature from \"%s\"" msgstr "ROSSZ alrs a kvetkeztl: \"" #: g10/mainproc.c:1751 g10/mainproc.c:1799 #, fuzzy, c-format msgid "Expired signature from \"%s\"" msgstr "Lejrt alrs a kvetkeztl: \"" #: g10/mainproc.c:1753 g10/mainproc.c:1801 #, fuzzy, c-format msgid "Good signature from \"%s\"" msgstr "J alrs a kvetkeztl: \"" #: g10/mainproc.c:1805 msgid "[uncertain]" msgstr "[bizonytalan]" #: g10/mainproc.c:1839 #, fuzzy, c-format msgid " aka \"%s\"" msgstr " azaz \"" #: g10/mainproc.c:1937 #, c-format msgid "Signature expired %s\n" msgstr "Az alrs lejrt: %s.\n" #: g10/mainproc.c:1942 #, c-format msgid "Signature expires %s\n" msgstr "Az alrs lejr: %s.\n" #: g10/mainproc.c:1945 #, c-format msgid "%s signature, digest algorithm %s\n" msgstr "%s alrs, %s kivonatol algoritmus.\n" #: g10/mainproc.c:1946 msgid "binary" msgstr "Binris" #: g10/mainproc.c:1947 msgid "textmode" msgstr "Szvegmd" #: g10/mainproc.c:1947 g10/trustdb.c:551 msgid "unknown" msgstr "Ismeretlen md" #: g10/mainproc.c:1981 #, c-format msgid "WARNING: not a detached signature; file '%s' was NOT verified!\n" msgstr "" #: g10/mainproc.c:2005 #, c-format msgid "Can't check signature: %s\n" msgstr "Nem tudom ellenrizni az alrst: %s.\n" #: g10/mainproc.c:2074 g10/mainproc.c:2090 g10/mainproc.c:2176 msgid "not a detached signature\n" msgstr "Nem klnll alrs.\n" #: g10/mainproc.c:2117 msgid "" "WARNING: multiple signatures detected. Only the first will be checked.\n" msgstr "FIGYELEM: Tbbszrs alrst rzkeltem. Csak az elst ellenrzm.\n" #: g10/mainproc.c:2125 #, c-format msgid "standalone signature of class 0x%02x\n" msgstr "0x%02x osztly klnll alrs.\n" #: g10/mainproc.c:2182 msgid "old style (PGP 2.x) signature\n" msgstr "Rgi stlus (PGP 2.x) alrs.\n" #: g10/mainproc.c:2192 msgid "invalid root packet detected in proc_tree()\n" msgstr "rvnytelen gykrcsomagot talltam a proc_tree() fggvnyben!\n" #: g10/misc.c:124 #, c-format msgid "can't disable core dumps: %s\n" msgstr "Nem tudom letiltani a core fjlokat: %s.\n" #: g10/misc.c:144 g10/misc.c:172 g10/misc.c:244 #, fuzzy, c-format msgid "fstat of `%s' failed in %s: %s\n" msgstr "Nem tudom megnyitni az llomnyt: %s.\n" #: g10/misc.c:209 #, fuzzy, c-format msgid "fstat(%d) failed in %s: %s\n" msgstr "Bizalmi adatbzis: olvass sikertelen (n=%d): %s.\n" #: g10/misc.c:307 #, fuzzy, c-format msgid "WARNING: using experimental public key algorithm %s\n" msgstr "Nem tudom kezelni a(z) %d. szm nyilvnos kulcs algoritmust!\n" #: g10/misc.c:313 #, fuzzy msgid "WARNING: Elgamal sign+encrypt keys are deprecated\n" msgstr "" "%s (%d) kivonatol algoritmus hasznlatnak erltetse ellenttes\n" "a cmzett preferenciival.\n" #: g10/misc.c:326 #, fuzzy, c-format msgid "WARNING: using experimental cipher algorithm %s\n" msgstr "nem megvalstott rejtjelez algoritmus" #: g10/misc.c:343 #, fuzzy, c-format msgid "WARNING: using experimental digest algorithm %s\n" msgstr "%s alrs, %s kivonatol algoritmus.\n" #: g10/misc.c:350 g10/misc.c:456 #, fuzzy, c-format msgid "WARNING: digest algorithm %s is deprecated\n" msgstr "" "%s (%d) kivonatol algoritmus hasznlatnak erltetse ellenttes\n" "a cmzett preferenciival.\n" #: g10/misc.c:458 g10/misc.c:473 g10/sig-check.c:101 #, fuzzy, c-format msgid "please see %s for more information\n" msgstr " i = tovbbi informcikat krek\n" #: g10/misc.c:472 #, fuzzy, c-format msgid "NOTE: This feature is not available in %s\n" msgstr "GPG gynk nem elrhet ebben a munkafolyamatban.\n" #: g10/misc.c:729 #, c-format msgid "%s:%d: deprecated option \"%s\"\n" msgstr "%s:%d: Elavult opci: \"%s\"\n" #: g10/misc.c:733 #, c-format msgid "WARNING: \"%s\" is a deprecated option\n" msgstr "FIGYELEM: \"%s\" elavult opci!\n" #: g10/misc.c:735 #, c-format msgid "please use \"%s%s\" instead\n" msgstr "Krem, ezt hasznlja helyette: \"%s%s\"\n" #: g10/misc.c:742 #, fuzzy, c-format msgid "WARNING: \"%s\" is a deprecated command - do not use it\n" msgstr "FIGYELEM: \"%s\" elavult opci!\n" #: g10/misc.c:755 msgid "Uncompressed" msgstr "tmrtetlen" #. TRANSLATORS: See doc/TRANSLATE about this string. #: g10/misc.c:780 #, fuzzy msgid "uncompressed|none" msgstr "tmrtetlen" #: g10/misc.c:907 #, c-format msgid "this message may not be usable by %s\n" msgstr "Lehet, hogy ez az zenet hasznlhatatlan a %s szmra!\n" #: g10/misc.c:1082 #, fuzzy, c-format msgid "ambiguous option `%s'\n" msgstr "Az opcikat a \"%s\" llomnybl olvasom.\n" #: g10/misc.c:1107 #, fuzzy, c-format msgid "unknown option `%s'\n" msgstr "Ismeretlen alaprtelmezett cmzett: \"%s\"\n" #: g10/misc.c:1331 #, fuzzy, c-format msgid "Unknown weak digest '%s'\n" msgstr "ismeretlen alrsosztly" #: g10/openfile.c:88 #, c-format msgid "File `%s' exists. " msgstr "\"%s\" llomny ltezik. " #: g10/openfile.c:92 #, fuzzy msgid "Overwrite? (y/N) " msgstr "Fellrjam (i/N)? " #: g10/openfile.c:129 #, c-format msgid "%s: unknown suffix\n" msgstr "%s: ismeretlen vgzds.\n" #: g10/openfile.c:152 msgid "Enter new filename" msgstr "rja be az j llomnynevet" #: g10/openfile.c:197 msgid "writing to stdout\n" msgstr "rok a szabvnyos kimenetre.\n" #: g10/openfile.c:357 #, c-format msgid "assuming signed data in `%s'\n" msgstr "Azt felttelezem, hogy az alrt adat a %s llomnyban van.\n" #: g10/openfile.c:437 #, c-format msgid "new configuration file `%s' created\n" msgstr "\"%s\" j konfigurcis llomnyt ltrehoztam.\n" #: g10/openfile.c:439 #, c-format msgid "WARNING: options in `%s' are not yet active during this run\n" msgstr "" "FIGYELEM: \"%s\" opcii csak a kvetkez futskor lesznek rvnyesek!\n" #: g10/openfile.c:471 #, fuzzy, c-format msgid "directory `%s' created\n" msgstr "%s: Knyvtrat ltrehoztam.\n" #: g10/parse-packet.c:149 #, c-format msgid "can't handle public key algorithm %d\n" msgstr "Nem tudom kezelni a(z) %d. szm nyilvnos kulcs algoritmust!\n" #: g10/parse-packet.c:768 msgid "WARNING: potentially insecure symmetrically encrypted session key\n" msgstr "" "FIGYELEM: A rejtjelezett munkafolyamat-kulcs lehet, hogy nem biztonsgos!\n" #: g10/parse-packet.c:1227 #, c-format msgid "subpacket of type %d has critical bit set\n" msgstr "A %d tpus alcsomag kritikus bitje belltott.\n" #: g10/passphrase.c:319 msgid "gpg-agent is not available in this session\n" msgstr "GPG gynk nem elrhet ebben a munkafolyamatban.\n" #: g10/passphrase.c:335 msgid "malformed GPG_AGENT_INFO environment variable\n" msgstr "Nem megfelel formj GPG_AGENT_INFO krnyezeti vltoz!\n" #: g10/passphrase.c:354 #, c-format msgid "gpg-agent protocol version %d is not supported\n" msgstr "%d gpg-agent protokollverzi nem tmogatott!\n" #: g10/passphrase.c:371 #, c-format msgid "can't connect to `%s': %s\n" msgstr "Nem tudok kapcsoldni \"%s\" objektumhoz: %s\n" #: g10/passphrase.c:388 g10/passphrase.c:664 g10/passphrase.c:754 msgid "problem with the agent - disabling agent use\n" msgstr "Problma van az gynkkel. Letiltom a hasznlatt.\n" #: g10/passphrase.c:541 g10/passphrase.c:923 #, fuzzy, c-format msgid " (main key ID %s)" msgstr "" " \n" " (f kulcsazonost: %08lX)" #: g10/passphrase.c:555 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for user:\n" "\"%.*s\"\n" "%u-bit %s key, ID %s, created %s%s\n" msgstr "" "Most meg kell adnia a jelszt, mellyel a kvetkez felhasznl\n" "titkos kulcsa hasznlatba vehet:\n" "\"%.*s\"\n" "%u bites %s key, azonost: %08lX, ltrehozva: %s%s\n" #: g10/passphrase.c:580 msgid "Repeat passphrase\n" msgstr "Ismtelje meg a jelszt!\n" #: g10/passphrase.c:582 msgid "Enter passphrase\n" msgstr "rja be a jelszt!\n" #: g10/passphrase.c:658 msgid "cancelled by user\n" msgstr "A felhasznl megszaktotta a mveletet.\n" #: g10/passphrase.c:814 g10/passphrase.c:983 #, fuzzy msgid "can't query passphrase in batch mode\n" msgstr "Nem tudok jelszt bekrni ktegelt mdban!\n" #: g10/passphrase.c:821 g10/passphrase.c:988 msgid "Enter passphrase: " msgstr "rja be a jelszt: " #: g10/passphrase.c:904 #, fuzzy, c-format msgid "" "You need a passphrase to unlock the secret key for\n" "user: \"%s\"\n" msgstr "" "\n" "Jelszra van szksge a kvetkez felhasznl titkos kulcsnak " "hasznlathoz:\n" "\"" #: g10/passphrase.c:910 #, fuzzy, c-format msgid "%u-bit %s key, ID %s, created %s" msgstr "%u bites %s kulcs, azonost: %08lX, ltrehozva: %s." #: g10/passphrase.c:919 #, c-format msgid " (subkey on main key ID %s)" msgstr "" #: g10/passphrase.c:996 msgid "Repeat passphrase: " msgstr "Ismtelje meg a jelszt: " #: g10/photoid.c:72 msgid "" "\n" "Pick an image to use for your photo ID. The image must be a JPEG file.\n" "Remember that the image is stored within your public key. If you use a\n" "very large picture, your key will become very large as well!\n" "Keeping the image close to 240x288 is a good size to use.\n" msgstr "" "\n" "Vlasszon egy kpet a fotazonostjhoz! A kp JPEG formtum legyen!\n" "Emlkeztetjk, hogy a kp a nyilvnos kulcsban troldik. Ha nagyon nagy\n" "kpet hasznl, a kulcsa is nagyon nagy lesz!\n" "A 240x288 krli kpmret jl hasznlhat.\n" #: g10/photoid.c:94 msgid "Enter JPEG filename for photo ID: " msgstr "Adja meg egy JPEG fjl nevt a fotazonosthoz: " #: g10/photoid.c:115 #, fuzzy, c-format msgid "unable to open JPEG file `%s': %s\n" msgstr "Nem tudom megnyitni az llomnyt: %s.\n" #: g10/photoid.c:126 #, c-format msgid "This JPEG is really large (%d bytes) !\n" msgstr "" #: g10/photoid.c:128 #, fuzzy msgid "Are you sure you want to use it? (y/N) " msgstr "Biztos abban, hogy hasznlni akarja (i/N)? " #: g10/photoid.c:144 #, fuzzy, c-format msgid "`%s' is not a JPEG file\n" msgstr "\"%s\" nem JPEG llomny.\n" #: g10/photoid.c:163 msgid "Is this photo correct (y/N/q)? " msgstr "Ez a fot megfelel (i/N/k)? " #: g10/photoid.c:333 msgid "no photo viewer set\n" msgstr "" #: g10/photoid.c:387 msgid "unable to display photo ID!\n" msgstr "Nem tudom megjelenteni a fotazonostt!\n" #: g10/pkclist.c:63 g10/revoke.c:619 msgid "No reason specified" msgstr "Nincs megadva ok." #: g10/pkclist.c:65 g10/revoke.c:621 msgid "Key is superseded" msgstr "A kulcsot lecserltk." #: g10/pkclist.c:67 g10/revoke.c:620 msgid "Key has been compromised" msgstr "A kulcs kompromittldott." #: g10/pkclist.c:69 g10/revoke.c:622 msgid "Key is no longer used" msgstr "A kulcs mr nem hasznlatos." #: g10/pkclist.c:71 g10/revoke.c:623 msgid "User ID is no longer valid" msgstr "A felhasznli azonost mr nem rvnyes." #: g10/pkclist.c:75 msgid "reason for revocation: " msgstr "Visszavons oka: " #: g10/pkclist.c:92 msgid "revocation comment: " msgstr "Megjegyzs a visszavonshoz: " #. TRANSLATORS: These are the allowed answers in lower and #. uppercase. Below you will find the matching strings which #. should be translated accordingly and the letter changed to #. match the one in the answer string. #. #. i = please show me more information #. m = back to the main menu #. s = skip this key #. q = quit #. #: g10/pkclist.c:207 msgid "iImMqQsS" msgstr "iIfFkKhH" #: g10/pkclist.c:215 #, fuzzy msgid "No trust value assigned to:\n" msgstr "" "Nincs megbzhatsgi rtk rendelve:\n" "%4u%c/%08lX %s \"" #: g10/pkclist.c:248 #, fuzzy, c-format msgid " aka \"%s\"\n" msgstr " azaz \"" #: g10/pkclist.c:258 #, fuzzy msgid "" "How much do you trust that this key actually belongs to the named user?\n" msgstr "Ez a kulcs valsznleg a jelzett tulajdonoshoz tartozik.\n" #: g10/pkclist.c:273 #, fuzzy, c-format msgid " %d = I don't know or won't say\n" msgstr " %d = Nem tudom\n" #: g10/pkclist.c:275 #, fuzzy, c-format msgid " %d = I do NOT trust\n" msgstr " %d = NEM bzom benne\n" #: g10/pkclist.c:281 #, fuzzy, c-format msgid " %d = I trust ultimately\n" msgstr " %d = alapveten megbzom benne\n" #: g10/pkclist.c:287 #, fuzzy msgid " m = back to the main menu\n" msgstr " f = visszatrs a fmenbe\n" #: g10/pkclist.c:290 #, fuzzy msgid " s = skip this key\n" msgstr " h = kulcs kihagysa\n" #: g10/pkclist.c:291 #, fuzzy msgid " q = quit\n" msgstr " k = kilps\n" #: g10/pkclist.c:295 #, c-format msgid "" "The minimum trust level for this key is: %s\n" "\n" msgstr "" #: g10/pkclist.c:301 g10/revoke.c:648 msgid "Your decision? " msgstr "Mit vlaszt? " #: g10/pkclist.c:322 #, fuzzy msgid "Do you really want to set this key to ultimate trust? (y/N) " msgstr "Tnyleg be akarja lltani ezt a kulcsot alapveten megbzhatra? " #: g10/pkclist.c:336 msgid "Certificates leading to an ultimately trusted key:\n" msgstr "Alapveten megbzhat kulcshoz vezet igazolsok:\n" #: g10/pkclist.c:421 #, fuzzy, c-format msgid "%s: There is no assurance this key belongs to the named user\n" msgstr "" "%08lX: Semmi jele, hogy ez a kulcs a megadott tulajdonoshoz tartozik.\n" #: g10/pkclist.c:426 #, fuzzy, c-format msgid "%s: There is limited assurance this key belongs to the named user\n" msgstr "" "%08lX: Semmi jele, hogy ez a kulcs a megadott tulajdonoshoz tartozik.\n" #: g10/pkclist.c:432 #, fuzzy msgid "This key probably belongs to the named user\n" msgstr "Ez a kulcs valsznleg a jelzett tulajdonoshoz tartozik.\n" #: g10/pkclist.c:437 msgid "This key belongs to us\n" msgstr "Ez a kulcs hozznk tartozik.\n" #: g10/pkclist.c:463 #, fuzzy msgid "" "It is NOT certain that the key belongs to the person named\n" "in the user ID. If you *really* know what you are doing,\n" "you may answer the next question with yes.\n" msgstr "" "NEM biztos, hogy a kulcs a felhasznli azonostban szerepl\n" "szemlyhez tartozik. Ha n *valban* tudja, hogy mit csinl,\n" "a kvetkez krdsre vlaszolhat igennel.\n" "\n" #: g10/pkclist.c:470 #, fuzzy msgid "Use this key anyway? (y/N) " msgstr "Mgis hasznljuk ezt a kulcsot? " #: g10/pkclist.c:504 msgid "WARNING: Using untrusted key!\n" msgstr "FIGYELEM: Nem bzunk a kulcsban, amit hasznlunk!\n" #: g10/pkclist.c:511 msgid "WARNING: this key might be revoked (revocation key not present)\n" msgstr "FIGYELEM: a kulcsot visszavonhattk (visszavon kulcs nincs jelen).\n" #: g10/pkclist.c:520 msgid "WARNING: This key has been revoked by its designated revoker!\n" msgstr "FIGYELEM: Ezt a kulcsot a kijellt visszavon visszavonta!\n" #: g10/pkclist.c:523 msgid "WARNING: This key has been revoked by its owner!\n" msgstr "FIGYELEM: Ezt a kulcsot a tulajdonosa visszavonta!\n" #: g10/pkclist.c:524 #, fuzzy msgid " This could mean that the signature is forged.\n" msgstr " Ez jelentheti azt, hogy az alrs hamis.\n" #: g10/pkclist.c:530 msgid "WARNING: This subkey has been revoked by its owner!\n" msgstr "FIGYELEM: Ezt az alkulcsot a tulajdonosa visszavonta!\n" #: g10/pkclist.c:535 msgid "Note: This key has been disabled.\n" msgstr "Megjegyzs: Ez a kulcs le lett tiltva.\n" #: g10/pkclist.c:555 #, c-format msgid "Note: Verified signer's address is `%s'\n" msgstr "" #: g10/pkclist.c:562 #, c-format msgid "Note: Signer's address `%s' does not match DNS entry\n" msgstr "" #: g10/pkclist.c:574 msgid "trustlevel adjusted to FULL due to valid PKA info\n" msgstr "" #: g10/pkclist.c:582 msgid "trustlevel adjusted to NEVER due to bad PKA info\n" msgstr "" #: g10/pkclist.c:593 msgid "Note: This key has expired!\n" msgstr "Megjegyzs: Ez a kulcs lejrt!\n" #: g10/pkclist.c:604 msgid "WARNING: This key is not certified with a trusted signature!\n" msgstr "FIGYELEM: Ez a kulcs nincs hitelestve megbzhat alrssal!\n" #: g10/pkclist.c:606 msgid "" " There is no indication that the signature belongs to the owner.\n" msgstr "" " Semmi jele, hogy ez a kulcs a megadott tulajdonoshoz tartozik.\n" #: g10/pkclist.c:614 msgid "WARNING: We do NOT trust this key!\n" msgstr "FIGYELEM: NEM bzunk ebben a kulcsban!\n" #: g10/pkclist.c:615 msgid " The signature is probably a FORGERY.\n" msgstr " Az alrs valsznleg HAMIS.\n" #: g10/pkclist.c:623 msgid "" "WARNING: This key is not certified with sufficiently trusted signatures!\n" msgstr "" "FIGYELEM: Ez a kulcs nincs igazolva kellkppen megbzhat alrssal!\n" #: g10/pkclist.c:625 msgid " It is not certain that the signature belongs to the owner.\n" msgstr " Nem biztos, hogy az alrs a tulajdonoshoz tartozik.\n" #: g10/pkclist.c:824 g10/pkclist.c:871 g10/pkclist.c:1083 g10/pkclist.c:1158 #, c-format msgid "%s: skipped: %s\n" msgstr "%s: kihagyva: %s\n" #: g10/pkclist.c:841 g10/pkclist.c:1126 #, c-format msgid "%s: skipped: public key already present\n" msgstr "%s: kihagyva: nyilvnos kulcs mr szerepel\n" #: g10/pkclist.c:892 msgid "You did not specify a user ID. (you may use \"-r\")\n" msgstr "" "Nem adott meg felhasznli azonostt! (Hasznlhatja a \"-r\" opcit.)\n" #: g10/pkclist.c:916 msgid "Current recipients:\n" msgstr "" #: g10/pkclist.c:942 msgid "" "\n" "Enter the user ID. End with an empty line: " msgstr "" "\n" "Adja meg a felhasznli azonostt! res sorral fejezze be: " #: g10/pkclist.c:967 msgid "No such user ID.\n" msgstr "Nincs ilyen felhasznli azonost.\n" #: g10/pkclist.c:976 g10/pkclist.c:1050 msgid "skipped: public key already set as default recipient\n" msgstr "" "Kihagyva: Nyilvnos kulcs mr be lett lltva alaprtelmezett cmzettnek.\n" #: g10/pkclist.c:997 msgid "Public key is disabled.\n" msgstr "Nyilvnos kulcs nincs engedlyezve.\n" #: g10/pkclist.c:1006 msgid "skipped: public key already set\n" msgstr "Kihagyva: Nyilvnos kulcs mr be lett lltva.\n" #: g10/pkclist.c:1041 #, fuzzy, c-format msgid "unknown default recipient \"%s\"\n" msgstr "Ismeretlen alaprtelmezett cmzett: \"%s\"\n" #: g10/pkclist.c:1103 #, c-format msgid "%s: skipped: public key is disabled\n" msgstr "%s: Kihagyva: Nyilvnos kulcs nincs engedlyezve.\n" #: g10/pkclist.c:1166 msgid "no valid addressees\n" msgstr "Nincsenek rvnyes cmzettek!\n" #: g10/plaintext.c:102 msgid "data not saved; use option \"--output\" to save it\n" msgstr "" "Az adatot nem mentettem el. Hasznlja az \"--output\" opcit a mentshez!\n" #: g10/plaintext.c:146 g10/plaintext.c:151 g10/plaintext.c:169 #, c-format msgid "error creating `%s': %s\n" msgstr "Hiba \"%s\" ltrehozsakor: %s\n" #: g10/plaintext.c:476 msgid "Detached signature.\n" msgstr "Klnll alrs.\n" #: g10/plaintext.c:482 msgid "Please enter name of data file: " msgstr "Krem, adja meg az adatllomny nevt: " #: g10/plaintext.c:514 msgid "reading stdin ...\n" msgstr "Olvasom a szabvnyos bemenetet...\n" #: g10/plaintext.c:555 msgid "no signed data\n" msgstr "Nincs alrt adat.\n" #: g10/plaintext.c:569 #, c-format msgid "can't open signed data `%s'\n" msgstr "Nem tudom megnyitni a(z) \"%s\" alrt adatot!\n" #: g10/pubkey-enc.c:102 #, fuzzy, c-format msgid "anonymous recipient; trying secret key %s ...\n" msgstr "Anonim cmzett. A %08lX titkos kulcsot prblom...\n" #: g10/pubkey-enc.c:133 msgid "okay, we are the anonymous recipient.\n" msgstr "Rendben, mi vagyunk az anonim cmzett.\n" #: g10/pubkey-enc.c:221 msgid "old encoding of the DEK is not supported\n" msgstr "A DEK rgi kdolsa nem tmogatott.\n" #: g10/pubkey-enc.c:240 #, c-format msgid "cipher algorithm %d%s is unknown or disabled\n" msgstr "A %d%s rejtjelez algoritmus ismeretlen vagy tiltott.\n" #: g10/pubkey-enc.c:276 #, fuzzy, c-format msgid "WARNING: cipher algorithm %s not found in recipient preferences\n" msgstr "MEGJEGYZS: %d rejtjelez algoritmus nincs a preferencik kztt.\n" #: g10/pubkey-enc.c:296 #, fuzzy, c-format msgid "NOTE: secret key %s expired at %s\n" msgstr "MEGJEGYZS: %08lX titkos kulcs %s-kor lejrt.\n" #: g10/pubkey-enc.c:302 msgid "NOTE: key has been revoked" msgstr "MEGJEGYZS: A kulcsot visszavontk." #: g10/revoke.c:102 g10/revoke.c:116 g10/revoke.c:128 g10/revoke.c:174 #: g10/revoke.c:186 g10/revoke.c:584 #, c-format msgid "build_packet failed: %s\n" msgstr "build_packet sikertelen: %s.\n" #: g10/revoke.c:145 #, fuzzy, c-format msgid "key %s has no user IDs\n" msgstr "%08lX kulcs: Nincs felhasznli azonost.\n" #: g10/revoke.c:306 msgid "To be revoked by:\n" msgstr "Visszavonja:\n" #: g10/revoke.c:310 msgid "(This is a sensitive revocation key)\n" msgstr "(Ez egy rzkeny visszavon kulcs.)\n" #: g10/revoke.c:314 #, fuzzy msgid "Create a designated revocation certificate for this key? (y/N) " msgstr "Csinljunk egy visszavon igazolst ehhez a kulcshoz? " #: g10/revoke.c:327 g10/revoke.c:550 msgid "ASCII armored output forced.\n" msgstr "ASCII-pnclozott kimenet kivlasztva.\n" #: g10/revoke.c:342 g10/revoke.c:564 #, c-format msgid "make_keysig_packet failed: %s\n" msgstr "make_keysig_packet sikertelen: %s\n" #: g10/revoke.c:405 msgid "Revocation certificate created.\n" msgstr "Visszavon igazols ltrehozva.\n" #: g10/revoke.c:411 #, fuzzy, c-format msgid "no revocation keys found for \"%s\"\n" msgstr "Nem talltam visszavon kulcsot a kvetkezhz: \"%s\".\n" #: g10/revoke.c:469 #, fuzzy, c-format msgid "secret key \"%s\" not found: %s\n" msgstr "\"%s\" titkos kulcs nem tallhat: %s\n" #: g10/revoke.c:496 #, c-format msgid "no corresponding public key: %s\n" msgstr "Nincs hozz tartoz nyilvnos kulcs: %s\n" #: g10/revoke.c:507 msgid "public key does not match secret key!\n" msgstr "A nyilvnos kulcs nem passzol a titkos kulcshoz!\n" #: g10/revoke.c:514 #, fuzzy msgid "Create a revocation certificate for this key? (y/N) " msgstr "Csinljunk egy visszavon igazolst ehhez a kulcshoz? " #: g10/revoke.c:531 msgid "unknown protection algorithm\n" msgstr "Ismeretlen vdelmi algoritmus!\n" #: g10/revoke.c:539 msgid "NOTE: This key is not protected!\n" msgstr "MEGJEGYZS: Ez a kulcs nem vdett.\n" #: g10/revoke.c:590 msgid "" "Revocation certificate created.\n" "\n" "Please move it to a medium which you can hide away; if Mallory gets\n" "access to this certificate he can use it to make your key unusable.\n" "It is smart to print this certificate and store it away, just in case\n" "your media become unreadable. But have some caution: The print system of\n" "your machine might store the data and make it available to others!\n" msgstr "" "A visszavon igazolst ltrehoztam.\n" "\n" "Krem, tegye olyan helyre, ahol ms nem fr hozz! Ha valaki megszerzi\n" "ezt az igazolst, hasznlhatatlann teheti vele az n kulcst. Okos dolog\n" "kinyomtatni s megrizni ezt az igazolst, arra az esetre, ha az\n" "adathordoz olvashatatlann vlik. De vigyzat: az n gpnek nyomtatsi\n" "rendszere is trolhatja az adatot, s msok esetleg hozzfrhetnek ehhez!\n" #: g10/revoke.c:631 msgid "Please select the reason for the revocation:\n" msgstr "Krem, vlassza ki a visszavons okt:\n" #: g10/revoke.c:641 msgid "Cancel" msgstr "Mgsem" #: g10/revoke.c:643 #, c-format msgid "(Probably you want to select %d here)\n" msgstr "(Valsznleg a(z) %d. lehetsget akarja vlasztani.)\n" #: g10/revoke.c:684 msgid "Enter an optional description; end it with an empty line:\n" msgstr "Adjon meg egy nem ktelez lerst! res sorral fejezze be:\n" #: g10/revoke.c:712 #, c-format msgid "Reason for revocation: %s\n" msgstr "Visszavons oka: %s\n" #: g10/revoke.c:714 msgid "(No description given)\n" msgstr "(Nincs lers.)\n" #: g10/revoke.c:719 #, fuzzy msgid "Is this okay? (y/N) " msgstr "Ez gy rendben van? " #: g10/seckey-cert.c:53 msgid "secret key parts are not available\n" msgstr "Titkos kulcsrszek nem llnak rendelkezsre.\n" #: g10/seckey-cert.c:59 #, c-format msgid "protection algorithm %d%s is not supported\n" msgstr "%d%s vd algoritmus nem tmogatott.\n" #: g10/seckey-cert.c:65 #, fuzzy, c-format msgid "protection digest %d is not supported\n" msgstr "%d%s vd algoritmus nem tmogatott.\n" #: g10/seckey-cert.c:266 msgid "Invalid passphrase; please try again" msgstr "rvnytelen jelsz. Prblja jra" #: g10/seckey-cert.c:267 #, c-format msgid "%s ...\n" msgstr "%s...\n" #: g10/seckey-cert.c:328 msgid "WARNING: Weak key detected - please change passphrase again.\n" msgstr "" "FIGYELEM: Gyenge kulcsot talltam. Krem, vltoztassa meg ismt a jelszt!\n" #: g10/seckey-cert.c:366 msgid "generating the deprecated 16-bit checksum for secret key protection\n" msgstr "" "Elavult, 16 bites ellenrzsszeget hozok ltre titkos kulcs vdelmhez.\n" #: g10/seskey.c:51 msgid "weak key created - retrying\n" msgstr "Gyenge kulcs jtt ltre. jraprblom.\n" #: g10/seskey.c:56 #, c-format msgid "cannot avoid weak key for symmetric cipher; tried %d times!\n" msgstr "" "Nem tudom elkerlni a gyenge kulcsot a szimmetrikus titkosthoz.\n" "%d alkalommal prbltam!\n" #: g10/seskey.c:218 msgid "DSA requires the hash length to be a multiple of 8 bits\n" msgstr "" #: g10/seskey.c:232 #, c-format msgid "DSA key %s uses an unsafe (%u bit) hash\n" msgstr "" #: g10/seskey.c:244 #, c-format msgid "DSA key %s requires a %u bit or larger hash\n" msgstr "" #: g10/sig-check.c:74 msgid "WARNING: signature digest conflict in message\n" msgstr "FIGYELEM: Alrskivonat-konfliktus az zenetben.\n" #: g10/sig-check.c:99 #, fuzzy, c-format msgid "WARNING: signing subkey %s is not cross-certified\n" msgstr "FIGYELEM: %08lX alr alkulcs nem kereszthitelestett.\n" #: g10/sig-check.c:111 #, fuzzy, c-format msgid "WARNING: signing subkey %s has an invalid cross-certification\n" msgstr "FIGYELEM: %08lX alr alkulcson rvnytelen kereszthitelests van.\n" #: g10/sig-check.c:191 #, fuzzy, c-format msgid "public key %s is %lu second newer than the signature\n" msgstr "A(z) %08lX nyilvnos kulcs %lu msodperccel jabb az alrsnl!\n" #: g10/sig-check.c:192 #, fuzzy, c-format msgid "public key %s is %lu seconds newer than the signature\n" msgstr "A(z) %08lX nyilvnos kulcs %lu msodperccel jabb az alrsnl!\n" #: g10/sig-check.c:203 #, fuzzy, c-format msgid "" "key %s was created %lu second in the future (time warp or clock problem)\n" msgstr "" "A kulcs %lu msodperccel a jvben kszlt. (Idugrs vagy raproblma.)\n" #: g10/sig-check.c:205 #, fuzzy, c-format msgid "" "key %s was created %lu seconds in the future (time warp or clock problem)\n" msgstr "" "A kulcs %lu msodperccel a jvben kszlt. (Idugrs vagy raproblma.)\n" #: g10/sig-check.c:219 #, fuzzy, c-format msgid "NOTE: signature key %s expired %s\n" msgstr "MEGJEGYZS: Alr kulcs (%08lX) lejrt: %s\n" #: g10/sig-check.c:254 #, fuzzy, c-format #| msgid "%s signature, digest algorithm %s\n" msgid "Note: signatures using the %s algorithm are rejected\n" msgstr "%s alrs, %s kivonatol algoritmus.\n" #: g10/sig-check.c:345 #, fuzzy, c-format msgid "assuming bad signature from key %s due to an unknown critical bit\n" msgstr "" "Rossz alrst felttelezek a %08lX kulcstl egy ismeretlen\n" "kritikus bit miatt.\n" #: g10/sig-check.c:603 #, fuzzy, c-format msgid "key %s: no subkey for subkey revocation signature\n" msgstr "%08lX kulcs: Nincs alkulcs az alkulcsvisszavon csomaghoz.\n" #: g10/sig-check.c:629 #, fuzzy, c-format msgid "key %s: no subkey for subkey binding signature\n" msgstr "%08lX kulcs: Nincs alkulcs az alkulcskt alrshoz!\n" #: g10/sign.c:90 #, c-format msgid "WARNING: unable to %%-expand notation (too large). Using unexpanded.\n" msgstr "" "FIGYELEM: Nem tudom kifejteni a %% jeleket a jellsben (tl hossz).\n" "Kifejts nlkl hasznlom.\n" #: g10/sign.c:116 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand policy URL (too large). Using unexpanded.\n" msgstr "" "FIGYELEM: Nem tudom kifejteni a %% jeleket az eljrsmd URL-ben (tl " "hossz).\n" "Kifejts nlkl hasznlom.\n" #: g10/sign.c:139 #, fuzzy, c-format msgid "" "WARNING: unable to %%-expand preferred keyserver URL (too large). Using " "unexpanded.\n" msgstr "" "FIGYELEM: Nem tudom kifejteni a %% jeleket az eljrsmd URL-ben (tl " "hossz).\n" "Kifejts nlkl hasznlom.\n" #: g10/sign.c:313 #, c-format msgid "checking created signature failed: %s\n" msgstr "A ltrehozott alrs ellenrzse sikertelen: %s.\n" #: g10/sign.c:322 #, fuzzy, c-format msgid "%s/%s signature from: \"%s\"\n" msgstr "%s alrs a kvetkeztl: \"%s\"\n" #: g10/sign.c:760 msgid "you can only detach-sign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "Klnll alrst PGP 2.x stlus kulcsokkal csak --pgp2 mdban kszthet!\n" #: g10/sign.c:834 #, fuzzy, c-format msgid "" "WARNING: forcing digest algorithm %s (%d) violates recipient preferences\n" msgstr "" "%s (%d) kivonatol algoritmus hasznlatnak erltetse ellenttes\n" "a cmzett preferenciival.\n" #: g10/sign.c:960 msgid "signing:" msgstr "Alrom:" #: g10/sign.c:1073 msgid "you can only clearsign with PGP 2.x style keys while in --pgp2 mode\n" msgstr "" "Olvashat szveget PGP 2.x stlus kulccsal csak --pgp2 mdban rhat al!\n" #: g10/sign.c:1252 #, c-format msgid "%s encryption will be used\n" msgstr "%s titkostst fogok hasznlni.\n" #: g10/skclist.c:126 g10/skclist.c:190 msgid "key is not flagged as insecure - can't use it with the faked RNG!\n" msgstr "" "A kulcs nincs \"nem biztonsgosnak\" jellve,\n" "nem tudom a ptl vletlenszm-genertorral hasznlni!\n" #: g10/skclist.c:157 #, fuzzy, c-format msgid "skipped \"%s\": duplicated\n" msgstr "\"%s\"-t kihagytam: msodpldny.\n" #: g10/skclist.c:165 g10/skclist.c:175 g10/skclist.c:184 #, fuzzy, c-format msgid "skipped \"%s\": %s\n" msgstr "Kihagytam \"%s\"-t: %s.\n" #: g10/skclist.c:170 msgid "skipped: secret key already present\n" msgstr "Kihagytam: titkos kulcs mr jelen van.\n" #: g10/skclist.c:185 #, fuzzy msgid "this is a PGP generated Elgamal key which is not secure for signatures!" msgstr "" "Kihagytam \"%s\"-t: ez egy PGP ltal ltrehozott ElGamal kulcs, amely nem\n" "biztonsgos alrsokhoz!\n" #: g10/tdbdump.c:58 g10/trustdb.c:365 #, c-format msgid "trust record %lu, type %d: write failed: %s\n" msgstr "%lu bizalmi rekord, %d tpus: rs sikertelen: %s.\n" #: g10/tdbdump.c:103 #, c-format msgid "" "# List of assigned trustvalues, created %s\n" "# (Use \"gpg --import-ownertrust\" to restore them)\n" msgstr "" "# Meghatrozott bizalmi rtkek listja, %s.\n" "# (Hasznlja a \"gpg --import-ownertrust\" parancsot a visszalltshoz!)\n" #: g10/tdbdump.c:158 g10/tdbdump.c:166 g10/tdbdump.c:171 g10/tdbdump.c:176 #, fuzzy, c-format msgid "error in `%s': %s\n" msgstr "Hiba \"%s\" olvassakor: %s\n" #: g10/tdbdump.c:158 #, fuzzy msgid "line too long" msgstr "A sor tl hossz!\n" #: g10/tdbdump.c:166 msgid "colon missing" msgstr "" #: g10/tdbdump.c:172 #, fuzzy msgid "invalid fingerprint" msgstr "Hiba: rvnytelen ujjlenyomat.\n" #: g10/tdbdump.c:177 #, fuzzy msgid "ownertrust value missing" msgstr "bizalmi rtkek importja" #: g10/tdbdump.c:213 #, fuzzy, c-format msgid "error finding trust record in `%s': %s\n" msgstr "Hiba bizalmi rekord keressekor: %s.\n" #: g10/tdbdump.c:217 #, fuzzy, c-format msgid "read error in `%s': %s\n" msgstr "Olvassi hiba: %s.\n" #: g10/tdbdump.c:226 g10/trustdb.c:380 #, c-format msgid "trustdb: sync failed: %s\n" msgstr "Bizalmi adatbzis: szinkronizci sikertelen: %s.\n" #: g10/tdbio.c:103 #, fuzzy, c-format msgid "can't create lock for `%s'\n" msgstr "Nem tudom ltrehozni a(z) \"%s\" llomnyt: %s.\n" #: g10/tdbio.c:108 #, fuzzy, c-format msgid "can't lock `%s'\n" msgstr "Nem tudom megnyitni %s-t!\n" #: g10/tdbio.c:153 g10/tdbio.c:1446 #, c-format msgid "trustdb rec %lu: lseek failed: %s\n" msgstr "Bizalmi adatbzis %lu. rekord: lseek sikertelen: %s.\n" #: g10/tdbio.c:159 g10/tdbio.c:1453 #, c-format msgid "trustdb rec %lu: write failed (n=%d): %s\n" msgstr "Bizalmi adatbzis %lu. rekord: rs sikertelen (n=%d): %s.\n" #: g10/tdbio.c:269 msgid "trustdb transaction too large\n" msgstr "Bizalmi adatbzis tranzakcija tl nagy.\n" #: g10/tdbio.c:520 #, fuzzy, c-format msgid "can't access `%s': %s\n" msgstr "Nem tudom bezrni a(z) \"%s\" llomnyt: %s.\n" #: g10/tdbio.c:536 #, c-format msgid "%s: directory does not exist!\n" msgstr "%s: Knyvtr nem ltezik!\n" #: g10/tdbio.c:557 #, c-format msgid "%s: failed to create version record: %s" msgstr "%s: Nem sikerlt verzirekordot ltrehoznom: %s" #: g10/tdbio.c:561 #, c-format msgid "%s: invalid trustdb created\n" msgstr "%s: rvnytelen bizalmi adatbzis jtt ltre.\n" #: g10/tdbio.c:564 #, c-format msgid "%s: trustdb created\n" msgstr "%s: Bizalmi adatbzis ltrejtt.\n" #: g10/tdbio.c:599 msgid "NOTE: trustdb not writable\n" msgstr "MEGJEGYZS: Bizalmi adatbzis nem rhat.\n" #: g10/tdbio.c:616 #, c-format msgid "%s: invalid trustdb\n" msgstr "%s: rvnytelen bizalmi adatbzis.\n" #: g10/tdbio.c:648 #, c-format msgid "%s: failed to create hashtable: %s\n" msgstr "%s: Hashtbla ltrehozsa sikertelen: %s.\n" #: g10/tdbio.c:656 #, c-format msgid "%s: error updating version record: %s\n" msgstr "%s: Hiba a verzirekord frisstsekor: %s.\n" #: g10/tdbio.c:673 g10/tdbio.c:694 g10/tdbio.c:710 g10/tdbio.c:724 #: g10/tdbio.c:754 g10/tdbio.c:1379 g10/tdbio.c:1406 #, c-format msgid "%s: error reading version record: %s\n" msgstr "%s: Hiba a verzirekord olvassakor: %s.\n" #: g10/tdbio.c:733 #, c-format msgid "%s: error writing version record: %s\n" msgstr "%s: Hiba a verzirekord rsakor: %s.\n" #: g10/tdbio.c:1173 #, c-format msgid "trustdb: lseek failed: %s\n" msgstr "Bizalmi adatbzis: lseek sikertelen: %s.\n" #: g10/tdbio.c:1181 #, c-format msgid "trustdb: read failed (n=%d): %s\n" msgstr "Bizalmi adatbzis: olvass sikertelen (n=%d): %s.\n" #: g10/tdbio.c:1202 #, c-format msgid "%s: not a trustdb file\n" msgstr "%s: Nem bizalmi adatbzis.\n" #: g10/tdbio.c:1221 #, c-format msgid "%s: version record with recnum %lu\n" msgstr "%s: Verzirekord, rekordszm: %lu.\n" #: g10/tdbio.c:1226 #, c-format msgid "%s: invalid file version %d\n" msgstr "%s: rvnytelen llomnyverzi (%d).\n" #: g10/tdbio.c:1412 #, c-format msgid "%s: error reading free record: %s\n" msgstr "%s: Hiba szabad rekord olvassakor: %s.\n" #: g10/tdbio.c:1420 #, c-format msgid "%s: error writing dir record: %s\n" msgstr "%s: Hiba knyvtrrekord rsakor: %s.\n" #: g10/tdbio.c:1430 #, c-format msgid "%s: failed to zero a record: %s\n" msgstr "%s: Nem sikerlt egy rekord nullzsa: %s.\n" #: g10/tdbio.c:1460 #, c-format msgid "%s: failed to append a record: %s\n" msgstr "%s: Nem sikerlt egy rekord hozzadsa: %s.\n" #: g10/tdbio.c:1504 #, fuzzy msgid "Error: The trustdb is corrupted.\n" msgstr "%s: Bizalmi adatbzis ltrejtt.\n" #: g10/textfilter.c:147 #, c-format msgid "can't handle text lines longer than %d characters\n" msgstr "Nem tudok %d karakternl hosszabb szvegsorokat kezelni!\n" #: g10/textfilter.c:246 #, c-format msgid "input line longer than %d characters\n" msgstr "A bemeneti sor hosszabb, mint %d karakter.\n" #: g10/trustdb.c:226 #, c-format msgid "`%s' is not a valid long keyID\n" msgstr "\"%s\" nem egy rvnyes hossz kulcsazonost.\n" #: g10/trustdb.c:257 #, fuzzy, c-format msgid "key %s: accepted as trusted key\n" msgstr "%08lX kulcs: Elfogadva megbzhat kulcsknt.\n" #: g10/trustdb.c:295 #, fuzzy, c-format msgid "key %s occurs more than once in the trustdb\n" msgstr "A(z) %08lX kulcs egynl tbbszr szerepel a bizalmi adatbzisban.\n" #: g10/trustdb.c:310 #, fuzzy, c-format msgid "key %s: no public key for trusted key - skipped\n" msgstr "" "%08lX kulcs: Nincs nyilvnos kulcs a megbzhat kulcshoz - kihagytam.\n" #: g10/trustdb.c:320 #, fuzzy, c-format msgid "key %s marked as ultimately trusted\n" msgstr "A kulcsot alapveten megbzhatnak jelltem.\n" #: g10/trustdb.c:344 #, c-format msgid "trust record %lu, req type %d: read failed: %s\n" msgstr "%lu bizalmi rekord, %d krstpus: olvass sikertelen: %s.\n" #: g10/trustdb.c:350 #, c-format msgid "trust record %lu is not of requested type %d\n" msgstr "%lu bizalmi rekord nem a krt tpus (%d).\n" #: g10/trustdb.c:423 msgid "You may try to re-create the trustdb using the commands:\n" msgstr "" #: g10/trustdb.c:432 msgid "If that does not work, please consult the manual\n" msgstr "" #: g10/trustdb.c:467 #, c-format msgid "unable to use unknown trust model (%d) - assuming %s trust model\n" msgstr "" #: g10/trustdb.c:473 #, c-format msgid "using %s trust model\n" msgstr "" #. TRANSLATORS: these strings are similar to those in #. trust_value_to_string(), but are a fixed length. This is needed to #. make attractive information listings where columns line up #. properly. The value "10" should be the length of the strings you #. choose to translate to. This is the length in printable columns. #. It gets passed to atoi() so everything after the number is #. essentially a comment and need not be translated. Either key and #. uid are both NULL, or neither are NULL. #: g10/trustdb.c:525 msgid "10 translator see trustdb.c:uid_trust_string_fixed" msgstr "" #: g10/trustdb.c:527 #, fuzzy msgid "[ revoked]" msgstr "[visszavont] " #: g10/trustdb.c:529 g10/trustdb.c:534 #, fuzzy msgid "[ expired]" msgstr "[lejrt] " #: g10/trustdb.c:533 #, fuzzy msgid "[ unknown]" msgstr "Ismeretlen md" #: g10/trustdb.c:535 msgid "[ undef ]" msgstr "" #: g10/trustdb.c:536 msgid "[marginal]" msgstr "" #: g10/trustdb.c:537 msgid "[ full ]" msgstr "" #: g10/trustdb.c:538 msgid "[ultimate]" msgstr "" #: g10/trustdb.c:553 msgid "undefined" msgstr "" #: g10/trustdb.c:554 #, fuzzy msgid "never" msgstr "soha " #: g10/trustdb.c:555 msgid "marginal" msgstr "" #: g10/trustdb.c:556 msgid "full" msgstr "" #: g10/trustdb.c:557 msgid "ultimate" msgstr "" #: g10/trustdb.c:597 msgid "no need for a trustdb check\n" msgstr "Nincs szksg a bizalmi adatbzis ellenrzsre.\n" #: g10/trustdb.c:603 g10/trustdb.c:2513 #, c-format msgid "next trustdb check due at %s\n" msgstr "A bizalmi adatbzis kvetkez ellenrzse: %s.\n" #: g10/trustdb.c:612 #, fuzzy, c-format msgid "no need for a trustdb check with `%s' trust model\n" msgstr "Nincs szksg a bizalmi adatbzis ellenrzsre.\n" #: g10/trustdb.c:627 #, fuzzy, c-format msgid "no need for a trustdb update with `%s' trust model\n" msgstr "Nincs szksg a bizalmi adatbzis ellenrzsre.\n" #: g10/trustdb.c:879 g10/trustdb.c:1341 #, fuzzy, c-format msgid "public key %s not found: %s\n" msgstr "A(z) %08lX nyilvnos kulcsot nem tallom: %s.\n" #: g10/trustdb.c:1084 msgid "please do a --check-trustdb\n" msgstr "Krem, hajtson vgre egy --check-trustdb parancsot!\n" #: g10/trustdb.c:1088 msgid "checking the trustdb\n" msgstr "Ellenrzm a bizalmi adatbzist.\n" #: g10/trustdb.c:2256 #, c-format msgid "%d keys processed (%d validity counts cleared)\n" msgstr "%d kulcsot feldolgoztam (%d rvnyessgszmllt trltem)\n" #: g10/trustdb.c:2321 msgid "no ultimately trusted keys found\n" msgstr "Nem talltam alapveten megbzhat kulcsot.\n" #: g10/trustdb.c:2335 #, fuzzy, c-format msgid "public key of ultimately trusted key %s not found\n" msgstr "Nem tallom az alapveten megbzhat %08lX kulcs nyilvnos kulcst!\n" #: g10/trustdb.c:2358 #, c-format msgid "%d marginal(s) needed, %d complete(s) needed, %s trust model\n" msgstr "" #: g10/trustdb.c:2444 #, c-format msgid "" "depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du\n" msgstr "" #: g10/trustdb.c:2519 #, fuzzy, c-format msgid "unable to update trustdb version record: write failed: %s\n" msgstr "%lu bizalmi rekord, %d tpus: rs sikertelen: %s.\n" #: g10/verify.c:116 msgid "" "the signature could not be verified.\n" "Please remember that the signature file (.sig or .asc)\n" "should be the first file given on the command line.\n" msgstr "" "Nem tudom ellenrizni az alrst.\n" "Ne felejtse el, hogy az alrst tartalmaz llomnyt (.sig vagy .asc)\n" "kell az els helyre rni a parancssorban!\n" #: g10/verify.c:192 #, c-format msgid "input line %u too long or missing LF\n" msgstr "A bemeneti sor (%u) tl hossz, vagy hinyzik a soremels.\n" #: util/errors.c:53 msgid "general error" msgstr "ltalnos hiba" #: util/errors.c:54 msgid "unknown packet type" msgstr "ismeretlen csomagtpus" #: util/errors.c:55 msgid "unknown version" msgstr "ismeretlen verzi" #: util/errors.c:56 msgid "unknown pubkey algorithm" msgstr "ismeretlen nyilvnos kulcs algoritmus" #: util/errors.c:57 msgid "unknown digest algorithm" msgstr "ismeretlen kivonatol algoritmus" #: util/errors.c:58 msgid "bad public key" msgstr "rossz nyilvnos kulcs" #: util/errors.c:59 msgid "bad secret key" msgstr "rossz titkos kulcs" #: util/errors.c:60 msgid "bad signature" msgstr "rossz alrs" #: util/errors.c:61 msgid "checksum error" msgstr "hibs ellenrzsszeg" #: util/errors.c:62 msgid "bad passphrase" msgstr "rossz jelsz" #: util/errors.c:63 msgid "public key not found" msgstr "nyilvnos kulcs nem tallhat" #: util/errors.c:64 msgid "unknown cipher algorithm" msgstr "ismeretlen rejtjelez algoritmus" #: util/errors.c:65 msgid "can't open the keyring" msgstr "nem lehet megnyitni a kulcskarikt" #: util/errors.c:66 msgid "invalid packet" msgstr "rvnytelen csomag" #: util/errors.c:67 msgid "invalid armor" msgstr "rvnytelen pncl" #: util/errors.c:68 msgid "no such user id" msgstr "nincs ilyen felhasznli azonost" #: util/errors.c:69 msgid "secret key not available" msgstr "titkos kulcs nem ll rendelkezsre" #: util/errors.c:70 msgid "wrong secret key used" msgstr "rossz titkos kulcs hasznlata" #: util/errors.c:71 msgid "not supported" msgstr "nem tmogatott" #: util/errors.c:72 msgid "bad key" msgstr "rossz kulcs" #: util/errors.c:73 msgid "file read error" msgstr "llomnyolvassi hiba" #: util/errors.c:74 msgid "file write error" msgstr "llomnyrsi hiba" #: util/errors.c:75 msgid "unknown compress algorithm" msgstr "ismeretlen tmrt algoritmus" #: util/errors.c:76 msgid "file open error" msgstr "llomnymegnyitsi hiba" #: util/errors.c:77 msgid "file create error" msgstr "llomnyltrehozsi hiba" #: util/errors.c:78 msgid "invalid passphrase" msgstr "rvnytelen jelsz" #: util/errors.c:79 msgid "unimplemented pubkey algorithm" msgstr "nem megvalstott nyilvnos kulcs algoritmus" #: util/errors.c:80 msgid "unimplemented cipher algorithm" msgstr "nem megvalstott rejtjelez algoritmus" #: util/errors.c:81 msgid "unknown signature class" msgstr "ismeretlen alrsosztly" #: util/errors.c:82 msgid "trust database error" msgstr "hibs bizalmi adatbzis" #: util/errors.c:83 msgid "bad MPI" msgstr "hibs MPI" #: util/errors.c:84 msgid "resource limit" msgstr "erforrshatr" #: util/errors.c:85 msgid "invalid keyring" msgstr "rvnytelen kulcskarika" #: util/errors.c:86 msgid "bad certificate" msgstr "rossz igazols" #: util/errors.c:87 msgid "malformed user id" msgstr "rossz formj felhasznli azonost" #: util/errors.c:88 msgid "file close error" msgstr "llomnyzrsi hiba" #: util/errors.c:89 msgid "file rename error" msgstr "llomnytnevezsi hiba" #: util/errors.c:90 msgid "file delete error" msgstr "llomnytrlsi hiba" #: util/errors.c:91 msgid "unexpected data" msgstr "nem vrt adat" #: util/errors.c:92 msgid "timestamp conflict" msgstr "idblyeg-konfliktus" #: util/errors.c:93 msgid "unusable pubkey algorithm" msgstr "hasznlhatatlan nyilvnos kulcs algoritmus" #: util/errors.c:94 msgid "file exists" msgstr "llomny ltezik" #: util/errors.c:95 msgid "weak key" msgstr "gyenge kulcs" #: util/errors.c:96 msgid "invalid argument" msgstr "rvnytelen argumentum" #: util/errors.c:97 msgid "bad URI" msgstr "rossz URI" #: util/errors.c:98 msgid "unsupported URI" msgstr "nem tmogatott URI" #: util/errors.c:99 msgid "network error" msgstr "hlzati hiba" #: util/errors.c:101 msgid "not encrypted" msgstr "nem titkostott" #: util/errors.c:102 msgid "not processed" msgstr "nem feldolgozott" #: util/errors.c:104 msgid "unusable public key" msgstr "hasznlhatatlan nyilvnos kulcs" #: util/errors.c:105 msgid "unusable secret key" msgstr "hasznlhatatlan titkos kulcs" #: util/errors.c:106 msgid "keyserver error" msgstr "kulcsszerverhiba" #: util/errors.c:107 #, fuzzy msgid "canceled" msgstr "Mgsem" #: util/errors.c:108 #, fuzzy msgid "no card" msgstr "nem titkostott" #: util/errors.c:109 #, fuzzy msgid "no data" msgstr "Nincs alrt adat.\n" #: util/logger.c:183 msgid "ERROR: " msgstr "" #: util/logger.c:186 msgid "WARNING: " msgstr "" #: util/logger.c:249 #, c-format msgid "... this is a bug (%s:%d:%s)\n" msgstr "Ez egy programhiba... (%s:%d:%s)\n" #: util/logger.c:255 #, c-format msgid "you found a bug ... (%s:%d)\n" msgstr "Tallt egy programhibt... (%s:%d)\n" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:399 util/miscutil.c:436 msgid "yes" msgstr "igen" #: util/miscutil.c:400 util/miscutil.c:441 msgid "yY" msgstr "iI" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:402 util/miscutil.c:438 msgid "no" msgstr "nem" #: util/miscutil.c:403 util/miscutil.c:442 msgid "nN" msgstr "nN" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:440 msgid "quit" msgstr "kilps|kilepes" #: util/miscutil.c:443 msgid "qQ" msgstr "kK" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:476 msgid "okay|okay" msgstr "" #. TRANSLATORS: See doc/TRANSLATE about this string. #: util/miscutil.c:478 msgid "cancel|cancel" msgstr "" #: util/miscutil.c:479 msgid "oO" msgstr "" #: util/miscutil.c:480 #, fuzzy msgid "cC" msgstr "c" #: util/secmem.c:96 msgid "WARNING: using insecure memory!\n" msgstr "FIGYELEM: Nem biztonsgos memrit hasznlunk!\n" #: util/secmem.c:97 msgid "" "please see http://www.gnupg.org/documentation/faqs.html for more " "information\n" msgstr "" "Tovbbi informci a http://www.gnupg.org/documentation/faqs.html cmen " "tallhat.\n" #: util/secmem.c:359 msgid "operation is not possible without initialized secure memory\n" msgstr "A mvelet nem lehetsges biztonsgos memria nlkl.\n" #: util/secmem.c:360 msgid "(you may have used the wrong program for this task)\n" msgstr "(Lehet, hogy nem a megfelel programot hasznlja a feladatra.)\n" #, fuzzy #~ msgid "WARNING: unsafe ownership on extension `%s'\n" #~ msgstr "FIGYELEM: Nem biztonsgos tulajdonos: %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe permissions on extension `%s'\n" #~ msgstr "FIGYELEM: nem biztonsgos engedlyek: %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory ownership on extension `%s'\n" #~ msgstr "FIGYELEM: nem biztonsgos knyvtrtulajdonos: %s \"%s\"\n" #, fuzzy #~ msgid "WARNING: unsafe enclosing directory permissions on extension `%s'\n" #~ msgstr "FIGYELEM: nem biztonsgos knyvtrengedlyek: %s \"%s\"\n" #, fuzzy #~ msgid "cipher extension `%s' not loaded due to unsafe permissions\n" #~ msgstr "A \"%s\" rejtjelez bvtst rossz engedlyek miatt tltm be.\n" #~ msgid "the IDEA cipher plugin is not present\n" #~ msgstr "Az IDEA rejtjelez bvts nincs jelen!\n" #~ msgid "Command> " #~ msgstr "Parancs> " #, fuzzy #~ msgid "DSA keypair will have %u bits.\n" #~ msgstr "A DSA kulcspr 1024 bites lesz.\n" #~ msgid "the trustdb is corrupted; please run \"gpg --fix-trustdb\".\n" #~ msgstr "Bizalmi adatbzis srlt. Krem, futtassa: \"gpg --fix-trustdb\".\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) signatures\n" #~ msgstr "Nem tehet jelladatot a v3-as (PGP 2.x stlus) alrsokba!\n" #~ msgid "can't put notation data into v3 (PGP 2.x style) key signatures\n" #~ msgstr "" #~ "Nem tehet jelladatot a v3-as (PGP 2.x stlus) kulcsalrsokba!\n" #~ msgid "can't put a policy URL into v3 (PGP 2.x style) signatures\n" #~ msgstr "Nem tehet eljrsmd-URL-t a v3-as (PGP 2.x stlus) alrsokba!\n" #~ msgid "can't put a policy URL into v3 key (PGP 2.x style) signatures\n" #~ msgstr "" #~ "Nem tehet eljrsmd-URL-t a v3-as (PGP 2.x stlus) kulcsalrsokba!\n" #~ msgid "DSA requires the use of a 160 bit hash algorithm\n" #~ msgstr "A DSA 160 bites hash (kivonatol) algoritmust ignyel.\n" #~ msgid "" #~ "please see http://www.gnupg.org/why-not-idea.html for more information\n" #~ msgstr "" #~ "Tovbbi informcit a http://www.gnupg.org/why-not-idea.html oldalon " #~ "tall.\n" #~ msgid "" #~ "a notation name must have only printable characters or spaces, and end " #~ "with an '='\n" #~ msgstr "" #~ "Egy jells neve csak nyomtathat karaktereket s szkzt tartalmazhat, " #~ "s = jellel kell befejezdjn.\n" #~ msgid "a user notation name must contain the '@' character\n" #~ msgstr "Egy felhasznljellsnek tartalmaznia kell a \"@\" karaktert!\n" #, fuzzy #~ msgid "a notation name must not contain more than one '@' character\n" #~ msgstr "Egy felhasznljellsnek tartalmaznia kell a \"@\" karaktert!\n" #~ msgid "a notation value must not use any control characters\n" #~ msgstr "Egy jells rtkben nem szerepelhet vezrlkarakter!\n" #~ msgid "WARNING: invalid notation data found\n" #~ msgstr "FIGYELEM: rvnytelen jell adatot talltam.\n" #~ msgid "not human readable" #~ msgstr "nem olvashat forma" #, fuzzy #~ msgid "all export-clean-* options from above" #~ msgstr "opcik beolvassa llomnybl" #, fuzzy #~ msgid "all import-clean-* options from above" #~ msgstr "opcik beolvassa llomnybl" #, fuzzy #~ msgid "expired: %s)" #~ msgstr " [lejr: %s]" #, fuzzy #~ msgid "key %s: expired signature from key %s - skipped\n" #~ msgstr "%08lX kulcs: Vratlan alrsosztly (0x%02X) - kihagytam.\n" #, fuzzy #~ msgid "Unable to clean `%s'\n" #~ msgstr "Nem tudom vgrehajtani a kvetkez \"%s\"-t: \"%s\": %s.\n" #, fuzzy #~ msgid "No user IDs are removable.\n" #~ msgstr "\"%s\" felhasznli azonostt mr visszavontk.\n" #, fuzzy #~ msgid "error getting serial number: %s\n" #~ msgstr "Hiba a jelsz ltrehozsakor: %s.\n" #~ msgid "bad passphrase or unknown cipher algorithm (%d)\n" #~ msgstr "Rossz jelsz vagy ismeretlen rejtjelez algoritmus (%d).\n" #~ msgid "can't set client pid for the agent\n" #~ msgstr "Nem tudom belltani a kliens pid-et az gynknek.\n" #~ msgid "can't get server read FD for the agent\n" #~ msgstr "" #~ "Nem tudom lekrni a szerver olvassi llomnylerjt az gynknek.\n" #~ msgid "can't get server write FD for the agent\n" #~ msgstr "Nem tudom lekrni a szerver rsi llomnylerjt az gynknek.\n" #~ msgid "communication problem with gpg-agent\n" #~ msgstr "Kommunikcis problma a gpg gynkkel!\n" #~ msgid "passphrase too long\n" #~ msgstr "A jelsz tl hossz!\n" #~ msgid "invalid response from agent\n" #~ msgstr "rvnytelen vlasz az gynktl!\n" #~ msgid "problem with the agent: agent returns 0x%lx\n" #~ msgstr "Problma az gynkkel: gynk vlasza: 0x%lx\n" #~ msgid "select secondary key N" #~ msgstr "N. msodlagos kulcs kivlasztsa" #~ msgid "list signatures" #~ msgstr "alrsok kilistzsa" #~ msgid "sign the key" #~ msgstr "kulcs alrsa" #~ msgid "add a secondary key" #~ msgstr "msodlagos kulcs (alkulcs) hozzadsa" #~ msgid "delete signatures" #~ msgstr "alrsok trlse" #~ msgid "change the expire date" #~ msgstr "lejrat megvltoztatsa" #~ msgid "set preference list" #~ msgstr "preferencialista belltsa" #~ msgid "updated preferences" #~ msgstr "preferencik frisstse" #~ msgid "No secondary key with index %d\n" #~ msgstr "Nincs %d index msodlagos kulcs!\n" #~ msgid "--nrsign-key user-id" #~ msgstr "--nrsign-key felh-azonost" #~ msgid "--nrlsign-key user-id" #~ msgstr "--nrlsign-key felh-azonost" #, fuzzy #~ msgid "make a trust signature" #~ msgstr "klnll alrs ksztse" #~ msgid "sign the key non-revocably" #~ msgstr "kulcs nem visszavonhat alrsa" #~ msgid "sign the key locally and non-revocably" #~ msgstr "kulcs nem visszavonhat helyi alrsa" #~ msgid "q" #~ msgstr "q" #~ msgid "help" #~ msgstr "help" #~ msgid "list" #~ msgstr "list" #~ msgid "l" #~ msgstr "l" #~ msgid "debug" #~ msgstr "debug" #, fuzzy #~ msgid "name" #~ msgstr "enable" #, fuzzy #~ msgid "login" #~ msgstr "lsign" #, fuzzy #~ msgid "cafpr" #~ msgstr "fpr" #, fuzzy #~ msgid "forcesig" #~ msgstr "revsig" #, fuzzy #~ msgid "generate" #~ msgstr "ltalnos hiba" #~ msgid "passwd" #~ msgstr "passwd" #~ msgid "save" #~ msgstr "save" #~ msgid "fpr" #~ msgstr "fpr" #~ msgid "uid" #~ msgstr "uid" #~ msgid "key" #~ msgstr "key" #~ msgid "check" #~ msgstr "check" #~ msgid "c" #~ msgstr "c" #~ msgid "sign" #~ msgstr "sign" #~ msgid "s" #~ msgstr "s" #, fuzzy #~ msgid "tsign" #~ msgstr "sign" #~ msgid "lsign" #~ msgstr "lsign" #~ msgid "nrsign" #~ msgstr "nrsign" #~ msgid "nrlsign" #~ msgstr "nrlsign" #~ msgid "adduid" #~ msgstr "adduid" #~ msgid "addphoto" #~ msgstr "addphoto" #~ msgid "deluid" #~ msgstr "deluid" #~ msgid "delphoto" #~ msgstr "delphoto" #, fuzzy #~ msgid "addcardkey" #~ msgstr "addkey" #~ msgid "delkey" #~ msgstr "delkey" #~ msgid "addrevoker" #~ msgstr "addrevoker" #~ msgid "delsig" #~ msgstr "delsig" #~ msgid "expire" #~ msgstr "expire" #~ msgid "primary" #~ msgstr "primary" #~ msgid "toggle" #~ msgstr "toggle" #~ msgid "t" #~ msgstr "t" #~ msgid "pref" #~ msgstr "pref" #~ msgid "showpref" #~ msgstr "showpref" #~ msgid "setpref" #~ msgstr "setpref" #~ msgid "updpref" #~ msgstr "updpref" #, fuzzy #~ msgid "keyserver" #~ msgstr "kulcsszerverhiba" #~ msgid "trust" #~ msgstr "trust" #~ msgid "revsig" #~ msgstr "revsig" #~ msgid "revuid" #~ msgstr "revuid" #~ msgid "revkey" #~ msgstr "revkey" #~ msgid "disable" #~ msgstr "disable" #~ msgid "enable" #~ msgstr "enable" #~ msgid "showphoto" #~ msgstr "showphoto" #~ msgid "digest algorithm `%s' is read-only in this release\n" #~ msgstr "\"%s\" kivonatol algoritmus csak olvashat ebben a kiadsban\n" #~ 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 "" #~ "Most egy j %s kulcsprt hozunk ltre.\n" #~ " minimlis kulcsmret: 768 bit\n" #~ " alaprtelmezett kulcsmret: 1024 bit\n" #~ " legnagyobb ajnlott kulcsmret: 2048 bit\n" #~ msgid "DSA only allows keysizes from 512 to 1024\n" #~ msgstr "A DSA csak 512 s 1024 kztti kulcsmretet tmogat.\n" #~ msgid "keysize too small; 1024 is smallest value allowed for RSA.\n" #~ msgstr "Kulcsmret tl kicsi; 1024 a legkisebb megengedett rtk RSA-hoz.\n" #~ msgid "keysize too small; 768 is smallest value allowed.\n" #~ msgstr "Kulcsmret tl kicsi; 768 a legkisebb megengedett rtk.\n" #~ msgid "keysize too large; %d is largest value allowed.\n" #~ msgstr "Kulcsmret tl nagy; %d a legnagyobb megengedett rtk.\n" #~ msgid "" #~ "Keysizes larger than 2048 are not suggested because\n" #~ "computations take REALLY long!\n" #~ msgstr "" #~ "2048-nl nagyobb kulcsmret nem ajnlott, mert a szmtsok\n" #~ "NAGYON sokig fognak tartani!\n" #, fuzzy #~ msgid "Are you sure that you want this keysize? (y/N) " #~ msgstr "Biztos benne, hogy akarja ezt a kulcsmretet? " #~ msgid "" #~ "Okay, but keep in mind that your monitor and keyboard radiation is also " #~ "very vulnerable to attacks!\n" #~ msgstr "" #~ "Rendben, de vegye figyelembe, hogy a tmadk a monitornak vagy\n" #~ "a billentyzetnek a sugrzst is felhasznlhatjk!\n" #~ msgid "Experimental algorithms should not be used!\n" #~ msgstr "Nem szabadna ksrleti algoritmusokat hasznlni!\n" #~ msgid "" #~ "this cipher algorithm is deprecated; please use a more standard one!\n" #~ msgstr "" #~ "Ez a rejtjelez algoritmus nem ajnlott. Krem, hasznljon " #~ "szabvnyosabbat!\n" #, fuzzy #~ msgid "writing to file `%s'\n" #~ msgstr "rok a \"%s\" llomnyba.\n" #~ msgid "sorry, can't do this in batch mode\n" #~ msgstr "Sajnlom, ezt nem tudom megcsinlni ktegelt mdban!\n" #~ msgid "key `%s' not found: %s\n" #~ msgstr "\"%s\" kulcs nem tallhat: %s\n" #, fuzzy #~ msgid "can't create file `%s': %s\n" #~ msgstr "Nem tudom ltrehozni a(z) \"%s\" llomnyt: %s.\n" #, fuzzy #~ msgid "can't open file `%s': %s\n" #~ msgstr "Nem tudom megnyitni az llomnyt: %s.\n" #, fuzzy #~ msgid " \"" #~ msgstr " azaz \"" #~ msgid "key %08lX: key has been revoked!\n" #~ msgstr "%08lX kulcs vissza lett vonva!\n" #~ msgid "key %08lX: subkey has been revoked!\n" #~ msgstr "%08lX alkulcs vissza lett vonva!\n" #~ msgid "%08lX: key has expired\n" #~ msgstr "%08lX kulcs lejrt!\n" #~ msgid "%08lX: We do NOT trust this key\n" #~ msgstr "%08lX: Ebben a kulcsban NEM bzunk.\n" #~ msgid " (%d) RSA (sign and encrypt)\n" #~ msgstr " (%d) RSA (alrs s titkosts)\n" #, fuzzy #~ msgid " (%d) RSA (auth only)\n" #~ msgstr " (%d) RSA (csak alrs)\n" #, fuzzy #~ msgid " (%d) RSA (sign and auth)\n" #~ msgstr " (%d) RSA (alrs s titkosts)\n" #, fuzzy #~ msgid " (%d) RSA (encrypt and auth)\n" #~ msgstr " (%d) RSA (csak titkosts)\n" #, fuzzy #~ msgid " (%d) RSA (sign, encrypt and auth)\n" #~ msgstr " (%d) RSA (alrs s titkosts)\n" #~ msgid "%s: can't open: %s\n" #~ msgstr "%s-t nem tudom megnyitni: %s.\n" #~ msgid "%s: WARNING: empty file\n" #~ msgstr "FIGYELEM: \"%s\" res llomny.\n" #~ msgid "can't open %s: %s\n" #~ msgstr "Nem tudom megnyitni %s-t: %s\n" #, fuzzy #~ msgid " (%d) I trust marginally\n" #~ msgstr " %d = rszlegesen megbzom benne\n" #, fuzzy #~ msgid " (%d) I trust fully\n" #~ msgstr " %d = teljesen megbzom benne\n" #, fuzzy #~ msgid "expires" #~ msgstr "expire" #, fuzzy #~ msgid "" #~ "\"\n" #~ "locally signed with your key %s at %s\n" #~ msgstr "" #~ "\"\n" #~ "Helyileg alrva az n %08lX kulcsval %s idpontban.\n" #~ msgid "%s: can't access: %s\n" #~ msgstr "%s: Nem tudom elrni: %s.\n" #~ msgid "%s: can't create lock\n" #~ msgstr "%s: Nem tudok lock-ot ltrehozni.\n" #~ msgid "%s: can't make lock\n" #~ msgstr "%s: Nem tudok lock-ot csinlni.\n" #~ msgid "%s: can't create: %s\n" #~ msgstr "%s: Nem tudom ltrehozni: %s.\n" #~ msgid "%s: can't create directory: %s\n" #~ msgstr "%s: Nem tudom a knyvtrat ltrehozni: %s.\n" #~ msgid "If you want to use this revoked key anyway, answer \"yes\"." #~ msgstr "" #~ "Ha mgis hasznlni akarja ezt a visszavont kulcsot,\n" #~ "vlaszoljon \"igen\"-nel!" #~ msgid "Unable to open photo \"%s\": %s\n" #~ msgstr "Nem tudom megnyitni a \"%s\" fott: %s.\n" #~ msgid "can't open file: %s\n" #~ msgstr "Nem tudom megnyitni az llomnyt: %s.\n" #~ msgid "error: missing colon\n" #~ msgstr "Hiba: Hinyz kettspont.\n" #~ msgid "error: no ownertrust value\n" #~ msgstr "Hiba: Nincs tulajdonosmegbzhatsgi rtk.\n" #~ msgid " (main key ID %08lX)" #~ msgstr "" #~ " \n" #~ " (f kulcsazonost: %08lX)" #~ msgid "rev! subkey has been revoked: %s\n" #~ msgstr "rev! Alkulcsot visszavontk: %s.\n" #~ msgid "rev- faked revocation found\n" #~ msgstr "rev- Hamis visszavonst talltam!\n" #~ msgid "rev? problem checking revocation: %s\n" #~ msgstr "rev? Nem tudom ellenrizni a visszavonst: %s.\n" #, fuzzy #~ msgid " [expired: %s]" #~ msgstr " [lejr: %s]" #~ msgid " [expires: %s]" #~ msgstr " [lejr: %s]" #, fuzzy #~ msgid " [revoked: %s]" #~ msgstr "[visszavont] " #~ msgid "can't create %s: %s\n" #~ msgstr "%s nem hozhat ltre: %s\n" #~ msgid "" #~ "WARNING: digest `%s' is not part of OpenPGP. Use at your own risk!\n" #~ msgstr "" #~ "FIGYELEM: \"%s\" kivonatol algoritmus nem rsze az OpenPGP-nek. Csak " #~ "sajt felelssgre hasznlja!\n" #~ msgid "|[files]|encrypt files" #~ msgstr "|[fjlok]|llomnyok titkostsa" #~ msgid "store only" #~ msgstr "csak trols" #~ msgid "|[files]|decrypt files" #~ msgstr "|[fjlok]|llomnyok visszafejtse" #~ msgid "sign a key non-revocably" #~ msgstr "kulcs alrsa visszavonhatatlanul" #~ msgid "sign a key locally and non-revocably" #~ msgstr "kulcs alrsa helyileg s visszavonhatatlanul" #~ msgid "list only the sequence of packets" #~ msgstr "csak a csomagok listzsa" #~ msgid "export the ownertrust values" #~ msgstr "bizalmi rtkek exportja" #~ msgid "unattended trust database update" #~ msgstr "bizalmi adatbzis frisstse felgyelet nlkl" #~ msgid "fix a corrupted trust database" #~ msgstr "srlt bizalmi adatbzis kijavtsa" #~ msgid "De-Armor a file or stdin" #~ msgstr "pncl eltvoltsa llomnyrl vagy bemenetrl" #~ msgid "En-Armor a file or stdin" #~ msgstr "llomny vagy bemenet pnclozsa" #~ msgid "|NAME|use NAME as default recipient" #~ msgstr "|NV|NV hasznlata alaprtelmezett cmzettknt" #~ msgid "use the default key as default recipient" #~ msgstr "alaprt. kulcs haszn. alaprt. cmzettknt" #~ msgid "don't use the terminal at all" #~ msgstr "ne hasznlja a terminlt egyltaln" #~ msgid "force v3 signatures" #~ msgstr "3-as verzij alrsok erltetse" #~ msgid "do not force v3 signatures" #~ msgstr "ne erltesse a 3-as verzij alrsokat" #~ msgid "force v4 key signatures" #~ msgstr "4-es verzij alrsok erltetse" #~ msgid "do not force v4 key signatures" #~ msgstr "ne erltesse a 4-es verzij alrsokat" #~ msgid "always use a MDC for encryption" #~ msgstr "mindig hasznljon MDC-t titkostskor" #~ msgid "never use a MDC for encryption" #~ msgstr "soha ne hasznljon MDC-t titkostskor" #~ msgid "use the gpg-agent" #~ msgstr "gpg gynk hasznlata" #~ msgid "batch mode: never ask" #~ msgstr "ktegelt md: soha nem krdez" #~ msgid "assume yes on most questions" #~ msgstr "igen vlasz felttelezse a legtbb krdsre" #~ msgid "assume no on most questions" #~ msgstr "nem vlasz felttelezse a legtbb krdsre" #~ msgid "add this keyring to the list of keyrings" #~ msgstr "kulcskarika hozzadsa a kulcskarikalisthoz" #~ msgid "add this secret keyring to the list" #~ msgstr "titkoskulcs-karika hozzadsa a listhoz" #~ msgid "|NAME|use NAME as default secret key" #~ msgstr "|NV|NV hasznlata alaprtelmezett titkos kulcsknt" #~ msgid "|HOST|use this keyserver to lookup keys" #~ msgstr "|GPNV|kulcsszerver belltsa kulcsok keresshez" #~ msgid "|NAME|set terminal charset to NAME" #~ msgstr "|NV|terminl karakterkdolsnak megadsa" #~ msgid "|[file]|write status info to file" #~ msgstr "|[fjl]|llapotinformcik llomnyba rsa" #~ msgid "|KEYID|ultimately trust this key" #~ msgstr "|KULCS|alapveten megbzunk ebben a kulcsban" #~ msgid "|FILE|load extension module FILE" #~ msgstr "|fjl|bvt modul betltse" #~ msgid "emulate the mode described in RFC1991" #~ msgstr "RFC1991-ben lert md emulcija" #~ msgid "set all packet, cipher and digest options to OpenPGP behavior" #~ msgstr "opcik OpenPGP mdra lltsa" #~ msgid "set all packet, cipher and digest options to PGP 2.x behavior" #~ msgstr "opcik PGP 2.x mdra lltsa" #~ msgid "|N|use passphrase mode N" #~ msgstr "|N|N. sorszm jelszmd hasznlata" #~ msgid "|NAME|use message digest algorithm NAME for passphrases" #~ msgstr "|NV|NV kivonatol algoritmus haszn. jelszavakhoz" #~ msgid "|NAME|use cipher algorithm NAME for passphrases" #~ msgstr "|NV|NV rejtjelez algoritmus haszn. jelszavakhoz" #~ msgid "|NAME|use cipher algorithm NAME" #~ msgstr "|NV|NV rejtjelez algoritmus hasznlata" #~ msgid "|NAME|use message digest algorithm NAME" #~ msgstr "|NV|NV kivonatol algoritmus hasznlata" #~ msgid "|N|use compress algorithm N" #~ msgstr "|N|N. sorszm tmrt algoritmus hasznlata" #~ msgid "throw keyid field of encrypted packets" #~ msgstr "titkostott csomagok keyid mezjnek eldobsa" #~ msgid "Show Photo IDs" #~ msgstr "fotazonostk mutatsa" #~ msgid "Don't show Photo IDs" #~ msgstr "ne mutassa a fotazonostkat" #~ msgid "Set command line to view Photo IDs" #~ msgstr "parancssor lltsa fotazonostk megnzshez" #~ msgid "compress algorithm `%s' is read-only in this release\n" #~ msgstr "\"%s\" tmrtalgoritmus csak olvashat ebben a kiadsban.\n" #~ msgid "compress algorithm must be in range %d..%d\n" #~ msgstr "A tmrtalgoritmus szma %d s %d kz kell essen!\n" #~ msgid "" #~ "%08lX: It is not sure that this key really belongs to the owner\n" #~ "but it is accepted anyway\n" #~ msgstr "" #~ "%08lX: Nem biztos, hogy ez a kulcs valban a jelzett tulajdonoshoz\n" #~ "tartozik, ennek ellenre elfogadtuk.\n" #~ msgid "preference %c%lu is not valid\n" #~ msgstr "%c%lu preferencia rvnytelen!\n" #~ msgid "key %08lX: not a rfc2440 key - skipped\n" #~ msgstr "%08lX kulcs: nem rfc2440 kulcs - kihagytam.\n" #~ msgid "" #~ "NOTE: Elgamal primary key detected - this may take some time to import\n" #~ msgstr "" #~ "MEGJEGYZS: Elgamal elsdleges kulcsot rzkeltem.\n" #~ "Eltarthat egy ideig az importlsa.\n" #~ msgid " (default)" #~ msgstr " (alaprtelmezs)" #~ msgid "%s%c %4u%c/%08lX created: %s expires: %s" #~ msgstr "%s%c %4u%c/%08lX ltrehozva: %s lejr: %s" #~ msgid "Policy: " #~ msgstr "Eljrsmd: " #~ msgid "can't get key from keyserver: %s\n" #~ msgstr "Nem tudom lehvni a kulcsot a %s kulcsszerverrl.\n" #~ msgid "error sending to `%s': %s\n" #~ msgstr "Hiba %s-ra/-re kldskor: %s\n" #~ msgid "success sending to `%s' (status=%u)\n" #~ msgstr "Sikeresen felkldtem %s kulcsszerverre. (Sttusz: %u.)\n" #~ msgid "failed sending to `%s': status=%u\n" #~ msgstr "Nem tudtam felkldeni %s kulcsszerverre. Sttusz: %u.\n" #~ msgid "this keyserver does not support --search-keys\n" #~ msgstr "Ez a kulcsszerver nem tmogatja a --search-keys kapcsolt.\n" #~ msgid "can't search keyserver: %s\n" #~ msgstr "Nem tudok keresni a %s kulcsszerveren.\n" #~ msgid "" #~ "key %08lX: this is a PGP generated ElGamal key which is NOT secure for " #~ "signatures!\n" #~ msgstr "" #~ "%08lX kulcs: Ez egy PGP ltal ltrehozott ElGamal kulcs, mely\n" #~ "NEM biztonsgos alrsokhoz!\n" #~ msgid "" #~ "key %08lX has been created %lu second in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "%08lX kulcs %lu msodperccel a jvben kszlt. (Idugrs vagy " #~ "raproblma.)\n" #~ msgid "" #~ "key %08lX has been created %lu seconds in future (time warp or clock " #~ "problem)\n" #~ msgstr "" #~ "%08lX kulcs %lu msodperccel a jvben kszlt. (Idugrs vagy " #~ "raproblma.)\n" #~ msgid "key %08lX marked as ultimately trusted\n" #~ msgstr "A(z) %08lX kulcs alapveten megbzhatnak lett jellve.\n" #~ msgid "signature from Elgamal signing key %08lX to %08lX skipped\n" #~ msgstr "" #~ "%08lX Elgamal alrkulccsal %08lX kulcshoz kszlt alrst kihagytam.\n" #~ msgid "signature from %08lX to Elgamal signing key %08lX skipped\n" #~ msgstr "" #~ "%08lX kulccsal %08lX Elgamal alrkulcshoz kszlt alrst kihagytam.\n" #~ msgid "checking at depth %d signed=%d ot(-/q/n/m/f/u)=%d/%d/%d/%d/%d/%d\n" #~ msgstr "" #~ "Vizsglok a(z) %d. szinten, alrt=%d tb(-/k/n/r/t/a)=%d/%d/%d/%d/%d/%d.\n" #~ msgid "" #~ "Select the algorithm to use.\n" #~ "\n" #~ "DSA (aka DSS) is the digital signature algorithm which can only be used\n" #~ "for signatures. This is the suggested algorithm because verification of\n" #~ "DSA signatures are much faster than those of ElGamal.\n" #~ "\n" #~ "ElGamal is an algorithm which can be used for signatures and encryption.\n" #~ "OpenPGP distinguishs between two flavors of this algorithms: an encrypt " #~ "only\n" #~ "and a sign+encrypt; actually it is the same, but some parameters must be\n" #~ "selected in a special way to create a safe key for signatures: this " #~ "program\n" #~ "does this but other OpenPGP implementations are not required to " #~ "understand\n" #~ "the signature+encryption flavor.\n" #~ "\n" #~ "The first (primary) key must always be a key which is capable of " #~ "signing;\n" #~ "this is the reason why the encryption only ElGamal key is not available " #~ "in\n" #~ "this menu." #~ msgstr "" #~ "Vlassza ki a hasznlni kvnt algoritmust!\n" #~ "\n" #~ "A DSA (ms nven DSS) egy digitlis alrsi algoritmus, mely kizrlag\n" #~ "alrsokhoz hasznlhat. Ez az ajnlott algoritmus, mivel a DSA " #~ "alrsok\n" #~ "ellenrzse jval gyorsabb az ElGamal alrsoknl.\n" #~ "\n" #~ "Az ElGamal egy algoritmus, mely alrsokhoz s titkostshoz is\n" #~ "hasznlhat. Az OpenPGP az algoritmus kt fajtjt klnbzteti meg:\n" #~ "egy csak titkostt, s egy alrt s titkostt. Tulajdonkppen ez\n" #~ "a kett ugyanaz, de nhny paramtert specilisan kell megvlasztani\n" #~ "ahhoz, hogy a kulcs biztonsgos legyen alrs-ksztshez. Ez a program\n" #~ "megteszi ezt, de ms OpenPGP megvalstsoknak nem ktelez rteni a\n" #~ "az alr+titkost fajtt.\n" #~ "\n" #~ "Az elsdleges kulcsnak mindig olyannak kell lenni, amely kpes alrni.\n" #~ "Ez az oka annak, hogy a csak titkost ElGamal kulcs nem szerepel ebben\n" #~ "a menben." #~ msgid "" #~ "Although these keys are defined in RFC2440 they are not suggested\n" #~ "because they are not supported by all programs and signatures created\n" #~ "with them are quite large and very slow to verify." #~ msgstr "" #~ "Habr ezek a kulcsok definiltak az RFC2440-ben, mgsem ajnljuk ket,\n" #~ "mert nem tmogatottak minden programban, s az ezekkel kszlt alrsok\n" #~ "nagyon hosszak, s nagyon lass az ellenrzsk." #~ msgid "%lu keys so far checked (%lu signatures)\n" #~ msgstr "%lu kulcsot ellenriztem eddig (%lu alrssal).\n" #~ msgid "key incomplete\n" #~ msgstr "hinyos kulcs\n" #~ msgid "key %08lX incomplete\n" #~ msgstr "A(z) %08lX kulcs hinyos.\n" #~ msgid "quit|quit" #~ msgstr "kilps" #~ msgid " (%d) ElGamal (sign and encrypt)\n" #~ msgstr " (%d) ElGamal (alrs s titkosts)\n" #~ msgid "" #~ "The use of this algorithm is only supported by GnuPG. You will not be\n" #~ "able to use this key to communicate with PGP users. This algorithm is " #~ "also\n" #~ "very slow, and may not be as secure as the other choices.\n" #~ msgstr "" #~ "Ennek az algoritmusnak a hasznlatt csak a GnuPG tmogatja. Ezzel\n" #~ "a kulccsal n nem fog tudni kommuniklni a PGP-t hasznlkkal. Tovbb\n" #~ "ez az algoritmus nagyon lass, s taln nem is olyan biztonsgos, mint\n" #~ "a tbbi vlaszthat.\n" #~ msgid "Create anyway? " #~ msgstr "Mgis ltrehozzam? " #~ msgid "invalid symkey algorithm detected (%d)\n" #~ msgstr "rvnytelen szimmetrikus kulcs algoritmust talltam (%d).\n" #~ msgid "this keyserver is not fully HKP compatible\n" #~ msgstr "Ez a kulcsszerver nem teljesen HKP kompatbilis.\n" gnupg-1.4.20/po/da.gmo0000644000175000017500000042313612635457220011364 00000000000000 d(Pk-kkElNmfm0nIninnnnnn2o7Io2o#oDo.pILp7p'pp qq7qOqiqqqqqq+r&4r#[r(rrrrr(s?sXsws$sss&s t,(tUtrt!ttttt uu 3u?uTuquuuuuu*u"%v]HvBvv/v=,w(jw.w3w!w(xAx\x'dxxxxxxy,y'Lytyy"yyyyBz=Kzz"z%z&z!{%:{"`{#{'{ {{ |"|?|T|l|(}|$|||#|}$7}\}{}!}}} }~&1~%X~ ~~,~4~~&':b~ Ԁ'"4Wu-(0݁2HA  ̃A/^0\1NDc-0օ.I6*+'׆  $5Oj3Ї4 -Ao').Q$ ?Ɖ4:;vϊ,(+8T#&(؋&(?Wl7u6-%389l0<׍G@\>+܎=FN^f"x :͏#?Q d/ʐH-$,'Q8y&5ْ.5>*t!.0&!,Hu 8ɔ#&?"F.iH1"z($ƖE11c;5"8A$z˙o͛B^t%.5d* #D* !60X'<+ "5,X/1", "72Z (ʡ *J\wӢ! 5A5ɣ""(?hzդF .1O%ǥEfEo b 84'm>Ԩcd/ȩNEG,"#ݪ-+/)[&'Qq®ˮ+,,3Y 1˯(# +."Z+}" ̰?%Agر.(C l}  /:0j!ɵ!"8Ng%ӶjKy@ŷ-49O0K/|5'. 39-mp!ۼ$,(Irg-ԾԿ *+Fr #$=b  6%"7<2tr'>1= II4#= I?iD@+/1[NII&5p5;?BX<H-!"OHrE<`B)C :N.>2=*<h@FH-Uv$ -2@1sI>K.@z5*7,T004 29l:m65.Dhd*&1#Q2u>*=0M39"&!3'>[c%D$,i52_    9%R"x)&+ 58n . &BB5$&5D Sax(""9 \},'.)%X2~+)F%]5 ;#<_*  $<Pj:  6&Gn- <A (Nw/ 1 Ri,H$m %/.&73^  00$M=r%#-( Ab'#*Jh'& &*&Qx / ,/<"l9K%$;&`$#D2'9ar 1$<@C $!2D[Do+/ 60R/"&(6%_%$ .=[t2 )'Aiy/+$(&M$t',,*>B $,I$Jn"#7 [!|* -8$f' ."+&)R#|-%65K/"';70s"%/2P!d: !!(A+j8!40Ct26)9>x&GHB[# 0 P ` z      #  B P h         ': b   .   ( 2 !;  ] ~ ,      $ * H )K u  }   % % ,'T2q3&"71Fx!% %Fl     #& >)Hr$< $D6],;#M>- %="S-v+&*5<6r!&$4F2[IF6Na|01-#_#++,!,2N$*2..]r*  ,L%h&$#/&Sz3%*% Fdz(-96+:b,0/?7T*.7; 0Z 1 ;  %!7!)F!3p!6!:! "!"4"9G""5"-""#'# G#h#-|#### #5$$6$[$+v$4$%$!$C%*c%(%0%%&.&-@&*n&&+*'GV'2'/'%(F'(n(1(#((!()(3)\)-q)/),) )"*))*S*r* **2*1*-+6+#S+#w+!+"+-+,:-,Ih,A,",- )-3-F-V-u----- -.(.!A.c.x.....#. //+/E/Y/ m//// ///06 0W05s0#0 0001$1*=1!h1 11G112 242Q2Z2-w2,222 33 83Y3u333333D3F4EZ4D4E4A+57m56575=6>R66$676< 77H7F77797 18R8 i8$t88#88#8 9*$9*O9z9.;B;;<<=#=>.>L>j>>>4>:>82?,k?=?.?=@:C@,~@@ @@@A"AAA_A|AAA$A$A'B$(X;gX5X]X57Y7mY3YYYZZ%+Z#QZuZZZZ<Z [; [5I[[-;\2i\ \(\ \\A\8,]=e]"]]]^ ^35^.i^0^$^(^*_'B_j___ _=_0`+4`)``1`;`6`G/aLwaOaBb4WbIbbbbb$c7cVc gc=ucc*ccd$d9Dd~ddneGe4e- f99fDsf)f;f.g9Mg$gg7g)h(*h-Shhh hh4h'i7iRi)Yi9iiWij/j/j4!kKVk/kkOllmm"m>m n>nNngn"}nnEo$#pHpbp{pp!ppQpDqaqxqqq2q qrr/rNHrr1As%sss2t)t-t6uKEu&u.u.u>v9Uv;v*v4v(+w=Tww w)w-w +x.6xex$xx xx!xy2yQypy yy?)z-iz$z9zz#{*{'I{q{_{%{0 |(:|c||?)}Wi}n}%0~V~q~?&+fNqs5LMh2&%+67b1)̂,}2$Յ . 7X6u99 (/X,x27؇.=?4}180Ok""̉#36G!~9!P9r5 *  8CVu Ǝ)'>T)]hXGI6Ȑ?gP@B9;|(06+Iuc"~' ,416f !$͗- 3+0 \i(,#ޙ!$*B!m$)+ޚ" %-"S v:-4><{T<K8ZAߞ,!)NExKޟT*A/2X$Q}TϡA$?fDPE<HNˣ/ JRk!RJt@+I,>v7G?5OuSŧPIjO`$e#17:ISCKE-8s1:ޫ43N7<%? ]BjAA;1*m6v2̵)2)>\6cN=S'6{!$Ը"ESb%9_1= Y d6o^    ' 2= Z do   Ӿ+#$?,d&8C"5Xj0  M2#:!  -<Qj+ <!Wy."! %+4Q/2043O(0*[vC EG^0  $AZm93G0`2 HN@*(<: Vc5$)B-['W   1&=.d8!;?'N v 3"A9"{*?" -,(Z@5#1 F!g%$4, !6*X,65(F O \:i%:3-K@y`$/@'p%2O_#f   /''WJ& !+Md!M/3J ~A@ $5:p,05- %Nt.|,"4!Mo8*8c(v21 !/,D1q/#*,"O$_G0$!",D.q`b'd&&(*&.)U##!3 4=+r7,=*A7l2/':/-j898 &D*k.LB2/u3EIi+&J$#.H1w*.=&A0h<;$2=W88MUm'SUH^)!(/!Xz$%"":+W(% $@]x)#/1a|*64-J3j%  %& 4.6 e'p &1/,6I#EK63U,D,E+]#%/.Ji~ "- " 30@!q2<(9$b92#@*YT$/.Me+, 1#0U78:)21\/.!E'mpwLV-EX-s247+l*1-2#0V1&&2:/m,4 7%Dj{ &% $%,J-w$+0';8M"(& "3,V1C690j.1,8+.d1>A <F < D  ' E -\ 5 7 : 3 H "d H % E ?< #| * )  9  L Z m - A . '1B>t)+M ,W0." 5<J67?Lw?/'4N\0&$6![1} 6>6F}'2$)/(YKM & @"a#-%BC_P2' :G X!f!">$Z* 0=#Rv(*;DYlBC8-*f5"( K YNc&! 2$>9c6&$+(P#yO UR R I FE!F!D!8"9Q"?"@" #%*#;P#A#?#Q$`$(y$D$($% '%31%e%(}%%"%%-&/.&Kp;Y %M7$!jiG!Aav5OR6g-3OF&:}I{hVZt"so HbP eE =^^(x.U:TTU  Pb8{'4cY wPw =22NjO]a& `7VfSC}m oZX),kR&eQO*8K<1d3`4+p566V?vF#Iy;U|8zEuVHle)gPEhlN!/$; brXcCO)m;?"m(J|,hI^ '^i5rZ0'd<^CH_o$@bc1%hN g7)p[sH?Qxf` ~LM yf]f[WF zn{yc!_lmKX`*#@BB@}k/\>QY]\{g)x,e \>A/UzTJ9k3>VC !T-9R~swQ B9vd (Xq#bR&LWWBpv@]SLj>iD%[r2$zWa>~7*-Da+|: ?qsif?"3Fj"8+ (.t_A qn6(0:1=%K_@LX+k1R/J~[T.8xNG|*=%Bk}Dnh`s1vGM +9rwud2'' AJj#GyP\N/r" e-w*]m~ 00I<cYE3: 6yKplnQF2<4GYZ.#q;ISHo|z[u$CZ4E,Ll9uW0gt-.AMUqi5{Dd7=S<x_}, \nt&S5 o4JM Duat Enter the user ID. End with an empty line: Not enough random bytes available. Please do some other work to give the OS a chance to collect more entropy! (Need %d more bytes) Pick an image to use for your photo ID. The image must be a JPEG file. Remember that the image is stored within your public key. If you use a very large picture, your key will become very large as well! Keeping the image close to 240x288 is a good size to use. Supported algorithms: You need a user ID to identify your key; the software constructs the user ID from the Real Name, Comment and Email Address in this form: "Heinrich Heine (Der Dichter) " aka "%s" using %s key %s imported: %lu unchanged: %lu new subkeys: %lu new user IDs: %lu not imported: %lu w/o user IDs: %lu "%s": preference for cipher algorithm %s "%s": preference for compression algorithm %s "%s": preference for digest algorithm %s (subkey on main key ID %s) It is not certain that the signature belongs to the owner. The signature is probably a FORGERY. There is no indication that the signature belongs to the owner. This could mean that the signature is forged. algorithms on these user IDs: new signatures: %lu "%s" Card serial no. = Key fingerprint = Subkey fingerprint: secret keys read: %lu skipped new keys: %lu user IDs cleaned: %lu Subkey fingerprint: signatures cleaned: %lu (%c) Finished (%c) Toggle the authenticate capability (%c) Toggle the encrypt capability (%c) Toggle the sign capability (%d) DSA (set your own capabilities) (%d) DSA (sign only) (%d) DSA and Elgamal (%d) Elgamal (encrypt only) (%d) RSA (encrypt only) (%d) RSA (set your own capabilities) (%d) RSA (sign only) (%d) RSA and RSA (default) (0) I will not answer.%s (1) I have not checked at all.%s (1) Signature key (2) Encryption key (2) I have done casual checking.%s (3) Authentication key (3) I have done very careful checking.%s new key revocations: %lu %d = I do NOT trust %d = I don't know or won't say %d = I trust fully %d = I trust marginally %d = I trust ultimately Unable to sign. aka "%s" m = back to the main menu q = quit s = skip this key secret keys imported: %lu (main key ID %s) (non-exportable) (non-revocable) Primary key fingerprint: secret keys unchanged: %lu "%s" not a key ID: skipping "%s" was already locally signed by key %s "%s" was already signed by key %s # List of assigned trustvalues, created %s # (Use "gpg --import-ownertrust" to restore them) %d Admin PIN attempts remaining before card is permanently locked %d bad signatures %d keys processed (%d validity counts cleared) %d marginal(s) needed, %d complete(s) needed, %s trust model %d signatures not checked due to errors %d signatures not checked due to missing keys %d user IDs without valid self-signatures detected %lu keys cached (%lu signatures) %lu keys cached so far (%lu signatures) %lu keys processed so far %s ... %s does not support handler version %d %s does not yet work with %s %s encrypted data %s encrypted session key %s encryption will be used %s is the new one %s is the unchanged one %s keys may be between %u and %u bits long. %s keysizes must be in the range %u-%u %s makes no sense with %s! %s not allowed with %s! %s signature, digest algorithm %s %s. %s/%s encrypted for: "%s" %s/%s signature from: "%s" %s: There is limited assurance this key belongs to the named user %s: There is no assurance this key belongs to the named user %s: directory does not exist! %s: error reading free record: %s %s: error reading version record: %s %s: error updating version record: %s %s: error writing dir record: %s %s: error writing version record: %s %s: failed to append a record: %s %s: failed to create hashtable: %s %s: failed to create version record: %s%s: failed to zero a record: %s %s: invalid file version %d %s: invalid trustdb %s: invalid trustdb created %s: keyring created %s: not a trustdb file %s: skipped: %s %s: skipped: public key already present %s: skipped: public key is disabled %s: trustdb created %s: unknown suffix %s: version record with recnum %lu %s:%d: deprecated option "%s" %s:%d: invalid auto-key-locate list %s:%d: invalid export options %s:%d: invalid import options %s:%d: invalid keyserver options %s:%d: invalid list options %s:%d: invalid verify options %u-bit %s key, ID %s, created %s(No description given) (Probably you want to select %d here) (This is a sensitive revocation key) (sensitive)(unless you specify the key by fingerprint) (you may have used the wrong program for this task) * The `sign' command may be prefixed with an `l' for local signatures (lsign), a `t' for trust signatures (tsign), an `nr' for non-revocable signatures (nrsign), or any combination thereof (ltsign, tnrsign, etc.). --clearsign [filename]--decrypt [filename]--edit-key user-id [commands]--encrypt [filename]--lsign-key user-id--output doesn't work for this command --sign --encrypt [filename]--sign --symmetric [filename]--sign [filename]--sign-key user-id--store [filename]--symmetric --encrypt [filename]--symmetric --sign --encrypt [filename]--symmetric [filename]-k[v][v][v][c] [user-id] [keyring]... this is a bug (%s:%d:%s) 1 bad signature 1 signature not checked due to a missing key 1 signature not checked due to an error 1 user ID without valid self-signature detected 10 translator see trustdb.c:uid_trust_string_fixed@ (See the man page for a complete listing of all commands and options) @ Examples: -se -r Bob [file] sign and encrypt for user Bob --clearsign [file] make a clear text signature --detach-sign [file] make a detached signature --list-keys [names] show keys --fingerprint [names] show fingerprints @ Options: @Commands: ASCII armored output forced. Admin commands are allowed Admin commands are not allowed Admin-only command Answer "yes" (or just "y") if it is okay to generate the sub key.Answer "yes" if it is okay to delete the subkeyAnswer "yes" if it is okay to overwrite the fileAnswer "yes" if you really want to delete this user ID. All certificates are then also lost!Answer "yes" if you want to sign ALL the user IDsAnswer "yes" or "no"Are you sure that you want to sign this key with your key "%s" (%s) Are you sure you still want to add it? (y/N) Are you sure you still want to revoke it? (y/N) Are you sure you still want to sign it? (y/N) Are you sure you want to appoint this key as a designated revoker? (y/N) Are you sure you want to delete it? (y/N) Are you sure you want to replace it? (y/N) Are you sure you want to use it? (y/N) AuthenticateBAD signature from "%s"CA fingerprint: CRC error; %06lX - %06lX Can't check signature: %s Can't edit this key: %s Can't open `%s': %s CancelCardholder's given name: Cardholder's surname: Certificates leading to an ultimately trusted key: CertifyChange (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? Change (N)ame, (C)omment, (E)mail or (Q)uit? Change the preferences of all user IDs (or just of the selected ones) to the current list of preferences. The timestamp of all affected self-signatures will be advanced by one second. Changing expiration time for a subkey. Changing expiration time for the primary key. Cipher: Command expects a filename argument Comment: Compression: Create a designated revocation certificate for this key? (y/N) Create a revocation certificate for this key? (y/N) Create a revocation certificate for this signature? (y/N) Critical preferred keyserver: Critical signature notation: Critical signature policy: Current allowed actions: Current recipients: DSA key %s requires a %u bit or larger hash DSA key %s uses an unsafe (%u bit) hash DSA requires the hash length to be a multiple of 8 bits Delete this good signature? (y/N/q)Delete this invalid signature? (y/N/q)Delete this key from the keyring? (y/N) Delete this unknown signature? (y/N/q)Deleted %d signature. Deleted %d signatures. Detached signature. Digest: Displaying %s photo ID of size %ld for key %s (uid %d) Do you really want to delete the selected keys? (y/N) Do you really want to delete this key? (y/N) Do you really want to do this? (y/N) Do you really want to revoke the entire key? (y/N) Do you really want to revoke the selected subkeys? (y/N) Do you really want to revoke this subkey? (y/N) Do you really want to set this key to ultimate trust? (y/N) Do you want to issue a new signature to replace the expired one? (y/N) Do you want to promote it to a full exportable signature? (y/N) Do you want to promote it to an OpenPGP self-signature? (y/N) Do you want to sign it again anyway? (y/N) Do you want your signature to expire at the same time? (Y/n) ERROR: Email address: EncryptEnter Admin PIN: Enter JPEG filename for photo ID: Enter New Admin PIN: Enter New PIN: Enter PIN: Enter an optional description; end it with an empty line: Enter new filenameEnter number(s), N)ext, or Q)uit > Enter passphrase Enter passphrase: Enter the name of the key holderEnter the new passphrase for this secret key. Enter the notation: Enter the required value as shown in the prompt. It is possible to enter a ISO date (YYYY-MM-DD) but you won't get a good error response - instead the system tries to interpret the given value as an interval.Enter the size of the keyEnter the user ID of the addressee to whom you want to send the message.Enter the user ID of the designated revoker: Enter your preferred keyserver URL: Error reading backup key from `%s': %s Error: Combined name too long (limit is %d characters). Error: Double spaces are not allowed. Error: Login data too long (limit is %d characters). Error: Only plain ASCII is currently allowed. Error: Private DO too long (limit is %d characters). Error: The "<" character may not be used. Error: The trustdb is corrupted. Error: URL too long (limit is %d characters). Error: invalid characters in preference string. Error: invalid formatted fingerprint. Error: invalid length of preference string. Error: invalid response. Expired signature from "%s"Features: File `%s' exists. Give the name of the file to which the signature appliesGo ahead and type your message ... Good signature from "%s"Hash: Hint: Select the user IDs to sign Hit return when ready or enter 'c' to cancel: How carefully have you verified the key you are about to sign actually belongs to the person named above? If you don't know what to answer, enter "0". How much do you trust that this key actually belongs to the named user? I have checked this key casually. I have checked this key very carefully. I have not checked this key at all. IDEA cipher unavailable, optimistically attempting to use %s instead If that does not work, please consult the manual If you like, you can enter a text describing why you issue this revocation certificate. Please keep this text concise. An empty line ends the text. If you want to use this untrusted key anyway, answer "yes".In general it is not a good idea to use the same key for signing and encryption. This algorithm should only be used in certain domains. Please consult your security expert first.Invalid character in comment Invalid character in name Invalid command (try "help") Invalid key %s made valid by --allow-non-selfsigned-uid Invalid passphrase; please try againInvalid selection. Is this correct? (y/N) Is this okay? (y/N) Is this photo correct (y/N/q)? It is NOT certain that the key belongs to the person named in the user ID. If you *really* know what you are doing, you may answer the next question with yes. It's up to you to assign a value here; this value will never be exported to any 3rd party. We need it to implement the web-of-trust; it has nothing to do with the (implicitly created) web-of-certificates.Key %s is already revoked. Key available at: Key does not expire at all Key expires at %s Key generation canceled. Key generation failed: %s Key has been compromisedKey has only stub or on-card key items - no passphrase to change. Key is no longer usedKey is protected. Key is revoked.Key is supersededKey is valid for? (0) Key not changed so no update needed. KeyringKeyserver no-modifyLanguage preferences: Login data (account name): Make off-card backup of encryption key? (Y/n) N to change the name. C to change the comment. E to change the email address. O to continue with key generation. Q to quit the key generation.NOTE: %s is not available in this version NOTE: %s is not for normal use! NOTE: There is no guarantee that the card supports the requested size. If the key generation does not succeed, please check the documentation of your card to see what sizes are allowed. NOTE: This feature is not available in %s NOTE: This key is not protected! NOTE: a key's S/N does not match the card's one NOTE: backup of card key saved to `%s' NOTE: creating subkeys for v3 keys is not OpenPGP compliant NOTE: key has been revokedNOTE: keys are already stored on the card! NOTE: no default option file `%s' NOTE: old default options file `%s' ignored NOTE: primary key is online and stored on card NOTE: secondary key is online and stored on card NOTE: secret key %s expired at %s NOTE: sender requested "for-your-eyes-only" NOTE: signature key %s expired %s NOTE: simple S2K mode (0) is strongly discouraged NOTE: trustdb not writable Name may not start with a digit Name must be at least 5 characters long Need the secret key to do this. NnCcEeOoQqNo corresponding signature in secret ring No help availableNo help available for `%s'No reason specifiedNo subkey with index %d No such user ID. No trust value assigned to: No user ID with hash %s No user ID with index %d Not a valid email address Not signed by you. Notations: Note that this key cannot be used for encryption. You may want to use the command "--edit-key" to generate a subkey for this purpose. Note: Signer's address `%s' does not match DNS entry Note: This key has been disabled. Note: This key has expired! Note: Verified signer's address is `%s' Nothing deleted. Nothing to sign with key %s OpenPGP card no. %s detected OpenPGP card not available: %s Overwrite? (y/N) Owner trust may not be set while using a user provided trust database PIN callback returned error: %s PIN for CHV%d is too short; minimum length is %d PIN not correctly repeated; try againPlease correct the error first Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) Please don't put the email address into the real name or the comment Please enter a domain to restrict this signature, or enter for none. Please enter a new filename. If you just hit RETURN the default file (which is shown in brackets) will be used.Please enter an optional commentPlease enter name of data file: Please enter the depth of this trust signature. A depth greater than 1 allows the key you are signing to make trust signatures on your behalf. Please enter the passphrase; this is a secret sentence Please fix this possible security flaw Please insert the card and hit return or enter 'c' to cancel: Please note that the factory settings of the PINs are PIN = `%s' Admin PIN = `%s' You should change them using the command --change-pin Please note that the shown key validity is not necessarily correct unless you restart the program. Please remove selections from the secret keys. Please remove the current card and insert the one with serial number: %.*s Please repeat the last passphrase, so you are sure what you typed in.Please report bugs to . Please select at most one subkey. Please select exactly one user ID. Please select the reason for the revocation: Please select the type of key to generate: Please select what kind of key you want: Please select where to store the key: Please specify how long the key should be valid. 0 = key does not expire = key expires in n days w = key expires in n weeks m = key expires in n months y = key expires in n years Please specify how long the signature should be valid. 0 = signature does not expire = signature expires in n days w = signature expires in n weeks m = signature expires in n months y = signature expires in n years Please use the command "toggle" first. Please wait, entropy is being gathered. Do some work if it would keep you from getting bored, because it will improve the quality of the entropy. Possible actions for a %s key: Preferred keyserver: Primary key fingerprint:Private DO data: Proceed? (y/N) Pubkey: Public key is disabled. Quit without saving? (y/N) RSA modulus missing or not of size %d bits RSA prime %s missing or not of size %d bits RSA public exponent missing or larger than %d bits Real name: Really create the revocation certificates? (y/N) Really create? (y/N) Really delete this self-signature? (y/N)Really move the primary key? (y/N) Really remove all selected user IDs? (y/N) Really remove this user ID? (y/N) Really revoke all selected user IDs? (y/N) Really revoke this user ID? (y/N) Really sign all user IDs? (y/N) Really sign? (y/N) Really update the preferences for the selected user IDs? (y/N) Really update the preferences? (y/N) Reason for revocation: %s Repeat passphrase Repeat passphrase: Repeat this PIN: Replace existing key? (y/N) Replace existing keys? (y/N) Requested keysize is %u bits Reset Code is too short; minimum length is %d Reset Code not or not anymore available Revocation certificate created. Revocation certificate created. Please move it to a medium which you can hide away; if Mallory gets access to this certificate he can use it to make your key unusable. It is smart to print this certificate and store it away, just in case your media become unreadable. But have some caution: The print system of your machine might store the data and make it available to others! Save changes? (y/N) Secret key is available. Secret parts of primary key are not available. Secret parts of primary key are stored on-card. Select the algorithm to use. DSA (aka DSS) is the Digital Signature Algorithm and can only be used for signatures. Elgamal is an encrypt-only algorithm. RSA may be used for signatures or encryption. The first (primary) key must always be a key which is capable of signing.Set preference list to: Sex ((M)ale, (F)emale or space): SignSign it? (y/N) Signature does not expire at all Signature expired %s Signature expires %s Signature expires at %s Signature is valid for? (%s) Signature made %s Signature made %s using %s key ID %s Signature notation: Signature policy: SsEeAaQqSubkey %s is already revoked. Syntax: gpg [options] [files] Sign, check, encrypt or decrypt Default operation depends on the input data Syntax: gpgv [options] [files] Check signatures against known trusted keys The card will now be re-configured to generate a key of %u bits The minimum trust level for this key is: %s The random number generator is only a kludge to let it run - it is in no way a strong RNG! DON'T USE ANY DATA GENERATED BY THIS PROGRAM!! The self-signature on "%s" is a PGP 2.x-style signature. The signature is not valid. It does make sense to remove it from your keyring.The signature will be marked as non-exportable. The signature will be marked as non-revocable. There are no preferences on a PGP 2.x-style user ID. This JPEG is really large (%d bytes) ! This command is not allowed while in %s mode. This command is only available for version 2 cards This is a secret key! - really delete? (y/N) This is a signature which binds the user ID to the key. It is usually not a good idea to remove such a signature. Actually GnuPG might not be able to use this key anymore. So do this only if this self-signature is for some reason not valid and a second one is available.This is a valid signature on the key; you normally don't want to delete this signature because it may be important to establish a trust connection to the key or another key certified by this key.This key belongs to us This key has been disabledThis key has expired!This key is due to expire on %s. This key is not protected. This key may be revoked by %s key %sThis key probably belongs to the named user This key was revoked on %s by %s key %s This signature can't be checked because you don't have the corresponding key. You should postpone its deletion until you know which key was used because this signing key might establish a trust connection through another already certified key.This signature expired on %s. This will be a self-signature. This would make the key unusable in PGP 2.x. To be revoked by: To build the Web-of-Trust, GnuPG needs to know which keys are ultimately trusted - those are usually the keys for which you have access to the secret key. Answer "yes" to set this key to ultimately trusted Total number processed: %lu URL to retrieve public key: UncompressedUnknown signature type `%s' Usage: gpg [options] [files] (-h for help)Usage: gpgv [options] [files] (-h for help)Use this key anyway? (y/N) User ID "%s" compacted: %s User ID "%s" is expired.User ID "%s" is not self-signed.User ID "%s" is revoked.User ID "%s" is signable. User ID "%s": %d signature removed User ID "%s": %d signatures removed User ID "%s": already clean User ID "%s": already minimized User ID is no longer validWARNING: WARNING: "%s" is a deprecated command - do not use it WARNING: "%s" is a deprecated option WARNING: %s overrides %s WARNING: 2 files with confidential information exists. WARNING: Elgamal sign+encrypt keys are deprecated WARNING: This is a PGP 2.x-style key. Adding a designated revoker may cause some versions of PGP to reject this key. WARNING: This is a PGP2-style key. Adding a photo ID may cause some versions of PGP to reject this key. WARNING: This key has been revoked by its designated revoker! WARNING: This key has been revoked by its owner! WARNING: This key is not certified with a trusted signature! WARNING: This key is not certified with sufficiently trusted signatures! WARNING: This subkey has been revoked by its owner! WARNING: Using untrusted key! WARNING: We do NOT trust this key! WARNING: Weak key detected - please change passphrase again. WARNING: `%s' is an empty file WARNING: a user ID signature is dated %d seconds in the future WARNING: appointing a key as a designated revoker cannot be undone! WARNING: cipher algorithm %s not found in recipient preferences WARNING: digest algorithm %s is deprecated WARNING: encrypted message has been manipulated! WARNING: forcing compression algorithm %s (%d) violates recipient preferences WARNING: forcing digest algorithm %s (%d) violates recipient preferences WARNING: forcing symmetric cipher %s (%d) violates recipient preferences WARNING: invalid size of random_seed file - not used WARNING: key %s contains preferences for unavailable WARNING: key %s may be revoked: fetching revocation key %s WARNING: key %s may be revoked: revocation key %s not present. WARNING: keyserver handler from a different version of GnuPG (%s) WARNING: keyserver option `%s' is not used on this platform WARNING: message was encrypted with a weak key in the symmetric cipher. WARNING: message was not integrity protected WARNING: multiple plaintexts seen WARNING: multiple signatures detected. Only the first will be checked. WARNING: no user ID has been marked as primary. This command may cause a different user ID to become the assumed primary. WARNING: nothing exported WARNING: options in `%s' are not yet active during this run WARNING: potentially insecure symmetrically encrypted session key WARNING: program may create a core file! WARNING: recipients (-r) given without using public key encryption WARNING: secret key %s does not have a simple SK checksum WARNING: signature digest conflict in message WARNING: signing subkey %s has an invalid cross-certification WARNING: signing subkey %s is not cross-certified WARNING: the signature will not be marked as non-exportable. WARNING: the signature will not be marked as non-revocable. WARNING: this key might be revoked (revocation key not present) WARNING: unable to %%-expand notation (too large). Using unexpanded. WARNING: unable to %%-expand policy URL (too large). Using unexpanded. WARNING: unable to %%-expand preferred keyserver URL (too large). Using unexpanded. WARNING: unable to fetch URI %s: %s WARNING: unable to parse URI %s WARNING: unable to refresh key %s via %s: %s WARNING: unable to remove temp directory `%s': %s WARNING: unable to remove tempfile (%s) `%s': %s WARNING: unsafe enclosing directory ownership on configuration file `%s' WARNING: unsafe enclosing directory ownership on homedir `%s' WARNING: unsafe enclosing directory permissions on configuration file `%s' WARNING: unsafe enclosing directory permissions on homedir `%s' WARNING: unsafe ownership on configuration file `%s' WARNING: unsafe ownership on homedir `%s' WARNING: unsafe permissions on configuration file `%s' WARNING: unsafe permissions on homedir `%s' WARNING: using experimental cipher algorithm %s WARNING: using experimental digest algorithm %s WARNING: using experimental public key algorithm %s WARNING: using insecure memory! WARNING: using insecure random number generator!! We need to generate a lot of random bytes. It is a good idea to perform some other action (type on the keyboard, move the mouse, utilize the disks) during the prime generation; this gives the random number generator a better chance to gain enough entropy. What keysize do you want for the Authentication key? (%u) What keysize do you want for the Encryption key? (%u) What keysize do you want for the Signature key? (%u) What keysize do you want for the subkey? (%u) What keysize do you want? (%u) When you sign a user ID on a key, you should first verify that the key belongs to the person named in the user ID. It is useful for others to know how carefully you verified this. "0" means you make no particular claim as to how carefully you verified the key. "1" means you believe the key is owned by the person who claims to own it but you could not, or did not verify the key at all. This is useful for a "persona" verification, where you sign the key of a pseudonymous user. "2" means you did casual verification of the key. For example, this could mean that you verified the key fingerprint and checked the user ID on the key against a photo ID. "3" means you did extensive verification of the key. For example, this could mean that you verified the key fingerprint with the owner of the key in person, and that you checked, by means of a hard to forge document with a photo ID (such as a passport) that the name of the key owner matches the name in the user ID on the key, and finally that you verified (by exchange of email) that the email address on the key belongs to the key owner. Note that the examples given above for levels 2 and 3 are *only* examples. In the end, it is up to you to decide just what "casual" and "extensive" mean to you when you sign other keys. If you don't know what the right answer is, answer "0".You are about to revoke these signatures: You are using the `%s' character set. You can't change the expiration date of a v3 key You can't delete the last user ID! You did not specify a user ID. (you may use "-r") You don't want a passphrase - this is probably a *bad* idea! You don't want a passphrase - this is probably a *bad* idea! I will do it anyway. You can change your passphrase at any time, using this program with the option "--edit-key". You have signed these user IDs on key %s: You may not add a designated revoker to a PGP 2.x-style key. You may not add a photo ID to a PGP2-style key. You may not make an OpenPGP signature on a PGP 2.x key while in --pgp2 mode. You may try to re-create the trustdb using the commands: You must select at least one key. You must select at least one user ID. You must select exactly one key. You need a Passphrase to protect your secret key. You need a passphrase to unlock the secret key for user: "%s" You need a passphrase to unlock the secret key for user: "%.*s" %u-bit %s key, ID %s, created %s%s You selected this USER-ID: "%s" You should specify a reason for the certification. Depending on the context you have the ability to choose from this list: "Key has been compromised" Use this if you have a reason to believe that unauthorized persons got access to your secret key. "Key is superseded" Use this if you have replaced this key with a newer one. "Key is no longer used" Use this if you have retired this key. "User ID is no longer valid" Use this to state that the user ID should not longer be used; this is normally used to mark an email address invalid. Your current signature on "%s" has expired. Your current signature on "%s" is a local signature. Your decision? Your selection? Your selection? (enter `?' for more information): Your system can't display dates beyond 2038. However, it will be correctly handled up to 2106. [ full ][ undef ][ expired][ revoked][ unknown][User ID not found][filename][marginal][not set][revocation][self-signature][ultimate][uncertain]`%s' already compressed `%s' is not a JPEG file `%s' is not a regular file - ignored `%s' is not a valid character set `%s' is not a valid long keyID `%s' is not a valid signature expiration about to export an unprotected subkey access to admin commands is not configured action `%s' not supported with keyserver scheme `%s' add a key to a smartcardadd a photo IDadd a revocation keyadd a subkeyadd a user IDambiguous option `%s' anonymous recipient; trying secret key %s ... armor header: armor: %s assuming %s encrypted data assuming bad signature from key %s due to an unknown critical bit assuming signed data in `%s' automatically retrieve keys when verifying signaturesautomatically retrieved `%s' via %s bad MPIbad URIbad certificatebad keybad passphrasebad public keybad secret keybad signaturebe somewhat more quietbinarybuild_packet failed: %s cCcaching keyring `%s' can't access %s - invalid OpenPGP card? can't access `%s': %s can't close `%s': %s can't connect to `%s': %s can't create `%s': %s can't create backup file `%s': %s can't create directory `%s': %s can't create lock for `%s' can't disable core dumps: %s can't do this in batch mode can't do this in batch mode without "--yes" can't gen prime with pbits=%u qbits=%u can't generate a prime with less than %d bits can't handle public key algorithm %d can't handle text lines longer than %d characters can't handle this ambiguous signature data can't lock `%s' can't lock `%s': %s can't open `%s' can't open `%s': %s can't open signed data `%s' can't open the keyringcan't query passphrase in batch mode can't read `%s': %s can't stat `%s': %s can't use a symmetric ESK packet due to the S2K mode can't write `%s': %s canceledcancelled by user cancel|cancelcannot appoint a PGP 2.x style key as a designated revoker cannot avoid weak key for symmetric cipher; tried %d times! card does not support digest algorithm %s card is permanently locked! card reader not available card-no: change URL to retrieve keychange a CA fingerprintchange a card's PINchange card holder's namechange card holder's sexchange data on a cardchange the expiration date for the key or selected subkeyschange the language preferenceschange the login namechange the ownertrustchange the passphrasecheck signatureschecking created signature failed: %s checking the trustdb checksum errorcipher algorithm %d%s is unknown or disabled colon missingcompact unusable user IDs and remove all signatures from keycompact unusable user IDs and remove unusable signatures from keycompletes-needed must be greater than 0 conflicting commands could not parse keyserver URL create a public key when importing a secret keycreate ascii armored outputcreated: %screation timestamp missing data not saved; use option "--output" to save it dearmoring failed: %s decrypt data (default)decryption failed: %s decryption okay delete selected subkeysdelete selected user IDsdelete signatures from the selected user IDsdeleting keyblock failed: %s depth: %d valid: %3d signed: %3d trust: %d-, %dq, %dn, %dm, %df, %du directory `%s' created disable keydisableddisplay photo IDs during key listingsdisplay photo IDs during signature verificationdo not delete temporary files after using themdo not make any changesdo not update the trustdb after importelevate the trust of signatures with valid PKA dataenable keyenarmoring failed: %s encrypt dataencrypted with %lu passphrases encrypted with %s key, ID %s encrypted with %u-bit %s key, ID %s, created %s encrypted with 1 passphrase encrypted with unknown algorithm %d encrypting a message in --pgp2 mode requires the IDEA cipher encryption only with symmetric ciphererror allocating enough memory: %s error changing size of key %d to %u bits: %s error creating `%s': %s error creating keyring `%s': %s error creating passphrase: %s error finding trust record in `%s': %s error getting current key info: %s error getting new PIN: %s error in `%s': %s error in trailer line error reading `%s': %s error reading application data error reading fingerprint DO error reading keyblock: %s error reading secret keyblock "%s": %s error retrieving CHV status from card error writing `%s': %s error writing key to card: %s error writing keyring `%s': %s error writing public keyring `%s': %s error writing secret keyring `%s': %s existing key will be replaced expiredexpired: %sexpires: %sexport attribute user IDs (generally photo IDs)export keysexport keys to a key serverexport revocation keys marked as "sensitive"export signatures that are marked as local-onlyexporting secret keys not allowed external keyserver calls are not supported in this build external program calls are disabled due to unsafe options file permissions failed to initialize the TrustDB: %s failed to rebuild keyring cache: %s failed to store the creation date: %s failed to store the fingerprint: %s failed to store the key: %s failed to unprotect the subkey: %s failed to use default PIN as %s: %s - disabling further default use femalefetch the key specified in the card URLfile close errorfile create errorfile delete errorfile existsfile open errorfile read errorfile rename errorfile write errorfingerprint on card does not match requested one flag the selected user ID as primaryforcedforcing symmetric cipher %s (%d) violates recipient preferences fstat of `%s' failed in %s: %s fstat(%d) failed in %s: %s fullgeneral errorgenerate PGP 2.x compatible messagesgenerate a new key pairgenerate a revocation certificategenerate new keysgenerating key failed generating new key generating the deprecated 16-bit checksum for secret key protection gpg-agent is not available in this session gpg-agent protocol version %d is not supported gpg/card> honor the PKA record set on a key when retrieving keyshonor the preferred keyserver URL set on the keyiImMqQsSimport keys from a key serverimport signatures that are marked as local-onlyimport/merge keysimporting secret keys not allowed include revoked keys in search resultsinclude subkeys when searching by key IDinput line %u too long or missing LF input line longer than %d characters invalidinvalid S2K mode; must be 0, 1 or 3 invalid argumentinvalid armorinvalid armor header: invalid armor: line longer than %d characters invalid auto-key-locate list invalid clearsig header invalid dash escaped line: invalid default preferences invalid default-cert-level; must be 0, 1, 2, or 3 invalid export options invalid fingerprintinvalid hash algorithm `%s' invalid import options invalid item `%s' in preference string invalid keyringinvalid keyserver options invalid keyserver protocol (us %d!=handler %d) invalid list options invalid min-cert-level; must be 1, 2, or 3 invalid packetinvalid passphraseinvalid personal cipher preferences invalid personal compress preferences invalid personal digest preferences invalid radix64 character %02X skipped invalid root packet detected in proc_tree() invalid structure of OpenPGP card (DO 0x93) invalid value invalid verify options it is strongly suggested that you update your preferences and key "%s" not found on keyserver key "%s" not found: %s key %s has no user IDs key %s marked as ultimately trusted key %s occurs more than once in the trustdb key %s was created %lu second in the future (time warp or clock problem) key %s was created %lu seconds in the future (time warp or clock problem) key %s: "%s" %d new signatures key %s: "%s" %d new subkeys key %s: "%s" %d new user IDs key %s: "%s" %d signature cleaned key %s: "%s" %d signatures cleaned key %s: "%s" %d user ID cleaned key %s: "%s" %d user IDs cleaned key %s: "%s" 1 new signature key %s: "%s" 1 new subkey key %s: "%s" 1 new user ID key %s: "%s" not changed key %s: "%s" revocation certificate added key %s: "%s" revocation certificate imported key %s: PGP 2.x style key - skipped key %s: PKS subkey corruption repaired key %s: accepted as trusted key key %s: accepted non self-signed user ID "%s" key %s: already in secret keyring key %s: can't locate original keyblock: %s key %s: can't read original keyblock: %s key %s: direct key signature added key %s: doesn't match our copy key %s: duplicated user ID detected - merged key %s: invalid direct key signature key %s: invalid revocation certificate: %s - rejected key %s: invalid revocation certificate: %s - skipped key %s: invalid self-signature on user ID "%s" key %s: invalid subkey binding key %s: invalid subkey revocation key %s: key material on-card - skipped key %s: new key - skipped key %s: no public key - can't apply revocation certificate key %s: no public key for trusted key - skipped key %s: no subkey for key binding key %s: no subkey for key revocation key %s: no subkey for subkey binding signature key %s: no subkey for subkey revocation signature key %s: no user ID key %s: no user ID for signature key %s: no valid user IDs key %s: non exportable signature (class 0x%02X) - skipped key %s: not protected - skipped key %s: public key "%s" imported key %s: public key not found: %s key %s: removed multiple subkey binding key %s: removed multiple subkey revocation key %s: revocation certificate at wrong place - skipped key %s: secret key imported key %s: secret key not found: %s key %s: secret key with invalid cipher %d - skipped key %s: secret key without public key - skipped key %s: skipped subkey key %s: skipped user ID "%s" key %s: subkey signature in wrong place - skipped key %s: unexpected signature class (0x%02X) - skipped key %s: unsupported public key algorithm key %s: unsupported public key algorithm on user ID "%s" key already exists key export failed: %s key generation completed (%d seconds) key has been created %lu second in future (time warp or clock problem) key has been created %lu seconds in future (time warp or clock problem) key is not flagged as insecure - can't use it with the faked RNG! key not found on keyserver key operation not possible: %s keyblock resource `%s': %s keyring `%s' created keyserver communications error: %s keyserver did not send VERSION keyserver errorkeyserver internal error keyserver receive failed: %s keyserver refresh failed: %s keyserver search failed: %s keyserver send failed: %s keyserver timed out keysize invalid; using %u bits keysize rounded up to %u bits line too longlist all available datalist and check key signatureslist key and user IDslist keyslist keys and fingerprintslist keys and signatureslist preferences (expert)list preferences (verbose)list secret keysmake a detached signaturemake timestamp conflicts only a warningmake_keysig_packet failed: %s malemalformed CRC malformed GPG_AGENT_INFO environment variable malformed user idmarginalmarginals-needed must be greater than 1 max-cert-depth must be in the range from 1 to 255 menu to change or unblock the PINmove a backup key to a smartcardmove a key to a smartcardmoving a key signature to the correct place nNnested clear text signatures network errornevernever new configuration file `%s' created next trustdb check due at %s nono = sign found in group definition `%s' no cardno corresponding public key: %s no datano default secret keyring: %s no entropy gathering module detected no handler for keyserver scheme `%s' no keyserver action! no keyserver known (use option --keyserver) no need for a trustdb check no need for a trustdb check with `%s' trust model no need for a trustdb update with `%s' trust model no photo viewer set no remote program execution supported no revocation keys found for "%s" no secret key no secret subkey for public subkey %s - ignoring no signature found no signed data no such user idno ultimately trusted keys found no valid OpenPGP data found. no valid addressees no writable keyring found: %s no writable public keyring found: %s no writable secret keyring found: %s not a detached signature not an OpenPGP cardnot encryptednot forcednot processednot supportednote: random_seed file is empty note: random_seed file not updated oOokay, we are the anonymous recipient. okay|okayold encoding of the DEK is not supported old style (PGP 2.x) signature only accept updates to existing keysoperation is not possible without initialized secure memory option file `%s': %s original file name='%.*s' ownertrust information cleared ownertrust value missingpassphrase generated with unknown digest algorithm %d passphrase not correctly repeated; try againplease do a --check-trustdb please enter an optional but highly suggested email addressplease see %s for more information please see http://www.gnupg.org/documentation/faqs.html for more information please use "%s%s" instead please wait while key is being generated ... preference `%s' duplicated premature eof (in CRC) premature eof (in trailer) premature eof (no CRC) print the card statusproblem handling encrypted packet problem with the agent - disabling agent use prompt before overwritingprotection algorithm %d%s is not supported protection digest %d is not supported public and secret key created and signed. public key %s is %lu second newer than the signature public key %s is %lu seconds newer than the signature public key %s not found: %s public key decryption failed: %s public key does not match secret key! public key encrypted data: good DEK public key is %s public key not foundpublic key of ultimately trusted key %s not found qQquitquit this menuquoted printable character in armor - probably a buggy MTA has been used re-distribute this key to avoid potential algorithm mismatch problems read error in `%s': %s reading from `%s' reading options from `%s' reading public key failed: %s reading stdin ... reason for revocation: refreshing %d keys from %s refreshing 1 key from %s remove as much as possible from key after importremove as much as possible from key during exportremove keys from the public keyringremove keys from the secret keyringremove the passphrase from exported subkeysremove unusable parts from key after importremove unusable parts from key during exportrenaming `%s' to `%s' failed: %s repair damage from the pks keyserver during importrequesting key %s from %s requesting key %s from %s server %s resource limitresponse does not contain the RSA modulus response does not contain the RSA public exponent response does not contain the public key data revocation comment: revoke key or selected subkeysrevoke selected user IDsrevoke signatures on the selected user IDsrevokedrevoked by your key %s on %s revoked: %srounded up to %u bits save and quitsearch for keys on a key serversearching for "%s" from %s searching for "%s" from %s server %s searching for names from %s searching for names from %s server %s secret key "%s" not found: %s secret key already stored on a card secret key not availablesecret key parts are not available secret parts of key are not available select subkey Nselect user ID Nselected certification digest algorithm is invalid selected cipher algorithm is invalid selected compression algorithm is invalid selected digest algorithm is invalid selecting openpgp failed: %s sending key %s to %s sending key %s to %s server %s set a notation for the selected user IDsset preference list for the selected user IDsset the preferred keyserver URL for the selected user IDsshow IETF standard notations during signature listingsshow IETF standard notations during signature verificationshow admin commandsshow all notations during signature listingsshow all notations during signature verificationshow expiration dates during signature listingsshow key fingerprintshow only the primary user ID in signature verificationshow policy URLs during signature listingsshow policy URLs during signature verificationshow preferred keyserver URLs during signature listingsshow preferred keyserver URLs during signature verificationshow revoked and expired subkeys in key listingsshow revoked and expired user IDs in key listingsshow revoked and expired user IDs in signature verificationshow selected photo IDsshow the keyring name in key listingsshow this helpshow user ID validity during key listingsshow user ID validity during signature verificationshow user-supplied notations during signature listingsshow user-supplied notations during signature verificationsign a keysign a key locallysign or edit a keysign selected user IDs [* see below for related commands]sign selected user IDs locallysign selected user IDs with a non-revocable signaturesign selected user IDs with a trust signaturesignature verification suppressed signatures created so far: %lu signed by your key %s on %s%s%s signing failed: %s signing subkey %s is already cross-certified signing:skipped "%s": %s skipped "%s": duplicated skipped: public key already set skipped: public key already set as default recipient skipped: secret key already present skipping block of type %d skipping v3 self-signature on user ID "%s" standalone revocation - use "gpg --import" to apply standalone signature of class 0x%02x storing key onto card failed: %s subkey %s does not sign and so does not need to be cross-certified subpacket of type %d has critical bit set symmetric encryption of `%s' failed: %s system error while calling external program: %s take the keys from this keyringtextmodethe given certification policy URL is invalid the given preferred keyserver URL is invalid the given signature policy URL is invalid the signature could not be verified. Please remember that the signature file (.sig or .asc) should be the first file given on the command line. there is a secret key for public key "%s"! this is a PGP generated Elgamal key which is not secure for signatures!this key has already been designated as a revoker this may be caused by a missing self-signature this message may not be usable by %s this platform requires temporary files when calling external programs timestamp conflicttoggle between the secret and public key listingstoggle the signature force PIN flagtoo many cipher preferences too many compression preferences too many digest preferences too many entries in pk cache - disabled trust database errortrust record %lu is not of requested type %d trust record %lu, req type %d: read failed: %s trust record %lu, type %d: write failed: %s trust: %strustdb rec %lu: lseek failed: %s trustdb rec %lu: write failed (n=%d): %s trustdb transaction too large trustdb: lseek failed: %s trustdb: read failed (n=%d): %s trustdb: sync failed: %s trustlevel adjusted to FULL due to valid PKA info trustlevel adjusted to NEVER due to bad PKA info ultimateunable to display photo ID! unable to execute external program unable to execute program `%s': %s unable to execute shell `%s': %s unable to open JPEG file `%s': %s unable to read external program response: %s unable to set exec-path to %s unable to update trustdb version record: write failed: %s unable to use the IDEA cipher for all of the keys you are encrypting to. unable to use unknown trust model (%d) - assuming %s trust model unblock the PIN using a Reset Codeuncompressed|noneundefinedunexpected armor: unexpected dataunimplemented cipher algorithmunimplemented pubkey algorithmunknownunknown armor header: unknown cipher algorithmunknown compress algorithmunknown configuration item `%s' unknown default recipient "%s" unknown digest algorithmunknown key protection algorithm unknown option `%s' unknown packet typeunknown protection algorithm unknown pubkey algorithmunknown signature classunknown versionunnatural exit of external program unspecifiedunsupported URIunusable pubkey algorithmunusable public keyunusable secret keyupdate all keys from a keyserverupdate failed: %s update secret failed: %s update the trust databaseusage: %susage: gpg [options] use as output fileuse canonical text modeuse option "--delete-secret-keys" to delete it first. use strict OpenPGP behavioruse temporary files to pass data to keyserver helpersuse this user-id to sign or decryptuser ID "%s" is already revoked user ID: "%s" using %s trust model using cipher %s using default PIN as %s using subkey %s instead of primary key %s validate signatures with PKA datavalidity: %sverboseverification of Admin PIN is currently prohibited through this command verify CHV%d failed: %s verify a signatureverify the PIN and list all datawaiting for lock on `%s'... weak keyweak key created - retrying weird size for an encrypted session key (%d) will not run with insecure memory due to %s writing direct signature writing key binding signature writing new key writing public key to `%s' writing secret key stub to `%s' writing secret key to `%s' writing self signature writing to `%s' writing to stdout wrong secret key usedyYyesyou can only clearsign with PGP 2.x style keys while in --pgp2 mode you can only detach-sign with PGP 2.x style keys while in --pgp2 mode you can only encrypt to RSA keys of 2048 bits or less in --pgp2 mode you can only make detached or clear signatures while in --pgp2 mode you can update your preferences with: gpg --edit-key %s updpref save you can't sign and encrypt at the same time while in --pgp2 mode you cannot appoint a key as its own designated revoker you cannot use --symmetric --encrypt while in %s mode you cannot use --symmetric --encrypt with --s2k-mode 0 you cannot use --symmetric --sign --encrypt while in %s mode you cannot use --symmetric --sign --encrypt with --s2k-mode 0 you found a bug ... (%s:%d) you may not use %s while in %s mode you may not use cipher algorithm `%s' while in %s mode you may not use compression algorithm `%s' while in %s mode you may not use digest algorithm `%s' while in %s mode you must use files (and not a pipe) when working with --pgp2 enabled. |AN|New Admin PIN|A|Please enter the Admin PIN|A|Please enter the Admin PIN%%0A[remaining attempts: %d]|FD|write status info to this FD|NAME|encrypt for NAME|N|New PIN|N|set compress level N (0 disables)|RN|New Reset Code|[file]|make a clear text signature|[file]|make a signature|algo [files]|print message digests||Please enter the PIN||Please enter the PIN%%0A[sigs done: %lu]||Please enter the Reset Code for the cardProject-Id-Version: gnupg Report-Msgid-Bugs-To: translations@gnupg.org POT-Creation-Date: 2015-12-20 08:53+0100 PO-Revision-Date: 2012-11-04 20:27+0200 Last-Translator: Joe Hansen Language-Team: Danish Language: da MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); Indtast bruger-id'et. Slut med en tom linje: Ikke nok vilkårlige byte tilgængelig. Lav noget andet, så programmet har en chance for at indsamle mere entropi! (har brug for yderligere %d byte) Vælg et billede til brug for dit billed-id. Billedet skal være en JPEG-fil. Husk at billedet gemmes i din offentlige nøgle. Hvis du bruger et meget stort billede, vil din nøgle også blive meget stor! En billede på 240x288 er en god størrelse. Understøttede algoritmer: Du skal bruge et bruger-id for at identificere din nøgle; programmet konstruerer bruger-id'et fra fødselsnavn, kommentar og e-post-adresse i dette format: »Heinrich Heine (digteren) « også kendt som »%s« bruger %s nøgle %s importerede: %lu uændrede: %lu nye undernøgler: %lu nye bruger-id'er: %lu ikke importerede: %lu w/o bruger-id'er: %lu »%s«: præference for chifferalgoritme %s »%s«: præference for komprimeringsalgortime %s »%s«: præference for sammendragsalgortime %s (undernøgle på hovednøgle-id %s) Det er ikke sikkert at signaturen tilhører ejeren. Signaturen er formentlig FORFALSKET. Intet tyder på at denne signatur tilhører ejeren. Dette kan betyde at underskriften er forfalsket. algoritmer på disse bruger-id'er: nye underskrifter: %lu »%s« Serielnr. for kort = Nøglefingeraftryk = Undernøglefingeraftryk: hemmelige nøgler læst: %lu udeladte nye nøgler: %lu bruger-id'er ryddet: %lu Undernøglefingeraftryk: underskrifter ryddet: %lu (%c) Afsluttet (%c) Skift evnen til at godkende (%c) Skift evnen til at kryptere (%c) Skift evnen til at underskrive (%d) DSA (angiv dine egne evner) (%d) DSA (kun underskriv) (%d) DSA og Elgamal (%d) Elgamal (kun krypter) (%d) RSA (kun krypter) (%d) RSA (angiv dine egne evner) (%d) RSA (kun underskriv) (%d) RSA og RSA (standard) (0) Jeg vil ikke svare.%s (1) Jeg har ingen kontrol udført.%s (1) Underskriftsnøgle (2) Krypteringsnøgle (2) Jeg har udført en overfladisk kontrol.%s (3) Godkendelsesnøgle (3) Jeg har foretaget en meget omhyggelig kontrol.%s nye nøgletilbagekald: %lu %d = Jeg stoler IKKE på denne nøgle %d = Jeg ved det ikke eller vil ikke sige det %d = Fuld troværdighed %d = Marginal troværdighed %d = Jeg stoler fuldstændig på denne nøgle Kunne ikke underskrive. også kendt som »%s« h = tilbage til hovedmenuen a = afslut s = udelad denne nøgle hemmel. nøgler import: %lu (hovednøgle-id %s) (kan ikke eksporteres) (kan ikke tilbagekaldes)Primær nøglefingeraftryk:hemmel. nøgler uændret: %lu »%s« er ikke et nøgle-id: udelader »%s« var allerede underskrevet lokalt af nøgle %s »%s« var allerede underskrevet af nøgle %s # Liste over tildelte troværdige værdier, oprettede %s # (Brug »gpg --import-ownertrust« for at gendanne dem) %d PIN-forsøg for administrator før kort permanent låses %d ugyldige underskrifter %d nøgler behandlet (%d validiteter ryddet) %d marginaler krævet, %d færdiggjorte krævet, %s troværdighedsmodel %d underskrifter er ikke kontrolleret på grund af fejl %d underskrifter er ikke kontrolleret på grund af manglende nøgler %d bruger-id'er uden gyldige egenunderskrifter detekteret %lu nøgler mellemlagret (%lu underskrifter) %lu nøgler mellemlagret indtil nu (%lu underskrifter) %lu-nøgler behandlet %s ... %s understøtter ikke håndteringsversion %d %s virker endnu ikke med %s %s krypterede data %s krypteret sessionsnøgle %s-kryptering vil blive brugt %s er den nye %s er den uændrede %s nøgler kan være mellem %u og %u bit lange. %s nøglestørrelser skal være i intervallet %u-%u %s er meningsløs sammen med %s! %s ikke tilladt med %s! %s underskrift, sammendragsalgoritme %s %s. %s/%s krypteret for: »%s« %s/%s-underskrift fra: »%s« %s: Der er begrænset garanti for, at denne nøgle tilhører den navngivne bruger %s: Der er ingen garanti for, at denne nøgle tilhører den navngivne bruger %s: mappe findes ikke! %s: fejl ved læsning af fri post: %s %s: fejl ved læsning af versionspost: %s %s: fejl ved opdatering af versionspost: %s %s: fejl ved skrivning af mappepost: %s %s: fejl ved skrivning af versionspost: %s %s: mislykkedes med at vedhæfte en post: %s %s: kunne ikke oprette hashtabel: %s %s: kunne ikke oprette versionspost: %s%s: mislykkedes med at nulle en post: %s %s: ugyldig filversion %d %s: ugyldig trustdb %s: ugyldig trustdb oprettet %s: nøglering oprettet %s: ikke en trustdb-fil %s: udelod: %s %s: udelod: offentlig nøgle er allerede til stede %s: udelod: offentlig nøgle er slået fra %s: trustdb oprettet %s: ukendt suffiks %s: versionspost med recnum %lu %s:%d: forældet indstilling »%s« %s:%d: ugyldig liste for auto-key-locate %s:%d: ugyldige eksportindstillinger %s:%d: ugyldige importindstillinger %s:%d: ugyldige indstillinger for nøgleserver %s:%d: ugyldige listeindstillinger %s:%d: ugyldige verificeringsindstillinger %u-bit %s nøgle, id %s, oprettet %s(Ingen beskrivelse angivet) (Du vil sikkert vælge %d her) (Dette er en sensitiv tilbagekaldsnøgle) (sensitiv)(med mindre du angiver nøglen med fingeraftryk) (du kan have brugt det forkerte program for denne opgave) * Kommandoen »sign« kan have præfikset »l« for lokale underskrifter (lsign), et »t« for troværdighedsunderskrifter (tsign), et »nr« for underskrifter der ikke kan tilbagekaldes (nrsign), eller en kombination (ltsign, tnrsign etc.). --clearsign [filnavn]--decrypt [filnavn]--edit-key bruger-id [kommandoer]--encrypt [filnavn]--lsign-key bruger-id--output virker ikke for denne kommando --sign --encrypt [filnavn]--sign --symmetric [filnavn]--sign [filnavn]--sign-key bruger-id--store [filnavn]--symmetric --encrypt [filnavn]--symmetric --sign --encrypt [filnavn]--symmetric [filnavn]-k[v][v][v][c] [bruger-id] [nøglering]... dette er en fejl (%s:%d:%s) 1 ugyldig underskrift 1 underskrift er ikke kontrolleret på grund af en manglende nøgle 1 underskrift er ikke kontrolleret på grund af en fejl 1 bruger-id uden gyldig egenunderskrift detekteret 10 oversætter se trustdb.c:uid_trust_string_fixed@ (Se manualsiden for en fuldstændig liste over alle kommandoer og tilvalg) @ Eksempler: -se -r Mikael [fil] underskriv og krypter for bruger Mikael --clearsign [fil] lav en ren tekstunderskrift --detach-sign [fil] lav en separat underskrift --list-keys [navne] vis nøgler --fingerprint [navne] vis fingeraftryk @ Tilvalg: @Kommandoer: ASCII-pansret resultat er tvunget. Administratorkommandoer er tilladt Administratorkommandoer er ikke tilladt Kommandoer kun for administratoren Svar »yes« (eller bare »y«) hvis det er okay at oprette undernøglen.Svar »ja« hvis det er okay at slette undernøglenSvar »yes« hvis det er okay at overskrive filenSvar »yes« hvis du virkelig ønsker at slette denne bruger-id. Alle certifikater går så også tabt!Svar »yes« hvis du ønsker at underskrive ALLE bruger-id'erneSvar »yes« eller »no«Er du sikker på, at du ønsker at underskrive denne nøgle med din nøgle »%s« (%s) Er du sikker på, at du stadig ønsker at tilføje den? (j/N) Er du sikker på, at du ønsker at tilbagekalde den? (j/N) Er du sikker på, at du stadig vil underskrive (j/N) Er du sikker på, at du ønsker at udpege denne nøgle som en dedikeret tilbagekalder? (j/N) Er du sikker på, at du ønsker at slette den? (j/N) Er du sikker på, at du ønsker at erstatte den? (j/N) Er du sikker på, at du vil benytte billedet (j/N) GodkendUGYLDIG underskrift fra »%s«CA-fingeraftryk: CRC-fejl; %06lx - %06lx Kan ikke kontrollere underskrift: %s Kan ikke redigere denne nøgle: %s Kan ikke åbne »%s«: %s AfbrydKortholders fornavn: Kortholders efternavn: Certifikater der fører til en ultimativ troværdig nøgle: CertificerÆndr (N)avn, (K)ommentar, (E)post eller (O)kay/afslut(Q)? Ændr (N)avn, (K)ommentar, (E)-post eller afslut(Q)? Ændr præferencerne for alle bruger-id'er (eller kun de valgte) til den aktuelle præferenceliste. Tidsstemplet for alle påvirkede egenunderskrifter vil blive fremrykket med et sekund. Ændrer udløbstidspunkt for en undernøgle. Ændrer udløbstidspunkt for den primære nøgle. Chiffer: Kommando forventer en filnavnsparameter Kommentar: Komprimering: Opret et designet tilbagekaldscertifikat for denne nøgle? (j/N) Opret et tilbagekaldscertifikat for denne nøgle? (j/N) Opret et tilbagekaldscertifikat for denne underskrift? (j/N) Kritisk foretrukken nøgleserver: Kritisk underskriftnotation: Kritisk underskriftspolitik: Aktuelt tilladte handlinger: Aktuelle modtagere: DSA-nøgle %s kræver en %u bit eller større hash DSA-nøgle %s bruger en usikker (%u bit) hash DSA kræver at hashlængden skal gå op i 8 bit Slet denne gode underskrift? (j/N/a)Slet denne ugyldige underskrift? (j/N/a)Slet denne nøgle fra nøgleringen? (j/N) Slet denne ukendte underskrift? (j/n/a)Slettede %d underskrift. Slettede %d underskrifter. Frakoblet underskrift. Sammendrag: Viser %s billed'id med størrelse %ld for nøgle %s (uid %d) Vil du virkelig slette de valgte nøgler? (j/N) Vil du virkelig slette denne nøgle? (j/N) Vil du virkelig gerne gøre dette? (j/N) Vil du virkelig tilbagekalde hele nøglen? (j/N) Vil du virkelig tilbagekalde de valgte undernøgler? (j/N) Vil du virkelig tilbagekalde denne undernøgle? (j/N) Vil du virkelig gerne give denne nøgle ultimativ troværdighed? (j/N) Ønsker du at udstede en ny underskrift for at erstatte den udløbne? (j/N) Ønsker du at forfremme den til en fuld underskrift, der kan eksporteres (j/N) Ønsker du at forfremme den til en OpenPGP-egenunderskrift? (j/N) Ønsker du at underskrive den igen alligevel? (j/N) Ønsker du at dine underskrifter skal udløbe på samme tidspunkt? (J/n) FEJL: E-post-adresse: KrypterIndtast administrator-PIN: Indtast JPEG-filnavn for billed-id: Indtast ny administrator-PIN: Indtast ny PIN: Indtast PIN: Indtast en valgfri beskrivelse; afslut den med en tom linje: Indtast nyt filnavnIndtal tal, N)æste eller Q) for Afslut > Indtast adgangsfrase Indtast adgangsfrase: Indtast navnet for nøgleindehaverenIndtast den nye adgangsfrase for denne hemmelige nøgle. Indtast notationen: Indtast den krævede værdi som vist i prompten. Det er muligt at indtaste en ISO-dato (ÅÅÅÅ-MM-DD), men du får ikke et godt fejlsvar - i stedet for forsøger systemet at fortolke den givne værdi som et interval.Indtast størrelsen for nøglenIndtast bruger-id'et for adressen til dem du ønsker at sende beskeden.Indtast bruger'id for den dedikerede tilbagekalder: Indtast din foretrukne nøglerserveradresse: Fejl ved læsning af sikkerhedskopinøgle fra »%s«: %s Fejl: Kombineret navn er for langt (begrænsningen er på %d tegn). Fejl: Dobbelt mellemrum er ikke tilladt. Fejl: Loginddata er for lange (begrænsningen er %d tegn). Fejl: Kun ren ASCII er tilladt i øjeblikket. Fejl: Privat DO er for lang (begrænsningen er %d tegn). Fejl: Tegnet »<« må ikke bruges. Fejl: trustdb er ødelagt. Fejl: Adresse er for lang (begrænsningen er %d tegn). Fejl: ugyldige tegn i præferencestreng. Fejl: Ugyldigt formateret fingeraftryk. Fejl: ugyldig længde for præferencestreng. Fejl: ugyldigt svar. Udløbet underskrift fra »%s«Funktioner: Filen »%s« findes. Angiv navnet på filen som underskriften gælder forGå til sagen og skriv meddelelsen ... God underskrift fra »%s«Hash: Fif: Vælg bruger-id'erne at underskrive Tryk retur når klar eller indtast »c« for at afbryde: Hvor omhyggeligt har du verificeret, at nøglen du er ved at underskrive rent faktisk tilhører personen navngivet ovenfor? Hvis du ikke kender svaret, så indtast »0«. Hvor stor er din tillid til at denne nøgle rent faktisk tilhører den navngivne ejer? Jeg har overfladisk kontrolleret denne nøgle. Jeg har omhyggeligt kontrolleret denne nøgle. Jeg har overhovedet ikke kontrolleret denne nøgle. IDEA-chiffer utilgængelig, forsøger optimistisk at bruge %s i stedet for Hvis det ikke virker, så se venligst manualen Hvis du ønsker det, så kan du indtaste en tekst, der beskriver hvorfor du udsteder dette tilbagekaldscertifikat. Hold teksten kort og præcis. En tom linje afslutter teksten. Hvis du alligevel ønsker at bruge denne utroværdige nøgle, så svar »yes«.Det er generelt en god ide at bruge den samme nøgle for underskrift og kryptering. Denne algoritme bør kun bruges i bestemte domæner. Konsulter din sikkerhedsekspert først.Ugyldigt tegn i kommentar Ugyldige bogstaver i navn Ugyldig kommando (prøv »help«) Ugyldig nøgle %s gjort gyldig med --allow-non-selfsigned-uid Ugyldig adgangsfrase; prøv igenUgyldigt valg. Er dette korrekt? (j/N) Er dette okay? (j/N) Er dette billede korrekt (j/N/a)? Det er IKKE sikkert, at nøglen tilhører personen navngivet i bruger-id'et. Hvis du *virkelig* ved hvad du gør, så kan du besvare det næste spørgsmål med ja. Det er op til dig at tildele en værdi her; denne værdi vil aldrig blive eksporteret til tredjepart. Vi har brug for at implementere web-of-trust; det har intet at gøre med (oprettet underforstået) web-of-certificates.Nøgle %s er allerede tilbagekaldt. Nøgle tilgængelig på: Nøglen udløber aldrig Nøglen udløber den %s Nøgleoprettelse annulleret. Nøgleoprettelse mislykkedes: %s Nøglen er blevet komprimeretNøgle har kun stump eller ikkekort nøgleposter - ingen adgangsfrase at ændre. Nøglen bruges ikke længereNøglen er beskyttet. Nøglen er tilbagekaldt.Nøglen er blevet afløstNøgle er gyldig for? (0) Nøgle ikke ændret så ingen opdatering krævet. NøgleringNøgleserver no-modifySprogpræferencer: Loginddata (kontonavn): Lav sikkerhedskopi et andet sted end på kortet for krypteringsnøglen? (J/n) N for at ændre navnet. C for at ændre kommentaren. E for at ændre e-post-adressen. O for at fortsætte med nøgleoprettelse. Q for at afslutte nøgleoprettelsen.BEMÆRK: %s er ikke tilgængelig i denne session BEMÆRK: %s er ikke til normal brug! BEMÆRK: Der er ingen garanti for at kortet understøtter den ønskede størrelse. Hvis nøgleoprettelsen ikke lykkes, så kontroller dokumentationen for dit kort for at se hvilke størrelser, der er tilladt. BEMÆRK: Denne funktion er ikke tilgængelig i %s BEMÆRK: Denne nøgle er ikke beskyttet. BEMÆRK: en nøgles S/N matcher ikke kortets BEMÆRK: sikkerhedskopi af kortnøgle gemt på »%s« BEMÆRK: Oprettelse af undernøgler for v3-nøgler overholder ikke OpenPGP BEMÆRK: nøgle er blevet tilbagekaldtBEMÆRK: Nøgler er allerede gemt på kortet! BEMÆRK: Ingen standardfil for tilvalg »%s« BEMÆRK: Gammel standardfil for tilvalg »%s« blev ignoreret BEMÆRK: primær nøgle er på nettet og lagret på kort BEMÆRK: sekundær nøgle er på nettet og lagret på kort BEMÆRK: hemmelig nøgle %s udløb den %s BEMÆRK: afsender anmodte om »for-your-eyes-only« BEMÆRK: underskriftnøgle %s udløb %s BEMÆRK: simpel S2K-tilstand (0) frarådes på det skarpeste BEMÆRK: trustdb ikke skrivbar Navn må ikke starte med et tal Navn skal være mindst 5 bogstaver langt Har brug for den hemmelige nøgle for dette. NnCcEeOoQqIngen tilsvarende underskrift i hemmelig ring Ingen hjælp tilgængeligIngen hjælp tilgængelig for »%s«Ingen årsag angivetIngen undernøgle med indeks %d Ingen sådan bruger-id. Ingen tillidsværdi tildelt til: Ingen bruger-id med hash %s Ingen bruger-id med indeks %d Ikke en gyldig e-post-adresse Ikke underskrevet af dig. Notationer: Bemærk at denne nøgle ikke kan bruges til kryptering. Du kan bruge kommandoen »--edit-key« til at oprette en undernøgle til dette formål. Bemærk: Underskriftejers adresse »%s« matcher ikke DNS-post Bemærk: Denne nøgle er blevet deaktiveret. Bemærk: Denne nøgle er forældet! Bemærk: Verificeret underskriftsejers adresse er »%s« Intet slettet. Intet at underskrive med nøgle %s OpenPGP-kortnr. %s detekteret OpenPGP-kort er ikke tilgængeligt: %s Overskriv? (j/N) Ejertroværdighed kan ikke indstilles, når der bruges en brugerleveret troværdighedsdatabase PIN-tilbagekald returnerede fejl: %s PIN for CHV%d er for kort; minimumlængde er %d PIN er ikke korrekt gentaget; prøv igenRet venligst fejlen først Beslut dig for hvor meget du stoler på at denne bruger korrekt verificerer andre brugers nøgler (ved at kigge på pas, kontrollere fingeraftryk fra andre kilder etc.) Placer ikke e-post-adressen i fødselsnavnet eller kommentaren Indtast venligst et domæne for at begrænse denne underskrift, eller retur for ingen. Indtast et nyt filnavn. Hvis du bare taster RETUR, så vil standardfilen (som vises i parenteser) blive brugt.Indtast venligst en valgfri kommentarIndtast navn for datafil: Indtast venligst dybden på denne troværdighedsunderskrift. En dybde større end 1 giver nøglen du underskriver mulighed for at lavet troværdighedsunderskrifter på dine vegne. Indtast venligst adgangsfrasen; dette er en hemmelig sætning Ret venligst denne mulige sikkerhedsrisiko Indsæt venligst kortet og tryk på retur eller indtast »c« for at afbryde: Bemærk venligst at fabriksindstillingerne for PIN'erne er PIN = »%s« Admin-PIN = »%s« Du bør ændre dem med kommandoen --change-pin Bemærk venligst at den viste nøglevaliditet ikke nødvendigvis er korrekt med mindre du genstarter programmet. Fjern venligst markeringer fra de hemmelige nøgler. Fjern venligst det aktuelle kort og indsæt det med serielnummeret: %.*s Gentag venligst den sidste adgangsfrase, så du er sikker på det indtastede.Rapporter venligst fejl til . Vælg venligst højst en undernøgle. Vælg venligst præcis et bruger-id. Vælg venligst årsagen for tilbagekaldet: Vælg venligst hvilken slags nøgle der skal oprettes: Vælg venligst hvilken slags nøgle du vil have: Vælg venligst hvor nøglen skal gemmes: Angiv i hvor lang tid nøglen skal være gyldig. 0 = nøgle udløber ikke = nøgle udløber om n dage w = nøgle udløber om n uger m = nøgle udløber om n måneder y = nøgle udløber om n år Angiv i hvor lang tid underskriften skal være gyldig. 0 = underskriften udløber ikke = underskriften udløber om n dage w = underskriften udløber om n uger m = underskriften udløber om n måneder y = underskriften udløber om n år Brug venligst kommandoen »toggle« først. Vent venligst, der indsamles entropi. Lav noget andet hvis du keder dig imens, da det vil forbedre kvaliteten på entropien. Mulige handligner for en %s-nøgle: Fortrukken nøgleserver: Primær nøglefingeraftryk:Private DO-data: Fortsæt? (j/N) Pubkey: Offentlig nøgle er slået fra. Afslut uden at gemme? (j/N) RSA-modulus mangler eller har ikke størrelsen %d bit RSA-primtal %s mangler eller har ikke størrelsen %d bit RSA offentlig eksponent mangler eller større end %d bit Fødselsnavn: Opret tilbagekaldscertifikaterne? (j/N) Vil du virkelig oprette? (j/N) Virkelig slette denne egenunderskrift? (j/N)Vil du virkelig flytte den primære nøgle? (j/N) Vil du virkelig fjerne alle valgte bruger-id'er? (j/N) Vil du virkelig fjerne denne bruger-id? (j/N) Vil du virkelig tilbagekalde alle valgte bruger-id'er? (j/N) Vil du virkelig tilbagekalde dette bruger-id? (j/N) Vil du gerne underskrive alle bruger-id'er (j/N) Underskriv? (j/N) Opdater præferencerne for de valgte bruger-id'er (j/N) Opdater præferencerne? (j/N) Årsag for tilbagekald: %s Gentag adgangsfrase Gentag adgangsfrase: Gentag denne PIN: Erstat eksisterende nøgle? (j/N) Erstat eksisterende nøgler (j/N) Ønsket nøglestørrelse er %u bit Nulstillingskode er for kort; minimumlængde er %d Nulstillingskode er ikke eller ikke mere tilgængelig Tilbagekaldscertifikat oprettet. Tilbagekaldscertifikat oprettet. Flyt den venligst til et medie som du kan gemme væk; hvis Mallory får adgang til dette certifikat, kan han bruge den til at gøre din nøgle ubrugelig. Det er en god ide at udskrive dette certifikat og gemme det væk, i tilfælde af at dit medie pludselig ikke kan læses. Men vær forsigtig: Dit udskrivningssystem kan gemme dataene og gøre dem tilgængelige for andre! Gem ændringer? (j/N) Hemmelig nøgle er tilgængelig. Hemmelige dele for primær nøgle er ikke tilgængelige. Hemmelige dele for primær nøgle gemmes på kortet. Vælg algoritme. DSA (aka DSS) er Digital Signature Algorithm og kan kun bruges for underskrifter. Elgamal er en krypter kun algoritme. RSA kan bruges for underskrifter eller kryptering. Den første (primære) nøgle skal altid være en nøgle, som kan underskrive.Angiv præferenceliste til: Køn ((M)and, Kvinde(F) eller mellemrum): UnderskrivUnderskriv? (j/N) Underskriften udløber aldrig Underskrift udløbet %s Underskrift udløber %s Underskriften udløber den %s Underskrift er gyldig for? (%s) Underskrift lavet %s Underskrift lavet %s med %s nøgle-id %s Underskriftsnotation: Underskriftspolitik: UuKkGfAaUndernøgle %s er allerede tilbagekaldt. Syntaks: gpg [tilvalg] [filer] Sign, check, encrypt eller decrypt standardhandling afhænger af inddata Syntaks: gpgv [tilvalg] [filer] Kontroller underskrifter mod kendte troværdige nøgler Kortet vil nu blive omkonfigureret til at oprette en nøgle på %u bit Minimumstroværdighedsniveau for denne nøgle er: %s Oprettelsesprogrammet for vilkårlige tal er kun en midlertidig løsning - det er på ingen måde en stærk RNG! BRUG IKKE DATA OPRETTET MED DETTE PROGRAM! Egenunderskriften på »%s« er en underskrift i PGP 2.x-stil. Underskriften er ikke gyldig. Det giver mening at fjerne den fra din nøglering.Underskriften vil blive markeret som ikke at kunne eksporteres. Underskriften vil blive markeret som ikke at kunne tilbagekaldes. Der er ingen præferencer på et bruger-id i PGP 2.x-stil. Denne JPEG er virkelig stor (%d byte) ! Denne kommando er ikke tilladt i tilstanden %s. Denne kommando er kun tilgængelig for version 2-kort Dette er en hemmelig nøgle! - Slet? (j/N) Dette er en underskrift, som binder bruger-id'et til nøglen. Det er normalt ikke en god ide at fjerne sådan en underskrift. Faktisk kan GnuPG måske ikke bruge denne nøgle igen. Så gør kun dette hvis denne egenunderskrift er for en ugyldig årsag og en anden er tilgængelig.Dette er en gyldig underskrift på nøglen; du vil normalt ikke slette denne underskrift, da det kan være vigtigt at etablere en sikker forbindelse til nøglen eller en anden nøgle certificeret af denne nøgle.Denne nøgle tilhører os Denne nøgle er blevet deaktiveretDenne nøgle er udløbet!Denne nøgle er ved at udløbe på %s. Denne nøgle er ikke beskyttet. Denne nøgle er tilbagekaldt af %s nøgle %sDenne nøgle tilhører sikkert den navngivne bruger Denne nøgle blev tilbagekaldt den %s af %s nøgle %s Denne underskrift kan ikke kontrolleres, da du ikke har den tilsvarende nøgle. Du bør udsætte dets sletning indtil du ved hvilken nøgle, der blev brugt, da denne underskriftsnøgle kan etablere en troværdighedsforbindelse via en anden allerede certificeret nøgle.Denne underskrift udløb den %s. Dette vil være en egenunderskrift. Dette vil gøre nøglen ubrugelig i PGP 2.x. Tilbagekaldes af: For at bygge Web-of-Trust, skal GnuPG vide hvilke nøgler der stoles fuldt ud på - det er normalt de nøgler, som du har adgang til via den hemmelige nøgle. Svar »Yes« for at sætte denne nøgle til fuldt ud troværdig Totalt antal behandl.: %lu Adresse hvor offentlig nøgle skal hentes: UkomprimeretUkendt underskrifttype »%s« Brug: gpg [flag] [filer] (-h for hjælp)Brug: gpgv [tilvalg] [filer] (-h for hjælp)Brug denne nøgle alligevel? (j/N) Bruger-id »%s« komprimeret: %s Bruger-id »%s« er udløbet.Bruger-id »%s« er ikke egenunderskrevet.Bruger-id »%s« er tilbagekaldt.Bruger-id »%s« kan underskrives. Bruger-id »%s«: %d underskrift fjernet Bruger-id »%s«: %d underskrifter fjernet Bruger-id »%s«: allerede ryddet Bruger-id »%s«: allerede minimeret Bruger-id er ikke længere gyldigtADVARSEL: ADVARSEL: »%s« er en forældet kommando - brug den ikke ADVARSEL: »%s« er en forældet indstilling ADVARSEL: %s overskriver %s ADVARSEL: 2 filer med fortrolig information findes. ADVARSEL: Elgamalnøgler for underskriv+krypter er forældede ADVARSEL: Dette er en nøgle i PGP 2.x-stil. Tilføjelse af en dedikeret tilbagekalder kan medføre at nogle versioner af PGP afviser denne nøgle. ADVARSEL: Dette er en nøgle i PGP2-stil. Tilføjelse af et billed-id kan medføre at nogle version af PGP afviser denne nøgle. ADVARSEL: Denne nøgle er blevet tilbagekaldt af dens designmæssige tilbagekalder! ADVARSEL: Denne nøgle er blevet tilbagekaldt af dets ejer! ADVARSEL: Denne nøgle er ikke certificeret med en troværdig underskrift! ADVARSEL: Denne nøgle er ikke certificeret med tilstrækkelig troværdige underskrifter! ADVARSEL: Denne undernøgle er blevet tilbagekaldt af dens ejer! ADVARSEL: Bruger nøgle uden troværdighed! ADVARSEL: Vi tror IKKE på denne nøgle! ADVARSEL: svag nøgle detekteret - vælg venligst adgangsfrase igen. ADVARSEL: »%s« er en tom fil ADVARSEL: En bruger-id-underskrift er dateret %d sekunder inde i fremtiden ADVARSEL: Udpegning af en nøgle som en dedikeret tilbagekalder kan ikke fortrydes! ADVARSEL: chifferalgoritme %s ikke fundet i modtagerpræferencer ADVARSEL: sammendragsalgoritme %s er forældet ADVARSEL: krypteret besked er blevet manipuleret! ADVARSEL: Tvang for komprimeringsalgoritme %s (%d) overtræder modtagerens præferencer ADVARSEL: tvang af sammendragsalgoritme %s (%d) overtræder modtagerpræferencer ADVARSEL: Tvang for symmetrisk chiffer %s (%d) overtræder modtagerens præferencer ADVARSEL: ugyldig størrelse på filen random_seed - bruges ikke ADVARSEL: nøgle %s indeholder præferencer for utilgængelige ADVARSEL: nøgle %s kan tilbagekaldes: henter tilbagekaldsnøgle %s ADVARSEL: nøgle %s kan tilbagekaldes: tilbagekaldsnøgle %s er ikke til stede. ADVARSEL: nøgleserverhåndtering fra en anden version af GnuPG (%s) ADVARSEL: nøgleserverindstilling »%s« bruges ikke på denne platform ADVARSEL: Besked blev krypteret med en svag nøgle i den symmetriske chiffer. ADVARSEL: besked var ikke integritetsbeskyttet ADVARSEL: flere klartekster set ADVARSEL: flere underskrifter detekteret. Kun den første vil blive kontrolleret. ADVARSEL: Intet bruger-id er blevet markeret som primær. Denne kommando kan medføre at et anden bruger-id bliver den formodede primære. ADVARSEL: intet blev eksporteret ADVARSEL: indstillinger i »%s« er endnu ikke aktive under denne kørsel ADVARSEL: potentiel usikker symmetrisk krypteret sessionsnøgle ADVARSEL: program kan oprette en kernefil! ADVARSEL: modtagere (-r) angivet uden brug af offentlig nøglekryptering ADVARSEL: hemmelig nøgle %s har ikke en simpel SK-kontrolsum ADVARSEL: konflikt for underskriftssammendrag i besked ADVARSEL: underskriftsundernøgle %s har en ugyldig krydscertificering ADVARSEL: underskriftsundernøgle %s er ikke krydscertificeret ADVARSEL: Underskriften vil ikke blive markeret som ikke at kunne eksporteres. ADVARSEL: Underskriften vil ikke blive markereret som ikke at kunne tilbagekaldes. ADVARSEL: Denne nøgle kan tilbagekaldes (tilbagekaldsnøgle er ikke til stede) ADVARSEL: kan ikke %%-udvide notation (for stor). Bruger uden udvidelse. ADVARSEL: kan ikke %%-udvide politikadresse (for stor). Bruger uden udvidelse. ADVARSEL: kan ikke %%-udvide foretrukken nøgleserveradresse (for stor). Bruger uden udvidelse. ADVARSEL: kan ikke hente URI %s: %s ADVARSEL: kan ikke fortolke URI %s ADVARSEL: Kan ikke opdatere nøgle %s via %s: %s ADVARSEL: kan ikke fjerne midlertidig mappe »%s«: %s ADVARSEL: kan ikke fjerne midlertidig fil (%s) »%s«: %s ADVARSEL: Usikkert indelukket mappeejerskab på konfigurationsfil »%s« ADVARSEL: Usikkert indelukket mappeejerskab på hjemmemappe »%s« ADVARSEL: Usikre indelukkede mapperettigheder på konfigurationsfil »%s« ADVARSEL: Usikre indelukkede mapperettigheder på hjemmemappe »%s« ADVARSEL: Usikker ejerskab på konfigurationsfil »%s« ADVARSEL: Usikker ejerskab af hjemmemappe »%s« ADVARSEL: Usikre rettigheder på konfigurationsfil »%s« ADVARSEL: Usikre rettigheder på hjemmemappe »%s« ADVARSEL: bruger eksperimentel chifferalgoritme %s ADVARSEL: bruger eksperimentel sammendragsalgoritme %s ADVARSEL: bruger eksperimentel offentlig nøglealgoritme %s ADVARSEL: bruger usikker hukommelse! ADVARSEL: brug af usikkert vilkårligt taloprettelsesprogram!! Vi skal oprette en masse tilfældige byte. Det er en god ide at udføre nogle andre handlinger (tryk på tastaturet, flyt musen, brug diskene) under oprettelse af primtallet; dette giver det vilkårlig taloprettelsesprogram en bedre mulighed for at opnå nok entropi. Hvilken nøglestørrelse ønsker du for godkendelsesnøglen? (%u) Hvilken nøglestørrelse ønsker du for krypteringsnøglen? (%u) Hvilken nøglestørrelse ønsker du for underskriftsnøglen (%u) Hvilken nøglestørrelse ønsker du for undernøglen? (%u) Hvilken nøglestørrelse ønsker du? (%u) Når du underskriver et bruger-id på en nøgle, så skal du først verificere at nøglen tilhører personen navngivet i bruger-id'et. Det er nyttigt for andre, at de ved hvor omhyggeligt, du har verificeret dette. »0« betyder at du ikke gjorde noget specielt for for at verificere denne nøgle »1« betyder at du tror at nøglen er ejet af den person, som hævder at eje den men du kunne ikke, eller verificerede ikke nøglen overhovedet. Dette er nyttigt for en »persona«-verifikation, hvor du underskriver nøglen for en pseudonymous bruger. »2« betyder at du udførte lemfældig verifikation af nøglen. For eksempel kan dette betyde, at du verificerede fingeraftrykket for nøglen og kontrollerede bruger-id'et på nøglen mod et billed-id. »3« betyder at du udførte omfattende verifikation af nøglen. For eksempel, kan dette betyde, at du verificerede fingeraftrykket for nøglen med ejeren af nøglen personligt, og at du kontrollerede, via et dokument der er svært at forfalske med et billed-id (såsom et pas) at navnet for nøgleejeren matcher navnet i bruger-id'et på nøglen, og endelig at du verificerede (med udveksling af e-post) at e-post-adressen på nøglen tilhører nøgleejeren. Bemærk at eksemplerne angivet ovenfor for niveau 2 og 3 kun er eksempler. Det er op til dig at beslutte hvad »vilkårlig« og »omfattende« betyder, når du underskriver andre nøgler. Hvis du ikke kender det korrekte svar, så svar »0«.Du er i gang med at tilbagekalde disse underskrifter: Du bruger tegnsættet »%s«. Du kan ikke ændre udløbsdatoen for en v3-nøgle Du kan ikke slette det sidste bruger-id! Du angav ikke et bruger-id. (du kan bruge »-r«) Du ønsker ikke en adgangsfrase - dette er en *dårlig* ide! Du ønsker ikke en adgangsfrase - dette er en *dårlig* ide! Jeg giver dig en alligevel. Du kan ændre din adgangsfrase på ethvert tidspunkt ved at bruge dette program med tilvalget »--edit-key«. Du har underskrevet disse bruger-id'er på nøgle %s: Du må ikke tilføje en dedikeret tilbagekalder til en nøgle i PGP 2.x-stil. Du må ikke tilføje et billed-id til en nøgle i PGP2-stil. Du kan ikke lave en OpenPGP-underskrift på en PGP 2.x-nøgle i tilstanden --pgp2. Du kan forsøge at genskabe trustdb med kommandoerne: Du skal vælge mindst en nøgle. Du skal vælge mindst et bruger-id. Du skal vælge præcis en nøgle. Du skal bruge en adgangsfrase til at beskytte din hemmelige nøgle. Du skal bruge en adgangsfrase til at åbne den hemmelige nøgle for bruger: »%s« Du skal bruge en adgangsfrase for at låse den hemmelige nøgle op for brugeren: »%.*s« %u-bit %s nøgle, id %s, oprettet %s%s. Du valgte denne BRUGER-ID: "%s" Du skal angive en årsag for certifikationen. Afhængig af konteksten har du mulighed for at vælge fra denne liste: »Nøgle er blevet komprimeret« Brug denne hvis du har en grund til at tro, at uautoriserede personer har fået adgang til din hemmelige nøgle. »Nøgle er afløst« Brug denne hvis du har erstattet denne nøgle med en nyere. »Nøgle er ikke længere i anvendelse« Brug denne hvis du har tilbagetrukket denne nøgle. »Bruger-id er ikke længere gyldig« Brug denne for at angive at bruger-id'et ikke længere skal bruges; Denne bruges normalt til at markere en e-post-adresse som ugyldig. Din aktuelle underskrift på »%s« er udløbet. Din aktuelle underskrift på »%s« er en lokal underskrift. Dit valg? Dit valg? Dit valg? (indtast »?« for yderligere information): Dit system kan ikke vise datoer efter 2038. Det vil dog blive korrekt håndteret op til 2106. [ fuld ][ ej def][ udløbet][ tilb.][ ukendt][Bruger-id blev ikke fundet][filnavn][marginal][ikke indstillet][tilbagekald][egenunderskrift][ ultim. ][usikker]»%s« allerede komprimeret »%s« er ikke en JPEG-fil »%s« er ikke en regulær fil - ignoreret »%s« er ikke et gyldigt tegnsæt »%s« er ikke et gyldigt nøgle-id »%s« er ikke et gyldigt underskriftudløb eksporterer en ubeskyttet undernøgle adgang til administratorkommandoer er ikke konfigureret handling »%s« er ikke understøttet med nøgleserverskema »%s« tilføj en nøgle til et smartkorttilføj billed-idtilføj en tilbagekaldsnøgletilføj en undernøgletilføj bruger-idtvetydigt tilvalg »%s« anonym modtager; prøver hemmelig nøgle %s ... panserhoved: panser: %s antager %s krypterede data antager ugyldig underskrift fra nøgle %s på grund af en ukendt kritisk del antager underskrevne data i »%s« hent automatisk nøgler når der verificeres underskrifterhentede automatisk »%s« via %s ugyldig MPIugyldig URIugyldigt certifikatugyldig nøgleugyldig adgangsfraseugyldig offentlig nøgleugyldig hemmelig nøgleugyldig underskriftvær mindre uddybendebinærbuild_packet mislykkedes: %s cCmellemlagrer nøglering »%s« kan ikke tilgå %s - ugyldig OpenPGP-kort? kan ikke tilgå »%s«: %s kan ikke lukke »%s«: %s kan ikke forbinde til »%s«: %s kan ikke oprette »%s«: %s kan ikke oprette sikkerhedskopifil »%s«: %s kan ikke oprette mappe »%s«: %s kan ikke oprette lås for »%s« kan ikke slå kernedump fra: %s kan ikke udføre dette i jobtilstand kan ikke udføre dette i jobtilstand uden »--yes« kan ikke oprette primtal med pbits=%u qbits=%u kan ikke oprette et primtal med mindre end %d bit kan ikke håndtere offentlig nøglealgoritme %d kan ikke håndtere tekstlinjer længere end %d tegn kan ikke håndtere disse tvetydige underskriftdata kan ikke låse »%s« kan ikke låse »%s«: %s kan ikke åbne »%s« kan ikke åbne »%s«: %s kan ikke åbne underskrevne data »%s« kan ikke åbne nøgleringkan ikke forespørge adgangsfrase i jobtilstand kan ikke læse »%s«: %s kan ikke køre »%s«: %s kan ikke bruge en symmetrisk ESK-pakke på grund af S2K-tilstanden kan ikke skrive »%s«: %s afbrudtafbrudt af bruger afbryd|stopkan ikke udpege en nøgle i PGP 2.x-stil som dedikeret tilbagekalder kan ikke undgå svag nøgle for symmetrisk chiffer: prøvede %d gange! kort understøtter ikke sammendragsalgoritme %s kort er permanent låst! kortlæser er ikke tilgængelig kortnr.: ændr adresse for at indhente nøgleændr et CA-fingeraftrykændr et korts PINændr kortholders navnændr kortholders kønændr data på et kortændr udløbsdatoen for nøglen eller valgte undernøglerændr sprogpræferencerneændr logindnavnetændr ejertroværdighedenændr adgangsfrasenkontroller underskrifterkontrol af oprettet underskrift mislykkedes: %s kontrollerer trustdb kontrolsumfejlchifferalgoritme %d%s er ukendt eller deaktiveret kolon manglerkomprimer ubrugelige bruger-id'er og fjern alle underskrifter fra nøglekomprimer ubrugelige bruger-id'er og fjern ubrugelige underskrifter fra nøglecompletes-needed skal være større end 0 kommandoer er i konflikt kunne ikke fortolke nøgleserveradresse opret en offentlig nøgle under import af en hemmelig nøgleopret ascii-pansrede uddataoprettet: %soprettelsestidsstempel mangler data ej gemt; brug tilvalg »--output« for at gemme fjernelse af panser mislykkedes: %s afkrypter data (standard)afkryptering mislykkedes: %s afkryptering okay slet valgte undernøglerslet valgte bruger-id'erslet underskrifter fra de valgte bruger-id'ersletning af nøgleblok mislykkedes: %s dybde: %d gyldig: %3d underskrevet: %3d troværdighed: %d-, %dq, %dn, %dm, %df, %du mappe »%s« oprettet deaktiver nøgledeaktiveretvis billed-id'er under nøglevisningervis billed-id'er under underskriftverificeringslet ikke midlertidige filer efter at de er blevet brugtlav ingen ændringeropdater ikke trustdb efter importhæv troværdigheden for underskrifter med gyldige PKA-dataaktiver nøglepåklædning af panser mislykkedes: %s krypter datakrypteret med %lu adgangsfraser krypteret med %s nøgle, id %s krypteret med %u-bit %s nøgle, id %s, oprettet %s krypteret med 1 adgangsfrase krypteret med ukendt algoritme %d kryptering af en besked i tilstanden --pgp2 kræver IDEA-chifret krypter kun med symmetrisk chifferfejl ved allokering af nok hukommelse: %s fejl ved ændring af størrelsen på nøglen %d til %u bit: %s fejl ved oprettelse af »%s«: %s fejl ved oprettelse af nøglering »%s«: %s fejl ved oprettelse af adgangsfrase: %s fejl under forsøg på at finde troværdighedspost i »%s«: %s fejl ved indhentelse af aktuel nøgleinformation: %s fejl ved indhentelse af ny PIN: %s fejl i »%s«: %s fejl i trailerlinje fejl ved læsning af »%s«: %s fejl ved læsning af programdata fejl ved læsning af fingeraftryk DO fejl ved læsning af nøgleblok: %s fejl ved læsning af hemmelig nøgleblok »%s«: %s fejl ved indhentelse af CHV-status fra kort fejl ved skrivning af »%s«: %s fejl ved skrivning af nøgle til kort: %s fejl ved skrivning af nøglering »%s«: %s fejl ved skrivning af offentlig nøglering »%s«: %s fejl ved skrivning af hemmelig nøglering »%s«: %s eksisterende nøgle vil blive erstattet udløbetudløbet: %sudløber: %sbruger-id'er for eksportattributter (normalt billed-id'er)eksporter nøglereksporter nøgler til en nøgletjenertilbagekaldsnøgler for eksport markeret som »sensitive«eksportunderskrifter som er markeret som kun lokaleeksport af hemmelige nøgler er ikke tilladt eksterne nøgleserverkald er ikke understøttet i denne bygning kald fra eksterne programmer er deaktiveret på grund af usikre rettigheder for indstillingsfil kunne ikke initialisere TrustDB: %s kunne ikke genbygge nøgleringsmellemlager: %s kunne ikke gemme oprettelsesdatoen: %s kunne ikke gemme fingeraftrykket: %s kunne ikke gemme nøglen: %s kunne ikke fjerne beskyttelse på undernøgle: %s kunne ikke bruge standard-PIN som %s: %s - deaktiverer yderligere standardbrug kvindehent nøglen angivet i kortadressenfejl under fillukningfejl under filoprettelsefejl under filsletningfilen findesfejl under filåbningfillæsefejlfejl under filomdøbningfilskrivefejlfingeraftryk på kort matcher ikke den anmodte marker den valgte bruger-id som primærtvungettvang for symmetrisk chiffer %s (%d) overtræder modtagerens præferencer fstat for »%s« mislykkedes i %s: %s fstat(%d) mislykkedes i %s: %s fuldgenerel fejlopret PGP 2.x-kompatible beskederopret et nyt nøgleparopret et tilbagekaldscertifikatopret nye nøgleroprettelse af nøgle mislykkedes opretter ny nøgle opretter den forældede 16-bit-kontrolsum for beskyttelse af hemmelig nøgle gpg-agent er ikke tilgængelig i denne session gpg-agent-protokolversion %d er ikke understøttet gpg/card> overhold PKA-posten angivet på en nøgle når der hentes nøgleroverhold den foretrukne nøglerserveradresse angivet på nøgleniImMqQsSimporter nøgler fra en nøgleserverimporter underskrifter som er markeret som local-onlyimporter/sammenføj nøglerimport af hemmelige nøgler er ikke tilladt inkluder tilbagekaldte nøgler i søgeresultaterinkluder undernøgler når der søges efter nøgle-idinddatalinje %u er for lang eller mangler LF inddatalinje er længere end %d tegn ugyldigugyldig S2K-tilstand; skal være 0, 1 eller 3 ugyldig parameterugyldigt panserugyldigt panserhoved: ugyldigt panser: linje længere end %d tegn ugyldig liste for auto-key-locate ugyldigt clearsig-hoved ugyldig striplet undvegen linje: ugyldige standardpræferencer ugyldigt default-cert-level; skal være 0, 1, 2 eller 3 ugyldige eksportindstillinger ugyldig fingeraftrykugyldig hash-algoritme »%s« ugyldige importindstillinger ugyldigt punkt »%s« i præferencestreng ugyldig nøgleringugyldige indstillinger for nøgleserver ugyldig nøgleserverprotokol (os %d!=håndtag %d) ugyldige listeindstillinger ugyldigt min-cert-level; skal være 1, 2 eller 3 ugyldig pakkeugyldig adgangsfraseugyldige præferencer for personlig chiffer ugyldige præferencer for personlig komprimering ugyldige præferencer for personlig sammendrag ugyldigt radix64-tegn %02x udeladt ugyldig rodpakke detekteret i proc_tree() ugyldig struktur for OpenPGP-kort (DO 0x93) ugyldig værdi ugyldige verificeringsindstillinger det anbefales på det stærkeste, at du opdaterer dine præferencer og nøgle »%s« blev ikke fundet på nøgleserver nøglen »%s« blev ikke fundet: %s nøgle %s har ingen bruger-id'er nøgle %s markeret som ultimativ troværdig nøgle %s fremgår mere end en gang i trustdb nøgle %s blev oprettet %lu sekund inde i fremtiden (tidsforskydning eller et problem med uret) nøgle %s blev oprettet %lu sekunder inde i fremtiden (tidsforskydning eller et problem med uret) nøgle %s: »%s« %d nye underskrifter nøgle %s: »%s« %d nye undernøgler nøgle %s: »%s« %d nye bruger-id'er nøgle %s: »%s« %d underskrift renset nøgle %s: »%s« %d underskrifter renset nøgle %s: »%s« %d bruger-id renset nøgle %s: »%s« %d bruger-id'er renset nøgle %s: »%s« 1 ny underskrift nøgle %s: »%s« 1 ny undernøgle nøgle %s: »%s« 1 ny bruger-id nøgle %s: »%s« ikke ændret nøgle %s: »%s« tilbagekaldscertifikat tilføjet nøgle %s: »%s« tilbagekaldscertifikat importeret nøgle %s: nøgle i PGP 2.x-stil - udeladt nøgle %s: korruption af PKS-undernøgle er repareret! nøgle %s: accepteret som troværdig nøgle nøgle %s: accepteret ikke egenunderskrevet bruger-id »%s« nøgle %s: allerede i hemmelig nøglering nøgle %s: kan ikke lokalisere original nøgleblok: %s nøgle %s: kan ikke læse original nøgleblok: %s nøgle %s: direkte nøgleunderskrift tilføjet nøgle %s: stemmer ikke med vores kopi nøgle %s: duplikeret bruger-id detekteret - sammenføjet nøgle %s: ugyldig direkte nøgleunderskrift nøgle %s: ugyldigt tilbagekaldscertifikat: %s - afvist nøgle %s: ugyldigt tilbagekaldscertifikat: %s - udeladt nøgle %s: ugyldig egenunderskrift på bruger-id »%s« nøgle %s: ugyldig undernøglebinding nøgle %s: ugyldig undernøgletilbagekald nøgle %s: nøglemateriale på kort - udeladt nøgle %s: ny nøgle - udeladt nøgle %s: ingen offentlig nøgle - kan ikke anvende tilbagekaldscertifikat nøgle %s: ingen offentlig nøgle for troværdig nøgle - udeladt nøgle %s: ingen undernøgle for nøglebinding nøgle %s: ingen undernøgle for nøgletilbagekald nøgle %s: ingen undernøgle til bindingsunderskrift for undernøgle nøgle %s: ingen undernøgle til tilbagekaldsunderskrift for undernøgle nøgle %s: ingen bruger-id nøgle %s: ingen bruger-id for underskrift nøgle %s: ingen gyldige bruger-id'er nøgle %s: underskrift der ikke kan eksporteres (klasse 0x%02X) - udeladt nøgle %s: ikke beskyttet - udeladt nøgle %s: offentlig nøgle »%s« importeret nøgle %s: offentlig nøgle blev ikke fundet: %s nøgle %s: fjernet flerundernøglebinding nøgle %s: fjernet flerundernøgletilbagekald nøgle %s: tilbagekaldscertifikat på forkert sted - udeladt nøgle %s: hemmelig nøgle importeret nøgle %s: hemmelig nøgle blev ikke fundet: %s nøgle %s: hemmelig nøgle med ugyldig chiffer %d - udeladt nøgle %s: hemmelig nøgle uden offentlig nøgle - udeladt nøgle %s: udeladt undernøgle nøgle %s: udeladt bruger-id »%s« nøgle %s: undernøgleunderskrift på forkert sted - udeladt nøgle %s: uventet underskriftklasse (0x%02X) - udeladt nøgle %s: ikke understøttet offentlig nøglealgoritme nøgle %s: ikke understøttet offentlig nøglealgoritme på bruger-id »%s« nøgle findes allerede nøgleeksport mislykkedes: %s nøgleoprettelse færdig (%d sekunder) nøgle er blevet oprettet %lu sekund i fremtiden (tidsforskydning eller urproblem) nøgle er blevet oprettet %lu sekunder i fremtiden (tidsforskydning eller urproblem) nøgle er ikke markeret som usikker - kan ikke bruge den med falsk RNG! nøgle blev ikke fundet på nøgleserver nøglehandling er ikke mulig: %s nøgleblokressource »%s«: %s nøglering »%s« oprettet kommunikationsfejl for nøgleserver: %s nøgleserver sendte ikke VERSION nøgleserverfejlnøgleserver fik intern fejl nøgleserver modtag mislykkedes: %s nøgleserver opdater mislykkedes: %s nøgleserver søg mislykkedes: %s nøgleserver send mislykkedes: %s nøgleserver fik tidsudløb nøglestørrelse er ugyldig; bruger %u bit nøglestørrelse afrundet op til %u bit linje for langvis alle tilgængelige datavis og kontroller nøgleunderskriftervis nøgle og bruger-id'ervis nøglervis nøgler og fingeraftrykvis nøgler og underskriftervis præferencer (ekspert)vis præferencer (uddybende)vis hemmelige nøgleropret en separat underskriftgiv kun tidsstempelkonflikter en advarselmake_keysig_packet mislykkedes: %s mandugyldig udformet CRC forkert udformet GPG_AGENT_INFO-miljøvariabel forkert udformet bruger-idmarginalmarginals-needed skal være større end 1 max-cert-depth skal være i intervallet fra 1 til 255 menu til at ændre eller fjerne blokering for PIN'enflyt en sikkerhedskopinøgle til et smartkortflyt en nøgle til et smartkortflytter en nøgleunderskrift til det korrekte sted nNindlejrede underskrifter i klartekst netværksfejlaldrigaldrig ny konfigurationsfil »%s« oprettet næste kontrol af trustdb sker den %s ningen = tegn fundet i gruppedefinition »%s« intet kortingen tilsvarende offentlig nøgle: %s ingen dataingen hemmelig standardnøglering: %s intet modul for indsamling af entropi detekteret ingen håndtering for nøgleserverskema »%s« ingen nøgleserverhandling! ingen kendt nøgleserver (brug tilvalget --keyserver) intet behov for kontrol af trustdb intet behov for kontrol af trustdb med troværdighedsmodellen »%s« intet behov for en opdatering af trustdb med troværdighedsmodellen »%s« ingen billedfremviser angivet kørsel via eksternt program er ikke understøttet ingen tilbagekaldsnøgler fundet for »%s« ingen hemmelig nøgle ingen hemmelig undernøgle for offentlig undernøgle %s - ignorerer ingen underskrift fundet ingen underskrevne data intet sådant bruger-idingen ultimativ troværdige nøgler fundet ingen gyldige OpenPGP-data fundet. ingen gyldige adresser ingen skrivbar nøglering fundet: %s ingen skrivbar offentlig nøglering fundet: %s ingen skrivbar hemmelig nøglering fundet: %s ikke en frakoblet underskrift ikke et OpenPGP-kortikke krypteretikke tvungetikke behandletikke understøttetbemærk: filen random_seed er tom bemærk: filen random_seed er ikke opdateret oOokay, vi er den anonyme modtager. okay|okay|okgammel kodning for DEK'en er ikke understøttet gammeldags (PGP 2.x) underskrift accepter kun opdateringer til eksisterende nøglerhandling er ikke mulig uden initialiseret sikker hukommelse tilvalgsfil »%s«: %s oprindeligt filnavn=»%.*s« information om ejertroværdighed ryddet værdi for ejertroværdighed mangleradgangsfrase oprettet med ukendt sammendragsalgoritme %d adgangsfrasen er ikke korrekt gentaget; prøv igenudfør venligst en --check-trustdb indtast venligst en valgfri men stærkt anbefalet e-post-adressese venligst %s for yderligere information se venligst http://www.gnupg.org/documentation/faqs.html for yderligere information brug venligst »%s%s« i stedet for vent venligst mens nøglen bliver oprettet ... præference »%s« duplikeret for tidlig eof (i CRC) for tidlig eof (i trailer) for tidlig eof (ingen CRC) udskriv kortstatusproblem ved håndtering af krypteret pakke problem med agenten - deaktiverer agentbrug spørg før overskrivningbeskyttelsesalgoritme %d%s er ikke understøttet beskyttelsessammendrag %d er ikke understøttet offentlig og hemmelig nøgle oprettet og underskrevet. offentlig nøgle %s er %lu sekund nyere end underskrift offentlig nøgle %s er %lu sekunder nyere end underskrift offentlig nøgle %s blev ikke fundet: %s afkryptering af offentlig nøgle mislykkedes: %s offentlig nøgle matcher ikke hemmelig nøgle! krypterede data for offentlig nøgle: god DEK offentlig nøgle er %s offentlig nøgle blev ikke fundetoffentlig nøgle for ultimativ troværdig nøgle %s blev ikke fundet aAafslutafslut denne menuciteret udskrivingstegn i panser - måske på grund af en fejlbehæftet MTA gendistribuerer denne nøgle for at undgå potentielle problemer med rod i algoritmen læsefejl i »%s«: %s læser fra »%s« læser tilvalg fra »%s« læsning af offentlig nøgle mislykkedes: %s læser stdin ... årsag for tilbagekald: opdaterer %d nøgler fra %s opdaterer 1 nøgle fra %s fjern så meget som muligt fra nøgle efter importfjern så meget som muligt fra nøglen under eksportfjern nøgler fra den offentlige nøgleringfjern nøgler fra den hemmelige nøgleringfjern adgangsfrasen fra eksporterede undernøglerfjern ubrugelige dele fra nøgle efter importfjern nøgledele der ikke kan bruges under eksportomdøbelse af »%s« til »%s« mislykkedes: %s reparer skade fra pks-nøgleserveren under importanmoder om nøgle %s fra %s anmoder om nøgle %s fra %s server %s ressourcebegrænsningsvar indeholder ikke RSA modulus'erne svar indeholder ikke den RSA-offentlige eksponent svar indeholder ikke data for offentlig nøgle tilbagekaldskommentar: tilbagekald nøgle eller valgte undernøglertilbagekald valgte bruger-id'ertilbagekald underskrifter på de valgte bruger-id'ertilbagekaldttilbagekaldt af din nøgle %s på %s tilbagekaldt: %safrundet op til %u bit gem og afslutsøg efter nøgler på en nøgleserversøger efter »%s« fra %s søger efter »%s« fra %s server %s søger efter navne fra %s søger efter navne fra %s server %s hemmelig nøgle »%s« blev ikke fundet: %s hemmelig nøgle er allerede gemt på et kort hemmelig nøgle er ikke tilgængelighemmelige nøgledele er ikke tilgængelige hemmelige dele af nøglen er ikke tilgængelige vælg undernøgle Nvælg bruger-id Nvalgt algoritme for certifikationssammendrag er ugyldig valgt chifferalgoritme er ugyldig valgt komprimeringsalgoritme er ugyldig valgt sammendragsalgoritme er ugyldig valg af openpgp mislykkedes: %s sender nøgle %s til %s sender nøgle %s til %s server %s angiv en notation for de valgte bruger-id'erangiv præferenceliste for de valgte bruger-id'erangiv den foretrukne nøgleserveradresse for de valgte bruger-id'ervis IETF-standardnotationer under underskriftvisningervis IETF-standardnotationer under underskriftverificeringvis administratorkommandoervis alle notationer under underskriftvisningervis alle notationer under underskriftverificeringvis udløbsdatoer under underskriftvisningervis nøglefingeraftrykvis kun den primære bruger-id i underskriftverificeringvil politikadresser under underskriftvisningervis politikadresser under underskriftverificeringvis foretrukne nøgleserveradresser under underskriftvisningervis foretrukne nøgleserveradresser under underskriftverificeringvis tilbagekaldte og udløbne undernøgler i nøglevisningervis tilbagekaldte og udløbne bruger-id'er i nøglevisningervis tilbagekaldte og udløbne bruger-id'er i underskriftverificeringvis valgte billed-id'ervis nøgleringsnavnet i nøglevisningervis denne hjælpetekstvis bruger-id-validitet under nøglevisningervis bruger-id-validitet under underskriftverificeringvis brugerangivne notationer under underskriftvisningervis brugerangivne notationer under underskriftverificeringunderskriv en nøgleunderskriv en nøgle lokaltunderskriv eller rediger en nøgleunderskriv valgte bruger-id'er [* se nedenfor for relaterede kommandoer]underskriv valgte bruger-id'er lokaltunderskriv bruger-id'er md en underskrift der ikke kan kaldes tilbageunderskriv valgte bruger-id'er med en troværdighedsunderskriftunderskriftverificering undertrykt underskrifter oprettet indtil videre: %lu underskrevet af din nøgle %s den %s%s%s underskrift mislykkedes: %s underskriftsundernøgle %s er allerede krydscertificeret underskriver:udelod »%s«: %s udelod »%s«: duplikeret udelod: offentlig nøgle er allerede angivet udeladt: offentlig nøgle er allerede valgt som standardmodtager udelod: hemmelig nøgle er allerede til stede udelader bloktype %d udelader v3 egenunderskrift på bruger-id »%s« uafhængig tilbagekald - brug »gpg --import« for at anvende uafhængig underskrift for klasse 0x%02x lagring af nøgle på kort mislykkedes: %s undernøgle %s underskriver ikke og skal derfor ikke være krydscertificeret underpakke af typen %d har kritiske bitsæt symmetrisk kryptering af »%s« mislykkedes: %s systemfejl under kald af eksternt program: %s tag nøglerne fra denne nøgleringtekstilstandden angivne adresse for certifikatpolitik er ugyldig den angivne adresse for foretrukken nøgleserver er ugyldig den angivne adresse for underskriftpolitik er ugyldig underskriften kunne ikke verificeres. Husk at underskriftfilen (.sig eller .asc) skal være den første fil på kommandolinjen. der er en hemmelig nøgle for offentlig nøgle »%s«! dette er en PGP-oprettet Elgamalnøgle som ikke er sikker for underskrifter!denne nøgle er allerede blevet dedikeret som en tilbagekalder dette kan skyldes en manglende egenunderskrift denne besked kan nok ikke bruges af %s denne platform kræver midlertidige filer når der kaldes eksterne programmer tidsstempelkonfliktskift mellem hemmelig og offentlig nøglevisningskift force PIN-flag for underskriftenfor mange chifferpræferencer for mange komprimeringspræferencer for mange sammendragpræferencer for mange punkter i pk-mellemlager - deaktiveret fejl ved troværdighedsdatabasentroværdighedspost %lu er ikke af den anmodne type %d troværdighedspost %lu, req-type %d: læsning mislykkedes: %s stol på post %lu, type %d: skrivning mislykkedes: %s troværdighed: %strustdb rec %lu: lseek mislykkedes: %s trustdb rec %lu: skrivning mislykkedes (n=%d): %s transaktion for trustdb er for stor trustdb: lseek mislykkedes: %s trustdb: læsning mislykkedes (n=%d): %s trustdb: synkronisering mislykkedes: %s troværdighedsniveau justeret til FULL på grund af gyldig PKA-information troværdighedsniveau justeret til NEVER på grund af ugyldig PKA-information ultimativkan ikke vise billed-id! kan ikke køre eksternt program kan ikke køre program »%s«: %s kan ikke køre skal »%s«: %s kan ikke åbne JPEG-fil »%s«: %s kan ikke læse svar fra eksternt program: %s kunne ikke angive kørselssti til %s kan ikke opdatere trustdb-versionspost: skrivning mislykkedes: %s kan ikke bruge IDEA-chifferen for alle nøglerne du krypterer til. kan ikke bruge ukendt troværdighedsmodel (%d) - antager %s troværdighedsmodel fjern blokering for PIN'en med en nulstillingskodeukomprimeret|ingenej defineretuventet panser: uventede dataej implementeret chifferalgoritmeej implementeret pubkey-algoritmeukendtukendt panserhoved: ukendt cifferalgoritmeukendt komprimeringsalgoritmeukendt konfigurationspunkt »%s« ukendt standardmodtager »%s« ukendt sammendragsalgoritmeukendt nøglebeskyttelsessalgoritme ukendt tilvalg »%s« ukendt pakketypeukendt beskyttelsesalgoritme ukendt pubkey-algoritmeukendt underskriftklasseukendt versionunaturlig afslutning på eksternt program ikke angivetej understøttet URIubrugelig offentlig nøglealgoritmeubrugelig offentlig nøgleubrugelig hemmelig nøgleopdater alle nøgler fra en nøgleserveropdatering mislykkedes: %s opdatering af hemmelighed mislykkedes: %s opdater troværdighedsdatabasenbrug: %sbrug: gpg [tilvalg] brug som uddatafilbrug kanonisk teksttilstandbrug tilvalget »--delete-secret-keys« for at slette den først. brug streng OpenPGP-opførselbrug midlertidige filer til at sende data til nøgleserverhjælperebrug dette bruger-id til at underskrive eller afkrypterebruger-id »%s« er allerede tilbagekaldt bruger-id: »%s« bruger %s troværdighedsmodel bruger chiffer %s bruger standard-PIN som %s bruger undernøgle %s i stedet for primær nøgle %s valider underskrifter med PKA-datavaliditet: %suddybendeverifikation af administrator-PIN er i øjeblikket forbudt via denne kommando verificering af CHV%d mislykkedes: %s godkend en underskriftverificer PIN'en og vis alle dataventer på lås på »%s« ... svag nøglesvag nøgle oprettet - prøver igen underlig størrelse for en krypteret sessionsnøgle (%d) vil ikke køre med usikker hukommelse på grund af %s skriver direkte underskrift skriver underskrift for nøglebinding skriver ny nøgle skriver offentlig nøgle til »%s« skriver hemmelig nøglestump til »%s« skriver hemmelig nøgle til »%s« skriver egenunderskrift skriver til »%s« skriver til stdout forkert hemmelig nøgle brugtjJjadu kan kun clearsign med nøgler i PGP 2.x-stil mens du er i tilstanden --pgp2 du kan kun vedhæfteunderskrive med nøgler i PGTP 2.x-stil når i tilstanden --pgp2 du kan kun kryptere til RSA-nøgler for 2048 bit eller mindre i tilstanden --pgp2 du kan kun lave frakoblede eller rydde underskrifter i tilstanden --pgp2 du kan opdatere dine præferencer med: gpg --edit-key %s updpref save du kan ikke underskrive og kryptere på samme tid i tilstanden --pgp2 du kan ikke udpege en nøgle som dets egen dedikerede tilbagekalder du kan ikke bruge --symmetric --encrypt i tilstanden %s du kan ikke bruge --symmetric --encrypt med --s2k-mode 0 du kan ikke bruge --symmetric --sign --encrypt i tilstanden %s du kan ikke bruge --symmetric --sign --encrypt med --s2k-mode 0 du fandt en fejl ... (%s:%d) du kan ikke bruge %s i tilstanden %s du må ikke bruge chifferalgoritmen »%s« i tilstanden %s du må ikke bruge komprimeringsalgoritmen »%s« i tilstanden %s du må ikke bruge sammendragsalgoritmen »%s« i tilstanden %s du skal bruge filer (og ikke en datakanal) når du arbejder med --pgp2 aktiveret |AN|Ny administrator-PIN|A|Indtast venligst administrator-PIN'en|A|Ændr venligst administrator-PIN%%0A[tilbageværende forsøg: %d]|FD|skriv statusinformation til denne FD|NAME|krypter for NAVN|N|Ny PIN|N|sæt komprimeringsniveauet til N (0 deaktiverer)|RN|Ny nulstillingskode|[file]|opret en underskrift i klartekst|[file]|opret en underskrift|algo [files]|vis beskedsammendrag||Indtast venligst PIN'en||Indtast venligst PIN%%0A[sigs færdig: %lu]||Indtast venligst nulstillingskoden for kortetgnupg-1.4.20/AUTHORS0000644000175000017500000001451312635262326010722 00000000000000Program: GnuPG Version: 1.4 Homepage: https://www.gnupg.org Maintainer: Werner Koch Bug reports: http://bugs.gnupg.org Security related bug reports: License: GPLv3+ GnuPG is free software. See the files COPYING for copying conditions. License copyright years may be listed using range notation, e.g., 2000-2013, indicating that every year in the range, inclusive, is a copyrightable year that would otherwise be listed individually. Authors with a FSF copyright assignment ======================================= Ales Nyakhaychyk Translations [be] Birger Langkjer Translations [da] Maxim Britov Translations [ru] Daniel Resare Translations [sv] Per Tunedal Translations [sv] Daniel Nylander [sv] David Shaw Assigns past and future changes. (all in keyserver/, a lot of changes in g10/ see the ChangeLog, bug fixes here and there) Dokianakis Theofanis Translations [el] Edmund GRIMLEY EVANS Translations [eo] Florian Weimer Assigns past and future changes (changed:g10/parse-packet.c, include/iobuf.h, util/iobuf.c) Gaël Quéri Translations [fr] (fixed a lot of typos) Gregory Steuck Translations [ru] Nagy Ferenc László Translations [hu] Ivar Snaaijer Translations [nl] Ivo Timmermans Translations [nl] Jacobo Tarri'o Barreiro Translations [gl] Jakub Bogusz Translations [pl] Janusz Aleksander Urbanowicz Translations [pl] Jedi Lin Translations [zh-tw] Jouni Hiltunen Translations [fi] Tommi Vainikainen Translations [fi] Laurentiu Buzdugan Translations [ro] Magda Procha'zkova' Translations [cs] Meng Jie Translations [zh_CN] Michael Roth Assigns changes. (wrote cipher/des.c., changes and bug fixes all over the place) Michal Majer Translations [sk] Marco d'Itri Translations [it] Matthew Skala Disclaimer (wrote cipher/twofish.c) Niklas Hernaeus Disclaimer (weak key patches) Nilgun Belma Buguner Translations [tr] Nils Ellmenreich Assigns past and future changes (configure.in, cipher/rndlinux.c, FAQ) Paul Eggert (configuration macros for LFS) Pavel I. Shajdo Translations [ru] (man pages) Pedro Morais Translations [pt_PT] Rémi Guyomarch Assigns past and future changes. (g10/compress.c, g10/encr-data.c, g10/free-packet.c, g10/mdfilter.c, g10/plaintext.c, util/iobuf.c) Stefan Bellon Assigns past and future changes. (All patches to support RISC OS) Timo Schulz Assigns past and future changes. (util/w32reg.c, g10/passphrase.c, g10/hkp.c) Tedi Heriyanto Translations [id] Thiago Jung Bauermann Translations [pt_BR] Rafael Caetano dos Santos Translations [pt_BR] Toomas Soome Translations [et] Trond Endrestøl Translations [nb] Urko Lusa Translations [es] Jaime Sua'rez Translations [es] Walter Koch Translations [de] Werner Koch Assigns GNU Privacy Guard and future changes. (started the whole thing) Assignment contract terminated on 2013-03-29. Yosiaki IIDA Translations [ja] Yuri Chornoivan, yurchor at ukr dot net: Translations [uk] Authors with a DCO ================== The list of authors who signed the Developer's Certificate of Origin is kept in the GIT master branch's copy of this file. Other authors ============= The need for copyright assignments to the FSF has been waived on 2013-03-29; the need for copyright disclaimers for translations has been waived in December 2012. This program uses the zlib compression library written by Jean-loup Gailly and Mark Adler. Most of the stuff in mpi has been taken from the GMP library by Torbjorn Granlund . The Rijndael implementation (cipher/rijndael.c) is based on the public domain reference code provided for the AES selection process. The Rijndael algorithm is due to Joan Daemen and Vincent Rijmen. The files cipher/rndunix.c and cipher/rndw32.c are based on rndunix.c and rndwin32.c from cryptlib. Copyright Peter Gutmann, Paul Kendall, and Chris Wedgwood 1996-1999. The code to help with the VMS port (indicated by __VMS and corresponding Changelog entries) was contributed by Steven M. Schweda. . The RPM specs file scripts/gnupg.spec has been contributed by several people. The files below scripts/conf-w32brg/ is a contribution to GnuPG by Brian Gladman and not to be considered a proper part of GnuPG. When building for W32, this program uses the included bzip2 code which was written by 1996-2010 Julian R Seward. See bzip/LICENSE for details. Copyright ========= GnuPG is distributed under the GNU General Public License, version 3 or later. Note that some files are under a combination of the GNU Lesser General Public License, version 3 and the GNU General Public License, version 2. A few other files carry the all permissive license note as found at the bottom of this file. ==================== Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Copyright 2013, 2014 Werner Koch This file (AUTHORS) is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/aclocal.m40000644000175000017500000014112012635263125011503 00000000000000# generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2014 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXTERN_INLINE], [ AH_VERBATIM([extern_inline], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like . For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions. This bug is known to occur on: OS X 10.8 and earlier; see: http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log FreeBSD; see: http://lists.gnu.org/archive/html/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Assume DragonFly and FreeBSD will be similar. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif /* Suppress GCC's bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see . */ # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) # Copyright (C) 2002-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.14' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.14.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Figure out how to run the assembler. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_AS # ---------- AC_DEFUN([AM_PROG_AS], [# By default we simply use the C compiler to build assembly code. AC_REQUIRE([AC_PROG_CC]) test "${CCAS+set}" = set || CCAS=$CC test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) _AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAINTAINER_MODE([DEFAULT-MODE]) # ---------------------------------- # Control maintainer-specific portions of Makefiles. # Default is to disable them, unless 'enable' is passed literally. # For symmetry, 'disable' may be passed as well. Anyway, the user # can override the default with the --enable/--disable switch. AC_DEFUN([AM_MAINTAINER_MODE], [m4_case(m4_default([$1], [disable]), [enable], [m4_define([am_maintainer_other], [disable])], [disable], [m4_define([am_maintainer_other], [enable])], [m4_define([am_maintainer_other], [enable]) m4_warn([syntax], [unexpected argument to AM@&t@_MAINTAINER_MODE: $1])]) AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) dnl maintainer-mode's default is 'disable' unless 'enable' is passed AC_ARG_ENABLE([maintainer-mode], [AS_HELP_STRING([--]am_maintainer_other[-maintainer-mode], am_maintainer_other[ make rules and dependencies not useful (and sometimes confusing) to the casual installer])], [USE_MAINTAINER_MODE=$enableval], [USE_MAINTAINER_MODE=]m4_if(am_maintainer_other, [enable], [no], [yes])) AC_MSG_RESULT([$USE_MAINTAINER_MODE]) AM_CONDITIONAL([MAINTAINER_MODE], [test $USE_MAINTAINER_MODE = yes]) MAINT=$MAINTAINER_MODE_TRUE AC_SUBST([MAINT])dnl ] ) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2013 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/autobuild.m4]) m4_include([m4/codeset.m4]) m4_include([m4/estream.m4]) m4_include([m4/fcntl-o.m4]) m4_include([m4/gettext.m4]) m4_include([m4/glibc2.m4]) m4_include([m4/glibc21.m4]) m4_include([m4/iconv.m4]) m4_include([m4/intdiv0.m4]) m4_include([m4/intl.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/intmax.m4]) m4_include([m4/inttypes-pri.m4]) m4_include([m4/inttypes_h.m4]) m4_include([m4/isc-posix.m4]) m4_include([m4/lcmessage.m4]) m4_include([m4/ldap.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/libcurl.m4]) m4_include([m4/libusb.m4]) m4_include([m4/lock.m4]) m4_include([m4/longlong.m4]) m4_include([m4/nls.m4]) m4_include([m4/noexecstack.m4]) m4_include([m4/po.m4]) m4_include([m4/printf-posix.m4]) m4_include([m4/progtest.m4]) m4_include([m4/readline.m4]) m4_include([m4/size_max.m4]) m4_include([m4/stdint_h.m4]) m4_include([m4/tar-ustar.m4]) m4_include([m4/threadlib.m4]) m4_include([m4/uintmax_t.m4]) m4_include([m4/ulonglong.m4]) m4_include([m4/visibility.m4]) m4_include([m4/wchar_t.m4]) m4_include([m4/wint_t.m4]) m4_include([m4/xsize.m4]) m4_include([acinclude.m4]) gnupg-1.4.20/INSTALL0000644000175000017500000003661012635262326010705 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command `./configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. gnupg-1.4.20/cipher/0000755000175000017500000000000012635457217011205 500000000000000gnupg-1.4.20/cipher/algorithms.h0000644000175000017500000001263712635262326013453 00000000000000/* algorithms.h - prototypes for algorithm functions. * Copyright (C) 2002, 2003, 2006 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 3 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, see . */ #ifndef GNUPG_ALGORITHMS_H #define GNUPG_ALGORITHMS_H 1 const char *dynload_enum_module_names (int seq); const char * md5_get_info (int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ); const char * rmd160_get_info (int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ); const char * sha1_get_info (int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ); const char * sha224_get_info (int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ); const char * sha256_get_info (int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ); const char * sha384_get_info (int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ); const char * sha512_get_info (int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ); const char * des_get_info( int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**setkeyf)( void *c, const byte *key, unsigned keylen ), void (**encryptf)( void *c, byte *outbuf, const byte *inbuf ), void (**decryptf)( void *c, byte *outbuf, const byte *inbuf ) ); const char * cast5_get_info( int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**setkeyf)( void *c, const byte *key, unsigned keylen ), void (**encryptf)( void *c, byte *outbuf, const byte *inbuf ), void (**decryptf)( void *c, byte *outbuf, const byte *inbuf ) ); const char * blowfish_get_info( int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**setkeyf)(void *c, const byte *key, unsigned keylen), void (**encryptf)(void *c, byte *outbuf, const byte *inbuf), void (**decryptf)(void *c, byte *outbuf, const byte *inbuf) ); const char * twofish_get_info( int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**setkeyf)( void *c, const byte *key, unsigned keylen ), void (**encryptf)( void *c, byte *outbuf, const byte *inbuf), void (**decryptf)( void *c, byte *outbuf, const byte *inbuf ) ); const char * rijndael_get_info( int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**setkeyf)( void *c, const byte *key, unsigned keylen), void (**encryptf)(void *c, byte *outbuf, const byte *inbuf), void (**decryptf)(void *c, byte *outbuf, const byte *inbuf) ); void rijndael_cfb_enc (void *context, unsigned char *iv, void *outbuf_arg, const void *inbuf_arg, unsigned int nblocks); void rijndael_cfb_dec (void *context, unsigned char *iv, void *outbuf_arg, const void *inbuf_arg, unsigned int nblocks); const char * idea_get_info( int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**setkeyf)( void *c, const byte *key, unsigned keylen ), void (**encryptf)( void *c, byte *outbuf, const byte *inbuf ), void (**decryptf)( void *c, byte *outbuf, const byte *inbuf ) ); const char * camellia_get_info(int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**setkeyf)( void *c, const byte *key, unsigned keylen ), void (**encryptf)( void *c, byte *outbuf, const byte *inbuf), void (**decryptf)( void *c, byte *outbuf, const byte *inbuf ) ); #endif /*GNUPG_ALGORITHMS_H*/ gnupg-1.4.20/cipher/pubkey.c0000644000175000017500000003545712635262326012601 00000000000000/* pubkey.c - pubkey dispatcher * Copyright (C) 1998, 1999, 2000, 2001, 2003, * 2004 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 3 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, see . */ #include #include #include #include #include #include #include "util.h" #include "errors.h" #include "mpi.h" #include "cipher.h" #include "elgamal.h" #include "dsa.h" #include "rsa.h" #define TABLE_SIZE 10 struct pubkey_table_s { const char *name; int algo; int npkey; int nskey; int nenc; int nsig; int use; int (*generate)( int algo, unsigned nbits, MPI *skey, MPI **retfactors ); int (*check_secret_key)( int algo, MPI *skey ); int (*encrypt)( int algo, MPI *resarr, MPI data, MPI *pkey ); int (*decrypt)( int algo, MPI *result, MPI *data, MPI *skey ); int (*sign)( int algo, MPI *resarr, MPI data, MPI *skey ); int (*verify)( int algo, MPI hash, MPI *data, MPI *pkey ); unsigned (*get_nbits)( int algo, MPI *pkey ); }; static struct pubkey_table_s pubkey_table[TABLE_SIZE]; static int disabled_algos[TABLE_SIZE]; #if 0 static int dummy_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ) { log_bug("no generate() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; } static int dummy_check_secret_key( int algo, MPI *skey ) { log_bug("no check_secret_key() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; } #endif static int dummy_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ) { log_bug("no encrypt() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; } static int dummy_decrypt( int algo, MPI *result, MPI *data, MPI *skey ) { log_bug("no decrypt() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; } static int dummy_sign( int algo, MPI *resarr, MPI data, MPI *skey ) { log_bug("no sign() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; } static int dummy_verify( int algo, MPI hash, MPI *data, MPI *pkey ) { log_bug("no verify() for %d\n", algo ); return G10ERR_PUBKEY_ALGO; } #if 0 static unsigned dummy_get_nbits( int algo, MPI *pkey ) { log_bug("no get_nbits() for %d\n", algo ); return 0; } #endif /**************** * Put the static entries into the table. * This is out constructor function which fill the table * of algorithms with the one we have statically linked. */ static void setup_pubkey_table(void) { int i=0; pubkey_table[i].algo = PUBKEY_ALGO_ELGAMAL_E; pubkey_table[i].name = elg_get_info( pubkey_table[i].algo, &pubkey_table[i].npkey, &pubkey_table[i].nskey, &pubkey_table[i].nenc, &pubkey_table[i].nsig, &pubkey_table[i].use ); pubkey_table[i].generate = elg_generate; pubkey_table[i].check_secret_key = elg_check_secret_key; pubkey_table[i].encrypt = elg_encrypt; pubkey_table[i].decrypt = elg_decrypt; pubkey_table[i].sign = dummy_sign; pubkey_table[i].verify = dummy_verify; pubkey_table[i].get_nbits = elg_get_nbits; if( !pubkey_table[i].name ) BUG(); i++; pubkey_table[i].algo = PUBKEY_ALGO_DSA; pubkey_table[i].name = dsa_get_info( pubkey_table[i].algo, &pubkey_table[i].npkey, &pubkey_table[i].nskey, &pubkey_table[i].nenc, &pubkey_table[i].nsig, &pubkey_table[i].use ); pubkey_table[i].generate = dsa_generate; pubkey_table[i].check_secret_key = dsa_check_secret_key; pubkey_table[i].encrypt = dummy_encrypt; pubkey_table[i].decrypt = dummy_decrypt; pubkey_table[i].sign = dsa_sign; pubkey_table[i].verify = dsa_verify; pubkey_table[i].get_nbits = dsa_get_nbits; if( !pubkey_table[i].name ) BUG(); i++; #ifdef USE_RSA pubkey_table[i].algo = PUBKEY_ALGO_RSA; pubkey_table[i].name = rsa_get_info( pubkey_table[i].algo, &pubkey_table[i].npkey, &pubkey_table[i].nskey, &pubkey_table[i].nenc, &pubkey_table[i].nsig, &pubkey_table[i].use ); pubkey_table[i].generate = rsa_generate; pubkey_table[i].check_secret_key = rsa_check_secret_key; pubkey_table[i].encrypt = rsa_encrypt; pubkey_table[i].decrypt = rsa_decrypt; pubkey_table[i].sign = rsa_sign; pubkey_table[i].verify = rsa_verify; pubkey_table[i].get_nbits = rsa_get_nbits; if( !pubkey_table[i].name ) BUG(); i++; pubkey_table[i].algo = PUBKEY_ALGO_RSA_E; pubkey_table[i].name = rsa_get_info( pubkey_table[i].algo, &pubkey_table[i].npkey, &pubkey_table[i].nskey, &pubkey_table[i].nenc, &pubkey_table[i].nsig, &pubkey_table[i].use ); pubkey_table[i].generate = rsa_generate; pubkey_table[i].check_secret_key = rsa_check_secret_key; pubkey_table[i].encrypt = rsa_encrypt; pubkey_table[i].decrypt = rsa_decrypt; pubkey_table[i].sign = dummy_sign; pubkey_table[i].verify = dummy_verify; pubkey_table[i].get_nbits = rsa_get_nbits; if( !pubkey_table[i].name ) BUG(); i++; pubkey_table[i].algo = PUBKEY_ALGO_RSA_S; pubkey_table[i].name = rsa_get_info( pubkey_table[i].algo, &pubkey_table[i].npkey, &pubkey_table[i].nskey, &pubkey_table[i].nenc, &pubkey_table[i].nsig, &pubkey_table[i].use ); pubkey_table[i].generate = rsa_generate; pubkey_table[i].check_secret_key = rsa_check_secret_key; pubkey_table[i].encrypt = dummy_encrypt; pubkey_table[i].decrypt = dummy_decrypt; pubkey_table[i].sign = rsa_sign; pubkey_table[i].verify = rsa_verify; pubkey_table[i].get_nbits = rsa_get_nbits; if( !pubkey_table[i].name ) BUG(); i++; #endif /* USE_RSA */ for( ; i < TABLE_SIZE; i++ ) pubkey_table[i].name = NULL; } /**************** * Try to load all modules and return true if new modules are available */ static int load_pubkey_modules(void) { static int initialized = 0; if( !initialized ) { setup_pubkey_table(); initialized = 1; return 1; } return 0; } /**************** * Map a string to the pubkey algo */ int string_to_pubkey_algo( const char *string ) { int i; const char *s; do { for(i=0; (s=pubkey_table[i].name); i++ ) if( !ascii_strcasecmp( s, string ) ) return pubkey_table[i].algo; } while( load_pubkey_modules() ); return 0; } /**************** * Map a pubkey algo to a string */ const char * pubkey_algo_to_string( int algo ) { int i; if (algo == PUBKEY_ALGO_ELGAMAL) return "ELG"; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) return pubkey_table[i].name; } while( load_pubkey_modules() ); return NULL; } void disable_pubkey_algo( int algo ) { int i; for(i=0; i < DIM(disabled_algos); i++ ) { if( !disabled_algos[i] || disabled_algos[i] == algo ) { disabled_algos[i] = algo; return; } } log_fatal("can't disable pubkey algo %d: table full\n", algo ); } int check_pubkey_algo( int algo ) { return check_pubkey_algo2( algo, 0 ); } /**************** * a use of 0 means: don't care */ int check_pubkey_algo2( int algo, unsigned use ) { int i; /* Map type 20 Elgamal algorithm to type 16 if it is used for decryption. This allows to use legacy type 20 Elgamal keys for decryption. */ if (algo == PUBKEY_ALGO_ELGAMAL && use == PUBKEY_USAGE_ENC) algo = PUBKEY_ALGO_ELGAMAL_E; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) { if( (use & PUBKEY_USAGE_SIG) && !(pubkey_table[i].use & PUBKEY_USAGE_SIG) ) return G10ERR_WR_PUBKEY_ALGO; if( (use & PUBKEY_USAGE_ENC) && !(pubkey_table[i].use & PUBKEY_USAGE_ENC) ) return G10ERR_WR_PUBKEY_ALGO; for(i=0; i < DIM(disabled_algos); i++ ) { if( disabled_algos[i] == algo ) return G10ERR_PUBKEY_ALGO; } return 0; /* okay */ } } while( load_pubkey_modules() ); return G10ERR_PUBKEY_ALGO; } /**************** * Return the number of public key material numbers */ int pubkey_get_npkey( int algo ) { int i; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) return pubkey_table[i].npkey; } while( load_pubkey_modules() ); #ifndef USE_RSA if( is_RSA(algo) ) /* special hack, so that we are able to */ return 2; /* see the RSA keyids */ #endif /* USE_RSA */ if(algo==PUBKEY_ALGO_ELGAMAL) return 3; return 0; } /**************** * Return the number of secret key material numbers */ int pubkey_get_nskey( int algo ) { int i; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) return pubkey_table[i].nskey; } while( load_pubkey_modules() ); #ifndef USE_RSA if( is_RSA(algo) ) /* special hack, so that we are able to */ return 6; /* see the RSA keyids */ #endif /* USE_RSA */ if(algo==PUBKEY_ALGO_ELGAMAL) return 4; return 0; } /**************** * Return the number of signature material numbers */ int pubkey_get_nsig( int algo ) { int i; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) return pubkey_table[i].nsig; } while( load_pubkey_modules() ); #ifndef USE_RSA if( is_RSA(algo) ) /* special hack, so that we are able to */ return 1; /* see the RSA keyids */ #endif /* USE_RSA */ if(algo==PUBKEY_ALGO_ELGAMAL) return 2; return 0; } /**************** * Return the number of encryption material numbers */ int pubkey_get_nenc( int algo ) { int i; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) return pubkey_table[i].nenc; } while( load_pubkey_modules() ); #ifndef USE_RSA if( is_RSA(algo) ) /* special hack, so that we are able to */ return 1; /* see the RSA keyids */ #endif /* USE_RSA */ if(algo==PUBKEY_ALGO_ELGAMAL) return 2; return 0; } /**************** * Get the number of nbits from the public key */ unsigned pubkey_nbits( int algo, MPI *pkey ) { int i; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) return (*pubkey_table[i].get_nbits)( algo, pkey ); } while( load_pubkey_modules() ); #ifndef USE_RSA if( is_RSA(algo) ) /* we always wanna see the length of a key :-) */ return mpi_get_nbits( pkey[0] ); #endif /* USE_RSA */ if(algo==PUBKEY_ALGO_ELGAMAL) return mpi_get_nbits(pkey[0]); return 0; } int pubkey_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ) { int i; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) return (*pubkey_table[i].generate)( algo, nbits, skey, retfactors ); } while( load_pubkey_modules() ); return G10ERR_PUBKEY_ALGO; } int pubkey_check_secret_key( int algo, MPI *skey ) { int i; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) return (*pubkey_table[i].check_secret_key)( algo, skey ); } while( load_pubkey_modules() ); return G10ERR_PUBKEY_ALGO; } /**************** * This is the interface to the public key encryption. * Encrypt DATA with PKEY and put it into RESARR which * should be an array of MPIs of size PUBKEY_MAX_NENC (or less if the * algorithm allows this - check with pubkey_get_nenc() ) */ int pubkey_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ) { int i, rc; if( DBG_CIPHER ) { log_debug("pubkey_encrypt: algo=%d\n", algo ); for(i=0; i < pubkey_get_npkey(algo); i++ ) log_mpidump(" pkey:", pkey[i] ); log_mpidump(" data:", data ); } if (algo == PUBKEY_ALGO_ELGAMAL) algo = PUBKEY_ALGO_ELGAMAL_E; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) { rc = (*pubkey_table[i].encrypt)( algo, resarr, data, pkey ); goto ready; } } while( load_pubkey_modules() ); rc = G10ERR_PUBKEY_ALGO; ready: if( !rc && DBG_CIPHER ) { for(i=0; i < pubkey_get_nenc(algo); i++ ) log_mpidump(" encr:", resarr[i] ); } return rc; } /**************** * This is the interface to the public key decryption. * ALGO gives the algorithm to use and this implicitly determines * the size of the arrays. * result is a pointer to a mpi variable which will receive a * newly allocated mpi or NULL in case of an error. */ int pubkey_decrypt( int algo, MPI *result, MPI *data, MPI *skey ) { int i, rc; *result = NULL; /* so the caller can always do an mpi_free */ if( DBG_CIPHER ) { log_debug("pubkey_decrypt: algo=%d\n", algo ); for(i=0; i < pubkey_get_nskey(algo); i++ ) log_mpidump(" skey:", skey[i] ); for(i=0; i < pubkey_get_nenc(algo); i++ ) log_mpidump(" data:", data[i] ); } if (algo == PUBKEY_ALGO_ELGAMAL) algo = PUBKEY_ALGO_ELGAMAL_E; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) { rc = (*pubkey_table[i].decrypt)( algo, result, data, skey ); goto ready; } } while( load_pubkey_modules() ); rc = G10ERR_PUBKEY_ALGO; ready: if( !rc && DBG_CIPHER ) { log_mpidump(" plain:", *result ); } return rc; } /**************** * This is the interface to the public key signing. * Sign data with skey and put the result into resarr which * should be an array of MPIs of size PUBKEY_MAX_NSIG (or less if the * algorithm allows this - check with pubkey_get_nsig() ) */ int pubkey_sign( int algo, MPI *resarr, MPI data, MPI *skey ) { int i, rc; if( DBG_CIPHER ) { log_debug("pubkey_sign: algo=%d\n", algo ); for(i=0; i < pubkey_get_nskey(algo); i++ ) log_mpidump(" skey:", skey[i] ); log_mpidump(" data:", data ); } do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) { rc = (*pubkey_table[i].sign)( algo, resarr, data, skey ); goto ready; } } while( load_pubkey_modules() ); rc = G10ERR_PUBKEY_ALGO; ready: if( !rc && DBG_CIPHER ) { for(i=0; i < pubkey_get_nsig(algo); i++ ) log_mpidump(" sig:", resarr[i] ); } return rc; } /**************** * Verify a public key signature. * Return 0 if the signature is good */ int pubkey_verify( int algo, MPI hash, MPI *data, MPI *pkey ) { int i, rc; do { for(i=0; pubkey_table[i].name; i++ ) if( pubkey_table[i].algo == algo ) { rc = (*pubkey_table[i].verify)( algo, hash, data, pkey ); goto ready; } } while( load_pubkey_modules() ); rc = G10ERR_PUBKEY_ALGO; ready: return rc; } gnupg-1.4.20/cipher/cast5.c0000644000175000017500000010772312635262326012315 00000000000000/* cast5.c - CAST5 cipher (RFC2144) * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /* Test vectors: * * 128-bit key = 01 23 45 67 12 34 56 78 23 45 67 89 34 56 78 9A * plaintext = 01 23 45 67 89 AB CD EF * ciphertext = 23 8B 4F E5 84 7E 44 B2 * * 80-bit key = 01 23 45 67 12 34 56 78 23 45 * = 01 23 45 67 12 34 56 78 23 45 00 00 00 00 00 00 * plaintext = 01 23 45 67 89 AB CD EF * ciphertext = EB 6A 71 1A 2C 02 27 1B * * 40-bit key = 01 23 45 67 12 * = 01 23 45 67 12 00 00 00 00 00 00 00 00 00 00 00 * plaintext = 01 23 45 67 89 AB CD EF * ciphertext = 7A C8 16 D1 6E 9B 30 2E */ #include #include #include #include #include "types.h" #include "util.h" #include "errors.h" #include "algorithms.h" #define CIPHER_ALGO_CAST5 3 #define CAST5_BLOCKSIZE 8 typedef struct { u32 Km[16]; byte Kr[16]; } CAST5_context; static int cast_setkey( void *c, const byte *key, unsigned keylen ); static const u32 s1[256] = { 0x30fb40d4, 0x9fa0ff0b, 0x6beccd2f, 0x3f258c7a, 0x1e213f2f, 0x9c004dd3, 0x6003e540, 0xcf9fc949, 0xbfd4af27, 0x88bbbdb5, 0xe2034090, 0x98d09675, 0x6e63a0e0, 0x15c361d2, 0xc2e7661d, 0x22d4ff8e, 0x28683b6f, 0xc07fd059, 0xff2379c8, 0x775f50e2, 0x43c340d3, 0xdf2f8656, 0x887ca41a, 0xa2d2bd2d, 0xa1c9e0d6, 0x346c4819, 0x61b76d87, 0x22540f2f, 0x2abe32e1, 0xaa54166b, 0x22568e3a, 0xa2d341d0, 0x66db40c8, 0xa784392f, 0x004dff2f, 0x2db9d2de, 0x97943fac, 0x4a97c1d8, 0x527644b7, 0xb5f437a7, 0xb82cbaef, 0xd751d159, 0x6ff7f0ed, 0x5a097a1f, 0x827b68d0, 0x90ecf52e, 0x22b0c054, 0xbc8e5935, 0x4b6d2f7f, 0x50bb64a2, 0xd2664910, 0xbee5812d, 0xb7332290, 0xe93b159f, 0xb48ee411, 0x4bff345d, 0xfd45c240, 0xad31973f, 0xc4f6d02e, 0x55fc8165, 0xd5b1caad, 0xa1ac2dae, 0xa2d4b76d, 0xc19b0c50, 0x882240f2, 0x0c6e4f38, 0xa4e4bfd7, 0x4f5ba272, 0x564c1d2f, 0xc59c5319, 0xb949e354, 0xb04669fe, 0xb1b6ab8a, 0xc71358dd, 0x6385c545, 0x110f935d, 0x57538ad5, 0x6a390493, 0xe63d37e0, 0x2a54f6b3, 0x3a787d5f, 0x6276a0b5, 0x19a6fcdf, 0x7a42206a, 0x29f9d4d5, 0xf61b1891, 0xbb72275e, 0xaa508167, 0x38901091, 0xc6b505eb, 0x84c7cb8c, 0x2ad75a0f, 0x874a1427, 0xa2d1936b, 0x2ad286af, 0xaa56d291, 0xd7894360, 0x425c750d, 0x93b39e26, 0x187184c9, 0x6c00b32d, 0x73e2bb14, 0xa0bebc3c, 0x54623779, 0x64459eab, 0x3f328b82, 0x7718cf82, 0x59a2cea6, 0x04ee002e, 0x89fe78e6, 0x3fab0950, 0x325ff6c2, 0x81383f05, 0x6963c5c8, 0x76cb5ad6, 0xd49974c9, 0xca180dcf, 0x380782d5, 0xc7fa5cf6, 0x8ac31511, 0x35e79e13, 0x47da91d0, 0xf40f9086, 0xa7e2419e, 0x31366241, 0x051ef495, 0xaa573b04, 0x4a805d8d, 0x548300d0, 0x00322a3c, 0xbf64cddf, 0xba57a68e, 0x75c6372b, 0x50afd341, 0xa7c13275, 0x915a0bf5, 0x6b54bfab, 0x2b0b1426, 0xab4cc9d7, 0x449ccd82, 0xf7fbf265, 0xab85c5f3, 0x1b55db94, 0xaad4e324, 0xcfa4bd3f, 0x2deaa3e2, 0x9e204d02, 0xc8bd25ac, 0xeadf55b3, 0xd5bd9e98, 0xe31231b2, 0x2ad5ad6c, 0x954329de, 0xadbe4528, 0xd8710f69, 0xaa51c90f, 0xaa786bf6, 0x22513f1e, 0xaa51a79b, 0x2ad344cc, 0x7b5a41f0, 0xd37cfbad, 0x1b069505, 0x41ece491, 0xb4c332e6, 0x032268d4, 0xc9600acc, 0xce387e6d, 0xbf6bb16c, 0x6a70fb78, 0x0d03d9c9, 0xd4df39de, 0xe01063da, 0x4736f464, 0x5ad328d8, 0xb347cc96, 0x75bb0fc3, 0x98511bfb, 0x4ffbcc35, 0xb58bcf6a, 0xe11f0abc, 0xbfc5fe4a, 0xa70aec10, 0xac39570a, 0x3f04442f, 0x6188b153, 0xe0397a2e, 0x5727cb79, 0x9ceb418f, 0x1cacd68d, 0x2ad37c96, 0x0175cb9d, 0xc69dff09, 0xc75b65f0, 0xd9db40d8, 0xec0e7779, 0x4744ead4, 0xb11c3274, 0xdd24cb9e, 0x7e1c54bd, 0xf01144f9, 0xd2240eb1, 0x9675b3fd, 0xa3ac3755, 0xd47c27af, 0x51c85f4d, 0x56907596, 0xa5bb15e6, 0x580304f0, 0xca042cf1, 0x011a37ea, 0x8dbfaadb, 0x35ba3e4a, 0x3526ffa0, 0xc37b4d09, 0xbc306ed9, 0x98a52666, 0x5648f725, 0xff5e569d, 0x0ced63d0, 0x7c63b2cf, 0x700b45e1, 0xd5ea50f1, 0x85a92872, 0xaf1fbda7, 0xd4234870, 0xa7870bf3, 0x2d3b4d79, 0x42e04198, 0x0cd0ede7, 0x26470db8, 0xf881814c, 0x474d6ad7, 0x7c0c5e5c, 0xd1231959, 0x381b7298, 0xf5d2f4db, 0xab838653, 0x6e2f1e23, 0x83719c9e, 0xbd91e046, 0x9a56456e, 0xdc39200c, 0x20c8c571, 0x962bda1c, 0xe1e696ff, 0xb141ab08, 0x7cca89b9, 0x1a69e783, 0x02cc4843, 0xa2f7c579, 0x429ef47d, 0x427b169c, 0x5ac9f049, 0xdd8f0f00, 0x5c8165bf }; static const u32 s2[256] = { 0x1f201094, 0xef0ba75b, 0x69e3cf7e, 0x393f4380, 0xfe61cf7a, 0xeec5207a, 0x55889c94, 0x72fc0651, 0xada7ef79, 0x4e1d7235, 0xd55a63ce, 0xde0436ba, 0x99c430ef, 0x5f0c0794, 0x18dcdb7d, 0xa1d6eff3, 0xa0b52f7b, 0x59e83605, 0xee15b094, 0xe9ffd909, 0xdc440086, 0xef944459, 0xba83ccb3, 0xe0c3cdfb, 0xd1da4181, 0x3b092ab1, 0xf997f1c1, 0xa5e6cf7b, 0x01420ddb, 0xe4e7ef5b, 0x25a1ff41, 0xe180f806, 0x1fc41080, 0x179bee7a, 0xd37ac6a9, 0xfe5830a4, 0x98de8b7f, 0x77e83f4e, 0x79929269, 0x24fa9f7b, 0xe113c85b, 0xacc40083, 0xd7503525, 0xf7ea615f, 0x62143154, 0x0d554b63, 0x5d681121, 0xc866c359, 0x3d63cf73, 0xcee234c0, 0xd4d87e87, 0x5c672b21, 0x071f6181, 0x39f7627f, 0x361e3084, 0xe4eb573b, 0x602f64a4, 0xd63acd9c, 0x1bbc4635, 0x9e81032d, 0x2701f50c, 0x99847ab4, 0xa0e3df79, 0xba6cf38c, 0x10843094, 0x2537a95e, 0xf46f6ffe, 0xa1ff3b1f, 0x208cfb6a, 0x8f458c74, 0xd9e0a227, 0x4ec73a34, 0xfc884f69, 0x3e4de8df, 0xef0e0088, 0x3559648d, 0x8a45388c, 0x1d804366, 0x721d9bfd, 0xa58684bb, 0xe8256333, 0x844e8212, 0x128d8098, 0xfed33fb4, 0xce280ae1, 0x27e19ba5, 0xd5a6c252, 0xe49754bd, 0xc5d655dd, 0xeb667064, 0x77840b4d, 0xa1b6a801, 0x84db26a9, 0xe0b56714, 0x21f043b7, 0xe5d05860, 0x54f03084, 0x066ff472, 0xa31aa153, 0xdadc4755, 0xb5625dbf, 0x68561be6, 0x83ca6b94, 0x2d6ed23b, 0xeccf01db, 0xa6d3d0ba, 0xb6803d5c, 0xaf77a709, 0x33b4a34c, 0x397bc8d6, 0x5ee22b95, 0x5f0e5304, 0x81ed6f61, 0x20e74364, 0xb45e1378, 0xde18639b, 0x881ca122, 0xb96726d1, 0x8049a7e8, 0x22b7da7b, 0x5e552d25, 0x5272d237, 0x79d2951c, 0xc60d894c, 0x488cb402, 0x1ba4fe5b, 0xa4b09f6b, 0x1ca815cf, 0xa20c3005, 0x8871df63, 0xb9de2fcb, 0x0cc6c9e9, 0x0beeff53, 0xe3214517, 0xb4542835, 0x9f63293c, 0xee41e729, 0x6e1d2d7c, 0x50045286, 0x1e6685f3, 0xf33401c6, 0x30a22c95, 0x31a70850, 0x60930f13, 0x73f98417, 0xa1269859, 0xec645c44, 0x52c877a9, 0xcdff33a6, 0xa02b1741, 0x7cbad9a2, 0x2180036f, 0x50d99c08, 0xcb3f4861, 0xc26bd765, 0x64a3f6ab, 0x80342676, 0x25a75e7b, 0xe4e6d1fc, 0x20c710e6, 0xcdf0b680, 0x17844d3b, 0x31eef84d, 0x7e0824e4, 0x2ccb49eb, 0x846a3bae, 0x8ff77888, 0xee5d60f6, 0x7af75673, 0x2fdd5cdb, 0xa11631c1, 0x30f66f43, 0xb3faec54, 0x157fd7fa, 0xef8579cc, 0xd152de58, 0xdb2ffd5e, 0x8f32ce19, 0x306af97a, 0x02f03ef8, 0x99319ad5, 0xc242fa0f, 0xa7e3ebb0, 0xc68e4906, 0xb8da230c, 0x80823028, 0xdcdef3c8, 0xd35fb171, 0x088a1bc8, 0xbec0c560, 0x61a3c9e8, 0xbca8f54d, 0xc72feffa, 0x22822e99, 0x82c570b4, 0xd8d94e89, 0x8b1c34bc, 0x301e16e6, 0x273be979, 0xb0ffeaa6, 0x61d9b8c6, 0x00b24869, 0xb7ffce3f, 0x08dc283b, 0x43daf65a, 0xf7e19798, 0x7619b72f, 0x8f1c9ba4, 0xdc8637a0, 0x16a7d3b1, 0x9fc393b7, 0xa7136eeb, 0xc6bcc63e, 0x1a513742, 0xef6828bc, 0x520365d6, 0x2d6a77ab, 0x3527ed4b, 0x821fd216, 0x095c6e2e, 0xdb92f2fb, 0x5eea29cb, 0x145892f5, 0x91584f7f, 0x5483697b, 0x2667a8cc, 0x85196048, 0x8c4bacea, 0x833860d4, 0x0d23e0f9, 0x6c387e8a, 0x0ae6d249, 0xb284600c, 0xd835731d, 0xdcb1c647, 0xac4c56ea, 0x3ebd81b3, 0x230eabb0, 0x6438bc87, 0xf0b5b1fa, 0x8f5ea2b3, 0xfc184642, 0x0a036b7a, 0x4fb089bd, 0x649da589, 0xa345415e, 0x5c038323, 0x3e5d3bb9, 0x43d79572, 0x7e6dd07c, 0x06dfdf1e, 0x6c6cc4ef, 0x7160a539, 0x73bfbe70, 0x83877605, 0x4523ecf1 }; static const u32 s3[256] = { 0x8defc240, 0x25fa5d9f, 0xeb903dbf, 0xe810c907, 0x47607fff, 0x369fe44b, 0x8c1fc644, 0xaececa90, 0xbeb1f9bf, 0xeefbcaea, 0xe8cf1950, 0x51df07ae, 0x920e8806, 0xf0ad0548, 0xe13c8d83, 0x927010d5, 0x11107d9f, 0x07647db9, 0xb2e3e4d4, 0x3d4f285e, 0xb9afa820, 0xfade82e0, 0xa067268b, 0x8272792e, 0x553fb2c0, 0x489ae22b, 0xd4ef9794, 0x125e3fbc, 0x21fffcee, 0x825b1bfd, 0x9255c5ed, 0x1257a240, 0x4e1a8302, 0xbae07fff, 0x528246e7, 0x8e57140e, 0x3373f7bf, 0x8c9f8188, 0xa6fc4ee8, 0xc982b5a5, 0xa8c01db7, 0x579fc264, 0x67094f31, 0xf2bd3f5f, 0x40fff7c1, 0x1fb78dfc, 0x8e6bd2c1, 0x437be59b, 0x99b03dbf, 0xb5dbc64b, 0x638dc0e6, 0x55819d99, 0xa197c81c, 0x4a012d6e, 0xc5884a28, 0xccc36f71, 0xb843c213, 0x6c0743f1, 0x8309893c, 0x0feddd5f, 0x2f7fe850, 0xd7c07f7e, 0x02507fbf, 0x5afb9a04, 0xa747d2d0, 0x1651192e, 0xaf70bf3e, 0x58c31380, 0x5f98302e, 0x727cc3c4, 0x0a0fb402, 0x0f7fef82, 0x8c96fdad, 0x5d2c2aae, 0x8ee99a49, 0x50da88b8, 0x8427f4a0, 0x1eac5790, 0x796fb449, 0x8252dc15, 0xefbd7d9b, 0xa672597d, 0xada840d8, 0x45f54504, 0xfa5d7403, 0xe83ec305, 0x4f91751a, 0x925669c2, 0x23efe941, 0xa903f12e, 0x60270df2, 0x0276e4b6, 0x94fd6574, 0x927985b2, 0x8276dbcb, 0x02778176, 0xf8af918d, 0x4e48f79e, 0x8f616ddf, 0xe29d840e, 0x842f7d83, 0x340ce5c8, 0x96bbb682, 0x93b4b148, 0xef303cab, 0x984faf28, 0x779faf9b, 0x92dc560d, 0x224d1e20, 0x8437aa88, 0x7d29dc96, 0x2756d3dc, 0x8b907cee, 0xb51fd240, 0xe7c07ce3, 0xe566b4a1, 0xc3e9615e, 0x3cf8209d, 0x6094d1e3, 0xcd9ca341, 0x5c76460e, 0x00ea983b, 0xd4d67881, 0xfd47572c, 0xf76cedd9, 0xbda8229c, 0x127dadaa, 0x438a074e, 0x1f97c090, 0x081bdb8a, 0x93a07ebe, 0xb938ca15, 0x97b03cff, 0x3dc2c0f8, 0x8d1ab2ec, 0x64380e51, 0x68cc7bfb, 0xd90f2788, 0x12490181, 0x5de5ffd4, 0xdd7ef86a, 0x76a2e214, 0xb9a40368, 0x925d958f, 0x4b39fffa, 0xba39aee9, 0xa4ffd30b, 0xfaf7933b, 0x6d498623, 0x193cbcfa, 0x27627545, 0x825cf47a, 0x61bd8ba0, 0xd11e42d1, 0xcead04f4, 0x127ea392, 0x10428db7, 0x8272a972, 0x9270c4a8, 0x127de50b, 0x285ba1c8, 0x3c62f44f, 0x35c0eaa5, 0xe805d231, 0x428929fb, 0xb4fcdf82, 0x4fb66a53, 0x0e7dc15b, 0x1f081fab, 0x108618ae, 0xfcfd086d, 0xf9ff2889, 0x694bcc11, 0x236a5cae, 0x12deca4d, 0x2c3f8cc5, 0xd2d02dfe, 0xf8ef5896, 0xe4cf52da, 0x95155b67, 0x494a488c, 0xb9b6a80c, 0x5c8f82bc, 0x89d36b45, 0x3a609437, 0xec00c9a9, 0x44715253, 0x0a874b49, 0xd773bc40, 0x7c34671c, 0x02717ef6, 0x4feb5536, 0xa2d02fff, 0xd2bf60c4, 0xd43f03c0, 0x50b4ef6d, 0x07478cd1, 0x006e1888, 0xa2e53f55, 0xb9e6d4bc, 0xa2048016, 0x97573833, 0xd7207d67, 0xde0f8f3d, 0x72f87b33, 0xabcc4f33, 0x7688c55d, 0x7b00a6b0, 0x947b0001, 0x570075d2, 0xf9bb88f8, 0x8942019e, 0x4264a5ff, 0x856302e0, 0x72dbd92b, 0xee971b69, 0x6ea22fde, 0x5f08ae2b, 0xaf7a616d, 0xe5c98767, 0xcf1febd2, 0x61efc8c2, 0xf1ac2571, 0xcc8239c2, 0x67214cb8, 0xb1e583d1, 0xb7dc3e62, 0x7f10bdce, 0xf90a5c38, 0x0ff0443d, 0x606e6dc6, 0x60543a49, 0x5727c148, 0x2be98a1d, 0x8ab41738, 0x20e1be24, 0xaf96da0f, 0x68458425, 0x99833be5, 0x600d457d, 0x282f9350, 0x8334b362, 0xd91d1120, 0x2b6d8da0, 0x642b1e31, 0x9c305a00, 0x52bce688, 0x1b03588a, 0xf7baefd5, 0x4142ed9c, 0xa4315c11, 0x83323ec5, 0xdfef4636, 0xa133c501, 0xe9d3531c, 0xee353783 }; static const u32 s4[256] = { 0x9db30420, 0x1fb6e9de, 0xa7be7bef, 0xd273a298, 0x4a4f7bdb, 0x64ad8c57, 0x85510443, 0xfa020ed1, 0x7e287aff, 0xe60fb663, 0x095f35a1, 0x79ebf120, 0xfd059d43, 0x6497b7b1, 0xf3641f63, 0x241e4adf, 0x28147f5f, 0x4fa2b8cd, 0xc9430040, 0x0cc32220, 0xfdd30b30, 0xc0a5374f, 0x1d2d00d9, 0x24147b15, 0xee4d111a, 0x0fca5167, 0x71ff904c, 0x2d195ffe, 0x1a05645f, 0x0c13fefe, 0x081b08ca, 0x05170121, 0x80530100, 0xe83e5efe, 0xac9af4f8, 0x7fe72701, 0xd2b8ee5f, 0x06df4261, 0xbb9e9b8a, 0x7293ea25, 0xce84ffdf, 0xf5718801, 0x3dd64b04, 0xa26f263b, 0x7ed48400, 0x547eebe6, 0x446d4ca0, 0x6cf3d6f5, 0x2649abdf, 0xaea0c7f5, 0x36338cc1, 0x503f7e93, 0xd3772061, 0x11b638e1, 0x72500e03, 0xf80eb2bb, 0xabe0502e, 0xec8d77de, 0x57971e81, 0xe14f6746, 0xc9335400, 0x6920318f, 0x081dbb99, 0xffc304a5, 0x4d351805, 0x7f3d5ce3, 0xa6c866c6, 0x5d5bcca9, 0xdaec6fea, 0x9f926f91, 0x9f46222f, 0x3991467d, 0xa5bf6d8e, 0x1143c44f, 0x43958302, 0xd0214eeb, 0x022083b8, 0x3fb6180c, 0x18f8931e, 0x281658e6, 0x26486e3e, 0x8bd78a70, 0x7477e4c1, 0xb506e07c, 0xf32d0a25, 0x79098b02, 0xe4eabb81, 0x28123b23, 0x69dead38, 0x1574ca16, 0xdf871b62, 0x211c40b7, 0xa51a9ef9, 0x0014377b, 0x041e8ac8, 0x09114003, 0xbd59e4d2, 0xe3d156d5, 0x4fe876d5, 0x2f91a340, 0x557be8de, 0x00eae4a7, 0x0ce5c2ec, 0x4db4bba6, 0xe756bdff, 0xdd3369ac, 0xec17b035, 0x06572327, 0x99afc8b0, 0x56c8c391, 0x6b65811c, 0x5e146119, 0x6e85cb75, 0xbe07c002, 0xc2325577, 0x893ff4ec, 0x5bbfc92d, 0xd0ec3b25, 0xb7801ab7, 0x8d6d3b24, 0x20c763ef, 0xc366a5fc, 0x9c382880, 0x0ace3205, 0xaac9548a, 0xeca1d7c7, 0x041afa32, 0x1d16625a, 0x6701902c, 0x9b757a54, 0x31d477f7, 0x9126b031, 0x36cc6fdb, 0xc70b8b46, 0xd9e66a48, 0x56e55a79, 0x026a4ceb, 0x52437eff, 0x2f8f76b4, 0x0df980a5, 0x8674cde3, 0xedda04eb, 0x17a9be04, 0x2c18f4df, 0xb7747f9d, 0xab2af7b4, 0xefc34d20, 0x2e096b7c, 0x1741a254, 0xe5b6a035, 0x213d42f6, 0x2c1c7c26, 0x61c2f50f, 0x6552daf9, 0xd2c231f8, 0x25130f69, 0xd8167fa2, 0x0418f2c8, 0x001a96a6, 0x0d1526ab, 0x63315c21, 0x5e0a72ec, 0x49bafefd, 0x187908d9, 0x8d0dbd86, 0x311170a7, 0x3e9b640c, 0xcc3e10d7, 0xd5cad3b6, 0x0caec388, 0xf73001e1, 0x6c728aff, 0x71eae2a1, 0x1f9af36e, 0xcfcbd12f, 0xc1de8417, 0xac07be6b, 0xcb44a1d8, 0x8b9b0f56, 0x013988c3, 0xb1c52fca, 0xb4be31cd, 0xd8782806, 0x12a3a4e2, 0x6f7de532, 0x58fd7eb6, 0xd01ee900, 0x24adffc2, 0xf4990fc5, 0x9711aac5, 0x001d7b95, 0x82e5e7d2, 0x109873f6, 0x00613096, 0xc32d9521, 0xada121ff, 0x29908415, 0x7fbb977f, 0xaf9eb3db, 0x29c9ed2a, 0x5ce2a465, 0xa730f32c, 0xd0aa3fe8, 0x8a5cc091, 0xd49e2ce7, 0x0ce454a9, 0xd60acd86, 0x015f1919, 0x77079103, 0xdea03af6, 0x78a8565e, 0xdee356df, 0x21f05cbe, 0x8b75e387, 0xb3c50651, 0xb8a5c3ef, 0xd8eeb6d2, 0xe523be77, 0xc2154529, 0x2f69efdf, 0xafe67afb, 0xf470c4b2, 0xf3e0eb5b, 0xd6cc9876, 0x39e4460c, 0x1fda8538, 0x1987832f, 0xca007367, 0xa99144f8, 0x296b299e, 0x492fc295, 0x9266beab, 0xb5676e69, 0x9bd3ddda, 0xdf7e052f, 0xdb25701c, 0x1b5e51ee, 0xf65324e6, 0x6afce36c, 0x0316cc04, 0x8644213e, 0xb7dc59d0, 0x7965291f, 0xccd6fd43, 0x41823979, 0x932bcdf6, 0xb657c34d, 0x4edfd282, 0x7ae5290c, 0x3cb9536b, 0x851e20fe, 0x9833557e, 0x13ecf0b0, 0xd3ffb372, 0x3f85c5c1, 0x0aef7ed2 }; static const u32 s5[256] = { 0x7ec90c04, 0x2c6e74b9, 0x9b0e66df, 0xa6337911, 0xb86a7fff, 0x1dd358f5, 0x44dd9d44, 0x1731167f, 0x08fbf1fa, 0xe7f511cc, 0xd2051b00, 0x735aba00, 0x2ab722d8, 0x386381cb, 0xacf6243a, 0x69befd7a, 0xe6a2e77f, 0xf0c720cd, 0xc4494816, 0xccf5c180, 0x38851640, 0x15b0a848, 0xe68b18cb, 0x4caadeff, 0x5f480a01, 0x0412b2aa, 0x259814fc, 0x41d0efe2, 0x4e40b48d, 0x248eb6fb, 0x8dba1cfe, 0x41a99b02, 0x1a550a04, 0xba8f65cb, 0x7251f4e7, 0x95a51725, 0xc106ecd7, 0x97a5980a, 0xc539b9aa, 0x4d79fe6a, 0xf2f3f763, 0x68af8040, 0xed0c9e56, 0x11b4958b, 0xe1eb5a88, 0x8709e6b0, 0xd7e07156, 0x4e29fea7, 0x6366e52d, 0x02d1c000, 0xc4ac8e05, 0x9377f571, 0x0c05372a, 0x578535f2, 0x2261be02, 0xd642a0c9, 0xdf13a280, 0x74b55bd2, 0x682199c0, 0xd421e5ec, 0x53fb3ce8, 0xc8adedb3, 0x28a87fc9, 0x3d959981, 0x5c1ff900, 0xfe38d399, 0x0c4eff0b, 0x062407ea, 0xaa2f4fb1, 0x4fb96976, 0x90c79505, 0xb0a8a774, 0xef55a1ff, 0xe59ca2c2, 0xa6b62d27, 0xe66a4263, 0xdf65001f, 0x0ec50966, 0xdfdd55bc, 0x29de0655, 0x911e739a, 0x17af8975, 0x32c7911c, 0x89f89468, 0x0d01e980, 0x524755f4, 0x03b63cc9, 0x0cc844b2, 0xbcf3f0aa, 0x87ac36e9, 0xe53a7426, 0x01b3d82b, 0x1a9e7449, 0x64ee2d7e, 0xcddbb1da, 0x01c94910, 0xb868bf80, 0x0d26f3fd, 0x9342ede7, 0x04a5c284, 0x636737b6, 0x50f5b616, 0xf24766e3, 0x8eca36c1, 0x136e05db, 0xfef18391, 0xfb887a37, 0xd6e7f7d4, 0xc7fb7dc9, 0x3063fcdf, 0xb6f589de, 0xec2941da, 0x26e46695, 0xb7566419, 0xf654efc5, 0xd08d58b7, 0x48925401, 0xc1bacb7f, 0xe5ff550f, 0xb6083049, 0x5bb5d0e8, 0x87d72e5a, 0xab6a6ee1, 0x223a66ce, 0xc62bf3cd, 0x9e0885f9, 0x68cb3e47, 0x086c010f, 0xa21de820, 0xd18b69de, 0xf3f65777, 0xfa02c3f6, 0x407edac3, 0xcbb3d550, 0x1793084d, 0xb0d70eba, 0x0ab378d5, 0xd951fb0c, 0xded7da56, 0x4124bbe4, 0x94ca0b56, 0x0f5755d1, 0xe0e1e56e, 0x6184b5be, 0x580a249f, 0x94f74bc0, 0xe327888e, 0x9f7b5561, 0xc3dc0280, 0x05687715, 0x646c6bd7, 0x44904db3, 0x66b4f0a3, 0xc0f1648a, 0x697ed5af, 0x49e92ff6, 0x309e374f, 0x2cb6356a, 0x85808573, 0x4991f840, 0x76f0ae02, 0x083be84d, 0x28421c9a, 0x44489406, 0x736e4cb8, 0xc1092910, 0x8bc95fc6, 0x7d869cf4, 0x134f616f, 0x2e77118d, 0xb31b2be1, 0xaa90b472, 0x3ca5d717, 0x7d161bba, 0x9cad9010, 0xaf462ba2, 0x9fe459d2, 0x45d34559, 0xd9f2da13, 0xdbc65487, 0xf3e4f94e, 0x176d486f, 0x097c13ea, 0x631da5c7, 0x445f7382, 0x175683f4, 0xcdc66a97, 0x70be0288, 0xb3cdcf72, 0x6e5dd2f3, 0x20936079, 0x459b80a5, 0xbe60e2db, 0xa9c23101, 0xeba5315c, 0x224e42f2, 0x1c5c1572, 0xf6721b2c, 0x1ad2fff3, 0x8c25404e, 0x324ed72f, 0x4067b7fd, 0x0523138e, 0x5ca3bc78, 0xdc0fd66e, 0x75922283, 0x784d6b17, 0x58ebb16e, 0x44094f85, 0x3f481d87, 0xfcfeae7b, 0x77b5ff76, 0x8c2302bf, 0xaaf47556, 0x5f46b02a, 0x2b092801, 0x3d38f5f7, 0x0ca81f36, 0x52af4a8a, 0x66d5e7c0, 0xdf3b0874, 0x95055110, 0x1b5ad7a8, 0xf61ed5ad, 0x6cf6e479, 0x20758184, 0xd0cefa65, 0x88f7be58, 0x4a046826, 0x0ff6f8f3, 0xa09c7f70, 0x5346aba0, 0x5ce96c28, 0xe176eda3, 0x6bac307f, 0x376829d2, 0x85360fa9, 0x17e3fe2a, 0x24b79767, 0xf5a96b20, 0xd6cd2595, 0x68ff1ebf, 0x7555442c, 0xf19f06be, 0xf9e0659a, 0xeeb9491d, 0x34010718, 0xbb30cab8, 0xe822fe15, 0x88570983, 0x750e6249, 0xda627e55, 0x5e76ffa8, 0xb1534546, 0x6d47de08, 0xefe9e7d4 }; static const u32 s6[256] = { 0xf6fa8f9d, 0x2cac6ce1, 0x4ca34867, 0xe2337f7c, 0x95db08e7, 0x016843b4, 0xeced5cbc, 0x325553ac, 0xbf9f0960, 0xdfa1e2ed, 0x83f0579d, 0x63ed86b9, 0x1ab6a6b8, 0xde5ebe39, 0xf38ff732, 0x8989b138, 0x33f14961, 0xc01937bd, 0xf506c6da, 0xe4625e7e, 0xa308ea99, 0x4e23e33c, 0x79cbd7cc, 0x48a14367, 0xa3149619, 0xfec94bd5, 0xa114174a, 0xeaa01866, 0xa084db2d, 0x09a8486f, 0xa888614a, 0x2900af98, 0x01665991, 0xe1992863, 0xc8f30c60, 0x2e78ef3c, 0xd0d51932, 0xcf0fec14, 0xf7ca07d2, 0xd0a82072, 0xfd41197e, 0x9305a6b0, 0xe86be3da, 0x74bed3cd, 0x372da53c, 0x4c7f4448, 0xdab5d440, 0x6dba0ec3, 0x083919a7, 0x9fbaeed9, 0x49dbcfb0, 0x4e670c53, 0x5c3d9c01, 0x64bdb941, 0x2c0e636a, 0xba7dd9cd, 0xea6f7388, 0xe70bc762, 0x35f29adb, 0x5c4cdd8d, 0xf0d48d8c, 0xb88153e2, 0x08a19866, 0x1ae2eac8, 0x284caf89, 0xaa928223, 0x9334be53, 0x3b3a21bf, 0x16434be3, 0x9aea3906, 0xefe8c36e, 0xf890cdd9, 0x80226dae, 0xc340a4a3, 0xdf7e9c09, 0xa694a807, 0x5b7c5ecc, 0x221db3a6, 0x9a69a02f, 0x68818a54, 0xceb2296f, 0x53c0843a, 0xfe893655, 0x25bfe68a, 0xb4628abc, 0xcf222ebf, 0x25ac6f48, 0xa9a99387, 0x53bddb65, 0xe76ffbe7, 0xe967fd78, 0x0ba93563, 0x8e342bc1, 0xe8a11be9, 0x4980740d, 0xc8087dfc, 0x8de4bf99, 0xa11101a0, 0x7fd37975, 0xda5a26c0, 0xe81f994f, 0x9528cd89, 0xfd339fed, 0xb87834bf, 0x5f04456d, 0x22258698, 0xc9c4c83b, 0x2dc156be, 0x4f628daa, 0x57f55ec5, 0xe2220abe, 0xd2916ebf, 0x4ec75b95, 0x24f2c3c0, 0x42d15d99, 0xcd0d7fa0, 0x7b6e27ff, 0xa8dc8af0, 0x7345c106, 0xf41e232f, 0x35162386, 0xe6ea8926, 0x3333b094, 0x157ec6f2, 0x372b74af, 0x692573e4, 0xe9a9d848, 0xf3160289, 0x3a62ef1d, 0xa787e238, 0xf3a5f676, 0x74364853, 0x20951063, 0x4576698d, 0xb6fad407, 0x592af950, 0x36f73523, 0x4cfb6e87, 0x7da4cec0, 0x6c152daa, 0xcb0396a8, 0xc50dfe5d, 0xfcd707ab, 0x0921c42f, 0x89dff0bb, 0x5fe2be78, 0x448f4f33, 0x754613c9, 0x2b05d08d, 0x48b9d585, 0xdc049441, 0xc8098f9b, 0x7dede786, 0xc39a3373, 0x42410005, 0x6a091751, 0x0ef3c8a6, 0x890072d6, 0x28207682, 0xa9a9f7be, 0xbf32679d, 0xd45b5b75, 0xb353fd00, 0xcbb0e358, 0x830f220a, 0x1f8fb214, 0xd372cf08, 0xcc3c4a13, 0x8cf63166, 0x061c87be, 0x88c98f88, 0x6062e397, 0x47cf8e7a, 0xb6c85283, 0x3cc2acfb, 0x3fc06976, 0x4e8f0252, 0x64d8314d, 0xda3870e3, 0x1e665459, 0xc10908f0, 0x513021a5, 0x6c5b68b7, 0x822f8aa0, 0x3007cd3e, 0x74719eef, 0xdc872681, 0x073340d4, 0x7e432fd9, 0x0c5ec241, 0x8809286c, 0xf592d891, 0x08a930f6, 0x957ef305, 0xb7fbffbd, 0xc266e96f, 0x6fe4ac98, 0xb173ecc0, 0xbc60b42a, 0x953498da, 0xfba1ae12, 0x2d4bd736, 0x0f25faab, 0xa4f3fceb, 0xe2969123, 0x257f0c3d, 0x9348af49, 0x361400bc, 0xe8816f4a, 0x3814f200, 0xa3f94043, 0x9c7a54c2, 0xbc704f57, 0xda41e7f9, 0xc25ad33a, 0x54f4a084, 0xb17f5505, 0x59357cbe, 0xedbd15c8, 0x7f97c5ab, 0xba5ac7b5, 0xb6f6deaf, 0x3a479c3a, 0x5302da25, 0x653d7e6a, 0x54268d49, 0x51a477ea, 0x5017d55b, 0xd7d25d88, 0x44136c76, 0x0404a8c8, 0xb8e5a121, 0xb81a928a, 0x60ed5869, 0x97c55b96, 0xeaec991b, 0x29935913, 0x01fdb7f1, 0x088e8dfa, 0x9ab6f6f5, 0x3b4cbf9f, 0x4a5de3ab, 0xe6051d35, 0xa0e1d855, 0xd36b4cf1, 0xf544edeb, 0xb0e93524, 0xbebb8fbd, 0xa2d762cf, 0x49c92f54, 0x38b5f331, 0x7128a454, 0x48392905, 0xa65b1db8, 0x851c97bd, 0xd675cf2f }; static const u32 s7[256] = { 0x85e04019, 0x332bf567, 0x662dbfff, 0xcfc65693, 0x2a8d7f6f, 0xab9bc912, 0xde6008a1, 0x2028da1f, 0x0227bce7, 0x4d642916, 0x18fac300, 0x50f18b82, 0x2cb2cb11, 0xb232e75c, 0x4b3695f2, 0xb28707de, 0xa05fbcf6, 0xcd4181e9, 0xe150210c, 0xe24ef1bd, 0xb168c381, 0xfde4e789, 0x5c79b0d8, 0x1e8bfd43, 0x4d495001, 0x38be4341, 0x913cee1d, 0x92a79c3f, 0x089766be, 0xbaeeadf4, 0x1286becf, 0xb6eacb19, 0x2660c200, 0x7565bde4, 0x64241f7a, 0x8248dca9, 0xc3b3ad66, 0x28136086, 0x0bd8dfa8, 0x356d1cf2, 0x107789be, 0xb3b2e9ce, 0x0502aa8f, 0x0bc0351e, 0x166bf52a, 0xeb12ff82, 0xe3486911, 0xd34d7516, 0x4e7b3aff, 0x5f43671b, 0x9cf6e037, 0x4981ac83, 0x334266ce, 0x8c9341b7, 0xd0d854c0, 0xcb3a6c88, 0x47bc2829, 0x4725ba37, 0xa66ad22b, 0x7ad61f1e, 0x0c5cbafa, 0x4437f107, 0xb6e79962, 0x42d2d816, 0x0a961288, 0xe1a5c06e, 0x13749e67, 0x72fc081a, 0xb1d139f7, 0xf9583745, 0xcf19df58, 0xbec3f756, 0xc06eba30, 0x07211b24, 0x45c28829, 0xc95e317f, 0xbc8ec511, 0x38bc46e9, 0xc6e6fa14, 0xbae8584a, 0xad4ebc46, 0x468f508b, 0x7829435f, 0xf124183b, 0x821dba9f, 0xaff60ff4, 0xea2c4e6d, 0x16e39264, 0x92544a8b, 0x009b4fc3, 0xaba68ced, 0x9ac96f78, 0x06a5b79a, 0xb2856e6e, 0x1aec3ca9, 0xbe838688, 0x0e0804e9, 0x55f1be56, 0xe7e5363b, 0xb3a1f25d, 0xf7debb85, 0x61fe033c, 0x16746233, 0x3c034c28, 0xda6d0c74, 0x79aac56c, 0x3ce4e1ad, 0x51f0c802, 0x98f8f35a, 0x1626a49f, 0xeed82b29, 0x1d382fe3, 0x0c4fb99a, 0xbb325778, 0x3ec6d97b, 0x6e77a6a9, 0xcb658b5c, 0xd45230c7, 0x2bd1408b, 0x60c03eb7, 0xb9068d78, 0xa33754f4, 0xf430c87d, 0xc8a71302, 0xb96d8c32, 0xebd4e7be, 0xbe8b9d2d, 0x7979fb06, 0xe7225308, 0x8b75cf77, 0x11ef8da4, 0xe083c858, 0x8d6b786f, 0x5a6317a6, 0xfa5cf7a0, 0x5dda0033, 0xf28ebfb0, 0xf5b9c310, 0xa0eac280, 0x08b9767a, 0xa3d9d2b0, 0x79d34217, 0x021a718d, 0x9ac6336a, 0x2711fd60, 0x438050e3, 0x069908a8, 0x3d7fedc4, 0x826d2bef, 0x4eeb8476, 0x488dcf25, 0x36c9d566, 0x28e74e41, 0xc2610aca, 0x3d49a9cf, 0xbae3b9df, 0xb65f8de6, 0x92aeaf64, 0x3ac7d5e6, 0x9ea80509, 0xf22b017d, 0xa4173f70, 0xdd1e16c3, 0x15e0d7f9, 0x50b1b887, 0x2b9f4fd5, 0x625aba82, 0x6a017962, 0x2ec01b9c, 0x15488aa9, 0xd716e740, 0x40055a2c, 0x93d29a22, 0xe32dbf9a, 0x058745b9, 0x3453dc1e, 0xd699296e, 0x496cff6f, 0x1c9f4986, 0xdfe2ed07, 0xb87242d1, 0x19de7eae, 0x053e561a, 0x15ad6f8c, 0x66626c1c, 0x7154c24c, 0xea082b2a, 0x93eb2939, 0x17dcb0f0, 0x58d4f2ae, 0x9ea294fb, 0x52cf564c, 0x9883fe66, 0x2ec40581, 0x763953c3, 0x01d6692e, 0xd3a0c108, 0xa1e7160e, 0xe4f2dfa6, 0x693ed285, 0x74904698, 0x4c2b0edd, 0x4f757656, 0x5d393378, 0xa132234f, 0x3d321c5d, 0xc3f5e194, 0x4b269301, 0xc79f022f, 0x3c997e7e, 0x5e4f9504, 0x3ffafbbd, 0x76f7ad0e, 0x296693f4, 0x3d1fce6f, 0xc61e45be, 0xd3b5ab34, 0xf72bf9b7, 0x1b0434c0, 0x4e72b567, 0x5592a33d, 0xb5229301, 0xcfd2a87f, 0x60aeb767, 0x1814386b, 0x30bcc33d, 0x38a0c07d, 0xfd1606f2, 0xc363519b, 0x589dd390, 0x5479f8e6, 0x1cb8d647, 0x97fd61a9, 0xea7759f4, 0x2d57539d, 0x569a58cf, 0xe84e63ad, 0x462e1b78, 0x6580f87e, 0xf3817914, 0x91da55f4, 0x40a230f3, 0xd1988f35, 0xb6e318d2, 0x3ffa50bc, 0x3d40f021, 0xc3c0bdae, 0x4958c24c, 0x518f36b2, 0x84b1d370, 0x0fedce83, 0x878ddada, 0xf2a279c7, 0x94e01be8, 0x90716f4b, 0x954b8aa3 }; static const u32 s8[256] = { 0xe216300d, 0xbbddfffc, 0xa7ebdabd, 0x35648095, 0x7789f8b7, 0xe6c1121b, 0x0e241600, 0x052ce8b5, 0x11a9cfb0, 0xe5952f11, 0xece7990a, 0x9386d174, 0x2a42931c, 0x76e38111, 0xb12def3a, 0x37ddddfc, 0xde9adeb1, 0x0a0cc32c, 0xbe197029, 0x84a00940, 0xbb243a0f, 0xb4d137cf, 0xb44e79f0, 0x049eedfd, 0x0b15a15d, 0x480d3168, 0x8bbbde5a, 0x669ded42, 0xc7ece831, 0x3f8f95e7, 0x72df191b, 0x7580330d, 0x94074251, 0x5c7dcdfa, 0xabbe6d63, 0xaa402164, 0xb301d40a, 0x02e7d1ca, 0x53571dae, 0x7a3182a2, 0x12a8ddec, 0xfdaa335d, 0x176f43e8, 0x71fb46d4, 0x38129022, 0xce949ad4, 0xb84769ad, 0x965bd862, 0x82f3d055, 0x66fb9767, 0x15b80b4e, 0x1d5b47a0, 0x4cfde06f, 0xc28ec4b8, 0x57e8726e, 0x647a78fc, 0x99865d44, 0x608bd593, 0x6c200e03, 0x39dc5ff6, 0x5d0b00a3, 0xae63aff2, 0x7e8bd632, 0x70108c0c, 0xbbd35049, 0x2998df04, 0x980cf42a, 0x9b6df491, 0x9e7edd53, 0x06918548, 0x58cb7e07, 0x3b74ef2e, 0x522fffb1, 0xd24708cc, 0x1c7e27cd, 0xa4eb215b, 0x3cf1d2e2, 0x19b47a38, 0x424f7618, 0x35856039, 0x9d17dee7, 0x27eb35e6, 0xc9aff67b, 0x36baf5b8, 0x09c467cd, 0xc18910b1, 0xe11dbf7b, 0x06cd1af8, 0x7170c608, 0x2d5e3354, 0xd4de495a, 0x64c6d006, 0xbcc0c62c, 0x3dd00db3, 0x708f8f34, 0x77d51b42, 0x264f620f, 0x24b8d2bf, 0x15c1b79e, 0x46a52564, 0xf8d7e54e, 0x3e378160, 0x7895cda5, 0x859c15a5, 0xe6459788, 0xc37bc75f, 0xdb07ba0c, 0x0676a3ab, 0x7f229b1e, 0x31842e7b, 0x24259fd7, 0xf8bef472, 0x835ffcb8, 0x6df4c1f2, 0x96f5b195, 0xfd0af0fc, 0xb0fe134c, 0xe2506d3d, 0x4f9b12ea, 0xf215f225, 0xa223736f, 0x9fb4c428, 0x25d04979, 0x34c713f8, 0xc4618187, 0xea7a6e98, 0x7cd16efc, 0x1436876c, 0xf1544107, 0xbedeee14, 0x56e9af27, 0xa04aa441, 0x3cf7c899, 0x92ecbae6, 0xdd67016d, 0x151682eb, 0xa842eedf, 0xfdba60b4, 0xf1907b75, 0x20e3030f, 0x24d8c29e, 0xe139673b, 0xefa63fb8, 0x71873054, 0xb6f2cf3b, 0x9f326442, 0xcb15a4cc, 0xb01a4504, 0xf1e47d8d, 0x844a1be5, 0xbae7dfdc, 0x42cbda70, 0xcd7dae0a, 0x57e85b7a, 0xd53f5af6, 0x20cf4d8c, 0xcea4d428, 0x79d130a4, 0x3486ebfb, 0x33d3cddc, 0x77853b53, 0x37effcb5, 0xc5068778, 0xe580b3e6, 0x4e68b8f4, 0xc5c8b37e, 0x0d809ea2, 0x398feb7c, 0x132a4f94, 0x43b7950e, 0x2fee7d1c, 0x223613bd, 0xdd06caa2, 0x37df932b, 0xc4248289, 0xacf3ebc3, 0x5715f6b7, 0xef3478dd, 0xf267616f, 0xc148cbe4, 0x9052815e, 0x5e410fab, 0xb48a2465, 0x2eda7fa4, 0xe87b40e4, 0xe98ea084, 0x5889e9e1, 0xefd390fc, 0xdd07d35b, 0xdb485694, 0x38d7e5b2, 0x57720101, 0x730edebc, 0x5b643113, 0x94917e4f, 0x503c2fba, 0x646f1282, 0x7523d24a, 0xe0779695, 0xf9c17a8f, 0x7a5b2121, 0xd187b896, 0x29263a4d, 0xba510cdf, 0x81f47c9f, 0xad1163ed, 0xea7b5965, 0x1a00726e, 0x11403092, 0x00da6d77, 0x4a0cdd61, 0xad1f4603, 0x605bdfb0, 0x9eedc364, 0x22ebe6a8, 0xcee7d28a, 0xa0e736a0, 0x5564a6b9, 0x10853209, 0xc7eb8f37, 0x2de705ca, 0x8951570f, 0xdf09822b, 0xbd691a6c, 0xaa12e4f2, 0x87451c0f, 0xe0f6a27a, 0x3ada4819, 0x4cf1764f, 0x0d771c2b, 0x67cdb156, 0x350d8384, 0x5938fa0f, 0x42399ef3, 0x36997b07, 0x0e84093d, 0x4aa93e61, 0x8360d87b, 0x1fa98b0c, 0x1149382c, 0xe97625a5, 0x0614d1b7, 0x0e25244b, 0x0c768347, 0x589e8d82, 0x0d2059d1, 0xa466bb1e, 0xf8da0a82, 0x04f19130, 0xba6e4ec0, 0x99265164, 0x1ee7230d, 0x50b2ad80, 0xeaee6801, 0x8db2a283, 0xea8bf59e }; #if defined(__GNUC__) && defined(__i386__) static inline u32 rol(int n, u32 x) { __asm__("roll %%cl,%0" :"=r" (x) :"0" (x),"c" (n)); return x; } #else #define rol(n,x) ( ((x) << (n)) | ((x) >> (32-(n))) ) #endif #define F1(D,m,r) ( (I = ((m) + (D))), (I=rol((r),I)), \ (((s1[I >> 24] ^ s2[(I>>16)&0xff]) - s3[(I>>8)&0xff]) + s4[I&0xff]) ) #define F2(D,m,r) ( (I = ((m) ^ (D))), (I=rol((r),I)), \ (((s1[I >> 24] - s2[(I>>16)&0xff]) + s3[(I>>8)&0xff]) ^ s4[I&0xff]) ) #define F3(D,m,r) ( (I = ((m) - (D))), (I=rol((r),I)), \ (((s1[I >> 24] + s2[(I>>16)&0xff]) ^ s3[(I>>8)&0xff]) - s4[I&0xff]) ) static void burn_stack (int bytes) { char buf[64]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } static void do_encrypt_block( CAST5_context *c, byte *outbuf, const byte *inbuf ) { u32 l, r, t; u32 I; /* used by the Fx macros */ u32 *Km; byte *Kr; Km = c->Km; Kr = c->Kr; /* (L0,R0) <-- (m1...m64). (Split the plaintext into left and * right 32-bit halves L0 = m1...m32 and R0 = m33...m64.) */ l = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3]; r = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7]; /* (16 rounds) for i from 1 to 16, compute Li and Ri as follows: * Li = Ri-1; * Ri = Li-1 ^ f(Ri-1,Kmi,Kri), where f is defined in Section 2.2 * Rounds 1, 4, 7, 10, 13, and 16 use f function Type 1. * Rounds 2, 5, 8, 11, and 14 use f function Type 2. * Rounds 3, 6, 9, 12, and 15 use f function Type 3. */ t = l; l = r; r = t ^ F1(r, Km[ 0], Kr[ 0]); t = l; l = r; r = t ^ F2(r, Km[ 1], Kr[ 1]); t = l; l = r; r = t ^ F3(r, Km[ 2], Kr[ 2]); t = l; l = r; r = t ^ F1(r, Km[ 3], Kr[ 3]); t = l; l = r; r = t ^ F2(r, Km[ 4], Kr[ 4]); t = l; l = r; r = t ^ F3(r, Km[ 5], Kr[ 5]); t = l; l = r; r = t ^ F1(r, Km[ 6], Kr[ 6]); t = l; l = r; r = t ^ F2(r, Km[ 7], Kr[ 7]); t = l; l = r; r = t ^ F3(r, Km[ 8], Kr[ 8]); t = l; l = r; r = t ^ F1(r, Km[ 9], Kr[ 9]); t = l; l = r; r = t ^ F2(r, Km[10], Kr[10]); t = l; l = r; r = t ^ F3(r, Km[11], Kr[11]); t = l; l = r; r = t ^ F1(r, Km[12], Kr[12]); t = l; l = r; r = t ^ F2(r, Km[13], Kr[13]); t = l; l = r; r = t ^ F3(r, Km[14], Kr[14]); t = l; l = r; r = t ^ F1(r, Km[15], Kr[15]); /* c1...c64 <-- (R16,L16). (Exchange final blocks L16, R16 and * concatenate to form the ciphertext.) */ outbuf[0] = (r >> 24) & 0xff; outbuf[1] = (r >> 16) & 0xff; outbuf[2] = (r >> 8) & 0xff; outbuf[3] = r & 0xff; outbuf[4] = (l >> 24) & 0xff; outbuf[5] = (l >> 16) & 0xff; outbuf[6] = (l >> 8) & 0xff; outbuf[7] = l & 0xff; } static void encrypt_block( void *c, byte *outbuf, const byte *inbuf ) { do_encrypt_block (c, outbuf, inbuf); burn_stack (20+4*sizeof(void*)); } static void do_decrypt_block (CAST5_context *c, byte *outbuf, const byte *inbuf ) { u32 l, r, t; u32 I; u32 *Km; byte *Kr; Km = c->Km; Kr = c->Kr; l = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3]; r = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7]; t = l; l = r; r = t ^ F1(r, Km[15], Kr[15]); t = l; l = r; r = t ^ F3(r, Km[14], Kr[14]); t = l; l = r; r = t ^ F2(r, Km[13], Kr[13]); t = l; l = r; r = t ^ F1(r, Km[12], Kr[12]); t = l; l = r; r = t ^ F3(r, Km[11], Kr[11]); t = l; l = r; r = t ^ F2(r, Km[10], Kr[10]); t = l; l = r; r = t ^ F1(r, Km[ 9], Kr[ 9]); t = l; l = r; r = t ^ F3(r, Km[ 8], Kr[ 8]); t = l; l = r; r = t ^ F2(r, Km[ 7], Kr[ 7]); t = l; l = r; r = t ^ F1(r, Km[ 6], Kr[ 6]); t = l; l = r; r = t ^ F3(r, Km[ 5], Kr[ 5]); t = l; l = r; r = t ^ F2(r, Km[ 4], Kr[ 4]); t = l; l = r; r = t ^ F1(r, Km[ 3], Kr[ 3]); t = l; l = r; r = t ^ F3(r, Km[ 2], Kr[ 2]); t = l; l = r; r = t ^ F2(r, Km[ 1], Kr[ 1]); t = l; l = r; r = t ^ F1(r, Km[ 0], Kr[ 0]); outbuf[0] = (r >> 24) & 0xff; outbuf[1] = (r >> 16) & 0xff; outbuf[2] = (r >> 8) & 0xff; outbuf[3] = r & 0xff; outbuf[4] = (l >> 24) & 0xff; outbuf[5] = (l >> 16) & 0xff; outbuf[6] = (l >> 8) & 0xff; outbuf[7] = l & 0xff; } static void decrypt_block( void *c, byte *outbuf, const byte *inbuf ) { do_decrypt_block (c, outbuf, inbuf); burn_stack (20+4*sizeof(void*)); } static const char* selftest(void) { CAST5_context c; byte key[16] = { 0x01, 0x23, 0x45, 0x67, 0x12, 0x34, 0x56, 0x78, 0x23, 0x45, 0x67, 0x89, 0x34, 0x56, 0x78, 0x9A }; byte plain[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }; byte cipher[8]= { 0x23, 0x8B, 0x4F, 0xE5, 0x84, 0x7E, 0x44, 0xB2 }; byte buffer[8]; cast_setkey( &c, key, 16 ); encrypt_block( &c, buffer, plain ); if( memcmp( buffer, cipher, 8 ) ) return "1"; decrypt_block( &c, buffer, buffer ); if( memcmp( buffer, plain, 8 ) ) return "2"; #if 0 /* full maintenance test */ { int i; byte a0[16] = { 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78, 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A }; byte b0[16] = { 0x01,0x23,0x45,0x67,0x12,0x34,0x56,0x78, 0x23,0x45,0x67,0x89,0x34,0x56,0x78,0x9A }; byte a1[16] = { 0xEE,0xA9,0xD0,0xA2,0x49,0xFD,0x3B,0xA6, 0xB3,0x43,0x6F,0xB8,0x9D,0x6D,0xCA,0x92 }; byte b1[16] = { 0xB2,0xC9,0x5E,0xB0,0x0C,0x31,0xAD,0x71, 0x80,0xAC,0x05,0xB8,0xE8,0x3D,0x69,0x6E }; for(i=0; i < 1000000; i++ ) { cast_setkey( &c, b0, 16 ); encrypt_block( &c, a0, a0 ); encrypt_block( &c, a0+8, a0+8 ); cast_setkey( &c, a0, 16 ); encrypt_block( &c, b0, b0 ); encrypt_block( &c, b0+8, b0+8 ); } if( memcmp( a0, a1, 16 ) || memcmp( b0, b1, 16 ) ) return "3"; } #endif return NULL; } static void key_schedule( u32 *x, u32 *z, u32 *k ) { #define xi(i) ((x[(i)/4] >> (8*(3-((i)%4)))) & 0xff) #define zi(i) ((z[(i)/4] >> (8*(3-((i)%4)))) & 0xff) z[0] = x[0] ^ s5[xi(13)]^s6[xi(15)]^s7[xi(12)]^s8[xi(14)]^s7[xi( 8)]; z[1] = x[2] ^ s5[zi( 0)]^s6[zi( 2)]^s7[zi( 1)]^s8[zi( 3)]^s8[xi(10)]; z[2] = x[3] ^ s5[zi( 7)]^s6[zi( 6)]^s7[zi( 5)]^s8[zi( 4)]^s5[xi( 9)]; z[3] = x[1] ^ s5[zi(10)]^s6[zi( 9)]^s7[zi(11)]^s8[zi( 8)]^s6[xi(11)]; k[0] = s5[zi( 8)]^s6[zi( 9)]^s7[zi( 7)]^s8[zi( 6)]^s5[zi( 2)]; k[1] = s5[zi(10)]^s6[zi(11)]^s7[zi( 5)]^s8[zi( 4)]^s6[zi( 6)]; k[2] = s5[zi(12)]^s6[zi(13)]^s7[zi( 3)]^s8[zi( 2)]^s7[zi( 9)]; k[3] = s5[zi(14)]^s6[zi(15)]^s7[zi( 1)]^s8[zi( 0)]^s8[zi(12)]; x[0] = z[2] ^ s5[zi( 5)]^s6[zi( 7)]^s7[zi( 4)]^s8[zi( 6)]^s7[zi( 0)]; x[1] = z[0] ^ s5[xi( 0)]^s6[xi( 2)]^s7[xi( 1)]^s8[xi( 3)]^s8[zi( 2)]; x[2] = z[1] ^ s5[xi( 7)]^s6[xi( 6)]^s7[xi( 5)]^s8[xi( 4)]^s5[zi( 1)]; x[3] = z[3] ^ s5[xi(10)]^s6[xi( 9)]^s7[xi(11)]^s8[xi( 8)]^s6[zi( 3)]; k[4] = s5[xi( 3)]^s6[xi( 2)]^s7[xi(12)]^s8[xi(13)]^s5[xi( 8)]; k[5] = s5[xi( 1)]^s6[xi( 0)]^s7[xi(14)]^s8[xi(15)]^s6[xi(13)]; k[6] = s5[xi( 7)]^s6[xi( 6)]^s7[xi( 8)]^s8[xi( 9)]^s7[xi( 3)]; k[7] = s5[xi( 5)]^s6[xi( 4)]^s7[xi(10)]^s8[xi(11)]^s8[xi( 7)]; z[0] = x[0] ^ s5[xi(13)]^s6[xi(15)]^s7[xi(12)]^s8[xi(14)]^s7[xi( 8)]; z[1] = x[2] ^ s5[zi( 0)]^s6[zi( 2)]^s7[zi( 1)]^s8[zi( 3)]^s8[xi(10)]; z[2] = x[3] ^ s5[zi( 7)]^s6[zi( 6)]^s7[zi( 5)]^s8[zi( 4)]^s5[xi( 9)]; z[3] = x[1] ^ s5[zi(10)]^s6[zi( 9)]^s7[zi(11)]^s8[zi( 8)]^s6[xi(11)]; k[8] = s5[zi( 3)]^s6[zi( 2)]^s7[zi(12)]^s8[zi(13)]^s5[zi( 9)]; k[9] = s5[zi( 1)]^s6[zi( 0)]^s7[zi(14)]^s8[zi(15)]^s6[zi(12)]; k[10]= s5[zi( 7)]^s6[zi( 6)]^s7[zi( 8)]^s8[zi( 9)]^s7[zi( 2)]; k[11]= s5[zi( 5)]^s6[zi( 4)]^s7[zi(10)]^s8[zi(11)]^s8[zi( 6)]; x[0] = z[2] ^ s5[zi( 5)]^s6[zi( 7)]^s7[zi( 4)]^s8[zi( 6)]^s7[zi( 0)]; x[1] = z[0] ^ s5[xi( 0)]^s6[xi( 2)]^s7[xi( 1)]^s8[xi( 3)]^s8[zi( 2)]; x[2] = z[1] ^ s5[xi( 7)]^s6[xi( 6)]^s7[xi( 5)]^s8[xi( 4)]^s5[zi( 1)]; x[3] = z[3] ^ s5[xi(10)]^s6[xi( 9)]^s7[xi(11)]^s8[xi( 8)]^s6[zi( 3)]; k[12]= s5[xi( 8)]^s6[xi( 9)]^s7[xi( 7)]^s8[xi( 6)]^s5[xi( 3)]; k[13]= s5[xi(10)]^s6[xi(11)]^s7[xi( 5)]^s8[xi( 4)]^s6[xi( 7)]; k[14]= s5[xi(12)]^s6[xi(13)]^s7[xi( 3)]^s8[xi( 2)]^s7[xi( 8)]; k[15]= s5[xi(14)]^s6[xi(15)]^s7[xi( 1)]^s8[xi( 0)]^s8[xi(13)]; #undef xi #undef zi } static int do_cast_setkey( CAST5_context *c, const byte *key, unsigned keylen ) { static int initialized; static const char* selftest_failed; int i; u32 x[4]; u32 z[4]; u32 k[16]; if( !initialized ) { initialized = 1; selftest_failed = selftest(); if( selftest_failed ) fprintf(stderr,"CAST5 selftest failed (%s).\n", selftest_failed ); } if( selftest_failed ) return G10ERR_SELFTEST_FAILED; if( keylen != 16 ) return G10ERR_WRONG_KEYLEN; x[0] = key[0] << 24 | key[1] << 16 | key[2] << 8 | key[3]; x[1] = key[4] << 24 | key[5] << 16 | key[6] << 8 | key[7]; x[2] = key[8] << 24 | key[9] << 16 | key[10] << 8 | key[11]; x[3] = key[12] << 24 | key[13] << 16 | key[14] << 8 | key[15]; key_schedule( x, z, k ); for(i=0; i < 16; i++ ) c->Km[i] = k[i]; key_schedule( x, z, k ); for(i=0; i < 16; i++ ) c->Kr[i] = k[i] & 0x1f; memset(&x,0, sizeof x); memset(&z,0, sizeof z); memset(&k,0, sizeof k); #undef xi #undef zi return 0; } static int cast_setkey( void *c, const byte *key, unsigned keylen ) { int rc = do_cast_setkey (c, key, keylen); burn_stack (96+7*sizeof(void*)); return rc; } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. */ const char * cast5_get_info( int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**r_setkey)( void *c, const byte *key, unsigned keylen ), void (**r_encrypt)( void *c, byte *outbuf, const byte *inbuf ), void (**r_decrypt)( void *c, byte *outbuf, const byte *inbuf ) ) { *keylen = 128; *blocksize = CAST5_BLOCKSIZE; *contextsize = sizeof(CAST5_context); *r_setkey = cast_setkey; *r_encrypt = encrypt_block; *r_decrypt = decrypt_block; if( algo == CIPHER_ALGO_CAST5 ) return "CAST5"; return NULL; } gnupg-1.4.20/cipher/ChangeLog-20110000644000175000017500000012756612635262326013274 000000000000002011-12-02 Werner Koch NB: ChangeLog files are no longer manually maintained. Starting on December 1st, 2011 we put change information only in the GIT commit log, and generate a top-level ChangeLog file from logs at "make dist". See doc/HACKING for details. 2011-08-09 Werner Koch * rijndael.c (u32_a_t): New. (do_encrypt_aligned, do_decrypt): Use the new type to avoid problems with strict aliasing rules. * dynload.c (register_cipher_extension): Remove unused var. 2010-10-18 Werner Koch * rndw32.c (slow_gatherer_windowsNT): Add GNUPG_RNDW32_NOPERF envvar. 2010-09-28 Steven M. Schweda (wk) Changes to help the VMS port. See http://antinode.info/dec/sw/gnupg.html . * random.c [__VMS]: Include rmsdef.h and vms.h. (LOCK_SEED_FILE) [__VMS]: Set to 0. (getfnc_gather_random) [USE_RNDVMS]: Call rndvms_gather_random. (read_seed_file) [__VMS]: Allow reading by others. (update_random_seed_file) [__VMS]: Use VMS specific open call. * rand-internal.h (rndvms_gather_random): New. 2008-04-17 David Shaw * camellia-glue.c (selftest, camellia_get_info), cipher.c (setup_cipher_table): Add Camellia-192. 2008-03-22 Werner Koch * cipher.c (struct cipher_handle_s): Make sure IV is u32 aligned. Change all users of IV. (do_cfb_encrypt): Optimize and use bulk code for AES. (do_cfb_decrypt): Ditto. * rijndael.c (do_encrypt): Remove. (do_encrypt_aligned, do_encrypt): New. Taken from libgcrypt. (rijndael_cfb_enc, rijndael_cfb_dec): New. 2007-12-12 Werner Koch * pubkey.c (pubkey_encrypt, pubkey_decrypt): Allow type 20 keys. (pubkey_algo_to_string): Ditto. 2007-12-11 Werner Koch * pubkey.c (check_pubkey_algo2): Hack to allow decryption using an type 20 Elgamal key. 2007-11-29 David Shaw * camellia-glue.c (camellia_get_info), cipher.c (setup_cipher_table): Add 128-bit variant of Camellia. 2007-11-28 David Shaw * sha256.c (sha224_get_info): 4880 has an error in the SHA-224 OID and we inherited it. Fixing. 2007-10-23 Werner Koch Switched entire package to GPLv3+. 2007-07-09 Werner Koch * camellia.c, camellia.h: Fixed the FSF's postal address. 2007-06-13 David Shaw * Makefile.am, algorithms.h, cipher.c (setup_cipher_table): Add Camellia. * camellia-glue.c: New. These are glue functions to interface GnuPG to the stock NTT Camellia distribution. * camellia.h, camellia.c: New. Version 1.2.0 of the Camellia code (GPL) unchanged from http://info.isl.ntt.co.jp/crypt/eng/camellia/index.html 2006-12-11 Werner Koch * elgamal.c (test_keys): Use new mpi_nlimb_hint_from_nbits function. This also rounds up the value. (generate): Use new mpi_nlimb_hint_from_nbits function. * rsa.c (test_keys): Ditto. (generate): Ditto. (rsa_verify): Ditto. * primegen.c (generate_elg_prime): Ditto. (gen_prime): Ditto. * dsa.c (test_keys): Ditto. This also rounds up the value. * Makefile.am (AM_CPPFLAGS): Use instead of INCLUDES. define GNUPG_LIBDIR. 2006-11-03 Werner Koch * random.c [HAVE_GETTIMEOFDAY]: Included sys/time.h and not sys/times.h. Reported by Rafaël Carré. 2006-06-28 David Shaw * rsa.c (generate): Use e=65537 for new RSA keys. 2006-04-20 David Shaw * dsa.c (dsa2_generate): New function to generate a DSA key with a variable sized q. (generate): Tweak to allow keys larger than 1024 bits. Enforce that the q size doesn't end between byte boundaries. 2006-04-19 David Shaw * sha256.c (sha224_get_info, sha224_init): New init functions for the 224-bit variant of SHA-256. * algorithms.h, md.c (load_digest_module): Call them here. 2006-03-20 David Shaw * blowfish.c, md5.c, rmd160.c, sha1.c, sha256.c, sha512.c: Revert previous change. It's now all done in configure. 2006-03-19 David Shaw * blowfish.c, md5.c, rmd160.c, sha1.c, sha256.c, sha512.c: Use '#if' rather than '#ifdef' BIG_ENDIAN_HOST. Harmless as we explicitly define BIG_ENDIAN_HOST to 1 when we need it, but needed for OSX fat builds when we define BIG_ENDIAN_HOST to another macro. 2006-02-14 Werner Koch * random.c (lock_seed_file): Build even when not used. 2006-02-09 Werner Koch * random.c (lock_seed_file): New. (read_seed_file, update_random_seed_file): Use it. (random_disable_locking): New. 2005-12-06 David Shaw * idea-stub.c (load_module): Not legal to return a void * as a function pointer. * Makefile.am, rndegd.c, rndlinux.c, rndunix.c, rndw32.c: Some cleanup so we don't build files that are completely ifdeffed out. This causes a warning on Sun's cc. Do sha512.c as well for consistency. 2005-08-11 Werner Koch * rijndael.c (rijndael_cfb_encrypt): Experimental code to improve AES performance. Got about 25% on ia32. * cipher.c (do_cfb_encrypt): Ditto. 2005-06-07 David Shaw * random.c: Fix prototype of the fast random gatherer. Noted by Joe Vender. 2005-03-23 Werner Koch * rndw32.c (rndw32_gather_random_fast): While adding data use the size of the object and not the one of its address. Bug reported by Sascha Kiefer. 2005-03-07 Werner Koch * primegen.c (is_prime): Free A2. Noted by pmike2001@mail.ru. Fixes #423. 2004-11-30 David Shaw * md.c (string_to_digest_algo): Allow read/write SHA384 and SHA512. 2004-11-03 Timo Schulz * idea-stub.c (dlopen, dlsym): Use w32_strerror instead of just showing the error number. 2004-10-14 Werner Koch * rndunix.c (start_gatherer) [ENABLE_SELINUX_HACKS]: Don't allow logging. 2004-10-12 David Shaw * algorithms.h, cast5.c, cipher.c, idea-stub.c, twofish.c, blowfish.c, des.c, rijndael.c: Consistently use const for input buffers. 2004-09-23 Werner Koch * rsa.c (rsa_generate): Return the dummy list of factors only if the caller asked for it. 2004-05-20 David Shaw * dsa.c (verify): s/exp/exponent/ to fix a compiler warning. From Werner on stable branch. 2004-01-16 David Shaw * cipher.c (setup_cipher_table): May as well call Rijndael AES at this point. * pubkey.c (setup_pubkey_table), elgamal.c (sign, verify, test_keys, elg_sign, elg_verify, elg_get_info): Remove the last bits of Elgamal type 20 support. 2003-12-29 David Shaw * idea-stub.c (load_module, idea_get_info): Return the proper type for idea_get_info from inside load_module. From Stefan Bellon. * rijndael.c, rndunix.c, twofish.c: Remove dead IS_MODULE code. * g10c.c: Dead code. Remove. * Makefile.am: Don't compile g10c.c. 2003-12-28 Stefan Bellon * rndriscos.c (rndriscos_gather_random) [__riscos__]: Declare variable outside loop. * blowfish.c, twofish.c [__riscos__]: Removal of unnecessary #ifdef __riscos__ sections. 2003-12-17 David Shaw * dsa.h, dsa.c (dsa_verify), elgamal.h, elgamal.c (elg_verify), rsa.h, rsa.c (rsa_verify), pubkey.c (dummy_verify, pubkey_verify): Remove old unused code. 2003-12-03 David Shaw * pubkey.c (setup_pubkey_table): Don't allow signatures to and from encrypt-only Elgamal keys. (pubkey_get_npkey, pubkey_get_nskey, pubkey_get_nsig, pubkey_get_nenc, pubkey_nbits): Wrap the RSA cheats in !USE_RSA. Add cheats for sign+encrypt Elgamal. 2003-11-30 David Shaw * pubkey.c (setup_pubkey_table): Only include RSA if USE_RSA is defined. (pubkey_get_npkey): Return 2 for RSA even if it isn't available so we can at least handle RSA keys. 2003-11-27 Werner Koch * pubkey.c (pubkey_sign): Return an error if an ElGamal key is used. * elgamal.c (gen_k): New arg SMALL_K. (sign): Use it here with SMALL_K set to false (do_encrypt): and here with SMALL_K set to true. 2003-10-10 Werner Koch * primegen.c (gen_prime): Bail out if we try to generate a prime with less than 16 bits. Include i18n.h. 2003-10-06 Werner Koch * primegen.c (gen_prime): Bail out if NBITS is zero. This is Debian bug #213989 reported by Max . 2003-09-04 David Shaw * md.c (string_to_digest_algo): Enable read-write SHA-256 support. * algorithms.h, Makefile.am, md.c (load_digest_module, string_to_digest_algo), tiger.c: Drop TIGER/192 support. 2003-08-28 David Shaw * idea-stub.c, random.c; s/__MINGW32__/_WIN32/ to help building on native Windows compilers. Requested by Brian Gladman. From Werner on stable branch. 2003-08-21 David Shaw * random.c (getfnc_gather_random): Don't check NAME_OF_DEV_RANDOM twice. Use NAME_OF_DEV_URANDOM. 2003-05-24 David Shaw * bithelp.h, des.c, random.c, rndlinux.c, sha1.c, blowfish.c, elgamal.c, rijndael.c, rndunix.c, sha256.c, cast5.c, idea-stub.c, rmd160.c, rndw32.c, sha512.c, md5.c, rmd160test.c, rsa.c, tiger.c: Edit all preprocessor instructions to remove whitespace before the '#'. This is not required by C89, but there are some compilers out there that don't like it. 2003-05-15 David Shaw * cipher.c (setup_cipher_table): #ifdef IDEA. * random.c (fast_random_poll): Only use times() if we HAVE_TIMES. * sha512.c, tiger.c: Use the U64_C() macro to specify 64-bit constants. U64_C is defined in include/types.h and uses the correct suffix depending on the underlying type of u64. * idea-stub.c (load_module): Catch an error if the idea module file is unloadable for some reason (unreadable, bad permissions, etc.) * md.c (string_to_digest_algo): Give a warning about TIGER192 not being part of OpenPGP. 2003-04-15 Werner Koch * md.c (md_start_debug): Need to open the file in binary mode. 2003-02-21 David Shaw * cipher.c (setup_cipher_table): #ifdef all optional ciphers. * md.c (load_digest_module): #ifdef all optional digests. 2003-02-11 David Shaw * Makefile.am, md.c (load_digest_module): Only build in SHA384/512 and TIGER if specifically enabled by the 64-bit type check in configure. 2003-02-04 David Shaw * sha256.c, sha512.c: New. * Makefile.am, algorithms.h, md.c (load_digest_module, string_to_digest_algo): Add read-only support for the new SHAs. 2002-11-06 David Shaw * rndw32.c [__CYGWIN32__]: Don't include winioctl.h - it is not required anymore. (From Werner) * random.c (read_seed_file,update_random_seed_file): Use binary mode for __CYGWIN__. (From Werner) * blowfish.c (burn_stack), cast5.c (burn_stack), des.c (burn_stack), md5.c (burn_stack), random.c (burn_stack, read_pool, fast_random_poll), rijndael.c (burn_stack), rmd160.c (burn_stack), rndegd.c (rndegd_gather_random), rndlinux.c (rndlinux_gather_random), sha1.c (burn_stack), tiger.c (burn_stack), twofish.c (burn_stack): Replace various calls to memset() with the more secure wipememory(). 2002-11-02 David Shaw * cipher.c (string_to_cipher_algo), md.c (string_to_digest_algo): Allow the Sxxx and Hxxx format for cipher and digest names. 2002-10-31 Stefan Bellon * rndriscos.c (rndriscos_gather_random): Use riscos_load_module() to load CryptRandom module. 2002-10-12 Werner Koch * rndunix.c (my_popen): Make sure that stdin and stderr are connected to a file. This is to avoid NetBSD to complain about set{u,g}id programs invoked with fd 0, 2 closed. Reported by Cristian Biere. (start_gatherer): Likewise. Reordered code. 2002-10-02 David Shaw * tiger.c (tiger_get_info): Select the OID to use for TIGER at compile time. 2002-09-27 David Shaw * Makefile.am, md.c (load_digest_module): TIGER is now always enabled. 2002-09-26 Werner Koch * tiger.c (tiger_get_info): Use a regular OID. Note that this breaks all TIGER generated signatures; if we want to do something about it we have to do it in ../g10/sig-check.c . 2002-09-17 Werner Koch * rndw32.c (SIZEOF_DISK_PERFORMANCE_STRUCT): Increased to 256. 2002-09-12 Stefan Bellon * rand-internal.h (rndriscos_gather_random): Added prototype. 2002-08-30 Werner Koch * random.c: Automagically detect the entropy gatherer when this feature is configured. * rndegd.c (rndegd_connect_socket): New. Factored out from .. (rndegd_gather_random): here and call it. (do_read): Update the counter variables correctly. This was not a problem due to the way EGD works. Bug found by Christian Biere. 2002-08-20 Werner Koch * primegen.c (generate_elg_prime): Return all factors for mode 1. Bug reported by Bob Mathews. 2002-08-12 Werner Koch * cipher.c: Include the DUMMY cipher only when the new ALLOW_DUMMY is defined. It should only be defined for hard core debugging. 2002-08-08 David Shaw * Makefile.am, md.c (load_digest_module): Allow switching TIGER on and off via configure. 2002-08-07 David Shaw * md.c (md_algo_present): New function to check if a given algo is in use for a given MD_HANDLE. 2002-08-04 Werner Koch * blowfish.h, cast5.h, des.h: Removed after moving all prototypes to * algorithms.h: here. Changed all sources to use this one. 2002-08-03 Stefan Bellon * idea-stub.c (idea_get_info): RISC OS' Norcroft C needs a cast. * random.c (getfnc_gather_random): Added RISC OS support. * rndriscos.c: Removed dynload code and tidied up a bit. 2002-08-03 Werner Koch * rndegd.c (do_read): Handle case when read returns 0 to avoid gpg hanging when EGD died. By Christian Biere. 2002-08-02 Werner Koch The big extension removal. * Makefile.am: Removed all extension stuff. * dynload.c: Removed everything except for register_cipher_extension. (dynload_enum_module_names): New. * dynload.h: Removed. * random.c (getfnc_gather_random,getfnc_fast_random_poll): New. Replaced all dynload functions with these ones. * rndunix.c (rndunix_gather_random): Renamed from gather_random. Made global. Removed all dynload stuff. * rndlinux.c (rndlinux_gather_random): Likewise. * rndegd.c (rndegd_gather_random): Likewise. * rndw32.c (rndw32_gather_random) (rndw32_gather_random_fast): Likewise. Also removed the unsued entropy dll code. * md.c (new_list_item): Changed return value to indicate whether an algorithms was loaded. (load_digest_module): Simplified by removing all the dynload code. * algorithms.h: New. * md5.c (md5_get_info): Made global. Removed all dynload stuff. * rmd160.c (rmd160_get_info): Likewise. * sha1.c (sha1_get_info): Likewise. * tiger.c (tiger_get_info): Likewise. Return NULL if we can't use this module. * idea-stub.c: New. * blowfish.h (idea_get_info): Add prototype. * cipher.c (setup_cipher_table): Try to load IDEA. (load_cipher_modules): Removed all dynload code. * pubkey.c (load_pubkey_modules): Removed the dynloading code. 2002-07-25 David Shaw * random.c: "warning" -> "WARNING" 2002-07-02 Werner Koch * rndw32.c (slow_gatherer_windowsNT): Use a simple array for the disk performance structure and increase it to the size required by W2000. 2002-06-29 Werner Koch * rndlinux.c: Removed HAVE_LINUX_RANDOM_H conditional because it was never used and the configure test did set the wrong macro anyway. 2002-05-07 Stefan Bellon * md.c (md_start_debug): Use EXTSEP_S instead of ".". 2002-04-24 Werner Koch * tiger.c (tiger_final): Removed superfluous token pasting operators. * md5.c (md5_final): Ditto. 2002-04-22 Stefan Bellon * rndriscos.c (func_table): Made func a function pointer. (init_device): Improved loading of CryptRandom module. 2002-04-18 Werner Koch * rndlinux.c, rndegd.c, rndunix.c (func_table): Made func a function pointer. Note that we still need to change the module interface to cope with data vs function pointer problems. Hmmm, even dlsym has a problem with this. 2002-04-10 David Shaw * cipher.c (setup_cipher_table, cipher_open, cipher_encrypt, cipher_decrypt, dummy_setkey, dummy_encrypt_block, dummy_decrypt_block): the dummy cipher should only be built on development versions. 2002-04-06 Werner Koch * rijndael.c (rijndael_get_info): We do only support a 128 bit blocksize so it makes sense to change the algorithm strings to AES. * cipher.c (string_to_cipher_algo): Map "RIJNDAEL" to "AES". 2002-02-14 Werner Koch * random.c (mix_pool): Removed the failsafe stuff again. It makes the code more complicate and may give the path to more bugs. 2002-02-10 Werner Koch * random.c (mix_pool): Carry an extra failsafe_digest buffer around to make the function more robust. 2002-02-08 Werner Koch * random.c (add_randomness): Xor new data into the pool and not just copy it. This avoids any choosen input attacks which are not serious in our setting because an outsider won't be able to mix data in and even then we keep going with a PRNG. Thanks to Stefan Keller for pointing this out. 2002-01-02 Stefan Bellon * rndriscos.c [__riscos__]: Updated include file name. 2001-12-21 Werner Koch * Makefile.am (DISCLEANFILES): Add construct.c 2001-12-19 Werner Koch * rndw32.c [CYGWIN32]: Include winioctl.h. By Disastry. 2001-11-08 Werner Koch * primegen.c (gen_prime): Set 2 high order bits for secret primes. * rsa.c (generate): Loop until we find the exact modulus size. Changed the exponent to 41. 2001-10-22 Werner Koch * Makefile.am: Need to use $(EXEEXT) where approriate. 2001-09-09 Werner Koch * rsa.c (rsa_get_info): s/usage/r_usage/ to avoid shadow warnings. 2001-08-24 Werner Koch * md.c (md_write): Made buf arg const. 2001-08-22 Werner Koch * random.c (fast_random_poll): Don't use gethrtime if it is broken. 2001-08-20 Werner Koch Applied patches from Stefan Bellon to support RISC OS. Nearly all of these patches are identified by the __riscos__ macro. * blowfish.c, twofish.c: Added pragmas for use with a Norcraft compiler. * dynload.c, md5.c, rmd160.c, sha1.c: Minor patches for RISC OS. * rndriscos.c: New. * rnd-internal.h: Added prototype. * random.c (fast_random_poll): Use '#if defined' instead of just 'defined'; needed for RISC OS. * primegen.c (gen_prime): count? are now ints for consistence with is_prime(). 2001-08-08 Werner Koch * rndw32.c (gather_random): Use toolhelp in addition to the NT gatherer for Windows2000. Suggested by Sami Tolvanen. * random.c (read_pool): Fixed length check, this used to be one byte to strict. Made an assert out of it because the caller has already made sure that only poolsize bytes are requested. Reported by Marcus Brinkmann. 2001-07-18 Werner Koch * rndlinux.c (gather_random): casted a size_t arg to int so that the format string is correct. Casting is okay here and avoids translation changes. 2001-06-12 Werner Koch * cipher.c (string_to_cipher_algo): Use ascii_strcasecmp(). * md.c (string_to_digest_algo): Ditto. * pubkey.c (string_to_pubkey_algo): Ditto. * rndw32.c (slow_gatherer_windowsNT): Ditto. Not really needed here but anyway. 2001-04-29 Werner Koch * random.c (fast_random_poll): Do not check the return code of getrusage. 2001-04-17 Werner Koch * rndunix.c: Add a signal.h header to avoid warnings on Solaris 7 and 8. 2001-04-16 Werner Koch * dynload.c [__MINGW32__]: Applied patch from Timo Schulz to make it work under W32. This patches is based on the one from Disastry@saiknes.lv 2001-04-06 Werner Koch * rijndael.c, des.c, blowfish.c, twofish.c, cast5.c (burn_stack): New. Add wrappers for most functions to be able to call burn_stack after the function invocation. This methods seems to be the most portable way to zeroise the stack used. It does only work on stack frame based machines but it is highly portable and has no side effects. Just setting the automatic variables at the end of a function to zero does not work well because the compiler will optimize them away - marking them as volatile would be bad for performance. * md5.c, sha1.c, rmd160.c, tiger.c (burn_stack): Likewise. * random.c (burn_stack): New. (mix_pool): Use it here to burn the stack of the mixblock function. 2001-04-02 Werner Koch * primegen.c (generate_elg_prime): I was not initialized for mode != 1. Freed q at 3 places. Thanks to Tommi Komulainen. 2001-03-28 Werner Koch * md5.c (md5_final): Fixed calculation of hashed length. Thanks to disastry@saiknes.lv for pointing out that it was horrible wrong for more than 512MB of input. * sha1.c (sha1_final): Ditto. * rmd160.c (rmd160_final): Ditto. * tiger.c (tiger_final): Ditto. 2001-03-19 Werner Koch * blowfish.c (encrypt,do_encrypt): Changed name to do_encrypt to avoid name clahses with an encrypt function in stdlib.h of Dynix/PIX. Thanks to Gene Carter. * elgamal.c (encrypt,do_encrypt): Ditto. 2001-03-12 Werner Koch * twofish.c (gnupgext_enum_func): Add some static when comnpiled as a module. * tiger.c (tiger_get_info): Return "TIGER192" and not just "TIGER". By Edwin Woudt. 2001-03-08 Werner Koch * random.c: Always include time.h - standard requirement. Thanks to James Troup. 2001-01-18 Werner Koch * rndw32.c: Fixed typo and wrong ifdef for VER_PLATFORM* macro 2001-01-12 Werner Koch * cipher.c (cipher_encrypt,cipher_encrypt): Use blocksize and not 8 for CBC mode (However: we don't use CBS in OpenPGP). 2000-11-22 Werner Koch * rndegd.c (gather_random): Fixed default socket to be '=entropy'. Thanks to Tomasz Kozlowski. 2000-10-12 Werner Koch * rijndael.c: New. * cipher.c: Add Rijndael support. Wed Oct 4 15:50:18 CEST 2000 Werner Koch * sha1.c (transform): Use rol() macro. Actually this is not needed for a newer gcc but there are still aoter compilers. Thu Sep 14 14:20:38 CEST 2000 Werner Koch * random.c (fast_random_poll): Check ENOSYS for getrusage. * rndunix.c: Add 2 sources for QNX. By Sam Roberts. Wed Sep 13 18:12:34 CEST 2000 Werner Koch * rsa.c (secret): Speed up by using the CRT. For a 2k keys this is about 3 times faster. (stronger_key_check): New but unused code to check the secret key. Wed Sep 6 17:55:47 CEST 2000 Werner Koch * rsa.c: Changed the comment about the patent. * Makefile.am: Included rsa.[ch]. * pubkey.c: Enabled RSA support. (pubkey_get_npkey): Removed RSA workaround. Fri Aug 25 16:05:38 CEST 2000 Werner Koch * rndlinux.c (open_device): Loose random device checking. By Nils Ellmenreich. * rndegd.c (gather_random): Name of socket is nom configurable. Wed Jun 28 11:54:44 CEST 2000 Werner Koch * rsa.c, rsa.h: New based on the old module version (only in CVS for now). * pubkey.c (setup_pubkey_table): Added commented support for RSA. Fri Jun 9 10:09:52 CEST 2000 Werner Koch * rndunix.c (waitpid): New. For UTS 2.1. All by Dave Dykstra. (my_popen): Do the FD_CLOEXEC only if it is available (start_gatherer): Cope with missing _SC_OPEN_MAX Sun May 28 13:55:17 CEST 2000 Werner Koch * random.c (read_seed_file): Binary open for DOSish system (update_random_seed_file): Ditto. * rndw32.c: Add some debuging code enabled by an environment variable. Tue May 23 09:19:00 CEST 2000 Werner Koch * rndw32.c: Started with alternative code to replace entropy.dll Thu May 18 11:38:54 CEST 2000 Werner Koch * primegen.c (register_primegen_progress): New. * dsa.c (register_pk_dsa_progress): New. * elgamal.c (register_pk_elg_progress): New. Fri Apr 14 19:37:08 CEST 2000 Werner Koch * twofish.c (twofish_get_info): Fixed warning about cast. Tue Mar 28 14:26:58 CEST 2000 Werner Koch * random.c [MINGW32]: Include process.h for getpid. Thu Mar 2 15:37:46 CET 2000 Werner Koch * random.c (fast_random_poll): Add clock_gettime() as fallback for system which support this POSIX.4 fucntion. By Sam Roberts. * rndunix.c: Add some more headers for QNX. By Sam Roberts. * random.c (read_seed_file): Removed the S_ISLNK test becuase it is already covered by !S_ISREG and is not defined in Unixware. Reported by Dave Dykstra. * sha1.c (sha1_get_info): Removed those stupid double lines. Dave is really a good lint. Wed Feb 23 10:07:57 CET 2000 Werner Koch * twofish.c (twofish_get_info): Add some const to the casts. By Martin Kahlert. Mon Feb 14 14:30:20 CET 2000 Werner Koch (update_random_seed_file): Silently ignore update request when pool is not filled. Fri Feb 11 17:44:40 CET 2000 Werner Koch * random.c (read_seed_file): New. (set_random_seed_file): New. (read_pool): Try to read the seeding file. (update_random_seed_file): New. (read_pool): Do an initial extra seeding when level 2 quality random is requested the first time. This requestes at least POOLSIZE/2 bytes of entropy. Compined with the seeding file this should make normal random bytes cheaper and increase the quality of the random bytes used for key generation. * rndegd.c (gather_random): Shortcut level 0. * rndunix.c (gather_random): Ditto. * rndw32.c (gather_random): Ditto. Fri Jan 14 18:32:01 CET 2000 Werner Koch * rmd160.c (rmd160_get_info): Moved casting to the left side due to a problem with UTS4.3. Suggested by Dave Dykstra. * sha1.c (sha1_get_info): Ditto. * tiger.c (tiger_get_info): Ditto. * md5.c (md5_get_info): Ditto * des.c (des_get_info): Ditto. * blowfish.c (blowfish_get_info): Ditto. * cast5.c (cast5_get_info): Ditto. * twofish.c (twofish_get_info): Ditto. Thu Jan 13 19:31:58 CET 2000 Werner Koch * elgamal.c (wiener_map): New. (gen_k): Use a much smaller k. (generate): Calculate the qbits using the wiener map and choose an x at a size comparable to the one choosen in gen_k * random.c (read_pool): Print a more friendly error message in cases when too much random is requested in one call. * Makefile.am (tiger): Replaced -O1 by -O. Suggested by Alec Habig. Sat Dec 4 12:30:28 CET 1999 Werner Koch * primegen.c (generate_elg_prime): All primes are now generated with the lowest random quality level. Becuase they are public anyway we don't need stronger random and by this we do not drain the systems entropy so much. Thu Oct 28 16:08:20 CEST 1999 Werner Koch * random.c (fast_random_poll): Check whether RUSAGE_SELF is defined; this is not the case for some ESIX and Unixware, although they have getrusage(). * elgamal.c (sign): Hugh found strange code here. Replaced by BUG(). Mon Oct 11 09:24:12 CEST 1999 Werner Koch * rndw32.c (gather_random): Handle PCP_SEEDER_TOO_SMALL. Sat Oct 9 20:34:41 CEST 1999 Werner Koch * Makefile.am: Tweaked module build and removed libtool Fri Oct 8 20:32:01 CEST 1999 Werner Koch * rndw32.c (load_and_init_winseed): Use the Registry to locate the DLL Mon Oct 4 21:23:04 CEST 1999 Werner Koch * md.c (md_reset): Clear finalized; thanks to Ulf Moeller for fixing this bug. Sat Sep 18 12:51:51 CEST 1999 Werner Koch * Makefile.am: Never compile mingw32 as module Wed Sep 15 14:39:59 CEST 1999 Michael Roth * des.c: Various speed improvements: One bit pre rotation trick after initial permutation (Richard Outerbridge). Finished test of SSLeay Tripple-DES patterns. Wed Sep 15 16:22:17 CEST 1999 Werner Koch * rndw32.c: New. Mon Sep 13 10:51:29 CEST 1999 Werner Koch * bithelp.h: New. * rmd160.h, sha1.h, md5.h: Use the rol macro from bithelp.h Tue Sep 7 16:23:36 CEST 1999 Werner Koch * Makefile.am: Fixed seds for latest egcc. By Ollivier Robert. Mon Sep 6 19:59:08 CEST 1999 Werner Koch * des.c (selftest): Add some testpattern Mon Aug 30 20:38:33 CEST 1999 Werner Koch * cipher.c (do_cbc_encrypt): Fixed serious bug occuring when not using in place encryption. Pointed out by Frank Stajano. Mon Jul 26 09:34:46 CEST 1999 Werner Koch * md5.c (md5_final): Fix for a SCO cpp bug. Thu Jul 15 10:15:35 CEST 1999 Werner Koch * elgamal.c (elg_check_secret_key,elg_encrypt elg_decrypt,elg_sign,elg_verify): Sanity check on the args. * dsa.c (dsa_check_secret_key,dsa_sign,dsa_verify): Ditto. * pubkey.c (disable_pubkey_algo): New. (check_pubkey_algo2): Look at disabled algo table. * cipher.c (disable_cipher_algo): New. (check_cipher_algo): Look at disabled algo table. 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. Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is free software; as a special exception the author gives unlimited permission to copy and/or distribute it, with or without modifications, as long as this notice is preserved. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, to the extent permitted by law; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. gnupg-1.4.20/cipher/random.h0000644000175000017500000000262712635262326012560 00000000000000/* random.h - random functions * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef G10_RANDOM_H #define G10_RANDOM_H #include "types.h" /*-- random.c --*/ void random_dump_stats(void); void secure_randoxmalloc(void); void set_random_seed_file(const char *); void update_random_seed_file(void); int quick_random_gen( int onoff ); int random_is_faked(void); void random_disable_locking (void); void randomize_buffer( byte *buffer, size_t length, int level ); void randomize_mpi (MPI mpi, size_t nbits, int level); byte *get_random_bits( size_t nbits, int level, int secure ); void fast_random_poll( void ); /*-- rndw32.c --*/ #ifdef USE_STATIC_RNDW32 void rndw32_set_dll_name( const char *name ); #endif #endif /*G10_RANDOM_H*/ gnupg-1.4.20/cipher/cipher.c0000644000175000017500000005264012635262326012545 00000000000000/* cipher.c - cipher dispatcher * Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, * 2008 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 3 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, see . */ #include #include #include #include #include #include #include "util.h" #include "errors.h" #include "cipher.h" #include "algorithms.h" /* We have support for a DUMMY encryption cipher which comes handy to debug MDCs and similar things. Because this is a bit dangerous it is not enabled. */ /*#define ALLOW_DUMMY 1 */ #define MAX_BLOCKSIZE 16 #define TABLE_SIZE 14 struct cipher_table_s { const char *name; int algo; size_t blocksize; size_t keylen; size_t contextsize; /* allocate this amount of context */ int (*setkey)( void *c, const byte *key, unsigned keylen ); void (*encrypt)( void *c, byte *outbuf, const byte *inbuf ); void (*decrypt)( void *c, byte *outbuf, const byte *inbuf ); }; static struct cipher_table_s cipher_table[TABLE_SIZE]; static int disabled_algos[TABLE_SIZE]; struct cipher_handle_s { int algo; int mode; size_t blocksize; /* The initialization vector. To help code optimization we make sure that it is aligned on an unsigned long and u32 boundary. */ union { unsigned long dummy_ul_iv; u32 dummy_u32_iv; unsigned char iv[MAX_BLOCKSIZE]; } u_iv; byte lastiv[MAX_BLOCKSIZE]; int unused; /* in IV */ int (*setkey)( void *c, const byte *key, unsigned keylen ); void (*encrypt)( void *c, byte *outbuf, const byte *inbuf ); void (*decrypt)( void *c, byte *outbuf, const byte *inbuf ); PROPERLY_ALIGNED_TYPE context; }; #ifdef ALLOW_DUMMY static int dummy_setkey( void *c, byte *key, unsigned keylen ) { return 0; } static void dummy_encrypt_block( void *c, byte *outbuf, byte *inbuf ) { BUG(); } static void dummy_decrypt_block( void *c, byte *outbuf, byte *inbuf ) { BUG(); } #ifdef __GNUC__ # warning DUMMY cipher module is enabled #endif #endif /**************** * Put the static entries into the table. */ static void setup_cipher_table(void) { int i=0; #ifdef USE_AES cipher_table[i].algo = CIPHER_ALGO_AES; cipher_table[i].name = rijndael_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; cipher_table[i].algo = CIPHER_ALGO_AES192; cipher_table[i].name = rijndael_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; cipher_table[i].algo = CIPHER_ALGO_AES256; cipher_table[i].name = rijndael_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; #endif #ifdef USE_TWOFISH cipher_table[i].algo = CIPHER_ALGO_TWOFISH; cipher_table[i].name = twofish_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; #endif #ifdef USE_BLOWFISH cipher_table[i].algo = CIPHER_ALGO_BLOWFISH; cipher_table[i].name = blowfish_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; #endif #ifdef USE_CAST5 cipher_table[i].algo = CIPHER_ALGO_CAST5; cipher_table[i].name = cast5_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; #endif cipher_table[i].algo = CIPHER_ALGO_3DES; cipher_table[i].name = des_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; #ifdef USE_CAMELLIA cipher_table[i].algo = CIPHER_ALGO_CAMELLIA128; cipher_table[i].name = camellia_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; cipher_table[i].algo = CIPHER_ALGO_CAMELLIA192; cipher_table[i].name = camellia_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; cipher_table[i].algo = CIPHER_ALGO_CAMELLIA256; cipher_table[i].name = camellia_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if( !cipher_table[i].name ) BUG(); i++; #endif #ifdef USE_IDEA cipher_table[i].algo = CIPHER_ALGO_IDEA; cipher_table[i].name = idea_get_info( cipher_table[i].algo, &cipher_table[i].keylen, &cipher_table[i].blocksize, &cipher_table[i].contextsize, &cipher_table[i].setkey, &cipher_table[i].encrypt, &cipher_table[i].decrypt ); if (cipher_table[i].name) i++; /* Note that the loadable IDEA module may not be available. */ #endif #ifdef ALLOW_DUMMY cipher_table[i].algo = CIPHER_ALGO_DUMMY; cipher_table[i].name = "DUMMY"; cipher_table[i].blocksize = 8; cipher_table[i].keylen = 128; cipher_table[i].contextsize = 0; cipher_table[i].setkey = dummy_setkey; cipher_table[i].encrypt = dummy_encrypt_block; cipher_table[i].decrypt = dummy_decrypt_block; i++; #endif for( ; i < TABLE_SIZE; i++ ) cipher_table[i].name = NULL; } /**************** * Try to load all modules and return true if new modules are available */ static int load_cipher_modules(void) { static int initialized = 0; if (!initialized ) { setup_cipher_table(); /* load static modules on the first call */ initialized = 1; return 1; } return 0; } /**************** * Map a string to the cipher algo */ int string_to_cipher_algo( const char *string ) { int i; const char *s; /* kludge to alias RIJNDAEL to AES */ if ( *string == 'R' || *string == 'r') { if (!ascii_strcasecmp (string, "RIJNDAEL")) string = "AES"; else if (!ascii_strcasecmp (string, "RIJNDAEL192")) string = "AES192"; else if (!ascii_strcasecmp (string, "RIJNDAEL256")) string = "AES256"; } do { for(i=0; (s=cipher_table[i].name); i++ ) { if( !ascii_strcasecmp( s, string ) ) return cipher_table[i].algo; } } while( load_cipher_modules() ); /* Didn't find it, so try the Sx format */ if(string[0]=='S' || string[0]=='s') { long val; char *endptr; string++; val=strtol(string,&endptr,10); if(*string!='\0' && *endptr=='\0' && check_cipher_algo(val)==0) return val; } return 0; } /**************** * Map a cipher algo to a string */ const char * cipher_algo_to_string( int algo ) { int i; do { for(i=0; cipher_table[i].name; i++ ) if( cipher_table[i].algo == algo ) return cipher_table[i].name; } while( load_cipher_modules() ); return NULL; } void disable_cipher_algo( int algo ) { int i; for(i=0; i < DIM(disabled_algos); i++ ) { if( !disabled_algos[i] || disabled_algos[i] == algo ) { disabled_algos[i] = algo; return; } } /* fixme: we should use a linked list */ log_fatal("can't disable cipher algo %d: table full\n", algo ); } /**************** * Return 0 if the cipher algo is available */ int check_cipher_algo( int algo ) { int i; do { for(i=0; cipher_table[i].name; i++ ) if( cipher_table[i].algo == algo ) { for(i=0; i < DIM(disabled_algos); i++ ) { if( disabled_algos[i] == algo ) return G10ERR_CIPHER_ALGO; } return 0; /* okay */ } } while( load_cipher_modules() ); return G10ERR_CIPHER_ALGO; } unsigned cipher_get_keylen( int algo ) { int i; unsigned len = 0; do { for(i=0; cipher_table[i].name; i++ ) { if( cipher_table[i].algo == algo ) { len = cipher_table[i].keylen; if( !len ) log_bug("cipher %d w/o key length\n", algo ); return len; } } } while( load_cipher_modules() ); log_bug("cipher %d not found\n", algo ); return 0; } unsigned cipher_get_blocksize( int algo ) { int i; unsigned len = 0; do { for(i=0; cipher_table[i].name; i++ ) { if( cipher_table[i].algo == algo ) { len = cipher_table[i].blocksize; if( !len ) log_bug("cipher %d w/o blocksize\n", algo ); return len; } } } while( load_cipher_modules() ); log_bug("cipher %d not found\n", algo ); return 0; } /**************** * Open a cipher handle for use with algorithm ALGO, in mode MODE * and put it into secure memory if SECURE is true. */ CIPHER_HANDLE cipher_open( int algo, int mode, int secure ) { CIPHER_HANDLE hd; int i; fast_random_poll(); do { for(i=0; cipher_table[i].name; i++ ) if( cipher_table[i].algo == algo ) break; } while( !cipher_table[i].name && load_cipher_modules() ); if( !cipher_table[i].name ) { log_fatal("cipher_open: algorithm %d not available\n", algo ); return NULL; } /* ? perform selftest here and mark this with a flag in cipher_table ? */ hd = secure ? xmalloc_secure_clear( sizeof *hd + cipher_table[i].contextsize - sizeof(PROPERLY_ALIGNED_TYPE) ) : xmalloc_clear( sizeof *hd + cipher_table[i].contextsize - sizeof(PROPERLY_ALIGNED_TYPE) ); hd->algo = algo; hd->blocksize = cipher_table[i].blocksize; hd->setkey = cipher_table[i].setkey; hd->encrypt = cipher_table[i].encrypt; hd->decrypt = cipher_table[i].decrypt; if( mode == CIPHER_MODE_AUTO_CFB ) { if( algo >= 100 ) hd->mode = CIPHER_MODE_CFB; else hd->mode = CIPHER_MODE_PHILS_CFB; } else hd->mode = mode; #ifdef ALLOW_DUMMY if( algo == CIPHER_ALGO_DUMMY ) hd->mode = CIPHER_MODE_DUMMY; #endif return hd; } void cipher_close( CIPHER_HANDLE c ) { xfree(c); } int cipher_setkey( CIPHER_HANDLE c, byte *key, unsigned keylen ) { return (*c->setkey)( &c->context.c, key, keylen ); } void cipher_setiv( CIPHER_HANDLE c, const byte *iv, unsigned ivlen ) { memset( c->u_iv.iv, 0, c->blocksize ); if( iv ) { if( ivlen != c->blocksize ) log_info("WARNING: cipher_setiv: ivlen=%u blklen=%u\n", ivlen, (unsigned)c->blocksize ); if( ivlen > c->blocksize ) ivlen = c->blocksize; memcpy( c->u_iv.iv, iv, ivlen ); } c->unused = 0; } static void do_ecb_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks ) { unsigned n; for(n=0; n < nblocks; n++ ) { (*c->encrypt)( &c->context.c, outbuf, inbuf ); inbuf += c->blocksize; outbuf += c->blocksize; } } static void do_ecb_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks ) { unsigned n; for(n=0; n < nblocks; n++ ) { (*c->decrypt)( &c->context.c, outbuf, inbuf ); inbuf += c->blocksize; outbuf += c->blocksize; } } static void do_cbc_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks ) { unsigned int n; byte *ivp; int i; size_t blocksize = c->blocksize; for(n=0; n < nblocks; n++ ) { /* fixme: the xor should works on words and not on * bytes. Maybe it is a good idea to enhance the cipher backend * API to allow for CBC handling in the backend */ for(ivp=c->u_iv.iv,i=0; i < blocksize; i++ ) outbuf[i] = inbuf[i] ^ *ivp++; (*c->encrypt)( &c->context.c, outbuf, outbuf ); memcpy(c->u_iv.iv, outbuf, blocksize ); inbuf += c->blocksize; outbuf += c->blocksize; } } static void do_cbc_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nblocks ) { unsigned int n; byte *ivp; int i; size_t blocksize = c->blocksize; for(n=0; n < nblocks; n++ ) { /* because outbuf and inbuf might be the same, we have * to save the original ciphertext block. We use lastiv * for this here because it is not used otherwise */ memcpy(c->lastiv, inbuf, blocksize ); (*c->decrypt)( &c->context.c, outbuf, inbuf ); for(ivp=c->u_iv.iv,i=0; i < blocksize; i++ ) outbuf[i] ^= *ivp++; memcpy(c->u_iv.iv, c->lastiv, blocksize ); inbuf += c->blocksize; outbuf += c->blocksize; } } static void do_cfb_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes ) { byte *ivp; size_t blocksize = c->blocksize; size_t blocksize_x_2 = blocksize + blocksize; if ( nbytes <= c->unused ) { /* Short enough to be encoded by the remaining XOR mask. XOR the input with the IV and store input into IV. */ for (ivp=c->u_iv.iv+c->blocksize - c->unused; nbytes; nbytes--, c->unused-- ) *outbuf++ = (*ivp++ ^= *inbuf++); return; } if ( c->unused ) { /* XOR the input with the IV and store input into IV. */ nbytes -= c->unused; for (ivp=c->u_iv.iv+blocksize - c->unused; c->unused; c->unused-- ) *outbuf++ = (*ivp++ ^= *inbuf++); } /* Now we can process complete blocks. We use a loop as long as we have at least 2 blocks and use conditions for the rest. This also allows to use a bulk encryption function if available. */ #ifdef USE_AES if (nbytes >= blocksize_x_2 && (c->algo == CIPHER_ALGO_AES || c->algo == CIPHER_ALGO_AES256 || c->algo == CIPHER_ALGO_AES192)) { unsigned int nblocks = nbytes / blocksize; rijndael_cfb_enc (&c->context.c, c->u_iv.iv, outbuf, inbuf, nblocks); outbuf += nblocks * blocksize; inbuf += nblocks * blocksize; nbytes -= nblocks * blocksize; } else #endif /*USE_AES*/ { while ( nbytes >= blocksize_x_2 ) { int i; /* Encrypt the IV. */ c->encrypt ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); /* XOR the input with the IV and store input into IV. */ for(ivp=c->u_iv.iv,i=0; i < blocksize; i++ ) *outbuf++ = (*ivp++ ^= *inbuf++); nbytes -= blocksize; } } if ( nbytes >= blocksize ) { int i; /* Save the current IV and then encrypt the IV. */ memcpy( c->lastiv, c->u_iv.iv, blocksize ); c->encrypt ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); /* XOR the input with the IV and store input into IV */ for(ivp=c->u_iv.iv,i=0; i < blocksize; i++ ) *outbuf++ = (*ivp++ ^= *inbuf++); nbytes -= blocksize; } if ( nbytes ) { /* Save the current IV and then encrypt the IV. */ memcpy (c->lastiv, c->u_iv.iv, blocksize ); c->encrypt ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); c->unused = blocksize; /* Apply the XOR. */ c->unused -= nbytes; for(ivp=c->u_iv.iv; nbytes; nbytes-- ) *outbuf++ = (*ivp++ ^= *inbuf++); } } static void do_cfb_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes ) { unsigned char *ivp; unsigned long temp; int i; size_t blocksize = c->blocksize; size_t blocksize_x_2 = blocksize + blocksize; if (nbytes <= c->unused) { /* Short enough to be encoded by the remaining XOR mask. */ /* XOR the input with the IV and store input into IV. */ for (ivp=c->u_iv.iv+blocksize - c->unused; nbytes; nbytes--, c->unused--) { temp = *inbuf++; *outbuf++ = *ivp ^ temp; *ivp++ = temp; } return; } if (c->unused) { /* XOR the input with the IV and store input into IV. */ nbytes -= c->unused; for (ivp=c->u_iv.iv+blocksize - c->unused; c->unused; c->unused-- ) { temp = *inbuf++; *outbuf++ = *ivp ^ temp; *ivp++ = temp; } } /* Now we can process complete blocks. We use a loop as long as we have at least 2 blocks and use conditions for the rest. This also allows to use a bulk encryption function if available. */ #ifdef USE_AES if (nbytes >= blocksize_x_2 && (c->algo == CIPHER_ALGO_AES || c->algo == CIPHER_ALGO_AES256 || c->algo == CIPHER_ALGO_AES192)) { unsigned int nblocks = nbytes / blocksize; rijndael_cfb_dec (&c->context.c, c->u_iv.iv, outbuf, inbuf, nblocks); outbuf += nblocks * blocksize; inbuf += nblocks * blocksize; nbytes -= nblocks * blocksize; } else #endif /*USE_AES*/ { while (nbytes >= blocksize_x_2 ) { /* Encrypt the IV. */ c->encrypt ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); /* XOR the input with the IV and store input into IV. */ for (ivp=c->u_iv.iv,i=0; i < blocksize; i++ ) { temp = *inbuf++; *outbuf++ = *ivp ^ temp; *ivp++ = temp; } nbytes -= blocksize; } } if (nbytes >= blocksize ) { /* Save the current IV and then encrypt the IV. */ memcpy ( c->lastiv, c->u_iv.iv, blocksize); c->encrypt ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); /* XOR the input with the IV and store input into IV */ for (ivp=c->u_iv.iv,i=0; i < blocksize; i++ ) { temp = *inbuf++; *outbuf++ = *ivp ^ temp; *ivp++ = temp; } nbytes -= blocksize; } if (nbytes) { /* Save the current IV and then encrypt the IV. */ memcpy ( c->lastiv, c->u_iv.iv, blocksize ); c->encrypt ( &c->context.c, c->u_iv.iv, c->u_iv.iv ); c->unused = blocksize; /* Apply the XOR. */ c->unused -= nbytes; for (ivp=c->u_iv.iv; nbytes; nbytes-- ) { temp = *inbuf++; *outbuf++ = *ivp ^ temp; *ivp++ = temp; } } } /**************** * Encrypt INBUF to OUTBUF with the mode selected at open. * inbuf and outbuf may overlap or be the same. * Depending on the mode some some contraints apply to NBYTES. */ void cipher_encrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes ) { switch( c->mode ) { case CIPHER_MODE_ECB: assert(!(nbytes%c->blocksize)); do_ecb_encrypt(c, outbuf, inbuf, nbytes/c->blocksize ); break; case CIPHER_MODE_CBC: assert(!(nbytes%c->blocksize)); do_cbc_encrypt(c, outbuf, inbuf, nbytes/c->blocksize ); break; case CIPHER_MODE_CFB: case CIPHER_MODE_PHILS_CFB: do_cfb_encrypt(c, outbuf, inbuf, nbytes ); break; #ifdef ALLOW_DUMMY case CIPHER_MODE_DUMMY: if( inbuf != outbuf ) memmove( outbuf, inbuf, nbytes ); break; #endif default: log_fatal("cipher_encrypt: invalid mode %d\n", c->mode ); } } /**************** * Decrypt INBUF to OUTBUF with the mode selected at open. * inbuf and outbuf may overlap or be the same. * Depending on the mode some some contraints apply to NBYTES. */ void cipher_decrypt( CIPHER_HANDLE c, byte *outbuf, byte *inbuf, unsigned nbytes ) { switch( c->mode ) { case CIPHER_MODE_ECB: assert(!(nbytes%c->blocksize)); do_ecb_decrypt(c, outbuf, inbuf, nbytes/c->blocksize ); break; case CIPHER_MODE_CBC: assert(!(nbytes%c->blocksize)); do_cbc_decrypt(c, outbuf, inbuf, nbytes/c->blocksize ); break; case CIPHER_MODE_CFB: case CIPHER_MODE_PHILS_CFB: do_cfb_decrypt(c, outbuf, inbuf, nbytes ); break; #ifdef ALLOW_DUMMY case CIPHER_MODE_DUMMY: if( inbuf != outbuf ) memmove( outbuf, inbuf, nbytes ); break; #endif default: log_fatal("cipher_decrypt: invalid mode %d\n", c->mode ); } } /**************** * Used for PGP's somewhat strange CFB mode. Only works if * the handle is in PHILS_CFB mode */ void cipher_sync( CIPHER_HANDLE c ) { if( c->mode == CIPHER_MODE_PHILS_CFB && c->unused ) { memmove(c->u_iv.iv + c->unused, c->u_iv.iv, c->blocksize - c->unused ); memcpy(c->u_iv.iv, c->lastiv + c->blocksize - c->unused, c->unused); c->unused = 0; } } gnupg-1.4.20/cipher/elgamal.c0000644000175000017500000003347112635262326012676 00000000000000/* elgamal.c - elgamal Public Key encryption * Copyright (C) 1998, 2000, 2001, 2003, * 2004 Free Software Foundation, Inc. * * For a description of the algorithm, see: * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. * ISBN 0-471-11709-9. Pages 476 ff. * * 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 3 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, see . */ #include #include #include #include #include "util.h" #include "mpi.h" #include "cipher.h" #include "elgamal.h" /* Blinding is used to mitigate side-channel attacks. You may undef this to speed up the operation in case the system is secured against physical and network mounted side-channel attacks. */ #define USE_BLINDING 1 typedef struct { MPI p; /* prime */ MPI g; /* group generator */ MPI y; /* g^x mod p */ } ELG_public_key; typedef struct { MPI p; /* prime */ MPI g; /* group generator */ MPI y; /* g^x mod p */ MPI x; /* secret exponent */ } ELG_secret_key; static void test_keys( ELG_secret_key *sk, unsigned nbits ); static MPI gen_k( MPI p, int small_k ); static void generate( ELG_secret_key *sk, unsigned nbits, MPI **factors ); static int check_secret_key( ELG_secret_key *sk ); static void do_encrypt(MPI a, MPI b, MPI input, ELG_public_key *pkey ); static void decrypt(MPI output, MPI a, MPI b, ELG_secret_key *skey ); static void (*progress_cb) ( void *, int ); static void *progress_cb_data; void register_pk_elg_progress ( void (*cb)( void *, int), void *cb_data ) { progress_cb = cb; progress_cb_data = cb_data; } static void progress( int c ) { if ( progress_cb ) progress_cb ( progress_cb_data, c ); else fputc( c, stderr ); } /**************** * Michael Wiener's table about subgroup sizes to match field sizes * (floating around somewhere - Fixme: need a reference) */ static unsigned int wiener_map( unsigned int n ) { static struct { unsigned int p_n, q_n; } t[] = { /* p q attack cost */ { 512, 119 }, /* 9 x 10^17 */ { 768, 145 }, /* 6 x 10^21 */ { 1024, 165 }, /* 7 x 10^24 */ { 1280, 183 }, /* 3 x 10^27 */ { 1536, 198 }, /* 7 x 10^29 */ { 1792, 212 }, /* 9 x 10^31 */ { 2048, 225 }, /* 8 x 10^33 */ { 2304, 237 }, /* 5 x 10^35 */ { 2560, 249 }, /* 3 x 10^37 */ { 2816, 259 }, /* 1 x 10^39 */ { 3072, 269 }, /* 3 x 10^40 */ { 3328, 279 }, /* 8 x 10^41 */ { 3584, 288 }, /* 2 x 10^43 */ { 3840, 296 }, /* 4 x 10^44 */ { 4096, 305 }, /* 7 x 10^45 */ { 4352, 313 }, /* 1 x 10^47 */ { 4608, 320 }, /* 2 x 10^48 */ { 4864, 328 }, /* 2 x 10^49 */ { 5120, 335 }, /* 3 x 10^50 */ { 0, 0 } }; int i; for(i=0; t[i].p_n; i++ ) { if( n <= t[i].p_n ) return t[i].q_n; } /* not in table - use some arbitrary high number ;-) */ return n / 8 + 200; } static void test_keys( ELG_secret_key *sk, unsigned int nbits ) { ELG_public_key pk; MPI test = mpi_alloc( 0 ); MPI out1_a = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); MPI out1_b = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); MPI out2 = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); pk.p = sk->p; pk.g = sk->g; pk.y = sk->y; /*mpi_set_bytes( test, nbits, get_random_byte, 0 );*/ { char *p = get_random_bits( nbits, 0, 0 ); mpi_set_buffer( test, p, (nbits+7)/8, 0 ); xfree(p); } do_encrypt( out1_a, out1_b, test, &pk ); decrypt( out2, out1_a, out1_b, sk ); if( mpi_cmp( test, out2 ) ) log_fatal("Elgamal operation: encrypt, decrypt failed\n"); mpi_free( test ); mpi_free( out1_a ); mpi_free( out1_b ); mpi_free( out2 ); } /**************** * Generate a random secret exponent k from prime p, so that k is * relatively prime to p-1. With SMALL_K set, k will be selected for * better encryption performance - this must never bee used signing! */ static MPI gen_k( MPI p, int small_k ) { MPI k = mpi_alloc_secure( 0 ); MPI temp = mpi_alloc( mpi_get_nlimbs(p) ); MPI p_1 = mpi_copy(p); unsigned int orig_nbits = mpi_get_nbits(p); unsigned int nbits; unsigned int nbytes; char *rndbuf = NULL; if (small_k) { /* Using a k much lesser than p is sufficient for encryption and * it greatly improves the encryption performance. We use * Wiener's table and add a large safety margin. */ nbits = wiener_map( orig_nbits ) * 3 / 2; if( nbits >= orig_nbits ) BUG(); } else nbits = orig_nbits; nbytes = (nbits+7)/8; if( DBG_CIPHER ) log_debug("choosing a random k of %u bits", nbits); mpi_sub_ui( p_1, p, 1); for(;;) { if( !rndbuf || nbits < 32 ) { xfree(rndbuf); rndbuf = get_random_bits( nbits, 1, 1 ); } else { /* Change only some of the higher bits. */ /* We could impprove this by directly requesting more memory * at the first call to get_random_bits() and use this the here * maybe it is easier to do this directly in random.c * Anyway, it is highly inlikely that we will ever reach this code */ char *pp = get_random_bits( 32, 1, 1 ); memcpy( rndbuf,pp, 4 ); xfree(pp); } mpi_set_buffer( k, rndbuf, nbytes, 0 ); for(;;) { if( !(mpi_cmp( k, p_1 ) < 0) ) { /* check: k < (p-1) */ if( DBG_CIPHER ) progress('+'); break; /* no */ } if( !(mpi_cmp_ui( k, 0 ) > 0) ) { /* check: k > 0 */ if( DBG_CIPHER ) progress('-'); break; /* no */ } if( mpi_gcd( temp, k, p_1 ) ) goto found; /* okay, k is relatively prime to (p-1) */ mpi_add_ui( k, k, 1 ); if( DBG_CIPHER ) progress('.'); } } found: xfree(rndbuf); if( DBG_CIPHER ) progress('\n'); mpi_free(p_1); mpi_free(temp); return k; } /**************** * Generate a key pair with a key of size NBITS * Returns: 2 structures filles with all needed values * and an array with n-1 factors of (p-1) */ static void generate( ELG_secret_key *sk, unsigned int nbits, MPI **ret_factors ) { MPI p; /* the prime */ MPI p_min1; MPI g; MPI x; /* the secret exponent */ MPI y; MPI temp; unsigned int qbits; unsigned int xbits; byte *rndbuf; p_min1 = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); temp = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); qbits = wiener_map ( nbits ); if( qbits & 1 ) /* better have a even one */ qbits++; g = mpi_alloc(1); p = generate_elg_prime( 0, nbits, qbits, g, ret_factors ); mpi_sub_ui(p_min1, p, 1); /* select a random number which has these properties: * 0 < x < p-1 * This must be a very good random number because this is the * secret part. The prime is public and may be shared anyway, * so a random generator level of 1 is used for the prime. * * I don't see a reason to have a x of about the same size as the * p. It should be sufficient to have one about the size of q or * the later used k plus a large safety margin. Decryption will be * much faster with such an x. Note that this is not optimal for * signing keys becuase it makes an attack using accidential small * K values even easier. Well, one should not use ElGamal signing * anyway. */ xbits = qbits * 3 / 2; if( xbits >= nbits ) BUG(); x = mpi_alloc_secure ( mpi_nlimb_hint_from_nbits (xbits) ); if( DBG_CIPHER ) log_debug("choosing a random x of size %u", xbits ); rndbuf = NULL; do { if( DBG_CIPHER ) progress('.'); if( rndbuf ) { /* change only some of the higher bits */ if( xbits < 16 ) {/* should never happen ... */ xfree(rndbuf); rndbuf = get_random_bits( xbits, 2, 1 ); } else { char *r = get_random_bits( 16, 2, 1 ); memcpy(rndbuf, r, 16/8 ); xfree(r); } } else rndbuf = get_random_bits( xbits, 2, 1 ); mpi_set_buffer( x, rndbuf, (xbits+7)/8, 0 ); mpi_clear_highbit( x, xbits+1 ); } while( !( mpi_cmp_ui( x, 0 )>0 && mpi_cmp( x, p_min1 )<0 ) ); xfree(rndbuf); y = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); mpi_powm( y, g, x, p ); if( DBG_CIPHER ) { progress('\n'); log_mpidump("elg p= ", p ); log_mpidump("elg g= ", g ); log_mpidump("elg y= ", y ); log_mpidump("elg x= ", x ); } /* copy the stuff to the key structures */ sk->p = p; sk->g = g; sk->y = y; sk->x = x; /* now we can test our keys (this should never fail!) */ test_keys( sk, nbits - 64 ); mpi_free( p_min1 ); mpi_free( temp ); } /**************** * Test whether the secret key is valid. * Returns: if this is a valid key. */ static int check_secret_key( ELG_secret_key *sk ) { int rc; MPI y = mpi_alloc( mpi_get_nlimbs(sk->y) ); mpi_powm( y, sk->g, sk->x, sk->p ); rc = !mpi_cmp( y, sk->y ); mpi_free( y ); return rc; } static void do_encrypt(MPI a, MPI b, MPI input, ELG_public_key *pkey ) { MPI k; /* Note: maybe we should change the interface, so that it * is possible to check that input is < p and return an * error code. */ k = gen_k( pkey->p, 1 ); mpi_powm( a, pkey->g, k, pkey->p ); /* b = (y^k * input) mod p * = ((y^k mod p) * (input mod p)) mod p * and because input is < p * = ((y^k mod p) * input) mod p */ mpi_powm( b, pkey->y, k, pkey->p ); mpi_mulm( b, b, input, pkey->p ); #if 0 if( DBG_CIPHER ) { log_mpidump("elg encrypted y= ", pkey->y); log_mpidump("elg encrypted p= ", pkey->p); log_mpidump("elg encrypted k= ", k); log_mpidump("elg encrypted M= ", input); log_mpidump("elg encrypted a= ", a); log_mpidump("elg encrypted b= ", b); } #endif mpi_free(k); } static void decrypt(MPI output, MPI a, MPI b, ELG_secret_key *skey ) { MPI t1, t2, r; unsigned int nbits = mpi_get_nbits (skey->p); mpi_normalize (a); mpi_normalize (b); t1 = mpi_alloc_secure (mpi_nlimb_hint_from_nbits (nbits)); #ifdef USE_BLINDING t2 = mpi_alloc_secure (mpi_nlimb_hint_from_nbits (nbits)); r = mpi_alloc (mpi_nlimb_hint_from_nbits (nbits)); /* We need a random number of about the prime size. The random number merely needs to be unpredictable; thus we use level 0. */ randomize_mpi (r, nbits, 0); /* t1 = r^x mod p */ mpi_powm (t1, r, skey->x, skey->p); /* t2 = (a * r)^-x mod p */ mpi_mulm (t2, a, r, skey->p); mpi_powm (t2, t2, skey->x, skey->p); mpi_invm (t2, t2, skey->p); /* t1 = (t1 * t2) mod p*/ mpi_mulm (t1, t1, t2, skey->p); mpi_free (r); mpi_free (t2); #else /*!USE_BLINDING*/ /* output = b/(a^x) mod p */ mpi_powm (t1, a, skey->x, skey->p); mpi_invm (t1, t1, skey->p); #endif /*!USE_BLINDING*/ mpi_mulm (output, b, t1, skey->p); #if 0 if (DBG_CIPHER) { log_mpidump("elg decrypted x= ", skey->x); log_mpidump("elg decrypted p= ", skey->p); log_mpidump("elg decrypted a= ", a); log_mpidump("elg decrypted b= ", b); log_mpidump("elg decrypted M= ", output); } #endif mpi_free (t1); } /********************************************* ************** interface ****************** *********************************************/ int elg_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ) { ELG_secret_key sk; if( !is_ELGAMAL(algo) ) return G10ERR_PUBKEY_ALGO; generate( &sk, nbits, retfactors ); skey[0] = sk.p; skey[1] = sk.g; skey[2] = sk.y; skey[3] = sk.x; return 0; } int elg_check_secret_key( int algo, MPI *skey ) { ELG_secret_key sk; if( !is_ELGAMAL(algo) ) return G10ERR_PUBKEY_ALGO; if( !skey[0] || !skey[1] || !skey[2] || !skey[3] ) return G10ERR_BAD_MPI; sk.p = skey[0]; sk.g = skey[1]; sk.y = skey[2]; sk.x = skey[3]; if( !check_secret_key( &sk ) ) return G10ERR_BAD_SECKEY; return 0; } int elg_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ) { ELG_public_key pk; if( !is_ELGAMAL(algo) ) return G10ERR_PUBKEY_ALGO; if( !data || !pkey[0] || !pkey[1] || !pkey[2] ) return G10ERR_BAD_MPI; pk.p = pkey[0]; pk.g = pkey[1]; pk.y = pkey[2]; resarr[0] = mpi_alloc( mpi_get_nlimbs( pk.p ) ); resarr[1] = mpi_alloc( mpi_get_nlimbs( pk.p ) ); do_encrypt( resarr[0], resarr[1], data, &pk ); return 0; } int elg_decrypt( int algo, MPI *result, MPI *data, MPI *skey ) { ELG_secret_key sk; if( !is_ELGAMAL(algo) ) return G10ERR_PUBKEY_ALGO; if( !data[0] || !data[1] || !skey[0] || !skey[1] || !skey[2] || !skey[3] ) return G10ERR_BAD_MPI; sk.p = skey[0]; sk.g = skey[1]; sk.y = skey[2]; sk.x = skey[3]; *result = mpi_alloc_secure( mpi_get_nlimbs( sk.p ) ); decrypt( *result, data[0], data[1], &sk ); return 0; } unsigned int elg_get_nbits( int algo, MPI *pkey ) { if( !is_ELGAMAL(algo) ) return 0; return mpi_get_nbits( pkey[0] ); } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. * Usage: Bit 0 set : allows signing * 1 set : allows encryption */ const char * elg_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig, int *use ) { *npkey = 3; *nskey = 4; *nenc = 2; *nsig = 2; switch( algo ) { case PUBKEY_ALGO_ELGAMAL_E: *use = PUBKEY_USAGE_ENC; return "ELG-E"; default: *use = 0; return NULL; } } gnupg-1.4.20/cipher/bithelp.h0000644000175000017500000000214412635262326012721 00000000000000/* bithelp.h - Some bit manipulation helpers * Copyright (C) 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 3 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, see . */ #ifndef G10_BITHELP_H #define G10_BITHELP_H /**************** * Rotate a 32 bit integer by n bytes */ #if defined(__GNUC__) && defined(__i386__) static inline u32 rol( u32 x, int n) { __asm__("roll %%cl,%0" :"=r" (x) :"0" (x),"c" (n)); return x; } #else #define rol(x,n) ( ((x) << (n)) | ((x) >> (32-(n))) ) #endif #endif /*G10_BITHELP_H*/ gnupg-1.4.20/cipher/rmd.h0000644000175000017500000000213112635262326012050 00000000000000/* rmd.h - RIPE-MD hash functions * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef G10_RMD_H #define G10_RMD_H /* we need this here because random.c must have direct access */ typedef struct { u32 h0,h1,h2,h3,h4; u32 nblocks; byte buf[64]; int count; } RMD160_CONTEXT; void rmd160_init( RMD160_CONTEXT *hd ); void rmd160_mixblock( RMD160_CONTEXT *hd, char *buffer ); #endif /*G10_RMD_H*/ gnupg-1.4.20/cipher/camellia-glue.c0000644000175000017500000001372612635262326013776 00000000000000/* camellia-glue.c - Glue for the Camellia cipher * Copyright (C) 2007, 2008 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 3 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, see . */ /* I put the GnuPG-specific stuff in this file to keep the camellia.c/camellia.h files exactly as provided by NTT. If they update their code, this should make it easier to bring the changes in. - dshaw */ #include #include #include #include "types.h" #include "cipher.h" #include "algorithms.h" #include "util.h" #include "errors.h" #include "camellia.h" typedef struct { int keybitlength; KEY_TABLE_TYPE keytable; } CAMELLIA_context; static const char *selftest(void); static void burn_stack(int bytes) { char buf[128]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } static int camellia_setkey(void *c, const byte *key, unsigned keylen) { CAMELLIA_context *ctx=c; static int initialized=0; static const char *selftest_failed=NULL; if(keylen!=16 && keylen!=24 && keylen!=32) return G10ERR_WRONG_KEYLEN; if(!initialized) { initialized=1; selftest_failed=selftest(); if(selftest_failed) log_error("%s\n",selftest_failed); } if(selftest_failed) return G10ERR_SELFTEST_FAILED; ctx->keybitlength=keylen*8; Camellia_Ekeygen(ctx->keybitlength,key,ctx->keytable); burn_stack ((19+34+34)*sizeof(u32)+2*sizeof(void*) /* camellia_setup256 */ +(4+32)*sizeof(u32)+2*sizeof(void*) /* camellia_setup192 */ +0+sizeof(int)+2*sizeof(void*) /* Camellia_Ekeygen */ +3*2*sizeof(void*) /* Function calls. */ ); return 0; } static void camellia_encrypt(void *c, byte *outbuf, const byte *inbuf) { CAMELLIA_context *ctx=c; Camellia_EncryptBlock(ctx->keybitlength,inbuf,ctx->keytable,outbuf); burn_stack (sizeof(int)+2*sizeof(unsigned char *)+sizeof(KEY_TABLE_TYPE) +4*sizeof(u32) +2*sizeof(u32*)+4*sizeof(u32) +2*2*sizeof(void*) /* Function calls. */ ); } static void camellia_decrypt(void *c, byte *outbuf, const byte *inbuf) { CAMELLIA_context *ctx=c; Camellia_DecryptBlock(ctx->keybitlength,inbuf,ctx->keytable,outbuf); burn_stack (sizeof(int)+2*sizeof(unsigned char *)+sizeof(KEY_TABLE_TYPE) +4*sizeof(u32) +2*sizeof(u32*)+4*sizeof(u32) +2*2*sizeof(void*) /* Function calls. */ ); } static const char * selftest(void) { CAMELLIA_context ctx; /* These test vectors are from RFC-3713 */ const byte plaintext[]= { 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10 }; const byte key_128[]= { 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10 }; const byte ciphertext_128[]= { 0x67,0x67,0x31,0x38,0x54,0x96,0x69,0x73, 0x08,0x57,0x06,0x56,0x48,0xea,0xbe,0x43 }; const byte key_192[]= { 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba,0x98, 0x76,0x54,0x32,0x10,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77 }; const byte ciphertext_192[]= { 0xb4,0x99,0x34,0x01,0xb3,0xe9,0x96,0xf8, 0x4e,0xe5,0xce,0xe7,0xd7,0x9b,0x09,0xb9 }; const byte key_256[]= { 0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,0xfe,0xdc,0xba, 0x98,0x76,0x54,0x32,0x10,0x00,0x11,0x22,0x33,0x44,0x55, 0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff }; const byte ciphertext_256[]= { 0x9a,0xcc,0x23,0x7d,0xff,0x16,0xd7,0x6c, 0x20,0xef,0x7c,0x91,0x9e,0x3a,0x75,0x09 }; byte scratch[sizeof(plaintext)]; camellia_setkey(&ctx,key_128,sizeof(key_128)); camellia_encrypt(&ctx,scratch,plaintext); if(memcmp(scratch,ciphertext_128,sizeof(scratch))!=0) return "CAMELLIA128 test encryption failed."; camellia_decrypt(&ctx,scratch,scratch); if(memcmp(scratch,plaintext,sizeof(scratch))!=0) return "CAMELLIA128 test decryption failed."; camellia_setkey(&ctx,key_192,sizeof(key_192)); camellia_encrypt(&ctx,scratch,plaintext); if(memcmp(scratch,ciphertext_192,sizeof(scratch))!=0) return "CAMELLIA192 test encryption failed."; camellia_decrypt(&ctx,scratch,scratch); if(memcmp(scratch,plaintext,sizeof(scratch))!=0) return "CAMELLIA192 test decryption failed."; camellia_setkey(&ctx,key_256,sizeof(key_256)); camellia_encrypt(&ctx,scratch,plaintext); if(memcmp(scratch,ciphertext_256,sizeof(scratch))!=0) return "CAMELLIA256 test encryption failed."; camellia_decrypt(&ctx,scratch,scratch); if(memcmp(scratch,plaintext,sizeof(scratch))!=0) return "CAMELLIA256 test decryption failed."; return NULL; } const char * camellia_get_info(int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**r_setkey)(void *c, const byte *key, unsigned keylen), void (**r_encrypt)(void *c, byte *outbuf, const byte *inbuf), void (**r_decrypt)(void *c, byte *outbuf, const byte *inbuf) ) { *blocksize = CAMELLIA_BLOCK_SIZE; *contextsize = sizeof (CAMELLIA_context); *r_setkey = camellia_setkey; *r_encrypt = camellia_encrypt; *r_decrypt = camellia_decrypt; if(algo==CIPHER_ALGO_CAMELLIA128) { *keylen = 128; return "CAMELLIA128"; } else if(algo==CIPHER_ALGO_CAMELLIA192) { *keylen = 192; return "CAMELLIA192"; } else if(algo==CIPHER_ALGO_CAMELLIA256) { *keylen = 256; return "CAMELLIA256"; } else return NULL; } gnupg-1.4.20/cipher/rijndael.c0000644000175000017500000031772712635262326013075 00000000000000/* Rijndael (AES) for GnuPG * Copyright (C) 2000, 2001, 2008 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 3 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, see . ******************************************************************* * The code here is based on the optimized implementation taken from * http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ on Oct 2, 2000, * which carries this notice: *------------------------------------------ * rijndael-alg-fst.c v2.3 April '2000 * * Optimised ANSI C code * * authors: v1.0: Antoon Bosselaers * v2.0: Vincent Rijmen * v2.3: Paulo Barreto * * This code is placed in the public domain. *------------------------------------------ */ #include #include #include #include /* for memcmp() */ #include "types.h" /* for byte and u32 typedefs */ #include "util.h" #include "errors.h" #include "algorithms.h" #define MAXKC (256/32) #define MAXROUNDS 14 /* Define an u32 variant for the sake of gcc 4.4's strict aliasing rules. */ #if __GNUC__ > 4 || ( __GNUC__ == 4 && __GNUC_MINOR__ >= 4 ) typedef u32 __attribute__ ((__may_alias__)) u32_a_t; #else typedef u32 u32_a_t; #endif static const char *selftest(void); typedef struct { int ROUNDS; /* key-length-dependent number of rounds */ int decryption_prepared; byte keySched[MAXROUNDS+1][4][4]; /* key schedule */ byte keySched2[MAXROUNDS+1][4][4]; /* key schedule */ } RIJNDAEL_context; static const byte S[256] = { 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22 }; static const byte T1[256][4] = { { 0xc6,0x63,0x63,0xa5 }, { 0xf8,0x7c,0x7c,0x84 }, { 0xee,0x77,0x77,0x99 }, { 0xf6,0x7b,0x7b,0x8d }, { 0xff,0xf2,0xf2,0x0d }, { 0xd6,0x6b,0x6b,0xbd }, { 0xde,0x6f,0x6f,0xb1 }, { 0x91,0xc5,0xc5,0x54 }, { 0x60,0x30,0x30,0x50 }, { 0x02,0x01,0x01,0x03 }, { 0xce,0x67,0x67,0xa9 }, { 0x56,0x2b,0x2b,0x7d }, { 0xe7,0xfe,0xfe,0x19 }, { 0xb5,0xd7,0xd7,0x62 }, { 0x4d,0xab,0xab,0xe6 }, { 0xec,0x76,0x76,0x9a }, { 0x8f,0xca,0xca,0x45 }, { 0x1f,0x82,0x82,0x9d }, { 0x89,0xc9,0xc9,0x40 }, { 0xfa,0x7d,0x7d,0x87 }, { 0xef,0xfa,0xfa,0x15 }, { 0xb2,0x59,0x59,0xeb }, { 0x8e,0x47,0x47,0xc9 }, { 0xfb,0xf0,0xf0,0x0b }, { 0x41,0xad,0xad,0xec }, { 0xb3,0xd4,0xd4,0x67 }, { 0x5f,0xa2,0xa2,0xfd }, { 0x45,0xaf,0xaf,0xea }, { 0x23,0x9c,0x9c,0xbf }, { 0x53,0xa4,0xa4,0xf7 }, { 0xe4,0x72,0x72,0x96 }, { 0x9b,0xc0,0xc0,0x5b }, { 0x75,0xb7,0xb7,0xc2 }, { 0xe1,0xfd,0xfd,0x1c }, { 0x3d,0x93,0x93,0xae }, { 0x4c,0x26,0x26,0x6a }, { 0x6c,0x36,0x36,0x5a }, { 0x7e,0x3f,0x3f,0x41 }, { 0xf5,0xf7,0xf7,0x02 }, { 0x83,0xcc,0xcc,0x4f }, { 0x68,0x34,0x34,0x5c }, { 0x51,0xa5,0xa5,0xf4 }, { 0xd1,0xe5,0xe5,0x34 }, { 0xf9,0xf1,0xf1,0x08 }, { 0xe2,0x71,0x71,0x93 }, { 0xab,0xd8,0xd8,0x73 }, { 0x62,0x31,0x31,0x53 }, { 0x2a,0x15,0x15,0x3f }, { 0x08,0x04,0x04,0x0c }, { 0x95,0xc7,0xc7,0x52 }, { 0x46,0x23,0x23,0x65 }, { 0x9d,0xc3,0xc3,0x5e }, { 0x30,0x18,0x18,0x28 }, { 0x37,0x96,0x96,0xa1 }, { 0x0a,0x05,0x05,0x0f }, { 0x2f,0x9a,0x9a,0xb5 }, { 0x0e,0x07,0x07,0x09 }, { 0x24,0x12,0x12,0x36 }, { 0x1b,0x80,0x80,0x9b }, { 0xdf,0xe2,0xe2,0x3d }, { 0xcd,0xeb,0xeb,0x26 }, { 0x4e,0x27,0x27,0x69 }, { 0x7f,0xb2,0xb2,0xcd }, { 0xea,0x75,0x75,0x9f }, { 0x12,0x09,0x09,0x1b }, { 0x1d,0x83,0x83,0x9e }, { 0x58,0x2c,0x2c,0x74 }, { 0x34,0x1a,0x1a,0x2e }, { 0x36,0x1b,0x1b,0x2d }, { 0xdc,0x6e,0x6e,0xb2 }, { 0xb4,0x5a,0x5a,0xee }, { 0x5b,0xa0,0xa0,0xfb }, { 0xa4,0x52,0x52,0xf6 }, { 0x76,0x3b,0x3b,0x4d }, { 0xb7,0xd6,0xd6,0x61 }, { 0x7d,0xb3,0xb3,0xce }, { 0x52,0x29,0x29,0x7b }, { 0xdd,0xe3,0xe3,0x3e }, { 0x5e,0x2f,0x2f,0x71 }, { 0x13,0x84,0x84,0x97 }, { 0xa6,0x53,0x53,0xf5 }, { 0xb9,0xd1,0xd1,0x68 }, { 0x00,0x00,0x00,0x00 }, { 0xc1,0xed,0xed,0x2c }, { 0x40,0x20,0x20,0x60 }, { 0xe3,0xfc,0xfc,0x1f }, { 0x79,0xb1,0xb1,0xc8 }, { 0xb6,0x5b,0x5b,0xed }, { 0xd4,0x6a,0x6a,0xbe }, { 0x8d,0xcb,0xcb,0x46 }, { 0x67,0xbe,0xbe,0xd9 }, { 0x72,0x39,0x39,0x4b }, { 0x94,0x4a,0x4a,0xde }, { 0x98,0x4c,0x4c,0xd4 }, { 0xb0,0x58,0x58,0xe8 }, { 0x85,0xcf,0xcf,0x4a }, { 0xbb,0xd0,0xd0,0x6b }, { 0xc5,0xef,0xef,0x2a }, { 0x4f,0xaa,0xaa,0xe5 }, { 0xed,0xfb,0xfb,0x16 }, { 0x86,0x43,0x43,0xc5 }, { 0x9a,0x4d,0x4d,0xd7 }, { 0x66,0x33,0x33,0x55 }, { 0x11,0x85,0x85,0x94 }, { 0x8a,0x45,0x45,0xcf }, { 0xe9,0xf9,0xf9,0x10 }, { 0x04,0x02,0x02,0x06 }, { 0xfe,0x7f,0x7f,0x81 }, { 0xa0,0x50,0x50,0xf0 }, { 0x78,0x3c,0x3c,0x44 }, { 0x25,0x9f,0x9f,0xba }, { 0x4b,0xa8,0xa8,0xe3 }, { 0xa2,0x51,0x51,0xf3 }, { 0x5d,0xa3,0xa3,0xfe }, { 0x80,0x40,0x40,0xc0 }, { 0x05,0x8f,0x8f,0x8a }, { 0x3f,0x92,0x92,0xad }, { 0x21,0x9d,0x9d,0xbc }, { 0x70,0x38,0x38,0x48 }, { 0xf1,0xf5,0xf5,0x04 }, { 0x63,0xbc,0xbc,0xdf }, { 0x77,0xb6,0xb6,0xc1 }, { 0xaf,0xda,0xda,0x75 }, { 0x42,0x21,0x21,0x63 }, { 0x20,0x10,0x10,0x30 }, { 0xe5,0xff,0xff,0x1a }, { 0xfd,0xf3,0xf3,0x0e }, { 0xbf,0xd2,0xd2,0x6d }, { 0x81,0xcd,0xcd,0x4c }, { 0x18,0x0c,0x0c,0x14 }, { 0x26,0x13,0x13,0x35 }, { 0xc3,0xec,0xec,0x2f }, { 0xbe,0x5f,0x5f,0xe1 }, { 0x35,0x97,0x97,0xa2 }, { 0x88,0x44,0x44,0xcc }, { 0x2e,0x17,0x17,0x39 }, { 0x93,0xc4,0xc4,0x57 }, { 0x55,0xa7,0xa7,0xf2 }, { 0xfc,0x7e,0x7e,0x82 }, { 0x7a,0x3d,0x3d,0x47 }, { 0xc8,0x64,0x64,0xac }, { 0xba,0x5d,0x5d,0xe7 }, { 0x32,0x19,0x19,0x2b }, { 0xe6,0x73,0x73,0x95 }, { 0xc0,0x60,0x60,0xa0 }, { 0x19,0x81,0x81,0x98 }, { 0x9e,0x4f,0x4f,0xd1 }, { 0xa3,0xdc,0xdc,0x7f }, { 0x44,0x22,0x22,0x66 }, { 0x54,0x2a,0x2a,0x7e }, { 0x3b,0x90,0x90,0xab }, { 0x0b,0x88,0x88,0x83 }, { 0x8c,0x46,0x46,0xca }, { 0xc7,0xee,0xee,0x29 }, { 0x6b,0xb8,0xb8,0xd3 }, { 0x28,0x14,0x14,0x3c }, { 0xa7,0xde,0xde,0x79 }, { 0xbc,0x5e,0x5e,0xe2 }, { 0x16,0x0b,0x0b,0x1d }, { 0xad,0xdb,0xdb,0x76 }, { 0xdb,0xe0,0xe0,0x3b }, { 0x64,0x32,0x32,0x56 }, { 0x74,0x3a,0x3a,0x4e }, { 0x14,0x0a,0x0a,0x1e }, { 0x92,0x49,0x49,0xdb }, { 0x0c,0x06,0x06,0x0a }, { 0x48,0x24,0x24,0x6c }, { 0xb8,0x5c,0x5c,0xe4 }, { 0x9f,0xc2,0xc2,0x5d }, { 0xbd,0xd3,0xd3,0x6e }, { 0x43,0xac,0xac,0xef }, { 0xc4,0x62,0x62,0xa6 }, { 0x39,0x91,0x91,0xa8 }, { 0x31,0x95,0x95,0xa4 }, { 0xd3,0xe4,0xe4,0x37 }, { 0xf2,0x79,0x79,0x8b }, { 0xd5,0xe7,0xe7,0x32 }, { 0x8b,0xc8,0xc8,0x43 }, { 0x6e,0x37,0x37,0x59 }, { 0xda,0x6d,0x6d,0xb7 }, { 0x01,0x8d,0x8d,0x8c }, { 0xb1,0xd5,0xd5,0x64 }, { 0x9c,0x4e,0x4e,0xd2 }, { 0x49,0xa9,0xa9,0xe0 }, { 0xd8,0x6c,0x6c,0xb4 }, { 0xac,0x56,0x56,0xfa }, { 0xf3,0xf4,0xf4,0x07 }, { 0xcf,0xea,0xea,0x25 }, { 0xca,0x65,0x65,0xaf }, { 0xf4,0x7a,0x7a,0x8e }, { 0x47,0xae,0xae,0xe9 }, { 0x10,0x08,0x08,0x18 }, { 0x6f,0xba,0xba,0xd5 }, { 0xf0,0x78,0x78,0x88 }, { 0x4a,0x25,0x25,0x6f }, { 0x5c,0x2e,0x2e,0x72 }, { 0x38,0x1c,0x1c,0x24 }, { 0x57,0xa6,0xa6,0xf1 }, { 0x73,0xb4,0xb4,0xc7 }, { 0x97,0xc6,0xc6,0x51 }, { 0xcb,0xe8,0xe8,0x23 }, { 0xa1,0xdd,0xdd,0x7c }, { 0xe8,0x74,0x74,0x9c }, { 0x3e,0x1f,0x1f,0x21 }, { 0x96,0x4b,0x4b,0xdd }, { 0x61,0xbd,0xbd,0xdc }, { 0x0d,0x8b,0x8b,0x86 }, { 0x0f,0x8a,0x8a,0x85 }, { 0xe0,0x70,0x70,0x90 }, { 0x7c,0x3e,0x3e,0x42 }, { 0x71,0xb5,0xb5,0xc4 }, { 0xcc,0x66,0x66,0xaa }, { 0x90,0x48,0x48,0xd8 }, { 0x06,0x03,0x03,0x05 }, { 0xf7,0xf6,0xf6,0x01 }, { 0x1c,0x0e,0x0e,0x12 }, { 0xc2,0x61,0x61,0xa3 }, { 0x6a,0x35,0x35,0x5f }, { 0xae,0x57,0x57,0xf9 }, { 0x69,0xb9,0xb9,0xd0 }, { 0x17,0x86,0x86,0x91 }, { 0x99,0xc1,0xc1,0x58 }, { 0x3a,0x1d,0x1d,0x27 }, { 0x27,0x9e,0x9e,0xb9 }, { 0xd9,0xe1,0xe1,0x38 }, { 0xeb,0xf8,0xf8,0x13 }, { 0x2b,0x98,0x98,0xb3 }, { 0x22,0x11,0x11,0x33 }, { 0xd2,0x69,0x69,0xbb }, { 0xa9,0xd9,0xd9,0x70 }, { 0x07,0x8e,0x8e,0x89 }, { 0x33,0x94,0x94,0xa7 }, { 0x2d,0x9b,0x9b,0xb6 }, { 0x3c,0x1e,0x1e,0x22 }, { 0x15,0x87,0x87,0x92 }, { 0xc9,0xe9,0xe9,0x20 }, { 0x87,0xce,0xce,0x49 }, { 0xaa,0x55,0x55,0xff }, { 0x50,0x28,0x28,0x78 }, { 0xa5,0xdf,0xdf,0x7a }, { 0x03,0x8c,0x8c,0x8f }, { 0x59,0xa1,0xa1,0xf8 }, { 0x09,0x89,0x89,0x80 }, { 0x1a,0x0d,0x0d,0x17 }, { 0x65,0xbf,0xbf,0xda }, { 0xd7,0xe6,0xe6,0x31 }, { 0x84,0x42,0x42,0xc6 }, { 0xd0,0x68,0x68,0xb8 }, { 0x82,0x41,0x41,0xc3 }, { 0x29,0x99,0x99,0xb0 }, { 0x5a,0x2d,0x2d,0x77 }, { 0x1e,0x0f,0x0f,0x11 }, { 0x7b,0xb0,0xb0,0xcb }, { 0xa8,0x54,0x54,0xfc }, { 0x6d,0xbb,0xbb,0xd6 }, { 0x2c,0x16,0x16,0x3a } }; static const byte T2[256][4] = { { 0xa5,0xc6,0x63,0x63 }, { 0x84,0xf8,0x7c,0x7c }, { 0x99,0xee,0x77,0x77 }, { 0x8d,0xf6,0x7b,0x7b }, { 0x0d,0xff,0xf2,0xf2 }, { 0xbd,0xd6,0x6b,0x6b }, { 0xb1,0xde,0x6f,0x6f }, { 0x54,0x91,0xc5,0xc5 }, { 0x50,0x60,0x30,0x30 }, { 0x03,0x02,0x01,0x01 }, { 0xa9,0xce,0x67,0x67 }, { 0x7d,0x56,0x2b,0x2b }, { 0x19,0xe7,0xfe,0xfe }, { 0x62,0xb5,0xd7,0xd7 }, { 0xe6,0x4d,0xab,0xab }, { 0x9a,0xec,0x76,0x76 }, { 0x45,0x8f,0xca,0xca }, { 0x9d,0x1f,0x82,0x82 }, { 0x40,0x89,0xc9,0xc9 }, { 0x87,0xfa,0x7d,0x7d }, { 0x15,0xef,0xfa,0xfa }, { 0xeb,0xb2,0x59,0x59 }, { 0xc9,0x8e,0x47,0x47 }, { 0x0b,0xfb,0xf0,0xf0 }, { 0xec,0x41,0xad,0xad }, { 0x67,0xb3,0xd4,0xd4 }, { 0xfd,0x5f,0xa2,0xa2 }, { 0xea,0x45,0xaf,0xaf }, { 0xbf,0x23,0x9c,0x9c }, { 0xf7,0x53,0xa4,0xa4 }, { 0x96,0xe4,0x72,0x72 }, { 0x5b,0x9b,0xc0,0xc0 }, { 0xc2,0x75,0xb7,0xb7 }, { 0x1c,0xe1,0xfd,0xfd }, { 0xae,0x3d,0x93,0x93 }, { 0x6a,0x4c,0x26,0x26 }, { 0x5a,0x6c,0x36,0x36 }, { 0x41,0x7e,0x3f,0x3f }, { 0x02,0xf5,0xf7,0xf7 }, { 0x4f,0x83,0xcc,0xcc }, { 0x5c,0x68,0x34,0x34 }, { 0xf4,0x51,0xa5,0xa5 }, { 0x34,0xd1,0xe5,0xe5 }, { 0x08,0xf9,0xf1,0xf1 }, { 0x93,0xe2,0x71,0x71 }, { 0x73,0xab,0xd8,0xd8 }, { 0x53,0x62,0x31,0x31 }, { 0x3f,0x2a,0x15,0x15 }, { 0x0c,0x08,0x04,0x04 }, { 0x52,0x95,0xc7,0xc7 }, { 0x65,0x46,0x23,0x23 }, { 0x5e,0x9d,0xc3,0xc3 }, { 0x28,0x30,0x18,0x18 }, { 0xa1,0x37,0x96,0x96 }, { 0x0f,0x0a,0x05,0x05 }, { 0xb5,0x2f,0x9a,0x9a }, { 0x09,0x0e,0x07,0x07 }, { 0x36,0x24,0x12,0x12 }, { 0x9b,0x1b,0x80,0x80 }, { 0x3d,0xdf,0xe2,0xe2 }, { 0x26,0xcd,0xeb,0xeb }, { 0x69,0x4e,0x27,0x27 }, { 0xcd,0x7f,0xb2,0xb2 }, { 0x9f,0xea,0x75,0x75 }, { 0x1b,0x12,0x09,0x09 }, { 0x9e,0x1d,0x83,0x83 }, { 0x74,0x58,0x2c,0x2c }, { 0x2e,0x34,0x1a,0x1a }, { 0x2d,0x36,0x1b,0x1b }, { 0xb2,0xdc,0x6e,0x6e }, { 0xee,0xb4,0x5a,0x5a }, { 0xfb,0x5b,0xa0,0xa0 }, { 0xf6,0xa4,0x52,0x52 }, { 0x4d,0x76,0x3b,0x3b }, { 0x61,0xb7,0xd6,0xd6 }, { 0xce,0x7d,0xb3,0xb3 }, { 0x7b,0x52,0x29,0x29 }, { 0x3e,0xdd,0xe3,0xe3 }, { 0x71,0x5e,0x2f,0x2f }, { 0x97,0x13,0x84,0x84 }, { 0xf5,0xa6,0x53,0x53 }, { 0x68,0xb9,0xd1,0xd1 }, { 0x00,0x00,0x00,0x00 }, { 0x2c,0xc1,0xed,0xed }, { 0x60,0x40,0x20,0x20 }, { 0x1f,0xe3,0xfc,0xfc }, { 0xc8,0x79,0xb1,0xb1 }, { 0xed,0xb6,0x5b,0x5b }, { 0xbe,0xd4,0x6a,0x6a }, { 0x46,0x8d,0xcb,0xcb }, { 0xd9,0x67,0xbe,0xbe }, { 0x4b,0x72,0x39,0x39 }, { 0xde,0x94,0x4a,0x4a }, { 0xd4,0x98,0x4c,0x4c }, { 0xe8,0xb0,0x58,0x58 }, { 0x4a,0x85,0xcf,0xcf }, { 0x6b,0xbb,0xd0,0xd0 }, { 0x2a,0xc5,0xef,0xef }, { 0xe5,0x4f,0xaa,0xaa }, { 0x16,0xed,0xfb,0xfb }, { 0xc5,0x86,0x43,0x43 }, { 0xd7,0x9a,0x4d,0x4d }, { 0x55,0x66,0x33,0x33 }, { 0x94,0x11,0x85,0x85 }, { 0xcf,0x8a,0x45,0x45 }, { 0x10,0xe9,0xf9,0xf9 }, { 0x06,0x04,0x02,0x02 }, { 0x81,0xfe,0x7f,0x7f }, { 0xf0,0xa0,0x50,0x50 }, { 0x44,0x78,0x3c,0x3c }, { 0xba,0x25,0x9f,0x9f }, { 0xe3,0x4b,0xa8,0xa8 }, { 0xf3,0xa2,0x51,0x51 }, { 0xfe,0x5d,0xa3,0xa3 }, { 0xc0,0x80,0x40,0x40 }, { 0x8a,0x05,0x8f,0x8f }, { 0xad,0x3f,0x92,0x92 }, { 0xbc,0x21,0x9d,0x9d }, { 0x48,0x70,0x38,0x38 }, { 0x04,0xf1,0xf5,0xf5 }, { 0xdf,0x63,0xbc,0xbc }, { 0xc1,0x77,0xb6,0xb6 }, { 0x75,0xaf,0xda,0xda }, { 0x63,0x42,0x21,0x21 }, { 0x30,0x20,0x10,0x10 }, { 0x1a,0xe5,0xff,0xff }, { 0x0e,0xfd,0xf3,0xf3 }, { 0x6d,0xbf,0xd2,0xd2 }, { 0x4c,0x81,0xcd,0xcd }, { 0x14,0x18,0x0c,0x0c }, { 0x35,0x26,0x13,0x13 }, { 0x2f,0xc3,0xec,0xec }, { 0xe1,0xbe,0x5f,0x5f }, { 0xa2,0x35,0x97,0x97 }, { 0xcc,0x88,0x44,0x44 }, { 0x39,0x2e,0x17,0x17 }, { 0x57,0x93,0xc4,0xc4 }, { 0xf2,0x55,0xa7,0xa7 }, { 0x82,0xfc,0x7e,0x7e }, { 0x47,0x7a,0x3d,0x3d }, { 0xac,0xc8,0x64,0x64 }, { 0xe7,0xba,0x5d,0x5d }, { 0x2b,0x32,0x19,0x19 }, { 0x95,0xe6,0x73,0x73 }, { 0xa0,0xc0,0x60,0x60 }, { 0x98,0x19,0x81,0x81 }, { 0xd1,0x9e,0x4f,0x4f }, { 0x7f,0xa3,0xdc,0xdc }, { 0x66,0x44,0x22,0x22 }, { 0x7e,0x54,0x2a,0x2a }, { 0xab,0x3b,0x90,0x90 }, { 0x83,0x0b,0x88,0x88 }, { 0xca,0x8c,0x46,0x46 }, { 0x29,0xc7,0xee,0xee }, { 0xd3,0x6b,0xb8,0xb8 }, { 0x3c,0x28,0x14,0x14 }, { 0x79,0xa7,0xde,0xde }, { 0xe2,0xbc,0x5e,0x5e }, { 0x1d,0x16,0x0b,0x0b }, { 0x76,0xad,0xdb,0xdb }, { 0x3b,0xdb,0xe0,0xe0 }, { 0x56,0x64,0x32,0x32 }, { 0x4e,0x74,0x3a,0x3a }, { 0x1e,0x14,0x0a,0x0a }, { 0xdb,0x92,0x49,0x49 }, { 0x0a,0x0c,0x06,0x06 }, { 0x6c,0x48,0x24,0x24 }, { 0xe4,0xb8,0x5c,0x5c }, { 0x5d,0x9f,0xc2,0xc2 }, { 0x6e,0xbd,0xd3,0xd3 }, { 0xef,0x43,0xac,0xac }, { 0xa6,0xc4,0x62,0x62 }, { 0xa8,0x39,0x91,0x91 }, { 0xa4,0x31,0x95,0x95 }, { 0x37,0xd3,0xe4,0xe4 }, { 0x8b,0xf2,0x79,0x79 }, { 0x32,0xd5,0xe7,0xe7 }, { 0x43,0x8b,0xc8,0xc8 }, { 0x59,0x6e,0x37,0x37 }, { 0xb7,0xda,0x6d,0x6d }, { 0x8c,0x01,0x8d,0x8d }, { 0x64,0xb1,0xd5,0xd5 }, { 0xd2,0x9c,0x4e,0x4e }, { 0xe0,0x49,0xa9,0xa9 }, { 0xb4,0xd8,0x6c,0x6c }, { 0xfa,0xac,0x56,0x56 }, { 0x07,0xf3,0xf4,0xf4 }, { 0x25,0xcf,0xea,0xea }, { 0xaf,0xca,0x65,0x65 }, { 0x8e,0xf4,0x7a,0x7a }, { 0xe9,0x47,0xae,0xae }, { 0x18,0x10,0x08,0x08 }, { 0xd5,0x6f,0xba,0xba }, { 0x88,0xf0,0x78,0x78 }, { 0x6f,0x4a,0x25,0x25 }, { 0x72,0x5c,0x2e,0x2e }, { 0x24,0x38,0x1c,0x1c }, { 0xf1,0x57,0xa6,0xa6 }, { 0xc7,0x73,0xb4,0xb4 }, { 0x51,0x97,0xc6,0xc6 }, { 0x23,0xcb,0xe8,0xe8 }, { 0x7c,0xa1,0xdd,0xdd }, { 0x9c,0xe8,0x74,0x74 }, { 0x21,0x3e,0x1f,0x1f }, { 0xdd,0x96,0x4b,0x4b }, { 0xdc,0x61,0xbd,0xbd }, { 0x86,0x0d,0x8b,0x8b }, { 0x85,0x0f,0x8a,0x8a }, { 0x90,0xe0,0x70,0x70 }, { 0x42,0x7c,0x3e,0x3e }, { 0xc4,0x71,0xb5,0xb5 }, { 0xaa,0xcc,0x66,0x66 }, { 0xd8,0x90,0x48,0x48 }, { 0x05,0x06,0x03,0x03 }, { 0x01,0xf7,0xf6,0xf6 }, { 0x12,0x1c,0x0e,0x0e }, { 0xa3,0xc2,0x61,0x61 }, { 0x5f,0x6a,0x35,0x35 }, { 0xf9,0xae,0x57,0x57 }, { 0xd0,0x69,0xb9,0xb9 }, { 0x91,0x17,0x86,0x86 }, { 0x58,0x99,0xc1,0xc1 }, { 0x27,0x3a,0x1d,0x1d }, { 0xb9,0x27,0x9e,0x9e }, { 0x38,0xd9,0xe1,0xe1 }, { 0x13,0xeb,0xf8,0xf8 }, { 0xb3,0x2b,0x98,0x98 }, { 0x33,0x22,0x11,0x11 }, { 0xbb,0xd2,0x69,0x69 }, { 0x70,0xa9,0xd9,0xd9 }, { 0x89,0x07,0x8e,0x8e }, { 0xa7,0x33,0x94,0x94 }, { 0xb6,0x2d,0x9b,0x9b }, { 0x22,0x3c,0x1e,0x1e }, { 0x92,0x15,0x87,0x87 }, { 0x20,0xc9,0xe9,0xe9 }, { 0x49,0x87,0xce,0xce }, { 0xff,0xaa,0x55,0x55 }, { 0x78,0x50,0x28,0x28 }, { 0x7a,0xa5,0xdf,0xdf }, { 0x8f,0x03,0x8c,0x8c }, { 0xf8,0x59,0xa1,0xa1 }, { 0x80,0x09,0x89,0x89 }, { 0x17,0x1a,0x0d,0x0d }, { 0xda,0x65,0xbf,0xbf }, { 0x31,0xd7,0xe6,0xe6 }, { 0xc6,0x84,0x42,0x42 }, { 0xb8,0xd0,0x68,0x68 }, { 0xc3,0x82,0x41,0x41 }, { 0xb0,0x29,0x99,0x99 }, { 0x77,0x5a,0x2d,0x2d }, { 0x11,0x1e,0x0f,0x0f }, { 0xcb,0x7b,0xb0,0xb0 }, { 0xfc,0xa8,0x54,0x54 }, { 0xd6,0x6d,0xbb,0xbb }, { 0x3a,0x2c,0x16,0x16 } }; static const byte T3[256][4] = { { 0x63,0xa5,0xc6,0x63 }, { 0x7c,0x84,0xf8,0x7c }, { 0x77,0x99,0xee,0x77 }, { 0x7b,0x8d,0xf6,0x7b }, { 0xf2,0x0d,0xff,0xf2 }, { 0x6b,0xbd,0xd6,0x6b }, { 0x6f,0xb1,0xde,0x6f }, { 0xc5,0x54,0x91,0xc5 }, { 0x30,0x50,0x60,0x30 }, { 0x01,0x03,0x02,0x01 }, { 0x67,0xa9,0xce,0x67 }, { 0x2b,0x7d,0x56,0x2b }, { 0xfe,0x19,0xe7,0xfe }, { 0xd7,0x62,0xb5,0xd7 }, { 0xab,0xe6,0x4d,0xab }, { 0x76,0x9a,0xec,0x76 }, { 0xca,0x45,0x8f,0xca }, { 0x82,0x9d,0x1f,0x82 }, { 0xc9,0x40,0x89,0xc9 }, { 0x7d,0x87,0xfa,0x7d }, { 0xfa,0x15,0xef,0xfa }, { 0x59,0xeb,0xb2,0x59 }, { 0x47,0xc9,0x8e,0x47 }, { 0xf0,0x0b,0xfb,0xf0 }, { 0xad,0xec,0x41,0xad }, { 0xd4,0x67,0xb3,0xd4 }, { 0xa2,0xfd,0x5f,0xa2 }, { 0xaf,0xea,0x45,0xaf }, { 0x9c,0xbf,0x23,0x9c }, { 0xa4,0xf7,0x53,0xa4 }, { 0x72,0x96,0xe4,0x72 }, { 0xc0,0x5b,0x9b,0xc0 }, { 0xb7,0xc2,0x75,0xb7 }, { 0xfd,0x1c,0xe1,0xfd }, { 0x93,0xae,0x3d,0x93 }, { 0x26,0x6a,0x4c,0x26 }, { 0x36,0x5a,0x6c,0x36 }, { 0x3f,0x41,0x7e,0x3f }, { 0xf7,0x02,0xf5,0xf7 }, { 0xcc,0x4f,0x83,0xcc }, { 0x34,0x5c,0x68,0x34 }, { 0xa5,0xf4,0x51,0xa5 }, { 0xe5,0x34,0xd1,0xe5 }, { 0xf1,0x08,0xf9,0xf1 }, { 0x71,0x93,0xe2,0x71 }, { 0xd8,0x73,0xab,0xd8 }, { 0x31,0x53,0x62,0x31 }, { 0x15,0x3f,0x2a,0x15 }, { 0x04,0x0c,0x08,0x04 }, { 0xc7,0x52,0x95,0xc7 }, { 0x23,0x65,0x46,0x23 }, { 0xc3,0x5e,0x9d,0xc3 }, { 0x18,0x28,0x30,0x18 }, { 0x96,0xa1,0x37,0x96 }, { 0x05,0x0f,0x0a,0x05 }, { 0x9a,0xb5,0x2f,0x9a }, { 0x07,0x09,0x0e,0x07 }, { 0x12,0x36,0x24,0x12 }, { 0x80,0x9b,0x1b,0x80 }, { 0xe2,0x3d,0xdf,0xe2 }, { 0xeb,0x26,0xcd,0xeb }, { 0x27,0x69,0x4e,0x27 }, { 0xb2,0xcd,0x7f,0xb2 }, { 0x75,0x9f,0xea,0x75 }, { 0x09,0x1b,0x12,0x09 }, { 0x83,0x9e,0x1d,0x83 }, { 0x2c,0x74,0x58,0x2c }, { 0x1a,0x2e,0x34,0x1a }, { 0x1b,0x2d,0x36,0x1b }, { 0x6e,0xb2,0xdc,0x6e }, { 0x5a,0xee,0xb4,0x5a }, { 0xa0,0xfb,0x5b,0xa0 }, { 0x52,0xf6,0xa4,0x52 }, { 0x3b,0x4d,0x76,0x3b }, { 0xd6,0x61,0xb7,0xd6 }, { 0xb3,0xce,0x7d,0xb3 }, { 0x29,0x7b,0x52,0x29 }, { 0xe3,0x3e,0xdd,0xe3 }, { 0x2f,0x71,0x5e,0x2f }, { 0x84,0x97,0x13,0x84 }, { 0x53,0xf5,0xa6,0x53 }, { 0xd1,0x68,0xb9,0xd1 }, { 0x00,0x00,0x00,0x00 }, { 0xed,0x2c,0xc1,0xed }, { 0x20,0x60,0x40,0x20 }, { 0xfc,0x1f,0xe3,0xfc }, { 0xb1,0xc8,0x79,0xb1 }, { 0x5b,0xed,0xb6,0x5b }, { 0x6a,0xbe,0xd4,0x6a }, { 0xcb,0x46,0x8d,0xcb }, { 0xbe,0xd9,0x67,0xbe }, { 0x39,0x4b,0x72,0x39 }, { 0x4a,0xde,0x94,0x4a }, { 0x4c,0xd4,0x98,0x4c }, { 0x58,0xe8,0xb0,0x58 }, { 0xcf,0x4a,0x85,0xcf }, { 0xd0,0x6b,0xbb,0xd0 }, { 0xef,0x2a,0xc5,0xef }, { 0xaa,0xe5,0x4f,0xaa }, { 0xfb,0x16,0xed,0xfb }, { 0x43,0xc5,0x86,0x43 }, { 0x4d,0xd7,0x9a,0x4d }, { 0x33,0x55,0x66,0x33 }, { 0x85,0x94,0x11,0x85 }, { 0x45,0xcf,0x8a,0x45 }, { 0xf9,0x10,0xe9,0xf9 }, { 0x02,0x06,0x04,0x02 }, { 0x7f,0x81,0xfe,0x7f }, { 0x50,0xf0,0xa0,0x50 }, { 0x3c,0x44,0x78,0x3c }, { 0x9f,0xba,0x25,0x9f }, { 0xa8,0xe3,0x4b,0xa8 }, { 0x51,0xf3,0xa2,0x51 }, { 0xa3,0xfe,0x5d,0xa3 }, { 0x40,0xc0,0x80,0x40 }, { 0x8f,0x8a,0x05,0x8f }, { 0x92,0xad,0x3f,0x92 }, { 0x9d,0xbc,0x21,0x9d }, { 0x38,0x48,0x70,0x38 }, { 0xf5,0x04,0xf1,0xf5 }, { 0xbc,0xdf,0x63,0xbc }, { 0xb6,0xc1,0x77,0xb6 }, { 0xda,0x75,0xaf,0xda }, { 0x21,0x63,0x42,0x21 }, { 0x10,0x30,0x20,0x10 }, { 0xff,0x1a,0xe5,0xff }, { 0xf3,0x0e,0xfd,0xf3 }, { 0xd2,0x6d,0xbf,0xd2 }, { 0xcd,0x4c,0x81,0xcd }, { 0x0c,0x14,0x18,0x0c }, { 0x13,0x35,0x26,0x13 }, { 0xec,0x2f,0xc3,0xec }, { 0x5f,0xe1,0xbe,0x5f }, { 0x97,0xa2,0x35,0x97 }, { 0x44,0xcc,0x88,0x44 }, { 0x17,0x39,0x2e,0x17 }, { 0xc4,0x57,0x93,0xc4 }, { 0xa7,0xf2,0x55,0xa7 }, { 0x7e,0x82,0xfc,0x7e }, { 0x3d,0x47,0x7a,0x3d }, { 0x64,0xac,0xc8,0x64 }, { 0x5d,0xe7,0xba,0x5d }, { 0x19,0x2b,0x32,0x19 }, { 0x73,0x95,0xe6,0x73 }, { 0x60,0xa0,0xc0,0x60 }, { 0x81,0x98,0x19,0x81 }, { 0x4f,0xd1,0x9e,0x4f }, { 0xdc,0x7f,0xa3,0xdc }, { 0x22,0x66,0x44,0x22 }, { 0x2a,0x7e,0x54,0x2a }, { 0x90,0xab,0x3b,0x90 }, { 0x88,0x83,0x0b,0x88 }, { 0x46,0xca,0x8c,0x46 }, { 0xee,0x29,0xc7,0xee }, { 0xb8,0xd3,0x6b,0xb8 }, { 0x14,0x3c,0x28,0x14 }, { 0xde,0x79,0xa7,0xde }, { 0x5e,0xe2,0xbc,0x5e }, { 0x0b,0x1d,0x16,0x0b }, { 0xdb,0x76,0xad,0xdb }, { 0xe0,0x3b,0xdb,0xe0 }, { 0x32,0x56,0x64,0x32 }, { 0x3a,0x4e,0x74,0x3a }, { 0x0a,0x1e,0x14,0x0a }, { 0x49,0xdb,0x92,0x49 }, { 0x06,0x0a,0x0c,0x06 }, { 0x24,0x6c,0x48,0x24 }, { 0x5c,0xe4,0xb8,0x5c }, { 0xc2,0x5d,0x9f,0xc2 }, { 0xd3,0x6e,0xbd,0xd3 }, { 0xac,0xef,0x43,0xac }, { 0x62,0xa6,0xc4,0x62 }, { 0x91,0xa8,0x39,0x91 }, { 0x95,0xa4,0x31,0x95 }, { 0xe4,0x37,0xd3,0xe4 }, { 0x79,0x8b,0xf2,0x79 }, { 0xe7,0x32,0xd5,0xe7 }, { 0xc8,0x43,0x8b,0xc8 }, { 0x37,0x59,0x6e,0x37 }, { 0x6d,0xb7,0xda,0x6d }, { 0x8d,0x8c,0x01,0x8d }, { 0xd5,0x64,0xb1,0xd5 }, { 0x4e,0xd2,0x9c,0x4e }, { 0xa9,0xe0,0x49,0xa9 }, { 0x6c,0xb4,0xd8,0x6c }, { 0x56,0xfa,0xac,0x56 }, { 0xf4,0x07,0xf3,0xf4 }, { 0xea,0x25,0xcf,0xea }, { 0x65,0xaf,0xca,0x65 }, { 0x7a,0x8e,0xf4,0x7a }, { 0xae,0xe9,0x47,0xae }, { 0x08,0x18,0x10,0x08 }, { 0xba,0xd5,0x6f,0xba }, { 0x78,0x88,0xf0,0x78 }, { 0x25,0x6f,0x4a,0x25 }, { 0x2e,0x72,0x5c,0x2e }, { 0x1c,0x24,0x38,0x1c }, { 0xa6,0xf1,0x57,0xa6 }, { 0xb4,0xc7,0x73,0xb4 }, { 0xc6,0x51,0x97,0xc6 }, { 0xe8,0x23,0xcb,0xe8 }, { 0xdd,0x7c,0xa1,0xdd }, { 0x74,0x9c,0xe8,0x74 }, { 0x1f,0x21,0x3e,0x1f }, { 0x4b,0xdd,0x96,0x4b }, { 0xbd,0xdc,0x61,0xbd }, { 0x8b,0x86,0x0d,0x8b }, { 0x8a,0x85,0x0f,0x8a }, { 0x70,0x90,0xe0,0x70 }, { 0x3e,0x42,0x7c,0x3e }, { 0xb5,0xc4,0x71,0xb5 }, { 0x66,0xaa,0xcc,0x66 }, { 0x48,0xd8,0x90,0x48 }, { 0x03,0x05,0x06,0x03 }, { 0xf6,0x01,0xf7,0xf6 }, { 0x0e,0x12,0x1c,0x0e }, { 0x61,0xa3,0xc2,0x61 }, { 0x35,0x5f,0x6a,0x35 }, { 0x57,0xf9,0xae,0x57 }, { 0xb9,0xd0,0x69,0xb9 }, { 0x86,0x91,0x17,0x86 }, { 0xc1,0x58,0x99,0xc1 }, { 0x1d,0x27,0x3a,0x1d }, { 0x9e,0xb9,0x27,0x9e }, { 0xe1,0x38,0xd9,0xe1 }, { 0xf8,0x13,0xeb,0xf8 }, { 0x98,0xb3,0x2b,0x98 }, { 0x11,0x33,0x22,0x11 }, { 0x69,0xbb,0xd2,0x69 }, { 0xd9,0x70,0xa9,0xd9 }, { 0x8e,0x89,0x07,0x8e }, { 0x94,0xa7,0x33,0x94 }, { 0x9b,0xb6,0x2d,0x9b }, { 0x1e,0x22,0x3c,0x1e }, { 0x87,0x92,0x15,0x87 }, { 0xe9,0x20,0xc9,0xe9 }, { 0xce,0x49,0x87,0xce }, { 0x55,0xff,0xaa,0x55 }, { 0x28,0x78,0x50,0x28 }, { 0xdf,0x7a,0xa5,0xdf }, { 0x8c,0x8f,0x03,0x8c }, { 0xa1,0xf8,0x59,0xa1 }, { 0x89,0x80,0x09,0x89 }, { 0x0d,0x17,0x1a,0x0d }, { 0xbf,0xda,0x65,0xbf }, { 0xe6,0x31,0xd7,0xe6 }, { 0x42,0xc6,0x84,0x42 }, { 0x68,0xb8,0xd0,0x68 }, { 0x41,0xc3,0x82,0x41 }, { 0x99,0xb0,0x29,0x99 }, { 0x2d,0x77,0x5a,0x2d }, { 0x0f,0x11,0x1e,0x0f }, { 0xb0,0xcb,0x7b,0xb0 }, { 0x54,0xfc,0xa8,0x54 }, { 0xbb,0xd6,0x6d,0xbb }, { 0x16,0x3a,0x2c,0x16 } }; static const byte T4[256][4] = { { 0x63,0x63,0xa5,0xc6 }, { 0x7c,0x7c,0x84,0xf8 }, { 0x77,0x77,0x99,0xee }, { 0x7b,0x7b,0x8d,0xf6 }, { 0xf2,0xf2,0x0d,0xff }, { 0x6b,0x6b,0xbd,0xd6 }, { 0x6f,0x6f,0xb1,0xde }, { 0xc5,0xc5,0x54,0x91 }, { 0x30,0x30,0x50,0x60 }, { 0x01,0x01,0x03,0x02 }, { 0x67,0x67,0xa9,0xce }, { 0x2b,0x2b,0x7d,0x56 }, { 0xfe,0xfe,0x19,0xe7 }, { 0xd7,0xd7,0x62,0xb5 }, { 0xab,0xab,0xe6,0x4d }, { 0x76,0x76,0x9a,0xec }, { 0xca,0xca,0x45,0x8f }, { 0x82,0x82,0x9d,0x1f }, { 0xc9,0xc9,0x40,0x89 }, { 0x7d,0x7d,0x87,0xfa }, { 0xfa,0xfa,0x15,0xef }, { 0x59,0x59,0xeb,0xb2 }, { 0x47,0x47,0xc9,0x8e }, { 0xf0,0xf0,0x0b,0xfb }, { 0xad,0xad,0xec,0x41 }, { 0xd4,0xd4,0x67,0xb3 }, { 0xa2,0xa2,0xfd,0x5f }, { 0xaf,0xaf,0xea,0x45 }, { 0x9c,0x9c,0xbf,0x23 }, { 0xa4,0xa4,0xf7,0x53 }, { 0x72,0x72,0x96,0xe4 }, { 0xc0,0xc0,0x5b,0x9b }, { 0xb7,0xb7,0xc2,0x75 }, { 0xfd,0xfd,0x1c,0xe1 }, { 0x93,0x93,0xae,0x3d }, { 0x26,0x26,0x6a,0x4c }, { 0x36,0x36,0x5a,0x6c }, { 0x3f,0x3f,0x41,0x7e }, { 0xf7,0xf7,0x02,0xf5 }, { 0xcc,0xcc,0x4f,0x83 }, { 0x34,0x34,0x5c,0x68 }, { 0xa5,0xa5,0xf4,0x51 }, { 0xe5,0xe5,0x34,0xd1 }, { 0xf1,0xf1,0x08,0xf9 }, { 0x71,0x71,0x93,0xe2 }, { 0xd8,0xd8,0x73,0xab }, { 0x31,0x31,0x53,0x62 }, { 0x15,0x15,0x3f,0x2a }, { 0x04,0x04,0x0c,0x08 }, { 0xc7,0xc7,0x52,0x95 }, { 0x23,0x23,0x65,0x46 }, { 0xc3,0xc3,0x5e,0x9d }, { 0x18,0x18,0x28,0x30 }, { 0x96,0x96,0xa1,0x37 }, { 0x05,0x05,0x0f,0x0a }, { 0x9a,0x9a,0xb5,0x2f }, { 0x07,0x07,0x09,0x0e }, { 0x12,0x12,0x36,0x24 }, { 0x80,0x80,0x9b,0x1b }, { 0xe2,0xe2,0x3d,0xdf }, { 0xeb,0xeb,0x26,0xcd }, { 0x27,0x27,0x69,0x4e }, { 0xb2,0xb2,0xcd,0x7f }, { 0x75,0x75,0x9f,0xea }, { 0x09,0x09,0x1b,0x12 }, { 0x83,0x83,0x9e,0x1d }, { 0x2c,0x2c,0x74,0x58 }, { 0x1a,0x1a,0x2e,0x34 }, { 0x1b,0x1b,0x2d,0x36 }, { 0x6e,0x6e,0xb2,0xdc }, { 0x5a,0x5a,0xee,0xb4 }, { 0xa0,0xa0,0xfb,0x5b }, { 0x52,0x52,0xf6,0xa4 }, { 0x3b,0x3b,0x4d,0x76 }, { 0xd6,0xd6,0x61,0xb7 }, { 0xb3,0xb3,0xce,0x7d }, { 0x29,0x29,0x7b,0x52 }, { 0xe3,0xe3,0x3e,0xdd }, { 0x2f,0x2f,0x71,0x5e }, { 0x84,0x84,0x97,0x13 }, { 0x53,0x53,0xf5,0xa6 }, { 0xd1,0xd1,0x68,0xb9 }, { 0x00,0x00,0x00,0x00 }, { 0xed,0xed,0x2c,0xc1 }, { 0x20,0x20,0x60,0x40 }, { 0xfc,0xfc,0x1f,0xe3 }, { 0xb1,0xb1,0xc8,0x79 }, { 0x5b,0x5b,0xed,0xb6 }, { 0x6a,0x6a,0xbe,0xd4 }, { 0xcb,0xcb,0x46,0x8d }, { 0xbe,0xbe,0xd9,0x67 }, { 0x39,0x39,0x4b,0x72 }, { 0x4a,0x4a,0xde,0x94 }, { 0x4c,0x4c,0xd4,0x98 }, { 0x58,0x58,0xe8,0xb0 }, { 0xcf,0xcf,0x4a,0x85 }, { 0xd0,0xd0,0x6b,0xbb }, { 0xef,0xef,0x2a,0xc5 }, { 0xaa,0xaa,0xe5,0x4f }, { 0xfb,0xfb,0x16,0xed }, { 0x43,0x43,0xc5,0x86 }, { 0x4d,0x4d,0xd7,0x9a }, { 0x33,0x33,0x55,0x66 }, { 0x85,0x85,0x94,0x11 }, { 0x45,0x45,0xcf,0x8a }, { 0xf9,0xf9,0x10,0xe9 }, { 0x02,0x02,0x06,0x04 }, { 0x7f,0x7f,0x81,0xfe }, { 0x50,0x50,0xf0,0xa0 }, { 0x3c,0x3c,0x44,0x78 }, { 0x9f,0x9f,0xba,0x25 }, { 0xa8,0xa8,0xe3,0x4b }, { 0x51,0x51,0xf3,0xa2 }, { 0xa3,0xa3,0xfe,0x5d }, { 0x40,0x40,0xc0,0x80 }, { 0x8f,0x8f,0x8a,0x05 }, { 0x92,0x92,0xad,0x3f }, { 0x9d,0x9d,0xbc,0x21 }, { 0x38,0x38,0x48,0x70 }, { 0xf5,0xf5,0x04,0xf1 }, { 0xbc,0xbc,0xdf,0x63 }, { 0xb6,0xb6,0xc1,0x77 }, { 0xda,0xda,0x75,0xaf }, { 0x21,0x21,0x63,0x42 }, { 0x10,0x10,0x30,0x20 }, { 0xff,0xff,0x1a,0xe5 }, { 0xf3,0xf3,0x0e,0xfd }, { 0xd2,0xd2,0x6d,0xbf }, { 0xcd,0xcd,0x4c,0x81 }, { 0x0c,0x0c,0x14,0x18 }, { 0x13,0x13,0x35,0x26 }, { 0xec,0xec,0x2f,0xc3 }, { 0x5f,0x5f,0xe1,0xbe }, { 0x97,0x97,0xa2,0x35 }, { 0x44,0x44,0xcc,0x88 }, { 0x17,0x17,0x39,0x2e }, { 0xc4,0xc4,0x57,0x93 }, { 0xa7,0xa7,0xf2,0x55 }, { 0x7e,0x7e,0x82,0xfc }, { 0x3d,0x3d,0x47,0x7a }, { 0x64,0x64,0xac,0xc8 }, { 0x5d,0x5d,0xe7,0xba }, { 0x19,0x19,0x2b,0x32 }, { 0x73,0x73,0x95,0xe6 }, { 0x60,0x60,0xa0,0xc0 }, { 0x81,0x81,0x98,0x19 }, { 0x4f,0x4f,0xd1,0x9e }, { 0xdc,0xdc,0x7f,0xa3 }, { 0x22,0x22,0x66,0x44 }, { 0x2a,0x2a,0x7e,0x54 }, { 0x90,0x90,0xab,0x3b }, { 0x88,0x88,0x83,0x0b }, { 0x46,0x46,0xca,0x8c }, { 0xee,0xee,0x29,0xc7 }, { 0xb8,0xb8,0xd3,0x6b }, { 0x14,0x14,0x3c,0x28 }, { 0xde,0xde,0x79,0xa7 }, { 0x5e,0x5e,0xe2,0xbc }, { 0x0b,0x0b,0x1d,0x16 }, { 0xdb,0xdb,0x76,0xad }, { 0xe0,0xe0,0x3b,0xdb }, { 0x32,0x32,0x56,0x64 }, { 0x3a,0x3a,0x4e,0x74 }, { 0x0a,0x0a,0x1e,0x14 }, { 0x49,0x49,0xdb,0x92 }, { 0x06,0x06,0x0a,0x0c }, { 0x24,0x24,0x6c,0x48 }, { 0x5c,0x5c,0xe4,0xb8 }, { 0xc2,0xc2,0x5d,0x9f }, { 0xd3,0xd3,0x6e,0xbd }, { 0xac,0xac,0xef,0x43 }, { 0x62,0x62,0xa6,0xc4 }, { 0x91,0x91,0xa8,0x39 }, { 0x95,0x95,0xa4,0x31 }, { 0xe4,0xe4,0x37,0xd3 }, { 0x79,0x79,0x8b,0xf2 }, { 0xe7,0xe7,0x32,0xd5 }, { 0xc8,0xc8,0x43,0x8b }, { 0x37,0x37,0x59,0x6e }, { 0x6d,0x6d,0xb7,0xda }, { 0x8d,0x8d,0x8c,0x01 }, { 0xd5,0xd5,0x64,0xb1 }, { 0x4e,0x4e,0xd2,0x9c }, { 0xa9,0xa9,0xe0,0x49 }, { 0x6c,0x6c,0xb4,0xd8 }, { 0x56,0x56,0xfa,0xac }, { 0xf4,0xf4,0x07,0xf3 }, { 0xea,0xea,0x25,0xcf }, { 0x65,0x65,0xaf,0xca }, { 0x7a,0x7a,0x8e,0xf4 }, { 0xae,0xae,0xe9,0x47 }, { 0x08,0x08,0x18,0x10 }, { 0xba,0xba,0xd5,0x6f }, { 0x78,0x78,0x88,0xf0 }, { 0x25,0x25,0x6f,0x4a }, { 0x2e,0x2e,0x72,0x5c }, { 0x1c,0x1c,0x24,0x38 }, { 0xa6,0xa6,0xf1,0x57 }, { 0xb4,0xb4,0xc7,0x73 }, { 0xc6,0xc6,0x51,0x97 }, { 0xe8,0xe8,0x23,0xcb }, { 0xdd,0xdd,0x7c,0xa1 }, { 0x74,0x74,0x9c,0xe8 }, { 0x1f,0x1f,0x21,0x3e }, { 0x4b,0x4b,0xdd,0x96 }, { 0xbd,0xbd,0xdc,0x61 }, { 0x8b,0x8b,0x86,0x0d }, { 0x8a,0x8a,0x85,0x0f }, { 0x70,0x70,0x90,0xe0 }, { 0x3e,0x3e,0x42,0x7c }, { 0xb5,0xb5,0xc4,0x71 }, { 0x66,0x66,0xaa,0xcc }, { 0x48,0x48,0xd8,0x90 }, { 0x03,0x03,0x05,0x06 }, { 0xf6,0xf6,0x01,0xf7 }, { 0x0e,0x0e,0x12,0x1c }, { 0x61,0x61,0xa3,0xc2 }, { 0x35,0x35,0x5f,0x6a }, { 0x57,0x57,0xf9,0xae }, { 0xb9,0xb9,0xd0,0x69 }, { 0x86,0x86,0x91,0x17 }, { 0xc1,0xc1,0x58,0x99 }, { 0x1d,0x1d,0x27,0x3a }, { 0x9e,0x9e,0xb9,0x27 }, { 0xe1,0xe1,0x38,0xd9 }, { 0xf8,0xf8,0x13,0xeb }, { 0x98,0x98,0xb3,0x2b }, { 0x11,0x11,0x33,0x22 }, { 0x69,0x69,0xbb,0xd2 }, { 0xd9,0xd9,0x70,0xa9 }, { 0x8e,0x8e,0x89,0x07 }, { 0x94,0x94,0xa7,0x33 }, { 0x9b,0x9b,0xb6,0x2d }, { 0x1e,0x1e,0x22,0x3c }, { 0x87,0x87,0x92,0x15 }, { 0xe9,0xe9,0x20,0xc9 }, { 0xce,0xce,0x49,0x87 }, { 0x55,0x55,0xff,0xaa }, { 0x28,0x28,0x78,0x50 }, { 0xdf,0xdf,0x7a,0xa5 }, { 0x8c,0x8c,0x8f,0x03 }, { 0xa1,0xa1,0xf8,0x59 }, { 0x89,0x89,0x80,0x09 }, { 0x0d,0x0d,0x17,0x1a }, { 0xbf,0xbf,0xda,0x65 }, { 0xe6,0xe6,0x31,0xd7 }, { 0x42,0x42,0xc6,0x84 }, { 0x68,0x68,0xb8,0xd0 }, { 0x41,0x41,0xc3,0x82 }, { 0x99,0x99,0xb0,0x29 }, { 0x2d,0x2d,0x77,0x5a }, { 0x0f,0x0f,0x11,0x1e }, { 0xb0,0xb0,0xcb,0x7b }, { 0x54,0x54,0xfc,0xa8 }, { 0xbb,0xbb,0xd6,0x6d }, { 0x16,0x16,0x3a,0x2c } }; static const byte T5[256][4] = { { 0x51,0xf4,0xa7,0x50 }, { 0x7e,0x41,0x65,0x53 }, { 0x1a,0x17,0xa4,0xc3 }, { 0x3a,0x27,0x5e,0x96 }, { 0x3b,0xab,0x6b,0xcb }, { 0x1f,0x9d,0x45,0xf1 }, { 0xac,0xfa,0x58,0xab }, { 0x4b,0xe3,0x03,0x93 }, { 0x20,0x30,0xfa,0x55 }, { 0xad,0x76,0x6d,0xf6 }, { 0x88,0xcc,0x76,0x91 }, { 0xf5,0x02,0x4c,0x25 }, { 0x4f,0xe5,0xd7,0xfc }, { 0xc5,0x2a,0xcb,0xd7 }, { 0x26,0x35,0x44,0x80 }, { 0xb5,0x62,0xa3,0x8f }, { 0xde,0xb1,0x5a,0x49 }, { 0x25,0xba,0x1b,0x67 }, { 0x45,0xea,0x0e,0x98 }, { 0x5d,0xfe,0xc0,0xe1 }, { 0xc3,0x2f,0x75,0x02 }, { 0x81,0x4c,0xf0,0x12 }, { 0x8d,0x46,0x97,0xa3 }, { 0x6b,0xd3,0xf9,0xc6 }, { 0x03,0x8f,0x5f,0xe7 }, { 0x15,0x92,0x9c,0x95 }, { 0xbf,0x6d,0x7a,0xeb }, { 0x95,0x52,0x59,0xda }, { 0xd4,0xbe,0x83,0x2d }, { 0x58,0x74,0x21,0xd3 }, { 0x49,0xe0,0x69,0x29 }, { 0x8e,0xc9,0xc8,0x44 }, { 0x75,0xc2,0x89,0x6a }, { 0xf4,0x8e,0x79,0x78 }, { 0x99,0x58,0x3e,0x6b }, { 0x27,0xb9,0x71,0xdd }, { 0xbe,0xe1,0x4f,0xb6 }, { 0xf0,0x88,0xad,0x17 }, { 0xc9,0x20,0xac,0x66 }, { 0x7d,0xce,0x3a,0xb4 }, { 0x63,0xdf,0x4a,0x18 }, { 0xe5,0x1a,0x31,0x82 }, { 0x97,0x51,0x33,0x60 }, { 0x62,0x53,0x7f,0x45 }, { 0xb1,0x64,0x77,0xe0 }, { 0xbb,0x6b,0xae,0x84 }, { 0xfe,0x81,0xa0,0x1c }, { 0xf9,0x08,0x2b,0x94 }, { 0x70,0x48,0x68,0x58 }, { 0x8f,0x45,0xfd,0x19 }, { 0x94,0xde,0x6c,0x87 }, { 0x52,0x7b,0xf8,0xb7 }, { 0xab,0x73,0xd3,0x23 }, { 0x72,0x4b,0x02,0xe2 }, { 0xe3,0x1f,0x8f,0x57 }, { 0x66,0x55,0xab,0x2a }, { 0xb2,0xeb,0x28,0x07 }, { 0x2f,0xb5,0xc2,0x03 }, { 0x86,0xc5,0x7b,0x9a }, { 0xd3,0x37,0x08,0xa5 }, { 0x30,0x28,0x87,0xf2 }, { 0x23,0xbf,0xa5,0xb2 }, { 0x02,0x03,0x6a,0xba }, { 0xed,0x16,0x82,0x5c }, { 0x8a,0xcf,0x1c,0x2b }, { 0xa7,0x79,0xb4,0x92 }, { 0xf3,0x07,0xf2,0xf0 }, { 0x4e,0x69,0xe2,0xa1 }, { 0x65,0xda,0xf4,0xcd }, { 0x06,0x05,0xbe,0xd5 }, { 0xd1,0x34,0x62,0x1f }, { 0xc4,0xa6,0xfe,0x8a }, { 0x34,0x2e,0x53,0x9d }, { 0xa2,0xf3,0x55,0xa0 }, { 0x05,0x8a,0xe1,0x32 }, { 0xa4,0xf6,0xeb,0x75 }, { 0x0b,0x83,0xec,0x39 }, { 0x40,0x60,0xef,0xaa }, { 0x5e,0x71,0x9f,0x06 }, { 0xbd,0x6e,0x10,0x51 }, { 0x3e,0x21,0x8a,0xf9 }, { 0x96,0xdd,0x06,0x3d }, { 0xdd,0x3e,0x05,0xae }, { 0x4d,0xe6,0xbd,0x46 }, { 0x91,0x54,0x8d,0xb5 }, { 0x71,0xc4,0x5d,0x05 }, { 0x04,0x06,0xd4,0x6f }, { 0x60,0x50,0x15,0xff }, { 0x19,0x98,0xfb,0x24 }, { 0xd6,0xbd,0xe9,0x97 }, { 0x89,0x40,0x43,0xcc }, { 0x67,0xd9,0x9e,0x77 }, { 0xb0,0xe8,0x42,0xbd }, { 0x07,0x89,0x8b,0x88 }, { 0xe7,0x19,0x5b,0x38 }, { 0x79,0xc8,0xee,0xdb }, { 0xa1,0x7c,0x0a,0x47 }, { 0x7c,0x42,0x0f,0xe9 }, { 0xf8,0x84,0x1e,0xc9 }, { 0x00,0x00,0x00,0x00 }, { 0x09,0x80,0x86,0x83 }, { 0x32,0x2b,0xed,0x48 }, { 0x1e,0x11,0x70,0xac }, { 0x6c,0x5a,0x72,0x4e }, { 0xfd,0x0e,0xff,0xfb }, { 0x0f,0x85,0x38,0x56 }, { 0x3d,0xae,0xd5,0x1e }, { 0x36,0x2d,0x39,0x27 }, { 0x0a,0x0f,0xd9,0x64 }, { 0x68,0x5c,0xa6,0x21 }, { 0x9b,0x5b,0x54,0xd1 }, { 0x24,0x36,0x2e,0x3a }, { 0x0c,0x0a,0x67,0xb1 }, { 0x93,0x57,0xe7,0x0f }, { 0xb4,0xee,0x96,0xd2 }, { 0x1b,0x9b,0x91,0x9e }, { 0x80,0xc0,0xc5,0x4f }, { 0x61,0xdc,0x20,0xa2 }, { 0x5a,0x77,0x4b,0x69 }, { 0x1c,0x12,0x1a,0x16 }, { 0xe2,0x93,0xba,0x0a }, { 0xc0,0xa0,0x2a,0xe5 }, { 0x3c,0x22,0xe0,0x43 }, { 0x12,0x1b,0x17,0x1d }, { 0x0e,0x09,0x0d,0x0b }, { 0xf2,0x8b,0xc7,0xad }, { 0x2d,0xb6,0xa8,0xb9 }, { 0x14,0x1e,0xa9,0xc8 }, { 0x57,0xf1,0x19,0x85 }, { 0xaf,0x75,0x07,0x4c }, { 0xee,0x99,0xdd,0xbb }, { 0xa3,0x7f,0x60,0xfd }, { 0xf7,0x01,0x26,0x9f }, { 0x5c,0x72,0xf5,0xbc }, { 0x44,0x66,0x3b,0xc5 }, { 0x5b,0xfb,0x7e,0x34 }, { 0x8b,0x43,0x29,0x76 }, { 0xcb,0x23,0xc6,0xdc }, { 0xb6,0xed,0xfc,0x68 }, { 0xb8,0xe4,0xf1,0x63 }, { 0xd7,0x31,0xdc,0xca }, { 0x42,0x63,0x85,0x10 }, { 0x13,0x97,0x22,0x40 }, { 0x84,0xc6,0x11,0x20 }, { 0x85,0x4a,0x24,0x7d }, { 0xd2,0xbb,0x3d,0xf8 }, { 0xae,0xf9,0x32,0x11 }, { 0xc7,0x29,0xa1,0x6d }, { 0x1d,0x9e,0x2f,0x4b }, { 0xdc,0xb2,0x30,0xf3 }, { 0x0d,0x86,0x52,0xec }, { 0x77,0xc1,0xe3,0xd0 }, { 0x2b,0xb3,0x16,0x6c }, { 0xa9,0x70,0xb9,0x99 }, { 0x11,0x94,0x48,0xfa }, { 0x47,0xe9,0x64,0x22 }, { 0xa8,0xfc,0x8c,0xc4 }, { 0xa0,0xf0,0x3f,0x1a }, { 0x56,0x7d,0x2c,0xd8 }, { 0x22,0x33,0x90,0xef }, { 0x87,0x49,0x4e,0xc7 }, { 0xd9,0x38,0xd1,0xc1 }, { 0x8c,0xca,0xa2,0xfe }, { 0x98,0xd4,0x0b,0x36 }, { 0xa6,0xf5,0x81,0xcf }, { 0xa5,0x7a,0xde,0x28 }, { 0xda,0xb7,0x8e,0x26 }, { 0x3f,0xad,0xbf,0xa4 }, { 0x2c,0x3a,0x9d,0xe4 }, { 0x50,0x78,0x92,0x0d }, { 0x6a,0x5f,0xcc,0x9b }, { 0x54,0x7e,0x46,0x62 }, { 0xf6,0x8d,0x13,0xc2 }, { 0x90,0xd8,0xb8,0xe8 }, { 0x2e,0x39,0xf7,0x5e }, { 0x82,0xc3,0xaf,0xf5 }, { 0x9f,0x5d,0x80,0xbe }, { 0x69,0xd0,0x93,0x7c }, { 0x6f,0xd5,0x2d,0xa9 }, { 0xcf,0x25,0x12,0xb3 }, { 0xc8,0xac,0x99,0x3b }, { 0x10,0x18,0x7d,0xa7 }, { 0xe8,0x9c,0x63,0x6e }, { 0xdb,0x3b,0xbb,0x7b }, { 0xcd,0x26,0x78,0x09 }, { 0x6e,0x59,0x18,0xf4 }, { 0xec,0x9a,0xb7,0x01 }, { 0x83,0x4f,0x9a,0xa8 }, { 0xe6,0x95,0x6e,0x65 }, { 0xaa,0xff,0xe6,0x7e }, { 0x21,0xbc,0xcf,0x08 }, { 0xef,0x15,0xe8,0xe6 }, { 0xba,0xe7,0x9b,0xd9 }, { 0x4a,0x6f,0x36,0xce }, { 0xea,0x9f,0x09,0xd4 }, { 0x29,0xb0,0x7c,0xd6 }, { 0x31,0xa4,0xb2,0xaf }, { 0x2a,0x3f,0x23,0x31 }, { 0xc6,0xa5,0x94,0x30 }, { 0x35,0xa2,0x66,0xc0 }, { 0x74,0x4e,0xbc,0x37 }, { 0xfc,0x82,0xca,0xa6 }, { 0xe0,0x90,0xd0,0xb0 }, { 0x33,0xa7,0xd8,0x15 }, { 0xf1,0x04,0x98,0x4a }, { 0x41,0xec,0xda,0xf7 }, { 0x7f,0xcd,0x50,0x0e }, { 0x17,0x91,0xf6,0x2f }, { 0x76,0x4d,0xd6,0x8d }, { 0x43,0xef,0xb0,0x4d }, { 0xcc,0xaa,0x4d,0x54 }, { 0xe4,0x96,0x04,0xdf }, { 0x9e,0xd1,0xb5,0xe3 }, { 0x4c,0x6a,0x88,0x1b }, { 0xc1,0x2c,0x1f,0xb8 }, { 0x46,0x65,0x51,0x7f }, { 0x9d,0x5e,0xea,0x04 }, { 0x01,0x8c,0x35,0x5d }, { 0xfa,0x87,0x74,0x73 }, { 0xfb,0x0b,0x41,0x2e }, { 0xb3,0x67,0x1d,0x5a }, { 0x92,0xdb,0xd2,0x52 }, { 0xe9,0x10,0x56,0x33 }, { 0x6d,0xd6,0x47,0x13 }, { 0x9a,0xd7,0x61,0x8c }, { 0x37,0xa1,0x0c,0x7a }, { 0x59,0xf8,0x14,0x8e }, { 0xeb,0x13,0x3c,0x89 }, { 0xce,0xa9,0x27,0xee }, { 0xb7,0x61,0xc9,0x35 }, { 0xe1,0x1c,0xe5,0xed }, { 0x7a,0x47,0xb1,0x3c }, { 0x9c,0xd2,0xdf,0x59 }, { 0x55,0xf2,0x73,0x3f }, { 0x18,0x14,0xce,0x79 }, { 0x73,0xc7,0x37,0xbf }, { 0x53,0xf7,0xcd,0xea }, { 0x5f,0xfd,0xaa,0x5b }, { 0xdf,0x3d,0x6f,0x14 }, { 0x78,0x44,0xdb,0x86 }, { 0xca,0xaf,0xf3,0x81 }, { 0xb9,0x68,0xc4,0x3e }, { 0x38,0x24,0x34,0x2c }, { 0xc2,0xa3,0x40,0x5f }, { 0x16,0x1d,0xc3,0x72 }, { 0xbc,0xe2,0x25,0x0c }, { 0x28,0x3c,0x49,0x8b }, { 0xff,0x0d,0x95,0x41 }, { 0x39,0xa8,0x01,0x71 }, { 0x08,0x0c,0xb3,0xde }, { 0xd8,0xb4,0xe4,0x9c }, { 0x64,0x56,0xc1,0x90 }, { 0x7b,0xcb,0x84,0x61 }, { 0xd5,0x32,0xb6,0x70 }, { 0x48,0x6c,0x5c,0x74 }, { 0xd0,0xb8,0x57,0x42 } }; static const byte T6[256][4] = { { 0x50,0x51,0xf4,0xa7 }, { 0x53,0x7e,0x41,0x65 }, { 0xc3,0x1a,0x17,0xa4 }, { 0x96,0x3a,0x27,0x5e }, { 0xcb,0x3b,0xab,0x6b }, { 0xf1,0x1f,0x9d,0x45 }, { 0xab,0xac,0xfa,0x58 }, { 0x93,0x4b,0xe3,0x03 }, { 0x55,0x20,0x30,0xfa }, { 0xf6,0xad,0x76,0x6d }, { 0x91,0x88,0xcc,0x76 }, { 0x25,0xf5,0x02,0x4c }, { 0xfc,0x4f,0xe5,0xd7 }, { 0xd7,0xc5,0x2a,0xcb }, { 0x80,0x26,0x35,0x44 }, { 0x8f,0xb5,0x62,0xa3 }, { 0x49,0xde,0xb1,0x5a }, { 0x67,0x25,0xba,0x1b }, { 0x98,0x45,0xea,0x0e }, { 0xe1,0x5d,0xfe,0xc0 }, { 0x02,0xc3,0x2f,0x75 }, { 0x12,0x81,0x4c,0xf0 }, { 0xa3,0x8d,0x46,0x97 }, { 0xc6,0x6b,0xd3,0xf9 }, { 0xe7,0x03,0x8f,0x5f }, { 0x95,0x15,0x92,0x9c }, { 0xeb,0xbf,0x6d,0x7a }, { 0xda,0x95,0x52,0x59 }, { 0x2d,0xd4,0xbe,0x83 }, { 0xd3,0x58,0x74,0x21 }, { 0x29,0x49,0xe0,0x69 }, { 0x44,0x8e,0xc9,0xc8 }, { 0x6a,0x75,0xc2,0x89 }, { 0x78,0xf4,0x8e,0x79 }, { 0x6b,0x99,0x58,0x3e }, { 0xdd,0x27,0xb9,0x71 }, { 0xb6,0xbe,0xe1,0x4f }, { 0x17,0xf0,0x88,0xad }, { 0x66,0xc9,0x20,0xac }, { 0xb4,0x7d,0xce,0x3a }, { 0x18,0x63,0xdf,0x4a }, { 0x82,0xe5,0x1a,0x31 }, { 0x60,0x97,0x51,0x33 }, { 0x45,0x62,0x53,0x7f }, { 0xe0,0xb1,0x64,0x77 }, { 0x84,0xbb,0x6b,0xae }, { 0x1c,0xfe,0x81,0xa0 }, { 0x94,0xf9,0x08,0x2b }, { 0x58,0x70,0x48,0x68 }, { 0x19,0x8f,0x45,0xfd }, { 0x87,0x94,0xde,0x6c }, { 0xb7,0x52,0x7b,0xf8 }, { 0x23,0xab,0x73,0xd3 }, { 0xe2,0x72,0x4b,0x02 }, { 0x57,0xe3,0x1f,0x8f }, { 0x2a,0x66,0x55,0xab }, { 0x07,0xb2,0xeb,0x28 }, { 0x03,0x2f,0xb5,0xc2 }, { 0x9a,0x86,0xc5,0x7b }, { 0xa5,0xd3,0x37,0x08 }, { 0xf2,0x30,0x28,0x87 }, { 0xb2,0x23,0xbf,0xa5 }, { 0xba,0x02,0x03,0x6a }, { 0x5c,0xed,0x16,0x82 }, { 0x2b,0x8a,0xcf,0x1c }, { 0x92,0xa7,0x79,0xb4 }, { 0xf0,0xf3,0x07,0xf2 }, { 0xa1,0x4e,0x69,0xe2 }, { 0xcd,0x65,0xda,0xf4 }, { 0xd5,0x06,0x05,0xbe }, { 0x1f,0xd1,0x34,0x62 }, { 0x8a,0xc4,0xa6,0xfe }, { 0x9d,0x34,0x2e,0x53 }, { 0xa0,0xa2,0xf3,0x55 }, { 0x32,0x05,0x8a,0xe1 }, { 0x75,0xa4,0xf6,0xeb }, { 0x39,0x0b,0x83,0xec }, { 0xaa,0x40,0x60,0xef }, { 0x06,0x5e,0x71,0x9f }, { 0x51,0xbd,0x6e,0x10 }, { 0xf9,0x3e,0x21,0x8a }, { 0x3d,0x96,0xdd,0x06 }, { 0xae,0xdd,0x3e,0x05 }, { 0x46,0x4d,0xe6,0xbd }, { 0xb5,0x91,0x54,0x8d }, { 0x05,0x71,0xc4,0x5d }, { 0x6f,0x04,0x06,0xd4 }, { 0xff,0x60,0x50,0x15 }, { 0x24,0x19,0x98,0xfb }, { 0x97,0xd6,0xbd,0xe9 }, { 0xcc,0x89,0x40,0x43 }, { 0x77,0x67,0xd9,0x9e }, { 0xbd,0xb0,0xe8,0x42 }, { 0x88,0x07,0x89,0x8b }, { 0x38,0xe7,0x19,0x5b }, { 0xdb,0x79,0xc8,0xee }, { 0x47,0xa1,0x7c,0x0a }, { 0xe9,0x7c,0x42,0x0f }, { 0xc9,0xf8,0x84,0x1e }, { 0x00,0x00,0x00,0x00 }, { 0x83,0x09,0x80,0x86 }, { 0x48,0x32,0x2b,0xed }, { 0xac,0x1e,0x11,0x70 }, { 0x4e,0x6c,0x5a,0x72 }, { 0xfb,0xfd,0x0e,0xff }, { 0x56,0x0f,0x85,0x38 }, { 0x1e,0x3d,0xae,0xd5 }, { 0x27,0x36,0x2d,0x39 }, { 0x64,0x0a,0x0f,0xd9 }, { 0x21,0x68,0x5c,0xa6 }, { 0xd1,0x9b,0x5b,0x54 }, { 0x3a,0x24,0x36,0x2e }, { 0xb1,0x0c,0x0a,0x67 }, { 0x0f,0x93,0x57,0xe7 }, { 0xd2,0xb4,0xee,0x96 }, { 0x9e,0x1b,0x9b,0x91 }, { 0x4f,0x80,0xc0,0xc5 }, { 0xa2,0x61,0xdc,0x20 }, { 0x69,0x5a,0x77,0x4b }, { 0x16,0x1c,0x12,0x1a }, { 0x0a,0xe2,0x93,0xba }, { 0xe5,0xc0,0xa0,0x2a }, { 0x43,0x3c,0x22,0xe0 }, { 0x1d,0x12,0x1b,0x17 }, { 0x0b,0x0e,0x09,0x0d }, { 0xad,0xf2,0x8b,0xc7 }, { 0xb9,0x2d,0xb6,0xa8 }, { 0xc8,0x14,0x1e,0xa9 }, { 0x85,0x57,0xf1,0x19 }, { 0x4c,0xaf,0x75,0x07 }, { 0xbb,0xee,0x99,0xdd }, { 0xfd,0xa3,0x7f,0x60 }, { 0x9f,0xf7,0x01,0x26 }, { 0xbc,0x5c,0x72,0xf5 }, { 0xc5,0x44,0x66,0x3b }, { 0x34,0x5b,0xfb,0x7e }, { 0x76,0x8b,0x43,0x29 }, { 0xdc,0xcb,0x23,0xc6 }, { 0x68,0xb6,0xed,0xfc }, { 0x63,0xb8,0xe4,0xf1 }, { 0xca,0xd7,0x31,0xdc }, { 0x10,0x42,0x63,0x85 }, { 0x40,0x13,0x97,0x22 }, { 0x20,0x84,0xc6,0x11 }, { 0x7d,0x85,0x4a,0x24 }, { 0xf8,0xd2,0xbb,0x3d }, { 0x11,0xae,0xf9,0x32 }, { 0x6d,0xc7,0x29,0xa1 }, { 0x4b,0x1d,0x9e,0x2f }, { 0xf3,0xdc,0xb2,0x30 }, { 0xec,0x0d,0x86,0x52 }, { 0xd0,0x77,0xc1,0xe3 }, { 0x6c,0x2b,0xb3,0x16 }, { 0x99,0xa9,0x70,0xb9 }, { 0xfa,0x11,0x94,0x48 }, { 0x22,0x47,0xe9,0x64 }, { 0xc4,0xa8,0xfc,0x8c }, { 0x1a,0xa0,0xf0,0x3f }, { 0xd8,0x56,0x7d,0x2c }, { 0xef,0x22,0x33,0x90 }, { 0xc7,0x87,0x49,0x4e }, { 0xc1,0xd9,0x38,0xd1 }, { 0xfe,0x8c,0xca,0xa2 }, { 0x36,0x98,0xd4,0x0b }, { 0xcf,0xa6,0xf5,0x81 }, { 0x28,0xa5,0x7a,0xde }, { 0x26,0xda,0xb7,0x8e }, { 0xa4,0x3f,0xad,0xbf }, { 0xe4,0x2c,0x3a,0x9d }, { 0x0d,0x50,0x78,0x92 }, { 0x9b,0x6a,0x5f,0xcc }, { 0x62,0x54,0x7e,0x46 }, { 0xc2,0xf6,0x8d,0x13 }, { 0xe8,0x90,0xd8,0xb8 }, { 0x5e,0x2e,0x39,0xf7 }, { 0xf5,0x82,0xc3,0xaf }, { 0xbe,0x9f,0x5d,0x80 }, { 0x7c,0x69,0xd0,0x93 }, { 0xa9,0x6f,0xd5,0x2d }, { 0xb3,0xcf,0x25,0x12 }, { 0x3b,0xc8,0xac,0x99 }, { 0xa7,0x10,0x18,0x7d }, { 0x6e,0xe8,0x9c,0x63 }, { 0x7b,0xdb,0x3b,0xbb }, { 0x09,0xcd,0x26,0x78 }, { 0xf4,0x6e,0x59,0x18 }, { 0x01,0xec,0x9a,0xb7 }, { 0xa8,0x83,0x4f,0x9a }, { 0x65,0xe6,0x95,0x6e }, { 0x7e,0xaa,0xff,0xe6 }, { 0x08,0x21,0xbc,0xcf }, { 0xe6,0xef,0x15,0xe8 }, { 0xd9,0xba,0xe7,0x9b }, { 0xce,0x4a,0x6f,0x36 }, { 0xd4,0xea,0x9f,0x09 }, { 0xd6,0x29,0xb0,0x7c }, { 0xaf,0x31,0xa4,0xb2 }, { 0x31,0x2a,0x3f,0x23 }, { 0x30,0xc6,0xa5,0x94 }, { 0xc0,0x35,0xa2,0x66 }, { 0x37,0x74,0x4e,0xbc }, { 0xa6,0xfc,0x82,0xca }, { 0xb0,0xe0,0x90,0xd0 }, { 0x15,0x33,0xa7,0xd8 }, { 0x4a,0xf1,0x04,0x98 }, { 0xf7,0x41,0xec,0xda }, { 0x0e,0x7f,0xcd,0x50 }, { 0x2f,0x17,0x91,0xf6 }, { 0x8d,0x76,0x4d,0xd6 }, { 0x4d,0x43,0xef,0xb0 }, { 0x54,0xcc,0xaa,0x4d }, { 0xdf,0xe4,0x96,0x04 }, { 0xe3,0x9e,0xd1,0xb5 }, { 0x1b,0x4c,0x6a,0x88 }, { 0xb8,0xc1,0x2c,0x1f }, { 0x7f,0x46,0x65,0x51 }, { 0x04,0x9d,0x5e,0xea }, { 0x5d,0x01,0x8c,0x35 }, { 0x73,0xfa,0x87,0x74 }, { 0x2e,0xfb,0x0b,0x41 }, { 0x5a,0xb3,0x67,0x1d }, { 0x52,0x92,0xdb,0xd2 }, { 0x33,0xe9,0x10,0x56 }, { 0x13,0x6d,0xd6,0x47 }, { 0x8c,0x9a,0xd7,0x61 }, { 0x7a,0x37,0xa1,0x0c }, { 0x8e,0x59,0xf8,0x14 }, { 0x89,0xeb,0x13,0x3c }, { 0xee,0xce,0xa9,0x27 }, { 0x35,0xb7,0x61,0xc9 }, { 0xed,0xe1,0x1c,0xe5 }, { 0x3c,0x7a,0x47,0xb1 }, { 0x59,0x9c,0xd2,0xdf }, { 0x3f,0x55,0xf2,0x73 }, { 0x79,0x18,0x14,0xce }, { 0xbf,0x73,0xc7,0x37 }, { 0xea,0x53,0xf7,0xcd }, { 0x5b,0x5f,0xfd,0xaa }, { 0x14,0xdf,0x3d,0x6f }, { 0x86,0x78,0x44,0xdb }, { 0x81,0xca,0xaf,0xf3 }, { 0x3e,0xb9,0x68,0xc4 }, { 0x2c,0x38,0x24,0x34 }, { 0x5f,0xc2,0xa3,0x40 }, { 0x72,0x16,0x1d,0xc3 }, { 0x0c,0xbc,0xe2,0x25 }, { 0x8b,0x28,0x3c,0x49 }, { 0x41,0xff,0x0d,0x95 }, { 0x71,0x39,0xa8,0x01 }, { 0xde,0x08,0x0c,0xb3 }, { 0x9c,0xd8,0xb4,0xe4 }, { 0x90,0x64,0x56,0xc1 }, { 0x61,0x7b,0xcb,0x84 }, { 0x70,0xd5,0x32,0xb6 }, { 0x74,0x48,0x6c,0x5c }, { 0x42,0xd0,0xb8,0x57 } }; static const byte T7[256][4] = { { 0xa7,0x50,0x51,0xf4 }, { 0x65,0x53,0x7e,0x41 }, { 0xa4,0xc3,0x1a,0x17 }, { 0x5e,0x96,0x3a,0x27 }, { 0x6b,0xcb,0x3b,0xab }, { 0x45,0xf1,0x1f,0x9d }, { 0x58,0xab,0xac,0xfa }, { 0x03,0x93,0x4b,0xe3 }, { 0xfa,0x55,0x20,0x30 }, { 0x6d,0xf6,0xad,0x76 }, { 0x76,0x91,0x88,0xcc }, { 0x4c,0x25,0xf5,0x02 }, { 0xd7,0xfc,0x4f,0xe5 }, { 0xcb,0xd7,0xc5,0x2a }, { 0x44,0x80,0x26,0x35 }, { 0xa3,0x8f,0xb5,0x62 }, { 0x5a,0x49,0xde,0xb1 }, { 0x1b,0x67,0x25,0xba }, { 0x0e,0x98,0x45,0xea }, { 0xc0,0xe1,0x5d,0xfe }, { 0x75,0x02,0xc3,0x2f }, { 0xf0,0x12,0x81,0x4c }, { 0x97,0xa3,0x8d,0x46 }, { 0xf9,0xc6,0x6b,0xd3 }, { 0x5f,0xe7,0x03,0x8f }, { 0x9c,0x95,0x15,0x92 }, { 0x7a,0xeb,0xbf,0x6d }, { 0x59,0xda,0x95,0x52 }, { 0x83,0x2d,0xd4,0xbe }, { 0x21,0xd3,0x58,0x74 }, { 0x69,0x29,0x49,0xe0 }, { 0xc8,0x44,0x8e,0xc9 }, { 0x89,0x6a,0x75,0xc2 }, { 0x79,0x78,0xf4,0x8e }, { 0x3e,0x6b,0x99,0x58 }, { 0x71,0xdd,0x27,0xb9 }, { 0x4f,0xb6,0xbe,0xe1 }, { 0xad,0x17,0xf0,0x88 }, { 0xac,0x66,0xc9,0x20 }, { 0x3a,0xb4,0x7d,0xce }, { 0x4a,0x18,0x63,0xdf }, { 0x31,0x82,0xe5,0x1a }, { 0x33,0x60,0x97,0x51 }, { 0x7f,0x45,0x62,0x53 }, { 0x77,0xe0,0xb1,0x64 }, { 0xae,0x84,0xbb,0x6b }, { 0xa0,0x1c,0xfe,0x81 }, { 0x2b,0x94,0xf9,0x08 }, { 0x68,0x58,0x70,0x48 }, { 0xfd,0x19,0x8f,0x45 }, { 0x6c,0x87,0x94,0xde }, { 0xf8,0xb7,0x52,0x7b }, { 0xd3,0x23,0xab,0x73 }, { 0x02,0xe2,0x72,0x4b }, { 0x8f,0x57,0xe3,0x1f }, { 0xab,0x2a,0x66,0x55 }, { 0x28,0x07,0xb2,0xeb }, { 0xc2,0x03,0x2f,0xb5 }, { 0x7b,0x9a,0x86,0xc5 }, { 0x08,0xa5,0xd3,0x37 }, { 0x87,0xf2,0x30,0x28 }, { 0xa5,0xb2,0x23,0xbf }, { 0x6a,0xba,0x02,0x03 }, { 0x82,0x5c,0xed,0x16 }, { 0x1c,0x2b,0x8a,0xcf }, { 0xb4,0x92,0xa7,0x79 }, { 0xf2,0xf0,0xf3,0x07 }, { 0xe2,0xa1,0x4e,0x69 }, { 0xf4,0xcd,0x65,0xda }, { 0xbe,0xd5,0x06,0x05 }, { 0x62,0x1f,0xd1,0x34 }, { 0xfe,0x8a,0xc4,0xa6 }, { 0x53,0x9d,0x34,0x2e }, { 0x55,0xa0,0xa2,0xf3 }, { 0xe1,0x32,0x05,0x8a }, { 0xeb,0x75,0xa4,0xf6 }, { 0xec,0x39,0x0b,0x83 }, { 0xef,0xaa,0x40,0x60 }, { 0x9f,0x06,0x5e,0x71 }, { 0x10,0x51,0xbd,0x6e }, { 0x8a,0xf9,0x3e,0x21 }, { 0x06,0x3d,0x96,0xdd }, { 0x05,0xae,0xdd,0x3e }, { 0xbd,0x46,0x4d,0xe6 }, { 0x8d,0xb5,0x91,0x54 }, { 0x5d,0x05,0x71,0xc4 }, { 0xd4,0x6f,0x04,0x06 }, { 0x15,0xff,0x60,0x50 }, { 0xfb,0x24,0x19,0x98 }, { 0xe9,0x97,0xd6,0xbd }, { 0x43,0xcc,0x89,0x40 }, { 0x9e,0x77,0x67,0xd9 }, { 0x42,0xbd,0xb0,0xe8 }, { 0x8b,0x88,0x07,0x89 }, { 0x5b,0x38,0xe7,0x19 }, { 0xee,0xdb,0x79,0xc8 }, { 0x0a,0x47,0xa1,0x7c }, { 0x0f,0xe9,0x7c,0x42 }, { 0x1e,0xc9,0xf8,0x84 }, { 0x00,0x00,0x00,0x00 }, { 0x86,0x83,0x09,0x80 }, { 0xed,0x48,0x32,0x2b }, { 0x70,0xac,0x1e,0x11 }, { 0x72,0x4e,0x6c,0x5a }, { 0xff,0xfb,0xfd,0x0e }, { 0x38,0x56,0x0f,0x85 }, { 0xd5,0x1e,0x3d,0xae }, { 0x39,0x27,0x36,0x2d }, { 0xd9,0x64,0x0a,0x0f }, { 0xa6,0x21,0x68,0x5c }, { 0x54,0xd1,0x9b,0x5b }, { 0x2e,0x3a,0x24,0x36 }, { 0x67,0xb1,0x0c,0x0a }, { 0xe7,0x0f,0x93,0x57 }, { 0x96,0xd2,0xb4,0xee }, { 0x91,0x9e,0x1b,0x9b }, { 0xc5,0x4f,0x80,0xc0 }, { 0x20,0xa2,0x61,0xdc }, { 0x4b,0x69,0x5a,0x77 }, { 0x1a,0x16,0x1c,0x12 }, { 0xba,0x0a,0xe2,0x93 }, { 0x2a,0xe5,0xc0,0xa0 }, { 0xe0,0x43,0x3c,0x22 }, { 0x17,0x1d,0x12,0x1b }, { 0x0d,0x0b,0x0e,0x09 }, { 0xc7,0xad,0xf2,0x8b }, { 0xa8,0xb9,0x2d,0xb6 }, { 0xa9,0xc8,0x14,0x1e }, { 0x19,0x85,0x57,0xf1 }, { 0x07,0x4c,0xaf,0x75 }, { 0xdd,0xbb,0xee,0x99 }, { 0x60,0xfd,0xa3,0x7f }, { 0x26,0x9f,0xf7,0x01 }, { 0xf5,0xbc,0x5c,0x72 }, { 0x3b,0xc5,0x44,0x66 }, { 0x7e,0x34,0x5b,0xfb }, { 0x29,0x76,0x8b,0x43 }, { 0xc6,0xdc,0xcb,0x23 }, { 0xfc,0x68,0xb6,0xed }, { 0xf1,0x63,0xb8,0xe4 }, { 0xdc,0xca,0xd7,0x31 }, { 0x85,0x10,0x42,0x63 }, { 0x22,0x40,0x13,0x97 }, { 0x11,0x20,0x84,0xc6 }, { 0x24,0x7d,0x85,0x4a }, { 0x3d,0xf8,0xd2,0xbb }, { 0x32,0x11,0xae,0xf9 }, { 0xa1,0x6d,0xc7,0x29 }, { 0x2f,0x4b,0x1d,0x9e }, { 0x30,0xf3,0xdc,0xb2 }, { 0x52,0xec,0x0d,0x86 }, { 0xe3,0xd0,0x77,0xc1 }, { 0x16,0x6c,0x2b,0xb3 }, { 0xb9,0x99,0xa9,0x70 }, { 0x48,0xfa,0x11,0x94 }, { 0x64,0x22,0x47,0xe9 }, { 0x8c,0xc4,0xa8,0xfc }, { 0x3f,0x1a,0xa0,0xf0 }, { 0x2c,0xd8,0x56,0x7d }, { 0x90,0xef,0x22,0x33 }, { 0x4e,0xc7,0x87,0x49 }, { 0xd1,0xc1,0xd9,0x38 }, { 0xa2,0xfe,0x8c,0xca }, { 0x0b,0x36,0x98,0xd4 }, { 0x81,0xcf,0xa6,0xf5 }, { 0xde,0x28,0xa5,0x7a }, { 0x8e,0x26,0xda,0xb7 }, { 0xbf,0xa4,0x3f,0xad }, { 0x9d,0xe4,0x2c,0x3a }, { 0x92,0x0d,0x50,0x78 }, { 0xcc,0x9b,0x6a,0x5f }, { 0x46,0x62,0x54,0x7e }, { 0x13,0xc2,0xf6,0x8d }, { 0xb8,0xe8,0x90,0xd8 }, { 0xf7,0x5e,0x2e,0x39 }, { 0xaf,0xf5,0x82,0xc3 }, { 0x80,0xbe,0x9f,0x5d }, { 0x93,0x7c,0x69,0xd0 }, { 0x2d,0xa9,0x6f,0xd5 }, { 0x12,0xb3,0xcf,0x25 }, { 0x99,0x3b,0xc8,0xac }, { 0x7d,0xa7,0x10,0x18 }, { 0x63,0x6e,0xe8,0x9c }, { 0xbb,0x7b,0xdb,0x3b }, { 0x78,0x09,0xcd,0x26 }, { 0x18,0xf4,0x6e,0x59 }, { 0xb7,0x01,0xec,0x9a }, { 0x9a,0xa8,0x83,0x4f }, { 0x6e,0x65,0xe6,0x95 }, { 0xe6,0x7e,0xaa,0xff }, { 0xcf,0x08,0x21,0xbc }, { 0xe8,0xe6,0xef,0x15 }, { 0x9b,0xd9,0xba,0xe7 }, { 0x36,0xce,0x4a,0x6f }, { 0x09,0xd4,0xea,0x9f }, { 0x7c,0xd6,0x29,0xb0 }, { 0xb2,0xaf,0x31,0xa4 }, { 0x23,0x31,0x2a,0x3f }, { 0x94,0x30,0xc6,0xa5 }, { 0x66,0xc0,0x35,0xa2 }, { 0xbc,0x37,0x74,0x4e }, { 0xca,0xa6,0xfc,0x82 }, { 0xd0,0xb0,0xe0,0x90 }, { 0xd8,0x15,0x33,0xa7 }, { 0x98,0x4a,0xf1,0x04 }, { 0xda,0xf7,0x41,0xec }, { 0x50,0x0e,0x7f,0xcd }, { 0xf6,0x2f,0x17,0x91 }, { 0xd6,0x8d,0x76,0x4d }, { 0xb0,0x4d,0x43,0xef }, { 0x4d,0x54,0xcc,0xaa }, { 0x04,0xdf,0xe4,0x96 }, { 0xb5,0xe3,0x9e,0xd1 }, { 0x88,0x1b,0x4c,0x6a }, { 0x1f,0xb8,0xc1,0x2c }, { 0x51,0x7f,0x46,0x65 }, { 0xea,0x04,0x9d,0x5e }, { 0x35,0x5d,0x01,0x8c }, { 0x74,0x73,0xfa,0x87 }, { 0x41,0x2e,0xfb,0x0b }, { 0x1d,0x5a,0xb3,0x67 }, { 0xd2,0x52,0x92,0xdb }, { 0x56,0x33,0xe9,0x10 }, { 0x47,0x13,0x6d,0xd6 }, { 0x61,0x8c,0x9a,0xd7 }, { 0x0c,0x7a,0x37,0xa1 }, { 0x14,0x8e,0x59,0xf8 }, { 0x3c,0x89,0xeb,0x13 }, { 0x27,0xee,0xce,0xa9 }, { 0xc9,0x35,0xb7,0x61 }, { 0xe5,0xed,0xe1,0x1c }, { 0xb1,0x3c,0x7a,0x47 }, { 0xdf,0x59,0x9c,0xd2 }, { 0x73,0x3f,0x55,0xf2 }, { 0xce,0x79,0x18,0x14 }, { 0x37,0xbf,0x73,0xc7 }, { 0xcd,0xea,0x53,0xf7 }, { 0xaa,0x5b,0x5f,0xfd }, { 0x6f,0x14,0xdf,0x3d }, { 0xdb,0x86,0x78,0x44 }, { 0xf3,0x81,0xca,0xaf }, { 0xc4,0x3e,0xb9,0x68 }, { 0x34,0x2c,0x38,0x24 }, { 0x40,0x5f,0xc2,0xa3 }, { 0xc3,0x72,0x16,0x1d }, { 0x25,0x0c,0xbc,0xe2 }, { 0x49,0x8b,0x28,0x3c }, { 0x95,0x41,0xff,0x0d }, { 0x01,0x71,0x39,0xa8 }, { 0xb3,0xde,0x08,0x0c }, { 0xe4,0x9c,0xd8,0xb4 }, { 0xc1,0x90,0x64,0x56 }, { 0x84,0x61,0x7b,0xcb }, { 0xb6,0x70,0xd5,0x32 }, { 0x5c,0x74,0x48,0x6c }, { 0x57,0x42,0xd0,0xb8 } }; static const byte T8[256][4] = { { 0xf4,0xa7,0x50,0x51 }, { 0x41,0x65,0x53,0x7e }, { 0x17,0xa4,0xc3,0x1a }, { 0x27,0x5e,0x96,0x3a }, { 0xab,0x6b,0xcb,0x3b }, { 0x9d,0x45,0xf1,0x1f }, { 0xfa,0x58,0xab,0xac }, { 0xe3,0x03,0x93,0x4b }, { 0x30,0xfa,0x55,0x20 }, { 0x76,0x6d,0xf6,0xad }, { 0xcc,0x76,0x91,0x88 }, { 0x02,0x4c,0x25,0xf5 }, { 0xe5,0xd7,0xfc,0x4f }, { 0x2a,0xcb,0xd7,0xc5 }, { 0x35,0x44,0x80,0x26 }, { 0x62,0xa3,0x8f,0xb5 }, { 0xb1,0x5a,0x49,0xde }, { 0xba,0x1b,0x67,0x25 }, { 0xea,0x0e,0x98,0x45 }, { 0xfe,0xc0,0xe1,0x5d }, { 0x2f,0x75,0x02,0xc3 }, { 0x4c,0xf0,0x12,0x81 }, { 0x46,0x97,0xa3,0x8d }, { 0xd3,0xf9,0xc6,0x6b }, { 0x8f,0x5f,0xe7,0x03 }, { 0x92,0x9c,0x95,0x15 }, { 0x6d,0x7a,0xeb,0xbf }, { 0x52,0x59,0xda,0x95 }, { 0xbe,0x83,0x2d,0xd4 }, { 0x74,0x21,0xd3,0x58 }, { 0xe0,0x69,0x29,0x49 }, { 0xc9,0xc8,0x44,0x8e }, { 0xc2,0x89,0x6a,0x75 }, { 0x8e,0x79,0x78,0xf4 }, { 0x58,0x3e,0x6b,0x99 }, { 0xb9,0x71,0xdd,0x27 }, { 0xe1,0x4f,0xb6,0xbe }, { 0x88,0xad,0x17,0xf0 }, { 0x20,0xac,0x66,0xc9 }, { 0xce,0x3a,0xb4,0x7d }, { 0xdf,0x4a,0x18,0x63 }, { 0x1a,0x31,0x82,0xe5 }, { 0x51,0x33,0x60,0x97 }, { 0x53,0x7f,0x45,0x62 }, { 0x64,0x77,0xe0,0xb1 }, { 0x6b,0xae,0x84,0xbb }, { 0x81,0xa0,0x1c,0xfe }, { 0x08,0x2b,0x94,0xf9 }, { 0x48,0x68,0x58,0x70 }, { 0x45,0xfd,0x19,0x8f }, { 0xde,0x6c,0x87,0x94 }, { 0x7b,0xf8,0xb7,0x52 }, { 0x73,0xd3,0x23,0xab }, { 0x4b,0x02,0xe2,0x72 }, { 0x1f,0x8f,0x57,0xe3 }, { 0x55,0xab,0x2a,0x66 }, { 0xeb,0x28,0x07,0xb2 }, { 0xb5,0xc2,0x03,0x2f }, { 0xc5,0x7b,0x9a,0x86 }, { 0x37,0x08,0xa5,0xd3 }, { 0x28,0x87,0xf2,0x30 }, { 0xbf,0xa5,0xb2,0x23 }, { 0x03,0x6a,0xba,0x02 }, { 0x16,0x82,0x5c,0xed }, { 0xcf,0x1c,0x2b,0x8a }, { 0x79,0xb4,0x92,0xa7 }, { 0x07,0xf2,0xf0,0xf3 }, { 0x69,0xe2,0xa1,0x4e }, { 0xda,0xf4,0xcd,0x65 }, { 0x05,0xbe,0xd5,0x06 }, { 0x34,0x62,0x1f,0xd1 }, { 0xa6,0xfe,0x8a,0xc4 }, { 0x2e,0x53,0x9d,0x34 }, { 0xf3,0x55,0xa0,0xa2 }, { 0x8a,0xe1,0x32,0x05 }, { 0xf6,0xeb,0x75,0xa4 }, { 0x83,0xec,0x39,0x0b }, { 0x60,0xef,0xaa,0x40 }, { 0x71,0x9f,0x06,0x5e }, { 0x6e,0x10,0x51,0xbd }, { 0x21,0x8a,0xf9,0x3e }, { 0xdd,0x06,0x3d,0x96 }, { 0x3e,0x05,0xae,0xdd }, { 0xe6,0xbd,0x46,0x4d }, { 0x54,0x8d,0xb5,0x91 }, { 0xc4,0x5d,0x05,0x71 }, { 0x06,0xd4,0x6f,0x04 }, { 0x50,0x15,0xff,0x60 }, { 0x98,0xfb,0x24,0x19 }, { 0xbd,0xe9,0x97,0xd6 }, { 0x40,0x43,0xcc,0x89 }, { 0xd9,0x9e,0x77,0x67 }, { 0xe8,0x42,0xbd,0xb0 }, { 0x89,0x8b,0x88,0x07 }, { 0x19,0x5b,0x38,0xe7 }, { 0xc8,0xee,0xdb,0x79 }, { 0x7c,0x0a,0x47,0xa1 }, { 0x42,0x0f,0xe9,0x7c }, { 0x84,0x1e,0xc9,0xf8 }, { 0x00,0x00,0x00,0x00 }, { 0x80,0x86,0x83,0x09 }, { 0x2b,0xed,0x48,0x32 }, { 0x11,0x70,0xac,0x1e }, { 0x5a,0x72,0x4e,0x6c }, { 0x0e,0xff,0xfb,0xfd }, { 0x85,0x38,0x56,0x0f }, { 0xae,0xd5,0x1e,0x3d }, { 0x2d,0x39,0x27,0x36 }, { 0x0f,0xd9,0x64,0x0a }, { 0x5c,0xa6,0x21,0x68 }, { 0x5b,0x54,0xd1,0x9b }, { 0x36,0x2e,0x3a,0x24 }, { 0x0a,0x67,0xb1,0x0c }, { 0x57,0xe7,0x0f,0x93 }, { 0xee,0x96,0xd2,0xb4 }, { 0x9b,0x91,0x9e,0x1b }, { 0xc0,0xc5,0x4f,0x80 }, { 0xdc,0x20,0xa2,0x61 }, { 0x77,0x4b,0x69,0x5a }, { 0x12,0x1a,0x16,0x1c }, { 0x93,0xba,0x0a,0xe2 }, { 0xa0,0x2a,0xe5,0xc0 }, { 0x22,0xe0,0x43,0x3c }, { 0x1b,0x17,0x1d,0x12 }, { 0x09,0x0d,0x0b,0x0e }, { 0x8b,0xc7,0xad,0xf2 }, { 0xb6,0xa8,0xb9,0x2d }, { 0x1e,0xa9,0xc8,0x14 }, { 0xf1,0x19,0x85,0x57 }, { 0x75,0x07,0x4c,0xaf }, { 0x99,0xdd,0xbb,0xee }, { 0x7f,0x60,0xfd,0xa3 }, { 0x01,0x26,0x9f,0xf7 }, { 0x72,0xf5,0xbc,0x5c }, { 0x66,0x3b,0xc5,0x44 }, { 0xfb,0x7e,0x34,0x5b }, { 0x43,0x29,0x76,0x8b }, { 0x23,0xc6,0xdc,0xcb }, { 0xed,0xfc,0x68,0xb6 }, { 0xe4,0xf1,0x63,0xb8 }, { 0x31,0xdc,0xca,0xd7 }, { 0x63,0x85,0x10,0x42 }, { 0x97,0x22,0x40,0x13 }, { 0xc6,0x11,0x20,0x84 }, { 0x4a,0x24,0x7d,0x85 }, { 0xbb,0x3d,0xf8,0xd2 }, { 0xf9,0x32,0x11,0xae }, { 0x29,0xa1,0x6d,0xc7 }, { 0x9e,0x2f,0x4b,0x1d }, { 0xb2,0x30,0xf3,0xdc }, { 0x86,0x52,0xec,0x0d }, { 0xc1,0xe3,0xd0,0x77 }, { 0xb3,0x16,0x6c,0x2b }, { 0x70,0xb9,0x99,0xa9 }, { 0x94,0x48,0xfa,0x11 }, { 0xe9,0x64,0x22,0x47 }, { 0xfc,0x8c,0xc4,0xa8 }, { 0xf0,0x3f,0x1a,0xa0 }, { 0x7d,0x2c,0xd8,0x56 }, { 0x33,0x90,0xef,0x22 }, { 0x49,0x4e,0xc7,0x87 }, { 0x38,0xd1,0xc1,0xd9 }, { 0xca,0xa2,0xfe,0x8c }, { 0xd4,0x0b,0x36,0x98 }, { 0xf5,0x81,0xcf,0xa6 }, { 0x7a,0xde,0x28,0xa5 }, { 0xb7,0x8e,0x26,0xda }, { 0xad,0xbf,0xa4,0x3f }, { 0x3a,0x9d,0xe4,0x2c }, { 0x78,0x92,0x0d,0x50 }, { 0x5f,0xcc,0x9b,0x6a }, { 0x7e,0x46,0x62,0x54 }, { 0x8d,0x13,0xc2,0xf6 }, { 0xd8,0xb8,0xe8,0x90 }, { 0x39,0xf7,0x5e,0x2e }, { 0xc3,0xaf,0xf5,0x82 }, { 0x5d,0x80,0xbe,0x9f }, { 0xd0,0x93,0x7c,0x69 }, { 0xd5,0x2d,0xa9,0x6f }, { 0x25,0x12,0xb3,0xcf }, { 0xac,0x99,0x3b,0xc8 }, { 0x18,0x7d,0xa7,0x10 }, { 0x9c,0x63,0x6e,0xe8 }, { 0x3b,0xbb,0x7b,0xdb }, { 0x26,0x78,0x09,0xcd }, { 0x59,0x18,0xf4,0x6e }, { 0x9a,0xb7,0x01,0xec }, { 0x4f,0x9a,0xa8,0x83 }, { 0x95,0x6e,0x65,0xe6 }, { 0xff,0xe6,0x7e,0xaa }, { 0xbc,0xcf,0x08,0x21 }, { 0x15,0xe8,0xe6,0xef }, { 0xe7,0x9b,0xd9,0xba }, { 0x6f,0x36,0xce,0x4a }, { 0x9f,0x09,0xd4,0xea }, { 0xb0,0x7c,0xd6,0x29 }, { 0xa4,0xb2,0xaf,0x31 }, { 0x3f,0x23,0x31,0x2a }, { 0xa5,0x94,0x30,0xc6 }, { 0xa2,0x66,0xc0,0x35 }, { 0x4e,0xbc,0x37,0x74 }, { 0x82,0xca,0xa6,0xfc }, { 0x90,0xd0,0xb0,0xe0 }, { 0xa7,0xd8,0x15,0x33 }, { 0x04,0x98,0x4a,0xf1 }, { 0xec,0xda,0xf7,0x41 }, { 0xcd,0x50,0x0e,0x7f }, { 0x91,0xf6,0x2f,0x17 }, { 0x4d,0xd6,0x8d,0x76 }, { 0xef,0xb0,0x4d,0x43 }, { 0xaa,0x4d,0x54,0xcc }, { 0x96,0x04,0xdf,0xe4 }, { 0xd1,0xb5,0xe3,0x9e }, { 0x6a,0x88,0x1b,0x4c }, { 0x2c,0x1f,0xb8,0xc1 }, { 0x65,0x51,0x7f,0x46 }, { 0x5e,0xea,0x04,0x9d }, { 0x8c,0x35,0x5d,0x01 }, { 0x87,0x74,0x73,0xfa }, { 0x0b,0x41,0x2e,0xfb }, { 0x67,0x1d,0x5a,0xb3 }, { 0xdb,0xd2,0x52,0x92 }, { 0x10,0x56,0x33,0xe9 }, { 0xd6,0x47,0x13,0x6d }, { 0xd7,0x61,0x8c,0x9a }, { 0xa1,0x0c,0x7a,0x37 }, { 0xf8,0x14,0x8e,0x59 }, { 0x13,0x3c,0x89,0xeb }, { 0xa9,0x27,0xee,0xce }, { 0x61,0xc9,0x35,0xb7 }, { 0x1c,0xe5,0xed,0xe1 }, { 0x47,0xb1,0x3c,0x7a }, { 0xd2,0xdf,0x59,0x9c }, { 0xf2,0x73,0x3f,0x55 }, { 0x14,0xce,0x79,0x18 }, { 0xc7,0x37,0xbf,0x73 }, { 0xf7,0xcd,0xea,0x53 }, { 0xfd,0xaa,0x5b,0x5f }, { 0x3d,0x6f,0x14,0xdf }, { 0x44,0xdb,0x86,0x78 }, { 0xaf,0xf3,0x81,0xca }, { 0x68,0xc4,0x3e,0xb9 }, { 0x24,0x34,0x2c,0x38 }, { 0xa3,0x40,0x5f,0xc2 }, { 0x1d,0xc3,0x72,0x16 }, { 0xe2,0x25,0x0c,0xbc }, { 0x3c,0x49,0x8b,0x28 }, { 0x0d,0x95,0x41,0xff }, { 0xa8,0x01,0x71,0x39 }, { 0x0c,0xb3,0xde,0x08 }, { 0xb4,0xe4,0x9c,0xd8 }, { 0x56,0xc1,0x90,0x64 }, { 0xcb,0x84,0x61,0x7b }, { 0x32,0xb6,0x70,0xd5 }, { 0x6c,0x5c,0x74,0x48 }, { 0xb8,0x57,0x42,0xd0 } }; static const byte S5[256] = { 0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38, 0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb, 0x7c,0xe3,0x39,0x82,0x9b,0x2f,0xff,0x87, 0x34,0x8e,0x43,0x44,0xc4,0xde,0xe9,0xcb, 0x54,0x7b,0x94,0x32,0xa6,0xc2,0x23,0x3d, 0xee,0x4c,0x95,0x0b,0x42,0xfa,0xc3,0x4e, 0x08,0x2e,0xa1,0x66,0x28,0xd9,0x24,0xb2, 0x76,0x5b,0xa2,0x49,0x6d,0x8b,0xd1,0x25, 0x72,0xf8,0xf6,0x64,0x86,0x68,0x98,0x16, 0xd4,0xa4,0x5c,0xcc,0x5d,0x65,0xb6,0x92, 0x6c,0x70,0x48,0x50,0xfd,0xed,0xb9,0xda, 0x5e,0x15,0x46,0x57,0xa7,0x8d,0x9d,0x84, 0x90,0xd8,0xab,0x00,0x8c,0xbc,0xd3,0x0a, 0xf7,0xe4,0x58,0x05,0xb8,0xb3,0x45,0x06, 0xd0,0x2c,0x1e,0x8f,0xca,0x3f,0x0f,0x02, 0xc1,0xaf,0xbd,0x03,0x01,0x13,0x8a,0x6b, 0x3a,0x91,0x11,0x41,0x4f,0x67,0xdc,0xea, 0x97,0xf2,0xcf,0xce,0xf0,0xb4,0xe6,0x73, 0x96,0xac,0x74,0x22,0xe7,0xad,0x35,0x85, 0xe2,0xf9,0x37,0xe8,0x1c,0x75,0xdf,0x6e, 0x47,0xf1,0x1a,0x71,0x1d,0x29,0xc5,0x89, 0x6f,0xb7,0x62,0x0e,0xaa,0x18,0xbe,0x1b, 0xfc,0x56,0x3e,0x4b,0xc6,0xd2,0x79,0x20, 0x9a,0xdb,0xc0,0xfe,0x78,0xcd,0x5a,0xf4, 0x1f,0xdd,0xa8,0x33,0x88,0x07,0xc7,0x31, 0xb1,0x12,0x10,0x59,0x27,0x80,0xec,0x5f, 0x60,0x51,0x7f,0xa9,0x19,0xb5,0x4a,0x0d, 0x2d,0xe5,0x7a,0x9f,0x93,0xc9,0x9c,0xef, 0xa0,0xe0,0x3b,0x4d,0xae,0x2a,0xf5,0xb0, 0xc8,0xeb,0xbb,0x3c,0x83,0x53,0x99,0x61, 0x17,0x2b,0x04,0x7e,0xba,0x77,0xd6,0x26, 0xe1,0x69,0x14,0x63,0x55,0x21,0x0c,0x7d }; static const byte U1[256][4] = { { 0x00,0x00,0x00,0x00 }, { 0x0e,0x09,0x0d,0x0b }, { 0x1c,0x12,0x1a,0x16 }, { 0x12,0x1b,0x17,0x1d }, { 0x38,0x24,0x34,0x2c }, { 0x36,0x2d,0x39,0x27 }, { 0x24,0x36,0x2e,0x3a }, { 0x2a,0x3f,0x23,0x31 }, { 0x70,0x48,0x68,0x58 }, { 0x7e,0x41,0x65,0x53 }, { 0x6c,0x5a,0x72,0x4e }, { 0x62,0x53,0x7f,0x45 }, { 0x48,0x6c,0x5c,0x74 }, { 0x46,0x65,0x51,0x7f }, { 0x54,0x7e,0x46,0x62 }, { 0x5a,0x77,0x4b,0x69 }, { 0xe0,0x90,0xd0,0xb0 }, { 0xee,0x99,0xdd,0xbb }, { 0xfc,0x82,0xca,0xa6 }, { 0xf2,0x8b,0xc7,0xad }, { 0xd8,0xb4,0xe4,0x9c }, { 0xd6,0xbd,0xe9,0x97 }, { 0xc4,0xa6,0xfe,0x8a }, { 0xca,0xaf,0xf3,0x81 }, { 0x90,0xd8,0xb8,0xe8 }, { 0x9e,0xd1,0xb5,0xe3 }, { 0x8c,0xca,0xa2,0xfe }, { 0x82,0xc3,0xaf,0xf5 }, { 0xa8,0xfc,0x8c,0xc4 }, { 0xa6,0xf5,0x81,0xcf }, { 0xb4,0xee,0x96,0xd2 }, { 0xba,0xe7,0x9b,0xd9 }, { 0xdb,0x3b,0xbb,0x7b }, { 0xd5,0x32,0xb6,0x70 }, { 0xc7,0x29,0xa1,0x6d }, { 0xc9,0x20,0xac,0x66 }, { 0xe3,0x1f,0x8f,0x57 }, { 0xed,0x16,0x82,0x5c }, { 0xff,0x0d,0x95,0x41 }, { 0xf1,0x04,0x98,0x4a }, { 0xab,0x73,0xd3,0x23 }, { 0xa5,0x7a,0xde,0x28 }, { 0xb7,0x61,0xc9,0x35 }, { 0xb9,0x68,0xc4,0x3e }, { 0x93,0x57,0xe7,0x0f }, { 0x9d,0x5e,0xea,0x04 }, { 0x8f,0x45,0xfd,0x19 }, { 0x81,0x4c,0xf0,0x12 }, { 0x3b,0xab,0x6b,0xcb }, { 0x35,0xa2,0x66,0xc0 }, { 0x27,0xb9,0x71,0xdd }, { 0x29,0xb0,0x7c,0xd6 }, { 0x03,0x8f,0x5f,0xe7 }, { 0x0d,0x86,0x52,0xec }, { 0x1f,0x9d,0x45,0xf1 }, { 0x11,0x94,0x48,0xfa }, { 0x4b,0xe3,0x03,0x93 }, { 0x45,0xea,0x0e,0x98 }, { 0x57,0xf1,0x19,0x85 }, { 0x59,0xf8,0x14,0x8e }, { 0x73,0xc7,0x37,0xbf }, { 0x7d,0xce,0x3a,0xb4 }, { 0x6f,0xd5,0x2d,0xa9 }, { 0x61,0xdc,0x20,0xa2 }, { 0xad,0x76,0x6d,0xf6 }, { 0xa3,0x7f,0x60,0xfd }, { 0xb1,0x64,0x77,0xe0 }, { 0xbf,0x6d,0x7a,0xeb }, { 0x95,0x52,0x59,0xda }, { 0x9b,0x5b,0x54,0xd1 }, { 0x89,0x40,0x43,0xcc }, { 0x87,0x49,0x4e,0xc7 }, { 0xdd,0x3e,0x05,0xae }, { 0xd3,0x37,0x08,0xa5 }, { 0xc1,0x2c,0x1f,0xb8 }, { 0xcf,0x25,0x12,0xb3 }, { 0xe5,0x1a,0x31,0x82 }, { 0xeb,0x13,0x3c,0x89 }, { 0xf9,0x08,0x2b,0x94 }, { 0xf7,0x01,0x26,0x9f }, { 0x4d,0xe6,0xbd,0x46 }, { 0x43,0xef,0xb0,0x4d }, { 0x51,0xf4,0xa7,0x50 }, { 0x5f,0xfd,0xaa,0x5b }, { 0x75,0xc2,0x89,0x6a }, { 0x7b,0xcb,0x84,0x61 }, { 0x69,0xd0,0x93,0x7c }, { 0x67,0xd9,0x9e,0x77 }, { 0x3d,0xae,0xd5,0x1e }, { 0x33,0xa7,0xd8,0x15 }, { 0x21,0xbc,0xcf,0x08 }, { 0x2f,0xb5,0xc2,0x03 }, { 0x05,0x8a,0xe1,0x32 }, { 0x0b,0x83,0xec,0x39 }, { 0x19,0x98,0xfb,0x24 }, { 0x17,0x91,0xf6,0x2f }, { 0x76,0x4d,0xd6,0x8d }, { 0x78,0x44,0xdb,0x86 }, { 0x6a,0x5f,0xcc,0x9b }, { 0x64,0x56,0xc1,0x90 }, { 0x4e,0x69,0xe2,0xa1 }, { 0x40,0x60,0xef,0xaa }, { 0x52,0x7b,0xf8,0xb7 }, { 0x5c,0x72,0xf5,0xbc }, { 0x06,0x05,0xbe,0xd5 }, { 0x08,0x0c,0xb3,0xde }, { 0x1a,0x17,0xa4,0xc3 }, { 0x14,0x1e,0xa9,0xc8 }, { 0x3e,0x21,0x8a,0xf9 }, { 0x30,0x28,0x87,0xf2 }, { 0x22,0x33,0x90,0xef }, { 0x2c,0x3a,0x9d,0xe4 }, { 0x96,0xdd,0x06,0x3d }, { 0x98,0xd4,0x0b,0x36 }, { 0x8a,0xcf,0x1c,0x2b }, { 0x84,0xc6,0x11,0x20 }, { 0xae,0xf9,0x32,0x11 }, { 0xa0,0xf0,0x3f,0x1a }, { 0xb2,0xeb,0x28,0x07 }, { 0xbc,0xe2,0x25,0x0c }, { 0xe6,0x95,0x6e,0x65 }, { 0xe8,0x9c,0x63,0x6e }, { 0xfa,0x87,0x74,0x73 }, { 0xf4,0x8e,0x79,0x78 }, { 0xde,0xb1,0x5a,0x49 }, { 0xd0,0xb8,0x57,0x42 }, { 0xc2,0xa3,0x40,0x5f }, { 0xcc,0xaa,0x4d,0x54 }, { 0x41,0xec,0xda,0xf7 }, { 0x4f,0xe5,0xd7,0xfc }, { 0x5d,0xfe,0xc0,0xe1 }, { 0x53,0xf7,0xcd,0xea }, { 0x79,0xc8,0xee,0xdb }, { 0x77,0xc1,0xe3,0xd0 }, { 0x65,0xda,0xf4,0xcd }, { 0x6b,0xd3,0xf9,0xc6 }, { 0x31,0xa4,0xb2,0xaf }, { 0x3f,0xad,0xbf,0xa4 }, { 0x2d,0xb6,0xa8,0xb9 }, { 0x23,0xbf,0xa5,0xb2 }, { 0x09,0x80,0x86,0x83 }, { 0x07,0x89,0x8b,0x88 }, { 0x15,0x92,0x9c,0x95 }, { 0x1b,0x9b,0x91,0x9e }, { 0xa1,0x7c,0x0a,0x47 }, { 0xaf,0x75,0x07,0x4c }, { 0xbd,0x6e,0x10,0x51 }, { 0xb3,0x67,0x1d,0x5a }, { 0x99,0x58,0x3e,0x6b }, { 0x97,0x51,0x33,0x60 }, { 0x85,0x4a,0x24,0x7d }, { 0x8b,0x43,0x29,0x76 }, { 0xd1,0x34,0x62,0x1f }, { 0xdf,0x3d,0x6f,0x14 }, { 0xcd,0x26,0x78,0x09 }, { 0xc3,0x2f,0x75,0x02 }, { 0xe9,0x10,0x56,0x33 }, { 0xe7,0x19,0x5b,0x38 }, { 0xf5,0x02,0x4c,0x25 }, { 0xfb,0x0b,0x41,0x2e }, { 0x9a,0xd7,0x61,0x8c }, { 0x94,0xde,0x6c,0x87 }, { 0x86,0xc5,0x7b,0x9a }, { 0x88,0xcc,0x76,0x91 }, { 0xa2,0xf3,0x55,0xa0 }, { 0xac,0xfa,0x58,0xab }, { 0xbe,0xe1,0x4f,0xb6 }, { 0xb0,0xe8,0x42,0xbd }, { 0xea,0x9f,0x09,0xd4 }, { 0xe4,0x96,0x04,0xdf }, { 0xf6,0x8d,0x13,0xc2 }, { 0xf8,0x84,0x1e,0xc9 }, { 0xd2,0xbb,0x3d,0xf8 }, { 0xdc,0xb2,0x30,0xf3 }, { 0xce,0xa9,0x27,0xee }, { 0xc0,0xa0,0x2a,0xe5 }, { 0x7a,0x47,0xb1,0x3c }, { 0x74,0x4e,0xbc,0x37 }, { 0x66,0x55,0xab,0x2a }, { 0x68,0x5c,0xa6,0x21 }, { 0x42,0x63,0x85,0x10 }, { 0x4c,0x6a,0x88,0x1b }, { 0x5e,0x71,0x9f,0x06 }, { 0x50,0x78,0x92,0x0d }, { 0x0a,0x0f,0xd9,0x64 }, { 0x04,0x06,0xd4,0x6f }, { 0x16,0x1d,0xc3,0x72 }, { 0x18,0x14,0xce,0x79 }, { 0x32,0x2b,0xed,0x48 }, { 0x3c,0x22,0xe0,0x43 }, { 0x2e,0x39,0xf7,0x5e }, { 0x20,0x30,0xfa,0x55 }, { 0xec,0x9a,0xb7,0x01 }, { 0xe2,0x93,0xba,0x0a }, { 0xf0,0x88,0xad,0x17 }, { 0xfe,0x81,0xa0,0x1c }, { 0xd4,0xbe,0x83,0x2d }, { 0xda,0xb7,0x8e,0x26 }, { 0xc8,0xac,0x99,0x3b }, { 0xc6,0xa5,0x94,0x30 }, { 0x9c,0xd2,0xdf,0x59 }, { 0x92,0xdb,0xd2,0x52 }, { 0x80,0xc0,0xc5,0x4f }, { 0x8e,0xc9,0xc8,0x44 }, { 0xa4,0xf6,0xeb,0x75 }, { 0xaa,0xff,0xe6,0x7e }, { 0xb8,0xe4,0xf1,0x63 }, { 0xb6,0xed,0xfc,0x68 }, { 0x0c,0x0a,0x67,0xb1 }, { 0x02,0x03,0x6a,0xba }, { 0x10,0x18,0x7d,0xa7 }, { 0x1e,0x11,0x70,0xac }, { 0x34,0x2e,0x53,0x9d }, { 0x3a,0x27,0x5e,0x96 }, { 0x28,0x3c,0x49,0x8b }, { 0x26,0x35,0x44,0x80 }, { 0x7c,0x42,0x0f,0xe9 }, { 0x72,0x4b,0x02,0xe2 }, { 0x60,0x50,0x15,0xff }, { 0x6e,0x59,0x18,0xf4 }, { 0x44,0x66,0x3b,0xc5 }, { 0x4a,0x6f,0x36,0xce }, { 0x58,0x74,0x21,0xd3 }, { 0x56,0x7d,0x2c,0xd8 }, { 0x37,0xa1,0x0c,0x7a }, { 0x39,0xa8,0x01,0x71 }, { 0x2b,0xb3,0x16,0x6c }, { 0x25,0xba,0x1b,0x67 }, { 0x0f,0x85,0x38,0x56 }, { 0x01,0x8c,0x35,0x5d }, { 0x13,0x97,0x22,0x40 }, { 0x1d,0x9e,0x2f,0x4b }, { 0x47,0xe9,0x64,0x22 }, { 0x49,0xe0,0x69,0x29 }, { 0x5b,0xfb,0x7e,0x34 }, { 0x55,0xf2,0x73,0x3f }, { 0x7f,0xcd,0x50,0x0e }, { 0x71,0xc4,0x5d,0x05 }, { 0x63,0xdf,0x4a,0x18 }, { 0x6d,0xd6,0x47,0x13 }, { 0xd7,0x31,0xdc,0xca }, { 0xd9,0x38,0xd1,0xc1 }, { 0xcb,0x23,0xc6,0xdc }, { 0xc5,0x2a,0xcb,0xd7 }, { 0xef,0x15,0xe8,0xe6 }, { 0xe1,0x1c,0xe5,0xed }, { 0xf3,0x07,0xf2,0xf0 }, { 0xfd,0x0e,0xff,0xfb }, { 0xa7,0x79,0xb4,0x92 }, { 0xa9,0x70,0xb9,0x99 }, { 0xbb,0x6b,0xae,0x84 }, { 0xb5,0x62,0xa3,0x8f }, { 0x9f,0x5d,0x80,0xbe }, { 0x91,0x54,0x8d,0xb5 }, { 0x83,0x4f,0x9a,0xa8 }, { 0x8d,0x46,0x97,0xa3 } }; static const byte U2[256][4] = { { 0x00,0x00,0x00,0x00 }, { 0x0b,0x0e,0x09,0x0d }, { 0x16,0x1c,0x12,0x1a }, { 0x1d,0x12,0x1b,0x17 }, { 0x2c,0x38,0x24,0x34 }, { 0x27,0x36,0x2d,0x39 }, { 0x3a,0x24,0x36,0x2e }, { 0x31,0x2a,0x3f,0x23 }, { 0x58,0x70,0x48,0x68 }, { 0x53,0x7e,0x41,0x65 }, { 0x4e,0x6c,0x5a,0x72 }, { 0x45,0x62,0x53,0x7f }, { 0x74,0x48,0x6c,0x5c }, { 0x7f,0x46,0x65,0x51 }, { 0x62,0x54,0x7e,0x46 }, { 0x69,0x5a,0x77,0x4b }, { 0xb0,0xe0,0x90,0xd0 }, { 0xbb,0xee,0x99,0xdd }, { 0xa6,0xfc,0x82,0xca }, { 0xad,0xf2,0x8b,0xc7 }, { 0x9c,0xd8,0xb4,0xe4 }, { 0x97,0xd6,0xbd,0xe9 }, { 0x8a,0xc4,0xa6,0xfe }, { 0x81,0xca,0xaf,0xf3 }, { 0xe8,0x90,0xd8,0xb8 }, { 0xe3,0x9e,0xd1,0xb5 }, { 0xfe,0x8c,0xca,0xa2 }, { 0xf5,0x82,0xc3,0xaf }, { 0xc4,0xa8,0xfc,0x8c }, { 0xcf,0xa6,0xf5,0x81 }, { 0xd2,0xb4,0xee,0x96 }, { 0xd9,0xba,0xe7,0x9b }, { 0x7b,0xdb,0x3b,0xbb }, { 0x70,0xd5,0x32,0xb6 }, { 0x6d,0xc7,0x29,0xa1 }, { 0x66,0xc9,0x20,0xac }, { 0x57,0xe3,0x1f,0x8f }, { 0x5c,0xed,0x16,0x82 }, { 0x41,0xff,0x0d,0x95 }, { 0x4a,0xf1,0x04,0x98 }, { 0x23,0xab,0x73,0xd3 }, { 0x28,0xa5,0x7a,0xde }, { 0x35,0xb7,0x61,0xc9 }, { 0x3e,0xb9,0x68,0xc4 }, { 0x0f,0x93,0x57,0xe7 }, { 0x04,0x9d,0x5e,0xea }, { 0x19,0x8f,0x45,0xfd }, { 0x12,0x81,0x4c,0xf0 }, { 0xcb,0x3b,0xab,0x6b }, { 0xc0,0x35,0xa2,0x66 }, { 0xdd,0x27,0xb9,0x71 }, { 0xd6,0x29,0xb0,0x7c }, { 0xe7,0x03,0x8f,0x5f }, { 0xec,0x0d,0x86,0x52 }, { 0xf1,0x1f,0x9d,0x45 }, { 0xfa,0x11,0x94,0x48 }, { 0x93,0x4b,0xe3,0x03 }, { 0x98,0x45,0xea,0x0e }, { 0x85,0x57,0xf1,0x19 }, { 0x8e,0x59,0xf8,0x14 }, { 0xbf,0x73,0xc7,0x37 }, { 0xb4,0x7d,0xce,0x3a }, { 0xa9,0x6f,0xd5,0x2d }, { 0xa2,0x61,0xdc,0x20 }, { 0xf6,0xad,0x76,0x6d }, { 0xfd,0xa3,0x7f,0x60 }, { 0xe0,0xb1,0x64,0x77 }, { 0xeb,0xbf,0x6d,0x7a }, { 0xda,0x95,0x52,0x59 }, { 0xd1,0x9b,0x5b,0x54 }, { 0xcc,0x89,0x40,0x43 }, { 0xc7,0x87,0x49,0x4e }, { 0xae,0xdd,0x3e,0x05 }, { 0xa5,0xd3,0x37,0x08 }, { 0xb8,0xc1,0x2c,0x1f }, { 0xb3,0xcf,0x25,0x12 }, { 0x82,0xe5,0x1a,0x31 }, { 0x89,0xeb,0x13,0x3c }, { 0x94,0xf9,0x08,0x2b }, { 0x9f,0xf7,0x01,0x26 }, { 0x46,0x4d,0xe6,0xbd }, { 0x4d,0x43,0xef,0xb0 }, { 0x50,0x51,0xf4,0xa7 }, { 0x5b,0x5f,0xfd,0xaa }, { 0x6a,0x75,0xc2,0x89 }, { 0x61,0x7b,0xcb,0x84 }, { 0x7c,0x69,0xd0,0x93 }, { 0x77,0x67,0xd9,0x9e }, { 0x1e,0x3d,0xae,0xd5 }, { 0x15,0x33,0xa7,0xd8 }, { 0x08,0x21,0xbc,0xcf }, { 0x03,0x2f,0xb5,0xc2 }, { 0x32,0x05,0x8a,0xe1 }, { 0x39,0x0b,0x83,0xec }, { 0x24,0x19,0x98,0xfb }, { 0x2f,0x17,0x91,0xf6 }, { 0x8d,0x76,0x4d,0xd6 }, { 0x86,0x78,0x44,0xdb }, { 0x9b,0x6a,0x5f,0xcc }, { 0x90,0x64,0x56,0xc1 }, { 0xa1,0x4e,0x69,0xe2 }, { 0xaa,0x40,0x60,0xef }, { 0xb7,0x52,0x7b,0xf8 }, { 0xbc,0x5c,0x72,0xf5 }, { 0xd5,0x06,0x05,0xbe }, { 0xde,0x08,0x0c,0xb3 }, { 0xc3,0x1a,0x17,0xa4 }, { 0xc8,0x14,0x1e,0xa9 }, { 0xf9,0x3e,0x21,0x8a }, { 0xf2,0x30,0x28,0x87 }, { 0xef,0x22,0x33,0x90 }, { 0xe4,0x2c,0x3a,0x9d }, { 0x3d,0x96,0xdd,0x06 }, { 0x36,0x98,0xd4,0x0b }, { 0x2b,0x8a,0xcf,0x1c }, { 0x20,0x84,0xc6,0x11 }, { 0x11,0xae,0xf9,0x32 }, { 0x1a,0xa0,0xf0,0x3f }, { 0x07,0xb2,0xeb,0x28 }, { 0x0c,0xbc,0xe2,0x25 }, { 0x65,0xe6,0x95,0x6e }, { 0x6e,0xe8,0x9c,0x63 }, { 0x73,0xfa,0x87,0x74 }, { 0x78,0xf4,0x8e,0x79 }, { 0x49,0xde,0xb1,0x5a }, { 0x42,0xd0,0xb8,0x57 }, { 0x5f,0xc2,0xa3,0x40 }, { 0x54,0xcc,0xaa,0x4d }, { 0xf7,0x41,0xec,0xda }, { 0xfc,0x4f,0xe5,0xd7 }, { 0xe1,0x5d,0xfe,0xc0 }, { 0xea,0x53,0xf7,0xcd }, { 0xdb,0x79,0xc8,0xee }, { 0xd0,0x77,0xc1,0xe3 }, { 0xcd,0x65,0xda,0xf4 }, { 0xc6,0x6b,0xd3,0xf9 }, { 0xaf,0x31,0xa4,0xb2 }, { 0xa4,0x3f,0xad,0xbf }, { 0xb9,0x2d,0xb6,0xa8 }, { 0xb2,0x23,0xbf,0xa5 }, { 0x83,0x09,0x80,0x86 }, { 0x88,0x07,0x89,0x8b }, { 0x95,0x15,0x92,0x9c }, { 0x9e,0x1b,0x9b,0x91 }, { 0x47,0xa1,0x7c,0x0a }, { 0x4c,0xaf,0x75,0x07 }, { 0x51,0xbd,0x6e,0x10 }, { 0x5a,0xb3,0x67,0x1d }, { 0x6b,0x99,0x58,0x3e }, { 0x60,0x97,0x51,0x33 }, { 0x7d,0x85,0x4a,0x24 }, { 0x76,0x8b,0x43,0x29 }, { 0x1f,0xd1,0x34,0x62 }, { 0x14,0xdf,0x3d,0x6f }, { 0x09,0xcd,0x26,0x78 }, { 0x02,0xc3,0x2f,0x75 }, { 0x33,0xe9,0x10,0x56 }, { 0x38,0xe7,0x19,0x5b }, { 0x25,0xf5,0x02,0x4c }, { 0x2e,0xfb,0x0b,0x41 }, { 0x8c,0x9a,0xd7,0x61 }, { 0x87,0x94,0xde,0x6c }, { 0x9a,0x86,0xc5,0x7b }, { 0x91,0x88,0xcc,0x76 }, { 0xa0,0xa2,0xf3,0x55 }, { 0xab,0xac,0xfa,0x58 }, { 0xb6,0xbe,0xe1,0x4f }, { 0xbd,0xb0,0xe8,0x42 }, { 0xd4,0xea,0x9f,0x09 }, { 0xdf,0xe4,0x96,0x04 }, { 0xc2,0xf6,0x8d,0x13 }, { 0xc9,0xf8,0x84,0x1e }, { 0xf8,0xd2,0xbb,0x3d }, { 0xf3,0xdc,0xb2,0x30 }, { 0xee,0xce,0xa9,0x27 }, { 0xe5,0xc0,0xa0,0x2a }, { 0x3c,0x7a,0x47,0xb1 }, { 0x37,0x74,0x4e,0xbc }, { 0x2a,0x66,0x55,0xab }, { 0x21,0x68,0x5c,0xa6 }, { 0x10,0x42,0x63,0x85 }, { 0x1b,0x4c,0x6a,0x88 }, { 0x06,0x5e,0x71,0x9f }, { 0x0d,0x50,0x78,0x92 }, { 0x64,0x0a,0x0f,0xd9 }, { 0x6f,0x04,0x06,0xd4 }, { 0x72,0x16,0x1d,0xc3 }, { 0x79,0x18,0x14,0xce }, { 0x48,0x32,0x2b,0xed }, { 0x43,0x3c,0x22,0xe0 }, { 0x5e,0x2e,0x39,0xf7 }, { 0x55,0x20,0x30,0xfa }, { 0x01,0xec,0x9a,0xb7 }, { 0x0a,0xe2,0x93,0xba }, { 0x17,0xf0,0x88,0xad }, { 0x1c,0xfe,0x81,0xa0 }, { 0x2d,0xd4,0xbe,0x83 }, { 0x26,0xda,0xb7,0x8e }, { 0x3b,0xc8,0xac,0x99 }, { 0x30,0xc6,0xa5,0x94 }, { 0x59,0x9c,0xd2,0xdf }, { 0x52,0x92,0xdb,0xd2 }, { 0x4f,0x80,0xc0,0xc5 }, { 0x44,0x8e,0xc9,0xc8 }, { 0x75,0xa4,0xf6,0xeb }, { 0x7e,0xaa,0xff,0xe6 }, { 0x63,0xb8,0xe4,0xf1 }, { 0x68,0xb6,0xed,0xfc }, { 0xb1,0x0c,0x0a,0x67 }, { 0xba,0x02,0x03,0x6a }, { 0xa7,0x10,0x18,0x7d }, { 0xac,0x1e,0x11,0x70 }, { 0x9d,0x34,0x2e,0x53 }, { 0x96,0x3a,0x27,0x5e }, { 0x8b,0x28,0x3c,0x49 }, { 0x80,0x26,0x35,0x44 }, { 0xe9,0x7c,0x42,0x0f }, { 0xe2,0x72,0x4b,0x02 }, { 0xff,0x60,0x50,0x15 }, { 0xf4,0x6e,0x59,0x18 }, { 0xc5,0x44,0x66,0x3b }, { 0xce,0x4a,0x6f,0x36 }, { 0xd3,0x58,0x74,0x21 }, { 0xd8,0x56,0x7d,0x2c }, { 0x7a,0x37,0xa1,0x0c }, { 0x71,0x39,0xa8,0x01 }, { 0x6c,0x2b,0xb3,0x16 }, { 0x67,0x25,0xba,0x1b }, { 0x56,0x0f,0x85,0x38 }, { 0x5d,0x01,0x8c,0x35 }, { 0x40,0x13,0x97,0x22 }, { 0x4b,0x1d,0x9e,0x2f }, { 0x22,0x47,0xe9,0x64 }, { 0x29,0x49,0xe0,0x69 }, { 0x34,0x5b,0xfb,0x7e }, { 0x3f,0x55,0xf2,0x73 }, { 0x0e,0x7f,0xcd,0x50 }, { 0x05,0x71,0xc4,0x5d }, { 0x18,0x63,0xdf,0x4a }, { 0x13,0x6d,0xd6,0x47 }, { 0xca,0xd7,0x31,0xdc }, { 0xc1,0xd9,0x38,0xd1 }, { 0xdc,0xcb,0x23,0xc6 }, { 0xd7,0xc5,0x2a,0xcb }, { 0xe6,0xef,0x15,0xe8 }, { 0xed,0xe1,0x1c,0xe5 }, { 0xf0,0xf3,0x07,0xf2 }, { 0xfb,0xfd,0x0e,0xff }, { 0x92,0xa7,0x79,0xb4 }, { 0x99,0xa9,0x70,0xb9 }, { 0x84,0xbb,0x6b,0xae }, { 0x8f,0xb5,0x62,0xa3 }, { 0xbe,0x9f,0x5d,0x80 }, { 0xb5,0x91,0x54,0x8d }, { 0xa8,0x83,0x4f,0x9a }, { 0xa3,0x8d,0x46,0x97 } }; static const byte U3[256][4] = { { 0x00,0x00,0x00,0x00 }, { 0x0d,0x0b,0x0e,0x09 }, { 0x1a,0x16,0x1c,0x12 }, { 0x17,0x1d,0x12,0x1b }, { 0x34,0x2c,0x38,0x24 }, { 0x39,0x27,0x36,0x2d }, { 0x2e,0x3a,0x24,0x36 }, { 0x23,0x31,0x2a,0x3f }, { 0x68,0x58,0x70,0x48 }, { 0x65,0x53,0x7e,0x41 }, { 0x72,0x4e,0x6c,0x5a }, { 0x7f,0x45,0x62,0x53 }, { 0x5c,0x74,0x48,0x6c }, { 0x51,0x7f,0x46,0x65 }, { 0x46,0x62,0x54,0x7e }, { 0x4b,0x69,0x5a,0x77 }, { 0xd0,0xb0,0xe0,0x90 }, { 0xdd,0xbb,0xee,0x99 }, { 0xca,0xa6,0xfc,0x82 }, { 0xc7,0xad,0xf2,0x8b }, { 0xe4,0x9c,0xd8,0xb4 }, { 0xe9,0x97,0xd6,0xbd }, { 0xfe,0x8a,0xc4,0xa6 }, { 0xf3,0x81,0xca,0xaf }, { 0xb8,0xe8,0x90,0xd8 }, { 0xb5,0xe3,0x9e,0xd1 }, { 0xa2,0xfe,0x8c,0xca }, { 0xaf,0xf5,0x82,0xc3 }, { 0x8c,0xc4,0xa8,0xfc }, { 0x81,0xcf,0xa6,0xf5 }, { 0x96,0xd2,0xb4,0xee }, { 0x9b,0xd9,0xba,0xe7 }, { 0xbb,0x7b,0xdb,0x3b }, { 0xb6,0x70,0xd5,0x32 }, { 0xa1,0x6d,0xc7,0x29 }, { 0xac,0x66,0xc9,0x20 }, { 0x8f,0x57,0xe3,0x1f }, { 0x82,0x5c,0xed,0x16 }, { 0x95,0x41,0xff,0x0d }, { 0x98,0x4a,0xf1,0x04 }, { 0xd3,0x23,0xab,0x73 }, { 0xde,0x28,0xa5,0x7a }, { 0xc9,0x35,0xb7,0x61 }, { 0xc4,0x3e,0xb9,0x68 }, { 0xe7,0x0f,0x93,0x57 }, { 0xea,0x04,0x9d,0x5e }, { 0xfd,0x19,0x8f,0x45 }, { 0xf0,0x12,0x81,0x4c }, { 0x6b,0xcb,0x3b,0xab }, { 0x66,0xc0,0x35,0xa2 }, { 0x71,0xdd,0x27,0xb9 }, { 0x7c,0xd6,0x29,0xb0 }, { 0x5f,0xe7,0x03,0x8f }, { 0x52,0xec,0x0d,0x86 }, { 0x45,0xf1,0x1f,0x9d }, { 0x48,0xfa,0x11,0x94 }, { 0x03,0x93,0x4b,0xe3 }, { 0x0e,0x98,0x45,0xea }, { 0x19,0x85,0x57,0xf1 }, { 0x14,0x8e,0x59,0xf8 }, { 0x37,0xbf,0x73,0xc7 }, { 0x3a,0xb4,0x7d,0xce }, { 0x2d,0xa9,0x6f,0xd5 }, { 0x20,0xa2,0x61,0xdc }, { 0x6d,0xf6,0xad,0x76 }, { 0x60,0xfd,0xa3,0x7f }, { 0x77,0xe0,0xb1,0x64 }, { 0x7a,0xeb,0xbf,0x6d }, { 0x59,0xda,0x95,0x52 }, { 0x54,0xd1,0x9b,0x5b }, { 0x43,0xcc,0x89,0x40 }, { 0x4e,0xc7,0x87,0x49 }, { 0x05,0xae,0xdd,0x3e }, { 0x08,0xa5,0xd3,0x37 }, { 0x1f,0xb8,0xc1,0x2c }, { 0x12,0xb3,0xcf,0x25 }, { 0x31,0x82,0xe5,0x1a }, { 0x3c,0x89,0xeb,0x13 }, { 0x2b,0x94,0xf9,0x08 }, { 0x26,0x9f,0xf7,0x01 }, { 0xbd,0x46,0x4d,0xe6 }, { 0xb0,0x4d,0x43,0xef }, { 0xa7,0x50,0x51,0xf4 }, { 0xaa,0x5b,0x5f,0xfd }, { 0x89,0x6a,0x75,0xc2 }, { 0x84,0x61,0x7b,0xcb }, { 0x93,0x7c,0x69,0xd0 }, { 0x9e,0x77,0x67,0xd9 }, { 0xd5,0x1e,0x3d,0xae }, { 0xd8,0x15,0x33,0xa7 }, { 0xcf,0x08,0x21,0xbc }, { 0xc2,0x03,0x2f,0xb5 }, { 0xe1,0x32,0x05,0x8a }, { 0xec,0x39,0x0b,0x83 }, { 0xfb,0x24,0x19,0x98 }, { 0xf6,0x2f,0x17,0x91 }, { 0xd6,0x8d,0x76,0x4d }, { 0xdb,0x86,0x78,0x44 }, { 0xcc,0x9b,0x6a,0x5f }, { 0xc1,0x90,0x64,0x56 }, { 0xe2,0xa1,0x4e,0x69 }, { 0xef,0xaa,0x40,0x60 }, { 0xf8,0xb7,0x52,0x7b }, { 0xf5,0xbc,0x5c,0x72 }, { 0xbe,0xd5,0x06,0x05 }, { 0xb3,0xde,0x08,0x0c }, { 0xa4,0xc3,0x1a,0x17 }, { 0xa9,0xc8,0x14,0x1e }, { 0x8a,0xf9,0x3e,0x21 }, { 0x87,0xf2,0x30,0x28 }, { 0x90,0xef,0x22,0x33 }, { 0x9d,0xe4,0x2c,0x3a }, { 0x06,0x3d,0x96,0xdd }, { 0x0b,0x36,0x98,0xd4 }, { 0x1c,0x2b,0x8a,0xcf }, { 0x11,0x20,0x84,0xc6 }, { 0x32,0x11,0xae,0xf9 }, { 0x3f,0x1a,0xa0,0xf0 }, { 0x28,0x07,0xb2,0xeb }, { 0x25,0x0c,0xbc,0xe2 }, { 0x6e,0x65,0xe6,0x95 }, { 0x63,0x6e,0xe8,0x9c }, { 0x74,0x73,0xfa,0x87 }, { 0x79,0x78,0xf4,0x8e }, { 0x5a,0x49,0xde,0xb1 }, { 0x57,0x42,0xd0,0xb8 }, { 0x40,0x5f,0xc2,0xa3 }, { 0x4d,0x54,0xcc,0xaa }, { 0xda,0xf7,0x41,0xec }, { 0xd7,0xfc,0x4f,0xe5 }, { 0xc0,0xe1,0x5d,0xfe }, { 0xcd,0xea,0x53,0xf7 }, { 0xee,0xdb,0x79,0xc8 }, { 0xe3,0xd0,0x77,0xc1 }, { 0xf4,0xcd,0x65,0xda }, { 0xf9,0xc6,0x6b,0xd3 }, { 0xb2,0xaf,0x31,0xa4 }, { 0xbf,0xa4,0x3f,0xad }, { 0xa8,0xb9,0x2d,0xb6 }, { 0xa5,0xb2,0x23,0xbf }, { 0x86,0x83,0x09,0x80 }, { 0x8b,0x88,0x07,0x89 }, { 0x9c,0x95,0x15,0x92 }, { 0x91,0x9e,0x1b,0x9b }, { 0x0a,0x47,0xa1,0x7c }, { 0x07,0x4c,0xaf,0x75 }, { 0x10,0x51,0xbd,0x6e }, { 0x1d,0x5a,0xb3,0x67 }, { 0x3e,0x6b,0x99,0x58 }, { 0x33,0x60,0x97,0x51 }, { 0x24,0x7d,0x85,0x4a }, { 0x29,0x76,0x8b,0x43 }, { 0x62,0x1f,0xd1,0x34 }, { 0x6f,0x14,0xdf,0x3d }, { 0x78,0x09,0xcd,0x26 }, { 0x75,0x02,0xc3,0x2f }, { 0x56,0x33,0xe9,0x10 }, { 0x5b,0x38,0xe7,0x19 }, { 0x4c,0x25,0xf5,0x02 }, { 0x41,0x2e,0xfb,0x0b }, { 0x61,0x8c,0x9a,0xd7 }, { 0x6c,0x87,0x94,0xde }, { 0x7b,0x9a,0x86,0xc5 }, { 0x76,0x91,0x88,0xcc }, { 0x55,0xa0,0xa2,0xf3 }, { 0x58,0xab,0xac,0xfa }, { 0x4f,0xb6,0xbe,0xe1 }, { 0x42,0xbd,0xb0,0xe8 }, { 0x09,0xd4,0xea,0x9f }, { 0x04,0xdf,0xe4,0x96 }, { 0x13,0xc2,0xf6,0x8d }, { 0x1e,0xc9,0xf8,0x84 }, { 0x3d,0xf8,0xd2,0xbb }, { 0x30,0xf3,0xdc,0xb2 }, { 0x27,0xee,0xce,0xa9 }, { 0x2a,0xe5,0xc0,0xa0 }, { 0xb1,0x3c,0x7a,0x47 }, { 0xbc,0x37,0x74,0x4e }, { 0xab,0x2a,0x66,0x55 }, { 0xa6,0x21,0x68,0x5c }, { 0x85,0x10,0x42,0x63 }, { 0x88,0x1b,0x4c,0x6a }, { 0x9f,0x06,0x5e,0x71 }, { 0x92,0x0d,0x50,0x78 }, { 0xd9,0x64,0x0a,0x0f }, { 0xd4,0x6f,0x04,0x06 }, { 0xc3,0x72,0x16,0x1d }, { 0xce,0x79,0x18,0x14 }, { 0xed,0x48,0x32,0x2b }, { 0xe0,0x43,0x3c,0x22 }, { 0xf7,0x5e,0x2e,0x39 }, { 0xfa,0x55,0x20,0x30 }, { 0xb7,0x01,0xec,0x9a }, { 0xba,0x0a,0xe2,0x93 }, { 0xad,0x17,0xf0,0x88 }, { 0xa0,0x1c,0xfe,0x81 }, { 0x83,0x2d,0xd4,0xbe }, { 0x8e,0x26,0xda,0xb7 }, { 0x99,0x3b,0xc8,0xac }, { 0x94,0x30,0xc6,0xa5 }, { 0xdf,0x59,0x9c,0xd2 }, { 0xd2,0x52,0x92,0xdb }, { 0xc5,0x4f,0x80,0xc0 }, { 0xc8,0x44,0x8e,0xc9 }, { 0xeb,0x75,0xa4,0xf6 }, { 0xe6,0x7e,0xaa,0xff }, { 0xf1,0x63,0xb8,0xe4 }, { 0xfc,0x68,0xb6,0xed }, { 0x67,0xb1,0x0c,0x0a }, { 0x6a,0xba,0x02,0x03 }, { 0x7d,0xa7,0x10,0x18 }, { 0x70,0xac,0x1e,0x11 }, { 0x53,0x9d,0x34,0x2e }, { 0x5e,0x96,0x3a,0x27 }, { 0x49,0x8b,0x28,0x3c }, { 0x44,0x80,0x26,0x35 }, { 0x0f,0xe9,0x7c,0x42 }, { 0x02,0xe2,0x72,0x4b }, { 0x15,0xff,0x60,0x50 }, { 0x18,0xf4,0x6e,0x59 }, { 0x3b,0xc5,0x44,0x66 }, { 0x36,0xce,0x4a,0x6f }, { 0x21,0xd3,0x58,0x74 }, { 0x2c,0xd8,0x56,0x7d }, { 0x0c,0x7a,0x37,0xa1 }, { 0x01,0x71,0x39,0xa8 }, { 0x16,0x6c,0x2b,0xb3 }, { 0x1b,0x67,0x25,0xba }, { 0x38,0x56,0x0f,0x85 }, { 0x35,0x5d,0x01,0x8c }, { 0x22,0x40,0x13,0x97 }, { 0x2f,0x4b,0x1d,0x9e }, { 0x64,0x22,0x47,0xe9 }, { 0x69,0x29,0x49,0xe0 }, { 0x7e,0x34,0x5b,0xfb }, { 0x73,0x3f,0x55,0xf2 }, { 0x50,0x0e,0x7f,0xcd }, { 0x5d,0x05,0x71,0xc4 }, { 0x4a,0x18,0x63,0xdf }, { 0x47,0x13,0x6d,0xd6 }, { 0xdc,0xca,0xd7,0x31 }, { 0xd1,0xc1,0xd9,0x38 }, { 0xc6,0xdc,0xcb,0x23 }, { 0xcb,0xd7,0xc5,0x2a }, { 0xe8,0xe6,0xef,0x15 }, { 0xe5,0xed,0xe1,0x1c }, { 0xf2,0xf0,0xf3,0x07 }, { 0xff,0xfb,0xfd,0x0e }, { 0xb4,0x92,0xa7,0x79 }, { 0xb9,0x99,0xa9,0x70 }, { 0xae,0x84,0xbb,0x6b }, { 0xa3,0x8f,0xb5,0x62 }, { 0x80,0xbe,0x9f,0x5d }, { 0x8d,0xb5,0x91,0x54 }, { 0x9a,0xa8,0x83,0x4f }, { 0x97,0xa3,0x8d,0x46 } }; static const byte U4[256][4] = { { 0x00,0x00,0x00,0x00 }, { 0x09,0x0d,0x0b,0x0e }, { 0x12,0x1a,0x16,0x1c }, { 0x1b,0x17,0x1d,0x12 }, { 0x24,0x34,0x2c,0x38 }, { 0x2d,0x39,0x27,0x36 }, { 0x36,0x2e,0x3a,0x24 }, { 0x3f,0x23,0x31,0x2a }, { 0x48,0x68,0x58,0x70 }, { 0x41,0x65,0x53,0x7e }, { 0x5a,0x72,0x4e,0x6c }, { 0x53,0x7f,0x45,0x62 }, { 0x6c,0x5c,0x74,0x48 }, { 0x65,0x51,0x7f,0x46 }, { 0x7e,0x46,0x62,0x54 }, { 0x77,0x4b,0x69,0x5a }, { 0x90,0xd0,0xb0,0xe0 }, { 0x99,0xdd,0xbb,0xee }, { 0x82,0xca,0xa6,0xfc }, { 0x8b,0xc7,0xad,0xf2 }, { 0xb4,0xe4,0x9c,0xd8 }, { 0xbd,0xe9,0x97,0xd6 }, { 0xa6,0xfe,0x8a,0xc4 }, { 0xaf,0xf3,0x81,0xca }, { 0xd8,0xb8,0xe8,0x90 }, { 0xd1,0xb5,0xe3,0x9e }, { 0xca,0xa2,0xfe,0x8c }, { 0xc3,0xaf,0xf5,0x82 }, { 0xfc,0x8c,0xc4,0xa8 }, { 0xf5,0x81,0xcf,0xa6 }, { 0xee,0x96,0xd2,0xb4 }, { 0xe7,0x9b,0xd9,0xba }, { 0x3b,0xbb,0x7b,0xdb }, { 0x32,0xb6,0x70,0xd5 }, { 0x29,0xa1,0x6d,0xc7 }, { 0x20,0xac,0x66,0xc9 }, { 0x1f,0x8f,0x57,0xe3 }, { 0x16,0x82,0x5c,0xed }, { 0x0d,0x95,0x41,0xff }, { 0x04,0x98,0x4a,0xf1 }, { 0x73,0xd3,0x23,0xab }, { 0x7a,0xde,0x28,0xa5 }, { 0x61,0xc9,0x35,0xb7 }, { 0x68,0xc4,0x3e,0xb9 }, { 0x57,0xe7,0x0f,0x93 }, { 0x5e,0xea,0x04,0x9d }, { 0x45,0xfd,0x19,0x8f }, { 0x4c,0xf0,0x12,0x81 }, { 0xab,0x6b,0xcb,0x3b }, { 0xa2,0x66,0xc0,0x35 }, { 0xb9,0x71,0xdd,0x27 }, { 0xb0,0x7c,0xd6,0x29 }, { 0x8f,0x5f,0xe7,0x03 }, { 0x86,0x52,0xec,0x0d }, { 0x9d,0x45,0xf1,0x1f }, { 0x94,0x48,0xfa,0x11 }, { 0xe3,0x03,0x93,0x4b }, { 0xea,0x0e,0x98,0x45 }, { 0xf1,0x19,0x85,0x57 }, { 0xf8,0x14,0x8e,0x59 }, { 0xc7,0x37,0xbf,0x73 }, { 0xce,0x3a,0xb4,0x7d }, { 0xd5,0x2d,0xa9,0x6f }, { 0xdc,0x20,0xa2,0x61 }, { 0x76,0x6d,0xf6,0xad }, { 0x7f,0x60,0xfd,0xa3 }, { 0x64,0x77,0xe0,0xb1 }, { 0x6d,0x7a,0xeb,0xbf }, { 0x52,0x59,0xda,0x95 }, { 0x5b,0x54,0xd1,0x9b }, { 0x40,0x43,0xcc,0x89 }, { 0x49,0x4e,0xc7,0x87 }, { 0x3e,0x05,0xae,0xdd }, { 0x37,0x08,0xa5,0xd3 }, { 0x2c,0x1f,0xb8,0xc1 }, { 0x25,0x12,0xb3,0xcf }, { 0x1a,0x31,0x82,0xe5 }, { 0x13,0x3c,0x89,0xeb }, { 0x08,0x2b,0x94,0xf9 }, { 0x01,0x26,0x9f,0xf7 }, { 0xe6,0xbd,0x46,0x4d }, { 0xef,0xb0,0x4d,0x43 }, { 0xf4,0xa7,0x50,0x51 }, { 0xfd,0xaa,0x5b,0x5f }, { 0xc2,0x89,0x6a,0x75 }, { 0xcb,0x84,0x61,0x7b }, { 0xd0,0x93,0x7c,0x69 }, { 0xd9,0x9e,0x77,0x67 }, { 0xae,0xd5,0x1e,0x3d }, { 0xa7,0xd8,0x15,0x33 }, { 0xbc,0xcf,0x08,0x21 }, { 0xb5,0xc2,0x03,0x2f }, { 0x8a,0xe1,0x32,0x05 }, { 0x83,0xec,0x39,0x0b }, { 0x98,0xfb,0x24,0x19 }, { 0x91,0xf6,0x2f,0x17 }, { 0x4d,0xd6,0x8d,0x76 }, { 0x44,0xdb,0x86,0x78 }, { 0x5f,0xcc,0x9b,0x6a }, { 0x56,0xc1,0x90,0x64 }, { 0x69,0xe2,0xa1,0x4e }, { 0x60,0xef,0xaa,0x40 }, { 0x7b,0xf8,0xb7,0x52 }, { 0x72,0xf5,0xbc,0x5c }, { 0x05,0xbe,0xd5,0x06 }, { 0x0c,0xb3,0xde,0x08 }, { 0x17,0xa4,0xc3,0x1a }, { 0x1e,0xa9,0xc8,0x14 }, { 0x21,0x8a,0xf9,0x3e }, { 0x28,0x87,0xf2,0x30 }, { 0x33,0x90,0xef,0x22 }, { 0x3a,0x9d,0xe4,0x2c }, { 0xdd,0x06,0x3d,0x96 }, { 0xd4,0x0b,0x36,0x98 }, { 0xcf,0x1c,0x2b,0x8a }, { 0xc6,0x11,0x20,0x84 }, { 0xf9,0x32,0x11,0xae }, { 0xf0,0x3f,0x1a,0xa0 }, { 0xeb,0x28,0x07,0xb2 }, { 0xe2,0x25,0x0c,0xbc }, { 0x95,0x6e,0x65,0xe6 }, { 0x9c,0x63,0x6e,0xe8 }, { 0x87,0x74,0x73,0xfa }, { 0x8e,0x79,0x78,0xf4 }, { 0xb1,0x5a,0x49,0xde }, { 0xb8,0x57,0x42,0xd0 }, { 0xa3,0x40,0x5f,0xc2 }, { 0xaa,0x4d,0x54,0xcc }, { 0xec,0xda,0xf7,0x41 }, { 0xe5,0xd7,0xfc,0x4f }, { 0xfe,0xc0,0xe1,0x5d }, { 0xf7,0xcd,0xea,0x53 }, { 0xc8,0xee,0xdb,0x79 }, { 0xc1,0xe3,0xd0,0x77 }, { 0xda,0xf4,0xcd,0x65 }, { 0xd3,0xf9,0xc6,0x6b }, { 0xa4,0xb2,0xaf,0x31 }, { 0xad,0xbf,0xa4,0x3f }, { 0xb6,0xa8,0xb9,0x2d }, { 0xbf,0xa5,0xb2,0x23 }, { 0x80,0x86,0x83,0x09 }, { 0x89,0x8b,0x88,0x07 }, { 0x92,0x9c,0x95,0x15 }, { 0x9b,0x91,0x9e,0x1b }, { 0x7c,0x0a,0x47,0xa1 }, { 0x75,0x07,0x4c,0xaf }, { 0x6e,0x10,0x51,0xbd }, { 0x67,0x1d,0x5a,0xb3 }, { 0x58,0x3e,0x6b,0x99 }, { 0x51,0x33,0x60,0x97 }, { 0x4a,0x24,0x7d,0x85 }, { 0x43,0x29,0x76,0x8b }, { 0x34,0x62,0x1f,0xd1 }, { 0x3d,0x6f,0x14,0xdf }, { 0x26,0x78,0x09,0xcd }, { 0x2f,0x75,0x02,0xc3 }, { 0x10,0x56,0x33,0xe9 }, { 0x19,0x5b,0x38,0xe7 }, { 0x02,0x4c,0x25,0xf5 }, { 0x0b,0x41,0x2e,0xfb }, { 0xd7,0x61,0x8c,0x9a }, { 0xde,0x6c,0x87,0x94 }, { 0xc5,0x7b,0x9a,0x86 }, { 0xcc,0x76,0x91,0x88 }, { 0xf3,0x55,0xa0,0xa2 }, { 0xfa,0x58,0xab,0xac }, { 0xe1,0x4f,0xb6,0xbe }, { 0xe8,0x42,0xbd,0xb0 }, { 0x9f,0x09,0xd4,0xea }, { 0x96,0x04,0xdf,0xe4 }, { 0x8d,0x13,0xc2,0xf6 }, { 0x84,0x1e,0xc9,0xf8 }, { 0xbb,0x3d,0xf8,0xd2 }, { 0xb2,0x30,0xf3,0xdc }, { 0xa9,0x27,0xee,0xce }, { 0xa0,0x2a,0xe5,0xc0 }, { 0x47,0xb1,0x3c,0x7a }, { 0x4e,0xbc,0x37,0x74 }, { 0x55,0xab,0x2a,0x66 }, { 0x5c,0xa6,0x21,0x68 }, { 0x63,0x85,0x10,0x42 }, { 0x6a,0x88,0x1b,0x4c }, { 0x71,0x9f,0x06,0x5e }, { 0x78,0x92,0x0d,0x50 }, { 0x0f,0xd9,0x64,0x0a }, { 0x06,0xd4,0x6f,0x04 }, { 0x1d,0xc3,0x72,0x16 }, { 0x14,0xce,0x79,0x18 }, { 0x2b,0xed,0x48,0x32 }, { 0x22,0xe0,0x43,0x3c }, { 0x39,0xf7,0x5e,0x2e }, { 0x30,0xfa,0x55,0x20 }, { 0x9a,0xb7,0x01,0xec }, { 0x93,0xba,0x0a,0xe2 }, { 0x88,0xad,0x17,0xf0 }, { 0x81,0xa0,0x1c,0xfe }, { 0xbe,0x83,0x2d,0xd4 }, { 0xb7,0x8e,0x26,0xda }, { 0xac,0x99,0x3b,0xc8 }, { 0xa5,0x94,0x30,0xc6 }, { 0xd2,0xdf,0x59,0x9c }, { 0xdb,0xd2,0x52,0x92 }, { 0xc0,0xc5,0x4f,0x80 }, { 0xc9,0xc8,0x44,0x8e }, { 0xf6,0xeb,0x75,0xa4 }, { 0xff,0xe6,0x7e,0xaa }, { 0xe4,0xf1,0x63,0xb8 }, { 0xed,0xfc,0x68,0xb6 }, { 0x0a,0x67,0xb1,0x0c }, { 0x03,0x6a,0xba,0x02 }, { 0x18,0x7d,0xa7,0x10 }, { 0x11,0x70,0xac,0x1e }, { 0x2e,0x53,0x9d,0x34 }, { 0x27,0x5e,0x96,0x3a }, { 0x3c,0x49,0x8b,0x28 }, { 0x35,0x44,0x80,0x26 }, { 0x42,0x0f,0xe9,0x7c }, { 0x4b,0x02,0xe2,0x72 }, { 0x50,0x15,0xff,0x60 }, { 0x59,0x18,0xf4,0x6e }, { 0x66,0x3b,0xc5,0x44 }, { 0x6f,0x36,0xce,0x4a }, { 0x74,0x21,0xd3,0x58 }, { 0x7d,0x2c,0xd8,0x56 }, { 0xa1,0x0c,0x7a,0x37 }, { 0xa8,0x01,0x71,0x39 }, { 0xb3,0x16,0x6c,0x2b }, { 0xba,0x1b,0x67,0x25 }, { 0x85,0x38,0x56,0x0f }, { 0x8c,0x35,0x5d,0x01 }, { 0x97,0x22,0x40,0x13 }, { 0x9e,0x2f,0x4b,0x1d }, { 0xe9,0x64,0x22,0x47 }, { 0xe0,0x69,0x29,0x49 }, { 0xfb,0x7e,0x34,0x5b }, { 0xf2,0x73,0x3f,0x55 }, { 0xcd,0x50,0x0e,0x7f }, { 0xc4,0x5d,0x05,0x71 }, { 0xdf,0x4a,0x18,0x63 }, { 0xd6,0x47,0x13,0x6d }, { 0x31,0xdc,0xca,0xd7 }, { 0x38,0xd1,0xc1,0xd9 }, { 0x23,0xc6,0xdc,0xcb }, { 0x2a,0xcb,0xd7,0xc5 }, { 0x15,0xe8,0xe6,0xef }, { 0x1c,0xe5,0xed,0xe1 }, { 0x07,0xf2,0xf0,0xf3 }, { 0x0e,0xff,0xfb,0xfd }, { 0x79,0xb4,0x92,0xa7 }, { 0x70,0xb9,0x99,0xa9 }, { 0x6b,0xae,0x84,0xbb }, { 0x62,0xa3,0x8f,0xb5 }, { 0x5d,0x80,0xbe,0x9f }, { 0x54,0x8d,0xb5,0x91 }, { 0x4f,0x9a,0xa8,0x83 }, { 0x46,0x97,0xa3,0x8d } }; static const u32 rcon[30] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 }; static void burn_stack (int bytes) { char buf[64]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } /* Perform the key setup. */ static int do_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen) { static int initialized = 0; static const char *selftest_failed=0; int ROUNDS; byte k[MAXKC][4]; int i,j, r, t, rconpointer = 0; byte tk[MAXKC][4]; int KC; /* space for automatic variables is about 64 + 11*int */ if (!initialized) { initialized = 1; selftest_failed = selftest (); if( selftest_failed ) fprintf(stderr, "%s\n", selftest_failed ); } if( selftest_failed ) return G10ERR_SELFTEST_FAILED; if( keylen == 128/8 ) { ROUNDS = 10; KC = 4; } else if ( keylen == 192/8 ) { ROUNDS = 12; KC = 6; } else if ( keylen == 256/8 ) { ROUNDS = 14; KC = 8; } else return G10ERR_WRONG_KEYLEN; ctx->ROUNDS = ROUNDS; ctx->decryption_prepared = 0; for (i = 0; i < keylen; i++) { k[i >> 2][i & 3] = key[i]; } #define W (ctx->keySched) for (j = KC-1; j >= 0; j--) { *((u32_a_t*)tk[j]) = *((u32_a_t*)k[j]); } r = 0; t = 0; /* copy values into round key array */ for (j = 0; (j < KC) && (r < ROUNDS + 1); ) { for (; (j < KC) && (t < 4); j++, t++) { *((u32_a_t*)W[r][t]) = *((u32_a_t*)tk[j]); } if (t == 4) { r++; t = 0; } } while (r < ROUNDS + 1) { /* while not enough round key material calculated */ /* calculate new values */ tk[0][0] ^= S[tk[KC-1][1]]; tk[0][1] ^= S[tk[KC-1][2]]; tk[0][2] ^= S[tk[KC-1][3]]; tk[0][3] ^= S[tk[KC-1][0]]; tk[0][0] ^= rcon[rconpointer++]; if (KC != 8) { for (j = 1; j < KC; j++) { *((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]); } } else { for (j = 1; j < KC/2; j++) { *((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]); } tk[KC/2][0] ^= S[tk[KC/2 - 1][0]]; tk[KC/2][1] ^= S[tk[KC/2 - 1][1]]; tk[KC/2][2] ^= S[tk[KC/2 - 1][2]]; tk[KC/2][3] ^= S[tk[KC/2 - 1][3]]; for (j = KC/2 + 1; j < KC; j++) { *((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]); } } /* copy values into round key array */ for (j = 0; (j < KC) && (r < ROUNDS + 1); ) { for (; (j < KC) && (t < 4); j++, t++) { *((u32_a_t*)W[r][t]) = *((u32_a_t*)tk[j]); } if (t == 4) { r++; t = 0; } } } #undef W return 0; } static int rijndael_setkey (void *ctx, const byte *key, const unsigned keylen) { int rc = do_setkey (ctx, key, keylen); burn_stack ( 100 + 16*sizeof(int)); return rc; } /* make a decryption key from an encryption key */ static void prepare_decryption( RIJNDAEL_context *ctx ) { int r; byte *w; for (r=0; r < MAXROUNDS+1; r++ ) { *((u32_a_t*)ctx->keySched2[r][0]) = *((u32_a_t*)ctx->keySched[r][0]); *((u32_a_t*)ctx->keySched2[r][1]) = *((u32_a_t*)ctx->keySched[r][1]); *((u32_a_t*)ctx->keySched2[r][2]) = *((u32_a_t*)ctx->keySched[r][2]); *((u32_a_t*)ctx->keySched2[r][3]) = *((u32_a_t*)ctx->keySched[r][3]); } #define W (ctx->keySched2) for (r = 1; r < ctx->ROUNDS; r++) { w = W[r][0]; *((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]]) ^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]); w = W[r][1]; *((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]]) ^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]); w = W[r][2]; *((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]]) ^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]); w = W[r][3]; *((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]]) ^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]); } #undef W } /* Encrypt one block. A and B need to be aligned on a 4 byte boundary. A and B may be the same. */ static void do_encrypt_aligned (const RIJNDAEL_context *ctx, unsigned char *b, const unsigned char *a) { #define rk (ctx->keySched) int ROUNDS = ctx->ROUNDS; int r; union { u32_a_t tempu32[4]; /* Force correct alignment. */ byte temp[4][4]; } u; *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(a )) ^ *((u32_a_t*)rk[0][0]); *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(a+ 4)) ^ *((u32_a_t*)rk[0][1]); *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(a+ 8)) ^ *((u32_a_t*)rk[0][2]); *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(a+12)) ^ *((u32_a_t*)rk[0][3]); *((u32_a_t*)(b )) = (*((u32_a_t*)T1[u.temp[0][0]]) ^ *((u32_a_t*)T2[u.temp[1][1]]) ^ *((u32_a_t*)T3[u.temp[2][2]]) ^ *((u32_a_t*)T4[u.temp[3][3]])); *((u32_a_t*)(b + 4)) = (*((u32_a_t*)T1[u.temp[1][0]]) ^ *((u32_a_t*)T2[u.temp[2][1]]) ^ *((u32_a_t*)T3[u.temp[3][2]]) ^ *((u32_a_t*)T4[u.temp[0][3]])); *((u32_a_t*)(b + 8)) = (*((u32_a_t*)T1[u.temp[2][0]]) ^ *((u32_a_t*)T2[u.temp[3][1]]) ^ *((u32_a_t*)T3[u.temp[0][2]]) ^ *((u32_a_t*)T4[u.temp[1][3]])); *((u32_a_t*)(b +12)) = (*((u32_a_t*)T1[u.temp[3][0]]) ^ *((u32_a_t*)T2[u.temp[0][1]]) ^ *((u32_a_t*)T3[u.temp[1][2]]) ^ *((u32_a_t*)T4[u.temp[2][3]])); for (r = 1; r < ROUNDS-1; r++) { *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(b )) ^ *((u32_a_t*)rk[r][0]); *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(b+ 4)) ^ *((u32_a_t*)rk[r][1]); *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(b+ 8)) ^ *((u32_a_t*)rk[r][2]); *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(b+12)) ^ *((u32_a_t*)rk[r][3]); *((u32_a_t*)(b )) = (*((u32_a_t*)T1[u.temp[0][0]]) ^ *((u32_a_t*)T2[u.temp[1][1]]) ^ *((u32_a_t*)T3[u.temp[2][2]]) ^ *((u32_a_t*)T4[u.temp[3][3]])); *((u32_a_t*)(b + 4)) = (*((u32_a_t*)T1[u.temp[1][0]]) ^ *((u32_a_t*)T2[u.temp[2][1]]) ^ *((u32_a_t*)T3[u.temp[3][2]]) ^ *((u32_a_t*)T4[u.temp[0][3]])); *((u32_a_t*)(b + 8)) = (*((u32_a_t*)T1[u.temp[2][0]]) ^ *((u32_a_t*)T2[u.temp[3][1]]) ^ *((u32_a_t*)T3[u.temp[0][2]]) ^ *((u32_a_t*)T4[u.temp[1][3]])); *((u32_a_t*)(b +12)) = (*((u32_a_t*)T1[u.temp[3][0]]) ^ *((u32_a_t*)T2[u.temp[0][1]]) ^ *((u32_a_t*)T3[u.temp[1][2]]) ^ *((u32_a_t*)T4[u.temp[2][3]])); } /* Last round is special. */ *((u32_a_t*)u.temp[0]) = *((u32_a_t*)(b )) ^ *((u32_a_t*)rk[ROUNDS-1][0]); *((u32_a_t*)u.temp[1]) = *((u32_a_t*)(b+ 4)) ^ *((u32_a_t*)rk[ROUNDS-1][1]); *((u32_a_t*)u.temp[2]) = *((u32_a_t*)(b+ 8)) ^ *((u32_a_t*)rk[ROUNDS-1][2]); *((u32_a_t*)u.temp[3]) = *((u32_a_t*)(b+12)) ^ *((u32_a_t*)rk[ROUNDS-1][3]); b[ 0] = T1[u.temp[0][0]][1]; b[ 1] = T1[u.temp[1][1]][1]; b[ 2] = T1[u.temp[2][2]][1]; b[ 3] = T1[u.temp[3][3]][1]; b[ 4] = T1[u.temp[1][0]][1]; b[ 5] = T1[u.temp[2][1]][1]; b[ 6] = T1[u.temp[3][2]][1]; b[ 7] = T1[u.temp[0][3]][1]; b[ 8] = T1[u.temp[2][0]][1]; b[ 9] = T1[u.temp[3][1]][1]; b[10] = T1[u.temp[0][2]][1]; b[11] = T1[u.temp[1][3]][1]; b[12] = T1[u.temp[3][0]][1]; b[13] = T1[u.temp[0][1]][1]; b[14] = T1[u.temp[1][2]][1]; b[15] = T1[u.temp[2][3]][1]; *((u32_a_t*)(b )) ^= *((u32_a_t*)rk[ROUNDS][0]); *((u32_a_t*)(b+ 4)) ^= *((u32_a_t*)rk[ROUNDS][1]); *((u32_a_t*)(b+ 8)) ^= *((u32_a_t*)rk[ROUNDS][2]); *((u32_a_t*)(b+12)) ^= *((u32_a_t*)rk[ROUNDS][3]); #undef rk } static void do_encrypt (const RIJNDAEL_context *ctx, unsigned char *bx, const unsigned char *ax) { /* BX and AX are not necessary correctly aligned. Thus we need to copy them here. */ union { u32 dummy[4]; byte a[16]; } a; union { u32 dummy[4]; byte b[16]; } b; memcpy (a.a, ax, 16); do_encrypt_aligned (ctx, b.b, a.a); memcpy (bx, b.b, 16); } static void rijndael_encrypt (void *ctx, byte *b, const byte *a) { do_encrypt (ctx, b, a); burn_stack (16 + 2*sizeof(int)); } /* Decrypt one block. a and b may be the same. */ static void do_decrypt (RIJNDAEL_context *ctx, byte *b, const byte *a) { #define rk (ctx->keySched2) int ROUNDS = ctx->ROUNDS; int r; byte temp[4][4]; if ( !ctx->decryption_prepared ) { prepare_decryption ( ctx ); burn_stack (64); ctx->decryption_prepared = 1; } *((u32_a_t*)temp[0]) = *((u32_a_t*)(a )) ^ *((u32_a_t*)rk[ROUNDS][0]); *((u32_a_t*)temp[1]) = *((u32_a_t*)(a+ 4)) ^ *((u32_a_t*)rk[ROUNDS][1]); *((u32_a_t*)temp[2]) = *((u32_a_t*)(a+ 8)) ^ *((u32_a_t*)rk[ROUNDS][2]); *((u32_a_t*)temp[3]) = *((u32_a_t*)(a+12)) ^ *((u32_a_t*)rk[ROUNDS][3]); *((u32_a_t*)(b )) = *((u32_a_t*)T5[temp[0][0]]) ^ *((u32_a_t*)T6[temp[3][1]]) ^ *((u32_a_t*)T7[temp[2][2]]) ^ *((u32_a_t*)T8[temp[1][3]]); *((u32_a_t*)(b+ 4)) = *((u32_a_t*)T5[temp[1][0]]) ^ *((u32_a_t*)T6[temp[0][1]]) ^ *((u32_a_t*)T7[temp[3][2]]) ^ *((u32_a_t*)T8[temp[2][3]]); *((u32_a_t*)(b+ 8)) = *((u32_a_t*)T5[temp[2][0]]) ^ *((u32_a_t*)T6[temp[1][1]]) ^ *((u32_a_t*)T7[temp[0][2]]) ^ *((u32_a_t*)T8[temp[3][3]]); *((u32_a_t*)(b+12)) = *((u32_a_t*)T5[temp[3][0]]) ^ *((u32_a_t*)T6[temp[2][1]]) ^ *((u32_a_t*)T7[temp[1][2]]) ^ *((u32_a_t*)T8[temp[0][3]]); for (r = ROUNDS-1; r > 1; r--) { *((u32_a_t*)temp[0]) = *((u32_a_t*)(b )) ^ *((u32_a_t*)rk[r][0]); *((u32_a_t*)temp[1]) = *((u32_a_t*)(b+ 4)) ^ *((u32_a_t*)rk[r][1]); *((u32_a_t*)temp[2]) = *((u32_a_t*)(b+ 8)) ^ *((u32_a_t*)rk[r][2]); *((u32_a_t*)temp[3]) = *((u32_a_t*)(b+12)) ^ *((u32_a_t*)rk[r][3]); *((u32_a_t*)(b )) = *((u32_a_t*)T5[temp[0][0]]) ^ *((u32_a_t*)T6[temp[3][1]]) ^ *((u32_a_t*)T7[temp[2][2]]) ^ *((u32_a_t*)T8[temp[1][3]]); *((u32_a_t*)(b+ 4)) = *((u32_a_t*)T5[temp[1][0]]) ^ *((u32_a_t*)T6[temp[0][1]]) ^ *((u32_a_t*)T7[temp[3][2]]) ^ *((u32_a_t*)T8[temp[2][3]]); *((u32_a_t*)(b+ 8)) = *((u32_a_t*)T5[temp[2][0]]) ^ *((u32_a_t*)T6[temp[1][1]]) ^ *((u32_a_t*)T7[temp[0][2]]) ^ *((u32_a_t*)T8[temp[3][3]]); *((u32_a_t*)(b+12)) = *((u32_a_t*)T5[temp[3][0]]) ^ *((u32_a_t*)T6[temp[2][1]]) ^ *((u32_a_t*)T7[temp[1][2]]) ^ *((u32_a_t*)T8[temp[0][3]]); } /* Last round is special. */ *((u32_a_t*)temp[0]) = *((u32_a_t*)(b )) ^ *((u32_a_t*)rk[1][0]); *((u32_a_t*)temp[1]) = *((u32_a_t*)(b+ 4)) ^ *((u32_a_t*)rk[1][1]); *((u32_a_t*)temp[2]) = *((u32_a_t*)(b+ 8)) ^ *((u32_a_t*)rk[1][2]); *((u32_a_t*)temp[3]) = *((u32_a_t*)(b+12)) ^ *((u32_a_t*)rk[1][3]); b[ 0] = S5[temp[0][0]]; b[ 1] = S5[temp[3][1]]; b[ 2] = S5[temp[2][2]]; b[ 3] = S5[temp[1][3]]; b[ 4] = S5[temp[1][0]]; b[ 5] = S5[temp[0][1]]; b[ 6] = S5[temp[3][2]]; b[ 7] = S5[temp[2][3]]; b[ 8] = S5[temp[2][0]]; b[ 9] = S5[temp[1][1]]; b[10] = S5[temp[0][2]]; b[11] = S5[temp[3][3]]; b[12] = S5[temp[3][0]]; b[13] = S5[temp[2][1]]; b[14] = S5[temp[1][2]]; b[15] = S5[temp[0][3]]; *((u32_a_t*)(b )) ^= *((u32_a_t*)rk[0][0]); *((u32_a_t*)(b+ 4)) ^= *((u32_a_t*)rk[0][1]); *((u32_a_t*)(b+ 8)) ^= *((u32_a_t*)rk[0][2]); *((u32_a_t*)(b+12)) ^= *((u32_a_t*)rk[0][3]); #undef rk } static void rijndael_decrypt (void *ctx, byte *b, const byte *a) { do_decrypt (ctx, b, a); burn_stack (16+2*sizeof(int)); } /* Bulk encryption of complete blocks in CFB mode. Caller needs to make sure that IV is aligned on an unsigned long boundary. This function is only intended for the bulk encryption feature of cipher.c. */ void rijndael_cfb_enc (void *context, unsigned char *iv, void *outbuf_arg, const void *inbuf_arg, unsigned int nblocks) { RIJNDAEL_context *ctx = context; unsigned char *outbuf = outbuf_arg; const unsigned char *inbuf = inbuf_arg; unsigned char *ivp; int i; for ( ;nblocks; nblocks-- ) { /* Encrypt the IV. */ do_encrypt_aligned (ctx, iv, iv); /* XOR the input with the IV and store input into IV. */ for (ivp=iv,i=0; i < 16; i++ ) *outbuf++ = (*ivp++ ^= *inbuf++); } burn_stack (16 + 2*sizeof(int)); } /* Bulk decryption of complete blocks in CFB mode. Caller needs to make sure that IV is aligned on an unisgned lonhg boundary. This function is only intended for the bulk encryption feature of cipher.c. */ void rijndael_cfb_dec (void *context, unsigned char *iv, void *outbuf_arg, const void *inbuf_arg, unsigned int nblocks) { RIJNDAEL_context *ctx = context; unsigned char *outbuf = outbuf_arg; const unsigned char *inbuf = inbuf_arg; unsigned char *ivp; unsigned char temp; int i; for ( ;nblocks; nblocks-- ) { do_encrypt_aligned (ctx, iv, iv); for (ivp=iv,i=0; i < 16; i++ ) { temp = *inbuf++; *outbuf++ = *ivp ^ temp; *ivp++ = temp; } } burn_stack (16 + 2*sizeof(int)); } /* Test a single encryption and decryption with each key size. */ static const char* selftest (void) { RIJNDAEL_context ctx; byte scratch[16]; /* The test vectors are from the AES supplied ones; more or less * randomly taken from ecb_tbl.txt (I=42,81,14) */ static const byte plaintext[16] = { 0x01,0x4B,0xAF,0x22,0x78,0xA6,0x9D,0x33, 0x1D,0x51,0x80,0x10,0x36,0x43,0xE9,0x9A }; static const byte key[16] = { 0xE8,0xE9,0xEA,0xEB,0xED,0xEE,0xEF,0xF0, 0xF2,0xF3,0xF4,0xF5,0xF7,0xF8,0xF9,0xFA }; static const byte ciphertext[16] = { 0x67,0x43,0xC3,0xD1,0x51,0x9A,0xB4,0xF2, 0xCD,0x9A,0x78,0xAB,0x09,0xA5,0x11,0xBD }; static const byte plaintext_192[16] = { 0x76,0x77,0x74,0x75,0xF1,0xF2,0xF3,0xF4, 0xF8,0xF9,0xE6,0xE7,0x77,0x70,0x71,0x72 }; static const byte key_192[24] = { 0x04,0x05,0x06,0x07,0x09,0x0A,0x0B,0x0C, 0x0E,0x0F,0x10,0x11,0x13,0x14,0x15,0x16, 0x18,0x19,0x1A,0x1B,0x1D,0x1E,0x1F,0x20 }; static const byte ciphertext_192[16] = { 0x5D,0x1E,0xF2,0x0D,0xCE,0xD6,0xBC,0xBC, 0x12,0x13,0x1A,0xC7,0xC5,0x47,0x88,0xAA }; static const byte plaintext_256[16] = { 0x06,0x9A,0x00,0x7F,0xC7,0x6A,0x45,0x9F, 0x98,0xBA,0xF9,0x17,0xFE,0xDF,0x95,0x21 }; static const byte key_256[32] = { 0x08,0x09,0x0A,0x0B,0x0D,0x0E,0x0F,0x10, 0x12,0x13,0x14,0x15,0x17,0x18,0x19,0x1A, 0x1C,0x1D,0x1E,0x1F,0x21,0x22,0x23,0x24, 0x26,0x27,0x28,0x29,0x2B,0x2C,0x2D,0x2E }; static const byte ciphertext_256[16] = { 0x08,0x0E,0x95,0x17,0xEB,0x16,0x77,0x71, 0x9A,0xCF,0x72,0x80,0x86,0x04,0x0A,0xE3 }; rijndael_setkey (&ctx, key, sizeof(key)); rijndael_encrypt (&ctx, scratch, plaintext); if (memcmp (scratch, ciphertext, sizeof (ciphertext))) return "Rijndael-128 test encryption failed."; rijndael_decrypt (&ctx, scratch, scratch); if (memcmp (scratch, plaintext, sizeof (plaintext))) return "Rijndael-128 test decryption failed."; rijndael_setkey (&ctx, key_192, sizeof(key_192)); rijndael_encrypt (&ctx, scratch, plaintext_192); if (memcmp (scratch, ciphertext_192, sizeof (ciphertext_192))) return "Rijndael-192 test encryption failed."; rijndael_decrypt (&ctx, scratch, scratch); if (memcmp (scratch, plaintext_192, sizeof (plaintext_192))) return "Rijndael-192 test decryption failed."; rijndael_setkey (&ctx, key_256, sizeof(key_256)); rijndael_encrypt (&ctx, scratch, plaintext_256); if (memcmp (scratch, ciphertext_256, sizeof (ciphertext_256))) return "Rijndael-256 test encryption failed."; rijndael_decrypt (&ctx, scratch, scratch); if (memcmp (scratch, plaintext_256, sizeof (plaintext_256))) return "Rijndael-256 test decryption failed."; return NULL; } const char * rijndael_get_info(int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**r_setkey)(void *c, const byte *key, unsigned keylen), void (**r_encrypt)(void *c, byte *outbuf, const byte *inbuf), void (**r_decrypt)(void *c, byte *outbuf, const byte *inbuf) ) { *keylen = algo==7? 128 : algo==8? 192 : 256; *blocksize = 16; *contextsize = sizeof (RIJNDAEL_context); *r_setkey = rijndael_setkey; *r_encrypt = rijndael_encrypt; *r_decrypt = rijndael_decrypt; if( algo == 7 ) return "AES"; if (algo == 8) return "AES192"; if (algo == 9) return "AES256"; return NULL; } gnupg-1.4.20/cipher/blowfish.c0000644000175000017500000005344712635262326013116 00000000000000/* blowfish.c - Blowfish encryption * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * For a description of the algorithm, see: * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. * ISBN 0-471-11709-9. Pages 336 ff. */ /* Test values: * key "abcdefghijklmnopqrstuvwxyz"; * plain "BLOWFISH" * cipher 32 4E D0 FE F4 13 A2 03 * */ #include #include #include #include #include #include "types.h" #include "util.h" #include "errors.h" #include "algorithms.h" #define CIPHER_ALGO_BLOWFISH 4 /* blowfish 128 bit key */ #define BLOWFISH_BLOCKSIZE 8 #define BLOWFISH_ROUNDS 16 typedef struct { u32 s0[256]; u32 s1[256]; u32 s2[256]; u32 s3[256]; u32 p[BLOWFISH_ROUNDS+2]; } BLOWFISH_context; static int bf_setkey( void *c, const byte *key, unsigned keylen ); /* precomputed S boxes */ static const u32 ks0[256] = { 0xD1310BA6,0x98DFB5AC,0x2FFD72DB,0xD01ADFB7,0xB8E1AFED,0x6A267E96, 0xBA7C9045,0xF12C7F99,0x24A19947,0xB3916CF7,0x0801F2E2,0x858EFC16, 0x636920D8,0x71574E69,0xA458FEA3,0xF4933D7E,0x0D95748F,0x728EB658, 0x718BCD58,0x82154AEE,0x7B54A41D,0xC25A59B5,0x9C30D539,0x2AF26013, 0xC5D1B023,0x286085F0,0xCA417918,0xB8DB38EF,0x8E79DCB0,0x603A180E, 0x6C9E0E8B,0xB01E8A3E,0xD71577C1,0xBD314B27,0x78AF2FDA,0x55605C60, 0xE65525F3,0xAA55AB94,0x57489862,0x63E81440,0x55CA396A,0x2AAB10B6, 0xB4CC5C34,0x1141E8CE,0xA15486AF,0x7C72E993,0xB3EE1411,0x636FBC2A, 0x2BA9C55D,0x741831F6,0xCE5C3E16,0x9B87931E,0xAFD6BA33,0x6C24CF5C, 0x7A325381,0x28958677,0x3B8F4898,0x6B4BB9AF,0xC4BFE81B,0x66282193, 0x61D809CC,0xFB21A991,0x487CAC60,0x5DEC8032,0xEF845D5D,0xE98575B1, 0xDC262302,0xEB651B88,0x23893E81,0xD396ACC5,0x0F6D6FF3,0x83F44239, 0x2E0B4482,0xA4842004,0x69C8F04A,0x9E1F9B5E,0x21C66842,0xF6E96C9A, 0x670C9C61,0xABD388F0,0x6A51A0D2,0xD8542F68,0x960FA728,0xAB5133A3, 0x6EEF0B6C,0x137A3BE4,0xBA3BF050,0x7EFB2A98,0xA1F1651D,0x39AF0176, 0x66CA593E,0x82430E88,0x8CEE8619,0x456F9FB4,0x7D84A5C3,0x3B8B5EBE, 0xE06F75D8,0x85C12073,0x401A449F,0x56C16AA6,0x4ED3AA62,0x363F7706, 0x1BFEDF72,0x429B023D,0x37D0D724,0xD00A1248,0xDB0FEAD3,0x49F1C09B, 0x075372C9,0x80991B7B,0x25D479D8,0xF6E8DEF7,0xE3FE501A,0xB6794C3B, 0x976CE0BD,0x04C006BA,0xC1A94FB6,0x409F60C4,0x5E5C9EC2,0x196A2463, 0x68FB6FAF,0x3E6C53B5,0x1339B2EB,0x3B52EC6F,0x6DFC511F,0x9B30952C, 0xCC814544,0xAF5EBD09,0xBEE3D004,0xDE334AFD,0x660F2807,0x192E4BB3, 0xC0CBA857,0x45C8740F,0xD20B5F39,0xB9D3FBDB,0x5579C0BD,0x1A60320A, 0xD6A100C6,0x402C7279,0x679F25FE,0xFB1FA3CC,0x8EA5E9F8,0xDB3222F8, 0x3C7516DF,0xFD616B15,0x2F501EC8,0xAD0552AB,0x323DB5FA,0xFD238760, 0x53317B48,0x3E00DF82,0x9E5C57BB,0xCA6F8CA0,0x1A87562E,0xDF1769DB, 0xD542A8F6,0x287EFFC3,0xAC6732C6,0x8C4F5573,0x695B27B0,0xBBCA58C8, 0xE1FFA35D,0xB8F011A0,0x10FA3D98,0xFD2183B8,0x4AFCB56C,0x2DD1D35B, 0x9A53E479,0xB6F84565,0xD28E49BC,0x4BFB9790,0xE1DDF2DA,0xA4CB7E33, 0x62FB1341,0xCEE4C6E8,0xEF20CADA,0x36774C01,0xD07E9EFE,0x2BF11FB4, 0x95DBDA4D,0xAE909198,0xEAAD8E71,0x6B93D5A0,0xD08ED1D0,0xAFC725E0, 0x8E3C5B2F,0x8E7594B7,0x8FF6E2FB,0xF2122B64,0x8888B812,0x900DF01C, 0x4FAD5EA0,0x688FC31C,0xD1CFF191,0xB3A8C1AD,0x2F2F2218,0xBE0E1777, 0xEA752DFE,0x8B021FA1,0xE5A0CC0F,0xB56F74E8,0x18ACF3D6,0xCE89E299, 0xB4A84FE0,0xFD13E0B7,0x7CC43B81,0xD2ADA8D9,0x165FA266,0x80957705, 0x93CC7314,0x211A1477,0xE6AD2065,0x77B5FA86,0xC75442F5,0xFB9D35CF, 0xEBCDAF0C,0x7B3E89A0,0xD6411BD3,0xAE1E7E49,0x00250E2D,0x2071B35E, 0x226800BB,0x57B8E0AF,0x2464369B,0xF009B91E,0x5563911D,0x59DFA6AA, 0x78C14389,0xD95A537F,0x207D5BA2,0x02E5B9C5,0x83260376,0x6295CFA9, 0x11C81968,0x4E734A41,0xB3472DCA,0x7B14A94A,0x1B510052,0x9A532915, 0xD60F573F,0xBC9BC6E4,0x2B60A476,0x81E67400,0x08BA6FB5,0x571BE91F, 0xF296EC6B,0x2A0DD915,0xB6636521,0xE7B9F9B6,0xFF34052E,0xC5855664, 0x53B02D5D,0xA99F8FA1,0x08BA4799,0x6E85076A }; static const u32 ks1[256] = { 0x4B7A70E9,0xB5B32944,0xDB75092E,0xC4192623,0xAD6EA6B0,0x49A7DF7D, 0x9CEE60B8,0x8FEDB266,0xECAA8C71,0x699A17FF,0x5664526C,0xC2B19EE1, 0x193602A5,0x75094C29,0xA0591340,0xE4183A3E,0x3F54989A,0x5B429D65, 0x6B8FE4D6,0x99F73FD6,0xA1D29C07,0xEFE830F5,0x4D2D38E6,0xF0255DC1, 0x4CDD2086,0x8470EB26,0x6382E9C6,0x021ECC5E,0x09686B3F,0x3EBAEFC9, 0x3C971814,0x6B6A70A1,0x687F3584,0x52A0E286,0xB79C5305,0xAA500737, 0x3E07841C,0x7FDEAE5C,0x8E7D44EC,0x5716F2B8,0xB03ADA37,0xF0500C0D, 0xF01C1F04,0x0200B3FF,0xAE0CF51A,0x3CB574B2,0x25837A58,0xDC0921BD, 0xD19113F9,0x7CA92FF6,0x94324773,0x22F54701,0x3AE5E581,0x37C2DADC, 0xC8B57634,0x9AF3DDA7,0xA9446146,0x0FD0030E,0xECC8C73E,0xA4751E41, 0xE238CD99,0x3BEA0E2F,0x3280BBA1,0x183EB331,0x4E548B38,0x4F6DB908, 0x6F420D03,0xF60A04BF,0x2CB81290,0x24977C79,0x5679B072,0xBCAF89AF, 0xDE9A771F,0xD9930810,0xB38BAE12,0xDCCF3F2E,0x5512721F,0x2E6B7124, 0x501ADDE6,0x9F84CD87,0x7A584718,0x7408DA17,0xBC9F9ABC,0xE94B7D8C, 0xEC7AEC3A,0xDB851DFA,0x63094366,0xC464C3D2,0xEF1C1847,0x3215D908, 0xDD433B37,0x24C2BA16,0x12A14D43,0x2A65C451,0x50940002,0x133AE4DD, 0x71DFF89E,0x10314E55,0x81AC77D6,0x5F11199B,0x043556F1,0xD7A3C76B, 0x3C11183B,0x5924A509,0xF28FE6ED,0x97F1FBFA,0x9EBABF2C,0x1E153C6E, 0x86E34570,0xEAE96FB1,0x860E5E0A,0x5A3E2AB3,0x771FE71C,0x4E3D06FA, 0x2965DCB9,0x99E71D0F,0x803E89D6,0x5266C825,0x2E4CC978,0x9C10B36A, 0xC6150EBA,0x94E2EA78,0xA5FC3C53,0x1E0A2DF4,0xF2F74EA7,0x361D2B3D, 0x1939260F,0x19C27960,0x5223A708,0xF71312B6,0xEBADFE6E,0xEAC31F66, 0xE3BC4595,0xA67BC883,0xB17F37D1,0x018CFF28,0xC332DDEF,0xBE6C5AA5, 0x65582185,0x68AB9802,0xEECEA50F,0xDB2F953B,0x2AEF7DAD,0x5B6E2F84, 0x1521B628,0x29076170,0xECDD4775,0x619F1510,0x13CCA830,0xEB61BD96, 0x0334FE1E,0xAA0363CF,0xB5735C90,0x4C70A239,0xD59E9E0B,0xCBAADE14, 0xEECC86BC,0x60622CA7,0x9CAB5CAB,0xB2F3846E,0x648B1EAF,0x19BDF0CA, 0xA02369B9,0x655ABB50,0x40685A32,0x3C2AB4B3,0x319EE9D5,0xC021B8F7, 0x9B540B19,0x875FA099,0x95F7997E,0x623D7DA8,0xF837889A,0x97E32D77, 0x11ED935F,0x16681281,0x0E358829,0xC7E61FD6,0x96DEDFA1,0x7858BA99, 0x57F584A5,0x1B227263,0x9B83C3FF,0x1AC24696,0xCDB30AEB,0x532E3054, 0x8FD948E4,0x6DBC3128,0x58EBF2EF,0x34C6FFEA,0xFE28ED61,0xEE7C3C73, 0x5D4A14D9,0xE864B7E3,0x42105D14,0x203E13E0,0x45EEE2B6,0xA3AAABEA, 0xDB6C4F15,0xFACB4FD0,0xC742F442,0xEF6ABBB5,0x654F3B1D,0x41CD2105, 0xD81E799E,0x86854DC7,0xE44B476A,0x3D816250,0xCF62A1F2,0x5B8D2646, 0xFC8883A0,0xC1C7B6A3,0x7F1524C3,0x69CB7492,0x47848A0B,0x5692B285, 0x095BBF00,0xAD19489D,0x1462B174,0x23820E00,0x58428D2A,0x0C55F5EA, 0x1DADF43E,0x233F7061,0x3372F092,0x8D937E41,0xD65FECF1,0x6C223BDB, 0x7CDE3759,0xCBEE7460,0x4085F2A7,0xCE77326E,0xA6078084,0x19F8509E, 0xE8EFD855,0x61D99735,0xA969A7AA,0xC50C06C2,0x5A04ABFC,0x800BCADC, 0x9E447A2E,0xC3453484,0xFDD56705,0x0E1E9EC9,0xDB73DBD3,0x105588CD, 0x675FDA79,0xE3674340,0xC5C43465,0x713E38D8,0x3D28F89E,0xF16DFF20, 0x153E21E7,0x8FB03D4A,0xE6E39F2B,0xDB83ADF7 }; static const u32 ks2[256] = { 0xE93D5A68,0x948140F7,0xF64C261C,0x94692934,0x411520F7,0x7602D4F7, 0xBCF46B2E,0xD4A20068,0xD4082471,0x3320F46A,0x43B7D4B7,0x500061AF, 0x1E39F62E,0x97244546,0x14214F74,0xBF8B8840,0x4D95FC1D,0x96B591AF, 0x70F4DDD3,0x66A02F45,0xBFBC09EC,0x03BD9785,0x7FAC6DD0,0x31CB8504, 0x96EB27B3,0x55FD3941,0xDA2547E6,0xABCA0A9A,0x28507825,0x530429F4, 0x0A2C86DA,0xE9B66DFB,0x68DC1462,0xD7486900,0x680EC0A4,0x27A18DEE, 0x4F3FFEA2,0xE887AD8C,0xB58CE006,0x7AF4D6B6,0xAACE1E7C,0xD3375FEC, 0xCE78A399,0x406B2A42,0x20FE9E35,0xD9F385B9,0xEE39D7AB,0x3B124E8B, 0x1DC9FAF7,0x4B6D1856,0x26A36631,0xEAE397B2,0x3A6EFA74,0xDD5B4332, 0x6841E7F7,0xCA7820FB,0xFB0AF54E,0xD8FEB397,0x454056AC,0xBA489527, 0x55533A3A,0x20838D87,0xFE6BA9B7,0xD096954B,0x55A867BC,0xA1159A58, 0xCCA92963,0x99E1DB33,0xA62A4A56,0x3F3125F9,0x5EF47E1C,0x9029317C, 0xFDF8E802,0x04272F70,0x80BB155C,0x05282CE3,0x95C11548,0xE4C66D22, 0x48C1133F,0xC70F86DC,0x07F9C9EE,0x41041F0F,0x404779A4,0x5D886E17, 0x325F51EB,0xD59BC0D1,0xF2BCC18F,0x41113564,0x257B7834,0x602A9C60, 0xDFF8E8A3,0x1F636C1B,0x0E12B4C2,0x02E1329E,0xAF664FD1,0xCAD18115, 0x6B2395E0,0x333E92E1,0x3B240B62,0xEEBEB922,0x85B2A20E,0xE6BA0D99, 0xDE720C8C,0x2DA2F728,0xD0127845,0x95B794FD,0x647D0862,0xE7CCF5F0, 0x5449A36F,0x877D48FA,0xC39DFD27,0xF33E8D1E,0x0A476341,0x992EFF74, 0x3A6F6EAB,0xF4F8FD37,0xA812DC60,0xA1EBDDF8,0x991BE14C,0xDB6E6B0D, 0xC67B5510,0x6D672C37,0x2765D43B,0xDCD0E804,0xF1290DC7,0xCC00FFA3, 0xB5390F92,0x690FED0B,0x667B9FFB,0xCEDB7D9C,0xA091CF0B,0xD9155EA3, 0xBB132F88,0x515BAD24,0x7B9479BF,0x763BD6EB,0x37392EB3,0xCC115979, 0x8026E297,0xF42E312D,0x6842ADA7,0xC66A2B3B,0x12754CCC,0x782EF11C, 0x6A124237,0xB79251E7,0x06A1BBE6,0x4BFB6350,0x1A6B1018,0x11CAEDFA, 0x3D25BDD8,0xE2E1C3C9,0x44421659,0x0A121386,0xD90CEC6E,0xD5ABEA2A, 0x64AF674E,0xDA86A85F,0xBEBFE988,0x64E4C3FE,0x9DBC8057,0xF0F7C086, 0x60787BF8,0x6003604D,0xD1FD8346,0xF6381FB0,0x7745AE04,0xD736FCCC, 0x83426B33,0xF01EAB71,0xB0804187,0x3C005E5F,0x77A057BE,0xBDE8AE24, 0x55464299,0xBF582E61,0x4E58F48F,0xF2DDFDA2,0xF474EF38,0x8789BDC2, 0x5366F9C3,0xC8B38E74,0xB475F255,0x46FCD9B9,0x7AEB2661,0x8B1DDF84, 0x846A0E79,0x915F95E2,0x466E598E,0x20B45770,0x8CD55591,0xC902DE4C, 0xB90BACE1,0xBB8205D0,0x11A86248,0x7574A99E,0xB77F19B6,0xE0A9DC09, 0x662D09A1,0xC4324633,0xE85A1F02,0x09F0BE8C,0x4A99A025,0x1D6EFE10, 0x1AB93D1D,0x0BA5A4DF,0xA186F20F,0x2868F169,0xDCB7DA83,0x573906FE, 0xA1E2CE9B,0x4FCD7F52,0x50115E01,0xA70683FA,0xA002B5C4,0x0DE6D027, 0x9AF88C27,0x773F8641,0xC3604C06,0x61A806B5,0xF0177A28,0xC0F586E0, 0x006058AA,0x30DC7D62,0x11E69ED7,0x2338EA63,0x53C2DD94,0xC2C21634, 0xBBCBEE56,0x90BCB6DE,0xEBFC7DA1,0xCE591D76,0x6F05E409,0x4B7C0188, 0x39720A3D,0x7C927C24,0x86E3725F,0x724D9DB9,0x1AC15BB4,0xD39EB8FC, 0xED545578,0x08FCA5B5,0xD83D7CD3,0x4DAD0FC4,0x1E50EF5E,0xB161E6F8, 0xA28514D9,0x6C51133C,0x6FD5C7E7,0x56E14EC4,0x362ABFCE,0xDDC6C837, 0xD79A3234,0x92638212,0x670EFA8E,0x406000E0 }; static const u32 ks3[256] = { 0x3A39CE37,0xD3FAF5CF,0xABC27737,0x5AC52D1B,0x5CB0679E,0x4FA33742, 0xD3822740,0x99BC9BBE,0xD5118E9D,0xBF0F7315,0xD62D1C7E,0xC700C47B, 0xB78C1B6B,0x21A19045,0xB26EB1BE,0x6A366EB4,0x5748AB2F,0xBC946E79, 0xC6A376D2,0x6549C2C8,0x530FF8EE,0x468DDE7D,0xD5730A1D,0x4CD04DC6, 0x2939BBDB,0xA9BA4650,0xAC9526E8,0xBE5EE304,0xA1FAD5F0,0x6A2D519A, 0x63EF8CE2,0x9A86EE22,0xC089C2B8,0x43242EF6,0xA51E03AA,0x9CF2D0A4, 0x83C061BA,0x9BE96A4D,0x8FE51550,0xBA645BD6,0x2826A2F9,0xA73A3AE1, 0x4BA99586,0xEF5562E9,0xC72FEFD3,0xF752F7DA,0x3F046F69,0x77FA0A59, 0x80E4A915,0x87B08601,0x9B09E6AD,0x3B3EE593,0xE990FD5A,0x9E34D797, 0x2CF0B7D9,0x022B8B51,0x96D5AC3A,0x017DA67D,0xD1CF3ED6,0x7C7D2D28, 0x1F9F25CF,0xADF2B89B,0x5AD6B472,0x5A88F54C,0xE029AC71,0xE019A5E6, 0x47B0ACFD,0xED93FA9B,0xE8D3C48D,0x283B57CC,0xF8D56629,0x79132E28, 0x785F0191,0xED756055,0xF7960E44,0xE3D35E8C,0x15056DD4,0x88F46DBA, 0x03A16125,0x0564F0BD,0xC3EB9E15,0x3C9057A2,0x97271AEC,0xA93A072A, 0x1B3F6D9B,0x1E6321F5,0xF59C66FB,0x26DCF319,0x7533D928,0xB155FDF5, 0x03563482,0x8ABA3CBB,0x28517711,0xC20AD9F8,0xABCC5167,0xCCAD925F, 0x4DE81751,0x3830DC8E,0x379D5862,0x9320F991,0xEA7A90C2,0xFB3E7BCE, 0x5121CE64,0x774FBE32,0xA8B6E37E,0xC3293D46,0x48DE5369,0x6413E680, 0xA2AE0810,0xDD6DB224,0x69852DFD,0x09072166,0xB39A460A,0x6445C0DD, 0x586CDECF,0x1C20C8AE,0x5BBEF7DD,0x1B588D40,0xCCD2017F,0x6BB4E3BB, 0xDDA26A7E,0x3A59FF45,0x3E350A44,0xBCB4CDD5,0x72EACEA8,0xFA6484BB, 0x8D6612AE,0xBF3C6F47,0xD29BE463,0x542F5D9E,0xAEC2771B,0xF64E6370, 0x740E0D8D,0xE75B1357,0xF8721671,0xAF537D5D,0x4040CB08,0x4EB4E2CC, 0x34D2466A,0x0115AF84,0xE1B00428,0x95983A1D,0x06B89FB4,0xCE6EA048, 0x6F3F3B82,0x3520AB82,0x011A1D4B,0x277227F8,0x611560B1,0xE7933FDC, 0xBB3A792B,0x344525BD,0xA08839E1,0x51CE794B,0x2F32C9B7,0xA01FBAC9, 0xE01CC87E,0xBCC7D1F6,0xCF0111C3,0xA1E8AAC7,0x1A908749,0xD44FBD9A, 0xD0DADECB,0xD50ADA38,0x0339C32A,0xC6913667,0x8DF9317C,0xE0B12B4F, 0xF79E59B7,0x43F5BB3A,0xF2D519FF,0x27D9459C,0xBF97222C,0x15E6FC2A, 0x0F91FC71,0x9B941525,0xFAE59361,0xCEB69CEB,0xC2A86459,0x12BAA8D1, 0xB6C1075E,0xE3056A0C,0x10D25065,0xCB03A442,0xE0EC6E0E,0x1698DB3B, 0x4C98A0BE,0x3278E964,0x9F1F9532,0xE0D392DF,0xD3A0342B,0x8971F21E, 0x1B0A7441,0x4BA3348C,0xC5BE7120,0xC37632D8,0xDF359F8D,0x9B992F2E, 0xE60B6F47,0x0FE3F11D,0xE54CDA54,0x1EDAD891,0xCE6279CF,0xCD3E7E6F, 0x1618B166,0xFD2C1D05,0x848FD2C5,0xF6FB2299,0xF523F357,0xA6327623, 0x93A83531,0x56CCCD02,0xACF08162,0x5A75EBB5,0x6E163697,0x88D273CC, 0xDE966292,0x81B949D0,0x4C50901B,0x71C65614,0xE6C6C7BD,0x327A140A, 0x45E1D006,0xC3F27B9A,0xC9AA53FD,0x62A80F00,0xBB25BFE2,0x35BDD2F6, 0x71126905,0xB2040222,0xB6CBCF7C,0xCD769C2B,0x53113EC0,0x1640E3D3, 0x38ABBD60,0x2547ADF0,0xBA38209C,0xF746CE76,0x77AFA1C5,0x20756060, 0x85CBFE4E,0x8AE88DD8,0x7AAAF9B0,0x4CF9AA7E,0x1948C25C,0x02FB8A8C, 0x01C36AE4,0xD6EBE1F9,0x90D4F869,0xA65CDEA0,0x3F09252D,0xC208E69F, 0xB74E6132,0xCE77E25B,0x578FDFE3,0x3AC372E6 }; static const u32 ps[BLOWFISH_ROUNDS+2] = { 0x243F6A88,0x85A308D3,0x13198A2E,0x03707344,0xA4093822,0x299F31D0, 0x082EFA98,0xEC4E6C89,0x452821E6,0x38D01377,0xBE5466CF,0x34E90C6C, 0xC0AC29B7,0xC97C50DD,0x3F84D5B5,0xB5470917,0x9216D5D9,0x8979FB1B }; #if BLOWFISH_ROUNDS != 16 static inline u32 function_F( BLOWFISH_context *bc, u32 x ) { u16 a, b, c, d; #ifdef BIG_ENDIAN_HOST a = ((byte*)&x)[0]; b = ((byte*)&x)[1]; c = ((byte*)&x)[2]; d = ((byte*)&x)[3]; #else a = ((byte*)&x)[3]; b = ((byte*)&x)[2]; c = ((byte*)&x)[1]; d = ((byte*)&x)[0]; #endif return ((bc->s0[a] + bc->s1[b]) ^ bc->s2[c] ) + bc->s3[d]; } #endif #ifdef BIG_ENDIAN_HOST #define F(x) ((( s0[((byte*)&x)[0]] + s1[((byte*)&x)[1]]) \ ^ s2[((byte*)&x)[2]]) + s3[((byte*)&x)[3]] ) #else #define F(x) ((( s0[((byte*)&x)[3]] + s1[((byte*)&x)[2]]) \ ^ s2[((byte*)&x)[1]]) + s3[((byte*)&x)[0]] ) #endif #define R(l,r,i) do { l ^= p[i]; r ^= F(l); } while(0) static void burn_stack (int bytes) { char buf[64]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } static void do_encrypt( BLOWFISH_context *bc, u32 *ret_xl, u32 *ret_xr ) { #if BLOWFISH_ROUNDS == 16 u32 xl, xr, *s0, *s1, *s2, *s3, *p; xl = *ret_xl; xr = *ret_xr; p = bc->p; s0 = bc->s0; s1 = bc->s1; s2 = bc->s2; s3 = bc->s3; R( xl, xr, 0); R( xr, xl, 1); R( xl, xr, 2); R( xr, xl, 3); R( xl, xr, 4); R( xr, xl, 5); R( xl, xr, 6); R( xr, xl, 7); R( xl, xr, 8); R( xr, xl, 9); R( xl, xr, 10); R( xr, xl, 11); R( xl, xr, 12); R( xr, xl, 13); R( xl, xr, 14); R( xr, xl, 15); xl ^= p[BLOWFISH_ROUNDS]; xr ^= p[BLOWFISH_ROUNDS+1]; *ret_xl = xr; *ret_xr = xl; #else u32 xl, xr, temp, *p; int i; xl = *ret_xl; xr = *ret_xr; p = bc->p; for(i=0; i < BLOWFISH_ROUNDS; i++ ) { xl ^= p[i]; xr ^= function_F(bc, xl); temp = xl; xl = xr; xr = temp; } temp = xl; xl = xr; xr = temp; xr ^= p[BLOWFISH_ROUNDS]; xl ^= p[BLOWFISH_ROUNDS+1]; *ret_xl = xl; *ret_xr = xr; #endif } static void decrypt( BLOWFISH_context *bc, u32 *ret_xl, u32 *ret_xr ) { #if BLOWFISH_ROUNDS == 16 u32 xl, xr, *s0, *s1, *s2, *s3, *p; xl = *ret_xl; xr = *ret_xr; p = bc->p; s0 = bc->s0; s1 = bc->s1; s2 = bc->s2; s3 = bc->s3; R( xl, xr, 17); R( xr, xl, 16); R( xl, xr, 15); R( xr, xl, 14); R( xl, xr, 13); R( xr, xl, 12); R( xl, xr, 11); R( xr, xl, 10); R( xl, xr, 9); R( xr, xl, 8); R( xl, xr, 7); R( xr, xl, 6); R( xl, xr, 5); R( xr, xl, 4); R( xl, xr, 3); R( xr, xl, 2); xl ^= p[1]; xr ^= p[0]; *ret_xl = xr; *ret_xr = xl; #else u32 xl, xr, temp, *p; int i; xl = *ret_xl; xr = *ret_xr; p = bc->p; for(i=BLOWFISH_ROUNDS+1; i > 1; i-- ) { xl ^= p[i]; xr ^= function_F(bc, xl); temp = xl; xl = xr; xr = temp; } temp = xl; xl = xr; xr = temp; xr ^= p[1]; xl ^= p[0]; *ret_xl = xl; *ret_xr = xr; #endif } #undef F #undef R static void do_encrypt_block( BLOWFISH_context *bc, byte *outbuf, const byte *inbuf ) { u32 d1, d2; d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3]; d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7]; do_encrypt( bc, &d1, &d2 ); outbuf[0] = (d1 >> 24) & 0xff; outbuf[1] = (d1 >> 16) & 0xff; outbuf[2] = (d1 >> 8) & 0xff; outbuf[3] = d1 & 0xff; outbuf[4] = (d2 >> 24) & 0xff; outbuf[5] = (d2 >> 16) & 0xff; outbuf[6] = (d2 >> 8) & 0xff; outbuf[7] = d2 & 0xff; } static void encrypt_block( void *bc, byte *outbuf, const byte *inbuf ) { do_encrypt_block (bc, outbuf, inbuf); burn_stack (64); } static void do_decrypt_block( BLOWFISH_context *bc, byte *outbuf, const byte *inbuf ) { u32 d1, d2; d1 = inbuf[0] << 24 | inbuf[1] << 16 | inbuf[2] << 8 | inbuf[3]; d2 = inbuf[4] << 24 | inbuf[5] << 16 | inbuf[6] << 8 | inbuf[7]; decrypt( bc, &d1, &d2 ); outbuf[0] = (d1 >> 24) & 0xff; outbuf[1] = (d1 >> 16) & 0xff; outbuf[2] = (d1 >> 8) & 0xff; outbuf[3] = d1 & 0xff; outbuf[4] = (d2 >> 24) & 0xff; outbuf[5] = (d2 >> 16) & 0xff; outbuf[6] = (d2 >> 8) & 0xff; outbuf[7] = d2 & 0xff; } static void decrypt_block( void *bc, byte *outbuf, const byte *inbuf ) { do_decrypt_block (bc, outbuf, inbuf); burn_stack (64); } static const char* selftest(void) { BLOWFISH_context c; byte plain[] = "BLOWFISH"; byte buffer[8]; byte plain3[] = { 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10 }; byte key3[] = { 0x41, 0x79, 0x6E, 0xA0, 0x52, 0x61, 0x6E, 0xE4 }; byte cipher3[] = { 0xE1, 0x13, 0xF4, 0x10, 0x2C, 0xFC, 0xCE, 0x43 }; bf_setkey( &c, "abcdefghijklmnopqrstuvwxyz", 26 ); encrypt_block( &c, buffer, plain ); if( memcmp( buffer, "\x32\x4E\xD0\xFE\xF4\x13\xA2\x03", 8 ) ) return "Blowfish selftest failed (1)."; decrypt_block( &c, buffer, buffer ); if( memcmp( buffer, plain, 8 ) ) return "Blowfish selftest failed (2)."; bf_setkey( &c, key3, 8 ); encrypt_block( &c, buffer, plain3 ); if( memcmp( buffer, cipher3, 8 ) ) return "Blowfish selftest failed (3)."; decrypt_block( &c, buffer, buffer ); if( memcmp( buffer, plain3, 8 ) ) return "Blowfish selftest failed (4)."; return NULL; } static int do_bf_setkey( BLOWFISH_context *c, const byte *key, unsigned keylen ) { int i, j; u32 data, datal, datar; static int initialized; static const char *selftest_failed; if( !initialized ) { initialized = 1; selftest_failed = selftest(); if( selftest_failed ) fprintf(stderr,"%s\n", selftest_failed ); } if( selftest_failed ) return G10ERR_SELFTEST_FAILED; for(i=0; i < BLOWFISH_ROUNDS+2; i++ ) c->p[i] = ps[i]; for(i=0; i < 256; i++ ) { c->s0[i] = ks0[i]; c->s1[i] = ks1[i]; c->s2[i] = ks2[i]; c->s3[i] = ks3[i]; } for(i=j=0; i < BLOWFISH_ROUNDS+2; i++ ) { #ifdef BIG_ENDIAN_HOST ((byte*)&data)[0] = key[j]; ((byte*)&data)[1] = key[(j+1)%keylen]; ((byte*)&data)[2] = key[(j+2)%keylen]; ((byte*)&data)[3] = key[(j+3)%keylen]; #else ((byte*)&data)[3] = key[j]; ((byte*)&data)[2] = key[(j+1)%keylen]; ((byte*)&data)[1] = key[(j+2)%keylen]; ((byte*)&data)[0] = key[(j+3)%keylen]; #endif c->p[i] ^= data; j = (j+4) % keylen; } datal = datar = 0; for(i=0; i < BLOWFISH_ROUNDS+2; i += 2 ) { do_encrypt( c, &datal, &datar ); c->p[i] = datal; c->p[i+1] = datar; } for(i=0; i < 256; i += 2 ) { do_encrypt( c, &datal, &datar ); c->s0[i] = datal; c->s0[i+1] = datar; } for(i=0; i < 256; i += 2 ) { do_encrypt( c, &datal, &datar ); c->s1[i] = datal; c->s1[i+1] = datar; } for(i=0; i < 256; i += 2 ) { do_encrypt( c, &datal, &datar ); c->s2[i] = datal; c->s2[i+1] = datar; } for(i=0; i < 256; i += 2 ) { do_encrypt( c, &datal, &datar ); c->s3[i] = datal; c->s3[i+1] = datar; } /* Check for weak key. A weak key is a key in which a value in */ /* the P-array (here c) occurs more than once per table. */ for(i=0; i < 255; i++ ) { for( j=i+1; j < 256; j++) { if( (c->s0[i] == c->s0[j]) || (c->s1[i] == c->s1[j]) || (c->s2[i] == c->s2[j]) || (c->s3[i] == c->s3[j]) ) return G10ERR_WEAK_KEY; } } return 0; } static int bf_setkey( void *c, const byte *key, unsigned keylen ) { int rc = do_bf_setkey (c, key, keylen); burn_stack (64); return rc; } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. */ const char * blowfish_get_info(int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**r_setkey)(void *c, const byte *key, unsigned keylen), void (**r_encrypt)(void *c, byte *outbuf, const byte *inbuf), void (**r_decrypt)( void *c, byte *outbuf, const byte *inbuf) ) { *keylen = 128; *blocksize = BLOWFISH_BLOCKSIZE; *contextsize = sizeof(BLOWFISH_context); *r_setkey = bf_setkey; *r_encrypt = encrypt_block; *r_decrypt = decrypt_block; if( algo == CIPHER_ALGO_BLOWFISH ) return "BLOWFISH"; return NULL; } gnupg-1.4.20/cipher/smallprime.c0000644000175000017500000001211212635262326013426 00000000000000/* smallprime.c - List of small primes * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include "util.h" #include "types.h" /* Note: 2 is not included because it can be tested more easily * by looking at bit 0. The last entry in this list is marked by a zero */ ushort small_prime_numbers[] = { 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 0 }; gnupg-1.4.20/cipher/rndlinux.c0000644000175000017500000001023112635262326013124 00000000000000/* rndlinux.c - raw random number for OSes with /dev/random * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include #include #include #ifdef HAVE_GETTIMEOFDAY #include #endif #include #include #include #if 0 #include #include #include #endif #include "types.h" #include "util.h" #include "ttyio.h" #include "algorithms.h" #include "i18n.h" static int open_device( const char *name, int minor ); #if 0 #ifdef HAVE_DEV_RANDOM_IOCTL static ulong get_entropy_count( int fd ) { ulong count; if( ioctl( fd, RNDGETENTCNT, &count ) == -1 ) g10_log_fatal("ioctl(RNDGETENTCNT) failed: %s\n", strerror(errno) ); return count; } #endif #endif /* * Used to open the /dev/random devices (Linux, xBSD, Solaris (if it * exists), ...) */ static int open_device( const char *name, int minor ) { int fd; struct stat sb; fd = open( name, O_RDONLY ); if( fd == -1 ) g10_log_fatal("can't open %s: %s\n", name, strerror(errno) ); if( fstat( fd, &sb ) ) g10_log_fatal("stat() off %s failed: %s\n", name, strerror(errno) ); /* Don't check device type for better portability */ /* if( (!S_ISCHR(sb.st_mode)) && (!S_ISFIFO(sb.st_mode)) ) g10_log_fatal("invalid random device!\n" ); */ return fd; } /* * Note: Using a level of 0 should never block and better add nothing * to the pool. This is easy to accomplish with /dev/urandom. */ int rndlinux_gather_random( void (*add)(const void*, size_t, int), int requester, size_t length, int level ) { static int fd_urandom = -1; static int fd_random = -1; int fd; int n; int warn=0; byte buffer[768]; if( level >= 2 ) { if( fd_random == -1 ) fd_random = open_device( NAME_OF_DEV_RANDOM, 8 ); fd = fd_random; } else { /* This will also be used for level 0. By using /dev/urandom * we can be sure that it will never block. */ if( fd_urandom == -1 ) fd_urandom = open_device( NAME_OF_DEV_URANDOM, 9 ); fd = fd_urandom; } #if 0 #ifdef HAVE_DEV_RANDOM_IOCTL g10_log_info("entropy count of %d is %lu\n", fd, get_entropy_count(fd) ); #endif #endif while( length ) { #ifdef FD_SETSIZE fd_set rfds; struct timeval tv; int rc; FD_ZERO(&rfds); tv.tv_sec = 3; tv.tv_usec = 0; if (fd < FD_SETSIZE) { FD_SET(fd, &rfds); if( !(rc=select(fd+1, &rfds, NULL, NULL, &tv)) ) { if( !warn ) tty_printf( _("\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"), (int)length ); warn = 1; continue; } else if( rc == -1 ) { tty_printf( "select() error: %s\n", strerror(errno)); continue; } } #endif /*FD_SETSIZE*/ do { int nbytes = length < sizeof(buffer)? length : sizeof(buffer); n = read(fd, buffer, nbytes ); if( n >= 0 && n > nbytes ) { g10_log_error("bogus read from random device (n=%d)\n", n ); n = nbytes; } } while( n == -1 && errno == EINTR ); if( n == -1 ) g10_log_fatal("read error on random device: %s\n", strerror(errno)); (*add)( buffer, n, requester ); length -= n; } wipememory(buffer, sizeof(buffer) ); return 0; /* success */ } gnupg-1.4.20/cipher/sha256.c0000644000175000017500000002255012635262326012300 00000000000000/* sha256.c - SHA224 and SHA256 hash functions * Copyright (C) 2003, 2006 Free Software Foundation, Inc. * * Please see below for more legal information! * * 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 3 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, see . */ /* Test vectors from FIPS-180-2: * * "abc" * 224: * 23097D22 3405D822 8642A477 BDA255B3 2AADBCE4 BDA0B3F7 E36C9DA7 * 256: * BA7816BF 8F01CFEA 414140DE 5DAE2223 B00361A3 96177A9C B410FF61 F20015AD * * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" * 224: * 75388B16 512776CC 5DBA5DA1 FD890150 B0C6455C B4F58B19 52522525 * 256: * 248D6A61 D20638B8 E5C02693 0C3E6039 A33CE459 64FF2167 F6ECEDD4 19DB06C1 * * "a" x 1000000 * 224: * 20794655 980C91D8 BBB4C1EA 97618A4B F03F4258 1948B2EE 4EE7AD67 * 256: * CDC76E5C 9914FB92 81A1C7E2 84D73E67 F1809A48 A497200E 046D39CC C7112CD0 */ #include #include #include "util.h" #include "algorithms.h" typedef struct { u32 h0,h1,h2,h3,h4,h5,h6,h7; u32 nblocks; byte buf[64]; int count; } SHA256_CONTEXT; static void burn_stack (int bytes) { char buf[128]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } void sha256_init( SHA256_CONTEXT *hd ) { hd->h0 = 0x6a09e667; hd->h1 = 0xbb67ae85; hd->h2 = 0x3c6ef372; hd->h3 = 0xa54ff53a; hd->h4 = 0x510e527f; hd->h5 = 0x9b05688c; hd->h6 = 0x1f83d9ab; hd->h7 = 0x5be0cd19; hd->nblocks = 0; hd->count = 0; } void sha224_init( SHA256_CONTEXT *hd ) { hd->h0 = 0xc1059ed8; hd->h1 = 0x367cd507; hd->h2 = 0x3070dd17; hd->h3 = 0xf70e5939; hd->h4 = 0xffc00b31; hd->h5 = 0x68581511; hd->h6 = 0x64f98fa7; hd->h7 = 0xbefa4fa4; hd->nblocks = 0; hd->count = 0; } /**************** * Transform the message w which consists of 16 32-bit words */ static void transform( SHA256_CONTEXT *hd, byte *data ) { u32 a,b,c,d,e,f,g,h; u32 w[64]; int t; static const u32 k[]= { 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 }; /* get values from the chaining vars */ a = hd->h0; b = hd->h1; c = hd->h2; d = hd->h3; e = hd->h4; f = hd->h5; g = hd->h6; h = hd->h7; #ifdef BIG_ENDIAN_HOST memcpy( w, data, 64 ); #else { int i; byte *p2; for(i=0, p2=(byte*)w; i < 16; i++, p2 += 4 ) { p2[3] = *data++; p2[2] = *data++; p2[1] = *data++; p2[0] = *data++; } } #endif #define ROTR(x,n) (((x)>>(n)) | ((x)<<(32-(n)))) #define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) #define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) #define Sum0(x) (ROTR((x),2) ^ ROTR((x),13) ^ ROTR((x),22)) #define Sum1(x) (ROTR((x),6) ^ ROTR((x),11) ^ ROTR((x),25)) #define S0(x) (ROTR((x),7) ^ ROTR((x),18) ^ ((x)>>3)) #define S1(x) (ROTR((x),17) ^ ROTR((x),19) ^ ((x)>>10)) for(t=16;t<64;t++) w[t] = S1(w[t-2]) + w[t-7] + S0(w[t-15]) + w[t-16]; for(t=0;t<64;t++) { u32 t1,t2; t1=h+Sum1(e)+Ch(e,f,g)+k[t]+w[t]; t2=Sum0(a)+Maj(a,b,c); h=g; g=f; f=e; e=d+t1; d=c; c=b; b=a; a=t1+t2; /* printf("t=%d a=%08lX b=%08lX c=%08lX d=%08lX e=%08lX f=%08lX g=%08lX h=%08lX\n",t,a,b,c,d,e,f,g,h); */ } /* update chaining vars */ hd->h0 += a; hd->h1 += b; hd->h2 += c; hd->h3 += d; hd->h4 += e; hd->h5 += f; hd->h6 += g; hd->h7 += h; } /* Update the message digest with the contents * of INBUF with length INLEN. */ static void sha256_write( SHA256_CONTEXT *hd, byte *inbuf, size_t inlen) { if( hd->count == 64 ) { /* flush the buffer */ transform( hd, hd->buf ); burn_stack (328); hd->count = 0; hd->nblocks++; } if( !inbuf ) return; if( hd->count ) { for( ; inlen && hd->count < 64; inlen-- ) hd->buf[hd->count++] = *inbuf++; sha256_write( hd, NULL, 0 ); if( !inlen ) return; } while( inlen >= 64 ) { transform( hd, inbuf ); hd->count = 0; hd->nblocks++; inlen -= 64; inbuf += 64; } burn_stack (328); for( ; inlen && hd->count < 64; inlen-- ) hd->buf[hd->count++] = *inbuf++; } /* The routine final terminates the computation and * returns the digest. * The handle is prepared for a new cycle, but adding bytes to the * handle will the destroy the returned buffer. * Returns: 32 bytes representing the digest. When used for sha224, * we take the leftmost 28 of those bytes. */ static void sha256_final(SHA256_CONTEXT *hd) { u32 t, msb, lsb; byte *p; sha256_write(hd, NULL, 0); /* flush */; t = hd->nblocks; /* multiply by 64 to make a byte count */ lsb = t << 6; msb = t >> 26; /* add the count */ t = lsb; if( (lsb += hd->count) < t ) msb++; /* multiply by 8 to make a bit count */ t = lsb; lsb <<= 3; msb <<= 3; msb |= t >> 29; if( hd->count < 56 ) { /* enough room */ hd->buf[hd->count++] = 0x80; /* pad */ while( hd->count < 56 ) hd->buf[hd->count++] = 0; /* pad */ } else { /* need one extra block */ hd->buf[hd->count++] = 0x80; /* pad character */ while( hd->count < 64 ) hd->buf[hd->count++] = 0; sha256_write(hd, NULL, 0); /* flush */; memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ } /* append the 64 bit count */ hd->buf[56] = msb >> 24; hd->buf[57] = msb >> 16; hd->buf[58] = msb >> 8; hd->buf[59] = msb ; hd->buf[60] = lsb >> 24; hd->buf[61] = lsb >> 16; hd->buf[62] = lsb >> 8; hd->buf[63] = lsb ; transform( hd, hd->buf ); burn_stack (328); p = hd->buf; #ifdef BIG_ENDIAN_HOST #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) #else /* little endian */ #define X(a) do { *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \ *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0) #endif X(0); X(1); X(2); X(3); X(4); X(5); X(6); /* Note that this last chunk is included even for SHA224. We just ignore it. */ X(7); #undef X } static byte * sha256_read( SHA256_CONTEXT *hd ) { return hd->buf; } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. */ const char * sha256_get_info( int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ) { static byte asn[] = /* Object ID is 2.16.840.1.101.3.4.2.1 */ { 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, 0x00, 0x04, 0x20 }; if( algo != 8 ) return NULL; *contextsize = sizeof(SHA256_CONTEXT); *r_asnoid = asn; *r_asnlen = DIM(asn); *r_mdlen = 32; *(void (**)(SHA256_CONTEXT *))r_init = sha256_init; *(void (**)(SHA256_CONTEXT *, byte*, size_t))r_write = sha256_write; *(void (**)(SHA256_CONTEXT *))r_final = sha256_final; *(byte *(**)(SHA256_CONTEXT *))r_read = sha256_read; return "SHA256"; } /* SHA224 is really a truncated SHA256 with a different initialization */ const char * sha224_get_info( int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ) { static byte asn[] = /* Object ID is 2.16.840.1.101.3.4.2.4 */ { 0x30, 0x2D, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x04, 0x05, 0x00, 0x04, 0x1C }; if( algo != 11 ) return NULL; *contextsize = sizeof(SHA256_CONTEXT); *r_asnoid = asn; *r_asnlen = DIM(asn); *r_mdlen = 28; *(void (**)(SHA256_CONTEXT *))r_init = sha224_init; *(void (**)(SHA256_CONTEXT *, byte*, size_t))r_write = sha256_write; *(void (**)(SHA256_CONTEXT *))r_final = sha256_final; *(byte *(**)(SHA256_CONTEXT *))r_read = sha256_read; return "SHA224"; } gnupg-1.4.20/cipher/twofish.c0000644000175000017500000014276112635262326012762 00000000000000/* Twofish for GPG * By Matthew Skala , July 26, 1998 * 256-bit key length added March 20, 1999 * Some modifications to reduce the text size by Werner Koch, April, 1998 * * The original author has disclaimed all copyright interest in this * code and thus putting it in the public domain. * * This code is a "clean room" implementation, written from the paper * _Twofish: A 128-Bit Block Cipher_ by Bruce Schneier, John Kelsey, * Doug Whiting, David Wagner, Chris Hall, and Niels Ferguson, available * through http://www.counterpane.com/twofish.html * * For background information on multiplication in finite fields, used for * the matrix operations in the key schedule, see the book _Contemporary * Abstract Algebra_ by Joseph A. Gallian, especially chapter 22 in the * Third Edition. * * Only the 128- and 256-bit key sizes are supported. This code is intended * for GNU C on a 32-bit system, but it should work almost anywhere. Loops * are unrolled, precomputation tables are used, etc., for maximum speed at * some cost in memory consumption. */ #include #include #include #include /* for memcmp() */ #include "types.h" /* for byte and u32 typedefs */ #include "util.h" #include "errors.h" #include "algorithms.h" /* Prototype for the self-test function. */ static const char *selftest(void); /* Structure for an expanded Twofish key. s contains the key-dependent * S-boxes composed with the MDS matrix; w contains the eight "whitening" * subkeys, K[0] through K[7]. k holds the remaining, "round" subkeys. Note * that k[i] corresponds to what the Twofish paper calls K[i+8]. */ typedef struct { u32 s[4][256], w[8], k[32]; } TWOFISH_context; /* These two tables are the q0 and q1 permutations, exactly as described in * the Twofish paper. */ static const byte q0[256] = { 0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76, 0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38, 0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C, 0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48, 0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23, 0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82, 0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C, 0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61, 0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B, 0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1, 0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66, 0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7, 0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA, 0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71, 0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8, 0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7, 0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2, 0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90, 0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB, 0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF, 0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B, 0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64, 0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A, 0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A, 0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02, 0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D, 0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72, 0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34, 0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8, 0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4, 0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00, 0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0 }; static const byte q1[256] = { 0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8, 0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B, 0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1, 0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F, 0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D, 0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5, 0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3, 0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51, 0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96, 0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C, 0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70, 0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8, 0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC, 0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2, 0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9, 0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17, 0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3, 0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E, 0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49, 0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9, 0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01, 0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48, 0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19, 0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64, 0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5, 0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69, 0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E, 0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC, 0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB, 0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9, 0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2, 0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91 }; /* These MDS tables are actually tables of MDS composed with q0 and q1, * because it is only ever used that way and we can save some time by * precomputing. Of course the main saving comes from precomputing the * GF(2^8) multiplication involved in the MDS matrix multiply; by looking * things up in these tables we reduce the matrix multiply to four lookups * and three XORs. Semi-formally, the definition of these tables is: * mds[0][i] = MDS (q1[i] 0 0 0)^T mds[1][i] = MDS (0 q0[i] 0 0)^T * mds[2][i] = MDS (0 0 q1[i] 0)^T mds[3][i] = MDS (0 0 0 q0[i])^T * where ^T means "transpose", the matrix multiply is performed in GF(2^8) * represented as GF(2)[x]/v(x) where v(x)=x^8+x^6+x^5+x^3+1 as described * by Schneier et al, and I'm casually glossing over the byte/word * conversion issues. */ static const u32 mds[4][256] = { {0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, 0xE2E22BFB, 0x9E9EFAC8, 0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B, 0x3C3C57D6, 0x93938A32, 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1, 0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, 0xB0B0B306, 0x7575DE3F, 0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D, 0xAEAE2C6D, 0x7F7FABC1, 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5, 0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, 0x3131272C, 0x808065A3, 0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51, 0x2A2A3638, 0xC4C49CB0, 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796, 0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, 0x6767C027, 0xE9E9AF8C, 0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70, 0x29294CCA, 0xF0F035E3, 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8, 0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, 0xC8C81DC3, 0x9999FFCC, 0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2, 0xB5B53D79, 0x09090F0C, 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9, 0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, 0xEDEDD07A, 0x4343FC17, 0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3, 0x5656E70B, 0xE3E3DA72, 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E, 0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, 0x8181942A, 0x91910149, 0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9, 0x7878AEC5, 0xC5C56D39, 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01, 0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, 0x55559DF9, 0x7E7E5A48, 0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519, 0x0606F48D, 0x404086E5, 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64, 0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, 0x2D2D333C, 0x3030D6A5, 0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969, 0xD9D97929, 0x8686912E, 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E, 0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, 0xC1C112CF, 0x8585EBDC, 0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB, 0xABABA212, 0x6F6F3EA2, 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9, 0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, 0x04047FF6, 0x272746C2, 0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91}, {0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, 0xA3658080, 0x76DFE4E4, 0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A, 0x0D54E6E6, 0xC6432020, 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141, 0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, 0x94B1FBFB, 0x485A7E7E, 0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060, 0x1945FDFD, 0x5BA33A3A, 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757, 0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, 0x9B53AAAA, 0x7C635D5D, 0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7, 0xC0F09090, 0x8CAFE9E9, 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656, 0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, 0xB499C3C3, 0xF1975B5B, 0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8, 0xCCFF9999, 0x95EA1414, 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3, 0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, 0xBF7E9595, 0xBA207D7D, 0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB, 0x81FB0F0F, 0x793DB5B5, 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282, 0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, 0x86135050, 0xE730F7F7, 0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B, 0x410B9F9F, 0x7B8B0202, 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC, 0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, 0xB1C72B2B, 0xAB6F8E8E, 0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9, 0x91EF1313, 0x85FE0808, 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272, 0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, 0x6929A9A9, 0x647D4F4F, 0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED, 0xAC87D1D1, 0x7F8E0505, 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5, 0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, 0x4C5F7979, 0x02B6B7B7, 0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2, 0x57AC3333, 0xC718CFCF, 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3, 0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, 0x99E51D1D, 0x34392323, 0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA, 0xC8FA9E9E, 0xA882D6D6, 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF, 0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, 0x0FE25151, 0x00000000, 0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8}, {0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, 0xE2FBE22B, 0x9EC89EFA, 0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7, 0x3CD63C57, 0x9332938A, 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783, 0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, 0xB006B0B3, 0x753F75DE, 0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0, 0xAE6DAE2C, 0x7FC17FAB, 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA, 0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, 0x312C3127, 0x80A38065, 0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F, 0x2A382A36, 0xC4B0C49C, 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07, 0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, 0x672767C0, 0xE98CE9AF, 0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C, 0x29CA294C, 0xF0E3F035, 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96, 0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, 0xC8C3C81D, 0x99CC99FF, 0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E, 0xB579B53D, 0x090C090F, 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD, 0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, 0xED7AEDD0, 0x431743FC, 0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71, 0x560B56E7, 0xE372E3DA, 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85, 0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, 0x812A8194, 0x91499101, 0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5, 0x78C578AE, 0xC539C56D, 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B, 0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, 0x55F9559D, 0x7E487E5A, 0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45, 0x068D06F4, 0x40E54086, 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D, 0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, 0x2D3C2D33, 0x30A530D6, 0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929, 0xD929D979, 0x862E8691, 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D, 0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, 0xC1CFC112, 0x85DC85EB, 0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F, 0xAB12ABA2, 0x6FA26F3E, 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9, 0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, 0x04F6047F, 0x27C22746, 0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF}, {0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, 0x6580A365, 0xDFE476DF, 0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836, 0x54E60D54, 0x4320C643, 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77, 0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, 0xB1FB94B1, 0x5A7E485A, 0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5, 0x45FD1945, 0xA33A5BA3, 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216, 0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, 0x53AA9B53, 0x635D7C63, 0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123, 0xF090C0F0, 0xAFE98CAF, 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7, 0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, 0x99C3B499, 0x975BF197, 0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB, 0xFF99CCFF, 0xEA1495EA, 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C, 0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, 0x7E95BF7E, 0x207DBA20, 0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137, 0xFB0F81FB, 0x3DB5793D, 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE, 0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, 0x13508613, 0x30F7E730, 0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252, 0x0B9F410B, 0x8B027B8B, 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4, 0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, 0xC72BB1C7, 0x6F8EAB6F, 0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A, 0xEF1391EF, 0xFE0885FE, 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB, 0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, 0x29A96929, 0x7D4F647D, 0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0, 0x87D1AC87, 0x8E057F8E, 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8, 0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, 0x5F794C5F, 0xB6B702B6, 0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38, 0xAC3357AC, 0x18CFC718, 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA, 0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, 0xE51D99E5, 0x39233439, 0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6, 0xFA9EC8FA, 0x82D6A882, 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D, 0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, 0xE2510FE2, 0x00000000, 0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8} }; /* The exp_to_poly and poly_to_exp tables are used to perform efficient * operations in GF(2^8) represented as GF(2)[x]/w(x) where * w(x)=x^8+x^6+x^3+x^2+1. We care about doing that because it's part of the * definition of the RS matrix in the key schedule. Elements of that field * are polynomials of degree not greater than 7 and all coefficients 0 or 1, * which can be represented naturally by bytes (just substitute x=2). In that * form, GF(2^8) addition is the same as bitwise XOR, but GF(2^8) * multiplication is inefficient without hardware support. To multiply * faster, I make use of the fact x is a generator for the nonzero elements, * so that every element p of GF(2)[x]/w(x) is either 0 or equal to (x)^n for * some n in 0..254. Note that that caret is exponentiation in GF(2^8), * *not* polynomial notation. So if I want to compute pq where p and q are * in GF(2^8), I can just say: * 1. if p=0 or q=0 then pq=0 * 2. otherwise, find m and n such that p=x^m and q=x^n * 3. pq=(x^m)(x^n)=x^(m+n), so add m and n and find pq * The translations in steps 2 and 3 are looked up in the tables * poly_to_exp (for step 2) and exp_to_poly (for step 3). To see this * in action, look at the CALC_S macro. As additional wrinkles, note that * one of my operands is always a constant, so the poly_to_exp lookup on it * is done in advance; I included the original values in the comments so * readers can have some chance of recognizing that this *is* the RS matrix * from the Twofish paper. I've only included the table entries I actually * need; I never do a lookup on a variable input of zero and the biggest * exponents I'll ever see are 254 (variable) and 237 (constant), so they'll * never sum to more than 491. I'm repeating part of the exp_to_poly table * so that I don't have to do mod-255 reduction in the exponent arithmetic. * Since I know my constant operands are never zero, I only have to worry * about zero values in the variable operand, and I do it with a simple * conditional branch. I know conditionals are expensive, but I couldn't * see a non-horrible way of avoiding them, and I did manage to group the * statements so that each if covers four group multiplications. */ static const byte poly_to_exp[255] = { 0x00, 0x01, 0x17, 0x02, 0x2E, 0x18, 0x53, 0x03, 0x6A, 0x2F, 0x93, 0x19, 0x34, 0x54, 0x45, 0x04, 0x5C, 0x6B, 0xB6, 0x30, 0xA6, 0x94, 0x4B, 0x1A, 0x8C, 0x35, 0x81, 0x55, 0xAA, 0x46, 0x0D, 0x05, 0x24, 0x5D, 0x87, 0x6C, 0x9B, 0xB7, 0xC1, 0x31, 0x2B, 0xA7, 0xA3, 0x95, 0x98, 0x4C, 0xCA, 0x1B, 0xE6, 0x8D, 0x73, 0x36, 0xCD, 0x82, 0x12, 0x56, 0x62, 0xAB, 0xF0, 0x47, 0x4F, 0x0E, 0xBD, 0x06, 0xD4, 0x25, 0xD2, 0x5E, 0x27, 0x88, 0x66, 0x6D, 0xD6, 0x9C, 0x79, 0xB8, 0x08, 0xC2, 0xDF, 0x32, 0x68, 0x2C, 0xFD, 0xA8, 0x8A, 0xA4, 0x5A, 0x96, 0x29, 0x99, 0x22, 0x4D, 0x60, 0xCB, 0xE4, 0x1C, 0x7B, 0xE7, 0x3B, 0x8E, 0x9E, 0x74, 0xF4, 0x37, 0xD8, 0xCE, 0xF9, 0x83, 0x6F, 0x13, 0xB2, 0x57, 0xE1, 0x63, 0xDC, 0xAC, 0xC4, 0xF1, 0xAF, 0x48, 0x0A, 0x50, 0x42, 0x0F, 0xBA, 0xBE, 0xC7, 0x07, 0xDE, 0xD5, 0x78, 0x26, 0x65, 0xD3, 0xD1, 0x5F, 0xE3, 0x28, 0x21, 0x89, 0x59, 0x67, 0xFC, 0x6E, 0xB1, 0xD7, 0xF8, 0x9D, 0xF3, 0x7A, 0x3A, 0xB9, 0xC6, 0x09, 0x41, 0xC3, 0xAE, 0xE0, 0xDB, 0x33, 0x44, 0x69, 0x92, 0x2D, 0x52, 0xFE, 0x16, 0xA9, 0x0C, 0x8B, 0x80, 0xA5, 0x4A, 0x5B, 0xB5, 0x97, 0xC9, 0x2A, 0xA2, 0x9A, 0xC0, 0x23, 0x86, 0x4E, 0xBC, 0x61, 0xEF, 0xCC, 0x11, 0xE5, 0x72, 0x1D, 0x3D, 0x7C, 0xEB, 0xE8, 0xE9, 0x3C, 0xEA, 0x8F, 0x7D, 0x9F, 0xEC, 0x75, 0x1E, 0xF5, 0x3E, 0x38, 0xF6, 0xD9, 0x3F, 0xCF, 0x76, 0xFA, 0x1F, 0x84, 0xA0, 0x70, 0xED, 0x14, 0x90, 0xB3, 0x7E, 0x58, 0xFB, 0xE2, 0x20, 0x64, 0xD0, 0xDD, 0x77, 0xAD, 0xDA, 0xC5, 0x40, 0xF2, 0x39, 0xB0, 0xF7, 0x49, 0xB4, 0x0B, 0x7F, 0x51, 0x15, 0x43, 0x91, 0x10, 0x71, 0xBB, 0xEE, 0xBF, 0x85, 0xC8, 0xA1 }; static const byte exp_to_poly[492] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, 0x9A, 0x79, 0xF2, 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, 0xF5, 0xA7, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, 0x8B, 0x5B, 0xB6, 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, 0xA4, 0x05, 0x0A, 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, 0xED, 0x97, 0x63, 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, 0x0F, 0x1E, 0x3C, 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, 0xF4, 0xA5, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, 0x22, 0x44, 0x88, 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, 0xA2, 0x09, 0x12, 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, 0xCC, 0xD5, 0xE7, 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, 0x1B, 0x36, 0x6C, 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, 0x32, 0x64, 0xC8, 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, 0x5A, 0xB4, 0x25, 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, 0xAC, 0x15, 0x2A, 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, 0x91, 0x6F, 0xDE, 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, 0x3F, 0x7E, 0xFC, 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, 0xB1, 0x2F, 0x5E, 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, 0x82, 0x49, 0x92, 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, 0x71, 0xE2, 0x89, 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB, 0xDB, 0xFB, 0xBB, 0x3B, 0x76, 0xEC, 0x95, 0x67, 0xCE, 0xD1, 0xEF, 0x93, 0x6B, 0xD6, 0xE1, 0x8F, 0x53, 0xA6, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x4D, 0x9A, 0x79, 0xF2, 0xA9, 0x1F, 0x3E, 0x7C, 0xF8, 0xBD, 0x37, 0x6E, 0xDC, 0xF5, 0xA7, 0x03, 0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0xCD, 0xD7, 0xE3, 0x8B, 0x5B, 0xB6, 0x21, 0x42, 0x84, 0x45, 0x8A, 0x59, 0xB2, 0x29, 0x52, 0xA4, 0x05, 0x0A, 0x14, 0x28, 0x50, 0xA0, 0x0D, 0x1A, 0x34, 0x68, 0xD0, 0xED, 0x97, 0x63, 0xC6, 0xC1, 0xCF, 0xD3, 0xEB, 0x9B, 0x7B, 0xF6, 0xA1, 0x0F, 0x1E, 0x3C, 0x78, 0xF0, 0xAD, 0x17, 0x2E, 0x5C, 0xB8, 0x3D, 0x7A, 0xF4, 0xA5, 0x07, 0x0E, 0x1C, 0x38, 0x70, 0xE0, 0x8D, 0x57, 0xAE, 0x11, 0x22, 0x44, 0x88, 0x5D, 0xBA, 0x39, 0x72, 0xE4, 0x85, 0x47, 0x8E, 0x51, 0xA2, 0x09, 0x12, 0x24, 0x48, 0x90, 0x6D, 0xDA, 0xF9, 0xBF, 0x33, 0x66, 0xCC, 0xD5, 0xE7, 0x83, 0x4B, 0x96, 0x61, 0xC2, 0xC9, 0xDF, 0xF3, 0xAB, 0x1B, 0x36, 0x6C, 0xD8, 0xFD, 0xB7, 0x23, 0x46, 0x8C, 0x55, 0xAA, 0x19, 0x32, 0x64, 0xC8, 0xDD, 0xF7, 0xA3, 0x0B, 0x16, 0x2C, 0x58, 0xB0, 0x2D, 0x5A, 0xB4, 0x25, 0x4A, 0x94, 0x65, 0xCA, 0xD9, 0xFF, 0xB3, 0x2B, 0x56, 0xAC, 0x15, 0x2A, 0x54, 0xA8, 0x1D, 0x3A, 0x74, 0xE8, 0x9D, 0x77, 0xEE, 0x91, 0x6F, 0xDE, 0xF1, 0xAF, 0x13, 0x26, 0x4C, 0x98, 0x7D, 0xFA, 0xB9, 0x3F, 0x7E, 0xFC, 0xB5, 0x27, 0x4E, 0x9C, 0x75, 0xEA, 0x99, 0x7F, 0xFE, 0xB1, 0x2F, 0x5E, 0xBC, 0x35, 0x6A, 0xD4, 0xE5, 0x87, 0x43, 0x86, 0x41, 0x82, 0x49, 0x92, 0x69, 0xD2, 0xE9, 0x9F, 0x73, 0xE6, 0x81, 0x4F, 0x9E, 0x71, 0xE2, 0x89, 0x5F, 0xBE, 0x31, 0x62, 0xC4, 0xC5, 0xC7, 0xC3, 0xCB }; /* The table constants are indices of * S-box entries, preprocessed through q0 and q1. */ static byte calc_sb_tbl[512] = { 0xA9, 0x75, 0x67, 0xF3, 0xB3, 0xC6, 0xE8, 0xF4, 0x04, 0xDB, 0xFD, 0x7B, 0xA3, 0xFB, 0x76, 0xC8, 0x9A, 0x4A, 0x92, 0xD3, 0x80, 0xE6, 0x78, 0x6B, 0xE4, 0x45, 0xDD, 0x7D, 0xD1, 0xE8, 0x38, 0x4B, 0x0D, 0xD6, 0xC6, 0x32, 0x35, 0xD8, 0x98, 0xFD, 0x18, 0x37, 0xF7, 0x71, 0xEC, 0xF1, 0x6C, 0xE1, 0x43, 0x30, 0x75, 0x0F, 0x37, 0xF8, 0x26, 0x1B, 0xFA, 0x87, 0x13, 0xFA, 0x94, 0x06, 0x48, 0x3F, 0xF2, 0x5E, 0xD0, 0xBA, 0x8B, 0xAE, 0x30, 0x5B, 0x84, 0x8A, 0x54, 0x00, 0xDF, 0xBC, 0x23, 0x9D, 0x19, 0x6D, 0x5B, 0xC1, 0x3D, 0xB1, 0x59, 0x0E, 0xF3, 0x80, 0xAE, 0x5D, 0xA2, 0xD2, 0x82, 0xD5, 0x63, 0xA0, 0x01, 0x84, 0x83, 0x07, 0x2E, 0x14, 0xD9, 0xB5, 0x51, 0x90, 0x9B, 0x2C, 0x7C, 0xA3, 0xA6, 0xB2, 0xEB, 0x73, 0xA5, 0x4C, 0xBE, 0x54, 0x16, 0x92, 0x0C, 0x74, 0xE3, 0x36, 0x61, 0x51, 0xC0, 0x38, 0x8C, 0xB0, 0x3A, 0xBD, 0xF5, 0x5A, 0x73, 0xFC, 0x2C, 0x60, 0x25, 0x62, 0x0B, 0x96, 0xBB, 0x6C, 0x4E, 0x42, 0x89, 0xF7, 0x6B, 0x10, 0x53, 0x7C, 0x6A, 0x28, 0xB4, 0x27, 0xF1, 0x8C, 0xE1, 0x13, 0xE6, 0x95, 0xBD, 0x9C, 0x45, 0xC7, 0xE2, 0x24, 0xF4, 0x46, 0xB6, 0x3B, 0x66, 0x70, 0xCC, 0xCA, 0x95, 0xE3, 0x03, 0x85, 0x56, 0xCB, 0xD4, 0x11, 0x1C, 0xD0, 0x1E, 0x93, 0xD7, 0xB8, 0xFB, 0xA6, 0xC3, 0x83, 0x8E, 0x20, 0xB5, 0xFF, 0xE9, 0x9F, 0xCF, 0x77, 0xBF, 0xC3, 0xBA, 0xCC, 0xEA, 0x03, 0x77, 0x6F, 0x39, 0x08, 0xAF, 0xBF, 0x33, 0x40, 0xC9, 0xE7, 0x62, 0x2B, 0x71, 0xE2, 0x81, 0x79, 0x79, 0x0C, 0x09, 0xAA, 0xAD, 0x82, 0x24, 0x41, 0xCD, 0x3A, 0xF9, 0xEA, 0xD8, 0xB9, 0xE5, 0xE4, 0xC5, 0x9A, 0xB9, 0xA4, 0x4D, 0x97, 0x44, 0x7E, 0x08, 0xDA, 0x86, 0x7A, 0xE7, 0x17, 0xA1, 0x66, 0x1D, 0x94, 0xAA, 0xA1, 0xED, 0x1D, 0x06, 0x3D, 0x70, 0xF0, 0xB2, 0xDE, 0xD2, 0xB3, 0x41, 0x0B, 0x7B, 0x72, 0xA0, 0xA7, 0x11, 0x1C, 0x31, 0xEF, 0xC2, 0xD1, 0x27, 0x53, 0x90, 0x3E, 0x20, 0x8F, 0xF6, 0x33, 0x60, 0x26, 0xFF, 0x5F, 0x96, 0xEC, 0x5C, 0x76, 0xB1, 0x2A, 0xAB, 0x49, 0x9E, 0x81, 0x9C, 0x88, 0x52, 0xEE, 0x1B, 0x21, 0x5F, 0xC4, 0x93, 0x1A, 0x0A, 0xEB, 0xEF, 0xD9, 0x91, 0xC5, 0x85, 0x39, 0x49, 0x99, 0xEE, 0xCD, 0x2D, 0xAD, 0x4F, 0x31, 0x8F, 0x8B, 0x3B, 0x01, 0x47, 0x18, 0x87, 0x23, 0x6D, 0xDD, 0x46, 0x1F, 0xD6, 0x4E, 0x3E, 0x2D, 0x69, 0xF9, 0x64, 0x48, 0x2A, 0x4F, 0xCE, 0xF2, 0xCB, 0x65, 0x2F, 0x8E, 0xFC, 0x78, 0x97, 0x5C, 0x05, 0x58, 0x7A, 0x19, 0xAC, 0x8D, 0x7F, 0xE5, 0xD5, 0x98, 0x1A, 0x57, 0x4B, 0x67, 0x0E, 0x7F, 0xA7, 0x05, 0x5A, 0x64, 0x28, 0xAF, 0x14, 0x63, 0x3F, 0xB6, 0x29, 0xFE, 0x88, 0xF5, 0x3C, 0xB7, 0x4C, 0x3C, 0x02, 0xA5, 0xB8, 0xCE, 0xDA, 0xE9, 0xB0, 0x68, 0x17, 0x44, 0x55, 0xE0, 0x1F, 0x4D, 0x8A, 0x43, 0x7D, 0x69, 0x57, 0x29, 0xC7, 0x2E, 0x8D, 0xAC, 0x74, 0x15, 0xB7, 0x59, 0xC4, 0xA8, 0x9F, 0x0A, 0x72, 0x9E, 0x7E, 0x6E, 0x15, 0x47, 0x22, 0xDF, 0x12, 0x34, 0x58, 0x35, 0x07, 0x6A, 0x99, 0xCF, 0x34, 0xDC, 0x6E, 0x22, 0x50, 0xC9, 0xDE, 0xC0, 0x68, 0x9B, 0x65, 0x89, 0xBC, 0xD4, 0xDB, 0xED, 0xF8, 0xAB, 0xC8, 0x12, 0xA8, 0xA2, 0x2B, 0x0D, 0x40, 0x52, 0xDC, 0xBB, 0xFE, 0x02, 0x32, 0x2F, 0xA4, 0xA9, 0xCA, 0xD7, 0x10, 0x61, 0x21, 0x1E, 0xF0, 0xB4, 0xD3, 0x50, 0x5D, 0x04, 0x0F, 0xF6, 0x00, 0xC2, 0x6F, 0x16, 0x9D, 0x25, 0x36, 0x86, 0x42, 0x56, 0x4A, 0x55, 0x5E, 0x09, 0xC1, 0xBE, 0xE0, 0x91 }; /* Macro to perform one column of the RS matrix multiplication. The * parameters a, b, c, and d are the four bytes of output; i is the index * of the key bytes, and w, x, y, and z, are the column of constants from * the RS matrix, preprocessed through the poly_to_exp table. */ #define CALC_S(a, b, c, d, i, w, x, y, z) \ if (key[i]) { \ tmp = poly_to_exp[key[i] - 1]; \ (a) ^= exp_to_poly[tmp + (w)]; \ (b) ^= exp_to_poly[tmp + (x)]; \ (c) ^= exp_to_poly[tmp + (y)]; \ (d) ^= exp_to_poly[tmp + (z)]; \ } /* Macros to calculate the key-dependent S-boxes for a 128-bit key using * the S vector from CALC_S. CALC_SB_2 computes a single entry in all * four S-boxes, where i is the index of the entry to compute, and a and b * are the index numbers preprocessed through the q0 and q1 tables * respectively. CALC_SB is simply a convenience to make the code shorter; * it calls CALC_SB_2 four times with consecutive indices from i to i+3, * using the remaining parameters two by two. */ #define CALC_SB_2(i, a, b) \ ctx->s[0][i] = mds[0][q0[(a) ^ sa] ^ se]; \ ctx->s[1][i] = mds[1][q0[(b) ^ sb] ^ sf]; \ ctx->s[2][i] = mds[2][q1[(a) ^ sc] ^ sg]; \ ctx->s[3][i] = mds[3][q1[(b) ^ sd] ^ sh] #define CALC_SB(i, a, b, c, d, e, f, g, h) \ CALC_SB_2 (i, a, b); CALC_SB_2 ((i)+1, c, d); \ CALC_SB_2 ((i)+2, e, f); CALC_SB_2 ((i)+3, g, h) /* Macros exactly like CALC_SB and CALC_SB_2, but for 256-bit keys. */ #define CALC_SB256_2(i, a, b) \ ctx->s[0][i] = mds[0][q0[q0[q1[(b) ^ sa] ^ se] ^ si] ^ sm]; \ ctx->s[1][i] = mds[1][q0[q1[q1[(a) ^ sb] ^ sf] ^ sj] ^ sn]; \ ctx->s[2][i] = mds[2][q1[q0[q0[(a) ^ sc] ^ sg] ^ sk] ^ so]; \ ctx->s[3][i] = mds[3][q1[q1[q0[(b) ^ sd] ^ sh] ^ sl] ^ sp]; #define CALC_SB256(i, a, b, c, d, e, f, g, h) \ CALC_SB256_2 (i, a, b); CALC_SB256_2 ((i)+1, c, d); \ CALC_SB256_2 ((i)+2, e, f); CALC_SB256_2 ((i)+3, g, h) /* Macros to calculate the whitening and round subkeys. CALC_K_2 computes the * last two stages of the h() function for a given index (either 2i or 2i+1). * a, b, c, and d are the four bytes going into the last two stages. For * 128-bit keys, this is the entire h() function and a and c are the index * preprocessed through q0 and q1 respectively; for longer keys they are the * output of previous stages. j is the index of the first key byte to use. * CALC_K computes a pair of subkeys for 128-bit Twofish, by calling CALC_K_2 * twice, doing the Psuedo-Hadamard Transform, and doing the necessary * rotations. Its parameters are: a, the array to write the results into, * j, the index of the first output entry, k and l, the preprocessed indices * for index 2i, and m and n, the preprocessed indices for index 2i+1. * CALC_K256_2 expands CALC_K_2 to handle 256-bit keys, by doing two * additional lookup-and-XOR stages. The parameters a and b are the index * preprocessed through q0 and q1 respectively; j is the index of the first * key byte to use. CALC_K256 is identical to CALC_K but for using the * CALC_K256_2 macro instead of CALC_K_2. */ #define CALC_K_2(a, b, c, d, j) \ mds[0][q0[a ^ key[(j) + 8]] ^ key[j]] \ ^ mds[1][q0[b ^ key[(j) + 9]] ^ key[(j) + 1]] \ ^ mds[2][q1[c ^ key[(j) + 10]] ^ key[(j) + 2]] \ ^ mds[3][q1[d ^ key[(j) + 11]] ^ key[(j) + 3]] #define CALC_K(a, j, k, l, m, n) \ x = CALC_K_2 (k, l, k, l, 0); \ y = CALC_K_2 (m, n, m, n, 4); \ y = (y << 8) + (y >> 24); \ x += y; y += x; ctx->a[j] = x; \ ctx->a[(j) + 1] = (y << 9) + (y >> 23) #define CALC_K256_2(a, b, j) \ CALC_K_2 (q0[q1[b ^ key[(j) + 24]] ^ key[(j) + 16]], \ q1[q1[a ^ key[(j) + 25]] ^ key[(j) + 17]], \ q0[q0[a ^ key[(j) + 26]] ^ key[(j) + 18]], \ q1[q0[b ^ key[(j) + 27]] ^ key[(j) + 19]], j) #define CALC_K256(a, j, k, l, m, n) \ x = CALC_K256_2 (k, l, 0); \ y = CALC_K256_2 (m, n, 4); \ y = (y << 8) + (y >> 24); \ x += y; y += x; ctx->a[j] = x; \ ctx->a[(j) + 1] = (y << 9) + (y >> 23) static void burn_stack (int bytes) { char buf[64]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } /* Perform the key setup. Note that this works only with 128- and 256-bit * keys, despite the API that looks like it might support other sizes. */ static int do_twofish_setkey (TWOFISH_context *ctx, const byte *key, unsigned int keylen) { int i, j, k; /* Temporaries for CALC_K. */ u32 x, y; /* The S vector used to key the S-boxes, split up into individual bytes. * 128-bit keys use only sa through sh; 256-bit use all of them. */ byte sa = 0, sb = 0, sc = 0, sd = 0, se = 0, sf = 0, sg = 0, sh = 0; byte si = 0, sj = 0, sk = 0, sl = 0, sm = 0, sn = 0, so = 0, sp = 0; /* Temporary for CALC_S. */ byte tmp; /* Flags for self-test. */ static int initialized = 0; static const char *selftest_failed=0; /* Check key length. */ if( ( ( keylen - 16 ) | 16 ) != 16 ) return G10ERR_WRONG_KEYLEN; /* Do self-test if necessary. */ if (!initialized) { initialized = 1; selftest_failed = selftest (); if( selftest_failed ) fprintf(stderr, "%s\n", selftest_failed ); } if( selftest_failed ) return G10ERR_SELFTEST_FAILED; /* Compute the first two words of the S vector. The magic numbers are * the entries of the RS matrix, preprocessed through poly_to_exp. The * numbers in the comments are the original (polynomial form) matrix * entries. */ CALC_S (sa, sb, sc, sd, 0, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ CALC_S (sa, sb, sc, sd, 1, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ CALC_S (sa, sb, sc, sd, 2, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ CALC_S (sa, sb, sc, sd, 3, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ CALC_S (sa, sb, sc, sd, 4, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ CALC_S (sa, sb, sc, sd, 5, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ CALC_S (sa, sb, sc, sd, 6, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ CALC_S (sa, sb, sc, sd, 7, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ CALC_S (se, sf, sg, sh, 8, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ CALC_S (se, sf, sg, sh, 9, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ CALC_S (se, sf, sg, sh, 10, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ CALC_S (se, sf, sg, sh, 11, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ CALC_S (se, sf, sg, sh, 12, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ CALC_S (se, sf, sg, sh, 13, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ CALC_S (se, sf, sg, sh, 14, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ CALC_S (se, sf, sg, sh, 15, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ if (keylen == 32) { /* 256-bit key */ /* Calculate the remaining two words of the S vector */ CALC_S (si, sj, sk, sl, 16, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ CALC_S (si, sj, sk, sl, 17, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ CALC_S (si, sj, sk, sl, 18, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ CALC_S (si, sj, sk, sl, 19, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ CALC_S (si, sj, sk, sl, 20, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ CALC_S (si, sj, sk, sl, 21, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ CALC_S (si, sj, sk, sl, 22, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ CALC_S (si, sj, sk, sl, 23, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ CALC_S (sm, sn, so, sp, 24, 0x00, 0x2D, 0x01, 0x2D); /* 01 A4 02 A4 */ CALC_S (sm, sn, so, sp, 25, 0x2D, 0xA4, 0x44, 0x8A); /* A4 56 A1 55 */ CALC_S (sm, sn, so, sp, 26, 0x8A, 0xD5, 0xBF, 0xD1); /* 55 82 FC 87 */ CALC_S (sm, sn, so, sp, 27, 0xD1, 0x7F, 0x3D, 0x99); /* 87 F3 C1 5A */ CALC_S (sm, sn, so, sp, 28, 0x99, 0x46, 0x66, 0x96); /* 5A 1E 47 58 */ CALC_S (sm, sn, so, sp, 29, 0x96, 0x3C, 0x5B, 0xED); /* 58 C6 AE DB */ CALC_S (sm, sn, so, sp, 30, 0xED, 0x37, 0x4F, 0xE0); /* DB 68 3D 9E */ CALC_S (sm, sn, so, sp, 31, 0xE0, 0xD0, 0x8C, 0x17); /* 9E E5 19 03 */ /* Compute the S-boxes. */ for(i=j=0,k=1; i < 256; i++, j += 2, k += 2 ) { CALC_SB256_2( i, calc_sb_tbl[j], calc_sb_tbl[k] ); } /* Calculate whitening and round subkeys. The constants are * indices of subkeys, preprocessed through q0 and q1. */ CALC_K256 (w, 0, 0xA9, 0x75, 0x67, 0xF3); CALC_K256 (w, 2, 0xB3, 0xC6, 0xE8, 0xF4); CALC_K256 (w, 4, 0x04, 0xDB, 0xFD, 0x7B); CALC_K256 (w, 6, 0xA3, 0xFB, 0x76, 0xC8); CALC_K256 (k, 0, 0x9A, 0x4A, 0x92, 0xD3); CALC_K256 (k, 2, 0x80, 0xE6, 0x78, 0x6B); CALC_K256 (k, 4, 0xE4, 0x45, 0xDD, 0x7D); CALC_K256 (k, 6, 0xD1, 0xE8, 0x38, 0x4B); CALC_K256 (k, 8, 0x0D, 0xD6, 0xC6, 0x32); CALC_K256 (k, 10, 0x35, 0xD8, 0x98, 0xFD); CALC_K256 (k, 12, 0x18, 0x37, 0xF7, 0x71); CALC_K256 (k, 14, 0xEC, 0xF1, 0x6C, 0xE1); CALC_K256 (k, 16, 0x43, 0x30, 0x75, 0x0F); CALC_K256 (k, 18, 0x37, 0xF8, 0x26, 0x1B); CALC_K256 (k, 20, 0xFA, 0x87, 0x13, 0xFA); CALC_K256 (k, 22, 0x94, 0x06, 0x48, 0x3F); CALC_K256 (k, 24, 0xF2, 0x5E, 0xD0, 0xBA); CALC_K256 (k, 26, 0x8B, 0xAE, 0x30, 0x5B); CALC_K256 (k, 28, 0x84, 0x8A, 0x54, 0x00); CALC_K256 (k, 30, 0xDF, 0xBC, 0x23, 0x9D); } else { /* Compute the S-boxes. */ for(i=j=0,k=1; i < 256; i++, j += 2, k += 2 ) { CALC_SB_2( i, calc_sb_tbl[j], calc_sb_tbl[k] ); } /* Calculate whitening and round subkeys. The constants are * indices of subkeys, preprocessed through q0 and q1. */ CALC_K (w, 0, 0xA9, 0x75, 0x67, 0xF3); CALC_K (w, 2, 0xB3, 0xC6, 0xE8, 0xF4); CALC_K (w, 4, 0x04, 0xDB, 0xFD, 0x7B); CALC_K (w, 6, 0xA3, 0xFB, 0x76, 0xC8); CALC_K (k, 0, 0x9A, 0x4A, 0x92, 0xD3); CALC_K (k, 2, 0x80, 0xE6, 0x78, 0x6B); CALC_K (k, 4, 0xE4, 0x45, 0xDD, 0x7D); CALC_K (k, 6, 0xD1, 0xE8, 0x38, 0x4B); CALC_K (k, 8, 0x0D, 0xD6, 0xC6, 0x32); CALC_K (k, 10, 0x35, 0xD8, 0x98, 0xFD); CALC_K (k, 12, 0x18, 0x37, 0xF7, 0x71); CALC_K (k, 14, 0xEC, 0xF1, 0x6C, 0xE1); CALC_K (k, 16, 0x43, 0x30, 0x75, 0x0F); CALC_K (k, 18, 0x37, 0xF8, 0x26, 0x1B); CALC_K (k, 20, 0xFA, 0x87, 0x13, 0xFA); CALC_K (k, 22, 0x94, 0x06, 0x48, 0x3F); CALC_K (k, 24, 0xF2, 0x5E, 0xD0, 0xBA); CALC_K (k, 26, 0x8B, 0xAE, 0x30, 0x5B); CALC_K (k, 28, 0x84, 0x8A, 0x54, 0x00); CALC_K (k, 30, 0xDF, 0xBC, 0x23, 0x9D); } return 0; } static int twofish_setkey (void *ctx, const byte *key, unsigned int keylen) { int rc = do_twofish_setkey (ctx, key, keylen); burn_stack (23+6*sizeof(void*)); return rc; } /* Macros to compute the g() function in the encryption and decryption * rounds. G1 is the straight g() function; G2 includes the 8-bit * rotation for the high 32-bit word. */ #define G1(a) \ (ctx->s[0][(a) & 0xFF]) ^ (ctx->s[1][((a) >> 8) & 0xFF]) \ ^ (ctx->s[2][((a) >> 16) & 0xFF]) ^ (ctx->s[3][(a) >> 24]) #define G2(b) \ (ctx->s[1][(b) & 0xFF]) ^ (ctx->s[2][((b) >> 8) & 0xFF]) \ ^ (ctx->s[3][((b) >> 16) & 0xFF]) ^ (ctx->s[0][(b) >> 24]) /* Encryption and decryption Feistel rounds. Each one calls the two g() * macros, does the PHT, and performs the XOR and the appropriate bit * rotations. The parameters are the round number (used to select subkeys), * and the four 32-bit chunks of the text. */ #define ENCROUND(n, a, b, c, d) \ x = G1 (a); y = G2 (b); \ x += y; y += x + ctx->k[2 * (n) + 1]; \ (c) ^= x + ctx->k[2 * (n)]; \ (c) = ((c) >> 1) + ((c) << 31); \ (d) = (((d) << 1)+((d) >> 31)) ^ y #define DECROUND(n, a, b, c, d) \ x = G1 (a); y = G2 (b); \ x += y; y += x; \ (d) ^= y + ctx->k[2 * (n) + 1]; \ (d) = ((d) >> 1) + ((d) << 31); \ (c) = (((c) << 1)+((c) >> 31)); \ (c) ^= (x + ctx->k[2 * (n)]) /* Encryption and decryption cycles; each one is simply two Feistel rounds * with the 32-bit chunks re-ordered to simulate the "swap" */ #define ENCCYCLE(n) \ ENCROUND (2 * (n), a, b, c, d); \ ENCROUND (2 * (n) + 1, c, d, a, b) #define DECCYCLE(n) \ DECROUND (2 * (n) + 1, c, d, a, b); \ DECROUND (2 * (n), a, b, c, d) /* Macros to convert the input and output bytes into 32-bit words, * and simultaneously perform the whitening step. INPACK packs word * number n into the variable named by x, using whitening subkey number m. * OUTUNPACK unpacks word number n from the variable named by x, using * whitening subkey number m. */ #define INPACK(n, x, m) \ x = in[4 * (n)] ^ (in[4 * (n) + 1] << 8) \ ^ (in[4 * (n) + 2] << 16) ^ (in[4 * (n) + 3] << 24) ^ ctx->w[m] #define OUTUNPACK(n, x, m) \ x ^= ctx->w[m]; \ out[4 * (n)] = x; out[4 * (n) + 1] = x >> 8; \ out[4 * (n) + 2] = x >> 16; out[4 * (n) + 3] = x >> 24 /* Encrypt one block. in and out may be the same. */ static void do_twofish_encrypt (const TWOFISH_context *ctx, byte *out, const byte *in) { /* The four 32-bit chunks of the text. */ u32 a, b, c, d; /* Temporaries used by the round function. */ u32 x, y; /* Input whitening and packing. */ INPACK (0, a, 0); INPACK (1, b, 1); INPACK (2, c, 2); INPACK (3, d, 3); /* Encryption Feistel cycles. */ ENCCYCLE (0); ENCCYCLE (1); ENCCYCLE (2); ENCCYCLE (3); ENCCYCLE (4); ENCCYCLE (5); ENCCYCLE (6); ENCCYCLE (7); /* Output whitening and unpacking. */ OUTUNPACK (0, c, 4); OUTUNPACK (1, d, 5); OUTUNPACK (2, a, 6); OUTUNPACK (3, b, 7); } static void twofish_encrypt (void *ctx, byte *out, const byte *in) { do_twofish_encrypt (ctx, out, in); burn_stack (24+3*sizeof (void*)); } /* Decrypt one block. in and out may be the same. */ static void do_twofish_decrypt (const TWOFISH_context *ctx, byte *out, const byte *in) { /* The four 32-bit chunks of the text. */ u32 a, b, c, d; /* Temporaries used by the round function. */ u32 x, y; /* Input whitening and packing. */ INPACK (0, c, 4); INPACK (1, d, 5); INPACK (2, a, 6); INPACK (3, b, 7); /* Encryption Feistel cycles. */ DECCYCLE (7); DECCYCLE (6); DECCYCLE (5); DECCYCLE (4); DECCYCLE (3); DECCYCLE (2); DECCYCLE (1); DECCYCLE (0); /* Output whitening and unpacking. */ OUTUNPACK (0, a, 0); OUTUNPACK (1, b, 1); OUTUNPACK (2, c, 2); OUTUNPACK (3, d, 3); } static void twofish_decrypt (void *ctx, byte *out, const byte *in) { do_twofish_decrypt (ctx, out, in); burn_stack (24+3*sizeof (void*)); } /* Test a single encryption and decryption with each key size. */ static const char* selftest (void) { TWOFISH_context ctx; /* Expanded key. */ byte scratch[16]; /* Encryption/decryption result buffer. */ /* Test vectors for single encryption/decryption. Note that I am using * the vectors from the Twofish paper's "known answer test", I=3 for * 128-bit and I=4 for 256-bit, instead of the all-0 vectors from the * "intermediate value test", because an all-0 key would trigger all the * special cases in the RS matrix multiply, leaving the math untested. */ static const byte plaintext[16] = { 0xD4, 0x91, 0xDB, 0x16, 0xE7, 0xB1, 0xC3, 0x9E, 0x86, 0xCB, 0x08, 0x6B, 0x78, 0x9F, 0x54, 0x19 }; static const byte key[16] = { 0x9F, 0x58, 0x9F, 0x5C, 0xF6, 0x12, 0x2C, 0x32, 0xB6, 0xBF, 0xEC, 0x2F, 0x2A, 0xE8, 0xC3, 0x5A }; static const byte ciphertext[16] = { 0x01, 0x9F, 0x98, 0x09, 0xDE, 0x17, 0x11, 0x85, 0x8F, 0xAA, 0xC3, 0xA3, 0xBA, 0x20, 0xFB, 0xC3 }; static const byte plaintext_256[16] = { 0x90, 0xAF, 0xE9, 0x1B, 0xB2, 0x88, 0x54, 0x4F, 0x2C, 0x32, 0xDC, 0x23, 0x9B, 0x26, 0x35, 0xE6 }; static const byte key_256[32] = { 0xD4, 0x3B, 0xB7, 0x55, 0x6E, 0xA3, 0x2E, 0x46, 0xF2, 0xA2, 0x82, 0xB7, 0xD4, 0x5B, 0x4E, 0x0D, 0x57, 0xFF, 0x73, 0x9D, 0x4D, 0xC9, 0x2C, 0x1B, 0xD7, 0xFC, 0x01, 0x70, 0x0C, 0xC8, 0x21, 0x6F }; static const byte ciphertext_256[16] = { 0x6C, 0xB4, 0x56, 0x1C, 0x40, 0xBF, 0x0A, 0x97, 0x05, 0x93, 0x1C, 0xB6, 0xD4, 0x08, 0xE7, 0xFA }; twofish_setkey (&ctx, key, sizeof(key)); twofish_encrypt (&ctx, scratch, plaintext); if (memcmp (scratch, ciphertext, sizeof (ciphertext))) return "Twofish-128 test encryption failed."; twofish_decrypt (&ctx, scratch, scratch); if (memcmp (scratch, plaintext, sizeof (plaintext))) return "Twofish-128 test decryption failed."; twofish_setkey (&ctx, key_256, sizeof(key_256)); twofish_encrypt (&ctx, scratch, plaintext_256); if (memcmp (scratch, ciphertext_256, sizeof (ciphertext_256))) return "Twofish-256 test encryption failed."; twofish_decrypt (&ctx, scratch, scratch); if (memcmp (scratch, plaintext_256, sizeof (plaintext_256))) return "Twofish-256 test decryption failed."; return NULL; } /* More complete test program. This does 1000 encryptions and decryptions * with each of 250 128-bit keys and 2000 encryptions and decryptions with * each of 125 256-bit keys, using a feedback scheme similar to a Feistel * cipher, so as to be sure of testing all the table entries pretty * thoroughly. We keep changing the keys so as to get a more meaningful * performance number, since the key setup is non-trivial for Twofish. */ #ifdef TEST #include #include #include int main() { TWOFISH_context ctx; /* Expanded key. */ int i, j; /* Loop counters. */ const char *encrypt_msg; /* Message to print regarding encryption test; * the printf is done outside the loop to avoid * stuffing up the timing. */ clock_t timer; /* For computing elapsed time. */ /* Test buffer. */ byte buffer[4][16] = { {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}, {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78, 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0}, {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54 ,0x32, 0x10}, {0x01, 0x23, 0x45, 0x67, 0x76, 0x54 ,0x32, 0x10, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98} }; /* Expected outputs for the million-operation test */ static const byte test_encrypt[4][16] = { {0xC8, 0x23, 0xB8, 0xB7, 0x6B, 0xFE, 0x91, 0x13, 0x2F, 0xA7, 0x5E, 0xE6, 0x94, 0x77, 0x6F, 0x6B}, {0x90, 0x36, 0xD8, 0x29, 0xD5, 0x96, 0xC2, 0x8E, 0xE4, 0xFF, 0x76, 0xBC, 0xE5, 0x77, 0x88, 0x27}, {0xB8, 0x78, 0x69, 0xAF, 0x42, 0x8B, 0x48, 0x64, 0xF7, 0xE9, 0xF3, 0x9C, 0x42, 0x18, 0x7B, 0x73}, {0x7A, 0x88, 0xFB, 0xEB, 0x90, 0xA4, 0xB4, 0xA8, 0x43, 0xA3, 0x1D, 0xF1, 0x26, 0xC4, 0x53, 0x57} }; static const byte test_decrypt[4][16] = { {0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF}, {0x0F, 0x1E, 0x2D, 0x3C, 0x4B, 0x5A, 0x69, 0x78, 0x87, 0x96, 0xA5, 0xB4, 0xC3, 0xD2 ,0xE1, 0xF0}, {0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54 ,0x32, 0x10}, {0x01, 0x23, 0x45, 0x67, 0x76, 0x54 ,0x32, 0x10, 0x89, 0xAB, 0xCD, 0xEF, 0xFE, 0xDC, 0xBA, 0x98} }; /* Start the timer ticking. */ timer = clock (); /* Encryption test. */ for (i = 0; i < 125; i++) { twofish_setkey (&ctx, buffer[0], sizeof (buffer[0])); for (j = 0; j < 1000; j++) twofish_encrypt (&ctx, buffer[2], buffer[2]); twofish_setkey (&ctx, buffer[1], sizeof (buffer[1])); for (j = 0; j < 1000; j++) twofish_encrypt (&ctx, buffer[3], buffer[3]); twofish_setkey (&ctx, buffer[2], sizeof (buffer[2])*2); for (j = 0; j < 1000; j++) { twofish_encrypt (&ctx, buffer[0], buffer[0]); twofish_encrypt (&ctx, buffer[1], buffer[1]); } } encrypt_msg = memcmp (buffer, test_encrypt, sizeof (test_encrypt)) ? "encryption failure!\n" : "encryption OK!\n"; /* Decryption test. */ for (i = 0; i < 125; i++) { twofish_setkey (&ctx, buffer[2], sizeof (buffer[2])*2); for (j = 0; j < 1000; j++) { twofish_decrypt (&ctx, buffer[0], buffer[0]); twofish_decrypt (&ctx, buffer[1], buffer[1]); } twofish_setkey (&ctx, buffer[1], sizeof (buffer[1])); for (j = 0; j < 1000; j++) twofish_decrypt (&ctx, buffer[3], buffer[3]); twofish_setkey (&ctx, buffer[0], sizeof (buffer[0])); for (j = 0; j < 1000; j++) twofish_decrypt (&ctx, buffer[2], buffer[2]); } /* Stop the timer, and print results. */ timer = clock () - timer; printf (encrypt_msg); printf (memcmp (buffer, test_decrypt, sizeof (test_decrypt)) ? "decryption failure!\n" : "decryption OK!\n"); printf ("elapsed time: %.1f s.\n", (float) timer / CLOCKS_PER_SEC); return 0; } #endif /* TEST */ const char * twofish_get_info(int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**r_setkey) (void *c, const byte *key, unsigned keylen), void (**r_encrypt) (void *c, byte *outbuf, const byte *inbuf), void (**r_decrypt) (void *c, byte *outbuf, const byte *inbuf) ) { *keylen = algo==10? 256 : 128; *blocksize = 16; *contextsize = sizeof (TWOFISH_context); *r_setkey = twofish_setkey; *r_encrypt = twofish_encrypt; *r_decrypt = twofish_decrypt; if( algo == 10 ) return "TWOFISH"; if (algo == 102) /* This algorithm number is assigned for * experiments, so we can use it */ return "TWOFISH128"; return NULL; } gnupg-1.4.20/cipher/camellia.h0000644000175000017500000000302412635262326013037 00000000000000/* camellia.h ver 1.2.0 * * Copyright (C) 2006,2007 * NTT (Nippon Telegraph and Telephone Corporation). * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ #ifndef HEADER_CAMELLIA_H #define HEADER_CAMELLIA_H #ifdef __cplusplus extern "C" { #endif #define CAMELLIA_BLOCK_SIZE 16 #define CAMELLIA_TABLE_BYTE_LEN 272 #define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; void Camellia_Ekeygen(const int keyBitLength, const unsigned char *rawKey, KEY_TABLE_TYPE keyTable); void Camellia_EncryptBlock(const int keyBitLength, const unsigned char *plaintext, const KEY_TABLE_TYPE keyTable, unsigned char *cipherText); void Camellia_DecryptBlock(const int keyBitLength, const unsigned char *cipherText, const KEY_TABLE_TYPE keyTable, unsigned char *plaintext); #ifdef __cplusplus } #endif #endif /* HEADER_CAMELLIA_H */ gnupg-1.4.20/cipher/dynload.c0000644000175000017500000000555012635262326012723 00000000000000/* dynload.c - load cipher extensions * Copyright (C) 1998, 1999, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include "util.h" #include "cipher.h" #include "algorithms.h" typedef struct ext_list { struct ext_list *next; char name[1]; } *EXTLIST; static EXTLIST extensions; /* This is actually not used anymore but we keep a list of already * set extensions modules here. * * Here is the ancient comment: * Register an extension module. The last registered module will * be loaded first. A name may have a list of classes * appended; e.g: * mymodule.so(1:17,3:20,3:109) * means that this module provides digest algorithm 17 and public key * algorithms 20 and 109. This is only a hint but if it is there the * loader may decide to only load a module which claims to have a * requested algorithm. * * mainpgm is the path to the program which wants to load a module * it is only used in some environments. */ void register_cipher_extension( const char *mainpgm, const char *fname ) { EXTLIST r, el; char *p, *pe; if( *fname != DIRSEP_C ) { /* do tilde expansion etc */ char *tmp; if( strchr(fname, DIRSEP_C) ) tmp = make_filename(fname, NULL); else tmp = make_filename(GNUPG_LIBDIR, fname, NULL); el = xmalloc_clear( sizeof *el + strlen(tmp) ); strcpy(el->name, tmp ); xfree(tmp); } else { el = xmalloc_clear( sizeof *el + strlen(fname) ); strcpy(el->name, fname ); } /* check whether we have a class hint */ if( (p=strchr(el->name,'(')) && (pe=strchr(p+1,')')) && !pe[1] ) *p = *pe = 0; /* check that it is not already registered */ for(r = extensions; r; r = r->next ) { if( !compare_filenames(r->name, el->name) ) { log_info("extension `%s' already registered\n", el->name ); xfree(el); return; } } /* and register */ el->next = extensions; extensions = el; } /* Return the module name with index SEQ, return NULL as as indication for end of list. */ const char * dynload_enum_module_names (int seq) { EXTLIST el = extensions; for (; el && el->name && seq; el = el->next, seq--) ; return el? el->name:NULL; } gnupg-1.4.20/cipher/rand-internal.h0000644000175000017500000000350312635262326014030 00000000000000/* rand-internal.h - header to glue the random functions * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef G10_RAND_INTERNAL_H #define G10_RAND_INTERNAL_H int rndunix_gather_random (void (*add)(const void*, size_t, int), int requester, size_t length, int level); int rndlinux_gather_random (void (*add)(const void*, size_t, int), int requester, size_t length, int level); int rndvms_gather_random (void (*add)(const void*, size_t, int), int requester, size_t length, int level); int rndegd_connect_socket (int nofail); int rndegd_gather_random (void (*add)(const void*, size_t, int), int requester, size_t length, int level ); int rndw32_gather_random (void (*add)(const void*, size_t, int), int requester, size_t length, int level); int rndw32_gather_random_fast (void (*add)(const void*, size_t, int), int requester ); int rndriscos_gather_random (void (*add)(const void*, size_t, int), int requester, size_t length, int level); #endif /*G10_RAND_INTERNAL_H*/ gnupg-1.4.20/cipher/rsa.h0000644000175000017500000000253212635262326012060 00000000000000/* rsa.h * Copyright (C) 1997,1998 by Werner Koch (dd9jn) * Copyright (C) 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #ifndef G10_RSA_H #define G10_RSA_H int rsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ); int rsa_check_secret_key( int algo, MPI *skey ); int rsa_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ); int rsa_decrypt( int algo, MPI *result, MPI *data, MPI *skey ); int rsa_sign( int algo, MPI *resarr, MPI data, MPI *skey ); int rsa_verify( int algo, MPI hash, MPI *data, MPI *pkey ); unsigned rsa_get_nbits( int algo, MPI *pkey ); const char *rsa_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig, int *use ); #endif /*G10_RSA_H*/ gnupg-1.4.20/cipher/Makefile.am0000644000175000017500000000331512635262326013156 00000000000000# Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005, # 2007 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 3 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, see . ## Process this file with automake to produce Makefile.in AM_CPPFLAGS = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl if ! HAVE_DOSISH_SYSTEM AM_CPPFLAGS += -DGNUPG_LIBDIR="\"$(libdir)/@PACKAGE@\"" endif noinst_LIBRARIES = libcipher.a libcipher_a_SOURCES = cipher.c \ pubkey.c \ md.c \ dynload.c \ bithelp.h \ des.c \ twofish.c \ blowfish.c \ cast5.c \ rijndael.c \ camellia.c camellia.h camellia-glue.c \ idea.c \ elgamal.c \ elgamal.h \ rsa.c rsa.h \ primegen.c \ random.h \ random.c \ rand-internal.h \ rmd.h \ dsa.h \ dsa.c \ smallprime.c \ algorithms.h \ md5.c \ rmd160.c \ sha1.c \ sha256.c if USE_RNDLINUX libcipher_a_SOURCES+=rndlinux.c endif if USE_RNDUNIX libcipher_a_SOURCES+=rndunix.c endif if USE_RNDEGD libcipher_a_SOURCES+=rndegd.c endif if USE_RNDW32 libcipher_a_SOURCES+=rndw32.c endif if USE_SHA512 libcipher_a_SOURCES+=sha512.c endif gnupg-1.4.20/cipher/sha1.c0000644000175000017500000002345412635262326012130 00000000000000/* sha1.c - SHA1 hash function * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * Please see below for more legal information! * * 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 3 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, see . */ /* Test vectors: * * "abc" * A999 3E36 4706 816A BA3E 2571 7850 C26C 9CD0 D89D * * "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" * 8498 3E44 1C3B D26E BAAE 4AA1 F951 29E5 E546 70F1 */ #include #include #include #include #include #include "util.h" #include "memory.h" #include "algorithms.h" #include "bithelp.h" typedef struct { u32 h0,h1,h2,h3,h4; u32 nblocks; byte buf[64]; int count; } SHA1_CONTEXT; static void burn_stack (int bytes) { char buf[128]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } void sha1_init( SHA1_CONTEXT *hd ) { hd->h0 = 0x67452301; hd->h1 = 0xefcdab89; hd->h2 = 0x98badcfe; hd->h3 = 0x10325476; hd->h4 = 0xc3d2e1f0; hd->nblocks = 0; hd->count = 0; } /**************** * Transform the message X which consists of 16 32-bit-words */ static void transform( SHA1_CONTEXT *hd, byte *data ) { u32 a,b,c,d,e,tm; u32 x[16]; /* get values from the chaining vars */ a = hd->h0; b = hd->h1; c = hd->h2; d = hd->h3; e = hd->h4; #ifdef BIG_ENDIAN_HOST memcpy( x, data, 64 ); #else { int i; byte *p2; for(i=0, p2=(byte*)x; i < 16; i++, p2 += 4 ) { p2[3] = *data++; p2[2] = *data++; p2[1] = *data++; p2[0] = *data++; } } #endif #define K1 0x5A827999L #define K2 0x6ED9EBA1L #define K3 0x8F1BBCDCL #define K4 0xCA62C1D6L #define F1(x,y,z) ( z ^ ( x & ( y ^ z ) ) ) #define F2(x,y,z) ( x ^ y ^ z ) #define F3(x,y,z) ( ( x & y ) | ( z & ( x | y ) ) ) #define F4(x,y,z) ( x ^ y ^ z ) #define M(i) ( tm = x[i&0x0f] ^ x[(i-14)&0x0f] \ ^ x[(i-8)&0x0f] ^ x[(i-3)&0x0f] \ , (x[i&0x0f] = rol(tm,1)) ) #define R(a,b,c,d,e,f,k,m) do { e += rol( a, 5 ) \ + f( b, c, d ) \ + k \ + m; \ b = rol( b, 30 ); \ } while(0) R( a, b, c, d, e, F1, K1, x[ 0] ); R( e, a, b, c, d, F1, K1, x[ 1] ); R( d, e, a, b, c, F1, K1, x[ 2] ); R( c, d, e, a, b, F1, K1, x[ 3] ); R( b, c, d, e, a, F1, K1, x[ 4] ); R( a, b, c, d, e, F1, K1, x[ 5] ); R( e, a, b, c, d, F1, K1, x[ 6] ); R( d, e, a, b, c, F1, K1, x[ 7] ); R( c, d, e, a, b, F1, K1, x[ 8] ); R( b, c, d, e, a, F1, K1, x[ 9] ); R( a, b, c, d, e, F1, K1, x[10] ); R( e, a, b, c, d, F1, K1, x[11] ); R( d, e, a, b, c, F1, K1, x[12] ); R( c, d, e, a, b, F1, K1, x[13] ); R( b, c, d, e, a, F1, K1, x[14] ); R( a, b, c, d, e, F1, K1, x[15] ); R( e, a, b, c, d, F1, K1, M(16) ); R( d, e, a, b, c, F1, K1, M(17) ); R( c, d, e, a, b, F1, K1, M(18) ); R( b, c, d, e, a, F1, K1, M(19) ); R( a, b, c, d, e, F2, K2, M(20) ); R( e, a, b, c, d, F2, K2, M(21) ); R( d, e, a, b, c, F2, K2, M(22) ); R( c, d, e, a, b, F2, K2, M(23) ); R( b, c, d, e, a, F2, K2, M(24) ); R( a, b, c, d, e, F2, K2, M(25) ); R( e, a, b, c, d, F2, K2, M(26) ); R( d, e, a, b, c, F2, K2, M(27) ); R( c, d, e, a, b, F2, K2, M(28) ); R( b, c, d, e, a, F2, K2, M(29) ); R( a, b, c, d, e, F2, K2, M(30) ); R( e, a, b, c, d, F2, K2, M(31) ); R( d, e, a, b, c, F2, K2, M(32) ); R( c, d, e, a, b, F2, K2, M(33) ); R( b, c, d, e, a, F2, K2, M(34) ); R( a, b, c, d, e, F2, K2, M(35) ); R( e, a, b, c, d, F2, K2, M(36) ); R( d, e, a, b, c, F2, K2, M(37) ); R( c, d, e, a, b, F2, K2, M(38) ); R( b, c, d, e, a, F2, K2, M(39) ); R( a, b, c, d, e, F3, K3, M(40) ); R( e, a, b, c, d, F3, K3, M(41) ); R( d, e, a, b, c, F3, K3, M(42) ); R( c, d, e, a, b, F3, K3, M(43) ); R( b, c, d, e, a, F3, K3, M(44) ); R( a, b, c, d, e, F3, K3, M(45) ); R( e, a, b, c, d, F3, K3, M(46) ); R( d, e, a, b, c, F3, K3, M(47) ); R( c, d, e, a, b, F3, K3, M(48) ); R( b, c, d, e, a, F3, K3, M(49) ); R( a, b, c, d, e, F3, K3, M(50) ); R( e, a, b, c, d, F3, K3, M(51) ); R( d, e, a, b, c, F3, K3, M(52) ); R( c, d, e, a, b, F3, K3, M(53) ); R( b, c, d, e, a, F3, K3, M(54) ); R( a, b, c, d, e, F3, K3, M(55) ); R( e, a, b, c, d, F3, K3, M(56) ); R( d, e, a, b, c, F3, K3, M(57) ); R( c, d, e, a, b, F3, K3, M(58) ); R( b, c, d, e, a, F3, K3, M(59) ); R( a, b, c, d, e, F4, K4, M(60) ); R( e, a, b, c, d, F4, K4, M(61) ); R( d, e, a, b, c, F4, K4, M(62) ); R( c, d, e, a, b, F4, K4, M(63) ); R( b, c, d, e, a, F4, K4, M(64) ); R( a, b, c, d, e, F4, K4, M(65) ); R( e, a, b, c, d, F4, K4, M(66) ); R( d, e, a, b, c, F4, K4, M(67) ); R( c, d, e, a, b, F4, K4, M(68) ); R( b, c, d, e, a, F4, K4, M(69) ); R( a, b, c, d, e, F4, K4, M(70) ); R( e, a, b, c, d, F4, K4, M(71) ); R( d, e, a, b, c, F4, K4, M(72) ); R( c, d, e, a, b, F4, K4, M(73) ); R( b, c, d, e, a, F4, K4, M(74) ); R( a, b, c, d, e, F4, K4, M(75) ); R( e, a, b, c, d, F4, K4, M(76) ); R( d, e, a, b, c, F4, K4, M(77) ); R( c, d, e, a, b, F4, K4, M(78) ); R( b, c, d, e, a, F4, K4, M(79) ); /* update chainig vars */ hd->h0 += a; hd->h1 += b; hd->h2 += c; hd->h3 += d; hd->h4 += e; } /* Update the message digest with the contents * of INBUF with length INLEN. */ static void sha1_write( SHA1_CONTEXT *hd, byte *inbuf, size_t inlen) { if( hd->count == 64 ) { /* flush the buffer */ transform( hd, hd->buf ); burn_stack (88+4*sizeof(void*)); hd->count = 0; hd->nblocks++; } if( !inbuf ) return; if( hd->count ) { for( ; inlen && hd->count < 64; inlen-- ) hd->buf[hd->count++] = *inbuf++; sha1_write( hd, NULL, 0 ); if( !inlen ) return; } while( inlen >= 64 ) { transform( hd, inbuf ); hd->count = 0; hd->nblocks++; inlen -= 64; inbuf += 64; } burn_stack (88+4*sizeof(void*)); for( ; inlen && hd->count < 64; inlen-- ) hd->buf[hd->count++] = *inbuf++; } /* The routine final terminates the computation and * returns the digest. * The handle is prepared for a new cycle, but adding bytes to the * handle will the destroy the returned buffer. * Returns: 20 bytes representing the digest. */ static void sha1_final(SHA1_CONTEXT *hd) { u32 t, msb, lsb; byte *p; sha1_write(hd, NULL, 0); /* flush */; t = hd->nblocks; /* multiply by 64 to make a byte count */ lsb = t << 6; msb = t >> 26; /* add the count */ t = lsb; if( (lsb += hd->count) < t ) msb++; /* multiply by 8 to make a bit count */ t = lsb; lsb <<= 3; msb <<= 3; msb |= t >> 29; if( hd->count < 56 ) { /* enough room */ hd->buf[hd->count++] = 0x80; /* pad */ while( hd->count < 56 ) hd->buf[hd->count++] = 0; /* pad */ } else { /* need one extra block */ hd->buf[hd->count++] = 0x80; /* pad character */ while( hd->count < 64 ) hd->buf[hd->count++] = 0; sha1_write(hd, NULL, 0); /* flush */; memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ } /* append the 64 bit count */ hd->buf[56] = msb >> 24; hd->buf[57] = msb >> 16; hd->buf[58] = msb >> 8; hd->buf[59] = msb ; hd->buf[60] = lsb >> 24; hd->buf[61] = lsb >> 16; hd->buf[62] = lsb >> 8; hd->buf[63] = lsb ; transform( hd, hd->buf ); burn_stack (88+4*sizeof(void*)); p = hd->buf; #ifdef BIG_ENDIAN_HOST #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) #else /* little endian */ #define X(a) do { *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \ *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0) #endif X(0); X(1); X(2); X(3); X(4); #undef X } static byte * sha1_read( SHA1_CONTEXT *hd ) { return hd->buf; } /**************** * Shortcut functions which puts the hash value of the supplied buffer * into outbuf which must have a size of 20 bytes. */ void sha1_hash_buffer (char *outbuf, const char *buffer, size_t length) { SHA1_CONTEXT hd; sha1_init (&hd); sha1_write (&hd, (byte*)buffer, length); sha1_final (&hd); memcpy (outbuf, hd.buf, 20); } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. */ const char * sha1_get_info( int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ) { static byte asn[15] = /* Object ID is 1.3.14.3.2.26 */ { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a, 0x05, 0x00, 0x04, 0x14 }; if( algo != 2 ) return NULL; *contextsize = sizeof(SHA1_CONTEXT); *r_asnoid = asn; *r_asnlen = DIM(asn); *r_mdlen = 20; *(void (**)(SHA1_CONTEXT *))r_init = sha1_init; *(void (**)(SHA1_CONTEXT *, byte*, size_t))r_write = sha1_write; *(void (**)(SHA1_CONTEXT *))r_final = sha1_final; *(byte *(**)(SHA1_CONTEXT *))r_read = sha1_read; return "SHA1"; } gnupg-1.4.20/cipher/Makefile.in0000644000175000017500000005632112635457153013200 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2005, # 2007 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 3 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, see . VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_DOSISH_SYSTEM_FALSE@am__append_1 = -DGNUPG_LIBDIR="\"$(libdir)/@PACKAGE@\"" @USE_RNDLINUX_TRUE@am__append_2 = rndlinux.c @USE_RNDUNIX_TRUE@am__append_3 = rndunix.c @USE_RNDEGD_TRUE@am__append_4 = rndegd.c @USE_RNDW32_TRUE@am__append_5 = rndw32.c @USE_SHA512_TRUE@am__append_6 = sha512.c subdir = cipher DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/scripts/mkinstalldirs \ $(top_srcdir)/scripts/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/autobuild.m4 \ $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/estream.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/glibc2.m4 $(top_srcdir)/m4/glibc21.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/intdiv0.m4 \ $(top_srcdir)/m4/intl.m4 $(top_srcdir)/m4/intlmacosx.m4 \ $(top_srcdir)/m4/intmax.m4 $(top_srcdir)/m4/inttypes-pri.m4 \ $(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \ $(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/ldap.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libcurl.m4 \ $(top_srcdir)/m4/libusb.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/longlong.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/noexecstack.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/size_max.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/tar-ustar.m4 \ $(top_srcdir)/m4/threadlib.m4 $(top_srcdir)/m4/uintmax_t.m4 \ $(top_srcdir)/m4/ulonglong.m4 $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/scripts/mkinstalldirs CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libcipher_a_AR = $(AR) $(ARFLAGS) libcipher_a_LIBADD = am__libcipher_a_SOURCES_DIST = cipher.c pubkey.c md.c dynload.c \ bithelp.h des.c twofish.c blowfish.c cast5.c rijndael.c \ camellia.c camellia.h camellia-glue.c idea.c elgamal.c \ elgamal.h rsa.c rsa.h primegen.c random.h random.c \ rand-internal.h rmd.h dsa.h dsa.c smallprime.c algorithms.h \ md5.c rmd160.c sha1.c sha256.c rndlinux.c rndunix.c rndegd.c \ rndw32.c sha512.c @USE_RNDLINUX_TRUE@am__objects_1 = rndlinux.$(OBJEXT) @USE_RNDUNIX_TRUE@am__objects_2 = rndunix.$(OBJEXT) @USE_RNDEGD_TRUE@am__objects_3 = rndegd.$(OBJEXT) @USE_RNDW32_TRUE@am__objects_4 = rndw32.$(OBJEXT) @USE_SHA512_TRUE@am__objects_5 = sha512.$(OBJEXT) am_libcipher_a_OBJECTS = cipher.$(OBJEXT) pubkey.$(OBJEXT) \ md.$(OBJEXT) dynload.$(OBJEXT) des.$(OBJEXT) twofish.$(OBJEXT) \ blowfish.$(OBJEXT) cast5.$(OBJEXT) rijndael.$(OBJEXT) \ camellia.$(OBJEXT) camellia-glue.$(OBJEXT) idea.$(OBJEXT) \ elgamal.$(OBJEXT) rsa.$(OBJEXT) primegen.$(OBJEXT) \ random.$(OBJEXT) dsa.$(OBJEXT) smallprime.$(OBJEXT) \ md5.$(OBJEXT) rmd160.$(OBJEXT) sha1.$(OBJEXT) sha256.$(OBJEXT) \ $(am__objects_1) $(am__objects_2) $(am__objects_3) \ $(am__objects_4) $(am__objects_5) libcipher_a_OBJECTS = $(am_libcipher_a_OBJECTS) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = $(SHELL) $(top_srcdir)/scripts/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcipher_a_SOURCES) DIST_SOURCES = $(am__libcipher_a_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CAPLIBS = @CAPLIBS@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCAS = @CCAS@ CCASDEPMODE = @CCASDEPMODE@ CCASFLAGS = @CCASFLAGS@ CCDEPMODE = @CCDEPMODE@ CC_FOR_BUILD = @CC_FOR_BUILD@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLIBS = @DLLIBS@ DNSLIBS = @DNSLIBS@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GENCAT = @GENCAT@ GETOPT = @GETOPT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GPGKEYS_CURL = @GPGKEYS_CURL@ GPGKEYS_FINGER = @GPGKEYS_FINGER@ GPGKEYS_HKP = @GPGKEYS_HKP@ GPGKEYS_LDAP = @GPGKEYS_LDAP@ GPGKEYS_MAILTO = @GPGKEYS_MAILTO@ GREP = @GREP@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_DEFAULT_VERBOSITY = @INTL_DEFAULT_VERBOSITY@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LDAPLIBS = @LDAPLIBS@ LDAP_CPPFLAGS = @LDAP_CPPFLAGS@ LDFLAGS = @LDFLAGS@ LIBCURL = @LIBCURL@ LIBCURL_CPPFLAGS = @LIBCURL_CPPFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBTHREAD = @LIBTHREAD@ LIBUSB = @LIBUSB@ LIBUSB_CPPFLAGS = @LIBUSB_CPPFLAGS@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MPI_EXTRA_ASM_OBJS = @MPI_EXTRA_ASM_OBJS@ MPI_OPT_FLAGS = @MPI_OPT_FLAGS@ MPI_SFLAGS = @MPI_SFLAGS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NETLIBS = @NETLIBS@ NM = @NM@ NOEXECSTACK_FLAGS = @NOEXECSTACK_FLAGS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ SED = @SED@ SENDMAIL = @SENDMAIL@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ TAR = @TAR@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ W32LIBS = @W32LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ ZLIBS = @ZLIBS@ _libcurl_config = @_libcurl_config@ _usb_config = @_usb_config@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = -I.. -I$(top_srcdir)/include -I$(top_srcdir)/intl \ $(am__append_1) noinst_LIBRARIES = libcipher.a libcipher_a_SOURCES = cipher.c pubkey.c md.c dynload.c bithelp.h des.c \ twofish.c blowfish.c cast5.c rijndael.c camellia.c camellia.h \ camellia-glue.c idea.c elgamal.c elgamal.h rsa.c rsa.h \ primegen.c random.h random.c rand-internal.h rmd.h dsa.h dsa.c \ smallprime.c algorithms.h md5.c rmd160.c sha1.c sha256.c \ $(am__append_2) $(am__append_3) $(am__append_4) \ $(am__append_5) $(am__append_6) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu cipher/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu cipher/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libcipher.a: $(libcipher_a_OBJECTS) $(libcipher_a_DEPENDENCIES) $(EXTRA_libcipher_a_DEPENDENCIES) $(AM_V_at)-rm -f libcipher.a $(AM_V_AR)$(libcipher_a_AR) libcipher.a $(libcipher_a_OBJECTS) $(libcipher_a_LIBADD) $(AM_V_at)$(RANLIB) libcipher.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blowfish.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia-glue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/camellia.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cast5.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cipher.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/des.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dsa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dynload.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/elgamal.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/idea.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/md5.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/primegen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pubkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/random.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rmd160.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndegd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndlinux.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndunix.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rndw32.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsa.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha256.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha512.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smallprime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/twofish.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES cscopelist-am ctags ctags-am distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gnupg-1.4.20/cipher/idea.c0000644000175000017500000002476412635262326012203 00000000000000/* idea.c - IDEA function * Copyright (c) 1997, 1998, 1999, 2001 by Werner Koch (dd9jn) * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL * WERNER KOCH BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * * Except as contained in this notice, the name of Werner Koch shall not be * used in advertising or otherwise to promote the sale, use or other dealings * in this Software without prior written authorization from Werner Koch. * * Patents on IDEA have expired: * Europe: EP0482154 on 2011-05-16, * Japan: JP3225440 on 2011-05-16, * U.S.: 5,214,703 on 2012-01-07. */ /* * Please see http://www.noepatents.org/ to learn why software patents * are bad for society and what you can do to fight them. * * The code herein is based on the one from: * Bruce Schneier: Applied Cryptography. John Wiley & Sons, 1996. * ISBN 0-471-11709-9. */ #include #include #include #include #include #include "types.h" /* for byte and u32 typedefs */ #include "util.h" #include "errors.h" #include "algorithms.h" #define FNCCAST_SETKEY(f) ((int(*)(void*, byte*, unsigned int))(f)) #define FNCCAST_CRYPT(f) ((void(*)(void*, byte*, byte*))(f)) #define CIPHER_ALGO_IDEA 1 #define IDEA_KEYSIZE 16 #define IDEA_BLOCKSIZE 8 #define IDEA_ROUNDS 8 #define IDEA_KEYLEN (6*IDEA_ROUNDS+4) typedef struct { u16 ek[IDEA_KEYLEN]; u16 dk[IDEA_KEYLEN]; int have_dk; } IDEA_context; static const char *selftest(void); static void burn_stack (int bytes) { char buf[64]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } static u16 mul_inv( u16 x ) { u16 t0, t1; u16 q, y; if( x < 2 ) return x; t1 = 0x10001L / x; y = 0x10001L % x; if( y == 1 ) return (1-t1) & 0xffff; t0 = 1; do { q = x / y; x = x % y; t0 += q * t1; if( x == 1 ) return t0; q = y / x; y = y % x; t1 += q * t0; } while( y != 1 ); return (1-t1) & 0xffff; } static void expand_key( const byte *userkey, u16 *ek ) { int i,j; for(j=0; j < 8; j++ ) { ek[j] = (*userkey << 8) + userkey[1]; userkey += 2; } for(i=0; j < IDEA_KEYLEN; j++ ) { i++; ek[i+7] = ek[i&7] << 9 | ek[(i+1)&7] >> 7; ek += i & 8; i &= 7; } } static void invert_key( u16 *ek, u16 dk[IDEA_KEYLEN] ) { int i; u16 t1, t2, t3; u16 temp[IDEA_KEYLEN]; u16 *p = temp + IDEA_KEYLEN; t1 = mul_inv( *ek++ ); t2 = -*ek++; t3 = -*ek++; *--p = mul_inv( *ek++ ); *--p = t3; *--p = t2; *--p = t1; for(i=0; i < IDEA_ROUNDS-1; i++ ) { t1 = *ek++; *--p = *ek++; *--p = t1; t1 = mul_inv( *ek++ ); t2 = -*ek++; t3 = -*ek++; *--p = mul_inv( *ek++ ); *--p = t2; *--p = t3; *--p = t1; } t1 = *ek++; *--p = *ek++; *--p = t1; t1 = mul_inv( *ek++ ); t2 = -*ek++; t3 = -*ek++; *--p = mul_inv( *ek++ ); *--p = t3; *--p = t2; *--p = t1; memcpy(dk, temp, sizeof(temp) ); wipememory(temp, sizeof(temp) ); /* burn temp */ } static void cipher( byte *outbuf, const byte *inbuf, u16 *key ) { u16 x1, x2, x3,x4, s2, s3; u16 *in, *out; int r = IDEA_ROUNDS; #define MUL(x,y) \ do {u16 _t16; u32 _t32; \ if( (_t16 = (y)) ) { \ if( (x = (x)&0xffff) ) { \ _t32 = (u32)x * _t16; \ x = _t32 & 0xffff; \ _t16 = _t32 >> 16; \ x = ((x)-_t16) + (x<_t16?1:0); \ } \ else { \ x = 1 - _t16; \ } \ } \ else { \ x = 1 - x; \ } \ } while(0) in = (u16*)inbuf; x1 = *in++; x2 = *in++; x3 = *in++; x4 = *in; #ifndef BIG_ENDIAN_HOST x1 = (x1>>8) | (x1<<8); x2 = (x2>>8) | (x2<<8); x3 = (x3>>8) | (x3<<8); x4 = (x4>>8) | (x4<<8); #endif do { MUL(x1, *key++); x2 += *key++; x3 += *key++; MUL(x4, *key++ ); s3 = x3; x3 ^= x1; MUL(x3, *key++); s2 = x2; x2 ^=x4; x2 += x3; MUL(x2, *key++); x3 += x2; x1 ^= x2; x4 ^= x3; x2 ^= s3; x3 ^= s2; } while( --r ); MUL(x1, *key++); x3 += *key++; x2 += *key++; MUL(x4, *key); out = (u16*)outbuf; #ifndef BIG_ENDIAN_HOST *out++ = (x1>>8) | (x1<<8); *out++ = (x3>>8) | (x3<<8); *out++ = (x2>>8) | (x2<<8); *out = (x4>>8) | (x4<<8); #else *out++ = x1; *out++ = x3; *out++ = x2; *out = x4; #endif #undef MUL } static int do_setkey( IDEA_context *c, const byte *key, unsigned int keylen ) { static int initialized = 0; static const char *selftest_failed = 0; if( !initialized ) { initialized = 1; selftest_failed = selftest(); if( selftest_failed ) log_error( "%s\n", selftest_failed ); } if( selftest_failed ) return G10ERR_SELFTEST_FAILED; assert(keylen == 16); c->have_dk = 0; expand_key( key, c->ek ); invert_key( c->ek, c->dk ); return 0; } static int idea_setkey (void *context, const byte *key, unsigned int keylen) { IDEA_context *ctx = context; int rc = do_setkey (ctx, key, keylen); burn_stack (23+6*sizeof(void*)); return rc; } static void encrypt_block( IDEA_context *c, byte *outbuf, const byte *inbuf ) { cipher( outbuf, inbuf, c->ek ); } static void idea_encrypt (void *context, byte *out, const byte *in) { IDEA_context *ctx = context; encrypt_block (ctx, out, in); burn_stack (24+3*sizeof (void*)); } static void decrypt_block( IDEA_context *c, byte *outbuf, const byte *inbuf ) { if( !c->have_dk ) { c->have_dk = 1; invert_key( c->ek, c->dk ); } cipher( outbuf, inbuf, c->dk ); } static void idea_decrypt (void *context, byte *out, const byte *in) { IDEA_context *ctx = context; decrypt_block (ctx, out, in); burn_stack (24+3*sizeof (void*)); } static const char * selftest( void ) { static struct { byte key[16]; byte plain[8]; byte cipher[8]; } test_vectors[] = { { { 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08 }, { 0x00, 0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x03 }, { 0x11, 0xFB, 0xED, 0x2B, 0x01, 0x98, 0x6D, 0xE5 } }, { { 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08 }, { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }, { 0x54, 0x0E, 0x5F, 0xEA, 0x18, 0xC2, 0xF8, 0xB1 } }, { { 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08 }, { 0x00, 0x19, 0x32, 0x4B, 0x64, 0x7D, 0x96, 0xAF }, { 0x9F, 0x0A, 0x0A, 0xB6, 0xE1, 0x0C, 0xED, 0x78 } }, { { 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08 }, { 0xF5, 0x20, 0x2D, 0x5B, 0x9C, 0x67, 0x1B, 0x08 }, { 0xCF, 0x18, 0xFD, 0x73, 0x55, 0xE2, 0xC5, 0xC5 } }, { { 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08 }, { 0xFA, 0xE6, 0xD2, 0xBE, 0xAA, 0x96, 0x82, 0x6E }, { 0x85, 0xDF, 0x52, 0x00, 0x56, 0x08, 0x19, 0x3D } }, { { 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08 }, { 0x0A, 0x14, 0x1E, 0x28, 0x32, 0x3C, 0x46, 0x50 }, { 0x2F, 0x7D, 0xE7, 0x50, 0x21, 0x2F, 0xB7, 0x34 } }, { { 0x00, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x04, 0x00, 0x05, 0x00, 0x06, 0x00, 0x07, 0x00, 0x08 }, { 0x05, 0x0A, 0x0F, 0x14, 0x19, 0x1E, 0x23, 0x28 }, { 0x7B, 0x73, 0x14, 0x92, 0x5D, 0xE5, 0x9C, 0x09 } }, { { 0x00, 0x05, 0x00, 0x0A, 0x00, 0x0F, 0x00, 0x14, 0x00, 0x19, 0x00, 0x1E, 0x00, 0x23, 0x00, 0x28 }, { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }, { 0x3E, 0xC0, 0x47, 0x80, 0xBE, 0xFF, 0x6E, 0x20 } }, { { 0x3A, 0x98, 0x4E, 0x20, 0x00, 0x19, 0x5D, 0xB3, 0x2E, 0xE5, 0x01, 0xC8, 0xC4, 0x7C, 0xEA, 0x60 }, { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }, { 0x97, 0xBC, 0xD8, 0x20, 0x07, 0x80, 0xDA, 0x86 } }, { { 0x00, 0x64, 0x00, 0xC8, 0x01, 0x2C, 0x01, 0x90, 0x01, 0xF4, 0x02, 0x58, 0x02, 0xBC, 0x03, 0x20 }, { 0x05, 0x32, 0x0A, 0x64, 0x14, 0xC8, 0x19, 0xFA }, { 0x65, 0xBE, 0x87, 0xE7, 0xA2, 0x53, 0x8A, 0xED } }, { { 0x9D, 0x40, 0x75, 0xC1, 0x03, 0xBC, 0x32, 0x2A, 0xFB, 0x03, 0xE7, 0xBE, 0x6A, 0xB3, 0x00, 0x06 }, { 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08 }, { 0xF5, 0xDB, 0x1A, 0xC4, 0x5E, 0x5E, 0xF9, 0xF9 } } }; IDEA_context c; byte buffer[8]; int i; for(i=0; i < DIM(test_vectors); i++ ) { do_setkey( &c, test_vectors[i].key, 16 ); encrypt_block( &c, buffer, test_vectors[i].plain ); if( memcmp( buffer, test_vectors[i].cipher, 8 ) ) return "IDEA test encryption failed."; decrypt_block( &c, buffer, test_vectors[i].cipher ); if( memcmp( buffer, test_vectors[i].plain, 8 ) ) return "IDEA test decryption failed."; } return NULL; } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. */ const char * idea_get_info( int algo, size_t *keylen, size_t *blocksize, size_t *contextsize, int (**r_setkey)( void *c, const byte *key, unsigned keylen ), void (**r_encrypt)( void *c, byte *outbuf, const byte *inbuf ), void (**r_decrypt)( void *c, byte *outbuf, const byte *inbuf ) ) { *keylen = 128; *blocksize = IDEA_BLOCKSIZE; *contextsize = sizeof(IDEA_context); *r_setkey = idea_setkey; *r_encrypt = idea_encrypt; *r_decrypt = idea_decrypt; if( algo == CIPHER_ALGO_IDEA ) return "IDEA"; return NULL; } gnupg-1.4.20/cipher/rsa.c0000644000175000017500000003300112635262326012046 00000000000000/* rsa.c - RSA function * Copyright (C) 1997, 1998, 1999, 2013 by Werner Koch (dd9jn) * Copyright (C) 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ /* This code uses an algorithm protected by U.S. Patent #4,405,829 which expires on September 20, 2000. The patent holder placed that patent into the public domain on Sep 6th, 2000. */ #include #include #include #include #include "util.h" #include "mpi.h" #include "cipher.h" #include "rsa.h" /* Blinding is used to mitigate side-channel attacks. You may undef this to speed up the operation in case the system is secured against physical and network mounted side-channel attacks. */ #define USE_BLINDING 1 typedef struct { MPI n; /* modulus */ MPI e; /* exponent */ } RSA_public_key; typedef struct { MPI n; /* public modulus */ MPI e; /* public exponent */ MPI d; /* exponent */ MPI p; /* prime p. */ MPI q; /* prime q. */ MPI u; /* inverse of p mod q. */ } RSA_secret_key; static void test_keys( RSA_secret_key *sk, unsigned nbits ); static void generate( RSA_secret_key *sk, unsigned nbits ); static int check_secret_key( RSA_secret_key *sk ); static void public(MPI output, MPI input, RSA_public_key *skey ); static void secret(MPI output, MPI input, RSA_secret_key *skey ); static void test_keys( RSA_secret_key *sk, unsigned nbits ) { RSA_public_key pk; MPI test = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); MPI out1 = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); MPI out2 = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); pk.n = sk->n; pk.e = sk->e; { char *p = get_random_bits( nbits, 0, 0 ); mpi_set_buffer( test, p, (nbits+7)/8, 0 ); xfree(p); } public( out1, test, &pk ); secret( out2, out1, sk ); if( mpi_cmp( test, out2 ) ) log_fatal("RSA operation: public, secret failed\n"); secret( out1, test, sk ); public( out2, out1, &pk ); if( mpi_cmp( test, out2 ) ) log_fatal("RSA operation: secret, public failed\n"); mpi_free( test ); mpi_free( out1 ); mpi_free( out2 ); } /**************** * Generate a key pair with a key of size NBITS * Returns: 2 structures filled with all needed values */ static void generate( RSA_secret_key *sk, unsigned nbits ) { MPI p, q; /* the two primes */ MPI d; /* the private key */ MPI u; MPI t1, t2; MPI n; /* the public key */ MPI e; /* the exponent */ MPI phi; /* helper: (p-1)(q-1) */ MPI g; MPI f; /* make sure that nbits is even so that we generate p, q of equal size */ if ( (nbits&1) ) nbits++; n = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); p = q = NULL; do { /* select two (very secret) primes */ if (p) mpi_free (p); if (q) mpi_free (q); p = generate_secret_prime( nbits / 2 ); q = generate_secret_prime( nbits / 2 ); if( mpi_cmp( p, q ) > 0 ) /* p shall be smaller than q (for calc of u)*/ mpi_swap(p,q); /* calculate the modulus */ mpi_mul( n, p, q ); } while ( mpi_get_nbits(n) != nbits ); /* calculate Euler totient: phi = (p-1)(q-1) */ t1 = mpi_alloc_secure( mpi_get_nlimbs(p) ); t2 = mpi_alloc_secure( mpi_get_nlimbs(p) ); phi = mpi_alloc_secure ( mpi_nlimb_hint_from_nbits (nbits) ); g = mpi_alloc_secure ( mpi_nlimb_hint_from_nbits (nbits) ); f = mpi_alloc_secure ( mpi_nlimb_hint_from_nbits (nbits) ); mpi_sub_ui( t1, p, 1 ); mpi_sub_ui( t2, q, 1 ); mpi_mul( phi, t1, t2 ); mpi_gcd(g, t1, t2); mpi_fdiv_q(f, phi, g); /* Find an public exponent. Benchmarking the RSA verify function with a 1024 bit key yields (2001-11-08): e=17 0.54 ms e=41 0.75 ms e=257 0.95 ms e=65537 1.80 ms This code used 41 until 2006-06-28 when it was changed to use 65537 as the new best practice. See FIPS-186-3. */ e = mpi_alloc ( mpi_nlimb_hint_from_nbits (32) ); mpi_set_ui( e, 65537); while( !mpi_gcd(t1, e, phi) ) /* (while gcd is not 1) */ mpi_add_ui( e, e, 2); /* calculate the secret key d = e^1 mod phi */ d = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); mpi_invm(d, e, f ); /* calculate the inverse of p and q (used for chinese remainder theorem)*/ u = mpi_alloc ( mpi_nlimb_hint_from_nbits (nbits) ); mpi_invm(u, p, q ); if( DBG_CIPHER ) { log_mpidump(" p= ", p ); log_mpidump(" q= ", q ); log_mpidump("phi= ", phi ); log_mpidump(" g= ", g ); log_mpidump(" f= ", f ); log_mpidump(" n= ", n ); log_mpidump(" e= ", e ); log_mpidump(" d= ", d ); log_mpidump(" u= ", u ); } mpi_free(t1); mpi_free(t2); mpi_free(phi); mpi_free(f); mpi_free(g); sk->n = n; sk->e = e; sk->p = p; sk->q = q; sk->d = d; sk->u = u; /* now we can test our keys (this should never fail!) */ test_keys( sk, nbits - 64 ); } /**************** * Test wether the secret key is valid. * Returns: true if this is a valid key. */ static int check_secret_key( RSA_secret_key *sk ) { int rc; MPI temp = mpi_alloc( mpi_get_nlimbs(sk->p)*2 ); mpi_mul(temp, sk->p, sk->q ); rc = mpi_cmp( temp, sk->n ); mpi_free(temp); return !rc; } /**************** * Public key operation. Encrypt INPUT with PKEY and put result into OUTPUT. * * c = m^e mod n * * Where c is OUTPUT, m is INPUT and e,n are elements of PKEY. */ static void public(MPI output, MPI input, RSA_public_key *pkey ) { if( output == input ) { /* powm doesn't like output and input the same */ MPI x = mpi_alloc( mpi_get_nlimbs(input)*2 ); mpi_powm( x, input, pkey->e, pkey->n ); mpi_set(output, x); mpi_free(x); } else mpi_powm( output, input, pkey->e, pkey->n ); } #if 0 static void stronger_key_check ( RSA_secret_key *skey ) { MPI t = mpi_alloc_secure ( 0 ); MPI t1 = mpi_alloc_secure ( 0 ); MPI t2 = mpi_alloc_secure ( 0 ); MPI phi = mpi_alloc_secure ( 0 ); /* check that n == p * q */ mpi_mul( t, skey->p, skey->q); if (mpi_cmp( t, skey->n) ) log_info ( "RSA Oops: n != p * q\n" ); /* check that p is less than q */ if( mpi_cmp( skey->p, skey->q ) > 0 ) log_info ("RSA Oops: p >= q\n"); /* check that e divides neither p-1 nor q-1 */ mpi_sub_ui(t, skey->p, 1 ); mpi_fdiv_r(t, t, skey->e ); if ( !mpi_cmp_ui( t, 0) ) log_info ( "RSA Oops: e divides p-1\n" ); mpi_sub_ui(t, skey->q, 1 ); mpi_fdiv_r(t, t, skey->e ); if ( !mpi_cmp_ui( t, 0) ) log_info ( "RSA Oops: e divides q-1\n" ); /* check that d is correct */ mpi_sub_ui( t1, skey->p, 1 ); mpi_sub_ui( t2, skey->q, 1 ); mpi_mul( phi, t1, t2 ); mpi_gcd(t, t1, t2); mpi_fdiv_q(t, phi, t); mpi_invm(t, skey->e, t ); if ( mpi_cmp(t, skey->d ) ) log_info ( "RSA Oops: d is wrong\n"); /* check for crrectness of u */ mpi_invm(t, skey->p, skey->q ); if ( mpi_cmp(t, skey->u ) ) log_info ( "RSA Oops: u is wrong\n"); log_info ( "RSA secret key check finished\n"); mpi_free (t); mpi_free (t1); mpi_free (t2); mpi_free (phi); } #endif /**************** * Secret key operation. Encrypt INPUT with SKEY and put result into OUTPUT. * * m = c^d mod n * * Or faster: * * m1 = c ^ (d mod (p-1)) mod p * m2 = c ^ (d mod (q-1)) mod q * h = u * (m2 - m1) mod q * m = m1 + h * p * * Where m is OUTPUT, c is INPUT and d,n,p,q,u are elements of SKEY. */ static void secret(MPI output, MPI input, RSA_secret_key *skey ) { #if 0 mpi_powm( output, input, skey->d, skey->n ); #else int nlimbs = mpi_get_nlimbs (skey->n)+1; MPI m1 = mpi_alloc_secure (nlimbs); MPI m2 = mpi_alloc_secure (nlimbs); MPI h = mpi_alloc_secure (nlimbs); # ifdef USE_BLINDING MPI bdata= mpi_alloc_secure (nlimbs); MPI r = mpi_alloc_secure (nlimbs); # endif /* USE_BLINDING */ /* Remove superfluous leading zeroes from INPUT. */ mpi_normalize (input); # ifdef USE_BLINDING /* Blind: bdata = (data * r^e) mod n */ randomize_mpi (r, mpi_get_nbits (skey->n), 0); mpi_fdiv_r (r, r, skey->n); mpi_powm (bdata, r, skey->e, skey->n); mpi_mulm (bdata, bdata, input, skey->n); input = bdata; # endif /* USE_BLINDING */ /* RSA secret operation: */ /* m1 = c ^ (d mod (p-1)) mod p */ mpi_sub_ui( h, skey->p, 1 ); mpi_fdiv_r( h, skey->d, h ); mpi_powm( m1, input, h, skey->p ); /* m2 = c ^ (d mod (q-1)) mod q */ mpi_sub_ui( h, skey->q, 1 ); mpi_fdiv_r( h, skey->d, h ); mpi_powm( m2, input, h, skey->q ); /* h = u * ( m2 - m1 ) mod q */ mpi_sub( h, m2, m1 ); if ( mpi_is_neg( h ) ) mpi_add ( h, h, skey->q ); mpi_mulm( h, skey->u, h, skey->q ); /* m = m2 + h * p */ mpi_mul ( h, h, skey->p ); mpi_add ( output, m1, h ); # ifdef USE_BLINDING mpi_free (bdata); /* Unblind: output = (output * r^(-1)) mod n */ mpi_invm (r, r, skey->n); mpi_mulm (output, output, r, skey->n); mpi_free (r); # endif /* USE_BLINDING */ mpi_free ( h ); mpi_free ( m1 ); mpi_free ( m2 ); #endif } /********************************************* ************** interface ****************** *********************************************/ int rsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ) { RSA_secret_key sk; if( !is_RSA(algo) ) return G10ERR_PUBKEY_ALGO; generate( &sk, nbits ); skey[0] = sk.n; skey[1] = sk.e; skey[2] = sk.d; skey[3] = sk.p; skey[4] = sk.q; skey[5] = sk.u; /* make an empty list of factors */ if (retfactors) *retfactors = xmalloc_clear( 1 * sizeof **retfactors ); return 0; } int rsa_check_secret_key( int algo, MPI *skey ) { RSA_secret_key sk; if( !is_RSA(algo) ) return G10ERR_PUBKEY_ALGO; sk.n = skey[0]; sk.e = skey[1]; sk.d = skey[2]; sk.p = skey[3]; sk.q = skey[4]; sk.u = skey[5]; if( !check_secret_key( &sk ) ) return G10ERR_BAD_SECKEY; return 0; } int rsa_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ) { RSA_public_key pk; if( algo != 1 && algo != 2 ) return G10ERR_PUBKEY_ALGO; pk.n = pkey[0]; pk.e = pkey[1]; resarr[0] = mpi_alloc( mpi_get_nlimbs( pk.n ) ); public( resarr[0], data, &pk ); return 0; } int rsa_decrypt( int algo, MPI *result, MPI *data, MPI *skey ) { RSA_secret_key sk; MPI input; if( algo != 1 && algo != 2 ) return G10ERR_PUBKEY_ALGO; sk.n = skey[0]; sk.e = skey[1]; sk.d = skey[2]; sk.p = skey[3]; sk.q = skey[4]; sk.u = skey[5]; /* Better make sure that there are no superfluous leading zeroes in the input and it has not been padded using multiples of N. This mitigates side-channel attacks (CVE-2013-4576). */ input = mpi_alloc (0); mpi_normalize (data[0]); mpi_fdiv_r (input, data[0], sk.n); *result = mpi_alloc_secure (mpi_get_nlimbs (sk.n)); secret (*result, input, &sk); mpi_free (input); return 0; } int rsa_sign( int algo, MPI *resarr, MPI data, MPI *skey ) { RSA_secret_key sk; RSA_public_key pk; MPI cres; int rc; if( algo != 1 && algo != 3 ) return G10ERR_PUBKEY_ALGO; sk.n = skey[0]; sk.e = skey[1]; sk.d = skey[2]; sk.p = skey[3]; sk.q = skey[4]; sk.u = skey[5]; resarr[0] = mpi_alloc( mpi_get_nlimbs( sk.n ) ); secret( resarr[0], data, &sk ); /* Check for a failure in secret(). */ cres = mpi_alloc ( mpi_nlimb_hint_from_nbits (160) ); pk.n = sk.n; pk.e = sk.e; public (cres, resarr[0], &pk); rc = mpi_cmp (cres, data)? G10ERR_BAD_SIGN : 0; mpi_free (cres); return rc; } int rsa_verify( int algo, MPI hash, MPI *data, MPI *pkey ) { RSA_public_key pk; MPI result; int rc; if( algo != 1 && algo != 3 ) return G10ERR_PUBKEY_ALGO; pk.n = pkey[0]; pk.e = pkey[1]; result = mpi_alloc ( mpi_nlimb_hint_from_nbits (160) ); public( result, data[0], &pk ); rc = mpi_cmp( result, hash )? G10ERR_BAD_SIGN:0; mpi_free(result); return rc; } unsigned int rsa_get_nbits( int algo, MPI *pkey ) { if( !is_RSA(algo) ) return 0; return mpi_get_nbits( pkey[0] ); } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. * Usage: Bit 0 set : allows signing * 1 set : allows encryption */ const char * rsa_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig, int *r_usage ) { *npkey = 2; *nskey = 6; *nenc = 1; *nsig = 1; switch( algo ) { case 1: *r_usage = PUBKEY_USAGE_SIG | PUBKEY_USAGE_ENC; return "RSA"; case 2: *r_usage = PUBKEY_USAGE_ENC; return "RSA-E"; case 3: *r_usage = PUBKEY_USAGE_SIG; return "RSA-S"; default:*r_usage = 0; return NULL; } } gnupg-1.4.20/cipher/rndegd.c0000644000175000017500000001255112635262326012533 00000000000000/* rndegd.c - interface to the EGD * Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . */ #include #include #include #include #include #include #include #include #include #include #include #include #include "types.h" #include "util.h" #include "ttyio.h" #include "algorithms.h" #include "cipher.h" #include "i18n.h" #ifndef offsetof #define offsetof(type, member) ((size_t) &((type *)0)->member) #endif static int egd_socket = -1; static int do_write( int fd, void *buf, size_t nbytes ) { size_t nleft = nbytes; int nwritten; while( nleft > 0 ) { nwritten = write( fd, buf, nleft); if( nwritten < 0 ) { if( errno == EINTR ) continue; return -1; } nleft -= nwritten; buf = (char*)buf + nwritten; } return 0; } static int do_read( int fd, void *buf, size_t nbytes ) { int n, nread = 0; while (nbytes) { do { n = read(fd, (char*)buf + nread, nbytes ); } while( n == -1 && errno == EINTR ); if( n == -1 ) return nread? nread:-1; else if( n == 0 ) { /* EGD probably died. */ errno = ECONNRESET; return -1; } nread += n; nbytes -= n; } return nread; } /* Connect to the EGD and return the file descriptor. Return -1 on error. With NOFAIL set to true, silently fail and return the error, otherwise print an error message and die. */ int rndegd_connect_socket (int nofail) { int fd; const char *bname = NULL; char *name; struct sockaddr_un addr; int addr_len; if (egd_socket != -1) { close (egd_socket); egd_socket = -1; } #ifdef EGD_SOCKET_NAME bname = EGD_SOCKET_NAME; #endif if ( !bname || !*bname ) bname = "=entropy"; if ( *bname == '=' && bname[1] ) name = make_filename( g10_opt_homedir, bname+1 , NULL ); else name = make_filename( bname , NULL ); if ( strlen(name)+1 >= sizeof addr.sun_path ) g10_log_fatal ("EGD socketname is too long\n"); memset( &addr, 0, sizeof addr ); addr.sun_family = AF_UNIX; strcpy( addr.sun_path, name ); addr_len = (offsetof( struct sockaddr_un, sun_path ) + strlen( addr.sun_path )); fd = socket(AF_UNIX, SOCK_STREAM, 0); if (fd == -1 && !nofail) g10_log_fatal("can't create unix domain socket: %s\n", strerror(errno) ); else if (connect (fd, (struct sockaddr*)&addr, addr_len) == -1) { if (!nofail) g10_log_fatal("can't connect to `%s': %s\n", name, strerror(errno) ); close (fd); fd = -1; } xfree(name); if (fd != -1) egd_socket = fd; return fd; } /**************** * Note: we always use the highest level. * TO boost the performance we may want to add some * additional code for level 1 * * Using a level of 0 should never block and better add nothing * to the pool. So this is just a dummy for EGD. */ int rndegd_gather_random( void (*add)(const void*, size_t, int), int requester, size_t length, int level ) { int fd = egd_socket; int n; byte buffer[256+2]; int nbytes; int do_restart = 0; if( !length ) return 0; if( !level ) return 0; restart: if (fd == -1 || do_restart) fd = rndegd_connect_socket (0); do_restart = 0; nbytes = length < 255? length : 255; /* first time we do it with a non blocking request */ buffer[0] = 1; /* non blocking */ buffer[1] = nbytes; if( do_write( fd, buffer, 2 ) == -1 ) g10_log_fatal("can't write to the EGD: %s\n", strerror(errno) ); n = do_read( fd, buffer, 1 ); if( n == -1 ) { g10_log_error("read error on EGD: %s\n", strerror(errno)); do_restart = 1; goto restart; } n = buffer[0]; if( n ) { n = do_read( fd, buffer, n ); if( n == -1 ) { g10_log_error("read error on EGD: %s\n", strerror(errno)); do_restart = 1; goto restart; } (*add)( buffer, n, requester ); length -= n; } if( length ) { tty_printf( _("Please wait, entropy is being gathered. Do some work if it would\n" "keep you from getting bored, because it will improve the quality\n" "of the entropy.\n") ); } while( length ) { nbytes = length < 255? length : 255; buffer[0] = 2; /* blocking */ buffer[1] = nbytes; if( do_write( fd, buffer, 2 ) == -1 ) g10_log_fatal("can't write to the EGD: %s\n", strerror(errno) ); n = do_read( fd, buffer, nbytes ); if( n == -1 ) { g10_log_error("read error on EGD: %s\n", strerror(errno)); do_restart = 1; goto restart; } (*add)( buffer, n, requester ); length -= n; } wipememory(buffer, sizeof(buffer) ); return 0; /* success */ } gnupg-1.4.20/cipher/rndw32.c0000644000175000017500000006146212635262326012414 00000000000000/* rndw32.c - W32 entropy gatherer * Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc. * Copyright Peter Gutmann, Matt Thomlinson and Blake Coverett 1996-1999 * * 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 3 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, see . * ************************************************************************* * The code here is based on code from Cryptlib 3.0 beta by Peter Gutmann. * Source file misc/rndwin32.c "Win32 Randomness-Gathering Code" with this * copyright notice: * * This module is part of the cryptlib continuously seeded pseudorandom * number generator. For usage conditions, see lib_rand.c * * [Here is the notice from lib_rand.c, which is now called dev_sys.c] * * This module and the misc/rnd*.c modules represent the cryptlib * continuously seeded pseudorandom number generator (CSPRNG) as described in * my 1998 Usenix Security Symposium paper "The generation of random numbers * for cryptographic purposes". * * The CSPRNG code is copyright Peter Gutmann (and various others) 1996, * 1997, 1998, 1999, all rights reserved. Redistribution of the CSPRNG * modules and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice * and this permission notice in its entirety. * * 2. Redistributions in binary form must reproduce the copyright notice in * the documentation and/or other materials provided with the distribution. * * 3. A copy of any bugfixes or enhancements made must be provided to the * author, to allow them to be added to the * baseline version of the code. * * ALTERNATIVELY, the code may be distributed under the terms of the GNU * General Public License, version 2 or any later version published by the * Free Software Foundation, in which case the provisions of the GNU GPL are * required INSTEAD OF the above restrictions. * * Although not required under the terms of the GPL, it would still be nice if * you could make any changes available to the author to allow a consistent * code base to be maintained ************************************************************************* */ #include #include #include #include #include #include #include #include "types.h" #include "util.h" #include "algorithms.h" #include "i18n.h" static int debug_me; /* * Definitions which are missing from the current GNU Windows32Api */ #ifndef TH32CS_SNAPHEAPLIST #define TH32CS_SNAPHEAPLIST 1 #define TH32CS_SNAPPROCESS 2 #define TH32CS_SNAPTHREAD 4 #define TH32CS_SNAPMODULE 8 #define TH32CS_SNAPALL (1|2|4|8) #define TH32CS_INHERIT 0x80000000 #endif /*TH32CS_SNAPHEAPLIST*/ #ifndef IOCTL_DISK_PERFORMANCE #define IOCTL_DISK_PERFORMANCE 0x00070020 #endif #ifndef VER_PLATFORM_WIN32_WINDOWS #define VER_PLATFORM_WIN32_WINDOWS 1 #endif /* This used to be (6*8+5*4+8*2), but Peter Gutmann figured a larger value in a newer release. So we use a far larger value. */ #define SIZEOF_DISK_PERFORMANCE_STRUCT 256 typedef struct { DWORD dwSize; DWORD th32ProcessID; DWORD th32HeapID; DWORD dwFlags; } HEAPLIST32; typedef struct { DWORD dwSize; HANDLE hHandle; DWORD dwAddress; DWORD dwBlockSize; DWORD dwFlags; DWORD dwLockCount; DWORD dwResvd; DWORD th32ProcessID; DWORD th32HeapID; } HEAPENTRY32; typedef struct { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; DWORD th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; char szExeFile[260]; } PROCESSENTRY32; typedef struct { DWORD dwSize; DWORD cntUsage; DWORD th32ThreadID; DWORD th32OwnerProcessID; LONG tpBasePri; LONG tpDeltaPri; DWORD dwFlags; } THREADENTRY32; typedef struct { DWORD dwSize; DWORD th32ModuleID; DWORD th32ProcessID; DWORD GlblcntUsage; DWORD ProccntUsage; BYTE *modBaseAddr; DWORD modBaseSize; HMODULE hModule; char szModule[256]; char szExePath[260]; } MODULEENTRY32; /* Type definitions for function pointers to call Toolhelp32 functions * used with the windows95 gatherer */ typedef BOOL (WINAPI * MODULEWALK) (HANDLE hSnapshot, MODULEENTRY32 *lpme); typedef BOOL (WINAPI * THREADWALK) (HANDLE hSnapshot, THREADENTRY32 *lpte); typedef BOOL (WINAPI * PROCESSWALK) (HANDLE hSnapshot, PROCESSENTRY32 *lppe); typedef BOOL (WINAPI * HEAPLISTWALK) (HANDLE hSnapshot, HEAPLIST32 *lphl); typedef BOOL (WINAPI * HEAPFIRST) (HEAPENTRY32 *lphe, DWORD th32ProcessID, DWORD th32HeapID); typedef BOOL (WINAPI * HEAPNEXT) (HEAPENTRY32 *lphe); typedef HANDLE (WINAPI * CREATESNAPSHOT) (DWORD dwFlags, DWORD th32ProcessID); /* Type definitions for function pointers to call NetAPI32 functions */ typedef DWORD (WINAPI * NETSTATISTICSGET) (LPWSTR szServer, LPWSTR szService, DWORD dwLevel, DWORD dwOptions, LPBYTE * lpBuffer); typedef DWORD (WINAPI * NETAPIBUFFERSIZE) (LPVOID lpBuffer, LPDWORD cbBuffer); typedef DWORD (WINAPI * NETAPIBUFFERFREE) (LPVOID lpBuffer); /* When we query the performance counters, we allocate an initial buffer and * then reallocate it as required until RegQueryValueEx() stops returning * ERROR_MORE_DATA. The following values define the initial buffer size and * step size by which the buffer is increased */ #define PERFORMANCE_BUFFER_SIZE 65536 /* Start at 64K */ #define PERFORMANCE_BUFFER_STEP 16384 /* Step by 16K */ static void slow_gatherer_windows95( void (*add)(const void*, size_t, int), int requester ) { static CREATESNAPSHOT pCreateToolhelp32Snapshot = NULL; static MODULEWALK pModule32First = NULL; static MODULEWALK pModule32Next = NULL; static PROCESSWALK pProcess32First = NULL; static PROCESSWALK pProcess32Next = NULL; static THREADWALK pThread32First = NULL; static THREADWALK pThread32Next = NULL; static HEAPLISTWALK pHeap32ListFirst = NULL; static HEAPLISTWALK pHeap32ListNext = NULL; static HEAPFIRST pHeap32First = NULL; static HEAPNEXT pHeap32Next = NULL; HANDLE hSnapshot; /* initialize the Toolhelp32 function pointers */ if ( !pCreateToolhelp32Snapshot ) { HANDLE hKernel; if ( debug_me ) log_debug ("rndw32#slow_gatherer_95: init toolkit\n" ); /* Obtain the module handle of the kernel to retrieve the addresses * of the Toolhelp32 functions */ if ( ( !(hKernel = GetModuleHandle ("KERNEL32.DLL"))) ) { g10_log_fatal ( "rndw32: can't get module handle\n" ); } /* Now get pointers to the functions */ pCreateToolhelp32Snapshot = (CREATESNAPSHOT) GetProcAddress (hKernel, "CreateToolhelp32Snapshot"); pModule32First = (MODULEWALK) GetProcAddress (hKernel, "Module32First"); pModule32Next = (MODULEWALK) GetProcAddress (hKernel, "Module32Next"); pProcess32First = (PROCESSWALK) GetProcAddress (hKernel, "Process32First"); pProcess32Next = (PROCESSWALK) GetProcAddress (hKernel, "Process32Next"); pThread32First = (THREADWALK) GetProcAddress (hKernel, "Thread32First"); pThread32Next = (THREADWALK) GetProcAddress (hKernel, "Thread32Next"); pHeap32ListFirst = (HEAPLISTWALK) GetProcAddress (hKernel, "Heap32ListFirst"); pHeap32ListNext = (HEAPLISTWALK) GetProcAddress (hKernel, "Heap32ListNext"); pHeap32First = (HEAPFIRST) GetProcAddress (hKernel, "Heap32First"); pHeap32Next = (HEAPNEXT) GetProcAddress (hKernel, "Heap32Next"); if ( !pCreateToolhelp32Snapshot || !pModule32First || !pModule32Next || !pProcess32First || !pProcess32Next || !pThread32First || !pThread32Next || !pHeap32ListFirst || !pHeap32ListNext || !pHeap32First || !pHeap32Next ) { g10_log_fatal ( "rndw32: failed to get a toolhep function\n" ); } } /* Take a snapshot of everything we can get to which is currently * in the system */ if ( !(hSnapshot = pCreateToolhelp32Snapshot (TH32CS_SNAPALL, 0)) ) { g10_log_fatal ( "rndw32: failed to take a toolhelp snapshot\n" ); } /* Walk through the local heap */ { HEAPLIST32 hl32; hl32.dwSize = sizeof (HEAPLIST32); if (pHeap32ListFirst (hSnapshot, &hl32)) { if ( debug_me ) log_debug ("rndw32#slow_gatherer_95: walk heap\n" ); do { HEAPENTRY32 he32; /* First add the information from the basic Heaplist32 struct */ (*add) ( &hl32, sizeof (hl32), requester ); /* Now walk through the heap blocks getting information * on each of them */ he32.dwSize = sizeof (HEAPENTRY32); if (pHeap32First (&he32, hl32.th32ProcessID, hl32.th32HeapID)){ do { (*add) ( &he32, sizeof (he32), requester ); } while (pHeap32Next (&he32)); } } while (pHeap32ListNext (hSnapshot, &hl32)); } } /* Walk through all processes */ { PROCESSENTRY32 pe32; pe32.dwSize = sizeof (PROCESSENTRY32); if (pProcess32First (hSnapshot, &pe32)) { if ( debug_me ) log_debug ("rndw32#slow_gatherer_95: walk processes\n" ); do { (*add) ( &pe32, sizeof (pe32), requester ); } while (pProcess32Next (hSnapshot, &pe32)); } } /* Walk through all threads */ { THREADENTRY32 te32; te32.dwSize = sizeof (THREADENTRY32); if (pThread32First (hSnapshot, &te32)) { if ( debug_me ) log_debug ("rndw32#slow_gatherer_95: walk threads\n" ); do { (*add) ( &te32, sizeof (te32), requester ); } while (pThread32Next (hSnapshot, &te32)); } } /* Walk through all modules associated with the process */ { MODULEENTRY32 me32; me32.dwSize = sizeof (MODULEENTRY32); if (pModule32First (hSnapshot, &me32)) { if ( debug_me ) log_debug ("rndw32#slow_gatherer_95: walk modules\n" ); do { (*add) ( &me32, sizeof (me32), requester ); } while (pModule32Next (hSnapshot, &me32)); } } CloseHandle (hSnapshot); } static void slow_gatherer_windowsNT( void (*add)(const void*, size_t, int), int requester ) { static int is_initialized = 0; static NETSTATISTICSGET pNetStatisticsGet = NULL; static NETAPIBUFFERSIZE pNetApiBufferSize = NULL; static NETAPIBUFFERFREE pNetApiBufferFree = NULL; static int is_workstation = 1; static int cbPerfData = PERFORMANCE_BUFFER_SIZE; PERF_DATA_BLOCK *pPerfData; HANDLE hDevice, hNetAPI32 = NULL; DWORD dwSize, status; int nDrive; if ( !is_initialized ) { HKEY hKey; if ( debug_me ) log_debug ("rndw32#slow_gatherer_nt: init toolkit\n" ); /* Find out whether this is an NT server or workstation if necessary */ if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\ProductOptions", 0, KEY_READ, &hKey) == ERROR_SUCCESS) { BYTE szValue[32]; dwSize = sizeof (szValue); if ( debug_me ) log_debug ("rndw32#slow_gatherer_nt: check product options\n" ); status = RegQueryValueEx (hKey, "ProductType", 0, NULL, szValue, &dwSize); if (status == ERROR_SUCCESS && ascii_strcasecmp (szValue, "WinNT")) { /* Note: There are (at least) three cases for ProductType: * WinNT = NT Workstation, ServerNT = NT Server, LanmanNT = * NT Server acting as a Domain Controller */ is_workstation = 0; if ( debug_me ) log_debug ("rndw32: this is a NT server\n"); } RegCloseKey (hKey); } /* Initialize the NetAPI32 function pointers if necessary */ if ( (hNetAPI32 = LoadLibrary ("NETAPI32.DLL")) ) { if ( debug_me ) log_debug ("rndw32#slow_gatherer_nt: netapi32 loaded\n" ); pNetStatisticsGet = (NETSTATISTICSGET) GetProcAddress (hNetAPI32, "NetStatisticsGet"); pNetApiBufferSize = (NETAPIBUFFERSIZE) GetProcAddress (hNetAPI32, "NetApiBufferSize"); pNetApiBufferFree = (NETAPIBUFFERFREE) GetProcAddress (hNetAPI32, "NetApiBufferFree"); if ( !pNetStatisticsGet || !pNetApiBufferSize || !pNetApiBufferFree ) { FreeLibrary (hNetAPI32); hNetAPI32 = NULL; g10_log_debug ("rndw32: No NETAPI found\n" ); } } is_initialized = 1; } /* Get network statistics. Note: Both NT Workstation and NT Server by * default will be running both the workstation and server services. The * heuristic below is probably useful though on the assumption that the * majority of the network traffic will be via the appropriate service. * In any case the network statistics return almost no randomness */ { LPBYTE lpBuffer; if (hNetAPI32 && !pNetStatisticsGet (NULL, is_workstation ? L"LanmanWorkstation" : L"LanmanServer", 0, 0, &lpBuffer) ) { if ( debug_me ) log_debug ("rndw32#slow_gatherer_nt: get netstats\n" ); pNetApiBufferSize (lpBuffer, &dwSize); (*add) ( lpBuffer, dwSize,requester ); pNetApiBufferFree (lpBuffer); } } /* Get disk I/O statistics for all the hard drives */ for (nDrive = 0;; nDrive++) { char diskPerformance[SIZEOF_DISK_PERFORMANCE_STRUCT]; char szDevice[50]; /* Check whether we can access this device */ sprintf (szDevice, "\\\\.\\PhysicalDrive%d", nDrive); hDevice = CreateFile (szDevice, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (hDevice == INVALID_HANDLE_VALUE) break; /* Note: This only works if you have turned on the disk performance * counters with 'diskperf -y'. These counters are off by default */ if (DeviceIoControl (hDevice, IOCTL_DISK_PERFORMANCE, NULL, 0, diskPerformance, SIZEOF_DISK_PERFORMANCE_STRUCT, &dwSize, NULL)) { if ( debug_me ) log_debug ("rndw32#slow_gatherer_nt: iostats drive %d\n", nDrive ); (*add) (diskPerformance, dwSize, requester ); } else { log_info ("NOTE: you should run 'diskperf -y' " "to enable the disk statistics\n"); } CloseHandle (hDevice); } #if 0 /* we don't need this in GnuPG */ /* Wait for any async keyset driver binding to complete. You may be * wondering what this call is doing here... the reason it's necessary is * because RegQueryValueEx() will hang indefinitely if the async driver * bind is in progress. The problem occurs in the dynamic loading and * linking of driver DLL's, which work as follows: * * hDriver = LoadLibrary( DRIVERNAME ); * pFunction1 = ( TYPE_FUNC1 ) GetProcAddress( hDriver, NAME_FUNC1 ); * pFunction2 = ( TYPE_FUNC1 ) GetProcAddress( hDriver, NAME_FUNC2 ); * * If RegQueryValueEx() is called while the GetProcAddress()'s are in * progress, it will hang indefinitely. This is probably due to some * synchronisation problem in the NT kernel where the GetProcAddress() * calls affect something like a module reference count or function * reference count while RegQueryValueEx() is trying to take a snapshot * of the statistics, which include the reference counts. Because of * this, we have to wait until any async driver bind has completed * before we can call RegQueryValueEx() */ waitSemaphore (SEMAPHORE_DRIVERBIND); #endif /* Get information from the system performance counters. This can take * a few seconds to do. In some environments the call to * RegQueryValueEx() can produce an access violation at some random time * in the future, adding a short delay after the following code block * makes the problem go away. This problem is extremely difficult to * reproduce, I haven't been able to get it to occur despite running it * on a number of machines. The best explanation for the problem is that * on the machine where it did occur, it was caused by an external driver * or other program which adds its own values under the * HKEY_PERFORMANCE_DATA key. The NT kernel calls the required external * modules to map in the data, if there's a synchronisation problem the * external module would write its data at an inappropriate moment, * causing the access violation. A low-level memory checker indicated * that ExpandEnvironmentStrings() in KERNEL32.DLL, called an * interminable number of calls down inside RegQueryValueEx(), was * overwriting memory (it wrote twice the allocated size of a buffer to a * buffer allocated by the NT kernel). This may be what's causing the * problem, but since it's in the kernel there isn't much which can be * done. * * In addition to these problems the code in RegQueryValueEx() which * estimates the amount of memory required to return the performance * counter information isn't very accurate, since it always returns a * worst-case estimate which is usually nowhere near the actual amount * required. For example it may report that 128K of memory is required, * but only return 64K of data */ if (getenv("GNUPG_RNDW32_NOPERF")) { static int shown; if (!shown) { shown = 1; g10_log_info ("note: get performance data has been disabled\n"); } } else { pPerfData = xmalloc (cbPerfData); for (;;) { dwSize = cbPerfData; if ( debug_me ) log_debug ("rndw32#slow_gatherer_nt: get perf data\n" ); status = RegQueryValueEx (HKEY_PERFORMANCE_DATA, "Global", NULL, NULL, (LPBYTE) pPerfData, &dwSize); if (status == ERROR_SUCCESS) { if (!memcmp (pPerfData->Signature, L"PERF", 8)) { (*add) ( pPerfData, dwSize, requester ); } else g10_log_debug ( "rndw32: no PERF signature\n"); break; } else if (status == ERROR_MORE_DATA) { cbPerfData += PERFORMANCE_BUFFER_STEP; pPerfData = xrealloc (pPerfData, cbPerfData); } else { g10_log_debug ( "rndw32: get performance data problem\n"); break; } } xfree (pPerfData); } /* Although this isn't documented in the Win32 API docs, it's necessary to explicitly close the HKEY_PERFORMANCE_DATA key after use (it's implicitly opened on the first call to RegQueryValueEx()). If this isn't done then any system components which provide performance data can't be removed or changed while the handle remains active */ RegCloseKey (HKEY_PERFORMANCE_DATA); } int rndw32_gather_random (void (*add)(const void*, size_t, int), int requester, size_t length, int level ) { static int is_initialized; static int is_windowsNT, has_toolhelp; if( !level ) return 0; /* We don't differentiate between level 1 and 2 here because * there is no internal entropy pool as a scarce resource. It may * all work slower, but because our entropy source will never * block but deliver some not easy to measure entropy, we assume level 2 */ if ( !is_initialized ) { OSVERSIONINFO osvi = { sizeof( osvi ) }; DWORD platform; GetVersionEx( &osvi ); platform = osvi.dwPlatformId; is_windowsNT = platform == VER_PLATFORM_WIN32_NT; has_toolhelp = (platform == VER_PLATFORM_WIN32_WINDOWS || (is_windowsNT && osvi.dwMajorVersion >= 5)); if ( platform == VER_PLATFORM_WIN32s ) { g10_log_fatal("can't run on a W32s platform\n" ); } is_initialized = 1; if ( debug_me ) log_debug ("rndw32#gather_random: platform=%d\n", (int)platform ); } if ( debug_me ) log_debug ("rndw32#gather_random: req=%d len=%u lvl=%d\n", requester, (unsigned int)length, level ); if ( has_toolhelp ) { slow_gatherer_windows95 ( add, requester ); } if ( is_windowsNT ) { slow_gatherer_windowsNT ( add, requester ); } return 0; } int rndw32_gather_random_fast( void (*add)(const void*, size_t, int), int requester ) { static int addedFixedItems = 0; if ( debug_me ) log_debug ("rndw32#gather_random_fast: req=%d\n", requester ); /* Get various basic pieces of system information: Handle of active * window, handle of window with mouse capture, handle of clipboard owner * handle of start of clpboard viewer list, pseudohandle of current * process, current process ID, pseudohandle of current thread, current * thread ID, handle of desktop window, handle of window with keyboard * focus, whether system queue has any events, cursor position for last * message, 1 ms time for last message, handle of window with clipboard * open, handle of process heap, handle of procs window station, types of * events in input queue, and milliseconds since Windows was started */ { byte buffer[20*sizeof(ulong)], *bufptr; bufptr = buffer; #define ADD(f) do { ulong along = (ulong)(f); \ memcpy (bufptr, &along, sizeof (along) ); \ bufptr += sizeof (along); } while (0) ADD ( GetActiveWindow ()); ADD ( GetCapture ()); ADD ( GetClipboardOwner ()); ADD ( GetClipboardViewer ()); ADD ( GetCurrentProcess ()); ADD ( GetCurrentProcessId ()); ADD ( GetCurrentThread ()); ADD ( GetCurrentThreadId ()); ADD ( GetDesktopWindow ()); ADD ( GetFocus ()); ADD ( GetInputState ()); ADD ( GetMessagePos ()); ADD ( GetMessageTime ()); ADD ( GetOpenClipboardWindow ()); ADD ( GetProcessHeap ()); ADD ( GetProcessWindowStation ()); ADD ( GetQueueStatus (QS_ALLEVENTS)); ADD ( GetTickCount ()); assert ( bufptr-buffer < sizeof (buffer) ); (*add) ( buffer, bufptr-buffer, requester ); #undef ADD } /* Get multiword system information: Current caret position, current * mouse cursor position */ { POINT point; GetCaretPos (&point); (*add) ( &point, sizeof (point), requester ); GetCursorPos (&point); (*add) ( &point, sizeof (point), requester ); } /* Get percent of memory in use, bytes of physical memory, bytes of free * physical memory, bytes in paging file, free bytes in paging file, user * bytes of address space, and free user bytes */ { MEMORYSTATUS memoryStatus; memoryStatus.dwLength = sizeof (MEMORYSTATUS); GlobalMemoryStatus (&memoryStatus); (*add) ( &memoryStatus, sizeof (memoryStatus), requester ); } /* Get thread and process creation time, exit time, time in kernel mode, and time in user mode in 100ns intervals */ { HANDLE handle; FILETIME creationTime, exitTime, kernelTime, userTime; DWORD minimumWorkingSetSize, maximumWorkingSetSize; handle = GetCurrentThread (); GetThreadTimes (handle, &creationTime, &exitTime, &kernelTime, &userTime); (*add) ( &creationTime, sizeof (creationTime), requester ); (*add) ( &exitTime, sizeof (exitTime), requester ); (*add) ( &kernelTime, sizeof (kernelTime), requester ); (*add) ( &userTime, sizeof (userTime), requester ); handle = GetCurrentProcess (); GetProcessTimes (handle, &creationTime, &exitTime, &kernelTime, &userTime); (*add) ( &creationTime, sizeof (creationTime), requester ); (*add) ( &exitTime, sizeof (exitTime), requester ); (*add) ( &kernelTime, sizeof (kernelTime), requester ); (*add) ( &userTime, sizeof (userTime), requester ); /* Get the minimum and maximum working set size for the current process */ GetProcessWorkingSetSize (handle, &minimumWorkingSetSize, &maximumWorkingSetSize); (*add) ( &minimumWorkingSetSize, sizeof (minimumWorkingSetSize), requester ); (*add) ( &maximumWorkingSetSize, sizeof (maximumWorkingSetSize), requester ); } /* The following are fixed for the lifetime of the process so we only * add them once */ if (!addedFixedItems) { STARTUPINFO startupInfo; /* Get name of desktop, console window title, new window position and * size, window flags, and handles for stdin, stdout, and stderr */ startupInfo.cb = sizeof (STARTUPINFO); GetStartupInfo (&startupInfo); (*add) ( &startupInfo, sizeof (STARTUPINFO), requester ); addedFixedItems = 1; } /* The performance of QPC varies depending on the architecture it's * running on and on the OS. Under NT it reads the CPU's 64-bit timestamp * counter (at least on a Pentium and newer '486's, it hasn't been tested * on anything without a TSC), under Win95 it reads the 1.193180 MHz PIC * timer. There are vague mumblings in the docs that it may fail if the * appropriate hardware isn't available (possibly '386's or MIPS machines * running NT), but who's going to run NT on a '386? */ { LARGE_INTEGER performanceCount; if (QueryPerformanceCounter (&performanceCount)) { if ( debug_me ) log_debug ("rndw32#gather_random_fast: perf data\n"); (*add) (&performanceCount, sizeof (performanceCount), requester); } else { /* Millisecond accuracy at best... */ DWORD aword = GetTickCount (); (*add) (&aword, sizeof (aword), requester ); } } return 0; } gnupg-1.4.20/cipher/dsa.h0000644000175000017500000000227712635262326012050 00000000000000/* dsa.h - DSA signature algorithm * 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 3 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, see . */ #ifndef G10_DSA_H #define G10_DSA_H int dsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ); int dsa_check_secret_key( int algo, MPI *skey ); int dsa_sign( int algo, MPI *resarr, MPI data, MPI *skey ); int dsa_verify( int algo, MPI hash, MPI *data, MPI *pkey ); unsigned dsa_get_nbits( int algo, MPI *pkey ); const char *dsa_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig, int *use ); #endif /*G10_DSA_H*/ gnupg-1.4.20/cipher/camellia.c0000644000175000017500000015302412635262326013040 00000000000000/* camellia.h ver 1.2.0 * * Copyright (C) 2006,2007 * NTT (Nippon Telegraph and Telephone Corporation). * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . */ /* * Algorithm Specification * http://info.isl.ntt.co.jp/crypt/eng/camellia/specifications.html */ #include #include #include "camellia.h" /* u32 must be 32bit word */ typedef unsigned int u32; typedef unsigned char u8; /* key constants */ #define CAMELLIA_SIGMA1L (0xA09E667FL) #define CAMELLIA_SIGMA1R (0x3BCC908BL) #define CAMELLIA_SIGMA2L (0xB67AE858L) #define CAMELLIA_SIGMA2R (0x4CAA73B2L) #define CAMELLIA_SIGMA3L (0xC6EF372FL) #define CAMELLIA_SIGMA3R (0xE94F82BEL) #define CAMELLIA_SIGMA4L (0x54FF53A5L) #define CAMELLIA_SIGMA4R (0xF1D36F1CL) #define CAMELLIA_SIGMA5L (0x10E527FAL) #define CAMELLIA_SIGMA5R (0xDE682D1DL) #define CAMELLIA_SIGMA6L (0xB05688C2L) #define CAMELLIA_SIGMA6R (0xB3E6C1FDL) /* * macros */ #if defined(_MSC_VER) # define SWAP(x) (_lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00) # define GETU32(p) SWAP(*((u32 *)(p))) # define PUTU32(ct, st) {*((u32 *)(ct)) = SWAP((st));} #else /* not MS-VC */ # define GETU32(pt) \ (((u32)(pt)[0] << 24) \ ^ ((u32)(pt)[1] << 16) \ ^ ((u32)(pt)[2] << 8) \ ^ ((u32)(pt)[3])) # define PUTU32(ct, st) { \ (ct)[0] = (u8)((st) >> 24); \ (ct)[1] = (u8)((st) >> 16); \ (ct)[2] = (u8)((st) >> 8); \ (ct)[3] = (u8)(st); } #endif #define CamelliaSubkeyL(INDEX) (subkey[(INDEX)*2]) #define CamelliaSubkeyR(INDEX) (subkey[(INDEX)*2 + 1]) /* rotation right shift 1byte */ #define CAMELLIA_RR8(x) (((x) >> 8) + ((x) << 24)) /* rotation left shift 1bit */ #define CAMELLIA_RL1(x) (((x) << 1) + ((x) >> 31)) /* rotation left shift 1byte */ #define CAMELLIA_RL8(x) (((x) << 8) + ((x) >> 24)) #define CAMELLIA_ROLDQ(ll, lr, rl, rr, w0, w1, bits) \ do { \ w0 = ll; \ ll = (ll << bits) + (lr >> (32 - bits)); \ lr = (lr << bits) + (rl >> (32 - bits)); \ rl = (rl << bits) + (rr >> (32 - bits)); \ rr = (rr << bits) + (w0 >> (32 - bits)); \ } while(0) #define CAMELLIA_ROLDQo32(ll, lr, rl, rr, w0, w1, bits) \ do { \ w0 = ll; \ w1 = lr; \ ll = (lr << (bits - 32)) + (rl >> (64 - bits)); \ lr = (rl << (bits - 32)) + (rr >> (64 - bits)); \ rl = (rr << (bits - 32)) + (w0 >> (64 - bits)); \ rr = (w0 << (bits - 32)) + (w1 >> (64 - bits)); \ } while(0) #define CAMELLIA_SP1110(INDEX) (camellia_sp1110[(INDEX)]) #define CAMELLIA_SP0222(INDEX) (camellia_sp0222[(INDEX)]) #define CAMELLIA_SP3033(INDEX) (camellia_sp3033[(INDEX)]) #define CAMELLIA_SP4404(INDEX) (camellia_sp4404[(INDEX)]) #define CAMELLIA_F(xl, xr, kl, kr, yl, yr, il, ir, t0, t1) \ do { \ il = xl ^ kl; \ ir = xr ^ kr; \ t0 = il >> 16; \ t1 = ir >> 16; \ yl = CAMELLIA_SP1110(ir & 0xff) \ ^ CAMELLIA_SP0222((t1 >> 8) & 0xff) \ ^ CAMELLIA_SP3033(t1 & 0xff) \ ^ CAMELLIA_SP4404((ir >> 8) & 0xff); \ yr = CAMELLIA_SP1110((t0 >> 8) & 0xff) \ ^ CAMELLIA_SP0222(t0 & 0xff) \ ^ CAMELLIA_SP3033((il >> 8) & 0xff) \ ^ CAMELLIA_SP4404(il & 0xff); \ yl ^= yr; \ yr = CAMELLIA_RR8(yr); \ yr ^= yl; \ } while(0) /* * for speed up * */ #define CAMELLIA_FLS(ll, lr, rl, rr, kll, klr, krl, krr, t0, t1, t2, t3) \ do { \ t0 = kll; \ t0 &= ll; \ lr ^= CAMELLIA_RL1(t0); \ t1 = klr; \ t1 |= lr; \ ll ^= t1; \ \ t2 = krr; \ t2 |= rr; \ rl ^= t2; \ t3 = krl; \ t3 &= rl; \ rr ^= CAMELLIA_RL1(t3); \ } while(0) #define CAMELLIA_ROUNDSM(xl, xr, kl, kr, yl, yr, il, ir, t0, t1) \ do { \ ir = CAMELLIA_SP1110(xr & 0xff) \ ^ CAMELLIA_SP0222((xr >> 24) & 0xff) \ ^ CAMELLIA_SP3033((xr >> 16) & 0xff) \ ^ CAMELLIA_SP4404((xr >> 8) & 0xff); \ il = CAMELLIA_SP1110((xl >> 24) & 0xff) \ ^ CAMELLIA_SP0222((xl >> 16) & 0xff) \ ^ CAMELLIA_SP3033((xl >> 8) & 0xff) \ ^ CAMELLIA_SP4404(xl & 0xff); \ il ^= kl; \ ir ^= kr; \ ir ^= il; \ il = CAMELLIA_RR8(il); \ il ^= ir; \ yl ^= ir; \ yr ^= il; \ } while(0) static const u32 camellia_sp1110[256] = { 0x70707000,0x82828200,0x2c2c2c00,0xececec00, 0xb3b3b300,0x27272700,0xc0c0c000,0xe5e5e500, 0xe4e4e400,0x85858500,0x57575700,0x35353500, 0xeaeaea00,0x0c0c0c00,0xaeaeae00,0x41414100, 0x23232300,0xefefef00,0x6b6b6b00,0x93939300, 0x45454500,0x19191900,0xa5a5a500,0x21212100, 0xededed00,0x0e0e0e00,0x4f4f4f00,0x4e4e4e00, 0x1d1d1d00,0x65656500,0x92929200,0xbdbdbd00, 0x86868600,0xb8b8b800,0xafafaf00,0x8f8f8f00, 0x7c7c7c00,0xebebeb00,0x1f1f1f00,0xcecece00, 0x3e3e3e00,0x30303000,0xdcdcdc00,0x5f5f5f00, 0x5e5e5e00,0xc5c5c500,0x0b0b0b00,0x1a1a1a00, 0xa6a6a600,0xe1e1e100,0x39393900,0xcacaca00, 0xd5d5d500,0x47474700,0x5d5d5d00,0x3d3d3d00, 0xd9d9d900,0x01010100,0x5a5a5a00,0xd6d6d600, 0x51515100,0x56565600,0x6c6c6c00,0x4d4d4d00, 0x8b8b8b00,0x0d0d0d00,0x9a9a9a00,0x66666600, 0xfbfbfb00,0xcccccc00,0xb0b0b000,0x2d2d2d00, 0x74747400,0x12121200,0x2b2b2b00,0x20202000, 0xf0f0f000,0xb1b1b100,0x84848400,0x99999900, 0xdfdfdf00,0x4c4c4c00,0xcbcbcb00,0xc2c2c200, 0x34343400,0x7e7e7e00,0x76767600,0x05050500, 0x6d6d6d00,0xb7b7b700,0xa9a9a900,0x31313100, 0xd1d1d100,0x17171700,0x04040400,0xd7d7d700, 0x14141400,0x58585800,0x3a3a3a00,0x61616100, 0xdedede00,0x1b1b1b00,0x11111100,0x1c1c1c00, 0x32323200,0x0f0f0f00,0x9c9c9c00,0x16161600, 0x53535300,0x18181800,0xf2f2f200,0x22222200, 0xfefefe00,0x44444400,0xcfcfcf00,0xb2b2b200, 0xc3c3c300,0xb5b5b500,0x7a7a7a00,0x91919100, 0x24242400,0x08080800,0xe8e8e800,0xa8a8a800, 0x60606000,0xfcfcfc00,0x69696900,0x50505000, 0xaaaaaa00,0xd0d0d000,0xa0a0a000,0x7d7d7d00, 0xa1a1a100,0x89898900,0x62626200,0x97979700, 0x54545400,0x5b5b5b00,0x1e1e1e00,0x95959500, 0xe0e0e000,0xffffff00,0x64646400,0xd2d2d200, 0x10101000,0xc4c4c400,0x00000000,0x48484800, 0xa3a3a300,0xf7f7f700,0x75757500,0xdbdbdb00, 0x8a8a8a00,0x03030300,0xe6e6e600,0xdadada00, 0x09090900,0x3f3f3f00,0xdddddd00,0x94949400, 0x87878700,0x5c5c5c00,0x83838300,0x02020200, 0xcdcdcd00,0x4a4a4a00,0x90909000,0x33333300, 0x73737300,0x67676700,0xf6f6f600,0xf3f3f300, 0x9d9d9d00,0x7f7f7f00,0xbfbfbf00,0xe2e2e200, 0x52525200,0x9b9b9b00,0xd8d8d800,0x26262600, 0xc8c8c800,0x37373700,0xc6c6c600,0x3b3b3b00, 0x81818100,0x96969600,0x6f6f6f00,0x4b4b4b00, 0x13131300,0xbebebe00,0x63636300,0x2e2e2e00, 0xe9e9e900,0x79797900,0xa7a7a700,0x8c8c8c00, 0x9f9f9f00,0x6e6e6e00,0xbcbcbc00,0x8e8e8e00, 0x29292900,0xf5f5f500,0xf9f9f900,0xb6b6b600, 0x2f2f2f00,0xfdfdfd00,0xb4b4b400,0x59595900, 0x78787800,0x98989800,0x06060600,0x6a6a6a00, 0xe7e7e700,0x46464600,0x71717100,0xbababa00, 0xd4d4d400,0x25252500,0xababab00,0x42424200, 0x88888800,0xa2a2a200,0x8d8d8d00,0xfafafa00, 0x72727200,0x07070700,0xb9b9b900,0x55555500, 0xf8f8f800,0xeeeeee00,0xacacac00,0x0a0a0a00, 0x36363600,0x49494900,0x2a2a2a00,0x68686800, 0x3c3c3c00,0x38383800,0xf1f1f100,0xa4a4a400, 0x40404000,0x28282800,0xd3d3d300,0x7b7b7b00, 0xbbbbbb00,0xc9c9c900,0x43434300,0xc1c1c100, 0x15151500,0xe3e3e300,0xadadad00,0xf4f4f400, 0x77777700,0xc7c7c700,0x80808000,0x9e9e9e00, }; static const u32 camellia_sp0222[256] = { 0x00e0e0e0,0x00050505,0x00585858,0x00d9d9d9, 0x00676767,0x004e4e4e,0x00818181,0x00cbcbcb, 0x00c9c9c9,0x000b0b0b,0x00aeaeae,0x006a6a6a, 0x00d5d5d5,0x00181818,0x005d5d5d,0x00828282, 0x00464646,0x00dfdfdf,0x00d6d6d6,0x00272727, 0x008a8a8a,0x00323232,0x004b4b4b,0x00424242, 0x00dbdbdb,0x001c1c1c,0x009e9e9e,0x009c9c9c, 0x003a3a3a,0x00cacaca,0x00252525,0x007b7b7b, 0x000d0d0d,0x00717171,0x005f5f5f,0x001f1f1f, 0x00f8f8f8,0x00d7d7d7,0x003e3e3e,0x009d9d9d, 0x007c7c7c,0x00606060,0x00b9b9b9,0x00bebebe, 0x00bcbcbc,0x008b8b8b,0x00161616,0x00343434, 0x004d4d4d,0x00c3c3c3,0x00727272,0x00959595, 0x00ababab,0x008e8e8e,0x00bababa,0x007a7a7a, 0x00b3b3b3,0x00020202,0x00b4b4b4,0x00adadad, 0x00a2a2a2,0x00acacac,0x00d8d8d8,0x009a9a9a, 0x00171717,0x001a1a1a,0x00353535,0x00cccccc, 0x00f7f7f7,0x00999999,0x00616161,0x005a5a5a, 0x00e8e8e8,0x00242424,0x00565656,0x00404040, 0x00e1e1e1,0x00636363,0x00090909,0x00333333, 0x00bfbfbf,0x00989898,0x00979797,0x00858585, 0x00686868,0x00fcfcfc,0x00ececec,0x000a0a0a, 0x00dadada,0x006f6f6f,0x00535353,0x00626262, 0x00a3a3a3,0x002e2e2e,0x00080808,0x00afafaf, 0x00282828,0x00b0b0b0,0x00747474,0x00c2c2c2, 0x00bdbdbd,0x00363636,0x00222222,0x00383838, 0x00646464,0x001e1e1e,0x00393939,0x002c2c2c, 0x00a6a6a6,0x00303030,0x00e5e5e5,0x00444444, 0x00fdfdfd,0x00888888,0x009f9f9f,0x00656565, 0x00878787,0x006b6b6b,0x00f4f4f4,0x00232323, 0x00484848,0x00101010,0x00d1d1d1,0x00515151, 0x00c0c0c0,0x00f9f9f9,0x00d2d2d2,0x00a0a0a0, 0x00555555,0x00a1a1a1,0x00414141,0x00fafafa, 0x00434343,0x00131313,0x00c4c4c4,0x002f2f2f, 0x00a8a8a8,0x00b6b6b6,0x003c3c3c,0x002b2b2b, 0x00c1c1c1,0x00ffffff,0x00c8c8c8,0x00a5a5a5, 0x00202020,0x00898989,0x00000000,0x00909090, 0x00474747,0x00efefef,0x00eaeaea,0x00b7b7b7, 0x00151515,0x00060606,0x00cdcdcd,0x00b5b5b5, 0x00121212,0x007e7e7e,0x00bbbbbb,0x00292929, 0x000f0f0f,0x00b8b8b8,0x00070707,0x00040404, 0x009b9b9b,0x00949494,0x00212121,0x00666666, 0x00e6e6e6,0x00cecece,0x00ededed,0x00e7e7e7, 0x003b3b3b,0x00fefefe,0x007f7f7f,0x00c5c5c5, 0x00a4a4a4,0x00373737,0x00b1b1b1,0x004c4c4c, 0x00919191,0x006e6e6e,0x008d8d8d,0x00767676, 0x00030303,0x002d2d2d,0x00dedede,0x00969696, 0x00262626,0x007d7d7d,0x00c6c6c6,0x005c5c5c, 0x00d3d3d3,0x00f2f2f2,0x004f4f4f,0x00191919, 0x003f3f3f,0x00dcdcdc,0x00797979,0x001d1d1d, 0x00525252,0x00ebebeb,0x00f3f3f3,0x006d6d6d, 0x005e5e5e,0x00fbfbfb,0x00696969,0x00b2b2b2, 0x00f0f0f0,0x00313131,0x000c0c0c,0x00d4d4d4, 0x00cfcfcf,0x008c8c8c,0x00e2e2e2,0x00757575, 0x00a9a9a9,0x004a4a4a,0x00575757,0x00848484, 0x00111111,0x00454545,0x001b1b1b,0x00f5f5f5, 0x00e4e4e4,0x000e0e0e,0x00737373,0x00aaaaaa, 0x00f1f1f1,0x00dddddd,0x00595959,0x00141414, 0x006c6c6c,0x00929292,0x00545454,0x00d0d0d0, 0x00787878,0x00707070,0x00e3e3e3,0x00494949, 0x00808080,0x00505050,0x00a7a7a7,0x00f6f6f6, 0x00777777,0x00939393,0x00868686,0x00838383, 0x002a2a2a,0x00c7c7c7,0x005b5b5b,0x00e9e9e9, 0x00eeeeee,0x008f8f8f,0x00010101,0x003d3d3d, }; static const u32 camellia_sp3033[256] = { 0x38003838,0x41004141,0x16001616,0x76007676, 0xd900d9d9,0x93009393,0x60006060,0xf200f2f2, 0x72007272,0xc200c2c2,0xab00abab,0x9a009a9a, 0x75007575,0x06000606,0x57005757,0xa000a0a0, 0x91009191,0xf700f7f7,0xb500b5b5,0xc900c9c9, 0xa200a2a2,0x8c008c8c,0xd200d2d2,0x90009090, 0xf600f6f6,0x07000707,0xa700a7a7,0x27002727, 0x8e008e8e,0xb200b2b2,0x49004949,0xde00dede, 0x43004343,0x5c005c5c,0xd700d7d7,0xc700c7c7, 0x3e003e3e,0xf500f5f5,0x8f008f8f,0x67006767, 0x1f001f1f,0x18001818,0x6e006e6e,0xaf00afaf, 0x2f002f2f,0xe200e2e2,0x85008585,0x0d000d0d, 0x53005353,0xf000f0f0,0x9c009c9c,0x65006565, 0xea00eaea,0xa300a3a3,0xae00aeae,0x9e009e9e, 0xec00ecec,0x80008080,0x2d002d2d,0x6b006b6b, 0xa800a8a8,0x2b002b2b,0x36003636,0xa600a6a6, 0xc500c5c5,0x86008686,0x4d004d4d,0x33003333, 0xfd00fdfd,0x66006666,0x58005858,0x96009696, 0x3a003a3a,0x09000909,0x95009595,0x10001010, 0x78007878,0xd800d8d8,0x42004242,0xcc00cccc, 0xef00efef,0x26002626,0xe500e5e5,0x61006161, 0x1a001a1a,0x3f003f3f,0x3b003b3b,0x82008282, 0xb600b6b6,0xdb00dbdb,0xd400d4d4,0x98009898, 0xe800e8e8,0x8b008b8b,0x02000202,0xeb00ebeb, 0x0a000a0a,0x2c002c2c,0x1d001d1d,0xb000b0b0, 0x6f006f6f,0x8d008d8d,0x88008888,0x0e000e0e, 0x19001919,0x87008787,0x4e004e4e,0x0b000b0b, 0xa900a9a9,0x0c000c0c,0x79007979,0x11001111, 0x7f007f7f,0x22002222,0xe700e7e7,0x59005959, 0xe100e1e1,0xda00dada,0x3d003d3d,0xc800c8c8, 0x12001212,0x04000404,0x74007474,0x54005454, 0x30003030,0x7e007e7e,0xb400b4b4,0x28002828, 0x55005555,0x68006868,0x50005050,0xbe00bebe, 0xd000d0d0,0xc400c4c4,0x31003131,0xcb00cbcb, 0x2a002a2a,0xad00adad,0x0f000f0f,0xca00caca, 0x70007070,0xff00ffff,0x32003232,0x69006969, 0x08000808,0x62006262,0x00000000,0x24002424, 0xd100d1d1,0xfb00fbfb,0xba00baba,0xed00eded, 0x45004545,0x81008181,0x73007373,0x6d006d6d, 0x84008484,0x9f009f9f,0xee00eeee,0x4a004a4a, 0xc300c3c3,0x2e002e2e,0xc100c1c1,0x01000101, 0xe600e6e6,0x25002525,0x48004848,0x99009999, 0xb900b9b9,0xb300b3b3,0x7b007b7b,0xf900f9f9, 0xce00cece,0xbf00bfbf,0xdf00dfdf,0x71007171, 0x29002929,0xcd00cdcd,0x6c006c6c,0x13001313, 0x64006464,0x9b009b9b,0x63006363,0x9d009d9d, 0xc000c0c0,0x4b004b4b,0xb700b7b7,0xa500a5a5, 0x89008989,0x5f005f5f,0xb100b1b1,0x17001717, 0xf400f4f4,0xbc00bcbc,0xd300d3d3,0x46004646, 0xcf00cfcf,0x37003737,0x5e005e5e,0x47004747, 0x94009494,0xfa00fafa,0xfc00fcfc,0x5b005b5b, 0x97009797,0xfe00fefe,0x5a005a5a,0xac00acac, 0x3c003c3c,0x4c004c4c,0x03000303,0x35003535, 0xf300f3f3,0x23002323,0xb800b8b8,0x5d005d5d, 0x6a006a6a,0x92009292,0xd500d5d5,0x21002121, 0x44004444,0x51005151,0xc600c6c6,0x7d007d7d, 0x39003939,0x83008383,0xdc00dcdc,0xaa00aaaa, 0x7c007c7c,0x77007777,0x56005656,0x05000505, 0x1b001b1b,0xa400a4a4,0x15001515,0x34003434, 0x1e001e1e,0x1c001c1c,0xf800f8f8,0x52005252, 0x20002020,0x14001414,0xe900e9e9,0xbd00bdbd, 0xdd00dddd,0xe400e4e4,0xa100a1a1,0xe000e0e0, 0x8a008a8a,0xf100f1f1,0xd600d6d6,0x7a007a7a, 0xbb00bbbb,0xe300e3e3,0x40004040,0x4f004f4f, }; static const u32 camellia_sp4404[256] = { 0x70700070,0x2c2c002c,0xb3b300b3,0xc0c000c0, 0xe4e400e4,0x57570057,0xeaea00ea,0xaeae00ae, 0x23230023,0x6b6b006b,0x45450045,0xa5a500a5, 0xeded00ed,0x4f4f004f,0x1d1d001d,0x92920092, 0x86860086,0xafaf00af,0x7c7c007c,0x1f1f001f, 0x3e3e003e,0xdcdc00dc,0x5e5e005e,0x0b0b000b, 0xa6a600a6,0x39390039,0xd5d500d5,0x5d5d005d, 0xd9d900d9,0x5a5a005a,0x51510051,0x6c6c006c, 0x8b8b008b,0x9a9a009a,0xfbfb00fb,0xb0b000b0, 0x74740074,0x2b2b002b,0xf0f000f0,0x84840084, 0xdfdf00df,0xcbcb00cb,0x34340034,0x76760076, 0x6d6d006d,0xa9a900a9,0xd1d100d1,0x04040004, 0x14140014,0x3a3a003a,0xdede00de,0x11110011, 0x32320032,0x9c9c009c,0x53530053,0xf2f200f2, 0xfefe00fe,0xcfcf00cf,0xc3c300c3,0x7a7a007a, 0x24240024,0xe8e800e8,0x60600060,0x69690069, 0xaaaa00aa,0xa0a000a0,0xa1a100a1,0x62620062, 0x54540054,0x1e1e001e,0xe0e000e0,0x64640064, 0x10100010,0x00000000,0xa3a300a3,0x75750075, 0x8a8a008a,0xe6e600e6,0x09090009,0xdddd00dd, 0x87870087,0x83830083,0xcdcd00cd,0x90900090, 0x73730073,0xf6f600f6,0x9d9d009d,0xbfbf00bf, 0x52520052,0xd8d800d8,0xc8c800c8,0xc6c600c6, 0x81810081,0x6f6f006f,0x13130013,0x63630063, 0xe9e900e9,0xa7a700a7,0x9f9f009f,0xbcbc00bc, 0x29290029,0xf9f900f9,0x2f2f002f,0xb4b400b4, 0x78780078,0x06060006,0xe7e700e7,0x71710071, 0xd4d400d4,0xabab00ab,0x88880088,0x8d8d008d, 0x72720072,0xb9b900b9,0xf8f800f8,0xacac00ac, 0x36360036,0x2a2a002a,0x3c3c003c,0xf1f100f1, 0x40400040,0xd3d300d3,0xbbbb00bb,0x43430043, 0x15150015,0xadad00ad,0x77770077,0x80800080, 0x82820082,0xecec00ec,0x27270027,0xe5e500e5, 0x85850085,0x35350035,0x0c0c000c,0x41410041, 0xefef00ef,0x93930093,0x19190019,0x21210021, 0x0e0e000e,0x4e4e004e,0x65650065,0xbdbd00bd, 0xb8b800b8,0x8f8f008f,0xebeb00eb,0xcece00ce, 0x30300030,0x5f5f005f,0xc5c500c5,0x1a1a001a, 0xe1e100e1,0xcaca00ca,0x47470047,0x3d3d003d, 0x01010001,0xd6d600d6,0x56560056,0x4d4d004d, 0x0d0d000d,0x66660066,0xcccc00cc,0x2d2d002d, 0x12120012,0x20200020,0xb1b100b1,0x99990099, 0x4c4c004c,0xc2c200c2,0x7e7e007e,0x05050005, 0xb7b700b7,0x31310031,0x17170017,0xd7d700d7, 0x58580058,0x61610061,0x1b1b001b,0x1c1c001c, 0x0f0f000f,0x16160016,0x18180018,0x22220022, 0x44440044,0xb2b200b2,0xb5b500b5,0x91910091, 0x08080008,0xa8a800a8,0xfcfc00fc,0x50500050, 0xd0d000d0,0x7d7d007d,0x89890089,0x97970097, 0x5b5b005b,0x95950095,0xffff00ff,0xd2d200d2, 0xc4c400c4,0x48480048,0xf7f700f7,0xdbdb00db, 0x03030003,0xdada00da,0x3f3f003f,0x94940094, 0x5c5c005c,0x02020002,0x4a4a004a,0x33330033, 0x67670067,0xf3f300f3,0x7f7f007f,0xe2e200e2, 0x9b9b009b,0x26260026,0x37370037,0x3b3b003b, 0x96960096,0x4b4b004b,0xbebe00be,0x2e2e002e, 0x79790079,0x8c8c008c,0x6e6e006e,0x8e8e008e, 0xf5f500f5,0xb6b600b6,0xfdfd00fd,0x59590059, 0x98980098,0x6a6a006a,0x46460046,0xbaba00ba, 0x25250025,0x42420042,0xa2a200a2,0xfafa00fa, 0x07070007,0x55550055,0xeeee00ee,0x0a0a000a, 0x49490049,0x68680068,0x38380038,0xa4a400a4, 0x28280028,0x7b7b007b,0xc9c900c9,0xc1c100c1, 0xe3e300e3,0xf4f400f4,0xc7c700c7,0x9e9e009e, }; /** * Stuff related to the Camellia key schedule */ #define subl(x) subL[(x)] #define subr(x) subR[(x)] void camellia_setup128(const unsigned char *key, u32 *subkey) { u32 kll, klr, krl, krr; u32 il, ir, t0, t1, w0, w1; u32 kw4l, kw4r, dw, tl, tr; u32 subL[26]; u32 subR[26]; /** * k == kll || klr || krl || krr (|| is concatination) */ kll = GETU32(key ); klr = GETU32(key + 4); krl = GETU32(key + 8); krr = GETU32(key + 12); /** * generate KL dependent subkeys */ subl(0) = kll; subr(0) = klr; subl(1) = krl; subr(1) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); subl(4) = kll; subr(4) = klr; subl(5) = krl; subr(5) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 30); subl(10) = kll; subr(10) = klr; subl(11) = krl; subr(11) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); subl(13) = krl; subr(13) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); subl(16) = kll; subr(16) = klr; subl(17) = krl; subr(17) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); subl(18) = kll; subr(18) = klr; subl(19) = krl; subr(19) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); subl(22) = kll; subr(22) = klr; subl(23) = krl; subr(23) = krr; /* generate KA */ kll = subl(0); klr = subr(0); krl = subl(1); krr = subr(1); CAMELLIA_F(kll, klr, CAMELLIA_SIGMA1L, CAMELLIA_SIGMA1R, w0, w1, il, ir, t0, t1); krl ^= w0; krr ^= w1; CAMELLIA_F(krl, krr, CAMELLIA_SIGMA2L, CAMELLIA_SIGMA2R, kll, klr, il, ir, t0, t1); CAMELLIA_F(kll, klr, CAMELLIA_SIGMA3L, CAMELLIA_SIGMA3R, krl, krr, il, ir, t0, t1); krl ^= w0; krr ^= w1; CAMELLIA_F(krl, krr, CAMELLIA_SIGMA4L, CAMELLIA_SIGMA4R, w0, w1, il, ir, t0, t1); kll ^= w0; klr ^= w1; /* generate KA dependent subkeys */ subl(2) = kll; subr(2) = klr; subl(3) = krl; subr(3) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); subl(6) = kll; subr(6) = klr; subl(7) = krl; subr(7) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); subl(8) = kll; subr(8) = klr; subl(9) = krl; subr(9) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); subl(12) = kll; subr(12) = klr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); subl(14) = kll; subr(14) = klr; subl(15) = krl; subr(15) = krr; CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 34); subl(20) = kll; subr(20) = klr; subl(21) = krl; subr(21) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); subl(24) = kll; subr(24) = klr; subl(25) = krl; subr(25) = krr; /* absorb kw2 to other subkeys */ subl(3) ^= subl(1); subr(3) ^= subr(1); subl(5) ^= subl(1); subr(5) ^= subr(1); subl(7) ^= subl(1); subr(7) ^= subr(1); subl(1) ^= subr(1) & ~subr(9); dw = subl(1) & subl(9), subr(1) ^= CAMELLIA_RL1(dw); subl(11) ^= subl(1); subr(11) ^= subr(1); subl(13) ^= subl(1); subr(13) ^= subr(1); subl(15) ^= subl(1); subr(15) ^= subr(1); subl(1) ^= subr(1) & ~subr(17); dw = subl(1) & subl(17), subr(1) ^= CAMELLIA_RL1(dw); subl(19) ^= subl(1); subr(19) ^= subr(1); subl(21) ^= subl(1); subr(21) ^= subr(1); subl(23) ^= subl(1); subr(23) ^= subr(1); subl(24) ^= subl(1); subr(24) ^= subr(1); /* absorb kw4 to other subkeys */ kw4l = subl(25); kw4r = subr(25); subl(22) ^= kw4l; subr(22) ^= kw4r; subl(20) ^= kw4l; subr(20) ^= kw4r; subl(18) ^= kw4l; subr(18) ^= kw4r; kw4l ^= kw4r & ~subr(16); dw = kw4l & subl(16), kw4r ^= CAMELLIA_RL1(dw); subl(14) ^= kw4l; subr(14) ^= kw4r; subl(12) ^= kw4l; subr(12) ^= kw4r; subl(10) ^= kw4l; subr(10) ^= kw4r; kw4l ^= kw4r & ~subr(8); dw = kw4l & subl(8), kw4r ^= CAMELLIA_RL1(dw); subl(6) ^= kw4l; subr(6) ^= kw4r; subl(4) ^= kw4l; subr(4) ^= kw4r; subl(2) ^= kw4l; subr(2) ^= kw4r; subl(0) ^= kw4l; subr(0) ^= kw4r; /* key XOR is end of F-function */ CamelliaSubkeyL(0) = subl(0) ^ subl(2); CamelliaSubkeyR(0) = subr(0) ^ subr(2); CamelliaSubkeyL(2) = subl(3); CamelliaSubkeyR(2) = subr(3); CamelliaSubkeyL(3) = subl(2) ^ subl(4); CamelliaSubkeyR(3) = subr(2) ^ subr(4); CamelliaSubkeyL(4) = subl(3) ^ subl(5); CamelliaSubkeyR(4) = subr(3) ^ subr(5); CamelliaSubkeyL(5) = subl(4) ^ subl(6); CamelliaSubkeyR(5) = subr(4) ^ subr(6); CamelliaSubkeyL(6) = subl(5) ^ subl(7); CamelliaSubkeyR(6) = subr(5) ^ subr(7); tl = subl(10) ^ (subr(10) & ~subr(8)); dw = tl & subl(8), tr = subr(10) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(7) = subl(6) ^ tl; CamelliaSubkeyR(7) = subr(6) ^ tr; CamelliaSubkeyL(8) = subl(8); CamelliaSubkeyR(8) = subr(8); CamelliaSubkeyL(9) = subl(9); CamelliaSubkeyR(9) = subr(9); tl = subl(7) ^ (subr(7) & ~subr(9)); dw = tl & subl(9), tr = subr(7) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(10) = tl ^ subl(11); CamelliaSubkeyR(10) = tr ^ subr(11); CamelliaSubkeyL(11) = subl(10) ^ subl(12); CamelliaSubkeyR(11) = subr(10) ^ subr(12); CamelliaSubkeyL(12) = subl(11) ^ subl(13); CamelliaSubkeyR(12) = subr(11) ^ subr(13); CamelliaSubkeyL(13) = subl(12) ^ subl(14); CamelliaSubkeyR(13) = subr(12) ^ subr(14); CamelliaSubkeyL(14) = subl(13) ^ subl(15); CamelliaSubkeyR(14) = subr(13) ^ subr(15); tl = subl(18) ^ (subr(18) & ~subr(16)); dw = tl & subl(16), tr = subr(18) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(15) = subl(14) ^ tl; CamelliaSubkeyR(15) = subr(14) ^ tr; CamelliaSubkeyL(16) = subl(16); CamelliaSubkeyR(16) = subr(16); CamelliaSubkeyL(17) = subl(17); CamelliaSubkeyR(17) = subr(17); tl = subl(15) ^ (subr(15) & ~subr(17)); dw = tl & subl(17), tr = subr(15) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(18) = tl ^ subl(19); CamelliaSubkeyR(18) = tr ^ subr(19); CamelliaSubkeyL(19) = subl(18) ^ subl(20); CamelliaSubkeyR(19) = subr(18) ^ subr(20); CamelliaSubkeyL(20) = subl(19) ^ subl(21); CamelliaSubkeyR(20) = subr(19) ^ subr(21); CamelliaSubkeyL(21) = subl(20) ^ subl(22); CamelliaSubkeyR(21) = subr(20) ^ subr(22); CamelliaSubkeyL(22) = subl(21) ^ subl(23); CamelliaSubkeyR(22) = subr(21) ^ subr(23); CamelliaSubkeyL(23) = subl(22); CamelliaSubkeyR(23) = subr(22); CamelliaSubkeyL(24) = subl(24) ^ subl(23); CamelliaSubkeyR(24) = subr(24) ^ subr(23); /* apply the inverse of the last half of P-function */ dw = CamelliaSubkeyL(2) ^ CamelliaSubkeyR(2), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(2) = CamelliaSubkeyL(2) ^ dw, CamelliaSubkeyL(2) = dw; dw = CamelliaSubkeyL(3) ^ CamelliaSubkeyR(3), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(3) = CamelliaSubkeyL(3) ^ dw, CamelliaSubkeyL(3) = dw; dw = CamelliaSubkeyL(4) ^ CamelliaSubkeyR(4), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(4) = CamelliaSubkeyL(4) ^ dw, CamelliaSubkeyL(4) = dw; dw = CamelliaSubkeyL(5) ^ CamelliaSubkeyR(5), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(5) = CamelliaSubkeyL(5) ^ dw, CamelliaSubkeyL(5) = dw; dw = CamelliaSubkeyL(6) ^ CamelliaSubkeyR(6), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(6) = CamelliaSubkeyL(6) ^ dw, CamelliaSubkeyL(6) = dw; dw = CamelliaSubkeyL(7) ^ CamelliaSubkeyR(7), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(7) = CamelliaSubkeyL(7) ^ dw, CamelliaSubkeyL(7) = dw; dw = CamelliaSubkeyL(10) ^ CamelliaSubkeyR(10), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(10) = CamelliaSubkeyL(10) ^ dw, CamelliaSubkeyL(10) = dw; dw = CamelliaSubkeyL(11) ^ CamelliaSubkeyR(11), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(11) = CamelliaSubkeyL(11) ^ dw, CamelliaSubkeyL(11) = dw; dw = CamelliaSubkeyL(12) ^ CamelliaSubkeyR(12), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(12) = CamelliaSubkeyL(12) ^ dw, CamelliaSubkeyL(12) = dw; dw = CamelliaSubkeyL(13) ^ CamelliaSubkeyR(13), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(13) = CamelliaSubkeyL(13) ^ dw, CamelliaSubkeyL(13) = dw; dw = CamelliaSubkeyL(14) ^ CamelliaSubkeyR(14), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(14) = CamelliaSubkeyL(14) ^ dw, CamelliaSubkeyL(14) = dw; dw = CamelliaSubkeyL(15) ^ CamelliaSubkeyR(15), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(15) = CamelliaSubkeyL(15) ^ dw, CamelliaSubkeyL(15) = dw; dw = CamelliaSubkeyL(18) ^ CamelliaSubkeyR(18), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(18) = CamelliaSubkeyL(18) ^ dw, CamelliaSubkeyL(18) = dw; dw = CamelliaSubkeyL(19) ^ CamelliaSubkeyR(19), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(19) = CamelliaSubkeyL(19) ^ dw, CamelliaSubkeyL(19) = dw; dw = CamelliaSubkeyL(20) ^ CamelliaSubkeyR(20), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(20) = CamelliaSubkeyL(20) ^ dw, CamelliaSubkeyL(20) = dw; dw = CamelliaSubkeyL(21) ^ CamelliaSubkeyR(21), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(21) = CamelliaSubkeyL(21) ^ dw, CamelliaSubkeyL(21) = dw; dw = CamelliaSubkeyL(22) ^ CamelliaSubkeyR(22), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(22) = CamelliaSubkeyL(22) ^ dw, CamelliaSubkeyL(22) = dw; dw = CamelliaSubkeyL(23) ^ CamelliaSubkeyR(23), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(23) = CamelliaSubkeyL(23) ^ dw, CamelliaSubkeyL(23) = dw; return; } void camellia_setup256(const unsigned char *key, u32 *subkey) { u32 kll,klr,krl,krr; /* left half of key */ u32 krll,krlr,krrl,krrr; /* right half of key */ u32 il, ir, t0, t1, w0, w1; /* temporary variables */ u32 kw4l, kw4r, dw, tl, tr; u32 subL[34]; u32 subR[34]; /** * key = (kll || klr || krl || krr || krll || krlr || krrl || krrr) * (|| is concatination) */ kll = GETU32(key ); klr = GETU32(key + 4); krl = GETU32(key + 8); krr = GETU32(key + 12); krll = GETU32(key + 16); krlr = GETU32(key + 20); krrl = GETU32(key + 24); krrr = GETU32(key + 28); /* generate KL dependent subkeys */ subl(0) = kll; subr(0) = klr; subl(1) = krl; subr(1) = krr; CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 45); subl(12) = kll; subr(12) = klr; subl(13) = krl; subr(13) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); subl(16) = kll; subr(16) = klr; subl(17) = krl; subr(17) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 17); subl(22) = kll; subr(22) = klr; subl(23) = krl; subr(23) = krr; CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 34); subl(30) = kll; subr(30) = klr; subl(31) = krl; subr(31) = krr; /* generate KR dependent subkeys */ CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 15); subl(4) = krll; subr(4) = krlr; subl(5) = krrl; subr(5) = krrr; CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 15); subl(8) = krll; subr(8) = krlr; subl(9) = krrl; subr(9) = krrr; CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30); subl(18) = krll; subr(18) = krlr; subl(19) = krrl; subr(19) = krrr; CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 34); subl(26) = krll; subr(26) = krlr; subl(27) = krrl; subr(27) = krrr; CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 34); /* generate KA */ kll = subl(0) ^ krll; klr = subr(0) ^ krlr; krl = subl(1) ^ krrl; krr = subr(1) ^ krrr; CAMELLIA_F(kll, klr, CAMELLIA_SIGMA1L, CAMELLIA_SIGMA1R, w0, w1, il, ir, t0, t1); krl ^= w0; krr ^= w1; CAMELLIA_F(krl, krr, CAMELLIA_SIGMA2L, CAMELLIA_SIGMA2R, kll, klr, il, ir, t0, t1); kll ^= krll; klr ^= krlr; CAMELLIA_F(kll, klr, CAMELLIA_SIGMA3L, CAMELLIA_SIGMA3R, krl, krr, il, ir, t0, t1); krl ^= w0 ^ krrl; krr ^= w1 ^ krrr; CAMELLIA_F(krl, krr, CAMELLIA_SIGMA4L, CAMELLIA_SIGMA4R, w0, w1, il, ir, t0, t1); kll ^= w0; klr ^= w1; /* generate KB */ krll ^= kll; krlr ^= klr; krrl ^= krl; krrr ^= krr; CAMELLIA_F(krll, krlr, CAMELLIA_SIGMA5L, CAMELLIA_SIGMA5R, w0, w1, il, ir, t0, t1); krrl ^= w0; krrr ^= w1; CAMELLIA_F(krrl, krrr, CAMELLIA_SIGMA6L, CAMELLIA_SIGMA6R, w0, w1, il, ir, t0, t1); krll ^= w0; krlr ^= w1; /* generate KA dependent subkeys */ CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 15); subl(6) = kll; subr(6) = klr; subl(7) = krl; subr(7) = krr; CAMELLIA_ROLDQ(kll, klr, krl, krr, w0, w1, 30); subl(14) = kll; subr(14) = klr; subl(15) = krl; subr(15) = krr; subl(24) = klr; subr(24) = krl; subl(25) = krr; subr(25) = kll; CAMELLIA_ROLDQo32(kll, klr, krl, krr, w0, w1, 49); subl(28) = kll; subr(28) = klr; subl(29) = krl; subr(29) = krr; /* generate KB dependent subkeys */ subl(2) = krll; subr(2) = krlr; subl(3) = krrl; subr(3) = krrr; CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30); subl(10) = krll; subr(10) = krlr; subl(11) = krrl; subr(11) = krrr; CAMELLIA_ROLDQ(krll, krlr, krrl, krrr, w0, w1, 30); subl(20) = krll; subr(20) = krlr; subl(21) = krrl; subr(21) = krrr; CAMELLIA_ROLDQo32(krll, krlr, krrl, krrr, w0, w1, 51); subl(32) = krll; subr(32) = krlr; subl(33) = krrl; subr(33) = krrr; /* absorb kw2 to other subkeys */ subl(3) ^= subl(1); subr(3) ^= subr(1); subl(5) ^= subl(1); subr(5) ^= subr(1); subl(7) ^= subl(1); subr(7) ^= subr(1); subl(1) ^= subr(1) & ~subr(9); dw = subl(1) & subl(9), subr(1) ^= CAMELLIA_RL1(dw); subl(11) ^= subl(1); subr(11) ^= subr(1); subl(13) ^= subl(1); subr(13) ^= subr(1); subl(15) ^= subl(1); subr(15) ^= subr(1); subl(1) ^= subr(1) & ~subr(17); dw = subl(1) & subl(17), subr(1) ^= CAMELLIA_RL1(dw); subl(19) ^= subl(1); subr(19) ^= subr(1); subl(21) ^= subl(1); subr(21) ^= subr(1); subl(23) ^= subl(1); subr(23) ^= subr(1); subl(1) ^= subr(1) & ~subr(25); dw = subl(1) & subl(25), subr(1) ^= CAMELLIA_RL1(dw); subl(27) ^= subl(1); subr(27) ^= subr(1); subl(29) ^= subl(1); subr(29) ^= subr(1); subl(31) ^= subl(1); subr(31) ^= subr(1); subl(32) ^= subl(1); subr(32) ^= subr(1); /* absorb kw4 to other subkeys */ kw4l = subl(33); kw4r = subr(33); subl(30) ^= kw4l; subr(30) ^= kw4r; subl(28) ^= kw4l; subr(28) ^= kw4r; subl(26) ^= kw4l; subr(26) ^= kw4r; kw4l ^= kw4r & ~subr(24); dw = kw4l & subl(24), kw4r ^= CAMELLIA_RL1(dw); subl(22) ^= kw4l; subr(22) ^= kw4r; subl(20) ^= kw4l; subr(20) ^= kw4r; subl(18) ^= kw4l; subr(18) ^= kw4r; kw4l ^= kw4r & ~subr(16); dw = kw4l & subl(16), kw4r ^= CAMELLIA_RL1(dw); subl(14) ^= kw4l; subr(14) ^= kw4r; subl(12) ^= kw4l; subr(12) ^= kw4r; subl(10) ^= kw4l; subr(10) ^= kw4r; kw4l ^= kw4r & ~subr(8); dw = kw4l & subl(8), kw4r ^= CAMELLIA_RL1(dw); subl(6) ^= kw4l; subr(6) ^= kw4r; subl(4) ^= kw4l; subr(4) ^= kw4r; subl(2) ^= kw4l; subr(2) ^= kw4r; subl(0) ^= kw4l; subr(0) ^= kw4r; /* key XOR is end of F-function */ CamelliaSubkeyL(0) = subl(0) ^ subl(2); CamelliaSubkeyR(0) = subr(0) ^ subr(2); CamelliaSubkeyL(2) = subl(3); CamelliaSubkeyR(2) = subr(3); CamelliaSubkeyL(3) = subl(2) ^ subl(4); CamelliaSubkeyR(3) = subr(2) ^ subr(4); CamelliaSubkeyL(4) = subl(3) ^ subl(5); CamelliaSubkeyR(4) = subr(3) ^ subr(5); CamelliaSubkeyL(5) = subl(4) ^ subl(6); CamelliaSubkeyR(5) = subr(4) ^ subr(6); CamelliaSubkeyL(6) = subl(5) ^ subl(7); CamelliaSubkeyR(6) = subr(5) ^ subr(7); tl = subl(10) ^ (subr(10) & ~subr(8)); dw = tl & subl(8), tr = subr(10) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(7) = subl(6) ^ tl; CamelliaSubkeyR(7) = subr(6) ^ tr; CamelliaSubkeyL(8) = subl(8); CamelliaSubkeyR(8) = subr(8); CamelliaSubkeyL(9) = subl(9); CamelliaSubkeyR(9) = subr(9); tl = subl(7) ^ (subr(7) & ~subr(9)); dw = tl & subl(9), tr = subr(7) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(10) = tl ^ subl(11); CamelliaSubkeyR(10) = tr ^ subr(11); CamelliaSubkeyL(11) = subl(10) ^ subl(12); CamelliaSubkeyR(11) = subr(10) ^ subr(12); CamelliaSubkeyL(12) = subl(11) ^ subl(13); CamelliaSubkeyR(12) = subr(11) ^ subr(13); CamelliaSubkeyL(13) = subl(12) ^ subl(14); CamelliaSubkeyR(13) = subr(12) ^ subr(14); CamelliaSubkeyL(14) = subl(13) ^ subl(15); CamelliaSubkeyR(14) = subr(13) ^ subr(15); tl = subl(18) ^ (subr(18) & ~subr(16)); dw = tl & subl(16), tr = subr(18) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(15) = subl(14) ^ tl; CamelliaSubkeyR(15) = subr(14) ^ tr; CamelliaSubkeyL(16) = subl(16); CamelliaSubkeyR(16) = subr(16); CamelliaSubkeyL(17) = subl(17); CamelliaSubkeyR(17) = subr(17); tl = subl(15) ^ (subr(15) & ~subr(17)); dw = tl & subl(17), tr = subr(15) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(18) = tl ^ subl(19); CamelliaSubkeyR(18) = tr ^ subr(19); CamelliaSubkeyL(19) = subl(18) ^ subl(20); CamelliaSubkeyR(19) = subr(18) ^ subr(20); CamelliaSubkeyL(20) = subl(19) ^ subl(21); CamelliaSubkeyR(20) = subr(19) ^ subr(21); CamelliaSubkeyL(21) = subl(20) ^ subl(22); CamelliaSubkeyR(21) = subr(20) ^ subr(22); CamelliaSubkeyL(22) = subl(21) ^ subl(23); CamelliaSubkeyR(22) = subr(21) ^ subr(23); tl = subl(26) ^ (subr(26) & ~subr(24)); dw = tl & subl(24), tr = subr(26) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(23) = subl(22) ^ tl; CamelliaSubkeyR(23) = subr(22) ^ tr; CamelliaSubkeyL(24) = subl(24); CamelliaSubkeyR(24) = subr(24); CamelliaSubkeyL(25) = subl(25); CamelliaSubkeyR(25) = subr(25); tl = subl(23) ^ (subr(23) & ~subr(25)); dw = tl & subl(25), tr = subr(23) ^ CAMELLIA_RL1(dw); CamelliaSubkeyL(26) = tl ^ subl(27); CamelliaSubkeyR(26) = tr ^ subr(27); CamelliaSubkeyL(27) = subl(26) ^ subl(28); CamelliaSubkeyR(27) = subr(26) ^ subr(28); CamelliaSubkeyL(28) = subl(27) ^ subl(29); CamelliaSubkeyR(28) = subr(27) ^ subr(29); CamelliaSubkeyL(29) = subl(28) ^ subl(30); CamelliaSubkeyR(29) = subr(28) ^ subr(30); CamelliaSubkeyL(30) = subl(29) ^ subl(31); CamelliaSubkeyR(30) = subr(29) ^ subr(31); CamelliaSubkeyL(31) = subl(30); CamelliaSubkeyR(31) = subr(30); CamelliaSubkeyL(32) = subl(32) ^ subl(31); CamelliaSubkeyR(32) = subr(32) ^ subr(31); /* apply the inverse of the last half of P-function */ dw = CamelliaSubkeyL(2) ^ CamelliaSubkeyR(2), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(2) = CamelliaSubkeyL(2) ^ dw, CamelliaSubkeyL(2) = dw; dw = CamelliaSubkeyL(3) ^ CamelliaSubkeyR(3), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(3) = CamelliaSubkeyL(3) ^ dw, CamelliaSubkeyL(3) = dw; dw = CamelliaSubkeyL(4) ^ CamelliaSubkeyR(4), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(4) = CamelliaSubkeyL(4) ^ dw, CamelliaSubkeyL(4) = dw; dw = CamelliaSubkeyL(5) ^ CamelliaSubkeyR(5), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(5) = CamelliaSubkeyL(5) ^ dw, CamelliaSubkeyL(5) = dw; dw = CamelliaSubkeyL(6) ^ CamelliaSubkeyR(6), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(6) = CamelliaSubkeyL(6) ^ dw, CamelliaSubkeyL(6) = dw; dw = CamelliaSubkeyL(7) ^ CamelliaSubkeyR(7), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(7) = CamelliaSubkeyL(7) ^ dw, CamelliaSubkeyL(7) = dw; dw = CamelliaSubkeyL(10) ^ CamelliaSubkeyR(10), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(10) = CamelliaSubkeyL(10) ^ dw, CamelliaSubkeyL(10) = dw; dw = CamelliaSubkeyL(11) ^ CamelliaSubkeyR(11), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(11) = CamelliaSubkeyL(11) ^ dw, CamelliaSubkeyL(11) = dw; dw = CamelliaSubkeyL(12) ^ CamelliaSubkeyR(12), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(12) = CamelliaSubkeyL(12) ^ dw, CamelliaSubkeyL(12) = dw; dw = CamelliaSubkeyL(13) ^ CamelliaSubkeyR(13), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(13) = CamelliaSubkeyL(13) ^ dw, CamelliaSubkeyL(13) = dw; dw = CamelliaSubkeyL(14) ^ CamelliaSubkeyR(14), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(14) = CamelliaSubkeyL(14) ^ dw, CamelliaSubkeyL(14) = dw; dw = CamelliaSubkeyL(15) ^ CamelliaSubkeyR(15), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(15) = CamelliaSubkeyL(15) ^ dw, CamelliaSubkeyL(15) = dw; dw = CamelliaSubkeyL(18) ^ CamelliaSubkeyR(18), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(18) = CamelliaSubkeyL(18) ^ dw, CamelliaSubkeyL(18) = dw; dw = CamelliaSubkeyL(19) ^ CamelliaSubkeyR(19), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(19) = CamelliaSubkeyL(19) ^ dw, CamelliaSubkeyL(19) = dw; dw = CamelliaSubkeyL(20) ^ CamelliaSubkeyR(20), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(20) = CamelliaSubkeyL(20) ^ dw, CamelliaSubkeyL(20) = dw; dw = CamelliaSubkeyL(21) ^ CamelliaSubkeyR(21), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(21) = CamelliaSubkeyL(21) ^ dw, CamelliaSubkeyL(21) = dw; dw = CamelliaSubkeyL(22) ^ CamelliaSubkeyR(22), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(22) = CamelliaSubkeyL(22) ^ dw, CamelliaSubkeyL(22) = dw; dw = CamelliaSubkeyL(23) ^ CamelliaSubkeyR(23), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(23) = CamelliaSubkeyL(23) ^ dw, CamelliaSubkeyL(23) = dw; dw = CamelliaSubkeyL(26) ^ CamelliaSubkeyR(26), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(26) = CamelliaSubkeyL(26) ^ dw, CamelliaSubkeyL(26) = dw; dw = CamelliaSubkeyL(27) ^ CamelliaSubkeyR(27), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(27) = CamelliaSubkeyL(27) ^ dw, CamelliaSubkeyL(27) = dw; dw = CamelliaSubkeyL(28) ^ CamelliaSubkeyR(28), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(28) = CamelliaSubkeyL(28) ^ dw, CamelliaSubkeyL(28) = dw; dw = CamelliaSubkeyL(29) ^ CamelliaSubkeyR(29), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(29) = CamelliaSubkeyL(29) ^ dw, CamelliaSubkeyL(29) = dw; dw = CamelliaSubkeyL(30) ^ CamelliaSubkeyR(30), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(30) = CamelliaSubkeyL(30) ^ dw, CamelliaSubkeyL(30) = dw; dw = CamelliaSubkeyL(31) ^ CamelliaSubkeyR(31), dw = CAMELLIA_RL8(dw); CamelliaSubkeyR(31) = CamelliaSubkeyL(31) ^ dw,CamelliaSubkeyL(31) = dw; return; } void camellia_setup192(const unsigned char *key, u32 *subkey) { unsigned char kk[32]; u32 krll, krlr, krrl,krrr; memcpy(kk, key, 24); memcpy((unsigned char *)&krll, key+16,4); memcpy((unsigned char *)&krlr, key+20,4); krrl = ~krll; krrr = ~krlr; memcpy(kk+24, (unsigned char *)&krrl, 4); memcpy(kk+28, (unsigned char *)&krrr, 4); camellia_setup256(kk, subkey); return; } /** * Stuff related to camellia encryption/decryption * * "io" must be 4byte aligned and big-endian data. */ void camellia_encrypt128(const u32 *subkey, u32 *io) { u32 il, ir, t0, t1; /* pre whitening but absorb kw2*/ io[0] ^= CamelliaSubkeyL(0); io[1] ^= CamelliaSubkeyR(0); /* main iteration */ CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(2),CamelliaSubkeyR(2), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(3),CamelliaSubkeyR(3), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(4),CamelliaSubkeyR(4), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(5),CamelliaSubkeyR(5), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(6),CamelliaSubkeyR(6), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(7),CamelliaSubkeyR(7), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(8),CamelliaSubkeyR(8), CamelliaSubkeyL(9),CamelliaSubkeyR(9), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(10),CamelliaSubkeyR(10), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(11),CamelliaSubkeyR(11), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(12),CamelliaSubkeyR(12), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(13),CamelliaSubkeyR(13), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(14),CamelliaSubkeyR(14), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(15),CamelliaSubkeyR(15), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(16),CamelliaSubkeyR(16), CamelliaSubkeyL(17),CamelliaSubkeyR(17), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(18),CamelliaSubkeyR(18), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(19),CamelliaSubkeyR(19), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(20),CamelliaSubkeyR(20), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(21),CamelliaSubkeyR(21), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(22),CamelliaSubkeyR(22), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(23),CamelliaSubkeyR(23), io[0],io[1],il,ir,t0,t1); /* post whitening but kw4 */ io[2] ^= CamelliaSubkeyL(24); io[3] ^= CamelliaSubkeyR(24); t0 = io[0]; t1 = io[1]; io[0] = io[2]; io[1] = io[3]; io[2] = t0; io[3] = t1; return; } void camellia_decrypt128(const u32 *subkey, u32 *io) { u32 il,ir,t0,t1; /* temporary valiables */ /* pre whitening but absorb kw2*/ io[0] ^= CamelliaSubkeyL(24); io[1] ^= CamelliaSubkeyR(24); /* main iteration */ CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(23),CamelliaSubkeyR(23), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(22),CamelliaSubkeyR(22), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(21),CamelliaSubkeyR(21), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(20),CamelliaSubkeyR(20), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(19),CamelliaSubkeyR(19), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(18),CamelliaSubkeyR(18), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(17),CamelliaSubkeyR(17), CamelliaSubkeyL(16),CamelliaSubkeyR(16), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(15),CamelliaSubkeyR(15), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(14),CamelliaSubkeyR(14), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(13),CamelliaSubkeyR(13), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(12),CamelliaSubkeyR(12), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(11),CamelliaSubkeyR(11), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(10),CamelliaSubkeyR(10), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(9),CamelliaSubkeyR(9), CamelliaSubkeyL(8),CamelliaSubkeyR(8), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(7),CamelliaSubkeyR(7), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(6),CamelliaSubkeyR(6), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(5),CamelliaSubkeyR(5), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(4),CamelliaSubkeyR(4), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(3),CamelliaSubkeyR(3), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(2),CamelliaSubkeyR(2), io[0],io[1],il,ir,t0,t1); /* post whitening but kw4 */ io[2] ^= CamelliaSubkeyL(0); io[3] ^= CamelliaSubkeyR(0); t0 = io[0]; t1 = io[1]; io[0] = io[2]; io[1] = io[3]; io[2] = t0; io[3] = t1; return; } /** * stuff for 192 and 256bit encryption/decryption */ void camellia_encrypt256(const u32 *subkey, u32 *io) { u32 il,ir,t0,t1; /* temporary valiables */ /* pre whitening but absorb kw2*/ io[0] ^= CamelliaSubkeyL(0); io[1] ^= CamelliaSubkeyR(0); /* main iteration */ CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(2),CamelliaSubkeyR(2), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(3),CamelliaSubkeyR(3), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(4),CamelliaSubkeyR(4), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(5),CamelliaSubkeyR(5), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(6),CamelliaSubkeyR(6), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(7),CamelliaSubkeyR(7), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(8),CamelliaSubkeyR(8), CamelliaSubkeyL(9),CamelliaSubkeyR(9), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(10),CamelliaSubkeyR(10), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(11),CamelliaSubkeyR(11), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(12),CamelliaSubkeyR(12), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(13),CamelliaSubkeyR(13), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(14),CamelliaSubkeyR(14), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(15),CamelliaSubkeyR(15), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(16),CamelliaSubkeyR(16), CamelliaSubkeyL(17),CamelliaSubkeyR(17), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(18),CamelliaSubkeyR(18), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(19),CamelliaSubkeyR(19), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(20),CamelliaSubkeyR(20), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(21),CamelliaSubkeyR(21), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(22),CamelliaSubkeyR(22), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(23),CamelliaSubkeyR(23), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(24),CamelliaSubkeyR(24), CamelliaSubkeyL(25),CamelliaSubkeyR(25), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(26),CamelliaSubkeyR(26), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(27),CamelliaSubkeyR(27), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(28),CamelliaSubkeyR(28), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(29),CamelliaSubkeyR(29), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(30),CamelliaSubkeyR(30), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(31),CamelliaSubkeyR(31), io[0],io[1],il,ir,t0,t1); /* post whitening but kw4 */ io[2] ^= CamelliaSubkeyL(32); io[3] ^= CamelliaSubkeyR(32); t0 = io[0]; t1 = io[1]; io[0] = io[2]; io[1] = io[3]; io[2] = t0; io[3] = t1; return; } void camellia_decrypt256(const u32 *subkey, u32 *io) { u32 il,ir,t0,t1; /* temporary valiables */ /* pre whitening but absorb kw2*/ io[0] ^= CamelliaSubkeyL(32); io[1] ^= CamelliaSubkeyR(32); /* main iteration */ CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(31),CamelliaSubkeyR(31), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(30),CamelliaSubkeyR(30), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(29),CamelliaSubkeyR(29), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(28),CamelliaSubkeyR(28), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(27),CamelliaSubkeyR(27), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(26),CamelliaSubkeyR(26), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(25),CamelliaSubkeyR(25), CamelliaSubkeyL(24),CamelliaSubkeyR(24), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(23),CamelliaSubkeyR(23), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(22),CamelliaSubkeyR(22), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(21),CamelliaSubkeyR(21), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(20),CamelliaSubkeyR(20), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(19),CamelliaSubkeyR(19), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(18),CamelliaSubkeyR(18), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(17),CamelliaSubkeyR(17), CamelliaSubkeyL(16),CamelliaSubkeyR(16), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(15),CamelliaSubkeyR(15), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(14),CamelliaSubkeyR(14), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(13),CamelliaSubkeyR(13), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(12),CamelliaSubkeyR(12), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(11),CamelliaSubkeyR(11), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(10),CamelliaSubkeyR(10), io[0],io[1],il,ir,t0,t1); CAMELLIA_FLS(io[0],io[1],io[2],io[3], CamelliaSubkeyL(9),CamelliaSubkeyR(9), CamelliaSubkeyL(8),CamelliaSubkeyR(8), t0,t1,il,ir); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(7),CamelliaSubkeyR(7), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(6),CamelliaSubkeyR(6), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(5),CamelliaSubkeyR(5), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(4),CamelliaSubkeyR(4), io[0],io[1],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[0],io[1], CamelliaSubkeyL(3),CamelliaSubkeyR(3), io[2],io[3],il,ir,t0,t1); CAMELLIA_ROUNDSM(io[2],io[3], CamelliaSubkeyL(2),CamelliaSubkeyR(2), io[0],io[1],il,ir,t0,t1); /* post whitening but kw4 */ io[2] ^= CamelliaSubkeyL(0); io[3] ^= CamelliaSubkeyR(0); t0 = io[0]; t1 = io[1]; io[0] = io[2]; io[1] = io[3]; io[2] = t0; io[3] = t1; return; } /*** * * API for compatibility */ void Camellia_Ekeygen(const int keyBitLength, const unsigned char *rawKey, KEY_TABLE_TYPE keyTable) { switch(keyBitLength) { case 128: camellia_setup128(rawKey, keyTable); break; case 192: camellia_setup192(rawKey, keyTable); break; case 256: camellia_setup256(rawKey, keyTable); break; default: break; } } void Camellia_EncryptBlock(const int keyBitLength, const unsigned char *plaintext, const KEY_TABLE_TYPE keyTable, unsigned char *ciphertext) { u32 tmp[4]; tmp[0] = GETU32(plaintext); tmp[1] = GETU32(plaintext + 4); tmp[2] = GETU32(plaintext + 8); tmp[3] = GETU32(plaintext + 12); switch (keyBitLength) { case 128: camellia_encrypt128(keyTable, tmp); break; case 192: /* fall through */ case 256: camellia_encrypt256(keyTable, tmp); break; default: break; } PUTU32(ciphertext, tmp[0]); PUTU32(ciphertext + 4, tmp[1]); PUTU32(ciphertext + 8, tmp[2]); PUTU32(ciphertext + 12, tmp[3]); } void Camellia_DecryptBlock(const int keyBitLength, const unsigned char *ciphertext, const KEY_TABLE_TYPE keyTable, unsigned char *plaintext) { u32 tmp[4]; tmp[0] = GETU32(ciphertext); tmp[1] = GETU32(ciphertext + 4); tmp[2] = GETU32(ciphertext + 8); tmp[3] = GETU32(ciphertext + 12); switch (keyBitLength) { case 128: camellia_decrypt128(keyTable, tmp); break; case 192: /* fall through */ case 256: camellia_decrypt256(keyTable, tmp); break; default: break; } PUTU32(plaintext, tmp[0]); PUTU32(plaintext + 4, tmp[1]); PUTU32(plaintext + 8, tmp[2]); PUTU32(plaintext + 12, tmp[3]); } gnupg-1.4.20/cipher/md5.c0000644000175000017500000002406412635262326011757 00000000000000/* md5.c - MD5 Message-Digest Algorithm * Copyright (C) 1995, 1996, 1998, 1999, * 2000, 2001 Free Software Foundation, Inc. * * This program 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 3, or (at your option) any * later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see . * * According to the definition of MD5 in RFC 1321 from April 1992. * NOTE: This is *not* the same file as the one from glibc. */ /* Written by Ulrich Drepper , 1995. */ /* Heavily modified for GnuPG by */ /* Test values: * "" D4 1D 8C D9 8F 00 B2 04 E9 80 09 98 EC F8 42 7E * "a" 0C C1 75 B9 C0 F1 B6 A8 31 C3 99 E2 69 77 26 61 * "abc 90 01 50 98 3C D2 4F B0 D6 96 3F 7D 28 E1 7F 72 * "message digest" F9 6B 69 7D 7C B7 93 8D 52 5A 2F 31 AA F1 61 D0 */ #include #include #include #include #include #include "util.h" #include "memory.h" #include "algorithms.h" #include "bithelp.h" typedef struct { u32 A,B,C,D; /* chaining variables */ u32 nblocks; byte buf[64]; int count; } MD5_CONTEXT; static void md5_init( MD5_CONTEXT *ctx ) { ctx->A = 0x67452301; ctx->B = 0xefcdab89; ctx->C = 0x98badcfe; ctx->D = 0x10325476; ctx->nblocks = 0; ctx->count = 0; } /* These are the four functions used in the four steps of the MD5 algorithm and defined in the RFC 1321. The first function is a little bit optimized (as found in Colin Plumbs public domain implementation). */ /* #define FF(b, c, d) ((b & c) | (~b & d)) */ #define FF(b, c, d) (d ^ (b & (c ^ d))) #define FG(b, c, d) FF (d, b, c) #define FH(b, c, d) (b ^ c ^ d) #define FI(b, c, d) (c ^ (b | ~d)) static void burn_stack (int bytes) { char buf[128]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } /**************** * transform n*64 bytes */ static void /*transform( MD5_CONTEXT *ctx, const void *buffer, size_t len )*/ transform( MD5_CONTEXT *ctx, byte *data ) { u32 correct_words[16]; u32 A = ctx->A; u32 B = ctx->B; u32 C = ctx->C; u32 D = ctx->D; u32 *cwp = correct_words; #ifdef BIG_ENDIAN_HOST { int i; byte *p2, *p1; for(i=0, p1=data, p2=(byte*)correct_words; i < 16; i++, p2 += 4 ) { p2[3] = *p1++; p2[2] = *p1++; p2[1] = *p1++; p2[0] = *p1++; } } #else memcpy( correct_words, data, 64 ); #endif #define OP(a, b, c, d, s, T) \ do \ { \ a += FF (b, c, d) + (*cwp++) + T; \ a = rol(a, s); \ a += b; \ } \ while (0) /* Before we start, one word about the strange constants. They are defined in RFC 1321 as T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64 */ /* Round 1. */ OP (A, B, C, D, 7, 0xd76aa478); OP (D, A, B, C, 12, 0xe8c7b756); OP (C, D, A, B, 17, 0x242070db); OP (B, C, D, A, 22, 0xc1bdceee); OP (A, B, C, D, 7, 0xf57c0faf); OP (D, A, B, C, 12, 0x4787c62a); OP (C, D, A, B, 17, 0xa8304613); OP (B, C, D, A, 22, 0xfd469501); OP (A, B, C, D, 7, 0x698098d8); OP (D, A, B, C, 12, 0x8b44f7af); OP (C, D, A, B, 17, 0xffff5bb1); OP (B, C, D, A, 22, 0x895cd7be); OP (A, B, C, D, 7, 0x6b901122); OP (D, A, B, C, 12, 0xfd987193); OP (C, D, A, B, 17, 0xa679438e); OP (B, C, D, A, 22, 0x49b40821); #undef OP #define OP(f, a, b, c, d, k, s, T) \ do \ { \ a += f (b, c, d) + correct_words[k] + T; \ a = rol(a, s); \ a += b; \ } \ while (0) /* Round 2. */ OP (FG, A, B, C, D, 1, 5, 0xf61e2562); OP (FG, D, A, B, C, 6, 9, 0xc040b340); OP (FG, C, D, A, B, 11, 14, 0x265e5a51); OP (FG, B, C, D, A, 0, 20, 0xe9b6c7aa); OP (FG, A, B, C, D, 5, 5, 0xd62f105d); OP (FG, D, A, B, C, 10, 9, 0x02441453); OP (FG, C, D, A, B, 15, 14, 0xd8a1e681); OP (FG, B, C, D, A, 4, 20, 0xe7d3fbc8); OP (FG, A, B, C, D, 9, 5, 0x21e1cde6); OP (FG, D, A, B, C, 14, 9, 0xc33707d6); OP (FG, C, D, A, B, 3, 14, 0xf4d50d87); OP (FG, B, C, D, A, 8, 20, 0x455a14ed); OP (FG, A, B, C, D, 13, 5, 0xa9e3e905); OP (FG, D, A, B, C, 2, 9, 0xfcefa3f8); OP (FG, C, D, A, B, 7, 14, 0x676f02d9); OP (FG, B, C, D, A, 12, 20, 0x8d2a4c8a); /* Round 3. */ OP (FH, A, B, C, D, 5, 4, 0xfffa3942); OP (FH, D, A, B, C, 8, 11, 0x8771f681); OP (FH, C, D, A, B, 11, 16, 0x6d9d6122); OP (FH, B, C, D, A, 14, 23, 0xfde5380c); OP (FH, A, B, C, D, 1, 4, 0xa4beea44); OP (FH, D, A, B, C, 4, 11, 0x4bdecfa9); OP (FH, C, D, A, B, 7, 16, 0xf6bb4b60); OP (FH, B, C, D, A, 10, 23, 0xbebfbc70); OP (FH, A, B, C, D, 13, 4, 0x289b7ec6); OP (FH, D, A, B, C, 0, 11, 0xeaa127fa); OP (FH, C, D, A, B, 3, 16, 0xd4ef3085); OP (FH, B, C, D, A, 6, 23, 0x04881d05); OP (FH, A, B, C, D, 9, 4, 0xd9d4d039); OP (FH, D, A, B, C, 12, 11, 0xe6db99e5); OP (FH, C, D, A, B, 15, 16, 0x1fa27cf8); OP (FH, B, C, D, A, 2, 23, 0xc4ac5665); /* Round 4. */ OP (FI, A, B, C, D, 0, 6, 0xf4292244); OP (FI, D, A, B, C, 7, 10, 0x432aff97); OP (FI, C, D, A, B, 14, 15, 0xab9423a7); OP (FI, B, C, D, A, 5, 21, 0xfc93a039); OP (FI, A, B, C, D, 12, 6, 0x655b59c3); OP (FI, D, A, B, C, 3, 10, 0x8f0ccc92); OP (FI, C, D, A, B, 10, 15, 0xffeff47d); OP (FI, B, C, D, A, 1, 21, 0x85845dd1); OP (FI, A, B, C, D, 8, 6, 0x6fa87e4f); OP (FI, D, A, B, C, 15, 10, 0xfe2ce6e0); OP (FI, C, D, A, B, 6, 15, 0xa3014314); OP (FI, B, C, D, A, 13, 21, 0x4e0811a1); OP (FI, A, B, C, D, 4, 6, 0xf7537e82); OP (FI, D, A, B, C, 11, 10, 0xbd3af235); OP (FI, C, D, A, B, 2, 15, 0x2ad7d2bb); OP (FI, B, C, D, A, 9, 21, 0xeb86d391); /* Put checksum in context given as argument. */ ctx->A += A; ctx->B += B; ctx->C += C; ctx->D += D; } /* The routine updates the message-digest context to * account for the presence of each of the characters inBuf[0..inLen-1] * in the message whose digest is being computed. */ static void md5_write( MD5_CONTEXT *hd, byte *inbuf, size_t inlen) { if( hd->count == 64 ) { /* flush the buffer */ transform( hd, hd->buf ); burn_stack (80+6*sizeof(void*)); hd->count = 0; hd->nblocks++; } if( !inbuf ) return; if( hd->count ) { for( ; inlen && hd->count < 64; inlen-- ) hd->buf[hd->count++] = *inbuf++; md5_write( hd, NULL, 0 ); if( !inlen ) return; } while( inlen >= 64 ) { transform( hd, inbuf ); hd->count = 0; hd->nblocks++; inlen -= 64; inbuf += 64; } burn_stack (80+6*sizeof(void*)); for( ; inlen && hd->count < 64; inlen-- ) hd->buf[hd->count++] = *inbuf++; } /* The routine final terminates the message-digest computation and * ends with the desired message digest in mdContext->digest[0...15]. * The handle is prepared for a new MD5 cycle. * Returns 16 bytes representing the digest. */ static void md5_final( MD5_CONTEXT *hd ) { u32 t, msb, lsb; byte *p; md5_write(hd, NULL, 0); /* flush */; t = hd->nblocks; /* multiply by 64 to make a byte count */ lsb = t << 6; msb = t >> 26; /* add the count */ t = lsb; if( (lsb += hd->count) < t ) msb++; /* multiply by 8 to make a bit count */ t = lsb; lsb <<= 3; msb <<= 3; msb |= t >> 29; if( hd->count < 56 ) { /* enough room */ hd->buf[hd->count++] = 0x80; /* pad */ while( hd->count < 56 ) hd->buf[hd->count++] = 0; /* pad */ } else { /* need one extra block */ hd->buf[hd->count++] = 0x80; /* pad character */ while( hd->count < 64 ) hd->buf[hd->count++] = 0; md5_write(hd, NULL, 0); /* flush */; memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ } /* append the 64 bit count */ hd->buf[56] = lsb ; hd->buf[57] = lsb >> 8; hd->buf[58] = lsb >> 16; hd->buf[59] = lsb >> 24; hd->buf[60] = msb ; hd->buf[61] = msb >> 8; hd->buf[62] = msb >> 16; hd->buf[63] = msb >> 24; transform( hd, hd->buf ); burn_stack (80+6*sizeof(void*)); p = hd->buf; #ifdef BIG_ENDIAN_HOST #define X(a) do { *p++ = hd-> a ; *p++ = hd-> a >> 8; \ *p++ = hd-> a >> 16; *p++ = hd-> a >> 24; } while(0) #else /* little endian */ #define X(a) do { *(u32*)p = hd-> a ; p += 4; } while(0) #endif X(A); X(B); X(C); X(D); #undef X } static byte * md5_read( MD5_CONTEXT *hd ) { return hd->buf; } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. */ const char * md5_get_info( int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ) { static byte asn[18] = /* Object ID is 1.2.840.113549.2.5 */ { 0x30, 0x20, 0x30, 0x0c, 0x06, 0x08, 0x2a, 0x86,0x48, 0x86, 0xf7, 0x0d, 0x02, 0x05, 0x05, 0x00, 0x04, 0x10 }; if( algo != 1 ) return NULL; *contextsize = sizeof(MD5_CONTEXT); *r_asnoid = asn; *r_asnlen = DIM(asn); *r_mdlen = 16; *(void (**)(MD5_CONTEXT *))r_init = md5_init; *(void (**)(MD5_CONTEXT *, byte*, size_t))r_write = md5_write; *(void (**)(MD5_CONTEXT *))r_final = md5_final; *(byte *(**)(MD5_CONTEXT *))r_read = md5_read; return "MD5"; } gnupg-1.4.20/cipher/des.c0000644000175000017500000010716412635262326012050 00000000000000/* des.c - DES and Triple-DES encryption/decryption Algorithm * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * * According to the definition of DES in FIPS PUB 46-2 from December 1993. * For a description of triple encryption, see: * Bruce Schneier: Applied Cryptography. Second Edition. * John Wiley & Sons, 1996. ISBN 0-471-12845-7. Pages 358 ff. */ /* * Written by Michael Roth , September 1998 */ /* * U S A G E * =========== * * For DES or Triple-DES encryption/decryption you must initialize a proper * encryption context with a key. * * A DES key is 64bit wide but only 56bits of the key are used. The remaining * bits are parity bits and they will _not_ checked in this implementation, but * simply ignored. * * For Triple-DES you could use either two 64bit keys or three 64bit keys. * The parity bits will _not_ checked, too. * * After initializing a context with a key you could use this context to * encrypt or decrypt data in 64bit blocks in Electronic Codebook Mode. * * (In the examples below the slashes at the beginning and ending of comments * are omited.) * * DES Example * ----------- * unsigned char key[8]; * unsigned char plaintext[8]; * unsigned char ciphertext[8]; * unsigned char recoverd[8]; * des_ctx context; * * * Fill 'key' and 'plaintext' with some data * * .... * * * Set up the DES encryption context * * des_setkey(context, key); * * * Encrypt the plaintext * * des_ecb_encrypt(context, plaintext, ciphertext); * * * To recover the orginal plaintext from ciphertext use: * * des_ecb_decrypt(context, ciphertext, recoverd); * * * Triple-DES Example * ------------------ * unsigned char key1[8]; * unsigned char key2[8]; * unsigned char key3[8]; * unsigned char plaintext[8]; * unsigned char ciphertext[8]; * unsigned char recoverd[8]; * tripledes_ctx context; * * * If you would like to use two 64bit keys, fill 'key1' and'key2' * then setup the encryption context: * * tripledes_set2keys(context, key1, key2); * * * To use three 64bit keys with Triple-DES use: * * tripledes_set3keys(context, key1, key2, key3); * * * Encrypting plaintext with Triple-DES * * tripledes_ecb_encrypt(context, plaintext, ciphertext); * * * Decrypting ciphertext to recover the plaintext with Triple-DES * * tripledes_ecb_decrypt(context, ciphertext, recoverd); * * * Selftest * -------- * char *error_msg; * * * To perform a selftest of this DES/Triple-DES implementation use the * function selftest(). It will return an error string if their are * some problems with this library. * * * if ( (error_msg = selftest()) ) * { * fprintf(stderr, "An error in the DES/Tripple-DES implementation occured: %s\n", error_msg); * abort(); * } */ #include #include #include /* memcpy, memcmp */ #include "types.h" /* for byte and u32 typedefs */ #include "util.h" #include "errors.h" #include "algorithms.h" #if defined(__GNUC__) && defined(__GNU_LIBRARY__) #define working_memcmp memcmp #else /* * According to the SunOS man page, memcmp returns indeterminate sign * depending on whether characters are signed or not. */ int working_memcmp( const char *a, const char *b, size_t n ) { for( ; n; n--, a++, b++ ) if( *a != *b ) return (int)(*(byte*)a) - (int)(*(byte*)b); return 0; } #endif /* Some defines/checks to support standalone modules */ #ifndef CIPHER_ALGO_3DES #define CIPHER_ALGO_3DES 2 #elif CIPHER_ALGO_3DES != 2 #error CIPHER_ALGO_3DES is defined to a wrong value. #endif /* * Encryption/Decryption context of DES */ typedef struct _des_ctx { u32 encrypt_subkeys[32]; u32 decrypt_subkeys[32]; } des_ctx[1]; /* * Encryption/Decryption context of Triple-DES */ typedef struct _tripledes_ctx { u32 encrypt_subkeys[96]; u32 decrypt_subkeys[96]; } tripledes_ctx[1]; static const char *selftest_failed; static void des_key_schedule (const byte *, u32 *); static int des_setkey (struct _des_ctx *, const byte *); static int des_ecb_crypt (struct _des_ctx *, const byte *, byte *, int); static int tripledes_set2keys (struct _tripledes_ctx *, const byte *, const byte *); static int tripledes_set3keys (struct _tripledes_ctx *, const byte *, const byte *, const byte *); static int tripledes_ecb_crypt (struct _tripledes_ctx *, const byte *, byte *, int); static int is_weak_key ( const byte *key ); static const char *selftest (void); /* * The s-box values are permuted according to the 'primitive function P' * and are rotated one bit to the left. */ static u32 sbox1[64] = { 0x01010400, 0x00000000, 0x00010000, 0x01010404, 0x01010004, 0x00010404, 0x00000004, 0x00010000, 0x00000400, 0x01010400, 0x01010404, 0x00000400, 0x01000404, 0x01010004, 0x01000000, 0x00000004, 0x00000404, 0x01000400, 0x01000400, 0x00010400, 0x00010400, 0x01010000, 0x01010000, 0x01000404, 0x00010004, 0x01000004, 0x01000004, 0x00010004, 0x00000000, 0x00000404, 0x00010404, 0x01000000, 0x00010000, 0x01010404, 0x00000004, 0x01010000, 0x01010400, 0x01000000, 0x01000000, 0x00000400, 0x01010004, 0x00010000, 0x00010400, 0x01000004, 0x00000400, 0x00000004, 0x01000404, 0x00010404, 0x01010404, 0x00010004, 0x01010000, 0x01000404, 0x01000004, 0x00000404, 0x00010404, 0x01010400, 0x00000404, 0x01000400, 0x01000400, 0x00000000, 0x00010004, 0x00010400, 0x00000000, 0x01010004 }; static u32 sbox2[64] = { 0x80108020, 0x80008000, 0x00008000, 0x00108020, 0x00100000, 0x00000020, 0x80100020, 0x80008020, 0x80000020, 0x80108020, 0x80108000, 0x80000000, 0x80008000, 0x00100000, 0x00000020, 0x80100020, 0x00108000, 0x00100020, 0x80008020, 0x00000000, 0x80000000, 0x00008000, 0x00108020, 0x80100000, 0x00100020, 0x80000020, 0x00000000, 0x00108000, 0x00008020, 0x80108000, 0x80100000, 0x00008020, 0x00000000, 0x00108020, 0x80100020, 0x00100000, 0x80008020, 0x80100000, 0x80108000, 0x00008000, 0x80100000, 0x80008000, 0x00000020, 0x80108020, 0x00108020, 0x00000020, 0x00008000, 0x80000000, 0x00008020, 0x80108000, 0x00100000, 0x80000020, 0x00100020, 0x80008020, 0x80000020, 0x00100020, 0x00108000, 0x00000000, 0x80008000, 0x00008020, 0x80000000, 0x80100020, 0x80108020, 0x00108000 }; static u32 sbox3[64] = { 0x00000208, 0x08020200, 0x00000000, 0x08020008, 0x08000200, 0x00000000, 0x00020208, 0x08000200, 0x00020008, 0x08000008, 0x08000008, 0x00020000, 0x08020208, 0x00020008, 0x08020000, 0x00000208, 0x08000000, 0x00000008, 0x08020200, 0x00000200, 0x00020200, 0x08020000, 0x08020008, 0x00020208, 0x08000208, 0x00020200, 0x00020000, 0x08000208, 0x00000008, 0x08020208, 0x00000200, 0x08000000, 0x08020200, 0x08000000, 0x00020008, 0x00000208, 0x00020000, 0x08020200, 0x08000200, 0x00000000, 0x00000200, 0x00020008, 0x08020208, 0x08000200, 0x08000008, 0x00000200, 0x00000000, 0x08020008, 0x08000208, 0x00020000, 0x08000000, 0x08020208, 0x00000008, 0x00020208, 0x00020200, 0x08000008, 0x08020000, 0x08000208, 0x00000208, 0x08020000, 0x00020208, 0x00000008, 0x08020008, 0x00020200 }; static u32 sbox4[64] = { 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802080, 0x00800081, 0x00800001, 0x00002001, 0x00000000, 0x00802000, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00800080, 0x00800001, 0x00000001, 0x00002000, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002001, 0x00002080, 0x00800081, 0x00000001, 0x00002080, 0x00800080, 0x00002000, 0x00802080, 0x00802081, 0x00000081, 0x00800080, 0x00800001, 0x00802000, 0x00802081, 0x00000081, 0x00000000, 0x00000000, 0x00802000, 0x00002080, 0x00800080, 0x00800081, 0x00000001, 0x00802001, 0x00002081, 0x00002081, 0x00000080, 0x00802081, 0x00000081, 0x00000001, 0x00002000, 0x00800001, 0x00002001, 0x00802080, 0x00800081, 0x00002001, 0x00002080, 0x00800000, 0x00802001, 0x00000080, 0x00800000, 0x00002000, 0x00802080 }; static u32 sbox5[64] = { 0x00000100, 0x02080100, 0x02080000, 0x42000100, 0x00080000, 0x00000100, 0x40000000, 0x02080000, 0x40080100, 0x00080000, 0x02000100, 0x40080100, 0x42000100, 0x42080000, 0x00080100, 0x40000000, 0x02000000, 0x40080000, 0x40080000, 0x00000000, 0x40000100, 0x42080100, 0x42080100, 0x02000100, 0x42080000, 0x40000100, 0x00000000, 0x42000000, 0x02080100, 0x02000000, 0x42000000, 0x00080100, 0x00080000, 0x42000100, 0x00000100, 0x02000000, 0x40000000, 0x02080000, 0x42000100, 0x40080100, 0x02000100, 0x40000000, 0x42080000, 0x02080100, 0x40080100, 0x00000100, 0x02000000, 0x42080000, 0x42080100, 0x00080100, 0x42000000, 0x42080100, 0x02080000, 0x00000000, 0x40080000, 0x42000000, 0x00080100, 0x02000100, 0x40000100, 0x00080000, 0x00000000, 0x40080000, 0x02080100, 0x40000100 }; static u32 sbox6[64] = { 0x20000010, 0x20400000, 0x00004000, 0x20404010, 0x20400000, 0x00000010, 0x20404010, 0x00400000, 0x20004000, 0x00404010, 0x00400000, 0x20000010, 0x00400010, 0x20004000, 0x20000000, 0x00004010, 0x00000000, 0x00400010, 0x20004010, 0x00004000, 0x00404000, 0x20004010, 0x00000010, 0x20400010, 0x20400010, 0x00000000, 0x00404010, 0x20404000, 0x00004010, 0x00404000, 0x20404000, 0x20000000, 0x20004000, 0x00000010, 0x20400010, 0x00404000, 0x20404010, 0x00400000, 0x00004010, 0x20000010, 0x00400000, 0x20004000, 0x20000000, 0x00004010, 0x20000010, 0x20404010, 0x00404000, 0x20400000, 0x00404010, 0x20404000, 0x00000000, 0x20400010, 0x00000010, 0x00004000, 0x20400000, 0x00404010, 0x00004000, 0x00400010, 0x20004010, 0x00000000, 0x20404000, 0x20000000, 0x00400010, 0x20004010 }; static u32 sbox7[64] = { 0x00200000, 0x04200002, 0x04000802, 0x00000000, 0x00000800, 0x04000802, 0x00200802, 0x04200800, 0x04200802, 0x00200000, 0x00000000, 0x04000002, 0x00000002, 0x04000000, 0x04200002, 0x00000802, 0x04000800, 0x00200802, 0x00200002, 0x04000800, 0x04000002, 0x04200000, 0x04200800, 0x00200002, 0x04200000, 0x00000800, 0x00000802, 0x04200802, 0x00200800, 0x00000002, 0x04000000, 0x00200800, 0x04000000, 0x00200800, 0x00200000, 0x04000802, 0x04000802, 0x04200002, 0x04200002, 0x00000002, 0x00200002, 0x04000000, 0x04000800, 0x00200000, 0x04200800, 0x00000802, 0x00200802, 0x04200800, 0x00000802, 0x04000002, 0x04200802, 0x04200000, 0x00200800, 0x00000000, 0x00000002, 0x04200802, 0x00000000, 0x00200802, 0x04200000, 0x00000800, 0x04000002, 0x04000800, 0x00000800, 0x00200002 }; static u32 sbox8[64] = { 0x10001040, 0x00001000, 0x00040000, 0x10041040, 0x10000000, 0x10001040, 0x00000040, 0x10000000, 0x00040040, 0x10040000, 0x10041040, 0x00041000, 0x10041000, 0x00041040, 0x00001000, 0x00000040, 0x10040000, 0x10000040, 0x10001000, 0x00001040, 0x00041000, 0x00040040, 0x10040040, 0x10041000, 0x00001040, 0x00000000, 0x00000000, 0x10040040, 0x10000040, 0x10001000, 0x00041040, 0x00040000, 0x00041040, 0x00040000, 0x10041000, 0x00001000, 0x00000040, 0x10040040, 0x00001000, 0x00041040, 0x10001000, 0x00000040, 0x10000040, 0x10040000, 0x10040040, 0x10000000, 0x00040000, 0x10001040, 0x00000000, 0x10041040, 0x00040040, 0x10000040, 0x10040000, 0x10001000, 0x10001040, 0x00000000, 0x10041040, 0x00041000, 0x00041000, 0x00001040, 0x00001040, 0x00040040, 0x10000000, 0x10041000 }; /* * These two tables are part of the 'permuted choice 1' function. * In this implementation several speed improvements are done. */ u32 leftkey_swap[16] = { 0x00000000, 0x00000001, 0x00000100, 0x00000101, 0x00010000, 0x00010001, 0x00010100, 0x00010101, 0x01000000, 0x01000001, 0x01000100, 0x01000101, 0x01010000, 0x01010001, 0x01010100, 0x01010101 }; u32 rightkey_swap[16] = { 0x00000000, 0x01000000, 0x00010000, 0x01010000, 0x00000100, 0x01000100, 0x00010100, 0x01010100, 0x00000001, 0x01000001, 0x00010001, 0x01010001, 0x00000101, 0x01000101, 0x00010101, 0x01010101, }; /* * Numbers of left shifts per round for encryption subkeys. * To calculate the decryption subkeys we just reverse the * ordering of the calculated encryption subkeys. So their * is no need for a decryption rotate tab. */ static byte encrypt_rotate_tab[16] = { 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1 }; /* * Table with weak DES keys sorted in ascending order. * In DES their are 64 known keys wich are weak. They are weak * because they produce only one, two or four different * subkeys in the subkey scheduling process. * The keys in this table have all their parity bits cleared. */ static byte weak_keys[64][8] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x00, 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e }, { 0x00, 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0 }, { 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe }, { 0x00, 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e }, { 0x00, 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00 }, { 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe }, { 0x00, 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0 }, { 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0 }, { 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe }, { 0x00, 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00 }, { 0x00, 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e }, { 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe }, { 0x00, 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0 }, { 0x00, 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e }, { 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00 }, { 0x0e, 0x0e, 0x0e, 0x0e, 0xf0, 0xf0, 0xf0, 0xf0 }, { 0x1e, 0x00, 0x00, 0x1e, 0x0e, 0x00, 0x00, 0x0e }, { 0x1e, 0x00, 0x1e, 0x00, 0x0e, 0x00, 0x0e, 0x00 }, { 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0, 0xfe }, { 0x1e, 0x00, 0xfe, 0xe0, 0x0e, 0x00, 0xfe, 0xf0 }, { 0x1e, 0x1e, 0x00, 0x00, 0x0e, 0x0e, 0x00, 0x00 }, { 0x1e, 0x1e, 0x1e, 0x1e, 0x0e, 0x0e, 0x0e, 0x0e }, { 0x1e, 0x1e, 0xe0, 0xe0, 0x0e, 0x0e, 0xf0, 0xf0 }, { 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe, 0xfe }, { 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00, 0xfe }, { 0x1e, 0xe0, 0x1e, 0xe0, 0x0e, 0xf0, 0x0e, 0xf0 }, { 0x1e, 0xe0, 0xe0, 0x1e, 0x0e, 0xf0, 0xf0, 0x0e }, { 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0, 0xfe, 0x00 }, { 0x1e, 0xfe, 0x00, 0xe0, 0x0e, 0xfe, 0x00, 0xf0 }, { 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e, 0xfe }, { 0x1e, 0xfe, 0xe0, 0x00, 0x0e, 0xfe, 0xf0, 0x00 }, { 0x1e, 0xfe, 0xfe, 0x1e, 0x0e, 0xfe, 0xfe, 0x0e }, { 0xe0, 0x00, 0x00, 0xe0, 0xf0, 0x00, 0x00, 0xf0 }, { 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e, 0xfe }, { 0xe0, 0x00, 0xe0, 0x00, 0xf0, 0x00, 0xf0, 0x00 }, { 0xe0, 0x00, 0xfe, 0x1e, 0xf0, 0x00, 0xfe, 0x0e }, { 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00, 0xfe }, { 0xe0, 0x1e, 0x1e, 0xe0, 0xf0, 0x0e, 0x0e, 0xf0 }, { 0xe0, 0x1e, 0xe0, 0x1e, 0xf0, 0x0e, 0xf0, 0x0e }, { 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e, 0xfe, 0x00 }, { 0xe0, 0xe0, 0x00, 0x00, 0xf0, 0xf0, 0x00, 0x00 }, { 0xe0, 0xe0, 0x1e, 0x1e, 0xf0, 0xf0, 0x0e, 0x0e }, { 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe, 0xfe }, { 0xe0, 0xfe, 0x00, 0x1e, 0xf0, 0xfe, 0x00, 0x0e }, { 0xe0, 0xfe, 0x1e, 0x00, 0xf0, 0xfe, 0x0e, 0x00 }, { 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0, 0xfe }, { 0xe0, 0xfe, 0xfe, 0xe0, 0xf0, 0xfe, 0xfe, 0xf0 }, { 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00, 0xfe }, { 0xfe, 0x00, 0x1e, 0xe0, 0xfe, 0x00, 0x0e, 0xf0 }, { 0xfe, 0x00, 0xe0, 0x1e, 0xfe, 0x00, 0xf0, 0x0e }, { 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0xfe, 0x00 }, { 0xfe, 0x1e, 0x00, 0xe0, 0xfe, 0x0e, 0x00, 0xf0 }, { 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e, 0xfe }, { 0xfe, 0x1e, 0xe0, 0x00, 0xfe, 0x0e, 0xf0, 0x00 }, { 0xfe, 0x1e, 0xfe, 0x1e, 0xfe, 0x0e, 0xfe, 0x0e }, { 0xfe, 0xe0, 0x00, 0x1e, 0xfe, 0xf0, 0x00, 0x0e }, { 0xfe, 0xe0, 0x1e, 0x00, 0xfe, 0xf0, 0x0e, 0x00 }, { 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0, 0xfe }, { 0xfe, 0xe0, 0xfe, 0xe0, 0xfe, 0xf0, 0xfe, 0xf0 }, { 0xfe, 0xfe, 0x00, 0x00, 0xfe, 0xfe, 0x00, 0x00 }, { 0xfe, 0xfe, 0x1e, 0x1e, 0xfe, 0xfe, 0x0e, 0x0e }, { 0xfe, 0xfe, 0xe0, 0xe0, 0xfe, 0xfe, 0xf0, 0xf0 }, { 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe } }; /* * Macro to swap bits across two words. */ #define DO_PERMUTATION(a, temp, b, offset, mask) \ temp = ((a>>offset) ^ b) & mask; \ b ^= temp; \ a ^= temp<> 31); \ temp = (left ^ right) & 0xaaaaaaaa; \ right ^= temp; \ left ^= temp; \ left = (left << 1) | (left >> 31); /* * The 'inverse initial permutation'. */ #define FINAL_PERMUTATION(left, temp, right) \ left = (left << 31) | (left >> 1); \ temp = (left ^ right) & 0xaaaaaaaa; \ left ^= temp; \ right ^= temp; \ right = (right << 31) | (right >> 1); \ DO_PERMUTATION(right, temp, left, 8, 0x00ff00ff) \ DO_PERMUTATION(right, temp, left, 2, 0x33333333) \ DO_PERMUTATION(left, temp, right, 16, 0x0000ffff) \ DO_PERMUTATION(left, temp, right, 4, 0x0f0f0f0f) /* * A full DES round including 'expansion function', 'sbox substitution' * and 'primitive function P' but without swapping the left and right word. * Please note: The data in 'from' and 'to' is already rotated one bit to * the left, done in the initial permutation. */ #define DES_ROUND(from, to, work, subkey) \ work = from ^ *subkey++; \ to ^= sbox8[ work & 0x3f ]; \ to ^= sbox6[ (work>>8) & 0x3f ]; \ to ^= sbox4[ (work>>16) & 0x3f ]; \ to ^= sbox2[ (work>>24) & 0x3f ]; \ work = ((from << 28) | (from >> 4)) ^ *subkey++; \ to ^= sbox7[ work & 0x3f ]; \ to ^= sbox5[ (work>>8) & 0x3f ]; \ to ^= sbox3[ (work>>16) & 0x3f ]; \ to ^= sbox1[ (work>>24) & 0x3f ]; /* * Macros to convert 8 bytes from/to 32bit words. */ #define READ_64BIT_DATA(data, left, right) \ left = (data[0] << 24) | (data[1] << 16) | (data[2] << 8) | data[3]; \ right = (data[4] << 24) | (data[5] << 16) | (data[6] << 8) | data[7]; #define WRITE_64BIT_DATA(data, left, right) \ data[0] = (left >> 24) &0xff; data[1] = (left >> 16) &0xff; \ data[2] = (left >> 8) &0xff; data[3] = left &0xff; \ data[4] = (right >> 24) &0xff; data[5] = (right >> 16) &0xff; \ data[6] = (right >> 8) &0xff; data[7] = right &0xff; /* * Handy macros for encryption and decryption of data */ #define des_ecb_encrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 0) #define des_ecb_decrypt(ctx, from, to) des_ecb_crypt(ctx, from, to, 1) #define tripledes_ecb_encrypt(ctx, from, to) tripledes_ecb_crypt(ctx, from, to, 0) #define tripledes_ecb_decrypt(ctx, from, to) tripledes_ecb_crypt(ctx, from, to, 1) static void burn_stack (int bytes) { char buf[64]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } /* * des_key_schedule(): Calculate 16 subkeys pairs (even/odd) for * 16 encryption rounds. * To calculate subkeys for decryption the caller * have to reorder the generated subkeys. * * rawkey: 8 Bytes of key data * subkey: Array of at least 32 u32s. Will be filled * with calculated subkeys. * */ static void des_key_schedule (const byte * rawkey, u32 * subkey) { u32 left, right, work; int round; READ_64BIT_DATA (rawkey, left, right) DO_PERMUTATION (right, work, left, 4, 0x0f0f0f0f) DO_PERMUTATION (right, work, left, 0, 0x10101010) left = (leftkey_swap[(left >> 0) & 0xf] << 3) | (leftkey_swap[(left >> 8) & 0xf] << 2) | (leftkey_swap[(left >> 16) & 0xf] << 1) | (leftkey_swap[(left >> 24) & 0xf]) | (leftkey_swap[(left >> 5) & 0xf] << 7) | (leftkey_swap[(left >> 13) & 0xf] << 6) | (leftkey_swap[(left >> 21) & 0xf] << 5) | (leftkey_swap[(left >> 29) & 0xf] << 4); left &= 0x0fffffff; right = (rightkey_swap[(right >> 1) & 0xf] << 3) | (rightkey_swap[(right >> 9) & 0xf] << 2) | (rightkey_swap[(right >> 17) & 0xf] << 1) | (rightkey_swap[(right >> 25) & 0xf]) | (rightkey_swap[(right >> 4) & 0xf] << 7) | (rightkey_swap[(right >> 12) & 0xf] << 6) | (rightkey_swap[(right >> 20) & 0xf] << 5) | (rightkey_swap[(right >> 28) & 0xf] << 4); right &= 0x0fffffff; for (round = 0; round < 16; ++round) { left = ((left << encrypt_rotate_tab[round]) | (left >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; right = ((right << encrypt_rotate_tab[round]) | (right >> (28 - encrypt_rotate_tab[round]))) & 0x0fffffff; *subkey++ = ((left << 4) & 0x24000000) | ((left << 28) & 0x10000000) | ((left << 14) & 0x08000000) | ((left << 18) & 0x02080000) | ((left << 6) & 0x01000000) | ((left << 9) & 0x00200000) | ((left >> 1) & 0x00100000) | ((left << 10) & 0x00040000) | ((left << 2) & 0x00020000) | ((left >> 10) & 0x00010000) | ((right >> 13) & 0x00002000) | ((right >> 4) & 0x00001000) | ((right << 6) & 0x00000800) | ((right >> 1) & 0x00000400) | ((right >> 14) & 0x00000200) | (right & 0x00000100) | ((right >> 5) & 0x00000020) | ((right >> 10) & 0x00000010) | ((right >> 3) & 0x00000008) | ((right >> 18) & 0x00000004) | ((right >> 26) & 0x00000002) | ((right >> 24) & 0x00000001); *subkey++ = ((left << 15) & 0x20000000) | ((left << 17) & 0x10000000) | ((left << 10) & 0x08000000) | ((left << 22) & 0x04000000) | ((left >> 2) & 0x02000000) | ((left << 1) & 0x01000000) | ((left << 16) & 0x00200000) | ((left << 11) & 0x00100000) | ((left << 3) & 0x00080000) | ((left >> 6) & 0x00040000) | ((left << 15) & 0x00020000) | ((left >> 4) & 0x00010000) | ((right >> 2) & 0x00002000) | ((right << 8) & 0x00001000) | ((right >> 14) & 0x00000808) | ((right >> 9) & 0x00000400) | ((right) & 0x00000200) | ((right << 7) & 0x00000100) | ((right >> 7) & 0x00000020) | ((right >> 3) & 0x00000011) | ((right << 2) & 0x00000004) | ((right >> 21) & 0x00000002); } } /* * Fill a DES context with subkeys calculated from a 64bit key. * Does not check parity bits, but simply ignore them. * Does not check for weak keys. */ static int des_setkey (struct _des_ctx *ctx, const byte * key) { int i; if( selftest_failed ) return G10ERR_SELFTEST_FAILED; des_key_schedule (key, ctx->encrypt_subkeys); burn_stack (32); for(i=0; i<32; i+=2) { ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i]; ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i]; } return 0; } /* * Electronic Codebook Mode DES encryption/decryption of data according * to 'mode'. */ static int des_ecb_crypt (struct _des_ctx *ctx, const byte * from, byte * to, int mode) { u32 left, right, work; u32 *keys; keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; READ_64BIT_DATA (from, left, right) INITIAL_PERMUTATION (left, work, right) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) FINAL_PERMUTATION (right, work, left) WRITE_64BIT_DATA (to, right, left) return 0; } /* * Fill a Triple-DES context with subkeys calculated from two 64bit keys. * Does not check the parity bits of the keys, but simply ignore them. * Does not check for weak keys. */ static int tripledes_set2keys (struct _tripledes_ctx *ctx, const byte * key1, const byte * key2) { int i; des_key_schedule (key1, ctx->encrypt_subkeys); des_key_schedule (key2, &(ctx->decrypt_subkeys[32])); burn_stack (32); for(i=0; i<32; i+=2) { ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[30-i]; ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[31-i]; ctx->encrypt_subkeys[i+32] = ctx->decrypt_subkeys[62-i]; ctx->encrypt_subkeys[i+33] = ctx->decrypt_subkeys[63-i]; ctx->encrypt_subkeys[i+64] = ctx->encrypt_subkeys[i]; ctx->encrypt_subkeys[i+65] = ctx->encrypt_subkeys[i+1]; ctx->decrypt_subkeys[i+64] = ctx->decrypt_subkeys[i]; ctx->decrypt_subkeys[i+65] = ctx->decrypt_subkeys[i+1]; } return 0; } /* * Fill a Triple-DES context with subkeys calculated from three 64bit keys. * Does not check the parity bits of the keys, but simply ignore them. * Does not check for weak keys. */ static int tripledes_set3keys (struct _tripledes_ctx *ctx, const byte * key1, const byte * key2, const byte * key3) { int i; des_key_schedule (key1, ctx->encrypt_subkeys); des_key_schedule (key2, &(ctx->decrypt_subkeys[32])); des_key_schedule (key3, &(ctx->encrypt_subkeys[64])); burn_stack (32); for(i=0; i<32; i+=2) { ctx->decrypt_subkeys[i] = ctx->encrypt_subkeys[94-i]; ctx->decrypt_subkeys[i+1] = ctx->encrypt_subkeys[95-i]; ctx->encrypt_subkeys[i+32] = ctx->decrypt_subkeys[62-i]; ctx->encrypt_subkeys[i+33] = ctx->decrypt_subkeys[63-i]; ctx->decrypt_subkeys[i+64] = ctx->encrypt_subkeys[30-i]; ctx->decrypt_subkeys[i+65] = ctx->encrypt_subkeys[31-i]; } return 0; } /* * Electronic Codebook Mode Triple-DES encryption/decryption of data according to 'mode'. * Sometimes this mode is named 'EDE' mode (Encryption-Decryption-Encryption). */ static int tripledes_ecb_crypt (struct _tripledes_ctx *ctx, const byte * from, byte * to, int mode) { u32 left, right, work; u32 *keys; keys = mode ? ctx->decrypt_subkeys : ctx->encrypt_subkeys; READ_64BIT_DATA (from, left, right) INITIAL_PERMUTATION (left, work, right) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) DES_ROUND (right, left, work, keys) DES_ROUND (left, right, work, keys) FINAL_PERMUTATION (right, work, left) WRITE_64BIT_DATA (to, right, left) return 0; } /* * Check whether the 8 byte key is weak. * Dose not check the parity bits of the key but simple ignore them. */ static int is_weak_key ( const byte *key ) { byte work[8]; int i, left, right, middle, cmp_result; /* clear parity bits */ for(i=0; i<8; ++i) work[i] = key[i] & 0xfe; /* binary search in the weak key table */ left = 0; right = 63; while(left <= right) { middle = (left + right) / 2; if ( !(cmp_result=working_memcmp(work, weak_keys[middle], 8)) ) return -1; if ( cmp_result > 0 ) left = middle + 1; else right = middle - 1; } return 0; } /* * Performs a selftest of this DES/Triple-DES implementation. * Returns an string with the error text on failure. * Returns NULL if all is ok. */ static const char * selftest (void) { /* * Check if 'u32' is really 32 bits wide. This DES / 3DES implementation * need this. */ if (sizeof (u32) != 4) return "Wrong word size for DES configured."; /* * DES Maintenance Test */ { int i; byte key[8] = {0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55}; byte input[8] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}; byte result[8] = {0x24, 0x6e, 0x9d, 0xb9, 0xc5, 0x50, 0x38, 0x1a}; byte temp1[8], temp2[8], temp3[8]; des_ctx des; for (i = 0; i < 64; ++i) { des_setkey (des, key); des_ecb_encrypt (des, input, temp1); des_ecb_encrypt (des, temp1, temp2); des_setkey (des, temp2); des_ecb_decrypt (des, temp1, temp3); memcpy (key, temp3, 8); memcpy (input, temp1, 8); } if (memcmp (temp3, result, 8)) return "DES maintenance test failed."; } /* * Self made Triple-DES test (Does somebody known an official test?) */ { int i; byte input[8] = {0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10}; byte key1[8] = {0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0}; byte key2[8] = {0x11, 0x22, 0x33, 0x44, 0xff, 0xaa, 0xcc, 0xdd}; byte result[8] = {0x7b, 0x38, 0x3b, 0x23, 0xa2, 0x7d, 0x26, 0xd3}; tripledes_ctx des3; for (i = 0; i < 16; ++i) { tripledes_set2keys (des3, key1, key2); tripledes_ecb_encrypt (des3, input, key1); tripledes_ecb_decrypt (des3, input, key2); tripledes_set3keys (des3, key1, input, key2); tripledes_ecb_encrypt (des3, input, input); } if (memcmp (input, result, 8)) return "Triple-DES test failed."; } /* * More Triple-DES test. These are testvectors as used by SSLeay, * thanks to Jeroen C. van Gelderen. */ { struct { byte key[24]; byte plain[8]; byte cipher[8]; } testdata[] = { { { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 }, { 0x95,0xF8,0xA5,0xE5,0xDD,0x31,0xD9,0x00 }, { 0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00 } }, { { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01 }, { 0x9D,0x64,0x55,0x5A,0x9A,0x10,0xB8,0x52, }, { 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00 } }, { { 0x38,0x49,0x67,0x4C,0x26,0x02,0x31,0x9E, 0x38,0x49,0x67,0x4C,0x26,0x02,0x31,0x9E, 0x38,0x49,0x67,0x4C,0x26,0x02,0x31,0x9E }, { 0x51,0x45,0x4B,0x58,0x2D,0xDF,0x44,0x0A }, { 0x71,0x78,0x87,0x6E,0x01,0xF1,0x9B,0x2A } }, { { 0x04,0xB9,0x15,0xBA,0x43,0xFE,0xB5,0xB6, 0x04,0xB9,0x15,0xBA,0x43,0xFE,0xB5,0xB6, 0x04,0xB9,0x15,0xBA,0x43,0xFE,0xB5,0xB6 }, { 0x42,0xFD,0x44,0x30,0x59,0x57,0x7F,0xA2 }, { 0xAF,0x37,0xFB,0x42,0x1F,0x8C,0x40,0x95 } }, { { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF }, { 0x73,0x6F,0x6D,0x65,0x64,0x61,0x74,0x61 }, { 0x3D,0x12,0x4F,0xE2,0x19,0x8B,0xA3,0x18 } }, { { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF }, { 0x73,0x6F,0x6D,0x65,0x64,0x61,0x74,0x61 }, { 0xFB,0xAB,0xA1,0xFF,0x9D,0x05,0xE9,0xB1 } }, { { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF, 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55, 0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10 }, { 0x73,0x6F,0x6D,0x65,0x64,0x61,0x74,0x61 }, { 0x18,0xd7,0x48,0xe5,0x63,0x62,0x05,0x72 } }, { { 0x03,0x52,0x02,0x07,0x67,0x20,0x82,0x17, 0x86,0x02,0x87,0x66,0x59,0x08,0x21,0x98, 0x64,0x05,0x6A,0xBD,0xFE,0xA9,0x34,0x57 }, { 0x73,0x71,0x75,0x69,0x67,0x67,0x6C,0x65 }, { 0xc0,0x7d,0x2a,0x0f,0xa5,0x66,0xfa,0x30 } }, { { 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x80,0x01,0x01,0x01,0x01,0x01,0x01,0x01, 0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x02 }, { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, { 0xe6,0xe6,0xdd,0x5b,0x7e,0x72,0x29,0x74 } }, { { 0x10,0x46,0x10,0x34,0x89,0x98,0x80,0x20, 0x91,0x07,0xD0,0x15,0x89,0x19,0x01,0x01, 0x19,0x07,0x92,0x10,0x98,0x1A,0x01,0x01 }, { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 }, { 0xe1,0xef,0x62,0xc3,0x32,0xfe,0x82,0x5b } } }; byte result[8]; int i; static char error[80]; tripledes_ctx des3; for (i=0; i. */ #include #include #include #include #include #include "util.h" #include "memory.h" #include "rmd.h" #include "cipher.h" /* for rmd160_hash_buffer */ #include "algorithms.h" #include "bithelp.h" /********************************* * RIPEMD-160 is not patented, see (as of 25.10.97) * http://www.esat.kuleuven.ac.be/~bosselae/ripemd160.html * Note that the code uses Little Endian byteorder, which is good for * 386 etc, but we must add some conversion when used on a big endian box. * * * Pseudo-code for RIPEMD-160 * * RIPEMD-160 is an iterative hash function that operates on 32-bit words. * The round function takes as input a 5-word chaining variable and a 16-word * message block and maps this to a new chaining variable. All operations are * defined on 32-bit words. Padding is identical to that of MD4. * * * RIPEMD-160: definitions * * * nonlinear functions at bit level: exor, mux, -, mux, - * * f(j, x, y, z) = x XOR y XOR z (0 <= j <= 15) * f(j, x, y, z) = (x AND y) OR (NOT(x) AND z) (16 <= j <= 31) * f(j, x, y, z) = (x OR NOT(y)) XOR z (32 <= j <= 47) * f(j, x, y, z) = (x AND z) OR (y AND NOT(z)) (48 <= j <= 63) * f(j, x, y, z) = x XOR (y OR NOT(z)) (64 <= j <= 79) * * * added constants (hexadecimal) * * K(j) = 0x00000000 (0 <= j <= 15) * K(j) = 0x5A827999 (16 <= j <= 31) int(2**30 x sqrt(2)) * K(j) = 0x6ED9EBA1 (32 <= j <= 47) int(2**30 x sqrt(3)) * K(j) = 0x8F1BBCDC (48 <= j <= 63) int(2**30 x sqrt(5)) * K(j) = 0xA953FD4E (64 <= j <= 79) int(2**30 x sqrt(7)) * K'(j) = 0x50A28BE6 (0 <= j <= 15) int(2**30 x cbrt(2)) * K'(j) = 0x5C4DD124 (16 <= j <= 31) int(2**30 x cbrt(3)) * K'(j) = 0x6D703EF3 (32 <= j <= 47) int(2**30 x cbrt(5)) * K'(j) = 0x7A6D76E9 (48 <= j <= 63) int(2**30 x cbrt(7)) * K'(j) = 0x00000000 (64 <= j <= 79) * * * selection of message word * * r(j) = j (0 <= j <= 15) * r(16..31) = 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8 * r(32..47) = 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12 * r(48..63) = 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2 * r(64..79) = 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 * r0(0..15) = 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12 * r0(16..31)= 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2 * r0(32..47)= 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13 * r0(48..63)= 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14 * r0(64..79)= 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 * * * amount for rotate left (rol) * * s(0..15) = 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8 * s(16..31) = 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12 * s(32..47) = 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5 * s(48..63) = 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12 * s(64..79) = 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 * s'(0..15) = 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6 * s'(16..31)= 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11 * s'(32..47)= 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5 * s'(48..63)= 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8 * s'(64..79)= 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 * * * initial value (hexadecimal) * * h0 = 0x67452301; h1 = 0xEFCDAB89; h2 = 0x98BADCFE; h3 = 0x10325476; * h4 = 0xC3D2E1F0; * * * RIPEMD-160: pseudo-code * * It is assumed that the message after padding consists of t 16-word blocks * that will be denoted with X[i][j], with 0 <= i <= t-1 and 0 <= j <= 15. * The symbol [+] denotes addition modulo 2**32 and rol_s denotes cyclic left * shift (rotate) over s positions. * * * for i := 0 to t-1 { * A := h0; B := h1; C := h2; D = h3; E = h4; * A' := h0; B' := h1; C' := h2; D' = h3; E' = h4; * for j := 0 to 79 { * T := rol_s(j)(A [+] f(j, B, C, D) [+] X[i][r(j)] [+] K(j)) [+] E; * A := E; E := D; D := rol_10(C); C := B; B := T; * T := rol_s'(j)(A' [+] f(79-j, B', C', D') [+] X[i][r'(j)] [+] K'(j)) [+] E'; * A' := E'; E' := D'; D' := rol_10(C'); C' := B'; B' := T; * } * T := h1 [+] C [+] D'; h1 := h2 [+] D [+] E'; h2 := h3 [+] E [+] A'; * h3 := h4 [+] A [+] B'; h4 := h0 [+] B [+] C'; h0 := T; * } */ /* Some examples: * "" 9c1185a5c5e9fc54612808977ee8f548b2258d31 * "a" 0bdc9d2d256b3ee9daae347be6f4dc835a467ffe * "abc" 8eb208f7e05d987a9b044a8e98c6b087f15a0bfc * "message digest" 5d0689ef49d2fae572b881b123a85ffa21595f36 * "a...z" f71c27109c692c1b56bbdceb5b9d2865b3708dbc * "abcdbcde...nopq" 12a053384a9c0c88e405a06c27dcf49ada62eb2b * "A...Za...z0...9" b0e20b6e3116640286ed3a87a5713079b21f5189 * 8 times "1234567890" 9b752e45573d4b39f4dbd3323cab82bf63326bfb * 1 million times "a" 52783243c1697bdbe16d37f97f68f08325dc1528 */ static void burn_stack (int bytes) { char buf[150]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } void rmd160_init( RMD160_CONTEXT *hd ) { hd->h0 = 0x67452301; hd->h1 = 0xEFCDAB89; hd->h2 = 0x98BADCFE; hd->h3 = 0x10325476; hd->h4 = 0xC3D2E1F0; hd->nblocks = 0; hd->count = 0; } /**************** * Transform the message X which consists of 16 32-bit-words */ static void transform( RMD160_CONTEXT *hd, byte *data ) { u32 a,b,c,d,e,aa,bb,cc,dd,ee,t; #ifdef BIG_ENDIAN_HOST u32 x[16]; { int i; byte *p2, *p1; for(i=0, p1=data, p2=(byte*)x; i < 16; i++, p2 += 4 ) { p2[3] = *p1++; p2[2] = *p1++; p2[1] = *p1++; p2[0] = *p1++; } } #else #if 0 u32 *x =(u32*)data; #else /* this version is better because it is always aligned; * The performance penalty on a 586-100 is about 6% which * is acceptable - because the data is more local it might * also be possible that this is faster on some machines. * This function (when compiled with -02 on gcc 2.7.2) * executes on a 586-100 (39.73 bogomips) at about 1900kb/sec; * [measured with a 4MB data and "gpgm --print-md rmd160"] */ u32 x[16]; memcpy( x, data, 64 ); #endif #endif #define K0 0x00000000 #define K1 0x5A827999 #define K2 0x6ED9EBA1 #define K3 0x8F1BBCDC #define K4 0xA953FD4E #define KK0 0x50A28BE6 #define KK1 0x5C4DD124 #define KK2 0x6D703EF3 #define KK3 0x7A6D76E9 #define KK4 0x00000000 #define F0(x,y,z) ( (x) ^ (y) ^ (z) ) #define F1(x,y,z) ( ((x) & (y)) | (~(x) & (z)) ) #define F2(x,y,z) ( ((x) | ~(y)) ^ (z) ) #define F3(x,y,z) ( ((x) & (z)) | ((y) & ~(z)) ) #define F4(x,y,z) ( (x) ^ ((y) | ~(z)) ) #define R(a,b,c,d,e,f,k,r,s) do { t = a + f(b,c,d) + k + x[r]; \ a = rol(t,s) + e; \ c = rol(c,10); \ } while(0) /* left lane */ a = hd->h0; b = hd->h1; c = hd->h2; d = hd->h3; e = hd->h4; R( a, b, c, d, e, F0, K0, 0, 11 ); R( e, a, b, c, d, F0, K0, 1, 14 ); R( d, e, a, b, c, F0, K0, 2, 15 ); R( c, d, e, a, b, F0, K0, 3, 12 ); R( b, c, d, e, a, F0, K0, 4, 5 ); R( a, b, c, d, e, F0, K0, 5, 8 ); R( e, a, b, c, d, F0, K0, 6, 7 ); R( d, e, a, b, c, F0, K0, 7, 9 ); R( c, d, e, a, b, F0, K0, 8, 11 ); R( b, c, d, e, a, F0, K0, 9, 13 ); R( a, b, c, d, e, F0, K0, 10, 14 ); R( e, a, b, c, d, F0, K0, 11, 15 ); R( d, e, a, b, c, F0, K0, 12, 6 ); R( c, d, e, a, b, F0, K0, 13, 7 ); R( b, c, d, e, a, F0, K0, 14, 9 ); R( a, b, c, d, e, F0, K0, 15, 8 ); R( e, a, b, c, d, F1, K1, 7, 7 ); R( d, e, a, b, c, F1, K1, 4, 6 ); R( c, d, e, a, b, F1, K1, 13, 8 ); R( b, c, d, e, a, F1, K1, 1, 13 ); R( a, b, c, d, e, F1, K1, 10, 11 ); R( e, a, b, c, d, F1, K1, 6, 9 ); R( d, e, a, b, c, F1, K1, 15, 7 ); R( c, d, e, a, b, F1, K1, 3, 15 ); R( b, c, d, e, a, F1, K1, 12, 7 ); R( a, b, c, d, e, F1, K1, 0, 12 ); R( e, a, b, c, d, F1, K1, 9, 15 ); R( d, e, a, b, c, F1, K1, 5, 9 ); R( c, d, e, a, b, F1, K1, 2, 11 ); R( b, c, d, e, a, F1, K1, 14, 7 ); R( a, b, c, d, e, F1, K1, 11, 13 ); R( e, a, b, c, d, F1, K1, 8, 12 ); R( d, e, a, b, c, F2, K2, 3, 11 ); R( c, d, e, a, b, F2, K2, 10, 13 ); R( b, c, d, e, a, F2, K2, 14, 6 ); R( a, b, c, d, e, F2, K2, 4, 7 ); R( e, a, b, c, d, F2, K2, 9, 14 ); R( d, e, a, b, c, F2, K2, 15, 9 ); R( c, d, e, a, b, F2, K2, 8, 13 ); R( b, c, d, e, a, F2, K2, 1, 15 ); R( a, b, c, d, e, F2, K2, 2, 14 ); R( e, a, b, c, d, F2, K2, 7, 8 ); R( d, e, a, b, c, F2, K2, 0, 13 ); R( c, d, e, a, b, F2, K2, 6, 6 ); R( b, c, d, e, a, F2, K2, 13, 5 ); R( a, b, c, d, e, F2, K2, 11, 12 ); R( e, a, b, c, d, F2, K2, 5, 7 ); R( d, e, a, b, c, F2, K2, 12, 5 ); R( c, d, e, a, b, F3, K3, 1, 11 ); R( b, c, d, e, a, F3, K3, 9, 12 ); R( a, b, c, d, e, F3, K3, 11, 14 ); R( e, a, b, c, d, F3, K3, 10, 15 ); R( d, e, a, b, c, F3, K3, 0, 14 ); R( c, d, e, a, b, F3, K3, 8, 15 ); R( b, c, d, e, a, F3, K3, 12, 9 ); R( a, b, c, d, e, F3, K3, 4, 8 ); R( e, a, b, c, d, F3, K3, 13, 9 ); R( d, e, a, b, c, F3, K3, 3, 14 ); R( c, d, e, a, b, F3, K3, 7, 5 ); R( b, c, d, e, a, F3, K3, 15, 6 ); R( a, b, c, d, e, F3, K3, 14, 8 ); R( e, a, b, c, d, F3, K3, 5, 6 ); R( d, e, a, b, c, F3, K3, 6, 5 ); R( c, d, e, a, b, F3, K3, 2, 12 ); R( b, c, d, e, a, F4, K4, 4, 9 ); R( a, b, c, d, e, F4, K4, 0, 15 ); R( e, a, b, c, d, F4, K4, 5, 5 ); R( d, e, a, b, c, F4, K4, 9, 11 ); R( c, d, e, a, b, F4, K4, 7, 6 ); R( b, c, d, e, a, F4, K4, 12, 8 ); R( a, b, c, d, e, F4, K4, 2, 13 ); R( e, a, b, c, d, F4, K4, 10, 12 ); R( d, e, a, b, c, F4, K4, 14, 5 ); R( c, d, e, a, b, F4, K4, 1, 12 ); R( b, c, d, e, a, F4, K4, 3, 13 ); R( a, b, c, d, e, F4, K4, 8, 14 ); R( e, a, b, c, d, F4, K4, 11, 11 ); R( d, e, a, b, c, F4, K4, 6, 8 ); R( c, d, e, a, b, F4, K4, 15, 5 ); R( b, c, d, e, a, F4, K4, 13, 6 ); aa = a; bb = b; cc = c; dd = d; ee = e; /* right lane */ a = hd->h0; b = hd->h1; c = hd->h2; d = hd->h3; e = hd->h4; R( a, b, c, d, e, F4, KK0, 5, 8); R( e, a, b, c, d, F4, KK0, 14, 9); R( d, e, a, b, c, F4, KK0, 7, 9); R( c, d, e, a, b, F4, KK0, 0, 11); R( b, c, d, e, a, F4, KK0, 9, 13); R( a, b, c, d, e, F4, KK0, 2, 15); R( e, a, b, c, d, F4, KK0, 11, 15); R( d, e, a, b, c, F4, KK0, 4, 5); R( c, d, e, a, b, F4, KK0, 13, 7); R( b, c, d, e, a, F4, KK0, 6, 7); R( a, b, c, d, e, F4, KK0, 15, 8); R( e, a, b, c, d, F4, KK0, 8, 11); R( d, e, a, b, c, F4, KK0, 1, 14); R( c, d, e, a, b, F4, KK0, 10, 14); R( b, c, d, e, a, F4, KK0, 3, 12); R( a, b, c, d, e, F4, KK0, 12, 6); R( e, a, b, c, d, F3, KK1, 6, 9); R( d, e, a, b, c, F3, KK1, 11, 13); R( c, d, e, a, b, F3, KK1, 3, 15); R( b, c, d, e, a, F3, KK1, 7, 7); R( a, b, c, d, e, F3, KK1, 0, 12); R( e, a, b, c, d, F3, KK1, 13, 8); R( d, e, a, b, c, F3, KK1, 5, 9); R( c, d, e, a, b, F3, KK1, 10, 11); R( b, c, d, e, a, F3, KK1, 14, 7); R( a, b, c, d, e, F3, KK1, 15, 7); R( e, a, b, c, d, F3, KK1, 8, 12); R( d, e, a, b, c, F3, KK1, 12, 7); R( c, d, e, a, b, F3, KK1, 4, 6); R( b, c, d, e, a, F3, KK1, 9, 15); R( a, b, c, d, e, F3, KK1, 1, 13); R( e, a, b, c, d, F3, KK1, 2, 11); R( d, e, a, b, c, F2, KK2, 15, 9); R( c, d, e, a, b, F2, KK2, 5, 7); R( b, c, d, e, a, F2, KK2, 1, 15); R( a, b, c, d, e, F2, KK2, 3, 11); R( e, a, b, c, d, F2, KK2, 7, 8); R( d, e, a, b, c, F2, KK2, 14, 6); R( c, d, e, a, b, F2, KK2, 6, 6); R( b, c, d, e, a, F2, KK2, 9, 14); R( a, b, c, d, e, F2, KK2, 11, 12); R( e, a, b, c, d, F2, KK2, 8, 13); R( d, e, a, b, c, F2, KK2, 12, 5); R( c, d, e, a, b, F2, KK2, 2, 14); R( b, c, d, e, a, F2, KK2, 10, 13); R( a, b, c, d, e, F2, KK2, 0, 13); R( e, a, b, c, d, F2, KK2, 4, 7); R( d, e, a, b, c, F2, KK2, 13, 5); R( c, d, e, a, b, F1, KK3, 8, 15); R( b, c, d, e, a, F1, KK3, 6, 5); R( a, b, c, d, e, F1, KK3, 4, 8); R( e, a, b, c, d, F1, KK3, 1, 11); R( d, e, a, b, c, F1, KK3, 3, 14); R( c, d, e, a, b, F1, KK3, 11, 14); R( b, c, d, e, a, F1, KK3, 15, 6); R( a, b, c, d, e, F1, KK3, 0, 14); R( e, a, b, c, d, F1, KK3, 5, 6); R( d, e, a, b, c, F1, KK3, 12, 9); R( c, d, e, a, b, F1, KK3, 2, 12); R( b, c, d, e, a, F1, KK3, 13, 9); R( a, b, c, d, e, F1, KK3, 9, 12); R( e, a, b, c, d, F1, KK3, 7, 5); R( d, e, a, b, c, F1, KK3, 10, 15); R( c, d, e, a, b, F1, KK3, 14, 8); R( b, c, d, e, a, F0, KK4, 12, 8); R( a, b, c, d, e, F0, KK4, 15, 5); R( e, a, b, c, d, F0, KK4, 10, 12); R( d, e, a, b, c, F0, KK4, 4, 9); R( c, d, e, a, b, F0, KK4, 1, 12); R( b, c, d, e, a, F0, KK4, 5, 5); R( a, b, c, d, e, F0, KK4, 8, 14); R( e, a, b, c, d, F0, KK4, 7, 6); R( d, e, a, b, c, F0, KK4, 6, 8); R( c, d, e, a, b, F0, KK4, 2, 13); R( b, c, d, e, a, F0, KK4, 13, 6); R( a, b, c, d, e, F0, KK4, 14, 5); R( e, a, b, c, d, F0, KK4, 0, 15); R( d, e, a, b, c, F0, KK4, 3, 13); R( c, d, e, a, b, F0, KK4, 9, 11); R( b, c, d, e, a, F0, KK4, 11, 11); t = hd->h1 + d + cc; hd->h1 = hd->h2 + e + dd; hd->h2 = hd->h3 + a + ee; hd->h3 = hd->h4 + b + aa; hd->h4 = hd->h0 + c + bb; hd->h0 = t; } /* Update the message digest with the contents * of INBUF with length INLEN. */ static void rmd160_write( RMD160_CONTEXT *hd, byte *inbuf, size_t inlen) { if( hd->count == 64 ) { /* flush the buffer */ transform( hd, hd->buf ); burn_stack (108+5*sizeof(void*)); hd->count = 0; hd->nblocks++; } if( !inbuf ) return; if( hd->count ) { for( ; inlen && hd->count < 64; inlen-- ) hd->buf[hd->count++] = *inbuf++; rmd160_write( hd, NULL, 0 ); if( !inlen ) return; } while( inlen >= 64 ) { transform( hd, inbuf ); hd->count = 0; hd->nblocks++; inlen -= 64; inbuf += 64; } burn_stack (108+5*sizeof(void*)); for( ; inlen && hd->count < 64; inlen-- ) hd->buf[hd->count++] = *inbuf++; } /**************** * Apply the rmd160 transform function on the buffer which must have * a length 64 bytes. Do not use this function together with the * other functions, use rmd160_init to initialize internal variables. * Returns: 16 bytes in buffer with the mixed contentes of buffer. */ void rmd160_mixblock( RMD160_CONTEXT *hd, char *buffer ) { char *p = buffer; transform( hd, buffer ); #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) X(0); X(1); X(2); X(3); X(4); #undef X } /* The routine terminates the computation */ static void rmd160_final( RMD160_CONTEXT *hd ) { u32 t, msb, lsb; byte *p; rmd160_write(hd, NULL, 0); /* flush */; t = hd->nblocks; /* multiply by 64 to make a byte count */ lsb = t << 6; msb = t >> 26; /* add the count */ t = lsb; if( (lsb += hd->count) < t ) msb++; /* multiply by 8 to make a bit count */ t = lsb; lsb <<= 3; msb <<= 3; msb |= t >> 29; if( hd->count < 56 ) { /* enough room */ hd->buf[hd->count++] = 0x80; /* pad */ while( hd->count < 56 ) hd->buf[hd->count++] = 0; /* pad */ } else { /* need one extra block */ hd->buf[hd->count++] = 0x80; /* pad character */ while( hd->count < 64 ) hd->buf[hd->count++] = 0; rmd160_write(hd, NULL, 0); /* flush */; memset(hd->buf, 0, 56 ); /* fill next block with zeroes */ } /* append the 64 bit count */ hd->buf[56] = lsb ; hd->buf[57] = lsb >> 8; hd->buf[58] = lsb >> 16; hd->buf[59] = lsb >> 24; hd->buf[60] = msb ; hd->buf[61] = msb >> 8; hd->buf[62] = msb >> 16; hd->buf[63] = msb >> 24; transform( hd, hd->buf ); burn_stack (108+5*sizeof(void*)); p = hd->buf; #ifdef BIG_ENDIAN_HOST #define X(a) do { *p++ = hd->h##a ; *p++ = hd->h##a >> 8; \ *p++ = hd->h##a >> 16; *p++ = hd->h##a >> 24; } while(0) #else /* little endian */ #define X(a) do { *(u32*)p = hd->h##a ; p += 4; } while(0) #endif X(0); X(1); X(2); X(3); X(4); #undef X } static byte * rmd160_read( RMD160_CONTEXT *hd ) { return hd->buf; } /**************** * Shortcut functions which puts the hash value of the supplied buffer * into outbuf which must have a size of 20 bytes. */ void rmd160_hash_buffer( char *outbuf, const char *buffer, size_t length ) { RMD160_CONTEXT hd; rmd160_init( &hd ); rmd160_write( &hd, (byte*)buffer, length ); rmd160_final( &hd ); memcpy( outbuf, hd.buf, 20 ); } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. */ const char * rmd160_get_info( int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ) { static byte asn[15] = /* Object ID is 1.3.36.3.2.1 */ { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2b, 0x24, 0x03, 0x02, 0x01, 0x05, 0x00, 0x04, 0x14 }; if( algo != 3 ) return NULL; *contextsize = sizeof(RMD160_CONTEXT); *r_asnoid = asn; *r_asnlen = DIM(asn); *r_mdlen = 20; *(void (**)(RMD160_CONTEXT *))r_init = rmd160_init; *(void (**)(RMD160_CONTEXT *, byte*, size_t))r_write = rmd160_write; *(void (**)(RMD160_CONTEXT *))r_final = rmd160_final; *(byte *(**)(RMD160_CONTEXT *))r_read = rmd160_read; return "RIPEMD160"; } gnupg-1.4.20/cipher/rndunix.c0000644000175000017500000007256312635262326012770 00000000000000/**************************************************************************** * * * * * Unix Randomness-Gathering Code * * * * Copyright Peter Gutmann, Paul Kendall, and Chris Wedgwood 1996-1999. * * Heavily modified for GnuPG by Werner Koch * * * * * ****************************************************************************/ /* This module is part of the cryptlib continuously seeded pseudorandom number generator. For usage conditions, see lib_rand.c [Here is the notice from lib_rand.c:] This module and the misc/rnd*.c modules represent the cryptlib continuously seeded pseudorandom number generator (CSPRNG) as described in my 1998 Usenix Security Symposium paper "The generation of random numbers for cryptographic purposes". The CSPRNG code is copyright Peter Gutmann (and various others) 1996, 1997, 1998, 1999, all rights reserved. Redistribution of the CSPRNG modules and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice and this permission notice in its entirety. 2. Redistributions in binary form must reproduce the copyright notice in the documentation and/or other materials provided with the distribution. 3. A copy of any bugfixes or enhancements made must be provided to the author, to allow them to be added to the baseline version of the code. ALTERNATIVELY, the code may be distributed under the terms of the GNU General Public License, version 2 or any later version published by the Free Software Foundation, in which case the provisions of the GNU GPL are required INSTEAD OF the above restrictions. Although not required under the terms of the GPL, it would still be nice if you could make any changes available to the author to allow a consistent code base to be maintained */ /* General includes */ #include #include #include #include #include /* OS-specific includes */ #ifdef __osf__ /* Somewhere in the morass of system-specific cruft which OSF/1 pulls in * via the following includes are various endianness defines, so we * undefine the cryptlib ones, which aren't really needed for this module * anyway */ #undef BIG_ENDIAN #undef LITTLE_ENDIAN #endif /* __osf__ */ #include #include #include #ifndef __QNX__ #include #include #endif /* __QNX__ */ #include /* SCO and SunOS need this before resource.h */ #ifndef __QNX__ #include #endif /* __QNX__ */ #if defined( _AIX ) || defined( __QNX__ ) #include #endif /* _AIX || __QNX__ */ #ifndef __QNX__ #include #include #include #endif /* __QNX__ */ #include #include /* Verschiedene komische Typen */ #if defined( __hpux ) && ( OS_VERSION == 9 ) #include #endif /* __hpux 9.x, after that it's in unistd.h */ #include /* #include */ #ifdef __QNX__ #include #include #endif /* __QNX__ */ #include #include "types.h" /* for byte and u32 typedefs */ #include "algorithms.h" #include "util.h" #ifndef EAGAIN #define EAGAIN EWOULDBLOCK #endif #ifndef STDIN_FILENO #define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO #define STDOUT_FILENO 1 #endif #define GATHER_BUFSIZE 49152 /* Usually about 25K are filled */ /* The structure containing information on random-data sources. Each * record contains the source and a relative estimate of its usefulness * (weighting) which is used to scale the number of kB of output from the * source (total = data_bytes / usefulness). Usually the weighting is in the * range 1-3 (or 0 for especially useless sources), resulting in a usefulness * rating of 1...3 for each kB of source output (or 0 for the useless * sources). * * If the source is constantly changing (certain types of network statistics * have this characteristic) but the amount of output is small, the weighting * is given as a negative value to indicate that the output should be treated * as if a minimum of 1K of output had been obtained. If the source produces * a lot of output then the scale factor is fractional, resulting in a * usefulness rating of < 1 for each kB of source output. * * In order to provide enough randomness to satisfy the requirements for a * slow poll, we need to accumulate at least 20 points of usefulness (a * typical system should get about 30 points). * * Some potential options are missed out because of special considerations. * pstat -i and pstat -f can produce amazing amounts of output (the record * is 600K on an Oracle server) which floods the buffer and doesn't yield * anything useful (apart from perhaps increasing the entropy of the vmstat * output a bit), so we don't bother with this. pstat in general produces * quite a bit of output, but it doesn't change much over time, so it gets * very low weightings. netstat -s produces constantly-changing output but * also produces quite a bit of it, so it only gets a weighting of 2 rather * than 3. The same holds for netstat -in, which gets 1 rather than 2. * * Some binaries are stored in different locations on different systems so * alternative paths are given for them. The code sorts out which one to * run by itself, once it finds an exectable somewhere it moves on to the * next source. The sources are arranged roughly in their order of * usefulness, occasionally sources which provide a tiny amount of * relatively useless data are placed ahead of ones which provide a large * amount of possibly useful data because another 100 bytes can't hurt, and * it means the buffer won't be swamped by one or two high-output sources. * All the high-output sources are clustered towards the end of the list * for this reason. Some binaries are checked for in a certain order, for * example under Slowaris /usr/ucb/ps understands aux as an arg, but the * others don't. Some systems have conditional defines enabling alternatives * to commands which don't understand the usual options but will provide * enough output (in the form of error messages) to look like they're the * real thing, causing alternative options to be skipped (we can't check the * return either because some commands return peculiar, non-zero status even * when they're working correctly). * * In order to maximise use of the buffer, the code performs a form of run- * length compression on its input where a repeated sequence of bytes is * replaced by the occurrence count mod 256. Some commands output an awful * lot of whitespace, this measure greatly increases the amount of data we * can fit in the buffer. * * When we scale the weighting using the SC() macro, some preprocessors may * give a division by zero warning for the most obvious expression * 'weight ? 1024 / weight : 0' (and gcc 2.7.2.2 dies with a division by zero * trap), so we define a value SC_0 which evaluates to zero when fed to * '1024 / SC_0' */ #define SC( weight ) ( 1024 / weight ) /* Scale factor */ #define SC_0 16384 /* SC( SC_0 ) evalutes to 0 */ static struct RI { const char *path; /* Path to check for existence of source */ const char *arg; /* Args for source */ const int usefulness; /* Usefulness of source */ FILE *pipe; /* Pipe to source as FILE * */ int pipeFD; /* Pipe to source as FD */ pid_t pid; /* pid of child for waitpid() */ int length; /* Quantity of output produced */ const int hasAlternative; /* Whether source has alt.location */ } dataSources[] = { { "/bin/vmstat", "-s", SC(-3), NULL, 0, 0, 0, 1 }, { "/usr/bin/vmstat", "-s", SC(-3), NULL, 0, 0, 0, 0}, { "/bin/vmstat", "-c", SC(-3), NULL, 0, 0, 0, 1 }, { "/usr/bin/vmstat", "-c", SC(-3), NULL, 0, 0, 0, 0}, { "/usr/bin/pfstat", NULL, SC(-2), NULL, 0, 0, 0, 0}, { "/bin/vmstat", "-i", SC(-2), NULL, 0, 0, 0, 1 }, { "/usr/bin/vmstat", "-i", SC(-2), NULL, 0, 0, 0, 0}, { "/usr/ucb/netstat", "-s", SC(2), NULL, 0, 0, 0, 1 }, { "/usr/bin/netstat", "-s", SC(2), NULL, 0, 0, 0, 1 }, { "/usr/sbin/netstat", "-s", SC(2), NULL, 0, 0, 0, 1}, { "/usr/etc/netstat", "-s", SC(2), NULL, 0, 0, 0, 0}, { "/usr/bin/nfsstat", NULL, SC(2), NULL, 0, 0, 0, 0}, { "/usr/ucb/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 }, { "/usr/bin/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 }, { "/usr/sbin/netstat", "-m", SC(-1), NULL, 0, 0, 0, 1 }, { "/usr/etc/netstat", "-m", SC(-1), NULL, 0, 0, 0, 0 }, { "/bin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 }, { "/usr/ucb/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 }, { "/usr/bin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1 }, { "/usr/sbin/netstat", "-in", SC(-1), NULL, 0, 0, 0, 1}, { "/usr/etc/netstat", "-in", SC(-1), NULL, 0, 0, 0, 0}, { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.7.1.0", SC(-1), NULL, 0, 0, 0, 0 }, /* UDP in */ { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.7.4.0", SC(-1), NULL, 0, 0, 0, 0 }, /* UDP out */ { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.4.3.0", SC(-1), NULL, 0, 0, 0, 0 }, /* IP ? */ { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.10.0", SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */ { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.11.0", SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */ { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.6.13.0", SC(-1), NULL, 0, 0, 0, 0 }, /* TCP ? */ { "/usr/bin/mpstat", NULL, SC(1), NULL, 0, 0, 0, 0 }, { "/usr/bin/w", NULL, SC(1), NULL, 0, 0, 0, 1 }, { "/usr/bsd/w", NULL, SC(1), NULL, 0, 0, 0, 0 }, { "/usr/bin/df", NULL, SC(1), NULL, 0, 0, 0, 1 }, { "/bin/df", NULL, SC(1), NULL, 0, 0, 0, 0 }, { "/usr/sbin/portstat", NULL, SC(1), NULL, 0, 0, 0, 0 }, { "/usr/bin/iostat", NULL, SC(SC_0), NULL, 0, 0, 0, 0 }, { "/usr/bin/uptime", NULL, SC(SC_0), NULL, 0, 0, 0, 1 }, { "/usr/bsd/uptime", NULL, SC(SC_0), NULL, 0, 0, 0, 0 }, { "/bin/vmstat", "-f", SC(SC_0), NULL, 0, 0, 0, 1 }, { "/usr/bin/vmstat", "-f", SC(SC_0), NULL, 0, 0, 0, 0 }, { "/bin/vmstat", NULL, SC(SC_0), NULL, 0, 0, 0, 1 }, { "/usr/bin/vmstat", NULL, SC(SC_0), NULL, 0, 0, 0, 0 }, { "/usr/ucb/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 }, { "/usr/bin/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 }, { "/usr/sbin/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 1 }, { "/usr/etc/netstat", "-n", SC(0.5), NULL, 0, 0, 0, 0 }, #if defined( __sgi ) || defined( __hpux ) { "/bin/ps", "-el", SC(0.3), NULL, 0, 0, 0, 1 }, #endif /* __sgi || __hpux */ { "/usr/ucb/ps", "aux", SC(0.3), NULL, 0, 0, 0, 1 }, { "/usr/bin/ps", "aux", SC(0.3), NULL, 0, 0, 0, 1 }, { "/bin/ps", "aux", SC(0.3), NULL, 0, 0, 0, 0 }, { "/bin/ps", "-A", SC(0.3), NULL, 0, 0, 0, 0 }, /*QNX*/ { "/usr/bin/ipcs", "-a", SC(0.5), NULL, 0, 0, 0, 1 }, { "/bin/ipcs", "-a", SC(0.5), NULL, 0, 0, 0, 0 }, /* Unreliable source, depends on system usage */ { "/etc/pstat", "-p", SC(0.5), NULL, 0, 0, 0, 1 }, { "/bin/pstat", "-p", SC(0.5), NULL, 0, 0, 0, 0 }, { "/etc/pstat", "-S", SC(0.2), NULL, 0, 0, 0, 1 }, { "/bin/pstat", "-S", SC(0.2), NULL, 0, 0, 0, 0 }, { "/etc/pstat", "-v", SC(0.2), NULL, 0, 0, 0, 1 }, { "/bin/pstat", "-v", SC(0.2), NULL, 0, 0, 0, 0 }, { "/etc/pstat", "-x", SC(0.2), NULL, 0, 0, 0, 1 }, { "/bin/pstat", "-x", SC(0.2), NULL, 0, 0, 0, 0 }, { "/etc/pstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 }, { "/bin/pstat", "-t", SC(0.1), NULL, 0, 0, 0, 0 }, /* pstat is your friend */ { "/usr/bin/last", "-n 50", SC(0.3), NULL, 0, 0, 0, 1 }, #ifdef __sgi { "/usr/bsd/last", "-50", SC(0.3), NULL, 0, 0, 0, 0 }, #endif /* __sgi */ #ifdef __hpux { "/etc/last", "-50", SC(0.3), NULL, 0, 0, 0, 0 }, #endif /* __hpux */ { "/usr/bsd/last", "-n 50", SC(0.3), NULL, 0, 0, 0, 0 }, { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.5.1.0", SC(0.1), NULL, 0, 0, 0, 0 }, /* ICMP ? */ { "/usr/sbin/snmp_request", "localhost public get 1.3.6.1.2.1.5.3.0", SC(0.1), NULL, 0, 0, 0, 0 }, /* ICMP ? */ { "/etc/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 }, { "/usr/etc/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 }, { "/usr/bin/arp", "-a", SC(0.1), NULL, 0, 0, 0, 1 }, { "/usr/sbin/arp", "-a", SC(0.1), NULL, 0, 0, 0, 0 }, { "/usr/sbin/ripquery", "-nw 1 127.0.0.1", SC(0.1), NULL, 0, 0, 0, 0 }, { "/bin/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 }, { "/usr/bin/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 1 }, { "/usr/ucb/lpstat", "-t", SC(0.1), NULL, 0, 0, 0, 0 }, { "/usr/bin/tcpdump", "-c 5 -efvvx", SC(1), NULL, 0, 0, 0, 0 }, /* This is very environment-dependant. If network traffic is low, it'll * probably time out before delivering 5 packets, which is OK because * it'll probably be fixed stuff like ARP anyway */ { "/usr/sbin/advfsstat", "-b usr_domain", SC(SC_0), NULL, 0, 0, 0, 0}, { "/usr/sbin/advfsstat", "-l 2 usr_domain", SC(0.5), NULL, 0, 0, 0, 0}, { "/usr/sbin/advfsstat", "-p usr_domain", SC(SC_0), NULL, 0, 0, 0, 0}, /* This is a complex and screwball program. Some systems have things * like rX_dmn, x = integer, for RAID systems, but the statistics are * pretty dodgy */ #ifdef __QNXNTO__ { "/bin/pidin", "-F%A%B%c%d%E%I%J%K%m%M%n%N%p%P%S%s%T", SC(0.3), NULL, 0, 0, 0, 0 }, #endif #if 0 /* The following aren't enabled since they're somewhat slow and not very * unpredictable, however they give an indication of the sort of sources * you can use (for example the finger might be more useful on a * firewalled internal network) */ { "/usr/bin/finger", "@ml.media.mit.edu", SC(0.9), NULL, 0, 0, 0, 0 }, { "/usr/local/bin/wget", "-O - http://lavarand.sgi.com/block.html", SC(0.9), NULL, 0, 0, 0, 0 }, { "/bin/cat", "/usr/spool/mqueue/syslog", SC(0.9), NULL, 0, 0, 0, 0 }, #endif /* 0 */ { NULL, NULL, 0, NULL, 0, 0, 0, 0 } }; static byte *gather_buffer; /* buffer for gathering random noise */ static int gather_buffer_size; /* size of the memory buffer */ static uid_t gatherer_uid; /* The message structure used to communicate with the parent */ typedef struct { int usefulness; /* usefulness of data */ int ndata; /* valid bytes in data */ char data[500]; /* gathered data */ } GATHER_MSG; #ifndef HAVE_WAITPID pid_t waitpid(pid_t pid, int *statptr, int options) { #ifdef HAVE_WAIT4 return wait4(pid, statptr, options, NULL); #else /* If wait4 is also not available, try wait3 for SVR3 variants */ /* Less ideal because can't actually request a specific pid */ /* For that reason, first check to see if pid is for an */ /* existing process. */ int tmp_pid, dummystat;; if (kill(pid, 0) == -1) { errno = ECHILD; return -1; } if (statptr == NULL) statptr = &dummystat; while (((tmp_pid = wait3(statptr, options, 0)) != pid) && (tmp_pid != -1) && (tmp_pid != 0) && (pid != -1)) ; return tmp_pid; #endif } #endif /* Under SunOS popen() doesn't record the pid of the child process. When * pclose() is called, instead of calling waitpid() for the correct child, it * calls wait() repeatedly until the right child is reaped. The problem is * that this reaps any other children that happen to have died at that * moment, and when their pclose() comes along, the process hangs forever. * The fix is to use a wrapper for popen()/pclose() which saves the pid in * the dataSources structure (code adapted from GNU-libc's popen() call). * * Aut viam inveniam aut faciam */ static FILE * my_popen(struct RI *entry) { int pipedes[2]; FILE *stream; /* Create the pipe */ if (pipe(pipedes) < 0) return (NULL); /* Fork off the child ("vfork() is like an OS orgasm. All OS's want to * do it, but most just end up faking it" - Chris Wedgwood). If your OS * supports it, you should try to use vfork() here because it's somewhat * more efficient */ #if defined( sun ) || defined( __ultrix__ ) || defined( __osf__ ) || \ defined(__hpux) entry->pid = vfork(); #else /* */ entry->pid = fork(); #endif /* Unixen which have vfork() */ if (entry->pid == (pid_t) - 1) { /* The fork failed */ close(pipedes[0]); close(pipedes[1]); return (NULL); } if (entry->pid == (pid_t) 0) { struct passwd *passwd; int fd; /* We are the child. Make the read side of the pipe be stdout */ if (dup2(pipedes[STDOUT_FILENO], STDOUT_FILENO) < 0) exit(127); /* Connect the other standard handles to the bit bucket. */ if ((fd = open ("/dev/null", O_RDWR)) != -1) { dup2 (fd, STDIN_FILENO); dup2 (fd, STDERR_FILENO); close (fd); } /* Now that everything is set up, give up our permissions to make * sure we don't read anything sensitive. If the getpwnam() fails, * we default to -1, which is usually nobody */ if (gatherer_uid == (uid_t)-1 && \ (passwd = getpwnam("nobody")) != NULL) gatherer_uid = passwd->pw_uid; setuid(gatherer_uid); /* Close the pipe descriptors. */ close(pipedes[STDIN_FILENO]); close(pipedes[STDOUT_FILENO]); /* Try and exec the program */ execl(entry->path, entry->path, entry->arg, NULL); /* Die if the exec failed */ exit(127); } /* We are the parent. Close the irrelevant side of the pipe and open * the relevant side as a new stream. Mark our side of the pipe to * close on exec, so new children won't see it */ close(pipedes[STDOUT_FILENO]); #ifdef FD_CLOEXEC fcntl(pipedes[STDIN_FILENO], F_SETFD, FD_CLOEXEC); #endif stream = fdopen(pipedes[STDIN_FILENO], "r"); if (stream == NULL) { int savedErrno = errno; /* The stream couldn't be opened or the child structure couldn't be * allocated. Kill the child and close the other side of the pipe */ kill(entry->pid, SIGKILL); if (stream == NULL) close(pipedes[STDOUT_FILENO]); else fclose(stream); waitpid(entry->pid, NULL, 0); entry->pid = 0; errno = savedErrno; return (NULL); } return (stream); } static int my_pclose(struct RI *entry) { int status = 0; if (fclose(entry->pipe)) return (-1); /* We ignore the return value from the process because some programs * return funny values which would result in the input being discarded * even if they executed successfully. This isn't a problem because the * result data size threshold will filter out any programs which exit * with a usage message without producing useful output */ if (waitpid(entry->pid, NULL, 0) != entry->pid) status = -1; entry->pipe = NULL; entry->pid = 0; return (status); } /* Unix slow poll (without special support for Linux) * * If a few of the randomness sources create a large amount of output then * the slowPoll() stops once the buffer has been filled (but before all the * randomness sources have been sucked dry) so that the 'usefulness' factor * remains below the threshold. For this reason the gatherer buffer has to * be fairly sizeable on moderately loaded systems. This is something of a * bug since the usefulness should be influenced by the amount of output as * well as the source type */ static int slow_poll(FILE *dbgfp, int dbgall, size_t *nbytes ) { int moreSources; struct timeval tv; fd_set fds; #if defined( __hpux ) size_t maxFD = 0; #else int maxFD = 0; #endif /* OS-specific brokenness */ int bufPos, i, usefulness = 0; /* Fire up each randomness source */ FD_ZERO(&fds); for (i = 0; dataSources[i].path != NULL; i++) { /* Since popen() is a fairly heavy function, we check to see whether * the executable exists before we try to run it */ if (access(dataSources[i].path, X_OK)) { if( dbgfp && dbgall ) fprintf(dbgfp, "%s not present%s\n", dataSources[i].path, dataSources[i].hasAlternative ? ", has alternatives" : ""); dataSources[i].pipe = NULL; } else dataSources[i].pipe = my_popen(&dataSources[i]); if (dataSources[i].pipe != NULL) { dataSources[i].pipeFD = fileno(dataSources[i].pipe); if (dataSources[i].pipeFD > maxFD) maxFD = dataSources[i].pipeFD; #ifdef O_NONBLOCK /* Ohhh what a hack (used for Atari) */ fcntl(dataSources[i].pipeFD, F_SETFL, O_NONBLOCK); #endif FD_SET(dataSources[i].pipeFD, &fds); dataSources[i].length = 0; /* If there are alternatives for this command, don't try and * execute them */ while (dataSources[i].hasAlternative) { if( dbgfp && dbgall ) fprintf(dbgfp, "Skipping %s\n", dataSources[i + 1].path); i++; } } } /* Suck all the data we can get from each of the sources */ bufPos = 0; moreSources = 1; while (moreSources && bufPos <= gather_buffer_size) { /* Wait for data to become available from any of the sources, with a * timeout of 10 seconds. This adds even more randomness since data * becomes available in a nondeterministic fashion. Kudos to HP's QA * department for managing to ship a select() which breaks its own * prototype */ tv.tv_sec = 10; tv.tv_usec = 0; #if defined( __hpux ) && ( OS_VERSION == 9 ) if (select(maxFD + 1, (int *)&fds, NULL, NULL, &tv) == -1) #else /* */ if (select(maxFD + 1, &fds, NULL, NULL, &tv) == -1) #endif /* __hpux */ break; /* One of the sources has data available, read it into the buffer */ for (i = 0; dataSources[i].path != NULL; i++) { if( dataSources[i].pipe && FD_ISSET(dataSources[i].pipeFD, &fds)) { size_t noBytes; if ((noBytes = fread(gather_buffer + bufPos, 1, gather_buffer_size - bufPos, dataSources[i].pipe)) == 0) { if (my_pclose(&dataSources[i]) == 0) { int total = 0; /* Try and estimate how much entropy we're getting * from a data source */ if (dataSources[i].usefulness) { if (dataSources[i].usefulness < 0) total = (dataSources[i].length + 999) / -dataSources[i].usefulness; else total = dataSources[i].length / dataSources[i].usefulness; } if( dbgfp ) fprintf(dbgfp, "%s %s contributed %d bytes, " "usefulness = %d\n", dataSources[i].path, (dataSources[i].arg != NULL) ? dataSources[i].arg : "", dataSources[i].length, total); if( dataSources[i].length ) usefulness += total; } dataSources[i].pipe = NULL; } else { int currPos = bufPos; int endPos = bufPos + noBytes; /* Run-length compress the input byte sequence */ while (currPos < endPos) { int ch = gather_buffer[currPos]; /* If it's a single byte, just copy it over */ if (ch != gather_buffer[currPos + 1]) { gather_buffer[bufPos++] = ch; currPos++; } else { int count = 0; /* It's a run of repeated bytes, replace them * with the byte count mod 256 */ while ((ch == gather_buffer[currPos]) && currPos < endPos) { count++; currPos++; } gather_buffer[bufPos++] = count; noBytes -= count - 1; } } /* Remember the number of (compressed) bytes of input we * obtained */ dataSources[i].length += noBytes; } } } /* Check if there is more input available on any of the sources */ moreSources = 0; FD_ZERO(&fds); for (i = 0; dataSources[i].path != NULL; i++) { if (dataSources[i].pipe != NULL) { /* FIXME: We need to make sure that PIPEFD is less than FD_SETSIZE. */ FD_SET(dataSources[i].pipeFD, &fds); moreSources = 1; } } } if( dbgfp ) { fprintf(dbgfp, "Got %d bytes, usefulness = %d\n", bufPos, usefulness); fflush(dbgfp); } *nbytes = bufPos; return usefulness; } /**************** * Start the gatherer process which writes messages of * type GATHERER_MSG to pipedes */ static void start_gatherer( int pipefd ) { FILE *dbgfp = NULL; int dbgall; #ifdef ENABLE_SELINUX_HACKS /* We don't allow writing to the log file because this might be sued to corrupt a secured file. Given that this is used as a library by the ../g10/ code, we can't access the check function from ../g10/misc.c. */ dbgall = 0; #else { const char *s = getenv("GNUPG_RNDUNIX_DBG"); if( s ) { dbgfp = (*s=='-' && !s[1])? stdout : fopen(s, "a"); if( !dbgfp ) g10_log_info("can't open debug file `%s': %s\n", s, strerror(errno) ); else fprintf(dbgfp,"\nSTART RNDUNIX DEBUG pid=%d\n", (int)getpid()); } dbgall = !!getenv("GNUPG_RNDUNIX_DBGALL"); } #endif /* Set up the buffer */ gather_buffer_size = GATHER_BUFSIZE; gather_buffer = malloc( gather_buffer_size ); if( !gather_buffer ) { g10_log_error("out of core while allocating the gatherer buffer\n"); exit(2); } /* Reset the SIGC(H)LD handler to the system default. This is necessary * because if the program which cryptlib is a part of installs its own * SIGC(H)LD handler, it will end up reaping the cryptlib children before * cryptlib can. As a result, my_pclose() will call waitpid() on a * process which has already been reaped by the installed handler and * return an error, so the read data won't be added to the randomness * pool. There are two types of SIGC(H)LD naming, the SysV SIGCLD and * the BSD/Posix SIGCHLD, so we need to handle either possibility */ #ifdef SIGCLD signal(SIGCLD, SIG_DFL); #else signal(SIGCHLD, SIG_DFL); #endif fflush (stderr); /* Arrghh!! It's Stuart code!! */ /* (close all files but the ones we need) */ { int nmax, n1, i; #ifdef _SC_OPEN_MAX if( (nmax=sysconf( _SC_OPEN_MAX )) < 0 ) { #ifdef _POSIX_OPEN_MAX nmax = _POSIX_OPEN_MAX; #else nmax = 20; /* assume a reasonable value */ #endif } #else nmax = 20; /* assume a reasonable value */ #endif { int fd; if ((fd = open ("/dev/null", O_RDWR)) != -1) { dup2 (fd, STDIN_FILENO); dup2 (fd, STDOUT_FILENO); dup2 (fd, STDERR_FILENO); close (fd); } } n1 = dbgfp? fileno (dbgfp) : -1; for(i=0; i < nmax; i++ ) { if (i != STDIN_FILENO && i != STDOUT_FILENO && i != STDERR_FILENO && i != n1 && i != pipefd ) close(i); } errno = 0; } for(;;) { GATHER_MSG msg; size_t nbytes; const char *p; msg.usefulness = slow_poll( dbgfp, dbgall, &nbytes ); p = gather_buffer; while( nbytes ) { msg.ndata = nbytes > sizeof(msg.data)? sizeof(msg.data) : nbytes; memcpy( msg.data, p, msg.ndata ); nbytes -= msg.ndata; p += msg.ndata; while( write( pipefd, &msg, sizeof(msg) ) != sizeof(msg) ) { if( errno == EINTR ) continue; if( errno == EAGAIN ) { struct timeval tv; tv.tv_sec = 0; tv.tv_usec = 50000; select(0, NULL, NULL, NULL, &tv); continue; } if( errno == EPIPE ) /* parent has exited, so give up */ exit(0); /* we can't do very much here because stderr is closed */ if( dbgfp ) fprintf(dbgfp, "gatherer can't write to pipe: %s\n", strerror(errno) ); /* we start a new poll to give the system some time */ nbytes = 0; break; } } } /* we are killed when the parent dies */ } static int read_a_msg( int fd, GATHER_MSG *msg ) { char *buffer = (char*)msg; size_t length = sizeof( *msg ); int n; do { do { n = read(fd, buffer, length ); } while( n == -1 && errno == EINTR ); if( n == -1 ) return -1; buffer += n; length -= n; } while( length ); return 0; } /**************** * Using a level of 0 should never block and better add nothing * to the pool. So this is just a dummy for this gatherer. */ int rndunix_gather_random( void (*add)(const void*, size_t, int), int requester, size_t length, int level ) { static pid_t gatherer_pid = 0; static int pipedes[2]; GATHER_MSG msg; size_t n; if( !level ) return 0; if( !gatherer_pid ) { /* make sure we are not setuid */ if ( getuid () != geteuid () ) BUG(); /* time to start the gatherer process */ if( pipe( pipedes ) ) { g10_log_error("pipe() failed: %s\n", strerror(errno)); return -1; } gatherer_pid = fork(); if( gatherer_pid == -1 ) { g10_log_error("can't for gatherer process: %s\n", strerror(errno)); return -1; } if( !gatherer_pid ) { start_gatherer( pipedes[1] ); /* oops, can't happen */ return -1; } } /* now read from the gatherer */ while( length ) { int goodness; ulong subtract; if( read_a_msg( pipedes[0], &msg ) ) { g10_log_error("reading from gatherer pipe failed: %s\n", strerror(errno)); return -1; } if( level > 1 ) { if( msg.usefulness > 30 ) goodness = 100; else if ( msg.usefulness ) goodness = msg.usefulness * 100 / 30; else goodness = 0; } else if( level ) { if( msg.usefulness > 15 ) goodness = 100; else if ( msg.usefulness ) goodness = msg.usefulness * 100 / 15; else goodness = 0; } else goodness = 100; /* goodness of level 0 is always 100 % */ n = msg.ndata; if( n > length ) n = length; (*add)( msg.data, n, requester ); /* this is the trick how e cope with the goodness */ subtract = (ulong)n * goodness / 100; /* subtract at least 1 byte to avoid infinite loops */ length -= subtract ? subtract : 1; } return 0; } gnupg-1.4.20/cipher/dsa.c0000644000175000017500000002751712635262326012047 00000000000000/* dsa.c - DSA signature algorithm * Copyright (C) 1998, 1999, 2000, 2003, 2006 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 3 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, see . */ #include #include #include #include #include #include "util.h" #include "mpi.h" #include "cipher.h" #include "dsa.h" typedef struct { MPI p; /* prime */ MPI q; /* group order */ MPI g; /* group generator */ MPI y; /* g^x mod p */ } DSA_public_key; typedef struct { MPI p; /* prime */ MPI q; /* group order */ MPI g; /* group generator */ MPI y; /* g^x mod p */ MPI x; /* secret exponent */ } DSA_secret_key; static MPI gen_k( MPI q ); static void test_keys( DSA_secret_key *sk, unsigned qbits ); static int check_secret_key( DSA_secret_key *sk ); static void generate( DSA_secret_key *sk, unsigned nbits, unsigned qbits, MPI **ret_factors ); static void sign(MPI r, MPI s, MPI input, DSA_secret_key *skey); static int verify(MPI r, MPI s, MPI input, DSA_public_key *pkey); static void (*progress_cb) ( void *, int ); static void *progress_cb_data; void register_pk_dsa_progress ( void (*cb)( void *, int), void *cb_data ) { progress_cb = cb; progress_cb_data = cb_data; } static void progress( int c ) { if ( progress_cb ) progress_cb ( progress_cb_data, c ); else fputc( c, stderr ); } /**************** * Generate a random secret exponent k less than q */ static MPI gen_k( MPI q ) { MPI k = mpi_alloc_secure( mpi_get_nlimbs(q) ); unsigned int nbits = mpi_get_nbits(q); unsigned int nbytes = (nbits+7)/8; char *rndbuf = NULL; if( DBG_CIPHER ) log_debug("choosing a random k "); for(;;) { if( DBG_CIPHER ) progress('.'); if( !rndbuf || nbits < 32 ) { xfree(rndbuf); rndbuf = get_random_bits( nbits, 1, 1 ); } else { /* change only some of the higher bits */ /* we could imporove this by directly requesting more memory * at the first call to get_random_bits() and use this the here * maybe it is easier to do this directly in random.c */ char *pp = get_random_bits( 32, 1, 1 ); memcpy( rndbuf,pp, 4 ); xfree(pp); } mpi_set_buffer( k, rndbuf, nbytes, 0 ); if( mpi_test_bit( k, nbits-1 ) ) mpi_set_highbit( k, nbits-1 ); else { mpi_set_highbit( k, nbits-1 ); mpi_clear_bit( k, nbits-1 ); } if( !(mpi_cmp( k, q ) < 0) ) { /* check: k < q */ if( DBG_CIPHER ) progress('+'); continue; /* no */ } if( !(mpi_cmp_ui( k, 0 ) > 0) ) { /* check: k > 0 */ if( DBG_CIPHER ) progress('-'); continue; /* no */ } break; /* okay */ } xfree(rndbuf); if( DBG_CIPHER ) progress('\n'); return k; } static void test_keys( DSA_secret_key *sk, unsigned qbits ) { DSA_public_key pk; MPI test = mpi_alloc ( mpi_nlimb_hint_from_nbits (qbits) ); MPI out1_a = mpi_alloc ( mpi_nlimb_hint_from_nbits (qbits) ); MPI out1_b = mpi_alloc( mpi_nlimb_hint_from_nbits (qbits) ); pk.p = sk->p; pk.q = sk->q; pk.g = sk->g; pk.y = sk->y; /*mpi_set_bytes( test, qbits, get_random_byte, 0 );*/ { char *p = get_random_bits( qbits, 0, 0 ); mpi_set_buffer( test, p, (qbits+7)/8, 0 ); xfree(p); } sign( out1_a, out1_b, test, sk ); if( !verify( out1_a, out1_b, test, &pk ) ) log_fatal("DSA:: sign, verify failed\n"); mpi_free( test ); mpi_free( out1_a ); mpi_free( out1_b ); } /**************** * Generate a DSA key pair with a key of size NBITS * Returns: 2 structures filled with all needed values * and an array with the n-1 factors of (p-1) */ static void generate( DSA_secret_key *sk, unsigned nbits, unsigned qbits, MPI **ret_factors ) { MPI p; /* the prime */ MPI q; /* the prime factor */ MPI g; /* the generator */ MPI y; /* g^x mod p */ MPI x; /* the secret exponent */ MPI h, e; /* helper */ byte *rndbuf; assert( nbits >= 512 ); assert( qbits >= 160 ); assert( qbits %8 == 0 ); p = generate_elg_prime( 1, nbits, qbits, NULL, ret_factors ); /* get q out of factors */ q = mpi_copy((*ret_factors)[0]); if( mpi_get_nbits(q) != qbits ) BUG(); /* find a generator g (h and e are helpers)*/ /* e = (p-1)/q */ e = mpi_alloc( mpi_get_nlimbs(p) ); mpi_sub_ui( e, p, 1 ); mpi_fdiv_q( e, e, q ); g = mpi_alloc( mpi_get_nlimbs(p) ); h = mpi_alloc_set_ui( 1 ); /* we start with 2 */ do { mpi_add_ui( h, h, 1 ); /* g = h^e mod p */ mpi_powm( g, h, e, p ); } while( !mpi_cmp_ui( g, 1 ) ); /* continue until g != 1 */ /* select a random number which has these properties: * 0 < x < q-1 * This must be a very good random number because this * is the secret part. */ if( DBG_CIPHER ) log_debug("choosing a random x "); x = mpi_alloc_secure( mpi_get_nlimbs(q) ); mpi_sub_ui( h, q, 1 ); /* put q-1 into h */ rndbuf = NULL; do { if( DBG_CIPHER ) progress('.'); if( !rndbuf ) rndbuf = get_random_bits( qbits, 2, 1 ); else { /* change only some of the higher bits (= 2 bytes)*/ char *r = get_random_bits( 16, 2, 1 ); memcpy(rndbuf, r, 16/8 ); xfree(r); } mpi_set_buffer( x, rndbuf, (qbits+7)/8, 0 ); mpi_clear_highbit( x, qbits+1 ); } while( !( mpi_cmp_ui( x, 0 )>0 && mpi_cmp( x, h )<0 ) ); xfree(rndbuf); mpi_free( e ); mpi_free( h ); /* y = g^x mod p */ y = mpi_alloc( mpi_get_nlimbs(p) ); mpi_powm( y, g, x, p ); if( DBG_CIPHER ) { progress('\n'); log_mpidump("dsa p= ", p ); log_mpidump("dsa q= ", q ); log_mpidump("dsa g= ", g ); log_mpidump("dsa y= ", y ); log_mpidump("dsa x= ", x ); } /* copy the stuff to the key structures */ sk->p = p; sk->q = q; sk->g = g; sk->y = y; sk->x = x; /* now we can test our keys (this should never fail!) */ test_keys( sk, qbits ); } /**************** * Test whether the secret key is valid. * Returns: if this is a valid key. */ static int check_secret_key( DSA_secret_key *sk ) { int rc; MPI y = mpi_alloc( mpi_get_nlimbs(sk->y) ); mpi_powm( y, sk->g, sk->x, sk->p ); rc = !mpi_cmp( y, sk->y ); mpi_free( y ); return rc; } /**************** * Make a DSA signature from HASH and put it into r and s. * * Without generating the k this function runs in * about 26ms on a 300 Mhz Mobile Pentium */ static void sign(MPI r, MPI s, MPI hash, DSA_secret_key *skey ) { MPI k; MPI kinv; MPI tmp; mpi_normalize (hash); /* select a random k with 0 < k < q */ k = gen_k( skey->q ); /* r = (a^k mod p) mod q */ mpi_powm( r, skey->g, k, skey->p ); mpi_fdiv_r( r, r, skey->q ); /* kinv = k^(-1) mod q */ kinv = mpi_alloc( mpi_get_nlimbs(k) ); mpi_invm(kinv, k, skey->q ); /* s = (kinv * ( hash + x * r)) mod q */ tmp = mpi_alloc( mpi_get_nlimbs(skey->p) ); mpi_mul( tmp, skey->x, r ); mpi_add( tmp, tmp, hash ); mpi_mulm( s , kinv, tmp, skey->q ); mpi_free(k); mpi_free(kinv); mpi_free(tmp); } /**************** * Returns true if the signature composed from R and S is valid. * * Without the checks this function runs in * about 31ms on a 300 Mhz Mobile Pentium */ static int verify(MPI r, MPI s, MPI hash, DSA_public_key *pkey ) { int rc; MPI w, u1, u2, v; MPI base[3]; MPI exponent[3]; if( !(mpi_cmp_ui( r, 0 ) > 0 && mpi_cmp( r, pkey->q ) < 0) ) return 0; /* assertion 0 < r < q failed */ if( !(mpi_cmp_ui( s, 0 ) > 0 && mpi_cmp( s, pkey->q ) < 0) ) return 0; /* assertion 0 < s < q failed */ w = mpi_alloc( mpi_get_nlimbs(pkey->q) ); u1 = mpi_alloc( mpi_get_nlimbs(pkey->q) ); u2 = mpi_alloc( mpi_get_nlimbs(pkey->q) ); v = mpi_alloc( mpi_get_nlimbs(pkey->p) ); /* w = s^(-1) mod q */ mpi_invm( w, s, pkey->q ); /* u1 = (hash * w) mod q */ mpi_mulm( u1, hash, w, pkey->q ); /* u2 = r * w mod q */ mpi_mulm( u2, r, w, pkey->q ); /* v = g^u1 * y^u2 mod p mod q */ base[0] = pkey->g; exponent[0] = u1; base[1] = pkey->y; exponent[1] = u2; base[2] = NULL; exponent[2] = NULL; mpi_mulpowm( v, base, exponent, pkey->p ); mpi_fdiv_r( v, v, pkey->q ); rc = !mpi_cmp( v, r ); mpi_free(w); mpi_free(u1); mpi_free(u2); mpi_free(v); return rc; } /********************************************* ************** interface ****************** *********************************************/ /* DSA2 has a variable-sized q, which adds an extra parameter to the pubkey generation. I'm doing this as a different function as it is only called from one place and is thus cleaner than revamping the pubkey_generate interface to carry an extra parameter which would be meaningless for all algorithms other than DSA. */ int dsa2_generate( int algo, unsigned nbits, unsigned qbits, MPI *skey, MPI **retfactors ) { DSA_secret_key sk; if( algo != PUBKEY_ALGO_DSA ) return G10ERR_PUBKEY_ALGO; generate( &sk, nbits, qbits, retfactors ); skey[0] = sk.p; skey[1] = sk.q; skey[2] = sk.g; skey[3] = sk.y; skey[4] = sk.x; return 0; } int dsa_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ) { return dsa2_generate(algo,nbits,160,skey,retfactors); } int dsa_check_secret_key( int algo, MPI *skey ) { DSA_secret_key sk; if( algo != PUBKEY_ALGO_DSA ) return G10ERR_PUBKEY_ALGO; if( !skey[0] || !skey[1] || !skey[2] || !skey[3] || !skey[4] ) return G10ERR_BAD_MPI; sk.p = skey[0]; sk.q = skey[1]; sk.g = skey[2]; sk.y = skey[3]; sk.x = skey[4]; if( !check_secret_key( &sk ) ) return G10ERR_BAD_SECKEY; return 0; } int dsa_sign( int algo, MPI *resarr, MPI data, MPI *skey ) { DSA_secret_key sk; if( algo != PUBKEY_ALGO_DSA ) return G10ERR_PUBKEY_ALGO; if( !data || !skey[0] || !skey[1] || !skey[2] || !skey[3] || !skey[4] ) return G10ERR_BAD_MPI; sk.p = skey[0]; sk.q = skey[1]; sk.g = skey[2]; sk.y = skey[3]; sk.x = skey[4]; resarr[0] = mpi_alloc( mpi_get_nlimbs( sk.p ) ); resarr[1] = mpi_alloc( mpi_get_nlimbs( sk.p ) ); sign( resarr[0], resarr[1], data, &sk ); return 0; } int dsa_verify( int algo, MPI hash, MPI *data, MPI *pkey ) { DSA_public_key pk; if( algo != PUBKEY_ALGO_DSA ) return G10ERR_PUBKEY_ALGO; if( !data[0] || !data[1] || !hash || !pkey[0] || !pkey[1] || !pkey[2] || !pkey[3] ) return G10ERR_BAD_MPI; pk.p = pkey[0]; pk.q = pkey[1]; pk.g = pkey[2]; pk.y = pkey[3]; if( !verify( data[0], data[1], hash, &pk ) ) return G10ERR_BAD_SIGN; return 0; } unsigned dsa_get_nbits( int algo, MPI *pkey ) { if( algo != PUBKEY_ALGO_DSA ) return 0; return mpi_get_nbits( pkey[0] ); } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. * Usage: Bit 0 set : allows signing * 1 set : allows encryption */ const char * dsa_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig, int *use ) { *npkey = 4; *nskey = 5; *nenc = 0; *nsig = 2; switch( algo ) { case PUBKEY_ALGO_DSA: *use = PUBKEY_USAGE_SIG; return "DSA"; default: *use = 0; return NULL; } } gnupg-1.4.20/cipher/sha512.c0000644000175000017500000002776012635262326012303 00000000000000/* sha512.c - SHA384 and SHA512 hash functions * Copyright (C) 2003 Free Software Foundation, Inc. * * Please see below for more legal information! * * 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 3 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, see . */ /* Test vectors from FIPS-180-2: * * "abc" * 384: * CB00753F 45A35E8B B5A03D69 9AC65007 272C32AB 0EDED163 * 1A8B605A 43FF5BED 8086072B A1E7CC23 58BAECA1 34C825A7 * 512: * DDAF35A1 93617ABA CC417349 AE204131 12E6FA4E 89A97EA2 0A9EEEE6 4B55D39A * 2192992A 274FC1A8 36BA3C23 A3FEEBBD 454D4423 643CE80E 2A9AC94F A54CA49F * * "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" * 384: * 09330C33 F71147E8 3D192FC7 82CD1B47 53111B17 3B3B05D2 * 2FA08086 E3B0F712 FCC7C71A 557E2DB9 66C3E9FA 91746039 * 512: * 8E959B75 DAE313DA 8CF4F728 14FC143F 8F7779C6 EB9F7FA1 7299AEAD B6889018 * 501D289E 4900F7E4 331B99DE C4B5433A C7D329EE B6DD2654 5E96E55B 874BE909 * * "a" x 1000000 * 384: * 9D0E1809 716474CB 086E834E 310A4A1C ED149E9C 00F24852 * 7972CEC5 704C2A5B 07B8B3DC 38ECC4EB AE97DDD8 7F3D8985 * 512: * E718483D 0CE76964 4E2E42C7 BC15B463 8E1F98B1 3B204428 5632A803 AFA973EB * DE0FF244 877EA60A 4CB0432C E577C31B EB009C5C 2C49AA2E 4EADB217 AD8CC09B */ #include #include #include "util.h" #include "algorithms.h" typedef struct { u64 h0,h1,h2,h3,h4,h5,h6,h7; u64 nblocks; byte buf[128]; int count; } SHA512_CONTEXT; static void burn_stack (int bytes) { char buf[128]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } void sha512_init( SHA512_CONTEXT *hd ) { hd->h0 = U64_C(0x6a09e667f3bcc908); hd->h1 = U64_C(0xbb67ae8584caa73b); hd->h2 = U64_C(0x3c6ef372fe94f82b); hd->h3 = U64_C(0xa54ff53a5f1d36f1); hd->h4 = U64_C(0x510e527fade682d1); hd->h5 = U64_C(0x9b05688c2b3e6c1f); hd->h6 = U64_C(0x1f83d9abfb41bd6b); hd->h7 = U64_C(0x5be0cd19137e2179); hd->nblocks = 0; hd->count = 0; } void sha384_init( SHA512_CONTEXT *hd ) { hd->h0 = U64_C(0xcbbb9d5dc1059ed8); hd->h1 = U64_C(0x629a292a367cd507); hd->h2 = U64_C(0x9159015a3070dd17); hd->h3 = U64_C(0x152fecd8f70e5939); hd->h4 = U64_C(0x67332667ffc00b31); hd->h5 = U64_C(0x8eb44a8768581511); hd->h6 = U64_C(0xdb0c2e0d64f98fa7); hd->h7 = U64_C(0x47b5481dbefa4fa4); hd->nblocks = 0; hd->count = 0; } /**************** * Transform the message W which consists of 16 64-bit-words */ static void transform( SHA512_CONTEXT *hd, byte *data ) { u64 a,b,c,d,e,f,g,h; u64 w[80]; int t; static const u64 k[]= { U64_C(0x428a2f98d728ae22), U64_C(0x7137449123ef65cd), U64_C(0xb5c0fbcfec4d3b2f), U64_C(0xe9b5dba58189dbbc), U64_C(0x3956c25bf348b538), U64_C(0x59f111f1b605d019), U64_C(0x923f82a4af194f9b), U64_C(0xab1c5ed5da6d8118), U64_C(0xd807aa98a3030242), U64_C(0x12835b0145706fbe), U64_C(0x243185be4ee4b28c), U64_C(0x550c7dc3d5ffb4e2), U64_C(0x72be5d74f27b896f), U64_C(0x80deb1fe3b1696b1), U64_C(0x9bdc06a725c71235), U64_C(0xc19bf174cf692694), U64_C(0xe49b69c19ef14ad2), U64_C(0xefbe4786384f25e3), U64_C(0x0fc19dc68b8cd5b5), U64_C(0x240ca1cc77ac9c65), U64_C(0x2de92c6f592b0275), U64_C(0x4a7484aa6ea6e483), U64_C(0x5cb0a9dcbd41fbd4), U64_C(0x76f988da831153b5), U64_C(0x983e5152ee66dfab), U64_C(0xa831c66d2db43210), U64_C(0xb00327c898fb213f), U64_C(0xbf597fc7beef0ee4), U64_C(0xc6e00bf33da88fc2), U64_C(0xd5a79147930aa725), U64_C(0x06ca6351e003826f), U64_C(0x142929670a0e6e70), U64_C(0x27b70a8546d22ffc), U64_C(0x2e1b21385c26c926), U64_C(0x4d2c6dfc5ac42aed), U64_C(0x53380d139d95b3df), U64_C(0x650a73548baf63de), U64_C(0x766a0abb3c77b2a8), U64_C(0x81c2c92e47edaee6), U64_C(0x92722c851482353b), U64_C(0xa2bfe8a14cf10364), U64_C(0xa81a664bbc423001), U64_C(0xc24b8b70d0f89791), U64_C(0xc76c51a30654be30), U64_C(0xd192e819d6ef5218), U64_C(0xd69906245565a910), U64_C(0xf40e35855771202a), U64_C(0x106aa07032bbd1b8), U64_C(0x19a4c116b8d2d0c8), U64_C(0x1e376c085141ab53), U64_C(0x2748774cdf8eeb99), U64_C(0x34b0bcb5e19b48a8), U64_C(0x391c0cb3c5c95a63), U64_C(0x4ed8aa4ae3418acb), U64_C(0x5b9cca4f7763e373), U64_C(0x682e6ff3d6b2b8a3), U64_C(0x748f82ee5defb2fc), U64_C(0x78a5636f43172f60), U64_C(0x84c87814a1f0ab72), U64_C(0x8cc702081a6439ec), U64_C(0x90befffa23631e28), U64_C(0xa4506cebde82bde9), U64_C(0xbef9a3f7b2c67915), U64_C(0xc67178f2e372532b), U64_C(0xca273eceea26619c), U64_C(0xd186b8c721c0c207), U64_C(0xeada7dd6cde0eb1e), U64_C(0xf57d4f7fee6ed178), U64_C(0x06f067aa72176fba), U64_C(0x0a637dc5a2c898a6), U64_C(0x113f9804bef90dae), U64_C(0x1b710b35131c471b), U64_C(0x28db77f523047d84), U64_C(0x32caab7b40c72493), U64_C(0x3c9ebe0a15c9bebc), U64_C(0x431d67c49c100d4c), U64_C(0x4cc5d4becb3e42b6), U64_C(0x597f299cfc657e2a), U64_C(0x5fcb6fab3ad6faec), U64_C(0x6c44198c4a475817) }; /* get values from the chaining vars */ a = hd->h0; b = hd->h1; c = hd->h2; d = hd->h3; e = hd->h4; f = hd->h5; g = hd->h6; h = hd->h7; #ifdef BIG_ENDIAN_HOST memcpy( w, data, 128 ); #else { int i; byte *p2; for(i=0, p2=(byte*)w; i < 16; i++, p2 += 8 ) { p2[7] = *data++; p2[6] = *data++; p2[5] = *data++; p2[4] = *data++; p2[3] = *data++; p2[2] = *data++; p2[1] = *data++; p2[0] = *data++; } } #endif #define ROTR(x,n) (((x)>>(n)) | ((x)<<(64-(n)))) #define Ch(x,y,z) (((x) & (y)) ^ ((~(x)) & (z))) #define Maj(x,y,z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z))) #define Sum0(x) (ROTR((x),28) ^ ROTR((x),34) ^ ROTR((x),39)) #define Sum1(x) (ROTR((x),14) ^ ROTR((x),18) ^ ROTR((x),41)) #define S0(x) (ROTR((x),1) ^ ROTR((x),8) ^ ((x)>>7)) #define S1(x) (ROTR((x),19) ^ ROTR((x),61) ^ ((x)>>6)) for(t=16;t<80;t++) w[t] = S1(w[t-2]) + w[t-7] + S0(w[t-15]) + w[t-16]; for(t=0;t<80;t++) { u64 t1,t2; t1=h+Sum1(e)+Ch(e,f,g)+k[t]+w[t]; t2=Sum0(a)+Maj(a,b,c); h=g; g=f; f=e; e=d+t1; d=c; c=b; b=a; a=t1+t2; /* printf("t=%d a=%016llX b=%016llX c=%016llX d=%016llX e=%016llX f=%016llX g=%016llX h=%016llX\n",t,a,b,c,d,e,f,g,h); */ } /* update chaining vars */ hd->h0 += a; hd->h1 += b; hd->h2 += c; hd->h3 += d; hd->h4 += e; hd->h5 += f; hd->h6 += g; hd->h7 += h; } /* Update the message digest with the contents * of INBUF with length INLEN. */ static void sha512_write( SHA512_CONTEXT *hd, byte *inbuf, size_t inlen) { if( hd->count == 128 ) { /* flush the buffer */ transform( hd, hd->buf ); burn_stack (768); hd->count = 0; hd->nblocks++; } if( !inbuf ) return; if( hd->count ) { for( ; inlen && hd->count < 128; inlen-- ) hd->buf[hd->count++] = *inbuf++; sha512_write( hd, NULL, 0 ); if( !inlen ) return; } while( inlen >= 128 ) { transform( hd, inbuf ); hd->count = 0; hd->nblocks++; inlen -= 128; inbuf += 128; } burn_stack (768); for( ; inlen && hd->count < 128; inlen-- ) hd->buf[hd->count++] = *inbuf++; } /* The routine final terminates the computation and * returns the digest. * The handle is prepared for a new cycle, but adding bytes to the * handle will the destroy the returned buffer. * Returns: 64 bytes representing the digest. When used for sha384, * we take the leftmost 48 of those bytes. */ static void sha512_final(SHA512_CONTEXT *hd) { u64 t, msb, lsb; byte *p; sha512_write(hd, NULL, 0); /* flush */; t = hd->nblocks; /* multiply by 128 to make a byte count */ lsb = t << 7; msb = t >> 57; /* add the count */ t = lsb; if( (lsb += hd->count) < t ) msb++; /* multiply by 8 to make a bit count */ t = lsb; lsb <<= 3; msb <<= 3; msb |= t >> 61; if( hd->count < 112 ) { /* enough room */ hd->buf[hd->count++] = 0x80; /* pad */ while( hd->count < 112 ) hd->buf[hd->count++] = 0; /* pad */ } else { /* need one extra block */ hd->buf[hd->count++] = 0x80; /* pad character */ while( hd->count < 128 ) hd->buf[hd->count++] = 0; sha512_write(hd, NULL, 0); /* flush */; memset(hd->buf, 0, 112 ); /* fill next block with zeroes */ } /* append the 128 bit count */ hd->buf[112] = msb >> 56; hd->buf[113] = msb >> 48; hd->buf[114] = msb >> 40; hd->buf[115] = msb >> 32; hd->buf[116] = msb >> 24; hd->buf[117] = msb >> 16; hd->buf[118] = msb >> 8; hd->buf[119] = msb ; hd->buf[120] = lsb >> 56; hd->buf[121] = lsb >> 48; hd->buf[122] = lsb >> 40; hd->buf[123] = lsb >> 32; hd->buf[124] = lsb >> 24; hd->buf[125] = lsb >> 16; hd->buf[126] = lsb >> 8; hd->buf[127] = lsb ; transform( hd, hd->buf ); burn_stack (768); p = hd->buf; #ifdef BIG_ENDIAN_HOST #define X(a) do { *(u64*)p = hd->h##a ; p += 8; } while(0) #else /* little endian */ #define X(a) do { *p++ = hd->h##a >> 56; *p++ = hd->h##a >> 48; \ *p++ = hd->h##a >> 40; *p++ = hd->h##a >> 32; \ *p++ = hd->h##a >> 24; *p++ = hd->h##a >> 16; \ *p++ = hd->h##a >> 8; *p++ = hd->h##a; } while(0) #endif X(0); X(1); X(2); X(3); X(4); X(5); /* Note that these last two chunks are included even for SHA384. We just ignore them. */ X(6); X(7); #undef X } static byte * sha512_read( SHA512_CONTEXT *hd ) { return hd->buf; } /**************** * Return some information about the algorithm. We need algo here to * distinguish different flavors of the algorithm. * Returns: A pointer to string describing the algorithm or NULL if * the ALGO is invalid. */ const char * sha512_get_info( int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ) { static byte asn[] = /* Object ID is 2.16.840.1.101.3.4.2.3 */ { 0x30, 0x51, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x03, 0x05, 0x00, 0x04, 0x40 }; if( algo != 10 ) return NULL; *contextsize = sizeof(SHA512_CONTEXT); *r_asnoid = asn; *r_asnlen = DIM(asn); *r_mdlen = 64; *(void (**)(SHA512_CONTEXT *))r_init = sha512_init; *(void (**)(SHA512_CONTEXT *, byte*, size_t))r_write = sha512_write; *(void (**)(SHA512_CONTEXT *))r_final = sha512_final; *(byte *(**)(SHA512_CONTEXT *))r_read = sha512_read; return "SHA512"; } /* SHA384 is really a truncated SHA512 with a different initialization */ const char * sha384_get_info( int algo, size_t *contextsize, byte **r_asnoid, int *r_asnlen, int *r_mdlen, void (**r_init)( void *c ), void (**r_write)( void *c, byte *buf, size_t nbytes ), void (**r_final)( void *c ), byte *(**r_read)( void *c ) ) { static byte asn[] = /* Object ID is 2.16.840.1.101.3.4.2.2 */ { 0x30, 0x41, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x02, 0x05, 0x00, 0x04, 0x30 }; if( algo != 9 ) return NULL; *contextsize = sizeof(SHA512_CONTEXT); *r_asnoid = asn; *r_asnlen = DIM(asn); *r_mdlen = 48; *(void (**)(SHA512_CONTEXT *))r_init = sha384_init; *(void (**)(SHA512_CONTEXT *, byte*, size_t))r_write = sha512_write; *(void (**)(SHA512_CONTEXT *))r_final = sha512_final; *(byte *(**)(SHA512_CONTEXT *))r_read = sha512_read; return "SHA384"; } gnupg-1.4.20/cipher/random.c0000644000175000017500000005503412635262326012553 00000000000000/* random.c - random number generator * Copyright (C) 1998, 1999, 2000, 2001, 2002, * 2003, 2006 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 3 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, see . */ /**************** * This random number generator is modelled after the one described * in Peter Gutmann's Paper: "Software Generation of Practically * Strong Random Numbers". */ #include #include #include #include #include #include #include #ifndef _WIN32 #include #endif #include #include #include #include #ifdef HAVE_GETHRTIME #include #endif #ifdef HAVE_GETTIMEOFDAY #include #endif #ifdef HAVE_TIMES #include #endif #ifdef HAVE_GETRUSAGE #include #endif #ifdef _WIN32 #include #endif #include "util.h" #include "rmd.h" #include "ttyio.h" #include "i18n.h" #include "random.h" #include "rand-internal.h" #include "algorithms.h" #ifdef __VMS # include # include "vms.h" #endif /* def __VMS */ #ifndef RAND_MAX /* for SunOS */ #define RAND_MAX 32767 #endif /* 2008-03-31 SMS. * VMS C RTL before V8.3 lacks byte-range file locking, but by default, * a file opened for write access is not shared, so mutual exclusion can * most generally be handled at the open(). */ /* Check whether we can lock the seed file read write. */ #if defined(HAVE_FCNTL) && defined(HAVE_FTRUNCATE) \ && !defined(HAVE_W32_SYSTEM) && !defined(__VMS) #define LOCK_SEED_FILE 1 #else #define LOCK_SEED_FILE 0 #endif #if SIZEOF_UNSIGNED_LONG == 8 #define ADD_VALUE 0xa5a5a5a5a5a5a5a5 #elif SIZEOF_UNSIGNED_LONG == 4 #define ADD_VALUE 0xa5a5a5a5 #else #error weird size for an unsigned long #endif #define BLOCKLEN 64 /* hash this amount of bytes */ #define DIGESTLEN 20 /* into a digest of this length (rmd160) */ /* poolblocks is the number of digests which make up the pool * and poolsize must be a multiple of the digest length * to make the AND operations faster, the size should also be * a multiple of ulong */ #define POOLBLOCKS 30 #define POOLSIZE (POOLBLOCKS*DIGESTLEN) #if (POOLSIZE % SIZEOF_UNSIGNED_LONG) #error Please make sure that poolsize is a multiple of ulong #endif #define POOLWORDS (POOLSIZE / SIZEOF_UNSIGNED_LONG) static int is_initialized; #define MASK_LEVEL(a) do {if( a > 2 ) a = 2; else if( a < 0 ) a = 0; } while(0) static char *rndpool; /* allocated size is POOLSIZE+BLOCKLEN */ static char *keypool; /* allocated size is POOLSIZE+BLOCKLEN */ static size_t pool_readpos; static size_t pool_writepos; static int pool_filled; static int pool_balance; static int just_mixed; static int did_initial_extra_seeding; static char *seed_file_name; static int allow_seed_file_update; static int no_seed_file_locking; static int secure_alloc; static int quick_test; static int faked_rng; static void read_pool( byte *buffer, size_t length, int level ); static void add_randomness( const void *buffer, size_t length, int source ); static void random_poll(void); static void read_random_source( int requester, size_t length, int level); static int gather_faked( void (*add)(const void*, size_t, int), int requester, size_t length, int level ); static struct { ulong mixrnd; ulong mixkey; ulong slowpolls; ulong fastpolls; ulong getbytes1; ulong ngetbytes1; ulong getbytes2; ulong ngetbytes2; ulong addbytes; ulong naddbytes; } rndstats; static int (* getfnc_gather_random (void))(void (*)(const void*, size_t, int), int, size_t, int) { #ifdef USE_ALL_RANDOM_MODULES static int (*fnc)(void (*)(const void*, size_t, int), int, size_t, int); if (fnc) return fnc; # ifdef USE_RNDLINUX if ( !access (NAME_OF_DEV_RANDOM, R_OK) && !access (NAME_OF_DEV_URANDOM, R_OK)) { fnc = rndlinux_gather_random; return fnc; } # endif # ifdef USE_RNDEGD if ( rndegd_connect_socket (1) != -1 ) { fnc = rndegd_gather_random; return fnc; } # endif # ifdef USE_RNDUNIX fnc = rndunix_gather_random; return fnc; # endif log_fatal (_("no entropy gathering module detected\n")); #else # ifdef USE_RNDLINUX return rndlinux_gather_random; # endif # ifdef USE_RNDUNIX return rndunix_gather_random; # endif # ifdef USE_RNDVMS return rndvms_gather_random; # endif # ifdef USE_RNDEGD return rndegd_gather_random; # endif # ifdef USE_RNDW32 return rndw32_gather_random; # endif # ifdef USE_RNDRISCOS return rndriscos_gather_random; # endif #endif return NULL; } static int (* getfnc_fast_random_poll (void))( void (*)(const void*, size_t, int), int) { #ifdef USE_RNDW32 return rndw32_gather_random_fast; #endif return NULL; } static void initialize(void) { /* The data buffer is allocated somewhat larger, so that * we can use this extra space (which is allocated in secure memory) * as a temporary hash buffer */ rndpool = secure_alloc ? xmalloc_secure_clear(POOLSIZE+BLOCKLEN) : xmalloc_clear(POOLSIZE+BLOCKLEN); keypool = secure_alloc ? xmalloc_secure_clear(POOLSIZE+BLOCKLEN) : xmalloc_clear(POOLSIZE+BLOCKLEN); is_initialized = 1; } static void burn_stack (int bytes) { char buf[128]; wipememory(buf,sizeof buf); bytes -= sizeof buf; if (bytes > 0) burn_stack (bytes); } void random_dump_stats() { fprintf(stderr, "random usage: poolsize=%d mixed=%lu polls=%lu/%lu added=%lu/%lu\n" " outmix=%lu getlvl1=%lu/%lu getlvl2=%lu/%lu\n", POOLSIZE, rndstats.mixrnd, rndstats.slowpolls, rndstats.fastpolls, rndstats.naddbytes, rndstats.addbytes, rndstats.mixkey, rndstats.ngetbytes1, rndstats.getbytes1, rndstats.ngetbytes2, rndstats.getbytes2 ); } void secure_randoxmalloc() { secure_alloc = 1; } int quick_random_gen( int onoff ) { int last; read_random_source(0,0,0); /* init */ last = quick_test; if( onoff != -1 ) quick_test = onoff; return faked_rng? 1 : last; } /**************** * Fill the buffer with LENGTH bytes of cryptographically strong * random bytes. level 0 is not very strong, 1 is strong enough * for most usage, 2 is good for key generation stuff but may be very slow. */ void randomize_buffer( byte *buffer, size_t length, int level ) { char *p = get_random_bits( length*8, level, 1 ); memcpy( buffer, p, length ); xfree(p); } /* Randomize the MPI by setting it to NBITS of random of quality LEVEL. */ void randomize_mpi (MPI mpi, size_t nbits, int level) { unsigned char *buffer; buffer = get_random_bits (nbits, level, mpi_is_secure (mpi)); mpi_set_buffer (mpi, buffer, (nbits+7)/8, 0); xfree (buffer); } int random_is_faked() { if( !is_initialized ) initialize(); return faked_rng || quick_test; } /* Disable locking of seed files. */ void random_disable_locking () { no_seed_file_locking = 1; } /**************** * Return a pointer to a randomized buffer of level 0 and LENGTH bits * caller must free the buffer. * Note: The returned value is rounded up to bytes. */ byte * get_random_bits( size_t nbits, int level, int secure ) { byte *buf, *p; size_t nbytes = (nbits+7)/8; if( quick_test && level > 1 ) level = 1; MASK_LEVEL(level); if( level == 1 ) { rndstats.getbytes1 += nbytes; rndstats.ngetbytes1++; } else if( level >= 2 ) { rndstats.getbytes2 += nbytes; rndstats.ngetbytes2++; } buf = secure && secure_alloc ? xmalloc_secure( nbytes ) : xmalloc( nbytes ); for( p = buf; nbytes > 0; ) { size_t n = nbytes > POOLSIZE? POOLSIZE : nbytes; read_pool( p, n, level ); nbytes -= n; p += n; } return buf; } /**************** * Mix the pool */ static void mix_pool(byte *pool) { char *hashbuf = pool + POOLSIZE; char *p, *pend; int i, n; RMD160_CONTEXT md; rmd160_init( &md ); #if DIGESTLEN != 20 #error must have a digest length of 20 for ripe-md-160 #endif /* loop over the pool */ pend = pool + POOLSIZE; memcpy(hashbuf, pend - DIGESTLEN, DIGESTLEN ); memcpy(hashbuf+DIGESTLEN, pool, BLOCKLEN-DIGESTLEN); rmd160_mixblock( &md, hashbuf); memcpy(pool, hashbuf, 20 ); p = pool; for( n=1; n < POOLBLOCKS; n++ ) { memcpy(hashbuf, p, DIGESTLEN ); p += DIGESTLEN; if( p+DIGESTLEN+BLOCKLEN < pend ) memcpy(hashbuf+DIGESTLEN, p+DIGESTLEN, BLOCKLEN-DIGESTLEN); else { char *pp = p+DIGESTLEN; for(i=DIGESTLEN; i < BLOCKLEN; i++ ) { if( pp >= pend ) pp = pool; hashbuf[i] = *pp++; } } rmd160_mixblock( &md, hashbuf); memcpy(p, hashbuf, 20 ); } burn_stack (384); /* for the rmd160_mixblock() */ } void set_random_seed_file( const char *name ) { if( seed_file_name ) BUG(); seed_file_name = xstrdup( name ); } /* Lock an open file identified by file descriptor FD and wait a reasonable time to succeed. With FOR_WRITE set to true a Rite lock will be taken. FNAME is used only for diagnostics. Returns 0 on success or -1 on error. */ static int lock_seed_file (int fd, const char *fname, int for_write) { #if LOCK_SEED_FILE struct flock lck; struct timeval tv; int backoff=0; if (no_seed_file_locking) return 0; /* We take a lock on the entire file. */ memset (&lck, 0, sizeof lck); lck.l_type = for_write? F_WRLCK : F_RDLCK; lck.l_whence = SEEK_SET; while (fcntl (fd, F_SETLK, &lck) == -1) { if (errno != EAGAIN && errno != EACCES) { log_info (_("can't lock `%s': %s\n"), fname, strerror (errno)); return -1; } if (backoff > 2) /* Show the first message after ~3.75 seconds. */ log_info( _("waiting for lock on `%s'...\n"), fname); tv.tv_sec = backoff; tv.tv_usec = 250000; select (0, NULL, NULL, NULL, &tv); if (backoff < 10) backoff++ ; } #endif /*LOCK_SEED_FILE*/ return 0; } /**************** * Read in a seed form the random_seed file * and return true if this was successful */ static int read_seed_file(void) { int fd; struct stat sb; unsigned char buffer[POOLSIZE]; int n; if( !seed_file_name ) return 0; #if defined(HAVE_DOSISH_SYSTEM) || defined(__CYGWIN__) fd = open( seed_file_name, O_RDONLY | O_BINARY ); #elif defined( __VMS) /* We're only reading, so allow others to do anything. */ fd = open( seed_file_name, O_RDONLY, 0777, "shr=get,put,upd" ); #else fd = open( seed_file_name, O_RDONLY ); #endif if( fd == -1 && errno == ENOENT) { allow_seed_file_update = 1; return 0; } if( fd == -1 ) { log_info(_("can't open `%s': %s\n"), seed_file_name, strerror(errno) ); return 0; } if (lock_seed_file (fd, seed_file_name, 0)) { close (fd); return 0; } if( fstat( fd, &sb ) ) { log_info(_("can't stat `%s': %s\n"), seed_file_name, strerror(errno) ); close(fd); return 0; } if( !S_ISREG(sb.st_mode) ) { log_info(_("`%s' is not a regular file - ignored\n"), seed_file_name ); close(fd); return 0; } if( !sb.st_size ) { log_info(_("note: random_seed file is empty\n") ); close(fd); allow_seed_file_update = 1; return 0; } if( sb.st_size != POOLSIZE ) { log_info(_("WARNING: invalid size of random_seed file - not used\n") ); close(fd); return 0; } do { n = read( fd, buffer, POOLSIZE ); } while( n == -1 && errno == EINTR ); /* The N==0, ENOENT, and N!=POOLSIZE cases may happen if another process is updating the file. For consistency we use the same recovery strategy as with the pre-read checks. */ if (!n) { log_info(_("note: random_seed file is empty\n") ); allow_seed_file_update = 1; close(fd); return 0; } else if( n == -1 && errno == ENOENT) { /* On a Unix system that should never happen. However, I can imagine this error code on non-inode based systems. */ log_info(_("can't read `%s': %s\n"), seed_file_name, strerror(errno)); allow_seed_file_update = 1; close(fd); return 0; } else if( n == -1 ) { /* A real read error. */ log_fatal(_("can't read `%s': %s\n"), seed_file_name,strerror(errno) ); close(fd); return 0; } else if ( n != POOLSIZE ) { log_info(_("WARNING: invalid size of random_seed file - not used\n") ); close(fd); return 0; } close(fd); add_randomness( buffer, POOLSIZE, 0 ); /* add some minor entropy to the pool now (this will also force a mixing) */ { pid_t x = getpid(); add_randomness( &x, sizeof(x), 0 ); } { time_t x = time(NULL); add_randomness( &x, sizeof(x), 0 ); } { clock_t x = clock(); add_randomness( &x, sizeof(x), 0 ); } /* And read a few bytes from our entropy source. By using * a level of 0 this will not block and might not return anything * with some entropy drivers, however the rndlinux driver will use * /dev/urandom and return some stuff - Do not read too much as we * want to be friendly to the scarce system entropy resource. */ read_random_source( 0, 16, 0 ); allow_seed_file_update = 1; return 1; } void update_random_seed_file() { ulong *sp, *dp; int fd, i; if( !seed_file_name || !is_initialized || !pool_filled ) return; if( !allow_seed_file_update ) { log_info(_("note: random_seed file not updated\n")); return; } /* copy the entropy pool to a scratch pool and mix both of them */ for(i=0,dp=(ulong*)keypool, sp=(ulong*)rndpool; i < POOLWORDS; i++, dp++, sp++ ) { *dp = *sp + ADD_VALUE; } mix_pool(rndpool); rndstats.mixrnd++; mix_pool(keypool); rndstats.mixkey++; #if defined(HAVE_DOSISH_SYSTEM) || defined(__CYGWIN__) fd = open( seed_file_name, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, S_IRUSR|S_IWUSR ); #else # if LOCK_SEED_FILE fd = open( seed_file_name, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR ); # else # ifdef __VMS /* Open the seed file for exclusive write access, but allow other * readers. Loop until success. Complain after a few failures. */ { int backoff = 0; while ((fd = open( seed_file_name, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR, "shr=get")) == -1 ) { if ((errno != EVMSERR) || (vaxc$errno != RMS$_FLK)) { /* Some unexpected open failure. */ log_info (_("can't lock `%s': %s\n"), seed_file_name, strerror (errno)); return; } if (backoff > 2) /* Show the first message after ~3.75 seconds. */ log_info( _("waiting for lock on `%s'...\n"), seed_file_name); wait_vms( backoff+ 0.25); if (backoff < 10) backoff++ ; } } # else /* !def __VMS */ fd = open( seed_file_name, O_WRONLY|O_CREAT|O_TRUNC, S_IRUSR|S_IWUSR ); # endif /* !def __VMS */ # endif #endif if( fd == -1 ) { log_info(_("can't create `%s': %s\n"), seed_file_name, strerror(errno)); return; } if (lock_seed_file (fd, seed_file_name, 1)) { close (fd); return; } #if LOCK_SEED_FILE if (ftruncate (fd, 0)) { log_info(_("can't write `%s': %s\n"), seed_file_name, strerror(errno)); close (fd); return; } #endif /*LOCK_SEED_FILE*/ do { i = write( fd, keypool, POOLSIZE ); } while( i == -1 && errno == EINTR ); if( i != POOLSIZE ) { log_info(_("can't write `%s': %s\n"), seed_file_name, strerror(errno) ); } if( close(fd) ) log_info(_("can't close `%s': %s\n"), seed_file_name, strerror(errno) ); } static void read_pool( byte *buffer, size_t length, int level ) { int i; ulong *sp, *dp; if( length > POOLSIZE ) { log_bug("too many random bits requested\n"); } if( !pool_filled ) { if( read_seed_file() ) pool_filled = 1; } /* For level 2 quality (key generation) we alwas make * sure that the pool has been seeded enough initially */ if( level == 2 && !did_initial_extra_seeding ) { size_t needed; pool_balance = 0; needed = length - pool_balance; if( needed < POOLSIZE/2 ) needed = POOLSIZE/2; else if( needed > POOLSIZE ) BUG(); read_random_source( 3, needed, 2 ); pool_balance += needed; did_initial_extra_seeding=1; } /* for level 2 make sure that there is enough random in the pool */ if( level == 2 && pool_balance < length ) { size_t needed; if( pool_balance < 0 ) pool_balance = 0; needed = length - pool_balance; if( needed > POOLSIZE ) BUG(); read_random_source( 3, needed, 2 ); pool_balance += needed; } /* make sure the pool is filled */ while( !pool_filled ) random_poll(); /* do always a fast random poll */ fast_random_poll(); if( !level ) { /* no need for cryptographic strong random */ /* create a new pool */ for(i=0,dp=(ulong*)keypool, sp=(ulong*)rndpool; i < POOLWORDS; i++, dp++, sp++ ) *dp = *sp + ADD_VALUE; /* must mix both pools */ mix_pool(rndpool); rndstats.mixrnd++; mix_pool(keypool); rndstats.mixkey++; memcpy( buffer, keypool, length ); } else { /* mix the pool (if add_randomness() didn't it) */ if( !just_mixed ) { mix_pool(rndpool); rndstats.mixrnd++; } /* create a new pool */ for(i=0,dp=(ulong*)keypool, sp=(ulong*)rndpool; i < POOLWORDS; i++, dp++, sp++ ) *dp = *sp + ADD_VALUE; /* and mix both pools */ mix_pool(rndpool); rndstats.mixrnd++; mix_pool(keypool); rndstats.mixkey++; /* read the required data * we use a readpoiter to read from a different postion each * time */ while( length-- ) { *buffer++ = keypool[pool_readpos++]; if( pool_readpos >= POOLSIZE ) pool_readpos = 0; pool_balance--; } if( pool_balance < 0 ) pool_balance = 0; /* and clear the keypool */ wipememory(keypool, POOLSIZE); } } /**************** * Add LENGTH bytes of randomness from buffer to the pool. * source may be used to specify the randomness source. * Source is: * 0 - used ony for initialization * 1 - fast random poll function * 2 - normal poll function * 3 - used when level 2 random quality has been requested * to do an extra pool seed. */ static void add_randomness( const void *buffer, size_t length, int source ) { const byte *p = buffer; if( !is_initialized ) initialize(); rndstats.addbytes += length; rndstats.naddbytes++; while( length-- ) { rndpool[pool_writepos++] ^= *p++; if( pool_writepos >= POOLSIZE ) { if( source > 1 ) pool_filled = 1; pool_writepos = 0; mix_pool(rndpool); rndstats.mixrnd++; just_mixed = !length; } } } static void random_poll() { rndstats.slowpolls++; read_random_source( 2, POOLSIZE/5, 1 ); } void fast_random_poll() { static int (*fnc)( void (*)(const void*, size_t, int), int) = NULL; static int initialized = 0; rndstats.fastpolls++; if( !initialized ) { if( !is_initialized ) initialize(); initialized = 1; fnc = getfnc_fast_random_poll(); } if( fnc ) { (*fnc)( add_randomness, 1 ); return; } /* fall back to the generic function */ #if defined(HAVE_GETHRTIME) && !defined(HAVE_BROKEN_GETHRTIME) { hrtime_t tv; /* On some Solaris and HPUX system gethrtime raises an SIGILL, but we * checked this with configure */ tv = gethrtime(); add_randomness( &tv, sizeof(tv), 1 ); } #elif defined (HAVE_GETTIMEOFDAY) { struct timeval tv; if( gettimeofday( &tv, NULL ) ) BUG(); add_randomness( &tv.tv_sec, sizeof(tv.tv_sec), 1 ); add_randomness( &tv.tv_usec, sizeof(tv.tv_usec), 1 ); } #elif defined (HAVE_CLOCK_GETTIME) { struct timespec tv; if( clock_gettime( CLOCK_REALTIME, &tv ) == -1 ) BUG(); add_randomness( &tv.tv_sec, sizeof(tv.tv_sec), 1 ); add_randomness( &tv.tv_nsec, sizeof(tv.tv_nsec), 1 ); } #elif defined (HAVE_TIMES) { struct tms buf; if( times( &buf ) == -1 ) BUG(); add_randomness( &buf, sizeof buf, 1 ); } #endif #ifdef HAVE_GETRUSAGE #ifndef RUSAGE_SELF #ifdef __GCC__ #warning There is no RUSAGE_SELF on this system #endif #else { struct rusage buf; /* QNX/Neutrino does return ENOSYS - so we just ignore it and * add whatever is in buf. In a chroot environment it might not * work at all (i.e. because /proc/ is not accessible), so we better * ignore all error codes and hope for the best */ getrusage( RUSAGE_SELF, &buf ); add_randomness( &buf, sizeof buf, 1 ); wipememory( &buf, sizeof buf ); } #endif #endif /* time and clock are available on all systems - so * we better do it just in case one of the above functions * didn't work */ { time_t x = time(NULL); add_randomness( &x, sizeof(x), 1 ); } { clock_t x = clock(); add_randomness( &x, sizeof(x), 1 ); } } static void read_random_source( int requester, size_t length, int level ) { static int (*fnc)(void (*)(const void*, size_t, int), int, size_t, int) = NULL; if( !fnc ) { if( !is_initialized ) initialize(); fnc = getfnc_gather_random(); if( !fnc ) { faked_rng = 1; fnc = gather_faked; } if( !requester && !length && !level ) return; /* init only */ } if( (*fnc)( add_randomness, requester, length, level ) < 0 ) log_fatal("No way to gather entropy for the RNG\n"); } static int gather_faked( void (*add)(const void*, size_t, int), int requester, size_t length, int level ) { static int initialized=0; size_t n; char *buffer, *p; if( !initialized ) { log_info(_("WARNING: using insecure random number generator!!\n")); tty_printf(_("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")); initialized=1; #ifdef HAVE_RAND srand(make_timestamp()*getpid()); #else srandom(make_timestamp()*getpid()); #endif } p = buffer = xmalloc( length ); n = length; #ifdef HAVE_RAND while( n-- ) *p++ = ((unsigned)(1 + (int) (256.0*rand()/(RAND_MAX+1.0)))-1); #else while( n-- ) *p++ = ((unsigned)(1 + (int) (256.0*random()/(RAND_MAX+1.0)))-1); #endif add_randomness( buffer, length, requester ); xfree(buffer); return 0; /* okay */ } gnupg-1.4.20/cipher/md.c0000644000175000017500000002717212635262326011675 00000000000000/* md.c - message digest dispatcher * Copyright (C) 1998, 1999, 2002, 2003, 2006 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 3 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, see . */ #include #include #include #include #include #include #include "util.h" #include "cipher.h" #include "errors.h" #include "algorithms.h" #include "i18n.h" /**************** * This structure is used for the list of available algorithms * and for the list of algorithms in MD_HANDLE. */ struct md_digest_list_s { struct md_digest_list_s *next; const char *name; int algo; byte *asnoid; int asnlen; int mdlen; void (*init)( void *c ); void (*write)( void *c, byte *buf, size_t nbytes ); void (*final)( void *c ); byte *(*read)( void *c ); size_t contextsize; /* allocate this amount of context */ PROPERLY_ALIGNED_TYPE context; }; static struct md_digest_list_s *digest_list; static struct md_digest_list_s * new_list_item (int algo, const char *(*get_info)( int, size_t*,byte**, int*, int*, void (**)(void*), void (**)(void*,byte*,size_t), void (**)(void*),byte *(**)(void*))) { struct md_digest_list_s *r; r = xmalloc_clear (sizeof *r ); r->algo = algo; r->name = (*get_info)( algo, &r->contextsize, &r->asnoid, &r->asnlen, &r->mdlen, &r->init, &r->write, &r->final, &r->read ); if (!r->name ) { xfree(r); r = NULL; } if (r) { r->next = digest_list; digest_list = r; } return r; } /* Load all available hash algorithms and return true. Subsequent calls will return 0. */ static int load_digest_module (void) { static int initialized = 0; if (initialized) return 0; initialized = 1; /* We load them in reverse order so that the most frequently used are the first in the list. */ #ifdef USE_SHA512 if (!new_list_item (DIGEST_ALGO_SHA512, sha512_get_info)) BUG (); if (!new_list_item (DIGEST_ALGO_SHA384, sha384_get_info)) BUG (); #endif #ifdef USE_SHA256 if (!new_list_item (DIGEST_ALGO_SHA256, sha256_get_info)) BUG (); if (!new_list_item (DIGEST_ALGO_SHA224, sha224_get_info)) BUG (); #endif if (!new_list_item (DIGEST_ALGO_MD5, md5_get_info)) BUG (); if (!new_list_item (DIGEST_ALGO_RMD160, rmd160_get_info)) BUG (); if (!new_list_item (DIGEST_ALGO_SHA1, sha1_get_info)) BUG (); return 1; } /**************** * Map a string to the digest algo */ int string_to_digest_algo( const char *string ) { struct md_digest_list_s *r; do { for(r = digest_list; r; r = r->next ) if( !ascii_strcasecmp( r->name, string ) ) return r->algo; } while( !r && load_digest_module () ); /* Didn't find it, so try the Hx format */ if(string[0]=='H' || string[0]=='h') { long val; char *endptr; string++; val=strtol(string,&endptr,10); if(*string!='\0' && *endptr=='\0' && check_digest_algo(val)==0) return val; } return 0; } /**************** * Map a digest algo to a string */ const char * digest_algo_to_string( int algo ) { struct md_digest_list_s *r; do { for(r = digest_list; r; r = r->next ) if( r->algo == algo ) return r->name; } while( !r && load_digest_module () ); return NULL; } int check_digest_algo( int algo ) { struct md_digest_list_s *r; do { for(r = digest_list; r; r = r->next ) if( r->algo == algo ) return 0; } while( !r && load_digest_module () ); return G10ERR_DIGEST_ALGO; } /**************** * Open a message digest handle for use with algorithm ALGO. * More algorithms may be added by md_enable(). The initial algorithm * may be 0. */ MD_HANDLE md_open( int algo, int secure ) { MD_HANDLE hd; int bufsize; if( secure ) { bufsize = 512 - sizeof( *hd ); hd = xmalloc_secure_clear( sizeof *hd + bufsize ); } else { bufsize = 1024 - sizeof( *hd ); hd = xmalloc_clear( sizeof *hd + bufsize ); } hd->bufsize = bufsize+1; /* hd has already one byte allocated */ hd->secure = secure; if( algo ) md_enable( hd, algo ); fast_random_poll(); return hd; } void md_enable( MD_HANDLE h, int algo ) { struct md_digest_list_s *r, *ac; for( ac=h->list; ac; ac = ac->next ) if( ac->algo == algo ) return ; /* already enabled */ /* find the algorithm */ do { for(r = digest_list; r; r = r->next ) if( r->algo == algo ) break; } while( !r && load_digest_module () ); if( !r ) { log_error("md_enable: algorithm %d not available\n", algo ); return; } /* and allocate a new list entry */ ac = h->secure? xmalloc_secure( sizeof *ac + r->contextsize - sizeof(r->context) ) : xmalloc( sizeof *ac + r->contextsize - sizeof(r->context) ); *ac = *r; ac->next = h->list; h->list = ac; /* and init this instance */ (*ac->init)( &ac->context.c ); } MD_HANDLE md_copy( MD_HANDLE a ) { MD_HANDLE b; struct md_digest_list_s *ar, *br; if( a->bufcount ) md_write( a, NULL, 0 ); b = a->secure ? xmalloc_secure( sizeof *b + a->bufsize - 1 ) : xmalloc( sizeof *b + a->bufsize - 1 ); memcpy( b, a, sizeof *a + a->bufsize - 1 ); b->list = NULL; b->debug = NULL; /* and now copy the complete list of algorithms */ /* I know that the copied list is reversed, but that doesn't matter */ for( ar=a->list; ar; ar = ar->next ) { br = a->secure ? xmalloc_secure( sizeof *br + ar->contextsize - sizeof(ar->context) ) : xmalloc( sizeof *br + ar->contextsize - sizeof(ar->context) ); memcpy( br, ar, sizeof(*br) + ar->contextsize - sizeof(ar->context) ); br->next = b->list; b->list = br; } if( a->debug ) md_start_debug( b, "unknown" ); return b; } /**************** * Reset all contexts and discard any buffered stuff. This may be used * instead of a md_close(); md_open(). */ void md_reset( MD_HANDLE a ) { struct md_digest_list_s *r; a->bufcount = a->finalized = 0; for( r=a->list; r; r = r->next ) { memset( r->context.c, 0, r->contextsize ); (*r->init)( &r->context.c ); } } void md_close(MD_HANDLE a) { struct md_digest_list_s *r, *r2; if( !a ) return; if( a->debug ) md_stop_debug(a); for(r=a->list; r; r = r2 ) { r2 = r->next; xfree(r); } xfree(a); } void md_write( MD_HANDLE a, const byte *inbuf, size_t inlen) { struct md_digest_list_s *r; if( a->debug ) { if( a->bufcount && fwrite(a->buffer, a->bufcount, 1, a->debug ) != 1 ) BUG(); if( inlen && fwrite(inbuf, inlen, 1, a->debug ) != 1 ) BUG(); } for(r=a->list; r; r = r->next ) { (*r->write)( &r->context.c, a->buffer, a->bufcount ); /* Fixme: all ->write fnc should take a const byte* */ (*r->write)( &r->context.c, (byte*)inbuf, inlen ); } a->bufcount = 0; } void md_final(MD_HANDLE a) { struct md_digest_list_s *r; if( a->finalized ) return; if( a->bufcount ) md_write( a, NULL, 0 ); for(r=a->list; r; r = r->next ) { (*r->final)( &r->context.c ); } a->finalized = 1; } /**************** * if ALGO is null get the digest for the used algo (which should be only one) */ byte * md_read( MD_HANDLE a, int algo ) { struct md_digest_list_s *r; if( !algo ) { /* return the first algorithm */ if( (r=a->list) ) { if( r->next ) log_debug("more than algorithm in md_read(0)\n"); return (*r->read)( &r->context.c ); } } else { for(r=a->list; r; r = r->next ) if( r->algo == algo ) return (*r->read)( &r->context.c ); } BUG(); return NULL; } /**************** * This function combines md_final and md_read but keeps the context * intact. This function can be used to calculate intermediate * digests. The digest is copied into buffer and the digestlength is * returned. If buffer is NULL only the needed size for buffer is returned. * buflen gives the max size of buffer. If the buffer is too shourt to * hold the complete digest, the buffer is filled with as many bytes are * possible and this value is returned. */ int md_digest( MD_HANDLE a, int algo, byte *buffer, int buflen ) { struct md_digest_list_s *r = NULL; char *context; char *digest; if( a->bufcount ) md_write( a, NULL, 0 ); if( !algo ) { /* return digest for the first algorithm */ if( (r=a->list) && r->next ) log_debug("more than algorithm in md_digest(0)\n"); } else { for(r=a->list; r; r = r->next ) if( r->algo == algo ) break; } if( !r ) BUG(); if( !buffer ) return r->mdlen; /* I don't want to change the interface, so I simply work on a copy * the context (extra overhead - should be fixed)*/ context = a->secure ? xmalloc_secure( r->contextsize ) : xmalloc( r->contextsize ); memcpy( context, r->context.c, r->contextsize ); (*r->final)( context ); digest = (*r->read)( context ); if( buflen > r->mdlen ) buflen = r->mdlen; memcpy( buffer, digest, buflen ); xfree(context); return buflen; } int md_get_algo( MD_HANDLE a ) { struct md_digest_list_s *r; if( (r=a->list) ) { if( r->next ) log_error("WARNING: more than algorithm in md_get_algo()\n"); return r->algo; } return 0; } /* Returns true if a given algo is in use in a md */ int md_algo_present( MD_HANDLE a, int algo ) { struct md_digest_list_s *r=a->list; while(r) { if(r->algo==algo) return 1; r=r->next; } return 0; } /**************** * Return the length of the digest */ int md_digest_length( int algo ) { struct md_digest_list_s *r; do { for(r = digest_list; r; r = r->next ) { if( r->algo == algo ) return r->mdlen; } } while( !r && load_digest_module () ); log_error("WARNING: no length for md algo %d\n", algo); return 0; } /* Hmmm: add a mode to enumerate the OIDs * to make g10/sig-check.c more portable */ const byte * md_asn_oid( int algo, size_t *asnlen, size_t *mdlen ) { struct md_digest_list_s *r; do { for(r = digest_list; r; r = r->next ) { if( r->algo == algo ) { if( asnlen ) *asnlen = r->asnlen; if( mdlen ) *mdlen = r->mdlen; return r->asnoid; } } } while( !r && load_digest_module () ); log_bug("no asn for md algo %d\n", algo); return NULL; } void md_start_debug( MD_HANDLE md, const char *suffix ) { static int idx=0; char buf[25]; if( md->debug ) { log_debug("Oops: md debug already started\n"); return; } idx++; sprintf(buf, "dbgmd-%05d" EXTSEP_S "%.10s", idx, suffix ); md->debug = fopen(buf, "wb"); if( !md->debug ) log_debug("md debug: can't open %s\n", buf ); } void md_stop_debug( MD_HANDLE md ) { if( md->debug ) { if( md->bufcount ) md_write( md, NULL, 0 ); fclose(md->debug); md->debug = NULL; } #ifdef HAVE_U64_TYPEDEF { /* a kludge to pull in the __muldi3 for Solaris */ #if GNUPG_GCC_VERSION >= 40600 # pragma GCC diagnostic ignored "-Wunused-but-set-variable" #endif volatile u32 a = (u32)(ulong)md; volatile u64 b = 42; volatile u64 c; c = a * b; } #endif } gnupg-1.4.20/cipher/primegen.c0000644000175000017500000003373012635262326013100 00000000000000/* primegen.c - prime number generator * Copyright (C) 1998, 1999, 2000, 2001 Free Software Foundation, Inc. * * This file is part of GnuPG. * * GnuPG is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 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, see . * * *********************************************************************** * The algorithm used to generate practically save primes is due to * Lim and Lee as described in the CRYPTO '97 proceedings (ISBN3540633847) * page 260. */ #include #include #include #include #include #include "util.h" #include "mpi.h" #include "cipher.h" #include "i18n.h" static int no_of_small_prime_numbers; static MPI gen_prime( unsigned nbits, int mode, int randomlevel ); static int check_prime( MPI prime, MPI val_2 ); static int is_prime( MPI n, int steps, int *count ); static void m_out_of_n( char *array, int m, int n ); static void (*progress_cb) ( void *, int ); static void *progress_cb_data; void register_primegen_progress ( void (*cb)( void *, int), void *cb_data ) { progress_cb = cb; progress_cb_data = cb_data; } static void progress( int c ) { if ( progress_cb ) progress_cb ( progress_cb_data, c ); else fputc( c, stderr ); } /**************** * Generate a prime number (stored in secure memory) */ MPI generate_secret_prime( unsigned nbits ) { MPI prime; prime = gen_prime( nbits, 1, 2 ); progress('\n'); return prime; } MPI generate_public_prime( unsigned nbits ) { MPI prime; prime = gen_prime( nbits, 0, 2 ); progress('\n'); return prime; } /**************** * We do not need to use the strongest RNG because we gain no extra * security from it - The prime number is public and we could also * offer the factors for those who are willing to check that it is * indeed a strong prime. * * mode 0: Standard * 1: Make sure that at least one factor is of size qbits. */ MPI generate_elg_prime( int mode, unsigned pbits, unsigned qbits, MPI g, MPI **ret_factors ) { int n; /* number of factors */ int m; /* number of primes in pool */ unsigned fbits; /* length of prime factors */ MPI *factors; /* current factors */ MPI *pool; /* pool of primes */ MPI q; /* first prime factor (variable)*/ MPI prime; /* prime test value */ MPI q_factor; /* used for mode 1 */ byte *perms = NULL; int i, j; int count1, count2; unsigned nprime; unsigned req_qbits = qbits; /* the requested q bits size */ MPI val_2 = mpi_alloc_set_ui( 2 ); /* find number of needed prime factors */ for(n=1; (pbits - qbits - 1) / n >= qbits; n++ ) ; n--; if( !n || (mode==1 && n < 2) ) log_fatal(_("can't gen prime with pbits=%u qbits=%u\n"), pbits, qbits ); if( mode == 1 ) { n--; fbits = (pbits - 2*req_qbits -1) / n; qbits = pbits - req_qbits - n*fbits; } else { fbits = (pbits - req_qbits -1) / n; qbits = pbits - n*fbits; } if( DBG_CIPHER ) log_debug("gen prime: pbits=%u qbits=%u fbits=%u/%u n=%d\n", pbits, req_qbits, qbits, fbits, n ); prime = mpi_alloc ( mpi_nlimb_hint_from_nbits (pbits) ); q = gen_prime( qbits, 0, 0 ); q_factor = mode==1? gen_prime( req_qbits, 0, 0 ) : NULL; /* allocate an array to hold the factors + 2 for later usage */ factors = xmalloc_clear( (n+2) * sizeof *factors ); /* make a pool of 3n+5 primes (this is an arbitrary value) */ m = n*3+5; if( mode == 1 ) m += 5; /* need some more for DSA */ if( m < 25 ) m = 25; pool = xmalloc_clear( m * sizeof *pool ); /* permutate over the pool of primes */ count1=count2=0; do { next_try: if( !perms ) { /* allocate new primes */ for(i=0; i < m; i++ ) { mpi_free(pool[i]); pool[i] = NULL; } /* init m_out_of_n() */ perms = xmalloc_clear( m ); for(i=0; i < n; i++ ) { perms[i] = 1; pool[i] = gen_prime( fbits, 0, 0 ); factors[i] = pool[i]; } } else { m_out_of_n( perms, n, m ); for(i=j=0; i < m && j < n ; i++ ) if( perms[i] ) { if( !pool[i] ) pool[i] = gen_prime( fbits, 0, 0 ); factors[j++] = pool[i]; } if( i == n ) { xfree(perms); perms = NULL; progress('!'); goto next_try; /* allocate new primes */ } } mpi_set( prime, q ); mpi_mul_ui( prime, prime, 2 ); if( mode == 1 ) mpi_mul( prime, prime, q_factor ); for(i=0; i < n; i++ ) mpi_mul( prime, prime, factors[i] ); mpi_add_ui( prime, prime, 1 ); nprime = mpi_get_nbits(prime); if( nprime < pbits ) { if( ++count1 > 20 ) { count1 = 0; qbits++; progress('>'); mpi_free (q); q = gen_prime( qbits, 0, 0 ); goto next_try; } } else count1 = 0; if( nprime > pbits ) { if( ++count2 > 20 ) { count2 = 0; qbits--; progress('<'); mpi_free (q); q = gen_prime( qbits, 0, 0 ); goto next_try; } } else count2 = 0; } while( !(nprime == pbits && check_prime( prime, val_2 )) ); if( DBG_CIPHER ) { progress('\n'); log_mpidump( "prime : ", prime ); log_mpidump( "factor q: ", q ); if( mode == 1 ) log_mpidump( "factor q0: ", q_factor ); for(i=0; i < n; i++ ) log_mpidump( "factor pi: ", factors[i] ); log_debug("bit sizes: prime=%u, q=%u", mpi_get_nbits(prime), mpi_get_nbits(q) ); if( mode == 1 ) fprintf(stderr, ", q0=%u", mpi_get_nbits(q_factor) ); for(i=0; i < n; i++ ) fprintf(stderr, ", p%d=%u", i, mpi_get_nbits(factors[i]) ); progress('\n'); } if( ret_factors ) { /* caller wants the factors */ *ret_factors = xmalloc_clear( (n+2) * sizeof **ret_factors); i = 0; if( mode == 1 ) { (*ret_factors)[i++] = mpi_copy( q_factor ); for(; i <= n; i++ ) (*ret_factors)[i] = mpi_copy( factors[i-1] ); } else { for(; i < n; i++ ) (*ret_factors)[i] = mpi_copy( factors[i] ); } } if( g ) { /* create a generator (start with 3)*/ MPI tmp = mpi_alloc( mpi_get_nlimbs(prime) ); MPI b = mpi_alloc( mpi_get_nlimbs(prime) ); MPI pmin1 = mpi_alloc( mpi_get_nlimbs(prime) ); if( mode == 1 ) BUG(); /* not yet implemented */ factors[n] = q; factors[n+1] = mpi_alloc_set_ui(2); mpi_sub_ui( pmin1, prime, 1 ); mpi_set_ui(g,2); do { mpi_add_ui(g, g, 1); if( DBG_CIPHER ) { log_debug("checking g: "); mpi_print( stderr, g, 1 ); } else progress('^'); for(i=0; i < n+2; i++ ) { /*fputc('~', stderr);*/ mpi_fdiv_q(tmp, pmin1, factors[i] ); /* (no mpi_pow(), but it is okay to use this with mod prime) */ mpi_powm(b, g, tmp, prime ); if( !mpi_cmp_ui(b, 1) ) break; } if( DBG_CIPHER ) progress('\n'); } while( i < n+2 ); mpi_free(factors[n+1]); mpi_free(tmp); mpi_free(b); mpi_free(pmin1); } if( !DBG_CIPHER ) progress('\n'); xfree( factors ); /* (factors are shallow copies) */ for(i=0; i < m; i++ ) mpi_free( pool[i] ); xfree( pool ); xfree(perms); mpi_free(val_2); mpi_free(q); return prime; } static MPI gen_prime( unsigned int nbits, int secret, int randomlevel ) { unsigned nlimbs; MPI prime, ptest, pminus1, val_2, val_3, result; int i; unsigned x, step; int count1, count2; int *mods; if( 0 && DBG_CIPHER ) log_debug("generate a prime of %u bits ", nbits ); if (nbits < 16) { log_error (_("can't generate a prime with less than %d bits\n"), 16); exit (2); } if( !no_of_small_prime_numbers ) { for(i=0; small_prime_numbers[i]; i++ ) no_of_small_prime_numbers++; } mods = xmalloc( no_of_small_prime_numbers * sizeof *mods ); /* Make nbits fit into MPI implementation. */ nlimbs = mpi_nlimb_hint_from_nbits (nbits); val_2 = mpi_alloc_set_ui( 2 ); val_3 = mpi_alloc_set_ui( 3); prime = secret? mpi_alloc_secure( nlimbs ): mpi_alloc( nlimbs ); result = mpi_alloc_like( prime ); pminus1= mpi_alloc_like( prime ); ptest = mpi_alloc_like( prime ); count1 = count2 = 0; for(;;) { /* try forvever */ int dotcount=0; /* generate a random number */ { char *p = get_random_bits( nbits, randomlevel, secret ); mpi_set_buffer( prime, p, (nbits+7)/8, 0 ); xfree(p); } /* Set high order bit to 1, set low order bit to 0. If we are generating a secret prime we are most probably doing that for RSA, to make sure that the modulus does have the requested keysize we set the 2 high order bits */ mpi_set_highbit( prime, nbits-1 ); if (secret) mpi_set_bit (prime, nbits-2); mpi_set_bit( prime, 0 ); /* calculate all remainders */ for(i=0; (x = small_prime_numbers[i]); i++ ) mods[i] = mpi_fdiv_r_ui(NULL, prime, x); /* now try some primes starting with prime */ for(step=0; step < 20000; step += 2 ) { /* check against all the small primes we have in mods */ count1++; for(i=0; (x = small_prime_numbers[i]); i++ ) { while( mods[i] + step >= x ) mods[i] -= x; if( !(mods[i] + step) ) break; } if( x ) continue; /* found a multiple of an already known prime */ mpi_add_ui( ptest, prime, step ); /* do a faster Fermat test */ count2++; mpi_sub_ui( pminus1, ptest, 1); mpi_powm( result, val_2, pminus1, ptest ); if( !mpi_cmp_ui( result, 1 ) ) { /* not composite */ /* perform stronger tests */ if( is_prime(ptest, 5, &count2 ) ) { if( !mpi_test_bit( ptest, nbits-1 ) ) { progress('\n'); log_debug("overflow in prime generation\n"); break; /* step loop, continue with a new prime */ } mpi_free(val_2); mpi_free(val_3); mpi_free(result); mpi_free(pminus1); mpi_free(prime); xfree(mods); return ptest; } } if( ++dotcount == 10 ) { progress('.'); dotcount = 0; } } progress(':'); /* restart with a new random value */ } } /**************** * Returns: true if this may be a prime */ static int check_prime( MPI prime, MPI val_2 ) { int i; unsigned x; int count=0; /* check against small primes */ for(i=0; (x = small_prime_numbers[i]); i++ ) { if( mpi_divisible_ui( prime, x ) ) return 0; } /* a quick fermat test */ { MPI result = mpi_alloc_like( prime ); MPI pminus1 = mpi_alloc_like( prime ); mpi_sub_ui( pminus1, prime, 1); mpi_powm( result, val_2, pminus1, prime ); mpi_free( pminus1 ); if( mpi_cmp_ui( result, 1 ) ) { /* if composite */ mpi_free( result ); progress('.'); return 0; } mpi_free( result ); } /* perform stronger tests */ if( is_prime(prime, 5, &count ) ) return 1; /* is probably a prime */ progress('.'); return 0; } /**************** * Return true if n is probably a prime */ static int is_prime( MPI n, int steps, int *count ) { MPI x = mpi_alloc( mpi_get_nlimbs( n ) ); MPI y = mpi_alloc( mpi_get_nlimbs( n ) ); MPI z = mpi_alloc( mpi_get_nlimbs( n ) ); MPI nminus1 = mpi_alloc( mpi_get_nlimbs( n ) ); MPI a2 = mpi_alloc_set_ui( 2 ); MPI q; unsigned i, j, k; int rc = 0; unsigned nbits = mpi_get_nbits( n ); mpi_sub_ui( nminus1, n, 1 ); /* find q and k, so that n = 1 + 2^k * q */ q = mpi_copy( nminus1 ); k = mpi_trailing_zeros( q ); mpi_tdiv_q_2exp(q, q, k); for(i=0 ; i < steps; i++ ) { ++*count; if( !i ) { mpi_set_ui( x, 2 ); } else { char *p; p = get_random_bits( nbits, 0, 0 ); mpi_set_buffer( x, p, (nbits+7)/8, 0 ); xfree(p); /* Make sure that the number is smaller than the prime * and keep the randomness of the high bit. */ if( mpi_test_bit( x, nbits-2 ) ) { mpi_set_highbit( x, nbits-2 ); /* Clear all higher bits */ } else { mpi_set_highbit( x, nbits-2 ); mpi_clear_bit( x, nbits-2 ); } assert( mpi_cmp( x, nminus1 ) < 0 && mpi_cmp_ui( x, 1 ) > 0 ); } mpi_powm( y, x, q, n); if( mpi_cmp_ui(y, 1) && mpi_cmp( y, nminus1 ) ) { for( j=1; j < k && mpi_cmp( y, nminus1 ); j++ ) { mpi_powm(y, y, a2, n); if( !mpi_cmp_ui( y, 1 ) ) goto leave; /* not a prime */ } if( mpi_cmp( y, nminus1 ) ) goto leave; /* not a prime */ } progress('+'); } rc = 1; /* may be a prime */ leave: mpi_free( x ); mpi_free( y ); mpi_free( z ); mpi_free( nminus1 ); mpi_free( q ); mpi_free (a2); return rc; } static void m_out_of_n( char *array, int m, int n ) { int i=0, i1=0, j=0, jp=0, j1=0, k1=0, k2=0; if( !m || m >= n ) return; if( m == 1 ) { /* special case */ for(i=0; i < n; i++ ) if( array[i] ) { array[i++] = 0; if( i >= n ) i = 0; array[i] = 1; return; } BUG(); } for(j=1; j < n; j++ ) { if( array[n-1] == array[n-j-1] ) continue; j1 = j; break; } if( m & 1 ) { /* m is odd */ if( array[n-1] ) { if( j1 & 1 ) { k1 = n - j1; k2 = k1+2; if( k2 > n ) k2 = n; goto leave; } goto scan; } k2 = n - j1 - 1; if( k2 == 0 ) { k1 = i; k2 = n - j1; } else if( array[k2] && array[k2-1] ) k1 = n; else k1 = k2 + 1; } else { /* m is even */ if( !array[n-1] ) { k1 = n - j1; k2 = k1 + 1; goto leave; } if( !(j1 & 1) ) { k1 = n - j1; k2 = k1+2; if( k2 > n ) k2 = n; goto leave; } scan: jp = n - j1 - 1; for(i=1; i <= jp; i++ ) { i1 = jp + 2 - i; if( array[i1-1] ) { if( array[i1-2] ) { k1 = i1 - 1; k2 = n - j1; } else { k1 = i1 - 1; k2 = n + 1 - j1; } goto leave; } } k1 = 1; k2 = n + 1 - m; } leave: array[k1-1] = !array[k1-1]; array[k2-1] = !array[k2-1]; } gnupg-1.4.20/cipher/elgamal.h0000644000175000017500000000246212635262326012677 00000000000000/* elgamal.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 3 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, see . */ #ifndef G10_ELGAMAL_H #define G10_ELGAMAL_H int elg_generate( int algo, unsigned nbits, MPI *skey, MPI **retfactors ); int elg_check_secret_key( int algo, MPI *skey ); int elg_encrypt( int algo, MPI *resarr, MPI data, MPI *pkey ); int elg_decrypt( int algo, MPI *result, MPI *data, MPI *skey ); int elg_sign( int algo, MPI *resarr, MPI data, MPI *skey ); int elg_verify( int algo, MPI hash, MPI *data, MPI *pkey ); unsigned elg_get_nbits( int algo, MPI *pkey ); const char *elg_get_info( int algo, int *npkey, int *nskey, int *nenc, int *nsig, int *use ); #endif /*G10_ELGAMAL_H*/